From ec2ccba8d8027a4563dc059fb2a746f79b5eb3aa Mon Sep 17 00:00:00 2001 From: Vladislav Polyakov Date: Fri, 1 Nov 2024 13:48:01 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=98=AD=20Turn=20off=20attemps=20charts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/post.js | 10 ++-------- init/src/report/default.ts | 6 ------ 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/init/post.js b/init/post.js index d476373..90ae85e 100644 --- a/init/post.js +++ b/init/post.js @@ -93105,12 +93105,6 @@ ${renderChart("operation_type=read", metrics["read_throughput"], "Time, m", "Ope ${renderChart("operation_type=write", metrics["write_throughput"], "Time, m", "Operations")} -### Retry Attempts Per Second - -${renderChart("operation_type=read", metrics["read_attempts"], "Time, m", "Attempts")} - -${renderChart("operation_type=write", metrics["write_attempts"], "Time, m", "Attempts")} - ### 95th Percentile Latency ${renderChart("operation_type=read", metrics["read_latency_ms"], "Time, m", "Latency, ms")} @@ -93259,5 +93253,5 @@ async function getCurrentWorkflowRuns(branch) { fs.rmSync(cwd, { recursive: true }); })(); -//# debugId=D6A05457B6536E0C64756E2164756E21 -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL2xpYi9pby11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9saWIvaW8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvbGliL3Rvb2xydW5uZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvbGliL2V4ZWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9jb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9maWxlLWNvbW1hbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9wcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHVubmVsL2xpYi90dW5uZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi90aW1lcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL3N0cmVhbXNlYXJjaC9zYm1oLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9nZXRMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0hlYWRlclBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2RlY29kZVRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvcGFyc2VQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvbXVsdGlwYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL0RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi9tYWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3dlYmlkbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9kYXRhVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2ZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZm9ybWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25uZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9ub2RlL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wtc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYmFsYW5jZWQtcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYWJvcnQtc2lnbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcHJveHktYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9oZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29va2llcy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2V2ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC93ZWJzb2NrZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9saWIvYXV0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvb2lkYy11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvc3VtbWFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGF0aC11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGxhdGZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL2NvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvY29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLXR5cGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2Jhc2U2NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcHJvdG9idWZqcy11dGY4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktZm9ybWF0LWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9nb29nLXZhcmludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcGItbG9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYmluYXJ5LXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYXNzZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktd3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLWZvcm1hdC1jb250cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvbWVzc2FnZS10eXBlLWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9sb3dlci1jYW1lbC1jYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWluZm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL29uZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXR5cGUtY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24tcmVhZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24td3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1lcXVhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL21lc3NhZ2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jb250YWlucy1tZXNzYWdlLXR5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2VudW0tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvZ2VuZXJhdGVkL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24taW5mby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZpY2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1lcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS1ycGMvYnVpbGQvY29tbW9uanMvZGVmZXJyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9ycGMtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3VuYXJ5LWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9zZXJ2ZXItc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9jbGllbnQtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9kdXBsZXgtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy90ZXN0LXRyYW5zcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZlci1jYWxsLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2Vycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvc2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbnRlcmNlcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvdC1vYmplY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2h0dHAuY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9nYXRld2F5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC50d2lycC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC9yZXRlbnRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC91cGxvYWQvcGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL3VzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtemlwLXNwZWNpZmljYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2p3dC1kZWNvZGUvYnVpbGQvand0LWRlY29kZS5janMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2xvZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvbG9nZ2VyL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9sb2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9hYm9ydC1jb250cm9sbGVyL2Rpc3QvY29tbW9uanMvQWJvcnRFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXIvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9yYW5kb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9kZWxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Fib3J0ZXJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL29iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvc2hhMjU2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvdHlwZUd1YXJkcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL3V1aWRVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NoZWNrRW52aXJvbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9ieXRlc0VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL3Nhbml0aXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2xvZ1BvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlZGlyZWN0UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC91c2VyQWdlbnRQbGF0Zm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvdXNlckFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdXNlckFnZW50UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90eXBlR3VhcmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9tdWx0aXBhcnRQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvcmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9odHRwSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2Zvcm1EYXRhUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FnZW50LWJhc2UvZGlzdC9oZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hZ2VudC1iYXNlL2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvcGFyc2UtcHJveHktcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHAtcHJveHktYWdlbnQvZGlzdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3Byb3h5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGxzUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS10cmFjaW5nL2Rpc3QvY29tbW9uanMvdHJhY2luZ0NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL2luc3RydW1lbnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL3RyYWNpbmdDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvaW5zcGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3Jlc3RFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvbm9kZUh0dHBDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9kZWZhdWx0SHR0cENsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lUmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2V4cG9uZW50aWFsUmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGhyb3R0bGluZ1JldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90b2tlbkN5Y2xlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2JlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9uZEpzb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMva2V5Q3JlZGVudGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtYXV0aC9kaXN0L2NvbW1vbmpzL2F6dXJlTmFtZWRLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVTQVNDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvdG9rZW5DcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWh0dHAtY29tcGF0L2Rpc3QvY29tbW9uanMvcG9saWNpZXMvZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYmFzZTY0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbnRlcmZhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL29wZXJhdGlvbkhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvaW50ZXJmYWNlSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvdXJsSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvbG9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9zZXJ2aWNlQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtaHR0cC1jb21wYXQvZGlzdC9jb21tb25qcy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2V4dGVuZGVkQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRBZGFwdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcHRpb25zQnVpbGRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIveG1sTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvRG9jVHlwZVJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RybnVtL3N0cm51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9pZ25vcmVBdHRyaWJ1dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcmRlcmVkT2JqUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9ub2RlMmpzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL1hNTFBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxidWlsZGVyL29yZGVyZWRKczJYbWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sYnVpbGRlci9qc29uMnhtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9meHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUteG1sL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvaHR0cC9vcGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL3BvbGxlci9wb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2h0dHAvcG9sbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9sZWdhY3kvbHJvRW5naW5lL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L3BvbGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L2xyb0VuZ2luZS9scm9FbmdpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9scm9FbmdpbmUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9wb2xsT3BlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL3N0b3JhZ2UtYmxvYi9kaXN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL2Jsb2ItdXBsb2FkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvbGliL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9taW5pbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRkaXItZ2xvYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXN5bmMvZGlzdC9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvcG9seWZpbGxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9sZWdhY3ktc3RyZWFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvY2xvbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2dyYWNlZnVsLWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pcy1zdHJlYW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9saWIvbGF6eXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXBhdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGVmYXVsdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9wcmltb3JkaWFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXZlbnQtdGFyZ2V0LXNoaW0vZGlzdC9ldmVudC10YXJnZXQtc2hpbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWJvcnQtY29udHJvbGxlci9kaXN0L2Fib3J0LWNvbnRyb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL291cnMvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3ZhbGlkYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvbGVnYWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYWRkLWFib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleGlmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9jb21wb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvb3BlcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL3N0cmVhbS9wcm9taXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXNXaXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2VPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9kaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuaXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC91bmlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2Fzc2VydC12YWxpZC1wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9icmFjZS1leHByZXNzaW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvdW5lc2NhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2FzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvZXNjYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmlwYXNzL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9jb21tb25qcy9wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvaWdub3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvcHJvY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvd2Fsa2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvZ2xvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2hhcy1tYWdpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci9saWIvY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL2FyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9nZW5lcmFsLXB1cnBvc2UtYml0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb21wcmVzcy1jb21tb25zL2xpYi9hcmNoaXZlcnMvemlwL3VuaXgtc3RhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL3V0aWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy9hcmNoaXZlLW91dHB1dC1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYy0zMi9jcmMzMi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY3JjMzItc3RyZWFtL2xpYi9jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvZGVmbGF0ZS1jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvY29tcHJlc3MtY29tbW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvemlwLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9xdWV1ZS10aWNrL3F1ZXVlLW1pY3JvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVldWUtdGljay9wcm9jZXNzLW5leHQtdGljay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1maWZvL2ZpeGVkLXNpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZmlmby9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi9wYXNzLXRocm91Z2gtZGVjb2Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi91dGY4LWRlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RleHQtZGVjb2Rlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RyZWFteC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYjRhL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90YXItc3RyZWFtL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vcGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9idWZmZXItY3JjMzIvZGlzdC9pbmRleC5janMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2xpYi9wbHVnaW5zL2pzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL3ppcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bml2ZXJzYWwtdXNlci1hZ2VudC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2lzLXBsYWluLW9iamVjdC9kaXN0L2lzLXBsYWluLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvZW5kcG9pbnQvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93ZWJpZGwtY29udmVyc2lvbnMvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHI0Ni9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvd2hhdHdnLXVybC9saWIvdXJsLXN0YXRlLW1hY2hpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC1pbXBsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi9VUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3B1YmxpYy1hcGkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL25vZGUtZmV0Y2gvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZXByZWNhdGlvbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3dyYXBweS93cmFwcHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL29uY2Uvb25jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9ncmFwaHFsL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90cmF2ZXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhaW5zYXcvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2J1ZmZlcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JpbmFyeS9saWIvdmFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmluYXJ5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL21hdGNoZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL2VudHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL3VuemlwLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL2xpYi9wYXJzZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ta2RpcnAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuemlwLXN0cmVhbS9saWIvZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL3VuemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvZG93bmxvYWQvZG93bmxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL3JldHJ5LW9wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JvdHRsZW5lY2svbGlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXRyeS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2dldC1hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL2RlbGV0ZS9kZWxldGUtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2xpc3QtYXJ0aWZhY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2ludGVyZmFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvZ3JhcGhxbC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgInNyYy9qb2JzL3Bvc3QudHMiLCAic3JjL2NvbnN0YW50cy50cyIsICJzcmMvbWV0cmljcy9wcm9tZXRoZXVzLnRzIiwgInNyYy9tZXRyaWNzL2RlZmF1bHQudHMiLCAic3JjL3JlcG9ydC9jb2xvcnMudHMiLCAic3JjL3JlcG9ydC9jaGFydC50cyIsICJzcmMvcmVwb3J0L2RlZmF1bHQudHMiLCAic3JjL3dvcmtmbG93L3dvcmtmbG93LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9hO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDbWRQYXRoID0gZXhwb3J0cy50cnlHZXRFeGVjdXRhYmxlUGF0aCA9IGV4cG9ydHMuaXNSb290ZWQgPSBleHBvcnRzLmlzRGlyZWN0b3J5ID0gZXhwb3J0cy5leGlzdHMgPSBleHBvcnRzLlJFQURPTkxZID0gZXhwb3J0cy5VVl9GU19PX0VYTE9DSyA9IGV4cG9ydHMuSVNfV0lORE9XUyA9IGV4cG9ydHMudW5saW5rID0gZXhwb3J0cy5zeW1saW5rID0gZXhwb3J0cy5zdGF0ID0gZXhwb3J0cy5ybWRpciA9IGV4cG9ydHMucm0gPSBleHBvcnRzLnJlbmFtZSA9IGV4cG9ydHMucmVhZGxpbmsgPSBleHBvcnRzLnJlYWRkaXIgPSBleHBvcnRzLm9wZW4gPSBleHBvcnRzLm1rZGlyID0gZXhwb3J0cy5sc3RhdCA9IGV4cG9ydHMuY29weUZpbGUgPSBleHBvcnRzLmNobW9kID0gdm9pZCAwO1xuY29uc3QgZnMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImZzXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuX2EgPSBmcy5wcm9taXNlc1xuLy8gZXhwb3J0IGNvbnN0IHtvcGVufSA9ICdmcydcbiwgZXhwb3J0cy5jaG1vZCA9IF9hLmNobW9kLCBleHBvcnRzLmNvcHlGaWxlID0gX2EuY29weUZpbGUsIGV4cG9ydHMubHN0YXQgPSBfYS5sc3RhdCwgZXhwb3J0cy5ta2RpciA9IF9hLm1rZGlyLCBleHBvcnRzLm9wZW4gPSBfYS5vcGVuLCBleHBvcnRzLnJlYWRkaXIgPSBfYS5yZWFkZGlyLCBleHBvcnRzLnJlYWRsaW5rID0gX2EucmVhZGxpbmssIGV4cG9ydHMucmVuYW1lID0gX2EucmVuYW1lLCBleHBvcnRzLnJtID0gX2Eucm0sIGV4cG9ydHMucm1kaXIgPSBfYS5ybWRpciwgZXhwb3J0cy5zdGF0ID0gX2Euc3RhdCwgZXhwb3J0cy5zeW1saW5rID0gX2Euc3ltbGluaywgZXhwb3J0cy51bmxpbmsgPSBfYS51bmxpbms7XG4vLyBleHBvcnQgY29uc3Qge29wZW59ID0gJ2ZzJ1xuZXhwb3J0cy5JU19XSU5ET1dTID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9kMDE1M2FlZTM2NzQyMmQwODU4MTA1YWJlYzE4NmRhNGRmZjBhMGM1L2RlcHMvdXYvaW5jbHVkZS91di93aW4uaCNMNjkxXG5leHBvcnRzLlVWX0ZTX09fRVhMT0NLID0gMHgxMDAwMDAwMDtcbmV4cG9ydHMuUkVBRE9OTFkgPSBmcy5jb25zdGFudHMuT19SRE9OTFk7XG5mdW5jdGlvbiBleGlzdHMoZnNQYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIGV4cG9ydHMuc3RhdChmc1BhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG5leHBvcnRzLmV4aXN0cyA9IGV4aXN0cztcbmZ1bmN0aW9uIGlzRGlyZWN0b3J5KGZzUGF0aCwgdXNlU3RhdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSB1c2VTdGF0ID8geWllbGQgZXhwb3J0cy5zdGF0KGZzUGF0aCkgOiB5aWVsZCBleHBvcnRzLmxzdGF0KGZzUGF0aCk7XG4gICAgICAgIHJldHVybiBzdGF0cy5pc0RpcmVjdG9yeSgpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5pc0RpcmVjdG9yeSA9IGlzRGlyZWN0b3J5O1xuLyoqXG4gKiBPbiBPU1gvTGludXgsIHRydWUgaWYgcGF0aCBzdGFydHMgd2l0aCAnLycuIE9uIFdpbmRvd3MsIHRydWUgZm9yIHBhdGhzIGxpa2U6XG4gKiBcXCwgXFxoZWxsbywgXFxcXGhlbGxvXFxzaGFyZSwgQzosIGFuZCBDOlxcaGVsbG8gKGFuZCBjb3JyZXNwb25kaW5nIGFsdGVybmF0ZSBzZXBhcmF0b3IgY2FzZXMpLlxuICovXG5mdW5jdGlvbiBpc1Jvb3RlZChwKSB7XG4gICAgcCA9IG5vcm1hbGl6ZVNlcGFyYXRvcnMocCk7XG4gICAgaWYgKCFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaXNSb290ZWQoKSBwYXJhbWV0ZXIgXCJwXCIgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgcmV0dXJuIChwLnN0YXJ0c1dpdGgoJ1xcXFwnKSB8fCAvXltBLVpdOi9pLnRlc3QocCkgLy8gZS5nLiBcXCBvciBcXGhlbGxvIG9yIFxcXFxoZWxsb1xuICAgICAgICApOyAvLyBlLmcuIEM6IG9yIEM6XFxoZWxsb1xuICAgIH1cbiAgICByZXR1cm4gcC5zdGFydHNXaXRoKCcvJyk7XG59XG5leHBvcnRzLmlzUm9vdGVkID0gaXNSb290ZWQ7XG4vKipcbiAqIEJlc3QgZWZmb3J0IGF0dGVtcHQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaWxlIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZS5cbiAqIEBwYXJhbSBmaWxlUGF0aCAgICBmaWxlIHBhdGggdG8gY2hlY2tcbiAqIEBwYXJhbSBleHRlbnNpb25zICBhZGRpdGlvbmFsIGZpbGUgZXh0ZW5zaW9ucyB0byB0cnlcbiAqIEByZXR1cm4gaWYgZmlsZSBleGlzdHMgYW5kIGlzIGV4ZWN1dGFibGUsIHJldHVybnMgdGhlIGZpbGUgcGF0aC4gb3RoZXJ3aXNlIGVtcHR5IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gdHJ5R2V0RXhlY3V0YWJsZVBhdGgoZmlsZVBhdGgsIGV4dGVuc2lvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3RhdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyB0ZXN0IGZpbGUgZXhpc3RzXG4gICAgICAgICAgICBzdGF0cyA9IHlpZWxkIGV4cG9ydHMuc3RhdChmaWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgaWYgZXhlY3V0YWJsZSBmaWxlIGV4aXN0cyAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgICAgICAvLyBvbiBXaW5kb3dzLCB0ZXN0IGZvciB2YWxpZCBleHRlbnNpb25cbiAgICAgICAgICAgICAgICBjb25zdCB1cHBlckV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zb21lKHZhbGlkRXh0ID0+IHZhbGlkRXh0LnRvVXBwZXJDYXNlKCkgPT09IHVwcGVyRXh0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5peEV4ZWN1dGFibGUoc3RhdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJ5IGVhY2ggZXh0ZW5zaW9uXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgZmlsZVBhdGggPSBvcmlnaW5hbEZpbGVQYXRoICsgZXh0ZW5zaW9uO1xuICAgICAgICAgICAgc3RhdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN0YXRzID0geWllbGQgZXhwb3J0cy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBVbmV4cGVjdGVkIGVycm9yIGF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIGlmIGV4ZWN1dGFibGUgZmlsZSBleGlzdHMgJyR7ZmlsZVBhdGh9JzogJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgICAgICAvLyBwcmVzZXJ2ZSB0aGUgY2FzZSBvZiB0aGUgYWN0dWFsIGZpbGUgKHNpbmNlIGFuIGV4dGVuc2lvbiB3YXMgYXBwZW5kZWQpXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBwZXJOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYWN0dWFsTmFtZSBvZiB5aWVsZCBleHBvcnRzLnJlYWRkaXIoZGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cHBlck5hbWUgPT09IGFjdHVhbE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJlY3RvcnksIGFjdHVhbE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBVbmV4cGVjdGVkIGVycm9yIGF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgY2FzZSBvZiB0aGUgZmlsZSAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbml4RXhlY3V0YWJsZShzdGF0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG59XG5leHBvcnRzLnRyeUdldEV4ZWN1dGFibGVQYXRoID0gdHJ5R2V0RXhlY3V0YWJsZVBhdGg7XG5mdW5jdGlvbiBub3JtYWxpemVTZXBhcmF0b3JzKHApIHtcbiAgICBwID0gcCB8fCAnJztcbiAgICBpZiAoZXhwb3J0cy5JU19XSU5ET1dTKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgc2xhc2hlcyBvbiBXaW5kb3dzXG4gICAgICAgIHAgPSBwLnJlcGxhY2UoL1xcLy9nLCAnXFxcXCcpO1xuICAgICAgICAvLyByZW1vdmUgcmVkdW5kYW50IHNsYXNoZXNcbiAgICAgICAgcmV0dXJuIHAucmVwbGFjZSgvXFxcXFxcXFwrL2csICdcXFxcJyk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgc2xhc2hlc1xuICAgIHJldHVybiBwLnJlcGxhY2UoL1xcL1xcLysvZywgJy8nKTtcbn1cbi8vIG9uIE1hYy9MaW51eCwgdGVzdCB0aGUgZXhlY3V0ZSBiaXRcbi8vICAgICBSICAgVyAgWCAgUiAgVyBYIFIgVyBYXG4vLyAgIDI1NiAxMjggNjQgMzIgMTYgOCA0IDIgMVxuZnVuY3Rpb24gaXNVbml4RXhlY3V0YWJsZShzdGF0cykge1xuICAgIHJldHVybiAoKHN0YXRzLm1vZGUgJiAxKSA+IDAgfHxcbiAgICAgICAgKChzdGF0cy5tb2RlICYgOCkgPiAwICYmIHN0YXRzLmdpZCA9PT0gcHJvY2Vzcy5nZXRnaWQoKSkgfHxcbiAgICAgICAgKChzdGF0cy5tb2RlICYgNjQpID4gMCAmJiBzdGF0cy51aWQgPT09IHByb2Nlc3MuZ2V0dWlkKCkpKTtcbn1cbi8vIEdldCB0aGUgcGF0aCBvZiBjbWQuZXhlIGluIHdpbmRvd3NcbmZ1bmN0aW9uIGdldENtZFBhdGgoKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9jZXNzLmVudlsnQ09NU1BFQyddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgY21kLmV4ZWA7XG59XG5leHBvcnRzLmdldENtZFBhdGggPSBnZXRDbWRQYXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW8tdXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maW5kSW5QYXRoID0gZXhwb3J0cy53aGljaCA9IGV4cG9ydHMubWtkaXJQID0gZXhwb3J0cy5ybVJGID0gZXhwb3J0cy5tdiA9IGV4cG9ydHMuY3AgPSB2b2lkIDA7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCJhc3NlcnRcIik7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbmNvbnN0IGlvVXRpbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9pby11dGlsXCIpKTtcbi8qKlxuICogQ29waWVzIGEgZmlsZSBvciBmb2xkZXIuXG4gKiBCYXNlZCBvZmYgb2Ygc2hlbGxqcyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9zaGVsbGpzL3NoZWxsanMvYmxvYi85MjM3ZjY2YzUyZTVkYWE0MDQ1OGY5NGY5NTY1ZTE4ZTgxMzJmNWE2L3NyYy9jcC5qc1xuICpcbiAqIEBwYXJhbSAgICAgc291cmNlICAgIHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0gICAgIGRlc3QgICAgICBkZXN0aW5hdGlvbiBwYXRoXG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgICBvcHRpb25hbC4gU2VlIENvcHlPcHRpb25zLlxuICovXG5mdW5jdGlvbiBjcChzb3VyY2UsIGRlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHsgZm9yY2UsIHJlY3Vyc2l2ZSwgY29weVNvdXJjZURpcmVjdG9yeSB9ID0gcmVhZENvcHlPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBkZXN0U3RhdCA9ICh5aWVsZCBpb1V0aWwuZXhpc3RzKGRlc3QpKSA/IHlpZWxkIGlvVXRpbC5zdGF0KGRlc3QpIDogbnVsbDtcbiAgICAgICAgLy8gRGVzdCBpcyBhbiBleGlzdGluZyBmaWxlLCBidXQgbm90IGZvcmNpbmdcbiAgICAgICAgaWYgKGRlc3RTdGF0ICYmIGRlc3RTdGF0LmlzRmlsZSgpICYmICFmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGRlc3QgaXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBzaG91bGQgY29weSBpbnNpZGUuXG4gICAgICAgIGNvbnN0IG5ld0Rlc3QgPSBkZXN0U3RhdCAmJiBkZXN0U3RhdC5pc0RpcmVjdG9yeSgpICYmIGNvcHlTb3VyY2VEaXJlY3RvcnlcbiAgICAgICAgICAgID8gcGF0aC5qb2luKGRlc3QsIHBhdGguYmFzZW5hbWUoc291cmNlKSlcbiAgICAgICAgICAgIDogZGVzdDtcbiAgICAgICAgaWYgKCEoeWllbGQgaW9VdGlsLmV4aXN0cyhzb3VyY2UpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAke3NvdXJjZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VTdGF0ID0geWllbGQgaW9VdGlsLnN0YXQoc291cmNlKTtcbiAgICAgICAgaWYgKHNvdXJjZVN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgaWYgKCFyZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjb3B5LiAke3NvdXJjZX0gaXMgYSBkaXJlY3RvcnksIGJ1dCB0cmllZCB0byBjb3B5IHdpdGhvdXQgcmVjdXJzaXZlIGZsYWcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjcERpclJlY3Vyc2l2ZShzb3VyY2UsIG5ld0Rlc3QsIDAsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXRoLnJlbGF0aXZlKHNvdXJjZSwgbmV3RGVzdCkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgLy8gYSBmaWxlIGNhbm5vdCBiZSBjb3BpZWQgdG8gaXRzZWxmXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuZXdEZXN0fScgYW5kICcke3NvdXJjZX0nIGFyZSB0aGUgc2FtZSBmaWxlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCBjb3B5RmlsZShzb3VyY2UsIG5ld0Rlc3QsIGZvcmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5jcCA9IGNwO1xuLyoqXG4gKiBNb3ZlcyBhIHBhdGguXG4gKlxuICogQHBhcmFtICAgICBzb3VyY2UgICAgc291cmNlIHBhdGhcbiAqIEBwYXJhbSAgICAgZGVzdCAgICAgIGRlc3RpbmF0aW9uIHBhdGhcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgIG9wdGlvbmFsLiBTZWUgTW92ZU9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG12KHNvdXJjZSwgZGVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCkpIHtcbiAgICAgICAgICAgIGxldCBkZXN0RXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh5aWVsZCBpb1V0aWwuaXNEaXJlY3RvcnkoZGVzdCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBkZXN0IGlzIGRpcmVjdG9yeSBjb3B5IHNyYyBpbnRvIGRlc3RcbiAgICAgICAgICAgICAgICBkZXN0ID0gcGF0aC5qb2luKGRlc3QsIHBhdGguYmFzZW5hbWUoc291cmNlKSk7XG4gICAgICAgICAgICAgICAgZGVzdEV4aXN0cyA9IHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVzdEV4aXN0cykge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZvcmNlID09IG51bGwgfHwgb3B0aW9ucy5mb3JjZSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBybVJGKGRlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBta2RpclAocGF0aC5kaXJuYW1lKGRlc3QpKTtcbiAgICAgICAgeWllbGQgaW9VdGlsLnJlbmFtZShzb3VyY2UsIGRlc3QpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5tdiA9IG12O1xuLyoqXG4gKiBSZW1vdmUgYSBwYXRoIHJlY3Vyc2l2ZWx5IHdpdGggZm9yY2VcbiAqXG4gKiBAcGFyYW0gaW5wdXRQYXRoIHBhdGggdG8gcmVtb3ZlXG4gKi9cbmZ1bmN0aW9uIHJtUkYoaW5wdXRQYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKGlvVXRpbC5JU19XSU5ET1dTKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgaW52YWxpZCBjaGFyYWN0ZXJzXG4gICAgICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2ZpbGVpby9uYW1pbmctYS1maWxlXG4gICAgICAgICAgICBpZiAoL1sqXCI8PnxdLy50ZXN0KGlucHV0UGF0aCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgcGF0aCBtdXN0IG5vdCBjb250YWluIGAqYCwgYFwiYCwgYDxgLCBgPmAgb3IgYHxgIG9uIFdpbmRvd3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gbm90ZSBpZiBwYXRoIGRvZXMgbm90IGV4aXN0LCBlcnJvciBpcyBzaWxlbnRcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5ybShpbnB1dFBhdGgsIHtcbiAgICAgICAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtYXhSZXRyaWVzOiAzLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXRyeURlbGF5OiAzMDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSB3YXMgdW5hYmxlIHRvIGJlIHJlbW92ZWQgJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMucm1SRiA9IHJtUkY7XG4vKipcbiAqIE1ha2UgYSBkaXJlY3RvcnkuICBDcmVhdGVzIHRoZSBmdWxsIHBhdGggd2l0aCBmb2xkZXJzIGluIGJldHdlZW5cbiAqIFdpbGwgdGhyb3cgaWYgaXQgZmFpbHNcbiAqXG4gKiBAcGFyYW0gICBmc1BhdGggICAgICAgIHBhdGggdG8gY3JlYXRlXG4gKiBAcmV0dXJucyBQcm9taXNlPHZvaWQ+XG4gKi9cbmZ1bmN0aW9uIG1rZGlyUChmc1BhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBhc3NlcnRfMS5vayhmc1BhdGgsICdhIHBhdGggYXJndW1lbnQgbXVzdCBiZSBwcm92aWRlZCcpO1xuICAgICAgICB5aWVsZCBpb1V0aWwubWtkaXIoZnNQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubWtkaXJQID0gbWtkaXJQO1xuLyoqXG4gKiBSZXR1cm5zIHBhdGggb2YgYSB0b29sIGhhZCB0aGUgdG9vbCBhY3R1YWxseSBiZWVuIGludm9rZWQuICBSZXNvbHZlcyB2aWEgcGF0aHMuXG4gKiBJZiB5b3UgY2hlY2sgYW5kIHRoZSB0b29sIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIHRocm93LlxuICpcbiAqIEBwYXJhbSAgICAgdG9vbCAgICAgICAgICAgICAgbmFtZSBvZiB0aGUgdG9vbFxuICogQHBhcmFtICAgICBjaGVjayAgICAgICAgICAgICB3aGV0aGVyIHRvIGNoZWNrIGlmIHRvb2wgZXhpc3RzXG4gKiBAcmV0dXJucyAgIFByb21pc2U8c3RyaW5nPiAgIHBhdGggdG8gdG9vbFxuICovXG5mdW5jdGlvbiB3aGljaCh0b29sLCBjaGVjaykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghdG9vbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicGFyYW1ldGVyICd0b29sJyBpcyByZXF1aXJlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWN1cnNpdmUgd2hlbiBjaGVjaz10cnVlXG4gICAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgd2hpY2godG9vbCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGV4ZWN1dGFibGUgZmlsZTogJHt0b29sfS4gUGxlYXNlIHZlcmlmeSBlaXRoZXIgdGhlIGZpbGUgcGF0aCBleGlzdHMgb3IgdGhlIGZpbGUgY2FuIGJlIGZvdW5kIHdpdGhpbiBhIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuIEFsc28gdmVyaWZ5IHRoZSBmaWxlIGhhcyBhIHZhbGlkIGV4dGVuc2lvbiBmb3IgYW4gZXhlY3V0YWJsZSBmaWxlLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGV4ZWN1dGFibGUgZmlsZTogJHt0b29sfS4gUGxlYXNlIHZlcmlmeSBlaXRoZXIgdGhlIGZpbGUgcGF0aCBleGlzdHMgb3IgdGhlIGZpbGUgY2FuIGJlIGZvdW5kIHdpdGhpbiBhIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuIEFsc28gY2hlY2sgdGhlIGZpbGUgbW9kZSB0byB2ZXJpZnkgdGhlIGZpbGUgaXMgZXhlY3V0YWJsZS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSB5aWVsZCBmaW5kSW5QYXRoKHRvb2wpO1xuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbn1cbmV4cG9ydHMud2hpY2ggPSB3aGljaDtcbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIG9jY3VycmVuY2VzIG9mIHRoZSBnaXZlbiB0b29sIG9uIHRoZSBzeXN0ZW0gcGF0aC5cbiAqXG4gKiBAcmV0dXJucyAgIFByb21pc2U8c3RyaW5nW10+ICB0aGUgcGF0aHMgb2YgdGhlIHRvb2xcbiAqL1xuZnVuY3Rpb24gZmluZEluUGF0aCh0b29sKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCF0b29sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgJ3Rvb2wnIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJ1aWxkIHRoZSBsaXN0IG9mIGV4dGVuc2lvbnMgdG8gdHJ5XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbXTtcbiAgICAgICAgaWYgKGlvVXRpbC5JU19XSU5ET1dTICYmIHByb2Nlc3MuZW52WydQQVRIRVhUJ10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0ZW5zaW9uIG9mIHByb2Nlc3MuZW52WydQQVRIRVhUJ10uc3BsaXQocGF0aC5kZWxpbWl0ZXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnB1c2goZXh0ZW5zaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgaXQncyByb290ZWQsIHJldHVybiBpdCBpZiBleGlzdHMuIG90aGVyd2lzZSByZXR1cm4gZW1wdHkuXG4gICAgICAgIGlmIChpb1V0aWwuaXNSb290ZWQodG9vbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgaW9VdGlsLnRyeUdldEV4ZWN1dGFibGVQYXRoKHRvb2wsIGV4dGVuc2lvbnMpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtmaWxlUGF0aF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYW55IHBhdGggc2VwYXJhdG9ycywgcmV0dXJuIGVtcHR5XG4gICAgICAgIGlmICh0b29sLmluY2x1ZGVzKHBhdGguc2VwKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJ1aWxkIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5vdGUsIHRlY2huaWNhbGx5IFwid2hlcmVcIiBjaGVja3MgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIFdpbmRvd3MuIEZyb20gYSB0b29sa2l0IHBlcnNwZWN0aXZlLFxuICAgICAgICAvLyBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBub3QgZG8gdGhpcy4gQ2hlY2tpbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHNlZW1zIGxpa2UgbW9yZSBvZiBhIHVzZVxuICAgICAgICAvLyBjYXNlIG9mIGEgc2hlbGwsIGFuZCB0aGUgd2hpY2goKSBmdW5jdGlvbiBleHBvc2VkIGJ5IHRoZSB0b29sa2l0IHNob3VsZCBzdHJpdmUgZm9yIGNvbnNpc3RlbmN5XG4gICAgICAgIC8vIGFjcm9zcyBwbGF0Zm9ybXMuXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yaWVzID0gW107XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5QQVRIKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvY2Vzcy5lbnYuUEFUSC5zcGxpdChwYXRoLmRlbGltaXRlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy5wdXNoKHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5kIGFsbCBtYXRjaGVzXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgZGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgaW9VdGlsLnRyeUdldEV4ZWN1dGFibGVQYXRoKHBhdGguam9pbihkaXJlY3RvcnksIHRvb2wpLCBleHRlbnNpb25zKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgfSk7XG59XG5leHBvcnRzLmZpbmRJblBhdGggPSBmaW5kSW5QYXRoO1xuZnVuY3Rpb24gcmVhZENvcHlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCBmb3JjZSA9IG9wdGlvbnMuZm9yY2UgPT0gbnVsbCA/IHRydWUgOiBvcHRpb25zLmZvcmNlO1xuICAgIGNvbnN0IHJlY3Vyc2l2ZSA9IEJvb2xlYW4ob3B0aW9ucy5yZWN1cnNpdmUpO1xuICAgIGNvbnN0IGNvcHlTb3VyY2VEaXJlY3RvcnkgPSBvcHRpb25zLmNvcHlTb3VyY2VEaXJlY3RvcnkgPT0gbnVsbFxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMuY29weVNvdXJjZURpcmVjdG9yeSk7XG4gICAgcmV0dXJuIHsgZm9yY2UsIHJlY3Vyc2l2ZSwgY29weVNvdXJjZURpcmVjdG9yeSB9O1xufVxuZnVuY3Rpb24gY3BEaXJSZWN1cnNpdmUoc291cmNlRGlyLCBkZXN0RGlyLCBjdXJyZW50RGVwdGgsIGZvcmNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gRW5zdXJlIHRoZXJlIGlzIG5vdCBhIHJ1biBhd2F5IHJlY3Vyc2l2ZSBjb3B5XG4gICAgICAgIGlmIChjdXJyZW50RGVwdGggPj0gMjU1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjdXJyZW50RGVwdGgrKztcbiAgICAgICAgeWllbGQgbWtkaXJQKGRlc3REaXIpO1xuICAgICAgICBjb25zdCBmaWxlcyA9IHlpZWxkIGlvVXRpbC5yZWFkZGlyKHNvdXJjZURpcik7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyY0ZpbGUgPSBgJHtzb3VyY2VEaXJ9LyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RGaWxlID0gYCR7ZGVzdERpcn0vJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgY29uc3Qgc3JjRmlsZVN0YXQgPSB5aWVsZCBpb1V0aWwubHN0YXQoc3JjRmlsZSk7XG4gICAgICAgICAgICBpZiAoc3JjRmlsZVN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2VcbiAgICAgICAgICAgICAgICB5aWVsZCBjcERpclJlY3Vyc2l2ZShzcmNGaWxlLCBkZXN0RmlsZSwgY3VycmVudERlcHRoLCBmb3JjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjb3B5RmlsZShzcmNGaWxlLCBkZXN0RmlsZSwgZm9yY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoYW5nZSB0aGUgbW9kZSBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5XG4gICAgICAgIHlpZWxkIGlvVXRpbC5jaG1vZChkZXN0RGlyLCAoeWllbGQgaW9VdGlsLnN0YXQoc291cmNlRGlyKSkubW9kZSk7XG4gICAgfSk7XG59XG4vLyBCdWZmZXJlZCBmaWxlIGNvcHlcbmZ1bmN0aW9uIGNvcHlGaWxlKHNyY0ZpbGUsIGRlc3RGaWxlLCBmb3JjZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICgoeWllbGQgaW9VdGlsLmxzdGF0KHNyY0ZpbGUpKS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAvLyB1bmxpbmsvcmUtbGluayBpdFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBpb1V0aWwubHN0YXQoZGVzdEZpbGUpO1xuICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC51bmxpbmsoZGVzdEZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gb3ZlcnJpZGUgZmlsZSBwZXJtaXNzaW9uXG4gICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBpb1V0aWwuY2htb2QoZGVzdEZpbGUsICcwNjY2Jyk7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC51bmxpbmsoZGVzdEZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBvdGhlciBlcnJvcnMgPSBpdCBkb2Vzbid0IGV4aXN0LCBubyB3b3JrIHRvIGRvXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb3B5IG92ZXIgc3ltbGlua1xuICAgICAgICAgICAgY29uc3Qgc3ltbGlua0Z1bGwgPSB5aWVsZCBpb1V0aWwucmVhZGxpbmsoc3JjRmlsZSk7XG4gICAgICAgICAgICB5aWVsZCBpb1V0aWwuc3ltbGluayhzeW1saW5rRnVsbCwgZGVzdEZpbGUsIGlvVXRpbC5JU19XSU5ET1dTID8gJ2p1bmN0aW9uJyA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoeWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0RmlsZSkpIHx8IGZvcmNlKSB7XG4gICAgICAgICAgICB5aWVsZCBpb1V0aWwuY29weUZpbGUoc3JjRmlsZSwgZGVzdEZpbGUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pby5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hcmdTdHJpbmdUb0FycmF5ID0gZXhwb3J0cy5Ub29sUnVubmVyID0gdm9pZCAwO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IGV2ZW50cyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZXZlbnRzXCIpKTtcbmNvbnN0IGNoaWxkID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3QgaW8gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2lvXCIpKTtcbmNvbnN0IGlvVXRpbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaW8vbGliL2lvLXV0aWxcIikpO1xuY29uc3QgdGltZXJzXzEgPSByZXF1aXJlKFwidGltZXJzXCIpO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kICovXG5jb25zdCBJU19XSU5ET1dTID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbi8qXG4gKiBDbGFzcyBmb3IgcnVubmluZyBjb21tYW5kIGxpbmUgdG9vbHMuIEhhbmRsZXMgcXVvdGluZyBhbmQgYXJnIHBhcnNpbmcgaW4gYSBwbGF0Zm9ybSBhZ25vc3RpYyB3YXkuXG4gKi9cbmNsYXNzIFRvb2xSdW5uZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih0b29sUGF0aCwgYXJncywgb3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAoIXRvb2xQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgJ3Rvb2xQYXRoJyBjYW5ub3QgYmUgbnVsbCBvciBlbXB0eS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b29sUGF0aCA9IHRvb2xQYXRoO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzIHx8IFtdO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIH1cbiAgICBfZGVidWcobWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmRlYnVnKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmRlYnVnKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9nZXRDb21tYW5kU3RyaW5nKG9wdGlvbnMsIG5vUHJlZml4KSB7XG4gICAgICAgIGNvbnN0IHRvb2xQYXRoID0gdGhpcy5fZ2V0U3Bhd25GaWxlTmFtZSgpO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5fZ2V0U3Bhd25BcmdzKG9wdGlvbnMpO1xuICAgICAgICBsZXQgY21kID0gbm9QcmVmaXggPyAnJyA6ICdbY29tbWFuZF0nOyAvLyBvbWl0IHByZWZpeCB3aGVuIHBpcGVkIHRvIGEgc2Vjb25kIHRvb2xcbiAgICAgICAgaWYgKElTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIC8vIFdpbmRvd3MgKyBjbWQgZmlsZVxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ21kRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgY21kICs9IHRvb2xQYXRoO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNtZCArPSBgICR7YX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdpbmRvd3MgKyB2ZXJiYXRpbVxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMpIHtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYFwiJHt0b29sUGF0aH1cImA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2luZG93cyAocmVndWxhcilcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNtZCArPSB0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcodG9vbFBhdGgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNtZCArPSBgICR7dGhpcy5fd2luZG93c1F1b3RlQ21kQXJnKGEpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gT1NYL0xpbnV4IC0gdGhpcyBjYW4gbGlrZWx5IGJlIGltcHJvdmVkIHdpdGggc29tZSBmb3JtIG9mIHF1b3RpbmcuXG4gICAgICAgICAgICAvLyBjcmVhdGluZyBwcm9jZXNzZXMgb24gVW5peCBpcyBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCB0aGFuIFdpbmRvd3MuXG4gICAgICAgICAgICAvLyBvbiBVbml4LCBleGVjdnAoKSB0YWtlcyBhbiBhcmcgYXJyYXkuXG4gICAgICAgICAgICBjbWQgKz0gdG9vbFBhdGg7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGEgb2YgYXJncykge1xuICAgICAgICAgICAgICAgIGNtZCArPSBgICR7YX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuICAgIF9wcm9jZXNzTGluZUJ1ZmZlcihkYXRhLCBzdHJCdWZmZXIsIG9uTGluZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHMgPSBzdHJCdWZmZXIgKyBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBsZXQgbiA9IHMuaW5kZXhPZihvcy5FT0wpO1xuICAgICAgICAgICAgd2hpbGUgKG4gPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBzLnN1YnN0cmluZygwLCBuKTtcbiAgICAgICAgICAgICAgICBvbkxpbmUobGluZSk7XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAuLi5cbiAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcobiArIG9zLkVPTC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIG4gPSBzLmluZGV4T2Yob3MuRU9MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHN0cmVhbWluZyBsaW5lcyB0byBjb25zb2xlIGlzIGJlc3QgZWZmb3J0LiAgRG9uJ3QgZmFpbCBhIGJ1aWxkLlxuICAgICAgICAgICAgdGhpcy5fZGVidWcoYGVycm9yIHByb2Nlc3NpbmcgbGluZS4gRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YCk7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldFNwYXduRmlsZU5hbWUoKSB7XG4gICAgICAgIGlmIChJU19XSU5ET1dTKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0NPTVNQRUMnXSB8fCAnY21kLmV4ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbFBhdGg7XG4gICAgfVxuICAgIF9nZXRTcGF3bkFyZ3Mob3B0aW9ucykge1xuICAgICAgICBpZiAoSVNfV0lORE9XUykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ21kRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyZ2xpbmUgPSBgL0QgL1MgL0MgXCIke3RoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyh0aGlzLnRvb2xQYXRoKX1gO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnbGluZSArPSAnICc7XG4gICAgICAgICAgICAgICAgICAgIGFyZ2xpbmUgKz0gb3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcoYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFyZ2xpbmUgKz0gJ1wiJztcbiAgICAgICAgICAgICAgICByZXR1cm4gW2FyZ2xpbmVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gICAgfVxuICAgIF9lbmRzV2l0aChzdHIsIGVuZCkge1xuICAgICAgICByZXR1cm4gc3RyLmVuZHNXaXRoKGVuZCk7XG4gICAgfVxuICAgIF9pc0NtZEZpbGUoKSB7XG4gICAgICAgIGNvbnN0IHVwcGVyVG9vbFBhdGggPSB0aGlzLnRvb2xQYXRoLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiAodGhpcy5fZW5kc1dpdGgodXBwZXJUb29sUGF0aCwgJy5DTUQnKSB8fFxuICAgICAgICAgICAgdGhpcy5fZW5kc1dpdGgodXBwZXJUb29sUGF0aCwgJy5CQVQnKSk7XG4gICAgfVxuICAgIF93aW5kb3dzUXVvdGVDbWRBcmcoYXJnKSB7XG4gICAgICAgIC8vIGZvciAuZXhlLCBhcHBseSB0aGUgbm9ybWFsIHF1b3RpbmcgcnVsZXMgdGhhdCBsaWJ1diBhcHBsaWVzXG4gICAgICAgIGlmICghdGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91dlF1b3RlQ21kQXJnKGFyZyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFwcGx5IHF1b3RpbmcgcnVsZXMgc3BlY2lmaWMgdG8gdGhlIGNtZC5leGUgY29tbWFuZCBsaW5lIHBhcnNlci5cbiAgICAgICAgLy8gdGhlIGxpYnV2IHJ1bGVzIGFyZSBnZW5lcmljIGFuZCBhcmUgbm90IGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgY21kLmV4ZVxuICAgICAgICAvLyBjb21tYW5kIGxpbmUgcGFyc2VyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgY21kLmV4ZSBjb21tYW5kIGxpbmUgcGFyc2VyLCByZWZlciB0b1xuICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwOTQ2OTkvaG93LWRvZXMtdGhlLXdpbmRvd3MtY29tbWFuZC1pbnRlcnByZXRlci1jbWQtZXhlLXBhcnNlLXNjcmlwdHMvNzk3MDkxMiM3OTcwOTEyXG4gICAgICAgIC8vIG5lZWQgcXVvdGVzIGZvciBlbXB0eSBhcmdcbiAgICAgICAgaWYgKCFhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiAnXCJcIic7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFyZyBuZWVkcyB0byBiZSBxdW90ZWRcbiAgICAgICAgY29uc3QgY21kU3BlY2lhbENoYXJzID0gW1xuICAgICAgICAgICAgJyAnLFxuICAgICAgICAgICAgJ1xcdCcsXG4gICAgICAgICAgICAnJicsXG4gICAgICAgICAgICAnKCcsXG4gICAgICAgICAgICAnKScsXG4gICAgICAgICAgICAnWycsXG4gICAgICAgICAgICAnXScsXG4gICAgICAgICAgICAneycsXG4gICAgICAgICAgICAnfScsXG4gICAgICAgICAgICAnXicsXG4gICAgICAgICAgICAnPScsXG4gICAgICAgICAgICAnOycsXG4gICAgICAgICAgICAnIScsXG4gICAgICAgICAgICBcIidcIixcbiAgICAgICAgICAgICcrJyxcbiAgICAgICAgICAgICcsJyxcbiAgICAgICAgICAgICdgJyxcbiAgICAgICAgICAgICd+JyxcbiAgICAgICAgICAgICd8JyxcbiAgICAgICAgICAgICc8JyxcbiAgICAgICAgICAgICc+JyxcbiAgICAgICAgICAgICdcIidcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IG5lZWRzUXVvdGVzID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgY2hhciBvZiBhcmcpIHtcbiAgICAgICAgICAgIGlmIChjbWRTcGVjaWFsQ2hhcnMuc29tZSh4ID0+IHggPT09IGNoYXIpKSB7XG4gICAgICAgICAgICAgICAgbmVlZHNRdW90ZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNob3J0LWNpcmN1aXQgaWYgcXVvdGVzIG5vdCBuZWVkZWRcbiAgICAgICAgaWYgKCFuZWVkc1F1b3Rlcykge1xuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgZm9sbG93aW5nIHF1b3RpbmcgcnVsZXMgYXJlIHZlcnkgc2ltaWxhciB0byB0aGUgcnVsZXMgdGhhdCBieSBsaWJ1diBhcHBsaWVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyAxKSB3cmFwIHRoZSBzdHJpbmcgaW4gcXVvdGVzXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDIpIGRvdWJsZS11cCBxdW90ZXMgLSBpLmUuIFwiID0+IFwiXCJcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGlidXYgcXVvdGluZyBydWxlcy4gbGlidXYgcmVwbGFjZXMgXCIgd2l0aCBcXFwiLCB3aGljaCB1bmZvcnR1bmF0ZWx5XG4gICAgICAgIC8vICAgIGRvZXNuJ3Qgd29yayB3ZWxsIHdpdGggYSBjbWQuZXhlIGNvbW1hbmQgbGluZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgbm90ZSwgcmVwbGFjaW5nIFwiIHdpdGggXCJcIiBhbHNvIHdvcmtzIHdlbGwgaWYgdGhlIGFyZyBpcyBwYXNzZWQgdG8gYSBkb3duc3RyZWFtIC5ORVQgY29uc29sZSBhcHAuXG4gICAgICAgIC8vICAgIGZvciBleGFtcGxlLCB0aGUgY29tbWFuZCBsaW5lOlxuICAgICAgICAvLyAgICAgICAgICBmb28uZXhlIFwibXlhcmc6XCJcIm15IHZhbFwiXCJcIlxuICAgICAgICAvLyAgICBpcyBwYXJzZWQgYnkgYSAuTkVUIGNvbnNvbGUgYXBwIGludG8gYW4gYXJnIGFycmF5OlxuICAgICAgICAvLyAgICAgICAgICBbIFwibXlhcmc6XFxcIm15IHZhbFxcXCJcIiBdXG4gICAgICAgIC8vICAgIHdoaWNoIGlzIHRoZSBzYW1lIGVuZCByZXN1bHQgd2hlbiBhcHBseWluZyBsaWJ1diBxdW90aW5nIHJ1bGVzLiBhbHRob3VnaCB0aGUgYWN0dWFsXG4gICAgICAgIC8vICAgIGNvbW1hbmQgbGluZSBmcm9tIGxpYnV2IHF1b3RpbmcgcnVsZXMgd291bGQgbG9vayBsaWtlOlxuICAgICAgICAvLyAgICAgICAgICBmb28uZXhlIFwibXlhcmc6XFxcIm15IHZhbFxcXCJcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAzKSBkb3VibGUtdXAgc2xhc2hlcyB0aGF0IHByZWNlZGUgYSBxdW90ZSxcbiAgICAgICAgLy8gICAgZS5nLiAgaGVsbG8gXFx3b3JsZCAgICA9PiBcImhlbGxvIFxcd29ybGRcIlxuICAgICAgICAvLyAgICAgICAgICBoZWxsb1xcXCJ3b3JsZCAgICA9PiBcImhlbGxvXFxcXFwiXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvXFxcXFwid29ybGQgICA9PiBcImhlbGxvXFxcXFxcXFxcIlwid29ybGRcIlxuICAgICAgICAvLyAgICAgICAgICBoZWxsbyB3b3JsZFxcICAgID0+IFwiaGVsbG8gd29ybGRcXFxcXCJcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgdGVjaG5pY2FsbHkgdGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIGEgY21kLmV4ZSBjb21tYW5kIGxpbmUsIG9yIHRoZSBiYXRjaCBhcmd1bWVudCBwYXJzZXIuXG4gICAgICAgIC8vICAgIHRoZSByZWFzb25zIGZvciBpbmNsdWRpbmcgdGhpcyBhcyBhIC5jbWQgcXVvdGluZyBydWxlIGFyZTpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgYSkgdGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgYXJndW1lbnQgaXMgcGFzc2VkIGZyb20gdGhlIC5jbWQgZmlsZSB0byBhblxuICAgICAgICAvLyAgICAgICBleHRlcm5hbCBwcm9ncmFtLiBtYW55IHByb2dyYW1zIChlLmcuIC5ORVQgY29uc29sZSBhcHBzKSByZWx5IG9uIHRoZSBzbGFzaC1kb3VibGluZyBydWxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBiKSBpdCdzIHdoYXQgd2UndmUgYmVlbiBkb2luZyBwcmV2aW91c2x5IChieSBkZWZlcnJpbmcgdG8gbm9kZSBkZWZhdWx0IGJlaGF2aW9yKSBhbmQgd2VcbiAgICAgICAgLy8gICAgICAgaGF2ZW4ndCBoZWFyZCBhbnkgY29tcGxhaW50cyBhYm91dCB0aGF0IGFzcGVjdC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gbm90ZSwgYSB3ZWFrbmVzcyBvZiB0aGUgcXVvdGluZyBydWxlcyBjaG9zZW4gaGVyZSwgaXMgdGhhdCAlIGlzIG5vdCBlc2NhcGVkLiBpbiBmYWN0LCAlIGNhbm5vdCBiZVxuICAgICAgICAvLyBlc2NhcGVkIHdoZW4gdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lIGRpcmVjdGx5IC0gZXZlbiB0aG91Z2ggd2l0aGluIGEgLmNtZCBmaWxlICUgY2FuIGJlIGVzY2FwZWRcbiAgICAgICAgLy8gYnkgdXNpbmcgJSUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIHRoZSBzYXZpbmcgZ3JhY2UgaXMsIG9uIHRoZSBjb21tYW5kIGxpbmUsICV2YXIlIGlzIGxlZnQgYXMtaXMgaWYgdmFyIGlzIG5vdCBkZWZpbmVkLiB0aGlzIGNvbnRyYXN0c1xuICAgICAgICAvLyB0aGUgbGluZSBwYXJzaW5nIHJ1bGVzIHdpdGhpbiBhIC5jbWQgZmlsZSwgd2hlcmUgaWYgdmFyIGlzIG5vdCBkZWZpbmVkIGl0IGlzIHJlcGxhY2VkIHdpdGggbm90aGluZy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gb25lIG9wdGlvbiB0aGF0IHdhcyBleHBsb3JlZCB3YXMgcmVwbGFjaW5nICUgd2l0aCBeJSAtIGkuZS4gJXZhciUgPT4gXiV2YXJeJS4gdGhpcyBoYWNrIHdvdWxkXG4gICAgICAgIC8vIG9mdGVuIHdvcmssIHNpbmNlIGl0IGlzIHVubGlrZWx5IHRoYXQgdmFyXiB3b3VsZCBleGlzdCwgYW5kIHRoZSBeIGNoYXJhY3RlciBpcyByZW1vdmVkIHdoZW4gdGhlXG4gICAgICAgIC8vIHZhcmlhYmxlIGlzIHVzZWQuIHRoZSBwcm9ibGVtLCBob3dldmVyLCBpcyB0aGF0IF4gaXMgbm90IHJlbW92ZWQgd2hlbiAlKiBpcyB1c2VkIHRvIHBhc3MgdGhlIGFyZ3NcbiAgICAgICAgLy8gdG8gYW4gZXh0ZXJuYWwgcHJvZ3JhbS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYW4gdW5leHBsb3JlZCBwb3RlbnRpYWwgc29sdXRpb24gZm9yIHRoZSAlIGVzY2FwaW5nIHByb2JsZW0sIGlzIHRvIGNyZWF0ZSBhIHdyYXBwZXIgLmNtZCBmaWxlLlxuICAgICAgICAvLyAlIGNhbiBiZSBlc2NhcGVkIHdpdGhpbiBhIC5jbWQgZmlsZS5cbiAgICAgICAgbGV0IHJldmVyc2UgPSAnXCInO1xuICAgICAgICBsZXQgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gYXJnLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgLy8gd2FsayB0aGUgc3RyaW5nIGluIHJldmVyc2VcbiAgICAgICAgICAgIHJldmVyc2UgKz0gYXJnW2kgLSAxXTtcbiAgICAgICAgICAgIGlmIChxdW90ZUhpdCAmJiBhcmdbaSAtIDFdID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcXFxcJzsgLy8gZG91YmxlIHRoZSBzbGFzaFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnW2kgLSAxXSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgICAgIHF1b3RlSGl0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcIic7IC8vIGRvdWJsZSB0aGUgcXVvdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1b3RlSGl0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV2ZXJzZSArPSAnXCInO1xuICAgICAgICByZXR1cm4gcmV2ZXJzZVxuICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgIH1cbiAgICBfdXZRdW90ZUNtZEFyZyhhcmcpIHtcbiAgICAgICAgLy8gVG9vbCBydW5uZXIgd3JhcHMgY2hpbGRfcHJvY2Vzcy5zcGF3bigpIGFuZCBuZWVkcyB0byBhcHBseSB0aGUgc2FtZSBxdW90aW5nIGFzXG4gICAgICAgIC8vIE5vZGUgaW4gY2VydGFpbiBjYXNlcyB3aGVyZSB0aGUgdW5kb2N1bWVudGVkIHNwYXduIG9wdGlvbiB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHNcbiAgICAgICAgLy8gaXMgdXNlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBhIHBvcnQgb2YgcXVvdGVfY21kX2FyZyBmcm9tIE5vZGUgNC54ICh0ZWNobmljYWxseSwgbGliIFVWLFxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvdjQueC9kZXBzL3V2L3NyYy93aW4vcHJvY2Vzcy5jIGZvciBkZXRhaWxzKSxcbiAgICAgICAgLy8gcGFzdGluZyBjb3B5cmlnaHQgbm90aWNlIGZyb20gTm9kZSB3aXRoaW4gdGhpcyBmdW5jdGlvbjpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gICAgICAgIC8vICAgICAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAgICAgICAgLy8gICAgICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuICAgICAgICAvLyAgICAgIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuICAgICAgICAvLyAgICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gICAgICAgIC8vICAgICAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICAgICAgICAvLyAgICAgIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAgICAgICAgLy8gICAgICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAgICAgICAgLy8gICAgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAgICAgICAgLy8gICAgICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gICAgICAgIC8vICAgICAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAgICAgICAgLy8gICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTXG4gICAgICAgIC8vICAgICAgSU4gVEhFIFNPRlRXQVJFLlxuICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgLy8gTmVlZCBkb3VibGUgcXVvdGF0aW9uIGZvciBlbXB0eSBhcmd1bWVudFxuICAgICAgICAgICAgcmV0dXJuICdcIlwiJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZy5pbmNsdWRlcygnICcpICYmICFhcmcuaW5jbHVkZXMoJ1xcdCcpICYmICFhcmcuaW5jbHVkZXMoJ1wiJykpIHtcbiAgICAgICAgICAgIC8vIE5vIHF1b3RhdGlvbiBuZWVkZWRcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcmcuaW5jbHVkZXMoJ1wiJykgJiYgIWFyZy5pbmNsdWRlcygnXFxcXCcpKSB7XG4gICAgICAgICAgICAvLyBObyBlbWJlZGRlZCBkb3VibGUgcXVvdGVzIG9yIGJhY2tzbGFzaGVzLCBzbyBJIGNhbiBqdXN0IHdyYXBcbiAgICAgICAgICAgIC8vIHF1b3RlIG1hcmtzIGFyb3VuZCB0aGUgd2hvbGUgdGhpbmcuXG4gICAgICAgICAgICByZXR1cm4gYFwiJHthcmd9XCJgO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4cGVjdGVkIGlucHV0L291dHB1dDpcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1wiXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXCJcXFwid29ybGRcIlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXHdvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBoZWxsb1xcd29ybGRcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXFxcXHdvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBoZWxsb1xcXFx3b3JsZFxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFwid29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG9cXFxcXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXFxcXFwid29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG9cXFxcXFxcXFxcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsbyB3b3JsZFxcXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvIHdvcmxkXFxcXFwiIC0gbm90ZSB0aGUgY29tbWVudCBpbiBsaWJ1diBhY3R1YWxseSByZWFkcyBcImhlbGxvIHdvcmxkXFxcIlxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGl0IGFwcGVhcnMgdGhlIGNvbW1lbnQgaXMgd3JvbmcsIGl0IHNob3VsZCBiZSBcImhlbGxvIHdvcmxkXFxcXFwiXG4gICAgICAgIGxldCByZXZlcnNlID0gJ1wiJztcbiAgICAgICAgbGV0IHF1b3RlSGl0ID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGFyZy5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgIC8vIHdhbGsgdGhlIHN0cmluZyBpbiByZXZlcnNlXG4gICAgICAgICAgICByZXZlcnNlICs9IGFyZ1tpIC0gMV07XG4gICAgICAgICAgICBpZiAocXVvdGVIaXQgJiYgYXJnW2kgLSAxXSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgcmV2ZXJzZSArPSAnXFxcXCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmdbaSAtIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1xcXFwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXZlcnNlICs9ICdcIic7XG4gICAgICAgIHJldHVybiByZXZlcnNlXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuICAgIF9jbG9uZUV4ZWNPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgIGVudjogb3B0aW9ucy5lbnYgfHwgcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgICBzaWxlbnQ6IG9wdGlvbnMuc2lsZW50IHx8IGZhbHNlLFxuICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyB8fCBmYWxzZSxcbiAgICAgICAgICAgIGZhaWxPblN0ZEVycjogb3B0aW9ucy5mYWlsT25TdGRFcnIgfHwgZmFsc2UsXG4gICAgICAgICAgICBpZ25vcmVSZXR1cm5Db2RlOiBvcHRpb25zLmlnbm9yZVJldHVybkNvZGUgfHwgZmFsc2UsXG4gICAgICAgICAgICBkZWxheTogb3B0aW9ucy5kZWxheSB8fCAxMDAwMFxuICAgICAgICB9O1xuICAgICAgICByZXN1bHQub3V0U3RyZWFtID0gb3B0aW9ucy5vdXRTdHJlYW0gfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgICAgIHJlc3VsdC5lcnJTdHJlYW0gPSBvcHRpb25zLmVyclN0cmVhbSB8fCBwcm9jZXNzLnN0ZGVycjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX2dldFNwYXduT3B0aW9ucyhvcHRpb25zLCB0b29sUGF0aCkge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIHJlc3VsdC5jd2QgPSBvcHRpb25zLmN3ZDtcbiAgICAgICAgcmVzdWx0LmVudiA9IG9wdGlvbnMuZW52O1xuICAgICAgICByZXN1bHRbJ3dpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyddID1cbiAgICAgICAgICAgIG9wdGlvbnMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzIHx8IHRoaXMuX2lzQ21kRmlsZSgpO1xuICAgICAgICBpZiAob3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcmd2MCA9IGBcIiR7dG9vbFBhdGh9XCJgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWMgYSB0b29sLlxuICAgICAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gICAgICogUmV0dXJucyBwcm9taXNlIHdpdGggcmV0dXJuIGNvZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgICAgdG9vbCAgICAgcGF0aCB0byB0b29sIHRvIGV4ZWNcbiAgICAgKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsIGV4ZWMgb3B0aW9ucy4gIFNlZSBFeGVjT3B0aW9uc1xuICAgICAqIEByZXR1cm5zICAgbnVtYmVyXG4gICAgICovXG4gICAgZXhlYygpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIC8vIHJvb3QgdGhlIHRvb2wgcGF0aCBpZiBpdCBpcyB1bnJvb3RlZCBhbmQgY29udGFpbnMgcmVsYXRpdmUgcGF0aGluZ1xuICAgICAgICAgICAgaWYgKCFpb1V0aWwuaXNSb290ZWQodGhpcy50b29sUGF0aCkgJiZcbiAgICAgICAgICAgICAgICAodGhpcy50b29sUGF0aC5pbmNsdWRlcygnLycpIHx8XG4gICAgICAgICAgICAgICAgICAgIChJU19XSU5ET1dTICYmIHRoaXMudG9vbFBhdGguaW5jbHVkZXMoJ1xcXFwnKSkpKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJlZmVyIG9wdGlvbnMuY3dkIGlmIGl0IGlzIHNwZWNpZmllZCwgaG93ZXZlciBvcHRpb25zLmN3ZCBtYXkgYWxzbyBuZWVkIHRvIGJlIHJvb3RlZFxuICAgICAgICAgICAgICAgIHRoaXMudG9vbFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgdGhpcy5vcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpLCB0aGlzLnRvb2xQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIHRoZSB0b29sIGlzIG9ubHkgYSBmaWxlIG5hbWUsIHRoZW4gcmVzb2x2ZSBpdCBmcm9tIHRoZSBQQVRIXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgdmVyaWZ5IGl0IGV4aXN0cyAoYWRkIGV4dGVuc2lvbiBvbiBXaW5kb3dzIGlmIG5lY2Vzc2FyeSlcbiAgICAgICAgICAgIHRoaXMudG9vbFBhdGggPSB5aWVsZCBpby53aGljaCh0aGlzLnRvb2xQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYGV4ZWMgdG9vbDogJHt0aGlzLnRvb2xQYXRofWApO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCdhcmd1bWVudHM6Jyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5hcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKGAgICAke2FyZ31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uc05vbk51bGwgPSB0aGlzLl9jbG9uZUV4ZWNPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zTm9uTnVsbC5zaWxlbnQgJiYgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbS53cml0ZSh0aGlzLl9nZXRDb21tYW5kU3RyaW5nKG9wdGlvbnNOb25OdWxsKSArIG9zLkVPTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gbmV3IEV4ZWNTdGF0ZShvcHRpb25zTm9uTnVsbCwgdGhpcy50b29sUGF0aCk7XG4gICAgICAgICAgICAgICAgc3RhdGUub24oJ2RlYnVnJywgKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jd2QgJiYgISh5aWVsZCBpb1V0aWwuZXhpc3RzKHRoaXMub3B0aW9ucy5jd2QpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgVGhlIGN3ZDogJHt0aGlzLm9wdGlvbnMuY3dkfSBkb2VzIG5vdCBleGlzdCFgKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5fZ2V0U3Bhd25GaWxlTmFtZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNwID0gY2hpbGQuc3Bhd24oZmlsZU5hbWUsIHRoaXMuX2dldFNwYXduQXJncyhvcHRpb25zTm9uTnVsbCksIHRoaXMuX2dldFNwYXduT3B0aW9ucyh0aGlzLm9wdGlvbnMsIGZpbGVOYW1lKSk7XG4gICAgICAgICAgICAgICAgbGV0IHN0ZGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjcC5zdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3Auc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuc3Rkb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRvdXQoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0ud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGRidWZmZXIgPSB0aGlzLl9wcm9jZXNzTGluZUJ1ZmZlcihkYXRhLCBzdGRidWZmZXIsIChsaW5lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuc3RkbGluZShsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBlcnJidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoY3Auc3RkZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNwLnN0ZGVyci5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzU3RkZXJyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuc3RkZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRlcnIoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLmVyclN0cmVhbSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBvcHRpb25zTm9uTnVsbC5mYWlsT25TdGRFcnJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zTm9uTnVsbC5lcnJTdHJlYW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycmJ1ZmZlciA9IHRoaXMuX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIGVycmJ1ZmZlciwgKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmVycmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5lcnJsaW5lKGxpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3Aub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5DaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3Aub24oJ2V4aXQnLCAoY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdENvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYEV4aXQgY29kZSAke2NvZGV9IHJlY2VpdmVkIGZyb20gdG9vbCAnJHt0aGlzLnRvb2xQYXRofSdgKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuQ2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNwLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0Q29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYFNURElPIHN0cmVhbXMgaGF2ZSBjbG9zZWQgZm9yIHRvb2wgJyR7dGhpcy50b29sUGF0aH0nYCk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLkNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5vbignZG9uZScsIChlcnJvciwgZXhpdENvZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0ZGxpbmUnLCBzdGRidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJidWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJsaW5lJywgZXJyYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjcC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShleGl0Q29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3Auc3RkaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2hpbGQgcHJvY2VzcyBtaXNzaW5nIHN0ZGluJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3Auc3RkaW4uZW5kKHRoaXMub3B0aW9ucy5pbnB1dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlRvb2xSdW5uZXIgPSBUb29sUnVubmVyO1xuLyoqXG4gKiBDb252ZXJ0IGFuIGFyZyBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgYXJncy4gSGFuZGxlcyBlc2NhcGluZ1xuICpcbiAqIEBwYXJhbSAgICBhcmdTdHJpbmcgICBzdHJpbmcgb2YgYXJndW1lbnRzXG4gKiBAcmV0dXJucyAgc3RyaW5nW10gICAgYXJyYXkgb2YgYXJndW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGFyZ1N0cmluZ1RvQXJyYXkoYXJnU3RyaW5nKSB7XG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIGxldCBpblF1b3RlcyA9IGZhbHNlO1xuICAgIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gICAgbGV0IGFyZyA9ICcnO1xuICAgIGZ1bmN0aW9uIGFwcGVuZChjKSB7XG4gICAgICAgIC8vIHdlIG9ubHkgZXNjYXBlIGRvdWJsZSBxdW90ZXMuXG4gICAgICAgIGlmIChlc2NhcGVkICYmIGMgIT09ICdcIicpIHtcbiAgICAgICAgICAgIGFyZyArPSAnXFxcXCc7XG4gICAgICAgIH1cbiAgICAgICAgYXJnICs9IGM7XG4gICAgICAgIGVzY2FwZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IGFyZ1N0cmluZy5jaGFyQXQoaSk7XG4gICAgICAgIGlmIChjID09PSAnXCInKSB7XG4gICAgICAgICAgICBpZiAoIWVzY2FwZWQpIHtcbiAgICAgICAgICAgICAgICBpblF1b3RlcyA9ICFpblF1b3RlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwcGVuZChjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcgJiYgZXNjYXBlZCkge1xuICAgICAgICAgICAgYXBwZW5kKGMpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJyAmJiBpblF1b3Rlcykge1xuICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJyAnICYmICFpblF1b3Rlcykge1xuICAgICAgICAgICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgYXJnID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhcHBlbmQoYyk7XG4gICAgfVxuICAgIGlmIChhcmcubGVuZ3RoID4gMCkge1xuICAgICAgICBhcmdzLnB1c2goYXJnLnRyaW0oKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5hcmdTdHJpbmdUb0FycmF5ID0gYXJnU3RyaW5nVG9BcnJheTtcbmNsYXNzIEV4ZWNTdGF0ZSBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIHRvb2xQYXRoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0Nsb3NlZCA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciB0aGUgcHJvY2VzcyBoYXMgZXhpdGVkIGFuZCBzdGRpbyBpcyBjbG9zZWRcbiAgICAgICAgdGhpcy5wcm9jZXNzRXJyb3IgPSAnJztcbiAgICAgICAgdGhpcy5wcm9jZXNzRXhpdENvZGUgPSAwO1xuICAgICAgICB0aGlzLnByb2Nlc3NFeGl0ZWQgPSBmYWxzZTsgLy8gdHJhY2tzIHdoZXRoZXIgdGhlIHByb2Nlc3MgaGFzIGV4aXRlZFxuICAgICAgICB0aGlzLnByb2Nlc3NTdGRlcnIgPSBmYWxzZTsgLy8gdHJhY2tzIHdoZXRoZXIgc3RkZXJyIHdhcyB3cml0dGVuIHRvXG4gICAgICAgIHRoaXMuZGVsYXkgPSAxMDAwMDsgLy8gMTAgc2Vjb25kc1xuICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCF0b29sUGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b29sUGF0aCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMudG9vbFBhdGggPSB0b29sUGF0aDtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGVsYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBvcHRpb25zLmRlbGF5O1xuICAgICAgICB9XG4gICAgfVxuICAgIENoZWNrQ29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9jZXNzQ2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSZXN1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVyc18xLnNldFRpbWVvdXQoRXhlY1N0YXRlLkhhbmRsZVRpbWVvdXQsIHRoaXMuZGVsYXksIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9kZWJ1ZyhtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnZGVidWcnLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgX3NldFJlc3VsdCgpIHtcbiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUgaXMgYW4gZXJyb3JcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBpZiAodGhpcy5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9jZXNzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihgVGhlcmUgd2FzIGFuIGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBleGVjdXRlIHRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9Jy4gVGhpcyBtYXkgaW5kaWNhdGUgdGhlIHByb2Nlc3MgZmFpbGVkIHRvIHN0YXJ0LiBFcnJvcjogJHt0aGlzLnByb2Nlc3NFcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc0V4aXRDb2RlICE9PSAwICYmICF0aGlzLm9wdGlvbnMuaWdub3JlUmV0dXJuQ29kZSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGUgcHJvY2VzcyAnJHt0aGlzLnRvb2xQYXRofScgZmFpbGVkIHdpdGggZXhpdCBjb2RlICR7dGhpcy5wcm9jZXNzRXhpdENvZGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnByb2Nlc3NTdGRlcnIgJiYgdGhpcy5vcHRpb25zLmZhaWxPblN0ZEVycikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGUgcHJvY2VzcyAnJHt0aGlzLnRvb2xQYXRofScgZmFpbGVkIGJlY2F1c2Ugb25lIG9yIG1vcmUgbGluZXMgd2VyZSB3cml0dGVuIHRvIHRoZSBTVERFUlIgc3RyZWFtYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRpbWVvdXRcbiAgICAgICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgnZG9uZScsIGVycm9yLCB0aGlzLnByb2Nlc3NFeGl0Q29kZSk7XG4gICAgfVxuICAgIHN0YXRpYyBIYW5kbGVUaW1lb3V0KHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZS5wcm9jZXNzQ2xvc2VkICYmIHN0YXRlLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgVGhlIFNURElPIHN0cmVhbXMgZGlkIG5vdCBjbG9zZSB3aXRoaW4gJHtzdGF0ZS5kZWxheSAvXG4gICAgICAgICAgICAgICAgMTAwMH0gc2Vjb25kcyBvZiB0aGUgZXhpdCBldmVudCBmcm9tIHByb2Nlc3MgJyR7c3RhdGUudG9vbFBhdGh9Jy4gVGhpcyBtYXkgaW5kaWNhdGUgYSBjaGlsZCBwcm9jZXNzIGluaGVyaXRlZCB0aGUgU1RESU8gc3RyZWFtcyBhbmQgaGFzIG5vdCB5ZXQgZXhpdGVkLmA7XG4gICAgICAgICAgICBzdGF0ZS5fZGVidWcobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuX3NldFJlc3VsdCgpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvb2xydW5uZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RXhlY091dHB1dCA9IGV4cG9ydHMuZXhlYyA9IHZvaWQgMDtcbmNvbnN0IHN0cmluZ19kZWNvZGVyXzEgPSByZXF1aXJlKFwic3RyaW5nX2RlY29kZXJcIik7XG5jb25zdCB0ciA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi90b29scnVubmVyXCIpKTtcbi8qKlxuICogRXhlYyBhIGNvbW1hbmQuXG4gKiBPdXRwdXQgd2lsbCBiZSBzdHJlYW1lZCB0byB0aGUgbGl2ZSBjb25zb2xlLlxuICogUmV0dXJucyBwcm9taXNlIHdpdGggcmV0dXJuIGNvZGVcbiAqXG4gKiBAcGFyYW0gICAgIGNvbW1hbmRMaW5lICAgICAgICBjb21tYW5kIHRvIGV4ZWN1dGUgKGNhbiBpbmNsdWRlIGFkZGl0aW9uYWwgYXJncykuIE11c3QgYmUgY29ycmVjdGx5IGVzY2FwZWQuXG4gKiBAcGFyYW0gICAgIGFyZ3MgICAgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHMgZm9yIHRvb2wuIEVzY2FwaW5nIGlzIGhhbmRsZWQgYnkgdGhlIGxpYi5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgICAgICAgICAgIG9wdGlvbmFsIGV4ZWMgb3B0aW9ucy4gIFNlZSBFeGVjT3B0aW9uc1xuICogQHJldHVybnMgICBQcm9taXNlPG51bWJlcj4gICAgZXhpdCBjb2RlXG4gKi9cbmZ1bmN0aW9uIGV4ZWMoY29tbWFuZExpbmUsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBjb21tYW5kQXJncyA9IHRyLmFyZ1N0cmluZ1RvQXJyYXkoY29tbWFuZExpbmUpO1xuICAgICAgICBpZiAoY29tbWFuZEFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcmFtZXRlciAnY29tbWFuZExpbmUnIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LmApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBhdGggdG8gdG9vbCB0byBleGVjdXRlIHNob3VsZCBiZSBmaXJzdCBhcmdcbiAgICAgICAgY29uc3QgdG9vbFBhdGggPSBjb21tYW5kQXJnc1swXTtcbiAgICAgICAgYXJncyA9IGNvbW1hbmRBcmdzLnNsaWNlKDEpLmNvbmNhdChhcmdzIHx8IFtdKTtcbiAgICAgICAgY29uc3QgcnVubmVyID0gbmV3IHRyLlRvb2xSdW5uZXIodG9vbFBhdGgsIGFyZ3MsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcnVubmVyLmV4ZWMoKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhlYyA9IGV4ZWM7XG4vKipcbiAqIEV4ZWMgYSBjb21tYW5kIGFuZCBnZXQgdGhlIG91dHB1dC5cbiAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gKiBSZXR1cm5zIHByb21pc2Ugd2l0aCB0aGUgZXhpdCBjb2RlIGFuZCBjb2xsZWN0ZWQgc3Rkb3V0IGFuZCBzdGRlcnJcbiAqXG4gKiBAcGFyYW0gICAgIGNvbW1hbmRMaW5lICAgICAgICAgICBjb21tYW5kIHRvIGV4ZWN1dGUgKGNhbiBpbmNsdWRlIGFkZGl0aW9uYWwgYXJncykuIE11c3QgYmUgY29ycmVjdGx5IGVzY2FwZWQuXG4gKiBAcGFyYW0gICAgIGFyZ3MgICAgICAgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHMgZm9yIHRvb2wuIEVzY2FwaW5nIGlzIGhhbmRsZWQgYnkgdGhlIGxpYi5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgICAgICAgICAgICAgIG9wdGlvbmFsIGV4ZWMgb3B0aW9ucy4gIFNlZSBFeGVjT3B0aW9uc1xuICogQHJldHVybnMgICBQcm9taXNlPEV4ZWNPdXRwdXQ+ICAgZXhpdCBjb2RlLCBzdGRvdXQsIGFuZCBzdGRlcnJcbiAqL1xuZnVuY3Rpb24gZ2V0RXhlY091dHB1dChjb21tYW5kTGluZSwgYXJncywgb3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHN0ZG91dCA9ICcnO1xuICAgICAgICBsZXQgc3RkZXJyID0gJyc7XG4gICAgICAgIC8vVXNpbmcgc3RyaW5nIGRlY29kZXIgY292ZXJzIHRoZSBjYXNlIHdoZXJlIGEgbXVsdC1ieXRlIGNoYXJhY3RlciBpcyBzcGxpdFxuICAgICAgICBjb25zdCBzdGRvdXREZWNvZGVyID0gbmV3IHN0cmluZ19kZWNvZGVyXzEuU3RyaW5nRGVjb2RlcigndXRmOCcpO1xuICAgICAgICBjb25zdCBzdGRlcnJEZWNvZGVyID0gbmV3IHN0cmluZ19kZWNvZGVyXzEuU3RyaW5nRGVjb2RlcigndXRmOCcpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFN0ZG91dExpc3RlbmVyID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxpc3RlbmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0ZG91dDtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxTdGRFcnJMaXN0ZW5lciA9IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5saXN0ZW5lcnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zdGRlcnI7XG4gICAgICAgIGNvbnN0IHN0ZEVyckxpc3RlbmVyID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHN0ZGVyciArPSBzdGRlcnJEZWNvZGVyLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3RkRXJyTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFN0ZEVyckxpc3RlbmVyKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdGRPdXRMaXN0ZW5lciA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBzdGRvdXQgKz0gc3Rkb3V0RGVjb2Rlci53cml0ZShkYXRhKTtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFN0ZG91dExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxTdGRvdXRMaXN0ZW5lcihkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGlzdGVuZXJzKSwgeyBzdGRvdXQ6IHN0ZE91dExpc3RlbmVyLCBzdGRlcnI6IHN0ZEVyckxpc3RlbmVyIH0pO1xuICAgICAgICBjb25zdCBleGl0Q29kZSA9IHlpZWxkIGV4ZWMoY29tbWFuZExpbmUsIGFyZ3MsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgbGlzdGVuZXJzIH0pKTtcbiAgICAgICAgLy9mbHVzaCBhbnkgcmVtYWluaW5nIGNoYXJhY3RlcnNcbiAgICAgICAgc3Rkb3V0ICs9IHN0ZG91dERlY29kZXIuZW5kKCk7XG4gICAgICAgIHN0ZGVyciArPSBzdGRlcnJEZWNvZGVyLmVuZCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXhpdENvZGUsXG4gICAgICAgICAgICBzdGRvdXQsXG4gICAgICAgICAgICBzdGRlcnJcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0RXhlY091dHB1dCA9IGdldEV4ZWNPdXRwdXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGVjLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBXZSB1c2UgYW55IGFzIGEgdmFsaWQgaW5wdXQgdHlwZVxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0NvbW1hbmRQcm9wZXJ0aWVzID0gZXhwb3J0cy50b0NvbW1hbmRWYWx1ZSA9IHZvaWQgMDtcbi8qKlxuICogU2FuaXRpemVzIGFuIGlucHV0IGludG8gYSBzdHJpbmcgc28gaXQgY2FuIGJlIHBhc3NlZCBpbnRvIGlzc3VlQ29tbWFuZCBzYWZlbHlcbiAqIEBwYXJhbSBpbnB1dCBpbnB1dCB0byBzYW5pdGl6ZSBpbnRvIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZFZhbHVlKGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0KTtcbn1cbmV4cG9ydHMudG9Db21tYW5kVmFsdWUgPSB0b0NvbW1hbmRWYWx1ZTtcbi8qKlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcHJvcGVydGllcyB0byBzZW5kIHdpdGggdGhlIGFjdHVhbCBhbm5vdGF0aW9uIGNvbW1hbmRcbiAqIFNlZSBJc3N1ZUNvbW1hbmRQcm9wZXJ0aWVzOiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9ydW5uZXIvYmxvYi9tYWluL3NyYy9SdW5uZXIuV29ya2VyL0FjdGlvbkNvbW1hbmRNYW5hZ2VyLmNzI0w2NDZcbiAqL1xuZnVuY3Rpb24gdG9Db21tYW5kUHJvcGVydGllcyhhbm5vdGF0aW9uUHJvcGVydGllcykge1xuICAgIGlmICghT2JqZWN0LmtleXMoYW5ub3RhdGlvblByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBhbm5vdGF0aW9uUHJvcGVydGllcy50aXRsZSxcbiAgICAgICAgZmlsZTogYW5ub3RhdGlvblByb3BlcnRpZXMuZmlsZSxcbiAgICAgICAgbGluZTogYW5ub3RhdGlvblByb3BlcnRpZXMuc3RhcnRMaW5lLFxuICAgICAgICBlbmRMaW5lOiBhbm5vdGF0aW9uUHJvcGVydGllcy5lbmRMaW5lLFxuICAgICAgICBjb2w6IGFubm90YXRpb25Qcm9wZXJ0aWVzLnN0YXJ0Q29sdW1uLFxuICAgICAgICBlbmRDb2x1bW46IGFubm90YXRpb25Qcm9wZXJ0aWVzLmVuZENvbHVtblxuICAgIH07XG59XG5leHBvcnRzLnRvQ29tbWFuZFByb3BlcnRpZXMgPSB0b0NvbW1hbmRQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc3N1ZSA9IGV4cG9ydHMuaXNzdWVDb21tYW5kID0gdm9pZCAwO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKlxuICogQ29tbWFuZHNcbiAqXG4gKiBDb21tYW5kIEZvcm1hdDpcbiAqICAgOjpuYW1lIGtleT12YWx1ZSxrZXk9dmFsdWU6Om1lc3NhZ2VcbiAqXG4gKiBFeGFtcGxlczpcbiAqICAgOjp3YXJuaW5nOjpUaGlzIGlzIHRoZSBtZXNzYWdlXG4gKiAgIDo6c2V0LWVudiBuYW1lPU1ZX1ZBUjo6c29tZSB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc3N1ZUNvbW1hbmQoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kKGNvbW1hbmQsIHByb3BlcnRpZXMsIG1lc3NhZ2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNtZC50b1N0cmluZygpICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaXNzdWVDb21tYW5kID0gaXNzdWVDb21tYW5kO1xuZnVuY3Rpb24gaXNzdWUobmFtZSwgbWVzc2FnZSA9ICcnKSB7XG4gICAgaXNzdWVDb21tYW5kKG5hbWUsIHt9LCBtZXNzYWdlKTtcbn1cbmV4cG9ydHMuaXNzdWUgPSBpc3N1ZTtcbmNvbnN0IENNRF9TVFJJTkcgPSAnOjonO1xuY2xhc3MgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgICAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSAnbWlzc2luZy5jb21tYW5kJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IGNtZFN0ciA9IENNRF9TVFJJTkcgKyB0aGlzLmNvbW1hbmQ7XG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbWRTdHIgKz0gJyAnO1xuICAgICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZFN0ciArPSAnLCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWRTdHIgKz0gYCR7a2V5fT0ke2VzY2FwZVByb3BlcnR5KHZhbCl9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbWRTdHIgKz0gYCR7Q01EX1NUUklOR30ke2VzY2FwZURhdGEodGhpcy5tZXNzYWdlKX1gO1xuICAgICAgICByZXR1cm4gY21kU3RyO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVzY2FwZURhdGEocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpO1xufVxuZnVuY3Rpb24gZXNjYXBlUHJvcGVydHkocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpXG4gICAgICAgIC5yZXBsYWNlKC86L2csICclM0EnKVxuICAgICAgICAucmVwbGFjZSgvLC9nLCAnJTJDJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21tYW5kLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBGb3IgaW50ZXJuYWwgdXNlLCBzdWJqZWN0IHRvIGNoYW5nZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlID0gZXhwb3J0cy5pc3N1ZUZpbGVDb21tYW5kID0gdm9pZCAwO1xuLy8gV2UgdXNlIGFueSBhcyBhIHZhbGlkIGlucHV0IHR5cGVcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmNvbnN0IGNyeXB0byA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3J5cHRvXCIpKTtcbmNvbnN0IGZzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJmc1wiKSk7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZnVuY3Rpb24gaXNzdWVGaWxlQ29tbWFuZChjb21tYW5kLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudltgR0lUSFVCXyR7Y29tbWFuZH1gXTtcbiAgICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGZpbGUgY29tbWFuZCAke2NvbW1hbmR9YCk7XG4gICAgfVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGZpbGUgYXQgcGF0aDogJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoZmlsZVBhdGgsIGAkeygwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKShtZXNzYWdlKX0ke29zLkVPTH1gLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmOCdcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNzdWVGaWxlQ29tbWFuZCA9IGlzc3VlRmlsZUNvbW1hbmQ7XG5mdW5jdGlvbiBwcmVwYXJlS2V5VmFsdWVNZXNzYWdlKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBgZ2hhZGVsaW1pdGVyXyR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKTtcbiAgICAvLyBUaGVzZSBzaG91bGQgcmVhbGlzdGljYWxseSBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2Ugc29tZW9uZSBmaW5kcyBhXG4gICAgLy8gd2F5IHRvIGV4cGxvaXQgdXVpZCBnZW5lcmF0aW9uIGxldCdzIG5vdCBhbGxvdyBrZXlzIG9yIHZhbHVlcyB0aGF0IGNvbnRhaW5cbiAgICAvLyB0aGUgZGVsaW1pdGVyLlxuICAgIGlmIChrZXkuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IG5hbWUgc2hvdWxkIG5vdCBjb250YWluIHRoZSBkZWxpbWl0ZXIgXCIke2RlbGltaXRlcn1cImApO1xuICAgIH1cbiAgICBpZiAoY29udmVydGVkVmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IHZhbHVlIHNob3VsZCBub3QgY29udGFpbiB0aGUgZGVsaW1pdGVyIFwiJHtkZWxpbWl0ZXJ9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2tleX08PCR7ZGVsaW1pdGVyfSR7b3MuRU9MfSR7Y29udmVydGVkVmFsdWV9JHtvcy5FT0x9JHtkZWxpbWl0ZXJ9YDtcbn1cbmV4cG9ydHMucHJlcGFyZUtleVZhbHVlTWVzc2FnZSA9IHByZXBhcmVLZXlWYWx1ZU1lc3NhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLWNvbW1hbmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tCeXBhc3MgPSBleHBvcnRzLmdldFByb3h5VXJsID0gdm9pZCAwO1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwocmVxVXJsKSB7XG4gICAgY29uc3QgdXNpbmdTc2wgPSByZXFVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIGlmIChjaGVja0J5cGFzcyhyZXFVcmwpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHByb3h5VmFyID0gKCgpID0+IHtcbiAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBzX3Byb3h5J10gfHwgcHJvY2Vzcy5lbnZbJ0hUVFBTX1BST1hZJ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBfcHJveHknXSB8fCBwcm9jZXNzLmVudlsnSFRUUF9QUk9YWSddO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBpZiAocHJveHlWYXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjb2RlZFVSTChwcm94eVZhcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICBpZiAoIXByb3h5VmFyLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhcHJveHlWYXIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERlY29kZWRVUkwoYGh0dHA6Ly8ke3Byb3h5VmFyfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmZ1bmN0aW9uIGNoZWNrQnlwYXNzKHJlcVVybCkge1xuICAgIGlmICghcmVxVXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVxSG9zdCA9IHJlcVVybC5ob3N0bmFtZTtcbiAgICBpZiAoaXNMb29wYmFja0FkZHJlc3MocmVxSG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG5vUHJveHkgPSBwcm9jZXNzLmVudlsnbm9fcHJveHknXSB8fCBwcm9jZXNzLmVudlsnTk9fUFJPWFknXSB8fCAnJztcbiAgICBpZiAoIW5vUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHJlcXVlc3QgcG9ydFxuICAgIGxldCByZXFQb3J0O1xuICAgIGlmIChyZXFVcmwucG9ydCkge1xuICAgICAgICByZXFQb3J0ID0gTnVtYmVyKHJlcVVybC5wb3J0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICAgIHJlcVBvcnQgPSA4MDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgICByZXFQb3J0ID0gNDQzO1xuICAgIH1cbiAgICAvLyBGb3JtYXQgdGhlIHJlcXVlc3QgaG9zdG5hbWUgYW5kIGhvc3RuYW1lIHdpdGggcG9ydFxuICAgIGNvbnN0IHVwcGVyUmVxSG9zdHMgPSBbcmVxVXJsLmhvc3RuYW1lLnRvVXBwZXJDYXNlKCldO1xuICAgIGlmICh0eXBlb2YgcmVxUG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdXBwZXJSZXFIb3N0cy5wdXNoKGAke3VwcGVyUmVxSG9zdHNbMF19OiR7cmVxUG9ydH1gKTtcbiAgICB9XG4gICAgLy8gQ29tcGFyZSByZXF1ZXN0IGhvc3QgYWdhaW5zdCBub3Byb3h5XG4gICAgZm9yIChjb25zdCB1cHBlck5vUHJveHlJdGVtIG9mIG5vUHJveHlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCh4ID0+IHgudHJpbSgpLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4KSkge1xuICAgICAgICBpZiAodXBwZXJOb1Byb3h5SXRlbSA9PT0gJyonIHx8XG4gICAgICAgICAgICB1cHBlclJlcUhvc3RzLnNvbWUoeCA9PiB4ID09PSB1cHBlck5vUHJveHlJdGVtIHx8XG4gICAgICAgICAgICAgICAgeC5lbmRzV2l0aChgLiR7dXBwZXJOb1Byb3h5SXRlbX1gKSB8fFxuICAgICAgICAgICAgICAgICh1cHBlck5vUHJveHlJdGVtLnN0YXJ0c1dpdGgoJy4nKSAmJlxuICAgICAgICAgICAgICAgICAgICB4LmVuZHNXaXRoKGAke3VwcGVyTm9Qcm94eUl0ZW19YCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5jaGVja0J5cGFzcyA9IGNoZWNrQnlwYXNzO1xuZnVuY3Rpb24gaXNMb29wYmFja0FkZHJlc3MoaG9zdCkge1xuICAgIGNvbnN0IGhvc3RMb3dlciA9IGhvc3QudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGhvc3RMb3dlciA9PT0gJ2xvY2FsaG9zdCcgfHxcbiAgICAgICAgaG9zdExvd2VyLnN0YXJ0c1dpdGgoJzEyNy4nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzo6MV0nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzA6MDowOjA6MDowOjA6MV0nKSk7XG59XG5jbGFzcyBEZWNvZGVkVVJMIGV4dGVuZHMgVVJMIHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGJhc2UpIHtcbiAgICAgICAgc3VwZXIodXJsLCBiYXNlKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFVzZXJuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnVzZXJuYW1lKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFBhc3N3b3JkID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnBhc3N3b3JkKTtcbiAgICB9XG4gICAgZ2V0IHVzZXJuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2RlZFVzZXJuYW1lO1xuICAgIH1cbiAgICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvZGVkUGFzc3dvcmQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJveHkuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrRGVzdHJveTogU3ltYm9sKCdkZXN0cm95JyksXG4gIGtEaXNwYXRjaDogU3ltYm9sKCdkaXNwYXRjaCcpLFxuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrV3JpdGluZzogU3ltYm9sKCd3cml0aW5nJyksXG4gIGtSZXN1bWluZzogU3ltYm9sKCdyZXN1bWluZycpLFxuICBrUXVldWU6IFN5bWJvbCgncXVldWUnKSxcbiAga0Nvbm5lY3Q6IFN5bWJvbCgnY29ubmVjdCcpLFxuICBrQ29ubmVjdGluZzogU3ltYm9sKCdjb25uZWN0aW5nJyksXG4gIGtIZWFkZXJzTGlzdDogU3ltYm9sKCdoZWFkZXJzIGxpc3QnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMiBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMSBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMkNvcHlIZWFkZXJzOiBTeW1ib2woJ2h0dHAyIGNvcHkgaGVhZGVycycpLFxuICBrSFRUUENvbm5WZXJzaW9uOiBTeW1ib2woJ2h0dHAgY29ubmVjdGlvbiB2ZXJzaW9uJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY2xhc3MgVW5kaWNpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnVW5kaWNpRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlInXG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENvbm5lY3RUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc1RpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc1RpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNPdmVyZmxvd0Vycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc092ZXJmbG93RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNPdmVyZmxvd0Vycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgT3ZlcmZsb3cgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19PVkVSRkxPVydcbiAgfVxufVxuXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQm9keVRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQm9keVRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdCb2R5IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQk9EWV9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgYm9keSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIFN0YXR1cyBDb2RlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFX1NUQVRVU19DT0RFJ1xuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZEFyZ3VtZW50RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFJldHVyblZhbHVlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJldHVyblZhbHVlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBSZXR1cm4gVmFsdWUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEFib3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RBYm9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBhYm9ydGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0FCT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgSW5mb3JtYXRpb25hbEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW5mb3JtYXRpb25hbEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudERlc3Ryb3llZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50RGVzdHJveWVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudERlc3Ryb3llZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgZGVzdHJveWVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0RFU1RST1lFRCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnRDbG9zZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudENsb3NlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnRDbG9zZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGNsb3NlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DTE9TRUQnXG4gIH1cbn1cblxuY2xhc3MgU29ja2V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzb2NrZXQpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNvY2tldEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdTb2NrZXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdTb2NrZXQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfU09DS0VUJ1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gIH1cbn1cblxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01pc3NpbmdVcHN0cmVhbUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vIHVwc3RyZWFtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBCYWxhbmNlZFBvb2wnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nXG4gIH1cbn1cblxuY2xhc3MgSFRUUFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgZGF0YSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSFRUUFBhcnNlckVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdFJldHJ5RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCB7IGhlYWRlcnMsIGRhdGEgfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdFJldHJ5RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RSZXRyeUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgcmV0cnkgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX1JFVFJZJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFVuZGljaUVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBDb25uZWN0VGltZW91dEVycm9yLFxuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgUmVxdWVzdFJldHJ5RXJyb3Jcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKEJsb2IgJiYgb2JqZWN0IGluc3RhbmNlb2YgQmxvYikgfHwgKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddKVxuICApXG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiAhTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHVybC5wb3J0KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IHBvcnQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aCAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aDogdGhlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGhuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRobmFtZTogdGhlIHBhdGhuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5ob3N0bmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgaG9zdG5hbWU6IHRoZSBob3N0bmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5vcmlnaW4gIT0gbnVsbCAmJiB0eXBlb2YgdXJsLm9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgb3JpZ2luOiB0aGUgb3JpZ2luIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgIT0gbnVsbFxuICAgICAgPyB1cmwucG9ydFxuICAgICAgOiAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKVxuICAgIGxldCBvcmlnaW4gPSB1cmwub3JpZ2luICE9IG51bGxcbiAgICAgID8gdXJsLm9yaWdpblxuICAgICAgOiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX06JHtwb3J0fWBcbiAgICBsZXQgcGF0aCA9IHVybC5wYXRoICE9IG51bGxcbiAgICAgID8gdXJsLnBhdGhcbiAgICAgIDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gXG5cbiAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zdWJzdHJpbmcoMCwgb3JpZ2luLmxlbmd0aCAtIDEpXG4gICAgfVxuXG4gICAgaWYgKHBhdGggJiYgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgIH1cbiAgICAvLyBuZXcgVVJMKHBhdGgsIG9yaWdpbikgaXMgdW5zYWZlIHdoZW4gYHBhdGhgIGNvbnRhaW5zIGFuIGFic29sdXRlIFVSTFxuICAgIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkw6XG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmVsYXRpdmUgVVJMLCBzZWNvbmQgcGFyYW0gaXMgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2UgVVJMLlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkwsIGEgZ2l2ZW4gc2Vjb25kIHBhcmFtIHdpbGwgYmUgaWdub3JlZC5cbiAgICB1cmwgPSBuZXcgVVJMKG9yaWdpbiArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlT3JpZ2luICh1cmwpIHtcbiAgdXJsID0gcGFyc2VVUkwodXJsKVxuXG4gIGlmICh1cmwucGF0aG5hbWUgIT09ICcvJyB8fCB1cmwuc2VhcmNoIHx8IHVybC5oYXNoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGdldEhvc3RuYW1lIChob3N0KSB7XG4gIGlmIChob3N0WzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDEsIGlkeClcbiAgfVxuXG4gIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignOicpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaG9zdFxuXG4gIHJldHVybiBob3N0LnN1YnN0cmluZygwLCBpZHgpXG59XG5cbi8vIElQIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkIHNlcnZlciBuYW1lcyBwZXIgUkZDNjA2NlxuLy8gPiBDdXJyZW50bHksIHRoZSBvbmx5IHNlcnZlciBuYW1lcyBzdXBwb3J0ZWQgYXJlIEROUyBob3N0bmFtZXNcbmZ1bmN0aW9uIGdldFNlcnZlck5hbWUgKGhvc3QpIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaG9zdCwgJ3N0cmluZycpXG5cbiAgY29uc3Qgc2VydmVybmFtZSA9IGdldEhvc3RuYW1lKGhvc3QpXG4gIGlmIChuZXQuaXNJUChzZXJ2ZXJuYW1lKSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgcmV0dXJuIHNlcnZlcm5hbWVcbn1cblxuZnVuY3Rpb24gZGVlcENsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKVxufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmICh0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpKVxufVxuXG5mdW5jdGlvbiBib2R5TGVuZ3RoIChib2R5KSB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2UgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLm9iamVjdE1vZGUgPT09IGZhbHNlICYmIHN0YXRlLmVuZGVkID09PSB0cnVlICYmIE51bWJlci5pc0Zpbml0ZShzdGF0ZS5sZW5ndGgpXG4gICAgICA/IHN0YXRlLmxlbmd0aFxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemUgIT0gbnVsbCA/IGJvZHkuc2l6ZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVzdHJveWVkIChzdHJlYW0pIHtcbiAgcmV0dXJuICFzdHJlYW0gfHwgISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0Rlc3Ryb3llZF0pXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVBYm9ydGVkIChzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0gJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBpc0Rlc3Ryb3llZChzdHJlYW0pICYmIHN0YXRlICYmICFzdGF0ZS5lbmRFbWl0dGVkXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soKHN0cmVhbSwgZXJyKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSwgc3RyZWFtLCBlcnIpXG4gIH1cblxuICBpZiAoc3RyZWFtLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgIHN0cmVhbVtrRGVzdHJveWVkXSA9IHRydWVcbiAgfVxufVxuXG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9FWFBSID0gL3RpbWVvdXQ9KFxcZCspL1xuZnVuY3Rpb24gcGFyc2VLZWVwQWxpdmVUaW1lb3V0ICh2YWwpIHtcbiAgY29uc3QgbSA9IHZhbC50b1N0cmluZygpLm1hdGNoKEtFRVBBTElWRV9USU1FT1VUX0VYUFIpXG4gIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSwgMTApICogMTAwMCA6IG51bGxcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBoZWFkZXIgbmFtZSBhbmQgcmV0dXJucyBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoZWFkZXJOYW1lVG9TdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt2YWx1ZV0gfHwgdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaiA9IHt9KSB7XG4gIC8vIEZvciBIMiBzdXBwb3J0XG4gIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgcmV0dXJuIGhlYWRlcnNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXVxuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgICAgdmFsLnB1c2goaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGxldCBoYXNDb250ZW50TGVuZ3RoID0gZmFsc2VcbiAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IC0xXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tuICsgMF0udG9TdHJpbmcoKVxuICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNbbiArIDFdLnRvU3RyaW5nKCd1dGY4JylcblxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiAoa2V5ID09PSAnY29udGVudC1sZW5ndGgnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTkgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSByZXQucHVzaChrZXksIHZhbCkgLSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRGlzdHVyYmVkXG4gICAgICA/IHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0gLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gICAgICA6IGJvZHlba0JvZHlVc2VkXSB8fFxuICAgICAgICBib2R5LnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgICAgICAoYm9keS5fcmVhZGFibGVTdGF0ZSAmJiBib2R5Ll9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkKSB8fFxuICAgICAgICBpc1JlYWRhYmxlQWJvcnRlZChib2R5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Vycm9yZWRcbiAgICAgID8gc3RyZWFtLmlzRXJyb3JlZChib2R5KVxuICAgICAgOiAvc3RhdGU6ICdlcnJvcmVkJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzUmVhZGFibGVcbiAgICAgID8gc3RyZWFtLmlzUmVhZGFibGUoYm9keSlcbiAgICAgIDogL3N0YXRlOiAncmVhZGFibGUnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvIChzb2NrZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2NhbEFkZHJlc3M6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgbG9jYWxQb3J0OiBzb2NrZXQubG9jYWxQb3J0LFxuICAgIHJlbW90ZUFkZHJlc3M6IHNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgIHJlbW90ZVBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgIHJlbW90ZUZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICB0aW1lb3V0OiBzb2NrZXQudGltZW91dCxcbiAgICBieXRlc1dyaXR0ZW46IHNvY2tldC5ieXRlc1dyaXR0ZW4sXG4gICAgYnl0ZXNSZWFkOiBzb2NrZXQuYnl0ZXNSZWFkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb252ZXJ0SXRlcmFibGVUb0J1ZmZlciAoaXRlcmFibGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkIEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuayA6IEJ1ZmZlci5mcm9tKGNodW5rKVxuICB9XG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Gcm9tIChpdGVyYWJsZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGlmIChSZWFkYWJsZVN0cmVhbS5mcm9tKSB7XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtLmZyb20oY29udmVydEl0ZXJhYmxlVG9CdWZmZXIoaXRlcmFibGUpKVxuICB9XG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9XG4gICAgfSxcbiAgICAwXG4gIClcbn1cblxuLy8gVGhlIGNodW5rIHNob3VsZCBiZSBhIEZvcm1EYXRhIGluc3RhbmNlIGFuZCBjb250YWluc1xuLy8gYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLlxuZnVuY3Rpb24gaXNGb3JtRGF0YUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5hcHBlbmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXRBbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmhhcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YSdcbiAgKVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSB7IHJldHVybiB9XG4gIGlmICh0eXBlb2Ygc2lnbmFsLnRocm93SWZBYm9ydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKClcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIERPTUV4Y2VwdGlvbiBub3QgYXZhaWxhYmxlIDwgdjE3LjAuMFxuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJylcbiAgICAgIGVyci5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSAhIVN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG5mdW5jdGlvbiB0b1VTVlN0cmluZyAodmFsKSB7XG4gIGlmIChoYXNUb1dlbGxGb3JtZWQpIHtcbiAgICByZXR1cm4gYCR7dmFsfWAudG9XZWxsRm9ybWVkKClcbiAgfSBlbHNlIGlmIChub2RlVXRpbC50b1VTVlN0cmluZykge1xuICAgIHJldHVybiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG4gIH1cblxuICByZXR1cm4gYCR7dmFsfWBcbn1cblxuLy8gUGFyc2VkIGFjY29yZGluZ2x5IHRvIFJGQyA5MTEwXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMCNmaWVsZC5jb250ZW50LXJhbmdlXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyIChyYW5nZSkge1xuICBpZiAocmFuZ2UgPT0gbnVsbCB8fCByYW5nZSA9PT0gJycpIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IG51bGwsIHNpemU6IG51bGwgfVxuXG4gIGNvbnN0IG0gPSByYW5nZSA/IHJhbmdlLm1hdGNoKC9eYnl0ZXMgKFxcZCspLShcXGQrKVxcLyhcXGQrKT8kLykgOiBudWxsXG4gIHJldHVybiBtXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiBwYXJzZUludChtWzFdKSxcbiAgICAgICAgZW5kOiBtWzJdID8gcGFyc2VJbnQobVsyXSkgOiBudWxsLFxuICAgICAgICBzaXplOiBtWzNdID8gcGFyc2VJbnQobVszXSkgOiBudWxsXG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1JlYWRhYmxlQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICB0aHJvd0lmQWJvcnRlZCxcbiAgYWRkQWJvcnRMaXN0ZW5lcixcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIG5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5OiBub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMTMpLFxuICBzYWZlSFRUUE1ldGhvZHM6IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5sZXQgZmFzdE5vdyA9IERhdGUubm93KClcbmxldCBmYXN0Tm93VGltZW91dFxuXG5jb25zdCBmYXN0VGltZXJzID0gW11cblxuZnVuY3Rpb24gb25UaW1lb3V0ICgpIHtcbiAgZmFzdE5vdyA9IERhdGUubm93KClcblxuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcbiAgbGV0IGlkeCA9IDBcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGNvbnN0IHRpbWVyID0gZmFzdFRpbWVyc1tpZHhdXG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IDApIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gZmFzdE5vdyArIHRpbWVyLmRlbGF5XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGF0ZSA+IDAgJiYgZmFzdE5vdyA+PSB0aW1lci5zdGF0ZSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMVxuICAgICAgdGltZXIuY2FsbGJhY2sodGltZXIub3BhcXVlKVxuICAgIH1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gLTEpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTJcbiAgICAgIGlmIChpZHggIT09IGxlbiAtIDEpIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfVxuICAgICAgbGVuIC09IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4ICs9IDFcbiAgICB9XG4gIH1cblxuICBpZiAoZmFzdFRpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgcmVmcmVzaFRpbWVvdXQoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hUaW1lb3V0ICgpIHtcbiAgaWYgKGZhc3ROb3dUaW1lb3V0ICYmIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2gpIHtcbiAgICBmYXN0Tm93VGltZW91dC5yZWZyZXNoKClcbiAgfSBlbHNlIHtcbiAgICBjbGVhclRpbWVvdXQoZmFzdE5vd1RpbWVvdXQpXG4gICAgZmFzdE5vd1RpbWVvdXQgPSBzZXRUaW1lb3V0KG9uVGltZW91dCwgMWUzKVxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5XG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWVcblxuICAgIC8vICAtMiBub3QgaW4gdGltZXIgbGlzdFxuICAgIC8vICAtMSBpbiB0aW1lciBsaXN0IGJ1dCBpbmFjdGl2ZVxuICAgIC8vICAgMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWVcbiAgICAvLyA+IDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lIHRvIGV4cGlyZVxuICAgIHRoaXMuc3RhdGUgPSAtMlxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIHJlZnJlc2ggKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAtMikge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgICBpZiAoIWZhc3ROb3dUaW1lb3V0IHx8IGZhc3RUaW1lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gMFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMuc3RhdGUgPSAtMVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRUaW1lb3V0IChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHJldHVybiBkZWxheSA8IDFlM1xuICAgICAgPyBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICAgICAgOiBuZXcgVGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgfSxcbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgaWYgKHRpbWVvdXQgaW5zdGFuY2VvZiBUaW1lb3V0KSB7XG4gICAgICB0aW1lb3V0LmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENvcHlyaWdodCBCcmlhbiBXaGl0ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2NkZXgvc3RyZWFtc2VhcmNoXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3JcbiAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAqIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBCYXNlZCBoZWF2aWx5IG9uIHRoZSBTdHJlYW1pbmcgQm95ZXItTW9vcmUtSG9yc3Bvb2wgQysrIGltcGxlbWVudGF0aW9uXG4gKiBieSBIb25nbGkgTGFpIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRm9vQmFyV2lkZ2V0L2JveWVyLW1vb3JlLWhvcnNwb29sXG4gKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmZ1bmN0aW9uIFNCTUggKG5lZWRsZSkge1xuICBpZiAodHlwZW9mIG5lZWRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBuZWVkbGUgPSBCdWZmZXIuZnJvbShuZWVkbGUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihuZWVkbGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG5lZWRsZSBoYXMgdG8gYmUgYSBTdHJpbmcgb3IgYSBCdWZmZXIuJylcbiAgfVxuXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcblxuICBpZiAobmVlZGxlTGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBiZSBhbiBlbXB0eSBTdHJpbmcvQnVmZmVyLicpXG4gIH1cblxuICBpZiAobmVlZGxlTGVuZ3RoID4gMjU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGJpZ2dlciB0aGFuIDI1Ni4nKVxuICB9XG5cbiAgdGhpcy5tYXhNYXRjaGVzID0gSW5maW5pdHlcbiAgdGhpcy5tYXRjaGVzID0gMFxuXG4gIHRoaXMuX29jYyA9IG5ldyBBcnJheSgyNTYpXG4gICAgLmZpbGwobmVlZGxlTGVuZ3RoKSAvLyBJbml0aWFsaXplIG9jY3VycmVuY2UgdGFibGUuXG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5fbmVlZGxlID0gbmVlZGxlXG4gIHRoaXMuX2J1ZnBvcyA9IDBcblxuICB0aGlzLl9sb29rYmVoaW5kID0gQnVmZmVyLmFsbG9jKG5lZWRsZUxlbmd0aClcblxuICAvLyBQb3B1bGF0ZSBvY2N1cnJlbmNlIHRhYmxlIHdpdGggYW5hbHlzaXMgb2YgdGhlIG5lZWRsZSxcbiAgLy8gaWdub3JpbmcgbGFzdCBsZXR0ZXIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmVlZGxlTGVuZ3RoIC0gMTsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgdGhpcy5fb2NjW25lZWRsZVtpXV0gPSBuZWVkbGVMZW5ndGggLSAxIC0gaVxuICB9XG59XG5pbmhlcml0cyhTQk1ILCBFdmVudEVtaXR0ZXIpXG5cblNCTUgucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMubWF0Y2hlcyA9IDBcbiAgdGhpcy5fYnVmcG9zID0gMFxufVxuXG5TQk1ILnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBwb3MpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgJ2JpbmFyeScpXG4gIH1cbiAgY29uc3QgY2hsZW4gPSBjaHVuay5sZW5ndGhcbiAgdGhpcy5fYnVmcG9zID0gcG9zIHx8IDBcbiAgbGV0IHJcbiAgd2hpbGUgKHIgIT09IGNobGVuICYmIHRoaXMubWF0Y2hlcyA8IHRoaXMubWF4TWF0Y2hlcykgeyByID0gdGhpcy5fc2JtaF9mZWVkKGNodW5rKSB9XG4gIHJldHVybiByXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2ZlZWQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuICBjb25zdCBuZWVkbGUgPSB0aGlzLl9uZWVkbGVcbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuICBjb25zdCBsYXN0TmVlZGxlQ2hhciA9IG5lZWRsZVtuZWVkbGVMZW5ndGggLSAxXVxuXG4gIC8vIFBvc2l0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiBgZGF0YWBcbiAgLy8gICAgICAgICAgIHBvcyA9PSAzIHBvaW50cyB0byBkYXRhWzNdXG4gIC8vIE5lZ2F0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiB0aGUgbG9va2JlaGluZCBidWZmZXJcbiAgLy8gICAgICAgICAgIHBvcyA9PSAtMiBwb2ludHMgdG8gbG9va2JlaGluZFtsb29rYmVoaW5kX3NpemUgLSAyXVxuICBsZXQgcG9zID0gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZVxuICBsZXQgY2hcblxuICBpZiAocG9zIDwgMCkge1xuICAgIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gUGVyZm9ybSBCb3llci1Nb29yZS1Ib3JzcG9vbFxuICAgIC8vIHNlYXJjaCB3aXRoIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IGNvbnNpZGVycyBib3RoIHRoZVxuICAgIC8vIGxvb2tiZWhpbmQgYnVmZmVyIGFuZCB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gICAgLy9cbiAgICAvLyBMb29wIHVudGlsXG4gICAgLy8gICB0aGVyZSBpcyBhIG1hdGNoLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB3ZSd2ZSBtb3ZlZCBwYXN0IHRoZSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIHRoZVxuICAgIC8vICAgbG9va2JlaGluZCBidWZmZXIuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gICBvcHRpbWl6ZWQgbG9vcC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgdGhlIGNoYXJhY3RlciB0byBsb29rIGF0IGxpZXMgb3V0c2lkZSB0aGUgaGF5c3RhY2suXG4gICAgd2hpbGUgKHBvcyA8IDAgJiYgcG9zIDw9IGxlbiAtIG5lZWRsZUxlbmd0aCkge1xuICAgICAgY2ggPSB0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIG5lZWRsZUxlbmd0aCAtIDEpXG5cbiAgICAgIGlmIChcbiAgICAgICAgY2ggPT09IGxhc3ROZWVkbGVDaGFyICYmXG4gICAgICAgIHRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlTGVuZ3RoIC0gMSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgICAgICsrdGhpcy5tYXRjaGVzXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUpXG5cbiAgICAgICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gICAgICB9XG4gICAgICBwb3MgKz0gdGhpcy5fb2NjW2NoXVxuICAgIH1cblxuICAgIC8vIE5vIG1hdGNoLlxuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIC8vIFRoZXJlJ3MgdG9vIGZldyBkYXRhIGZvciBCb3llci1Nb29yZS1Ib3JzcG9vbCB0byBydW4sXG4gICAgICAvLyBzbyBsZXQncyB1c2UgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIHRvIHNraXAgYXMgbXVjaCBhc1xuICAgICAgLy8gd2UgY2FuLlxuICAgICAgLy8gRm9yd2FyZCBwb3MgdW50aWxcbiAgICAgIC8vICAgdGhlIHRyYWlsaW5nIHBhcnQgb2YgbG9va2JlaGluZCArIGRhdGFcbiAgICAgIC8vICAgbG9va3MgbGlrZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZWVkbGVcbiAgICAgIC8vIG9yIHVudGlsXG4gICAgICAvLyAgIHBvcyA9PSAwXG4gICAgICB3aGlsZSAocG9zIDwgMCAmJiAhdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBsZW4gLSBwb3MpKSB7ICsrcG9zIH1cbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIERpc2NhcmQgbG9va2JlaGluZCBidWZmZXIuXG4gICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXQgb2ZmIHBhcnQgb2YgdGhlIGxvb2tiZWhpbmQgYnVmZmVyIHRoYXQgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgYXBwZW5kIHRoZSBlbnRpcmUgaGF5c3RhY2tcbiAgICAgIC8vIGludG8gaXQuXG4gICAgICBjb25zdCBieXRlc1RvQ3V0T2ZmID0gdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXG4gICAgICBpZiAoYnl0ZXNUb0N1dE9mZiA+IDApIHtcbiAgICAgICAgLy8gVGhlIGN1dCBvZmYgZGF0YSBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIHRoZSBuZWVkbGUuXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb29rYmVoaW5kLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZixcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC0gYnl0ZXNUb0N1dE9mZilcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtPSBieXRlc1RvQ3V0T2ZmXG5cbiAgICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgKz0gbGVuXG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IGxlblxuICAgICAgcmV0dXJuIGxlblxuICAgIH1cbiAgfVxuXG4gIHBvcyArPSAocG9zID49IDApICogdGhpcy5fYnVmcG9zXG5cbiAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm93IGVtcHR5LiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gIC8vIG5lZWRsZSBpcyBpbiB0aGUgaGF5c3RhY2suXG4gIGlmIChkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpICE9PSAtMSkge1xuICAgIHBvcyA9IGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcylcbiAgICArK3RoaXMubWF0Y2hlc1xuICAgIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zKSB9IGVsc2UgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKSB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICBwb3MgPSBsZW4gLSBuZWVkbGVMZW5ndGhcbiAgfVxuXG4gIC8vIFRoZXJlIHdhcyBubyBtYXRjaC4gSWYgdGhlcmUncyB0cmFpbGluZyBoYXlzdGFjayBkYXRhIHRoYXQgd2UgY2Fubm90XG4gIC8vIG1hdGNoIHlldCB1c2luZyB0aGUgQm95ZXItTW9vcmUtSG9yc3Bvb2wgYWxnb3JpdGhtIChiZWNhdXNlIHRoZSB0cmFpbGluZ1xuICAvLyBkYXRhIGlzIGxlc3MgdGhhbiB0aGUgbmVlZGxlIHNpemUpIHRoZW4gbWF0Y2ggdXNpbmcgYSBtb2RpZmllZFxuICAvLyBhbGdvcml0aG0gdGhhdCBzdGFydHMgbWF0Y2hpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIGluc3RlYWQgb2YgdGhlIGVuZC5cbiAgLy8gV2hhdGV2ZXIgdHJhaWxpbmcgZGF0YSBpcyBsZWZ0IGFmdGVyIHJ1bm5pbmcgdGhpcyBhbGdvcml0aG0gaXMgYWRkZWQgdG9cbiAgLy8gdGhlIGxvb2tiZWhpbmQgYnVmZmVyLlxuICB3aGlsZSAoXG4gICAgcG9zIDwgbGVuICYmXG4gICAgKFxuICAgICAgZGF0YVtwb3NdICE9PSBuZWVkbGVbMF0gfHxcbiAgICAgIChcbiAgICAgICAgKEJ1ZmZlci5jb21wYXJlKFxuICAgICAgICAgIGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyBsZW4gLSBwb3MpLFxuICAgICAgICAgIG5lZWRsZS5zdWJhcnJheSgwLCBsZW4gLSBwb3MpXG4gICAgICAgICkgIT09IDApXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICArK3Bvc1xuICB9XG4gIGlmIChwb3MgPCBsZW4pIHtcbiAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgcG9zLCBwb3MgKyAobGVuIC0gcG9zKSlcbiAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSBsZW4gLSBwb3NcbiAgfVxuXG4gIC8vIEV2ZXJ5dGhpbmcgdW50aWwgcG9zIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gbmVlZGxlIGRhdGEuXG4gIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcyA8IGxlbiA/IHBvcyA6IGxlbikgfVxuXG4gIHRoaXMuX2J1ZnBvcyA9IGxlblxuICByZXR1cm4gbGVuXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2xvb2t1cF9jaGFyID0gZnVuY3Rpb24gKGRhdGEsIHBvcykge1xuICByZXR1cm4gKHBvcyA8IDApXG4gICAgPyB0aGlzLl9sb29rYmVoaW5kW3RoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc11cbiAgICA6IGRhdGFbcG9zXVxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9tZW1jbXAgPSBmdW5jdGlvbiAoZGF0YSwgcG9zLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmICh0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIGkpICE9PSB0aGlzLl9uZWVkbGVbaV0pIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNCTUhcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5SZWFkYWJsZVxuXG5mdW5jdGlvbiBQYXJ0U3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0cylcbn1cbmluaGVyaXRzKFBhcnRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKVxuXG5QYXJ0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRTdHJlYW1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TGltaXQgKGxpbWl0cywgbmFtZSwgZGVmYXVsdExpbWl0KSB7XG4gIGlmIChcbiAgICAhbGltaXRzIHx8XG4gICAgbGltaXRzW25hbWVdID09PSB1bmRlZmluZWQgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IG51bGxcbiAgKSB7IHJldHVybiBkZWZhdWx0TGltaXQgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgbGltaXRzW25hbWVdICE9PSAnbnVtYmVyJyB8fFxuICAgIGlzTmFOKGxpbWl0c1tuYW1lXSlcbiAgKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbWl0ICcgKyBuYW1lICsgJyBpcyBub3QgYSB2YWxpZCBudW1iZXInKSB9XG5cbiAgcmV0dXJuIGxpbWl0c1tuYW1lXVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBCX0RDUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcblxcclxcbicpXG5jb25zdCBSRV9DUkxGID0gL1xcclxcbi9nXG5jb25zdCBSRV9IRFIgPSAvXihbXjpdKyk6WyBcXHRdPyhbXFx4MDAtXFx4RkZdKyk/JC8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cbmZ1bmN0aW9uIEhlYWRlclBhcnNlciAoY2ZnKSB7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG5cbiAgY2ZnID0gY2ZnIHx8IHt9XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMubnJlYWQgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhIZWFkZXJQYWlycyA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclBhaXJzJywgMjAwMClcbiAgdGhpcy5tYXhIZWFkZXJTaXplID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyU2l6ZScsIDgwICogMTAyNClcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLnNzID0gbmV3IFN0cmVhbVNlYXJjaChCX0RDUkxGKVxuICB0aGlzLnNzLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZGF0YSAmJiAhc2VsZi5tYXhlZCkge1xuICAgICAgaWYgKHNlbGYubnJlYWQgKyBlbmQgLSBzdGFydCA+PSBzZWxmLm1heEhlYWRlclNpemUpIHtcbiAgICAgICAgZW5kID0gc2VsZi5tYXhIZWFkZXJTaXplIC0gc2VsZi5ucmVhZCArIHN0YXJ0XG4gICAgICAgIHNlbGYubnJlYWQgPSBzZWxmLm1heEhlYWRlclNpemVcbiAgICAgICAgc2VsZi5tYXhlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7IHNlbGYubnJlYWQgKz0gKGVuZCAtIHN0YXJ0KSB9XG5cbiAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHN0YXJ0LCBlbmQpXG4gICAgfVxuICAgIGlmIChpc01hdGNoKSB7IHNlbGYuX2ZpbmlzaCgpIH1cbiAgfSlcbn1cbmluaGVyaXRzKEhlYWRlclBhcnNlciwgRXZlbnRFbWl0dGVyKVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCByID0gdGhpcy5zcy5wdXNoKGRhdGEpXG4gIGlmICh0aGlzLmZpbmlzaGVkKSB7IHJldHVybiByIH1cbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLnNzLnJlc2V0KClcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5idWZmZXIpIHsgdGhpcy5fcGFyc2VIZWFkZXIoKSB9XG4gIHRoaXMuc3MubWF0Y2hlcyA9IHRoaXMuc3MubWF4TWF0Y2hlc1xuICBjb25zdCBoZWFkZXIgPSB0aGlzLmhlYWRlclxuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5maW5pc2hlZCA9IHRydWVcbiAgdGhpcy5ucmVhZCA9IHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX3BhcnNlSGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgcmV0dXJuIH1cblxuICBjb25zdCBsaW5lcyA9IHRoaXMuYnVmZmVyLnNwbGl0KFJFX0NSTEYpXG4gIGNvbnN0IGxlbiA9IGxpbmVzLmxlbmd0aFxuICBsZXQgbSwgaFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAobGluZXNbaV0ubGVuZ3RoID09PSAwKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAobGluZXNbaV1bMF0gPT09ICdcXHQnIHx8IGxpbmVzW2ldWzBdID09PSAnICcpIHtcbiAgICAgIC8vIGZvbGRlZCBoZWFkZXIgY29udGVudFxuICAgICAgLy8gUkZDMjgyMiBzYXlzIHRvIGp1c3QgcmVtb3ZlIHRoZSBDUkxGIGFuZCBub3QgdGhlIHdoaXRlc3BhY2UgZm9sbG93aW5nXG4gICAgICAvLyBpdCwgc28gd2UgZm9sbG93IHRoZSBSRkMgYW5kIGluY2x1ZGUgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSAuLi5cbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyW2hdW3RoaXMuaGVhZGVyW2hdLmxlbmd0aCAtIDFdICs9IGxpbmVzW2ldXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG9zQ29sb24gPSBsaW5lc1tpXS5pbmRleE9mKCc6JylcbiAgICBpZiAoXG4gICAgICBwb3NDb2xvbiA9PT0gLTEgfHxcbiAgICAgIHBvc0NvbG9uID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbSA9IFJFX0hEUi5leGVjKGxpbmVzW2ldKVxuICAgIGggPSBtWzFdLnRvTG93ZXJDYXNlKClcbiAgICB0aGlzLmhlYWRlcltoXSA9IHRoaXMuaGVhZGVyW2hdIHx8IFtdXG4gICAgdGhpcy5oZWFkZXJbaF0ucHVzaCgobVsyXSB8fCAnJykpXG4gICAgaWYgKCsrdGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgYnJlYWsgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGVhZGVyUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBQYXJ0U3RyZWFtID0gcmVxdWlyZSgnLi9QYXJ0U3RyZWFtJylcbmNvbnN0IEhlYWRlclBhcnNlciA9IHJlcXVpcmUoJy4vSGVhZGVyUGFyc2VyJylcblxuY29uc3QgREFTSCA9IDQ1XG5jb25zdCBCX09ORURBU0ggPSBCdWZmZXIuZnJvbSgnLScpXG5jb25zdCBCX0NSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuJylcbmNvbnN0IEVNUFRZX0ZOID0gZnVuY3Rpb24gKCkge31cblxuZnVuY3Rpb24gRGljZXIgKGNmZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGljZXIpKSB7IHJldHVybiBuZXcgRGljZXIoY2ZnKSB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgY2ZnKVxuXG4gIGlmICghY2ZnIHx8ICghY2ZnLmhlYWRlckZpcnN0ICYmIHR5cGVvZiBjZmcuYm91bmRhcnkgIT09ICdzdHJpbmcnKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb3VuZGFyeSByZXF1aXJlZCcpIH1cblxuICBpZiAodHlwZW9mIGNmZy5ib3VuZGFyeSA9PT0gJ3N0cmluZycpIHsgdGhpcy5zZXRCb3VuZGFyeShjZmcuYm91bmRhcnkpIH0gZWxzZSB7IHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWQgfVxuXG4gIHRoaXMuX2hlYWRlckZpcnN0ID0gY2ZnLmhlYWRlckZpcnN0XG5cbiAgdGhpcy5fZGFzaGVzID0gMFxuICB0aGlzLl9wYXJ0cyA9IDBcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgdGhpcy5faXNQcmVhbWJsZSA9IHRydWVcbiAgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZVxuICB0aGlzLl9maXJzdFdyaXRlID0gdHJ1ZVxuICB0aGlzLl9pbkhlYWRlciA9IHRydWVcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgdGhpcy5fcGFydE9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5wYXJ0SHdtIH1cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2hwYXJzZXIgPSBuZXcgSGVhZGVyUGFyc2VyKGNmZylcbiAgdGhpcy5faHBhcnNlci5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIHNlbGYuX2luSGVhZGVyID0gZmFsc2VcbiAgICBzZWxmLl9wYXJ0LmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbiAgfSlcbn1cbmluaGVyaXRzKERpY2VyLCBXcml0YWJsZVN0cmVhbSlcblxuRGljZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJyAmJiAhdGhpcy5fcmVhbEZpbmlzaCkge1xuICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgaWYgKHNlbGYuX3BhcnQgJiYgIXNlbGYuX2lnbm9yZURhdGEpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gKHNlbGYuX2lzUHJlYW1ibGUgPyAnUHJlYW1ibGUnIDogJ1BhcnQnKVxuICAgICAgICAgIHNlbGYuX3BhcnQuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IodHlwZSArICcgdGVybWluYXRlZCBlYXJseSBkdWUgdG8gdW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgICBzZWxmLl9wYXJ0LnB1c2gobnVsbClcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIHsgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG4gIC8vIGlnbm9yZSB1bmV4cGVjdGVkIGRhdGEgKGUuZy4gZXh0cmEgdHJhaWxlciBkYXRhIGFmdGVyIGZpbmlzaGVkKVxuICBpZiAoIXRoaXMuX2hwYXJzZXIgJiYgIXRoaXMuX2JwYXJzZXIpIHsgcmV0dXJuIGNiKCkgfVxuXG4gIGlmICh0aGlzLl9oZWFkZXJGaXJzdCAmJiB0aGlzLl9pc1ByZWFtYmxlKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7IHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KSB9IGVsc2UgeyB0aGlzLl9pZ25vcmUoKSB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YSlcbiAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZGF0YS5sZW5ndGgpIHsgZGF0YSA9IGRhdGEuc2xpY2UocikgfSBlbHNlIHsgcmV0dXJuIGNiKCkgfVxuICB9XG5cbiAgLy8gYWxsb3dzIGZvciBcImVhc2llclwiIHRlc3RpbmdcbiAgaWYgKHRoaXMuX2ZpcnN0V3JpdGUpIHtcbiAgICB0aGlzLl9icGFyc2VyLnB1c2goQl9DUkxGKVxuICAgIHRoaXMuX2ZpcnN0V3JpdGUgPSBmYWxzZVxuICB9XG5cbiAgdGhpcy5fYnBhcnNlci5wdXNoKGRhdGEpXG5cbiAgaWYgKHRoaXMuX3BhdXNlKSB7IHRoaXMuX2NiID0gY2IgfSBlbHNlIHsgY2IoKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkXG4gIHRoaXMuX2hwYXJzZXIgPSB1bmRlZmluZWRcbn1cblxuRGljZXIucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JwYXJzZXIgPSBuZXcgU3RyZWFtU2VhcmNoKCdcXHJcXG4tLScgKyBib3VuZGFyeSlcbiAgdGhpcy5fYnBhcnNlci5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgc2VsZi5fb25pbmZvKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpXG4gIH0pXG59XG5cbkRpY2VyLnByb3RvdHlwZS5faWdub3JlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fcGFydCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIHRoaXMuX2lnbm9yZURhdGEgPSB0cnVlXG4gICAgdGhpcy5fcGFydC5vbignZXJyb3InLCBFTVBUWV9GTilcbiAgICAvLyB3ZSBtdXN0IHBlcmZvcm0gc29tZSBraW5kIG9mIHJlYWQgb24gdGhlIHN0cmVhbSBldmVuIHRob3VnaCB3ZSBhcmVcbiAgICAvLyBpZ25vcmluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIG5vZGUncyBSZWFkYWJsZSBzdHJlYW0gd2lsbCBub3QgZW1pdCAnZW5kJ1xuICAgIC8vIGFmdGVyIHB1c2hpbmcgbnVsbCB0byB0aGUgc3RyZWFtXG4gICAgdGhpcy5fcGFydC5yZXN1bWUoKVxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fb25pbmZvID0gZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGJ1ZjsgY29uc3Qgc2VsZiA9IHRoaXM7IGxldCBpID0gMDsgbGV0IHI7IGxldCBzaG91bGRXcml0ZU1vcmUgPSB0cnVlXG5cbiAgaWYgKCF0aGlzLl9wYXJ0ICYmIHRoaXMuX2p1c3RNYXRjaGVkICYmIGRhdGEpIHtcbiAgICB3aGlsZSAodGhpcy5fZGFzaGVzIDwgMiAmJiAoc3RhcnQgKyBpKSA8IGVuZCkge1xuICAgICAgaWYgKGRhdGFbc3RhcnQgKyBpXSA9PT0gREFTSCkge1xuICAgICAgICArK2lcbiAgICAgICAgKyt0aGlzLl9kYXNoZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgYnVmID0gQl9PTkVEQVNIIH1cbiAgICAgICAgdGhpcy5fZGFzaGVzID0gMFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzID09PSAyKSB7XG4gICAgICBpZiAoKHN0YXJ0ICsgaSkgPCBlbmQgJiYgdGhpcy5saXN0ZW5lckNvdW50KCd0cmFpbGVyJykgIT09IDApIHsgdGhpcy5lbWl0KCd0cmFpbGVyJywgZGF0YS5zbGljZShzdGFydCArIGksIGVuZCkpIH1cbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gICAgICAvLyBubyBtb3JlIHBhcnRzIHdpbGwgYmUgYWRkZWRcbiAgICAgIGlmIChzZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzKSB7IHJldHVybiB9XG4gIH1cbiAgaWYgKHRoaXMuX2p1c3RNYXRjaGVkKSB7IHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2UgfVxuICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgdGhpcy5fcGFydC5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICBzZWxmLl91bnBhdXNlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJlYW1ibGUgIT09IHRydWUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwYXJ0JykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncGFydCcsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lnbm9yZSgpXG4gICAgfVxuICAgIGlmICghdGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pbkhlYWRlciA9IHRydWUgfVxuICB9XG4gIGlmIChkYXRhICYmIHN0YXJ0IDwgZW5kICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgfHwgIXRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChidWYpIH1cbiAgICAgIHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCFzaG91bGRXcml0ZU1vcmUpIHsgdGhpcy5fcGF1c2UgPSB0cnVlIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHRoaXMuX2hwYXJzZXIucHVzaChidWYpIH1cbiAgICAgIHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBlbmQpIHsgdGhpcy5fb25pbmZvKGZhbHNlLCBkYXRhLCBzdGFydCArIHIsIGVuZCkgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNYXRjaCkge1xuICAgIHRoaXMuX2hwYXJzZXIucmVzZXQoKVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2lzUHJlYW1ibGUgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgKyt0aGlzLl9wYXJ0c1xuICAgICAgICB0aGlzLl9wYXJ0Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKC0tc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9maW5pc2hlZCkge1xuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9wYXJ0LnB1c2gobnVsbClcbiAgICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gICAgdGhpcy5fanVzdE1hdGNoZWQgPSB0cnVlXG4gICAgdGhpcy5fZGFzaGVzID0gMFxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fdW5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wYXVzZSkgeyByZXR1cm4gfVxuXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgaWYgKHRoaXMuX2NiKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gICAgY2IoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIE5vZGUgaGFzIGFsd2F5cyB1dGYtOFxuY29uc3QgdXRmOERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbmNvbnN0IHRleHREZWNvZGVycyA9IG5ldyBNYXAoW1xuICBbJ3V0Zi04JywgdXRmOERlY29kZXJdLFxuICBbJ3V0ZjgnLCB1dGY4RGVjb2Rlcl1cbl0pXG5cbmZ1bmN0aW9uIGdldERlY29kZXIgKGNoYXJzZXQpIHtcbiAgbGV0IGxjXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjhcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdhc2NpaSc6IC8vIFRPRE86IE1ha2UgdGhlc2UgYSBzZXBhcmF0ZSwgc3RyaWN0IGRlY29kZXI/XG4gICAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5MSc6XG4gICAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgICAgY2FzZSAnY3AxMjUyJzpcbiAgICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmxhdGluMVxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjE2bGVcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5iYXNlNjRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGMgPSB0cnVlXG4gICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLm90aGVyLmJpbmQoY2hhcnNldClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVjb2RlcnMgPSB7XG4gIHV0Zjg6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudXRmOFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGxhdGluMTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubGF0aW4xU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgdXRmMTZsZTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51Y3MyU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgYmFzZTY0OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJhc2U2NFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIG90aGVyOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuXG4gICAgaWYgKHRleHREZWNvZGVycy5oYXModGhpcy50b1N0cmluZygpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVycy5nZXQodGhpcykuZGVjb2RlKGRhdGEpXG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVUZXh0ICh0ZXh0LCBzb3VyY2VFbmNvZGluZywgZGVzdEVuY29kaW5nKSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgcmV0dXJuIGdldERlY29kZXIoZGVzdEVuY29kaW5nKSh0ZXh0LCBzb3VyY2VFbmNvZGluZylcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZVRleHRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgb2JqZWN0LXByb3BlcnR5LW5ld2xpbmUgKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi9kZWNvZGVUZXh0JylcblxuY29uc3QgUkVfRU5DT0RFRCA9IC8lW2EtZkEtRjAtOV1bYS1mQS1GMC05XS9nXG5cbmNvbnN0IEVuY29kZWRMb29rdXAgPSB7XG4gICclMDAnOiAnXFx4MDAnLCAnJTAxJzogJ1xceDAxJywgJyUwMic6ICdcXHgwMicsICclMDMnOiAnXFx4MDMnLCAnJTA0JzogJ1xceDA0JyxcbiAgJyUwNSc6ICdcXHgwNScsICclMDYnOiAnXFx4MDYnLCAnJTA3JzogJ1xceDA3JywgJyUwOCc6ICdcXHgwOCcsICclMDknOiAnXFx4MDknLFxuICAnJTBhJzogJ1xceDBhJywgJyUwQSc6ICdcXHgwYScsICclMGInOiAnXFx4MGInLCAnJTBCJzogJ1xceDBiJywgJyUwYyc6ICdcXHgwYycsXG4gICclMEMnOiAnXFx4MGMnLCAnJTBkJzogJ1xceDBkJywgJyUwRCc6ICdcXHgwZCcsICclMGUnOiAnXFx4MGUnLCAnJTBFJzogJ1xceDBlJyxcbiAgJyUwZic6ICdcXHgwZicsICclMEYnOiAnXFx4MGYnLCAnJTEwJzogJ1xceDEwJywgJyUxMSc6ICdcXHgxMScsICclMTInOiAnXFx4MTInLFxuICAnJTEzJzogJ1xceDEzJywgJyUxNCc6ICdcXHgxNCcsICclMTUnOiAnXFx4MTUnLCAnJTE2JzogJ1xceDE2JywgJyUxNyc6ICdcXHgxNycsXG4gICclMTgnOiAnXFx4MTgnLCAnJTE5JzogJ1xceDE5JywgJyUxYSc6ICdcXHgxYScsICclMUEnOiAnXFx4MWEnLCAnJTFiJzogJ1xceDFiJyxcbiAgJyUxQic6ICdcXHgxYicsICclMWMnOiAnXFx4MWMnLCAnJTFDJzogJ1xceDFjJywgJyUxZCc6ICdcXHgxZCcsICclMUQnOiAnXFx4MWQnLFxuICAnJTFlJzogJ1xceDFlJywgJyUxRSc6ICdcXHgxZScsICclMWYnOiAnXFx4MWYnLCAnJTFGJzogJ1xceDFmJywgJyUyMCc6ICdcXHgyMCcsXG4gICclMjEnOiAnXFx4MjEnLCAnJTIyJzogJ1xceDIyJywgJyUyMyc6ICdcXHgyMycsICclMjQnOiAnXFx4MjQnLCAnJTI1JzogJ1xceDI1JyxcbiAgJyUyNic6ICdcXHgyNicsICclMjcnOiAnXFx4MjcnLCAnJTI4JzogJ1xceDI4JywgJyUyOSc6ICdcXHgyOScsICclMmEnOiAnXFx4MmEnLFxuICAnJTJBJzogJ1xceDJhJywgJyUyYic6ICdcXHgyYicsICclMkInOiAnXFx4MmInLCAnJTJjJzogJ1xceDJjJywgJyUyQyc6ICdcXHgyYycsXG4gICclMmQnOiAnXFx4MmQnLCAnJTJEJzogJ1xceDJkJywgJyUyZSc6ICdcXHgyZScsICclMkUnOiAnXFx4MmUnLCAnJTJmJzogJ1xceDJmJyxcbiAgJyUyRic6ICdcXHgyZicsICclMzAnOiAnXFx4MzAnLCAnJTMxJzogJ1xceDMxJywgJyUzMic6ICdcXHgzMicsICclMzMnOiAnXFx4MzMnLFxuICAnJTM0JzogJ1xceDM0JywgJyUzNSc6ICdcXHgzNScsICclMzYnOiAnXFx4MzYnLCAnJTM3JzogJ1xceDM3JywgJyUzOCc6ICdcXHgzOCcsXG4gICclMzknOiAnXFx4MzknLCAnJTNhJzogJ1xceDNhJywgJyUzQSc6ICdcXHgzYScsICclM2InOiAnXFx4M2InLCAnJTNCJzogJ1xceDNiJyxcbiAgJyUzYyc6ICdcXHgzYycsICclM0MnOiAnXFx4M2MnLCAnJTNkJzogJ1xceDNkJywgJyUzRCc6ICdcXHgzZCcsICclM2UnOiAnXFx4M2UnLFxuICAnJTNFJzogJ1xceDNlJywgJyUzZic6ICdcXHgzZicsICclM0YnOiAnXFx4M2YnLCAnJTQwJzogJ1xceDQwJywgJyU0MSc6ICdcXHg0MScsXG4gICclNDInOiAnXFx4NDInLCAnJTQzJzogJ1xceDQzJywgJyU0NCc6ICdcXHg0NCcsICclNDUnOiAnXFx4NDUnLCAnJTQ2JzogJ1xceDQ2JyxcbiAgJyU0Nyc6ICdcXHg0NycsICclNDgnOiAnXFx4NDgnLCAnJTQ5JzogJ1xceDQ5JywgJyU0YSc6ICdcXHg0YScsICclNEEnOiAnXFx4NGEnLFxuICAnJTRiJzogJ1xceDRiJywgJyU0Qic6ICdcXHg0YicsICclNGMnOiAnXFx4NGMnLCAnJTRDJzogJ1xceDRjJywgJyU0ZCc6ICdcXHg0ZCcsXG4gICclNEQnOiAnXFx4NGQnLCAnJTRlJzogJ1xceDRlJywgJyU0RSc6ICdcXHg0ZScsICclNGYnOiAnXFx4NGYnLCAnJTRGJzogJ1xceDRmJyxcbiAgJyU1MCc6ICdcXHg1MCcsICclNTEnOiAnXFx4NTEnLCAnJTUyJzogJ1xceDUyJywgJyU1Myc6ICdcXHg1MycsICclNTQnOiAnXFx4NTQnLFxuICAnJTU1JzogJ1xceDU1JywgJyU1Nic6ICdcXHg1NicsICclNTcnOiAnXFx4NTcnLCAnJTU4JzogJ1xceDU4JywgJyU1OSc6ICdcXHg1OScsXG4gICclNWEnOiAnXFx4NWEnLCAnJTVBJzogJ1xceDVhJywgJyU1Yic6ICdcXHg1YicsICclNUInOiAnXFx4NWInLCAnJTVjJzogJ1xceDVjJyxcbiAgJyU1Qyc6ICdcXHg1YycsICclNWQnOiAnXFx4NWQnLCAnJTVEJzogJ1xceDVkJywgJyU1ZSc6ICdcXHg1ZScsICclNUUnOiAnXFx4NWUnLFxuICAnJTVmJzogJ1xceDVmJywgJyU1Ric6ICdcXHg1ZicsICclNjAnOiAnXFx4NjAnLCAnJTYxJzogJ1xceDYxJywgJyU2Mic6ICdcXHg2MicsXG4gICclNjMnOiAnXFx4NjMnLCAnJTY0JzogJ1xceDY0JywgJyU2NSc6ICdcXHg2NScsICclNjYnOiAnXFx4NjYnLCAnJTY3JzogJ1xceDY3JyxcbiAgJyU2OCc6ICdcXHg2OCcsICclNjknOiAnXFx4NjknLCAnJTZhJzogJ1xceDZhJywgJyU2QSc6ICdcXHg2YScsICclNmInOiAnXFx4NmInLFxuICAnJTZCJzogJ1xceDZiJywgJyU2Yyc6ICdcXHg2YycsICclNkMnOiAnXFx4NmMnLCAnJTZkJzogJ1xceDZkJywgJyU2RCc6ICdcXHg2ZCcsXG4gICclNmUnOiAnXFx4NmUnLCAnJTZFJzogJ1xceDZlJywgJyU2Zic6ICdcXHg2ZicsICclNkYnOiAnXFx4NmYnLCAnJTcwJzogJ1xceDcwJyxcbiAgJyU3MSc6ICdcXHg3MScsICclNzInOiAnXFx4NzInLCAnJTczJzogJ1xceDczJywgJyU3NCc6ICdcXHg3NCcsICclNzUnOiAnXFx4NzUnLFxuICAnJTc2JzogJ1xceDc2JywgJyU3Nyc6ICdcXHg3NycsICclNzgnOiAnXFx4NzgnLCAnJTc5JzogJ1xceDc5JywgJyU3YSc6ICdcXHg3YScsXG4gICclN0EnOiAnXFx4N2EnLCAnJTdiJzogJ1xceDdiJywgJyU3Qic6ICdcXHg3YicsICclN2MnOiAnXFx4N2MnLCAnJTdDJzogJ1xceDdjJyxcbiAgJyU3ZCc6ICdcXHg3ZCcsICclN0QnOiAnXFx4N2QnLCAnJTdlJzogJ1xceDdlJywgJyU3RSc6ICdcXHg3ZScsICclN2YnOiAnXFx4N2YnLFxuICAnJTdGJzogJ1xceDdmJywgJyU4MCc6ICdcXHg4MCcsICclODEnOiAnXFx4ODEnLCAnJTgyJzogJ1xceDgyJywgJyU4Myc6ICdcXHg4MycsXG4gICclODQnOiAnXFx4ODQnLCAnJTg1JzogJ1xceDg1JywgJyU4Nic6ICdcXHg4NicsICclODcnOiAnXFx4ODcnLCAnJTg4JzogJ1xceDg4JyxcbiAgJyU4OSc6ICdcXHg4OScsICclOGEnOiAnXFx4OGEnLCAnJThBJzogJ1xceDhhJywgJyU4Yic6ICdcXHg4YicsICclOEInOiAnXFx4OGInLFxuICAnJThjJzogJ1xceDhjJywgJyU4Qyc6ICdcXHg4YycsICclOGQnOiAnXFx4OGQnLCAnJThEJzogJ1xceDhkJywgJyU4ZSc6ICdcXHg4ZScsXG4gICclOEUnOiAnXFx4OGUnLCAnJThmJzogJ1xceDhmJywgJyU4Ric6ICdcXHg4ZicsICclOTAnOiAnXFx4OTAnLCAnJTkxJzogJ1xceDkxJyxcbiAgJyU5Mic6ICdcXHg5MicsICclOTMnOiAnXFx4OTMnLCAnJTk0JzogJ1xceDk0JywgJyU5NSc6ICdcXHg5NScsICclOTYnOiAnXFx4OTYnLFxuICAnJTk3JzogJ1xceDk3JywgJyU5OCc6ICdcXHg5OCcsICclOTknOiAnXFx4OTknLCAnJTlhJzogJ1xceDlhJywgJyU5QSc6ICdcXHg5YScsXG4gICclOWInOiAnXFx4OWInLCAnJTlCJzogJ1xceDliJywgJyU5Yyc6ICdcXHg5YycsICclOUMnOiAnXFx4OWMnLCAnJTlkJzogJ1xceDlkJyxcbiAgJyU5RCc6ICdcXHg5ZCcsICclOWUnOiAnXFx4OWUnLCAnJTlFJzogJ1xceDllJywgJyU5Zic6ICdcXHg5ZicsICclOUYnOiAnXFx4OWYnLFxuICAnJWEwJzogJ1xceGEwJywgJyVBMCc6ICdcXHhhMCcsICclYTEnOiAnXFx4YTEnLCAnJUExJzogJ1xceGExJywgJyVhMic6ICdcXHhhMicsXG4gICclQTInOiAnXFx4YTInLCAnJWEzJzogJ1xceGEzJywgJyVBMyc6ICdcXHhhMycsICclYTQnOiAnXFx4YTQnLCAnJUE0JzogJ1xceGE0JyxcbiAgJyVhNSc6ICdcXHhhNScsICclQTUnOiAnXFx4YTUnLCAnJWE2JzogJ1xceGE2JywgJyVBNic6ICdcXHhhNicsICclYTcnOiAnXFx4YTcnLFxuICAnJUE3JzogJ1xceGE3JywgJyVhOCc6ICdcXHhhOCcsICclQTgnOiAnXFx4YTgnLCAnJWE5JzogJ1xceGE5JywgJyVBOSc6ICdcXHhhOScsXG4gICclYWEnOiAnXFx4YWEnLCAnJUFhJzogJ1xceGFhJywgJyVhQSc6ICdcXHhhYScsICclQUEnOiAnXFx4YWEnLCAnJWFiJzogJ1xceGFiJyxcbiAgJyVBYic6ICdcXHhhYicsICclYUInOiAnXFx4YWInLCAnJUFCJzogJ1xceGFiJywgJyVhYyc6ICdcXHhhYycsICclQWMnOiAnXFx4YWMnLFxuICAnJWFDJzogJ1xceGFjJywgJyVBQyc6ICdcXHhhYycsICclYWQnOiAnXFx4YWQnLCAnJUFkJzogJ1xceGFkJywgJyVhRCc6ICdcXHhhZCcsXG4gICclQUQnOiAnXFx4YWQnLCAnJWFlJzogJ1xceGFlJywgJyVBZSc6ICdcXHhhZScsICclYUUnOiAnXFx4YWUnLCAnJUFFJzogJ1xceGFlJyxcbiAgJyVhZic6ICdcXHhhZicsICclQWYnOiAnXFx4YWYnLCAnJWFGJzogJ1xceGFmJywgJyVBRic6ICdcXHhhZicsICclYjAnOiAnXFx4YjAnLFxuICAnJUIwJzogJ1xceGIwJywgJyViMSc6ICdcXHhiMScsICclQjEnOiAnXFx4YjEnLCAnJWIyJzogJ1xceGIyJywgJyVCMic6ICdcXHhiMicsXG4gICclYjMnOiAnXFx4YjMnLCAnJUIzJzogJ1xceGIzJywgJyViNCc6ICdcXHhiNCcsICclQjQnOiAnXFx4YjQnLCAnJWI1JzogJ1xceGI1JyxcbiAgJyVCNSc6ICdcXHhiNScsICclYjYnOiAnXFx4YjYnLCAnJUI2JzogJ1xceGI2JywgJyViNyc6ICdcXHhiNycsICclQjcnOiAnXFx4YjcnLFxuICAnJWI4JzogJ1xceGI4JywgJyVCOCc6ICdcXHhiOCcsICclYjknOiAnXFx4YjknLCAnJUI5JzogJ1xceGI5JywgJyViYSc6ICdcXHhiYScsXG4gICclQmEnOiAnXFx4YmEnLCAnJWJBJzogJ1xceGJhJywgJyVCQSc6ICdcXHhiYScsICclYmInOiAnXFx4YmInLCAnJUJiJzogJ1xceGJiJyxcbiAgJyViQic6ICdcXHhiYicsICclQkInOiAnXFx4YmInLCAnJWJjJzogJ1xceGJjJywgJyVCYyc6ICdcXHhiYycsICclYkMnOiAnXFx4YmMnLFxuICAnJUJDJzogJ1xceGJjJywgJyViZCc6ICdcXHhiZCcsICclQmQnOiAnXFx4YmQnLCAnJWJEJzogJ1xceGJkJywgJyVCRCc6ICdcXHhiZCcsXG4gICclYmUnOiAnXFx4YmUnLCAnJUJlJzogJ1xceGJlJywgJyViRSc6ICdcXHhiZScsICclQkUnOiAnXFx4YmUnLCAnJWJmJzogJ1xceGJmJyxcbiAgJyVCZic6ICdcXHhiZicsICclYkYnOiAnXFx4YmYnLCAnJUJGJzogJ1xceGJmJywgJyVjMCc6ICdcXHhjMCcsICclQzAnOiAnXFx4YzAnLFxuICAnJWMxJzogJ1xceGMxJywgJyVDMSc6ICdcXHhjMScsICclYzInOiAnXFx4YzInLCAnJUMyJzogJ1xceGMyJywgJyVjMyc6ICdcXHhjMycsXG4gICclQzMnOiAnXFx4YzMnLCAnJWM0JzogJ1xceGM0JywgJyVDNCc6ICdcXHhjNCcsICclYzUnOiAnXFx4YzUnLCAnJUM1JzogJ1xceGM1JyxcbiAgJyVjNic6ICdcXHhjNicsICclQzYnOiAnXFx4YzYnLCAnJWM3JzogJ1xceGM3JywgJyVDNyc6ICdcXHhjNycsICclYzgnOiAnXFx4YzgnLFxuICAnJUM4JzogJ1xceGM4JywgJyVjOSc6ICdcXHhjOScsICclQzknOiAnXFx4YzknLCAnJWNhJzogJ1xceGNhJywgJyVDYSc6ICdcXHhjYScsXG4gICclY0EnOiAnXFx4Y2EnLCAnJUNBJzogJ1xceGNhJywgJyVjYic6ICdcXHhjYicsICclQ2InOiAnXFx4Y2InLCAnJWNCJzogJ1xceGNiJyxcbiAgJyVDQic6ICdcXHhjYicsICclY2MnOiAnXFx4Y2MnLCAnJUNjJzogJ1xceGNjJywgJyVjQyc6ICdcXHhjYycsICclQ0MnOiAnXFx4Y2MnLFxuICAnJWNkJzogJ1xceGNkJywgJyVDZCc6ICdcXHhjZCcsICclY0QnOiAnXFx4Y2QnLCAnJUNEJzogJ1xceGNkJywgJyVjZSc6ICdcXHhjZScsXG4gICclQ2UnOiAnXFx4Y2UnLCAnJWNFJzogJ1xceGNlJywgJyVDRSc6ICdcXHhjZScsICclY2YnOiAnXFx4Y2YnLCAnJUNmJzogJ1xceGNmJyxcbiAgJyVjRic6ICdcXHhjZicsICclQ0YnOiAnXFx4Y2YnLCAnJWQwJzogJ1xceGQwJywgJyVEMCc6ICdcXHhkMCcsICclZDEnOiAnXFx4ZDEnLFxuICAnJUQxJzogJ1xceGQxJywgJyVkMic6ICdcXHhkMicsICclRDInOiAnXFx4ZDInLCAnJWQzJzogJ1xceGQzJywgJyVEMyc6ICdcXHhkMycsXG4gICclZDQnOiAnXFx4ZDQnLCAnJUQ0JzogJ1xceGQ0JywgJyVkNSc6ICdcXHhkNScsICclRDUnOiAnXFx4ZDUnLCAnJWQ2JzogJ1xceGQ2JyxcbiAgJyVENic6ICdcXHhkNicsICclZDcnOiAnXFx4ZDcnLCAnJUQ3JzogJ1xceGQ3JywgJyVkOCc6ICdcXHhkOCcsICclRDgnOiAnXFx4ZDgnLFxuICAnJWQ5JzogJ1xceGQ5JywgJyVEOSc6ICdcXHhkOScsICclZGEnOiAnXFx4ZGEnLCAnJURhJzogJ1xceGRhJywgJyVkQSc6ICdcXHhkYScsXG4gICclREEnOiAnXFx4ZGEnLCAnJWRiJzogJ1xceGRiJywgJyVEYic6ICdcXHhkYicsICclZEInOiAnXFx4ZGInLCAnJURCJzogJ1xceGRiJyxcbiAgJyVkYyc6ICdcXHhkYycsICclRGMnOiAnXFx4ZGMnLCAnJWRDJzogJ1xceGRjJywgJyVEQyc6ICdcXHhkYycsICclZGQnOiAnXFx4ZGQnLFxuICAnJURkJzogJ1xceGRkJywgJyVkRCc6ICdcXHhkZCcsICclREQnOiAnXFx4ZGQnLCAnJWRlJzogJ1xceGRlJywgJyVEZSc6ICdcXHhkZScsXG4gICclZEUnOiAnXFx4ZGUnLCAnJURFJzogJ1xceGRlJywgJyVkZic6ICdcXHhkZicsICclRGYnOiAnXFx4ZGYnLCAnJWRGJzogJ1xceGRmJyxcbiAgJyVERic6ICdcXHhkZicsICclZTAnOiAnXFx4ZTAnLCAnJUUwJzogJ1xceGUwJywgJyVlMSc6ICdcXHhlMScsICclRTEnOiAnXFx4ZTEnLFxuICAnJWUyJzogJ1xceGUyJywgJyVFMic6ICdcXHhlMicsICclZTMnOiAnXFx4ZTMnLCAnJUUzJzogJ1xceGUzJywgJyVlNCc6ICdcXHhlNCcsXG4gICclRTQnOiAnXFx4ZTQnLCAnJWU1JzogJ1xceGU1JywgJyVFNSc6ICdcXHhlNScsICclZTYnOiAnXFx4ZTYnLCAnJUU2JzogJ1xceGU2JyxcbiAgJyVlNyc6ICdcXHhlNycsICclRTcnOiAnXFx4ZTcnLCAnJWU4JzogJ1xceGU4JywgJyVFOCc6ICdcXHhlOCcsICclZTknOiAnXFx4ZTknLFxuICAnJUU5JzogJ1xceGU5JywgJyVlYSc6ICdcXHhlYScsICclRWEnOiAnXFx4ZWEnLCAnJWVBJzogJ1xceGVhJywgJyVFQSc6ICdcXHhlYScsXG4gICclZWInOiAnXFx4ZWInLCAnJUViJzogJ1xceGViJywgJyVlQic6ICdcXHhlYicsICclRUInOiAnXFx4ZWInLCAnJWVjJzogJ1xceGVjJyxcbiAgJyVFYyc6ICdcXHhlYycsICclZUMnOiAnXFx4ZWMnLCAnJUVDJzogJ1xceGVjJywgJyVlZCc6ICdcXHhlZCcsICclRWQnOiAnXFx4ZWQnLFxuICAnJWVEJzogJ1xceGVkJywgJyVFRCc6ICdcXHhlZCcsICclZWUnOiAnXFx4ZWUnLCAnJUVlJzogJ1xceGVlJywgJyVlRSc6ICdcXHhlZScsXG4gICclRUUnOiAnXFx4ZWUnLCAnJWVmJzogJ1xceGVmJywgJyVFZic6ICdcXHhlZicsICclZUYnOiAnXFx4ZWYnLCAnJUVGJzogJ1xceGVmJyxcbiAgJyVmMCc6ICdcXHhmMCcsICclRjAnOiAnXFx4ZjAnLCAnJWYxJzogJ1xceGYxJywgJyVGMSc6ICdcXHhmMScsICclZjInOiAnXFx4ZjInLFxuICAnJUYyJzogJ1xceGYyJywgJyVmMyc6ICdcXHhmMycsICclRjMnOiAnXFx4ZjMnLCAnJWY0JzogJ1xceGY0JywgJyVGNCc6ICdcXHhmNCcsXG4gICclZjUnOiAnXFx4ZjUnLCAnJUY1JzogJ1xceGY1JywgJyVmNic6ICdcXHhmNicsICclRjYnOiAnXFx4ZjYnLCAnJWY3JzogJ1xceGY3JyxcbiAgJyVGNyc6ICdcXHhmNycsICclZjgnOiAnXFx4ZjgnLCAnJUY4JzogJ1xceGY4JywgJyVmOSc6ICdcXHhmOScsICclRjknOiAnXFx4ZjknLFxuICAnJWZhJzogJ1xceGZhJywgJyVGYSc6ICdcXHhmYScsICclZkEnOiAnXFx4ZmEnLCAnJUZBJzogJ1xceGZhJywgJyVmYic6ICdcXHhmYicsXG4gICclRmInOiAnXFx4ZmInLCAnJWZCJzogJ1xceGZiJywgJyVGQic6ICdcXHhmYicsICclZmMnOiAnXFx4ZmMnLCAnJUZjJzogJ1xceGZjJyxcbiAgJyVmQyc6ICdcXHhmYycsICclRkMnOiAnXFx4ZmMnLCAnJWZkJzogJ1xceGZkJywgJyVGZCc6ICdcXHhmZCcsICclZkQnOiAnXFx4ZmQnLFxuICAnJUZEJzogJ1xceGZkJywgJyVmZSc6ICdcXHhmZScsICclRmUnOiAnXFx4ZmUnLCAnJWZFJzogJ1xceGZlJywgJyVGRSc6ICdcXHhmZScsXG4gICclZmYnOiAnXFx4ZmYnLCAnJUZmJzogJ1xceGZmJywgJyVmRic6ICdcXHhmZicsICclRkYnOiAnXFx4ZmYnXG59XG5cbmZ1bmN0aW9uIGVuY29kZWRSZXBsYWNlciAobWF0Y2gpIHtcbiAgcmV0dXJuIEVuY29kZWRMb29rdXBbbWF0Y2hdXG59XG5cbmNvbnN0IFNUQVRFX0tFWSA9IDBcbmNvbnN0IFNUQVRFX1ZBTFVFID0gMVxuY29uc3QgU1RBVEVfQ0hBUlNFVCA9IDJcbmNvbnN0IFNUQVRFX0xBTkcgPSAzXG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zIChzdHIpIHtcbiAgY29uc3QgcmVzID0gW11cbiAgbGV0IHN0YXRlID0gU1RBVEVfS0VZXG4gIGxldCBjaGFyc2V0ID0gJydcbiAgbGV0IGlucXVvdGUgPSBmYWxzZVxuICBsZXQgZXNjYXBpbmcgPSBmYWxzZVxuICBsZXQgcCA9IDBcbiAgbGV0IHRtcCA9ICcnXG4gIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgY29uc3QgY2hhciA9IHN0cltpXVxuICAgIGlmIChjaGFyID09PSAnXFxcXCcgJiYgaW5xdW90ZSkge1xuICAgICAgaWYgKGVzY2FwaW5nKSB7IGVzY2FwaW5nID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgIGlmIChpbnF1b3RlKSB7XG4gICAgICAgICAgaW5xdW90ZSA9IGZhbHNlXG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgfSBlbHNlIHsgaW5xdW90ZSA9IHRydWUgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHsgZXNjYXBpbmcgPSBmYWxzZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlc2NhcGluZyAmJiBpbnF1b3RlKSB7IHRtcCArPSAnXFxcXCcgfVxuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgaWYgKChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCB8fCBzdGF0ZSA9PT0gU1RBVEVfTEFORykgJiYgY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBTVEFURV9DSEFSU0VUKSB7XG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9MQU5HXG4gICAgICAgICAgY2hhcnNldCA9IHRtcC5zdWJzdHJpbmcoMSlcbiAgICAgICAgfSBlbHNlIHsgc3RhdGUgPSBTVEFURV9WQUxVRSB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBTVEFURV9LRVkgJiZcbiAgICAgICAgKGNoYXIgPT09ICcqJyB8fCBjaGFyID09PSAnPScpICYmXG4gICAgICAgIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGUgPSBjaGFyID09PSAnKidcbiAgICAgICAgICA/IFNUQVRFX0NIQVJTRVRcbiAgICAgICAgICA6IFNUQVRFX1ZBTFVFXG4gICAgICAgIHJlc1twXSA9IFt0bXAsIHVuZGVmaW5lZF1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgY2hhciA9PT0gJzsnKSB7XG4gICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIGlmIChjaGFyc2V0KSB7XG4gICAgICAgICAgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICAgICAgICAgJ2JpbmFyeScsXG4gICAgICAgICAgICAgIGNoYXJzZXQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYXJzZXQgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHsgcmVzW3BdID0gdG1wIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgICsrcFxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSkgeyBjb250aW51ZSB9XG4gICAgfVxuICAgIHRtcCArPSBjaGFyXG4gIH1cbiAgaWYgKGNoYXJzZXQgJiYgdG1wLmxlbmd0aCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICdiaW5hcnknLFxuICAgICAgY2hhcnNldClcbiAgfSBlbHNlIGlmICh0bXApIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgfVxuXG4gIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0bXApIHsgcmVzW3BdID0gdG1wIH1cbiAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cblxuICByZXR1cm4gcmVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VQYXJhbXNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZW5hbWUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgeyByZXR1cm4gJycgfVxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHN3aXRjaCAocGF0aC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MkY6IC8vICcvJ1xuICAgICAgY2FzZSAweDVDOiAvLyAnXFwnXG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGkgKyAxKVxuICAgICAgICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gVE9ETzpcbi8vICAqIHN1cHBvcnQgMSBuZXN0ZWQgbXVsdGlwYXJ0IGxldmVsXG4vLyAgICAoc2VlIHNlY29uZCBtdWx0aXBhcnQgZXhhbXBsZSBoZXJlOlxuLy8gICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNkaWR4LW11bHRpcGFydGZvcm0tZGF0YSlcbi8vICAqIHN1cHBvcnQgbGltaXRzLmZpZWxkTmFtZVNpemVcbi8vICAgICAtLSB0aGlzIHdpbGwgcmVxdWlyZSBtb2RpZmljYXRpb25zIHRvIHV0aWxzLnBhcnNlUGFyYW1zXG5cbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4uL3V0aWxzL3BhcnNlUGFyYW1zJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGJhc2VuYW1lID0gcmVxdWlyZSgnLi4vdXRpbHMvYmFzZW5hbWUnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0JPVU5EQVJZID0gL15ib3VuZGFyeSQvaVxuY29uc3QgUkVfRklFTEQgPSAvXmZvcm0tZGF0YSQvaVxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuY29uc3QgUkVfRklMRU5BTUUgPSAvXmZpbGVuYW1lJC9pXG5jb25zdCBSRV9OQU1FID0gL15uYW1lJC9pXG5cbk11bHRpcGFydC5kZXRlY3QgPSAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pXG5mdW5jdGlvbiBNdWx0aXBhcnQgKGJveSwgY2ZnKSB7XG4gIGxldCBpXG4gIGxldCBsZW5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IGJvdW5kYXJ5XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgaXNQYXJ0QUZpbGUgPSBjZmcuaXNQYXJ0QUZpbGUgfHwgKChmaWVsZE5hbWUsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4gKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSlcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlIHx8IFtdXG4gIGNvbnN0IGRlZkNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCdcbiAgY29uc3QgcHJlc2VydmVQYXRoID0gY2ZnLnByZXNlcnZlUGF0aFxuICBjb25zdCBmaWxlT3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLmZpbGVId20gfVxuXG4gIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgUkVfQk9VTkRBUlkudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgYm91bmRhcnkgPSBwYXJzZWRDb25UeXBlW2ldWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRmluaXNoZWQgKCkge1xuICAgIGlmIChuZW5kcyA9PT0gMCAmJiBmaW5pc2hlZCAmJiAhYm95Ll9kb25lKSB7XG4gICAgICBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICBzZWxmLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBhcnQ6IEJvdW5kYXJ5IG5vdCBmb3VuZCcpIH1cblxuICBjb25zdCBmaWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgY29uc3QgZmlsZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVTaXplJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpbGVzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlcycsIEluZmluaXR5KVxuICBjb25zdCBmaWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuICBjb25zdCBwYXJ0c0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAncGFydHMnLCBJbmZpbml0eSlcbiAgY29uc3QgaGVhZGVyUGFpcnNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclBhaXJzJywgMjAwMClcbiAgY29uc3QgaGVhZGVyU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyU2l6ZScsIDgwICogMTAyNClcblxuICBsZXQgbmZpbGVzID0gMFxuICBsZXQgbmZpZWxkcyA9IDBcbiAgbGV0IG5lbmRzID0gMFxuICBsZXQgY3VyRmlsZVxuICBsZXQgY3VyRmllbGRcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICB0aGlzLl9uZWVkRHJhaW4gPSBmYWxzZVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX25wYXJ0cyA9IDBcbiAgdGhpcy5fYm95ID0gYm95XG5cbiAgY29uc3QgcGFyc2VyQ2ZnID0ge1xuICAgIGJvdW5kYXJ5LFxuICAgIG1heEhlYWRlclBhaXJzOiBoZWFkZXJQYWlyc0xpbWl0LFxuICAgIG1heEhlYWRlclNpemU6IGhlYWRlclNpemVMaW1pdCxcbiAgICBwYXJ0SHdtOiBmaWxlT3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGhpZ2hXYXRlck1hcms6IGNmZy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICB0aGlzLnBhcnNlciA9IG5ldyBEaWNlcihwYXJzZXJDZmcpXG4gIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9uZWVkRHJhaW4gPSBmYWxzZVxuICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fcGF1c2UpIHtcbiAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICBjYigpXG4gICAgfVxuICB9KS5vbigncGFydCcsIGZ1bmN0aW9uIG9uUGFydCAocGFydCkge1xuICAgIGlmICgrK3NlbGYuX25wYXJ0cyA+IHBhcnRzTGltaXQpIHtcbiAgICAgIHNlbGYucGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdwYXJ0Jywgb25QYXJ0KVxuICAgICAgc2VsZi5wYXJzZXIub24oJ3BhcnQnLCBza2lwUGFydClcbiAgICAgIGJveS5oaXRQYXJ0c0xpbWl0ID0gdHJ1ZVxuICAgICAgYm95LmVtaXQoJ3BhcnRzTGltaXQnKVxuICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgfVxuXG4gICAgLy8gaGFjayBiZWNhdXNlIHN0cmVhbXMyIF9hbHdheXNfIGRvZXNuJ3QgZW1pdCAnZW5kJyB1bnRpbCBuZXh0VGljaywgc28gbGV0XG4gICAgLy8gdXMgZW1pdCAnZW5kJyBlYXJseSBzaW5jZSB3ZSBrbm93IHRoZSBwYXJ0IGhhcyBlbmRlZCBpZiB3ZSBhcmUgYWxyZWFkeVxuICAgIC8vIHNlZWluZyB0aGUgbmV4dCBwYXJ0XG4gICAgaWYgKGN1ckZpZWxkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGN1ckZpZWxkXG4gICAgICBmaWVsZC5lbWl0KCdlbmQnKVxuICAgICAgZmllbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKVxuICAgIH1cblxuICAgIHBhcnQub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIGxldCBjb250eXBlXG4gICAgICBsZXQgZmllbGRuYW1lXG4gICAgICBsZXQgcGFyc2VkXG4gICAgICBsZXQgY2hhcnNldFxuICAgICAgbGV0IGVuY29kaW5nXG4gICAgICBsZXQgZmlsZW5hbWVcbiAgICAgIGxldCBuc2l6ZSA9IDBcblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LXR5cGUnXVswXSlcbiAgICAgICAgaWYgKHBhcnNlZFswXSkge1xuICAgICAgICAgIGNvbnR5cGUgPSBwYXJzZWRbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKFJFX0NIQVJTRVQudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnR5cGUgPSAndGV4dC9wbGFpbicgfVxuICAgICAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gZGVmQ2hhcnNldCB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXVswXSlcbiAgICAgICAgaWYgKCFSRV9GSUVMRC50ZXN0KHBhcnNlZFswXSkpIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKFJFX05BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWVsZG5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICB9IGVsc2UgaWYgKFJFX0ZJTEVOQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICAgIGlmICghcHJlc2VydmVQYXRoKSB7IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSkgeyBlbmNvZGluZyA9IGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddWzBdLnRvTG93ZXJDYXNlKCkgfSBlbHNlIHsgZW5jb2RpbmcgPSAnN2JpdCcgfVxuXG4gICAgICBsZXQgb25EYXRhLFxuICAgICAgICBvbkVuZFxuXG4gICAgICBpZiAoaXNQYXJ0QUZpbGUoZmllbGRuYW1lLCBjb250eXBlLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgLy8gZmlsZS9iaW5hcnkgZmllbGRcbiAgICAgICAgaWYgKG5maWxlcyA9PT0gZmlsZXNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpbGVzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWxlc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpbGVzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpbGVzXG5cbiAgICAgICAgaWYgKGJveS5saXN0ZW5lckNvdW50KCdmaWxlJykgPT09IDApIHtcbiAgICAgICAgICBzZWxmLnBhcnNlci5faWdub3JlKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3RyZWFtKGZpbGVPcHRzKVxuICAgICAgICBjdXJGaWxlID0gZmlsZVxuICAgICAgICBmaWxlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGZpbGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgIGlmICghc2VsZi5fcGF1c2UpIHsgcmV0dXJuIH1cbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJveS5lbWl0KCdmaWxlJywgZmllbGRuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIGNvbnR5cGUpXG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpbGVTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gZmlsZVNpemVMaW1pdCAtIG5zaXplICsgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChleHRyYWxlbiA+IDApIHsgZmlsZS5wdXNoKGRhdGEuc2xpY2UoMCwgZXh0cmFsZW4pKSB9XG4gICAgICAgICAgICBmaWxlLnRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gZmlsZVNpemVMaW1pdFxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgICAgZmlsZS5lbWl0KCdsaW1pdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWxlLnB1c2goZGF0YSkpIHsgc2VsZi5fcGF1c2UgPSB0cnVlIH1cblxuICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gbnNpemVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICBmaWxlLnB1c2gobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWZpbGUgZmllbGRcbiAgICAgICAgaWYgKG5maWVsZHMgPT09IGZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmllbGRzXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCB0cnVuY2F0ZWQgPSBmYWxzZVxuICAgICAgICBjdXJGaWVsZCA9IHBhcnRcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gKGZpZWxkU2l6ZUxpbWl0IC0gKG5zaXplIC0gZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIDAsIGV4dHJhbGVuKVxuICAgICAgICAgICAgdHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgIH0gZWxzZSB7IGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKSB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWVsZCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7IGJ1ZmZlciA9IGRlY29kZVRleHQoYnVmZmVyLCAnYmluYXJ5JywgY2hhcnNldCkgfVxuICAgICAgICAgIGJveS5lbWl0KCdmaWVsZCcsIGZpZWxkbmFtZSwgYnVmZmVyLCBmYWxzZSwgdHJ1bmNhdGVkLCBlbmNvZGluZywgY29udHlwZSlcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQXMgb2Ygbm9kZUAyZWZlNGFiNzYxNjY2ICh2MC4xMC4yOSsvdjAuMTEuMTQrKSwgYnVzYm95IGhhZCBiZWNvbWVcbiAgICAgICAgIGJyb2tlbi4gU3RyZWFtczIvc3RyZWFtczMgaXMgYSBodWdlIGJsYWNrIGJveCBvZiBjb25mdXNpb24sIGJ1dFxuICAgICAgICAgc29tZWhvdyBvdmVycmlkaW5nIHRoZSBzeW5jIHN0YXRlIHNlZW1zIHRvIGZpeCB0aGluZ3MgYWdhaW4gKGFuZCBzdGlsbFxuICAgICAgICAgc2VlbXMgdG8gd29yayBmb3IgcHJldmlvdXMgbm9kZSB2ZXJzaW9ucykuXG4gICAgICAqL1xuICAgICAgcGFydC5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcblxuICAgICAgcGFydC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAgIHBhcnQub24oJ2VuZCcsIG9uRW5kKVxuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjdXJGaWxlKSB7IGN1ckZpbGUuZW1pdCgnZXJyb3InLCBlcnIpIH1cbiAgICB9KVxuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYm95LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9KS5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNoZWNrRmluaXNoZWQoKVxuICB9KVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBjYikge1xuICBjb25zdCByID0gdGhpcy5wYXJzZXIud3JpdGUoY2h1bmspXG4gIGlmIChyICYmICF0aGlzLl9wYXVzZSkge1xuICAgIGNiKClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9uZWVkRHJhaW4gPSAhclxuICAgIHRoaXMuX2NiID0gY2JcbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi5wYXJzZXIud3JpdGFibGUpIHtcbiAgICBzZWxmLnBhcnNlci5lbmQoKVxuICB9IGVsc2UgaWYgKCFzZWxmLl9ib3kuX2RvbmUpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2JveS5fZG9uZSA9IHRydWVcbiAgICAgIHNlbGYuX2JveS5lbWl0KCdmaW5pc2gnKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2tpcFBhcnQgKHBhcnQpIHtcbiAgcGFydC5yZXN1bWUoKVxufVxuXG5mdW5jdGlvbiBGaWxlU3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0cylcblxuICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICB0aGlzLnRydW5jYXRlZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEZpbGVTdHJlYW0sIFJlYWRhYmxlKVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpcGFydFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgUkVfUExVUyA9IC9cXCsvZ1xuXG5jb25zdCBIRVggPSBbXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBcbl1cblxuZnVuY3Rpb24gRGVjb2RlciAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5EZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgLy8gUmVwbGFjZSAnKycgd2l0aCAnICcgYmVmb3JlIGRlY29kaW5nXG4gIHN0ciA9IHN0ci5yZXBsYWNlKFJFX1BMVVMsICcgJylcbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMDsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gIGZvciAoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFIRVhbc3RyLmNoYXJDb2RlQXQoaSldKSB7XG4gICAgICAgIHJlcyArPSAnJScgKyB0aGlzLmJ1ZmZlclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICAtLWkgLy8gcmV0cnkgY2hhcmFjdGVyXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1ZmZlciArPSBzdHJbaV1cbiAgICAgICAgKytwXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0aGlzLmJ1ZmZlciwgMTYpKVxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cltpXSA9PT0gJyUnKSB7XG4gICAgICBpZiAoaSA+IHApIHtcbiAgICAgICAgcmVzICs9IHN0ci5zdWJzdHJpbmcocCwgaSlcbiAgICAgICAgcCA9IGlcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyID0gJydcbiAgICAgICsrcFxuICAgIH1cbiAgfVxuICBpZiAocCA8IGxlbiAmJiB0aGlzLmJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7IHJlcyArPSBzdHIuc3Vic3RyaW5nKHApIH1cbiAgcmV0dXJuIHJlc1xufVxuRGVjb2Rlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb2RlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRGVjb2RlciA9IHJlcXVpcmUoJy4uL3V0aWxzL0RlY29kZXInKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcblxuVXJsRW5jb2RlZC5kZXRlY3QgPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2lcbmZ1bmN0aW9uIFVybEVuY29kZWQgKGJveSwgY2ZnKSB7XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlXG4gIHRoaXMuYm95ID0gYm95XG5cbiAgdGhpcy5maWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgdGhpcy5maWVsZE5hbWVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZE5hbWVTaXplJywgMTAwKVxuICB0aGlzLmZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG5cbiAgbGV0IGNoYXJzZXRcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgICBSRV9DSEFSU0VULnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGNoYXJzZXQgPSBwYXJzZWRDb25UeXBlW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnIH1cblxuICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHRoaXMuY2hhcnNldCA9IGNoYXJzZXRcbiAgdGhpcy5fZmllbGRzID0gMFxuICB0aGlzLl9zdGF0ZSA9ICdrZXknXG4gIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gIHRoaXMuX2J5dGVzS2V5ID0gMFxuICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgdGhpcy5fa2V5ID0gJydcbiAgdGhpcy5fdmFsID0gJydcbiAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX2hpdExpbWl0ID0gZmFsc2Vcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkge1xuICAgIGlmICghdGhpcy5ib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgIHRoaXMuYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgIH1cbiAgICByZXR1cm4gY2IoKVxuICB9XG5cbiAgbGV0IGlkeGVxOyBsZXQgaWR4YW1wOyBsZXQgaTsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuXG4gIHdoaWxlIChwIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5Jykge1xuICAgICAgaWR4ZXEgPSBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4M0QvKiA9ICovKSB7XG4gICAgICAgICAgaWR4ZXEgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzS2V5ID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzS2V5IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGVxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggYXNzaWdubWVudFxuICAgICAgICBpZiAoaWR4ZXEgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4ZXEpKSB9XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3ZhbCdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX3ZhbCA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzVmFsID0gMFxuICAgICAgICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGVxICsgMVxuICAgICAgfSBlbHNlIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBubyBhc3NpZ25tZW50XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGxldCBrZXk7IGNvbnN0IGtleVRydW5jID0gdGhpcy5fa2V5VHJ1bmNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsga2V5ID0gKHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkpIH0gZWxzZSB7IGtleSA9IHRoaXMuX2tleSB9XG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIGlmIChrZXkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KGtleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGtleVRydW5jLFxuICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fYnl0ZXNLZXkgPSB0aGlzLl9rZXkubGVuZ3RoKSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNWYWwgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc1ZhbCB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpIH1cbiAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdrZXknXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl92YWwgPT09ICcnICYmIHRoaXMuZmllbGRTaXplTGltaXQgPT09IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fYnl0ZXNWYWwgPSB0aGlzLl92YWwubGVuZ3RoKSA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNiKClcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3kuX2RvbmUpIHsgcmV0dXJuIH1cblxuICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknICYmIHRoaXMuX2tleS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgZmFsc2UpXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICd2YWwnKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICB9XG4gIHRoaXMuYm95Ll9kb25lID0gdHJ1ZVxuICB0aGlzLmJveS5lbWl0KCdmaW5pc2gnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVybEVuY29kZWRcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBNdWx0aXBhcnRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL211bHRpcGFydCcpXG5jb25zdCBVcmxlbmNvZGVkUGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy91cmxlbmNvZGVkJylcbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi91dGlscy9wYXJzZVBhcmFtcycpXG5cbmZ1bmN0aW9uIEJ1c2JveSAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVzYm95KSkgeyByZXR1cm4gbmV3IEJ1c2JveShvcHRzKSB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdC4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdCB3aXRoIGhlYWRlcnMtYXR0cmlidXRlLicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgQ29udGVudC1UeXBlLWhlYWRlci4nKVxuICB9XG5cbiAgY29uc3Qge1xuICAgIGhlYWRlcnMsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9ID0gb3B0c1xuXG4gIHRoaXMub3B0cyA9IHtcbiAgICBhdXRvRGVzdHJveTogZmFsc2UsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgdGhpcy5vcHRzKVxuXG4gIHRoaXMuX2RvbmUgPSBmYWxzZVxuICB0aGlzLl9wYXJzZXIgPSB0aGlzLmdldFBhcnNlckJ5SGVhZGVycyhoZWFkZXJzKVxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG59XG5pbmhlcml0cyhCdXNib3ksIFdyaXRhYmxlU3RyZWFtKVxuXG5CdXNib3kucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJykge1xuICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcGFyc2VyPy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICB9XG4gIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5nZXRQYXJzZXJCeUhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICBjb25zdCBjZmcgPSB7XG4gICAgZGVmQ2hhcnNldDogdGhpcy5vcHRzLmRlZkNoYXJzZXQsXG4gICAgZmlsZUh3bTogdGhpcy5vcHRzLmZpbGVId20sXG4gICAgaGVhZGVycyxcbiAgICBoaWdoV2F0ZXJNYXJrOiB0aGlzLm9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBpc1BhcnRBRmlsZTogdGhpcy5vcHRzLmlzUGFydEFGaWxlLFxuICAgIGxpbWl0czogdGhpcy5vcHRzLmxpbWl0cyxcbiAgICBwYXJzZWRDb25UeXBlOiBwYXJzZWQsXG4gICAgcHJlc2VydmVQYXRoOiB0aGlzLm9wdHMucHJlc2VydmVQYXRoXG4gIH1cblxuICBpZiAoTXVsdGlwYXJ0UGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpcGFydFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgaWYgKFVybGVuY29kZWRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgVXJsZW5jb2RlZFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBDb250ZW50LVR5cGUuJylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLl9wYXJzZXIud3JpdGUoY2h1bmssIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuQnVzYm95ID0gQnVzYm95XG5cbm1vZHVsZS5leHBvcnRzLkRpY2VyID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWVzc2FnZUNoYW5uZWwsIHJlY2VpdmVNZXNzYWdlT25Qb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnUE9TVCddXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQgPSBuZXcgU2V0KGNvcnNTYWZlTGlzdGVkTWV0aG9kcylcblxuY29uc3QgbnVsbEJvZHlTdGF0dXMgPSBbMTAxLCAyMDQsIDIwNSwgMzA0XVxuXG5jb25zdCByZWRpcmVjdFN0YXR1cyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Jsb2NrLWJhZC1wb3J0XG5jb25zdCBiYWRQb3J0cyA9IFtcbiAgJzEnLCAnNycsICc5JywgJzExJywgJzEzJywgJzE1JywgJzE3JywgJzE5JywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI1JywgJzM3JywgJzQyJywgJzQzJywgJzUzJywgJzY5JywgJzc3JywgJzc5JyxcbiAgJzg3JywgJzk1JywgJzEwMScsICcxMDInLCAnMTAzJywgJzEwNCcsICcxMDknLCAnMTEwJywgJzExMScsICcxMTMnLCAnMTE1JywgJzExNycsICcxMTknLCAnMTIzJywgJzEzNScsICcxMzcnLFxuICAnMTM5JywgJzE0MycsICcxNjEnLCAnMTc5JywgJzM4OScsICc0MjcnLCAnNDY1JywgJzUxMicsICc1MTMnLCAnNTE0JywgJzUxNScsICc1MjYnLCAnNTMwJywgJzUzMScsICc1MzInLFxuICAnNTQwJywgJzU0OCcsICc1NTQnLCAnNTU2JywgJzU2MycsICc1ODcnLCAnNjAxJywgJzYzNicsICc5ODknLCAnOTkwJywgJzk5MycsICc5OTUnLCAnMTcxOScsICcxNzIwJywgJzE3MjMnLFxuICAnMjA0OScsICczNjU5JywgJzQwNDUnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY5NycsXG4gICcxMDA4MCdcbl1cblxuY29uc3QgYmFkUG9ydHNTZXQgPSBuZXcgU2V0KGJhZFBvcnRzKVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWNpZXNcbmNvbnN0IHJlZmVycmVyUG9saWN5ID0gW1xuICAnJyxcbiAgJ25vLXJlZmVycmVyJyxcbiAgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJyxcbiAgJ3NhbWUtb3JpZ2luJyxcbiAgJ29yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luJyxcbiAgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3Vuc2FmZS11cmwnXG5dXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IFsnZm9sbG93JywgJ21hbnVhbCcsICdlcnJvciddXG5cbmNvbnN0IHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbmNvbnN0IHNhZmVNZXRob2RzU2V0ID0gbmV3IFNldChzYWZlTWV0aG9kcylcblxuY29uc3QgcmVxdWVzdE1vZGUgPSBbJ25hdmlnYXRlJywgJ3NhbWUtb3JpZ2luJywgJ25vLWNvcnMnLCAnY29ycyddXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IFsnb21pdCcsICdzYW1lLW9yaWdpbicsICdpbmNsdWRlJ11cblxuY29uc3QgcmVxdWVzdENhY2hlID0gW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWJvZHktaGVhZGVyLW5hbWVcbmNvbnN0IHJlcXVlc3RCb2R5SGVhZGVyID0gW1xuICAnY29udGVudC1lbmNvZGluZycsXG4gICdjb250ZW50LWxhbmd1YWdlJyxcbiAgJ2NvbnRlbnQtbG9jYXRpb24nLFxuICAnY29udGVudC10eXBlJyxcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDIxXG4gIC8vICdDb250ZW50LUxlbmd0aCcgaXMgYSBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHdoaWNoIGlzIHR5cGljYWxseVxuICAvLyByZW1vdmVkIGluIHRoZSBIZWFkZXJzIGltcGxlbWVudGF0aW9uLiBIb3dldmVyLCB1bmRpY2kgZG9lc24ndFxuICAvLyBmaWx0ZXIgb3V0IGhlYWRlcnMsIHNvIHdlIGFkZCBpdCBoZXJlLlxuICAnY29udGVudC1sZW5ndGgnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNlbnVtZGVmLXJlcXVlc3RkdXBsZXhcbmNvbnN0IHJlcXVlc3REdXBsZXggPSBbXG4gICdoYWxmJ1xuXVxuXG4vLyBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzID0gWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ11cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHNTZXQgPSBuZXcgU2V0KGZvcmJpZGRlbk1ldGhvZHMpXG5cbmNvbnN0IHN1YnJlc291cmNlID0gW1xuICAnYXVkaW8nLFxuICAnYXVkaW93b3JrbGV0JyxcbiAgJ2ZvbnQnLFxuICAnaW1hZ2UnLFxuICAnbWFuaWZlc3QnLFxuICAncGFpbnR3b3JrbGV0JyxcbiAgJ3NjcmlwdCcsXG4gICdzdHlsZScsXG4gICd0cmFjaycsXG4gICd2aWRlbycsXG4gICd4c2x0JyxcbiAgJydcbl1cbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydET01FeGNlcHRpb24nXX0gKi9cbmNvbnN0IERPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uID8/ICgoKSA9PiB7XG4gIC8vIERPTUV4Y2VwdGlvbiB3YXMgb25seSBtYWRlIGEgZ2xvYmFsIGluIE5vZGUgdjE3LjAuMCxcbiAgLy8gYnV0IGZldGNoIHN1cHBvcnRzID49IHYxNi44LlxuICB0cnkge1xuICAgIGF0b2IoJ34nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVycikuY29uc3RydWN0b3JcbiAgfVxufSkoKVxuXG5sZXQgY2hhbm5lbFxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ3N0cnVjdHVyZWRDbG9uZSddfSAqL1xuY29uc3Qgc3RydWN0dXJlZENsb25lID1cbiAgZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUgPz9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjI3YWUyNGRjYzQyNTFiYWQ3MjZkOWQ4NGJhZjY3OGQxZjcwN2ZlZC9saWIvaW50ZXJuYWwvc3RydWN0dXJlZF9jbG9uZS5qc1xuICAvLyBzdHJ1Y3R1cmVkQ2xvbmUgd2FzIGFkZGVkIGluIHYxNy4wLjAsIGJ1dCBmZXRjaCBzdXBwb3J0cyB2MTYuOFxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUgKHZhbHVlLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgYXJndW1lbnQnKVxuICAgIH1cblxuICAgIGlmICghY2hhbm5lbCkge1xuICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpXG4gICAgfVxuICAgIGNoYW5uZWwucG9ydDEudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDIudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodmFsdWUsIG9wdGlvbnM/LnRyYW5zZmVyKVxuICAgIHJldHVybiByZWNlaXZlTWVzc2FnZU9uUG9ydChjaGFubmVsLnBvcnQyKS5tZXNzYWdlXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERPTUV4Y2VwdGlvbixcbiAgc3RydWN0dXJlZENsb25lLFxuICBzdWJyZXNvdXJjZSxcbiAgZm9yYmlkZGVuTWV0aG9kcyxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVkaXJlY3RTdGF0dXMsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kcyxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzLFxuICBiYWRQb3J0cyxcbiAgcmVxdWVzdER1cGxleCxcbiAgc3VicmVzb3VyY2VTZXQsXG4gIGJhZFBvcnRzU2V0LFxuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICBzYWZlTWV0aG9kc1NldCxcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3lTZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcywgaW5jcmVhc2UgdGhlIHZlcnNpb25cbi8vIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxPcmlnaW4gPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsT3JpZ2luLjEnKVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxPcmlnaW4gKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxPcmlnaW5dXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbE9yaWdpbiAobmV3T3JpZ2luKSB7XG4gIGlmIChuZXdPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwobmV3T3JpZ2luKVxuXG4gIGlmIChwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9ubHkgaHR0cCAmIGh0dHBzIHVybHMgYXJlIGFsbG93ZWQsIHJlY2VpdmVkICR7cGFyc2VkVVJMLnByb3RvY29sfWApXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgdmFsdWU6IHBhcnNlZFVSTCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRHbG9iYWxPcmlnaW4sXG4gIHNldEdsb2JhbE9yaWdpblxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyByZWRpcmVjdFN0YXR1c1NldCwgcmVmZXJyZXJQb2xpY3lTZXQ6IHJlZmVycmVyUG9saWN5VG9rZW5zLCBiYWRQb3J0c1NldCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHJlcXVpcmUoJ3BlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKXx1bmRlZmluZWR9ICovXG5sZXQgY3J5cHRvXG5cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gIGNvbnN0IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMgPSBbJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJ11cbiAgc3VwcG9ydGVkSGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpLmZpbHRlcigoaGFzaCkgPT4gcG9zc2libGVSZWxldmFudEhhc2hlcy5pbmNsdWRlcyhoYXNoKSlcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xufVxuXG5mdW5jdGlvbiByZXNwb25zZVVSTCAocmVzcG9uc2UpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlc1xuICAvLyBBIHJlc3BvbnNlIGhhcyBhbiBhc3NvY2lhdGVkIFVSTC4gSXQgaXMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IFVSTFxuICAvLyBpbiByZXNwb25zZeKAmXMgVVJMIGxpc3QgYW5kIG51bGwgaWYgcmVzcG9uc2XigJlzIFVSTCBsaXN0IGlzIGVtcHR5LlxuICBjb25zdCB1cmxMaXN0ID0gcmVzcG9uc2UudXJsTGlzdFxuICBjb25zdCBsZW5ndGggPSB1cmxMaXN0Lmxlbmd0aFxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gbnVsbCA6IHVybExpc3RbbGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1sb2NhdGlvbi11cmxcbmZ1bmN0aW9uIHJlc3BvbnNlTG9jYXRpb25VUkwgKHJlc3BvbnNlLCByZXF1ZXN0RnJhZ21lbnQpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2XigJlzIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gMi4gTGV0IGxvY2F0aW9uIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW5cbiAgLy8gYExvY2F0aW9uYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICBsZXQgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJylcblxuICAvLyAzLiBJZiBsb2NhdGlvbiBpcyBhIGhlYWRlciB2YWx1ZSwgdGhlbiBzZXQgbG9jYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBwYXJzaW5nIGxvY2F0aW9uIHdpdGggcmVzcG9uc2XigJlzIFVSTC5cbiAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIGlzVmFsaWRIZWFkZXJWYWx1ZShsb2NhdGlvbikpIHtcbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9u4oCZc1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmzigJlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJs4oCZcyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyQ29kZSAoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIDB4MjI6XG4gICAgY2FzZSAweDI4OlxuICAgIGNhc2UgMHgyOTpcbiAgICBjYXNlIDB4MmM6XG4gICAgY2FzZSAweDJmOlxuICAgIGNhc2UgMHgzYTpcbiAgICBjYXNlIDB4M2I6XG4gICAgY2FzZSAweDNjOlxuICAgIGNhc2UgMHgzZDpcbiAgICBjYXNlIDB4M2U6XG4gICAgY2FzZSAweDNmOlxuICAgIGNhc2UgMHg0MDpcbiAgICBjYXNlIDB4NWI6XG4gICAgY2FzZSAweDVjOlxuICAgIGNhc2UgMHg1ZDpcbiAgICBjYXNlIDB4N2I6XG4gICAgY2FzZSAweDdkOlxuICAgICAgLy8gRFFVT1RFIGFuZCBcIigpLC86Ozw9Pj9AW1xcXXt9XCJcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWQ0hBUiAleDIxLTdFXG4gICAgICByZXR1cm4gYyA+PSAweDIxICYmIGMgPD0gMHg3ZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhUVFBUb2tlbiAoY2hhcmFjdGVycykge1xuICBpZiAoY2hhcmFjdGVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWlzVG9rZW5DaGFyQ29kZShjaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lIChwb3RlbnRpYWxWYWx1ZSkge1xuICByZXR1cm4gaXNWYWxpZEhUVFBUb2tlbihwb3RlbnRpYWxWYWx1ZSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vIC0gSGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMuXG4gIC8vIC0gQ29udGFpbnMgbm8gMHgwMCAoTlVMKSBvciBIVFRQIG5ld2xpbmUgYnl0ZXMuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJyAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCcgJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcMCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xccicpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3NldC1yZXF1ZXN0cy1yZWZlcnJlci1wb2xpY3ktb24tcmVkaXJlY3RcbmZ1bmN0aW9uIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QgKHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKSB7XG4gIC8vICBHaXZlbiBhIHJlcXVlc3QgcmVxdWVzdCBhbmQgYSByZXNwb25zZSBhY3R1YWxSZXNwb25zZSwgdGhpcyBhbGdvcml0aG1cbiAgLy8gIHVwZGF0ZXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IGFjY29yZGluZyB0byB0aGUgUmVmZXJyZXItUG9saWN5XG4gIC8vICBoZWFkZXIgKGlmIGFueSkgaW4gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gMS4gTGV0IHBvbGljeSBiZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyDCpyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JykgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHLigJlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXLigJlzIHZhbHVlIHRvIHLigJlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiBy4oCZcyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlcilcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luIHdpdGggcmVxdWVzdC5cbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIDIuIElmIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIG9yIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJ3ZWJzb2NrZXRcIiwgdGhlbiBhcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIC8vIDIuIEFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIChjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICAvLyBUT0RPXG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLW9wYXF1ZS10aW1pbmctaW5mb1xuZnVuY3Rpb24gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyAodGltaW5nSW5mbykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICByZWRpcmVjdFN0YXJ0VGltZTogMCxcbiAgICByZWRpcmVjdEVuZFRpbWU6IDAsXG4gICAgcG9zdFJlZGlyZWN0U3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIGZpbmFsU2VydmljZVdvcmtlclN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lOiAwLFxuICAgIGVuZFRpbWU6IDAsXG4gICAgZW5jb2RlZEJvZHlTaXplOiAwLFxuICAgIGRlY29kZWRCb2R5U2l6ZTogMCxcbiAgICBmaW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvOiBudWxsXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gbWFrZVBvbGljeUNvbnRhaW5lciAoKSB7XG4gIC8vIE5vdGU6IHRoZSBmZXRjaCBzcGVjIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgZW1iZWRkZXIgcG9saWN5IG9yIENTUCBsaXN0XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ1xuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nsb25lLWEtcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gY2xvbmVQb2xpY3lDb250YWluZXIgKHBvbGljeUNvbnRhaW5lcikge1xuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiBwb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jZGV0ZXJtaW5lLXJlcXVlc3RzLXJlZmVycmVyXG5mdW5jdGlvbiBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBwb2xpY3kgYmUgcmVxdWVzdCdzIHJlZmVycmVyIHBvbGljeS5cbiAgY29uc3QgcG9saWN5ID0gcmVxdWVzdC5yZWZlcnJlclBvbGljeVxuXG4gIC8vIE5vdGU6IHBvbGljeSBjYW5ub3QgKHNob3VsZG4ndCkgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gIGFzc2VydChwb2xpY3kpXG5cbiAgLy8gMi4gTGV0IGVudmlyb25tZW50IGJlIHJlcXVlc3TigJlzIGNsaWVudC5cblxuICBsZXQgcmVmZXJyZXJTb3VyY2UgPSBudWxsXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIHJlZmVycmVyOlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBOb3RlOiBub2RlIGlzbid0IGEgYnJvd3NlciBhbmQgZG9lc24ndCBpbXBsZW1lbnQgZG9jdW1lbnQvaWZyYW1lcyxcbiAgICAvLyBzbyB3ZSBieXBhc3MgdGhpcyBzdGVwIGFuZCByZXBsYWNlIGl0IHdpdGggb3VyIG93bi5cblxuICAgIGNvbnN0IGdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICBpZiAoIWdsb2JhbE9yaWdpbiB8fCBnbG9iYWxPcmlnaW4ub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gbm90ZTogd2UgbmVlZCB0byBjbG9uZSBpdCBhcyBpdCdzIG11dGF0ZWRcbiAgICByZWZlcnJlclNvdXJjZSA9IG5ldyBVUkwoZ2xvYmFsT3JpZ2luKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAvLyBMZXQgcmVmZXJyZXJTb3VyY2UgYmUgcmVxdWVzdOKAmXMgcmVmZXJyZXIuXG4gICAgcmVmZXJyZXJTb3VyY2UgPSByZXF1ZXN0LnJlZmVycmVyXG4gIH1cblxuICAvLyA0LiBMZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXJVUkwgYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yXG4gIC8vICAgIHVzZSBhcyBhIHJlZmVycmVyLlxuICBsZXQgcmVmZXJyZXJVUkwgPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlKVxuXG4gIC8vIDUuIExldCByZWZlcnJlck9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3IgdXNlIGFzXG4gIC8vICAgIGEgcmVmZXJyZXIsIHdpdGggdGhlIG9yaWdpbi1vbmx5IGZsYWcgc2V0IHRvIHRydWUuXG4gIGNvbnN0IHJlZmVycmVyT3JpZ2luID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcblxuICAvLyA2LiBJZiB0aGUgcmVzdWx0IG9mIHNlcmlhbGl6aW5nIHJlZmVycmVyVVJMIGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpc1xuICAvLyAgICBncmVhdGVyIHRoYW4gNDA5Niwgc2V0IHJlZmVycmVyVVJMIHRvIHJlZmVycmVyT3JpZ2luLlxuICBpZiAocmVmZXJyZXJVUkwudG9TdHJpbmcoKS5sZW5ndGggPiA0MDk2KSB7XG4gICAgcmVmZXJyZXJVUkwgPSByZWZlcnJlck9yaWdpblxuICB9XG5cbiAgY29uc3QgYXJlU2FtZU9yaWdpbiA9IHNhbWVPcmlnaW4ocmVxdWVzdCwgcmVmZXJyZXJVUkwpXG4gIGNvbnN0IGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA9IGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiZcbiAgICAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlcXVlc3QudXJsKVxuXG4gIC8vIDguIEV4ZWN1dGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHBvbGljeTpcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlICdvcmlnaW4nOiByZXR1cm4gcmVmZXJyZXJPcmlnaW4gIT0gbnVsbCA/IHJlZmVycmVyT3JpZ2luIDogc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcbiAgICBjYXNlICd1bnNhZmUtdXJsJzogcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlck9yaWdpbiA6ICduby1yZWZlcnJlcidcbiAgICBjYXNlICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlclVSTCA6IHJlZmVycmVyT3JpZ2luXG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyAxLiBJZiB0aGUgb3JpZ2luIG9mIHJlZmVycmVyVVJMIGFuZCB0aGUgb3JpZ2luIG9mIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgICAgIC8vICAgIFVSTCBhcmUgdGhlIHNhbWUsIHRoZW4gcmV0dXJuIHJlZmVycmVyVVJMLlxuICAgICAgaWYgKHNhbWVPcmlnaW4ocmVmZXJyZXJVUkwsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiByZWZlcnJlclVSTFxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmQgcmVxdWVzdOKAmXNcbiAgICAgIC8vICAgIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgdGhlbiByZXR1cm4gbm9cbiAgICAgIC8vICAgIHJlZmVycmVyLlxuICAgICAgaWYgKGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiYgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW4uXG4gICAgICByZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICB9XG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAgICovXG4gICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICovXG5cbiAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID8gJ25vLXJlZmVycmVyJyA6IHJlZmVycmVyT3JpZ2luXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzdHJpcC11cmxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IG9yaWdpbk9ubHlcbiAqL1xuZnVuY3Rpb24gc3RyaXBVUkxGb3JSZWZlcnJlciAodXJsLCBvcmlnaW5Pbmx5KSB7XG4gIC8vIDEuIEFzc2VydDogdXJsIGlzIGEgVVJMLlxuICBhc3NlcnQodXJsIGluc3RhbmNlb2YgVVJMKVxuXG4gIC8vIDIuIElmIHVybOKAmXMgc2NoZW1lIGlzIGEgbG9jYWwgc2NoZW1lLCB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2JsYW5rOicpIHtcbiAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICB9XG5cbiAgLy8gMy4gU2V0IHVybOKAmXMgdXNlcm5hbWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnVzZXJuYW1lID0gJydcblxuICAvLyA0LiBTZXQgdXJs4oCZcyBwYXNzd29yZCB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwucGFzc3dvcmQgPSAnJ1xuXG4gIC8vIDUuIFNldCB1cmzigJlzIGZyYWdtZW50IHRvIG51bGwuXG4gIHVybC5oYXNoID0gJydcblxuICAvLyA2LiBJZiB0aGUgb3JpZ2luLW9ubHkgZmxhZyBpcyB0cnVlLCB0aGVuOlxuICBpZiAob3JpZ2luT25seSkge1xuICAgIC8vIDEuIFNldCB1cmzigJlzIHBhdGggdG8gwqsgdGhlIGVtcHR5IHN0cmluZyDCuy5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybOKAmXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuY29uc3Qgbm9ybWFsaXplTWV0aG9kUmVjb3JkID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZU1ldGhvZFJlY29yZCwgbnVsbClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCDCqyB2YWx1ZSDCuykuXG4gIGNvbnN0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuXG4gIC8vIDIuIElmIHJlc3VsdCBpcyB1bmRlZmluZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZScpXG4gIH1cblxuICAvLyAzLiBBc3NlcnQ6IHJlc3VsdCBpcyBhIHN0cmluZy5cbiAgYXNzZXJ0KHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuXG4gIC8vIDQuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lMjVpdGVyYXRvcnByb3RvdHlwZSUyNS1vYmplY3RcbmNvbnN0IGVzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Rmbi1pdGVyYXRvci1wcm90b3R5cGUtb2JqZWN0XG4gKiBAcGFyYW0geygpID0+IHVua25vd25bXX0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0geydrZXknfCd2YWx1ZSd8J2tleSt2YWx1ZSd9IGtpbmRcbiAqL1xuZnVuY3Rpb24gbWFrZUl0ZXJhdG9yIChpdGVyYXRvciwgbmFtZSwga2luZCkge1xuICBjb25zdCBvYmplY3QgPSB7XG4gICAgaW5kZXg6IDAsXG4gICAga2luZCxcbiAgICB0YXJnZXQ6IGl0ZXJhdG9yXG4gIH1cblxuICBjb25zdCBpID0ge1xuICAgIG5leHQgKCkge1xuICAgICAgLy8gMS4gTGV0IGludGVyZmFjZSBiZSB0aGUgaW50ZXJmYWNlIGZvciB3aGljaCB0aGUgaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBleGlzdHMuXG5cbiAgICAgIC8vIDIuIExldCB0aGlzVmFsdWUgYmUgdGhlIHRoaXMgdmFsdWUuXG5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuXG4gICAgICAvLyA0LiBJZiBvYmplY3QgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW4gcGVyZm9ybSBhIHNlY3VyaXR5XG4gICAgICAvLyAgICBjaGVjaywgcGFzc2luZzpcblxuICAgICAgLy8gNS4gSWYgb2JqZWN0IGlzIG5vdCBhIGRlZmF1bHQgaXRlcmF0b3Igb2JqZWN0IGZvciBpbnRlcmZhY2UsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gaSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnbmV4dCcgY2FsbGVkIG9uIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBpbnRlcmZhY2UgJHtuYW1lfSBJdGVyYXRvci5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNi4gTGV0IGluZGV4IGJlIG9iamVjdOKAmXMgaW5kZXguXG4gICAgICAvLyA3LiBMZXQga2luZCBiZSBvYmplY3TigJlzIGtpbmQuXG4gICAgICAvLyA4LiBMZXQgdmFsdWVzIGJlIG9iamVjdOKAmXMgdGFyZ2V0J3MgdmFsdWUgcGFpcnMgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgY29uc3QgeyBpbmRleCwga2luZCwgdGFyZ2V0IH0gPSBvYmplY3RcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRhcmdldCgpXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIDExLiBMZXQgcGFpciBiZSB0aGUgZW50cnkgaW4gdmFsdWVzIGF0IGluZGV4IGluZGV4LlxuICAgICAgY29uc3QgcGFpciA9IHZhbHVlc1tpbmRleF1cblxuICAgICAgLy8gMTIuIFNldCBvYmplY3TigJlzIGluZGV4IHRvIGluZGV4ICsgMS5cbiAgICAgIG9iamVjdC5pbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG4gICAgICByZXR1cm4gaXRlcmF0b3JSZXN1bHQocGFpciwga2luZClcbiAgICB9LFxuICAgIC8vIFRoZSBjbGFzcyBzdHJpbmcgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgdGhlXG4gICAgLy8gcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIHN0cmluZyBcIiBJdGVyYXRvclwiLlxuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgfVxuXG4gIC8vIFRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHNsb3Qgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBtdXN0IGJlICVJdGVyYXRvclByb3RvdHlwZSUuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuICAvLyBlc0l0ZXJhdG9yUHJvdG90eXBlIG5lZWRzIHRvIGJlIHRoZSBwcm90b3R5cGUgb2YgaVxuICAvLyB3aGljaCBpcyB0aGUgcHJvdG90eXBlIG9mIGFuIGVtcHR5IG9iamVjdC4gWWVzLCBpdCdzIGNvbmZ1c2luZy5cbiAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih7fSwgaSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpdGVyYXRvci1yZXN1bHRcbmZ1bmN0aW9uIGl0ZXJhdG9yUmVzdWx0IChwYWlyLCBraW5kKSB7XG4gIGxldCByZXN1bHRcblxuICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgdmFsdWUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2Yga2luZDpcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAna2V5Jzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgcmVzdWx0ID0gcGFpclswXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgcmVzdWx0ID0gcGFpclsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAna2V5K3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAzLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNS4gTGV0IGFycmF5IGJlICEgQXJyYXlDcmVhdGUoMikuXG4gICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgIC8vIDcuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMVwiLCB2YWx1ZSkuXG4gICAgICAvLyA4LiByZXN1bHQgaXMgYXJyYXkuXG4gICAgICByZXN1bHQgPSBwYWlyXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDIuIFJldHVybiBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHJlc3VsdCwgZmFsc2UpLlxuICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS1mdWxseS1yZWFkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZ1bGx5UmVhZEJvZHkgKGJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKSB7XG4gIC8vIDEuIElmIHRhc2tEZXN0aW5hdGlvbiBpcyBudWxsLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG9cbiAgLy8gICAgdGhlIHJlc3VsdCBvZiBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cblxuICAvLyAyLiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlcyBiZSB0byBxdWV1ZSBhXG4gIC8vICAgIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzLCB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gcHJvY2Vzc0JvZHlcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBiZSB0byBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5RXJyb3IsXG4gIC8vICAgIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBlcnJvclN0ZXBzID0gcHJvY2Vzc0JvZHlFcnJvclxuXG4gIC8vIDQuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZvciBib2R54oCZcyBzdHJlYW0uXG4gIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzIHdpdGggdGhhdFxuICAvLyAgICBleGNlcHRpb24gYW5kIHJldHVybi5cbiAgbGV0IHJlYWRlclxuXG4gIHRyeSB7XG4gICAgcmVhZGVyID0gYm9keS5zdHJlYW0uZ2V0UmVhZGVyKClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDUuIFJlYWQgYWxsIGJ5dGVzIGZyb20gcmVhZGVyLCBnaXZlbiBzdWNjZXNzU3RlcHMgYW5kIGVycm9yU3RlcHMuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZEFsbEJ5dGVzKHJlYWRlcilcbiAgICBzdWNjZXNzU3RlcHMocmVzdWx0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmVhZGFibGVTdHJlYW19ICovXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlIChzdHJlYW0pIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICByZXR1cm4gc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gfHwgKFxuICAgIHN0cmVhbVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnUmVhZGFibGVTdHJlYW0nICYmXG4gICAgdHlwZW9mIHN0cmVhbS50ZWUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5jb25zdCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCA9IDY1NTM1XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyW118VWludDhBcnJheX0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0RlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gVG8gaXNvbW9ycGhpYyBkZWNvZGUgYSBieXRlIHNlcXVlbmNlIGlucHV0LCByZXR1cm4gYSBzdHJpbmcgd2hvc2UgY29kZSBwb2ludFxuICAvLyAgICBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXTigJlzIGxlbmd0aCBhbmQgd2hvc2UgY29kZSBwb2ludHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXNcbiAgLy8gICAgYXMgdGhlIHZhbHVlcyBvZiBpbnB1dOKAmXMgYnl0ZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuXG4gIGlmIChpbnB1dC5sZW5ndGggPCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmlucHV0KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0LnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzICsgU3RyaW5nLmZyb21DaGFyQ29kZShjdXJyZW50KSwgJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUT0RPOiBhZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGlzIGVycm9yIG9jY3Vycy5cbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb250cm9sbGVyIGlzIGFscmVhZHkgY2xvc2VkJykpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgYXNzZXJ0KGlucHV0LmNoYXJDb2RlQXQoaSkgPD0gMHhGRilcbiAgfVxuXG4gIC8vIDIuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV04oCZcyBjb2RlXG4gIC8vICAgIHBvaW50IGxlbmd0aCBhbmQgd2hvc2UgYnl0ZXMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gIC8vICAgIHZhbHVlcyBvZiBpbnB1dOKAmXMgY29kZSBwb2ludHMsIGluIHRoZSBzYW1lIG9yZGVyXG4gIHJldHVybiBpbnB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW1kZWZhdWx0cmVhZGVyLXJlYWQtYWxsLWJ5dGVzXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWQtbG9vcFxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJ9IHJlYWRlclxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsQnl0ZXMgKHJlYWRlcikge1xuICBjb25zdCBieXRlcyA9IFtdXG4gIGxldCBieXRlTGVuZ3RoID0gMFxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZTogY2h1bmsgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyAxLiBDYWxsIHN1Y2Nlc3NTdGVwcyB3aXRoIGJ5dGVzLlxuICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnl0ZXMsIGJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY2h1bmsgaXMgbm90IGEgVWludDhBcnJheSBvYmplY3QsIGNhbGwgZmFpbHVyZVN0ZXBzXG4gICAgLy8gICAgd2l0aCBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWNlaXZlZCBub24tVWludDhBcnJheSBjaHVuaycpXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIHRoZSBieXRlcyByZXByZXNlbnRlZCBieSBjaHVuayB0byBieXRlcy5cbiAgICBieXRlcy5wdXNoKGNodW5rKVxuICAgIGJ5dGVMZW5ndGggKz0gY2h1bmsubGVuZ3RoXG5cbiAgICAvLyAzLiBSZWFkLWxvb3AgZ2l2ZW4gcmVhZGVyLCBieXRlcywgc3VjY2Vzc1N0ZXBzLCBhbmQgZmFpbHVyZVN0ZXBzLlxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaXMtbG9jYWxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNMb2NhbCAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHByb3RvY29sID09PSAnYmxvYjonIHx8IHByb3RvY29sID09PSAnZGF0YTonXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOicpXG4gIH1cblxuICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBGZXRjaCBzdXBwb3J0cyBub2RlID49IDE2LjguMCwgYnV0IE9iamVjdC5oYXNPd24gd2FzIGFkZGVkIGluIHYxNi45LjAuXG4gKi9cbmNvbnN0IGhhc093biA9IE9iamVjdC5oYXNPd24gfHwgKChkaWN0LCBrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaWN0LCBrZXkpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIHRvVVNWU3RyaW5nLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgVEFPQ2hlY2ssXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHJlc3BvbnNlVVJMLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICBpc0Jsb2JMaWtlLFxuICBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHksXG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGhhc093bixcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGJ5dGVzTWF0Y2gsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICBpc29tb3JwaGljRGVjb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHJlYWRBbGxCeXRlcyxcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkLFxuICBwYXJzZU1ldGFkYXRhXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga0hlYWRlcnM6IFN5bWJvbCgnaGVhZGVycycpLFxuICBrU2lnbmFsOiBTeW1ib2woJ3NpZ25hbCcpLFxuICBrU3RhdGU6IFN5bWJvbCgnc3RhdGUnKSxcbiAga0d1YXJkOiBTeW1ib2woJ2d1YXJkJyksXG4gIGtSZWFsbTogU3ltYm9sKCdyZWFsbScpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgaGFzT3duLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYmlkbCcpLldlYmlkbH0gKi9cbmNvbnN0IHdlYmlkbCA9IHt9XG53ZWJpZGwuY29udmVydGVycyA9IHt9XG53ZWJpZGwudXRpbCA9IHt9XG53ZWJpZGwuZXJyb3JzID0ge31cblxud2ViaWRsLmVycm9ycy5leGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgJHttZXNzYWdlLmhlYWRlcn06ICR7bWVzc2FnZS5tZXNzYWdlfWApXG59XG5cbndlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHBsdXJhbCA9IGNvbnRleHQudHlwZXMubGVuZ3RoID09PSAxID8gJycgOiAnIG9uZSBvZidcbiAgY29uc3QgbWVzc2FnZSA9XG4gICAgYCR7Y29udGV4dC5hcmd1bWVudH0gY291bGQgbm90IGJlIGNvbnZlcnRlZCB0b2AgK1xuICAgIGAke3BsdXJhbH06ICR7Y29udGV4dC50eXBlcy5qb2luKCcsICcpfS5gXG5cbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxud2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZTogYFwiJHtjb250ZXh0LnZhbHVlfVwiIGlzIGFuIGludmFsaWQgJHtjb250ZXh0LnR5cGV9LmBcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpbXBsZW1lbnRzXG53ZWJpZGwuYnJhbmRDaGVjayA9IGZ1bmN0aW9uIChWLCBJLCBvcHRzID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIEkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVj8uW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IEkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ11cbiAgfVxufVxuXG53ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayA9IGZ1bmN0aW9uICh7IGxlbmd0aCB9LCBtaW4sIGN0eCkge1xuICBpZiAobGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgbWVzc2FnZTogYCR7bWlufSBhcmd1bWVudCR7bWluICE9PSAxID8gJ3MnIDogJyd9IHJlcXVpcmVkLCBgICtcbiAgICAgICAgICAgICAgIGBidXQke2xlbmd0aCA/ICcgb25seScgOiAnJ30gJHtsZW5ndGh9IGZvdW5kLmAsXG4gICAgICAuLi5jdHhcbiAgICB9KVxuICB9XG59XG5cbndlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6ICdUeXBlRXJyb3InLFxuICAgIG1lc3NhZ2U6ICdJbGxlZ2FsIGNvbnN0cnVjdG9yJ1xuICB9KVxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG53ZWJpZGwudXRpbC5UeXBlID0gZnVuY3Rpb24gKFYpIHtcbiAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiAnVW5kZWZpbmVkJ1xuICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ0Jvb2xlYW4nXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuICdTdHJpbmcnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuICdTeW1ib2wnXG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdOdW1iZXInXG4gICAgY2FzZSAnYmlnaW50JzogcmV0dXJuICdCaWdJbnQnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdPYmplY3QnXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzID0ge30pIHtcbiAgbGV0IHVwcGVyQm91bmRcbiAgbGV0IGxvd2VyQm91bmRcblxuICAvLyAxLiBJZiBiaXRMZW5ndGggaXMgNjQsIHRoZW46XG4gIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgLy8gMS4gTGV0IHVwcGVyQm91bmQgYmUgMl41MyDiiJIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgNTMpIC0gMVxuXG4gICAgLy8gMi4gSWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW4gbGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgbG93ZXJCb3VuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlIGxldCBsb3dlckJvdW5kIGJlIOKIkjJeNTMgKyAxLlxuICAgICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCA1MykgKyAxXG4gICAgfVxuICB9IGVsc2UgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBsb3dlckJvdW5kID0gMFxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGgg4oiSIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgLTJeYml0TGVuZ3RoIOKIkiAxLlxuICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgYml0TGVuZ3RoKSAtIDFcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIOKIkiAxIOKIkiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKSAtIDFcbiAgfVxuXG4gIC8vIDQuIExldCB4IGJlID8gVG9OdW1iZXIoVikuXG4gIGxldCB4ID0gTnVtYmVyKFYpXG5cbiAgLy8gNS4gSWYgeCBpcyDiiJIwLCB0aGVuIHNldCB4IHRvICswLlxuICBpZiAoeCA9PT0gMCkge1xuICAgIHggPSAwXG4gIH1cblxuICAvLyA2LiBJZiB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtFbmZvcmNlUmFuZ2VdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlID09PSB0cnVlKSB7XG4gICAgLy8gMS4gSWYgeCBpcyBOYU4sICviiJ4sIG9yIOKIkuKIniwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGFuIGludGVnZXIuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAgIC8vIDMuIElmIHggPCBsb3dlckJvdW5kIG9yIHggPiB1cHBlckJvdW5kLCB0aGVuXG4gICAgLy8gICAgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlckJvdW5kfS0ke3VwcGVyQm91bmR9LCBnb3QgJHt4fS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA3LiBJZiB4IGlzIG5vdCBOYU4gYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETFxuICAvLyAgICB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0NsYW1wXSBleHRlbmRlZFxuICAvLyAgICBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXAgPT09IHRydWUpIHtcbiAgICAvLyAxLiBTZXQgeCB0byBtaW4obWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKS5cbiAgICB4ID0gTWF0aC5taW4oTWF0aC5tYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpXG5cbiAgICAvLyAyLiBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZVxuICAgIC8vICAgIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28sXG4gICAgLy8gICAgYW5kIGNob29zaW5nICswIHJhdGhlciB0aGFuIOKIkjAuXG4gICAgaWYgKE1hdGguZmxvb3IoeCkgJSAyID09PSAwKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gTWF0aC5jZWlsKHgpXG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDguIElmIHggaXMgTmFOLCArMCwgK+KIniwgb3Ig4oiS4oieLCB0aGVuIHJldHVybiArMC5cbiAgaWYgKFxuICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICh4ID09PSAwICYmIE9iamVjdC5pcygwLCB4KSkgfHxcbiAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIDkuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAvLyAxMC4gU2V0IHggdG8geCBtb2R1bG8gMl5iaXRMZW5ndGguXG4gIHggPSB4ICUgTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuXG4gIC8vIDExLiBJZiBzaWduZWRuZXNzIGlzIFwic2lnbmVkXCIgYW5kIHgg4omlIDJeYml0TGVuZ3RoIOKIkiAxLFxuICAvLyAgICB0aGVuIHJldHVybiB4IOKIkiAyXmJpdExlbmd0aC5cbiAgaWYgKHNpZ25lZG5lc3MgPT09ICdzaWduZWQnICYmIHggPj0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDEpIHtcbiAgICByZXR1cm4geCAtIE1hdGgucG93KDIsIGJpdExlbmd0aClcbiAgfVxuXG4gIC8vIDEyLiBPdGhlcndpc2UsIHJldHVybiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWludGVnZXJwYXJ0XG53ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCA9IGZ1bmN0aW9uIChuKSB7XG4gIC8vIDEuIExldCByIGJlIGZsb29yKGFicyhuKSkuXG4gIGNvbnN0IHIgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKVxuXG4gIC8vIDIuIElmIG4gPCAwLCB0aGVuIHJldHVybiAtMSDDlyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXNlcXVlbmNlXG53ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKFYpfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSBWPy5bU3ltYm9sLml0ZXJhdG9yXT8uKClcbiAgICBjb25zdCBzZXEgPSBbXVxuXG4gICAgLy8gMy4gSWYgbWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgbWV0aG9kID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBtZXRob2QubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGFuIGl0ZXJhdG9yLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdG8tcmVjb3JkXG53ZWJpZGwucmVjb3JkQ29udmVydGVyID0gZnVuY3Rpb24gKGtleUNvbnZlcnRlciwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChPKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVjb3JkJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKE8pfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGlmICghdHlwZXMuaXNQcm94eShPKSkge1xuICAgICAgLy8gT2JqZWN0LmtleXMgb25seSByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE8pXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgb3B0cyA9IHt9KSA9PiB7XG4gICAgaWYgKG9wdHMuc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBpKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IGkubmFtZSxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7Vn0gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtpLm5hbWV9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFZcbiAgfVxufVxuXG53ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJzKSB7XG4gIHJldHVybiAoZGljdGlvbmFyeSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSB3ZWJpZGwudXRpbC5UeXBlKGRpY3Rpb25hcnkpXG4gICAgY29uc3QgZGljdCA9IHt9XG5cbiAgICBpZiAodHlwZSA9PT0gJ051bGwnIHx8IHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGljdFxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke2RpY3Rpb25hcnl9IHRvIGJlIG9uZSBvZjogTnVsbCwgVW5kZWZpbmVkLCBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbnMgb2YgY29udmVydGVycykge1xuICAgICAgY29uc3QgeyBrZXksIGRlZmF1bHRWYWx1ZSwgcmVxdWlyZWQsIGNvbnZlcnRlciB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd24oZGljdGlvbmFyeSwga2V5KSkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQga2V5IFwiJHtrZXl9XCIuYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHZhbHVlID0gZGljdGlvbmFyeVtrZXldXG4gICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8/IGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBBIGtleSBjYW4gYmUgb3B0aW9uYWwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZS5cbiAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBkbyBub3QgcGVyZm9ybSBhIGNvbnZlcnNpb24sXG4gICAgICAvLyBhbmQgZG8gbm90IGFzc2lnbiB0aGUga2V5IGEgdmFsdWUuXG4gICAgICBpZiAocmVxdWlyZWQgfHwgaGFzRGVmYXVsdCB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gY29udmVydGVyKHZhbHVlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmFsbG93ZWRWYWx1ZXMgJiZcbiAgICAgICAgICAhb3B0aW9ucy5hbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3ZhbHVlfSBpcyBub3QgYW4gYWNjZXB0ZWQgdHlwZS4gRXhwZWN0ZWQgb25lIG9mICR7b3B0aW9ucy5hbGxvd2VkVmFsdWVzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGljdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGljdFxuICB9XG59XG5cbndlYmlkbC5udWxsYWJsZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBWXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRlcihWKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFYgaXMgbnVsbCBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGVcbiAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBbTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmddXG4gIC8vICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdGhlIERPTVN0cmluZyB2YWx1ZVxuICAvLyAgICB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHN0cmluZy5cbiAgaWYgKFYgPT09IG51bGwgJiYgb3B0cy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgc3ltYm9sIHRvIHN0cmluZy4nKVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyA9IHRvVVNWU3RyaW5nXG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYm9vbGVhblxud2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlIHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIFRvQm9vbGVhbihWKS5cbiAgY29uc3QgeCA9IEJvb2xlYW4oVilcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBib29sZWFuIHZhbHVlIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgdHJ1dGggdmFsdWUgYXMgdGhlIEVDTUFTY3JpcHQgQm9vbGVhbiB2YWx1ZSB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWFueVxud2ViaWRsLmNvbnZlcnRlcnMuYW55ID0gZnVuY3Rpb24gKFYpIHtcbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3NpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgbG9uZyBsb25nIHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLXNob3J0XG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDE2LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDE2LCAndW5zaWduZWQnLCBvcHRzKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIHNob3J0IHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaWRsLUFycmF5QnVmZmVyXG53ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7Vn1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsLlxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBU4oCZcyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7VC5uYW1lfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gNC4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgYXJyYXkgYnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA1LiBSZXR1cm4gdGhlIElETCB2YWx1ZSBvZiB0eXBlIFQgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tEYXRhVmlld11dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fCAhdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0RhdGFWaWV3JyxcbiAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGEgRGF0YVZpZXcuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzIHRydWUsXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBEYXRhVmlldyB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI0J1ZmZlclNvdXJjZVxud2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlcihWLCBvcHRzKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5KFYsIFYuY29uc3RydWN0b3IpXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBvcHRzKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhIEJ1ZmZlclNvdXJjZS5gKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBhdG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpc29tb3JwaGljRGVjb2RlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorLS5eX3x+QS1aYS16MC05XSskL1xuY29uc3QgSFRUUF9XSElURVNQQUNFX1JFR0VYID0gLyhcXHUwMDBBfFxcdTAwMER8XFx1MDAwOXxcXHUwMDIwKS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1xdW90ZWQtc3RyaW5nLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyA9IC9bXFx1MDAwOXxcXHUwMDIwLVxcdTAwN0V8XFx1MDA4MC1cXHUwMEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtcHJvY2Vzc29yXG4vKiogQHBhcmFtIHtVUkx9IGRhdGFVUkwgKi9cbmZ1bmN0aW9uIGRhdGFVUkxQcm9jZXNzb3IgKGRhdGFVUkwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBkYXRhVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCIuXG4gIGFzc2VydChkYXRhVVJMLnByb3RvY29sID09PSAnZGF0YTonKVxuXG4gIC8vIDIuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIFVSTFxuICAvLyBzZXJpYWxpemVyIG9uIGRhdGFVUkwgd2l0aCBleGNsdWRlIGZyYWdtZW50XG4gIC8vIHNldCB0byB0cnVlLlxuICBsZXQgaW5wdXQgPSBVUkxTZXJpYWxpemVyKGRhdGFVUkwsIHRydWUpXG5cbiAgLy8gMy4gUmVtb3ZlIHRoZSBsZWFkaW5nIFwiZGF0YTpcIiBzdHJpbmcgZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSBpbnB1dC5zbGljZSg1KVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBwb2ludCBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gNS4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBlcXVhbFxuICAvLyB0byBVKzAwMkMgKCwpLCBnaXZlbiBwb3NpdGlvbi5cbiAgbGV0IG1pbWVUeXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJywnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA2LiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gbWltZVR5cGUuXG4gIC8vIFVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAvLyBsZW5ndGggYmVjYXVzZSBpZiB0aGUgbWltZXR5cGUgaGFzIHNwYWNlcyByZW1vdmVkLFxuICAvLyB0aGUgd3JvbmcgYW1vdW50IHdpbGwgYmUgc2xpY2VkIGZyb20gdGhlIGlucHV0IGluXG4gIC8vIHN0ZXAgIzlcbiAgY29uc3QgbWltZVR5cGVMZW5ndGggPSBtaW1lVHlwZS5sZW5ndGhcbiAgbWltZVR5cGUgPSByZW1vdmVBU0NJSVdoaXRlc3BhY2UobWltZVR5cGUsIHRydWUsIHRydWUpXG5cbiAgLy8gNy4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuXG4gIC8vIHJldHVybiBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA4LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA5LiBMZXQgZW5jb2RlZEJvZHkgYmUgdGhlIHJlbWFpbmRlciBvZiBpbnB1dC5cbiAgY29uc3QgZW5jb2RlZEJvZHkgPSBpbnB1dC5zbGljZShtaW1lVHlwZUxlbmd0aCArIDEpXG5cbiAgLy8gMTAuIExldCBib2R5IGJlIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGVuY29kZWRCb2R5LlxuICBsZXQgYm9keSA9IHN0cmluZ1BlcmNlbnREZWNvZGUoZW5jb2RlZEJvZHkpXG5cbiAgLy8gMTEuIElmIG1pbWVUeXBlIGVuZHMgd2l0aCBVKzAwM0IgKDspLCBmb2xsb3dlZCBieVxuICAvLyB6ZXJvIG9yIG1vcmUgVSswMDIwIFNQQUNFLCBmb2xsb3dlZCBieSBhbiBBU0NJSVxuICAvLyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBcImJhc2U2NFwiLCB0aGVuOlxuICBpZiAoLzsoXFx1MDAyMCl7MCx9YmFzZTY0JC9pLnRlc3QobWltZVR5cGUpKSB7XG4gICAgLy8gMS4gTGV0IHN0cmluZ0JvZHkgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2RlIG9mIGJvZHkuXG4gICAgY29uc3Qgc3RyaW5nQm9keSA9IGlzb21vcnBoaWNEZWNvZGUoYm9keSlcblxuICAgIC8vIDIuIFNldCBib2R5IHRvIHRoZSBmb3JnaXZpbmctYmFzZTY0IGRlY29kZSBvZlxuICAgIC8vIHN0cmluZ0JvZHkuXG4gICAgYm9keSA9IGZvcmdpdmluZ0Jhc2U2NChzdHJpbmdCb2R5KVxuXG4gICAgLy8gMy4gSWYgYm9keSBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAgIGlmIChib2R5ID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9XG5cbiAgICAvLyA0LiBSZW1vdmUgdGhlIGxhc3QgNiBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTYpXG5cbiAgICAvLyA1LiBSZW1vdmUgdHJhaWxpbmcgVSswMDIwIFNQQUNFIGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUsXG4gICAgLy8gaWYgYW55LlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvKFxcdTAwMjApKyQvLCAnJylcblxuICAgIC8vIDYuIFJlbW92ZSB0aGUgbGFzdCBVKzAwM0IgKDspIGNvZGUgcG9pbnQgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgLy8gMTIuIElmIG1pbWVUeXBlIHN0YXJ0cyB3aXRoIFUrMDAzQiAoOyksIHRoZW4gcHJlcGVuZFxuICAvLyBcInRleHQvcGxhaW5cIiB0byBtaW1lVHlwZS5cbiAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoJzsnKSkge1xuICAgIG1pbWVUeXBlID0gJ3RleHQvcGxhaW4nICsgbWltZVR5cGVcbiAgfVxuXG4gIC8vIDEzLiBMZXQgbWltZVR5cGVSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nXG4gIC8vIG1pbWVUeXBlLlxuICBsZXQgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gIC8vIDE0LiBJZiBtaW1lVHlwZVJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHNldFxuICAvLyBtaW1lVHlwZVJlY29yZCB0byB0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkuXG4gIGlmIChtaW1lVHlwZVJlY29yZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKCd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknKVxuICB9XG5cbiAgLy8gMTUuIFJldHVybiBhIG5ldyBkYXRhOiBVUkwgc3RydWN0IHdob3NlIE1JTUVcbiAgLy8gdHlwZSBpcyBtaW1lVHlwZVJlY29yZCBhbmQgYm9keSBpcyBib2R5LlxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtc3RydWN0XG4gIHJldHVybiB7IG1pbWVUeXBlOiBtaW1lVHlwZVJlY29yZCwgYm9keSB9XG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuLyoqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVGcmFnbWVudFxuICovXG5mdW5jdGlvbiBVUkxTZXJpYWxpemVyICh1cmwsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGlmICghZXhjbHVkZUZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHVybC5ocmVmXG4gIH1cblxuICBjb25zdCBocmVmID0gdXJsLmhyZWZcbiAgY29uc3QgaGFzaExlbmd0aCA9IHVybC5oYXNoLmxlbmd0aFxuXG4gIHJldHVybiBoYXNoTGVuZ3RoID09PSAwID8gaHJlZiA6IGhyZWYuc3Vic3RyaW5nKDAsIGhyZWYubGVuZ3RoIC0gaGFzaExlbmd0aClcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYS1zZXF1ZW5jZS1vZi1jb2RlLXBvaW50c1xuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBzdHJpbmcpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIChjb25kaXRpb24sIGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIC8vIDIuIFdoaWxlIHBvc2l0aW9uIGRvZXNu4oCZdCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYW5kIHRoZVxuICAvLyBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBtZWV0cyB0aGUgY29uZGl0aW9uIGNvbmRpdGlvbjpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGNvbmRpdGlvbihpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0pKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoYXQgY29kZSBwb2ludCB0byB0aGUgZW5kIG9mIHJlc3VsdC5cbiAgICByZXN1bHQgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEEgZmFzdGVyIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgdGhhdCBvbmx5IHdvcmtzIHdoZW4gY29tcGFyaW5nIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IChjaGFyLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgY29uc3QgaWR4ID0gaW5wdXQuaW5kZXhPZihjaGFyLCBwb3NpdGlvbi5wb3NpdGlvbilcbiAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbnB1dC5sZW5ndGhcbiAgICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQpXG4gIH1cblxuICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlkeFxuICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0cmluZy1wZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gc3RyaW5nUGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBpbnB1dC5cbiAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShpbnB1dClcblxuICAvLyAyLiBSZXR1cm4gdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgYnl0ZXMuXG4gIHJldHVybiBwZXJjZW50RGVjb2RlKGJ5dGVzKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGJ5dGUgYnl0ZSBpbiBpbnB1dDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXVxuXG4gICAgLy8gMS4gSWYgYnl0ZSBpcyBub3QgMHgyNSAoJSksIHRoZW4gYXBwZW5kIGJ5dGUgdG8gb3V0cHV0LlxuICAgIGlmIChieXRlICE9PSAweDI1KSB7XG4gICAgICBvdXRwdXQucHVzaChieXRlKVxuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBieXRlIGlzIDB4MjUgKCUpIGFuZCB0aGUgbmV4dCB0d28gYnl0ZXNcbiAgICAvLyBhZnRlciBieXRlIGluIGlucHV0IGFyZSBub3QgaW4gdGhlIHJhbmdlc1xuICAgIC8vIDB4MzAgKDApIHRvIDB4MzkgKDkpLCAweDQxIChBKSB0byAweDQ2IChGKSxcbiAgICAvLyBhbmQgMHg2MSAoYSkgdG8gMHg2NiAoZiksIGFsbCBpbmNsdXNpdmUsIGFwcGVuZCBieXRlXG4gICAgLy8gdG8gb3V0cHV0LlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBieXRlID09PSAweDI1ICYmXG4gICAgICAhL15bMC05QS1GYS1mXXsyfSQvaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pKVxuICAgICkge1xuICAgICAgb3V0cHV0LnB1c2goMHgyNSlcblxuICAgIC8vIDMuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gTGV0IGJ5dGVQb2ludCBiZSB0aGUgdHdvIGJ5dGVzIGFmdGVyIGJ5dGUgaW4gaW5wdXQsXG4gICAgICAvLyBkZWNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRlZCBhcyBoZXhhZGVjaW1hbCBudW1iZXIuXG4gICAgICBjb25zdCBuZXh0VHdvQnl0ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKVxuICAgICAgY29uc3QgYnl0ZVBvaW50ID0gTnVtYmVyLnBhcnNlSW50KG5leHRUd29CeXRlcywgMTYpXG5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dC5wdXNoKGJ5dGVQb2ludClcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKG91dHB1dClcbn1cblxuLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1hLW1pbWUtdHlwZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gcGFyc2VNSU1FVHlwZSAoaW5wdXQpIHtcbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShpbnB1dCwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsXG4gIC8vIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2VcbiAgLy8gb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAyRiAoLykgZnJvbVxuICAvLyBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gIGNvbnN0IHR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDQuIElmIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICBpZiAodHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIHJldHVyblxuICAvLyBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDYuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwMkYgKC8pLilcbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDcuIExldCBzdWJ0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mXG4gIC8vIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuXG4gIC8vIHBvc2l0aW9uLlxuICBsZXQgc3VidHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICc7JyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOC4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBzdWJ0eXBlLlxuICBzdWJ0eXBlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2Uoc3VidHlwZSwgZmFsc2UsIHRydWUpXG5cbiAgLy8gOS4gSWYgc3VidHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChzdWJ0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3Qoc3VidHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCB0eXBlTG93ZXJjYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHN1YnR5cGVMb3dlcmNhc2UgPSBzdWJ0eXBlLnRvTG93ZXJDYXNlKClcblxuICAvLyAxMC4gTGV0IG1pbWVUeXBlIGJlIGEgbmV3IE1JTUUgdHlwZSByZWNvcmQgd2hvc2UgdHlwZVxuICAvLyBpcyB0eXBlLCBpbiBBU0NJSSBsb3dlcmNhc2UsIGFuZCBzdWJ0eXBlIGlzIHN1YnR5cGUsXG4gIC8vIGluIEFTQ0lJIGxvd2VyY2FzZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGVcbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogdHlwZUxvd2VyY2FzZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlTG93ZXJjYXNlLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXG4gICAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGUtZXNzZW5jZVxuICAgIGVzc2VuY2U6IGAke3R5cGVMb3dlcmNhc2V9LyR7c3VidHlwZUxvd2VyY2FzZX1gXG4gIH1cblxuICAvLyAxMS4gV2hpbGUgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dDpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzQiAoOykuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQXG4gICAgLy8gd2hpdGVzcGFjZSBmcm9tIGlucHV0IGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gICAgICBjaGFyID0+IEhUVFBfV0hJVEVTUEFDRV9SRUdFWC50ZXN0KGNoYXIpLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDMuIExldCBwYXJhbWV0ZXJOYW1lIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gICAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAvLyBvciBVKzAwM0QgKD0pIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnOycgJiYgY2hhciAhPT0gJz0nLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDQuIFNldCBwYXJhbWV0ZXJOYW1lIHRvIHBhcmFtZXRlck5hbWUsIGluIEFTQ0lJXG4gICAgLy8gbG93ZXJjYXNlLlxuICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAgIC8vIFUrMDAzQiAoOyksIHRoZW4gY29udGludWUuXG4gICAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnOycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzRCAoPSkuKVxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICAgIH1cblxuICAgIC8vIDYuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IHBhcmFtZXRlclZhbHVlIGJlIG51bGwuXG4gICAgbGV0IHBhcmFtZXRlclZhbHVlID0gbnVsbFxuXG4gICAgLy8gOC4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgLy8gVSswMDIyIChcIiksIHRoZW46XG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJykge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uXG4gICAgICAvLyBhbmQgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZy5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhpbnB1dCwgcG9zaXRpb24sIHRydWUpXG5cbiAgICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgICAgLy8gZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgICAvLyAyLiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHBhcmFtZXRlclZhbHVlLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShwYXJhbWV0ZXJWYWx1ZSwgZmFsc2UsIHRydWUpXG5cbiAgICAgIC8vIDMuIElmIHBhcmFtZXRlclZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gY29udGludWUuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIHNvbGVseSBjb250YWlucyBIVFRQIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBwYXJhbWV0ZXJWYWx1ZSBzb2xlbHkgY29udGFpbnMgSFRUUCBxdW90ZWQtc3RyaW5nIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSBkb2VzIG5vdCBleGlzdFxuICAgIC8vIHRoZW4gc2V0IG1pbWVUeXBl4oCZcyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIHRvIHBhcmFtZXRlclZhbHVlLlxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlck5hbWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChwYXJhbWV0ZXJOYW1lKSAmJlxuICAgICAgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCB8fCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TLnRlc3QocGFyYW1ldGVyVmFsdWUpKSAmJlxuICAgICAgIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlck5hbWUpXG4gICAgKSB7XG4gICAgICBtaW1lVHlwZS5wYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2ZvcmdpdmluZy1iYXNlNjQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGRhdGEgKi9cbmZ1bmN0aW9uIGZvcmdpdmluZ0Jhc2U2NCAoZGF0YSkge1xuICAvLyAxLiBSZW1vdmUgYWxsIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBkYXRhLlxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9bXFx1MDAwOVxcdTAwMEFcXHUwMDBDXFx1MDAwRFxcdTAwMjBdL2csICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8vIDIuIElmIGRhdGHigJlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIG5vIHJlbWFpbmRlciwgdGhlbjpcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgIC8vIDEuIElmIGRhdGEgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEICg9KSBjb2RlIHBvaW50cyxcbiAgICAvLyB0aGVuIHJlbW92ZSB0aGVtIGZyb20gZGF0YS5cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC89Pz0kLywgJycpXG4gIH1cblxuICAvLyAzLiBJZiBkYXRh4oCZcyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBhIHJlbWFpbmRlciBvZiAxLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNC4gSWYgZGF0YSBjb250YWlucyBhIGNvZGUgcG9pbnQgdGhhdCBpcyBub3Qgb25lIG9mXG4gIC8vICBVKzAwMkIgKCspXG4gIC8vICBVKzAwMkYgKC8pXG4gIC8vICBBU0NJSSBhbHBoYW51bWVyaWNcbiAgLy8gdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKC9bXisvMC05QS1aYS16XS8udGVzdChkYXRhKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YSlcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKVxuXG4gIGZvciAobGV0IGJ5dGUgPSAwOyBieXRlIDwgYmluYXJ5Lmxlbmd0aDsgYnl0ZSsrKSB7XG4gICAgYnl0ZXNbYnl0ZV0gPSBiaW5hcnkuY2hhckNvZGVBdChieXRlKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZeKAmXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBl4oCZcyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIOKGkiB2YWx1ZSBvZiBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VyZW5jZSBvZiBVKzAwMjIgKFwiKSBvclxuICAgICAgLy8gICAgVSswMDVDIChcXCkgaW4gdmFsdWUgd2l0aCBVKzAwNUMgKFxcKS5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFxcXFx8XCIpL2csICdcXFxcJDEnKVxuXG4gICAgICAvLyAyLiBQcmVwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWVcblxuICAgICAgLy8gMy4gQXBwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gJ1wiJ1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCB2YWx1ZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gdmFsdWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBzZXJpYWxpemF0aW9uLlxuICByZXR1cm4gc2VyaWFsaXphdGlvblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxmJyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGF0YVVSTFByb2Nlc3NvcixcbiAgVVJMU2VyaWFsaXplcixcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyxcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsXG4gIHN0cmluZ1BlcmNlbnREZWNvZGUsXG4gIHBhcnNlTUlNRVR5cGUsXG4gIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcsXG4gIHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG5jbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gIGNvbnN0cnVjdG9yIChmaWxlQml0cywgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRmlsZSBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGZpbGVCaXRzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddKGZpbGVCaXRzKVxuICAgIGZpbGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVOYW1lKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcob3B0aW9ucylcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuICAgIC8vIE5vdGU6IEJsb2IgaGFuZGxlcyB0aGlzIGZvciB1c1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICBsZXQgdCA9IG9wdGlvbnMudHlwZVxuICAgIGxldCBkXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgc3Vic3RlcDoge1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdCA9IHBhcnNlTUlNRVR5cGUodClcblxuICAgICAgICBpZiAodCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgdCA9ICcnXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgICAgIGJyZWFrIHN1YnN0ZXBcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBzZXJpYWxpemVBTWltZVR5cGUodCkudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICAgIGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZFxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHN1cGVyKHByb2Nlc3NCbG9iUGFydHMoZmlsZUJpdHMsIG9wdGlvbnMpLCB7IHR5cGU6IHQgfSlcbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBuYW1lOiBuLFxuICAgICAgbGFzdE1vZGlmaWVkOiBkLFxuICAgICAgdHlwZTogdFxuICAgIH1cbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cbn1cblxuY2xhc3MgRmlsZUxpa2Uge1xuICBjb25zdHJ1Y3RvciAoYmxvYkxpa2UsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUT0RPOiBhcmd1bWVudCBpZGwgdHlwZSBjaGVja1xuXG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIFRPRE9cbiAgICBjb25zdCB0ID0gb3B0aW9ucy50eXBlXG5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICAvLyAgICBUT0RPXG5cbiAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICBjb25zdCBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgYmxvYkxpa2UsXG4gICAgICBuYW1lOiBuLFxuICAgICAgdHlwZTogdCxcbiAgICAgIGxhc3RNb2RpZmllZDogZFxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zdHJlYW0oLi4uYXJncylcbiAgfVxuXG4gIGFycmF5QnVmZmVyICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLmFycmF5QnVmZmVyKC4uLmFyZ3MpXG4gIH1cblxuICBzbGljZSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zbGljZSguLi5hcmdzKVxuICB9XG5cbiAgdGV4dCAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50ZXh0KC4uLmFyZ3MpXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNpemVcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudHlwZVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10gKCkge1xuICAgIHJldHVybiAnRmlsZSdcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RNb2RpZmllZDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYiA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoQmxvYilcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnQgPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8XG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICAgKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYsIG9wdHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBvcHRzKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0XG4pXG5cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNkZm4tRmlsZVByb3BlcnR5QmFnXG53ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsYXN0TW9kaWZpZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlbmRpbmdzJyxcbiAgICBjb252ZXJ0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodmFsdWUpXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgICAgaWYgKHZhbHVlICE9PSAnbmF0aXZlJykge1xuICAgICAgICB2YWx1ZSA9ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cmFuc3BhcmVudCdcbiAgfVxuXSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNwcm9jZXNzLWJsb2ItcGFydHNcbiAqIEBwYXJhbSB7KE5vZGVKUy5UeXBlZEFycmF5fEJsb2J8c3RyaW5nKVtdfSBwYXJ0c1xuICogQHBhcmFtIHt7IHR5cGU6IHN0cmluZywgZW5kaW5nczogc3RyaW5nIH19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0Jsb2JQYXJ0cyAocGFydHMsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIGJ5dGVzLlxuICAvKiogQHR5cGUge05vZGVKUy5UeXBlZEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBlbGVtZW50IGluIHBhcnRzOlxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGFydHMpIHtcbiAgICAvLyAxLiBJZiBlbGVtZW50IGlzIGEgVVNWU3RyaW5nLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczpcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcyBiZSBlbGVtZW50LlxuICAgICAgbGV0IHMgPSBlbGVtZW50XG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmRpbmdzIG1lbWJlciBvZiBvcHRpb25zIGlzIFwibmF0aXZlXCIsIHNldCBzXG4gICAgICAvLyAgICB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbGluZSBlbmRpbmdzIHRvIG5hdGl2ZVxuICAgICAgLy8gICAgb2YgZWxlbWVudC5cbiAgICAgIGlmIChvcHRpb25zLmVuZGluZ3MgPT09ICduYXRpdmUnKSB7XG4gICAgICAgIHMgPSBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUocylcbiAgICAgIH1cblxuICAgICAgLy8gMy4gQXBwZW5kIHRoZSByZXN1bHQgb2YgVVRGLTggZW5jb2RpbmcgcyB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZW5jb2Rlci5lbmNvZGUocykpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoZWxlbWVudCkgfHxcbiAgICAgIHR5cGVzLmlzVHlwZWRBcnJheShlbGVtZW50KVxuICAgICkge1xuICAgICAgLy8gMi4gSWYgZWxlbWVudCBpcyBhIEJ1ZmZlclNvdXJjZSwgZ2V0IGEgY29weSBvZiB0aGVcbiAgICAgIC8vICAgIGJ5dGVzIGhlbGQgYnkgdGhlIGJ1ZmZlciBzb3VyY2UsIGFuZCBhcHBlbmQgdGhvc2VcbiAgICAgIC8vICAgIGJ5dGVzIHRvIGJ5dGVzLlxuICAgICAgaWYgKCFlbGVtZW50LmJ1ZmZlcikgeyAvLyBBcnJheUJ1ZmZlclxuICAgICAgICBieXRlcy5wdXNoKG5ldyBVaW50OEFycmF5KGVsZW1lbnQpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgICBuZXcgVWludDhBcnJheShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZWxlbWVudCkpIHtcbiAgICAgIC8vIDMuIElmIGVsZW1lbnQgaXMgYSBCbG9iLCBhcHBlbmQgdGhlIGJ5dGVzIGl0IHJlcHJlc2VudHNcbiAgICAgIC8vICAgIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBieXRlcy5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jY29udmVydC1saW5lLWVuZGluZ3MtdG8tbmF0aXZlXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUgKHMpIHtcbiAgLy8gMS4gTGV0IG5hdGl2ZSBsaW5lIGVuZGluZyBiZSBiZSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGxldCBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcbidcblxuICAvLyAyLiBJZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybeKAmXMgY29udmVudGlvbnMgYXJlIHRvXG4gIC8vICAgIHJlcHJlc2VudCBuZXdsaW5lcyBhcyBhIGNhcnJpYWdlIHJldHVybiBhbmQgbGluZSBmZWVkXG4gIC8vICAgIHNlcXVlbmNlLCBzZXQgbmF0aXZlIGxpbmUgZW5kaW5nIHRvIHRoZSBjb2RlIHBvaW50XG4gIC8vICAgIFUrMDAwRCBDUiBmb2xsb3dlZCBieSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgbmF0aXZlTGluZUVuZGluZyA9ICdcXHJcXG4nXG4gIH1cblxuICByZXR1cm4gcy5yZXBsYWNlKC9cXHI/XFxuL2csIG5hdGl2ZUxpbmVFbmRpbmcpXG59XG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAoTmF0aXZlRmlsZSAmJiBvYmplY3QgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIEZpbGUgfHwgKFxuICAgICAgb2JqZWN0ICYmXG4gICAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0ZpbGUnXG4gICAgKVxuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBtYWtlSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcblxuLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNmb3JtZGF0YVxuY2xhc3MgRm9ybURhdGEge1xuICBjb25zdHJ1Y3RvciAoZm9ybSkge1xuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuYXBwZW5kJyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGhcbiAgICAvLyBuYW1lLCB2YWx1ZSwgYW5kIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIEFwcGVuZCBlbnRyeSB0byB0aGlz4oCZcyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICB9XG5cbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGRlbGV0ZShuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcyB3aG9zZSBuYW1lXG4gICAgLy8gaXMgbmFtZSBmcm9tIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdID0gdGhpc1trU3RhdGVdLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICB9XG5cbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXPigJlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXRBbGwnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc+KAmXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiB0aGUgZW1wdHkgbGlzdC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgZW50cmllcyB3aG9zZSBuYW1lIGlzIG5hbWUsIGluIG9yZGVyLFxuICAgIC8vIGZyb20gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSlcbiAgfVxuXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBoYXMobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbnRyeVxuICAgIC8vIHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTFcbiAgfVxuXG4gIHNldCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuc2V0JyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVGhlIHNldChuYW1lLCB2YWx1ZSkgYW5kIHNldChuYW1lLCBibG9iVmFsdWUsIGZpbGVuYW1lKSBtZXRob2Qgc3RlcHNcbiAgICAvLyBhcmU6XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB0b1VTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoIG5hbWUsIHZhbHVlLCBhbmRcbiAgICAvLyBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0IHdob3NlIG5hbWUgaXMgbmFtZSwgdGhlblxuICAgIC8vIHJlcGxhY2UgdGhlIGZpcnN0IHN1Y2ggZW50cnkgd2l0aCBlbnRyeSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9IFtcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKDAsIGlkeCksXG4gICAgICAgIGVudHJ5LFxuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoaWR4ICsgMSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhcHBlbmQgZW50cnkgdG8gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEZvcm1EYXRhKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG59XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gRm9ybURhdGEucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm9ybURhdGEucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGb3JtRGF0YScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjcmVhdGUtYW4tZW50cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xCbG9ifSB2YWx1ZVxuICogQHBhcmFtIHs/c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWFrZUVudHJ5IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgLy8gMS4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIG5hbWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIC8vIFwiVG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZywgcmVwbGFjZSBhbnkgc3Vycm9nYXRlc1xuICAvLyAgd2l0aCBVK0ZGRkQuXCJcbiAgLy8gc2VlOiBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmRcbiAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpLnRvU3RyaW5nKCd1dGY4JylcblxuICAvLyAyLiBJZiB2YWx1ZSBpcyBhIHN0cmluZywgdGhlbiBzZXQgdmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nXG4gIC8vICAgIHZhbHVlIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCd1dGY4JylcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBJZiB2YWx1ZSBpcyBub3QgYSBGaWxlIG9iamVjdCwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBcImJsb2JcIlxuICAgIGlmICghaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgaXMgZmlsZW5hbWUuXG4gICAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qKiBAdHlwZSB7RmlsZVByb3BlcnR5QmFnfSAqL1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSAoTmF0aXZlRmlsZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVW5kaWNpRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhIH1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJ1c2JveSA9IHJlcXVpcmUoJ0BmYXN0aWZ5L2J1c2JveScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0Jsb2JMaWtlLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBmdWxseVJlYWRCb2R5XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24sIHN0cnVjdHVyZWRDbG9uZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc0Vycm9yZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGlzVWludDhBcnJheSwgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcblxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyAxLiBMZXQgc3RyZWFtIGJlIG51bGwuXG4gIGxldCBzdHJlYW0gPSBudWxsXG5cbiAgLy8gMi4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuIHNldCBzdHJlYW0gdG8gb2JqZWN0LlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICBzdHJlYW0gPSBvYmplY3RcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIG9iamVjdCBpcyBhIEJsb2Igb2JqZWN0LCBzZXQgc3RyZWFtIHRvIHRoZVxuICAgIC8vICAgIHJlc3VsdCBvZiBydW5uaW5nIG9iamVjdOKAmXMgZ2V0IHN0cmVhbS5cbiAgICBzdHJlYW0gPSBvYmplY3Quc3RyZWFtKClcbiAgfSBlbHNlIHtcbiAgICAvLyA0LiBPdGhlcndpc2UsIHNldCBzdHJlYW0gdG8gYSBuZXcgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCBhbmQgc2V0XG4gICAgLy8gICAgdXAgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcbiAgICAgICAgICB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHRleHRFbmNvZGVyLmVuY29kZShzb3VyY2UpIDogc291cmNlXG4gICAgICAgIClcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBBc3NlcnQ6IHN0cmVhbSBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdC5cbiAgYXNzZXJ0KGlzUmVhZGFibGVTdHJlYW1MaWtlKHN0cmVhbSkpXG5cbiAgLy8gNi4gTGV0IGFjdGlvbiBiZSBudWxsLlxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIC8vIDcuIExldCBzb3VyY2UgYmUgbnVsbC5cbiAgbGV0IHNvdXJjZSA9IG51bGxcblxuICAvLyA4LiBMZXQgbGVuZ3RoIGJlIG51bGwuXG4gIGxldCBsZW5ndGggPSBudWxsXG5cbiAgLy8gOS4gTGV0IHR5cGUgYmUgbnVsbC5cbiAgbGV0IHR5cGUgPSBudWxsXG5cbiAgLy8gMTAuIFN3aXRjaCBvbiBvYmplY3Q6XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIG9iamVjdC5cbiAgICAvLyBOb3RlOiBzZXR0aW5nIHNvdXJjZSB0byBhIFVpbnQ4QXJyYXkgaGVyZSBicmVha3Mgc29tZSBtb2NraW5nIGFzc3VtcHRpb25zLlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYHRleHQvcGxhaW47Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gVVJMU2VhcmNoUGFyYW1zXG5cbiAgICAvLyBzcGVjIHNheXMgdG8gcnVuIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvbiBib2R5Lmxpc3RcbiAgICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGluIE5vZGUuanMgYXMgYXBhcnQgb2YgYW4gVVJMU2VhcmNoUGFyYW1zIGluc3RhbmNlIHRvU3RyaW5nIG1ldGhvZFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0w0OTBcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMTAwXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHNlcmlhbGl6ZXIgd2l0aCBvYmplY3TigJlzIGxpc3QuXG4gICAgc291cmNlID0gb2JqZWN0LnRvU3RyaW5nKClcblxuICAgIC8vIFNldCB0eXBlIHRvIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3Quc2xpY2UoKSlcbiAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclZpZXdcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3QuYnVmZmVyLnNsaWNlKG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QuYnl0ZU9mZnNldCArIG9iamVjdC5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKG9iamVjdCkpIHtcbiAgICBjb25zdCBib3VuZGFyeSA9IGAtLS0tZm9ybWRhdGEtdW5kaWNpLTAke2Ake01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMTEpfWAucGFkU3RhcnQoMTEsICcwJyl9YFxuICAgIGNvbnN0IHByZWZpeCA9IGAtLSR7Ym91bmRhcnl9XFxyXFxuQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhYFxuXG4gICAgLyohIGZvcm1kYXRhLXBvbHlmaWxsLiBNSVQgTGljZW5zZS4gSmltbXkgV8OkcnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdOKAmXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgYm91bmRhcnlcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN04oCZcyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3TigJlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZeKAmXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gMTMuIExldCBib2R5IGJlIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLCBzb3VyY2UgaXMgc291cmNlLFxuICAvLyBhbmQgbGVuZ3RoIGlzIGxlbmd0aC5cbiAgY29uc3QgYm9keSA9IHsgc3RyZWFtLCBzb3VyY2UsIGxlbmd0aCB9XG5cbiAgLy8gMTQuIFJldHVybiAoYm9keSwgdHlwZSkuXG4gIHJldHVybiBbYm9keSwgdHlwZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0LXNhZmVseS1leHRyYWN0XG5mdW5jdGlvbiBzYWZlbHlFeHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChib2R5KSB7XG4gIC8vIFRvIGNsb25lIGEgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jbG9uZVxuXG4gIC8vIDEuIExldCDCqyBvdXQxLCBvdXQyIMK7IGJlIHRoZSByZXN1bHQgb2YgdGVlaW5nIGJvZHnigJlzIHN0cmVhbS5cbiAgY29uc3QgW291dDEsIG91dDJdID0gYm9keS5zdHJlYW0udGVlKClcbiAgY29uc3Qgb3V0MkNsb25lID0gc3RydWN0dXJlZENsb25lKG91dDIsIHsgdHJhbnNmZXI6IFtvdXQyXSB9KVxuICAvLyBUaGlzLCBmb3Igd2hhdGV2ZXIgcmVhc29ucywgdW5yZWZzIG91dDJDbG9uZSB3aGljaCBhbGxvd3NcbiAgLy8gdGhlIHByb2Nlc3MgdG8gZXhpdCBieSBpdHNlbGYuXG4gIGNvbnN0IFssIGZpbmFsQ2xvbmVdID0gb3V0MkNsb25lLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHnigJlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogZmluYWxDbG9uZSxcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnN1bWVCb2R5IChib2R5KSB7XG4gIGlmIChib2R5KSB7XG4gICAgaWYgKGlzVWludDhBcnJheShib2R5KSkge1xuICAgICAgeWllbGQgYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBib2R5LnN0cmVhbVxuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcGF0LlxuICAgICAgc3RyZWFtW2tCb2R5VXNlZF0gPSB0cnVlXG5cbiAgICAgIHlpZWxkICogc3RyZWFtXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzdGF0ZSkge1xuICBpZiAoc3RhdGUuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlNaXhpbk1ldGhvZHMgKGluc3RhbmNlKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYmxvYiAoKSB7XG4gICAgICAvLyBUaGUgYmxvYigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIEJsb2Igd2hvc2VcbiAgICAgIC8vIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgd2hvc2UgdHlwZSBhdHRyaWJ1dGUgaXMgdGhpc+KAmXNcbiAgICAgIC8vIE1JTUUgdHlwZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUobWltZVR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gYSBCbG9iIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgdHlwZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gaXMgbWltZVR5cGUuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IG1pbWVUeXBlIH0pXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXJyYXlCdWZmZXIgKCkge1xuICAgICAgLy8gVGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgLy8gb2YgcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyXG4gICAgICAvLyB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgdXRmOERlY29kZUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAganNvbiAoKSB7XG4gICAgICAvLyBUaGUganNvbigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgcGFyc2UgSlNPTiBmcm9tIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCBwYXJzZUpTT05Gcm9tQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBpbnN0YW5jZSlcblxuICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpXG5cbiAgICAgIC8vIElmIG1pbWVUeXBl4oCZcyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLCB0aGVuOlxuICAgICAgaWYgKC9tdWx0aXBhcnRcXC9mb3JtLWRhdGEvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmhlYWRlcnMpIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWVcblxuICAgICAgICBjb25zdCByZXNwb25zZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICBsZXQgYnVzYm95XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBidXNib3kgPSBuZXcgQnVzYm95KHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBwcmVzZXJ2ZVBhdGg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGAke2Vycn1gLCAnQWJvcnRFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICBidXNib3kub24oJ2ZpZWxkJywgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGJ1c2JveS5vbignZmlsZScsIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG5cbiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnIHx8IGVuY29kaW5nLnRvTG93ZXJDYXNlKCkgPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICBsZXQgYmFzZTY0Y2h1bmsgPSAnJ1xuXG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBiYXNlNjRjaHVuayArPSBjaHVuay50b1N0cmluZygpLnJlcGxhY2UoL1tcXHJcXG5dL2dtLCAnJylcblxuICAgICAgICAgICAgICBjb25zdCBlbmQgPSBiYXNlNjRjaHVuay5sZW5ndGggLSBiYXNlNjRjaHVuay5sZW5ndGggJSA0XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLnNsaWNlKDAsIGVuZCksICdiYXNlNjQnKSlcblxuICAgICAgICAgICAgICBiYXNlNjRjaHVuayA9IGJhc2U2NGNodW5rLnNsaWNlKGVuZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuaywgJ2Jhc2U2NCcpKVxuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGJ1c2JveVJlc29sdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgYnVzYm95Lm9uKCdmaW5pc2gnLCByZXNvbHZlKVxuICAgICAgICAgIGJ1c2JveS5vbignZXJyb3InLCAoZXJyKSA9PiByZWplY3QobmV3IFR5cGVFcnJvcihlcnIpKSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGhpcy5ib2R5ICE9PSBudWxsKSBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkgYnVzYm95LndyaXRlKGNodW5rKVxuICAgICAgICBidXNib3kuZW5kKClcbiAgICAgICAgYXdhaXQgYnVzYm95UmVzb2x2ZVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZUZvcm1EYXRhXG4gICAgICB9IGVsc2UgaWYgKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBtaW1lVHlwZeKAmXMgZXNzZW5jZSBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLCB0aGVuOlxuXG4gICAgICAgIC8vIDEuIExldCBlbnRyaWVzIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBieXRlcy5cbiAgICAgICAgbGV0IGVudHJpZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgdGV4dCA9ICcnXG4gICAgICAgICAgLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHBhcnNlciB3aWxsIGtlZXAgdGhlIEJPTS5cbiAgICAgICAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsZW5jb2RlZC1wYXJzZXJcbiAgICAgICAgICAvLyBOb3RlIHRoYXQgc3RyZWFtaW5nIGRlY29kZXIgaXMgc3RhdGVmdWwgYW5kIGNhbm5vdCBiZSByZXVzZWRcbiAgICAgICAgICBjb25zdCBzdHJlYW1pbmdEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgaWdub3JlQk9NOiB0cnVlIH0pXG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkge1xuICAgICAgICAgICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZSgpXG4gICAgICAgICAgZW50cmllcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGV4dClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHQ6IFVuY2xlYXIgd2hlbiBuZXcgVVJMU2VhcmNoUGFyYW1zIGNhbiBmYWlsIG9uIGEgc3RyaW5nLlxuICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoKSwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJpZXMgYXJlIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXYWl0IGEgdGljayBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhIFR5cGVFcnJvciBjYW4gYmUgdGhyb3duIHdoZW4gYW4gQWJvcnRFcnJvciBzaG91bGQuXG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG5cbiAgICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6IGAke2luc3RhbmNlLm5hbWV9LmZvcm1EYXRhYCxcbiAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHBhcnNlIGNvbnRlbnQgYXMgRm9ybURhdGEuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRob2RzXG59XG5cbmZ1bmN0aW9uIG1peGluQm9keSAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLnByb3RvdHlwZSwgYm9keU1peGluTWV0aG9kcyhwcm90b3R5cGUpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gb2JqZWN0XG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwZWNDb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3Rba1N0YXRlXS5ib2R5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgaXMgdW51c2FibGUnKVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN04oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMobmV3IFVpbnQ4QXJyYXkoKSlcbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgb2JqZWN04oCZcyBib2R5IGdpdmVuIHN1Y2Nlc3NTdGVwcyxcbiAgLy8gICAgZXJyb3JTdGVwcywgYW5kIG9iamVjdOKAmXMgcmVsZXZhbnQgZ2xvYmFsIG9iamVjdC5cbiAgYXdhaXQgZnVsbHlSZWFkQm9keShvYmplY3Rba1N0YXRlXS5ib2R5LCBzdWNjZXNzU3RlcHMsIGVycm9yU3RlcHMpXG5cbiAgLy8gNy4gUmV0dXJuIHByb21pc2UuXG4gIHJldHVybiBwcm9taXNlLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGJvZHlVbnVzYWJsZSAoYm9keSkge1xuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keeKAmXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gdXRmOERlY29kZUJ5dGVzIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDEuIExldCBidWZmZXIgYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIHRocmVlIGJ5dGVzIGZyb21cbiAgLy8gICAgaW9RdWV1ZSwgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cblxuICAvLyAyLiBJZiBidWZmZXIgaXMgMHhFRiAweEJCIDB4QkYsIHRoZW4gcmVhZCB0aHJlZVxuICAvLyAgICBieXRlcyBmcm9tIGlvUXVldWUuIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICBpZiAoYnVmZmVyWzBdID09PSAweEVGICYmIGJ1ZmZlclsxXSA9PT0gMHhCQiAmJiBidWZmZXJbMl0gPT09IDB4QkYpIHtcbiAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkoMylcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIFVURi044oCZc1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG4gIGNvbnN0IG91dHB1dCA9IHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWpzb24tYnl0ZXMtdG8tYS1qYXZhc2NyaXB0LXZhbHVlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTkZyb21CeXRlcyAoYnl0ZXMpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodXRmOERlY29kZUJ5dGVzKGJ5dGVzKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9yZXNwb25zZScpLlJlc3BvbnNlfGltcG9ydCgnLi9yZXF1ZXN0JykuUmVxdWVzdH0gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAob2JqZWN0KSB7XG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IG9iamVjdFtrU3RhdGVdXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LXR5cGUnKVxuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXh0cmFjdEJvZHksXG4gIHNhZmVseUV4dHJhY3RCb2R5LFxuICBjbG9uZUJvZHksXG4gIG1peGluQm9keVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSFRUUDJCdWlsZFJlcXVlc3QsIGtIVFRQMkNvcHlIZWFkZXJzLCBrSFRUUDFCdWlsZFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuLy8gdG9rZW5SZWdFeHAgYW5kIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHZhbCBpcyBhIHZhbGlkIEhUVFAgdG9rZW5cbiAqIHBlciB0aGUgcnVsZXMgZGVmaW5lZCBpbiBSRkMgNzIzMFxuICogU2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqL1xuY29uc3QgdG9rZW5SZWdFeHAgPSAvXltcXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XSskL1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vLyBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBkb2VzIG5vdCBjb250YWluIGNvbnRyb2wgY2hhcnMgXFx4MDAgdG8gXFx4MjBcbmNvbnN0IGludmFsaWRQYXRoUmVnZXggPSAvW15cXHUwMDIxLVxcdTAwZmZdL1xuXG5jb25zdCBrSGFuZGxlciA9IFN5bWJvbCgnaGFuZGxlcicpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxubGV0IGV4dHJhY3RCb2R5XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5jcmVhdGUgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJylcbiAgY2hhbm5lbHMuYm9keVNlbnQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Ym9keVNlbnQnKVxuICBjaGFubmVscy5oZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnKVxuICBjaGFubmVscy50cmFpbGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDp0cmFpbGVycycpXG4gIGNoYW5uZWxzLmVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5jcmVhdGUgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJvZHlTZW50ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5oZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy50cmFpbGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuZXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5LFxuICAgIGlkZW1wb3RlbnQsXG4gICAgYmxvY2tpbmcsXG4gICAgdXBncmFkZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICByZXNldCxcbiAgICB0aHJvd09uRXJyb3IsXG4gICAgZXhwZWN0Q29udGludWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXguZXhlYyhwYXRoKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMobWV0aG9kKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlcnNUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGJvZHlUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAocmVzZXQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlc2V0JylcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0Q29udGludWUgIT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0Q29udGludWUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGV4cGVjdENvbnRpbnVlJylcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnNUaW1lb3V0ID0gaGVhZGVyc1RpbWVvdXRcblxuICAgIHRoaXMuYm9keVRpbWVvdXQgPSBib2R5VGltZW91dFxuXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgPT09IHRydWVcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG5cbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveSh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5vbignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVyciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBib2R5IDogbnVsbFxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ1ZmZlci5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkubGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IHV0aWwuaXNJdGVyYWJsZShib2R5KSB8fCB1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFJlYWRhYmxlIHN0cmVhbSwgYW4gaXRlcmFibGUsIG9yIGFuIGFzeW5jIGl0ZXJhYmxlJylcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGdyYWRlID0gdXBncmFkZSB8fCBudWxsXG5cbiAgICB0aGlzLnBhdGggPSBxdWVyeSA/IHV0aWwuYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSAnJ1xuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKHRoaXMuYm9keSkpIHtcbiAgICAgIGlmICh1dGlsLm5vZGVNYWpvciA8IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPCA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0Zvcm0tRGF0YSBib2RpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIG5vZGUgdjE2LjggYW5kIG5ld2VyLicpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgICAgZXh0cmFjdEJvZHkgPSByZXF1aXJlKCcuLi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuICAgICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtjb250ZW50VHlwZX1cXHJcXG5gXG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiB0aGlzLmNvbnRlbnRUeXBlID09IG51bGwgJiYgYm9keS50eXBlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYm9keS50eXBlXG4gICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtib2R5LnR5cGV9XFxyXFxuYFxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSlcblxuICAgIHRoaXMuc2VydmVybmFtZSA9IHV0aWwuZ2V0U2VydmVyTmFtZSh0aGlzLmhvc3QpXG5cbiAgICB0aGlzW2tIYW5kbGVyXSA9IGhhbmRsZXJcblxuICAgIGlmIChjaGFubmVscy5jcmVhdGUuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNyZWF0ZS5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmIChjaGFubmVscy5ib2R5U2VudC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuYm9keVNlbnQucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIGFib3J0KHRoaXMuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29ubmVjdChhYm9ydClcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAoY2hhbm5lbHMuaGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuaGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSwgaGVhZGVycywgc3RhdHVzVGV4dCB9IH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRGF0YShjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlXG4gICAgaWYgKGNoYW5uZWxzLnRyYWlsZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy50cmFpbGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgdHJhaWxlcnMgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBUaGlzIG1pZ2h0IGJlIGEgYmFkIGlkZWE/XG4gICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgaWYgKGNoYW5uZWxzLmVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5lcnJvci5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgZXJyb3IgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkZpbmFsbHkgKCkge1xuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIHRoaXMuZW5kSGFuZGxlciA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBhZGp1c3QgdG8gc3VwcG9ydCBIMlxuICBhZGRIZWFkZXIgKGtleSwgdmFsdWUpIHtcbiAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAxQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gVE9ETzogTWlncmF0ZSBoZWFkZXIgcGFyc2luZyBoZXJlLCB0byBtYWtlIFJlcXVlc3RzXG4gICAgLy8gSFRUUCBhZ25vc3RpY1xuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnNcbiAgICBvcHRzID0geyAuLi5vcHRzLCBoZWFkZXJzOiBudWxsIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwga2V5LCBoZWFkZXJzW2tleV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQ29weUhlYWRlcnNdIChyYXcpIHtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmF3LnNwbGl0KCdcXHJcXG4nKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgcmF3SGVhZGVycykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KCc6ICcpXG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgaWYgKGhlYWRlcnNba2V5XSkgaGVhZGVyc1trZXldICs9IGAsJHt2YWx1ZX1gXG4gICAgICBlbHNlIGhlYWRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyVmFsdWUgKGtleSwgdmFsLCBza2lwQXBwZW5kKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICB2YWwgPSB2YWwgIT0gbnVsbCA/IGAke3ZhbH1gIDogJydcblxuICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHJldHVybiBza2lwQXBwZW5kID8gdmFsIDogYCR7a2V5fTogJHt2YWx9XFxyXFxuYFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyIChyZXF1ZXN0LCBrZXksIHZhbCwgc2tpcEFwcGVuZCA9IGZhbHNlKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWVzdC5ob3N0ID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnaG9zdCdcbiAgKSB7XG4gICAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPSBwYXJzZUludCh2YWwsIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlcXVlc3QuY29udGVudExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb250ZW50LWxlbmd0aCBoZWFkZXInKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTIgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZSdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9IHZhbFxuICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbidcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICAgIGlmICh2YWx1ZSAhPT0gJ2Nsb3NlJyAmJiB2YWx1ZSAhPT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbiBoZWFkZXInKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcC1hbGl2ZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZ3JhZGUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cGdyYWRlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnZXhwZWN0J1xuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoJ2V4cGVjdCBoZWFkZXIgbm90IHN1cHBvcnRlZCcpXG4gIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhrZXkpID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlciBrZXknKVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwQXBwZW5kKSB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1trZXldKSByZXF1ZXN0LmhlYWRlcnNba2V5XSArPSBgLCR7cHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKX1gXG4gICAgICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyJylcbmNvbnN0IHtcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrRGVzdHJveSwga0Nsb3NlLCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga0Rlc3Ryb3llZCA9IFN5bWJvbCgnZGVzdHJveWVkJylcbmNvbnN0IGtDbG9zZWQgPSBTeW1ib2woJ2Nsb3NlZCcpXG5jb25zdCBrT25EZXN0cm95ZWQgPSBTeW1ib2woJ29uRGVzdHJveWVkJylcbmNvbnN0IGtPbkNsb3NlZCA9IFN5bWJvbCgnb25DbG9zZWQnKVxuY29uc3Qga0ludGVyY2VwdGVkRGlzcGF0Y2ggPSBTeW1ib2woJ0ludGVyY2VwdGVkIERpc3BhdGNoJylcblxuY2xhc3MgRGlzcGF0Y2hlckJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSBmYWxzZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICB0aGlzW2tDbG9zZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkNsb3NlZF0gPSBbXVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgQ29ubmVjdFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuXG5sZXQgdGxzIC8vIGluY2x1ZGUgdGxzIGNvbmRpdGlvbmFsbHkgc2luY2UgaXQgaXMgbm90IGFsd2F5cyBhdmFpbGFibGVcblxuLy8gVE9ETzogc2Vzc2lvbiByZS11c2UgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGZpcnN0XG4vLyBjb25uZWN0aW9uIHRvIHJlc29sdmUgdGhlIHNlc3Npb24gYW5kIG1pZ2h0IHRoZXJlZm9yZVxuLy8gcmVzb2x2ZSB0aGUgc2FtZSBzZXJ2ZXJuYW1lIG11bHRpcGxlIHRpbWVzIGV2ZW4gd2hlblxuLy8gcmUtdXNlIGlzIGVuYWJsZWQuXG5cbmxldCBTZXNzaW9uQ2FjaGVcbi8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuaWYgKGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSAmJiAhcHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBXZWFrU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA8IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KGtleSlcbiAgICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICAgIHJldHVybiByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBuZXcgV2Vha1JlZihzZXNzaW9uKSlcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeS5yZWdpc3RlcihzZXNzaW9uLCBzZXNzaW9uS2V5KVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgU2ltcGxlU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplID49IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb2xkZXN0IHNlc3Npb25cbiAgICAgICAgY29uc3QgeyB2YWx1ZTogb2xkZXN0S2V5IH0gPSB0aGlzLl9zZXNzaW9uQ2FjaGUua2V5cygpLm5leHQoKVxuICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKG9sZGVzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbm5lY3RvciAoeyBhbGxvd0gyLCBtYXhDYWNoZWRTZXNzaW9ucywgc29ja2V0UGF0aCwgdGltZW91dCwgLi4ub3B0cyB9KSB7XG4gIGlmIChtYXhDYWNoZWRTZXNzaW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhDYWNoZWRTZXNzaW9ucykgfHwgbWF4Q2FjaGVkU2Vzc2lvbnMgPCAwKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q2FjaGVkU2Vzc2lvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBzb2NrZXRQYXRoLCAuLi5vcHRzIH1cbiAgY29uc3Qgc2Vzc2lvbkNhY2hlID0gbmV3IFNlc3Npb25DYWNoZShtYXhDYWNoZWRTZXNzaW9ucyA9PSBudWxsID8gMTAwIDogbWF4Q2FjaGVkU2Vzc2lvbnMpXG4gIHRpbWVvdXQgPSB0aW1lb3V0ID09IG51bGwgPyAxMGUzIDogdGltZW91dFxuICBhbGxvd0gyID0gYWxsb3dIMiAhPSBudWxsID8gYWxsb3dIMiA6IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0ICh7IGhvc3RuYW1lLCBob3N0LCBwcm90b2NvbCwgcG9ydCwgc2VydmVybmFtZSwgbG9jYWxBZGRyZXNzLCBodHRwU29ja2V0IH0sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNvY2tldFxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGlmICghdGxzKSB7XG4gICAgICAgIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgYXNzZXJ0KHNlc3Npb25LZXkpXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgNDQzLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcblxuICAgICAgc29ja2V0XG4gICAgICAgIC5vbignc2Vzc2lvbicsIGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogQ2FuIGEgc2Vzc2lvbiBiZWNvbWUgaW52YWxpZCBvbmNlIGVzdGFibGlzaGVkPyBEb24ndCB0aGluayBzbz9cbiAgICAgICAgICBzZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCghaHR0cFNvY2tldCwgJ2h0dHBTb2NrZXQgY2FuIG9ubHkgYmUgc2VudCBvbiBUTFMgdXBkYXRlJylcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0LCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgODAsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBUQ1Aga2VlcCBhbGl2ZSBvcHRpb25zIG9uIHRoZSBzb2NrZXQgaGVyZSBpbnN0ZWFkIG9mIGluIGNvbm5lY3QoKSBmb3IgdGhlIGNhc2Ugb2YgYXNzaWduaW5nIHRoZSBzb2NrZXRcbiAgICBpZiAob3B0aW9ucy5rZWVwQWxpdmUgPT0gbnVsbCB8fCBvcHRpb25zLmtlZXBBbGl2ZSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlSW5pdGlhbERlbGF5ID0gb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXkgPT09IHVuZGVmaW5lZCA/IDYwZTMgOiBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBrZWVwQWxpdmVJbml0aWFsRGVsYXkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsVGltZW91dCA9IHNldHVwVGltZW91dCgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldCksIHRpbWVvdXQpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5zZXROb0RlbGF5KHRydWUpXG4gICAgICAub25jZShwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnc2VjdXJlQ29ubmVjdCcgOiAnY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwVGltZW91dCAob25Db25uZWN0VGltZW91dCwgdGltZW91dCkge1xuICBpZiAoIXRpbWVvdXQpIHtcbiAgICByZXR1cm4gKCkgPT4ge31cbiAgfVxuXG4gIGxldCBzMSA9IG51bGxcbiAgbGV0IHMyID0gbnVsbFxuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3RvcmlzZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICBzMSA9IHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICAvLyBXaW5kb3dzIG5lZWRzIGFuIGV4dHJhIHNldEltbWVkaWF0ZSBwcm9iYWJseSBkdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgaW4gdGhlIHNvY2tldCBsb2dpY1xuICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNvbm5lY3RUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9KVxuICB9LCB0aW1lb3V0KVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgY2xlYXJJbW1lZGlhdGUoczEpXG4gICAgY2xlYXJJbW1lZGlhdGUoczIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Db25uZWN0VGltZW91dCAoc29ja2V0KSB7XG4gIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBDb25uZWN0VGltZW91dEVycm9yKCkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVudW1Ub01hcCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGVudW1Ub01hcChvYmopIHtcbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG59XG5leHBvcnRzLmVudW1Ub01hcCA9IGVudW1Ub01hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNQRUNJQUxfSEVBREVSUyA9IGV4cG9ydHMuSEVBREVSX1NUQVRFID0gZXhwb3J0cy5NSU5PUiA9IGV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUyA9IGV4cG9ydHMuVE9LRU4gPSBleHBvcnRzLlNUUklDVF9UT0tFTiA9IGV4cG9ydHMuSEVYID0gZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gZXhwb3J0cy5VU0VSSU5GT19DSEFSUyA9IGV4cG9ydHMuTUFSSyA9IGV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLk5VTSA9IGV4cG9ydHMuSEVYX01BUCA9IGV4cG9ydHMuTlVNX01BUCA9IGV4cG9ydHMuQUxQSEEgPSBleHBvcnRzLkZJTklTSCA9IGV4cG9ydHMuSF9NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBleHBvcnRzLk1FVEhPRFNfSUNFID0gZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBleHBvcnRzLk1FVEhPRFMgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgPSBleHBvcnRzLkZMQUdTID0gZXhwb3J0cy5UWVBFID0gZXhwb3J0cy5FUlJPUiA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8vIEMgaGVhZGVyc1xudmFyIEVSUk9SO1xuKGZ1bmN0aW9uIChFUlJPUikge1xuICAgIEVSUk9SW0VSUk9SW1wiT0tcIl0gPSAwXSA9IFwiT0tcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVEVSTkFMXCJdID0gMV0gPSBcIklOVEVSTkFMXCI7XG4gICAgRVJST1JbRVJST1JbXCJTVFJJQ1RcIl0gPSAyXSA9IFwiU1RSSUNUXCI7XG4gICAgRVJST1JbRVJST1JbXCJMRl9FWFBFQ1RFRFwiXSA9IDNdID0gXCJMRl9FWFBFQ1RFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiXSA9IDRdID0gXCJVTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIXCI7XG4gICAgRVJST1JbRVJST1JbXCJDTE9TRURfQ09OTkVDVElPTlwiXSA9IDVdID0gXCJDTE9TRURfQ09OTkVDVElPTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9NRVRIT0RcIl0gPSA2XSA9IFwiSU5WQUxJRF9NRVRIT0RcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVVJMXCJdID0gN10gPSBcIklOVkFMSURfVVJMXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0NPTlNUQU5UXCJdID0gOF0gPSBcIklOVkFMSURfQ09OU1RBTlRcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVkVSU0lPTlwiXSA9IDldID0gXCJJTlZBTElEX1ZFUlNJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfSEVBREVSX1RPS0VOXCJdID0gMTBdID0gXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiXSA9IDExXSA9IFwiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DSFVOS19TSVpFXCJdID0gMTJdID0gXCJJTlZBTElEX0NIVU5LX1NJWkVcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfU1RBVFVTXCJdID0gMTNdID0gXCJJTlZBTElEX1NUQVRVU1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9FT0ZfU1RBVEVcIl0gPSAxNF0gPSBcIklOVkFMSURfRU9GX1NUQVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCJdID0gMTVdID0gXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0JFR0lOXCJdID0gMTZdID0gXCJDQl9NRVNTQUdFX0JFR0lOXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9IRUFERVJTX0NPTVBMRVRFXCJdID0gMTddID0gXCJDQl9IRUFERVJTX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCJdID0gMThdID0gXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9DSFVOS19IRUFERVJcIl0gPSAxOV0gPSBcIkNCX0NIVU5LX0hFQURFUlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfQ09NUExFVEVcIl0gPSAyMF0gPSBcIkNCX0NIVU5LX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURcIl0gPSAyMV0gPSBcIlBBVVNFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX1VQR1JBREVcIl0gPSAyMl0gPSBcIlBBVVNFRF9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURfSDJfVVBHUkFERVwiXSA9IDIzXSA9IFwiUEFVU0VEX0gyX1VQR1JBREVcIjtcbiAgICBFUlJPUltFUlJPUltcIlVTRVJcIl0gPSAyNF0gPSBcIlVTRVJcIjtcbn0pKEVSUk9SID0gZXhwb3J0cy5FUlJPUiB8fCAoZXhwb3J0cy5FUlJPUiA9IHt9KSk7XG52YXIgVFlQRTtcbihmdW5jdGlvbiAoVFlQRSkge1xuICAgIFRZUEVbVFlQRVtcIkJPVEhcIl0gPSAwXSA9IFwiQk9USFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFUVVFU1RcIl0gPSAxXSA9IFwiUkVRVUVTVFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFU1BPTlNFXCJdID0gMl0gPSBcIlJFU1BPTlNFXCI7XG59KShUWVBFID0gZXhwb3J0cy5UWVBFIHx8IChleHBvcnRzLlRZUEUgPSB7fSkpO1xudmFyIEZMQUdTO1xuKGZ1bmN0aW9uIChGTEFHUykge1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDJdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA0XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDSFVOS0VEXCJdID0gOF0gPSBcIkNIVU5LRURcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlVQR1JBREVcIl0gPSAxNl0gPSBcIlVQR1JBREVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTlRFTlRfTEVOR1RIXCJdID0gMzJdID0gXCJDT05URU5UX0xFTkdUSFwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiU0tJUEJPRFlcIl0gPSA2NF0gPSBcIlNLSVBCT0RZXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJUUkFJTElOR1wiXSA9IDEyOF0gPSBcIlRSQUlMSU5HXCI7XG4gICAgLy8gMSA8PCA4IGlzIHVudXNlZFxuICAgIEZMQUdTW0ZMQUdTW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSA1MTJdID0gXCJUUkFOU0ZFUl9FTkNPRElOR1wiO1xufSkoRkxBR1MgPSBleHBvcnRzLkZMQUdTIHx8IChleHBvcnRzLkZMQUdTID0ge30pKTtcbnZhciBMRU5JRU5UX0ZMQUdTO1xuKGZ1bmN0aW9uIChMRU5JRU5UX0ZMQUdTKSB7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiSEVBREVSU1wiXSA9IDFdID0gXCJIRUFERVJTXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiQ0hVTktFRF9MRU5HVEhcIl0gPSAyXSA9IFwiQ0hVTktFRF9MRU5HVEhcIjtcbiAgICBMRU5JRU5UX0ZMQUdTW0xFTklFTlRfRkxBR1NbXCJLRUVQX0FMSVZFXCJdID0gNF0gPSBcIktFRVBfQUxJVkVcIjtcbn0pKExFTklFTlRfRkxBR1MgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgfHwgKGV4cG9ydHMuTEVOSUVOVF9GTEFHUyA9IHt9KSk7XG52YXIgTUVUSE9EUztcbihmdW5jdGlvbiAoTUVUSE9EUykge1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkRFTEVURVwiXSA9IDBdID0gXCJERUxFVEVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJHRVRcIl0gPSAxXSA9IFwiR0VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiSEVBRFwiXSA9IDJdID0gXCJIRUFEXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUE9TVFwiXSA9IDNdID0gXCJQT1NUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFVUXCJdID0gNF0gPSBcIlBVVFwiO1xuICAgIC8qIHBhdGhvbG9naWNhbCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPTk5FQ1RcIl0gPSA1XSA9IFwiQ09OTkVDVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk9QVElPTlNcIl0gPSA2XSA9IFwiT1BUSU9OU1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRSQUNFXCJdID0gN10gPSBcIlRSQUNFXCI7XG4gICAgLyogV2ViREFWICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ09QWVwiXSA9IDhdID0gXCJDT1BZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTE9DS1wiXSA9IDldID0gXCJMT0NLXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtDT0xcIl0gPSAxMF0gPSBcIk1LQ09MXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTU9WRVwiXSA9IDExXSA9IFwiTU9WRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BGSU5EXCJdID0gMTJdID0gXCJQUk9QRklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BQQVRDSFwiXSA9IDEzXSA9IFwiUFJPUFBBVENIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VBUkNIXCJdID0gMTRdID0gXCJTRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxPQ0tcIl0gPSAxNV0gPSBcIlVOTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkJJTkRcIl0gPSAxNl0gPSBcIkJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUJJTkRcIl0gPSAxN10gPSBcIlJFQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlVOQklORFwiXSA9IDE4XSA9IFwiVU5CSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQUNMXCJdID0gMTldID0gXCJBQ0xcIjtcbiAgICAvKiBzdWJ2ZXJzaW9uICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVQT1JUXCJdID0gMjBdID0gXCJSRVBPUlRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0FDVElWSVRZXCJdID0gMjFdID0gXCJNS0FDVElWSVRZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ0hFQ0tPVVRcIl0gPSAyMl0gPSBcIkNIRUNLT1VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUVSR0VcIl0gPSAyM10gPSBcIk1FUkdFXCI7XG4gICAgLyogdXBucCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk0tU0VBUkNIXCJdID0gMjRdID0gXCJNLVNFQVJDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk5PVElGWVwiXSA9IDI1XSA9IFwiTk9USUZZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU1VCU0NSSUJFXCJdID0gMjZdID0gXCJTVUJTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTlNVQlNDUklCRVwiXSA9IDI3XSA9IFwiVU5TVUJTQ1JJQkVcIjtcbiAgICAvKiBSRkMtNTc4OSAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVENIXCJdID0gMjhdID0gXCJQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVUkdFXCJdID0gMjldID0gXCJQVVJHRVwiO1xuICAgIC8qIENhbERBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ0FMRU5EQVJcIl0gPSAzMF0gPSBcIk1LQ0FMRU5EQVJcIjtcbiAgICAvKiBSRkMtMjA2OCwgc2VjdGlvbiAxOS42LjEuMiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxJTktcIl0gPSAzMV0gPSBcIkxJTktcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxJTktcIl0gPSAzMl0gPSBcIlVOTElOS1wiO1xuICAgIC8qIGljZWNhc3QgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTT1VSQ0VcIl0gPSAzM10gPSBcIlNPVVJDRVwiO1xuICAgIC8qIFJGQy03NTQwLCBzZWN0aW9uIDExLjYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUklcIl0gPSAzNF0gPSBcIlBSSVwiO1xuICAgIC8qIFJGQy0yMzI2IFJUU1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERVNDUklCRVwiXSA9IDM1XSA9IFwiREVTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJBTk5PVU5DRVwiXSA9IDM2XSA9IFwiQU5OT1VOQ0VcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRVUFwiXSA9IDM3XSA9IFwiU0VUVVBcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQTEFZXCJdID0gMzhdID0gXCJQTEFZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUEFVU0VcIl0gPSAzOV0gPSBcIlBBVVNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVEVBUkRPV05cIl0gPSA0MF0gPSBcIlRFQVJET1dOXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUX1BBUkFNRVRFUlwiXSA9IDQxXSA9IFwiR0VUX1BBUkFNRVRFUlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFVF9QQVJBTUVURVJcIl0gPSA0Ml0gPSBcIlNFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRURJUkVDVFwiXSA9IDQzXSA9IFwiUkVESVJFQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUNPUkRcIl0gPSA0NF0gPSBcIlJFQ09SRFwiO1xuICAgIC8qIFJBT1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJGTFVTSFwiXSA9IDQ1XSA9IFwiRkxVU0hcIjtcbn0pKE1FVEhPRFMgPSBleHBvcnRzLk1FVEhPRFMgfHwgKGV4cG9ydHMuTUVUSE9EUyA9IHt9KSk7XG5leHBvcnRzLk1FVEhPRFNfSFRUUCA9IFtcbiAgICBNRVRIT0RTLkRFTEVURSxcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLkhFQUQsXG4gICAgTUVUSE9EUy5QT1NULFxuICAgIE1FVEhPRFMuUFVULFxuICAgIE1FVEhPRFMuQ09OTkVDVCxcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5UUkFDRSxcbiAgICBNRVRIT0RTLkNPUFksXG4gICAgTUVUSE9EUy5MT0NLLFxuICAgIE1FVEhPRFMuTUtDT0wsXG4gICAgTUVUSE9EUy5NT1ZFLFxuICAgIE1FVEhPRFMuUFJPUEZJTkQsXG4gICAgTUVUSE9EUy5QUk9QUEFUQ0gsXG4gICAgTUVUSE9EUy5TRUFSQ0gsXG4gICAgTUVUSE9EUy5VTkxPQ0ssXG4gICAgTUVUSE9EUy5CSU5ELFxuICAgIE1FVEhPRFMuUkVCSU5ELFxuICAgIE1FVEhPRFMuVU5CSU5ELFxuICAgIE1FVEhPRFMuQUNMLFxuICAgIE1FVEhPRFMuUkVQT1JULFxuICAgIE1FVEhPRFMuTUtBQ1RJVklUWSxcbiAgICBNRVRIT0RTLkNIRUNLT1VULFxuICAgIE1FVEhPRFMuTUVSR0UsXG4gICAgTUVUSE9EU1snTS1TRUFSQ0gnXSxcbiAgICBNRVRIT0RTLk5PVElGWSxcbiAgICBNRVRIT0RTLlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlVOU1VCU0NSSUJFLFxuICAgIE1FVEhPRFMuUEFUQ0gsXG4gICAgTUVUSE9EUy5QVVJHRSxcbiAgICBNRVRIT0RTLk1LQ0FMRU5EQVIsXG4gICAgTUVUSE9EUy5MSU5LLFxuICAgIE1FVEhPRFMuVU5MSU5LLFxuICAgIE1FVEhPRFMuUFJJLFxuICAgIC8vIFRPRE8oaW5kdXRueSk6IHNob3VsZCB3ZSBhbGxvdyBpdCB3aXRoIEhUVFA/XG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX0lDRSA9IFtcbiAgICBNRVRIT0RTLlNPVVJDRSxcbl07XG5leHBvcnRzLk1FVEhPRFNfUlRTUCA9IFtcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5ERVNDUklCRSxcbiAgICBNRVRIT0RTLkFOTk9VTkNFLFxuICAgIE1FVEhPRFMuU0VUVVAsXG4gICAgTUVUSE9EUy5QTEFZLFxuICAgIE1FVEhPRFMuUEFVU0UsXG4gICAgTUVUSE9EUy5URUFSRE9XTixcbiAgICBNRVRIT0RTLkdFVF9QQVJBTUVURVIsXG4gICAgTUVUSE9EUy5TRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuUkVESVJFQ1QsXG4gICAgTUVUSE9EUy5SRUNPUkQsXG4gICAgTUVUSE9EUy5GTFVTSCxcbiAgICAvLyBGb3IgQWlyUGxheVxuICAgIE1FVEhPRFMuR0VULFxuICAgIE1FVEhPRFMuUE9TVCxcbl07XG5leHBvcnRzLk1FVEhPRF9NQVAgPSB1dGlsc18xLmVudW1Ub01hcChNRVRIT0RTKTtcbmV4cG9ydHMuSF9NRVRIT0RfTUFQID0ge307XG5PYmplY3Qua2V5cyhleHBvcnRzLk1FVEhPRF9NQVApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICgvXkgvLnRlc3Qoa2V5KSkge1xuICAgICAgICBleHBvcnRzLkhfTUVUSE9EX01BUFtrZXldID0gZXhwb3J0cy5NRVRIT0RfTUFQW2tleV07XG4gICAgfVxufSk7XG52YXIgRklOSVNIO1xuKGZ1bmN0aW9uIChGSU5JU0gpIHtcbiAgICBGSU5JU0hbRklOSVNIW1wiU0FGRVwiXSA9IDBdID0gXCJTQUZFXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVfV0lUSF9DQlwiXSA9IDFdID0gXCJTQUZFX1dJVEhfQ0JcIjtcbiAgICBGSU5JU0hbRklOSVNIW1wiVU5TQUZFXCJdID0gMl0gPSBcIlVOU0FGRVwiO1xufSkoRklOSVNIID0gZXhwb3J0cy5GSU5JU0ggfHwgKGV4cG9ydHMuRklOSVNIID0ge30pKTtcbmV4cG9ydHMuQUxQSEEgPSBbXTtcbmZvciAobGV0IGkgPSAnQScuY2hhckNvZGVBdCgwKTsgaSA8PSAnWicuY2hhckNvZGVBdCgwKTsgaSsrKSB7XG4gICAgLy8gVXBwZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcbiAgICAvLyBMb3dlciBjYXNlXG4gICAgZXhwb3J0cy5BTFBIQS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSArIDB4MjApKTtcbn1cbmV4cG9ydHMuTlVNX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG59O1xuZXhwb3J0cy5IRVhfTUFQID0ge1xuICAgIDA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsXG4gICAgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOSxcbiAgICBBOiAwWEEsIEI6IDBYQiwgQzogMFhDLCBEOiAwWEQsIEU6IDBYRSwgRjogMFhGLFxuICAgIGE6IDB4YSwgYjogMHhiLCBjOiAweGMsIGQ6IDB4ZCwgZTogMHhlLCBmOiAweGYsXG59O1xuZXhwb3J0cy5OVU0gPSBbXG4gICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxuXTtcbmV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLkFMUEhBLmNvbmNhdChleHBvcnRzLk5VTSk7XG5leHBvcnRzLk1BUksgPSBbJy0nLCAnXycsICcuJywgJyEnLCAnficsICcqJywgJ1xcJycsICcoJywgJyknXTtcbmV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLkFMUEhBTlVNXG4gICAgLmNvbmNhdChleHBvcnRzLk1BUkspXG4gICAgLmNvbmNhdChbJyUnLCAnOycsICc6JywgJyYnLCAnPScsICcrJywgJyQnLCAnLCddKTtcbi8vIFRPRE8oaW5kdXRueSk6IHVzZSBSRkNcbmV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gW1xuICAgICchJywgJ1wiJywgJyQnLCAnJScsICcmJywgJ1xcJycsXG4gICAgJygnLCAnKScsICcqJywgJysnLCAnLCcsICctJywgJy4nLCAnLycsXG4gICAgJzonLCAnOycsICc8JywgJz0nLCAnPicsXG4gICAgJ0AnLCAnWycsICdcXFxcJywgJ10nLCAnXicsICdfJyxcbiAgICAnYCcsXG4gICAgJ3snLCAnfCcsICd9JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlVSTF9DSEFSID0gZXhwb3J0cy5TVFJJQ1RfVVJMX0NIQVJcbiAgICAuY29uY2F0KFsnXFx0JywgJ1xcZiddKTtcbi8vIEFsbCBjaGFyYWN0ZXJzIHdpdGggMHg4MCBiaXQgc2V0IHRvIDFcbmZvciAobGV0IGkgPSAweDgwOyBpIDw9IDB4ZmY7IGkrKykge1xuICAgIGV4cG9ydHMuVVJMX0NIQVIucHVzaChpKTtcbn1cbmV4cG9ydHMuSEVYID0gZXhwb3J0cy5OVU0uY29uY2F0KFsnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnXSk7XG4vKiBUb2tlbnMgYXMgZGVmaW5lZCBieSByZmMgMjYxNi4gQWxzbyBsb3dlcmNhc2VzIHRoZW0uXG4gKiAgICAgICAgdG9rZW4gICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuICogICAgIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqL1xuZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBbXG4gICAgJyEnLCAnIycsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcqJywgJysnLCAnLScsICcuJyxcbiAgICAnXicsICdfJywgJ2AnLFxuICAgICd8JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4uY29uY2F0KFsnICddKTtcbi8qXG4gKiBWZXJpZnkgdGhhdCBhIGNoYXIgaXMgYSB2YWxpZCB2aXNpYmxlIChwcmludGFibGUpIFVTLUFTQ0lJXG4gKiBjaGFyYWN0ZXIgb3IgJXg4MC1GRlxuICovXG5leHBvcnRzLkhFQURFUl9DSEFSUyA9IFsnXFx0J107XG5mb3IgKGxldCBpID0gMzI7IGkgPD0gMjU1OyBpKyspIHtcbiAgICBpZiAoaSAhPT0gMTI3KSB7XG4gICAgICAgIGV4cG9ydHMuSEVBREVSX0NIQVJTLnB1c2goaSk7XG4gICAgfVxufVxuLy8gJywnID0gXFx4NDRcbmV4cG9ydHMuQ09OTkVDVElPTl9UT0tFTl9DSEFSUyA9IGV4cG9ydHMuSEVBREVSX0NIQVJTLmZpbHRlcigoYykgPT4gYyAhPT0gNDQpO1xuZXhwb3J0cy5NQUpPUiA9IGV4cG9ydHMuTlVNX01BUDtcbmV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SO1xudmFyIEhFQURFUl9TVEFURTtcbihmdW5jdGlvbiAoSEVBREVSX1NUQVRFKSB7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkdFTkVSQUxcIl0gPSAwXSA9IFwiR0VORVJBTFwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05cIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OVEVOVF9MRU5HVEhcIl0gPSAyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSAzXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVVBHUkFERVwiXSA9IDRdID0gXCJVUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDVdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDZdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fVVBHUkFERVwiXSA9IDddID0gXCJDT05ORUNUSU9OX1VQR1JBREVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiXSA9IDhdID0gXCJUUkFOU0ZFUl9FTkNPRElOR19DSFVOS0VEXCI7XG59KShIRUFERVJfU1RBVEUgPSBleHBvcnRzLkhFQURFUl9TVEFURSB8fCAoZXhwb3J0cy5IRUFERVJfU1RBVEUgPSB7fSkpO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSB7XG4gICAgJ2Nvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAnY29udGVudC1sZW5ndGgnOiBIRUFERVJfU1RBVEUuQ09OVEVOVF9MRU5HVEgsXG4gICAgJ3Byb3h5LWNvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAndHJhbnNmZXItZW5jb2RpbmcnOiBIRUFERVJfU1RBVEUuVFJBTlNGRVJfRU5DT0RJTkcsXG4gICAgJ3VwZ3JhZGUnOiBIRUFERVJfU1RBVEUuVVBHUkFERSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGlseSBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgZm9ybWF0IGZvciBzdWNoIGJvZHkgYW5kIGxlYXZlIGl0IHRvXG4gICAgICAgIHNlcnZlcnMgYW5kIGJyb3dzZXJzIGltcGxlbWVudG9ycywgd2UgaWdub3JlIHRoZSBib2R5IGFzIHRoZXJlIGlzIG5vIHNwZWNpZmllZCB3YXkgdG8gZXZlbnR1YWxseSBwYXJzZSBpdC5cbiAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSB0cmFpbGVycyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgaW4gY2FzZSBvZiByZWRpcmVjdGlvbnNcbiAgICAgICAgYW5kIG5laXRoZXIgYXJlIHVzZWZ1bCBpZiBwcmVzZW50LlxuXG4gICAgICAgIFNlZSBjb21tZW50IG9uIG9uRGF0YSBtZXRob2QgYWJvdmUgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zLlxuICAgICAgKi9cblxuICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYXRpb24gKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHtcbiAgaWYgKHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzLmluZGV4T2Yoc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUhlYWRlciAoaGVhZGVyLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGlmIChoZWFkZXIubGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikgPT09ICdob3N0J1xuICB9XG4gIGlmIChyZW1vdmVDb250ZW50ICYmIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikuc3RhcnRzV2l0aCgnY29udGVudC0nKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHVua25vd25PcmlnaW4gJiYgKGhlYWRlci5sZW5ndGggPT09IDEzIHx8IGhlYWRlci5sZW5ndGggPT09IDYgfHwgaGVhZGVyLmxlbmd0aCA9PT0gMTkpKSB7XG4gICAgY29uc3QgbmFtZSA9IHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcilcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2F1dGhvcml6YXRpb24nIHx8IG5hbWUgPT09ICdjb29raWUnIHx8IG5hbWUgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJ1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuZnVuY3Rpb24gY2xlYW5SZXF1ZXN0SGVhZGVycyAoaGVhZGVycywgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBjb25zdCByZXQgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGtleSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChoZWFkZXJzID09IG51bGwsICdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RIYW5kbGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgKHsgbWF4UmVkaXJlY3Rpb25zOiBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBJbnRlcmNlcHQgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgb3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gU3RvcCBzdWIgZGlzcGF0Y2hlciBmcm9tIGFsc28gcmVkaXJlY3RpbmcuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3NMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzFrQUlBQkJHR3BDQURjREFDQUFRZ0EzQXdBZ0FFRTRha0lBTndNQUlBQkJNR3BDQURjREFDQUFRU2hxUWdBM0F3QWdBRUVnYWtJQU53TUFJQUJCRUdwQ0FEY0RBQ0FBUVFocVFnQTNBd0FnQUVIZEFUWUNIRUVBQzNzQkFYOENRQ0FBS0FJTUlnTU5BQUpBSUFBb0FnUkZEUUFnQUNBQk5nSUVDd0pBSUFBZ0FTQUNFTVNBZ0lBQUlnTU5BQ0FBS0FJTUR3c2dBQ0FETmdJY1FRQWhBeUFBS0FJRUlnRkZEUUFnQUNBQklBSWdBQ2dDQ0JHQmdJQ0FBQUFpQVVVTkFDQUFJQUkyQWhRZ0FDQUJOZ0lNSUFFaEF3c2dBd3ZrOHdFRERuOERmZ1IvSTRDQWdJQUFRUkJySWdNa2dJQ0FnQUFnQVNFRUlBRWhCU0FCSVFZZ0FTRUhJQUVoQ0NBQklRa2dBU0VLSUFFaEN5QUJJUXdnQVNFTklBRWhEaUFCSVE4Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NIQ0lRUVg5cUR0MEIyZ0VCMlFFQ0F3UUZCZ2NJQ1FvTERBME8yQUVQRU5jQkVSTFdBUk1VRlJZWEdCa2FHK0FCM3dFY0hSN1ZBUjhnSVNJakpDWFVBU1luS0NrcUt5elRBZElCTFM3UkFkQUJMekF4TWpNME5UWTNPRGs2T3p3OVBqOUFRVUpEUkVWRzJ3RkhTRWxLendIT0FVdk5BVXpNQVUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNEFCZ1FHQ0FZTUJoQUdGQVlZQmh3R0lBWWtCaWdHTEFZd0JqUUdPQVk4QmtBR1JBWklCa3dHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdITEFjb0J1QUhKQWJrQnlBRzZBYnNCdkFHOUFiNEJ2d0hBQWNFQndnSERBY1FCeFFIR0FRRGNBUXRCQUNFUURNWUJDMEVPSVJBTXhRRUxRUTBoRUF6RUFRdEJEeUVRRE1NQkMwRVFJUkFNd2dFTFFSTWhFQXpCQVF0QkZDRVFETUFCQzBFVklSQU12d0VMUVJZaEVBeStBUXRCRnlFUURMMEJDMEVZSVJBTXZBRUxRUmtoRUF5N0FRdEJHaUVRRExvQkMwRWJJUkFNdVFFTFFSd2hFQXk0QVF0QkNDRVFETGNCQzBFZElSQU10Z0VMUVNBaEVBeTFBUXRCSHlFUURMUUJDMEVISVJBTXN3RUxRU0VoRUF5eUFRdEJJaUVRRExFQkMwRWVJUkFNc0FFTFFTTWhFQXl2QVF0QkVpRVFESzRCQzBFUklSQU1yUUVMUVNRaEVBeXNBUXRCSlNFUURLc0JDMEVtSVJBTXFnRUxRU2NoRUF5cEFRdEJ3d0VoRUF5b0FRdEJLU0VRREtjQkMwRXJJUkFNcGdFTFFTd2hFQXlsQVF0QkxTRVFES1FCQzBFdUlSQU1vd0VMUVM4aEVBeWlBUXRCeEFFaEVBeWhBUXRCTUNFUURLQUJDMEUwSVJBTW53RUxRUXdoRUF5ZUFRdEJNU0VRREowQkMwRXlJUkFNbkFFTFFUTWhFQXliQVF0Qk9TRVFESm9CQzBFMUlSQU1tUUVMUWNVQklSQU1tQUVMUVFzaEVBeVhBUXRCT2lFUURKWUJDMEUySVJBTWxRRUxRUW9oRUF5VUFRdEJOeUVRREpNQkMwRTRJUkFNa2dFTFFUd2hFQXlSQVF0Qk95RVFESkFCQzBFOUlSQU1qd0VMUVFraEVBeU9BUXRCS0NFUURJMEJDMEUrSVJBTWpBRUxRVDhoRUF5TEFRdEJ3QUFoRUF5S0FRdEJ3UUFoRUF5SkFRdEJ3Z0FoRUF5SUFRdEJ3d0FoRUF5SEFRdEJ4QUFoRUF5R0FRdEJ4UUFoRUF5RkFRdEJ4Z0FoRUF5RUFRdEJLaUVRRElNQkMwSEhBQ0VRRElJQkMwSElBQ0VRRElFQkMwSEpBQ0VRRElBQkMwSEtBQ0VRREg4TFFjc0FJUkFNZmd0QnpRQWhFQXg5QzBITUFDRVFESHdMUWM0QUlSQU1ld3RCendBaEVBeDZDMEhRQUNFUURIa0xRZEVBSVJBTWVBdEIwZ0FoRUF4M0MwSFRBQ0VRREhZTFFkUUFJUkFNZFF0QjFnQWhFQXgwQzBIVkFDRVFESE1MUVFZaEVBeHlDMEhYQUNFUURIRUxRUVVoRUF4d0MwSFlBQ0VRREc4TFFRUWhFQXh1QzBIWkFDRVFERzBMUWRvQUlSQU1iQXRCMndBaEVBeHJDMEhjQUNFUURHb0xRUU1oRUF4cEMwSGRBQ0VRREdnTFFkNEFJUkFNWnd0QjN3QWhFQXhtQzBIaEFDRVFER1VMUWVBQUlSQU1aQXRCNGdBaEVBeGpDMEhqQUNFUURHSUxRUUloRUF4aEMwSGtBQ0VRREdBTFFlVUFJUkFNWHd0QjVnQWhFQXhlQzBIbkFDRVFERjBMUWVnQUlSQU1YQXRCNlFBaEVBeGJDMEhxQUNFUURGb0xRZXNBSVJBTVdRdEI3QUFoRUF4WUMwSHRBQ0VRREZjTFFlNEFJUkFNVmd0Qjd3QWhFQXhWQzBId0FDRVFERlFMUWZFQUlSQU1Vd3RCOGdBaEVBeFNDMEh6QUNFUURGRUxRZlFBSVJBTVVBdEI5UUFoRUF4UEMwSDJBQ0VRREU0TFFmY0FJUkFNVFF0QitBQWhFQXhNQzBINUFDRVFERXNMUWZvQUlSQU1TZ3RCK3dBaEVBeEpDMEg4QUNFUURFZ0xRZjBBSVJBTVJ3dEIvZ0FoRUF4R0MwSC9BQ0VRREVVTFFZQUJJUkFNUkF0QmdRRWhFQXhEQzBHQ0FTRVFERUlMUVlNQklSQU1RUXRCaEFFaEVBeEFDMEdGQVNFUUREOExRWVlCSVJBTVBndEJod0VoRUF3OUMwR0lBU0VRRER3TFFZa0JJUkFNT3d0QmlnRWhFQXc2QzBHTEFTRVFERGtMUVl3QklSQU1PQXRCalFFaEVBdzNDMEdPQVNFUUREWUxRWThCSVJBTU5RdEJrQUVoRUF3MEMwR1JBU0VRRERNTFFaSUJJUkFNTWd0Qmt3RWhFQXd4QzBHVUFTRVFEREFMUVpVQklSQU1Md3RCbGdFaEVBd3VDMEdYQVNFUURDMExRWmdCSVJBTUxBdEJtUUVoRUF3ckMwR2FBU0VRRENvTFFac0JJUkFNS1F0Qm5BRWhFQXdvQzBHZEFTRVFEQ2NMUVo0QklSQU1KZ3RCbndFaEVBd2xDMEdnQVNFUURDUUxRYUVCSVJBTUl3dEJvZ0VoRUF3aUMwR2pBU0VRRENFTFFhUUJJUkFNSUF0QnBRRWhFQXdmQzBHbUFTRVFEQjRMUWFjQklSQU1IUXRCcUFFaEVBd2NDMEdwQVNFUURCc0xRYW9CSVJBTUdndEJxd0VoRUF3WkMwR3NBU0VRREJnTFFhMEJJUkFNRnd0QnJnRWhFQXdXQzBFQklSQU1GUXRCcndFaEVBd1VDMEd3QVNFUURCTUxRYkVCSVJBTUVndEJzd0VoRUF3UkMwR3lBU0VRREJBTFFiUUJJUkFNRHd0QnRRRWhFQXdPQzBHMkFTRVFEQTBMUWJjQklSQU1EQXRCdUFFaEVBd0xDMEc1QVNFUURBb0xRYm9CSVJBTUNRdEJ1d0VoRUF3SUMwSEdBU0VRREFjTFFid0JJUkFNQmd0QnZRRWhFQXdGQzBHK0FTRVFEQVFMUWI4QklSQU1Bd3RCd0FFaEVBd0NDMEhDQVNFUURBRUxRY0VCSVJBTEEwQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRRHNjQkFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2VIeUFoSXlVb1AwQkJSRVZHUjBoSlNrdE1UVTlRVVZKVDNnTlhXVnRjWFdCaVpXWm5hR2xxYTJ4dGIzQnhjbk4wZFhaM2VIbDZlM3g5Zm9BQmdnR0ZBWVlCaHdHSkFZc0JqQUdOQVk0Qmp3R1FBWkVCbEFHVkFaWUJsd0dZQVprQm1nR2JBWndCblFHZUFaOEJvQUdoQWFJQm93R2tBYVVCcGdHbkFhZ0JxUUdxQWFzQnJBR3RBYTRCcndHd0FiRUJzZ0d6QWJRQnRRRzJBYmNCdUFHNUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQnh3SElBY2tCeWdITEFjd0J6UUhPQWM4QjBBSFJBZElCMHdIVUFkVUIxZ0hYQWRnQjJRSGFBZHNCM0FIZEFkNEI0QUhoQWVJQjR3SGtBZVVCNWdIbkFlZ0I2UUhxQWVzQjdBSHRBZTRCN3dId0FmRUI4Z0h6QVprQ3BBS3dBdjRDL2dJTElBRWlCQ0FDUnczekFVSGRBU0VRRFA4REN5QUJJaEFnQWtjTjNRRkJ3d0VoRUF6K0F3c2dBU0lCSUFKSERaQUJRZmNBSVJBTS9RTUxJQUVpQVNBQ1J3MkdBVUh2QUNFUURQd0RDeUFCSWdFZ0FrY05mMEhxQUNFUURQc0RDeUFCSWdFZ0FrY05lMEhvQUNFUURQb0RDeUFCSWdFZ0FrY05lRUhtQUNFUURQa0RDeUFCSWdFZ0FrY05Ha0VZSVJBTStBTUxJQUVpQVNBQ1J3MFVRUkloRUF6M0F3c2dBU0lCSUFKSERWbEJ4UUFoRUF6MkF3c2dBU0lCSUFKSERVcEJQeUVRRFBVREN5QUJJZ0VnQWtjTlNFRThJUkFNOUFNTElBRWlBU0FDUncxQlFURWhFQXp6QXdzZ0FDMEFMa0VCUmczckF3eUhBZ3NnQUNBQklnRWdBaERBZ0lDQUFFRUJSdzNtQVNBQVFnQTNBeUFNNXdFTElBQWdBU0lCSUFJUXRJQ0FnQUFpRUEzbkFTQUJJUUVNOVFJTEFrQWdBU0lCSUFKSERRQkJCaUVRRFBBREN5QUFJQUZCQVdvaUFTQUNFTHVBZ0lBQUloQU42QUVnQVNFQkRERUxJQUJDQURjRElFRVNJUkFNMVFNTElBRWlFQ0FDUncwclFSMGhFQXp0QXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFGQkVDRVFETlFEQzBFSElSQU03QU1MSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU41UUZCQ0NFUURPc0RDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRVVJUkFNMGdNTFFRa2hFQXpxQXdzZ0FTRUJJQUFwQXlCUURlUUJJQUVoQVF6eUFnc0NRQ0FCSWdFZ0FrY05BRUVMSVJBTTZRTUxJQUFnQVVFQmFpSUJJQUlRdG9DQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNtQVNBQklRRU1EUXNnQUNBQklnRWdBaEM2Z0lDQUFDSVFEZWNCSUFFaEFRendBZ3NDUUNBQklnRWdBa2NOQUVFUElSQU01UU1MSUFFdEFBQWlFRUU3UmcwSUlCQkJEVWNONkFFZ0FVRUJhaUVCRE84Q0N5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZBRWdBU0VCRFBJQ0N3TkFBa0FnQVMwQUFFSHd0WUNBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa2NONndFZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0FVRUJhaUlCRUxtQWdJQUFJaEFONmdFZ0FTRUJEUFFDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJFaUVRRE9JREN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZRRWdBU0VCREFvTElBRWlBU0FDUncwR1FSc2hFQXpnQXdzQ1FDQUJJZ0VnQWtjTkFFRVdJUkFNNEFNTElBQkJpb0NBZ0FBMkFnZ2dBQ0FCTmdJRUlBQWdBU0FDRUxpQWdJQUFJaEFONmdFZ0FTRUJRU0FoRUF6R0F3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUh3dDRDQUFHb3RBQUFpRUVFQ1JnMEFBa0FnRUVGL2FnNEU1UUhzQVFEckFld0JDeUFCUVFGcUlRRkJDQ0VRRE1nREN5QUJRUUZxSWdFZ0FrY05BQXRCRlNFUUROOERDMEVWSVJBTTNnTUxBMEFDUUNBQkxRQUFRZkM1Z0lBQWFpMEFBQ0lRUVFKR0RRQWdFRUYvYWc0RTNnSHNBZUFCNndIc0FRc2dBVUVCYWlJQklBSkhEUUFMUVJnaEVBemRBd3NDUUNBQklnRWdBa1lOQUNBQVFZdUFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJCeUVRRE1RREMwRVpJUkFNM0FNTElBRkJBV29oQVF3Q0N3SkFJQUVpRkNBQ1J3MEFRUm9oRUF6YkF3c2dGQ0VCQWtBZ0ZDMEFBRUZ6YWc0VTNRTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnSUE3Z0lMUVFBaEVDQUFRUUEyQWh3Z0FFR3ZpNENBQURZQ0VDQUFRUUkyQWd3Z0FDQVVRUUZxTmdJVUROb0RDd0pBSUFFdEFBQWlFRUU3UmcwQUlCQkJEVWNONkFFZ0FVRUJhaUVCRE9VQ0N5QUJRUUZxSVFFTFFTSWhFQXkvQXdzQ1FDQUJJaEFnQWtjTkFFRWNJUkFNMkFNTFFnQWhFU0FRSVFFZ0VDMEFBRUZRYWc0MzV3SG1BUUVDQXdRRkJnY0lBQUFBQUFBQUFBa0tDd3dORGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHhBUkVoTVVBQXRCSGlFUURMMERDMElDSVJFTTVRRUxRZ01oRVF6a0FRdENCQ0VSRE9NQkMwSUZJUkVNNGdFTFFnWWhFUXpoQVF0Q0J5RVJET0FCQzBJSUlSRU0zd0VMUWdraEVRemVBUXRDQ2lFUkROMEJDMElMSVJFTTNBRUxRZ3doRVF6YkFRdENEU0VSRE5vQkMwSU9JUkVNMlFFTFFnOGhFUXpZQVF0Q0NpRVJETmNCQzBJTElSRU0xZ0VMUWd3aEVRelZBUXRDRFNFUkROUUJDMElPSVJFTTB3RUxRZzhoRVF6U0FRdENBQ0VSQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFMUUFBUVZCcURqZmxBZVFCQUFFQ0F3UUZCZ2ZtQWVZQjVnSG1BZVlCNWdIbUFRZ0pDZ3NNRGVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0VPRHhBUkVoUG1BUXRDQWlFUkRPUUJDMElESVJFTTR3RUxRZ1FoRVF6aUFRdENCU0VSRE9FQkMwSUdJUkVNNEFFTFFnY2hFUXpmQVF0Q0NDRVJETjRCQzBJSklSRU0zUUVMUWdvaEVRemNBUXRDQ3lFUkROc0JDMElNSVJFTTJnRUxRZzBoRVF6WkFRdENEaUVSRE5nQkMwSVBJUkVNMXdFTFFnb2hFUXpXQVF0Q0N5RVJETlVCQzBJTUlSRU0xQUVMUWcwaEVRelRBUXRDRGlFUkROSUJDMElQSVJFTTBRRUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjBnRkJIeUVRRE1BREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFa0lSQU1wd01MUVNBaEVBeS9Bd3NnQUNBQkloQWdBaEMrZ0lDQUFFRi9hZzRGdGdFQXhRSUIwUUhTQVF0QkVTRVFES1FEQ3lBQVFRRTZBQzhnRUNFQkRMc0RDeUFCSWdFZ0FrY04wZ0ZCSkNFUURMc0RDeUFCSWcwZ0FrY05Ia0hHQUNFUURMb0RDeUFBSUFFaUFTQUNFTEtBZ0lBQUloQU4xQUVnQVNFQkRMVUJDeUFCSWhBZ0FrY05Ka0hRQUNFUURMZ0RDd0pBSUFFaUFTQUNSdzBBUVNnaEVBeTRBd3NnQUVFQU5nSUVJQUJCaklDQWdBQTJBZ2dnQUNBQklBRVFzWUNBZ0FBaUVBM1RBU0FCSVFFTTJBRUxBa0FnQVNJUUlBSkhEUUJCS1NFUURMY0RDeUFRTFFBQUlnRkJJRVlORkNBQlFRbEhEZE1CSUJCQkFXb2hBUXdWQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3WEMwRXFJUkFNdFFNTEFrQWdBU0lRSUFKSERRQkJLeUVRRExVREN3SkFJQkF0QUFBaUFVRUpSZzBBSUFGQklFY04xUUVMSUFBdEFDeEJDRVlOMHdFZ0VDRUJESkVEQ3dKQUlBRWlBU0FDUncwQVFTd2hFQXkwQXdzZ0FTMEFBRUVLUnczVkFTQUJRUUZxSVFFTXlRSUxJQUVpRGlBQ1J3M1ZBVUV2SVJBTXNnTUxBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFJQkJCZG1vT0JBRGNBZHdCQU5vQkN5QUJJUUVNNEFFTElBRkJBV29pQVNBQ1J3MEFDMEV4SVJBTXNRTUxRVEloRUNBQkloUWdBa1lOc0FNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRURhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZDN2dJQUFhaTBBQUVjTkFRSkFJQUZCQTBjTkFFRUdJUUVNbGdNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMRURDeUFBUVFBMkFnQWdGQ0VCRE5rQkMwRXpJUkFnQVNJVUlBSkdEYThESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkNHb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUgwdTRDQUFHb3RBQUJIRFFFQ1FDQUJRUWhIRFFCQkJTRUJESlVEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5d0F3c2dBRUVBTmdJQUlCUWhBUXpZQVF0Qk5DRVFJQUVpRkNBQ1JnMnVBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFWcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzBCQWtBZ0FVRUZSdzBBUVFjaEFReVVBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNcndNTElBQkJBRFlDQUNBVUlRRU0xd0VMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMNkFnQUJxTFFBQUloQkJBVVlOQUNBUVFRSkdEUW9nQVNFQkROMEJDeUFCUVFGcUlnRWdBa2NOQUF0Qk1DRVFESzREQzBFd0lSQU1yUU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQmRtb09CTmtCMmdIYUFka0IyZ0VMSUFGQkFXb2lBU0FDUncwQUMwRTRJUkFNclFNTFFUZ2hFQXlzQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQkNVY05Bd3NnQVVFQmFpSUJJQUpIRFFBTFFUd2hFQXlyQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FDQVFRWFpxRGdUYUFRRUIyZ0VBQ3lBUVFTeEdEZHNCQ3lBQklRRU1CQXNnQVVFQmFpSUJJQUpIRFFBTFFUOGhFQXlxQXdzZ0FTRUJETnNCQzBIQUFDRVFJQUVpRkNBQ1JnMm9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFacUlSY0NRQU5BSUJRdEFBQkJJSElnQVVHQXdJQ0FBR290QUFCSERRRWdBVUVHUmcyT0F5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeXBBd3NnQUVFQU5nSUFJQlFoQVF0Qk5pRVFESTREQ3dKQUlBRWlEeUFDUncwQVFjRUFJUkFNcHdNTElBQkJqSUNBZ0FBMkFnZ2dBQ0FQTmdJRUlBOGhBU0FBTFFBc1FYOXFEZ1ROQWRVQjF3SFpBWWNEQ3lBQlFRRnFJUUVNekFFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnY2lBUUlCQkJ2MzlxUWY4QmNVRWFTUnRCL3dGeEloQkJDVVlOQUNBUVFTQkdEUUFDUUFKQUFrQUNRQ0FRUVoxL2FnNFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVJBTWtRTUxJQUZCQVdvaEFVRXlJUkFNa0FNTElBRkJBV29oQVVFeklSQU1qd01MSUFFaEFRelFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUVWhFQXlsQXd0Qk5TRVFES1FEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFZQzhnSUFBYWkwQUFFRUJSZzBBSUFFaEFRelRBUXNnQVVFQmFpSUJJQUpIRFFBTFFUMGhFQXlrQXd0QlBTRVFES01EQ3lBQUlBRWlBU0FDRUxDQWdJQUFJaEFOMWdFZ0FTRUJEQUVMSUJCQkFXb2hBUXRCUENFUURJY0RDd0pBSUFFaUFTQUNSdzBBUWNJQUlSQU1vQU1MQWtBRFFBSkFJQUV0QUFCQmQyb09HQUFDL2dMK0FvUUQvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NENBUDRDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ3Z0FoRUF5Z0F3c2dBVUVCYWlFQklBQXRBQzFCQVhGRkRiMEJJQUVoQVF0QkxDRVFESVVEQ3lBQklnRWdBa2NOMHdGQnhBQWhFQXlkQXdzRFFBSkFJQUV0QUFCQmtNQ0FnQUJxTFFBQVFRRkdEUUFnQVNFQkRMY0NDeUFCUVFGcUlnRWdBa2NOQUF0QnhRQWhFQXljQXdzZ0RTMEFBQ0lRUVNCR0RiTUJJQkJCT2tjTmdRTWdBQ2dDQkNFQklBQkJBRFlDQkNBQUlBRWdEUkN2Z0lDQUFDSUJEZEFCSUExQkFXb2hBUXl6QWd0Qnh3QWhFQ0FCSWcwZ0FrWU5tZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFRmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1F3b0NBQUdvdEFBQkhEWUFESUFGQkJVWU45QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbWdNTFFjZ0FJUkFnQVNJTklBSkdEWmtESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkNXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJsc0tBZ0FCcUxRQUFSdzMvQWdKQUlBRkJDVWNOQUVFQ0lRRU05UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREprREN3SkFJQUVpRFNBQ1J3MEFRY2tBSVJBTW1RTUxBa0FDUUNBTkxRQUFJZ0ZCSUhJZ0FTQUJRYjkvYWtIL0FYRkJHa2tiUWY4QmNVR1NmMm9PQndDQUE0QURnQU9BQTRBREFZQURDeUFOUVFGcUlRRkJQaUVRRElBREN5QU5RUUZxSVFGQlB5RVFEUDhDQzBIS0FDRVFJQUVpRFNBQ1JnMlhBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFGcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhRENnSUFBYWkwQUFFY04vUUlnQVVFQlJnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlYQXd0Qnl3QWhFQ0FCSWcwZ0FrWU5sZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFT2FpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR2l3b0NBQUdvdEFBQkhEZndDSUFGQkRrWU44QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbGdNTFFjd0FJUkFnQVNJTklBSkdEWlVESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkQyb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJ3TUtBZ0FCcUxRQUFSdzM3QWdKQUlBRkJEMGNOQUVFRElRRU04UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpVREMwSE5BQ0VRSUFFaURTQUNSZzJVQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZERDZ0lBQWFpMEFBRWNOK2dJQ1FDQUJRUVZIRFFCQkJDRUJEUEFDQ3lBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5VUF3c0NRQ0FCSWcwZ0FrY05BRUhPQUNFUURKUURDd0pBQWtBQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVoxL2FnNFRBUDBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUFnSDlBdjBDL1FJQ0EvMENDeUFOUVFGcUlRRkJ3UUFoRUF6OUFnc2dEVUVCYWlFQlFjSUFJUkFNL0FJTElBMUJBV29oQVVIREFDRVFEUHNDQ3lBTlFRRnFJUUZCeEFBaEVBejZBZ3NDUUNBQklnRWdBa1lOQUNBQVFZMkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJ4UUFoRUF6NkFndEJ6d0FoRUF5U0F3c2dFQ0VCQWtBQ1FDQVFMUUFBUVhacURnUUJxQUtvQWdDb0Fnc2dFRUVCYWlFQkMwRW5JUkFNK0FJTEFrQWdBU0lCSUFKSERRQkIwUUFoRUF5UkF3c0NRQ0FCTFFBQVFTQkdEUUFnQVNFQkRJMEJDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU54d0VnQVNFQkRJd0JDeUFCSWhjZ0FrY055QUZCMGdBaEVBeVBBd3RCMHdBaEVDQUJJaFFnQWtZTmpnTWdBaUFVYXlBQUtBSUFJZ0ZxSVJZZ0ZDQUJhMEVCYWlFWEEwQWdGQzBBQUNBQlFkYkNnSUFBYWkwQUFFY056QUVnQVVFQlJnM0hBU0FCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlPQXdzQ1FDQUJJZ0VnQWtjTkFFSFZBQ0VRREk0REN5QUJMUUFBUVFwSERjd0JJQUZCQVdvaEFRekhBUXNDUUNBQklnRWdBa2NOQUVIV0FDRVFESTBEQ3dKQUFrQWdBUzBBQUVGMmFnNEVBTTBCelFFQnpRRUxJQUZCQVdvaEFRekhBUXNnQVVFQmFpRUJRY29BSVJBTTh3SUxJQUFnQVNJQklBSVFyb0NBZ0FBaUVBM0xBU0FCSVFGQnpRQWhFQXp5QWdzZ0FDMEFLVUVpUmcyRkF3eW1BZ3NDUUNBQklnRWdBa2NOQUVIYkFDRVFESW9EQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQVMwQUFFRlFhZzRLMUFIVEFRQUJBZ01FQlFZSTFRRUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTXpBRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZnekxBUXNDUUNBQklnRWdBa2NOQUVIZEFDRVFESWtEQ3lBQkxRQUFRUzVIRGN3QklBRkJBV29oQVF5bUFnc2dBU0lCSUFKSERjd0JRZDhBSVJBTWh3TUxBa0FnQVNJQklBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFkQUFJUkFNN2dJTFFlQUFJUkFNaGdNTFFlRUFJUkFnQVNJQklBSkdEWVVESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhpd29DQUFHb3RBQUJIRGMwQklCUkJBMFlOekFFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhRTUxRZUlBSVJBZ0FTSUJJQUpHRFlRRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBbW9oRndOQUlBRXRBQUFnRkVIbXdvQ0FBR290QUFCSERjd0JJQlJCQWtZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oQU1MUWVNQUlSQWdBU0lCSUFKR0RZTURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSHB3b0NBQUdvdEFBQkhEY3NCSUJSQkEwWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNZ3dNTEFrQWdBU0lCSUFKSERRQkI1UUFoRUF5REF3c2dBQ0FCUVFGcUlnRWdBaENvZ0lDQUFDSVFEYzBCSUFFaEFVSFdBQ0VRRE9rQ0N3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFBa0FDUUNBUVFiaC9hZzRMQUFIUEFjOEJ6d0hQQWM4Qnp3SFBBYzhCQXM4QkN5QUJRUUZxSVFGQjBnQWhFQXp0QWdzZ0FVRUJhaUVCUWRNQUlSQU03QUlMSUFGQkFXb2hBVUhVQUNFUURPc0NDeUFCUVFGcUlnRWdBa2NOQUF0QjVBQWhFQXlDQXd0QjVBQWhFQXlCQXdzRFFBSkFJQUV0QUFCQjhNS0FnQUJxTFFBQUloQkJBVVlOQUNBUVFYNXFEZ1BQQWRBQjBRSFNBUXNnQVVFQmFpSUJJQUpIRFFBTFFlWUFJUkFNZ0FNTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZWNBSVJBTS93SUxBMEFDUUNBQkxRQUFRZkRFZ0lBQWFpMEFBQ0lRUVFGR0RRQUNRQ0FRUVg1cURnVFNBZE1CMUFFQTFRRUxJQUVoQVVIWEFDRVFET2NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI2QUFoRUF6K0Fnc0NRQ0FCSWdFZ0FrY05BRUhwQUNFUURQNENDd0pBSUFFdEFBQWlFRUYyYWc0YXVnSFZBZFVCdkFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIS0FkVUIxUUVBMHdFTElBRkJBV29oQVF0QkJpRVFET01DQ3dOQUFrQWdBUzBBQUVId3hvQ0FBR290QUFCQkFVWU5BQ0FCSVFFTW5nSUxJQUZCQVdvaUFTQUNSdzBBQzBIcUFDRVFEUHNDQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3REMwSHJBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1J3MEFRZXdBSVJBTStnSUxJQUZCQVdvaEFRd0JDd0pBSUFFaUFTQUNSdzBBUWUwQUlSQU0rUUlMSUFGQkFXb2hBUXRCQkNFUURONENDd0pBSUFFaUZDQUNSdzBBUWU0QUlSQU05d0lMSUJRaEFRSkFBa0FDUUNBVUxRQUFRZkRJZ0lBQWFpMEFBRUYvYWc0SDFBSFZBZFlCQUp3Q0FRTFhBUXNnRkVFQmFpRUJEQW9MSUJSQkFXb2hBUXpOQVF0QkFDRVFJQUJCQURZQ0hDQUFRWnVTZ0lBQU5nSVFJQUJCQnpZQ0RDQUFJQlJCQVdvMkFoUU05Z0lMQWtBRFFBSkFJQUV0QUFCQjhNaUFnQUJxTFFBQUloQkJCRVlOQUFKQUFrQWdFRUYvYWc0SDBnSFRBZFFCMlFFQUJBSFpBUXNnQVNFQlFkb0FJUkFNNEFJTElBRkJBV29oQVVIY0FDRVFETjhDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI3d0FoRUF6MkFnc2dBVUVCYWlFQkRNc0JDd0pBSUFFaUZDQUNSdzBBUWZBQUlSQU05UUlMSUJRdEFBQkJMMGNOMUFFZ0ZFRUJhaUVCREFZTEFrQWdBU0lVSUFKSERRQkI4UUFoRUF6MEFnc0NRQ0FVTFFBQUlnRkJMMGNOQUNBVVFRRnFJUUZCM1FBaEVBemJBZ3NnQVVGMmFpSUVRUlpMRGRNQlFRRWdCSFJCaVlDQUFuRkZEZE1CRE1vQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVSGVBQ0VRRE5vQ0MwSHlBQ0VRRFBJQ0N3SkFJQUVpRkNBQ1J3MEFRZlFBSVJBTThnSUxJQlFoQVFKQUlCUXRBQUJCOE15QWdBQnFMUUFBUVg5cURnUEpBcFFDQU5RQkMwSGhBQ0VRRE5nQ0N3SkFJQUVpRkNBQ1JnMEFBMEFDUUNBVUxRQUFRZkRLZ0lBQWFpMEFBQ0lCUVFOR0RRQUNRQ0FCUVg5cURnTExBZ0RWQVFzZ0ZDRUJRZDhBSVJBTTJnSUxJQlJCQVdvaUZDQUNSdzBBQzBIekFDRVFEUEVDQzBIekFDRVFEUEFDQ3dKQUlBRWlBU0FDUmcwQUlBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhnQUNFUUROY0NDMEgxQUNFUURPOENDd0pBSUFFaUFTQUNSdzBBUWZZQUlSQU03d0lMSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFRdEJBeUVRRE5RQ0N3TkFJQUV0QUFCQklFY053d0lnQVVFQmFpSUJJQUpIRFFBTFFmY0FJUkFNN0FJTEFrQWdBU0lCSUFKSERRQkIrQUFoRUF6c0Fnc2dBUzBBQUVFZ1J3M09BU0FCUVFGcUlRRU03d0VMSUFBZ0FTSUJJQUlRcklDQWdBQWlFQTNPQVNBQklRRU1qZ0lMQWtBZ0FTSUVJQUpIRFFCQitnQWhFQXpxQWdzZ0JDMEFBRUhNQUVjTjBRRWdCRUVCYWlFQlFSTWhFQXpQQVFzQ1FDQUJJZ1FnQWtjTkFFSDdBQ0VRRE9rQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBRFFDQUVMUUFBSUFGQjhNNkFnQUJxTFFBQVJ3M1FBU0FCUVFWR0RjNEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZnNBSVJBTTZBSUxBa0FnQVNJRUlBSkhEUUJCL0FBaEVBem9BZ3NDUUFKQUlBUXRBQUJCdlg5cURnd0EwUUhSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUVCMFFFTElBUkJBV29oQVVIbUFDRVFETThDQ3lBRVFRRnFJUUZCNXdBaEVBek9BZ3NDUUNBQklnUWdBa2NOQUVIOUFDRVFET2NDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERjOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSDlBQ0VRRE9jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJBaEVBek1BUXNDUUNBQklnUWdBa2NOQUVIK0FDRVFET1lDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIMnpvQ0FBR290QUFCSERjNEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSCtBQ0VRRE9ZQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJZaEVBekxBUXNDUUNBQklnUWdBa2NOQUVIL0FDRVFET1VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVIOHpvQ0FBR290QUFCSERjMEJJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSC9BQ0VRRE9VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFVaEVBektBUXNDUUNBQklnUWdBa2NOQUVHQUFTRVFET1FDQ3lBRUxRQUFRZGtBUnczTEFTQUVRUUZxSVFGQkNDRVFETWtCQ3dKQUlBRWlCQ0FDUncwQVFZRUJJUkFNNHdJTEFrQUNRQ0FFTFFBQVFiSi9hZzREQU13QkFjd0JDeUFFUVFGcUlRRkI2d0FoRUF6S0Fnc2dCRUVCYWlFQlFld0FJUkFNeVFJTEFrQWdBU0lFSUFKSERRQkJnZ0VoRUF6aUFnc0NRQUpBSUFRdEFBQkJ1SDlxRGdnQXl3SExBY3NCeXdITEFjc0JBY3NCQ3lBRVFRRnFJUUZCNmdBaEVBekpBZ3NnQkVFQmFpRUJRZTBBSVJBTXlBSUxBa0FnQVNJRUlBSkhEUUJCZ3dFaEVBemhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSQWdCQ0FCYTBFQ2FpRVVBa0FEUUNBRUxRQUFJQUZCZ00rQWdBQnFMUUFBUnczSkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQkEyQWdCQmd3RWhFQXpoQWd0QkFDRVFJQUJCQURZQ0FDQVVRUUZxSVFFTXhnRUxBa0FnQVNJRUlBSkhEUUJCaEFFaEVBemdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCZzgrQWdBQnFMUUFBUnczSUFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmhBRWhFQXpnQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVqSVJBTXhRRUxBa0FnQVNJRUlBSkhEUUJCaFFFaEVBemZBZ3NDUUFKQUlBUXRBQUJCdEg5cURnZ0F5QUhJQWNnQnlBSElBY2dCQWNnQkN5QUVRUUZxSVFGQjd3QWhFQXpHQWdzZ0JFRUJhaUVCUWZBQUlSQU14UUlMQWtBZ0FTSUVJQUpIRFFCQmhnRWhFQXplQWdzZ0JDMEFBRUhGQUVjTnhRRWdCRUVCYWlFQkRJTUNDd0pBSUFFaUJDQUNSdzBBUVljQklSQU0zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUVlqUGdJQUFhaTBBQUVjTnhRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZY0JJUkFNM1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCTFNFUURNSUJDd0pBSUFFaUJDQUNSdzBBUVlnQklSQU0zQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTnhBRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZZ0JJUkFNM0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCS1NFUURNRUJDd0pBSUFFaUFTQUNSdzBBUVlrQklSQU0yd0lMUVFFaEVDQUJMUUFBUWQ4QVJ3M0FBU0FCUVFGcUlRRU1nUUlMQWtBZ0FTSUVJQUpIRFFCQmlnRWhFQXphQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQTBBZ0JDMEFBQ0FCUVl6UGdJQUFhaTBBQUVjTndRRWdBVUVCUmcydkFpQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0tBU0VRRE5rQ0N3SkFJQUVpQkNBQ1J3MEFRWXNCSVJBTTJRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWTdQZ0lBQWFpMEFBRWNOd1FFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlzQklSQU0yUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBaUVRREw0QkN3SkFJQUVpQkNBQ1J3MEFRWXdCSVJBTTJBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOd0FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVl3QklSQU0yQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIeUVRREwwQkN3SkFJQUVpQkNBQ1J3MEFRWTBCSVJBTTF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOdndFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVkwQklSQU0xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDU0VRREx3QkN3SkFJQUVpQkNBQ1J3MEFRWTRCSVJBTTFnSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFMOEJ2d0cvQWI4QnZ3RUJ2d0VMSUFSQkFXb2hBVUg0QUNFUURMMENDeUFFUVFGcUlRRkIrUUFoRUF5OEFnc0NRQ0FCSWdRZ0FrY05BRUdQQVNFUUROVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdSejRDQUFHb3RBQUJIRGIwQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUEFTRVFETlVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmdoRUF5NkFRc0NRQ0FCSWdRZ0FrY05BRUdRQVNFUUROUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUdYejRDQUFHb3RBQUJIRGJ3QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUUFTRVFETlFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmNoRUF5NUFRc0NRQ0FCSWdRZ0FrY05BRUdSQVNFUUROTUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUdhejRDQUFHb3RBQUJIRGJzQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUkFTRVFETk1DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlVoRUF5NEFRc0NRQ0FCSWdRZ0FrY05BRUdTQVNFUUROSUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdoejRDQUFHb3RBQUJIRGJvQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHU0FTRVFETklDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjRoRUF5M0FRc0NRQ0FCSWdRZ0FrY05BRUdUQVNFUURORUNDeUFFTFFBQVFjd0FSdzI0QVNBRVFRRnFJUUZCQ2lFUURMWUJDd0pBSUFRZ0FrY05BRUdVQVNFUUROQUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0R3QzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFRRzVBUXNnQkVFQmFpRUJRZjRBSVJBTXR3SUxJQVJCQVdvaEFVSC9BQ0VRRExZQ0N3SkFJQVFnQWtjTkFFR1ZBU0VRRE04Q0N3SkFBa0FnQkMwQUFFRy9mMm9PQXdDNEFRRzRBUXNnQkVFQmFpRUJRZjBBSVJBTXRnSUxJQVJCQVdvaEJFR0FBU0VRRExVQ0N3SkFJQVFnQWtjTkFFR1dBU0VRRE00Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVR256NENBQUdvdEFBQkhEYllCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdXQVNFUURNNENDeUFBUVFBMkFnQWdFRUVCYWlFQlFRc2hFQXl6QVFzQ1FDQUVJQUpIRFFCQmx3RWhFQXpOQWdzQ1FBSkFBa0FDUUNBRUxRQUFRVk5xRGlNQXVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFRRzRBYmdCdUFHNEFiZ0JBcmdCdUFHNEFRTzRBUXNnQkVFQmFpRUJRZnNBSVJBTXRnSUxJQVJCQVdvaEFVSDhBQ0VRRExVQ0N5QUVRUUZxSVFSQmdRRWhFQXkwQWdzZ0JFRUJhaUVFUVlJQklSQU1zd0lMQWtBZ0JDQUNSdzBBUVpnQklSQU16QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWFuUGdJQUFhaTBBQUVjTnRBRWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaZ0JJUkFNekFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR1NFUURMRUJDd0pBSUFRZ0FrY05BRUdaQVNFUURNc0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUd1ejRDQUFHb3RBQUJIRGJNQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHWkFTRVFETXNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVloRUF5d0FRc0NRQ0FFSUFKSERRQkJtZ0VoRUF6S0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0TStBZ0FCcUxRQUFSdzJ5QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbWdFaEVBektBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWNJUkFNcndFTEFrQWdCQ0FDUncwQVFac0JJUkFNeVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiYlBnSUFBYWkwQUFFY05zUUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWnNCSVJBTXlRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkp5RVFESzRCQ3dKQUlBUWdBa2NOQUVHY0FTRVFETWdDQ3dKQUFrQWdCQzBBQUVHc2Yyb09BZ0FCc1FFTElBUkJBV29oQkVHR0FTRVFESzhDQ3lBRVFRRnFJUVJCaHdFaEVBeXVBZ3NDUUNBRUlBSkhEUUJCblFFaEVBekhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdU0rQWdBQnFMUUFBUncydkFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5RRWhFQXpIQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVtSVJBTXJBRUxBa0FnQkNBQ1J3MEFRWjRCSVJBTXhnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYnJQZ0lBQWFpMEFBRWNOcmdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo0QklSQU14Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBeUVRREtzQkN3SkFJQVFnQWtjTkFFR2ZBU0VRRE1VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYTBCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdmQVNFUURNVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRd2hFQXlxQVFzQ1FDQUVJQUpIRFFCQm9BRWhFQXpFQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQnZNK0FnQUJxTFFBQVJ3MnNBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJvQUVoRUF6RUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFTklSQU1xUUVMQWtBZ0JDQUNSdzBBUWFFQklSQU13d0lMQWtBQ1FDQUVMUUFBUWJwL2FnNExBS3dCckFHc0Fhd0JyQUdzQWF3QnJBR3NBUUdzQVFzZ0JFRUJhaUVFUVlzQklSQU1xZ0lMSUFSQkFXb2hCRUdNQVNFUURLa0NDd0pBSUFRZ0FrY05BRUdpQVNFUURNSUNDeUFFTFFBQVFkQUFSdzJwQVNBRVFRRnFJUVFNNlFFTEFrQWdCQ0FDUncwQVFhTUJJUkFNd1FJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQWFvQnFnR3FBYW9CcWdFQXFnRUxJQVJCQVdvaEJFR09BU0VRREtnQ0N5QUVRUUZxSVFGQklpRVFES1lCQ3dKQUlBUWdBa2NOQUVHa0FTRVFETUFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIQXo0Q0FBR290QUFCSERhZ0JJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2tBU0VRRE1BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVIwaEVBeWxBUXNDUUNBRUlBSkhEUUJCcFFFaEVBeS9BZ3NDUUFKQUlBUXRBQUJCcm45cURnTUFxQUVCcUFFTElBUkJBV29oQkVHUUFTRVFES1lDQ3lBRVFRRnFJUUZCQkNFUURLUUJDd0pBSUFRZ0FrY05BRUdtQVNFUURMNENDd0pBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFDcUFhb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFRR3FBYW9CQXFvQnFnRURxZ0dxQVFTcUFRc2dCRUVCYWlFRVFZZ0JJUkFNcUFJTElBUkJBV29oQkVHSkFTRVFES2NDQ3lBRVFRRnFJUVJCaWdFaEVBeW1BZ3NnQkVFQmFpRUVRWThCSVJBTXBRSUxJQVJCQVdvaEJFR1JBU0VRREtRQ0N3SkFJQVFnQWtjTkFFR25BU0VRREwwQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYVVCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUduQVNFUURMMENDeUFBUVFBMkFnQWdFRUVCYWlFQlFSRWhFQXlpQVFzQ1FDQUVJQUpIRFFCQnFBRWhFQXk4QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQndzK0FnQUJxTFFBQVJ3MmtBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxQUVoRUF5OEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFc0lSQU1vUUVMQWtBZ0JDQUNSdzBBUWFrQklSQU11d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWNYUGdJQUFhaTBBQUVjTm93RWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFha0JJUkFNdXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCS3lFUURLQUJDd0pBSUFRZ0FrY05BRUdxQVNFUURMb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhLejRDQUFHb3RBQUJIRGFJQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHcUFTRVFETG9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlFoRUF5ZkFRc0NRQ0FFSUFKSERRQkJxd0VoRUF5NUFnc0NRQUpBQWtBQ1FDQUVMUUFBUWI1L2FnNFBBQUVDcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FRT2tBUXNnQkVFQmFpRUVRWk1CSVJBTW9nSUxJQVJCQVdvaEJFR1VBU0VRREtFQ0N5QUVRUUZxSVFSQmxRRWhFQXlnQWdzZ0JFRUJhaUVFUVpZQklSQU1ud0lMQWtBZ0JDQUNSdzBBUWF3QklSQU11QUlMSUFRdEFBQkJ4UUJIRFo4QklBUkJBV29oQkF6Z0FRc0NRQ0FFSUFKSERRQkJyUUVoRUF5M0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ6YytBZ0FCcUxRQUFSdzJmQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCclFFaEVBeTNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU9JUkFNbkFFTEFrQWdCQ0FDUncwQVFhNEJJUkFNdGdJTElBUXRBQUJCMEFCSERaMEJJQVJCQVdvaEFVRWxJUkFNbXdFTEFrQWdCQ0FDUncwQVFhOEJJUkFNdFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY05uUUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYThCSVJBTXRRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktpRVFESm9CQ3dKQUlBUWdBa2NOQUVHd0FTRVFETFFDQ3dKQUFrQWdCQzBBQUVHcmYyb09Dd0NkQVowQm5RR2RBWjBCblFHZEFaMEJuUUVCblFFTElBUkJBV29oQkVHYUFTRVFESnNDQ3lBRVFRRnFJUVJCbXdFaEVBeWFBZ3NDUUNBRUlBSkhEUUJCc1FFaEVBeXpBZ3NDUUFKQUlBUXRBQUJCdjM5cURoUUFuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JBWndCQ3lBRVFRRnFJUVJCbVFFaEVBeWFBZ3NnQkVFQmFpRUVRWndCSVJBTW1RSUxBa0FnQkNBQ1J3MEFRYklCSVJBTXNnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZG5QZ0lBQWFpMEFBRWNObWdFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJJQklSQU1zZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJU0VRREpjQkN3SkFJQVFnQWtjTkFFR3pBU0VRRExFQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVSGR6NENBQUdvdEFBQkhEWmtCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd6QVNFUURMRUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSb2hFQXlXQVFzQ1FDQUVJQUpIRFFCQnRBRWhFQXl3QWdzQ1FBSkFBa0FnQkMwQUFFRzdmMm9PRVFDYUFab0JtZ0dhQVpvQm1nR2FBWm9CbWdFQm1nR2FBWm9CbWdHYUFRS2FBUXNnQkVFQmFpRUVRWjBCSVJBTW1BSUxJQVJCQVdvaEJFR2VBU0VRREpjQ0N5QUVRUUZxSVFSQm53RWhFQXlXQWdzQ1FDQUVJQUpIRFFCQnRRRWhFQXl2QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUZhaUVRQWtBRFFDQUVMUUFBSUFGQjVNK0FnQUJxTFFBQVJ3MlhBU0FCUVFWR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0UUVoRUF5dkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFb0lSQU1sQUVMQWtBZ0JDQUNSdzBBUWJZQklSQU1yZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWVyUGdJQUFhaTBBQUVjTmxnRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiWUJJUkFNcmdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQnlFUURKTUJDd0pBSUFRZ0FrY05BRUczQVNFUURLMENDd0pBQWtBZ0JDMEFBRUc3ZjJvT0RnQ1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdFQmxnRUxJQVJCQVdvaEJFR2hBU0VRREpRQ0N5QUVRUUZxSVFSQm9nRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQnVBRWhFQXlzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjdjK0FnQUJxTFFBQVJ3MlVBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1QUVoRUF5c0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFU0lSQU1rUUVMQWtBZ0JDQUNSdzBBUWJrQklSQU1xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTmt3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFia0JJUkFNcXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSUNFUURKQUJDd0pBSUFRZ0FrY05BRUc2QVNFUURLb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUh5ejRDQUFHb3RBQUJIRFpJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNkFTRVFES29DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUThoRUF5UEFRc0NRQ0FFSUFKSERRQkJ1d0VoRUF5cEFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQWtnR1NBWklCa2dHU0FRR1NBUXNnQkVFQmFpRUVRYVVCSVJBTWtBSUxJQVJCQVdvaEJFR21BU0VRREk4Q0N3SkFJQVFnQWtjTkFFRzhBU0VRREtnQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUWRxSVJBQ1FBTkFJQVF0QUFBZ0FVSDB6NENBQUdvdEFBQkhEWkFCSUFGQkIwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc4QVNFUURLZ0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSc2hFQXlOQVFzQ1FDQUVJQUpIRFFCQnZRRWhFQXluQWdzQ1FBSkFBa0FnQkMwQUFFRytmMm9PRWdDUkFaRUJrUUdSQVpFQmtRR1JBWkVCa1FFQmtRR1JBWkVCa1FHUkFaRUJBcEVCQ3lBRVFRRnFJUVJCcEFFaEVBeVBBZ3NnQkVFQmFpRUVRYWNCSVJBTWpnSUxJQVJCQVdvaEJFR29BU0VRREkwQ0N3SkFJQVFnQWtjTkFFRytBU0VRREtZQ0N5QUVMUUFBUWM0QVJ3Mk5BU0FFUVFGcUlRUU16d0VMQWtBZ0JDQUNSdzBBUWI4QklSQU1wUUlMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUFCQWdPY0FRUUZCcHdCbkFHY0FRY0lDUW9MbkFFTURRNFBuQUVMSUFSQkFXb2hBVUhvQUNFUURKb0NDeUFFUVFGcUlRRkI2UUFoRUF5WkFnc2dCRUVCYWlFQlFlNEFJUkFNbUFJTElBUkJBV29oQVVIeUFDRVFESmNDQ3lBRVFRRnFJUUZCOHdBaEVBeVdBZ3NnQkVFQmFpRUJRZllBSVJBTWxRSUxJQVJCQVdvaEFVSDNBQ0VRREpRQ0N5QUVRUUZxSVFGQitnQWhFQXlUQWdzZ0JFRUJhaUVFUVlNQklSQU1rZ0lMSUFSQkFXb2hCRUdFQVNFUURKRUNDeUFFUVFGcUlRUkJoUUVoRUF5UUFnc2dCRUVCYWlFRVFaSUJJUkFNandJTElBUkJBV29oQkVHWUFTRVFESTRDQ3lBRVFRRnFJUVJCb0FFaEVBeU5BZ3NnQkVFQmFpRUVRYU1CSVJBTWpBSUxJQVJCQVdvaEJFR3FBU0VRRElzQ0N3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFR3JBU0VRRElzQ0MwSEFBU0VRREtNQ0N5QUFJQVVnQWhDcWdJQ0FBQ0lCRFlzQklBVWhBUXhjQ3dKQUlBWWdBa1lOQUNBR1FRRnFJUVVNalFFTFFjSUJJUkFNb1FJTEEwQUNRQ0FRTFFBQVFYWnFEZ1NNQVFBQWp3RUFDeUFRUVFGcUloQWdBa2NOQUF0Qnd3RWhFQXlnQWdzQ1FDQUhJQUpHRFFBZ0FFR1JnSUNBQURZQ0NDQUFJQWMyQWdRZ0J5RUJRUUVoRUF5SEFndEJ4QUVoRUF5ZkFnc0NRQ0FISUFKSERRQkJ4UUVoRUF5ZkFnc0NRQUpBSUFjdEFBQkJkbW9PQkFIT0FjNEJBTTRCQ3lBSFFRRnFJUVlNalFFTElBZEJBV29oQlF5SkFRc0NRQ0FISUFKSERRQkJ4Z0VoRUF5ZUFnc0NRQUpBSUFjdEFBQkJkbW9PRndHUEFZOEJBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBUUNQQVFzZ0IwRUJhaUVIQzBHd0FTRVFESVFDQ3dKQUlBZ2dBa2NOQUVISUFTRVFESjBDQ3lBSUxRQUFRU0JIRFkwQklBQkJBRHNCTWlBSVFRRnFJUUZCc3dFaEVBeURBZ3NnQVNFWEFrQURRQ0FYSWdjZ0FrWU5BU0FITFFBQVFWQnFRZjhCY1NJUVFRcFBEY3dCQWtBZ0FDOEJNaUlVUVprelN3MEFJQUFnRkVFS2JDSVVPd0V5SUJCQi8vOERjeUFVUWY3L0EzRkpEUUFnQjBFQmFpRVhJQUFnRkNBUWFpSVFPd0V5SUJCQi8vOERjVUhvQjBrTkFRc0xRUUFoRUNBQVFRQTJBaHdnQUVIQmlZQ0FBRFlDRUNBQVFRMDJBZ3dnQUNBSFFRRnFOZ0lVREp3Q0MwSEhBU0VRREpzQ0N5QUFJQWdnQWhDdWdJQ0FBQ0lRUlEzS0FTQVFRUlZIRFl3QklBQkJ5QUUyQWh3Z0FDQUlOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeWFBZ3NDUUNBSklBSkhEUUJCekFFaEVBeWFBZ3RCQUNFVVFRRWhGMEVCSVJaQkFDRVFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQWt0QUFCQlVHb09DcFlCbFFFQUFRSURCQVVHQ0pjQkMwRUNJUkFNQmd0QkF5RVFEQVVMUVFRaEVBd0VDMEVGSVJBTUF3dEJCaUVRREFJTFFRY2hFQXdCQzBFSUlSQUxRUUFoRjBFQUlSWkJBQ0VVREk0QkMwRUpJUkJCQVNFVVFRQWhGMEVBSVJZTWpRRUxBa0FnQ2lBQ1J3MEFRYzRCSVJBTW1RSUxJQW90QUFCQkxrY05qZ0VnQ2tFQmFpRUpETW9CQ3lBTElBSkhEWTRCUWRBQklSQU1sd0lMQWtBZ0N5QUNSZzBBSUFCQmpvQ0FnQUEyQWdnZ0FDQUxOZ0lFUWJjQklSQU0vZ0VMUWRFQklSQU1sZ0lMQWtBZ0JDQUNSdzBBUWRJQklSQU1sZ0lMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkJHb2hDd05BSUFRdEFBQWdFRUg4ejRDQUFHb3RBQUJIRFk0QklCQkJCRVlONlFFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjBnRWhFQXlWQWdzZ0FDQU1JQUlRcklDQWdBQWlBUTJOQVNBTUlRRU11QUVMQWtBZ0JDQUNSdzBBUWRRQklSQU1sQUlMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkFXb2hEQU5BSUFRdEFBQWdFRUdCMElDQUFHb3RBQUJIRFk4QklCQkJBVVlOamdFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjFBRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQjFnRWhFQXlUQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUNhaUVMQTBBZ0JDMEFBQ0FRUVlQUWdJQUFhaTBBQUVjTmpnRWdFRUVDUmcyUUFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFdBU0VRREpJQ0N3SkFJQVFnQWtjTkFFSFhBU0VRREpJQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRUFDUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFZOEJDeUFFUVFGcUlRUkJ1d0VoRUF6NUFRc2dCRUVCYWlFRVFid0JJUkFNK0FFTEFrQWdCQ0FDUncwQVFkZ0JJUkFNa1FJTElBUXRBQUJCeUFCSERZd0JJQVJCQVdvaEJBekVBUXNDUUNBRUlBSkdEUUFnQUVHUWdJQ0FBRFlDQ0NBQUlBUTJBZ1JCdmdFaEVBejNBUXRCMlFFaEVBeVBBZ3NDUUNBRUlBSkhEUUJCMmdFaEVBeVBBZ3NnQkMwQUFFSElBRVlOd3dFZ0FFRUJPZ0FvRExrQkN5QUFRUUk2QUM4Z0FDQUVJQUlRcG9DQWdBQWlFQTJOQVVIQ0FTRVFEUFFCQ3lBQUxRQW9RWDlxRGdLM0Fia0J1QUVMQTBBQ1FDQUVMUUFBUVhacURnUUFqZ0dPQVFDT0FRc2dCRUVCYWlJRUlBSkhEUUFMUWQwQklSQU1pd0lMSUFCQkFEb0FMeUFBTFFBdFFRUnhSUTJFQWdzZ0FFRUFPZ0F2SUFCQkFUb0FOQ0FCSVFFTWpBRUxJQkJCRlVZTjJnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1pQUlMQWtBZ0FDQVFJQUlRdElDQWdBQWlCQTBBSUJBaEFReUJBZ3NDUUNBRVFSVkhEUUFnQUVFRE5nSWNJQUFnRURZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNaUFJTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHbmpvQ0FBRFlDRUNBQVFSSTJBZ3hCQUNFUURJY0NDeUFRUVJWR0RkWUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSGFqWUNBQURZQ0VDQUFRUlEyQWd4QkFDRVFESVlDQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmpRRWdBRUVITmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURJVUNDeUFBSUFBdkFUQkJnQUZ5T3dFd0lBRWhBUXRCS2lFUURPb0JDeUFRUVJWR0RkRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0RqSUNBQURZQ0VDQUFRUk0yQWd4QkFDRVFESUlDQ3lBUVFSVkdEYzhCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRElFQ0N5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlOQVFzZ0FFRU1OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURJQUNDeUFRUVJWR0Rjd0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUDhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU1BUXNnQUVFTk5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFA0QkN5QVFRUlZHRGNrQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5TEFRc2dBRUVPTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUHdCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pXQWdBQTJBaEFnQUVFQ05nSU1RUUFoRUF6N0FRc2dFRUVWUmczRkFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhveUFnQUEyQWhBZ0FFRWpOZ0lNUVFBaEVBejZBUXNnQUVFUU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFEUGtCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenhBUXNnQUVFUk5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBnQkN5QVFRUlZHRGNFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQY0JDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5SUFRc2dBRUVUTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFlCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenRBUXNnQUVFVU5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBVQkN5QVFRUlZHRGIwQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5R0FRc2dBRUVXTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUE1CQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF0NENBZ0FBaUJBMEFJQUZCQVdvaEFRenBBUXNnQUVFWE5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBJQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenhBUXRDQVNFUkN5QVFRUUZxSVFFQ1FDQUFLUU1nSWhKQy8vLy8vLy8vLy84UFZnMEFJQUFnRWtJRWhpQVJoRGNESUNBQklRRU1oQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd0aVlDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE84QkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenVBUXNnQUNnQ0JDRVhJQUJCQURZQ0JDQVFJQkduYWlJV0lRRWdBQ0FYSUJBZ0ZpQVVHeUlRRUxXQWdJQUFJaFJGRFhNZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRE8wQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnFweUFnQUEyQWhBZ0FFRVBOZ0lNUVFBaEVBenNBUXNnQUNBUUlBSVF0SUNBZ0FBaUFRMEJJQkFoQVF0QkRpRVFETkVCQ3dKQUlBRkJGVWNOQUNBQVFRSTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cUFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU02UUVMSUFGQkFXb2hFQUpBSUFBdkFUQWlBVUdBQVhGRkRRQUNRQ0FBSUJBZ0FoQzdnSUNBQUNJQkRRQWdFQ0VCREhBTElBRkJGVWNOdWdFZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxBa0FnQVVHZ0JIRkJvQVJIRFFBZ0FDMEFMVUVDY1EwQUlBQkJBRFlDSENBQUlCQTJBaFFnQUVHV2s0Q0FBRFlDRUNBQVFRUTJBZ3hCQUNFUURPa0JDeUFBSUJBZ0FoQzlnSUNBQUJvZ0VDRUJBa0FDUUFKQUFrQUNRQ0FBSUJBZ0FoQ3pnSUNBQUE0V0FnRUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBd1FMSUFCQkFUb0FMZ3NnQUNBQUx3RXdRY0FBY2pzQk1DQVFJUUVMUVNZaEVBelJBUXNnQUVFak5nSWNJQUFnRURZQ0ZDQUFRYVdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVIVmk0Q0FBRFlDRUNBQVFSRTJBZ3hCQUNFUURPZ0JDeUFBTFFBdFFRRnhSUTBCUWNNQklSQU16Z0VMQWtBZ0RTQUNSZzBBQTBBQ1FDQU5MUUFBUVNCR0RRQWdEU0VCRE1RQkN5QU5RUUZxSWcwZ0FrY05BQXRCSlNFUURPY0JDMEVsSVJBTTVnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQTBRcjRDQWdBQWlCRVVOclFFZ0FFRW1OZ0ljSUFBZ0JEWUNEQ0FBSUExQkFXbzJBaFJCQUNFUURPVUJDeUFRUVJWR0Rhc0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlqWUNBQURZQ0VDQUFRUjAyQWd4QkFDRVFET1FCQ3lBQVFTYzJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNNHdFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBTFFBc1FYNXFEZ2NHQlFVREFRSUFCUXNnQUNBQUx3RXdRUWh5T3dFd0RBTUxRUUloRkF3QkMwRUVJUlFMSUFCQkFUb0FMQ0FBSUFBdkFUQWdGSEk3QVRBTElCQWhBUXRCS3lFUURNb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxNUtBZ0FBMkFoQWdBRUVMTmdJTVFRQWhFQXppQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTTRRRUxJQUJCQURvQUxDQVFJUUVNdlFFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcElSQU14UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUh3bElDQUFEWUNFQ0FBUVFNMkFneEJBQ0VRRE4wQkN3SkFJQTR0QUFCQkRVY05BQ0FBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNUJBV29oQVF4MUN5QUFRU3cyQWh3Z0FDQUJOZ0lNSUFBZ0RrRUJhallDRkVFQUlSQU0zUUVMSUFBdEFDMUJBWEZGRFFGQnhBRWhFQXpEQVFzQ1FDQU9JQUpIRFFCQkxTRVFETndCQ3dKQUFrQURRQUpBSUE0dEFBQkJkbW9PQkFJQUFBTUFDeUFPUVFGcUlnNGdBa2NOQUF0QkxTRVFETjBCQ3lBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTRoQVF4MEN5QUFRU3cyQWh3Z0FDQU9OZ0lVSUFBZ0FUWUNERUVBSVJBTTNBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhNTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemJBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRGhDeGdJQ0FBQ0lFRGFBQklBNGhBUXpPQVFzZ0VFRXNSdzBCSUFGQkFXb2hFRUVCSVFFQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ1FBQ3lBUUlRRU1CQXRCQWlFQkRBRUxRUVFoQVFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FCY2pzQk1DQVFJUUVNQVFzZ0FDQUFMd0V3UVFoeU93RXdJQkFoQVF0Qk9TRVFETDhCQ3lBQVFRQTZBQ3dnQVNFQkMwRTBJUkFNdlFFTElBQWdBQzhCTUVFZ2Nqc0JNQ0FCSVFFTUFnc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUxHQWdJQUFJZ1FOQUNBQklRRU14d0VMSUFCQk56WUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXpVQVFzZ0FFRUlPZ0FzSUFFaEFRdEJNQ0VRRExrQkN3SkFJQUF0QUNoQkFVWU5BQ0FCSVFFTUJBc2dBQzBBTFVFSWNVVU5rd0VnQVNFQkRBTUxJQUF0QURCQklIRU5sQUZCeFFFaEVBeTNBUXNDUUNBUElBSkdEUUFDUUFOQUFrQWdEeTBBQUVGUWFpSUJRZjhCY1VFS1NRMEFJQThoQVVFMUlSQU11Z0VMSUFBcEF5QWlFVUtacytiTW1iUG16QmxXRFFFZ0FDQVJRZ3ArSWhFM0F5QWdFU0FCclVML0FZTWlFa0ovaFZZTkFTQUFJQkVnRW53M0F5QWdEMEVCYWlJUElBSkhEUUFMUVRraEVBelJBUXNnQUNnQ0JDRUNJQUJCQURZQ0JDQUFJQUlnRDBFQmFpSUVFTEdBZ0lBQUlnSU5sUUVnQkNFQkRNTUJDMEU1SVJBTXp3RUxBa0FnQUM4Qk1DSUJRUWh4UlEwQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFoeFJRMlFBUXNnQUNBQlFmZjdBM0ZCZ0FSeU93RXdJQThoQVF0Qk55RVFETFFCQ3lBQUlBQXZBVEJCRUhJN0FUQU1xd0VMSUJCQkZVWU5pd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNPZ0lBQU5nSVFJQUJCSERZQ0RFRUFJUkFNeXdFTElBQkJ3d0EyQWh3Z0FDQUJOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU15Z0VMQWtBZ0FTMEFBRUU2UncwQUlBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkN2Z0lDQUFDSVFEUUFnQVVFQmFpRUJER01MSUFCQnd3QTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTXlnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3hrWUNBQURZQ0VDQUFRUW8yQWd4QkFDRVFETWtCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCb0ptQWdBQTJBaEFnQUVFZU5nSU1RUUFoRUF6SUFRc2dBRUVBTmdJQUN5QUFRWUFTT3dFcUlBQWdGMEVCYWlJQklBSVFxSUNBZ0FBaUVBMEJJQUVoQVF0Qnh3QWhFQXlzQVFzZ0VFRVZSdzJEQVNBQVFkRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTXhBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERjRMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNd3dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIQnFJQ0FBRFlDRUNBQVFRYzJBZ3dnQUVFQU5nSUFRUUFoRUF6Q0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpCQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0FrWUNBQURZQ0VDQUFRUWsyQWd3TXdBRUxJQkJCRlVZTmZTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeS9BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dBVUVCYWlFQkFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSzJBZ0lBQUloQU5BQ0FCSVFFTVhBc2dBRUhZQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeStBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNclFFTElBQkIyUUEyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES3NCQ3lBQVFkb0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRREx3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXBBUXNnQUVIY0FEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk3QVFzQ1FDQUJMUUFBUVZCcUloQkIvd0Z4UVFwUERRQWdBQ0FRT2dBcUlBRkJBV29oQVVIUEFDRVFES0lCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5bkFRc2dBRUhlQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTZBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQkkwOE5BQ0FCSVFFTVdRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkT0pnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU11UUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dNdHdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBRU0ZIRFFBZ0FTRUJERllMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdiaW9DQUFEWUNFQ0FBUVFnMkFneEJBQ0VRRExZQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLU0lRUVYxcVFRdFBEUUFnQVNFQkRGVUxBa0FnRUVFR1N3MEFRUUVnRUhSQnlnQnhSUTBBSUFFaEFReFZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZlSmdJQUFOZ0lRSUFCQkNEWUNEQXkxQVFzZ0VFRVZSZzF4SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUc1allDQUFEWUNFQ0FBUVJvMkFneEJBQ0VRRExRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFVDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETE1CQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExFQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFJDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEFCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG9xQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5dkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl1QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXRBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNVFFzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5c0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkeUlnSUFBTmdJUUlBQkJCellDREVFQUlSQU1xd0VMSUJCQlAwY05BU0FCUVFGcUlRRUxRUVVoRUF5UUFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5a29DQUFEWUNFQ0FBUVFjMkFnd01xQUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXB3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcGdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFWUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwZ0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTXBBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjB3QTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb3dFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkRFTUxJQUJCNVFBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtFQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnc0K0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWdBUXRCQUNFUUlBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3dNbndFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKNEJDeUFBUVFBMkFod2dBQ0FVTmdJVUlBQkIvcEdBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlkQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVk2YmdJQUFOZ0lRSUFCQkJqWUNERUVBSVJBTW5BRUxJQkJCRlVZTlZ5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpJNkFnQUEyQWhBZ0FFRWdOZ0lNUVFBaEVBeWJBUXNnQUVFQU5nSUFJQkJCQVdvaEFVRWtJUkFMSUFBZ0VEb0FLU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCRUt1QWdJQUFJaEFOVkNBQklRRU1QZ3NnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWZHYmdJQUFOZ0lRSUFCQkJqWUNEQXlYQVFzZ0FVRVZSZzFRSUFCQkFEWUNIQ0FBSUFVMkFoUWdBRUh3aklDQUFEWUNFQ0FBUVJzMkFneEJBQ0VRREpZQkN5QUFLQUlFSVFVZ0FFRUFOZ0lFSUFBZ0JTQVFFS21BZ0lBQUlnVU5BU0FRUVFGcUlRVUxRYTBCSVJBTWV3c2dBRUhCQVRZQ0hDQUFJQVUyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlUQVFzZ0FDZ0NCQ0VHSUFCQkFEWUNCQ0FBSUFZZ0VCQ3BnSUNBQUNJR0RRRWdFRUVCYWlFR0MwR3VBU0VRREhnTElBQkJ3Z0UyQWh3Z0FDQUdOZ0lNSUFBZ0VFRUJhallDRkVFQUlSQU1rQUVMSUFCQkFEWUNIQ0FBSUFjMkFoUWdBRUdYaTRDQUFEWUNFQ0FBUVEwMkFneEJBQ0VRREk4QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQjQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBeU9BUXNnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWlNOZ0lBQU5nSVFJQUJCSVRZQ0RFRUFJUkFNalFFTFFRRWhGa0VBSVJkQkFDRVVRUUVoRUFzZ0FDQVFPZ0FySUFsQkFXb2hDQUpBQWtBZ0FDMEFMVUVRY1EwQUFrQUNRQUpBSUFBdEFDb09Bd0VBQWdRTElCWkZEUU1NQWdzZ0ZBMEJEQUlMSUJkRkRRRUxJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQWdRcllDQWdBQWlFRVVOUFNBQVFja0JOZ0ljSUFBZ0NEWUNGQ0FBSUJBMkFneEJBQ0VRREl3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUlFSzJBZ0lBQUlnUkZEWFlnQUVIS0FUWUNIQ0FBSUFnMkFoUWdBQ0FFTmdJTVFRQWhFQXlMQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NSQ3RnSUNBQUNJRVJRMTBJQUJCeXdFMkFod2dBQ0FKTmdJVUlBQWdCRFlDREVFQUlSQU1pZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFvUXJZQ0FnQUFpQkVVTmNpQUFRYzBCTmdJY0lBQWdDallDRkNBQUlBUTJBZ3hCQUNFUURJa0JDd0pBSUFzdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQzBFQmFpRUtRYllCSVJBTWNBc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDeEN0Z0lDQUFDSUVSUTF3SUFCQnp3RTJBaHdnQUNBTE5nSVVJQUFnQkRZQ0RFRUFJUkFNaUFFTElBQkJBRFlDSENBQUlBUTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dnQUVFQU5nSUFRUUFoRUF5SEFRc2dBVUVWUmcwL0lBQkJBRFlDSENBQUlBdzJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURJWUJDeUFBUVlFRU93RW9JQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXhCQVdvaURCQ3JnSUNBQUNJUVJRMDRJQUJCMHdFMkFod2dBQ0FNTmdJVUlBQWdFRFlDREVFQUlSQU1oUUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBUTJBaFFnQUVIWW00Q0FBRFlDRUNBQVFRZzJBZ3dNZ3dFTElBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBdEJBV29pQ3hDcmdJQ0FBQ0lRRFFGQnhnRWhFQXhwQ3lBQVFRSTZBQ2dNVlFzZ0FFSFZBVFlDSENBQUlBczJBaFFnQUNBUU5nSU1RUUFoRUF5QUFRc2dFRUVWUmcwM0lBQkJBRFlDSENBQUlBUTJBaFFnQUVHa2pJQ0FBRFlDRUNBQVFSQTJBZ3hCQUNFUURIOExJQUF0QURSQkFVY05OQ0FBSUFRZ0FoQzhnSUNBQUNJUVJRMDBJQkJCRlVjTk5TQUFRZHdCTmdJY0lBQWdCRFlDRkNBQVFkV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1mZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTWZRdEJBQ0VRREdNTFFRSWhFQXhpQzBFTklSQU1ZUXRCRHlFUURHQUxRU1VoRUF4ZkMwRVRJUkFNWGd0QkZTRVFERjBMUVJZaEVBeGNDMEVYSVJBTVd3dEJHQ0VRREZvTFFSa2hFQXhaQzBFYUlSQU1XQXRCR3lFUURGY0xRUndoRUF4V0MwRWRJUkFNVlF0Qkh5RVFERlFMUVNFaEVBeFRDMEVqSVJBTVVndEJ4Z0FoRUF4UkMwRXVJUkFNVUF0Qkx5RVFERThMUVRzaEVBeE9DMEU5SVJBTVRRdEJ5QUFoRUF4TUMwSEpBQ0VRREVzTFFjc0FJUkFNU2d0QnpBQWhFQXhKQzBIT0FDRVFERWdMUWRFQUlSQU1Sd3RCMVFBaEVBeEdDMEhZQUNFUURFVUxRZGtBSVJBTVJBdEIyd0FoRUF4REMwSGtBQ0VRREVJTFFlVUFJUkFNUVF0QjhRQWhFQXhBQzBIMEFDRVFERDhMUVkwQklSQU1QZ3RCbHdFaEVBdzlDMEdwQVNFUUREd0xRYXdCSVJBTU93dEJ3QUVoRUF3NkMwRzVBU0VRRERrTFFhOEJJUkFNT0F0QnNRRWhFQXczQzBHeUFTRVFERFlMUWJRQklSQU1OUXRCdFFFaEVBdzBDMEc2QVNFUURETUxRYjBCSVJBTU1ndEJ2d0VoRUF3eEMwSEJBU0VRRERBTElBQkJBRFlDSENBQUlBUTJBaFFnQUVIcGk0Q0FBRFlDRUNBQVFSODJBZ3hCQUNFUURFZ0xJQUJCMndFMkFod2dBQ0FFTmdJVUlBQkIrcGFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhIQ3lBQVFmZ0FOZ0ljSUFBZ0REWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJnc2dBRUhSQURZQ0hDQUFJQVUyQWhRZ0FFR3dsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERVVMSUFCQitRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNUkFzZ0FFSDRBRFlDSENBQUlBRTJBaFFnQUVIS21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFTUxJQUJCNUFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhDQ3lBQVFkY0FOZ0ljSUFBZ0FUWUNGQ0FBUWNtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU1RQXNnQUVIQ0FEWUNIQ0FBSUFFMkFoUWdBRUhqbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREQ4TElBQkJBRFlDQkNBQUlBOGdEeEN4Z0lDQUFDSUVSUTBCSUFCQk9qWUNIQ0FBSUFRMkFnd2dBQ0FQUVFGcU5nSVVRUUFoRUF3K0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCRVVOQUNBQVFUczJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTVBnc2dBVUVCYWlFQkRDMExJQTlCQVdvaEFRd3RDeUFBUVFBMkFod2dBQ0FQTmdJVUlBQkI1SktBZ0FBMkFoQWdBRUVFTmdJTVFRQWhFQXc3Q3lBQVFUWTJBaHdnQUNBRU5nSVVJQUFnQWpZQ0RFRUFJUkFNT2dzZ0FFRXVOZ0ljSUFBZ0RqWUNGQ0FBSUFRMkFneEJBQ0VRRERrTElBQkIwQUEyQWh3Z0FDQUJOZ0lVSUFCQmtaaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzRDeUFOUVFGcUlRRU1MQXNnQUVFVk5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTmdzZ0FFRWJOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Rc2dBRUVQTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OQXNnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTXdzZ0FFRWFOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1nc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NUXNnQUVFS05nSWNJQUFnQVRZQ0ZDQUFRZVNXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTUFzZ0FFRWVOZ0ljSUFBZ0FUWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUx3c2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1MZ3NnQUVFRU5nSWNJQUFnQVRZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTFFzZ0FFRUFOZ0lBSUF0QkFXb2hDd3RCdUFFaEVBd1NDeUFBUVFBMkFnQWdFRUVCYWlFQlFmVUFJUkFNRVFzZ0FTRUJBa0FnQUMwQUtVRUZSdzBBUWVNQUlSQU1FUXRCNGdBaEVBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFCQjVKR0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF3b0N5QUFRUUEyQWdBZ0YwRUJhaUVCUWNBQUlSQU1EZ3RCQVNFQkN5QUFJQUU2QUN3Z0FFRUFOZ0lBSUJkQkFXb2hBUXRCS0NFUURBc0xJQUVoQVF0Qk9DRVFEQWtMQWtBZ0FTSVBJQUpHRFFBRFFBSkFJQTh0QUFCQmdMNkFnQUJxTFFBQUlnRkJBVVlOQUNBQlFRSkhEUU1nRDBFQmFpRUJEQVFMSUE5QkFXb2lEeUFDUncwQUMwRStJUkFNSWd0QlBpRVFEQ0VMSUFCQkFEb0FMQ0FQSVFFTUFRdEJDeUVRREFZTFFUb2hFQXdGQ3lBQlFRRnFJUUZCTFNFUURBUUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0ZrRUJhaUVCUVF3aEVBd0RDeUFBUVFBMkFnQWdGMEVCYWlFQlFRb2hFQXdDQ3lBQVFRQTJBZ0FMSUFCQkFEb0FMQ0FOSVFGQkNTRVFEQUFMQzBFQUlSQWdBRUVBTmdJY0lBQWdDellDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3WEMwRUFJUkFnQUVFQU5nSWNJQUFnQ2pZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1dDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdWQzBFQUlSQWdBRUVBTmdJY0lBQWdDRFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3VUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1RDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdTQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3UkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdQQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3T0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY0NTZ0lBQU5nSVFJQUJCQ3pZQ0RBd05DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpXSmdJQUFOZ0lRSUFCQkN6WUNEQXdNQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREF3TEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZnVQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0tDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZHWmdJQUFOZ0lRSUFCQkFqWUNEQXdKQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjU1VnSUFBTmdJUUlBQkJBallDREF3SUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZktWZ0lBQU5nSVFJQUJCQWpZQ0RBd0hDeUFBUVFJMkFod2dBQ0FCTmdJVUlBQkJuSnFBZ0FBMkFoQWdBRUVXTmdJTVFRQWhFQXdHQzBFQklSQU1CUXRCMUFBaEVDQUJJZ1FnQWtZTkJDQURRUWhxSUFBZ0JDQUNRZGpDZ0lBQVFRb1F4WUNBZ0FBZ0F5Z0NEQ0VFSUFNb0FnZ09Bd0VFQWdBTEVNcUFnSUFBQUFzZ0FFRUFOZ0ljSUFCQnRacUFnQUEyQWhBZ0FFRVhOZ0lNSUFBZ0JFRUJhallDRkVFQUlSQU1BZ3NnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRY3FhZ0lBQU5nSVFJQUJCQ1RZQ0RFRUFJUkFNQVFzQ1FDQUJJZ1FnQWtjTkFFRWlJUkFNQVFzZ0FFR0pnSUNBQURZQ0NDQUFJQVEyQWdSQklTRVFDeUFEUVJCcUpJQ0FnSUFBSUJBTHJ3RUJBbjhnQVNnQ0FDRUdBa0FDUUNBQ0lBTkdEUUFnQkNBR2FpRUVJQVlnQTJvZ0Ftc2hCeUFDSUFaQmYzTWdCV29pQm1vaEJRTkFBa0FnQWkwQUFDQUVMUUFBUmcwQVFRSWhCQXdEQ3dKQUlBWU5BRUVBSVFRZ0JTRUNEQU1MSUFaQmYyb2hCaUFFUVFGcUlRUWdBa0VCYWlJQ0lBTkhEUUFMSUFjaEJpQURJUUlMSUFCQkFUWUNBQ0FCSUFZMkFnQWdBQ0FDTmdJRUR3c2dBVUVBTmdJQUlBQWdCRFlDQUNBQUlBSTJBZ1FMQ2dBZ0FCREhnSUNBQUF2eU5nRUxmeU9BZ0lDQUFFRVFheUlCSklDQWdJQUFBa0JCQUNnQ29OQ0FnQUFOQUVFQUVNdUFnSUFBUVlEVWhJQUFheUlDUWRrQVNRMEFRUUFoQXdKQVFRQW9BdURUZ0lBQUlnUU5BRUVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRUlha0Z3Y1VIWXF0V3FCWE1pQkRZQzROT0FnQUJCQUVFQU5nTDAwNENBQUVFQVFRQTJBc1RUZ0lBQUMwRUFJQUkyQXN6VGdJQUFRUUJCZ05TRWdBQTJBc2pUZ0lBQVFRQkJnTlNFZ0FBMkFwalFnSUFBUVFBZ0JEWUNyTkNBZ0FCQkFFRi9OZ0tvMElDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTFFZRFVoSUFBUVhoQmdOU0VnQUJyUVE5eFFRQkJnTlNFZ0FCQkNHcEJEM0ViSWdOcUlnUkJCR29nQWtGSWFpSUZJQU5ySWdOQkFYSTJBZ0JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQVFZRFVoSUFBSUFWcVFUZzJBZ1FMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCN0FGTERRQUNRRUVBS0FLSTBJQ0FBQ0lHUVJBZ0FFRVRha0Z3Y1NBQVFRdEpHeUlDUVFOMklnUjJJZ05CQTNGRkRRQUNRQUpBSUFOQkFYRWdCSEpCQVhNaUJVRURkQ0lFUWJEUWdJQUFhaUlESUFSQnVOQ0FnQUJxS0FJQUlnUW9BZ2dpQWtjTkFFRUFJQVpCZmlBRmQzRTJBb2pRZ0lBQURBRUxJQU1nQWpZQ0NDQUNJQU0yQWd3TElBUkJDR29oQXlBRUlBVkJBM1FpQlVFRGNqWUNCQ0FFSUFWcUlnUWdCQ2dDQkVFQmNqWUNCQXdNQ3lBQ1FRQW9BcERRZ0lBQUlnZE5EUUVDUUNBRFJRMEFBa0FDUUNBRElBUjBRUUlnQkhRaUEwRUFJQU5yY25FaUEwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacUlnUkJBM1FpQTBHdzBJQ0FBR29pQlNBRFFialFnSUFBYWlnQ0FDSURLQUlJSWdCSERRQkJBQ0FHUVg0Z0JIZHhJZ1kyQW9qUWdJQUFEQUVMSUFVZ0FEWUNDQ0FBSUFVMkFnd0xJQU1nQWtFRGNqWUNCQ0FESUFSQkEzUWlCR29nQkNBQ2F5SUZOZ0lBSUFNZ0Ftb2lBQ0FGUVFGeU5nSUVBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFRQ1FBSkFJQVpCQVNBSFFRTjJkQ0lJY1EwQVFRQWdCaUFJY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FFTmdJTUlBSWdCRFlDQ0NBRUlBSTJBZ3dnQkNBSU5nSUlDeUFEUVFocUlRTkJBQ0FBTmdLYzBJQ0FBRUVBSUFVMkFwRFFnSUFBREF3TFFRQW9Bb3pRZ0lBQUlnbEZEUUVnQ1VFQUlBbHJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxUVFKMFFialNnSUFBYWlnQ0FDSUFLQUlFUVhoeElBSnJJUVFnQUNFRkFrQURRQUpBSUFVb0FoQWlBdzBBSUFWQkZHb29BZ0FpQTBVTkFnc2dBeWdDQkVGNGNTQUNheUlGSUFRZ0JTQUVTU0lGR3lFRUlBTWdBQ0FGR3lFQUlBTWhCUXdBQ3dzZ0FDZ0NHQ0VLQWtBZ0FDZ0NEQ0lJSUFCR0RRQWdBQ2dDQ0NJRFFRQW9BcGpRZ0lBQVNSb2dDQ0FETmdJSUlBTWdDRFlDREF3TEN3SkFJQUJCRkdvaUJTZ0NBQ0lERFFBZ0FDZ0NFQ0lEUlEwRElBQkJFR29oQlFzRFFDQUZJUXNnQXlJSVFSUnFJZ1VvQWdBaUF3MEFJQWhCRUdvaEJTQUlLQUlRSWdNTkFBc2dDMEVBTmdJQURBb0xRWDhoQWlBQVFiOS9TdzBBSUFCQkUyb2lBMEZ3Y1NFQ1FRQW9Bb3pRZ0lBQUlnZEZEUUJCQUNFTEFrQWdBa0dBQWtrTkFFRWZJUXNnQWtILy8vOEhTdzBBSUFOQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCQ0FFUVlEZ0gycEJFSFpCQkhFaUJIUWlCU0FGUVlDQUQycEJFSFpCQW5FaUJYUkJEM1lnQXlBRWNpQUZjbXNpQTBFQmRDQUNJQU5CRldwMlFRRnhja0VjYWlFTEMwRUFJQUpySVFRQ1FBSkFBa0FDUUNBTFFRSjBRYmpTZ0lBQWFpZ0NBQ0lGRFFCQkFDRURRUUFoQ0F3QkMwRUFJUU1nQWtFQVFSa2dDMEVCZG1zZ0MwRWZSaHQwSVFCQkFDRUlBMEFDUUNBRktBSUVRWGh4SUFKcklnWWdCRThOQUNBR0lRUWdCU0VJSUFZTkFFRUFJUVFnQlNFSUlBVWhBd3dEQ3lBRElBVkJGR29vQWdBaUJpQUdJQVVnQUVFZGRrRUVjV3BCRUdvb0FnQWlCVVliSUFNZ0Joc2hBeUFBUVFGMElRQWdCUTBBQ3dzQ1FDQURJQWh5RFFCQkFDRUlRUUlnQzNRaUEwRUFJQU5yY2lBSGNTSURSUTBESUFOQkFDQURhM0ZCZjJvaUF5QURRUXgyUVJCeElnTjJJZ1ZCQlhaQkNIRWlBQ0FEY2lBRklBQjJJZ05CQW5aQkJIRWlCWElnQXlBRmRpSURRUUYyUVFKeElnVnlJQU1nQlhZaUEwRUJka0VCY1NJRmNpQURJQVYyYWtFQ2RFRzQwb0NBQUdvb0FnQWhBd3NnQTBVTkFRc0RRQ0FES0FJRVFYaHhJQUpySWdZZ0JFa2hBQUpBSUFNb0FoQWlCUTBBSUFOQkZHb29BZ0FoQlFzZ0JpQUVJQUFiSVFRZ0F5QUlJQUFiSVFnZ0JTRURJQVVOQUFzTElBaEZEUUFnQkVFQUtBS1EwSUNBQUNBQ2EwOE5BQ0FJS0FJWUlRc0NRQ0FJS0FJTUlnQWdDRVlOQUNBSUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBQUlBTTJBZ2dnQXlBQU5nSU1EQWtMQWtBZ0NFRVVhaUlGS0FJQUlnTU5BQ0FJS0FJUUlnTkZEUU1nQ0VFUWFpRUZDd05BSUFVaEJpQURJZ0JCRkdvaUJTZ0NBQ0lERFFBZ0FFRVFhaUVGSUFBb0FoQWlBdzBBQ3lBR1FRQTJBZ0FNQ0FzQ1FFRUFLQUtRMElDQUFDSURJQUpKRFFCQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQXlBQ2F5SUZRUkJKRFFBZ0JDQUNhaUlBSUFWQkFYSTJBZ1JCQUNBRk5nS1EwSUNBQUVFQUlBQTJBcHpRZ0lBQUlBUWdBMm9nQlRZQ0FDQUVJQUpCQTNJMkFnUU1BUXNnQkNBRFFRTnlOZ0lFSUFRZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFUVFCQkFEWUNuTkNBZ0FCQkFFRUFOZ0tRMElDQUFBc2dCRUVJYWlFRERBb0xBa0JCQUNnQ2xOQ0FnQUFpQUNBQ1RRMEFRUUFvQXFEUWdJQUFJZ01nQW1vaUJDQUFJQUpySWdWQkFYSTJBZ1JCQUNBRk5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBTWdBa0VEY2pZQ0JDQURRUWhxSVFNTUNnc0NRQUpBUVFBb0F1RFRnSUFBUlEwQVFRQW9BdWpUZ0lBQUlRUU1BUXRCQUVKL053THMwNENBQUVFQVFvQ0FoSUNBZ01BQU53TGswNENBQUVFQUlBRkJER3BCY0hGQjJLclZxZ1Z6TmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FCQmdJQUVJUVFMUVFBaEF3SkFJQVFnQWtISEFHb2lCMm9pQmtFQUlBUnJJZ3R4SWdnZ0Frc05BRUVBUVRBMkF2alRnSUFBREFvTEFrQkJBQ2dDd05PQWdBQWlBMFVOQUFKQVFRQW9BcmpUZ0lBQUlnUWdDR29pQlNBRVRRMEFJQVVnQTAwTkFRdEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUNndEJBQzBBeE5PQWdBQkJCSEVOQkFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFBSkFJQU1vQWdBaUJTQUVTdzBBSUFVZ0F5Z0NCR29nQkVzTkF3c2dBeWdDQ0NJRERRQUxDMEVBRU11QWdJQUFJZ0JCZjBZTkJTQUlJUVlDUUVFQUtBTGswNENBQUNJRFFYOXFJZ1FnQUhGRkRRQWdDQ0FBYXlBRUlBQnFRUUFnQTJ0eGFpRUdDeUFHSUFKTkRRVWdCa0grLy8vL0Iwc05CUUpBUVFBb0FzRFRnSUFBSWdORkRRQkJBQ2dDdU5PQWdBQWlCQ0FHYWlJRklBUk5EUVlnQlNBRFN3MEdDeUFHRU11QWdJQUFJZ01nQUVjTkFRd0hDeUFHSUFCcklBdHhJZ1pCL3YvLy93ZExEUVFnQmhETGdJQ0FBQ0lBSUFNb0FnQWdBeWdDQkdwR0RRTWdBQ0VEQ3dKQUlBTkJmMFlOQUNBQ1FjZ0FhaUFHVFEwQUFrQWdCeUFHYTBFQUtBTG8wNENBQUNJRWFrRUFJQVJyY1NJRVFmNy8vLzhIVFEwQUlBTWhBQXdIQ3dKQUlBUVF5NENBZ0FCQmYwWU5BQ0FFSUFacUlRWWdBeUVBREFjTFFRQWdCbXNReTRDQWdBQWFEQVFMSUFNaEFDQURRWDlIRFFVTUF3dEJBQ0VJREFjTFFRQWhBQXdGQ3lBQVFYOUhEUUlMUVFCQkFDZ0N4Tk9BZ0FCQkJISTJBc1RUZ0lBQUN5QUlRZjcvLy84SFN3MEJJQWdReTRDQWdBQWhBRUVBRU11QWdJQUFJUU1nQUVGL1JnMEJJQU5CZjBZTkFTQUFJQU5QRFFFZ0F5QUFheUlHSUFKQk9HcE5EUUVMUVFCQkFDZ0N1Tk9BZ0FBZ0Jtb2lBellDdU5PQWdBQUNRQ0FEUVFBb0FyelRnSUFBVFEwQVFRQWdBellDdk5PQWdBQUxBa0FDUUFKQUFrQkJBQ2dDb05DQWdBQWlCRVVOQUVISTA0Q0FBQ0VEQTBBZ0FDQURLQUlBSWdVZ0F5Z0NCQ0lJYWtZTkFpQURLQUlJSWdNTkFBd0RDd3NDUUFKQVFRQW9BcGpRZ0lBQUlnTkZEUUFnQUNBRFR3MEJDMEVBSUFBMkFwalFnSUFBQzBFQUlRTkJBQ0FHTmdMTTA0Q0FBRUVBSUFBMkFzalRnSUFBUVFCQmZ6WUNxTkNBZ0FCQkFFRUFLQUxnMDRDQUFEWUNyTkNBZ0FCQkFFRUFOZ0xVMDRDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdRZ0JrRklhaUlGSUFOcklnTkJBWEkyQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQUFnQldwQk9EWUNCQXdDQ3lBRExRQU1RUWh4RFFBZ0JDQUZTUTBBSUFRZ0FFOE5BQ0FFUVhnZ0JHdEJEM0ZCQUNBRVFRaHFRUTl4R3lJRmFpSUFRUUFvQXBUUWdJQUFJQVpxSWdzZ0JXc2lCVUVCY2pZQ0JDQURJQWdnQm1vMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FGTmdLVTBJQ0FBRUVBSUFBMkFxRFFnSUFBSUFRZ0MycEJPRFlDQkF3QkN3SkFJQUJCQUNnQ21OQ0FnQUFpQ0U4TkFFRUFJQUEyQXBqUWdJQUFJQUFoQ0FzZ0FDQUdhaUVGUWNqVGdJQUFJUU1DUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQU1vQWdBZ0JVWU5BU0FES0FJSUlnTU5BQXdDQ3dzZ0F5MEFERUVJY1VVTkFRdEJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlJRklBUkxEUU1MSUFNb0FnZ2hBd3dBQ3dzZ0F5QUFOZ0lBSUFNZ0F5Z0NCQ0FHYWpZQ0JDQUFRWGdnQUd0QkQzRkJBQ0FBUVFocVFROXhHMm9pQ3lBQ1FRTnlOZ0lFSUFWQmVDQUZhMEVQY1VFQUlBVkJDR3BCRDNFYmFpSUdJQXNnQW1vaUFtc2hBd0pBSUFZZ0JFY05BRUVBSUFJMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0Eyb2lBellDbE5DQWdBQWdBaUFEUVFGeU5nSUVEQU1MQWtBZ0JrRUFLQUtjMElDQUFFY05BRUVBSUFJMkFwelFnSUFBUVFCQkFDZ0NrTkNBZ0FBZ0Eyb2lBellDa05DQWdBQWdBaUFEUVFGeU5nSUVJQUlnQTJvZ0F6WUNBQXdEQ3dKQUlBWW9BZ1FpQkVFRGNVRUJSdzBBSUFSQmVIRWhCd0pBQWtBZ0JFSC9BVXNOQUNBR0tBSUlJZ1VnQkVFRGRpSUlRUU4wUWJEUWdJQUFhaUlBUmhvQ1FDQUdLQUlNSWdRZ0JVY05BRUVBUVFBb0FvalFnSUFBUVg0Z0NIZHhOZ0tJMElDQUFBd0NDeUFFSUFCR0dpQUVJQVUyQWdnZ0JTQUVOZ0lNREFFTElBWW9BaGdoQ1FKQUFrQWdCaWdDRENJQUlBWkdEUUFnQmlnQ0NDSUVJQWhKR2lBQUlBUTJBZ2dnQkNBQU5nSU1EQUVMQWtBZ0JrRVVhaUlFS0FJQUlnVU5BQ0FHUVJCcUlnUW9BZ0FpQlEwQVFRQWhBQXdCQ3dOQUlBUWhDQ0FGSWdCQkZHb2lCQ2dDQUNJRkRRQWdBRUVRYWlFRUlBQW9BaEFpQlEwQUN5QUlRUUEyQWdBTElBbEZEUUFDUUFKQUlBWWdCaWdDSENJRlFRSjBRYmpTZ0lBQWFpSUVLQUlBUncwQUlBUWdBRFlDQUNBQURRRkJBRUVBS0FLTTBJQ0FBRUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDVUVRUVJRZ0NTZ0NFQ0FHUmh0cUlBQTJBZ0FnQUVVTkFRc2dBQ0FKTmdJWUFrQWdCaWdDRUNJRVJRMEFJQUFnQkRZQ0VDQUVJQUEyQWhnTElBWW9BaFFpQkVVTkFDQUFRUlJxSUFRMkFnQWdCQ0FBTmdJWUN5QUhJQU5xSVFNZ0JpQUhhaUlHS0FJRUlRUUxJQVlnQkVGK2NUWUNCQ0FDSUFOcUlBTTJBZ0FnQWlBRFFRRnlOZ0lFQWtBZ0EwSC9BVXNOQUNBRFFYaHhRYkRRZ0lBQWFpRUVBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBMEVEZG5RaUEzRU5BRUVBSUFVZ0EzSTJBb2pRZ0lBQUlBUWhBd3dCQ3lBRUtBSUlJUU1MSUFNZ0FqWUNEQ0FFSUFJMkFnZ2dBaUFFTmdJTUlBSWdBellDQ0F3REMwRWZJUVFDUUNBRFFmLy8vd2RMRFFBZ0EwRUlkaUlFSUFSQmdQNC9ha0VRZGtFSWNTSUVkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBRUlBVnlJQUJ5YXlJRVFRRjBJQU1nQkVFVmFuWkJBWEZ5UVJ4cUlRUUxJQUlnQkRZQ0hDQUNRZ0EzQWhBZ0JFRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdCQkFTQUVkQ0lJY1EwQUlBVWdBallDQUVFQUlBQWdDSEkyQW96UWdJQUFJQUlnQlRZQ0dDQUNJQUkyQWdnZ0FpQUNOZ0lNREFNTElBTkJBRUVaSUFSQkFYWnJJQVJCSDBZYmRDRUVJQVVvQWdBaEFBTkFJQUFpQlNnQ0JFRjRjU0FEUmcwQ0lBUkJIWFloQUNBRVFRRjBJUVFnQlNBQVFRUnhha0VRYWlJSUtBSUFJZ0FOQUFzZ0NDQUNOZ0lBSUFJZ0JUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBSUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnc2dCa0ZJYWlJSUlBTnJJZ05CQVhJMkFnUWdBQ0FJYWtFNE5nSUVJQVFnQlVFM0lBVnJRUTl4UVFBZ0JVRkpha0VQY1J0cVFVRnFJZ2dnQ0NBRVFSQnFTUnNpQ0VFak5nSUVRUUJCQUNnQzhOT0FnQUEyQXFUUWdJQUFRUUFnQXpZQ2xOQ0FnQUJCQUNBTE5nS2cwSUNBQUNBSVFSQnFRUUFwQXREVGdJQUFOd0lBSUFoQkFDa0N5Tk9BZ0FBM0FnaEJBQ0FJUVFocU5nTFEwNENBQUVFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUVBTmdMVTA0Q0FBQ0FJUVNScUlRTURRQ0FEUVFjMkFnQWdBMEVFYWlJRElBVkpEUUFMSUFnZ0JFWU5BeUFJSUFnb0FnUkJmbkUyQWdRZ0NDQUlJQVJySWdBMkFnQWdCQ0FBUVFGeU5nSUVBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0FFRURkblFpQUhFTkFFRUFJQVVnQUhJMkFvalFnSUFBSUFNaEJRd0JDeUFES0FJSUlRVUxJQVVnQkRZQ0RDQURJQVEyQWdnZ0JDQUROZ0lNSUFRZ0JUWUNDQXdFQzBFZklRTUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUlJQWhCZ0lBUGFrRVFka0VDY1NJSWRFRVBkaUFESUFWeUlBaHlheUlEUVFGMElBQWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBUWdBellDSENBRVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ2hCQVNBRGRDSUdjUTBBSUFVZ0JEWUNBRUVBSUFnZ0JuSTJBb3pRZ0lBQUlBUWdCVFlDR0NBRUlBUTJBZ2dnQkNBRU5nSU1EQVFMSUFCQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQ0FOQUlBZ2lCU2dDQkVGNGNTQUFSZzBESUFOQkhYWWhDQ0FEUVFGMElRTWdCU0FJUVFSeGFrRVFhaUlHS0FJQUlnZ05BQXNnQmlBRU5nSUFJQVFnQlRZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFNTElBVW9BZ2dpQXlBQ05nSU1JQVVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUZOZ0lNSUFJZ0F6WUNDQXNnQzBFSWFpRUREQVVMSUFVb0FnZ2lBeUFFTmdJTUlBVWdCRFlDQ0NBRVFRQTJBaGdnQkNBRk5nSU1JQVFnQXpZQ0NBdEJBQ2dDbE5DQWdBQWlBeUFDVFEwQVFRQW9BcURRZ0lBQUlnUWdBbW9pQlNBRElBSnJJZ05CQVhJMkFnUkJBQ0FETmdLVTBJQ0FBRUVBSUFVMkFxRFFnSUFBSUFRZ0FrRURjallDQkNBRVFRaHFJUU1NQXd0QkFDRURRUUJCTURZQytOT0FnQUFNQWdzQ1FDQUxSUTBBQWtBQ1FDQUlJQWdvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQUEyQWdBZ0FBMEJRUUFnQjBGK0lBVjNjU0lITmdLTTBJQ0FBQXdDQ3lBTFFSQkJGQ0FMS0FJUUlBaEdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBczJBaGdDUUNBSUtBSVFJZ05GRFFBZ0FDQUROZ0lRSUFNZ0FEWUNHQXNnQ0VFVWFpZ0NBQ0lEUlEwQUlBQkJGR29nQXpZQ0FDQURJQUEyQWhnTEFrQUNRQ0FFUVE5TERRQWdDQ0FFSUFKcUlnTkJBM0kyQWdRZ0NDQURhaUlESUFNb0FnUkJBWEkyQWdRTUFRc2dDQ0FDYWlJQUlBUkJBWEkyQWdRZ0NDQUNRUU55TmdJRUlBQWdCR29nQkRZQ0FBSkFJQVJCL3dGTERRQWdCRUY0Y1VHdzBJQ0FBR29oQXdKQUFrQkJBQ2dDaU5DQWdBQWlCVUVCSUFSQkEzWjBJZ1J4RFFCQkFDQUZJQVJ5TmdLSTBJQ0FBQ0FESVFRTUFRc2dBeWdDQ0NFRUN5QUVJQUEyQWd3Z0F5QUFOZ0lJSUFBZ0F6WUNEQ0FBSUFRMkFnZ01BUXRCSHlFREFrQWdCRUgvLy84SFN3MEFJQVJCQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJTQUZRWURnSDJwQkVIWkJCSEVpQlhRaUFpQUNRWUNBRDJwQkVIWkJBbkVpQW5SQkQzWWdBeUFGY2lBQ2Ntc2lBMEVCZENBRUlBTkJGV3AyUVFGeGNrRWNhaUVEQ3lBQUlBTTJBaHdnQUVJQU53SVFJQU5CQW5SQnVOS0FnQUJxSVFVQ1FDQUhRUUVnQTNRaUFuRU5BQ0FGSUFBMkFnQkJBQ0FISUFKeU5nS00wSUNBQUNBQUlBVTJBaGdnQUNBQU5nSUlJQUFnQURZQ0RBd0JDeUFFUVFCQkdTQURRUUYyYXlBRFFSOUdHM1FoQXlBRktBSUFJUUlDUUFOQUlBSWlCU2dDQkVGNGNTQUVSZzBCSUFOQkhYWWhBaUFEUVFGMElRTWdCU0FDUVFSeGFrRVFhaUlHS0FJQUlnSU5BQXNnQmlBQU5nSUFJQUFnQlRZQ0dDQUFJQUEyQWd3Z0FDQUFOZ0lJREFFTElBVW9BZ2dpQXlBQU5nSU1JQVVnQURZQ0NDQUFRUUEyQWhnZ0FDQUZOZ0lNSUFBZ0F6WUNDQXNnQ0VFSWFpRUREQUVMQWtBZ0NrVU5BQUpBQWtBZ0FDQUFLQUljSWdWQkFuUkJ1TktBZ0FCcUlnTW9BZ0JIRFFBZ0F5QUlOZ0lBSUFnTkFVRUFJQWxCZmlBRmQzRTJBb3pRZ0lBQURBSUxJQXBCRUVFVUlBb29BaEFnQUVZYmFpQUlOZ0lBSUFoRkRRRUxJQWdnQ2pZQ0dBSkFJQUFvQWhBaUEwVU5BQ0FJSUFNMkFoQWdBeUFJTmdJWUN5QUFRUlJxS0FJQUlnTkZEUUFnQ0VFVWFpQUROZ0lBSUFNZ0NEWUNHQXNDUUFKQUlBUkJEMHNOQUNBQUlBUWdBbW9pQTBFRGNqWUNCQ0FBSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBQUlBSnFJZ1VnQkVFQmNqWUNCQ0FBSUFKQkEzSTJBZ1FnQlNBRWFpQUVOZ0lBQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRTUNRQUpBUVFFZ0IwRURkblFpQ0NBR2NRMEFRUUFnQ0NBR2NqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRE5nSU1JQUlnQXpZQ0NDQURJQUkyQWd3Z0F5QUlOZ0lJQzBFQUlBVTJBcHpRZ0lBQVFRQWdCRFlDa05DQWdBQUxJQUJCQ0dvaEF3c2dBVUVRYWlTQWdJQ0FBQ0FEQ3dvQUlBQVF5WUNBZ0FBTDRnMEJCMzhDUUNBQVJRMEFJQUJCZUdvaUFTQUFRWHhxS0FJQUlnSkJlSEVpQUdvaEF3SkFJQUpCQVhFTkFDQUNRUU54UlEwQklBRWdBU2dDQUNJQ2F5SUJRUUFvQXBqUWdJQUFJZ1JKRFFFZ0FpQUFhaUVBQWtBZ0FVRUFLQUtjMElDQUFFWU5BQUpBSUFKQi93RkxEUUFnQVNnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0FTZ0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUF3c2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdDQ3lBQktBSVlJUWNDUUFKQUlBRW9BZ3dpQmlBQlJnMEFJQUVvQWdnaUFpQUVTUm9nQmlBQ05nSUlJQUlnQmpZQ0RBd0JDd0pBSUFGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlJQ0tBSUFJZ1FOQUVFQUlRWU1BUXNEUUNBQ0lRVWdCQ0lHUVJScUlnSW9BZ0FpQkEwQUlBWkJFR29oQWlBR0tBSVFJZ1FOQUFzZ0JVRUFOZ0lBQ3lBSFJRMEJBa0FDUUNBQklBRW9BaHdpQkVFQ2RFRzQwb0NBQUdvaUFpZ0NBRWNOQUNBQ0lBWTJBZ0FnQmcwQlFRQkJBQ2dDak5DQWdBQkJmaUFFZDNFMkFvelFnSUFBREFNTElBZEJFRUVVSUFjb0FoQWdBVVliYWlBR05nSUFJQVpGRFFJTElBWWdCellDR0FKQUlBRW9BaEFpQWtVTkFDQUdJQUkyQWhBZ0FpQUdOZ0lZQ3lBQktBSVVJZ0pGRFFFZ0JrRVVhaUFDTmdJQUlBSWdCallDR0F3QkN5QURLQUlFSWdKQkEzRkJBMGNOQUNBRElBSkJmbkUyQWdSQkFDQUFOZ0tRMElDQUFDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVEd3NnQVNBRFR3MEFJQU1vQWdRaUFrRUJjVVVOQUFKQUFrQWdBa0VDY1EwQUFrQWdBMEVBS0FLZzBJQ0FBRWNOQUVFQUlBRTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBR29pQURZQ2xOQ0FnQUFnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRTkJBRUVBTmdLUTBJQ0FBRUVBUVFBMkFwelFnSUFBRHdzQ1FDQURRUUFvQXB6UWdJQUFSdzBBUVFBZ0FUWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQUFhaUlBTmdLUTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVNBQWFpQUFOZ0lBRHdzZ0FrRjRjU0FBYWlFQUFrQUNRQ0FDUWY4QlN3MEFJQU1vQWdnaUJDQUNRUU4ySWdWQkEzUkJzTkNBZ0FCcUlnWkdHZ0pBSUFNb0Fnd2lBaUFFUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFGZDNFMkFvalFnSUFBREFJTElBSWdCa1lhSUFJZ0JEWUNDQ0FFSUFJMkFnd01BUXNnQXlnQ0dDRUhBa0FDUUNBREtBSU1JZ1lnQTBZTkFDQURLQUlJSWdKQkFDZ0NtTkNBZ0FCSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBMEVVYWlJQ0tBSUFJZ1FOQUNBRFFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFBQ1FBSkFJQU1nQXlnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1BZ3NnQjBFUVFSUWdCeWdDRUNBRFJodHFJQVkyQWdBZ0JrVU5BUXNnQmlBSE5nSVlBa0FnQXlnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQU1vQWhRaUFrVU5BQ0FHUVJScUlBSTJBZ0FnQWlBR05nSVlDeUFCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRRkJBQ0FBTmdLUTBJQ0FBQThMSUFNZ0FrRitjVFlDQkNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUN3SkFJQUJCL3dGTERRQWdBRUY0Y1VHdzBJQ0FBR29oQWdKQUFrQkJBQ2dDaU5DQWdBQWlCRUVCSUFCQkEzWjBJZ0J4RFFCQkFDQUVJQUJ5TmdLSTBJQ0FBQ0FDSVFBTUFRc2dBaWdDQ0NFQUN5QUFJQUUyQWd3Z0FpQUJOZ0lJSUFFZ0FqWUNEQ0FCSUFBMkFnZ1BDMEVmSVFJQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJQ0lBSkJnUDQvYWtFUWRrRUljU0lDZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJR0lBWkJnSUFQYWtFUWRrRUNjU0lHZEVFUGRpQUNJQVJ5SUFaeWF5SUNRUUYwSUFBZ0FrRVZhblpCQVhGeVFSeHFJUUlMSUFFZ0FqWUNIQ0FCUWdBM0FoQWdBa0VDZEVHNDBvQ0FBR29oQkFKQUFrQkJBQ2dDak5DQWdBQWlCa0VCSUFKMElnTnhEUUFnQkNBQk5nSUFRUUFnQmlBRGNqWUNqTkNBZ0FBZ0FTQUVOZ0lZSUFFZ0FUWUNDQ0FCSUFFMkFnd01BUXNnQUVFQVFSa2dBa0VCZG1zZ0FrRWZSaHQwSVFJZ0JDZ0NBQ0VHQWtBRFFDQUdJZ1FvQWdSQmVIRWdBRVlOQVNBQ1FSMTJJUVlnQWtFQmRDRUNJQVFnQmtFRWNXcEJFR29pQXlnQ0FDSUdEUUFMSUFNZ0FUWUNBQ0FCSUFRMkFoZ2dBU0FCTmdJTUlBRWdBVFlDQ0F3QkN5QUVLQUlJSWdBZ0FUWUNEQ0FFSUFFMkFnZ2dBVUVBTmdJWUlBRWdCRFlDRENBQklBQTJBZ2dMUVFCQkFDZ0NxTkNBZ0FCQmYyb2lBVUYvSUFFYk5nS28wSUNBQUFzTEJBQUFBQXRPQUFKQUlBQU5BRDhBUVJCMER3c0NRQ0FBUWYvL0EzRU5BQ0FBUVg5TURRQUNRQ0FBUVJCMlFBQWlBRUYvUncwQVFRQkJNRFlDK05PQWdBQkJmdzhMSUFCQkVIUVBDeERLZ0lDQUFBQUw4Z0lDQTM4QmZnSkFJQUpGRFFBZ0FDQUJPZ0FBSUFJZ0FHb2lBMEYvYWlBQk9nQUFJQUpCQTBrTkFDQUFJQUU2QUFJZ0FDQUJPZ0FCSUFOQmZXb2dBVG9BQUNBRFFYNXFJQUU2QUFBZ0FrRUhTUTBBSUFBZ0FUb0FBeUFEUVh4cUlBRTZBQUFnQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCZkdvZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FYaHFJQUUyQWdBZ0FrRjBhaUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRndhaUFCTmdJQUlBSkJiR29nQVRZQ0FDQUNRV2hxSUFFMkFnQWdBa0ZrYWlBQk5nSUFJQVFnQTBFRWNVRVljaUlGYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFZZ0F5QUZhaUVCQTBBZ0FTQUdOd01ZSUFFZ0JqY0RFQ0FCSUFZM0F3Z2dBU0FHTndNQUlBRkJJR29oQVNBQ1FXQnFJZ0pCSDBzTkFBc0xJQUFMQzQ1SUFRQkJnQWdMaGtnQkFBQUFBZ0FBQUFNQUFBQUFBQUFBQUFBQUFBUUFBQUFGQUFBQUFBQUFBQUFBQUFBR0FBQUFCd0FBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2djWFZsY25rQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5aWIyUjVBRU52Ym5SbGJuUXRUR1Z1WjNSb0lHOTJaWEptYkc5M0FFTm9kVzVySUhOcGVtVWdiM1psY21ac2IzY0FVbVZ6Y0c5dWMyVWdiM1psY21ac2IzY0FTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRWhVVkZBdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRkpVVTFBdmVDNTRJSEpsY1hWbGMzUUFSWGh3WldOMFpXUWdVMDlWVWtORklHMWxkR2h2WkNCbWIzSWdTVU5GTDNndWVDQnlaWEYxWlhOMEFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2dabkpoWjIxbGJuUWdjM1JoY25RQVJYaHdaV04wWldRZ1pHOTBBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZjM1JoZEhWekFFbHVkbUZzYVdRZ2NtVnpjRzl1YzJVZ2MzUmhkSFZ6QUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NQVZYTmxjaUJqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmY21WelpYUmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOW9aV0ZrWlhKZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgySmxaMmx1WUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYzNSaGRIVnpYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDNWeWJGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxkR2h2WkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5sY25abGNnQkpiblpoYkdsa0lHaGxZV1JsY2lCMllXeDFaU0JqYUdGeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUdacFpXeGtJR05vWVhJQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MlpYSnphVzl1QUVsdWRtRnNhV1FnYldsdWIzSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMWhhbTl5SUhabGNuTnBiMjRBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCRFVreEdJR0ZtZEdWeUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCSVZGUlFJSFpsY25OcGIyNEFTVzUyWVd4cFpDQm9aV0ZrWlhJZ2RHOXJaVzRBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkxY213QVNXNTJZV3hwWkNCamFHRnlZV04wWlhKeklHbHVJSFZ5YkFCVmJtVjRjR1ZqZEdWa0lITjBZWEowSUdOb1lYSWdhVzRnZFhKc0FFUnZkV0pzWlNCQUlHbHVJSFZ5YkFCRmJYQjBlU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJEYjI1MFpXNTBMVXhsYm1kMGFBQkVkWEJzYVdOaGRHVWdRMjl1ZEdWdWRDMU1aVzVuZEdnQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQndZWFJvQUVOdmJuUmxiblF0VEdWdVozUm9JR05oYmlkMElHSmxJSEJ5WlhObGJuUWdkMmwwYUNCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WndCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCemFYcGxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgzWmhiSFZsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdkbUZzZFdVQVRXbHpjMmx1WnlCbGVIQmxZM1JsWkNCTVJpQmhablJsY2lCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsSUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVmtJSFpoYkhWbEFGQmhkWE5sWkNCaWVTQnZibDlvWldGa1pYSnpYMk52YlhCc1pYUmxBRWx1ZG1Gc2FXUWdSVTlHSUhOMFlYUmxBRzl1WDNKbGMyVjBJSEJoZFhObEFHOXVYMk5vZFc1clgyaGxZV1JsY2lCd1lYVnpaUUJ2Ymw5dFpYTnpZV2RsWDJKbFoybHVJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWlNCd1lYVnpaUUJ2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkxY214ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaU0J3WVhWelpRQlZibVY0Y0dWamRHVmtJSE53WVdObElHRm1kR1Z5SUhOMFlYSjBJR3hwYm1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJRzVoYldVQVVHRjFjMlVnYjI0Z1EwOU9Ua1ZEVkM5VmNHZHlZV1JsQUZCaGRYTmxJRzl1SUZCU1NTOVZjR2R5WVdSbEFFVjRjR1ZqZEdWa0lFaFVWRkF2TWlCRGIyNXVaV04wYVc5dUlGQnlaV1poWTJVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5dFpYUm9iMlFBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2JXVjBhRzlrQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYMlpwWld4a0FGQmhkWE5sWkFCSmJuWmhiR2xrSUhkdmNtUWdaVzVqYjNWdWRHVnlaV1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdaVzVqYjNWdWRHVnlaV1FBVlc1bGVIQmxZM1JsWkNCamFHRnlJR2x1SUhWeWJDQnpZMmhsYldFQVVtVnhkV1Z6ZENCb1lYTWdhVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdBRk5YU1ZSRFNGOVFVazlZV1FCVlUwVmZVRkpQV0ZrQVRVdEJRMVJKVmtsVVdRQlZUbEJTVDBORlUxTkJRa3hGWDBWT1ZFbFVXUUJEVDFCWkFFMVBWa1ZFWDFCRlVrMUJUa1ZPVkV4WkFGUlBUMTlGUVZKTVdRQk9UMVJKUmxrQVJrRkpURVZFWDBSRlVFVk9SRVZPUTFrQVFrRkVYMGRCVkVWWFFWa0FVRXhCV1FCUVZWUUFRMGhGUTB0UFZWUUFSMEZVUlZkQldWOVVTVTFGVDFWVUFGSkZVVlZGVTFSZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDBOUFRrNUZRMVJmVkVsTlJVOVZWQUJEVDA1T1JVTlVTVTlPWDFSSlRVVlBWVlFBVEU5SFNVNWZWRWxOUlU5VlZBQk9SVlJYVDFKTFgxSkZRVVJmVkVsTlJVOVZWQUJRVDFOVUFFMUpVMFJKVWtWRFZFVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZURTlCUkY5Q1FVeEJUa05GUkY5U1JWRlZSVk5VQUVKQlJGOVNSVkZWUlZOVUFFaFVWRkJmVWtWUlZVVlRWRjlUUlU1VVgxUlBYMGhVVkZCVFgxQlBVbFFBVWtWUVQxSlVBRWxOWDBGZlZFVkJVRTlVQUZKRlUwVlVYME5QVGxSRlRsUUFUazlmUTA5T1ZFVk9WQUJRUVZKVVNVRk1YME5QVGxSRlRsUUFTRkJGWDBsT1ZrRk1TVVJmUTA5T1UxUkJUbFFBU0ZCRlgwTkNYMUpGVTBWVUFFZEZWQUJJVUVWZlUxUlNTVU5VQUVOUFRrWk1TVU5VQUZSRlRWQlBVa0ZTV1Y5U1JVUkpVa1ZEVkFCUVJWSk5RVTVGVGxSZlVrVkVTVkpGUTFRQVEwOU9Ua1ZEVkFCTlZVeFVTVjlUVkVGVVZWTUFTRkJGWDBsT1ZrRk1TVVJmVTFSQlZGVlRBRlJQVDE5TlFVNVpYMUpGVVZWRlUxUlRBRVZCVWt4WlgwaEpUbFJUQUZWT1FWWkJTVXhCUWt4RlgwWlBVbDlNUlVkQlRGOVNSVUZUVDA1VEFFOVFWRWxQVGxNQVUxZEpWRU5JU1U1SFgxQlNUMVJQUTA5TVV3QldRVkpKUVU1VVgwRk1VMDlmVGtWSFQxUkpRVlJGVXdCTlZVeFVTVkJNUlY5RFNFOUpRMFZUQUVsT1ZFVlNUa0ZNWDFORlVsWkZVbDlGVWxKUFVnQlhSVUpmVTBWU1ZrVlNYMVZPUzA1UFYwNWZSVkpTVDFJQVVrRkpURWRWVGw5RlVsSlBVZ0JKUkVWT1ZFbFVXVjlRVWs5V1NVUkZVbDlCVlZSSVJVNVVTVU5CVkVsUFRsOUZVbEpQVWdCVFUweGZRMFZTVkVsR1NVTkJWRVZmUlZKU1QxSUFTVTVXUVV4SlJGOVlYMFpQVWxkQlVrUkZSRjlHVDFJQVUwVlVYMUJCVWtGTlJWUkZVZ0JIUlZSZlVFRlNRVTFGVkVWU0FFaFFSVjlWVTBWU0FGTkZSVjlQVkVoRlVnQklVRVZmUTBKZlEwaFZUa3RmU0VWQlJFVlNBRTFMUTBGTVJVNUVRVklBVTBWVVZWQUFWMFZDWDFORlVsWkZVbDlKVTE5RVQxZE9BRlJGUVZKRVQxZE9BRWhRUlY5RFRFOVRSVVJmUTA5T1RrVkRWRWxQVGdCSVJWVlNTVk5VU1VOZlJWaFFTVkpCVkVsUFRnQkVTVk5EVDA1T1JVTlVSVVJmVDFCRlVrRlVTVTlPQUU1UFRsOUJWVlJJVDFKSlZFRlVTVlpGWDBsT1JrOVNUVUZVU1U5T0FFaFFSVjlKVGxaQlRFbEVYMVpGVWxOSlQwNEFTRkJGWDBOQ1gwMUZVMU5CUjBWZlFrVkhTVTRBVTBsVVJWOUpVMTlHVWs5YVJVNEFTRkJGWDBsT1ZrRk1TVVJmU0VWQlJFVlNYMVJQUzBWT0FFbE9Wa0ZNU1VSZlZFOUxSVTRBUms5U1FrbEVSRVZPQUVWT1NFRk9RMFZmV1U5VlVsOURRVXhOQUVoUVJWOUpUbFpCVEVsRVgxVlNUQUJDVEU5RFMwVkVYMEpaWDFCQlVrVk9WRUZNWDBOUFRsUlNUMHdBVFV0RFQwd0FRVU5NQUVoUVJWOUpUbFJGVWs1QlRBQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGWDFWT1QwWkdTVU5KUVV3QVNGQkZYMDlMQUZWT1RFbE9Td0JWVGt4UFEwc0FVRkpKQUZKRlZGSlpYMWRKVkVnQVNGQkZYMGxPVmtGTVNVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVNGQkZYMVZPUlZoUVJVTlVSVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FSa3hWVTBnQVVGSlBVRkJCVkVOSUFFMHRVMFZCVWtOSUFGVlNTVjlVVDA5ZlRFOU9Sd0JRVWs5RFJWTlRTVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZVRVZTVTBsVFZFVk9WRjlYUVZKT1NVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlYwRlNUa2xPUndCSVVFVmZTVTVXUVV4SlJGOVVVa0ZPVTBaRlVsOUZUa05QUkVsT1J3QkZlSEJsWTNSbFpDQkRVa3hHQUVoUVJWOUpUbFpCVEVsRVgwTklWVTVMWDFOSldrVUFUVTlXUlFCRFQwNVVTVTVWUlFCSVVFVmZRMEpmVTFSQlZGVlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5V1JWSlRTVTlPWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlWVWt4ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlZrRk1WVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwVllWRVZPVTBsUFRsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMDVCVFVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlUxTkJSMFZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVkVoUFJGOURUMDFRVEVWVVJRQklVRVZmUTBKZlNFVkJSRVZTWDBaSlJVeEVYME5QVFZCTVJWUkZBRVJGVEVWVVJRQklVRVZmU1U1V1FVeEpSRjlGVDBaZlUxUkJWRVVBU1U1V1FVeEpSRjlUVTB4ZlEwVlNWRWxHU1VOQlZFVUFVRUZWVTBVQVRrOWZVa1ZUVUU5T1UwVUFWVTVUVlZCUVQxSlVSVVJmVFVWRVNVRmZWRmxRUlFCSFQwNUZBRTVQVkY5QlEwTkZVRlJCUWt4RkFGTkZVbFpKUTBWZlZVNUJWa0ZKVEVGQ1RFVUFVa0ZPUjBWZlRrOVVYMU5CVkVsVFJrbEJRa3hGQUU5U1NVZEpUbDlKVTE5VlRsSkZRVU5JUVVKTVJRQlNSVk5RVDA1VFJWOUpVMTlUVkVGTVJRQlFWVkpIUlFCTlJWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDFSUFQxOU1RVkpIUlFCUVFWbE1UMEZFWDFSUFQxOU1RVkpIUlFCSlRsTlZSa1pKUTBsRlRsUmZVMVJQVWtGSFJRQklVRVZmVUVGVlUwVkVYMVZRUjFKQlJFVUFTRkJGWDFCQlZWTkZSRjlJTWw5VlVFZFNRVVJGQUZOUFZWSkRSUUJCVGs1UFZVNURSUUJVVWtGRFJRQklVRVZmVlU1RldGQkZRMVJGUkY5VFVFRkRSUUJFUlZORFVrbENSUUJWVGxOVlFsTkRVa2xDUlFCU1JVTlBVa1FBU0ZCRlgwbE9Wa0ZNU1VSZlRVVlVTRTlFQUU1UFZGOUdUMVZPUkFCUVVrOVFSa2xPUkFCVlRrSkpUa1FBVWtWQ1NVNUVBRlZPUVZWVVNFOVNTVnBGUkFCTlJWUklUMFJmVGs5VVgwRk1URTlYUlVRQVNGUlVVRjlXUlZKVFNVOU9YMDVQVkY5VFZWQlFUMUpVUlVRQVFVeFNSVUZFV1Y5U1JWQlBVbFJGUkFCQlEwTkZVRlJGUkFCT1QxUmZTVTFRVEVWTlJVNVVSVVFBVEU5UFVGOUVSVlJGUTFSRlJBQklVRVZmUTFKZlJWaFFSVU5VUlVRQVNGQkZYMHhHWDBWWVVFVkRWRVZFQUVOU1JVRlVSVVFBU1UxZlZWTkZSQUJJVUVWZlVFRlZVMFZFQUZSSlRVVlBWVlJmVDBORFZWSkZSQUJRUVZsTlJVNVVYMUpGVVZWSlVrVkVBRkJTUlVOUFRrUkpWRWxQVGw5U1JWRlZTVkpGUkFCUVVrOVlXVjlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk9SVlJYVDFKTFgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUV4RlRrZFVTRjlTUlZGVlNWSkZSQUJUVTB4ZlEwVlNWRWxHU1VOQlZFVmZVa1ZSVlVsU1JVUUFWVkJIVWtGRVJWOVNSVkZWU1ZKRlJBQlFRVWRGWDBWWVVFbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gwWkJTVXhGUkFCRldGQkZRMVJCVkVsUFRsOUdRVWxNUlVRQVVrVldRVXhKUkVGVVNVOU9YMFpCU1V4RlJBQlRVMHhmU0VGT1JGTklRVXRGWDBaQlNVeEZSQUJNVDBOTFJVUUFWRkpCVGxOR1QxSk5RVlJKVDA1ZlFWQlFURWxGUkFCT1QxUmZUVTlFU1VaSlJVUUFUazlVWDBWWVZFVk9SRVZFQUVKQlRrUlhTVVJVU0Y5TVNVMUpWRjlGV0VORlJVUkZSQUJUU1ZSRlgwbFRYMDlXUlZKTVQwRkVSVVFBU0VWQlJBQkZlSEJsWTNSbFpDQklWRlJRTHdBQVhoTUFBQ1lUQUFBd0VBQUE4QmNBQUowVEFBQVZFZ0FBT1JjQUFQQVNBQUFLRUFBQWRSSUFBSzBTQUFDQ0V3QUFUeFFBQUg4UUFBQ2dGUUFBSXhRQUFJa1NBQUNMRkFBQVRSVUFBTlFSQUFEUEZBQUFFQmdBQU1rV0FBRGNGZ0FBd1JFQUFPQVhBQUM3RkFBQWRCUUFBSHdWQUFEbEZBQUFDQmNBQUI4UUFBQmxGUUFBb3hRQUFDZ1ZBQUFDRlFBQW1SVUFBQ3dRQUFDTEdRQUFUdzhBQU5RT0FBQnFFQUFBemhBQUFBSVhBQUNKRGdBQWJoTUFBQndUQUFCbUZBQUFWaGNBQU1FVEFBRE5Fd0FBYkJNQUFHZ1hBQUJtRndBQVh4Y0FBQ0lUQUFET0R3QUFhUTRBQU5nT0FBQmpGZ0FBeXhNQUFLb09BQUFvRndBQUpoY0FBTVVUQUFCZEZnQUE2QkVBQUdjVEFBQmxFd0FBOGhZQUFITVRBQUFkRndBQStSWUFBUE1SQUFEUERnQUF6aFVBQUF3U0FBQ3pFUUFBcFJFQUFHRVFBQUF5RndBQXV4TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlEQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFCQUFBQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUNBZ0lDQUFBQ0FnQUNBZ0FDQWdJQ0FnSUNBZ0lDQUFNQUJBQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFnQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkc5elpXVmxjQzFoYkdsMlpRQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQVFFQkFRRUJBUUVCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJZMmgxYm10bFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVBQUFFQkFBRUJBQUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJsWTNScGIyNWxiblF0YkdWdVozUm9iMjV5YjNoNUxXTnZibTVsWTNScGIyNEFBQUFBQUFBQUFBQUFBQUFBQUFCeVlXNXpabVZ5TFdWdVkyOWthVzVuY0dkeVlXUmxEUW9OQ2cwS1UwME5DZzBLVkZSUUwwTkZMMVJUVUM4QUFBQUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFJQUFRTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBUUVGQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFBQVFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUVBQUFFQkFRRUJBUUVCQVFFQkFVRUJBUUVCQVFFQkFRRUJBUUFCQUFHQndRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBSUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCT1QxVk9RMFZGUTB0UFZWUk9SVU5VUlZSRlExSkpRa1ZNVlZOSVJWUkZRVVJUUlVGU1EwaFNSMFZEVkVsV1NWUlpURVZPUkVGU1ZrVlBWRWxHV1ZCVVNVOU9VME5JVTBWQldWTlVRVlJEU0VkRlQxSkVTVkpGUTFSUFVsUlNRMGhRUVZKQlRVVlVSVkpWVWtORlFsTkRVa2xDUlVGU1JFOVhUa0ZEUlVsT1JFNUxRMHRWUWxORFVrbENSVWhVVkZBdlFVUlVVQzg9J1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDckxnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMGtCQVhzZ0FFRVFhdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0lCL1FzREFDQUFJQUg5Q3dNQUlBQkJNR29nQWYwTEF3QWdBRUVnYWlBQi9Rc0RBQ0FBUWQwQk5nSWNRUUFMZXdFQmZ3SkFJQUFvQWd3aUF3MEFBa0FnQUNnQ0JFVU5BQ0FBSUFFMkFnUUxBa0FnQUNBQklBSVF4SUNBZ0FBaUF3MEFJQUFvQWd3UEN5QUFJQU0yQWh4QkFDRURJQUFvQWdRaUFVVU5BQ0FBSUFFZ0FpQUFLQUlJRVlHQWdJQUFBQ0lCUlEwQUlBQWdBallDRkNBQUlBRTJBZ3dnQVNFREN5QURDK1R6QVFNT2Z3TitCSDhqZ0lDQWdBQkJFR3NpQXlTQWdJQ0FBQ0FCSVFRZ0FTRUZJQUVoQmlBQklRY2dBU0VJSUFFaENTQUJJUW9nQVNFTElBRWhEQ0FCSVEwZ0FTRU9JQUVoRHdKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSWNJaEJCZjJvTzNRSGFBUUhaQVFJREJBVUdCd2dKQ2dzTURRN1lBUThRMXdFUkV0WUJFeFFWRmhjWUdSb2I0QUhmQVJ3ZEh0VUJIeUFoSWlNa0pkUUJKaWNvS1NvckxOTUIwZ0V0THRFQjBBRXZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlViYkFVZElTVXJQQWM0QlM4MEJUTXdCVFU1UFVGRlNVMVJWVmxkWVdWcGJYRjFlWDJCaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZW50OGZYNS9nQUdCQVlJQmd3R0VBWVVCaGdHSEFZZ0JpUUdLQVlzQmpBR05BWTRCandHUUFaRUJrZ0dUQVpRQmxRR1dBWmNCbUFHWkFab0Jtd0djQVowQm5nR2ZBYUFCb1FHaUFhTUJwQUdsQWFZQnB3R29BYWtCcWdHckFhd0JyUUd1QWE4QnNBR3hBYklCc3dHMEFiVUJ0Z0czQWNzQnlnRzRBY2tCdVFISUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQkFOd0JDMEVBSVJBTXhnRUxRUTRoRUF6RkFRdEJEU0VRRE1RQkMwRVBJUkFNd3dFTFFSQWhFQXpDQVF0QkV5RVFETUVCQzBFVUlSQU13QUVMUVJVaEVBeS9BUXRCRmlFUURMNEJDMEVYSVJBTXZRRUxRUmdoRUF5OEFRdEJHU0VRRExzQkMwRWFJUkFNdWdFTFFSc2hFQXk1QVF0QkhDRVFETGdCQzBFSUlSQU10d0VMUVIwaEVBeTJBUXRCSUNFUURMVUJDMEVmSVJBTXRBRUxRUWNoRUF5ekFRdEJJU0VRRExJQkMwRWlJUkFNc1FFTFFSNGhFQXl3QVF0Qkl5RVFESzhCQzBFU0lSQU1yZ0VMUVJFaEVBeXRBUXRCSkNFUURLd0JDMEVsSVJBTXF3RUxRU1loRUF5cUFRdEJKeUVRREtrQkMwSERBU0VRREtnQkMwRXBJUkFNcHdFTFFTc2hFQXltQVF0QkxDRVFES1VCQzBFdElSQU1wQUVMUVM0aEVBeWpBUXRCTHlFUURLSUJDMEhFQVNFUURLRUJDMEV3SVJBTW9BRUxRVFFoRUF5ZkFRdEJEQ0VRREo0QkMwRXhJUkFNblFFTFFUSWhFQXljQVF0Qk15RVFESnNCQzBFNUlSQU1tZ0VMUVRVaEVBeVpBUXRCeFFFaEVBeVlBUXRCQ3lFUURKY0JDMEU2SVJBTWxnRUxRVFloRUF5VkFRdEJDaUVRREpRQkMwRTNJUkFNa3dFTFFUZ2hFQXlTQVF0QlBDRVFESkVCQzBFN0lSQU1rQUVMUVQwaEVBeVBBUXRCQ1NFUURJNEJDMEVvSVJBTWpRRUxRVDRoRUF5TUFRdEJQeUVRRElzQkMwSEFBQ0VRRElvQkMwSEJBQ0VRRElrQkMwSENBQ0VRRElnQkMwSERBQ0VRREljQkMwSEVBQ0VRRElZQkMwSEZBQ0VRRElVQkMwSEdBQ0VRRElRQkMwRXFJUkFNZ3dFTFFjY0FJUkFNZ2dFTFFjZ0FJUkFNZ1FFTFFja0FJUkFNZ0FFTFFjb0FJUkFNZnd0Qnl3QWhFQXgrQzBITkFDRVFESDBMUWN3QUlSQU1mQXRCemdBaEVBeDdDMEhQQUNFUURIb0xRZEFBSVJBTWVRdEIwUUFoRUF4NEMwSFNBQ0VRREhjTFFkTUFJUkFNZGd0QjFBQWhFQXgxQzBIV0FDRVFESFFMUWRVQUlSQU1jd3RCQmlFUURISUxRZGNBSVJBTWNRdEJCU0VRREhBTFFkZ0FJUkFNYnd0QkJDRVFERzRMUWRrQUlSQU1iUXRCMmdBaEVBeHNDMEhiQUNFUURHc0xRZHdBSVJBTWFndEJBeUVRREdrTFFkMEFJUkFNYUF0QjNnQWhFQXhuQzBIZkFDRVFER1lMUWVFQUlSQU1aUXRCNEFBaEVBeGtDMEhpQUNFUURHTUxRZU1BSVJBTVlndEJBaUVRREdFTFFlUUFJUkFNWUF0QjVRQWhFQXhmQzBIbUFDRVFERjRMUWVjQUlSQU1YUXRCNkFBaEVBeGNDMEhwQUNFUURGc0xRZW9BSVJBTVdndEI2d0FoRUF4WkMwSHNBQ0VRREZnTFFlMEFJUkFNVnd0QjdnQWhFQXhXQzBIdkFDRVFERlVMUWZBQUlSQU1WQXRCOFFBaEVBeFRDMEh5QUNFUURGSUxRZk1BSVJBTVVRdEI5QUFoRUF4UUMwSDFBQ0VRREU4TFFmWUFJUkFNVGd0Qjl3QWhFQXhOQzBINEFDRVFERXdMUWZrQUlSQU1Td3RCK2dBaEVBeEtDMEg3QUNFUURFa0xRZndBSVJBTVNBdEIvUUFoRUF4SEMwSCtBQ0VRREVZTFFmOEFJUkFNUlF0QmdBRWhFQXhFQzBHQkFTRVFERU1MUVlJQklSQU1RZ3RCZ3dFaEVBeEJDMEdFQVNFUURFQUxRWVVCSVJBTVB3dEJoZ0VoRUF3K0MwR0hBU0VRREQwTFFZZ0JJUkFNUEF0QmlRRWhFQXc3QzBHS0FTRVFERG9MUVlzQklSQU1PUXRCakFFaEVBdzRDMEdOQVNFUUREY0xRWTRCSVJBTU5ndEJqd0VoRUF3MUMwR1FBU0VRRERRTFFaRUJJUkFNTXd0QmtnRWhFQXd5QzBHVEFTRVFEREVMUVpRQklSQU1NQXRCbFFFaEVBd3ZDMEdXQVNFUURDNExRWmNCSVJBTUxRdEJtQUVoRUF3c0MwR1pBU0VRRENzTFFab0JJUkFNS2d0Qm13RWhFQXdwQzBHY0FTRVFEQ2dMUVowQklSQU1Kd3RCbmdFaEVBd21DMEdmQVNFUURDVUxRYUFCSVJBTUpBdEJvUUVoRUF3akMwR2lBU0VRRENJTFFhTUJJUkFNSVF0QnBBRWhFQXdnQzBHbEFTRVFEQjhMUWFZQklSQU1IZ3RCcHdFaEVBd2RDMEdvQVNFUURCd0xRYWtCSVJBTUd3dEJxZ0VoRUF3YUMwR3JBU0VRREJrTFFhd0JJUkFNR0F0QnJRRWhFQXdYQzBHdUFTRVFEQllMUVFFaEVBd1ZDMEd2QVNFUURCUUxRYkFCSVJBTUV3dEJzUUVoRUF3U0MwR3pBU0VRREJFTFFiSUJJUkFNRUF0QnRBRWhFQXdQQzBHMUFTRVFEQTRMUWJZQklSQU1EUXRCdHdFaEVBd01DMEc0QVNFUURBc0xRYmtCSVJBTUNndEJ1Z0VoRUF3SkMwRzdBU0VRREFnTFFjWUJJUkFNQnd0QnZBRWhFQXdHQzBHOUFTRVFEQVVMUWI0QklSQU1CQXRCdndFaEVBd0RDMEhBQVNFUURBSUxRY0lCSVJBTUFRdEJ3UUVoRUFzRFFBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkFPeHdFQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCNGZJQ0VqSlNnL1FFRkVSVVpIU0VsS1MweE5UMUJSVWxQZUExZFpXMXhkWUdKbFptZG9hV3ByYkcxdmNIRnljM1IxZG5kNGVYcDdmSDErZ0FHQ0FZVUJoZ0dIQVlrQml3R01BWTBCamdHUEFaQUJrUUdVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0c0QWJrQnVnRzdBYndCdlFHK0FiOEJ3QUhCQWNJQnd3SEVBY1VCeGdISEFjZ0J5UUhLQWNzQnpBSE5BYzRCendIUUFkRUIwZ0hUQWRRQjFRSFdBZGNCMkFIWkFkb0Iyd0hjQWQwQjNnSGdBZUVCNGdIakFlUUI1UUhtQWVjQjZBSHBBZW9CNndIc0FlMEI3Z0h2QWZBQjhRSHlBZk1CbVFLa0FyQUMvZ0wrQWdzZ0FTSUVJQUpIRGZNQlFkMEJJUkFNL3dNTElBRWlFQ0FDUnczZEFVSERBU0VRRFA0REN5QUJJZ0VnQWtjTmtBRkI5d0FoRUF6OUF3c2dBU0lCSUFKSERZWUJRZThBSVJBTS9BTUxJQUVpQVNBQ1J3MS9RZW9BSVJBTSt3TUxJQUVpQVNBQ1J3MTdRZWdBSVJBTStnTUxJQUVpQVNBQ1J3MTRRZVlBSVJBTStRTUxJQUVpQVNBQ1J3MGFRUmdoRUF6NEF3c2dBU0lCSUFKSERSUkJFaUVRRFBjREN5QUJJZ0VnQWtjTldVSEZBQ0VRRFBZREN5QUJJZ0VnQWtjTlNrRS9JUkFNOVFNTElBRWlBU0FDUncxSVFUd2hFQXowQXdzZ0FTSUJJQUpIRFVGQk1TRVFEUE1EQ3lBQUxRQXVRUUZHRGVzRERJY0NDeUFBSUFFaUFTQUNFTUNBZ0lBQVFRRkhEZVlCSUFCQ0FEY0RJQXpuQVFzZ0FDQUJJZ0VnQWhDMGdJQ0FBQ0lRRGVjQklBRWhBUXoxQWdzQ1FDQUJJZ0VnQWtjTkFFRUdJUkFNOEFNTElBQWdBVUVCYWlJQklBSVF1NENBZ0FBaUVBM29BU0FCSVFFTU1Rc2dBRUlBTndNZ1FSSWhFQXpWQXdzZ0FTSVFJQUpIRFN0QkhTRVFETzBEQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVFUUlSQU0xQU1MUVFjaEVBenNBd3NnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM2xBVUVJSVJBTTZ3TUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFSUWhFQXpTQXd0QkNTRVFET29EQ3lBQklRRWdBQ2tESUZBTjVBRWdBU0VCRFBJQ0N3SkFJQUVpQVNBQ1J3MEFRUXNoRUF6cEF3c2dBQ0FCUVFGcUlnRWdBaEMyZ0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVlCSUFFaEFRd05DeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU41d0VnQVNFQkRQQUNDd0pBSUFFaUFTQUNSdzBBUVE4aEVBemxBd3NnQVMwQUFDSVFRVHRHRFFnZ0VFRU5SdzNvQVNBQlFRRnFJUUVNN3dJTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzb0FTQUJJUUVNOGdJTEEwQUNRQ0FCTFFBQVFmQzFnSUFBYWkwQUFDSVFRUUZHRFFBZ0VFRUNSdzNyQVNBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQlFRRnFJZ0VRdVlDQWdBQWlFQTNxQVNBQklRRU05QUlMSUFGQkFXb2lBU0FDUncwQUMwRVNJUkFNNGdNTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzcEFTQUJJUUVNQ2dzZ0FTSUJJQUpIRFFaQkd5RVFET0FEQ3dKQUlBRWlBU0FDUncwQVFSWWhFQXpnQXdzZ0FFR0tnSUNBQURZQ0NDQUFJQUUyQWdRZ0FDQUJJQUlRdUlDQWdBQWlFQTNxQVNBQklRRkJJQ0VRRE1ZREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRZkMzZ0lBQWFpMEFBQ0lRUVFKR0RRQUNRQ0FRUVg5cURnVGxBZXdCQU9zQjdBRUxJQUZCQVdvaEFVRUlJUkFNeUFNTElBRkJBV29pQVNBQ1J3MEFDMEVWSVJBTTN3TUxRUlVoRUF6ZUF3c0RRQUpBSUFFdEFBQkI4TG1BZ0FCcUxRQUFJaEJCQWtZTkFDQVFRWDlxRGdUZUFld0I0QUhyQWV3QkN5QUJRUUZxSWdFZ0FrY05BQXRCR0NFUUROMERDd0pBSUFFaUFTQUNSZzBBSUFCQmk0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRUhJUkFNeEFNTFFSa2hFQXpjQXdzZ0FVRUJhaUVCREFJTEFrQWdBU0lVSUFKSERRQkJHaUVRRE5zREN5QVVJUUVDUUNBVUxRQUFRWE5xRGhUZEF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUFnRHVBZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTTJnTUxBa0FnQVMwQUFDSVFRVHRHRFFBZ0VFRU5SdzNvQVNBQlFRRnFJUUVNNVFJTElBRkJBV29oQVF0QklpRVFETDhEQ3dKQUlBRWlFQ0FDUncwQVFSd2hFQXpZQXd0Q0FDRVJJQkFoQVNBUUxRQUFRVkJxRGpmbkFlWUJBUUlEQkFVR0J3Z0FBQUFBQUFBQUNRb0xEQTBPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQRUJFU0V4UUFDMEVlSVJBTXZRTUxRZ0loRVF6bEFRdENBeUVSRE9RQkMwSUVJUkVNNHdFTFFnVWhFUXppQVF0Q0JpRVJET0VCQzBJSElSRU00QUVMUWdnaEVRemZBUXRDQ1NFUkRONEJDMElLSVJFTTNRRUxRZ3NoRVF6Y0FRdENEQ0VSRE5zQkMwSU5JUkVNMmdFTFFnNGhFUXpaQVF0Q0R5RVJETmdCQzBJS0lSRU0xd0VMUWdzaEVReldBUXRDRENFUkROVUJDMElOSVJFTTFBRUxRZzRoRVF6VEFRdENEeUVSRE5JQkMwSUFJUkVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQXRBQUJCVUdvT04rVUI1QUVBQVFJREJBVUdCK1lCNWdIbUFlWUI1Z0htQWVZQkNBa0tDd3dONWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BUTRQRUJFU0UrWUJDMElDSVJFTTVBRUxRZ01oRVF6akFRdENCQ0VSRE9JQkMwSUZJUkVNNFFFTFFnWWhFUXpnQVF0Q0J5RVJETjhCQzBJSUlSRU0zZ0VMUWdraEVRemRBUXRDQ2lFUkROd0JDMElMSVJFTTJ3RUxRZ3doRVF6YUFRdENEU0VSRE5rQkMwSU9JUkVNMkFFTFFnOGhFUXpYQVF0Q0NpRVJETllCQzBJTElSRU0xUUVMUWd3aEVRelVBUXRDRFNFUkROTUJDMElPSVJFTTBnRUxRZzhoRVF6UkFRc2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzU0FVRWZJUkFNd0FNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVNRaEVBeW5Bd3RCSUNFUURMOERDeUFBSUFFaUVDQUNFTDZBZ0lBQVFYOXFEZ1cyQVFERkFnSFJBZElCQzBFUklSQU1wQU1MSUFCQkFUb0FMeUFRSVFFTXV3TUxJQUVpQVNBQ1J3M1NBVUVrSVJBTXV3TUxJQUVpRFNBQ1J3MGVRY1lBSVJBTXVnTUxJQUFnQVNJQklBSVFzb0NBZ0FBaUVBM1VBU0FCSVFFTXRRRUxJQUVpRUNBQ1J3MG1RZEFBSVJBTXVBTUxBa0FnQVNJQklBSkhEUUJCS0NFUURMZ0RDeUFBUVFBMkFnUWdBRUdNZ0lDQUFEWUNDQ0FBSUFFZ0FSQ3hnSUNBQUNJUURkTUJJQUVoQVF6WUFRc0NRQ0FCSWhBZ0FrY05BRUVwSVJBTXR3TUxJQkF0QUFBaUFVRWdSZzBVSUFGQkNVY04wd0VnRUVFQmFpRUJEQlVMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREJjTFFTb2hFQXkxQXdzQ1FDQUJJaEFnQWtjTkFFRXJJUkFNdFFNTEFrQWdFQzBBQUNJQlFRbEdEUUFnQVVFZ1J3M1ZBUXNnQUMwQUxFRUlSZzNUQVNBUUlRRU1rUU1MQWtBZ0FTSUJJQUpIRFFCQkxDRVFETFFEQ3lBQkxRQUFRUXBIRGRVQklBRkJBV29oQVF6SkFnc2dBU0lPSUFKSERkVUJRUzhoRUF5eUF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQWdFRUYyYWc0RUFOd0IzQUVBMmdFTElBRWhBUXpnQVFzZ0FVRUJhaUlCSUFKSERRQUxRVEVoRUF5eEF3dEJNaUVRSUFFaUZDQUNSZzJ3QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRTnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCOEx1QWdBQnFMUUFBUncwQkFrQWdBVUVEUncwQVFRWWhBUXlXQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXNRTUxJQUJCQURZQ0FDQVVJUUVNMlFFTFFUTWhFQ0FCSWhRZ0FrWU5yd01nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFSWFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZlM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJDRWNOQUVFRklRRU1sUU1MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExBREN5QUFRUUEyQWdBZ0ZDRUJETmdCQzBFMElSQWdBU0lVSUFKR0RhNERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQldvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSFF3b0NBQUdvdEFBQkhEUUVDUUNBQlFRVkhEUUJCQnlFQkRKUURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl2QXdzZ0FFRUFOZ0lBSUJRaEFRelhBUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVHQXZvQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrWU5DaUFCSVFFTTNRRUxJQUZCQVdvaUFTQUNSdzBBQzBFd0lSQU1yZ01MUVRBaEVBeXRBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVGMmFnNEUyUUhhQWRvQjJRSGFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUZ2hFQXl0QXd0Qk9DRVFES3dEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVFSlJ3MERDeUFCUVFGcUlnRWdBa2NOQUF0QlBDRVFES3NEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFDUUFKQUlCQkJkbW9PQk5vQkFRSGFBUUFMSUJCQkxFWU4yd0VMSUFFaEFRd0VDeUFCUVFGcUlnRWdBa2NOQUF0QlB5RVFES29EQ3lBQklRRU0yd0VMUWNBQUlSQWdBU0lVSUFKR0RhZ0RJQUlnRkdzZ0FDZ0NBQ0lCYWlFV0lCUWdBV3RCQm1vaEZ3SkFBMEFnRkMwQUFFRWdjaUFCUVlEQWdJQUFhaTBBQUVjTkFTQUJRUVpHRFk0RElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURLa0RDeUFBUVFBMkFnQWdGQ0VCQzBFMklSQU1qZ01MQWtBZ0FTSVBJQUpIRFFCQndRQWhFQXluQXdzZ0FFR01nSUNBQURZQ0NDQUFJQTgyQWdRZ0R5RUJJQUF0QUN4QmYyb09CTTBCMVFIWEFka0Jod01MSUFGQkFXb2hBUXpNQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0J5SUJBZ0VFRy9mMnBCL3dGeFFScEpHMEgvQVhFaUVFRUpSZzBBSUJCQklFWU5BQUpBQWtBQ1FBSkFJQkJCblg5cURoTUFBd01EQXdNREF3RURBd01EQXdNREF3TUNBd3NnQVVFQmFpRUJRVEVoRUF5UkF3c2dBVUVCYWlFQlFUSWhFQXlRQXdzZ0FVRUJhaUVCUVRNaEVBeVBBd3NnQVNFQkROQUJDeUFCUVFGcUlnRWdBa2NOQUF0Qk5TRVFES1VEQzBFMUlSQU1wQU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMeUFnQUJxTFFBQVFRRkdEUUFnQVNFQkROTUJDeUFCUVFGcUlnRWdBa2NOQUF0QlBTRVFES1FEQzBFOUlSQU1vd01MSUFBZ0FTSUJJQUlRc0lDQWdBQWlFQTNXQVNBQklRRU1BUXNnRUVFQmFpRUJDMEU4SVJBTWh3TUxBa0FnQVNJQklBSkhEUUJCd2dBaEVBeWdBd3NDUUFOQUFrQWdBUzBBQUVGM2FnNFlBQUwrQXY0Q2hBUCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nSUEvZ0lMSUFGQkFXb2lBU0FDUncwQUMwSENBQ0VRREtBREN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnZRRWdBU0VCQzBFc0lSQU1oUU1MSUFFaUFTQUNSdzNUQVVIRUFDRVFESjBEQ3dOQUFrQWdBUzBBQUVHUXdJQ0FBR290QUFCQkFVWU5BQ0FCSVFFTXR3SUxJQUZCQVdvaUFTQUNSdzBBQzBIRkFDRVFESndEQ3lBTkxRQUFJaEJCSUVZTnN3RWdFRUU2UncyQkF5QUFLQUlFSVFFZ0FFRUFOZ0lFSUFBZ0FTQU5FSytBZ0lBQUlnRU4wQUVnRFVFQmFpRUJETE1DQzBISEFDRVFJQUVpRFNBQ1JnMmFBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFaRENnSUFBYWkwQUFFY05nQU1nQVVFRlJnMzBBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlhQXd0QnlBQWhFQ0FCSWcwZ0FrWU5tUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFSmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1d3b0NBQUdvdEFBQkhEZjhDQWtBZ0FVRUpSdzBBUVFJaEFRejFBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbVFNTEFrQWdBU0lOSUFKSERRQkJ5UUFoRUF5WkF3c0NRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaSi9hZzRIQUlBRGdBT0FBNEFEZ0FNQmdBTUxJQTFCQVdvaEFVRStJUkFNZ0FNTElBMUJBV29oQVVFL0lSQU0vd0lMUWNvQUlSQWdBU0lOSUFKR0RaY0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQVdvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQm9NS0FnQUJxTFFBQVJ3MzlBaUFCUVFGR0RmQUNJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmNEQzBITEFDRVFJQUVpRFNBQ1JnMldBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVE1cUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhTENnSUFBYWkwQUFFY04vQUlnQVVFT1JnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlXQXd0QnpBQWhFQ0FCSWcwZ0FrWU5sUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFUGFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSEF3b0NBQUdvdEFBQkhEZnNDQWtBZ0FVRVBSdzBBUVFNaEFRenhBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbFFNTFFjMEFJUkFnQVNJTklBSkdEWlFESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkJXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzM2QWdKQUlBRkJCVWNOQUVFRUlRRU04QUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpRREN3SkFJQUVpRFNBQ1J3MEFRYzRBSVJBTWxBTUxBa0FDUUFKQUFrQWdEUzBBQUNJQlFTQnlJQUVnQVVHL2YycEIvd0Z4UVJwSkcwSC9BWEZCblg5cURoTUEvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQ0FmMEMvUUw5QWdJRC9RSUxJQTFCQVdvaEFVSEJBQ0VRRFAwQ0N5QU5RUUZxSVFGQndnQWhFQXo4QWdzZ0RVRUJhaUVCUWNNQUlSQU0rd0lMSUExQkFXb2hBVUhFQUNFUURQb0NDd0pBSUFFaUFTQUNSZzBBSUFCQmpZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSEZBQ0VRRFBvQ0MwSFBBQ0VRREpJREN5QVFJUUVDUUFKQUlCQXRBQUJCZG1vT0JBR29BcWdDQUtnQ0N5QVFRUUZxSVFFTFFTY2hFQXo0QWdzQ1FDQUJJZ0VnQWtjTkFFSFJBQ0VRREpFREN3SkFJQUV0QUFCQklFWU5BQ0FCSVFFTWpRRUxJQUZCQVdvaEFTQUFMUUF0UVFGeFJRM0hBU0FCSVFFTWpBRUxJQUVpRnlBQ1J3M0lBVUhTQUNFUURJOERDMEhUQUNFUUlBRWlGQ0FDUmcyT0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUUZxSVJjRFFDQVVMUUFBSUFGQjFzS0FnQUJxTFFBQVJ3M01BU0FCUVFGR0RjY0JJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFESTREQ3dKQUlBRWlBU0FDUncwQVFkVUFJUkFNamdNTElBRXRBQUJCQ2tjTnpBRWdBVUVCYWlFQkRNY0JDd0pBSUFFaUFTQUNSdzBBUWRZQUlSQU1qUU1MQWtBQ1FDQUJMUUFBUVhacURnUUF6UUhOQVFITkFRc2dBVUVCYWlFQkRNY0JDeUFCUVFGcUlRRkJ5Z0FoRUF6ekFnc2dBQ0FCSWdFZ0FoQ3VnSUNBQUNJUURjc0JJQUVoQVVITkFDRVFEUElDQ3lBQUxRQXBRU0pHRFlVRERLWUNDd0pBSUFFaUFTQUNSdzBBUWRzQUlSQU1pZ01MUVFBaEZFRUJJUmRCQVNFV1FRQWhFQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FCTFFBQVFWQnFEZ3JVQWRNQkFBRUNBd1FGQmdqVkFRdEJBaUVRREFZTFFRTWhFQXdGQzBFRUlSQU1CQXRCQlNFUURBTUxRUVloRUF3Q0MwRUhJUkFNQVF0QkNDRVFDMEVBSVJkQkFDRVdRUUFoRkF6TUFRdEJDU0VRUVFFaEZFRUFJUmRCQUNFV0RNc0JDd0pBSUFFaUFTQUNSdzBBUWQwQUlSQU1pUU1MSUFFdEFBQkJMa2NOekFFZ0FVRUJhaUVCREtZQ0N5QUJJZ0VnQWtjTnpBRkIzd0FoRUF5SEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVk2QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQjBBQWhFQXp1QWd0QjRBQWhFQXlHQXd0QjRRQWhFQ0FCSWdFZ0FrWU5oUU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZUxDZ0lBQWFpMEFBRWNOelFFZ0ZFRURSZzNNQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RkF3dEI0Z0FoRUNBQklnRWdBa1lOaEFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRUNhaUVYQTBBZ0FTMEFBQ0FVUWViQ2dJQUFhaTBBQUVjTnpBRWdGRUVDUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUVBd3RCNHdBaEVDQUJJZ0VnQWtZTmd3TWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlbkNnSUFBYWkwQUFFY055d0VnRkVFRFJnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlEQXdzQ1FDQUJJZ0VnQWtjTkFFSGxBQ0VRRElNREN5QUFJQUZCQVdvaUFTQUNFS2lBZ0lBQUloQU56UUVnQVNFQlFkWUFJUkFNNlFJTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQUpBSUJCQnVIOXFEZ3NBQWM4Qnp3SFBBYzhCendIUEFjOEJ6d0VDendFTElBRkJBV29oQVVIU0FDRVFETzBDQ3lBQlFRRnFJUUZCMHdBaEVBenNBZ3NnQVVFQmFpRUJRZFFBSVJBTTZ3SUxJQUZCQVdvaUFTQUNSdzBBQzBIa0FDRVFESUlEQzBIa0FDRVFESUVEQ3dOQUFrQWdBUzBBQUVId3dvQ0FBR290QUFBaUVFRUJSZzBBSUJCQmZtb09BODhCMEFIUkFkSUJDeUFCUVFGcUlnRWdBa2NOQUF0QjVnQWhFQXlBQXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFFTUF3dEI1d0FoRUF6L0Fnc0RRQUpBSUFFdEFBQkI4TVNBZ0FCcUxRQUFJaEJCQVVZTkFBSkFJQkJCZm1vT0JOSUIwd0hVQVFEVkFRc2dBU0VCUWRjQUlSQU01d0lMSUFGQkFXb2lBU0FDUncwQUMwSG9BQ0VRRFA0Q0N3SkFJQUVpQVNBQ1J3MEFRZWtBSVJBTS9nSUxBa0FnQVMwQUFDSVFRWFpxRGhxNkFkVUIxUUc4QWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWNvQjFRSFZBUURUQVFzZ0FVRUJhaUVCQzBFR0lSQU00d0lMQTBBQ1FDQUJMUUFBUWZER2dJQUFhaTBBQUVFQlJnMEFJQUVoQVF5ZUFnc2dBVUVCYWlJQklBSkhEUUFMUWVvQUlSQU0rd0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlc0FJUkFNK2dJTEFrQWdBU0lCSUFKSERRQkI3QUFoRUF6NkFnc2dBVUVCYWlFQkRBRUxBa0FnQVNJQklBSkhEUUJCN1FBaEVBejVBZ3NnQVVFQmFpRUJDMEVFSVJBTTNnSUxBa0FnQVNJVUlBSkhEUUJCN2dBaEVBejNBZ3NnRkNFQkFrQUNRQUpBSUJRdEFBQkI4TWlBZ0FCcUxRQUFRWDlxRGdmVUFkVUIxZ0VBbkFJQkF0Y0JDeUFVUVFGcUlRRU1DZ3NnRkVFQmFpRUJETTBCQzBFQUlSQWdBRUVBTmdJY0lBQkJtNUtBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBejJBZ3NDUUFOQUFrQWdBUzBBQUVId3lJQ0FBR290QUFBaUVFRUVSZzBBQWtBQ1FDQVFRWDlxRGdmU0FkTUIxQUhaQVFBRUFka0JDeUFCSVFGQjJnQWhFQXpnQWdzZ0FVRUJhaUVCUWR3QUlSQU0zd0lMSUFGQkFXb2lBU0FDUncwQUMwSHZBQ0VRRFBZQ0N5QUJRUUZxSVFFTXl3RUxBa0FnQVNJVUlBSkhEUUJCOEFBaEVBejFBZ3NnRkMwQUFFRXZSdzNVQVNBVVFRRnFJUUVNQmdzQ1FDQUJJaFFnQWtjTkFFSHhBQ0VRRFBRQ0N3SkFJQlF0QUFBaUFVRXZSdzBBSUJSQkFXb2hBVUhkQUNFUUROc0NDeUFCUVhacUlnUkJGa3NOMHdGQkFTQUVkRUdKZ0lBQ2NVVU4wd0VNeWdJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQlFkNEFJUkFNMmdJTFFmSUFJUkFNOGdJTEFrQWdBU0lVSUFKSERRQkI5QUFoRUF6eUFnc2dGQ0VCQWtBZ0ZDMEFBRUh3eklDQUFHb3RBQUJCZjJvT0E4a0NsQUlBMUFFTFFlRUFJUkFNMkFJTEFrQWdBU0lVSUFKR0RRQURRQUpBSUJRdEFBQkI4TXFBZ0FCcUxRQUFJZ0ZCQTBZTkFBSkFJQUZCZjJvT0Fzc0NBTlVCQ3lBVUlRRkIzd0FoRUF6YUFnc2dGRUVCYWlJVUlBSkhEUUFMUWZNQUlSQU04UUlMUWZNQUlSQU04QUlMQWtBZ0FTSUJJQUpHRFFBZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZUFBSVJBTTF3SUxRZlVBSVJBTTd3SUxBa0FnQVNJQklBSkhEUUJCOWdBaEVBenZBZ3NnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQkMwRURJUkFNMUFJTEEwQWdBUzBBQUVFZ1J3M0RBaUFCUVFGcUlnRWdBa2NOQUF0Qjl3QWhFQXpzQWdzQ1FDQUJJZ0VnQWtjTkFFSDRBQ0VRRE93Q0N5QUJMUUFBUVNCSERjNEJJQUZCQVdvaEFRenZBUXNnQUNBQklnRWdBaENzZ0lDQUFDSVFEYzRCSUFFaEFReU9BZ3NDUUNBQklnUWdBa2NOQUVINkFDRVFET29DQ3lBRUxRQUFRY3dBUnczUkFTQUVRUUZxSVFGQkV5RVFETThCQ3dKQUlBRWlCQ0FDUncwQVFmc0FJUkFNNlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFOQUlBUXRBQUFnQVVId3pvQ0FBR290QUFCSERkQUJJQUZCQlVZTnpnRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIrd0FoRUF6b0Fnc0NRQ0FCSWdRZ0FrY05BRUg4QUNFUURPZ0NDd0pBQWtBZ0JDMEFBRUc5ZjJvT0RBRFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRSFJBUUhSQVFzZ0JFRUJhaUVCUWVZQUlSQU16d0lMSUFSQkFXb2hBVUhuQUNFUURNNENDd0pBSUFFaUJDQUNSdzBBUWYwQUlSQU01d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnp3RWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmMEFJUkFNNXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRUNFUURNd0JDd0pBSUFFaUJDQUNSdzBBUWY0QUlSQU01Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZiT2dJQUFhaTBBQUVjTnpnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmNEFJUkFNNWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRmlFUURNc0JDd0pBSUFFaUJDQUNSdzBBUWY4QUlSQU01UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZ6T2dJQUFhaTBBQUVjTnpRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmOEFJUkFNNVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQlNFUURNb0JDd0pBSUFFaUJDQUNSdzBBUVlBQklSQU01QUlMSUFRdEFBQkIyUUJIRGNzQklBUkJBV29oQVVFSUlSQU15UUVMQWtBZ0FTSUVJQUpIRFFCQmdRRWhFQXpqQWdzQ1FBSkFJQVF0QUFCQnNuOXFEZ01BekFFQnpBRUxJQVJCQVdvaEFVSHJBQ0VRRE1vQ0N5QUVRUUZxSVFGQjdBQWhFQXpKQWdzQ1FDQUJJZ1FnQWtjTkFFR0NBU0VRRE9JQ0N3SkFBa0FnQkMwQUFFRzRmMm9PQ0FETEFjc0J5d0hMQWNzQnl3RUJ5d0VMSUFSQkFXb2hBVUhxQUNFUURNa0NDeUFFUVFGcUlRRkI3UUFoRUF6SUFnc0NRQ0FCSWdRZ0FrY05BRUdEQVNFUURPRUNDeUFDSUFScklBQW9BZ0FpQVdvaEVDQUVJQUZyUVFKcUlSUUNRQU5BSUFRdEFBQWdBVUdBejRDQUFHb3RBQUJIRGNrQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdFRFlDQUVHREFTRVFET0VDQzBFQUlSQWdBRUVBTmdJQUlCUkJBV29oQVF6R0FRc0NRQ0FCSWdRZ0FrY05BRUdFQVNFUURPQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFScUlSQUNRQU5BSUFRdEFBQWdBVUdEejRDQUFHb3RBQUJIRGNnQklBRkJCRVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHRUFTRVFET0FDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU01oRUF6RkFRc0NRQ0FCSWdRZ0FrY05BRUdGQVNFUUROOENDd0pBQWtBZ0JDMEFBRUcwZjJvT0NBRElBY2dCeUFISUFjZ0J5QUVCeUFFTElBUkJBV29oQVVIdkFDRVFETVlDQ3lBRVFRRnFJUUZCOEFBaEVBekZBZ3NDUUNBQklnUWdBa2NOQUVHR0FTRVFETjRDQ3lBRUxRQUFRY1VBUnczRkFTQUVRUUZxSVFFTWd3SUxBa0FnQVNJRUlBSkhEUUJCaHdFaEVBemRBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCaU0rQWdBQnFMUUFBUnczRkFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmh3RWhFQXpkQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUV0SVJBTXdnRUxBa0FnQVNJRUlBSkhEUUJCaUFFaEVBemNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUnczRUFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmlBRWhFQXpjQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVwSVJBTXdRRUxBa0FnQVNJQklBSkhEUUJCaVFFaEVBemJBZ3RCQVNFUUlBRXRBQUJCM3dCSERjQUJJQUZCQVdvaEFReUJBZ3NDUUNBQklnUWdBa2NOQUVHS0FTRVFETm9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFEUUNBRUxRQUFJQUZCak0rQWdBQnFMUUFBUnczQkFTQUJRUUZHRGE4Q0lBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZb0JJUkFNMlFJTEFrQWdBU0lFSUFKSERRQkJpd0VoRUF6WkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJqcytBZ0FCcUxRQUFSdzNCQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaXdFaEVBelpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUNJUkFNdmdFTEFrQWdBU0lFSUFKSERRQkJqQUVoRUF6WUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzNBQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCakFFaEVBellBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWZJUkFNdlFFTEFrQWdBU0lFSUFKSERRQkJqUUVoRUF6WEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4cytBZ0FCcUxRQUFSdzIvQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCalFFaEVBelhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUpJUkFNdkFFTEFrQWdBU0lFSUFKSERRQkJqZ0VoRUF6V0Fnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQXZ3Ry9BYjhCdndHL0FRRy9BUXNnQkVFQmFpRUJRZmdBSVJBTXZRSUxJQVJCQVdvaEFVSDVBQ0VRREx3Q0N3SkFJQUVpQkNBQ1J3MEFRWThCSVJBTTFRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRWkhQZ0lBQWFpMEFBRWNOdlFFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVk4QklSQU0xUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHQ0VRRExvQkN3SkFJQUVpQkNBQ1J3MEFRWkFCSVJBTTFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWmZQZ0lBQWFpMEFBRWNOdkFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpBQklSQU0xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGeUVRRExrQkN3SkFJQUVpQkNBQ1J3MEFRWkVCSVJBTTB3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRWnJQZ0lBQWFpMEFBRWNOdXdFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpFQklSQU0wd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGU0VRRExnQkN3SkFJQUVpQkNBQ1J3MEFRWklCSVJBTTBnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYUhQZ0lBQWFpMEFBRWNOdWdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpJQklSQU0wZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIaUVRRExjQkN3SkFJQUVpQkNBQ1J3MEFRWk1CSVJBTTBRSUxJQVF0QUFCQnpBQkhEYmdCSUFSQkFXb2hBVUVLSVJBTXRnRUxBa0FnQkNBQ1J3MEFRWlFCSVJBTTBBSUxBa0FDUUNBRUxRQUFRYjkvYWc0UEFMa0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQkFia0JDeUFFUVFGcUlRRkIvZ0FoRUF5M0Fnc2dCRUVCYWlFQlFmOEFJUkFNdGdJTEFrQWdCQ0FDUncwQVFaVUJJUkFNendJTEFrQUNRQ0FFTFFBQVFiOS9hZzREQUxnQkFiZ0JDeUFFUVFGcUlRRkIvUUFoRUF5MkFnc2dCRUVCYWlFRVFZQUJJUkFNdFFJTEFrQWdCQ0FDUncwQVFaWUJJUkFNemdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFhZlBnSUFBYWkwQUFFY050Z0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWllCSVJBTXpnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkN5RVFETE1CQ3dKQUlBUWdBa2NOQUVHWEFTRVFETTBDQ3dKQUFrQUNRQUpBSUFRdEFBQkJVMm9PSXdDNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQkFiZ0J1QUc0QWJnQnVBRUN1QUc0QWJnQkE3Z0JDeUFFUVFGcUlRRkIrd0FoRUF5MkFnc2dCRUVCYWlFQlFmd0FJUkFNdFFJTElBUkJBV29oQkVHQkFTRVFETFFDQ3lBRVFRRnFJUVJCZ2dFaEVBeXpBZ3NDUUNBRUlBSkhEUUJCbUFFaEVBek1BZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCcWMrQWdBQnFMUUFBUncyMEFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1BRWhFQXpNQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVaSVJBTXNRRUxBa0FnQkNBQ1J3MEFRWmtCSVJBTXl3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYTdQZ0lBQWFpMEFBRWNOc3dFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVprQklSQU15d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCaUVRRExBQkN3SkFJQVFnQWtjTkFFR2FBU0VRRE1vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzB6NENBQUdvdEFBQkhEYklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdhQVNFUURNb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSd2hFQXl2QVFzQ1FDQUVJQUpIRFFCQm13RWhFQXpKQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRzK0FnQUJxTFFBQVJ3MnhBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtd0VoRUF6SkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbklSQU1yZ0VMQWtBZ0JDQUNSdzBBUVp3QklSQU15QUlMQWtBQ1FDQUVMUUFBUWF4L2FnNENBQUd4QVFzZ0JFRUJhaUVFUVlZQklSQU1yd0lMSUFSQkFXb2hCRUdIQVNFUURLNENDd0pBSUFRZ0FrY05BRUdkQVNFUURNY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUc0ejRDQUFHb3RBQUJIRGE4QklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZEFTRVFETWNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1loRUF5c0FRc0NRQ0FFSUFKSERRQkJuZ0VoRUF6R0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1cytBZ0FCcUxRQUFSdzJ1QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbmdFaEVBekdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRURJUkFNcXdFTEFrQWdCQ0FDUncwQVFaOEJJUkFNeFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05yUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjhCSVJBTXhRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkRDRVFES29CQ3dKQUlBUWdBa2NOQUVHZ0FTRVFETVFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVHOHo0Q0FBR290QUFCSERhd0JJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2dBU0VRRE1RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVEwaEVBeXBBUXNDUUNBRUlBSkhEUUJCb1FFaEVBekRBZ3NDUUFKQUlBUXRBQUJCdW45cURnc0FyQUdzQWF3QnJBR3NBYXdCckFHc0Fhd0JBYXdCQ3lBRVFRRnFJUVJCaXdFaEVBeXFBZ3NnQkVFQmFpRUVRWXdCSVJBTXFRSUxBa0FnQkNBQ1J3MEFRYUlCSVJBTXdnSUxJQVF0QUFCQjBBQkhEYWtCSUFSQkFXb2hCQXpwQVFzQ1FDQUVJQUpIRFFCQm93RWhFQXpCQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NCcWdHcUFhb0JxZ0dxQVFDcUFRc2dCRUVCYWlFRVFZNEJJUkFNcUFJTElBUkJBV29oQVVFaUlSQU1wZ0VMQWtBZ0JDQUNSdzBBUWFRQklSQU13QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWNEUGdJQUFhaTBBQUVjTnFBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhUUJJUkFNd0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCSFNFUURLVUJDd0pBSUFRZ0FrY05BRUdsQVNFUURMOENDd0pBQWtBZ0JDMEFBRUd1ZjJvT0F3Q29BUUdvQVFzZ0JFRUJhaUVFUVpBQklSQU1wZ0lMSUFSQkFXb2hBVUVFSVJBTXBBRUxBa0FnQkNBQ1J3MEFRYVlCSVJBTXZnSUxBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUtvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQWFvQkFhb0JxZ0VDcWdHcUFRT3FBYW9CQktvQkN5QUVRUUZxSVFSQmlBRWhFQXlvQWdzZ0JFRUJhaUVFUVlrQklSQU1wd0lMSUFSQkFXb2hCRUdLQVNFUURLWUNDeUFFUVFGcUlRUkJqd0VoRUF5bEFnc2dCRUVCYWlFRVFaRUJJUkFNcEFJTEFrQWdCQ0FDUncwQVFhY0JJUkFNdlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05wUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWNCSVJBTXZRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVTRVFES0lCQ3dKQUlBUWdBa2NOQUVHb0FTRVFETHdDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIQ3o0Q0FBR290QUFCSERhUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR29BU0VRREx3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVN3aEVBeWhBUXNDUUNBRUlBSkhEUUJCcVFFaEVBeTdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCeGMrQWdBQnFMUUFBUncyakFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFRRWhFQXk3QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVySVJBTW9BRUxBa0FnQkNBQ1J3MEFRYW9CSVJBTXVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRY3JQZ0lBQWFpMEFBRWNOb2dFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFvQklSQU11Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGQ0VRREo4QkN3SkFJQVFnQWtjTkFFR3JBU0VRRExrQ0N3SkFBa0FDUUFKQUlBUXRBQUJCdm45cURnOEFBUUtrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQkE2UUJDeUFFUVFGcUlRUkJrd0VoRUF5aUFnc2dCRUVCYWlFRVFaUUJJUkFNb1FJTElBUkJBV29oQkVHVkFTRVFES0FDQ3lBRVFRRnFJUVJCbGdFaEVBeWZBZ3NDUUNBRUlBSkhEUUJCckFFaEVBeTRBZ3NnQkMwQUFFSEZBRWNObndFZ0JFRUJhaUVFRE9BQkN3SkFJQVFnQWtjTkFFR3RBU0VRRExjQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSE56NENBQUdvdEFBQkhEWjhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd0QVNFUURMY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRNGhFQXljQVFzQ1FDQUVJQUpIRFFCQnJnRWhFQXkyQWdzZ0JDMEFBRUhRQUVjTm5RRWdCRUVCYWlFQlFTVWhFQXliQVFzQ1FDQUVJQUpIRFFCQnJ3RWhFQXkxQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3MmRBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyd0VoRUF5MUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFcUlSQU1tZ0VMQWtBZ0JDQUNSdzBBUWJBQklSQU10QUlMQWtBQ1FDQUVMUUFBUWF0L2FnNExBSjBCblFHZEFaMEJuUUdkQVowQm5RR2RBUUdkQVFzZ0JFRUJhaUVFUVpvQklSQU1td0lMSUFSQkFXb2hCRUdiQVNFUURKb0NDd0pBSUFRZ0FrY05BRUd4QVNFUURMTUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0ZBQ2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BRUJuQUVMSUFSQkFXb2hCRUdaQVNFUURKb0NDeUFFUVFGcUlRUkJuQUVoRUF5WkFnc0NRQ0FFSUFKSERRQkJzZ0VoRUF5eUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkIyYytBZ0FCcUxRQUFSdzJhQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCc2dFaEVBeXlBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWhJUkFNbHdFTEFrQWdCQ0FDUncwQVFiTUJJUkFNc1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFkM1BnSUFBYWkwQUFFY05tUUVnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYk1CSVJBTXNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdpRVFESllCQ3dKQUlBUWdBa2NOQUVHMEFTRVFETEFDQ3dKQUFrQUNRQ0FFTFFBQVFidC9hZzRSQUpvQm1nR2FBWm9CbWdHYUFab0JtZ0dhQVFHYUFab0JtZ0dhQVpvQkFwb0JDeUFFUVFGcUlRUkJuUUVoRUF5WUFnc2dCRUVCYWlFRVFaNEJJUkFNbHdJTElBUkJBV29oQkVHZkFTRVFESllDQ3dKQUlBUWdBa2NOQUVHMUFTRVFESzhDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIa3o0Q0FBR290QUFCSERaY0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzFBU0VRREs4Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNnaEVBeVVBUXNDUUNBRUlBSkhEUUJCdGdFaEVBeXVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCNnMrQWdBQnFMUUFBUncyV0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRnRWhFQXl1QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVISVJBTWt3RUxBa0FnQkNBQ1J3MEFRYmNCSVJBTXJRSUxBa0FDUUNBRUxRQUFRYnQvYWc0T0FKWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVFHV0FRc2dCRUVCYWlFRVFhRUJJUkFNbEFJTElBUkJBV29oQkVHaUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVHNEFTRVFES3dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERaUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzRBU0VRREt3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJJaEVBeVJBUXNDUUNBRUlBSkhEUUJCdVFFaEVBeXJBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUncyVEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVRRWhFQXlyQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVnSVJBTWtBRUxBa0FnQkNBQ1J3MEFRYm9CSVJBTXFnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOa2dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJvQklSQU1xZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEeUVRREk4QkN3SkFJQVFnQWtjTkFFRzdBU0VRREtrQ0N3SkFBa0FnQkMwQUFFRzNmMm9PQndDU0FaSUJrZ0dTQVpJQkFaSUJDeUFFUVFGcUlRUkJwUUVoRUF5UUFnc2dCRUVCYWlFRVFhWUJJUkFNandJTEFrQWdCQ0FDUncwQVFid0JJUkFNcUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCMm9oRUFKQUEwQWdCQzBBQUNBQlFmVFBnSUFBYWkwQUFFY05rQUVnQVVFSFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYndCSVJBTXFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkd5RVFESTBCQ3dKQUlBUWdBa2NOQUVHOUFTRVFES2NDQ3dKQUFrQUNRQ0FFTFFBQVFiNS9hZzRTQUpFQmtRR1JBWkVCa1FHUkFaRUJrUUdSQVFHUkFaRUJrUUdSQVpFQmtRRUNrUUVMSUFSQkFXb2hCRUdrQVNFUURJOENDeUFFUVFGcUlRUkJwd0VoRUF5T0Fnc2dCRUVCYWlFRVFhZ0JJUkFNalFJTEFrQWdCQ0FDUncwQVFiNEJJUkFNcGdJTElBUXRBQUJCemdCSERZMEJJQVJCQVdvaEJBelBBUXNDUUNBRUlBSkhEUUJCdndFaEVBeWxBZ3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBQUVDQTV3QkJBVUduQUdjQVp3QkJ3Z0pDZ3VjQVF3TkRnK2NBUXNnQkVFQmFpRUJRZWdBSVJBTW1nSUxJQVJCQVdvaEFVSHBBQ0VRREprQ0N5QUVRUUZxSVFGQjdnQWhFQXlZQWdzZ0JFRUJhaUVCUWZJQUlSQU1sd0lMSUFSQkFXb2hBVUh6QUNFUURKWUNDeUFFUVFGcUlRRkI5Z0FoRUF5VkFnc2dCRUVCYWlFQlFmY0FJUkFNbEFJTElBUkJBV29oQVVINkFDRVFESk1DQ3lBRVFRRnFJUVJCZ3dFaEVBeVNBZ3NnQkVFQmFpRUVRWVFCSVJBTWtRSUxJQVJCQVdvaEJFR0ZBU0VRREpBQ0N5QUVRUUZxSVFSQmtnRWhFQXlQQWdzZ0JFRUJhaUVFUVpnQklSQU1qZ0lMSUFSQkFXb2hCRUdnQVNFUURJMENDeUFFUVFGcUlRUkJvd0VoRUF5TUFnc2dCRUVCYWlFRVFhb0JJUkFNaXdJTEFrQWdCQ0FDUmcwQUlBQkJrSUNBZ0FBMkFnZ2dBQ0FFTmdJRVFhc0JJUkFNaXdJTFFjQUJJUkFNb3dJTElBQWdCU0FDRUtxQWdJQUFJZ0VOaXdFZ0JTRUJERndMQWtBZ0JpQUNSZzBBSUFaQkFXb2hCUXlOQVF0QndnRWhFQXloQWdzRFFBSkFJQkF0QUFCQmRtb09CSXdCQUFDUEFRQUxJQkJCQVdvaUVDQUNSdzBBQzBIREFTRVFES0FDQ3dKQUlBY2dBa1lOQUNBQVFaR0FnSUFBTmdJSUlBQWdCellDQkNBSElRRkJBU0VRREljQ0MwSEVBU0VRREo4Q0N3SkFJQWNnQWtjTkFFSEZBU0VRREo4Q0N3SkFBa0FnQnkwQUFFRjJhZzRFQWM0QnpnRUF6Z0VMSUFkQkFXb2hCZ3lOQVFzZ0IwRUJhaUVGRElrQkN3SkFJQWNnQWtjTkFFSEdBU0VRREo0Q0N3SkFBa0FnQnkwQUFFRjJhZzRYQVk4Qmp3RUJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBSThCQ3lBSFFRRnFJUWNMUWJBQklSQU1oQUlMQWtBZ0NDQUNSdzBBUWNnQklSQU1uUUlMSUFndEFBQkJJRWNOalFFZ0FFRUFPd0V5SUFoQkFXb2hBVUd6QVNFUURJTUNDeUFCSVJjQ1FBTkFJQmNpQnlBQ1JnMEJJQWN0QUFCQlVHcEIvd0Z4SWhCQkNrOE56QUVDUUNBQUx3RXlJaFJCbVROTERRQWdBQ0FVUVFwc0loUTdBVElnRUVILy93TnpJQlJCL3Y4RGNVa05BQ0FIUVFGcUlSY2dBQ0FVSUJCcUloQTdBVElnRUVILy93TnhRZWdIU1EwQkN3dEJBQ0VRSUFCQkFEWUNIQ0FBUWNHSmdJQUFOZ0lRSUFCQkRUWUNEQ0FBSUFkQkFXbzJBaFFNbkFJTFFjY0JJUkFNbXdJTElBQWdDQ0FDRUs2QWdJQUFJaEJGRGNvQklCQkJGVWNOakFFZ0FFSElBVFlDSENBQUlBZzJBaFFnQUVISmw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURKb0NDd0pBSUFrZ0FrY05BRUhNQVNFUURKb0NDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdDUzBBQUVGUWFnNEtsZ0dWQVFBQkFnTUVCUVlJbHdFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNamdFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd5TkFRc0NRQ0FLSUFKSERRQkJ6Z0VoRUF5WkFnc2dDaTBBQUVFdVJ3Mk9BU0FLUVFGcUlRa015Z0VMSUFzZ0FrY05qZ0ZCMEFFaEVBeVhBZ3NDUUNBTElBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBczJBZ1JCdHdFaEVBeitBUXRCMFFFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCMGdFaEVBeVdBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFRWFpRUxBMEFnQkMwQUFDQVFRZnpQZ0lBQWFpMEFBRWNOamdFZ0VFRUVSZzNwQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIU0FTRVFESlVDQ3lBQUlBd2dBaENzZ0lDQUFDSUJEWTBCSUF3aEFReTRBUXNDUUNBRUlBSkhEUUJCMUFFaEVBeVVBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQmFpRU1BMEFnQkMwQUFDQVFRWUhRZ0lBQWFpMEFBRWNOandFZ0VFRUJSZzJPQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIVUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVIV0FTRVFESk1DQ3lBQ0lBUnJJQUFvQWdBaUVHb2hGQ0FFSUJCclFRSnFJUXNEUUNBRUxRQUFJQkJCZzlDQWdBQnFMUUFBUncyT0FTQVFRUUpHRFpBQklCQkJBV29oRUNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFkWUJJUkFNa2dJTEFrQWdCQ0FDUncwQVFkY0JJUkFNa2dJTEFrQUNRQ0FFTFFBQVFidC9hZzRRQUk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandFQmp3RUxJQVJCQVdvaEJFRzdBU0VRRFBrQkN5QUVRUUZxSVFSQnZBRWhFQXo0QVFzQ1FDQUVJQUpIRFFCQjJBRWhFQXlSQWdzZ0JDMEFBRUhJQUVjTmpBRWdCRUVCYWlFRURNUUJDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUcrQVNFUURQY0JDMEhaQVNFUURJOENDd0pBSUFRZ0FrY05BRUhhQVNFUURJOENDeUFFTFFBQVFjZ0FSZzNEQVNBQVFRRTZBQ2dNdVFFTElBQkJBam9BTHlBQUlBUWdBaENtZ0lDQUFDSVFEWTBCUWNJQklSQU05QUVMSUFBdEFDaEJmMm9PQXJjQnVRRzRBUXNEUUFKQUlBUXRBQUJCZG1vT0JBQ09BWTRCQUk0QkN5QUVRUUZxSWdRZ0FrY05BQXRCM1FFaEVBeUxBZ3NnQUVFQU9nQXZJQUF0QUMxQkJIRkZEWVFDQ3lBQVFRQTZBQzhnQUVFQk9nQTBJQUVoQVF5TUFRc2dFRUVWUmczYUFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBeUlBZ3NDUUNBQUlCQWdBaEMwZ0lDQUFDSUVEUUFnRUNFQkRJRUNDd0pBSUFSQkZVY05BQ0FBUVFNMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlJQWdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWh3SUxJQkJCRlVZTjFnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1oZ0lMSUFBb0FnUWhGeUFBUVFBMkFnUWdFQ0FScDJvaUZpRUJJQUFnRnlBUUlCWWdGQnNpRUJDMWdJQ0FBQ0lVUlEyTkFTQUFRUWMyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTWhRSUxJQUFnQUM4Qk1FR0FBWEk3QVRBZ0FTRUJDMEVxSVJBTTZnRUxJQkJCRlVZTjBRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZT01nSUFBTmdJUUlBQkJFellDREVFQUlSQU1nZ0lMSUJCQkZVWU56d0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNZ1FJTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESTBCQ3lBQVFRdzJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTWdBSUxJQkJCRlVZTnpBRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU0vd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJd0JDeUFBUVEwMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL2dFTElCQkJGVVlOeVFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTS9RRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElzQkN5QUFRUTQyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhBbFlDQUFEWUNFQ0FBUVFJMkFneEJBQ0VRRFBzQkN5QVFRUlZHRGNVQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQb0JDeUFBUVJBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU0rUUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRQRUJDeUFBUVJFMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNK0FFTElCQkJGVVlOd1FFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTTl3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElnQkN5QUFRUk0yQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRPMEJDeUFBUVJRMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOVFFTElCQkJGVVlOdlFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTTlBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElZQkN5QUFRUlkyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04d0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzNnSUNBQUNJRURRQWdBVUVCYWlFQkRPa0JDeUFBUVJjMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOGdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURQRUJDMElCSVJFTElCQkJBV29oQVFKQUlBQXBBeUFpRWtMLy8vLy8vLy8vL3c5V0RRQWdBQ0FTUWdTR0lCR0VOd01nSUFFaEFReUVBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYTJKZ0lBQU5nSVFJQUJCRERZQ0RFRUFJUkFNN3dFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPNEJDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOY3lBQVFRVTJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNN1FFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcW5JQ0FBRFlDRUNBQVFRODJBZ3hCQUNFUURPd0JDeUFBSUJBZ0FoQzBnSUNBQUNJQkRRRWdFQ0VCQzBFT0lSQU0wUUVMQWtBZ0FVRVZSdzBBSUFCQkFqWUNIQ0FBSUJBMkFoUWdBRUd3bUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRE9vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBenBBUXNnQVVFQmFpRVFBa0FnQUM4Qk1DSUJRWUFCY1VVTkFBSkFJQUFnRUNBQ0VMdUFnSUFBSWdFTkFDQVFJUUVNY0FzZ0FVRVZSdzI2QVNBQVFRVTJBaHdnQUNBUU5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc0NRQ0FCUWFBRWNVR2dCRWNOQUNBQUxRQXRRUUp4RFFBZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUVphVGdJQUFOZ0lRSUFCQkJEWUNERUVBSVJBTTZRRUxJQUFnRUNBQ0VMMkFnSUFBR2lBUUlRRUNRQUpBQWtBQ1FBSkFJQUFnRUNBQ0VMT0FnSUFBRGhZQ0FRQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURCQXNnQUVFQk9nQXVDeUFBSUFBdkFUQkJ3QUJ5T3dFd0lCQWhBUXRCSmlFUURORUJDeUFBUVNNMkFod2dBQ0FRTmdJVUlBQkJwWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRXTGdJQUFOZ0lRSUFCQkVUWUNERUVBSVJBTTZBRUxJQUF0QUMxQkFYRkZEUUZCd3dFaEVBek9BUXNDUUNBTklBSkdEUUFEUUFKQUlBMHRBQUJCSUVZTkFDQU5JUUVNeEFFTElBMUJBV29pRFNBQ1J3MEFDMEVsSVJBTTV3RUxRU1VoRUF6bUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEUkN2Z0lDQUFDSUVSUTJ0QVNBQVFTWTJBaHdnQUNBRU5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTTVRRUxJQkJCRlVZTnF3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMk5nSUFBTmdJUUlBQkJIVFlDREVFQUlSQU01QUVMSUFCQkp6WUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpqQVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmZtb09Cd1lGQlFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVySVJBTXlnRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3Jrb0NBQURZQ0VDQUFRUXMyQWd4QkFDRVFET0lCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1RUUFoRUF6aEFRc2dBRUVBT2dBc0lCQWhBUXk5QVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNBQVVMSUFBZ0FDOEJNRUVJY2pzQk1Bd0RDMEVDSVJRTUFRdEJCQ0VVQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQlJ5T3dFd0N5QVFJUUVMUVNraEVBekZBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNVZ0lBQU5nSVFJQUJCQXpZQ0RFRUFJUkFNM1FFTEFrQWdEaTBBQUVFTlJ3MEFJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhVTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemRBUXNnQUMwQUxVRUJjVVVOQVVIRUFTRVFETU1CQ3dKQUlBNGdBa2NOQUVFdElSQU0zQUVMQWtBQ1FBTkFBa0FnRGkwQUFFRjJhZzRFQWdBQUF3QUxJQTVCQVdvaURpQUNSdzBBQzBFdElSQU0zUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEaUVCREhRTElBQkJMRFlDSENBQUlBNDJBaFFnQUNBQk5nSU1RUUFoRUF6Y0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FPRUxHQWdJQUFJZ0VOQUNBT1FRRnFJUUVNY3dzZ0FFRXNOZ0ljSUFBZ0FUWUNEQ0FBSUE1QkFXbzJBaFJCQUNFUUROc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FPRUxHQWdJQUFJZ1FOb0FFZ0RpRUJETTRCQ3lBUVFTeEhEUUVnQVVFQmFpRVFRUUVoQVFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNCQUFMSUJBaEFRd0VDMEVDSVFFTUFRdEJCQ0VCQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQUZ5T3dFd0lCQWhBUXdCQ3lBQUlBQXZBVEJCQ0hJN0FUQWdFQ0VCQzBFNUlSQU12d0VMSUFCQkFEb0FMQ0FCSVFFTFFUUWhFQXk5QVFzZ0FDQUFMd0V3UVNCeU93RXdJQUVoQVF3Q0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCQTBBSUFFaEFRekhBUXNnQUVFM05nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETlFCQ3lBQVFRZzZBQ3dnQVNFQkMwRXdJUkFNdVFFTEFrQWdBQzBBS0VFQlJnMEFJQUVoQVF3RUN5QUFMUUF0UVFoeFJRMlRBU0FCSVFFTUF3c2dBQzBBTUVFZ2NRMlVBVUhGQVNFUURMY0JDd0pBSUE4Z0FrWU5BQUpBQTBBQ1FDQVBMUUFBUVZCcUlnRkIvd0Z4UVFwSkRRQWdEeUVCUVRVaEVBeTZBUXNnQUNrRElDSVJRcG16NXN5WnMrYk1HVllOQVNBQUlCRkNDbjRpRVRjRElDQVJJQUd0UXY4Qmd5SVNRbitGVmcwQklBQWdFU0FTZkRjRElDQVBRUUZxSWc4Z0FrY05BQXRCT1NFUURORUJDeUFBS0FJRUlRSWdBRUVBTmdJRUlBQWdBaUFQUVFGcUlnUVFzWUNBZ0FBaUFnMlZBU0FFSVFFTXd3RUxRVGtoRUF6UEFRc0NRQ0FBTHdFd0lnRkJDSEZGRFFBZ0FDMEFLRUVCUncwQUlBQXRBQzFCQ0hGRkRaQUJDeUFBSUFGQjkvc0RjVUdBQkhJN0FUQWdEeUVCQzBFM0lSQU10QUVMSUFBZ0FDOEJNRUVRY2pzQk1BeXJBUXNnRUVFVlJnMkxBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4STZBZ0FBMkFoQWdBRUVjTmdJTVFRQWhFQXpMQVFzZ0FFSERBRFlDSENBQUlBRTJBZ3dnQUNBTlFRRnFOZ0lVUVFBaEVBektBUXNDUUNBQkxRQUFRVHBIRFFBZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSytBZ0lBQUloQU5BQ0FCUVFGcUlRRU1Zd3NnQUVIREFEWUNIQ0FBSUJBMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF6S0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFiR1JnSUFBTmdJUUlBQkJDallDREVFQUlSQU15UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdnbVlDQUFEWUNFQ0FBUVI0MkFneEJBQ0VRRE1nQkN5QUFRUUEyQWdBTElBQkJnQkk3QVNvZ0FDQVhRUUZxSWdFZ0FoQ29nSUNBQUNJUURRRWdBU0VCQzBISEFDRVFES3dCQ3lBUVFSVkhEWU1CSUFCQjBRQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6RUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpEQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNHb2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBUVFBMkFnQkJBQ0VRRE1JQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReGRDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETUVCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZQ1JnSUFBTmdJUUlBQkJDVFlDREF6QUFRc2dFRUVWUmcxOUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHVWpZQ0FBRFlDRUNBQVFTRTJBZ3hCQUNFUURMOEJDMEVCSVJaQkFDRVhRUUFoRkVFQklSQUxJQUFnRURvQUt5QUJRUUZxSVFFQ1FBSkFJQUF0QUMxQkVIRU5BQUpBQWtBQ1FDQUFMUUFxRGdNQkFBSUVDeUFXUlEwRERBSUxJQlFOQVF3Q0N5QVhSUTBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFyWUNBZ0FBaUVBMEFJQUVoQVF4Y0N5QUFRZGdBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMNEJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXl0QVFzZ0FFSFpBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5OUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1xd0VMSUFCQjJnQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdkFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLa0JDeUFBUWR3QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHNCQ3dKQUlBRXRBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0FVRUJhaUVCUWM4QUlSQU1vZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtjQkN5QUFRZDRBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMb0JDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1VFalR3MEFJQUVoQVF4WkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjA0bUFnQUEyQWhBZ0FFRUlOZ0lNUVFBaEVBeTVBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQXkzQVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJVWNOQUNBQklRRU1WZ3NnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnVLZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdGdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBJaEJCWFdwQkMwOE5BQ0FCSVFFTVZRc0NRQ0FRUVFaTERRQkJBU0FRZEVIS0FIRkZEUUFnQVNFQkRGVUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOTRtQWdBQTJBaEFnQUVFSU5nSU1ETFVCQ3lBUVFSVkdEWEVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNdEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGUUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGRUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaW9DQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREs4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzRCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREt3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjNJaUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXJBUXNnRUVFL1J3MEJJQUZCQVdvaEFRdEJCU0VRREpBQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJTZ0lBQU5nSVFJQUJCQnpZQ0RBeW9BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXltQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVJnc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeWxBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFNBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5a0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIVEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlqQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVF3c2dBRUhsQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWlBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY09QZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNb1FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNEQXlmQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW5nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSCtrWUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjBCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCanB1QWdBQTJBaEFnQUVFR05nSU1RUUFoRUF5Y0FRc2dFRUVWUmcxWElBQkJBRFlDSENBQUlBRTJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURKc0JDeUFBUVFBMkFnQWdFRUVCYWlFQlFTUWhFQXNnQUNBUU9nQXBJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQUVRcTRDQWdBQWlFQTFVSUFFaEFRdytDeUFBUVFBMkFnQUxRUUFoRUNBQVFRQTJBaHdnQUNBRU5nSVVJQUJCOFp1QWdBQTJBaEFnQUVFR05nSU1ESmNCQ3lBQlFSVkdEVkFnQUVFQU5nSWNJQUFnQlRZQ0ZDQUFRZkNNZ0lBQU5nSVFJQUJCR3pZQ0RFRUFJUkFNbGdFTElBQW9BZ1FoQlNBQVFRQTJBZ1FnQUNBRklCQVFxWUNBZ0FBaUJRMEJJQkJCQVdvaEJRdEJyUUVoRUF4N0N5QUFRY0VCTmdJY0lBQWdCVFlDRENBQUlCQkJBV28yQWhSQkFDRVFESk1CQ3lBQUtBSUVJUVlnQUVFQU5nSUVJQUFnQmlBUUVLbUFnSUFBSWdZTkFTQVFRUUZxSVFZTFFhNEJJUkFNZUFzZ0FFSENBVFlDSENBQUlBWTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVFBUXNnQUVFQU5nSWNJQUFnQnpZQ0ZDQUFRWmVMZ0lBQU5nSVFJQUJCRFRZQ0RFRUFJUkFNandFTElBQkJBRFlDSENBQUlBZzJBaFFnQUVIamtJQ0FBRFlDRUNBQVFRazJBZ3hCQUNFUURJNEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXlOQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQ1VFQmFpRUlBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdDQkN0Z0lDQUFDSVFSUTA5SUFCQnlRRTJBaHdnQUNBSU5nSVVJQUFnRURZQ0RFRUFJUkFNakFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBZ1FyWUNBZ0FBaUJFVU5kaUFBUWNvQk5nSWNJQUFnQ0RZQ0ZDQUFJQVEyQWd4QkFDRVFESXNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSkVLMkFnSUFBSWdSRkRYUWdBRUhMQVRZQ0hDQUFJQWsyQWhRZ0FDQUVOZ0lNUVFBaEVBeUtBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ2hDdGdJQ0FBQ0lFUlExeUlBQkJ6UUUyQWh3Z0FDQUtOZ0lVSUFBZ0JEWUNERUVBSVJBTWlRRUxBa0FnQ3kwQUFFRlFhaUlRUWY4QmNVRUtUdzBBSUFBZ0VEb0FLaUFMUVFGcUlRcEJ0Z0VoRUF4d0N5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUxFSzJBZ0lBQUlnUkZEWEFnQUVIUEFUWUNIQ0FBSUFzMkFoUWdBQ0FFTmdJTVFRQWhFQXlJQVFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQ0FBUVFBMkFnQkJBQ0VRREljQkN5QUJRUlZHRFQ4Z0FFRUFOZ0ljSUFBZ0REWUNGQ0FBUWN5T2dJQUFOZ0lRSUFCQklEWUNERUVBSVJBTWhnRUxJQUJCZ1FRN0FTZ2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdERUVCYWlJTUVLdUFnSUFBSWhCRkRUZ2dBRUhUQVRZQ0hDQUFJQXcyQWhRZ0FDQVFOZ0lNUVFBaEVBeUZBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWRpYmdJQUFOZ0lRSUFCQkNEWUNEQXlEQVFzZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0MwRUJhaUlMRUt1QWdJQUFJaEFOQVVIR0FTRVFER2tMSUFCQkFqb0FLQXhWQ3lBQVFkVUJOZ0ljSUFBZ0N6WUNGQ0FBSUJBMkFneEJBQ0VRRElBQkN5QVFRUlZHRFRjZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWFTTWdJQUFOZ0lRSUFCQkVEWUNERUVBSVJBTWZ3c2dBQzBBTkVFQlJ3MDBJQUFnQkNBQ0VMeUFnSUFBSWhCRkRUUWdFRUVWUncwMUlBQkIzQUUyQWh3Z0FDQUVOZ0lVSUFCQjFaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeCtDMEVBSVJBZ0FFRUFOZ0ljSUFCQnI0dUFnQUEyQWhBZ0FFRUNOZ0lNSUFBZ0ZFRUJhallDRkF4OUMwRUFJUkFNWXd0QkFpRVFER0lMUVEwaEVBeGhDMEVQSVJBTVlBdEJKU0VRREY4TFFSTWhFQXhlQzBFVklSQU1YUXRCRmlFUURGd0xRUmNoRUF4YkMwRVlJUkFNV2d0QkdTRVFERmtMUVJvaEVBeFlDMEViSVJBTVZ3dEJIQ0VRREZZTFFSMGhFQXhWQzBFZklSQU1WQXRCSVNFUURGTUxRU01oRUF4U0MwSEdBQ0VRREZFTFFTNGhFQXhRQzBFdklSQU1Ud3RCT3lFUURFNExRVDBoRUF4TkMwSElBQ0VRREV3TFFja0FJUkFNU3d0Qnl3QWhFQXhLQzBITUFDRVFERWtMUWM0QUlSQU1TQXRCMFFBaEVBeEhDMEhWQUNFUURFWUxRZGdBSVJBTVJRdEIyUUFoRUF4RUMwSGJBQ0VRREVNTFFlUUFJUkFNUWd0QjVRQWhFQXhCQzBIeEFDRVFERUFMUWZRQUlSQU1Qd3RCalFFaEVBdytDMEdYQVNFUUREMExRYWtCSVJBTVBBdEJyQUVoRUF3N0MwSEFBU0VRRERvTFFia0JJUkFNT1F0QnJ3RWhFQXc0QzBHeEFTRVFERGNMUWJJQklSQU1OZ3RCdEFFaEVBdzFDMEcxQVNFUUREUUxRYm9CSVJBTU13dEJ2UUVoRUF3eUMwRy9BU0VRRERFTFFjRUJJUkFNTUFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWVtTGdJQUFOZ0lRSUFCQkh6WUNERUVBSVJBTVNBc2dBRUhiQVRZQ0hDQUFJQVEyQWhRZ0FFSDZsb0NBQURZQ0VDQUFRUlUyQWd4QkFDRVFERWNMSUFCQitBQTJBaHdnQUNBTU5nSVVJQUJCeXBpQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4R0N5QUFRZEVBTmdJY0lBQWdCVFlDRkNBQVFiQ1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SUXNnQUVINUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXhFQ3lBQVFmZ0FOZ0ljSUFBZ0FUWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVF3c2dBRUhrQURZQ0hDQUFJQUUyQWhRZ0FFSGpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERUlMSUFCQjF3QTJBaHdnQUNBQk5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnVZMkFnQUEyQWhBZ0FFRWFOZ0lNUVFBaEVBeEFDeUFBUWNJQU5nSWNJQUFnQVRZQ0ZDQUFRZU9ZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUHdzZ0FFRUFOZ0lFSUFBZ0R5QVBFTEdBZ0lBQUlnUkZEUUVnQUVFNk5nSWNJQUFnQkRZQ0RDQUFJQTlCQVdvMkFoUkJBQ0VRREQ0TElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN4Z0lDQUFDSUVSUTBBSUFCQk96WUNIQ0FBSUFRMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF3K0N5QUJRUUZxSVFFTUxRc2dEMEVCYWlFQkRDMExJQUJCQURZQ0hDQUFJQTgyQWhRZ0FFSGtrb0NBQURZQ0VDQUFRUVEyQWd4QkFDRVFERHNMSUFCQk5qWUNIQ0FBSUFRMkFoUWdBQ0FDTmdJTVFRQWhFQXc2Q3lBQVFTNDJBaHdnQUNBT05nSVVJQUFnQkRZQ0RFRUFJUkFNT1FzZ0FFSFFBRFlDSENBQUlBRTJBaFFnQUVHUm1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREZ0xJQTFCQVdvaEFRd3NDeUFBUVJVMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcyQ3lBQVFSczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MUN5QUFRUTgyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzBDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd6Q3lBQVFSbzJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eUN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3hDeUFBUVFvMkFod2dBQ0FCTmdJVUlBQkI1SmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd3Q3lBQVFSNDJBaHdnQUNBQk5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQjJvMkFnQUEyQWhBZ0FFRVVOZ0lNUVFBaEVBd3VDeUFBUVFRMkFod2dBQ0FCTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd0Q3lBQVFRQTJBZ0FnQzBFQmFpRUxDMEc0QVNFUURCSUxJQUJCQURZQ0FDQVFRUUZxSVFGQjlRQWhFQXdSQ3lBQklRRUNRQ0FBTFFBcFFRVkhEUUJCNHdBaEVBd1JDMEhpQUNFUURCQUxRUUFoRUNBQVFRQTJBaHdnQUVIa2tZQ0FBRFlDRUNBQVFRYzJBZ3dnQUNBVVFRRnFOZ0lVRENnTElBQkJBRFlDQUNBWFFRRnFJUUZCd0FBaEVBd09DMEVCSVFFTElBQWdBVG9BTENBQVFRQTJBZ0FnRjBFQmFpRUJDMEVvSVJBTUN3c2dBU0VCQzBFNElSQU1DUXNDUUNBQklnOGdBa1lOQUFOQUFrQWdEeTBBQUVHQXZvQ0FBR290QUFBaUFVRUJSZzBBSUFGQkFrY05BeUFQUVFGcUlRRU1CQXNnRDBFQmFpSVBJQUpIRFFBTFFUNGhFQXdpQzBFK0lSQU1JUXNnQUVFQU9nQXNJQThoQVF3QkMwRUxJUkFNQmd0Qk9pRVFEQVVMSUFGQkFXb2hBVUV0SVJBTUJBc2dBQ0FCT2dBc0lBQkJBRFlDQUNBV1FRRnFJUUZCRENFUURBTUxJQUJCQURZQ0FDQVhRUUZxSVFGQkNpRVFEQUlMSUFCQkFEWUNBQXNnQUVFQU9nQXNJQTBoQVVFSklSQU1BQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUxOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJjTFFRQWhFQ0FBUVFBMkFod2dBQ0FLTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCWUxRUUFoRUNBQVFRQTJBaHdnQUNBSk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJRTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCTUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQklMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJFTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCQUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQThMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE0TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SktBZ0FBMkFoQWdBRUVMTmdJTURBMExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbFltQWdBQTJBaEFnQUVFTE5nSU1EQXdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNREFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkIrNCtBZ0FBMkFoQWdBRUVLTmdJTURBb0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOFptQWdBQTJBaEFnQUVFQ05nSU1EQWtMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhKU0FnQUEyQWhBZ0FFRUNOZ0lNREFnTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4cFdBZ0FBMkFoQWdBRUVDTmdJTURBY0xJQUJCQWpZQ0hDQUFJQUUyQWhRZ0FFR2Ntb0NBQURZQ0VDQUFRUlkyQWd4QkFDRVFEQVlMUVFFaEVBd0ZDMEhVQUNFUUlBRWlCQ0FDUmcwRUlBTkJDR29nQUNBRUlBSkIyTUtBZ0FCQkNoREZnSUNBQUNBREtBSU1JUVFnQXlnQ0NBNERBUVFDQUFzUXlvQ0FnQUFBQ3lBQVFRQTJBaHdnQUVHMW1vQ0FBRFlDRUNBQVFSYzJBZ3dnQUNBRVFRRnFOZ0lVUVFBaEVBd0NDeUFBUVFBMkFod2dBQ0FFTmdJVUlBQkJ5cHFBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXdCQ3dKQUlBRWlCQ0FDUncwQVFTSWhFQXdCQ3lBQVFZbUFnSUFBTmdJSUlBQWdCRFlDQkVFaElSQUxJQU5CRUdva2dJQ0FnQUFnRUF1dkFRRUNmeUFCS0FJQUlRWUNRQUpBSUFJZ0EwWU5BQ0FFSUFacUlRUWdCaUFEYWlBQ2F5RUhJQUlnQmtGL2N5QUZhaUlHYWlFRkEwQUNRQ0FDTFFBQUlBUXRBQUJHRFFCQkFpRUVEQU1MQWtBZ0JnMEFRUUFoQkNBRklRSU1Bd3NnQmtGL2FpRUdJQVJCQVdvaEJDQUNRUUZxSWdJZ0EwY05BQXNnQnlFR0lBTWhBZ3NnQUVFQk5nSUFJQUVnQmpZQ0FDQUFJQUkyQWdRUEN5QUJRUUEyQWdBZ0FDQUVOZ0lBSUFBZ0FqWUNCQXNLQUNBQUVNZUFnSUFBQy9JMkFRdC9JNENBZ0lBQVFSQnJJZ0VrZ0lDQWdBQUNRRUVBS0FLZzBJQ0FBQTBBUVFBUXk0Q0FnQUJCZ05TRWdBQnJJZ0pCMlFCSkRRQkJBQ0VEQWtCQkFDZ0M0Tk9BZ0FBaUJBMEFRUUJDZnpjQzdOT0FnQUJCQUVLQWdJU0FnSURBQURjQzVOT0FnQUJCQUNBQlFRaHFRWEJ4UWRpcTFhb0ZjeUlFTmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FBTFFRQWdBallDek5PQWdBQkJBRUdBMUlTQUFEWUN5Tk9BZ0FCQkFFR0ExSVNBQURZQ21OQ0FnQUJCQUNBRU5nS3MwSUNBQUVFQVFYODJBcWpRZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUF0QmdOU0VnQUJCZUVHQTFJU0FBR3RCRDNGQkFFR0ExSVNBQUVFSWFrRVBjUnNpQTJvaUJFRUVhaUFDUVVocUlnVWdBMnNpQTBFQmNqWUNBRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FCQmdOU0VnQUFnQldwQk9EWUNCQXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBRUhzQVVzTkFBSkFRUUFvQW9qUWdJQUFJZ1pCRUNBQVFSTnFRWEJ4SUFCQkMwa2JJZ0pCQTNZaUJIWWlBMEVEY1VVTkFBSkFBa0FnQTBFQmNTQUVja0VCY3lJRlFRTjBJZ1JCc05DQWdBQnFJZ01nQkVHNDBJQ0FBR29vQWdBaUJDZ0NDQ0lDUncwQVFRQWdCa0YrSUFWM2NUWUNpTkNBZ0FBTUFRc2dBeUFDTmdJSUlBSWdBellDREFzZ0JFRUlhaUVESUFRZ0JVRURkQ0lGUVFOeU5nSUVJQVFnQldvaUJDQUVLQUlFUVFGeU5nSUVEQXdMSUFKQkFDZ0NrTkNBZ0FBaUIwME5BUUpBSUFORkRRQUNRQUpBSUFNZ0JIUkJBaUFFZENJRFFRQWdBMnR5Y1NJRFFRQWdBMnR4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1vaUJFRURkQ0lEUWJEUWdJQUFhaUlGSUFOQnVOQ0FnQUJxS0FJQUlnTW9BZ2dpQUVjTkFFRUFJQVpCZmlBRWQzRWlCallDaU5DQWdBQU1BUXNnQlNBQU5nSUlJQUFnQlRZQ0RBc2dBeUFDUVFOeU5nSUVJQU1nQkVFRGRDSUVhaUFFSUFKcklnVTJBZ0FnQXlBQ2FpSUFJQVZCQVhJMkFnUUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQkFKQUFrQWdCa0VCSUFkQkEzWjBJZ2h4RFFCQkFDQUdJQWh5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQVEyQWd3Z0FpQUVOZ0lJSUFRZ0FqWUNEQ0FFSUFnMkFnZ0xJQU5CQ0dvaEEwRUFJQUEyQXB6UWdJQUFRUUFnQlRZQ2tOQ0FnQUFNREF0QkFDZ0NqTkNBZ0FBaUNVVU5BU0FKUVFBZ0NXdHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbXBCQW5SQnVOS0FnQUJxS0FJQUlnQW9BZ1JCZUhFZ0Ftc2hCQ0FBSVFVQ1FBTkFBa0FnQlNnQ0VDSUREUUFnQlVFVWFpZ0NBQ0lEUlEwQ0N5QURLQUlFUVhoeElBSnJJZ1VnQkNBRklBUkpJZ1ViSVFRZ0F5QUFJQVViSVFBZ0F5RUZEQUFMQ3lBQUtBSVlJUW9DUUNBQUtBSU1JZ2dnQUVZTkFDQUFLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUlJQU0yQWdnZ0F5QUlOZ0lNREFzTEFrQWdBRUVVYWlJRktBSUFJZ01OQUNBQUtBSVFJZ05GRFFNZ0FFRVFhaUVGQ3dOQUlBVWhDeUFESWdoQkZHb2lCU2dDQUNJRERRQWdDRUVRYWlFRklBZ29BaEFpQXcwQUN5QUxRUUEyQWdBTUNndEJmeUVDSUFCQnYzOUxEUUFnQUVFVGFpSURRWEJ4SVFKQkFDZ0NqTkNBZ0FBaUIwVU5BRUVBSVFzQ1FDQUNRWUFDU1EwQVFSOGhDeUFDUWYvLy93ZExEUUFnQTBFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUZJQVZCZ0lBUGFrRVFka0VDY1NJRmRFRVBkaUFESUFSeUlBVnlheUlEUVFGMElBSWdBMEVWYW5aQkFYRnlRUnhxSVFzTFFRQWdBbXNoQkFKQUFrQUNRQUpBSUF0QkFuUkJ1TktBZ0FCcUtBSUFJZ1VOQUVFQUlRTkJBQ0VJREFFTFFRQWhBeUFDUVFCQkdTQUxRUUYyYXlBTFFSOUdHM1FoQUVFQUlRZ0RRQUpBSUFVb0FnUkJlSEVnQW1zaUJpQUVUdzBBSUFZaEJDQUZJUWdnQmcwQVFRQWhCQ0FGSVFnZ0JTRUREQU1MSUFNZ0JVRVVhaWdDQUNJR0lBWWdCU0FBUVIxMlFRUnhha0VRYWlnQ0FDSUZSaHNnQXlBR0d5RURJQUJCQVhRaEFDQUZEUUFMQ3dKQUlBTWdDSElOQUVFQUlRaEJBaUFMZENJRFFRQWdBMnR5SUFkeElnTkZEUU1nQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCVUVGZGtFSWNTSUFJQU55SUFVZ0FIWWlBMEVDZGtFRWNTSUZjaUFESUFWMklnTkJBWFpCQW5FaUJYSWdBeUFGZGlJRFFRRjJRUUZ4SWdWeUlBTWdCWFpxUVFKMFFialNnSUFBYWlnQ0FDRURDeUFEUlEwQkN3TkFJQU1vQWdSQmVIRWdBbXNpQmlBRVNTRUFBa0FnQXlnQ0VDSUZEUUFnQTBFVWFpZ0NBQ0VGQ3lBR0lBUWdBQnNoQkNBRElBZ2dBQnNoQ0NBRklRTWdCUTBBQ3dzZ0NFVU5BQ0FFUVFBb0FwRFFnSUFBSUFKclR3MEFJQWdvQWhnaEN3SkFJQWdvQWd3aUFDQUlSZzBBSUFnb0FnZ2lBMEVBS0FLWTBJQ0FBRWthSUFBZ0F6WUNDQ0FESUFBMkFnd01DUXNDUUNBSVFSUnFJZ1VvQWdBaUF3MEFJQWdvQWhBaUEwVU5BeUFJUVJCcUlRVUxBMEFnQlNFR0lBTWlBRUVVYWlJRktBSUFJZ01OQUNBQVFSQnFJUVVnQUNnQ0VDSUREUUFMSUFaQkFEWUNBQXdJQ3dKQVFRQW9BcERRZ0lBQUlnTWdBa2tOQUVFQUtBS2MwSUNBQUNFRUFrQUNRQ0FESUFKcklnVkJFRWtOQUNBRUlBSnFJZ0FnQlVFQmNqWUNCRUVBSUFVMkFwRFFnSUFBUVFBZ0FEWUNuTkNBZ0FBZ0JDQURhaUFGTmdJQUlBUWdBa0VEY2pZQ0JBd0JDeUFFSUFOQkEzSTJBZ1FnQkNBRGFpSURJQU1vQWdSQkFYSTJBZ1JCQUVFQU5nS2MwSUNBQUVFQVFRQTJBcERRZ0lBQUN5QUVRUWhxSVFNTUNnc0NRRUVBS0FLVTBJQ0FBQ0lBSUFKTkRRQkJBQ2dDb05DQWdBQWlBeUFDYWlJRUlBQWdBbXNpQlVFQmNqWUNCRUVBSUFVMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0F5QUNRUU55TmdJRUlBTkJDR29oQXd3S0N3SkFBa0JCQUNnQzROT0FnQUJGRFFCQkFDZ0M2Tk9BZ0FBaEJBd0JDMEVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRU1ha0Z3Y1VIWXF0V3FCWE0yQXVEVGdJQUFRUUJCQURZQzlOT0FnQUJCQUVFQU5nTEUwNENBQUVHQWdBUWhCQXRCQUNFREFrQWdCQ0FDUWNjQWFpSUhhaUlHUVFBZ0JHc2lDM0VpQ0NBQ1N3MEFRUUJCTURZQytOT0FnQUFNQ2dzQ1FFRUFLQUxBMDRDQUFDSURSUTBBQWtCQkFDZ0N1Tk9BZ0FBaUJDQUlhaUlGSUFSTkRRQWdCU0FEVFEwQkMwRUFJUU5CQUVFd05nTDQwNENBQUF3S0MwRUFMUURFMDRDQUFFRUVjUTBFQWtBQ1FBSkFRUUFvQXFEUWdJQUFJZ1JGRFFCQnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUFFU3cwREN5QURLQUlJSWdNTkFBc0xRUUFReTRDQWdBQWlBRUYvUmcwRklBZ2hCZ0pBUVFBb0F1VFRnSUFBSWdOQmYyb2lCQ0FBY1VVTkFDQUlJQUJySUFRZ0FHcEJBQ0FEYTNGcUlRWUxJQVlnQWswTkJTQUdRZjcvLy84SFN3MEZBa0JCQUNnQ3dOT0FnQUFpQTBVTkFFRUFLQUs0MDRDQUFDSUVJQVpxSWdVZ0JFME5CaUFGSUFOTERRWUxJQVlReTRDQWdBQWlBeUFBUncwQkRBY0xJQVlnQUdzZ0MzRWlCa0grLy8vL0Iwc05CQ0FHRU11QWdJQUFJZ0FnQXlnQ0FDQURLQUlFYWtZTkF5QUFJUU1MQWtBZ0EwRi9SZzBBSUFKQnlBQnFJQVpORFFBQ1FDQUhJQVpyUVFBb0F1alRnSUFBSWdScVFRQWdCR3R4SWdSQi92Ly8vd2RORFFBZ0F5RUFEQWNMQWtBZ0JCRExnSUNBQUVGL1JnMEFJQVFnQm1vaEJpQURJUUFNQnd0QkFDQUdheERMZ0lDQUFCb01CQXNnQXlFQUlBTkJmMGNOQlF3REMwRUFJUWdNQnd0QkFDRUFEQVVMSUFCQmYwY05BZ3RCQUVFQUtBTEUwNENBQUVFRWNqWUN4Tk9BZ0FBTElBaEIvdi8vL3dkTERRRWdDQkRMZ0lDQUFDRUFRUUFReTRDQWdBQWhBeUFBUVg5R0RRRWdBMEYvUmcwQklBQWdBMDhOQVNBRElBQnJJZ1lnQWtFNGFrME5BUXRCQUVFQUtBSzQwNENBQUNBR2FpSUROZ0s0MDRDQUFBSkFJQU5CQUNnQ3ZOT0FnQUJORFFCQkFDQUROZ0s4MDRDQUFBc0NRQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUNBQUlBTW9BZ0FpQlNBREtBSUVJZ2hxUmcwQ0lBTW9BZ2dpQXcwQURBTUxDd0pBQWtCQkFDZ0NtTkNBZ0FBaUEwVU5BQ0FBSUFOUERRRUxRUUFnQURZQ21OQ0FnQUFMUVFBaEEwRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVGL05nS28wSUNBQUVFQVFRQW9BdURUZ0lBQU5nS3MwSUNBQUVFQVFRQTJBdFRUZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUFzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQkNBR1FVaHFJZ1VnQTJzaUEwRUJjallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBQ0FGYWtFNE5nSUVEQUlMSUFNdEFBeEJDSEVOQUNBRUlBVkpEUUFnQkNBQVR3MEFJQVJCZUNBRWEwRVBjVUVBSUFSQkNHcEJEM0ViSWdWcUlnQkJBQ2dDbE5DQWdBQWdCbW9pQ3lBRmF5SUZRUUZ5TmdJRUlBTWdDQ0FHYWpZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQVUyQXBUUWdJQUFRUUFnQURZQ29OQ0FnQUFnQkNBTGFrRTROZ0lFREFFTEFrQWdBRUVBS0FLWTBJQ0FBQ0lJVHcwQVFRQWdBRFlDbU5DQWdBQWdBQ0VJQ3lBQUlBWnFJUVZCeU5PQWdBQWhBd0pBQWtBQ1FBSkFBa0FDUUFKQUEwQWdBeWdDQUNBRlJnMEJJQU1vQWdnaUF3MEFEQUlMQ3lBRExRQU1RUWh4UlEwQkMwSEkwNENBQUNFREEwQUNRQ0FES0FJQUlnVWdCRXNOQUNBRklBTW9BZ1JxSWdVZ0JFc05Bd3NnQXlnQ0NDRUREQUFMQ3lBRElBQTJBZ0FnQXlBREtBSUVJQVpxTmdJRUlBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJhaUlMSUFKQkEzSTJBZ1FnQlVGNElBVnJRUTl4UVFBZ0JVRUlha0VQY1J0cUlnWWdDeUFDYWlJQ2F5RURBa0FnQmlBRVJ3MEFRUUFnQWpZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBRGFpSUROZ0tVMElDQUFDQUNJQU5CQVhJMkFnUU1Bd3NDUUNBR1FRQW9BcHpRZ0lBQVJ3MEFRUUFnQWpZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBRGFpSUROZ0tRMElDQUFDQUNJQU5CQVhJMkFnUWdBaUFEYWlBRE5nSUFEQU1MQWtBZ0JpZ0NCQ0lFUVFOeFFRRkhEUUFnQkVGNGNTRUhBa0FDUUNBRVFmOEJTdzBBSUFZb0FnZ2lCU0FFUVFOMklnaEJBM1JCc05DQWdBQnFJZ0JHR2dKQUlBWW9BZ3dpQkNBRlJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBSWQzRTJBb2pRZ0lBQURBSUxJQVFnQUVZYUlBUWdCVFlDQ0NBRklBUTJBZ3dNQVFzZ0JpZ0NHQ0VKQWtBQ1FDQUdLQUlNSWdBZ0JrWU5BQ0FHS0FJSUlnUWdDRWthSUFBZ0JEWUNDQ0FFSUFBMkFnd01BUXNDUUNBR1FSUnFJZ1FvQWdBaUJRMEFJQVpCRUdvaUJDZ0NBQ0lGRFFCQkFDRUFEQUVMQTBBZ0JDRUlJQVVpQUVFVWFpSUVLQUlBSWdVTkFDQUFRUkJxSVFRZ0FDZ0NFQ0lGRFFBTElBaEJBRFlDQUFzZ0NVVU5BQUpBQWtBZ0JpQUdLQUljSWdWQkFuUkJ1TktBZ0FCcUlnUW9BZ0JIRFFBZ0JDQUFOZ0lBSUFBTkFVRUFRUUFvQW96UWdJQUFRWDRnQlhkeE5nS00wSUNBQUF3Q0N5QUpRUkJCRkNBSktBSVFJQVpHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQWsyQWhnQ1FDQUdLQUlRSWdSRkRRQWdBQ0FFTmdJUUlBUWdBRFlDR0FzZ0JpZ0NGQ0lFUlEwQUlBQkJGR29nQkRZQ0FDQUVJQUEyQWhnTElBY2dBMm9oQXlBR0lBZHFJZ1lvQWdRaEJBc2dCaUFFUVg1eE5nSUVJQUlnQTJvZ0F6WUNBQ0FDSUFOQkFYSTJBZ1FDUUNBRFFmOEJTdzBBSUFOQmVIRkJzTkNBZ0FCcUlRUUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQURRUU4yZENJRGNRMEFRUUFnQlNBRGNqWUNpTkNBZ0FBZ0JDRUREQUVMSUFRb0FnZ2hBd3NnQXlBQ05nSU1JQVFnQWpZQ0NDQUNJQVEyQWd3Z0FpQUROZ0lJREFNTFFSOGhCQUpBSUFOQi8vLy9CMHNOQUNBRFFRaDJJZ1FnQkVHQS9qOXFRUkIyUVFoeElnUjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ0FnQUVHQWdBOXFRUkIyUVFKeElnQjBRUTkySUFRZ0JYSWdBSEpySWdSQkFYUWdBeUFFUVJWcWRrRUJjWEpCSEdvaEJBc2dBaUFFTmdJY0lBSkNBRGNDRUNBRVFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQUVFQklBUjBJZ2h4RFFBZ0JTQUNOZ0lBUVFBZ0FDQUljallDak5DQWdBQWdBaUFGTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQXdzZ0EwRUFRUmtnQkVFQmRtc2dCRUVmUmh0MElRUWdCU2dDQUNFQUEwQWdBQ0lGS0FJRVFYaHhJQU5HRFFJZ0JFRWRkaUVBSUFSQkFYUWhCQ0FGSUFCQkJIRnFRUkJxSWdnb0FnQWlBQTBBQ3lBSUlBSTJBZ0FnQWlBRk5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFnc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUN5QUdRVWhxSWdnZ0Eyc2lBMEVCY2pZQ0JDQUFJQWhxUVRnMkFnUWdCQ0FGUVRjZ0JXdEJEM0ZCQUNBRlFVbHFRUTl4RzJwQlFXb2lDQ0FJSUFSQkVHcEpHeUlJUVNNMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFzMkFxRFFnSUFBSUFoQkVHcEJBQ2tDME5PQWdBQTNBZ0FnQ0VFQUtRTEkwNENBQURjQ0NFRUFJQWhCQ0dvMkF0RFRnSUFBUVFBZ0JqWUN6Tk9BZ0FCQkFDQUFOZ0xJMDRDQUFFRUFRUUEyQXRUVGdJQUFJQWhCSkdvaEF3TkFJQU5CQnpZQ0FDQURRUVJxSWdNZ0JVa05BQXNnQ0NBRVJnMERJQWdnQ0NnQ0JFRitjVFlDQkNBSUlBZ2dCR3NpQURZQ0FDQUVJQUJCQVhJMkFnUUNRQ0FBUWY4QlN3MEFJQUJCZUhGQnNOQ0FnQUJxSVFNQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBQVFRTjJkQ0lBY1EwQVFRQWdCU0FBY2pZQ2lOQ0FnQUFnQXlFRkRBRUxJQU1vQWdnaEJRc2dCU0FFTmdJTUlBTWdCRFlDQ0NBRUlBTTJBZ3dnQkNBRk5nSUlEQVFMUVI4aEF3SkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnTWdBMEdBL2o5cVFSQjJRUWh4SWdOMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnZ2dDRUdBZ0E5cVFSQjJRUUp4SWdoMFFROTJJQU1nQlhJZ0NISnJJZ05CQVhRZ0FDQURRUlZxZGtFQmNYSkJIR29oQXdzZ0JDQUROZ0ljSUFSQ0FEY0NFQ0FEUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlDRUVCSUFOMElnWnhEUUFnQlNBRU5nSUFRUUFnQ0NBR2NqWUNqTkNBZ0FBZ0JDQUZOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01CQXNnQUVFQVFSa2dBMEVCZG1zZ0EwRWZSaHQwSVFNZ0JTZ0NBQ0VJQTBBZ0NDSUZLQUlFUVhoeElBQkdEUU1nQTBFZGRpRUlJQU5CQVhRaEF5QUZJQWhCQkhGcVFSQnFJZ1lvQWdBaUNBMEFDeUFHSUFRMkFnQWdCQ0FGTmdJWUlBUWdCRFlDRENBRUlBUTJBZ2dNQXdzZ0JTZ0NDQ0lESUFJMkFnd2dCU0FDTmdJSUlBSkJBRFlDR0NBQ0lBVTJBZ3dnQWlBRE5nSUlDeUFMUVFocUlRTU1CUXNnQlNnQ0NDSURJQVEyQWd3Z0JTQUVOZ0lJSUFSQkFEWUNHQ0FFSUFVMkFnd2dCQ0FETmdJSUMwRUFLQUtVMElDQUFDSURJQUpORFFCQkFDZ0NvTkNBZ0FBaUJDQUNhaUlGSUFNZ0Ftc2lBMEVCY2pZQ0JFRUFJQU0yQXBUUWdJQUFRUUFnQlRZQ29OQ0FnQUFnQkNBQ1FRTnlOZ0lFSUFSQkNHb2hBd3dEQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdDQ3dKQUlBdEZEUUFDUUFKQUlBZ2dDQ2dDSENJRlFRSjBRYmpTZ0lBQWFpSURLQUlBUncwQUlBTWdBRFlDQUNBQURRRkJBQ0FIUVg0Z0JYZHhJZ2MyQW96UWdJQUFEQUlMSUF0QkVFRVVJQXNvQWhBZ0NFWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0N6WUNHQUpBSUFnb0FoQWlBMFVOQUNBQUlBTTJBaEFnQXlBQU5nSVlDeUFJUVJScUtBSUFJZ05GRFFBZ0FFRVVhaUFETmdJQUlBTWdBRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUlJQVFnQW1vaUEwRURjallDQkNBSUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUlJQUpxSWdBZ0JFRUJjallDQkNBSUlBSkJBM0kyQWdRZ0FDQUVhaUFFTmdJQUFrQWdCRUgvQVVzTkFDQUVRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQkVFRGRuUWlCSEVOQUVFQUlBVWdCSEkyQW9qUWdJQUFJQU1oQkF3QkN5QURLQUlJSVFRTElBUWdBRFlDRENBRElBQTJBZ2dnQUNBRE5nSU1JQUFnQkRZQ0NBd0JDMEVmSVFNQ1FDQUVRZi8vL3dkTERRQWdCRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQ0lBSkJnSUFQYWtFUWRrRUNjU0lDZEVFUGRpQURJQVZ5SUFKeWF5SURRUUYwSUFRZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFBZ0F6WUNIQ0FBUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQUlBZEJBU0FEZENJQ2NRMEFJQVVnQURZQ0FFRUFJQWNnQW5JMkFvelFnSUFBSUFBZ0JUWUNHQ0FBSUFBMkFnZ2dBQ0FBTmdJTURBRUxJQVJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhBZ0pBQTBBZ0FpSUZLQUlFUVhoeElBUkdEUUVnQTBFZGRpRUNJQU5CQVhRaEF5QUZJQUpCQkhGcVFSQnFJZ1lvQWdBaUFnMEFDeUFHSUFBMkFnQWdBQ0FGTmdJWUlBQWdBRFlDRENBQUlBQTJBZ2dNQVFzZ0JTZ0NDQ0lESUFBMkFnd2dCU0FBTmdJSUlBQkJBRFlDR0NBQUlBVTJBZ3dnQUNBRE5nSUlDeUFJUVFocUlRTU1BUXNDUUNBS1JRMEFBa0FDUUNBQUlBQW9BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBZzJBZ0FnQ0EwQlFRQWdDVUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDa0VRUVJRZ0NpZ0NFQ0FBUmh0cUlBZzJBZ0FnQ0VVTkFRc2dDQ0FLTmdJWUFrQWdBQ2dDRUNJRFJRMEFJQWdnQXpZQ0VDQURJQWcyQWhnTElBQkJGR29vQWdBaUEwVU5BQ0FJUVJScUlBTTJBZ0FnQXlBSU5nSVlDd0pBQWtBZ0JFRVBTdzBBSUFBZ0JDQUNhaUlEUVFOeU5nSUVJQUFnQTJvaUF5QURLQUlFUVFGeU5nSUVEQUVMSUFBZ0Ftb2lCU0FFUVFGeU5nSUVJQUFnQWtFRGNqWUNCQ0FGSUFScUlBUTJBZ0FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEF3SkFBa0JCQVNBSFFRTjJkQ0lJSUFaeERRQkJBQ0FJSUFaeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFNMkFnd2dBaUFETmdJSUlBTWdBallDRENBRElBZzJBZ2dMUVFBZ0JUWUNuTkNBZ0FCQkFDQUVOZ0tRMElDQUFBc2dBRUVJYWlFREN5QUJRUkJxSklDQWdJQUFJQU1MQ2dBZ0FCREpnSUNBQUF2aURRRUhmd0pBSUFCRkRRQWdBRUY0YWlJQklBQkJmR29vQWdBaUFrRjRjU0lBYWlFREFrQWdBa0VCY1EwQUlBSkJBM0ZGRFFFZ0FTQUJLQUlBSWdKcklnRkJBQ2dDbU5DQWdBQWlCRWtOQVNBQ0lBQnFJUUFDUUNBQlFRQW9BcHpRZ0lBQVJnMEFBa0FnQWtIL0FVc05BQ0FCS0FJSUlnUWdBa0VEZGlJRlFRTjBRYkRRZ0lBQWFpSUdSaG9DUUNBQktBSU1JZ0lnQkVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQlhkeE5nS0kwSUNBQUF3REN5QUNJQVpHR2lBQ0lBUTJBZ2dnQkNBQ05nSU1EQUlMSUFFb0FoZ2hCd0pBQWtBZ0FTZ0NEQ0lHSUFGR0RRQWdBU2dDQ0NJQ0lBUkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQVVFVWFpSUNLQUlBSWdRTkFDQUJRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRRUNRQUpBSUFFZ0FTZ0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQXdzZ0IwRVFRUlFnQnlnQ0VDQUJSaHRxSUFZMkFnQWdCa1VOQWdzZ0JpQUhOZ0lZQWtBZ0FTZ0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFFb0FoUWlBa1VOQVNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZREFFTElBTW9BZ1FpQWtFRGNVRURSdzBBSUFNZ0FrRitjVFlDQkVFQUlBQTJBcERRZ0lBQUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUVBDeUFCSUFOUERRQWdBeWdDQkNJQ1FRRnhSUTBBQWtBQ1FDQUNRUUp4RFFBQ1FDQURRUUFvQXFEUWdJQUFSdzBBUVFBZ0FUWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQUFhaUlBTmdLVTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkEwRUFRUUEyQXBEUWdJQUFRUUJCQURZQ25OQ0FnQUFQQ3dKQUlBTkJBQ2dDbk5DQWdBQkhEUUJCQUNBQk5nS2MwSUNBQUVFQVFRQW9BcERRZ0lBQUlBQnFJZ0EyQXBEUWdJQUFJQUVnQUVFQmNqWUNCQ0FCSUFCcUlBQTJBZ0FQQ3lBQ1FYaHhJQUJxSVFBQ1FBSkFJQUpCL3dGTERRQWdBeWdDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQXlnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQWdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0JDeUFES0FJWUlRY0NRQUpBSUFNb0Fnd2lCaUFEUmcwQUlBTW9BZ2dpQWtFQUtBS1kwSUNBQUVrYUlBWWdBallDQ0NBQ0lBWTJBZ3dNQVFzQ1FDQURRUlJxSWdJb0FnQWlCQTBBSUFOQkVHb2lBaWdDQUNJRURRQkJBQ0VHREFFTEEwQWdBaUVGSUFRaUJrRVVhaUlDS0FJQUlnUU5BQ0FHUVJCcUlRSWdCaWdDRUNJRURRQUxJQVZCQURZQ0FBc2dCMFVOQUFKQUFrQWdBeUFES0FJY0lnUkJBblJCdU5LQWdBQnFJZ0lvQWdCSERRQWdBaUFHTmdJQUlBWU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JIZHhOZ0tNMElDQUFBd0NDeUFIUVJCQkZDQUhLQUlRSUFOR0cyb2dCallDQUNBR1JRMEJDeUFHSUFjMkFoZ0NRQ0FES0FJUUlnSkZEUUFnQmlBQ05nSVFJQUlnQmpZQ0dBc2dBeWdDRkNJQ1JRMEFJQVpCRkdvZ0FqWUNBQ0FDSUFZMkFoZ0xJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkFVRUFJQUEyQXBEUWdJQUFEd3NnQXlBQ1FYNXhOZ0lFSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRTEFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVDQWtBQ1FFRUFLQUtJMElDQUFDSUVRUUVnQUVFRGRuUWlBSEVOQUVFQUlBUWdBSEkyQW9qUWdJQUFJQUloQUF3QkN5QUNLQUlJSVFBTElBQWdBVFlDRENBQ0lBRTJBZ2dnQVNBQ05nSU1JQUVnQURZQ0NBOExRUjhoQWdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdJZ0FrR0EvajlxUVJCMlFRaHhJZ0owSWdRZ0JFR0E0QjlxUVJCMlFRUnhJZ1IwSWdZZ0JrR0FnQTlxUVJCMlFRSnhJZ1owUVE5MklBSWdCSElnQm5KcklnSkJBWFFnQUNBQ1FSVnFka0VCY1hKQkhHb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJqU2dJQUFhaUVFQWtBQ1FFRUFLQUtNMElDQUFDSUdRUUVnQW5RaUEzRU5BQ0FFSUFFMkFnQkJBQ0FHSUFOeU5nS00wSUNBQUNBQklBUTJBaGdnQVNBQk5nSUlJQUVnQVRZQ0RBd0JDeUFBUVFCQkdTQUNRUUYyYXlBQ1FSOUdHM1FoQWlBRUtBSUFJUVlDUUFOQUlBWWlCQ2dDQkVGNGNTQUFSZzBCSUFKQkhYWWhCaUFDUVFGMElRSWdCQ0FHUVFSeGFrRVFhaUlES0FJQUlnWU5BQXNnQXlBQk5nSUFJQUVnQkRZQ0dDQUJJQUUyQWd3Z0FTQUJOZ0lJREFFTElBUW9BZ2dpQUNBQk5nSU1JQVFnQVRZQ0NDQUJRUUEyQWhnZ0FTQUVOZ0lNSUFFZ0FEWUNDQXRCQUVFQUtBS28wSUNBQUVGL2FpSUJRWDhnQVJzMkFxalFnSUFBQ3dzRUFBQUFDMDRBQWtBZ0FBMEFQd0JCRUhRUEN3SkFJQUJCLy84RGNRMEFJQUJCZjB3TkFBSkFJQUJCRUhaQUFDSUFRWDlIRFFCQkFFRXdOZ0w0MDRDQUFFRi9Ed3NnQUVFUWRBOExFTXFBZ0lBQUFBdnlBZ0lEZndGK0FrQWdBa1VOQUNBQUlBRTZBQUFnQWlBQWFpSURRWDlxSUFFNkFBQWdBa0VEU1EwQUlBQWdBVG9BQWlBQUlBRTZBQUVnQTBGOWFpQUJPZ0FBSUFOQmZtb2dBVG9BQUNBQ1FRZEpEUUFnQUNBQk9nQURJQU5CZkdvZ0FUb0FBQ0FDUVFsSkRRQWdBRUVBSUFCclFRTnhJZ1JxSWdNZ0FVSC9BWEZCZ1lLRUNHd2lBVFlDQUNBRElBSWdCR3RCZkhFaUJHb2lBa0Y4YWlBQk5nSUFJQVJCQ1VrTkFDQURJQUUyQWdnZ0F5QUJOZ0lFSUFKQmVHb2dBVFlDQUNBQ1FYUnFJQUUyQWdBZ0JFRVpTUTBBSUFNZ0FUWUNHQ0FESUFFMkFoUWdBeUFCTmdJUUlBTWdBVFlDRENBQ1FYQnFJQUUyQWdBZ0FrRnNhaUFCTmdJQUlBSkJhR29nQVRZQ0FDQUNRV1JxSUFFMkFnQWdCQ0FEUVFSeFFSaHlJZ1ZySWdKQklFa05BQ0FCclVLQmdJQ0FFSDRoQmlBRElBVnFJUUVEUUNBQklBWTNBeGdnQVNBR053TVFJQUVnQmpjRENDQUJJQVkzQXdBZ0FVRWdhaUVCSUFKQllHb2lBa0VmU3cwQUN3c2dBQXNMamtnQkFFR0FDQXVHU0FFQUFBQUNBQUFBQXdBQUFBQUFBQUFBQUFBQUJBQUFBQVVBQUFBQUFBQUFBQUFBQUFZQUFBQUhBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQnhkV1Z5ZVFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJKdlpIa0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ2IzWmxjbVpzYjNjQVEyaDFibXNnYzJsNlpTQnZkbVZ5Wm14dmR3QlNaWE53YjI1elpTQnZkbVZ5Wm14dmR3QkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdTRlJVVUM5NExuZ2djbVZ4ZFdWemRBQkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdVbFJUVUM5NExuZ2djbVZ4ZFdWemRBQkZlSEJsWTNSbFpDQlRUMVZTUTBVZ2JXVjBhRzlrSUdadmNpQkpRMFV2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQm1jbUZuYldWdWRDQnpkR0Z5ZEFCRmVIQmxZM1JsWkNCa2IzUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXpkR0YwZFhNQVNXNTJZV3hwWkNCeVpYTndiMjV6WlNCemRHRjBkWE1BU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3dCVmMyVnlJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl5WlhObGRHQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyaGxZV1JsY21BZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxjM05oWjJWZlltVm5hVzVnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZFhKc1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUZWdVpYaHdaV04wWldRZ1kyaGhjaUJwYmlCMWNtd2djMlZ5ZG1WeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUhaaGJIVmxJR05vWVhJQVNXNTJZV3hwWkNCb1pXRmtaWElnWm1sbGJHUWdZMmhoY2dCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNabGNuTnBiMjRBU1c1MllXeHBaQ0J0YVc1dmNpQjJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXRnFiM0lnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCMlpYSnphVzl1QUVWNGNHVmpkR1ZrSUVOU1RFWWdZV1owWlhJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUVoVVZGQWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHaGxZV1JsY2lCMGIydGxiZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1Z5YkFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY25NZ2FXNGdkWEpzQUZWdVpYaHdaV04wWldRZ2MzUmhjblFnWTJoaGNpQnBiaUIxY213QVJHOTFZbXhsSUVBZ2FXNGdkWEpzQUVWdGNIUjVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFUjFjR3hwWTJGMFpTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSWdhVzRnZFhKc0lIQmhkR2dBUTI5dWRHVnVkQzFNWlc1bmRHZ2dZMkZ1SjNRZ1ltVWdjSEpsYzJWdWRDQjNhWFJvSUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUhOcGVtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZmRtRnNkV1VBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QjJZV3gxWlFCTmFYTnphVzVuSUdWNGNHVmpkR1ZrSUV4R0lHRm1kR1Z5SUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1VnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpXUWdkbUZzZFdVQVVHRjFjMlZrSUdKNUlHOXVYMmhsWVdSbGNuTmZZMjl0Y0d4bGRHVUFTVzUyWVd4cFpDQkZUMFlnYzNSaGRHVUFiMjVmY21WelpYUWdjR0YxYzJVQWIyNWZZMmgxYm10ZmFHVmhaR1Z5SUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWW1WbmFXNGdjR0YxYzJVQWIyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsSUhCaGRYTmxBRzl1WDNOMFlYUjFjMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYM1Z5YkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5dFpYUm9iMlJmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxJSEJoZFhObEFGVnVaWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYzNSaGNuUWdiR2x1WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdibUZ0WlFCUVlYVnpaU0J2YmlCRFQwNU9SVU5VTDFWd1ozSmhaR1VBVUdGMWMyVWdiMjRnVUZKSkwxVndaM0poWkdVQVJYaHdaV04wWldRZ1NGUlVVQzh5SUVOdmJtNWxZM1JwYjI0Z1VISmxabUZqWlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDIxbGRHaHZaQUJGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCdFpYUm9iMlFBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZabWxsYkdRQVVHRjFjMlZrQUVsdWRtRnNhV1FnZDI5eVpDQmxibU52ZFc1MFpYSmxaQUJKYm5aaGJHbGtJRzFsZEdodlpDQmxibU52ZFc1MFpYSmxaQUJWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmphR1Z0WVFCU1pYRjFaWE4wSUdoaGN5QnBiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQUFVMWRKVkVOSVgxQlNUMWhaQUZWVFJWOVFVazlZV1FCTlMwRkRWRWxXU1ZSWkFGVk9VRkpQUTBWVFUwRkNURVZmUlU1VVNWUlpBRU5QVUZrQVRVOVdSVVJmVUVWU1RVRk9SVTVVVEZrQVZFOVBYMFZCVWt4WkFFNVBWRWxHV1FCR1FVbE1SVVJmUkVWUVJVNUVSVTVEV1FCQ1FVUmZSMEZVUlZkQldRQlFURUZaQUZCVlZBQkRTRVZEUzA5VlZBQkhRVlJGVjBGWlgxUkpUVVZQVlZRQVVrVlJWVVZUVkY5VVNVMUZUMVZVQUU1RlZGZFBVa3RmUTA5T1RrVkRWRjlVU1UxRlQxVlVBRU5QVGs1RlExUkpUMDVmVkVsTlJVOVZWQUJNVDBkSlRsOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlVrVkJSRjlVU1UxRlQxVlVBRkJQVTFRQVRVbFRSRWxTUlVOVVJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOU1UMEZFWDBKQlRFRk9RMFZFWDFKRlVWVkZVMVFBUWtGRVgxSkZVVlZGVTFRQVNGUlVVRjlTUlZGVlJWTlVYMU5GVGxSZlZFOWZTRlJVVUZOZlVFOVNWQUJTUlZCUFVsUUFTVTFmUVY5VVJVRlFUMVFBVWtWVFJWUmZRMDlPVkVWT1ZBQk9UMTlEVDA1VVJVNVVBRkJCVWxSSlFVeGZRMDlPVkVWT1ZBQklVRVZmU1U1V1FVeEpSRjlEVDA1VFZFRk9WQUJJVUVWZlEwSmZVa1ZUUlZRQVIwVlVBRWhRUlY5VFZGSkpRMVFBUTA5T1JreEpRMVFBVkVWTlVFOVNRVkpaWDFKRlJFbFNSVU5VQUZCRlVrMUJUa1ZPVkY5U1JVUkpVa1ZEVkFCRFQwNU9SVU5VQUUxVlRGUkpYMU5VUVZSVlV3QklVRVZmU1U1V1FVeEpSRjlUVkVGVVZWTUFWRTlQWDAxQlRsbGZVa1ZSVlVWVFZGTUFSVUZTVEZsZlNFbE9WRk1BVlU1QlZrRkpURUZDVEVWZlJrOVNYMHhGUjBGTVgxSkZRVk5QVGxNQVQxQlVTVTlPVXdCVFYwbFVRMGhKVGtkZlVGSlBWRTlEVDB4VEFGWkJVa2xCVGxSZlFVeFRUMTlPUlVkUFZFbEJWRVZUQUUxVlRGUkpVRXhGWDBOSVQwbERSVk1BU1U1VVJWSk9RVXhmVTBWU1ZrVlNYMFZTVWs5U0FGZEZRbDlUUlZKV1JWSmZWVTVMVGs5WFRsOUZVbEpQVWdCU1FVbE1SMVZPWDBWU1VrOVNBRWxFUlU1VVNWUlpYMUJTVDFaSlJFVlNYMEZWVkVoRlRsUkpRMEZVU1U5T1gwVlNVazlTQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlGVWxKUFVnQkpUbFpCVEVsRVgxaGZSazlTVjBGU1JFVkVYMFpQVWdCVFJWUmZVRUZTUVUxRlZFVlNBRWRGVkY5UVFWSkJUVVZVUlZJQVNGQkZYMVZUUlZJQVUwVkZYMDlVU0VWU0FFaFFSVjlEUWw5RFNGVk9TMTlJUlVGRVJWSUFUVXREUVV4RlRrUkJVZ0JUUlZSVlVBQlhSVUpmVTBWU1ZrVlNYMGxUWDBSUFYwNEFWRVZCVWtSUFYwNEFTRkJGWDBOTVQxTkZSRjlEVDA1T1JVTlVTVTlPQUVoRlZWSkpVMVJKUTE5RldGQkpVa0ZVU1U5T0FFUkpVME5QVGs1RlExUkZSRjlQVUVWU1FWUkpUMDRBVGs5T1gwRlZWRWhQVWtsVVFWUkpWa1ZmU1U1R1QxSk5RVlJKVDA0QVNGQkZYMGxPVmtGTVNVUmZWa1ZTVTBsUFRnQklVRVZmUTBKZlRVVlRVMEZIUlY5Q1JVZEpUZ0JUU1ZSRlgwbFRYMFpTVDFwRlRnQklVRVZmU1U1V1FVeEpSRjlJUlVGRVJWSmZWRTlMUlU0QVNVNVdRVXhKUkY5VVQwdEZUZ0JHVDFKQ1NVUkVSVTRBUlU1SVFVNURSVjlaVDFWU1gwTkJURTBBU0ZCRlgwbE9Wa0ZNU1VSZlZWSk1BRUpNVDBOTFJVUmZRbGxmVUVGU1JVNVVRVXhmUTA5T1ZGSlBUQUJOUzBOUFRBQkJRMHdBU0ZCRlgwbE9WRVZTVGtGTUFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFZmVlU1UFJrWkpRMGxCVEFCSVVFVmZUMHNBVlU1TVNVNUxBRlZPVEU5RFN3QlFVa2tBVWtWVVVsbGZWMGxVU0FCSVVFVmZTVTVXUVV4SlJGOURUMDVVUlU1VVgweEZUa2RVU0FCSVVFVmZWVTVGV0ZCRlExUkZSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQkdURlZUU0FCUVVrOVFVRUZVUTBnQVRTMVRSVUZTUTBnQVZWSkpYMVJQVDE5TVQwNUhBRkJTVDBORlUxTkpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVFSVkpUU1ZOVVJVNVVYMWRCVWs1SlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5WFFWSk9TVTVIQUVoUVJWOUpUbFpCVEVsRVgxUlNRVTVUUmtWU1gwVk9RMDlFU1U1SEFFVjRjR1ZqZEdWa0lFTlNURVlBU0ZCRlgwbE9Wa0ZNU1VSZlEwaFZUa3RmVTBsYVJRQk5UMVpGQUVOUFRsUkpUbFZGQUVoUVJWOURRbDlUVkVGVVZWTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWxOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFaRlVsTkpUMDVmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVZTVEY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gxWkJURlZGWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlEU0ZWT1MxOUZXRlJGVGxOSlQwNWZUa0ZOUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVFUwRkhSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZVU0U5RVgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmUmtsRlRFUmZRMDlOVUV4RlZFVUFSRVZNUlZSRkFFaFFSVjlKVGxaQlRFbEVYMFZQUmw5VFZFRlVSUUJKVGxaQlRFbEVYMU5UVEY5RFJWSlVTVVpKUTBGVVJRQlFRVlZUUlFCT1QxOVNSVk5RVDA1VFJRQlZUbE5WVUZCUFVsUkZSRjlOUlVSSlFWOVVXVkJGQUVkUFRrVUFUazlVWDBGRFEwVlFWRUZDVEVVQVUwVlNWa2xEUlY5VlRrRldRVWxNUVVKTVJRQlNRVTVIUlY5T1QxUmZVMEZVU1ZOR1NVRkNURVVBVDFKSlIwbE9YMGxUWDFWT1VrVkJRMGhCUWt4RkFGSkZVMUJQVGxORlgwbFRYMU5VUVV4RkFGQlZVa2RGQUUxRlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmVkU5UFgweEJVa2RGQUZCQldVeFBRVVJmVkU5UFgweEJVa2RGQUVsT1UxVkdSa2xEU1VWT1ZGOVRWRTlTUVVkRkFFaFFSVjlRUVZWVFJVUmZWVkJIVWtGRVJRQklVRVZmVUVGVlUwVkVYMGd5WDFWUVIxSkJSRVVBVTA5VlVrTkZBRUZPVGs5VlRrTkZBRlJTUVVORkFFaFFSVjlWVGtWWVVFVkRWRVZFWDFOUVFVTkZBRVJGVTBOU1NVSkZBRlZPVTFWQ1UwTlNTVUpGQUZKRlEwOVNSQUJJVUVWZlNVNVdRVXhKUkY5TlJWUklUMFFBVGs5VVgwWlBWVTVFQUZCU1QxQkdTVTVFQUZWT1FrbE9SQUJTUlVKSlRrUUFWVTVCVlZSSVQxSkpXa1ZFQUUxRlZFaFBSRjlPVDFSZlFVeE1UMWRGUkFCSVZGUlFYMVpGVWxOSlQwNWZUazlVWDFOVlVGQlBVbFJGUkFCQlRGSkZRVVJaWDFKRlVFOVNWRVZFQUVGRFEwVlFWRVZFQUU1UFZGOUpUVkJNUlUxRlRsUkZSQUJNVDA5UVgwUkZWRVZEVkVWRUFFaFFSVjlEVWw5RldGQkZRMVJGUkFCSVVFVmZURVpmUlZoUVJVTlVSVVFBUTFKRlFWUkZSQUJKVFY5VlUwVkVBRWhRUlY5UVFWVlRSVVFBVkVsTlJVOVZWRjlQUTBOVlVrVkVBRkJCV1UxRlRsUmZVa1ZSVlVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDFKRlVWVkpVa1ZFQUZCU1QxaFpYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFNUZWRmRQVWt0ZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVEVWT1IxUklYMUpGVVZWSlVrVkVBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOVNSVkZWU1ZKRlJBQlZVRWRTUVVSRlgxSkZVVlZKVWtWRUFGQkJSMFZmUlZoUVNWSkZSQUJRVWtWRFQwNUVTVlJKVDA1ZlJrRkpURVZFQUVWWVVFVkRWRUZVU1U5T1gwWkJTVXhGUkFCU1JWWkJURWxFUVZSSlQwNWZSa0ZKVEVWRUFGTlRURjlJUVU1RVUwaEJTMFZmUmtGSlRFVkVBRXhQUTB0RlJBQlVVa0ZPVTBaUFVrMUJWRWxQVGw5QlVGQk1TVVZFQUU1UFZGOU5UMFJKUmtsRlJBQk9UMVJmUlZoVVJVNUVSVVFBUWtGT1JGZEpSRlJJWDB4SlRVbFVYMFZZUTBWRlJFVkVBRk5KVkVWZlNWTmZUMVpGVWt4UFFVUkZSQUJJUlVGRUFFVjRjR1ZqZEdWa0lFaFVWRkF2QUFCZUV3QUFKaE1BQURBUUFBRHdGd0FBblJNQUFCVVNBQUE1RndBQThCSUFBQW9RQUFCMUVnQUFyUklBQUlJVEFBQlBGQUFBZnhBQUFLQVZBQUFqRkFBQWlSSUFBSXNVQUFCTkZRQUExQkVBQU04VUFBQVFHQUFBeVJZQUFOd1dBQURCRVFBQTRCY0FBTHNVQUFCMEZBQUFmQlVBQU9VVUFBQUlGd0FBSHhBQUFHVVZBQUNqRkFBQUtCVUFBQUlWQUFDWkZRQUFMQkFBQUlzWkFBQlBEd0FBMUE0QUFHb1FBQURPRUFBQUFoY0FBSWtPQUFCdUV3QUFIQk1BQUdZVUFBQldGd0FBd1JNQUFNMFRBQUJzRXdBQWFCY0FBR1lYQUFCZkZ3QUFJaE1BQU00UEFBQnBEZ0FBMkE0QUFHTVdBQURMRXdBQXFnNEFBQ2dYQUFBbUZ3QUF4Uk1BQUYwV0FBRG9FUUFBWnhNQUFHVVRBQUR5RmdBQWN4TUFBQjBYQUFENUZnQUE4eEVBQU04T0FBRE9GUUFBREJJQUFMTVJBQUNsRVFBQVlSQUFBRElYQUFDN0V3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ01DQWdJQ0FnQUFBZ0lBQWdJQUFnSUNBZ0lDQWdJQ0FnQUVBQUFBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUlBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQXdBRUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzYjNObFpXVndMV0ZzYVhabEFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRmphSFZ1YTJWa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1ZqZEdsdmJtVnVkQzFzWlc1bmRHaHZibkp2ZUhrdFkyOXVibVZqZEdsdmJnQUFBQUFBQUFBQUFBQUFBQUFBQUhKaGJuTm1aWEl0Wlc1amIyUnBibWR3WjNKaFpHVU5DZzBLRFFwVFRRMEtEUXBVVkZBdlEwVXZWRk5RTHdBQUFBQUFBQUFBQUFBQUFBRUNBQUVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUVVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFCQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUFBQVFFQkFRRUJBUUVCQVFFQlFRRUJBUUVCQVFFQkFRRUJBQUVBQVlIQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRQUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFnQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09J1xuIiwKICAgICIvLyBAdHMtY2hlY2tcblxuJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi90aW1lcnMnKVxuY29uc3QgUmVxdWVzdCA9IHJlcXVpcmUoJy4vY29yZS9yZXF1ZXN0JylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrUGFyc2VyLFxuICBrQ29ubmVjdCxcbiAga0Jsb2NraW5nLFxuICBrUmVzdW1pbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga0Nvbm5lY3RvcixcbiAga01heFJlZGlyZWN0aW9ucyxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga0Nsb3NlLFxuICBrRGVzdHJveSxcbiAga0Rpc3BhdGNoLFxuICBrSW50ZXJjZXB0b3JzLFxuICBrTG9jYWxBZGRyZXNzLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrSFRUUENvbm5WZXJzaW9uLFxuICAvLyBIVFRQMlxuICBrSG9zdCxcbiAga0hUVFAyU2Vzc2lvbixcbiAga0hUVFAyU2Vzc2lvblN0YXRlLFxuICBrSFRUUDJCdWlsZFJlcXVlc3QsXG4gIGtIVFRQMkNvcHlIZWFkZXJzLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Rcbn0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJylcbn0gY2F0Y2gge1xuICAvLyBAdHMtaWdub3JlXG4gIGh0dHAyID0geyBjb25zdGFudHM6IHt9IH1cbn1cblxuY29uc3Qge1xuICBjb25zdGFudHM6IHtcbiAgICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICAgIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gICAgSFRUUDJfSEVBREVSX1BBVEgsXG4gICAgSFRUUDJfSEVBREVSX1NDSEVNRSxcbiAgICBIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgsXG4gICAgSFRUUDJfSEVBREVSX0VYUEVDVCxcbiAgICBIVFRQMl9IRUFERVJfU1RBVFVTXG4gIH1cbn0gPSBodHRwMlxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5cbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdrQ2xvc2VkUmVzb2x2ZScpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpXG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpXG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdGVkID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLmRlZmF1bHR9XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5DbGllbnQuT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwge1xuICAgIGludGVyY2VwdG9ycyxcbiAgICBtYXhIZWFkZXJTaXplLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIHNvY2tldFRpbWVvdXQsXG4gICAgcmVxdWVzdFRpbWVvdXQsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQsXG4gICAgbWF4S2VlcEFsaXZlVGltZW91dCxcbiAgICBrZWVwQWxpdmVNYXhUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gICAgc29ja2V0UGF0aCxcbiAgICBwaXBlbGluaW5nLFxuICAgIHRscyxcbiAgICBzdHJpY3RDb250ZW50TGVuZ3RoLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICBjb25uZWN0LFxuICAgIG1heFJlcXVlc3RzUGVyQ2xpZW50LFxuICAgIGxvY2FsQWRkcmVzcyxcbiAgICBtYXhSZXNwb25zZVNpemUsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgLy8gaDJcbiAgICBhbGxvd0gyLFxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChrZWVwQWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBrZWVwQWxpdmUsIHVzZSBwaXBlbGluaW5nPTAgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBzb2NrZXRUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCByZXF1ZXN0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKGlkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgaWRsZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhLZWVwQWxpdmVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgbWF4S2VlcEFsaXZlVGltZW91dCwgdXNlIGtlZXBBbGl2ZU1heFRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEhlYWRlclNpemUgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKG1heEhlYWRlclNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWF4SGVhZGVyU2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFBhdGggIT0gbnVsbCAmJiB0eXBlb2Ygc29ja2V0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBzb2NrZXRQYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0VGltZW91dCkgfHwgY29ubmVjdFRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3RUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXQpIHx8IGtlZXBBbGl2ZVRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlTWF4VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZU1heFRpbWVvdXQpIHx8IGtlZXBBbGl2ZU1heFRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVNYXhUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVyc1RpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHlUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVxdWVzdHNQZXJDbGllbnQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVxdWVzdHNQZXJDbGllbnQpIHx8IG1heFJlcXVlc3RzUGVyQ2xpZW50IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVxdWVzdHNQZXJDbGllbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGxvY2FsQWRkcmVzcyAhPSBudWxsICYmICh0eXBlb2YgbG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJyB8fCBuZXQuaXNJUChsb2NhbEFkZHJlc3MpID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdsb2NhbEFkZHJlc3MgbXVzdCBiZSB2YWxpZCBzdHJpbmcgSVAgYWRkcmVzcycpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXNwb25zZVNpemUpIHx8IG1heFJlc3BvbnNlU2l6ZSA8IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXNwb25zZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0ICE9IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQpIHx8IGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCA8IC0xKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgLy8gaDJcbiAgICBpZiAoYWxsb3dIMiAhPSBudWxsICYmIHR5cGVvZiBhbGxvd0gyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYWxsb3dIMiBtdXN0IGJlIGEgdmFsaWQgYm9vbGVhbiB2YWx1ZScpXG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgJiYgKHR5cGVvZiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPT0gJ251bWJlcicgfHwgbWF4Q29uY3VycmVudFN0cmVhbXMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDb25jdXJyZW50U3RyZWFtcyBtdXN0IGJlIGEgcG9zc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMuQ2xpZW50ICYmIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3JzLkNsaWVudClcbiAgICAgID8gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tTb2NrZXRdID0gbnVsbFxuICAgIHRoaXNba1BpcGVsaW5pbmddID0gcGlwZWxpbmluZyAhPSBudWxsID8gcGlwZWxpbmluZyA6IDFcbiAgICB0aGlzW2tNYXhIZWFkZXJzU2l6ZV0gPSBtYXhIZWFkZXJTaXplIHx8IGh0dHAubWF4SGVhZGVyU2l6ZVxuICAgIHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XSA9IGtlZXBBbGl2ZVRpbWVvdXQgPT0gbnVsbCA/IDRlMyA6IGtlZXBBbGl2ZVRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVNYXhUaW1lb3V0XSA9IGtlZXBBbGl2ZU1heFRpbWVvdXQgPT0gbnVsbCA/IDYwMGUzIDoga2VlcEFsaXZlTWF4VGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdID0ga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCA9PSBudWxsID8gMWUzIDoga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICB0aGlzW2tTZXJ2ZXJOYW1lXSA9IG51bGxcbiAgICB0aGlzW2tMb2NhbEFkZHJlc3NdID0gbG9jYWxBZGRyZXNzICE9IG51bGwgPyBsb2NhbEFkZHJlc3MgOiBudWxsXG4gICAgdGhpc1trUmVzdW1pbmddID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tIb3N0SGVhZGVyXSA9IGBob3N0OiAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31cXHJcXG5gXG4gICAgdGhpc1trQm9keVRpbWVvdXRdID0gYm9keVRpbWVvdXQgIT0gbnVsbCA/IGJvZHlUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tIZWFkZXJzVGltZW91dF0gPSBoZWFkZXJzVGltZW91dCAhPSBudWxsID8gaGVhZGVyc1RpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba1N0cmljdENvbnRlbnRMZW5ndGhdID0gc3RyaWN0Q29udGVudExlbmd0aCA9PSBudWxsID8gdHJ1ZSA6IHN0cmljdENvbnRlbnRMZW5ndGhcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trTWF4UmVxdWVzdHNdID0gbWF4UmVxdWVzdHNQZXJDbGllbnRcbiAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICB0aGlzW2tNYXhSZXNwb25zZVNpemVdID0gbWF4UmVzcG9uc2VTaXplID4gLTEgPyBtYXhSZXNwb25zZVNpemUgOiAtMVxuICAgIHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPSAnaDEnXG5cbiAgICAvLyBIVFRQLzJcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9ICFhbGxvd0gyXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAvLyBzdHJlYW1zOiBudWxsLCAvLyBGaXhlZCBxdWV1ZSBvZiBzdHJlYW1zIC0gRm9yIGZ1dHVyZSBzdXBwb3J0IG9mIGBwdXNoYFxuICAgICAgICAgIG9wZW5TdHJlYW1zOiAwLCAvLyBLZWVwIHRyYWNrIG9mIHRoZW0gdG8gZGVjaWRlIHdldGhlciBvciBub3QgdW5yZWYgdGhlIHNlc3Npb25cbiAgICAgICAgICBtYXhDb25jdXJyZW50U3RyZWFtczogbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIHRoaXNba0hvc3RdID0gYCR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfWBcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1BlbmRpbmdJZHhdXG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BlbmRpbmdJZHhdIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gISF0aGlzW2tTb2NrZXRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trU29ja2V0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tTb2NrZXRdXG4gICAgcmV0dXJuIChcbiAgICAgIChzb2NrZXQgJiYgKHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tCbG9ja2luZ10pKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49ICh0aGlzW2tQaXBlbGluaW5nXSB8fCAxKSkgfHxcbiAgICAgIHRoaXNba1BlbmRpbmddID4gMFxuICAgIClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZTogb25seSB1c2VkIGZvciB0ZXN0ICovXG4gIFtrQ29ubmVjdF0gKGNiKSB7XG4gICAgY29ubmVjdCh0aGlzKVxuICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGNiKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvcmlnaW4gPSBvcHRzLm9yaWdpbiB8fCB0aGlzW2tVcmxdLm9yaWdpblxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgICAgID8gUmVxdWVzdFtrSFRUUDJCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgICAgIDogUmVxdWVzdFtrSFRUUDFCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSAmJiB0aGlzW2tOZWVkRHJhaW5dICE9PSAyICYmIHRoaXNba0J1c3ldKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gMlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dIDwgMlxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIC8vIFRPRE86IGZvciBIMiB3ZSBuZWVkIHRvIGdyYWNlZnVsbHkgZmx1c2ggdGhlIHJlbWFpbmluZyBlbnF1ZXVlZFxuICAgIC8vIHJlcXVlc3QgYW5kIGNsb3NlIGVhY2ggc3RyZWFtLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW2tTaXplXSkge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba0hUVFAyU2Vzc2lvbl0sIGVycilcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXNba1NvY2tldF0pIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XS5vbignY2xvc2UnLCBjYWxsYmFjayksIGVycilcbiAgICAgIH1cblxuICAgICAgcmVzdW1lKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJGcmFtZUVycm9yICh0eXBlLCBjb2RlLCBpZCkge1xuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuXG4gIGlmIChpZCA9PT0gMCkge1xuICAgIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuICAgIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbn1cblxuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRdXG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJHT0FXQVlcIiBmcmFtZSByZWNlaXZlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KHRoaXNba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JyxcbiAgICBjbGllbnRba1VybF0sXG4gICAgW2NsaWVudF0sXG4gICAgZXJyXG4gIClcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2xsaHR0cC9jb25zdGFudHMnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20ocmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2QsIHtcbiAgICBlbnY6IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gICAgICB3YXNtX29uX3VybDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX3N0YXR1czogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vblN0YXR1cyhuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfYmVnaW46IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQmVnaW4oKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfZmllbGQ6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJGaWVsZChuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl92YWx1ZTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlclZhbHVlKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyc19jb21wbGV0ZTogKHAsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyc0NvbXBsZXRlKHN0YXR1c0NvZGUsIEJvb2xlYW4odXBncmFkZSksIEJvb2xlYW4oc2hvdWxkS2VlcEFsaXZlKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fYm9keTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkJvZHkobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2NvbXBsZXRlOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKCkgfHwgMFxuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuICAgIH1cbiAgfSlcbn1cblxubGV0IGxsaHR0cEluc3RhbmNlID0gbnVsbFxubGV0IGxsaHR0cFByb21pc2UgPSBsYXp5bGxodHRwKClcbmxsaHR0cFByb21pc2UuY2F0Y2goKVxuXG5sZXQgY3VycmVudFBhcnNlciA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJTaXplID0gMFxubGV0IGN1cnJlbnRCdWZmZXJQdHIgPSBudWxsXG5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDFcbmNvbnN0IFRJTUVPVVRfQk9EWSA9IDJcbmNvbnN0IFRJTUVPVVRfSURMRSA9IDNcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0ICh2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSkge1xuICAgICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCB2YWx1ZSwgdGhpcylcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHRoaXMudGltZW91dC51bnJlZikge1xuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZW91dFZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICBvblN0YXR1cyAoYnVmKSB7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gYnVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIG9uTWVzc2FnZUJlZ2luICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJGaWVsZCAoYnVmKSB7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgb25IZWFkZXJWYWx1ZSAoYnVmKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICAgIGxlbiArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmhlYWRlcnNbbGVuIC0gMl1cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoc29ja2V0ID09PSBjbGllbnRba1NvY2tldF0pXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcbiAgICBhc3NlcnQocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IG51bGxcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBzb2NrZXQudW5zaGlmdChoZWFkKVxuXG4gICAgc29ja2V0W2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHNvY2tldFtrUGFyc2VyXSA9IG51bGxcblxuICAgIHNvY2tldFtrQ2xpZW50XSA9IG51bGxcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcbiAgICBzb2NrZXRcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmICh0aGlzLnNob3VsZEtlZXBBbGl2ZSAmJiBjbGllbnRba1BpcGVsaW5pbmddKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUaW1lb3V0ID0gdGhpcy5rZWVwQWxpdmUgPyB1dGlsLnBhcnNlS2VlcEFsaXZlVGltZW91dCh0aGlzLmtlZXBBbGl2ZSkgOiBudWxsXG5cbiAgICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWluKFxuICAgICAgICAgIGtlZXBBbGl2ZVRpbWVvdXQgLSBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdLFxuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlTWF4VGltZW91dF1cbiAgICAgICAgKVxuICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGltZW91dFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSBjbGllbnRba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9wIG1vcmUgcmVxdWVzdHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkLlxuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGF1c2UgPSByZXF1ZXN0Lm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCB0aGlzLnJlc3VtZSwgc3RhdHVzVGV4dCkgPT09IGZhbHNlXG5cbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdXNlID8gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCA6IDBcbiAgfVxuXG4gIG9uQm9keSAoYnVmKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgbWF4UmVzcG9uc2VTaXplIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDIwMClcblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgPiAtMSAmJiB0aGlzLmJ5dGVzUmVhZCArIGJ1Zi5sZW5ndGggPiBtYXhSZXNwb25zZVNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzUmVhZCArPSBidWYubGVuZ3RoXG5cbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoYnVmKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlQ29tcGxldGUgKCkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCwgc2hvdWxkS2VlcEFsaXZlIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCAmJiAoIXN0YXR1c0NvZGUgfHwgc2hvdWxkS2VlcEFsaXZlKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxsaHR0cD8gKi9cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoICYmIGJ5dGVzUmVhZCAhPT0gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKGhlYWRlcnMpXG5cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjbGllbnRba1J1bm5pbmddLCAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09PSAxKSB7XG4gICAgICAvLyBXZSBtdXN0IHdhaXQgYSBmdWxsIGV2ZW50IGxvb3AgY3ljbGUgdG8gcmV1c2UgdGhpcyBzb2NrZXQgdG8gbWFrZSBzdXJlXG4gICAgICAvLyB0aGF0IG5vbi1zcGVjIGNvbXBsaWFudCBzZXJ2ZXJzIGFyZSBub3QgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBldmVuIGlmIHRoZXlcbiAgICAgIC8vIHNhaWQgdGhleSB3b24ndC5cbiAgICAgIHNldEltbWVkaWF0ZShyZXN1bWUsIGNsaWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25QYXJzZXJUaW1lb3V0IChwYXJzZXIpIHtcbiAgY29uc3QgeyBzb2NrZXQsIHRpbWVvdXRUeXBlLCBjbGllbnQgfSA9IHBhcnNlclxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXJzZXIucGF1c2VkLCAnY2Fubm90IGJlIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBoZWFkZXJzJylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBIZWFkZXJzVGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpIHtcbiAgICBpZiAoIXBhcnNlci5wYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0lETEUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0UmVhZGFibGUgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG4gIGlmIChwYXJzZXIpIHtcbiAgICBwYXJzZXIucmVhZE1vcmUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycikge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICAvLyBPbiBNYWMgT1MsIHdlIGdldCBhbiBFQ09OTlJFU0VUIGV2ZW4gaWYgdGhlcmUgaXMgYSBmdWxsIGJvZHkgdG8gYmUgZm9yd2FyZGVkXG4gICAgLy8gdG8gdGhlIHVzZXIuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZvciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkVycm9yIChjbGllbnQsIGVycikge1xuICBpZiAoXG4gICAgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnXG4gICkge1xuICAgIC8vIEVycm9yIGlzIG5vdCBjYXVzZWQgYnkgcnVubmluZyByZXF1ZXN0IGFuZCBub3QgYSByZWNvdmVyYWJsZVxuICAgIC8vIHNvY2tldCBlcnJvci5cblxuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmdJZHhdID09PSBjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFbmQgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyLCBba0NsaWVudF06IGNsaWVudCB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gxJyAmJiBwYXJzZXIpIHtcbiAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgIH1cblxuICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrU29ja2V0XSlcblxuICBsZXQgeyBob3N0LCBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIC8vIFJlc29sdmUgaXB2NlxuICBpZiAoaG9zdG5hbWVbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3RuYW1lLmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgY29uc3QgaXAgPSBob3N0bmFtZS5zdWJzdHJpbmcoMSwgaWR4KVxuXG4gICAgYXNzZXJ0KG5ldC5pc0lQKGlwKSlcbiAgICBob3N0bmFtZSA9IGlwXG4gIH1cblxuICBjbGllbnRba0Nvbm5lY3RpbmddID0gdHJ1ZVxuXG4gIGlmIChjaGFubmVscy5iZWZvcmVDb25uZWN0Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5wdWJsaXNoKHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSksIG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgY29uc3QgaXNIMiA9IHNvY2tldC5hbHBuUHJvdG9jb2wgPT09ICdoMidcbiAgICBpZiAoaXNIMikge1xuICAgICAgaWYgKCFoMkV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgICBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgICAgY29kZTogJ1VORElDSS1IMidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoY2xpZW50W2tVcmxdLCB7XG4gICAgICAgIGNyZWF0ZUNvbm5lY3Rpb246ICgpID0+IHNvY2tldCxcbiAgICAgICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXS5tYXhDb25jdXJyZW50U3RyZWFtc1xuICAgICAgfSlcblxuICAgICAgY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID0gJ2gyJ1xuICAgICAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICAgICAgc2Vzc2lvbltrU29ja2V0XSA9IHNvY2tldFxuICAgICAgc2Vzc2lvbi5vbignZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZnJhbWVFcnJvcicsIG9uSHR0cDJGcmFtZUVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZW5kJywgb25IdHRwMlNlc3Npb25FbmQpXG4gICAgICBzZXNzaW9uLm9uKCdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgc2Vzc2lvbi51bnJlZigpXG5cbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICAgIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgICAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICAgICAgbGxodHRwUHJvbWlzZSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1BhcnNlcl0gPSBuZXcgUGFyc2VyKGNsaWVudCwgc29ja2V0LCBsbGh0dHBJbnN0YW5jZSlcbiAgICB9XG5cbiAgICBzb2NrZXRba0NvdW50ZXJdID0gMFxuICAgIHNvY2tldFtrTWF4UmVxdWVzdHNdID0gY2xpZW50W2tNYXhSZXF1ZXN0c11cbiAgICBzb2NrZXRba0NsaWVudF0gPSBjbGllbnRcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcblxuICAgIHNvY2tldFxuICAgICAgLm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAub24oJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5vbignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IoY2xpZW50LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcbiAgfVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmZ1bmN0aW9uIGVtaXREcmFpbiAoY2xpZW50KSB7XG4gIGNsaWVudFtrTmVlZERyYWluXSA9IDBcbiAgY2xpZW50LmVtaXQoJ2RyYWluJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbn1cblxuZnVuY3Rpb24gcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgaWYgKGNsaWVudFtrUmVzdW1pbmddID09PSAyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDJcblxuICBfcmVzdW1lKGNsaWVudCwgc3luYylcbiAgY2xpZW50W2tSZXN1bWluZ10gPSAwXG5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPiAyNTYpIHtcbiAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoMCwgY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBjbGllbnRba1BlbmRpbmdJZHhdIC09IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1J1bm5pbmdJZHhdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXN1bWUgKGNsaWVudCwgc3luYykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nsb3NlZFJlc29sdmVdICYmICFjbGllbnRba1NpemVdKSB7XG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICAgIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQgJiYgc29ja2V0LmFscG5Qcm90b2NvbCAhPT0gJ2gyJykge1xuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgICBzb2NrZXQudW5yZWYoKVxuICAgICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvY2tldFtrTm9SZWZdICYmIHNvY2tldC5yZWYpIHtcbiAgICAgICAgc29ja2V0LnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9JRExFKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdLCBUSU1FT1VUX0lETEUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICAgID8gcmVxdWVzdC5oZWFkZXJzVGltZW91dFxuICAgICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdERyYWluLCBjbGllbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGNsaWVudFtrUGlwZWxpbmluZ10gfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcblxuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQuc2VydmVybmFtZSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzb2NrZXQgJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgIXJlcXVlc3QuaWRlbXBvdGVudCkge1xuICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgLy8gRG9uJ3QgZGlzcGF0Y2ggYW4gdXBncmFkZSB1bnRpbCBhbGwgcHJlY2VkaW5nIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpKSB7XG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIGJ5IHdhaXRpbmcgZm9yIGluZmxpZ2h0XG4gICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiB3cml0ZShjbGllbnQsIHJlcXVlc3QpKSB7XG4gICAgICBjbGllbnRba1BlbmRpbmdJZHhdKytcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUGVuZGluZ0lkeF0sIDEpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIHdyaXRlSDIoY2xpZW50LCBjbGllbnRba0hUVFAyU2Vzc2lvbl0sIHJlcXVlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgaGVhZGVycywgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gYm9keUxlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignYWJvcnRlZCcpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvaXNzdWVzLzI1OFxuICAgIC8vIENsb3NlIGFmdGVyIGEgSEVBRCByZXF1ZXN0IHRvIGludGVyb3Agd2l0aCBtaXNiZWhhdmluZyBzZXJ2ZXJzXG4gICAgLy8gdGhhdCBtYXkgc2VuZCBhIGJvZHkgaW4gdGhlIHJlc3BvbnNlLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIC8vIE9uIENPTk5FQ1Qgb3IgdXBncmFkZSwgYmxvY2sgcGlwZWxpbmUgZnJvbSBkaXNwYXRjaGluZyBmdXJ0aGVyXG4gICAgLy8gcmVxdWVzdHMgb24gdGhpcyBjb25uZWN0aW9uLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAocmVzZXQgIT0gbnVsbCkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gcmVzZXRcbiAgfVxuXG4gIGlmIChjbGllbnRba01heFJlcXVlc3RzXSAmJiBzb2NrZXRba0NvdW50ZXJdKysgPj0gY2xpZW50W2tNYXhSZXF1ZXN0c10pIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChibG9ja2luZykge1xuICAgIHNvY2tldFtrQmxvY2tpbmddID0gdHJ1ZVxuICB9XG5cbiAgbGV0IGhlYWRlciA9IGAke21ldGhvZH0gJHtwYXRofSBIVFRQLzEuMVxcclxcbmBcblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgaGVhZGVyICs9IGBob3N0OiAke2hvc3R9XFxyXFxuYFxuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSBjbGllbnRba0hvc3RIZWFkZXJdXG4gIH1cblxuICBpZiAodXBncmFkZSkge1xuICAgIGhlYWRlciArPSBgY29ubmVjdGlvbjogdXBncmFkZVxcclxcbnVwZ3JhZGU6ICR7dXBncmFkZX1cXHJcXG5gXG4gIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSAmJiAhc29ja2V0W2tSZXNldF0pIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGtlZXAtYWxpdmVcXHJcXG4nXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBjbG9zZVxcclxcbidcbiAgfVxuXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgaGVhZGVyICs9IGhlYWRlcnNcbiAgfVxuXG4gIGlmIChjaGFubmVscy5zZW5kSGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNlbmRIZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0LCBoZWFkZXJzOiBoZWFkZXIsIHNvY2tldCB9KVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICBpZiAoIWJvZHkgfHwgYm9keUxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgc29ja2V0LmNvcmsoKVxuICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICBzb2NrZXQudW5jb3JrKClcbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keTogYm9keS5zdHJlYW0oKSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHNlc3Npb24sIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGV4cGVjdENvbnRpbnVlLCBzaWduYWwsIGhlYWRlcnM6IHJlcUhlYWRlcnMgfSA9IHJlcXVlc3RcblxuICBsZXQgaGVhZGVyc1xuICBpZiAodHlwZW9mIHJlcUhlYWRlcnMgPT09ICdzdHJpbmcnKSBoZWFkZXJzID0gUmVxdWVzdFtrSFRUUDJDb3B5SGVhZGVyc10ocmVxSGVhZGVycy50cmltKCkpXG4gIGVsc2UgaGVhZGVycyA9IHJlcUhlYWRlcnNcblxuICBpZiAodXBncmFkZSkge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUT0RPKEhUVFAvMik6IFNob3VsZCB3ZSBjYWxsIG9uQ29ubmVjdCBpbW1lZGlhdGVseSBvciBvbiBzdHJlYW0gcmVhZHkgZXZlbnQ/XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuICBjb25zdCBoMlN0YXRlID0gY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV1cblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9BVVRIT1JJVFldID0gaG9zdCB8fCBjbGllbnRba0hvc3RdXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBzZXNzaW9uLnJlZigpXG4gICAgLy8gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLCBzdHJlYW1zIGFyZSBwZW5kaW5nLCBmaXJzdCByZXF1ZXN0XG4gICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgc3RyZWFtLiBXZSB0cmlnZ2VyIGEgcmVxdWVzdCB0byBjcmVhdGUgdGhlIHN0cmVhbSBhbmQgd2FpdCB1bnRpbFxuICAgIC8vIGByZWFkeWAgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gICAgLy8gV2UgZGlzYWJsZWQgZW5kU3RyZWFtIHRvIGFsbG93IHRoZSB1c2VyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW1cbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IGZhbHNlLCBzaWduYWwgfSlcblxuICAgIGlmIChzdHJlYW0uaWQgJiYgIXN0cmVhbS5wZW5kaW5nKSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uY2UoJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHNlc3Npb24udW5yZWYoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04LjNcbiAgLy8gOnBhdGggYW5kIDpzY2hlbWUgaGVhZGVycyBtdXN0IGJlIG9taXRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwIHx8ICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGFzc2VydChib2R5LCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSF0gPSBgJHtjb250ZW50TGVuZ3RofWBcbiAgfVxuXG4gIHNlc3Npb24ucmVmKClcblxuICBjb25zdCBzaG91bGRFbmRTdHJlYW0gPSBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc2V2ZXJhbCBzdHJlYW1zIG9wZW5cbiAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCByZWFsSGVhZGVycywgc3RyZWFtLnJlc3VtZS5iaW5kKHN0cmVhbSksICcnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKFtdKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZnJhbWVFcnJvcicsICh0eXBlLCBjb2RlKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHN0cmVhbS5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgYWJvcnRlZFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndGltZW91dCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdGltZW91dFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigncHVzaCcsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9yIHB1c2hcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RyYWlsZXJzJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRyYWlsZXJzXG4gIC8vIH0pXG5cbiAgcmV0dXJuIHRydWVcblxuICBmdW5jdGlvbiB3cml0ZUJvZHlIMiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc3RyZWFtLmNvcmsoKVxuICAgICAgc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBzdHJlYW0udW5jb3JrKClcbiAgICAgIHN0cmVhbS5lbmQoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBib2R5OiBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICAgIGhlYWRlcjogJydcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYih7XG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgd3JpdGVTdHJlYW0oe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHBpcGUgPSBwaXBlbGluZShcbiAgICAgIGJvZHksXG4gICAgICBoMnN0cmVhbSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgICAgdXRpbC5kZXN0cm95KGgyc3RyZWFtLCBlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHBpcGUub24oJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgIHBpcGUub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgcGlwZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgICB1dGlsLmRlc3Ryb3kocGlwZSlcbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gb25QaXBlRGF0YSAoY2h1bmspIHtcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcblxuICBjb25zdCBvbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykgJiYgdGhpcy5wYXVzZSkge1xuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICAgIGJvZHkucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gb25GaW5pc2hlZChlcnIpKVxuICB9XG4gIGNvbnN0IG9uRmluaXNoZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmaW5pc2hlZCA9IHRydWVcblxuICAgIGFzc2VydChzb2NrZXQuZGVzdHJveWVkIHx8IChzb2NrZXRba1dyaXRpbmddICYmIGNsaWVudFtrUnVubmluZ10gPD0gMSkpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2Vycm9yJywgb25GaW5pc2hlZClcblxuICAgIGJvZHlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkFib3J0KVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIGNvbnN0IGlzSDIgPSBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggIT09IGJvZHkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpKVxuXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGgyc3RyZWFtLmNvcmsoKVxuICAgICAgaDJzdHJlYW0ud3JpdGUoYnVmZmVyKVxuICAgICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0LmNvcmsoKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZGVzdHJveShpc0gyID8gaDJzdHJlYW0gOiBzb2NrZXQsIGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgICB0cnkge1xuICAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gaDJzdHJlYW0ud3JpdGUoY2h1bmspXG4gICAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoMnN0cmVhbS5kZXN0cm95KGVycilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgIGgyc3RyZWFtLmVuZCgpXG4gICAgICBoMnN0cmVhbVxuICAgICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZW5kKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldFxuICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICB9XG59XG5cbmNsYXNzIEFzeW5jV3JpdGVyIHtcbiAgY29uc3RydWN0b3IgKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSkge1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMFxuICAgIHRoaXMuZXhwZWN0c1BheWxvYWQgPSBleHBlY3RzUGF5bG9hZFxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gdHJ1ZVxuICB9XG5cbiAgd3JpdGUgKGNodW5rKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rKVxuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFdlIHNob3VsZCBkZWZlciB3cml0aW5nIGNodW5rcy5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gKyBsZW4gPiBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgfVxuXG4gICAgc29ja2V0LmNvcmsoKVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn10cmFuc2Zlci1lbmNvZGluZzogY2h1bmtlZFxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYFxcclxcbiR7bGVuLnRvU3RyaW5nKDE2KX1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBsZW5cblxuICAgIGNvbnN0IHJldCA9IHNvY2tldC53cml0ZShjaHVuaylcblxuICAgIHNvY2tldC51bmNvcmsoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZW5kICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIsIHJlcXVlc3QgfSA9IHRoaXNcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmIChleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGluIGEgcmVxdWVzdCBtZXNzYWdlIHdoZW5cbiAgICAgICAgLy8gbm8gVHJhbnNmZXItRW5jb2RpbmcgaXMgc2VudCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGRlZmluZXMgYSBtZWFuaW5nXG4gICAgICAgIC8vIGZvciBhbiBlbmNsb3NlZCBwYXlsb2FkIGJvZHkuXG5cbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZSgnXFxyXFxuMFxcclxcblxcclxcbicsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiAhPT0gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8vIEV4dHJhY3RlZCBmcm9tIG5vZGUvbGliL2ludGVybmFsL2ZpeGVkX3F1ZXVlLmpzXG5cbi8vIEN1cnJlbnRseSBvcHRpbWFsIHF1ZXVlIHNpemUsIHRlc3RlZCBvbiBWOCA2LjAgLSA2LjYuIE11c3QgYmUgcG93ZXIgb2YgdHdvLlxuY29uc3Qga1NpemUgPSAyMDQ4O1xuY29uc3Qga01hc2sgPSBrU2l6ZSAtIDE7XG5cbi8vIFRoZSBGaXhlZFF1ZXVlIGlzIGltcGxlbWVudGVkIGFzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGZpeGVkLXNpemVcbi8vIGNpcmN1bGFyIGJ1ZmZlcnMuIEl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4vL1xuLy8gIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFxuLy8gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4vLyAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgPC0tLS0tXFwgICAgICAgKy0tLS0tLS0tLS0tKyA8LS0tLS0tXFwgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICBcXC0tLS0tIHwgICBuZXh0ICAgIHwgICAgICAgICBcXC0tLS0tLS0gfCAgIG5leHQgICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBPciwgaWYgdGhlcmUgaXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyLCBpdCBsb29rcyBzb21ldGhpbmdcbi8vIGxpa2UgZWl0aGVyIG9mIHRoZXNlOlxuLy9cbi8vICBoZWFkICAgdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgICB0YWlsXG4vLyAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHxcbi8vICAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtudWxsXSAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICAgICAgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gQWRkaW5nIGEgdmFsdWUgbWVhbnMgbW92aW5nIGB0b3BgIGZvcndhcmQgYnkgb25lLCByZW1vdmluZyBtZWFuc1xuLy8gbW92aW5nIGBib3R0b21gIGZvcndhcmQgYnkgb25lLiBBZnRlciByZWFjaGluZyB0aGUgZW5kLCB0aGUgcXVldWVcbi8vIHdyYXBzIGFyb3VuZC5cbi8vXG4vLyBXaGVuIGB0b3AgPT09IGJvdHRvbWAgdGhlIGN1cnJlbnQgcXVldWUgaXMgZW1wdHkgYW5kIHdoZW5cbi8vIGB0b3AgKyAxID09PSBib3R0b21gIGl0J3MgZnVsbC4gVGhpcyB3YXN0ZXMgYSBzaW5nbGUgc3BhY2Ugb2Ygc3RvcmFnZVxuLy8gYnV0IGFsbG93cyBtdWNoIHF1aWNrZXIgY2hlY2tzLlxuXG5jbGFzcyBGaXhlZENpcmN1bGFyQnVmZmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ib3R0b20gPSAwO1xuICAgIHRoaXMudG9wID0gMDtcbiAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXkoa1NpemUpO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnRvcCA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBpc0Z1bGwoKSB7XG4gICAgcmV0dXJuICgodGhpcy50b3AgKyAxKSAmIGtNYXNrKSA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICB0aGlzLmxpc3RbdGhpcy50b3BdID0gZGF0YTtcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYga01hc2s7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMubGlzdFt0aGlzLmJvdHRvbV07XG4gICAgaWYgKG5leHRJdGVtID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmxpc3RbdGhpcy5ib3R0b21dID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYm90dG9tID0gKHRoaXMuYm90dG9tICsgMSkgJiBrTWFzaztcbiAgICByZXR1cm4gbmV4dEl0ZW07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaXhlZFF1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5pc0VtcHR5KCk7XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICBpZiAodGhpcy5oZWFkLmlzRnVsbCgpKSB7XG4gICAgICAvLyBIZWFkIGlzIGZ1bGw6IENyZWF0ZXMgYSBuZXcgcXVldWUsIHNldHMgdGhlIG9sZCBxdWV1ZSdzIGAubmV4dGAgdG8gaXQsXG4gICAgICAvLyBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IG1haW4gcXVldWUuXG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaGVhZC5wdXNoKGRhdGEpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBjb25zdCBuZXh0ID0gdGFpbC5zaGlmdCgpO1xuICAgIGlmICh0YWlsLmlzRW1wdHkoKSAmJiB0YWlsLm5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgcXVldWUsIGl0IGZvcm1zIHRoZSBuZXcgdGFpbC5cbiAgICAgIHRoaXMudGFpbCA9IHRhaWwubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbn07XG4iLAogICAgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGtQb29sID0gU3ltYm9sKCdwb29sJylcblxuY2xhc3MgUG9vbFN0YXRzIHtcbiAgY29uc3RydWN0b3IgKHBvb2wpIHtcbiAgICB0aGlzW2tQb29sXSA9IHBvb2xcbiAgfVxuXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrQ29ubmVjdGVkXVxuICB9XG5cbiAgZ2V0IGZyZWUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrRnJlZV1cbiAgfVxuXG4gIGdldCBwZW5kaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1BlbmRpbmddXG4gIH1cblxuICBnZXQgcXVldWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1F1ZXVlZF1cbiAgfVxuXG4gIGdldCBydW5uaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1J1bm5pbmddXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tTaXplXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFN0YXRzXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL25vZGUvZml4ZWQtcXVldWUnKVxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSwga1J1bm5pbmcsIGtQZW5kaW5nLCBrUXVldWVkLCBrQnVzeSwga0ZyZWUsIGtVcmwsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpc1trUXVldWVdLnNoaWZ0KClcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaXRlbS5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgICAgdGhpc1trT25EcmFpbl0oY2xpZW50W2tVcmxdLCBbdGhpcywgY2xpZW50XSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgW2tSZW1vdmVDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnQuY2xvc2UoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZihjbGllbnQpXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gdGhpc1trQ2xpZW50c10uc29tZShkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0Nvbm5lY3Rpb25zID0gU3ltYm9sKCdjb25uZWN0aW9ucycpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgY29ubmVjdGlvbnMsXG4gICAgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LFxuICAgIGNvbm5lY3QsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgdGxzLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIHNvY2tldFBhdGgsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgYWxsb3dIMixcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChjb25uZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3Rpb25zKSB8fCBjb25uZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbnMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0Nvbm5lY3Rpb25zXSA9IGNvbm5lY3Rpb25zIHx8IG51bGxcbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbihvcmlnaW4pXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0LCBhbGxvd0gyIH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSlcblxuICAgIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgcGFyc2VPcmlnaW4gfSA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0dyZWF0ZXN0Q29tbW9uRGl2aXNvciA9IFN5bWJvbCgna0dyZWF0ZXN0Q29tbW9uRGl2aXNvcicpXG5jb25zdCBrQ3VycmVudFdlaWdodCA9IFN5bWJvbCgna0N1cnJlbnRXZWlnaHQnKVxuY29uc3Qga0luZGV4ID0gU3ltYm9sKCdrSW5kZXgnKVxuY29uc3Qga1dlaWdodCA9IFN5bWJvbCgna1dlaWdodCcpXG5jb25zdCBrTWF4V2VpZ2h0UGVyU2VydmVyID0gU3ltYm9sKCdrTWF4V2VpZ2h0UGVyU2VydmVyJylcbmNvbnN0IGtFcnJvclBlbmFsdHkgPSBTeW1ib2woJ2tFcnJvclBlbmFsdHknKVxuXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGIgPT09IDApIHJldHVybiBhXG4gIHJldHVybiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IoYiwgYSAlIGIpXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAodXBzdHJlYW1zID0gW10sIHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCAuLi5vcHRzIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba09wdGlvbnNdID0gb3B0c1xuICAgIHRoaXNba0luZGV4XSA9IC0xXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSAwXG5cbiAgICB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdID0gdGhpc1trT3B0aW9uc10ubWF4V2VpZ2h0UGVyU2VydmVyIHx8IDEwMFxuICAgIHRoaXNba0Vycm9yUGVuYWx0eV0gPSB0aGlzW2tPcHRpb25zXS5lcnJvclBlbmFsdHkgfHwgMTVcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cHN0cmVhbXMpKSB7XG4gICAgICB1cHN0cmVhbXMgPSBbdXBzdHJlYW1zXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl0gPSB0aGlzW2tDbGllbnRzXS5tYXAocCA9PiBwW2tXZWlnaHRdKS5yZWR1Y2UoZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yLCAwKVxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlOiBvbmx5IGZvciBOb2RlIDEyICovXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgV2Vha1JlZjogZ2xvYmFsLldlYWtSZWYgfHwgQ29tcGF0V2Vha1JlZixcbiAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5IHx8IENvbXBhdEZpbmFsaXplclxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga0ZpbmFsaXplciA9IFN5bWJvbCgnZmluYWxpemVyJylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gICAgdGhpc1trQ2xpZW50c10gPSBuZXcgTWFwKClcbiAgICB0aGlzW2tGaW5hbGl6ZXJdID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi8ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5kZWxldGUoa2V5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhZ2VudCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHJldCArPSBjbGllbnRba1J1bm5pbmddXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGtleVxuICAgIGlmIChvcHRzLm9yaWdpbiAmJiAodHlwZW9mIG9wdHMub3JpZ2luID09PSAnc3RyaW5nJyB8fCBvcHRzLm9yaWdpbiBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhvcHRzLm9yaWdpbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLm9yaWdpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBVUkwuJylcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuXG4gICAgbGV0IGRpc3BhdGNoZXIgPSByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcHRzLm9yaWdpbiwgdGhpc1trT3B0aW9uc10pXG4gICAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICAgIHRoaXNba0NsaWVudHNdLnNldChrZXksIG5ldyBXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICAgICAgdGhpc1trRmluYWxpemVyXS5yZWdpc3RlcihkaXNwYXRjaGVyLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGNsaWVudC5jbG9zZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGRlc3Ryb3lQcm9taXNlcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50XG4iLAogICAgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvOTA3XG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxubGV0IEJsb2JcblxuY29uc3Qga0NvbnN1bWUgPSBTeW1ib2woJ2tDb25zdW1lJylcbmNvbnN0IGtSZWFkaW5nID0gU3ltYm9sKCdrUmVhZGluZycpXG5jb25zdCBrQm9keSA9IFN5bWJvbCgna0JvZHknKVxuY29uc3Qga0Fib3J0ID0gU3ltYm9sKCdhYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJvZHlSZWFkYWJsZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICByZXN1bWUsXG4gICAgYWJvcnQsXG4gICAgY29udGVudFR5cGUgPSAnJyxcbiAgICBoaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0IC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6IHJlc3VtZSxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IGZhbHNlXG5cbiAgICB0aGlzW2tBYm9ydF0gPSBhYm9ydFxuICAgIHRoaXNba0NvbnN1bWVdID0gbnVsbFxuICAgIHRoaXNba0JvZHldID0gbnVsbFxuICAgIHRoaXNba0NvbnRlbnRUeXBlXSA9IGNvbnRlbnRUeXBlXG5cbiAgICAvLyBJcyBzdHJlYW0gYmVpbmcgY29uc3VtZWQgdGhyb3VnaCBSZWFkYWJsZSBBUEk/XG4gICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdCB3ZSBhdm9pZCBjaGVja2luZ1xuICAgIC8vIGZvciAnZGF0YScgYW5kICdyZWFkYWJsZScgbGlzdGVuZXJzIGluIHRoZSBob3QgcGF0aFxuICAgIC8vIGluc2lkZSBwdXNoKCkuXG4gICAgdGhpc1trUmVhZGluZ10gPSBmYWxzZVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXNba0Fib3J0XSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmRlc3Ryb3koZXJyKVxuICB9XG5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgLy8gTm9kZSA8IDE2LjdcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvbiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIGFkZExpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb2ZmIChldiwgLi4uYXJncykge1xuICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgLi4uYXJncylcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSAoXG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCB8fFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9mZihldiwgLi4uYXJncylcbiAgfVxuXG4gIHB1c2ggKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0NvbnN1bWVdICYmIGNodW5rICE9PSBudWxsICYmIHRoaXMucmVhZGFibGVMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gb3B0cyAmJiBOdW1iZXIuaXNGaW5pdGUob3B0cy5saW1pdCkgPyBvcHRzLmxpbWl0IDogMjYyMTQ0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cyAmJiBvcHRzLnNpZ25hbFxuXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICAgICAgfVxuICAgICAgICB1dGlsLnRocm93SWZBYm9ydGVkKHNpZ25hbClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzaWduYWxMaXN0ZW5lckNsZWFudXAgPSBzaWduYWxcbiAgICAgICAgPyB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgfSlcbiAgICAgICAgOiBub29wXG5cbiAgICAgIHRoaXNcbiAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaWduYWxMaXN0ZW5lckNsZWFudXAoKVxuICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uIHx8IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJyksIHsgbmFtZTogJ0Fib3J0RXJyb3InIH0pKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oJ2Vycm9yJywgbm9vcClcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgbGltaXQgLT0gY2h1bmsubGVuZ3RoXG4gICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVzdW1lKClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWxvY2tlZFxuZnVuY3Rpb24gaXNMb2NrZWQgKHNlbGYpIHtcbiAgLy8gQ29uc3VtZSBpcyBhbiBpbXBsaWNpdCBsb2NrLlxuICByZXR1cm4gKHNlbGZba0JvZHldICYmIHNlbGZba0JvZHldLmxvY2tlZCA9PT0gdHJ1ZSkgfHwgc2VsZltrQ29uc3VtZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGlzVW51c2FibGUgKHNlbGYpIHtcbiAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQoc2VsZikgfHwgaXNMb2NrZWQoc2VsZilcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uc3VtZSAoc3RyZWFtLCB0eXBlKSB7XG4gIGlmIChpc1VudXNhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gIH1cblxuICBhc3NlcnQoIXN0cmVhbVtrQ29uc3VtZV0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW1ba0NvbnN1bWVdID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHN0cmVhbSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3QsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgICBib2R5OiBbXVxuICAgIH1cblxuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY29uc3VtZVN0YXJ0LCBzdHJlYW1ba0NvbnN1bWVdKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBzdGF0ZS5idWZmZXIpIHtcbiAgICBjb25zdW1lUHVzaChjb25zdW1lLCBjaHVuaylcbiAgfVxuXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3VtZS5zdHJlYW0ucmVzdW1lKClcblxuICB3aGlsZSAoY29uc3VtZS5zdHJlYW0ucmVhZCgpICE9IG51bGwpIHtcbiAgICAvLyBMb29wXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZUVuZCAoY29uc3VtZSkge1xuICBjb25zdCB7IHR5cGUsIGJvZHksIHJlc29sdmUsIHN0cmVhbSwgbGVuZ3RoIH0gPSBjb25zdW1lXG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXNvbHZlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICByZXNvbHZlKEpTT04ucGFyc2UoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlCdWZmZXInKSB7XG4gICAgICBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG5cbiAgICAgIGxldCBwb3MgPSAwXG4gICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBib2R5KSB7XG4gICAgICAgIGRzdC5zZXQoYnVmLCBwb3MpXG4gICAgICAgIHBvcyArPSBidWYuYnl0ZUxlbmd0aFxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGRzdC5idWZmZXIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmxvYicpIHtcbiAgICAgIGlmICghQmxvYikge1xuICAgICAgICBCbG9iID0gcmVxdWlyZSgnYnVmZmVyJykuQmxvYlxuICAgICAgfVxuICAgICAgcmVzb2x2ZShuZXcgQmxvYihib2R5LCB7IHR5cGU6IHN0cmVhbVtrQ29udGVudFR5cGVdIH0pKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3Qge1xuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayAoeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfSkge1xuICBhc3NlcnQoYm9keSlcblxuICBsZXQgY2h1bmtzID0gW11cbiAgbGV0IGxpbWl0ID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIGxpbWl0ICs9IGNodW5rLmxlbmd0aFxuICAgIGlmIChsaW1pdCA+IDEyOCAqIDEwMjQpIHtcbiAgICAgIGNodW5rcyA9IG51bGxcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWNodW5rcykge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm9jZXNzIGluIGEgZmFsbGJhY2sgaWYgZXJyb3JcbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfVxuIiwKICAgICJjb25zdCB7IGFkZEFib3J0TGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga0xpc3RlbmVyID0gU3ltYm9sKCdrTGlzdGVuZXInKVxuY29uc3Qga1NpZ25hbCA9IFN5bWJvbCgna1NpZ25hbCcpXG5cbmZ1bmN0aW9uIGFib3J0IChzZWxmKSB7XG4gIGlmIChzZWxmLmFib3J0KSB7XG4gICAgc2VsZi5hYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5vbkVycm9yKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWRhYmxlID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnRyYWlsZXJzID0ge31cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFya1xuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVzdW1lLCBhYm9ydCwgY29udGVudFR5cGUsIGhpZ2hXYXRlck1hcmsgfSlcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgdGhpcy5yZXMgPSBib2R5XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgdHJhaWxlcnM6IHRoaXMudHJhaWxlcnMsXG4gICAgICAgICAgb3BhcXVlLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMsIHRoaXMudHJhaWxlcnMpXG5cbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBib2R5LCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCBxdWV1ZU1pY3JvdGFzaz9cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgLy8gRW5zdXJlIGFsbCBxdWV1ZWQgaGFuZGxlcnMgYXJlIGludm9rZWQgYmVmb3JlIGRlc3Ryb3lpbmcgcmVzLlxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFJlcXVlc3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlICYmIHJlcy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlLFxuICBEdXBsZXgsXG4gIFBhc3NUaHJvdWdoXG59ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtSZXN1bWUgPSBTeW1ib2woJ3Jlc3VtZScpXG5cbmNsYXNzIFBpcGVsaW5lUmVxdWVzdCBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcblxuICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgY29uc3QgeyBba1Jlc3VtZV06IHJlc3VtZSB9ID0gdGhpc1xuXG4gICAgaWYgKHJlc3VtZSkge1xuICAgICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgICAgIHJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9yZWFkKClcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZVJlc3BvbnNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAocmVzdW1lKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuICAgIHRoaXNba1Jlc3VtZV0gPSByZXN1bWVcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICB0aGlzW2tSZXN1bWVdKClcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGFuZGxlcicpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1BJUEVMSU5FJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcblxuICAgIHRoaXMucmVxID0gbmV3IFBpcGVsaW5lUmVxdWVzdCgpLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuXG4gICAgdGhpcy5yZXQgPSBuZXcgRHVwbGV4KHtcbiAgICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogb3B0cy5vYmplY3RNb2RlLFxuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChib2R5ICYmIGJvZHkucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KCFyZXMsICdwaXBlbGluZSBjYW5ub3QgYmUgcmV0cmllZCcpXG5cbiAgICBpZiAocmV0LmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY2xhc3MgVXBncmFkZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9VUEdSQURFJylcblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXR1c0NvZGUsIDEwMSlcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBncmFkZSAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBncmFkZS5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGdyYWRlSGFuZGxlciA9IG5ldyBVcGdyYWRlSGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgdXBncmFkZTogb3B0cy5wcm90b2NvbCB8fCAnV2Vic29ja2V0J1xuICAgIH0sIHVwZ3JhZGVIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IHJlcXVpcmUoJy4vYXBpLXJlcXVlc3QnKVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gcmVxdWlyZSgnLi9hcGktc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9hcGktcGlwZWxpbmUnKVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IHJlcXVpcmUoJy4vYXBpLXVwZ3JhZGUnKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IHJlcXVpcmUoJy4vYXBpLWNvbm5lY3QnKVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jbGFzcyBNb2NrTm90TWF0Y2hlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTW9ja05vdE1hdGNoZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTW9ja05vdE1hdGNoZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgcmVxdWVzdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBtb2NrIGRpc3BhdGNoZXMnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9NT0NLX0VSUl9NT0NLX05PVF9NQVRDSEVEJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNb2NrTm90TWF0Y2hlZEVycm9yXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTW9ja05vdE1hdGNoZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWVycm9ycycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga09yaWdpbixcbiAga0dldE5ldENvbm5lY3Rcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IGJ1aWxkVVJMLCBub3AgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7XG4gIHR5cGVzOiB7XG4gICAgaXNQcm9taXNlXG4gIH1cbn0gPSByZXF1aXJlKCd1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGhlYWRlcnNcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigobW9ja0Rpc3BhdGNoKSA9PiBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBrZXkuaGVhZGVycykpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7dHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzfSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChrZXlWYWx1ZVBhaXJzLCBba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAuLi5rZXlWYWx1ZVBhaXJzLFxuICAgIEJ1ZmZlci5mcm9tKGAke2tleX1gKSxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh4ID0+IEJ1ZmZlci5mcm9tKGAke3h9YCkpIDogQnVmZmVyLmZyb20oYCR7dmFsdWV9YClcbiAgXSwgW10pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL1N0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzVGV4dCAoc3RhdHVzQ29kZSkge1xuICByZXR1cm4gU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8ICd1bmtub3duJ1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZSAoYm9keSkge1xuICBjb25zdCBidWZmZXJzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBkYXRhIG9mIGJvZHkpIHtcbiAgICBidWZmZXJzLnB1c2goZGF0YSlcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKlxuICogTW9jayBkaXNwYXRjaCBmdW5jdGlvbiB1c2VkIHRvIHNpbXVsYXRlIHVuZGljaSBkaXNwYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG1vY2tEaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAvLyBHZXQgbW9jayBkaXNwYXRjaCBmcm9tIGJ1aWx0IGtleVxuICBjb25zdCBrZXkgPSBidWlsZEtleShvcHRzKVxuICBjb25zdCBtb2NrRGlzcGF0Y2ggPSBnZXRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcblxuICBtb2NrRGlzcGF0Y2gudGltZXNJbnZva2VkKytcblxuICAvLyBIZXJlJ3Mgd2hlcmUgd2UgcmVzb2x2ZSBhIGNhbGxiYWNrIGlmIGEgY2FsbGJhY2sgaXMgcHJlc2VudCBmb3IgdGhlIGRpc3BhdGNoIGRhdGEuXG4gIGlmIChtb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjaykge1xuICAgIG1vY2tEaXNwYXRjaC5kYXRhID0geyAuLi5tb2NrRGlzcGF0Y2guZGF0YSwgLi4ubW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2sob3B0cykgfVxuICB9XG5cbiAgLy8gUGFyc2UgbW9ja0Rpc3BhdGNoIGRhdGFcbiAgY29uc3QgeyBkYXRhOiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzLCBlcnJvciB9LCBkZWxheSwgcGVyc2lzdCB9ID0gbW9ja0Rpc3BhdGNoXG4gIGNvbnN0IHsgdGltZXNJbnZva2VkLCB0aW1lcyB9ID0gbW9ja0Rpc3BhdGNoXG5cbiAgLy8gSWYgaXQncyB1c2VkIHVwIGFuZCBub3QgcGVyc2lzdGVudCwgbWFyayBhcyBjb25zdW1lZFxuICBtb2NrRGlzcGF0Y2guY29uc3VtZWQgPSAhcGVyc2lzdCAmJiB0aW1lc0ludm9rZWQgPj0gdGltZXNcbiAgbW9ja0Rpc3BhdGNoLnBlbmRpbmcgPSB0aW1lc0ludm9rZWQgPCB0aW1lc1xuXG4gIC8vIElmIHNwZWNpZmllZCwgdHJpZ2dlciBkaXNwYXRjaCBlcnJvclxuICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcbiAgICBoYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCB3aXRoIGEgZGVsYXkgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gICAgfSwgZGVsYXkpXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSZXBseSAobW9ja0Rpc3BhdGNoZXMsIF9kYXRhID0gZGF0YSkge1xuICAgIC8vIGZldGNoJ3MgSGVhZGVyc0xpc3QgaXMgYSAxRCBzdHJpbmcgYXJyYXlcbiAgICBjb25zdCBvcHRzSGVhZGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgPyBidWlsZEhlYWRlcnNGcm9tQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgOiBvcHRzLmhlYWRlcnNcbiAgICBjb25zdCBib2R5ID0gdHlwZW9mIF9kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IF9kYXRhKHsgLi4ub3B0cywgaGVhZGVyczogb3B0c0hlYWRlcnMgfSlcbiAgICAgIDogX2RhdGFcblxuICAgIC8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIGxpa2VseSBuZWVkZWQgZm9yIGplc3QuXG4gICAgaWYgKGlzUHJvbWlzZShib2R5KSkge1xuICAgICAgLy8gSWYgaGFuZGxlUmVwbHkgaXMgYXN5bmNocm9ub3VzLCB0aHJvd2luZyBhbiBlcnJvclxuICAgICAgLy8gaW4gdGhlIGNhbGxiYWNrIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLCByYXRoZXIgdGhhblxuICAgICAgLy8gc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZXJyb3IsIHdoaWNoIGJyZWFrcyBzb21lIHRlc3RzLlxuICAgICAgLy8gUmF0aGVyLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpZiBpdCBpcyBhXG4gICAgICAvLyBwcm9taXNlLCBhbmQgdGhlbiByZS1ydW4gaGFuZGxlUmVwbHkgd2l0aCB0aGUgbmV3IGJvZHkuXG4gICAgICBib2R5LnRoZW4oKG5ld0RhdGEpID0+IGhhbmRsZVJlcGx5KG1vY2tEaXNwYXRjaGVzLCBuZXdEYXRhKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShib2R5KVxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKGhlYWRlcnMpXG4gICAgY29uc3QgcmVzcG9uc2VUcmFpbGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKHRyYWlsZXJzKVxuXG4gICAgaGFuZGxlci5hYm9ydCA9IG5vcFxuICAgIGhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhKEJ1ZmZlci5mcm9tKHJlc3BvbnNlRGF0YSkpXG4gICAgaGFuZGxlci5vbkNvbXBsZXRlKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZ2V0UmVzcG9uc2VEYXRhLCBidWlsZEtleSwgYWRkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga0Rpc3BhdGNoS2V5LFxuICBrRGVmYXVsdEhlYWRlcnMsXG4gIGtEZWZhdWx0VHJhaWxlcnMsXG4gIGtDb250ZW50TGVuZ3RoLFxuICBrTW9ja0Rpc3BhdGNoXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBidWlsZFVSTCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzY29wZSBBUEkgZm9yIGFuIGludGVyY2VwdG9yIHJlcGx5XG4gKi9cbmNsYXNzIE1vY2tTY29wZSB7XG4gIGNvbnN0cnVjdG9yIChtb2NrRGlzcGF0Y2gpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdID0gbW9ja0Rpc3BhdGNoXG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgYSByZXBseSBieSBhIHNldCBhbW91bnQgaW4gbXMuXG4gICAqL1xuICBkZWxheSAod2FpdEluTXMpIHtcbiAgICBpZiAodHlwZW9mIHdhaXRJbk1zICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih3YWl0SW5NcykgfHwgd2FpdEluTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd3YWl0SW5NcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0uZGVsYXkgPSB3YWl0SW5Nc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZGVmaW5lZCByZXBseSwgbmV2ZXIgbWFyayBhcyBjb25zdW1lZC5cbiAgICovXG4gIHBlcnNpc3QgKCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0ucGVyc2lzdCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG9uZSB0byBkZWZpbmUgYSByZXBseSBmb3IgYSBzZXQgYW1vdW50IG9mIG1hdGNoaW5nIHJlcXVlc3RzLlxuICAgKi9cbiAgdGltZXMgKHJlcGVhdFRpbWVzKSB7XG4gICAgaWYgKHR5cGVvZiByZXBlYXRUaW1lcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIocmVwZWF0VGltZXMpIHx8IHJlcGVhdFRpbWVzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwZWF0VGltZXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnRpbWVzID0gcmVwZWF0VGltZXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmNlcHRvciBmb3IgYSBNb2NrXG4gKi9cbmNsYXNzIE1vY2tJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBtb2NrRGlzcGF0Y2hlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLnBhdGggbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMjQ1XG4gICAgLy8gQXMgcGVyIFJGQyAzOTg2LCBjbGllbnRzIGFyZSBub3Qgc3VwcG9zZWQgdG8gc2VuZCBVUklcbiAgICAvLyBmcmFnbWVudHMgdG8gc2VydmVycyB3aGVuIHRoZXkgcmV0cmlldmUgYSBkb2N1bWVudCxcbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChvcHRzLnF1ZXJ5KSB7XG4gICAgICAgIG9wdHMucGF0aCA9IGJ1aWxkVVJMKG9wdHMucGF0aCwgb3B0cy5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hdGNoZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9tYWluL2xpYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoZGF0YSlcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpc1trQ29udGVudExlbmd0aF0gPyB7ICdjb250ZW50LWxlbmd0aCc6IHJlc3BvbnNlRGF0YS5sZW5ndGggfSA6IHt9XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpc1trRGVmYXVsdEhlYWRlcnNdLCAuLi5jb250ZW50TGVuZ3RoLCAuLi5yZXNwb25zZU9wdGlvbnMuaGVhZGVycyB9XG4gICAgY29uc3QgdHJhaWxlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRUcmFpbGVyc10sIC4uLnJlc3BvbnNlT3B0aW9ucy50cmFpbGVycyB9XG5cbiAgICByZXR1cm4geyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycyB9XG4gIH1cblxuICB2YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZGF0YSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVzcG9uc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCByZXBseS5cbiAgICovXG4gIHJlcGx5IChyZXBseURhdGEpIHtcbiAgICAvLyBWYWx1ZXMgb2YgcmVwbHkgYXJlbid0IGF2YWlsYWJsZSByaWdodCBub3cgYXMgdGhleVxuICAgIC8vIGNhbiBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSByZXBseSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICAgIGlmICh0eXBlb2YgcmVwbHlEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlEYXRhKG9wdHMpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgaW4gdGhlIHJpZ2h0IGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVkRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fSB9ID0gcmVzb2x2ZWREYXRhXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCBbc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fV0gPSBbLi4uYXJndW1lbnRzXVxuICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuXG4gICAgLy8gU2VuZCBpbi1hbHJlYWR5IHByb3ZpZGVkIGRhdGEgbGlrZSB1c3VhbFxuICAgIGNvbnN0IGRpc3BhdGNoRGF0YSA9IHRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgZGlzcGF0Y2hEYXRhKVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIGVycm9yLlxuICAgKi9cbiAgcmVwbHlXaXRoRXJyb3IgKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZXJyb3IgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgeyBlcnJvciB9KVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSBoZWFkZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlIZWFkZXJzIChoZWFkZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0gaGVhZGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgdHJhaWxlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseVRyYWlsZXJzICh0cmFpbGVycykge1xuICAgIGlmICh0eXBlb2YgdHJhaWxlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3RyYWlsZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHRyYWlsZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVwbHkgY29udGVudCBsZW5ndGggaGVhZGVyIGZvciByZXBsaWVzIG9uIHRoZSBpbnRlcmNlcHRvclxuICAgKi9cbiAgcmVwbHlDb250ZW50TGVuZ3RoICgpIHtcbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLk1vY2tJbnRlcmNlcHRvciA9IE1vY2tJbnRlcmNlcHRvclxubW9kdWxlLmV4cG9ydHMuTW9ja1Njb3BlID0gTW9ja1Njb3BlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9jbGllbnQnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrQ2xpZW50IHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIENsaWVudCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0NsaWVudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL3Bvb2wnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrUG9vbCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBQb29sIHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tQb29sIGV4dGVuZHMgUG9vbCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzaW5ndWxhcnMgPSB7XG4gIHByb25vdW46ICdpdCcsXG4gIGlzOiAnaXMnLFxuICB3YXM6ICd3YXMnLFxuICB0aGlzOiAndGhpcydcbn1cblxuY29uc3QgcGx1cmFscyA9IHtcbiAgcHJvbm91bjogJ3RoZXknLFxuICBpczogJ2FyZScsXG4gIHdhczogJ3dlcmUnLFxuICB0aGlzOiAndGhlc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGx1cmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChzaW5ndWxhciwgcGx1cmFsKSB7XG4gICAgdGhpcy5zaW5ndWxhciA9IHNpbmd1bGFyXG4gICAgdGhpcy5wbHVyYWwgPSBwbHVyYWxcbiAgfVxuXG4gIHBsdXJhbGl6ZSAoY291bnQpIHtcbiAgICBjb25zdCBvbmUgPSBjb3VudCA9PT0gMVxuICAgIGNvbnN0IGtleXMgPSBvbmUgPyBzaW5ndWxhcnMgOiBwbHVyYWxzXG4gICAgY29uc3Qgbm91biA9IG9uZSA/IHRoaXMuc2luZ3VsYXIgOiB0aGlzLnBsdXJhbFxuICAgIHJldHVybiB7IC4uLmtleXMsIGNvdW50LCBub3VuIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IENvbnNvbGUgfSA9IHJlcXVpcmUoJ2NvbnNvbGUnKVxuXG4vKipcbiAqIEdldHMgdGhlIG91dHB1dCBvZiBgY29uc29sZS50YWJsZSjigKYpYCBhcyBhIHN0cmluZy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IgKHsgZGlzYWJsZUNvbG9ycyB9ID0ge30pIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuICAgICAgdHJhbnNmb3JtIChjaHVuaywgX2VuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IENvbnNvbGUoe1xuICAgICAgc3Rkb3V0OiB0aGlzLnRyYW5zZm9ybSxcbiAgICAgIGluc3BlY3RPcHRpb25zOiB7XG4gICAgICAgIGNvbG9yczogIWRpc2FibGVDb2xvcnMgJiYgIXByb2Nlc3MuZW52LkNJXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvcm1hdCAocGVuZGluZ0ludGVyY2VwdG9ycykge1xuICAgIGNvbnN0IHdpdGhQcmV0dHlIZWFkZXJzID0gcGVuZGluZ0ludGVyY2VwdG9ycy5tYXAoXG4gICAgICAoeyBtZXRob2QsIHBhdGgsIGRhdGE6IHsgc3RhdHVzQ29kZSB9LCBwZXJzaXN0LCB0aW1lcywgdGltZXNJbnZva2VkLCBvcmlnaW4gfSkgPT4gKHtcbiAgICAgICAgTWV0aG9kOiBtZXRob2QsXG4gICAgICAgIE9yaWdpbjogb3JpZ2luLFxuICAgICAgICBQYXRoOiBwYXRoLFxuICAgICAgICAnU3RhdHVzIGNvZGUnOiBzdGF0dXNDb2RlLFxuICAgICAgICBQZXJzaXN0ZW50OiBwZXJzaXN0ID8gJ+KchScgOiAn4p2MJyxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vYWdlbnQnKVxuY29uc3Qge1xuICBrQWdlbnQsXG4gIGtNb2NrQWdlbnRTZXQsXG4gIGtNb2NrQWdlbnRHZXQsXG4gIGtEaXNwYXRjaGVzLFxuICBrSXNNb2NrQWN0aXZlLFxuICBrTmV0Q29ubmVjdCxcbiAga0dldE5ldENvbm5lY3QsXG4gIGtPcHRpb25zLFxuICBrRmFjdG9yeVxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9tb2NrLXBvb2wnKVxuY29uc3QgeyBtYXRjaFZhbHVlLCBidWlsZE1vY2tPcHRpb25zIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgRmFrZVdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzICYmIG9wdHMuYWdlbnQgJiYgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cbiAgICBjb25zdCBhZ2VudCA9IG9wdHMgJiYgb3B0cy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgbmV3IEZha2VXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICB9XG5cbiAgW2tGYWN0b3J5XSAob3JpZ2luKSB7XG4gICAgY29uc3QgbW9ja09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgYWdlbnQ6IHRoaXMgfSwgdGhpc1trT3B0aW9uc10pXG4gICAgcmV0dXJuIHRoaXNba09wdGlvbnNdICYmIHRoaXNba09wdGlvbnNdLmNvbm5lY3Rpb25zID09PSAxXG4gICAgICA/IG5ldyBNb2NrQ2xpZW50KG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gICAgICA6IG5ldyBNb2NrUG9vbChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICB9XG5cbiAgW2tNb2NrQWdlbnRHZXRdIChvcmlnaW4pIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgZmluZCBpdFxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChvcmlnaW4pXG4gICAgaWYgKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi5kZXJlZigpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXRSZWZdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBjb25zdCBub25FeHBsaWNpdERpc3BhdGNoZXIgPSBub25FeHBsaWNpdFJlZi5kZXJlZigpXG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlLmRlcmVmKClba0Rpc3BhdGNoZXNdLm1hcChkaXNwYXRjaCA9PiAoeyAuLi5kaXNwYXRjaCwgb3JpZ2luIH0pKSlcbiAgICAgIC5maWx0ZXIoKHsgcGVuZGluZyB9KSA9PiBwZW5kaW5nKVxuICB9XG5cbiAgYXNzZXJ0Tm9QZW5kaW5nSW50ZXJjZXB0b3JzICh7IHBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSBuZXcgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlcigpIH0gPSB7fSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdJbnRlcmNlcHRvcnMoKVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWxpemVyID0gbmV3IFBsdXJhbGl6ZXIoJ2ludGVyY2VwdG9yJywgJ2ludGVyY2VwdG9ycycpLnBsdXJhbGl6ZShwZW5kaW5nLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBVbmRpY2lFcnJvcihgXG4ke3BsdXJhbGl6ZXIuY291bnR9ICR7cGx1cmFsaXplci5ub3VufSAke3BsdXJhbGl6ZXIuaXN9IHBlbmRpbmc6XG5cbiR7cGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlci5mb3JtYXQocGVuZGluZyl9XG5gLnRyaW0oKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tBZ2VudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUHJveHksIGtDbG9zZSwga0Rlc3Ryb3ksIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrQWdlbnQgPSBTeW1ib2woJ3Byb3h5IGFnZW50JylcbmNvbnN0IGtDbGllbnQgPSBTeW1ib2woJ3Byb3h5IGNsaWVudCcpXG5jb25zdCBrUHJveHlIZWFkZXJzID0gU3ltYm9sKCdwcm94eSBoZWFkZXJzJylcbmNvbnN0IGtSZXF1ZXN0VGxzID0gU3ltYm9sKCdyZXF1ZXN0IHRscyBzZXR0aW5ncycpXG5jb25zdCBrUHJveHlUbHMgPSBTeW1ib2woJ3Byb3h5IHRscyBzZXR0aW5ncycpXG5jb25zdCBrQ29ubmVjdEVuZHBvaW50ID0gU3ltYm9sKCdjb25uZWN0IGVuZHBvaW50IGZ1bmN0aW9uJylcblxuZnVuY3Rpb24gZGVmYXVsdFByb3RvY29sUG9ydCAocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJveHlPcHRpb25zIChvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICB9XG5cbiAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJpOiBvcHRzLnVyaSxcbiAgICBwcm90b2NvbDogb3B0cy5wcm90b2NvbCB8fCAnaHR0cHMnXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpc1trUHJveHldID0gYnVpbGRQcm94eU9wdGlvbnMob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnRcbiAgICAgIDogW11cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG5cbiAgICBpZiAodHlwZW9mIGNsaWVudEZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy5jbGllbnRGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cblxuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gbmV3IFVSTChvcHRzLnVyaSlcbiAgICBjb25zdCB7IG9yaWdpbiwgcG9ydCwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXNvbHZlZFVybFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkocmVzb2x2ZWRVcmwsIHsgY29ubmVjdCB9KVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgY29ubmVjdDogYXN5bmMgKG9wdHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRIb3N0ID0gb3B0cy5ob3N0XG4gICAgICAgIGlmICghb3B0cy5wb3J0KSB7XG4gICAgICAgICAgcmVxdWVzdGVkSG9zdCArPSBgOiR7ZGVmYXVsdFByb3RvY29sUG9ydChvcHRzLnByb3RvY29sKX1gXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHNvY2tldCwgc3RhdHVzQ29kZSB9ID0gYXdhaXQgdGhpc1trQ2xpZW50XS5jb25uZWN0KHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBwYXRoOiByZXF1ZXN0ZWRIb3N0LFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgLi4udGhpc1trUHJveHlIZWFkZXJzXSxcbiAgICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KS5kZXN0cm95KClcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKGBQcm94eSByZXNwb25zZSAoJHtzdGF0dXNDb2RlfSkgIT09IDIwMCB3aGVuIEhUVFAgVHVubmVsaW5nYCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc29ja2V0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBzZXJ2ZXJuYW1lXG4gICAgICAgICAgaWYgKHRoaXNba1JlcXVlc3RUbHNdKSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gdGhpc1trUmVxdWVzdFRsc10uc2VydmVybmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0oeyAuLi5vcHRzLCBzZXJ2ZXJuYW1lLCBodHRwU29ja2V0OiBzb2NrZXQgfSwgY2FsbGJhY2spXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBoZWFkZXJzID0gYnVpbGRIZWFkZXJzKG9wdHMuaGVhZGVycylcbiAgICB0aHJvd0lmUHJveHlBdXRoSXNTZW50KGhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgaG9zdFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uY2xvc2UoKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmRlc3Ryb3koKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uZGVzdHJveSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyAoaGVhZGVycykge1xuICAvLyBXaGVuIHVzaW5nIHVuZGljaS5mZXRjaCwgdGhlIGhlYWRlcnMgbGlzdCBpcyBzdG9yZWRcbiAgLy8gYXMgYW4gYXJyYXkuXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGhlYWRlcnNQYWlyID0ge31cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaGVhZGVyc1BhaXJbaGVhZGVyc1tpXV0gPSBoZWFkZXJzW2kgKyAxXVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzUGFpclxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqXG4gKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBQcm94eUFnZW50IHN1Z2dlc3RzIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGluIHJlcXVlc3QgaGVhZGVyc1xuICogTmV2ZXJ0aGVsZXNzLCBpdCB3YXMgY2hhbmdlZCBhbmQgdG8gYXZvaWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGJ5IGVuZCB1c2Vyc1xuICogdGhpcyBjaGVjayB3YXMgY3JlYXRlZC5cbiAqIEl0IHNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZlByb3h5QXV0aElzU2VudCAoaGVhZGVycykge1xuICBjb25zdCBleGlzdFByb3h5QXV0aCA9IGhlYWRlcnMgJiYgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nKVxuICBpZiAoZXhpc3RQcm94eUF1dGgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIGJlIHNlbnQgaW4gUHJveHlBZ2VudCBjb25zdHJ1Y3RvcicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm94eUFnZW50XG4iLAogICAgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgaXNEaXN0dXJiZWQsIHBhcnNlSGVhZGVycywgcGFyc2VSYW5nZUhlYWRlciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICBjb25zdCBkaWZmID0gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxuXG4gIHJldHVybiBkaWZmXG59XG5cbmNsYXNzIFJldHJ5SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVycykge1xuICAgIGNvbnN0IHsgcmV0cnlPcHRpb25zLCAuLi5kaXNwYXRjaE9wdHMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICAvLyBSZXRyeSBzY29wZWRcbiAgICAgIHJldHJ5OiByZXRyeUZuLFxuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIC8vIFJlc3BvbnNlIHNjb3BlZFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICByZXRyeUFmdGVyLFxuICAgICAgc3RhdHVzQ29kZXNcbiAgICB9ID0gcmV0cnlPcHRpb25zID8/IHt9XG5cbiAgICB0aGlzLmRpc3BhdGNoID0gaGFuZGxlcnMuZGlzcGF0Y2hcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVycy5oYW5kbGVyXG4gICAgdGhpcy5vcHRzID0gZGlzcGF0Y2hPcHRzXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIHRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRSdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBsZXQgeyBjb3VudGVyLCBjdXJyZW50VGltZW91dCB9ID0gc3RhdGVcblxuICAgIGN1cnJlbnRUaW1lb3V0ID1cbiAgICAgIGN1cnJlbnRUaW1lb3V0ICE9IG51bGwgJiYgY3VycmVudFRpbWVvdXQgPiAwID8gY3VycmVudFRpbWVvdXQgOiB0aW1lb3V0XG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoXG4gICAgICBjb2RlICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnICYmXG4gICAgICAhZXJyb3JDb2Rlcy5pbmNsdWRlcyhjb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2YgbWV0aG9kIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZHMpICYmICFtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIHN0YXR1cyBjb2RlIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGNvZGUgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKFxuICAgICAgc3RhdHVzQ29kZSAhPSBudWxsICYmXG4gICAgICBBcnJheS5pc0FycmF5KHN0YXR1c0NvZGVzKSAmJlxuICAgICAgIXN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXNcbiAgICBpZiAoY291bnRlciA+IG1heFJldHJpZXMpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAhPSBudWxsICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IGlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4oY3VycmVudFRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIGNvdW50ZXIsIG1heFRpbWVvdXQpXG5cbiAgICBzdGF0ZS5jdXJyZW50VGltZW91dCA9IHJldHJ5VGltZW91dFxuXG4gICAgc2V0VGltZW91dCgoKSA9PiBjYihudWxsKSwgcmV0cnlUaW1lb3V0KVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICB0aGlzLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICB0aGlzLmFib3J0KFxuICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwNikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBMZXQncyBzdGFydCB3aXRoIGEgd2VhayBldGFnIGNoZWNrXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnICE9PSBoZWFkZXJzLmV0YWcpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0VUYWcgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSByYW5nZVxuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCkgJiYgdGhpcy5zdGFydCAhPT0gc3RhcnQsXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShzdGFydCkpXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBlbmQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoZW5kKSAmJiB0aGlzLmVuZCAhPT0gZW5kLFxuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCsrLCBjdXJyZW50VGltZW91dDogdGhpcy5yZXRyeUFmdGVyIH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IHtcbiAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLmhlYWRlcnMsXG4gICAgICAgICAgICByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuaWYgKGdldEdsb2JhbERpc3BhdGNoZXIoKSA9PT0gdW5kZWZpbmVkKSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIobmV3IEFnZW50KCkpXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbERpc3BhdGNoZXIgKGFnZW50KSB7XG4gIGlmICghYWdlbnQgfHwgdHlwZW9mIGFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBhZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbERpc3BhdGNoZXIsIHtcbiAgICB2YWx1ZTogYWdlbnQsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEaXNwYXRjaGVyICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsRGlzcGF0Y2hlcl1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIsXG4gIGdldEdsb2JhbERpc3BhdGNoZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGVjb3JhdG9ySGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoLi4uYXJncylcbiAgfVxuXG4gIG9uRXJyb3IgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoLi4uYXJncylcbiAgfVxuXG4gIG9uVXBncmFkZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25VcGdyYWRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUoLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoLi4uYXJncylcbiAgfVxufVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0d1YXJkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlcuKAmXMgZmlyc3QgaXRlbSwgaGVhZGVy4oCZcyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSDihpIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH0gZWxzZSBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnPigJlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChuYW1lLCB2YWx1ZSlcblxuICAvLyA4LiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5jbGFzcyBIZWFkZXJzTGlzdCB7XG4gIC8qKiBAdHlwZSB7W3N0cmluZywgc3RyaW5nXVtdfG51bGx9ICovXG4gIGNvb2tpZXMgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGluaXQpIHtcbiAgICBpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdFtrSGVhZGVyc01hcF0pXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IGluaXRba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICB0aGlzLmNvb2tpZXMgPSBpbml0LmNvb2tpZXMgPT09IG51bGwgPyBudWxsIDogWy4uLmluaXQuY29va2llc11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXQpXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLWxpc3QtY29udGFpbnNcbiAgY29udGFpbnMgKG5hbWUpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmhhcyhuYW1lKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVy4oCZcyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA/Pz0gW11cbiAgICAgIHRoaXMuY29va2llcy5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gW3ZhbHVlXVxuICAgIH1cblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgdGhlIHZhbHVlIG9mXG4gICAgLy8gICAgdGhlIGZpcnN0IHN1Y2ggaGVhZGVyIHRvIHZhbHVlIGFuZCByZW1vdmUgdGhlXG4gICAgLy8gICAgb3RoZXJzLlxuICAgIC8vIDIuIE90aGVyd2lzZSwgYXBwZW5kIGhlYWRlciAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUudmFsdWVcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyB2YWx1ZSB9XSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5pdCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXNba0hlYWRlcnNMaXN0XSA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXPigJlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXNba0d1YXJkXSA9ICdub25lJ1xuXG4gICAgLy8gMi4gSWYgaW5pdCBpcyBnaXZlbiwgdGhlbiBmaWxsIHRoaXMgd2l0aCBpbml0LlxuICAgIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdChpbml0KVxuICAgICAgZmlsbCh0aGlzLCBpbml0KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5hcHBlbmQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZGVsZXRlJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIG5hbWVcbiAgICAvLyAgICBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIgbmFtZSwgYW5kXG4gICAgLy8gICAgbmFtZSBpcyBub3QgYSBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXNcbiAgICAvLyAgICBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5nZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uZ2V0KG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuaGFzJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRydWUgaWYgdGhpc+KAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgbmFtZTtcbiAgICAvLyAgICBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLnNldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXPigJlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNy4gU2V0IChuYW1lLCB2YWx1ZSkgaW4gdGhpc+KAmXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpc1xuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5zZXQobmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0c2V0Y29va2llXG4gIGdldFNldENvb2tpZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIC8vIDEuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFNldC1Db29raWVgLCB0aGVuIHJldHVybiDCqyDCuy5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlz4oCZcyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSkge1xuICAgICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IFsuLi50aGlzW2tIZWFkZXJzTGlzdF1dLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gLTEgOiAxKVxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gbnVsbClcblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVyc1xuXG4gICAgLy8gNC4gUmV0dXJuIGhlYWRlcnMuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5JylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleSt2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogSGVhZGVycykgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdIZWFkZXJzJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB2YWx1ZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVudHJpZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZvckVhY2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiB7IGVudW1lcmFibGU6IGZhbHNlIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdIZWFkZXJzJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoVltTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWKVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3Rcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSGVhZGVycywgSGVhZGVyc0xpc3QsIGZpbGwgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBjbG9uZUJvZHksIG1peGluQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7XG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXNFcnJvckxpa2UsXG4gIGlzb21vcnBoaWNFbmNvZGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSB8fCByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jbGFzc1xuY2xhc3MgUmVzcG9uc2Uge1xuICAvLyBDcmVhdGVzIG5ldHdvcmsgZXJyb3IgUmVzcG9uc2UuXG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgLy8gVE9ET1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyBUaGUgc3RhdGljIGVycm9yKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhXG4gICAgLy8gUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyBuZXR3b3JrIGVycm9yLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc+KAmXNcbiAgICAvLyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UuanNvbicgfSlcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDQuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlT2JqZWN0LCBpbml0LCBhbmQgKGJvZHksIFwiYXBwbGljYXRpb24vanNvblwiKS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UocmVzcG9uc2VPYmplY3QsIGluaXQsIHsgYm9keTogYm9keVswXSwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBDcmVhdGVzIGEgcmVkaXJlY3QgUmVzcG9uc2UgdGhhdCByZWRpcmVjdHMgdG8gdXJsIHdpdGggc3RhdHVzIHN0YXR1cy5cbiAgc3RhdGljIHJlZGlyZWN0ICh1cmwsIHN0YXR1cyA9IDMwMikge1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UucmVkaXJlY3QnIH0pXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHN0YXR1cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKHN0YXR1cylcblxuICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHVybCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAvLyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyBUT0RPOiBiYXNlLVVSTD9cbiAgICBsZXQgcGFyc2VkVVJMXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCBnZXRHbG9iYWxPcmlnaW4oKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyB1cmwpLCB7XG4gICAgICAgIGNhdXNlOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUgJyArIHN0YXR1cylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiBhIG5ldyByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFNldCByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyB0byBzdGF0dXMuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5zdGF0dXMgPSBzdGF0dXNcblxuICAgIC8vIDYuIExldCB2YWx1ZSBiZSBwYXJzZWRVUkwsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICBjb25zdCB2YWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoVVJMU2VyaWFsaXplcihwYXJzZWRVUkwpKVxuXG4gICAgLy8gNy4gQXBwZW5kIGBMb2NhdGlvbmAvdmFsdWUgdG8gcmVzcG9uc2VPYmplY3TigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnbG9jYXRpb24nLCB2YWx1ZSlcblxuICAgIC8vIDguIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2VcbiAgY29uc3RydWN0b3IgKGJvZHkgPSBudWxsLCBpbml0ID0ge30pIHtcbiAgICBpZiAoYm9keSAhPT0gbnVsbCkge1xuICAgICAgYm9keSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0KGJvZHkpXG4gICAgfVxuXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuXG4gICAgLy8gVE9ET1xuICAgIHRoaXNba1JlYWxtXSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIDEuIFNldCB0aGlz4oCZcyByZXNwb25zZSB0byBhIG5ldyByZXNwb25zZS5cbiAgICB0aGlzW2tTdGF0ZV0gPSBtYWtlUmVzcG9uc2Uoe30pXG5cbiAgICAvLyAyLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmRcbiAgICAvLyBpcyBcInJlc3BvbnNlXCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc+KAmXNcbiAgICAvLyByZXNwb25zZeKAmXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZeKAmXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCAodGhpcy5ib2R5ICYmIHRoaXMuYm9keS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc+KAmXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVzcG9uc2VcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgcmV0dXJuIGNsb25lZFJlc3BvbnNlT2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlc3BvbnNlKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcbiAgdHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9rOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdGVkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXNwb25zZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLCB7XG4gIGpzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gIC8vIFRvIGNsb25lIGEgcmVzcG9uc2UgcmVzcG9uc2UsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlLCB0aGVuIHJldHVybiBhIG5ldyBpZGVudGljYWxcbiAgLy8gZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWwgcmVzcG9uc2UgaXMgYSBjbG9uZSBvZiByZXNwb25zZeKAmXNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UuXG4gIGlmIChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZpbHRlclJlc3BvbnNlKFxuICAgICAgY2xvbmVSZXNwb25zZShyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSxcbiAgICAgIHJlc3BvbnNlLnR5cGVcbiAgICApXG4gIH1cblxuICAvLyAyLiBMZXQgbmV3UmVzcG9uc2UgYmUgYSBjb3B5IG9mIHJlc3BvbnNlLCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IC4uLnJlc3BvbnNlLCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IG5ld1Jlc3BvbnNl4oCZcyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXNwb25zZeKAmXMgYm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1Jlc3BvbnNlLmJvZHkgPSBjbG9uZUJvZHkocmVzcG9uc2UuYm9keSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiBuZXdSZXNwb25zZS5cbiAgcmV0dXJuIG5ld1Jlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZSAoaW5pdCkge1xuICByZXR1cm4ge1xuICAgIGFib3J0ZWQ6IGZhbHNlLFxuICAgIHJhbmdlUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd1Bhc3NlZDogZmFsc2UsXG4gICAgcmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICBzdGF0dXM6IDIwMCxcbiAgICB0aW1pbmdJbmZvOiBudWxsLFxuICAgIGNhY2hlU3RhdGU6ICcnLFxuICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpLFxuICAgIHVybExpc3Q6IGluaXQudXJsTGlzdCA/IFsuLi5pbml0LnVybExpc3RdIDogW11cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTmV0d29ya0Vycm9yIChyZWFzb24pIHtcbiAgY29uc3QgaXNFcnJvciA9IGlzRXJyb3JMaWtlKHJlYXNvbilcbiAgcmV0dXJuIG1ha2VSZXNwb25zZSh7XG4gICAgdHlwZTogJ2Vycm9yJyxcbiAgICBzdGF0dXM6IDAsXG4gICAgZXJyb3I6IGlzRXJyb3JcbiAgICAgID8gcmVhc29uXG4gICAgICA6IG5ldyBFcnJvcihyZWFzb24gPyBTdHJpbmcocmVhc29uKSA6IHJlYXNvbiksXG4gICAgYWJvcnRlZDogcmVhc29uICYmIHJlYXNvbi5uYW1lID09PSAnQWJvcnRFcnJvcidcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFrZUZpbHRlcmVkUmVzcG9uc2UgKHJlc3BvbnNlLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAuLi5zdGF0ZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgIGdldCAodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gcCBpbiBzdGF0ZSA/IHN0YXRlW3BdIDogdGFyZ2V0W3BdXG4gICAgfSxcbiAgICBzZXQgKHRhcmdldCwgcCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydCghKHAgaW4gc3RhdGUpKVxuICAgICAgdGFyZ2V0W3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1maWx0ZXJlZC1yZXNwb25zZVxuZnVuY3Rpb24gZmlsdGVyUmVzcG9uc2UgKHJlc3BvbnNlLCB0eXBlKSB7XG4gIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gIGlmICh0eXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gQSBiYXNpYyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJiYXNpY1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdFxuICAgIC8vIHdob3NlIG5hbWUgaXMgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb3JzJykge1xuICAgIC8vIEEgQ09SUyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJjb3JzXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2XigJlzIGhlYWRlclxuICAgIC8vIGxpc3Qgd2hvc2UgbmFtZSBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWUsIGdpdmVuXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0LlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnY29ycycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWUnKSB7XG4gICAgLy8gQW4gb3BhcXVlIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpc1xuICAgIC8vIFwib3BhcXVlXCIsIFVSTCBsaXN0IGlzIHRoZSBlbXB0eSBsaXN0LCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2VcbiAgICAvLyBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWUnLFxuICAgICAgdXJsTGlzdDogT2JqZWN0LmZyZWV6ZShbXSksXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWVyZWRpcmVjdCcpIHtcbiAgICAvLyBBbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlXG4gICAgLy8gaXMgXCJvcGFxdWVyZWRpcmVjdFwiLCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2UgaXMgdGhlIGVtcHR5IGJ5dGVcbiAgICAvLyBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWVyZWRpcmVjdCcsXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGhlYWRlcnNMaXN0OiBbXSxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwcm9wcmlhdGUtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yIChmZXRjaFBhcmFtcywgZXJyID0gbnVsbCkge1xuICAvLyAxLiBBc3NlcnQ6IGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLlxuICBhc3NlcnQoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKVxuXG4gIC8vIDIuIFJldHVybiBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IgaWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZDtcbiAgLy8gb3RoZXJ3aXNlIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIHJldHVybiBpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpXG4gICAgPyBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpLCB7IGNhdXNlOiBlcnIgfSkpXG4gICAgOiBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignUmVxdWVzdCB3YXMgY2FuY2VsbGVkLicpLCB7IGNhdXNlOiBlcnIgfSkpXG59XG5cbi8vIGh0dHBzOi8vd2hhdHByLm9yZy9mZXRjaC8xMzkyLmh0bWwjaW5pdGlhbGl6ZS1hLXJlc3BvbnNlXG5mdW5jdGlvbiBpbml0aWFsaXplUmVzcG9uc2UgKHJlc3BvbnNlLCBpbml0LCBib2R5KSB7XG4gIC8vIDEuIElmIGluaXRbXCJzdGF0dXNcIl0gaXMgbm90IGluIHRoZSByYW5nZSAyMDAgdG8gNTk5LCBpbmNsdXNpdmUsIHRoZW5cbiAgLy8gICAgdGhyb3cgYSBSYW5nZUVycm9yLlxuICBpZiAoaW5pdC5zdGF0dXMgIT09IG51bGwgJiYgKGluaXQuc3RhdHVzIDwgMjAwIHx8IGluaXQuc3RhdHVzID4gNTk5KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbml0W1wic3RhdHVzXCJdIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDIwMCB0byA1OTksIGluY2x1c2l2ZS4nKVxuICB9XG5cbiAgLy8gMi4gSWYgaW5pdFtcInN0YXR1c1RleHRcIl0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlYXNvbi1waHJhc2UgdG9rZW4gcHJvZHVjdGlvbixcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgLy8gU2VlLCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjEuMjpcbiAgICAvLyAgIHJlYXNvbi1waHJhc2UgID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gICAgaWYgKCFpc1ZhbGlkUmVhc29uUGhyYXNlKFN0cmluZyhpbml0LnN0YXR1c1RleHQpKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdGF0dXNUZXh0JylcbiAgICB9XG4gIH1cblxuICAvLyAzLiBTZXQgcmVzcG9uc2XigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgdG8gaW5pdFtcInN0YXR1c1wiXS5cbiAgaWYgKCdzdGF0dXMnIGluIGluaXQgJiYgaW5pdC5zdGF0dXMgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzID0gaW5pdC5zdGF0dXNcbiAgfVxuXG4gIC8vIDQuIFNldCByZXNwb25zZeKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlIHRvIGluaXRbXCJzdGF0dXNUZXh0XCJdLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIDUuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBmaWxsIHJlc3BvbnNl4oCZcyBoZWFkZXJzIHdpdGggaW5pdFtcImhlYWRlcnNcIl0uXG4gIGlmICgnaGVhZGVycycgaW4gaW5pdCAmJiBpbml0LmhlYWRlcnMgIT0gbnVsbCkge1xuICAgIGZpbGwocmVzcG9uc2Vba0hlYWRlcnNdLCBpbml0LmhlYWRlcnMpXG4gIH1cblxuICAvLyA2LiBJZiBib2R5IHdhcyBnaXZlbiwgdGhlbjpcbiAgaWYgKGJvZHkpIHtcbiAgICAvLyAxLiBJZiByZXNwb25zZSdzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSdzIGJvZHkgdG8gYm9keSdzIGJvZHkuXG4gICAgcmVzcG9uc2Vba1N0YXRlXS5ib2R5ID0gYm9keS5ib2R5XG5cbiAgICAvLyAzLiBJZiBib2R5J3MgdHlwZSBpcyBub24tbnVsbCBhbmQgcmVzcG9uc2UncyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluXG4gICAgLy8gICAgYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIChgQ29udGVudC1UeXBlYCwgYm9keSdzIHR5cGUpIHRvIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QuXG4gICAgaWYgKGJvZHkudHlwZSAhPSBudWxsICYmICFyZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGJvZHkudHlwZSlcbiAgICB9XG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0gPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZWFkYWJsZVN0cmVhbVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEZvcm1EYXRhXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFVSTFNlYXJjaFBhcmFtc1xuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jdHlwZWRlZmRlZi14bWxodHRwcmVxdWVzdGJvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihWKSB8fCB0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHwgdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgfVxuXG4gIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAoViBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtKFYpXG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGluY2x1ZGUgYXN5bmMgaXRlcmFibGVzLFxuICAvLyB0aGlzIGlzIGFuIHVuZGljaSBleHRlbnNpb24uXG4gIGlmIChWPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIFZcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0KFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3N0YXR1cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDIwMFxuICB9LFxuICB7XG4gICAga2V5OiAnc3RhdHVzVGV4dCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2Vcbn1cbiIsCiAgICAiLyogZ2xvYmFscyBBYm9ydENvbnRyb2xsZXIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZXh0cmFjdEJvZHksIG1peGluQm9keSwgY2xvbmVCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5sZXQgVHJhbnNmb3JtU3RyZWFtID0gZ2xvYmFsVGhpcy5UcmFuc2Zvcm1TdHJlYW1cblxuY29uc3Qga0Fib3J0Q29udHJvbGxlciA9IFN5bWJvbCgnYWJvcnRDb250cm9sbGVyJylcblxuY29uc3QgcmVxdWVzdEZpbmFsaXplciA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoeyBzaWduYWwsIGFib3J0IH0pID0+IHtcbiAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIGlmIChpbnB1dCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InIH0pXG5cbiAgICBpbnB1dCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKGlucHV0KVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0KVxuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIHRoaXNba1JlYWxtXSA9IHtcbiAgICAgIHNldHRpbmdzT2JqZWN0OiB7XG4gICAgICAgIGJhc2VVcmw6IGdldEdsb2JhbE9yaWdpbigpLFxuICAgICAgICBnZXQgb3JpZ2luICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5Q29udGFpbmVyOiBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlz4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA2LiBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDcuIEFzc2VydDogaW5wdXQgaXMgYSBSZXF1ZXN0IG9iamVjdC5cbiAgICAgIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0IHRvIGlucHV04oCZcyByZXF1ZXN0LlxuICAgICAgcmVxdWVzdCA9IGlucHV0W2tTdGF0ZV1cblxuICAgICAgLy8gOS4gU2V0IHNpZ25hbCB0byBpbnB1dOKAmXMgc2lnbmFsLlxuICAgICAgc2lnbmFsID0gaW5wdXRba1NpZ25hbF1cbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgb3JpZ2luIGJlIHRoaXPigJlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdOKAmXMgb3JpZ2luLlxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3TigJlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3TigJlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdOKAmXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc+KAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdOKAmXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN04oCZcyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN04oCZcyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN04oCZcyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdOKAmXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdOKAmXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3TigJlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3TigJlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN04oCZcyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdOKAmXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN04oCZcyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN04oCZcyBVUkwgdG8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3TigJlzIFVSTCBsaXN0IHRvIMKrIHJlcXVlc3TigJlzIFVSTCDCuy5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3TigJlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3TigJlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN04oCZcyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAvLyB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0LmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgIG1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2RdID8/IG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gbWV0aG9kLlxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXPigJlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXPigJlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlz4oCZcyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG4gICAgdGhpc1trU2lnbmFsXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc+KAmXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWMgPSBhY1JlZi5kZXJlZigpXG4gICAgICAgICAgaWYgKGFjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgYWJvcnQpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdCdcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0LW5vLWNvcnMnXG4gICAgfVxuXG4gICAgLy8gMzIuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvKiogQHR5cGUge0hlYWRlcnNMaXN0fSAqL1xuICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc+KAmXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVy4oCZcyBuYW1lL2hlYWRlcuKAmXMgdmFsdWUgdG8gdGhpc+KAmXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXPigJlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dOKAmXMgcmVxdWVzdOKAmXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlz4oCZcyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICF0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHnigJlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXPigJlzIHJlcXVlc3TigJlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKGlucHV0Qm9keS5zdHJlYW0pIHx8IGlucHV0Qm9keS5zdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIGlmICghVHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5UcmFuc2Zvcm1TdHJlYW1cbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFs4oCZcyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3NlcuKAmXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZc1xuICAgIC8vIHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3dhcmQgbmF2aWdhdGlvbikuXG4gIGdldCBpc0hpc3RvcnlOYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzSGlzdG9yeU5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXF1ZXN04oCZc1xuICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaGlzdG9yeU5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHNpZ25hbCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYW4gQWJvcnRTaWduYWxcbiAgLy8gb2JqZWN0IGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLCBhbmQgaXRzXG4gIC8vIGFib3J0IGV2ZW50IGhhbmRsZXIuXG4gIGdldCBzaWduYWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgc2lnbmFsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHNpZ25hbC5cbiAgICByZXR1cm4gdGhpc1trU2lnbmFsXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIGdldCBkdXBsZXggKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gJ2hhbGYnXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8IHRoaXMuYm9keT8ubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXPigJlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc+KAmXMgaGVhZGVyc+KAmXMgZ3VhcmQsIGFuZCB0aGlz4oCZcyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3Qoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXF1ZXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN04oCZcyBzaWduYWwgZm9sbG93IHRoaXPigJlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5zaWduYWwsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU2lnbmFsXSA9IGFjLnNpZ25hbFxuXG4gICAgLy8gNC4gUmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3QuXG4gICAgcmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVxdWVzdClcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RzXG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBmYWxzZSxcbiAgICBib2R5OiBudWxsLFxuICAgIGNsaWVudDogbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogbnVsbCxcbiAgICByZXBsYWNlc0NsaWVudElkOiAnJyxcbiAgICB3aW5kb3c6ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6ICdhbGwnLFxuICAgIGluaXRpYXRvcjogJycsXG4gICAgZGVzdGluYXRpb246ICcnLFxuICAgIHByaW9yaXR5OiBudWxsLFxuICAgIG9yaWdpbjogJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXJQb2xpY3k6ICcnLFxuICAgIG1vZGU6ICduby1jb3JzJyxcbiAgICB1c2VDT1JTUHJlZmxpZ2h0RmxhZzogZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIGNhY2hlOiAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogJycsXG4gICAgcmVsb2FkTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGZhbHNlLFxuICAgIHVzZXJBY3RpdmF0aW9uOiBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBmYWxzZSxcbiAgICByZWRpcmVjdENvdW50OiAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGZhbHNlLFxuICAgIGRvbmU6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBmYWxzZSxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKVxuICB9XG4gIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0WzBdXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVxdWVzdCAocmVxdWVzdCkge1xuICAvLyBUbyBjbG9uZSBhIHJlcXVlc3QgcmVxdWVzdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIExldCBuZXdSZXF1ZXN0IGJlIGEgY29weSBvZiByZXF1ZXN0LCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyAuLi5yZXF1ZXN0LCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgc2V0IG5ld1JlcXVlc3TigJlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlcXVlc3TigJlzIGJvZHkuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1JlcXVlc3QuYm9keSA9IGNsb25lQm9keShyZXF1ZXN0LmJvZHkpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gbmV3UmVxdWVzdC5cbiAgcmV0dXJuIG5ld1JlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfVxuICAgICAgKVxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3dpbmRvdycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfSxcbiAge1xuICAgIGtleTogJ2R1cGxleCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdER1cGxleFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlc3BvbnNlLFxuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBtYWtlUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpXG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpXG5jb25zdCB7XG4gIGJ5dGVzTWF0Y2gsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgVEFPQ2hlY2ssXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBpc0Jsb2JMaWtlLFxuICBzYW1lT3JpZ2luLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHVybEhhc0h0dHBzU2NoZW1lXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kc1NldCxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHN1YnJlc291cmNlU2V0LFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgUmVhZGFibGUsIHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyLCBpc0Vycm9yZWQsIGlzUmVhZGFibGUsIG5vZGVNYWpvciwgbm9kZU1pbm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBkYXRhVVJMUHJvY2Vzc29yLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IFRyYW5zZm9ybVN0cmVhbSB9ID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgR0VUX09SX0hFQUQgPSBbJ0dFVCcsICdIRUFEJ11cblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkx9ICovXG5sZXQgcmVzb2x2ZU9iamVjdFVSTFxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5jbGFzcyBGZXRjaCBleHRlbmRzIEVFIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbFxuICAgIHRoaXMuZHVtcCA9IGZhbHNlXG4gICAgdGhpcy5zdGF0ZSA9ICdvbmdvaW5nJ1xuICAgIC8vIDIgdGVybWluYXRlZCBsaXN0ZW5lcnMgZ2V0IGFkZGVkIHBlciByZXF1ZXN0LFxuICAgIC8vIGJ1dCBvbmx5IDEgZ2V0cyByZW1vdmVkLiBJZiB0aGVyZSBhcmUgMjAgcmVkaXJlY3RzLFxuICAgIC8vIDIxIGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTcxMVxuICAgIC8vIFRPRE8gKGZpeCk6IEZpbmQgYW5kIGZpeCByb290IGNhdXNlIGZvciBsZWFrZWQgbGlzdGVuZXIuXG4gICAgdGhpcy5zZXRNYXhMaXN0ZW5lcnMoMjEpXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVy4oCZcyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnbG9iYWxUaGlzLmZldGNoJyB9KVxuXG4gIC8vIDEuIExldCBwIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHAgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDIuIExldCByZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2ZcbiAgLy8gUmVxdWVzdCBhcyBjb25zdHJ1Y3RvciB3aXRoIGlucHV0IGFuZCBpbml0IGFzIGFyZ3VtZW50cy4gSWYgdGhpcyB0aHJvd3NcbiAgLy8gYW4gZXhjZXB0aW9uLCByZWplY3QgcCB3aXRoIGl0IGFuZCByZXR1cm4gcC5cbiAgbGV0IHJlcXVlc3RPYmplY3RcblxuICB0cnkge1xuICAgIHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHAucmVqZWN0KGUpXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gMy4gTGV0IHJlcXVlc3QgYmUgcmVxdWVzdE9iamVjdOKAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDQuIElmIHJlcXVlc3RPYmplY3TigJlzIHNpZ25hbOKAmXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgaWYgKHJlcXVlc3RPYmplY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAvLyAxLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgbnVsbCwgYW5kXG4gICAgLy8gICAgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCBudWxsLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAvLyAyLiBSZXR1cm4gcC5cbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyA1LiBMZXQgZ2xvYmFsT2JqZWN0IGJlIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgLy8gNi4gSWYgZ2xvYmFsT2JqZWN0IGlzIGEgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCwgdGhlbiBzZXRcbiAgLy8gcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gIGlmIChnbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJykge1xuICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgfVxuXG4gIC8vIDcuIExldCByZXNwb25zZU9iamVjdCBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2VPYmplY3QgPSBudWxsXG5cbiAgLy8gOC4gTGV0IHJlbGV2YW50UmVhbG0gYmUgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gIGNvbnN0IHJlbGV2YW50UmVhbG0gPSBudWxsXG5cbiAgLy8gOS4gTGV0IGxvY2FsbHlBYm9ydGVkIGJlIGZhbHNlLlxuICBsZXQgbG9jYWxseUFib3J0ZWQgPSBmYWxzZVxuXG4gIC8vIDEwLiBMZXQgY29udHJvbGxlciBiZSBudWxsLlxuICBsZXQgY29udHJvbGxlciA9IG51bGxcblxuICAvLyAxMS4gQWRkIHRoZSBmb2xsb3dpbmcgYWJvcnQgc3RlcHMgdG8gcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFsOlxuICBhZGRBYm9ydExpc3RlbmVyKFxuICAgIHJlcXVlc3RPYmplY3Quc2lnbmFsLFxuICAgICgpID0+IHtcbiAgICAgIC8vIDEuIFNldCBsb2NhbGx5QWJvcnRlZCB0byB0cnVlLlxuICAgICAgbG9jYWxseUFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIEFzc2VydDogY29udHJvbGxlciBpcyBub24tbnVsbC5cbiAgICAgIGFzc2VydChjb250cm9sbGVyICE9IG51bGwpXG5cbiAgICAgIC8vIDMuIEFib3J0IGNvbnRyb2xsZXIgd2l0aCByZXF1ZXN0T2JqZWN04oCZcyBzaWduYWzigJlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQocmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgICAvLyA0LiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsXG4gICAgICAvLyAgICBhbmQgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICBjb25zdCBoYW5kbGVGZXRjaERvbmUgPSAocmVzcG9uc2UpID0+XG4gICAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KFxuICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcpLCB7IGNhdXNlOiByZXNwb25zZS5lcnJvciB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBSZXNvbHZlIHAgd2l0aCByZXNwb25zZU9iamVjdC5cbiAgICBwLnJlc29sdmUocmVzcG9uc2VPYmplY3QpXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IGluaXQuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG4gIH0pXG5cbiAgLy8gMTQuIFJldHVybiBwLlxuICByZXR1cm4gcC5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1hbmQtcmVwb3J0LXRpbWluZ1xuZnVuY3Rpb24gZmluYWxpemVBbmRSZXBvcnRUaW1pbmcgKHJlc3BvbnNlLCBpbml0aWF0b3JUeXBlID0gJ290aGVyJykge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJiByZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgbnVsbCBvciBlbXB0eSwgdGhlbiByZXR1cm4uXG4gIGlmICghcmVzcG9uc2UudXJsTGlzdD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAzLiBMZXQgb3JpZ2luYWxVUkwgYmUgcmVzcG9uc2XigJlzIFVSTCBsaXN0WzBdLlxuICBjb25zdCBvcmlnaW5hbFVSTCA9IHJlc3BvbnNlLnVybExpc3RbMF1cblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSByZXNwb25zZeKAmXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gcmVzcG9uc2UudGltaW5nSW5mb1xuXG4gIC8vIDUuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNl4oCZcyBjYWNoZSBzdGF0ZS5cbiAgbGV0IGNhY2hlU3RhdGUgPSByZXNwb25zZS5jYWNoZVN0YXRlXG5cbiAgLy8gNi4gSWYgb3JpZ2luYWxVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKG9yaWdpbmFsVVJMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNy4gSWYgdGltaW5nSW5mbyBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHRpbWluZ0luZm8gPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDguIElmIHJlc3BvbnNl4oCZcyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbjpcbiAgaWYgKCFyZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCkge1xuICAgIC8vICAxLiBTZXQgdGltaW5nSW5mbyB0byBhIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZyBpbmZvIGZvciB0aW1pbmdJbmZvLlxuICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuXG4gICAgLy8gIDIuIFNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgY2FjaGVTdGF0ZSA9ICcnXG4gIH1cblxuICAvLyA5LiBTZXQgdGltaW5nSW5mb+KAmXMgZW5kIHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lXG4gIC8vIGdpdmVuIGdsb2JhbOKAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN04oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgLy8gVE9ETzogZ2l2ZW4gZ2xvYmFs4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5P1xuICB0aW1pbmdJbmZvLmVuZFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSgpXG5cbiAgLy8gMTAuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMS4gTWFyayByZXNvdXJjZSB0aW1pbmcgZm9yIHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLFxuICAvLyBnbG9iYWwsIGFuZCBjYWNoZVN0YXRlLlxuICBtYXJrUmVzb3VyY2VUaW1pbmcoXG4gICAgdGltaW5nSW5mbyxcbiAgICBvcmlnaW5hbFVSTCxcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuZnVuY3Rpb24gbWFya1Jlc291cmNlVGltaW5nICh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSkge1xuICBpZiAobm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDIpKSB7XG4gICAgcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLmhyZWYsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0LWZldGNoXG5mdW5jdGlvbiBhYm9ydEZldGNoIChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgZXJyb3IpIHtcbiAgLy8gTm90ZTogQWJvcnRTaWduYWwucmVhc29uIHdhcyBhZGRlZCBpbiBub2RlIHYxNy4yLjBcbiAgLy8gd2hpY2ggd291bGQgZ2l2ZSB1cyBhbiB1bmRlZmluZWQgZXJyb3IgdG8gcmVqZWN0IHdpdGguXG4gIC8vIFJlbW92ZSB0aGlzIG9uY2Ugbm9kZSB2MTYgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAgaWYgKCFlcnJvcikge1xuICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cblxuICAvLyAxLiBSZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBwLnJlamVjdChlcnJvcilcblxuICAvLyAyLiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBjYW5jZWwgcmVxdWVzdOKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXF1ZXN0LmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXF1ZXN0LmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZU9iamVjdCBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlT2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2UuXG4gIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDUuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciByZXNwb25zZeKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVzcG9uc2UuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlc3BvbnNlLmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoaW5nXG5mdW5jdGlvbiBmZXRjaGluZyAoe1xuICByZXF1ZXN0LFxuICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZSxcbiAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgdXNlUGFyYWxsZWxRdWV1ZSA9IGZhbHNlLFxuICBkaXNwYXRjaGVyIC8vIHVuZGljaVxufSkge1xuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3TigJlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN04oCZcyBjbGllbnTigJlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVuVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICBjb25zdCB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgc3RhcnRUaW1lOiBjdXJyZW5UaW1lXG4gIH0pXG5cbiAgLy8gNi4gTGV0IGZldGNoUGFyYW1zIGJlIGEgbmV3IGZldGNoIHBhcmFtcyB3aG9zZVxuICAvLyByZXF1ZXN0IGlzIHJlcXVlc3QsXG4gIC8vIHRpbWluZyBpbmZvIGlzIHRpbWluZ0luZm8sXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBib2R5IGNodW5rIGxlbmd0aCBpcyBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGlzIHByb2Nlc3NSZXNwb25zZSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAvLyB0YXNrIGRlc3RpbmF0aW9uIGlzIHRhc2tEZXN0aW5hdGlvbixcbiAgLy8gYW5kIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5IGlzIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBmZXRjaFBhcmFtcyA9IHtcbiAgICBjb250cm9sbGVyOiBuZXcgRmV0Y2goZGlzcGF0Y2hlciksXG4gICAgcmVxdWVzdCxcbiAgICB0aW1pbmdJbmZvLFxuICAgIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAgIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gICAgdGFza0Rlc3RpbmF0aW9uLFxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0b1xuICAvLyAgICByZXF1ZXN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgLy8gTk9URTogU2luY2UgZmV0Y2hpbmcgaXMgb25seSBjYWxsZWQgZnJvbSBmZXRjaCwgYm9keSBzaG91bGQgYWxyZWFkeSBiZVxuICAvLyBleHRyYWN0ZWQuXG4gIGFzc2VydCghcmVxdWVzdC5ib2R5IHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pXG5cbiAgLy8gOC4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHdpbmRvdyB0byByZXF1ZXN04oCZc1xuICAvLyBjbGllbnQsIGlmIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdCBpcyBhIFdpbmRvdyBvYmplY3Q7IG90aGVyd2lzZVxuICAvLyBcIm5vLXdpbmRvd1wiLlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qud2luZG93ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50Py5nbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnV2luZG93J1xuICAgICAgICA/IHJlcXVlc3QuY2xpZW50XG4gICAgICAgIDogJ25vLXdpbmRvdydcbiAgfVxuXG4gIC8vIDkuIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN04oCZcyBvcmlnaW4gdG8gcmVxdWVzdOKAmXNcbiAgLy8gY2xpZW504oCZcyBvcmlnaW4uXG4gIGlmIChyZXF1ZXN0Lm9yaWdpbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC5vcmlnaW4gPSByZXF1ZXN0LmNsaWVudD8ub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN04oCZcyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN04oCZcyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN04oCZcyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdOKAmXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN04oCZc1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdOKAmXMgcG9saWN5IGNvbnRhaW5lcuKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3TigJlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3TigJlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3TigJlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdOKAmXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZeKAmXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNl4oCZcyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3TigJlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZeKAmXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNl4oCZcyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2XigJlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3TigJlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJylcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3TigJlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZeKAmXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZeKAmXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2XigJlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSDCuyxcbiAgICAgIC8vIGFuZCBib2R5IGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlIGFzIGEgYm9keS5cblxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdhYm91dCBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCcpKVxuICAgIH1cbiAgICBjYXNlICdibG9iOic6IHtcbiAgICAgIGlmICghcmVzb2x2ZU9iamVjdFVSTCkge1xuICAgICAgICByZXNvbHZlT2JqZWN0VVJMID0gcmVxdWlyZSgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5T2JqZWN0ID0gcmVzb2x2ZU9iamVjdFVSTChibG9iVVJMRW50cnkudG9TdHJpbmcoKSlcblxuICAgICAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5vdCBgR0VUYCwgYmxvYlVSTEVudHJ5IGlzIG51bGwsIG9yIGJsb2JVUkxFbnRyeeKAmXNcbiAgICAgIC8vICAgIG9iamVjdCBpcyBub3QgYSBCbG9iIG9iamVjdCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCAhaXNCbG9iTGlrZShibG9iVVJMRW50cnlPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSB0aGUgcmVzdWx0IG9mIHNhZmVseSBleHRyYWN0aW5nIGJsb2JVUkxFbnRyeeKAmXMgb2JqZWN0LlxuICAgICAgY29uc3QgYm9keVdpdGhUeXBlID0gc2FmZWx5RXh0cmFjdEJvZHkoYmxvYlVSTEVudHJ5T2JqZWN0KVxuXG4gICAgICAvLyA0LiBMZXQgYm9keSBiZSBib2R5V2l0aFR5cGXigJlzIGJvZHkuXG4gICAgICBjb25zdCBib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgIC8vIDUuIExldCBsZW5ndGggYmUgYm9keeKAmXMgbGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICBjb25zdCBsZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2JvZHkubGVuZ3RofWApXG5cbiAgICAgIC8vIDYuIExldCB0eXBlIGJlIGJvZHlXaXRoVHlwZeKAmXMgdHlwZSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAgICAgY29uc3QgdHlwZSA9IGJvZHlXaXRoVHlwZVsxXSA/PyAnJ1xuXG4gICAgICAvLyA3LiBSZXR1cm4gYSBuZXcgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXNcbiAgICAgIC8vICAgIMKrIChgQ29udGVudC1MZW5ndGhgLCBsZW5ndGgpLCAoYENvbnRlbnQtVHlwZWAsIHR5cGUpIMK7LCBhbmQgYm9keSBpcyBib2R5LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC1sZW5ndGgnLCB7IG5hbWU6ICdDb250ZW50LUxlbmd0aCcsIHZhbHVlOiBsZW5ndGggfV0sXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogdHlwZSB9XVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5ib2R5ID0gYm9keVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgIH1cbiAgICBjYXNlICdkYXRhOic6IHtcbiAgICAgIC8vIDEuIExldCBkYXRhVVJMU3RydWN0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGVcbiAgICAgIC8vICAgIGRhdGE6IFVSTCBwcm9jZXNzb3Igb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAgIGNvbnN0IGRhdGFVUkxTdHJ1Y3QgPSBkYXRhVVJMUHJvY2Vzc29yKGN1cnJlbnRVUkwpXG5cbiAgICAgIC8vIDIuIElmIGRhdGFVUkxTdHJ1Y3QgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYVxuICAgICAgLy8gICAgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChkYXRhVVJMU3RydWN0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBtaW1lVHlwZSBiZSBkYXRhVVJMU3RydWN04oCZcyBNSU1FIHR5cGUsIHNlcmlhbGl6ZWQuXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShkYXRhVVJMU3RydWN0Lm1pbWVUeXBlKVxuXG4gICAgICAvLyA0LiBSZXR1cm4gYSByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLFxuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgwrssXG4gICAgICAvLyAgICBhbmQgYm9keSBpcyBkYXRhVVJMU3RydWN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiBtaW1lVHlwZSB9XVxuICAgICAgICBdLFxuICAgICAgICBib2R5OiBzYWZlbHlFeHRyYWN0Qm9keShkYXRhVVJMU3RydWN0LmJvZHkpWzBdXG4gICAgICB9KSlcbiAgICB9XG4gICAgY2FzZSAnZmlsZTonOiB7XG4gICAgICAvLyBGb3Igbm93LCB1bmZvcnR1bmF0ZSBhcyBpdCBpcywgZmlsZSBVUkxzIGFyZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICAgICAgLy8gV2hlbiBpbiBkb3VidCwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignbm90IGltcGxlbWVudGVkLi4uIHlldC4uLicpKVxuICAgIH1cbiAgICBjYXNlICdodHRwOic6XG4gICAgY2FzZSAnaHR0cHM6Jzoge1xuICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuXG4gICAgICByZXR1cm4gaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3Vua25vd24gc2NoZW1lJykpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1yZXNwb25zZVxuZnVuY3Rpb24gZmluYWxpemVSZXNwb25zZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIFNldCBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdOKAmXMgZG9uZSBmbGFnLlxuICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgLy8gMiwgSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBpcyBub3QgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoXG4gIC8vIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgZ2l2ZW4gcmVzcG9uc2UsIHdpdGhcbiAgLy8gZmV0Y2hQYXJhbXPigJlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lKHJlc3BvbnNlKSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtZmluYWxlXG5mdW5jdGlvbiBmZXRjaEZpbmFsZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAvLyAxLiBTZXQgcmVzcG9uc2XigJlzIFVSTCBsaXN0IHRvIMKrIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBVUkwgbGlzdFswXSDCuy5cbiAgICByZXNwb25zZS51cmxMaXN0ID0gW2ZldGNoUGFyYW1zLnJlcXVlc3QudXJsTGlzdFswXV1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nXG4gICAgLy8gaW5mbyBmb3IgZmV0Y2hQYXJhbXPigJlzIHRpbWluZyBpbmZvLlxuICAgIHJlc3BvbnNlLnRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogZmV0Y2hQYXJhbXMudGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gU2V0IGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBkb25lIGZsYWcuXG4gICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgLy8gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlXG4gICAgLy8gZW5kLW9mLWJvZHkgZ2l2ZW4gcmVzcG9uc2Ugd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ICE9IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrXG4gIC8vIHRvIHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gIC8vIDUuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgYSBUcmFuc2Zvcm1TdHJlYW0uXG5cbiAgICAvLyAyLiBMZXQgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHdoaWNoLCBnaXZlbiBjaHVuayxcbiAgICAvLyBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuaylcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobVxuICAgIC8vIGFuZCBmbHVzaEFsZ29yaXRobSBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0cmFuc2Zvcm06IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtLFxuICAgICAgZmx1c2g6IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gdGhlIHJlc3VsdCBvZiBwaXBpbmcgcmVzcG9uc2XigJlzIGJvZHkgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtOiByZXNwb25zZS5ib2R5LnN0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pIH1cbiAgfVxuXG4gIC8vIDYuIElmIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5ICE9IG51bGwpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gbnVsbE9yQnl0ZXMgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXPigJlzXG4gICAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIG51bGxPckJ5dGVzLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKG51bGxPckJ5dGVzKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgbnVsbE9yQnl0ZXMpXG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2Vzc1xuICAgIC8vIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgZmFpbHVyZS5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGZhaWx1cmUpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBmYWlsdXJlKVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5XG4gICAgLy8gZ2l2ZW4gbnVsbCwgd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBwcm9jZXNzQm9keShudWxsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIHJlc3BvbnNl4oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yLFxuICAgICAgLy8gYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgICAgcmV0dXJuIGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdOKAmXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2XigJlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdOKAmXMgb3JpZ2luLCByZXF1ZXN04oCZcyBjbGllbnQsIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdOKAmXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNl4oCZcyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2XigJlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZeKAmXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgLy8gVVJM4oCZcyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTOKAmXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdOKAmXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTOKAmXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZeKAmXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN04oCZcyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3TigJlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkzigJlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJylcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJylcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3TigJlzIGJvZHnigJlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1z4oCZcyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb+KAmXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb+KAmXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAvLyAyLiBTZXQgaHR0cEZldGNoUGFyYW1zIHRvIGEgY29weSBvZiBmZXRjaFBhcmFtcy5cbiAgICBodHRwRmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIC8vIDMuIFNldCBodHRwRmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QgdG8gaHR0cFJlcXVlc3QuXG4gICAgaHR0cEZldGNoUGFyYW1zLnJlcXVlc3QgPSBodHRwUmVxdWVzdFxuICB9XG5cbiAgLy8gICAgMy4gTGV0IGluY2x1ZGVDcmVkZW50aWFscyBiZSB0cnVlIGlmIG9uZSBvZlxuICBjb25zdCBpbmNsdWRlQ3JlZGVudGlhbHMgPVxuICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJyB8fFxuICAgIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnc2FtZS1vcmlnaW4nICYmXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpXG5cbiAgLy8gICAgNC4gTGV0IGNvbnRlbnRMZW5ndGggYmUgaHR0cFJlcXVlc3TigJlzIGJvZHnigJlzIGxlbmd0aCwgaWYgaHR0cFJlcXVlc3TigJlzXG4gIC8vICAgIGJvZHkgaXMgbm9uLW51bGw7IG90aGVyd2lzZSBudWxsLlxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gaHR0cFJlcXVlc3QuYm9keSA/IGh0dHBSZXF1ZXN0LmJvZHkubGVuZ3RoIDogbnVsbFxuXG4gIC8vICAgIDUuIExldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgYmUgbnVsbC5cbiAgbGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IG51bGxcblxuICAvLyAgICA2LiBJZiBodHRwUmVxdWVzdOKAmXMgYm9keSBpcyBudWxsIGFuZCBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIGBQT1NUYCBvclxuICAvLyAgICBgUFVUYCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGAwYC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJlxuICAgIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhodHRwUmVxdWVzdC5tZXRob2QpXG4gICkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9ICcwJ1xuICB9XG5cbiAgLy8gICAgNy4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvXG4gIC8vICAgIGNvbnRlbnRMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Y29udGVudExlbmd0aH1gKVxuICB9XG5cbiAgLy8gICAgOC4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ29udGVudC1MZW5ndGhgL2NvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGlmIChjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgIT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpXG4gIH1cblxuICAvLyAgICA5LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kIChgQ29udGVudC1MZW5ndGhgLFxuICAvLyAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICAxMC4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCBhbmQgaHR0cFJlcXVlc3TigJlzIGtlZXBhbGl2ZSBpcyB0cnVlLFxuICAvLyAgICB0aGVuOlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGh0dHBSZXF1ZXN0LmtlZXBhbGl2ZSkge1xuICAgIC8vIE5PVEU6IGtlZXBhbGl2ZSBpcyBhIG5vb3Agb3V0c2lkZSBvZiBicm93c2VyIGNvbnRleHQuXG4gIH1cblxuICAvLyAgICAxMS4gSWYgaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyIGlzIGEgVVJMLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgUmVmZXJlcmAvaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQsXG4gIC8vICAgICB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncmVmZXJlcicsIGlzb21vcnBoaWNFbmNvZGUoaHR0cFJlcXVlc3QucmVmZXJyZXIuaHJlZikpXG4gIH1cblxuICAvLyAgICAxMi4gQXBwZW5kIGEgcmVxdWVzdCBgT3JpZ2luYCBoZWFkZXIgZm9yIGh0dHBSZXF1ZXN0LlxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDEzLiBBcHBlbmQgdGhlIEZldGNoIG1ldGFkYXRhIGhlYWRlcnMgZm9yIGh0dHBSZXF1ZXN0LiBbRkVUQ0gtTUVUQURBVEFdXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTQuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBVc2VyLUFnZW50YCwgdGhlblxuICAvLyAgICB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBVc2VyLUFnZW50YC9kZWZhdWx0IGBVc2VyLUFnZW50YCB2YWx1ZSB0b1xuICAvLyAgICBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3VzZXItYWdlbnQnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgndXNlci1hZ2VudCcsIHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uID09PSAndW5kZWZpbmVkJyA/ICd1bmRpY2knIDogJ25vZGUnKVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdOKAmXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJylcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JylcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlcuKAmXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJylcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZeKAmXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5tb2RlICE9PSAnbm8tc3RvcmUnICYmIGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNl4oCZcyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNl4oCZcyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN04oCZcyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2XigJlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZeKAmXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3TigJlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3TigJlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdOKAmXMgYm9keeKAmXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVycikge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNC4gTGV0IGh0dHBDYWNoZSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlIHBhcnRpdGlvbixcbiAgLy8gZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ETzogY2FjaGVcbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDUuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgcmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vIDYuIExldCBuZXR3b3JrUGFydGl0aW9uS2V5IGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIG5ldHdvcmtcbiAgLy8gcGFydGl0aW9uIGtleSBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNy4gTGV0IG5ld0Nvbm5lY3Rpb24gYmUgXCJ5ZXNcIiBpZiBmb3JjZU5ld0Nvbm5lY3Rpb24gaXMgdHJ1ZTsgb3RoZXJ3aXNlXG4gIC8vIFwibm9cIi5cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IGZvcmNlTmV3Q29ubmVjdGlvbiA/ICd5ZXMnIDogJ25vJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLy8gOC4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIG1vZGU6XG4gIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbixcbiAgICAvLyBnaXZlbiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgICAvLyBUT0RPXG4gIH0gZWxzZSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBjb25uZWN0aW9uLCBnaXZlblxuICAgIC8vIG5ldHdvcmtQYXJ0aXRpb25LZXksIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4sXG4gICAgLy8gaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgZm9yY2VOZXdDb25uZWN0aW9uLlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDkuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiBjb25uZWN0aW9uIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAyLiBTZXQgdGltaW5nSW5mb+KAmXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW4gY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB3aXRoIGNvbm5lY3Rpb27igJlzXG4gIC8vICAgIHRpbWluZyBpbmZvLCB0aW1pbmdJbmZv4oCZcyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUsIGFuZCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgMy4gSWYgY29ubmVjdGlvbiBpcyBub3QgYW4gSFRUUC8yIGNvbm5lY3Rpb24sIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vICAgIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiBhcHBlbmQgKGBUcmFuc2Zlci1FbmNvZGluZ2AsXG4gIC8vICAgIGBjaHVua2VkYCkgdG8gcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgNC4gU2V0IHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVxdWVzdCBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vICAgIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgbWFraW5nIGFuIEhUVFAgcmVxdWVzdCBvdmVyIGNvbm5lY3Rpb25cbiAgLy8gICAgdXNpbmcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcblxuICAvLyAgICAgICAgLSBGb2xsb3cgdGhlIHJlbGV2YW50IHJlcXVpcmVtZW50cyBmcm9tIEhUVFAuIFtIVFRQXSBbSFRUUC1TRU1BTlRJQ1NdXG4gIC8vICAgICAgICBbSFRUUC1DT05EXSBbSFRUUC1DQUNISU5HXSBbSFRUUC1BVVRIXVxuXG4gIC8vICAgICAgICAtIElmIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCxcbiAgLy8gICAgICAgIHRoZW4gdGhlIHVzZXIgYWdlbnQgbWF5IGhhdmUgYSBidWZmZXIgb2YgdXAgdG8gNjQga2liaWJ5dGVzIGFuZCBzdG9yZVxuICAvLyAgICAgICAgYSBwYXJ0IG9mIHJlcXVlc3TigJlzIGJvZHkgaW4gdGhhdCBidWZmZXIuIElmIHRoZSB1c2VyIGFnZW50IHJlYWRzIGZyb21cbiAgLy8gICAgICAgIHJlcXVlc3TigJlzIGJvZHkgYmV5b25kIHRoYXQgYnVmZmVy4oCZcyBzaXplIGFuZCB0aGUgdXNlciBhZ2VudCBuZWVkcyB0b1xuICAvLyAgICAgICAgcmVzZW5kIHJlcXVlc3QsIHRoZW4gaW5zdGVhZCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgICAgICAtIFNldCB0aW1pbmdJbmZv4oCZcyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICAgICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHksXG4gIC8vICAgICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgdXNlciBhZ2VudOKAmXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gICAgICAgIG9mIHRoZSByZXNwb25zZSAoZS5nLiwgZnJhbWUgaGVhZGVyIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzXG4gIC8vICAgICAgICBsaW5lIGZvciBIVFRQLzEueCkuXG5cbiAgLy8gICAgICAgIC0gV2FpdCB1bnRpbCBhbGwgdGhlIGhlYWRlcnMgYXJlIHRyYW5zbWl0dGVkLlxuXG4gIC8vICAgICAgICAtIEFueSByZXNwb25zZXMgd2hvc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAxMDAgdG8gMTk5LCBpbmNsdXNpdmUsXG4gIC8vICAgICAgICBhbmQgaXMgbm90IDEwMSwgYXJlIHRvIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHNldHRpbmdcbiAgLy8gICAgICAgIHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSBhYm92ZS5cblxuICAvLyAgICAtIElmIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBUcmFuc2Zlci1FbmNvZGluZ2AvYGNodW5rZWRgIGFuZFxuICAvLyAgICByZXNwb25zZSBpcyB0cmFuc2ZlcnJlZCB2aWEgSFRUUC8xLjAgb3Igb2xkZXIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyAgICBlcnJvci5cblxuICAvLyAgICAtIElmIHRoZSBIVFRQIHJlcXVlc3QgcmVzdWx0cyBpbiBhIFRMUyBjbGllbnQgY2VydGlmaWNhdGUgZGlhbG9nLCB0aGVuOlxuXG4gIC8vICAgICAgICAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0LCBtYWtlIHRoZVxuICAvLyAgICAgICAgZGlhbG9nIGF2YWlsYWJsZSBpbiByZXF1ZXN04oCZcyB3aW5kb3cuXG5cbiAgLy8gICAgICAgIDIuIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyBUbyB0cmFuc21pdCByZXF1ZXN04oCZcyBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcbiAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbFxuICAvLyAxLiBJZiBib2R5IGlzIG51bGwgYW5kIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXNcbiAgLy8gbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3RcbiAgLy8gZW5kLW9mLWJvZHkgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBib2R5IGlzIG5vbi1udWxsOlxuXG4gICAgLy8gICAgMS4gTGV0IHByb2Nlc3NCb2R5Q2h1bmsgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlDaHVuayA9IGFzeW5jIGZ1bmN0aW9uICogKGJ5dGVzKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDogdHJhbnNtaXQgYnl0ZXMuXG4gICAgICB5aWVsZCBieXRlc1xuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuXG4gICAgICAvLyBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgZ2l2ZW4gYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoPy4oYnl0ZXMuYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0VuZE9mQm9keSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIG5vbi1udWxsLFxuICAgICAgLy8gdGhlbiBydW4gZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgZ2l2ZW4gZSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGUpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZSBpcyBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24sIHRoZW4gYWJvcnQgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIEluY3JlbWVudGFsbHkgcmVhZCByZXF1ZXN04oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5Q2h1bmssIHByb2Nlc3NFbmRPZkJvZHksXG4gICAgLy8gcHJvY2Vzc0JvZHlFcnJvciwgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIHJlcXVlc3RCb2R5ID0gKGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBieXRlcyBvZiByZXF1ZXN0LmJvZHkuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwcm9jZXNzQm9keUNodW5rKGJ5dGVzKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NFbmRPZkJvZHkoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc29ja2V0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHdlYnNvY2tldHNcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9ID0gYXdhaXQgZGlzcGF0Y2goeyBib2R5OiByZXF1ZXN0Qm9keSB9KVxuXG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBib2R5W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQgPSAoKSA9PiBpdGVyYXRvci5uZXh0KClcblxuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0IH0pXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyAxMC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gMS4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgICAvLyAyLiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcywgZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKGVycilcbiAgfVxuXG4gIC8vIDExLiBMZXQgcHVsbEFsZ29yaXRobSBiZSBhbiBhY3Rpb24gdGhhdCByZXN1bWVzIHRoZSBvbmdvaW5nIGZldGNoXG4gIC8vIGlmIGl0IGlzIHN1c3BlbmRlZC5cbiAgY29uc3QgcHVsbEFsZ29yaXRobSA9ICgpID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSgpXG4gIH1cblxuICAvLyAxMi4gTGV0IGNhbmNlbEFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhYm9ydHMgZmV0Y2hQYXJhbXPigJlzXG4gIC8vIGNvbnRyb2xsZXIgd2l0aCByZWFzb24sIGdpdmVuIHJlYXNvbi5cbiAgY29uc3QgY2FuY2VsQWxnb3JpdGhtID0gKHJlYXNvbikgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICB9XG5cbiAgLy8gMTMuIExldCBoaWdoV2F0ZXJNYXJrIGJlIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOIG51bWJlciwgY2hvc2VuIGJ5XG4gIC8vIHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTQuIExldCBzaXplQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFjY2VwdHMgYSBjaHVuayBvYmplY3RcbiAgLy8gYW5kIHJldHVybnMgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4sIG5vbi1pbmZpbml0ZSBudW1iZXIsIGNob3NlbiBieSB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBMZXQgc3RyZWFtIGJlIGEgbmV3IFJlYWRhYmxlU3RyZWFtLlxuICAvLyAxNi4gU2V0IHVwIHN0cmVhbSB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vIGNhbmNlbEFsZ29yaXRobSBzZXQgdG8gY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrIHNldCB0b1xuICAvLyBoaWdoV2F0ZXJNYXJrLCBhbmQgc2l6ZUFsZ29yaXRobSBzZXQgdG8gc2l6ZUFsZ29yaXRobS5cbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXdhaXQgcHVsbEFsZ29yaXRobShjb250cm9sbGVyKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbEFsZ29yaXRobShyZWFzb24pXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAwLFxuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0gfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNl4oCZcyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb+KAmXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShieXRlcykpXG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc27igJl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmICghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDIuIElmIGFib3J0ZWQsIHRoZW46XG4gIGZ1bmN0aW9uIG9uQWJvcnRlZCAocmVhc29uKSB7XG4gICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcuXG4gICAgICByZXNwb25zZS5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gZXJyb3Igc3RyZWFtIHdpdGggdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gICAgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBnaXZlbiBmZXRjaFBhcmFtc+KAmXNcbiAgICAgIC8vICAgIGNvbnRyb2xsZXLigJlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZCBhblxuICAgICAgLy8gICAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCByZWFsbS5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBzdHJlYW0gaXMgcmVhZGFibGUsIGVycm9yIHN0cmVhbSB3aXRoIGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IobmV3IFR5cGVFcnJvcigndGVybWluYXRlZCcsIHtcbiAgICAgICAgICBjYXVzZTogaXNFcnJvckxpa2UocmVhc29uKSA/IHJlYXNvbiA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCB0aGUgdXNlciBhZ2VudCBzaG91bGQgY2xvc2UgY29ubmVjdGlvbiB1bmxlc3MgaXQgd291bGQgYmUgYmFkIGZvciBwZXJmb3JtYW5jZSB0byBkbyBzby5cbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gIH1cblxuICAvLyAyMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2VcblxuICBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaCAoeyBib2R5IH0pIHtcbiAgICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLicpLkFnZW50fSAqL1xuICAgIGNvbnN0IGFnZW50ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gYWdlbnQuZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXG4gICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyLmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgYWJvcnQobmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgYWJvcnQpXG4gICAgICAgICAgICB0aGlzLmFib3J0ID0gY29ubmVjdGlvbi5hYm9ydCA9IGFib3J0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA8IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgLy8gRm9yIEgyLCB0aGUgaGVhZGVycyBhcmUgYSBwbGFpbiBKUyBvYmplY3RcbiAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYW5kIGl0ZXJhdGUgYWNjb3JkaW5nbHlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzTGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzTGlzdClcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3Rba2V5XVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHkgPSBuZXcgUmVhZGFibGUoeyByZWFkOiByZXN1bWUgfSlcblxuICAgICAgICAgIGNvbnN0IGRlY29kZXJzID0gW11cblxuICAgICAgICAgIGNvbnN0IHdpbGxGb2xsb3cgPSByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93JyAmJlxuICAgICAgICAgICAgbG9jYXRpb24gJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kaW5nIG9mIGNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTIuaHRtbCNzZWN0aW9uLTcuMlxuICAgICAgICAgICAgICBpZiAoY29kaW5nID09PSAneC1nemlwJyB8fCBjb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVHdW56aXAoe1xuICAgICAgICAgICAgICAgICAgLy8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG4gICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUluZmxhdGUoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLmxlbmd0aCA9IDBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIGJvZHk6IGRlY29kZXJzLmxlbmd0aFxuICAgICAgICAgICAgICA/IHBpcGVsaW5lKHRoaXMuYm9keSwgLi4uZGVjb2RlcnMsICgpID0+IHsgfSlcbiAgICAgICAgICAgICAgOiB0aGlzLmJvZHkub24oJ2Vycm9yJywgKCkgPT4ge30pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNl4oCZc1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZv4oCZcyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc+KAmXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCA9IHRydWVcblxuICAgICAgICAgIHRoaXMuYm9keS5wdXNoKG51bGwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25FcnJvciAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keT8uZGVzdHJveShlcnJvcilcblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycm9yKVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uVXBncmFkZSAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuXG4gICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcblxuY29uc3Qga1N0YXRlID0gU3ltYm9sKCdQcm9ncmVzc0V2ZW50IHN0YXRlJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcHJvZ3Jlc3NldmVudFxuICovXG5jbGFzcyBQcm9ncmVzc0V2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbGFiZWxcbiAqL1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcgKGxhYmVsKSB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAvLyAgICBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGNvcnJlc3BvbmRpbmcgZW5jb2Rpbmc7IG90aGVyd2lzZSByZXR1cm4gZmFpbHVyZS5cbiAgc3dpdGNoIChsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3VuaWNvZGUtMS0xLXV0Zi04JzpcbiAgICBjYXNlICd1bmljb2RlMTF1dGY4JzpcbiAgICBjYXNlICd1bmljb2RlMjB1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAneC11bmljb2RlMjB1dGY4JzpcbiAgICAgIHJldHVybiAnVVRGLTgnXG4gICAgY2FzZSAnODY2JzpcbiAgICBjYXNlICdjcDg2Nic6XG4gICAgY2FzZSAnY3NpYm04NjYnOlxuICAgIGNhc2UgJ2libTg2Nic6XG4gICAgICByZXR1cm4gJ0lCTTg2NidcbiAgICBjYXNlICdjc2lzb2xhdGluMic6XG4gICAgY2FzZSAnaXNvLTg4NTktMic6XG4gICAgY2FzZSAnaXNvLWlyLTEwMSc6XG4gICAgY2FzZSAnaXNvODg1OS0yJzpcbiAgICBjYXNlICdpc284ODU5Mic6XG4gICAgY2FzZSAnaXNvXzg4NTktMic6XG4gICAgY2FzZSAnaXNvXzg4NTktMjoxOTg3JzpcbiAgICBjYXNlICdsMic6XG4gICAgY2FzZSAnbGF0aW4yJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMidcbiAgICBjYXNlICdjc2lzb2xhdGluMyc6XG4gICAgY2FzZSAnaXNvLTg4NTktMyc6XG4gICAgY2FzZSAnaXNvLWlyLTEwOSc6XG4gICAgY2FzZSAnaXNvODg1OS0zJzpcbiAgICBjYXNlICdpc284ODU5Myc6XG4gICAgY2FzZSAnaXNvXzg4NTktMyc6XG4gICAgY2FzZSAnaXNvXzg4NTktMzoxOTg4JzpcbiAgICBjYXNlICdsMyc6XG4gICAgY2FzZSAnbGF0aW4zJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMydcbiAgICBjYXNlICdjc2lzb2xhdGluNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNCc6XG4gICAgY2FzZSAnaXNvLWlyLTExMCc6XG4gICAgY2FzZSAnaXNvODg1OS00JzpcbiAgICBjYXNlICdpc284ODU5NCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNDoxOTg4JzpcbiAgICBjYXNlICdsNCc6XG4gICAgY2FzZSAnbGF0aW40JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNCdcbiAgICBjYXNlICdjc2lzb2xhdGluY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2N5cmlsbGljJzpcbiAgICBjYXNlICdpc28tODg1OS01JzpcbiAgICBjYXNlICdpc28taXItMTQ0JzpcbiAgICBjYXNlICdpc284ODU5LTUnOlxuICAgIGNhc2UgJ2lzbzg4NTk1JzpcbiAgICBjYXNlICdpc29fODg1OS01JzpcbiAgICBjYXNlICdpc29fODg1OS01OjE5ODgnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS01J1xuICAgIGNhc2UgJ2FyYWJpYyc6XG4gICAgY2FzZSAnYXNtby03MDgnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZlJzpcbiAgICBjYXNlICdjc2lzbzg4NTk2aSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6XG4gICAgY2FzZSAnZWNtYS0xMTQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtZSc6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1pJzpcbiAgICBjYXNlICdpc28taXItMTI3JzpcbiAgICBjYXNlICdpc284ODU5LTYnOlxuICAgIGNhc2UgJ2lzbzg4NTk2JzpcbiAgICBjYXNlICdpc29fODg1OS02JzpcbiAgICBjYXNlICdpc29fODg1OS02OjE5ODcnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS02J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5ncmVlayc6XG4gICAgY2FzZSAnZWNtYS0xMTgnOlxuICAgIGNhc2UgJ2Vsb3RfOTI4JzpcbiAgICBjYXNlICdncmVlayc6XG4gICAgY2FzZSAnZ3JlZWs4JzpcbiAgICBjYXNlICdpc28tODg1OS03JzpcbiAgICBjYXNlICdpc28taXItMTI2JzpcbiAgICBjYXNlICdpc284ODU5LTcnOlxuICAgIGNhc2UgJ2lzbzg4NTk3JzpcbiAgICBjYXNlICdpc29fODg1OS03JzpcbiAgICBjYXNlICdpc29fODg1OS03OjE5ODcnOlxuICAgIGNhc2UgJ3N1bl9ldV9ncmVlayc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTcnXG4gICAgY2FzZSAnY3Npc284ODU5OGUnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5oZWJyZXcnOlxuICAgIGNhc2UgJ2hlYnJldyc6XG4gICAgY2FzZSAnaXNvLTg4NTktOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1lJzpcbiAgICBjYXNlICdpc28taXItMTM4JzpcbiAgICBjYXNlICdpc284ODU5LTgnOlxuICAgIGNhc2UgJ2lzbzg4NTk4JzpcbiAgICBjYXNlICdpc29fODg1OS04JzpcbiAgICBjYXNlICdpc29fODg1OS04OjE5ODgnOlxuICAgIGNhc2UgJ3Zpc3VhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgnXG4gICAgY2FzZSAnY3Npc284ODU5OGknOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtaSc6XG4gICAgY2FzZSAnbG9naWNhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgtSSdcbiAgICBjYXNlICdjc2lzb2xhdGluNic6XG4gICAgY2FzZSAnaXNvLTg4NTktMTAnOlxuICAgIGNhc2UgJ2lzby1pci0xNTcnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMCc6XG4gICAgY2FzZSAnbDYnOlxuICAgIGNhc2UgJ2xhdGluNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEwJ1xuICAgIGNhc2UgJ2lzby04ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5MTMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMydcbiAgICBjYXNlICdpc28tODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OTE0JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbjknOlxuICAgIGNhc2UgJ2lzby04ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5MTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE1JzpcbiAgICBjYXNlICdsOSc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE1J1xuICAgIGNhc2UgJ2lzby04ODU5LTE2JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTYnXG4gICAgY2FzZSAnY3Nrb2k4cic6XG4gICAgY2FzZSAna29pJzpcbiAgICBjYXNlICdrb2k4JzpcbiAgICBjYXNlICdrb2k4LXInOlxuICAgIGNhc2UgJ2tvaThfcic6XG4gICAgICByZXR1cm4gJ0tPSTgtUidcbiAgICBjYXNlICdrb2k4LXJ1JzpcbiAgICBjYXNlICdrb2k4LXUnOlxuICAgICAgcmV0dXJuICdLT0k4LVUnXG4gICAgY2FzZSAnY3NtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ21hYyc6XG4gICAgY2FzZSAnbWFjaW50b3NoJzpcbiAgICBjYXNlICd4LW1hYy1yb21hbic6XG4gICAgICByZXR1cm4gJ21hY2ludG9zaCdcbiAgICBjYXNlICdpc28tODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OTExJzpcbiAgICBjYXNlICd0aXMtNjIwJzpcbiAgICBjYXNlICd3aW5kb3dzLTg3NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtODc0J1xuICAgIGNhc2UgJ2NwMTI1MCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUwJzpcbiAgICBjYXNlICd4LWNwMTI1MCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MCdcbiAgICBjYXNlICdjcDEyNTEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MSc6XG4gICAgY2FzZSAneC1jcDEyNTEnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTEnXG4gICAgY2FzZSAnYW5zaV94My40LTE5NjgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdjcDEyNTInOlxuICAgIGNhc2UgJ2NwODE5JzpcbiAgICBjYXNlICdjc2lzb2xhdGluMSc6XG4gICAgY2FzZSAnaWJtODE5JzpcbiAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICBjYXNlICdpc28taXItMTAwJzpcbiAgICBjYXNlICdpc284ODU5LTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgIGNhc2UgJ2wxJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUyJ1xuICAgIGNhc2UgJ2NwMTI1Myc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUzJzpcbiAgICBjYXNlICd4LWNwMTI1Myc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MydcbiAgICBjYXNlICdjcDEyNTQnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW41JzpcbiAgICBjYXNlICdpc28tODg1OS05JzpcbiAgICBjYXNlICdpc28taXItMTQ4JzpcbiAgICBjYXNlICdpc284ODU5LTknOlxuICAgIGNhc2UgJ2lzbzg4NTk5JzpcbiAgICBjYXNlICdpc29fODg1OS05JzpcbiAgICBjYXNlICdpc29fODg1OS05OjE5ODknOlxuICAgIGNhc2UgJ2w1JzpcbiAgICBjYXNlICdsYXRpbjUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NCc6XG4gICAgY2FzZSAneC1jcDEyNTQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTQnXG4gICAgY2FzZSAnY3AxMjU1JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTUnOlxuICAgIGNhc2UgJ3gtY3AxMjU1JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU1J1xuICAgIGNhc2UgJ2NwMTI1Nic6XG4gICAgY2FzZSAnd2luZG93cy0xMjU2JzpcbiAgICBjYXNlICd4LWNwMTI1Nic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NidcbiAgICBjYXNlICdjcDEyNTcnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nyc6XG4gICAgY2FzZSAneC1jcDEyNTcnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTcnXG4gICAgY2FzZSAnY3AxMjU4JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTgnOlxuICAgIGNhc2UgJ3gtY3AxMjU4JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU4J1xuICAgIGNhc2UgJ3gtbWFjLWN5cmlsbGljJzpcbiAgICBjYXNlICd4LW1hYy11a3JhaW5pYW4nOlxuICAgICAgcmV0dXJuICd4LW1hYy1jeXJpbGxpYydcbiAgICBjYXNlICdjaGluZXNlJzpcbiAgICBjYXNlICdjc2diMjMxMic6XG4gICAgY2FzZSAnY3Npc281OGdiMjMxMjgwJzpcbiAgICBjYXNlICdnYjIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTItODAnOlxuICAgIGNhc2UgJ2diayc6XG4gICAgY2FzZSAnaXNvLWlyLTU4JzpcbiAgICBjYXNlICd4LWdiayc6XG4gICAgICByZXR1cm4gJ0dCSydcbiAgICBjYXNlICdnYjE4MDMwJzpcbiAgICAgIHJldHVybiAnZ2IxODAzMCdcbiAgICBjYXNlICdiaWc1JzpcbiAgICBjYXNlICdiaWc1LWhrc2NzJzpcbiAgICBjYXNlICdjbi1iaWc1JzpcbiAgICBjYXNlICdjc2JpZzUnOlxuICAgIGNhc2UgJ3gteC1iaWc1JzpcbiAgICAgIHJldHVybiAnQmlnNSdcbiAgICBjYXNlICdjc2V1Y3BrZGZtdGphcGFuZXNlJzpcbiAgICBjYXNlICdldWMtanAnOlxuICAgIGNhc2UgJ3gtZXVjLWpwJzpcbiAgICAgIHJldHVybiAnRVVDLUpQJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmpwJzpcbiAgICBjYXNlICdpc28tMjAyMi1qcCc6XG4gICAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJ1xuICAgIGNhc2UgJ2Nzc2hpZnRqaXMnOlxuICAgIGNhc2UgJ21zOTMyJzpcbiAgICBjYXNlICdtc19rYW5qaSc6XG4gICAgY2FzZSAnc2hpZnQtamlzJzpcbiAgICBjYXNlICdzaGlmdF9qaXMnOlxuICAgIGNhc2UgJ3NqaXMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMzFqJzpcbiAgICBjYXNlICd4LXNqaXMnOlxuICAgICAgcmV0dXJuICdTaGlmdF9KSVMnXG4gICAgY2FzZSAnY3NldWNrcic6XG4gICAgY2FzZSAnY3Nrc2M1NjAxMTk4Nyc6XG4gICAgY2FzZSAnZXVjLWtyJzpcbiAgICBjYXNlICdpc28taXItMTQ5JzpcbiAgICBjYXNlICdrb3JlYW4nOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg3JzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4OSc6XG4gICAgY2FzZSAna3NjNTYwMSc6XG4gICAgY2FzZSAna3NjXzU2MDEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtOTQ5JzpcbiAgICAgIHJldHVybiAnRVVDLUtSJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmtyJzpcbiAgICBjYXNlICdoei1nYi0yMzEyJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24tZXh0JzpcbiAgICBjYXNlICdpc28tMjAyMi1rcic6XG4gICAgY2FzZSAncmVwbGFjZW1lbnQnOlxuICAgICAgcmV0dXJuICdyZXBsYWNlbWVudCdcbiAgICBjYXNlICd1bmljb2RlZmZmZSc6XG4gICAgY2FzZSAndXRmLTE2YmUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgICBjYXNlICdjc3VuaWNvZGUnOlxuICAgIGNhc2UgJ2lzby0xMDY0Ni11Y3MtMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3VuaWNvZGUnOlxuICAgIGNhc2UgJ3VuaWNvZGVmZWZmJzpcbiAgICBjYXNlICd1dGYtMTYnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2TEUnXG4gICAgY2FzZSAneC11c2VyLWRlZmluZWQnOlxuICAgICAgcmV0dXJuICd4LXVzZXItZGVmaW5lZCdcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEVuY29kaW5nXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlLCBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCB7IGJ0b2EgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnLigJlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmcuKAmXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnLigJlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnLigJlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2LigJlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnLigJlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmcuKAmXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnLigJlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnLigJlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmcuKAmXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZeKAmXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ+KAmXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcicgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzVGV4dCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nKVxuICAgIH1cblxuICAgIC8vIFRoZSByZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBUZXh0IGFuZCBlbmNvZGluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdUZXh0JywgZW5jb2RpbmcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0RhdGFVUkxcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0RhdGFVUkwgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0RhdGFVUkwoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsIG11c3RcbiAgICAvLyBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggRGF0YVVSTC5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdEYXRhVVJMJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tYWJvcnRcbiAgICovXG4gIGFib3J0ICgpIHtcbiAgICAvLyAxLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJlbXB0eVwiIG9yIGlmIHRoaXMncyBzdGF0ZSBpc1xuICAgIC8vICAgIFwiZG9uZVwiIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwgYW5kIHRlcm1pbmF0ZVxuICAgIC8vICAgIHRoaXMgYWxnb3JpdGhtLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdlbXB0eScgfHwgdGhpc1trU3RhdGVdID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJsb2FkaW5nXCIgc2V0IHRoaXMncyBzdGF0ZSB0b1xuICAgIC8vICAgIFwiZG9uZVwiIGFuZCBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgICAgdGhpc1trU3RhdGVdID0gJ2RvbmUnXG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBhbnkgdGFza3MgZnJvbSB0aGlzIG9uIHRoZSBmaWxlIHJlYWRpbmdcbiAgICAvLyAgICB0YXNrIHNvdXJjZSBpbiBhbiBhZmZpbGlhdGVkIHRhc2sgcXVldWUsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgdGhvc2UgdGFza3MgZnJvbSB0aGF0IHRhc2sgcXVldWUuXG4gICAgdGhpc1trQWJvcnRlZF0gPSB0cnVlXG5cbiAgICAvLyA0LiBUZXJtaW5hdGUgdGhlIGFsZ29yaXRobSBmb3IgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAvLyBUT0RPXG5cbiAgICAvLyA1LiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoaXMuXG4gICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdhYm9ydCcsIHRoaXMpXG5cbiAgICAvLyA2LiBJZiB0aGlzJ3Mgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGlzLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgdGhpcylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVhZHlzdGF0ZVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBzd2l0Y2ggKHRoaXNba1N0YXRlXSkge1xuICAgICAgY2FzZSAnZW1wdHknOiByZXR1cm4gdGhpcy5FTVBUWVxuICAgICAgY2FzZSAnbG9hZGluZyc6IHJldHVybiB0aGlzLkxPQURJTkdcbiAgICAgIGNhc2UgJ2RvbmUnOiByZXR1cm4gdGhpcy5ET05FXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlc3VsdFxuICAgKi9cbiAgZ2V0IHJlc3VsdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSByZXN1bHQgYXR0cmlidXRl4oCZcyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgcmVzdWx0LlxuICAgIHJldHVybiB0aGlzW2tSZXN1bHRdXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZXJyb3JcbiAgICovXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSBlcnJvciBhdHRyaWJ1dGXigJlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyBlcnJvci5cbiAgICByZXR1cm4gdGhpc1trRXJyb3JdXG4gIH1cblxuICBnZXQgb25sb2FkZW5kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZGVuZFxuICB9XG5cbiAgc2V0IG9ubG9hZGVuZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZGVuZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgdGhpc1trRXZlbnRzXS5sb2FkZW5kKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXNba0V2ZW50c10uZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZHN0YXJ0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0XG4gIH1cblxuICBzZXQgb25sb2Fkc3RhcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRzdGFydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCB0aGlzW2tFdmVudHNdLmxvYWRzdGFydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25wcm9ncmVzcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLnByb2dyZXNzXG4gIH1cblxuICBzZXQgb25wcm9ncmVzcyAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzW2tFdmVudHNdLnByb2dyZXNzKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkXG4gIH1cblxuICBzZXQgb25sb2FkIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzW2tFdmVudHNdLmxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uYWJvcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5hYm9ydFxuICB9XG5cbiAgc2V0IG9uYWJvcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmFib3J0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgdGhpc1trRXZlbnRzXS5hYm9ydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVtcHR5XG5GaWxlUmVhZGVyLkVNUFRZID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRU1QVFkgPSAwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItbG9hZGluZ1xuRmlsZVJlYWRlci5MT0FESU5HID0gRmlsZVJlYWRlci5wcm90b3R5cGUuTE9BRElORyA9IDFcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1kb25lXG5GaWxlUmVhZGVyLkRPTkUgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5ET05FID0gMlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLnByb3RvdHlwZSwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZEFzQXJyYXlCdWZmZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0JpbmFyeVN0cmluZzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzRGF0YVVSTDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlc3VsdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZHN0YXJ0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbnByb2dyZXNzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGVSZWFkZXInLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlciwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZpbGVSZWFkZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgaXNWYWxpZEhlYWRlck5hbWUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1lcXVhbHNcbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBleGNsdWRlRnJhZ21lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1cmxFcXVhbHMgKEEsIEIsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRBID0gVVJMU2VyaWFsaXplcihBLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgY29uc3Qgc2VyaWFsaXplZEIgPSBVUkxTZXJpYWxpemVyKEIsIGV4Y2x1ZGVGcmFnbWVudClcblxuICByZXR1cm4gc2VyaWFsaXplZEEgPT09IHNlcmlhbGl6ZWRCXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi82OTRkMjBkMTM0Y2I1NTNkOGQ4OWU1NTAwYjkxNDgwMTJiMWJhMjk5L2NvbnRlbnQvYnJvd3Nlci9jYWNoZV9zdG9yYWdlL2NhY2hlX3N0b3JhZ2VfY2FjaGUuY2MjTDI2MC1MMjYyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVmFsdWVzIChoZWFkZXIpIHtcbiAgYXNzZXJ0KGhlYWRlciAhPT0gbnVsbClcblxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIGZvciAobGV0IHZhbHVlIG9mIGhlYWRlci5zcGxpdCgnLCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVybEVxdWFscyxcbiAgZmllbGRWYWx1ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgdXJsRXF1YWxzLCBmaWVsZFZhbHVlczogZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgUmVzcG9uc2UsIGNsb25lUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3Jlc3BvbnNlJylcbmNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLWNhY2hlLWJhdGNoLW9wZXJhdGlvblxuICogQHR5cGVkZWYge09iamVjdH0gQ2FjaGVCYXRjaE9wZXJhdGlvblxuICogQHByb3BlcnR5IHsnZGVsZXRlJyB8ICdwdXQnfSB0eXBlXG4gKiBAcHJvcGVydHkge2FueX0gcmVxdWVzdFxuICogQHByb3BlcnR5IHthbnl9IHJlc3BvbnNlXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICogQHR5cGVkZWYge1thbnksIGFueV1bXX0gcmVxdWVzdFJlc3BvbnNlTGlzdFxuICovXG5cbmNsYXNzIENhY2hlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAgICogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGFyZ3VtZW50c1sxXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hBbGwocmVxdWVzdCwgb3B0aW9ucylcblxuICAgIGlmIChwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIHBbMF1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoQWxsIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAyLjIuMVxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVzcG9uc2VzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICAvLyBXZSBkb24ndCBpbXBsZW1lbnQgQ09ScyBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGUgcmVzcG9uc2VzLCB5YXkhXG5cbiAgICAvLyA1LjUuMVxuICAgIGNvbnN0IHJlc3BvbnNlTGlzdCA9IFtdXG5cbiAgICAvLyA1LjUuMlxuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA1LjUuMi4xXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5Py5zb3VyY2UgPz8gbnVsbClcbiAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5ID0gYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuXG4gICAgICByZXNwb25zZUxpc3QucHVzaChyZXNwb25zZU9iamVjdClcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHJlc3BvbnNlTGlzdClcbiAgfVxuXG4gIGFzeW5jIGFkZCAocmVxdWVzdCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbcmVxdWVzdF1cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVzcG9uc2VBcnJheVByb21pc2UgPSB0aGlzLmFkZEFsbChyZXF1ZXN0cylcblxuICAgIC8vIDMuXG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlQXJyYXlQcm9taXNlXG4gIH1cblxuICBhc3luYyBhZGRBbGwgKHJlcXVlc3RzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcgfSlcblxuICAgIHJlcXVlc3RzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddKHJlcXVlc3RzKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXNwb25zZVByb21pc2VzID0gW11cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgLy8gMy5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMy4xXG4gICAgICBjb25zdCByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIC8vIDMuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkgfHwgci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUuJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjRcbiAgICAgIHIuaW5pdGlhdG9yID0gJ2ZldGNoJ1xuICAgICAgci5kZXN0aW5hdGlvbiA9ICdzdWJyZXNvdXJjZSdcblxuICAgICAgLy8gNS41XG4gICAgICByZXF1ZXN0TGlzdC5wdXNoKHIpXG5cbiAgICAgIC8vIDUuNlxuICAgICAgY29uc3QgcmVzcG9uc2VQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgICAgLy8gNS43XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnB1c2goZmV0Y2hpbmcoe1xuICAgICAgICByZXF1ZXN0OiByLFxuICAgICAgICBkaXNwYXRjaGVyOiBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2IHx8IHJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPiAyOTkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVjZWl2ZWQgYW4gaW52YWxpZCBzdGF0dXMgY29kZSBvciB0aGUgcmVxdWVzdCBmYWlsZWQuJ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7IC8vIDIuXG4gICAgICAgICAgICAvLyAyLjFcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgICAgICAgIC8vIDIuMlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIC8vIDIuMi4xXG4gICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGZldGNoQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuXG4gICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICAvLyA1LjhcbiAgICAgIHJlc3BvbnNlUHJvbWlzZXMucHVzaChyZXNwb25zZVByb21pc2UucHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIGNvbnN0IHAgPSBQcm9taXNlLmFsbChyZXNwb25zZVByb21pc2VzKVxuXG4gICAgLy8gNy5cbiAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBwXG5cbiAgICAvLyA3LjFcbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDcuMlxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIC8vIDcuM1xuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA3LjMuMVxuICAgICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgICB0eXBlOiAncHV0JywgLy8gNy4zLjJcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdExpc3RbaW5kZXhdLCAvLyA3LjMuM1xuICAgICAgICByZXNwb25zZSAvLyA3LjMuNFxuICAgICAgfVxuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKSAvLyA3LjMuNVxuXG4gICAgICBpbmRleCsrIC8vIDcuMy42XG4gICAgfVxuXG4gICAgLy8gNy41XG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDcuNi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDcuNi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDcuNi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNy42LjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA3LjYuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA3LjdcbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIHB1dCAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnQ2FjaGUucHV0JyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgcmVzcG9uc2UgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZShyZXNwb25zZSlcblxuICAgIC8vIDEuXG4gICAgbGV0IGlubmVyUmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpbm5lclJlcXVlc3QgPSByZXF1ZXN0W2tTdGF0ZV1cbiAgICB9IGVsc2UgeyAvLyAzLlxuICAgICAgaW5uZXJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShpbm5lclJlcXVlc3QudXJsKSB8fCBpbm5lclJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgYW4gaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VUJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIGNvbnN0IGlubmVyUmVzcG9uc2UgPSByZXNwb25zZVtrU3RhdGVdXG5cbiAgICAvLyA2LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdHb3QgKiB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgJiYgKGlzRGlzdHVyYmVkKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pIHx8IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0ubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzcG9uc2UgYm9keSBpcyBsb2NrZWQgb3IgZGlzdHVyYmVkJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA5LlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZShpbm5lclJlc3BvbnNlKVxuXG4gICAgLy8gMTAuXG4gICAgY29uc3QgYm9keVJlYWRQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDExLlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMTEuMVxuICAgICAgY29uc3Qgc3RyZWFtID0gaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbVxuXG4gICAgICAvLyAxMS4yXG4gICAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAgICAgLy8gMTEuM1xuICAgICAgcmVhZEFsbEJ5dGVzKHJlYWRlcikudGhlbihib2R5UmVhZFByb21pc2UucmVzb2x2ZSwgYm9keVJlYWRQcm9taXNlLnJlamVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keVJlYWRQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8vIDEyLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gMTMuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdwdXQnLCAvLyAxNC5cbiAgICAgIHJlcXVlc3Q6IGlubmVyUmVxdWVzdCwgLy8gMTUuXG4gICAgICByZXNwb25zZTogY2xvbmVkUmVzcG9uc2UgLy8gMTYuXG4gICAgfVxuXG4gICAgLy8gMTcuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIC8vIDE5LlxuICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgYm9keVJlYWRQcm9taXNlLnByb21pc2VcblxuICAgIGlmIChjbG9uZWRSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIGNsb25lZFJlc3BvbnNlLmJvZHkuc291cmNlID0gYnl0ZXNcbiAgICB9XG5cbiAgICAvLyAxOS4xXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDE5LjIuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyAxOS4yLjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gMTkuMi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gMTkuMi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfSBlbHNlIHsgLy8gMTkuMi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuZGVsZXRlJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3JlYWRvbmx5IFJlcXVlc3RbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAyLjFcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHsgLy8gMi4yXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICAvLyA1LjIuMS4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIC8vIDUuMy4yLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNS40LjFcbiAgICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgICAgLy8gNS40LjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoJ2h0dHBzOi8vYScpXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHJlcXVlc3QuY2xpZW50XG5cbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1hdGNoQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHV0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbmNvbnN0IGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzID0gW1xuICB7XG4gICAga2V5OiAnaWdub3JlU2VhcmNoJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlTWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlVmFyeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzKVxuXG53ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5jYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyxcbiAge1xuICAgIGtleTogJ2NhY2hlTmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFJlc3BvbnNlKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgaWYgKG9wdGlvbnMuY2FjaGVOYW1lICE9IG51bGwpIHtcbiAgICAgIC8vIDEuMS4xLjFcbiAgICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKG9wdGlvbnMuY2FjaGVOYW1lKSkge1xuICAgICAgICAvLyAxLjEuMS4xLjFcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gdGhpcy4jY2FjaGVzLmdldChvcHRpb25zLmNhY2hlTmFtZSlcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDIuXG4gICAgICAvLyAyLjJcbiAgICAgIGZvciAoY29uc3QgY2FjaGVMaXN0IG9mIHRoaXMuI2NhY2hlcy52YWx1ZXMoKSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgLy8gMi4yLjEuMlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWhhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5oYXMnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2Uub3BlbicgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5kZWxldGUnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5kZWxldGUoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2Uta2V5c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBhc3luYyBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICAvLyAyLjFcbiAgICBjb25zdCBrZXlzID0gdGhpcy4jY2FjaGVzLmtleXMoKVxuXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIFsuLi5rZXlzXVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlU3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlU3RvcmFnZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlU3RvcmFnZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gMHgwMCB8fCBjb2RlIDw9IDB4MDgpIHx8XG4gICAgICAoY29kZSA+PSAweDBBIHx8IGNvZGUgPD0gMHgxRikgfHxcbiAgICAgIGNvZGUgPT09IDB4N0ZcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBDSEFSICAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY2hhcmFjdGVyIChvY3RldHMgMCAtIDEyNyk+XG4gdG9rZW4gICAgICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTmFtZSAobmFtZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbmFtZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlIDw9IDB4MjAgfHwgY29kZSA+IDB4N0YpIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfSdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbmFtZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIGNvb2tpZS12YWx1ZSAgICAgID0gKmNvb2tpZS1vY3RldCAvICggRFFVT1RFICpjb29raWUtb2N0ZXQgRFFVT1RFIClcbiBjb29raWUtb2N0ZXQgICAgICA9ICV4MjEgLyAleDIzLTJCIC8gJXgyRC0zQSAvICV4M0MtNUIgLyAleDVELTdFXG4gICAgICAgICAgICAgICAgICAgICAgIDsgVVMtQVNDSUkgY2hhcmFjdGVycyBleGNsdWRpbmcgQ1RMcyxcbiAgICAgICAgICAgICAgICAgICAgICAgOyB3aGl0ZXNwYWNlIERRVU9URSwgY29tbWEsIHNlbWljb2xvbixcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgYmFja3NsYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVWYWx1ZSAodmFsdWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA9PT0gMHgyMiB8fFxuICAgICAgY29kZSA9PT0gMHgyQyB8fFxuICAgICAgY29kZSA9PT0gMHgzQiB8fFxuICAgICAgY29kZSA9PT0gMHg1QyB8fFxuICAgICAgY29kZSA+IDB4N0UgLy8gbm9uLWFzY2lpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgcGF0aCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChjb2RlIDwgMHgyMSB8fCBjaGFyID09PSAnOycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoZXNlIHZhbHVlcyBhcmVuJ3QgYWxsb3dlZCB0byBiZSBob25lc3QsXG4gKiBidXQgRGVubyB0ZXN0cyB0aGVzZS4gLSBLaGFmcmFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVEb21haW4gKGRvbWFpbikge1xuICBpZiAoXG4gICAgZG9tYWluLnN0YXJ0c1dpdGgoJy0nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLicpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCctJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTcuMS4xLjFcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGRhdGVcbiAgSU1GLWZpeGRhdGUgID0gZGF5LW5hbWUgXCIsXCIgU1AgZGF0ZTEgU1AgdGltZS1vZi1kYXkgU1AgR01UXG4gIDsgZml4ZWQgbGVuZ3RoL3pvbmUvY2FwaXRhbGl6YXRpb24gc3Vic2V0IG9mIHRoZSBmb3JtYXRcbiAgOyBzZWUgU2VjdGlvbiAzLjMgb2YgW1JGQzUzMjJdXG5cbiAgZGF5LW5hbWUgICAgID0gJXg0RC42Ri42RSA7IFwiTW9uXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC43NS42NSA7IFwiVHVlXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1Ny42NS42NCA7IFwiV2VkXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC42OC43NSA7IFwiVGh1XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni43Mi42OSA7IFwiRnJpXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42MS43NCA7IFwiU2F0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My43NS42RSA7IFwiU3VuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIGRhdGUxICAgICAgICA9IGRheSBTUCBtb250aCBTUCB5ZWFyXG4gICAgICAgICAgICAgICAgICA7IGUuZy4sIDAyIEp1biAxOTgyXG5cbiAgZGF5ICAgICAgICAgID0gMkRJR0lUXG4gIG1vbnRoICAgICAgICA9ICV4NEEuNjEuNkUgOyBcIkphblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNjUuNjIgOyBcIkZlYlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzIgOyBcIk1hclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzAuNzIgOyBcIkFwclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzkgOyBcIk1heVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkUgOyBcIkp1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkMgOyBcIkp1bFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzUuNjcgOyBcIkF1Z1wiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjUuNzAgOyBcIlNlcFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEYuNjMuNzQgOyBcIk9jdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEUuNkYuNzYgOyBcIk5vdlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDQuNjUuNjMgOyBcIkRlY1wiLCBjYXNlLXNlbnNpdGl2ZVxuICB5ZWFyICAgICAgICAgPSA0RElHSVRcblxuICBHTVQgICAgICAgICAgPSAleDQ3LjRELjU0IDsgXCJHTVRcIiwgY2FzZS1zZW5zaXRpdmVcblxuICB0aW1lLW9mLWRheSAgPSBob3VyIFwiOlwiIG1pbnV0ZSBcIjpcIiBzZWNvbmRcbiAgICAgICAgICAgICAgOyAwMDowMDowMCAtIDIzOjU5OjYwIChsZWFwIHNlY29uZClcblxuICBob3VyICAgICAgICAgPSAyRElHSVRcbiAgbWludXRlICAgICAgID0gMkRJR0lUXG4gIHNlY29uZCAgICAgICA9IDJESUdJVFxuICovXG5mdW5jdGlvbiB0b0lNRkRhdGUgKGRhdGUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuICB9XG5cbiAgY29uc3QgZGF5cyA9IFtcbiAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJyxcbiAgICAnVGh1JywgJ0ZyaScsICdTYXQnXG4gIF1cblxuICBjb25zdCBtb250aHMgPSBbXG4gICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgICAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXG4gIF1cblxuICBjb25zdCBkYXlOYW1lID0gZGF5c1tkYXRlLmdldFVUQ0RheSgpXVxuICBjb25zdCBkYXkgPSBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbW9udGggPSBtb250aHNbZGF0ZS5nZXRVVENNb250aCgpXVxuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gIGNvbnN0IGhvdXIgPSBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBzZWNvbmQgPSBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuICByZXR1cm4gYCR7ZGF5TmFtZX0sICR7ZGF5fSAke21vbnRofSAke3llYXJ9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfSBHTVRgXG59XG5cbi8qKlxuIG1heC1hZ2UtYXYgICAgICAgID0gXCJNYXgtQWdlPVwiIG5vbi16ZXJvLWRpZ2l0ICpESUdJVFxuICAgICAgICAgICAgICAgICAgICAgICA7IEluIHByYWN0aWNlLCBib3RoIGV4cGlyZXMtYXYgYW5kIG1heC1hZ2UtYXZcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhcmUgbGltaXRlZCB0byBkYXRlcyByZXByZXNlbnRhYmxlIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICA7IHVzZXIgYWdlbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4QWdlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTWF4QWdlIChtYXhBZ2UpIHtcbiAgaWYgKG1heEFnZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG1heC1hZ2UnKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjI2NSNzZWN0aW9uLTQuMS4xXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkNvb2tpZX0gY29va2llXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeSAoY29va2llKSB7XG4gIGlmIChjb29raWUubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFsaWRhdGVDb29raWVOYW1lKGNvb2tpZS5uYW1lKVxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGNvb2tpZS52YWx1ZSlcblxuICBjb25zdCBvdXQgPSBbYCR7Y29va2llLm5hbWV9PSR7Y29va2llLnZhbHVlfWBdXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4xXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMlxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19TZWN1cmUtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gICAgY29va2llLmRvbWFpbiA9IG51bGxcbiAgICBjb29raWUucGF0aCA9ICcvJ1xuICB9XG5cbiAgaWYgKGNvb2tpZS5zZWN1cmUpIHtcbiAgICBvdXQucHVzaCgnU2VjdXJlJylcbiAgfVxuXG4gIGlmIChjb29raWUuaHR0cE9ubHkpIHtcbiAgICBvdXQucHVzaCgnSHR0cE9ubHknKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb29raWUubWF4QWdlID09PSAnbnVtYmVyJykge1xuICAgIHZhbGlkYXRlQ29va2llTWF4QWdlKGNvb2tpZS5tYXhBZ2UpXG4gICAgb3V0LnB1c2goYE1heC1BZ2U9JHtjb29raWUubWF4QWdlfWApXG4gIH1cblxuICBpZiAoY29va2llLmRvbWFpbikge1xuICAgIHZhbGlkYXRlQ29va2llRG9tYWluKGNvb2tpZS5kb21haW4pXG4gICAgb3V0LnB1c2goYERvbWFpbj0ke2Nvb2tpZS5kb21haW59YClcbiAgfVxuXG4gIGlmIChjb29raWUucGF0aCkge1xuICAgIHZhbGlkYXRlQ29va2llUGF0aChjb29raWUucGF0aClcbiAgICBvdXQucHVzaChgUGF0aD0ke2Nvb2tpZS5wYXRofWApXG4gIH1cblxuICBpZiAoY29va2llLmV4cGlyZXMgJiYgY29va2llLmV4cGlyZXMudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICBvdXQucHVzaChgRXhwaXJlcz0ke3RvSU1GRGF0ZShjb29raWUuZXhwaXJlcyl9YClcbiAgfVxuXG4gIGlmIChjb29raWUuc2FtZVNpdGUpIHtcbiAgICBvdXQucHVzaChgU2FtZVNpdGU9JHtjb29raWUuc2FtZVNpdGV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBjb29raWUudW5wYXJzZWQpIHtcbiAgICBpZiAoIXBhcnQuaW5jbHVkZXMoJz0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVucGFyc2VkJylcbiAgICB9XG5cbiAgICBjb25zdCBba2V5LCAuLi52YWx1ZV0gPSBwYXJ0LnNwbGl0KCc9JylcblxuICAgIG91dC5wdXNoKGAke2tleS50cmltKCl9PSR7dmFsdWUuam9pbignPScpfWApXG4gIH1cblxuICByZXR1cm4gb3V0LmpvaW4oJzsgJylcbn1cblxubGV0IGtIZWFkZXJzTGlzdE5vZGVcblxuZnVuY3Rpb24gZ2V0SGVhZGVyc0xpc3QgKGhlYWRlcnMpIHtcbiAgaWYgKGhlYWRlcnNba0hlYWRlcnNMaXN0XSkge1xuICAgIHJldHVybiBoZWFkZXJzW2tIZWFkZXJzTGlzdF1cbiAgfVxuXG4gIGlmICgha0hlYWRlcnNMaXN0Tm9kZSkge1xuICAgIGtIZWFkZXJzTGlzdE5vZGUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGhlYWRlcnMpLmZpbmQoXG4gICAgICAoc3ltYm9sKSA9PiBzeW1ib2wuZGVzY3JpcHRpb24gPT09ICdoZWFkZXJzIGxpc3QnXG4gICAgKVxuXG4gICAgYXNzZXJ0KGtIZWFkZXJzTGlzdE5vZGUsICdIZWFkZXJzIGNhbm5vdCBiZSBwYXJzZWQnKVxuICB9XG5cbiAgY29uc3QgaGVhZGVyc0xpc3QgPSBoZWFkZXJzW2tIZWFkZXJzTGlzdE5vZGVdXG4gIGFzc2VydChoZWFkZXJzTGlzdClcblxuICByZXR1cm4gaGVhZGVyc0xpc3Rcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ1RMRXhjbHVkaW5nSHRhYixcbiAgc3RyaW5naWZ5LFxuICBnZXRIZWFkZXJzTGlzdFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhOYW1lVmFsdWVQYWlyU2l6ZSwgbWF4QXR0cmlidXRlVmFsdWVTaXplIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGlzQ1RMRXhjbHVkaW5nSHRhYiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIHRoZSBmaWVsZC12YWx1ZSBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXIgc3RyaW5nLlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKiBAcmV0dXJucyBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZFxuICovXG5mdW5jdGlvbiBwYXJzZVNldENvb2tpZSAoaGVhZGVyKSB7XG4gIC8vIDEuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4MDAtMDggLyAleDBBLTFGIC8gJXg3RlxuICAvLyAgICBjaGFyYWN0ZXIgKENUTCBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBIVEFCKTogQWJvcnQgdGhlc2Ugc3RlcHMgYW5kXG4gIC8vICAgIGlnbm9yZSB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChpc0NUTEV4Y2x1ZGluZ0h0YWIoaGVhZGVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgbmFtZVZhbHVlUGFpciA9ICcnXG4gIGxldCB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICBsZXQgbmFtZSA9ICcnXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMi4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGhlYWRlci5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sXG4gICAgLy8gICAgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIiksIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gICAgLy8gICAgKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgbmFtZVZhbHVlUGFpciA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KCc7JywgaGVhZGVyLCBwb3NpdGlvbilcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSBoZWFkZXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgY29udGFpbmVkIGluIHRoZSBzZXQtY29va2llLXN0cmluZywgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgbmFtZVZhbHVlUGFpciA9IGhlYWRlclxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgbGFja3MgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyLCB0aGVuXG4gIC8vICAgIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSwgYW5kIHRoZSB2YWx1ZSBzdHJpbmcgaXMgdGhlIHZhbHVlIG9mXG4gIC8vICAgIG5hbWUtdmFsdWUtcGFpci5cbiAgaWYgKCFuYW1lVmFsdWVQYWlyLmluY2x1ZGVzKCc9JykpIHtcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXJcbiAgfSBlbHNlIHtcbiAgICAvLyAgICBPdGhlcndpc2UsIHRoZSBuYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5XG4gICAgLy8gICAgZW1wdHkpIHZhbHVlIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3RcbiAgICAvLyAgICAleDNEIChcIj1cIikgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gICAgbmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgbmFtZVZhbHVlUGFpcixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH1cblxuICAvLyA0LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgbmFtZVxuICAvLyAgICBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmcuXG4gIG5hbWUgPSBuYW1lLnRyaW0oKVxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gIC8vIDUuIElmIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIG5hbWUgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nXG4gIC8vICAgIGlzIG1vcmUgdGhhbiA0MDk2IG9jdGV0cywgYWJvcnQgdGhlc2Ugc3RlcHMgYW5kIGlnbm9yZSB0aGUgc2V0LVxuICAvLyAgICBjb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAobmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGggPiBtYXhOYW1lVmFsdWVQYWlyU2l6ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyA2LiBUaGUgY29va2llLW5hbWUgaXMgdGhlIG5hbWUgc3RyaW5nLCBhbmQgdGhlIGNvb2tpZS12YWx1ZSBpcyB0aGVcbiAgLy8gICAgdmFsdWUgc3RyaW5nLlxuICByZXR1cm4ge1xuICAgIG5hbWUsIHZhbHVlLCAuLi5wYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXJcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IHVucGFyc2VkQXR0cmlidXRlc1xuICogQHBhcmFtIHtbT2JqZWN0LjxzdHJpbmcsIHVua25vd24+XT17fX0gY29va2llQXR0cmlidXRlTGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyAodW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0ID0ge30pIHtcbiAgLy8gMS4gSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mXG4gIC8vICAgIHRoZXNlIHN0ZXBzLlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb29raWVBdHRyaWJ1dGVMaXN0XG4gIH1cblxuICAvLyAyLiBEaXNjYXJkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgKHdoaWNoXG4gIC8vICAgIHdpbGwgYmUgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyKS5cbiAgYXNzZXJ0KHVucGFyc2VkQXR0cmlidXRlc1swXSA9PT0gJzsnKVxuICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoMSlcblxuICBsZXQgY29va2llQXYgPSAnJ1xuXG4gIC8vIDMuIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAvLyAgICBjaGFyYWN0ZXI6XG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgIGNvb2tpZUF2ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnOycsXG4gICAgICB1bnBhcnNlZEF0dHJpYnV0ZXMsXG4gICAgICB7IHBvc2l0aW9uOiAwIH1cbiAgICApXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKGNvb2tpZUF2Lmxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBDb25zdW1lIHRoZSByZW1haW5kZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMuXG4gICAgY29va2llQXYgPSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICB9XG5cbiAgLy8gTGV0IHRoZSBjb29raWUtYXYgc3RyaW5nIGJlIHRoZSBjaGFyYWN0ZXJzIGNvbnN1bWVkIGluIHRoaXMgc3RlcC5cblxuICBsZXQgYXR0cmlidXRlTmFtZSA9ICcnXG4gIGxldCBhdHRyaWJ1dGVWYWx1ZSA9ICcnXG5cbiAgLy8gNC4gSWYgdGhlIGNvb2tpZS1hdiBzdHJpbmcgY29udGFpbnMgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyOlxuICBpZiAoY29va2llQXYuaW5jbHVkZXMoJz0nKSkge1xuICAgIC8vIDEuIFRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGVcbiAgICAvLyAgICBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmdcbiAgICAvLyAgICBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBjb29raWVBdixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIGF0dHJpYnV0ZVZhbHVlID0gY29va2llQXYuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGVudGlyZSBjb29raWUtYXZcbiAgICAvLyAgICBzdHJpbmcsIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZyBpcyBlbXB0eS5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29va2llQXZcbiAgfVxuXG4gIC8vIDUuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBhdHRyaWJ1dGUtXG4gIC8vICAgIG5hbWUgc3RyaW5nIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZy5cbiAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudHJpbSgpXG4gIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG5cbiAgLy8gNi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBsb25nZXIgdGhhbiAxMDI0IG9jdGV0cywgaWdub3JlIHRoZVxuICAvLyAgICBjb29raWUtYXYgc3RyaW5nIGFuZCByZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID4gbWF4QXR0cmlidXRlVmFsdWVTaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgfVxuXG4gIC8vIDcuIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZVxuICAvLyAgICByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gIChOb3RpY2UgdGhhdFxuICAvLyAgICBhdHRyaWJ1dGVzIHdpdGggdW5yZWNvZ25pemVkIGF0dHJpYnV0ZS1uYW1lcyBhcmUgaWdub3JlZC4pXG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjFcbiAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgLy8gXCJFeHBpcmVzXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG4gIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZXhwaXJlcycpIHtcbiAgICAvLyAxLiBMZXQgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYXR0cmlidXRlLXZhbHVlXG4gICAgLy8gICAgYXMgY29va2llLWRhdGUgKHNlZSBTZWN0aW9uIDUuMS4xKS5cbiAgICBjb25zdCBleHBpcnlUaW1lID0gbmV3IERhdGUoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyAyLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGZhaWxlZCB0byBwYXJzZSBhcyBhIGNvb2tpZSBkYXRlLCBpZ25vcmVcbiAgICAvLyAgICB0aGUgY29va2llLWF2LlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5leHBpcmVzID0gZXhwaXJ5VGltZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdtYXgtYWdlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiTWF4LVxuICAgIC8vIEFnZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGFcbiAgICAvLyAgICBcIi1cIiBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGNvbnN0IGNoYXJDb2RlID0gYXR0cmlidXRlVmFsdWUuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpICYmIGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYSBub24tRElHSVRcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGlmICghL15cXGQrJC8udGVzdChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlbHRhLXNlY29uZHMgYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBOdW1iZXIoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyA0LiBMZXQgY29va2llLWFnZS1saW1pdCBiZSB0aGUgbWF4aW11bSBhZ2Ugb2YgdGhlIGNvb2tpZSAod2hpY2hcbiAgICAvLyAgICBTSE9VTEQgYmUgNDAwIGRheXMgb3IgbGVzcywgc2VlIFNlY3Rpb24gNC4xLjIuMikuXG5cbiAgICAvLyA1LiBTZXQgZGVsdGEtc2Vjb25kcyB0byB0aGUgc21hbGxlciBvZiBpdHMgcHJlc2VudCB2YWx1ZSBhbmQgY29va2llLVxuICAgIC8vICAgIGFnZS1saW1pdC5cbiAgICAvLyBkZWx0YVNlY29uZHMgPSBNYXRoLm1pbihkZWx0YVNlY29uZHMgKiAxMDAwLCBtYXhFeHBpcmVzTXMpXG5cbiAgICAvLyA2LiBJZiBkZWx0YS1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvICgwKSwgbGV0IGV4cGlyeS1cbiAgICAvLyAgICB0aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuICBPdGhlcndpc2UsIGxldFxuICAgIC8vICAgIHRoZSBleHBpcnktdGltZSBiZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHBsdXMgZGVsdGEtc2Vjb25kc1xuICAgIC8vICAgIHNlY29uZHMuXG4gICAgLy8gY29uc3QgZXhwaXJ5VGltZSA9IGRlbHRhU2Vjb25kcyA8PSAwID8gRGF0ZS5ub3coKSA6IERhdGUubm93KCkgKyBkZWx0YVNlY29uZHNcblxuICAgIC8vIDcuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgTWF4LUFnZSBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGV4cGlyeS10aW1lLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QubWF4QWdlID0gZGVsdGFTZWNvbmRzXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjNcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIkRvbWFpblwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBMZXQgY29va2llLWRvbWFpbiBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgIGxldCBjb29raWVEb21haW4gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gMi4gSWYgY29va2llLWRvbWFpbiBzdGFydHMgd2l0aCAleDJFIChcIi5cIiksIGxldCBjb29raWUtZG9tYWluIGJlXG4gICAgLy8gICAgY29va2llLWRvbWFpbiB3aXRob3V0IGl0cyBsZWFkaW5nICV4MkUgKFwiLlwiKS5cbiAgICBpZiAoY29va2llRG9tYWluWzBdID09PSAnLicpIHtcbiAgICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi5zbGljZSgxKVxuICAgIH1cblxuICAgIC8vIDMuIENvbnZlcnQgdGhlIGNvb2tpZS1kb21haW4gdG8gbG93ZXIgY2FzZS5cbiAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNC4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBEb21haW4gYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtZG9tYWluLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZG9tYWluID0gY29va2llRG9tYWluXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3BhdGgnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC40XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJQYXRoXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAvLyAgICBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICBsZXQgY29va2llUGF0aCA9ICcnXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA9PT0gMCB8fCBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy8nKSB7XG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgIGNvb2tpZVBhdGggPSAnLydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICAgIGNvb2tpZVBhdGggPSBhdHRyaWJ1dGVWYWx1ZVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgUGF0aCBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QucGF0aCA9IGNvb2tpZVBhdGhcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2VjdXJlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNVxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3RcbiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zZWN1cmUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2h0dHBvbmx5Jykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJIdHRwT25seVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1cbiAgICAvLyBhdHRyaWJ1dGUtbGlzdCB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIEh0dHBPbmx5IGFuZCBhbiBlbXB0eVxuICAgIC8vIGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuaHR0cE9ubHkgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NhbWVzaXRlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuN1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJTYW1lU2l0ZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzOlxuXG4gICAgLy8gMS4gTGV0IGVuZm9yY2VtZW50IGJlIFwiRGVmYXVsdFwiLlxuICAgIGxldCBlbmZvcmNlbWVudCA9ICdEZWZhdWx0J1xuXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIk5vbmVcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTm9uZVwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdOb25lJ1xuICAgIH1cblxuICAgIC8vIDMuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJTdHJpY3RcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiU3RyaWN0XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdzdHJpY3QnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnU3RyaWN0J1xuICAgIH1cblxuICAgIC8vIDQuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJMYXhcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTGF4XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdsYXgnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTGF4J1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2ZcbiAgICAvLyAgICBlbmZvcmNlbWVudC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gZW5mb3JjZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkID8/PSBbXVxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZC5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7YXR0cmlidXRlVmFsdWV9YClcbiAgfVxuXG4gIC8vIDguIFJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNldENvb2tpZSxcbiAgcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnksIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnZGVsZXRlQ29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSlcbiAgYXR0cmlidXRlcyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlcylcblxuICAvLyBNYXRjaGVzIGJlaGF2aW9yIG9mXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vX3N0ZC9ibG9iLzYzODI3YjE2MzMwYjgyNDg5YTA0NjE0MDI3YzMzYjc5MDRlMDhiZTUvaHR0cC9jb29raWUudHMjTDI3OFxuICBzZXRDb29raWUoaGVhZGVycywge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6ICcnLFxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKDApLFxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtDb29raWVbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0U2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWVzID0gZ2V0SGVhZGVyc0xpc3QoaGVhZGVycykuY29va2llc1xuXG4gIGlmICghY29va2llcykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgLy8gSW4gb2xkZXIgdmVyc2lvbnMgb2YgdW5kaWNpLCBjb29raWVzIGlzIGEgbGlzdCBvZiBuYW1lOnZhbHVlLlxuICByZXR1cm4gY29va2llcy5tYXAoKHBhaXIpID0+IHBhcnNlU2V0Q29va2llKEFycmF5LmlzQXJyYXkocGFpcikgPyBwYWlyWzFdIDogcGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ3NldENvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyaW5naWZ5KGNvb2tpZSkpXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZSA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ25hbWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICd2YWx1ZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKVxuICAgIH0pLFxuICAgIGtleTogJ2V4cGlyZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddKSxcbiAgICBrZXk6ICdtYXhBZ2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ3NlY3VyZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdodHRwT25seScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBrZXk6ICdzYW1lU2l0ZScsXG4gICAgYWxsb3dlZFZhbHVlczogWydTdHJpY3QnLCAnTGF4JywgJ05vbmUnXVxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICd1bnBhcnNlZCcsXG4gICAgZGVmYXVsdFZhbHVlOiBbXVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRoaXMgaXMgYSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllciB1bmlxdWUgdXNlZFxuLy8gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZW5kcG9pbnQgYWNjZXB0cyB3ZWJzb2NrZXRcbi8vIGNvbm5lY3Rpb25zLlxuLy8gU2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi0xLjNcbmNvbnN0IHVpZCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEnXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgQ09OTkVDVElORzogMCxcbiAgT1BFTjogMSxcbiAgQ0xPU0lORzogMixcbiAgQ0xPU0VEOiAzXG59XG5cbmNvbnN0IG9wY29kZXMgPSB7XG4gIENPTlRJTlVBVElPTjogMHgwLFxuICBURVhUOiAweDEsXG4gIEJJTkFSWTogMHgyLFxuICBDTE9TRTogMHg4LFxuICBQSU5HOiAweDksXG4gIFBPTkc6IDB4QVxufVxuXG5jb25zdCBtYXhVbnNpZ25lZDE2Qml0ID0gMiAqKiAxNiAtIDEgLy8gNjU1MzVcblxuY29uc3QgcGFyc2VyU3RhdGVzID0ge1xuICBJTkZPOiAwLFxuICBQQVlMT0FETEVOR1RIXzE2OiAyLFxuICBQQVlMT0FETEVOR1RIXzY0OiAzLFxuICBSRUFEX0RBVEE6IDRcbn1cblxuY29uc3QgZW1wdHlCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVpZCxcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgc3RhdGVzLFxuICBvcGNvZGVzLFxuICBtYXhVbnNpZ25lZDE2Qml0LFxuICBwYXJzZXJTdGF0ZXMsXG4gIGVtcHR5QnVmZmVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBNZXNzYWdlUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50JyB9KVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtDb250cm9sbGVyLCBrUmVzcG9uc2UsIGtCaW5hcnlUeXBlLCBrV2ViU29ja2V0VVJMIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBzdGF0ZXMsIG9wY29kZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgTWVzc2FnZUV2ZW50LCBFcnJvckV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5cbi8qIGdsb2JhbHMgQmxvYiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNFc3RhYmxpc2hlZCAod3MpIHtcbiAgLy8gSWYgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBhcyBwcm92aWRlZCBmb3IgYWJvdmUsIGl0IGlzXG4gIC8vIHNhaWQgdGhhdCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIEVzdGFibGlzaGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgaW4gdGhlIE9QRU4gc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5PUEVOXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2VkICh3cykge1xuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0VEXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGVcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50Q29uc3RydWN0b3IgPSBFdmVudCwgZXZlbnRJbml0RGljdCkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW504oCZcyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IG5ldyBldmVudENvbnN0cnVjdG9yKGUsIGV2ZW50SW5pdERpY3QpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUoZGF0YSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgaW52YWxpZCBVVEYtOCBpbiB0ZXh0IGZyYW1lLicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5CSU5BUlkpIHtcbiAgICBpZiAod3Nba0JpbmFyeVR5cGVdID09PSAnYmxvYicpIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImJsb2JcIlxuICAgICAgLy8gICAgICBhIG5ldyBCbG9iIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgICBvYmplY3QsIHRoYXQgcmVwcmVzZW50cyBkYXRhIGFzIGl0cyByYXcgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IEJsb2IoW2RhdGFdKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJhcnJheWJ1ZmZlclwiXG4gICAgICAvLyAgICAgIGEgbmV3IEFycmF5QnVmZmVyIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlXG4gICAgICAvLyAgICAgIFdlYlNvY2tldCBvYmplY3QsIHdob3NlIGNvbnRlbnRzIGFyZSBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVWludDhBcnJheShkYXRhKS5idWZmZXJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIG1lc3NhZ2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsIHVzaW5nIE1lc3NhZ2VFdmVudCxcbiAgLy8gICAgd2l0aCB0aGUgb3JpZ2luIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgV2ViU29ja2V0XG4gIC8vICAgIG9iamVjdOKAmXMgdXJsJ3Mgb3JpZ2luLCBhbmQgdGhlIGRhdGEgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGRhdGFGb3JFdmVudC5cbiAgZmlyZUV2ZW50KCdtZXNzYWdlJywgd3MsIE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHByb3RvY29sKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHxcbiAgICAgIGNvZGUgPiAweDdFIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfScgfHxcbiAgICAgIGNvZGUgPT09IDMyIHx8IC8vIFNQXG4gICAgICBjb2RlID09PSA5IC8vIEhUXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy00XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3RhdHVzQ29kZSAoY29kZSkge1xuICBpZiAoY29kZSA+PSAxMDAwICYmIGNvZGUgPCAxMDE1KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvZGUgIT09IDEwMDQgJiYgLy8gcmVzZXJ2ZWRcbiAgICAgIGNvZGUgIT09IDEwMDUgJiYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgICBjb2RlICE9PSAxMDA2IC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb2RlID49IDMwMDAgJiYgY29kZSA8PSA0OTk5XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAqL1xuZnVuY3Rpb24gZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gKHdzLCByZWFzb24pIHtcbiAgY29uc3QgeyBba0NvbnRyb2xsZXJdOiBjb250cm9sbGVyLCBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgY29udHJvbGxlci5hYm9ydCgpXG5cbiAgaWYgKHJlc3BvbnNlPy5zb2NrZXQgJiYgIXJlc3BvbnNlLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICByZXNwb25zZS5zb2NrZXQuZGVzdHJveSgpXG4gIH1cblxuICBpZiAocmVhc29uKSB7XG4gICAgZmlyZUV2ZW50KCdlcnJvcicsIHdzLCBFcnJvckV2ZW50LCB7XG4gICAgICBlcnJvcjogbmV3IEVycm9yKHJlYXNvbilcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0VzdGFibGlzaGVkLFxuICBpc0Nsb3NpbmcsXG4gIGlzQ2xvc2VkLFxuICBmaXJlRXZlbnQsXG4gIGlzVmFsaWRTdWJwcm90b2NvbCxcbiAgaXNWYWxpZFN0YXR1c0NvZGUsXG4gIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLFxuICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyB1aWQsIHN0YXRlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrUmVhZHlTdGF0ZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXIsXG4gIGtSZWNlaXZlZENsb3NlXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgZmlyZUV2ZW50LCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLm9wZW4gPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJylcbmNoYW5uZWxzLmNsb3NlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKVxuY2hhbm5lbHMuc29ja2V0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtd2Vic29ja2V0LWVzdGFibGlzaFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHsocmVzcG9uc2U6IGFueSkgPT4gdm9pZH0gb25Fc3RhYmxpc2hcbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYnNvY2tldCcpLldlYlNvY2tldEluaXQ+fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gKHVybCwgcHJvdG9jb2xzLCB3cywgb25Fc3RhYmxpc2gsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3RVUkwgYmUgYSBjb3B5IG9mIHVybCwgd2l0aCBpdHMgc2NoZW1lIHNldCB0byBcImh0dHBcIiwgaWYgdXJs4oCZc1xuICAvLyAgICBzY2hlbWUgaXMgXCJ3c1wiLCBhbmQgdG8gXCJodHRwc1wiIG90aGVyd2lzZS5cbiAgY29uc3QgcmVxdWVzdFVSTCA9IHVybFxuXG4gIHJlcXVlc3RVUkwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09ICd3czonID8gJ2h0dHA6JyA6ICdodHRwczonXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgYSBuZXcgcmVxdWVzdCwgd2hvc2UgVVJMIGlzIHJlcXVlc3RVUkwsIGNsaWVudCBpcyBjbGllbnQsXG4gIC8vICAgIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwibm9uZVwiLCByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIG1vZGUgaXNcbiAgLy8gICAgXCJ3ZWJzb2NrZXRcIiwgY3JlZGVudGlhbHMgbW9kZSBpcyBcImluY2x1ZGVcIiwgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgLFxuICAvLyAgICBhbmQgcmVkaXJlY3QgbW9kZSBpcyBcImVycm9yXCIuXG4gIGNvbnN0IHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgdXJsTGlzdDogW3JlcXVlc3RVUkxdLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnbm9uZScsXG4gICAgcmVmZXJyZXI6ICduby1yZWZlcnJlcicsXG4gICAgbW9kZTogJ3dlYnNvY2tldCcsXG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICByZWRpcmVjdDogJ2Vycm9yJ1xuICB9KVxuXG4gIC8vIE5vdGU6IHVuZGljaSBleHRlbnNpb24sIGFsbG93IHNldHRpbmcgY3VzdG9tIGhlYWRlcnMuXG4gIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylba0hlYWRlcnNMaXN0XVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdCA9IGhlYWRlcnNMaXN0XG4gIH1cblxuICAvLyAzLiBBcHBlbmQgKGBVcGdyYWRlYCwgYHdlYnNvY2tldGApIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyA0LiBBcHBlbmQgKGBDb25uZWN0aW9uYCwgYFVwZ3JhZGVgKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgLy8gTm90ZTogYm90aCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBieSB1bmRpY2kgY3VycmVudGx5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iLzY4YzI2OWM0MTQ0YzQ0NmYzZjEyMjA5NTEzMzhkYWVmNGE2YjVlYzQvbGliL2NsaWVudC5qcyNMMTM5N1xuXG4gIC8vIDUuIExldCBrZXlWYWx1ZSBiZSBhIG5vbmNlIGNvbnNpc3Rpbmcgb2YgYSByYW5kb21seSBzZWxlY3RlZFxuICAvLyAgICAxNi1ieXRlIHZhbHVlIHRoYXQgaGFzIGJlZW4gZm9yZ2l2aW5nLWJhc2U2NC1lbmNvZGVkIGFuZFxuICAvLyAgICBpc29tb3JwaGljIGVuY29kZWQuXG4gIGNvbnN0IGtleVZhbHVlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0JylcblxuICAvLyA2LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUtleWAsIGtleVZhbHVlKSB0byByZXF1ZXN04oCZc1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQta2V5Jywga2V5VmFsdWUpXG5cbiAgLy8gNy4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1WZXJzaW9uYCwgYDEzYCkgdG8gcmVxdWVzdOKAmXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXZlcnNpb24nLCAnMTMnKVxuXG4gIC8vIDguIEZvciBlYWNoIHByb3RvY29sIGluIHByb3RvY29scywgY29tYmluZVxuICAvLyAgICAoYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgLCBwcm90b2NvbCkgaW4gcmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnLCBwcm90b2NvbClcbiAgfVxuXG4gIC8vIDkuIExldCBwZXJtZXNzYWdlRGVmbGF0ZSBiZSBhIHVzZXItYWdlbnQgZGVmaW5lZFxuICAvLyAgICBcInBlcm1lc3NhZ2UtZGVmbGF0ZVwiIGV4dGVuc2lvbiBoZWFkZXIgdmFsdWUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iL2NlNzgyMzRmNWU2NTNhNWQzOTE2ODEzZmY5OTBmMDUzNTEwMjI3YmMvbmV0d2Vyay9wcm90b2NvbC93ZWJzb2NrZXQvV2ViU29ja2V0Q2hhbm5lbC5jcHAjTDI2NzNcbiAgLy8gVE9ETzogZW5hYmxlIG9uY2UgcGVybWVzc2FnZS1kZWZsYXRlIGlzIHN1cHBvcnRlZFxuICBjb25zdCBwZXJtZXNzYWdlRGVmbGF0ZSA9ICcnIC8vICdwZXJtZXNzYWdlLWRlZmxhdGU7IDE1J1xuXG4gIC8vIDEwLiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnNgLCBwZXJtZXNzYWdlRGVmbGF0ZSkgdG9cbiAgLy8gICAgIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJywgcGVybWVzc2FnZURlZmxhdGUpXG5cbiAgLy8gMTEuIEZldGNoIHJlcXVlc3Qgd2l0aCB1c2VQYXJhbGxlbFF1ZXVlIHNldCB0byB0cnVlLCBhbmRcbiAgLy8gICAgIHByb2Nlc3NSZXNwb25zZSBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdGVwczpcbiAgY29uc3QgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHVzZVBhcmFsbGVsUXVldWU6IHRydWUsXG4gICAgZGlzcGF0Y2hlcjogb3B0aW9ucy5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2XigJlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcblxuICAgICAgaWYgKHNlY0V4dGVuc2lvbiAhPT0gbnVsbCAmJiBzZWNFeHRlbnNpb24gIT09IHBlcm1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgZGlmZmVyZW50IHBlcm1lc3NhZ2UtZGVmbGF0ZSB0aGFuIHRoZSBvbmUgc2V0LicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsICYmIHNlY1Byb3RvY29sICE9PSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUHJvdG9jb2wgd2FzIG5vdCBzZXQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXREYXRhIChjaHVuaykge1xuICBpZiAoIXRoaXMud3Nba0J5dGVQYXJzZXJdLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNFxuICovXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIC8vIElmIHRoZSBUQ1AgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGFmdGVyIHRoZVxuICAvLyBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gIC8vIGlzIHNhaWQgdG8gaGF2ZSBiZWVuIGNsb3NlZCBfY2xlYW5seV8uXG4gIGNvbnN0IHdhc0NsZWFuID0gd3Nba1NlbnRDbG9zZV0gJiYgd3Nba1JlY2VpdmVkQ2xvc2VdXG5cbiAgbGV0IGNvZGUgPSAxMDA1XG4gIGxldCByZWFzb24gPSAnJ1xuXG4gIGNvbnN0IHJlc3VsdCA9IHdzW2tCeXRlUGFyc2VyXS5jbG9zaW5nSW5mb1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1NlbnRDbG9zZV0pIHtcbiAgICAvLyBJZiBfVGhlIFdlYlNvY2tldFxuICAgIC8vIENvbm5lY3Rpb24gaXMgQ2xvc2VkXyBhbmQgbm8gQ2xvc2UgY29udHJvbCBmcmFtZSB3YXMgcmVjZWl2ZWQgYnkgdGhlXG4gICAgLy8gZW5kcG9pbnQgKHN1Y2ggYXMgY291bGQgb2NjdXIgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25cbiAgICAvLyBpcyBsb3N0KSwgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpcyBjb25zaWRlcmVkIHRvIGJlXG4gICAgLy8gMTAwNi5cbiAgICBjb2RlID0gMTAwNlxuICB9XG5cbiAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBDTE9TRUQgKDMpLlxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0VEXG5cbiAgLy8gMi4gSWYgdGhlIHVzZXIgYWdlbnQgd2FzIHJlcXVpcmVkIHRvIGZhaWwgdGhlIFdlYlNvY2tldFxuICAvLyAgICBjb25uZWN0aW9uLCBvciBpZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzIGNsb3NlZFxuICAvLyAgICBhZnRlciBiZWluZyBmbGFnZ2VkIGFzIGZ1bGwsIGZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3JcbiAgLy8gICAgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gIC8vIFRPRE9cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGNsb3NlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LFxuICAvLyAgICB1c2luZyBDbG9zZUV2ZW50LCB3aXRoIHRoZSB3YXNDbGVhbiBhdHRyaWJ1dGVcbiAgLy8gICAgaW5pdGlhbGl6ZWQgdG8gdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgY2xlYW5seVxuICAvLyAgICBhbmQgZmFsc2Ugb3RoZXJ3aXNlLCB0aGUgY29kZSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG9cbiAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlIGNvZGUsIGFuZCB0aGUgcmVhc29uXG4gIC8vICAgIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFVURi04XG4gIC8vICAgIGRlY29kZSB3aXRob3V0IEJPTSB0byB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VcbiAgLy8gICAgcmVhc29uLlxuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsIENsb3NlRXZlbnQsIHtcbiAgICB3YXNDbGVhbiwgY29kZSwgcmVhc29uXG4gIH0pXG5cbiAgaWYgKGNoYW5uZWxzLmNsb3NlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuY2xvc2UucHVibGlzaCh7XG4gICAgICB3ZWJzb2NrZXQ6IHdzLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyb3IpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG5cbiAgaWYgKGNoYW5uZWxzLnNvY2tldEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc29ja2V0RXJyb3IucHVibGlzaChlcnJvcilcbiAgfVxuXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heFVuc2lnbmVkMTZCaXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gICAgdGhpcy5tYXNrS2V5ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgYm9keUxlbmd0aCA9IHRoaXMuZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gdGhpcy5tYXNrS2V5WzBdXG4gICAgYnVmZmVyW29mZnNldCAtIDNdID0gdGhpcy5tYXNrS2V5WzFdXG4gICAgYnVmZmVyW29mZnNldCAtIDJdID0gdGhpcy5tYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gdGhpcy5tYXNrS2V5WzNdXG5cbiAgICBidWZmZXJbMV0gPSBwYXlsb2FkTGVuZ3RoXG5cbiAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZCRShib2R5TGVuZ3RoLCAyKVxuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAvLyBDbGVhciBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aFxuICAgICAgYnVmZmVyWzJdID0gYnVmZmVyWzNdID0gMFxuICAgICAgYnVmZmVyLndyaXRlVUludEJFKGJvZHlMZW5ndGgsIDQsIDYpXG4gICAgfVxuXG4gICAgYnVmZmVyWzFdIHw9IDB4ODAgLy8gTUFTS1xuXG4gICAgLy8gbWFzayBib2R5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHRoaXMuZnJhbWVEYXRhW2ldIF4gdGhpcy5tYXNrS2V5W2kgJSA0XVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFdyaXRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHBhcnNlclN0YXRlcywgb3Bjb2Rlcywgc3RhdGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga1NlbnRDbG9zZSwga1Jlc3BvbnNlLCBrUmVjZWl2ZWRDbG9zZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNWYWxpZFN0YXR1c0NvZGUsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8vIFRoaXMgY29kZSB3YXMgaW5mbHVlbmNlZCBieSB3cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTEgRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXJub3V0IEthemVtaWVyIGFuZCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNiBMdWlnaSBQaW5jYSBhbmQgY29udHJpYnV0b3JzXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLnBpbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJylcbmNoYW5uZWxzLnBvbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcblxuY2xhc3MgQnl0ZVBhcnNlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgI2J1ZmZlcnMgPSBbXVxuICAjYnl0ZU9mZnNldCA9IDBcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgY29uc3RydWN0b3IgKHdzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy53cyA9IHdzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIF93cml0ZSAoY2h1bmssIF8sIGNhbGxiYWNrKSB7XG4gICAgdGhpcy4jYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIHRoaXMuI2J5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZW5ldmVyIGEgbmV3IGNodW5rIGlzIHJlY2VpdmVkLlxuICAgKiBDYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgYXJlIG5vIG1vcmUgY2h1bmtzIGJ1ZmZlcmluZyxcbiAgICogb3Igbm90IGVub3VnaCBieXRlcyBhcmUgYnVmZmVyZWQgdG8gcGFyc2UuXG4gICAqL1xuICBydW4gKGNhbGxiYWNrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLklORk8pIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlbid0IGVub3VnaCBieXRlcyB0byBwYXJzZSB0aGUgcGF5bG9hZCBsZW5ndGgsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8uZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID0gYnVmZmVyWzBdICYgMHgwRlxuXG4gICAgICAgIC8vIElmIHdlIHJlY2VpdmUgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIHdlIHVzZSB0aGUgdHlwZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gZnJhbWUgdG8gcGFyc2UgdGhlIGZ1bGwgbWVzc2FnZSBhcyBiaW5hcnkvdGV4dCwgd2hlbiBpdCdzIHRlcm1pbmF0ZWRcbiAgICAgICAgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSA/Pz0gdGhpcy4jaW5mby5vcGNvZGVcblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSAhdGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5CSU5BUlkgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuVEVYVCkge1xuICAgICAgICAgIC8vIE9ubHkgdGV4dCBhbmQgYmluYXJ5IGZyYW1lcyBjYW4gYmUgZnJhZ21lbnRlZFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdJbnZhbGlkIGZyYW1lIHR5cGUgd2FzIGZyYWdtZW50ZWQuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRMZW5ndGggPSBidWZmZXJbMV0gJiAweDdGXG5cbiAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPD0gMTI1KSB7XG4gICAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gcGF5bG9hZExlbmd0aFxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTZcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHBheWxvYWRMZW5ndGggPiAxMjUpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpICYmXG4gICAgICAgICAgcGF5bG9hZExlbmd0aCA+IDEyNVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBDb250cm9sIGZyYW1lcyBjYW4gaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBNQVhcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUGF5bG9hZCBsZW5ndGggZm9yIGNvbnRyb2wgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIGNsb3NlIGZyYW1lIHdpdGggYSAxLWJ5dGUgYm9keS4nKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jaW5mby5jbG9zZUluZm8gPSB0aGlzLnBhcnNlQ2xvc2VCb2R5KGZhbHNlLCBib2R5KVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tTZW50Q2xvc2VdKSB7XG4gICAgICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgICAgICAvLyBDbG9zZSBmcmFtZSwgdGhlIGVuZHBvaW50IE1VU1Qgc2VuZCBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLiAgKFdoZW5cbiAgICAgICAgICAgIC8vIHNlbmRpbmcgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZSwgdGhlIGVuZHBvaW50IHR5cGljYWxseSBlY2hvcyB0aGVcbiAgICAgICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICAgIGJvZHkud3JpdGVVSW50MTZCRSh0aGlzLiNpbmZvLmNsb3NlSW5mby5jb2RlLCAwKVxuICAgICAgICAgICAgY29uc3QgY2xvc2VGcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShcbiAgICAgICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgICAgIHRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5lbmQoKVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORykge1xuICAgICAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgICAgICAvLyByZXNwb25zZSwgdW5sZXNzIGl0IGFscmVhZHkgcmVjZWl2ZWQgYSBDbG9zZSBmcmFtZS5cbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgc2VudCBpbiByZXNwb25zZSB0byBhIFBpbmcgZnJhbWUgbXVzdCBoYXZlIGlkZW50aWNhbFxuICAgICAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgICAgICBpZiAoY2hhbm5lbHMucGluZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICBjaGFubmVscy5waW5nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HKSB7XG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgICAgIC8vIHVuaWRpcmVjdGlvbmFsIGhlYXJ0YmVhdC4gIEEgcmVzcG9uc2UgdG8gYW4gdW5zb2xpY2l0ZWQgUG9uZyBmcmFtZSBpc1xuICAgICAgICAgIC8vIG5vdCBleHBlY3RlZC5cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICBjaGFubmVscy5wb25nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG5cbiAgICAgICAgLy8gMl4zMSBpcyB0aGUgbWF4aW5pbXVtIGJ5dGVzIGFuIGFycmF5YnVmZmVyIGNhbiBjb250YWluXG4gICAgICAgIC8vIG9uIDMyLWJpdCBzeXN0ZW1zLiBBbHRob3VnaCwgb24gNjQtYml0IHN5c3RlbXMsIHRoaXMgaXNcbiAgICAgICAgLy8gMl41My0xIGJ5dGVzLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9FcnJvcnMvSW52YWxpZF9hcnJheV9sZW5ndGhcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL2NvbW1vbi9nbG9iYWxzLmg7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWU7YnB2PTE7YnB0PTE7bD0xMjc1XG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9vYmplY3RzL2pzLWFycmF5LWJ1ZmZlci5oO2w9MzQ7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWVcbiAgICAgICAgaWYgKHVwcGVyID4gMiAqKiAzMSAtIDEpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgcGF5bG9hZCBsZW5ndGggPiAyXjMxIGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNClcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSAodXBwZXIgPDwgOCkgKyBsb3dlclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5SRUFEX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBtb3JlIGRhdGEgaW4gdGhpcyBjaHVuayB0aGF0IG5lZWRzIHRvIGJlIHJlYWRcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPj0gdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNlcnZlciBzZW50IG11bHRpcGxlIGZyYW1lcyBpbiBhIHNpbmdsZSBjaHVua1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZSh0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNmcmFnbWVudHMucHVzaChib2R5KVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIHVuZnJhZ21lbnRlZCwgb3IgYSBmcmFnbWVudGVkIGZyYW1lIHdhcyB0ZXJtaW5hdGVkLFxuICAgICAgICAgIC8vIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWRcbiAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCB8fCAodGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OKSkge1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2ZyYWdtZW50cylcblxuICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUsIGZ1bGxNZXNzYWdlKVxuXG4gICAgICAgICAgICB0aGlzLiNpbmZvID0ge31cbiAgICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPSAwXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG4gYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgQnVmZmVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QnVmZmVyfG51bGx9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5QnVmZmVyXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoID09PSBuKSB7XG4gICAgICB0aGlzLiNieXRlT2Zmc2V0IC09IHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy4jYnVmZmVycy5zaGlmdCgpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHdoaWxlIChvZmZzZXQgIT09IG4pIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLiNidWZmZXJzWzBdXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbmV4dFxuXG4gICAgICBpZiAobGVuZ3RoICsgb2Zmc2V0ID09PSBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCArIG9mZnNldCA+IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldChuZXh0LnN1YmFycmF5KDAsIG4gLSBvZmZzZXQpLCBvZmZzZXQpXG4gICAgICAgIHRoaXMuI2J1ZmZlcnNbMF0gPSBuZXh0LnN1YmFycmF5KG4gLSBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBvZmZzZXQgKz0gbmV4dC5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNieXRlT2Zmc2V0IC09IG5cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHBhcnNlQ2xvc2VCb2R5IChvbmx5Q29kZSwgZGF0YSkge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS41XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICAgIGxldCBjb2RlXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPj0gMikge1xuICAgICAgLy8gX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpc1xuICAgICAgLy8gZGVmaW5lZCBhcyB0aGUgc3RhdHVzIGNvZGUgKFNlY3Rpb24gNy40KSBjb250YWluZWQgaW4gdGhlIGZpcnN0IENsb3NlXG4gICAgICAvLyBjb250cm9sIGZyYW1lIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICAgICAgY29kZSA9IGRhdGEucmVhZFVJbnQxNkJFKDApXG4gICAgfVxuXG4gICAgaWYgKG9ubHlDb2RlKSB7XG4gICAgICBpZiAoIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGNvZGUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzXG4gICAgICByZWFzb24gPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUocmVhc29uKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RlLCByZWFzb24gfVxuICB9XG5cbiAgZ2V0IGNsb3NpbmdJbmZvICgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5mby5jbG9zZUluZm9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQnl0ZVBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZ2xvYmFsJylcbmNvbnN0IHsgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycywgc3RhdGVzLCBvcGNvZGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNFc3RhYmxpc2hlZCwgaXNDbG9zaW5nLCBpc1ZhbGlkU3VicHJvdG9jb2wsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCBmaXJlRXZlbnQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZGVmaW5pdGlvblxuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgY2xvc2U6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI2J1ZmZlcmVkQW1vdW50ID0gMFxuICAjcHJvdG9jb2wgPSAnJ1xuICAjZXh0ZW5zaW9ucyA9ICcnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1dlYlNvY2tldHMgYXJlIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1XUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10ocHJvdG9jb2xzKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZOKAmXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmTigJlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmTigJlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3Jk4oCZcyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG5cbiAgICAvLyAxMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDpcblxuICAgIC8vICAgIDEuIEVzdGFibGlzaCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGdpdmVuIHVybFJlY29yZCwgcHJvdG9jb2xzLFxuICAgIC8vICAgICAgIGFuZCBjbGllbnQuXG4gICAgdGhpc1trQ29udHJvbGxlcl0gPSBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFxuICAgICAgdXJsUmVjb3JkLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgdGhpcyxcbiAgICAgIChyZXNwb25zZSkgPT4gdGhpcy4jb25Db25uZWN0aW9uRXN0YWJsaXNoZWQocmVzcG9uc2UpLFxuICAgICAgb3B0aW9uc1xuICAgIClcblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCByZWFkeSBzdGF0ZSwgd2hpY2ggaXMgYVxuICAgIC8vIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiBJbml0aWFsbHkgaXQgbXVzdFxuICAgIC8vIGJlIENPTk5FQ1RJTkcgKDApLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNPTk5FQ1RJTkdcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgeyBjbGFtcDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVhc29uID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHJlYXNvbilcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjb2RlIGlzIHByZXNlbnQsIGJ1dCBpcyBuZWl0aGVyIGFuIGludGVnZXIgZXF1YWwgdG8gMTAwMCBub3IgYW5cbiAgICAvLyAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAzMDAwIHRvIDQ5OTksIGluY2x1c2l2ZSwgdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRBY2Nlc3NFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29kZSAhPT0gMTAwMCAmJiAoY29kZSA8IDMwMDAgfHwgY29kZSA+IDQ5OTkpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ2ludmFsaWQgY29kZScsICdJbnZhbGlkQWNjZXNzRXJyb3InKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWFzb25CeXRlTGVuZ3RoID0gMFxuXG4gICAgLy8gMi4gSWYgcmVhc29uIGlzIHByZXNlbnQsIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlYXNvbkJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcgcmVhc29uLlxuICAgICAgLy8gMi4gSWYgcmVhc29uQnl0ZXMgaXMgbG9uZ2VyIHRoYW4gMTIzIGJ5dGVzLCB0aGVuIHRocm93IGFcbiAgICAgIC8vICAgIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICByZWFzb25CeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVhc29uKVxuXG4gICAgICBpZiAocmVhc29uQnl0ZUxlbmd0aCA+IDEyMykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICAgIGBSZWFzb24gbXVzdCBiZSBsZXNzIHRoYW4gMTIzIGJ5dGVzOyByZWNlaXZlZCAke3JlYXNvbkJ5dGVMZW5ndGh9YCxcbiAgICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSdW4gdGhlIGZpcnN0IG1hdGNoaW5nIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TRUQpIHtcbiAgICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkXG4gICAgICAvLyBGYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgc2V0IHRoaXMncyByZWFkeSBzdGF0ZVxuICAgICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLCAnQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBpdCB3YXMgZXN0YWJsaXNoZWQuJylcbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9IGVsc2UgaWYgKCFpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkXG4gICAgICAvLyBTdGFydCB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGFuZCBzZXQgdGhpcydzIHJlYWR5XG4gICAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIC8vIC0gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gICBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vICAgV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgLy8gLSBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuXG4gICAgICAvLyBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMiArIHJlYXNvbkJ5dGVMZW5ndGgpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZShyZWFzb24sIDIsICd1dGYtOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgICBzb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksIChlcnIpID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICB0aGlzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyBTZXQgdGhpcydzIHJlYWR5IHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldC5zZW5kJyB9KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIC8vIElmIGRhdGEgaXMgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnRcbiAgICAgIC8vIG11c3Qgc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiB0aGUgZGF0YSBhcmd1bWVudFxuICAgICAgLy8gdXNpbmcgYSB0ZXh0IGZyYW1lIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy5cbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZVxuICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlXG4gICAgICAvLyB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvXG4gICAgICAvLyBleHByZXNzIHRoZSBhcmd1bWVudCBhcyBVVEYtOC5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5URVhUKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YeKAmXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBhYiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYWIpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gYWIuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBhYi5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3TigJlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgZGF0YS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oYWIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IHZhbHVlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2XigJlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC5yZXN1bWUoKVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5zb2NrZXQud3MgPSB0aGlzXG4gICAgdGhpc1trQnl0ZVBhcnNlcl0gPSBwYXJzZXJcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZeKAmXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGXigJlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcHNhbCBtYWRlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvd2Vic29ja2V0cy9pc3N1ZXMvNDJcbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdwcm90b2NvbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IChWKSA9PiBWLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2NsaWVudCcpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlcicpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9iYWxhbmNlZC1wb29sJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vbGliL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSBlcnJvcnNcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vbGliL2FwaScpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vbGliL2NvcmUvY29ubmVjdCcpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stYWdlbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stcG9vbCcpXG5jb25zdCBtb2NrRXJyb3JzID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWVycm9ycycpXG5jb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvcHJveHktYWdlbnQnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyLCBzZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL2xpYi9nbG9iYWwnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5cbmxldCBoYXNDcnlwdG9cbnRyeSB7XG4gIHJlcXVpcmUoJ2NyeXB0bycpXG4gIGhhc0NyeXB0byA9IHRydWVcbn0gY2F0Y2gge1xuICBoYXNDcnlwdG8gPSBmYWxzZVxufVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUhhbmRsZXIgPSBSZXRyeUhhbmRsZXJcblxubW9kdWxlLmV4cG9ydHMuRGVjb3JhdG9ySGFuZGxlciA9IERlY29yYXRvckhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLlJlZGlyZWN0SGFuZGxlciA9IFJlZGlyZWN0SGFuZGxlclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRDb25uZWN0b3IgPSBidWlsZENvbm5lY3RvclxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gZXJyb3JzXG5cbmZ1bmN0aW9uIG1ha2VEaXNwYXRjaGVyIChmbikge1xuICByZXR1cm4gKHVybCwgb3B0cywgaGFuZGxlcikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlciA9IG9wdHNcbiAgICAgIG9wdHMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF1cmwgfHwgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmwgIT09ICdvYmplY3QnICYmICEodXJsIGluc3RhbmNlb2YgVVJMKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICE9IG51bGwgJiYgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wYXRoICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cy5wYXRoJylcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSBvcHRzLnBhdGhcbiAgICAgIGlmICghb3B0cy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgICAgfVxuXG4gICAgICB1cmwgPSBuZXcgVVJMKHV0aWwucGFyc2VPcmlnaW4odXJsKS5vcmlnaW4gKyBwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgb3B0cyA9IHR5cGVvZiB1cmwgPT09ICdvYmplY3QnID8gdXJsIDoge31cbiAgICAgIH1cblxuICAgICAgdXJsID0gdXRpbC5wYXJzZVVSTCh1cmwpXG4gICAgfVxuXG4gICAgY29uc3QgeyBhZ2VudCwgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSB9ID0gb3B0c1xuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG9wdHMuYWdlbnQuIERpZCB5b3UgbWVhbiBvcHRzLmNsaWVudD8nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5jYWxsKGRpc3BhdGNoZXIsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICBwYXRoOiB1cmwuc2VhcmNoID8gYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gIDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAob3B0cy5ib2R5ID8gJ1BVVCcgOiAnR0VUJylcbiAgICB9LCBoYW5kbGVyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbERpc3BhdGNoZXIgPSBzZXRHbG9iYWxEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxEaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlclxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPiAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yID49IDgpKSB7XG4gIGxldCBmZXRjaEltcGwgPSBudWxsXG4gIG1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKHJlc291cmNlKSB7XG4gICAgaWYgKCFmZXRjaEltcGwpIHtcbiAgICAgIGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoJykuZmV0Y2hcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbCguLi5hcmd1bWVudHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2hlYWRlcnMnKS5IZWFkZXJzXG4gIG1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxuICBtb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3RcbiAgbW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9mb3JtZGF0YScpLkZvcm1EYXRhXG4gIG1vZHVsZS5leHBvcnRzLkZpbGUgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9maWxlJykuRmlsZVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG4gIGNvbnN0IHsgc2V0R2xvYmFsT3JpZ2luLCBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2dsb2JhbCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG4gIG1vZHVsZS5leHBvcnRzLmdldEdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpblxuXG4gIGNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuICBjb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL3N5bWJvbHMnKVxuXG4gIC8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4gIC8vIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgTm9kZSwgaXQgZG9lc24ndCBoYXZlIGFueSB1c2Ugd2l0aG91dCBmZXRjaC5cbiAgbW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTYpIHtcbiAgY29uc3QgeyBkZWxldGVDb29raWUsIGdldENvb2tpZXMsIGdldFNldENvb2tpZXMsIHNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG5cbiAgbW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG4gIG1vZHVsZS5leHBvcnRzLmdldENvb2tpZXMgPSBnZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG4gIGNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9kYXRhVVJMJylcblxuICBtb2R1bGUuZXhwb3J0cy5wYXJzZU1JTUVUeXBlID0gcGFyc2VNSU1FVHlwZVxuICBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE4ICYmIGhhc0NyeXB0bykge1xuICBjb25zdCB7IFdlYlNvY2tldCB9ID0gcmVxdWlyZSgnLi9saWIvd2Vic29ja2V0L3dlYnNvY2tldCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gV2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwQ2xpZW50ID0gZXhwb3J0cy5pc0h0dHBzID0gZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBleHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IGV4cG9ydHMuZ2V0UHJveHlVcmwgPSBleHBvcnRzLk1lZGlhVHlwZXMgPSBleHBvcnRzLkhlYWRlcnMgPSBleHBvcnRzLkh0dHBDb2RlcyA9IHZvaWQgMDtcbmNvbnN0IGh0dHAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBcIikpO1xuY29uc3QgaHR0cHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBzXCIpKTtcbmNvbnN0IHBtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb3h5XCIpKTtcbmNvbnN0IHR1bm5lbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidHVubmVsXCIpKTtcbmNvbnN0IHVuZGljaV8xID0gcmVxdWlyZShcInVuZGljaVwiKTtcbnZhciBIdHRwQ29kZXM7XG4oZnVuY3Rpb24gKEh0dHBDb2Rlcykge1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJPS1wiXSA9IDIwMF0gPSBcIk9LXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk11bHRpcGxlQ2hvaWNlc1wiXSA9IDMwMF0gPSBcIk11bHRpcGxlQ2hvaWNlc1wiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJNb3ZlZFBlcm1hbmVudGx5XCJdID0gMzAxXSA9IFwiTW92ZWRQZXJtYW5lbnRseVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXNvdXJjZU1vdmVkXCJdID0gMzAyXSA9IFwiUmVzb3VyY2VNb3ZlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTZWVPdGhlclwiXSA9IDMwM10gPSBcIlNlZU90aGVyXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdE1vZGlmaWVkXCJdID0gMzA0XSA9IFwiTm90TW9kaWZpZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVXNlUHJveHlcIl0gPSAzMDVdID0gXCJVc2VQcm94eVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTd2l0Y2hQcm94eVwiXSA9IDMwNl0gPSBcIlN3aXRjaFByb3h5XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlRlbXBvcmFyeVJlZGlyZWN0XCJdID0gMzA3XSA9IFwiVGVtcG9yYXJ5UmVkaXJlY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGVybWFuZW50UmVkaXJlY3RcIl0gPSAzMDhdID0gXCJQZXJtYW5lbnRSZWRpcmVjdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJCYWRSZXF1ZXN0XCJdID0gNDAwXSA9IFwiQmFkUmVxdWVzdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJVbmF1dGhvcml6ZWRcIl0gPSA0MDFdID0gXCJVbmF1dGhvcml6ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGF5bWVudFJlcXVpcmVkXCJdID0gNDAyXSA9IFwiUGF5bWVudFJlcXVpcmVkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkZvcmJpZGRlblwiXSA9IDQwM10gPSBcIkZvcmJpZGRlblwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJOb3RGb3VuZFwiXSA9IDQwNF0gPSBcIk5vdEZvdW5kXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk1ldGhvZE5vdEFsbG93ZWRcIl0gPSA0MDVdID0gXCJNZXRob2ROb3RBbGxvd2VkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEFjY2VwdGFibGVcIl0gPSA0MDZdID0gXCJOb3RBY2NlcHRhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiXSA9IDQwN10gPSBcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXF1ZXN0VGltZW91dFwiXSA9IDQwOF0gPSBcIlJlcXVlc3RUaW1lb3V0XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkNvbmZsaWN0XCJdID0gNDA5XSA9IFwiQ29uZmxpY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiR29uZVwiXSA9IDQxMF0gPSBcIkdvbmVcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVG9vTWFueVJlcXVlc3RzXCJdID0gNDI5XSA9IFwiVG9vTWFueVJlcXVlc3RzXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkludGVybmFsU2VydmVyRXJyb3JcIl0gPSA1MDBdID0gXCJJbnRlcm5hbFNlcnZlckVycm9yXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEltcGxlbWVudGVkXCJdID0gNTAxXSA9IFwiTm90SW1wbGVtZW50ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiQmFkR2F0ZXdheVwiXSA9IDUwMl0gPSBcIkJhZEdhdGV3YXlcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiU2VydmljZVVuYXZhaWxhYmxlXCJdID0gNTAzXSA9IFwiU2VydmljZVVuYXZhaWxhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkdhdGV3YXlUaW1lb3V0XCJdID0gNTA0XSA9IFwiR2F0ZXdheVRpbWVvdXRcIjtcbn0pKEh0dHBDb2RlcyB8fCAoZXhwb3J0cy5IdHRwQ29kZXMgPSBIdHRwQ29kZXMgPSB7fSkpO1xudmFyIEhlYWRlcnM7XG4oZnVuY3Rpb24gKEhlYWRlcnMpIHtcbiAgICBIZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhY2NlcHRcIjtcbiAgICBIZWFkZXJzW1wiQ29udGVudFR5cGVcIl0gPSBcImNvbnRlbnQtdHlwZVwiO1xufSkoSGVhZGVycyB8fCAoZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycyA9IHt9KSk7XG52YXIgTWVkaWFUeXBlcztcbihmdW5jdGlvbiAoTWVkaWFUeXBlcykge1xuICAgIE1lZGlhVHlwZXNbXCJBcHBsaWNhdGlvbkpzb25cIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbn0pKE1lZGlhVHlwZXMgfHwgKGV4cG9ydHMuTWVkaWFUeXBlcyA9IE1lZGlhVHlwZXMgPSB7fSkpO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm94eSBVUkwsIGRlcGVuZGluZyB1cG9uIHRoZSBzdXBwbGllZCB1cmwgYW5kIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIEBwYXJhbSBzZXJ2ZXJVcmwgIFRoZSBzZXJ2ZXIgVVJMIHdoZXJlIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudC4gRm9yIGV4YW1wbGUsIGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cbiAqL1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwoc2VydmVyVXJsKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChuZXcgVVJMKHNlcnZlclVybCkpO1xuICAgIHJldHVybiBwcm94eVVybCA/IHByb3h5VXJsLmhyZWYgOiAnJztcbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmNvbnN0IEh0dHBSZWRpcmVjdENvZGVzID0gW1xuICAgIEh0dHBDb2Rlcy5Nb3ZlZFBlcm1hbmVudGx5LFxuICAgIEh0dHBDb2Rlcy5SZXNvdXJjZU1vdmVkLFxuICAgIEh0dHBDb2Rlcy5TZWVPdGhlcixcbiAgICBIdHRwQ29kZXMuVGVtcG9yYXJ5UmVkaXJlY3QsXG4gICAgSHR0cENvZGVzLlBlcm1hbmVudFJlZGlyZWN0XG5dO1xuY29uc3QgSHR0cFJlc3BvbnNlUmV0cnlDb2RlcyA9IFtcbiAgICBIdHRwQ29kZXMuQmFkR2F0ZXdheSxcbiAgICBIdHRwQ29kZXMuU2VydmljZVVuYXZhaWxhYmxlLFxuICAgIEh0dHBDb2Rlcy5HYXRld2F5VGltZW91dFxuXTtcbmNvbnN0IFJldHJ5YWJsZUh0dHBWZXJicyA9IFsnT1BUSU9OUycsICdHRVQnLCAnREVMRVRFJywgJ0hFQUQnXTtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcgPSAxMDtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSA9IDU7XG5jbGFzcyBIdHRwQ2xpZW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0h0dHBDbGllbnRFcnJvcic7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBIdHRwQ2xpZW50RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IEh0dHBDbGllbnRFcnJvcjtcbmNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICByZWFkQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoW291dHB1dCwgY2h1bmtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvdXRwdXQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWFkQm9keUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBIdHRwQ2xpZW50UmVzcG9uc2U7XG5mdW5jdGlvbiBpc0h0dHBzKHJlcXVlc3RVcmwpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHJlcXVlc3RVcmwpO1xuICAgIHJldHVybiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xufVxuZXhwb3J0cy5pc0h0dHBzID0gaXNIdHRwcztcbmNsYXNzIEh0dHBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVzZXJBZ2VudCwgaGFuZGxlcnMsIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2lnbm9yZVNzbEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3RzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYWxsb3dSZWRpcmVjdERvd25ncmFkZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXhSZWRpcmVjdHMgPSA1MDtcbiAgICAgICAgdGhpcy5fYWxsb3dSZXRyaWVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21heFJldHJpZXMgPSAxO1xuICAgICAgICB0aGlzLl9rZWVwQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycyB8fCBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xuICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faWdub3JlU3NsRXJyb3IgPSByZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NvY2tldFRpbWVvdXQgPSByZXF1ZXN0T3B0aW9ucy5zb2NrZXRUaW1lb3V0O1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3REb3duZ3JhZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3REb3duZ3JhZGUgPSByZXF1ZXN0T3B0aW9ucy5hbGxvd1JlZGlyZWN0RG93bmdyYWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm1heFJlZGlyZWN0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4UmVkaXJlY3RzID0gTWF0aC5tYXgocmVxdWVzdE9wdGlvbnMubWF4UmVkaXJlY3RzLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5rZWVwQWxpdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tlZXBBbGl2ZSA9IHJlcXVlc3RPcHRpb25zLmtlZXBBbGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5hbGxvd1JldHJpZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmV0cmllcyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5tYXhSZXRyaWVzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhSZXRyaWVzID0gcmVxdWVzdE9wdGlvbnMubWF4UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25zKHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdPUFRJT05TJywgcmVxdWVzdFVybCwgbnVsbCwgYWRkaXRpb25hbEhlYWRlcnMgfHwge30pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0KHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdHRVQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWwocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIHJlcXVlc3RVcmwsIG51bGwsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BPU1QnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdXQocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BVVCcsIHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhlYWQocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0hFQUQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU3RyZWFtKHZlcmIsIHJlcXVlc3RVcmwsIHN0cmVhbSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QodmVyYiwgcmVxdWVzdFVybCwgc3RyZWFtLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgdHlwZWQgb2JqZWN0IGZyb20gYW4gZW5kcG9pbnRcbiAgICAgKiBCZSBhd2FyZSB0aGF0IG5vdCBmb3VuZCByZXR1cm5zIGEgbnVsbC4gIE90aGVyIGVycm9ycyAoNHh4LCA1eHgpIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAqL1xuICAgIGdldEpzb24ocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLmdldChyZXF1ZXN0VXJsLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3N0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NSZXNwb25zZShyZXMsIHRoaXMucmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHV0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnB1dChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaEpzb24ocmVxdWVzdFVybCwgb2JqLCBhZGRpdGlvbmFsSGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxIZWFkZXJzW0hlYWRlcnMuQWNjZXB0XSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkFjY2VwdCwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5Db250ZW50VHlwZV0gPSB0aGlzLl9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgSGVhZGVycy5Db250ZW50VHlwZSwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgdGhpcy5wYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJhdyBodHRwIHJlcXVlc3QuXG4gICAgICogQWxsIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBnZXQsIHBvc3QsIHBhdGNoLCBhbmQgcmVxdWVzdCB1bHRpbWF0ZWx5IGNhbGwgdGhpcy5cbiAgICAgKiBQcmVmZXIgZ2V0LCBkZWwsIHBvc3QgYW5kIHBhdGNoXG4gICAgICovXG4gICAgcmVxdWVzdCh2ZXJiLCByZXF1ZXN0VXJsLCBkYXRhLCBoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChyZXF1ZXN0VXJsKTtcbiAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5fcHJlcGFyZVJlcXVlc3QodmVyYiwgcGFyc2VkVXJsLCBoZWFkZXJzKTtcbiAgICAgICAgICAgIC8vIE9ubHkgcGVyZm9ybSByZXRyaWVzIG9uIHJlYWRzIHNpbmNlIHdyaXRlcyBtYXkgbm90IGJlIGlkZW1wb3RlbnQuXG4gICAgICAgICAgICBjb25zdCBtYXhUcmllcyA9IHRoaXMuX2FsbG93UmV0cmllcyAmJiBSZXRyeWFibGVIdHRwVmVyYnMuaW5jbHVkZXModmVyYilcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21heFJldHJpZXMgKyAxXG4gICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICAgICAgbGV0IG51bVRyaWVzID0gMDtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdFJhdyhpbmZvLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJlxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLlVuYXV0aG9yaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0aGVudGljYXRpb25IYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuY2FuSGFuZGxlQXV0aGVudGljYXRpb24ocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25IYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRpb25IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25IYW5kbGVyLmhhbmRsZUF1dGhlbnRpY2F0aW9uKHRoaXMsIGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSByZWNlaXZlZCBhbiB1bmF1dGhvcml6ZWQgcmVzcG9uc2UgYnV0IGhhdmUgbm8gaGFuZGxlcnMgdG8gaGFuZGxlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSByZXNwb25zZSByZXR1cm4gdG8gdGhlIGNhbGxlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcmVkaXJlY3RzUmVtYWluaW5nID0gdGhpcy5fbWF4UmVkaXJlY3RzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgSHR0cFJlZGlyZWN0Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyAmJlxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gcmVzcG9uc2UubWVzc2FnZS5oZWFkZXJzWydsb2NhdGlvbiddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIGxvY2F0aW9uIHRvIHJlZGlyZWN0IHRvLCB3ZSB3b24ndFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVkaXJlY3RVcmwgPSBuZXcgVVJMKHJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFVybC5wcm90b2NvbCAhPT0gcGFyc2VkUmVkaXJlY3RVcmwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9hbGxvd1JlZGlyZWN0RG93bmdyYWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZGlyZWN0IGZyb20gSFRUUFMgdG8gSFRUUCBwcm90b2NvbC4gVGhpcyBkb3duZ3JhZGUgaXMgbm90IGFsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIElmIHlvdSB3YW50IHRvIGFsbG93IHRoaXMgYmVoYXZpb3IsIHNldCB0aGUgYWxsb3dSZWRpcmVjdERvd25ncmFkZSBvcHRpb24gdG8gdHJ1ZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGZpbmlzaCByZWFkaW5nIHRoZSByZXNwb25zZSBiZWZvcmUgcmVhc3NpZ25pbmcgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCBsZWFrIHRoZSBvcGVuIHNvY2tldC5cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RyaXAgYXV0aG9yaXphdGlvbiBoZWFkZXIgaWYgcmVkaXJlY3RlZCB0byBhIGRpZmZlcmVudCBob3N0bmFtZVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVkaXJlY3RVcmwuaG9zdG5hbWUgIT09IHBhcnNlZFVybC5ob3N0bmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWRlciBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dGhvcml6YXRpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIG1ha2UgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgbmV3IHJlZGlyZWN0VXJsXG4gICAgICAgICAgICAgICAgICAgIGluZm8gPSB0aGlzLl9wcmVwYXJlUmVxdWVzdCh2ZXJiLCBwYXJzZWRSZWRpcmVjdFVybCwgaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0UmF3KGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmctLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgIUh0dHBSZXNwb25zZVJldHJ5Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QgYSByZXRyeSBjb2RlLCByZXR1cm4gaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG51bVRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKG51bVRyaWVzIDwgbWF4VHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5fcGVyZm9ybUV4cG9uZW50aWFsQmFja29mZihudW1Ucmllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAobnVtVHJpZXMgPCBtYXhUcmllcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOZWVkcyB0byBiZSBjYWxsZWQgaWYga2VlcEFsaXZlIGlzIHNldCB0byB0cnVlIGluIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5fYWdlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJhdyByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBpbmZvXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICByZXF1ZXN0UmF3KGluZm8sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tGb3JSZXN1bHQoZXJyLCByZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYGVycmAgaXMgbm90IHBhc3NlZCwgdGhlbiBgcmVzYCBtdXN0IGJlIHBhc3NlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UmF3V2l0aENhbGxiYWNrKGluZm8sIGRhdGEsIGNhbGxiYWNrRm9yUmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmF3IHJlcXVlc3Qgd2l0aCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0gaW5mb1xuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIG9uUmVzdWx0XG4gICAgICovXG4gICAgcmVxdWVzdFJhd1dpdGhDYWxsYmFjayhpbmZvLCBkYXRhLCBvblJlc3VsdCkge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIWluZm8ub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgaW5mby5vcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gQnVmZmVyLmJ5dGVMZW5ndGgoZGF0YSwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0KGVyciwgcmVzKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG9uUmVzdWx0KGVyciwgcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXEgPSBpbmZvLmh0dHBNb2R1bGUucmVxdWVzdChpbmZvLm9wdGlvbnMsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBIdHRwQ2xpZW50UmVzcG9uc2UobXNnKTtcbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdCh1bmRlZmluZWQsIHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICByZXEub24oJ3NvY2tldCcsIHNvY2sgPT4ge1xuICAgICAgICAgICAgc29ja2V0ID0gc29jaztcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHdlIGV2ZXIgZ2V0IGRpc2Nvbm5lY3RlZCwgd2Ugd2FudCB0aGUgc29ja2V0IHRvIHRpbWVvdXQgZXZlbnR1YWxseVxuICAgICAgICByZXEuc2V0VGltZW91dCh0aGlzLl9zb2NrZXRUaW1lb3V0IHx8IDMgKiA2MDAwMCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdChuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dDogJHtpbmZvLm9wdGlvbnMucGF0aH1gKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgLy8gZXJyIGhhcyBzdGF0dXNDb2RlIHByb3BlcnR5XG4gICAgICAgICAgICAvLyByZXMgc2hvdWxkIGhhdmUgaGVhZGVyc1xuICAgICAgICAgICAgaGFuZGxlUmVzdWx0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcS53cml0ZShkYXRhLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0YS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhLnBpcGUocmVxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGh0dHAgYWdlbnQuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgYW4gaHR0cCBhZ2VudCB0aGF0IGhhbmRsZXNcbiAgICAgKiByb3V0aW5nIHRocm91Z2ggYSBwcm94eSBzZXJ2ZXIgLSBkZXBlbmRpbmcgdXBvbiB0aGUgdXJsIGFuZCBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgICogQHBhcmFtIHNlcnZlclVybCAgVGhlIHNlcnZlciBVUkwgd2hlcmUgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZW50LiBGb3IgZXhhbXBsZSwgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVxuICAgICAqL1xuICAgIGdldEFnZW50KHNlcnZlclVybCkge1xuICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHNlcnZlclVybCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBZ2VudChwYXJzZWRVcmwpO1xuICAgIH1cbiAgICBnZXRBZ2VudERpc3BhdGNoZXIoc2VydmVyVXJsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoc2VydmVyVXJsKTtcbiAgICAgICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChwYXJzZWRVcmwpO1xuICAgICAgICBjb25zdCB1c2VQcm94eSA9IHByb3h5VXJsICYmIHByb3h5VXJsLmhvc3RuYW1lO1xuICAgICAgICBpZiAoIXVzZVByb3h5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3h5QWdlbnREaXNwYXRjaGVyKHBhcnNlZFVybCwgcHJveHlVcmwpO1xuICAgIH1cbiAgICBfcHJlcGFyZVJlcXVlc3QobWV0aG9kLCByZXF1ZXN0VXJsLCBoZWFkZXJzKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSB7fTtcbiAgICAgICAgaW5mby5wYXJzZWRVcmwgPSByZXF1ZXN0VXJsO1xuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IGluZm8ucGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICAgICAgaW5mby5odHRwTW9kdWxlID0gdXNpbmdTc2wgPyBodHRwcyA6IGh0dHA7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gdXNpbmdTc2wgPyA0NDMgOiA4MDtcbiAgICAgICAgaW5mby5vcHRpb25zID0ge307XG4gICAgICAgIGluZm8ub3B0aW9ucy5ob3N0ID0gaW5mby5wYXJzZWRVcmwuaG9zdG5hbWU7XG4gICAgICAgIGluZm8ub3B0aW9ucy5wb3J0ID0gaW5mby5wYXJzZWRVcmwucG9ydFxuICAgICAgICAgICAgPyBwYXJzZUludChpbmZvLnBhcnNlZFVybC5wb3J0KVxuICAgICAgICAgICAgOiBkZWZhdWx0UG9ydDtcbiAgICAgICAgaW5mby5vcHRpb25zLnBhdGggPVxuICAgICAgICAgICAgKGluZm8ucGFyc2VkVXJsLnBhdGhuYW1lIHx8ICcnKSArIChpbmZvLnBhcnNlZFVybC5zZWFyY2ggfHwgJycpO1xuICAgICAgICBpbmZvLm9wdGlvbnMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICBpbmZvLm9wdGlvbnMuaGVhZGVycyA9IHRoaXMuX21lcmdlSGVhZGVycyhoZWFkZXJzKTtcbiAgICAgICAgaWYgKHRoaXMudXNlckFnZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWyd1c2VyLWFnZW50J10gPSB0aGlzLnVzZXJBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLm9wdGlvbnMuYWdlbnQgPSB0aGlzLl9nZXRBZ2VudChpbmZvLnBhcnNlZFVybCk7XG4gICAgICAgIC8vIGdpdmVzIGhhbmRsZXJzIGFuIG9wcG9ydHVuaXR5IHRvIHBhcnRpY2lwYXRlXG4gICAgICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIucHJlcGFyZVJlcXVlc3QoaW5mby5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgX21lcmdlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zICYmIHRoaXMucmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKSwgbG93ZXJjYXNlS2V5cyhoZWFkZXJzIHx8IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvd2VyY2FzZUtleXMoaGVhZGVycyB8fCB7fSk7XG4gICAgfVxuICAgIF9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgaGVhZGVyLCBfZGVmYXVsdCkge1xuICAgICAgICBsZXQgY2xpZW50SGVhZGVyO1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucyAmJiB0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNsaWVudEhlYWRlciA9IGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKVtoZWFkZXJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGRpdGlvbmFsSGVhZGVyc1toZWFkZXJdIHx8IGNsaWVudEhlYWRlciB8fCBfZGVmYXVsdDtcbiAgICB9XG4gICAgX2dldEFnZW50KHBhcnNlZFVybCkge1xuICAgICAgICBsZXQgYWdlbnQ7XG4gICAgICAgIGNvbnN0IHByb3h5VXJsID0gcG0uZ2V0UHJveHlVcmwocGFyc2VkVXJsKTtcbiAgICAgICAgY29uc3QgdXNlUHJveHkgPSBwcm94eVVybCAmJiBwcm94eVVybC5ob3N0bmFtZTtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSAmJiB1c2VQcm94eSkge1xuICAgICAgICAgICAgYWdlbnQgPSB0aGlzLl9wcm94eUFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlUHJveHkpIHtcbiAgICAgICAgICAgIGFnZW50ID0gdGhpcy5fYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYWdlbnQgaXMgYWxyZWFkeSBhc3NpZ25lZCB1c2UgdGhhdCBhZ2VudC5cbiAgICAgICAgaWYgKGFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNpbmdTc2wgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICBsZXQgbWF4U29ja2V0cyA9IDEwMDtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIG1heFNvY2tldHMgPSB0aGlzLnJlcXVlc3RPcHRpb25zLm1heFNvY2tldHMgfHwgaHR0cC5nbG9iYWxBZ2VudC5tYXhTb2NrZXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgaXMgYHVzZVByb3h5YCBhZ2FpbiwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYHByb3h5VVJsYCBkaXJlY3RseSBmb3IgVHlwZVNjcmlwdHMncyBmbG93IGFuYWx5c2lzLlxuICAgICAgICBpZiAocHJveHlVcmwgJiYgcHJveHlVcmwuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtYXhTb2NrZXRzLFxuICAgICAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5fa2VlcEFsaXZlLFxuICAgICAgICAgICAgICAgIHByb3h5OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICgocHJveHlVcmwudXNlcm5hbWUgfHwgcHJveHlVcmwucGFzc3dvcmQpICYmIHtcbiAgICAgICAgICAgICAgICAgICAgcHJveHlBdXRoOiBgJHtwcm94eVVybC51c2VybmFtZX06JHtwcm94eVVybC5wYXNzd29yZH1gXG4gICAgICAgICAgICAgICAgfSkpLCB7IGhvc3Q6IHByb3h5VXJsLmhvc3RuYW1lLCBwb3J0OiBwcm94eVVybC5wb3J0IH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHR1bm5lbEFnZW50O1xuICAgICAgICAgICAgY29uc3Qgb3Zlckh0dHBzID0gcHJveHlVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICAgICAgdHVubmVsQWdlbnQgPSBvdmVySHR0cHMgPyB0dW5uZWwuaHR0cHNPdmVySHR0cHMgOiB0dW5uZWwuaHR0cHNPdmVySHR0cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHR1bm5lbEFnZW50ID0gb3Zlckh0dHBzID8gdHVubmVsLmh0dHBPdmVySHR0cHMgOiB0dW5uZWwuaHR0cE92ZXJIdHRwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWdlbnQgPSB0dW5uZWxBZ2VudChhZ2VudE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fcHJveHlBZ2VudCA9IGFnZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHR1bm5lbGluZyBhZ2VudCBpc24ndCBhc3NpZ25lZCBjcmVhdGUgYSBuZXcgYWdlbnRcbiAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsga2VlcEFsaXZlOiB0aGlzLl9rZWVwQWxpdmUsIG1heFNvY2tldHMgfTtcbiAgICAgICAgICAgIGFnZW50ID0gdXNpbmdTc2wgPyBuZXcgaHR0cHMuQWdlbnQob3B0aW9ucykgOiBuZXcgaHR0cC5BZ2VudChvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50ID0gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBhZ2VudC5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihhZ2VudC5vcHRpb25zIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFnZW50O1xuICAgIH1cbiAgICBfZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIocGFyc2VkVXJsLCBwcm94eVVybCkge1xuICAgICAgICBsZXQgcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSkge1xuICAgICAgICAgICAgcHJveHlBZ2VudCA9IHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGFnZW50IGlzIGFscmVhZHkgYXNzaWduZWQgdXNlIHRoYXQgYWdlbnQuXG4gICAgICAgIGlmIChwcm94eUFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcHJveHlBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgIHByb3h5QWdlbnQgPSBuZXcgdW5kaWNpXzEuUHJveHlBZ2VudChPYmplY3QuYXNzaWduKHsgdXJpOiBwcm94eVVybC5ocmVmLCBwaXBlbGluaW5nOiAhdGhpcy5fa2VlcEFsaXZlID8gMCA6IDEgfSwgKChwcm94eVVybC51c2VybmFtZSB8fCBwcm94eVVybC5wYXNzd29yZCkgJiYge1xuICAgICAgICAgICAgdG9rZW46IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke3Byb3h5VXJsLnVzZXJuYW1lfToke3Byb3h5VXJsLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgICAgIH0pKSk7XG4gICAgICAgIHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyID0gcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBwcm94eUFnZW50Lm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHByb3h5QWdlbnQub3B0aW9ucy5yZXF1ZXN0VGxzIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3h5QWdlbnQ7XG4gICAgfVxuICAgIF9wZXJmb3JtRXhwb25lbnRpYWxCYWNrb2ZmKHJldHJ5TnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXRyeU51bWJlciA9IE1hdGgubWluKEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcsIHJldHJ5TnVtYmVyKTtcbiAgICAgICAgICAgIGNvbnN0IG1zID0gRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlICogTWF0aC5wb3coMiwgcmV0cnlOdW1iZXIpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIG1zKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc1Jlc3BvbnNlKHJlcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLm1lc3NhZ2Uuc3RhdHVzQ29kZSB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBub3QgZm91bmQgbGVhZHMgdG8gbnVsbCBvYmogcmV0dXJuZWRcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLk5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHJlc3VsdCBmcm9tIHRoZSBib2R5XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGF0ZVRpbWVEZXNlcmlhbGl6ZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oYS52YWx1ZU9mKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgb2JqO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZW50cztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IHlpZWxkIHJlcy5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudHMgJiYgY29udGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZXNlcmlhbGl6ZURhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cywgZGF0ZVRpbWVEZXNlcmlhbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXN1bHQgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHJlcy5tZXNzYWdlLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCByZXNvdXJjZSAoY29udGVudHMgbm90IGpzb24pOyAgbGVhdmluZyByZXN1bHQgb2JqIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm90ZSB0aGF0IDN4eCByZWRpcmVjdHMgYXJlIGhhbmRsZWQgYnkgdGhlIGh0dHAgbGF5ZXIuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPiAyOTkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZXhjZXB0aW9uL2Vycm9yIGluIGJvZHksIGF0dGVtcHQgdG8gZ2V0IGJldHRlciBlcnJvclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqICYmIG9iai5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBvYmoubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250ZW50cyAmJiBjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIGluIHRoZSBib2R5IG1lc3NhZ2UgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGBGYWlsZWQgcmVxdWVzdDogKCR7c3RhdHVzQ29kZX0pYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgSHR0cENsaWVudEVycm9yKG1zZywgc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGVyci5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnQgPSBIdHRwQ2xpZW50O1xuY29uc3QgbG93ZXJjYXNlS2V5cyA9IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChjLCBrKSA9PiAoKGNbay50b0xvd2VyQ2FzZSgpXSA9IG9ialtrXSksIGMpLCB7fSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBlcnNvbmFsQWNjZXNzVG9rZW5DcmVkZW50aWFsSGFuZGxlciA9IGV4cG9ydHMuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIgPSBleHBvcnRzLkJhc2ljQ3JlZGVudGlhbEhhbmRsZXIgPSB2b2lkIDA7XG5jbGFzcyBCYXNpY0NyZWRlbnRpYWxIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VybmFtZSwgcGFzc3dvcmQpIHtcbiAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgfVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7dGhpcy51c2VybmFtZX06JHt0aGlzLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzaWNDcmVkZW50aWFsSGFuZGxlciA9IEJhc2ljQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBCZWFyZXJDcmVkZW50aWFsSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICAvLyBjdXJyZW50bHkgaW1wbGVtZW50cyBwcmUtYXV0aG9yaXphdGlvblxuICAgIC8vIFRPRE86IHN1cHBvcnQgcHJlQXV0aCA9IGZhbHNlIHdoZXJlIGl0IGhvb2tzIG9uIDQwMVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3RoaXMudG9rZW59YDtcbiAgICB9XG4gICAgLy8gVGhpcyBoYW5kbGVyIGNhbm5vdCBoYW5kbGUgNDAxXG4gICAgY2FuSGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkJlYXJlckNyZWRlbnRpYWxIYW5kbGVyID0gQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBQZXJzb25hbEFjY2Vzc1Rva2VuQ3JlZGVudGlhbEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgLy8gY3VycmVudGx5IGltcGxlbWVudHMgcHJlLWF1dGhvcml6YXRpb25cbiAgICAvLyBUT0RPOiBzdXBwb3J0IHByZUF1dGggPSBmYWxzZSB3aGVyZSBpdCBob29rcyBvbiA0MDFcbiAgICBwcmVwYXJlUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIG5vIGhlYWRlcnMnKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGBQQVQ6JHt0aGlzLnRva2VufWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyID0gUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9pZGNDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpO1xuY29uc3QgYXV0aF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9hdXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNsYXNzIE9pZGNDbGllbnQge1xuICAgIHN0YXRpYyBjcmVhdGVIdHRwQ2xpZW50KGFsbG93UmV0cnkgPSB0cnVlLCBtYXhSZXRyeSA9IDEwKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dSZXRyaWVzOiBhbGxvd1JldHJ5LFxuICAgICAgICAgICAgbWF4UmV0cmllczogbWF4UmV0cnlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwX2NsaWVudF8xLkh0dHBDbGllbnQoJ2FjdGlvbnMvb2lkYy1jbGllbnQnLCBbbmV3IGF1dGhfMS5CZWFyZXJDcmVkZW50aWFsSGFuZGxlcihPaWRjQ2xpZW50LmdldFJlcXVlc3RUb2tlbigpKV0sIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFJlcXVlc3RUb2tlbigpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1RPS0VOJ107XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCBBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVE9LRU4gZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlblVybCgpIHtcbiAgICAgICAgY29uc3QgcnVudGltZVVybCA9IHByb2Nlc3MuZW52WydBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVVJMJ107XG4gICAgICAgIGlmICghcnVudGltZVVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwgZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1bnRpbWVVcmw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDYWxsKGlkX3Rva2VuX3VybCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBodHRwY2xpZW50ID0gT2lkY0NsaWVudC5jcmVhdGVIdHRwQ2xpZW50KCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBodHRwY2xpZW50XG4gICAgICAgICAgICAgICAgLmdldEpzb24oaWRfdG9rZW5fdXJsKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IElEIFRva2VuLiBcXG4gXG4gICAgICAgIEVycm9yIENvZGUgOiAke2Vycm9yLnN0YXR1c0NvZGV9XFxuIFxuICAgICAgICBFcnJvciBNZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGlkX3Rva2VuID0gKF9hID0gcmVzLnJlc3VsdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCFpZF90b2tlbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzcG9uc2UganNvbiBib2R5IGRvIG5vdCBoYXZlIElEIFRva2VuIGZpZWxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRfdG9rZW47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlbihhdWRpZW5jZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBOZXcgSUQgVG9rZW4gaXMgcmVxdWVzdGVkIGZyb20gYWN0aW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICBsZXQgaWRfdG9rZW5fdXJsID0gT2lkY0NsaWVudC5nZXRJRFRva2VuVXJsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGF1ZGllbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZWRBdWRpZW5jZSA9IGVuY29kZVVSSUNvbXBvbmVudChhdWRpZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuX3VybCA9IGAke2lkX3Rva2VuX3VybH0mYXVkaWVuY2U9JHtlbmNvZGVkQXVkaWVuY2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYElEIHRva2VuIHVybCBpcyAke2lkX3Rva2VuX3VybH1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZF90b2tlbiA9IHlpZWxkIE9pZGNDbGllbnQuZ2V0Q2FsbChpZF90b2tlbl91cmwpO1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuc2V0U2VjcmV0KShpZF90b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkX3Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBtZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuT2lkY0NsaWVudCA9IE9pZGNDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vaWRjLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3VtbWFyeSA9IGV4cG9ydHMubWFya2Rvd25TdW1tYXJ5ID0gZXhwb3J0cy5TVU1NQVJZX0RPQ1NfVVJMID0gZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVIgPSB2b2lkIDA7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHsgYWNjZXNzLCBhcHBlbmRGaWxlLCB3cml0ZUZpbGUgfSA9IGZzXzEucHJvbWlzZXM7XG5leHBvcnRzLlNVTU1BUllfRU5WX1ZBUiA9ICdHSVRIVUJfU1RFUF9TVU1NQVJZJztcbmV4cG9ydHMuU1VNTUFSWV9ET0NTX1VSTCA9ICdodHRwczovL2RvY3MuZ2l0aHViLmNvbS9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy93b3JrZmxvdy1jb21tYW5kcy1mb3ItZ2l0aHViLWFjdGlvbnMjYWRkaW5nLWEtam9iLXN1bW1hcnknO1xuY2xhc3MgU3VtbWFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgc3VtbWFyeSBmaWxlIHBhdGggZnJvbSB0aGUgZW52aXJvbm1lbnQsIHJlamVjdHMgaWYgZW52IHZhciBpcyBub3QgZm91bmQgb3IgZmlsZSBkb2VzIG5vdCBleGlzdFxuICAgICAqIEFsc28gY2hlY2tzIHIvdyBwZXJtaXNzaW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHN0ZXAgc3VtbWFyeSBmaWxlIHBhdGhcbiAgICAgKi9cbiAgICBmaWxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlUGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhdGhGcm9tRW52ID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVJdO1xuICAgICAgICAgICAgaWYgKCFwYXRoRnJvbUVudikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yICQke2V4cG9ydHMuU1VNTUFSWV9FTlZfVkFSfS4gQ2hlY2sgaWYgeW91ciBydW50aW1lIGVudmlyb25tZW50IHN1cHBvcnRzIGpvYiBzdW1tYXJpZXMuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGFjY2VzcyhwYXRoRnJvbUVudiwgZnNfMS5jb25zdGFudHMuUl9PSyB8IGZzXzEuY29uc3RhbnRzLldfT0spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHN1bW1hcnkgZmlsZTogJyR7cGF0aEZyb21FbnZ9Jy4gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGNvcnJlY3QgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZpbGVQYXRoID0gcGF0aEZyb21FbnY7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZVBhdGg7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcmFwcyBjb250ZW50IGluIGFuIEhUTUwgdGFnLCBhZGRpbmcgYW55IEhUTUwgYXR0cmlidXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBIVE1MIHRhZyB0byB3cmFwXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBjb250ZW50IGNvbnRlbnQgd2l0aGluIHRoZSB0YWdcbiAgICAgKiBAcGFyYW0ge1thdHRyaWJ1dGU6IHN0cmluZ106IHN0cmluZ30gYXR0cnMga2V5LXZhbHVlIGxpc3Qgb2YgSFRNTCBhdHRyaWJ1dGVzIHRvIGFkZFxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB3cmFwcGVkIGluIEhUTUwgZWxlbWVudFxuICAgICAqL1xuICAgIHdyYXAodGFnLCBjb250ZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGh0bWxBdHRycyA9IE9iamVjdC5lbnRyaWVzKGF0dHJzKVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgICR7a2V5fT1cIiR7dmFsdWV9XCJgKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT4ke2NvbnRlbnR9PC8ke3RhZ30+YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIHRleHQgaW4gdGhlIGJ1ZmZlciB0byB0aGUgc3VtbWFyeSBidWZmZXIgZmlsZSBhbmQgZW1wdGllcyBidWZmZXIuIFdpbGwgYXBwZW5kIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlXcml0ZU9wdGlvbnN9IFtvcHRpb25zXSAob3B0aW9uYWwpIG9wdGlvbnMgZm9yIHdyaXRlIG9wZXJhdGlvblxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8U3VtbWFyeT59IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB3cml0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGUgPSAhIShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub3ZlcndyaXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgdGhpcy5maWxlUGF0aCgpO1xuICAgICAgICAgICAgY29uc3Qgd3JpdGVGdW5jID0gb3ZlcndyaXRlID8gd3JpdGVGaWxlIDogYXBwZW5kRmlsZTtcbiAgICAgICAgICAgIHlpZWxkIHdyaXRlRnVuYyhmaWxlUGF0aCwgdGhpcy5fYnVmZmVyLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eUJ1ZmZlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBzdW1tYXJ5IGJ1ZmZlciBhbmQgd2lwZXMgdGhlIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5QnVmZmVyKCkud3JpdGUoeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN1bW1hcnkgYnVmZmVyIGFzIGEgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJpbmcgb2Ygc3VtbWFyeSBidWZmZXJcbiAgICAgKi9cbiAgICBzdHJpbmdpZnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzdW1tYXJ5IGJ1ZmZlciBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlbn0gdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5XG4gICAgICovXG4gICAgaXNFbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgc3VtbWFyeSBidWZmZXIgd2l0aG91dCB3cml0aW5nIHRvIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBlbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gJyc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHJhdyB0ZXh0IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgY29udGVudCB0byBhZGRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRFT0w9ZmFsc2VdIChvcHRpb25hbCkgYXBwZW5kIGFuIEVPTCB0byB0aGUgcmF3IHRleHQgKGRlZmF1bHQ6IGZhbHNlKVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRSYXcodGV4dCwgYWRkRU9MID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyICs9IHRleHQ7XG4gICAgICAgIHJldHVybiBhZGRFT0wgPyB0aGlzLmFkZEVPTCgpIDogdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgb3BlcmF0aW5nIHN5c3RlbS1zcGVjaWZpYyBlbmQtb2YtbGluZSBtYXJrZXIgdG8gdGhlIGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRFT0woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhvc18xLkVPTCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBjb2RlYmxvY2sgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBjb250ZW50IHRvIHJlbmRlciB3aXRoaW4gZmVuY2VkIGNvZGUgYmxvY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZyAob3B0aW9uYWwpIGxhbmd1YWdlIHRvIHN5bnRheCBoaWdobGlnaHQgY29kZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRDb2RlQmxvY2soY29kZSwgbGFuZykge1xuICAgICAgICBjb25zdCBhdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIChsYW5nICYmIHsgbGFuZyB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ3ByZScsIHRoaXMud3JhcCgnY29kZScsIGNvZGUpLCBhdHRycyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpc3QgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtcyBsaXN0IG9mIGl0ZW1zIHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29yZGVyZWQ9ZmFsc2VdIChvcHRpb25hbCkgaWYgdGhlIHJlbmRlcmVkIGxpc3Qgc2hvdWxkIGJlIG9yZGVyZWQgb3Igbm90IChkZWZhdWx0OiBmYWxzZSlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkTGlzdChpdGVtcywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJztcbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gdGhpcy53cmFwKCdsaScsIGl0ZW0pKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCh0YWcsIGxpc3RJdGVtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIHRhYmxlIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdW1tYXJ5VGFibGVDZWxsW119IHJvd3MgdGFibGUgcm93c1xuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRUYWJsZShyb3dzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHJvd3NcbiAgICAgICAgICAgIC5tYXAocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gcm93XG4gICAgICAgICAgICAgICAgLm1hcChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNlbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RkJywgY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVyLCBkYXRhLCBjb2xzcGFuLCByb3dzcGFuIH0gPSBjZWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IGhlYWRlciA/ICd0aCcgOiAndGQnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoY29sc3BhbiAmJiB7IGNvbHNwYW4gfSkpLCAocm93c3BhbiAmJiB7IHJvd3NwYW4gfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAodGFnLCBkYXRhLCBhdHRycyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RyJywgY2VsbHMpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCd0YWJsZScsIHRhYmxlQm9keSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbGxhcHNhYmxlIEhUTUwgZGV0YWlscyBlbGVtZW50IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHRleHQgZm9yIHRoZSBjbG9zZWQgc3RhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBjb2xsYXBzYWJsZSBjb250ZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZERldGFpbHMobGFiZWwsIGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnZGV0YWlscycsIHRoaXMud3JhcCgnc3VtbWFyeScsIGxhYmVsKSArIGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBpbWFnZSB0YWcgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIHBhdGggdG8gdGhlIGltYWdlIHlvdSB0byBlbWJlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhbHQgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGUgaW1hZ2VcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlJbWFnZU9wdGlvbnN9IG9wdGlvbnMgKG9wdGlvbmFsKSBhZGRpdGlvbiBpbWFnZSBhdHRyaWJ1dGVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEltYWdlKHNyYywgYWx0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh3aWR0aCAmJiB7IHdpZHRoIH0pKSwgKGhlaWdodCAmJiB7IGhlaWdodCB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2ltZycsIG51bGwsIE9iamVjdC5hc3NpZ24oeyBzcmMsIGFsdCB9LCBhdHRycykpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBzZWN0aW9uIGhlYWRpbmcgZWxlbWVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgaGVhZGluZyB0ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtsZXZlbD0xXSAob3B0aW9uYWwpIHRoZSBoZWFkaW5nIGxldmVsLCBkZWZhdWx0OiAxXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEhlYWRpbmcodGV4dCwgbGV2ZWwpIHtcbiAgICAgICAgY29uc3QgdGFnID0gYGgke2xldmVsfWA7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRUYWcgPSBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2J10uaW5jbHVkZXModGFnKVxuICAgICAgICAgICAgPyB0YWdcbiAgICAgICAgICAgIDogJ2gxJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcChhbGxvd2VkVGFnLCB0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgdGhlbWF0aWMgYnJlYWsgKDxocj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRTZXBhcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2hyJywgbnVsbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpbmUgYnJlYWsgKDxicj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRCcmVhaygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYnInLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYmxvY2txdW90ZSB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IHF1b3RlIHRleHRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2l0ZSAob3B0aW9uYWwpIGNpdGF0aW9uIHVybFxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRRdW90ZSh0ZXh0LCBjaXRlKSB7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgKGNpdGUgJiYgeyBjaXRlIH0pKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYmxvY2txdW90ZScsIHRleHQsIGF0dHJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYW5jaG9yIHRhZyB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IGxpbmsgdGV4dC9jb250ZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgaHlwZXJsaW5rXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZExpbmsodGV4dCwgaHJlZikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCdhJywgdGV4dCwgeyBocmVmIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxufVxuY29uc3QgX3N1bW1hcnkgPSBuZXcgU3VtbWFyeSgpO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgYGNvcmUuc3VtbWFyeWBcbiAqL1xuZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBfc3VtbWFyeTtcbmV4cG9ydHMuc3VtbWFyeSA9IF9zdW1tYXJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VtbWFyeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gZXhwb3J0cy50b1dpbjMyUGF0aCA9IGV4cG9ydHMudG9Qb3NpeFBhdGggPSB2b2lkIDA7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbi8qKlxuICogdG9Qb3NpeFBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHBvc2l4IGZvcm0uIE9uIFdpbmRvd3MsIFxcXFwgd2lsbCBiZVxuICogcmVwbGFjZWQgd2l0aCAvLlxuICpcbiAqIEBwYXJhbSBwdGguIFBhdGggdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiBzdHJpbmcgUG9zaXggcGF0aC5cbiAqL1xuZnVuY3Rpb24gdG9Qb3NpeFBhdGgocHRoKSB7XG4gICAgcmV0dXJuIHB0aC5yZXBsYWNlKC9bXFxcXF0vZywgJy8nKTtcbn1cbmV4cG9ydHMudG9Qb3NpeFBhdGggPSB0b1Bvc2l4UGF0aDtcbi8qKlxuICogdG9XaW4zMlBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHdpbjMyIGZvcm0uIE9uIExpbnV4LCAvIHdpbGwgYmVcbiAqIHJlcGxhY2VkIHdpdGggXFxcXC5cbiAqXG4gKiBAcGFyYW0gcHRoLiBQYXRoIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4gc3RyaW5nIFdpbjMyIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvV2luMzJQYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9dL2csICdcXFxcJyk7XG59XG5leHBvcnRzLnRvV2luMzJQYXRoID0gdG9XaW4zMlBhdGg7XG4vKipcbiAqIHRvUGxhdGZvcm1QYXRoIGNvbnZlcnRzIHRoZSBnaXZlbiBwYXRoIHRvIGEgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aC4gSXQgZG9lc1xuICogdGhpcyBieSByZXBsYWNpbmcgaW5zdGFuY2VzIG9mIC8gYW5kIFxcIHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGhcbiAqIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gcHRoIFRoZSBwYXRoIHRvIHBsYXRmb3JtaXplLlxuICogQHJldHVybiBzdHJpbmcgVGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvUGxhdGZvcm1QYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9cXFxcXS9nLCBwYXRoLnNlcCk7XG59XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gdG9QbGF0Zm9ybVBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXREZXRhaWxzID0gZXhwb3J0cy5pc0xpbnV4ID0gZXhwb3J0cy5pc01hY09TID0gZXhwb3J0cy5pc1dpbmRvd3MgPSBleHBvcnRzLmFyY2ggPSBleHBvcnRzLnBsYXRmb3JtID0gdm9pZCAwO1xuY29uc3Qgb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgZXhlYyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvZXhlY1wiKSk7XG5jb25zdCBnZXRXaW5kb3dzSW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHsgc3Rkb3V0OiB2ZXJzaW9uIH0gPSB5aWVsZCBleGVjLmdldEV4ZWNPdXRwdXQoJ3Bvd2Vyc2hlbGwgLWNvbW1hbmQgXCIoR2V0LUNpbUluc3RhbmNlIC1DbGFzc05hbWUgV2luMzJfT3BlcmF0aW5nU3lzdGVtKS5WZXJzaW9uXCInLCB1bmRlZmluZWQsIHtcbiAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgeyBzdGRvdXQ6IG5hbWUgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgncG93ZXJzaGVsbCAtY29tbWFuZCBcIihHZXQtQ2ltSW5zdGFuY2UgLUNsYXNzTmFtZSBXaW4zMl9PcGVyYXRpbmdTeXN0ZW0pLkNhcHRpb25cIicsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBuYW1lLnRyaW0oKSxcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbi50cmltKClcbiAgICB9O1xufSk7XG5jb25zdCBnZXRNYWNPc0luZm8gPSAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgnc3dfdmVycycsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCB2ZXJzaW9uID0gKF9iID0gKF9hID0gc3Rkb3V0Lm1hdGNoKC9Qcm9kdWN0VmVyc2lvbjpcXHMqKC4rKS8pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgIGNvbnN0IG5hbWUgPSAoX2QgPSAoX2MgPSBzdGRvdXQubWF0Y2goL1Byb2R1Y3ROYW1lOlxccyooLispLykpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY1sxXSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogJyc7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvblxuICAgIH07XG59KTtcbmNvbnN0IGdldExpbnV4SW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSB5aWVsZCBleGVjLmdldEV4ZWNPdXRwdXQoJ2xzYl9yZWxlYXNlJywgWyctaScsICctcicsICctcyddLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSA9IHN0ZG91dC50cmltKCkuc3BsaXQoJ1xcbicpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHZlcnNpb25cbiAgICB9O1xufSk7XG5leHBvcnRzLnBsYXRmb3JtID0gb3NfMS5kZWZhdWx0LnBsYXRmb3JtKCk7XG5leHBvcnRzLmFyY2ggPSBvc18xLmRlZmF1bHQuYXJjaCgpO1xuZXhwb3J0cy5pc1dpbmRvd3MgPSBleHBvcnRzLnBsYXRmb3JtID09PSAnd2luMzInO1xuZXhwb3J0cy5pc01hY09TID0gZXhwb3J0cy5wbGF0Zm9ybSA9PT0gJ2Rhcndpbic7XG5leHBvcnRzLmlzTGludXggPSBleHBvcnRzLnBsYXRmb3JtID09PSAnbGludXgnO1xuZnVuY3Rpb24gZ2V0RGV0YWlscygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoeWllbGQgKGV4cG9ydHMuaXNXaW5kb3dzXG4gICAgICAgICAgICA/IGdldFdpbmRvd3NJbmZvKClcbiAgICAgICAgICAgIDogZXhwb3J0cy5pc01hY09TXG4gICAgICAgICAgICAgICAgPyBnZXRNYWNPc0luZm8oKVxuICAgICAgICAgICAgICAgIDogZ2V0TGludXhJbmZvKCkpKSksIHsgcGxhdGZvcm06IGV4cG9ydHMucGxhdGZvcm0sXG4gICAgICAgICAgICBhcmNoOiBleHBvcnRzLmFyY2gsXG4gICAgICAgICAgICBpc1dpbmRvd3M6IGV4cG9ydHMuaXNXaW5kb3dzLFxuICAgICAgICAgICAgaXNNYWNPUzogZXhwb3J0cy5pc01hY09TLFxuICAgICAgICAgICAgaXNMaW51eDogZXhwb3J0cy5pc0xpbnV4IH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXREZXRhaWxzID0gZ2V0RGV0YWlscztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsYXRmb3JtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wbGF0Zm9ybSA9IGV4cG9ydHMudG9QbGF0Zm9ybVBhdGggPSBleHBvcnRzLnRvV2luMzJQYXRoID0gZXhwb3J0cy50b1Bvc2l4UGF0aCA9IGV4cG9ydHMubWFya2Rvd25TdW1tYXJ5ID0gZXhwb3J0cy5zdW1tYXJ5ID0gZXhwb3J0cy5nZXRJRFRva2VuID0gZXhwb3J0cy5nZXRTdGF0ZSA9IGV4cG9ydHMuc2F2ZVN0YXRlID0gZXhwb3J0cy5ncm91cCA9IGV4cG9ydHMuZW5kR3JvdXAgPSBleHBvcnRzLnN0YXJ0R3JvdXAgPSBleHBvcnRzLmluZm8gPSBleHBvcnRzLm5vdGljZSA9IGV4cG9ydHMud2FybmluZyA9IGV4cG9ydHMuZXJyb3IgPSBleHBvcnRzLmRlYnVnID0gZXhwb3J0cy5pc0RlYnVnID0gZXhwb3J0cy5zZXRGYWlsZWQgPSBleHBvcnRzLnNldENvbW1hbmRFY2hvID0gZXhwb3J0cy5zZXRPdXRwdXQgPSBleHBvcnRzLmdldEJvb2xlYW5JbnB1dCA9IGV4cG9ydHMuZ2V0TXVsdGlsaW5lSW5wdXQgPSBleHBvcnRzLmdldElucHV0ID0gZXhwb3J0cy5hZGRQYXRoID0gZXhwb3J0cy5zZXRTZWNyZXQgPSBleHBvcnRzLmV4cG9ydFZhcmlhYmxlID0gZXhwb3J0cy5FeGl0Q29kZSA9IHZvaWQgMDtcbmNvbnN0IGNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRcIik7XG5jb25zdCBmaWxlX2NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2ZpbGUtY29tbWFuZFwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IG9zID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJvc1wiKSk7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbmNvbnN0IG9pZGNfdXRpbHNfMSA9IHJlcXVpcmUoXCIuL29pZGMtdXRpbHNcIik7XG4vKipcbiAqIFRoZSBjb2RlIHRvIGV4aXQgYW4gYWN0aW9uXG4gKi9cbnZhciBFeGl0Q29kZTtcbihmdW5jdGlvbiAoRXhpdENvZGUpIHtcbiAgICAvKipcbiAgICAgKiBBIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSBhY3Rpb24gd2FzIHN1Y2Nlc3NmdWxcbiAgICAgKi9cbiAgICBFeGl0Q29kZVtFeGl0Q29kZVtcIlN1Y2Nlc3NcIl0gPSAwXSA9IFwiU3VjY2Vzc1wiO1xuICAgIC8qKlxuICAgICAqIEEgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGFjdGlvbiB3YXMgYSBmYWlsdXJlXG4gICAgICovXG4gICAgRXhpdENvZGVbRXhpdENvZGVbXCJGYWlsdXJlXCJdID0gMV0gPSBcIkZhaWx1cmVcIjtcbn0pKEV4aXRDb2RlIHx8IChleHBvcnRzLkV4aXRDb2RlID0gRXhpdENvZGUgPSB7fSkpO1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVmFyaWFibGVzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNldHMgZW52IHZhcmlhYmxlIGZvciB0aGlzIGFjdGlvbiBhbmQgZnV0dXJlIGFjdGlvbnMgaW4gdGhlIGpvYlxuICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIHNldFxuICogQHBhcmFtIHZhbCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGV4cG9ydFZhcmlhYmxlKG5hbWUsIHZhbCkge1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbCA9ICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKSh2YWwpO1xuICAgIHByb2Nlc3MuZW52W25hbWVdID0gY29udmVydGVkVmFsO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9FTlYnXSB8fCAnJztcbiAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnRU5WJywgKDAsIGZpbGVfY29tbWFuZF8xLnByZXBhcmVLZXlWYWx1ZU1lc3NhZ2UpKG5hbWUsIHZhbCkpO1xuICAgIH1cbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NldC1lbnYnLCB7IG5hbWUgfSwgY29udmVydGVkVmFsKTtcbn1cbmV4cG9ydHMuZXhwb3J0VmFyaWFibGUgPSBleHBvcnRWYXJpYWJsZTtcbi8qKlxuICogUmVnaXN0ZXJzIGEgc2VjcmV0IHdoaWNoIHdpbGwgZ2V0IG1hc2tlZCBmcm9tIGxvZ3NcbiAqIEBwYXJhbSBzZWNyZXQgdmFsdWUgb2YgdGhlIHNlY3JldFxuICovXG5mdW5jdGlvbiBzZXRTZWNyZXQoc2VjcmV0KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdhZGQtbWFzaycsIHt9LCBzZWNyZXQpO1xufVxuZXhwb3J0cy5zZXRTZWNyZXQgPSBzZXRTZWNyZXQ7XG4vKipcbiAqIFByZXBlbmRzIGlucHV0UGF0aCB0byB0aGUgUEFUSCAoZm9yIHRoaXMgYWN0aW9uIGFuZCBmdXR1cmUgYWN0aW9ucylcbiAqIEBwYXJhbSBpbnB1dFBhdGhcbiAqL1xuZnVuY3Rpb24gYWRkUGF0aChpbnB1dFBhdGgpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHByb2Nlc3MuZW52WydHSVRIVUJfUEFUSCddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICAoMCwgZmlsZV9jb21tYW5kXzEuaXNzdWVGaWxlQ29tbWFuZCkoJ1BBVEgnLCBpbnB1dFBhdGgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdhZGQtcGF0aCcsIHt9LCBpbnB1dFBhdGgpO1xuICAgIH1cbiAgICBwcm9jZXNzLmVudlsnUEFUSCddID0gYCR7aW5wdXRQYXRofSR7cGF0aC5kZWxpbWl0ZXJ9JHtwcm9jZXNzLmVudlsnUEFUSCddfWA7XG59XG5leHBvcnRzLmFkZFBhdGggPSBhZGRQYXRoO1xuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBvZiBhbiBpbnB1dC5cbiAqIFVubGVzcyB0cmltV2hpdGVzcGFjZSBpcyBzZXQgdG8gZmFsc2UgaW4gSW5wdXRPcHRpb25zLCB0aGUgdmFsdWUgaXMgYWxzbyB0cmltbWVkLlxuICogUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIHZhbHVlIGlzIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbCA9IHByb2Nlc3MuZW52W2BJTlBVVF8ke25hbWUucmVwbGFjZSgvIC9nLCAnXycpLnRvVXBwZXJDYXNlKCl9YF0gfHwgJyc7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXF1aXJlZCAmJiAhdmFsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgcmVxdWlyZWQgYW5kIG5vdCBzdXBwbGllZDogJHtuYW1lfWApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyaW1XaGl0ZXNwYWNlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsLnRyaW0oKTtcbn1cbmV4cG9ydHMuZ2V0SW5wdXQgPSBnZXRJbnB1dDtcbi8qKlxuICogR2V0cyB0aGUgdmFsdWVzIG9mIGFuIG11bHRpbGluZSBpbnB1dC4gIEVhY2ggdmFsdWUgaXMgYWxzbyB0cmltbWVkLlxuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBzdHJpbmdbXVxuICpcbiAqL1xuZnVuY3Rpb24gZ2V0TXVsdGlsaW5lSW5wdXQobmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGlucHV0cyA9IGdldElucHV0KG5hbWUsIG9wdGlvbnMpXG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLmZpbHRlcih4ID0+IHggIT09ICcnKTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyaW1XaGl0ZXNwYWNlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gaW5wdXRzO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiBpbnB1dC50cmltKCkpO1xufVxuZXhwb3J0cy5nZXRNdWx0aWxpbmVJbnB1dCA9IGdldE11bHRpbGluZUlucHV0O1xuLyoqXG4gKiBHZXRzIHRoZSBpbnB1dCB2YWx1ZSBvZiB0aGUgYm9vbGVhbiB0eXBlIGluIHRoZSBZQU1MIDEuMiBcImNvcmUgc2NoZW1hXCIgc3BlY2lmaWNhdGlvbi5cbiAqIFN1cHBvcnQgYm9vbGVhbiBpbnB1dCBsaXN0OiBgdHJ1ZSB8IFRydWUgfCBUUlVFIHwgZmFsc2UgfCBGYWxzZSB8IEZBTFNFYCAuXG4gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFsc28gaW4gYm9vbGVhbiB0eXBlLlxuICogcmVmOiBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDQ5MjNcbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIGlucHV0IHRvIGdldFxuICogQHBhcmFtICAgICBvcHRpb25zICBvcHRpb25hbC4gU2VlIElucHV0T3B0aW9ucy5cbiAqIEByZXR1cm5zICAgYm9vbGVhblxuICovXG5mdW5jdGlvbiBnZXRCb29sZWFuSW5wdXQobmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHRydWVWYWx1ZSA9IFsndHJ1ZScsICdUcnVlJywgJ1RSVUUnXTtcbiAgICBjb25zdCBmYWxzZVZhbHVlID0gWydmYWxzZScsICdGYWxzZScsICdGQUxTRSddO1xuICAgIGNvbnN0IHZhbCA9IGdldElucHV0KG5hbWUsIG9wdGlvbnMpO1xuICAgIGlmICh0cnVlVmFsdWUuaW5jbHVkZXModmFsKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKGZhbHNlVmFsdWUuaW5jbHVkZXModmFsKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYElucHV0IGRvZXMgbm90IG1lZXQgWUFNTCAxLjIgXCJDb3JlIFNjaGVtYVwiIHNwZWNpZmljYXRpb246ICR7bmFtZX1cXG5gICtcbiAgICAgICAgYFN1cHBvcnQgYm9vbGVhbiBpbnB1dCBsaXN0OiBcXGB0cnVlIHwgVHJ1ZSB8IFRSVUUgfCBmYWxzZSB8IEZhbHNlIHwgRkFMU0VcXGBgKTtcbn1cbmV4cG9ydHMuZ2V0Qm9vbGVhbklucHV0ID0gZ2V0Qm9vbGVhbklucHV0O1xuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBvZiBhbiBvdXRwdXQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBvdXRwdXQgdG8gc2V0XG4gKiBAcGFyYW0gICAgIHZhbHVlICAgIHZhbHVlIHRvIHN0b3JlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHNldE91dHB1dChuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9PVVRQVVQnXSB8fCAnJztcbiAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnT1VUUFVUJywgKDAsIGZpbGVfY29tbWFuZF8xLnByZXBhcmVLZXlWYWx1ZU1lc3NhZ2UpKG5hbWUsIHZhbHVlKSk7XG4gICAgfVxuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG9zLkVPTCk7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdzZXQtb3V0cHV0JywgeyBuYW1lIH0sICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKSh2YWx1ZSkpO1xufVxuZXhwb3J0cy5zZXRPdXRwdXQgPSBzZXRPdXRwdXQ7XG4vKipcbiAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGVjaG9pbmcgb2YgY29tbWFuZHMgaW50byBzdGRvdXQgZm9yIHRoZSByZXN0IG9mIHRoZSBzdGVwLlxuICogRWNob2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGlmIEFDVElPTlNfU1RFUF9ERUJVRyBpcyBub3Qgc2V0LlxuICpcbiAqL1xuZnVuY3Rpb24gc2V0Q29tbWFuZEVjaG8oZW5hYmxlZCkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdlY2hvJywgZW5hYmxlZCA/ICdvbicgOiAnb2ZmJyk7XG59XG5leHBvcnRzLnNldENvbW1hbmRFY2hvID0gc2V0Q29tbWFuZEVjaG87XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXN1bHRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNldHMgdGhlIGFjdGlvbiBzdGF0dXMgdG8gZmFpbGVkLlxuICogV2hlbiB0aGUgYWN0aW9uIGV4aXRzIGl0IHdpbGwgYmUgd2l0aCBhbiBleGl0IGNvZGUgb2YgMVxuICogQHBhcmFtIG1lc3NhZ2UgYWRkIGVycm9yIGlzc3VlIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gc2V0RmFpbGVkKG1lc3NhZ2UpIHtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gRXhpdENvZGUuRmFpbHVyZTtcbiAgICBlcnJvcihtZXNzYWdlKTtcbn1cbmV4cG9ydHMuc2V0RmFpbGVkID0gc2V0RmFpbGVkO1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9nZ2luZyBDb21tYW5kc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLyoqXG4gKiBHZXRzIHdoZXRoZXIgQWN0aW9ucyBTdGVwIERlYnVnIGlzIG9uIG9yIG5vdFxuICovXG5mdW5jdGlvbiBpc0RlYnVnKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnUlVOTkVSX0RFQlVHJ10gPT09ICcxJztcbn1cbmV4cG9ydHMuaXNEZWJ1ZyA9IGlzRGVidWc7XG4vKipcbiAqIFdyaXRlcyBkZWJ1ZyBtZXNzYWdlIHRvIHVzZXIgbG9nXG4gKiBAcGFyYW0gbWVzc2FnZSBkZWJ1ZyBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGRlYnVnKG1lc3NhZ2UpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2RlYnVnJywge30sIG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5kZWJ1ZyA9IGRlYnVnO1xuLyoqXG4gKiBBZGRzIGFuIGVycm9yIGlzc3VlXG4gKiBAcGFyYW0gbWVzc2FnZSBlcnJvciBpc3N1ZSBtZXNzYWdlLiBFcnJvcnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHZpYSB0b1N0cmluZygpXG4gKiBAcGFyYW0gcHJvcGVydGllcyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGFkZCB0byB0aGUgYW5ub3RhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZXJyb3IobWVzc2FnZSwgcHJvcGVydGllcyA9IHt9KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdlcnJvcicsICgwLCB1dGlsc18xLnRvQ29tbWFuZFByb3BlcnRpZXMpKHByb3BlcnRpZXMpLCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IgPyBtZXNzYWdlLnRvU3RyaW5nKCkgOiBtZXNzYWdlKTtcbn1cbmV4cG9ydHMuZXJyb3IgPSBlcnJvcjtcbi8qKlxuICogQWRkcyBhIHdhcm5pbmcgaXNzdWVcbiAqIEBwYXJhbSBtZXNzYWdlIHdhcm5pbmcgaXNzdWUgbWVzc2FnZS4gRXJyb3JzIHdpbGwgYmUgY29udmVydGVkIHRvIHN0cmluZyB2aWEgdG9TdHJpbmcoKVxuICogQHBhcmFtIHByb3BlcnRpZXMgb3B0aW9uYWwgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIGFubm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSwgcHJvcGVydGllcyA9IHt9KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCd3YXJuaW5nJywgKDAsIHV0aWxzXzEudG9Db21tYW5kUHJvcGVydGllcykocHJvcGVydGllcyksIG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciA/IG1lc3NhZ2UudG9TdHJpbmcoKSA6IG1lc3NhZ2UpO1xufVxuZXhwb3J0cy53YXJuaW5nID0gd2FybmluZztcbi8qKlxuICogQWRkcyBhIG5vdGljZSBpc3N1ZVxuICogQHBhcmFtIG1lc3NhZ2Ugbm90aWNlIGlzc3VlIG1lc3NhZ2UuIEVycm9ycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgdmlhIHRvU3RyaW5nKClcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBub3RpY2UobWVzc2FnZSwgcHJvcGVydGllcyA9IHt9KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdub3RpY2UnLCAoMCwgdXRpbHNfMS50b0NvbW1hbmRQcm9wZXJ0aWVzKShwcm9wZXJ0aWVzKSwgbWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yID8gbWVzc2FnZS50b1N0cmluZygpIDogbWVzc2FnZSk7XG59XG5leHBvcnRzLm5vdGljZSA9IG5vdGljZTtcbi8qKlxuICogV3JpdGVzIGluZm8gdG8gbG9nIHdpdGggY29uc29sZS5sb2cuXG4gKiBAcGFyYW0gbWVzc2FnZSBpbmZvIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gaW5mbyhtZXNzYWdlKSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUobWVzc2FnZSArIG9zLkVPTCk7XG59XG5leHBvcnRzLmluZm8gPSBpbmZvO1xuLyoqXG4gKiBCZWdpbiBhbiBvdXRwdXQgZ3JvdXAuXG4gKlxuICogT3V0cHV0IHVudGlsIHRoZSBuZXh0IGBncm91cEVuZGAgd2lsbCBiZSBmb2xkYWJsZSBpbiB0aGlzIGdyb3VwXG4gKlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBncm91cFxuICovXG5mdW5jdGlvbiBzdGFydEdyb3VwKG5hbWUpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlKSgnZ3JvdXAnLCBuYW1lKTtcbn1cbmV4cG9ydHMuc3RhcnRHcm91cCA9IHN0YXJ0R3JvdXA7XG4vKipcbiAqIEVuZCBhbiBvdXRwdXQgZ3JvdXAuXG4gKi9cbmZ1bmN0aW9uIGVuZEdyb3VwKCkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdlbmRncm91cCcpO1xufVxuZXhwb3J0cy5lbmRHcm91cCA9IGVuZEdyb3VwO1xuLyoqXG4gKiBXcmFwIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjYWxsIGluIGEgZ3JvdXAuXG4gKlxuICogUmV0dXJucyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBmdW5jdGlvbiBpdHNlbGYuXG4gKlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGdyb3VwXG4gKiBAcGFyYW0gZm4gVGhlIGZ1bmN0aW9uIHRvIHdyYXAgaW4gdGhlIGdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdyb3VwKG5hbWUsIGZuKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgc3RhcnRHcm91cChuYW1lKTtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBlbmRHcm91cCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG59XG5leHBvcnRzLmdyb3VwID0gZ3JvdXA7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBXcmFwcGVyIGFjdGlvbiBzdGF0ZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLyoqXG4gKiBTYXZlcyBzdGF0ZSBmb3IgY3VycmVudCBhY3Rpb24sIHRoZSBzdGF0ZSBjYW4gb25seSBiZSByZXRyaWV2ZWQgYnkgdGhpcyBhY3Rpb24ncyBwb3N0IGpvYiBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBzdGF0ZSB0byBzdG9yZVxuICogQHBhcmFtICAgICB2YWx1ZSAgICB2YWx1ZSB0byBzdG9yZS4gTm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdmlhIEpTT04uc3RyaW5naWZ5XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBzYXZlU3RhdGUobmFtZSwgdmFsdWUpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHByb2Nlc3MuZW52WydHSVRIVUJfU1RBVEUnXSB8fCAnJztcbiAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnU1RBVEUnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdzYXZlLXN0YXRlJywgeyBuYW1lIH0sICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKSh2YWx1ZSkpO1xufVxuZXhwb3J0cy5zYXZlU3RhdGUgPSBzYXZlU3RhdGU7XG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGFuIHN0YXRlIHNldCBieSB0aGlzIGFjdGlvbidzIG1haW4gZXhlY3V0aW9uLlxuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgc3RhdGUgdG8gZ2V0XG4gKiBAcmV0dXJucyAgIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRTdGF0ZShuYW1lKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W2BTVEFURV8ke25hbWV9YF0gfHwgJyc7XG59XG5leHBvcnRzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG5mdW5jdGlvbiBnZXRJRFRva2VuKGF1ZCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBvaWRjX3V0aWxzXzEuT2lkY0NsaWVudC5nZXRJRFRva2VuKGF1ZCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldElEVG9rZW4gPSBnZXRJRFRva2VuO1xuLyoqXG4gKiBTdW1tYXJ5IGV4cG9ydHNcbiAqL1xudmFyIHN1bW1hcnlfMSA9IHJlcXVpcmUoXCIuL3N1bW1hcnlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdW1tYXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdW1tYXJ5XzEuc3VtbWFyeTsgfSB9KTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIGNvcmUuc3VtbWFyeVxuICovXG52YXIgc3VtbWFyeV8yID0gcmVxdWlyZShcIi4vc3VtbWFyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcmtkb3duU3VtbWFyeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3VtbWFyeV8yLm1hcmtkb3duU3VtbWFyeTsgfSB9KTtcbi8qKlxuICogUGF0aCBleHBvcnRzXG4gKi9cbnZhciBwYXRoX3V0aWxzXzEgPSByZXF1aXJlKFwiLi9wYXRoLXV0aWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9Qb3NpeFBhdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhdGhfdXRpbHNfMS50b1Bvc2l4UGF0aDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRvV2luMzJQYXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXRoX3V0aWxzXzEudG9XaW4zMlBhdGg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b1BsYXRmb3JtUGF0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGF0aF91dGlsc18xLnRvUGxhdGZvcm1QYXRoOyB9IH0pO1xuLyoqXG4gKiBQbGF0Zm9ybSB1dGlsaXRpZXMgZXhwb3J0c1xuICovXG5leHBvcnRzLnBsYXRmb3JtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtUaW1lb3V0ID0gZXhwb3J0cy5nZXRDb25jdXJyZW5jeSA9IGV4cG9ydHMuZ2V0R2l0SHViV29ya3NwYWNlRGlyID0gZXhwb3J0cy5pc0doZXMgPSBleHBvcnRzLmdldFJlc3VsdHNTZXJ2aWNlVXJsID0gZXhwb3J0cy5nZXRSdW50aW1lVG9rZW4gPSBleHBvcnRzLmdldFVwbG9hZENodW5rU2l6ZSA9IHZvaWQgMDtcbmNvbnN0IG9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm9zXCIpKTtcbi8vIFVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSBoaWdoV2F0ZXJNYXJrIHZhbHVlIG9mIHRoZSB6aXAgdGhhdCBpcyBiZWluZyBzdHJlYW1lZFxuLy8gVGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBhcyB0aGUgY2h1bmsgc2l6ZSB0aGF0IGlzIHVzZSBkdXJpbmcgdXBsb2FkIHRvIGJsb2Igc3RvcmFnZVxuZnVuY3Rpb24gZ2V0VXBsb2FkQ2h1bmtTaXplKCkge1xuICAgIHJldHVybiA4ICogMTAyNCAqIDEwMjQ7IC8vIDggTUIgQ2h1bmtzXG59XG5leHBvcnRzLmdldFVwbG9hZENodW5rU2l6ZSA9IGdldFVwbG9hZENodW5rU2l6ZTtcbmZ1bmN0aW9uIGdldFJ1bnRpbWVUb2tlbigpIHtcbiAgICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52WydBQ1RJT05TX1JVTlRJTUVfVE9LRU4nXTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCB0aGUgQUNUSU9OU19SVU5USU1FX1RPS0VOIGVudiB2YXJpYWJsZScpO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW47XG59XG5leHBvcnRzLmdldFJ1bnRpbWVUb2tlbiA9IGdldFJ1bnRpbWVUb2tlbjtcbmZ1bmN0aW9uIGdldFJlc3VsdHNTZXJ2aWNlVXJsKCkge1xuICAgIGNvbnN0IHJlc3VsdHNVcmwgPSBwcm9jZXNzLmVudlsnQUNUSU9OU19SRVNVTFRTX1VSTCddO1xuICAgIGlmICghcmVzdWx0c1VybCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBnZXQgdGhlIEFDVElPTlNfUkVTVUxUU19VUkwgZW52IHZhcmlhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVVJMKHJlc3VsdHNVcmwpLm9yaWdpbjtcbn1cbmV4cG9ydHMuZ2V0UmVzdWx0c1NlcnZpY2VVcmwgPSBnZXRSZXN1bHRzU2VydmljZVVybDtcbmZ1bmN0aW9uIGlzR2hlcygpIHtcbiAgICBjb25zdCBnaFVybCA9IG5ldyBVUkwocHJvY2Vzcy5lbnZbJ0dJVEhVQl9TRVJWRVJfVVJMJ10gfHwgJ2h0dHBzOi8vZ2l0aHViLmNvbScpO1xuICAgIGNvbnN0IGhvc3RuYW1lID0gZ2hVcmwuaG9zdG5hbWUudHJpbUVuZCgpLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgaXNHaXRIdWJIb3N0ID0gaG9zdG5hbWUgPT09ICdHSVRIVUIuQ09NJztcbiAgICBjb25zdCBpc0doZUhvc3QgPSBob3N0bmFtZS5lbmRzV2l0aCgnLkdIRS5DT00nKTtcbiAgICBjb25zdCBpc0xvY2FsSG9zdCA9IGhvc3RuYW1lLmVuZHNXaXRoKCcuTE9DQUxIT1NUJyk7XG4gICAgcmV0dXJuICFpc0dpdEh1Ykhvc3QgJiYgIWlzR2hlSG9zdCAmJiAhaXNMb2NhbEhvc3Q7XG59XG5leHBvcnRzLmlzR2hlcyA9IGlzR2hlcztcbmZ1bmN0aW9uIGdldEdpdEh1YldvcmtzcGFjZURpcigpIHtcbiAgICBjb25zdCBnaFdvcmtzcGFjZURpciA9IHByb2Nlc3MuZW52WydHSVRIVUJfV09SS1NQQUNFJ107XG4gICAgaWYgKCFnaFdvcmtzcGFjZURpcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBnZXQgdGhlIEdJVEhVQl9XT1JLU1BBQ0UgZW52IHZhcmlhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiBnaFdvcmtzcGFjZURpcjtcbn1cbmV4cG9ydHMuZ2V0R2l0SHViV29ya3NwYWNlRGlyID0gZ2V0R2l0SHViV29ya3NwYWNlRGlyO1xuLy8gTWltaWNzIGJlaGF2aW9yIG9mIGF6Y29weTogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3N0b3JhZ2UvY29tbW9uL3N0b3JhZ2UtdXNlLWF6Y29weS1vcHRpbWl6ZVxuLy8gSWYgeW91ciBtYWNoaW5lIGhhcyBmZXdlciB0aGFuIDUgQ1BVcywgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gMzIuXG4vLyBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGVxdWFsIHRvIDE2IG11bHRpcGxpZWQgYnkgdGhlIG51bWJlciBvZiBDUFVzLiBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIDMwMC5cbmZ1bmN0aW9uIGdldENvbmN1cnJlbmN5KCkge1xuICAgIGNvbnN0IG51bUNQVXMgPSBvc18xLmRlZmF1bHQuY3B1cygpLmxlbmd0aDtcbiAgICBpZiAobnVtQ1BVcyA8PSA0KSB7XG4gICAgICAgIHJldHVybiAzMjtcbiAgICB9XG4gICAgY29uc3QgY29uY3VycmVuY3kgPSAxNiAqIG51bUNQVXM7XG4gICAgcmV0dXJuIGNvbmN1cnJlbmN5ID4gMzAwID8gMzAwIDogY29uY3VycmVuY3k7XG59XG5leHBvcnRzLmdldENvbmN1cnJlbmN5ID0gZ2V0Q29uY3VycmVuY3k7XG5mdW5jdGlvbiBnZXRVcGxvYWRDaHVua1RpbWVvdXQoKSB7XG4gICAgcmV0dXJuIDMwMDAwMDsgLy8gNSBtaW51dGVzXG59XG5leHBvcnRzLmdldFVwbG9hZENodW5rVGltZW91dCA9IGdldFVwbG9hZENodW5rVGltZW91dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0pzb25PYmplY3QgPSBleHBvcnRzLnR5cGVvZkpzb25WYWx1ZSA9IHZvaWQgMDtcbi8qKlxuICogR2V0IHRoZSB0eXBlIG9mIGEgSlNPTiB2YWx1ZS5cbiAqIERpc3Rpbmd1aXNoZXMgYmV0d2VlbiBhcnJheSwgbnVsbCBhbmQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiB0eXBlb2ZKc29uVmFsdWUodmFsdWUpIHtcbiAgICBsZXQgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICBpZiAodCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59XG5leHBvcnRzLnR5cGVvZkpzb25WYWx1ZSA9IHR5cGVvZkpzb25WYWx1ZTtcbi8qKlxuICogSXMgdGhpcyBhIEpTT04gb2JqZWN0IChpbnN0ZWFkIG9mIGFuIGFycmF5IG9yIG51bGwpP1xuICovXG5mdW5jdGlvbiBpc0pzb25PYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0cy5pc0pzb25PYmplY3QgPSBpc0pzb25PYmplY3Q7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iYXNlNjRlbmNvZGUgPSBleHBvcnRzLmJhc2U2NGRlY29kZSA9IHZvaWQgMDtcbi8vIGxvb2t1cCB0YWJsZSBmcm9tIGJhc2U2NCBjaGFyYWN0ZXIgdG8gYnl0ZVxubGV0IGVuY1RhYmxlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcbi8vIGxvb2t1cCB0YWJsZSBmcm9tIGJhc2U2NCBjaGFyYWN0ZXIgKmNvZGUqIHRvIGJ5dGUgYmVjYXVzZSBsb29rdXAgYnkgbnVtYmVyIGlzIGZhc3RcbmxldCBkZWNUYWJsZSA9IFtdO1xuZm9yIChsZXQgaSA9IDA7IGkgPCBlbmNUYWJsZS5sZW5ndGg7IGkrKylcbiAgICBkZWNUYWJsZVtlbmNUYWJsZVtpXS5jaGFyQ29kZUF0KDApXSA9IGk7XG4vLyBzdXBwb3J0IGJhc2U2NHVybCB2YXJpYW50c1xuZGVjVGFibGVbXCItXCIuY2hhckNvZGVBdCgwKV0gPSBlbmNUYWJsZS5pbmRleE9mKFwiK1wiKTtcbmRlY1RhYmxlW1wiX1wiLmNoYXJDb2RlQXQoMCldID0gZW5jVGFibGUuaW5kZXhPZihcIi9cIik7XG4vKipcbiAqIERlY29kZXMgYSBiYXNlNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheS5cbiAqXG4gKiAtIGlnbm9yZXMgd2hpdGUtc3BhY2UsIGluY2x1ZGluZyBsaW5lIGJyZWFrcyBhbmQgdGFic1xuICogLSBhbGxvd3MgaW5uZXIgcGFkZGluZyAoY2FuIGRlY29kZSBjb25jYXRlbmF0ZWQgYmFzZTY0IHN0cmluZ3MpXG4gKiAtIGRvZXMgbm90IHJlcXVpcmUgcGFkZGluZ1xuICogLSB1bmRlcnN0YW5kcyBiYXNlNjR1cmwgZW5jb2Rpbmc6XG4gKiAgIFwiLVwiIGluc3RlYWQgb2YgXCIrXCIsXG4gKiAgIFwiX1wiIGluc3RlYWQgb2YgXCIvXCIsXG4gKiAgIG5vIHBhZGRpbmdcbiAqL1xuZnVuY3Rpb24gYmFzZTY0ZGVjb2RlKGJhc2U2NFN0cikge1xuICAgIC8vIGVzdGltYXRlIGJ5dGUgc2l6ZSwgbm90IGFjY291bnRpbmcgZm9yIGlubmVyIHBhZGRpbmcgYW5kIHdoaXRlc3BhY2VcbiAgICBsZXQgZXMgPSBiYXNlNjRTdHIubGVuZ3RoICogMyAvIDQ7XG4gICAgLy8gaWYgKGVzICUgMyAhPT0gMClcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTY0IHN0cmluZycpO1xuICAgIGlmIChiYXNlNjRTdHJbYmFzZTY0U3RyLmxlbmd0aCAtIDJdID09ICc9JylcbiAgICAgICAgZXMgLT0gMjtcbiAgICBlbHNlIGlmIChiYXNlNjRTdHJbYmFzZTY0U3RyLmxlbmd0aCAtIDFdID09ICc9JylcbiAgICAgICAgZXMgLT0gMTtcbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheShlcyksIGJ5dGVQb3MgPSAwLCAvLyBwb3NpdGlvbiBpbiBieXRlIGFycmF5XG4gICAgZ3JvdXBQb3MgPSAwLCAvLyBwb3NpdGlvbiBpbiBiYXNlNjQgZ3JvdXBcbiAgICBiLCAvLyBjdXJyZW50IGJ5dGVcbiAgICBwID0gMCAvLyBwcmV2aW91cyBieXRlXG4gICAgO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFzZTY0U3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGIgPSBkZWNUYWJsZVtiYXNlNjRTdHIuY2hhckNvZGVBdChpKV07XG4gICAgICAgIGlmIChiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgICAgIHN3aXRjaCAoYmFzZTY0U3RyW2ldKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnPSc6XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMDsgLy8gcmVzZXQgc3RhdGUgd2hlbiBwYWRkaW5nIGZvdW5kXG4gICAgICAgICAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgICAgICAgICBjYXNlICdcXHInOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1xcdCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIHdoaXRlLXNwYWNlLCBhbmQgcGFkZGluZ1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBpbnZhbGlkIGJhc2U2NCBzdHJpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChncm91cFBvcykge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHAgPSBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBieXRlc1tieXRlUG9zKytdID0gcCA8PCAyIHwgKGIgJiA0OCkgPj4gNDtcbiAgICAgICAgICAgICAgICBwID0gYjtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgYnl0ZXNbYnl0ZVBvcysrXSA9IChwICYgMTUpIDw8IDQgfCAoYiAmIDYwKSA+PiAyO1xuICAgICAgICAgICAgICAgIHAgPSBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBieXRlc1tieXRlUG9zKytdID0gKHAgJiAzKSA8PCA2IHwgYjtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGdyb3VwUG9zID09IDEpXG4gICAgICAgIHRocm93IEVycm9yKGBpbnZhbGlkIGJhc2U2NCBzdHJpbmcuYCk7XG4gICAgcmV0dXJuIGJ5dGVzLnN1YmFycmF5KDAsIGJ5dGVQb3MpO1xufVxuZXhwb3J0cy5iYXNlNjRkZWNvZGUgPSBiYXNlNjRkZWNvZGU7XG4vKipcbiAqIEVuY29kZXMgYSBieXRlIGFycmF5IHRvIGEgYmFzZTY0IHN0cmluZy5cbiAqIEFkZHMgcGFkZGluZyBhdCB0aGUgZW5kLlxuICogRG9lcyBub3QgaW5zZXJ0IG5ld2xpbmVzLlxuICovXG5mdW5jdGlvbiBiYXNlNjRlbmNvZGUoYnl0ZXMpIHtcbiAgICBsZXQgYmFzZTY0ID0gJycsIGdyb3VwUG9zID0gMCwgLy8gcG9zaXRpb24gaW4gYmFzZTY0IGdyb3VwXG4gICAgYiwgLy8gY3VycmVudCBieXRlXG4gICAgcCA9IDA7IC8vIGNhcnJ5IG92ZXIgZnJvbSBwcmV2aW91cyBieXRlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBiID0gYnl0ZXNbaV07XG4gICAgICAgIHN3aXRjaCAoZ3JvdXBQb3MpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbYiA+PiAyXTtcbiAgICAgICAgICAgICAgICBwID0gKGIgJiAzKSA8PCA0O1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbcCB8IGIgPj4gNF07XG4gICAgICAgICAgICAgICAgcCA9IChiICYgMTUpIDw8IDI7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtwIHwgYiA+PiA2XTtcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbYiAmIDYzXTtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gcGFkZGluZyByZXF1aXJlZD9cbiAgICBpZiAoZ3JvdXBQb3MpIHtcbiAgICAgICAgYmFzZTY0ICs9IGVuY1RhYmxlW3BdO1xuICAgICAgICBiYXNlNjQgKz0gJz0nO1xuICAgICAgICBpZiAoZ3JvdXBQb3MgPT0gMSlcbiAgICAgICAgICAgIGJhc2U2NCArPSAnPSc7XG4gICAgfVxuICAgIHJldHVybiBiYXNlNjQ7XG59XG5leHBvcnRzLmJhc2U2NGVuY29kZSA9IGJhc2U2NGVuY29kZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIERhbmllbCBXaXJ0eiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4vLyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbi8vICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuLy8gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuLy8gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIGl0cyBhdXRob3IsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9yc1xuLy8gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmVcbi8vICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51dGY4cmVhZCA9IHZvaWQgMDtcbmNvbnN0IGZyb21DaGFyQ29kZXMgPSAoY2h1bmspID0+IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuayk7XG4vKipcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gd2lsbCBubyBsb25nZXIgYmUgZXhwb3J0ZWQgd2l0aCB0aGUgbmV4dCBtYWpvclxuICogcmVsZWFzZSwgc2luY2UgcHJvdG9idWYtdHMgaGFzIHN3aXRjaCB0byBUZXh0RGVjb2RlciBBUEkuIElmIHlvdSBuZWVkIHRoaXNcbiAqIGZ1bmN0aW9uLCBwbGVhc2UgbWlncmF0ZSB0byBAcHJvdG9idWZqcy91dGY4LiBGb3IgY29udGV4dCwgc2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGltb3N0YW1tL3Byb3RvYnVmLXRzL2lzc3Vlcy8xODRcbiAqXG4gKiBSZWFkcyBVVEY4IGJ5dGVzIGFzIGEgc3RyaW5nLlxuICpcbiAqIFNlZSBbcHJvdG9idWZqcyAvIHV0ZjhdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2J1ZmpzL3Byb3RvYnVmLmpzL2Jsb2IvOTg5M2UzNWI4NTQ2MjFjY2U2NGFmNGJmNmJlMmNmZjRmYjg5Mjc5Ni9saWIvdXRmOC9pbmRleC5qcyNMNDApXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LCBEYW5pZWwgV2lydHpcbiAqL1xuZnVuY3Rpb24gdXRmOHJlYWQoYnl0ZXMpIHtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoIDwgMSlcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgbGV0IHBvcyA9IDAsIC8vIHBvc2l0aW9uIGluIGJ5dGVzXG4gICAgcGFydHMgPSBbXSwgY2h1bmsgPSBbXSwgaSA9IDAsIC8vIGNoYXIgb2Zmc2V0XG4gICAgdDsgLy8gdGVtcG9yYXJ5XG4gICAgbGV0IGxlbiA9IGJ5dGVzLmxlbmd0aDtcbiAgICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgICAgIHQgPSBieXRlc1twb3MrK107XG4gICAgICAgIGlmICh0IDwgMTI4KVxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IHQ7XG4gICAgICAgIGVsc2UgaWYgKHQgPiAxOTEgJiYgdCA8IDIyNClcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAodCAmIDMxKSA8PCA2IHwgYnl0ZXNbcG9zKytdICYgNjM7XG4gICAgICAgIGVsc2UgaWYgKHQgPiAyMzkgJiYgdCA8IDM2NSkge1xuICAgICAgICAgICAgdCA9ICgodCAmIDcpIDw8IDE4IHwgKGJ5dGVzW3BvcysrXSAmIDYzKSA8PCAxMiB8IChieXRlc1twb3MrK10gJiA2MykgPDwgNiB8IGJ5dGVzW3BvcysrXSAmIDYzKSAtIDB4MTAwMDA7XG4gICAgICAgICAgICBjaHVua1tpKytdID0gMHhEODAwICsgKHQgPj4gMTApO1xuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IDB4REMwMCArICh0ICYgMTAyMyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMTUpIDw8IDEyIHwgKGJ5dGVzW3BvcysrXSAmIDYzKSA8PCA2IHwgYnl0ZXNbcG9zKytdICYgNjM7XG4gICAgICAgIGlmIChpID4gODE5MSkge1xuICAgICAgICAgICAgcGFydHMucHVzaChmcm9tQ2hhckNvZGVzKGNodW5rKSk7XG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFydHMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChpKVxuICAgICAgICAgICAgcGFydHMucHVzaChmcm9tQ2hhckNvZGVzKGNodW5rLnNsaWNlKDAsIGkpKSk7XG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbUNoYXJDb2RlcyhjaHVuay5zbGljZSgwLCBpKSk7XG59XG5leHBvcnRzLnV0ZjhyZWFkID0gdXRmOHJlYWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5XaXJlVHlwZSA9IGV4cG9ydHMubWVyZ2VCaW5hcnlPcHRpb25zID0gZXhwb3J0cy5Vbmtub3duRmllbGRIYW5kbGVyID0gdm9pZCAwO1xuLyoqXG4gKiBUaGlzIGhhbmRsZXIgaW1wbGVtZW50cyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIHVua25vd24gZmllbGRzLlxuICogV2hlbiByZWFkaW5nIGRhdGEsIHVua25vd24gZmllbGRzIGFyZSBzdG9yZWQgb24gdGhlIG1lc3NhZ2UsIGluIGFcbiAqIHN5bWJvbCBwcm9wZXJ0eS5cbiAqIFdoZW4gd3JpdGluZyBkYXRhLCB0aGUgc3ltYm9sIHByb3BlcnR5IGlzIHF1ZXJpZWQgYW5kIHVua25vd24gZmllbGRzXG4gKiBhcmUgc2VyaWFsaXplZCBpbnRvIHRoZSBvdXRwdXQgYWdhaW4uXG4gKi9cbnZhciBVbmtub3duRmllbGRIYW5kbGVyO1xuKGZ1bmN0aW9uIChVbmtub3duRmllbGRIYW5kbGVyKSB7XG4gICAgLyoqXG4gICAgICogVGhlIHN5bWJvbCB1c2VkIHRvIHN0b3JlIHVua25vd24gZmllbGRzIGZvciBhIG1lc3NhZ2UuXG4gICAgICogVGhlIHByb3BlcnR5IG11c3QgY29uZm9ybSB0byBgVW5rbm93bkZpZWxkQ29udGFpbmVyYC5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbCA9IFN5bWJvbC5mb3IoXCJwcm90b2J1Zi10cy91bmtub3duXCIpO1xuICAgIC8qKlxuICAgICAqIFN0b3JlIGFuIHVua25vd24gZmllbGQgZHVyaW5nIGJpbmFyeSByZWFkIGRpcmVjdGx5IG9uIHRoZSBtZXNzYWdlLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNvbXBhdGlibGUgd2l0aCBgQmluYXJ5UmVhZE9wdGlvbnMucmVhZFVua25vd25GaWVsZGAuXG4gICAgICovXG4gICAgVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgPSAodHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkYXRhKSA9PiB7XG4gICAgICAgIGxldCBjb250YWluZXIgPSBpcyhtZXNzYWdlKSA/IG1lc3NhZ2VbVW5rbm93bkZpZWxkSGFuZGxlci5zeW1ib2xdIDogbWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF0gPSBbXTtcbiAgICAgICAgY29udGFpbmVyLnB1c2goeyBubzogZmllbGRObywgd2lyZVR5cGUsIGRhdGEgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBXcml0ZSB1bmtub3duIGZpZWxkcyBzdG9yZWQgZm9yIHRoZSBtZXNzYWdlIHRvIHRoZSB3cml0ZXIuXG4gICAgICogVGhpcyBtZXRob2QgaXMgY29tcGF0aWJsZSB3aXRoIGBCaW5hcnlXcml0ZU9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzYC5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgPSAodHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcikgPT4ge1xuICAgICAgICBmb3IgKGxldCB7IG5vLCB3aXJlVHlwZSwgZGF0YSB9IG9mIFVua25vd25GaWVsZEhhbmRsZXIubGlzdChtZXNzYWdlKSlcbiAgICAgICAgICAgIHdyaXRlci50YWcobm8sIHdpcmVUeXBlKS5yYXcoZGF0YSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBMaXN0IHVua25vd24gZmllbGRzIHN0b3JlZCBmb3IgdGhlIG1lc3NhZ2UuXG4gICAgICogTm90ZSB0aGF0IHRoZXJlIG1heSBiZSBtdWx0aXBsZXMgZmllbGRzIHdpdGggdGhlIHNhbWUgbnVtYmVyLlxuICAgICAqL1xuICAgIFVua25vd25GaWVsZEhhbmRsZXIubGlzdCA9IChtZXNzYWdlLCBmaWVsZE5vKSA9PiB7XG4gICAgICAgIGlmIChpcyhtZXNzYWdlKSkge1xuICAgICAgICAgICAgbGV0IGFsbCA9IG1lc3NhZ2VbVW5rbm93bkZpZWxkSGFuZGxlci5zeW1ib2xdO1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkTm8gPyBhbGwuZmlsdGVyKHVmID0+IHVmLm5vID09IGZpZWxkTm8pIDogYWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxhc3QgdW5rbm93biBmaWVsZCBieSBmaWVsZCBudW1iZXIuXG4gICAgICovXG4gICAgVW5rbm93bkZpZWxkSGFuZGxlci5sYXN0ID0gKG1lc3NhZ2UsIGZpZWxkTm8pID0+IFVua25vd25GaWVsZEhhbmRsZXIubGlzdChtZXNzYWdlLCBmaWVsZE5vKS5zbGljZSgtMSlbMF07XG4gICAgY29uc3QgaXMgPSAobWVzc2FnZSkgPT4gbWVzc2FnZSAmJiBBcnJheS5pc0FycmF5KG1lc3NhZ2VbVW5rbm93bkZpZWxkSGFuZGxlci5zeW1ib2xdKTtcbn0pKFVua25vd25GaWVsZEhhbmRsZXIgPSBleHBvcnRzLlVua25vd25GaWVsZEhhbmRsZXIgfHwgKGV4cG9ydHMuVW5rbm93bkZpZWxkSGFuZGxlciA9IHt9KSk7XG4vKipcbiAqIE1lcmdlcyBiaW5hcnkgd3JpdGUgb3IgcmVhZCBvcHRpb25zLiBMYXRlciB2YWx1ZXMgb3ZlcnJpZGUgZWFybGllciB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQmluYXJ5T3B0aW9ucyhhLCBiKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpO1xufVxuZXhwb3J0cy5tZXJnZUJpbmFyeU9wdGlvbnMgPSBtZXJnZUJpbmFyeU9wdGlvbnM7XG4vKipcbiAqIFByb3RvYnVmIGJpbmFyeSBmb3JtYXQgd2lyZSB0eXBlcy5cbiAqXG4gKiBBIHdpcmUgdHlwZSBwcm92aWRlcyBqdXN0IGVub3VnaCBpbmZvcm1hdGlvbiB0byBmaW5kIHRoZSBsZW5ndGggb2YgdGhlXG4gKiBmb2xsb3dpbmcgdmFsdWUuXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9lbmNvZGluZyNzdHJ1Y3R1cmVcbiAqL1xudmFyIFdpcmVUeXBlO1xuKGZ1bmN0aW9uIChXaXJlVHlwZSkge1xuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGludDMyLCBpbnQ2NCwgdWludDMyLCB1aW50NjQsIHNpbnQzMiwgc2ludDY0LCBib29sLCBlbnVtXG4gICAgICovXG4gICAgV2lyZVR5cGVbV2lyZVR5cGVbXCJWYXJpbnRcIl0gPSAwXSA9IFwiVmFyaW50XCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgZml4ZWQ2NCwgc2ZpeGVkNjQsIGRvdWJsZS5cbiAgICAgKiBBbHdheXMgOCBieXRlcyB3aXRoIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlci5cbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIkJpdDY0XCJdID0gMV0gPSBcIkJpdDY0XCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3Igc3RyaW5nLCBieXRlcywgZW1iZWRkZWQgbWVzc2FnZXMsIHBhY2tlZCByZXBlYXRlZCBmaWVsZHNcbiAgICAgKlxuICAgICAqIE9ubHkgcmVwZWF0ZWQgbnVtZXJpYyB0eXBlcyAodHlwZXMgd2hpY2ggdXNlIHRoZSB2YXJpbnQsIDMyLWJpdCxcbiAgICAgKiBvciA2NC1iaXQgd2lyZSB0eXBlcykgY2FuIGJlIHBhY2tlZC4gSW4gcHJvdG8zLCBzdWNoIGZpZWxkcyBhcmVcbiAgICAgKiBwYWNrZWQgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIkxlbmd0aERlbGltaXRlZFwiXSA9IDJdID0gXCJMZW5ndGhEZWxpbWl0ZWRcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBncm91cHNcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiU3RhcnRHcm91cFwiXSA9IDNdID0gXCJTdGFydEdyb3VwXCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgZ3JvdXBzXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIkVuZEdyb3VwXCJdID0gNF0gPSBcIkVuZEdyb3VwXCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgZml4ZWQzMiwgc2ZpeGVkMzIsIGZsb2F0LlxuICAgICAqIEFsd2F5cyA0IGJ5dGVzIHdpdGggbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyLlxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiQml0MzJcIl0gPSA1XSA9IFwiQml0MzJcIjtcbn0pKFdpcmVUeXBlID0gZXhwb3J0cy5XaXJlVHlwZSB8fCAoZXhwb3J0cy5XaXJlVHlwZSA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4vLyBtZXQ6XG4vL1xuLy8gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyXG4vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlXG4vLyBkaXN0cmlidXRpb24uXG4vLyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbi8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy9cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbi8vIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Rcbi8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbi8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbi8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbi8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbi8vXG4vLyBDb2RlIGdlbmVyYXRlZCBieSB0aGUgUHJvdG9jb2wgQnVmZmVyIGNvbXBpbGVyIGlzIG93bmVkIGJ5IHRoZSBvd25lclxuLy8gb2YgdGhlIGlucHV0IGZpbGUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgaXQuICBUaGlzIGNvZGUgaXMgbm90XG4vLyBzdGFuZGFsb25lIGFuZCByZXF1aXJlcyBhIHN1cHBvcnQgbGlicmFyeSB0byBiZSBsaW5rZWQgd2l0aCBpdC4gIFRoaXNcbi8vIHN1cHBvcnQgbGlicmFyeSBpcyBpdHNlbGYgY292ZXJlZCBieSB0aGUgYWJvdmUgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFyaW50MzJyZWFkID0gZXhwb3J0cy52YXJpbnQzMndyaXRlID0gZXhwb3J0cy5pbnQ2NHRvU3RyaW5nID0gZXhwb3J0cy5pbnQ2NGZyb21TdHJpbmcgPSBleHBvcnRzLnZhcmludDY0d3JpdGUgPSBleHBvcnRzLnZhcmludDY0cmVhZCA9IHZvaWQgMDtcbi8qKlxuICogUmVhZCBhIDY0IGJpdCB2YXJpbnQgYXMgdHdvIEpTIG51bWJlcnMuXG4gKlxuICogUmV0dXJucyB0dXBsZTpcbiAqIFswXTogbG93IGJpdHNcbiAqIFswXTogaGlnaCBiaXRzXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi84YTcxOTI3ZDc0YTRjZTM0ZWZlMmQ4NzY5ZmRhMTk4ZjUyZDIwZDEyL2pzL2V4cGVyaW1lbnRhbC9ydW50aW1lL2tlcm5lbC9idWZmZXJfZGVjb2Rlci5qcyNMMTc1XG4gKi9cbmZ1bmN0aW9uIHZhcmludDY0cmVhZCgpIHtcbiAgICBsZXQgbG93Qml0cyA9IDA7XG4gICAgbGV0IGhpZ2hCaXRzID0gMDtcbiAgICBmb3IgKGxldCBzaGlmdCA9IDA7IHNoaWZ0IDwgMjg7IHNoaWZ0ICs9IDcpIHtcbiAgICAgICAgbGV0IGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICAgICAgbG93Qml0cyB8PSAoYiAmIDB4N0YpIDw8IHNoaWZ0O1xuICAgICAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICAgICAgcmV0dXJuIFtsb3dCaXRzLCBoaWdoQml0c107XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IG1pZGRsZUJ5dGUgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICAvLyBsYXN0IGZvdXIgYml0cyBvZiB0aGUgZmlyc3QgMzIgYml0IG51bWJlclxuICAgIGxvd0JpdHMgfD0gKG1pZGRsZUJ5dGUgJiAweDBGKSA8PCAyODtcbiAgICAvLyAzIHVwcGVyIGJpdHMgYXJlIHBhcnQgb2YgdGhlIG5leHQgMzIgYml0IG51bWJlclxuICAgIGhpZ2hCaXRzID0gKG1pZGRsZUJ5dGUgJiAweDcwKSA+PiA0O1xuICAgIGlmICgobWlkZGxlQnl0ZSAmIDB4ODApID09IDApIHtcbiAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgcmV0dXJuIFtsb3dCaXRzLCBoaWdoQml0c107XG4gICAgfVxuICAgIGZvciAobGV0IHNoaWZ0ID0gMzsgc2hpZnQgPD0gMzE7IHNoaWZ0ICs9IDcpIHtcbiAgICAgICAgbGV0IGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICAgICAgaGlnaEJpdHMgfD0gKGIgJiAweDdGKSA8PCBzaGlmdDtcbiAgICAgICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgICAgIHJldHVybiBbbG93Qml0cywgaGlnaEJpdHNdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB2YXJpbnQnKTtcbn1cbmV4cG9ydHMudmFyaW50NjRyZWFkID0gdmFyaW50NjRyZWFkO1xuLyoqXG4gKiBXcml0ZSBhIDY0IGJpdCB2YXJpbnQsIGdpdmVuIGFzIHR3byBKUyBudW1iZXJzLCB0byB0aGUgZ2l2ZW4gYnl0ZXMgYXJyYXkuXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi84YTcxOTI3ZDc0YTRjZTM0ZWZlMmQ4NzY5ZmRhMTk4ZjUyZDIwZDEyL2pzL2V4cGVyaW1lbnRhbC9ydW50aW1lL2tlcm5lbC93cml0ZXIuanMjTDM0NFxuICovXG5mdW5jdGlvbiB2YXJpbnQ2NHdyaXRlKGxvLCBoaSwgYnl0ZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI4OyBpID0gaSArIDcpIHtcbiAgICAgICAgY29uc3Qgc2hpZnQgPSBsbyA+Pj4gaTtcbiAgICAgICAgY29uc3QgaGFzTmV4dCA9ICEoKHNoaWZ0ID4+PiA3KSA9PSAwICYmIGhpID09IDApO1xuICAgICAgICBjb25zdCBieXRlID0gKGhhc05leHQgPyBzaGlmdCB8IDB4ODAgOiBzaGlmdCkgJiAweEZGO1xuICAgICAgICBieXRlcy5wdXNoKGJ5dGUpO1xuICAgICAgICBpZiAoIWhhc05leHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzcGxpdEJpdHMgPSAoKGxvID4+PiAyOCkgJiAweDBGKSB8ICgoaGkgJiAweDA3KSA8PCA0KTtcbiAgICBjb25zdCBoYXNNb3JlQml0cyA9ICEoKGhpID4+IDMpID09IDApO1xuICAgIGJ5dGVzLnB1c2goKGhhc01vcmVCaXRzID8gc3BsaXRCaXRzIHwgMHg4MCA6IHNwbGl0Qml0cykgJiAweEZGKTtcbiAgICBpZiAoIWhhc01vcmVCaXRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDM7IGkgPCAzMTsgaSA9IGkgKyA3KSB7XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gaGkgPj4+IGk7XG4gICAgICAgIGNvbnN0IGhhc05leHQgPSAhKChzaGlmdCA+Pj4gNykgPT0gMCk7XG4gICAgICAgIGNvbnN0IGJ5dGUgPSAoaGFzTmV4dCA/IHNoaWZ0IHwgMHg4MCA6IHNoaWZ0KSAmIDB4RkY7XG4gICAgICAgIGJ5dGVzLnB1c2goYnl0ZSk7XG4gICAgICAgIGlmICghaGFzTmV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJ5dGVzLnB1c2goKGhpID4+PiAzMSkgJiAweDAxKTtcbn1cbmV4cG9ydHMudmFyaW50NjR3cml0ZSA9IHZhcmludDY0d3JpdGU7XG4vLyBjb25zdGFudHMgZm9yIGJpbmFyeSBtYXRoXG5jb25zdCBUV09fUFdSXzMyX0RCTCA9ICgxIDw8IDE2KSAqICgxIDw8IDE2KTtcbi8qKlxuICogUGFyc2UgZGVjaW1hbCBzdHJpbmcgb2YgNjQgYml0IGludGVnZXIgdmFsdWUgYXMgdHdvIEpTIG51bWJlcnMuXG4gKlxuICogUmV0dXJucyB0dXBsZTpcbiAqIFswXTogbWludXMgc2lnbj9cbiAqIFsxXTogbG93IGJpdHNcbiAqIFsyXTogaGlnaCBiaXRzXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy5cbiAqL1xuZnVuY3Rpb24gaW50NjRmcm9tU3RyaW5nKGRlYykge1xuICAgIC8vIENoZWNrIGZvciBtaW51cyBzaWduLlxuICAgIGxldCBtaW51cyA9IGRlY1swXSA9PSAnLSc7XG4gICAgaWYgKG1pbnVzKVxuICAgICAgICBkZWMgPSBkZWMuc2xpY2UoMSk7XG4gICAgLy8gV29yayA2IGRlY2ltYWwgZGlnaXRzIGF0IGEgdGltZSwgYWN0aW5nIGxpa2Ugd2UncmUgY29udmVydGluZyBiYXNlIDFlNlxuICAgIC8vIGRpZ2l0cyB0byBiaW5hcnkuIFRoaXMgaXMgc2FmZSB0byBkbyB3aXRoIGZsb2F0aW5nIHBvaW50IG1hdGggYmVjYXVzZVxuICAgIC8vIE51bWJlci5pc1NhZmVJbnRlZ2VyKEFMTF8zMl9CSVRTICogMWU2KSA9PSB0cnVlLlxuICAgIGNvbnN0IGJhc2UgPSAxZTY7XG4gICAgbGV0IGxvd0JpdHMgPSAwO1xuICAgIGxldCBoaWdoQml0cyA9IDA7XG4gICAgZnVuY3Rpb24gYWRkMWU2ZGlnaXQoYmVnaW4sIGVuZCkge1xuICAgICAgICAvLyBOb3RlOiBOdW1iZXIoJycpIGlzIDAuXG4gICAgICAgIGNvbnN0IGRpZ2l0MWU2ID0gTnVtYmVyKGRlYy5zbGljZShiZWdpbiwgZW5kKSk7XG4gICAgICAgIGhpZ2hCaXRzICo9IGJhc2U7XG4gICAgICAgIGxvd0JpdHMgPSBsb3dCaXRzICogYmFzZSArIGRpZ2l0MWU2O1xuICAgICAgICAvLyBDYXJyeSBiaXRzIGZyb20gbG93Qml0cyB0byBoaWdoQml0c1xuICAgICAgICBpZiAobG93Qml0cyA+PSBUV09fUFdSXzMyX0RCTCkge1xuICAgICAgICAgICAgaGlnaEJpdHMgPSBoaWdoQml0cyArICgobG93Qml0cyAvIFRXT19QV1JfMzJfREJMKSB8IDApO1xuICAgICAgICAgICAgbG93Qml0cyA9IGxvd0JpdHMgJSBUV09fUFdSXzMyX0RCTDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGQxZTZkaWdpdCgtMjQsIC0xOCk7XG4gICAgYWRkMWU2ZGlnaXQoLTE4LCAtMTIpO1xuICAgIGFkZDFlNmRpZ2l0KC0xMiwgLTYpO1xuICAgIGFkZDFlNmRpZ2l0KC02KTtcbiAgICByZXR1cm4gW21pbnVzLCBsb3dCaXRzLCBoaWdoQml0c107XG59XG5leHBvcnRzLmludDY0ZnJvbVN0cmluZyA9IGludDY0ZnJvbVN0cmluZztcbi8qKlxuICogRm9ybWF0IDY0IGJpdCBpbnRlZ2VyIHZhbHVlIChhcyB0d28gSlMgbnVtYmVycykgdG8gZGVjaW1hbCBzdHJpbmcuXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy5cbiAqL1xuZnVuY3Rpb24gaW50NjR0b1N0cmluZyhiaXRzTG93LCBiaXRzSGlnaCkge1xuICAgIC8vIFNraXAgdGhlIGV4cGVuc2l2ZSBjb252ZXJzaW9uIGlmIHRoZSBudW1iZXIgaXMgc21hbGwgZW5vdWdoIHRvIHVzZSB0aGVcbiAgICAvLyBidWlsdC1pbiBjb252ZXJzaW9ucy5cbiAgICBpZiAoKGJpdHNIaWdoID4+PiAwKSA8PSAweDFGRkZGRikge1xuICAgICAgICByZXR1cm4gJycgKyAoVFdPX1BXUl8zMl9EQkwgKiBiaXRzSGlnaCArIChiaXRzTG93ID4+PiAwKSk7XG4gICAgfVxuICAgIC8vIFdoYXQgdGhpcyBjb2RlIGlzIGRvaW5nIGlzIGVzc2VudGlhbGx5IGNvbnZlcnRpbmcgdGhlIGlucHV0IG51bWJlciBmcm9tXG4gICAgLy8gYmFzZS0yIHRvIGJhc2UtMWU3LCB3aGljaCBhbGxvd3MgdXMgdG8gcmVwcmVzZW50IHRoZSA2NC1iaXQgcmFuZ2Ugd2l0aFxuICAgIC8vIG9ubHkgMyAodmVyeSBsYXJnZSkgZGlnaXRzLiBUaG9zZSBkaWdpdHMgYXJlIHRoZW4gdHJpdmlhbCB0byBjb252ZXJ0IHRvXG4gICAgLy8gYSBiYXNlLTEwIHN0cmluZy5cbiAgICAvLyBUaGUgbWFnaWMgbnVtYmVycyB1c2VkIGhlcmUgYXJlIC1cbiAgICAvLyAyXjI0ID0gMTY3NzcyMTYgPSAoMSw2Nzc3MjE2KSBpbiBiYXNlLTFlNy5cbiAgICAvLyAyXjQ4ID0gMjgxNDc0OTc2NzEwNjU2ID0gKDIsODE0NzQ5Nyw2NzEwNjU2KSBpbiBiYXNlLTFlNy5cbiAgICAvLyBTcGxpdCAzMjozMiByZXByZXNlbnRhdGlvbiBpbnRvIDE2OjI0OjI0IHJlcHJlc2VudGF0aW9uIHNvIG91clxuICAgIC8vIGludGVybWVkaWF0ZSBkaWdpdHMgZG9uJ3Qgb3ZlcmZsb3cuXG4gICAgbGV0IGxvdyA9IGJpdHNMb3cgJiAweEZGRkZGRjtcbiAgICBsZXQgbWlkID0gKCgoYml0c0xvdyA+Pj4gMjQpIHwgKGJpdHNIaWdoIDw8IDgpKSA+Pj4gMCkgJiAweEZGRkZGRjtcbiAgICBsZXQgaGlnaCA9IChiaXRzSGlnaCA+PiAxNikgJiAweEZGRkY7XG4gICAgLy8gQXNzZW1ibGUgb3VyIHRocmVlIGJhc2UtMWU3IGRpZ2l0cywgaWdub3JpbmcgY2Fycmllcy4gVGhlIG1heGltdW1cbiAgICAvLyB2YWx1ZSBpbiBhIGRpZ2l0IGF0IHRoaXMgc3RlcCBpcyByZXByZXNlbnRhYmxlIGFzIGEgNDgtYml0IGludGVnZXIsIHdoaWNoXG4gICAgLy8gY2FuIGJlIHN0b3JlZCBpbiBhIDY0LWJpdCBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gICAgbGV0IGRpZ2l0QSA9IGxvdyArIChtaWQgKiA2Nzc3MjE2KSArIChoaWdoICogNjcxMDY1Nik7XG4gICAgbGV0IGRpZ2l0QiA9IG1pZCArIChoaWdoICogODE0NzQ5Nyk7XG4gICAgbGV0IGRpZ2l0QyA9IChoaWdoICogMik7XG4gICAgLy8gQXBwbHkgY2FycmllcyBmcm9tIEEgdG8gQiBhbmQgZnJvbSBCIHRvIEMuXG4gICAgbGV0IGJhc2UgPSAxMDAwMDAwMDtcbiAgICBpZiAoZGlnaXRBID49IGJhc2UpIHtcbiAgICAgICAgZGlnaXRCICs9IE1hdGguZmxvb3IoZGlnaXRBIC8gYmFzZSk7XG4gICAgICAgIGRpZ2l0QSAlPSBiYXNlO1xuICAgIH1cbiAgICBpZiAoZGlnaXRCID49IGJhc2UpIHtcbiAgICAgICAgZGlnaXRDICs9IE1hdGguZmxvb3IoZGlnaXRCIC8gYmFzZSk7XG4gICAgICAgIGRpZ2l0QiAlPSBiYXNlO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IGJhc2UtMWU3IGRpZ2l0cyB0byBiYXNlLTEwLCB3aXRoIG9wdGlvbmFsIGxlYWRpbmcgemVyb2VzLlxuICAgIGZ1bmN0aW9uIGRlY2ltYWxGcm9tMWU3KGRpZ2l0MWU3LCBuZWVkTGVhZGluZ1plcm9zKSB7XG4gICAgICAgIGxldCBwYXJ0aWFsID0gZGlnaXQxZTcgPyBTdHJpbmcoZGlnaXQxZTcpIDogJyc7XG4gICAgICAgIGlmIChuZWVkTGVhZGluZ1plcm9zKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAwMDAwMDAnLnNsaWNlKHBhcnRpYWwubGVuZ3RoKSArIHBhcnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgfVxuICAgIHJldHVybiBkZWNpbWFsRnJvbTFlNyhkaWdpdEMsIC8qbmVlZExlYWRpbmdaZXJvcz0qLyAwKSArXG4gICAgICAgIGRlY2ltYWxGcm9tMWU3KGRpZ2l0QiwgLypuZWVkTGVhZGluZ1plcm9zPSovIGRpZ2l0QykgK1xuICAgICAgICAvLyBJZiB0aGUgZmluYWwgMWU3IGRpZ2l0IGRpZG4ndCBuZWVkIGxlYWRpbmcgemVyb3MsIHdlIHdvdWxkIGhhdmVcbiAgICAgICAgLy8gcmV0dXJuZWQgdmlhIHRoZSB0cml2aWFsIGNvZGUgcGF0aCBhdCB0aGUgdG9wLlxuICAgICAgICBkZWNpbWFsRnJvbTFlNyhkaWdpdEEsIC8qbmVlZExlYWRpbmdaZXJvcz0qLyAxKTtcbn1cbmV4cG9ydHMuaW50NjR0b1N0cmluZyA9IGludDY0dG9TdHJpbmc7XG4vKipcbiAqIFdyaXRlIGEgMzIgYml0IHZhcmludCwgc2lnbmVkIG9yIHVuc2lnbmVkLiBTYW1lIGFzIGB2YXJpbnQ2NHdyaXRlKDAsIHZhbHVlLCBieXRlcylgXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi8xYjE4ODMzZjRmMmEyZjY4MWY0ZTRhMjVjZGYzYjBhNDMxMTVlYzI2L2pzL2JpbmFyeS9lbmNvZGVyLmpzI0wxNDRcbiAqL1xuZnVuY3Rpb24gdmFyaW50MzJ3cml0ZSh2YWx1ZSwgYnl0ZXMpIHtcbiAgICBpZiAodmFsdWUgPj0gMCkge1xuICAgICAgICAvLyB3cml0ZSB2YWx1ZSBhcyB2YXJpbnQgMzJcbiAgICAgICAgd2hpbGUgKHZhbHVlID4gMHg3Zikge1xuICAgICAgICAgICAgYnl0ZXMucHVzaCgodmFsdWUgJiAweDdmKSB8IDB4ODApO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA+Pj4gNztcbiAgICAgICAgfVxuICAgICAgICBieXRlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlICYgMTI3IHwgMTI4KTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPj4gNztcbiAgICAgICAgfVxuICAgICAgICBieXRlcy5wdXNoKDEpO1xuICAgIH1cbn1cbmV4cG9ydHMudmFyaW50MzJ3cml0ZSA9IHZhcmludDMyd3JpdGU7XG4vKipcbiAqIFJlYWQgYW4gdW5zaWduZWQgMzIgYml0IHZhcmludC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzhhNzE5MjdkNzRhNGNlMzRlZmUyZDg3NjlmZGExOThmNTJkMjBkMTIvanMvZXhwZXJpbWVudGFsL3J1bnRpbWUva2VybmVsL2J1ZmZlcl9kZWNvZGVyLmpzI0wyMjBcbiAqL1xuZnVuY3Rpb24gdmFyaW50MzJyZWFkKCkge1xuICAgIGxldCBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgbGV0IHJlc3VsdCA9IGIgJiAweDdGO1xuICAgIGlmICgoYiAmIDB4ODApID09IDApIHtcbiAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgIHJlc3VsdCB8PSAoYiAmIDB4N0YpIDw8IDc7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHg3RikgPDwgMTQ7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHg3RikgPDwgMjE7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBFeHRyYWN0IG9ubHkgbGFzdCA0IGJpdHNcbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHgwRikgPDwgMjg7XG4gICAgZm9yIChsZXQgcmVhZEJ5dGVzID0gNTsgKChiICYgMHg4MCkgIT09IDApICYmIHJlYWRCeXRlcyA8IDEwOyByZWFkQnl0ZXMrKylcbiAgICAgICAgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgIGlmICgoYiAmIDB4ODApICE9IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB2YXJpbnQnKTtcbiAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgIC8vIFJlc3VsdCBjYW4gaGF2ZSAzMiBiaXRzLCBjb252ZXJ0IGl0IHRvIHVuc2lnbmVkXG4gICAgcmV0dXJuIHJlc3VsdCA+Pj4gMDtcbn1cbmV4cG9ydHMudmFyaW50MzJyZWFkID0gdmFyaW50MzJyZWFkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGJMb25nID0gZXhwb3J0cy5QYlVMb25nID0gZXhwb3J0cy5kZXRlY3RCaSA9IHZvaWQgMDtcbmNvbnN0IGdvb2dfdmFyaW50XzEgPSByZXF1aXJlKFwiLi9nb29nLXZhcmludFwiKTtcbmxldCBCSTtcbmZ1bmN0aW9uIGRldGVjdEJpKCkge1xuICAgIGNvbnN0IGR2ID0gbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSk7XG4gICAgY29uc3Qgb2sgPSBnbG9iYWxUaGlzLkJpZ0ludCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIHR5cGVvZiBkdi5nZXRCaWdJbnQ2NCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICYmIHR5cGVvZiBkdi5nZXRCaWdVaW50NjQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAmJiB0eXBlb2YgZHYuc2V0QmlnSW50NjQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAmJiB0eXBlb2YgZHYuc2V0QmlnVWludDY0ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgQkkgPSBvayA/IHtcbiAgICAgICAgTUlOOiBCaWdJbnQoXCItOTIyMzM3MjAzNjg1NDc3NTgwOFwiKSxcbiAgICAgICAgTUFYOiBCaWdJbnQoXCI5MjIzMzcyMDM2ODU0Nzc1ODA3XCIpLFxuICAgICAgICBVTUlOOiBCaWdJbnQoXCIwXCIpLFxuICAgICAgICBVTUFYOiBCaWdJbnQoXCIxODQ0Njc0NDA3MzcwOTU1MTYxNVwiKSxcbiAgICAgICAgQzogQmlnSW50LFxuICAgICAgICBWOiBkdixcbiAgICB9IDogdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5kZXRlY3RCaSA9IGRldGVjdEJpO1xuZGV0ZWN0QmkoKTtcbmZ1bmN0aW9uIGFzc2VydEJpKGJpKSB7XG4gICAgaWYgKCFiaSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IHVuYXZhaWxhYmxlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RpbW9zdGFtbS9wcm90b2J1Zi10cy9ibG9iL3YxLjAuOC9NQU5VQUwubWQjYmlnaW50LXN1cHBvcnRcIik7XG59XG4vLyB1c2VkIHRvIHZhbGlkYXRlIGZyb20oc3RyaW5nKSBpbnB1dCAod2hlbiBiaWdpbnQgaXMgdW5hdmFpbGFibGUpXG5jb25zdCBSRV9ERUNJTUFMX1NUUiA9IC9eLT9bMC05XSskLztcbi8vIGNvbnN0YW50cyBmb3IgYmluYXJ5IG1hdGhcbmNvbnN0IFRXT19QV1JfMzJfREJMID0gMHgxMDAwMDAwMDA7XG5jb25zdCBIQUxGXzJfUFdSXzMyID0gMHgwODAwMDAwMDA7XG4vLyBiYXNlIGNsYXNzIGZvciBQYkxvbmcgYW5kIFBiVUxvbmcgcHJvdmlkZXMgc2hhcmVkIGNvZGVcbmNsYXNzIFNoYXJlZFBiTG9uZyB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIGJpdHMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobG8sIGhpKSB7XG4gICAgICAgIHRoaXMubG8gPSBsbyB8IDA7XG4gICAgICAgIHRoaXMuaGkgPSBoaSB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgaW5zdGFuY2UgZXF1YWwgdG8gMD9cbiAgICAgKi9cbiAgICBpc1plcm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvID09IDAgJiYgdGhpcy5oaSA9PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRvIGEgbmF0aXZlIG51bWJlci5cbiAgICAgKi9cbiAgICB0b051bWJlcigpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuaGkgKiBUV09fUFdSXzMyX0RCTCArICh0aGlzLmxvID4+PiAwKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGNvbnZlcnQgdG8gc2FmZSBudW1iZXJcIik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLyoqXG4gKiA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBhcyB0d28gMzItYml0IHZhbHVlcy5cbiAqIENvbnZlcnRzIGJldHdlZW4gYHN0cmluZ2AsIGBudW1iZXJgIGFuZCBgYmlnaW50YCByZXByZXNlbnRhdGlvbnMuXG4gKi9cbmNsYXNzIFBiVUxvbmcgZXh0ZW5kcyBTaGFyZWRQYkxvbmcge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBpbnN0YW5jZSBmcm9tIGEgYHN0cmluZ2AsIGBudW1iZXJgIG9yIGBiaWdpbnRgLlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIGlmIChCSSlcbiAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBCSS5DKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQkkuQyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgQkkuVU1JTilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIHZhbHVlIGZvciB1bG9uZycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiBCSS5VTUFYKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bG9uZyB0b28gbGFyZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgQkkuVi5zZXRCaWdVaW50NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBiVUxvbmcoQkkuVi5nZXRJbnQzMigwLCB0cnVlKSwgQkkuVi5nZXRJbnQzMig0LCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFSRV9ERUNJTUFMX1NUUi50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IFttaW51cywgbG8sIGhpXSA9IGdvb2dfdmFyaW50XzEuaW50NjRmcm9tU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbnVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgdmFsdWUgZm9yIHVsb25nJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJVTG9uZyhsbywgaGkpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbnVtYmVyIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIHZhbHVlIGZvciB1bG9uZycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBiVUxvbmcodmFsdWUsIHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdmFsdWUgJyArIHR5cGVvZiB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gZGVjaW1hbCBzdHJpbmcuXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBCSSA/IHRoaXMudG9CaWdJbnQoKS50b1N0cmluZygpIDogZ29vZ192YXJpbnRfMS5pbnQ2NHRvU3RyaW5nKHRoaXMubG8sIHRoaXMuaGkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRvIG5hdGl2ZSBiaWdpbnQuXG4gICAgICovXG4gICAgdG9CaWdJbnQoKSB7XG4gICAgICAgIGFzc2VydEJpKEJJKTtcbiAgICAgICAgQkkuVi5zZXRJbnQzMigwLCB0aGlzLmxvLCB0cnVlKTtcbiAgICAgICAgQkkuVi5zZXRJbnQzMig0LCB0aGlzLmhpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIEJJLlYuZ2V0QmlnVWludDY0KDAsIHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGJVTG9uZyA9IFBiVUxvbmc7XG4vKipcbiAqIHVsb25nIDAgc2luZ2xldG9uLlxuICovXG5QYlVMb25nLlpFUk8gPSBuZXcgUGJVTG9uZygwLCAwKTtcbi8qKlxuICogNjQtYml0IHNpZ25lZCBpbnRlZ2VyIGFzIHR3byAzMi1iaXQgdmFsdWVzLlxuICogQ29udmVydHMgYmV0d2VlbiBgc3RyaW5nYCwgYG51bWJlcmAgYW5kIGBiaWdpbnRgIHJlcHJlc2VudGF0aW9ucy5cbiAqL1xuY2xhc3MgUGJMb25nIGV4dGVuZHMgU2hhcmVkUGJMb25nIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgaW5zdGFuY2UgZnJvbSBhIGBzdHJpbmdgLCBgbnVtYmVyYCBvciBgYmlnaW50YC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbSh2YWx1ZSkge1xuICAgICAgICBpZiAoQkkpXG4gICAgICAgICAgICAvLyBub2luc3BlY3Rpb24gRmFsbFRocm91Z2hJblN3aXRjaFN0YXRlbWVudEpTXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiMFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBpcyBubyBpbnRlZ2VyJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQkkuQyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEJJLkModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IEJJLk1JTilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIGxvbmcgdG9vIHNtYWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IEJJLk1BWClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIGxvbmcgdG9vIGxhcmdlJyk7XG4gICAgICAgICAgICAgICAgICAgIEJJLlYuc2V0QmlnSW50NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBiTG9uZyhCSS5WLmdldEludDMyKDAsIHRydWUpLCBCSS5WLmdldEludDMyKDQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIjBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVJFX0RFQ0lNQUxfU1RSLnRlc3QodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgW21pbnVzLCBsbywgaGldID0gZ29vZ192YXJpbnRfMS5pbnQ2NGZyb21TdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWludXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaSA+IEhBTEZfMl9QV1JfMzIgfHwgKGhpID09IEhBTEZfMl9QV1JfMzIgJiYgbG8gIT0gMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gc21hbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChoaSA+PSBIQUxGXzJfUFdSXzMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gbGFyZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBibCA9IG5ldyBQYkxvbmcobG8sIGhpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pbnVzID8gcGJsLm5lZ2F0ZSgpIDogcGJsO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbnVtYmVyIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgUGJMb25nKHZhbHVlLCB2YWx1ZSAvIFRXT19QV1JfMzJfREJMKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgUGJMb25nKC12YWx1ZSwgLXZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpLm5lZ2F0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdmFsdWUgJyArIHR5cGVvZiB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERvIHdlIGhhdmUgYSBtaW51cyBzaWduP1xuICAgICAqL1xuICAgIGlzTmVnYXRpdmUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5oaSAmIEhBTEZfMl9QV1JfMzIpICE9PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOZWdhdGUgdHdvJ3MgY29tcGxlbWVudC5cbiAgICAgKiBJbnZlcnQgYWxsIHRoZSBiaXRzIGFuZCBhZGQgb25lIHRvIHRoZSByZXN1bHQuXG4gICAgICovXG4gICAgbmVnYXRlKCkge1xuICAgICAgICBsZXQgaGkgPSB+dGhpcy5oaSwgbG8gPSB0aGlzLmxvO1xuICAgICAgICBpZiAobG8pXG4gICAgICAgICAgICBsbyA9IH5sbyArIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGhpICs9IDE7XG4gICAgICAgIHJldHVybiBuZXcgUGJMb25nKGxvLCBoaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gZGVjaW1hbCBzdHJpbmcuXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmIChCSSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvQmlnSW50KCkudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgICAgICBsZXQgbiA9IHRoaXMubmVnYXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gJy0nICsgZ29vZ192YXJpbnRfMS5pbnQ2NHRvU3RyaW5nKG4ubG8sIG4uaGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnb29nX3ZhcmludF8xLmludDY0dG9TdHJpbmcodGhpcy5sbywgdGhpcy5oaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gbmF0aXZlIGJpZ2ludC5cbiAgICAgKi9cbiAgICB0b0JpZ0ludCgpIHtcbiAgICAgICAgYXNzZXJ0QmkoQkkpO1xuICAgICAgICBCSS5WLnNldEludDMyKDAsIHRoaXMubG8sIHRydWUpO1xuICAgICAgICBCSS5WLnNldEludDMyKDQsIHRoaXMuaGksIHRydWUpO1xuICAgICAgICByZXR1cm4gQkkuVi5nZXRCaWdJbnQ2NCgwLCB0cnVlKTtcbiAgICB9XG59XG5leHBvcnRzLlBiTG9uZyA9IFBiTG9uZztcbi8qKlxuICogbG9uZyAwIHNpbmdsZXRvbi5cbiAqL1xuUGJMb25nLlpFUk8gPSBuZXcgUGJMb25nKDAsIDApO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmluYXJ5UmVhZGVyID0gZXhwb3J0cy5iaW5hcnlSZWFkT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuY29uc3QgZ29vZ192YXJpbnRfMSA9IHJlcXVpcmUoXCIuL2dvb2ctdmFyaW50XCIpO1xuY29uc3QgZGVmYXVsdHNSZWFkID0ge1xuICAgIHJlYWRVbmtub3duRmllbGQ6IHRydWUsXG4gICAgcmVhZGVyRmFjdG9yeTogYnl0ZXMgPT4gbmV3IEJpbmFyeVJlYWRlcihieXRlcyksXG59O1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHJlYWRpbmcgYmluYXJ5IGRhdGEgZm9ybSBwYXJ0aWFsIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGJpbmFyeVJlYWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNSZWFkKSwgb3B0aW9ucykgOiBkZWZhdWx0c1JlYWQ7XG59XG5leHBvcnRzLmJpbmFyeVJlYWRPcHRpb25zID0gYmluYXJ5UmVhZE9wdGlvbnM7XG5jbGFzcyBCaW5hcnlSZWFkZXIge1xuICAgIGNvbnN0cnVjdG9yKGJ1ZiwgdGV4dERlY29kZXIpIHtcbiAgICAgICAgdGhpcy52YXJpbnQ2NCA9IGdvb2dfdmFyaW50XzEudmFyaW50NjRyZWFkOyAvLyBkaXJ0eSBjYXN0IGZvciBgdGhpc2BcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlYWQgYSBgdWludDMyYCBmaWVsZCwgYW4gdW5zaWduZWQgMzIgYml0IHZhcmludC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudWludDMyID0gZ29vZ192YXJpbnRfMS52YXJpbnQzMnJlYWQ7IC8vIGRpcnR5IGNhc3QgZm9yIGB0aGlzYCBhbmQgYWNjZXNzIHRvIHByb3RlY3RlZCBgYnVmYFxuICAgICAgICB0aGlzLmJ1ZiA9IGJ1ZjtcbiAgICAgICAgdGhpcy5sZW4gPSBidWYubGVuZ3RoO1xuICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBEYXRhVmlldyhidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGgpO1xuICAgICAgICB0aGlzLnRleHREZWNvZGVyID0gdGV4dERlY29kZXIgIT09IG51bGwgJiYgdGV4dERlY29kZXIgIT09IHZvaWQgMCA/IHRleHREZWNvZGVyIDogbmV3IFRleHREZWNvZGVyKFwidXRmLThcIiwge1xuICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmVCT006IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIHRhZyAtIGZpZWxkIG51bWJlciBhbmQgd2lyZSB0eXBlLlxuICAgICAqL1xuICAgIHRhZygpIHtcbiAgICAgICAgbGV0IHRhZyA9IHRoaXMudWludDMyKCksIGZpZWxkTm8gPSB0YWcgPj4+IDMsIHdpcmVUeXBlID0gdGFnICYgNztcbiAgICAgICAgaWYgKGZpZWxkTm8gPD0gMCB8fCB3aXJlVHlwZSA8IDAgfHwgd2lyZVR5cGUgPiA1KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0YWc6IGZpZWxkIG5vIFwiICsgZmllbGRObyArIFwiIHdpcmUgdHlwZSBcIiArIHdpcmVUeXBlKTtcbiAgICAgICAgcmV0dXJuIFtmaWVsZE5vLCB3aXJlVHlwZV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNraXAgb25lIGVsZW1lbnQgb24gdGhlIHdpcmUgYW5kIHJldHVybiB0aGUgc2tpcHBlZCBkYXRhLlxuICAgICAqIFN1cHBvcnRzIFdpcmVUeXBlLlN0YXJ0R3JvdXAgc2luY2UgdjIuMC4wLWFscGhhLjIzLlxuICAgICAqL1xuICAgIHNraXAod2lyZVR5cGUpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgc3dpdGNoICh3aXJlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuVmFyaW50OlxuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDB4ODApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0NjQ6XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgICAgIGNhc2UgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyOlxuICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQ6XG4gICAgICAgICAgICAgICAgbGV0IGxlbiA9IHRoaXMudWludDMyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gbGVuO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuU3RhcnRHcm91cDpcbiAgICAgICAgICAgICAgICAvLyBGcm9tIGRlc2NyaXB0b3IucHJvdG86IEdyb3VwIHR5cGUgaXMgZGVwcmVjYXRlZCwgbm90IHN1cHBvcnRlZCBpbiBwcm90bzMuXG4gICAgICAgICAgICAgICAgLy8gQnV0IHdlIG11c3Qgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSBhbmQgdHJlYXQgYXMgdW5rbm93bi5cbiAgICAgICAgICAgICAgICBsZXQgdDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKHQgPSB0aGlzLnRhZygpWzFdKSAhPT0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkVuZEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2tpcCh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbnQgc2tpcCB3aXJlIHR5cGUgXCIgKyB3aXJlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmLnN1YmFycmF5KHN0YXJ0LCB0aGlzLnBvcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRocm93cyBlcnJvciBpZiBwb3NpdGlvbiBpbiBieXRlIGFycmF5IGlzIG91dCBvZiByYW5nZS5cbiAgICAgKi9cbiAgICBhc3NlcnRCb3VuZHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcyA+IHRoaXMubGVuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJwcmVtYXR1cmUgRU9GXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGludDMyYCBmaWVsZCwgYSBzaWduZWQgMzIgYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBpbnQzMigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWludDMyKCkgfCAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYHNpbnQzMmAgZmllbGQsIGEgc2lnbmVkLCB6aWd6YWctZW5jb2RlZCAzMi1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHNpbnQzMigpIHtcbiAgICAgICAgbGV0IHp6ZSA9IHRoaXMudWludDMyKCk7XG4gICAgICAgIC8vIGRlY29kZSB6aWd6YWdcbiAgICAgICAgcmV0dXJuICh6emUgPj4+IDEpIF4gLSh6emUgJiAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBpbnQ2NGAgZmllbGQsIGEgc2lnbmVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgaW50NjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiTG9uZyguLi50aGlzLnZhcmludDY0KCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYHVpbnQ2NGAgZmllbGQsIGFuIHVuc2lnbmVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgdWludDY0KCkge1xuICAgICAgICByZXR1cm4gbmV3IHBiX2xvbmdfMS5QYlVMb25nKC4uLnRoaXMudmFyaW50NjQoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgc2ludDY0YCBmaWVsZCwgYSBzaWduZWQsIHppZy16YWctZW5jb2RlZCA2NC1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHNpbnQ2NCgpIHtcbiAgICAgICAgbGV0IFtsbywgaGldID0gdGhpcy52YXJpbnQ2NCgpO1xuICAgICAgICAvLyBkZWNvZGUgemlnIHphZ1xuICAgICAgICBsZXQgcyA9IC0obG8gJiAxKTtcbiAgICAgICAgbG8gPSAoKGxvID4+PiAxIHwgKGhpICYgMSkgPDwgMzEpIF4gcyk7XG4gICAgICAgIGhpID0gKGhpID4+PiAxIF4gcyk7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiTG9uZyhsbywgaGkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGJvb2xgIGZpZWxkLCBhIHZhcmlhbnQuXG4gICAgICovXG4gICAgYm9vbCgpIHtcbiAgICAgICAgbGV0IFtsbywgaGldID0gdGhpcy52YXJpbnQ2NCgpO1xuICAgICAgICByZXR1cm4gbG8gIT09IDAgfHwgaGkgIT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZml4ZWQzMmAgZmllbGQsIGFuIHVuc2lnbmVkLCBmaXhlZC1sZW5ndGggMzItYml0IGludGVnZXIuXG4gICAgICovXG4gICAgZml4ZWQzMigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlldy5nZXRVaW50MzIoKHRoaXMucG9zICs9IDQpIC0gNCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgc2ZpeGVkMzJgIGZpZWxkLCBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIDMyLWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIHNmaXhlZDMyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3LmdldEludDMyKCh0aGlzLnBvcyArPSA0KSAtIDQsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGZpeGVkNjRgIGZpZWxkLCBhbiB1bnNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0IGJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIGZpeGVkNjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiVUxvbmcodGhpcy5zZml4ZWQzMigpLCB0aGlzLnNmaXhlZDMyKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGZpeGVkNjRgIGZpZWxkLCBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0LWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIHNmaXhlZDY0KCkge1xuICAgICAgICByZXR1cm4gbmV3IHBiX2xvbmdfMS5QYkxvbmcodGhpcy5zZml4ZWQzMigpLCB0aGlzLnNmaXhlZDMyKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGZsb2F0YCBmaWVsZCwgMzItYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICAgKi9cbiAgICBmbG9hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlldy5nZXRGbG9hdDMyKCh0aGlzLnBvcyArPSA0KSAtIDQsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGRvdWJsZWAgZmllbGQsIGEgNjQtYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICAgKi9cbiAgICBkb3VibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0RmxvYXQ2NCgodGhpcy5wb3MgKz0gOCkgLSA4LCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBieXRlc2AgZmllbGQsIGxlbmd0aC1kZWxpbWl0ZWQgYXJiaXRyYXJ5IGRhdGEuXG4gICAgICovXG4gICAgYnl0ZXMoKSB7XG4gICAgICAgIGxldCBsZW4gPSB0aGlzLnVpbnQzMigpO1xuICAgICAgICBsZXQgc3RhcnQgPSB0aGlzLnBvcztcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuO1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWYuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBzdHJpbmdgIGZpZWxkLCBsZW5ndGgtZGVsaW1pdGVkIGRhdGEgY29udmVydGVkIHRvIFVURi04IHRleHQuXG4gICAgICovXG4gICAgc3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0RGVjb2Rlci5kZWNvZGUodGhpcy5ieXRlcygpKTtcbiAgICB9XG59XG5leHBvcnRzLkJpbmFyeVJlYWRlciA9IEJpbmFyeVJlYWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2VydEZsb2F0MzIgPSBleHBvcnRzLmFzc2VydFVJbnQzMiA9IGV4cG9ydHMuYXNzZXJ0SW50MzIgPSBleHBvcnRzLmFzc2VydE5ldmVyID0gZXhwb3J0cy5hc3NlcnQgPSB2b2lkIDA7XG4vKipcbiAqIGFzc2VydCB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlIG9yIHRocm93IGVycm9yICh3aXRoIG1lc3NhZ2UpXG4gKi9cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1zZykge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIH1cbn1cbmV4cG9ydHMuYXNzZXJ0ID0gYXNzZXJ0O1xuLyoqXG4gKiBhc3NlcnQgdGhhdCB2YWx1ZSBjYW5ub3QgZXhpc3QgPSB0eXBlIGBuZXZlcmAuIHRocm93IHJ1bnRpbWUgZXJyb3IgaWYgaXQgZG9lcy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUsIG1zZykge1xuICAgIHRocm93IG5ldyBFcnJvcihtc2cgIT09IG51bGwgJiYgbXNnICE9PSB2b2lkIDAgPyBtc2cgOiAnVW5leHBlY3RlZCBvYmplY3Q6ICcgKyB2YWx1ZSk7XG59XG5leHBvcnRzLmFzc2VydE5ldmVyID0gYXNzZXJ0TmV2ZXI7XG5jb25zdCBGTE9BVDMyX01BWCA9IDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIEZMT0FUMzJfTUlOID0gLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIFVJTlQzMl9NQVggPSAweEZGRkZGRkZGLCBJTlQzMl9NQVggPSAwWDdGRkZGRkZGLCBJTlQzMl9NSU4gPSAtMFg4MDAwMDAwMDtcbmZ1bmN0aW9uIGFzc2VydEludDMyKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW50IDMyOiAnICsgdHlwZW9mIGFyZyk7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFyZykgfHwgYXJnID4gSU5UMzJfTUFYIHx8IGFyZyA8IElOVDMyX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGludCAzMjogJyArIGFyZyk7XG59XG5leHBvcnRzLmFzc2VydEludDMyID0gYXNzZXJ0SW50MzI7XG5mdW5jdGlvbiBhc3NlcnRVSW50MzIoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1aW50IDMyOiAnICsgdHlwZW9mIGFyZyk7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFyZykgfHwgYXJnID4gVUlOVDMyX01BWCB8fCBhcmcgPCAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdWludCAzMjogJyArIGFyZyk7XG59XG5leHBvcnRzLmFzc2VydFVJbnQzMiA9IGFzc2VydFVJbnQzMjtcbmZ1bmN0aW9uIGFzc2VydEZsb2F0MzIoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmbG9hdCAzMjogJyArIHR5cGVvZiBhcmcpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFyZykpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoYXJnID4gRkxPQVQzMl9NQVggfHwgYXJnIDwgRkxPQVQzMl9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmbG9hdCAzMjogJyArIGFyZyk7XG59XG5leHBvcnRzLmFzc2VydEZsb2F0MzIgPSBhc3NlcnRGbG9hdDMyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmluYXJ5V3JpdGVyID0gZXhwb3J0cy5iaW5hcnlXcml0ZU9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuY29uc3QgZ29vZ192YXJpbnRfMSA9IHJlcXVpcmUoXCIuL2dvb2ctdmFyaW50XCIpO1xuY29uc3QgYXNzZXJ0XzEgPSByZXF1aXJlKFwiLi9hc3NlcnRcIik7XG5jb25zdCBkZWZhdWx0c1dyaXRlID0ge1xuICAgIHdyaXRlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICB3cml0ZXJGYWN0b3J5OiAoKSA9PiBuZXcgQmluYXJ5V3JpdGVyKCksXG59O1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHdyaXRpbmcgYmluYXJ5IGRhdGEgZm9ybSBwYXJ0aWFsIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGJpbmFyeVdyaXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzV3JpdGUpLCBvcHRpb25zKSA6IGRlZmF1bHRzV3JpdGU7XG59XG5leHBvcnRzLmJpbmFyeVdyaXRlT3B0aW9ucyA9IGJpbmFyeVdyaXRlT3B0aW9ucztcbmNsYXNzIEJpbmFyeVdyaXRlciB7XG4gICAgY29uc3RydWN0b3IodGV4dEVuY29kZXIpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByZXZpb3VzIGZvcmsgc3RhdGVzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICB0aGlzLnRleHRFbmNvZGVyID0gdGV4dEVuY29kZXIgIT09IG51bGwgJiYgdGV4dEVuY29kZXIgIT09IHZvaWQgMCA/IHRleHRFbmNvZGVyIDogbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICAgIHRoaXMuY2h1bmtzID0gW107XG4gICAgICAgIHRoaXMuYnVmID0gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgYnl0ZXMgd3JpdHRlbiBhbmQgcmVzZXQgdGhpcyB3cml0ZXIuXG4gICAgICovXG4gICAgZmluaXNoKCkge1xuICAgICAgICB0aGlzLmNodW5rcy5wdXNoKG5ldyBVaW50OEFycmF5KHRoaXMuYnVmKSk7IC8vIGZsdXNoIHRoZSBidWZmZXJcbiAgICAgICAgbGV0IGxlbiA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaHVua3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBsZW4gKz0gdGhpcy5jaHVua3NbaV0ubGVuZ3RoO1xuICAgICAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNodW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYnl0ZXMuc2V0KHRoaXMuY2h1bmtzW2ldLCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuY2h1bmtzW2ldLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNodW5rcyA9IFtdO1xuICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGEgbmV3IGZvcmsgZm9yIGxlbmd0aC1kZWxpbWl0ZWQgZGF0YSBsaWtlIGEgbWVzc2FnZVxuICAgICAqIG9yIGEgcGFja2VkIHJlcGVhdGVkIGZpZWxkLlxuICAgICAqXG4gICAgICogTXVzdCBiZSBqb2luZWQgbGF0ZXIgd2l0aCBgam9pbigpYC5cbiAgICAgKi9cbiAgICBmb3JrKCkge1xuICAgICAgICB0aGlzLnN0YWNrLnB1c2goeyBjaHVua3M6IHRoaXMuY2h1bmtzLCBidWY6IHRoaXMuYnVmIH0pO1xuICAgICAgICB0aGlzLmNodW5rcyA9IFtdO1xuICAgICAgICB0aGlzLmJ1ZiA9IFtdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSm9pbiB0aGUgbGFzdCBmb3JrLiBXcml0ZSBpdHMgbGVuZ3RoIGFuZCBieXRlcywgdGhlblxuICAgICAqIHJldHVybiB0byB0aGUgcHJldmlvdXMgc3RhdGUuXG4gICAgICovXG4gICAgam9pbigpIHtcbiAgICAgICAgLy8gZ2V0IGNodW5rIG9mIGZvcmtcbiAgICAgICAgbGV0IGNodW5rID0gdGhpcy5maW5pc2goKTtcbiAgICAgICAgLy8gcmVzdG9yZSBwcmV2aW91cyBzdGF0ZVxuICAgICAgICBsZXQgcHJldiA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghcHJldilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzdGF0ZSwgZm9yayBzdGFjayBlbXB0eScpO1xuICAgICAgICB0aGlzLmNodW5rcyA9IHByZXYuY2h1bmtzO1xuICAgICAgICB0aGlzLmJ1ZiA9IHByZXYuYnVmO1xuICAgICAgICAvLyB3cml0ZSBsZW5ndGggb2YgY2h1bmsgYXMgdmFyaW50XG4gICAgICAgIHRoaXMudWludDMyKGNodW5rLmJ5dGVMZW5ndGgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgYSB0YWcgKGZpZWxkIG51bWJlciBhbmQgd2lyZSB0eXBlKS5cbiAgICAgKlxuICAgICAqIEVxdWl2YWxlbnQgdG8gYHVpbnQzMiggKGZpZWxkTm8gPDwgMyB8IHR5cGUpID4+PiAwIClgLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVkIGNvZGUgc2hvdWxkIGNvbXB1dGUgdGhlIHRhZyBhaGVhZCBvZiB0aW1lIGFuZCBjYWxsIGB1aW50MzIoKWAuXG4gICAgICovXG4gICAgdGFnKGZpZWxkTm8sIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWludDMyKChmaWVsZE5vIDw8IDMgfCB0eXBlKSA+Pj4gMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgY2h1bmsgb2YgcmF3IGJ5dGVzLlxuICAgICAqL1xuICAgIHJhdyhjaHVuaykge1xuICAgICAgICBpZiAodGhpcy5idWYubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNodW5rcy5wdXNoKG5ldyBVaW50OEFycmF5KHRoaXMuYnVmKSk7XG4gICAgICAgICAgICB0aGlzLmJ1ZiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgdWludDMyYCB2YWx1ZSwgYW4gdW5zaWduZWQgMzIgYml0IHZhcmludC5cbiAgICAgKi9cbiAgICB1aW50MzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0VUludDMyKHZhbHVlKTtcbiAgICAgICAgLy8gd3JpdGUgdmFsdWUgYXMgdmFyaW50IDMyLCBpbmxpbmVkIGZvciBzcGVlZFxuICAgICAgICB3aGlsZSAodmFsdWUgPiAweDdmKSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi5wdXNoKCh2YWx1ZSAmIDB4N2YpIHwgMHg4MCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4+PiA3O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmLnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgaW50MzJgIHZhbHVlLCBhIHNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAqL1xuICAgIGludDMyKHZhbHVlKSB7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydEludDMyKHZhbHVlKTtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQzMndyaXRlKHZhbHVlLCB0aGlzLmJ1Zik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBib29sYCB2YWx1ZSwgYSB2YXJpYW50LlxuICAgICAqL1xuICAgIGJvb2wodmFsdWUpIHtcbiAgICAgICAgdGhpcy5idWYucHVzaCh2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGJ5dGVzYCB2YWx1ZSwgbGVuZ3RoLWRlbGltaXRlZCBhcmJpdHJhcnkgZGF0YS5cbiAgICAgKi9cbiAgICBieXRlcyh2YWx1ZSkge1xuICAgICAgICB0aGlzLnVpbnQzMih2YWx1ZS5ieXRlTGVuZ3RoKTsgLy8gd3JpdGUgbGVuZ3RoIG9mIGNodW5rIGFzIHZhcmludFxuICAgICAgICByZXR1cm4gdGhpcy5yYXcodmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzdHJpbmdgIHZhbHVlLCBsZW5ndGgtZGVsaW1pdGVkIGRhdGEgY29udmVydGVkIHRvIFVURi04IHRleHQuXG4gICAgICovXG4gICAgc3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGxldCBjaHVuayA9IHRoaXMudGV4dEVuY29kZXIuZW5jb2RlKHZhbHVlKTtcbiAgICAgICAgdGhpcy51aW50MzIoY2h1bmsuYnl0ZUxlbmd0aCk7IC8vIHdyaXRlIGxlbmd0aCBvZiBjaHVuayBhcyB2YXJpbnRcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZmxvYXRgIHZhbHVlLCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZsb2F0KHZhbHVlKSB7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydEZsb2F0MzIodmFsdWUpO1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcikuc2V0RmxvYXQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGRvdWJsZWAgdmFsdWUsIGEgNjQtYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICAgKi9cbiAgICBkb3VibGUodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgICAgIG5ldyBEYXRhVmlldyhjaHVuay5idWZmZXIpLnNldEZsb2F0NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBmaXhlZDMyYCB2YWx1ZSwgYW4gdW5zaWduZWQsIGZpeGVkLWxlbmd0aCAzMi1iaXQgaW50ZWdlci5cbiAgICAgKi9cbiAgICBmaXhlZDMyKHZhbHVlKSB7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydFVJbnQzMih2YWx1ZSk7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKS5zZXRVaW50MzIoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzZml4ZWQzMmAgdmFsdWUsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggMzItYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkMzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0SW50MzIodmFsdWUpO1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcikuc2V0SW50MzIoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzaW50MzJgIHZhbHVlLCBhIHNpZ25lZCwgemlnemFnLWVuY29kZWQgMzItYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBzaW50MzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0SW50MzIodmFsdWUpO1xuICAgICAgICAvLyB6aWd6YWcgZW5jb2RlXG4gICAgICAgIHZhbHVlID0gKCh2YWx1ZSA8PCAxKSBeICh2YWx1ZSA+PiAzMSkpID4+PiAwO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDMyd3JpdGUodmFsdWUsIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGZpeGVkNjRgIHZhbHVlLCBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0LWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIHNmaXhlZDY0KHZhbHVlKSB7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDgpO1xuICAgICAgICBsZXQgdmlldyA9IG5ldyBEYXRhVmlldyhjaHVuay5idWZmZXIpO1xuICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoMCwgbG9uZy5sbywgdHJ1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoNCwgbG9uZy5oaSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGZpeGVkNjRgIHZhbHVlLCBhbiB1bnNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0IGJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIGZpeGVkNjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgICAgIGxldCB2aWV3ID0gbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcik7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiVUxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoMCwgbG9uZy5sbywgdHJ1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoNCwgbG9uZy5oaSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGludDY0YCB2YWx1ZSwgYSBzaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBpbnQ2NCh2YWx1ZSkge1xuICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgIGdvb2dfdmFyaW50XzEudmFyaW50NjR3cml0ZShsb25nLmxvLCBsb25nLmhpLCB0aGlzLmJ1Zik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzaW50NjRgIHZhbHVlLCBhIHNpZ25lZCwgemlnLXphZy1lbmNvZGVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgc2ludDY0KHZhbHVlKSB7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKSwgXG4gICAgICAgIC8vIHppZ3phZyBlbmNvZGVcbiAgICAgICAgc2lnbiA9IGxvbmcuaGkgPj4gMzEsIGxvID0gKGxvbmcubG8gPDwgMSkgXiBzaWduLCBoaSA9ICgobG9uZy5oaSA8PCAxKSB8IChsb25nLmxvID4+PiAzMSkpIF4gc2lnbjtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQ2NHdyaXRlKGxvLCBoaSwgdGhpcy5idWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgdWludDY0YCB2YWx1ZSwgYW4gdW5zaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICB1aW50NjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQ2NHdyaXRlKGxvbmcubG8sIGxvbmcuaGksIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuZXhwb3J0cy5CaW5hcnlXcml0ZXIgPSBCaW5hcnlXcml0ZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZUpzb25PcHRpb25zID0gZXhwb3J0cy5qc29uV3JpdGVPcHRpb25zID0gZXhwb3J0cy5qc29uUmVhZE9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBkZWZhdWx0c1dyaXRlID0ge1xuICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICBlbnVtQXNJbnRlZ2VyOiBmYWxzZSxcbiAgICB1c2VQcm90b0ZpZWxkTmFtZTogZmFsc2UsXG4gICAgcHJldHR5U3BhY2VzOiAwLFxufSwgZGVmYXVsdHNSZWFkID0ge1xuICAgIGlnbm9yZVVua25vd25GaWVsZHM6IGZhbHNlLFxufTtcbi8qKlxuICogTWFrZSBvcHRpb25zIGZvciByZWFkaW5nIEpTT04gZGF0YSBmcm9tIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24ganNvblJlYWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNSZWFkKSwgb3B0aW9ucykgOiBkZWZhdWx0c1JlYWQ7XG59XG5leHBvcnRzLmpzb25SZWFkT3B0aW9ucyA9IGpzb25SZWFkT3B0aW9ucztcbi8qKlxuICogTWFrZSBvcHRpb25zIGZvciB3cml0aW5nIEpTT04gZGF0YSBmcm9tIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24ganNvbldyaXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzV3JpdGUpLCBvcHRpb25zKSA6IGRlZmF1bHRzV3JpdGU7XG59XG5leHBvcnRzLmpzb25Xcml0ZU9wdGlvbnMgPSBqc29uV3JpdGVPcHRpb25zO1xuLyoqXG4gKiBNZXJnZXMgSlNPTiB3cml0ZSBvciByZWFkIG9wdGlvbnMuIExhdGVyIHZhbHVlcyBvdmVycmlkZSBlYXJsaWVyIHZhbHVlcy4gVHlwZSByZWdpc3RyaWVzIGFyZSBtZXJnZWQuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSnNvbk9wdGlvbnMoYSwgYikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgbGV0IGMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGEpLCBiKTtcbiAgICBjLnR5cGVSZWdpc3RyeSA9IFsuLi4oKF9hID0gYSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLnR5cGVSZWdpc3RyeSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLCAuLi4oKF9iID0gYiA9PT0gbnVsbCB8fCBiID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiLnR5cGVSZWdpc3RyeSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW10pXTtcbiAgICByZXR1cm4gYztcbn1cbmV4cG9ydHMubWVyZ2VKc29uT3B0aW9ucyA9IG1lcmdlSnNvbk9wdGlvbnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NRVNTQUdFX1RZUEUgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBzeW1ib2wgdXNlZCBhcyBhIGtleSBvbiBtZXNzYWdlIG9iamVjdHMgdG8gc3RvcmUgdGhlIG1lc3NhZ2UgdHlwZS5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSAtIGl0IGlzIGhlcmUgdG8gc3RheSwgYnV0XG4gKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuXG4gKi9cbmV4cG9ydHMuTUVTU0FHRV9UWVBFID0gU3ltYm9sLmZvcihcInByb3RvYnVmLXRzL21lc3NhZ2UtdHlwZVwiKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvd2VyQ2FtZWxDYXNlID0gdm9pZCAwO1xuLyoqXG4gKiBDb252ZXJ0cyBzbmFrZV9jYXNlIHRvIGxvd2VyQ2FtZWxDYXNlLlxuICpcbiAqIFNob3VsZCBiZWhhdmUgbGlrZSBwcm90b2M6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vcHJvdG9jb2xidWZmZXJzL3Byb3RvYnVmL2Jsb2IvZThhZTEzN2M5NjQ0NGVhMzEzNDg1ZWQxMTE4YzVlNDNiMjA5OWNmMS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9oZWxwZXJzLmNjI0wxMThcbiAqL1xuZnVuY3Rpb24gbG93ZXJDYW1lbENhc2Uoc25ha2VDYXNlKSB7XG4gICAgbGV0IGNhcE5leHQgPSBmYWxzZTtcbiAgICBjb25zdCBzYiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc25ha2VDYXNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBuZXh0ID0gc25ha2VDYXNlLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKG5leHQgPT0gJ18nKSB7XG4gICAgICAgICAgICBjYXBOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgvXFxkLy50ZXN0KG5leHQpKSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQpO1xuICAgICAgICAgICAgY2FwTmV4dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FwTmV4dCkge1xuICAgICAgICAgICAgc2IucHVzaChuZXh0LnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICAgICAgY2FwTmV4dCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGkgPT0gMCkge1xuICAgICAgICAgICAgc2IucHVzaChuZXh0LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2IucHVzaChuZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2Iuam9pbignJyk7XG59XG5leHBvcnRzLmxvd2VyQ2FtZWxDYXNlID0gbG93ZXJDYW1lbENhc2U7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWFkTWVzc2FnZU9wdGlvbiA9IGV4cG9ydHMucmVhZEZpZWxkT3B0aW9uID0gZXhwb3J0cy5yZWFkRmllbGRPcHRpb25zID0gZXhwb3J0cy5ub3JtYWxpemVGaWVsZEluZm8gPSBleHBvcnRzLlJlcGVhdFR5cGUgPSBleHBvcnRzLkxvbmdUeXBlID0gZXhwb3J0cy5TY2FsYXJUeXBlID0gdm9pZCAwO1xuY29uc3QgbG93ZXJfY2FtZWxfY2FzZV8xID0gcmVxdWlyZShcIi4vbG93ZXItY2FtZWwtY2FzZVwiKTtcbi8qKlxuICogU2NhbGFyIHZhbHVlIHR5cGVzLiBUaGlzIGlzIGEgc3Vic2V0IG9mIGZpZWxkIHR5cGVzIGRlY2xhcmVkIGJ5IHByb3RvYnVmXG4gKiBlbnVtIGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlIFRoZSB0eXBlcyBHUk9VUCBhbmQgTUVTU0FHRVxuICogYXJlIG9taXR0ZWQsIGJ1dCB0aGUgbnVtZXJpY2FsIHZhbHVlcyBhcmUgaWRlbnRpY2FsLlxuICovXG52YXIgU2NhbGFyVHlwZTtcbihmdW5jdGlvbiAoU2NhbGFyVHlwZSkge1xuICAgIC8vIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9ycy5cbiAgICAvLyBPcmRlciBpcyB3ZWlyZCBmb3IgaGlzdG9yaWNhbCByZWFzb25zLlxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIkRPVUJMRVwiXSA9IDFdID0gXCJET1VCTEVcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJGTE9BVFwiXSA9IDJdID0gXCJGTE9BVFwiO1xuICAgIC8vIE5vdCBaaWdaYWcgZW5jb2RlZC4gIE5lZ2F0aXZlIG51bWJlcnMgdGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQ2NCBpZlxuICAgIC8vIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LlxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIklOVDY0XCJdID0gM10gPSBcIklOVDY0XCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiVUlOVDY0XCJdID0gNF0gPSBcIlVJTlQ2NFwiO1xuICAgIC8vIE5vdCBaaWdaYWcgZW5jb2RlZC4gIE5lZ2F0aXZlIG51bWJlcnMgdGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQzMiBpZlxuICAgIC8vIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LlxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIklOVDMyXCJdID0gNV0gPSBcIklOVDMyXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiRklYRUQ2NFwiXSA9IDZdID0gXCJGSVhFRDY0XCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiRklYRUQzMlwiXSA9IDddID0gXCJGSVhFRDMyXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiQk9PTFwiXSA9IDhdID0gXCJCT09MXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiU1RSSU5HXCJdID0gOV0gPSBcIlNUUklOR1wiO1xuICAgIC8vIFRhZy1kZWxpbWl0ZWQgYWdncmVnYXRlLlxuICAgIC8vIEdyb3VwIHR5cGUgaXMgZGVwcmVjYXRlZCBhbmQgbm90IHN1cHBvcnRlZCBpbiBwcm90bzMuIEhvd2V2ZXIsIFByb3RvM1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSB0aGUgZ3JvdXAgd2lyZSBmb3JtYXQgYW5kXG4gICAgLy8gdHJlYXQgZ3JvdXAgZmllbGRzIGFzIHVua25vd24gZmllbGRzLlxuICAgIC8vIFRZUEVfR1JPVVAgPSAxMCxcbiAgICAvLyBUWVBFX01FU1NBR0UgPSAxMSwgIC8vIExlbmd0aC1kZWxpbWl0ZWQgYWdncmVnYXRlLlxuICAgIC8vIE5ldyBpbiB2ZXJzaW9uIDIuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiQllURVNcIl0gPSAxMl0gPSBcIkJZVEVTXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiVUlOVDMyXCJdID0gMTNdID0gXCJVSU5UMzJcIjtcbiAgICAvLyBUWVBFX0VOVU0gPSAxNCxcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTRklYRUQzMlwiXSA9IDE1XSA9IFwiU0ZJWEVEMzJcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTRklYRUQ2NFwiXSA9IDE2XSA9IFwiU0ZJWEVENjRcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTSU5UMzJcIl0gPSAxN10gPSBcIlNJTlQzMlwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNJTlQ2NFwiXSA9IDE4XSA9IFwiU0lOVDY0XCI7XG59KShTY2FsYXJUeXBlID0gZXhwb3J0cy5TY2FsYXJUeXBlIHx8IChleHBvcnRzLlNjYWxhclR5cGUgPSB7fSkpO1xuLyoqXG4gKiBKYXZhU2NyaXB0IHJlcHJlc2VudGF0aW9uIG9mIDY0IGJpdCBpbnRlZ3JhbCB0eXBlcy4gRXF1aXZhbGVudCB0byB0aGVcbiAqIGZpZWxkIG9wdGlvbiBcImpzdHlwZVwiLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHByb3RvYnVmLXRzIHJlcHJlc2VudHMgNjQgYml0IHR5cGVzIGFzIGBiaWdpbnRgLlxuICpcbiAqIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBieSBlbmFibGluZyB0aGUgcGx1Z2luIHBhcmFtZXRlclxuICogYGxvbmdfdHlwZV9zdHJpbmdgLCB3aGljaCB3aWxsIHJlcHJlc2VudCA2NCBiaXQgdHlwZXMgYXMgYHN0cmluZ2AuXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBjaGFuZ2UgdGhlIGJlaGF2aW91ciBmb3IgaW5kaXZpZHVhbCBmaWVsZHNcbiAqIHdpdGggdGhlIGZpZWxkIG9wdGlvbiBcImpzdHlwZVwiOlxuICpcbiAqIGBgYHByb3RvYnVmXG4gKiB1aW50NjQgbXlfZmllbGQgPSAxIFtqc3R5cGUgPSBKU19TVFJJTkddO1xuICogdWludDY0IG90aGVyX2ZpZWxkID0gMiBbanN0eXBlID0gSlNfTlVNQkVSXTtcbiAqIGBgYFxuICovXG52YXIgTG9uZ1R5cGU7XG4oZnVuY3Rpb24gKExvbmdUeXBlKSB7XG4gICAgLyoqXG4gICAgICogVXNlIEphdmFTY3JpcHQgYGJpZ2ludGAuXG4gICAgICpcbiAgICAgKiBGaWVsZCBvcHRpb24gYFtqc3R5cGUgPSBKU19OT1JNQUxdYC5cbiAgICAgKi9cbiAgICBMb25nVHlwZVtMb25nVHlwZVtcIkJJR0lOVFwiXSA9IDBdID0gXCJCSUdJTlRcIjtcbiAgICAvKipcbiAgICAgKiBVc2UgSmF2YVNjcmlwdCBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEZpZWxkIG9wdGlvbiBgW2pzdHlwZSA9IEpTX1NUUklOR11gLlxuICAgICAqL1xuICAgIExvbmdUeXBlW0xvbmdUeXBlW1wiU1RSSU5HXCJdID0gMV0gPSBcIlNUUklOR1wiO1xuICAgIC8qKlxuICAgICAqIFVzZSBKYXZhU2NyaXB0IGBudW1iZXJgLlxuICAgICAqXG4gICAgICogTGFyZ2UgdmFsdWVzIHdpbGwgbG9vc2UgcHJlY2lzaW9uLlxuICAgICAqXG4gICAgICogRmllbGQgb3B0aW9uIGBbanN0eXBlID0gSlNfTlVNQkVSXWAuXG4gICAgICovXG4gICAgTG9uZ1R5cGVbTG9uZ1R5cGVbXCJOVU1CRVJcIl0gPSAyXSA9IFwiTlVNQkVSXCI7XG59KShMb25nVHlwZSA9IGV4cG9ydHMuTG9uZ1R5cGUgfHwgKGV4cG9ydHMuTG9uZ1R5cGUgPSB7fSkpO1xuLyoqXG4gKiBQcm90b2J1ZiAyLjEuMCBpbnRyb2R1Y2VkIHBhY2tlZCByZXBlYXRlZCBmaWVsZHMuXG4gKiBTZXR0aW5nIHRoZSBmaWVsZCBvcHRpb24gYFtwYWNrZWQgPSB0cnVlXWAgZW5hYmxlcyBwYWNraW5nLlxuICpcbiAqIEluIHByb3RvMywgYWxsIHJlcGVhdGVkIGZpZWxkcyBhcmUgcGFja2VkIGJ5IGRlZmF1bHQuXG4gKiBTZXR0aW5nIHRoZSBmaWVsZCBvcHRpb24gYFtwYWNrZWQgPSBmYWxzZV1gIGRpc2FibGVzIHBhY2tpbmcuXG4gKlxuICogUGFja2VkIHJlcGVhdGVkIGZpZWxkcyBhcmUgZW5jb2RlZCB3aXRoIGEgc2luZ2xlIHRhZyxcbiAqIHRoZW4gYSBsZW5ndGgtZGVsaW1pdGVyLCB0aGVuIHRoZSBlbGVtZW50IHZhbHVlcy5cbiAqXG4gKiBVbnBhY2tlZCByZXBlYXRlZCBmaWVsZHMgYXJlIGVuY29kZWQgd2l0aCBhIHRhZyBhbmRcbiAqIHZhbHVlIGZvciBlYWNoIGVsZW1lbnQuXG4gKlxuICogYGJ5dGVzYCBhbmQgYHN0cmluZ2AgY2Fubm90IGJlIHBhY2tlZC5cbiAqL1xudmFyIFJlcGVhdFR5cGU7XG4oZnVuY3Rpb24gKFJlcGVhdFR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZmllbGQgaXMgbm90IHJlcGVhdGVkLlxuICAgICAqL1xuICAgIFJlcGVhdFR5cGVbUmVwZWF0VHlwZVtcIk5PXCJdID0gMF0gPSBcIk5PXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGZpZWxkIGlzIHJlcGVhdGVkIGFuZCBzaG91bGQgYmUgcGFja2VkLlxuICAgICAqIEludmFsaWQgZm9yIGBieXRlc2AgYW5kIGBzdHJpbmdgLCB0aGV5IGNhbm5vdCBiZSBwYWNrZWQuXG4gICAgICovXG4gICAgUmVwZWF0VHlwZVtSZXBlYXRUeXBlW1wiUEFDS0VEXCJdID0gMV0gPSBcIlBBQ0tFRFwiO1xuICAgIC8qKlxuICAgICAqIFRoZSBmaWVsZCBpcyByZXBlYXRlZCBidXQgc2hvdWxkIG5vdCBiZSBwYWNrZWQuXG4gICAgICogVGhlIG9ubHkgdmFsaWQgcmVwZWF0IHR5cGUgZm9yIHJlcGVhdGVkIGBieXRlc2AgYW5kIGBzdHJpbmdgLlxuICAgICAqL1xuICAgIFJlcGVhdFR5cGVbUmVwZWF0VHlwZVtcIlVOUEFDS0VEXCJdID0gMl0gPSBcIlVOUEFDS0VEXCI7XG59KShSZXBlYXRUeXBlID0gZXhwb3J0cy5SZXBlYXRUeXBlIHx8IChleHBvcnRzLlJlcGVhdFR5cGUgPSB7fSkpO1xuLyoqXG4gKiBUdXJucyBQYXJ0aWFsRmllbGRJbmZvIGludG8gRmllbGRJbmZvLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGaWVsZEluZm8oZmllbGQpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgZmllbGQubG9jYWxOYW1lID0gKF9hID0gZmllbGQubG9jYWxOYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBsb3dlcl9jYW1lbF9jYXNlXzEubG93ZXJDYW1lbENhc2UoZmllbGQubmFtZSk7XG4gICAgZmllbGQuanNvbk5hbWUgPSAoX2IgPSBmaWVsZC5qc29uTmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbG93ZXJfY2FtZWxfY2FzZV8xLmxvd2VyQ2FtZWxDYXNlKGZpZWxkLm5hbWUpO1xuICAgIGZpZWxkLnJlcGVhdCA9IChfYyA9IGZpZWxkLnJlcGVhdCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogUmVwZWF0VHlwZS5OTztcbiAgICBmaWVsZC5vcHQgPSAoX2QgPSBmaWVsZC5vcHQpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IChmaWVsZC5yZXBlYXQgPyBmYWxzZSA6IGZpZWxkLm9uZW9mID8gZmFsc2UgOiBmaWVsZC5raW5kID09IFwibWVzc2FnZVwiKTtcbiAgICByZXR1cm4gZmllbGQ7XG59XG5leHBvcnRzLm5vcm1hbGl6ZUZpZWxkSW5mbyA9IG5vcm1hbGl6ZUZpZWxkSW5mbztcbi8qKlxuICogUmVhZCBjdXN0b20gZmllbGQgb3B0aW9ucyBmcm9tIGEgZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2UgcmVhZEZpZWxkT3B0aW9uKClcbiAqL1xuZnVuY3Rpb24gcmVhZEZpZWxkT3B0aW9ucyhtZXNzYWdlVHlwZSwgZmllbGROYW1lLCBleHRlbnNpb25OYW1lLCBleHRlbnNpb25UeXBlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG9wdGlvbnMgPSAoX2EgPSBtZXNzYWdlVHlwZS5maWVsZHMuZmluZCgobSwgaSkgPT4gbS5sb2NhbE5hbWUgPT0gZmllbGROYW1lIHx8IGkgPT0gZmllbGROYW1lKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnM7XG4gICAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9uc1tleHRlbnNpb25OYW1lXSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uc1tleHRlbnNpb25OYW1lXSkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnJlYWRGaWVsZE9wdGlvbnMgPSByZWFkRmllbGRPcHRpb25zO1xuZnVuY3Rpb24gcmVhZEZpZWxkT3B0aW9uKG1lc3NhZ2VUeXBlLCBmaWVsZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IG1lc3NhZ2VUeXBlLmZpZWxkcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PSBmaWVsZE5hbWUgfHwgaSA9PSBmaWVsZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uVmFsID0gb3B0aW9uc1tleHRlbnNpb25OYW1lXTtcbiAgICBpZiAob3B0aW9uVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblR5cGUgPyBleHRlbnNpb25UeXBlLmZyb21Kc29uKG9wdGlvblZhbCkgOiBvcHRpb25WYWw7XG59XG5leHBvcnRzLnJlYWRGaWVsZE9wdGlvbiA9IHJlYWRGaWVsZE9wdGlvbjtcbmZ1bmN0aW9uIHJlYWRNZXNzYWdlT3B0aW9uKG1lc3NhZ2VUeXBlLCBleHRlbnNpb25OYW1lLCBleHRlbnNpb25UeXBlKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IG1lc3NhZ2VUeXBlLm9wdGlvbnM7XG4gICAgY29uc3Qgb3B0aW9uVmFsID0gb3B0aW9uc1tleHRlbnNpb25OYW1lXTtcbiAgICBpZiAob3B0aW9uVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblR5cGUgPyBleHRlbnNpb25UeXBlLmZyb21Kc29uKG9wdGlvblZhbCkgOiBvcHRpb25WYWw7XG59XG5leHBvcnRzLnJlYWRNZXNzYWdlT3B0aW9uID0gcmVhZE1lc3NhZ2VPcHRpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTZWxlY3RlZE9uZW9mVmFsdWUgPSBleHBvcnRzLmNsZWFyT25lb2ZWYWx1ZSA9IGV4cG9ydHMuc2V0VW5rbm93bk9uZW9mVmFsdWUgPSBleHBvcnRzLnNldE9uZW9mVmFsdWUgPSBleHBvcnRzLmdldE9uZW9mVmFsdWUgPSBleHBvcnRzLmlzT25lb2ZHcm91cCA9IHZvaWQgMDtcbi8qKlxuICogSXMgdGhlIGdpdmVuIHZhbHVlIGEgdmFsaWQgb25lb2YgZ3JvdXA/XG4gKlxuICogV2UgcmVwcmVzZW50IHByb3RvYnVmIGBvbmVvZmAgYXMgYWxnZWJyYWljIGRhdGEgdHlwZXMgKEFEVCkgaW4gZ2VuZXJhdGVkXG4gKiBjb2RlLiBCdXQgd2hlbiB3b3JraW5nIHdpdGggbWVzc2FnZXMgb2YgdW5rbm93biB0eXBlLCB0aGUgQURUIGRvZXMgbm90XG4gKiBoZWxwIHVzLlxuICpcbiAqIFRoaXMgdHlwZSBndWFyZCBjaGVja3MgaWYgdGhlIGdpdmVuIG9iamVjdCBhZGhlcmVzIHRvIHRoZSBBRFQgcnVsZXMsIHdoaWNoXG4gKiBhcmUgYXMgZm9sbG93czpcbiAqXG4gKiAxKSBNdXN0IGJlIGFuIG9iamVjdC5cbiAqXG4gKiAyKSBNdXN0IGhhdmUgYSBcIm9uZW9mS2luZFwiIGRpc2NyaW1pbmF0b3IgcHJvcGVydHkuXG4gKlxuICogMykgSWYgXCJvbmVvZktpbmRcIiBpcyBgdW5kZWZpbmVkYCwgbm8gbWVtYmVyIGZpZWxkIGlzIHNlbGVjdGVkLiBUaGUgb2JqZWN0XG4gKiBtdXN0IG5vdCBoYXZlIGFueSBvdGhlciBwcm9wZXJ0aWVzLlxuICpcbiAqIDQpIElmIFwib25lb2ZLaW5kXCIgaXMgYSBgc3RyaW5nYCwgdGhlIG1lbWJlciBmaWVsZCB3aXRoIHRoaXMgbmFtZSBpc1xuICogc2VsZWN0ZWQuXG4gKlxuICogNSkgSWYgYSBtZW1iZXIgZmllbGQgaXMgc2VsZWN0ZWQsIHRoZSBvYmplY3QgbXVzdCBoYXZlIGEgc2Vjb25kIHByb3BlcnR5XG4gKiB3aXRoIHRoaXMgbmFtZS4gVGhlIHByb3BlcnR5IG11c3Qgbm90IGJlIGB1bmRlZmluZWRgLlxuICpcbiAqIDYpIE5vIGV4dHJhIHByb3BlcnRpZXMgYXJlIGFsbG93ZWQuIFRoZSBvYmplY3QgaGFzIGVpdGhlciBvbmUgcHJvcGVydHlcbiAqIChubyBzZWxlY3Rpb24pIG9yIHR3byBwcm9wZXJ0aWVzIChzZWxlY3Rpb24pLlxuICpcbiAqL1xuZnVuY3Rpb24gaXNPbmVvZkdyb3VwKGFueSkge1xuICAgIGlmICh0eXBlb2YgYW55ICE9ICdvYmplY3QnIHx8IGFueSA9PT0gbnVsbCB8fCAhYW55Lmhhc093blByb3BlcnR5KCdvbmVvZktpbmQnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZW9mIGFueS5vbmVvZktpbmQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgaWYgKGFueVthbnkub25lb2ZLaW5kXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbnkpLmxlbmd0aCA9PSAyO1xuICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYW55KS5sZW5ndGggPT0gMTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLmlzT25lb2ZHcm91cCA9IGlzT25lb2ZHcm91cDtcbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGZpZWxkIGluIGEgb25lb2YgZ3JvdXAuXG4gKi9cbmZ1bmN0aW9uIGdldE9uZW9mVmFsdWUob25lb2YsIGtpbmQpIHtcbiAgICByZXR1cm4gb25lb2Zba2luZF07XG59XG5leHBvcnRzLmdldE9uZW9mVmFsdWUgPSBnZXRPbmVvZlZhbHVlO1xuZnVuY3Rpb24gc2V0T25lb2ZWYWx1ZShvbmVvZiwga2luZCwgdmFsdWUpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG4gICAgfVxuICAgIG9uZW9mLm9uZW9mS2luZCA9IGtpbmQ7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb25lb2Zba2luZF0gPSB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLnNldE9uZW9mVmFsdWUgPSBzZXRPbmVvZlZhbHVlO1xuZnVuY3Rpb24gc2V0VW5rbm93bk9uZW9mVmFsdWUob25lb2YsIGtpbmQsIHZhbHVlKSB7XG4gICAgaWYgKG9uZW9mLm9uZW9mS2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSBvbmVvZltvbmVvZi5vbmVvZktpbmRdO1xuICAgIH1cbiAgICBvbmVvZi5vbmVvZktpbmQgPSBraW5kO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGtpbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvbmVvZltraW5kXSA9IHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMuc2V0VW5rbm93bk9uZW9mVmFsdWUgPSBzZXRVbmtub3duT25lb2ZWYWx1ZTtcbi8qKlxuICogUmVtb3ZlcyB0aGUgc2VsZWN0ZWQgZmllbGQgaW4gYSBvbmVvZiBncm91cC5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlIHJlY29tbWVuZGVkIHdheSB0byBtb2RpZnkgYSBvbmVvZiBncm91cCBpcyB0byBzZXRcbiAqIGEgbmV3IG9iamVjdDpcbiAqXG4gKiBgYGB0c1xuICogbWVzc2FnZS5yZXN1bHQgPSB7IG9uZW9mS2luZDogdW5kZWZpbmVkIH07XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY2xlYXJPbmVvZlZhbHVlKG9uZW9mKSB7XG4gICAgaWYgKG9uZW9mLm9uZW9mS2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSBvbmVvZltvbmVvZi5vbmVvZktpbmRdO1xuICAgIH1cbiAgICBvbmVvZi5vbmVvZktpbmQgPSB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmNsZWFyT25lb2ZWYWx1ZSA9IGNsZWFyT25lb2ZWYWx1ZTtcbi8qKlxuICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgdmFsdWUgb2YgdGhlIGdpdmVuIG9uZW9mIGdyb3VwLlxuICpcbiAqIE5vdCB0aGF0IHRoZSByZWNvbW1lbmRlZCB3YXkgdG8gYWNjZXNzIGEgb25lb2YgZ3JvdXAgaXMgdG8gY2hlY2tcbiAqIHRoZSBcIm9uZW9mS2luZFwiIHByb3BlcnR5IGFuZCBsZXQgVHlwZVNjcmlwdCBuYXJyb3cgZG93biB0aGUgdW5pb25cbiAqIHR5cGUgZm9yIHlvdTpcbiAqXG4gKiBgYGB0c1xuICogaWYgKG1lc3NhZ2UucmVzdWx0Lm9uZW9mS2luZCA9PT0gXCJlcnJvclwiKSB7XG4gKiAgIG1lc3NhZ2UucmVzdWx0LmVycm9yOyAvLyBzdHJpbmdcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEluIHRoZSByYXJlIGNhc2UgeW91IGp1c3QgbmVlZCB0aGUgdmFsdWUsIGFuZCBkbyBub3QgY2FyZSBhYm91dFxuICogd2hpY2ggcHJvdG9idWYgZmllbGQgaXMgc2VsZWN0ZWQsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb25cbiAqIGZvciBjb252ZW5pZW5jZS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2VsZWN0ZWRPbmVvZlZhbHVlKG9uZW9mKSB7XG4gICAgaWYgKG9uZW9mLm9uZW9mS2luZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBvbmVvZltvbmVvZi5vbmVvZktpbmRdO1xufVxuZXhwb3J0cy5nZXRTZWxlY3RlZE9uZW9mVmFsdWUgPSBnZXRTZWxlY3RlZE9uZW9mVmFsdWU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uVHlwZUNoZWNrID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCBvbmVvZl8xID0gcmVxdWlyZShcIi4vb25lb2ZcIik7XG4vLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuY2xhc3MgUmVmbGVjdGlvblR5cGVDaGVjayB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZmllbGRzID0gKF9hID0gaW5mby5maWVsZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgIH1cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCByZXEgPSBbXSwga25vd24gPSBbXSwgb25lb2ZzID0gW107XG4gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9uZW9mcy5pbmNsdWRlcyhmaWVsZC5vbmVvZikpIHtcbiAgICAgICAgICAgICAgICAgICAgb25lb2ZzLnB1c2goZmllbGQub25lb2YpO1xuICAgICAgICAgICAgICAgICAgICByZXEucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgICAgIGtub3duLnB1c2goZmllbGQub25lb2YpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGtub3duLnB1c2goZmllbGQubG9jYWxOYW1lKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWVsZC5vcHQgfHwgZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5wdXNoKGZpZWxkLmxvY2FsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnB1c2goZmllbGQubG9jYWxOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXEucHVzaChmaWVsZC5sb2NhbE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YSA9IHsgcmVxLCBrbm93biwgb25lb2ZzOiBPYmplY3QudmFsdWVzKG9uZW9mcykgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGFyZ3VtZW50IGEgdmFsaWQgbWVzc2FnZSBhcyBzcGVjaWZpZWQgYnkgdGhlXG4gICAgICogcmVmbGVjdGlvbiBpbmZvcm1hdGlvbj9cbiAgICAgKlxuICAgICAqIENoZWNrcyBhbGwgZmllbGQgdHlwZXMgcmVjdXJzaXZlbHkuIFRoZSBgZGVwdGhgXG4gICAgICogc3BlY2lmaWVzIGhvdyBkZWVwIGludG8gdGhlIHN0cnVjdHVyZSB0aGUgY2hlY2sgd2lsbCBiZS5cbiAgICAgKlxuICAgICAqIFdpdGggYSBkZXB0aCBvZiAwLCBvbmx5IHRoZSBwcmVzZW5jZSBvZiBmaWVsZHNcbiAgICAgKiBpcyBjaGVja2VkLlxuICAgICAqXG4gICAgICogV2l0aCBhIGRlcHRoIG9mIDEgb3IgbW9yZSwgdGhlIGZpZWxkIHR5cGVzIGFyZSBjaGVja2VkLlxuICAgICAqXG4gICAgICogV2l0aCBhIGRlcHRoIG9mIDIgb3IgbW9yZSwgdGhlIG1lbWJlcnMgb2YgbWFwLCByZXBlYXRlZFxuICAgICAqIGFuZCBtZXNzYWdlIGZpZWxkcyBhcmUgY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIE1lc3NhZ2UgZmllbGRzIHdpbGwgYmUgY2hlY2tlZCByZWN1cnNpdmVseSB3aXRoIGRlcHRoIC0gMS5cbiAgICAgKlxuICAgICAqIFRoZSBudW1iZXIgb2YgbWFwIGVudHJpZXMgLyByZXBlYXRlZCB2YWx1ZXMgYmVpbmcgY2hlY2tlZFxuICAgICAqIGlzIDwgZGVwdGguXG4gICAgICovXG4gICAgaXMobWVzc2FnZSwgZGVwdGgsIGFsbG93RXhjZXNzUHJvcGVydGllcyA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChkZXB0aCA8IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBtZXNzYWdlICE9ICdvYmplY3QnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLnByZXBhcmUoKTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhtZXNzYWdlKSwgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgLy8gaWYgYSByZXF1aXJlZCBmaWVsZCBpcyBtaXNzaW5nIGluIGFyZywgdGhpcyBjYW5ub3QgYmUgYSBUXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA8IGRhdGEucmVxLmxlbmd0aCB8fCBkYXRhLnJlcS5zb21lKG4gPT4gIWtleXMuaW5jbHVkZXMobikpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWFsbG93RXhjZXNzUHJvcGVydGllcykge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGFyZyBjb250YWlucyBhIGtleSB3ZSBkb250IGtub3csIHRoaXMgaXMgbm90IGEgbGl0ZXJhbCBUXG4gICAgICAgICAgICBpZiAoa2V5cy5zb21lKGsgPT4gIWRhdGEua25vd24uaW5jbHVkZXMoaykpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBcIldpdGggYSBkZXB0aCBvZiAwLCBvbmx5IHRoZSBwcmVzZW5jZSBhbmQgYWJzZW5jZSBvZiBmaWVsZHMgaXMgY2hlY2tlZC5cIlxuICAgICAgICAvLyBcIldpdGggYSBkZXB0aCBvZiAxIG9yIG1vcmUsIHRoZSBmaWVsZCB0eXBlcyBhcmUgY2hlY2tlZC5cIlxuICAgICAgICBpZiAoZGVwdGggPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBvbmVvZiBncm91cFxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgZGF0YS5vbmVvZnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbWVzc2FnZVtuYW1lXTtcbiAgICAgICAgICAgIGlmICghb25lb2ZfMS5pc09uZW9mR3JvdXAoZ3JvdXApKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChncm91cC5vbmVvZktpbmQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZChmID0+IGYubG9jYWxOYW1lID09PSBncm91cC5vbmVvZktpbmQpO1xuICAgICAgICAgICAgaWYgKCFmaWVsZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIHdlIGZvdW5kIG5vIGZpZWxkLCBidXQgaGF2ZSBhIGtpbmQsIHNvbWV0aGluZyBpcyB3cm9uZ1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZpZWxkKGdyb3VwW2dyb3VwLm9uZW9mS2luZF0sIGZpZWxkLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgdHlwZXNcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQobWVzc2FnZVtmaWVsZC5sb2NhbE5hbWVdLCBmaWVsZCwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmaWVsZChhcmcsIGZpZWxkLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKSB7XG4gICAgICAgIGxldCByZXBlYXRlZCA9IGZpZWxkLnJlcGVhdDtcbiAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQub3B0O1xuICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhhcmcsIGZpZWxkLlQsIGRlcHRoLCBmaWVsZC5MKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXIoYXJnLCBmaWVsZC5ULCBmaWVsZC5MKTtcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQub3B0O1xuICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhhcmcsIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIsIGRlcHRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXIoYXJnLCByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyKTtcbiAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzKGFyZywgZmllbGQuVCgpLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlKGFyZywgZmllbGQuVCgpLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKTtcbiAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZyAhPSAnb2JqZWN0JyB8fCBhcmcgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoZGVwdGggPCAyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWFwS2V5cyhhcmcsIGZpZWxkLkssIGRlcHRoKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcnMoT2JqZWN0LnZhbHVlcyhhcmcpLCBmaWVsZC5WLlQsIGRlcHRoLCBmaWVsZC5WLkwpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhPYmplY3QudmFsdWVzKGFyZyksIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIsIGRlcHRoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzKE9iamVjdC52YWx1ZXMoYXJnKSwgZmllbGQuVi5UKCksIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbWVzc2FnZShhcmcsIHR5cGUsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpIHtcbiAgICAgICAgaWYgKGFsbG93RXhjZXNzUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGUuaXNBc3NpZ25hYmxlKGFyZywgZGVwdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlLmlzKGFyZywgZGVwdGgpO1xuICAgIH1cbiAgICBtZXNzYWdlcyhhcmcsIHR5cGUsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkZXB0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGFsbG93RXhjZXNzUHJvcGVydGllcykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmcubGVuZ3RoICYmIGkgPCBkZXB0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGlmICghdHlwZS5pc0Fzc2lnbmFibGUoYXJnW2ldLCBkZXB0aCAtIDEpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZy5sZW5ndGggJiYgaSA8IGRlcHRoOyBpKyspXG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmlzKGFyZ1tpXSwgZGVwdGggLSAxKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzY2FsYXIoYXJnLCB0eXBlLCBsb25nVHlwZSkge1xuICAgICAgICBsZXQgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxvbmdUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuQklHSU5UOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gXCJiaWdpbnRcIjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5OVU1CRVI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSBcIm51bWJlclwiICYmICFpc05hTihhcmcpO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSAnYm9vbGVhbic7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09ICdzdHJpbmcnO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmcgaW5zdGFuY2VvZiBVaW50OEFycmF5O1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkRPVUJMRTpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSAnbnVtYmVyJyAmJiAhaXNOYU4oYXJnKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gJ251bWJlcicgJiYgTnVtYmVyLmlzSW50ZWdlcihhcmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjYWxhcnMoYXJnLCB0eXBlLCBkZXB0aCwgbG9uZ1R5cGUpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkZXB0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aCAmJiBpIDwgZGVwdGg7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NhbGFyKGFyZ1tpXSwgdHlwZSwgbG9uZ1R5cGUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBtYXBLZXlzKG1hcCwgdHlwZSwgZGVwdGgpIHtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhtYXApO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhrZXlzLnNsaWNlKDAsIGRlcHRoKS5tYXAoayA9PiBwYXJzZUludChrKSksIHR5cGUsIGRlcHRoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcnMoa2V5cy5zbGljZSgwLCBkZXB0aCkubWFwKGsgPT4gayA9PSAndHJ1ZScgPyB0cnVlIDogayA9PSAnZmFsc2UnID8gZmFsc2UgOiBrKSwgdHlwZSwgZGVwdGgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGtleXMsIHR5cGUsIGRlcHRoLCByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5TVFJJTkcpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uVHlwZUNoZWNrID0gUmVmbGVjdGlvblR5cGVDaGVjaztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25Mb25nQ29udmVydCA9IHZvaWQgMDtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZCB0byBjb252ZXJ0IGEgUGJMb25nIG9yIFBiVWxvbmcgdG8gYSBKYXZhU2NyaXB0XG4gKiByZXByZXNlbnRhdGlvbiBkdXJpbmcgcnVudGltZS5cbiAqXG4gKiBXb3JrcyB3aXRoIGdlbmVyYXRlZCBmaWVsZCBpbmZvcm1hdGlvbiwgYHVuZGVmaW5lZGAgaXMgZXF1aXZhbGVudFxuICogdG8gYFNUUklOR2AuXG4gKi9cbmZ1bmN0aW9uIHJlZmxlY3Rpb25Mb25nQ29udmVydChsb25nLCB0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuQklHSU5UOlxuICAgICAgICAgICAgcmV0dXJuIGxvbmcudG9CaWdJbnQoKTtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5OVU1CRVI6XG4gICAgICAgICAgICByZXR1cm4gbG9uZy50b051bWJlcigpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAvLyBjYXNlIExvbmdUeXBlLlNUUklORzpcbiAgICAgICAgICAgIHJldHVybiBsb25nLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuZXhwb3J0cy5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQgPSByZWZsZWN0aW9uTG9uZ0NvbnZlcnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uSnNvblJlYWRlciA9IHZvaWQgMDtcbmNvbnN0IGpzb25fdHlwaW5nc18xID0gcmVxdWlyZShcIi4vanNvbi10eXBpbmdzXCIpO1xuY29uc3QgYmFzZTY0XzEgPSByZXF1aXJlKFwiLi9iYXNlNjRcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWxvbmctY29udmVydFwiKTtcbi8qKlxuICogUmVhZHMgcHJvdG8zIG1lc3NhZ2VzIGluIGNhbm9uaWNhbCBKU09OIGZvcm1hdCB1c2luZyByZWZsZWN0aW9uIGluZm9ybWF0aW9uLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICovXG5jbGFzcyBSZWZsZWN0aW9uSnNvblJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH1cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLmZNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5mTWFwID0ge307XG4gICAgICAgICAgICBjb25zdCBmaWVsZHNJbnB1dCA9IChfYSA9IHRoaXMuaW5mby5maWVsZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHNJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZk1hcFtmaWVsZC5uYW1lXSA9IGZpZWxkO1xuICAgICAgICAgICAgICAgIHRoaXMuZk1hcFtmaWVsZC5qc29uTmFtZV0gPSBmaWVsZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZNYXBbZmllbGQubG9jYWxOYW1lXSA9IGZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbm5vdCBwYXJzZSBKU09OIDx0eXBlIG9mIGpzb25WYWx1ZT4gZm9yIDx0eXBlIG5hbWU+IzxmaWVsZE5hbWU+LlxuICAgIGFzc2VydChjb25kaXRpb24sIGZpZWxkTmFtZSwganNvblZhbHVlKSB7XG4gICAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgICAgICBsZXQgd2hhdCA9IGpzb25fdHlwaW5nc18xLnR5cGVvZkpzb25WYWx1ZShqc29uVmFsdWUpO1xuICAgICAgICAgICAgaWYgKHdoYXQgPT0gXCJudW1iZXJcIiB8fCB3aGF0ID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgICAgIHdoYXQgPSBqc29uVmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIEpTT04gJHt3aGF0fSBmb3IgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgbWVzc2FnZSBmcm9tIGNhbm9uaWNhbCBKU09OIGZvcm1hdCBpbnRvIHRoZSB0YXJnZXQgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIFJlcGVhdGVkIGZpZWxkcyBhcmUgYXBwZW5kZWQuIE1hcCBlbnRyaWVzIGFyZSBhZGRlZCwgb3ZlcndyaXRpbmdcbiAgICAgKiBleGlzdGluZyBrZXlzLlxuICAgICAqXG4gICAgICogSWYgYSBtZXNzYWdlIGZpZWxkIGlzIGFscmVhZHkgcHJlc2VudCwgaXQgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGVcbiAgICAgKiBuZXcgZGF0YS5cbiAgICAgKi9cbiAgICByZWFkKGlucHV0LCBtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICBjb25zdCBvbmVvZnNIYW5kbGVkID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2pzb25LZXksIGpzb25WYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZk1hcFtqc29uS2V5XTtcbiAgICAgICAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3VuZCB1bmtub3duIGZpZWxkIHdoaWxlIHJlYWRpbmcgJHt0aGlzLmluZm8udHlwZU5hbWV9IGZyb20gSlNPTiBmb3JtYXQuIEpTT04ga2V5OiAke2pzb25LZXl9YCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsb2NhbE5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgICAgICAvLyBoYW5kbGUgb25lb2YgQURUXG4gICAgICAgICAgICBsZXQgdGFyZ2V0OyAvLyB0aGlzIHdpbGwgYmUgdGhlIHRhcmdldCBmb3IgdGhlIGZpZWxkIHZhbHVlLCB3aGV0aGVyIGl0IGlzIG1lbWJlciBvZiBhIG9uZW9mIG9yIG5vdFxuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSA9PT0gbnVsbCAmJiAoZmllbGQua2luZCAhPT0gJ2VudW0nIHx8IGZpZWxkLlQoKVswXSAhPT0gJ2dvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2luY2UganNvbiBvYmplY3RzIGFyZSB1bm9yZGVyZWQgYnkgc3BlY2lmaWNhdGlvbiwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHRha2UgdGhlIGxhc3Qgb2YgbXVsdGlwbGUgb25lb2ZzXG4gICAgICAgICAgICAgICAgaWYgKG9uZW9mc0hhbmRsZWQuaW5jbHVkZXMoZmllbGQub25lb2YpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGxlIG1lbWJlcnMgb2YgdGhlIG9uZW9mIGdyb3VwIFwiJHtmaWVsZC5vbmVvZn1cIiBvZiAke3RoaXMuaW5mby50eXBlTmFtZX0gYXJlIHByZXNlbnQgaW4gSlNPTi5gKTtcbiAgICAgICAgICAgICAgICBvbmVvZnNIYW5kbGVkLnB1c2goZmllbGQub25lb2YpO1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IG1lc3NhZ2VbZmllbGQub25lb2ZdID0ge1xuICAgICAgICAgICAgICAgICAgICBvbmVvZktpbmQ6IGxvY2FsTmFtZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2UgaGF2ZSBoYW5kbGVkIG9uZW9mIGFib3ZlLiB3ZSBqdXN0IGhhdmUgcmVhZCB0aGUgdmFsdWUgaW50byBgdGFyZ2V0YC5cbiAgICAgICAgICAgIGlmIChmaWVsZC5raW5kID09ICdtYXAnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaW5wdXRcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChqc29uX3R5cGluZ3NfMS5pc0pzb25PYmplY3QoanNvblZhbHVlKSwgZmllbGQubmFtZSwganNvblZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBvdXIgdGFyZ2V0IHRvIHB1dCBtYXAgZW50cmllcyBpbnRvXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRPYmogPSB0YXJnZXRbbG9jYWxOYW1lXTtcbiAgICAgICAgICAgICAgICAvLyByZWFkIGVudHJpZXNcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtqc29uT2JqS2V5LCBqc29uT2JqVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGpzb25WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoanNvbk9ialZhbHVlICE9PSBudWxsLCBmaWVsZC5uYW1lICsgXCIgbWFwIHZhbHVlXCIsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZWFkIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWw7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGZpZWxkLlYuVCgpLmludGVybmFsSnNvblJlYWQoanNvbk9ialZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5lbnVtKGZpZWxkLlYuVCgpLCBqc29uT2JqVmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuc2NhbGFyKGpzb25PYmpWYWx1ZSwgZmllbGQuVi5ULCBmaWVsZC5WLkwsIGZpZWxkLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkLCBmaWVsZC5uYW1lICsgXCIgbWFwIHZhbHVlXCIsIGpzb25PYmpWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWQga2V5XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBqc29uT2JqS2V5O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuSyA9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0wpXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkgPT0gXCJ0cnVlXCIgPyB0cnVlIDoga2V5ID09IFwiZmFsc2VcIiA/IGZhbHNlIDoga2V5O1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnNjYWxhcihrZXksIGZpZWxkLkssIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLlNUUklORywgZmllbGQubmFtZSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRPYmpba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWVsZC5yZXBlYXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpbnB1dFxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KEFycmF5LmlzQXJyYXkoanNvblZhbHVlKSwgZmllbGQubmFtZSwganNvblZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBvdXIgdGFyZ2V0IHRvIHB1dCBhcnJheSBlbnRyaWVzIGludG9cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEFyciA9IHRhcmdldFtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIC8vIHJlYWQgYXJyYXkgZW50cmllc1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QganNvbkl0ZW0gb2YganNvblZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KGpzb25JdGVtICE9PSBudWxsLCBmaWVsZC5uYW1lLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGZpZWxkLlQoKS5pbnRlcm5hbEpzb25SZWFkKGpzb25JdGVtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5lbnVtKGZpZWxkLlQoKSwganNvbkl0ZW0sIGZpZWxkLm5hbWUsIG9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuc2NhbGFyKGpzb25JdGVtLCBmaWVsZC5ULCBmaWVsZC5MLCBmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCwgZmllbGQubmFtZSwganNvblZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRBcnIucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSA9PT0gbnVsbCAmJiBmaWVsZC5UKCkudHlwZU5hbWUgIT0gJ2dvb2dsZS5wcm90b2J1Zi5WYWx1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChmaWVsZC5vbmVvZiA9PT0gdW5kZWZpbmVkLCBmaWVsZC5uYW1lICsgXCIgKG9uZW9mIG1lbWJlcilcIiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IGZpZWxkLlQoKS5pbnRlcm5hbEpzb25SZWFkKGpzb25WYWx1ZSwgb3B0aW9ucywgdGFyZ2V0W2xvY2FsTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gdGhpcy5lbnVtKGZpZWxkLlQoKSwganNvblZhbHVlLCBmaWVsZC5uYW1lLCBvcHRpb25zLmlnbm9yZVVua25vd25GaWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IHRoaXMuc2NhbGFyKGpzb25WYWx1ZSwgZmllbGQuVCwgZmllbGQuTCwgZmllbGQubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgZmFsc2VgIGZvciB1bnJlY29nbml6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy5cbiAgICAgKlxuICAgICAqIGdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUgYWNjZXB0cyBvbmx5IEpTT04gYG51bGxgIChvciB0aGUgb2xkIGBcIk5VTExfVkFMVUVcImApLlxuICAgICAqL1xuICAgIGVudW0odHlwZSwganNvbiwgZmllbGROYW1lLCBpZ25vcmVVbmtub3duRmllbGRzKSB7XG4gICAgICAgIGlmICh0eXBlWzBdID09ICdnb29nbGUucHJvdG9idWYuTnVsbFZhbHVlJylcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChqc29uID09PSBudWxsIHx8IGpzb24gPT09IFwiTlVMTF9WQUxVRVwiLCBgVW5hYmxlIHRvIHBhcnNlIGZpZWxkICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkTmFtZX0sIGVudW0gJHt0eXBlWzBdfSBvbmx5IGFjY2VwdHMgbnVsbC5gKTtcbiAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAvLyB3ZSByZXF1aXJlIDAgdG8gYmUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGVudW1zXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YganNvbikge1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGpzb24pLCBgVW5hYmxlIHRvIHBhcnNlIGZpZWxkICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkTmFtZX0sIGVudW0gY2FuIG9ubHkgYmUgaW50ZWdyYWwgbnVtYmVyLCBnb3QgJHtqc29ufS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxFbnVtTmFtZSA9IGpzb247XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVbMl0gJiYganNvbi5zdWJzdHJpbmcoMCwgdHlwZVsyXS5sZW5ndGgpID09PSB0eXBlWzJdKVxuICAgICAgICAgICAgICAgICAgICAvLyBsb29rdXAgd2l0aG91dCB0aGUgc2hhcmVkIHByZWZpeFxuICAgICAgICAgICAgICAgICAgICBsb2NhbEVudW1OYW1lID0ganNvbi5zdWJzdHJpbmcodHlwZVsyXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxldCBlbnVtTnVtYmVyID0gdHlwZVsxXVtsb2NhbEVudW1OYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVudW1OdW1iZXIgPT09ICd1bmRlZmluZWQnICYmIGlnbm9yZVVua25vd25GaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIGVudW1OdW1iZXIgPT0gXCJudW1iZXJcIiwgYFVuYWJsZSB0byBwYXJzZSBmaWVsZCAke3RoaXMuaW5mby50eXBlTmFtZX0jJHtmaWVsZE5hbWV9LCBlbnVtICR7dHlwZVswXX0gaGFzIG5vIHZhbHVlIGZvciBcIiR7anNvbn1cIi5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW51bU51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnRfMS5hc3NlcnQoZmFsc2UsIGBVbmFibGUgdG8gcGFyc2UgZmllbGQgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfSwgY2Fubm90IHBhcnNlIGVudW0gdmFsdWUgZnJvbSAke3R5cGVvZiBqc29ufVwiLmApO1xuICAgIH1cbiAgICBzY2FsYXIoanNvbiwgdHlwZSwgbG9uZ1R5cGUsIGZpZWxkTmFtZSkge1xuICAgICAgICBsZXQgZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGZsb2F0LCBkb3VibGU6IEpTT04gdmFsdWUgd2lsbCBiZSBhIG51bWJlciBvciBvbmUgb2YgdGhlIHNwZWNpYWwgc3RyaW5nIHZhbHVlcyBcIk5hTlwiLCBcIkluZmluaXR5XCIsIGFuZCBcIi1JbmZpbml0eVwiLlxuICAgICAgICAgICAgICAgIC8vIEVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3MgYXJlIGFjY2VwdGVkLiBFeHBvbmVudCBub3RhdGlvbiBpcyBhbHNvIGFjY2VwdGVkLlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZMT0FUOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAuMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiTmFOXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5hTjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiSW5maW5pdHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBcIi1JbmZpbml0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcImVtcHR5IHN0cmluZ1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uID09IFwic3RyaW5nXCIgJiYganNvbi50cmltKCkubGVuZ3RoICE9PSBqc29uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZXh0cmEgd2hpdGVzcGFjZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9IFwic3RyaW5nXCIgJiYgdHlwZW9mIGpzb24gIT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsb2F0ID0gTnVtYmVyKGpzb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGZsb2F0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwibm90IGEgbnVtYmVyXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShmbG9hdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZmluaXR5IGFuZCAtaW5maW5pdHkgYXJlIGhhbmRsZWQgYnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFib3ZlLCBzbyB0aGlzIGlzIGFuIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJ0b28gbGFyZ2Ugb3Igc21hbGxcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQpXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRGbG9hdDMyKGZsb2F0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0O1xuICAgICAgICAgICAgICAgIC8vIGludDMyLCBmaXhlZDMyLCB1aW50MzI6IEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgbnVtYmVyLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludDMyO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGludDMyID0ganNvbjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoanNvbiA9PT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcImVtcHR5IHN0cmluZ1wiO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YganNvbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi50cmltKCkubGVuZ3RoICE9PSBqc29uLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJleHRyYSB3aGl0ZXNwYWNlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgPSBOdW1iZXIoanNvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGludDMyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRVSW50MzIoaW50MzIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMihpbnQzMik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnQzMjtcbiAgICAgICAgICAgICAgICAvLyBpbnQ2NCwgZml4ZWQ2NCwgdWludDY0OiBKU09OIHZhbHVlIHdpbGwgYmUgYSBkZWNpbWFsIHN0cmluZy4gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJMb25nLlpFUk8sIGxvbmdUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIGpzb24gIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocGJfbG9uZ18xLlBiTG9uZy5mcm9tKGpzb24pLCBsb25nVHlwZSk7XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVENjQ6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocGJfbG9uZ18xLlBiVUxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT0gXCJudW1iZXJcIiAmJiB0eXBlb2YganNvbiAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJVTG9uZy5mcm9tKGpzb24pLCBsb25nVHlwZSk7XG4gICAgICAgICAgICAgICAgLy8gYm9vbDpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nOlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZXh0cmEgd2hpdGVzcGFjZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChqc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiaW52YWxpZCBVVEY4XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgICAgICAgICAgICAvLyBieXRlczogSlNPTiB2YWx1ZSB3aWxsIGJlIHRoZSBkYXRhIGVuY29kZWQgYXMgYSBzdHJpbmcgdXNpbmcgc3RhbmRhcmQgYmFzZTY0IGVuY29kaW5nIHdpdGggcGFkZGluZ3MuXG4gICAgICAgICAgICAgICAgLy8gRWl0aGVyIHN0YW5kYXJkIG9yIFVSTC1zYWZlIGJhc2U2NCBlbmNvZGluZyB3aXRoL3dpdGhvdXQgcGFkZGluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwgfHwganNvbiA9PT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZGVjb2RlKGpzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NlcnQoZmFsc2UsIGZpZWxkTmFtZSArIChlID8gXCIgLSBcIiArIGUgOiBcIlwiKSwganNvbik7XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uSnNvblJlYWRlciA9IFJlZmxlY3Rpb25Kc29uUmVhZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVmbGVjdGlvbkpzb25Xcml0ZXIgPSB2b2lkIDA7XG5jb25zdCBiYXNlNjRfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuLyoqXG4gKiBXcml0ZXMgcHJvdG8zIG1lc3NhZ2VzIGluIGNhbm9uaWNhbCBKU09OIGZvcm1hdCB1c2luZyByZWZsZWN0aW9uXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAqL1xuY2xhc3MgUmVmbGVjdGlvbkpzb25Xcml0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGluZm8pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmZpZWxkcyA9IChfYSA9IGluZm8uZmllbGRzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIG1lc3NhZ2UgdG8gYSBKU09OIG9iamVjdCwgYmFzZWQgb24gdGhlIGZpZWxkIGRlc2NyaXB0b3JzLlxuICAgICAqL1xuICAgIHdyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHt9LCBzb3VyY2UgPSBtZXNzYWdlO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICAvLyBmaWVsZCBpcyBub3QgcGFydCBvZiBhIG9uZW9mLCBzaW1wbHkgd3JpdGUgYXMgaXNcbiAgICAgICAgICAgIGlmICghZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICBsZXQganNvblZhbHVlID0gdGhpcy5maWVsZChmaWVsZCwgc291cmNlW2ZpZWxkLmxvY2FsTmFtZV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChqc29uVmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAganNvbltvcHRpb25zLnVzZVByb3RvRmllbGROYW1lID8gZmllbGQubmFtZSA6IGZpZWxkLmpzb25OYW1lXSA9IGpzb25WYWx1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpZWxkIGlzIHBhcnQgb2YgYSBvbmVvZlxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBzb3VyY2VbZmllbGQub25lb2ZdO1xuICAgICAgICAgICAgaWYgKGdyb3VwLm9uZW9mS2luZCAhPT0gZmllbGQubG9jYWxOYW1lKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBub3Qgc2VsZWN0ZWQsIHNraXBcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IGZpZWxkLmtpbmQgPT0gJ3NjYWxhcicgfHwgZmllbGQua2luZCA9PSAnZW51bSdcbiAgICAgICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgZW1pdERlZmF1bHRWYWx1ZXM6IHRydWUgfSkgOiBvcHRpb25zO1xuICAgICAgICAgICAgbGV0IGpzb25WYWx1ZSA9IHRoaXMuZmllbGQoZmllbGQsIGdyb3VwW2ZpZWxkLmxvY2FsTmFtZV0sIG9wdCk7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoanNvblZhbHVlICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAganNvbltvcHRpb25zLnVzZVByb3RvRmllbGROYW1lID8gZmllbGQubmFtZSA6IGZpZWxkLmpzb25OYW1lXSA9IGpzb25WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgZmllbGQoZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBqc29uVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChmaWVsZC5raW5kID09ICdtYXAnKSB7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpO1xuICAgICAgICAgICAgY29uc3QganNvbk9iaiA9IHt9O1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2VudHJ5S2V5LCBlbnRyeVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuc2NhbGFyKGZpZWxkLlYuVCwgZW50cnlWYWx1ZSwgZmllbGQubmFtZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25PYmpbZW50cnlLZXkudG9TdHJpbmcoKV0gPSB2YWw7IC8vIEpTT04gc3RhbmRhcmQgYWxsb3dzIG9ubHkgKGRvdWJsZSBxdW90ZWQpIHN0cmluZyBhcyBwcm9wZXJ0eSBrZXlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IGZpZWxkLlYuVCgpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtlbnRyeUtleSwgZW50cnlWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLm1lc3NhZ2UobWVzc2FnZVR5cGUsIGVudHJ5VmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25PYmpbZW50cnlLZXkudG9TdHJpbmcoKV0gPSB2YWw7IC8vIEpTT04gc3RhbmRhcmQgYWxsb3dzIG9ubHkgKGRvdWJsZSBxdW90ZWQpIHN0cmluZyBhcyBwcm9wZXJ0eSBrZXlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtSW5mbyA9IGZpZWxkLlYuVCgpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtlbnRyeUtleSwgZW50cnlWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoZW50cnlWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBlbnRyeVZhbHVlID09ICdudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZW51bShlbnVtSW5mbywgZW50cnlWYWx1ZSwgZmllbGQubmFtZSwgZmFsc2UsIHRydWUsIG9wdGlvbnMuZW51bUFzSW50ZWdlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbk9ialtlbnRyeUtleS50b1N0cmluZygpXSA9IHZhbDsgLy8gSlNPTiBzdGFuZGFyZCBhbGxvd3Mgb25seSAoZG91YmxlIHF1b3RlZCkgc3RyaW5nIGFzIHByb3BlcnR5IGtleVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMgfHwgT2JqZWN0LmtleXMoanNvbk9iaikubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBqc29uVmFsdWUgPSBqc29uT2JqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpZWxkLnJlcGVhdCkge1xuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KEFycmF5LmlzQXJyYXkodmFsdWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGpzb25BcnIgPSBbXTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5zY2FsYXIoZmllbGQuVCwgdmFsdWVbaV0sIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbkFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bUluZm8gPSBmaWVsZC5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWx1ZVtpXSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZVtpXSA9PSAnbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmVudW0oZW51bUluZm8sIHZhbHVlW2ldLCBmaWVsZC5uYW1lLCBmaWVsZC5vcHQsIHRydWUsIG9wdGlvbnMuZW51bUFzSW50ZWdlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbkFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZVR5cGUgPSBmaWVsZC5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMubWVzc2FnZShtZXNzYWdlVHlwZSwgdmFsdWVbaV0sIGZpZWxkLm5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25BcnIucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYWRkIGNvbnZlcnRlZCBhcnJheSB0byBqc29uIG91dHB1dFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMgfHwganNvbkFyci5sZW5ndGggPiAwIHx8IG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMpXG4gICAgICAgICAgICAgICAganNvblZhbHVlID0ganNvbkFycjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAganNvblZhbHVlID0gdGhpcy5zY2FsYXIoZmllbGQuVCwgdmFsdWUsIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIGpzb25WYWx1ZSA9IHRoaXMuZW51bShmaWVsZC5UKCksIHZhbHVlLCBmaWVsZC5uYW1lLCBmaWVsZC5vcHQsIG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMsIG9wdGlvbnMuZW51bUFzSW50ZWdlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgIGpzb25WYWx1ZSA9IHRoaXMubWVzc2FnZShmaWVsZC5UKCksIHZhbHVlLCBmaWVsZC5uYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb25WYWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgbnVsbGAgYXMgdGhlIGRlZmF1bHQgZm9yIGdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUuXG4gICAgICovXG4gICAgZW51bSh0eXBlLCB2YWx1ZSwgZmllbGROYW1lLCBvcHRpb25hbCwgZW1pdERlZmF1bHRWYWx1ZXMsIGVudW1Bc0ludGVnZXIpIHtcbiAgICAgICAgaWYgKHR5cGVbMF0gPT0gJ2dvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUnKVxuICAgICAgICAgICAgcmV0dXJuICFlbWl0RGVmYXVsdFZhbHVlcyAmJiAhb3B0aW9uYWwgPyB1bmRlZmluZWQgOiBudWxsO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KG9wdGlvbmFsKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSAwICYmICFlbWl0RGVmYXVsdFZhbHVlcyAmJiAhb3B0aW9uYWwpXG4gICAgICAgICAgICAvLyB3ZSByZXF1aXJlIDAgdG8gYmUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGVudW1zXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdudW1iZXInKTtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIodmFsdWUpKTtcbiAgICAgICAgaWYgKGVudW1Bc0ludGVnZXIgfHwgIXR5cGVbMV0uaGFzT3duUHJvcGVydHkodmFsdWUpKVxuICAgICAgICAgICAgLy8gaWYgd2UgZG9uJ3Qgbm93IHRoZSBlbnVtIHZhbHVlLCBqdXN0IHJldHVybiB0aGUgbnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlWzJdKVxuICAgICAgICAgICAgLy8gcmVzdG9yZSB0aGUgZHJvcHBlZCBwcmVmaXhcbiAgICAgICAgICAgIHJldHVybiB0eXBlWzJdICsgdHlwZVsxXVt2YWx1ZV07XG4gICAgICAgIHJldHVybiB0eXBlWzFdW3ZhbHVlXTtcbiAgICB9XG4gICAgbWVzc2FnZSh0eXBlLCB2YWx1ZSwgZmllbGROYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMgPyBudWxsIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdHlwZS5pbnRlcm5hbEpzb25Xcml0ZSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHNjYWxhcih0eXBlLCB2YWx1ZSwgZmllbGROYW1lLCBvcHRpb25hbCwgZW1pdERlZmF1bHRWYWx1ZXMpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChvcHRpb25hbCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVkID0gZW1pdERlZmF1bHRWYWx1ZXMgfHwgb3B0aW9uYWw7XG4gICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAvLyBpbnQzMiwgZml4ZWQzMiwgdWludDMyOiBKU09OIHZhbHVlIHdpbGwgYmUgYSBkZWNpbWFsIG51bWJlci4gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRVSW50MzIodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIGZsb2F0LCBkb3VibGU6IEpTT04gdmFsdWUgd2lsbCBiZSBhIG51bWJlciBvciBvbmUgb2YgdGhlIHNwZWNpYWwgc3RyaW5nIHZhbHVlcyBcIk5hTlwiLCBcIkluZmluaXR5XCIsIGFuZCBcIi1JbmZpbml0eVwiLlxuICAgICAgICAgICAgLy8gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuIEV4cG9uZW50IG5vdGF0aW9uIGlzIGFsc28gYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0RmxvYXQzMih2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdudW1iZXInKTtcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdOYU4nO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0luZmluaXR5JztcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctSW5maW5pdHknO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIHN0cmluZzpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAvLyBib29sOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gZmFsc2UgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PSAnYm9vbGVhbicpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgc3RyaW5nLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UNjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT0gJ2JpZ2ludCcpO1xuICAgICAgICAgICAgICAgIGxldCB1bG9uZyA9IHBiX2xvbmdfMS5QYlVMb25nLmZyb20odmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh1bG9uZy5pc1plcm8oKSAmJiAhZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVsb25nLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyBKU09OIHZhbHVlIHdpbGwgYmUgYSBkZWNpbWFsIHN0cmluZy4gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVENjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PSAnYmlnaW50Jyk7XG4gICAgICAgICAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJMb25nLmZyb20odmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChsb25nLmlzWmVybygpICYmICFlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9uZy50b1N0cmluZygpO1xuICAgICAgICAgICAgLy8gYnl0ZXM6IEpTT04gdmFsdWUgd2lsbCBiZSB0aGUgZGF0YSBlbmNvZGVkIGFzIGEgc3RyaW5nIHVzaW5nIHN0YW5kYXJkIGJhc2U2NCBlbmNvZGluZyB3aXRoIHBhZGRpbmdzLlxuICAgICAgICAgICAgLy8gRWl0aGVyIHN0YW5kYXJkIG9yIFVSTC1zYWZlIGJhc2U2NCBlbmNvZGluZyB3aXRoL3dpdGhvdXQgcGFkZGluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpO1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUuYnl0ZUxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gXCJcIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZW5jb2RlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuUmVmbGVjdGlvbkpzb25Xcml0ZXIgPSBSZWZsZWN0aW9uSnNvbldyaXRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0ID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1sb25nLWNvbnZlcnRcIik7XG5jb25zdCBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuLyoqXG4gKiBDcmVhdGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHNjYWxhciB0eXBlLlxuICovXG5mdW5jdGlvbiByZWZsZWN0aW9uU2NhbGFyRGVmYXVsdCh0eXBlLCBsb25nVHlwZSA9IHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLlNUUklORykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVENjQ6XG4gICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocGJfbG9uZ18xLlBiVUxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJMb25nLlpFUk8sIGxvbmdUeXBlKTtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkRPVUJMRTpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZMT0FUOlxuICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxufVxuZXhwb3J0cy5yZWZsZWN0aW9uU2NhbGFyRGVmYXVsdCA9IHJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVmbGVjdGlvbkJpbmFyeVJlYWRlciA9IHZvaWQgMDtcbmNvbnN0IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWxvbmctY29udmVydFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tc2NhbGFyLWRlZmF1bHRcIik7XG4vKipcbiAqIFJlYWRzIHByb3RvMyBtZXNzYWdlcyBpbiBiaW5hcnkgZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24uXG4gKlxuICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nXG4gKi9cbmNsYXNzIFJlZmxlY3Rpb25CaW5hcnlSZWFkZXIge1xuICAgIGNvbnN0cnVjdG9yKGluZm8pIHtcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9XG4gICAgcHJlcGFyZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuZmllbGROb1RvRmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0lucHV0ID0gKF9hID0gdGhpcy5pbmZvLmZpZWxkcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgICAgICB0aGlzLmZpZWxkTm9Ub0ZpZWxkID0gbmV3IE1hcChmaWVsZHNJbnB1dC5tYXAoZmllbGQgPT4gW2ZpZWxkLm5vLCBmaWVsZF0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIG1lc3NhZ2UgZnJvbSBiaW5hcnkgZm9ybWF0IGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICAgICAqXG4gICAgICogUmVwZWF0ZWQgZmllbGRzIGFyZSBhcHBlbmRlZC4gTWFwIGVudHJpZXMgYXJlIGFkZGVkLCBvdmVyd3JpdGluZ1xuICAgICAqIGV4aXN0aW5nIGtleXMuXG4gICAgICpcbiAgICAgKiBJZiBhIG1lc3NhZ2UgZmllbGQgaXMgYWxyZWFkeSBwcmVzZW50LCBpdCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZVxuICAgICAqIG5ldyBkYXRhLlxuICAgICAqL1xuICAgIHJlYWQocmVhZGVyLCBtZXNzYWdlLCBvcHRpb25zLCBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlKCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAvLyByZWFkIHRoZSB0YWcgYW5kIGZpbmQgdGhlIGZpZWxkXG4gICAgICAgICAgICBjb25zdCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpLCBmaWVsZCA9IHRoaXMuZmllbGROb1RvRmllbGQuZ2V0KGZpZWxkTm8pO1xuICAgICAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgIGlmICh1ID09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy5pbmZvLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLmluZm8udHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRhcmdldCBvYmplY3QgZm9yIHRoZSBmaWVsZCB3ZSBhcmUgcmVhZGluZ1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IG1lc3NhZ2UsIHJlcGVhdGVkID0gZmllbGQucmVwZWF0LCBsb2NhbE5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgICAgICAvLyBpZiBmaWVsZCBpcyBtZW1iZXIgb2Ygb25lb2YgQURULCB1c2UgQURUIGFzIHRhcmdldFxuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2ZpZWxkLm9uZW9mXTtcbiAgICAgICAgICAgICAgICAvLyBpZiBvdGhlciBvbmVvZiBtZW1iZXIgc2VsZWN0ZWQsIHNldCBuZXcgQURUXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5vbmVvZktpbmQgIT09IGxvY2FsTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbWVzc2FnZVtmaWVsZC5vbmVvZl0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbmVvZktpbmQ6IGxvY2FsTmFtZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2UgaGF2ZSBoYW5kbGVkIG9uZW9mIGFib3ZlLCB3ZSBqdXN0IGhhdmUgcmVhZCB0aGUgdmFsdWUgaW50byBgdGFyZ2V0W2xvY2FsTmFtZV1gXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgbGV0IFQgPSBmaWVsZC5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlQ7XG4gICAgICAgICAgICAgICAgICAgIGxldCBMID0gZmllbGQua2luZCA9PSBcInNjYWxhclwiID8gZmllbGQuTCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGFyZ2V0W2xvY2FsTmFtZV07IC8vIHNhZmUgdG8gYXNzdW1lIHByZXNlbmNlIG9mIGFycmF5LCBvbmVvZiBjYW5ub3QgY29udGFpbiByZXBlYXRlZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXJlVHlwZSA9PSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkICYmIFQgIT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkcgJiYgVCAhPSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5zY2FsYXIocmVhZGVyLCBULCBMKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5zY2FsYXIocmVhZGVyLCBULCBMKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2xvY2FsTmFtZV0gPSB0aGlzLnNjYWxhcihyZWFkZXIsIFQsIEwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSB0YXJnZXRbbG9jYWxOYW1lXTsgLy8gc2FmZSB0byBhc3N1bWUgcHJlc2VuY2Ugb2YgYXJyYXksIG9uZW9mIGNhbm5vdCBjb250YWluIHJlcGVhdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1zZyA9IGZpZWxkLlQoKS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IGZpZWxkLlQoKS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIHRhcmdldFtsb2NhbE5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgICAgICBsZXQgW21hcEtleSwgbWFwVmFsXSA9IHRoaXMubWFwRW50cnkoZmllbGQsIHJlYWRlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNhZmUgdG8gYXNzdW1lIHByZXNlbmNlIG9mIG1hcCBvYmplY3QsIG9uZW9mIGNhbm5vdCBjb250YWluIHJlcGVhdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXVttYXBLZXldID0gbWFwVmFsO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgbWFwIGZpZWxkLCBleHBlY3Rpbmcga2V5IGZpZWxkID0gMSwgdmFsdWUgZmllbGQgPSAyXG4gICAgICovXG4gICAgbWFwRW50cnkoZmllbGQsIHJlYWRlciwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbGVuZ3RoID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICBsZXQgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgbGV0IGtleSA9IHVuZGVmaW5lZDsgLy8gamF2YXNjcmlwdCBvbmx5IGFsbG93cyBudW1iZXIgb3Igc3RyaW5nIGZvciBvYmplY3QgcHJvcGVydGllc1xuICAgICAgICBsZXQgdmFsID0gdW5kZWZpbmVkO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5LID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTClcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHJlYWRlci5ib29sKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9uZyB0eXBlcyBhcmUgcmVhZCBhcyBzdHJpbmcsIG51bWJlciB0eXBlcyBhcmUgb2theSBhcyBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuc2NhbGFyKHJlYWRlciwgZmllbGQuSywgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuU1RSSU5HKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuc2NhbGFyKHJlYWRlciwgZmllbGQuVi5ULCBmaWVsZC5WLkwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVi5UKCkuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBpbiBtYXAgZW50cnkgZm9yICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkLm5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQga2V5UmF3ID0gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KGZpZWxkLkspO1xuICAgICAgICAgICAga2V5ID0gZmllbGQuSyA9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0wgPyBrZXlSYXcudG9TdHJpbmcoKSA6IGtleVJhdztcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KGZpZWxkLlYuVCwgZmllbGQuVi5MKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVi5UKCkuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2tleSwgdmFsXTtcbiAgICB9XG4gICAgc2NhbGFyKHJlYWRlciwgdHlwZSwgbG9uZ1R5cGUpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5mbG9hdCgpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIuaW50NjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLnVpbnQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLmZpeGVkNjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5maXhlZDMyKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIuc2ZpeGVkMzIoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLnNmaXhlZDY0KCksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5zaW50MzIoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHJlYWRlci5zaW50NjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uQmluYXJ5UmVhZGVyID0gUmVmbGVjdGlvbkJpbmFyeVJlYWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXIgPSB2b2lkIDA7XG5jb25zdCBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9iaW5hcnktZm9ybWF0LWNvbnRyYWN0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG4vKipcbiAqIFdyaXRlcyBwcm90bzMgbWVzc2FnZXMgaW4gYmluYXJ5IGZvcm1hdCB1c2luZyByZWZsZWN0aW9uIGluZm9ybWF0aW9uLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9lbmNvZGluZ1xuICovXG5jbGFzcyBSZWZsZWN0aW9uQmluYXJ5V3JpdGVyIHtcbiAgICBjb25zdHJ1Y3RvcihpbmZvKSB7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfVxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0lucHV0ID0gdGhpcy5pbmZvLmZpZWxkcyA/IHRoaXMuaW5mby5maWVsZHMuY29uY2F0KCkgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzSW5wdXQuc29ydCgoYSwgYikgPT4gYS5ubyAtIGIubm8pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0LlxuICAgICAqL1xuICAgIHdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLnByZXBhcmUoKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgbGV0IHZhbHVlLCAvLyB0aGlzIHdpbGwgYmUgb3VyIGZpZWxkIHZhbHVlLCB3aGV0aGVyIGl0IGlzIG1lbWJlciBvZiBhIG9uZW9mIG9yIG5vdFxuICAgICAgICAgICAgZW1pdERlZmF1bHQsIC8vIHdoZXRoZXIgd2UgZW1pdCB0aGUgZGVmYXVsdCB2YWx1ZSAob25seSB0cnVlIGZvciBvbmVvZiBtZW1iZXJzKVxuICAgICAgICAgICAgcmVwZWF0ZWQgPSBmaWVsZC5yZXBlYXQsIGxvY2FsTmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBvbmVvZiBBRFRcbiAgICAgICAgICAgIGlmIChmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbWVzc2FnZVtmaWVsZC5vbmVvZl07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwLm9uZW9mS2luZCAhPT0gbG9jYWxOYW1lKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gaWYgZmllbGQgaXMgbm90IHNlbGVjdGVkLCBza2lwXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBncm91cFtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIGVtaXREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbWVzc2FnZVtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIGVtaXREZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGhhbmRsZWQgb25lb2YgYWJvdmUuIHdlIGp1c3QgaGF2ZSB0byBob25vciBgZW1pdERlZmF1bHRgLlxuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQua2luZCA9PSBcImVudW1cIiA/IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIgOiBmaWVsZC5UO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQgPT0gcmVmbGVjdGlvbl9pbmZvXzEuUmVwZWF0VHlwZS5QQUNLRUQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWNrZWQod3JpdGVyLCBULCBmaWVsZC5ubywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FsYXIod3JpdGVyLCBULCBmaWVsZC5ubywgaXRlbSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChmaWVsZC5vcHQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIFQsIGZpZWxkLm5vLCB2YWx1ZSwgZW1pdERlZmF1bHQgfHwgZmllbGQub3B0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoQXJyYXkuaXNBcnJheSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSh3cml0ZXIsIG9wdGlvbnMsIGZpZWxkLlQoKSwgZmllbGQubm8sIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlKHdyaXRlciwgb3B0aW9ucywgZmllbGQuVCgpLCBmaWVsZC5ubywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEVudHJ5KHdyaXRlciwgb3B0aW9ucywgZmllbGQsIGtleSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT09IHRydWUgPyBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy5pbmZvLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgIH1cbiAgICBtYXBFbnRyeSh3cml0ZXIsIG9wdGlvbnMsIGZpZWxkLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHdyaXRlci50YWcoZmllbGQubm8sIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpO1xuICAgICAgICB3cml0ZXIuZm9yaygpO1xuICAgICAgICAvLyBqYXZhc2NyaXB0IG9ubHkgYWxsb3dzIG51bWJlciBvciBzdHJpbmcgZm9yIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICAgIC8vIHdlIGNvbnZlcnQgZnJvbSBvdXIgcmVwcmVzZW50YXRpb24gdG8gdGhlIHByb3RvYnVmIHR5cGVcbiAgICAgICAgbGV0IGtleVZhbHVlID0ga2V5O1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLkspIHtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAga2V5VmFsdWUgPSBOdW1iZXIucGFyc2VJbnQoa2V5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChrZXkgPT0gJ3RydWUnIHx8IGtleSA9PSAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBrZXlWYWx1ZSA9IGtleSA9PSAndHJ1ZSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd3JpdGUga2V5LCBleHBlY3Rpbmcga2V5IGZpZWxkIG51bWJlciA9IDFcbiAgICAgICAgdGhpcy5zY2FsYXIod3JpdGVyLCBmaWVsZC5LLCAxLCBrZXlWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgIC8vIHdyaXRlIHZhbHVlLCBleHBlY3RpbmcgdmFsdWUgZmllbGQgbnVtYmVyID0gMlxuICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgY2FzZSAnc2NhbGFyJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIGZpZWxkLlYuVCwgMiwgdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsYXIod3JpdGVyLCByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyLCAyLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uod3JpdGVyLCBvcHRpb25zLCBmaWVsZC5WLlQoKSwgMiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5qb2luKCk7XG4gICAgfVxuICAgIG1lc3NhZ2Uod3JpdGVyLCBvcHRpb25zLCBoYW5kbGVyLCBmaWVsZE5vLCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaGFuZGxlci5pbnRlcm5hbEJpbmFyeVdyaXRlKHZhbHVlLCB3cml0ZXIudGFnKGZpZWxkTm8sIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucyk7XG4gICAgICAgIHdyaXRlci5qb2luKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgc2luZ2xlIHNjYWxhciB2YWx1ZS5cbiAgICAgKi9cbiAgICBzY2FsYXIod3JpdGVyLCB0eXBlLCBmaWVsZE5vLCB2YWx1ZSwgZW1pdERlZmF1bHQpIHtcbiAgICAgICAgbGV0IFt3aXJlVHlwZSwgbWV0aG9kLCBpc0RlZmF1bHRdID0gdGhpcy5zY2FsYXJJbmZvKHR5cGUsIHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc0RlZmF1bHQgfHwgZW1pdERlZmF1bHQpIHtcbiAgICAgICAgICAgIHdyaXRlci50YWcoZmllbGRObywgd2lyZVR5cGUpO1xuICAgICAgICAgICAgd3JpdGVyW21ldGhvZF0odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGFuIGFycmF5IG9mIHNjYWxhciB2YWx1ZXMgaW4gcGFja2VkIGZvcm1hdC5cbiAgICAgKi9cbiAgICBwYWNrZWQod3JpdGVyLCB0eXBlLCBmaWVsZE5vLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGUgIT09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVMgJiYgdHlwZSAhPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkcpO1xuICAgICAgICAvLyB3cml0ZSB0YWdcbiAgICAgICAgd3JpdGVyLnRhZyhmaWVsZE5vLCBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTtcbiAgICAgICAgLy8gYmVnaW4gbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICB3cml0ZXIuZm9yaygpO1xuICAgICAgICAvLyB3cml0ZSB2YWx1ZXMgd2l0aG91dCB0YWdzXG4gICAgICAgIGxldCBbLCBtZXRob2QsXSA9IHRoaXMuc2NhbGFySW5mbyh0eXBlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlclttZXRob2RdKHZhbHVlW2ldKTtcbiAgICAgICAgLy8gZW5kIGxlbmd0aCBkZWxpbWl0ZWRcbiAgICAgICAgd3JpdGVyLmpvaW4oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGluZm9ybWF0aW9uIGZvciB3cml0aW5nIGEgc2NhbGFyIHZhbHVlLlxuICAgICAqXG4gICAgICogUmV0dXJucyB0dXBsZTpcbiAgICAgKiBbMF06IGFwcHJvcHJpYXRlIFdpcmVUeXBlXG4gICAgICogWzFdOiBuYW1lIG9mIHRoZSBhcHByb3ByaWF0ZSBtZXRob2Qgb2YgSUJpbmFyeVdyaXRlclxuICAgICAqIFsyXTogd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkZWZhdWx0IHZhbHVlXG4gICAgICpcbiAgICAgKiBJZiBhcmd1bWVudCBgdmFsdWVgIGlzIG9taXR0ZWQsIFsyXSBpcyBhbHdheXMgZmFsc2UuXG4gICAgICovXG4gICAgc2NhbGFySW5mbyh0eXBlLCB2YWx1ZSkge1xuICAgICAgICBsZXQgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5WYXJpbnQ7XG4gICAgICAgIGxldCBtO1xuICAgICAgICBsZXQgaSA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBkID0gdmFsdWUgPT09IDA7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyOlxuICAgICAgICAgICAgICAgIG0gPSBcImludDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8ICF2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQ7XG4gICAgICAgICAgICAgICAgbSA9IFwic3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICBkID0gdmFsdWUgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgIG0gPSBcImJvb2xcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAgICAgbSA9IFwidWludDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIHQgPSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0NjQ7XG4gICAgICAgICAgICAgICAgbSA9IFwiZG91YmxlXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQzMjtcbiAgICAgICAgICAgICAgICBtID0gXCJmbG9hdFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSkuaXNaZXJvKCk7XG4gICAgICAgICAgICAgICAgbSA9IFwiaW50NjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UNjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiVUxvbmcuZnJvbSh2YWx1ZSkuaXNaZXJvKCk7XG4gICAgICAgICAgICAgICAgbSA9IFwidWludDY0XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDY0O1xuICAgICAgICAgICAgICAgIG0gPSBcImZpeGVkNjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUzpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCAhdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZDtcbiAgICAgICAgICAgICAgICBtID0gXCJieXRlc1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQzMjtcbiAgICAgICAgICAgICAgICBtID0gXCJmaXhlZDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQzMjtcbiAgICAgICAgICAgICAgICBtID0gXCJzZml4ZWQzMlwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSkuaXNaZXJvKCk7XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQ2NDtcbiAgICAgICAgICAgICAgICBtID0gXCJzZml4ZWQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICBtID0gXCJzaW50MzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICBtID0gXCJzaW50NjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3QsIG0sIGkgfHwgZF07XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uQmluYXJ5V3JpdGVyID0gUmVmbGVjdGlvbkJpbmFyeVdyaXRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25DcmVhdGUgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0XCIpO1xuY29uc3QgbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9tZXNzYWdlLXR5cGUtY29udHJhY3RcIik7XG4vKipcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdlbmVyaWMgbWVzc2FnZSwgdXNpbmcgdGhlIGZpZWxkXG4gKiBpbmZvcm1hdGlvbi5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbkNyZWF0ZSh0eXBlKSB7XG4gICAgLyoqXG4gICAgICogVGhpcyB0ZXJuYXJ5IGNhbiBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAgICogVGhlIGBPYmplY3QuY3JlYXRlKClgIGNvZGUgcGF0aCB1dGlsaXplcyBhIG5ldyBgbWVzc2FnZVByb3RvdHlwZWBcbiAgICAgKiBwcm9wZXJ0eSBvbiB0aGUgYElNZXNzYWdlVHlwZWAgd2hpY2ggaGFzIHRoaXMgc2FtZSBgTUVTU0FHRV9UWVBFYFxuICAgICAqIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IG9uIGl0LiBEb2luZyBpdCB0aGlzIHdheSBtZWFucyB0aGF0IHdlIG9ubHlcbiAgICAgKiBwYXkgdGhlIGNvc3Qgb2YgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpYCBvbmNlIHBlciBgSU1lc3NhZ2VUeXBlYFxuICAgICAqIGNsYXNzIG9mIG9uY2UgcGVyIFwiaW5zdGFuY2VcIi4gVGhlIGZhbHN5IGNvZGUgcGF0aCBpcyBvbmx5IHByb3ZpZGVkXG4gICAgICogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGluIGNhc2VzIHdoZXJlIHRoZSBydW50aW1lIGxpYnJhcnkgaXNcbiAgICAgKiB1cGRhdGVkIHdpdGhvdXQgYWxzbyB1cGRhdGluZyB0aGUgZ2VuZXJhdGVkIGNvZGUuXG4gICAgICovXG4gICAgY29uc3QgbXNnID0gdHlwZS5tZXNzYWdlUHJvdG90eXBlXG4gICAgICAgID8gT2JqZWN0LmNyZWF0ZSh0eXBlLm1lc3NhZ2VQcm90b3R5cGUpXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCBtZXNzYWdlX3R5cGVfY29udHJhY3RfMS5NRVNTQUdFX1RZUEUsIHsgdmFsdWU6IHR5cGUgfSk7XG4gICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgIGlmIChmaWVsZC5vcHQpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGZpZWxkLm9uZW9mKVxuICAgICAgICAgICAgbXNnW2ZpZWxkLm9uZW9mXSA9IHsgb25lb2ZLaW5kOiB1bmRlZmluZWQgfTtcbiAgICAgICAgZWxzZSBpZiAoZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgbXNnW25hbWVdID0gW107XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgbXNnW25hbWVdID0gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KGZpZWxkLlQsIGZpZWxkLkwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXF1aXJlIDAgdG8gYmUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGVudW1zXG4gICAgICAgICAgICAgICAgICAgIG1zZ1tuYW1lXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAgICAgbXNnW25hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbXNnO1xufVxuZXhwb3J0cy5yZWZsZWN0aW9uQ3JlYXRlID0gcmVmbGVjdGlvbkNyZWF0ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwgPSB2b2lkIDA7XG4vKipcbiAqIENvcHkgcGFydGlhbCBkYXRhIGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICpcbiAqIElmIGEgc2luZ3VsYXIgc2NhbGFyIG9yIGVudW0gZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgc291cmNlLCBpdFxuICogcmVwbGFjZXMgdGhlIGZpZWxkIGluIHRoZSB0YXJnZXQuXG4gKlxuICogSWYgYSBzaW5ndWxhciBtZXNzYWdlIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSwgaXQgaXMgbWVyZ2VkXG4gKiB3aXRoIHRoZSB0YXJnZXQgZmllbGQgYnkgY2FsbGluZyBtZXJnZVBhcnRpYWwoKSBvZiB0aGUgcmVzcG9uc2libGVcbiAqIG1lc3NhZ2UgdHlwZS5cbiAqXG4gKiBJZiBhIHJlcGVhdGVkIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSwgaXRzIHZhbHVlcyByZXBsYWNlXG4gKiBhbGwgdmFsdWVzIGluIHRoZSB0YXJnZXQgYXJyYXksIHJlbW92aW5nIGV4dHJhbmVvdXMgdmFsdWVzLlxuICogUmVwZWF0ZWQgbWVzc2FnZSBmaWVsZHMgYXJlIGNvcGllZCwgbm90IG1lcmdlZC5cbiAqXG4gKiBJZiBhIG1hcCBmaWVsZCBpcyBwcmVzZW50IGluIHRoZSBzb3VyY2UsIGVudHJpZXMgYXJlIGFkZGVkIHRvIHRoZVxuICogdGFyZ2V0IG1hcCwgcmVwbGFjaW5nIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBrZXkuIEVudHJpZXMgdGhhdCBvbmx5XG4gKiBleGlzdCBpbiB0aGUgdGFyZ2V0IHJlbWFpbi4gRW50cmllcyB3aXRoIG1lc3NhZ2UgdmFsdWVzIGFyZSBjb3BpZWQsXG4gKiBub3QgbWVyZ2VkLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBwcm90b2J1ZiBtZXJnZSBzZW1hbnRpY3MsXG4gKiB3aGljaCBhcHBlbmRzIHJlcGVhdGVkIGZpZWxkcy5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbk1lcmdlUGFydGlhbChpbmZvLCB0YXJnZXQsIHNvdXJjZSkge1xuICAgIGxldCBmaWVsZFZhbHVlLCAvLyB0aGUgZmllbGQgdmFsdWUgd2UgYXJlIHdvcmtpbmcgd2l0aFxuICAgIGlucHV0ID0gc291cmNlLCBvdXRwdXQ7IC8vIHdoZXJlIHdlIHdhbnQgb3VyIGZpZWxkIHZhbHVlIHRvIGdvXG4gICAgZm9yIChsZXQgZmllbGQgb2YgaW5mby5maWVsZHMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgIGlmIChmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBpbnB1dFtmaWVsZC5vbmVvZl07IC8vIHRoaXMgaXMgdGhlIG9uZW9mYHMgZ3JvdXAgaW4gdGhlIHNvdXJjZVxuICAgICAgICAgICAgaWYgKChncm91cCA9PT0gbnVsbCB8fCBncm91cCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ3JvdXAub25lb2ZLaW5kKSA9PSB1bmRlZmluZWQpIHsgLy8gdGhlIHVzZXIgaXMgZnJlZSB0byBvbWl0XG4gICAgICAgICAgICAgICAgY29udGludWU7IC8vIHdlIHNraXAgdGhpcyBmaWVsZCwgYW5kIGFsbCBvdGhlciBtZW1iZXJzIHRvb1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGdyb3VwW25hbWVdOyAvLyBvdXIgdmFsdWUgY29tZXMgZnJvbSB0aGUgdGhlIG9uZW9mIGdyb3VwIG9mIHRoZSBzb3VyY2VcbiAgICAgICAgICAgIG91dHB1dCA9IHRhcmdldFtmaWVsZC5vbmVvZl07IC8vIGFuZCBvdXIgb3V0cHV0IGlzIHRoZSBvbmVvZiBncm91cCBvZiB0aGUgdGFyZ2V0XG4gICAgICAgICAgICBvdXRwdXQub25lb2ZLaW5kID0gZ3JvdXAub25lb2ZLaW5kOyAvLyBhbHdheXMgdXBkYXRlIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvdXRwdXRbbmFtZV07IC8vIHJlbW92ZSBhbnkgZXhpc3RpbmcgdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCBmdXJ0aGVyIHdvcmsgb24gZmllbGRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBpbnB1dFtuYW1lXTsgLy8gd2UgYXJlIHVzaW5nIHRoZSBzb3VyY2UgZGlyZWN0bHlcbiAgICAgICAgICAgIG91dHB1dCA9IHRhcmdldDsgLy8gd2Ugd2FudCBvdXIgZmllbGQgdmFsdWUgdG8gZ28gZGlyZWN0bHkgaW50byB0aGUgdGFyZ2V0XG4gICAgICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCBmdXJ0aGVyIHdvcmsgb24gZmllbGQsIGV4aXN0aW5nIHZhbHVlIGlzIHVzZWQgYXMgaXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgb3V0cHV0W25hbWVdLmxlbmd0aCA9IGZpZWxkVmFsdWUubGVuZ3RoOyAvLyByZXNpemUgdGFyZ2V0IGFycmF5IHRvIG1hdGNoIHNvdXJjZSBhcnJheVxuICAgICAgICAvLyBub3cgd2UganVzdCB3b3JrIHdpdGggYGZpZWxkVmFsdWVgIGFuZCBgb3V0cHV0YCB0byBtZXJnZSB0aGUgdmFsdWVcbiAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRWYWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXVtpXSA9IGZpZWxkVmFsdWVbaV07IC8vIG5vdCBhIHJlZmVyZW5jZSB0eXBlXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV0gPSBmaWVsZFZhbHVlOyAvLyBub3QgYSByZWZlcmVuY2UgdHlwZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkVmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV1baV0gPSBULmNyZWF0ZShmaWVsZFZhbHVlW2ldKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRwdXRbbmFtZV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W25hbWVdID0gVC5jcmVhdGUoZmllbGRWYWx1ZSk7IC8vIG5vdGhpbmcgdG8gbWVyZ2Ugd2l0aFxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgVC5tZXJnZVBhcnRpYWwob3V0cHV0W25hbWVdLCBmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAvLyBNYXAgYW5kIHJlcGVhdGVkIGZpZWxkcyBhcmUgc2ltcGx5IG92ZXJ3cml0dGVuLCBub3QgYXBwZW5kZWQgb3IgbWVyZ2VkXG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvdXRwdXRbbmFtZV0sIGZpZWxkVmFsdWUpOyAvLyBlbGVtZW50cyBhcmUgbm90IHJlZmVyZW5jZSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLlYuVCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayBvZiBPYmplY3Qua2V5cyhmaWVsZFZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV1ba10gPSBULmNyZWF0ZShmaWVsZFZhbHVlW2tdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCA9IHJlZmxlY3Rpb25NZXJnZVBhcnRpYWw7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWZsZWN0aW9uRXF1YWxzID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0d28gbWVzc2FnZSBvZiB0aGUgc2FtZSB0eXBlIGhhdmUgdGhlIHNhbWUgZmllbGQgdmFsdWVzLlxuICogQ2hlY2tzIGZvciBkZWVwIGVxdWFsaXR5LCB0cmF2ZXJzaW5nIHJlcGVhdGVkIGZpZWxkcywgb25lb2YgZ3JvdXBzLCBtYXBzXG4gKiBhbmQgbWVzc2FnZXMgcmVjdXJzaXZlbHkuXG4gKiBXaWxsIGFsc28gcmV0dXJuIHRydWUgaWYgYm90aCBtZXNzYWdlcyBhcmUgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIHJlZmxlY3Rpb25FcXVhbHMoaW5mbywgYSwgYikge1xuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWEgfHwgIWIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBpbmZvLmZpZWxkcykge1xuICAgICAgICBsZXQgbG9jYWxOYW1lID0gZmllbGQubG9jYWxOYW1lO1xuICAgICAgICBsZXQgdmFsX2EgPSBmaWVsZC5vbmVvZiA/IGFbZmllbGQub25lb2ZdW2xvY2FsTmFtZV0gOiBhW2xvY2FsTmFtZV07XG4gICAgICAgIGxldCB2YWxfYiA9IGZpZWxkLm9uZW9mID8gYltmaWVsZC5vbmVvZl1bbG9jYWxOYW1lXSA6IGJbbG9jYWxOYW1lXTtcbiAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgIGxldCB0ID0gZmllbGQua2luZCA9PSBcImVudW1cIiA/IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIgOiBmaWVsZC5UO1xuICAgICAgICAgICAgICAgIGlmICghKGZpZWxkLnJlcGVhdFxuICAgICAgICAgICAgICAgICAgICA/IHJlcGVhdGVkUHJpbWl0aXZlRXEodCwgdmFsX2EsIHZhbF9iKVxuICAgICAgICAgICAgICAgICAgICA6IHByaW1pdGl2ZUVxKHQsIHZhbF9hLCB2YWxfYikpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgICAgICAgaWYgKCEoZmllbGQuVi5raW5kID09IFwibWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgID8gcmVwZWF0ZWRNc2dFcShmaWVsZC5WLlQoKSwgb2JqZWN0VmFsdWVzKHZhbF9hKSwgb2JqZWN0VmFsdWVzKHZhbF9iKSlcbiAgICAgICAgICAgICAgICAgICAgOiByZXBlYXRlZFByaW1pdGl2ZUVxKGZpZWxkLlYua2luZCA9PSBcImVudW1cIiA/IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIgOiBmaWVsZC5WLlQsIG9iamVjdFZhbHVlcyh2YWxfYSksIG9iamVjdFZhbHVlcyh2YWxfYikpKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIShmaWVsZC5yZXBlYXRcbiAgICAgICAgICAgICAgICAgICAgPyByZXBlYXRlZE1zZ0VxKFQsIHZhbF9hLCB2YWxfYilcbiAgICAgICAgICAgICAgICAgICAgOiBULmVxdWFscyh2YWxfYSwgdmFsX2IpKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0cy5yZWZsZWN0aW9uRXF1YWxzID0gcmVmbGVjdGlvbkVxdWFscztcbmNvbnN0IG9iamVjdFZhbHVlcyA9IE9iamVjdC52YWx1ZXM7XG5mdW5jdGlvbiBwcmltaXRpdmVFcSh0eXBlLCBhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICh0eXBlICE9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0IGJhID0gYTtcbiAgICBsZXQgYmIgPSBiO1xuICAgIGlmIChiYS5sZW5ndGggIT09IGJiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmEubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmIChiYVtpXSAhPSBiYltpXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlcGVhdGVkUHJpbWl0aXZlRXEodHlwZSwgYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghcHJpbWl0aXZlRXEodHlwZSwgYVtpXSwgYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiByZXBlYXRlZE1zZ0VxKHR5cGUsIGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKVxuICAgICAgICBpZiAoIXR5cGUuZXF1YWxzKGFbaV0sIGJbaV0pKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWVzc2FnZVR5cGUgPSB2b2lkIDA7XG5jb25zdCBtZXNzYWdlX3R5cGVfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZS1jb250cmFjdFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgcmVmbGVjdGlvbl90eXBlX2NoZWNrXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXR5cGUtY2hlY2tcIik7XG5jb25zdCByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24tcmVhZGVyXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9qc29uX3dyaXRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1qc29uLXdyaXRlclwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fYmluYXJ5X3JlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1iaW5hcnktcmVhZGVyXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9iaW5hcnlfd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWJpbmFyeS13cml0ZXJcIik7XG5jb25zdCByZWZsZWN0aW9uX2NyZWF0ZV8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1jcmVhdGVcIik7XG5jb25zdCByZWZsZWN0aW9uX21lcmdlX3BhcnRpYWxfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbFwiKTtcbmNvbnN0IGpzb25fdHlwaW5nc18xID0gcmVxdWlyZShcIi4vanNvbi10eXBpbmdzXCIpO1xuY29uc3QganNvbl9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2pzb24tZm9ybWF0LWNvbnRyYWN0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9lcXVhbHNfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tZXF1YWxzXCIpO1xuY29uc3QgYmluYXJ5X3dyaXRlcl8xID0gcmVxdWlyZShcIi4vYmluYXJ5LXdyaXRlclwiKTtcbmNvbnN0IGJpbmFyeV9yZWFkZXJfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1yZWFkZXJcIik7XG5jb25zdCBiYXNlRGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pKTtcbi8qKlxuICogVGhpcyBzdGFuZGFyZCBtZXNzYWdlIHR5cGUgcHJvdmlkZXMgcmVmbGVjdGlvbi1iYXNlZFxuICogb3BlcmF0aW9ucyB0byB3b3JrIHdpdGggYSBtZXNzYWdlLlxuICovXG5jbGFzcyBNZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgZmllbGRzLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdENoZWNrRGVwdGggPSAxNjtcbiAgICAgICAgdGhpcy50eXBlTmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzLm1hcChyZWZsZWN0aW9uX2luZm9fMS5ub3JtYWxpemVGaWVsZEluZm8pO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICAgICAgdGhpcy5tZXNzYWdlUHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJhc2VEZXNjcmlwdG9ycyksIHsgW21lc3NhZ2VfdHlwZV9jb250cmFjdF8xLk1FU1NBR0VfVFlQRV06IHsgdmFsdWU6IHRoaXMgfSB9KSk7XG4gICAgICAgIHRoaXMucmVmVHlwZUNoZWNrID0gbmV3IHJlZmxlY3Rpb25fdHlwZV9jaGVja18xLlJlZmxlY3Rpb25UeXBlQ2hlY2sodGhpcyk7XG4gICAgICAgIHRoaXMucmVmSnNvblJlYWRlciA9IG5ldyByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEuUmVmbGVjdGlvbkpzb25SZWFkZXIodGhpcyk7XG4gICAgICAgIHRoaXMucmVmSnNvbldyaXRlciA9IG5ldyByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEuUmVmbGVjdGlvbkpzb25Xcml0ZXIodGhpcyk7XG4gICAgICAgIHRoaXMucmVmQmluUmVhZGVyID0gbmV3IHJlZmxlY3Rpb25fYmluYXJ5X3JlYWRlcl8xLlJlZmxlY3Rpb25CaW5hcnlSZWFkZXIodGhpcyk7XG4gICAgICAgIHRoaXMucmVmQmluV3JpdGVyID0gbmV3IHJlZmxlY3Rpb25fYmluYXJ5X3dyaXRlcl8xLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXIodGhpcyk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHJlZmxlY3Rpb25fY3JlYXRlXzEucmVmbGVjdGlvbkNyZWF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9uZSB0aGUgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIFVua25vd24gZmllbGRzIGFyZSBkaXNjYXJkZWQuXG4gICAgICovXG4gICAgY2xvbmUobWVzc2FnZSkge1xuICAgICAgICBsZXQgY29weSA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwodGhpcywgY29weSwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIG1lc3NhZ2Ugb2YgdGhlIHNhbWUgdHlwZSBoYXZlIHRoZSBzYW1lIGZpZWxkIHZhbHVlcy5cbiAgICAgKiBDaGVja3MgZm9yIGRlZXAgZXF1YWxpdHksIHRyYXZlcnNpbmcgcmVwZWF0ZWQgZmllbGRzLCBvbmVvZiBncm91cHMsIG1hcHNcbiAgICAgKiBhbmQgbWVzc2FnZXMgcmVjdXJzaXZlbHkuXG4gICAgICogV2lsbCBhbHNvIHJldHVybiB0cnVlIGlmIGJvdGggbWVzc2FnZXMgYXJlIGB1bmRlZmluZWRgLlxuICAgICAqL1xuICAgIGVxdWFscyhhLCBiKSB7XG4gICAgICAgIHJldHVybiByZWZsZWN0aW9uX2VxdWFsc18xLnJlZmxlY3Rpb25FcXVhbHModGhpcywgYSwgYik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBnaXZlbiB2YWx1ZSBhc3NpZ25hYmxlIHRvIG91ciBtZXNzYWdlIHR5cGVcbiAgICAgKiBhbmQgY29udGFpbnMgbm8gW2V4Y2VzcyBwcm9wZXJ0aWVzXShodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9pbnRlcmZhY2VzLmh0bWwjZXhjZXNzLXByb3BlcnR5LWNoZWNrcyk/XG4gICAgICovXG4gICAgaXMoYXJnLCBkZXB0aCA9IHRoaXMuZGVmYXVsdENoZWNrRGVwdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmVHlwZUNoZWNrLmlzKGFyZywgZGVwdGgsIGZhbHNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGdpdmVuIHZhbHVlIGFzc2lnbmFibGUgdG8gb3VyIG1lc3NhZ2UgdHlwZSxcbiAgICAgKiByZWdhcmRsZXNzIG9mIFtleGNlc3MgcHJvcGVydGllc10oaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svaW50ZXJmYWNlcy5odG1sI2V4Y2Vzcy1wcm9wZXJ0eS1jaGVja3MpP1xuICAgICAqL1xuICAgIGlzQXNzaWduYWJsZShhcmcsIGRlcHRoID0gdGhpcy5kZWZhdWx0Q2hlY2tEZXB0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZUeXBlQ2hlY2suaXMoYXJnLCBkZXB0aCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvcHkgcGFydGlhbCBkYXRhIGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICAgICAqL1xuICAgIG1lcmdlUGFydGlhbCh0YXJnZXQsIHNvdXJjZSkge1xuICAgICAgICByZWZsZWN0aW9uX21lcmdlX3BhcnRpYWxfMS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKHRoaXMsIHRhcmdldCwgc291cmNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UgZnJvbSBiaW5hcnkgZm9ybWF0LlxuICAgICAqL1xuICAgIGZyb21CaW5hcnkoZGF0YSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgb3B0ID0gYmluYXJ5X3JlYWRlcl8xLmJpbmFyeVJlYWRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEJpbmFyeVJlYWQob3B0LnJlYWRlckZhY3RvcnkoZGF0YSksIGRhdGEuYnl0ZUxlbmd0aCwgb3B0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIG5ldyBtZXNzYWdlIGZyb20gYSBKU09OIHZhbHVlLlxuICAgICAqL1xuICAgIGZyb21Kc29uKGpzb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxKc29uUmVhZChqc29uLCBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25SZWFkT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBuZXcgbWVzc2FnZSBmcm9tIGEgSlNPTiBzdHJpbmcuXG4gICAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBULmZyb21Kc29uKEpTT04ucGFyc2UoanNvbikpYC5cbiAgICAgKi9cbiAgICBmcm9tSnNvblN0cmluZyhqc29uLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IEpTT04ucGFyc2UoanNvbik7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb21Kc29uKHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgdGhlIG1lc3NhZ2UgdG8gY2Fub25pY2FsIEpTT04gdmFsdWUuXG4gICAgICovXG4gICAgdG9Kc29uKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwganNvbl9mb3JtYXRfY29udHJhY3RfMS5qc29uV3JpdGVPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0aGUgbWVzc2FnZSB0byBjYW5vbmljYWwgSlNPTiBzdHJpbmcuXG4gICAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBKU09OLnN0cmluZ2lmeShULnRvSnNvbih0KSlgXG4gICAgICovXG4gICAgdG9Kc29uU3RyaW5nKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnRvSnNvbihtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJldHR5U3BhY2VzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdC5cbiAgICAgKi9cbiAgICB0b0JpbmFyeShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBvcHQgPSBiaW5hcnlfd3JpdGVyXzEuYmluYXJ5V3JpdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIG9wdC53cml0ZXJGYWN0b3J5KCksIG9wdCkuZmluaXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kLiBJZiB5b3UganVzdCB3YW50IHRvIHJlYWQgYSBtZXNzYWdlIGZyb21cbiAgICAgKiBKU09OLCB1c2UgYGZyb21Kc29uKClgIG9yIGBmcm9tSnNvblN0cmluZygpYC5cbiAgICAgKlxuICAgICAqIFJlYWRzIEpTT04gdmFsdWUgYW5kIG1lcmdlcyB0aGUgZmllbGRzIGludG8gdGhlIHRhcmdldFxuICAgICAqIGFjY29yZGluZyB0byBwcm90b2J1ZiBydWxlcy4gSWYgdGhlIHRhcmdldCBpcyBvbWl0dGVkLFxuICAgICAqIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQgZmlyc3QuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKGpzb24gIT09IG51bGwgJiYgdHlwZW9mIGpzb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZWZKc29uUmVhZGVyLnJlYWQoanNvbiwgbWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBtZXNzYWdlICR7dGhpcy50eXBlTmFtZX0gZnJvbSBKU09OICR7anNvbl90eXBpbmdzXzEudHlwZW9mSnNvblZhbHVlKGpzb24pfS5gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QuIElmIHlvdSBqdXN0IHdhbnQgdG8gd3JpdGUgYSBtZXNzYWdlXG4gICAgICogdG8gSlNPTiwgdXNlIGB0b0pzb24oKWAgb3IgYHRvSnNvblN0cmluZygpLlxuICAgICAqXG4gICAgICogV3JpdGVzIEpTT04gdmFsdWUgYW5kIHJldHVybnMgaXQuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLndyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZC4gSWYgeW91IGp1c3Qgd2FudCB0byB3cml0ZSBhIG1lc3NhZ2VcbiAgICAgKiBpbiBiaW5hcnkgZm9ybWF0LCB1c2UgYHRvQmluYXJ5KClgLlxuICAgICAqXG4gICAgICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSBpbiBiaW5hcnkgZm9ybWF0IGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBnaXZlblxuICAgICAqIHdyaXRlci4gUmV0dXJucyBwYXNzZWQgd3JpdGVyLlxuICAgICAqL1xuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucmVmQmluV3JpdGVyLndyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kLiBJZiB5b3UganVzdCB3YW50IHRvIHJlYWQgYSBtZXNzYWdlIGZyb21cbiAgICAgKiBiaW5hcnkgZGF0YSwgdXNlIGBmcm9tQmluYXJ5KClgLlxuICAgICAqXG4gICAgICogUmVhZHMgZGF0YSBmcm9tIGJpbmFyeSBmb3JtYXQgYW5kIG1lcmdlcyB0aGUgZmllbGRzIGludG9cbiAgICAgKiB0aGUgdGFyZ2V0IGFjY29yZGluZyB0byBwcm90b2J1ZiBydWxlcy4gSWYgdGhlIHRhcmdldCBpc1xuICAgICAqIG9taXR0ZWQsIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQgZmlyc3QuXG4gICAgICovXG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0aGlzLnJlZkJpblJlYWRlci5yZWFkKHJlYWRlciwgbWVzc2FnZSwgb3B0aW9ucywgbGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxufVxuZXhwb3J0cy5NZXNzYWdlVHlwZSA9IE1lc3NhZ2VUeXBlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udGFpbnNNZXNzYWdlVHlwZSA9IHZvaWQgMDtcbmNvbnN0IG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vbWVzc2FnZS10eXBlLWNvbnRyYWN0XCIpO1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgb2JqZWN0IGlzIGEgcHJvdG8gbWVzc2FnZS5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSAtIGl0IGlzIGhlcmUgdG8gc3RheSwgYnV0XG4gKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zTWVzc2FnZVR5cGUobXNnKSB7XG4gICAgcmV0dXJuIG1zZ1ttZXNzYWdlX3R5cGVfY29udHJhY3RfMS5NRVNTQUdFX1RZUEVdICE9IG51bGw7XG59XG5leHBvcnRzLmNvbnRhaW5zTWVzc2FnZVR5cGUgPSBjb250YWluc01lc3NhZ2VUeXBlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubGlzdEVudW1OdW1iZXJzID0gZXhwb3J0cy5saXN0RW51bU5hbWVzID0gZXhwb3J0cy5saXN0RW51bVZhbHVlcyA9IGV4cG9ydHMuaXNFbnVtT2JqZWN0ID0gdm9pZCAwO1xuLyoqXG4gKiBJcyB0aGlzIGEgbG9va3VwIG9iamVjdCBnZW5lcmF0ZWQgYnkgVHlwZXNjcmlwdCwgZm9yIGEgVHlwZXNjcmlwdCBlbnVtXG4gKiBnZW5lcmF0ZWQgYnkgcHJvdG9idWYtdHM/XG4gKlxuICogLSBObyBgY29uc3QgZW51bWAgKGVudW0gbXVzdCBub3QgYmUgaW5saW5lZCwgd2UgbmVlZCByZXZlcnNlIG1hcHBpbmcpLlxuICogLSBObyBzdHJpbmcgZW51bSAod2UgbmVlZCBpbnQzMiBmb3IgcHJvdG9idWYpLlxuICogLSBNdXN0IGhhdmUgYSB2YWx1ZSBmb3IgMCAob3RoZXJ3aXNlLCB3ZSB3b3VsZCBuZWVkIHRvIHN1cHBvcnQgY3VzdG9tIGRlZmF1bHQgdmFsdWVzKS5cbiAqL1xuZnVuY3Rpb24gaXNFbnVtT2JqZWN0KGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9ICdvYmplY3QnIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghYXJnLmhhc093blByb3BlcnR5KDApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChsZXQgayBvZiBPYmplY3Qua2V5cyhhcmcpKSB7XG4gICAgICAgIGxldCBudW0gPSBwYXJzZUludChrKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgICAgICAgICAgLy8gaXMgdGhlcmUgYSBuYW1lIGZvciB0aGUgbnVtYmVyP1xuICAgICAgICAgICAgbGV0IG5hbSA9IGFyZ1tudW1dO1xuICAgICAgICAgICAgaWYgKG5hbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIGRvZXMgdGhlIG5hbWUgcmVzb2x2ZSBiYWNrIHRvIHRoZSBudW1iZXI/XG4gICAgICAgICAgICBpZiAoYXJnW25hbV0gIT09IG51bSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBpcyB0aGVyZSBhIG51bWJlciBmb3IgdGhlIG5hbWU/XG4gICAgICAgICAgICBsZXQgbnVtID0gYXJnW2tdO1xuICAgICAgICAgICAgaWYgKG51bSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIGlzIGl0IGEgc3RyaW5nIGVudW0/XG4gICAgICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gJ251bWJlcicpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gZG8gd2Uga25vdyB0aGUgbnVtYmVyP1xuICAgICAgICAgICAgaWYgKGFyZ1tudW1dID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0cy5pc0VudW1PYmplY3QgPSBpc0VudW1PYmplY3Q7XG4vKipcbiAqIExpc3RzIGFsbCB2YWx1ZXMgb2YgYSBUeXBlc2NyaXB0IGVudW0sIGFzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhIFwibmFtZVwiXG4gKiBwcm9wZXJ0eSBhbmQgYSBcIm51bWJlclwiIHByb3BlcnR5LlxuICpcbiAqIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0aGF0IGEgbnVtYmVyIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UsIGJlY2F1c2UgaXQgaXNcbiAqIHBvc3NpYmxlIHRvIGhhdmUgYWxpYXNlcyBpbiBhbiBlbnVtLlxuICpcbiAqIFRocm93cyBpZiB0aGUgZW51bSBkb2VzIG5vdCBhZGhlcmUgdG8gdGhlIHJ1bGVzIG9mIGVudW1zIGdlbmVyYXRlZCBieVxuICogcHJvdG9idWYtdHMuIFNlZSBgaXNFbnVtT2JqZWN0KClgLlxuICovXG5mdW5jdGlvbiBsaXN0RW51bVZhbHVlcyhlbnVtT2JqZWN0KSB7XG4gICAgaWYgKCFpc0VudW1PYmplY3QoZW51bU9iamVjdCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBhIHR5cGVzY3JpcHQgZW51bSBvYmplY3RcIik7XG4gICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgIGZvciAobGV0IFtuYW1lLCBudW1iZXJdIG9mIE9iamVjdC5lbnRyaWVzKGVudW1PYmplY3QpKVxuICAgICAgICBpZiAodHlwZW9mIG51bWJlciA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgdmFsdWVzLnB1c2goeyBuYW1lLCBudW1iZXIgfSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbn1cbmV4cG9ydHMubGlzdEVudW1WYWx1ZXMgPSBsaXN0RW51bVZhbHVlcztcbi8qKlxuICogTGlzdHMgdGhlIG5hbWVzIG9mIGEgVHlwZXNjcmlwdCBlbnVtLlxuICpcbiAqIFRocm93cyBpZiB0aGUgZW51bSBkb2VzIG5vdCBhZGhlcmUgdG8gdGhlIHJ1bGVzIG9mIGVudW1zIGdlbmVyYXRlZCBieVxuICogcHJvdG9idWYtdHMuIFNlZSBgaXNFbnVtT2JqZWN0KClgLlxuICovXG5mdW5jdGlvbiBsaXN0RW51bU5hbWVzKGVudW1PYmplY3QpIHtcbiAgICByZXR1cm4gbGlzdEVudW1WYWx1ZXMoZW51bU9iamVjdCkubWFwKHZhbCA9PiB2YWwubmFtZSk7XG59XG5leHBvcnRzLmxpc3RFbnVtTmFtZXMgPSBsaXN0RW51bU5hbWVzO1xuLyoqXG4gKiBMaXN0cyB0aGUgbnVtYmVycyBvZiBhIFR5cGVzY3JpcHQgZW51bS5cbiAqXG4gKiBUaHJvd3MgaWYgdGhlIGVudW0gZG9lcyBub3QgYWRoZXJlIHRvIHRoZSBydWxlcyBvZiBlbnVtcyBnZW5lcmF0ZWQgYnlcbiAqIHByb3RvYnVmLXRzLiBTZWUgYGlzRW51bU9iamVjdCgpYC5cbiAqL1xuZnVuY3Rpb24gbGlzdEVudW1OdW1iZXJzKGVudW1PYmplY3QpIHtcbiAgICByZXR1cm4gbGlzdEVudW1WYWx1ZXMoZW51bU9iamVjdClcbiAgICAgICAgLm1hcCh2YWwgPT4gdmFsLm51bWJlcilcbiAgICAgICAgLmZpbHRlcigobnVtLCBpbmRleCwgYXJyKSA9PiBhcnIuaW5kZXhPZihudW0pID09IGluZGV4KTtcbn1cbmV4cG9ydHMubGlzdEVudW1OdW1iZXJzID0gbGlzdEVudW1OdW1iZXJzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIFB1YmxpYyBBUEkgb2YgdGhlIHByb3RvYnVmLXRzIHJ1bnRpbWUuXG4vLyBOb3RlOiB3ZSBkbyBub3QgdXNlIGBleHBvcnQgKiBmcm9tIC4uLmAgdG8gaGVscCB0cmVlIHNoYWtlcnMsXG4vLyB3ZWJwYWNrIHZlcmJvc2Ugb3V0cHV0IGhpbnRzIHRoYXQgdGhpcyBzaG91bGQgYmUgdXNlZnVsXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBDb252ZW5pZW5jZSBKU09OIHR5cGluZ3MgYW5kIGNvcnJlc3BvbmRpbmcgdHlwZSBndWFyZHNcbnZhciBqc29uX3R5cGluZ3NfMSA9IHJlcXVpcmUoXCIuL2pzb24tdHlwaW5nc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInR5cGVvZkpzb25WYWx1ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ganNvbl90eXBpbmdzXzEudHlwZW9mSnNvblZhbHVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNKc29uT2JqZWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX3R5cGluZ3NfMS5pc0pzb25PYmplY3Q7IH0gfSk7XG4vLyBCYXNlIDY0IGVuY29kaW5nXG52YXIgYmFzZTY0XzEgPSByZXF1aXJlKFwiLi9iYXNlNjRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiYXNlNjRkZWNvZGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJhc2U2NF8xLmJhc2U2NGRlY29kZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJhc2U2NGVuY29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZW5jb2RlOyB9IH0pO1xuLy8gVVRGOCBlbmNvZGluZ1xudmFyIHByb3RvYnVmanNfdXRmOF8xID0gcmVxdWlyZShcIi4vcHJvdG9idWZqcy11dGY4XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXRmOHJlYWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3RvYnVmanNfdXRmOF8xLnV0ZjhyZWFkOyB9IH0pO1xuLy8gQmluYXJ5IGZvcm1hdCBjb250cmFjdHMsIG9wdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcsIGZvciBleGFtcGxlXG52YXIgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vYmluYXJ5LWZvcm1hdC1jb250cmFjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIldpcmVUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZUJpbmFyeU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5tZXJnZUJpbmFyeU9wdGlvbnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbmtub3duRmllbGRIYW5kbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuVW5rbm93bkZpZWxkSGFuZGxlcjsgfSB9KTtcbi8vIFN0YW5kYXJkIElCaW5hcnlSZWFkZXIgaW1wbGVtZW50YXRpb25cbnZhciBiaW5hcnlfcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9iaW5hcnktcmVhZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmluYXJ5UmVhZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfcmVhZGVyXzEuQmluYXJ5UmVhZGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluYXJ5UmVhZE9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9yZWFkZXJfMS5iaW5hcnlSZWFkT3B0aW9uczsgfSB9KTtcbi8vIFN0YW5kYXJkIElCaW5hcnlXcml0ZXIgaW1wbGVtZW50YXRpb25cbnZhciBiaW5hcnlfd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9iaW5hcnktd3JpdGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmluYXJ5V3JpdGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfd3JpdGVyXzEuQmluYXJ5V3JpdGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluYXJ5V3JpdGVPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfd3JpdGVyXzEuYmluYXJ5V3JpdGVPcHRpb25zOyB9IH0pO1xuLy8gSW50NjQgYW5kIFVJbnQ2NCBpbXBsZW1lbnRhdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBiaW5hcnkgZm9ybWF0XG52YXIgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBiTG9uZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGJfbG9uZ18xLlBiTG9uZzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBiVUxvbmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBiX2xvbmdfMS5QYlVMb25nOyB9IH0pO1xuLy8gSlNPTiBmb3JtYXQgY29udHJhY3RzLCBvcHRpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLCBmb3IgZXhhbXBsZVxudmFyIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9qc29uLWZvcm1hdC1jb250cmFjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImpzb25SZWFkT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ganNvbl9mb3JtYXRfY29udHJhY3RfMS5qc29uUmVhZE9wdGlvbnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJqc29uV3JpdGVPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25Xcml0ZU9wdGlvbnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZUpzb25PcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX2Zvcm1hdF9jb250cmFjdF8xLm1lcmdlSnNvbk9wdGlvbnM7IH0gfSk7XG4vLyBNZXNzYWdlIHR5cGUgY29udHJhY3RcbnZhciBtZXNzYWdlX3R5cGVfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZS1jb250cmFjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1FU1NBR0VfVFlQRVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEuTUVTU0FHRV9UWVBFOyB9IH0pO1xuLy8gTWVzc2FnZSB0eXBlIGltcGxlbWVudGF0aW9uIHZpYSByZWZsZWN0aW9uXG52YXIgbWVzc2FnZV90eXBlXzEgPSByZXF1aXJlKFwiLi9tZXNzYWdlLXR5cGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNZXNzYWdlVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVzc2FnZV90eXBlXzEuTWVzc2FnZVR5cGU7IH0gfSk7XG4vLyBSZWZsZWN0aW9uIGluZm8sIGdlbmVyYXRlZCBieSB0aGUgcGx1Z2luLCBleHBvc2VkIHRvIHRoZSB1c2VyLCB1c2VkIGJ5IHJlZmxlY3Rpb24gb3BzXG52YXIgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTY2FsYXJUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTG9uZ1R5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVwZWF0VHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEuUmVwZWF0VHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vcm1hbGl6ZUZpZWxkSW5mb1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEubm9ybWFsaXplRmllbGRJbmZvOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZEZpZWxkT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZEZpZWxkT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRGaWVsZE9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZEZpZWxkT3B0aW9uOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZE1lc3NhZ2VPcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLnJlYWRNZXNzYWdlT3B0aW9uOyB9IH0pO1xuLy8gTWVzc2FnZSBvcGVyYXRpb25zIHZpYSByZWZsZWN0aW9uXG52YXIgcmVmbGVjdGlvbl90eXBlX2NoZWNrXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXR5cGUtY2hlY2tcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWZsZWN0aW9uVHlwZUNoZWNrXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX3R5cGVfY2hlY2tfMS5SZWZsZWN0aW9uVHlwZUNoZWNrOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fY3JlYXRlXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWNyZWF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZmxlY3Rpb25DcmVhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fY3JlYXRlXzEucmVmbGVjdGlvbkNyZWF0ZTsgfSB9KTtcbnZhciByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvblNjYWxhckRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMS5yZWZsZWN0aW9uU2NhbGFyRGVmYXVsdDsgfSB9KTtcbnZhciByZWZsZWN0aW9uX21lcmdlX3BhcnRpYWxfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZmxlY3Rpb25NZXJnZVBhcnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWw7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9lcXVhbHNfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tZXF1YWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvbkVxdWFsc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9lcXVhbHNfMS5yZWZsZWN0aW9uRXF1YWxzOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fYmluYXJ5X3JlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1iaW5hcnktcmVhZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkJpbmFyeVJlYWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEuUmVmbGVjdGlvbkJpbmFyeVJlYWRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2JpbmFyeV93cml0ZXJfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25CaW5hcnlXcml0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fYmluYXJ5X3dyaXRlcl8xLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXI7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9qc29uX3JlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1qc29uLXJlYWRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25Kc29uUmVhZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEuUmVmbGVjdGlvbkpzb25SZWFkZXI7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9qc29uX3dyaXRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1qc29uLXdyaXRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25Kc29uV3JpdGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEuUmVmbGVjdGlvbkpzb25Xcml0ZXI7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9jb250YWluc19tZXNzYWdlX3R5cGVfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tY29udGFpbnMtbWVzc2FnZS10eXBlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29udGFpbnNNZXNzYWdlVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9jb250YWluc19tZXNzYWdlX3R5cGVfMS5jb250YWluc01lc3NhZ2VUeXBlOyB9IH0pO1xuLy8gT25lb2YgaGVscGVyc1xudmFyIG9uZW9mXzEgPSByZXF1aXJlKFwiLi9vbmVvZlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT25lb2ZHcm91cFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb25lb2ZfMS5pc09uZW9mR3JvdXA7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRPbmVvZlZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLnNldE9uZW9mVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRPbmVvZlZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLmdldE9uZW9mVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjbGVhck9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuY2xlYXJPbmVvZlZhbHVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U2VsZWN0ZWRPbmVvZlZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLmdldFNlbGVjdGVkT25lb2ZWYWx1ZTsgfSB9KTtcbi8vIEVudW0gb2JqZWN0IHR5cGUgZ3VhcmQgYW5kIHJlZmxlY3Rpb24gdXRpbCwgbWF5IGJlIGludGVyZXN0aW5nIHRvIHRoZSB1c2VyLlxudmFyIGVudW1fb2JqZWN0XzEgPSByZXF1aXJlKFwiLi9lbnVtLW9iamVjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxpc3RFbnVtVmFsdWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmxpc3RFbnVtVmFsdWVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGlzdEVudW1OYW1lc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW51bV9vYmplY3RfMS5saXN0RW51bU5hbWVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGlzdEVudW1OdW1iZXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmxpc3RFbnVtTnVtYmVyczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRW51bU9iamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW51bV9vYmplY3RfMS5pc0VudW1PYmplY3Q7IH0gfSk7XG4vLyBsb3dlckNhbWVsQ2FzZSgpIGlzIGV4cG9ydGVkIGZvciBwbHVnaW4sIHJwYy1ydW50aW1lIGFuZCBvdGhlciBycGMgcGFja2FnZXNcbnZhciBsb3dlcl9jYW1lbF9jYXNlXzEgPSByZXF1aXJlKFwiLi9sb3dlci1jYW1lbC1jYXNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG93ZXJDYW1lbENhc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvd2VyX2NhbWVsX2Nhc2VfMS5sb3dlckNhbWVsQ2FzZTsgfSB9KTtcbi8vIGFzc2VydGlvbiBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciBwbHVnaW4sIG1heSBhbHNvIGJlIHVzZWZ1bCB0byB1c2VyXG52YXIgYXNzZXJ0XzEgPSByZXF1aXJlKFwiLi9hc3NlcnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc3NlcnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc2VydF8xLmFzc2VydDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydE5ldmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnROZXZlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydEludDMyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnRJbnQzMjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydFVJbnQzMlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzZXJ0XzEuYXNzZXJ0VUludDMyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0RmxvYXQzMlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzZXJ0XzEuYXNzZXJ0RmxvYXQzMjsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRpbWVzdGFtcCA9IHZvaWQgMDtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNCA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFRpbWVzdGFtcCRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuVGltZXN0YW1wXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwic2Vjb25kc1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIm5hbm9zXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDUgLypTY2FsYXJUeXBlLklOVDMyKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBgVGltZXN0YW1wYCBmb3IgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgKi9cbiAgICBub3coKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIGNvbnN0IG1zID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbXNnLnNlY29uZHMgPSBydW50aW1lXzYuUGJMb25nLmZyb20oTWF0aC5mbG9vcihtcyAvIDEwMDApKS50b1N0cmluZygpO1xuICAgICAgICBtc2cubmFub3MgPSAobXMgJSAxMDAwKSAqIDEwMDAwMDA7XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgYFRpbWVzdGFtcGAgdG8gYSBKYXZhU2NyaXB0IERhdGUuXG4gICAgICovXG4gICAgdG9EYXRlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHJ1bnRpbWVfNi5QYkxvbmcuZnJvbShtZXNzYWdlLnNlY29uZHMpLnRvTnVtYmVyKCkgKiAxMDAwICsgTWF0aC5jZWlsKG1lc3NhZ2UubmFub3MgLyAxMDAwMDAwKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgSmF2YVNjcmlwdCBEYXRlIHRvIGEgYFRpbWVzdGFtcGAuXG4gICAgICovXG4gICAgZnJvbURhdGUoZGF0ZSkge1xuICAgICAgICBjb25zdCBtc2cgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICBjb25zdCBtcyA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgICBtc2cuc2Vjb25kcyA9IHJ1bnRpbWVfNi5QYkxvbmcuZnJvbShNYXRoLmZsb29yKG1zIC8gMTAwMCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIG1zZy5uYW5vcyA9IChtcyAlIDEwMDApICogMTAwMDAwMDtcbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW4gSlNPTiBmb3JtYXQsIHRoZSBgVGltZXN0YW1wYCB0eXBlIGlzIGVuY29kZWQgYXMgYSBzdHJpbmdcbiAgICAgKiBpbiB0aGUgUkZDIDMzMzkgZm9ybWF0LlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IG1zID0gcnVudGltZV82LlBiTG9uZy5mcm9tKG1lc3NhZ2Uuc2Vjb25kcykudG9OdW1iZXIoKSAqIDEwMDA7XG4gICAgICAgIGlmIChtcyA8IERhdGUucGFyc2UoXCIwMDAxLTAxLTAxVDAwOjAwOjAwWlwiKSB8fCBtcyA+IERhdGUucGFyc2UoXCI5OTk5LTEyLTMxVDIzOjU5OjU5WlwiKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBlbmNvZGUgVGltZXN0YW1wIHRvIEpTT04uIE11c3QgYmUgZnJvbSAwMDAxLTAxLTAxVDAwOjAwOjAwWiB0byA5OTk5LTEyLTMxVDIzOjU5OjU5WiBpbmNsdXNpdmUuXCIpO1xuICAgICAgICBpZiAobWVzc2FnZS5uYW5vcyA8IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZW5jb2RlIGludmFsaWQgVGltZXN0YW1wIHRvIEpTT04uIE5hbm9zIG11c3Qgbm90IGJlIG5lZ2F0aXZlLlwiKTtcbiAgICAgICAgbGV0IHogPSBcIlpcIjtcbiAgICAgICAgaWYgKG1lc3NhZ2UubmFub3MgPiAwKSB7XG4gICAgICAgICAgICBsZXQgbmFub3NTdHIgPSAobWVzc2FnZS5uYW5vcyArIDEwMDAwMDAwMDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgaWYgKG5hbm9zU3RyLnN1YnN0cmluZygzKSA9PT0gXCIwMDAwMDBcIilcbiAgICAgICAgICAgICAgICB6ID0gXCIuXCIgKyBuYW5vc1N0ci5zdWJzdHJpbmcoMCwgMykgKyBcIlpcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKG5hbm9zU3RyLnN1YnN0cmluZyg2KSA9PT0gXCIwMDBcIilcbiAgICAgICAgICAgICAgICB6ID0gXCIuXCIgKyBuYW5vc1N0ci5zdWJzdHJpbmcoMCwgNikgKyBcIlpcIjtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB6ID0gXCIuXCIgKyBuYW5vc1N0ciArIFwiWlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShtcykudG9JU09TdHJpbmcoKS5yZXBsYWNlKFwiLjAwMFpcIiwgeik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluIEpTT04gZm9ybWF0LCB0aGUgYFRpbWVzdGFtcGAgdHlwZSBpcyBlbmNvZGVkIGFzIGEgc3RyaW5nXG4gICAgICogaW4gdGhlIFJGQyAzMzM5IGZvcm1hdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAodHlwZW9mIGpzb24gIT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTiBcIiArICgwLCBydW50aW1lXzUudHlwZW9mSnNvblZhbHVlKShqc29uKSArIFwiLlwiKTtcbiAgICAgICAgbGV0IG1hdGNoZXMgPSBqc29uLm1hdGNoKC9eKFswLTldezR9KS0oWzAtOV17Mn0pLShbMC05XXsyfSlUKFswLTldezJ9KTooWzAtOV17Mn0pOihbMC05XXsyfSkoPzpafFxcLihbMC05XXszLDl9KVp8KFsrLV1bMC05XVswLTldOlswLTldWzAtOV0pKSQvKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIFRpbWVzdGFtcCBmcm9tIEpTT04uIEludmFsaWQgZm9ybWF0LlwiKTtcbiAgICAgICAgbGV0IG1zID0gRGF0ZS5wYXJzZShtYXRjaGVzWzFdICsgXCItXCIgKyBtYXRjaGVzWzJdICsgXCItXCIgKyBtYXRjaGVzWzNdICsgXCJUXCIgKyBtYXRjaGVzWzRdICsgXCI6XCIgKyBtYXRjaGVzWzVdICsgXCI6XCIgKyBtYXRjaGVzWzZdICsgKG1hdGNoZXNbOF0gPyBtYXRjaGVzWzhdIDogXCJaXCIpKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihtcykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTi4gSW52YWxpZCB2YWx1ZS5cIik7XG4gICAgICAgIGlmIChtcyA8IERhdGUucGFyc2UoXCIwMDAxLTAxLTAxVDAwOjAwOjAwWlwiKSB8fCBtcyA+IERhdGUucGFyc2UoXCI5OTk5LTEyLTMxVDIzOjU5OjU5WlwiKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIFRpbWVzdGFtcCBmcm9tIEpTT04uIE11c3QgYmUgZnJvbSAwMDAxLTAxLTAxVDAwOjAwOjAwWiB0byA5OTk5LTEyLTMxVDIzOjU5OjU5WiBpbmNsdXNpdmUuXCIpO1xuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRhcmdldC5zZWNvbmRzID0gcnVudGltZV82LlBiTG9uZy5mcm9tKG1zIC8gMTAwMCkudG9TdHJpbmcoKTtcbiAgICAgICAgdGFyZ2V0Lm5hbm9zID0gMDtcbiAgICAgICAgaWYgKG1hdGNoZXNbN10pXG4gICAgICAgICAgICB0YXJnZXQubmFub3MgPSAocGFyc2VJbnQoXCIxXCIgKyBtYXRjaGVzWzddICsgXCIwXCIucmVwZWF0KDkgLSBtYXRjaGVzWzddLmxlbmd0aCkpIC0gMTAwMDAwMDAwMCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBzZWNvbmRzOiBcIjBcIiwgbmFub3M6IDAgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgc2Vjb25kcyAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNlY29uZHMgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDMyIG5hbm9zICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFub3MgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaW50NjQgc2Vjb25kcyA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnNlY29uZHMgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQ2NChtZXNzYWdlLnNlY29uZHMpO1xuICAgICAgICAvKiBpbnQzMiBuYW5vcyA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbm9zICE9PSAwKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQzMihtZXNzYWdlLm5hbm9zKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wXG4gKi9cbmV4cG9ydHMuVGltZXN0YW1wID0gbmV3IFRpbWVzdGFtcCRUeXBlKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lc3RhbXAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQnl0ZXNWYWx1ZSA9IGV4cG9ydHMuU3RyaW5nVmFsdWUgPSBleHBvcnRzLkJvb2xWYWx1ZSA9IGV4cG9ydHMuVUludDMyVmFsdWUgPSBleHBvcnRzLkludDMyVmFsdWUgPSBleHBvcnRzLlVJbnQ2NFZhbHVlID0gZXhwb3J0cy5JbnQ2NFZhbHVlID0gZXhwb3J0cy5GbG9hdFZhbHVlID0gZXhwb3J0cy5Eb3VibGVWYWx1ZSA9IHZvaWQgMDtcbi8vIEBnZW5lcmF0ZWQgYnkgcHJvdG9idWYtdHMgMi45LjEgd2l0aCBwYXJhbWV0ZXIgbG9uZ190eXBlX3N0cmluZyxjbGllbnRfbm9uZSxnZW5lcmF0ZV9kZXBlbmRlbmNpZXNcbi8vIEBnZW5lcmF0ZWQgZnJvbSBwcm90b2J1ZiBmaWxlIFwiZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvXCIgKHBhY2thZ2UgXCJnb29nbGUucHJvdG9idWZcIiwgc3ludGF4IHByb3RvMylcbi8vIHRzbGludDpkaXNhYmxlXG4vL1xuLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0XG4vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvXG4vL1xuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4vLyBtZXQ6XG4vL1xuLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbi8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbi8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJcbi8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGVcbi8vIGRpc3RyaWJ1dGlvbi5cbi8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbi8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy9cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbi8vIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Rcbi8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbi8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbi8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbi8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbi8vXG4vL1xuLy8gV3JhcHBlcnMgZm9yIHByaW1pdGl2ZSAobm9uLW1lc3NhZ2UpIHR5cGVzLiBUaGVzZSB0eXBlcyBhcmUgdXNlZnVsXG4vLyBmb3IgZW1iZWRkaW5nIHByaW1pdGl2ZXMgaW4gdGhlIGBnb29nbGUucHJvdG9idWYuQW55YCB0eXBlIGFuZCBmb3IgcGxhY2VzXG4vLyB3aGVyZSB3ZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGFic2VuY2Ugb2YgYSBwcmltaXRpdmVcbi8vIHR5cGVkIGZpZWxkIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZS5cbi8vXG5jb25zdCBydW50aW1lXzEgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzIgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzMgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzQgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzUgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzYgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzcgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBEb3VibGVWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAxIC8qU2NhbGFyVHlwZS5ET1VCTEUqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYERvdWJsZVZhbHVlYCB0byBKU09OIG51bWJlci5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDIsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYERvdWJsZVZhbHVlYCBmcm9tIEpTT04gbnVtYmVyLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxLCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBkb3VibGUgdmFsdWUgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogZG91YmxlIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5CaXQ2NCkuZG91YmxlKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZVxuICovXG5leHBvcnRzLkRvdWJsZVZhbHVlID0gbmV3IERvdWJsZVZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEZsb2F0VmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAyIC8qU2NhbGFyVHlwZS5GTE9BVCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgRmxvYXRWYWx1ZWAgdG8gSlNPTiBudW1iZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLnNjYWxhcigxLCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBGbG9hdFZhbHVlYCBmcm9tIEpTT04gbnVtYmVyLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxLCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBmbG9hdCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmZsb2F0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGZsb2F0IHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5CaXQzMikuZmxvYXQobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWVcbiAqL1xuZXhwb3J0cy5GbG9hdFZhbHVlID0gbmV3IEZsb2F0VmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgSW50NjRWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBJbnQ2NFZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKHJ1bnRpbWVfMS5TY2FsYXJUeXBlLklOVDY0LCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBJbnQ2NFZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCBydW50aW1lXzEuU2NhbGFyVHlwZS5JTlQ2NCwgcnVudGltZV8yLkxvbmdUeXBlLlNUUklORywgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQ2NCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaW50NjQgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlXG4gKi9cbmV4cG9ydHMuSW50NjRWYWx1ZSA9IG5ldyBJbnQ2NFZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFVJbnQ2NFZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDQgLypTY2FsYXJUeXBlLlVJTlQ2NCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgVUludDY0VmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIocnVudGltZV8xLlNjYWxhclR5cGUuVUlOVDY0LCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBVSW50NjRWYWx1ZWAgZnJvbSBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHRoaXMucmVmSnNvblJlYWRlci5zY2FsYXIoanNvbiwgcnVudGltZV8xLlNjYWxhclR5cGUuVUlOVDY0LCBydW50aW1lXzIuTG9uZ1R5cGUuU1RSSU5HLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHVpbnQ2NCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLnVpbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHVpbnQ2NCB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkudWludDY0KG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZVxuICovXG5leHBvcnRzLlVJbnQ2NFZhbHVlID0gbmV3IFVJbnQ2NFZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEludDMyVmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA1IC8qU2NhbGFyVHlwZS5JTlQzMiovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgSW50MzJWYWx1ZWAgdG8gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLnNjYWxhcig1LCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBJbnQzMlZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCA1LCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQzMiB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGludDMyIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5WYXJpbnQpLmludDMyKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlXG4gKi9cbmV4cG9ydHMuSW50MzJWYWx1ZSA9IG5ldyBJbnQzMlZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFVJbnQzMlZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDEzIC8qU2NhbGFyVHlwZS5VSU5UMzIqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYFVJbnQzMlZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDEzLCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBVSW50MzJWYWx1ZWAgZnJvbSBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHRoaXMucmVmSnNvblJlYWRlci5zY2FsYXIoanNvbiwgMTMsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHVpbnQzMiB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiB1aW50MzIgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkudWludDMyKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZVxuICovXG5leHBvcnRzLlVJbnQzMlZhbHVlID0gbmV3IFVJbnQzMlZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEJvb2xWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuQm9vbFZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOCAvKlNjYWxhclR5cGUuQk9PTCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgQm9vbFZhbHVlYCB0byBKU09OIGJvb2wuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbWVzc2FnZS52YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBCb29sVmFsdWVgIGZyb20gSlNPTiBib29sLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCA4LCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogZmFsc2UgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogYm9vbCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuQm9vbFZhbHVlXG4gKi9cbmV4cG9ydHMuQm9vbFZhbHVlID0gbmV3IEJvb2xWYWx1ZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBTdHJpbmdWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYFN0cmluZ1ZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYFN0cmluZ1ZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCA5LCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgdmFsdWUgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVcbiAqL1xuZXhwb3J0cy5TdHJpbmdWYWx1ZSA9IG5ldyBTdHJpbmdWYWx1ZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBCeXRlc1ZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMTIgLypTY2FsYXJUeXBlLkJZVEVTKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBCeXRlc1ZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDEyLCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBCeXRlc1ZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxMiwgdW5kZWZpbmVkLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IG5ldyBVaW50OEFycmF5KDApIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJ5dGVzIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYnl0ZXMgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmJ5dGVzKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlXG4gKi9cbmV4cG9ydHMuQnl0ZXNWYWx1ZSA9IG5ldyBCeXRlc1ZhbHVlJFR5cGUoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlYWRTZXJ2aWNlT3B0aW9uID0gZXhwb3J0cy5yZWFkTWV0aG9kT3B0aW9uID0gZXhwb3J0cy5yZWFkTWV0aG9kT3B0aW9ucyA9IGV4cG9ydHMubm9ybWFsaXplTWV0aG9kSW5mbyA9IHZvaWQgMDtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8qKlxuICogVHVybnMgUGFydGlhbE1ldGhvZEluZm8gaW50byBNZXRob2RJbmZvLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2RJbmZvKG1ldGhvZCwgc2VydmljZSkge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGxldCBtID0gbWV0aG9kO1xuICAgIG0uc2VydmljZSA9IHNlcnZpY2U7XG4gICAgbS5sb2NhbE5hbWUgPSAoX2EgPSBtLmxvY2FsTmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcnVudGltZV8xLmxvd2VyQ2FtZWxDYXNlKG0ubmFtZSk7XG4gICAgLy8gbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uSlNcbiAgICBtLnNlcnZlclN0cmVhbWluZyA9ICEhbS5zZXJ2ZXJTdHJlYW1pbmc7XG4gICAgLy8gbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uSlNcbiAgICBtLmNsaWVudFN0cmVhbWluZyA9ICEhbS5jbGllbnRTdHJlYW1pbmc7XG4gICAgbS5vcHRpb25zID0gKF9iID0gbS5vcHRpb25zKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fTtcbiAgICBtLmlkZW1wb3RlbmN5ID0gKF9jID0gbS5pZGVtcG90ZW5jeSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBtO1xufVxuZXhwb3J0cy5ub3JtYWxpemVNZXRob2RJbmZvID0gbm9ybWFsaXplTWV0aG9kSW5mbztcbi8qKlxuICogUmVhZCBjdXN0b20gbWV0aG9kIG9wdGlvbnMgZnJvbSBhIGdlbmVyYXRlZCBzZXJ2aWNlIGNsaWVudC5cbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2UgcmVhZE1ldGhvZE9wdGlvbigpXG4gKi9cbmZ1bmN0aW9uIHJlYWRNZXRob2RPcHRpb25zKHNlcnZpY2UsIG1ldGhvZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IHNlcnZpY2UubWV0aG9kcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PT0gbWV0aG9kTmFtZSB8fCBpID09PSBtZXRob2ROYW1lKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnM7XG4gICAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9uc1tleHRlbnNpb25OYW1lXSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uc1tleHRlbnNpb25OYW1lXSkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnJlYWRNZXRob2RPcHRpb25zID0gcmVhZE1ldGhvZE9wdGlvbnM7XG5mdW5jdGlvbiByZWFkTWV0aG9kT3B0aW9uKHNlcnZpY2UsIG1ldGhvZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IHNlcnZpY2UubWV0aG9kcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PT0gbWV0aG9kTmFtZSB8fCBpID09PSBtZXRob2ROYW1lKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnM7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvblZhbCA9IG9wdGlvbnNbZXh0ZW5zaW9uTmFtZV07XG4gICAgaWYgKG9wdGlvblZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25UeXBlID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25WYWwpIDogb3B0aW9uVmFsO1xufVxuZXhwb3J0cy5yZWFkTWV0aG9kT3B0aW9uID0gcmVhZE1ldGhvZE9wdGlvbjtcbmZ1bmN0aW9uIHJlYWRTZXJ2aWNlT3B0aW9uKHNlcnZpY2UsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2VydmljZS5vcHRpb25zO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25WYWwgPSBvcHRpb25zW2V4dGVuc2lvbk5hbWVdO1xuICAgIGlmIChvcHRpb25WYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uVHlwZSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uVmFsKSA6IG9wdGlvblZhbDtcbn1cbmV4cG9ydHMucmVhZFNlcnZpY2VPcHRpb24gPSByZWFkU2VydmljZU9wdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNlcnZpY2VUeXBlID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jbGFzcyBTZXJ2aWNlVHlwZSB7XG4gICAgY29uc3RydWN0b3IodHlwZU5hbWUsIG1ldGhvZHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lO1xuICAgICAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzLm1hcChpID0+IHJlZmxlY3Rpb25faW5mb18xLm5vcm1hbGl6ZU1ldGhvZEluZm8oaSwgdGhpcykpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZpY2VUeXBlID0gU2VydmljZVR5cGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ScGNFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogQW4gZXJyb3IgdGhhdCBvY2N1cnJlZCB3aGlsZSBjYWxsaW5nIGEgUlBDIG1ldGhvZC5cbiAqL1xuY2xhc3MgUnBjRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgY29kZSA9ICdVTktOT1dOJywgbWV0YSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1JwY0Vycm9yJztcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL3JlbGVhc2Utbm90ZXMvdHlwZXNjcmlwdC0yLTIuaHRtbCNleGFtcGxlXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGEgIT09IG51bGwgJiYgbWV0YSAhPT0gdm9pZCAwID8gbWV0YSA6IHt9O1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgbCA9IFt0aGlzLm5hbWUgKyAnOiAnICsgdGhpcy5tZXNzYWdlXTtcbiAgICAgICAgaWYgKHRoaXMuY29kZSkge1xuICAgICAgICAgICAgbC5wdXNoKCcnKTtcbiAgICAgICAgICAgIGwucHVzaCgnQ29kZTogJyArIHRoaXMuY29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VydmljZU5hbWUgJiYgdGhpcy5tZXRob2ROYW1lKSB7XG4gICAgICAgICAgICBsLnB1c2goJ01ldGhvZDogJyArIHRoaXMuc2VydmljZU5hbWUgKyAnLycgKyB0aGlzLm1ldGhvZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtID0gT2JqZWN0LmVudHJpZXModGhpcy5tZXRhKTtcbiAgICAgICAgaWYgKG0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBsLnB1c2goJycpO1xuICAgICAgICAgICAgbC5wdXNoKCdNZXRhOicpO1xuICAgICAgICAgICAgZm9yIChsZXQgW2ssIHZdIG9mIG0pIHtcbiAgICAgICAgICAgICAgICBsLnB1c2goYCAgJHtrfTogJHt2fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsLmpvaW4oJ1xcbicpO1xuICAgIH1cbn1cbmV4cG9ydHMuUnBjRXJyb3IgPSBScGNFcnJvcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlUnBjT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8qKlxuICogTWVyZ2VzIGN1c3RvbSBSUEMgb3B0aW9ucyB3aXRoIGRlZmF1bHRzLiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIGFuZCBrZWVwc1xuICogdGhlIFwiZGVmYXVsdHNcIiBhbmQgdGhlIFwib3B0aW9uc1wiIHVubW9kaWZpZWQuXG4gKlxuICogTWVyZ2VzIGBScGNNZXRhZGF0YWAgXCJtZXRhXCIsIG92ZXJ3cml0aW5nIHZhbHVlcyBmcm9tIFwiZGVmYXVsdHNcIiB3aXRoXG4gKiB2YWx1ZXMgZnJvbSBcIm9wdGlvbnNcIi4gRG9lcyBub3QgYXBwZW5kIHZhbHVlcyB0byBleGlzdGluZyBlbnRyaWVzLlxuICpcbiAqIE1lcmdlcyBcImpzb25PcHRpb25zXCIsIGluY2x1ZGluZyBcImpzb25PcHRpb25zLnR5cGVSZWdpc3RyeVwiLCBieSBjcmVhdGluZ1xuICogYSBuZXcgYXJyYXkgdGhhdCBjb250YWlucyB0eXBlcyBmcm9tIFwib3B0aW9ucy5qc29uT3B0aW9ucy50eXBlUmVnaXN0cnlcIlxuICogZmlyc3QsIHRoZW4gdHlwZXMgZnJvbSBcImRlZmF1bHRzLmpzb25PcHRpb25zLnR5cGVSZWdpc3RyeVwiLlxuICpcbiAqIE1lcmdlcyBcImJpbmFyeU9wdGlvbnNcIi5cbiAqXG4gKiBNZXJnZXMgXCJpbnRlcmNlcHRvcnNcIiBieSBjcmVhdGluZyBhIG5ldyBhcnJheSB0aGF0IGNvbnRhaW5zIGludGVyY2VwdG9yc1xuICogZnJvbSBcImRlZmF1bHRzXCIgZmlyc3QsIHRoZW4gaW50ZXJjZXB0b3JzIGZyb20gXCJvcHRpb25zXCIuXG4gKlxuICogV29ya3Mgd2l0aCBvYmplY3RzIHRoYXQgZXh0ZW5kIGBScGNPcHRpb25zYCwgYnV0IG9ubHkgaWYgdGhlIGFkZGVkXG4gKiBwcm9wZXJ0aWVzIGFyZSBvZiB0eXBlIERhdGUsIHByaW1pdGl2ZSBsaWtlIHN0cmluZywgYm9vbGVhbiwgb3IgQXJyYXlcbiAqIG9mIHByaW1pdGl2ZXMuIElmIHlvdSBoYXZlIG90aGVyIHByb3BlcnR5IHR5cGVzLCB5b3UgaGF2ZSB0byBtZXJnZSB0aGVtXG4gKiB5b3Vyc2VsZi5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VScGNPcHRpb25zKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKVxuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgbGV0IG8gPSB7fTtcbiAgICBjb3B5KGRlZmF1bHRzLCBvKTtcbiAgICBjb3B5KG9wdGlvbnMsIG8pO1xuICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhvcHRpb25zKSkge1xuICAgICAgICBsZXQgdmFsID0gb3B0aW9uc1trZXldO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSBcImpzb25PcHRpb25zXCI6XG4gICAgICAgICAgICAgICAgby5qc29uT3B0aW9ucyA9IHJ1bnRpbWVfMS5tZXJnZUpzb25PcHRpb25zKGRlZmF1bHRzLmpzb25PcHRpb25zLCBvLmpzb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlPcHRpb25zXCI6XG4gICAgICAgICAgICAgICAgby5iaW5hcnlPcHRpb25zID0gcnVudGltZV8xLm1lcmdlQmluYXJ5T3B0aW9ucyhkZWZhdWx0cy5iaW5hcnlPcHRpb25zLCBvLmJpbmFyeU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgICAgICAgICBvLm1ldGEgPSB7fTtcbiAgICAgICAgICAgICAgICBjb3B5KGRlZmF1bHRzLm1ldGEsIG8ubWV0YSk7XG4gICAgICAgICAgICAgICAgY29weShvcHRpb25zLm1ldGEsIG8ubWV0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaW50ZXJjZXB0b3JzXCI6XG4gICAgICAgICAgICAgICAgby5pbnRlcmNlcHRvcnMgPSBkZWZhdWx0cy5pbnRlcmNlcHRvcnMgPyBkZWZhdWx0cy5pbnRlcmNlcHRvcnMuY29uY2F0KHZhbCkgOiB2YWwuY29uY2F0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG87XG59XG5leHBvcnRzLm1lcmdlUnBjT3B0aW9ucyA9IG1lcmdlUnBjT3B0aW9ucztcbmZ1bmN0aW9uIGNvcHkoYSwgaW50bykge1xuICAgIGlmICghYSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGxldCBjID0gaW50bztcbiAgICBmb3IgKGxldCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoYSkpIHtcbiAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgY1trXSA9IG5ldyBEYXRlKHYuZ2V0VGltZSgpKTtcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2KSlcbiAgICAgICAgICAgIGNba10gPSB2LmNvbmNhdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjW2tdID0gdjtcbiAgICB9XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZlcnJlZCA9IGV4cG9ydHMuRGVmZXJyZWRTdGF0ZSA9IHZvaWQgMDtcbnZhciBEZWZlcnJlZFN0YXRlO1xuKGZ1bmN0aW9uIChEZWZlcnJlZFN0YXRlKSB7XG4gICAgRGVmZXJyZWRTdGF0ZVtEZWZlcnJlZFN0YXRlW1wiUEVORElOR1wiXSA9IDBdID0gXCJQRU5ESU5HXCI7XG4gICAgRGVmZXJyZWRTdGF0ZVtEZWZlcnJlZFN0YXRlW1wiUkVKRUNURURcIl0gPSAxXSA9IFwiUkVKRUNURURcIjtcbiAgICBEZWZlcnJlZFN0YXRlW0RlZmVycmVkU3RhdGVbXCJSRVNPTFZFRFwiXSA9IDJdID0gXCJSRVNPTFZFRFwiO1xufSkoRGVmZXJyZWRTdGF0ZSA9IGV4cG9ydHMuRGVmZXJyZWRTdGF0ZSB8fCAoZXhwb3J0cy5EZWZlcnJlZFN0YXRlID0ge30pKTtcbi8qKlxuICogQSBkZWZlcnJlZCBwcm9taXNlLiBUaGlzIGlzIGEgXCJjb250cm9sbGVyXCIgZm9yIGEgcHJvbWlzZSwgd2hpY2ggbGV0cyB5b3VcbiAqIHBhc3MgYSBwcm9taXNlIGFyb3VuZCBhbmQgcmVqZWN0IG9yIHJlc29sdmUgaXQgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBXYXJuaW5nOiBUaGlzIGNsYXNzIGlzIHRvIGJlIHVzZWQgd2l0aCBjYXJlLiBVc2luZyBpdCBjYW4gbWFrZSBjb2RlIHZlcnlcbiAqIGRpZmZpY3VsdCB0byByZWFkLiBJdCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGxpYnJhcnkgY29kZSB0aGF0IGV4cG9zZXNcbiAqIHByb21pc2VzLCBub3QgZm9yIHJlZ3VsYXIgYnVzaW5lc3MgbG9naWMuXG4gKi9cbmNsYXNzIERlZmVycmVkIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcHJldmVudFVuaGFuZGxlZFJlamVjdGlvbldhcm5pbmcgLSBwcmV2ZW50cyB0aGUgd2FybmluZ1xuICAgICAqIFwiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uXCIgYnkgYWRkaW5nIGEgbm9vcCByZWplY3Rpb24gaGFuZGxlci5cbiAgICAgKiBXb3JraW5nIHdpdGggY2FsbHMgcmV0dXJuZWQgZnJvbSB0aGUgcnVudGltZS1ycGMgcGFja2FnZSBpbiBhblxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIHVzdWFsbHkgbWVhbnMgYXdhaXRpbmcgb25lIGNhbGwgcHJvcGVydHkgYWZ0ZXJcbiAgICAgKiB0aGUgb3RoZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGUgXCJzdGF0dXNcIiBpcyBub3QgYmVpbmcgYXdhaXRlZCB3aGVuXG4gICAgICogYW4gZWFybGllciBhd2FpdCBmb3IgdGhlIFwiaGVhZGVyc1wiIGlzIHJlamVjdGVkLiBUaGlzIGNhdXNlcyB0aGVcbiAgICAgKiBcInVuaGFuZGxlZCBwcm9taXNlIHJlamVjdFwiIHdhcm5pbmcuIEEgbW9yZSBjb3JyZWN0IGJlaGF2aW91ciBmb3JcbiAgICAgKiBjYWxscyBtaWdodCBiZSB0byBiZWNvbWUgYXdhcmUgd2hldGhlciBhdCBsZWFzdCBvbmUgb2YgdGhlXG4gICAgICogcHJvbWlzZXMgaXMgaGFuZGxlZCBhbmQgc3dhbGxvdyB0aGUgcmVqZWN0aW9uIHdhcm5pbmcgZm9yIHRoZVxuICAgICAqIG90aGVycy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwcmV2ZW50VW5oYW5kbGVkUmVqZWN0aW9uV2FybmluZyA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZFN0YXRlLlBFTkRJTkc7XG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcmV2ZW50VW5oYW5kbGVkUmVqZWN0aW9uV2FybmluZykge1xuICAgICAgICAgICAgdGhpcy5fcHJvbWlzZS5jYXRjaChfID0+IHsgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwcm9taXNlLlxuICAgICAqL1xuICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlZmVycmVkIHByb21pc2UuXG4gICAgICovXG4gICAgZ2V0IHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlLiBUaHJvd3MgaWYgdGhlIHByb21pc2UgaXMgYWxyZWFkeSByZXNvbHZlZCBvciByZWplY3RlZC5cbiAgICAgKi9cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBEZWZlcnJlZFN0YXRlLlBFTkRJTkcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCByZXNvbHZlICR7RGVmZXJyZWRTdGF0ZVt0aGlzLnN0YXRlXS50b0xvd2VyQ2FzZSgpfWApO1xuICAgICAgICB0aGlzLl9yZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZFN0YXRlLlJFU09MVkVEO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWplY3QgdGhlIHByb21pc2UuIFRocm93cyBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkIG9yIHJlamVjdGVkLlxuICAgICAqL1xuICAgIHJlamVjdChyZWFzb24pIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlamVjdCAke0RlZmVycmVkU3RhdGVbdGhpcy5zdGF0ZV0udG9Mb3dlckNhc2UoKX1gKTtcbiAgICAgICAgdGhpcy5fcmVqZWN0KHJlYXNvbik7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gRGVmZXJyZWRTdGF0ZS5SRUpFQ1RFRDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSB0aGUgcHJvbWlzZS4gSWdub3JlIGlmIG5vdCBwZW5kaW5nLlxuICAgICAqL1xuICAgIHJlc29sdmVQZW5kaW5nKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSh2YWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWplY3QgdGhlIHByb21pc2UuIElnbm9yZSBpZiBub3QgcGVuZGluZy5cbiAgICAgKi9cbiAgICByZWplY3RQZW5kaW5nKHJlYXNvbikge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRoaXMucmVqZWN0KHJlYXNvbik7XG4gICAgfVxufVxuZXhwb3J0cy5EZWZlcnJlZCA9IERlZmVycmVkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlciA9IHZvaWQgMDtcbmNvbnN0IGRlZmVycmVkXzEgPSByZXF1aXJlKFwiLi9kZWZlcnJlZFwiKTtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8qKlxuICogQSBgUnBjT3V0cHV0U3RyZWFtYCB0aGF0IHlvdSBjb250cm9sLlxuICovXG5jbGFzcyBScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fbGlzID0ge1xuICAgICAgICAgICAgbnh0OiBbXSxcbiAgICAgICAgICAgIG1zZzogW10sXG4gICAgICAgICAgICBlcnI6IFtdLFxuICAgICAgICAgICAgY21wOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fY2xvc2VkID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIC0tLSBScGNPdXRwdXRTdHJlYW0gY2FsbGJhY2sgQVBJXG4gICAgb25OZXh0KGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpcyhjYWxsYmFjaywgdGhpcy5fbGlzLm54dCk7XG4gICAgfVxuICAgIG9uTWVzc2FnZShjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXMoY2FsbGJhY2ssIHRoaXMuX2xpcy5tc2cpO1xuICAgIH1cbiAgICBvbkVycm9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpcyhjYWxsYmFjaywgdGhpcy5fbGlzLmVycik7XG4gICAgfVxuICAgIG9uQ29tcGxldGUoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzKGNhbGxiYWNrLCB0aGlzLl9saXMuY21wKTtcbiAgICB9XG4gICAgYWRkTGlzKGNhbGxiYWNrLCBsaXN0KSB7XG4gICAgICAgIGxpc3QucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgaSA9IGxpc3QuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyByZW1vdmUgYWxsIGxpc3RlbmVyc1xuICAgIGNsZWFyTGlzKCkge1xuICAgICAgICBmb3IgKGxldCBsIG9mIE9iamVjdC52YWx1ZXModGhpcy5fbGlzKSlcbiAgICAgICAgICAgIGwuc3BsaWNlKDAsIGwubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gLS0tIENvbnRyb2xsZXIgQVBJXG4gICAgLyoqXG4gICAgICogSXMgdGhpcyBzdHJlYW0gYWxyZWFkeSBjbG9zZWQgYnkgYSBjb21wbGV0aW9uIG9yIGVycm9yP1xuICAgICAqL1xuICAgIGdldCBjbG9zZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9zZWQgIT09IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0IG1lc3NhZ2UsIGNsb3NlIHdpdGggZXJyb3IsIG9yIGNsb3NlIHN1Y2Nlc3NmdWxseSwgYnV0IG9ubHkgb25lXG4gICAgICogYXQgYSB0aW1lLlxuICAgICAqIENhbiBiZSB1c2VkIHRvIHdyYXAgYSBzdHJlYW0gYnkgdXNpbmcgdGhlIG90aGVyIHN0cmVhbSdzIGBvbk5leHRgLlxuICAgICAqL1xuICAgIG5vdGlmeU5leHQobWVzc2FnZSwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQoKG1lc3NhZ2UgPyAxIDogMCkgKyAoZXJyb3IgPyAxIDogMCkgKyAoY29tcGxldGUgPyAxIDogMCkgPD0gMSwgJ29ubHkgb25lIGVtaXNzaW9uIGF0IGEgdGltZScpO1xuICAgICAgICBpZiAobWVzc2FnZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlFcnJvcihlcnJvcik7XG4gICAgICAgIGlmIChjb21wbGV0ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q29tcGxldGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1pdHMgYSBuZXcgbWVzc2FnZS4gVGhyb3dzIGlmIHN0cmVhbSBpcyBjbG9zZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyBvbk5leHQgYW5kIG9uTWVzc2FnZSBjYWxsYmFja3MuXG4gICAgICovXG4gICAgbm90aWZ5TWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQoIXRoaXMuY2xvc2VkLCAnc3RyZWFtIGlzIGNsb3NlZCcpO1xuICAgICAgICB0aGlzLnB1c2hJdCh7IHZhbHVlOiBtZXNzYWdlLCBkb25lOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5fbGlzLm1zZy5mb3JFYWNoKGwgPT4gbChtZXNzYWdlKSk7XG4gICAgICAgIHRoaXMuX2xpcy5ueHQuZm9yRWFjaChsID0+IGwobWVzc2FnZSwgdW5kZWZpbmVkLCBmYWxzZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIHN0cmVhbSB3aXRoIGFuIGVycm9yLiBUaHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIG9uTmV4dCBhbmQgb25FcnJvciBjYWxsYmFja3MuXG4gICAgICovXG4gICAgbm90aWZ5RXJyb3IoZXJyb3IpIHtcbiAgICAgICAgcnVudGltZV8xLmFzc2VydCghdGhpcy5jbG9zZWQsICdzdHJlYW0gaXMgY2xvc2VkJyk7XG4gICAgICAgIHRoaXMuX2Nsb3NlZCA9IGVycm9yO1xuICAgICAgICB0aGlzLnB1c2hJdChlcnJvcik7XG4gICAgICAgIHRoaXMuX2xpcy5lcnIuZm9yRWFjaChsID0+IGwoZXJyb3IpKTtcbiAgICAgICAgdGhpcy5fbGlzLm54dC5mb3JFYWNoKGwgPT4gbCh1bmRlZmluZWQsIGVycm9yLCBmYWxzZSkpO1xuICAgICAgICB0aGlzLmNsZWFyTGlzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgc3RyZWFtIHN1Y2Nlc3NmdWxseS4gVGhyb3dzIGlmIHN0cmVhbSBpcyBjbG9zZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyBvbk5leHQgYW5kIG9uQ29tcGxldGUgY2FsbGJhY2tzLlxuICAgICAqL1xuICAgIG5vdGlmeUNvbXBsZXRlKCkge1xuICAgICAgICBydW50aW1lXzEuYXNzZXJ0KCF0aGlzLmNsb3NlZCwgJ3N0cmVhbSBpcyBjbG9zZWQnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wdXNoSXQoeyB2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5fbGlzLmNtcC5mb3JFYWNoKGwgPT4gbCgpKTtcbiAgICAgICAgdGhpcy5fbGlzLm54dC5mb3JFYWNoKGwgPT4gbCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICB0aGlzLmNsZWFyTGlzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXN5bmMgaXRlcmF0b3IgKHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBgZm9yIGF3YWl0IHsuLi59YClcbiAgICAgKiB0byBjb25zdW1lIHRoZSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBTb21lIHRoaW5ncyB0byBub3RlOlxuICAgICAqIC0gSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgYGZvciBhd2FpdGAgd2lsbCB0aHJvdyBpdC5cbiAgICAgKiAtIElmIGFuIGVycm9yIG9jY3VycmVkIGJlZm9yZSB0aGUgYGZvciBhd2FpdGAgd2FzIHN0YXJ0ZWQsIGBmb3IgYXdhaXRgXG4gICAgICogICB3aWxsIHJlLXRocm93IGl0LlxuICAgICAqIC0gSWYgdGhlIHN0cmVhbSBpcyBhbHJlYWR5IGNvbXBsZXRlLCB0aGUgYGZvciBhd2FpdGAgd2lsbCBiZSBlbXB0eS5cbiAgICAgKiAtIElmIHlvdXIgYGZvciBhd2FpdGAgY29uc3VtZXMgc2xvd2VyIHRoYW4gdGhlIHN0cmVhbSBwcm9kdWNlcyxcbiAgICAgKiAgIGZvciBleGFtcGxlIGJlY2F1c2UgeW91IGFyZSByZWxheWluZyBtZXNzYWdlcyBpbiBhIHNsb3cgb3BlcmF0aW9uLFxuICAgICAqICAgbWVzc2FnZXMgYXJlIHF1ZXVlZC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAvLyBpbml0IHRoZSBpdGVyYXRvciBzdGF0ZSwgZW5hYmxpbmcgcHVzaEl0KClcbiAgICAgICAgaWYgKCF0aGlzLl9pdFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9pdFN0YXRlID0geyBxOiBbXSB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGFyZSBjbG9zZWQsIHdlIGFyZSBkZWZpbml0ZWx5IG5vdCByZWNlaXZpbmcgYW55IG1vcmUgbWVzc2FnZXMuXG4gICAgICAgIC8vIGJ1dCB3ZSBjYW4ndCBsZXQgdGhlIGl0ZXJhdG9yIGdldCBzdHVjay4gd2Ugd2FudCB0byBlaXRoZXI6XG4gICAgICAgIC8vIGEpIGZpbmlzaCB0aGUgbmV3IGl0ZXJhdG9yIGltbWVkaWF0ZWx5LCBiZWNhdXNlIHdlIGFyZSBjb21wbGV0ZWRcbiAgICAgICAgLy8gYikgcmVqZWN0IHRoZSBuZXcgaXRlcmF0b3IsIGJlY2F1c2Ugd2UgZXJyb3JlZFxuICAgICAgICBpZiAodGhpcy5fY2xvc2VkID09PSB0cnVlKVxuICAgICAgICAgICAgdGhpcy5wdXNoSXQoeyB2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY2xvc2VkICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVzaEl0KHRoaXMuX2Nsb3NlZCk7XG4gICAgICAgIC8vIHRoZSBhc3luYyBpdGVyYXRvclxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuX2l0U3RhdGU7XG4gICAgICAgICAgICAgICAgcnVudGltZV8xLmFzc2VydChzdGF0ZSwgXCJiYWQgc3RhdGVcIik7IC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzdGF0ZSBoZXJlLCBjb2RlIGlzIGJyb2tlblxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIHNob3VsZCBiZSBubyBwZW5kaW5nIHJlc3VsdC5cbiAgICAgICAgICAgICAgICAvLyBkaWQgdGhlIGNvbnN1bWVyIGNhbGwgbmV4dCgpIGJlZm9yZSB3ZSByZXNvbHZlZCBvdXIgcHJldmlvdXMgcmVzdWx0IHByb21pc2U/XG4gICAgICAgICAgICAgICAgcnVudGltZV8xLmFzc2VydCghc3RhdGUucCwgXCJpdGVyYXRvciBjb250cmFjdCBicm9rZW5cIik7XG4gICAgICAgICAgICAgICAgLy8gZGlkIHdlIHByb2R1Y2UgZmFzdGVyIHRoYW4gdGhlIGl0ZXJhdG9yIGNvbnN1bWVkP1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiB0aGUgb2xkZXN0IHJlc3VsdCBmcm9tIHRoZSBxdWV1ZS5cbiAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSBzdGF0ZS5xLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFwidmFsdWVcIiBpbiBmaXJzdCkgPyBQcm9taXNlLnJlc29sdmUoZmlyc3QpIDogUHJvbWlzZS5yZWplY3QoZmlyc3QpO1xuICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gcmVzdWx0IEFUTSwgYnV0IHdlIHByb21pc2Ugb25lLlxuICAgICAgICAgICAgICAgIC8vIGFzIHNvb24gYXMgd2UgaGF2ZSBhIHJlc3VsdCwgd2UgbXVzdCByZXNvbHZlIHByb21pc2UuXG4gICAgICAgICAgICAgICAgc3RhdGUucCA9IG5ldyBkZWZlcnJlZF8xLkRlZmVycmVkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnAucHJvbWlzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFwicHVzaFwiIGEgbmV3IGl0ZXJhdG9yIHJlc3VsdC5cbiAgICAvLyB0aGlzIGVpdGhlciByZXNvbHZlcyBhIHBlbmRpbmcgcHJvbWlzZSwgb3IgZW5xdWV1ZXMgdGhlIHJlc3VsdC5cbiAgICBwdXNoSXQocmVzdWx0KSB7XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuX2l0U3RhdGU7XG4gICAgICAgIGlmICghc3RhdGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIGlzIHRoZSBjb25zdW1lciB3YWl0aW5nIGZvciB1cz9cbiAgICAgICAgaWYgKHN0YXRlLnApIHtcbiAgICAgICAgICAgIC8vIHllcywgY29uc3VtZXIgaXMgd2FpdGluZyBmb3IgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgY29uc3QgcCA9IHN0YXRlLnA7XG4gICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KHAuc3RhdGUgPT0gZGVmZXJyZWRfMS5EZWZlcnJlZFN0YXRlLlBFTkRJTkcsIFwiaXRlcmF0b3IgY29udHJhY3QgYnJva2VuXCIpO1xuICAgICAgICAgICAgLy8gcmVzb2x2ZSB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgKFwidmFsdWVcIiBpbiByZXN1bHQpID8gcC5yZXNvbHZlKHJlc3VsdCkgOiBwLnJlamVjdChyZXN1bHQpO1xuICAgICAgICAgICAgLy8gbXVzdCBjbGVhbnVwLCBvdGhlcndpc2UgaXRlcmF0b3IubmV4dCgpIHdvdWxkIHBpY2sgaXQgdXAgYWdhaW4uXG4gICAgICAgICAgICBkZWxldGUgc3RhdGUucDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHdlIGFyZSBwcm9kdWNpbmcgZmFzdGVyIHRoYW4gdGhlIGl0ZXJhdG9yIGNvbnN1bWVzLlxuICAgICAgICAgICAgLy8gcHVzaCByZXN1bHQgb250byBxdWV1ZS5cbiAgICAgICAgICAgIHN0YXRlLnEucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5ScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyID0gUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVW5hcnlDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIHVuYXJ5IFJQQyBjYWxsLiBVbmFyeSBtZWFucyB0aGVyZSBpcyBleGFjdGx5IG9uZSBpbnB1dCBtZXNzYWdlIGFuZFxuICogZXhhY3RseSBvbmUgb3V0cHV0IG1lc3NhZ2UgdW5sZXNzIGFuIGVycm9yIG9jY3VycmVkLlxuICovXG5jbGFzcyBVbmFyeUNhbGwge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdEhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudHJhaWxlcnMgPSB0cmFpbGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpbmFsIG91dGNvbWUgb2YgdGhpcyBjYWxsLFxuICAgICAqIHlvdSBjYW4gYXdhaXQgaXQgdG8gcmVjZWl2ZSBhIGBGaW5pc2hlZFVuYXJ5Q2FsbGAuXG4gICAgICovXG4gICAgdGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlRmluaXNoZWQoKS50aGVuKHZhbHVlID0+IG9uZnVsZmlsbGVkID8gUHJvbWlzZS5yZXNvbHZlKG9uZnVsZmlsbGVkKHZhbHVlKSkgOiB2YWx1ZSwgcmVhc29uID0+IG9ucmVqZWN0ZWQgPyBQcm9taXNlLnJlc29sdmUob25yZWplY3RlZChyZWFzb24pKSA6IFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xuICAgIH1cbiAgICBwcm9taXNlRmluaXNoZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzXSA9IHlpZWxkIFByb21pc2UuYWxsKFt0aGlzLmhlYWRlcnMsIHRoaXMucmVzcG9uc2UsIHRoaXMuc3RhdHVzLCB0aGlzLnRyYWlsZXJzXSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnM6IHRoaXMucmVxdWVzdEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlVuYXJ5Q2FsbCA9IFVuYXJ5Q2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VydmVyU3RyZWFtaW5nQ2FsbCA9IHZvaWQgMDtcbi8qKlxuICogQSBzZXJ2ZXIgc3RyZWFtaW5nIFJQQyBjYWxsLiBUaGUgY2xpZW50IHByb3ZpZGVzIGV4YWN0bHkgb25lIGlucHV0IG1lc3NhZ2VcbiAqIGJ1dCB0aGUgc2VydmVyIG1heSByZXNwb25kIHdpdGggMCwgMSwgb3IgbW9yZSBtZXNzYWdlcy5cbiAqL1xuY2xhc3MgU2VydmVyU3RyZWFtaW5nQ2FsbCB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgcmVxdWVzdCwgaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnMpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0SGVhZGVycztcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZXMgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudHJhaWxlcnMgPSB0cmFpbGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5zdGVhZCBvZiBhd2FpdGluZyB0aGUgcmVzcG9uc2Ugc3RhdHVzIGFuZCB0cmFpbGVycywgeW91IGNhblxuICAgICAqIGp1c3QgYXMgd2VsbCBhd2FpdCB0aGlzIGNhbGwgaXRzZWxmIHRvIHJlY2VpdmUgdGhlIHNlcnZlciBvdXRjb21lLlxuICAgICAqIFlvdSBzaG91bGQgZmlyc3Qgc2V0dXAgc29tZSBsaXN0ZW5lcnMgdG8gdGhlIGByZXF1ZXN0YCB0b1xuICAgICAqIHNlZSB0aGUgYWN0dWFsIG1lc3NhZ2VzIHRoZSBzZXJ2ZXIgcmVwbGllZCB3aXRoLlxuICAgICAqL1xuICAgIHRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZUZpbmlzaGVkKCkudGhlbih2YWx1ZSA9PiBvbmZ1bGZpbGxlZCA/IFByb21pc2UucmVzb2x2ZShvbmZ1bGZpbGxlZCh2YWx1ZSkpIDogdmFsdWUsIHJlYXNvbiA9PiBvbnJlamVjdGVkID8gUHJvbWlzZS5yZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSkgOiBQcm9taXNlLnJlamVjdChyZWFzb24pKTtcbiAgICB9XG4gICAgcHJvbWlzZUZpbmlzaGVkKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgbGV0IFtoZWFkZXJzLCBzdGF0dXMsIHRyYWlsZXJzXSA9IHlpZWxkIFByb21pc2UuYWxsKFt0aGlzLmhlYWRlcnMsIHRoaXMuc3RhdHVzLCB0aGlzLnRyYWlsZXJzXSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnM6IHRoaXMucmVxdWVzdEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5TZXJ2ZXJTdHJlYW1pbmdDYWxsID0gU2VydmVyU3RyZWFtaW5nQ2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2xpZW50U3RyZWFtaW5nQ2FsbCA9IHZvaWQgMDtcbi8qKlxuICogQSBjbGllbnQgc3RyZWFtaW5nIFJQQyBjYWxsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNsaWVudHMgc2VuZHMgMCwgMSwgb3JcbiAqIG1vcmUgbWVzc2FnZXMgdG8gdGhlIHNlcnZlciwgYW5kIHRoZSBzZXJ2ZXIgcmVwbGllcyB3aXRoIGV4YWN0bHkgb25lXG4gKiBtZXNzYWdlLlxuICovXG5jbGFzcyBDbGllbnRTdHJlYW1pbmdDYWxsIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCByZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVycykge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzO1xuICAgICAgICB0aGlzLnJlcXVlc3RzID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnN0ZWFkIG9mIGF3YWl0aW5nIHRoZSByZXNwb25zZSBzdGF0dXMgYW5kIHRyYWlsZXJzLCB5b3UgY2FuXG4gICAgICoganVzdCBhcyB3ZWxsIGF3YWl0IHRoaXMgY2FsbCBpdHNlbGYgdG8gcmVjZWl2ZSB0aGUgc2VydmVyIG91dGNvbWUuXG4gICAgICogTm90ZSB0aGF0IGl0IG1heSBzdGlsbCBiZSB2YWxpZCB0byBzZW5kIG1vcmUgcmVxdWVzdCBtZXNzYWdlcy5cbiAgICAgKi9cbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2VGaW5pc2hlZCgpLnRoZW4odmFsdWUgPT4gb25mdWxmaWxsZWQgPyBQcm9taXNlLnJlc29sdmUob25mdWxmaWxsZWQodmFsdWUpKSA6IHZhbHVlLCByZWFzb24gPT4gb25yZWplY3RlZCA/IFByb21pc2UucmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpIDogUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG4gICAgfVxuICAgIHByb21pc2VGaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBbaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5yZXNwb25zZSwgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgICAgICB0cmFpbGVyc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5DbGllbnRTdHJlYW1pbmdDYWxsID0gQ2xpZW50U3RyZWFtaW5nQ2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRHVwbGV4U3RyZWFtaW5nQ2FsbCA9IHZvaWQgMDtcbi8qKlxuICogQSBkdXBsZXggc3RyZWFtaW5nIFJQQyBjYWxsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNsaWVudHMgc2VuZHMgYW5cbiAqIGFyYml0cmFyeSBhbW91bnQgb2YgbWVzc2FnZXMgdG8gdGhlIHNlcnZlciwgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSxcbiAqIHRoZSBzZXJ2ZXIgc2VuZHMgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiBtZXNzYWdlcyB0byB0aGUgY2xpZW50LlxuICovXG5jbGFzcyBEdXBsZXhTdHJlYW1pbmdDYWxsIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCByZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVycykge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzO1xuICAgICAgICB0aGlzLnJlcXVlc3RzID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZXMgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudHJhaWxlcnMgPSB0cmFpbGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5zdGVhZCBvZiBhd2FpdGluZyB0aGUgcmVzcG9uc2Ugc3RhdHVzIGFuZCB0cmFpbGVycywgeW91IGNhblxuICAgICAqIGp1c3QgYXMgd2VsbCBhd2FpdCB0aGlzIGNhbGwgaXRzZWxmIHRvIHJlY2VpdmUgdGhlIHNlcnZlciBvdXRjb21lLlxuICAgICAqIE5vdGUgdGhhdCBpdCBtYXkgc3RpbGwgYmUgdmFsaWQgdG8gc2VuZCBtb3JlIHJlcXVlc3QgbWVzc2FnZXMuXG4gICAgICovXG4gICAgdGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlRmluaXNoZWQoKS50aGVuKHZhbHVlID0+IG9uZnVsZmlsbGVkID8gUHJvbWlzZS5yZXNvbHZlKG9uZnVsZmlsbGVkKHZhbHVlKSkgOiB2YWx1ZSwgcmVhc29uID0+IG9ucmVqZWN0ZWQgPyBQcm9taXNlLnJlc29sdmUob25yZWplY3RlZChyZWFzb24pKSA6IFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xuICAgIH1cbiAgICBwcm9taXNlRmluaXNoZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWRlcnMsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgICAgICB0cmFpbGVycyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuRHVwbGV4U3RyZWFtaW5nQ2FsbCA9IER1cGxleFN0cmVhbWluZ0NhbGw7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRlc3RUcmFuc3BvcnQgPSB2b2lkIDA7XG5jb25zdCBycGNfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL3JwYy1lcnJvclwiKTtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJwY19vdXRwdXRfc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9ycGMtb3V0cHV0LXN0cmVhbVwiKTtcbmNvbnN0IHJwY19vcHRpb25zXzEgPSByZXF1aXJlKFwiLi9ycGMtb3B0aW9uc1wiKTtcbmNvbnN0IHVuYXJ5X2NhbGxfMSA9IHJlcXVpcmUoXCIuL3VuYXJ5LWNhbGxcIik7XG5jb25zdCBzZXJ2ZXJfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1zdHJlYW1pbmctY2FsbFwiKTtcbmNvbnN0IGNsaWVudF9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vY2xpZW50LXN0cmVhbWluZy1jYWxsXCIpO1xuY29uc3QgZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9kdXBsZXgtc3RyZWFtaW5nLWNhbGxcIik7XG4vKipcbiAqIFRyYW5zcG9ydCBmb3IgdGVzdGluZy5cbiAqL1xuY2xhc3MgVGVzdFRyYW5zcG9ydCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB3aXRoIG1vY2sgZGF0YS4gT21pdHRlZCBmaWVsZHMgaGF2ZSBkZWZhdWx0IHZhbHVlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1cHByZXNzIHdhcm5pbmcgLyBlcnJvciBhYm91dCB1bmNhdWdodCByZWplY3Rpb25zIG9mXG4gICAgICAgICAqIFwic3RhdHVzXCIgYW5kIFwidHJhaWxlcnNcIi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3VwcHJlc3NVbmNhdWdodFJlamVjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLmhlYWRlckRlbGF5ID0gMTA7XG4gICAgICAgIHRoaXMucmVzcG9uc2VEZWxheSA9IDUwO1xuICAgICAgICB0aGlzLmJldHdlZW5SZXNwb25zZURlbGF5ID0gMTA7XG4gICAgICAgIHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5ID0gMTA7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdm9pZCAwID8gZGF0YSA6IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW50IG1lc3NhZ2UocykgZHVyaW5nIHRoZSBsYXN0IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBnZXQgc2VudE1lc3NhZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5sYXN0SW5wdXQgaW5zdGFuY2VvZiBUZXN0SW5wdXRTdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3RJbnB1dC5zZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RJbnB1dCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMubGFzdElucHV0LnNpbmdsZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kaW5nIG1lc3NhZ2UocykgY29tcGxldGVkP1xuICAgICAqL1xuICAgIGdldCBzZW5kQ29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RJbnB1dCBpbnN0YW5jZW9mIFRlc3RJbnB1dFN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdElucHV0LmNvbXBsZXRlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy5sYXN0SW5wdXQgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDcmVhdGVzIGEgcHJvbWlzZSBmb3IgcmVzcG9uc2UgaGVhZGVycyBmcm9tIHRoZSBtb2NrIGRhdGEuXG4gICAgcHJvbWlzZUhlYWRlcnMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IChfYSA9IHRoaXMuZGF0YS5oZWFkZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBUZXN0VHJhbnNwb3J0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICByZXR1cm4gaGVhZGVycyBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yXG4gICAgICAgICAgICA/IFByb21pc2UucmVqZWN0KGhlYWRlcnMpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShoZWFkZXJzKTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlcyBhIHByb21pc2UgZm9yIGEgc2luZ2xlLCB2YWxpZCwgbWVzc2FnZSBmcm9tIHRoZSBtb2NrIGRhdGEuXG4gICAgcHJvbWlzZVNpbmdsZVJlc3BvbnNlKG1ldGhvZCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLnJlc3BvbnNlIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLmRhdGEucmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KHRoaXMuZGF0YS5yZXNwb25zZS5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgIHIgPSB0aGlzLmRhdGEucmVzcG9uc2VbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5kYXRhLnJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHIgPSB0aGlzLmRhdGEucmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByID0gbWV0aG9kLk8uY3JlYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcnVudGltZV8xLmFzc2VydChtZXRob2QuTy5pcyhyKSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyByZXNwb25zZSBtZXNzYWdlcyBmcm9tIHRoZSBtb2NrIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0uXG4gICAgICogSWYgYW4gZXJyb3IgcmVzcG9uc2UsIHN0YXR1cyBvciB0cmFpbGVycyBhcmUgbW9ja2VkLCB0aGUgc3RyZWFtIGlzXG4gICAgICogY2xvc2VkIHdpdGggdGhlIHJlc3BlY3RpdmUgZXJyb3IuXG4gICAgICogT3RoZXJ3aXNlLCBzdHJlYW0gaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm5lZCBwcm9taXNlIHJlc29sdmVzIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuIEl0IHNob3VsZFxuICAgICAqIG5vdCByZWplY3QuIElmIGl0IGRvZXMsIGNvZGUgaXMgYnJva2VuLlxuICAgICAqL1xuICAgIHN0cmVhbVJlc3BvbnNlcyhtZXRob2QsIHN0cmVhbSwgYWJvcnQpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSBcImRhdGEucmVzcG9uc2VcIiBpbnRvIGFuIGFycmF5IG9mIHZhbGlkIG91dHB1dCBtZXNzYWdlc1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEucmVzcG9uc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2gobWV0aG9kLk8uY3JlYXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbXNnIG9mIHRoaXMuZGF0YS5yZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KG1ldGhvZC5PLmlzKG1zZykpO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoISh0aGlzLmRhdGEucmVzcG9uc2UgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikpIHtcbiAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KG1ldGhvZC5PLmlzKHRoaXMuZGF0YS5yZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2godGhpcy5kYXRhLnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0YXJ0IHRoZSBzdHJlYW0gd2l0aCBhbiBpbml0aWFsIGRlbGF5LlxuICAgICAgICAgICAgLy8gaWYgdGhlIHJlcXVlc3QgaXMgY2FuY2VsbGVkLCBub3RpZnkoKSBlcnJvciBhbmQgZXhpdC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgeWllbGQgZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBhYm9ydCkodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5ub3RpZnlFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgZXJyb3IgcmVzcG9uc2Ugd2FzIG1vY2tlZCwgbm90aWZ5KCkgZXJyb3IgKHN0cmVhbSBpcyBub3cgY2xvc2VkIHdpdGggZXJyb3IpIGFuZCBleGl0LlxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5yZXNwb25zZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKHRoaXMuZGF0YS5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmVndWxhciByZXNwb25zZSBtZXNzYWdlcyB3ZXJlIG1vY2tlZC4gbm90aWZ5KCkgdGhlbS5cbiAgICAgICAgICAgIGZvciAobGV0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5ub3RpZnlNZXNzYWdlKG1zZyk7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGEgc2hvcnQgZGVsYXkgYmV0d2VlbiByZXNwb25zZXNcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcmVxdWVzdCBpcyBjYW5jZWxsZWQsIG5vdGlmeSgpIGVycm9yIGFuZCBleGl0LlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGRlbGF5KHRoaXMuYmV0d2VlblJlc3BvbnNlRGVsYXksIGFib3J0KSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVycm9yIHN0YXR1cyB3YXMgbW9ja2VkLCBub3RpZnkoKSBlcnJvciAoc3RyZWFtIGlzIG5vdyBjbG9zZWQgd2l0aCBlcnJvcikgYW5kIGV4aXQuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLnN0YXR1cyBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKHRoaXMuZGF0YS5zdGF0dXMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVycm9yIHRyYWlsZXJzIHdlcmUgbW9ja2VkLCBub3RpZnkoKSBlcnJvciAoc3RyZWFtIGlzIG5vdyBjbG9zZWQgd2l0aCBlcnJvcikgYW5kIGV4aXQuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLnRyYWlsZXJzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IodGhpcy5kYXRhLnRyYWlsZXJzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzdHJlYW0gY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBDcmVhdGVzIGEgcHJvbWlzZSBmb3IgcmVzcG9uc2Ugc3RhdHVzIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlU3RhdHVzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IChfYSA9IHRoaXMuZGF0YS5zdGF0dXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFRlc3RUcmFuc3BvcnQuZGVmYXVsdFN0YXR1cztcbiAgICAgICAgcmV0dXJuIHN0YXR1cyBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yXG4gICAgICAgICAgICA/IFByb21pc2UucmVqZWN0KHN0YXR1cylcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHN0YXR1cyk7XG4gICAgfVxuICAgIC8vIENyZWF0ZXMgYSBwcm9taXNlIGZvciByZXNwb25zZSB0cmFpbGVycyBmcm9tIHRoZSBtb2NrIGRhdGEuXG4gICAgcHJvbWlzZVRyYWlsZXJzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHRyYWlsZXJzID0gKF9hID0gdGhpcy5kYXRhLnRyYWlsZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBUZXN0VHJhbnNwb3J0LmRlZmF1bHRUcmFpbGVycztcbiAgICAgICAgcmV0dXJuIHRyYWlsZXJzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3JcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZWplY3QodHJhaWxlcnMpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh0cmFpbGVycyk7XG4gICAgfVxuICAgIG1heWJlU3VwcHJlc3NVbmNhdWdodCguLi5wcm9taXNlKSB7XG4gICAgICAgIGlmICh0aGlzLnN1cHByZXNzVW5jYXVnaHRSZWplY3Rpb25zKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwIG9mIHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBwLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBtZXJnZU9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcnBjX29wdGlvbnNfMS5tZXJnZVJwY09wdGlvbnMoe30sIG9wdGlvbnMpO1xuICAgIH1cbiAgICB1bmFyeShtZXRob2QsIGlucHV0LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSAoX2EgPSBvcHRpb25zLm1ldGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LCBoZWFkZXJzUHJvbWlzZSA9IHRoaXMucHJvbWlzZUhlYWRlcnMoKVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5oZWFkZXJEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCByZXNwb25zZVByb21pc2UgPSBoZWFkZXJzUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKF8gPT4gdGhpcy5wcm9taXNlU2luZ2xlUmVzcG9uc2UobWV0aG9kKSksIHN0YXR1c1Byb21pc2UgPSByZXNwb25zZVByb21pc2VcbiAgICAgICAgICAgIC5jYXRjaChfID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKF8gPT4gdGhpcy5wcm9taXNlU3RhdHVzKCkpLCB0cmFpbGVyc1Byb21pc2UgPSByZXNwb25zZVByb21pc2VcbiAgICAgICAgICAgIC5jYXRjaChfID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKF8gPT4gdGhpcy5wcm9taXNlVHJhaWxlcnMoKSk7XG4gICAgICAgIHRoaXMubWF5YmVTdXBwcmVzc1VuY2F1Z2h0KHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgICAgIHRoaXMubGFzdElucHV0ID0geyBzaW5nbGU6IGlucHV0IH07XG4gICAgICAgIHJldHVybiBuZXcgdW5hcnlfY2FsbF8xLlVuYXJ5Q2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCBpbnB1dCwgaGVhZGVyc1Byb21pc2UsIHJlc3BvbnNlUHJvbWlzZSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG4gICAgc2VydmVyU3RyZWFtaW5nKG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sIGhlYWRlcnNQcm9taXNlID0gdGhpcy5wcm9taXNlSGVhZGVycygpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmhlYWRlckRlbGF5LCBvcHRpb25zLmFib3J0KSksIG91dHB1dFN0cmVhbSA9IG5ldyBycGNfb3V0cHV0X3N0cmVhbV8xLlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXIoKSwgcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlID0gaGVhZGVyc1Byb21pc2VcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMucmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5zdHJlYW1SZXNwb25zZXMobWV0aG9kLCBvdXRwdXRTdHJlYW0sIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgc3RhdHVzUHJvbWlzZSA9IHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5wcm9taXNlU3RhdHVzKCkpLCB0cmFpbGVyc1Byb21pc2UgPSByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2VcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucHJvbWlzZVRyYWlsZXJzKCkpO1xuICAgICAgICB0aGlzLm1heWJlU3VwcHJlc3NVbmNhdWdodChzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgICAgICB0aGlzLmxhc3RJbnB1dCA9IHsgc2luZ2xlOiBpbnB1dCB9O1xuICAgICAgICByZXR1cm4gbmV3IHNlcnZlcl9zdHJlYW1pbmdfY2FsbF8xLlNlcnZlclN0cmVhbWluZ0NhbGwobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgaW5wdXQsIGhlYWRlcnNQcm9taXNlLCBvdXRwdXRTdHJlYW0sIHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgfVxuICAgIGNsaWVudFN0cmVhbWluZyhtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sIGhlYWRlcnNQcm9taXNlID0gdGhpcy5wcm9taXNlSGVhZGVycygpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmhlYWRlckRlbGF5LCBvcHRpb25zLmFib3J0KSksIHJlc3BvbnNlUHJvbWlzZSA9IGhlYWRlcnNQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTaW5nbGVSZXNwb25zZShtZXRob2QpKSwgc3RhdHVzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VUcmFpbGVycygpKTtcbiAgICAgICAgdGhpcy5tYXliZVN1cHByZXNzVW5jYXVnaHQoc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICAgICAgdGhpcy5sYXN0SW5wdXQgPSBuZXcgVGVzdElucHV0U3RyZWFtKHRoaXMuZGF0YSwgb3B0aW9ucy5hYm9ydCk7XG4gICAgICAgIHJldHVybiBuZXcgY2xpZW50X3N0cmVhbWluZ19jYWxsXzEuQ2xpZW50U3RyZWFtaW5nQ2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCB0aGlzLmxhc3RJbnB1dCwgaGVhZGVyc1Byb21pc2UsIHJlc3BvbnNlUHJvbWlzZSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG4gICAgZHVwbGV4KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gKF9hID0gb3B0aW9ucy5tZXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSwgaGVhZGVyc1Byb21pc2UgPSB0aGlzLnByb21pc2VIZWFkZXJzKClcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuaGVhZGVyRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgb3V0cHV0U3RyZWFtID0gbmV3IHJwY19vdXRwdXRfc3RyZWFtXzEuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcigpLCByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2UgPSBoZWFkZXJzUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnN0cmVhbVJlc3BvbnNlcyhtZXRob2QsIG91dHB1dFN0cmVhbSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCBzdGF0dXNQcm9taXNlID0gcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5wcm9taXNlVHJhaWxlcnMoKSk7XG4gICAgICAgIHRoaXMubWF5YmVTdXBwcmVzc1VuY2F1Z2h0KHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgICAgIHRoaXMubGFzdElucHV0ID0gbmV3IFRlc3RJbnB1dFN0cmVhbSh0aGlzLmRhdGEsIG9wdGlvbnMuYWJvcnQpO1xuICAgICAgICByZXR1cm4gbmV3IGR1cGxleF9zdHJlYW1pbmdfY2FsbF8xLkR1cGxleFN0cmVhbWluZ0NhbGwobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgdGhpcy5sYXN0SW5wdXQsIGhlYWRlcnNQcm9taXNlLCBvdXRwdXRTdHJlYW0sIHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgfVxufVxuZXhwb3J0cy5UZXN0VHJhbnNwb3J0ID0gVGVzdFRyYW5zcG9ydDtcblRlc3RUcmFuc3BvcnQuZGVmYXVsdEhlYWRlcnMgPSB7XG4gICAgcmVzcG9uc2VIZWFkZXI6IFwidGVzdFwiXG59O1xuVGVzdFRyYW5zcG9ydC5kZWZhdWx0U3RhdHVzID0ge1xuICAgIGNvZGU6IFwiT0tcIiwgZGV0YWlsOiBcImFsbCBnb29kXCJcbn07XG5UZXN0VHJhbnNwb3J0LmRlZmF1bHRUcmFpbGVycyA9IHtcbiAgICByZXNwb25zZVRyYWlsZXI6IFwidGVzdFwiXG59O1xuZnVuY3Rpb24gZGVsYXkobXMsIGFib3J0KSB7XG4gICAgcmV0dXJuICh2KSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChhYm9ydCA9PT0gbnVsbCB8fCBhYm9ydCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnQuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBycGNfZXJyb3JfMS5ScGNFcnJvcihcInVzZXIgY2FuY2VsXCIsIFwiQ0FOQ0VMTEVEXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHYpLCBtcyk7XG4gICAgICAgICAgICBpZiAoYWJvcnQpIHtcbiAgICAgICAgICAgICAgICBhYm9ydC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgZXYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IHJwY19lcnJvcl8xLlJwY0Vycm9yKFwidXNlciBjYW5jZWxcIiwgXCJDQU5DRUxMRURcIikpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5jbGFzcyBUZXN0SW5wdXRTdHJlYW0ge1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIGFib3J0KSB7XG4gICAgICAgIHRoaXMuX2NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZW50ID0gW107XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydDtcbiAgICB9XG4gICAgZ2V0IHNlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW50O1xuICAgIH1cbiAgICBnZXQgY29tcGxldGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tcGxldGVkO1xuICAgIH1cbiAgICBzZW5kKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5pbnB1dE1lc3NhZ2UgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuZGF0YS5pbnB1dE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlbGF5TXMgPSB0aGlzLmRhdGEuaW5wdXRNZXNzYWdlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMTBcbiAgICAgICAgICAgIDogdGhpcy5kYXRhLmlucHV0TWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZW50LnB1c2gobWVzc2FnZSk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheShkZWxheU1zLCB0aGlzLmFib3J0KSk7XG4gICAgfVxuICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmlucHV0Q29tcGxldGUgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuZGF0YS5pbnB1dENvbXBsZXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWxheU1zID0gdGhpcy5kYXRhLmlucHV0Q29tcGxldGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAxMFxuICAgICAgICAgICAgOiB0aGlzLmRhdGEuaW5wdXRDb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkoZGVsYXlNcywgdGhpcy5hYm9ydCkpO1xuICAgIH1cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gZXhwb3J0cy5zdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IGV4cG9ydHMuc3RhY2tTZXJ2ZXJTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBleHBvcnRzLnN0YWNrVW5hcnlJbnRlcmNlcHRvcnMgPSBleHBvcnRzLnN0YWNrSW50ZXJjZXB0ID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgXCJzdGFja1wiIG9mIG9mIGFsbCBpbnRlcmNlcHRvcnMgc3BlY2lmaWVkIGluIHRoZSBnaXZlbiBgUnBjT3B0aW9uc2AuXG4gKiBVc2VkIGJ5IGdlbmVyYXRlZCBjbGllbnQgaW1wbGVtZW50YXRpb25zLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSW50ZXJjZXB0KGtpbmQsIHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zLCBpbnB1dCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBpZiAoa2luZCA9PSBcInVuYXJ5XCIpIHtcbiAgICAgICAgbGV0IHRhaWwgPSAobXRkLCBpbnAsIG9wdCkgPT4gdHJhbnNwb3J0LnVuYXJ5KG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfYSA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRVbmFyeSkucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGFpbDtcbiAgICAgICAgICAgIHRhaWwgPSAobXRkLCBpbnAsIG9wdCkgPT4gY3Vyci5pbnRlcmNlcHRVbmFyeShuZXh0LCBtdGQsIGlucCwgb3B0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFpbChtZXRob2QsIGlucHV0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGtpbmQgPT0gXCJzZXJ2ZXJTdHJlYW1pbmdcIikge1xuICAgICAgICBsZXQgdGFpbCA9IChtdGQsIGlucCwgb3B0KSA9PiB0cmFuc3BvcnQuc2VydmVyU3RyZWFtaW5nKG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfYiA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRTZXJ2ZXJTdHJlYW1pbmcpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRhaWw7XG4gICAgICAgICAgICB0YWlsID0gKG10ZCwgaW5wLCBvcHQpID0+IGN1cnIuaW50ZXJjZXB0U2VydmVyU3RyZWFtaW5nKG5leHQsIG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWlsKG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoa2luZCA9PSBcImNsaWVudFN0cmVhbWluZ1wiKSB7XG4gICAgICAgIGxldCB0YWlsID0gKG10ZCwgb3B0KSA9PiB0cmFuc3BvcnQuY2xpZW50U3RyZWFtaW5nKG10ZCwgb3B0KTtcbiAgICAgICAgZm9yIChjb25zdCBjdXJyIG9mICgoX2MgPSBvcHRpb25zLmludGVyY2VwdG9ycykgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogW10pLmZpbHRlcihpID0+IGkuaW50ZXJjZXB0Q2xpZW50U3RyZWFtaW5nKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0YWlsO1xuICAgICAgICAgICAgdGFpbCA9IChtdGQsIG9wdCkgPT4gY3Vyci5pbnRlcmNlcHRDbGllbnRTdHJlYW1pbmcobmV4dCwgbXRkLCBvcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWlsKG1ldGhvZCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChraW5kID09IFwiZHVwbGV4XCIpIHtcbiAgICAgICAgbGV0IHRhaWwgPSAobXRkLCBvcHQpID0+IHRyYW5zcG9ydC5kdXBsZXgobXRkLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfZCA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHREdXBsZXgpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRhaWw7XG4gICAgICAgICAgICB0YWlsID0gKG10ZCwgb3B0KSA9PiBjdXJyLmludGVyY2VwdER1cGxleChuZXh0LCBtdGQsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhaWwobWV0aG9kLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcnVudGltZV8xLmFzc2VydE5ldmVyKGtpbmQpO1xufVxuZXhwb3J0cy5zdGFja0ludGVyY2VwdCA9IHN0YWNrSW50ZXJjZXB0O1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja1VuYXJ5SW50ZXJjZXB0b3JzKHRyYW5zcG9ydCwgbWV0aG9kLCBpbnB1dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcInVuYXJ5XCIsIHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zLCBpbnB1dCk7XG59XG5leHBvcnRzLnN0YWNrVW5hcnlJbnRlcmNlcHRvcnMgPSBzdGFja1VuYXJ5SW50ZXJjZXB0b3JzO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycyh0cmFuc3BvcnQsIG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gc3RhY2tJbnRlcmNlcHQoXCJzZXJ2ZXJTdHJlYW1pbmdcIiwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMsIGlucHV0KTtcbn1cbmV4cG9ydHMuc3RhY2tTZXJ2ZXJTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBzdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycztcbi8qKlxuICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkgYHN0YWNrSW50ZXJjZXB0KClgLCBzdGlsbCBoZXJlIHRvIHN1cHBvcnQgb2xkZXIgZ2VuZXJhdGVkIGNvZGVcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGllbnRTdHJlYW1pbmdJbnRlcmNlcHRvcnModHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gc3RhY2tJbnRlcmNlcHQoXCJjbGllbnRTdHJlYW1pbmdcIiwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5zdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IHN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9ycyh0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcImR1cGxleFwiLCB0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXIgPSB2b2lkIDA7XG5jbGFzcyBTZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgaGVhZGVycywgZGVhZGxpbmUsIHNlbmRSZXNwb25zZUhlYWRlcnNGbiwgZGVmYXVsdFN0YXR1cyA9IHsgY29kZTogJ09LJywgZGV0YWlsOiAnJyB9KSB7XG4gICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMuZGVhZGxpbmUgPSBkZWFkbGluZTtcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHt9O1xuICAgICAgICB0aGlzLl9zZW5kUkggPSBzZW5kUmVzcG9uc2VIZWFkZXJzRm47XG4gICAgICAgIHRoaXMuc3RhdHVzID0gZGVmYXVsdFN0YXR1cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjYWxsIGNhbmNlbGxlZC5cbiAgICAgKlxuICAgICAqIEludm9rZXMgYWxsIGNhbGxiYWNrcyByZWdpc3RlcmVkIHdpdGggb25DYW5jZWwoKSBhbmRcbiAgICAgKiBzZXRzIGBjYW5jZWxsZWQgPSB0cnVlYC5cbiAgICAgKi9cbiAgICBub3RpZnlDYW5jZWxsZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgbCBvZiB0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICBsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCByZXNwb25zZSBoZWFkZXJzLlxuICAgICAqL1xuICAgIHNlbmRSZXNwb25zZUhlYWRlcnMoZGF0YSkge1xuICAgICAgICB0aGlzLl9zZW5kUkgoZGF0YSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBjYWxsIGNhbmNlbGxlZD9cbiAgICAgKlxuICAgICAqIFdoZW4gdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIHRoZSBzZXJ2ZXJcbiAgICAgKiBpcyBkb25lLCB0aGUgY2FsbCBpcyBjYW5jZWxsZWQuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBjYW5jZWwgYSByZXF1ZXN0IG9uIHRoZSBzZXJ2ZXIsIHRocm93IGFcbiAgICAgKiBScGNFcnJvciB3aXRoIHRoZSBDQU5DRUxMRUQgc3RhdHVzIGNvZGUuXG4gICAgICovXG4gICAgZ2V0IGNhbmNlbGxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbmNlbGxlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgY2FsbGJhY2sgZm9yIGNhbmNlbGxhdGlvbi5cbiAgICAgKi9cbiAgICBvbkNhbmNlbChjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsID0gdGhpcy5fbGlzdGVuZXJzO1xuICAgICAgICBsLnB1c2goY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGkgPSBsLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgICAgICAgICBsLnNwbGljZShpLCAxKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlciA9IFNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBQdWJsaWMgQVBJIG9mIHRoZSBycGMgcnVudGltZS5cbi8vIE5vdGU6IHdlIGRvIG5vdCB1c2UgYGV4cG9ydCAqIGZyb20gLi4uYCB0byBoZWxwIHRyZWUgc2hha2Vycyxcbi8vIHdlYnBhY2sgdmVyYm9zZSBvdXRwdXQgaGludHMgdGhhdCB0aGlzIHNob3VsZCBiZSB1c2VmdWxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXJ2aWNlX3R5cGVfMSA9IHJlcXVpcmUoXCIuL3NlcnZpY2UtdHlwZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZpY2VUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2aWNlX3R5cGVfMS5TZXJ2aWNlVHlwZTsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRNZXRob2RPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkTWV0aG9kT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRNZXRob2RPcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLnJlYWRNZXRob2RPcHRpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWFkU2VydmljZU9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZFNlcnZpY2VPcHRpb247IH0gfSk7XG52YXIgcnBjX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ycGMtZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJScGNFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2Vycm9yXzEuUnBjRXJyb3I7IH0gfSk7XG52YXIgcnBjX29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3JwYy1vcHRpb25zXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VScGNPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfb3B0aW9uc18xLm1lcmdlUnBjT3B0aW9uczsgfSB9KTtcbnZhciBycGNfb3V0cHV0X3N0cmVhbV8xID0gcmVxdWlyZShcIi4vcnBjLW91dHB1dC1zdHJlYW1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfb3V0cHV0X3N0cmVhbV8xLlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXI7IH0gfSk7XG52YXIgdGVzdF90cmFuc3BvcnRfMSA9IHJlcXVpcmUoXCIuL3Rlc3QtdHJhbnNwb3J0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGVzdFRyYW5zcG9ydFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGVzdF90cmFuc3BvcnRfMS5UZXN0VHJhbnNwb3J0OyB9IH0pO1xudmFyIGRlZmVycmVkXzEgPSByZXF1aXJlKFwiLi9kZWZlcnJlZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRlZmVycmVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZlcnJlZF8xLkRlZmVycmVkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVmZXJyZWRTdGF0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVmZXJyZWRfMS5EZWZlcnJlZFN0YXRlOyB9IH0pO1xudmFyIGR1cGxleF9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vZHVwbGV4LXN0cmVhbWluZy1jYWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRHVwbGV4U3RyZWFtaW5nQ2FsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEuRHVwbGV4U3RyZWFtaW5nQ2FsbDsgfSB9KTtcbnZhciBjbGllbnRfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC1zdHJlYW1pbmctY2FsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNsaWVudFN0cmVhbWluZ0NhbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsaWVudF9zdHJlYW1pbmdfY2FsbF8xLkNsaWVudFN0cmVhbWluZ0NhbGw7IH0gfSk7XG52YXIgc2VydmVyX3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9zZXJ2ZXItc3RyZWFtaW5nLWNhbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXJ2ZXJTdHJlYW1pbmdDYWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2ZXJfc3RyZWFtaW5nX2NhbGxfMS5TZXJ2ZXJTdHJlYW1pbmdDYWxsOyB9IH0pO1xudmFyIHVuYXJ5X2NhbGxfMSA9IHJlcXVpcmUoXCIuL3VuYXJ5LWNhbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbmFyeUNhbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuYXJ5X2NhbGxfMS5VbmFyeUNhbGw7IH0gfSk7XG52YXIgcnBjX2ludGVyY2VwdG9yXzEgPSByZXF1aXJlKFwiLi9ycGMtaW50ZXJjZXB0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja0ludGVyY2VwdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tJbnRlcmNlcHQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tDbGllbnRTdHJlYW1pbmdJbnRlcmNlcHRvcnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tTZXJ2ZXJTdHJlYW1pbmdJbnRlcmNlcHRvcnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja1VuYXJ5SW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja1VuYXJ5SW50ZXJjZXB0b3JzOyB9IH0pO1xudmFyIHNlcnZlcl9jYWxsX2NvbnRleHRfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1jYWxsLWNvbnRleHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZlcl9jYWxsX2NvbnRleHRfMS5TZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXI7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2UgPSBleHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UgPSBleHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVxdWVzdCA9IGV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZSA9IGV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0ID0gZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCA9IGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlID0gZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVxdWVzdCA9IGV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlID0gZXhwb3J0cy5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdCA9IGV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSA9IGV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0ID0gdm9pZCAwO1xuLy8gQGdlbmVyYXRlZCBieSBwcm90b2J1Zi10cyAyLjkuMSB3aXRoIHBhcmFtZXRlciBsb25nX3R5cGVfc3RyaW5nLGNsaWVudF9ub25lLGdlbmVyYXRlX2RlcGVuZGVuY2llc1xuLy8gQGdlbmVyYXRlZCBmcm9tIHByb3RvYnVmIGZpbGUgXCJyZXN1bHRzL2FwaS92MS9hcnRpZmFjdC5wcm90b1wiIChwYWNrYWdlIFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjFcIiwgc3ludGF4IHByb3RvMylcbi8vIHRzbGludDpkaXNhYmxlXG5jb25zdCBydW50aW1lX3JwY18xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lLXJwY1wiKTtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNCA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHdyYXBwZXJzXzEgPSByZXF1aXJlKFwiLi4vLi4vLi4vZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzXCIpO1xuY29uc3Qgd3JhcHBlcnNfMiA9IHJlcXVpcmUoXCIuLi8uLi8uLi9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnNcIik7XG5jb25zdCB0aW1lc3RhbXBfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wXCIpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcImV4cGlyZXNfYXRcIiwga2luZDogXCJtZXNzYWdlXCIsIFQ6ICgpID0+IHRpbWVzdGFtcF8xLlRpbWVzdGFtcCB9LFxuICAgICAgICAgICAgeyBubzogNSwgbmFtZTogXCJ2ZXJzaW9uXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDUgLypTY2FsYXJUeXBlLklOVDMyKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHdvcmtmbG93UnVuQmFja2VuZElkOiBcIlwiLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogXCJcIiwgbmFtZTogXCJcIiwgdmVyc2lvbjogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgZXhwaXJlc19hdCAqLyA0OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4cGlyZXNBdCA9IHRpbWVzdGFtcF8xLlRpbWVzdGFtcC5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UuZXhwaXJlc0F0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQzMiB2ZXJzaW9uICovIDU6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmVyc2lvbiA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBleHBpcmVzX2F0ID0gNDsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZXhwaXJlc0F0KVxuICAgICAgICAgICAgdGltZXN0YW1wXzEuVGltZXN0YW1wLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5leHBpcmVzQXQsIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIC8qIGludDMyIHZlcnNpb24gPSA1OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52ZXJzaW9uICE9PSAwKVxuICAgICAgICAgICAgd3JpdGVyLnRhZyg1LCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQzMihtZXNzYWdlLnZlcnNpb24pO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVxdWVzdFxuICovXG5leHBvcnRzLkNyZWF0ZUFydGlmYWN0UmVxdWVzdCA9IG5ldyBDcmVhdGVBcnRpZmFjdFJlcXVlc3QkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwib2tcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOCAvKlNjYWxhclR5cGUuQk9PTCovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcInNpZ25lZF91cGxvYWRfdXJsXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBvazogZmFsc2UsIHNpZ25lZFVwbG9hZFVybDogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIG9rICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2sgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyBzaWduZWRfdXBsb2FkX3VybCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpZ25lZFVwbG9hZFVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCBvayA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm9rICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLm9rKTtcbiAgICAgICAgLyogc3RyaW5nIHNpZ25lZF91cGxvYWRfdXJsID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2lnbmVkVXBsb2FkVXJsICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5zaWduZWRVcGxvYWRVcmwpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlID0gbmV3IENyZWF0ZUFydGlmYWN0UmVzcG9uc2UkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRmluYWxpemVBcnRpZmFjdFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3RcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ3b3JrZmxvd19ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMiwgbmFtZTogXCJ3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDMsIG5hbWU6IFwibmFtZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogNCwgbmFtZTogXCJzaXplXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDUsIG5hbWU6IFwiaGFzaFwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZSB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiLCBuYW1lOiBcIlwiLCBzaXplOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IHNpemUgKi8gNDpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zaXplID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgaGFzaCAqLyA1OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmhhc2ggPSB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgbWVzc2FnZS5oYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIC8qIGludDY0IHNpemUgPSA0OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaXplICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5zaXplKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlIGhhc2ggPSA1OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5oYXNoKVxuICAgICAgICAgICAgd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZS5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UuaGFzaCwgd3JpdGVyLnRhZyg1LCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdFxuICovXG5leHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0ID0gbmV3IEZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZSRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJva1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwiYXJ0aWZhY3RfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgb2s6IGZhbHNlLCBhcnRpZmFjdElkOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIG9rICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2sgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IGFydGlmYWN0X2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXJ0aWZhY3RJZCA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGJvb2wgb2sgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5vayAhPT0gZmFsc2UpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmJvb2wobWVzc2FnZS5vayk7XG4gICAgICAgIC8qIGludDY0IGFydGlmYWN0X2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuYXJ0aWZhY3RJZCAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UuYXJ0aWZhY3RJZCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlXG4gKi9cbmV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlID0gbmV3IEZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBMaXN0QXJ0aWZhY3RzUmVxdWVzdCRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lX2ZpbHRlclwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZSB9LFxuICAgICAgICAgICAgeyBubzogNCwgbmFtZTogXCJpZF9maWx0ZXJcIiwga2luZDogXCJtZXNzYWdlXCIsIFQ6ICgpID0+IHdyYXBwZXJzXzEuSW50NjRWYWx1ZSB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgbmFtZV9maWx0ZXIgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lRmlsdGVyID0gd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UubmFtZUZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUgaWRfZmlsdGVyICovIDQ6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaWRGaWx0ZXIgPSB3cmFwcGVyc18xLkludDY0VmFsdWUuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zLCBtZXNzYWdlLmlkRmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBuYW1lX2ZpbHRlciA9IDM7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbWVGaWx0ZXIpXG4gICAgICAgICAgICB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5uYW1lRmlsdGVyLCB3cml0ZXIudGFnKDMsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucykuam9pbigpO1xuICAgICAgICAvKiBnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSBpZF9maWx0ZXIgPSA0OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5pZEZpbHRlcilcbiAgICAgICAgICAgIHdyYXBwZXJzXzEuSW50NjRWYWx1ZS5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UuaWRGaWx0ZXIsIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1JlcXVlc3RcbiAqL1xuZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVxdWVzdCA9IG5ldyBMaXN0QXJ0aWZhY3RzUmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBMaXN0QXJ0aWZhY3RzUmVzcG9uc2UkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwiYXJ0aWZhY3RzXCIsIGtpbmQ6IFwibWVzc2FnZVwiLCByZXBlYXQ6IDEgLypSZXBlYXRUeXBlLlBBQ0tFRCovLCBUOiAoKSA9PiBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0IH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBhcnRpZmFjdHM6IFtdIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHJlcGVhdGVkIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0IGFydGlmYWN0cyAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFydGlmYWN0cy5wdXNoKGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHJlcGVhdGVkIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0IGFydGlmYWN0cyA9IDE7ICovXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZS5hcnRpZmFjdHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0LmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5hcnRpZmFjdHNbaV0sIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlXG4gKi9cbmV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlID0gbmV3IExpc3RBcnRpZmFjdHNSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBMaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UuTW9ub2xpdGhBcnRpZmFjdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJkYXRhYmFzZV9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDUsIG5hbWU6IFwic2l6ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH0sXG4gICAgICAgICAgICB7IG5vOiA2LCBuYW1lOiBcImNyZWF0ZWRfYXRcIiwga2luZDogXCJtZXNzYWdlXCIsIFQ6ICgpID0+IHRpbWVzdGFtcF8xLlRpbWVzdGFtcCB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiLCBkYXRhYmFzZUlkOiBcIjBcIiwgbmFtZTogXCJcIiwgc2l6ZTogXCIwXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IGRhdGFiYXNlX2lkICovIDM6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YWJhc2VJZCA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gNDpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IHNpemUgKi8gNTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zaXplID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIGNyZWF0ZWRfYXQgKi8gNjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jcmVhdGVkQXQgPSB0aW1lc3RhbXBfMS5UaW1lc3RhbXAuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zLCBtZXNzYWdlLmNyZWF0ZWRBdCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBpbnQ2NCBkYXRhYmFzZV9pZCA9IDM7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmRhdGFiYXNlSWQgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQ2NChtZXNzYWdlLmRhdGFiYXNlSWQpO1xuICAgICAgICAvKiBzdHJpbmcgbmFtZSA9IDQ7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDQsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgICAgICAvKiBpbnQ2NCBzaXplID0gNTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2l6ZSAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDUsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2Uuc2l6ZSk7XG4gICAgICAgIC8qIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgY3JlYXRlZF9hdCA9IDY7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmNyZWF0ZWRBdClcbiAgICAgICAgICAgIHRpbWVzdGFtcF8xLlRpbWVzdGFtcC5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UuY3JlYXRlZEF0LCB3cml0ZXIudGFnKDYsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucykuam9pbigpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0XG4gKi9cbmV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QgPSBuZXcgTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyBuYW1lICovIDM6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0ID0gbmV3IEdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBHZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJzaWduZWRfdXJsXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBzaWduZWRVcmw6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHNpZ25lZF91cmwgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zaWduZWRVcmwgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHN0cmluZyBzaWduZWRfdXJsID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2lnbmVkVXJsICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5zaWduZWRVcmwpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlID0gbmV3IEdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkRlbGV0ZUFydGlmYWN0UmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyBuYW1lICovIDM6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0ID0gbmV3IERlbGV0ZUFydGlmYWN0UmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBEZWxldGVBcnRpZmFjdFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJva1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwiYXJ0aWZhY3RfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgb2s6IGZhbHNlLCBhcnRpZmFjdElkOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIG9rICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2sgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IGFydGlmYWN0X2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXJ0aWZhY3RJZCA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGJvb2wgb2sgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5vayAhPT0gZmFsc2UpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmJvb2wobWVzc2FnZS5vayk7XG4gICAgICAgIC8qIGludDY0IGFydGlmYWN0X2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuYXJ0aWZhY3RJZCAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UuYXJ0aWZhY3RJZCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZVxuICovXG5leHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UgPSBuZXcgRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSRUeXBlKCk7XG4vKipcbiAqIEBnZW5lcmF0ZWQgU2VydmljZVR5cGUgZm9yIHByb3RvYnVmIHNlcnZpY2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXG4gKi9cbmV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlID0gbmV3IHJ1bnRpbWVfcnBjXzEuU2VydmljZVR5cGUoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgW1xuICAgIHsgbmFtZTogXCJDcmVhdGVBcnRpZmFjdFwiLCBvcHRpb25zOiB7fSwgSTogZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlcXVlc3QsIE86IGV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJGaW5hbGl6ZUFydGlmYWN0XCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0LCBPOiBleHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJMaXN0QXJ0aWZhY3RzXCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LCBPOiBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiLCBvcHRpb25zOiB7fSwgSTogZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QsIE86IGV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJEZWxldGVBcnRpZmFjdFwiLCBvcHRpb25zOiB7fSwgSTogZXhwb3J0cy5EZWxldGVBcnRpZmFjdFJlcXVlc3QsIE86IGV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSB9XG5dKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFydGlmYWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzSG9vayA9IGV4cG9ydHMuY2hhaW5Ib29rcyA9IHZvaWQgMDtcbi8vIENoYWluSG9va3MgY3JlYXRlcyBhIG5ldyBTZXJ2ZXJIb29rIHdoaWNoIGNoYWlucyB0aGUgY2FsbGJhY2tzIGluXG4vLyBlYWNoIG9mIHRoZSBjb25zdGl0dWVudCBob29rcyBwYXNzZWQgaW4uIEVhY2ggaG9vayBmdW5jdGlvbiB3aWxsIGJlXG4vLyBjYWxsZWQgaW4gdGhlIG9yZGVyIG9mIHRoZSBTZXJ2ZXJIb29rcyB2YWx1ZXMgcGFzc2VkIGluLlxuLy9cbi8vIEZvciB0aGUgZXJyb3JpbmcgaG9va3MsIFJlcXVlc3RSZWNlaXZlZCBhbmQgUmVxdWVzdFJvdXRlZCwgYW55IHJldHVybmVkXG4vLyBlcnJvcnMgcHJldmVudCBwcm9jZXNzaW5nIGJ5IGxhdGVyIGhvb2tzLlxuZnVuY3Rpb24gY2hhaW5Ib29rcyguLi5ob29rcykge1xuICAgIGlmIChob29rcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChob29rcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tzWzBdO1xuICAgIH1cbiAgICBjb25zdCBzZXJ2ZXJIb29rID0ge1xuICAgICAgICByZXF1ZXN0UmVjZWl2ZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFJlY2VpdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlcXVlc3RSZWNlaXZlZChjdHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0UHJlcGFyZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFByZXBhcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJob29rIHJlcXVlc3RQcmVwYXJlZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJQbGVhc2UgdXNlIHJlc3BvbnNlUHJlcGFyZWQgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVxdWVzdFByZXBhcmVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc3BvbnNlUHJlcGFyZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVzcG9uc2VQcmVwYXJlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXNwb25zZVByZXBhcmVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3RTZW50KGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhvb2sgb2YgaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFob29rLnJlcXVlc3RTZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJob29rIHJlcXVlc3RTZW50IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlBsZWFzZSB1c2UgcmVzcG9uc2VTZW50IGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlcXVlc3RTZW50KGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc3BvbnNlU2VudChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXNwb25zZVNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVzcG9uc2VTZW50KGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3RSb3V0ZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFJvdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXF1ZXN0Um91dGVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yKGN0eCwgZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2suZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2suZXJyb3IoY3R4LCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHNlcnZlckhvb2s7XG59XG5leHBvcnRzLmNoYWluSG9va3MgPSBjaGFpbkhvb2tzO1xuZnVuY3Rpb24gaXNIb29rKG9iamVjdCkge1xuICAgIHJldHVybiAoXCJyZXF1ZXN0UmVjZWl2ZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXF1ZXN0UHJlcGFyZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXF1ZXN0U2VudFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlcXVlc3RSb3V0ZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXNwb25zZVByZXBhcmVkXCIgaW4gb2JqZWN0IHx8XG4gICAgICAgIFwicmVzcG9uc2VTZW50XCIgaW4gb2JqZWN0IHx8XG4gICAgICAgIFwiZXJyb3JcIiBpbiBvYmplY3QpO1xufVxuZXhwb3J0cy5pc0hvb2sgPSBpc0hvb2s7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1ZhbGlkRXJyb3JDb2RlID0gZXhwb3J0cy5odHRwU3RhdHVzRnJvbUVycm9yQ29kZSA9IGV4cG9ydHMuVHdpcnBFcnJvckNvZGUgPSBleHBvcnRzLkJhZFJvdXRlRXJyb3IgPSBleHBvcnRzLkludGVybmFsU2VydmVyRXJyb3JXaXRoID0gZXhwb3J0cy5JbnRlcm5hbFNlcnZlckVycm9yID0gZXhwb3J0cy5SZXF1aXJlZEFyZ3VtZW50RXJyb3IgPSBleHBvcnRzLkludmFsaWRBcmd1bWVudEVycm9yID0gZXhwb3J0cy5Ob3RGb3VuZEVycm9yID0gZXhwb3J0cy5Ud2lycEVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBSZXByZXNlbnRzIGEgdHdpcnAgZXJyb3JcbiAqL1xuY2xhc3MgVHdpcnBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlLCBtc2cpIHtcbiAgICAgICAgc3VwZXIobXNnKTtcbiAgICAgICAgdGhpcy5jb2RlID0gVHdpcnBFcnJvckNvZGUuSW50ZXJuYWw7XG4gICAgICAgIHRoaXMubWV0YSA9IHt9O1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLm1zZyA9IG1zZztcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFR3aXJwRXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIG1ldGFkYXRhIGt2IHRvIHRoZSBlcnJvclxuICAgICAqIEBwYXJhbSBrZXlcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICB3aXRoTWV0YShrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXMubWV0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc2luZ2xlIG1ldGFkYXRhIHZhbHVlXG4gICAgICogcmV0dXJuIFwiXCIgaWYgbm90IGZvdW5kXG4gICAgICogQHBhcmFtIGtleVxuICAgICAqL1xuICAgIGdldE1ldGEoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFba2V5XSB8fCBcIlwiO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgdGhlIG9yaWdpbmFsIGVycm9yIGNhdXNlXG4gICAgICogQHBhcmFtIGVyclxuICAgICAqIEBwYXJhbSBhZGRNZXRhXG4gICAgICovXG4gICAgd2l0aENhdXNlKGVyciwgYWRkTWV0YSA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX29yaWdpbmFsQ2F1c2UgPSBlcnI7XG4gICAgICAgIGlmIChhZGRNZXRhKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhNZXRhKFwiY2F1c2VcIiwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjYXVzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsQ2F1c2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGVycm9yIHJlcHJlc2VudGF0aW9uIHRvIEpTT05cbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgICAgICAgICAgICBtc2c6IHRoaXMubXNnLFxuICAgICAgICAgICAgICAgIG1ldGE6IHRoaXMubWV0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gYHtcImNvZGVcIjogXCJpbnRlcm5hbFwiLCBcIm1zZ1wiOiBcIlRoZXJlIHdhcyBhbiBlcnJvciBidXQgaXQgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgaW50byBKU09OXCJ9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0d2lycCBlcnJvciBmcm9tIGFuIG9iamVjdFxuICAgICAqIEBwYXJhbSBvYmpcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbU9iamVjdChvYmopIHtcbiAgICAgICAgY29uc3QgY29kZSA9IG9ialtcImNvZGVcIl0gfHwgVHdpcnBFcnJvckNvZGUuVW5rbm93bjtcbiAgICAgICAgY29uc3QgbXNnID0gb2JqW1wibXNnXCJdIHx8IFwidW5rbm93blwiO1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUd2lycEVycm9yKGNvZGUsIG1zZyk7XG4gICAgICAgIGlmIChvYmpbXCJtZXRhXCJdKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvYmpbXCJtZXRhXCJdKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBlcnJvci53aXRoTWV0YShrZXksIG9ialtcIm1ldGFcIl1ba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxufVxuZXhwb3J0cy5Ud2lycEVycm9yID0gVHdpcnBFcnJvcjtcbi8qKlxuICogTm90Rm91bmRFcnJvciBjb25zdHJ1Y3RvciBmb3IgdGhlIGNvbW1vbiBOb3RGb3VuZCBlcnJvci5cbiAqL1xuY2xhc3MgTm90Rm91bmRFcnJvciBleHRlbmRzIFR3aXJwRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1zZykge1xuICAgICAgICBzdXBlcihUd2lycEVycm9yQ29kZS5Ob3RGb3VuZCwgbXNnKTtcbiAgICB9XG59XG5leHBvcnRzLk5vdEZvdW5kRXJyb3IgPSBOb3RGb3VuZEVycm9yO1xuLyoqXG4gKiBJbnZhbGlkQXJndW1lbnRFcnJvciBjb25zdHJ1Y3RvciBmb3IgdGhlIGNvbW1vbiBJbnZhbGlkQXJndW1lbnQgZXJyb3IuIENhbiBiZVxuICogdXNlZCB3aGVuIGFuIGFyZ3VtZW50IGhhcyBpbnZhbGlkIGZvcm1hdCwgaXMgYSBudW1iZXIgb3V0IG9mIHJhbmdlLCBpcyBhIGJhZFxuICogb3B0aW9uLCBldGMpLlxuICovXG5jbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIFR3aXJwRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGFyZ3VtZW50LCB2YWxpZGF0aW9uTXNnKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLkludmFsaWRBcmd1bWVudCwgYXJndW1lbnQgKyBcIiBcIiArIHZhbGlkYXRpb25Nc2cpO1xuICAgICAgICB0aGlzLndpdGhNZXRhKFwiYXJndW1lbnRcIiwgYXJndW1lbnQpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjtcbi8qKlxuICogUmVxdWlyZWRBcmd1bWVudEVycm9yIGlzIGEgbW9yZSBzcGVjaWZpYyBjb25zdHJ1Y3RvciBmb3IgSW52YWxpZEFyZ3VtZW50XG4gKiBlcnJvci4gU2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgYXJndW1lbnQgaXMgcmVxdWlyZWQgKGV4cGVjdGVkIHRvIGhhdmUgYVxuICogbm9uLXplcm8gdmFsdWUpLlxuICovXG5jbGFzcyBSZXF1aXJlZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBJbnZhbGlkQXJndW1lbnRFcnJvciB7XG4gICAgY29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgICAgICAgc3VwZXIoYXJndW1lbnQsIFwiaXMgcmVxdWlyZWRcIik7XG4gICAgfVxufVxuZXhwb3J0cy5SZXF1aXJlZEFyZ3VtZW50RXJyb3IgPSBSZXF1aXJlZEFyZ3VtZW50RXJyb3I7XG4vKipcbiAqIEludGVybmFsRXJyb3IgY29uc3RydWN0b3IgZm9yIHRoZSBjb21tb24gSW50ZXJuYWwgZXJyb3IuIFNob3VsZCBiZSB1c2VkIHRvXG4gKiBzcGVjaWZ5IHRoYXQgc29tZXRoaW5nIGJhZCBvciB1bmV4cGVjdGVkIGhhcHBlbmVkLlxuICovXG5jbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLkludGVybmFsLCBtc2cpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW50ZXJuYWxTZXJ2ZXJFcnJvciA9IEludGVybmFsU2VydmVyRXJyb3I7XG4vKipcbiAqIEludGVybmFsRXJyb3JXaXRoIG1ha2VzIGFuIGludGVybmFsIGVycm9yLCB3cmFwcGluZyB0aGUgb3JpZ2luYWwgZXJyb3IgYW5kIHVzaW5nIGl0XG4gKiBmb3IgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCB3aXRoIG1ldGFkYXRhIFwiY2F1c2VcIiB3aXRoIHRoZSBvcmlnaW5hbCBlcnJvciB0eXBlLlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IFR3aXJwIHNlcnZpY2VzIHRvIHdyYXAgbm9uLVR3aXJwIGVycm9ycyBhcyBpbnRlcm5hbCBlcnJvcnMuXG4gKiBUaGUgd3JhcHBlZCBlcnJvciBjYW4gYmUgZXh0cmFjdGVkIGxhdGVyIHdpdGggZXJyLmNhdXNlKClcbiAqL1xuY2xhc3MgSW50ZXJuYWxTZXJ2ZXJFcnJvcldpdGggZXh0ZW5kcyBJbnRlcm5hbFNlcnZlckVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICAgICAgc3VwZXIoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLndpdGhNZXRhKFwiY2F1c2VcIiwgZXJyLm5hbWUpO1xuICAgICAgICB0aGlzLndpdGhDYXVzZShlcnIpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW50ZXJuYWxTZXJ2ZXJFcnJvcldpdGggPSBJbnRlcm5hbFNlcnZlckVycm9yV2l0aDtcbi8qKlxuICogQSBzdGFuZGFyZCBCYWRSb3V0ZSBFcnJvclxuICovXG5jbGFzcyBCYWRSb3V0ZUVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnLCBtZXRob2QsIHVybCkge1xuICAgICAgICBzdXBlcihUd2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICAgICAgdGhpcy53aXRoTWV0YShcInR3aXJwX2ludmFsaWRfcm91dGVcIiwgbWV0aG9kICsgXCIgXCIgKyB1cmwpO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFkUm91dGVFcnJvciA9IEJhZFJvdXRlRXJyb3I7XG52YXIgVHdpcnBFcnJvckNvZGU7XG4oZnVuY3Rpb24gKFR3aXJwRXJyb3JDb2RlKSB7XG4gICAgLy8gQ2FuY2VsZWQgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24gd2FzIGNhbmNlbGxlZCAodHlwaWNhbGx5IGJ5IHRoZSBjYWxsZXIpLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiQ2FuY2VsZWRcIl0gPSBcImNhbmNlbGVkXCI7XG4gICAgLy8gVW5rbm93biBlcnJvci4gRm9yIGV4YW1wbGUgd2hlbiBoYW5kbGluZyBlcnJvcnMgcmFpc2VkIGJ5IEFQSXMgdGhhdCBkbyBub3RcbiAgICAvLyByZXR1cm4gZW5vdWdoIGVycm9yIGluZm9ybWF0aW9uLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiVW5rbm93blwiXSA9IFwidW5rbm93blwiO1xuICAgIC8vIEludmFsaWRBcmd1bWVudCBpbmRpY2F0ZXMgY2xpZW50IHNwZWNpZmllZCBhbiBpbnZhbGlkIGFyZ3VtZW50LiBJdFxuICAgIC8vIGluZGljYXRlcyBhcmd1bWVudHMgdGhhdCBhcmUgcHJvYmxlbWF0aWMgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdGUgb2YgdGhlXG4gICAgLy8gc3lzdGVtIChpLmUuIGEgbWFsZm9ybWVkIGZpbGUgbmFtZSwgcmVxdWlyZWQgYXJndW1lbnQsIG51bWJlciBvdXQgb2YgcmFuZ2UsXG4gICAgLy8gZXRjLikuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJJbnZhbGlkQXJndW1lbnRcIl0gPSBcImludmFsaWRfYXJndW1lbnRcIjtcbiAgICAvLyBNYWxmb3JtZWQgaW5kaWNhdGVzIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGRlY29kaW5nIHRoZSBjbGllbnQncyByZXF1ZXN0LlxuICAgIC8vIFRoaXMgbWF5IG1lYW4gdGhhdCB0aGUgbWVzc2FnZSB3YXMgZW5jb2RlZCBpbXByb3Blcmx5LCBvciB0aGF0IHRoZXJlIGlzIGFcbiAgICAvLyBkaXNhZ3JlZW1lbnQgaW4gbWVzc2FnZSBmb3JtYXQgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJNYWxmb3JtZWRcIl0gPSBcIm1hbGZvcm1lZFwiO1xuICAgIC8vIERlYWRsaW5lRXhjZWVkZWQgbWVhbnMgb3BlcmF0aW9uIGV4cGlyZWQgYmVmb3JlIGNvbXBsZXRpb24uIEZvciBvcGVyYXRpb25zXG4gICAgLy8gdGhhdCBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0sIHRoaXMgZXJyb3IgbWF5IGJlIHJldHVybmVkIGV2ZW4gaWYgdGhlXG4gICAgLy8gb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICh0aW1lb3V0KS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkRlYWRsaW5lRXhjZWVkZWRcIl0gPSBcImRlYWRsaW5lX2V4Y2VlZGVkXCI7XG4gICAgLy8gTm90Rm91bmQgbWVhbnMgc29tZSByZXF1ZXN0ZWQgZW50aXR5IHdhcyBub3QgZm91bmQuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJOb3RGb3VuZFwiXSA9IFwibm90X2ZvdW5kXCI7XG4gICAgLy8gQmFkUm91dGUgbWVhbnMgdGhhdCB0aGUgcmVxdWVzdGVkIFVSTCBwYXRoIHdhc24ndCByb3V0YWJsZSB0byBhIFR3aXJwXG4gICAgLy8gc2VydmljZSBhbmQgbWV0aG9kLiBUaGlzIGlzIHJldHVybmVkIGJ5IHRoZSBnZW5lcmF0ZWQgc2VydmVyLCBhbmQgdXN1YWxseVxuICAgIC8vIHNob3VsZG4ndCBiZSByZXR1cm5lZCBieSBhcHBsaWNhdGlvbnMuIEluc3RlYWQsIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlXG4gICAgLy8gTm90Rm91bmQgb3IgVW5pbXBsZW1lbnRlZC5cbiAgICBUd2lycEVycm9yQ29kZVtcIkJhZFJvdXRlXCJdID0gXCJiYWRfcm91dGVcIjtcbiAgICAvLyBBbHJlYWR5RXhpc3RzIG1lYW5zIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGFuIGVudGl0eSBmYWlsZWQgYmVjYXVzZSBvbmVcbiAgICAvLyBhbHJlYWR5IGV4aXN0cy5cbiAgICBUd2lycEVycm9yQ29kZVtcIkFscmVhZHlFeGlzdHNcIl0gPSBcImFscmVhZHlfZXhpc3RzXCI7XG4gICAgLy8gUGVybWlzc2lvbkRlbmllZCBpbmRpY2F0ZXMgdGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gZXhlY3V0ZVxuICAgIC8vIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uLiBJdCBtdXN0IG5vdCBiZSB1c2VkIGlmIHRoZSBjYWxsZXIgY2Fubm90IGJlXG4gICAgLy8gaWRlbnRpZmllZCAoVW5hdXRoZW50aWNhdGVkKS5cbiAgICBUd2lycEVycm9yQ29kZVtcIlBlcm1pc3Npb25EZW5pZWRcIl0gPSBcInBlcm1pc3Npb25fZGVuaWVkXCI7XG4gICAgLy8gVW5hdXRoZW50aWNhdGVkIGluZGljYXRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBoYXZlIHZhbGlkIGF1dGhlbnRpY2F0aW9uXG4gICAgLy8gY3JlZGVudGlhbHMgZm9yIHRoZSBvcGVyYXRpb24uXG4gICAgVHdpcnBFcnJvckNvZGVbXCJVbmF1dGhlbnRpY2F0ZWRcIl0gPSBcInVuYXV0aGVudGljYXRlZFwiO1xuICAgIC8vIFJlc291cmNlRXhoYXVzdGVkIGluZGljYXRlcyBzb21lIHJlc291cmNlIGhhcyBiZWVuIGV4aGF1c3RlZCwgcGVyaGFwcyBhXG4gICAgLy8gcGVyLXVzZXIgcXVvdGEsIG9yIHBlcmhhcHMgdGhlIGVudGlyZSBmaWxlIHN5c3RlbSBpcyBvdXQgb2Ygc3BhY2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJSZXNvdXJjZUV4aGF1c3RlZFwiXSA9IFwicmVzb3VyY2VfZXhoYXVzdGVkXCI7XG4gICAgLy8gRmFpbGVkUHJlY29uZGl0aW9uIGluZGljYXRlcyBvcGVyYXRpb24gd2FzIHJlamVjdGVkIGJlY2F1c2UgdGhlIHN5c3RlbSBpc1xuICAgIC8vIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3MgZXhlY3V0aW9uLiBGb3IgZXhhbXBsZSwgZG9pbmdcbiAgICAvLyBhbiBybWRpciBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnkgdGhhdCBpcyBub24tZW1wdHksIG9yIG9uIGEgbm9uLWRpcmVjdG9yeVxuICAgIC8vIG9iamVjdCwgb3Igd2hlbiBoYXZpbmcgY29uZmxpY3RpbmcgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHNhbWUgcmVzb3VyY2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJGYWlsZWRQcmVjb25kaXRpb25cIl0gPSBcImZhaWxlZF9wcmVjb25kaXRpb25cIjtcbiAgICAvLyBBYm9ydGVkIGluZGljYXRlcyB0aGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLCB0eXBpY2FsbHkgZHVlIHRvIGEgY29uY3VycmVuY3lcbiAgICAvLyBpc3N1ZSBsaWtlIHNlcXVlbmNlciBjaGVjayBmYWlsdXJlcywgdHJhbnNhY3Rpb24gYWJvcnRzLCBldGMuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJBYm9ydGVkXCJdID0gXCJhYm9ydGVkXCI7XG4gICAgLy8gT3V0T2ZSYW5nZSBtZWFucyBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBwYXN0IHRoZSB2YWxpZCByYW5nZS4gRm9yIGV4YW1wbGUsXG4gICAgLy8gc2Vla2luZyBvciByZWFkaW5nIHBhc3QgZW5kIG9mIGEgcGFnaW5hdGVkIGNvbGxlY3Rpb24uXG4gICAgLy9cbiAgICAvLyBVbmxpa2UgSW52YWxpZEFyZ3VtZW50LCB0aGlzIGVycm9yIGluZGljYXRlcyBhIHByb2JsZW0gdGhhdCBtYXkgYmUgZml4ZWQgaWZcbiAgICAvLyB0aGUgc3lzdGVtIHN0YXRlIGNoYW5nZXMgKGkuZS4gYWRkaW5nIG1vcmUgaXRlbXMgdG8gdGhlIGNvbGxlY3Rpb24pLlxuICAgIC8vXG4gICAgLy8gVGhlcmUgaXMgYSBmYWlyIGJpdCBvZiBvdmVybGFwIGJldHdlZW4gRmFpbGVkUHJlY29uZGl0aW9uIGFuZCBPdXRPZlJhbmdlLlxuICAgIC8vIFdlIHJlY29tbWVuZCB1c2luZyBPdXRPZlJhbmdlICh0aGUgbW9yZSBzcGVjaWZpYyBlcnJvcikgd2hlbiBpdCBhcHBsaWVzIHNvXG4gICAgLy8gdGhhdCBjYWxsZXJzIHdobyBhcmUgaXRlcmF0aW5nIHRocm91Z2ggYSBzcGFjZSBjYW4gZWFzaWx5IGxvb2sgZm9yIGFuXG4gICAgLy8gT3V0T2ZSYW5nZSBlcnJvciB0byBkZXRlY3Qgd2hlbiB0aGV5IGFyZSBkb25lLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiT3V0T2ZSYW5nZVwiXSA9IFwib3V0X29mX3JhbmdlXCI7XG4gICAgLy8gVW5pbXBsZW1lbnRlZCBpbmRpY2F0ZXMgb3BlcmF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBvciBub3RcbiAgICAvLyBzdXBwb3J0ZWQvZW5hYmxlZCBpbiB0aGlzIHNlcnZpY2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJVbmltcGxlbWVudGVkXCJdID0gXCJ1bmltcGxlbWVudGVkXCI7XG4gICAgLy8gSW50ZXJuYWwgZXJyb3JzLiBXaGVuIHNvbWUgaW52YXJpYW50cyBleHBlY3RlZCBieSB0aGUgdW5kZXJseWluZyBzeXN0ZW1cbiAgICAvLyBoYXZlIGJlZW4gYnJva2VuLiBJbiBvdGhlciB3b3Jkcywgc29tZXRoaW5nIGJhZCBoYXBwZW5lZCBpbiB0aGUgbGlicmFyeSBvclxuICAgIC8vIGJhY2tlbmQgc2VydmljZS4gRG8gbm90IGNvbmZ1c2Ugd2l0aCBIVFRQIEludGVybmFsIFNlcnZlciBFcnJvcjsgYW5cbiAgICAvLyBJbnRlcm5hbCBlcnJvciBjb3VsZCBhbHNvIGhhcHBlbiBvbiB0aGUgY2xpZW50IGNvZGUsIGkuZS4gd2hlbiBwYXJzaW5nIGFcbiAgICAvLyBzZXJ2ZXIgcmVzcG9uc2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJJbnRlcm5hbFwiXSA9IFwiaW50ZXJuYWxcIjtcbiAgICAvLyBVbmF2YWlsYWJsZSBpbmRpY2F0ZXMgdGhlIHNlcnZpY2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlLiBUaGlzIGlzIGEgbW9zdFxuICAgIC8vIGxpa2VseSBhIHRyYW5zaWVudCBjb25kaXRpb24gYW5kIG1heSBiZSBjb3JyZWN0ZWQgYnkgcmV0cnlpbmcgd2l0aCBhXG4gICAgLy8gYmFja29mZi5cbiAgICBUd2lycEVycm9yQ29kZVtcIlVuYXZhaWxhYmxlXCJdID0gXCJ1bmF2YWlsYWJsZVwiO1xuICAgIC8vIERhdGFMb3NzIGluZGljYXRlcyB1bnJlY292ZXJhYmxlIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiRGF0YUxvc3NcIl0gPSBcImRhdGFfbG9zc1wiO1xufSkoVHdpcnBFcnJvckNvZGUgPSBleHBvcnRzLlR3aXJwRXJyb3JDb2RlIHx8IChleHBvcnRzLlR3aXJwRXJyb3JDb2RlID0ge30pKTtcbi8vIFNlcnZlckhUVFBTdGF0dXNGcm9tRXJyb3JDb2RlIG1hcHMgYSBUd2lycCBlcnJvciB0eXBlIGludG8gYSBzaW1pbGFyIEhUVFBcbi8vIHJlc3BvbnNlIHN0YXR1cy4gSXQgaXMgdXNlZCBieSB0aGUgVHdpcnAgc2VydmVyIGhhbmRsZXIgdG8gc2V0IHRoZSBIVFRQXG4vLyByZXNwb25zZSBzdGF0dXMgY29kZS4gUmV0dXJucyAwIGlmIHRoZSBFcnJvckNvZGUgaXMgaW52YWxpZC5cbmZ1bmN0aW9uIGh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlKGNvZGUpIHtcbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5DYW5jZWxlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDg7IC8vIFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuVW5rbm93bjpcbiAgICAgICAgICAgIHJldHVybiA1MDA7IC8vIEludGVybmFsIFNlcnZlciBFcnJvclxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkludmFsaWRBcmd1bWVudDpcbiAgICAgICAgICAgIHJldHVybiA0MDA7IC8vIEJhZFJlcXVlc3RcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5NYWxmb3JtZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDAwOyAvLyBCYWRSZXF1ZXN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuRGVhZGxpbmVFeGNlZWRlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDg7IC8vIFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuTm90Rm91bmQ6XG4gICAgICAgICAgICByZXR1cm4gNDA0OyAvLyBOb3QgRm91bmRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5CYWRSb3V0ZTpcbiAgICAgICAgICAgIHJldHVybiA0MDQ7IC8vIE5vdCBGb3VuZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkFscmVhZHlFeGlzdHM6XG4gICAgICAgICAgICByZXR1cm4gNDA5OyAvLyBDb25mbGljdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlBlcm1pc3Npb25EZW5pZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDAzOyAvLyBGb3JiaWRkZW5cbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5VbmF1dGhlbnRpY2F0ZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDAxOyAvLyBVbmF1dGhvcml6ZWRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5SZXNvdXJjZUV4aGF1c3RlZDpcbiAgICAgICAgICAgIHJldHVybiA0Mjk7IC8vIFRvbyBNYW55IFJlcXVlc3RzXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuRmFpbGVkUHJlY29uZGl0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIDQxMjsgLy8gUHJlY29uZGl0aW9uIEZhaWxlZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkFib3J0ZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDA5OyAvLyBDb25mbGljdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLk91dE9mUmFuZ2U6XG4gICAgICAgICAgICByZXR1cm4gNDAwOyAvLyBCYWQgUmVxdWVzdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlVuaW1wbGVtZW50ZWQ6XG4gICAgICAgICAgICByZXR1cm4gNTAxOyAvLyBOb3QgSW1wbGVtZW50ZWRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5JbnRlcm5hbDpcbiAgICAgICAgICAgIHJldHVybiA1MDA7IC8vIEludGVybmFsIFNlcnZlciBFcnJvclxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlVuYXZhaWxhYmxlOlxuICAgICAgICAgICAgcmV0dXJuIDUwMzsgLy8gU2VydmljZSBVbmF2YWlsYWJsZVxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkRhdGFMb3NzOlxuICAgICAgICAgICAgcmV0dXJuIDUwMDsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gMDsgLy8gSW52YWxpZCFcbiAgICB9XG59XG5leHBvcnRzLmh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlID0gaHR0cFN0YXR1c0Zyb21FcnJvckNvZGU7XG4vLyBJc1ZhbGlkRXJyb3JDb2RlIHJldHVybnMgdHJ1ZSBpZiBpcyBvbmUgb2YgdGhlIHZhbGlkIHByZWRlZmluZWQgY29uc3RhbnRzLlxuZnVuY3Rpb24gaXNWYWxpZEVycm9yQ29kZShjb2RlKSB7XG4gICAgcmV0dXJuIGh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlKGNvZGUpICE9IDA7XG59XG5leHBvcnRzLmlzVmFsaWRFcnJvckNvZGUgPSBpc1ZhbGlkRXJyb3JDb2RlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZVR3aXJwUGF0aCA9IGV4cG9ydHMuZ2V0UmVxdWVzdERhdGEgPSBleHBvcnRzLnZhbGlkYXRlUmVxdWVzdCA9IGV4cG9ydHMuZ2V0Q29udGVudFR5cGUgPSBleHBvcnRzLlR3aXJwQ29udGVudFR5cGUgPSB2b2lkIDA7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbi8qKlxuICogU3VwcG9ydGVkIFR3aXJwIENvbnRlbnQtVHlwZVxuICovXG52YXIgVHdpcnBDb250ZW50VHlwZTtcbihmdW5jdGlvbiAoVHdpcnBDb250ZW50VHlwZSkge1xuICAgIFR3aXJwQ29udGVudFR5cGVbVHdpcnBDb250ZW50VHlwZVtcIlByb3RvYnVmXCJdID0gMF0gPSBcIlByb3RvYnVmXCI7XG4gICAgVHdpcnBDb250ZW50VHlwZVtUd2lycENvbnRlbnRUeXBlW1wiSlNPTlwiXSA9IDFdID0gXCJKU09OXCI7XG4gICAgVHdpcnBDb250ZW50VHlwZVtUd2lycENvbnRlbnRUeXBlW1wiVW5rbm93blwiXSA9IDJdID0gXCJVbmtub3duXCI7XG59KShUd2lycENvbnRlbnRUeXBlID0gZXhwb3J0cy5Ud2lycENvbnRlbnRUeXBlIHx8IChleHBvcnRzLlR3aXJwQ29udGVudFR5cGUgPSB7fSkpO1xuLyoqXG4gKiBHZXQgc3VwcG9ydGVkIGNvbnRlbnQtdHlwZVxuICogQHBhcmFtIG1pbWVUeXBlXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRlbnRUeXBlKG1pbWVUeXBlKSB7XG4gICAgc3dpdGNoIChtaW1lVHlwZSkge1xuICAgICAgICBjYXNlIFwiYXBwbGljYXRpb24vcHJvdG9idWZcIjpcbiAgICAgICAgICAgIHJldHVybiBUd2lycENvbnRlbnRUeXBlLlByb3RvYnVmO1xuICAgICAgICBjYXNlIFwiYXBwbGljYXRpb24vanNvblwiOlxuICAgICAgICAgICAgcmV0dXJuIFR3aXJwQ29udGVudFR5cGUuSlNPTjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBUd2lycENvbnRlbnRUeXBlLlVua25vd247XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb250ZW50VHlwZSA9IGdldENvbnRlbnRUeXBlO1xuLyoqXG4gKiBWYWxpZGF0ZSBhIHR3aXJwIHJlcXVlc3RcbiAqIEBwYXJhbSBjdHhcbiAqIEBwYXJhbSByZXF1ZXN0XG4gKiBAcGFyYW0gcGF0aFByZWZpeFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlcXVlc3QoY3R4LCByZXF1ZXN0LCBwYXRoUHJlZml4KSB7XG4gICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSBcIlBPU1RcIikge1xuICAgICAgICBjb25zdCBtc2cgPSBgdW5zdXBwb3J0ZWQgbWV0aG9kICR7cmVxdWVzdC5tZXRob2R9IChvbmx5IFBPU1QgaXMgYWxsb3dlZClgO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gcGFyc2VUd2lycFBhdGgocmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgaWYgKHBhdGgucGtnU2VydmljZSAhPT1cbiAgICAgICAgKGN0eC5wYWNrYWdlTmFtZSA/IGN0eC5wYWNrYWdlTmFtZSArIFwiLlwiIDogXCJcIikgKyBjdHguc2VydmljZU5hbWUpIHtcbiAgICAgICAgY29uc3QgbXNnID0gYG5vIGhhbmRsZXIgZm9yIHBhdGggJHtyZXF1ZXN0LnVybH1gO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICBpZiAocGF0aC5wcmVmaXggIT09IHBhdGhQcmVmaXgpIHtcbiAgICAgICAgY29uc3QgbXNnID0gYGludmFsaWQgcGF0aCBwcmVmaXggJHtwYXRoLnByZWZpeH0sIGV4cGVjdGVkICR7cGF0aFByZWZpeH0sIG9uIHBhdGggJHtyZXF1ZXN0LnVybH1gO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICBjb25zdCBtaW1lQ29udGVudFR5cGUgPSByZXF1ZXN0LmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gfHwgXCJcIjtcbiAgICBpZiAoY3R4LmNvbnRlbnRUeXBlID09PSBUd2lycENvbnRlbnRUeXBlLlVua25vd24pIHtcbiAgICAgICAgY29uc3QgbXNnID0gYHVuZXhwZWN0ZWQgQ29udGVudC1UeXBlOiAke3JlcXVlc3QuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXX1gO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXRoKSwgeyBtaW1lQ29udGVudFR5cGUsIGNvbnRlbnRUeXBlOiBjdHguY29udGVudFR5cGUgfSk7XG59XG5leHBvcnRzLnZhbGlkYXRlUmVxdWVzdCA9IHZhbGlkYXRlUmVxdWVzdDtcbi8qKlxuICogR2V0IHJlcXVlc3QgZGF0YSBmcm9tIHRoZSBib2R5XG4gKiBAcGFyYW0gcmVxXG4gKi9cbmZ1bmN0aW9uIGdldFJlcXVlc3REYXRhKHJlcSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcVdpdGhSYXdCb2R5ID0gcmVxO1xuICAgICAgICBpZiAocmVxV2l0aFJhd0JvZHkucmF3Qm9keSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXFXaXRoUmF3Qm9keS5yYXdCb2R5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgcmVxLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IGNodW5rcy5wdXNoKGNodW5rKSk7XG4gICAgICAgIHJlcS5vbihcImVuZFwiLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IGVycm9yc18xLlR3aXJwRXJyb3IoZXJyb3JzXzEuVHdpcnBFcnJvckNvZGUuRGVhZGxpbmVFeGNlZWRlZCwgXCJmYWlsZWQgdG8gcmVhZCByZXF1ZXN0OiBkZWFkbGluZSBleGNlZWRlZFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IGVycm9yc18xLlR3aXJwRXJyb3IoZXJyb3JzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBlcnIubWVzc2FnZSkud2l0aENhdXNlKGVycikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVxLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBlcnJvcnNfMS5Ud2lycEVycm9yKGVycm9yc18xLlR3aXJwRXJyb3JDb2RlLkNhbmNlbGVkLCBcImZhaWxlZCB0byByZWFkIHJlcXVlc3Q6IGNvbnRleHQgY2FuY2VsZWRcIikpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0UmVxdWVzdERhdGEgPSBnZXRSZXF1ZXN0RGF0YTtcbi8qKlxuICogUGFyc2VzIHR3aXJwIHVybCBwYXRoXG4gKiBAcGFyYW0gcGF0aFxuICovXG5mdW5jdGlvbiBwYXJzZVR3aXJwUGF0aChwYXRoKSB7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBpZiAocGFydHMubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGtnU2VydmljZTogXCJcIixcbiAgICAgICAgICAgIG1ldGhvZDogXCJcIixcbiAgICAgICAgICAgIHByZWZpeDogXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSxcbiAgICAgICAgcGtnU2VydmljZTogcGFydHNbcGFydHMubGVuZ3RoIC0gMl0sXG4gICAgICAgIHByZWZpeDogcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMikuam9pbihcIi9cIiksXG4gICAgfTtcbn1cbmV4cG9ydHMucGFyc2VUd2lycFBhdGggPSBwYXJzZVR3aXJwUGF0aDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud3JpdGVFcnJvciA9IGV4cG9ydHMuVHdpcnBTZXJ2ZXIgPSB2b2lkIDA7XG5jb25zdCBob29rc18xID0gcmVxdWlyZShcIi4vaG9va3NcIik7XG5jb25zdCByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG4vKipcbiAqIFJ1bnRpbWUgc2VydmVyIGltcGxlbWVudGF0aW9uIG9mIGEgVHdpcnBTZXJ2ZXJcbiAqL1xuY2xhc3MgVHdpcnBTZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5wYXRoUHJlZml4ID0gXCIvdHdpcnBcIjtcbiAgICAgICAgdGhpcy5ob29rcyA9IFtdO1xuICAgICAgICB0aGlzLmludGVyY2VwdG9ycyA9IFtdO1xuICAgICAgICB0aGlzLnBhY2thZ2VOYW1lID0gb3B0aW9ucy5wYWNrYWdlTmFtZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlTmFtZSA9IG9wdGlvbnMuc2VydmljZU5hbWU7XG4gICAgICAgIHRoaXMubWV0aG9kTGlzdCA9IG9wdGlvbnMubWV0aG9kTGlzdDtcbiAgICAgICAgdGhpcy5tYXRjaFJvdXRlID0gb3B0aW9ucy5tYXRjaFJvdXRlO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBvcHRpb25zLnNlcnZpY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHByZWZpeCBmb3IgdGhpcyBzZXJ2ZXJcbiAgICAgKi9cbiAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoUHJlZml4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgaHR0cCBoYW5kbGVyIGZvciB0d2lycCBjb21wbGFpbnQgZW5kcG9pbnRzXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBodHRwSGFuZGxlcihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAocmVxLCByZXNwKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXR1cCBwcmVmaXhcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnByZWZpeCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMud2l0aFByZWZpeChvcHRpb25zLnByZWZpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faHR0cEhhbmRsZXIocmVxLCByZXNwKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBpbnRlcmNlcHRvcnMgb3IgaG9va3MgdG8gdGhlIHJlcXVlc3Qgc3RhY2tcbiAgICAgKiBAcGFyYW0gbWlkZGxld2FyZXNcbiAgICAgKi9cbiAgICB1c2UoLi4ubWlkZGxld2FyZXMpIHtcbiAgICAgICAgbWlkZGxld2FyZXMuZm9yRWFjaCgobWlkZGxld2FyZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGhvb2tzXzEuaXNIb29rKG1pZGRsZXdhcmUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy5wdXNoKG1pZGRsZXdhcmUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbnRlcmNlcHRvcnMucHVzaChtaWRkbGV3YXJlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcHJlZml4IHRvIHRoZSBzZXJ2aWNlIHVybCBwYXRoXG4gICAgICogQHBhcmFtIHByZWZpeFxuICAgICAqL1xuICAgIHdpdGhQcmVmaXgocHJlZml4KSB7XG4gICAgICAgIGlmIChwcmVmaXggPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGhQcmVmaXggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXRoUHJlZml4ID0gcHJlZml4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByZWdleCBtYXRjaGluZyBwYXRoIGZvciB0aGlzIHR3aXJwIHNlcnZlclxuICAgICAqL1xuICAgIG1hdGNoaW5nUGF0aCgpIHtcbiAgICAgICAgY29uc3QgYmFzZVJlZ2V4ID0gdGhpcy5iYXNlVVJJKCkucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAke2Jhc2VSZWdleH1cXC8oJHt0aGlzLm1ldGhvZExpc3Quam9pbihcInxcIil9KWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiYXNlIFVSSSBmb3IgdGhpcyB0d2lycCBzZXJ2ZXJcbiAgICAgKi9cbiAgICBiYXNlVVJJKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wYXRoUHJlZml4fS8ke3RoaXMucGFja2FnZU5hbWUgPyB0aGlzLnBhY2thZ2VOYW1lICsgXCIuXCIgOiBcIlwifSR7dGhpcy5zZXJ2aWNlTmFtZX1gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0d2lycCBjb250ZXh0XG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSByZXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNyZWF0ZUNvbnRleHQocmVxLCByZXMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lOiB0aGlzLnBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgc2VydmljZU5hbWU6IHRoaXMuc2VydmljZU5hbWUsXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBcIlwiLFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHJlcXVlc3RfMS5nZXRDb250ZW50VHlwZShyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSksXG4gICAgICAgICAgICByZXE6IHJlcSxcbiAgICAgICAgICAgIHJlczogcmVzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUd3JpcCBzZXJ2ZXIgaHR0cCBoYW5kbGVyIGltcGxlbWVudGF0aW9uXG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSByZXNwXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfaHR0cEhhbmRsZXIocmVxLCByZXNwKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLmNyZWF0ZUNvbnRleHQocmVxLCByZXNwKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5pbnZva2VIb29rKFwicmVxdWVzdFJlY2VpdmVkXCIsIGN0eCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBtZXRob2QsIG1pbWVDb250ZW50VHlwZSB9ID0gcmVxdWVzdF8xLnZhbGlkYXRlUmVxdWVzdChjdHgsIHJlcSwgdGhpcy5wYXRoUHJlZml4IHx8IFwiXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLm1hdGNoUm91dGUobWV0aG9kLCB7XG4gICAgICAgICAgICAgICAgICAgIG9uTWF0Y2g6IChjdHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUhvb2soXCJyZXF1ZXN0Um91dGVkXCIsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uTm90Rm91bmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBubyBoYW5kbGVyIGZvciBwYXRoICR7cmVxLnVybH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkJhZFJvdXRlRXJyb3IobXNnLCByZXEubWV0aG9kIHx8IFwiXCIsIHJlcS51cmwgfHwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHlpZWxkIHJlcXVlc3RfMS5nZXRSZXF1ZXN0RGF0YShyZXEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgaGFuZGxlcihjdHgsIHRoaXMuc2VydmljZSwgYm9keSwgdGhpcy5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgICAgIHlpZWxkIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVzcG9uc2VQcmVwYXJlZFwiLCBjdHgpLFxuICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRpbGwgbmV4dCByZWxlYXNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlSG9vayhcInJlcXVlc3RQcmVwYXJlZFwiLCBjdHgpLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIHJlc3Auc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgICAgICAgICByZXNwLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBtaW1lQ29udGVudFR5cGUpO1xuICAgICAgICAgICAgICAgIHJlc3AuZW5kKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5pbnZva2VIb29rKFwiZXJyb3JcIiwgY3R4LCBtdXN0QmVUd2lycEVycm9yKGUpKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3AuaGVhZGVyc1NlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVFcnJvcihyZXNwLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlSG9vayhcInJlc3BvbnNlU2VudFwiLCBjdHgpLFxuICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRpbGwgbmV4dCByZWxlYXNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlSG9vayhcInJlcXVlc3RTZW50XCIsIGN0eCksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZva2UgYSBob29rXG4gICAgICogQHBhcmFtIGhvb2tOYW1lXG4gICAgICogQHBhcmFtIGN0eFxuICAgICAqIEBwYXJhbSBlcnJcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgaW52b2tlSG9vayhob29rTmFtZSwgY3R4LCBlcnIpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhvb2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoYWluZWRIb29rcyA9IGhvb2tzXzEuY2hhaW5Ib29rcyguLi50aGlzLmhvb2tzKTtcbiAgICAgICAgICAgIGNvbnN0IGhvb2sgPSBjaGFpbmVkSG9va3MgPT09IG51bGwgfHwgY2hhaW5lZEhvb2tzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFpbmVkSG9va3NbaG9va05hbWVdO1xuICAgICAgICAgICAgaWYgKGhvb2spIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBob29rKGN0eCwgZXJyIHx8IG5ldyBlcnJvcnNfMS5JbnRlcm5hbFNlcnZlckVycm9yKFwiaW50ZXJuYWwgc2VydmVyIGVycm9yXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5Ud2lycFNlcnZlciA9IFR3aXJwU2VydmVyO1xuLyoqXG4gKiBXcml0ZSBodHRwIGVycm9yIHJlc3BvbnNlXG4gKiBAcGFyYW0gcmVzXG4gKiBAcGFyYW0gZXJyb3JcbiAqL1xuZnVuY3Rpb24gd3JpdGVFcnJvcihyZXMsIGVycm9yKSB7XG4gICAgY29uc3QgdHdpcnBFcnJvciA9IG11c3RCZVR3aXJwRXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgIHJlcy5zdGF0dXNDb2RlID0gZXJyb3JzXzEuaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUodHdpcnBFcnJvci5jb2RlKTtcbiAgICByZXMuZW5kKHR3aXJwRXJyb3IudG9KU09OKCkpO1xufVxuZXhwb3J0cy53cml0ZUVycm9yID0gd3JpdGVFcnJvcjtcbi8qKlxuICogTWFrZSBzdXJlIHRoYXQgdGhlIGVycm9yIHBhc3NlZCBpcyBhIFR3aXJwRXJyb3JcbiAqIG90aGVyd2lzZSBpdCB3aWxsIHdyYXAgaXQgaW50byBhbiBJbnRlcm5hbEVycm9yXG4gKiBAcGFyYW0gZXJyXG4gKi9cbmZ1bmN0aW9uIG11c3RCZVR3aXJwRXJyb3IoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIGVycm9yc18xLlR3aXJwRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBlcnJvcnNfMS5JbnRlcm5hbFNlcnZlckVycm9yV2l0aChlcnIpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jaGFpbkludGVyY2VwdG9ycyA9IHZvaWQgMDtcbi8vIGNoYWlucyBtdWx0aXBsZSBJbnRlcmNlcHRvcnMgaW50byBhIHNpbmdsZSBJbnRlcmNlcHRvci5cbi8vIFRoZSBmaXJzdCBpbnRlcmNlcHRvciB3cmFwcyB0aGUgc2Vjb25kIG9uZSwgYW5kIHNvIG9uLlxuLy8gUmV0dXJucyBudWxsIGlmIGludGVyY2VwdG9ycyBpcyBlbXB0eS5cbmZ1bmN0aW9uIGNoYWluSW50ZXJjZXB0b3JzKC4uLmludGVyY2VwdG9ycykge1xuICAgIGlmIChpbnRlcmNlcHRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGludGVyY2VwdG9yc1swXTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBpbnRlcmNlcHRvcnNbMF07XG4gICAgcmV0dXJuIChjdHgsIHJlcXVlc3QsIGhhbmRsZXIpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IG5leHQgPSBoYW5kbGVyO1xuICAgICAgICBmb3IgKGxldCBpID0gaW50ZXJjZXB0b3JzLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgIG5leHQgPSAoKG5leHQpID0+IChjdHgsIHR5cGVkUmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcmNlcHRvcnNbaV0oY3R4LCB0eXBlZFJlcXVlc3QsIG5leHQpO1xuICAgICAgICAgICAgfSkobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0KGN0eCwgcmVxdWVzdCwgbmV4dCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmNoYWluSW50ZXJjZXB0b3JzID0gY2hhaW5JbnRlcmNlcHRvcnM7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiBfcHJvY2VzcyAodiwgbW9kKSB7XG4gIHZhciBpXG4gIHZhciByXG5cbiAgaWYgKHR5cGVvZiBtb2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICByID0gbW9kKHYpXG4gICAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdiA9IHJcbiAgICB9XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtb2QpKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG1vZC5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IG1vZFtpXSh2KVxuICAgICAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2ID0gclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2XG59XG5cbmZ1bmN0aW9uIHBhcnNlS2V5IChrZXksIHZhbCkge1xuICAvLyBkZXRlY3QgbmVnYXRpdmUgaW5kZXggbm90YXRpb25cbiAgaWYgKGtleVswXSA9PT0gJy0nICYmIEFycmF5LmlzQXJyYXkodmFsKSAmJiAvXi1cXGQrJC8udGVzdChrZXkpKSB7XG4gICAgcmV0dXJuIHZhbC5sZW5ndGggKyBwYXJzZUludChrZXksIDEwKVxuICB9XG4gIHJldHVybiBrZXlcbn1cblxuZnVuY3Rpb24gaXNJbmRleCAoaykge1xuICByZXR1cm4gL15cXGQrJC8udGVzdChrKVxufVxuXG5mdW5jdGlvbiBpc09iamVjdCAodmFsKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVuY3Rpb24gaXNBcnJheU9yT2JqZWN0ICh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdCh2YWwpID09PSB2YWxcbn1cblxuZnVuY3Rpb24gaXNFbXB0eU9iamVjdCAodmFsKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMFxufVxuXG52YXIgYmxhY2tsaXN0ID0gWydfX3Byb3RvX18nLCAncHJvdG90eXBlJywgJ2NvbnN0cnVjdG9yJ11cbnZhciBibGFja2xpc3RGaWx0ZXIgPSBmdW5jdGlvbiAocGFydCkgeyByZXR1cm4gYmxhY2tsaXN0LmluZGV4T2YocGFydCkgPT09IC0xIH1cblxuZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoLCBzZXApIHtcbiAgaWYgKHBhdGguaW5kZXhPZignWycpID49IDApIHtcbiAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXFsvZywgc2VwKS5yZXBsYWNlKC9dL2csICcnKVxuICB9XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdChzZXApXG5cbiAgdmFyIGNoZWNrID0gcGFydHMuZmlsdGVyKGJsYWNrbGlzdEZpbHRlcilcblxuICBpZiAoY2hlY2subGVuZ3RoICE9PSBwYXJ0cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBFcnJvcignUmVmdXNpbmcgdG8gdXBkYXRlIGJsYWNrbGlzdGVkIHByb3BlcnR5ICcgKyBwYXRoKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzXG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcblxuZnVuY3Rpb24gRG90T2JqZWN0IChzZXBhcmF0b3IsIG92ZXJyaWRlLCB1c2VBcnJheSwgdXNlQnJhY2tldHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERvdE9iamVjdCkpIHtcbiAgICByZXR1cm4gbmV3IERvdE9iamVjdChzZXBhcmF0b3IsIG92ZXJyaWRlLCB1c2VBcnJheSwgdXNlQnJhY2tldHMpXG4gIH1cblxuICBpZiAodHlwZW9mIG92ZXJyaWRlID09PSAndW5kZWZpbmVkJykgb3ZlcnJpZGUgPSBmYWxzZVxuICBpZiAodHlwZW9mIHVzZUFycmF5ID09PSAndW5kZWZpbmVkJykgdXNlQXJyYXkgPSB0cnVlXG4gIGlmICh0eXBlb2YgdXNlQnJhY2tldHMgPT09ICd1bmRlZmluZWQnKSB1c2VCcmFja2V0cyA9IHRydWVcbiAgdGhpcy5zZXBhcmF0b3IgPSBzZXBhcmF0b3IgfHwgJy4nXG4gIHRoaXMub3ZlcnJpZGUgPSBvdmVycmlkZVxuICB0aGlzLnVzZUFycmF5ID0gdXNlQXJyYXlcbiAgdGhpcy51c2VCcmFja2V0cyA9IHVzZUJyYWNrZXRzXG4gIHRoaXMua2VlcEFycmF5ID0gZmFsc2VcblxuICAvLyBjb250YWlucyB0b3VjaGVkIGFycmF5c1xuICB0aGlzLmNsZWFudXAgPSBbXVxufVxuXG52YXIgZG90RGVmYXVsdCA9IG5ldyBEb3RPYmplY3QoJy4nLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSlcbmZ1bmN0aW9uIHdyYXAgKG1ldGhvZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkb3REZWZhdWx0W21ldGhvZF0uYXBwbHkoZG90RGVmYXVsdCwgYXJndW1lbnRzKVxuICB9XG59XG5cbkRvdE9iamVjdC5wcm90b3R5cGUuX2ZpbGwgPSBmdW5jdGlvbiAoYSwgb2JqLCB2LCBtb2QpIHtcbiAgdmFyIGsgPSBhLnNoaWZ0KClcblxuICBpZiAoYS5sZW5ndGggPiAwKSB7XG4gICAgb2JqW2tdID0gb2JqW2tdIHx8ICh0aGlzLnVzZUFycmF5ICYmIGlzSW5kZXgoYVswXSkgPyBbXSA6IHt9KVxuXG4gICAgaWYgKCFpc0FycmF5T3JPYmplY3Qob2JqW2tdKSkge1xuICAgICAgaWYgKHRoaXMub3ZlcnJpZGUpIHtcbiAgICAgICAgb2JqW2tdID0ge31cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghKGlzQXJyYXlPck9iamVjdCh2KSAmJiBpc0VtcHR5T2JqZWN0KHYpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdUcnlpbmcgdG8gcmVkZWZpbmUgYCcgKyBrICsgJ2Agd2hpY2ggaXMgYSAnICsgdHlwZW9mIG9ialtrXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ZpbGwoYSwgb2JqW2tdLCB2LCBtb2QpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCF0aGlzLm92ZXJyaWRlICYmIGlzQXJyYXlPck9iamVjdChvYmpba10pICYmICFpc0VtcHR5T2JqZWN0KG9ialtrXSkpIHtcbiAgICAgIGlmICghKGlzQXJyYXlPck9iamVjdCh2KSAmJiBpc0VtcHR5T2JqZWN0KHYpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gcmVkZWZpbmUgbm9uLWVtcHR5IG9ialsnXCIgKyBrICsgXCInXVwiKVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBvYmpba10gPSBfcHJvY2Vzcyh2LCBtb2QpXG4gIH1cbn1cblxuLyoqXG4gKlxuICogQ29udmVydHMgYW4gb2JqZWN0IHdpdGggZG90dGVkLWtleS92YWx1ZSBwYWlycyB0byBpdCdzIGV4cGFuZGVkIHZlcnNpb25cbiAqXG4gKiBPcHRpb25hbGx5IHRyYW5zZm9ybWVkIGJ5IGEgc2V0IG9mIG1vZGlmaWVycy5cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIHZhciByb3cgPSB7XG4gKiAgICAgJ25yJzogMjAwLFxuICogICAgICdkb2MubmFtZSc6ICcgIE15IERvY3VtZW50ICAnXG4gKiAgIH1cbiAqXG4gKiAgIHZhciBtb2RzID0ge1xuICogICAgICdkb2MubmFtZSc6IFtfcy50cmltLCBfcy51bmRlcnNjb3JlZF1cbiAqICAgfVxuICpcbiAqICAgZG90Lm9iamVjdChyb3csIG1vZHMpXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtPYmplY3R9IG1vZHNcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5vYmplY3QgPSBmdW5jdGlvbiAob2JqLCBtb2RzKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIHZhciBtb2QgPSBtb2RzID09PSB1bmRlZmluZWQgPyBudWxsIDogbW9kc1trXVxuICAgIC8vIG5vcm1hbGl6ZSBhcnJheSBub3RhdGlvbi5cbiAgICB2YXIgb2sgPSBwYXJzZVBhdGgoaywgc2VsZi5zZXBhcmF0b3IpLmpvaW4oc2VsZi5zZXBhcmF0b3IpXG5cbiAgICBpZiAob2suaW5kZXhPZihzZWxmLnNlcGFyYXRvcikgIT09IC0xKSB7XG4gICAgICBzZWxmLl9maWxsKG9rLnNwbGl0KHNlbGYuc2VwYXJhdG9yKSwgb2JqLCBvYmpba10sIG1vZClcbiAgICAgIGRlbGV0ZSBvYmpba11cbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gX3Byb2Nlc3Mob2JqW2tdLCBtb2QpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBvYmpcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBkb3R0ZWQgcGF0aFxuICogQHBhcmFtIHtTdHJpbmd9IHYgdmFsdWUgdG8gYmUgc2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIG9iamVjdCB0byBiZSBtb2RpZmllZFxuICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gbW9kIG9wdGlvbmFsIG1vZGlmaWVyXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuc3RyID0gZnVuY3Rpb24gKHBhdGgsIHYsIG9iaiwgbW9kKSB7XG4gIHZhciBvayA9IHBhcnNlUGF0aChwYXRoLCB0aGlzLnNlcGFyYXRvcikuam9pbih0aGlzLnNlcGFyYXRvcilcblxuICBpZiAocGF0aC5pbmRleE9mKHRoaXMuc2VwYXJhdG9yKSAhPT0gLTEpIHtcbiAgICB0aGlzLl9maWxsKG9rLnNwbGl0KHRoaXMuc2VwYXJhdG9yKSwgb2JqLCB2LCBtb2QpXG4gIH0gZWxzZSB7XG4gICAgb2JqW3BhdGhdID0gX3Byb2Nlc3ModiwgbW9kKVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqXG4gKiBQaWNrIGEgdmFsdWUgZnJvbSBhbiBvYmplY3QgdXNpbmcgZG90IG5vdGF0aW9uLlxuICpcbiAqIE9wdGlvbmFsbHkgcmVtb3ZlIHRoZSB2YWx1ZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHJlbW92ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnBpY2sgPSBmdW5jdGlvbiAocGF0aCwgb2JqLCByZW1vdmUsIHJlaW5kZXhBcnJheSkge1xuICB2YXIgaVxuICB2YXIga2V5c1xuICB2YXIgdmFsXG4gIHZhciBrZXlcbiAgdmFyIGNwXG5cbiAga2V5cyA9IHBhcnNlUGF0aChwYXRoLCB0aGlzLnNlcGFyYXRvcilcbiAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBwYXJzZUtleShrZXlzW2ldLCBvYmopXG4gICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoaSA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICB2YWwgPSBvYmpba2V5XVxuICAgICAgICAgIGlmIChyZWluZGV4QXJyYXkgJiYgQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICBvYmouc3BsaWNlKGtleSwgMSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIG9ialtrZXldXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIGNwID0ga2V5cy5zbGljZSgwLCAtMSkuam9pbignLicpXG4gICAgICAgICAgICBpZiAodGhpcy5jbGVhbnVwLmluZGV4T2YoY3ApID09PSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLmNsZWFudXAucHVzaChjcClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvYmpba2V5XVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmogPSBvYmpba2V5XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG4gIGlmIChyZW1vdmUgJiYgQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgb2JqID0gb2JqLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4gIT09IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIG9ialxufVxuLyoqXG4gKlxuICogRGVsZXRlIHZhbHVlIGZyb20gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7YW55fSBUaGUgcmVtb3ZlZCB2YWx1ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChwYXRoLCBvYmopIHtcbiAgcmV0dXJuIHRoaXMucmVtb3ZlKHBhdGgsIG9iaiwgdHJ1ZSlcbn1cblxuLyoqXG4gKlxuICogUmVtb3ZlIHZhbHVlIGZyb20gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbi5cbiAqXG4gKiBXaWxsIHJlbW92ZSBtdWx0aXBsZSBpdGVtcyBpZiBwYXRoIGlzIGFuIGFycmF5LlxuICogSW4gdGhpcyBjYXNlIGFycmF5IGluZGV4ZXMgd2lsbCBiZSByZXRhaW5lZCB1bnRpbCBhbGxcbiAqIHJlbW92YWxzIGhhdmUgYmVlbiBwcm9jZXNzZWQuXG4gKlxuICogVXNlIGRvdC5kZWxldGUoKSB0byBhdXRvbWF0aWNhbGx5ICByZS1pbmRleCBhcnJheXMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8U3RyaW5nPn0gcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtCb29sZWFufSByZWluZGV4QXJyYXlcbiAqIEByZXR1cm4ge2FueX0gVGhlIHJlbW92ZWQgdmFsdWVcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAocGF0aCwgb2JqLCByZWluZGV4QXJyYXkpIHtcbiAgdmFyIGlcblxuICB0aGlzLmNsZWFudXAgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBpY2socGF0aFtpXSwgb2JqLCB0cnVlLCByZWluZGV4QXJyYXkpXG4gICAgfVxuICAgIGlmICghcmVpbmRleEFycmF5KSB7XG4gICAgICB0aGlzLl9jbGVhbnVwKG9iailcbiAgICB9XG4gICAgcmV0dXJuIG9ialxuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLnBpY2socGF0aCwgb2JqLCB0cnVlLCByZWluZGV4QXJyYXkpXG4gIH1cbn1cblxuRG90T2JqZWN0LnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJldFxuICB2YXIgaVxuICB2YXIga2V5c1xuICB2YXIgcm9vdFxuICBpZiAodGhpcy5jbGVhbnVwLmxlbmd0aCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNsZWFudXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleXMgPSB0aGlzLmNsZWFudXBbaV0uc3BsaXQoJy4nKVxuICAgICAgcm9vdCA9IGtleXMuc3BsaWNlKDAsIC0xKS5qb2luKCcuJylcbiAgICAgIHJldCA9IHJvb3QgPyB0aGlzLnBpY2socm9vdCwgb2JqKSA6IG9ialxuICAgICAgcmV0ID0gcmV0W2tleXNbMF1dLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkXG4gICAgICB9KVxuICAgICAgdGhpcy5zZXQodGhpcy5jbGVhbnVwW2ldLCByZXQsIG9iailcbiAgICB9XG4gICAgdGhpcy5jbGVhbnVwID0gW11cbiAgfVxufVxuXG4vKipcbiAqIEFsaWFzIG1ldGhvZCAgZm9yIGBkb3QucmVtb3ZlYFxuICpcbiAqIE5vdGU6IHRoaXMgaXMgbm90IGFuIGFsaWFzIGZvciBkb3QuZGVsZXRlKClcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxTdHJpbmc+fSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHJlaW5kZXhBcnJheVxuICogQHJldHVybiB7YW55fSBUaGUgcmVtb3ZlZCB2YWx1ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLmRlbCA9IERvdE9iamVjdC5wcm90b3R5cGUucmVtb3ZlXG5cbi8qKlxuICpcbiAqIE1vdmUgYSBwcm9wZXJ0eSBmcm9tIG9uZSBwbGFjZSB0byB0aGUgb3RoZXIuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBwYXRoIGRvZXMgbm90IGV4aXN0ICh1bmRlZmluZWQpXG4gKiB0aGUgdGFyZ2V0IHByb3BlcnR5IHdpbGwgbm90IGJlIHNldC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBtb2RzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1lcmdlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUubW92ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHRhcmdldCwgb2JqLCBtb2RzLCBtZXJnZSkge1xuICBpZiAodHlwZW9mIG1vZHMgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShtb2RzKSkge1xuICAgIHRoaXMuc2V0KHRhcmdldCwgX3Byb2Nlc3ModGhpcy5waWNrKHNvdXJjZSwgb2JqLCB0cnVlKSwgbW9kcyksIG9iaiwgbWVyZ2UpXG4gIH0gZWxzZSB7XG4gICAgbWVyZ2UgPSBtb2RzXG4gICAgdGhpcy5zZXQodGFyZ2V0LCB0aGlzLnBpY2soc291cmNlLCBvYmosIHRydWUpLCBvYmosIG1lcmdlKVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqXG4gKiBUcmFuc2ZlciBhIHByb3BlcnR5IGZyb20gb25lIG9iamVjdCB0byBhbm90aGVyIG9iamVjdC5cbiAqXG4gKiBJZiB0aGUgc291cmNlIHBhdGggZG9lcyBub3QgZXhpc3QgKHVuZGVmaW5lZClcbiAqIHRoZSBwcm9wZXJ0eSBvbiB0aGUgb3RoZXIgb2JqZWN0IHdpbGwgbm90IGJlIHNldC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMVxuICogQHBhcmFtIHtPYmplY3R9IG9iajJcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IG1vZHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS50cmFuc2ZlciA9IGZ1bmN0aW9uIChcbiAgc291cmNlLFxuICB0YXJnZXQsXG4gIG9iajEsXG4gIG9iajIsXG4gIG1vZHMsXG4gIG1lcmdlXG4pIHtcbiAgaWYgKHR5cGVvZiBtb2RzID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkobW9kcykpIHtcbiAgICB0aGlzLnNldChcbiAgICAgIHRhcmdldCxcbiAgICAgIF9wcm9jZXNzKHRoaXMucGljayhzb3VyY2UsIG9iajEsIHRydWUpLCBtb2RzKSxcbiAgICAgIG9iajIsXG4gICAgICBtZXJnZVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICBtZXJnZSA9IG1vZHNcbiAgICB0aGlzLnNldCh0YXJnZXQsIHRoaXMucGljayhzb3VyY2UsIG9iajEsIHRydWUpLCBvYmoyLCBtZXJnZSlcbiAgfVxuXG4gIHJldHVybiBvYmoyXG59XG5cbi8qKlxuICpcbiAqIENvcHkgYSBwcm9wZXJ0eSBmcm9tIG9uZSBvYmplY3QgdG8gYW5vdGhlciBvYmplY3QuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBwYXRoIGRvZXMgbm90IGV4aXN0ICh1bmRlZmluZWQpXG4gKiB0aGUgcHJvcGVydHkgb24gdGhlIG90aGVyIG9iamVjdCB3aWxsIG5vdCBiZSBzZXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZVxuICogQHBhcmFtIHtTdHJpbmd9IHRhcmdldFxuICogQHBhcmFtIHtPYmplY3R9IG9iajFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBtb2RzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1lcmdlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChzb3VyY2UsIHRhcmdldCwgb2JqMSwgb2JqMiwgbW9kcywgbWVyZ2UpIHtcbiAgaWYgKHR5cGVvZiBtb2RzID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkobW9kcykpIHtcbiAgICB0aGlzLnNldChcbiAgICAgIHRhcmdldCxcbiAgICAgIF9wcm9jZXNzKFxuICAgICAgICAvLyBjbG9uZSB3aGF0IGlzIHBpY2tlZFxuICAgICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucGljayhzb3VyY2UsIG9iajEsIGZhbHNlKSkpLFxuICAgICAgICBtb2RzXG4gICAgICApLFxuICAgICAgb2JqMixcbiAgICAgIG1lcmdlXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIG1lcmdlID0gbW9kc1xuICAgIHRoaXMuc2V0KHRhcmdldCwgdGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgZmFsc2UpLCBvYmoyLCBtZXJnZSlcbiAgfVxuXG4gIHJldHVybiBvYmoyXG59XG5cbi8qKlxuICpcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7YW55fSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGF0aCwgdmFsLCBvYmosIG1lcmdlKSB7XG4gIHZhciBpXG4gIHZhciBrXG4gIHZhciBrZXlzXG4gIHZhciBrZXlcblxuICAvLyBEbyBub3Qgb3BlcmF0ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gb2JqXG4gIH1cbiAga2V5cyA9IHBhcnNlUGF0aChwYXRoLCB0aGlzLnNlcGFyYXRvcilcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV1cbiAgICBpZiAoaSA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICBpZiAobWVyZ2UgJiYgaXNPYmplY3QodmFsKSAmJiBpc09iamVjdChvYmpba2V5XSkpIHtcbiAgICAgICAgZm9yIChrIGluIHZhbCkge1xuICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbCwgaykpIHtcbiAgICAgICAgICAgIG9ialtrZXldW2tdID0gdmFsW2tdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG1lcmdlICYmIEFycmF5LmlzQXJyYXkob2JqW2tleV0pICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbC5sZW5ndGg7IGorKykge1xuICAgICAgICAgIG9ialtrZXlzW2ldXS5wdXNoKHZhbFtqXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gZm9yY2UgdGhlIHZhbHVlIHRvIGJlIGFuIG9iamVjdFxuICAgICAgIWhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpIHx8XG4gICAgICAoIWlzT2JqZWN0KG9ialtrZXldKSAmJiAhQXJyYXkuaXNBcnJheShvYmpba2V5XSkpXG4gICAgKSB7XG4gICAgICAvLyBpbml0aWFsaXplIGFzIGFycmF5IGlmIG5leHQga2V5IGlzIG51bWVyaWNcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KGtleXNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IFtdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IHt9XG4gICAgICB9XG4gICAgfVxuICAgIG9iaiA9IG9ialtrZXldXG4gIH1cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqXG4gKiBUcmFuc2Zvcm0gYW4gb2JqZWN0XG4gKlxuICogVXNhZ2U6XG4gKlxuICogICB2YXIgb2JqID0ge1xuICogICAgIFwiaWRcIjogMSxcbiAqICAgIFwic29tZVwiOiB7XG4gKiAgICAgIFwidGhpbmdcIjogXCJlbHNlXCJcbiAqICAgIH1cbiAqICAgfVxuICpcbiAqICAgdmFyIHRyYW5zZm9ybSA9IHtcbiAqICAgICBcImlkXCI6IFwibnJcIixcbiAqICAgIFwic29tZS50aGluZ1wiOiBcIm5hbWVcIlxuICogICB9XG4gKlxuICogICB2YXIgdGd0ID0gZG90LnRyYW5zZm9ybSh0cmFuc2Zvcm0sIG9iailcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjaXBlIFRyYW5zZm9ybSByZWNpcGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBtb2RzIG1vZGlmaWVycyBmb3IgdGhlIHRhcmdldFxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChyZWNpcGUsIG9iaiwgdGd0KSB7XG4gIG9iaiA9IG9iaiB8fCB7fVxuICB0Z3QgPSB0Z3QgfHwge31cbiAgT2JqZWN0LmtleXMocmVjaXBlKS5mb3JFYWNoKFxuICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHRoaXMuc2V0KHJlY2lwZVtrZXldLCB0aGlzLnBpY2soa2V5LCBvYmopLCB0Z3QpXG4gICAgfS5iaW5kKHRoaXMpXG4gIClcbiAgcmV0dXJuIHRndFxufVxuXG4vKipcbiAqXG4gKiBDb252ZXJ0IG9iamVjdCB0byBkb3R0ZWQta2V5L3ZhbHVlIHBhaXJcbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIHZhciB0Z3QgPSBkb3QuZG90KG9iailcbiAqXG4gKiAgIG9yXG4gKlxuICogICB2YXIgdGd0ID0ge31cbiAqICAgZG90LmRvdChvYmosIHRndClcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSB0Z3QgdGFyZ2V0IG9iamVjdFxuICogQHBhcmFtIHtBcnJheX0gcGF0aCBwYXRoIGFycmF5IChpbnRlcm5hbClcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5kb3QgPSBmdW5jdGlvbiAob2JqLCB0Z3QsIHBhdGgpIHtcbiAgdGd0ID0gdGd0IHx8IHt9XG4gIHBhdGggPSBwYXRoIHx8IFtdXG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShvYmopXG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKFxuICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBpbmRleCA9IGlzQXJyYXkgJiYgdGhpcy51c2VCcmFja2V0cyA/ICdbJyArIGtleSArICddJyA6IGtleVxuICAgICAgaWYgKFxuICAgICAgICBpc0FycmF5T3JPYmplY3Qob2JqW2tleV0pICYmXG4gICAgICAgICgoaXNPYmplY3Qob2JqW2tleV0pICYmICFpc0VtcHR5T2JqZWN0KG9ialtrZXldKSkgfHxcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShvYmpba2V5XSkgJiYgIXRoaXMua2VlcEFycmF5ICYmIG9ialtrZXldLmxlbmd0aCAhPT0gMCkpXG4gICAgICApIHtcbiAgICAgICAgaWYgKGlzQXJyYXkgJiYgdGhpcy51c2VCcmFja2V0cykge1xuICAgICAgICAgIHZhciBwcmV2aW91c0tleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXSB8fCAnJ1xuICAgICAgICAgIHJldHVybiB0aGlzLmRvdChcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAgdGd0LFxuICAgICAgICAgICAgcGF0aC5zbGljZSgwLCAtMSkuY29uY2F0KHByZXZpb3VzS2V5ICsgaW5kZXgpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmRvdChvYmpba2V5XSwgdGd0LCBwYXRoLmNvbmNhdChpbmRleCkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0FycmF5ICYmIHRoaXMudXNlQnJhY2tldHMpIHtcbiAgICAgICAgICB0Z3RbcGF0aC5qb2luKHRoaXMuc2VwYXJhdG9yKS5jb25jYXQoJ1snICsga2V5ICsgJ10nKV0gPSBvYmpba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRndFtwYXRoLmNvbmNhdChpbmRleCkuam9pbih0aGlzLnNlcGFyYXRvcildID0gb2JqW2tleV1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKVxuICApXG4gIHJldHVybiB0Z3Rcbn1cblxuRG90T2JqZWN0LnBpY2sgPSB3cmFwKCdwaWNrJylcbkRvdE9iamVjdC5tb3ZlID0gd3JhcCgnbW92ZScpXG5Eb3RPYmplY3QudHJhbnNmZXIgPSB3cmFwKCd0cmFuc2ZlcicpXG5Eb3RPYmplY3QudHJhbnNmb3JtID0gd3JhcCgndHJhbnNmb3JtJylcbkRvdE9iamVjdC5jb3B5ID0gd3JhcCgnY29weScpXG5Eb3RPYmplY3Qub2JqZWN0ID0gd3JhcCgnb2JqZWN0JylcbkRvdE9iamVjdC5zdHIgPSB3cmFwKCdzdHInKVxuRG90T2JqZWN0LnNldCA9IHdyYXAoJ3NldCcpXG5Eb3RPYmplY3QuZGVsZXRlID0gd3JhcCgnZGVsZXRlJylcbkRvdE9iamVjdC5kZWwgPSBEb3RPYmplY3QucmVtb3ZlID0gd3JhcCgncmVtb3ZlJylcbkRvdE9iamVjdC5kb3QgPSB3cmFwKCdkb3QnKTtcblsnb3ZlcnJpZGUnLCAnb3ZlcndyaXRlJ10uZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRG90T2JqZWN0LCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZG90RGVmYXVsdC5vdmVycmlkZVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBkb3REZWZhdWx0Lm92ZXJyaWRlID0gISF2YWxcbiAgICB9XG4gIH0pXG59KTtcblsndXNlQXJyYXknLCAna2VlcEFycmF5JywgJ3VzZUJyYWNrZXRzJ10uZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRG90T2JqZWN0LCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZG90RGVmYXVsdFtwcm9wXVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBkb3REZWZhdWx0W3Byb3BdID0gdmFsXG4gICAgfVxuICB9KVxufSlcblxuRG90T2JqZWN0Ll9wcm9jZXNzID0gX3Byb2Nlc3NcblxubW9kdWxlLmV4cG9ydHMgPSBEb3RPYmplY3RcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5GZXRjaFJQQyA9IGV4cG9ydHMud3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IgPSBleHBvcnRzLk5vZGVIdHRwUlBDID0gdm9pZCAwO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cHNcIikpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG4vKipcbiAqIGEgbm9kZSBIVFRQIFJQQyBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5jb25zdCBOb2RlSHR0cFJQQyA9IChvcHRpb25zKSA9PiAoe1xuICAgIHJlcXVlc3Qoc2VydmljZSwgbWV0aG9kLCBjb250ZW50VHlwZSwgZGF0YSkge1xuICAgICAgICBsZXQgY2xpZW50O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdGVkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUNodW5rcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdERhdGEgPSBjb250ZW50VHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiXG4gICAgICAgICAgICAgICAgPyBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgdXJsXzEuVVJMKG9wdGlvbnMuYmFzZVVybCk7XG4gICAgICAgICAgICBjb25zdCBpc0h0dHBzID0gdXJsLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xuICAgICAgICAgICAgaWYgKGlzSHR0cHMpIHtcbiAgICAgICAgICAgICAgICBjbGllbnQgPSBodHRwcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsaWVudCA9IGh0dHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSB1cmwucGF0aG5hbWUgIT09IFwiL1wiID8gdXJsLnBhdGhuYW1lIDogXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGNsaWVudFxuICAgICAgICAgICAgICAgIC5yZXF1ZXN0KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKG9wdGlvbnMgPyBvcHRpb25zIDoge30pKSwgeyBtZXRob2Q6IFwiUE9TVFwiLCBwcm90b2NvbDogdXJsLnByb3RvY29sLCBob3N0OiB1cmwuaG9zdG5hbWUsIHBvcnQ6IHVybC5wb3J0ID8gdXJsLnBvcnQgOiBpc0h0dHBzID8gNDQzIDogODAsIHBhdGg6IGAke3ByZWZpeH0vJHtzZXJ2aWNlfS8ke21ldGhvZH1gLCBoZWFkZXJzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIChvcHRpb25zLmhlYWRlcnMgPyBvcHRpb25zLmhlYWRlcnMgOiB7fSkpLCB7IFwiQ29udGVudC1UeXBlXCI6IGNvbnRlbnRUeXBlLCBcIkNvbnRlbnQtTGVuZ3RoXCI6IGNvbnRlbnRUeXBlID09PSBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gQnVmZmVyLmJ5dGVMZW5ndGgocmVxdWVzdERhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5mcm9tKHJlcXVlc3REYXRhKS5ieXRlTGVuZ3RoIH0pIH0pLCAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHJlc3BvbnNlQ2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICAgICAgICAgICAgICByZXMub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChyZXNwb25zZUNodW5rcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdGVkKHdyYXBFcnJvclJlc3BvbnNlVG9Ud2lycEVycm9yKGRhdGEudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlID09PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXMub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdGVkKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3RlZChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXEuZW5kKHJlcXVlc3REYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuZXhwb3J0cy5Ob2RlSHR0cFJQQyA9IE5vZGVIdHRwUlBDO1xuZnVuY3Rpb24gd3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IoZXJyb3JSZXNwb25zZSkge1xuICAgIHJldHVybiBlcnJvcnNfMS5Ud2lycEVycm9yLmZyb21PYmplY3QoSlNPTi5wYXJzZShlcnJvclJlc3BvbnNlKSk7XG59XG5leHBvcnRzLndyYXBFcnJvclJlc3BvbnNlVG9Ud2lycEVycm9yID0gd3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3I7XG4vKipcbiAqIGEgYnJvd3NlciBmZXRjaCBSUEMgaW1wbGVtZW50YXRpb25cbiAqL1xuY29uc3QgRmV0Y2hSUEMgPSAob3B0aW9ucykgPT4gKHtcbiAgICByZXF1ZXN0KHNlcnZpY2UsIG1ldGhvZCwgY29udGVudFR5cGUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgICAgICAgICAgaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIiwgY29udGVudFR5cGUpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBmZXRjaChgJHtvcHRpb25zLmJhc2VVcmx9LyR7c2VydmljZX0vJHttZXRob2R9YCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBtZXRob2Q6IFwiUE9TVFwiLCBoZWFkZXJzLCBib2R5OiBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGRhdGEgOiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh5aWVsZCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yc18xLlR3aXJwRXJyb3IuZnJvbU9iamVjdCh5aWVsZCByZXNwb25zZS5qc29uKCkpO1xuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG5leHBvcnRzLkZldGNoUlBDID0gRmV0Y2hSUEM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2F0ZXdheSA9IGV4cG9ydHMuUGF0dGVybiA9IHZvaWQgMDtcbmNvbnN0IHF1ZXJ5c3RyaW5nXzEgPSByZXF1aXJlKFwicXVlcnlzdHJpbmdcIik7XG5jb25zdCBkb3RPYmplY3QgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImRvdC1vYmplY3RcIikpO1xuY29uc3QgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4vcmVxdWVzdFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuY29uc3QgaHR0cF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuL2h0dHAuY2xpZW50XCIpO1xuY29uc3Qgc2VydmVyXzEgPSByZXF1aXJlKFwiLi9zZXJ2ZXJcIik7XG52YXIgUGF0dGVybjtcbihmdW5jdGlvbiAoUGF0dGVybikge1xuICAgIFBhdHRlcm5bXCJQT1NUXCJdID0gXCJwb3N0XCI7XG4gICAgUGF0dGVybltcIkdFVFwiXSA9IFwiZ2V0XCI7XG4gICAgUGF0dGVybltcIlBBVENIXCJdID0gXCJwYXRjaFwiO1xuICAgIFBhdHRlcm5bXCJQVVRcIl0gPSBcInB1dFwiO1xuICAgIFBhdHRlcm5bXCJERUxFVEVcIl0gPSBcImRlbGV0ZVwiO1xufSkoUGF0dGVybiA9IGV4cG9ydHMuUGF0dGVybiB8fCAoZXhwb3J0cy5QYXR0ZXJuID0ge30pKTtcbi8qKlxuICogVGhlIEdhdGV3YXkgcHJveGllcyBodHRwIHJlcXVlc3RzIHRvIFR3aXJwIENvbXBsaWFudFxuICogaGFuZGxlcnNcbiAqL1xuY2xhc3MgR2F0ZXdheSB7XG4gICAgY29uc3RydWN0b3Iocm91dGVzKSB7XG4gICAgICAgIHRoaXMucm91dGVzID0gcm91dGVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgcmV3cml0ZSB0aGUgY3VycmVudCByZXF1ZXN0XG4gICAgICogdG8gYSBUd2lycCBjb21wbGlhbnQgcmVxdWVzdFxuICAgICAqL1xuICAgIHR3aXJwUmV3cml0ZShwcmVmaXggPSBcIi90d2lycFwiKSB7XG4gICAgICAgIHJldHVybiAocmVxLCByZXNwLCBuZXh0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJld3JpdGUocmVxLCByZXNwLCBwcmVmaXgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gbmV4dCgpKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgZXJyb3JzXzEuVHdpcnBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlICE9PSBlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5Ob3RGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyXzEud3JpdGVFcnJvcihyZXNwLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXdyaXRlIGFuIGluY29taW5nIHJlcXVlc3QgdG8gYSBUd2lycCBjb21wbGlhbnQgcmVxdWVzdFxuICAgICAqIEBwYXJhbSByZXFcbiAgICAgKiBAcGFyYW0gcmVzcFxuICAgICAqIEBwYXJhbSBwcmVmaXhcbiAgICAgKi9cbiAgICByZXdyaXRlKHJlcSwgcmVzcCwgcHJlZml4ID0gXCIvdHdpcnBcIikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgW21hdGNoLCByb3V0ZV0gPSB0aGlzLm1hdGNoUm91dGUocmVxKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB5aWVsZCB0aGlzLnByZXBhcmVUd2lycEJvZHkocmVxLCBtYXRjaCwgcm91dGUpO1xuICAgICAgICAgICAgY29uc3QgdHdpcnBVcmwgPSBgJHtwcmVmaXh9LyR7cm91dGUucGFja2FnZU5hbWV9LiR7cm91dGUuc2VydmljZU5hbWV9LyR7cm91dGUubWV0aG9kTmFtZX1gO1xuICAgICAgICAgICAgcmVxLnVybCA9IHR3aXJwVXJsO1xuICAgICAgICAgICAgcmVxLm9yaWdpbmFsVXJsID0gdHdpcnBVcmw7XG4gICAgICAgICAgICByZXEubWV0aG9kID0gXCJQT1NUXCI7XG4gICAgICAgICAgICByZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgICAgICAgcmVxLnJhd0JvZHkgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShib2R5KSk7XG4gICAgICAgICAgICBpZiAocm91dGUucmVzcG9uc2VCb2R5S2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kRm4gPSByZXNwLmVuZC5iaW5kKHJlc3ApO1xuICAgICAgICAgICAgICAgIHJlc3AuZW5kID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRm4oYHsgXCIke3JvdXRlLnJlc3BvbnNlQm9keUtleX1cIjogJHtjaHVua30gfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRm4oY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHJldmVyc2UgcHJveHkgaGFuZGxlciB0b1xuICAgICAqIHByb3h5IGh0dHAgcmVxdWVzdHMgdG8gVHdpcnAgQ29tcGxpYW50IGhhbmRsZXJzXG4gICAgICogQHBhcmFtIGh0dHBDbGllbnRPcHRpb25cbiAgICAgKi9cbiAgICByZXZlcnNlUHJveHkoaHR0cENsaWVudE9wdGlvbikge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBodHRwX2NsaWVudF8xLk5vZGVIdHRwUlBDKGh0dHBDbGllbnRPcHRpb24pO1xuICAgICAgICByZXR1cm4gKHJlcSwgcmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFttYXRjaCwgcm91dGVdID0gdGhpcy5tYXRjaFJvdXRlKHJlcSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHlpZWxkIHRoaXMucHJlcGFyZVR3aXJwQm9keShyZXEsIG1hdGNoLCByb3V0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBjbGllbnQucmVxdWVzdChgJHtyb3V0ZS5wYWNrYWdlTmFtZX0uJHtyb3V0ZS5zZXJ2aWNlTmFtZX1gLCByb3V0ZS5tZXRob2ROYW1lLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgYm9keSk7XG4gICAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSAyMDA7XG4gICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgbGV0IGpzb25SZXNwb25zZTtcbiAgICAgICAgICAgICAgICBpZiAocm91dGUucmVzcG9uc2VCb2R5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHsgW3JvdXRlLnJlc3BvbnNlQm9keUtleV06IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAganNvblJlc3BvbnNlID0gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMuZW5kKGpzb25SZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHNlcnZlcl8xLndyaXRlRXJyb3IocmVzLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIHR3aXJwIGJvZHkgcmVxdWVzdHMgdXNpbmcgaHR0cC5nb29nbGUuYW5ub3Rpb25zXG4gICAgICogY29tcGxpYW50IHNwZWNcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXFcbiAgICAgKiBAcGFyYW0gbWF0Y2hcbiAgICAgKiBAcGFyYW0gcm91dGVcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJlcGFyZVR3aXJwQm9keShyZXEsIG1hdGNoLCByb3V0ZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgX2EgPSBtYXRjaC5wYXJhbXMsIHsgcXVlcnlfc3RyaW5nIH0gPSBfYSwgcGFyYW1zID0gX19yZXN0KF9hLCBbXCJxdWVyeV9zdHJpbmdcIl0pO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGlmIChxdWVyeV9zdHJpbmcgJiYgcm91dGUuYm9keUtleSAhPT0gXCIqXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyhxdWVyeV9zdHJpbmcpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3RCb2R5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBxdWVyeVBhcmFtcyksIHJlcXVlc3RCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBib2R5ID0ge307XG4gICAgICAgICAgICBpZiAocm91dGUuYm9keUtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCByZXF1ZXN0XzEuZ2V0UmVxdWVzdERhdGEocmVxKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uQm9keSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpIHx8IFwie31cIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZS5ib2R5S2V5ID09PSBcIipcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGpzb25Cb2R5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVtyb3V0ZS5ib2R5S2V5XSA9IGpzb25Cb2R5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIGpzb24gcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuVHdpcnBFcnJvcihlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJvZHkpLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXRjaGVzIGEgcm91dGVcbiAgICAgKiBAcGFyYW0gcmVxXG4gICAgICovXG4gICAgbWF0Y2hSb3V0ZShyZXEpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBodHRwTWV0aG9kID0gKF9hID0gcmVxLm1ldGhvZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghaHR0cE1ldGhvZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkJhZFJvdXRlRXJyb3IoYG1ldGhvZCBub3QgYWxsb3dlZGAsIHJlcS5tZXRob2QgfHwgXCJcIiwgcmVxLnVybCB8fCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3V0ZXMgPSB0aGlzLnJvdXRlc1todHRwTWV0aG9kXTtcbiAgICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gcm91dGUubWF0Y2hlcihyZXEudXJsIHx8IFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbWF0Y2gsIHJvdXRlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuTm90Rm91bmRFcnJvcihgdXJsICR7cmVxLnVybH0gbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlIHF1ZXJ5IHN0cmluZ1xuICAgICAqIEBwYXJhbSBxdWVyeVN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlUXVlcnlTdHJpbmcocXVlcnlTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBxdWVyeXN0cmluZ18xLnBhcnNlKHF1ZXJ5U3RyaW5nLnJlcGxhY2UoXCI/XCIsIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIGRvdE9iamVjdC5vYmplY3QocXVlcnlQYXJhbXMpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2F0ZXdheSA9IEdhdGV3YXk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlR3aXJwQ29udGVudFR5cGUgPSB2b2lkIDA7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29udGV4dFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2VydmVyXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcmNlcHRvcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2hvb2tzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lcnJvcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2dhdGV3YXlcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHAuY2xpZW50XCIpLCBleHBvcnRzKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVHdpcnBDb250ZW50VHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdF8xLlR3aXJwQ29udGVudFR5cGU7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlciA9IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kTGlzdCA9IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRQcm90b2J1ZiA9IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50SlNPTiA9IHZvaWQgMDtcbmNvbnN0IHR3aXJwX3RzXzEgPSByZXF1aXJlKFwidHdpcnAtdHNcIik7XG5jb25zdCBhcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vYXJ0aWZhY3RcIik7XG5jbGFzcyBBcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OIHtcbiAgICBjb25zdHJ1Y3RvcihycGMpIHtcbiAgICAgICAgdGhpcy5ycGMgPSBycGM7XG4gICAgICAgIHRoaXMuQ3JlYXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5GaW5hbGl6ZUFydGlmYWN0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuTGlzdEFydGlmYWN0cy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkdldFNpZ25lZEFydGlmYWN0VVJMLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuRGVsZXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICB9XG4gICAgQ3JlYXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QudG9Kc29uKHJlcXVlc3QsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJDcmVhdGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIEZpbmFsaXplQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkZpbmFsaXplQXJ0aWZhY3RcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIExpc3RBcnRpZmFjdHMocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkxpc3RBcnRpZmFjdHNcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7IGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUgfSkpO1xuICAgIH1cbiAgICBHZXRTaWduZWRBcnRpZmFjdFVSTChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIsIFwiYXBwbGljYXRpb24vanNvblwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgRGVsZXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlcXVlc3QudG9Kc29uKHJlcXVlc3QsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJEZWxldGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxufVxuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OID0gQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50SlNPTjtcbmNsYXNzIEFydGlmYWN0U2VydmljZUNsaWVudFByb3RvYnVmIHtcbiAgICBjb25zdHJ1Y3RvcihycGMpIHtcbiAgICAgICAgdGhpcy5ycGMgPSBycGM7XG4gICAgICAgIHRoaXMuQ3JlYXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5GaW5hbGl6ZUFydGlmYWN0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuTGlzdEFydGlmYWN0cy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkdldFNpZ25lZEFydGlmYWN0VVJMLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuRGVsZXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICB9XG4gICAgQ3JlYXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiQ3JlYXRlQXJ0aWZhY3RcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbiAgICBGaW5hbGl6ZUFydGlmYWN0KHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiRmluYWxpemVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS5mcm9tQmluYXJ5KGRhdGEpKTtcbiAgICB9XG4gICAgTGlzdEFydGlmYWN0cyhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LnRvQmluYXJ5KHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkxpc3RBcnRpZmFjdHNcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UuZnJvbUJpbmFyeShkYXRhKSk7XG4gICAgfVxuICAgIEdldFNpZ25lZEFydGlmYWN0VVJMKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0LnRvQmluYXJ5KHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIsIFwiYXBwbGljYXRpb24vcHJvdG9idWZcIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZS5mcm9tQmluYXJ5KGRhdGEpKTtcbiAgICB9XG4gICAgRGVsZXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiRGVsZXRlQXJ0aWZhY3RcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50UHJvdG9idWYgPSBBcnRpZmFjdFNlcnZpY2VDbGllbnRQcm90b2J1ZjtcbnZhciBBcnRpZmFjdFNlcnZpY2VNZXRob2Q7XG4oZnVuY3Rpb24gKEFydGlmYWN0U2VydmljZU1ldGhvZCkge1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZFtcIkNyZWF0ZUFydGlmYWN0XCJdID0gXCJDcmVhdGVBcnRpZmFjdFwiO1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZFtcIkZpbmFsaXplQXJ0aWZhY3RcIl0gPSBcIkZpbmFsaXplQXJ0aWZhY3RcIjtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2RbXCJMaXN0QXJ0aWZhY3RzXCJdID0gXCJMaXN0QXJ0aWZhY3RzXCI7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIl0gPSBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCI7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiRGVsZXRlQXJ0aWZhY3RcIl0gPSBcIkRlbGV0ZUFydGlmYWN0XCI7XG59KShBcnRpZmFjdFNlcnZpY2VNZXRob2QgfHwgKGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kID0gQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kID0ge30pKTtcbmV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kTGlzdCA9IFtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuQ3JlYXRlQXJ0aWZhY3QsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkZpbmFsaXplQXJ0aWZhY3QsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkxpc3RBcnRpZmFjdHMsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkdldFNpZ25lZEFydGlmYWN0VVJMLFxuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZC5EZWxldGVBcnRpZmFjdCxcbl07XG5mdW5jdGlvbiBjcmVhdGVBcnRpZmFjdFNlcnZpY2VTZXJ2ZXIoc2VydmljZSkge1xuICAgIHJldHVybiBuZXcgdHdpcnBfdHNfMS5Ud2lycFNlcnZlcih7XG4gICAgICAgIHNlcnZpY2UsXG4gICAgICAgIHBhY2thZ2VOYW1lOiBcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxXCIsXG4gICAgICAgIHNlcnZpY2VOYW1lOiBcIkFydGlmYWN0U2VydmljZVwiLFxuICAgICAgICBtZXRob2RMaXN0OiBleHBvcnRzLkFydGlmYWN0U2VydmljZU1ldGhvZExpc3QsXG4gICAgICAgIG1hdGNoUm91dGU6IG1hdGNoQXJ0aWZhY3RTZXJ2aWNlUm91dGUsXG4gICAgfSk7XG59XG5leHBvcnRzLmNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlciA9IGNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlcjtcbmZ1bmN0aW9uIG1hdGNoQXJ0aWZhY3RTZXJ2aWNlUm91dGUobWV0aG9kLCBldmVudHMpIHtcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICBjYXNlIFwiQ3JlYXRlQXJ0aWZhY3RcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJDcmVhdGVBcnRpZmFjdFwiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkZpbmFsaXplQXJ0aWZhY3RcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJGaW5hbGl6ZUFydGlmYWN0XCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJMaXN0QXJ0aWZhY3RzXCI6XG4gICAgICAgICAgICByZXR1cm4gKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgY3R4ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjdHgpLCB7IG1ldGhvZE5hbWU6IFwiTGlzdEFydGlmYWN0c1wiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkRlbGV0ZUFydGlmYWN0XCI6XG4gICAgICAgICAgICByZXR1cm4gKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgY3R4ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjdHgpLCB7IG1ldGhvZE5hbWU6IFwiRGVsZXRlQXJ0aWZhY3RcIiB9KTtcbiAgICAgICAgICAgICAgICB5aWVsZCBldmVudHMub25NYXRjaChjdHgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBldmVudHMub25Ob3RGb3VuZCgpO1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYG5vIGhhbmRsZXIgZm91bmRgO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY6XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBcInVuZXhwZWN0ZWQgQ29udGVudC1UeXBlXCI7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICBzd2l0Y2ggKGN0eC5jb250ZW50VHlwZSkge1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUZpbmFsaXplQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY6XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzUmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c0pTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzUHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ1bmV4cGVjdGVkIENvbnRlbnQtVHlwZVwiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY6XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBcInVuZXhwZWN0ZWQgQ29udGVudC1UeXBlXCI7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VDcmVhdGVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpIHx8IFwie31cIik7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QuZnJvbUpzb24oYm9keSwge1xuICAgICAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIGpzb24gcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5DcmVhdGVBcnRpZmFjdChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkNyZWF0ZUFydGlmYWN0KGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFydGlmYWN0XzEuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZS50b0pzb24ocmVzcG9uc2UsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkZpbmFsaXplQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c0pTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpIHx8IFwie31cIik7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkxpc3RBcnRpZmFjdHMoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5MaXN0QXJ0aWZhY3RzKGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUdldFNpZ25lZEFydGlmYWN0VVJMSlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkdldFNpZ25lZEFydGlmYWN0VVJMKGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkRlbGV0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0LmZyb21CaW5hcnkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBwcm90b2J1ZiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkNyZWF0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuQ3JlYXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLnRvQmluYXJ5KHJlc3BvbnNlKSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkZpbmFsaXplQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVxdWVzdC5mcm9tQmluYXJ5KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUgcHJvdG9idWYgcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5MaXN0QXJ0aWZhY3RzKGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuTGlzdEFydGlmYWN0cyhjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXNwb25zZS50b0JpbmFyeShyZXNwb25zZSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5HZXRTaWduZWRBcnRpZmFjdFVSTChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0LmZyb21CaW5hcnkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBwcm90b2J1ZiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkRlbGV0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLnRvQmluYXJ5KHJlc3BvbnNlKSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnRpZmFjdC50d2lycC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVzdWx0cy9hcGkvdjEvYXJ0aWZhY3QudHdpcnBcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFeHBpcmF0aW9uID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5mdW5jdGlvbiBnZXRFeHBpcmF0aW9uKHJldGVudGlvbkRheXMpIHtcbiAgICBpZiAoIXJldGVudGlvbkRheXMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbWF4UmV0ZW50aW9uRGF5cyA9IGdldFJldGVudGlvbkRheXMoKTtcbiAgICBpZiAobWF4UmV0ZW50aW9uRGF5cyAmJiBtYXhSZXRlbnRpb25EYXlzIDwgcmV0ZW50aW9uRGF5cykge1xuICAgICAgICBjb3JlLndhcm5pbmcoYFJldGVudGlvbiBkYXlzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCByZXRlbnRpb24gc2V0IHdpdGhpbiB0aGUgcmVwb3NpdG9yeS4gVXNpbmcgJHttYXhSZXRlbnRpb25EYXlzfSBpbnN0ZWFkLmApO1xuICAgICAgICByZXRlbnRpb25EYXlzID0gbWF4UmV0ZW50aW9uRGF5cztcbiAgICB9XG4gICAgY29uc3QgZXhwaXJhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGV4cGlyYXRpb25EYXRlLnNldERhdGUoZXhwaXJhdGlvbkRhdGUuZ2V0RGF0ZSgpICsgcmV0ZW50aW9uRGF5cyk7XG4gICAgcmV0dXJuIGdlbmVyYXRlZF8xLlRpbWVzdGFtcC5mcm9tRGF0ZShleHBpcmF0aW9uRGF0ZSk7XG59XG5leHBvcnRzLmdldEV4cGlyYXRpb24gPSBnZXRFeHBpcmF0aW9uO1xuZnVuY3Rpb24gZ2V0UmV0ZW50aW9uRGF5cygpIHtcbiAgICBjb25zdCByZXRlbnRpb25EYXlzID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9SRVRFTlRJT05fREFZUyddO1xuICAgIGlmICghcmV0ZW50aW9uRGF5cykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBkYXlzID0gcGFyc2VJbnQocmV0ZW50aW9uRGF5cyk7XG4gICAgaWYgKGlzTmFOKGRheXMpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBkYXlzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV0ZW50aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlRmlsZVBhdGggPSBleHBvcnRzLnZhbGlkYXRlQXJ0aWZhY3ROYW1lID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG4vKipcbiAqIEludmFsaWQgY2hhcmFjdGVycyB0aGF0IGNhbm5vdCBiZSBpbiB0aGUgYXJ0aWZhY3QgbmFtZSBvciBhbiB1cGxvYWRlZCBmaWxlLiBXaWxsIGJlIHJlamVjdGVkXG4gKiBmcm9tIHRoZSBzZXJ2ZXIgaWYgYXR0ZW1wdGVkIHRvIGJlIHNlbnQgb3Zlci4gVGhlc2UgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgZHVlIHRvIGxpbWl0YXRpb25zIHdpdGggY2VydGFpblxuICogZmlsZSBzeXN0ZW1zIHN1Y2ggYXMgTlRGUy4gVG8gbWFpbnRhaW4gcGxhdGZvcm0tYWdub3N0aWMgYmVoYXZpb3IsIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYW5cbiAqIGluZGl2aWR1YWwgZmlsZXN5c3RlbS9wbGF0Zm9ybSB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gYWxsIGZpbGVTeXN0ZW1zL3BsYXRmb3Jtc1xuICpcbiAqIEZpbGVQYXRocyBjYW4gaW5jbHVkZSBjaGFyYWN0ZXJzIHN1Y2ggYXMgXFwgYW5kIC8gd2hpY2ggYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdGhlIGFydGlmYWN0IG5hbWUgYWxvbmVcbiAqL1xuY29uc3QgaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzID0gbmV3IE1hcChbXG4gICAgWydcIicsICcgRG91YmxlIHF1b3RlIFwiJ10sXG4gICAgWyc6JywgJyBDb2xvbiA6J10sXG4gICAgWyc8JywgJyBMZXNzIHRoYW4gPCddLFxuICAgIFsnPicsICcgR3JlYXRlciB0aGFuID4nXSxcbiAgICBbJ3wnLCAnIFZlcnRpY2FsIGJhciB8J10sXG4gICAgWycqJywgJyBBc3RlcmlzayAqJ10sXG4gICAgWyc/JywgJyBRdWVzdGlvbiBtYXJrID8nXSxcbiAgICBbJ1xccicsICcgQ2FycmlhZ2UgcmV0dXJuIFxcXFxyJ10sXG4gICAgWydcXG4nLCAnIExpbmUgZmVlZCBcXFxcbiddXG5dKTtcbmNvbnN0IGludmFsaWRBcnRpZmFjdE5hbWVDaGFyYWN0ZXJzID0gbmV3IE1hcChbXG4gICAgLi4uaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzLFxuICAgIFsnXFxcXCcsICcgQmFja3NsYXNoIFxcXFwnXSxcbiAgICBbJy8nLCAnIEZvcndhcmQgc2xhc2ggLyddXG5dKTtcbi8qKlxuICogVmFsaWRhdGVzIHRoZSBuYW1lIG9mIHRoZSBhcnRpZmFjdCB0byBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGlsbGVnYWwgY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFydGlmYWN0TmFtZShuYW1lKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZWQgYXJ0aWZhY3QgbmFtZSBpbnB1dCBkdXJpbmcgdmFsaWRhdGlvbiBpcyBlbXB0eWApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtpbnZhbGlkQ2hhcmFjdGVyS2V5LCBlcnJvck1lc3NhZ2VGb3JDaGFyYWN0ZXJdIG9mIGludmFsaWRBcnRpZmFjdE5hbWVDaGFyYWN0ZXJzKSB7XG4gICAgICAgIGlmIChuYW1lLmluY2x1ZGVzKGludmFsaWRDaGFyYWN0ZXJLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBhcnRpZmFjdCBuYW1lIGlzIG5vdCB2YWxpZDogJHtuYW1lfS4gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXI6ICR7ZXJyb3JNZXNzYWdlRm9yQ2hhcmFjdGVyfVxuICAgICAgICAgIFxuSW52YWxpZCBjaGFyYWN0ZXJzIGluY2x1ZGU6ICR7QXJyYXkuZnJvbShpbnZhbGlkQXJ0aWZhY3ROYW1lQ2hhcmFjdGVycy52YWx1ZXMoKSkudG9TdHJpbmcoKX1cbiAgICAgICAgICBcblRoZXNlIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBhcnRpZmFjdCBuYW1lIGR1ZSB0byBsaW1pdGF0aW9ucyB3aXRoIGNlcnRhaW4gZmlsZSBzeXN0ZW1zIHN1Y2ggYXMgTlRGUy4gVG8gbWFpbnRhaW4gZmlsZSBzeXN0ZW0gYWdub3N0aWMgYmVoYXZpb3IsIHRoZXNlIGNoYXJhY3RlcnMgYXJlIGludGVudGlvbmFsbHkgbm90IGFsbG93ZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aCBkb3dubG9hZHMgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtcy5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAoMCwgY29yZV8xLmluZm8pKGBBcnRpZmFjdCBuYW1lIGlzIHZhbGlkIWApO1xufVxuZXhwb3J0cy52YWxpZGF0ZUFydGlmYWN0TmFtZSA9IHZhbGlkYXRlQXJ0aWZhY3ROYW1lO1xuLyoqXG4gKiBWYWxpZGF0ZXMgZmlsZSBwYXRocyB0byBjaGVjayBmb3IgYW55IGlsbGVnYWwgY2hhcmFjdGVycyB0aGF0IGNhbiBjYXVzZSBwcm9ibGVtcyBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRmlsZVBhdGgocGF0aCkge1xuICAgIGlmICghcGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVkIGZpbGUgcGF0aCBpbnB1dCBkdXJpbmcgdmFsaWRhdGlvbiBpcyBlbXB0eWApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtpbnZhbGlkQ2hhcmFjdGVyS2V5LCBlcnJvck1lc3NhZ2VGb3JDaGFyYWN0ZXJdIG9mIGludmFsaWRBcnRpZmFjdEZpbGVQYXRoQ2hhcmFjdGVycykge1xuICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhpbnZhbGlkQ2hhcmFjdGVyS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGF0aCBmb3Igb25lIG9mIHRoZSBmaWxlcyBpbiBhcnRpZmFjdCBpcyBub3QgdmFsaWQ6ICR7cGF0aH0uIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyOiAke2Vycm9yTWVzc2FnZUZvckNoYXJhY3Rlcn1cbiAgICAgICAgICBcbkludmFsaWQgY2hhcmFjdGVycyBpbmNsdWRlOiAke0FycmF5LmZyb20oaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzLnZhbHVlcygpKS50b1N0cmluZygpfVxuICAgICAgICAgIFxuVGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCBpbiBmaWxlcyB0aGF0IGFyZSB1cGxvYWRlZCBkdWUgdG8gbGltaXRhdGlvbnMgd2l0aCBjZXJ0YWluIGZpbGUgc3lzdGVtcyBzdWNoIGFzIE5URlMuIFRvIG1haW50YWluIGZpbGUgc3lzdGVtIGFnbm9zdGljIGJlaGF2aW9yLCB0aGVzZSBjaGFyYWN0ZXJzIGFyZSBpbnRlbnRpb25hbGx5IG5vdCBhbGxvd2VkIHRvIHByZXZlbnQgcG90ZW50aWFsIHByb2JsZW1zIHdpdGggZG93bmxvYWRzIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMuXG4gICAgICAgICAgYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlRmlsZVBhdGggPSB2YWxpZGF0ZUZpbGVQYXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFVzZXJBZ2VudFN0cmluZyA9IHZvaWQgMDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBwYWNrYWdlSnNvbiA9IHJlcXVpcmUoJy4uLy4uLy4uL3BhY2thZ2UuanNvbicpO1xuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGlzIFVzZXIgQWdlbnQgU3RyaW5nIGlzIHVzZWQgaW4gYWxsIEhUVFAgY2FsbHMgc28gdGhhdCB3ZSBjYW4gbW9uaXRvciB0ZWxlbWV0cnkgYmV0d2VlbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhpcyBwYWNrYWdlXG4gKi9cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudFN0cmluZygpIHtcbiAgICByZXR1cm4gYEBhY3Rpb25zL2FydGlmYWN0LSR7cGFja2FnZUpzb24udmVyc2lvbn1gO1xufVxuZXhwb3J0cy5nZXRVc2VyQWdlbnRTdHJpbmcgPSBnZXRVc2VyQWdlbnRTdHJpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VyLWFnZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVzYWdlRXJyb3IgPSBleHBvcnRzLk5ldHdvcmtFcnJvciA9IGV4cG9ydHMuR0hFU05vdFN1cHBvcnRlZEVycm9yID0gZXhwb3J0cy5BcnRpZmFjdE5vdEZvdW5kRXJyb3IgPSBleHBvcnRzLkludmFsaWRSZXNwb25zZUVycm9yID0gZXhwb3J0cy5GaWxlc05vdEZvdW5kRXJyb3IgPSB2b2lkIDA7XG5jbGFzcyBGaWxlc05vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZmlsZXMgPSBbXSkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9ICdObyBmaWxlcyB3ZXJlIGZvdW5kIHRvIHVwbG9hZCc7XG4gICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtZXNzYWdlICs9IGA6ICR7ZmlsZXMuam9pbignLCAnKX1gO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmZpbGVzID0gZmlsZXM7XG4gICAgICAgIHRoaXMubmFtZSA9ICdGaWxlc05vdEZvdW5kRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuRmlsZXNOb3RGb3VuZEVycm9yID0gRmlsZXNOb3RGb3VuZEVycm9yO1xuY2xhc3MgSW52YWxpZFJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0ludmFsaWRSZXNwb25zZUVycm9yJztcbiAgICB9XG59XG5leHBvcnRzLkludmFsaWRSZXNwb25zZUVycm9yID0gSW52YWxpZFJlc3BvbnNlRXJyb3I7XG5jbGFzcyBBcnRpZmFjdE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdBcnRpZmFjdCBub3QgZm91bmQnKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnQXJ0aWZhY3ROb3RGb3VuZEVycm9yJztcbiAgICB9XG59XG5leHBvcnRzLkFydGlmYWN0Tm90Rm91bmRFcnJvciA9IEFydGlmYWN0Tm90Rm91bmRFcnJvcjtcbmNsYXNzIEdIRVNOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0BhY3Rpb25zL2FydGlmYWN0IHYyLjAuMCssIHVwbG9hZC1hcnRpZmFjdEB2NCsgYW5kIGRvd25sb2FkLWFydGlmYWN0QHY0KyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgb24gR0hFUy4nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnR0hFU05vdFN1cHBvcnRlZEVycm9yJztcbiAgICB9XG59XG5leHBvcnRzLkdIRVNOb3RTdXBwb3J0ZWRFcnJvciA9IEdIRVNOb3RTdXBwb3J0ZWRFcnJvcjtcbmNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgVW5hYmxlIHRvIG1ha2UgcmVxdWVzdDogJHtjb2RlfVxcbklmIHlvdSBhcmUgdXNpbmcgc2VsZi1ob3N0ZWQgcnVubmVycywgcGxlYXNlIG1ha2Ugc3VyZSB5b3VyIHJ1bm5lciBoYXMgYWNjZXNzIHRvIGFsbCBHaXRIdWIgZW5kcG9pbnRzOiBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2hvc3RpbmcteW91ci1vd24tcnVubmVycy9tYW5hZ2luZy1zZWxmLWhvc3RlZC1ydW5uZXJzL2Fib3V0LXNlbGYtaG9zdGVkLXJ1bm5lcnMjY29tbXVuaWNhdGlvbi1iZXR3ZWVuLXNlbGYtaG9zdGVkLXJ1bm5lcnMtYW5kLWdpdGh1YmA7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLm5hbWUgPSAnTmV0d29ya0Vycm9yJztcbiAgICB9XG59XG5leHBvcnRzLk5ldHdvcmtFcnJvciA9IE5ldHdvcmtFcnJvcjtcbk5ldHdvcmtFcnJvci5pc05ldHdvcmtFcnJvckNvZGUgPSAoY29kZSkgPT4ge1xuICAgIGlmICghY29kZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VOT1RGT1VORCcsXG4gICAgICAgICdFVElNRURPVVQnLFxuICAgICAgICAnRUNPTk5SRUZVU0VEJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCdcbiAgICBdLmluY2x1ZGVzKGNvZGUpO1xufTtcbmNsYXNzIFVzYWdlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQXJ0aWZhY3Qgc3RvcmFnZSBxdW90YSBoYXMgYmVlbiBoaXQuIFVuYWJsZSB0byB1cGxvYWQgYW55IG5ldyBhcnRpZmFjdHMuIFVzYWdlIGlzIHJlY2FsY3VsYXRlZCBldmVyeSA2LTEyIGhvdXJzLlxcbk1vcmUgaW5mbyBvbiBzdG9yYWdlIGxpbWl0czogaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYmlsbGluZy9tYW5hZ2luZy1iaWxsaW5nLWZvci1naXRodWItYWN0aW9ucy9hYm91dC1iaWxsaW5nLWZvci1naXRodWItYWN0aW9ucyNjYWxjdWxhdGluZy1taW51dGUtYW5kLXN0b3JhZ2Utc3BlbmRpbmdgO1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1VzYWdlRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuVXNhZ2VFcnJvciA9IFVzYWdlRXJyb3I7XG5Vc2FnZUVycm9yLmlzVXNhZ2VFcnJvck1lc3NhZ2UgPSAobXNnKSA9PiB7XG4gICAgaWYgKCFtc2cpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbXNnLmluY2x1ZGVzKCdpbnN1ZmZpY2llbnQgdXNhZ2UnKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpO1xuY29uc3QgYXV0aF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9hdXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuL3VzZXItYWdlbnRcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbmNsYXNzIEFydGlmYWN0SHR0cENsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXNlckFnZW50LCBtYXhBdHRlbXB0cywgYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMsIHJldHJ5TXVsdGlwbGllcikge1xuICAgICAgICB0aGlzLm1heEF0dGVtcHRzID0gNTtcbiAgICAgICAgdGhpcy5iYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcyA9IDMwMDA7XG4gICAgICAgIHRoaXMucmV0cnlNdWx0aXBsaWVyID0gMS41O1xuICAgICAgICBjb25zdCB0b2tlbiA9ICgwLCBjb25maWdfMS5nZXRSdW50aW1lVG9rZW4pKCk7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9ICgwLCBjb25maWdfMS5nZXRSZXN1bHRzU2VydmljZVVybCkoKTtcbiAgICAgICAgaWYgKG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICB0aGlzLm1heEF0dGVtcHRzID0gbWF4QXR0ZW1wdHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJhc2VSZXRyeUludGVydmFsTWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICB0aGlzLmJhc2VSZXRyeUludGVydmFsTWlsbGlzZWNvbmRzID0gYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldHJ5TXVsdGlwbGllcikge1xuICAgICAgICAgICAgdGhpcy5yZXRyeU11bHRpcGxpZXIgPSByZXRyeU11bHRpcGxpZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IGh0dHBfY2xpZW50XzEuSHR0cENsaWVudCh1c2VyQWdlbnQsIFtcbiAgICAgICAgICAgIG5ldyBhdXRoXzEuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIodG9rZW4pXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHNhdGlzZmllcyB0aGUgUnBjIGludGVyZmFjZS4gSXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBKU09OXG4gICAgLy8gSlNPTiBnZW5lcmF0ZWQgY2xpZW50LlxuICAgIHJlcXVlc3Qoc2VydmljZSwgbWV0aG9kLCBjb250ZW50VHlwZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgL3R3aXJwLyR7c2VydmljZX0vJHttZXRob2R9YCwgdGhpcy5iYXNlVXJsKS5ocmVmO1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYFtSZXF1ZXN0XSAke21ldGhvZH0gJHt1cmx9YCk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBjb250ZW50VHlwZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBib2R5IH0gPSB5aWVsZCB0aGlzLnJldHJ5YWJsZVJlcXVlc3QoKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCBKU09OLnN0cmluZ2lmeShkYXRhKSwgaGVhZGVycyk7IH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvICR7bWV0aG9kfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0cnlhYmxlUmVxdWVzdChvcGVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIGxldCByYXdCb2R5ID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAoYXR0ZW1wdCA8IHRoaXMubWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgaXNSZXRyeWFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIG9wZXJhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlO1xuICAgICAgICAgICAgICAgICAgICByYXdCb2R5ID0geWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYFtSZXNwb25zZV0gLSAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYEhlYWRlcnM6ICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UubWVzc2FnZS5oZWFkZXJzLCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmF3Qm9keSk7XG4gICAgICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuZGVidWcpKGBCb2R5OiAke0pTT04uc3RyaW5naWZ5KGJvZHksIG51bGwsIDIpfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N1Y2Nlc3NTdGF0dXNDb2RlKHN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByZXNwb25zZSwgYm9keSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlzUmV0cnlhYmxlID0gdGhpcy5pc1JldHJ5YWJsZUh0dHBTdGF0dXNDb2RlKHN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRmFpbGVkIHJlcXVlc3Q6ICgke3N0YXR1c0NvZGV9KSAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzTWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5tc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnNfMS5Vc2FnZUVycm9yLmlzVXNhZ2VFcnJvck1lc3NhZ2UoYm9keS5tc2cpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLlVzYWdlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2Vycm9yTWVzc2FnZX06ICR7Ym9keS5tc2d9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuZGVidWcpKGBSYXcgQm9keTogJHtyYXdCb2R5fWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGVycm9yc18xLlVzYWdlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnNfMS5OZXR3b3JrRXJyb3IuaXNOZXR3b3JrRXJyb3JDb2RlKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLk5ldHdvcmtFcnJvcihlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNSZXRyeWFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWlzUmV0cnlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjZWl2ZWQgbm9uLXJldHJ5YWJsZSBlcnJvcjogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhdHRlbXB0ICsgMSA9PT0gdGhpcy5tYXhBdHRlbXB0cykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBtYWtlIHJlcXVlc3QgYWZ0ZXIgJHt0aGlzLm1heEF0dGVtcHRzfSBhdHRlbXB0czogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5VGltZU1pbGxpc2Vjb25kcyA9IHRoaXMuZ2V0RXhwb25lbnRpYWxSZXRyeVRpbWVNaWxsaXNlY29uZHMoYXR0ZW1wdCk7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgQXR0ZW1wdCAke2F0dGVtcHQgKyAxfSBvZiAke3RoaXMubWF4QXR0ZW1wdHN9IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yTWVzc2FnZX0uIFJldHJ5aW5nIHJlcXVlc3QgaW4gJHtyZXRyeVRpbWVNaWxsaXNlY29uZHN9IG1zLi4uYCk7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5zbGVlcChyZXRyeVRpbWVNaWxsaXNlY29uZHMpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWVzdCBmYWlsZWRgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlzU3VjY2Vzc1N0YXR1c0NvZGUoc3RhdHVzQ29kZSkge1xuICAgICAgICBpZiAoIXN0YXR1c0NvZGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdGF0dXNDb2RlID49IDIwMCAmJiBzdGF0dXNDb2RlIDwgMzAwO1xuICAgIH1cbiAgICBpc1JldHJ5YWJsZUh0dHBTdGF0dXNDb2RlKHN0YXR1c0NvZGUpIHtcbiAgICAgICAgaWYgKCFzdGF0dXNDb2RlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCByZXRyeWFibGVTdGF0dXNDb2RlcyA9IFtcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLkJhZEdhdGV3YXksXG4gICAgICAgICAgICBodHRwX2NsaWVudF8xLkh0dHBDb2Rlcy5HYXRld2F5VGltZW91dCxcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLkludGVybmFsU2VydmVyRXJyb3IsXG4gICAgICAgICAgICBodHRwX2NsaWVudF8xLkh0dHBDb2Rlcy5TZXJ2aWNlVW5hdmFpbGFibGUsXG4gICAgICAgICAgICBodHRwX2NsaWVudF8xLkh0dHBDb2Rlcy5Ub29NYW55UmVxdWVzdHNcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHJldHJ5YWJsZVN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgICBzbGVlcChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRFeHBvbmVudGlhbFJldHJ5VGltZU1pbGxpc2Vjb25kcyhhdHRlbXB0KSB7XG4gICAgICAgIGlmIChhdHRlbXB0IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRlbXB0IHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXR0ZW1wdCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWluVGltZSA9IHRoaXMuYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMgKiBNYXRoLnBvdyh0aGlzLnJldHJ5TXVsdGlwbGllciwgYXR0ZW1wdCk7XG4gICAgICAgIGNvbnN0IG1heFRpbWUgPSBtaW5UaW1lICogdGhpcy5yZXRyeU11bHRpcGxpZXI7XG4gICAgICAgIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gbWluVGltZSBhbmQgbWF4VGltZSAoZXhjbHVzaXZlKVxuICAgICAgICByZXR1cm4gTWF0aC50cnVuYyhNYXRoLnJhbmRvbSgpICogKG1heFRpbWUgLSBtaW5UaW1lKSArIG1pblRpbWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGludGVybmFsQXJ0aWZhY3RUd2lycENsaWVudChvcHRpb25zKSB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEFydGlmYWN0SHR0cENsaWVudCgoMCwgdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFN0cmluZykoKSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1heEF0dGVtcHRzLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0cnlJbnRlcnZhbE1zLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0cnlNdWx0aXBsaWVyKTtcbiAgICByZXR1cm4gbmV3IGdlbmVyYXRlZF8xLkFydGlmYWN0U2VydmljZUNsaWVudEpTT04oY2xpZW50KTtcbn1cbmV4cG9ydHMuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50ID0gaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3QtdHdpcnAtY2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXBsb2FkWmlwU3BlY2lmaWNhdGlvbiA9IGV4cG9ydHMudmFsaWRhdGVSb290RGlyZWN0b3J5ID0gdm9pZCAwO1xuY29uc3QgZnMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImZzXCIpKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpO1xuY29uc3QgcGF0aF8xID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBwYXRoX2FuZF9hcnRpZmFjdF9uYW1lX3ZhbGlkYXRpb25fMSA9IHJlcXVpcmUoXCIuL3BhdGgtYW5kLWFydGlmYWN0LW5hbWUtdmFsaWRhdGlvblwiKTtcbi8qKlxuICogQ2hlY2tzIGlmIGEgcm9vdCBkaXJlY3RvcnkgZXhpc3RzIGFuZCBpcyB2YWxpZFxuICogQHBhcmFtIHJvb3REaXJlY3RvcnkgYW4gYWJzb2x1dGUgcm9vdCBkaXJlY3RvcnkgcGF0aCBjb21tb24gdG8gYWxsIGlucHV0IGZpbGVzIHRoYXQgdGhhdCB3aWxsIGJlIHRyaW1tZWQgZnJvbSB0aGUgZmluYWwgemlwIHN0cnVjdHVyZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJvb3REaXJlY3Rvcnkocm9vdERpcmVjdG9yeSkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhyb290RGlyZWN0b3J5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCByb290RGlyZWN0b3J5ICR7cm9vdERpcmVjdG9yeX0gZG9lcyBub3QgZXhpc3RgKTtcbiAgICB9XG4gICAgaWYgKCFmcy5zdGF0U3luYyhyb290RGlyZWN0b3J5KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIHJvb3REaXJlY3RvcnkgJHtyb290RGlyZWN0b3J5fSBpcyBub3QgYSB2YWxpZCBkaXJlY3RvcnlgKTtcbiAgICB9XG4gICAgKDAsIGNvcmVfMS5pbmZvKShgUm9vdCBkaXJlY3RvcnkgaW5wdXQgaXMgdmFsaWQhYCk7XG59XG5leHBvcnRzLnZhbGlkYXRlUm9vdERpcmVjdG9yeSA9IHZhbGlkYXRlUm9vdERpcmVjdG9yeTtcbi8qKlxuICogQ3JlYXRlcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgaG93IGEgemlwIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGZvciBhIHNldCBvZiBpbnB1dCBmaWxlc1xuICogQHBhcmFtIGZpbGVzVG9aaXAgYSBsaXN0IG9mIGZpbGUgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHppcFxuICogQHBhcmFtIHJvb3REaXJlY3RvcnkgYW4gYWJzb2x1dGUgcm9vdCBkaXJlY3RvcnkgcGF0aCBjb21tb24gdG8gYWxsIGlucHV0IGZpbGVzIHRoYXQgdGhhdCB3aWxsIGJlIHRyaW1tZWQgZnJvbSB0aGUgZmluYWwgemlwIHN0cnVjdHVyZVxuICovXG5mdW5jdGlvbiBnZXRVcGxvYWRaaXBTcGVjaWZpY2F0aW9uKGZpbGVzVG9aaXAsIHJvb3REaXJlY3RvcnkpIHtcbiAgICBjb25zdCBzcGVjaWZpY2F0aW9uID0gW107XG4gICAgLy8gTm9ybWFsaXplIGFuZCByZXNvbHZlLCB0aGlzIGFsbG93cyBmb3IgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHVzZWRcbiAgICByb290RGlyZWN0b3J5ID0gKDAsIHBhdGhfMS5ub3JtYWxpemUpKHJvb3REaXJlY3RvcnkpO1xuICAgIHJvb3REaXJlY3RvcnkgPSAoMCwgcGF0aF8xLnJlc29sdmUpKHJvb3REaXJlY3RvcnkpO1xuICAgIC8qXG4gICAgICAgRXhhbXBsZVxuICAgICAgIFxuICAgICAgIElucHV0OlxuICAgICAgICAgcm9vdERpcmVjdG9yeTogJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZCdcbiAgICAgICAgIGFydGlmYWN0RmlsZXM6IFtcbiAgICAgICAgICAgJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLFxuICAgICAgICAgICAnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUyLnR4dCcsXG4gICAgICAgICAgICcvaG9tZS91c2VyL2ZpbGVzL3Bsei11cGxvYWQvZGlyL2ZpbGUzLnR4dCdcbiAgICAgICAgIF1cbiAgICAgICBcbiAgICAgICBPdXRwdXQ6XG4gICAgICAgICBzcGVjaWZpY2F0aW9uczogW1xuICAgICAgICAgICBbJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLCAnL2ZpbGUxLnR4dCddLFxuICAgICAgICAgICBbJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLCAnL2ZpbGUyLnR4dCddLFxuICAgICAgICAgICBbJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLCAnL2Rpci9maWxlMy50eHQnXVxuICAgICAgICAgXVxuICBcbiAgICAgICAgVGhlIGZpbmFsIHppcCB0aGF0IGlzIGxhdGVyIHVwbG9hZGVkIHdpbGwgbG9vayBsaWtlIHRoaXM6XG4gIFxuICAgICAgICBteS1hcnRpZmFjdC56aXBcbiAgICAgICAgICAtIGZpbGUudHh0XG4gICAgICAgICAgLSBmaWxlMi50eHRcbiAgICAgICAgICAtIGRpci9cbiAgICAgICAgICAgIC0gZmlsZTMudHh0XG4gICAgKi9cbiAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzVG9aaXApIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5sc3RhdFN5bmMoZmlsZSwgeyB0aHJvd0lmTm9FbnRyeTogZmFsc2UgfSk7XG4gICAgICAgIGlmICghc3RhdHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2ZpbGV9IGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAvLyBOb3JtYWxpemUgYW5kIHJlc29sdmUsIHRoaXMgYWxsb3dzIGZvciBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aHMgdG8gYmUgdXNlZFxuICAgICAgICAgICAgZmlsZSA9ICgwLCBwYXRoXzEubm9ybWFsaXplKShmaWxlKTtcbiAgICAgICAgICAgIGZpbGUgPSAoMCwgcGF0aF8xLnJlc29sdmUpKGZpbGUpO1xuICAgICAgICAgICAgaWYgKCFmaWxlLnN0YXJ0c1dpdGgocm9vdERpcmVjdG9yeSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSByb290RGlyZWN0b3J5OiAke3Jvb3REaXJlY3Rvcnl9IGlzIG5vdCBhIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGU6ICR7ZmlsZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBmb3JiaWRkZW4gY2hhcmFjdGVycyBpbiBmaWxlIHBhdGhzIHRoYXQgbWF5IGNhdXNlIGFtYmlndW91cyBiZWhhdmlvciBpZiBkb3dubG9hZGVkIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXNcbiAgICAgICAgICAgIGNvbnN0IHVwbG9hZFBhdGggPSBmaWxlLnJlcGxhY2Uocm9vdERpcmVjdG9yeSwgJycpO1xuICAgICAgICAgICAgKDAsIHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xLnZhbGlkYXRlRmlsZVBhdGgpKHVwbG9hZFBhdGgpO1xuICAgICAgICAgICAgc3BlY2lmaWNhdGlvbi5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VQYXRoOiBmaWxlLFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUGF0aDogdXBsb2FkUGF0aCxcbiAgICAgICAgICAgICAgICBzdGF0c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFbXB0eSBkaXJlY3RvcnlcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBmaWxlLnJlcGxhY2Uocm9vdERpcmVjdG9yeSwgJycpO1xuICAgICAgICAgICAgKDAsIHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xLnZhbGlkYXRlRmlsZVBhdGgpKGRpcmVjdG9yeVBhdGgpO1xuICAgICAgICAgICAgc3BlY2lmaWNhdGlvbi5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VQYXRoOiBudWxsLFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUGF0aDogZGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICBzdGF0c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNwZWNpZmljYXRpb247XG59XG5leHBvcnRzLmdldFVwbG9hZFppcFNwZWNpZmljYXRpb24gPSBnZXRVcGxvYWRaaXBTcGVjaWZpY2F0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXBsb2FkLXppcC1zcGVjaWZpY2F0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9ZX1lLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5wcm90b3R5cGUubmFtZT1cIkludmFsaWRDaGFyYWN0ZXJFcnJvclwiO3ZhciByPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5iaW5kKHdpbmRvdyl8fGZ1bmN0aW9uKHIpe3ZhciB0PVN0cmluZyhyKS5yZXBsYWNlKC89KyQvLFwiXCIpO2lmKHQubGVuZ3RoJTQ9PTEpdGhyb3cgbmV3IGUoXCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLlwiKTtmb3IodmFyIG4sbyxhPTAsaT0wLGM9XCJcIjtvPXQuY2hhckF0KGkrKyk7fm8mJihuPWElND82NCpuK286byxhKyslNCk/Yys9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmbj4+KC0yKmEmNikpOjApbz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIuaW5kZXhPZihvKTtyZXR1cm4gY307ZnVuY3Rpb24gdChlKXt2YXIgdD1lLnJlcGxhY2UoLy0vZyxcIitcIikucmVwbGFjZSgvXy9nLFwiL1wiKTtzd2l0Y2godC5sZW5ndGglNCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjp0Kz1cIj09XCI7YnJlYWs7Y2FzZSAzOnQrPVwiPVwiO2JyZWFrO2RlZmF1bHQ6dGhyb3dcIklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyFcIn10cnl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQocihlKS5yZXBsYWNlKC8oLikvZywoZnVuY3Rpb24oZSxyKXt2YXIgdD1yLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHQubGVuZ3RoPDImJih0PVwiMFwiK3QpLFwiJVwiK3R9KSkpfSh0KX1jYXRjaChlKXtyZXR1cm4gcih0KX19ZnVuY3Rpb24gbihlKXt0aGlzLm1lc3NhZ2U9ZX1mdW5jdGlvbiBvKGUscil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IG4oXCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZFwiKTt2YXIgbz0hMD09PShyPXJ8fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KGUuc3BsaXQoXCIuXCIpW29dKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IG4oXCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogXCIrZS5tZXNzYWdlKX19bi5wcm90b3R5cGU9bmV3IEVycm9yLG4ucHJvdG90eXBlLm5hbWU9XCJJbnZhbGlkVG9rZW5FcnJvclwiO2NvbnN0IGE9bzthLmRlZmF1bHQ9byxhLkludmFsaWRUb2tlbkVycm9yPW4sbW9kdWxlLmV4cG9ydHM9YTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWp3dC1kZWNvZGUuY2pzLmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRCYWNrZW5kSWRzRnJvbVRva2VuID0gdm9pZCAwO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbmNvbnN0IGp3dF9kZWNvZGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiand0LWRlY29kZVwiKSk7XG5jb25zdCBJbnZhbGlkSnd0RXJyb3IgPSBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgYmFja2VuZCBJRHM6IFRoZSBwcm92aWRlZCBKV1QgdG9rZW4gaXMgaW52YWxpZCBhbmQvb3IgbWlzc2luZyBjbGFpbXMnKTtcbi8vIHVzZXMgdGhlIEpXVCB0b2tlbiBjbGFpbXMgdG8gZ2V0IHRoZVxuLy8gd29ya2Zsb3cgcnVuIGFuZCB3b3JrZmxvdyBqb2IgcnVuIGJhY2tlbmQgaWRzXG5mdW5jdGlvbiBnZXRCYWNrZW5kSWRzRnJvbVRva2VuKCkge1xuICAgIGNvbnN0IHRva2VuID0gKDAsIGNvbmZpZ18xLmdldFJ1bnRpbWVUb2tlbikoKTtcbiAgICBjb25zdCBkZWNvZGVkID0gKDAsIGp3dF9kZWNvZGVfMS5kZWZhdWx0KSh0b2tlbik7XG4gICAgaWYgKCFkZWNvZGVkLnNjcCkge1xuICAgICAgICB0aHJvdyBJbnZhbGlkSnd0RXJyb3I7XG4gICAgfVxuICAgIC8qXG4gICAgICogZXhhbXBsZSBkZWNvZGVkOlxuICAgICAqIHtcbiAgICAgKiAgIHNjcDogXCJBY3Rpb25zLkV4YW1wbGVTY29wZSBBY3Rpb25zLlJlc3VsdHM6Y2U3ZjU0YzctNjFjNy00YWFlLTg4N2YtMzBkYTQ3NWY1ZjFhOmNhMzk1MDg1LTA0MGEtNTI2Yi0yY2U4LWJkYzg1ZjY5Mjc3NFwiXG4gICAgICogfVxuICAgICAqL1xuICAgIGNvbnN0IHNjcFBhcnRzID0gZGVjb2RlZC5zY3Auc3BsaXQoJyAnKTtcbiAgICBpZiAoc2NwUGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IEludmFsaWRKd3RFcnJvcjtcbiAgICB9XG4gICAgLypcbiAgICAgKiBleGFtcGxlIHNjcFBhcnRzOlxuICAgICAqIFtcIkFjdGlvbnMuRXhhbXBsZVNjb3BlXCIsIFwiQWN0aW9ucy5SZXN1bHRzOmNlN2Y1NGM3LTYxYzctNGFhZS04ODdmLTMwZGE0NzVmNWYxYTpjYTM5NTA4NS0wNDBhLTUyNmItMmNlOC1iZGM4NWY2OTI3NzRcIl1cbiAgICAgKi9cbiAgICBmb3IgKGNvbnN0IHNjb3BlcyBvZiBzY3BQYXJ0cykge1xuICAgICAgICBjb25zdCBzY29wZVBhcnRzID0gc2NvcGVzLnNwbGl0KCc6Jyk7XG4gICAgICAgIGlmICgoc2NvcGVQYXJ0cyA9PT0gbnVsbCB8fCBzY29wZVBhcnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY29wZVBhcnRzWzBdKSAhPT0gJ0FjdGlvbnMuUmVzdWx0cycpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgQWN0aW9ucy5SZXN1bHRzIHNjb3BlXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKlxuICAgICAgICAgKiBleGFtcGxlIHNjb3BlUGFydHM6XG4gICAgICAgICAqIFtcIkFjdGlvbnMuUmVzdWx0c1wiLCBcImNlN2Y1NGM3LTYxYzctNGFhZS04ODdmLTMwZGE0NzVmNWYxYVwiLCBcImNhMzk1MDg1LTA0MGEtNTI2Yi0yY2U4LWJkYzg1ZjY5Mjc3NFwiXVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHNjb3BlUGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICAvLyBtaXNzaW5nIGV4cGVjdGVkIG51bWJlciBvZiBjbGFpbXNcbiAgICAgICAgICAgIHRocm93IEludmFsaWRKd3RFcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHMgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZDogc2NvcGVQYXJ0c1sxXSxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBzY29wZVBhcnRzWzJdXG4gICAgICAgIH07XG4gICAgICAgIGNvcmUuZGVidWcoYFdvcmtmbG93IFJ1biBCYWNrZW5kIElEOiAke2lkcy53b3JrZmxvd1J1bkJhY2tlbmRJZH1gKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgV29ya2Zsb3cgSm9iIFJ1biBCYWNrZW5kIElEOiAke2lkcy53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZH1gKTtcbiAgICAgICAgcmV0dXJuIGlkcztcbiAgICB9XG4gICAgdGhyb3cgSW52YWxpZEp3dEVycm9yO1xufVxuZXhwb3J0cy5nZXRCYWNrZW5kSWRzRnJvbVRva2VuID0gZ2V0QmFja2VuZElkc0Zyb21Ub2tlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVFbXB0eVBpcGVsaW5lID0gY3JlYXRlRW1wdHlQaXBlbGluZTtcbmNvbnN0IFZhbGlkUGhhc2VOYW1lcyA9IG5ldyBTZXQoW1wiRGVzZXJpYWxpemVcIiwgXCJTZXJpYWxpemVcIiwgXCJSZXRyeVwiLCBcIlNpZ25cIl0pO1xuLyoqXG4gKiBBIHByaXZhdGUgaW1wbGVtZW50YXRpb24gb2YgUGlwZWxpbmUuXG4gKiBEbyBub3QgZXhwb3J0IHRoaXMgY2xhc3MgZnJvbSB0aGUgcGFja2FnZS5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBIdHRwUGlwZWxpbmUge1xuICAgIGNvbnN0cnVjdG9yKHBvbGljaWVzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5fcG9saWNpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fcG9saWNpZXMgPSAoX2EgPSBwb2xpY2llcyA9PT0gbnVsbCB8fCBwb2xpY2llcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcG9saWNpZXMuc2xpY2UoMCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGFkZFBvbGljeShwb2xpY3ksIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucy5waGFzZSAmJiBvcHRpb25zLmFmdGVyUGhhc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvbGljaWVzIGluc2lkZSBhIHBoYXNlIGNhbm5vdCBzcGVjaWZ5IGFmdGVyUGhhc2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBoYXNlICYmICFWYWxpZFBoYXNlTmFtZXMuaGFzKG9wdGlvbnMucGhhc2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGhhc2UgbmFtZTogJHtvcHRpb25zLnBoYXNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmFmdGVyUGhhc2UgJiYgIVZhbGlkUGhhc2VOYW1lcy5oYXMob3B0aW9ucy5hZnRlclBoYXNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFmdGVyUGhhc2UgbmFtZTogJHtvcHRpb25zLmFmdGVyUGhhc2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcG9saWNpZXMucHVzaCh7XG4gICAgICAgICAgICBwb2xpY3ksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb3JkZXJlZFBvbGljaWVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZW1vdmVQb2xpY3kob3B0aW9ucykge1xuICAgICAgICBjb25zdCByZW1vdmVkUG9saWNpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fcG9saWNpZXMgPSB0aGlzLl9wb2xpY2llcy5maWx0ZXIoKHBvbGljeURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucy5uYW1lICYmIHBvbGljeURlc2NyaXB0b3IucG9saWN5Lm5hbWUgPT09IG9wdGlvbnMubmFtZSkgfHxcbiAgICAgICAgICAgICAgICAob3B0aW9ucy5waGFzZSAmJiBwb2xpY3lEZXNjcmlwdG9yLm9wdGlvbnMucGhhc2UgPT09IG9wdGlvbnMucGhhc2UpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZFBvbGljaWVzLnB1c2gocG9saWN5RGVzY3JpcHRvci5wb2xpY3kpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb3JkZXJlZFBvbGljaWVzID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gcmVtb3ZlZFBvbGljaWVzO1xuICAgIH1cbiAgICBzZW5kUmVxdWVzdChodHRwQ2xpZW50LCByZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHBvbGljaWVzID0gdGhpcy5nZXRPcmRlcmVkUG9saWNpZXMoKTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBwb2xpY2llcy5yZWR1Y2VSaWdodCgobmV4dCwgcG9saWN5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb2xpY3kuc2VuZFJlcXVlc3QocmVxLCBuZXh0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIChyZXEpID0+IGh0dHBDbGllbnQuc2VuZFJlcXVlc3QocmVxKSk7XG4gICAgICAgIHJldHVybiBwaXBlbGluZShyZXF1ZXN0KTtcbiAgICB9XG4gICAgZ2V0T3JkZXJlZFBvbGljaWVzKCkge1xuICAgICAgICBpZiAoIXRoaXMuX29yZGVyZWRQb2xpY2llcykge1xuICAgICAgICAgICAgdGhpcy5fb3JkZXJlZFBvbGljaWVzID0gdGhpcy5vcmRlclBvbGljaWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGVyZWRQb2xpY2llcztcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSHR0cFBpcGVsaW5lKHRoaXMuX3BvbGljaWVzKTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwUGlwZWxpbmUoKTtcbiAgICB9XG4gICAgb3JkZXJQb2xpY2llcygpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBnb2FsIG9mIHRoaXMgbWV0aG9kIGlzIHRvIHJlbGlhYmx5IG9yZGVyIHBpcGVsaW5lIHBvbGljaWVzXG4gICAgICAgICAqIGJhc2VkIG9uIHRoZWlyIGRlY2xhcmVkIHJlcXVpcmVtZW50cyB3aGVuIHRoZXkgd2VyZSBhZGRlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogT3JkZXIgaXMgZmlyc3QgZGV0ZXJtaW5lZCBieSBwaGFzZTpcbiAgICAgICAgICpcbiAgICAgICAgICogMS4gU2VyaWFsaXplIFBoYXNlXG4gICAgICAgICAqIDIuIFBvbGljaWVzIG5vdCBpbiBhIHBoYXNlXG4gICAgICAgICAqIDMuIERlc2VyaWFsaXplIFBoYXNlXG4gICAgICAgICAqIDQuIFJldHJ5IFBoYXNlXG4gICAgICAgICAqIDUuIFNpZ24gUGhhc2VcbiAgICAgICAgICpcbiAgICAgICAgICogV2l0aGluIGVhY2ggcGhhc2UsIHBvbGljaWVzIGFyZSBleGVjdXRlZCBpbiB0aGUgb3JkZXJcbiAgICAgICAgICogdGhleSB3ZXJlIGFkZGVkIHVubGVzcyB0aGV5IHdlcmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGVcbiAgICAgICAgICogYmVmb3JlL2FmdGVyIG90aGVyIHBvbGljaWVzIG9yIGFmdGVyIGEgcGFydGljdWxhciBwaGFzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogVG8gZGV0ZXJtaW5lIHRoZSBmaW5hbCBvcmRlciwgd2Ugd2lsbCB3YWxrIHRoZSBwb2xpY3kgbGlzdFxuICAgICAgICAgKiBpbiBwaGFzZSBvcmRlciBtdWx0aXBsZSB0aW1lcyB1bnRpbCBhbGwgZGVwZW5kZW5jaWVzIGFyZVxuICAgICAgICAgKiBzYXRpc2ZpZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBhZnRlclBvbGljaWVzYCBhcmUgdGhlIHNldCBvZiBwb2xpY2llcyB0aGF0IG11c3QgYmVcbiAgICAgICAgICogZXhlY3V0ZWQgYmVmb3JlIGEgZ2l2ZW4gcG9saWN5LiBUaGlzIHJlcXVpcmVtZW50IGlzXG4gICAgICAgICAqIGNvbnNpZGVyZWQgc2F0aXNmaWVkIHdoZW4gZWFjaCBvZiB0aGUgbGlzdGVkIHBvbGljaWVzXG4gICAgICAgICAqIGhhdmUgYmVlbiBzY2hlZHVsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBiZWZvcmVQb2xpY2llc2AgYXJlIHRoZSBzZXQgb2YgcG9saWNpZXMgdGhhdCBtdXN0IGJlXG4gICAgICAgICAqIGV4ZWN1dGVkIGFmdGVyIGEgZ2l2ZW4gcG9saWN5LiBTaW5jZSB0aGlzIGRlcGVuZGVuY3lcbiAgICAgICAgICogY2FuIGJlIGV4cHJlc3NlZCBieSBjb252ZXJ0aW5nIGl0IGludG8gYSBlcXVpdmFsZW50XG4gICAgICAgICAqIGBhZnRlclBvbGljaWVzYCBkZWNsYXJhdGlvbnMsIHRoZXkgYXJlIG5vcm1hbGl6ZWRcbiAgICAgICAgICogaW50byB0aGF0IGZvcm0gZm9yIHNpbXBsaWNpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEFuIGBhZnRlclBoYXNlYCBkZXBlbmRlbmN5IGlzIGNvbnNpZGVyZWQgc2F0aXNmaWVkIHdoZW4gYWxsXG4gICAgICAgICAqIHBvbGljaWVzIGluIHRoYXQgcGhhc2UgaGF2ZSBzY2hlZHVsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgLy8gVHJhY2sgYWxsIHBvbGljaWVzIHdlIGtub3cgYWJvdXQuXG4gICAgICAgIGNvbnN0IHBvbGljeU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlUGhhc2UobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHBvbGljaWVzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICAgICAgaGFzUnVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoYXNBZnRlclBvbGljaWVzOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhY2sgcG9saWNpZXMgZm9yIGVhY2ggcGhhc2UuXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZVBoYXNlID0gY3JlYXRlUGhhc2UoXCJTZXJpYWxpemVcIik7XG4gICAgICAgIGNvbnN0IG5vUGhhc2UgPSBjcmVhdGVQaGFzZShcIk5vbmVcIik7XG4gICAgICAgIGNvbnN0IGRlc2VyaWFsaXplUGhhc2UgPSBjcmVhdGVQaGFzZShcIkRlc2VyaWFsaXplXCIpO1xuICAgICAgICBjb25zdCByZXRyeVBoYXNlID0gY3JlYXRlUGhhc2UoXCJSZXRyeVwiKTtcbiAgICAgICAgY29uc3Qgc2lnblBoYXNlID0gY3JlYXRlUGhhc2UoXCJTaWduXCIpO1xuICAgICAgICAvLyBhIGxpc3Qgb2YgcGhhc2VzIGluIG9yZGVyXG4gICAgICAgIGNvbnN0IG9yZGVyZWRQaGFzZXMgPSBbc2VyaWFsaXplUGhhc2UsIG5vUGhhc2UsIGRlc2VyaWFsaXplUGhhc2UsIHJldHJ5UGhhc2UsIHNpZ25QaGFzZV07XG4gICAgICAgIC8vIFNtYWxsIGhlbHBlciBmdW5jdGlvbiB0byBtYXAgcGhhc2UgbmFtZSB0byBlYWNoIFBoYXNlXG4gICAgICAgIGZ1bmN0aW9uIGdldFBoYXNlKHBoYXNlKSB7XG4gICAgICAgICAgICBpZiAocGhhc2UgPT09IFwiUmV0cnlcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRyeVBoYXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocGhhc2UgPT09IFwiU2VyaWFsaXplXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwaGFzZSA9PT0gXCJEZXNlcmlhbGl6ZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwaGFzZSA9PT0gXCJTaWduXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnblBoYXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlyc3Qgd2FsayBlYWNoIHBvbGljeSBhbmQgY3JlYXRlIGEgbm9kZSB0byB0cmFjayBtZXRhZGF0YS5cbiAgICAgICAgZm9yIChjb25zdCBkZXNjcmlwdG9yIG9mIHRoaXMuX3BvbGljaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwb2xpY3kgPSBkZXNjcmlwdG9yLnBvbGljeTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkZXNjcmlwdG9yLm9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBwb2xpY3lOYW1lID0gcG9saWN5Lm5hbWU7XG4gICAgICAgICAgICBpZiAocG9saWN5TWFwLmhhcyhwb2xpY3lOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkR1cGxpY2F0ZSBwb2xpY3kgbmFtZXMgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBub2RlID0ge1xuICAgICAgICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICAgICAgICBkZXBlbmRzT246IG5ldyBTZXQoKSxcbiAgICAgICAgICAgICAgICBkZXBlbmRhbnRzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJQaGFzZSkge1xuICAgICAgICAgICAgICAgIG5vZGUuYWZ0ZXJQaGFzZSA9IGdldFBoYXNlKG9wdGlvbnMuYWZ0ZXJQaGFzZSk7XG4gICAgICAgICAgICAgICAgbm9kZS5hZnRlclBoYXNlLmhhc0FmdGVyUG9saWNpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9saWN5TWFwLnNldChwb2xpY3lOYW1lLCBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHBoYXNlID0gZ2V0UGhhc2Uob3B0aW9ucy5waGFzZSk7XG4gICAgICAgICAgICBwaGFzZS5wb2xpY2llcy5hZGQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm93IHRoYXQgZWFjaCBwb2xpY3kgaGFzIGEgbm9kZSwgY29ubmVjdCBkZXBlbmRlbmN5IHJlZmVyZW5jZXMuXG4gICAgICAgIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiB0aGlzLl9wb2xpY2llcykge1xuICAgICAgICAgICAgY29uc3QgeyBwb2xpY3ksIG9wdGlvbnMgfSA9IGRlc2NyaXB0b3I7XG4gICAgICAgICAgICBjb25zdCBwb2xpY3lOYW1lID0gcG9saWN5Lm5hbWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcG9saWN5TWFwLmdldChwb2xpY3lOYW1lKTtcbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBub2RlIGZvciBwb2xpY3kgJHtwb2xpY3lOYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJQb2xpY2llcykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYWZ0ZXJQb2xpY3lOYW1lIG9mIG9wdGlvbnMuYWZ0ZXJQb2xpY2llcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZnRlck5vZGUgPSBwb2xpY3lNYXAuZ2V0KGFmdGVyUG9saWN5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZnRlck5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpbmtpbmcgaW4gYm90aCBkaXJlY3Rpb25zIGhlbHBzIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIHdhbnQgdG8gbm90aWZ5IGRlcGVuZGFudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRlcGVuZHNPbi5hZGQoYWZ0ZXJOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZS5kZXBlbmRhbnRzLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZVBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBiZWZvcmVQb2xpY3lOYW1lIG9mIG9wdGlvbnMuYmVmb3JlUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlTm9kZSA9IHBvbGljeU1hcC5nZXQoYmVmb3JlUG9saWN5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUbyBleGVjdXRlIGJlZm9yZSBhbm90aGVyIG5vZGUsIG1ha2UgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlcGVuZCBvbiB0aGUgY3VycmVudCBub2RlLlxuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlTm9kZS5kZXBlbmRzT24uYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXBlbmRhbnRzLmFkZChiZWZvcmVOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3YWxrUGhhc2UocGhhc2UpIHtcbiAgICAgICAgICAgIHBoYXNlLmhhc1J1biA9IHRydWU7XG4gICAgICAgICAgICAvLyBTZXRzIGl0ZXJhdGUgaW4gaW5zZXJ0aW9uIG9yZGVyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcGhhc2UucG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5hZnRlclBoYXNlICYmICghbm9kZS5hZnRlclBoYXNlLmhhc1J1biB8fCBub2RlLmFmdGVyUGhhc2UucG9saWNpZXMuc2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBub2RlIGlzIHdhaXRpbmcgb24gYSBwaGFzZSB0byBjb21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBza2lwIGl0IGZvciBub3cuXG4gICAgICAgICAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIHBoYXNlIGlzIGVtcHR5LCB3ZSBzaG91bGQgd2FpdCBmb3IgaXRcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgd2Fsa2VkIHRvIGF2b2lkIHJlLW9yZGVyaW5nIHBvbGljaWVzLlxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZGVwZW5kc09uLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBub3RoaW5nIGVsc2Ugd2UncmUgd2FpdGluZyBmb3IsIHdlIGNhblxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhpcyBwb2xpY3kgdG8gdGhlIHJlc3VsdCBsaXN0LlxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub2RlLnBvbGljeSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdGlmeSBhbnl0aGluZyB0aGF0IGRlcGVuZHMgb24gdGhpcyBwb2xpY3kgdGhhdFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcG9saWN5IGhhcyBiZWVuIHNjaGVkdWxlZC5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBlbmRhbnQgb2Ygbm9kZS5kZXBlbmRhbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRhbnQuZGVwZW5kc09uLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwb2xpY3lNYXAuZGVsZXRlKG5vZGUucG9saWN5Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBwaGFzZS5wb2xpY2llcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdhbGtQaGFzZXMoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBoYXNlIG9mIG9yZGVyZWRQaGFzZXMpIHtcbiAgICAgICAgICAgICAgICB3YWxrUGhhc2UocGhhc2UpO1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwaGFzZSBpc24ndCBjb21wbGV0ZVxuICAgICAgICAgICAgICAgIGlmIChwaGFzZS5wb2xpY2llcy5zaXplID4gMCAmJiBwaGFzZSAhPT0gbm9QaGFzZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vUGhhc2UuaGFzUnVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgcnVubmluZyBub1BoYXNlIHRvIHNlZSBpZiB0aGF0IHVuYmxvY2tzIHRoaXMgcGhhc2UgbmV4dCB0aWNrLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIGEgcGhhc2UgdGhhdCBoYXBwZW5zIGJlZm9yZSBub1BoYXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyB3YWl0aW5nIG9uIGEgbm9QaGFzZSBwb2xpY3kgdG8gY29tcGxldGUuXG4gICAgICAgICAgICAgICAgICAgICAgICB3YWxrUGhhc2Uobm9QaGFzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2VlZCB0byB0aGUgbmV4dCBwaGFzZSB1bnRpbCB0aGlzIHBoYXNlIGZpbmlzaGVzLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwaGFzZS5oYXNBZnRlclBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJ1biBhbnkgcG9saWNpZXMgdW5ibG9ja2VkIGJ5IHRoaXMgcGhhc2VcbiAgICAgICAgICAgICAgICAgICAgd2Fsa1BoYXNlKG5vUGhhc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIHdlJ3ZlIHB1dCBldmVyeSBub2RlIGluIHRoZSByZXN1bHQgbGlzdC5cbiAgICAgICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgICAgIHdoaWxlIChwb2xpY3lNYXAuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGl0ZXJhdGlvbisrO1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbFJlc3VsdExlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG4gICAgICAgICAgICAvLyBLZWVwIHdhbGtpbmcgZWFjaCBwaGFzZSBpbiBvcmRlciB1bnRpbCB3ZSBjYW4gb3JkZXIgZXZlcnkgbm9kZS5cbiAgICAgICAgICAgIHdhbGtQaGFzZXMoKTtcbiAgICAgICAgICAgIC8vIFRoZSByZXN1bHQgbGlzdCAqc2hvdWxkKiBnZXQgYXQgbGVhc3Qgb25lIGxhcmdlciBlYWNoIHRpbWVcbiAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBmdWxsIHBhc3MuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGdvaW5nIHRvIGxvb3AgZm9yZXZlci5cbiAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoIDw9IGluaXRpYWxSZXN1bHRMZW5ndGggJiYgaXRlcmF0aW9uID4gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzYXRpc2Z5IHBvbGljeSBkZXBlbmRlbmNpZXMgZHVlIHRvIHJlcXVpcmVtZW50cyBjeWNsZS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSB0b3RhbGx5IGVtcHR5IHBpcGVsaW5lLlxuICogVXNlZnVsIGZvciB0ZXN0aW5nIG9yIGNyZWF0aW5nIGEgY3VzdG9tIG9uZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRW1wdHlQaXBlbGluZSgpIHtcbiAgICByZXR1cm4gSHR0cFBpcGVsaW5lLmNyZWF0ZSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZWxpbmUuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIGdsb2JhbCwgZGVmaW5lLCBTeW1ib2wsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgSXRlcmF0b3IgKi9cclxudmFyIF9fZXh0ZW5kcztcclxudmFyIF9fYXNzaWduO1xyXG52YXIgX19yZXN0O1xyXG52YXIgX19kZWNvcmF0ZTtcclxudmFyIF9fcGFyYW07XHJcbnZhciBfX2VzRGVjb3JhdGU7XHJcbnZhciBfX3J1bkluaXRpYWxpemVycztcclxudmFyIF9fcHJvcEtleTtcclxudmFyIF9fc2V0RnVuY3Rpb25OYW1lO1xyXG52YXIgX19tZXRhZGF0YTtcclxudmFyIF9fYXdhaXRlcjtcclxudmFyIF9fZ2VuZXJhdG9yO1xyXG52YXIgX19leHBvcnRTdGFyO1xyXG52YXIgX192YWx1ZXM7XHJcbnZhciBfX3JlYWQ7XHJcbnZhciBfX3NwcmVhZDtcclxudmFyIF9fc3ByZWFkQXJyYXlzO1xyXG52YXIgX19zcHJlYWRBcnJheTtcclxudmFyIF9fYXdhaXQ7XHJcbnZhciBfX2FzeW5jR2VuZXJhdG9yO1xyXG52YXIgX19hc3luY0RlbGVnYXRvcjtcclxudmFyIF9fYXN5bmNWYWx1ZXM7XHJcbnZhciBfX21ha2VUZW1wbGF0ZU9iamVjdDtcclxudmFyIF9faW1wb3J0U3RhcjtcclxudmFyIF9faW1wb3J0RGVmYXVsdDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEluO1xyXG52YXIgX19jcmVhdGVCaW5kaW5nO1xyXG52YXIgX19hZGREaXNwb3NhYmxlUmVzb3VyY2U7XHJcbnZhciBfX2Rpc3Bvc2VSZXNvdXJjZXM7XHJcbnZhciBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbjtcclxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2YgdGhpcyA9PT0gXCJvYmplY3RcIiA/IHRoaXMgOiB7fTtcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIGRlZmluZShcInRzbGliXCIsIFtcImV4cG9ydHNcIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7IGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cykpKTsgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIobW9kdWxlLmV4cG9ydHMpKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QpKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4cG9ydGVyKGV4cG9ydHMsIHByZXZpb3VzKSB7XHJcbiAgICAgICAgaWYgKGV4cG9ydHMgIT09IHJvb3QpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpZCwgdikgeyByZXR1cm4gZXhwb3J0c1tpZF0gPSBwcmV2aW91cyA/IHByZXZpb3VzKGlkLCB2KSA6IHY7IH07XHJcbiAgICB9XHJcbn0pXHJcbihmdW5jdGlvbiAoZXhwb3J0ZXIpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG4gICAgX19leHRlbmRzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcblxyXG4gICAgX19yZXN0ID0gZnVuY3Rpb24gKHMsIGUpIHtcclxuICAgICAgICB2YXIgdCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcclxuICAgICAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2RlY29yYXRlID0gZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICAgICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICAgICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxuICAgIH07XHJcblxyXG4gICAgX19wYXJhbSA9IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19lc0RlY29yYXRlID0gZnVuY3Rpb24gKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcclxuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgICAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcclxuICAgICAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xyXG4gICAgICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcnVuSW5pdGlhbGl6ZXJzID0gZnVuY3Rpb24gKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Byb3BLZXkgPSBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcclxuICAgIH07XHJcblxyXG4gICAgX19zZXRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiAoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX21ldGFkYXRhID0gZnVuY3Rpb24gKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hd2FpdGVyID0gZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZ2VuZXJhdG9yID0gZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgICAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcclxuICAgICAgICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgX19leHBvcnRTdGFyID0gZnVuY3Rpb24obSwgbykge1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxuICAgIH07XHJcblxyXG4gICAgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbiAgICB9KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgb1trMl0gPSBtW2tdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgX192YWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICAgICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmVhZCA9IGZ1bmN0aW9uIChvLCBuKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICAgICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIEBkZXByZWNhdGVkICovXHJcbiAgICBfX3NwcmVhZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIEBkZXByZWNhdGVkICovXHJcbiAgICBfX3NwcmVhZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fc3ByZWFkQXJyYXkgPSBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcclxuICAgICAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0dlbmVyYXRvciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICAgICAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0RlbGVnYXRvciA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIGksIHA7XHJcbiAgICAgICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jVmFsdWVzID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgICAgICByZXR1cm4gY29va2VkO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG4gICAgfSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydFN0YXIgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgX19pbXBvcnREZWZhdWx0ID0gZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgICAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICAgICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbiA9IGZ1bmN0aW9uIChzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgICAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSA9IGZ1bmN0aW9uIChlbnYsIHZhbHVlLCBhc3luYykge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xyXG4gICAgICAgICAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XHJcbiAgICAgICAgICAgIGlmIChhc3luYykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XHJcbiAgICAgICAgICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xyXG4gICAgICAgICAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhc3luYykge1xyXG4gICAgICAgICAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxuICAgIH07XHJcblxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzID0gZnVuY3Rpb24gKGVudikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZhaWwoZSkge1xyXG4gICAgICAgICAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XHJcbiAgICAgICAgICAgIGVudi5oYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByLCBzID0gMDtcclxuICAgICAgICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgICAgICAgICB3aGlsZSAociA9IGVudi5zdGFjay5wb3AoKSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoci5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuYXN5bmMpIHJldHVybiBzIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBzIHw9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhaWwoZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcclxuICAgIH07XHJcblxyXG4gICAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24gPSBmdW5jdGlvbiAocGF0aCwgcHJlc2VydmVKc3gpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgJiYgL15cXC5cXC4/XFwvLy50ZXN0KHBhdGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHN4ID8gcHJlc2VydmVKc3ggPyBcIi5qc3hcIiA6IFwiLmpzXCIgOiBkICYmICghZXh0IHx8ICFjbSkgPyBtIDogKGQgKyBleHQgKyBcIi5cIiArIGNtLnRvTG93ZXJDYXNlKCkgKyBcImpzXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICB9O1xyXG5cclxuICAgIGV4cG9ydGVyKFwiX19leHRlbmRzXCIsIF9fZXh0ZW5kcyk7XHJcbiAgICBleHBvcnRlcihcIl9fYXNzaWduXCIsIF9fYXNzaWduKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZXN0XCIsIF9fcmVzdCk7XHJcbiAgICBleHBvcnRlcihcIl9fZGVjb3JhdGVcIiwgX19kZWNvcmF0ZSk7XHJcbiAgICBleHBvcnRlcihcIl9fcGFyYW1cIiwgX19wYXJhbSk7XHJcbiAgICBleHBvcnRlcihcIl9fZXNEZWNvcmF0ZVwiLCBfX2VzRGVjb3JhdGUpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3J1bkluaXRpYWxpemVyc1wiLCBfX3J1bkluaXRpYWxpemVycyk7XHJcbiAgICBleHBvcnRlcihcIl9fcHJvcEtleVwiLCBfX3Byb3BLZXkpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NldEZ1bmN0aW9uTmFtZVwiLCBfX3NldEZ1bmN0aW9uTmFtZSk7XHJcbiAgICBleHBvcnRlcihcIl9fbWV0YWRhdGFcIiwgX19tZXRhZGF0YSk7XHJcbiAgICBleHBvcnRlcihcIl9fYXdhaXRlclwiLCBfX2F3YWl0ZXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2dlbmVyYXRvclwiLCBfX2dlbmVyYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fZXhwb3J0U3RhclwiLCBfX2V4cG9ydFN0YXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NyZWF0ZUJpbmRpbmdcIiwgX19jcmVhdGVCaW5kaW5nKTtcclxuICAgIGV4cG9ydGVyKFwiX192YWx1ZXNcIiwgX192YWx1ZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3JlYWRcIiwgX19yZWFkKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRcIiwgX19zcHJlYWQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZEFycmF5c1wiLCBfX3NwcmVhZEFycmF5cyk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkQXJyYXlcIiwgX19zcHJlYWRBcnJheSk7XHJcbiAgICBleHBvcnRlcihcIl9fYXdhaXRcIiwgX19hd2FpdCk7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNHZW5lcmF0b3JcIiwgX19hc3luY0dlbmVyYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNEZWxlZ2F0b3JcIiwgX19hc3luY0RlbGVnYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNWYWx1ZXNcIiwgX19hc3luY1ZhbHVlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fbWFrZVRlbXBsYXRlT2JqZWN0XCIsIF9fbWFrZVRlbXBsYXRlT2JqZWN0KTtcclxuICAgIGV4cG9ydGVyKFwiX19pbXBvcnRTdGFyXCIsIF9faW1wb3J0U3Rhcik7XHJcbiAgICBleHBvcnRlcihcIl9faW1wb3J0RGVmYXVsdFwiLCBfX2ltcG9ydERlZmF1bHQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0XCIsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0XCIsIF9fY2xhc3NQcml2YXRlRmllbGRTZXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkSW5cIiwgX19jbGFzc1ByaXZhdGVGaWVsZEluKTtcclxuICAgIGV4cG9ydGVyKFwiX19hZGREaXNwb3NhYmxlUmVzb3VyY2VcIiwgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2Rpc3Bvc2VSZXNvdXJjZXNcIiwgX19kaXNwb3NlUmVzb3VyY2VzKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb25cIiwgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24pO1xyXG59KTtcclxuXHJcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgX19leHRlbmRzLFxyXG4gICAgX19hc3NpZ24sXHJcbiAgICBfX3Jlc3QsXHJcbiAgICBfX2RlY29yYXRlLFxyXG4gICAgX19wYXJhbSxcclxuICAgIF9fZXNEZWNvcmF0ZSxcclxuICAgIF9fcnVuSW5pdGlhbGl6ZXJzLFxyXG4gICAgX19wcm9wS2V5LFxyXG4gICAgX19zZXRGdW5jdGlvbk5hbWUsXHJcbiAgICBfX21ldGFkYXRhLFxyXG4gICAgX19hd2FpdGVyLFxyXG4gICAgX19nZW5lcmF0b3IsXHJcbiAgICBfX2V4cG9ydFN0YXIsXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmcsXHJcbiAgICBfX3ZhbHVlcyxcclxuICAgIF9fcmVhZCxcclxuICAgIF9fc3ByZWFkLFxyXG4gICAgX19zcHJlYWRBcnJheXMsXHJcbiAgICBfX3NwcmVhZEFycmF5LFxyXG4gICAgX19hd2FpdCxcclxuICAgIF9fYXN5bmNHZW5lcmF0b3IsXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yLFxyXG4gICAgX19hc3luY1ZhbHVlcyxcclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxyXG4gICAgX19pbXBvcnRTdGFyLFxyXG4gICAgX19pbXBvcnREZWZhdWx0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXHJcbiAgICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcclxuICAgIF9fZGlzcG9zZVJlc291cmNlcyxcclxuICAgIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxyXG59KTtcclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3Qgbm9kZV9vc18xID0gcmVxdWlyZShcIm5vZGU6b3NcIik7XG5jb25zdCBub2RlX3V0aWxfMSA9IHRzbGliXzEuX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJub2RlOnV0aWxcIikpO1xuY29uc3QgcHJvY2VzcyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOnByb2Nlc3NcIikpO1xuZnVuY3Rpb24gbG9nKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgJHtub2RlX3V0aWxfMS5kZWZhdWx0LmZvcm1hdChtZXNzYWdlLCAuLi5hcmdzKX0ke25vZGVfb3NfMS5FT0x9YCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2cuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG5jb25zdCBkZWJ1Z0VudlZhcmlhYmxlID0gKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LkRFQlVHKSB8fCB1bmRlZmluZWQ7XG5sZXQgZW5hYmxlZFN0cmluZztcbmxldCBlbmFibGVkTmFtZXNwYWNlcyA9IFtdO1xubGV0IHNraXBwZWROYW1lc3BhY2VzID0gW107XG5jb25zdCBkZWJ1Z2dlcnMgPSBbXTtcbmlmIChkZWJ1Z0VudlZhcmlhYmxlKSB7XG4gICAgZW5hYmxlKGRlYnVnRW52VmFyaWFibGUpO1xufVxuY29uc3QgZGVidWdPYmogPSBPYmplY3QuYXNzaWduKChuYW1lc3BhY2UpID0+IHtcbiAgICByZXR1cm4gY3JlYXRlRGVidWdnZXIobmFtZXNwYWNlKTtcbn0sIHtcbiAgICBlbmFibGUsXG4gICAgZW5hYmxlZCxcbiAgICBkaXNhYmxlLFxuICAgIGxvZzogbG9nX2pzXzEubG9nLFxufSk7XG5mdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuICAgIGVuYWJsZWRTdHJpbmcgPSBuYW1lc3BhY2VzO1xuICAgIGVuYWJsZWROYW1lc3BhY2VzID0gW107XG4gICAgc2tpcHBlZE5hbWVzcGFjZXMgPSBbXTtcbiAgICBjb25zdCB3aWxkY2FyZCA9IC9cXCovZztcbiAgICBjb25zdCBuYW1lc3BhY2VMaXN0ID0gbmFtZXNwYWNlcy5zcGxpdChcIixcIikubWFwKChucykgPT4gbnMudHJpbSgpLnJlcGxhY2Uod2lsZGNhcmQsIFwiLio/XCIpKTtcbiAgICBmb3IgKGNvbnN0IG5zIG9mIG5hbWVzcGFjZUxpc3QpIHtcbiAgICAgICAgaWYgKG5zLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgICBza2lwcGVkTmFtZXNwYWNlcy5wdXNoKG5ldyBSZWdFeHAoYF4ke25zLnN1YnN0cigxKX0kYCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZW5hYmxlZE5hbWVzcGFjZXMucHVzaChuZXcgUmVnRXhwKGBeJHtuc30kYCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgZGVidWdnZXJzKSB7XG4gICAgICAgIGluc3RhbmNlLmVuYWJsZWQgPSBlbmFibGVkKGluc3RhbmNlLm5hbWVzcGFjZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5hYmxlZChuYW1lc3BhY2UpIHtcbiAgICBpZiAobmFtZXNwYWNlLmVuZHNXaXRoKFwiKlwiKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBza2lwcGVkIG9mIHNraXBwZWROYW1lc3BhY2VzKSB7XG4gICAgICAgIGlmIChza2lwcGVkLnRlc3QobmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgZW5hYmxlZE5hbWVzcGFjZSBvZiBlbmFibGVkTmFtZXNwYWNlcykge1xuICAgICAgICBpZiAoZW5hYmxlZE5hbWVzcGFjZS50ZXN0KG5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZW5hYmxlZFN0cmluZyB8fCBcIlwiO1xuICAgIGVuYWJsZShcIlwiKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY3JlYXRlRGVidWdnZXIobmFtZXNwYWNlKSB7XG4gICAgY29uc3QgbmV3RGVidWdnZXIgPSBPYmplY3QuYXNzaWduKGRlYnVnLCB7XG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQobmFtZXNwYWNlKSxcbiAgICAgICAgZGVzdHJveSxcbiAgICAgICAgbG9nOiBkZWJ1Z09iai5sb2csXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgZXh0ZW5kLFxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKCFuZXdEZWJ1Z2dlci5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXJnc1swXSA9IGAke25hbWVzcGFjZX0gJHthcmdzWzBdfWA7XG4gICAgICAgIH1cbiAgICAgICAgbmV3RGVidWdnZXIubG9nKC4uLmFyZ3MpO1xuICAgIH1cbiAgICBkZWJ1Z2dlcnMucHVzaChuZXdEZWJ1Z2dlcik7XG4gICAgcmV0dXJuIG5ld0RlYnVnZ2VyO1xufVxuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBjb25zdCBpbmRleCA9IGRlYnVnZ2Vycy5pbmRleE9mKHRoaXMpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGRlYnVnZ2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSkge1xuICAgIGNvbnN0IG5ld0RlYnVnZ2VyID0gY3JlYXRlRGVidWdnZXIoYCR7dGhpcy5uYW1lc3BhY2V9OiR7bmFtZXNwYWNlfWApO1xuICAgIG5ld0RlYnVnZ2VyLmxvZyA9IHRoaXMubG9nO1xuICAgIHJldHVybiBuZXdEZWJ1Z2dlcjtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGRlYnVnT2JqO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVidWcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZUxvZ2dlciA9IHZvaWQgMDtcbmV4cG9ydHMuc2V0TG9nTGV2ZWwgPSBzZXRMb2dMZXZlbDtcbmV4cG9ydHMuZ2V0TG9nTGV2ZWwgPSBnZXRMb2dMZXZlbDtcbmV4cG9ydHMuY3JlYXRlQ2xpZW50TG9nZ2VyID0gY3JlYXRlQ2xpZW50TG9nZ2VyO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGRlYnVnX2pzXzEgPSB0c2xpYl8xLl9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9kZWJ1Zy5qc1wiKSk7XG5jb25zdCByZWdpc3RlcmVkTG9nZ2VycyA9IG5ldyBTZXQoKTtcbmNvbnN0IGxvZ0xldmVsRnJvbUVudiA9ICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5BWlVSRV9MT0dfTEVWRUwpIHx8IHVuZGVmaW5lZDtcbmxldCBhenVyZUxvZ0xldmVsO1xuLyoqXG4gKiBUaGUgQXp1cmVMb2dnZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIG92ZXJyaWRpbmcgd2hlcmUgbG9ncyBhcmUgb3V0cHV0IHRvLlxuICogQnkgZGVmYXVsdCwgbG9ncyBhcmUgc2VudCB0byBzdGRlcnIuXG4gKiBPdmVycmlkZSB0aGUgYGxvZ2AgbWV0aG9kIHRvIHJlZGlyZWN0IGxvZ3MgdG8gYW5vdGhlciBsb2NhdGlvbi5cbiAqL1xuZXhwb3J0cy5BenVyZUxvZ2dlciA9ICgwLCBkZWJ1Z19qc18xLmRlZmF1bHQpKFwiYXp1cmVcIik7XG5leHBvcnRzLkF6dXJlTG9nZ2VyLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgZGVidWdfanNfMS5kZWZhdWx0LmxvZyguLi5hcmdzKTtcbn07XG5jb25zdCBBWlVSRV9MT0dfTEVWRUxTID0gW1widmVyYm9zZVwiLCBcImluZm9cIiwgXCJ3YXJuaW5nXCIsIFwiZXJyb3JcIl07XG5pZiAobG9nTGV2ZWxGcm9tRW52KSB7XG4gICAgLy8gYXZvaWQgY2FsbGluZyBzZXRMb2dMZXZlbCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYSBtaXMtc2V0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGNyYXNoXG4gICAgaWYgKGlzQXp1cmVMb2dMZXZlbChsb2dMZXZlbEZyb21FbnYpKSB7XG4gICAgICAgIHNldExvZ0xldmVsKGxvZ0xldmVsRnJvbUVudik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBBWlVSRV9MT0dfTEVWRUwgc2V0IHRvIHVua25vd24gbG9nIGxldmVsICcke2xvZ0xldmVsRnJvbUVudn0nOyBsb2dnaW5nIGlzIG5vdCBlbmFibGVkLiBBY2NlcHRhYmxlIHZhbHVlczogJHtBWlVSRV9MT0dfTEVWRUxTLmpvaW4oXCIsIFwiKX0uYCk7XG4gICAgfVxufVxuLyoqXG4gKiBJbW1lZGlhdGVseSBlbmFibGVzIGxvZ2dpbmcgYXQgdGhlIHNwZWNpZmllZCBsb2cgbGV2ZWwuIElmIG5vIGxldmVsIGlzIHNwZWNpZmllZCwgbG9nZ2luZyBpcyBkaXNhYmxlZC5cbiAqIEBwYXJhbSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgdG8gZW5hYmxlIGZvciBsb2dnaW5nLlxuICogT3B0aW9ucyBmcm9tIG1vc3QgdmVyYm9zZSB0byBsZWFzdCB2ZXJib3NlIGFyZTpcbiAqIC0gdmVyYm9zZVxuICogLSBpbmZvXG4gKiAtIHdhcm5pbmdcbiAqIC0gZXJyb3JcbiAqL1xuZnVuY3Rpb24gc2V0TG9nTGV2ZWwobGV2ZWwpIHtcbiAgICBpZiAobGV2ZWwgJiYgIWlzQXp1cmVMb2dMZXZlbChsZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvZyBsZXZlbCAnJHtsZXZlbH0nLiBBY2NlcHRhYmxlIHZhbHVlczogJHtBWlVSRV9MT0dfTEVWRUxTLmpvaW4oXCIsXCIpfWApO1xuICAgIH1cbiAgICBhenVyZUxvZ0xldmVsID0gbGV2ZWw7XG4gICAgY29uc3QgZW5hYmxlZE5hbWVzcGFjZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxvZ2dlciBvZiByZWdpc3RlcmVkTG9nZ2Vycykge1xuICAgICAgICBpZiAoc2hvdWxkRW5hYmxlKGxvZ2dlcikpIHtcbiAgICAgICAgICAgIGVuYWJsZWROYW1lc3BhY2VzLnB1c2gobG9nZ2VyLm5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVidWdfanNfMS5kZWZhdWx0LmVuYWJsZShlbmFibGVkTmFtZXNwYWNlcy5qb2luKFwiLFwiKSk7XG59XG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IHNwZWNpZmllZCBsb2cgbGV2ZWwuXG4gKi9cbmZ1bmN0aW9uIGdldExvZ0xldmVsKCkge1xuICAgIHJldHVybiBhenVyZUxvZ0xldmVsO1xufVxuY29uc3QgbGV2ZWxNYXAgPSB7XG4gICAgdmVyYm9zZTogNDAwLFxuICAgIGluZm86IDMwMCxcbiAgICB3YXJuaW5nOiAyMDAsXG4gICAgZXJyb3I6IDEwMCxcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBsb2dnZXIgZm9yIHVzZSBieSB0aGUgQXp1cmUgU0RLcyB0aGF0IGluaGVyaXRzIGZyb20gYEF6dXJlTG9nZ2VyYC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZSBvZiB0aGUgU0RLIHBhY2thZ2UuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudExvZ2dlcihuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBjbGllbnRSb290TG9nZ2VyID0gZXhwb3J0cy5BenVyZUxvZ2dlci5leHRlbmQobmFtZXNwYWNlKTtcbiAgICBwYXRjaExvZ01ldGhvZChleHBvcnRzLkF6dXJlTG9nZ2VyLCBjbGllbnRSb290TG9nZ2VyKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwiZXJyb3JcIiksXG4gICAgICAgIHdhcm5pbmc6IGNyZWF0ZUxvZ2dlcihjbGllbnRSb290TG9nZ2VyLCBcIndhcm5pbmdcIiksXG4gICAgICAgIGluZm86IGNyZWF0ZUxvZ2dlcihjbGllbnRSb290TG9nZ2VyLCBcImluZm9cIiksXG4gICAgICAgIHZlcmJvc2U6IGNyZWF0ZUxvZ2dlcihjbGllbnRSb290TG9nZ2VyLCBcInZlcmJvc2VcIiksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhdGNoTG9nTWV0aG9kKHBhcmVudCwgY2hpbGQpIHtcbiAgICBjaGlsZC5sb2cgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBwYXJlbnQubG9nKC4uLmFyZ3MpO1xuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVMb2dnZXIocGFyZW50LCBsZXZlbCkge1xuICAgIGNvbnN0IGxvZ2dlciA9IE9iamVjdC5hc3NpZ24ocGFyZW50LmV4dGVuZChsZXZlbCksIHtcbiAgICAgICAgbGV2ZWwsXG4gICAgfSk7XG4gICAgcGF0Y2hMb2dNZXRob2QocGFyZW50LCBsb2dnZXIpO1xuICAgIGlmIChzaG91bGRFbmFibGUobG9nZ2VyKSkge1xuICAgICAgICBjb25zdCBlbmFibGVkTmFtZXNwYWNlcyA9IGRlYnVnX2pzXzEuZGVmYXVsdC5kaXNhYmxlKCk7XG4gICAgICAgIGRlYnVnX2pzXzEuZGVmYXVsdC5lbmFibGUoZW5hYmxlZE5hbWVzcGFjZXMgKyBcIixcIiArIGxvZ2dlci5uYW1lc3BhY2UpO1xuICAgIH1cbiAgICByZWdpc3RlcmVkTG9nZ2Vycy5hZGQobG9nZ2VyKTtcbiAgICByZXR1cm4gbG9nZ2VyO1xufVxuZnVuY3Rpb24gc2hvdWxkRW5hYmxlKGxvZ2dlcikge1xuICAgIHJldHVybiBCb29sZWFuKGF6dXJlTG9nTGV2ZWwgJiYgbGV2ZWxNYXBbbG9nZ2VyLmxldmVsXSA8PSBsZXZlbE1hcFthenVyZUxvZ0xldmVsXSk7XG59XG5mdW5jdGlvbiBpc0F6dXJlTG9nTGV2ZWwobG9nTGV2ZWwpIHtcbiAgICByZXR1cm4gQVpVUkVfTE9HX0xFVkVMUy5pbmNsdWRlcyhsb2dMZXZlbCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZ2dlciA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG5leHBvcnRzLmxvZ2dlciA9ICgwLCBsb2dnZXJfMS5jcmVhdGVDbGllbnRMb2dnZXIpKFwiY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWJvcnRFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogVGhpcyBlcnJvciBpcyB0aHJvd24gd2hlbiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGhhcyBiZWVuIGFib3J0ZWQuXG4gKiBDaGVjayBmb3IgdGhpcyBlcnJvciBieSB0ZXN0aW5nIHRoZSBgbmFtZWAgdGhhdCB0aGUgbmFtZSBwcm9wZXJ0eSBvZiB0aGVcbiAqIGVycm9yIG1hdGNoZXMgYFwiQWJvcnRFcnJvclwiYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gKiBjb250cm9sbGVyLmFib3J0KCk7XG4gKiB0cnkge1xuICogICBkb0FzeW5jV29yayhjb250cm9sbGVyLnNpZ25hbClcbiAqIH0gY2F0Y2ggKGUpIHtcbiAqICAgaWYgKGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gKiAgICAgLy8gaGFuZGxlIGFib3J0IGVycm9yIGhlcmUuXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5jbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICAgIH1cbn1cbmV4cG9ydHMuQWJvcnRFcnJvciA9IEFib3J0RXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYm9ydEVycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWJvcnRFcnJvciA9IHZvaWQgMDtcbnZhciBBYm9ydEVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi9BYm9ydEVycm9yLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWJvcnRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQWJvcnRFcnJvcl9qc18xLkFib3J0RXJyb3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUFib3J0YWJsZVByb21pc2UgPSBjcmVhdGVBYm9ydGFibGVQcm9taXNlO1xuY29uc3QgYWJvcnRfY29udHJvbGxlcl8xID0gcmVxdWlyZShcIkBhenVyZS9hYm9ydC1jb250cm9sbGVyXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGFuIGFib3J0YWJsZSBwcm9taXNlLlxuICogQHBhcmFtIGJ1aWxkUHJvbWlzZSAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1bmN0aW9ucyBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGFib3J0YWJsZSBwcm9taXNlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgY2FuIGJlIGFib3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFib3J0YWJsZVByb21pc2UoYnVpbGRQcm9taXNlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgeyBjbGVhbnVwQmVmb3JlQWJvcnQsIGFib3J0U2lnbmFsLCBhYm9ydEVycm9yTXNnIH0gPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBmdW5jdGlvbiByZWplY3RPbkFib3J0KCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBhYm9ydF9jb250cm9sbGVyXzEuQWJvcnRFcnJvcihhYm9ydEVycm9yTXNnICE9PSBudWxsICYmIGFib3J0RXJyb3JNc2cgIT09IHZvaWQgMCA/IGFib3J0RXJyb3JNc2cgOiBcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBhYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uQWJvcnQoKSB7XG4gICAgICAgICAgICBjbGVhbnVwQmVmb3JlQWJvcnQgPT09IG51bGwgfHwgY2xlYW51cEJlZm9yZUFib3J0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGVhbnVwQmVmb3JlQWJvcnQoKTtcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgICAgICAgcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBhYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdE9uQWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYnVpbGRQcm9taXNlKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh4KTtcbiAgICAgICAgICAgIH0sICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgYWJvcnRTaWduYWwgPT09IG51bGwgfHwgYWJvcnRTaWduYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZUFib3J0YWJsZVByb21pc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlID0gZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZTtcbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIHZhbHVlIGJldHdlZW4gYSBsb3dlciBhbmQgdXBwZXIgYm91bmQsXG4gKiBpbmNsdXNpdmUgb2YgYm90aCBib3VuZHMuXG4gKiBOb3RlIHRoYXQgdGhpcyB1c2VzIE1hdGgucmFuZG9tIGFuZCBpc24ndCBzZWN1cmUuIElmIHlvdSBuZWVkIHRvIHVzZVxuICogdGhpcyBmb3IgYW55IGtpbmQgb2Ygc2VjdXJpdHkgcHVycG9zZSwgZmluZCBhIGJldHRlciBzb3VyY2Ugb2YgcmFuZG9tLlxuICogQHBhcmFtIG1pbiAtIFRoZSBzbWFsbGVzdCBpbnRlZ2VyIHZhbHVlIGFsbG93ZWQuXG4gKiBAcGFyYW0gbWF4IC0gVGhlIGxhcmdlc3QgaW50ZWdlciB2YWx1ZSBhbGxvd2VkLlxuICovXG5mdW5jdGlvbiBnZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlKG1pbiwgbWF4KSB7XG4gICAgLy8gTWFrZSBzdXJlIGlucHV0cyBhcmUgaW50ZWdlcnMuXG4gICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgIC8vIFBpY2sgYSByYW5kb20gb2Zmc2V0IGZyb20gemVybyB0byB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UuXG4gICAgLy8gU2luY2UgTWF0aC5yYW5kb20oKSBjYW4gbmV2ZXIgcmV0dXJuIDEsIHdlIGhhdmUgdG8gbWFrZSB0aGUgcmFuZ2Ugb25lIGxhcmdlclxuICAgIC8vIGluIG9yZGVyIHRvIGJlIGluY2x1c2l2ZSBvZiB0aGUgbWF4aW11bSB2YWx1ZSBhZnRlciB3ZSB0YWtlIHRoZSBmbG9vci5cbiAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICAgIHJldHVybiBvZmZzZXQgKyBtaW47XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYW5kb20uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWxheSA9IGRlbGF5O1xuZXhwb3J0cy5jYWxjdWxhdGVSZXRyeURlbGF5ID0gY2FsY3VsYXRlUmV0cnlEZWxheTtcbmNvbnN0IGNyZWF0ZUFib3J0YWJsZVByb21pc2VfanNfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanNcIik7XG5jb25zdCByYW5kb21fanNfMSA9IHJlcXVpcmUoXCIuL3JhbmRvbS5qc1wiKTtcbmNvbnN0IFN0YW5kYXJkQWJvcnRNZXNzYWdlID0gXCJUaGUgZGVsYXkgd2FzIGFib3J0ZWQuXCI7XG4vKipcbiAqIEEgd3JhcHBlciBmb3Igc2V0VGltZW91dCB0aGF0IHJlc29sdmVzIGEgcHJvbWlzZSBhZnRlciB0aW1lSW5NcyBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gdGltZUluTXMgLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBiZSBkZWxheWVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGVsYXkgLSBjdXJyZW50bHkgYWJvcnQgb3B0aW9uc1xuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGFmdGVyIHRpbWVJbk1zXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KHRpbWVJbk1zLCBvcHRpb25zKSB7XG4gICAgbGV0IHRva2VuO1xuICAgIGNvbnN0IHsgYWJvcnRTaWduYWwsIGFib3J0RXJyb3JNc2cgfSA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgIHJldHVybiAoMCwgY3JlYXRlQWJvcnRhYmxlUHJvbWlzZV9qc18xLmNyZWF0ZUFib3J0YWJsZVByb21pc2UpKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRva2VuID0gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lSW5Ncyk7XG4gICAgfSwge1xuICAgICAgICBjbGVhbnVwQmVmb3JlQWJvcnQ6ICgpID0+IGNsZWFyVGltZW91dCh0b2tlbiksXG4gICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICBhYm9ydEVycm9yTXNnOiBhYm9ydEVycm9yTXNnICE9PSBudWxsICYmIGFib3J0RXJyb3JNc2cgIT09IHZvaWQgMCA/IGFib3J0RXJyb3JNc2cgOiBTdGFuZGFyZEFib3J0TWVzc2FnZSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZGVsYXkgaW50ZXJ2YWwgZm9yIHJldHJ5IGF0dGVtcHRzIHVzaW5nIGV4cG9uZW50aWFsIGRlbGF5IHdpdGggaml0dGVyLlxuICogQHBhcmFtIHJldHJ5QXR0ZW1wdCAtIFRoZSBjdXJyZW50IHJldHJ5IGF0dGVtcHQgbnVtYmVyLlxuICogQHBhcmFtIGNvbmZpZyAtIFRoZSBleHBvbmVudGlhbCByZXRyeSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNhbGN1bGF0ZWQgcmV0cnkgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZVJldHJ5RGVsYXkocmV0cnlBdHRlbXB0LCBjb25maWcpIHtcbiAgICAvLyBFeHBvbmVudGlhbGx5IGluY3JlYXNlIHRoZSBkZWxheSBlYWNoIHRpbWVcbiAgICBjb25zdCBleHBvbmVudGlhbERlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXlJbk1zICogTWF0aC5wb3coMiwgcmV0cnlBdHRlbXB0KTtcbiAgICAvLyBEb24ndCBsZXQgdGhlIGRlbGF5IGV4Y2VlZCB0aGUgbWF4aW11bVxuICAgIGNvbnN0IGNsYW1wZWREZWxheSA9IE1hdGgubWluKGNvbmZpZy5tYXhSZXRyeURlbGF5SW5NcywgZXhwb25lbnRpYWxEZWxheSk7XG4gICAgLy8gQWxsb3cgdGhlIGZpbmFsIHZhbHVlIHRvIGhhdmUgc29tZSBcImppdHRlclwiICh3aXRoaW4gNTAlIG9mIHRoZSBkZWxheSBzaXplKSBzb1xuICAgIC8vIHRoYXQgcmV0cmllcyBhY3Jvc3MgbXVsdGlwbGUgY2xpZW50cyBkb24ndCBvY2N1ciBzaW11bHRhbmVvdXNseS5cbiAgICBjb25zdCByZXRyeUFmdGVySW5NcyA9IGNsYW1wZWREZWxheSAvIDIgKyAoMCwgcmFuZG9tX2pzXzEuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZSkoMCwgY2xhbXBlZERlbGF5IC8gMik7XG4gICAgcmV0dXJuIHsgcmV0cnlBZnRlckluTXMgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2FuY2VsYWJsZVByb21pc2VSYWNlID0gY2FuY2VsYWJsZVByb21pc2VSYWNlO1xuLyoqXG4gKiBwcm9taXNlLnJhY2UoKSB3cmFwcGVyIHRoYXQgYWJvcnRzIHJlc3Qgb2YgcHJvbWlzZXMgYXMgc29vbiBhcyB0aGUgZmlyc3QgcHJvbWlzZSBzZXR0bGVzLlxuICovXG5hc3luYyBmdW5jdGlvbiBjYW5jZWxhYmxlUHJvbWlzZVJhY2UoYWJvcnRhYmxlUHJvbWlzZUJ1aWxkZXJzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBhYm9ydGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGZ1bmN0aW9uIGFib3J0SGFuZGxlcigpIHtcbiAgICAgICAgYWJvcnRlci5hYm9ydCgpO1xuICAgIH1cbiAgICAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKGFib3J0YWJsZVByb21pc2VCdWlsZGVycy5tYXAoKHApID0+IHAoeyBhYm9ydFNpZ25hbDogYWJvcnRlci5zaWduYWwgfSkpKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIGFib3J0ZXIuYWJvcnQoKTtcbiAgICAgICAgKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJvcnRlclV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcbi8qKlxuICogSGVscGVyIHRvIGRldGVybWluZSB3aGVuIGFuIGlucHV0IGlzIGEgZ2VuZXJpYyBKUyBvYmplY3QuXG4gKiBAcmV0dXJucyB0cnVlIHdoZW4gaW5wdXQgaXMgYW4gb2JqZWN0IHR5cGUgdGhhdCBpcyBub3QgbnVsbCwgQXJyYXksIFJlZ0V4cCwgb3IgRGF0ZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBpbnB1dCAhPT0gbnVsbCAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShpbnB1dCkgJiZcbiAgICAgICAgIShpbnB1dCBpbnN0YW5jZW9mIFJlZ0V4cCkgJiZcbiAgICAgICAgIShpbnB1dCBpbnN0YW5jZW9mIERhdGUpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuZXhwb3J0cy5nZXRFcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2U7XG5jb25zdCBvYmplY3RfanNfMSA9IHJlcXVpcmUoXCIuL29iamVjdC5qc1wiKTtcbi8qKlxuICogVHlwZWd1YXJkIGZvciBhbiBlcnJvciBvYmplY3Qgc2hhcGUgKGhhcyBuYW1lIGFuZCBtZXNzYWdlKVxuICogQHBhcmFtIGUgLSBTb21ldGhpbmcgY2F1Z2h0IGJ5IGEgY2F0Y2ggY2xhdXNlLlxuICovXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgICBpZiAoKDAsIG9iamVjdF9qc18xLmlzT2JqZWN0KShlKSkge1xuICAgICAgICBjb25zdCBoYXNOYW1lID0gdHlwZW9mIGUubmFtZSA9PT0gXCJzdHJpbmdcIjtcbiAgICAgICAgY29uc3QgaGFzTWVzc2FnZSA9IHR5cGVvZiBlLm1lc3NhZ2UgPT09IFwic3RyaW5nXCI7XG4gICAgICAgIHJldHVybiBoYXNOYW1lICYmIGhhc01lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogR2l2ZW4gd2hhdCBpcyB0aG91Z2h0IHRvIGJlIGFuIGVycm9yIG9iamVjdCwgcmV0dXJuIHRoZSBtZXNzYWdlIGlmIHBvc3NpYmxlLlxuICogSWYgdGhlIG1lc3NhZ2UgaXMgbWlzc2luZywgcmV0dXJucyBhIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIGlucHV0LlxuICogQHBhcmFtIGUgLSBTb21ldGhpbmcgdGhyb3duIGZyb20gYSB0cnkgYmxvY2tcbiAqIEByZXR1cm5zIFRoZSBlcnJvciBtZXNzYWdlIG9yIGEgc3RyaW5nIG9mIHRoZSBpbnB1dFxuICovXG5mdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoZSkge1xuICAgIGlmIChpc0Vycm9yKGUpKSB7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgc3RyaW5naWZpZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIgJiYgZSkge1xuICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdpZmllZCA9IFN0cmluZyhlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzdHJpbmdpZmllZCA9IFwiW3VuYWJsZSB0byBzdHJpbmdpZnkgaW5wdXRdXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBVbmtub3duIGVycm9yICR7c3RyaW5naWZpZWR9YDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbXB1dGVTaGEyNTZIbWFjID0gY29tcHV0ZVNoYTI1NkhtYWM7XG5leHBvcnRzLmNvbXB1dGVTaGEyNTZIYXNoID0gY29tcHV0ZVNoYTI1Nkhhc2g7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCJjcnlwdG9cIik7XG4vKipcbiAqIEdlbmVyYXRlcyBhIFNIQS0yNTYgSE1BQyBzaWduYXR1cmUuXG4gKiBAcGFyYW0ga2V5IC0gVGhlIEhNQUMga2V5IHJlcHJlc2VudGVkIGFzIGEgYmFzZTY0IHN0cmluZywgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY3J5cHRvZ3JhcGhpYyBITUFDIGhhc2guXG4gKiBAcGFyYW0gc3RyaW5nVG9TaWduIC0gVGhlIGRhdGEgdG8gYmUgc2lnbmVkLlxuICogQHBhcmFtIGVuY29kaW5nIC0gVGhlIHRleHR1YWwgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgcmV0dXJuZWQgSE1BQyBkaWdlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVTaGEyNTZIbWFjKGtleSwgc3RyaW5nVG9TaWduLCBlbmNvZGluZykge1xuICAgIGNvbnN0IGRlY29kZWRLZXkgPSBCdWZmZXIuZnJvbShrZXksIFwiYmFzZTY0XCIpO1xuICAgIHJldHVybiAoMCwgY3J5cHRvXzEuY3JlYXRlSG1hYykoXCJzaGEyNTZcIiwgZGVjb2RlZEtleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KGVuY29kaW5nKTtcbn1cbi8qKlxuICogR2VuZXJhdGVzIGEgU0hBLTI1NiBoYXNoLlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgZGF0YSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgaGFzaC5cbiAqIEBwYXJhbSBlbmNvZGluZyAtIFRoZSB0ZXh0dWFsIGVuY29kaW5nIHRvIHVzZSBmb3IgdGhlIHJldHVybmVkIGhhc2guXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVTaGEyNTZIYXNoKGNvbnRlbnQsIGVuY29kaW5nKSB7XG4gICAgcmV0dXJuICgwLCBjcnlwdG9fMS5jcmVhdGVIYXNoKShcInNoYTI1NlwiKS51cGRhdGUoY29udGVudCkuZGlnZXN0KGVuY29kaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNoYTI1Ni5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRGVmaW5lZCA9IGlzRGVmaW5lZDtcbmV4cG9ydHMuaXNPYmplY3RXaXRoUHJvcGVydGllcyA9IGlzT2JqZWN0V2l0aFByb3BlcnRpZXM7XG5leHBvcnRzLm9iamVjdEhhc1Byb3BlcnR5ID0gb2JqZWN0SGFzUHJvcGVydHk7XG4vKipcbiAqIEhlbHBlciBUeXBlR3VhcmQgdGhhdCBjaGVja3MgaWYgc29tZXRoaW5nIGlzIGRlZmluZWQgb3Igbm90LlxuICogQHBhcmFtIHRoaW5nIC0gQW55dGhpbmdcbiAqL1xuZnVuY3Rpb24gaXNEZWZpbmVkKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0aGluZyAhPT0gbnVsbDtcbn1cbi8qKlxuICogSGVscGVyIFR5cGVHdWFyZCB0aGF0IGNoZWNrcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHRoaW5nIC0gQW55dGhpbmcuXG4gKiBAcGFyYW0gcHJvcGVydGllcyAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGFwcGVhciBpbiB0aGUgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc09iamVjdFdpdGhQcm9wZXJ0aWVzKHRoaW5nLCBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKCFpc0RlZmluZWQodGhpbmcpIHx8IHR5cGVvZiB0aGluZyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICBpZiAoIW9iamVjdEhhc1Byb3BlcnR5KHRoaW5nLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogSGVscGVyIFR5cGVHdWFyZCB0aGF0IGNoZWNrcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB0aGluZyAtIEFueSBvYmplY3QuXG4gKiBAcGFyYW0gcHJvcGVydHkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYXBwZWFyIGluIHRoZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdEhhc1Byb3BlcnR5KHRoaW5nLCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiAoaXNEZWZpbmVkKHRoaW5nKSAmJiB0eXBlb2YgdGhpbmcgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydHkgaW4gdGhpbmcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZUd1YXJkcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJhbmRvbVVVSUQgPSByYW5kb21VVUlEO1xuY29uc3QgY3J5cHRvXzEgPSByZXF1aXJlKFwiY3J5cHRvXCIpO1xuLy8gTk9URTogVGhpcyBpcyBhIHdvcmthcm91bmQgdW50aWwgd2UgY2FuIHVzZSBgZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tVVVJRGAgaW4gTm9kZS5qcyAxOSsuXG5jb25zdCB1dWlkRnVuY3Rpb24gPSB0eXBlb2YgKChfYSA9IGdsb2JhbFRoaXMgPT09IG51bGwgfHwgZ2xvYmFsVGhpcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2xvYmFsVGhpcy5jcnlwdG8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yYW5kb21VVUlEKSA9PT0gXCJmdW5jdGlvblwiXG4gICAgPyBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlELmJpbmQoZ2xvYmFsVGhpcy5jcnlwdG8pXG4gICAgOiBjcnlwdG9fMS5yYW5kb21VVUlEO1xuLyoqXG4gKiBHZW5lcmF0ZWQgVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXJcbiAqXG4gKiBAcmV0dXJucyBSRkM0MTIyIHY0IFVVSUQuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbVVVSUQoKSB7XG4gICAgcmV0dXJuIHV1aWRGdW5jdGlvbigpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXVpZFV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbnZhciBfYSwgX2IsIF9jLCBfZDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNSZWFjdE5hdGl2ZSA9IGV4cG9ydHMuaXNOb2RlUnVudGltZSA9IGV4cG9ydHMuaXNOb2RlID0gZXhwb3J0cy5pc05vZGVMaWtlID0gZXhwb3J0cy5pc0J1biA9IGV4cG9ydHMuaXNEZW5vID0gZXhwb3J0cy5pc1dlYldvcmtlciA9IGV4cG9ydHMuaXNCcm93c2VyID0gdm9pZCAwO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBXZWIgQnJvd3Nlci5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbm8td2luZG93XG5leHBvcnRzLmlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIGEgV2ViIFdvcmtlci5cbiAqL1xuZXhwb3J0cy5pc1dlYldvcmtlciA9IHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiICYmXG4gICAgdHlwZW9mIChzZWxmID09PSBudWxsIHx8IHNlbGYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGYuaW1wb3J0U2NyaXB0cykgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICgoKF9hID0gc2VsZi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSBcIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXCIgfHxcbiAgICAgICAgKChfYiA9IHNlbGYuY29uc3RydWN0b3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5uYW1lKSA9PT0gXCJTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVcIiB8fFxuICAgICAgICAoKF9jID0gc2VsZi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLm5hbWUpID09PSBcIlNoYXJlZFdvcmtlckdsb2JhbFNjb3BlXCIpO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgRGVuby5cbiAqL1xuZXhwb3J0cy5pc0Rlbm8gPSB0eXBlb2YgRGVubyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBEZW5vLnZlcnNpb24gIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2YgRGVuby52ZXJzaW9uLmRlbm8gIT09IFwidW5kZWZpbmVkXCI7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBCdW4uc2guXG4gKi9cbmV4cG9ydHMuaXNCdW4gPSB0eXBlb2YgQnVuICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBCdW4udmVyc2lvbiAhPT0gXCJ1bmRlZmluZWRcIjtcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIGEgTm9kZS5qcyBjb21wYXRpYmxlIGVudmlyb25tZW50LlxuICovXG5leHBvcnRzLmlzTm9kZUxpa2UgPSB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgQm9vbGVhbihnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbikgJiZcbiAgICBCb29sZWFuKChfZCA9IGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLm5vZGUpO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBOb2RlLmpzIGNvbXBhdGlibGUgZW52aXJvbm1lbnQuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGlzTm9kZUxpa2VgIGluc3RlYWQuXG4gKi9cbmV4cG9ydHMuaXNOb2RlID0gZXhwb3J0cy5pc05vZGVMaWtlO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgTm9kZS5KUy5cbiAqL1xuZXhwb3J0cy5pc05vZGVSdW50aW1lID0gZXhwb3J0cy5pc05vZGVMaWtlICYmICFleHBvcnRzLmlzQnVuICYmICFleHBvcnRzLmlzRGVubztcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIGluIFJlYWN0LU5hdGl2ZS5cbiAqL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9ibG9iL21haW4vcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL3NldFVwTmF2aWdhdG9yLmpzXG5leHBvcnRzLmlzUmVhY3ROYXRpdmUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIChuYXZpZ2F0b3IgPT09IG51bGwgfHwgbmF2aWdhdG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuYXZpZ2F0b3IucHJvZHVjdCkgPT09IFwiUmVhY3ROYXRpdmVcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoZWNrRW52aXJvbm1lbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51aW50OEFycmF5VG9TdHJpbmcgPSB1aW50OEFycmF5VG9TdHJpbmc7XG5leHBvcnRzLnN0cmluZ1RvVWludDhBcnJheSA9IHN0cmluZ1RvVWludDhBcnJheTtcbi8qKlxuICogVGhlIGhlbHBlciB0aGF0IHRyYW5zZm9ybXMgYnl0ZXMgd2l0aCBzcGVjaWZpYyBjaGFyYWN0ZXIgZW5jb2RpbmcgaW50byBzdHJpbmdcbiAqIEBwYXJhbSBieXRlcyAtIHRoZSB1aW50OGFycmF5IGJ5dGVzXG4gKiBAcGFyYW0gZm9ybWF0IC0gdGhlIGZvcm1hdCB3ZSB1c2UgdG8gZW5jb2RlIHRoZSBieXRlXG4gKiBAcmV0dXJucyBhIHN0cmluZyBvZiB0aGUgZW5jb2RlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdWludDhBcnJheVRvU3RyaW5nKGJ5dGVzLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKGZvcm1hdCk7XG59XG4vKipcbiAqIFRoZSBoZWxwZXIgdGhhdCB0cmFuc2Zvcm1zIHN0cmluZyB0byBzcGVjaWZpYyBjaGFyYWN0ZXIgZW5jb2RlZCBieXRlcyBhcnJheS5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSBzdHJpbmcgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0gZm9ybWF0IC0gdGhlIGZvcm1hdCB3ZSB1c2UgdG8gZGVjb2RlIHRoZSB2YWx1ZVxuICogQHJldHVybnMgYSB1aW50OGFycmF5XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvVWludDhBcnJheSh2YWx1ZSwgZm9ybWF0KSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlLCBmb3JtYXQpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ynl0ZXNFbmNvZGluZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0cmluZ1RvVWludDhBcnJheSA9IGV4cG9ydHMudWludDhBcnJheVRvU3RyaW5nID0gZXhwb3J0cy5pc1dlYldvcmtlciA9IGV4cG9ydHMuaXNSZWFjdE5hdGl2ZSA9IGV4cG9ydHMuaXNEZW5vID0gZXhwb3J0cy5pc05vZGVSdW50aW1lID0gZXhwb3J0cy5pc05vZGVMaWtlID0gZXhwb3J0cy5pc05vZGUgPSBleHBvcnRzLmlzQnVuID0gZXhwb3J0cy5pc0Jyb3dzZXIgPSBleHBvcnRzLnJhbmRvbVVVSUQgPSBleHBvcnRzLm9iamVjdEhhc1Byb3BlcnR5ID0gZXhwb3J0cy5pc09iamVjdFdpdGhQcm9wZXJ0aWVzID0gZXhwb3J0cy5pc0RlZmluZWQgPSBleHBvcnRzLmNvbXB1dGVTaGEyNTZIbWFjID0gZXhwb3J0cy5jb21wdXRlU2hhMjU2SGFzaCA9IGV4cG9ydHMuZ2V0RXJyb3JNZXNzYWdlID0gZXhwb3J0cy5pc0Vycm9yID0gZXhwb3J0cy5pc09iamVjdCA9IGV4cG9ydHMuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZSA9IGV4cG9ydHMuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZSA9IGV4cG9ydHMuY2FuY2VsYWJsZVByb21pc2VSYWNlID0gZXhwb3J0cy5jYWxjdWxhdGVSZXRyeURlbGF5ID0gZXhwb3J0cy5kZWxheSA9IHZvaWQgMDtcbnZhciBkZWxheV9qc18xID0gcmVxdWlyZShcIi4vZGVsYXkuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVsYXlfanNfMS5kZWxheTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhbGN1bGF0ZVJldHJ5RGVsYXlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbGF5X2pzXzEuY2FsY3VsYXRlUmV0cnlEZWxheTsgfSB9KTtcbnZhciBhYm9ydGVyVXRpbHNfanNfMSA9IHJlcXVpcmUoXCIuL2Fib3J0ZXJVdGlscy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhbmNlbGFibGVQcm9taXNlUmFjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYWJvcnRlclV0aWxzX2pzXzEuY2FuY2VsYWJsZVByb21pc2VSYWNlOyB9IH0pO1xudmFyIGNyZWF0ZUFib3J0YWJsZVByb21pc2VfanNfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBYm9ydGFibGVQcm9taXNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVBYm9ydGFibGVQcm9taXNlX2pzXzEuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZTsgfSB9KTtcbnZhciByYW5kb21fanNfMSA9IHJlcXVpcmUoXCIuL3JhbmRvbS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFJhbmRvbUludGVnZXJJbmNsdXNpdmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJhbmRvbV9qc18xLmdldFJhbmRvbUludGVnZXJJbmNsdXNpdmU7IH0gfSk7XG52YXIgb2JqZWN0X2pzXzEgPSByZXF1aXJlKFwiLi9vYmplY3QuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JqZWN0X2pzXzEuaXNPYmplY3Q7IH0gfSk7XG52YXIgZXJyb3JfanNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JfanNfMS5pc0Vycm9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0RXJyb3JNZXNzYWdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvcl9qc18xLmdldEVycm9yTWVzc2FnZTsgfSB9KTtcbnZhciBzaGEyNTZfanNfMSA9IHJlcXVpcmUoXCIuL3NoYTI1Ni5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXB1dGVTaGEyNTZIYXNoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGEyNTZfanNfMS5jb21wdXRlU2hhMjU2SGFzaDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXB1dGVTaGEyNTZIbWFjXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGEyNTZfanNfMS5jb21wdXRlU2hhMjU2SG1hYzsgfSB9KTtcbnZhciB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi90eXBlR3VhcmRzLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNEZWZpbmVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlR3VhcmRzX2pzXzEuaXNEZWZpbmVkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPYmplY3RXaXRoUHJvcGVydGllc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZUd1YXJkc19qc18xLmlzT2JqZWN0V2l0aFByb3BlcnRpZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvYmplY3RIYXNQcm9wZXJ0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZUd1YXJkc19qc18xLm9iamVjdEhhc1Byb3BlcnR5OyB9IH0pO1xudmFyIHV1aWRVdGlsc19qc18xID0gcmVxdWlyZShcIi4vdXVpZFV0aWxzLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmFuZG9tVVVJRFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXVpZFV0aWxzX2pzXzEucmFuZG9tVVVJRDsgfSB9KTtcbnZhciBjaGVja0Vudmlyb25tZW50X2pzXzEgPSByZXF1aXJlKFwiLi9jaGVja0Vudmlyb25tZW50LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCcm93c2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNCcm93c2VyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCdW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc0J1bjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzTm9kZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZUxpa2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc05vZGVMaWtlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOb2RlUnVudGltZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzTm9kZVJ1bnRpbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Rlbm9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc0Rlbm87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1JlYWN0TmF0aXZlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNSZWFjdE5hdGl2ZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzV2ViV29ya2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNXZWJXb3JrZXI7IH0gfSk7XG52YXIgYnl0ZXNFbmNvZGluZ19qc18xID0gcmVxdWlyZShcIi4vYnl0ZXNFbmNvZGluZy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVpbnQ4QXJyYXlUb1N0cmluZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnl0ZXNFbmNvZGluZ19qc18xLnVpbnQ4QXJyYXlUb1N0cmluZzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ1RvVWludDhBcnJheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnl0ZXNFbmNvZGluZ19qc18xLnN0cmluZ1RvVWludDhBcnJheTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2FuaXRpemVyID0gdm9pZCAwO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IFJlZGFjdGVkU3RyaW5nID0gXCJSRURBQ1RFRFwiO1xuLy8gTWFrZSBzdXJlIHRoaXMgbGlzdCBpcyB1cC10by1kYXRlIHdpdGggdGhlIG9uZSB1bmRlciBjb3JlL2xvZ2dlci9SZWFkbWUjS2V5Y29uY2VwdHNcbmNvbnN0IGRlZmF1bHRBbGxvd2VkSGVhZGVyTmFtZXMgPSBbXG4gICAgXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXJldHVybi1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy11c2VyYWdlbnRcIixcbiAgICBcIngtbXMtY29ycmVsYXRpb24tcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgXCJjbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwibXMtY3ZcIixcbiAgICBcInJldHVybi1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwidHJhY2VwYXJlbnRcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1NYXgtQWdlXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kXCIsXG4gICAgXCJPcmlnaW5cIixcbiAgICBcIkFjY2VwdFwiLFxuICAgIFwiQWNjZXB0LUVuY29kaW5nXCIsXG4gICAgXCJDYWNoZS1Db250cm9sXCIsXG4gICAgXCJDb25uZWN0aW9uXCIsXG4gICAgXCJDb250ZW50LUxlbmd0aFwiLFxuICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgXCJEYXRlXCIsXG4gICAgXCJFVGFnXCIsXG4gICAgXCJFeHBpcmVzXCIsXG4gICAgXCJJZi1NYXRjaFwiLFxuICAgIFwiSWYtTW9kaWZpZWQtU2luY2VcIixcbiAgICBcIklmLU5vbmUtTWF0Y2hcIixcbiAgICBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICBcIlByYWdtYVwiLFxuICAgIFwiUmVxdWVzdC1JZFwiLFxuICAgIFwiUmV0cnktQWZ0ZXJcIixcbiAgICBcIlNlcnZlclwiLFxuICAgIFwiVHJhbnNmZXItRW5jb2RpbmdcIixcbiAgICBcIlVzZXItQWdlbnRcIixcbiAgICBcIldXVy1BdXRoZW50aWNhdGVcIixcbl07XG5jb25zdCBkZWZhdWx0QWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IFtcImFwaS12ZXJzaW9uXCJdO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgU2FuaXRpemVyIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGFkZGl0aW9uYWxBbGxvd2VkSGVhZGVyTmFtZXM6IGFsbG93ZWRIZWFkZXJOYW1lcyA9IFtdLCBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IFtdLCB9ID0ge30pIHtcbiAgICAgICAgYWxsb3dlZEhlYWRlck5hbWVzID0gZGVmYXVsdEFsbG93ZWRIZWFkZXJOYW1lcy5jb25jYXQoYWxsb3dlZEhlYWRlck5hbWVzKTtcbiAgICAgICAgYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IGRlZmF1bHRBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLmNvbmNhdChhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzKTtcbiAgICAgICAgdGhpcy5hbGxvd2VkSGVhZGVyTmFtZXMgPSBuZXcgU2V0KGFsbG93ZWRIZWFkZXJOYW1lcy5tYXAoKG4pID0+IG4udG9Mb3dlckNhc2UoKSkpO1xuICAgICAgICB0aGlzLmFsbG93ZWRRdWVyeVBhcmFtZXRlcnMgPSBuZXcgU2V0KGFsbG93ZWRRdWVyeVBhcmFtZXRlcnMubWFwKChwKSA9PiBwLnRvTG93ZXJDYXNlKCkpKTtcbiAgICB9XG4gICAgc2FuaXRpemUob2JqKSB7XG4gICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBFbnN1cmUgRXJyb3JzIGluY2x1ZGUgdGhlaXIgaW50ZXJlc3Rpbmcgbm9uLWVudW1lcmFibGUgbWVtYmVyc1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB2YWx1ZSksIHsgbmFtZTogdmFsdWUubmFtZSwgbWVzc2FnZTogdmFsdWUubWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkgPT09IFwiaGVhZGVyc1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIZWFkZXJzKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJ1cmxcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNhbml0aXplVXJsKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJxdWVyeVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVRdWVyeSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiYm9keVwiKSB7XG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgbG9nIHRoZSByZXF1ZXN0IGJvZHlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInJlc3BvbnNlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBsb2cgcmVzcG9uc2UgYWdhaW5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIm9wZXJhdGlvblNwZWNcIikge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdXNpbmcgc2VuZE9wZXJhdGlvblJlcXVlc3QsIHRoZSByZXF1ZXN0IGNhcnJpZXMgYSBtYXNzaXZlXG4gICAgICAgICAgICAgICAgLy8gZmllbGQgd2l0aCB0aGUgYXV0b3Jlc3Qgc3BlYy4gTm8gbmVlZCB0byBsb2cgaXQuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8ICgwLCBjb3JlX3V0aWxfMS5pc09iamVjdCkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXJdXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSwgMik7XG4gICAgfVxuICAgIHNhbml0aXplVXJsKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHZhbHVlKTtcbiAgICAgICAgaWYgKCF1cmwuc2VhcmNoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBba2V5XSBvZiB1cmwuc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycy5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBSZWRhY3RlZFN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICAgIH1cbiAgICBzYW5pdGl6ZUhlYWRlcnMob2JqKSB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd2VkSGVhZGVyTmFtZXMuaGFzKGtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IFJlZGFjdGVkU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gICAgfVxuICAgIHNhbml0aXplUXVlcnkodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNhbml0aXplZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLmhhcyhrLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgc2FuaXRpemVkW2tdID0gdmFsdWVba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRba10gPSBSZWRhY3RlZFN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2FuaXRpemVkO1xuICAgIH1cbn1cbmV4cG9ydHMuU2FuaXRpemVyID0gU2FuaXRpemVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FuaXRpemVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMubG9nUG9saWN5ID0gbG9nUG9saWN5O1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuY29uc3Qgc2FuaXRpemVyX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9zYW5pdGl6ZXIuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgbG9nUG9saWN5LlxuICovXG5leHBvcnRzLmxvZ1BvbGljeU5hbWUgPSBcImxvZ1BvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGxvZ3MgYWxsIHJlcXVlc3RzIGFuZCByZXNwb25zZXMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIGxvZ1BvbGljeS5cbiAqL1xuZnVuY3Rpb24gbG9nUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBsb2dnZXIgPSAoX2EgPSBvcHRpb25zLmxvZ2dlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbG9nX2pzXzEubG9nZ2VyLmluZm87XG4gICAgY29uc3Qgc2FuaXRpemVyID0gbmV3IHNhbml0aXplcl9qc18xLlNhbml0aXplcih7XG4gICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkSGVhZGVyTmFtZXM6IG9wdGlvbnMuYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lcyxcbiAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnM6IG9wdGlvbnMuYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5sb2dQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIWxvZ2dlci5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2dnZXIoYFJlcXVlc3Q6ICR7c2FuaXRpemVyLnNhbml0aXplKHJlcXVlc3QpfWApO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgbG9nZ2VyKGBSZXNwb25zZSBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICAgICAgICBsb2dnZXIoYEhlYWRlcnM6ICR7c2FuaXRpemVyLnNhbml0aXplKHJlc3BvbnNlLmhlYWRlcnMpfWApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnJlZGlyZWN0UG9saWN5ID0gcmVkaXJlY3RQb2xpY3k7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgcmVkaXJlY3RQb2xpY3kuXG4gKi9cbmV4cG9ydHMucmVkaXJlY3RQb2xpY3lOYW1lID0gXCJyZWRpcmVjdFBvbGljeVwiO1xuLyoqXG4gKiBNZXRob2RzIHRoYXQgYXJlIGFsbG93ZWQgdG8gZm9sbG93IHJlZGlyZWN0cyAzMDEgYW5kIDMwMlxuICovXG5jb25zdCBhbGxvd2VkUmVkaXJlY3QgPSBbXCJHRVRcIiwgXCJIRUFEXCJdO1xuLyoqXG4gKiBBIHBvbGljeSB0byBmb2xsb3cgTG9jYXRpb24gaGVhZGVycyBmcm9tIHRoZSBzZXJ2ZXIgaW4gb3JkZXJcbiAqIHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgcmVkaXJlY3Rpb24uXG4gKiBJbiB0aGUgYnJvd3NlciwgdGhpcyBwb2xpY3kgaXMgbm90IHVzZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29udHJvbCBwb2xpY3kgYmVoYXZpb3IuXG4gKi9cbmZ1bmN0aW9uIHJlZGlyZWN0UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbWF4UmV0cmllcyA9IDIwIH0gPSBvcHRpb25zO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMucmVkaXJlY3RQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlUmVkaXJlY3QobmV4dCwgcmVzcG9uc2UsIG1heFJldHJpZXMpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVSZWRpcmVjdChuZXh0LCByZXNwb25zZSwgbWF4UmV0cmllcywgY3VycmVudFJldHJpZXMgPSAwKSB7XG4gICAgY29uc3QgeyByZXF1ZXN0LCBzdGF0dXMsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgIGNvbnN0IGxvY2F0aW9uSGVhZGVyID0gaGVhZGVycy5nZXQoXCJsb2NhdGlvblwiKTtcbiAgICBpZiAobG9jYXRpb25IZWFkZXIgJiZcbiAgICAgICAgKHN0YXR1cyA9PT0gMzAwIHx8XG4gICAgICAgICAgICAoc3RhdHVzID09PSAzMDEgJiYgYWxsb3dlZFJlZGlyZWN0LmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSkgfHxcbiAgICAgICAgICAgIChzdGF0dXMgPT09IDMwMiAmJiBhbGxvd2VkUmVkaXJlY3QuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKSB8fFxuICAgICAgICAgICAgKHN0YXR1cyA9PT0gMzAzICYmIHJlcXVlc3QubWV0aG9kID09PSBcIlBPU1RcIikgfHxcbiAgICAgICAgICAgIHN0YXR1cyA9PT0gMzA3KSAmJlxuICAgICAgICBjdXJyZW50UmV0cmllcyA8IG1heFJldHJpZXMpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChsb2NhdGlvbkhlYWRlciwgcmVxdWVzdC51cmwpO1xuICAgICAgICByZXF1ZXN0LnVybCA9IHVybC50b1N0cmluZygpO1xuICAgICAgICAvLyBQT1NUIHJlcXVlc3Qgd2l0aCBTdGF0dXMgY29kZSAzMDMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGFcbiAgICAgICAgLy8gcmVkaXJlY3RlZCBHRVQgcmVxdWVzdCBpZiB0aGUgcmVkaXJlY3QgdXJsIGlzIHByZXNlbnQgaW4gdGhlIGxvY2F0aW9uIGhlYWRlclxuICAgICAgICBpZiAoc3RhdHVzID09PSAzMDMpIHtcbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJHRVRcIjtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoXCJDb250ZW50LUxlbmd0aFwiKTtcbiAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShcIkF1dGhvcml6YXRpb25cIik7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZWRpcmVjdChuZXh0LCByZXMsIG1heFJldHJpZXMsIGN1cnJlbnRSZXRyaWVzICsgMSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZGlyZWN0UG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0SGVhZGVyTmFtZSA9IGdldEhlYWRlck5hbWU7XG5leHBvcnRzLnNldFBsYXRmb3JtU3BlY2lmaWNEYXRhID0gc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGE7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3Qgb3MgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpvc1wiKSk7XG5jb25zdCBwcm9jZXNzID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6cHJvY2Vzc1wiKSk7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJOYW1lKCkge1xuICAgIHJldHVybiBcIlVzZXItQWdlbnRcIjtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFBsYXRmb3JtU3BlY2lmaWNEYXRhKG1hcCkge1xuICAgIGlmIChwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbnMgPSBwcm9jZXNzLnZlcnNpb25zO1xuICAgICAgICBpZiAodmVyc2lvbnMuYnVuKSB7XG4gICAgICAgICAgICBtYXAuc2V0KFwiQnVuXCIsIHZlcnNpb25zLmJ1bik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmVyc2lvbnMuZGVubykge1xuICAgICAgICAgICAgbWFwLnNldChcIkRlbm9cIiwgdmVyc2lvbnMuZGVubyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmVyc2lvbnMubm9kZSkge1xuICAgICAgICAgICAgbWFwLnNldChcIk5vZGVcIiwgdmVyc2lvbnMubm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWFwLnNldChcIk9TXCIsIGAoJHtvcy5hcmNoKCl9LSR7b3MudHlwZSgpfS0ke29zLnJlbGVhc2UoKX0pYCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VyQWdlbnRQbGF0Zm9ybS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5UID0gZXhwb3J0cy5TREtfVkVSU0lPTiA9IHZvaWQgMDtcbmV4cG9ydHMuU0RLX1ZFUlNJT04gPSBcIjEuMTcuMFwiO1xuZXhwb3J0cy5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCA9IDM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRIZWFkZXJOYW1lID0gZ2V0VXNlckFnZW50SGVhZGVyTmFtZTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50VmFsdWUgPSBnZXRVc2VyQWdlbnRWYWx1ZTtcbmNvbnN0IHVzZXJBZ2VudFBsYXRmb3JtX2pzXzEgPSByZXF1aXJlKFwiLi91c2VyQWdlbnRQbGF0Zm9ybS5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmZ1bmN0aW9uIGdldFVzZXJBZ2VudFN0cmluZyh0ZWxlbWV0cnlJbmZvKSB7XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0ZWxlbWV0cnlJbmZvKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdmFsdWUgPyBgJHtrZXl9LyR7dmFsdWV9YCA6IGtleTtcbiAgICAgICAgcGFydHMucHVzaCh0b2tlbik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiIFwiKTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudEhlYWRlck5hbWUoKSB7XG4gICAgcmV0dXJuICgwLCB1c2VyQWdlbnRQbGF0Zm9ybV9qc18xLmdldEhlYWRlck5hbWUpKCk7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRVc2VyQWdlbnRWYWx1ZShwcmVmaXgpIHtcbiAgICBjb25zdCBydW50aW1lSW5mbyA9IG5ldyBNYXAoKTtcbiAgICBydW50aW1lSW5mby5zZXQoXCJjb3JlLXJlc3QtcGlwZWxpbmVcIiwgY29uc3RhbnRzX2pzXzEuU0RLX1ZFUlNJT04pO1xuICAgIGF3YWl0ICgwLCB1c2VyQWdlbnRQbGF0Zm9ybV9qc18xLnNldFBsYXRmb3JtU3BlY2lmaWNEYXRhKShydW50aW1lSW5mbyk7XG4gICAgY29uc3QgZGVmYXVsdEFnZW50ID0gZ2V0VXNlckFnZW50U3RyaW5nKHJ1bnRpbWVJbmZvKTtcbiAgICBjb25zdCB1c2VyQWdlbnRWYWx1ZSA9IHByZWZpeCA/IGAke3ByZWZpeH0gJHtkZWZhdWx0QWdlbnR9YCA6IGRlZmF1bHRBZ2VudDtcbiAgICByZXR1cm4gdXNlckFnZW50VmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VyQWdlbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51c2VyQWdlbnRQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy51c2VyQWdlbnRQb2xpY3kgPSB1c2VyQWdlbnRQb2xpY3k7XG5jb25zdCB1c2VyQWdlbnRfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3VzZXJBZ2VudC5qc1wiKTtcbmNvbnN0IFVzZXJBZ2VudEhlYWRlck5hbWUgPSAoMCwgdXNlckFnZW50X2pzXzEuZ2V0VXNlckFnZW50SGVhZGVyTmFtZSkoKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSB1c2VyQWdlbnRQb2xpY3kuXG4gKi9cbmV4cG9ydHMudXNlckFnZW50UG9saWN5TmFtZSA9IFwidXNlckFnZW50UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgc2V0cyB0aGUgVXNlci1BZ2VudCBoZWFkZXIgKG9yIGVxdWl2YWxlbnQpIHRvIHJlZmxlY3RcbiAqIHRoZSBsaWJyYXJ5IHZlcnNpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSB1c2VyIGFnZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiB1c2VyQWdlbnRQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdXNlckFnZW50VmFsdWUgPSAoMCwgdXNlckFnZW50X2pzXzEuZ2V0VXNlckFnZW50VmFsdWUpKG9wdGlvbnMudXNlckFnZW50UHJlZml4KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnVzZXJBZ2VudFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5oZWFkZXJzLmhhcyhVc2VyQWdlbnRIZWFkZXJOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoVXNlckFnZW50SGVhZGVyTmFtZSwgYXdhaXQgdXNlckFnZW50VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXJBZ2VudFBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzTm9kZVJlYWRhYmxlU3RyZWFtID0gaXNOb2RlUmVhZGFibGVTdHJlYW07XG5leHBvcnRzLmlzV2ViUmVhZGFibGVTdHJlYW0gPSBpc1dlYlJlYWRhYmxlU3RyZWFtO1xuZXhwb3J0cy5pc1JlYWRhYmxlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbTtcbmV4cG9ydHMuaXNCbG9iID0gaXNCbG9iO1xuZnVuY3Rpb24gaXNOb2RlUmVhZGFibGVTdHJlYW0oeCkge1xuICAgIHJldHVybiBCb29sZWFuKHggJiYgdHlwZW9mIHhbXCJwaXBlXCJdID09PSBcImZ1bmN0aW9uXCIpO1xufVxuZnVuY3Rpb24gaXNXZWJSZWFkYWJsZVN0cmVhbSh4KSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oeCAmJlxuICAgICAgICB0eXBlb2YgeC5nZXRSZWFkZXIgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgeC50ZWUgPT09IFwiZnVuY3Rpb25cIik7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtKHgpIHtcbiAgICByZXR1cm4gaXNOb2RlUmVhZGFibGVTdHJlYW0oeCkgfHwgaXNXZWJSZWFkYWJsZVN0cmVhbSh4KTtcbn1cbmZ1bmN0aW9uIGlzQmxvYih4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4LnN0cmVhbSA9PT0gXCJmdW5jdGlvblwiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZUd1YXJkcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJhd0NvbnRlbnQgPSBnZXRSYXdDb250ZW50O1xuZXhwb3J0cy5jcmVhdGVGaWxlRnJvbVN0cmVhbSA9IGNyZWF0ZUZpbGVGcm9tU3RyZWFtO1xuZXhwb3J0cy5jcmVhdGVGaWxlID0gY3JlYXRlRmlsZTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi90eXBlR3VhcmRzLmpzXCIpO1xuY29uc3QgdW5pbXBsZW1lbnRlZE1ldGhvZHMgPSB7XG4gICAgYXJyYXlCdWZmZXI6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgc2xpY2U6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgdGV4dDogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbn07XG4vKipcbiAqIFByaXZhdGUgc3ltYm9sIHVzZWQgYXMga2V5IG9uIG9iamVjdHMgY3JlYXRlZCB1c2luZyBjcmVhdGVGaWxlIGNvbnRhaW5pbmcgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2Ugb2YgdGhlIGZpbGUgb2JqZWN0LlxuICpcbiAqIFRoaXMgaXMgdXNlZCBpbiBOb2RlIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgTm9kZSBzdHJlYW0gd2l0aG91dCB1c2luZyBCbG9iI3N0cmVhbSwgd2hpY2hcbiAqIHJldHVybnMgYSB3ZWIgc3RyZWFtLiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgYSBjb3VwbGUgb2YgYnVncyB0byBkbyB3aXRoIEJsb2Ijc3RyZWFtIGFuZFxuICogUmVhZGFibGUjdG8vZnJvbVdlYiBpbiBOb2RlIHZlcnNpb25zIHdlIHN1cHBvcnQ6XG4gKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDI2OTQgKGZpeGVkIGluIE5vZGUgMTguMTQpXG4gKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDg5MTYgKGZpeGVkIGluIE5vZGUgMjAuNilcbiAqXG4gKiBPbmNlIHRoZXNlIHZlcnNpb25zIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLCB3ZSBtYXkgYmUgYWJsZSB0byBzdG9wIGRvaW5nIHRoaXMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IHJhd0NvbnRlbnQgPSBTeW1ib2woXCJyYXdDb250ZW50XCIpO1xuZnVuY3Rpb24gaGFzUmF3Q29udGVudCh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4W3Jhd0NvbnRlbnRdID09PSBcImZ1bmN0aW9uXCI7XG59XG4vKipcbiAqIEV4dHJhY3QgdGhlIHJhdyBjb250ZW50IGZyb20gYSBnaXZlbiBibG9iLWxpa2Ugb2JqZWN0LiBJZiB0aGUgaW5wdXQgd2FzIGNyZWF0ZWQgdXNpbmcgY3JlYXRlRmlsZVxuICogb3IgY3JlYXRlRmlsZUZyb21TdHJlYW0sIHRoZSBleGFjdCBjb250ZW50IHBhc3NlZCBpbnRvIGNyZWF0ZUZpbGUvY3JlYXRlRmlsZUZyb21TdHJlYW0gd2lsbCBiZSB1c2VkLlxuICogRm9yIHRydWUgaW5zdGFuY2VzIG9mIEJsb2IgYW5kIEZpbGUsIHJldHVybnMgdGhlIGJsb2IncyBjb250ZW50IGFzIGEgV2ViIFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRSYXdDb250ZW50KGJsb2IpIHtcbiAgICBpZiAoaGFzUmF3Q29udGVudChibG9iKSkge1xuICAgICAgICByZXR1cm4gYmxvYltyYXdDb250ZW50XSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJsb2Iuc3RyZWFtKCk7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgRmlsZSBpbnRlcmZhY2UuIFRoaXMgb2JqZWN0IGlzIGludGVuZGVkIHRvIGJlXG4gKiBwYXNzZWQgaW50byBSZXF1ZXN0Qm9keVR5cGUuZm9ybURhdGEsIGFuZCBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrIGFzIGV4cGVjdGVkIGluXG4gKiBvdGhlciBzaXR1YXRpb25zLlxuICpcbiAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvOlxuICogLSBDcmVhdGUgYSBGaWxlIG9iamVjdCBmb3IgdXNlIGluIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlXG4gKiAgIGdsb2JhbCBGaWxlIG9iamVjdCBpcyB1bmF2YWlsYWJsZS5cbiAqIC0gQ3JlYXRlIGEgRmlsZS1saWtlIG9iamVjdCBmcm9tIGEgcmVhZGFibGUgc3RyZWFtIHdpdGhvdXQgcmVhZGluZyB0aGUgc3RyZWFtIGludG8gbWVtb3J5LlxuICpcbiAqIEBwYXJhbSBzdHJlYW0gLSB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBhcyBhIGNhbGxiYWNrIHJldHVybmluZyBhIHN0cmVhbS4gV2hlbiBhIEZpbGUgb2JqZWN0IG1hZGUgdXNpbmcgY3JlYXRlRmlsZSBpc1xuICogICAgICAgICAgICAgICAgICBwYXNzZWQgaW4gYSByZXF1ZXN0J3MgZm9ybSBkYXRhIG1hcCwgdGhlIHN0cmVhbSB3aWxsIG5vdCBiZSByZWFkIGludG8gbWVtb3J5XG4gKiAgICAgICAgICAgICAgICAgIGFuZCBpbnN0ZWFkIHdpbGwgYmUgc3RyZWFtZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBtYWRlLiBJbiB0aGUgZXZlbnQgb2YgYSByZXRyeSwgdGhlXG4gKiAgICAgICAgICAgICAgICAgIHN0cmVhbSBuZWVkcyB0byBiZSByZWFkIGFnYWluLCBzbyB0aGlzIGNhbGxiYWNrIFNIT1VMRCByZXR1cm4gYSBmcmVzaCBzdHJlYW0gaWYgcG9zc2libGUuXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLlxuICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25hbCBtZXRhZGF0YSBhYm91dCB0aGUgZmlsZSwgZS5nLiBmaWxlIG5hbWUsIGZpbGUgc2l6ZSwgTUlNRSB0eXBlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWxlRnJvbVN0cmVhbShzdHJlYW0sIG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1bmltcGxlbWVudGVkTWV0aG9kcyksIHsgdHlwZTogKF9hID0gb3B0aW9ucy50eXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLCBsYXN0TW9kaWZpZWQ6IChfYiA9IG9wdGlvbnMubGFzdE1vZGlmaWVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgd2Via2l0UmVsYXRpdmVQYXRoOiAoX2MgPSBvcHRpb25zLndlYmtpdFJlbGF0aXZlUGF0aCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogXCJcIiwgc2l6ZTogKF9kID0gb3B0aW9ucy5zaXplKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAtMSwgbmFtZSwgc3RyZWFtOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc3RyZWFtKCk7XG4gICAgICAgICAgICBpZiAoKDAsIHR5cGVHdWFyZHNfanNfMS5pc05vZGVSZWFkYWJsZVN0cmVhbSkocykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkOiBhIE5vZGUgc3RyZWFtIHdhcyBwcm92aWRlZCBhcyBpbnB1dCB0byBjcmVhdGVGaWxlRnJvbVN0cmVhbS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgfSwgW3Jhd0NvbnRlbnRdOiBzdHJlYW0gfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBGaWxlIGludGVyZmFjZS4gVGhpcyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVcbiAqIHBhc3NlZCBpbnRvIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSwgYW5kIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgYXMgZXhwZWN0ZWQgaW5cbiAqIG90aGVyIHNpdHVhdGlvbnMuXG4gKlxuICogVXNlIHRoaXMgZnVuY3Rpb24gY3JlYXRlIGEgRmlsZSBvYmplY3QgZm9yIHVzZSBpbiBSZXF1ZXN0Qm9keVR5cGUuZm9ybURhdGEgaW4gZW52aXJvbm1lbnRzIHdoZXJlIHRoZSBnbG9iYWwgRmlsZSBvYmplY3QgaXMgdW5hdmFpbGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLSB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBhcyBhIFVpbnQ4QXJyYXkgaW4gbWVtb3J5LlxuICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9uYWwgbWV0YWRhdGEgYWJvdXQgdGhlIGZpbGUsIGUuZy4gZmlsZSBuYW1lLCBmaWxlIHNpemUsIE1JTUUgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsZShjb250ZW50LCBuYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICBpZiAoY29yZV91dGlsXzEuaXNOb2RlTGlrZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1bmltcGxlbWVudGVkTWV0aG9kcyksIHsgdHlwZTogKF9hID0gb3B0aW9ucy50eXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLCBsYXN0TW9kaWZpZWQ6IChfYiA9IG9wdGlvbnMubGFzdE1vZGlmaWVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgd2Via2l0UmVsYXRpdmVQYXRoOiAoX2MgPSBvcHRpb25zLndlYmtpdFJlbGF0aXZlUGF0aCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogXCJcIiwgc2l6ZTogY29udGVudC5ieXRlTGVuZ3RoLCBuYW1lLCBhcnJheUJ1ZmZlcjogYXN5bmMgKCkgPT4gY29udGVudC5idWZmZXIsIHN0cmVhbTogKCkgPT4gbmV3IEJsb2IoW2NvbnRlbnRdKS5zdHJlYW0oKSwgW3Jhd0NvbnRlbnRdOiAoKSA9PiBjb250ZW50IH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxlKFtjb250ZW50XSwgbmFtZSwgb3B0aW9ucyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdCA9IGNvbmNhdDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBub2RlX3N0cmVhbV8xID0gcmVxdWlyZShcIm5vZGU6c3RyZWFtXCIpO1xuY29uc3QgdHlwZUd1YXJkc19qc18xID0gcmVxdWlyZShcIi4vdHlwZUd1YXJkcy5qc1wiKTtcbmNvbnN0IGZpbGVfanNfMSA9IHJlcXVpcmUoXCIuL2ZpbGUuanNcIik7XG5mdW5jdGlvbiBzdHJlYW1Bc3luY0l0ZXJhdG9yKCkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogc3RyZWFtQXN5bmNJdGVyYXRvcl8xKCkge1xuICAgICAgICBjb25zdCByZWFkZXIgPSB0aGlzLmdldFJlYWRlcigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSB5aWVsZCB0c2xpYl8xLl9fYXdhaXQocmVhZGVyLnJlYWQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIHRzbGliXzEuX19hd2FpdCh2b2lkIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYl8xLl9fYXdhaXQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG1ha2VBc3luY0l0ZXJhYmxlKHdlYlN0cmVhbSkge1xuICAgIGlmICghd2ViU3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgICAgICB3ZWJTdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gc3RyZWFtQXN5bmNJdGVyYXRvci5iaW5kKHdlYlN0cmVhbSk7XG4gICAgfVxuICAgIGlmICghd2ViU3RyZWFtLnZhbHVlcykge1xuICAgICAgICB3ZWJTdHJlYW0udmFsdWVzID0gc3RyZWFtQXN5bmNJdGVyYXRvci5iaW5kKHdlYlN0cmVhbSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5zdXJlTm9kZVN0cmVhbShzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgICAgbWFrZUFzeW5jSXRlcmFibGUoc3RyZWFtKTtcbiAgICAgICAgcmV0dXJuIG5vZGVfc3RyZWFtXzEuUmVhZGFibGUuZnJvbVdlYihzdHJlYW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9XG59XG5mdW5jdGlvbiB0b1N0cmVhbShzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gbm9kZV9zdHJlYW1fMS5SZWFkYWJsZS5mcm9tKEJ1ZmZlci5mcm9tKHNvdXJjZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmICgoMCwgdHlwZUd1YXJkc19qc18xLmlzQmxvYikoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gdG9TdHJlYW0oKDAsIGZpbGVfanNfMS5nZXRSYXdDb250ZW50KShzb3VyY2UpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBlbnN1cmVOb2RlU3RyZWFtKHNvdXJjZSk7XG4gICAgfVxufVxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgY29uY2F0ZW5hdGVzIGEgc2V0IG9mIGJpbmFyeSBpbnB1dHMgaW50byBvbmUgY29tYmluZWQgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSBzb3VyY2VzIC0gYXJyYXkgb2Ygc291cmNlcyBmb3IgdGhlIGNvbmNhdGVuYXRpb25cbiAqIEByZXR1cm5zIC0gaW4gTm9kZSwgYSAoKCkgPVxcPiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pIHdoaWNoLCB3aGVuIHJlYWQsIHByb2R1Y2VzIGEgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIGlucHV0cy5cbiAqICAgICAgICAgICBJbiBicm93c2VyLCByZXR1cm5zIGEgYEJsb2JgIHJlcHJlc2VudGluZyBhbGwgdGhlIGNvbmNhdGVuYXRlZCBpbnB1dHMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmNhdChzb3VyY2VzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtcyA9IHNvdXJjZXMubWFwKCh4KSA9PiAodHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHgoKSA6IHgpKS5tYXAodG9TdHJlYW0pO1xuICAgICAgICByZXR1cm4gbm9kZV9zdHJlYW1fMS5SZWFkYWJsZS5mcm9tKChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIGVfMSwgX2IsIF9jO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RyZWFtIG9mIHN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gdHJ1ZSwgc3RyZWFtXzEgPSAoZV8xID0gdm9pZCAwLCB0c2xpYl8xLl9fYXN5bmNWYWx1ZXMoc3RyZWFtKSksIHN0cmVhbV8xXzE7IHN0cmVhbV8xXzEgPSB5aWVsZCB0c2xpYl8xLl9fYXdhaXQoc3RyZWFtXzEubmV4dCgpKSwgX2EgPSBzdHJlYW1fMV8xLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MgPSBzdHJlYW1fMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYl8xLl9fYXdhaXQoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBzdHJlYW1fMS5yZXR1cm4pKSB5aWVsZCB0c2xpYl8xLl9fYXdhaXQoX2IuY2FsbChzdHJlYW1fMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pKCkpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3kgPSBtdWx0aXBhcnRQb2xpY3k7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgY29uY2F0X2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9jb25jYXQuanNcIik7XG5jb25zdCB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC90eXBlR3VhcmRzLmpzXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdGVCb3VuZGFyeSgpIHtcbiAgICByZXR1cm4gYC0tLS1BelNES0Zvcm1Cb3VuZGFyeSR7KDAsIGNvcmVfdXRpbF8xLnJhbmRvbVVVSUQpKCl9YDtcbn1cbmZ1bmN0aW9uIGVuY29kZUhlYWRlcnMoaGVhZGVycykge1xuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgcmVzdWx0ICs9IGAke2tleX06ICR7dmFsdWV9XFxyXFxuYDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldExlbmd0aChzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCB0eXBlR3VhcmRzX2pzXzEuaXNCbG9iKShzb3VyY2UpKSB7XG4gICAgICAgIC8vIGlmIHdhcyBjcmVhdGVkIHVzaW5nIGNyZWF0ZUZpbGUgdGhlbiAtMSBtZWFucyB3ZSBoYXZlIGFuIHVua25vd24gc2l6ZVxuICAgICAgICByZXR1cm4gc291cmNlLnNpemUgPT09IC0xID8gdW5kZWZpbmVkIDogc291cmNlLnNpemU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFRvdGFsTGVuZ3RoKHNvdXJjZXMpIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgY29uc3QgcGFydExlbmd0aCA9IGdldExlbmd0aChzb3VyY2UpO1xuICAgICAgICBpZiAocGFydExlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdG90YWwgKz0gcGFydExlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG90YWw7XG59XG5hc3luYyBmdW5jdGlvbiBidWlsZFJlcXVlc3RCb2R5KHJlcXVlc3QsIHBhcnRzLCBib3VuZGFyeSkge1xuICAgIGNvbnN0IHNvdXJjZXMgPSBbXG4gICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKGAtLSR7Ym91bmRhcnl9YCwgXCJ1dGYtOFwiKSxcbiAgICAgICAgLi4ucGFydHMuZmxhdE1hcCgocGFydCkgPT4gW1xuICAgICAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoXCJcXHJcXG5cIiwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKGVuY29kZUhlYWRlcnMocGFydC5oZWFkZXJzKSwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKFwiXFxyXFxuXCIsIFwidXRmLThcIiksXG4gICAgICAgICAgICBwYXJ0LmJvZHksXG4gICAgICAgICAgICAoMCwgY29yZV91dGlsXzEuc3RyaW5nVG9VaW50OEFycmF5KShgXFxyXFxuLS0ke2JvdW5kYXJ5fWAsIFwidXRmLThcIiksXG4gICAgICAgIF0pLFxuICAgICAgICAoMCwgY29yZV91dGlsXzEuc3RyaW5nVG9VaW50OEFycmF5KShcIi0tXFxyXFxuXFxyXFxuXCIsIFwidXRmLThcIiksXG4gICAgXTtcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gZ2V0VG90YWxMZW5ndGgoc291cmNlcyk7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtTGVuZ3RoXCIsIGNvbnRlbnRMZW5ndGgpO1xuICAgIH1cbiAgICByZXF1ZXN0LmJvZHkgPSBhd2FpdCAoMCwgY29uY2F0X2pzXzEuY29uY2F0KShzb3VyY2VzKTtcbn1cbi8qKlxuICogTmFtZSBvZiBtdWx0aXBhcnQgcG9saWN5XG4gKi9cbmV4cG9ydHMubXVsdGlwYXJ0UG9saWN5TmFtZSA9IFwibXVsdGlwYXJ0UG9saWN5XCI7XG5jb25zdCBtYXhCb3VuZGFyeUxlbmd0aCA9IDcwO1xuY29uc3QgdmFsaWRCb3VuZGFyeUNoYXJhY3RlcnMgPSBuZXcgU2V0KGBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OScoKSssLS4vOj0/YCk7XG5mdW5jdGlvbiBhc3NlcnRWYWxpZEJvdW5kYXJ5KGJvdW5kYXJ5KSB7XG4gICAgaWYgKGJvdW5kYXJ5Lmxlbmd0aCA+IG1heEJvdW5kYXJ5TGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwYXJ0IGJvdW5kYXJ5IFwiJHtib3VuZGFyeX1cIiBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mIDcwIGNoYXJhY3RlcnNgKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmZyb20oYm91bmRhcnkpLnNvbWUoKHgpID0+ICF2YWxpZEJvdW5kYXJ5Q2hhcmFjdGVycy5oYXMoeCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwYXJ0IGJvdW5kYXJ5IFwiJHtib3VuZGFyeX1cIiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnNgKTtcbiAgICB9XG59XG4vKipcbiAqIFBpcGVsaW5lIHBvbGljeSBmb3IgbXVsdGlwYXJ0IHJlcXVlc3RzXG4gKi9cbmZ1bmN0aW9uIG11bHRpcGFydFBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLm11bHRpcGFydFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5tdWx0aXBhcnRCb2R5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5ib2R5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibXVsdGlwYXJ0Qm9keSBhbmQgcmVndWxhciBib2R5IGNhbm5vdCBiZSBzZXQgYXQgdGhlIHNhbWUgdGltZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBib3VuZGFyeSA9IHJlcXVlc3QubXVsdGlwYXJ0Qm9keS5ib3VuZGFyeTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyID0gKF9hID0gcmVxdWVzdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJtdWx0aXBhcnQvbWl4ZWRcIjtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEhlYWRlciA9IGNvbnRlbnRUeXBlSGVhZGVyLm1hdGNoKC9eKG11bHRpcGFydFxcL1teIDtdKykoPzo7ICpib3VuZGFyeT0oLispKT8kLyk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZEhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR290IG11bHRpcGFydCByZXF1ZXN0IGJvZHksIGJ1dCBjb250ZW50LXR5cGUgaGVhZGVyIHdhcyBub3QgbXVsdGlwYXJ0OiAke2NvbnRlbnRUeXBlSGVhZGVyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgWywgY29udGVudFR5cGUsIHBhcnNlZEJvdW5kYXJ5XSA9IHBhcnNlZEhlYWRlcjtcbiAgICAgICAgICAgIGlmIChwYXJzZWRCb3VuZGFyeSAmJiBib3VuZGFyeSAmJiBwYXJzZWRCb3VuZGFyeSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGFydCBib3VuZGFyeSB3YXMgc3BlY2lmaWVkIGFzICR7cGFyc2VkQm91bmRhcnl9IGluIHRoZSBoZWFkZXIsIGJ1dCBnb3QgJHtib3VuZGFyeX0gaW4gdGhlIHJlcXVlc3QgYm9keWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm91bmRhcnkgIT09IG51bGwgJiYgYm91bmRhcnkgIT09IHZvaWQgMCA/IGJvdW5kYXJ5IDogKGJvdW5kYXJ5ID0gcGFyc2VkQm91bmRhcnkpO1xuICAgICAgICAgICAgaWYgKGJvdW5kYXJ5KSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0VmFsaWRCb3VuZGFyeShib3VuZGFyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBib3VuZGFyeSA9IGdlbmVyYXRlQm91bmRhcnkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgYCR7Y29udGVudFR5cGV9OyBib3VuZGFyeT0ke2JvdW5kYXJ5fWApO1xuICAgICAgICAgICAgYXdhaXQgYnVpbGRSZXF1ZXN0Qm9keShyZXF1ZXN0LCByZXF1ZXN0Lm11bHRpcGFydEJvZHkucGFydHMsIGJvdW5kYXJ5KTtcbiAgICAgICAgICAgIHJlcXVlc3QubXVsdGlwYXJ0Qm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aXBhcnRQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kgPSBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3k7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5LlxuICovXG5leHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgPSBcImRlY29tcHJlc3NSZXNwb25zZVBvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0byBlbmFibGUgcmVzcG9uc2UgZGVjb21wcmVzc2lvbiBhY2NvcmRpbmcgdG8gQWNjZXB0LUVuY29kaW5nIGhlYWRlclxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2VwdC1FbmNvZGluZ1xuICovXG5mdW5jdGlvbiBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICAvLyBIRUFEIHJlcXVlc3RzIGhhdmUgbm8gYm9keVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJBY2NlcHQtRW5jb2RpbmdcIiwgXCJnemlwLGRlZmxhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVsYXkgPSBkZWxheTtcbmV4cG9ydHMucGFyc2VIZWFkZXJWYWx1ZUFzTnVtYmVyID0gcGFyc2VIZWFkZXJWYWx1ZUFzTnVtYmVyO1xuY29uc3QgYWJvcnRfY29udHJvbGxlcl8xID0gcmVxdWlyZShcIkBhenVyZS9hYm9ydC1jb250cm9sbGVyXCIpO1xuY29uc3QgU3RhbmRhcmRBYm9ydE1lc3NhZ2UgPSBcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCI7XG4vKipcbiAqIEEgd3JhcHBlciBmb3Igc2V0VGltZW91dCB0aGF0IHJlc29sdmVzIGEgcHJvbWlzZSBhZnRlciBkZWxheUluTXMgbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIGRlbGF5SW5NcyAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGRlbGF5ZWQuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBhZnRlciBhIHRpbWVvdXQgb2YgdCBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBkZWxheSAtIGN1cnJlbnRseSBhYm9ydCBvcHRpb25zXG4gKiAgICAgICAgICAgICAgICAgIC0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnRTaWduYWwgYXNzb2NpYXRlZCB3aXRoIGNvbnRhaW5pbmcgb3BlcmF0aW9uLlxuICogICAgICAgICAgICAgICAgICAtIGFib3J0RXJyb3JNc2cgLSBUaGUgYWJvcnQgZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggY29udGFpbmluZyBvcGVyYXRpb24uXG4gKiBAcmV0dXJucyBSZXNvbHZlZCBwcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KGRlbGF5SW5NcywgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgdGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBvbkFib3J0ZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlamVjdE9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBhYm9ydF9jb250cm9sbGVyXzEuQWJvcnRFcnJvcigob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0RXJyb3JNc2cpID8gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0RXJyb3JNc2cgOiBTdGFuZGFyZEFib3J0TWVzc2FnZSkpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZW1vdmVMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkgJiYgb25BYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgb25BYm9ydGVkID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdE9uQWJvcnQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRTaWduYWwpICYmIG9wdGlvbnMuYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdE9uQWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZGVsYXlJbk1zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkge1xuICAgICAgICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydGVkKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEByZXR1cm5zIHRoZSBwYXJzZWQgdmFsdWUgb3IgdW5kZWZpbmVkIGlmIHRoZSBwYXJzZWQgdmFsdWUgaXMgaW52YWxpZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJWYWx1ZUFzTnVtYmVyKHJlc3BvbnNlLCBoZWFkZXJOYW1lKSB7XG4gICAgY29uc3QgdmFsdWUgPSByZXNwb25zZS5oZWFkZXJzLmdldChoZWFkZXJOYW1lKTtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgdmFsdWVBc051bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZUFzTnVtKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiB2YWx1ZUFzTnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVGhyb3R0bGluZ1JldHJ5UmVzcG9uc2UgPSBpc1Rocm90dGxpbmdSZXRyeVJlc3BvbnNlO1xuZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlTdHJhdGVneSA9IHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5O1xuY29uc3QgaGVscGVyc19qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvaGVscGVycy5qc1wiKTtcbi8qKlxuICogVGhlIGhlYWRlciB0aGF0IGNvbWVzIGJhY2sgZnJvbSBBenVyZSBzZXJ2aWNlcyByZXByZXNlbnRpbmdcbiAqIHRoZSBhbW91bnQgb2YgdGltZSAobWluaW11bSkgdG8gd2FpdCB0byByZXRyeSAoaW4gc2Vjb25kcyBvciB0aW1lc3RhbXAgYWZ0ZXIgd2hpY2ggd2UgY2FuIHJldHJ5KS5cbiAqL1xuY29uc3QgUmV0cnlBZnRlckhlYWRlciA9IFwiUmV0cnktQWZ0ZXJcIjtcbi8qKlxuICogVGhlIGhlYWRlcnMgdGhhdCBjb21lIGJhY2sgZnJvbSBBenVyZSBzZXJ2aWNlcyByZXByZXNlbnRpbmdcbiAqIHRoZSBhbW91bnQgb2YgdGltZSAobWluaW11bSkgdG8gd2FpdCB0byByZXRyeS5cbiAqXG4gKiBcInJldHJ5LWFmdGVyLW1zXCIsIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIDogbWlsbGlzZWNvbmRzXG4gKiBcIlJldHJ5LUFmdGVyXCIgOiBzZWNvbmRzIG9yIHRpbWVzdGFtcFxuICovXG5jb25zdCBBbGxSZXRyeUFmdGVySGVhZGVycyA9IFtcInJldHJ5LWFmdGVyLW1zXCIsIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiLCBSZXRyeUFmdGVySGVhZGVyXTtcbi8qKlxuICogQSByZXNwb25zZSBpcyBhIHRocm90dGxpbmcgcmV0cnkgcmVzcG9uc2UgaWYgaXQgaGFzIGEgdGhyb3R0bGluZyBzdGF0dXMgY29kZSAoNDI5IG9yIDUwMyksXG4gKiBhcyBsb25nIGFzIG9uZSBvZiB0aGUgWyBcIlJldHJ5LUFmdGVyXCIgb3IgXCJyZXRyeS1hZnRlci1tc1wiIG9yIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIF0gaGVhZGVycyBoYXMgYSB2YWxpZCB2YWx1ZS5cbiAqXG4gKiBSZXR1cm5zIHRoZSBgcmV0cnlBZnRlckluTXNgIHZhbHVlIGlmIHRoZSByZXNwb25zZSBpcyBhIHRocm90dGxpbmcgcmV0cnkgcmVzcG9uc2UuXG4gKiBJZiBub3QgdGhyb3R0bGluZyByZXRyeSByZXNwb25zZSwgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlckluTXMocmVzcG9uc2UpIHtcbiAgICBpZiAoIShyZXNwb25zZSAmJiBbNDI5LCA1MDNdLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIEhlYWRlcnM6IFwicmV0cnktYWZ0ZXItbXNcIiwgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIsIFwiUmV0cnktQWZ0ZXJcIlxuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBBbGxSZXRyeUFmdGVySGVhZGVycykge1xuICAgICAgICAgICAgY29uc3QgcmV0cnlBZnRlclZhbHVlID0gKDAsIGhlbHBlcnNfanNfMS5wYXJzZUhlYWRlclZhbHVlQXNOdW1iZXIpKHJlc3BvbnNlLCBoZWFkZXIpO1xuICAgICAgICAgICAgaWYgKHJldHJ5QWZ0ZXJWYWx1ZSA9PT0gMCB8fCByZXRyeUFmdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBcIlJldHJ5LUFmdGVyXCIgaGVhZGVyID09PiBzZWNvbmRzXG4gICAgICAgICAgICAgICAgLy8gXCJyZXRyeS1hZnRlci1tc1wiLCBcIngtbXMtcmV0cnktYWZ0ZXItbXNcIiBoZWFkZXJzID09PiBtaWxsaS1zZWNvbmRzXG4gICAgICAgICAgICAgICAgY29uc3QgbXVsdGlwbHlpbmdGYWN0b3IgPSBoZWFkZXIgPT09IFJldHJ5QWZ0ZXJIZWFkZXIgPyAxMDAwIDogMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0cnlBZnRlclZhbHVlICogbXVsdGlwbHlpbmdGYWN0b3I7IC8vIGluIG1pbGxpLXNlY29uZHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZXRyeUFmdGVySGVhZGVyIChcIlJldHJ5LUFmdGVyXCIpIGhhcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSBpdCBtaWdodCBiZSBmb3JtYXR0ZWQgYXMgYSBkYXRlIGluc3RlYWQgb2YgYSBudW1iZXIgb2Ygc2Vjb25kc1xuICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoUmV0cnlBZnRlckhlYWRlcik7XG4gICAgICAgIGlmICghcmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZGF0ZSA9IERhdGUucGFyc2UocmV0cnlBZnRlckhlYWRlcik7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBkYXRlIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gbmVnYXRpdmUgZGlmZiB3b3VsZCBtZWFuIGEgZGF0ZSBpbiB0aGUgcGFzdCwgc28gcmV0cnkgYXNhcCB3aXRoIDAgbWlsbGlzZWNvbmRzXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoZGlmZikgPyBNYXRoLm1heCgwLCBkaWZmKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBBIHJlc3BvbnNlIGlzIGEgcmV0cnkgcmVzcG9uc2UgaWYgaXQgaGFzIGEgdGhyb3R0bGluZyBzdGF0dXMgY29kZSAoNDI5IG9yIDUwMyksXG4gKiBhcyBsb25nIGFzIG9uZSBvZiB0aGUgWyBcIlJldHJ5LUFmdGVyXCIgb3IgXCJyZXRyeS1hZnRlci1tc1wiIG9yIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIF0gaGVhZGVycyBoYXMgYSB2YWxpZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaXNUaHJvdHRsaW5nUmV0cnlSZXNwb25zZShyZXNwb25zZSkge1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoZ2V0UmV0cnlBZnRlckluTXMocmVzcG9uc2UpKTtcbn1cbmZ1bmN0aW9uIHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwidGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lcIixcbiAgICAgICAgcmV0cnkoeyByZXNwb25zZSB9KSB7XG4gICAgICAgICAgICBjb25zdCByZXRyeUFmdGVySW5NcyA9IGdldFJldHJ5QWZ0ZXJJbk1zKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJldHJ5QWZ0ZXJJbk1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNraXBTdHJhdGVneTogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXRyeUFmdGVySW5NcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxpbmdSZXRyeVN0cmF0ZWd5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5ID0gZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5O1xuZXhwb3J0cy5pc0V4cG9uZW50aWFsUmV0cnlSZXNwb25zZSA9IGlzRXhwb25lbnRpYWxSZXRyeVJlc3BvbnNlO1xuZXhwb3J0cy5pc1N5c3RlbUVycm9yID0gaXNTeXN0ZW1FcnJvcjtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4vdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanNcIik7XG4vLyBpbnRlcnZhbHMgYXJlIGluIG1pbGxpc2Vjb25kc1xuY29uc3QgREVGQVVMVF9DTElFTlRfUkVUUllfSU5URVJWQUwgPSAxMDAwO1xuY29uc3QgREVGQVVMVF9DTElFTlRfTUFYX1JFVFJZX0lOVEVSVkFMID0gMTAwMCAqIDY0O1xuLyoqXG4gKiBBIHJldHJ5IHN0cmF0ZWd5IHRoYXQgcmV0cmllcyB3aXRoIGFuIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZyBkZWxheSBpbiB0aGVzZSB0d28gY2FzZXM6XG4gKiAtIFdoZW4gdGhlcmUgYXJlIGVycm9ycyBpbiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gRE5TIGxvb2t1cCBmYWlsdXJlcykuXG4gKiAtIE9yIG90aGVyd2lzZSBpZiB0aGUgb3V0Z29pbmcgcmVxdWVzdCBmYWlscyAoNDA4LCBncmVhdGVyIG9yIGVxdWFsIHRoYW4gNTAwLCBleGNlcHQgZm9yIDUwMSBhbmQgNTA1KS5cbiAqL1xuZnVuY3Rpb24gZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgcmV0cnlJbnRlcnZhbCA9IChfYSA9IG9wdGlvbnMucmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IERFRkFVTFRfQ0xJRU5UX1JFVFJZX0lOVEVSVkFMO1xuICAgIGNvbnN0IG1heFJldHJ5SW50ZXJ2YWwgPSAoX2IgPSBvcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBERUZBVUxUX0NMSUVOVF9NQVhfUkVUUllfSU5URVJWQUw7XG4gICAgbGV0IHJldHJ5QWZ0ZXJJbk1zID0gcmV0cnlJbnRlcnZhbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcImV4cG9uZW50aWFsUmV0cnlTdHJhdGVneVwiLFxuICAgICAgICByZXRyeSh7IHJldHJ5Q291bnQsIHJlc3BvbnNlLCByZXNwb25zZUVycm9yIH0pIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRTeXN0ZW1FcnJvciA9IGlzU3lzdGVtRXJyb3IocmVzcG9uc2VFcnJvcik7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVTeXN0ZW1FcnJvcnMgPSBtYXRjaGVkU3lzdGVtRXJyb3IgJiYgb3B0aW9ucy5pZ25vcmVTeXN0ZW1FcnJvcnM7XG4gICAgICAgICAgICBjb25zdCBpc0V4cG9uZW50aWFsID0gaXNFeHBvbmVudGlhbFJldHJ5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgY29uc3QgaWdub3JlRXhwb25lbnRpYWxSZXNwb25zZSA9IGlzRXhwb25lbnRpYWwgJiYgb3B0aW9ucy5pZ25vcmVIdHRwU3RhdHVzQ29kZXM7XG4gICAgICAgICAgICBjb25zdCB1bmtub3duUmVzcG9uc2UgPSByZXNwb25zZSAmJiAoKDAsIHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEuaXNUaHJvdHRsaW5nUmV0cnlSZXNwb25zZSkocmVzcG9uc2UpIHx8ICFpc0V4cG9uZW50aWFsKTtcbiAgICAgICAgICAgIGlmICh1bmtub3duUmVzcG9uc2UgfHwgaWdub3JlRXhwb25lbnRpYWxSZXNwb25zZSB8fCBpZ25vcmVTeXN0ZW1FcnJvcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBza2lwU3RyYXRlZ3k6IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZUVycm9yICYmICFtYXRjaGVkU3lzdGVtRXJyb3IgJiYgIWlzRXhwb25lbnRpYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvclRvVGhyb3c6IHJlc3BvbnNlRXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV4cG9uZW50aWFsbHkgaW5jcmVhc2UgdGhlIGRlbGF5IGVhY2ggdGltZVxuICAgICAgICAgICAgY29uc3QgZXhwb25lbnRpYWxEZWxheSA9IHJldHJ5QWZ0ZXJJbk1zICogTWF0aC5wb3coMiwgcmV0cnlDb3VudCk7XG4gICAgICAgICAgICAvLyBEb24ndCBsZXQgdGhlIGRlbGF5IGV4Y2VlZCB0aGUgbWF4aW11bVxuICAgICAgICAgICAgY29uc3QgY2xhbXBlZEV4cG9uZW50aWFsRGVsYXkgPSBNYXRoLm1pbihtYXhSZXRyeUludGVydmFsLCBleHBvbmVudGlhbERlbGF5KTtcbiAgICAgICAgICAgIC8vIEFsbG93IHRoZSBmaW5hbCB2YWx1ZSB0byBoYXZlIHNvbWUgXCJqaXR0ZXJcIiAod2l0aGluIDUwJSBvZiB0aGUgZGVsYXkgc2l6ZSkgc29cbiAgICAgICAgICAgIC8vIHRoYXQgcmV0cmllcyBhY3Jvc3MgbXVsdGlwbGUgY2xpZW50cyBkb24ndCBvY2N1ciBzaW11bHRhbmVvdXNseS5cbiAgICAgICAgICAgIHJldHJ5QWZ0ZXJJbk1zID1cbiAgICAgICAgICAgICAgICBjbGFtcGVkRXhwb25lbnRpYWxEZWxheSAvIDIgKyAoMCwgY29yZV91dGlsXzEuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZSkoMCwgY2xhbXBlZEV4cG9uZW50aWFsRGVsYXkgLyAyKTtcbiAgICAgICAgICAgIHJldHVybiB7IHJldHJ5QWZ0ZXJJbk1zIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogQSByZXNwb25zZSBpcyBhIHJldHJ5IHJlc3BvbnNlIGlmIGl0IGhhcyBzdGF0dXMgY29kZXM6XG4gKiAtIDQwOCwgb3JcbiAqIC0gR3JlYXRlciBvciBlcXVhbCB0aGFuIDUwMCwgZXhjZXB0IGZvciA1MDEgYW5kIDUwNS5cbiAqL1xuZnVuY3Rpb24gaXNFeHBvbmVudGlhbFJldHJ5UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICByZXR1cm4gQm9vbGVhbihyZXNwb25zZSAmJlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAocmVzcG9uc2Uuc3RhdHVzID49IDUwMCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwOCkgJiZcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzICE9PSA1MDEgJiZcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzICE9PSA1MDUpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gZXJyb3IgZnJvbSBhIHBpcGVsaW5lIHJlc3BvbnNlIHdhcyB0cmlnZ2VyZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIuXG4gKi9cbmZ1bmN0aW9uIGlzU3lzdGVtRXJyb3IoZXJyKSB7XG4gICAgaWYgKCFlcnIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKGVyci5jb2RlID09PSBcIkVUSU1FRE9VVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVTT0NLRVRUSU1FRE9VVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVDT05OUkVGVVNFRFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVDT05OUkVTRVRcIiB8fFxuICAgICAgICBlcnIuY29kZSA9PT0gXCJFTk9FTlRcIiB8fFxuICAgICAgICBlcnIuY29kZSA9PT0gXCJFTk9URk9VTkRcIik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXRyeVBvbGljeSA9IHJldHJ5UG9saWN5O1xuY29uc3QgaGVscGVyc19qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvaGVscGVycy5qc1wiKTtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG5jb25zdCByZXRyeVBvbGljeUxvZ2dlciA9ICgwLCBsb2dnZXJfMS5jcmVhdGVDbGllbnRMb2dnZXIpKFwiY29yZS1yZXN0LXBpcGVsaW5lIHJldHJ5UG9saWN5XCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHJldHJ5UG9saWN5LlxuICovXG5jb25zdCByZXRyeVBvbGljeU5hbWUgPSBcInJldHJ5UG9saWN5XCI7XG4vKipcbiAqIHJldHJ5UG9saWN5IGlzIGEgZ2VuZXJpYyBwb2xpY3kgdG8gZW5hYmxlIHJldHJ5aW5nIHJlcXVlc3RzIHdoZW4gY2VydGFpbiBjb25kaXRpb25zIGFyZSBtZXRcbiAqL1xuZnVuY3Rpb24gcmV0cnlQb2xpY3koc3RyYXRlZ2llcywgb3B0aW9ucyA9IHsgbWF4UmV0cmllczogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQgfSkge1xuICAgIGNvbnN0IGxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyIHx8IHJldHJ5UG9saWN5TG9nZ2VyO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGxldCByZXNwb25zZUVycm9yO1xuICAgICAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAtMTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgICAgICAgIHJldHJ5UmVxdWVzdDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50ICs9IDE7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogQXR0ZW1wdGluZyB0byBzZW5kIHJlcXVlc3RgLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFJlY2VpdmVkIGEgcmVzcG9uc2UgZnJvbSByZXF1ZXN0YCwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5ICR7cmV0cnlDb3VudH06IFJlY2VpdmVkIGFuIGVycm9yIGZyb20gcmVxdWVzdGAsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVzdEVycm9ycyBhcmUgdmFsaWQgdGFyZ2V0cyBmb3IgdGhlIHJldHJ5IHN0cmF0ZWdpZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIHJldHJ5IHN0cmF0ZWdpZXMgY2FuIHdvcmsgd2l0aCB0aGVtLCB0aGV5IHdpbGwgYmUgdGhyb3duIGxhdGVyIGluIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVjZWl2ZWQgZXJyb3IgaXMgbm90IGEgUmVzdEVycm9yLCBpdCBpcyBpbW1lZGlhdGVseSB0aHJvd24uXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3IgPSBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUgfHwgcmVzcG9uc2VFcnJvci5uYW1lICE9PSBcIlJlc3RFcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2VFcnJvci5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChfYSA9IHJlcXVlc3QuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnkgJHtyZXRyeUNvdW50fTogUmVxdWVzdCBhYm9ydGVkLmApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGFib3J0RXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID49ICgoX2IgPSBvcHRpb25zLm1heFJldHJpZXMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNvbnN0YW50c19qc18xLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5UKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogTWF4aW11bSByZXRyaWVzIHJlYWNoZWQuIFJldHVybmluZyB0aGUgbGFzdCByZWNlaXZlZCByZXNwb25zZSwgb3IgdGhyb3dpbmcgdGhlIGxhc3QgcmVjZWl2ZWQgZXJyb3IuYCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZUVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYXhpbXVtIHJldHJpZXMgcmVhY2hlZCB3aXRoIG5vIHJlc3BvbnNlIG9yIGVycm9yIHRvIHRocm93XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBQcm9jZXNzaW5nICR7c3RyYXRlZ2llcy5sZW5ndGh9IHJldHJ5IHN0cmF0ZWdpZXMuYCk7XG4gICAgICAgICAgICAgICAgc3RyYXRlZ2llc0xvb3A6IGZvciAoY29uc3Qgc3RyYXRlZ3kgb2Ygc3RyYXRlZ2llcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJhdGVneUxvZ2dlciA9IHN0cmF0ZWd5LmxvZ2dlciB8fCByZXRyeVBvbGljeUxvZ2dlcjtcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogUHJvY2Vzc2luZyByZXRyeSBzdHJhdGVneSAke3N0cmF0ZWd5Lm5hbWV9LmApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2RpZmllcnMgPSBzdHJhdGVneS5yZXRyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUVycm9yLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVycy5za2lwU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFNraXBwZWQuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBzdHJhdGVnaWVzTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yVG9UaHJvdywgcmV0cnlBZnRlckluTXMsIHJlZGlyZWN0VG8gfSA9IG1vZGlmaWVycztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yVG9UaHJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuZXJyb3IoYFJldHJ5ICR7cmV0cnlDb3VudH06IFJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0gdGhyb3dzIGVycm9yOmAsIGVycm9yVG9UaHJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclRvVGhyb3c7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5QWZ0ZXJJbk1zIHx8IHJldHJ5QWZ0ZXJJbk1zID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJhdGVneUxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBSZXRyeSBzdHJhdGVneSAke3N0cmF0ZWd5Lm5hbWV9IHJldHJpZXMgYWZ0ZXIgJHtyZXRyeUFmdGVySW5Nc31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBoZWxwZXJzX2pzXzEuZGVsYXkpKHJldHJ5QWZ0ZXJJbk1zLCB1bmRlZmluZWQsIHsgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSByZXRyeVJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0VG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0gcmVkaXJlY3RzIHRvICR7cmVkaXJlY3RUb31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsID0gcmVkaXJlY3RUbztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHJldHJ5UmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgTm9uZSBvZiB0aGUgcmV0cnkgc3RyYXRlZ2llcyBjb3VsZCB3b3JrIHdpdGggdGhlIHJlY2VpdmVkIGVycm9yLiBUaHJvd2luZyBpdC5gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBOb25lIG9mIHRoZSByZXRyeSBzdHJhdGVnaWVzIGNvdWxkIHdvcmsgd2l0aCB0aGUgcmVjZWl2ZWQgcmVzcG9uc2UuIFJldHVybmluZyBpdC5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiBhbGwgdGhlIHJldHJpZXMgc2tpcCBhbmQgdGhlcmUncyBubyByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAvLyB3ZSdyZSBzdGlsbCBpbiB0aGUgcmV0cnkgbG9vcCwgc28gYSBuZXcgcmVxdWVzdCB3aWxsIGJlIHNlbnRcbiAgICAgICAgICAgICAgICAvLyB1bnRpbCBgbWF4UmV0cmllc2AgaXMgcmVhY2hlZC5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0UmV0cnlQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0UmV0cnlQb2xpY3kgPSBkZWZhdWx0UmV0cnlQb2xpY3k7XG5jb25zdCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayBkZWZhdWx0UmV0cnlQb2xpY3l9XG4gKi9cbmV4cG9ydHMuZGVmYXVsdFJldHJ5UG9saWN5TmFtZSA9IFwiZGVmYXVsdFJldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgcmV0cmllcyBhY2NvcmRpbmcgdG8gdGhyZWUgc3RyYXRlZ2llczpcbiAqIC0gV2hlbiB0aGUgc2VydmVyIHNlbmRzIGEgNDI5IHJlc3BvbnNlIHdpdGggYSBSZXRyeS1BZnRlciBoZWFkZXIuXG4gKiAtIFdoZW4gdGhlcmUgYXJlIGVycm9ycyBpbiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gRE5TIGxvb2t1cCBmYWlsdXJlcykuXG4gKiAtIE9yIG90aGVyd2lzZSBpZiB0aGUgb3V0Z29pbmcgcmVxdWVzdCBmYWlscywgaXQgd2lsbCByZXRyeSB3aXRoIGFuIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZyBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFJldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIHNlbmRSZXF1ZXN0OiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoWygwLCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xLnRocm90dGxpbmdSZXRyeVN0cmF0ZWd5KSgpLCAoMCwgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KShvcHRpb25zKV0sIHtcbiAgICAgICAgICAgIG1heFJldHJpZXM6IChfYSA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQsXG4gICAgICAgIH0pLnNlbmRSZXF1ZXN0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0UmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVIdHRwSGVhZGVycyA9IGNyZWF0ZUh0dHBIZWFkZXJzO1xuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbmZ1bmN0aW9uKiBoZWFkZXJJdGVyYXRvcihtYXApIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG1hcC52YWx1ZXMoKSkge1xuICAgICAgICB5aWVsZCBbZW50cnkubmFtZSwgZW50cnkudmFsdWVdO1xuICAgIH1cbn1cbmNsYXNzIEh0dHBIZWFkZXJzSW1wbCB7XG4gICAgY29uc3RydWN0b3IocmF3SGVhZGVycykge1xuICAgICAgICB0aGlzLl9oZWFkZXJzTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAocmF3SGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKHJhd0hlYWRlcnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoaGVhZGVyTmFtZSwgcmF3SGVhZGVyc1toZWFkZXJOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGEgaGVhZGVyIGluIHRoaXMgY29sbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFuZCB2YWx1ZS4gVGhlIG5hbWUgaXNcbiAgICAgKiBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byBzZXQuIFRoaXMgdmFsdWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGhlYWRlciB0byBzZXQuXG4gICAgICovXG4gICAgc2V0KG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlcnNNYXAuc2V0KG5vcm1hbGl6ZU5hbWUobmFtZSksIHsgbmFtZSwgdmFsdWU6IFN0cmluZyh2YWx1ZSkudHJpbSgpIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIGhlYWRlciBuYW1lLCBvciB1bmRlZmluZWQgaWYgbm8gaGVhZGVyIGV4aXN0cyBpbiB0aGlzXG4gICAgICogY29sbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlci4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqL1xuICAgIGdldChuYW1lKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2hlYWRlcnNNYXAuZ2V0KG5vcm1hbGl6ZU5hbWUobmFtZSkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCB0aGlzIGhlYWRlciBjb2xsZWN0aW9uIGNvbnRhaW5zIGEgaGVhZGVyIGVudHJ5IGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHNldC4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqL1xuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJzTWFwLmhhcyhub3JtYWxpemVOYW1lKG5hbWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHRoZSBoZWFkZXIgd2l0aCB0aGUgcHJvdmlkZWQgaGVhZGVyTmFtZS5cbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gcmVtb3ZlLlxuICAgICAqL1xuICAgIGRlbGV0ZShuYW1lKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlcnNNYXAuZGVsZXRlKG5vcm1hbGl6ZU5hbWUobmFtZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEpTT04gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b0pTT04ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucy5wcmVzZXJ2ZUNhc2UpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5faGVhZGVyc01hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtlbnRyeS5uYW1lXSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbm9ybWFsaXplZE5hbWUsIGVudHJ5XSBvZiB0aGlzLl9oZWFkZXJzTWFwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W25vcm1hbGl6ZWROYW1lXSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlcmF0ZSBvdmVyIHR1cGxlcyBvZiBoZWFkZXIgW25hbWUsIHZhbHVlXSBwYWlycy5cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlckl0ZXJhdG9yKHRoaXMuX2hlYWRlcnNNYXApO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBzYXRpc2ZpZXMgdGhlIGBIdHRwSGVhZGVyc2AgaW50ZXJmYWNlLlxuICogQHBhcmFtIHJhd0hlYWRlcnMgLSBBIHNpbXBsZSBvYmplY3QgcmVwcmVzZW50aW5nIGluaXRpYWwgaGVhZGVyc1xuICovXG5mdW5jdGlvbiBjcmVhdGVIdHRwSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVyc0ltcGwocmF3SGVhZGVycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1odHRwSGVhZGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZvcm1EYXRhUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuZm9ybURhdGFQb2xpY3kgPSBmb3JtRGF0YVBvbGljeTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4uL2h0dHBIZWFkZXJzLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGZvcm1EYXRhUG9saWN5LlxuICovXG5leHBvcnRzLmZvcm1EYXRhUG9saWN5TmFtZSA9IFwiZm9ybURhdGFQb2xpY3lcIjtcbmZ1bmN0aW9uIGZvcm1EYXRhVG9Gb3JtRGF0YU1hcChmb3JtRGF0YSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBmb3JtRGF0YU1hcCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGZvcm1EYXRhLmVudHJpZXMoKSkge1xuICAgICAgICAoX2EgPSBmb3JtRGF0YU1hcFtrZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoZm9ybURhdGFNYXBba2V5XSA9IFtdKTtcbiAgICAgICAgZm9ybURhdGFNYXBba2V5XS5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1EYXRhTWFwO1xufVxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGVuY29kZXMgRm9ybURhdGEgb24gdGhlIHJlcXVlc3QgaW50byB0aGUgYm9keS5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFQb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5mb3JtRGF0YVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjb3JlX3V0aWxfMS5pc05vZGVMaWtlICYmIHR5cGVvZiBGb3JtRGF0YSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuZm9ybURhdGEgPSBmb3JtRGF0YVRvRm9ybURhdGFNYXAocmVxdWVzdC5ib2R5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5mb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gd3d3Rm9ybVVybEVuY29kZShyZXF1ZXN0LmZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHByZXBhcmVGb3JtRGF0YShyZXF1ZXN0LmZvcm1EYXRhLCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5mb3JtRGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiB3d3dGb3JtVXJsRW5jb2RlKGZvcm1EYXRhKSB7XG4gICAgY29uc3QgdXJsU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZvcm1EYXRhKSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViVmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB1cmxTZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgc3ViVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1cmxTZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybFNlYXJjaFBhcmFtcy50b1N0cmluZygpO1xufVxuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUZvcm1EYXRhKGZvcm1EYXRhLCByZXF1ZXN0KSB7XG4gICAgLy8gdmFsaWRhdGUgY29udGVudCB0eXBlIChtdWx0aXBhcnQvZm9ybS1kYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICBpZiAoY29udGVudFR5cGUgJiYgIWNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIpKSB7XG4gICAgICAgIC8vIGNvbnRlbnQgdHlwZSBpcyBzcGVjaWZpZWQgYW5kIGlzIG5vdCBtdWx0aXBhcnQvZm9ybS1kYXRhLiBFeGl0LlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgY29udGVudFR5cGUgIT09IG51bGwgJiYgY29udGVudFR5cGUgIT09IHZvaWQgMCA/IGNvbnRlbnRUeXBlIDogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIpO1xuICAgIC8vIHNldCBib2R5IHRvIE11bHRpcGFydFJlcXVlc3RCb2R5IHVzaW5nIGNvbnRlbnQgZnJvbSBGb3JtRGF0YU1hcFxuICAgIGNvbnN0IHBhcnRzID0gW107XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKGZvcm1EYXRhKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHZhbHVlcyA6IFt2YWx1ZXNdKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6ICgwLCBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzKSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIjogYGZvcm0tZGF0YTsgbmFtZT1cIiR7ZmllbGROYW1lfVwiYCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6ICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKHZhbHVlLCBcInV0Zi04XCIpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgZm9yIGtleSAke2ZpZWxkTmFtZX06ICR7dmFsdWV9LiBWYWx1ZSBzaG91bGQgYmUgc2VyaWFsaXplZCB0byBzdHJpbmcgZmlyc3QuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB1c2luZyB8fCBpbnN0ZWFkIG9mID8/IGhlcmUgc2luY2UgaWYgdmFsdWUubmFtZSBpcyBlbXB0eSB3ZSBzaG91bGQgY3JlYXRlIGEgZmlsZSBuYW1lXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB2YWx1ZS5uYW1lIHx8IFwiYmxvYlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVycykoKTtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldChcIkNvbnRlbnQtRGlzcG9zaXRpb25cIiwgYGZvcm0tZGF0YTsgbmFtZT1cIiR7ZmllbGROYW1lfVwiOyBmaWxlbmFtZT1cIiR7ZmlsZU5hbWV9XCJgKTtcbiAgICAgICAgICAgICAgICAvLyBhZ2FpbiwgfHwgaXMgdXNlZCBzaW5jZSBhbiBlbXB0eSB2YWx1ZS50eXBlIG1lYW5zIHRoZSBjb250ZW50IHR5cGUgaXMgdW5zZXRcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCB2YWx1ZS50eXBlIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpO1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0Lm11bHRpcGFydEJvZHkgPSB7IHBhcnRzIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtRGF0YVBvbGljeS5qcy5tYXAiLAogICAgIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICd3ZWVrcyc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgY2FzZSAndyc6XG4gICAgICByZXR1cm4gbiAqIHc7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBoLCAnaG91cicpO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gIH1cbiAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBtc0FicywgbiwgbmFtZSkge1xuICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsCiAgICAiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBkZWJ1ZyBpbnN0YW5jZSB0byBiZSBjb2xvcmVkXG5cdCogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuXHRcdGxldCBoYXNoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcblx0XHRcdGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuXHR9XG5cdGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG5cblx0LyoqXG5cdCogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQHJldHVybiB7RnVuY3Rpb259XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cdFx0bGV0IHByZXZUaW1lO1xuXHRcdGxldCBlbmFibGVPdmVycmlkZSA9IG51bGw7XG5cdFx0bGV0IG5hbWVzcGFjZXNDYWNoZTtcblx0XHRsZXQgZW5hYmxlZENhY2hlO1xuXG5cdFx0ZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuXHRcdFx0Ly8gRGlzYWJsZWQ/XG5cdFx0XHRpZiAoIWRlYnVnLmVuYWJsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZWxmID0gZGVidWc7XG5cblx0XHRcdC8vIFNldCBgZGlmZmAgdGltZXN0YW1wXG5cdFx0XHRjb25zdCBjdXJyID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXHRcdFx0Y29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuXHRcdFx0c2VsZi5kaWZmID0gbXM7XG5cdFx0XHRzZWxmLnByZXYgPSBwcmV2VGltZTtcblx0XHRcdHNlbGYuY3VyciA9IGN1cnI7XG5cdFx0XHRwcmV2VGltZSA9IGN1cnI7XG5cblx0XHRcdGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cblx0XHRcdFx0YXJncy51bnNoaWZ0KCclTycpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuXHRcdFx0bGV0IGluZGV4ID0gMDtcblx0XHRcdGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCAobWF0Y2gsIGZvcm1hdCkgPT4ge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG5cdFx0XHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0XHRcdHJldHVybiAnJSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGNvbnN0IHZhbCA9IGFyZ3NbaW5kZXhdO1xuXHRcdFx0XHRcdG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuXHRcdFx0XHRcdC8vIE5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcblx0XHRcdGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcblxuXHRcdFx0Y29uc3QgbG9nRm4gPSBzZWxmLmxvZyB8fCBjcmVhdGVEZWJ1Zy5sb2c7XG5cdFx0XHRsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcblx0XHR9XG5cblx0XHRkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG5cdFx0ZGVidWcudXNlQ29sb3JzID0gY3JlYXRlRGVidWcudXNlQ29sb3JzKCk7XG5cdFx0ZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuXHRcdGRlYnVnLmV4dGVuZCA9IGV4dGVuZDtcblx0XHRkZWJ1Zy5kZXN0cm95ID0gY3JlYXRlRGVidWcuZGVzdHJveTsgLy8gWFhYIFRlbXBvcmFyeS4gV2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVidWcsICdlbmFibGVkJywge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGVuYWJsZU92ZXJyaWRlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcblx0XHRcdFx0XHRuYW1lc3BhY2VzQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzO1xuXHRcdFx0XHRcdGVuYWJsZWRDYWNoZSA9IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbmFibGVkQ2FjaGU7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXHRcdGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0bGV0IGk7XG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuXHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCFzcGxpdFtpXSkge1xuXHRcdFx0XHQvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cblx0XHRcdGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc2xpY2UoMSkgKyAnJCcpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG5cdCpcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBkaXNhYmxlKCkge1xuXHRcdGNvbnN0IG5hbWVzcGFjZXMgPSBbXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5uYW1lcy5tYXAodG9OYW1lc3BhY2UpLFxuXHRcdFx0Li4uY3JlYXRlRGVidWcuc2tpcHMubWFwKHRvTmFtZXNwYWNlKS5tYXAobmFtZXNwYWNlID0+ICctJyArIG5hbWVzcGFjZSlcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuXHRcdHJldHVybiBuYW1lc3BhY2VzO1xuXHR9XG5cblx0LyoqXG5cdCogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0KiBAcmV0dXJuIHtCb29sZWFufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuXHRcdGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGk7XG5cdFx0bGV0IGxlbjtcblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQqIENvbnZlcnQgcmVnZXhwIHRvIG5hbWVzcGFjZVxuXHQqXG5cdCogQHBhcmFtIHtSZWdFeHB9IHJlZ3hlcFxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHRvTmFtZXNwYWNlKHJlZ2V4cCkge1xuXHRcdHJldHVybiByZWdleHAudG9TdHJpbmcoKVxuXHRcdFx0LnN1YnN0cmluZygyLCByZWdleHAudG9TdHJpbmcoKS5sZW5ndGggLSAyKVxuXHRcdFx0LnJlcGxhY2UoL1xcLlxcKlxcPyQvLCAnKicpO1xuXHR9XG5cblx0LyoqXG5cdCogQ29lcmNlIGB2YWxgLlxuXHQqXG5cdCogQHBhcmFtIHtNaXhlZH0gdmFsXG5cdCogQHJldHVybiB7TWl4ZWR9XG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcblx0XHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvKipcblx0KiBYWFggRE8gTk9UIFVTRS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdHViIGZ1bmN0aW9uLlxuXHQqIFhYWCBJdCBXSUxMIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblx0Ki9cblx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0fVxuXG5cdGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuXG5cdHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcbiIsCiAgICAiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGxldCBtO1xuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIChtID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykpICYmIHBhcnNlSW50KG1bMV0sIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLAogICAgIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdFdpdGhPcHRpb25zKClgIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMgYW5kIHdyaXRlcyB0byBzdGRlcnIuXG4gKi9cblxuZnVuY3Rpb24gbG9nKC4uLmFyZ3MpIHtcblx0cmV0dXJuIHByb2Nlc3Muc3RkZXJyLndyaXRlKHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoZXhwb3J0cy5pbnNwZWN0T3B0cywgLi4uYXJncykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG5cdFx0Ly8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cblx0XHRkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRyZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdChkZWJ1Zykge1xuXHRkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChzdHIgPT4gc3RyLnRyaW0oKSlcblx0XHQuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJU8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuIiwKICAgICIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVxID0gZXhwb3J0cy5qc29uID0gZXhwb3J0cy50b0J1ZmZlciA9IHZvaWQgMDtcbmNvbnN0IGh0dHAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBcIikpO1xuY29uc3QgaHR0cHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBzXCIpKTtcbmFzeW5jIGZ1bmN0aW9uIHRvQnVmZmVyKHN0cmVhbSkge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzLCBsZW5ndGgpO1xufVxuZXhwb3J0cy50b0J1ZmZlciA9IHRvQnVmZmVyO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmFzeW5jIGZ1bmN0aW9uIGpzb24oc3RyZWFtKSB7XG4gICAgY29uc3QgYnVmID0gYXdhaXQgdG9CdWZmZXIoc3RyZWFtKTtcbiAgICBjb25zdCBzdHIgPSBidWYudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpO1xuICAgIH1cbiAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICBjb25zdCBlcnIgPSBfZXJyO1xuICAgICAgICBlcnIubWVzc2FnZSArPSBgIChpbnB1dDogJHtzdHJ9KWA7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG59XG5leHBvcnRzLmpzb24gPSBqc29uO1xuZnVuY3Rpb24gcmVxKHVybCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgaHJlZiA9IHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnID8gdXJsIDogdXJsLmhyZWY7XG4gICAgY29uc3QgcmVxID0gKGhyZWYuc3RhcnRzV2l0aCgnaHR0cHM6JykgPyBodHRwcyA6IGh0dHApLnJlcXVlc3QodXJsLCBvcHRzKTtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXFcbiAgICAgICAgICAgIC5vbmNlKCdyZXNwb25zZScsIHJlc29sdmUpXG4gICAgICAgICAgICAub25jZSgnZXJyb3InLCByZWplY3QpXG4gICAgICAgICAgICAuZW5kKCk7XG4gICAgfSk7XG4gICAgcmVxLnRoZW4gPSBwcm9taXNlLnRoZW4uYmluZChwcm9taXNlKTtcbiAgICByZXR1cm4gcmVxO1xufVxuZXhwb3J0cy5yZXEgPSByZXE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFnZW50ID0gdm9pZCAwO1xuY29uc3QgbmV0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJuZXRcIikpO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwc18xID0gcmVxdWlyZShcImh0dHBzXCIpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2hlbHBlcnNcIiksIGV4cG9ydHMpO1xuY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ0FnZW50QmFzZUludGVybmFsU3RhdGUnKTtcbmNsYXNzIEFnZW50IGV4dGVuZHMgaHR0cC5BZ2VudCB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpc1tJTlRFUk5BTF0gPSB7fTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBgaHR0cGAgb3IgYGh0dHBzYCByZXF1ZXN0LlxuICAgICAqL1xuICAgIGlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgLy8gRmlyc3QgY2hlY2sgdGhlIGBzZWN1cmVFbmRwb2ludGAgcHJvcGVydHkgZXhwbGljaXRseSwgc2luY2UgdGhpc1xuICAgICAgICAgICAgLy8gbWVhbnMgdGhhdCBhIHBhcmVudCBgQWdlbnRgIGlzIFwicGFzc2luZyB0aHJvdWdoXCIgdG8gdGhpcyBpbnN0YW5jZS5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnNlY3VyZUVuZHBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgbm8gZXhwbGljaXQgYHNlY3VyZWAgZW5kcG9pbnQsIGNoZWNrIGlmIGBwcm90b2NvbGAgcHJvcGVydHkgaXNcbiAgICAgICAgICAgIC8vIHNldC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIGNhc2Ugc2luY2UgdXNpbmcgYSBmdWxsIHN0cmluZyBVUkxcbiAgICAgICAgICAgIC8vIG9yIGBVUkxgIGluc3RhbmNlIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNhZ2UuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJvdG9jb2wgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEZpbmFsbHksIGlmIG5vIGBwcm90b2NvbGAgcHJvcGVydHkgd2FzIHNldCwgdGhlbiBmYWxsIGJhY2sgdG9cbiAgICAgICAgLy8gY2hlY2tpbmcgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBjdXJyZW50IGNhbGwgc3RhY2ssIGFuZCB0cnkgdG9cbiAgICAgICAgLy8gZGV0ZWN0IHRoZSBcImh0dHBzXCIgbW9kdWxlLlxuICAgICAgICBjb25zdCB7IHN0YWNrIH0gPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFjayAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdGFja1xuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLnNvbWUoKGwpID0+IGwuaW5kZXhPZignKGh0dHBzLmpzOicpICE9PSAtMSB8fFxuICAgICAgICAgICAgbC5pbmRleE9mKCdub2RlOmh0dHBzOicpICE9PSAtMSk7XG4gICAgfVxuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgYXN5bmMgc2lnbmF0dXJlcyBpbiBgY29ubmVjdCgpYCBhbmQgTm9kZSdzIG5hdGl2ZVxuICAgIC8vIGNvbm5lY3Rpb24gcG9vbGluZyBpbiBgaHR0cC5BZ2VudGAsIHRoZSBhcnJheSBvZiBzb2NrZXRzIGZvciBlYWNoIG9yaWdpblxuICAgIC8vIGhhcyB0byBiZSB1cGRhdGVkIHN5bmNocm9ub3VzbHkuIFRoaXMgaXMgc28gdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgaXNcbiAgICAvLyBhY2N1cmF0ZSB3aGVuIGBhZGRSZXF1ZXN0KClgIGlzIG5leHQgY2FsbGVkLiBXZSBhY2hpZXZlIHRoaXMgYnkgY3JlYXRpbmcgYVxuICAgIC8vIGZha2Ugc29ja2V0IGFuZCBhZGRpbmcgaXQgdG8gYHNvY2tldHNbb3JpZ2luXWAgYW5kIGluY3JlbWVudGluZ1xuICAgIC8vIGB0b3RhbFNvY2tldENvdW50YC5cbiAgICBpbmNyZW1lbnRTb2NrZXRzKG5hbWUpIHtcbiAgICAgICAgLy8gSWYgYG1heFNvY2tldHNgIGFuZCBgbWF4VG90YWxTb2NrZXRzYCBhcmUgYm90aCBJbmZpbml0eSB0aGVuIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIG5lZWQgdG8gY3JlYXRlIGEgZmFrZSBzb2NrZXQgYmVjYXVzZSBOb2RlLmpzIG5hdGl2ZSBjb25uZWN0aW9uIHBvb2xpbmdcbiAgICAgICAgLy8gd2lsbCBuZXZlciBiZSBpbnZva2VkLlxuICAgICAgICBpZiAodGhpcy5tYXhTb2NrZXRzID09PSBJbmZpbml0eSAmJiB0aGlzLm1heFRvdGFsU29ja2V0cyA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsbCBpbnN0YW5jZXMgb2YgYHNvY2tldHNgIGFyZSBleHBlY3RlZCBUeXBlU2NyaXB0IGVycm9ycy4gVGhlXG4gICAgICAgIC8vIGFsdGVybmF0aXZlIGlzIHRvIGFkZCBpdCBhcyBhIHByaXZhdGUgcHJvcGVydHkgb2YgdGhpcyBjbGFzcyBidXQgdGhhdFxuICAgICAgICAvLyB3aWxsIGJyZWFrIFR5cGVTY3JpcHQgc3ViY2xhc3NpbmcuXG4gICAgICAgIGlmICghdGhpcy5zb2NrZXRzW25hbWVdKSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBzb2NrZXRzYCBpcyByZWFkb25seSBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICB0aGlzLnNvY2tldHNbbmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gbmV3IG5ldC5Tb2NrZXQoeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMuc29ja2V0c1tuYW1lXS5wdXNoKGZha2VTb2NrZXQpO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGB0b3RhbFNvY2tldENvdW50YCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgdGhpcy50b3RhbFNvY2tldENvdW50Kys7XG4gICAgICAgIHJldHVybiBmYWtlU29ja2V0O1xuICAgIH1cbiAgICBkZWNyZW1lbnRTb2NrZXRzKG5hbWUsIHNvY2tldCkge1xuICAgICAgICBpZiAoIXRoaXMuc29ja2V0c1tuYW1lXSB8fCBzb2NrZXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb2NrZXRzID0gdGhpcy5zb2NrZXRzW25hbWVdO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNvY2tldHMuaW5kZXhPZihzb2NrZXQpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBzb2NrZXRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yICBgdG90YWxTb2NrZXRDb3VudGAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICB0aGlzLnRvdGFsU29ja2V0Q291bnQtLTtcbiAgICAgICAgICAgIGlmIChzb2NrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHNvY2tldHNgIGlzIHJlYWRvbmx5IGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zb2NrZXRzW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEluIG9yZGVyIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc29ja2V0IHBvb2wsIHdlIG5lZWQgdG8gY2FsbCBgZ2V0TmFtZSgpYCBvblxuICAgIC8vIHRoZSBjb3JlIGBodHRwcy5BZ2VudGAgaWYgaXQgaXMgYSBzZWN1cmVFbmRwb2ludC5cbiAgICBnZXROYW1lKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc2VjdXJlRW5kcG9pbnQgPSB0eXBlb2Ygb3B0aW9ucy5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICA/IG9wdGlvbnMuc2VjdXJlRW5kcG9pbnRcbiAgICAgICAgICAgIDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpO1xuICAgICAgICBpZiAoc2VjdXJlRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGdldE5hbWUoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICByZXR1cm4gaHR0cHNfMS5BZ2VudC5wcm90b3R5cGUuZ2V0TmFtZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGdldE5hbWUoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgIHJldHVybiBzdXBlci5nZXROYW1lKG9wdGlvbnMpO1xuICAgIH1cbiAgICBjcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYikge1xuICAgICAgICBjb25zdCBjb25uZWN0T3B0cyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBzZWN1cmVFbmRwb2ludDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKGNvbm5lY3RPcHRzKTtcbiAgICAgICAgY29uc3QgZmFrZVNvY2tldCA9IHRoaXMuaW5jcmVtZW50U29ja2V0cyhuYW1lKTtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuY29ubmVjdChyZXEsIGNvbm5lY3RPcHRzKSlcbiAgICAgICAgICAgIC50aGVuKChzb2NrZXQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50U29ja2V0cyhuYW1lLCBmYWtlU29ja2V0KTtcbiAgICAgICAgICAgIGlmIChzb2NrZXQgaW5zdGFuY2VvZiBodHRwLkFnZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmFkZFJlcXVlc3QocmVxLCBjb25uZWN0T3B0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gc29ja2V0O1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgY3JlYXRlU29ja2V0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpO1xuICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlY3JlbWVudFNvY2tldHMobmFtZSwgZmFrZVNvY2tldCk7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3JlYXRlQ29ubmVjdGlvbigpIHtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldDtcbiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFzb2NrZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc29ja2V0IHdhcyByZXR1cm5lZCBpbiB0aGUgYGNvbm5lY3QoKWAgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgIH1cbiAgICBnZXQgZGVmYXVsdFBvcnQoKSB7XG4gICAgICAgIHJldHVybiAodGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPz9cbiAgICAgICAgICAgICh0aGlzLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSk7XG4gICAgfVxuICAgIHNldCBkZWZhdWx0UG9ydCh2KSB7XG4gICAgICAgIGlmICh0aGlzW0lOVEVSTkFMXSkge1xuICAgICAgICAgICAgdGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPSB2O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBwcm90b2NvbCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCA/P1xuICAgICAgICAgICAgKHRoaXMuaXNTZWN1cmVFbmRwb2ludCgpID8gJ2h0dHBzOicgOiAnaHR0cDonKSk7XG4gICAgfVxuICAgIHNldCBwcm90b2NvbCh2KSB7XG4gICAgICAgIGlmICh0aGlzW0lOVEVSTkFMXSkge1xuICAgICAgICAgICAgdGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wgPSB2O1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5BZ2VudCA9IEFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VQcm94eVJlc3BvbnNlID0gdm9pZCAwO1xuY29uc3QgZGVidWdfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZGVidWdcIikpO1xuY29uc3QgZGVidWcgPSAoMCwgZGVidWdfMS5kZWZhdWx0KSgnaHR0cHMtcHJveHktYWdlbnQ6cGFyc2UtcHJveHktcmVzcG9uc2UnKTtcbmZ1bmN0aW9uIHBhcnNlUHJveHlSZXNwb25zZShzb2NrZXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGJ1ZmZlciBhbnkgSFRUUCB0cmFmZmljIHRoYXQgaGFwcGVucyB3aXRoIHRoZSBwcm94eSBiZWZvcmUgd2UgZ2V0XG4gICAgICAgIC8vIHRoZSBDT05ORUNUIHJlc3BvbnNlLCBzbyB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuIFwiMjAwXCJcbiAgICAgICAgLy8gcmVzcG9uc2UgY29kZSwgdGhlbiB3ZSBjYW4gcmUtcGxheSB0aGUgXCJkYXRhXCIgZXZlbnRzIG9uIHRoZSBzb2NrZXQgb25jZSB0aGVcbiAgICAgICAgLy8gSFRUUCBwYXJzZXIgaXMgaG9va2VkIHVwLi4uXG4gICAgICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDtcbiAgICAgICAgY29uc3QgYnVmZmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgYiA9IHNvY2tldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoYilcbiAgICAgICAgICAgICAgICBvbmRhdGEoYik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc29ja2V0Lm9uY2UoJ3JlYWRhYmxlJywgcmVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIHJlYWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgZGVidWcoJ29uZW5kJyk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQcm94eSBjb25uZWN0aW9uIGVuZGVkIGJlZm9yZSByZWNlaXZpbmcgQ09OTkVDVCByZXNwb25zZScpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbmVycm9yKGVycikge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgZGVidWcoJ29uZXJyb3IgJW8nLCBlcnIpO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25kYXRhKGIpIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChiKTtcbiAgICAgICAgICAgIGJ1ZmZlcnNMZW5ndGggKz0gYi5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBidWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgYnVmZmVyc0xlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBlbmRPZkhlYWRlcnMgPSBidWZmZXJlZC5pbmRleE9mKCdcXHJcXG5cXHJcXG4nKTtcbiAgICAgICAgICAgIGlmIChlbmRPZkhlYWRlcnMgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8ga2VlcCBidWZmZXJpbmdcbiAgICAgICAgICAgICAgICBkZWJ1ZygnaGF2ZSBub3QgcmVjZWl2ZWQgZW5kIG9mIEhUVFAgaGVhZGVycyB5ZXQuLi4nKTtcbiAgICAgICAgICAgICAgICByZWFkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZFxuICAgICAgICAgICAgICAgIC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCdhc2NpaScpXG4gICAgICAgICAgICAgICAgLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoIWZpcnN0TGluZSkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ05vIGhlYWRlciByZWNlaXZlZCBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdExpbmVQYXJ0cyA9IGZpcnN0TGluZS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9ICtmaXJzdExpbmVQYXJ0c1sxXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBmaXJzdExpbmVQYXJ0cy5zbGljZSgyKS5qb2luKCcgJyk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJQYXJ0cykge1xuICAgICAgICAgICAgICAgIGlmICghaGVhZGVyKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbG9uID0gaGVhZGVyLmluZGV4T2YoJzonKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDb2xvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgaGVhZGVyIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZTogXCIke2hlYWRlcn1cImApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyLnNsaWNlKDAsIGZpcnN0Q29sb24pLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXIuc2xpY2UoZmlyc3RDb2xvbiArIDEpLnRyaW1TdGFydCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBoZWFkZXJzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSBbY3VycmVudCwgdmFsdWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1ZygnZ290IHByb3h5IHNlcnZlciByZXNwb25zZTogJW8gJW8nLCBmaXJzdExpbmUsIGhlYWRlcnMpO1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgY29ubmVjdDoge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYnVmZmVyZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzb2NrZXQub24oJ2Vycm9yJywgb25lcnJvcik7XG4gICAgICAgIHNvY2tldC5vbignZW5kJywgb25lbmQpO1xuICAgICAgICByZWFkKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLnBhcnNlUHJveHlSZXNwb25zZSA9IHBhcnNlUHJveHlSZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlLXByb3h5LXJlc3BvbnNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cHNQcm94eUFnZW50ID0gdm9pZCAwO1xuY29uc3QgbmV0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJuZXRcIikpO1xuY29uc3QgdGxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJ0bHNcIikpO1xuY29uc3QgYXNzZXJ0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImFzc2VydFwiKSk7XG5jb25zdCBkZWJ1Z18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJkZWJ1Z1wiKSk7XG5jb25zdCBhZ2VudF9iYXNlXzEgPSByZXF1aXJlKFwiYWdlbnQtYmFzZVwiKTtcbmNvbnN0IHVybF8xID0gcmVxdWlyZShcInVybFwiKTtcbmNvbnN0IHBhcnNlX3Byb3h5X3Jlc3BvbnNlXzEgPSByZXF1aXJlKFwiLi9wYXJzZS1wcm94eS1yZXNwb25zZVwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIGRlYnVnXzEuZGVmYXVsdCkoJ2h0dHBzLXByb3h5LWFnZW50Jyk7XG4vKipcbiAqIFRoZSBgSHR0cHNQcm94eUFnZW50YCBpbXBsZW1lbnRzIGFuIEhUVFAgQWdlbnQgc3ViY2xhc3MgdGhhdCBjb25uZWN0cyB0b1xuICogdGhlIHNwZWNpZmllZCBcIkhUVFAocykgcHJveHkgc2VydmVyXCIgaW4gb3JkZXIgdG8gcHJveHkgSFRUUFMgcmVxdWVzdHMuXG4gKlxuICogT3V0Z29pbmcgSFRUUCByZXF1ZXN0cyBhcmUgZmlyc3QgdHVubmVsZWQgdGhyb3VnaCB0aGUgcHJveHkgc2VydmVyIHVzaW5nIHRoZVxuICogYENPTk5FQ1RgIEhUVFAgcmVxdWVzdCBtZXRob2QgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLFxuICogYW5kIHRoZW4gdGhlIHByb3h5IHNlcnZlciBjb25uZWN0cyB0byB0aGUgZGVzdGluYXRpb24gdGFyZ2V0IGFuZCBpc3N1ZXMgdGhlXG4gKiBIVFRQIHJlcXVlc3QgZnJvbSB0aGUgcHJveHkgc2VydmVyLlxuICpcbiAqIGBodHRwczpgIHJlcXVlc3RzIGhhdmUgdGhlaXIgc29ja2V0IGNvbm5lY3Rpb24gdXBncmFkZWQgdG8gVExTIG9uY2VcbiAqIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuXG4gKi9cbmNsYXNzIEh0dHBzUHJveHlBZ2VudCBleHRlbmRzIGFnZW50X2Jhc2VfMS5BZ2VudCB7XG4gICAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgcGF0aDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMucHJveHkgPSB0eXBlb2YgcHJveHkgPT09ICdzdHJpbmcnID8gbmV3IHVybF8xLlVSTChwcm94eSkgOiBwcm94eTtcbiAgICAgICAgdGhpcy5wcm94eUhlYWRlcnMgPSBvcHRzPy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBzUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpO1xuICAgICAgICAvLyBUcmltIG9mZiB0aGUgYnJhY2tldHMgZnJvbSBJUHY2IGFkZHJlc3Nlc1xuICAgICAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5wcm94eS5wb3J0XG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApXG4gICAgICAgICAgICA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonXG4gICAgICAgICAgICAgICAgPyA0NDNcbiAgICAgICAgICAgICAgICA6IDgwO1xuICAgICAgICB0aGlzLmNvbm5lY3RPcHRzID0ge1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBuZWdvdGlhdGUgaHR0cC8xLjEgZm9yIHByb3h5IHNlcnZlcnMgdGhhdCBzdXBwb3J0IGh0dHAvMlxuICAgICAgICAgICAgQUxQTlByb3RvY29sczogWydodHRwLzEuMSddLFxuICAgICAgICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSxcbiAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICBwb3J0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgbm9kZS1jb3JlIEhUVFAgY2xpZW50IGxpYnJhcnkgaXMgY3JlYXRpbmcgYVxuICAgICAqIG5ldyBIVFRQIHJlcXVlc3QuXG4gICAgICovXG4gICAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHtcbiAgICAgICAgY29uc3QgeyBwcm94eSB9ID0gdGhpcztcbiAgICAgICAgaWYgKCFvcHRzLmhvc3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIFwiaG9zdFwiIHByb3ZpZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci5cbiAgICAgICAgbGV0IHNvY2tldDtcbiAgICAgICAgaWYgKHByb3h5LnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgZGVidWcoJ0NyZWF0aW5nIGB0bHMuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSB0aGlzLmNvbm5lY3RPcHRzLnNlcnZlcm5hbWUgfHwgdGhpcy5jb25uZWN0T3B0cy5ob3N0O1xuICAgICAgICAgICAgc29ja2V0ID0gdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY29ubmVjdE9wdHMsXG4gICAgICAgICAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVidWcoJ0NyZWF0aW5nIGBuZXQuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gdGhpcy5wcm94eUhlYWRlcnMoKVxuICAgICAgICAgICAgOiB7IC4uLnRoaXMucHJveHlIZWFkZXJzIH07XG4gICAgICAgIGNvbnN0IGhvc3QgPSBuZXQuaXNJUHY2KG9wdHMuaG9zdCkgPyBgWyR7b3B0cy5ob3N0fV1gIDogb3B0cy5ob3N0O1xuICAgICAgICBsZXQgcGF5bG9hZCA9IGBDT05ORUNUICR7aG9zdH06JHtvcHRzLnBvcnR9IEhUVFAvMS4xXFxyXFxuYDtcbiAgICAgICAgLy8gSW5qZWN0IHRoZSBgUHJveHktQXV0aG9yaXphdGlvbmAgaGVhZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICAgICAgaWYgKHByb3h5LnVzZXJuYW1lIHx8IHByb3h5LnBhc3N3b3JkKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRoID0gYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocHJveHkucGFzc3dvcmQpfWA7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDtcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gO1xuICAgICAgICBpZiAoIWhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSkge1xuICAgICAgICAgICAgaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddID0gdGhpcy5rZWVwQWxpdmVcbiAgICAgICAgICAgICAgICA/ICdLZWVwLUFsaXZlJ1xuICAgICAgICAgICAgICAgIDogJ2Nsb3NlJztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgICAgICAgIHBheWxvYWQgKz0gYCR7bmFtZX06ICR7aGVhZGVyc1tuYW1lXX1cXHJcXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3h5UmVzcG9uc2VQcm9taXNlID0gKDAsIHBhcnNlX3Byb3h5X3Jlc3BvbnNlXzEucGFyc2VQcm94eVJlc3BvbnNlKShzb2NrZXQpO1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7cGF5bG9hZH1cXHJcXG5gKTtcbiAgICAgICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7XG4gICAgICAgIHJlcS5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0KTtcbiAgICAgICAgdGhpcy5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0LCByZXEpO1xuICAgICAgICBpZiAoY29ubmVjdC5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHJlcS5vbmNlKCdzb2NrZXQnLCByZXN1bWUpO1xuICAgICAgICAgICAgaWYgKG9wdHMuc2VjdXJlRW5kcG9pbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJveHkgaXMgY29ubmVjdGluZyB0byBhIFRMUyBzZXJ2ZXIsIHNvIHVwZ3JhZGVcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHNvY2tldCBjb25uZWN0aW9uIHRvIGEgVExTIGNvbm5lY3Rpb24uXG4gICAgICAgICAgICAgICAgZGVidWcoJ1VwZ3JhZGluZyBzb2NrZXQgY29ubmVjdGlvbiB0byBUTFMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lIHx8IG9wdHMuaG9zdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgICAgICAgICAgICAuLi5vbWl0KG9wdHMsICdob3N0JywgJ3BhdGgnLCAncG9ydCcpLFxuICAgICAgICAgICAgICAgICAgICBzb2NrZXQsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlcm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb3RoZXIgc3RhdHVzIGNvZGUgdGhhdCdzIG5vdCAyMDAuLi4gbmVlZCB0byByZS1wbGF5IHRoZSBIVFRQXG4gICAgICAgIC8vIGhlYWRlciBcImRhdGFcIiBldmVudHMgb250byB0aGUgc29ja2V0IG9uY2UgdGhlIEhUVFAgbWFjaGluZXJ5IGlzXG4gICAgICAgIC8vIGF0dGFjaGVkIHNvIHRoYXQgdGhlIG5vZGUgY29yZSBgaHR0cGAgY2FuIHBhcnNlIGFuZCBoYW5kbGUgdGhlXG4gICAgICAgIC8vIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgICAgICAvLyBDbG9zZSB0aGUgb3JpZ2luYWwgc29ja2V0LCBhbmQgYSBuZXcgXCJmYWtlXCIgc29ja2V0IGlzIHJldHVybmVkXG4gICAgICAgIC8vIGluc3RlYWQsIHNvIHRoYXQgdGhlIHByb3h5IGRvZXNuJ3QgZ2V0IHRoZSBIVFRQIHJlcXVlc3RcbiAgICAgICAgLy8gd3JpdHRlbiB0byBpdCAod2hpY2ggbWF5IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gIGhlYWRlcnMgb3Igb3RoZXJcbiAgICAgICAgLy8gc2Vuc2l0aXZlIGRhdGEpLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vaGFja2Vyb25lLmNvbS9yZXBvcnRzLzU0MTUwMlxuICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gbmV3IG5ldC5Tb2NrZXQoeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlO1xuICAgICAgICAvLyBOZWVkIHRvIHdhaXQgZm9yIHRoZSBcInNvY2tldFwiIGV2ZW50IHRvIHJlLXBsYXkgdGhlIFwiZGF0YVwiIGV2ZW50cy5cbiAgICAgICAgcmVxLm9uY2UoJ3NvY2tldCcsIChzKSA9PiB7XG4gICAgICAgICAgICBkZWJ1ZygnUmVwbGF5aW5nIHByb3h5IGJ1ZmZlciBmb3IgZmFpbGVkIHJlcXVlc3QnKTtcbiAgICAgICAgICAgICgwLCBhc3NlcnRfMS5kZWZhdWx0KShzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDApO1xuICAgICAgICAgICAgLy8gUmVwbGF5IHRoZSBcImJ1ZmZlcmVkXCIgQnVmZmVyIG9udG8gdGhlIGZha2UgYHNvY2tldGAsIHNpbmNlIGF0XG4gICAgICAgICAgICAvLyB0aGlzIHBvaW50IHRoZSBIVFRQIG1vZHVsZSBtYWNoaW5lcnkgaGFzIGJlZW4gaG9va2VkIHVwIGZvclxuICAgICAgICAgICAgLy8gdGhlIHVzZXIuXG4gICAgICAgICAgICBzLnB1c2goYnVmZmVyZWQpO1xuICAgICAgICAgICAgcy5wdXNoKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZha2VTb2NrZXQ7XG4gICAgfVxufVxuSHR0cHNQcm94eUFnZW50LnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddO1xuZXhwb3J0cy5IdHRwc1Byb3h5QWdlbnQgPSBIdHRwc1Byb3h5QWdlbnQ7XG5mdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7XG4gICAgc29ja2V0LnJlc3VtZSgpO1xufVxuZnVuY3Rpb24gb21pdChvYmosIC4uLmtleXMpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcbiAgICBsZXQga2V5O1xuICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwUHJveHlBZ2VudCA9IHZvaWQgMDtcbmNvbnN0IG5ldCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwibmV0XCIpKTtcbmNvbnN0IHRscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidGxzXCIpKTtcbmNvbnN0IGRlYnVnXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImRlYnVnXCIpKTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IGFnZW50X2Jhc2VfMSA9IHJlcXVpcmUoXCJhZ2VudC1iYXNlXCIpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgZGVidWdfMS5kZWZhdWx0KSgnaHR0cC1wcm94eS1hZ2VudCcpO1xuLyoqXG4gKiBUaGUgYEh0dHBQcm94eUFnZW50YCBpbXBsZW1lbnRzIGFuIEhUVFAgQWdlbnQgc3ViY2xhc3MgdGhhdCBjb25uZWN0c1xuICogdG8gdGhlIHNwZWNpZmllZCBcIkhUVFAgcHJveHkgc2VydmVyXCIgaW4gb3JkZXIgdG8gcHJveHkgSFRUUCByZXF1ZXN0cy5cbiAqL1xuY2xhc3MgSHR0cFByb3h5QWdlbnQgZXh0ZW5kcyBhZ2VudF9iYXNlXzEuQWdlbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3h5LCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzLnByb3h5ID0gdHlwZW9mIHByb3h5ID09PSAnc3RyaW5nJyA/IG5ldyB1cmxfMS5VUkwocHJveHkpIDogcHJveHk7XG4gICAgICAgIHRoaXMucHJveHlIZWFkZXJzID0gb3B0cz8uaGVhZGVycyA/PyB7fTtcbiAgICAgICAgZGVidWcoJ0NyZWF0aW5nIG5ldyBIdHRwUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpO1xuICAgICAgICAvLyBUcmltIG9mZiB0aGUgYnJhY2tldHMgZnJvbSBJUHY2IGFkZHJlc3Nlc1xuICAgICAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5wcm94eS5wb3J0XG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApXG4gICAgICAgICAgICA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonXG4gICAgICAgICAgICAgICAgPyA0NDNcbiAgICAgICAgICAgICAgICA6IDgwO1xuICAgICAgICB0aGlzLmNvbm5lY3RPcHRzID0ge1xuICAgICAgICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSxcbiAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICBwb3J0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhZGRSZXF1ZXN0KHJlcSwgb3B0cykge1xuICAgICAgICByZXEuX2hlYWRlciA9IG51bGw7XG4gICAgICAgIHRoaXMuc2V0UmVxdWVzdFByb3BzKHJlcSwgb3B0cyk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGFkZFJlcXVlc3QoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgIHN1cGVyLmFkZFJlcXVlc3QocmVxLCBvcHRzKTtcbiAgICB9XG4gICAgc2V0UmVxdWVzdFByb3BzKHJlcSwgb3B0cykge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBwcm90b2NvbCA9IG9wdHMuc2VjdXJlRW5kcG9pbnQgPyAnaHR0cHM6JyA6ICdodHRwOic7XG4gICAgICAgIGNvbnN0IGhvc3RuYW1lID0gcmVxLmdldEhlYWRlcignaG9zdCcpIHx8ICdsb2NhbGhvc3QnO1xuICAgICAgICBjb25zdCBiYXNlID0gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfWA7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyB1cmxfMS5VUkwocmVxLnBhdGgsIGJhc2UpO1xuICAgICAgICBpZiAob3B0cy5wb3J0ICE9PSA4MCkge1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBTdHJpbmcob3B0cy5wb3J0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGFuZ2UgdGhlIGBodHRwLkNsaWVudFJlcXVlc3RgIGluc3RhbmNlJ3MgXCJwYXRoXCIgZmllbGRcbiAgICAgICAgLy8gdG8gdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkLlxuICAgICAgICByZXEucGF0aCA9IFN0cmluZyh1cmwpO1xuICAgICAgICAvLyBJbmplY3QgdGhlIGBQcm94eS1BdXRob3JpemF0aW9uYCBoZWFkZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBjb25zdCBoZWFkZXJzID0gdHlwZW9mIHRoaXMucHJveHlIZWFkZXJzID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHRoaXMucHJveHlIZWFkZXJzKClcbiAgICAgICAgICAgIDogeyAuLi50aGlzLnByb3h5SGVhZGVycyB9O1xuICAgICAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSBgJHtkZWNvZGVVUklDb21wb25lbnQocHJveHkudXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS5wYXNzd29yZCl9YDtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10gPSB0aGlzLmtlZXBBbGl2ZVxuICAgICAgICAgICAgICAgID8gJ0tlZXAtQWxpdmUnXG4gICAgICAgICAgICAgICAgOiAnY2xvc2UnO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXJzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVxLnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHtcbiAgICAgICAgcmVxLl9oZWFkZXIgPSBudWxsO1xuICAgICAgICBpZiAoIXJlcS5wYXRoLmluY2x1ZGVzKCc6Ly8nKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSZXF1ZXN0UHJvcHMocmVxLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgaHR0cCBDbGllbnRSZXF1ZXN0J3MgaW50ZXJuYWwgYF9oZWFkZXJgIGZpZWxkXG4gICAgICAgIC8vIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHNldC4gSWYgdGhpcyBpcyB0aGUgY2FzZSB0aGVuIHdlJ2xsIG5lZWRcbiAgICAgICAgLy8gdG8gcmUtZ2VuZXJhdGUgdGhlIHN0cmluZyBzaW5jZSB3ZSBqdXN0IGNoYW5nZWQgdGhlIGByZXEucGF0aGAuXG4gICAgICAgIGxldCBmaXJzdDtcbiAgICAgICAgbGV0IGVuZE9mSGVhZGVycztcbiAgICAgICAgZGVidWcoJ1JlZ2VuZXJhdGluZyBzdG9yZWQgSFRUUCBoZWFkZXIgc3RyaW5nIGZvciByZXF1ZXN0Jyk7XG4gICAgICAgIHJlcS5faW1wbGljaXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHJlcS5vdXRwdXREYXRhICYmIHJlcS5vdXRwdXREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRlYnVnKCdQYXRjaGluZyBjb25uZWN0aW9uIHdyaXRlKCkgb3V0cHV0IGJ1ZmZlciB3aXRoIHVwZGF0ZWQgaGVhZGVyJyk7XG4gICAgICAgICAgICBmaXJzdCA9IHJlcS5vdXRwdXREYXRhWzBdLmRhdGE7XG4gICAgICAgICAgICBlbmRPZkhlYWRlcnMgPSBmaXJzdC5pbmRleE9mKCdcXHJcXG5cXHJcXG4nKSArIDQ7XG4gICAgICAgICAgICByZXEub3V0cHV0RGF0YVswXS5kYXRhID1cbiAgICAgICAgICAgICAgICByZXEuX2hlYWRlciArIGZpcnN0LnN1YnN0cmluZyhlbmRPZkhlYWRlcnMpO1xuICAgICAgICAgICAgZGVidWcoJ091dHB1dCBidWZmZXI6ICVvJywgcmVxLm91dHB1dERhdGFbMF0uZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci5cbiAgICAgICAgbGV0IHNvY2tldDtcbiAgICAgICAgaWYgKHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYHRscy5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gdGxzLmNvbm5lY3QodGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHNvY2tldCdzIGBjb25uZWN0YCBldmVudCwgc28gdGhhdCB0aGlzIGBjYWxsYmFjaygpYFxuICAgICAgICAvLyBmdW5jdGlvbiB0aHJvd3MgaW5zdGVhZCBvZiB0aGUgYGh0dHBgIHJlcXVlc3QgbWFjaGluZXJ5LiBUaGlzIGlzXG4gICAgICAgIC8vIGltcG9ydGFudCBmb3IgaS5lLiBgUGFjUHJveHlBZ2VudGAgd2hpY2ggZGV0ZXJtaW5lcyBhIGZhaWxlZCBwcm94eVxuICAgICAgICAvLyBjb25uZWN0aW9uIHZpYSB0aGUgYGNhbGxiYWNrKClgIGZ1bmN0aW9uIHRocm93aW5nLlxuICAgICAgICBhd2FpdCAoMCwgZXZlbnRzXzEub25jZSkoc29ja2V0LCAnY29ubmVjdCcpO1xuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgIH1cbn1cbkh0dHBQcm94eUFnZW50LnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddO1xuZXhwb3J0cy5IdHRwUHJveHlBZ2VudCA9IEh0dHBQcm94eUFnZW50O1xuZnVuY3Rpb24gb21pdChvYmosIC4uLmtleXMpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcbiAgICBsZXQga2V5O1xuICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nbG9iYWxOb1Byb3h5TGlzdCA9IGV4cG9ydHMucHJveHlQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5sb2FkTm9Qcm94eSA9IGxvYWROb1Byb3h5O1xuZXhwb3J0cy5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyA9IGdldERlZmF1bHRQcm94eVNldHRpbmdzO1xuZXhwb3J0cy5wcm94eVBvbGljeSA9IHByb3h5UG9saWN5O1xuY29uc3QgaHR0cHNfcHJveHlfYWdlbnRfMSA9IHJlcXVpcmUoXCJodHRwcy1wcm94eS1hZ2VudFwiKTtcbmNvbnN0IGh0dHBfcHJveHlfYWdlbnRfMSA9IHJlcXVpcmUoXCJodHRwLXByb3h5LWFnZW50XCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuY29uc3QgSFRUUFNfUFJPWFkgPSBcIkhUVFBTX1BST1hZXCI7XG5jb25zdCBIVFRQX1BST1hZID0gXCJIVFRQX1BST1hZXCI7XG5jb25zdCBBTExfUFJPWFkgPSBcIkFMTF9QUk9YWVwiO1xuY29uc3QgTk9fUFJPWFkgPSBcIk5PX1BST1hZXCI7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgcHJveHlQb2xpY3kuXG4gKi9cbmV4cG9ydHMucHJveHlQb2xpY3lOYW1lID0gXCJwcm94eVBvbGljeVwiO1xuLyoqXG4gKiBTdG9yZXMgdGhlIHBhdHRlcm5zIHNwZWNpZmllZCBpbiBOT19QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnRzLmdsb2JhbE5vUHJveHlMaXN0ID0gW107XG5sZXQgbm9Qcm94eUxpc3RMb2FkZWQgPSBmYWxzZTtcbi8qKiBBIGNhY2hlIG9mIHdoZXRoZXIgYSBob3N0IHNob3VsZCBieXBhc3MgdGhlIHByb3h5LiAqL1xuY29uc3QgZ2xvYmFsQnlwYXNzZWRNYXAgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRFbnZpcm9ubWVudFZhbHVlKG5hbWUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnZbbmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W25hbWVdO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudltuYW1lLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudltuYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gbG9hZEVudmlyb25tZW50UHJveHlWYWx1ZSgpIHtcbiAgICBpZiAoIXByb2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgaHR0cHNQcm94eSA9IGdldEVudmlyb25tZW50VmFsdWUoSFRUUFNfUFJPWFkpO1xuICAgIGNvbnN0IGFsbFByb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShBTExfUFJPWFkpO1xuICAgIGNvbnN0IGh0dHBQcm94eSA9IGdldEVudmlyb25tZW50VmFsdWUoSFRUUF9QUk9YWSk7XG4gICAgcmV0dXJuIGh0dHBzUHJveHkgfHwgYWxsUHJveHkgfHwgaHR0cFByb3h5O1xufVxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBob3N0IG9mIGEgZ2l2ZW4gYHVyaWAgbWF0Y2hlcyBhbnkgcGF0dGVybiBpbiB0aGUgbm8gcHJveHkgbGlzdC5cbiAqIElmIHRoZXJlJ3MgYSBtYXRjaCwgYW55IHJlcXVlc3Qgc2VudCB0byB0aGUgc2FtZSBob3N0IHNob3VsZG4ndCBoYXZlIHRoZSBwcm94eSBzZXR0aW5ncyBzZXQuXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGEgcG9ydCBvZiBodHRwczovL2dpdGh1Yi5jb20vQXp1cmUvYXp1cmUtc2RrLWZvci1uZXQvYmxvYi84Y2NhODExMzcxMTU5ZTUyNzE1OWM3ZWI2NTYwMjQ3Nzg5ODY4M2UyL3Nkay9jb3JlL0F6dXJlLkNvcmUvc3JjL1BpcGVsaW5lL0ludGVybmFsL0h0dHBFbnZpcm9ubWVudFByb3h5LmNzI0wyMTBcbiAqL1xuZnVuY3Rpb24gaXNCeXBhc3NlZCh1cmksIG5vUHJveHlMaXN0LCBieXBhc3NlZE1hcCkge1xuICAgIGlmIChub1Byb3h5TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBob3N0ID0gbmV3IFVSTCh1cmkpLmhvc3RuYW1lO1xuICAgIGlmIChieXBhc3NlZE1hcCA9PT0gbnVsbCB8fCBieXBhc3NlZE1hcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYnlwYXNzZWRNYXAuaGFzKGhvc3QpKSB7XG4gICAgICAgIHJldHVybiBieXBhc3NlZE1hcC5nZXQoaG9zdCk7XG4gICAgfVxuICAgIGxldCBpc0J5cGFzc2VkRmxhZyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBub1Byb3h5TGlzdCkge1xuICAgICAgICBpZiAocGF0dGVyblswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIGVpdGhlciBkb21haW4gaXQgc2VsZiBvciBhbnkgc3ViZG9tYWluIG9yIGhvc3RcbiAgICAgICAgICAgIC8vIC5mb28uY29tIHdpbGwgbWF0Y2ggZm9vLmNvbSBpdCBzZWxmIG9yICouZm9vLmNvbVxuICAgICAgICAgICAgaWYgKGhvc3QuZW5kc1dpdGgocGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICBpc0J5cGFzc2VkRmxhZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaG9zdC5sZW5ndGggPT09IHBhdHRlcm4ubGVuZ3RoIC0gMSAmJiBob3N0ID09PSBwYXR0ZXJuLnNsaWNlKDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQnlwYXNzZWRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG9zdCA9PT0gcGF0dGVybikge1xuICAgICAgICAgICAgICAgIGlzQnlwYXNzZWRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBieXBhc3NlZE1hcCA9PT0gbnVsbCB8fCBieXBhc3NlZE1hcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYnlwYXNzZWRNYXAuc2V0KGhvc3QsIGlzQnlwYXNzZWRGbGFnKTtcbiAgICByZXR1cm4gaXNCeXBhc3NlZEZsYWc7XG59XG5mdW5jdGlvbiBsb2FkTm9Qcm94eSgpIHtcbiAgICBjb25zdCBub1Byb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShOT19QUk9YWSk7XG4gICAgbm9Qcm94eUxpc3RMb2FkZWQgPSB0cnVlO1xuICAgIGlmIChub1Byb3h5KSB7XG4gICAgICAgIHJldHVybiBub1Byb3h5XG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBhIHByb3h5IHVybCBpbnRvIGBQcm94eVNldHRpbmdzYCBmb3IgdXNlIHdpdGggUHJveHlQb2xpY3kuXG4gKiBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgaXQgYXR0ZW1wdHMgdG8gcGFyc2UgYSBwcm94eSBVUkwgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcyBgSFRUUFNfUFJPWFlgIG9yIGBIVFRQX1BST1hZYC5cbiAqIEBwYXJhbSBwcm94eVVybCAtIFRoZSB1cmwgb2YgdGhlIHByb3h5IHRvIHVzZS4gTWF5IGNvbnRhaW4gYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uXG4gKiBAZGVwcmVjYXRlZCAtIEludGVybmFsbHkgdGhpcyBtZXRob2QgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB3aGVuIHNldHRpbmcgcHJveHkgaW5mb3JtYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRQcm94eVNldHRpbmdzKHByb3h5VXJsKSB7XG4gICAgaWYgKCFwcm94eVVybCkge1xuICAgICAgICBwcm94eVVybCA9IGxvYWRFbnZpcm9ubWVudFByb3h5VmFsdWUoKTtcbiAgICAgICAgaWYgKCFwcm94eVVybCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHByb3h5VXJsKTtcbiAgICBjb25zdCBzY2hlbWEgPSBwYXJzZWRVcmwucHJvdG9jb2wgPyBwYXJzZWRVcmwucHJvdG9jb2wgKyBcIi8vXCIgOiBcIlwiO1xuICAgIHJldHVybiB7XG4gICAgICAgIGhvc3Q6IHNjaGVtYSArIHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogTnVtYmVyLnBhcnNlSW50KHBhcnNlZFVybC5wb3J0IHx8IFwiODBcIiksXG4gICAgICAgIHVzZXJuYW1lOiBwYXJzZWRVcmwudXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBwYXJzZWRVcmwucGFzc3dvcmQsXG4gICAgfTtcbn1cbi8qKlxuICogVGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcGFyc2UgYSBwcm94eSBVUkwgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcyBgSFRUUFNfUFJPWFlgIG9yIGBIVFRQX1BST1hZYC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3NJbnRlcm5hbCgpIHtcbiAgICBjb25zdCBlbnZQcm94eSA9IGxvYWRFbnZpcm9ubWVudFByb3h5VmFsdWUoKTtcbiAgICByZXR1cm4gZW52UHJveHkgPyBuZXcgVVJMKGVudlByb3h5KSA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFVybEZyb21Qcm94eVNldHRpbmdzKHNldHRpbmdzKSB7XG4gICAgbGV0IHBhcnNlZFByb3h5VXJsO1xuICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFByb3h5VXJsID0gbmV3IFVSTChzZXR0aW5ncy5ob3N0KTtcbiAgICB9XG4gICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0aW5nIGEgdmFsaWQgaG9zdCBzdHJpbmcgaW4gcHJveHkgc2V0dGluZ3MsIGJ1dCBmb3VuZCBcIiR7c2V0dGluZ3MuaG9zdH1cIi5gKTtcbiAgICB9XG4gICAgcGFyc2VkUHJveHlVcmwucG9ydCA9IFN0cmluZyhzZXR0aW5ncy5wb3J0KTtcbiAgICBpZiAoc2V0dGluZ3MudXNlcm5hbWUpIHtcbiAgICAgICAgcGFyc2VkUHJveHlVcmwudXNlcm5hbWUgPSBzZXR0aW5ncy51c2VybmFtZTtcbiAgICB9XG4gICAgaWYgKHNldHRpbmdzLnBhc3N3b3JkKSB7XG4gICAgICAgIHBhcnNlZFByb3h5VXJsLnBhc3N3b3JkID0gc2V0dGluZ3MucGFzc3dvcmQ7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRQcm94eVVybDtcbn1cbmZ1bmN0aW9uIHNldFByb3h5QWdlbnRPblJlcXVlc3QocmVxdWVzdCwgY2FjaGVkQWdlbnRzLCBwcm94eVVybCkge1xuICAgIC8vIEN1c3RvbSBBZ2VudCBzaG91bGQgdGFrZSBwcmVjZWRlbmNlIHNvIGlmIG9uZSBpcyBwcmVzZW50XG4gICAgLy8gd2Ugc2hvdWxkIHNraXAgdG8gYXZvaWQgb3ZlcndyaXRpbmcgaXQuXG4gICAgaWYgKHJlcXVlc3QuYWdlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKTtcbiAgICBjb25zdCBpc0luc2VjdXJlID0gdXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiO1xuICAgIGlmIChyZXF1ZXN0LnRsc1NldHRpbmdzKSB7XG4gICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKFwiVExTIHNldHRpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGNvbWJpbmF0aW9uIHdpdGggY3VzdG9tIFByb3h5LCBjZXJ0aWZpY2F0ZXMgcHJvdmlkZWQgdG8gdGhlIGNsaWVudCB3aWxsIGJlIGlnbm9yZWQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzLnRvSlNPTigpO1xuICAgIGlmIChpc0luc2VjdXJlKSB7XG4gICAgICAgIGlmICghY2FjaGVkQWdlbnRzLmh0dHBQcm94eUFnZW50KSB7XG4gICAgICAgICAgICBjYWNoZWRBZ2VudHMuaHR0cFByb3h5QWdlbnQgPSBuZXcgaHR0cF9wcm94eV9hZ2VudF8xLkh0dHBQcm94eUFnZW50KHByb3h5VXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5hZ2VudCA9IGNhY2hlZEFnZW50cy5odHRwUHJveHlBZ2VudDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghY2FjaGVkQWdlbnRzLmh0dHBzUHJveHlBZ2VudCkge1xuICAgICAgICAgICAgY2FjaGVkQWdlbnRzLmh0dHBzUHJveHlBZ2VudCA9IG5ldyBodHRwc19wcm94eV9hZ2VudF8xLkh0dHBzUHJveHlBZ2VudChwcm94eVVybCwgeyBoZWFkZXJzIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3QuYWdlbnQgPSBjYWNoZWRBZ2VudHMuaHR0cHNQcm94eUFnZW50O1xuICAgIH1cbn1cbi8qKlxuICogQSBwb2xpY3kgdGhhdCBhbGxvd3Mgb25lIHRvIGFwcGx5IHByb3h5IHNldHRpbmdzIHRvIGFsbCByZXF1ZXN0cy5cbiAqIElmIG5vdCBwYXNzZWQgc3RhdGljIHNldHRpbmdzLCB0aGV5IHdpbGwgYmUgcmV0cmlldmVkIGZyb20gdGhlIEhUVFBTX1BST1hZXG4gKiBvciBIVFRQX1BST1hZIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIEBwYXJhbSBwcm94eVNldHRpbmdzIC0gUHJveHlTZXR0aW5ncyB0byB1c2Ugb24gZWFjaCByZXF1ZXN0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBhZGRpdGlvbmFsIHNldHRpbmdzLCBmb3IgZXhhbXBsZSwgY3VzdG9tIE5PX1BST1hZIHBhdHRlcm5zXG4gKi9cbmZ1bmN0aW9uIHByb3h5UG9saWN5KHByb3h5U2V0dGluZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW5vUHJveHlMaXN0TG9hZGVkKSB7XG4gICAgICAgIGV4cG9ydHMuZ2xvYmFsTm9Qcm94eUxpc3QucHVzaCguLi5sb2FkTm9Qcm94eSgpKTtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFByb3h5ID0gcHJveHlTZXR0aW5nc1xuICAgICAgICA/IGdldFVybEZyb21Qcm94eVNldHRpbmdzKHByb3h5U2V0dGluZ3MpXG4gICAgICAgIDogZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3NJbnRlcm5hbCgpO1xuICAgIGNvbnN0IGNhY2hlZEFnZW50cyA9IHt9O1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMucHJveHlQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QucHJveHlTZXR0aW5ncyAmJlxuICAgICAgICAgICAgICAgIGRlZmF1bHRQcm94eSAmJlxuICAgICAgICAgICAgICAgICFpc0J5cGFzc2VkKHJlcXVlc3QudXJsLCAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3VzdG9tTm9Qcm94eUxpc3QpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGV4cG9ydHMuZ2xvYmFsTm9Qcm94eUxpc3QsIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3VzdG9tTm9Qcm94eUxpc3QpID8gdW5kZWZpbmVkIDogZ2xvYmFsQnlwYXNzZWRNYXApKSB7XG4gICAgICAgICAgICAgICAgc2V0UHJveHlBZ2VudE9uUmVxdWVzdChyZXF1ZXN0LCBjYWNoZWRBZ2VudHMsIGRlZmF1bHRQcm94eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXF1ZXN0LnByb3h5U2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICBzZXRQcm94eUFnZW50T25SZXF1ZXN0KHJlcXVlc3QsIGNhY2hlZEFnZW50cywgZ2V0VXJsRnJvbVByb3h5U2V0dGluZ3MocmVxdWVzdC5wcm94eVNldHRpbmdzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJveHlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kgPSBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3k7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LlxuICovXG5leHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUgPSBcInNldENsaWVudFJlcXVlc3RJZFBvbGljeVwiO1xuLyoqXG4gKiBFYWNoIFBpcGVsaW5lUmVxdWVzdCBnZXRzIGEgdW5pcXVlIGlkIHVwb24gY3JlYXRpb24uXG4gKiBUaGlzIHBvbGljeSBwYXNzZXMgdGhhdCB1bmlxdWUgaWQgYWxvbmcgdmlhIGFuIEhUVFAgaGVhZGVyIHRvIGVuYWJsZSBiZXR0ZXJcbiAqIHRlbGVtZXRyeSBhbmQgdHJhY2luZy5cbiAqIEBwYXJhbSByZXF1ZXN0SWRIZWFkZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byBwYXNzIHRoZSByZXF1ZXN0IElEIHRvLlxuICovXG5mdW5jdGlvbiBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kocmVxdWVzdElkSGVhZGVyTmFtZSA9IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QuaGVhZGVycy5oYXMocmVxdWVzdElkSGVhZGVyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KHJlcXVlc3RJZEhlYWRlck5hbWUsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50bHNQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy50bHNQb2xpY3kgPSB0bHNQb2xpY3k7XG4vKipcbiAqIE5hbWUgb2YgdGhlIFRMUyBQb2xpY3lcbiAqL1xuZXhwb3J0cy50bHNQb2xpY3lOYW1lID0gXCJ0bHNQb2xpY3lcIjtcbi8qKlxuICogR2V0cyBhIHBpcGVsaW5lIHBvbGljeSB0aGF0IGFkZHMgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSB0byB0aGUgSHR0cENsaWVudCBhZ2VudCBmb3IgYXV0aGVudGljYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHRsc1BvbGljeSh0bHNTZXR0aW5ncykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMudGxzUG9saWN5TmFtZSxcbiAgICAgICAgc2VuZFJlcXVlc3Q6IGFzeW5jIChyZXEsIG5leHQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZXJzIG1heSBkZWZpbmUgYSByZXF1ZXN0IHRsc1NldHRpbmdzLCBob25vciB0aG9zZSBvdmVyIHRoZSBjbGllbnQgbGV2ZWwgb25lXG4gICAgICAgICAgICBpZiAoIXJlcS50bHNTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHJlcS50bHNTZXR0aW5ncyA9IHRsc1NldHRpbmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGxzUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHJhY2luZ0NvbnRleHRJbXBsID0gZXhwb3J0cy5rbm93bkNvbnRleHRLZXlzID0gdm9pZCAwO1xuZXhwb3J0cy5jcmVhdGVUcmFjaW5nQ29udGV4dCA9IGNyZWF0ZVRyYWNpbmdDb250ZXh0O1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0cy5rbm93bkNvbnRleHRLZXlzID0ge1xuICAgIHNwYW46IFN5bWJvbC5mb3IoXCJAYXp1cmUvY29yZS10cmFjaW5nIHNwYW5cIiksXG4gICAgbmFtZXNwYWNlOiBTeW1ib2wuZm9yKFwiQGF6dXJlL2NvcmUtdHJhY2luZyBuYW1lc3BhY2VcIiksXG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHtAbGluayBUcmFjaW5nQ29udGV4dH0gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQSBzZXQgb2Yga25vd24ga2V5cyB0aGF0IG1heSBiZSBzZXQgb24gdGhlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgVHJhY2luZ0NvbnRleHR9IHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRyYWNpbmdDb250ZXh0KG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBjb250ZXh0ID0gbmV3IFRyYWNpbmdDb250ZXh0SW1wbChvcHRpb25zLnBhcmVudENvbnRleHQpO1xuICAgIGlmIChvcHRpb25zLnNwYW4pIHtcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQuc2V0VmFsdWUoZXhwb3J0cy5rbm93bkNvbnRleHRLZXlzLnNwYW4sIG9wdGlvbnMuc3Bhbik7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm5hbWVzcGFjZSkge1xuICAgICAgICBjb250ZXh0ID0gY29udGV4dC5zZXRWYWx1ZShleHBvcnRzLmtub3duQ29udGV4dEtleXMubmFtZXNwYWNlLCBvcHRpb25zLm5hbWVzcGFjZSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuY2xhc3MgVHJhY2luZ0NvbnRleHRJbXBsIHtcbiAgICBjb25zdHJ1Y3Rvcihpbml0aWFsQ29udGV4dCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0TWFwID1cbiAgICAgICAgICAgIGluaXRpYWxDb250ZXh0IGluc3RhbmNlb2YgVHJhY2luZ0NvbnRleHRJbXBsXG4gICAgICAgICAgICAgICAgPyBuZXcgTWFwKGluaXRpYWxDb250ZXh0Ll9jb250ZXh0TWFwKVxuICAgICAgICAgICAgICAgIDogbmV3IE1hcCgpO1xuICAgIH1cbiAgICBzZXRWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBuZXcgVHJhY2luZ0NvbnRleHRJbXBsKHRoaXMpO1xuICAgICAgICBuZXdDb250ZXh0Ll9jb250ZXh0TWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ld0NvbnRleHQ7XG4gICAgfVxuICAgIGdldFZhbHVlKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dE1hcC5nZXQoa2V5KTtcbiAgICB9XG4gICAgZGVsZXRlVmFsdWUoa2V5KSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBuZXcgVHJhY2luZ0NvbnRleHRJbXBsKHRoaXMpO1xuICAgICAgICBuZXdDb250ZXh0Ll9jb250ZXh0TWFwLmRlbGV0ZShrZXkpO1xuICAgICAgICByZXR1cm4gbmV3Q29udGV4dDtcbiAgICB9XG59XG5leHBvcnRzLlRyYWNpbmdDb250ZXh0SW1wbCA9IFRyYWNpbmdDb250ZXh0SW1wbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNpbmdDb250ZXh0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhdGUgPSB2b2lkIDA7XG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIEhvbGRzIHRoZSBzaW5nbGV0b24gaW5zdHJ1bWVudGVyLCB0byBiZSBzaGFyZWQgYWNyb3NzIENKUyBhbmQgRVNNIGltcG9ydHMuXG4gKi9cbmV4cG9ydHMuc3RhdGUgPSB7XG4gICAgaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb246IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGF0ZS1janMuY2pzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRGVmYXVsdFRyYWNpbmdTcGFuID0gY3JlYXRlRGVmYXVsdFRyYWNpbmdTcGFuO1xuZXhwb3J0cy5jcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyID0gY3JlYXRlRGVmYXVsdEluc3RydW1lbnRlcjtcbmV4cG9ydHMudXNlSW5zdHJ1bWVudGVyID0gdXNlSW5zdHJ1bWVudGVyO1xuZXhwb3J0cy5nZXRJbnN0cnVtZW50ZXIgPSBnZXRJbnN0cnVtZW50ZXI7XG5jb25zdCB0cmFjaW5nQ29udGV4dF9qc18xID0gcmVxdWlyZShcIi4vdHJhY2luZ0NvbnRleHQuanNcIik7XG5jb25zdCBzdGF0ZV9qc18xID0gcmVxdWlyZShcIi4vc3RhdGUuanNcIik7XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW4oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBub29wXG4gICAgICAgIH0sXG4gICAgICAgIGlzUmVjb3JkaW5nOiAoKSA9PiBmYWxzZSxcbiAgICAgICAgcmVjb3JkRXhjZXB0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBub29wXG4gICAgICAgIH0sXG4gICAgICAgIHNldEF0dHJpYnV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9LFxuICAgICAgICBzZXRTdGF0dXM6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgYWRkRXZlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEluc3RydW1lbnRlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjcmVhdGVSZXF1ZXN0SGVhZGVyczogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9LFxuICAgICAgICBwYXJzZVRyYWNlcGFyZW50SGVhZGVyOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBzdGFydFNwYW46IChfbmFtZSwgc3Bhbk9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3BhbjogY3JlYXRlRGVmYXVsdFRyYWNpbmdTcGFuKCksXG4gICAgICAgICAgICAgICAgdHJhY2luZ0NvbnRleHQ6ICgwLCB0cmFjaW5nQ29udGV4dF9qc18xLmNyZWF0ZVRyYWNpbmdDb250ZXh0KSh7IHBhcmVudENvbnRleHQ6IHNwYW5PcHRpb25zLnRyYWNpbmdDb250ZXh0IH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgd2l0aENvbnRleHQoX2NvbnRleHQsIGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3MpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vKipcbiAqIEV4dGVuZHMgdGhlIEF6dXJlIFNESyB3aXRoIHN1cHBvcnQgZm9yIGEgZ2l2ZW4gaW5zdHJ1bWVudGVyIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBpbnN0cnVtZW50ZXIgLSBUaGUgaW5zdHJ1bWVudGVyIGltcGxlbWVudGF0aW9uIHRvIHVzZS5cbiAqL1xuZnVuY3Rpb24gdXNlSW5zdHJ1bWVudGVyKGluc3RydW1lbnRlcikge1xuICAgIHN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb24gPSBpbnN0cnVtZW50ZXI7XG59XG4vKipcbiAqIEdldHMgdGhlIGN1cnJlbnRseSBzZXQgaW5zdHJ1bWVudGVyLCBhIE5vLU9wIGluc3RydW1lbnRlciBieSBkZWZhdWx0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50bHkgc2V0IGluc3RydW1lbnRlclxuICovXG5mdW5jdGlvbiBnZXRJbnN0cnVtZW50ZXIoKSB7XG4gICAgaWYgKCFzdGF0ZV9qc18xLnN0YXRlLmluc3RydW1lbnRlckltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb24gPSBjcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyKCk7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZV9qc18xLnN0YXRlLmluc3RydW1lbnRlckltcGxlbWVudGF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlVHJhY2luZ0NsaWVudCA9IGNyZWF0ZVRyYWNpbmdDbGllbnQ7XG5jb25zdCBpbnN0cnVtZW50ZXJfanNfMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRlci5qc1wiKTtcbmNvbnN0IHRyYWNpbmdDb250ZXh0X2pzXzEgPSByZXF1aXJlKFwiLi90cmFjaW5nQ29udGV4dC5qc1wiKTtcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0cmFjaW5nIGNsaWVudC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdXNlZCB0byBjb25maWd1cmUgdGhlIHRyYWNpbmcgY2xpZW50LlxuICogQHJldHVybnMgLSBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgVHJhY2luZ0NsaWVudH0uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRyYWNpbmdDbGllbnQob3B0aW9ucykge1xuICAgIGNvbnN0IHsgbmFtZXNwYWNlLCBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfSA9IG9wdGlvbnM7XG4gICAgZnVuY3Rpb24gc3RhcnRTcGFuKG5hbWUsIG9wZXJhdGlvbk9wdGlvbnMsIHNwYW5PcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc3RhcnRTcGFuUmVzdWx0ID0gKDAsIGluc3RydW1lbnRlcl9qc18xLmdldEluc3RydW1lbnRlcikoKS5zdGFydFNwYW4obmFtZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzcGFuT3B0aW9ucyksIHsgcGFja2FnZU5hbWU6IHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbjogcGFja2FnZVZlcnNpb24sIHRyYWNpbmdDb250ZXh0OiAoX2EgPSBvcGVyYXRpb25PcHRpb25zID09PSBudWxsIHx8IG9wZXJhdGlvbk9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbk9wdGlvbnMudHJhY2luZ09wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50cmFjaW5nQ29udGV4dCB9KSk7XG4gICAgICAgIGxldCB0cmFjaW5nQ29udGV4dCA9IHN0YXJ0U3BhblJlc3VsdC50cmFjaW5nQ29udGV4dDtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHN0YXJ0U3BhblJlc3VsdC5zcGFuO1xuICAgICAgICBpZiAoIXRyYWNpbmdDb250ZXh0LmdldFZhbHVlKHRyYWNpbmdDb250ZXh0X2pzXzEua25vd25Db250ZXh0S2V5cy5uYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICB0cmFjaW5nQ29udGV4dCA9IHRyYWNpbmdDb250ZXh0LnNldFZhbHVlKHRyYWNpbmdDb250ZXh0X2pzXzEua25vd25Db250ZXh0S2V5cy5uYW1lc3BhY2UsIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoXCJhei5uYW1lc3BhY2VcIiwgdHJhY2luZ0NvbnRleHQuZ2V0VmFsdWUodHJhY2luZ0NvbnRleHRfanNfMS5rbm93bkNvbnRleHRLZXlzLm5hbWVzcGFjZSkpO1xuICAgICAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvbk9wdGlvbnMsIHtcbiAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvbk9wdGlvbnMgPT09IG51bGwgfHwgb3BlcmF0aW9uT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uT3B0aW9ucy50cmFjaW5nT3B0aW9ucyksIHsgdHJhY2luZ0NvbnRleHQgfSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgIHVwZGF0ZWRPcHRpb25zLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBmdW5jdGlvbiB3aXRoU3BhbihuYW1lLCBvcGVyYXRpb25PcHRpb25zLCBjYWxsYmFjaywgc3Bhbk9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBzcGFuLCB1cGRhdGVkT3B0aW9ucyB9ID0gc3RhcnRTcGFuKG5hbWUsIG9wZXJhdGlvbk9wdGlvbnMsIHNwYW5PcHRpb25zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhDb250ZXh0KHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNpbmdDb250ZXh0LCAoKSA9PiBQcm9taXNlLnJlc29sdmUoY2FsbGJhY2sodXBkYXRlZE9wdGlvbnMsIHNwYW4pKSk7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IHN0YXR1czogXCJzdWNjZXNzXCIgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgc3RhdHVzOiBcImVycm9yXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdpdGhDb250ZXh0KGNvbnRleHQsIGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3MpIHtcbiAgICAgICAgcmV0dXJuICgwLCBpbnN0cnVtZW50ZXJfanNfMS5nZXRJbnN0cnVtZW50ZXIpKCkud2l0aENvbnRleHQoY29udGV4dCwgY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHRyYWNlcGFyZW50IGhlYWRlciB2YWx1ZSBpbnRvIGEgc3BhbiBpZGVudGlmaWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRyYWNlcGFyZW50SGVhZGVyIC0gVGhlIHRyYWNlcGFyZW50IGhlYWRlciB0byBwYXJzZS5cbiAgICAgKiBAcmV0dXJucyBBbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBpZGVudGlmaWVyIGZvciB0aGUgc3Bhbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZVRyYWNlcGFyZW50SGVhZGVyKHRyYWNlcGFyZW50SGVhZGVyKSB7XG4gICAgICAgIHJldHVybiAoMCwgaW5zdHJ1bWVudGVyX2pzXzEuZ2V0SW5zdHJ1bWVudGVyKSgpLnBhcnNlVHJhY2VwYXJlbnRIZWFkZXIodHJhY2VwYXJlbnRIZWFkZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2V0IG9mIHJlcXVlc3QgaGVhZGVycyB0byBwcm9wYWdhdGUgdHJhY2luZyBpbmZvcm1hdGlvbiB0byBhIGJhY2tlbmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHJhY2luZ0NvbnRleHQgLSBUaGUgY29udGV4dCBjb250YWluaW5nIHRoZSBzcGFuIHRvIHNlcmlhbGl6ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGhlYWRlcnMgdG8gYWRkIHRvIGEgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0SGVhZGVycyh0cmFjaW5nQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIGluc3RydW1lbnRlcl9qc18xLmdldEluc3RydW1lbnRlcikoKS5jcmVhdGVSZXF1ZXN0SGVhZGVycyh0cmFjaW5nQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0U3BhbixcbiAgICAgICAgd2l0aFNwYW4sXG4gICAgICAgIHdpdGhDb250ZXh0LFxuICAgICAgICBwYXJzZVRyYWNlcGFyZW50SGVhZGVyLFxuICAgICAgICBjcmVhdGVSZXF1ZXN0SGVhZGVycyxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2luZ0NsaWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVRyYWNpbmdDbGllbnQgPSBleHBvcnRzLnVzZUluc3RydW1lbnRlciA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50ZXJfanNfMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRlci5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZUluc3RydW1lbnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGVyX2pzXzEudXNlSW5zdHJ1bWVudGVyOyB9IH0pO1xudmFyIHRyYWNpbmdDbGllbnRfanNfMSA9IHJlcXVpcmUoXCIuL3RyYWNpbmdDbGllbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUcmFjaW5nQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjaW5nQ2xpZW50X2pzXzEuY3JlYXRlVHJhY2luZ0NsaWVudDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3VzdG9tID0gdm9pZCAwO1xuY29uc3Qgbm9kZV91dGlsXzEgPSByZXF1aXJlKFwibm9kZTp1dGlsXCIpO1xuZXhwb3J0cy5jdXN0b20gPSBub2RlX3V0aWxfMS5pbnNwZWN0LmN1c3RvbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3BlY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZXN0RXJyb3IgPSB2b2lkIDA7XG5leHBvcnRzLmlzUmVzdEVycm9yID0gaXNSZXN0RXJyb3I7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgaW5zcGVjdF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC9pbnNwZWN0LmpzXCIpO1xuY29uc3Qgc2FuaXRpemVyX2pzXzEgPSByZXF1aXJlKFwiLi91dGlsL3Nhbml0aXplci5qc1wiKTtcbmNvbnN0IGVycm9yU2FuaXRpemVyID0gbmV3IHNhbml0aXplcl9qc18xLlNhbml0aXplcigpO1xuLyoqXG4gKiBBIGN1c3RvbSBlcnJvciB0eXBlIGZvciBmYWlsZWQgcGlwZWxpbmUgcmVxdWVzdHMuXG4gKi9cbmNsYXNzIFJlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUmVzdEVycm9yXCI7XG4gICAgICAgIHRoaXMuY29kZSA9IG9wdGlvbnMuY29kZTtcbiAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gb3B0aW9ucy5zdGF0dXNDb2RlO1xuICAgICAgICAvLyBUaGUgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWF5IGNvbnRhaW4gc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIHRoZSBoZWFkZXJzIG9yIGJvZHkuXG4gICAgICAgIC8vIFRvIGhlbHAgcHJldmVudCB0aGlzIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBiZWluZyBhY2NpZGVudGFsbHkgbG9nZ2VkLCB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2VcbiAgICAgICAgLy8gcHJvcGVydGllcyBhcmUgbWFya2VkIGFzIG5vbi1lbnVtZXJhYmxlIGhlcmUuIFRoaXMgcHJldmVudHMgdGhlbSBzaG93aW5nIHVwIGluIHRoZSBvdXRwdXQgb2ZcbiAgICAgICAgLy8gSlNPTi5zdHJpbmdpZnkgYW5kIGNvbnNvbGUubG9nLlxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJyZXF1ZXN0XCIsIHsgdmFsdWU6IG9wdGlvbnMucmVxdWVzdCwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlc3BvbnNlXCIsIHsgdmFsdWU6IG9wdGlvbnMucmVzcG9uc2UsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUmVzdEVycm9yLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvZ2dpbmcgbWV0aG9kIGZvciB1dGlsLmluc3BlY3QgaW4gTm9kZVxuICAgICAqL1xuICAgIFtpbnNwZWN0X2pzXzEuY3VzdG9tXSgpIHtcbiAgICAgICAgLy8gRXh0cmFjdCBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGFuZCBhZGQgdGhlbSBiYWNrLiBUaGlzIGlzIE9LIHNpbmNlIGluIHRoaXMgb3V0cHV0IHRoZSByZXF1ZXN0IGFuZFxuICAgICAgICAvLyByZXNwb25zZSBnZXQgc2FuaXRpemVkLlxuICAgICAgICByZXR1cm4gYFJlc3RFcnJvcjogJHt0aGlzLm1lc3NhZ2V9IFxcbiAke2Vycm9yU2FuaXRpemVyLnNhbml0aXplKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcyksIHsgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LCByZXNwb25zZTogdGhpcy5yZXNwb25zZSB9KSl9YDtcbiAgICB9XG59XG5leHBvcnRzLlJlc3RFcnJvciA9IFJlc3RFcnJvcjtcbi8qKlxuICogU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hlbiBtYWtpbmcgdGhlIHJlcXVlc3QuXG4gKiBUaGlzIG1lYW5zIHRoZSBhY3R1YWwgcmVxdWVzdCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLFxuICogc3VjaCBhcyBhIEROUyBpc3N1ZSBvciB0aGUgY29ubmVjdGlvbiBiZWluZyBsb3N0LlxuICovXG5SZXN0RXJyb3IuUkVRVUVTVF9TRU5EX0VSUk9SID0gXCJSRVFVRVNUX1NFTkRfRVJST1JcIjtcbi8qKlxuICogVGhpcyBtZWFucyB0aGF0IHBhcnNpbmcgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuXG4gKiBJdCBtYXkgaGF2ZSBiZWVuIG1hbGZvcm1lZC5cbiAqL1xuUmVzdEVycm9yLlBBUlNFX0VSUk9SID0gXCJQQVJTRV9FUlJPUlwiO1xuLyoqXG4gKiBUeXBlZ3VhcmQgZm9yIFJlc3RFcnJvclxuICogQHBhcmFtIGUgLSBTb21ldGhpbmcgY2F1Z2h0IGJ5IGEgY2F0Y2ggY2xhdXNlLlxuICovXG5mdW5jdGlvbiBpc1Jlc3RFcnJvcihlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBSZXN0RXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAoMCwgY29yZV91dGlsXzEuaXNFcnJvcikoZSkgJiYgZS5uYW1lID09PSBcIlJlc3RFcnJvclwiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzdEVycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnRyYWNpbmdQb2xpY3kgPSB0cmFjaW5nUG9saWN5O1xuY29uc3QgY29yZV90cmFjaW5nXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdHJhY2luZ1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHVzZXJBZ2VudF9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvdXNlckFnZW50LmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IHJlc3RFcnJvcl9qc18xID0gcmVxdWlyZShcIi4uL3Jlc3RFcnJvci5qc1wiKTtcbmNvbnN0IHNhbml0aXplcl9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvc2FuaXRpemVyLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHRyYWNpbmdQb2xpY3kuXG4gKi9cbmV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUgPSBcInRyYWNpbmdQb2xpY3lcIjtcbi8qKlxuICogQSBzaW1wbGUgcG9saWN5IHRvIGNyZWF0ZSBPcGVuVGVsZW1ldHJ5IFNwYW5zIGZvciBlYWNoIHJlcXVlc3QgbWFkZSBieSB0aGUgcGlwZWxpbmVcbiAqIHRoYXQgaGFzIFNwYW5PcHRpb25zIHdpdGggYSBwYXJlbnQuXG4gKiBSZXF1ZXN0cyBtYWRlIHdpdGhvdXQgYSBwYXJlbnQgU3BhbiB3aWxsIG5vdCBiZSByZWNvcmRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIHRlbGVtZXRyeSBsb2dnZWQgYnkgdGhlIHRyYWNpbmcgcG9saWN5LlxuICovXG5mdW5jdGlvbiB0cmFjaW5nUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHVzZXJBZ2VudFByb21pc2UgPSAoMCwgdXNlckFnZW50X2pzXzEuZ2V0VXNlckFnZW50VmFsdWUpKG9wdGlvbnMudXNlckFnZW50UHJlZml4KTtcbiAgICBjb25zdCBzYW5pdGl6ZXIgPSBuZXcgc2FuaXRpemVyX2pzXzEuU2FuaXRpemVyKHtcbiAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnM6IG9wdGlvbnMuYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnMsXG4gICAgfSk7XG4gICAgY29uc3QgdHJhY2luZ0NsaWVudCA9IHRyeUNyZWF0ZVRyYWNpbmdDbGllbnQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnRyYWNpbmdQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoIXRyYWNpbmdDbGllbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHVzZXJBZ2VudFByb21pc2U7XG4gICAgICAgICAgICBjb25zdCBzcGFuQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICBcImh0dHAudXJsXCI6IHNhbml0aXplci5zYW5pdGl6ZVVybChyZXF1ZXN0LnVybCksXG4gICAgICAgICAgICAgICAgXCJodHRwLm1ldGhvZFwiOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICBcImh0dHAudXNlcl9hZ2VudFwiOiB1c2VyQWdlbnQsXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodXNlckFnZW50KSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbXCJodHRwLnVzZXJfYWdlbnRcIl0gPSB1c2VyQWdlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IHNwYW4sIHRyYWNpbmdDb250ZXh0IH0gPSAoX2EgPSB0cnlDcmVhdGVTcGFuKHRyYWNpbmdDbGllbnQsIHJlcXVlc3QsIHNwYW5BdHRyaWJ1dGVzKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICAgICAgICBpZiAoIXNwYW4gfHwgIXRyYWNpbmdDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHJhY2luZ0NsaWVudC53aXRoQ29udGV4dCh0cmFjaW5nQ29udGV4dCwgbmV4dCwgcmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgdHJ5UHJvY2Vzc1Jlc3BvbnNlKHNwYW4sIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5UHJvY2Vzc0Vycm9yKHNwYW4sIGVycik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiB0cnlDcmVhdGVUcmFjaW5nQ2xpZW50KCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoMCwgY29yZV90cmFjaW5nXzEuY3JlYXRlVHJhY2luZ0NsaWVudCkoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiBcIlwiLFxuICAgICAgICAgICAgcGFja2FnZU5hbWU6IFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiLFxuICAgICAgICAgICAgcGFja2FnZVZlcnNpb246IGNvbnN0YW50c19qc18xLlNES19WRVJTSU9OLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoYEVycm9yIHdoZW4gY3JlYXRpbmcgdGhlIFRyYWNpbmdDbGllbnQ6ICR7KDAsIGNvcmVfdXRpbF8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gdHJ5Q3JlYXRlU3Bhbih0cmFjaW5nQ2xpZW50LCByZXF1ZXN0LCBzcGFuQXR0cmlidXRlcykge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIEFzIHBlciBzcGVjLCB3ZSBkbyBub3QgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSFRUUCBhbmQgSFRUUFMgaW4gc3BhbiBuYW1lLlxuICAgICAgICBjb25zdCB7IHNwYW4sIHVwZGF0ZWRPcHRpb25zIH0gPSB0cmFjaW5nQ2xpZW50LnN0YXJ0U3BhbihgSFRUUCAke3JlcXVlc3QubWV0aG9kfWAsIHsgdHJhY2luZ09wdGlvbnM6IHJlcXVlc3QudHJhY2luZ09wdGlvbnMgfSwge1xuICAgICAgICAgICAgc3BhbktpbmQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlcyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHRoZSBzcGFuIGlzIG5vdCByZWNvcmRpbmcsIGRvbid0IGRvIGFueSBtb3JlIHdvcmsuXG4gICAgICAgIGlmICghc3Bhbi5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgaGVhZGVyc1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdHJhY2luZ0NsaWVudC5jcmVhdGVSZXF1ZXN0SGVhZGVycyh1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucy50cmFjaW5nQ29udGV4dCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHNwYW4sIHRyYWNpbmdDb250ZXh0OiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucy50cmFjaW5nQ29udGV4dCB9O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgU2tpcHBpbmcgY3JlYXRpbmcgYSB0cmFjaW5nIHNwYW4gZHVlIHRvIGFuIGVycm9yOiAkeygwLCBjb3JlX3V0aWxfMS5nZXRFcnJvck1lc3NhZ2UpKGUpfWApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRyeVByb2Nlc3NFcnJvcihzcGFuLCBlcnJvcikge1xuICAgIHRyeSB7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIHN0YXR1czogXCJlcnJvclwiLFxuICAgICAgICAgICAgZXJyb3I6ICgwLCBjb3JlX3V0aWxfMS5pc0Vycm9yKShlcnJvcikgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICgoMCwgcmVzdEVycm9yX2pzXzEuaXNSZXN0RXJyb3IpKGVycm9yKSAmJiBlcnJvci5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImh0dHAuc3RhdHVzX2NvZGVcIiwgZXJyb3Iuc3RhdHVzQ29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoYFNraXBwaW5nIHRyYWNpbmcgc3BhbiBwcm9jZXNzaW5nIGR1ZSB0byBhbiBlcnJvcjogJHsoMCwgY29yZV91dGlsXzEuZ2V0RXJyb3JNZXNzYWdlKShlKX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0cnlQcm9jZXNzUmVzcG9uc2Uoc3BhbiwgcmVzcG9uc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImh0dHAuc3RhdHVzX2NvZGVcIiwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgY29uc3Qgc2VydmljZVJlcXVlc3RJZCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwieC1tcy1yZXF1ZXN0LWlkXCIpO1xuICAgICAgICBpZiAoc2VydmljZVJlcXVlc3RJZCkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoXCJzZXJ2aWNlUmVxdWVzdElkXCIsIHNlcnZpY2VSZXF1ZXN0SWQpO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIHN0YXR1czogXCJzdWNjZXNzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgU2tpcHBpbmcgdHJhY2luZyBzcGFuIHByb2Nlc3NpbmcgZHVlIHRvIGFuIGVycm9yOiAkeygwLCBjb3JlX3V0aWxfMS5nZXRFcnJvck1lc3NhZ2UpKGUpfWApO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNpbmdQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zID0gY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucztcbmNvbnN0IGxvZ1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbG9nUG9saWN5LmpzXCIpO1xuY29uc3QgcGlwZWxpbmVfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lLmpzXCIpO1xuY29uc3QgcmVkaXJlY3RQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3JlZGlyZWN0UG9saWN5LmpzXCIpO1xuY29uc3QgdXNlckFnZW50UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy91c2VyQWdlbnRQb2xpY3kuanNcIik7XG5jb25zdCBtdWx0aXBhcnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL211bHRpcGFydFBvbGljeS5qc1wiKTtcbmNvbnN0IGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5LmpzXCIpO1xuY29uc3QgZGVmYXVsdFJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBmb3JtRGF0YVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZm9ybURhdGFQb2xpY3kuanNcIik7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgcHJveHlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Byb3h5UG9saWN5LmpzXCIpO1xuY29uc3Qgc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kuanNcIik7XG5jb25zdCB0bHNQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Rsc1BvbGljeS5qc1wiKTtcbmNvbnN0IHRyYWNpbmdQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanNcIik7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBwaXBlbGluZSB3aXRoIGEgZGVmYXVsdCBzZXQgb2YgY3VzdG9taXphYmxlIHBvbGljaWVzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSBhIGN1c3RvbSBwaXBlbGluZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHBpcGVsaW5lID0gKDAsIHBpcGVsaW5lX2pzXzEuY3JlYXRlRW1wdHlQaXBlbGluZSkoKTtcbiAgICBpZiAoY29yZV91dGlsXzEuaXNOb2RlTGlrZSkge1xuICAgICAgICBpZiAob3B0aW9ucy50bHNPcHRpb25zKSB7XG4gICAgICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHRsc1BvbGljeV9qc18xLnRsc1BvbGljeSkob3B0aW9ucy50bHNPcHRpb25zKSk7XG4gICAgICAgIH1cbiAgICAgICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBwcm94eVBvbGljeV9qc18xLnByb3h5UG9saWN5KShvcHRpb25zLnByb3h5T3B0aW9ucykpO1xuICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeSkoKSk7XG4gICAgfVxuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZm9ybURhdGFQb2xpY3lfanNfMS5mb3JtRGF0YVBvbGljeSkoKSwgeyBiZWZvcmVQb2xpY2llczogW211bHRpcGFydFBvbGljeV9qc18xLm11bHRpcGFydFBvbGljeU5hbWVdIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgdXNlckFnZW50UG9saWN5X2pzXzEudXNlckFnZW50UG9saWN5KShvcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMpKTtcbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHNldENsaWVudFJlcXVlc3RJZFBvbGljeV9qc18xLnNldENsaWVudFJlcXVlc3RJZFBvbGljeSkoKF9hID0gb3B0aW9ucy50ZWxlbWV0cnlPcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xpZW50UmVxdWVzdElkSGVhZGVyTmFtZSkpO1xuICAgIC8vIFRoZSBtdWx0aXBhcnQgcG9saWN5IGlzIGFkZGVkIGFmdGVyIHBvbGljaWVzIHdpdGggbm8gcGhhc2UsIHNvIHRoYXRcbiAgICAvLyBwb2xpY2llcyBjYW4gYmUgYWRkZWQgYmV0d2VlbiBpdCBhbmQgZm9ybURhdGFQb2xpY3kgdG8gbW9kaWZ5XG4gICAgLy8gcHJvcGVydGllcyAoZS5nLiwgbWFraW5nIHRoZSBib3VuZGFyeSBjb25zdGFudCBpbiByZWNvcmRlZCB0ZXN0cykuXG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBtdWx0aXBhcnRQb2xpY3lfanNfMS5tdWx0aXBhcnRQb2xpY3kpKCksIHsgYWZ0ZXJQaGFzZTogXCJEZXNlcmlhbGl6ZVwiIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGVmYXVsdFJldHJ5UG9saWN5X2pzXzEuZGVmYXVsdFJldHJ5UG9saWN5KShvcHRpb25zLnJldHJ5T3B0aW9ucyksIHsgcGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHRyYWNpbmdQb2xpY3lfanNfMS50cmFjaW5nUG9saWN5KShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMudXNlckFnZW50T3B0aW9ucyksIG9wdGlvbnMubG9nZ2luZ09wdGlvbnMpKSwge1xuICAgICAgICBhZnRlclBoYXNlOiBcIlJldHJ5XCIsXG4gICAgfSk7XG4gICAgaWYgKGNvcmVfdXRpbF8xLmlzTm9kZUxpa2UpIHtcbiAgICAgICAgLy8gQm90aCBYSFIgYW5kIEZldGNoIGV4cGVjdCB0byBoYW5kbGUgcmVkaXJlY3RzIGF1dG9tYXRpY2FsbHksXG4gICAgICAgIC8vIHNvIG9ubHkgaW5jbHVkZSB0aGlzIHBvbGljeSB3aGVuIHdlJ3JlIGluIE5vZGUuXG4gICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgcmVkaXJlY3RQb2xpY3lfanNfMS5yZWRpcmVjdFBvbGljeSkob3B0aW9ucy5yZWRpcmVjdE9wdGlvbnMpLCB7IGFmdGVyUGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICB9XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBsb2dQb2xpY3lfanNfMS5sb2dQb2xpY3kpKG9wdGlvbnMubG9nZ2luZ09wdGlvbnMpLCB7IGFmdGVyUGhhc2U6IFwiU2lnblwiIH0pO1xuICAgIHJldHVybiBwaXBlbGluZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRCb2R5TGVuZ3RoID0gZ2V0Qm9keUxlbmd0aDtcbmV4cG9ydHMuY3JlYXRlTm9kZUh0dHBDbGllbnQgPSBjcmVhdGVOb2RlSHR0cENsaWVudDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBodHRwID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6aHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOmh0dHBzXCIpKTtcbmNvbnN0IHpsaWIgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTp6bGliXCIpKTtcbmNvbnN0IG5vZGVfc3RyZWFtXzEgPSByZXF1aXJlKFwibm9kZTpzdHJlYW1cIik7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG5jb25zdCBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4vaHR0cEhlYWRlcnMuanNcIik7XG5jb25zdCByZXN0RXJyb3JfanNfMSA9IHJlcXVpcmUoXCIuL3Jlc3RFcnJvci5qc1wiKTtcbmNvbnN0IGxvZ19qc18xID0gcmVxdWlyZShcIi4vbG9nLmpzXCIpO1xuY29uc3QgREVGQVVMVF9UTFNfU0VUVElOR1MgPSB7fTtcbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0oYm9keSkge1xuICAgIHJldHVybiBib2R5ICYmIHR5cGVvZiBib2R5LnBpcGUgPT09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIGlzU3RyZWFtQ29tcGxldGUoc3RyZWFtKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIGhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgICAgICBzdHJlYW0ub24oXCJjbG9zZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsIGhhbmRsZXIpO1xuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCBoYW5kbGVyKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIoYm9keSkge1xuICAgIHJldHVybiBib2R5ICYmIHR5cGVvZiBib2R5LmJ5dGVMZW5ndGggPT09IFwibnVtYmVyXCI7XG59XG5jbGFzcyBSZXBvcnRUcmFuc2Zvcm0gZXh0ZW5kcyBub2RlX3N0cmVhbV8xLlRyYW5zZm9ybSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZVxuICAgIF90cmFuc2Zvcm0oY2h1bmssIF9lbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5wdXNoKGNodW5rKTtcbiAgICAgICAgdGhpcy5sb2FkZWRCeXRlcyArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQ2FsbGJhY2soeyBsb2FkZWRCeXRlczogdGhpcy5sb2FkZWRCeXRlcyB9KTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHByb2dyZXNzQ2FsbGJhY2spIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb2FkZWRCeXRlcyA9IDA7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NDYWxsYmFjayA9IHByb2dyZXNzQ2FsbGJhY2s7XG4gICAgfVxufVxuLyoqXG4gKiBBIEh0dHBDbGllbnQgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIE5vZGUncyBcImh0dHBzXCIgbW9kdWxlIHRvIHNlbmQgSFRUUFMgcmVxdWVzdHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgTm9kZUh0dHBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNhY2hlZEh0dHBzQWdlbnRzID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZXMgYSByZXF1ZXN0IG92ZXIgYW4gdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC0gVGhlIHJlcXVlc3QgdG8gYmUgbWFkZS5cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGxldCBhYm9ydExpc3RlbmVyO1xuICAgICAgICBpZiAocmVxdWVzdC5hYm9ydFNpZ25hbCkge1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBhYm9ydF9jb250cm9sbGVyXzEuQWJvcnRFcnJvcihcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWJvcnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBcImFib3J0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcXVlc3QuYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1ZXN0LnRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgIH0sIHJlcXVlc3QudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWNjZXB0RW5jb2RpbmcgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQWNjZXB0LUVuY29kaW5nXCIpO1xuICAgICAgICBjb25zdCBzaG91bGREZWNvbXByZXNzID0gKGFjY2VwdEVuY29kaW5nID09PSBudWxsIHx8IGFjY2VwdEVuY29kaW5nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhY2NlcHRFbmNvZGluZy5pbmNsdWRlcyhcImd6aXBcIikpIHx8IChhY2NlcHRFbmNvZGluZyA9PT0gbnVsbCB8fCBhY2NlcHRFbmNvZGluZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWNjZXB0RW5jb2RpbmcuaW5jbHVkZXMoXCJkZWZsYXRlXCIpKTtcbiAgICAgICAgbGV0IGJvZHkgPSB0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcImZ1bmN0aW9uXCIgPyByZXF1ZXN0LmJvZHkoKSA6IHJlcXVlc3QuYm9keTtcbiAgICAgICAgaWYgKGJvZHkgJiYgIXJlcXVlc3QuaGVhZGVycy5oYXMoXCJDb250ZW50LUxlbmd0aFwiKSkge1xuICAgICAgICAgICAgY29uc3QgYm9keUxlbmd0aCA9IGdldEJvZHlMZW5ndGgoYm9keSk7XG4gICAgICAgICAgICBpZiAoYm9keUxlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LUxlbmd0aFwiLCBib2R5TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2VTdHJlYW07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYm9keSAmJiByZXF1ZXN0Lm9uVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvblVwbG9hZFByb2dyZXNzID0gcmVxdWVzdC5vblVwbG9hZFByb2dyZXNzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZFJlcG9ydFN0cmVhbSA9IG5ldyBSZXBvcnRUcmFuc2Zvcm0ob25VcGxvYWRQcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgdXBsb2FkUmVwb3J0U3RyZWFtLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLmVycm9yKFwiRXJyb3IgaW4gdXBsb2FkIHByb2dyZXNzXCIsIGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkucGlwZSh1cGxvYWRSZXBvcnRTdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkUmVwb3J0U3RyZWFtLmVuZChib2R5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYm9keSA9IHVwbG9hZFJlcG9ydFN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgYWJvcnRDb250cm9sbGVyLCBib2R5KTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBnZXRSZXNwb25zZUhlYWRlcnMocmVzKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IChfYSA9IHJlcy5zdGF0dXNDb2RlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBSZXNwb25zZXMgdG8gSEVBRCBtdXN0IG5vdCBoYXZlIGEgYm9keS5cbiAgICAgICAgICAgIC8vIElmIHRoZXkgZG8gcmV0dXJuIGEgYm9keSwgdGhhdCBib2R5IG11c3QgYmUgaWdub3JlZC5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIHJlc3VtZSgpIGFuZCBub3QgZGVzdHJveSgpIHRvIGF2b2lkIGNsb3NpbmcgdGhlIHNvY2tldFxuICAgICAgICAgICAgICAgIC8vIGFuZCBsb3Npbmcga2VlcCBhbGl2ZVxuICAgICAgICAgICAgICAgIHJlcy5yZXN1bWUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZVN0cmVhbSA9IHNob3VsZERlY29tcHJlc3MgPyBnZXREZWNvZGVkUmVzcG9uc2VTdHJlYW0ocmVzLCBoZWFkZXJzKSA6IHJlcztcbiAgICAgICAgICAgIGNvbnN0IG9uRG93bmxvYWRQcm9ncmVzcyA9IHJlcXVlc3Qub25Eb3dubG9hZFByb2dyZXNzO1xuICAgICAgICAgICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkUmVwb3J0U3RyZWFtID0gbmV3IFJlcG9ydFRyYW5zZm9ybShvbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgIGRvd25sb2FkUmVwb3J0U3RyZWFtLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLmVycm9yKFwiRXJyb3IgaW4gZG93bmxvYWQgcHJvZ3Jlc3NcIiwgZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW0ucGlwZShkb3dubG9hZFJlcG9ydFN0cmVhbSk7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW0gPSBkb3dubG9hZFJlcG9ydFN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIFZhbHVlIG9mIFBPU0lUSVZFX0lORklOSVRZIGluIHN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMgaXMgY29uc2lkZXJlZCBhcyBhbnkgc3RhdHVzIGNvZGVcbiAgICAgICAgICAgICgoX2IgPSByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5oYXMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSkgfHxcbiAgICAgICAgICAgICAgICAoKF9jID0gcmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaGFzKHJlc3BvbnNlLnN0YXR1cykpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5ID0gcmVzcG9uc2VTdHJlYW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5ib2R5QXNUZXh0ID0gYXdhaXQgc3RyZWFtVG9UZXh0KHJlc3BvbnNlU3RyZWFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIGNsZWFuIHVwIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5hYm9ydFNpZ25hbCAmJiBhYm9ydExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IHVwbG9hZFN0cmVhbURvbmUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbShib2R5KSkge1xuICAgICAgICAgICAgICAgICAgICB1cGxvYWRTdHJlYW1Eb25lID0gaXNTdHJlYW1Db21wbGV0ZShib2R5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGRvd25sb2FkU3RyZWFtRG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtKHJlc3BvbnNlU3RyZWFtKSkge1xuICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFN0cmVhbURvbmUgPSBpc1N0cmVhbUNvbXBsZXRlKHJlc3BvbnNlU3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoW3VwbG9hZFN0cmVhbURvbmUsIGRvd25sb2FkU3RyZWFtRG9uZV0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9hbHdheXMtcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhYm9ydExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSByZXF1ZXN0LmFib3J0U2lnbmFsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKFwiRXJyb3Igd2hlbiBjbGVhbmluZyB1cCBhYm9ydExpc3RlbmVyIG9uIGh0dHBSZXF1ZXN0XCIsIGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG1ha2VSZXF1ZXN0KHJlcXVlc3QsIGFib3J0Q29udHJvbGxlciwgYm9keSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBpc0luc2VjdXJlID0gdXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiO1xuICAgICAgICBpZiAoaXNJbnNlY3VyZSAmJiAhcmVxdWVzdC5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29ubmVjdCB0byAke3JlcXVlc3QudXJsfSB3aGlsZSBhbGxvd0luc2VjdXJlQ29ubmVjdGlvbiBpcyBmYWxzZS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZ2VudCA9IChfYSA9IHJlcXVlc3QuYWdlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMuZ2V0T3JDcmVhdGVBZ2VudChyZXF1ZXN0LCBpc0luc2VjdXJlKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBhdGg6IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCxcbiAgICAgICAgICAgIHBvcnQ6IHVybC5wb3J0LFxuICAgICAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycy50b0pTT04oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBpc0luc2VjdXJlID8gaHR0cC5yZXF1ZXN0KG9wdGlvbnMsIHJlc29sdmUpIDogaHR0cHMucmVxdWVzdChvcHRpb25zLCByZXNvbHZlKTtcbiAgICAgICAgICAgIHJlcS5vbmNlKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcihlcnIubWVzc2FnZSwgeyBjb2RlOiAoX2EgPSBlcnIuY29kZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVzdEVycm9yX2pzXzEuUmVzdEVycm9yLlJFUVVFU1RfU0VORF9FUlJPUiwgcmVxdWVzdCB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4gICAgICAgICAgICAgICAgcmVxLmRlc3Ryb3koYWJvcnRFcnJvcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYm9keSAmJiBpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgYm9keS5waXBlKHJlcSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChib2R5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXEuZW5kKGJvZHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5lbmQoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIpIDogQnVmZmVyLmZyb20oYm9keSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLmVycm9yKFwiVW5yZWNvZ25pemVkIGJvZHkgdHlwZVwiLCBib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IoXCJVbnJlY29nbml6ZWQgYm9keSB0eXBlXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJlYW1zIGRvbid0IGxpa2UgXCJ1bmRlZmluZWRcIiBiZWluZyBwYXNzZWQgYXMgZGF0YVxuICAgICAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldE9yQ3JlYXRlQWdlbnQocmVxdWVzdCwgaXNJbnNlY3VyZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGRpc2FibGVLZWVwQWxpdmUgPSByZXF1ZXN0LmRpc2FibGVLZWVwQWxpdmU7XG4gICAgICAgIC8vIEhhbmRsZSBJbnNlY3VyZSByZXF1ZXN0cyBmaXJzdFxuICAgICAgICBpZiAoaXNJbnNlY3VyZSkge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVLZWVwQWxpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyBrZWVwQWxpdmU6ZmFsc2UgaXMgdGhlIGRlZmF1bHQgc28gd2UgZG9uJ3QgbmVlZCBhIGN1c3RvbSBBZ2VudFxuICAgICAgICAgICAgICAgIHJldHVybiBodHRwLmdsb2JhbEFnZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlZEh0dHBBZ2VudCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNhY2hlZCBhZ2VudCBjcmVhdGUgYSBuZXcgb25lIGFuZCBjYWNoZSBpdC5cbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZEh0dHBBZ2VudCA9IG5ldyBodHRwLkFnZW50KHsga2VlcEFsaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSHR0cEFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVLZWVwQWxpdmUgJiYgIXJlcXVlc3QudGxzU2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZXJlIGFyZSBubyB0bHNTZXR0aW5ncyBhbmQga2VlcEFsaXZlIGlzIGZhbHNlXG4gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCBhIGN1c3RvbSBhZ2VudFxuICAgICAgICAgICAgICAgIHJldHVybiBodHRwcy5nbG9iYWxBZ2VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIHVzZSB0aGUgdGxzU2V0dGluZ3MgdG8gaW5kZXggY2FjaGVkIGNsaWVudHNcbiAgICAgICAgICAgIGNvbnN0IHRsc1NldHRpbmdzID0gKF9hID0gcmVxdWVzdC50bHNTZXR0aW5ncykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9UTFNfU0VUVElOR1M7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGNhY2hlZCBhZ2VudCBvciBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlXG4gICAgICAgICAgICAvLyBwcm92aWRlZCB2YWx1ZXMgZm9yIGtlZXBBbGl2ZSBhbmQgdGxzU2V0dGluZ3NcbiAgICAgICAgICAgIGxldCBhZ2VudCA9IHRoaXMuY2FjaGVkSHR0cHNBZ2VudHMuZ2V0KHRsc1NldHRpbmdzKTtcbiAgICAgICAgICAgIGlmIChhZ2VudCAmJiBhZ2VudC5vcHRpb25zLmtlZXBBbGl2ZSA9PT0gIWRpc2FibGVLZWVwQWxpdmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuaW5mbyhcIk5vIGNhY2hlZCBUTFMgQWdlbnQgZXhpc3QsIGNyZWF0aW5nIGEgbmV3IEFnZW50XCIpO1xuICAgICAgICAgICAgYWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoT2JqZWN0LmFzc2lnbih7IFxuICAgICAgICAgICAgICAgIC8vIGtlZXBBbGl2ZSBpcyB0cnVlIGlmIGRpc2FibGVLZWVwQWxpdmUgaXMgZmFsc2UuXG4gICAgICAgICAgICAgICAga2VlcEFsaXZlOiAhZGlzYWJsZUtlZXBBbGl2ZSB9LCB0bHNTZXR0aW5ncykpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRIdHRwc0FnZW50cy5zZXQodGxzU2V0dGluZ3MsIGFnZW50KTtcbiAgICAgICAgICAgIHJldHVybiBhZ2VudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVycyhyZXMpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIGh0dHBIZWFkZXJzX2pzXzEuY3JlYXRlSHR0cEhlYWRlcnMpKCk7XG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgT2JqZWN0LmtleXMocmVzLmhlYWRlcnMpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVzLmhlYWRlcnNbaGVhZGVyXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KGhlYWRlciwgdmFsdWVbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBoZWFkZXJzLnNldChoZWFkZXIsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGVhZGVycztcbn1cbmZ1bmN0aW9uIGdldERlY29kZWRSZXNwb25zZVN0cmVhbShzdHJlYW0sIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50RW5jb2RpbmcgPSBoZWFkZXJzLmdldChcIkNvbnRlbnQtRW5jb2RpbmdcIik7XG4gICAgaWYgKGNvbnRlbnRFbmNvZGluZyA9PT0gXCJnemlwXCIpIHtcbiAgICAgICAgY29uc3QgdW56aXAgPSB6bGliLmNyZWF0ZUd1bnppcCgpO1xuICAgICAgICBzdHJlYW0ucGlwZSh1bnppcCk7XG4gICAgICAgIHJldHVybiB1bnppcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29udGVudEVuY29kaW5nID09PSBcImRlZmxhdGVcIikge1xuICAgICAgICBjb25zdCBpbmZsYXRlID0gemxpYi5jcmVhdGVJbmZsYXRlKCk7XG4gICAgICAgIHN0cmVhbS5waXBlKGluZmxhdGUpO1xuICAgICAgICByZXR1cm4gaW5mbGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbTtcbn1cbmZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW0pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBidWZmZXIgPSBbXTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2goQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoYnVmZmVyKS50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlICYmIChlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUubmFtZSkgPT09IFwiQWJvcnRFcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IoYEVycm9yIHJlYWRpbmcgcmVzcG9uc2UgYXMgdGV4dDogJHtlLm1lc3NhZ2V9YCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IuUEFSU0VfRVJST1IsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGdldEJvZHlMZW5ndGgoYm9keSkge1xuICAgIGlmICghYm9keSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBib2R5Lmxlbmd0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSZWFkYWJsZVN0cmVhbShib2R5KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihib2R5KSkge1xuICAgICAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYm9keSkubGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgSHR0cENsaWVudCBpbnN0YW5jZSBmb3IgdGhlIE5vZGVKUyBlbnZpcm9ubWVudC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBjcmVhdGVOb2RlSHR0cENsaWVudCgpIHtcbiAgICByZXR1cm4gbmV3IE5vZGVIdHRwQ2xpZW50KCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub2RlSHR0cENsaWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50ID0gY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQ7XG5jb25zdCBub2RlSHR0cENsaWVudF9qc18xID0gcmVxdWlyZShcIi4vbm9kZUh0dHBDbGllbnQuanNcIik7XG4vKipcbiAqIENyZWF0ZSB0aGUgY29ycmVjdCBIdHRwQ2xpZW50IGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQoKSB7XG4gICAgcmV0dXJuICgwLCBub2RlSHR0cENsaWVudF9qc18xLmNyZWF0ZU5vZGVIdHRwQ2xpZW50KSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVmYXVsdEh0dHBDbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVQaXBlbGluZVJlcXVlc3QgPSBjcmVhdGVQaXBlbGluZVJlcXVlc3Q7XG5jb25zdCBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4vaHR0cEhlYWRlcnMuanNcIik7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0SW1wbCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmw7XG4gICAgICAgIHRoaXMuYm9keSA9IG9wdGlvbnMuYm9keTtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gKF9hID0gb3B0aW9ucy5oZWFkZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoMCwgaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVycykoKTtcbiAgICAgICAgdGhpcy5tZXRob2QgPSAoX2IgPSBvcHRpb25zLm1ldGhvZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJHRVRcIjtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gKF9jID0gb3B0aW9ucy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwO1xuICAgICAgICB0aGlzLm11bHRpcGFydEJvZHkgPSBvcHRpb25zLm11bHRpcGFydEJvZHk7XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgICB0aGlzLmRpc2FibGVLZWVwQWxpdmUgPSAoX2QgPSBvcHRpb25zLmRpc2FibGVLZWVwQWxpdmUpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGZhbHNlO1xuICAgICAgICB0aGlzLnByb3h5U2V0dGluZ3MgPSBvcHRpb25zLnByb3h5U2V0dGluZ3M7XG4gICAgICAgIHRoaXMuc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyA9IG9wdGlvbnMuc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcztcbiAgICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSAoX2UgPSBvcHRpb25zLndpdGhDcmVkZW50aWFscykgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogZmFsc2U7XG4gICAgICAgIHRoaXMuYWJvcnRTaWduYWwgPSBvcHRpb25zLmFib3J0U2lnbmFsO1xuICAgICAgICB0aGlzLnRyYWNpbmdPcHRpb25zID0gb3B0aW9ucy50cmFjaW5nT3B0aW9ucztcbiAgICAgICAgdGhpcy5vblVwbG9hZFByb2dyZXNzID0gb3B0aW9ucy5vblVwbG9hZFByb2dyZXNzO1xuICAgICAgICB0aGlzLm9uRG93bmxvYWRQcm9ncmVzcyA9IG9wdGlvbnMub25Eb3dubG9hZFByb2dyZXNzO1xuICAgICAgICB0aGlzLnJlcXVlc3RJZCA9IG9wdGlvbnMucmVxdWVzdElkIHx8ICgwLCBjb3JlX3V0aWxfMS5yYW5kb21VVUlEKSgpO1xuICAgICAgICB0aGlzLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uID0gKF9mID0gb3B0aW9ucy5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbikgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogZmFsc2U7XG4gICAgICAgIHRoaXMuZW5hYmxlQnJvd3NlclN0cmVhbXMgPSAoX2cgPSBvcHRpb25zLmVuYWJsZUJyb3dzZXJTdHJlYW1zKSAhPT0gbnVsbCAmJiBfZyAhPT0gdm9pZCAwID8gX2cgOiBmYWxzZTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcGlwZWxpbmUgcmVxdWVzdCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogVGhpcyBtZXRob2QgaXMgdG8gYWxsb3cgZm9yIHRoZSBlYXN5IHNldHRpbmcgb2YgZGVmYXVsdCB2YWx1ZXMgYW5kIG5vdCByZXF1aXJlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gY3JlYXRlIHRoZSByZXF1ZXN0IHdpdGguXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBpcGVsaW5lUmVxdWVzdChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBQaXBlbGluZVJlcXVlc3RJbXBsKG9wdGlvbnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZWxpbmVSZXF1ZXN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmV4cG9uZW50aWFsUmV0cnlQb2xpY3kgPSBleHBvbmVudGlhbFJldHJ5UG9saWN5O1xuY29uc3QgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEgPSByZXF1aXJlKFwiLi4vcmV0cnlTdHJhdGVnaWVzL2V4cG9uZW50aWFsUmV0cnlTdHJhdGVneS5qc1wiKTtcbmNvbnN0IHJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9yZXRyeVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBleHBvbmVudGlhbFJldHJ5UG9saWN5LlxuICovXG5leHBvcnRzLmV4cG9uZW50aWFsUmV0cnlQb2xpY3lOYW1lID0gXCJleHBvbmVudGlhbFJldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgYXR0ZW1wdHMgdG8gcmV0cnkgcmVxdWVzdHMgd2hpbGUgaW50cm9kdWNpbmcgYW4gZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nIGRlbGF5LlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRoYXQgY29uZmlndXJlIHJldHJ5IGxvZ2ljLlxuICovXG5mdW5jdGlvbiBleHBvbmVudGlhbFJldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKDAsIHJldHJ5UG9saWN5X2pzXzEucmV0cnlQb2xpY3kpKFtcbiAgICAgICAgKDAsIGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xLmV4cG9uZW50aWFsUmV0cnlTdHJhdGVneSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBpZ25vcmVTeXN0ZW1FcnJvcnM6IHRydWUgfSkpLFxuICAgIF0sIHtcbiAgICAgICAgbWF4UmV0cmllczogKF9hID0gb3B0aW9ucy5tYXhSZXRyaWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cG9uZW50aWFsUmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuc3lzdGVtRXJyb3JSZXRyeVBvbGljeSA9IHN5c3RlbUVycm9yUmV0cnlQb2xpY3k7XG5jb25zdCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgcmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5UG9saWN5LmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSB7QGxpbmsgc3lzdGVtRXJyb3JSZXRyeVBvbGljeX1cbiAqL1xuZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZSA9IFwic3lzdGVtRXJyb3JSZXRyeVBvbGljeVwiO1xuLyoqXG4gKiBBIHJldHJ5IHBvbGljeSB0aGF0IHNwZWNpZmljYWxseSBzZWVrcyB0byBoYW5kbGUgZXJyb3JzIGluIHRoZVxuICogdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gRE5TIGxvb2t1cCBmYWlsdXJlcykgcmF0aGVyIHRoYW5cbiAqIHJldHJ5YWJsZSBlcnJvciBjb2RlcyBmcm9tIHRoZSBzZXJ2ZXIgaXRzZWxmLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRoYXQgY3VzdG9taXplIHRoZSBwb2xpY3kuXG4gKi9cbmZ1bmN0aW9uIHN5c3RlbUVycm9yUmV0cnlQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuc3lzdGVtRXJyb3JSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIHNlbmRSZXF1ZXN0OiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoW1xuICAgICAgICAgICAgKDAsIGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xLmV4cG9uZW50aWFsUmV0cnlTdHJhdGVneSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBpZ25vcmVIdHRwU3RhdHVzQ29kZXM6IHRydWUgfSkpLFxuICAgICAgICBdLCB7XG4gICAgICAgICAgICBtYXhSZXRyaWVzOiAoX2EgPSBvcHRpb25zLm1heFJldHJpZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbnN0YW50c19qc18xLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5ULFxuICAgICAgICB9KS5zZW5kUmVxdWVzdCxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3lzdGVtRXJyb3JSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeSA9IHRocm90dGxpbmdSZXRyeVBvbGljeTtcbmNvbnN0IHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEgPSByZXF1aXJlKFwiLi4vcmV0cnlTdHJhdGVnaWVzL3Rocm90dGxpbmdSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgcmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5UG9saWN5LmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSB7QGxpbmsgdGhyb3R0bGluZ1JldHJ5UG9saWN5fVxuICovXG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUgPSBcInRocm90dGxpbmdSZXRyeVBvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0aGF0IHJldHJpZXMgd2hlbiB0aGUgc2VydmVyIHNlbmRzIGEgNDI5IHJlc3BvbnNlIHdpdGggYSBSZXRyeS1BZnRlciBoZWFkZXIuXG4gKlxuICogVG8gbGVhcm4gbW9yZSwgcGxlYXNlIHJlZmVyIHRvXG4gKiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9henVyZS1yZXNvdXJjZS1tYW5hZ2VyL3Jlc291cmNlLW1hbmFnZXItcmVxdWVzdC1saW1pdHMsXG4gKiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9henVyZS1zdWJzY3JpcHRpb24tc2VydmljZS1saW1pdHMgYW5kXG4gKiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmVzL3Ryb3VibGVzaG9vdGluZy90cm91Ymxlc2hvb3RpbmctdGhyb3R0bGluZy1lcnJvcnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCBjb25maWd1cmUgcmV0cnkgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIHRocm90dGxpbmdSZXRyeVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lLFxuICAgICAgICBzZW5kUmVxdWVzdDogKDAsIHJldHJ5UG9saWN5X2pzXzEucmV0cnlQb2xpY3kpKFsoMCwgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMS50aHJvdHRsaW5nUmV0cnlTdHJhdGVneSkoKV0sIHtcbiAgICAgICAgICAgIG1heFJldHJpZXM6IChfYSA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQsXG4gICAgICAgIH0pLnNlbmRSZXF1ZXN0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvdHRsaW5nUmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ERUZBVUxUX0NZQ0xFUl9PUFRJT05TID0gdm9pZCAwO1xuZXhwb3J0cy5jcmVhdGVUb2tlbkN5Y2xlciA9IGNyZWF0ZVRva2VuQ3ljbGVyO1xuY29uc3QgaGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vaGVscGVycy5qc1wiKTtcbi8vIERlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGN5Y2xlciBpZiBub25lIGFyZSBwcm92aWRlZFxuZXhwb3J0cy5ERUZBVUxUX0NZQ0xFUl9PUFRJT05TID0ge1xuICAgIGZvcmNlZFJlZnJlc2hXaW5kb3dJbk1zOiAxMDAwLCAvLyBGb3JjZSB3YWl0aW5nIGZvciBhIHJlZnJlc2ggMXMgYmVmb3JlIHRoZSB0b2tlbiBleHBpcmVzXG4gICAgcmV0cnlJbnRlcnZhbEluTXM6IDMwMDAsIC8vIEFsbG93IHJlZnJlc2ggYXR0ZW1wdHMgZXZlcnkgM3NcbiAgICByZWZyZXNoV2luZG93SW5NczogMTAwMCAqIDYwICogMiwgLy8gU3RhcnQgcmVmcmVzaGluZyAybSBiZWZvcmUgZXhwaXJ5XG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhbiBhbiB1bnJlbGlhYmxlIGFjY2VzcyB0b2tlbiBnZXR0ZXIgKHdoaWNoIG1heSByZXNvbHZlIHdpdGggbnVsbClcbiAqIGludG8gYW4gQWNjZXNzVG9rZW5HZXR0ZXIgYnkgcmV0cnlpbmcgdGhlIHVucmVsaWFibGUgZ2V0dGVyIGluIGEgcmVndWxhclxuICogaW50ZXJ2YWwuXG4gKlxuICogQHBhcmFtIGdldEFjY2Vzc1Rva2VuIC0gQSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGEgcHJvbWlzZSBvZiBhbiBhY2Nlc3MgdG9rZW4gdGhhdCBtYXkgZmFpbCBieSByZXR1cm5pbmcgbnVsbC5cbiAqIEBwYXJhbSByZXRyeUludGVydmFsSW5NcyAtIFRoZSB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRvIHdhaXQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy5cbiAqIEBwYXJhbSByZWZyZXNoVGltZW91dCAtIFRoZSB0aW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIHJlZnJlc2ggYXR0ZW1wdCB3aWxsIGZhaWwsIHRocm93aW5nIGFuIGV4Y2VwdGlvbi5cbiAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQsIGlmIGl0IHJlc29sdmVzLCB3aWxsIHJlc29sdmUgd2l0aCBhbiBhY2Nlc3MgdG9rZW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJlZ2luUmVmcmVzaChnZXRBY2Nlc3NUb2tlbiwgcmV0cnlJbnRlcnZhbEluTXMsIHJlZnJlc2hUaW1lb3V0KSB7XG4gICAgLy8gVGhpcyB3cmFwcGVyIGhhbmRsZXMgZXhjZXB0aW9ucyBncmFjZWZ1bGx5IGFzIGxvbmcgYXMgd2UgaGF2ZW4ndCBleGNlZWRlZFxuICAgIC8vIHRoZSB0aW1lb3V0LlxuICAgIGFzeW5jIGZ1bmN0aW9uIHRyeUdldEFjY2Vzc1Rva2VuKCkge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSA8IHJlZnJlc2hUaW1lb3V0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBmaW5hbFRva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgIC8vIFRpbWVvdXQgaXMgdXAsIHNvIHRocm93IGlmIGl0J3Mgc3RpbGwgbnVsbFxuICAgICAgICAgICAgaWYgKGZpbmFsVG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVmcmVzaCBhY2Nlc3MgdG9rZW4uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsVG9rZW47XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHRva2VuID0gYXdhaXQgdHJ5R2V0QWNjZXNzVG9rZW4oKTtcbiAgICB3aGlsZSAodG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgYXdhaXQgKDAsIGhlbHBlcnNfanNfMS5kZWxheSkocmV0cnlJbnRlcnZhbEluTXMpO1xuICAgICAgICB0b2tlbiA9IGF3YWl0IHRyeUdldEFjY2Vzc1Rva2VuKCk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHRva2VuIGN5Y2xlciBmcm9tIGEgY3JlZGVudGlhbCwgc2NvcGVzLCBhbmQgb3B0aW9uYWwgc2V0dGluZ3MuXG4gKlxuICogQSB0b2tlbiBjeWNsZXIgcmVwcmVzZW50cyBhIHdheSB0byByZWxpYWJseSByZXRyaWV2ZSBhIHZhbGlkIGFjY2VzcyB0b2tlblxuICogZnJvbSBhIFRva2VuQ3JlZGVudGlhbC4gSXQgd2lsbCBoYW5kbGUgaW5pdGlhbGl6aW5nIHRoZSB0b2tlbiwgcmVmcmVzaGluZyBpdFxuICogd2hlbiBpdCBuZWFycyBleHBpcmF0aW9uLCBhbmQgc3luY2hyb25pemVzIHJlZnJlc2ggYXR0ZW1wdHMgdG8gYXZvaWRcbiAqIGNvbmN1cnJlbmN5IGhhemFyZHMuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSB0aGUgdW5kZXJseWluZyBUb2tlbkNyZWRlbnRpYWwgdGhhdCBwcm92aWRlcyB0aGUgYWNjZXNzXG4gKiB0b2tlblxuICogQHBhcmFtIHRva2VuQ3ljbGVyT3B0aW9ucyAtIG9wdGlvbmFsbHkgb3ZlcnJpZGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGN5Y2xlclxuICpcbiAqIEByZXR1cm5zIC0gYSBmdW5jdGlvbiB0aGF0IHJlbGlhYmx5IHByb2R1Y2VzIGEgdmFsaWQgYWNjZXNzIHRva2VuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRva2VuQ3ljbGVyKGNyZWRlbnRpYWwsIHRva2VuQ3ljbGVyT3B0aW9ucykge1xuICAgIGxldCByZWZyZXNoV29ya2VyID0gbnVsbDtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuICAgIGxldCB0ZW5hbnRJZDtcbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBleHBvcnRzLkRFRkFVTFRfQ1lDTEVSX09QVElPTlMpLCB0b2tlbkN5Y2xlck9wdGlvbnMpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgbGl0dGxlIGhvbGRlciBkZWZpbmVzIHNldmVyYWwgcHJlZGljYXRlcyB0aGF0IHdlIHVzZSB0byBjb25zdHJ1Y3RcbiAgICAgKiB0aGUgcnVsZXMgb2YgcmVmcmVzaGluZyB0aGUgdG9rZW4uXG4gICAgICovXG4gICAgY29uc3QgY3ljbGVyID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvZHVjZXMgdHJ1ZSBpZiBhIHJlZnJlc2ggam9iIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldCBpc1JlZnJlc2hpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmcmVzaFdvcmtlciAhPT0gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb2R1Y2VzIHRydWUgaWYgdGhlIGN5Y2xlciBTSE9VTEQgcmVmcmVzaCAod2UgYXJlIHdpdGhpbiB0aGUgcmVmcmVzaFxuICAgICAgICAgKiB3aW5kb3cgYW5kIG5vdCBhbHJlYWR5IHJlZnJlc2hpbmcpXG4gICAgICAgICAqL1xuICAgICAgICBnZXQgc2hvdWxkUmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChjeWNsZXIuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0b2tlbiA9PT0gbnVsbCB8fCB0b2tlbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdG9rZW4ucmVmcmVzaEFmdGVyVGltZXN0YW1wKSAmJiB0b2tlbi5yZWZyZXNoQWZ0ZXJUaW1lc3RhbXAgPCBEYXRlLm5vdygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5leHBpcmVzT25UaW1lc3RhbXApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApIC0gb3B0aW9ucy5yZWZyZXNoV2luZG93SW5NcyA8IERhdGUubm93KCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcm9kdWNlcyB0cnVlIGlmIHRoZSBjeWNsZXIgTVVTVCByZWZyZXNoIChudWxsIG9yIG5lYXJseS1leHBpcmVkXG4gICAgICAgICAqIHRva2VuKS5cbiAgICAgICAgICovXG4gICAgICAgIGdldCBtdXN0UmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHJldHVybiAodG9rZW4gPT09IG51bGwgfHwgdG9rZW4uZXhwaXJlc09uVGltZXN0YW1wIC0gb3B0aW9ucy5mb3JjZWRSZWZyZXNoV2luZG93SW5NcyA8IERhdGUubm93KCkpO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgLyoqXG4gICAgICogU3RhcnRzIGEgcmVmcmVzaCBqb2Igb3IgcmV0dXJucyB0aGUgZXhpc3Rpbmcgam9iIGlmIG9uZSBpcyBhbHJlYWR5XG4gICAgICogcnVubmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWZyZXNoKHNjb3BlcywgZ2V0VG9rZW5PcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCFjeWNsZXIuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgICAvLyBXZSBiaW5kIGBzY29wZXNgIGhlcmUgdG8gYXZvaWQgcGFzc2luZyBpdCBhcm91bmQgYSBsb3RcbiAgICAgICAgICAgIGNvbnN0IHRyeUdldEFjY2Vzc1Rva2VuID0gKCkgPT4gY3JlZGVudGlhbC5nZXRUb2tlbihzY29wZXMsIGdldFRva2VuT3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBwcm9taXNlIGNoYWluaW5nIHRvIGluc2VydCBhbiBhc3NpZ25tZW50IHRvIGB0b2tlbmBcbiAgICAgICAgICAgIC8vIGJlZm9yZSB0aGUgcmVmcmVzaCBjYW4gYmUgY29uc2lkZXJlZCBkb25lLlxuICAgICAgICAgICAgcmVmcmVzaFdvcmtlciA9IGJlZ2luUmVmcmVzaCh0cnlHZXRBY2Nlc3NUb2tlbiwgb3B0aW9ucy5yZXRyeUludGVydmFsSW5NcywgXG4gICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgdG9rZW4sIHRoZW4gd2Ugc2hvdWxkIHRpbWVvdXQgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIChfYSA9IHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5leHBpcmVzT25UaW1lc3RhbXApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IERhdGUubm93KCkpXG4gICAgICAgICAgICAgICAgLnRoZW4oKF90b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHJlZnJlc2hXb3JrZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRva2VuID0gX3Rva2VuO1xuICAgICAgICAgICAgICAgIHRlbmFudElkID0gZ2V0VG9rZW5PcHRpb25zLnRlbmFudElkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChyZWFzb24pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhbHNvIHNob3VsZCByZXNldCB0aGUgcmVmcmVzaGVyIGlmIHdlIGVudGVyIGEgZmFpbGVkIHN0YXRlLiAgQWxsXG4gICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgYXdhaXRlcnMgd2lsbCB0aHJvdywgYnV0IHN1YnNlcXVlbnQgcmVxdWVzdHMgd2lsbCBzdGFydCBhXG4gICAgICAgICAgICAgICAgLy8gbmV3IHJldHJ5IGNoYWluLlxuICAgICAgICAgICAgICAgIHJlZnJlc2hXb3JrZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRva2VuID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmcmVzaFdvcmtlcjtcbiAgICB9XG4gICAgcmV0dXJuIGFzeW5jIChzY29wZXMsIHRva2VuT3B0aW9ucykgPT4ge1xuICAgICAgICAvL1xuICAgICAgICAvLyBTaW1wbGUgcnVsZXM6XG4gICAgICAgIC8vIC0gSWYgd2UgTVVTVCByZWZyZXNoLCB0aGVuIHJldHVybiB0aGUgcmVmcmVzaCB0YXNrLCBibG9ja2luZ1xuICAgICAgICAvLyAgIHRoZSBwaXBlbGluZSB1bnRpbCBhIHRva2VuIGlzIGF2YWlsYWJsZS5cbiAgICAgICAgLy8gLSBJZiB3ZSBTSE9VTEQgcmVmcmVzaCwgdGhlbiBydW4gcmVmcmVzaCBidXQgZG9uJ3QgcmV0dXJuIGl0XG4gICAgICAgIC8vICAgKHdlIGNhbiBzdGlsbCB1c2UgdGhlIGNhY2hlZCB0b2tlbikuXG4gICAgICAgIC8vIC0gUmV0dXJuIHRoZSB0b2tlbiwgc2luY2UgaXQncyBmaW5lIGlmIHdlIGRpZG4ndCByZXR1cm4gaW5cbiAgICAgICAgLy8gICBzdGVwIDEuXG4gICAgICAgIC8vXG4gICAgICAgIGNvbnN0IGhhc0NsYWltQ2hhbGxlbmdlID0gQm9vbGVhbih0b2tlbk9wdGlvbnMuY2xhaW1zKTtcbiAgICAgICAgY29uc3QgdGVuYW50SWRDaGFuZ2VkID0gdGVuYW50SWQgIT09IHRva2VuT3B0aW9ucy50ZW5hbnRJZDtcbiAgICAgICAgaWYgKGhhc0NsYWltQ2hhbGxlbmdlKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSByZWNlaXZlZCBhIGNsYWltLCB3ZSBrbm93IHRoZSBleGlzdGluZyB0b2tlbiBpc24ndCB2YWxpZFxuICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVhciBpdCBzbyB0aGF0IHRoYXQgcmVmcmVzaCB3b3JrZXIgd29uJ3QgdXNlIHRoZSBvbGQgZXhwaXJhdGlvbiB0aW1lIGFzIGEgdGltZW91dFxuICAgICAgICAgICAgdG9rZW4gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSB0ZW5hbnRJZCBwYXNzZWQgaW4gdG9rZW4gb3B0aW9ucyBpcyBkaWZmZXJlbnQgdG8gdGhlIG9uZSB3ZSBoYXZlXG4gICAgICAgIC8vIE9yIGlmIHdlIGFyZSBpbiBjbGFpbSBjaGFsbGVuZ2UgYW5kIHRoZSB0b2tlbiB3YXMgcmVqZWN0ZWQgYW5kIGEgbmV3IGFjY2VzcyB0b2tlbiBuZWVkIHRvIGJlIGlzc3VlZCwgd2UgbmVlZCB0b1xuICAgICAgICAvLyByZWZyZXNoIHRoZSB0b2tlbiB3aXRoIHRoZSBuZXcgdGVuYW50SWQgb3IgdG9rZW4uXG4gICAgICAgIGNvbnN0IG11c3RSZWZyZXNoID0gdGVuYW50SWRDaGFuZ2VkIHx8IGhhc0NsYWltQ2hhbGxlbmdlIHx8IGN5Y2xlci5tdXN0UmVmcmVzaDtcbiAgICAgICAgaWYgKG11c3RSZWZyZXNoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmcmVzaChzY29wZXMsIHRva2VuT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN5Y2xlci5zaG91bGRSZWZyZXNoKSB7XG4gICAgICAgICAgICByZWZyZXNoKHNjb3BlcywgdG9rZW5PcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2VuQ3ljbGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgPSBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5O1xuY29uc3QgdG9rZW5DeWNsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3Rva2VuQ3ljbGVyLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWUgPSBcImJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lcIjtcbi8qKlxuICogRGVmYXVsdCBhdXRob3JpemUgcmVxdWVzdCBoYW5kbGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRBdXRob3JpemVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHNjb3BlcywgZ2V0QWNjZXNzVG9rZW4sIHJlcXVlc3QgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZ2V0VG9rZW5PcHRpb25zID0ge1xuICAgICAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICAgICAgdHJhY2luZ09wdGlvbnM6IHJlcXVlc3QudHJhY2luZ09wdGlvbnMsXG4gICAgfTtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKHNjb3BlcywgZ2V0VG9rZW5PcHRpb25zKTtcbiAgICBpZiAoYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBgQmVhcmVyICR7YWNjZXNzVG9rZW4udG9rZW59YCk7XG4gICAgfVxufVxuLyoqXG4gKiBXZSB3aWxsIHJldHJpZXZlIHRoZSBjaGFsbGVuZ2Ugb25seSBpZiB0aGUgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgd2FzIDQwMSxcbiAqIGFuZCBpZiB0aGUgcmVzcG9uc2UgY29udGFpbmVkIHRoZSBoZWFkZXIgXCJXV1ctQXV0aGVudGljYXRlXCIgd2l0aCBhIG5vbi1lbXB0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2hhbGxlbmdlKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgY2hhbGxlbmdlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJXV1ctQXV0aGVudGljYXRlXCIpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSAmJiBjaGFsbGVuZ2UpIHtcbiAgICAgICAgcmV0dXJuIGNoYWxsZW5nZTtcbiAgICB9XG4gICAgcmV0dXJuO1xufVxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGNhbiByZXF1ZXN0IGEgdG9rZW4gZnJvbSBhIFRva2VuQ3JlZGVudGlhbCBpbXBsZW1lbnRhdGlvbiBhbmRcbiAqIHRoZW4gYXBwbHkgaXQgdG8gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIG9mIGEgcmVxdWVzdCBhcyBhIEJlYXJlciB0b2tlbi5cbiAqL1xuZnVuY3Rpb24gYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeShvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgY3JlZGVudGlhbCwgc2NvcGVzLCBjaGFsbGVuZ2VDYWxsYmFja3MgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbG9nZ2VyID0gb3B0aW9ucy5sb2dnZXIgfHwgbG9nX2pzXzEubG9nZ2VyO1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9IE9iamVjdC5hc3NpZ24oeyBhdXRob3JpemVSZXF1ZXN0OiAoX2EgPSBjaGFsbGVuZ2VDYWxsYmFja3MgPT09IG51bGwgfHwgY2hhbGxlbmdlQ2FsbGJhY2tzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFsbGVuZ2VDYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdEF1dGhvcml6ZVJlcXVlc3QsIGF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZTogY2hhbGxlbmdlQ2FsbGJhY2tzID09PSBudWxsIHx8IGNoYWxsZW5nZUNhbGxiYWNrcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2hhbGxlbmdlQ2FsbGJhY2tzLmF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZSB9LCBjaGFsbGVuZ2VDYWxsYmFja3MpO1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gZW5jYXBzdWxhdGVzIHRoZSBlbnRpcmUgcHJvY2VzcyBvZiByZWxpYWJseSByZXRyaWV2aW5nIHRoZSB0b2tlblxuICAgIC8vIFRoZSBvcHRpb25zIGFyZSBsZWZ0IG91dCBvZiB0aGUgcHVibGljIEFQSSB1bnRpbCB0aGVyZSdzIGRlbWFuZCB0byBjb25maWd1cmUgdGhpcy5cbiAgICAvLyBSZW1lbWJlciB0byBleHRlbmQgYEJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lPcHRpb25zYCB3aXRoIGBUb2tlbkN5Y2xlck9wdGlvbnNgXG4gICAgLy8gaW4gb3JkZXIgdG8gcGFzcyB0aHJvdWdoIHRoZSBgb3B0aW9uc2Agb2JqZWN0LlxuICAgIGNvbnN0IGdldEFjY2Vzc1Rva2VuID0gY3JlZGVudGlhbFxuICAgICAgICA/ICgwLCB0b2tlbkN5Y2xlcl9qc18xLmNyZWF0ZVRva2VuQ3ljbGVyKShjcmVkZW50aWFsIC8qICwgb3B0aW9ucyAqLylcbiAgICAgICAgOiAoKSA9PiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRoZXJlJ3Mgbm8gY2hhbGxlbmdlIHBhcmFtZXRlcjpcbiAgICAgICAgICogLSBJdCB3aWxsIHRyeSB0byByZXRyaWV2ZSB0aGUgdG9rZW4gdXNpbmcgdGhlIGNhY2hlLCBvciB0aGUgY3JlZGVudGlhbCdzIGdldFRva2VuLlxuICAgICAgICAgKiAtIFRoZW4gaXQgd2lsbCB0cnkgdGhlIG5leHQgcG9saWN5IHdpdGggb3Igd2l0aG91dCB0aGUgcmV0cmlldmVkIHRva2VuLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJdCB1c2VzIHRoZSBjaGFsbGVuZ2UgcGFyYW1ldGVycyB0bzpcbiAgICAgICAgICogLSBTa2lwIGEgZmlyc3QgYXR0ZW1wdCB0byBnZXQgdGhlIHRva2VuIGZyb20gdGhlIGNyZWRlbnRpYWwgaWYgdGhlcmUncyBubyBjYWNoZWQgdG9rZW4sXG4gICAgICAgICAqICAgc2luY2UgaXQgZXhwZWN0cyB0aGUgdG9rZW4gdG8gYmUgcmV0cmlldmFibGUgb25seSBhZnRlciB0aGUgY2hhbGxlbmdlLlxuICAgICAgICAgKiAtIFByZXBhcmUgdGhlIG91dGdvaW5nIHJlcXVlc3QgaWYgdGhlIGBwcmVwYXJlUmVxdWVzdGAgbWV0aG9kIGhhcyBiZWVuIHByb3ZpZGVkLlxuICAgICAgICAgKiAtIFNlbmQgYW4gaW5pdGlhbCByZXF1ZXN0IHRvIHJlY2VpdmUgdGhlIGNoYWxsZW5nZSBpZiBpdCBmYWlscy5cbiAgICAgICAgICogLSBQcm9jZXNzIGEgY2hhbGxlbmdlIGlmIHRoZSByZXNwb25zZSBjb250YWlucyBpdC5cbiAgICAgICAgICogLSBSZXRyaWV2ZSBhIHRva2VuIHdpdGggdGhlIGNoYWxsZW5nZSBpbmZvcm1hdGlvbiwgdGhlbiByZS1zZW5kIHRoZSByZXF1ZXN0LlxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnVybC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJlYXJlciB0b2tlbiBhdXRoZW50aWNhdGlvbiBpcyBub3QgcGVybWl0dGVkIGZvciBub24tVExTIHByb3RlY3RlZCAobm9uLWh0dHBzKSBVUkxzLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrcy5hdXRob3JpemVSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICBzY29wZXM6IEFycmF5LmlzQXJyYXkoc2NvcGVzKSA/IHNjb3BlcyA6IFtzY29wZXNdLFxuICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgZ2V0QWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGVyci5yZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlICYmXG4gICAgICAgICAgICAgICAgKHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5zdGF0dXMpID09PSA0MDEgJiZcbiAgICAgICAgICAgICAgICBnZXRDaGFsbGVuZ2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2VzIGNoYWxsZW5nZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFNlbmRSZXF1ZXN0ID0gYXdhaXQgY2FsbGJhY2tzLmF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZSh7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlczogQXJyYXkuaXNBcnJheShzY29wZXMpID8gc2NvcGVzIDogW3Njb3Blc10sXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTZW5kUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5kSnNvblBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLm5kSnNvblBvbGljeSA9IG5kSnNvblBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBuZEpzb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMubmRKc29uUG9saWN5TmFtZSA9IFwibmRKc29uUG9saWN5XCI7XG4vKipcbiAqIG5kSnNvblBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIGNvbnRyb2wga2VlcCBhbGl2ZSBzZXR0aW5ncyBmb3IgZXZlcnkgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gbmRKc29uUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMubmRKc29uUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgLy8gVGhlcmUgY3VycmVudGx5IGlzbid0IGEgZ29vZCB3YXkgdG8gYnlwYXNzIHRoZSBzZXJpYWxpemVyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3QuYm9keSA9PT0gXCJzdHJpbmdcIiAmJiByZXF1ZXN0LmJvZHkuc3RhcnRzV2l0aChcIltcIikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXF1ZXN0LmJvZHkpO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IGJvZHkubWFwKChpdGVtKSA9PiBKU09OLnN0cmluZ2lmeShpdGVtKSArIFwiXFxuXCIpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5kSnNvblBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kgPSBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeTtcbmNvbnN0IHRva2VuQ3ljbGVyX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC90b2tlbkN5Y2xlci5qc1wiKTtcbmNvbnN0IGxvZ19qc18xID0gcmVxdWlyZShcIi4uL2xvZy5qc1wiKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5cbiAqL1xuZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWUgPSBcImF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5XCI7XG5jb25zdCBBVVRIT1JJWkFUSU9OX0FVWElMSUFSWV9IRUFERVIgPSBcIngtbXMtYXV0aG9yaXphdGlvbi1hdXhpbGlhcnlcIjtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRBdXRob3JpemVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgc2NvcGVzLCBnZXRBY2Nlc3NUb2tlbiwgcmVxdWVzdCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBnZXRUb2tlbk9wdGlvbnMgPSB7XG4gICAgICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgICAgICB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyxcbiAgICB9O1xuICAgIHJldHVybiAoX2IgPSAoX2EgPSAoYXdhaXQgZ2V0QWNjZXNzVG9rZW4oc2NvcGVzLCBnZXRUb2tlbk9wdGlvbnMpKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRva2VuKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIlwiO1xufVxuLyoqXG4gKiBBIHBvbGljeSBmb3IgZXh0ZXJuYWwgdG9rZW5zIHRvIGB4LW1zLWF1dGhvcml6YXRpb24tYXV4aWxpYXJ5YCBoZWFkZXIuXG4gKiBUaGlzIGhlYWRlciB3aWxsIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIGNyb3NzLXRlbmFudCBhcHBsaWNhdGlvbiB3ZSBtYXkgbmVlZCB0byBoYW5kbGUgYXV0aGVudGljYXRpb24gcmVxdWVzdHNcbiAqIGZvciByZXNvdXJjZXMgdGhhdCBhcmUgaW4gZGlmZmVyZW50IHRlbmFudHMuXG4gKiBZb3UgY291bGQgc2VlIFtBUk0gZG9jc10oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2F6dXJlLXJlc291cmNlLW1hbmFnZXIvbWFuYWdlbWVudC9hdXRoZW50aWNhdGUtbXVsdGktdGVuYW50KSBmb3IgYSBydW5kb3duIG9mIGhvdyB0aGlzIGZlYXR1cmUgd29ya3NcbiAqL1xuZnVuY3Rpb24gYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kob3B0aW9ucykge1xuICAgIGNvbnN0IHsgY3JlZGVudGlhbHMsIHNjb3BlcyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBsb2dnZXIgPSBvcHRpb25zLmxvZ2dlciB8fCBsb2dfanNfMS5sb2dnZXI7XG4gICAgY29uc3QgdG9rZW5DeWNsZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QudXJsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uIGZvciBhdXhpbGlhcnkgaGVhZGVyIGlzIG5vdCBwZXJtaXR0ZWQgZm9yIG5vbi1UTFMgcHJvdGVjdGVkIChub24taHR0cHMpIFVSTHMuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgJHtleHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZX0gaGVhZGVyIHdpbGwgbm90IGJlIHNldCBkdWUgdG8gZW1wdHkgY3JlZGVudGlhbHMuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0b2tlblByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNyZWRlbnRpYWwgb2YgY3JlZGVudGlhbHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ2V0QWNjZXNzVG9rZW4gPSB0b2tlbkN5Y2xlck1hcC5nZXQoY3JlZGVudGlhbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFnZXRBY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbiA9ICgwLCB0b2tlbkN5Y2xlcl9qc18xLmNyZWF0ZVRva2VuQ3ljbGVyKShjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5DeWNsZXJNYXAuc2V0KGNyZWRlbnRpYWwsIGdldEFjY2Vzc1Rva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG9rZW5Qcm9taXNlcy5wdXNoKHNlbmRBdXRob3JpemVSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzOiBBcnJheS5pc0FycmF5KHNjb3BlcykgPyBzY29wZXMgOiBbc2NvcGVzXSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0QWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhdXhpbGlhcnlUb2tlbnMgPSAoYXdhaXQgUHJvbWlzZS5hbGwodG9rZW5Qcm9taXNlcykpLmZpbHRlcigodG9rZW4pID0+IEJvb2xlYW4odG9rZW4pKTtcbiAgICAgICAgICAgIGlmIChhdXhpbGlhcnlUb2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoYE5vbmUgb2YgdGhlIGF1eGlsaWFyeSB0b2tlbnMgYXJlIHZhbGlkLiAke0FVVEhPUklaQVRJT05fQVVYSUxJQVJZX0hFQURFUn0gaGVhZGVyIHdpbGwgbm90IGJlIHNldC5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoQVVUSE9SSVpBVElPTl9BVVhJTElBUllfSEVBREVSLCBhdXhpbGlhcnlUb2tlbnMubWFwKCh0b2tlbikgPT4gYEJlYXJlciAke3Rva2VufWApLmpvaW4oXCIsIFwiKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVGaWxlRnJvbVN0cmVhbSA9IGV4cG9ydHMuY3JlYXRlRmlsZSA9IGV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lID0gZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeSA9IGV4cG9ydHMubmRKc29uUG9saWN5TmFtZSA9IGV4cG9ydHMubmRKc29uUG9saWN5ID0gZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSA9IGV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSA9IGV4cG9ydHMuZm9ybURhdGFQb2xpY3lOYW1lID0gZXhwb3J0cy5mb3JtRGF0YVBvbGljeSA9IGV4cG9ydHMudGxzUG9saWN5TmFtZSA9IGV4cG9ydHMudGxzUG9saWN5ID0gZXhwb3J0cy51c2VyQWdlbnRQb2xpY3lOYW1lID0gZXhwb3J0cy51c2VyQWdlbnRQb2xpY3kgPSBleHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeSA9IGV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUgPSBleHBvcnRzLnRyYWNpbmdQb2xpY3kgPSBleHBvcnRzLnJldHJ5UG9saWN5ID0gZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lID0gZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlQb2xpY3kgPSBleHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lID0gZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5ID0gZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUgPSBleHBvcnRzLnJlZGlyZWN0UG9saWN5ID0gZXhwb3J0cy5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyA9IGV4cG9ydHMucHJveHlQb2xpY3lOYW1lID0gZXhwb3J0cy5wcm94eVBvbGljeSA9IGV4cG9ydHMubXVsdGlwYXJ0UG9saWN5TmFtZSA9IGV4cG9ydHMubXVsdGlwYXJ0UG9saWN5ID0gZXhwb3J0cy5sb2dQb2xpY3lOYW1lID0gZXhwb3J0cy5sb2dQb2xpY3kgPSBleHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUgPSBleHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeSA9IGV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWUgPSBleHBvcnRzLmV4cG9uZW50aWFsUmV0cnlQb2xpY3kgPSBleHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgPSBleHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeSA9IGV4cG9ydHMuaXNSZXN0RXJyb3IgPSBleHBvcnRzLlJlc3RFcnJvciA9IGV4cG9ydHMuY3JlYXRlUGlwZWxpbmVSZXF1ZXN0ID0gZXhwb3J0cy5jcmVhdGVIdHRwSGVhZGVycyA9IGV4cG9ydHMuY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQgPSBleHBvcnRzLmNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMgPSBleHBvcnRzLmNyZWF0ZUVtcHR5UGlwZWxpbmUgPSB2b2lkIDA7XG52YXIgcGlwZWxpbmVfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRW1wdHlQaXBlbGluZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGlwZWxpbmVfanNfMS5jcmVhdGVFbXB0eVBpcGVsaW5lOyB9IH0pO1xudmFyIGNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnNfanNfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zX2pzXzEuY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9uczsgfSB9KTtcbnZhciBkZWZhdWx0SHR0cENsaWVudF9qc18xID0gcmVxdWlyZShcIi4vZGVmYXVsdEh0dHBDbGllbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZWZhdWx0SHR0cENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVmYXVsdEh0dHBDbGllbnRfanNfMS5jcmVhdGVEZWZhdWx0SHR0cENsaWVudDsgfSB9KTtcbnZhciBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4vaHR0cEhlYWRlcnMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIdHRwSGVhZGVyc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVyczsgfSB9KTtcbnZhciBwaXBlbGluZVJlcXVlc3RfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lUmVxdWVzdC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBpcGVsaW5lUmVxdWVzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGlwZWxpbmVSZXF1ZXN0X2pzXzEuY3JlYXRlUGlwZWxpbmVSZXF1ZXN0OyB9IH0pO1xudmFyIHJlc3RFcnJvcl9qc18xID0gcmVxdWlyZShcIi4vcmVzdEVycm9yLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVzdEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1Jlc3RFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzdEVycm9yX2pzXzEuaXNSZXN0RXJyb3I7IH0gfSk7XG52YXIgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWU7IH0gfSk7XG52YXIgZXhwb25lbnRpYWxSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZXhwb25lbnRpYWxSZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cG9uZW50aWFsUmV0cnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4cG9uZW50aWFsUmV0cnlQb2xpY3lfanNfMS5leHBvbmVudGlhbFJldHJ5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4cG9uZW50aWFsUmV0cnlQb2xpY3lfanNfMS5leHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZTsgfSB9KTtcbnZhciBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3NldENsaWVudFJlcXVlc3RJZFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldENsaWVudFJlcXVlc3RJZFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZTsgfSB9KTtcbnZhciBsb2dQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2xvZ1BvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZ1BvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9nUG9saWN5X2pzXzEubG9nUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9nUG9saWN5X2pzXzEubG9nUG9saWN5TmFtZTsgfSB9KTtcbnZhciBtdWx0aXBhcnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL211bHRpcGFydFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpcGFydFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbXVsdGlwYXJ0UG9saWN5X2pzXzEubXVsdGlwYXJ0UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwYXJ0UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbXVsdGlwYXJ0UG9saWN5X2pzXzEubXVsdGlwYXJ0UG9saWN5TmFtZTsgfSB9KTtcbnZhciBwcm94eVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcHJveHlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcm94eVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJveHlQb2xpY3lfanNfMS5wcm94eVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb3h5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJveHlQb2xpY3lfanNfMS5wcm94eVBvbGljeU5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXREZWZhdWx0UHJveHlTZXR0aW5nc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJveHlQb2xpY3lfanNfMS5nZXREZWZhdWx0UHJveHlTZXR0aW5nczsgfSB9KTtcbnZhciByZWRpcmVjdFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmVkaXJlY3RQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWRpcmVjdFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVkaXJlY3RQb2xpY3lfanNfMS5yZWRpcmVjdFBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZGlyZWN0UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVkaXJlY3RQb2xpY3lfanNfMS5yZWRpcmVjdFBvbGljeU5hbWU7IH0gfSk7XG52YXIgc3lzdGVtRXJyb3JSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvc3lzdGVtRXJyb3JSZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN5c3RlbUVycm9yUmV0cnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN5c3RlbUVycm9yUmV0cnlQb2xpY3lfanNfMS5zeXN0ZW1FcnJvclJldHJ5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3lzdGVtRXJyb3JSZXRyeVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN5c3RlbUVycm9yUmV0cnlQb2xpY3lfanNfMS5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZTsgfSB9KTtcbnZhciB0aHJvdHRsaW5nUmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Rocm90dGxpbmdSZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRocm90dGxpbmdSZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhyb3R0bGluZ1JldHJ5UG9saWN5X2pzXzEudGhyb3R0bGluZ1JldHJ5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhyb3R0bGluZ1JldHJ5UG9saWN5X2pzXzEudGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZTsgfSB9KTtcbnZhciByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmV0cnlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeTsgfSB9KTtcbnZhciB0cmFjaW5nUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy90cmFjaW5nUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhY2luZ1BvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhY2luZ1BvbGljeV9qc18xLnRyYWNpbmdQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjaW5nUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhY2luZ1BvbGljeV9qc18xLnRyYWNpbmdQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGRlZmF1bHRSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZGVmYXVsdFJldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFJldHJ5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZhdWx0UmV0cnlQb2xpY3lfanNfMS5kZWZhdWx0UmV0cnlQb2xpY3k7IH0gfSk7XG52YXIgdXNlckFnZW50UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy91c2VyQWdlbnRQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1c2VyQWdlbnRQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZXJBZ2VudFBvbGljeV9qc18xLnVzZXJBZ2VudFBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZXJBZ2VudFBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZXJBZ2VudFBvbGljeV9qc18xLnVzZXJBZ2VudFBvbGljeU5hbWU7IH0gfSk7XG52YXIgdGxzUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy90bHNQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0bHNQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRsc1BvbGljeV9qc18xLnRsc1BvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRsc1BvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRsc1BvbGljeV9qc18xLnRsc1BvbGljeU5hbWU7IH0gfSk7XG52YXIgZm9ybURhdGFQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2Zvcm1EYXRhUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9ybURhdGFQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvcm1EYXRhUG9saWN5X2pzXzEuZm9ybURhdGFQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JtRGF0YVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvcm1EYXRhUG9saWN5X2pzXzEuZm9ybURhdGFQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2JlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5X2pzXzEuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5X2pzXzEuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWU7IH0gfSk7XG52YXIgbmRKc29uUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9uZEpzb25Qb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuZEpzb25Qb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5kSnNvblBvbGljeV9qc18xLm5kSnNvblBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5kSnNvblBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5kSnNvblBvbGljeV9qc18xLm5kSnNvblBvbGljeU5hbWU7IH0gfSk7XG52YXIgYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2F1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5X2pzXzEuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5X2pzXzEuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGZpbGVfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwvZmlsZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbGVfanNfMS5jcmVhdGVGaWxlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlsZUZyb21TdHJlYW1cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbGVfanNfMS5jcmVhdGVGaWxlRnJvbVN0cmVhbTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXp1cmVLZXlDcmVkZW50aWFsID0gdm9pZCAwO1xuLyoqXG4gKiBBIHN0YXRpYy1rZXktYmFzZWQgY3JlZGVudGlhbCB0aGF0IHN1cHBvcnRzIHVwZGF0aW5nXG4gKiB0aGUgdW5kZXJseWluZyBrZXkgdmFsdWUuXG4gKi9cbmNsYXNzIEF6dXJlS2V5Q3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBrZXkgdG8gYmUgdXNlZCBpbiBhdXRoZW50aWNhdGlvblxuICAgICAqL1xuICAgIGdldCBrZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBBenVyZUtleUNyZWRlbnRpYWwgZm9yIHVzZVxuICAgICAqIHdpdGggYSBzZXJ2aWNlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUga2V5IHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGtleSkge1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUga2V5LlxuICAgICAqXG4gICAgICogVXBkYXRlcyB3aWxsIHRha2UgZWZmZWN0IHVwb24gdGhlIG5leHQgcmVxdWVzdCBhZnRlclxuICAgICAqIHVwZGF0aW5nIHRoZSBrZXkgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3S2V5IC0gVGhlIG5ldyBrZXkgdmFsdWUgdG8gYmUgdXNlZFxuICAgICAqL1xuICAgIHVwZGF0ZShuZXdLZXkpIHtcbiAgICAgICAgdGhpcy5fa2V5ID0gbmV3S2V5O1xuICAgIH1cbn1cbmV4cG9ydHMuQXp1cmVLZXlDcmVkZW50aWFsID0gQXp1cmVLZXlDcmVkZW50aWFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXp1cmVLZXlDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNLZXlDcmVkZW50aWFsID0gaXNLZXlDcmVkZW50aWFsO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbi8qKlxuICogVGVzdHMgYW4gb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGltcGxlbWVudHMgS2V5Q3JlZGVudGlhbC5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtIFRoZSBhc3N1bWVkIEtleUNyZWRlbnRpYWwgdG8gYmUgdGVzdGVkLlxuICovXG5mdW5jdGlvbiBpc0tleUNyZWRlbnRpYWwoY3JlZGVudGlhbCkge1xuICAgIHJldHVybiAoMCwgY29yZV91dGlsXzEuaXNPYmplY3RXaXRoUHJvcGVydGllcykoY3JlZGVudGlhbCwgW1wia2V5XCJdKSAmJiB0eXBlb2YgY3JlZGVudGlhbC5rZXkgPT09IFwic3RyaW5nXCI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1rZXlDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgPSB2b2lkIDA7XG5leHBvcnRzLmlzTmFtZWRLZXlDcmVkZW50aWFsID0gaXNOYW1lZEtleUNyZWRlbnRpYWw7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuLyoqXG4gKiBBIHN0YXRpYyBuYW1lL2tleS1iYXNlZCBjcmVkZW50aWFsIHRoYXQgc3VwcG9ydHMgdXBkYXRpbmdcbiAqIHRoZSB1bmRlcmx5aW5nIG5hbWUgYW5kIGtleSB2YWx1ZXMuXG4gKi9cbmNsYXNzIEF6dXJlTmFtZWRLZXlDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGtleSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqL1xuICAgIGdldCBrZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgbmFtZSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqL1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIEF6dXJlTmFtZWRLZXlDcmVkZW50aWFsIGZvciB1c2VcbiAgICAgKiB3aXRoIGEgc2VydmljZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBuYW1lIHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0ga2V5IC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGtleSB0byB1c2UgaW4gYXV0aGVudGljYXRpb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwga2V5KSB7XG4gICAgICAgIGlmICghbmFtZSB8fCAha2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibmFtZSBhbmQga2V5IG11c3QgYmUgbm9uLWVtcHR5IHN0cmluZ3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUga2V5LlxuICAgICAqXG4gICAgICogVXBkYXRlcyB3aWxsIHRha2UgZWZmZWN0IHVwb24gdGhlIG5leHQgcmVxdWVzdCBhZnRlclxuICAgICAqIHVwZGF0aW5nIHRoZSBrZXkgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3TmFtZSAtIFRoZSBuZXcgbmFtZSB2YWx1ZSB0byBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSBuZXdLZXkgLSBUaGUgbmV3IGtleSB2YWx1ZSB0byBiZSB1c2VkLlxuICAgICAqL1xuICAgIHVwZGF0ZShuZXdOYW1lLCBuZXdLZXkpIHtcbiAgICAgICAgaWYgKCFuZXdOYW1lIHx8ICFuZXdLZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJuZXdOYW1lIGFuZCBuZXdLZXkgbXVzdCBiZSBub24tZW1wdHkgc3RyaW5nc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9uYW1lID0gbmV3TmFtZTtcbiAgICAgICAgdGhpcy5fa2V5ID0gbmV3S2V5O1xuICAgIH1cbn1cbmV4cG9ydHMuQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgPSBBenVyZU5hbWVkS2V5Q3JlZGVudGlhbDtcbi8qKlxuICogVGVzdHMgYW4gb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGltcGxlbWVudHMgTmFtZWRLZXlDcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgTmFtZWRLZXlDcmVkZW50aWFsIHRvIGJlIHRlc3RlZC5cbiAqL1xuZnVuY3Rpb24gaXNOYW1lZEtleUNyZWRlbnRpYWwoY3JlZGVudGlhbCkge1xuICAgIHJldHVybiAoKDAsIGNvcmVfdXRpbF8xLmlzT2JqZWN0V2l0aFByb3BlcnRpZXMpKGNyZWRlbnRpYWwsIFtcIm5hbWVcIiwgXCJrZXlcIl0pICYmXG4gICAgICAgIHR5cGVvZiBjcmVkZW50aWFsLmtleSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICB0eXBlb2YgY3JlZGVudGlhbC5uYW1lID09PSBcInN0cmluZ1wiKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF6dXJlTmFtZWRLZXlDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXp1cmVTQVNDcmVkZW50aWFsID0gdm9pZCAwO1xuZXhwb3J0cy5pc1NBU0NyZWRlbnRpYWwgPSBpc1NBU0NyZWRlbnRpYWw7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuLyoqXG4gKiBBIHN0YXRpYy1zaWduYXR1cmUtYmFzZWQgY3JlZGVudGlhbCB0aGF0IHN1cHBvcnRzIHVwZGF0aW5nXG4gKiB0aGUgdW5kZXJseWluZyBzaWduYXR1cmUgdmFsdWUuXG4gKi9cbmNsYXNzIEF6dXJlU0FTQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uXG4gICAgICovXG4gICAgZ2V0IHNpZ25hdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIEF6dXJlU0FTQ3JlZGVudGlhbCBmb3IgdXNlXG4gICAgICogd2l0aCBhIHNlcnZpY2UgY2xpZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNpZ25hdHVyZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB0byB1c2UgaW4gYXV0aGVudGljYXRpb25cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihzaWduYXR1cmUpIHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgc2lnbmF0dXJlLlxuICAgICAqXG4gICAgICogVXBkYXRlcyB3aWxsIHRha2UgZWZmZWN0IHVwb24gdGhlIG5leHQgcmVxdWVzdCBhZnRlclxuICAgICAqIHVwZGF0aW5nIHRoZSBzaWduYXR1cmUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3U2lnbmF0dXJlIC0gVGhlIG5ldyBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB2YWx1ZSB0byBiZSB1c2VkXG4gICAgICovXG4gICAgdXBkYXRlKG5ld1NpZ25hdHVyZSkge1xuICAgICAgICBpZiAoIW5ld1NpZ25hdHVyZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2hhcmVkIGFjY2VzcyBzaWduYXR1cmUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlID0gbmV3U2lnbmF0dXJlO1xuICAgIH1cbn1cbmV4cG9ydHMuQXp1cmVTQVNDcmVkZW50aWFsID0gQXp1cmVTQVNDcmVkZW50aWFsO1xuLyoqXG4gKiBUZXN0cyBhbiBvYmplY3QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaW1wbGVtZW50cyBTQVNDcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgU0FTQ3JlZGVudGlhbCB0byBiZSB0ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzU0FTQ3JlZGVudGlhbChjcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuICgoMCwgY29yZV91dGlsXzEuaXNPYmplY3RXaXRoUHJvcGVydGllcykoY3JlZGVudGlhbCwgW1wic2lnbmF0dXJlXCJdKSAmJiB0eXBlb2YgY3JlZGVudGlhbC5zaWduYXR1cmUgPT09IFwic3RyaW5nXCIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXp1cmVTQVNDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNCZWFyZXJUb2tlbiA9IGlzQmVhcmVyVG9rZW47XG5leHBvcnRzLmlzUG9wVG9rZW4gPSBpc1BvcFRva2VuO1xuZXhwb3J0cy5pc1Rva2VuQ3JlZGVudGlhbCA9IGlzVG9rZW5DcmVkZW50aWFsO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBhY2Nlc3NUb2tlbiAtIEFjY2VzcyB0b2tlblxuICogQHJldHVybnMgV2hldGhlciBhIHRva2VuIGlzIGJlYXJlciB0eXBlIG9yIG5vdFxuICovXG5mdW5jdGlvbiBpc0JlYXJlclRva2VuKGFjY2Vzc1Rva2VuKSB7XG4gICAgcmV0dXJuICFhY2Nlc3NUb2tlbi50b2tlblR5cGUgfHwgYWNjZXNzVG9rZW4udG9rZW5UeXBlID09PSBcIkJlYXJlclwiO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBhY2Nlc3NUb2tlbiAtIEFjY2VzcyB0b2tlblxuICogQHJldHVybnMgV2hldGhlciBhIHRva2VuIGlzIFBvcCB0b2tlbiBvciBub3RcbiAqL1xuZnVuY3Rpb24gaXNQb3BUb2tlbihhY2Nlc3NUb2tlbikge1xuICAgIHJldHVybiBhY2Nlc3NUb2tlbi50b2tlblR5cGUgPT09IFwicG9wXCI7XG59XG4vKipcbiAqIFRlc3RzIGFuIG9iamVjdCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpbXBsZW1lbnRzIFRva2VuQ3JlZGVudGlhbC5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtIFRoZSBhc3N1bWVkIFRva2VuQ3JlZGVudGlhbCB0byBiZSB0ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWwpIHtcbiAgICAvLyBDaGVjayBmb3IgYW4gb2JqZWN0IHdpdGggYSAnZ2V0VG9rZW4nIGZ1bmN0aW9uIGFuZCBwb3NzaWJseSB3aXRoXG4gICAgLy8gYSAnc2lnblJlcXVlc3QnIGZ1bmN0aW9uLiAgV2UgZG8gdGhpcyBjaGVjayB0byBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIGEgU2VydmljZUNsaWVudENyZWRlbnRpYWxzIGltcGxlbWVudG9yIChsaWtlIFRva2VuQ2xpZW50Q3JlZGVudGlhbHNcbiAgICAvLyBpbiBtcy1yZXN0LW5vZGVhdXRoKSBkb2Vzbid0IGdldCBtaXN0YWtlbiBmb3IgYSBUb2tlbkNyZWRlbnRpYWwgaWZcbiAgICAvLyBpdCBkb2Vzbid0IGFjdHVhbGx5IGltcGxlbWVudCBUb2tlbkNyZWRlbnRpYWwgYWxzby5cbiAgICBjb25zdCBjYXN0Q3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7XG4gICAgcmV0dXJuIChjYXN0Q3JlZGVudGlhbCAmJlxuICAgICAgICB0eXBlb2YgY2FzdENyZWRlbnRpYWwuZ2V0VG9rZW4gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAoY2FzdENyZWRlbnRpYWwuc2lnblJlcXVlc3QgPT09IHVuZGVmaW5lZCB8fCBjYXN0Q3JlZGVudGlhbC5nZXRUb2tlbi5sZW5ndGggPiAwKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b2tlbkNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNUb2tlbkNyZWRlbnRpYWwgPSBleHBvcnRzLmlzU0FTQ3JlZGVudGlhbCA9IGV4cG9ydHMuQXp1cmVTQVNDcmVkZW50aWFsID0gZXhwb3J0cy5pc05hbWVkS2V5Q3JlZGVudGlhbCA9IGV4cG9ydHMuQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgPSBleHBvcnRzLmlzS2V5Q3JlZGVudGlhbCA9IGV4cG9ydHMuQXp1cmVLZXlDcmVkZW50aWFsID0gdm9pZCAwO1xudmFyIGF6dXJlS2V5Q3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vYXp1cmVLZXlDcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXp1cmVLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZUtleUNyZWRlbnRpYWxfanNfMS5BenVyZUtleUNyZWRlbnRpYWw7IH0gfSk7XG52YXIga2V5Q3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4va2V5Q3JlZGVudGlhbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzS2V5Q3JlZGVudGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ga2V5Q3JlZGVudGlhbF9qc18xLmlzS2V5Q3JlZGVudGlhbDsgfSB9KTtcbnZhciBhenVyZU5hbWVkS2V5Q3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vYXp1cmVOYW1lZEtleUNyZWRlbnRpYWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBenVyZU5hbWVkS2V5Q3JlZGVudGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXp1cmVOYW1lZEtleUNyZWRlbnRpYWxfanNfMS5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTmFtZWRLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZU5hbWVkS2V5Q3JlZGVudGlhbF9qc18xLmlzTmFtZWRLZXlDcmVkZW50aWFsOyB9IH0pO1xudmFyIGF6dXJlU0FTQ3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vYXp1cmVTQVNDcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXp1cmVTQVNDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZVNBU0NyZWRlbnRpYWxfanNfMS5BenVyZVNBU0NyZWRlbnRpYWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1NBU0NyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlU0FTQ3JlZGVudGlhbF9qc18xLmlzU0FTQ3JlZGVudGlhbDsgfSB9KTtcbnZhciB0b2tlbkNyZWRlbnRpYWxfanNfMSA9IHJlcXVpcmUoXCIuL3Rva2VuQ3JlZGVudGlhbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVG9rZW5DcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0b2tlbkNyZWRlbnRpYWxfanNfMS5pc1Rva2VuQ3JlZGVudGlhbDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGlwZWxpbmVDb250YWluc0Rpc2FibGVLZWVwQWxpdmVQb2xpY3kgPSBleHBvcnRzLmNyZWF0ZURpc2FibGVLZWVwQWxpdmVQb2xpY3kgPSBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5kaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZSA9IFwiRGlzYWJsZUtlZXBBbGl2ZVBvbGljeVwiO1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICByZXF1ZXN0LmRpc2FibGVLZWVwQWxpdmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IGNyZWF0ZURpc2FibGVLZWVwQWxpdmVQb2xpY3k7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBwaXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeShwaXBlbGluZSkge1xuICAgIHJldHVybiBwaXBlbGluZS5nZXRPcmRlcmVkUG9saWNpZXMoKS5zb21lKChwb2xpY3kpID0+IHBvbGljeS5uYW1lID09PSBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lKTtcbn1cbmV4cG9ydHMucGlwZWxpbmVDb250YWluc0Rpc2FibGVLZWVwQWxpdmVQb2xpY3kgPSBwaXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc2FibGVLZWVwQWxpdmVQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWNvZGVTdHJpbmdUb1N0cmluZyA9IGV4cG9ydHMuZGVjb2RlU3RyaW5nID0gZXhwb3J0cy5lbmNvZGVCeXRlQXJyYXkgPSBleHBvcnRzLmVuY29kZVN0cmluZyA9IHZvaWQgMDtcbi8qKlxuICogRW5jb2RlcyBhIHN0cmluZyBpbiBiYXNlNjQgZm9ybWF0LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHN0cmluZyB0byBlbmNvZGVcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBlbmNvZGVTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufVxuZXhwb3J0cy5lbmNvZGVTdHJpbmcgPSBlbmNvZGVTdHJpbmc7XG4vKipcbiAqIEVuY29kZXMgYSBieXRlIGFycmF5IGluIGJhc2U2NCBmb3JtYXQuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgVWludDhBcmF5IHRvIGVuY29kZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGVuY29kZUJ5dGVBcnJheSh2YWx1ZSkge1xuICAgIGNvbnN0IGJ1ZmZlclZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCdWZmZXIgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlLmJ1ZmZlcik7XG4gICAgcmV0dXJuIGJ1ZmZlclZhbHVlLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufVxuZXhwb3J0cy5lbmNvZGVCeXRlQXJyYXkgPSBlbmNvZGVCeXRlQXJyYXk7XG4vKipcbiAqIERlY29kZXMgYSBiYXNlNjQgc3RyaW5nIGludG8gYSBieXRlIGFycmF5LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIGJhc2U2NCBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlLCBcImJhc2U2NFwiKTtcbn1cbmV4cG9ydHMuZGVjb2RlU3RyaW5nID0gZGVjb2RlU3RyaW5nO1xuLyoqXG4gKiBEZWNvZGVzIGEgYmFzZTY0IHN0cmluZyBpbnRvIGEgc3RyaW5nLlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIGJhc2U2NCBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nVG9TdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG59XG5leHBvcnRzLmRlY29kZVN0cmluZ1RvU3RyaW5nID0gZGVjb2RlU3RyaW5nVG9TdHJpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYXNlNjQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IGV4cG9ydHMuWE1MX0FUVFJLRVkgPSB2b2lkIDA7XG4vKipcbiAqIERlZmF1bHQga2V5IHVzZWQgdG8gYWNjZXNzIHRoZSBYTUwgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0cy5YTUxfQVRUUktFWSA9IFwiJFwiO1xuLyoqXG4gKiBEZWZhdWx0IGtleSB1c2VkIHRvIGFjY2VzcyB0aGUgWE1MIHZhbHVlIGNvbnRlbnQuXG4gKi9cbmV4cG9ydHMuWE1MX0NIQVJLRVkgPSBcIl9cIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyZmFjZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mbGF0dGVuUmVzcG9uc2UgPSBleHBvcnRzLmlzVmFsaWRVdWlkID0gZXhwb3J0cy5pc0R1cmF0aW9uID0gZXhwb3J0cy5pc1ByaW1pdGl2ZUJvZHkgPSB2b2lkIDA7XG4vKipcbiAqIEEgdHlwZSBndWFyZCBmb3IgYSBwcmltaXRpdmUgcmVzcG9uc2UgYm9keS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmVCb2R5KHZhbHVlLCBtYXBwZXJUeXBlTmFtZSkge1xuICAgIHJldHVybiAobWFwcGVyVHlwZU5hbWUgIT09IFwiQ29tcG9zaXRlXCIgJiZcbiAgICAgICAgbWFwcGVyVHlwZU5hbWUgIT09IFwiRGljdGlvbmFyeVwiICYmXG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIiB8fFxuICAgICAgICAgICAgKG1hcHBlclR5cGVOYW1lID09PSBudWxsIHx8IG1hcHBlclR5cGVOYW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXBwZXJUeXBlTmFtZS5tYXRjaCgvXihEYXRlfERhdGVUaW1lfERhdGVUaW1lUmZjMTEyM3xVbml4VGltZXxCeXRlQXJyYXl8QmFzZTY0VXJsKSQvaSkpICE9PVxuICAgICAgICAgICAgICAgIG51bGwgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsKSk7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlQm9keSA9IGlzUHJpbWl0aXZlQm9keTtcbmNvbnN0IHZhbGlkYXRlSVNPRHVyYXRpb24gPSAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBpbiBJU08gODYwMSBmb3JtYXQuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgdmFsaWRhdGVkIGZvciBJU08gODYwMSBkdXJhdGlvbiBmb3JtYXQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNEdXJhdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWxpZGF0ZUlTT0R1cmF0aW9uLnRlc3QodmFsdWUpO1xufVxuZXhwb3J0cy5pc0R1cmF0aW9uID0gaXNEdXJhdGlvbjtcbmNvbnN0IHZhbGlkVXVpZFJlZ2V4ID0gL15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kL2k7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgdXVpZCBpcyB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gdXVpZCAtIFRoZSB1dWlkIHRoYXQgbmVlZHMgdG8gYmUgdmFsaWRhdGVkLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkVXVpZCh1dWlkKSB7XG4gICAgcmV0dXJuIHZhbGlkVXVpZFJlZ2V4LnRlc3QodXVpZCk7XG59XG5leHBvcnRzLmlzVmFsaWRVdWlkID0gaXNWYWxpZFV1aWQ7XG4vKipcbiAqIE1hcHMgdGhlIHJlc3BvbnNlIGFzIGZvbGxvd3M6XG4gKiAtIHdyYXBzIHRoZSByZXNwb25zZSBib2R5IGlmIG5lZWRlZCAodHlwaWNhbGx5IGlmIGl0cyB0eXBlIGlzIHByaW1pdGl2ZSkuXG4gKiAtIHJldHVybnMgbnVsbCBpZiB0aGUgY29tYmluYXRpb24gb2YgdGhlIGhlYWRlcnMgYW5kIHRoZSBib2R5IGlzIGVtcHR5LlxuICogLSBvdGhlcndpc2UsIHJldHVybnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBoZWFkZXJzIGFuZCB0aGUgYm9keS5cbiAqXG4gKiBAcGFyYW0gcmVzcG9uc2VPYmplY3QgLSBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXJzZWQgcmVzcG9uc2VcbiAqIEByZXR1cm5zIHRoZSByZXNwb25zZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHVzZXIgd2hpY2ggY2FuIGJlIG51bGwgYW5kL29yIHdyYXBwZWRcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaGFuZGxlTnVsbGFibGVSZXNwb25zZUFuZFdyYXBwYWJsZUJvZHkocmVzcG9uc2VPYmplY3QpIHtcbiAgICBjb25zdCBjb21iaW5lZEhlYWRlcnNBbmRCb2R5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZU9iamVjdC5oZWFkZXJzKSwgcmVzcG9uc2VPYmplY3QuYm9keSk7XG4gICAgaWYgKHJlc3BvbnNlT2JqZWN0Lmhhc051bGxhYmxlVHlwZSAmJlxuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjb21iaW5lZEhlYWRlcnNBbmRCb2R5KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0LnNob3VsZFdyYXBCb2R5ID8geyBib2R5OiBudWxsIH0gOiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0LnNob3VsZFdyYXBCb2R5XG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2VPYmplY3QuaGVhZGVycyksIHsgYm9keTogcmVzcG9uc2VPYmplY3QuYm9keSB9KSA6IGNvbWJpbmVkSGVhZGVyc0FuZEJvZHk7XG4gICAgfVxufVxuLyoqXG4gKiBUYWtlIGEgYEZ1bGxPcGVyYXRpb25SZXNwb25zZWAgYW5kIHR1cm4gaXQgaW50byBhIGZsYXRcbiAqIHJlc3BvbnNlIG9iamVjdCB0byBoYW5kIGJhY2sgdG8gdGhlIGNvbnN1bWVyLlxuICogQHBhcmFtIGZ1bGxSZXNwb25zZSAtIFRoZSBwcm9jZXNzZWQgcmVzcG9uc2UgZnJvbSB0aGUgb3BlcmF0aW9uIHJlcXVlc3RcbiAqIEBwYXJhbSByZXNwb25zZVNwZWMgLSBUaGUgcmVzcG9uc2UgbWFwIGZyb20gdGhlIE9wZXJhdGlvblNwZWNcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblJlc3BvbnNlKGZ1bGxSZXNwb25zZSwgcmVzcG9uc2VTcGVjKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gZnVsbFJlc3BvbnNlLnBhcnNlZEhlYWRlcnM7XG4gICAgLy8gaGVhZCBtZXRob2RzIG5ldmVyIGhhdmUgYSBib2R5LCBidXQgd2UgcmV0dXJuIGEgYm9vbGVhbiBzZXQgdG8gYm9keSBwcm9wZXJ0eVxuICAgIC8vIHRvIGluZGljYXRlIHByZXNlbmNlL2Fic2VuY2Ugb2YgdGhlIHJlc291cmNlXG4gICAgaWYgKGZ1bGxSZXNwb25zZS5yZXF1ZXN0Lm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkSGVhZGVycyksIHsgYm9keTogZnVsbFJlc3BvbnNlLnBhcnNlZEJvZHkgfSk7XG4gICAgfVxuICAgIGNvbnN0IGJvZHlNYXBwZXIgPSByZXNwb25zZVNwZWMgJiYgcmVzcG9uc2VTcGVjLmJvZHlNYXBwZXI7XG4gICAgY29uc3QgaXNOdWxsYWJsZSA9IEJvb2xlYW4oYm9keU1hcHBlciA9PT0gbnVsbCB8fCBib2R5TWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBib2R5TWFwcGVyLm51bGxhYmxlKTtcbiAgICBjb25zdCBleHBlY3RlZEJvZHlUeXBlTmFtZSA9IGJvZHlNYXBwZXIgPT09IG51bGwgfHwgYm9keU1hcHBlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogYm9keU1hcHBlci50eXBlLm5hbWU7XG4gICAgLyoqIElmIHRoZSBib2R5IGlzIGFza2VkIGZvciwgd2UgbG9vayBhdCB0aGUgZXhwZWN0ZWQgYm9keSB0eXBlIHRvIGhhbmRsZSBpdCAqL1xuICAgIGlmIChleHBlY3RlZEJvZHlUeXBlTmFtZSA9PT0gXCJTdHJlYW1cIikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRIZWFkZXJzKSwgeyBibG9iQm9keTogZnVsbFJlc3BvbnNlLmJsb2JCb2R5LCByZWFkYWJsZVN0cmVhbUJvZHk6IGZ1bGxSZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHkgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsUHJvcGVydGllcyA9IChleHBlY3RlZEJvZHlUeXBlTmFtZSA9PT0gXCJDb21wb3NpdGVcIiAmJlxuICAgICAgICBib2R5TWFwcGVyLnR5cGUubW9kZWxQcm9wZXJ0aWVzKSB8fFxuICAgICAgICB7fTtcbiAgICBjb25zdCBpc1BhZ2VhYmxlUmVzcG9uc2UgPSBPYmplY3Qua2V5cyhtb2RlbFByb3BlcnRpZXMpLnNvbWUoKGspID0+IG1vZGVsUHJvcGVydGllc1trXS5zZXJpYWxpemVkTmFtZSA9PT0gXCJcIik7XG4gICAgaWYgKGV4cGVjdGVkQm9keVR5cGVOYW1lID09PSBcIlNlcXVlbmNlXCIgfHwgaXNQYWdlYWJsZVJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGFycmF5UmVzcG9uc2UgPSAoX2EgPSBmdWxsUmVzcG9uc2UucGFyc2VkQm9keSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsUHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIGlmIChtb2RlbFByb3BlcnRpZXNba2V5XS5zZXJpYWxpemVkTmFtZSkge1xuICAgICAgICAgICAgICAgIGFycmF5UmVzcG9uc2Vba2V5XSA9IChfYiA9IGZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Jba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkSGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyc2VkSGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBhcnJheVJlc3BvbnNlW2tleV0gPSBwYXJzZWRIZWFkZXJzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTnVsbGFibGUgJiZcbiAgICAgICAgICAgICFmdWxsUmVzcG9uc2UucGFyc2VkQm9keSAmJlxuICAgICAgICAgICAgIXBhcnNlZEhlYWRlcnMgJiZcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1vZGVsUHJvcGVydGllcykubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogYXJyYXlSZXNwb25zZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZU51bGxhYmxlUmVzcG9uc2VBbmRXcmFwcGFibGVCb2R5KHtcbiAgICAgICAgYm9keTogZnVsbFJlc3BvbnNlLnBhcnNlZEJvZHksXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlZEhlYWRlcnMsXG4gICAgICAgIGhhc051bGxhYmxlVHlwZTogaXNOdWxsYWJsZSxcbiAgICAgICAgc2hvdWxkV3JhcEJvZHk6IGlzUHJpbWl0aXZlQm9keShmdWxsUmVzcG9uc2UucGFyc2VkQm9keSwgZXhwZWN0ZWRCb2R5VHlwZU5hbWUpLFxuICAgIH0pO1xufVxuZXhwb3J0cy5mbGF0dGVuUmVzcG9uc2UgPSBmbGF0dGVuUmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1hcHBlclR5cGVOYW1lcyA9IGV4cG9ydHMuY3JlYXRlU2VyaWFsaXplciA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBiYXNlNjQgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9iYXNlNjQuanNcIikpO1xuY29uc3QgaW50ZXJmYWNlc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlcy5qc1wiKTtcbmNvbnN0IHV0aWxzX2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNsYXNzIFNlcmlhbGl6ZXJJbXBsIHtcbiAgICBjb25zdHJ1Y3Rvcihtb2RlbE1hcHBlcnMgPSB7fSwgaXNYTUwgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1vZGVsTWFwcGVycyA9IG1vZGVsTWFwcGVycztcbiAgICAgICAgdGhpcy5pc1hNTCA9IGlzWE1MO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBSZW1vdmluZyB0aGUgY29uc3RyYWludHMgdmFsaWRhdGlvbiBvbiBjbGllbnQgc2lkZS5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZUNvbnN0cmFpbnRzKG1hcHBlciwgdmFsdWUsIG9iamVjdE5hbWUpIHtcbiAgICAgICAgY29uc3QgZmFpbFZhbGlkYXRpb24gPSAoY29uc3RyYWludE5hbWUsIGNvbnN0cmFpbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcIiR7b2JqZWN0TmFtZX1cIiB3aXRoIHZhbHVlIFwiJHt2YWx1ZX1cIiBzaG91bGQgc2F0aXNmeSB0aGUgY29uc3RyYWludCBcIiR7Y29uc3RyYWludE5hbWV9XCI6ICR7Y29uc3RyYWludFZhbHVlfS5gKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG1hcHBlci5jb25zdHJhaW50cyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB7IEV4Y2x1c2l2ZU1heGltdW0sIEV4Y2x1c2l2ZU1pbmltdW0sIEluY2x1c2l2ZU1heGltdW0sIEluY2x1c2l2ZU1pbmltdW0sIE1heEl0ZW1zLCBNYXhMZW5ndGgsIE1pbkl0ZW1zLCBNaW5MZW5ndGgsIE11bHRpcGxlT2YsIFBhdHRlcm4sIFVuaXF1ZUl0ZW1zLCB9ID0gbWFwcGVyLmNvbnN0cmFpbnRzO1xuICAgICAgICAgICAgaWYgKEV4Y2x1c2l2ZU1heGltdW0gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+PSBFeGNsdXNpdmVNYXhpbXVtKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJFeGNsdXNpdmVNYXhpbXVtXCIsIEV4Y2x1c2l2ZU1heGltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEV4Y2x1c2l2ZU1pbmltdW0gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA8PSBFeGNsdXNpdmVNaW5pbXVtKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJFeGNsdXNpdmVNaW5pbXVtXCIsIEV4Y2x1c2l2ZU1pbmltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEluY2x1c2l2ZU1heGltdW0gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+IEluY2x1c2l2ZU1heGltdW0pIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIkluY2x1c2l2ZU1heGltdW1cIiwgSW5jbHVzaXZlTWF4aW11bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoSW5jbHVzaXZlTWluaW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDwgSW5jbHVzaXZlTWluaW11bSkge1xuICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiSW5jbHVzaXZlTWluaW11bVwiLCBJbmNsdXNpdmVNaW5pbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXhJdGVtcyAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA+IE1heEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNYXhJdGVtc1wiLCBNYXhJdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF4TGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gTWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNYXhMZW5ndGhcIiwgTWF4TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNaW5JdGVtcyAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA8IE1pbkl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNaW5JdGVtc1wiLCBNaW5JdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWluTGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoIDwgTWluTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNaW5MZW5ndGhcIiwgTWluTGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNdWx0aXBsZU9mICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgJSBNdWx0aXBsZU9mICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNdWx0aXBsZU9mXCIsIE11bHRpcGxlT2YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdHlwZW9mIFBhdHRlcm4gPT09IFwic3RyaW5nXCIgPyBuZXcgUmVnRXhwKFBhdHRlcm4pIDogUGF0dGVybjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLm1hdGNoKHBhdHRlcm4pID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiUGF0dGVyblwiLCBQYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoVW5pcXVlSXRlbXMgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5zb21lKChpdGVtLCBpLCBhcikgPT4gYXIuaW5kZXhPZihpdGVtKSAhPT0gaSkpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIlVuaXF1ZUl0ZW1zXCIsIFVuaXF1ZUl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgdGhlIGdpdmVuIG9iamVjdCBiYXNlZCBvbiBpdHMgbWV0YWRhdGEgZGVmaW5lZCBpbiB0aGUgbWFwcGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFwcGVyIC0gVGhlIG1hcHBlciB3aGljaCBkZWZpbmVzIHRoZSBtZXRhZGF0YSBvZiB0aGUgc2VyaWFsaXphYmxlIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCAtIEEgdmFsaWQgSmF2YXNjcmlwdCBvYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdE5hbWUgLSBOYW1lIG9mIHRoZSBzZXJpYWxpemVkIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gc2VyaWFsaXphdGlvblxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2YWxpZCBzZXJpYWxpemVkIEphdmFzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgc2VyaWFsaXplKG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBvcHRpb25zID0geyB4bWw6IHt9IH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0ge1xuICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgcm9vdE5hbWU6IChfYSA9IG9wdGlvbnMueG1sLnJvb3ROYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2IgPSBvcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgeG1sQ2hhcktleTogKF9jID0gb3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgbWFwcGVyVHlwZSA9IG1hcHBlci50eXBlLm5hbWU7XG4gICAgICAgIGlmICghb2JqZWN0TmFtZSkge1xuICAgICAgICAgICAgb2JqZWN0TmFtZSA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXlNlcXVlbmNlJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZXIuaXNDb25zdGFudCkge1xuICAgICAgICAgICAgb2JqZWN0ID0gbWFwcGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIHRhYmxlIG9mIGFsbG93ZWQgdmFsdWVzIHNob3VsZCBoZWxwIGV4cGxhaW5cbiAgICAgICAgLy8gdGhlIG1hcHBlci5yZXF1aXJlZCBhbmQgbWFwcGVyLm51bGxhYmxlIHByb3BlcnRpZXMuXG4gICAgICAgIC8vIFggbWVhbnMgXCJuZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsIGFyZSBhbGxvd2VkXCIuXG4gICAgICAgIC8vICAgICAgICAgICB8fCByZXF1aXJlZFxuICAgICAgICAvLyAgICAgICAgICAgfHwgdHJ1ZSAgICAgIHwgZmFsc2VcbiAgICAgICAgLy8gIG51bGxhYmxlIHx8ID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vICAgICAgdHJ1ZSB8fCBudWxsICAgICAgfCB1bmRlZmluZWQvbnVsbFxuICAgICAgICAvLyAgICAgZmFsc2UgfHwgWCAgICAgICAgIHwgdW5kZWZpbmVkXG4gICAgICAgIC8vIHVuZGVmaW5lZCB8fCBYICAgICAgICAgfCB1bmRlZmluZWQvbnVsbFxuICAgICAgICBjb25zdCB7IHJlcXVpcmVkLCBudWxsYWJsZSB9ID0gbWFwcGVyO1xuICAgICAgICBpZiAocmVxdWlyZWQgJiYgbnVsbGFibGUgJiYgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBjYW5ub3QgYmUgdW5kZWZpbmVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1aXJlZCAmJiAhbnVsbGFibGUgJiYgKG9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IG9iamVjdCA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXF1aXJlZCAmJiBudWxsYWJsZSA9PT0gZmFsc2UgJiYgb2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gY2Fubm90IGJlIG51bGwuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IG9iamVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IG9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eYW55JC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBvYmplY3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eKE51bWJlcnxTdHJpbmd8Qm9vbGVhbnxPYmplY3R8U3RyZWFtfFV1aWQpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVCYXNpY1R5cGVzKG1hcHBlclR5cGUsIG9iamVjdE5hbWUsIG9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eRW51bSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnVtTWFwcGVyID0gbWFwcGVyO1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVFbnVtVHlwZShvYmplY3ROYW1lLCBlbnVtTWFwcGVyLnR5cGUuYWxsb3dlZFZhbHVlcywgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL14oRGF0ZXxEYXRlVGltZXxUaW1lU3BhbnxEYXRlVGltZVJmYzExMjN8VW5peFRpbWUpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVEYXRlVHlwZXMobWFwcGVyVHlwZSwgb2JqZWN0LCBvYmplY3ROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CeXRlQXJyYXkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUJ5dGVBcnJheVR5cGUob2JqZWN0TmFtZSwgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CYXNlNjRVcmwkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUJhc2U2NFVybFR5cGUob2JqZWN0TmFtZSwgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15TZXF1ZW5jZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplU2VxdWVuY2VUeXBlKHRoaXMsIG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBCb29sZWFuKHRoaXMuaXNYTUwpLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eRGljdGlvbmFyeSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplRGljdGlvbmFyeVR5cGUodGhpcywgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIEJvb2xlYW4odGhpcy5pc1hNTCksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15Db21wb3NpdGUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUNvbXBvc2l0ZVR5cGUodGhpcywgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIEJvb2xlYW4odGhpcy5pc1hNTCksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgdGhlIGdpdmVuIG9iamVjdCBiYXNlZCBvbiBpdHMgbWV0YWRhdGEgZGVmaW5lZCBpbiB0aGUgbWFwcGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFwcGVyIC0gVGhlIG1hcHBlciB3aGljaCBkZWZpbmVzIHRoZSBtZXRhZGF0YSBvZiB0aGUgc2VyaWFsaXphYmxlIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3BvbnNlQm9keSAtIEEgdmFsaWQgSmF2YXNjcmlwdCBlbnRpdHkgdG8gYmUgZGVzZXJpYWxpemVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0TmFtZSAtIE5hbWUgb2YgdGhlIGRlc2VyaWFsaXplZCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gQ29udHJvbHMgYmVoYXZpb3Igb2YgWE1MIHBhcnNlciBhbmQgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgdmFsaWQgZGVzZXJpYWxpemVkIEphdmFzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgZGVzZXJpYWxpemUobWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIG9wdGlvbnMgPSB7IHhtbDoge30gfSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0ge1xuICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgcm9vdE5hbWU6IChfYSA9IG9wdGlvbnMueG1sLnJvb3ROYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2IgPSBvcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgeG1sQ2hhcktleTogKF9jID0gb3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25Qcm9wZXJ0aWVzOiAoX2QgPSBvcHRpb25zLmlnbm9yZVVua25vd25Qcm9wZXJ0aWVzKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlc3BvbnNlQm9keSA9PT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlQm9keSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNYTUwgJiYgbWFwcGVyLnR5cGUubmFtZSA9PT0gXCJTZXF1ZW5jZVwiICYmICFtYXBwZXIueG1sSXNXcmFwcGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gRWRnZSBjYXNlIGZvciBlbXB0eSBYTUwgbm9uLXdyYXBwZWQgbGlzdHMuIHhtbDJqcyBjYW4ndCBkaXN0aW5ndWlzaFxuICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhlIGxpc3QgYmVpbmcgZW1wdHkgdmVyc3VzIGJlaW5nIG1pc3NpbmcsXG4gICAgICAgICAgICAgICAgLy8gc28gbGV0J3MgZG8gdGhlIG1vcmUgdXNlci1mcmllbmRseSB0aGluZyBhbmQgcmV0dXJuIGFuIGVtcHR5IGxpc3QuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzcGVjaWZpY2FsbHkgY2hlY2sgZm9yIHVuZGVmaW5lZCBhcyBkZWZhdWx0IHZhbHVlIGNhbiBiZSBhIGZhbHNleSB2YWx1ZSBgMCwgXCJcIiwgZmFsc2UsIG51bGxgXG4gICAgICAgICAgICBpZiAobWFwcGVyLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gbWFwcGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZUJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBheWxvYWQ7XG4gICAgICAgIGNvbnN0IG1hcHBlclR5cGUgPSBtYXBwZXIudHlwZS5uYW1lO1xuICAgICAgICBpZiAoIW9iamVjdE5hbWUpIHtcbiAgICAgICAgICAgIG9iamVjdE5hbWUgPSBtYXBwZXIuc2VyaWFsaXplZE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcHBlclR5cGUubWF0Y2goL15Db21wb3NpdGUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gZGVzZXJpYWxpemVDb21wb3NpdGVUeXBlKHRoaXMsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1hNTCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXJLZXkgPSB1cGRhdGVkT3B0aW9ucy54bWwueG1sQ2hhcktleTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgbWFwcGVyIHNwZWNpZmllcyB0aGlzIGFzIGEgbm9uLWNvbXBvc2l0ZSB0eXBlIHZhbHVlIGJ1dCB0aGUgcmVzcG9uc2VCb2R5IGNvbnRhaW5zXG4gICAgICAgICAgICAgICAgICogYm90aCBoZWFkZXIgKFwiJFwiIGkuZS4sIFhNTF9BVFRSS0VZKSBhbmQgYm9keSAoXCIjXCIgaS5lLiwgWE1MX0NIQVJLRVkpIHByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgICogdGhlbiBqdXN0IHJlZHVjZSB0aGUgcmVzcG9uc2VCb2R5IHZhbHVlIHRvIHRoZSBib2R5IChcIiNcIiBpLmUuLCBYTUxfQ0hBUktFWSkgcHJvcGVydHkuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldICE9PSB1bmRlZmluZWQgJiYgcmVzcG9uc2VCb2R5W3htbENoYXJLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gcmVzcG9uc2VCb2R5W3htbENoYXJLZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eTnVtYmVyJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBwYXJzZUZsb2F0KHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBheWxvYWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkJvb2xlYW4kL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlQm9keSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXihTdHJpbmd8RW51bXxPYmplY3R8U3RyZWFtfFV1aWR8VGltZVNwYW58YW55KSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gcmVzcG9uc2VCb2R5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXihEYXRlfERhdGVUaW1lfERhdGVUaW1lUmZjMTEyMykkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IG5ldyBEYXRlKHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eVW5peFRpbWUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHVuaXhUaW1lVG9EYXRlKHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eQnl0ZUFycmF5JC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBiYXNlNjQuZGVjb2RlU3RyaW5nKHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eQmFzZTY0VXJsJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBiYXNlNjRVcmxUb0J5dGVBcnJheShyZXNwb25zZUJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXlNlcXVlbmNlJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBkZXNlcmlhbGl6ZVNlcXVlbmNlVHlwZSh0aGlzLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkRpY3Rpb25hcnkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGRlc2VyaWFsaXplRGljdGlvbmFyeVR5cGUodGhpcywgbWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVyLmlzQ29uc3RhbnQpIHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBtYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cbn1cbi8qKlxuICogTWV0aG9kIHRoYXQgY3JlYXRlcyBhbmQgcmV0dXJucyBhIFNlcmlhbGl6ZXIuXG4gKiBAcGFyYW0gbW9kZWxNYXBwZXJzIC0gS25vd24gbW9kZWxzIHRvIG1hcFxuICogQHBhcmFtIGlzWE1MIC0gSWYgWE1MIHNob3VsZCBiZSBzdXBwb3J0ZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXplcihtb2RlbE1hcHBlcnMgPSB7fSwgaXNYTUwgPSBmYWxzZSkge1xuICAgIHJldHVybiBuZXcgU2VyaWFsaXplckltcGwobW9kZWxNYXBwZXJzLCBpc1hNTCk7XG59XG5leHBvcnRzLmNyZWF0ZVNlcmlhbGl6ZXIgPSBjcmVhdGVTZXJpYWxpemVyO1xuZnVuY3Rpb24gdHJpbUVuZChzdHIsIGNoKSB7XG4gICAgbGV0IGxlbiA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbiAtIDEgPj0gMCAmJiBzdHJbbGVuIC0gMV0gPT09IGNoKSB7XG4gICAgICAgIC0tbGVuO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnN1YnN0cigwLCBsZW4pO1xufVxuZnVuY3Rpb24gYnVmZmVyVG9CYXNlNjRVcmwoYnVmZmVyKSB7XG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCEoYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgcHJvdmlkZSBhbiBpbnB1dCBvZiB0eXBlIFVpbnQ4QXJyYXkgZm9yIGNvbnZlcnRpbmcgdG8gQmFzZTY0VXJsLmApO1xuICAgIH1cbiAgICAvLyBVaW50OEFycmF5IHRvIEJhc2U2NC5cbiAgICBjb25zdCBzdHIgPSBiYXNlNjQuZW5jb2RlQnl0ZUFycmF5KGJ1ZmZlcik7XG4gICAgLy8gQmFzZTY0IHRvIEJhc2U2NFVybC5cbiAgICByZXR1cm4gdHJpbUVuZChzdHIsIFwiPVwiKS5yZXBsYWNlKC9cXCsvZywgXCItXCIpLnJlcGxhY2UoL1xcLy9nLCBcIl9cIik7XG59XG5mdW5jdGlvbiBiYXNlNjRVcmxUb0J5dGVBcnJheShzdHIpIHtcbiAgICBpZiAoIXN0cikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoc3RyICYmIHR5cGVvZiBzdHIudmFsdWVPZigpICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBwcm92aWRlIGFuIGlucHV0IG9mIHR5cGUgc3RyaW5nIGZvciBjb252ZXJ0aW5nIHRvIFVpbnQ4QXJyYXlcIik7XG4gICAgfVxuICAgIC8vIEJhc2U2NFVybCB0byBCYXNlNjQuXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpO1xuICAgIC8vIEJhc2U2NCB0byBVaW50OEFycmF5LlxuICAgIHJldHVybiBiYXNlNjQuZGVjb2RlU3RyaW5nKHN0cik7XG59XG5mdW5jdGlvbiBzcGxpdFNlcmlhbGl6ZU5hbWUocHJvcCkge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbXTtcbiAgICBsZXQgcGFydGlhbGNsYXNzID0gXCJcIjtcbiAgICBpZiAocHJvcCkge1xuICAgICAgICBjb25zdCBzdWJ3b3JkcyA9IHByb3Auc3BsaXQoXCIuXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc3Vid29yZHMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmNoYXJBdChpdGVtLmxlbmd0aCAtIDEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxjbGFzcyArPSBpdGVtLnN1YnN0cigwLCBpdGVtLmxlbmd0aCAtIDEpICsgXCIuXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsY2xhc3MgKz0gaXRlbTtcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2gocGFydGlhbGNsYXNzKTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsY2xhc3MgPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xufVxuZnVuY3Rpb24gZGF0ZVRvVW5peFRpbWUoZCkge1xuICAgIGlmICghZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGQudmFsdWVPZigpID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGQgPSBuZXcgRGF0ZShkKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoZC5nZXRUaW1lKCkgLyAxMDAwKTtcbn1cbmZ1bmN0aW9uIHVuaXhUaW1lVG9EYXRlKG4pIHtcbiAgICBpZiAoIW4pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKG4gKiAxMDAwKTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUJhc2ljVHlwZXModHlwZU5hbWUsIG9iamVjdE5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVOYW1lLm1hdGNoKC9eTnVtYmVyJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSB3aXRoIHZhbHVlICR7dmFsdWV9IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15TdHJpbmckL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSB3aXRoIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eVXVpZCQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIgJiYgKDAsIHV0aWxzX2pzXzEuaXNWYWxpZFV1aWQpKHZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gd2l0aCB2YWx1ZSBcIiR7dmFsdWV9XCIgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBhbmQgYSB2YWxpZCB1dWlkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eQm9vbGVhbiQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IHdpdGggdmFsdWUgJHt2YWx1ZX0gbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15TdHJlYW0kL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBvYmplY3RUeXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgICAgICAgaWYgKG9iamVjdFR5cGUgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUucGlwZSAhPT0gXCJmdW5jdGlvblwiICYmIC8vIE5vZGVKUy5SZWFkYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50ZWUgIT09IFwiZnVuY3Rpb25cIiAmJiAvLyBicm93c2VyIFJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSAmJlxuICAgICAgICAgICAgICAgICFBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgLy8gRmlsZSBvYmplY3RzIGNvdW50IGFzIGEgdHlwZSBvZiBCbG9iLCBzbyB3ZSB3YW50IHRvIHVzZSBpbnN0YW5jZW9mIGV4cGxpY2l0bHlcbiAgICAgICAgICAgICAgICAhKCh0eXBlb2YgQmxvYiA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBCbG9iID09PSBcIm9iamVjdFwiKSAmJiB2YWx1ZSBpbnN0YW5jZW9mIEJsb2IpICYmXG4gICAgICAgICAgICAgICAgb2JqZWN0VHlwZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYSBzdHJpbmcsIEJsb2IsIEFycmF5QnVmZmVyLCBBcnJheUJ1ZmZlclZpZXcsIFJlYWRhYmxlU3RyZWFtLCBvciAoKSA9PiBSZWFkYWJsZVN0cmVhbS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVFbnVtVHlwZShvYmplY3ROYW1lLCBhbGxvd2VkVmFsdWVzLCB2YWx1ZSkge1xuICAgIGlmICghYWxsb3dlZFZhbHVlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBwcm92aWRlIGEgc2V0IG9mIGFsbG93ZWRWYWx1ZXMgdG8gdmFsaWRhdGUgJHtvYmplY3ROYW1lfSBhcyBhbiBFbnVtIFR5cGUuYCk7XG4gICAgfVxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGFsbG93ZWRWYWx1ZXMuc29tZSgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0udmFsdWVPZigpID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtID09PSB2YWx1ZTtcbiAgICB9KTtcbiAgICBpZiAoIWlzUHJlc2VudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWV9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciAke29iamVjdE5hbWV9LiBUaGUgdmFsaWQgdmFsdWVzIGFyZTogJHtKU09OLnN0cmluZ2lmeShhbGxvd2VkVmFsdWVzKX0uYCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUJ5dGVBcnJheVR5cGUob2JqZWN0TmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBvZiB0eXBlIFVpbnQ4QXJyYXkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBiYXNlNjQuZW5jb2RlQnl0ZUFycmF5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQmFzZTY0VXJsVHlwZShvYmplY3ROYW1lLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIG9mIHR5cGUgVWludDhBcnJheS5gKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGJ1ZmZlclRvQmFzZTY0VXJsKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplRGF0ZVR5cGVzKHR5cGVOYW1lLCB2YWx1ZSwgb2JqZWN0TmFtZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlTmFtZS5tYXRjaCgvXkRhdGUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhbiBpbnN0YW5jZW9mIERhdGUgb3IgYSBzdHJpbmcgaW4gSVNPODYwMSBmb3JtYXQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9XG4gICAgICAgICAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWUudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApXG4gICAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXkRhdGVUaW1lJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIgJiYgIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYW4gaW5zdGFuY2VvZiBEYXRlIG9yIGEgc3RyaW5nIGluIElTTzg2MDEgZm9ybWF0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15EYXRlVGltZVJmYzExMjMkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhbiBpbnN0YW5jZW9mIERhdGUgb3IgYSBzdHJpbmcgaW4gUkZDLTExMjMgZm9ybWF0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZS50b1VUQ1N0cmluZygpIDogbmV3IERhdGUodmFsdWUpLnRvVVRDU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15Vbml4VGltZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgdmFsdWUudmFsdWVPZigpID09PSBcInN0cmluZ1wiICYmICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGFuIGluc3RhbmNlb2YgRGF0ZSBvciBhIHN0cmluZyBpbiBSRkMtMTEyMy9JU084NjAxIGZvcm1hdCBgICtcbiAgICAgICAgICAgICAgICAgICAgYGZvciBpdCB0byBiZSBzZXJpYWxpemVkIGluIFVuaXhUaW1lL0Vwb2NoIGZvcm1hdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlID0gZGF0ZVRvVW5peFRpbWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eVGltZVNwYW4kL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISgwLCB1dGlsc19qc18xLmlzRHVyYXRpb24pKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGEgc3RyaW5nIGluIElTTyA4NjAxIGZvcm1hdC4gSW5zdGVhZCB3YXMgXCIke3ZhbHVlfVwiLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZVNlcXVlbmNlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgaXNYbWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgb2YgdHlwZSBBcnJheS5gKTtcbiAgICB9XG4gICAgbGV0IGVsZW1lbnRUeXBlID0gbWFwcGVyLnR5cGUuZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnRUeXBlIHx8IHR5cGVvZiBlbGVtZW50VHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGVsZW1lbnRcIiBtZXRhZGF0YSBmb3IgYW4gQXJyYXkgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBgICtcbiAgICAgICAgICAgIGBtYXBwZXIgYW5kIGl0IG11c3Qgb2YgdHlwZSBcIm9iamVjdFwiIGluICR7b2JqZWN0TmFtZX0uYCk7XG4gICAgfVxuICAgIC8vIFF1aXJrOiBDb21wb3NpdGUgbWFwcGVycyByZWZlcmVuY2VkIGJ5IGBlbGVtZW50YCBtaWdodFxuICAgIC8vIG5vdCBoYXZlICphbGwqIHByb3BlcnRpZXMgZGVjbGFyZWQgKGxpa2UgdWJlclBhcmVudCksXG4gICAgLy8gc28gbGV0J3MgdHJ5IHRvIGxvb2sgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiBieSBuYW1lLlxuICAgIGlmIChlbGVtZW50VHlwZS50eXBlLm5hbWUgPT09IFwiQ29tcG9zaXRlXCIgJiYgZWxlbWVudFR5cGUudHlwZS5jbGFzc05hbWUpIHtcbiAgICAgICAgZWxlbWVudFR5cGUgPSAoX2EgPSBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1tlbGVtZW50VHlwZS50eXBlLmNsYXNzTmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGVsZW1lbnRUeXBlO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wQXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShlbGVtZW50VHlwZSwgb2JqZWN0W2ldLCBvYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKGlzWG1sICYmIGVsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZSkge1xuICAgICAgICAgICAgY29uc3QgeG1sbnNLZXkgPSBlbGVtZW50VHlwZS54bWxOYW1lc3BhY2VQcmVmaXhcbiAgICAgICAgICAgICAgICA/IGB4bWxuczoke2VsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZVByZWZpeH1gXG4gICAgICAgICAgICAgICAgOiBcInhtbG5zXCI7XG4gICAgICAgICAgICBpZiAoZWxlbWVudFR5cGUudHlwZS5uYW1lID09PSBcIkNvbXBvc2l0ZVwiKSB7XG4gICAgICAgICAgICAgICAgdGVtcEFycmF5W2ldID0gT2JqZWN0LmFzc2lnbih7fSwgc2VyaWFsaXplZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV1baW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbG5zS2V5XTogZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV0gPSB7fTtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV1bb3B0aW9ucy54bWwueG1sQ2hhcktleV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgICAgICAgICAgdGVtcEFycmF5W2ldW2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSB7IFt4bWxuc0tleV06IGVsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGVtcEFycmF5W2ldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wQXJyYXk7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgaXNYbWwsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBvZiB0eXBlIG9iamVjdC5gKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVUeXBlID0gbWFwcGVyLnR5cGUudmFsdWU7XG4gICAgaWYgKCF2YWx1ZVR5cGUgfHwgdHlwZW9mIHZhbHVlVHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwidmFsdWVcIiBtZXRhZGF0YSBmb3IgYSBEaWN0aW9uYXJ5IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICBgbWFwcGVyIGFuZCBpdCBtdXN0IG9mIHR5cGUgXCJvYmplY3RcIiBpbiAke29iamVjdE5hbWV9LmApO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wRGljdGlvbmFyeSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFZhbHVlID0gc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWVUeXBlLCBvYmplY3Rba2V5XSwgb2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IG5lZWRzIGFuIFhNTCBuYW1lc3BhY2Ugd2UgbmVlZCB0byBhZGQgaXQgd2l0aGluIHRoZSAkIHByb3BlcnR5XG4gICAgICAgIHRlbXBEaWN0aW9uYXJ5W2tleV0gPSBnZXRYbWxPYmplY3RWYWx1ZSh2YWx1ZVR5cGUsIHNlcmlhbGl6ZWRWYWx1ZSwgaXNYbWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvLyBBZGQgdGhlIG5hbWVzcGFjZSB0byB0aGUgcm9vdCBlbGVtZW50IGlmIG5lZWRlZFxuICAgIGlmIChpc1htbCAmJiBtYXBwZXIueG1sTmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnN0IHhtbG5zS2V5ID0gbWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeCA/IGB4bWxuczoke21hcHBlci54bWxOYW1lc3BhY2VQcmVmaXh9YCA6IFwieG1sbnNcIjtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGVtcERpY3Rpb25hcnk7XG4gICAgICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sbnNLZXldOiBtYXBwZXIueG1sTmFtZXNwYWNlIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wRGljdGlvbmFyeTtcbn1cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIHByb3BlcnR5IGZyb20gYSByZWZlcmVuY2VkIG1hcHBlclxuICogQHBhcmFtIHNlcmlhbGl6ZXIgLSB0aGUgc2VyaWFsaXplciBjb250YWluaW5nIHRoZSBlbnRpcmUgc2V0IG9mIG1hcHBlcnNcbiAqIEBwYXJhbSBtYXBwZXIgLSB0aGUgY29tcG9zaXRlIG1hcHBlciB0byByZXNvbHZlXG4gKiBAcGFyYW0gb2JqZWN0TmFtZSAtIG5hbWUgb2YgdGhlIG9iamVjdCBiZWluZyBzZXJpYWxpemVkXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBZGRpdGlvbmFsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpIHtcbiAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllcyA9IG1hcHBlci50eXBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIGlmICghYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgbWFwcGVyLnR5cGUuY2xhc3NOYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsTWFwcGVyID0gcmVzb2x2ZVJlZmVyZW5jZWRNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsTWFwcGVyID09PSBudWxsIHx8IG1vZGVsTWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2RlbE1hcHBlci50eXBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICByZXR1cm4gYWRkaXRpb25hbFByb3BlcnRpZXM7XG59XG4vKipcbiAqIEZpbmRzIHRoZSBtYXBwZXIgcmVmZXJlbmNlZCBieSBjbGFzc05hbWVcbiAqIEBwYXJhbSBzZXJpYWxpemVyIC0gdGhlIHNlcmlhbGl6ZXIgY29udGFpbmluZyB0aGUgZW50aXJlIHNldCBvZiBtYXBwZXJzXG4gKiBAcGFyYW0gbWFwcGVyIC0gdGhlIGNvbXBvc2l0ZSBtYXBwZXIgdG8gcmVzb2x2ZVxuICogQHBhcmFtIG9iamVjdE5hbWUgLSBuYW1lIG9mIHRoZSBvYmplY3QgYmVpbmcgc2VyaWFsaXplZFxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVmZXJlbmNlZE1hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBtYXBwZXIudHlwZS5jbGFzc05hbWU7XG4gICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbGFzcyBuYW1lIGZvciBtb2RlbCBcIiR7b2JqZWN0TmFtZX1cIiBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIG1hcHBlciBcIiR7SlNPTi5zdHJpbmdpZnkobWFwcGVyLCB1bmRlZmluZWQsIDIpfVwiLmApO1xuICAgIH1cbiAgICByZXR1cm4gc2VyaWFsaXplci5tb2RlbE1hcHBlcnNbY2xhc3NOYW1lXTtcbn1cbi8qKlxuICogUmVzb2x2ZXMgYSBjb21wb3NpdGUgbWFwcGVyJ3MgbW9kZWxQcm9wZXJ0aWVzLlxuICogQHBhcmFtIHNlcmlhbGl6ZXIgLSB0aGUgc2VyaWFsaXplciBjb250YWluaW5nIHRoZSBlbnRpcmUgc2V0IG9mIG1hcHBlcnNcbiAqIEBwYXJhbSBtYXBwZXIgLSB0aGUgY29tcG9zaXRlIG1hcHBlciB0byByZXNvbHZlXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNb2RlbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKSB7XG4gICAgbGV0IG1vZGVsUHJvcHMgPSBtYXBwZXIudHlwZS5tb2RlbFByb3BlcnRpZXM7XG4gICAgaWYgKCFtb2RlbFByb3BzKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsTWFwcGVyID0gcmVzb2x2ZVJlZmVyZW5jZWRNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgaWYgKCFtb2RlbE1hcHBlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXBwZXIoKSBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQgZm9yIG1vZGVsIFwiJHttYXBwZXIudHlwZS5jbGFzc05hbWV9XCIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgbW9kZWxQcm9wcyA9IG1vZGVsTWFwcGVyID09PSBudWxsIHx8IG1vZGVsTWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2RlbE1hcHBlci50eXBlLm1vZGVsUHJvcGVydGllcztcbiAgICAgICAgaWYgKCFtb2RlbFByb3BzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1vZGVsUHJvcGVydGllcyBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQgaW4gdGhlIGAgK1xuICAgICAgICAgICAgICAgIGBtYXBwZXIgXCIke0pTT04uc3RyaW5naWZ5KG1vZGVsTWFwcGVyKX1cIiBvZiB0eXBlIFwiJHttYXBwZXIudHlwZS5jbGFzc05hbWV9XCIgZm9yIG9iamVjdCBcIiR7b2JqZWN0TmFtZX1cIi5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWxQcm9wcztcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUNvbXBvc2l0ZVR5cGUoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIGlzWG1sLCBvcHRpb25zKSB7XG4gICAgaWYgKGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclJlY3Vyc2l2ZWx5KHNlcmlhbGl6ZXIsIG1hcHBlcikpIHtcbiAgICAgICAgbWFwcGVyID0gZ2V0UG9seW1vcnBoaWNNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3QsIFwiY2xpZW50TmFtZVwiKTtcbiAgICB9XG4gICAgaWYgKG9iamVjdCAhPT0gdW5kZWZpbmVkICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0ge307XG4gICAgICAgIGNvbnN0IG1vZGVsUHJvcHMgPSByZXNvbHZlTW9kZWxQcm9wZXJ0aWVzKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0TmFtZSk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsUHJvcHMpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU1hcHBlciA9IG1vZGVsUHJvcHNba2V5XTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcHBlci5yZWFkT25seSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHByb3BOYW1lO1xuICAgICAgICAgICAgbGV0IHBhcmVudE9iamVjdCA9IHBheWxvYWQ7XG4gICAgICAgICAgICBpZiAoc2VyaWFsaXplci5pc1hNTCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcHBlci54bWxJc1dyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgPSBwcm9wZXJ0eU1hcHBlci54bWxOYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgPSBwcm9wZXJ0eU1hcHBlci54bWxFbGVtZW50TmFtZSB8fCBwcm9wZXJ0eU1hcHBlci54bWxOYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gc3BsaXRTZXJpYWxpemVOYW1lKHByb3BlcnR5TWFwcGVyLnNlcmlhbGl6ZWROYW1lKTtcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IHBhdGhzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGF0aE5hbWUgb2YgcGF0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRPYmplY3QgPSBwYXJlbnRPYmplY3RbcGF0aE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNoaWxkT2JqZWN0ID09PSB1bmRlZmluZWQgfHwgY2hpbGRPYmplY3QgPT09IG51bGwpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKG9iamVjdFtrZXldICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0W2tleV0gIT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBwZXIuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3RbcGF0aE5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0ID0gcGFyZW50T2JqZWN0W3BhdGhOYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50T2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgcGFyZW50T2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzWG1sICYmIG1hcHBlci54bWxOYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sbnNLZXkgPSBtYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICA/IGB4bWxuczoke21hcHBlci54bWxOYW1lc3BhY2VQcmVmaXh9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcInhtbG5zXCI7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRPYmplY3RbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSksIHsgW3htbG5zS2V5XTogbWFwcGVyLnhtbE5hbWVzcGFjZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlPYmplY3ROYW1lID0gcHJvcGVydHlNYXBwZXIuc2VyaWFsaXplZE5hbWUgIT09IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgPyBvYmplY3ROYW1lICsgXCIuXCIgKyBwcm9wZXJ0eU1hcHBlci5zZXJpYWxpemVkTmFtZVxuICAgICAgICAgICAgICAgICAgICA6IG9iamVjdE5hbWU7XG4gICAgICAgICAgICAgICAgbGV0IHRvU2VyaWFsaXplID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yID0gZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yUmVjdXJzaXZlbHkoc2VyaWFsaXplciwgbWFwcGVyKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNEaXNjcmltaW5hdG9yICYmXG4gICAgICAgICAgICAgICAgICAgIHBvbHltb3JwaGljRGlzY3JpbWluYXRvci5jbGllbnROYW1lID09PSBrZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHRvU2VyaWFsaXplID09PSB1bmRlZmluZWQgfHwgdG9TZXJpYWxpemUgPT09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvU2VyaWFsaXplID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlciwgdG9TZXJpYWxpemUsIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BOYW1lICE9PSB1bmRlZmluZWQgJiYgcHJvcE5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRYbWxPYmplY3RWYWx1ZShwcm9wZXJ0eU1hcHBlciwgc2VyaWFsaXplZFZhbHVlLCBpc1htbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1htbCAmJiBwcm9wZXJ0eU1hcHBlci54bWxJc0F0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MX0FUVFJLRVksIGkuZS4sICQgaXMgdGhlIGtleSBhdHRyaWJ1dGVzIGFyZSBrZXB0IHVuZGVyIGluIHhtbDJqcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMga2VlcHMgdGhpbmdzIHNpbXBsZSB3aGlsZSBwcmV2ZW50aW5nIG5hbWUgY29sbGlzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIG5hbWVzIGluIHVzZXIgZG9jdW1lbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSBwYXJlbnRPYmplY3RbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldW3Byb3BOYW1lXSA9IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1htbCAmJiBwcm9wZXJ0eU1hcHBlci54bWxJc1dyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtwcm9wTmFtZV0gPSB7IFtwcm9wZXJ0eU1hcHBlci54bWxFbGVtZW50TmFtZV06IHZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3RbcHJvcE5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIgPSByZXNvbHZlQWRkaXRpb25hbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhtb2RlbFByb3BzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2xpZW50UHJvcE5hbWUgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNBZGRpdGlvbmFsUHJvcGVydHkgPSBwcm9wTmFtZXMuZXZlcnkoKHBuKSA9PiBwbiAhPT0gY2xpZW50UHJvcE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc0FkZGl0aW9uYWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkW2NsaWVudFByb3BOYW1lXSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyLCBvYmplY3RbY2xpZW50UHJvcE5hbWVdLCBvYmplY3ROYW1lICsgJ1tcIicgKyBjbGllbnRQcm9wTmFtZSArICdcIl0nLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG5mdW5jdGlvbiBnZXRYbWxPYmplY3RWYWx1ZShwcm9wZXJ0eU1hcHBlciwgc2VyaWFsaXplZFZhbHVlLCBpc1htbCwgb3B0aW9ucykge1xuICAgIGlmICghaXNYbWwgfHwgIXByb3BlcnR5TWFwcGVyLnhtbE5hbWVzcGFjZSkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCB4bWxuc0tleSA9IHByb3BlcnR5TWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeFxuICAgICAgICA/IGB4bWxuczoke3Byb3BlcnR5TWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeH1gXG4gICAgICAgIDogXCJ4bWxuc1wiO1xuICAgIGNvbnN0IHhtbE5hbWVzcGFjZSA9IHsgW3htbG5zS2V5XTogcHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlIH07XG4gICAgaWYgKFtcIkNvbXBvc2l0ZVwiXS5pbmNsdWRlcyhwcm9wZXJ0eU1hcHBlci50eXBlLm5hbWUpKSB7XG4gICAgICAgIGlmIChzZXJpYWxpemVkVmFsdWVbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIHNlcmlhbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICByZXN1bHRbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHhtbE5hbWVzcGFjZTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgcmVzdWx0W29wdGlvbnMueG1sLnhtbENoYXJLZXldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geG1sTmFtZXNwYWNlO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBpc1NwZWNpYWxYbWxQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gW2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWSwgb3B0aW9ucy54bWwueG1sQ2hhcktleV0uaW5jbHVkZXMocHJvcGVydHlOYW1lKTtcbn1cbmZ1bmN0aW9uIGRlc2VyaWFsaXplQ29tcG9zaXRlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgeG1sQ2hhcktleSA9IChfYSA9IG9wdGlvbnMueG1sLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWTtcbiAgICBpZiAoZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yUmVjdXJzaXZlbHkoc2VyaWFsaXplciwgbWFwcGVyKSkge1xuICAgICAgICBtYXBwZXIgPSBnZXRQb2x5bW9ycGhpY01hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgXCJzZXJpYWxpemVkTmFtZVwiKTtcbiAgICB9XG4gICAgY29uc3QgbW9kZWxQcm9wcyA9IHJlc29sdmVNb2RlbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICBsZXQgaW5zdGFuY2UgPSB7fTtcbiAgICBjb25zdCBoYW5kbGVkUHJvcGVydHlOYW1lcyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsUHJvcHMpKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5TWFwcGVyID0gbW9kZWxQcm9wc1trZXldO1xuICAgICAgICBjb25zdCBwYXRocyA9IHNwbGl0U2VyaWFsaXplTmFtZShtb2RlbFByb3BzW2tleV0uc2VyaWFsaXplZE5hbWUpO1xuICAgICAgICBoYW5kbGVkUHJvcGVydHlOYW1lcy5wdXNoKHBhdGhzWzBdKTtcbiAgICAgICAgY29uc3QgeyBzZXJpYWxpemVkTmFtZSwgeG1sTmFtZSwgeG1sRWxlbWVudE5hbWUgfSA9IHByb3BlcnR5TWFwcGVyO1xuICAgICAgICBsZXQgcHJvcGVydHlPYmplY3ROYW1lID0gb2JqZWN0TmFtZTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZWROYW1lICE9PSBcIlwiICYmIHNlcmlhbGl6ZWROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb3BlcnR5T2JqZWN0TmFtZSA9IG9iamVjdE5hbWUgKyBcIi5cIiArIHNlcmlhbGl6ZWROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlckNvbGxlY3Rpb25QcmVmaXggPSBwcm9wZXJ0eU1hcHBlci5oZWFkZXJDb2xsZWN0aW9uUHJlZml4O1xuICAgICAgICBpZiAoaGVhZGVyQ29sbGVjdGlvblByZWZpeCkge1xuICAgICAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2VCb2R5KSkge1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXJLZXkuc3RhcnRzV2l0aChoZWFkZXJDb2xsZWN0aW9uUHJlZml4KSkge1xuICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W2hlYWRlcktleS5zdWJzdHJpbmcoaGVhZGVyQ29sbGVjdGlvblByZWZpeC5sZW5ndGgpXSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIudHlwZS52YWx1ZSwgcmVzcG9uc2VCb2R5W2hlYWRlcktleV0sIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhhbmRsZWRQcm9wZXJ0eU5hbWVzLnB1c2goaGVhZGVyS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBkaWN0aW9uYXJ5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlcmlhbGl6ZXIuaXNYTUwpIHtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcHBlci54bWxJc0F0dHJpYnV0ZSAmJiByZXNwb25zZUJvZHlbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSkge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCByZXNwb25zZUJvZHlbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXVt4bWxOYW1lXSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzTXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keVt4bWxDaGFyS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSByZXNwb25zZUJvZHlbeG1sQ2hhcktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiByZXNwb25zZUJvZHkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB4bWwgcGFyc2VyIHBhcnNlcyBcIjxOYW1lPmNvbnRlbnQ8L05hbWU+XCIgaW50byBKU09OIG9mXG4gICAgICAgICAgICAgICAgICAgIC8vICAgYHsgbmFtZTogXCJjb250ZW50XCJ9YCBpbnN0ZWFkIG9mIGB7IG5hbWU6IHsgXCJfXCI6IFwiY29udGVudFwiIH19YFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gcmVzcG9uc2VCb2R5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IHhtbEVsZW1lbnROYW1lIHx8IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzV3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAvKiBhIGxpc3Qgb2YgPHhtbEVsZW1lbnROYW1lPiB3cmFwcGVkIGJ5IDx4bWxOYW1lPlxuICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgeG1sIGV4YW1wbGUgYmVsb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb3JzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29yc1J1bGU+Li4uPC9Db3JzUnVsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPENvcnNSdWxlPi4uLjwvQ29yc1J1bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NvcnM+XG4gICAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3BvbnNlQm9keSBoYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcnNSdWxlOiBbey4uLn0sIHsuLi59XVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgeG1sTmFtZSBpcyBcIkNvcnNcIiBhbmQgeG1sRWxlbWVudE5hbWUgaXNcIkNvcnNSdWxlXCIuXG4gICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWQgPSByZXNwb25zZUJvZHlbeG1sTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRMaXN0ID0gKF9iID0gd3JhcHBlZCA9PT0gbnVsbCB8fCB3cmFwcGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cmFwcGVkW3htbEVsZW1lbnROYW1lXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW107XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCBlbGVtZW50TGlzdCwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlZFByb3BlcnR5TmFtZXMucHVzaCh4bWxOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcmVzcG9uc2VCb2R5W3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCBwcm9wZXJ0eSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlZFByb3BlcnR5TmFtZXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRlc2VyaWFsaXplIHRoZSBwcm9wZXJ0eSBpZiBpdCBpcyBwcmVzZW50IGluIHRoZSBwcm92aWRlZCByZXNwb25zZUJvZHkgaW5zdGFuY2VcbiAgICAgICAgICAgIGxldCBwcm9wZXJ0eUluc3RhbmNlO1xuICAgICAgICAgICAgbGV0IHJlcyA9IHJlc3BvbnNlQm9keTtcbiAgICAgICAgICAgIC8vIHRyYXZlcnNpbmcgdGhlIG9iamVjdCBzdGVwIGJ5IHN0ZXAuXG4gICAgICAgICAgICBsZXQgc3RlcHMgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXMpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIHN0ZXBzKys7XG4gICAgICAgICAgICAgICAgcmVzID0gcmVzW2l0ZW1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb25seSBhY2NlcHQgbnVsbCB3aGVuIHJlYWNoaW5nIHRoZSBsYXN0IHBvc2l0aW9uIG9mIG9iamVjdCBvdGhlcndpc2UgaXQgd291bGQgYmUgdW5kZWZpbmVkXG4gICAgICAgICAgICBpZiAocmVzID09PSBudWxsICYmIHN0ZXBzIDwgcGF0aHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvcGVydHlJbnN0YW5jZSA9IHJlcztcbiAgICAgICAgICAgIGNvbnN0IHBvbHltb3JwaGljRGlzY3JpbWluYXRvciA9IG1hcHBlci50eXBlLnBvbHltb3JwaGljRGlzY3JpbWluYXRvcjtcbiAgICAgICAgICAgIC8vIGNoZWNraW5nIHRoYXQgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUgKGtleSkoZXg6IFwiZmlzaHR5cGVcIikgYW5kIHRoZVxuICAgICAgICAgICAgLy8gY2xpZW50TmFtZSBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIHttZXRhZGF0YX0gKGV4OiBcImZpc2h0eXBlXCIpXG4gICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBzZXJpYWxpemVkTmFtZSBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIChleDogXCJmaXNoLnR5cGVcIilcbiAgICAgICAgICAgIC8vIGlzIGEgYmV0dGVyIGFwcHJvYWNoLiBUaGUgZ2VuZXJhdG9yIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggZXNjYXBpbmcgJ1xcLicgaW4gdGhlXG4gICAgICAgICAgICAvLyBzZXJpYWxpemVkTmFtZSBvZiB0aGUgcHJvcGVydHkgKGV4OiBcImZpc2hcXC50eXBlXCIpIHRoYXQgaXMgbWFya2VkIGFzIHBvbHltb3JwaGljIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgc2VyaWFsaXplZE5hbWUgb2YgdGhlIG1ldGFkYXRhIHBvbHltb3JwaGljRGlzY3JpbWluYXRvciAoZXg6IFwiZmlzaC50eXBlXCIpLiBIb3dldmVyLFxuICAgICAgICAgICAgLy8gdGhlIGNsaWVudE5hbWUgdHJhbnNmb3JtYXRpb24gb2YgdGhlIHBvbHltb3JwaGljRGlzY3JpbWluYXRvciAoZXg6IFwiZmlzaHR5cGVcIikgYW5kXG4gICAgICAgICAgICAvLyB0aGUgdHJhbnNmb3JtYXRpb24gb2YgbW9kZWwgcHJvcGVydHkgbmFtZSAoZXg6IFwiZmlzaHR5cGVcIikgaXMgZG9uZSBjb25zaXN0ZW50bHkuXG4gICAgICAgICAgICAvLyBIZW5jZSwgaXQgaXMgYSBzYWZlciBiZXQgdG8gcmVseSBvbiB0aGUgY2xpZW50TmFtZSBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yLlxuICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljRGlzY3JpbWluYXRvciAmJlxuICAgICAgICAgICAgICAgIGtleSA9PT0gcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yLmNsaWVudE5hbWUgJiZcbiAgICAgICAgICAgICAgICAocHJvcGVydHlJbnN0YW5jZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BlcnR5SW5zdGFuY2UgPT09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlJbnN0YW5jZSA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgICAgICAvLyBwYWdpbmdcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlQm9keVtrZXldKSAmJiBtb2RlbFByb3BzW2tleV0uc2VyaWFsaXplZE5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUluc3RhbmNlID0gcmVzcG9uc2VCb2R5W2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlJbnN0YW5jZSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHByb3BlcnR5SW5zdGFuY2UsIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gQ29weSBvdmVyIGFueSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgaW50byB0aGUgaW5zdGFuY2UsIHdoZXJlIHRoZXkgZG9cbiAgICAgICAgICAgICAgICAvLyBub3QgZXhpc3Qgb24gdGhlIG5ld2x5IGRlLXNlcmlhbGl6ZWQgYXJyYXlcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJyYXlJbnN0YW5jZSwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5SW5zdGFuY2Vba10gPSB2O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gYXJyYXlJbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5SW5zdGFuY2UgIT09IHVuZGVmaW5lZCB8fCBwcm9wZXJ0eU1hcHBlci5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRWYWx1ZSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHByb3BlcnR5SW5zdGFuY2UsIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc01hcHBlciA9IG1hcHBlci50eXBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIGlmIChhZGRpdGlvbmFsUHJvcGVydGllc01hcHBlcikge1xuICAgICAgICBjb25zdCBpc0FkZGl0aW9uYWxQcm9wZXJ0eSA9IChyZXNwb25zZVByb3BOYW1lKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNsaWVudFByb3BOYW1lIGluIG1vZGVsUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IHNwbGl0U2VyaWFsaXplTmFtZShtb2RlbFByb3BzW2NsaWVudFByb3BOYW1lXS5zZXJpYWxpemVkTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHBhdGhzWzBdID09PSByZXNwb25zZVByb3BOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCByZXNwb25zZVByb3BOYW1lIGluIHJlc3BvbnNlQm9keSkge1xuICAgICAgICAgICAgaWYgKGlzQWRkaXRpb25hbFByb3BlcnR5KHJlc3BvbnNlUHJvcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VbcmVzcG9uc2VQcm9wTmFtZV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyLCByZXNwb25zZUJvZHlbcmVzcG9uc2VQcm9wTmFtZV0sIG9iamVjdE5hbWUgKyAnW1wiJyArIHJlc3BvbnNlUHJvcE5hbWUgKyAnXCJdJywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAocmVzcG9uc2VCb2R5ICYmICFvcHRpb25zLmlnbm9yZVVua25vd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlQm9keSkpIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhaGFuZGxlZFByb3BlcnR5TmFtZXMuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAgICAgICAgICFpc1NwZWNpYWxYbWxQcm9wZXJ0eShrZXksIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHJlc3BvbnNlQm9keVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGRlc2VyaWFsaXplRGljdGlvbmFyeVR5cGUoc2VyaWFsaXplciwgbWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIG9wdGlvbnMpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgY29uc3QgdmFsdWUgPSBtYXBwZXIudHlwZS52YWx1ZTtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwidmFsdWVcIiBtZXRhZGF0YSBmb3IgYSBEaWN0aW9uYXJ5IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICBgbWFwcGVyIGFuZCBpdCBtdXN0IG9mIHR5cGUgXCJvYmplY3RcIiBpbiAke29iamVjdE5hbWV9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZUJvZHkpIHtcbiAgICAgICAgY29uc3QgdGVtcERpY3Rpb25hcnkgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2VCb2R5KSkge1xuICAgICAgICAgICAgdGVtcERpY3Rpb25hcnlba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodmFsdWUsIHJlc3BvbnNlQm9keVtrZXldLCBvYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVtcERpY3Rpb25hcnk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZUJvZHk7XG59XG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVNlcXVlbmNlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBsZXQgZWxlbWVudCA9IG1hcHBlci50eXBlLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8IHR5cGVvZiBlbGVtZW50ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZWxlbWVudFwiIG1ldGFkYXRhIGZvciBhbiBBcnJheSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGAgK1xuICAgICAgICAgICAgYG1hcHBlciBhbmQgaXQgbXVzdCBvZiB0eXBlIFwib2JqZWN0XCIgaW4gJHtvYmplY3ROYW1lfWApO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2VCb2R5KSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZUJvZHkpKSB7XG4gICAgICAgICAgICAvLyB4bWwyanMgd2lsbCBpbnRlcnByZXQgYSBzaW5nbGUgZWxlbWVudCBhcnJheSBhcyBqdXN0IHRoZSBlbGVtZW50LCBzbyBmb3JjZSBpdCB0byBiZSBhbiBhcnJheVxuICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gW3Jlc3BvbnNlQm9keV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUXVpcms6IENvbXBvc2l0ZSBtYXBwZXJzIHJlZmVyZW5jZWQgYnkgYGVsZW1lbnRgIG1pZ2h0XG4gICAgICAgIC8vIG5vdCBoYXZlICphbGwqIHByb3BlcnRpZXMgZGVjbGFyZWQgKGxpa2UgdWJlclBhcmVudCksXG4gICAgICAgIC8vIHNvIGxldCdzIHRyeSB0byBsb29rIHVwIHRoZSBmdWxsIGRlZmluaXRpb24gYnkgbmFtZS5cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZS5uYW1lID09PSBcIkNvbXBvc2l0ZVwiICYmIGVsZW1lbnQudHlwZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSAoX2EgPSBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1tlbGVtZW50LnR5cGUuY2xhc3NOYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZW1wQXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZUJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRlbXBBcnJheVtpXSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZWxlbWVudCwgcmVzcG9uc2VCb2R5W2ldLCBgJHtvYmplY3ROYW1lfVske2l9XWAsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wQXJyYXk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZUJvZHk7XG59XG5mdW5jdGlvbiBnZXRJbmRleERpc2NyaW1pbmF0b3IoZGlzY3JpbWluYXRvcnMsIGRpc2NyaW1pbmF0b3JWYWx1ZSwgdHlwZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlTmFtZXNUb0NoZWNrID0gW3R5cGVOYW1lXTtcbiAgICB3aGlsZSAodHlwZU5hbWVzVG9DaGVjay5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSB0eXBlTmFtZXNUb0NoZWNrLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IGluZGV4RGlzY3JpbWluYXRvciA9IGRpc2NyaW1pbmF0b3JWYWx1ZSA9PT0gY3VycmVudE5hbWVcbiAgICAgICAgICAgID8gZGlzY3JpbWluYXRvclZhbHVlXG4gICAgICAgICAgICA6IGN1cnJlbnROYW1lICsgXCIuXCIgKyBkaXNjcmltaW5hdG9yVmFsdWU7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGlzY3JpbWluYXRvcnMsIGluZGV4RGlzY3JpbWluYXRvcikpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yc1tpbmRleERpc2NyaW1pbmF0b3JdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgbWFwcGVyXSBvZiBPYmplY3QuZW50cmllcyhkaXNjcmltaW5hdG9ycykpIHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKGN1cnJlbnROYW1lICsgXCIuXCIpICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcHBlci50eXBlLnViZXJQYXJlbnQgPT09IGN1cnJlbnROYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcHBlci50eXBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZXNUb0NoZWNrLnB1c2gobWFwcGVyLnR5cGUuY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFBvbHltb3JwaGljTWFwcGVyKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0LCBwb2x5bW9ycGhpY1Byb3BlcnR5TmFtZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgPSBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpO1xuICAgIGlmIChwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IpIHtcbiAgICAgICAgbGV0IGRpc2NyaW1pbmF0b3JOYW1lID0gcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yW3BvbHltb3JwaGljUHJvcGVydHlOYW1lXTtcbiAgICAgICAgaWYgKGRpc2NyaW1pbmF0b3JOYW1lKSB7XG4gICAgICAgICAgICAvLyBUaGUgc2VyaWFsaXplZE5hbWUgbWlnaHQgaGF2ZSBcXFxcLCB3aGljaCB3ZSBqdXN0IHdhbnQgdG8gaWdub3JlXG4gICAgICAgICAgICBpZiAocG9seW1vcnBoaWNQcm9wZXJ0eU5hbWUgPT09IFwic2VyaWFsaXplZE5hbWVcIikge1xuICAgICAgICAgICAgICAgIGRpc2NyaW1pbmF0b3JOYW1lID0gZGlzY3JpbWluYXRvck5hbWUucmVwbGFjZSgvXFxcXC9naSwgXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWUgPSBvYmplY3RbZGlzY3JpbWluYXRvck5hbWVdO1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSAoX2EgPSBtYXBwZXIudHlwZS51YmVyUGFyZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBtYXBwZXIudHlwZS5jbGFzc05hbWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRpc2NyaW1pbmF0b3JWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbHltb3JwaGljTWFwcGVyID0gZ2V0SW5kZXhEaXNjcmltaW5hdG9yKHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzLmRpc2NyaW1pbmF0b3JzLCBkaXNjcmltaW5hdG9yVmFsdWUsIHR5cGVOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNNYXBwZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVyID0gcG9seW1vcnBoaWNNYXBwZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXBwZXI7XG59XG5mdW5jdGlvbiBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpIHtcbiAgICByZXR1cm4gKG1hcHBlci50eXBlLnBvbHltb3JwaGljRGlzY3JpbWluYXRvciB8fFxuICAgICAgICBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JTYWZlbHkoc2VyaWFsaXplciwgbWFwcGVyLnR5cGUudWJlclBhcmVudCkgfHxcbiAgICAgICAgZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yU2FmZWx5KHNlcmlhbGl6ZXIsIG1hcHBlci50eXBlLmNsYXNzTmFtZSkpO1xufVxuZnVuY3Rpb24gZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yU2FmZWx5KHNlcmlhbGl6ZXIsIHR5cGVOYW1lKSB7XG4gICAgcmV0dXJuICh0eXBlTmFtZSAmJlxuICAgICAgICBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1t0eXBlTmFtZV0gJiZcbiAgICAgICAgc2VyaWFsaXplci5tb2RlbE1hcHBlcnNbdHlwZU5hbWVdLnR5cGUucG9seW1vcnBoaWNEaXNjcmltaW5hdG9yKTtcbn1cbi8qKlxuICogS25vd24gdHlwZXMgb2YgTWFwcGVyc1xuICovXG5leHBvcnRzLk1hcHBlclR5cGVOYW1lcyA9IHtcbiAgICBCYXNlNjRVcmw6IFwiQmFzZTY0VXJsXCIsXG4gICAgQm9vbGVhbjogXCJCb29sZWFuXCIsXG4gICAgQnl0ZUFycmF5OiBcIkJ5dGVBcnJheVwiLFxuICAgIENvbXBvc2l0ZTogXCJDb21wb3NpdGVcIixcbiAgICBEYXRlOiBcIkRhdGVcIixcbiAgICBEYXRlVGltZTogXCJEYXRlVGltZVwiLFxuICAgIERhdGVUaW1lUmZjMTEyMzogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICBEaWN0aW9uYXJ5OiBcIkRpY3Rpb25hcnlcIixcbiAgICBFbnVtOiBcIkVudW1cIixcbiAgICBOdW1iZXI6IFwiTnVtYmVyXCIsXG4gICAgT2JqZWN0OiBcIk9iamVjdFwiLFxuICAgIFNlcXVlbmNlOiBcIlNlcXVlbmNlXCIsXG4gICAgU3RyaW5nOiBcIlN0cmluZ1wiLFxuICAgIFN0cmVhbTogXCJTdHJlYW1cIixcbiAgICBUaW1lU3BhbjogXCJUaW1lU3BhblwiLFxuICAgIFVuaXhUaW1lOiBcIlVuaXhUaW1lXCIsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VyaWFsaXplci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0YXRlID0gdm9pZCAwO1xuLyoqXG4gKiBIb2xkcyB0aGUgc2luZ2xldG9uIG9wZXJhdGlvblJlcXVlc3RNYXAsIHRvIGJlIHNoYXJlZCBhY3Jvc3MgQ0pTIGFuZCBFU00gaW1wb3J0cy5cbiAqL1xuZXhwb3J0cy5zdGF0ZSA9IHtcbiAgICBvcGVyYXRpb25SZXF1ZXN0TWFwOiBuZXcgV2Vha01hcCgpLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YXRlLWNqcy5janMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyA9IGV4cG9ydHMuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIgPSB2b2lkIDA7XG5jb25zdCBzdGF0ZV9qc18xID0gcmVxdWlyZShcIi4vc3RhdGUuanNcIik7XG4vKipcbiAqIEBpbnRlcm5hbFxuICogUmV0cmlldmVzIHRoZSB2YWx1ZSB0byB1c2UgZm9yIGEgZ2l2ZW4gb3BlcmF0aW9uIGFyZ3VtZW50XG4gKiBAcGFyYW0gb3BlcmF0aW9uQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyBwYXNzZWQgZnJvbSB0aGUgZ2VuZXJhdGVkIGNsaWVudFxuICogQHBhcmFtIHBhcmFtZXRlciAtIFRoZSBwYXJhbWV0ZXIgZGVzY3JpcHRpb25cbiAqIEBwYXJhbSBmYWxsYmFja09iamVjdCAtIElmIHNvbWV0aGluZyBpc24ndCBmb3VuZCBpbiB0aGUgYXJndW1lbnRzIGJhZywgbG9vayBoZXJlLlxuICogIEdlbmVyYWxseSB1c2VkIHRvIGxvb2sgYXQgdGhlIHNlcnZpY2UgY2xpZW50IHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKG9wZXJhdGlvbkFyZ3VtZW50cywgcGFyYW1ldGVyLCBmYWxsYmFja09iamVjdCkge1xuICAgIGxldCBwYXJhbWV0ZXJQYXRoID0gcGFyYW1ldGVyLnBhcmFtZXRlclBhdGg7XG4gICAgY29uc3QgcGFyYW1ldGVyTWFwcGVyID0gcGFyYW1ldGVyLm1hcHBlcjtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHBhcmFtZXRlclBhdGggPSBbcGFyYW1ldGVyUGF0aF07XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtZXRlclBhdGgpKSB7XG4gICAgICAgIGlmIChwYXJhbWV0ZXJQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJNYXBwZXIuaXNDb25zdGFudCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1ldGVyTWFwcGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eVNlYXJjaFJlc3VsdCA9IGdldFByb3BlcnR5RnJvbVBhcmFtZXRlclBhdGgob3BlcmF0aW9uQXJndW1lbnRzLCBwYXJhbWV0ZXJQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5U2VhcmNoUmVzdWx0LnByb3BlcnR5Rm91bmQgJiYgZmFsbGJhY2tPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTZWFyY2hSZXN1bHQgPSBnZXRQcm9wZXJ0eUZyb21QYXJhbWV0ZXJQYXRoKGZhbGxiYWNrT2JqZWN0LCBwYXJhbWV0ZXJQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHVzZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlTZWFyY2hSZXN1bHQucHJvcGVydHlGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2VEZWZhdWx0VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyTWFwcGVyLnJlcXVpcmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmFtZXRlclBhdGhbMF0gPT09IFwib3B0aW9uc1wiICYmIHBhcmFtZXRlclBhdGgubGVuZ3RoID09PSAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1c2VEZWZhdWx0VmFsdWUgPyBwYXJhbWV0ZXJNYXBwZXIuZGVmYXVsdFZhbHVlIDogcHJvcGVydHlTZWFyY2hSZXN1bHQucHJvcGVydHlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHBhcmFtZXRlck1hcHBlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBwYXJhbWV0ZXJQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU1hcHBlciA9IHBhcmFtZXRlck1hcHBlci50eXBlLm1vZGVsUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlQYXRoID0gcGFyYW1ldGVyUGF0aFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKG9wZXJhdGlvbkFyZ3VtZW50cywge1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlclBhdGg6IHByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICBtYXBwZXI6IHByb3BlcnR5TWFwcGVyLFxuICAgICAgICAgICAgfSwgZmFsbGJhY2tPYmplY3QpO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlciA9IGdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyO1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlGcm9tUGFyYW1ldGVyUGF0aChwYXJlbnQsIHBhcmFtZXRlclBhdGgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7IHByb3BlcnR5Rm91bmQ6IGZhbHNlIH07XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoOyBpIDwgcGFyYW1ldGVyUGF0aC5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJQYXRoUGFydCA9IHBhcmFtZXRlclBhdGhbaV07XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0byBjaGVjayBpbmhlcml0ZWQgcHJvcGVydGllcyB0b28sIHNvIGRvbid0IHVzZSBoYXNPd25Qcm9wZXJ0eSgpLlxuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmFtZXRlclBhdGhQYXJ0IGluIHBhcmVudCkge1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W3BhcmFtZXRlclBhdGhQYXJ0XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpID09PSBwYXJhbWV0ZXJQYXRoLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHJvcGVydHlWYWx1ZSA9IHBhcmVudDtcbiAgICAgICAgcmVzdWx0LnByb3BlcnR5Rm91bmQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuY29uc3Qgb3JpZ2luYWxSZXF1ZXN0U3ltYm9sID0gU3ltYm9sLmZvcihcIkBhenVyZS9jb3JlLWNsaWVudCBvcmlnaW5hbCByZXF1ZXN0XCIpO1xuZnVuY3Rpb24gaGFzT3JpZ2luYWxSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICByZXR1cm4gb3JpZ2luYWxSZXF1ZXN0U3ltYm9sIGluIHJlcXVlc3Q7XG59XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyhyZXF1ZXN0KSB7XG4gICAgaWYgKGhhc09yaWdpbmFsUmVxdWVzdChyZXF1ZXN0KSkge1xuICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8ocmVxdWVzdFtvcmlnaW5hbFJlcXVlc3RTeW1ib2xdKTtcbiAgICB9XG4gICAgbGV0IGluZm8gPSBzdGF0ZV9qc18xLnN0YXRlLm9wZXJhdGlvblJlcXVlc3RNYXAuZ2V0KHJlcXVlc3QpO1xuICAgIGlmICghaW5mbykge1xuICAgICAgICBpbmZvID0ge307XG4gICAgICAgIHN0YXRlX2pzXzEuc3RhdGUub3BlcmF0aW9uUmVxdWVzdE1hcC5zZXQocmVxdWVzdCwgaW5mbyk7XG4gICAgfVxuICAgIHJldHVybiBpbmZvO1xufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyA9IGdldE9wZXJhdGlvblJlcXVlc3RJbmZvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uSGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeSA9IGV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmNvbnN0IGludGVyZmFjZXNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZXMuanNcIik7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuY29uc3Qgc2VyaWFsaXplcl9qc18xID0gcmVxdWlyZShcIi4vc2VyaWFsaXplci5qc1wiKTtcbmNvbnN0IG9wZXJhdGlvbkhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbkhlbHBlcnMuanNcIik7XG5jb25zdCBkZWZhdWx0SnNvbkNvbnRlbnRUeXBlcyA9IFtcImFwcGxpY2F0aW9uL2pzb25cIiwgXCJ0ZXh0L2pzb25cIl07XG5jb25zdCBkZWZhdWx0WG1sQ29udGVudFR5cGVzID0gW1wiYXBwbGljYXRpb24veG1sXCIsIFwiYXBwbGljYXRpb24vYXRvbSt4bWxcIl07XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgZGVzZXJpYWxpemF0aW9uUG9saWN5LlxuICovXG5leHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBcImRlc2VyaWFsaXphdGlvblBvbGljeVwiO1xuLyoqXG4gKiBUaGlzIHBvbGljeSBoYW5kbGVzIHBhcnNpbmcgb3V0IHJlc3BvbnNlcyBhY2NvcmRpbmcgdG8gT3BlcmF0aW9uU3BlY3Mgb24gdGhlIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGRlc2VyaWFsaXphdGlvblBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgY29uc3QganNvbkNvbnRlbnRUeXBlcyA9IChfYiA9IChfYSA9IG9wdGlvbnMuZXhwZWN0ZWRDb250ZW50VHlwZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5qc29uKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkZWZhdWx0SnNvbkNvbnRlbnRUeXBlcztcbiAgICBjb25zdCB4bWxDb250ZW50VHlwZXMgPSAoX2QgPSAoX2MgPSBvcHRpb25zLmV4cGVjdGVkQ29udGVudFR5cGVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MueG1sKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBkZWZhdWx0WG1sQ29udGVudFR5cGVzO1xuICAgIGNvbnN0IHBhcnNlWE1MID0gb3B0aW9ucy5wYXJzZVhNTDtcbiAgICBjb25zdCBzZXJpYWxpemVyT3B0aW9ucyA9IG9wdGlvbnMuc2VyaWFsaXplck9wdGlvbnM7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgIHhtbDoge1xuICAgICAgICAgICAgcm9vdE5hbWU6IChfZSA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IFwiXCIsXG4gICAgICAgICAgICBpbmNsdWRlUm9vdDogKF9mID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogZmFsc2UsXG4gICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2cgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplUmVzcG9uc2VCb2R5KGpzb25Db250ZW50VHlwZXMsIHhtbENvbnRlbnRUeXBlcywgcmVzcG9uc2UsIHVwZGF0ZWRPcHRpb25zLCBwYXJzZVhNTCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5ID0gZGVzZXJpYWxpemF0aW9uUG9saWN5O1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uUmVzcG9uc2VNYXAocGFyc2VkUmVzcG9uc2UpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IHJlcXVlc3QgPSBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbkluZm8gPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvKShyZXF1ZXN0KTtcbiAgICBjb25zdCBvcGVyYXRpb25TcGVjID0gb3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblNwZWM7XG4gICAgaWYgKG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgaWYgKCEob3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblJlc3BvbnNlR2V0dGVyKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uU3BlYy5yZXNwb25zZXNbcGFyc2VkUmVzcG9uc2Uuc3RhdHVzXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5vcGVyYXRpb25SZXNwb25zZUdldHRlcihvcGVyYXRpb25TcGVjLCBwYXJzZWRSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHNob3VsZERlc2VyaWFsaXplUmVzcG9uc2UocGFyc2VkUmVzcG9uc2UpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gcGFyc2VkUmVzcG9uc2UucmVxdWVzdDtcbiAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocmVxdWVzdCk7XG4gICAgY29uc3Qgc2hvdWxkRGVzZXJpYWxpemUgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8uc2hvdWxkRGVzZXJpYWxpemU7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoc2hvdWxkRGVzZXJpYWxpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2hvdWxkRGVzZXJpYWxpemUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJlc3VsdCA9IHNob3VsZERlc2VyaWFsaXplO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gc2hvdWxkRGVzZXJpYWxpemUocGFyc2VkUmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuYXN5bmMgZnVuY3Rpb24gZGVzZXJpYWxpemVSZXNwb25zZUJvZHkoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCByZXNwb25zZSwgb3B0aW9ucywgcGFyc2VYTUwpIHtcbiAgICBjb25zdCBwYXJzZWRSZXNwb25zZSA9IGF3YWl0IHBhcnNlKGpzb25Db250ZW50VHlwZXMsIHhtbENvbnRlbnRUeXBlcywgcmVzcG9uc2UsIG9wdGlvbnMsIHBhcnNlWE1MKTtcbiAgICBpZiAoIXNob3VsZERlc2VyaWFsaXplUmVzcG9uc2UocGFyc2VkUmVzcG9uc2UpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWRSZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uSW5mbyA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8pKHBhcnNlZFJlc3BvbnNlLnJlcXVlc3QpO1xuICAgIGNvbnN0IG9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYztcbiAgICBpZiAoIW9wZXJhdGlvblNwZWMgfHwgIW9wZXJhdGlvblNwZWMucmVzcG9uc2VzKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWRSZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2VTcGVjID0gZ2V0T3BlcmF0aW9uUmVzcG9uc2VNYXAocGFyc2VkUmVzcG9uc2UpO1xuICAgIGNvbnN0IHsgZXJyb3IsIHNob3VsZFJldHVyblJlc3BvbnNlIH0gPSBoYW5kbGVFcnJvclJlc3BvbnNlKHBhcnNlZFJlc3BvbnNlLCBvcGVyYXRpb25TcGVjLCByZXNwb25zZVNwZWMsIG9wdGlvbnMpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2hvdWxkUmV0dXJuUmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICAgIH1cbiAgICAvLyBBbiBvcGVyYXRpb24gcmVzcG9uc2Ugc3BlYyBkb2VzIGV4aXN0IGZvciBjdXJyZW50IHN0YXR1cyBjb2RlLCBzb1xuICAgIC8vIHVzZSBpdCB0byBkZXNlcmlhbGl6ZSB0aGUgcmVzcG9uc2UuXG4gICAgaWYgKHJlc3BvbnNlU3BlYykge1xuICAgICAgICBpZiAocmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZVRvRGVzZXJpYWxpemUgPSBwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5O1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMuaXNYTUwgJiYgcmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIudHlwZS5uYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVUb0Rlc2VyaWFsaXplID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlVG9EZXNlcmlhbGl6ZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVRvRGVzZXJpYWxpemVbcmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIueG1sRWxlbWVudE5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5ID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc3BvbnNlU3BlYy5ib2R5TWFwcGVyLCB2YWx1ZVRvRGVzZXJpYWxpemUsIFwib3BlcmF0aW9uUmVzLnBhcnNlZEJvZHlcIiwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZGVzZXJpYWxpemVFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RFcnJvciA9IG5ldyBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5SZXN0RXJyb3IoYEVycm9yICR7ZGVzZXJpYWxpemVFcnJvcn0gb2NjdXJyZWQgaW4gZGVzZXJpYWxpemluZyB0aGUgcmVzcG9uc2VCb2R5IC0gJHtwYXJzZWRSZXNwb25zZS5ib2R5QXNUZXh0fWAsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcGFyc2VkUmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogcGFyc2VkUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzdEVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wZXJhdGlvblNwZWMuaHR0cE1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgICAgICAgIC8vIGhlYWQgbWV0aG9kcyBuZXZlciBoYXZlIGEgYm9keSwgYnV0IHdlIHJldHVybiBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgcHJlc2VuY2UvYWJzZW5jZSBvZiB0aGUgcmVzb3VyY2VcbiAgICAgICAgICAgIHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHkgPSByZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2VTcGVjLmhlYWRlcnNNYXBwZXIpIHtcbiAgICAgICAgICAgIHBhcnNlZFJlc3BvbnNlLnBhcnNlZEhlYWRlcnMgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzcG9uc2VTcGVjLmhlYWRlcnNNYXBwZXIsIHBhcnNlZFJlc3BvbnNlLmhlYWRlcnMudG9KU09OKCksIFwib3BlcmF0aW9uUmVzLnBhcnNlZEhlYWRlcnNcIiwgeyB4bWw6IHt9LCBpZ25vcmVVbmtub3duUHJvcGVydGllczogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkUmVzcG9uc2U7XG59XG5mdW5jdGlvbiBpc09wZXJhdGlvblNwZWNFbXB0eShvcGVyYXRpb25TcGVjKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRTdGF0dXNDb2RlcyA9IE9iamVjdC5rZXlzKG9wZXJhdGlvblNwZWMucmVzcG9uc2VzKTtcbiAgICByZXR1cm4gKGV4cGVjdGVkU3RhdHVzQ29kZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIChleHBlY3RlZFN0YXR1c0NvZGVzLmxlbmd0aCA9PT0gMSAmJiBleHBlY3RlZFN0YXR1c0NvZGVzWzBdID09PSBcImRlZmF1bHRcIikpO1xufVxuZnVuY3Rpb24gaGFuZGxlRXJyb3JSZXNwb25zZShwYXJzZWRSZXNwb25zZSwgb3BlcmF0aW9uU3BlYywgcmVzcG9uc2VTcGVjLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGlzU3VjY2Vzc0J5U3RhdHVzID0gMjAwIDw9IHBhcnNlZFJlc3BvbnNlLnN0YXR1cyAmJiBwYXJzZWRSZXNwb25zZS5zdGF0dXMgPCAzMDA7XG4gICAgY29uc3QgaXNFeHBlY3RlZFN0YXR1c0NvZGUgPSBpc09wZXJhdGlvblNwZWNFbXB0eShvcGVyYXRpb25TcGVjKVxuICAgICAgICA/IGlzU3VjY2Vzc0J5U3RhdHVzXG4gICAgICAgIDogISFyZXNwb25zZVNwZWM7XG4gICAgaWYgKGlzRXhwZWN0ZWRTdGF0dXNDb2RlKSB7XG4gICAgICAgIGlmIChyZXNwb25zZVNwZWMpIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VTcGVjLmlzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCwgc2hvdWxkUmV0dXJuUmVzcG9uc2U6IGZhbHNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCwgc2hvdWxkUmV0dXJuUmVzcG9uc2U6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZXJyb3JSZXNwb25zZVNwZWMgPSByZXNwb25zZVNwZWMgIT09IG51bGwgJiYgcmVzcG9uc2VTcGVjICE9PSB2b2lkIDAgPyByZXNwb25zZVNwZWMgOiBvcGVyYXRpb25TcGVjLnJlc3BvbnNlcy5kZWZhdWx0O1xuICAgIGNvbnN0IGluaXRpYWxFcnJvck1lc3NhZ2UgPSAoKF9hID0gcGFyc2VkUmVzcG9uc2UucmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGFzKHBhcnNlZFJlc3BvbnNlLnN0YXR1cykpXG4gICAgICAgID8gYFVuZXhwZWN0ZWQgc3RhdHVzIGNvZGU6ICR7cGFyc2VkUmVzcG9uc2Uuc3RhdHVzfWBcbiAgICAgICAgOiBwYXJzZWRSZXNwb25zZS5ib2R5QXNUZXh0O1xuICAgIGNvbnN0IGVycm9yID0gbmV3IGNvcmVfcmVzdF9waXBlbGluZV8xLlJlc3RFcnJvcihpbml0aWFsRXJyb3JNZXNzYWdlLCB7XG4gICAgICAgIHN0YXR1c0NvZGU6IHBhcnNlZFJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgcmVxdWVzdDogcGFyc2VkUmVzcG9uc2UucmVxdWVzdCxcbiAgICAgICAgcmVzcG9uc2U6IHBhcnNlZFJlc3BvbnNlLFxuICAgIH0pO1xuICAgIC8vIElmIHRoZSBpdGVtIGZhaWxlZCBidXQgdGhlcmUncyBubyBlcnJvciBzcGVjIG9yIGRlZmF1bHQgc3BlYyB0byBkZXNlcmlhbGl6ZSB0aGUgZXJyb3IsXG4gICAgLy8gd2Ugc2hvdWxkIGZhaWwgc28gd2UganVzdCB0aHJvdyB0aGUgcGFyc2VkIHJlc3BvbnNlXG4gICAgaWYgKCFlcnJvclJlc3BvbnNlU3BlYykge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdEJvZHlNYXBwZXIgPSBlcnJvclJlc3BvbnNlU3BlYy5ib2R5TWFwcGVyO1xuICAgIGNvbnN0IGRlZmF1bHRIZWFkZXJzTWFwcGVyID0gZXJyb3JSZXNwb25zZVNwZWMuaGVhZGVyc01hcHBlcjtcbiAgICB0cnkge1xuICAgICAgICAvLyBJZiBlcnJvciByZXNwb25zZSBoYXMgYSBib2R5LCB0cnkgdG8gZGVzZXJpYWxpemUgaXQgdXNpbmcgZGVmYXVsdCBib2R5IG1hcHBlci5cbiAgICAgICAgLy8gVGhlbiB0cnkgdG8gZXh0cmFjdCBlcnJvciBjb2RlICYgbWVzc2FnZSBmcm9tIGl0XG4gICAgICAgIGlmIChwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkUmVzcG9uc2UucGFyc2VkQm9keTtcbiAgICAgICAgICAgIGxldCBkZXNlcmlhbGl6ZWRFcnJvcjtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0Qm9keU1hcHBlcikge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZVRvRGVzZXJpYWxpemUgPSBwYXJzZWRCb2R5O1xuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb25TcGVjLmlzWE1MICYmIGRlZmF1bHRCb2R5TWFwcGVyLnR5cGUubmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvRGVzZXJpYWxpemUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudE5hbWUgPSBkZWZhdWx0Qm9keU1hcHBlci54bWxFbGVtZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZWRCb2R5ID09PSBcIm9iamVjdFwiICYmIGVsZW1lbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvRGVzZXJpYWxpemUgPSBwYXJzZWRCb2R5W2VsZW1lbnROYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRFcnJvciA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShkZWZhdWx0Qm9keU1hcHBlciwgdmFsdWVUb0Rlc2VyaWFsaXplLCBcImVycm9yLnJlc3BvbnNlLnBhcnNlZEJvZHlcIiwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5hbEVycm9yID0gcGFyc2VkQm9keS5lcnJvciB8fCBkZXNlcmlhbGl6ZWRFcnJvciB8fCBwYXJzZWRCb2R5O1xuICAgICAgICAgICAgZXJyb3IuY29kZSA9IGludGVybmFsRXJyb3IuY29kZTtcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbEVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gaW50ZXJuYWxFcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlZmF1bHRCb2R5TWFwcGVyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UucGFyc2VkQm9keSA9IGRlc2VyaWFsaXplZEVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIGVycm9yIHJlc3BvbnNlIGhhcyBoZWFkZXJzLCB0cnkgdG8gZGVzZXJpYWxpemUgaXQgdXNpbmcgZGVmYXVsdCBoZWFkZXIgbWFwcGVyXG4gICAgICAgIGlmIChwYXJzZWRSZXNwb25zZS5oZWFkZXJzICYmIGRlZmF1bHRIZWFkZXJzTWFwcGVyKSB7XG4gICAgICAgICAgICBlcnJvci5yZXNwb25zZS5wYXJzZWRIZWFkZXJzID1cbiAgICAgICAgICAgICAgICBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZGVmYXVsdEhlYWRlcnNNYXBwZXIsIHBhcnNlZFJlc3BvbnNlLmhlYWRlcnMudG9KU09OKCksIFwib3BlcmF0aW9uUmVzLnBhcnNlZEhlYWRlcnNcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGRlZmF1bHRFcnJvcikge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gYEVycm9yIFwiJHtkZWZhdWx0RXJyb3IubWVzc2FnZX1cIiBvY2N1cnJlZCBpbiBkZXNlcmlhbGl6aW5nIHRoZSByZXNwb25zZUJvZHkgLSBcIiR7cGFyc2VkUmVzcG9uc2UuYm9keUFzVGV4dH1cIiBmb3IgdGhlIGRlZmF1bHQgcmVzcG9uc2UuYDtcbiAgICB9XG4gICAgcmV0dXJuIHsgZXJyb3IsIHNob3VsZFJldHVyblJlc3BvbnNlOiBmYWxzZSB9O1xufVxuYXN5bmMgZnVuY3Rpb24gcGFyc2UoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCBvcGVyYXRpb25SZXNwb25zZSwgb3B0cywgcGFyc2VYTUwpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCEoKF9hID0gb3BlcmF0aW9uUmVzcG9uc2UucmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGFzKG9wZXJhdGlvblJlc3BvbnNlLnN0YXR1cykpICYmXG4gICAgICAgIG9wZXJhdGlvblJlc3BvbnNlLmJvZHlBc1RleHQpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IG9wZXJhdGlvblJlc3BvbnNlLmJvZHlBc1RleHQ7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gb3BlcmF0aW9uUmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikgfHwgXCJcIjtcbiAgICAgICAgY29uc3QgY29udGVudENvbXBvbmVudHMgPSAhY29udGVudFR5cGVcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogY29udGVudFR5cGUuc3BsaXQoXCI7XCIpLm1hcCgoY29tcG9uZW50KSA9PiBjb21wb25lbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoY29udGVudENvbXBvbmVudHMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgICAgY29udGVudENvbXBvbmVudHMuc29tZSgoY29tcG9uZW50KSA9PiBqc29uQ29udGVudFR5cGVzLmluZGV4T2YoY29tcG9uZW50KSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UucGFyc2VkQm9keSA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29udGVudENvbXBvbmVudHMuc29tZSgoY29tcG9uZW50KSA9PiB4bWxDb250ZW50VHlwZXMuaW5kZXhPZihjb21wb25lbnQpICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlWE1MKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNpbmcgWE1MIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgcGFyc2VYTUwodGV4dCwgb3B0cy54bWwpO1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlc3BvbnNlLnBhcnNlZEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25SZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgRXJyb3IgXCIke2Vycn1cIiBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSByZXNwb25zZSBib2R5IC0gJHtvcGVyYXRpb25SZXNwb25zZS5ib2R5QXNUZXh0fS5gO1xuICAgICAgICAgICAgY29uc3QgZXJyQ29kZSA9IGVyci5jb2RlIHx8IGNvcmVfcmVzdF9waXBlbGluZV8xLlJlc3RFcnJvci5QQVJTRV9FUlJPUjtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgY29yZV9yZXN0X3BpcGVsaW5lXzEuUmVzdEVycm9yKG1zZywge1xuICAgICAgICAgICAgICAgIGNvZGU6IGVyckNvZGUsXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogb3BlcmF0aW9uUmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IG9wZXJhdGlvblJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IG9wZXJhdGlvblJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRpb25SZXNwb25zZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlc2VyaWFsaXphdGlvblBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyID0gZXhwb3J0cy5nZXRTdHJlYW1pbmdSZXNwb25zZVN0YXR1c0NvZGVzID0gdm9pZCAwO1xuY29uc3Qgc2VyaWFsaXplcl9qc18xID0gcmVxdWlyZShcIi4vc2VyaWFsaXplci5qc1wiKTtcbi8qKlxuICogR2V0cyB0aGUgbGlzdCBvZiBzdGF0dXMgY29kZXMgZm9yIHN0cmVhbWluZyByZXNwb25zZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2RlcyhvcGVyYXRpb25TcGVjKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3Qgc3RhdHVzQ29kZSBpbiBvcGVyYXRpb25TcGVjLnJlc3BvbnNlcykge1xuICAgICAgICBjb25zdCBvcGVyYXRpb25SZXNwb25zZSA9IG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW3N0YXR1c0NvZGVdO1xuICAgICAgICBpZiAob3BlcmF0aW9uUmVzcG9uc2UuYm9keU1hcHBlciAmJlxuICAgICAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UuYm9keU1hcHBlci50eXBlLm5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU3RyZWFtKSB7XG4gICAgICAgICAgICByZXN1bHQuYWRkKE51bWJlcihzdGF0dXNDb2RlKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2RlcyA9IGdldFN0cmVhbWluZ1Jlc3BvbnNlU3RhdHVzQ29kZXM7XG4vKipcbiAqIEdldCB0aGUgcGF0aCB0byB0aGlzIHBhcmFtZXRlcidzIHZhbHVlIGFzIGEgZG90dGVkIHN0cmluZyAoYS5iLmMpLlxuICogQHBhcmFtIHBhcmFtZXRlciAtIFRoZSBwYXJhbWV0ZXIgdG8gZ2V0IHRoZSBwYXRoIHN0cmluZyBmb3IuXG4gKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGlzIHBhcmFtZXRlcidzIHZhbHVlIGFzIGEgZG90dGVkIHN0cmluZy5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcihwYXJhbWV0ZXIpIHtcbiAgICBjb25zdCB7IHBhcmFtZXRlclBhdGgsIG1hcHBlciB9ID0gcGFyYW1ldGVyO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJlc3VsdCA9IHBhcmFtZXRlclBhdGg7XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVyUGF0aCkpIHtcbiAgICAgICAgcmVzdWx0ID0gcGFyYW1ldGVyUGF0aC5qb2luKFwiLlwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIgPSBnZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyZmFjZUhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXJpYWxpemVSZXF1ZXN0Qm9keSA9IGV4cG9ydHMuc2VyaWFsaXplSGVhZGVycyA9IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeSA9IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSB2b2lkIDA7XG5jb25zdCBpbnRlcmZhY2VzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VzLmpzXCIpO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IHNlcmlhbGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6ZXIuanNcIik7XG5jb25zdCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VIZWxwZXJzLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHNlcmlhbGl6YXRpb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBcInNlcmlhbGl6YXRpb25Qb2xpY3lcIjtcbi8qKlxuICogVGhpcyBwb2xpY3kgaGFuZGxlcyBhc3NlbWJsaW5nIHRoZSByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMgdXNpbmdcbiAqIGFuIE9wZXJhdGlvblNwZWMgYW5kIE9wZXJhdGlvbkFyZ3VtZW50cyBvbiB0aGUgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXphdGlvblBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdHJpbmdpZnlYTUwgPSBvcHRpb25zLnN0cmluZ2lmeVhNTDtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocmVxdWVzdCk7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25TcGVjID0gb3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblNwZWM7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25Bcmd1bWVudHMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uQXJndW1lbnRzO1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMgJiYgb3BlcmF0aW9uQXJndW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplSGVhZGVycyhyZXF1ZXN0LCBvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpO1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZVJlcXVlc3RCb2R5KHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYywgc3RyaW5naWZ5WE1MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3kgPSBzZXJpYWxpemF0aW9uUG9saWN5O1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplSGVhZGVycyhyZXF1ZXN0LCBvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmIChvcGVyYXRpb25TcGVjLmhlYWRlclBhcmFtZXRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXJQYXJhbWV0ZXIgb2Ygb3BlcmF0aW9uU3BlYy5oZWFkZXJQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBsZXQgaGVhZGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIGhlYWRlclBhcmFtZXRlcik7XG4gICAgICAgICAgICBpZiAoKGhlYWRlclZhbHVlICE9PSBudWxsICYmIGhlYWRlclZhbHVlICE9PSB1bmRlZmluZWQpIHx8IGhlYWRlclBhcmFtZXRlci5tYXBwZXIucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJWYWx1ZSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUoaGVhZGVyUGFyYW1ldGVyLm1hcHBlciwgaGVhZGVyVmFsdWUsICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGhlYWRlclBhcmFtZXRlcikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlckNvbGxlY3Rpb25QcmVmaXggPSBoZWFkZXJQYXJhbWV0ZXIubWFwcGVyXG4gICAgICAgICAgICAgICAgICAgIC5oZWFkZXJDb2xsZWN0aW9uUHJlZml4O1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXJDb2xsZWN0aW9uUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChoZWFkZXJDb2xsZWN0aW9uUHJlZml4ICsga2V5LCBoZWFkZXJWYWx1ZVtrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChoZWFkZXJQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lIHx8ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGhlYWRlclBhcmFtZXRlciksIGhlYWRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY3VzdG9tSGVhZGVycyA9IChfYiA9IChfYSA9IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVxdWVzdE9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jdXN0b21IZWFkZXJzO1xuICAgIGlmIChjdXN0b21IZWFkZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY3VzdG9tSGVhZGVyTmFtZSBvZiBPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJzKSkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChjdXN0b21IZWFkZXJOYW1lLCBjdXN0b21IZWFkZXJzW2N1c3RvbUhlYWRlck5hbWVdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuc2VyaWFsaXplSGVhZGVycyA9IHNlcmlhbGl6ZUhlYWRlcnM7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVSZXF1ZXN0Qm9keShyZXF1ZXN0LCBvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMsIHN0cmluZ2lmeVhNTCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJYTUwgc2VyaWFsaXphdGlvbiB1bnN1cHBvcnRlZCFcIik7XG59KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICBjb25zdCBzZXJpYWxpemVyT3B0aW9ucyA9IChfYSA9IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VyaWFsaXplck9wdGlvbnM7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgIHhtbDoge1xuICAgICAgICAgICAgcm9vdE5hbWU6IChfYiA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiXCIsXG4gICAgICAgICAgICBpbmNsdWRlUm9vdDogKF9jID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZmFsc2UsXG4gICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2QgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHhtbENoYXJLZXkgPSB1cGRhdGVkT3B0aW9ucy54bWwueG1sQ2hhcktleTtcbiAgICBpZiAob3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keSAmJiBvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5Lm1hcHBlcikge1xuICAgICAgICByZXF1ZXN0LmJvZHkgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkpO1xuICAgICAgICBjb25zdCBib2R5TWFwcGVyID0gb3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keS5tYXBwZXI7XG4gICAgICAgIGNvbnN0IHsgcmVxdWlyZWQsIHNlcmlhbGl6ZWROYW1lLCB4bWxOYW1lLCB4bWxFbGVtZW50TmFtZSwgeG1sTmFtZXNwYWNlLCB4bWxOYW1lc3BhY2VQcmVmaXgsIG51bGxhYmxlLCB9ID0gYm9keU1hcHBlcjtcbiAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBib2R5TWFwcGVyLnR5cGUubmFtZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICgocmVxdWVzdC5ib2R5ICE9PSB1bmRlZmluZWQgJiYgcmVxdWVzdC5ib2R5ICE9PSBudWxsKSB8fFxuICAgICAgICAgICAgICAgIChudWxsYWJsZSAmJiByZXF1ZXN0LmJvZHkgPT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keVBhcmFtZXRlclBhdGhTdHJpbmcgPSAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGJvZHlNYXBwZXIsIHJlcXVlc3QuYm9keSwgcmVxdWVzdEJvZHlQYXJhbWV0ZXJQYXRoU3RyaW5nLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTdHJlYW0gPSB0eXBlTmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TdHJlYW07XG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMuaXNYTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sbnNLZXkgPSB4bWxOYW1lc3BhY2VQcmVmaXggPyBgeG1sbnM6JHt4bWxOYW1lc3BhY2VQcmVmaXh9YCA6IFwieG1sbnNcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRYbWxWYWx1ZVdpdGhOYW1lc3BhY2UoeG1sTmFtZXNwYWNlLCB4bWxuc0tleSwgdHlwZU5hbWUsIHJlcXVlc3QuYm9keSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZU5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IHN0cmluZ2lmeVhNTChwcmVwYXJlWE1MUm9vdExpc3QodmFsdWUsIHhtbEVsZW1lbnROYW1lIHx8IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWUsIHhtbG5zS2V5LCB4bWxOYW1lc3BhY2UpLCB7IHJvb3ROYW1lOiB4bWxOYW1lIHx8IHNlcmlhbGl6ZWROYW1lLCB4bWxDaGFyS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc1N0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gc3RyaW5naWZ5WE1MKHZhbHVlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdE5hbWU6IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlN0cmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAoKChfZSA9IG9wZXJhdGlvblNwZWMuY29udGVudFR5cGUpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5tYXRjaChcInRleHQvcGxhaW5cIikpIHx8IG9wZXJhdGlvblNwZWMubWVkaWFUeXBlID09PSBcInRleHRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFN0cmluZyBzZXJpYWxpemVyIGhhcyB2YWxpZGF0ZWQgdGhhdCByZXF1ZXN0IGJvZHkgaXMgYSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gc28ganVzdCBzZW5kIHRoZSBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3QuYm9keSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBcIiR7ZXJyb3IubWVzc2FnZX1cIiBvY2N1cnJlZCBpbiBzZXJpYWxpemluZyB0aGUgcGF5bG9hZCAtICR7SlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZE5hbWUsIHVuZGVmaW5lZCwgXCIgIFwiKX0uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAob3BlcmF0aW9uU3BlYy5mb3JtRGF0YVBhcmFtZXRlcnMgJiYgb3BlcmF0aW9uU3BlYy5mb3JtRGF0YVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXF1ZXN0LmZvcm1EYXRhID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZm9ybURhdGFQYXJhbWV0ZXIgb2Ygb3BlcmF0aW9uU3BlYy5mb3JtRGF0YVBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhUGFyYW1ldGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIGZvcm1EYXRhUGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGlmIChmb3JtRGF0YVBhcmFtZXRlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgZm9ybURhdGFQYXJhbWV0ZXJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhUGFyYW1ldGVyUHJvcGVydHlOYW1lID0gZm9ybURhdGFQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lIHx8ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGZvcm1EYXRhUGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmZvcm1EYXRhW2Zvcm1EYXRhUGFyYW1ldGVyUHJvcGVydHlOYW1lXSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUoZm9ybURhdGFQYXJhbWV0ZXIubWFwcGVyLCBmb3JtRGF0YVBhcmFtZXRlclZhbHVlLCAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKShmb3JtRGF0YVBhcmFtZXRlciksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuc2VyaWFsaXplUmVxdWVzdEJvZHkgPSBzZXJpYWxpemVSZXF1ZXN0Qm9keTtcbi8qKlxuICogQWRkcyBhbiB4bWwgbmFtZXNwYWNlIHRvIHRoZSB4bWwgc2VyaWFsaXplZCBvYmplY3QgaWYgbmVlZGVkLCBvdGhlcndpc2UgaXQganVzdCByZXR1cm5zIHRoZSB2YWx1ZSBpdHNlbGZcbiAqL1xuZnVuY3Rpb24gZ2V0WG1sVmFsdWVXaXRoTmFtZXNwYWNlKHhtbE5hbWVzcGFjZSwgeG1sbnNLZXksIHR5cGVOYW1lLCBzZXJpYWxpemVkVmFsdWUsIG9wdGlvbnMpIHtcbiAgICAvLyBDb21wb3NpdGUgYW5kIFNlcXVlbmNlIHNjaGVtYXMgYWxyZWFkeSBnb3QgdGhlaXIgcm9vdCBuYW1lc3BhY2Ugc2V0IGR1cmluZyBzZXJpYWxpemF0aW9uXG4gICAgLy8gV2UganVzdCBuZWVkIHRvIGFkZCB4bWxucyB0byB0aGUgb3RoZXIgc2NoZW1hIHR5cGVzXG4gICAgaWYgKHhtbE5hbWVzcGFjZSAmJiAhW1wiQ29tcG9zaXRlXCIsIFwiU2VxdWVuY2VcIiwgXCJEaWN0aW9uYXJ5XCJdLmluY2x1ZGVzKHR5cGVOYW1lKSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgcmVzdWx0W29wdGlvbnMueG1sLnhtbENoYXJLZXldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICByZXN1bHRbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbG5zS2V5XTogeG1sTmFtZXNwYWNlIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWU7XG59XG5mdW5jdGlvbiBwcmVwYXJlWE1MUm9vdExpc3Qob2JqLCBlbGVtZW50TmFtZSwgeG1sTmFtZXNwYWNlS2V5LCB4bWxOYW1lc3BhY2UpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmogPSBbb2JqXTtcbiAgICB9XG4gICAgaWYgKCF4bWxOYW1lc3BhY2VLZXkgfHwgIXhtbE5hbWVzcGFjZSkge1xuICAgICAgICByZXR1cm4geyBbZWxlbWVudE5hbWVdOiBvYmogfTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0geyBbZWxlbWVudE5hbWVdOiBvYmogfTtcbiAgICByZXN1bHRbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbE5hbWVzcGFjZUtleV06IHhtbE5hbWVzcGFjZSB9O1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJpYWxpemF0aW9uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQ2xpZW50UGlwZWxpbmUgPSB2b2lkIDA7XG5jb25zdCBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qc1wiKTtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFBpcGVsaW5lIGZvciB1c2Ugd2l0aCBhIFNlcnZpY2UgQ2xpZW50LlxuICogQWRkcyBpbiBkZXNlcmlhbGl6YXRpb25Qb2xpY3kgYnkgZGVmYXVsdC5cbiAqIEFsc28gYWRkcyBpbiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5IGlmIHBhc3NlZCBhIFRva2VuQ3JlZGVudGlhbC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjdXN0b21pemUgdGhlIGNyZWF0ZWQgcGlwZWxpbmUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudFBpcGVsaW5lKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHBpcGVsaW5lID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMpKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9KTtcbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsT3B0aW9ucykge1xuICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kpKHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWw6IG9wdGlvbnMuY3JlZGVudGlhbE9wdGlvbnMuY3JlZGVudGlhbCxcbiAgICAgICAgICAgIHNjb3Blczogb3B0aW9ucy5jcmVkZW50aWFsT3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgc2VyaWFsaXphdGlvblBvbGljeV9qc18xLnNlcmlhbGl6YXRpb25Qb2xpY3kpKG9wdGlvbnMuc2VyaWFsaXphdGlvbk9wdGlvbnMpLCB7IHBoYXNlOiBcIlNlcmlhbGl6ZVwiIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGVzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuZGVzZXJpYWxpemF0aW9uUG9saWN5KShvcHRpb25zLmRlc2VyaWFsaXphdGlvbk9wdGlvbnMpLCB7XG4gICAgICAgIHBoYXNlOiBcIkRlc2VyaWFsaXplXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHBpcGVsaW5lO1xufVxuZXhwb3J0cy5jcmVhdGVDbGllbnRQaXBlbGluZSA9IGNyZWF0ZUNsaWVudFBpcGVsaW5lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZWxpbmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5sZXQgY2FjaGVkSHR0cENsaWVudDtcbmZ1bmN0aW9uIGdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50KCkge1xuICAgIGlmICghY2FjaGVkSHR0cENsaWVudCkge1xuICAgICAgICBjYWNoZWRIdHRwQ2xpZW50ID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50KSgpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkSHR0cENsaWVudDtcbn1cbmV4cG9ydHMuZ2V0Q2FjaGVkRGVmYXVsdEh0dHBDbGllbnQgPSBnZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBDbGllbnRDYWNoZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFwcGVuZFF1ZXJ5UGFyYW1zID0gZXhwb3J0cy5nZXRSZXF1ZXN0VXJsID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IGludGVyZmFjZUhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZUhlbHBlcnMuanNcIik7XG5jb25zdCBDb2xsZWN0aW9uRm9ybWF0VG9EZWxpbWl0ZXJNYXAgPSB7XG4gICAgQ1NWOiBcIixcIixcbiAgICBTU1Y6IFwiIFwiLFxuICAgIE11bHRpOiBcIk11bHRpXCIsXG4gICAgVFNWOiBcIlxcdFwiLFxuICAgIFBpcGVzOiBcInxcIixcbn07XG5mdW5jdGlvbiBnZXRSZXF1ZXN0VXJsKGJhc2VVcmksIG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpIHtcbiAgICBjb25zdCB1cmxSZXBsYWNlbWVudHMgPSBjYWxjdWxhdGVVcmxSZXBsYWNlbWVudHMob3BlcmF0aW9uU3BlYywgb3BlcmF0aW9uQXJndW1lbnRzLCBmYWxsYmFja09iamVjdCk7XG4gICAgbGV0IGlzQWJzb2x1dGVQYXRoID0gZmFsc2U7XG4gICAgbGV0IHJlcXVlc3RVcmwgPSByZXBsYWNlQWxsKGJhc2VVcmksIHVybFJlcGxhY2VtZW50cyk7XG4gICAgaWYgKG9wZXJhdGlvblNwZWMucGF0aCkge1xuICAgICAgICBsZXQgcGF0aCA9IHJlcGxhY2VBbGwob3BlcmF0aW9uU3BlYy5wYXRoLCB1cmxSZXBsYWNlbWVudHMpO1xuICAgICAgICAvLyBRVUlSSzogc29tZXRpbWVzIHdlIGdldCBhIHBhdGggY29tcG9uZW50IGxpa2UgL3tuZXh0TGlua31cbiAgICAgICAgLy8gd2hpY2ggbWF5IGJlIGEgZnVsbHkgZm9ybWVkIFVSTCB3aXRoIGEgbGVhZGluZyAvLiBJbiB0aGF0IGNhc2UsIHdlIHNob3VsZFxuICAgICAgICAvLyByZW1vdmUgdGhlIGxlYWRpbmcgL1xuICAgICAgICBpZiAob3BlcmF0aW9uU3BlYy5wYXRoID09PSBcIi97bmV4dExpbmt9XCIgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFFVSVJLOiBzb21ldGltZXMgd2UgZ2V0IGEgcGF0aCBjb21wb25lbnQgbGlrZSB7bmV4dExpbmt9XG4gICAgICAgIC8vIHdoaWNoIG1heSBiZSBhIGZ1bGx5IGZvcm1lZCBVUkwuIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkXG4gICAgICAgIC8vIGlnbm9yZSB0aGUgYmFzZVVyaS5cbiAgICAgICAgaWYgKGlzQWJzb2x1dGVVcmwocGF0aCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3RVcmwgPSBwYXRoO1xuICAgICAgICAgICAgaXNBYnNvbHV0ZVBhdGggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdFVybCA9IGFwcGVuZFBhdGgocmVxdWVzdFVybCwgcGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeyBxdWVyeVBhcmFtcywgc2VxdWVuY2VQYXJhbXMgfSA9IGNhbGN1bGF0ZVF1ZXJ5UGFyYW1ldGVycyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KTtcbiAgICAvKipcbiAgICAgKiBOb3RpY2UgdGhhdCB0aGlzIGNhbGwgc2V0cyB0aGUgYG5vT3ZlcndyaXRlYCBwYXJhbWV0ZXIgdG8gdHJ1ZSBpZiB0aGUgYHJlcXVlc3RVcmxgXG4gICAgICogaXMgYW4gYWJzb2x1dGUgcGF0aC4gVGhpcyBlbnN1cmVzIHRoYXQgZXhpc3RpbmcgcXVlcnkgcGFyYW1ldGVyIHZhbHVlcyBpbiBgcmVxdWVzdFVybGBcbiAgICAgKiBkbyBub3QgZ2V0IG92ZXJ3cml0dGVuLiBPbiB0aGUgb3RoZXIgaGFuZCB3aGVuIGByZXF1ZXN0VXJsYCBpcyBub3QgYWJzb2x1dGUgcGF0aCwgaXRcbiAgICAgKiBpcyBzdGlsbCBiZWluZyBidWlsdCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIG92ZXJ3cml0ZS5cbiAgICAgKi9cbiAgICByZXF1ZXN0VXJsID0gYXBwZW5kUXVlcnlQYXJhbXMocmVxdWVzdFVybCwgcXVlcnlQYXJhbXMsIHNlcXVlbmNlUGFyYW1zLCBpc0Fic29sdXRlUGF0aCk7XG4gICAgcmV0dXJuIHJlcXVlc3RVcmw7XG59XG5leHBvcnRzLmdldFJlcXVlc3RVcmwgPSBnZXRSZXF1ZXN0VXJsO1xuZnVuY3Rpb24gcmVwbGFjZUFsbChpbnB1dCwgcmVwbGFjZW1lbnRzKSB7XG4gICAgbGV0IHJlc3VsdCA9IGlucHV0O1xuICAgIGZvciAoY29uc3QgW3NlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWVdIG9mIHJlcGxhY2VtZW50cykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuc3BsaXQoc2VhcmNoVmFsdWUpLmpvaW4ocmVwbGFjZVZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZVVybFJlcGxhY2VtZW50cyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBpZiAoKF9hID0gb3BlcmF0aW9uU3BlYy51cmxQYXJhbWV0ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgdXJsUGFyYW1ldGVyIG9mIG9wZXJhdGlvblNwZWMudXJsUGFyYW1ldGVycykge1xuICAgICAgICAgICAgbGV0IHVybFBhcmFtZXRlclZhbHVlID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlcikob3BlcmF0aW9uQXJndW1lbnRzLCB1cmxQYXJhbWV0ZXIsIGZhbGxiYWNrT2JqZWN0KTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGhTdHJpbmcgPSAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKSh1cmxQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgdXJsUGFyYW1ldGVyVmFsdWUgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuc2VyaWFsaXplKHVybFBhcmFtZXRlci5tYXBwZXIsIHVybFBhcmFtZXRlclZhbHVlLCBwYXJhbWV0ZXJQYXRoU3RyaW5nKTtcbiAgICAgICAgICAgIGlmICghdXJsUGFyYW1ldGVyLnNraXBFbmNvZGluZykge1xuICAgICAgICAgICAgICAgIHVybFBhcmFtZXRlclZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHVybFBhcmFtZXRlclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zZXQoYHske3VybFBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgcGFyYW1ldGVyUGF0aFN0cmluZ319YCwgdXJsUGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBpc0Fic29sdXRlVXJsKHVybCkge1xuICAgIHJldHVybiB1cmwuaW5jbHVkZXMoXCI6Ly9cIik7XG59XG5mdW5jdGlvbiBhcHBlbmRQYXRoKHVybCwgcGF0aFRvQXBwZW5kKSB7XG4gICAgaWYgKCFwYXRoVG9BcHBlbmQpIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBuZXdQYXRoID0gcGFyc2VkVXJsLnBhdGhuYW1lO1xuICAgIGlmICghbmV3UGF0aC5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgbmV3UGF0aCA9IGAke25ld1BhdGh9L2A7XG4gICAgfVxuICAgIGlmIChwYXRoVG9BcHBlbmQuc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcGF0aFRvQXBwZW5kID0gcGF0aFRvQXBwZW5kLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoU3RhcnQgPSBwYXRoVG9BcHBlbmQuaW5kZXhPZihcIj9cIik7XG4gICAgaWYgKHNlYXJjaFN0YXJ0ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBwYXRoID0gcGF0aFRvQXBwZW5kLnN1YnN0cmluZygwLCBzZWFyY2hTdGFydCk7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IHBhdGhUb0FwcGVuZC5zdWJzdHJpbmcoc2VhcmNoU3RhcnQgKyAxKTtcbiAgICAgICAgbmV3UGF0aCA9IG5ld1BhdGggKyBwYXRoO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgICBwYXJzZWRVcmwuc2VhcmNoID0gcGFyc2VkVXJsLnNlYXJjaCA/IGAke3BhcnNlZFVybC5zZWFyY2h9JiR7c2VhcmNofWAgOiBzZWFyY2g7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG5ld1BhdGggPSBuZXdQYXRoICsgcGF0aFRvQXBwZW5kO1xuICAgIH1cbiAgICBwYXJzZWRVcmwucGF0aG5hbWUgPSBuZXdQYXRoO1xuICAgIHJldHVybiBwYXJzZWRVcmwudG9TdHJpbmcoKTtcbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZVF1ZXJ5UGFyYW1ldGVycyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBzZXF1ZW5jZVBhcmFtcyA9IG5ldyBTZXQoKTtcbiAgICBpZiAoKF9hID0gb3BlcmF0aW9uU3BlYy5xdWVyeVBhcmFtZXRlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBxdWVyeVBhcmFtZXRlciBvZiBvcGVyYXRpb25TcGVjLnF1ZXJ5UGFyYW1ldGVycykge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1ldGVyLm1hcHBlci50eXBlLm5hbWUgPT09IFwiU2VxdWVuY2VcIiAmJiBxdWVyeVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUpIHtcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZVBhcmFtcy5hZGQocXVlcnlQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBxdWVyeVBhcmFtZXRlclZhbHVlID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlcikob3BlcmF0aW9uQXJndW1lbnRzLCBxdWVyeVBhcmFtZXRlciwgZmFsbGJhY2tPYmplY3QpO1xuICAgICAgICAgICAgaWYgKChxdWVyeVBhcmFtZXRlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgcXVlcnlQYXJhbWV0ZXJWYWx1ZSAhPT0gbnVsbCkgfHxcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlci5tYXBwZXIucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLnNlcmlhbGl6ZShxdWVyeVBhcmFtZXRlci5tYXBwZXIsIHF1ZXJ5UGFyYW1ldGVyVmFsdWUsICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKHF1ZXJ5UGFyYW1ldGVyKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsaW1pdGVyID0gcXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdFxuICAgICAgICAgICAgICAgICAgICA/IENvbGxlY3Rpb25Gb3JtYXRUb0RlbGltaXRlck1hcFtxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0XVxuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBudWxsIGFuZCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJWYWx1ZSA9IHF1ZXJ5UGFyYW1ldGVyVmFsdWUubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXQgPT09IFwiTXVsdGlcIiAmJiBxdWVyeVBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShxdWVyeVBhcmFtZXRlclZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAocXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJTU1ZcIiB8fCBxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0ID09PSBcIlRTVlwiKSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5qb2luKGRlbGltaXRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcXVlcnlQYXJhbWV0ZXIuc2tpcEVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5UGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5UGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEpvaW4gcGlwZXMgYW5kIENTViAqYWZ0ZXIqIGVuY29kaW5nLCBvciB0aGUgc2VydmVyIHdpbGwgYmUgdXBzZXQuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbWV0ZXJWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHF1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXQgPT09IFwiQ1NWXCIgfHwgcXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJQaXBlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5qb2luKGRlbGltaXRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQocXVlcnlQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lIHx8ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKHF1ZXJ5UGFyYW1ldGVyKSwgcXVlcnlQYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgc2VxdWVuY2VQYXJhbXMsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHNpbXBsZVBhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgaWYgKCFxdWVyeVN0cmluZyB8fCBxdWVyeVN0cmluZ1swXSAhPT0gXCI/XCIpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHRoZSBsZWFkaW5nID9cbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnNsaWNlKDEpO1xuICAgIGNvbnN0IHBhaXJzID0gcXVlcnlTdHJpbmcuc3BsaXQoXCImXCIpO1xuICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gcGFpci5zcGxpdChcIj1cIiwgMik7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSByZXN1bHQuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1ZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChuYW1lLCBbZXhpc3RpbmdWYWx1ZSwgdmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBhcHBlbmRRdWVyeVBhcmFtcyh1cmwsIHF1ZXJ5UGFyYW1zLCBzZXF1ZW5jZVBhcmFtcywgbm9PdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgIGlmIChxdWVyeVBhcmFtcy5zaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKTtcbiAgICAvLyBRVUlSSzogcGFyc2VkVXJsLnNlYXJjaFBhcmFtcyB3aWxsIGhhdmUgdGhlaXIgbmFtZS92YWx1ZSBwYWlycyBkZWNvZGVkLCB3aGljaFxuICAgIC8vIGNhbiBjaGFuZ2UgdGhlaXIgbWVhbmluZyB0byB0aGUgc2VydmVyLCBzdWNoIGFzIGluIHRoZSBjYXNlIG9mIGEgU0FTIHNpZ25hdHVyZS5cbiAgICAvLyBUbyBhdm9pZCBhY2NpZGVudGFsbHkgdW4tZW5jb2RpbmcgYSBxdWVyeSBwYXJhbSwgd2UgcGFyc2UgdGhlIGtleS92YWx1ZXMgb3Vyc2VsdmVzXG4gICAgY29uc3QgY29tYmluZWRQYXJhbXMgPSBzaW1wbGVQYXJzZVF1ZXJ5UGFyYW1zKHBhcnNlZFVybC5zZWFyY2gpO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBxdWVyeVBhcmFtcykge1xuICAgICAgICBjb25zdCBleGlzdGluZ1ZhbHVlID0gY29tYmluZWRQYXJhbXMuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdWYWx1ZS5wdXNoKC4uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVNldCA9IG5ldyBTZXQoZXhpc3RpbmdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgY29tYmluZWRQYXJhbXMuc2V0KG5hbWUsIEFycmF5LmZyb20odmFsdWVTZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nVmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhpc3RpbmdWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUudW5zaGlmdChleGlzdGluZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlcXVlbmNlUGFyYW1zLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIGNvbWJpbmVkUGFyYW1zLnNldChuYW1lLCBbZXhpc3RpbmdWYWx1ZSwgdmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbm9PdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFBhcmFtcy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29tYmluZWRQYXJhbXMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzZWFyY2hQaWVjZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgY29tYmluZWRQYXJhbXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7bmFtZX09JHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgLy8gUVVJUks6IElmIHdlIGdldCBhbiBhcnJheSBvZiB2YWx1ZXMsIGluY2x1ZGUgbXVsdGlwbGUga2V5L3ZhbHVlIHBhaXJzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YlZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7bmFtZX09JHtzdWJWYWx1ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlYXJjaFBpZWNlcy5wdXNoKGAke25hbWV9PSR7dmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUVVJUks6IHdlIGhhdmUgdG8gc2V0IHNlYXJjaCBtYW51YWxseSBhcyBzZWFyY2hQYXJhbXMgd2lsbCBlbmNvZGUgY29tbWEgd2hlbiBpdCBzaG91bGRuJ3QuXG4gICAgcGFyc2VkVXJsLnNlYXJjaCA9IHNlYXJjaFBpZWNlcy5sZW5ndGggPyBgPyR7c2VhcmNoUGllY2VzLmpvaW4oXCImXCIpfWAgOiBcIlwiO1xuICAgIHJldHVybiBwYXJzZWRVcmwudG9TdHJpbmcoKTtcbn1cbmV4cG9ydHMuYXBwZW5kUXVlcnlQYXJhbXMgPSBhcHBlbmRRdWVyeVBhcmFtcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVybEhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2dnZXIgPSB2b2lkIDA7XG5jb25zdCBsb2dnZXJfMSA9IHJlcXVpcmUoXCJAYXp1cmUvbG9nZ2VyXCIpO1xuZXhwb3J0cy5sb2dnZXIgPSAoMCwgbG9nZ2VyXzEuY3JlYXRlQ2xpZW50TG9nZ2VyKShcImNvcmUtY2xpZW50XCIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VydmljZUNsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBwaXBlbGluZV9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmUuanNcIik7XG5jb25zdCB1dGlsc19qc18xID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBodHRwQ2xpZW50Q2FjaGVfanNfMSA9IHJlcXVpcmUoXCIuL2h0dHBDbGllbnRDYWNoZS5qc1wiKTtcbmNvbnN0IG9wZXJhdGlvbkhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbkhlbHBlcnMuanNcIik7XG5jb25zdCB1cmxIZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi91cmxIZWxwZXJzLmpzXCIpO1xuY29uc3QgaW50ZXJmYWNlSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlSGVscGVycy5qc1wiKTtcbmNvbnN0IGxvZ19qc18xID0gcmVxdWlyZShcIi4vbG9nLmpzXCIpO1xuLyoqXG4gKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU2VydmljZUNsaWVudC5cbiAqL1xuY2xhc3MgU2VydmljZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIFNlcnZpY2VDbGllbnQgY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbCAtIFRoZSBjcmVkZW50aWFscyB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHNlcnZpY2UgY2xpZW50IG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RDb250ZW50VHlwZSA9IG9wdGlvbnMucmVxdWVzdENvbnRlbnRUeXBlO1xuICAgICAgICB0aGlzLl9lbmRwb2ludCA9IChfYSA9IG9wdGlvbnMuZW5kcG9pbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG9wdGlvbnMuYmFzZVVyaTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYmFzZVVyaSkge1xuICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoXCJUaGUgYmFzZVVyaSBvcHRpb24gZm9yIFNESyBDbGllbnRzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgZW5kcG9pbnQgaW5zdGVhZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24gPSBvcHRpb25zLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uO1xuICAgICAgICB0aGlzLl9odHRwQ2xpZW50ID0gb3B0aW9ucy5odHRwQ2xpZW50IHx8ICgwLCBodHRwQ2xpZW50Q2FjaGVfanNfMS5nZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCkoKTtcbiAgICAgICAgdGhpcy5waXBlbGluZSA9IG9wdGlvbnMucGlwZWxpbmUgfHwgY3JlYXRlRGVmYXVsdFBpcGVsaW5lKG9wdGlvbnMpO1xuICAgICAgICBpZiAoKF9iID0gb3B0aW9ucy5hZGRpdGlvbmFsUG9saWNpZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBwb2xpY3ksIHBvc2l0aW9uIH0gb2Ygb3B0aW9ucy5hZGRpdGlvbmFsUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBTaWduIGhhcHBlbnMgYWZ0ZXIgUmV0cnkgYW5kIGlzIGNvbW1vbmx5IG5lZWRlZCB0byBvY2N1clxuICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBwb2xpY2llcyB0aGF0IGludGVyY2VwdCBwb3N0LXJldHJ5LlxuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUGhhc2UgPSBwb3NpdGlvbiA9PT0gXCJwZXJSZXRyeVwiID8gXCJTaWduXCIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5waXBlbGluZS5hZGRQb2xpY3kocG9saWN5LCB7XG4gICAgICAgICAgICAgICAgICAgIGFmdGVyUGhhc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCB0aGUgcHJvdmlkZWQgaHR0cFJlcXVlc3QuXG4gICAgICovXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZS5zZW5kUmVxdWVzdCh0aGlzLl9odHRwQ2xpZW50LCByZXF1ZXN0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCBhbiBIVFRQIHJlcXVlc3QgdGhhdCBpcyBwb3B1bGF0ZWQgdXNpbmcgdGhlIHByb3ZpZGVkIE9wZXJhdGlvblNwZWMuXG4gICAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGVkIHJlc3VsdCBvZiB0aGUgcmVxdWVzdCwgYmFzZWQgb24gdGhlIE9wZXJhdGlvblNwZWMuXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMgdGhhdCB0aGUgSFRUUCByZXF1ZXN0J3MgdGVtcGxhdGVkIHZhbHVlcyB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25TcGVjIC0gVGhlIE9wZXJhdGlvblNwZWMgdG8gdXNlIHRvIHBvcHVsYXRlIHRoZSBodHRwUmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBvcGVyYXRpb25TcGVjLmJhc2VVcmwgfHwgdGhpcy5fZW5kcG9pbnQ7XG4gICAgICAgIGlmICghZW5kcG9pbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIklmIG9wZXJhdGlvblNwZWMuYmFzZVVybCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBTZXJ2aWNlQ2xpZW50IG11c3QgaGF2ZSBhIGVuZHBvaW50IHN0cmluZyBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBiYXNlIFVSTCB0byB1c2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRlbXBsYXRpemVkIFVSTHMgc29tZXRpbWVzIHJlZmVyZW5jZSBwcm9wZXJ0aWVzIG9uIHRoZSBTZXJ2aWNlQ2xpZW50IGNoaWxkIGNsYXNzLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHBhc3MgYHRoaXNgIGJlbG93IGluIG9yZGVyIHRvIHNlYXJjaCB0aGVzZSBwcm9wZXJ0aWVzIGlmIHRoZXkncmVcbiAgICAgICAgLy8gbm90IHBhcnQgb2YgT3BlcmF0aW9uQXJndW1lbnRzXG4gICAgICAgIGNvbnN0IHVybCA9ICgwLCB1cmxIZWxwZXJzX2pzXzEuZ2V0UmVxdWVzdFVybCkoZW5kcG9pbnQsIG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgdGhpcyk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlUGlwZWxpbmVSZXF1ZXN0KSh7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXF1ZXN0Lm1ldGhvZCA9IG9wZXJhdGlvblNwZWMuaHR0cE1ldGhvZDtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uSW5mbyA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8pKHJlcXVlc3QpO1xuICAgICAgICBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25TcGVjO1xuICAgICAgICBvcGVyYXRpb25JbmZvLm9wZXJhdGlvbkFyZ3VtZW50cyA9IG9wZXJhdGlvbkFyZ3VtZW50cztcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBvcGVyYXRpb25TcGVjLmNvbnRlbnRUeXBlIHx8IHRoaXMuX3JlcXVlc3RDb250ZW50VHlwZTtcbiAgICAgICAgaWYgKGNvbnRlbnRUeXBlICYmIG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkpIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgY29udGVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcGVyYXRpb25Bcmd1bWVudHMub3B0aW9ucztcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb3B0aW9ucy5yZXF1ZXN0T3B0aW9ucztcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy50aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudGltZW91dCA9IHJlcXVlc3RPcHRpb25zLnRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5vblVwbG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25VcGxvYWRQcm9ncmVzcyA9IHJlcXVlc3RPcHRpb25zLm9uVXBsb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vbkRvd25sb2FkUHJvZ3Jlc3MgPSByZXF1ZXN0T3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5zaG91bGREZXNlcmlhbGl6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluZm8uc2hvdWxkRGVzZXJpYWxpemUgPSByZXF1ZXN0T3B0aW9ucy5zaG91bGREZXNlcmlhbGl6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5hYm9ydFNpZ25hbCA9IG9wdGlvbnMuYWJvcnRTaWduYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50cmFjaW5nT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudHJhY2luZ09wdGlvbnMgPSBvcHRpb25zLnRyYWNpbmdPcHRpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9hbGxvd0luc2VjdXJlQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgcmVxdWVzdC5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMgPSAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFN0cmVhbWluZ1Jlc3BvbnNlU3RhdHVzQ29kZXMpKG9wZXJhdGlvblNwZWMpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByYXdSZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdCk7XG4gICAgICAgICAgICBjb25zdCBmbGF0UmVzcG9uc2UgPSAoMCwgdXRpbHNfanNfMS5mbGF0dGVuUmVzcG9uc2UpKHJhd1Jlc3BvbnNlLCBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1tyYXdSZXNwb25zZS5zdGF0dXNdKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub25SZXNwb25zZShyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbGF0UmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3UmVzcG9uc2UgPSBlcnJvci5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGF0UmVzcG9uc2UgPSAoMCwgdXRpbHNfanNfMS5mbGF0dGVuUmVzcG9uc2UpKHJhd1Jlc3BvbnNlLCBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1tlcnJvci5zdGF0dXNDb2RlXSB8fCBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1tcImRlZmF1bHRcIl0pO1xuICAgICAgICAgICAgICAgIGVycm9yLmRldGFpbHMgPSBmbGF0UmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25SZXNwb25zZShyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlNlcnZpY2VDbGllbnQgPSBTZXJ2aWNlQ2xpZW50O1xuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFBpcGVsaW5lKG9wdGlvbnMpIHtcbiAgICBjb25zdCBjcmVkZW50aWFsU2NvcGVzID0gZ2V0Q3JlZGVudGlhbFNjb3BlcyhvcHRpb25zKTtcbiAgICBjb25zdCBjcmVkZW50aWFsT3B0aW9ucyA9IG9wdGlvbnMuY3JlZGVudGlhbCAmJiBjcmVkZW50aWFsU2NvcGVzXG4gICAgICAgID8geyBjcmVkZW50aWFsU2NvcGVzLCBjcmVkZW50aWFsOiBvcHRpb25zLmNyZWRlbnRpYWwgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKDAsIHBpcGVsaW5lX2pzXzEuY3JlYXRlQ2xpZW50UGlwZWxpbmUpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgY3JlZGVudGlhbE9wdGlvbnMgfSkpO1xufVxuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbFNjb3BlcyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuY3JlZGVudGlhbFNjb3Blcykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmRwb2ludCkge1xuICAgICAgICByZXR1cm4gYCR7b3B0aW9ucy5lbmRwb2ludH0vLmRlZmF1bHRgO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5iYXNlVXJpKSB7XG4gICAgICAgIHJldHVybiBgJHtvcHRpb25zLmJhc2VVcml9Ly5kZWZhdWx0YDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY3JlZGVudGlhbCAmJiAhb3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV2hlbiB1c2luZyBjcmVkZW50aWFscywgdGhlIFNlcnZpY2VDbGllbnRPcHRpb25zIG11c3QgY29udGFpbiBlaXRoZXIgYSBlbmRwb2ludCBvciBhIGNyZWRlbnRpYWxTY29wZXMuIFVuYWJsZSB0byBjcmVhdGUgYSBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5YCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJ2aWNlQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgPSBleHBvcnRzLnBhcnNlQ0FFQ2hhbGxlbmdlID0gdm9pZCAwO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG5jb25zdCBiYXNlNjRfanNfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NC5qc1wiKTtcbi8qKlxuICogQ29udmVydHM6IGBCZWFyZXIgYT1cImJcIiwgYz1cImRcIiwgQmVhcmVyIGQ9XCJlXCIsIGY9XCJnXCJgLlxuICogSW50bzogYFsgeyBhOiAnYicsIGM6ICdkJyB9LCB7IGQ6ICdlJywgZjogJ2cnIH0gXWAuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ0FFQ2hhbGxlbmdlKGNoYWxsZW5nZXMpIHtcbiAgICBjb25zdCBiZWFyZXJDaGFsbGVuZ2VzID0gYCwgJHtjaGFsbGVuZ2VzLnRyaW0oKX1gLnNwbGl0KFwiLCBCZWFyZXIgXCIpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgcmV0dXJuIGJlYXJlckNoYWxsZW5nZXMubWFwKChjaGFsbGVuZ2UpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbGxlbmdlUGFydHMgPSBgJHtjaGFsbGVuZ2UudHJpbSgpfSwgYC5zcGxpdCgnXCIsICcpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgICAgIGNvbnN0IGtleVZhbHVlUGFpcnMgPSBjaGFsbGVuZ2VQYXJ0cy5tYXAoKGtleVZhbHVlKSA9PiAoKFtrZXksIHZhbHVlXSkgPT4gKHsgW2tleV06IHZhbHVlIH0pKShrZXlWYWx1ZS50cmltKCkuc3BsaXQoJz1cIicpKSk7XG4gICAgICAgIC8vIEtleS12YWx1ZSBwYWlycyB0byBwbGFpbiBvYmplY3Q6XG4gICAgICAgIHJldHVybiBrZXlWYWx1ZVBhaXJzLnJlZHVjZSgoYSwgYikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpKSwge30pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5wYXJzZUNBRUNoYWxsZW5nZSA9IHBhcnNlQ0FFQ2hhbGxlbmdlO1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgY2FsbGJhY2sgZm9yIHRoZSBgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeWAgb2YgYEBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVgLCB0byBzdXBwb3J0IENBRSBjaGFsbGVuZ2VzOlxuICogW0NvbnRpbnVvdXMgQWNjZXNzIEV2YWx1YXRpb25dKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2F6dXJlL2FjdGl2ZS1kaXJlY3RvcnkvY29uZGl0aW9uYWwtYWNjZXNzL2NvbmNlcHQtY29udGludW91cy1hY2Nlc3MtZXZhbHVhdGlvbikuXG4gKlxuICogQ2FsbCB0aGUgYGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lgIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5IH0gZnJvbSBcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIjtcbiAqIGltcG9ydCB7IGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlIH0gZnJvbSBcIkBhenVyZS9jb3JlLWNsaWVudFwiO1xuICpcbiAqIGNvbnN0IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgPSBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KHtcbiAqICAgYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlOiBhdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZVxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBPbmNlIHByb3ZpZGVkLCB0aGUgYGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lgIHBvbGljeSB3aWxsIGludGVybmFsbHkgaGFuZGxlIENvbnRpbnVvdXMgQWNjZXNzIEV2YWx1YXRpb24gKENBRSkgY2hhbGxlbmdlcy5cbiAqIFdoZW4gaXQgY2FuJ3QgY29tcGxldGUgYSBjaGFsbGVuZ2UgaXQgd2lsbCByZXR1cm4gdGhlIDQwMSAodW5hdXRob3JpemVkKSByZXNwb25zZSBmcm9tIEFSTS5cbiAqXG4gKiBFeGFtcGxlIGNoYWxsZW5nZSB3aXRoIGNsYWltczpcbiAqXG4gKiBgYGBcbiAqIEJlYXJlciBhdXRob3JpemF0aW9uX3VyaT1cImh0dHBzOi8vbG9naW4ud2luZG93cy1wcGUubmV0L1wiLCBlcnJvcj1cImludmFsaWRfdG9rZW5cIixcbiAqIGVycm9yX2Rlc2NyaXB0aW9uPVwiVXNlciBzZXNzaW9uIGhhcyBiZWVuIHJldm9rZWRcIixcbiAqIGNsYWltcz1cImV5SmhZMk5sYzNOZmRHOXJaVzRpT25zaWJtSm1JanA3SW1WemMyVnVkR2xoYkNJNmRISjFaU3dnSW5aaGJIVmxJam9pTVRZd016YzBNamd3TUNKOWZYMD1cIlxuICogYGBgXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlKG9uQ2hhbGxlbmdlT3B0aW9ucykge1xuICAgIGNvbnN0IHsgc2NvcGVzLCByZXNwb25zZSB9ID0gb25DaGFsbGVuZ2VPcHRpb25zO1xuICAgIGNvbnN0IGxvZ2dlciA9IG9uQ2hhbGxlbmdlT3B0aW9ucy5sb2dnZXIgfHwgbG9nX2pzXzEubG9nZ2VyO1xuICAgIGNvbnN0IGNoYWxsZW5nZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiV1dXLUF1dGhlbnRpY2F0ZVwiKTtcbiAgICBpZiAoIWNoYWxsZW5nZSkge1xuICAgICAgICBsb2dnZXIuaW5mbyhgVGhlIFdXVy1BdXRoZW50aWNhdGUgaGVhZGVyIHdhcyBtaXNzaW5nLiBGYWlsZWQgdG8gcGVyZm9ybSB0aGUgQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbiBhdXRoZW50aWNhdGlvbiBmbG93LmApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNoYWxsZW5nZXMgPSBwYXJzZUNBRUNoYWxsZW5nZShjaGFsbGVuZ2UpIHx8IFtdO1xuICAgIGNvbnN0IHBhcnNlZENoYWxsZW5nZSA9IGNoYWxsZW5nZXMuZmluZCgoeCkgPT4geC5jbGFpbXMpO1xuICAgIGlmICghcGFyc2VkQ2hhbGxlbmdlKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgV1dXLUF1dGhlbnRpY2F0ZSBoZWFkZXIgd2FzIG1pc3NpbmcgdGhlIG5lY2Vzc2FyeSBcImNsYWltc1wiIHRvIHBlcmZvcm0gdGhlIENvbnRpbnVvdXMgQWNjZXNzIEV2YWx1YXRpb24gYXV0aGVudGljYXRpb24gZmxvdy5gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IG9uQ2hhbGxlbmdlT3B0aW9ucy5nZXRBY2Nlc3NUb2tlbihwYXJzZWRDaGFsbGVuZ2Uuc2NvcGUgPyBbcGFyc2VkQ2hhbGxlbmdlLnNjb3BlXSA6IHNjb3Blcywge1xuICAgICAgICBjbGFpbXM6ICgwLCBiYXNlNjRfanNfMS5kZWNvZGVTdHJpbmdUb1N0cmluZykocGFyc2VkQ2hhbGxlbmdlLmNsYWltcyksXG4gICAgfSk7XG4gICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9uQ2hhbGxlbmdlT3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBgQmVhcmVyICR7YWNjZXNzVG9rZW4udG9rZW59YCk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlID0gYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IHZvaWQgMDtcbi8qKlxuICogQSBzZXQgb2YgY29uc3RhbnRzIHVzZWQgaW50ZXJuYWxseSB3aGVuIHByb2Nlc3NpbmcgcmVxdWVzdHMuXG4gKi9cbmNvbnN0IENvbnN0YW50cyA9IHtcbiAgICBEZWZhdWx0U2NvcGU6IFwiLy5kZWZhdWx0XCIsXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBjb25zdGFudHMgZm9yIHVzZSB3aXRoIEhUVFAgaGVhZGVycy5cbiAgICAgKi9cbiAgICBIZWFkZXJDb25zdGFudHM6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICAgICAgICovXG4gICAgICAgIEFVVEhPUklaQVRJT046IFwiYXV0aG9yaXphdGlvblwiLFxuICAgIH0sXG59O1xuZnVuY3Rpb24gaXNVdWlkKHRleHQpIHtcbiAgICByZXR1cm4gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kLy50ZXN0KHRleHQpO1xufVxuLyoqXG4gKiBEZWZpbmVzIGEgY2FsbGJhY2sgdG8gaGFuZGxlIGF1dGggY2hhbGxlbmdlIGZvciBTdG9yYWdlIEFQSXMuXG4gKiBUaGlzIGltcGxlbWVudHMgdGhlIGJlYXJlciBjaGFsbGVuZ2UgcHJvY2VzcyBkZXNjcmliZWQgaGVyZTogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhvcml6ZS13aXRoLWF6dXJlLWFjdGl2ZS1kaXJlY3RvcnkjYmVhcmVyLWNoYWxsZW5nZVxuICogSGFuZGxpbmcgaGFzIHNwZWNpZmljIGZlYXR1cmVzIGZvciBzdG9yYWdlIHRoYXQgZGVwYXJ0cyB0byB0aGUgZ2VuZXJhbCBBQUQgY2hhbGxlbmdlIGRvY3MuXG4gKiovXG5jb25zdCBhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UgPSBhc3luYyAoY2hhbGxlbmdlT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gcmVxdWVzdFRvT3B0aW9ucyhjaGFsbGVuZ2VPcHRpb25zLnJlcXVlc3QpO1xuICAgIGNvbnN0IGNoYWxsZW5nZSA9IGdldENoYWxsZW5nZShjaGFsbGVuZ2VPcHRpb25zLnJlc3BvbnNlKTtcbiAgICBpZiAoY2hhbGxlbmdlKSB7XG4gICAgICAgIGNvbnN0IGNoYWxsZW5nZUluZm8gPSBwYXJzZUNoYWxsZW5nZShjaGFsbGVuZ2UpO1xuICAgICAgICBjb25zdCBjaGFsbGVuZ2VTY29wZXMgPSBidWlsZFNjb3BlcyhjaGFsbGVuZ2VPcHRpb25zLCBjaGFsbGVuZ2VJbmZvKTtcbiAgICAgICAgY29uc3QgdGVuYW50SWQgPSBleHRyYWN0VGVuYW50SWQoY2hhbGxlbmdlSW5mbyk7XG4gICAgICAgIGlmICghdGVuYW50SWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGNoYWxsZW5nZU9wdGlvbnMuZ2V0QWNjZXNzVG9rZW4oY2hhbGxlbmdlU2NvcGVzLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcXVlc3RPcHRpb25zKSwgeyB0ZW5hbnRJZCB9KSk7XG4gICAgICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjaGFsbGVuZ2VPcHRpb25zLnJlcXVlc3QuaGVhZGVycy5zZXQoQ29uc3RhbnRzLkhlYWRlckNvbnN0YW50cy5BVVRIT1JJWkFUSU9OLCBgQmVhcmVyICR7YWNjZXNzVG9rZW4udG9rZW59YCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0cy5hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UgPSBhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2U7XG4vKipcbiAqIEV4dHJhY3RzIHRoZSB0ZW5hbnQgaWQgZnJvbSB0aGUgY2hhbGxlbmdlIGluZm9ybWF0aW9uXG4gKiBUaGUgdGVuYW50IGlkIGlzIGNvbnRhaW5lZCBpbiB0aGUgYXV0aG9yaXphdGlvbl91cmkgYXMgdGhlIGZpcnN0XG4gKiBwYXRoIHBhcnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUZW5hbnRJZChjaGFsbGVuZ2VJbmZvKSB7XG4gICAgY29uc3QgcGFyc2VkQXV0aFVyaSA9IG5ldyBVUkwoY2hhbGxlbmdlSW5mby5hdXRob3JpemF0aW9uX3VyaSk7XG4gICAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGFyc2VkQXV0aFVyaS5wYXRobmFtZS5zcGxpdChcIi9cIik7XG4gICAgY29uc3QgdGVuYW50SWQgPSBwYXRoU2VnbWVudHNbMV07XG4gICAgaWYgKHRlbmFudElkICYmIGlzVXVpZCh0ZW5hbnRJZCkpIHtcbiAgICAgICAgcmV0dXJuIHRlbmFudElkO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBCdWlsZHMgdGhlIGF1dGhlbnRpY2F0aW9uIHNjb3BlcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gdGhhdCBjb21lcyBpbiB0aGVcbiAqIGNoYWxsZW5nZSBpbmZvcm1hdGlvbi4gU2NvcGVzIHVybCBpcyBwcmVzZW50IGluIHRoZSByZXNvdXJjZV9pZCwgaWYgaXQgaXMgZW1wdHlcbiAqIHdlIGtlZXAgdXNpbmcgdGhlIG9yaWdpbmFsIHNjb3Blcy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTY29wZXMoY2hhbGxlbmdlT3B0aW9ucywgY2hhbGxlbmdlSW5mbykge1xuICAgIGlmICghY2hhbGxlbmdlSW5mby5yZXNvdXJjZV9pZCkge1xuICAgICAgICByZXR1cm4gY2hhbGxlbmdlT3B0aW9ucy5zY29wZXM7XG4gICAgfVxuICAgIGNvbnN0IGNoYWxsZW5nZVNjb3BlcyA9IG5ldyBVUkwoY2hhbGxlbmdlSW5mby5yZXNvdXJjZV9pZCk7XG4gICAgY2hhbGxlbmdlU2NvcGVzLnBhdGhuYW1lID0gQ29uc3RhbnRzLkRlZmF1bHRTY29wZTtcbiAgICBsZXQgc2NvcGUgPSBjaGFsbGVuZ2VTY29wZXMudG9TdHJpbmcoKTtcbiAgICBpZiAoc2NvcGUgPT09IFwiaHR0cHM6Ly9kaXNrLmF6dXJlLmNvbS8uZGVmYXVsdFwiKSB7XG4gICAgICAgIC8vIHRoZSBleHRyYSBzbGFzaCBpcyByZXF1aXJlZCBieSB0aGUgc2VydmljZVxuICAgICAgICBzY29wZSA9IFwiaHR0cHM6Ly9kaXNrLmF6dXJlLmNvbS8vLmRlZmF1bHRcIjtcbiAgICB9XG4gICAgcmV0dXJuIFtzY29wZV07XG59XG4vKipcbiAqIFdlIHdpbGwgcmV0cmlldmUgdGhlIGNoYWxsZW5nZSBvbmx5IGlmIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZSB3YXMgNDAxLFxuICogYW5kIGlmIHRoZSByZXNwb25zZSBjb250YWluZWQgdGhlIGhlYWRlciBcIldXVy1BdXRoZW50aWNhdGVcIiB3aXRoIGEgbm9uLWVtcHR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRDaGFsbGVuZ2UocmVzcG9uc2UpIHtcbiAgICBjb25zdCBjaGFsbGVuZ2UgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIldXVy1BdXRoZW50aWNhdGVcIik7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIGNoYWxsZW5nZSkge1xuICAgICAgICByZXR1cm4gY2hhbGxlbmdlO1xuICAgIH1cbiAgICByZXR1cm47XG59XG4vKipcbiAqIENvbnZlcnRzOiBgQmVhcmVyIGE9XCJiXCIgYz1cImRcImAuXG4gKiBJbnRvOiBgWyB7IGE6ICdiJywgYzogJ2QnIH1dYC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gcGFyc2VDaGFsbGVuZ2UoY2hhbGxlbmdlKSB7XG4gICAgY29uc3QgYmVhcmVyQ2hhbGxlbmdlID0gY2hhbGxlbmdlLnNsaWNlKFwiQmVhcmVyIFwiLmxlbmd0aCk7XG4gICAgY29uc3QgY2hhbGxlbmdlUGFydHMgPSBgJHtiZWFyZXJDaGFsbGVuZ2UudHJpbSgpfSBgLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHgpID0+IHgpO1xuICAgIGNvbnN0IGtleVZhbHVlUGFpcnMgPSBjaGFsbGVuZ2VQYXJ0cy5tYXAoKGtleVZhbHVlKSA9PiAoKFtrZXksIHZhbHVlXSkgPT4gKHsgW2tleV06IHZhbHVlIH0pKShrZXlWYWx1ZS50cmltKCkuc3BsaXQoXCI9XCIpKSk7XG4gICAgLy8gS2V5LXZhbHVlIHBhaXJzIHRvIHBsYWluIG9iamVjdDpcbiAgICByZXR1cm4ga2V5VmFsdWVQYWlycy5yZWR1Y2UoKGEsIGIpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGEpLCBiKSksIHt9KTtcbn1cbi8qKlxuICogRXh0cmFjdHMgdGhlIG9wdGlvbnMgZm9ybSBhIFBpcGVsaW5lIFJlcXVlc3QgZm9yIGxhdGVyIHJlLXVzZVxuICovXG5mdW5jdGlvbiByZXF1ZXN0VG9PcHRpb25zKHJlcXVlc3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICAgICAgcmVxdWVzdE9wdGlvbnM6IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhY2luZ09wdGlvbnM6IHJlcXVlc3QudHJhY2luZ09wdGlvbnMsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IGV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgPSBleHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5ID0gZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3kgPSBleHBvcnRzLlhNTF9DSEFSS0VZID0gZXhwb3J0cy5YTUxfQVRUUktFWSA9IGV4cG9ydHMuY3JlYXRlQ2xpZW50UGlwZWxpbmUgPSBleHBvcnRzLlNlcnZpY2VDbGllbnQgPSBleHBvcnRzLk1hcHBlclR5cGVOYW1lcyA9IGV4cG9ydHMuY3JlYXRlU2VyaWFsaXplciA9IHZvaWQgMDtcbnZhciBzZXJpYWxpemVyX2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemVyLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXplcl9qc18xLmNyZWF0ZVNlcmlhbGl6ZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNYXBwZXJUeXBlTmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXM7IH0gfSk7XG52YXIgc2VydmljZUNsaWVudF9qc18xID0gcmVxdWlyZShcIi4vc2VydmljZUNsaWVudC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZpY2VDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZpY2VDbGllbnRfanNfMS5TZXJ2aWNlQ2xpZW50OyB9IH0pO1xudmFyIHBpcGVsaW5lX2pzXzEgPSByZXF1aXJlKFwiLi9waXBlbGluZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNsaWVudFBpcGVsaW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwaXBlbGluZV9qc18xLmNyZWF0ZUNsaWVudFBpcGVsaW5lOyB9IH0pO1xudmFyIGludGVyZmFjZXNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZXMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYTUxfQVRUUktFWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWE1MX0NIQVJLRVlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWTsgfSB9KTtcbnZhciBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlc2VyaWFsaXphdGlvblBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuZGVzZXJpYWxpemF0aW9uUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZTsgfSB9KTtcbnZhciBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VyaWFsaXphdGlvblBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXphdGlvblBvbGljeV9qc18xLnNlcmlhbGl6YXRpb25Qb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJpYWxpemF0aW9uUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXphdGlvblBvbGljeV9qc18xLnNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lOyB9IH0pO1xudmFyIGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlX2pzXzEgPSByZXF1aXJlKFwiLi9hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZV9qc18xLmF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlOyB9IH0pO1xudmFyIGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZV9qc18xID0gcmVxdWlyZShcIi4vYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2VfanNfMS5hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2U7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBIZWFkZXJzID0gZXhwb3J0cy50b0h0dHBIZWFkZXJzTGlrZSA9IGV4cG9ydHMudG9XZWJSZXNvdXJjZUxpa2UgPSBleHBvcnRzLnRvUGlwZWxpbmVSZXF1ZXN0ID0gdm9pZCAwO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbi8vIFdlIHVzZSBhIGN1c3RvbSBzeW1ib2wgdG8gY2FjaGUgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIHJlcXVlc3Qgd2l0aG91dFxuLy8gZXhwb3NpbmcgaXQgb24gdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG5jb25zdCBvcmlnaW5hbFJlcXVlc3RTeW1ib2wgPSBTeW1ib2woXCJPcmlnaW5hbCBQaXBlbGluZVJlcXVlc3RcIik7XG4vLyBTeW1ib2wuZm9yKCkgd2lsbCByZXR1cm4gdGhlIHNhbWUgc3ltYm9sIGlmIGl0J3MgYWxyZWFkeSBiZWVuIGNyZWF0ZWRcbi8vIFRoaXMgcGFydGljdWxhciBvbmUgaXMgdXNlZCBpbiBjb3JlLWNsaWVudCB0byBoYW5kbGUgdGhlIGNhc2Ugb2Ygd2hlbiBhIHJlcXVlc3QgaXNcbi8vIGNsb25lZCBidXQgd2UgbmVlZCB0byByZXRyaWV2ZSB0aGUgT3BlcmF0aW9uU3BlYyBhbmQgT3BlcmF0aW9uQXJndW1lbnRzIGZyb20gdGhlXG4vLyBvcmlnaW5hbCByZXF1ZXN0LlxuY29uc3Qgb3JpZ2luYWxDbGllbnRSZXF1ZXN0U3ltYm9sID0gU3ltYm9sLmZvcihcIkBhenVyZS9jb3JlLWNsaWVudCBvcmlnaW5hbCByZXF1ZXN0XCIpO1xuZnVuY3Rpb24gdG9QaXBlbGluZVJlcXVlc3Qod2ViUmVzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGNvbXBhdFdlYlJlc291cmNlID0gd2ViUmVzb3VyY2U7XG4gICAgY29uc3QgcmVxdWVzdCA9IGNvbXBhdFdlYlJlc291cmNlW29yaWdpbmFsUmVxdWVzdFN5bWJvbF07XG4gICAgY29uc3QgaGVhZGVycyA9ICgwLCBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5jcmVhdGVIdHRwSGVhZGVycykod2ViUmVzb3VyY2UuaGVhZGVycy50b0pzb24oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSkpO1xuICAgIGlmIChyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3UmVxdWVzdCA9ICgwLCBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5jcmVhdGVQaXBlbGluZVJlcXVlc3QpKHtcbiAgICAgICAgICAgIHVybDogd2ViUmVzb3VyY2UudXJsLFxuICAgICAgICAgICAgbWV0aG9kOiB3ZWJSZXNvdXJjZS5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB3ZWJSZXNvdXJjZS53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICB0aW1lb3V0OiB3ZWJSZXNvdXJjZS50aW1lb3V0LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB3ZWJSZXNvdXJjZS5yZXF1ZXN0SWQsXG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogd2ViUmVzb3VyY2UuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICBib2R5OiB3ZWJSZXNvdXJjZS5ib2R5LFxuICAgICAgICAgICAgZm9ybURhdGE6IHdlYlJlc291cmNlLmZvcm1EYXRhLFxuICAgICAgICAgICAgZGlzYWJsZUtlZXBBbGl2ZTogISF3ZWJSZXNvdXJjZS5rZWVwQWxpdmUsXG4gICAgICAgICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IHdlYlJlc291cmNlLm9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHdlYlJlc291cmNlLm9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgICAgICAgICBwcm94eVNldHRpbmdzOiB3ZWJSZXNvdXJjZS5wcm94eVNldHRpbmdzLFxuICAgICAgICAgICAgc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2Rlczogd2ViUmVzb3VyY2Uuc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcHRpb25zLm9yaWdpbmFsUmVxdWVzdCkge1xuICAgICAgICAgICAgbmV3UmVxdWVzdFtvcmlnaW5hbENsaWVudFJlcXVlc3RTeW1ib2xdID1cbiAgICAgICAgICAgICAgICBvcHRpb25zLm9yaWdpbmFsUmVxdWVzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UmVxdWVzdDtcbiAgICB9XG59XG5leHBvcnRzLnRvUGlwZWxpbmVSZXF1ZXN0ID0gdG9QaXBlbGluZVJlcXVlc3Q7XG5mdW5jdGlvbiB0b1dlYlJlc291cmNlTGlrZShyZXF1ZXN0LCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG9yaWdpbmFsUmVxdWVzdCA9IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vcmlnaW5hbFJlcXVlc3QpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHJlcXVlc3Q7XG4gICAgY29uc3Qgd2ViUmVzb3VyY2UgPSB7XG4gICAgICAgIHVybDogcmVxdWVzdC51cmwsXG4gICAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IHRvSHR0cEhlYWRlcnNMaWtlKHJlcXVlc3QuaGVhZGVycyksXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcbiAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiKSB8fCByZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwsXG4gICAgICAgIGJvZHk6IHJlcXVlc3QuYm9keSxcbiAgICAgICAgZm9ybURhdGE6IHJlcXVlc3QuZm9ybURhdGEsXG4gICAgICAgIGtlZXBBbGl2ZTogISFyZXF1ZXN0LmRpc2FibGVLZWVwQWxpdmUsXG4gICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogcmVxdWVzdC5vbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHJlcXVlc3Qub25VcGxvYWRQcm9ncmVzcyxcbiAgICAgICAgcHJveHlTZXR0aW5nczogcmVxdWVzdC5wcm94eVNldHRpbmdzLFxuICAgICAgICBzdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzOiByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMsXG4gICAgICAgIGNsb25lKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNsb25lIGEgbm9uLXByb3hpZWQgV2ViUmVzb3VyY2VMaWtlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJlKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV2ViUmVzb3VyY2VMaWtlLnByZXBhcmUoKSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEBhenVyZS9jb3JlLWh0dHAtY29tcGF0XCIpO1xuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZVJlcXVlc3RQcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgLyoqIGRvIG5vdGhpbmcgKi9cbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3JlYXRlUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh3ZWJSZXNvdXJjZSwge1xuICAgICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gb3JpZ2luYWxSZXF1ZXN0U3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcImNsb25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1dlYlJlc291cmNlTGlrZSh0b1BpcGVsaW5lUmVxdWVzdCh3ZWJSZXNvdXJjZSwgeyBvcmlnaW5hbFJlcXVlc3QgfSksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQcm94eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImtlZXBBbGl2ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZSA9ICF2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGFzc1Rocm91Z2hQcm9wcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJtZXRob2RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ3aXRoQ3JlZGVudGlhbHNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0aW1lb3V0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwicmVxdWVzdElkXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYWJvcnRTaWduYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJib2R5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9ybURhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJvbkRvd25sb2FkUHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgXCJvblVwbG9hZFByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicHJveHlTZXR0aW5nc1wiLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXNcIixcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzdHJpbmdcIiAmJiBwYXNzVGhyb3VnaFByb3BzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHdlYlJlc291cmNlO1xuICAgIH1cbn1cbmV4cG9ydHMudG9XZWJSZXNvdXJjZUxpa2UgPSB0b1dlYlJlc291cmNlTGlrZTtcbi8qKlxuICogQ29udmVydHMgSHR0cEhlYWRlcnMgZnJvbSBjb3JlLXJlc3QtcGlwZWxpbmUgdG8gbG9vayBsaWtlXG4gKiBIdHRwSGVhZGVycyBmcm9tIGNvcmUtaHR0cC5cbiAqIEBwYXJhbSBoZWFkZXJzIC0gSHR0cEhlYWRlcnMgZnJvbSBjb3JlLXJlc3QtcGlwZWxpbmVcbiAqIEByZXR1cm5zIEh0dHBIZWFkZXJzIGFzIHRoZXkgbG9va2VkIGluIGNvcmUtaHR0cFxuICovXG5mdW5jdGlvbiB0b0h0dHBIZWFkZXJzTGlrZShoZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyhoZWFkZXJzLnRvSlNPTih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSk7XG59XG5leHBvcnRzLnRvSHR0cEhlYWRlcnNMaWtlID0gdG9IdHRwSGVhZGVyc0xpa2U7XG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBIdHRwSGVhZGVycyB0aGF0IGNhbiBiZSBzZW50IHdpdGggYSBIVFRQIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlcktleShoZWFkZXJOYW1lKSB7XG4gICAgcmV0dXJuIGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIEhUVFAgaGVhZGVyIGtleS92YWx1ZSBwYWlycy5cbiAqL1xuY2xhc3MgSHR0cEhlYWRlcnMge1xuICAgIGNvbnN0cnVjdG9yKHJhd0hlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcCA9IHt9O1xuICAgICAgICBpZiAocmF3SGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIGluIHJhd0hlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldChoZWFkZXJOYW1lLCByYXdIZWFkZXJzW2hlYWRlck5hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgYSBoZWFkZXIgaW4gdGhpcyBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYW5kIHZhbHVlLiBUaGUgbmFtZSBpc1xuICAgICAqIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICogQHBhcmFtIGhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHNldC4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqIEBwYXJhbSBoZWFkZXJWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQoaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcFtnZXRIZWFkZXJLZXkoaGVhZGVyTmFtZSldID0ge1xuICAgICAgICAgICAgbmFtZTogaGVhZGVyTmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBoZWFkZXJWYWx1ZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIGhlYWRlciBuYW1lLCBvciB1bmRlZmluZWQgaWYgbm8gaGVhZGVyIGV4aXN0cyBpbiB0aGlzXG4gICAgICogY29sbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLlxuICAgICAqIEBwYXJhbSBoZWFkZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICAgKi9cbiAgICBnZXQoaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2dldEhlYWRlcktleShoZWFkZXJOYW1lKV07XG4gICAgICAgIHJldHVybiAhaGVhZGVyID8gdW5kZWZpbmVkIDogaGVhZGVyLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBoZWFkZXIgY29sbGVjdGlvbiBjb250YWlucyBhIGhlYWRlciBlbnRyeSBmb3IgdGhlIHByb3ZpZGVkIGhlYWRlciBuYW1lLlxuICAgICAqL1xuICAgIGNvbnRhaW5zKGhlYWRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5faGVhZGVyc01hcFtnZXRIZWFkZXJLZXkoaGVhZGVyTmFtZSldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBoZWFkZXJOYW1lLiBSZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGhlYWRlciBleGlzdGVkIGFuZFxuICAgICAqIHdhcyByZW1vdmVkLlxuICAgICAqIEBwYXJhbSBoZWFkZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byByZW1vdmUuXG4gICAgICovXG4gICAgcmVtb3ZlKGhlYWRlck5hbWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb250YWlucyhoZWFkZXJOYW1lKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2hlYWRlcnNNYXBbZ2V0SGVhZGVyS2V5KGhlYWRlck5hbWUpXTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBoZWFkZXJzIHRoYXQgYXJlIGNvbnRhaW5lZCB0aGlzIGNvbGxlY3Rpb24gYXMgYW4gb2JqZWN0LlxuICAgICAqL1xuICAgIHJhd0hlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSnNvbih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBoZWFkZXJzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGNvbGxlY3Rpb24gYXMgYW4gYXJyYXkuXG4gICAgICovXG4gICAgaGVhZGVyc0FycmF5KCkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaCh0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciBuYW1lcyB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhpcyBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGhlYWRlck5hbWVzKCkge1xuICAgICAgICBjb25zdCBoZWFkZXJOYW1lcyA9IFtdO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzQXJyYXkoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBoZWFkZXJOYW1lcy5wdXNoKGhlYWRlcnNbaV0ubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlck5hbWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciB2YWx1ZXMgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoaXMgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBoZWFkZXJWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlclZhbHVlcyA9IFtdO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzQXJyYXkoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBoZWFkZXJWYWx1ZXMucHVzaChoZWFkZXJzW2ldLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGVhZGVyVmFsdWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEpTT04gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b0pzb24ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucy5wcmVzZXJ2ZUNhc2UpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV07XG4gICAgICAgICAgICAgICAgcmVzdWx0W2hlYWRlci5uYW1lXSA9IGhlYWRlci52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV07XG4gICAgICAgICAgICAgICAgcmVzdWx0W2dldEhlYWRlcktleShoZWFkZXIubmFtZSldID0gaGVhZGVyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9Kc29uKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgZGVlcCBjbG9uZS9jb3B5IG9mIHRoaXMgSHR0cEhlYWRlcnMgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0UHJlc2VydmluZ0Nhc2luZyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlcktleSBpbiB0aGlzLl9oZWFkZXJzTWFwKSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV07XG4gICAgICAgICAgICByZXN1bHRQcmVzZXJ2aW5nQ2FzaW5nW2hlYWRlci5uYW1lXSA9IGhlYWRlci52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKHJlc3VsdFByZXNlcnZpbmdDYXNpbmcpO1xuICAgIH1cbn1cbmV4cG9ydHMuSHR0cEhlYWRlcnMgPSBIdHRwSGVhZGVycztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b1BpcGVsaW5lUmVzcG9uc2UgPSBleHBvcnRzLnRvQ29tcGF0UmVzcG9uc2UgPSB2b2lkIDA7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuY29uc3QgdXRpbF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC5qc1wiKTtcbmNvbnN0IG9yaWdpbmFsUmVzcG9uc2UgPSBTeW1ib2woXCJPcmlnaW5hbCBGdWxsT3BlcmF0aW9uUmVzcG9uc2VcIik7XG4vKipcbiAqIEEgaGVscGVyIHRvIGNvbnZlcnQgcmVzcG9uc2Ugb2JqZWN0cyBmcm9tIHRoZSBuZXcgcGlwZWxpbmUgYmFjayB0byB0aGUgb2xkIG9uZS5cbiAqIEBwYXJhbSByZXNwb25zZSAtIEEgcmVzcG9uc2Ugb2JqZWN0IGZyb20gY29yZS1jbGllbnQuXG4gKiBAcmV0dXJucyBBIHJlc3BvbnNlIGNvbXBhdGlibGUgd2l0aCBgSHR0cE9wZXJhdGlvblJlc3BvbnNlYCBmcm9tIGNvcmUtaHR0cC5cbiAqL1xuZnVuY3Rpb24gdG9Db21wYXRSZXNwb25zZShyZXNwb25zZSwgb3B0aW9ucykge1xuICAgIGxldCByZXF1ZXN0ID0gKDAsIHV0aWxfanNfMS50b1dlYlJlc291cmNlTGlrZSkocmVzcG9uc2UucmVxdWVzdCk7XG4gICAgbGV0IGhlYWRlcnMgPSAoMCwgdXRpbF9qc18xLnRvSHR0cEhlYWRlcnNMaWtlKShyZXNwb25zZS5oZWFkZXJzKTtcbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNyZWF0ZVByb3h5KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkocmVzcG9uc2UsIHtcbiAgICAgICAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiaGVhZGVyc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcInJlcXVlc3RcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcCA9PT0gb3JpZ2luYWxSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJoZWFkZXJzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcInJlcXVlc3RcIikge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyByZXF1ZXN0LFxuICAgICAgICAgICAgaGVhZGVycyB9KTtcbiAgICB9XG59XG5leHBvcnRzLnRvQ29tcGF0UmVzcG9uc2UgPSB0b0NvbXBhdFJlc3BvbnNlO1xuLyoqXG4gKiBBIGhlbHBlciB0byBjb252ZXJ0IGJhY2sgdG8gYSBQaXBlbGluZVJlc3BvbnNlXG4gKiBAcGFyYW0gY29tcGF0UmVzcG9uc2UgLSBBIHJlc3BvbnNlIGNvbXBhdGlibGUgd2l0aCBgSHR0cE9wZXJhdGlvblJlc3BvbnNlYCBmcm9tIGNvcmUtaHR0cC5cbiAqL1xuZnVuY3Rpb24gdG9QaXBlbGluZVJlc3BvbnNlKGNvbXBhdFJlc3BvbnNlKSB7XG4gICAgY29uc3QgZXh0ZW5kZWRDb21wYXRSZXNwb25zZSA9IGNvbXBhdFJlc3BvbnNlO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gZXh0ZW5kZWRDb21wYXRSZXNwb25zZVtvcmlnaW5hbFJlc3BvbnNlXTtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZUh0dHBIZWFkZXJzKShjb21wYXRSZXNwb25zZS5oZWFkZXJzLnRvSnNvbih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb21wYXRSZXNwb25zZSksIHsgaGVhZGVycywgcmVxdWVzdDogKDAsIHV0aWxfanNfMS50b1BpcGVsaW5lUmVxdWVzdCkoY29tcGF0UmVzcG9uc2UucmVxdWVzdCkgfSk7XG4gICAgfVxufVxuZXhwb3J0cy50b1BpcGVsaW5lUmVzcG9uc2UgPSB0b1BpcGVsaW5lUmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNwb25zZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV4dGVuZGVkU2VydmljZUNsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2Rpc2FibGVLZWVwQWxpdmVQb2xpY3kuanNcIik7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuY29uc3QgY29yZV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1jbGllbnRcIik7XG5jb25zdCByZXNwb25zZV9qc18xID0gcmVxdWlyZShcIi4vcmVzcG9uc2UuanNcIik7XG4vKipcbiAqIENsaWVudCB0byBwcm92aWRlIGNvbXBhdGFiaWxpdHkgYmV0d2VlbiBjb3JlIFYxICYgVjIuXG4gKi9cbmNsYXNzIEV4dGVuZGVkU2VydmljZUNsaWVudCBleHRlbmRzIGNvcmVfY2xpZW50XzEuU2VydmljZUNsaWVudCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgaWYgKCgoX2EgPSBvcHRpb25zLmtlZXBBbGl2ZU9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lbmFibGUpID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgISgwLCBkaXNhYmxlS2VlcEFsaXZlUG9saWN5X2pzXzEucGlwZWxpbmVDb250YWluc0Rpc2FibGVLZWVwQWxpdmVQb2xpY3kpKHRoaXMucGlwZWxpbmUpKSB7XG4gICAgICAgICAgICB0aGlzLnBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGlzYWJsZUtlZXBBbGl2ZVBvbGljeV9qc18xLmNyZWF0ZURpc2FibGVLZWVwQWxpdmVQb2xpY3kpKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoKF9iID0gb3B0aW9ucy5yZWRpcmVjdE9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5oYW5kbGVSZWRpcmVjdHMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5waXBlbGluZS5yZW1vdmVQb2xpY3koe1xuICAgICAgICAgICAgICAgIG5hbWU6IGNvcmVfcmVzdF9waXBlbGluZV8xLnJlZGlyZWN0UG9saWN5TmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbXBhdGlibGUgc2VuZCBvcGVyYXRpb24gcmVxdWVzdCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25Bcmd1bWVudHMgLSBPcGVyYXRpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblNwZWMgLSBPcGVyYXRpb24gU3BlY1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgc2VuZE9wZXJhdGlvblJlcXVlc3Qob3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdXNlclByb3ZpZGVkQ2FsbEJhY2sgPSAoX2EgPSBvcGVyYXRpb25Bcmd1bWVudHMgPT09IG51bGwgfHwgb3BlcmF0aW9uQXJndW1lbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25Bcmd1bWVudHMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uUmVzcG9uc2U7XG4gICAgICAgIGxldCBsYXN0UmVzcG9uc2U7XG4gICAgICAgIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmF3UmVzcG9uc2UsIGZsYXRSZXNwb25zZSwgZXJyb3IpIHtcbiAgICAgICAgICAgIGxhc3RSZXNwb25zZSA9IHJhd1Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHVzZXJQcm92aWRlZENhbGxCYWNrKSB7XG4gICAgICAgICAgICAgICAgdXNlclByb3ZpZGVkQ2FsbEJhY2socmF3UmVzcG9uc2UsIGZsYXRSZXNwb25zZSwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcGVyYXRpb25Bcmd1bWVudHMub3B0aW9ucyksIHsgb25SZXNwb25zZSB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3VwZXIuc2VuZE9wZXJhdGlvblJlcXVlc3Qob3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjKTtcbiAgICAgICAgaWYgKGxhc3RSZXNwb25zZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgXCJfcmVzcG9uc2VcIiwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAoMCwgcmVzcG9uc2VfanNfMS50b0NvbXBhdFJlc3BvbnNlKShsYXN0UmVzcG9uc2UpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5leHBvcnRzLkV4dGVuZGVkU2VydmljZUNsaWVudCA9IEV4dGVuZGVkU2VydmljZUNsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4dGVuZGVkQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kgPSBleHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSA9IGV4cG9ydHMuSHR0cFBpcGVsaW5lTG9nTGV2ZWwgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC5qc1wiKTtcbmNvbnN0IHJlc3BvbnNlX2pzXzEgPSByZXF1aXJlKFwiLi4vcmVzcG9uc2UuanNcIik7XG4vKipcbiAqIEFuIGVudW0gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBSZXF1ZXN0UG9saWN5XG4gKi9cbnZhciBIdHRwUGlwZWxpbmVMb2dMZXZlbDtcbihmdW5jdGlvbiAoSHR0cFBpcGVsaW5lTG9nTGV2ZWwpIHtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIkVSUk9SXCJdID0gMV0gPSBcIkVSUk9SXCI7XG4gICAgSHR0cFBpcGVsaW5lTG9nTGV2ZWxbSHR0cFBpcGVsaW5lTG9nTGV2ZWxbXCJJTkZPXCJdID0gM10gPSBcIklORk9cIjtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIk9GRlwiXSA9IDBdID0gXCJPRkZcIjtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIldBUk5JTkdcIl0gPSAyXSA9IFwiV0FSTklOR1wiO1xufSkoSHR0cFBpcGVsaW5lTG9nTGV2ZWwgfHwgKGV4cG9ydHMuSHR0cFBpcGVsaW5lTG9nTGV2ZWwgPSBIdHRwUGlwZWxpbmVMb2dMZXZlbCA9IHt9KSk7XG5jb25zdCBtb2NrUmVxdWVzdFBvbGljeU9wdGlvbnMgPSB7XG4gICAgbG9nKF9sb2dMZXZlbCwgX21lc3NhZ2UpIHtcbiAgICAgICAgLyogZG8gbm90aGluZyAqL1xuICAgIH0sXG4gICAgc2hvdWxkTG9nKF9sb2dMZXZlbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbn07XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeVxuICovXG5leHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSA9IFwiUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCB3cmFwcyBwb2xpY2llcyB3cml0dGVuIGZvciBjb3JlLWh0dHAuXG4gKiBAcGFyYW0gZmFjdG9yaWVzIC0gQW4gYXJyYXkgb2YgYFJlcXVlc3RQb2xpY3lGYWN0b3J5YCBvYmplY3RzIGZyb20gYSBjb3JlLWh0dHAgcGlwZWxpbmVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3koZmFjdG9yaWVzKSB7XG4gICAgY29uc3Qgb3JkZXJlZEZhY3RvcmllcyA9IGZhY3Rvcmllcy5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgbGV0IGh0dHBQaXBlbGluZSA9IHtcbiAgICAgICAgICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChodHRwUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQoKDAsIHV0aWxfanNfMS50b1BpcGVsaW5lUmVxdWVzdCkoaHR0cFJlcXVlc3QpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCByZXNwb25zZV9qc18xLnRvQ29tcGF0UmVzcG9uc2UpKHJlc3BvbnNlLCB7IGNyZWF0ZVByb3h5OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBmYWN0b3J5IG9mIG9yZGVyZWRGYWN0b3JpZXMpIHtcbiAgICAgICAgICAgICAgICBodHRwUGlwZWxpbmUgPSBmYWN0b3J5LmNyZWF0ZShodHRwUGlwZWxpbmUsIG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3ZWJSZXNvdXJjZUxpa2UgPSAoMCwgdXRpbF9qc18xLnRvV2ViUmVzb3VyY2VMaWtlKShyZXF1ZXN0LCB7IGNyZWF0ZVByb3h5OiB0cnVlIH0pO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBodHRwUGlwZWxpbmUuc2VuZFJlcXVlc3Qod2ViUmVzb3VyY2VMaWtlKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgcmVzcG9uc2VfanNfMS50b1BpcGVsaW5lUmVzcG9uc2UpKHJlc3BvbnNlKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeSA9IGNyZWF0ZVJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb252ZXJ0SHR0cENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IHJlc3BvbnNlX2pzXzEgPSByZXF1aXJlKFwiLi9yZXNwb25zZS5qc1wiKTtcbmNvbnN0IHV0aWxfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwuanNcIik7XG4vKipcbiAqIENvbnZlcnRzIGEgUmVxdWVzdFBvbGljeSBiYXNlZCBIdHRwQ2xpZW50IHRvIGEgUGlwZWxpbmVSZXF1ZXN0IGJhc2VkIEh0dHBDbGllbnQuXG4gKiBAcGFyYW0gcmVxdWVzdFBvbGljeUNsaWVudCAtIEEgSHR0cENsaWVudCBjb21wYXRpYmxlIHdpdGggY29yZS1odHRwXG4gKiBAcmV0dXJucyBBIEh0dHBDbGllbnQgY29tcGF0aWJsZSB3aXRoIGNvcmUtcmVzdC1waXBlbGluZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0SHR0cENsaWVudChyZXF1ZXN0UG9saWN5Q2xpZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZFJlcXVlc3Q6IGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RQb2xpY3lDbGllbnQuc2VuZFJlcXVlc3QoKDAsIHV0aWxfanNfMS50b1dlYlJlc291cmNlTGlrZSkocmVxdWVzdCwgeyBjcmVhdGVQcm94eTogdHJ1ZSB9KSk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHJlc3BvbnNlX2pzXzEudG9QaXBlbGluZVJlc3BvbnNlKShyZXNwb25zZSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuY29udmVydEh0dHBDbGllbnQgPSBjb252ZXJ0SHR0cENsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBDbGllbnRBZGFwdGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9IdHRwSGVhZGVyc0xpa2UgPSBleHBvcnRzLmNvbnZlcnRIdHRwQ2xpZW50ID0gZXhwb3J0cy5kaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZSA9IGV4cG9ydHMuSHR0cFBpcGVsaW5lTG9nTGV2ZWwgPSBleHBvcnRzLmNyZWF0ZVJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5ID0gZXhwb3J0cy5yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeU5hbWUgPSBleHBvcnRzLkV4dGVuZGVkU2VydmljZUNsaWVudCA9IHZvaWQgMDtcbi8qKlxuICogQSBTaGltIExpYnJhcnkgdGhhdCBwcm92aWRlcyBjb21wYXRpYmlsaXR5IGJldHdlZW4gQ29yZSBWMSAmIFYyIFBhY2thZ2VzLlxuICpcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG52YXIgZXh0ZW5kZWRDbGllbnRfanNfMSA9IHJlcXVpcmUoXCIuL2V4dGVuZGVkQ2xpZW50LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleHRlbmRlZENsaWVudF9qc18xLkV4dGVuZGVkU2VydmljZUNsaWVudDsgfSB9KTtcbnZhciByZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5X2pzXzEucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5X2pzXzEuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJIdHRwUGlwZWxpbmVMb2dMZXZlbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lfanNfMS5IdHRwUGlwZWxpbmVMb2dMZXZlbDsgfSB9KTtcbnZhciBkaXNhYmxlS2VlcEFsaXZlUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kaXNhYmxlS2VlcEFsaXZlUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMS5kaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZTsgfSB9KTtcbnZhciBodHRwQ2xpZW50QWRhcHRlcl9qc18xID0gcmVxdWlyZShcIi4vaHR0cENsaWVudEFkYXB0ZXIuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb252ZXJ0SHR0cENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaHR0cENsaWVudEFkYXB0ZXJfanNfMS5jb252ZXJ0SHR0cENsaWVudDsgfSB9KTtcbnZhciB1dGlsX2pzXzEgPSByZXF1aXJlKFwiLi91dGlsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9IdHRwSGVhZGVyc0xpa2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxfanNfMS50b0h0dHBIZWFkZXJzTGlrZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBuYW1lU3RhcnRDaGFyID0gJzpBLVphLXpfXFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkQnO1xuY29uc3QgbmFtZUNoYXIgPSBuYW1lU3RhcnRDaGFyICsgJ1xcXFwtLlxcXFxkXFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDAnO1xuY29uc3QgbmFtZVJlZ2V4cCA9ICdbJyArIG5hbWVTdGFydENoYXIgKyAnXVsnICsgbmFtZUNoYXIgKyAnXSonXG5jb25zdCByZWdleE5hbWUgPSBuZXcgUmVnRXhwKCdeJyArIG5hbWVSZWdleHAgKyAnJCcpO1xuXG5jb25zdCBnZXRBbGxNYXRjaGVzID0gZnVuY3Rpb24oc3RyaW5nLCByZWdleCkge1xuICBjb25zdCBtYXRjaGVzID0gW107XG4gIGxldCBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgd2hpbGUgKG1hdGNoKSB7XG4gICAgY29uc3QgYWxsbWF0Y2hlcyA9IFtdO1xuICAgIGFsbG1hdGNoZXMuc3RhcnRJbmRleCA9IHJlZ2V4Lmxhc3RJbmRleCAtIG1hdGNoWzBdLmxlbmd0aDtcbiAgICBjb25zdCBsZW4gPSBtYXRjaC5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgYWxsbWF0Y2hlcy5wdXNoKG1hdGNoW2luZGV4XSk7XG4gICAgfVxuICAgIG1hdGNoZXMucHVzaChhbGxtYXRjaGVzKTtcbiAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn07XG5cbmNvbnN0IGlzTmFtZSA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBjb25zdCBtYXRjaCA9IHJlZ2V4TmFtZS5leGVjKHN0cmluZyk7XG4gIHJldHVybiAhKG1hdGNoID09PSBudWxsIHx8IHR5cGVvZiBtYXRjaCA9PT0gJ3VuZGVmaW5lZCcpO1xufTtcblxuZXhwb3J0cy5pc0V4aXN0ID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gdHlwZW9mIHYgIT09ICd1bmRlZmluZWQnO1xufTtcblxuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogQ29weSBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBpbnRvIGIuXG4gKiBAcGFyYW0geyp9IHRhcmdldFxuICogQHBhcmFtIHsqfSBhXG4gKi9cbmV4cG9ydHMubWVyZ2UgPSBmdW5jdGlvbih0YXJnZXQsIGEsIGFycmF5TW9kZSkge1xuICBpZiAoYSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTsgLy8gd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Ygb3duIHByb3BlcnRpZXNcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChhcnJheU1vZGUgPT09ICdzdHJpY3QnKSB7XG4gICAgICAgIHRhcmdldFtrZXlzW2ldXSA9IFsgYVtrZXlzW2ldXSBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gYVtrZXlzW2ldXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4vKiBleHBvcnRzLm1lcmdlID1mdW5jdGlvbiAoYixhKXtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYixhKTtcbn0gKi9cblxuZXhwb3J0cy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgaWYgKGV4cG9ydHMuaXNFeGlzdCh2KSkge1xuICAgIHJldHVybiB2O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcblxuLy8gY29uc3QgZmFrZUNhbGwgPSBmdW5jdGlvbihhKSB7cmV0dXJuIGE7fTtcbi8vIGNvbnN0IGZha2VDYWxsTm9SZXR1cm4gPSBmdW5jdGlvbigpIHt9O1xuXG5leHBvcnRzLmlzTmFtZSA9IGlzTmFtZTtcbmV4cG9ydHMuZ2V0QWxsTWF0Y2hlcyA9IGdldEFsbE1hdGNoZXM7XG5leHBvcnRzLm5hbWVSZWdleHAgPSBuYW1lUmVnZXhwO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGFsbG93Qm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLCAvL0EgdGFnIGNhbiBoYXZlIGF0dHJpYnV0ZXMgd2l0aG91dCBhbnkgdmFsdWVcbiAgdW5wYWlyZWRUYWdzOiBbXVxufTtcblxuLy9jb25zdCB0YWdzUGF0dGVybiA9IG5ldyBSZWdFeHAoXCI8XFxcXC8/KFtcXFxcdzpcXFxcLV9cXC5dKylcXFxccypcXC8/PlwiLFwiZ1wiKTtcbmV4cG9ydHMudmFsaWRhdGUgPSBmdW5jdGlvbiAoeG1sRGF0YSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSxcIlwiKTsvL21ha2UgaXQgc2luZ2xlIGxpbmVcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXlxccyo8XFw/eG1sLio/XFw/PikvZyxcIlwiKTsvL1JlbW92ZSBYTUwgc3RhcnRpbmcgdGFnXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKDwhRE9DVFlQRVtcXHNcXHdcXFwiXFwuXFwvXFwtXFw6XSsoXFxbLipcXF0pKlxccyo+KS9nLFwiXCIpOy8vUmVtb3ZlIERPQ1RZUEVcbiAgY29uc3QgdGFncyA9IFtdO1xuICBsZXQgdGFnRm91bmQgPSBmYWxzZTtcblxuICAvL2luZGljYXRlcyB0aGF0IHRoZSByb290IHRhZyBoYXMgYmVlbiBjbG9zZWQgKGFrYS4gZGVwdGggMCBoYXMgYmVlbiByZWFjaGVkKVxuICBsZXQgcmVhY2hlZFJvb3QgPSBmYWxzZTtcblxuICBpZiAoeG1sRGF0YVswXSA9PT0gJ1xcdWZlZmYnKSB7XG4gICAgLy8gY2hlY2sgZm9yIGJ5dGUgb3JkZXIgbWFyayAoQk9NKVxuICAgIHhtbERhdGEgPSB4bWxEYXRhLnN1YnN0cigxKTtcbiAgfVxuICBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnICYmIHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7XG4gICAgICBpKz0yO1xuICAgICAgaSA9IHJlYWRQSSh4bWxEYXRhLGkpO1xuICAgICAgaWYgKGkuZXJyKSByZXR1cm4gaTtcbiAgICB9ZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAvL3N0YXJ0aW5nIG9mIHRhZ1xuICAgICAgLy9yZWFkIHVudGlsIHlvdSByZWFjaCB0byAnPicgYXZvaWRpbmcgYW55ICc+JyBpbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIGxldCB0YWdTdGFydFBvcyA9IGk7XG4gICAgICBpKys7XG4gICAgICBcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnIScpIHtcbiAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNsb3NpbmdUYWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICcvJykge1xuICAgICAgICAgIC8vY2xvc2luZyB0YWdcbiAgICAgICAgICBjbG9zaW5nVGFnID0gdHJ1ZTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZWFkIHRhZ25hbWVcbiAgICAgICAgbGV0IHRhZ05hbWUgPSAnJztcbiAgICAgICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICc+JyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICcgJyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXHQnICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xcbicgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFxyJzsgaSsrXG4gICAgICAgICkge1xuICAgICAgICAgIHRhZ05hbWUgKz0geG1sRGF0YVtpXTtcbiAgICAgICAgfVxuICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS50cmltKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGFnTmFtZSk7XG5cbiAgICAgICAgaWYgKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnIHdpdGhvdXQgYXR0cmlidXRlc1xuICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygwLCB0YWdOYW1lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIC8vY29udGludWU7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsaWRhdGVUYWdOYW1lKHRhZ05hbWUpKSB7XG4gICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICBpZiAodGFnTmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBtc2cgPSBcIkludmFsaWQgc3BhY2UgYWZ0ZXIgJzwnLlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtc2cgPSBcIlRhZyAnXCIrdGFnTmFtZStcIicgaXMgYW4gaW52YWxpZCBuYW1lLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBtc2csIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkQXR0cmlidXRlU3RyKHhtbERhdGEsIGkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZXMgZm9yICdcIit0YWdOYW1lK1wiJyBoYXZlIG9wZW4gcXVvdGUuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGF0dHJTdHIgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG5cbiAgICAgICAgaWYgKGF0dHJTdHJbYXR0clN0ci5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgY29uc3QgYXR0clN0clN0YXJ0ID0gaSAtIGF0dHJTdHIubGVuZ3RoO1xuICAgICAgICAgIGF0dHJTdHIgPSBhdHRyU3RyLnN1YnN0cmluZygwLCBhdHRyU3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGFnRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgLy9jb250aW51ZTsgLy90ZXh0IG1heSBwcmVzZW50cyBhZnRlciBzZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vdGhlIHJlc3VsdCBmcm9tIHRoZSBuZXN0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL2luIG9yZGVyIHRvIGdldCB0aGUgJ3RydWUnIGVycm9yIGxpbmUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgYXR0cmlidXRlIGJlZ2lucyAoaSAtIGF0dHJTdHIubGVuZ3RoKSBhbmQgdGhlbiBhZGQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL3RoaXMgZ2l2ZXMgdXMgdGhlIGFic29sdXRlIGluZGV4IGluIHRoZSBlbnRpcmUgeG1sLCB3aGljaCB3ZSBjYW4gdXNlIHRvIGZpbmQgdGhlIGxpbmUgYXQgbGFzdFxuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KGlzVmFsaWQuZXJyLmNvZGUsIGlzVmFsaWQuZXJyLm1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGF0dHJTdHJTdGFydCArIGlzVmFsaWQuZXJyLmxpbmUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2xvc2luZ1RhZykge1xuICAgICAgICAgIGlmICghcmVzdWx0LnRhZ0Nsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgZG9lc24ndCBoYXZlIHByb3BlciBjbG9zaW5nLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXR0clN0ci50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgY2FuJ3QgaGF2ZSBhdHRyaWJ1dGVzIG9yIGludmFsaWQgc3RhcnRpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdTdGFydFBvcykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsIFwiQ2xvc2luZyB0YWcgJ1wiK3RhZ05hbWUrXCInIGhhcyBub3QgYmVlbiBvcGVuZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdTdGFydFBvcykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvdGcgPSB0YWdzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKHRhZ05hbWUgIT09IG90Zy50YWdOYW1lKSB7XG4gICAgICAgICAgICAgIGxldCBvcGVuUG9zID0gZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIG90Zy50YWdTdGFydFBvcyk7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBjbG9zaW5nIHRhZyAnXCIrb3RnLnRhZ05hbWUrXCInIChvcGVuZWQgaW4gbGluZSBcIitvcGVuUG9zLmxpbmUrXCIsIGNvbCBcIitvcGVuUG9zLmNvbCtcIikgaW5zdGVhZCBvZiBjbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicuXCIsXG4gICAgICAgICAgICAgICAgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB0YWdzLCB3ZSByZWFjaGVkIHRoZSByb290IGxldmVsLlxuICAgICAgICAgICAgaWYgKHRhZ3MubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgcmVhY2hlZFJvb3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucyk7XG4gICAgICAgICAgaWYgKGlzVmFsaWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vdGhlIHJlc3VsdCBmcm9tIHRoZSBuZXN0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL2luIG9yZGVyIHRvIGdldCB0aGUgJ3RydWUnIGVycm9yIGxpbmUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgYXR0cmlidXRlIGJlZ2lucyAoaSAtIGF0dHJTdHIubGVuZ3RoKSBhbmQgdGhlbiBhZGQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL3RoaXMgZ2l2ZXMgdXMgdGhlIGFic29sdXRlIGluZGV4IGluIHRoZSBlbnRpcmUgeG1sLCB3aGljaCB3ZSBjYW4gdXNlIHRvIGZpbmQgdGhlIGxpbmUgYXQgbGFzdFxuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KGlzVmFsaWQuZXJyLmNvZGUsIGlzVmFsaWQuZXJyLm1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkgLSBhdHRyU3RyLmxlbmd0aCArIGlzVmFsaWQuZXJyLmxpbmUpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL2lmIHRoZSByb290IGxldmVsIGhhcyBiZWVuIHJlYWNoZWQgYmVmb3JlIC4uLlxuICAgICAgICAgIGlmIChyZWFjaGVkUm9vdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgJ011bHRpcGxlIHBvc3NpYmxlIHJvb3Qgbm9kZXMgZm91bmQuJywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYob3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpe1xuICAgICAgICAgICAgLy9kb24ndCBwdXNoIGludG8gc3RhY2tcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFncy5wdXNoKHt0YWdOYW1lLCB0YWdTdGFydFBvc30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL3NraXAgdGFnIHRleHQgdmFsdWVcbiAgICAgICAgLy9JdCBtYXkgaW5jbHVkZSBjb21tZW50cyBhbmQgQ0RBVEEgdmFsdWVcbiAgICAgICAgZm9yIChpKys7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8Jykge1xuICAgICAgICAgICAgaWYgKHhtbERhdGFbaSArIDFdID09PSAnIScpIHtcbiAgICAgICAgICAgICAgLy9jb21tZW50IG9yIENBREFUQVxuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIGkgPSByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpKzFdID09PSAnPycpIHtcbiAgICAgICAgICAgICAgaSA9IHJlYWRQSSh4bWxEYXRhLCArK2kpO1xuICAgICAgICAgICAgICBpZiAoaS5lcnIpIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICcmJykge1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJBbXAgPSB2YWxpZGF0ZUFtcGVyc2FuZCh4bWxEYXRhLCBpKTtcbiAgICAgICAgICAgIGlmIChhZnRlckFtcCA9PSAtMSlcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQ2hhcicsIFwiY2hhciAnJicgaXMgbm90IGV4cGVjdGVkLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgICAgaSA9IGFmdGVyQW1wO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlICYmICFpc1doaXRlU3BhY2UoeG1sRGF0YVtpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJFeHRyYSB0ZXh0IGF0IHRoZSBlbmRcIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy9lbmQgb2YgcmVhZGluZyB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggaXNXaGl0ZVNwYWNlKHhtbERhdGFbaV0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQ2hhcicsIFwiY2hhciAnXCIreG1sRGF0YVtpXStcIicgaXMgbm90IGV4cGVjdGVkLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGFnRm91bmQpIHtcbiAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnU3RhcnQgdGFnIGV4cGVjdGVkLicsIDEpO1xuICB9ZWxzZSBpZiAodGFncy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJVbmNsb3NlZCB0YWcgJ1wiK3RhZ3NbMF0udGFnTmFtZStcIicuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdzWzBdLnRhZ1N0YXJ0UG9zKSk7XG4gIH1lbHNlIGlmICh0YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsIFwiSW52YWxpZCAnXCIrXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGFncy5tYXAodCA9PiB0LnRhZ05hbWUpLCBudWxsLCA0KS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKStcbiAgICAgICAgICBcIicgZm91bmQuXCIsIHtsaW5lOiAxLCBjb2w6IDF9KTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoYXIpe1xuICByZXR1cm4gY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICdcXG4nICB8fCBjaGFyID09PSAnXFxyJztcbn1cbi8qKlxuICogUmVhZCBQcm9jZXNzaW5nIGluc3N0cnVjdGlvbnMgYW5kIHNraXBcbiAqIEBwYXJhbSB7Kn0geG1sRGF0YVxuICogQHBhcmFtIHsqfSBpXG4gKi9cbmZ1bmN0aW9uIHJlYWRQSSh4bWxEYXRhLCBpKSB7XG4gIGNvbnN0IHN0YXJ0ID0gaTtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT0gJz8nIHx8IHhtbERhdGFbaV0gPT0gJyAnKSB7XG4gICAgICAvL3RhZ25hbWVcbiAgICAgIGNvbnN0IHRhZ25hbWUgPSB4bWxEYXRhLnN1YnN0cihzdGFydCwgaSAtIHN0YXJ0KTtcbiAgICAgIGlmIChpID4gNSAmJiB0YWduYW1lID09PSAneG1sJykge1xuICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnWE1MIGRlY2xhcmF0aW9uIGFsbG93ZWQgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LicsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT0gJz8nICYmIHhtbERhdGFbaSArIDFdID09ICc+Jykge1xuICAgICAgICAvL2NoZWNrIGlmIHZhbGlkIGF0dHJpYnV0IHN0cmluZ1xuICAgICAgICBpKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpIHtcbiAgaWYgKHhtbERhdGEubGVuZ3RoID4gaSArIDUgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJy0nKSB7XG4gICAgLy9jb21tZW50XG4gICAgZm9yIChpICs9IDM7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDFdID09PSAnLScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICB4bWxEYXRhLmxlbmd0aCA+IGkgKyA4ICYmXG4gICAgeG1sRGF0YVtpICsgMV0gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDJdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2kgKyAzXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDVdID09PSAnWScgJiZcbiAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1AnICYmXG4gICAgeG1sRGF0YVtpICsgN10gPT09ICdFJ1xuICApIHtcbiAgICBsZXQgYW5nbGVCcmFja2V0c0NvdW50ID0gMTtcbiAgICBmb3IgKGkgKz0gODsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDkgJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ1snICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdDJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnRCcgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1snXG4gICkge1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICddJyAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDJdID09PSAnPicpIHtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaTtcbn1cblxuY29uc3QgZG91YmxlUXVvdGUgPSAnXCInO1xuY29uc3Qgc2luZ2xlUXVvdGUgPSBcIidcIjtcblxuLyoqXG4gKiBLZWVwIHJlYWRpbmcgeG1sRGF0YSB1bnRpbCAnPCcgaXMgZm91bmQgb3V0c2lkZSB0aGUgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBpXG4gKi9cbmZ1bmN0aW9uIHJlYWRBdHRyaWJ1dGVTdHIoeG1sRGF0YSwgaSkge1xuICBsZXQgYXR0clN0ciA9ICcnO1xuICBsZXQgc3RhcnRDaGFyID0gJyc7XG4gIGxldCB0YWdDbG9zZWQgPSBmYWxzZTtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09IGRvdWJsZVF1b3RlIHx8IHhtbERhdGFbaV0gPT09IHNpbmdsZVF1b3RlKSB7XG4gICAgICBpZiAoc3RhcnRDaGFyID09PSAnJykge1xuICAgICAgICBzdGFydENoYXIgPSB4bWxEYXRhW2ldO1xuICAgICAgfSBlbHNlIGlmIChzdGFydENoYXIgIT09IHhtbERhdGFbaV0pIHtcbiAgICAgICAgLy9pZiB2YXVlIGlzIGVuY2xvc2VkIHdpdGggZG91YmxlIHF1b3RlIHRoZW4gc2luZ2xlIHF1b3RlcyBhcmUgYWxsb3dlZCBpbnNpZGUgdGhlIHZhbHVlIGFuZCB2aWNlIHZlcnNhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXIgPSAnJztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgaWYgKHN0YXJ0Q2hhciA9PT0gJycpIHtcbiAgICAgICAgdGFnQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGF0dHJTdHIgKz0geG1sRGF0YVtpXTtcbiAgfVxuICBpZiAoc3RhcnRDaGFyICE9PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGF0dHJTdHIsXG4gICAgaW5kZXg6IGksXG4gICAgdGFnQ2xvc2VkOiB0YWdDbG9zZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBTZWxlY3QgYWxsIHRoZSBhdHRyaWJ1dGVzIHdoZXRoZXIgdmFsaWQgb3IgaW52YWxpZC5cbiAqL1xuY29uc3QgdmFsaWRBdHRyU3RyUmVneHAgPSBuZXcgUmVnRXhwKCcoXFxcXHMqKShbXlxcXFxzPV0rKShcXFxccyo9KT8oXFxcXHMqKFtcXCdcIl0pKChbXFxcXHNcXFxcU10pKj8pXFxcXDUpPycsICdnJyk7XG5cbi8vYXR0ciwgPVwic2RcIiwgYT1cImFtaXQnc1wiLCBhPVwic2RcImI9XCJzYWZcIiwgYWIgIGNkPVwiXCJcblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucykge1xuICAvL2NvbnNvbGUubG9nKFwic3RhcnQ6XCIrYXR0clN0citcIjplbmRcIik7XG5cbiAgLy9pZihhdHRyU3RyLnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiB0cnVlOyAvL2VtcHR5IHN0cmluZ1xuXG4gIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgdmFsaWRBdHRyU3RyUmVneHApO1xuICBjb25zdCBhdHRyTmFtZXMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWF0Y2hlc1tpXVsxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vbm9zcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWU6IGE9XCJzZFwiYj1cInNhZlwiXG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGhhcyBubyBzcGFjZSBpbiBzdGFydGluZy5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpXG4gICAgfSBlbHNlIGlmIChtYXRjaGVzW2ldWzNdICE9PSB1bmRlZmluZWQgJiYgbWF0Y2hlc1tpXVs0XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGlzIHdpdGhvdXQgdmFsdWUuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXNbaV1bM10gPT09IHVuZGVmaW5lZCAmJiAhb3B0aW9ucy5hbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzKSB7XG4gICAgICAvL2luZGVwZW5kZW50IGF0dHJpYnV0ZTogYWJcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcImJvb2xlYW4gYXR0cmlidXRlICdcIittYXRjaGVzW2ldWzJdK1wiJyBpcyBub3QgYWxsb3dlZC5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH1cbiAgICAvKiBlbHNlIGlmKG1hdGNoZXNbaV1bNl0gPT09IHVuZGVmaW5lZCl7Ly9hdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZTogYWI9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVycjogeyBjb2RlOlwiSW52YWxpZEF0dHJcIixtc2c6XCJhdHRyaWJ1dGUgXCIgKyBtYXRjaGVzW2ldWzJdICsgXCIgaGFzIG5vIHZhbHVlIGFzc2lnbmVkLlwifX07XG4gICAgICAgICAgICAgICAgfSAqL1xuICAgIGNvbnN0IGF0dHJOYW1lID0gbWF0Y2hlc1tpXVsyXTtcbiAgICBpZiAoIXZhbGlkYXRlQXR0ck5hbWUoYXR0ck5hbWUpKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK2F0dHJOYW1lK1wiJyBpcyBhbiBpbnZhbGlkIG5hbWUuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9XG4gICAgaWYgKCFhdHRyTmFtZXMuaGFzT3duUHJvcGVydHkoYXR0ck5hbWUpKSB7XG4gICAgICAvL2NoZWNrIGZvciBkdXBsaWNhdGUgYXR0cmlidXRlLlxuICAgICAgYXR0ck5hbWVzW2F0dHJOYW1lXSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrYXR0ck5hbWUrXCInIGlzIHJlcGVhdGVkLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyQW1wZXJzYW5kKHhtbERhdGEsIGkpIHtcbiAgbGV0IHJlID0gL1xcZC87XG4gIGlmICh4bWxEYXRhW2ldID09PSAneCcpIHtcbiAgICBpKys7XG4gICAgcmUgPSAvW1xcZGEtZkEtRl0vO1xuICB9XG4gIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgICByZXR1cm4gaTtcbiAgICBpZiAoIXhtbERhdGFbaV0ubWF0Y2gocmUpKVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUFtcGVyc2FuZCh4bWxEYXRhLCBpKSB7XG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwvI2R0LWNoYXJyZWZcbiAgaSsrO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgIHJldHVybiAtMTtcbiAgaWYgKHhtbERhdGFbaV0gPT09ICcjJykge1xuICAgIGkrKztcbiAgICByZXR1cm4gdmFsaWRhdGVOdW1iZXJBbXBlcnNhbmQoeG1sRGF0YSwgaSk7XG4gIH1cbiAgbGV0IGNvdW50ID0gMDtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrLCBjb3VudCsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0ubWF0Y2goL1xcdy8pICYmIGNvdW50IDwgMjApXG4gICAgICBjb250aW51ZTtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgICAgYnJlYWs7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvck9iamVjdChjb2RlLCBtZXNzYWdlLCBsaW5lTnVtYmVyKSB7XG4gIHJldHVybiB7XG4gICAgZXJyOiB7XG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgbXNnOiBtZXNzYWdlLFxuICAgICAgbGluZTogbGluZU51bWJlci5saW5lIHx8IGxpbmVOdW1iZXIsXG4gICAgICBjb2w6IGxpbmVOdW1iZXIuY29sLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXR0ck5hbWUoYXR0ck5hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKGF0dHJOYW1lKTtcbn1cblxuLy8gY29uc3Qgc3RhcnRzV2l0aFhNTCA9IC9eeG1sL2k7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFnTmFtZSh0YWduYW1lKSB7XG4gIHJldHVybiB1dGlsLmlzTmFtZSh0YWduYW1lKSAvKiAmJiAhdGFnbmFtZS5tYXRjaChzdGFydHNXaXRoWE1MKSAqLztcbn1cblxuLy90aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBpbmRleFxuZnVuY3Rpb24gZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGluZGV4KSB7XG4gIGNvbnN0IGxpbmVzID0geG1sRGF0YS5zdWJzdHJpbmcoMCwgaW5kZXgpLnNwbGl0KC9cXHI/XFxuLyk7XG4gIHJldHVybiB7XG4gICAgbGluZTogbGluZXMubGVuZ3RoLFxuXG4gICAgLy8gY29sdW1uIG51bWJlciBpcyBsYXN0IGxpbmUncyBsZW5ndGggKyAxLCBiZWNhdXNlIGNvbHVtbiBudW1iZXJpbmcgc3RhcnRzIGF0IDE6XG4gICAgY29sOiBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggKyAxXG4gIH07XG59XG5cbi8vdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIG1hdGNoIHdpdGhpbiBhdHRyU3RyXG5mdW5jdGlvbiBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaCkge1xuICByZXR1cm4gbWF0Y2guc3RhcnRJbmRleCArIG1hdGNoWzFdLmxlbmd0aDtcbn1cbiIsCiAgICAiXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBwcmVzZXJ2ZU9yZGVyOiBmYWxzZSxcbiAgICBhdHRyaWJ1dGVOYW1lUHJlZml4OiAnQF8nLFxuICAgIGF0dHJpYnV0ZXNHcm91cE5hbWU6IGZhbHNlLFxuICAgIHRleHROb2RlTmFtZTogJyN0ZXh0JyxcbiAgICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICAgIHJlbW92ZU5TUHJlZml4OiBmYWxzZSwgLy8gcmVtb3ZlIE5TIGZyb20gdGFnIG5hbWUgb3IgYXR0cmlidXRlIG5hbWUgaWYgdHJ1ZVxuICAgIGFsbG93Qm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLCAvL2EgdGFnIGNhbiBoYXZlIGF0dHJpYnV0ZXMgd2l0aG91dCBhbnkgdmFsdWVcbiAgICAvL2lnbm9yZVJvb3RFbGVtZW50IDogZmFsc2UsXG4gICAgcGFyc2VUYWdWYWx1ZTogdHJ1ZSxcbiAgICBwYXJzZUF0dHJpYnV0ZVZhbHVlOiBmYWxzZSxcbiAgICB0cmltVmFsdWVzOiB0cnVlLCAvL1RyaW0gc3RyaW5nIHZhbHVlcyBvZiB0YWcgYW5kIGF0dHJpYnV0ZXNcbiAgICBjZGF0YVByb3BOYW1lOiBmYWxzZSxcbiAgICBudW1iZXJQYXJzZU9wdGlvbnM6IHtcbiAgICAgIGhleDogdHJ1ZSxcbiAgICAgIGxlYWRpbmdaZXJvczogdHJ1ZSxcbiAgICAgIGVOb3RhdGlvbjogdHJ1ZVxuICAgIH0sXG4gICAgdGFnVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKHRhZ05hbWUsIHZhbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuICAgIGF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihhdHRyTmFtZSwgdmFsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgc3RvcE5vZGVzOiBbXSwgLy9uZXN0ZWQgdGFncyB3aWxsIG5vdCBiZSBwYXJzZWQgZXZlbiBmb3IgZXJyb3JzXG4gICAgYWx3YXlzQ3JlYXRlVGV4dE5vZGU6IGZhbHNlLFxuICAgIGlzQXJyYXk6ICgpID0+IGZhbHNlLFxuICAgIGNvbW1lbnRQcm9wTmFtZTogZmFsc2UsXG4gICAgdW5wYWlyZWRUYWdzOiBbXSxcbiAgICBwcm9jZXNzRW50aXRpZXM6IHRydWUsXG4gICAgaHRtbEVudGl0aWVzOiBmYWxzZSxcbiAgICBpZ25vcmVEZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgaWdub3JlUGlUYWdzOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1UYWdOYW1lOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lOiBmYWxzZSxcbiAgICB1cGRhdGVUYWc6IGZ1bmN0aW9uKHRhZ05hbWUsIGpQYXRoLCBhdHRycyl7XG4gICAgICByZXR1cm4gdGFnTmFtZVxuICAgIH0sXG4gICAgLy8gc2tpcEVtcHR5TGlzdEl0ZW06IGZhbHNlXG59O1xuICAgXG5jb25zdCBidWlsZE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydHMuYnVpbGRPcHRpb25zID0gYnVpbGRPcHRpb25zO1xuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zOyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBYbWxOb2Rle1xuICBjb25zdHJ1Y3Rvcih0YWduYW1lKSB7XG4gICAgdGhpcy50YWduYW1lID0gdGFnbmFtZTtcbiAgICB0aGlzLmNoaWxkID0gW107IC8vbmVzdGVkIHRhZ3MsIHRleHQsIGNkYXRhLCBjb21tZW50cyBpbiBvcmRlclxuICAgIHRoaXNbXCI6QFwiXSA9IHt9OyAvL2F0dHJpYnV0ZXMgbWFwXG4gIH1cbiAgYWRkKGtleSx2YWwpe1xuICAgIC8vIHRoaXMuY2hpbGQucHVzaCgge25hbWUgOiBrZXksIHZhbDogdmFsLCBpc0NkYXRhOiBpc0NkYXRhIH0pO1xuICAgIGlmKGtleSA9PT0gXCJfX3Byb3RvX19cIikga2V5ID0gXCIjX19wcm90b19fXCI7XG4gICAgdGhpcy5jaGlsZC5wdXNoKCB7W2tleV06IHZhbCB9KTtcbiAgfVxuICBhZGRDaGlsZChub2RlKSB7XG4gICAgaWYobm9kZS50YWduYW1lID09PSBcIl9fcHJvdG9fX1wiKSBub2RlLnRhZ25hbWUgPSBcIiNfX3Byb3RvX19cIjtcbiAgICBpZihub2RlW1wiOkBcIl0gJiYgT2JqZWN0LmtleXMobm9kZVtcIjpAXCJdKS5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuY2hpbGQucHVzaCggeyBbbm9kZS50YWduYW1lXTogbm9kZS5jaGlsZCwgW1wiOkBcIl06IG5vZGVbXCI6QFwiXSB9KTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuY2hpbGQucHVzaCggeyBbbm9kZS50YWduYW1lXTogbm9kZS5jaGlsZCB9KTtcbiAgICB9XG4gIH07XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gWG1sTm9kZTsiLAogICAgImNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbi8vVE9ETzogaGFuZGxlIGNvbW1lbnRzXG5mdW5jdGlvbiByZWFkRG9jVHlwZSh4bWxEYXRhLCBpKXtcbiAgICBcbiAgICBjb25zdCBlbnRpdGllcyA9IHt9O1xuICAgIGlmKCB4bWxEYXRhW2kgKyAzXSA9PT0gJ08nICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0MnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA1XSA9PT0gJ1QnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1knICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1AnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA4XSA9PT0gJ0UnKVxuICAgIHsgICAgXG4gICAgICAgIGkgPSBpKzk7XG4gICAgICAgIGxldCBhbmdsZUJyYWNrZXRzQ291bnQgPSAxO1xuICAgICAgICBsZXQgaGFzQm9keSA9IGZhbHNlLCBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGxldCBleHAgPSBcIlwiO1xuICAgICAgICBmb3IoO2k8eG1sRGF0YS5sZW5ndGg7aSsrKXtcbiAgICAgICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcgJiYgIWNvbW1lbnQpIHsgLy9EZXRlcm1pbmUgdGhlIHRhZyB0eXBlXG4gICAgICAgICAgICAgICAgaWYoIGhhc0JvZHkgJiYgaXNFbnRpdHkoeG1sRGF0YSwgaSkpe1xuICAgICAgICAgICAgICAgICAgICBpICs9IDc7IFxuICAgICAgICAgICAgICAgICAgICBbZW50aXR5TmFtZSwgdmFsLGldID0gcmVhZEVudGl0eUV4cCh4bWxEYXRhLGkrMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHZhbC5pbmRleE9mKFwiJlwiKSA9PT0gLTEpIC8vUGFyYW1ldGVyIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdGllc1sgdmFsaWRhdGVFbnRpdHlOYW1lKGVudGl0eU5hbWUpIF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVneCA6IFJlZ0V4cCggYCYke2VudGl0eU5hbWV9O2AsXCJnXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbDogdmFsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzRWxlbWVudCh4bWxEYXRhLCBpKSkgIGkgKz0gODsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzQXR0bGlzdCh4bWxEYXRhLCBpKSkgIGkgKz0gODsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzTm90YXRpb24oeG1sRGF0YSwgaSkpIGkgKz0gOTsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBpc0NvbW1lbnQpICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBET0NUWVBFXCIpO1xuXG4gICAgICAgICAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICAgICAgICAgICAgZXhwID0gXCJcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7IC8vUmVhZCB0YWcgY29udGVudFxuICAgICAgICAgICAgICAgIGlmKGNvbW1lbnQpe1xuICAgICAgICAgICAgICAgICAgICBpZiggeG1sRGF0YVtpIC0gMV0gPT09IFwiLVwiICYmIHhtbERhdGFbaSAtIDJdID09PSBcIi1cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYoIHhtbERhdGFbaV0gPT09ICdbJyl7XG4gICAgICAgICAgICAgICAgaGFzQm9keSA9IHRydWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBleHAgKz0geG1sRGF0YVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihhbmdsZUJyYWNrZXRzQ291bnQgIT09IDApe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmNsb3NlZCBET0NUWVBFYCk7XG4gICAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFRhZyBpbnN0ZWFkIG9mIERPQ1RZUEVgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtlbnRpdGllcywgaX07XG59XG5cbmZ1bmN0aW9uIHJlYWRFbnRpdHlFeHAoeG1sRGF0YSxpKXtcbiAgICAvL0V4dGVybmFsIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgLy8gICAgPCFFTlRJVFkgZXh0IFNZU1RFTSBcImh0dHA6Ly9ub3JtYWwtd2Vic2l0ZS5jb21cIiA+XG5cbiAgICAvL1BhcmFtZXRlciBlbnRpdGllcyBhcmUgbm90IHN1cHBvcnRlZFxuICAgIC8vICAgIDwhRU5USVRZIGVudGl0eW5hbWUgXCImYW5vdGhlckVsZW1lbnQ7XCI+XG5cbiAgICAvL0ludGVybmFsIGVudGl0aWVzIGFyZSBzdXBwb3J0ZWRcbiAgICAvLyAgICA8IUVOVElUWSBlbnRpdHluYW1lIFwicmVwbGFjZW1lbnQgdGV4dFwiPlxuICAgIFxuICAgIC8vcmVhZCBFbnRpdHlOYW1lXG4gICAgbGV0IGVudGl0eU5hbWUgPSBcIlwiO1xuICAgIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGggJiYgKHhtbERhdGFbaV0gIT09IFwiJ1wiICYmIHhtbERhdGFbaV0gIT09ICdcIicgKTsgaSsrKSB7XG4gICAgICAgIC8vIGlmKHhtbERhdGFbaV0gPT09IFwiIFwiKSBjb250aW51ZTtcbiAgICAgICAgLy8gZWxzZSBcbiAgICAgICAgZW50aXR5TmFtZSArPSB4bWxEYXRhW2ldO1xuICAgIH1cbiAgICBlbnRpdHlOYW1lID0gZW50aXR5TmFtZS50cmltKCk7XG4gICAgaWYoZW50aXR5TmFtZS5pbmRleE9mKFwiIFwiKSAhPT0gLTEpIHRocm93IG5ldyBFcnJvcihcIkV4dGVybmFsIGVudGl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG5cbiAgICAvL3JlYWQgRW50aXR5IFZhbHVlXG4gICAgY29uc3Qgc3RhcnRDaGFyID0geG1sRGF0YVtpKytdO1xuICAgIGxldCB2YWwgPSBcIlwiXG4gICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJiB4bWxEYXRhW2ldICE9PSBzdGFydENoYXIgOyBpKyspIHtcbiAgICAgICAgdmFsICs9IHhtbERhdGFbaV07XG4gICAgfVxuICAgIHJldHVybiBbZW50aXR5TmFtZSwgdmFsLCBpXTtcbn1cblxuZnVuY3Rpb24gaXNDb21tZW50KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnLScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICctJykgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2Vcbn1cbmZ1bmN0aW9uIGlzRW50aXR5KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdOJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnSScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ1knKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNFbGVtZW50KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdMJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ0UnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnTScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdFJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzhdID09PSAnVCcpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGlzQXR0bGlzdCh4bWxEYXRhLCBpKXtcbiAgICBpZih4bWxEYXRhW2krMV0gPT09ICchJyAmJlxuICAgIHhtbERhdGFbaSsyXSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpKzNdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs1XSA9PT0gJ0wnICYmXG4gICAgeG1sRGF0YVtpKzZdID09PSAnSScgJiZcbiAgICB4bWxEYXRhW2krN10gPT09ICdTJyAmJlxuICAgIHhtbERhdGFbaSs4XSA9PT0gJ1QnKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNOb3RhdGlvbih4bWxEYXRhLCBpKXtcbiAgICBpZih4bWxEYXRhW2krMV0gPT09ICchJyAmJlxuICAgIHhtbERhdGFbaSsyXSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzNdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2krNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs1XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpKzZdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krN10gPT09ICdJJyAmJlxuICAgIHhtbERhdGFbaSs4XSA9PT0gJ08nICYmXG4gICAgeG1sRGF0YVtpKzldID09PSAnTicpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRW50aXR5TmFtZShuYW1lKXtcbiAgICBpZiAodXRpbC5pc05hbWUobmFtZSkpXG5cdHJldHVybiBuYW1lO1xuICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVudGl0eSBuYW1lICR7bmFtZX1gKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWFkRG9jVHlwZTtcbiIsCiAgICAiY29uc3QgaGV4UmVnZXggPSAvXlstK10/MHhbYS1mQS1GMC05XSskLztcbmNvbnN0IG51bVJlZ2V4ID0gL14oW1xcLVxcK10pPygwKikoXFwuWzAtOV0rKFtlRV1cXC0/WzAtOV0rKT98WzAtOV0rKFxcLlswLTldKyhbZUVdXFwtP1swLTldKyk/KT8pJC87XG4vLyBjb25zdCBvY3RSZWdleCA9IC8weFthLXowLTldKy87XG4vLyBjb25zdCBiaW5SZWdleCA9IC8weFthLXowLTldKy87XG5cblxuLy9wb2x5ZmlsbFxuaWYgKCFOdW1iZXIucGFyc2VJbnQgJiYgd2luZG93LnBhcnNlSW50KSB7XG4gICAgTnVtYmVyLnBhcnNlSW50ID0gd2luZG93LnBhcnNlSW50O1xufVxuaWYgKCFOdW1iZXIucGFyc2VGbG9hdCAmJiB3aW5kb3cucGFyc2VGbG9hdCkge1xuICAgIE51bWJlci5wYXJzZUZsb2F0ID0gd2luZG93LnBhcnNlRmxvYXQ7XG59XG5cbiAgXG5jb25zdCBjb25zaWRlciA9IHtcbiAgICBoZXggOiAgdHJ1ZSxcbiAgICBsZWFkaW5nWmVyb3M6IHRydWUsXG4gICAgZGVjaW1hbFBvaW50OiBcIlxcLlwiLFxuICAgIGVOb3RhdGlvbjogdHJ1ZVxuICAgIC8vc2tpcExpa2U6IC9yZWdleC9cbn07XG5cbmZ1bmN0aW9uIHRvTnVtYmVyKHN0ciwgb3B0aW9ucyA9IHt9KXtcbiAgICAvLyBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgY29uc2lkZXIpO1xuICAgIC8vIGlmKG9wdC5sZWFkaW5nWmVyb3MgPT09IGZhbHNlKXtcbiAgICAvLyAgICAgb3B0aW9ucy5sZWFkaW5nWmVyb3MgPSBmYWxzZTtcbiAgICAvLyB9ZWxzZSBpZihvcHQuaGV4ID09PSBmYWxzZSl7XG4gICAgLy8gICAgIG9wdGlvbnMuaGV4ID0gZmFsc2U7XG4gICAgLy8gfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnNpZGVyLCBvcHRpb25zICk7XG4gICAgaWYoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiICkgcmV0dXJuIHN0cjtcbiAgICBcbiAgICBsZXQgdHJpbW1lZFN0ciAgPSBzdHIudHJpbSgpO1xuICAgIC8vIGlmKHRyaW1tZWRTdHIgPT09IFwiMC4wXCIpIHJldHVybiAwO1xuICAgIC8vIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gXCIrMC4wXCIpIHJldHVybiAwO1xuICAgIC8vIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gXCItMC4wXCIpIHJldHVybiAtMDtcblxuICAgIGlmKG9wdGlvbnMuc2tpcExpa2UgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnNraXBMaWtlLnRlc3QodHJpbW1lZFN0cikpIHJldHVybiBzdHI7XG4gICAgZWxzZSBpZiAob3B0aW9ucy5oZXggJiYgaGV4UmVnZXgudGVzdCh0cmltbWVkU3RyKSkge1xuICAgICAgICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHRyaW1tZWRTdHIsIDE2KTtcbiAgICAvLyB9IGVsc2UgaWYgKG9wdGlvbnMucGFyc2VPY3QgJiYgb2N0UmVnZXgudGVzdChzdHIpKSB7XG4gICAgLy8gICAgIHJldHVybiBOdW1iZXIucGFyc2VJbnQodmFsLCA4KTtcbiAgICAvLyB9ZWxzZSBpZiAob3B0aW9ucy5wYXJzZUJpbiAmJiBiaW5SZWdleC50ZXN0KHN0cikpIHtcbiAgICAvLyAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludCh2YWwsIDIpO1xuICAgIH1lbHNle1xuICAgICAgICAvL3NlcGFyYXRlIG5lZ2F0aXZlIHNpZ24sIGxlYWRpbmcgemVyb3MsIGFuZCByZXN0IG51bWJlclxuICAgICAgICBjb25zdCBtYXRjaCA9IG51bVJlZ2V4LmV4ZWModHJpbW1lZFN0cik7XG4gICAgICAgIGlmKG1hdGNoKXtcbiAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIGNvbnN0IGxlYWRpbmdaZXJvcyA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgbGV0IG51bVRyaW1tZWRCeVplcm9zID0gdHJpbVplcm9zKG1hdGNoWzNdKTsgLy9jb21wbGV0ZSBudW0gd2l0aG91dCBsZWFkaW5nIHplcm9zXG4gICAgICAgICAgICAvL3RyaW0gZW5kaW5nIHplcm9zIGZvciBmbG9hdGluZyBudW1iZXJcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZU5vdGF0aW9uID0gbWF0Y2hbNF0gfHwgbWF0Y2hbNl07XG4gICAgICAgICAgICBpZighb3B0aW9ucy5sZWFkaW5nWmVyb3MgJiYgbGVhZGluZ1plcm9zLmxlbmd0aCA+IDAgJiYgc2lnbiAmJiB0cmltbWVkU3RyWzJdICE9PSBcIi5cIikgcmV0dXJuIHN0cjsgLy8tMDEyM1xuICAgICAgICAgICAgZWxzZSBpZighb3B0aW9ucy5sZWFkaW5nWmVyb3MgJiYgbGVhZGluZ1plcm9zLmxlbmd0aCA+IDAgJiYgIXNpZ24gJiYgdHJpbW1lZFN0clsxXSAhPT0gXCIuXCIpIHJldHVybiBzdHI7IC8vMDEyM1xuICAgICAgICAgICAgZWxzZXsvL25vIGxlYWRpbmcgemVyb3Mgb3IgbGVhZGluZyB6ZXJvcyBhcmUgYWxsb3dlZFxuICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih0cmltbWVkU3RyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1TdHIgPSBcIlwiICsgbnVtO1xuICAgICAgICAgICAgICAgIGlmKG51bVN0ci5zZWFyY2goL1tlRV0vKSAhPT0gLTEpeyAvL2dpdmVuIG51bWJlciBpcyBsb25nIGFuZCBwYXJzZWQgdG8gZU5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuZU5vdGF0aW9uKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZU5vdGF0aW9uKXsgLy9naXZlbiBudW1iZXIgaGFzIGVub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZihvcHRpb25zLmVOb3RhdGlvbikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHRyaW1tZWRTdHIuaW5kZXhPZihcIi5cIikgIT09IC0xKXsgLy9mbG9hdGluZyBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgZGVjaW1hbFBhcnQgPSBtYXRjaFs1XS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGludFBhcnQgPSB0cmltbWVkU3RyLnN1YnN0cigwLHRyaW1tZWRTdHIuaW5kZXhPZihcIi5cIikpO1xuXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBwID0gbnVtU3RyLmluZGV4T2YoXCIuXCIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBnaXZlbkludFBhcnQgPSBudW1TdHIuc3Vic3RyKDAscCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGdpdmVuRGVjUGFydCA9IG51bVN0ci5zdWJzdHIocCsxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYobnVtU3RyID09PSBcIjBcIiAmJiAobnVtVHJpbW1lZEJ5WmVyb3MgPT09IFwiXCIpICkgcmV0dXJuIG51bTsgLy8wLjBcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihudW1TdHIgPT09IG51bVRyaW1tZWRCeVplcm9zKSByZXR1cm4gbnVtOyAvLzAuNDU2LiAwLjc5MDAwXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIHNpZ24gJiYgbnVtU3RyID09PSBcIi1cIitudW1UcmltbWVkQnlaZXJvcykgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZihsZWFkaW5nWmVyb3Mpe1xuICAgICAgICAgICAgICAgICAgICAvLyBpZihudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGlmKG9wdGlvbnMubGVhZGluZ1plcm9zKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICBpZihudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHNpZ24rbnVtVHJpbW1lZEJ5WmVyb3MgPT09IG51bVN0cikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRyaW1tZWRTdHIgPT09IG51bVN0cikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHRyaW1tZWRTdHIgPT09IHNpZ24rbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgIC8vIGVsc2V7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vbnVtYmVyIHdpdGggKy8tIHNpZ25cbiAgICAgICAgICAgICAgICAvLyAgICAgdHJpbW1lZFN0ci50ZXN0KC9bLStdWzAtOV0pO1xuXG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbHNlIGlmKCFlTm90YXRpb24gJiYgdHJpbW1lZFN0ciAmJiB0cmltbWVkU3RyICE9PSBOdW1iZXIodHJpbW1lZFN0cikgKSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNleyAvL25vbi1udW1lcmljIHN0cmluZ1xuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBudW1TdHIgd2l0aG91dCBsZWFkaW5nIHplcm9zXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdHJpbVplcm9zKG51bVN0cil7XG4gICAgaWYobnVtU3RyICYmIG51bVN0ci5pbmRleE9mKFwiLlwiKSAhPT0gLTEpey8vZmxvYXRcbiAgICAgICAgbnVtU3RyID0gbnVtU3RyLnJlcGxhY2UoLzArJC8sIFwiXCIpOyAvL3JlbW92ZSBlbmRpbmcgemVyb3NcbiAgICAgICAgaWYobnVtU3RyID09PSBcIi5cIikgIG51bVN0ciA9IFwiMFwiO1xuICAgICAgICBlbHNlIGlmKG51bVN0clswXSA9PT0gXCIuXCIpICBudW1TdHIgPSBcIjBcIitudW1TdHI7XG4gICAgICAgIGVsc2UgaWYobnVtU3RyW251bVN0ci5sZW5ndGgtMV0gPT09IFwiLlwiKSAgbnVtU3RyID0gbnVtU3RyLnN1YnN0cigwLG51bVN0ci5sZW5ndGgtMSk7XG4gICAgICAgIHJldHVybiBudW1TdHI7XG4gICAgfVxuICAgIHJldHVybiBudW1TdHI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvTnVtYmVyXG4iLAogICAgImZ1bmN0aW9uIGdldElnbm9yZUF0dHJpYnV0ZXNGbihpZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHR5cGVvZiBpZ25vcmVBdHRyaWJ1dGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBpZ25vcmVBdHRyaWJ1dGVzXG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGlnbm9yZUF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIHJldHVybiAoYXR0ck5hbWUpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBpZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJyAmJiBhdHRyTmFtZSA9PT0gcGF0dGVybikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBwYXR0ZXJuLnRlc3QoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiBmYWxzZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldElnbm9yZUF0dHJpYnV0ZXNGbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuLy8vQHRzLWNoZWNrXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB4bWxOb2RlID0gcmVxdWlyZSgnLi94bWxOb2RlJyk7XG5jb25zdCByZWFkRG9jVHlwZSA9IHJlcXVpcmUoXCIuL0RvY1R5cGVSZWFkZXJcIik7XG5jb25zdCB0b051bWJlciA9IHJlcXVpcmUoXCJzdHJudW1cIik7XG5jb25zdCBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4gPSByZXF1aXJlKCcuLi9pZ25vcmVBdHRyaWJ1dGVzJylcblxuLy8gY29uc3QgcmVneCA9XG4vLyAgICc8KCghXFxcXFtDREFUQVxcXFxbKFtcXFxcc1xcXFxTXSo/KShdXT4pKXwoKE5BTUU6KT8oTkFNRSkpKFtePl0qKT58KChcXFxcLykoTkFNRSlcXFxccyo+KSkoW148XSopJ1xuLy8gICAucmVwbGFjZSgvTkFNRS9nLCB1dGlsLm5hbWVSZWdleHApO1xuXG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/W1xcXFx3OlxcXFwtXFwuX10rKShbXj5dKik+KFxcXFxzKlwiK2NkYXRhUmVneCtcIikqKFtePF0rKT9cIixcImdcIik7XG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/KSgoXFxcXHcqOik/KFtcXFxcdzpcXFxcLVxcLl9dKykpKFtePl0qKT4oW148XSopKFwiK2NkYXRhUmVneCtcIihbXjxdKikpKihbXjxdKyk/XCIsXCJnXCIpO1xuXG5jbGFzcyBPcmRlcmVkT2JqUGFyc2Vye1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKXtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuY3VycmVudE5vZGUgPSBudWxsO1xuICAgIHRoaXMudGFnc05vZGVTdGFjayA9IFtdO1xuICAgIHRoaXMuZG9jVHlwZUVudGl0aWVzID0ge307XG4gICAgdGhpcy5sYXN0RW50aXRpZXMgPSB7XG4gICAgICBcImFwb3NcIiA6IHsgcmVnZXg6IC8mKGFwb3N8IzM5fCN4MjcpOy9nLCB2YWwgOiBcIidcIn0sXG4gICAgICBcImd0XCIgOiB7IHJlZ2V4OiAvJihndHwjNjJ8I3gzRSk7L2csIHZhbCA6IFwiPlwifSxcbiAgICAgIFwibHRcIiA6IHsgcmVnZXg6IC8mKGx0fCM2MHwjeDNDKTsvZywgdmFsIDogXCI8XCJ9LFxuICAgICAgXCJxdW90XCIgOiB7IHJlZ2V4OiAvJihxdW90fCMzNHwjeDIyKTsvZywgdmFsIDogXCJcXFwiXCJ9LFxuICAgIH07XG4gICAgdGhpcy5hbXBFbnRpdHkgPSB7IHJlZ2V4OiAvJihhbXB8IzM4fCN4MjYpOy9nLCB2YWwgOiBcIiZcIn07XG4gICAgdGhpcy5odG1sRW50aXRpZXMgPSB7XG4gICAgICBcInNwYWNlXCI6IHsgcmVnZXg6IC8mKG5ic3B8IzE2MCk7L2csIHZhbDogXCIgXCIgfSxcbiAgICAgIC8vIFwibHRcIiA6IHsgcmVnZXg6IC8mKGx0fCM2MCk7L2csIHZhbDogXCI8XCIgfSxcbiAgICAgIC8vIFwiZ3RcIiA6IHsgcmVnZXg6IC8mKGd0fCM2Mik7L2csIHZhbDogXCI+XCIgfSxcbiAgICAgIC8vIFwiYW1wXCIgOiB7IHJlZ2V4OiAvJihhbXB8IzM4KTsvZywgdmFsOiBcIiZcIiB9LFxuICAgICAgLy8gXCJxdW90XCIgOiB7IHJlZ2V4OiAvJihxdW90fCMzNCk7L2csIHZhbDogXCJcXFwiXCIgfSxcbiAgICAgIC8vIFwiYXBvc1wiIDogeyByZWdleDogLyYoYXBvc3wjMzkpOy9nLCB2YWw6IFwiJ1wiIH0sXG4gICAgICBcImNlbnRcIiA6IHsgcmVnZXg6IC8mKGNlbnR8IzE2Mik7L2csIHZhbDogXCLColwiIH0sXG4gICAgICBcInBvdW5kXCIgOiB7IHJlZ2V4OiAvJihwb3VuZHwjMTYzKTsvZywgdmFsOiBcIsKjXCIgfSxcbiAgICAgIFwieWVuXCIgOiB7IHJlZ2V4OiAvJih5ZW58IzE2NSk7L2csIHZhbDogXCLCpVwiIH0sXG4gICAgICBcImV1cm9cIiA6IHsgcmVnZXg6IC8mKGV1cm98IzgzNjQpOy9nLCB2YWw6IFwi4oKsXCIgfSxcbiAgICAgIFwiY29weXJpZ2h0XCIgOiB7IHJlZ2V4OiAvJihjb3B5fCMxNjkpOy9nLCB2YWw6IFwiwqlcIiB9LFxuICAgICAgXCJyZWdcIiA6IHsgcmVnZXg6IC8mKHJlZ3wjMTc0KTsvZywgdmFsOiBcIsKuXCIgfSxcbiAgICAgIFwiaW5yXCIgOiB7IHJlZ2V4OiAvJihpbnJ8IzgzNzcpOy9nLCB2YWw6IFwi4oK5XCIgfSxcbiAgICAgIFwibnVtX2RlY1wiOiB7IHJlZ2V4OiAvJiMoWzAtOV17MSw3fSk7L2csIHZhbCA6IChfLCBzdHIpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KHN0ciwgMTApKSB9LFxuICAgICAgXCJudW1faGV4XCI6IHsgcmVnZXg6IC8mI3goWzAtOWEtZkEtRl17MSw2fSk7L2csIHZhbCA6IChfLCBzdHIpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KHN0ciwgMTYpKSB9LFxuICAgIH07XG4gICAgdGhpcy5hZGRFeHRlcm5hbEVudGl0aWVzID0gYWRkRXh0ZXJuYWxFbnRpdGllcztcbiAgICB0aGlzLnBhcnNlWG1sID0gcGFyc2VYbWw7XG4gICAgdGhpcy5wYXJzZVRleHREYXRhID0gcGFyc2VUZXh0RGF0YTtcbiAgICB0aGlzLnJlc29sdmVOYW1lU3BhY2UgPSByZXNvbHZlTmFtZVNwYWNlO1xuICAgIHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwID0gYnVpbGRBdHRyaWJ1dGVzTWFwO1xuICAgIHRoaXMuaXNJdFN0b3BOb2RlID0gaXNJdFN0b3BOb2RlO1xuICAgIHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUgPSByZXBsYWNlRW50aXRpZXNWYWx1ZTtcbiAgICB0aGlzLnJlYWRTdG9wTm9kZURhdGEgPSByZWFkU3RvcE5vZGVEYXRhO1xuICAgIHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyA9IHNhdmVUZXh0VG9QYXJlbnRUYWc7XG4gICAgdGhpcy5hZGRDaGlsZCA9IGFkZENoaWxkO1xuICAgIHRoaXMuaWdub3JlQXR0cmlidXRlc0ZuID0gZ2V0SWdub3JlQXR0cmlidXRlc0ZuKHRoaXMub3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzKVxuICB9XG5cbn1cblxuZnVuY3Rpb24gYWRkRXh0ZXJuYWxFbnRpdGllcyhleHRlcm5hbEVudGl0aWVzKXtcbiAgY29uc3QgZW50S2V5cyA9IE9iamVjdC5rZXlzKGV4dGVybmFsRW50aXRpZXMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVudEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBlbnQgPSBlbnRLZXlzW2ldO1xuICAgIHRoaXMubGFzdEVudGl0aWVzW2VudF0gPSB7XG4gICAgICAgcmVnZXg6IG5ldyBSZWdFeHAoXCImXCIrZW50K1wiO1wiLFwiZ1wiKSxcbiAgICAgICB2YWwgOiBleHRlcm5hbEVudGl0aWVzW2VudF1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGpQYXRoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGRvbnRUcmltXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0F0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMZWFmTm9kZVxuICogQHBhcmFtIHtib29sZWFufSBlc2NhcGVFbnRpdGllc1xuICovXG5mdW5jdGlvbiBwYXJzZVRleHREYXRhKHZhbCwgdGFnTmFtZSwgalBhdGgsIGRvbnRUcmltLCBoYXNBdHRyaWJ1dGVzLCBpc0xlYWZOb2RlLCBlc2NhcGVFbnRpdGllcykge1xuICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnRyaW1WYWx1ZXMgJiYgIWRvbnRUcmltKSB7XG4gICAgICB2YWwgPSB2YWwudHJpbSgpO1xuICAgIH1cbiAgICBpZih2YWwubGVuZ3RoID4gMCl7XG4gICAgICBpZighZXNjYXBlRW50aXRpZXMpIHZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodmFsKTtcbiAgICAgIFxuICAgICAgY29uc3QgbmV3dmFsID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKHRhZ05hbWUsIHZhbCwgalBhdGgsIGhhc0F0dHJpYnV0ZXMsIGlzTGVhZk5vZGUpO1xuICAgICAgaWYobmV3dmFsID09PSBudWxsIHx8IG5ld3ZhbCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgLy9kb24ndCBwYXJzZVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfWVsc2UgaWYodHlwZW9mIG5ld3ZhbCAhPT0gdHlwZW9mIHZhbCB8fCBuZXd2YWwgIT09IHZhbCl7XG4gICAgICAgIC8vb3ZlcndyaXRlXG4gICAgICAgIHJldHVybiBuZXd2YWw7XG4gICAgICB9ZWxzZSBpZih0aGlzLm9wdGlvbnMudHJpbVZhbHVlcyl7XG4gICAgICAgIHJldHVybiBwYXJzZVZhbHVlKHZhbCwgdGhpcy5vcHRpb25zLnBhcnNlVGFnVmFsdWUsIHRoaXMub3B0aW9ucy5udW1iZXJQYXJzZU9wdGlvbnMpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRWYWwgPSB2YWwudHJpbSgpO1xuICAgICAgICBpZih0cmltbWVkVmFsID09PSB2YWwpe1xuICAgICAgICAgIHJldHVybiBwYXJzZVZhbHVlKHZhbCwgdGhpcy5vcHRpb25zLnBhcnNlVGFnVmFsdWUsIHRoaXMub3B0aW9ucy5udW1iZXJQYXJzZU9wdGlvbnMpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOYW1lU3BhY2UodGFnbmFtZSkge1xuICBpZiAodGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KSB7XG4gICAgY29uc3QgdGFncyA9IHRhZ25hbWUuc3BsaXQoJzonKTtcbiAgICBjb25zdCBwcmVmaXggPSB0YWduYW1lLmNoYXJBdCgwKSA9PT0gJy8nID8gJy8nIDogJyc7XG4gICAgaWYgKHRhZ3NbMF0gPT09ICd4bWxucycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHRhZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB0YWduYW1lID0gcHJlZml4ICsgdGFnc1sxXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhZ25hbWU7XG59XG5cbi8vVE9ETzogY2hhbmdlIHJlZ2V4IHRvIGNhcHR1cmUgTlNcbi8vY29uc3QgYXR0cnNSZWd4ID0gbmV3IFJlZ0V4cChcIihbXFxcXHdcXFxcLVxcXFwuXFxcXDpdKylcXFxccyo9XFxcXHMqKFsnXFxcIl0pKCgufFxcbikqPylcXFxcMlwiLFwiZ21cIik7XG5jb25zdCBhdHRyc1JlZ3ggPSBuZXcgUmVnRXhwKCcoW15cXFxccz1dKylcXFxccyooPVxcXFxzKihbXFwnXCJdKShbXFxcXHNcXFxcU10qPylcXFxcMyk/JywgJ2dtJyk7XG5cbmZ1bmN0aW9uIGJ1aWxkQXR0cmlidXRlc01hcChhdHRyU3RyLCBqUGF0aCwgdGFnTmFtZSkge1xuICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMgIT09IHRydWUgJiYgdHlwZW9mIGF0dHJTdHIgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gYXR0clN0ciA9IGF0dHJTdHIucmVwbGFjZSgvXFxyP1xcbi9nLCAnICcpO1xuICAgIC8vYXR0clN0ciA9IGF0dHJTdHIgfHwgYXR0clN0ci50cmltKCk7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gdXRpbC5nZXRBbGxNYXRjaGVzKGF0dHJTdHIsIGF0dHJzUmVneCk7XG4gICAgY29uc3QgbGVuID0gbWF0Y2hlcy5sZW5ndGg7IC8vZG9uJ3QgbWFrZSBpdCBpbmxpbmVcbiAgICBjb25zdCBhdHRycyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gdGhpcy5yZXNvbHZlTmFtZVNwYWNlKG1hdGNoZXNbaV1bMV0pO1xuICAgICAgaWYgKHRoaXMuaWdub3JlQXR0cmlidXRlc0ZuKGF0dHJOYW1lLCBqUGF0aCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGxldCBvbGRWYWwgPSBtYXRjaGVzW2ldWzRdO1xuICAgICAgbGV0IGFOYW1lID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXggKyBhdHRyTmFtZTtcbiAgICAgIGlmIChhdHRyTmFtZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgICAgYU5hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtQXR0cmlidXRlTmFtZShhTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoYU5hbWUgPT09IFwiX19wcm90b19fXCIpIGFOYW1lICA9IFwiI19fcHJvdG9fX1wiO1xuICAgICAgICBpZiAob2xkVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyaW1WYWx1ZXMpIHtcbiAgICAgICAgICAgIG9sZFZhbCA9IG9sZFZhbC50cmltKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9sZFZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUob2xkVmFsKTtcbiAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVmFsdWVQcm9jZXNzb3IoYXR0ck5hbWUsIG9sZFZhbCwgalBhdGgpO1xuICAgICAgICAgIGlmKG5ld1ZhbCA9PT0gbnVsbCB8fCBuZXdWYWwgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAvL2Rvbid0IHBhcnNlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBvbGRWYWw7XG4gICAgICAgICAgfWVsc2UgaWYodHlwZW9mIG5ld1ZhbCAhPT0gdHlwZW9mIG9sZFZhbCB8fCBuZXdWYWwgIT09IG9sZFZhbCl7XG4gICAgICAgICAgICAvL292ZXJ3cml0ZVxuICAgICAgICAgICAgYXR0cnNbYU5hbWVdID0gbmV3VmFsO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgLy9wYXJzZVxuICAgICAgICAgICAgYXR0cnNbYU5hbWVdID0gcGFyc2VWYWx1ZShcbiAgICAgICAgICAgICAgb2xkVmFsLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucGFyc2VBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBhdHRyc1thTmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoYXR0cnMpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUpIHtcbiAgICAgIGNvbnN0IGF0dHJDb2xsZWN0aW9uID0ge307XG4gICAgICBhdHRyQ29sbGVjdGlvblt0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZV0gPSBhdHRycztcbiAgICAgIHJldHVybiBhdHRyQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGF0dHJzXG4gIH1cbn1cblxuY29uc3QgcGFyc2VYbWwgPSBmdW5jdGlvbih4bWxEYXRhKSB7XG4gIHhtbERhdGEgPSB4bWxEYXRhLnJlcGxhY2UoL1xcclxcbj8vZywgXCJcXG5cIik7IC8vVE9ETzogcmVtb3ZlIHRoaXMgbGluZVxuICBjb25zdCB4bWxPYmogPSBuZXcgeG1sTm9kZSgnIXhtbCcpO1xuICBsZXQgY3VycmVudE5vZGUgPSB4bWxPYmo7XG4gIGxldCB0ZXh0RGF0YSA9IFwiXCI7XG4gIGxldCBqUGF0aCA9IFwiXCI7XG4gIGZvcihsZXQgaT0wOyBpPCB4bWxEYXRhLmxlbmd0aDsgaSsrKXsvL2ZvciBlYWNoIGNoYXIgaW4gWE1MIGRhdGFcbiAgICBjb25zdCBjaCA9IHhtbERhdGFbaV07XG4gICAgaWYoY2ggPT09ICc8Jyl7XG4gICAgICAvLyBjb25zdCBuZXh0SW5kZXggPSBpKzE7XG4gICAgICAvLyBjb25zdCBfMm5kQ2hhciA9IHhtbERhdGFbbmV4dEluZGV4XTtcbiAgICAgIGlmKCB4bWxEYXRhW2krMV0gPT09ICcvJykgey8vQ2xvc2luZyBUYWdcbiAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI+XCIsIGksIFwiQ2xvc2luZyBUYWcgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgbGV0IHRhZ05hbWUgPSB4bWxEYXRhLnN1YnN0cmluZyhpKzIsY2xvc2VJbmRleCkudHJpbSgpO1xuXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5yZW1vdmVOU1ByZWZpeCl7XG4gICAgICAgICAgY29uc3QgY29sb25JbmRleCA9IHRhZ05hbWUuaW5kZXhPZihcIjpcIik7XG4gICAgICAgICAgaWYoY29sb25JbmRleCAhPT0gLTEpe1xuICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKGNvbG9uSW5kZXgrMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUpIHtcbiAgICAgICAgICB0YWdOYW1lID0gdGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUodGFnTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihjdXJyZW50Tm9kZSl7XG4gICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGlmIGxhc3QgdGFnIG9mIG5lc3RlZCB0YWcgd2FzIHVucGFpcmVkIHRhZ1xuICAgICAgICBjb25zdCBsYXN0VGFnTmFtZSA9IGpQYXRoLnN1YnN0cmluZyhqUGF0aC5sYXN0SW5kZXhPZihcIi5cIikrMSk7XG4gICAgICAgIGlmKHRhZ05hbWUgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSApe1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5wYWlyZWQgdGFnIGNhbiBub3QgYmUgdXNlZCBhcyBjbG9zaW5nIHRhZzogPC8ke3RhZ05hbWV9PmApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwcm9wSW5kZXggPSAwXG4gICAgICAgIGlmKGxhc3RUYWdOYW1lICYmIHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihsYXN0VGFnTmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgcHJvcEluZGV4ID0galBhdGgubGFzdEluZGV4T2YoJy4nLCBqUGF0aC5sYXN0SW5kZXhPZignLicpLTEpXG4gICAgICAgICAgdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBwcm9wSW5kZXggPSBqUGF0aC5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHJpbmcoMCwgcHJvcEluZGV4KTtcblxuICAgICAgICBjdXJyZW50Tm9kZSA9IHRoaXMudGFnc05vZGVTdGFjay5wb3AoKTsvL2F2b2lkIHJlY3Vyc2lvbiwgc2V0IHRoZSBwYXJlbnQgdGFnIHNjb3BlXG4gICAgICAgIHRleHREYXRhID0gXCJcIjtcbiAgICAgICAgaSA9IGNsb3NlSW5kZXg7XG4gICAgICB9IGVsc2UgaWYoIHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7XG5cbiAgICAgICAgbGV0IHRhZ0RhdGEgPSByZWFkVGFnRXhwKHhtbERhdGEsaSwgZmFsc2UsIFwiPz5cIik7XG4gICAgICAgIGlmKCF0YWdEYXRhKSB0aHJvdyBuZXcgRXJyb3IoXCJQaSBUYWcgaXMgbm90IGNsb3NlZC5cIik7XG5cbiAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG4gICAgICAgIGlmKCAodGhpcy5vcHRpb25zLmlnbm9yZURlY2xhcmF0aW9uICYmIHRhZ0RhdGEudGFnTmFtZSA9PT0gXCI/eG1sXCIpIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVQaVRhZ3Mpe1xuXG4gICAgICAgIH1lbHNle1xuICBcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSh0YWdEYXRhLnRhZ05hbWUpO1xuICAgICAgICAgIGNoaWxkTm9kZS5hZGQodGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSwgXCJcIik7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYodGFnRGF0YS50YWdOYW1lICE9PSB0YWdEYXRhLnRhZ0V4cCAmJiB0YWdEYXRhLmF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRGF0YS50YWdFeHAsIGpQYXRoLCB0YWdEYXRhLnRhZ05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuXG4gICAgICAgIH1cblxuXG4gICAgICAgIGkgPSB0YWdEYXRhLmNsb3NlSW5kZXggKyAxO1xuICAgICAgfSBlbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAzKSA9PT0gJyEtLScpIHtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiLS0+XCIsIGkrNCwgXCJDb21tZW50IGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUpe1xuICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSB4bWxEYXRhLnN1YnN0cmluZyhpICsgNCwgZW5kSW5kZXggLSAyKTtcblxuICAgICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgpO1xuXG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUsIFsgeyBbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gOiBjb21tZW50IH0gXSk7XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGVuZEluZGV4O1xuICAgICAgfSBlbHNlIGlmKCB4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchRCcpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVhZERvY1R5cGUoeG1sRGF0YSwgaSk7XG4gICAgICAgIHRoaXMuZG9jVHlwZUVudGl0aWVzID0gcmVzdWx0LmVudGl0aWVzO1xuICAgICAgICBpID0gcmVzdWx0Lmk7XG4gICAgICB9ZWxzZSBpZih4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchWycpIHtcbiAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCJdXT5cIiwgaSwgXCJDREFUQSBpcyBub3QgY2xvc2VkLlwiKSAtIDI7XG4gICAgICAgIGNvbnN0IHRhZ0V4cCA9IHhtbERhdGEuc3Vic3RyaW5nKGkgKyA5LGNsb3NlSW5kZXgpO1xuXG4gICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgpO1xuXG4gICAgICAgIGxldCB2YWwgPSB0aGlzLnBhcnNlVGV4dERhdGEodGFnRXhwLCBjdXJyZW50Tm9kZS50YWduYW1lLCBqUGF0aCwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUpO1xuICAgICAgICBpZih2YWwgPT0gdW5kZWZpbmVkKSB2YWwgPSBcIlwiO1xuXG4gICAgICAgIC8vY2RhdGEgc2hvdWxkIGJlIHNldCBldmVuIGlmIGl0IGlzIDAgbGVuZ3RoIHN0cmluZ1xuICAgICAgICBpZih0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSl7XG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lLCBbIHsgW3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdIDogdGFnRXhwIH0gXSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGN1cnJlbnROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpID0gY2xvc2VJbmRleCArIDI7XG4gICAgICB9ZWxzZSB7Ly9PcGVuaW5nIHRhZ1xuICAgICAgICBsZXQgcmVzdWx0ID0gcmVhZFRhZ0V4cCh4bWxEYXRhLGksIHRoaXMub3B0aW9ucy5yZW1vdmVOU1ByZWZpeCk7XG4gICAgICAgIGxldCB0YWdOYW1lPSByZXN1bHQudGFnTmFtZTtcbiAgICAgICAgY29uc3QgcmF3VGFnTmFtZSA9IHJlc3VsdC5yYXdUYWdOYW1lO1xuICAgICAgICBsZXQgdGFnRXhwID0gcmVzdWx0LnRhZ0V4cDtcbiAgICAgICAgbGV0IGF0dHJFeHBQcmVzZW50ID0gcmVzdWx0LmF0dHJFeHBQcmVzZW50O1xuICAgICAgICBsZXQgY2xvc2VJbmRleCA9IHJlc3VsdC5jbG9zZUluZGV4O1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgIHRhZ05hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSh0YWdOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy9zYXZlIHRleHQgYXMgY2hpbGQgbm9kZVxuICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgdGV4dERhdGEpIHtcbiAgICAgICAgICBpZihjdXJyZW50Tm9kZS50YWduYW1lICE9PSAnIXhtbCcpe1xuICAgICAgICAgICAgLy93aGVuIG5lc3RlZCB0YWcgaXMgZm91bmRcbiAgICAgICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGlmIGxhc3QgdGFnIHdhcyB1bnBhaXJlZCB0YWdcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IGN1cnJlbnROb2RlO1xuICAgICAgICBpZihsYXN0VGFnICYmIHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihsYXN0VGFnLnRhZ25hbWUpICE9PSAtMSApe1xuICAgICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyaW5nKDAsIGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGFnTmFtZSAhPT0geG1sT2JqLnRhZ25hbWUpe1xuICAgICAgICAgIGpQYXRoICs9IGpQYXRoID8gXCIuXCIgKyB0YWdOYW1lIDogdGFnTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0l0U3RvcE5vZGUodGhpcy5vcHRpb25zLnN0b3BOb2RlcywgalBhdGgsIHRhZ05hbWUpKSB7XG4gICAgICAgICAgbGV0IHRhZ0NvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgIC8vc2VsZi1jbG9zaW5nIHRhZ1xuICAgICAgICAgIGlmKHRhZ0V4cC5sZW5ndGggPiAwICYmIHRhZ0V4cC5sYXN0SW5kZXhPZihcIi9cIikgPT09IHRhZ0V4cC5sZW5ndGggLSAxKXtcbiAgICAgICAgICAgIGlmKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gXCIvXCIpeyAvL3JlbW92ZSB0cmFpbGluZyAnLydcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICB0YWdFeHAgPSB0YWdOYW1lO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoMCwgdGFnRXhwLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSA9IHJlc3VsdC5jbG9zZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL3VucGFpcmVkIHRhZ1xuICAgICAgICAgIGVsc2UgaWYodGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSl7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGkgPSByZXN1bHQuY2xvc2VJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9ub3JtYWwgdGFnXG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIC8vcmVhZCB1bnRpbCBjbG9zaW5nIHRhZyBpcyBmb3VuZFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZWFkU3RvcE5vZGVEYXRhKHhtbERhdGEsIHJhd1RhZ05hbWUsIGNsb3NlSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGlmKCFyZXN1bHQpIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBlbmQgb2YgJHtyYXdUYWdOYW1lfWApO1xuICAgICAgICAgICAgaSA9IHJlc3VsdC5pO1xuICAgICAgICAgICAgdGFnQ29udGVudCA9IHJlc3VsdC50YWdDb250ZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ05hbWUpO1xuICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICBjaGlsZE5vZGVbXCI6QFwiXSA9IHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwKHRhZ0V4cCwgalBhdGgsIHRhZ05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZih0YWdDb250ZW50KSB7XG4gICAgICAgICAgICB0YWdDb250ZW50ID0gdGhpcy5wYXJzZVRleHREYXRhKHRhZ0NvbnRlbnQsIHRhZ05hbWUsIGpQYXRoLCB0cnVlLCBhdHRyRXhwUHJlc2VudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSk7XG4gICAgICAgICAgY2hpbGROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB0YWdDb250ZW50KTtcbiAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuICAgICAgICB9ZWxzZXtcbiAgLy9zZWxmQ2xvc2luZyB0YWdcbiAgICAgICAgICBpZih0YWdFeHAubGVuZ3RoID4gMCAmJiB0YWdFeHAubGFzdEluZGV4T2YoXCIvXCIpID09PSB0YWdFeHAubGVuZ3RoIC0gMSl7XG4gICAgICAgICAgICBpZih0YWdOYW1lW3RhZ05hbWUubGVuZ3RoIC0gMV0gPT09IFwiL1wiKXsgLy9yZW1vdmUgdHJhaWxpbmcgJy8nXG4gICAgICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cigwLCB0YWdOYW1lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cigwLCBqUGF0aC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgdGFnRXhwID0gdGFnTmFtZTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICB0YWdFeHAgPSB0YWdFeHAuc3Vic3RyKDAsIHRhZ0V4cC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSh0YWdOYW1lKTtcbiAgICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCwgdGFnTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuICAgICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgICB9XG4gICAgLy9vcGVuaW5nIHRhZ1xuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSggdGFnTmFtZSk7XG4gICAgICAgICAgICB0aGlzLnRhZ3NOb2RlU3RhY2sucHVzaChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCwgdGFnTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjaGlsZE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHREYXRhID0gXCJcIjtcbiAgICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgdGV4dERhdGEgKz0geG1sRGF0YVtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHhtbE9iai5jaGlsZDtcbn1cblxuZnVuY3Rpb24gYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpe1xuICBjb25zdCByZXN1bHQgPSB0aGlzLm9wdGlvbnMudXBkYXRlVGFnKGNoaWxkTm9kZS50YWduYW1lLCBqUGF0aCwgY2hpbGROb2RlW1wiOkBcIl0pXG4gIGlmKHJlc3VsdCA9PT0gZmFsc2Upe1xuICB9ZWxzZSBpZih0eXBlb2YgcmVzdWx0ID09PSBcInN0cmluZ1wiKXtcbiAgICBjaGlsZE5vZGUudGFnbmFtZSA9IHJlc3VsdFxuICAgIGN1cnJlbnROb2RlLmFkZENoaWxkKGNoaWxkTm9kZSk7XG4gIH1lbHNle1xuICAgIGN1cnJlbnROb2RlLmFkZENoaWxkKGNoaWxkTm9kZSk7XG4gIH1cbn1cblxuY29uc3QgcmVwbGFjZUVudGl0aWVzVmFsdWUgPSBmdW5jdGlvbih2YWwpe1xuXG4gIGlmKHRoaXMub3B0aW9ucy5wcm9jZXNzRW50aXRpZXMpe1xuICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmRvY1R5cGVFbnRpdGllcyl7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmRvY1R5cGVFbnRpdGllc1tlbnRpdHlOYW1lXTtcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVneCwgZW50aXR5LnZhbCk7XG4gICAgfVxuICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmxhc3RFbnRpdGllcyl7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmxhc3RFbnRpdGllc1tlbnRpdHlOYW1lXTtcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgIH1cbiAgICBpZih0aGlzLm9wdGlvbnMuaHRtbEVudGl0aWVzKXtcbiAgICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmh0bWxFbnRpdGllcyl7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuaHRtbEVudGl0aWVzW2VudGl0eU5hbWVdO1xuICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSggZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsID0gdmFsLnJlcGxhY2UoIHRoaXMuYW1wRW50aXR5LnJlZ2V4LCB0aGlzLmFtcEVudGl0eS52YWwpO1xuICB9XG4gIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBzYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgsIGlzTGVhZk5vZGUpIHtcbiAgaWYgKHRleHREYXRhKSB7IC8vc3RvcmUgcHJldmlvdXNseSBjb2xsZWN0ZWQgZGF0YSBhcyB0ZXh0Tm9kZVxuICAgIGlmKGlzTGVhZk5vZGUgPT09IHVuZGVmaW5lZCkgaXNMZWFmTm9kZSA9IE9iamVjdC5rZXlzKGN1cnJlbnROb2RlLmNoaWxkKS5sZW5ndGggPT09IDBcbiAgICBcbiAgICB0ZXh0RGF0YSA9IHRoaXMucGFyc2VUZXh0RGF0YSh0ZXh0RGF0YSxcbiAgICAgIGN1cnJlbnROb2RlLnRhZ25hbWUsXG4gICAgICBqUGF0aCxcbiAgICAgIGZhbHNlLFxuICAgICAgY3VycmVudE5vZGVbXCI6QFwiXSA/IE9iamVjdC5rZXlzKGN1cnJlbnROb2RlW1wiOkBcIl0pLmxlbmd0aCAhPT0gMCA6IGZhbHNlLFxuICAgICAgaXNMZWFmTm9kZSk7XG5cbiAgICBpZiAodGV4dERhdGEgIT09IHVuZGVmaW5lZCAmJiB0ZXh0RGF0YSAhPT0gXCJcIilcbiAgICAgIGN1cnJlbnROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB0ZXh0RGF0YSk7XG4gICAgdGV4dERhdGEgPSBcIlwiO1xuICB9XG4gIHJldHVybiB0ZXh0RGF0YTtcbn1cblxuLy9UT0RPOiB1c2UgalBhdGggdG8gc2ltcGxpZnkgdGhlIGxvZ2ljXG4vKipcbiAqIFxuICogQHBhcmFtIHtzdHJpbmdbXX0gc3RvcE5vZGVzIFxuICogQHBhcmFtIHtzdHJpbmd9IGpQYXRoXG4gKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFRhZ05hbWUgXG4gKi9cbmZ1bmN0aW9uIGlzSXRTdG9wTm9kZShzdG9wTm9kZXMsIGpQYXRoLCBjdXJyZW50VGFnTmFtZSl7XG4gIGNvbnN0IGFsbE5vZGVzRXhwID0gXCIqLlwiICsgY3VycmVudFRhZ05hbWU7XG4gIGZvciAoY29uc3Qgc3RvcE5vZGVQYXRoIGluIHN0b3BOb2Rlcykge1xuICAgIGNvbnN0IHN0b3BOb2RlRXhwID0gc3RvcE5vZGVzW3N0b3BOb2RlUGF0aF07XG4gICAgaWYoIGFsbE5vZGVzRXhwID09PSBzdG9wTm9kZUV4cCB8fCBqUGF0aCA9PT0gc3RvcE5vZGVFeHAgICkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRhZyBFeHByZXNzaW9uIGFuZCB3aGVyZSBpdCBpcyBlbmRpbmcgaGFuZGxpbmcgc2luZ2xlLWRvdWJsZSBxdW90ZXMgc2l0dWF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YSBcbiAqIEBwYXJhbSB7bnVtYmVyfSBpIHN0YXJ0aW5nIGluZGV4XG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdGFnRXhwV2l0aENsb3NpbmdJbmRleCh4bWxEYXRhLCBpLCBjbG9zaW5nQ2hhciA9IFwiPlwiKXtcbiAgbGV0IGF0dHJCb3VuZGFyeTtcbiAgbGV0IHRhZ0V4cCA9IFwiXCI7XG4gIGZvciAobGV0IGluZGV4ID0gaTsgaW5kZXggPCB4bWxEYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGxldCBjaCA9IHhtbERhdGFbaW5kZXhdO1xuICAgIGlmIChhdHRyQm91bmRhcnkpIHtcbiAgICAgICAgaWYgKGNoID09PSBhdHRyQm91bmRhcnkpIGF0dHJCb3VuZGFyeSA9IFwiXCI7Ly9yZXNldFxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcIicgfHwgY2ggPT09IFwiJ1wiKSB7XG4gICAgICAgIGF0dHJCb3VuZGFyeSA9IGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IGNsb3NpbmdDaGFyWzBdKSB7XG4gICAgICBpZihjbG9zaW5nQ2hhclsxXSl7XG4gICAgICAgIGlmKHhtbERhdGFbaW5kZXggKyAxXSA9PT0gY2xvc2luZ0NoYXJbMV0pe1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB0YWdFeHAsXG4gICAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHRhZ0V4cCxcbiAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXHQnKSB7XG4gICAgICBjaCA9IFwiIFwiXG4gICAgfVxuICAgIHRhZ0V4cCArPSBjaDtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIHN0ciwgaSwgZXJyTXNnKXtcbiAgY29uc3QgY2xvc2luZ0luZGV4ID0geG1sRGF0YS5pbmRleE9mKHN0ciwgaSk7XG4gIGlmKGNsb3NpbmdJbmRleCA9PT0gLTEpe1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpXG4gIH1lbHNle1xuICAgIHJldHVybiBjbG9zaW5nSW5kZXggKyBzdHIubGVuZ3RoIC0gMTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVGFnRXhwKHhtbERhdGEsaSwgcmVtb3ZlTlNQcmVmaXgsIGNsb3NpbmdDaGFyID0gXCI+XCIpe1xuICBjb25zdCByZXN1bHQgPSB0YWdFeHBXaXRoQ2xvc2luZ0luZGV4KHhtbERhdGEsIGkrMSwgY2xvc2luZ0NoYXIpO1xuICBpZighcmVzdWx0KSByZXR1cm47XG4gIGxldCB0YWdFeHAgPSByZXN1bHQuZGF0YTtcbiAgY29uc3QgY2xvc2VJbmRleCA9IHJlc3VsdC5pbmRleDtcbiAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSB0YWdFeHAuc2VhcmNoKC9cXHMvKTtcbiAgbGV0IHRhZ05hbWUgPSB0YWdFeHA7XG4gIGxldCBhdHRyRXhwUHJlc2VudCA9IHRydWU7XG4gIGlmKHNlcGFyYXRvckluZGV4ICE9PSAtMSl7Ly9zZXBhcmF0ZSB0YWcgbmFtZSBhbmQgYXR0cmlidXRlcyBleHByZXNzaW9uXG4gICAgdGFnTmFtZSA9IHRhZ0V4cC5zdWJzdHJpbmcoMCwgc2VwYXJhdG9ySW5kZXgpO1xuICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHJpbmcoc2VwYXJhdG9ySW5kZXggKyAxKS50cmltU3RhcnQoKTtcbiAgfVxuXG4gIGNvbnN0IHJhd1RhZ05hbWUgPSB0YWdOYW1lO1xuICBpZihyZW1vdmVOU1ByZWZpeCl7XG4gICAgY29uc3QgY29sb25JbmRleCA9IHRhZ05hbWUuaW5kZXhPZihcIjpcIik7XG4gICAgaWYoY29sb25JbmRleCAhPT0gLTEpe1xuICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKGNvbG9uSW5kZXgrMSk7XG4gICAgICBhdHRyRXhwUHJlc2VudCA9IHRhZ05hbWUgIT09IHJlc3VsdC5kYXRhLnN1YnN0cihjb2xvbkluZGV4ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgIHRhZ0V4cDogdGFnRXhwLFxuICAgIGNsb3NlSW5kZXg6IGNsb3NlSW5kZXgsXG4gICAgYXR0ckV4cFByZXNlbnQ6IGF0dHJFeHBQcmVzZW50LFxuICAgIHJhd1RhZ05hbWU6IHJhd1RhZ05hbWUsXG4gIH1cbn1cbi8qKlxuICogZmluZCBwYWlyZWQgdGFnIGZvciBhIHN0b3Agbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGEgXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBcbiAqIEBwYXJhbSB7bnVtYmVyfSBpIFxuICovXG5mdW5jdGlvbiByZWFkU3RvcE5vZGVEYXRhKHhtbERhdGEsIHRhZ05hbWUsIGkpe1xuICBjb25zdCBzdGFydEluZGV4ID0gaTtcbiAgLy8gU3RhcnRpbmcgYXQgMSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYW4gb3BlbiB0YWdcbiAgbGV0IG9wZW5UYWdDb3VudCA9IDE7XG5cbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYoIHhtbERhdGFbaV0gPT09IFwiPFwiKXsgXG4gICAgICBpZiAoeG1sRGF0YVtpKzFdID09PSBcIi9cIikgey8vY2xvc2UgdGFnXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI+XCIsIGksIGAke3RhZ05hbWV9IGlzIG5vdCBjbG9zZWRgKTtcbiAgICAgICAgICBsZXQgY2xvc2VUYWdOYW1lID0geG1sRGF0YS5zdWJzdHJpbmcoaSsyLGNsb3NlSW5kZXgpLnRyaW0oKTtcbiAgICAgICAgICBpZihjbG9zZVRhZ05hbWUgPT09IHRhZ05hbWUpe1xuICAgICAgICAgICAgb3BlblRhZ0NvdW50LS07XG4gICAgICAgICAgICBpZiAob3BlblRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGFnQ29udGVudDogeG1sRGF0YS5zdWJzdHJpbmcoc3RhcnRJbmRleCwgaSksXG4gICAgICAgICAgICAgICAgaSA6IGNsb3NlSW5kZXhcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZih4bWxEYXRhW2krMV0gPT09ICc/JykgeyBcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj8+XCIsIGkrMSwgXCJTdG9wTm9kZSBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAzKSA9PT0gJyEtLScpIHsgXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCItLT5cIiwgaSszLCBcIlN0b3BOb2RlIGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDIpID09PSAnIVsnKSB7IFxuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiXV0+XCIsIGksIFwiU3RvcE5vZGUgaXMgbm90IGNsb3NlZC5cIikgLSAyO1xuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YWdEYXRhID0gcmVhZFRhZ0V4cCh4bWxEYXRhLCBpLCAnPicpXG5cbiAgICAgICAgICBpZiAodGFnRGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgb3BlblRhZ05hbWUgPSB0YWdEYXRhICYmIHRhZ0RhdGEudGFnTmFtZTtcbiAgICAgICAgICAgIGlmIChvcGVuVGFnTmFtZSA9PT0gdGFnTmFtZSAmJiB0YWdEYXRhLnRhZ0V4cFt0YWdEYXRhLnRhZ0V4cC5sZW5ndGgtMV0gIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgIG9wZW5UYWdDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaT10YWdEYXRhLmNsb3NlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gIH0vL2VuZCBmb3IgbG9vcFxufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKHZhbCwgc2hvdWxkUGFyc2UsIG9wdGlvbnMpIHtcbiAgaWYgKHNob3VsZFBhcnNlICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgLy9jb25zb2xlLmxvZyhvcHRpb25zKVxuICAgIGNvbnN0IG5ld3ZhbCA9IHZhbC50cmltKCk7XG4gICAgaWYobmV3dmFsID09PSAndHJ1ZScgKSByZXR1cm4gdHJ1ZTtcbiAgICBlbHNlIGlmKG5ld3ZhbCA9PT0gJ2ZhbHNlJyApIHJldHVybiBmYWxzZTtcbiAgICBlbHNlIHJldHVybiB0b051bWJlcih2YWwsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGlmICh1dGlsLmlzRXhpc3QodmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gT3JkZXJlZE9ialBhcnNlcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gbm9kZSBcbiAqIEBwYXJhbSB7YW55fSBvcHRpb25zIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIHByZXR0aWZ5KG5vZGUsIG9wdGlvbnMpe1xuICByZXR1cm4gY29tcHJlc3MoIG5vZGUsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gYXJyIFxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGggXG4gKiBAcmV0dXJucyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gY29tcHJlc3MoYXJyLCBvcHRpb25zLCBqUGF0aCl7XG4gIGxldCB0ZXh0O1xuICBjb25zdCBjb21wcmVzc2VkT2JqID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdGFnT2JqID0gYXJyW2ldO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcE5hbWUodGFnT2JqKTtcbiAgICBsZXQgbmV3SnBhdGggPSBcIlwiO1xuICAgIGlmKGpQYXRoID09PSB1bmRlZmluZWQpIG5ld0pwYXRoID0gcHJvcGVydHk7XG4gICAgZWxzZSBuZXdKcGF0aCA9IGpQYXRoICsgXCIuXCIgKyBwcm9wZXJ0eTtcblxuICAgIGlmKHByb3BlcnR5ID09PSBvcHRpb25zLnRleHROb2RlTmFtZSl7XG4gICAgICBpZih0ZXh0ID09PSB1bmRlZmluZWQpIHRleHQgPSB0YWdPYmpbcHJvcGVydHldO1xuICAgICAgZWxzZSB0ZXh0ICs9IFwiXCIgKyB0YWdPYmpbcHJvcGVydHldO1xuICAgIH1lbHNlIGlmKHByb3BlcnR5ID09PSB1bmRlZmluZWQpe1xuICAgICAgY29udGludWU7XG4gICAgfWVsc2UgaWYodGFnT2JqW3Byb3BlcnR5XSl7XG4gICAgICBcbiAgICAgIGxldCB2YWwgPSBjb21wcmVzcyh0YWdPYmpbcHJvcGVydHldLCBvcHRpb25zLCBuZXdKcGF0aCk7XG4gICAgICBjb25zdCBpc0xlYWYgPSBpc0xlYWZUYWcodmFsLCBvcHRpb25zKTtcblxuICAgICAgaWYodGFnT2JqW1wiOkBcIl0pe1xuICAgICAgICBhc3NpZ25BdHRyaWJ1dGVzKCB2YWwsIHRhZ09ialtcIjpAXCJdLCBuZXdKcGF0aCwgb3B0aW9ucyk7XG4gICAgICB9ZWxzZSBpZihPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMSAmJiB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdICE9PSB1bmRlZmluZWQgJiYgIW9wdGlvbnMuYWx3YXlzQ3JlYXRlVGV4dE5vZGUpe1xuICAgICAgICB2YWwgPSB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdO1xuICAgICAgfWVsc2UgaWYoT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDApe1xuICAgICAgICBpZihvcHRpb25zLmFsd2F5c0NyZWF0ZVRleHROb2RlKSB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gXCJcIjtcbiAgICAgICAgZWxzZSB2YWwgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZihjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkICYmIGNvbXByZXNzZWRPYmouaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGNvbXByZXNzZWRPYmpbcHJvcGVydHldKSkge1xuICAgICAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gPSBbIGNvbXByZXNzZWRPYmpbcHJvcGVydHldIF07XG4gICAgICAgIH1cbiAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIC8vVE9ETzogaWYgYSBub2RlIGlzIG5vdCBhbiBhcnJheSwgdGhlbiBjaGVjayBpZiBpdCBzaG91bGQgYmUgYW4gYXJyYXlcbiAgICAgICAgLy9hbHNvIGRldGVybWluZSBpZiBpdCBpcyBhIGxlYWYgbm9kZVxuICAgICAgICBpZiAob3B0aW9ucy5pc0FycmF5KHByb3BlcnR5LCBuZXdKcGF0aCwgaXNMZWFmICkpIHtcbiAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IFt2YWxdO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgfVxuICAvLyBpZih0ZXh0ICYmIHRleHQubGVuZ3RoID4gMCkgY29tcHJlc3NlZE9ialtvcHRpb25zLnRleHROb2RlTmFtZV0gPSB0ZXh0O1xuICBpZih0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIil7XG4gICAgaWYodGV4dC5sZW5ndGggPiAwKSBjb21wcmVzc2VkT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IHRleHQ7XG4gIH1lbHNlIGlmKHRleHQgIT09IHVuZGVmaW5lZCkgY29tcHJlc3NlZE9ialtvcHRpb25zLnRleHROb2RlTmFtZV0gPSB0ZXh0O1xuICByZXR1cm4gY29tcHJlc3NlZE9iajtcbn1cblxuZnVuY3Rpb24gcHJvcE5hbWUob2JqKXtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgaWYoa2V5ICE9PSBcIjpAXCIpIHJldHVybiBrZXk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzaWduQXR0cmlidXRlcyhvYmosIGF0dHJNYXAsIGpwYXRoLCBvcHRpb25zKXtcbiAgaWYgKGF0dHJNYXApIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXR0ck1hcCk7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7IC8vZG9uJ3QgbWFrZSBpdCBpbmxpbmVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBhdHJyTmFtZSA9IGtleXNbaV07XG4gICAgICBpZiAob3B0aW9ucy5pc0FycmF5KGF0cnJOYW1lLCBqcGF0aCArIFwiLlwiICsgYXRyck5hbWUsIHRydWUsIHRydWUpKSB7XG4gICAgICAgIG9ialthdHJyTmFtZV0gPSBbIGF0dHJNYXBbYXRyck5hbWVdIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpbYXRyck5hbWVdID0gYXR0ck1hcFthdHJyTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTGVhZlRhZyhvYmosIG9wdGlvbnMpe1xuICBjb25zdCB7IHRleHROb2RlTmFtZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcHJvcENvdW50ID0gT2JqZWN0LmtleXMob2JqKS5sZW5ndGg7XG4gIFxuICBpZiAocHJvcENvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgcHJvcENvdW50ID09PSAxICYmXG4gICAgKG9ialt0ZXh0Tm9kZU5hbWVdIHx8IHR5cGVvZiBvYmpbdGV4dE5vZGVOYW1lXSA9PT0gXCJib29sZWFuXCIgfHwgb2JqW3RleHROb2RlTmFtZV0gPT09IDApXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5wcmV0dGlmeSA9IHByZXR0aWZ5O1xuIiwKICAgICJjb25zdCB7IGJ1aWxkT3B0aW9uc30gPSByZXF1aXJlKFwiLi9PcHRpb25zQnVpbGRlclwiKTtcbmNvbnN0IE9yZGVyZWRPYmpQYXJzZXIgPSByZXF1aXJlKFwiLi9PcmRlcmVkT2JqUGFyc2VyXCIpO1xuY29uc3QgeyBwcmV0dGlmeX0gPSByZXF1aXJlKFwiLi9ub2RlMmpzb25cIik7XG5jb25zdCB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi92YWxpZGF0b3InKTtcblxuY2xhc3MgWE1MUGFyc2Vye1xuICAgIFxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xuICAgICAgICB0aGlzLmV4dGVybmFsRW50aXRpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gYnVpbGRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgWE1MIGRhdHMgdG8gSlMgb2JqZWN0IFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcn0geG1sRGF0YSBcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSB2YWxpZGF0aW9uT3B0aW9uIFxuICAgICAqL1xuICAgIHBhcnNlKHhtbERhdGEsdmFsaWRhdGlvbk9wdGlvbil7XG4gICAgICAgIGlmKHR5cGVvZiB4bWxEYXRhID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgfWVsc2UgaWYoIHhtbERhdGEudG9TdHJpbmcpe1xuICAgICAgICAgICAgeG1sRGF0YSA9IHhtbERhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJYTUwgZGF0YSBpcyBhY2NlcHRlZCBpbiBTdHJpbmcgb3IgQnl0ZXNbXSBmb3JtLlwiKVxuICAgICAgICB9XG4gICAgICAgIGlmKCB2YWxpZGF0aW9uT3B0aW9uKXtcbiAgICAgICAgICAgIGlmKHZhbGlkYXRpb25PcHRpb24gPT09IHRydWUpIHZhbGlkYXRpb25PcHRpb24gPSB7fTsgLy92YWxpZGF0ZSB3aXRoIGRlZmF1bHQgb3B0aW9uc1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUoeG1sRGF0YSwgdmFsaWRhdGlvbk9wdGlvbik7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBgJHtyZXN1bHQuZXJyLm1zZ306JHtyZXN1bHQuZXJyLmxpbmV9OiR7cmVzdWx0LmVyci5jb2x9YCApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmRlcmVkT2JqUGFyc2VyID0gbmV3IE9yZGVyZWRPYmpQYXJzZXIodGhpcy5vcHRpb25zKTtcbiAgICAgICAgb3JkZXJlZE9ialBhcnNlci5hZGRFeHRlcm5hbEVudGl0aWVzKHRoaXMuZXh0ZXJuYWxFbnRpdGllcyk7XG4gICAgICAgIGNvbnN0IG9yZGVyZWRSZXN1bHQgPSBvcmRlcmVkT2JqUGFyc2VyLnBhcnNlWG1sKHhtbERhdGEpO1xuICAgICAgICBpZih0aGlzLm9wdGlvbnMucHJlc2VydmVPcmRlciB8fCBvcmRlcmVkUmVzdWx0ID09PSB1bmRlZmluZWQpIHJldHVybiBvcmRlcmVkUmVzdWx0O1xuICAgICAgICBlbHNlIHJldHVybiBwcmV0dGlmeShvcmRlcmVkUmVzdWx0LCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBFbnRpdHkgd2hpY2ggaXMgbm90IGJ5IGRlZmF1bHQgc3VwcG9ydGVkIGJ5IHRoaXMgbGlicmFyeVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFxuICAgICAqL1xuICAgIGFkZEVudGl0eShrZXksIHZhbHVlKXtcbiAgICAgICAgaWYodmFsdWUuaW5kZXhPZihcIiZcIikgIT09IC0xKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVudGl0eSB2YWx1ZSBjYW4ndCBoYXZlICcmJ1wiKVxuICAgICAgICB9ZWxzZSBpZihrZXkuaW5kZXhPZihcIiZcIikgIT09IC0xIHx8IGtleS5pbmRleE9mKFwiO1wiKSAhPT0gLTEpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gZW50aXR5IG11c3QgYmUgc2V0IHdpdGhvdXQgJyYnIGFuZCAnOycuIEVnLiB1c2UgJyN4RCcgZm9yICcmI3hEOydcIilcbiAgICAgICAgfWVsc2UgaWYodmFsdWUgPT09IFwiJlwiKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIGVudGl0eSB3aXRoIHZhbHVlICcmJyBpcyBub3QgcGVybWl0dGVkXCIpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxFbnRpdGllc1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWE1MUGFyc2VyOyIsCiAgICAiY29uc3QgRU9MID0gXCJcXG5cIjtcblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7YXJyYXl9IGpBcnJheSBcbiAqIEBwYXJhbSB7YW55fSBvcHRpb25zIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIHRvWG1sKGpBcnJheSwgb3B0aW9ucykge1xuICAgIGxldCBpbmRlbnRhdGlvbiA9IFwiXCI7XG4gICAgaWYgKG9wdGlvbnMuZm9ybWF0ICYmIG9wdGlvbnMuaW5kZW50QnkubGVuZ3RoID4gMCkge1xuICAgICAgICBpbmRlbnRhdGlvbiA9IEVPTDtcbiAgICB9XG4gICAgcmV0dXJuIGFyclRvU3RyKGpBcnJheSwgb3B0aW9ucywgXCJcIiwgaW5kZW50YXRpb24pO1xufVxuXG5mdW5jdGlvbiBhcnJUb1N0cihhcnIsIG9wdGlvbnMsIGpQYXRoLCBpbmRlbnRhdGlvbikge1xuICAgIGxldCB4bWxTdHIgPSBcIlwiO1xuICAgIGxldCBpc1ByZXZpb3VzRWxlbWVudFRhZyA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdGFnT2JqID0gYXJyW2ldO1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gcHJvcE5hbWUodGFnT2JqKTtcbiAgICAgICAgaWYodGFnTmFtZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICBsZXQgbmV3SlBhdGggPSBcIlwiO1xuICAgICAgICBpZiAoalBhdGgubGVuZ3RoID09PSAwKSBuZXdKUGF0aCA9IHRhZ05hbWVcbiAgICAgICAgZWxzZSBuZXdKUGF0aCA9IGAke2pQYXRofS4ke3RhZ05hbWV9YDtcblxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICAgICAgICAgIGxldCB0YWdUZXh0ID0gdGFnT2JqW3RhZ05hbWVdO1xuICAgICAgICAgICAgaWYgKCFpc1N0b3BOb2RlKG5ld0pQYXRoLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRhZ1RleHQgPSBvcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKHRhZ05hbWUsIHRhZ1RleHQpO1xuICAgICAgICAgICAgICAgIHRhZ1RleHQgPSByZXBsYWNlRW50aXRpZXNWYWx1ZSh0YWdUZXh0LCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1ByZXZpb3VzRWxlbWVudFRhZykge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhtbFN0ciArPSB0YWdUZXh0O1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09IG9wdGlvbnMuY2RhdGFQcm9wTmFtZSkge1xuICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNFbGVtZW50VGFnKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeG1sU3RyICs9IGA8IVtDREFUQVske3RhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV19XV0+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gZmFsc2U7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09PSBvcHRpb25zLmNvbW1lbnRQcm9wTmFtZSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uICsgYDwhLS0ke3RhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV19LS0+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0gPT09IFwiP1wiKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRTdHIgPSBhdHRyX3RvX3N0cih0YWdPYmpbXCI6QFwiXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wSW5kID0gdGFnTmFtZSA9PT0gXCI/eG1sXCIgPyBcIlwiIDogaW5kZW50YXRpb247XG4gICAgICAgICAgICBsZXQgcGlUZXh0Tm9kZU5hbWUgPSB0YWdPYmpbdGFnTmFtZV1bMF1bb3B0aW9ucy50ZXh0Tm9kZU5hbWVdO1xuICAgICAgICAgICAgcGlUZXh0Tm9kZU5hbWUgPSBwaVRleHROb2RlTmFtZS5sZW5ndGggIT09IDAgPyBcIiBcIiArIHBpVGV4dE5vZGVOYW1lIDogXCJcIjsgLy9yZW1vdmUgZXh0cmEgc3BhY2luZ1xuICAgICAgICAgICAgeG1sU3RyICs9IHRlbXBJbmQgKyBgPCR7dGFnTmFtZX0ke3BpVGV4dE5vZGVOYW1lfSR7YXR0U3RyfT8+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdJZGVudGF0aW9uID0gaW5kZW50YXRpb247XG4gICAgICAgIGlmIChuZXdJZGVudGF0aW9uICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBuZXdJZGVudGF0aW9uICs9IG9wdGlvbnMuaW5kZW50Qnk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXR0U3RyID0gYXR0cl90b19zdHIodGFnT2JqW1wiOkBcIl0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB0YWdTdGFydCA9IGluZGVudGF0aW9uICsgYDwke3RhZ05hbWV9JHthdHRTdHJ9YDtcbiAgICAgICAgY29uc3QgdGFnVmFsdWUgPSBhcnJUb1N0cih0YWdPYmpbdGFnTmFtZV0sIG9wdGlvbnMsIG5ld0pQYXRoLCBuZXdJZGVudGF0aW9uKTtcbiAgICAgICAgaWYgKG9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdXBwcmVzc1VucGFpcmVkTm9kZSkgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCI+XCI7XG4gICAgICAgICAgICBlbHNlIHhtbFN0ciArPSB0YWdTdGFydCArIFwiLz5cIjtcbiAgICAgICAgfSBlbHNlIGlmICgoIXRhZ1ZhbHVlIHx8IHRhZ1ZhbHVlLmxlbmd0aCA9PT0gMCkgJiYgb3B0aW9ucy5zdXBwcmVzc0VtcHR5Tm9kZSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCIvPlwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ1ZhbHVlICYmIHRhZ1ZhbHVlLmVuZHNXaXRoKFwiPlwiKSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgYD4ke3RhZ1ZhbHVlfSR7aW5kZW50YXRpb259PC8ke3RhZ05hbWV9PmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIj5cIjtcbiAgICAgICAgICAgIGlmICh0YWdWYWx1ZSAmJiBpbmRlbnRhdGlvbiAhPT0gXCJcIiAmJiAodGFnVmFsdWUuaW5jbHVkZXMoXCIvPlwiKSB8fCB0YWdWYWx1ZS5pbmNsdWRlcyhcIjwvXCIpKSkge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSBpbmRlbnRhdGlvbiArIG9wdGlvbnMuaW5kZW50QnkgKyB0YWdWYWx1ZSArIGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB4bWxTdHIgKz0gdGFnVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4bWxTdHIgKz0gYDwvJHt0YWdOYW1lfT5gO1xuICAgICAgICB9XG4gICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4geG1sU3RyO1xufVxuXG5mdW5jdGlvbiBwcm9wTmFtZShvYmopIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGtleSAhPT0gXCI6QFwiKSByZXR1cm4ga2V5O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYXR0cl90b19zdHIoYXR0ck1hcCwgb3B0aW9ucykge1xuICAgIGxldCBhdHRyU3RyID0gXCJcIjtcbiAgICBpZiAoYXR0ck1hcCAmJiAhb3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGZvciAobGV0IGF0dHIgaW4gYXR0ck1hcCkge1xuICAgICAgICAgICAgaWYoIWF0dHJNYXAuaGFzT3duUHJvcGVydHkoYXR0cikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IGF0dHJWYWwgPSBvcHRpb25zLmF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yKGF0dHIsIGF0dHJNYXBbYXR0cl0pO1xuICAgICAgICAgICAgYXR0clZhbCA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlKGF0dHJWYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGF0dHJWYWwgPT09IHRydWUgJiYgb3B0aW9ucy5zdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgYXR0clN0ciArPSBgICR7YXR0ci5zdWJzdHIob3B0aW9ucy5hdHRyaWJ1dGVOYW1lUHJlZml4Lmxlbmd0aCl9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXR0clN0ciArPSBgICR7YXR0ci5zdWJzdHIob3B0aW9ucy5hdHRyaWJ1dGVOYW1lUHJlZml4Lmxlbmd0aCl9PVwiJHthdHRyVmFsfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXR0clN0cjtcbn1cblxuZnVuY3Rpb24gaXNTdG9wTm9kZShqUGF0aCwgb3B0aW9ucykge1xuICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxlbmd0aCAtIG9wdGlvbnMudGV4dE5vZGVOYW1lLmxlbmd0aCAtIDEpO1xuICAgIGxldCB0YWdOYW1lID0galBhdGguc3Vic3RyKGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xuICAgIGZvciAobGV0IGluZGV4IGluIG9wdGlvbnMuc3RvcE5vZGVzKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnN0b3BOb2Rlc1tpbmRleF0gPT09IGpQYXRoIHx8IG9wdGlvbnMuc3RvcE5vZGVzW2luZGV4XSA9PT0gXCIqLlwiICsgdGFnTmFtZSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKHRleHRWYWx1ZSAmJiB0ZXh0VmFsdWUubGVuZ3RoID4gMCAmJiBvcHRpb25zLnByb2Nlc3NFbnRpdGllcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZW50aXRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IG9wdGlvbnMuZW50aXRpZXNbaV07XG4gICAgICAgICAgICB0ZXh0VmFsdWUgPSB0ZXh0VmFsdWUucmVwbGFjZShlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0VmFsdWU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvWG1sO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG4vL3BhcnNlIEVtcHR5IE5vZGUgYXMgc2VsZiBjbG9zaW5nIG5vZGVcbmNvbnN0IGJ1aWxkRnJvbU9yZGVyZWRKcyA9IHJlcXVpcmUoJy4vb3JkZXJlZEpzMlhtbCcpO1xuY29uc3QgZ2V0SWdub3JlQXR0cmlidXRlc0ZuID0gcmVxdWlyZSgnLi4vaWdub3JlQXR0cmlidXRlcycpXG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBhdHRyaWJ1dGVOYW1lUHJlZml4OiAnQF8nLFxuICBhdHRyaWJ1dGVzR3JvdXBOYW1lOiBmYWxzZSxcbiAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICBjZGF0YVByb3BOYW1lOiBmYWxzZSxcbiAgZm9ybWF0OiBmYWxzZSxcbiAgaW5kZW50Qnk6ICcgICcsXG4gIHN1cHByZXNzRW1wdHlOb2RlOiBmYWxzZSxcbiAgc3VwcHJlc3NVbnBhaXJlZE5vZGU6IHRydWUsXG4gIHN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXM6IHRydWUsXG4gIHRhZ1ZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihrZXksIGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgYXR0cmlidXRlVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGF0dHJOYW1lLCBhKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHByZXNlcnZlT3JkZXI6IGZhbHNlLFxuICBjb21tZW50UHJvcE5hbWU6IGZhbHNlLFxuICB1bnBhaXJlZFRhZ3M6IFtdLFxuICBlbnRpdGllczogW1xuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCImXCIsIFwiZ1wiKSwgdmFsOiBcIiZhbXA7XCIgfSwvL2l0IG11c3QgYmUgb24gdG9wXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIj5cIiwgXCJnXCIpLCB2YWw6IFwiJmd0O1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIjxcIiwgXCJnXCIpLCB2YWw6IFwiJmx0O1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIlxcJ1wiLCBcImdcIiksIHZhbDogXCImYXBvcztcIiB9LFxuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCJcXFwiXCIsIFwiZ1wiKSwgdmFsOiBcIiZxdW90O1wiIH1cbiAgXSxcbiAgcHJvY2Vzc0VudGl0aWVzOiB0cnVlLFxuICBzdG9wTm9kZXM6IFtdLFxuICAvLyB0cmFuc2Zvcm1UYWdOYW1lOiBmYWxzZSxcbiAgLy8gdHJhbnNmb3JtQXR0cmlidXRlTmFtZTogZmFsc2UsXG4gIG9uZUxpc3RHcm91cDogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIEJ1aWxkZXIob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQXR0cmlidXRlcyA9PT0gdHJ1ZSB8fCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgIHRoaXMuaXNBdHRyaWJ1dGUgPSBmdW5jdGlvbigvKmEqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pZ25vcmVBdHRyaWJ1dGVzRm4gPSBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4odGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpXG4gICAgdGhpcy5hdHRyUHJlZml4TGVuID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoO1xuICAgIHRoaXMuaXNBdHRyaWJ1dGUgPSBpc0F0dHJpYnV0ZTtcbiAgfVxuXG4gIHRoaXMucHJvY2Vzc1RleHRPck9iak5vZGUgPSBwcm9jZXNzVGV4dE9yT2JqTm9kZVxuXG4gIGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KSB7XG4gICAgdGhpcy5pbmRlbnRhdGUgPSBpbmRlbnRhdGU7XG4gICAgdGhpcy50YWdFbmRDaGFyID0gJz5cXG4nO1xuICAgIHRoaXMubmV3TGluZSA9ICdcXG4nO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaW5kZW50YXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcbiAgICB0aGlzLnRhZ0VuZENoYXIgPSAnPic7XG4gICAgdGhpcy5uZXdMaW5lID0gJyc7XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihqT2JqKSB7XG4gIGlmKHRoaXMub3B0aW9ucy5wcmVzZXJ2ZU9yZGVyKXtcbiAgICByZXR1cm4gYnVpbGRGcm9tT3JkZXJlZEpzKGpPYmosIHRoaXMub3B0aW9ucyk7XG4gIH1lbHNlIHtcbiAgICBpZihBcnJheS5pc0FycmF5KGpPYmopICYmIHRoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lICYmIHRoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lLmxlbmd0aCA+IDEpe1xuICAgICAgak9iaiA9IHtcbiAgICAgICAgW3RoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lXSA6IGpPYmpcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuajJ4KGpPYmosIDAsIFtdKS52YWw7XG4gIH1cbn07XG5cbkJ1aWxkZXIucHJvdG90eXBlLmoyeCA9IGZ1bmN0aW9uKGpPYmosIGxldmVsLCBhalBhdGgpIHtcbiAgbGV0IGF0dHJTdHIgPSAnJztcbiAgbGV0IHZhbCA9ICcnO1xuICBjb25zdCBqUGF0aCA9IGFqUGF0aC5qb2luKCcuJylcbiAgZm9yIChsZXQga2V5IGluIGpPYmopIHtcbiAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGpPYmosIGtleSkpIGNvbnRpbnVlO1xuICAgIGlmICh0eXBlb2Ygak9ialtrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gc3VwcmVzcyB1bmRlZmluZWQgbm9kZSBvbmx5IGlmIGl0IGlzIG5vdCBhbiBhdHRyaWJ1dGVcbiAgICAgIGlmICh0aGlzLmlzQXR0cmlidXRlKGtleSkpIHtcbiAgICAgICAgdmFsICs9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoak9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAvLyBudWxsIGF0dHJpYnV0ZSBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgYXR0cmlidXRlIGxpc3QsIGJ1dCBzaG91bGQgbm90IGNhdXNlIHRoZSB0YWcgY2xvc2luZ1xuICAgICAgaWYgKHRoaXMuaXNBdHRyaWJ1dGUoa2V5KSkge1xuICAgICAgICB2YWwgKz0gJyc7XG4gICAgICB9IGVsc2UgaWYgKGtleVswXSA9PT0gJz8nKSB7XG4gICAgICAgIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgfVxuICAgICAgLy8gdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9IGVsc2UgaWYgKGpPYmpba2V5XSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoak9ialtrZXldLCBrZXksICcnLCBsZXZlbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygak9ialtrZXldICE9PSAnb2JqZWN0Jykge1xuICAgICAgLy9wcmVtaXRpdmUgdHlwZVxuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuaXNBdHRyaWJ1dGUoa2V5KTtcbiAgICAgIGlmIChhdHRyICYmICF0aGlzLmlnbm9yZUF0dHJpYnV0ZXNGbihhdHRyLCBqUGF0aCkpIHtcbiAgICAgICAgYXR0clN0ciArPSB0aGlzLmJ1aWxkQXR0clBhaXJTdHIoYXR0ciwgJycgKyBqT2JqW2tleV0pO1xuICAgICAgfSBlbHNlIGlmICghYXR0cikge1xuICAgICAgICAvL3RhZyB2YWx1ZVxuICAgICAgICBpZiAoa2V5ID09PSB0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lKSB7XG4gICAgICAgICAgbGV0IG5ld3ZhbCA9IHRoaXMub3B0aW9ucy50YWdWYWx1ZVByb2Nlc3NvcihrZXksICcnICsgak9ialtrZXldKTtcbiAgICAgICAgICB2YWwgKz0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZShuZXd2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoak9ialtrZXldLCBrZXksICcnLCBsZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoak9ialtrZXldKSkge1xuICAgICAgLy9yZXBlYXRlZCBub2Rlc1xuICAgICAgY29uc3QgYXJyTGVuID0gak9ialtrZXldLmxlbmd0aDtcbiAgICAgIGxldCBsaXN0VGFnVmFsID0gXCJcIjtcbiAgICAgIGxldCBsaXN0VGFnQXR0ciA9IFwiXCI7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFyckxlbjsgaisrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBqT2JqW2tleV1bal07XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBzdXByZXNzIHVuZGVmaW5lZCBub2RlXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmKGtleVswXSA9PT0gXCI/XCIpIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgICAgZWxzZSB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgICAgIC8vIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYodGhpcy5vcHRpb25zLm9uZUxpc3RHcm91cCl7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmoyeChpdGVtLCBsZXZlbCArIDEsIGFqUGF0aC5jb25jYXQoa2V5KSk7XG4gICAgICAgICAgICBsaXN0VGFnVmFsICs9IHJlc3VsdC52YWw7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkpIHtcbiAgICAgICAgICAgICAgbGlzdFRhZ0F0dHIgKz0gcmVzdWx0LmF0dHJTdHJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGxpc3RUYWdWYWwgKz0gdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZShpdGVtLCBrZXksIGxldmVsLCBhalBhdGgpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMub25lTGlzdEdyb3VwKSB7XG4gICAgICAgICAgICBsZXQgdGV4dFZhbHVlID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgaXRlbSk7XG4gICAgICAgICAgICB0ZXh0VmFsdWUgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHRleHRWYWx1ZSk7XG4gICAgICAgICAgICBsaXN0VGFnVmFsICs9IHRleHRWYWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlzdFRhZ1ZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoaXRlbSwga2V5LCAnJywgbGV2ZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodGhpcy5vcHRpb25zLm9uZUxpc3RHcm91cCl7XG4gICAgICAgIGxpc3RUYWdWYWwgPSB0aGlzLmJ1aWxkT2JqZWN0Tm9kZShsaXN0VGFnVmFsLCBrZXksIGxpc3RUYWdBdHRyLCBsZXZlbCk7XG4gICAgICB9XG4gICAgICB2YWwgKz0gbGlzdFRhZ1ZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9uZXN0ZWQgbm9kZVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUpIHtcbiAgICAgICAgY29uc3QgS3MgPSBPYmplY3Qua2V5cyhqT2JqW2tleV0pO1xuICAgICAgICBjb25zdCBMID0gS3MubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IEw7IGorKykge1xuICAgICAgICAgIGF0dHJTdHIgKz0gdGhpcy5idWlsZEF0dHJQYWlyU3RyKEtzW2pdLCAnJyArIGpPYmpba2V5XVtLc1tqXV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgKz0gdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZShqT2JqW2tleV0sIGtleSwgbGV2ZWwsIGFqUGF0aClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHthdHRyU3RyOiBhdHRyU3RyLCB2YWw6IHZhbH07XG59O1xuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZEF0dHJQYWlyU3RyID0gZnVuY3Rpb24oYXR0ck5hbWUsIHZhbCl7XG4gIHZhbCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcihhdHRyTmFtZSwgJycgKyB2YWwpO1xuICB2YWwgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHZhbCk7XG4gIGlmICh0aGlzLm9wdGlvbnMuc3VwcHJlc3NCb29sZWFuQXR0cmlidXRlcyAmJiB2YWwgPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuICcgJyArIGF0dHJOYW1lO1xuICB9IGVsc2UgcmV0dXJuICcgJyArIGF0dHJOYW1lICsgJz1cIicgKyB2YWwgKyAnXCInO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzVGV4dE9yT2JqTm9kZSAob2JqZWN0LCBrZXksIGxldmVsLCBhalBhdGgpIHtcbiAgY29uc3QgcmVzdWx0ID0gdGhpcy5qMngob2JqZWN0LCBsZXZlbCArIDEsIGFqUGF0aC5jb25jYXQoa2V5KSk7XG4gIGlmIChvYmplY3RbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUob2JqZWN0W3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdLCBrZXksIHJlc3VsdC5hdHRyU3RyLCBsZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRPYmplY3ROb2RlKHJlc3VsdC52YWwsIGtleSwgcmVzdWx0LmF0dHJTdHIsIGxldmVsKTtcbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZE9iamVjdE5vZGUgPSBmdW5jdGlvbih2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYodmFsID09PSBcIlwiKXtcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgdGhpcy5jbG9zZVRhZyhrZXkpICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1cbiAgfWVsc2V7XG5cbiAgICBsZXQgdGFnRW5kRXhwID0gJzwvJyArIGtleSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBsZXQgcGlDbG9zaW5nQ2hhciA9IFwiXCI7XG4gICAgXG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikge1xuICAgICAgcGlDbG9zaW5nQ2hhciA9IFwiP1wiO1xuICAgICAgdGFnRW5kRXhwID0gXCJcIjtcbiAgICB9XG4gIFxuICAgIC8vIGF0dHJTdHIgaXMgYW4gZW1wdHkgc3RyaW5nIGluIGNhc2UgdGhlIGF0dHJpYnV0ZSBjYW1lIGFzIHVuZGVmaW5lZCBvciBudWxsXG4gICAgaWYgKChhdHRyU3RyIHx8IGF0dHJTdHIgPT09ICcnKSAmJiB2YWwuaW5kZXhPZignPCcpID09PSAtMSkge1xuICAgICAgcmV0dXJuICggdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsgIGtleSArIGF0dHJTdHIgKyBwaUNsb3NpbmdDaGFyICsgJz4nICsgdmFsICsgdGFnRW5kRXhwICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgJiYgcGlDbG9zaW5nQ2hhci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCEtLSR7dmFsfS0tPmAgKyB0aGlzLm5ld0xpbmU7XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArIHBpQ2xvc2luZ0NoYXIgKyB0aGlzLnRhZ0VuZENoYXIgK1xuICAgICAgICB2YWwgK1xuICAgICAgICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyB0YWdFbmRFeHAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuY2xvc2VUYWcgPSBmdW5jdGlvbihrZXkpe1xuICBsZXQgY2xvc2VUYWcgPSBcIlwiO1xuICBpZih0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2Yoa2V5KSAhPT0gLTEpeyAvL3VucGFpcmVkXG4gICAgaWYoIXRoaXMub3B0aW9ucy5zdXBwcmVzc1VucGFpcmVkTm9kZSkgY2xvc2VUYWcgPSBcIi9cIlxuICB9ZWxzZSBpZih0aGlzLm9wdGlvbnMuc3VwcHJlc3NFbXB0eU5vZGUpeyAvL2VtcHR5XG4gICAgY2xvc2VUYWcgPSBcIi9cIjtcbiAgfWVsc2V7XG4gICAgY2xvc2VUYWcgPSBgPjwvJHtrZXl9YFxuICB9XG4gIHJldHVybiBjbG9zZVRhZztcbn1cblxuZnVuY3Rpb24gYnVpbGRFbXB0eU9iak5vZGUodmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmICh2YWwgIT09ICcnKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRPYmplY3ROb2RlKHZhbCwga2V5LCBhdHRyU3RyLCBsZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAvLyByZXR1cm4gdGhpcy5idWlsZFRhZ1N0cihsZXZlbCxrZXksIGF0dHJTdHIpO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZFRleHRWYWxOb2RlID0gZnVuY3Rpb24odmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSAhPT0gZmFsc2UgJiYga2V5ID09PSB0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCFbQ0RBVEFbJHt2YWx9XV0+YCArICB0aGlzLm5ld0xpbmU7XG4gIH1lbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgYDwhLS0ke3ZhbH0tLT5gICsgIHRoaXMubmV3TGluZTtcbiAgfWVsc2UgaWYoa2V5WzBdID09PSBcIj9cIikgey8vUEkgdGFnXG4gICAgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7IFxuICB9ZWxzZXtcbiAgICBsZXQgdGV4dFZhbHVlID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgdmFsKTtcbiAgICB0ZXh0VmFsdWUgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHRleHRWYWx1ZSk7XG4gIFxuICAgIGlmKCB0ZXh0VmFsdWUgPT09ICcnKXtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgdGhpcy5jbG9zZVRhZyhrZXkpICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyAnPicgK1xuICAgICAgICAgdGV4dFZhbHVlICtcbiAgICAgICAgJzwvJyArIGtleSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUucmVwbGFjZUVudGl0aWVzVmFsdWUgPSBmdW5jdGlvbih0ZXh0VmFsdWUpe1xuICBpZih0ZXh0VmFsdWUgJiYgdGV4dFZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy5vcHRpb25zLnByb2Nlc3NFbnRpdGllcyl7XG4gICAgZm9yIChsZXQgaT0wOyBpPHRoaXMub3B0aW9ucy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5vcHRpb25zLmVudGl0aWVzW2ldO1xuICAgICAgdGV4dFZhbHVlID0gdGV4dFZhbHVlLnJlcGxhY2UoZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRleHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gaW5kZW50YXRlKGxldmVsKSB7XG4gIHJldHVybiB0aGlzLm9wdGlvbnMuaW5kZW50QnkucmVwZWF0KGxldmVsKTtcbn1cblxuZnVuY3Rpb24gaXNBdHRyaWJ1dGUobmFtZSAvKiwgb3B0aW9ucyovKSB7XG4gIGlmIChuYW1lLnN0YXJ0c1dpdGgodGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgpICYmIG5hbWUgIT09IHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHIodGhpcy5hdHRyUHJlZml4TGVuKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCdWlsZGVyO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHZhbGlkYXRvciA9IHJlcXVpcmUoJy4vdmFsaWRhdG9yJyk7XG5jb25zdCBYTUxQYXJzZXIgPSByZXF1aXJlKCcuL3htbHBhcnNlci9YTUxQYXJzZXInKTtcbmNvbnN0IFhNTEJ1aWxkZXIgPSByZXF1aXJlKCcuL3htbGJ1aWxkZXIvanNvbjJ4bWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFhNTFBhcnNlcjogWE1MUGFyc2VyLFxuICBYTUxWYWxpZGF0b3I6IHZhbGlkYXRvcixcbiAgWE1MQnVpbGRlcjogWE1MQnVpbGRlclxufSIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuWE1MX0NIQVJLRVkgPSBleHBvcnRzLlhNTF9BVFRSS0VZID0gdm9pZCAwO1xuLyoqXG4gKiBEZWZhdWx0IGtleSB1c2VkIHRvIGFjY2VzcyB0aGUgWE1MIGF0dHJpYnV0ZXMuXG4gKi9cbmV4cG9ydHMuWE1MX0FUVFJLRVkgPSBcIiRcIjtcbi8qKlxuICogRGVmYXVsdCBrZXkgdXNlZCB0byBhY2Nlc3MgdGhlIFhNTCB2YWx1ZSBjb250ZW50LlxuICovXG5leHBvcnRzLlhNTF9DSEFSS0VZID0gXCJfXCI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD14bWwuY29tbW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5naWZ5WE1MID0gc3RyaW5naWZ5WE1MO1xuZXhwb3J0cy5wYXJzZVhNTCA9IHBhcnNlWE1MO1xuY29uc3QgZmFzdF94bWxfcGFyc2VyXzEgPSByZXF1aXJlKFwiZmFzdC14bWwtcGFyc2VyXCIpO1xuY29uc3QgeG1sX2NvbW1vbl9qc18xID0gcmVxdWlyZShcIi4veG1sLmNvbW1vbi5qc1wiKTtcbmZ1bmN0aW9uIGdldENvbW1vbk9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhdHRyaWJ1dGVzR3JvdXBOYW1lOiB4bWxfY29tbW9uX2pzXzEuWE1MX0FUVFJLRVksXG4gICAgICAgIHRleHROb2RlTmFtZTogKF9hID0gb3B0aW9ucy54bWxDaGFyS2V5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB4bWxfY29tbW9uX2pzXzEuWE1MX0NIQVJLRVksXG4gICAgICAgIGlnbm9yZUF0dHJpYnV0ZXM6IGZhbHNlLFxuICAgICAgICBzdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzOiBmYWxzZSxcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0U2VyaWFsaXplck9wdGlvbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBnZXRDb21tb25PcHRpb25zKG9wdGlvbnMpKSwgeyBhdHRyaWJ1dGVOYW1lUHJlZml4OiBcIkBfXCIsIGZvcm1hdDogdHJ1ZSwgc3VwcHJlc3NFbXB0eU5vZGU6IHRydWUsIGluZGVudEJ5OiBcIlwiLCByb290Tm9kZU5hbWU6IChfYSA9IG9wdGlvbnMucm9vdE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwicm9vdFwiLCBjZGF0YVByb3BOYW1lOiAoX2IgPSBvcHRpb25zLmNkYXRhUHJvcE5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiX19jZGF0YVwiIH0pO1xufVxuZnVuY3Rpb24gZ2V0UGFyc2VyT3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBnZXRDb21tb25PcHRpb25zKG9wdGlvbnMpKSwgeyBwYXJzZUF0dHJpYnV0ZVZhbHVlOiBmYWxzZSwgcGFyc2VUYWdWYWx1ZTogZmFsc2UsIGF0dHJpYnV0ZU5hbWVQcmVmaXg6IFwiXCIsIHN0b3BOb2Rlczogb3B0aW9ucy5zdG9wTm9kZXMsIHByb2Nlc3NFbnRpdGllczogdHJ1ZSB9KTtcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gSlNPTiBvYmplY3QgdG8gWE1MIHN0cmluZ1xuICogQHBhcmFtIG9iaiAtIEpTT04gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCBpbnRvIFhNTCBzdHJpbmdcbiAqIEBwYXJhbSBvcHRzIC0gT3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgWE1MIGJ1aWxkaW5nIG9mIGdpdmVuIEpTT04gb2JqZWN0XG4gKiBgcm9vdE5hbWVgIGluZGljYXRlcyB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHRoZSByZXN1bHRpbmcgWE1MXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVhNTChvYmosIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHBhcnNlck9wdGlvbnMgPSBnZXRTZXJpYWxpemVyT3B0aW9ucyhvcHRzKTtcbiAgICBjb25zdCBqMnggPSBuZXcgZmFzdF94bWxfcGFyc2VyXzEuWE1MQnVpbGRlcihwYXJzZXJPcHRpb25zKTtcbiAgICBjb25zdCBub2RlID0geyBbcGFyc2VyT3B0aW9ucy5yb290Tm9kZU5hbWVdOiBvYmogfTtcbiAgICBjb25zdCB4bWxEYXRhID0gajJ4LmJ1aWxkKG5vZGUpO1xuICAgIHJldHVybiBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiBzdGFuZGFsb25lPVwieWVzXCI/PiR7eG1sRGF0YX1gLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gWE1MIHN0cmluZyBpbnRvIEpTT05cbiAqIEBwYXJhbSBzdHIgLSBTdHJpbmcgY29udGFpbmluZyB0aGUgWE1MIGNvbnRlbnQgdG8gYmUgcGFyc2VkIGludG8gSlNPTlxuICogQHBhcmFtIG9wdHMgLSBPcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBwYXJzaW5nIG9mIGdpdmVuIHhtbCBzdHJpbmdcbiAqIGBpbmNsdWRlUm9vdGAgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvb3QgZWxlbWVudCBpcyB0byBiZSBpbmNsdWRlZCBvciBub3QgaW4gdGhlIG91dHB1dFxuICovXG5hc3luYyBmdW5jdGlvbiBwYXJzZVhNTChzdHIsIG9wdHMgPSB7fSkge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvY3VtZW50IGlzIGVtcHR5XCIpO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0aW9uID0gZmFzdF94bWxfcGFyc2VyXzEuWE1MVmFsaWRhdG9yLnZhbGlkYXRlKHN0cik7XG4gICAgaWYgKHZhbGlkYXRpb24gIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgdmFsaWRhdGlvbjtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IGZhc3RfeG1sX3BhcnNlcl8xLlhNTFBhcnNlcihnZXRQYXJzZXJPcHRpb25zKG9wdHMpKTtcbiAgICBjb25zdCBwYXJzZWRYbWwgPSBwYXJzZXIucGFyc2Uoc3RyKTtcbiAgICAvLyBSZW1vdmUgdGhlIDw/eG1sIHZlcnNpb249XCIuLi5cIiA/PiBub2RlLlxuICAgIC8vIFRoaXMgaXMgYSBjaGFuZ2UgaW4gYmVoYXZpb3Igb24gZnhwIHY0LiBJc3N1ZSAjNDI0XG4gICAgaWYgKHBhcnNlZFhtbFtcIj94bWxcIl0pIHtcbiAgICAgICAgZGVsZXRlIHBhcnNlZFhtbFtcIj94bWxcIl07XG4gICAgfVxuICAgIGlmICghb3B0cy5pbmNsdWRlUm9vdCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJzZWRYbWwpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlZFhtbFtrZXldO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiA/IE9iamVjdC5hc3NpZ24oe30sIHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRYbWw7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD14bWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IGV4cG9ydHMuWE1MX0FUVFJLRVkgPSBleHBvcnRzLnBhcnNlWE1MID0gZXhwb3J0cy5zdHJpbmdpZnlYTUwgPSB2b2lkIDA7XG52YXIgeG1sX2pzXzEgPSByZXF1aXJlKFwiLi94bWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlYTUxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9qc18xLnN0cmluZ2lmeVhNTDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlWE1MXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB4bWxfanNfMS5wYXJzZVhNTDsgfSB9KTtcbnZhciB4bWxfY29tbW9uX2pzXzEgPSByZXF1aXJlKFwiLi94bWwuY29tbW9uLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWE1MX0FUVFJLRVlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9jb21tb25fanNfMS5YTUxfQVRUUktFWTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlhNTF9DSEFSS0VZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB4bWxfY29tbW9uX2pzXzEuWE1MX0NIQVJLRVk7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZ2dlciA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG4vKipcbiAqIFRoZSBgQGF6dXJlL2xvZ2dlcmAgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYWNrYWdlLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydHMubG9nZ2VyID0gKDAsIGxvZ2dlcl8xLmNyZWF0ZUNsaWVudExvZ2dlcikoXCJjb3JlLWxyb1wiKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ2dlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRlcm1pbmFsU3RhdGVzID0gZXhwb3J0cy5QT0xMX0lOVEVSVkFMX0lOX01TID0gdm9pZCAwO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCB0aW1lIGludGVydmFsIHRvIHdhaXQgYmVmb3JlIHNlbmRpbmcgdGhlIG5leHQgcG9sbGluZyByZXF1ZXN0LlxuICovXG5leHBvcnRzLlBPTExfSU5URVJWQUxfSU5fTVMgPSAyMDAwO1xuLyoqXG4gKiBUaGUgY2xvc2VkIHNldCBvZiB0ZXJtaW5hbCBzdGF0ZXMuXG4gKi9cbmV4cG9ydHMudGVybWluYWxTdGF0ZXMgPSBbXCJzdWNjZWVkZWRcIiwgXCJjYW5jZWxlZFwiLCBcImZhaWxlZFwiXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBvbGxPcGVyYXRpb24gPSBleHBvcnRzLmluaXRPcGVyYXRpb24gPSBleHBvcnRzLmRlc2VyaWFsaXplU3RhdGUgPSB2b2lkIDA7XG5jb25zdCBsb2dnZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2dnZXIuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy5qc1wiKTtcbi8qKlxuICogRGVzZXJpYWxpemVzIHRoZSBzdGF0ZVxuICovXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVN0YXRlKHNlcmlhbGl6ZWRTdGF0ZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHNlcmlhbGl6ZWRTdGF0ZSkuc3RhdGU7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRlc2VyaWFsaXplIGlucHV0IHN0YXRlOiAke3NlcmlhbGl6ZWRTdGF0ZX1gKTtcbiAgICB9XG59XG5leHBvcnRzLmRlc2VyaWFsaXplU3RhdGUgPSBkZXNlcmlhbGl6ZVN0YXRlO1xuZnVuY3Rpb24gc2V0U3RhdGVFcnJvcihpbnB1dHMpIHtcbiAgICBjb25zdCB7IHN0YXRlLCBzdGF0ZVByb3h5LCBpc09wZXJhdGlvbkVycm9yIH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoaXNPcGVyYXRpb25FcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RXJyb3Ioc3RhdGUsIGVycm9yKTtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RmFpbGVkKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9O1xufVxuZnVuY3Rpb24gYXBwZW5kUmVhZGFibGVFcnJvck1lc3NhZ2UoY3VycmVudE1lc3NhZ2UsIGlubmVyTWVzc2FnZSkge1xuICAgIGxldCBtZXNzYWdlID0gY3VycmVudE1lc3NhZ2U7XG4gICAgaWYgKG1lc3NhZ2Uuc2xpY2UoLTEpICE9PSBcIi5cIikge1xuICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSArIFwiLlwiO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZSArIFwiIFwiICsgaW5uZXJNZXNzYWdlO1xufVxuZnVuY3Rpb24gc2ltcGxpZnlFcnJvcihlcnIpIHtcbiAgICBsZXQgbWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgIGxldCBjb2RlID0gZXJyLmNvZGU7XG4gICAgbGV0IGN1ckVyciA9IGVycjtcbiAgICB3aGlsZSAoY3VyRXJyLmlubmVyZXJyb3IpIHtcbiAgICAgICAgY3VyRXJyID0gY3VyRXJyLmlubmVyZXJyb3I7XG4gICAgICAgIGNvZGUgPSBjdXJFcnIuY29kZTtcbiAgICAgICAgbWVzc2FnZSA9IGFwcGVuZFJlYWRhYmxlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIGN1ckVyci5tZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgbWVzc2FnZSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcHJvY2Vzc09wZXJhdGlvblN0YXR1cyhyZXN1bHQpIHtcbiAgICBjb25zdCB7IHN0YXRlLCBzdGF0ZVByb3h5LCBzdGF0dXMsIGlzRG9uZSwgcHJvY2Vzc1Jlc3VsdCwgZ2V0RXJyb3IsIHJlc3BvbnNlLCBzZXRFcnJvckFzUmVzdWx0IH0gPSByZXN1bHQ7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcInN1Y2NlZWRlZFwiOiB7XG4gICAgICAgICAgICBzdGF0ZVByb3h5LnNldFN1Y2NlZWRlZChzdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZmFpbGVkXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGdldEVycm9yID09PSBudWxsIHx8IGdldEVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRFcnJvcihyZXNwb25zZSk7XG4gICAgICAgICAgICBsZXQgcG9zdGZpeCA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBtZXNzYWdlIH0gPSBzaW1wbGlmeUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcG9zdGZpeCA9IGAuICR7Y29kZX0uICR7bWVzc2FnZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXJyU3RyID0gYFRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uIGhhcyBmYWlsZWQke3Bvc3RmaXh9YDtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RXJyb3Ioc3RhdGUsIG5ldyBFcnJvcihlcnJTdHIpKTtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RmFpbGVkKHN0YXRlKTtcbiAgICAgICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci53YXJuaW5nKGVyclN0cik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiY2FuY2VsZWRcIjoge1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRDYW5jZWxlZChzdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoKGlzRG9uZSA9PT0gbnVsbCB8fCBpc0RvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlzRG9uZShyZXNwb25zZSwgc3RhdGUpKSB8fFxuICAgICAgICAoaXNEb25lID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIFtcInN1Y2NlZWRlZFwiLCBcImNhbmNlbGVkXCJdLmNvbmNhdChzZXRFcnJvckFzUmVzdWx0ID8gW10gOiBbXCJmYWlsZWRcIl0pLmluY2x1ZGVzKHN0YXR1cykpKSB7XG4gICAgICAgIHN0YXRlUHJveHkuc2V0UmVzdWx0KHN0YXRlLCBidWlsZFJlc3VsdCh7XG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJ1aWxkUmVzdWx0KGlucHV0cykge1xuICAgIGNvbnN0IHsgcHJvY2Vzc1Jlc3VsdCwgcmVzcG9uc2UsIHN0YXRlIH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuIHByb2Nlc3NSZXN1bHQgPyBwcm9jZXNzUmVzdWx0KHJlc3BvbnNlLCBzdGF0ZSkgOiByZXNwb25zZTtcbn1cbi8qKlxuICogSW5pdGlhdGVzIHRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0T3BlcmF0aW9uKGlucHV0cykge1xuICAgIGNvbnN0IHsgaW5pdCwgc3RhdGVQcm94eSwgcHJvY2Vzc1Jlc3VsdCwgZ2V0T3BlcmF0aW9uU3RhdHVzLCB3aXRoT3BlcmF0aW9uTG9jYXRpb24sIHNldEVycm9yQXNSZXN1bHQsIH0gPSBpbnB1dHM7XG4gICAgY29uc3QgeyBvcGVyYXRpb25Mb2NhdGlvbiwgcmVzb3VyY2VMb2NhdGlvbiwgbWV0YWRhdGEsIHJlc3BvbnNlIH0gPSBhd2FpdCBpbml0KCk7XG4gICAgaWYgKG9wZXJhdGlvbkxvY2F0aW9uKVxuICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IG51bGwgfHwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aXRoT3BlcmF0aW9uTG9jYXRpb24ob3BlcmF0aW9uTG9jYXRpb24sIGZhbHNlKTtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgcmVzb3VyY2VMb2NhdGlvbixcbiAgICB9O1xuICAgIGxvZ2dlcl9qc18xLmxvZ2dlci52ZXJib3NlKGBMUk86IE9wZXJhdGlvbiBkZXNjcmlwdGlvbjpgLCBjb25maWcpO1xuICAgIGNvbnN0IHN0YXRlID0gc3RhdGVQcm94eS5pbml0U3RhdGUoY29uZmlnKTtcbiAgICBjb25zdCBzdGF0dXMgPSBnZXRPcGVyYXRpb25TdGF0dXMoeyByZXNwb25zZSwgc3RhdGUsIG9wZXJhdGlvbkxvY2F0aW9uIH0pO1xuICAgIHByb2Nlc3NPcGVyYXRpb25TdGF0dXMoeyBzdGF0ZSwgc3RhdHVzLCBzdGF0ZVByb3h5LCByZXNwb25zZSwgc2V0RXJyb3JBc1Jlc3VsdCwgcHJvY2Vzc1Jlc3VsdCB9KTtcbiAgICByZXR1cm4gc3RhdGU7XG59XG5leHBvcnRzLmluaXRPcGVyYXRpb24gPSBpbml0T3BlcmF0aW9uO1xuYXN5bmMgZnVuY3Rpb24gcG9sbE9wZXJhdGlvbkhlbHBlcihpbnB1dHMpIHtcbiAgICBjb25zdCB7IHBvbGwsIHN0YXRlLCBzdGF0ZVByb3h5LCBvcGVyYXRpb25Mb2NhdGlvbiwgZ2V0T3BlcmF0aW9uU3RhdHVzLCBnZXRSZXNvdXJjZUxvY2F0aW9uLCBpc09wZXJhdGlvbkVycm9yLCBvcHRpb25zLCB9ID0gaW5wdXRzO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9sbChvcGVyYXRpb25Mb2NhdGlvbiwgb3B0aW9ucykuY2F0Y2goc2V0U3RhdGVFcnJvcih7XG4gICAgICAgIHN0YXRlLFxuICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICBpc09wZXJhdGlvbkVycm9yLFxuICAgIH0pKTtcbiAgICBjb25zdCBzdGF0dXMgPSBnZXRPcGVyYXRpb25TdGF0dXMocmVzcG9uc2UsIHN0YXRlKTtcbiAgICBsb2dnZXJfanNfMS5sb2dnZXIudmVyYm9zZShgTFJPOiBTdGF0dXM6XFxuXFx0UG9sbGluZyBmcm9tOiAke3N0YXRlLmNvbmZpZy5vcGVyYXRpb25Mb2NhdGlvbn1cXG5cXHRPcGVyYXRpb24gc3RhdHVzOiAke3N0YXR1c31cXG5cXHRQb2xsaW5nIHN0YXR1czogJHtjb25zdGFudHNfanNfMS50ZXJtaW5hbFN0YXRlcy5pbmNsdWRlcyhzdGF0dXMpID8gXCJTdG9wcGVkXCIgOiBcIlJ1bm5pbmdcIn1gKTtcbiAgICBpZiAoc3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlTG9jYXRpb24gPSBnZXRSZXNvdXJjZUxvY2F0aW9uKHJlc3BvbnNlLCBzdGF0ZSk7XG4gICAgICAgIGlmIChyZXNvdXJjZUxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IGF3YWl0IHBvbGwocmVzb3VyY2VMb2NhdGlvbikuY2F0Y2goc2V0U3RhdGVFcnJvcih7IHN0YXRlLCBzdGF0ZVByb3h5LCBpc09wZXJhdGlvbkVycm9yIH0pKSxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJlc3BvbnNlLCBzdGF0dXMgfTtcbn1cbi8qKiBQb2xscyB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvbGxPcGVyYXRpb24oaW5wdXRzKSB7XG4gICAgY29uc3QgeyBwb2xsLCBzdGF0ZSwgc3RhdGVQcm94eSwgb3B0aW9ucywgZ2V0T3BlcmF0aW9uU3RhdHVzLCBnZXRSZXNvdXJjZUxvY2F0aW9uLCBnZXRPcGVyYXRpb25Mb2NhdGlvbiwgaXNPcGVyYXRpb25FcnJvciwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLCBnZXRQb2xsaW5nSW50ZXJ2YWwsIHByb2Nlc3NSZXN1bHQsIGdldEVycm9yLCB1cGRhdGVTdGF0ZSwgc2V0RGVsYXksIGlzRG9uZSwgc2V0RXJyb3JBc1Jlc3VsdCwgfSA9IGlucHV0cztcbiAgICBjb25zdCB7IG9wZXJhdGlvbkxvY2F0aW9uIH0gPSBzdGF0ZS5jb25maWc7XG4gICAgaWYgKG9wZXJhdGlvbkxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZSwgc3RhdHVzIH0gPSBhd2FpdCBwb2xsT3BlcmF0aW9uSGVscGVyKHtcbiAgICAgICAgICAgIHBvbGwsXG4gICAgICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXMsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICAgIGdldFJlc291cmNlTG9jYXRpb24sXG4gICAgICAgICAgICBpc09wZXJhdGlvbkVycm9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHByb2Nlc3NPcGVyYXRpb25TdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICBpc0RvbmUsXG4gICAgICAgICAgICBwcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgZ2V0RXJyb3IsXG4gICAgICAgICAgICBzZXRFcnJvckFzUmVzdWx0LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjb25zdGFudHNfanNfMS50ZXJtaW5hbFN0YXRlcy5pbmNsdWRlcyhzdGF0dXMpKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbEluTXMgPSBnZXRQb2xsaW5nSW50ZXJ2YWwgPT09IG51bGwgfHwgZ2V0UG9sbGluZ0ludGVydmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRQb2xsaW5nSW50ZXJ2YWwocmVzcG9uc2UpO1xuICAgICAgICAgICAgaWYgKGludGVydmFsSW5NcylcbiAgICAgICAgICAgICAgICBzZXREZWxheShpbnRlcnZhbEluTXMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBnZXRPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCBnZXRPcGVyYXRpb25Mb2NhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2V0T3BlcmF0aW9uTG9jYXRpb24ocmVzcG9uc2UsIHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNVcGRhdGVkID0gb3BlcmF0aW9uTG9jYXRpb24gIT09IGxvY2F0aW9uO1xuICAgICAgICAgICAgICAgIHN0YXRlLmNvbmZpZy5vcGVyYXRpb25Mb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICAgICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpdGhPcGVyYXRpb25Mb2NhdGlvbihsb2NhdGlvbiwgaXNVcGRhdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IG51bGwgfHwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aXRoT3BlcmF0aW9uTG9jYXRpb24ob3BlcmF0aW9uTG9jYXRpb24sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTdGF0ZSA9PT0gbnVsbCB8fCB1cGRhdGVTdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdXBkYXRlU3RhdGUoc3RhdGUsIHJlc3BvbnNlKTtcbiAgICB9XG59XG5leHBvcnRzLnBvbGxPcGVyYXRpb24gPSBwb2xsT3BlcmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucG9sbEh0dHBPcGVyYXRpb24gPSBleHBvcnRzLmlzT3BlcmF0aW9uRXJyb3IgPSBleHBvcnRzLmdldFJlc291cmNlTG9jYXRpb24gPSBleHBvcnRzLmdldE9wZXJhdGlvblN0YXR1cyA9IGV4cG9ydHMuZ2V0T3BlcmF0aW9uTG9jYXRpb24gPSBleHBvcnRzLmluaXRIdHRwT3BlcmF0aW9uID0gZXhwb3J0cy5nZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlID0gZXhwb3J0cy5nZXRFcnJvckZyb21SZXNwb25zZSA9IGV4cG9ydHMucGFyc2VSZXRyeUFmdGVyID0gZXhwb3J0cy5pbmZlckxyb01vZGUgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuLi9wb2xsZXIvb3BlcmF0aW9uLmpzXCIpO1xuY29uc3QgbG9nZ2VyX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nZ2VyLmpzXCIpO1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTG9jYXRpb25Qb2xsaW5nVXJsKGlucHV0cykge1xuICAgIGNvbnN0IHsgYXp1cmVBc3luY09wZXJhdGlvbiwgb3BlcmF0aW9uTG9jYXRpb24gfSA9IGlucHV0cztcbiAgICByZXR1cm4gb3BlcmF0aW9uTG9jYXRpb24gIT09IG51bGwgJiYgb3BlcmF0aW9uTG9jYXRpb24gIT09IHZvaWQgMCA/IG9wZXJhdGlvbkxvY2F0aW9uIDogYXp1cmVBc3luY09wZXJhdGlvbjtcbn1cbmZ1bmN0aW9uIGdldExvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJsb2NhdGlvblwiXTtcbn1cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkxvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJvcGVyYXRpb24tbG9jYXRpb25cIl07XG59XG5mdW5jdGlvbiBnZXRBenVyZUFzeW5jT3BlcmF0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJhenVyZS1hc3luY29wZXJhdGlvblwiXTtcbn1cbmZ1bmN0aW9uIGZpbmRSZXNvdXJjZUxvY2F0aW9uKGlucHV0cykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IGxvY2F0aW9uLCByZXF1ZXN0TWV0aG9kLCByZXF1ZXN0UGF0aCwgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZyB9ID0gaW5wdXRzO1xuICAgIHN3aXRjaCAocmVxdWVzdE1ldGhvZCkge1xuICAgICAgICBjYXNlIFwiUFVUXCI6IHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UGF0aDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiREVMRVRFXCI6IHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIlBBVENIXCI6IHtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSBnZXREZWZhdWx0KCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHJlcXVlc3RQYXRoO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHtcbiAgICAgICAgc3dpdGNoIChyZXNvdXJjZUxvY2F0aW9uQ29uZmlnKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXp1cmUtYXN5bmMtb3BlcmF0aW9uXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm9yaWdpbmFsLXVyaVwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImxvY2F0aW9uXCI6XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaW5mZXJMcm9Nb2RlKGlucHV0cykge1xuICAgIGNvbnN0IHsgcmF3UmVzcG9uc2UsIHJlcXVlc3RNZXRob2QsIHJlcXVlc3RQYXRoLCByZXNvdXJjZUxvY2F0aW9uQ29uZmlnIH0gPSBpbnB1dHM7XG4gICAgY29uc3Qgb3BlcmF0aW9uTG9jYXRpb24gPSBnZXRPcGVyYXRpb25Mb2NhdGlvbkhlYWRlcihyYXdSZXNwb25zZSk7XG4gICAgY29uc3QgYXp1cmVBc3luY09wZXJhdGlvbiA9IGdldEF6dXJlQXN5bmNPcGVyYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpO1xuICAgIGNvbnN0IHBvbGxpbmdVcmwgPSBnZXRPcGVyYXRpb25Mb2NhdGlvblBvbGxpbmdVcmwoeyBvcGVyYXRpb25Mb2NhdGlvbiwgYXp1cmVBc3luY09wZXJhdGlvbiB9KTtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGdldExvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBub3JtYWxpemVkUmVxdWVzdE1ldGhvZCA9IHJlcXVlc3RNZXRob2QgPT09IG51bGwgfHwgcmVxdWVzdE1ldGhvZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVxdWVzdE1ldGhvZC50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgIGlmIChwb2xsaW5nVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZGU6IFwiT3BlcmF0aW9uTG9jYXRpb25cIixcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uOiBwb2xsaW5nVXJsLFxuICAgICAgICAgICAgcmVzb3VyY2VMb2NhdGlvbjogZmluZFJlc291cmNlTG9jYXRpb24oe1xuICAgICAgICAgICAgICAgIHJlcXVlc3RNZXRob2Q6IG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RQYXRoLFxuICAgICAgICAgICAgICAgIHJlc291cmNlTG9jYXRpb25Db25maWcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kZTogXCJSZXNvdXJjZUxvY2F0aW9uXCIsXG4gICAgICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kID09PSBcIlBVVFwiICYmIHJlcXVlc3RQYXRoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcIkJvZHlcIixcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uOiByZXF1ZXN0UGF0aCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZXhwb3J0cy5pbmZlckxyb01vZGUgPSBpbmZlckxyb01vZGU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1TdGF0dXMoaW5wdXRzKSB7XG4gICAgY29uc3QgeyBzdGF0dXMsIHN0YXR1c0NvZGUgfSA9IGlucHV0cztcbiAgICBpZiAodHlwZW9mIHN0YXR1cyAhPT0gXCJzdHJpbmdcIiAmJiBzdGF0dXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvbGxpbmcgd2FzIHVuc3VjY2Vzc2Z1bC4gRXhwZWN0ZWQgc3RhdHVzIHRvIGhhdmUgYSBzdHJpbmcgdmFsdWUgb3Igbm8gdmFsdWUgYnV0IGl0IGhhcyBpbnN0ZWFkOiAke3N0YXR1c30uIFRoaXMgZG9lc24ndCBuZWNlc3NhcmlseSBpbmRpY2F0ZSB0aGUgb3BlcmF0aW9uIGhhcyBmYWlsZWQuIENoZWNrIHlvdXIgQXp1cmUgc3Vic2NyaXB0aW9uIG9yIHJlc291cmNlIHN0YXR1cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gKTtcbiAgICB9XG4gICAgc3dpdGNoIChzdGF0dXMgPT09IG51bGwgfHwgc3RhdHVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0dXMudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgIHJldHVybiB0b09wZXJhdGlvblN0YXR1cyhzdGF0dXNDb2RlKTtcbiAgICAgICAgY2FzZSBcInN1Y2NlZWRlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwic3VjY2VlZGVkXCI7XG4gICAgICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBcImZhaWxlZFwiO1xuICAgICAgICBjYXNlIFwicnVubmluZ1wiOlxuICAgICAgICBjYXNlIFwiYWNjZXB0ZWRcIjpcbiAgICAgICAgY2FzZSBcInN0YXJ0ZWRcIjpcbiAgICAgICAgY2FzZSBcImNhbmNlbGluZ1wiOlxuICAgICAgICBjYXNlIFwiY2FuY2VsbGluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICAgICAgICBjYXNlIFwiY2FuY2VsZWRcIjpcbiAgICAgICAgY2FzZSBcImNhbmNlbGxlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiY2FuY2VsZWRcIjtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLnZlcmJvc2UoYExSTzogdW5yZWNvZ25pemVkIG9wZXJhdGlvbiBzdGF0dXM6ICR7c3RhdHVzfWApO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFN0YXR1cyhyYXdSZXNwb25zZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IHN0YXR1cyB9ID0gKF9hID0gcmF3UmVzcG9uc2UuYm9keSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgcmV0dXJuIHRyYW5zZm9ybVN0YXR1cyh7IHN0YXR1cywgc3RhdHVzQ29kZTogcmF3UmVzcG9uc2Uuc3RhdHVzQ29kZSB9KTtcbn1cbmZ1bmN0aW9uIGdldFByb3Zpc2lvbmluZ1N0YXRlKHJhd1Jlc3BvbnNlKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB7IHByb3BlcnRpZXMsIHByb3Zpc2lvbmluZ1N0YXRlIH0gPSAoX2EgPSByYXdSZXNwb25zZS5ib2R5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICBjb25zdCBzdGF0dXMgPSAoX2IgPSBwcm9wZXJ0aWVzID09PSBudWxsIHx8IHByb3BlcnRpZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BlcnRpZXMucHJvdmlzaW9uaW5nU3RhdGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHByb3Zpc2lvbmluZ1N0YXRlO1xuICAgIHJldHVybiB0cmFuc2Zvcm1TdGF0dXMoeyBzdGF0dXMsIHN0YXR1c0NvZGU6IHJhd1Jlc3BvbnNlLnN0YXR1c0NvZGUgfSk7XG59XG5mdW5jdGlvbiB0b09wZXJhdGlvblN0YXR1cyhzdGF0dXNDb2RlKSB7XG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IDIwMikge1xuICAgICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0YXR1c0NvZGUgPCAzMDApIHtcbiAgICAgICAgcmV0dXJuIFwic3VjY2VlZGVkXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXIoeyByYXdSZXNwb25zZSB9KSB7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9IHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJyZXRyeS1hZnRlclwiXTtcbiAgICBpZiAocmV0cnlBZnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFJldHJ5LUFmdGVyIGhlYWRlciB2YWx1ZSBpcyBlaXRoZXIgaW4gSFRUUCBkYXRlIGZvcm1hdCwgb3IgaW4gc2Vjb25kc1xuICAgICAgICBjb25zdCByZXRyeUFmdGVySW5TZWNvbmRzID0gcGFyc2VJbnQocmV0cnlBZnRlcik7XG4gICAgICAgIHJldHVybiBpc05hTihyZXRyeUFmdGVySW5TZWNvbmRzKVxuICAgICAgICAgICAgPyBjYWxjdWxhdGVQb2xsaW5nSW50ZXJ2YWxGcm9tRGF0ZShuZXcgRGF0ZShyZXRyeUFmdGVyKSlcbiAgICAgICAgICAgIDogcmV0cnlBZnRlckluU2Vjb25kcyAqIDEwMDA7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnBhcnNlUmV0cnlBZnRlciA9IHBhcnNlUmV0cnlBZnRlcjtcbmZ1bmN0aW9uIGdldEVycm9yRnJvbVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhY2Nlc3NCb2R5UHJvcGVydHkocmVzcG9uc2UsIFwiZXJyb3JcIik7XG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgICBsb2dnZXJfanNfMS5sb2dnZXIud2FybmluZyhgVGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24gZmFpbGVkIGJ1dCB0aGVyZSBpcyBubyBlcnJvciBwcm9wZXJ0eSBpbiB0aGUgcmVzcG9uc2UncyBib2R5YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFlcnJvci5jb2RlIHx8ICFlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci53YXJuaW5nKGBUaGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbiBmYWlsZWQgYnV0IHRoZSBlcnJvciBwcm9wZXJ0eSBpbiB0aGUgcmVzcG9uc2UncyBib2R5IGRvZXNuJ3QgY29udGFpbiBjb2RlIG9yIG1lc3NhZ2VgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG59XG5leHBvcnRzLmdldEVycm9yRnJvbVJlc3BvbnNlID0gZ2V0RXJyb3JGcm9tUmVzcG9uc2U7XG5mdW5jdGlvbiBjYWxjdWxhdGVQb2xsaW5nSW50ZXJ2YWxGcm9tRGF0ZShyZXRyeUFmdGVyRGF0ZSkge1xuICAgIGNvbnN0IHRpbWVOb3cgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcbiAgICBjb25zdCByZXRyeUFmdGVyVGltZSA9IHJldHJ5QWZ0ZXJEYXRlLmdldFRpbWUoKTtcbiAgICBpZiAodGltZU5vdyA8IHJldHJ5QWZ0ZXJUaW1lKSB7XG4gICAgICAgIHJldHVybiByZXRyeUFmdGVyVGltZSAtIHRpbWVOb3c7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlKGlucHV0cykge1xuICAgIGNvbnN0IHsgcmVzcG9uc2UsIHN0YXRlLCBvcGVyYXRpb25Mb2NhdGlvbiB9ID0gaW5wdXRzO1xuICAgIGZ1bmN0aW9uIGhlbHBlcigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtb2RlID0gKF9hID0gc3RhdGUuY29uZmlnLm1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbXCJtb2RlXCJdO1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICAgIHJldHVybiB0b09wZXJhdGlvblN0YXR1cyhyZXNwb25zZS5yYXdSZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgICAgICAgIGNhc2UgXCJCb2R5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGlvblN0YXR1cyhyZXNwb25zZSwgc3RhdGUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhdHVzID0gaGVscGVyKCk7XG4gICAgcmV0dXJuIHN0YXR1cyA9PT0gXCJydW5uaW5nXCIgJiYgb3BlcmF0aW9uTG9jYXRpb24gPT09IHVuZGVmaW5lZCA/IFwic3VjY2VlZGVkXCIgOiBzdGF0dXM7XG59XG5leHBvcnRzLmdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UgPSBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlO1xuLyoqXG4gKiBJbml0aWF0ZXMgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRIdHRwT3BlcmF0aW9uKGlucHV0cykge1xuICAgIGNvbnN0IHsgc3RhdGVQcm94eSwgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgbHJvLCBzZXRFcnJvckFzUmVzdWx0IH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuICgwLCBvcGVyYXRpb25fanNfMS5pbml0T3BlcmF0aW9uKSh7XG4gICAgICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbHJvLnNlbmRJbml0aWFsUmVxdWVzdCgpO1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaW5mZXJMcm9Nb2RlKHtcbiAgICAgICAgICAgICAgICByYXdSZXNwb25zZTogcmVzcG9uc2UucmF3UmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBhdGg6IGxyby5yZXF1ZXN0UGF0aCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0TWV0aG9kOiBscm8ucmVxdWVzdE1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IHJlc3BvbnNlLCBvcGVyYXRpb25Mb2NhdGlvbjogY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9uLCByZXNvdXJjZUxvY2F0aW9uOiBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcucmVzb3VyY2VMb2NhdGlvbiB9LCAoKGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5tb2RlKSA/IHsgbWV0YWRhdGE6IHsgbW9kZTogY29uZmlnLm1vZGUgfSB9IDoge30pKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgcHJvY2Vzc1Jlc3VsdDogcHJvY2Vzc1Jlc3VsdFxuICAgICAgICAgICAgPyAoeyBmbGF0UmVzcG9uc2UgfSwgc3RhdGUpID0+IHByb2Nlc3NSZXN1bHQoZmxhdFJlc3BvbnNlLCBzdGF0ZSlcbiAgICAgICAgICAgIDogKHsgZmxhdFJlc3BvbnNlIH0pID0+IGZsYXRSZXNwb25zZSxcbiAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdHVzOiBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLFxuICAgICAgICBzZXRFcnJvckFzUmVzdWx0LFxuICAgIH0pO1xufVxuZXhwb3J0cy5pbml0SHR0cE9wZXJhdGlvbiA9IGluaXRIdHRwT3BlcmF0aW9uO1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTG9jYXRpb24oeyByYXdSZXNwb25zZSB9LCBzdGF0ZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBtb2RlID0gKF9hID0gc3RhdGUuY29uZmlnLm1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbXCJtb2RlXCJdO1xuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIFwiT3BlcmF0aW9uTG9jYXRpb25cIjoge1xuICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGlvbkxvY2F0aW9uUG9sbGluZ1VybCh7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uTG9jYXRpb246IGdldE9wZXJhdGlvbkxvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSxcbiAgICAgICAgICAgICAgICBhenVyZUFzeW5jT3BlcmF0aW9uOiBnZXRBenVyZUFzeW5jT3BlcmF0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUxvY2F0aW9uXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRMb2NhdGlvbkhlYWRlcihyYXdSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIkJvZHlcIjpcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZ2V0T3BlcmF0aW9uTG9jYXRpb24gPSBnZXRPcGVyYXRpb25Mb2NhdGlvbjtcbmZ1bmN0aW9uIGdldE9wZXJhdGlvblN0YXR1cyh7IHJhd1Jlc3BvbnNlIH0sIHN0YXRlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG1vZGUgPSAoX2EgPSBzdGF0ZS5jb25maWcubWV0YWRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtcIm1vZGVcIl07XG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgXCJPcGVyYXRpb25Mb2NhdGlvblwiOiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0U3RhdHVzKHJhd1Jlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiUmVzb3VyY2VMb2NhdGlvblwiOiB7XG4gICAgICAgICAgICByZXR1cm4gdG9PcGVyYXRpb25TdGF0dXMocmF3UmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIkJvZHlcIjoge1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3Zpc2lvbmluZ1N0YXRlKHJhd1Jlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBlcnJvcjogVW5leHBlY3RlZCBvcGVyYXRpb24gbW9kZTogJHttb2RlfWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0T3BlcmF0aW9uU3RhdHVzID0gZ2V0T3BlcmF0aW9uU3RhdHVzO1xuZnVuY3Rpb24gYWNjZXNzQm9keVByb3BlcnR5KHsgZmxhdFJlc3BvbnNlLCByYXdSZXNwb25zZSB9LCBwcm9wKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gKF9hID0gZmxhdFJlc3BvbnNlID09PSBudWxsIHx8IGZsYXRSZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmxhdFJlc3BvbnNlW3Byb3BdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoX2IgPSByYXdSZXNwb25zZS5ib2R5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbcHJvcF07XG59XG5mdW5jdGlvbiBnZXRSZXNvdXJjZUxvY2F0aW9uKHJlcywgc3RhdGUpIHtcbiAgICBjb25zdCBsb2MgPSBhY2Nlc3NCb2R5UHJvcGVydHkocmVzLCBcInJlc291cmNlTG9jYXRpb25cIik7XG4gICAgaWYgKGxvYyAmJiB0eXBlb2YgbG9jID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHN0YXRlLmNvbmZpZy5yZXNvdXJjZUxvY2F0aW9uID0gbG9jO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUuY29uZmlnLnJlc291cmNlTG9jYXRpb247XG59XG5leHBvcnRzLmdldFJlc291cmNlTG9jYXRpb24gPSBnZXRSZXNvdXJjZUxvY2F0aW9uO1xuZnVuY3Rpb24gaXNPcGVyYXRpb25FcnJvcihlKSB7XG4gICAgcmV0dXJuIGUubmFtZSA9PT0gXCJSZXN0RXJyb3JcIjtcbn1cbmV4cG9ydHMuaXNPcGVyYXRpb25FcnJvciA9IGlzT3BlcmF0aW9uRXJyb3I7XG4vKiogUG9sbHMgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24uICovXG5hc3luYyBmdW5jdGlvbiBwb2xsSHR0cE9wZXJhdGlvbihpbnB1dHMpIHtcbiAgICBjb25zdCB7IGxybywgc3RhdGVQcm94eSwgb3B0aW9ucywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIHNldERlbGF5LCBzdGF0ZSwgc2V0RXJyb3JBc1Jlc3VsdCwgfSA9IGlucHV0cztcbiAgICByZXR1cm4gKDAsIG9wZXJhdGlvbl9qc18xLnBvbGxPcGVyYXRpb24pKHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgIHNldERlbGF5LFxuICAgICAgICBwcm9jZXNzUmVzdWx0OiBwcm9jZXNzUmVzdWx0XG4gICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBpbnB1dFN0YXRlKSA9PiBwcm9jZXNzUmVzdWx0KGZsYXRSZXNwb25zZSwgaW5wdXRTdGF0ZSlcbiAgICAgICAgICAgIDogKHsgZmxhdFJlc3BvbnNlIH0pID0+IGZsYXRSZXNwb25zZSxcbiAgICAgICAgZ2V0RXJyb3I6IGdldEVycm9yRnJvbVJlc3BvbnNlLFxuICAgICAgICB1cGRhdGVTdGF0ZSxcbiAgICAgICAgZ2V0UG9sbGluZ0ludGVydmFsOiBwYXJzZVJldHJ5QWZ0ZXIsXG4gICAgICAgIGdldE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXMsXG4gICAgICAgIGlzT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgIGdldFJlc291cmNlTG9jYXRpb24sXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZXhwYW5zaW9uIGhlcmUgaXMgaW50ZW50aW9uYWwgYmVjYXVzZSBgbHJvYCBjb3VsZCBiZSBhbiBvYmplY3QgdGhhdFxuICAgICAgICAgKiByZWZlcmVuY2VzIGFuIGlubmVyIHRoaXMsIHNvIHdlIG5lZWQgdG8gcHJlc2VydmUgYSByZWZlcmVuY2UgdG8gaXQuXG4gICAgICAgICAqL1xuICAgICAgICBwb2xsOiBhc3luYyAobG9jYXRpb24sIGlucHV0T3B0aW9ucykgPT4gbHJvLnNlbmRQb2xsUmVxdWVzdChsb2NhdGlvbiwgaW5wdXRPcHRpb25zKSxcbiAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdCxcbiAgICB9KTtcbn1cbmV4cG9ydHMucG9sbEh0dHBPcGVyYXRpb24gPSBwb2xsSHR0cE9wZXJhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJ1aWxkQ3JlYXRlUG9sbGVyID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb24uanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBjcmVhdGVTdGF0ZVByb3h5ID0gKCkgPT4gKHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RhdGUgYXQgdGhpcyBwb2ludCBpcyBjcmVhdGVkIHRvIGJlIG9mIHR5cGUgT3BlcmF0aW9uU3RhdGU8VFJlc3VsdD4uXG4gICAgICogSXQgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIHRvIGJlIG9mIHR5cGUgVFN0YXRlIHdoZW4gdGhlXG4gICAgICogY3VzdG9tZXItcHJvdmlkZWQgY2FsbGJhY2ssIGB1cGRhdGVTdGF0ZWAsIGlzIGNhbGxlZCBkdXJpbmcgcG9sbGluZy5cbiAgICAgKi9cbiAgICBpbml0U3RhdGU6IChjb25maWcpID0+ICh7IHN0YXR1czogXCJydW5uaW5nXCIsIGNvbmZpZyB9KSxcbiAgICBzZXRDYW5jZWxlZDogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJjYW5jZWxlZFwiKSxcbiAgICBzZXRFcnJvcjogKHN0YXRlLCBlcnJvcikgPT4gKHN0YXRlLmVycm9yID0gZXJyb3IpLFxuICAgIHNldFJlc3VsdDogKHN0YXRlLCByZXN1bHQpID0+IChzdGF0ZS5yZXN1bHQgPSByZXN1bHQpLFxuICAgIHNldFJ1bm5pbmc6IChzdGF0ZSkgPT4gKHN0YXRlLnN0YXR1cyA9IFwicnVubmluZ1wiKSxcbiAgICBzZXRTdWNjZWVkZWQ6IChzdGF0ZSkgPT4gKHN0YXRlLnN0YXR1cyA9IFwic3VjY2VlZGVkXCIpLFxuICAgIHNldEZhaWxlZDogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJmYWlsZWRcIiksXG4gICAgZ2V0RXJyb3I6IChzdGF0ZSkgPT4gc3RhdGUuZXJyb3IsXG4gICAgZ2V0UmVzdWx0OiAoc3RhdGUpID0+IHN0YXRlLnJlc3VsdCxcbiAgICBpc0NhbmNlbGVkOiAoc3RhdGUpID0+IHN0YXRlLnN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiLFxuICAgIGlzRmFpbGVkOiAoc3RhdGUpID0+IHN0YXRlLnN0YXR1cyA9PT0gXCJmYWlsZWRcIixcbiAgICBpc1J1bm5pbmc6IChzdGF0ZSkgPT4gc3RhdGUuc3RhdHVzID09PSBcInJ1bm5pbmdcIixcbiAgICBpc1N1Y2NlZWRlZDogKHN0YXRlKSA9PiBzdGF0ZS5zdGF0dXMgPT09IFwic3VjY2VlZGVkXCIsXG59KTtcbi8qKlxuICogUmV0dXJucyBhIHBvbGxlciBmYWN0b3J5LlxuICovXG5mdW5jdGlvbiBidWlsZENyZWF0ZVBvbGxlcihpbnB1dHMpIHtcbiAgICBjb25zdCB7IGdldE9wZXJhdGlvbkxvY2F0aW9uLCBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLCBnZXRTdGF0dXNGcm9tUG9sbFJlc3BvbnNlLCBpc09wZXJhdGlvbkVycm9yLCBnZXRSZXNvdXJjZUxvY2F0aW9uLCBnZXRQb2xsaW5nSW50ZXJ2YWwsIGdldEVycm9yLCByZXNvbHZlT25VbnN1Y2Nlc3NmdWwsIH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuIGFzeW5jICh7IGluaXQsIHBvbGwgfSwgb3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB7IHByb2Nlc3NSZXN1bHQsIHVwZGF0ZVN0YXRlLCB3aXRoT3BlcmF0aW9uTG9jYXRpb246IHdpdGhPcGVyYXRpb25Mb2NhdGlvbkNhbGxiYWNrLCBpbnRlcnZhbEluTXMgPSBjb25zdGFudHNfanNfMS5QT0xMX0lOVEVSVkFMX0lOX01TLCByZXN0b3JlRnJvbSwgfSA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHN0YXRlUHJveHkgPSBjcmVhdGVTdGF0ZVByb3h5KCk7XG4gICAgICAgIGNvbnN0IHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9IHdpdGhPcGVyYXRpb25Mb2NhdGlvbkNhbGxiYWNrXG4gICAgICAgICAgICA/ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiAob3BlcmF0aW9uTG9jYXRpb24sIGlzVXBkYXRlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVcGRhdGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2sob3BlcmF0aW9uTG9jYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghY2FsbGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2sob3BlcmF0aW9uTG9jYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSByZXN0b3JlRnJvbVxuICAgICAgICAgICAgPyAoMCwgb3BlcmF0aW9uX2pzXzEuZGVzZXJpYWxpemVTdGF0ZSkocmVzdG9yZUZyb20pXG4gICAgICAgICAgICA6IGF3YWl0ICgwLCBvcGVyYXRpb25fanNfMS5pbml0T3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgaW5pdCxcbiAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgIHByb2Nlc3NSZXN1bHQsXG4gICAgICAgICAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdHVzOiBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICAgICAgICBzZXRFcnJvckFzUmVzdWx0OiAhcmVzb2x2ZU9uVW5zdWNjZXNzZnVsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGxldCByZXN1bHRQcm9taXNlO1xuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBoYW5kbGVQcm9ncmVzc0V2ZW50cyA9IGFzeW5jICgpID0+IGhhbmRsZXJzLmZvckVhY2goKGgpID0+IGgoc3RhdGUpKTtcbiAgICAgICAgY29uc3QgY2FuY2VsRXJyTXNnID0gXCJPcGVyYXRpb24gd2FzIGNhbmNlbGVkXCI7XG4gICAgICAgIGxldCBjdXJyZW50UG9sbEludGVydmFsSW5NcyA9IGludGVydmFsSW5NcztcbiAgICAgICAgY29uc3QgcG9sbGVyID0ge1xuICAgICAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdGU6ICgpID0+IHN0YXRlLFxuICAgICAgICAgICAgZ2V0UmVzdWx0OiAoKSA9PiBzdGF0ZS5yZXN1bHQsXG4gICAgICAgICAgICBpc0RvbmU6ICgpID0+IFtcInN1Y2NlZWRlZFwiLCBcImZhaWxlZFwiLCBcImNhbmNlbGVkXCJdLmluY2x1ZGVzKHN0YXRlLnN0YXR1cyksXG4gICAgICAgICAgICBpc1N0b3BwZWQ6ICgpID0+IHJlc3VsdFByb21pc2UgPT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0b3BQb2xsaW5nOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgb25Qcm9ncmVzczogKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IFN5bWJvbCgpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGhhbmRsZXJzLmRlbGV0ZShzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwb2xsVW50aWxEb25lOiAocG9sbE9wdGlvbnMpID0+IChyZXN1bHRQcm9taXNlICE9PSBudWxsICYmIHJlc3VsdFByb21pc2UgIT09IHZvaWQgMCA/IHJlc3VsdFByb21pc2UgOiAocmVzdWx0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBhYm9ydFNpZ25hbDogaW5wdXRBYm9ydFNpZ25hbCB9ID0gcG9sbE9wdGlvbnMgfHwge307XG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGZ1dHVyZSB3ZSBjYW4gdXNlIEFib3J0U2lnbmFsLmFueSgpIGluc3RlYWRcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhYm9ydExpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dEFib3J0U2lnbmFsID09PSBudWxsIHx8IGlucHV0QWJvcnRTaWduYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0QWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRBYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBpbnB1dEFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dEFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydExpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcG9sbGVyLmlzRG9uZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwb2xsZXIucG9sbCh7IGFib3J0U2lnbmFsIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFwb2xsZXIuaXNEb25lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCAoMCwgY29yZV91dGlsXzEuZGVsYXkpKGN1cnJlbnRQb2xsSW50ZXJ2YWxJbk1zLCB7IGFib3J0U2lnbmFsIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBvbGxlci5wb2xsKHsgYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0QWJvcnRTaWduYWwgPT09IG51bGwgfHwgaW5wdXRBYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRBYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlT25VbnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvbGxlci5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvbGxlci5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihjYW5jZWxFcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0YXRlLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm5vdFN0YXJ0ZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2xsaW5nIGNvbXBsZXRlZCB3aXRob3V0IHN1Y2NlZWRpbmcgb3IgZmFpbGluZ2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSkpKSxcbiAgICAgICAgICAgIGFzeW5jIHBvbGwocG9sbE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZU9uVW5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb2xsZXIuaXNEb25lKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN1Y2NlZWRlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihjYW5jZWxFcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0YXRlLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBvcGVyYXRpb25fanNfMS5wb2xsT3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgICAgIHBvbGwsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgICAgICBnZXRPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXNPcGVyYXRpb25FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICBnZXRQb2xsaW5nSW50ZXJ2YWwsXG4gICAgICAgICAgICAgICAgICAgIGdldE9wZXJhdGlvblN0YXR1czogZ2V0U3RhdHVzRnJvbVBvbGxSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBwb2xsT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgc2V0RGVsYXk6IChwb2xsSW50ZXJ2YWxJbk1zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9sbEludGVydmFsSW5NcyA9IHBvbGxJbnRlcnZhbEluTXM7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQ6ICFyZXNvbHZlT25VbnN1Y2Nlc3NmdWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlUHJvZ3Jlc3NFdmVudHMoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNhbmNlbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbmNlbEVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcG9sbGVyO1xuICAgIH07XG59XG5leHBvcnRzLmJ1aWxkQ3JlYXRlUG9sbGVyID0gYnVpbGRDcmVhdGVQb2xsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb2xsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVIdHRwUG9sbGVyID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb24uanNcIik7XG5jb25zdCBwb2xsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9wb2xsZXIvcG9sbGVyLmpzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgcG9sbGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gcG9sbCBhIGxvbmctcnVubmluZyBvcGVyYXRpb24uXG4gKiBAcGFyYW0gbHJvIC0gRGVzY3JpcHRpb24gb2YgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIHBvbGxlclxuICogQHJldHVybnMgYW4gaW5pdGlhbGl6ZWQgcG9sbGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUh0dHBQb2xsZXIobHJvLCBvcHRpb25zKSB7XG4gICAgY29uc3QgeyByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBpbnRlcnZhbEluTXMsIHByb2Nlc3NSZXN1bHQsIHJlc3RvcmVGcm9tLCB1cGRhdGVTdGF0ZSwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLCByZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSBmYWxzZSwgfSA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuICgwLCBwb2xsZXJfanNfMS5idWlsZENyZWF0ZVBvbGxlcikoe1xuICAgICAgICBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlOiBvcGVyYXRpb25fanNfMS5nZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLFxuICAgICAgICBnZXRTdGF0dXNGcm9tUG9sbFJlc3BvbnNlOiBvcGVyYXRpb25fanNfMS5nZXRPcGVyYXRpb25TdGF0dXMsXG4gICAgICAgIGlzT3BlcmF0aW9uRXJyb3I6IG9wZXJhdGlvbl9qc18xLmlzT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgIGdldE9wZXJhdGlvbkxvY2F0aW9uOiBvcGVyYXRpb25fanNfMS5nZXRPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbjogb3BlcmF0aW9uX2pzXzEuZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgZ2V0UG9sbGluZ0ludGVydmFsOiBvcGVyYXRpb25fanNfMS5wYXJzZVJldHJ5QWZ0ZXIsXG4gICAgICAgIGdldEVycm9yOiBvcGVyYXRpb25fanNfMS5nZXRFcnJvckZyb21SZXNwb25zZSxcbiAgICAgICAgcmVzb2x2ZU9uVW5zdWNjZXNzZnVsLFxuICAgIH0pKHtcbiAgICAgICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBscm8uc2VuZEluaXRpYWxSZXF1ZXN0KCk7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSAoMCwgb3BlcmF0aW9uX2pzXzEuaW5mZXJMcm9Nb2RlKSh7XG4gICAgICAgICAgICAgICAgcmF3UmVzcG9uc2U6IHJlc3BvbnNlLnJhd1Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RQYXRoOiBscm8ucmVxdWVzdFBhdGgsXG4gICAgICAgICAgICAgICAgcmVxdWVzdE1ldGhvZDogbHJvLnJlcXVlc3RNZXRob2QsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oeyByZXNwb25zZSwgb3BlcmF0aW9uTG9jYXRpb246IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5vcGVyYXRpb25Mb2NhdGlvbiwgcmVzb3VyY2VMb2NhdGlvbjogY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLnJlc291cmNlTG9jYXRpb24gfSwgKChjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcubW9kZSkgPyB7IG1ldGFkYXRhOiB7IG1vZGU6IGNvbmZpZy5tb2RlIH0gfSA6IHt9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvbGw6IGxyby5zZW5kUG9sbFJlcXVlc3QsXG4gICAgfSwge1xuICAgICAgICBpbnRlcnZhbEluTXMsXG4gICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgcmVzdG9yZUZyb20sXG4gICAgICAgIHVwZGF0ZVN0YXRlLFxuICAgICAgICBwcm9jZXNzUmVzdWx0OiBwcm9jZXNzUmVzdWx0XG4gICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBzdGF0ZSkgPT4gcHJvY2Vzc1Jlc3VsdChmbGF0UmVzcG9uc2UsIHN0YXRlKVxuICAgICAgICAgICAgOiAoeyBmbGF0UmVzcG9uc2UgfSkgPT4gZmxhdFJlc3BvbnNlLFxuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGVIdHRwUG9sbGVyID0gY3JlYXRlSHR0cFBvbGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdlbmVyaWNQb2xsT3BlcmF0aW9uID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uX2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vaHR0cC9vcGVyYXRpb24uanNcIik7XG5jb25zdCBsb2dnZXJfanNfMSA9IHJlcXVpcmUoXCIuLi8uLi9sb2dnZXIuanNcIik7XG5jb25zdCBjcmVhdGVTdGF0ZVByb3h5ID0gKCkgPT4gKHtcbiAgICBpbml0U3RhdGU6IChjb25maWcpID0+ICh7IGNvbmZpZywgaXNTdGFydGVkOiB0cnVlIH0pLFxuICAgIHNldENhbmNlbGVkOiAoc3RhdGUpID0+IChzdGF0ZS5pc0NhbmNlbGxlZCA9IHRydWUpLFxuICAgIHNldEVycm9yOiAoc3RhdGUsIGVycm9yKSA9PiAoc3RhdGUuZXJyb3IgPSBlcnJvciksXG4gICAgc2V0UmVzdWx0OiAoc3RhdGUsIHJlc3VsdCkgPT4gKHN0YXRlLnJlc3VsdCA9IHJlc3VsdCksXG4gICAgc2V0UnVubmluZzogKHN0YXRlKSA9PiAoc3RhdGUuaXNTdGFydGVkID0gdHJ1ZSksXG4gICAgc2V0U3VjY2VlZGVkOiAoc3RhdGUpID0+IChzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWUpLFxuICAgIHNldEZhaWxlZDogKCkgPT4ge1xuICAgICAgICAvKiogZW1wdHkgYm9keSAqL1xuICAgIH0sXG4gICAgZ2V0RXJyb3I6IChzdGF0ZSkgPT4gc3RhdGUuZXJyb3IsXG4gICAgZ2V0UmVzdWx0OiAoc3RhdGUpID0+IHN0YXRlLnJlc3VsdCxcbiAgICBpc0NhbmNlbGVkOiAoc3RhdGUpID0+ICEhc3RhdGUuaXNDYW5jZWxsZWQsXG4gICAgaXNGYWlsZWQ6IChzdGF0ZSkgPT4gISFzdGF0ZS5lcnJvcixcbiAgICBpc1J1bm5pbmc6IChzdGF0ZSkgPT4gISFzdGF0ZS5pc1N0YXJ0ZWQsXG4gICAgaXNTdWNjZWVkZWQ6IChzdGF0ZSkgPT4gQm9vbGVhbihzdGF0ZS5pc0NvbXBsZXRlZCAmJiAhc3RhdGUuaXNDYW5jZWxsZWQgJiYgIXN0YXRlLmVycm9yKSxcbn0pO1xuY2xhc3MgR2VuZXJpY1BvbGxPcGVyYXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHN0YXRlLCBscm8sIHNldEVycm9yQXNSZXN1bHQsIGxyb1Jlc291cmNlTG9jYXRpb25Db25maWcsIHByb2Nlc3NSZXN1bHQsIHVwZGF0ZVN0YXRlLCBpc0RvbmUpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmxybyA9IGxybztcbiAgICAgICAgdGhpcy5zZXRFcnJvckFzUmVzdWx0ID0gc2V0RXJyb3JBc1Jlc3VsdDtcbiAgICAgICAgdGhpcy5scm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnID0gbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZztcbiAgICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0ID0gcHJvY2Vzc1Jlc3VsdDtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlO1xuICAgICAgICB0aGlzLmlzRG9uZSA9IGlzRG9uZTtcbiAgICB9XG4gICAgc2V0UG9sbGVyQ29uZmlnKHBvbGxlckNvbmZpZykge1xuICAgICAgICB0aGlzLnBvbGxlckNvbmZpZyA9IHBvbGxlckNvbmZpZztcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBzdGF0ZVByb3h5ID0gY3JlYXRlU3RhdGVQcm94eSgpO1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaXNTdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0YXRlKSwgKGF3YWl0ICgwLCBvcGVyYXRpb25fanNfMS5pbml0SHR0cE9wZXJhdGlvbikoe1xuICAgICAgICAgICAgICAgIGxybzogdGhpcy5scm8sXG4gICAgICAgICAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uQ29uZmlnOiB0aGlzLmxyb1Jlc291cmNlTG9jYXRpb25Db25maWcsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdDogdGhpcy5wcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQ6IHRoaXMuc2V0RXJyb3JBc1Jlc3VsdCxcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSB0aGlzLnVwZGF0ZVN0YXRlO1xuICAgICAgICBjb25zdCBpc0RvbmUgPSB0aGlzLmlzRG9uZTtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmlzQ29tcGxldGVkICYmIHRoaXMuc3RhdGUuZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLnBvbGxIdHRwT3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgbHJvOiB0aGlzLmxybyxcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgIHByb2Nlc3NSZXN1bHQ6IHRoaXMucHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZTogdXBkYXRlU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgPyAoc3RhdGUsIHsgcmF3UmVzcG9uc2UgfSkgPT4gdXBkYXRlU3RhdGUoc3RhdGUsIHJhd1Jlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBpc0RvbmU6IGlzRG9uZVxuICAgICAgICAgICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBzdGF0ZSkgPT4gaXNEb25lKGZsYXRSZXNwb25zZSwgc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2V0RGVsYXk6IChpbnRlcnZhbEluTXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb2xsZXJDb25maWcuaW50ZXJ2YWxJbk1zID0gaW50ZXJ2YWxJbk1zO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdDogdGhpcy5zZXRFcnJvckFzUmVzdWx0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcmVQcm9ncmVzcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgdGhpcy5zdGF0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci5lcnJvcihcImBjYW5jZWxPcGVyYXRpb25gIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBpdCB3YXNuJ3QgaW1wbGVtZW50ZWRcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIHRoZSBQb2xsZXIgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuR2VuZXJpY1BvbGxPcGVyYXRpb24gPSBHZW5lcmljUG9sbE9wZXJhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBvbGxlciA9IGV4cG9ydHMuUG9sbGVyQ2FuY2VsbGVkRXJyb3IgPSBleHBvcnRzLlBvbGxlclN0b3BwZWRFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogV2hlbiBhIHBvbGxlciBpcyBtYW51YWxseSBzdG9wcGVkIHRocm91Z2ggdGhlIGBzdG9wUG9sbGluZ2AgbWV0aG9kLFxuICogdGhlIHBvbGxlciB3aWxsIGJlIHJlamVjdGVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgdGhlIFBvbGxlclN0b3BwZWRFcnJvci5cbiAqL1xuY2xhc3MgUG9sbGVyU3RvcHBlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUG9sbGVyU3RvcHBlZEVycm9yXCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBQb2xsZXJTdG9wcGVkRXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlBvbGxlclN0b3BwZWRFcnJvciA9IFBvbGxlclN0b3BwZWRFcnJvcjtcbi8qKlxuICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNhbmNlbGxlZCwgdGhlIHBvbGxlciB3aWxsIGJlIHJlamVjdGVkIHdpdGggYW4gaW5zdGFuY2VcbiAqIG9mIHRoZSBQb2xsZXJDYW5jZWxsZWRFcnJvci5cbiAqL1xuY2xhc3MgUG9sbGVyQ2FuY2VsbGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJQb2xsZXJDYW5jZWxsZWRFcnJvclwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUG9sbGVyQ2FuY2VsbGVkRXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlBvbGxlckNhbmNlbGxlZEVycm9yID0gUG9sbGVyQ2FuY2VsbGVkRXJyb3I7XG4vKipcbiAqIEEgY2xhc3MgdGhhdCByZXByZXNlbnRzIHRoZSBkZWZpbml0aW9uIG9mIGEgcHJvZ3JhbSB0aGF0IHBvbGxzIHRocm91Z2ggY29uc2VjdXRpdmUgcmVxdWVzdHNcbiAqIHVudGlsIGl0IHJlYWNoZXMgYSBzdGF0ZSBvZiBjb21wbGV0aW9uLlxuICpcbiAqIEEgcG9sbGVyIGNhbiBiZSBleGVjdXRlZCBtYW51YWxseSwgYnkgcG9sbGluZyByZXF1ZXN0IGJ5IHJlcXVlc3QgYnkgY2FsbGluZyB0byB0aGUgYHBvbGwoKWAgbWV0aG9kIHJlcGVhdGVkbHksIHVudGlsIGl0cyBvcGVyYXRpb24gaXMgY29tcGxldGVkLlxuICogSXQgYWxzbyBwcm92aWRlcyBhIHdheSB0byB3YWl0IHVudGlsIHRoZSBvcGVyYXRpb24gY29tcGxldGVzLCBieSBjYWxsaW5nIGBwb2xsVW50aWxEb25lKClgIGFuZCB3YWl0aW5nIHVudGlsIHRoZSBvcGVyYXRpb24gZmluaXNoZXMuXG4gKiBQb2xsZXJzIGNhbiBhbHNvIHJlcXVlc3QgdGhlIGNhbmNlbGxhdGlvbiBvZiB0aGUgb25nb2luZyBwcm9jZXNzIHRvIHdob20gaXMgcHJvdmlkaW5nIHRoZSB1bmRlcmx5aW5nIGxvbmcgcnVubmluZyBvcGVyYXRpb24uXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHBvbGxlciA9IG5ldyBNeVBvbGxlcigpO1xuICpcbiAqIC8vIFBvbGxpbmcganVzdCBvbmNlOlxuICogYXdhaXQgcG9sbGVyLnBvbGwoKTtcbiAqXG4gKiAvLyBXZSBjYW4gdHJ5IHRvIGNhbmNlbCB0aGUgcmVxdWVzdCBoZXJlLCBieSBjYWxsaW5nOlxuICogLy9cbiAqIC8vICAgICBhd2FpdCBwb2xsZXIuY2FuY2VsT3BlcmF0aW9uKCk7XG4gKiAvL1xuICpcbiAqIC8vIEdldHRpbmcgdGhlIGZpbmFsIHJlc3VsdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgUG9sbGVyIGlzIGRlZmluZWQgYnkgdHdvIHR5cGVzLCBhIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgcG9sbGVyLCB3aGljaFxuICogbXVzdCBpbmNsdWRlIGEgYmFzaWMgc2V0IG9mIHByb3BlcnRpZXMgZnJvbSBgUG9sbE9wZXJhdGlvblN0YXRlPFRSZXN1bHQ+YCxcbiAqIGFuZCBhIHJldHVybiB0eXBlIGRlZmluZWQgYnkgYFRSZXN1bHRgLCB3aGljaCBjYW4gYmUgYW55dGhpbmcuXG4gKlxuICogVGhlIFBvbGxlciBjbGFzcyBpbXBsZW1lbnRzIHRoZSBgUG9sbGVyTGlrZWAgaW50ZXJmYWNlLCB3aGljaCBhbGxvd3MgcG9sbGVyIGltcGxlbWVudGF0aW9ucyB0byBhdm9pZCBoYXZpbmdcbiAqIHRvIGV4cG9ydCB0aGUgUG9sbGVyJ3MgY2xhc3MgZGlyZWN0bHksIGFuZCBpbnN0ZWFkIG9ubHkgZXhwb3J0IHRoZSBhbHJlYWR5IGluc3RhbnRpYXRlZCBwb2xsZXIgd2l0aCB0aGUgUG9sbGVyTGlrZSB0eXBlLlxuICpcbiAqIGBgYHRzXG4gKiBjbGFzcyBDbGllbnQge1xuICogICBwdWJsaWMgYXN5bmMgbWFrZVBvbGxlcjogUG9sbGVyTGlrZTxNeU9wZXJhdGlvblN0YXRlLCBNeVJlc3VsdD4ge1xuICogICAgIGNvbnN0IHBvbGxlciA9IG5ldyBNeVBvbGxlcih7fSk7XG4gKiAgICAgLy8gSXQgbWlnaHQgYmUgcHJlZmVycmVkIHRvIHJldHVybiB0aGUgcG9sbGVyIGFmdGVyIHRoZSBmaXJzdCByZXF1ZXN0IGlzIG1hZGUsXG4gKiAgICAgLy8gc28gdGhhdCBzb21lIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCByaWdodCBhd2F5LlxuICogICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG4gKiAgICAgcmV0dXJuIHBvbGxlcjtcbiAqICAgfVxuICogfVxuICpcbiAqIGNvbnN0IHBvbGxlcjogUG9sbGVyTGlrZTxNeU9wZXJhdGlvblN0YXRlLCBNeVJlc3VsdD4gPSBteUNsaWVudC5tYWtlUG9sbGVyKCk7XG4gKiBgYGBcbiAqXG4gKiBBIHBvbGxlciBjYW4gYmUgY3JlYXRlZCB0aHJvdWdoIGl0cyBjb25zdHJ1Y3RvciwgdGhlbiBpdCBjYW4gYmUgcG9sbGVkIHVudGlsIGl0J3MgY29tcGxldGVkLlxuICogQXQgYW55IHBvaW50IGluIHRpbWUsIHRoZSBzdGF0ZSBvZiB0aGUgcG9sbGVyIGNhbiBiZSBvYnRhaW5lZCB3aXRob3V0IGRlbGF5IHRocm91Z2ggdGhlIGdldE9wZXJhdGlvblN0YXRlIG1ldGhvZC5cbiAqIEF0IGFueSBwb2ludCBpbiB0aW1lLCB0aGUgaW50ZXJtZWRpYXRlIGZvcm1zIG9mIHRoZSByZXN1bHQgdHlwZSBjYW4gYmUgcmVxdWVzdGVkIHdpdGhvdXQgZGVsYXkuXG4gKiBPbmNlIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBpcyBtYXJrZWQgYXMgY29tcGxldGVkLCB0aGUgcG9sbGVyIHdpbGwgc3RvcCBhbmQgdGhlIGZpbmFsIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHBvbGxlciA9IG15Q2xpZW50Lm1ha2VQb2xsZXIoKTtcbiAqIGNvbnN0IHN0YXRlOiBNeU9wZXJhdGlvblN0YXRlID0gcG9sbGVyLmdldE9wZXJhdGlvblN0YXRlKCk7XG4gKlxuICogLy8gVGhlIGludGVybWVkaWF0ZSByZXN1bHQgY2FuIGJlIG9idGFpbmVkIGF0IGFueSB0aW1lLlxuICogY29uc3QgcmVzdWx0OiBNeVJlc3VsdCB8IHVuZGVmaW5lZCA9IHBvbGxlci5nZXRSZXN1bHQoKTtcbiAqXG4gKiAvLyBUaGUgZmluYWwgcmVzdWx0IGNhbiBvbmx5IGJlIG9idGFpbmVkIGFmdGVyIHRoZSBwb2xsZXIgZmluaXNoZXMuXG4gKiBjb25zdCByZXN1bHQ6IE15UmVzdWx0ID0gYXdhaXQgcG9sbGVyLnBvbGxVbnRpbERvbmUoKTtcbiAqIGBgYFxuICpcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG5jbGFzcyBQb2xsZXIge1xuICAgIC8qKlxuICAgICAqIEEgcG9sbGVyIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGJ5IHBhc3NpbmcgaW4gYXQgbGVhc3QgdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgdGhlIGBQb2xsT3BlcmF0aW9uPFRTdGF0ZSwgVFJlc3VsdD5gLlxuICAgICAqXG4gICAgICogV2hlbiB3cml0aW5nIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgUG9sbGVyLCB0aGlzIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb25cbiAgICAgKiBvZiBhbnkgY3VzdG9tIHN0YXRlIGJleW9uZCB0aGUgYmFzaWMgZGVmaW5pdGlvbiBvZiB0aGUgcG9sbGVyLiBUaGUgYmFzaWMgcG9sbGVyIGFzc3VtZXMgdGhhdCB0aGUgcG9sbGVyJ3NcbiAgICAgKiBvcGVyYXRpb24gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLCBhdCBsZWFzdCBpdHMgYmFzaWMgcHJvcGVydGllcy4gVGhlIGNvZGUgYmVsb3cgc2hvd3MgaG93IHRvIGFwcHJvYWNoXG4gICAgICogdGhlIGRlZmluaXRpb24gb2YgdGhlIGNvbnN0cnVjdG9yIG9mIGEgbmV3IGN1c3RvbSBwb2xsZXIuXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGV4cG9ydCBjbGFzcyBNeVBvbGxlciBleHRlbmRzIFBvbGxlcjxNeU9wZXJhdGlvblN0YXRlLCBzdHJpbmc+IHtcbiAgICAgKiAgIGNvbnN0cnVjdG9yKHtcbiAgICAgKiAgICAgLy8gQW55dGhpbmcgeW91IG1pZ2h0IG5lZWQgb3V0c2lkZSBvZiB0aGUgYmFzaWNzXG4gICAgICogICB9KSB7XG4gICAgICogICAgIGxldCBzdGF0ZTogTXlPcGVyYXRpb25TdGF0ZSA9IHtcbiAgICAgKiAgICAgICBwcml2YXRlUHJvcGVydHk6IHByaXZhdGUsXG4gICAgICogICAgICAgcHVibGljUHJvcGVydHk6IHB1YmxpYyxcbiAgICAgKiAgICAgfTtcbiAgICAgKlxuICAgICAqICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICogICAgICAgc3RhdGUsXG4gICAgICogICAgICAgdXBkYXRlLFxuICAgICAqICAgICAgIGNhbmNlbCxcbiAgICAgKiAgICAgICB0b1N0cmluZ1xuICAgICAqICAgICB9XG4gICAgICpcbiAgICAgKiAgICAgLy8gU2VuZGluZyB0aGUgb3BlcmF0aW9uIHRvIHRoZSBwYXJlbnQncyBjb25zdHJ1Y3Rvci5cbiAgICAgKiAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgKlxuICAgICAqICAgICAvLyBZb3UgY2FuIGFzc2lnbiBtb3JlIGxvY2FsIHByb3BlcnRpZXMgaGVyZS5cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJbnNpZGUgb2YgdGhpcyBjb25zdHJ1Y3RvciwgYSBuZXcgcHJvbWlzZSBpcyBjcmVhdGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB0b1xuICAgICAqIHRlbGwgdGhlIHVzZXIgd2hlbiB0aGUgcG9sbGVyIGZpbmlzaGVzIChzZWUgYHBvbGxVbnRpbERvbmUoKWApLiBUaGUgcHJvbWlzZSdzXG4gICAgICogcmVzb2x2ZSBhbmQgcmVqZWN0IG1ldGhvZHMgYXJlIGFsc28gdXNlZCBpbnRlcm5hbGx5IHRvIGNvbnRyb2wgd2hlbiB0byByZXNvbHZlXG4gICAgICogb3IgcmVqZWN0IGFueW9uZSB3YWl0aW5nIGZvciB0aGUgcG9sbGVyIHRvIGZpbmlzaC5cbiAgICAgKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBvZiBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiBhIHBvbGxlciBpcyB3aGVyZSBhbnkgc2VyaWFsaXplZCB2ZXJzaW9uIG9mXG4gICAgICogYSBwcmV2aW91cyBwb2xsZXIncyBvcGVyYXRpb24gc2hvdWxkIGJlIGRlc2VyaWFsaXplZCBpbnRvIHRoZSBvcGVyYXRpb24gc2VudCB0byB0aGVcbiAgICAgKiBiYXNlIGNvbnN0cnVjdG9yLiBGb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZXhwb3J0IGNsYXNzIE15UG9sbGVyIGV4dGVuZHMgUG9sbGVyPE15T3BlcmF0aW9uU3RhdGUsIHN0cmluZz4ge1xuICAgICAqICAgY29uc3RydWN0b3IoXG4gICAgICogICAgIGJhc2VPcGVyYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICAqICAgKSB7XG4gICAgICogICAgIGxldCBzdGF0ZTogTXlPcGVyYXRpb25TdGF0ZSA9IHt9O1xuICAgICAqICAgICBpZiAoYmFzZU9wZXJhdGlvbikge1xuICAgICAqICAgICAgIHN0YXRlID0ge1xuICAgICAqICAgICAgICAgLi4uSlNPTi5wYXJzZShiYXNlT3BlcmF0aW9uKS5zdGF0ZSxcbiAgICAgKiAgICAgICAgIC4uLnN0YXRlXG4gICAgICogICAgICAgfTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICogICAgICAgc3RhdGUsXG4gICAgICogICAgICAgLy8gLi4uXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gTXVzdCBjb250YWluIHRoZSBiYXNpYyBwcm9wZXJ0aWVzIG9mIGBQb2xsT3BlcmF0aW9uPFN0YXRlLCBUUmVzdWx0PmAuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3BlcmF0aW9uKSB7XG4gICAgICAgIC8qKiBjb250cm9scyB3aGV0aGVyIHRvIHRocm93IGFuIGVycm9yIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkIG9yIHdhcyBjYW5jZWxlZC4gKi9cbiAgICAgICAgdGhpcy5yZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MgPSBbXTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIFVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25XYXJuaW5nIGluIG5vZGUuanMgZnJvbSBiZWluZyB0aHJvd24uXG4gICAgICAgIC8vIFRoZSBhYm92ZSB3YXJuaW5nIHdvdWxkIGdldCB0aHJvd24gaWYgYHBvbGxlci5wb2xsYCBpcyBjYWxsZWQsIGl0IHJldHVybnMgYW4gZXJyb3IsXG4gICAgICAgIC8vIGFuZCBwdWxsVW50aWxEb25lIGRpZCBub3QgaGF2ZSBhIC5jYXRjaCBvciBhd2FpdCB0cnkvY2F0Y2ggb24gaXQncyByZXR1cm4gdmFsdWUuXG4gICAgICAgIHRoaXMucHJvbWlzZS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAvKiBpbnRlbnRpb25hbGx5IGJsYW5rICovXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydHMgYSBsb29wIHRoYXQgd2lsbCBicmVhayBvbmx5IGlmIHRoZSBwb2xsZXIgaXMgZG9uZVxuICAgICAqIG9yIGlmIHRoZSBwb2xsZXIgaXMgc3RvcHBlZC5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFydFBvbGxpbmcocG9sbE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodGhpcy5zdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoIXRoaXMuaXNTdG9wcGVkKCkgJiYgIXRoaXMuaXNEb25lKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucG9sbChwb2xsT3B0aW9ucyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogcG9sbE9uY2UgZG9lcyBvbmUgcG9sbGluZywgYnkgY2FsbGluZyB0byB0aGUgdXBkYXRlIG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZ1xuICAgICAqIHBvbGwgb3BlcmF0aW9uIHRvIG1ha2UgYW55IHJlbGV2YW50IGNoYW5nZSBlZmZlY3RpdmUuXG4gICAgICpcbiAgICAgKiBJdCBvbmx5IG9wdGlvbmFsbHkgcmVjZWl2ZXMgYW4gb2JqZWN0IHdpdGggYW4gYWJvcnRTaWduYWwgcHJvcGVydHksIGZyb20gXFxAYXp1cmUvYWJvcnQtY29udHJvbGxlcidzIEFib3J0U2lnbmFsTGlrZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcHJvcGVydGllcyBwYXNzZWQgdG8gdGhlIG9wZXJhdGlvbidzIHVwZGF0ZSBtZXRob2QuXG4gICAgICovXG4gICAgYXN5bmMgcG9sbE9uY2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0RvbmUoKSkge1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBhd2FpdCB0aGlzLm9wZXJhdGlvbi51cGRhdGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGZpcmVQcm9ncmVzczogdGhpcy5maXJlUHJvZ3Jlc3MuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1VwZGF0ZWRTdGF0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaXJlUHJvZ3Jlc3MgY2FsbHMgdGhlIGZ1bmN0aW9ucyBwYXNzZWQgaW4gdmlhIG9uUHJvZ3Jlc3MgdGhlIG1ldGhvZCBvZiB0aGUgcG9sbGVyLlxuICAgICAqXG4gICAgICogSXQgbG9vcHMgb3ZlciBhbGwgb2YgdGhlIGNhbGxiYWNrcyByZWNlaXZlZCBmcm9tIG9uUHJvZ3Jlc3MsIGFuZCBleGVjdXRlcyB0aGVtLCBzZW5kaW5nIHRoZW1cbiAgICAgKiB0aGUgY3VycmVudCBvcGVyYXRpb24gc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUgY3VycmVudCBvcGVyYXRpb24gc3RhdGUuXG4gICAgICovXG4gICAgZmlyZVByb2dyZXNzKHN0YXRlKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbidzIGNhbmNlbCBtZXRob2QuXG4gICAgICovXG4gICAgYXN5bmMgY2FuY2VsT25jZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBhd2FpdCB0aGlzLm9wZXJhdGlvbi5jYW5jZWwob3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgYSBzaW5nbGUgcG9sbGluZyByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAqIEl0IGRvZXMgdGhpcyBieSBjYWxsaW5nIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBQb2xsZXIncyBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBJdCBvbmx5IG9wdGlvbmFsbHkgcmVjZWl2ZXMgYW4gb2JqZWN0IHdpdGggYW4gYWJvcnRTaWduYWwgcHJvcGVydHksIGZyb20gXFxAYXp1cmUvYWJvcnQtY29udHJvbGxlcidzIEFib3J0U2lnbmFsTGlrZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcHJvcGVydGllcyBwYXNzZWQgdG8gdGhlIG9wZXJhdGlvbidzIHVwZGF0ZSBtZXRob2QuXG4gICAgICovXG4gICAgcG9sbChvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvbGxPbmNlUHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5wb2xsT25jZVByb21pc2UgPSB0aGlzLnBvbGxPbmNlKG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgY2xlYXJQb2xsT25jZVByb21pc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb2xsT25jZVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5wb2xsT25jZVByb21pc2UudGhlbihjbGVhclBvbGxPbmNlUHJvbWlzZSwgY2xlYXJQb2xsT25jZVByb21pc2UpLmNhdGNoKHRoaXMucmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wb2xsT25jZVByb21pc2U7XG4gICAgfVxuICAgIHByb2Nlc3NVcGRhdGVkU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbi5zdGF0ZS5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZXNvbHZlT25VbnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdCh0aGlzLm9wZXJhdGlvbi5zdGF0ZS5lcnJvcik7XG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5vcGVyYXRpb24uc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uLnN0YXRlLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFBvbGxlckNhbmNlbGxlZEVycm9yKFwiT3BlcmF0aW9uIHdhcyBjYW5jZWxlZFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNEb25lKCkgJiYgdGhpcy5yZXNvbHZlKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgcG9sbGVyIGhhcyBmaW5pc2hlZCBwb2xsaW5nLCB0aGlzIG1lYW5zIHdlIG5vdyBoYXZlIGEgcmVzdWx0LlxuICAgICAgICAgICAgLy8gSG93ZXZlciwgaXQgY2FuIGJlIHRoZSBjYXNlIHRoYXQgVFJlc3VsdCBpcyBpbnN0YW50aWF0ZWQgdG8gdm9pZCwgc29cbiAgICAgICAgICAgIC8vIHdlIGFyZSBub3QgZXhwZWN0aW5nIGEgcmVzdWx0IGFueXdheS4gVG8gYXNzZXJ0IHRoYXQgd2UgbWlnaHQgbm90XG4gICAgICAgICAgICAvLyBoYXZlIGEgcmVzdWx0IGV2ZW50dWFsbHkgYWZ0ZXIgZmluaXNoaW5nIHBvbGxpbmcsIHdlIGNhc3QgdGhlIHJlc3VsdFxuICAgICAgICAgICAgLy8gdG8gVFJlc3VsdC5cbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmdldFJlc3VsdCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcG9sbFVudGlsRG9uZShwb2xsT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQb2xsaW5nKHBvbGxPcHRpb25zKS5jYXRjaCh0aGlzLnJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgc3RhdGUgY291bGQgaGF2ZSBiZWVuIHVwZGF0ZWQgYnlcbiAgICAgICAgLy8gYGNhbmNlbE9wZXJhdGlvbmAsIGUuZy4gdGhlIG9wZXJhdGlvbiBpcyBjYW5jZWxlZCBvciBhbiBlcnJvciBvY2N1cnJlZC5cbiAgICAgICAgdGhpcy5wcm9jZXNzVXBkYXRlZFN0YXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGFmdGVyIGVhY2ggcG9sbGluZyBpcyBjb21wbGV0ZWQsXG4gICAgICogc2VuZGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcG9sbGVyJ3Mgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogSXQgcmV0dXJucyBhIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0b3AgcmVjZWl2aW5nIHVwZGF0ZXMgb24gdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG9uUHJvZ3Jlc3MoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcyA9IHRoaXMucG9sbFByb2dyZXNzQ2FsbGJhY2tzLmZpbHRlcigoYykgPT4gYyAhPT0gY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvbGxlciBoYXMgZmluaXNoZWQgcG9sbGluZy5cbiAgICAgKi9cbiAgICBpc0RvbmUoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5vcGVyYXRpb24uc3RhdGU7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHN0YXRlLmlzQ29tcGxldGVkIHx8IHN0YXRlLmlzQ2FuY2VsbGVkIHx8IHN0YXRlLmVycm9yKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RvcHMgdGhlIHBvbGxlciBmcm9tIGNvbnRpbnVpbmcgdG8gcG9sbC5cbiAgICAgKi9cbiAgICBzdG9wUG9sbGluZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdChuZXcgUG9sbGVyU3RvcHBlZEVycm9yKFwiVGhpcyBwb2xsZXIgaXMgYWxyZWFkeSBzdG9wcGVkXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvbGxlciBpcyBzdG9wcGVkLlxuICAgICAqL1xuICAgIGlzU3RvcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcHBlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gY2FuY2VsIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEl0IG9ubHkgb3B0aW9uYWxseSByZWNlaXZlcyBhbiBvYmplY3Qgd2l0aCBhbiBhYm9ydFNpZ25hbCBwcm9wZXJ0eSwgZnJvbSBcXEBhenVyZS9hYm9ydC1jb250cm9sbGVyJ3MgQWJvcnRTaWduYWxMaWtlLlxuICAgICAqXG4gICAgICogSWYgaXQncyBjYWxsZWQgYWdhaW4gYmVmb3JlIGl0IGZpbmlzaGVzLCBpdCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW9uJ3MgdXBkYXRlIG1ldGhvZC5cbiAgICAgKi9cbiAgICBjYW5jZWxPcGVyYXRpb24ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFByb21pc2UgPSB0aGlzLmNhbmNlbE9uY2Uob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5hYm9ydFNpZ25hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjYW5jZWwgcmVxdWVzdCBpcyBjdXJyZW50bHkgcGVuZGluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jYW5jZWxQcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogRXZlbiB0aG91Z2ggVFN0YXRlIHdpbGwgYmUgdGhlIHNhbWUgdHlwZSBpbnNpZGUgYW55IG9mIHRoZSBtZXRob2RzIG9mIGFueSBleHRlbnNpb24gb2YgdGhlIFBvbGxlciBjbGFzcyxcbiAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIHBvbGxlcnMgY2FuIGN1c3RvbWl6ZSB3aGF0J3Mgc2hhcmVkIHdpdGggdGhlIHB1YmxpYyBieSB3cml0aW5nIHRoZWlyIG93blxuICAgICAqIHZlcnNpb24gb2YgdGhlIGBnZXRPcGVyYXRpb25TdGF0ZWAgbWV0aG9kLCBhbmQgYnkgZGVmaW5pbmcgdHdvIHR5cGVzLCBvbmUgcmVwcmVzZW50aW5nIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcG9sbGVyXG4gICAgICogYW5kIGEgcHVibGljIHR5cGUgcmVwcmVzZW50aW5nIGEgc2FmZSB0byBzaGFyZSBzdWJzZXQgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGludGVybmFsIHN0YXRlLlxuICAgICAqIFRoZWlyIGRlZmluaXRpb24gb2YgZ2V0T3BlcmF0aW9uU3RhdGUgY2FuIHRoZW4gcmV0dXJuIHRoZWlyIHB1YmxpYyB0eXBlLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogLy8gTGV0J3Mgc2F5IHdlIGhhdmUgb3VyIHBvbGxlcidzIG9wZXJhdGlvbiBzdGF0ZSBkZWZpbmVkIGFzOlxuICAgICAqIGludGVyZmFjZSBNeU9wZXJhdGlvblN0YXRlIGV4dGVuZHMgUG9sbE9wZXJhdGlvblN0YXRlPFJlc3VsdFR5cGU+IHtcbiAgICAgKiAgIHByaXZhdGVQcm9wZXJ0eT86IHN0cmluZztcbiAgICAgKiAgIHB1YmxpY1Byb3BlcnR5Pzogc3RyaW5nO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFRvIGFsbG93IHVzIHRvIGhhdmUgYSB0cnVlIHNlcGFyYXRpb24gb2YgcHVibGljIGFuZCBwcml2YXRlIHN0YXRlLCB3ZSBoYXZlIHRvIGRlZmluZSBhbm90aGVyIGludGVyZmFjZTpcbiAgICAgKiBpbnRlcmZhY2UgUHVibGljU3RhdGUgZXh0ZW5kcyBQb2xsT3BlcmF0aW9uU3RhdGU8UmVzdWx0VHlwZT4ge1xuICAgICAqICAgcHVibGljUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVGhlbiwgd2UgZGVmaW5lIG91ciBQb2xsZXIgYXMgZm9sbG93czpcbiAgICAgKiBleHBvcnQgY2xhc3MgTXlQb2xsZXIgZXh0ZW5kcyBQb2xsZXI8TXlPcGVyYXRpb25TdGF0ZSwgUmVzdWx0VHlwZT4ge1xuICAgICAqICAgLy8gLi4uIE1vcmUgY29udGVudCBpcyBuZWVkZWQgaGVyZSAuLi5cbiAgICAgKlxuICAgICAqICAgcHVibGljIGdldE9wZXJhdGlvblN0YXRlKCk6IFB1YmxpY1N0YXRlIHtcbiAgICAgKiAgICAgY29uc3Qgc3RhdGU6IFB1YmxpY1N0YXRlID0gdGhpcy5vcGVyYXRpb24uc3RhdGU7XG4gICAgICogICAgIHJldHVybiB7XG4gICAgICogICAgICAgLy8gUHJvcGVydGllcyBmcm9tIFBvbGxPcGVyYXRpb25TdGF0ZTxUUmVzdWx0PlxuICAgICAqICAgICAgIGlzU3RhcnRlZDogc3RhdGUuaXNTdGFydGVkLFxuICAgICAqICAgICAgIGlzQ29tcGxldGVkOiBzdGF0ZS5pc0NvbXBsZXRlZCxcbiAgICAgKiAgICAgICBpc0NhbmNlbGxlZDogc3RhdGUuaXNDYW5jZWxsZWQsXG4gICAgICogICAgICAgZXJyb3I6IHN0YXRlLmVycm9yLFxuICAgICAqICAgICAgIHJlc3VsdDogc3RhdGUucmVzdWx0LFxuICAgICAqXG4gICAgICogICAgICAgLy8gVGhlIG9ubHkgb3RoZXIgcHJvcGVydHkgbmVlZGVkIGJ5IFB1YmxpY1N0YXRlLlxuICAgICAqICAgICAgIHB1YmxpY1Byb3BlcnR5OiBzdGF0ZS5wdWJsaWNQcm9wZXJ0eVxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogWW91IGNhbiBzZWUgdGhpcyBpbiB0aGUgdGVzdHMgb2YgdGhpcyByZXBvc2l0b3J5LCBnbyB0byB0aGUgZmlsZTpcbiAgICAgKiBgLi4vdGVzdC91dGlscy90ZXN0UG9sbGVyLnRzYFxuICAgICAqIGFuZCBsb29rIGZvciB0aGUgZ2V0T3BlcmF0aW9uU3RhdGUgaW1wbGVtZW50YXRpb24uXG4gICAgICovXG4gICAgZ2V0T3BlcmF0aW9uU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVzdWx0IHZhbHVlIG9mIHRoZSBvcGVyYXRpb24sXG4gICAgICogcmVnYXJkbGVzcyBvZiB0aGUgc3RhdGUgb2YgdGhlIHBvbGxlci5cbiAgICAgKiBJdCBjYW4gcmV0dXJuIHVuZGVmaW5lZCBvciBhbiBpbmNvbXBsZXRlIGZvcm0gb2YgdGhlIGZpbmFsIFRSZXN1bHQgdmFsdWVcbiAgICAgKiBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLlxuICAgICAqL1xuICAgIGdldFJlc3VsdCgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHNlcmlhbGl6ZWQgdmVyc2lvbiBvZiB0aGUgcG9sbGVyJ3Mgb3BlcmF0aW9uXG4gICAgICogYnkgaW52b2tpbmcgdGhlIG9wZXJhdGlvbidzIHRvU3RyaW5nIG1ldGhvZC5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuZXhwb3J0cy5Qb2xsZXIgPSBQb2xsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb2xsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mcm9FbmdpbmUgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uLy4uL3BvbGxlci9jb25zdGFudHMuanNcIik7XG5jb25zdCBwb2xsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9wb2xsZXIuanNcIik7XG5jb25zdCBvcGVyYXRpb25fanNfMiA9IHJlcXVpcmUoXCIuLi8uLi9wb2xsZXIvb3BlcmF0aW9uLmpzXCIpO1xuLyoqXG4gKiBUaGUgTFJPIEVuZ2luZSwgYSBjbGFzcyB0aGF0IHBlcmZvcm1zIHBvbGxpbmcuXG4gKi9cbmNsYXNzIExyb0VuZ2luZSBleHRlbmRzIHBvbGxlcl9qc18xLlBvbGxlciB7XG4gICAgY29uc3RydWN0b3IobHJvLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgaW50ZXJ2YWxJbk1zID0gY29uc3RhbnRzX2pzXzEuUE9MTF9JTlRFUlZBTF9JTl9NUywgcmVzdW1lRnJvbSwgcmVzb2x2ZU9uVW5zdWNjZXNzZnVsID0gZmFsc2UsIGlzRG9uZSwgbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIH0gPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHJlc3VtZUZyb21cbiAgICAgICAgICAgID8gKDAsIG9wZXJhdGlvbl9qc18yLmRlc2VyaWFsaXplU3RhdGUpKHJlc3VtZUZyb20pXG4gICAgICAgICAgICA6IHt9O1xuICAgICAgICBjb25zdCBvcGVyYXRpb24gPSBuZXcgb3BlcmF0aW9uX2pzXzEuR2VuZXJpY1BvbGxPcGVyYXRpb24oc3RhdGUsIGxybywgIXJlc29sdmVPblVuc3VjY2Vzc2Z1bCwgbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIGlzRG9uZSk7XG4gICAgICAgIHN1cGVyKG9wZXJhdGlvbik7XG4gICAgICAgIHRoaXMucmVzb2x2ZU9uVW5zdWNjZXNzZnVsID0gcmVzb2x2ZU9uVW5zdWNjZXNzZnVsO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHsgaW50ZXJ2YWxJbk1zOiBpbnRlcnZhbEluTXMgfTtcbiAgICAgICAgb3BlcmF0aW9uLnNldFBvbGxlckNvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBtZXRob2QgdXNlZCBieSB0aGUgcG9sbGVyIHRvIHdhaXQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXBkYXRlIGl0cyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgZGVsYXkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIHRoaXMuY29uZmlnLmludGVydmFsSW5NcykpO1xuICAgIH1cbn1cbmV4cG9ydHMuTHJvRW5naW5lID0gTHJvRW5naW5lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bHJvRW5naW5lLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTHJvRW5naW5lID0gdm9pZCAwO1xudmFyIGxyb0VuZ2luZV9qc18xID0gcmVxdWlyZShcIi4vbHJvRW5naW5lLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTHJvRW5naW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBscm9FbmdpbmVfanNfMS5Mcm9FbmdpbmU7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb2xsT3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlSHR0cFBvbGxlciA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG52YXIgcG9sbGVyX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwL3BvbGxlci5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUh0dHBQb2xsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBvbGxlcl9qc18xLmNyZWF0ZUh0dHBQb2xsZXI7IH0gfSk7XG4vKipcbiAqIFRoaXMgY2FuIGJlIHVuY29tbWVudGVkIHRvIGV4cG9zZSB0aGUgcHJvdG9jb2wtYWdub3N0aWMgcG9sbGVyXG4gKi9cbi8vIGV4cG9ydCB7XG4vLyAgIEJ1aWxkQ3JlYXRlUG9sbGVyT3B0aW9ucyxcbi8vICAgT3BlcmF0aW9uLFxuLy8gICBDcmVhdGVQb2xsZXJPcHRpb25zLFxuLy8gICBPcGVyYXRpb25Db25maWcsXG4vLyAgIFJlc3RvcmFibGVPcGVyYXRpb25TdGF0ZSxcbi8vIH0gZnJvbSBcIi4vcG9sbGVyL21vZGVsc1wiO1xuLy8gZXhwb3J0IHsgYnVpbGRDcmVhdGVQb2xsZXIgfSBmcm9tIFwiLi9wb2xsZXIvcG9sbGVyXCI7XG4vKiogbGVnYWN5ICovXG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9sZWdhY3kvbHJvRW5naW5lL2luZGV4LmpzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xlZ2FjeS9wb2xsZXIuanNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGVnYWN5L3BvbGxPcGVyYXRpb24uanNcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBjb3JlUmVzdFBpcGVsaW5lID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZScpO1xudmFyIHRzbGliID0gcmVxdWlyZSgndHNsaWInKTtcbnZhciBjb3JlQXV0aCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWF1dGgnKTtcbnZhciBjb3JlVXRpbCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLXV0aWwnKTtcbnZhciBjb3JlSHR0cENvbXBhdCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWh0dHAtY29tcGF0Jyk7XG52YXIgY29yZUNsaWVudCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWNsaWVudCcpO1xudmFyIGNvcmVYbWwgPSByZXF1aXJlKCdAYXp1cmUvY29yZS14bWwnKTtcbnZhciBsb2dnZXIkMSA9IHJlcXVpcmUoJ0BhenVyZS9sb2dnZXInKTtcbnZhciBhYm9ydENvbnRyb2xsZXIgPSByZXF1aXJlKCdAYXp1cmUvYWJvcnQtY29udHJvbGxlcicpO1xudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xudmFyIGNvcmVUcmFjaW5nID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtdHJhY2luZycpO1xudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIGNvcmVMcm8gPSByZXF1aXJlKCdAYXp1cmUvY29yZS1scm8nKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKTtcblxuZnVuY3Rpb24gX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGUpIHtcbiAgICB2YXIgbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgaWYgKGUpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKGsgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgIHZhciBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCBrKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgaywgZC5nZXQgPyBkIDoge1xuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVba107IH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG4uZGVmYXVsdCA9IGU7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUobik7XG59XG5cbnZhciBjb3JlSHR0cENvbXBhdF9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChjb3JlSHR0cENvbXBhdCk7XG52YXIgY29yZUNsaWVudF9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChjb3JlQ2xpZW50KTtcbnZhciBmc19fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChmcyk7XG52YXIgdXRpbF9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdCh1dGlsKTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoZSBgQGF6dXJlL2xvZ2dlcmAgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYWNrYWdlLlxuICovXG5jb25zdCBsb2dnZXIgPSBsb2dnZXIkMS5jcmVhdGVDbGllbnRMb2dnZXIoXCJzdG9yYWdlLWJsb2JcIik7XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmcm9tIHdoaWNoIGFsbCByZXF1ZXN0IHBvbGljaWVzIGRlcml2ZS5cbiAqL1xuY2xhc3MgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIG1ldGhvZCB0byBpbXBsZW1lbnQgdGhhdCBtYW5pcHVsYXRlcyBhIHJlcXVlc3QvcmVzcG9uc2UuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgICogVGhlIG5leHQgcG9saWN5IGluIHRoZSBwaXBlbGluZS4gRWFjaCBwb2xpY3kgaXMgcmVzcG9uc2libGUgZm9yIGV4ZWN1dGluZyB0aGUgbmV4dCBvbmUgaWYgdGhlIHJlcXVlc3QgaXMgdG8gY29udGludWUgdGhyb3VnaCB0aGUgcGlwZWxpbmUuXG4gICAgICovXG4gICAgX25leHRQb2xpY3ksIFxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBhIGdpdmVuIHJlcXVlc3QgcG9saWN5LlxuICAgICAqL1xuICAgIF9vcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX25leHRQb2xpY3kgPSBfbmV4dFBvbGljeTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgYSBsb2cgd2l0aCB0aGUgcHJvdmlkZWQgbG9nIGxldmVsIHNob3VsZCBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIGxvZ0xldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGUgbG9nIHRoYXQgd2lsbCBiZSBsb2dnZWQuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgYSBsb2cgd2l0aCB0aGUgcHJvdmlkZWQgbG9nIGxldmVsIHNob3VsZCBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgc2hvdWxkTG9nKGxvZ0xldmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zLnNob3VsZExvZyhsb2dMZXZlbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF0dGVtcHQgdG8gbG9nIHRoZSBwcm92aWRlZCBtZXNzYWdlIHRvIHRoZSBwcm92aWRlZCBsb2dnZXIuIElmIG5vIGxvZ2dlciB3YXMgcHJvdmlkZWQgb3IgaWZcbiAgICAgKiB0aGUgbG9nIGxldmVsIGRvZXMgbm90IG1lYXQgdGhlIGxvZ2dlcidzIHRocmVzaG9sZCwgdGhlbiBub3RoaW5nIHdpbGwgYmUgbG9nZ2VkLlxuICAgICAqIEBwYXJhbSBsb2dMZXZlbCAtIFRoZSBsb2cgbGV2ZWwgb2YgdGhpcyBsb2cuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGlzIGxvZy5cbiAgICAgKi9cbiAgICBsb2cobG9nTGV2ZWwsIG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5sb2cobG9nTGV2ZWwsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBTREtfVkVSU0lPTiA9IFwiMTIuMjUuMFwiO1xuY29uc3QgU0VSVklDRV9WRVJTSU9OID0gXCIyMDI0LTExLTA0XCI7XG5jb25zdCBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFUyA9IDI1NiAqIDEwMjQgKiAxMDI0OyAvLyAyNTZNQlxuY29uc3QgQkxPQ0tfQkxPQl9NQVhfU1RBR0VfQkxPQ0tfQllURVMgPSA0MDAwICogMTAyNCAqIDEwMjQ7IC8vIDQwMDBNQlxuY29uc3QgQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTID0gNTAwMDA7XG5jb25zdCBERUZBVUxUX0JMT0NLX0JVRkZFUl9TSVpFX0JZVEVTID0gOCAqIDEwMjQgKiAxMDI0OyAvLyA4TUJcbmNvbnN0IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUyA9IDQgKiAxMDI0ICogMTAyNDsgLy8gNE1CXG5jb25zdCBERUZBVUxUX01BWF9ET1dOTE9BRF9SRVRSWV9SRVFVRVNUUyA9IDU7XG5jb25zdCBSRVFVRVNUX1RJTUVPVVQgPSAxMDAgKiAxMDAwOyAvLyBJbiBtc1xuLyoqXG4gKiBUaGUgT0F1dGggc2NvcGUgdG8gdXNlIHdpdGggQXp1cmUgU3RvcmFnZS5cbiAqL1xuY29uc3QgU3RvcmFnZU9BdXRoU2NvcGVzID0gXCJodHRwczovL3N0b3JhZ2UuYXp1cmUuY29tLy5kZWZhdWx0XCI7XG5jb25zdCBVUkxDb25zdGFudHMgPSB7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgICBGT1JDRV9CUk9XU0VSX05PX0NBQ0hFOiBcIl9cIixcbiAgICAgICAgU0lHTkFUVVJFOiBcInNpZ1wiLFxuICAgICAgICBTTkFQU0hPVDogXCJzbmFwc2hvdFwiLFxuICAgICAgICBWRVJTSU9OSUQ6IFwidmVyc2lvbmlkXCIsXG4gICAgICAgIFRJTUVPVVQ6IFwidGltZW91dFwiLFxuICAgIH0sXG59O1xuY29uc3QgSFRUUFVSTENvbm5lY3Rpb24gPSB7XG4gICAgSFRUUF9BQ0NFUFRFRDogMjAyLFxuICAgIEhUVFBfQ09ORkxJQ1Q6IDQwOSxcbiAgICBIVFRQX05PVF9GT1VORDogNDA0LFxuICAgIEhUVFBfUFJFQ09OX0ZBSUxFRDogNDEyLFxuICAgIEhUVFBfUkFOR0VfTk9UX1NBVElTRklBQkxFOiA0MTYsXG59O1xuY29uc3QgSGVhZGVyQ29uc3RhbnRzID0ge1xuICAgIEFVVEhPUklaQVRJT046IFwiQXV0aG9yaXphdGlvblwiLFxuICAgIEFVVEhPUklaQVRJT05fU0NIRU1FOiBcIkJlYXJlclwiLFxuICAgIENPTlRFTlRfRU5DT0RJTkc6IFwiQ29udGVudC1FbmNvZGluZ1wiLFxuICAgIENPTlRFTlRfSUQ6IFwiQ29udGVudC1JRFwiLFxuICAgIENPTlRFTlRfTEFOR1VBR0U6IFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgIENPTlRFTlRfTEVOR1RIOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgQ09OVEVOVF9NRDU6IFwiQ29udGVudC1NZDVcIixcbiAgICBDT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HOiBcIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdcIixcbiAgICBDT05URU5UX1RZUEU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgQ09PS0lFOiBcIkNvb2tpZVwiLFxuICAgIERBVEU6IFwiZGF0ZVwiLFxuICAgIElGX01BVENIOiBcImlmLW1hdGNoXCIsXG4gICAgSUZfTU9ESUZJRURfU0lOQ0U6IFwiaWYtbW9kaWZpZWQtc2luY2VcIixcbiAgICBJRl9OT05FX01BVENIOiBcImlmLW5vbmUtbWF0Y2hcIixcbiAgICBJRl9VTk1PRElGSUVEX1NJTkNFOiBcImlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICBQUkVGSVhfRk9SX1NUT1JBR0U6IFwieC1tcy1cIixcbiAgICBSQU5HRTogXCJSYW5nZVwiLFxuICAgIFVTRVJfQUdFTlQ6IFwiVXNlci1BZ2VudFwiLFxuICAgIFhfTVNfQ0xJRU5UX1JFUVVFU1RfSUQ6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFhfTVNfQ09QWV9TT1VSQ0U6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgIFhfTVNfREFURTogXCJ4LW1zLWRhdGVcIixcbiAgICBYX01TX0VSUk9SX0NPREU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgWF9NU19WRVJTSU9OOiBcIngtbXMtdmVyc2lvblwiLFxuICAgIFhfTVNfQ29weVNvdXJjZUVycm9yQ29kZTogXCJ4LW1zLWNvcHktc291cmNlLWVycm9yLWNvZGVcIixcbn07XG5jb25zdCBFVGFnTm9uZSA9IFwiXCI7XG5jb25zdCBFVGFnQW55ID0gXCIqXCI7XG5jb25zdCBTSVpFXzFfTUIgPSAxICogMTAyNCAqIDEwMjQ7XG5jb25zdCBCQVRDSF9NQVhfUkVRVUVTVCA9IDI1NjtcbmNvbnN0IEJBVENIX01BWF9QQVlMT0FEX0lOX0JZVEVTID0gNCAqIFNJWkVfMV9NQjtcbmNvbnN0IEhUVFBfTElORV9FTkRJTkcgPSBcIlxcclxcblwiO1xuY29uc3QgSFRUUF9WRVJTSU9OXzFfMSA9IFwiSFRUUC8xLjFcIjtcbmNvbnN0IEVuY3J5cHRpb25BbGdvcml0aG1BRVMyNSA9IFwiQUVTMjU2XCI7XG5jb25zdCBEZXZlbG9wbWVudENvbm5lY3Rpb25TdHJpbmcgPSBgRGVmYXVsdEVuZHBvaW50c1Byb3RvY29sPWh0dHA7QWNjb3VudE5hbWU9ZGV2c3RvcmVhY2NvdW50MTtBY2NvdW50S2V5PUVieTh2ZE0wMnhOT2NxRmxxVXdKUExsbUV0bENEWEoxT1V6RlQ1MHVTUlo2SUZzdUZxMlVWRXJDejRJNnRxL0sxU1pGUFRPdHIvS0JIQmVrc29HTUd3PT07QmxvYkVuZHBvaW50PWh0dHA6Ly8xMjcuMC4wLjE6MTAwMDAvZGV2c3RvcmVhY2NvdW50MTtgO1xuY29uc3QgU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZEhlYWRlck5hbWVzID0gW1xuICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIsXG4gICAgXCJDYWNoZS1Db250cm9sXCIsXG4gICAgXCJDb250ZW50LUxlbmd0aFwiLFxuICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgXCJEYXRlXCIsXG4gICAgXCJSZXF1ZXN0LUlkXCIsXG4gICAgXCJ0cmFjZXBhcmVudFwiLFxuICAgIFwiVHJhbnNmZXItRW5jb2RpbmdcIixcbiAgICBcIlVzZXItQWdlbnRcIixcbiAgICBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtZGF0ZVwiLFxuICAgIFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtcmV0dXJuLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXZlcnNpb25cIixcbiAgICBcIkFjY2VwdC1SYW5nZXNcIixcbiAgICBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIixcbiAgICBcIkNvbnRlbnQtRW5jb2RpbmdcIixcbiAgICBcIkNvbnRlbnQtTGFuZ3VhZ2VcIixcbiAgICBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgXCJDb250ZW50LVJhbmdlXCIsXG4gICAgXCJFVGFnXCIsXG4gICAgXCJMYXN0LU1vZGlmaWVkXCIsXG4gICAgXCJTZXJ2ZXJcIixcbiAgICBcIlZhcnlcIixcbiAgICBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgIFwieC1tcy1jb3B5LWFjdGlvblwiLFxuICAgIFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgIFwieC1tcy1jb3B5LWlkXCIsXG4gICAgXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICBcIngtbXMtaGFzLWltbXV0YWJpbGl0eS1wb2xpY3lcIixcbiAgICBcIngtbXMtaGFzLWxlZ2FsLWhvbGRcIixcbiAgICBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgXCJ4LW1zLXJhbmdlXCIsXG4gICAgXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgIFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgXCJ4LW1zLXNuYXBzaG90XCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgIFwiSWYtTWF0Y2hcIixcbiAgICBcIklmLU1vZGlmaWVkLVNpbmNlXCIsXG4gICAgXCJJZi1Ob25lLU1hdGNoXCIsXG4gICAgXCJJZi1Vbm1vZGlmaWVkLVNpbmNlXCIsXG4gICAgXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgXCJ4LW1zLWFjY2Vzcy10aWVyLWNoYW5nZS10aW1lXCIsXG4gICAgXCJ4LW1zLWFjY2Vzcy10aWVyLWluZmVycmVkXCIsXG4gICAgXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgIFwieC1tcy1hcmNoaXZlLXN0YXR1c1wiLFxuICAgIFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICBcIngtbXMtYmxvYi1jYWNoZS1jb250cm9sXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgXCJ4LW1zLWJsb2ItY29uZGl0aW9uLWFwcGVuZHBvc1wiLFxuICAgIFwieC1tcy1ibG9iLWNvbmRpdGlvbi1tYXhzaXplXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LWxhbmd1YWdlXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtdHlwZVwiLFxuICAgIFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgXCJ4LW1zLWNvcHktZGVzdGluYXRpb24tc25hcHNob3RcIixcbiAgICBcIngtbXMtY3JlYXRpb24tdGltZVwiLFxuICAgIFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICBcIngtbXMtZGVsZXRlLXNuYXBzaG90c1wiLFxuICAgIFwieC1tcy1kZWxldGUtdHlwZS1wZXJtYW5lbnRcIixcbiAgICBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgXCJ4LW1zLWVuY3J5cHRpb24tYWxnb3JpdGhtXCIsXG4gICAgXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1lcVwiLFxuICAgIFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbGVcIixcbiAgICBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWx0XCIsXG4gICAgXCJ4LW1zLWluY3JlbWVudGFsLWNvcHlcIixcbiAgICBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgXCJ4LW1zLWxlYXNlLWJyZWFrLXBlcmlvZFwiLFxuICAgIFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgIFwieC1tcy1sZWFzZS1pZFwiLFxuICAgIFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgXCJ4LW1zLXBhZ2Utd3JpdGVcIixcbiAgICBcIngtbXMtcHJvcG9zZWQtbGVhc2UtaWRcIixcbiAgICBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1XCIsXG4gICAgXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgIFwieC1tcy1zZXF1ZW5jZS1udW1iZXItYWN0aW9uXCIsXG4gICAgXCJ4LW1zLXNrdS1uYW1lXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1jb250ZW50LW1kNVwiLFxuICAgIFwieC1tcy1zb3VyY2UtaWYtbWF0Y2hcIixcbiAgICBcIngtbXMtc291cmNlLWlmLW1vZGlmaWVkLXNpbmNlXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi1ub25lLW1hdGNoXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi11bm1vZGlmaWVkLXNpbmNlXCIsXG4gICAgXCJ4LW1zLXRhZy1jb3VudFwiLFxuICAgIFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICBcIngtbXMtY29weS1zb3VyY2UtZXJyb3ItY29kZVwiLFxuICAgIFwieC1tcy1jb3B5LXNvdXJjZS1zdGF0dXMtY29kZVwiLFxuICAgIFwieC1tcy1pZi10YWdzXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi10YWdzXCIsXG5dO1xuY29uc3QgU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IFtcbiAgICBcImNvbXBcIixcbiAgICBcIm1heHJlc3VsdHNcIixcbiAgICBcInJzY2NcIixcbiAgICBcInJzY2RcIixcbiAgICBcInJzY2VcIixcbiAgICBcInJzY2xcIixcbiAgICBcInJzY3RcIixcbiAgICBcInNlXCIsXG4gICAgXCJzaVwiLFxuICAgIFwic2lwXCIsXG4gICAgXCJzcFwiLFxuICAgIFwic3ByXCIsXG4gICAgXCJzclwiLFxuICAgIFwic3J0XCIsXG4gICAgXCJzc1wiLFxuICAgIFwic3RcIixcbiAgICBcInN2XCIsXG4gICAgXCJpbmNsdWRlXCIsXG4gICAgXCJtYXJrZXJcIixcbiAgICBcInByZWZpeFwiLFxuICAgIFwiY29weWlkXCIsXG4gICAgXCJyZXN0eXBlXCIsXG4gICAgXCJibG9ja2lkXCIsXG4gICAgXCJibG9ja2xpc3R0eXBlXCIsXG4gICAgXCJkZWxpbWl0ZXJcIixcbiAgICBcInByZXZzbmFwc2hvdFwiLFxuICAgIFwic2tlXCIsXG4gICAgXCJza29pZFwiLFxuICAgIFwic2tzXCIsXG4gICAgXCJza3RcIixcbiAgICBcInNrdGlkXCIsXG4gICAgXCJza3ZcIixcbiAgICBcInNuYXBzaG90XCIsXG5dO1xuY29uc3QgQmxvYlVzZXNDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25Nc2cgPSBcIkJsb2JVc2VzQ3VzdG9tZXJTcGVjaWZpZWRFbmNyeXB0aW9uXCI7XG5jb25zdCBCbG9iRG9lc05vdFVzZUN1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvbiA9IFwiQmxvYkRvZXNOb3RVc2VDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25cIjtcbi8vLyBMaXN0IG9mIHBvcnRzIHVzZWQgZm9yIHBhdGggc3R5bGUgYWRkcmVzc2luZy5cbi8vLyBQYXRoIHN0eWxlIGFkZHJlc3NpbmcgbWVhbnMgdGhhdCBzdG9yYWdlIGFjY291bnQgaXMgcHV0IGluIFVSSSdzIFBhdGggc2VnbWVudCBpbiBpbnN0ZWFkIG9mIGluIGhvc3QuXG5jb25zdCBQYXRoU3R5bGVQb3J0cyA9IFtcbiAgICBcIjEwMDAwXCIsXG4gICAgXCIxMDAwMVwiLFxuICAgIFwiMTAwMDJcIixcbiAgICBcIjEwMDAzXCIsXG4gICAgXCIxMDAwNFwiLFxuICAgIFwiMTAxMDBcIixcbiAgICBcIjEwMTAxXCIsXG4gICAgXCIxMDEwMlwiLFxuICAgIFwiMTAxMDNcIixcbiAgICBcIjEwMTA0XCIsXG4gICAgXCIxMTAwMFwiLFxuICAgIFwiMTEwMDFcIixcbiAgICBcIjExMDAyXCIsXG4gICAgXCIxMTAwM1wiLFxuICAgIFwiMTEwMDRcIixcbiAgICBcIjExMTAwXCIsXG4gICAgXCIxMTEwMVwiLFxuICAgIFwiMTExMDJcIixcbiAgICBcIjExMTAzXCIsXG4gICAgXCIxMTEwNFwiLFxuXTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFJlc2VydmVkIFVSTCBjaGFyYWN0ZXJzIG11c3QgYmUgcHJvcGVybHkgZXNjYXBlZCBmb3IgU3RvcmFnZSBzZXJ2aWNlcyBsaWtlIEJsb2Igb3IgRmlsZS5cbiAqXG4gKiAjIyBVUkwgZW5jb2RlIGFuZCBlc2NhcGUgc3RyYXRlZ3kgZm9yIEpTIFNES3NcbiAqXG4gKiBXaGVuIGN1c3RvbWVycyBwYXNzIGEgVVJMIHN0cmluZyBpbnRvIFh4eENsaWVudCBjbGFzc2VzIGNvbnN0cnVjdG9yLCB0aGUgVVJMIHN0cmluZyBtYXkgYWxyZWFkeSBiZSBVUkwgZW5jb2RlZCBvciBub3QuXG4gKiBCdXQgYmVmb3JlIHNlbmRpbmcgdG8gQXp1cmUgU3RvcmFnZSBzZXJ2ZXIsIHRoZSBVUkwgbXVzdCBiZSBlbmNvZGVkLiBIb3dldmVyLCBpdCdzIGhhcmQgZm9yIGEgU0RLIHRvIGd1ZXNzIHdoZXRoZXIgdGhlIFVSTFxuICogc3RyaW5nIGhhcyBiZWVuIGVuY29kZWQgb3Igbm90LiBXZSBoYXZlIDIgcG90ZW50aWFsIHN0cmF0ZWdpZXMsIGFuZCBjaG9zZSBzdHJhdGVneSB0d28gZm9yIHRoZSBYeHhDbGllbnQgY29uc3RydWN0b3JzLlxuICpcbiAqICMjIyBTdHJhdGVneSBPbmU6IEFzc3VtZSB0aGUgY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBub3QgZW5jb2RlZCwgYW5kIGFsd2F5cyBlbmNvZGUgVVJMIHN0cmluZyBpbiBTREsuXG4gKlxuICogVGhpcyBpcyB3aGF0IGxlZ2FjeSBWMiBTREsgZG9lcywgc2ltcGxlIGFuZCB3b3JrcyBmb3IgbW9zdCBvZiB0aGUgY2FzZXMuXG4gKiAtIFdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYjpcIixcbiAqICAgU0RLIHdpbGwgZW5jb2RlIGl0IHRvIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTNBXCIgYW5kIHNlbmQgdG8gc2VydmVyLiBBIGJsb2IgbmFtZWQgXCJiOlwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTNBXCIsXG4gKiAgIFNESyB3aWxsIGVuY29kZSBpdCB0byBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUyNTNBXCIgYW5kIHNlbmQgdG8gc2VydmVyLiBBIGJsb2IgbmFtZWQgXCJiJTNBXCIgd2lsbCBiZSBjcmVhdGVkLlxuICpcbiAqIEJ1dCB0aGlzIHN0cmF0ZWd5IHdpbGwgbWFrZSBpdCBub3QgcG9zc2libGUgdG8gY3JlYXRlIGEgYmxvYiB3aXRoIFwiP1wiIGluIGl0J3MgbmFtZS4gQmVjYXVzZSB3aGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXNcbiAqIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9ibG9iP25hbWVcIiwgdGhlIFwiP25hbWVcIiB3aWxsIGJlIHRyZWF0ZWQgYXMgVVJMIHBhcmFtdGVyIGluc3RlYWQgb2YgYmxvYiBuYW1lLlxuICogSWYgY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYmxvYiUzRm5hbWVcIiwgYSBibG9iIG5hbWVkIFwiYmxvYiUzRm5hbWVcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBWMiBTREsgZG9lc24ndCBoYXZlIHRoaXMgaXNzdWUgYmVjYXVzZSBpdCBkb2Vzbid0IGFsbG93IGN1c3RvbWVyIHBhc3MgaW4gYSBmdWxsIFVSTCwgaXQgYWNjZXB0cyBhIHNlcGFyYXRlIGJsb2IgbmFtZSBhbmQgZW5jb2RlVVJJQ29tcG9uZW50IGZvciBpdC5cbiAqIFdlIGNhbm5vdCBhY2NlcHQgYSBTREsgY2Fubm90IGNyZWF0ZSBhIGJsb2IgbmFtZSB3aXRoIFwiP1wiLiBTbyB3ZSBpbXBsZW1lbnQgc3RyYXRlZ3kgdHdvOlxuICpcbiAqICMjIyBTdHJhdGVneSBUd286IFNESyBkb2Vzbid0IGFzc3VtZSB0aGUgVVJMIGhhcyBiZWVuIGVuY29kZWQgb3Igbm90LiBJdCB3aWxsIGp1c3QgZXNjYXBlIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMuXG4gKlxuICogVGhpcyBpcyB3aGF0IFYxMCBCbG9iIEdvIFNESyBkb2VzLiBJdCBhY2NlcHRzIGEgVVJMIHR5cGUgaW4gR28sIGFuZCBjYWxsIHVybC5Fc2NhcGVkUGF0aCgpIHRvIGVzY2FwZSB0aGUgc3BlY2lhbCBjaGFycyB1bmVzY2FwZWQuXG4gKiAtIFdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYjpcIixcbiAqICAgU0RLIHdpbGwgZXNjYXBlIFwiOlwiIGxpa2UgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIiBhbmQgc2VuZCB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImI6XCIgd2lsbCBiZSBjcmVhdGVkLlxuICogLSBXaGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXMgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIixcbiAqICAgVGhlcmUgaXMgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzLCBzbyBzZW5kIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTNBXCIgdG8gc2VydmVyLiBBIGJsb2IgbmFtZWQgXCJiOlwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTI1M0FcIixcbiAqICAgVGhlcmUgaXMgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzLCBzbyBzZW5kIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTI1M0FcIiB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImIlM0FcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKlxuICogVGhpcyBzdHJhdGVneSBnaXZlcyB1cyBmbGV4aWJpbGl0eSB0byBjcmVhdGUgd2l0aCBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzLiBCdXQgXCIlXCIgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXJzLCBpZiB0aGUgVVJMIHN0cmluZ1xuICogaXMgbm90IGVuY29kZWQsIHRoZXJlIHNob3VsZG4ndCBhIFwiJVwiIGluIHRoZSBVUkwgc3RyaW5nLCBvdGhlcndpc2UgdGhlIFVSTCBpcyBub3QgYSB2YWxpZCBVUkwuXG4gKiBJZiBjdXN0b21lciBuZWVkcyB0byBjcmVhdGUgYSBibG9iIHdpdGggXCIlXCIgaW4gaXQncyBibG9iIG5hbWUsIHVzZSBcIiUyNVwiIGluc3RlYWQgb2YgXCIlXCIuIEp1c3QgbGlrZSBhYm92ZSAzcmQgc2FtcGxlLlxuICogQW5kIGZvbGxvd2luZyBVUkwgc3RyaW5ncyBhcmUgaW52YWxpZDpcbiAqIC0gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlXCJcbiAqIC0gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlMlwiXG4gKiAtIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJUdcIlxuICpcbiAqIEFub3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXIgaXMgXCI/XCIsIHVzZSBcIiUyRlwiIHRvIHJlcHJlc2VudCBhIGJsb2IgbmFtZSB3aXRoIFwiP1wiIGluIGEgVVJMIHN0cmluZy5cbiAqXG4gKiAjIyMgU3RyYXRlZ3kgZm9yIGNvbnRhaW5lck5hbWUsIGJsb2JOYW1lIG9yIG90aGVyIHNwZWNpZmljIFhYWE5hbWUgcGFyYW1ldGVycyBpbiBtZXRob2RzIHN1Y2ggYXMgYGNvbnRhaW5lckNsaWVudC5nZXRCbG9iQ2xpZW50KGJsb2JOYW1lKWBcbiAqXG4gKiBXZSB3aWxsIGFwcGx5IHN0cmF0ZWd5IG9uZSwgYW5kIGNhbGwgZW5jb2RlVVJJQ29tcG9uZW50IGZvciB0aGVzZSBwYXJhbWV0ZXJzIGxpa2UgYmxvYk5hbWUuIEJlY2F1c2Ugd2hhdCBjdXN0b21lcnMgcGFzc2VzIGluIGlzIGEgcGxhaW4gbmFtZSBpbnN0ZWFkIG9mIGEgVVJMLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL25hbWluZy1hbmQtcmVmZXJlbmNpbmctY29udGFpbmVycy0tYmxvYnMtLWFuZC1tZXRhZGF0YVxuICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1zaGFyZXMtLWRpcmVjdG9yaWVzLS1maWxlcy0tYW5kLW1ldGFkYXRhXG4gKlxuICogQHBhcmFtIHVybCAtXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVVSTFBhdGgodXJsKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBwYXRoID0gdXJsUGFyc2VkLnBhdGhuYW1lO1xuICAgIHBhdGggPSBwYXRoIHx8IFwiL1wiO1xuICAgIHBhdGggPSBlc2NhcGUocGF0aCk7XG4gICAgdXJsUGFyc2VkLnBhdGhuYW1lID0gcGF0aDtcbiAgICByZXR1cm4gdXJsUGFyc2VkLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiBnZXRQcm94eVVyaUZyb21EZXZDb25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcpIHtcbiAgICAvLyBEZXZlbG9wbWVudCBDb25uZWN0aW9uIFN0cmluZ1xuICAgIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3N0b3JhZ2UvY29tbW9uL3N0b3JhZ2UtY29uZmlndXJlLWNvbm5lY3Rpb24tc3RyaW5nI2Nvbm5lY3QtdG8tdGhlLWVtdWxhdG9yLWFjY291bnQtdXNpbmctdGhlLXdlbGwta25vd24tYWNjb3VudC1uYW1lLWFuZC1rZXlcbiAgICBsZXQgcHJveHlVcmkgPSBcIlwiO1xuICAgIGlmIChjb25uZWN0aW9uU3RyaW5nLnNlYXJjaChcIkRldmVsb3BtZW50U3RvcmFnZVByb3h5VXJpPVwiKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gQ09OTkVDVElPTl9TVFJJTkc9VXNlRGV2ZWxvcG1lbnRTdG9yYWdlPXRydWU7RGV2ZWxvcG1lbnRTdG9yYWdlUHJveHlVcmk9aHR0cDovL215UHJveHlVcmlcbiAgICAgICAgY29uc3QgbWF0Y2hDcmVkZW50aWFscyA9IGNvbm5lY3Rpb25TdHJpbmcuc3BsaXQoXCI7XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbWF0Y2hDcmVkZW50aWFscykge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQudHJpbSgpLnN0YXJ0c1dpdGgoXCJEZXZlbG9wbWVudFN0b3JhZ2VQcm94eVVyaT1cIikpIHtcbiAgICAgICAgICAgICAgICBwcm94eVVyaSA9IGVsZW1lbnQudHJpbSgpLm1hdGNoKFwiRGV2ZWxvcG1lbnRTdG9yYWdlUHJveHlVcmk9KC4qKVwiKVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJveHlVcmk7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBhcmd1bWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gY29ubmVjdGlvblN0cmluZy5zcGxpdChcIjtcIik7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChlbGVtZW50LnRyaW0oKS5zdGFydHNXaXRoKGFyZ3VtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudHJpbSgpLm1hdGNoKGFyZ3VtZW50ICsgXCI9KC4qKVwiKVsxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cbi8qKlxuICogRXh0cmFjdHMgdGhlIHBhcnRzIG9mIGFuIEF6dXJlIFN0b3JhZ2UgYWNjb3VudCBjb25uZWN0aW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gY29ubmVjdGlvblN0cmluZyAtIENvbm5lY3Rpb24gc3RyaW5nLlxuICogQHJldHVybnMgU3RyaW5nIGtleSB2YWx1ZSBwYWlycyBvZiB0aGUgc3RvcmFnZSBhY2NvdW50J3MgdXJsIGFuZCBjcmVkZW50aWFscy5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyhjb25uZWN0aW9uU3RyaW5nKSB7XG4gICAgbGV0IHByb3h5VXJpID0gXCJcIjtcbiAgICBpZiAoY29ubmVjdGlvblN0cmluZy5zdGFydHNXaXRoKFwiVXNlRGV2ZWxvcG1lbnRTdG9yYWdlPXRydWVcIikpIHtcbiAgICAgICAgLy8gRGV2ZWxvcG1lbnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgcHJveHlVcmkgPSBnZXRQcm94eVVyaUZyb21EZXZDb25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICBjb25uZWN0aW9uU3RyaW5nID0gRGV2ZWxvcG1lbnRDb25uZWN0aW9uU3RyaW5nO1xuICAgIH1cbiAgICAvLyBNYXRjaGluZyBCbG9iRW5kcG9pbnQgaW4gdGhlIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICBsZXQgYmxvYkVuZHBvaW50ID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJCbG9iRW5kcG9pbnRcIik7XG4gICAgLy8gU2xpY2luZyBvZmYgJy8nIGF0IHRoZSBlbmQgaWYgZXhpc3RzXG4gICAgLy8gKFRoZSBtZXRob2RzIHRoYXQgdXNlIGBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzYCBleHBlY3QgdGhlIHVybCB0byBub3QgaGF2ZSBgL2AgYXQgdGhlIGVuZClcbiAgICBibG9iRW5kcG9pbnQgPSBibG9iRW5kcG9pbnQuZW5kc1dpdGgoXCIvXCIpID8gYmxvYkVuZHBvaW50LnNsaWNlKDAsIC0xKSA6IGJsb2JFbmRwb2ludDtcbiAgICBpZiAoY29ubmVjdGlvblN0cmluZy5zZWFyY2goXCJEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2w9XCIpICE9PSAtMSAmJlxuICAgICAgICBjb25uZWN0aW9uU3RyaW5nLnNlYXJjaChcIkFjY291bnRLZXk9XCIpICE9PSAtMSkge1xuICAgICAgICAvLyBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nXG4gICAgICAgIGxldCBkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2wgPSBcIlwiO1xuICAgICAgICBsZXQgYWNjb3VudE5hbWUgPSBcIlwiO1xuICAgICAgICBsZXQgYWNjb3VudEtleSA9IEJ1ZmZlci5mcm9tKFwiYWNjb3VudEtleVwiLCBcImJhc2U2NFwiKTtcbiAgICAgICAgbGV0IGVuZHBvaW50U3VmZml4ID0gXCJcIjtcbiAgICAgICAgLy8gR2V0IGFjY291bnQgbmFtZSBhbmQga2V5XG4gICAgICAgIGFjY291bnROYW1lID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJBY2NvdW50TmFtZVwiKTtcbiAgICAgICAgYWNjb3VudEtleSA9IEJ1ZmZlci5mcm9tKGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFwiQWNjb3VudEtleVwiKSwgXCJiYXNlNjRcIik7XG4gICAgICAgIGlmICghYmxvYkVuZHBvaW50KSB7XG4gICAgICAgICAgICAvLyBCbG9iRW5kcG9pbnQgaXMgbm90IHByZXNlbnQgaW4gdGhlIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgICAgIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGAke2RlZmF1bHRFbmRwb2ludHNQcm90b2NvbH06Ly8ke2FjY291bnROYW1lfS5ibG9iLiR7ZW5kcG9pbnRTdWZmaXh9YFxuICAgICAgICAgICAgZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2xcIik7XG4gICAgICAgICAgICBjb25zdCBwcm90b2NvbCA9IGRlZmF1bHRFbmRwb2ludHNQcm90b2NvbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHByb3RvY29sICE9PSBcImh0dHBzXCIgJiYgcHJvdG9jb2wgIT09IFwiaHR0cFwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2wgaW4gdGhlIHByb3ZpZGVkIENvbm5lY3Rpb24gU3RyaW5nLiBFeHBlY3RpbmcgJ2h0dHBzJyBvciAnaHR0cCdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRwb2ludFN1ZmZpeCA9IGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFwiRW5kcG9pbnRTdWZmaXhcIik7XG4gICAgICAgICAgICBpZiAoIWVuZHBvaW50U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBFbmRwb2ludFN1ZmZpeCBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBibG9iRW5kcG9pbnQgPSBgJHtkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2x9Oi8vJHthY2NvdW50TmFtZX0uYmxvYi4ke2VuZHBvaW50U3VmZml4fWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhY2NvdW50TmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBBY2NvdW50TmFtZSBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWNjb3VudEtleS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQWNjb3VudEtleSBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6IFwiQWNjb3VudENvbm5TdHJpbmdcIixcbiAgICAgICAgICAgIHVybDogYmxvYkVuZHBvaW50LFxuICAgICAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgICAgICBhY2NvdW50S2V5LFxuICAgICAgICAgICAgcHJveHlVcmksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBTQVMgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgbGV0IGFjY291bnRTYXMgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIlNoYXJlZEFjY2Vzc1NpZ25hdHVyZVwiKTtcbiAgICAgICAgbGV0IGFjY291bnROYW1lID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJBY2NvdW50TmFtZVwiKTtcbiAgICAgICAgLy8gaWYgYWNjb3VudE5hbWUgaXMgZW1wdHksIHRyeSB0byByZWFkIGl0IGZyb20gQmxvYkVuZHBvaW50XG4gICAgICAgIGlmICghYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICAgIGFjY291bnROYW1lID0gZ2V0QWNjb3VudE5hbWVGcm9tVXJsKGJsb2JFbmRwb2ludCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFibG9iRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQmxvYkVuZHBvaW50IGluIHRoZSBwcm92aWRlZCBTQVMgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWFjY291bnRTYXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgU2hhcmVkQWNjZXNzU2lnbmF0dXJlIGluIHRoZSBwcm92aWRlZCBTQVMgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xpZW50IGNvbnN0cnVjdG9ycyBhc3N1bWUgYWNjb3VudFNhcyBkb2VzICpub3QqIHN0YXJ0IHdpdGggP1xuICAgICAgICBpZiAoYWNjb3VudFNhcy5zdGFydHNXaXRoKFwiP1wiKSkge1xuICAgICAgICAgICAgYWNjb3VudFNhcyA9IGFjY291bnRTYXMuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtpbmQ6IFwiU0FTQ29ublN0cmluZ1wiLCB1cmw6IGJsb2JFbmRwb2ludCwgYWNjb3VudE5hbWUsIGFjY291bnRTYXMgfTtcbiAgICB9XG59XG4vKipcbiAqIEludGVybmFsIGVzY2FwZSBtZXRob2QgaW1wbGVtZW50ZWQgU3RyYXRlZ3kgVHdvIG1lbnRpb25lZCBpbiBlc2NhcGVVUkwoKSBkZXNjcmlwdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZSh0ZXh0KSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KVxuICAgICAgICAucmVwbGFjZSgvJTJGL2csIFwiL1wiKSAvLyBEb24ndCBlc2NhcGUgZm9yIFwiL1wiXG4gICAgICAgIC5yZXBsYWNlKC8nL2csIFwiJTI3XCIpIC8vIEVzY2FwZSBmb3IgXCInXCJcbiAgICAgICAgLnJlcGxhY2UoL1xcKy9nLCBcIiUyMFwiKVxuICAgICAgICAucmVwbGFjZSgvJTI1L2csIFwiJVwiKTsgLy8gUmV2ZXJ0IGVuY29kZWQgXCIlXCJcbn1cbi8qKlxuICogQXBwZW5kIGEgc3RyaW5nIHRvIFVSTCBwYXRoLiBXaWxsIHJlbW92ZSBkdXBsaWNhdGVkIFwiL1wiIGluIGZyb250IG9mIHRoZSBzdHJpbmdcbiAqIHdoZW4gVVJMIHBhdGggZW5kcyB3aXRoIGEgXCIvXCIuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKiBAcGFyYW0gbmFtZSAtIFN0cmluZyB0byBiZSBhcHBlbmRlZCB0byBVUkxcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBhcHBlbmRUb1VSTFBhdGgodXJsLCBuYW1lKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBwYXRoID0gdXJsUGFyc2VkLnBhdGhuYW1lO1xuICAgIHBhdGggPSBwYXRoID8gKHBhdGguZW5kc1dpdGgoXCIvXCIpID8gYCR7cGF0aH0ke25hbWV9YCA6IGAke3BhdGh9LyR7bmFtZX1gKSA6IG5hbWU7XG4gICAgdXJsUGFyc2VkLnBhdGhuYW1lID0gcGF0aDtcbiAgICByZXR1cm4gdXJsUGFyc2VkLnRvU3RyaW5nKCk7XG59XG4vKipcbiAqIFNldCBVUkwgcGFyYW1ldGVyIG5hbWUgYW5kIHZhbHVlLiBJZiBuYW1lIGV4aXN0cyBpbiBVUkwgcGFyYW1ldGVycywgb2xkIHZhbHVlXG4gKiB3aWxsIGJlIHJlcGxhY2VkIGJ5IG5hbWUga2V5LiBJZiBub3QgcHJvdmlkZSB2YWx1ZSwgdGhlIHBhcmFtZXRlciB3aWxsIGJlIGRlbGV0ZWQuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKiBAcGFyYW0gbmFtZSAtIFBhcmFtZXRlciBuYW1lXG4gKiBAcGFyYW0gdmFsdWUgLSBQYXJhbWV0ZXIgdmFsdWVcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzZXRVUkxQYXJhbWV0ZXIodXJsLCBuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICBjb25zdCBlbmNvZGVkTmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcbiAgICBjb25zdCBlbmNvZGVkVmFsdWUgPSB2YWx1ZSA/IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgLy8gbXV0YXRpbmcgc2VhcmNoUGFyYW1zIHdpbGwgY2hhbmdlIHRoZSBlbmNvZGluZywgc28gd2UgaGF2ZSB0byBkbyB0aGlzIG91cnNlbHZlc1xuICAgIGNvbnN0IHNlYXJjaFN0cmluZyA9IHVybFBhcnNlZC5zZWFyY2ggPT09IFwiXCIgPyBcIj9cIiA6IHVybFBhcnNlZC5zZWFyY2g7XG4gICAgY29uc3Qgc2VhcmNoUGllY2VzID0gW107XG4gICAgZm9yIChjb25zdCBwYWlyIG9mIHNlYXJjaFN0cmluZy5zbGljZSgxKS5zcGxpdChcIiZcIikpIHtcbiAgICAgICAgaWYgKHBhaXIpIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXldID0gcGFpci5zcGxpdChcIj1cIiwgMik7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSBlbmNvZGVkTmFtZSkge1xuICAgICAgICAgICAgICAgIHNlYXJjaFBpZWNlcy5wdXNoKHBhaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGVkVmFsdWUpIHtcbiAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7ZW5jb2RlZE5hbWV9PSR7ZW5jb2RlZFZhbHVlfWApO1xuICAgIH1cbiAgICB1cmxQYXJzZWQuc2VhcmNoID0gc2VhcmNoUGllY2VzLmxlbmd0aCA/IGA/JHtzZWFyY2hQaWVjZXMuam9pbihcIiZcIil9YCA6IFwiXCI7XG4gICAgcmV0dXJuIHVybFBhcnNlZC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBHZXQgVVJMIHBhcmFtZXRlciBieSBuYW1lLlxuICpcbiAqIEBwYXJhbSB1cmwgLVxuICogQHBhcmFtIG5hbWUgLVxuICovXG5mdW5jdGlvbiBnZXRVUkxQYXJhbWV0ZXIodXJsLCBuYW1lKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICByZXR1cm4gKF9hID0gdXJsUGFyc2VkLnNlYXJjaFBhcmFtcy5nZXQobmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogU2V0IFVSTCBob3N0LlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZ1xuICogQHBhcmFtIGhvc3QgLSBOZXcgaG9zdCBzdHJpbmdcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzZXRVUkxIb3N0KHVybCwgaG9zdCkge1xuICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICB1cmxQYXJzZWQuaG9zdG5hbWUgPSBob3N0O1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogR2V0IFVSTCBwYXRoIGZyb20gYW4gVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0VVJMUGF0aCh1cmwpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIHJldHVybiB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBHZXQgVVJMIHNjaGVtZSBmcm9tIGFuIFVSTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFVSTFNjaGVtZSh1cmwpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIHJldHVybiB1cmxQYXJzZWQucHJvdG9jb2wuZW5kc1dpdGgoXCI6XCIpID8gdXJsUGFyc2VkLnByb3RvY29sLnNsaWNlKDAsIC0xKSA6IHVybFBhcnNlZC5wcm90b2NvbDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIEdldCBVUkwgcGF0aCBhbmQgcXVlcnkgZnJvbSBhbiBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRVUkxQYXRoQW5kUXVlcnkodXJsKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGNvbnN0IHBhdGhTdHJpbmcgPSB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgaWYgKCFwYXRoU3RyaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB1cmwgd2l0aG91dCB2YWxpZCBwYXRoLlwiKTtcbiAgICB9XG4gICAgbGV0IHF1ZXJ5U3RyaW5nID0gdXJsUGFyc2VkLnNlYXJjaCB8fCBcIlwiO1xuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcudHJpbSgpO1xuICAgIGlmIChxdWVyeVN0cmluZyAhPT0gXCJcIikge1xuICAgICAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnN0YXJ0c1dpdGgoXCI/XCIpID8gcXVlcnlTdHJpbmcgOiBgPyR7cXVlcnlTdHJpbmd9YDsgLy8gRW5zdXJlIHF1ZXJ5IHN0cmluZyBzdGFydCB3aXRoICc/J1xuICAgIH1cbiAgICByZXR1cm4gYCR7cGF0aFN0cmluZ30ke3F1ZXJ5U3RyaW5nfWA7XG59XG4vKipcbiAqIEdldCBVUkwgcXVlcnkga2V5IHZhbHVlIHBhaXJzIGZyb20gYW4gVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdXJsIC1cbiAqL1xuZnVuY3Rpb24gZ2V0VVJMUXVlcmllcyh1cmwpIHtcbiAgICBsZXQgcXVlcnlTdHJpbmcgPSBuZXcgVVJMKHVybCkuc2VhcmNoO1xuICAgIGlmICghcXVlcnlTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnRyaW0oKTtcbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnN0YXJ0c1dpdGgoXCI/XCIpID8gcXVlcnlTdHJpbmcuc3Vic3RyaW5nKDEpIDogcXVlcnlTdHJpbmc7XG4gICAgbGV0IHF1ZXJ5U3ViU3RyaW5ncyA9IHF1ZXJ5U3RyaW5nLnNwbGl0KFwiJlwiKTtcbiAgICBxdWVyeVN1YlN0cmluZ3MgPSBxdWVyeVN1YlN0cmluZ3MuZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleE9mRXF1YWwgPSB2YWx1ZS5pbmRleE9mKFwiPVwiKTtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4T2ZFcXVhbCA9IHZhbHVlLmxhc3RJbmRleE9mKFwiPVwiKTtcbiAgICAgICAgcmV0dXJuIChpbmRleE9mRXF1YWwgPiAwICYmIGluZGV4T2ZFcXVhbCA9PT0gbGFzdEluZGV4T2ZFcXVhbCAmJiBsYXN0SW5kZXhPZkVxdWFsIDwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgfSk7XG4gICAgY29uc3QgcXVlcmllcyA9IHt9O1xuICAgIGZvciAoY29uc3QgcXVlcnlTdWJTdHJpbmcgb2YgcXVlcnlTdWJTdHJpbmdzKSB7XG4gICAgICAgIGNvbnN0IHNwbGl0UmVzdWx0cyA9IHF1ZXJ5U3ViU3RyaW5nLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgY29uc3Qga2V5ID0gc3BsaXRSZXN1bHRzWzBdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNwbGl0UmVzdWx0c1sxXTtcbiAgICAgICAgcXVlcmllc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBxdWVyaWVzO1xufVxuLyoqXG4gKiBBcHBlbmQgYSBzdHJpbmcgdG8gVVJMIHF1ZXJ5LlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZy5cbiAqIEBwYXJhbSBxdWVyeVBhcnRzIC0gU3RyaW5nIHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBVUkwgcXVlcnkuXG4gKiBAcmV0dXJucyBBbiB1cGRhdGVkIFVSTCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFRvVVJMUXVlcnkodXJsLCBxdWVyeVBhcnRzKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBxdWVyeSA9IHVybFBhcnNlZC5zZWFyY2g7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5ICs9IFwiJlwiICsgcXVlcnlQYXJ0cztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlQYXJ0cztcbiAgICB9XG4gICAgdXJsUGFyc2VkLnNlYXJjaCA9IHF1ZXJ5O1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogUm91bmRzIGEgZGF0ZSBvZmYgdG8gc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtXG4gKiBAcGFyYW0gd2l0aE1pbGxpc2Vjb25kcyAtIElmIHRydWUsIFlZWVktTU0tRERUaGg6bW06c3MuZmZmZmZmZlogd2lsbCBiZSByZXR1cm5lZDtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIFlZWVktTU0tRERUaGg6bW06c3NaIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBAcmV0dXJucyBEYXRlIHN0cmluZyBpbiBJU084MDYxIGZvcm1hdCwgd2l0aCBvciB3aXRob3V0IDcgbWlsbGlzZWNvbmRzIGNvbXBvbmVudFxuICovXG5mdW5jdGlvbiB0cnVuY2F0ZWRJU084MDYxRGF0ZShkYXRlLCB3aXRoTWlsbGlzZWNvbmRzID0gdHJ1ZSkge1xuICAgIC8vIERhdGUudG9JU09TdHJpbmcoKSB3aWxsIHJldHVybiBsaWtlIFwiMjAxOC0xMC0yOVQwNjozNDozNi4xMzlaXCJcbiAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgIHJldHVybiB3aXRoTWlsbGlzZWNvbmRzXG4gICAgICAgID8gZGF0ZVN0cmluZy5zdWJzdHJpbmcoMCwgZGF0ZVN0cmluZy5sZW5ndGggLSAxKSArIFwiMDAwMFwiICsgXCJaXCJcbiAgICAgICAgOiBkYXRlU3RyaW5nLnN1YnN0cmluZygwLCBkYXRlU3RyaW5nLmxlbmd0aCAtIDUpICsgXCJaXCI7XG59XG4vKipcbiAqIEJhc2U2NCBlbmNvZGUuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLVxuICovXG5mdW5jdGlvbiBiYXNlNjRlbmNvZGUoY29udGVudCkge1xuICAgIHJldHVybiAhY29yZVV0aWwuaXNOb2RlID8gYnRvYShjb250ZW50KSA6IEJ1ZmZlci5mcm9tKGNvbnRlbnQpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIDY0IGJ5dGVzIGJhc2U2NCBibG9jayBJRCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGJsb2NrSW5kZXggLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2NrSUQoYmxvY2tJRFByZWZpeCwgYmxvY2tJbmRleCkge1xuICAgIC8vIFRvIGdlbmVyYXRlIGEgNjQgYnl0ZXMgYmFzZTY0IHN0cmluZywgc291cmNlIHN0cmluZyBzaG91bGQgYmUgNDhcbiAgICBjb25zdCBtYXhTb3VyY2VTdHJpbmdMZW5ndGggPSA0ODtcbiAgICAvLyBBIGJsb2IgY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDEwMCwwMDAgdW5jb21taXR0ZWQgYmxvY2tzIGF0IGFueSBnaXZlbiB0aW1lXG4gICAgY29uc3QgbWF4QmxvY2tJbmRleExlbmd0aCA9IDY7XG4gICAgY29uc3QgbWF4QWxsb3dlZEJsb2NrSURQcmVmaXhMZW5ndGggPSBtYXhTb3VyY2VTdHJpbmdMZW5ndGggLSBtYXhCbG9ja0luZGV4TGVuZ3RoO1xuICAgIGlmIChibG9ja0lEUHJlZml4Lmxlbmd0aCA+IG1heEFsbG93ZWRCbG9ja0lEUHJlZml4TGVuZ3RoKSB7XG4gICAgICAgIGJsb2NrSURQcmVmaXggPSBibG9ja0lEUHJlZml4LnNsaWNlKDAsIG1heEFsbG93ZWRCbG9ja0lEUHJlZml4TGVuZ3RoKTtcbiAgICB9XG4gICAgY29uc3QgcmVzID0gYmxvY2tJRFByZWZpeCArXG4gICAgICAgIHBhZFN0YXJ0KGJsb2NrSW5kZXgudG9TdHJpbmcoKSwgbWF4U291cmNlU3RyaW5nTGVuZ3RoIC0gYmxvY2tJRFByZWZpeC5sZW5ndGgsIFwiMFwiKTtcbiAgICByZXR1cm4gYmFzZTY0ZW5jb2RlKHJlcyk7XG59XG4vKipcbiAqIERlbGF5IHNwZWNpZmllZCB0aW1lIGludGVydmFsLlxuICpcbiAqIEBwYXJhbSB0aW1lSW5NcyAtXG4gKiBAcGFyYW0gYWJvcnRlciAtXG4gKiBAcGFyYW0gYWJvcnRFcnJvciAtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlbGF5KHRpbWVJbk1zLCBhYm9ydGVyLCBhYm9ydEVycm9yKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCAqL1xuICAgICAgICBsZXQgdGltZW91dDtcbiAgICAgICAgY29uc3QgYWJvcnRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlamVjdChhYm9ydEVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWJvcnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYWJvcnRlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQocmVzb2x2ZUhhbmRsZXIsIHRpbWVJbk1zKTtcbiAgICAgICAgaWYgKGFib3J0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWJvcnRlci5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KClcbiAqXG4gKiBAcGFyYW0gY3VycmVudFN0cmluZyAtXG4gKiBAcGFyYW0gdGFyZ2V0TGVuZ3RoIC1cbiAqIEBwYXJhbSBwYWRTdHJpbmcgLVxuICovXG5mdW5jdGlvbiBwYWRTdGFydChjdXJyZW50U3RyaW5nLCB0YXJnZXRMZW5ndGgsIHBhZFN0cmluZyA9IFwiIFwiKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgZG9lc24ndCBrbm93IHRoaXMgY29kZSBuZWVkcyB0byBydW4gZG93bmxldmVsIHNvbWV0aW1lc1xuICAgIGlmIChTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyaW5nLnBhZFN0YXJ0KHRhcmdldExlbmd0aCwgcGFkU3RyaW5nKTtcbiAgICB9XG4gICAgcGFkU3RyaW5nID0gcGFkU3RyaW5nIHx8IFwiIFwiO1xuICAgIGlmIChjdXJyZW50U3RyaW5nLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgICByZXR1cm4gY3VycmVudFN0cmluZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGN1cnJlbnRTdHJpbmcubGVuZ3RoO1xuICAgICAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgY3VycmVudFN0cmluZztcbiAgICB9XG59XG4vKipcbiAqIElmIHR3byBzdHJpbmdzIGFyZSBlcXVhbCB3aGVuIGNvbXBhcmVkIGNhc2UgaW5zZW5zaXRpdmUuXG4gKlxuICogQHBhcmFtIHN0cjEgLVxuICogQHBhcmFtIHN0cjIgLVxuICovXG5mdW5jdGlvbiBpRXF1YWwoc3RyMSwgc3RyMikge1xuICAgIHJldHVybiBzdHIxLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHN0cjIudG9Mb2NhbGVMb3dlckNhc2UoKTtcbn1cbi8qKlxuICogRXh0cmFjdHMgYWNjb3VudCBuYW1lIGZyb20gdGhlIHVybFxuICogQHBhcmFtIHVybCAtIHVybCB0byBleHRyYWN0IHRoZSBhY2NvdW50IG5hbWUgZnJvbVxuICogQHJldHVybnMgd2l0aCB0aGUgYWNjb3VudCBuYW1lXG4gKi9cbmZ1bmN0aW9uIGdldEFjY291bnROYW1lRnJvbVVybCh1cmwpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IGFjY291bnROYW1lO1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChwYXJzZWRVcmwuaG9zdG5hbWUuc3BsaXQoXCIuXCIpWzFdID09PSBcImJsb2JcIikge1xuICAgICAgICAgICAgLy8gYCR7ZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sfTovLyR7YWNjb3VudE5hbWV9LmJsb2IuJHtlbmRwb2ludFN1ZmZpeH1gO1xuICAgICAgICAgICAgYWNjb3VudE5hbWUgPSBwYXJzZWRVcmwuaG9zdG5hbWUuc3BsaXQoXCIuXCIpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkpIHtcbiAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLi4uIEV4YW1wbGUgLSBodHRwOi8vMTkyLjAuMC4xMDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL1xuICAgICAgICAgICAgLy8gU2luZ2xlIHdvcmQgZG9tYWluIHdpdGhvdXQgYSBbZG90XSBpbiB0aGUgZW5kcG9pbnQuLi4gRXhhbXBsZSAtIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9cbiAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2RldnN0b3JlYWNjb3VudDEvXG4gICAgICAgICAgICBhY2NvdW50TmFtZSA9IHBhcnNlZFVybC5wYXRobmFtZS5zcGxpdChcIi9cIilbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBDdXN0b20gZG9tYWluIGNhc2U6IFwiaHR0cHM6Ly9jdXN0b21kb21haW4uY29tL2NvbnRhaW5lcm5hbWUvYmxvYlwiLlxuICAgICAgICAgICAgYWNjb3VudE5hbWUgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50TmFtZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBleHRyYWN0IGFjY291bnROYW1lIHdpdGggcHJvdmlkZWQgaW5mb3JtYXRpb24uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkge1xuICAgIGNvbnN0IGhvc3QgPSBwYXJzZWRVcmwuaG9zdDtcbiAgICAvLyBDYXNlIDE6IElwdjYsIHVzZSBhIGJyb2FkIHJlZ2V4IHRvIGZpbmQgb3V0IGNhbmRpZGF0ZXMgd2hvc2UgaG9zdCBjb250YWlucyB0d28gJzonLlxuICAgIC8vIENhc2UgMjogbG9jYWxob3N0KDpwb3J0KSBvciBob3N0LmRvY2tlci5pbnRlcm5hbCwgdXNlIGJyb2FkIHJlZ2V4IHRvIG1hdGNoIHBvcnQgcGFydC5cbiAgICAvLyBDYXNlIDM6IElwdjQsIHVzZSBicm9hZCByZWdleCB3aGljaCBqdXN0IGNoZWNrIGlmIGhvc3QgY29udGFpbnMgSXB2NC5cbiAgICAvLyBGb3IgdmFsaWQgaG9zdCBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9tYW43Lm9yZy9saW51eC9tYW4tcGFnZXMvbWFuNy9ob3N0bmFtZS43Lmh0bWwuXG4gICAgcmV0dXJuICgvXi4qOi4qOi4qJHxeKGxvY2FsaG9zdHxob3N0LmRvY2tlci5pbnRlcm5hbCkoOlswLTldKyk/JHxeKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKShcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKXszfSg6WzAtOV0rKT8kLy50ZXN0KGhvc3QpIHx8XG4gICAgICAgIChCb29sZWFuKHBhcnNlZFVybC5wb3J0KSAmJiBQYXRoU3R5bGVQb3J0cy5pbmNsdWRlcyhwYXJzZWRVcmwucG9ydCkpKTtcbn1cbi8qKlxuICogQ29udmVydCBUYWdzIHRvIGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB0YWdzIC1cbiAqL1xuZnVuY3Rpb24gdG9CbG9iVGFnc1N0cmluZyh0YWdzKSB7XG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB0YWdQYWlycyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRhZ3MpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YWdzLCBrZXkpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhZ3Nba2V5XTtcbiAgICAgICAgICAgIHRhZ1BhaXJzLnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFnUGFpcnMuam9pbihcIiZcIik7XG59XG4vKipcbiAqIENvbnZlcnQgVGFncyB0eXBlIHRvIEJsb2JUYWdzLlxuICpcbiAqIEBwYXJhbSB0YWdzIC1cbiAqL1xuZnVuY3Rpb24gdG9CbG9iVGFncyh0YWdzKSB7XG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSB7XG4gICAgICAgIGJsb2JUYWdTZXQ6IFtdLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGFncykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhZ3MsIGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFnc1trZXldO1xuICAgICAgICAgICAgcmVzLmJsb2JUYWdTZXQucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbi8qKlxuICogQ292ZXJ0IEJsb2JUYWdzIHRvIFRhZ3MgdHlwZS5cbiAqXG4gKiBAcGFyYW0gdGFncyAtXG4gKi9cbmZ1bmN0aW9uIHRvVGFncyh0YWdzKSB7XG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGJsb2JUYWcgb2YgdGFncy5ibG9iVGFnU2V0KSB7XG4gICAgICAgIHJlc1tibG9iVGFnLmtleV0gPSBibG9iVGFnLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLyoqXG4gKiBDb252ZXJ0IEJsb2JRdWVyeVRleHRDb25maWd1cmF0aW9uIHRvIFF1ZXJ5U2VyaWFsaXphdGlvbiB0eXBlLlxuICpcbiAqIEBwYXJhbSB0ZXh0Q29uZmlndXJhdGlvbiAtXG4gKi9cbmZ1bmN0aW9uIHRvUXVlcnlTZXJpYWxpemF0aW9uKHRleHRDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKHRleHRDb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3dpdGNoICh0ZXh0Q29uZmlndXJhdGlvbi5raW5kKSB7XG4gICAgICAgIGNhc2UgXCJjc3ZcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGVsaW1pdGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5TZXBhcmF0b3I6IHRleHRDb25maWd1cmF0aW9uLmNvbHVtblNlcGFyYXRvciB8fCBcIixcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkUXVvdGU6IHRleHRDb25maWd1cmF0aW9uLmZpZWxkUXVvdGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZFNlcGFyYXRvcjogdGV4dENvbmZpZ3VyYXRpb24ucmVjb3JkU2VwYXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlQ2hhcjogdGV4dENvbmZpZ3VyYXRpb24uZXNjYXBlQ2hhcmFjdGVyIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzUHJlc2VudDogdGV4dENvbmZpZ3VyYXRpb24uaGFzSGVhZGVycyB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwianNvblwiLFxuICAgICAgICAgICAgICAgICAgICBqc29uVGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZFNlcGFyYXRvcjogdGV4dENvbmZpZ3VyYXRpb24ucmVjb3JkU2VwYXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwiYXJyb3dcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHRleHRDb25maWd1cmF0aW9uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcInBhcnF1ZXRcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGFycXVldFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIEJsb2JRdWVyeVRleHRDb25maWd1cmF0aW9uLlwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZU9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKG9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgaWYgKCFvYmplY3RSZXBsaWNhdGlvblJlY29yZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoXCJwb2xpY3ktaWRcIiBpbiBvYmplY3RSZXBsaWNhdGlvblJlY29yZCkge1xuICAgICAgICAvLyBJZiB0aGUgZGljdGlvbmFyeSBjb250YWlucyBhIGtleSB3aXRoIHBvbGljeSBpZCwgd2UgYXJlIG5vdCByZXF1aXJlZCB0byBkbyBhbnkgcGFyc2luZyBzaW5jZVxuICAgICAgICAvLyB0aGUgcG9saWN5IGlkIHNob3VsZCBhbHJlYWR5IGJlIHN0b3JlZCBpbiB0aGUgT2JqZWN0UmVwbGljYXRpb25EZXN0aW5hdGlvblBvbGljeUlkLlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBvclByb3BlcnRpZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3RSZXBsaWNhdGlvblJlY29yZCkge1xuICAgICAgICBjb25zdCBpZHMgPSBrZXkuc3BsaXQoXCJfXCIpO1xuICAgICAgICBjb25zdCBwb2xpY3lQcmVmaXggPSBcIm9yLVwiO1xuICAgICAgICBpZiAoaWRzWzBdLnN0YXJ0c1dpdGgocG9saWN5UHJlZml4KSkge1xuICAgICAgICAgICAgaWRzWzBdID0gaWRzWzBdLnN1YnN0cmluZyhwb2xpY3lQcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICAgICAgcnVsZUlkOiBpZHNbMV0sXG4gICAgICAgICAgICByZXBsaWNhdGlvblN0YXR1czogb2JqZWN0UmVwbGljYXRpb25SZWNvcmRba2V5XSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcG9saWN5SW5kZXggPSBvclByb3BlcnRpZXMuZmluZEluZGV4KChwb2xpY3kpID0+IHBvbGljeS5wb2xpY3lJZCA9PT0gaWRzWzBdKTtcbiAgICAgICAgaWYgKHBvbGljeUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG9yUHJvcGVydGllc1twb2xpY3lJbmRleF0ucnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9yUHJvcGVydGllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwb2xpY3lJZDogaWRzWzBdLFxuICAgICAgICAgICAgICAgIHJ1bGVzOiBbcnVsZV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3JQcm9wZXJ0aWVzO1xufVxuZnVuY3Rpb24gaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhodHRwQXV0aG9yaXphdGlvbikge1xuICAgIHJldHVybiBodHRwQXV0aG9yaXphdGlvbiA/IGh0dHBBdXRob3JpemF0aW9uLnNjaGVtZSArIFwiIFwiICsgaHR0cEF1dGhvcml6YXRpb24udmFsdWUgOiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBCbG9iTmFtZVRvU3RyaW5nKG5hbWUpIHtcbiAgICBpZiAobmFtZS5lbmNvZGVkKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQobmFtZS5jb250ZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuYW1lLmNvbnRlbnQ7XG4gICAgfVxufVxuZnVuY3Rpb24gQ29udmVydEludGVybmFsUmVzcG9uc2VPZkxpc3RCbG9iRmxhdChpbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgaW50ZXJuYWxSZXNwb25zZSksIHsgc2VnbWVudDoge1xuICAgICAgICAgICAgYmxvYkl0ZW1zOiBpbnRlcm5hbFJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zLm1hcCgoYmxvYkl0ZW1JbnRlcmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYkl0ZW0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JJdGVtSW50ZXJhbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVyYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0gfSk7XG59XG5mdW5jdGlvbiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JIaWVyYXJjaHkoaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbnRlcm5hbFJlc3BvbnNlKSwgeyBzZWdtZW50OiB7XG4gICAgICAgICAgICBibG9iUHJlZml4ZXM6IChfYSA9IGludGVybmFsUmVzcG9uc2Uuc2VnbWVudC5ibG9iUHJlZml4ZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoKGJsb2JQcmVmaXhJbnRlcm5hbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JQcmVmaXggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JQcmVmaXhJbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iUHJlZml4SW50ZXJuYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JQcmVmaXg7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGJsb2JJdGVtczogaW50ZXJuYWxSZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcy5tYXAoKGJsb2JJdGVtSW50ZXJhbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JJdGVtID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iSXRlbUludGVyYWwpLCB7IG5hbWU6IEJsb2JOYW1lVG9TdHJpbmcoYmxvYkl0ZW1JbnRlcmFsLm5hbWUpIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBibG9iSXRlbTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9IH0pO1xufVxuZnVuY3Rpb24qIEV4dHJhY3RQYWdlUmFuZ2VJbmZvSXRlbXMoZ2V0UGFnZVJhbmdlc1NlZ21lbnQpIHtcbiAgICBsZXQgcGFnZVJhbmdlID0gW107XG4gICAgbGV0IGNsZWFyUmFuZ2UgPSBbXTtcbiAgICBpZiAoZ2V0UGFnZVJhbmdlc1NlZ21lbnQucGFnZVJhbmdlKVxuICAgICAgICBwYWdlUmFuZ2UgPSBnZXRQYWdlUmFuZ2VzU2VnbWVudC5wYWdlUmFuZ2U7XG4gICAgaWYgKGdldFBhZ2VSYW5nZXNTZWdtZW50LmNsZWFyUmFuZ2UpXG4gICAgICAgIGNsZWFyUmFuZ2UgPSBnZXRQYWdlUmFuZ2VzU2VnbWVudC5jbGVhclJhbmdlO1xuICAgIGxldCBwYWdlUmFuZ2VJbmRleCA9IDA7XG4gICAgbGV0IGNsZWFyUmFuZ2VJbmRleCA9IDA7XG4gICAgd2hpbGUgKHBhZ2VSYW5nZUluZGV4IDwgcGFnZVJhbmdlLmxlbmd0aCAmJiBjbGVhclJhbmdlSW5kZXggPCBjbGVhclJhbmdlLmxlbmd0aCkge1xuICAgICAgICBpZiAocGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5zdGFydCA8IGNsZWFyUmFuZ2VbY2xlYXJSYW5nZUluZGV4XS5zdGFydCkge1xuICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBwYWdlUmFuZ2VbcGFnZVJhbmdlSW5kZXhdLnN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZDogcGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5lbmQsXG4gICAgICAgICAgICAgICAgaXNDbGVhcjogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgKytwYWdlUmFuZ2VJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgICBzdGFydDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLnN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLmVuZCxcbiAgICAgICAgICAgICAgICBpc0NsZWFyOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICsrY2xlYXJSYW5nZUluZGV4O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoOyBwYWdlUmFuZ2VJbmRleCA8IHBhZ2VSYW5nZS5sZW5ndGg7ICsrcGFnZVJhbmdlSW5kZXgpIHtcbiAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgc3RhcnQ6IHBhZ2VSYW5nZVtwYWdlUmFuZ2VJbmRleF0uc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHBhZ2VSYW5nZVtwYWdlUmFuZ2VJbmRleF0uZW5kLFxuICAgICAgICAgICAgaXNDbGVhcjogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZvciAoOyBjbGVhclJhbmdlSW5kZXggPCBjbGVhclJhbmdlLmxlbmd0aDsgKytjbGVhclJhbmdlSW5kZXgpIHtcbiAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgc3RhcnQ6IGNsZWFyUmFuZ2VbY2xlYXJSYW5nZUluZGV4XS5zdGFydCxcbiAgICAgICAgICAgIGVuZDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLmVuZCxcbiAgICAgICAgICAgIGlzQ2xlYXI6IHRydWUsXG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqXG4gKiBFc2NhcGUgdGhlIGJsb2JOYW1lIGJ1dCBrZWVwIHBhdGggc2VwYXJhdG9yICgnLycpLlxuICovXG5mdW5jdGlvbiBFc2NhcGVQYXRoKGJsb2JOYW1lKSB7XG4gICAgY29uc3Qgc3BsaXQgPSBibG9iTmFtZS5zcGxpdChcIi9cIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBzcGxpdFtpXSA9IGVuY29kZVVSSUNvbXBvbmVudChzcGxpdFtpXSk7XG4gICAgfVxuICAgIHJldHVybiBzcGxpdC5qb2luKFwiL1wiKTtcbn1cbi8qKlxuICogQSB0eXBlc2FmZSBoZWxwZXIgZm9yIGVuc3VyaW5nIHRoYXQgYSBnaXZlbiByZXNwb25zZSBvYmplY3QgaGFzXG4gKiB0aGUgb3JpZ2luYWwgX3Jlc3BvbnNlIGF0dGFjaGVkLlxuICogQHBhcmFtIHJlc3BvbnNlIC0gQSByZXNwb25zZSBvYmplY3QgZnJvbSBjYWxsaW5nIGEgY2xpZW50IG9wZXJhdGlvblxuICogQHJldHVybnMgVGhlIHNhbWUgb2JqZWN0LCBidXQgd2l0aCBrbm93biBfcmVzcG9uc2UgcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICBpZiAoYF9yZXNwb25zZWAgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIHJlc3BvbnNlIG9iamVjdCAke3Jlc3BvbnNlfWApO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmV0cnlQb2xpY3kgdHlwZXMuXG4gKi9cbmV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZSA9IHZvaWQgMDtcbihmdW5jdGlvbiAoU3RvcmFnZVJldHJ5UG9saWN5VHlwZSkge1xuICAgIC8qKlxuICAgICAqIEV4cG9uZW50aWFsIHJldHJ5LiBSZXRyeSB0aW1lIGRlbGF5IGdyb3dzIGV4cG9uZW50aWFsbHkuXG4gICAgICovXG4gICAgU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1wiRVhQT05FTlRJQUxcIl0gPSAwXSA9IFwiRVhQT05FTlRJQUxcIjtcbiAgICAvKipcbiAgICAgKiBMaW5lYXIgcmV0cnkuIFJldHJ5IHRpbWUgZGVsYXkgZ3Jvd3MgbGluZWFybHkuXG4gICAgICovXG4gICAgU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1wiRklYRURcIl0gPSAxXSA9IFwiRklYRURcIjtcbn0pKGV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZSB8fCAoZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlID0ge30pKTtcbi8vIERlZmF1bHQgdmFsdWVzIG9mIFN0b3JhZ2VSZXRyeU9wdGlvbnNcbmNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxID0ge1xuICAgIG1heFJldHJ5RGVsYXlJbk1zOiAxMjAgKiAxMDAwLFxuICAgIG1heFRyaWVzOiA0LFxuICAgIHJldHJ5RGVsYXlJbk1zOiA0ICogMTAwMCxcbiAgICByZXRyeVBvbGljeVR5cGU6IGV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5FWFBPTkVOVElBTCxcbiAgICBzZWNvbmRhcnlIb3N0OiBcIlwiLFxuICAgIHRyeVRpbWVvdXRJbk1zOiB1bmRlZmluZWQsIC8vIFVzZSBzZXJ2ZXIgc2lkZSBkZWZhdWx0IHRpbWVvdXQgc3RyYXRlZ3lcbn07XG5jb25zdCBSRVRSWV9BQk9SVF9FUlJPUiQxID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4vKipcbiAqIFJldHJ5IHBvbGljeSB3aXRoIGV4cG9uZW50aWFsIHJldHJ5IGFuZCBsaW5lYXIgcmV0cnkgaW1wbGVtZW50ZWQuXG4gKi9cbmNsYXNzIFN0b3JhZ2VSZXRyeVBvbGljeSBleHRlbmRzIEJhc2VSZXF1ZXN0UG9saWN5IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJldHJ5UG9saWN5LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKiBAcGFyYW0gcmV0cnlPcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuZXh0UG9saWN5LCBvcHRpb25zLCByZXRyeU9wdGlvbnMgPSBERUZBVUxUX1JFVFJZX09QVElPTlMkMSkge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSByZXRyeSBvcHRpb25zXG4gICAgICAgIHRoaXMucmV0cnlPcHRpb25zID0ge1xuICAgICAgICAgICAgcmV0cnlQb2xpY3lUeXBlOiByZXRyeU9wdGlvbnMucmV0cnlQb2xpY3lUeXBlXG4gICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMucmV0cnlQb2xpY3lUeXBlXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5yZXRyeVBvbGljeVR5cGUsXG4gICAgICAgICAgICBtYXhUcmllczogcmV0cnlPcHRpb25zLm1heFRyaWVzICYmIHJldHJ5T3B0aW9ucy5tYXhUcmllcyA+PSAxXG4gICAgICAgICAgICAgICAgPyBNYXRoLmZsb29yKHJldHJ5T3B0aW9ucy5tYXhUcmllcylcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLm1heFRyaWVzLFxuICAgICAgICAgICAgdHJ5VGltZW91dEluTXM6IHJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5NcyAmJiByZXRyeU9wdGlvbnMudHJ5VGltZW91dEluTXMgPj0gMFxuICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLnRyeVRpbWVvdXRJbk1zXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS50cnlUaW1lb3V0SW5NcyxcbiAgICAgICAgICAgIHJldHJ5RGVsYXlJbk1zOiByZXRyeU9wdGlvbnMucmV0cnlEZWxheUluTXMgJiYgcmV0cnlPcHRpb25zLnJldHJ5RGVsYXlJbk1zID49IDBcbiAgICAgICAgICAgICAgICA/IE1hdGgubWluKHJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcywgcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zXG4gICAgICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zXG4gICAgICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEubWF4UmV0cnlEZWxheUluTXMpXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5yZXRyeURlbGF5SW5NcyxcbiAgICAgICAgICAgIG1heFJldHJ5RGVsYXlJbk1zOiByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMgJiYgcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zID49IDBcbiAgICAgICAgICAgICAgICA/IHJldHJ5T3B0aW9ucy5tYXhSZXRyeURlbGF5SW5Nc1xuICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEubWF4UmV0cnlEZWxheUluTXMsXG4gICAgICAgICAgICBzZWNvbmRhcnlIb3N0OiByZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdFxuICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLnNlY29uZGFyeUhvc3RcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnNlY29uZGFyeUhvc3QsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRlbXB0U2VuZFJlcXVlc3QocmVxdWVzdCwgZmFsc2UsIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNpZGUgYW5kIHBlcmZvcm0gbmV4dCByZXRyeS4gV29uJ3QgbXV0YXRlIHJlcXVlc3QgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqIEBwYXJhbSBzZWNvbmRhcnlIYXM0MDQgLSAgSWYgYXR0ZW1wdCB3YXMgYWdhaW5zdCB0aGUgc2Vjb25kYXJ5ICYgaXQgcmV0dXJuZWQgYSBTdGF0dXNOb3RGb3VuZCAoNDA0KSwgdGhlblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzb3VyY2Ugd2FzIG5vdCBmb3VuZC4gVGhpcyBtYXkgYmUgZHVlIHRvIHJlcGxpY2F0aW9uIGRlbGF5LiBTbywgaW4gdGhpc1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlLCB3ZSdsbCBuZXZlciB0cnkgdGhlIHNlY29uZGFyeSBhZ2FpbiBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIGF0dGVtcHQgLSAgICAgICAgICAgSG93IG1hbnkgcmV0cmllcyBoYXMgYmVlbiBhdHRlbXB0ZWQgdG8gcGVyZm9ybWVkLCBzdGFydGluZyBmcm9tIDEsIHdoaWNoIGluY2x1ZGVzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdHRlbXB0IHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHRoaXMgbWV0aG9kIGNhbGwuXG4gICAgICovXG4gICAgYXN5bmMgYXR0ZW1wdFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHNlY29uZGFyeUhhczQwNCwgYXR0ZW1wdCkge1xuICAgICAgICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSgpO1xuICAgICAgICBjb25zdCBpc1ByaW1hcnlSZXRyeSA9IHNlY29uZGFyeUhhczQwNCB8fFxuICAgICAgICAgICAgIXRoaXMucmV0cnlPcHRpb25zLnNlY29uZGFyeUhvc3QgfHxcbiAgICAgICAgICAgICEocmVxdWVzdC5tZXRob2QgPT09IFwiR0VUXCIgfHwgcmVxdWVzdC5tZXRob2QgPT09IFwiSEVBRFwiIHx8IHJlcXVlc3QubWV0aG9kID09PSBcIk9QVElPTlNcIikgfHxcbiAgICAgICAgICAgIGF0dGVtcHQgJSAyID09PSAxO1xuICAgICAgICBpZiAoIWlzUHJpbWFyeVJldHJ5KSB7XG4gICAgICAgICAgICBuZXdSZXF1ZXN0LnVybCA9IHNldFVSTEhvc3QobmV3UmVxdWVzdC51cmwsIHRoaXMucmV0cnlPcHRpb25zLnNlY29uZGFyeUhvc3QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgc2VydmVyLXNpZGUgdGltZW91dCBxdWVyeSBwYXJhbWV0ZXIgXCJ0aW1lb3V0PVtzZWNvbmRzXVwiXG4gICAgICAgIGlmICh0aGlzLnJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5Ncykge1xuICAgICAgICAgICAgbmV3UmVxdWVzdC51cmwgPSBzZXRVUkxQYXJhbWV0ZXIobmV3UmVxdWVzdC51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlRJTUVPVVQsIE1hdGguZmxvb3IodGhpcy5yZXRyeU9wdGlvbnMudHJ5VGltZW91dEluTXMgLyAxMDAwKS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6ID09PT09PiBUcnk9JHthdHRlbXB0fSAke2lzUHJpbWFyeVJldHJ5ID8gXCJQcmltYXJ5XCIgOiBcIlNlY29uZGFyeVwifWApO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9uZXh0UG9saWN5LnNlbmRSZXF1ZXN0KG5ld1JlcXVlc3QpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3VsZFJldHJ5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWNvbmRhcnlIYXM0MDQgPSBzZWNvbmRhcnlIYXM0MDQgfHwgKCFpc1ByaW1hcnlSZXRyeSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDQwNCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBSZXRyeVBvbGljeTogQ2F1Z2h0IGVycm9yLCBtZXNzYWdlOiAke2Vyci5tZXNzYWdlfSwgY29kZTogJHtlcnIuY29kZX1gKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRSZXRyeShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVzcG9uc2UsIGVycikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5kZWxheShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVxdWVzdC5hYm9ydFNpZ25hbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dGVtcHRTZW5kUmVxdWVzdChyZXF1ZXN0LCBzZWNvbmRhcnlIYXM0MDQsICsrYXR0ZW1wdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY2lkZSB3aGV0aGVyIHRvIHJldHJ5IGFjY29yZGluZyB0byBsYXN0IEhUVFAgcmVzcG9uc2UgYW5kIHJldHJ5IGNvdW50ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlzUHJpbWFyeVJldHJ5IC1cbiAgICAgKiBAcGFyYW0gYXR0ZW1wdCAtXG4gICAgICogQHBhcmFtIHJlc3BvbnNlIC1cbiAgICAgKiBAcGFyYW0gZXJyIC1cbiAgICAgKi9cbiAgICBzaG91bGRSZXRyeShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVzcG9uc2UsIGVycikge1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSB0aGlzLnJldHJ5T3B0aW9ucy5tYXhUcmllcykge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBBdHRlbXB0KHMpICR7YXR0ZW1wdH0gPj0gbWF4VHJpZXMgJHt0aGlzLnJldHJ5T3B0aW9uc1xuICAgICAgICAgICAgICAgIC5tYXhUcmllc30sIG5vIGZ1cnRoZXIgdHJ5LmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBuZXR3b3JrIGZhaWx1cmVzLCB5b3UgbWF5IG5lZWQgdG8gY3VzdG9taXplIHRoZSBsaXN0IHdoZW4geW91IGltcGxlbWVudFxuICAgICAgICAvLyB5b3VyIG93biBodHRwIGNsaWVudFxuICAgICAgICBjb25zdCByZXRyaWFibGVFcnJvcnMgPSBbXG4gICAgICAgICAgICBcIkVUSU1FRE9VVFwiLFxuICAgICAgICAgICAgXCJFU09DS0VUVElNRURPVVRcIixcbiAgICAgICAgICAgIFwiRUNPTk5SRUZVU0VEXCIsXG4gICAgICAgICAgICBcIkVDT05OUkVTRVRcIixcbiAgICAgICAgICAgIFwiRU5PRU5UXCIsXG4gICAgICAgICAgICBcIkVOT1RGT1VORFwiLFxuICAgICAgICAgICAgXCJUSU1FT1VUXCIsXG4gICAgICAgICAgICBcIkVQSVBFXCIsXG4gICAgICAgICAgICBcIlJFUVVFU1RfU0VORF9FUlJPUlwiLCAvLyBGb3IgZGVmYXVsdCB4aHIgYmFzZWQgaHR0cCBjbGllbnQgcHJvdmlkZWQgaW4gbXMtcmVzdC1qc1xuICAgICAgICBdO1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldHJpYWJsZUVycm9yIG9mIHJldHJpYWJsZUVycm9ycykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIubmFtZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZXJyLmNvZGUgJiYgZXJyLmNvZGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpID09PSByZXRyaWFibGVFcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBOZXR3b3JrIGVycm9yICR7cmV0cmlhYmxlRXJyb3J9IGZvdW5kLCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYXR0ZW1wdCB3YXMgYWdhaW5zdCB0aGUgc2Vjb25kYXJ5ICYgaXQgcmV0dXJuZWQgYSBTdGF0dXNOb3RGb3VuZCAoNDA0KSwgdGhlblxuICAgICAgICAvLyB0aGUgcmVzb3VyY2Ugd2FzIG5vdCBmb3VuZC4gVGhpcyBtYXkgYmUgZHVlIHRvIHJlcGxpY2F0aW9uIGRlbGF5LiBTbywgaW4gdGhpc1xuICAgICAgICAvLyBjYXNlLCB3ZSdsbCBuZXZlciB0cnkgdGhlIHNlY29uZGFyeSBhZ2FpbiBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICAgIGlmIChyZXNwb25zZSB8fCBlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IGVyciA/IGVyci5zdGF0dXNDb2RlIDogMDtcbiAgICAgICAgICAgIGlmICghaXNQcmltYXJ5UmV0cnkgJiYgc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBTZWNvbmRhcnkgYWNjZXNzIHdpdGggNDA0LCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2VydmVyIGludGVybmFsIGVycm9yIG9yIHNlcnZlciB0aW1lb3V0XG4gICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gNTAzIHx8IHN0YXR1c0NvZGUgPT09IDUwMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogV2lsbCByZXRyeSBmb3Igc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBbQ29weSBzb3VyY2UgZXJyb3IgY29kZV0gRmVhdHVyZSBpcyBwZW5kaW5nIG9uIHNlcnZpY2Ugc2lkZSwgc2tpcCByZXRyeSBvbiBjb3B5IHNvdXJjZSBlcnJvciBmb3Igbm93LlxuICAgICAgICAvLyBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy8gICAvLyBSZXRyeSBzZWxlY3QgQ29weSBTb3VyY2UgRXJyb3IgQ29kZXMuXG4gICAgICAgIC8vICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIC8vICAgICBjb25zdCBjb3B5U291cmNlRXJyb3IgPSByZXNwb25zZS5oZWFkZXJzLmdldChIZWFkZXJDb25zdGFudHMuWF9NU19Db3B5U291cmNlRXJyb3JDb2RlKTtcbiAgICAgICAgLy8gICAgIGlmIChjb3B5U291cmNlRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAgICAgICBzd2l0Y2ggKGNvcHlTb3VyY2VFcnJvcikge1xuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yXCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIk9wZXJhdGlvblRpbWVkT3V0XCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIlNlcnZlckJ1c3lcIjpcbiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIGlmICgoZXJyID09PSBudWxsIHx8IGVyciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyLmNvZGUpID09PSBcIlBBUlNFX0VSUk9SXCIgJiYgKGVyciA9PT0gbnVsbCB8fCBlcnIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoYEVycm9yIFwiRXJyb3I6IFVuY2xvc2VkIHJvb3QgdGFnYCkpKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhcIlJldHJ5UG9saWN5OiBJbmNvbXBsZXRlIFhNTCByZXNwb25zZSBsaWtlbHkgZHVlIHRvIHNlcnZpY2UgdGltZW91dCwgd2lsbCByZXRyeS5cIik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGF5IGEgY2FsY3VsYXRlZCB0aW1lIGJldHdlZW4gcmV0cmllcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc1ByaW1hcnlSZXRyeSAtXG4gICAgICogQHBhcmFtIGF0dGVtcHQgLVxuICAgICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtXG4gICAgICovXG4gICAgYXN5bmMgZGVsYXkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQsIGFib3J0U2lnbmFsKSB7XG4gICAgICAgIGxldCBkZWxheVRpbWVJbk1zID0gMDtcbiAgICAgICAgaWYgKGlzUHJpbWFyeVJldHJ5KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMucmV0cnlPcHRpb25zLnJldHJ5UG9saWN5VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMOlxuICAgICAgICAgICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gTWF0aC5taW4oKE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKSAtIDEpICogdGhpcy5yZXRyeU9wdGlvbnMucmV0cnlEZWxheUluTXMsIHRoaXMucmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBleHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeVR5cGUuRklYRUQ6XG4gICAgICAgICAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSB0aGlzLnJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gTWF0aC5yYW5kb20oKSAqIDEwMDA7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBEZWxheSBmb3IgJHtkZWxheVRpbWVJbk1zfW1zYCk7XG4gICAgICAgIHJldHVybiBkZWxheShkZWxheVRpbWVJbk1zLCBhYm9ydFNpZ25hbCwgUkVUUllfQUJPUlRfRVJST1IkMSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeSBpcyBhIGZhY3RvcnkgY2xhc3MgaGVscGluZyBnZW5lcmF0aW5nIHtAbGluayBTdG9yYWdlUmV0cnlQb2xpY3l9IG9iamVjdHMuXG4gKi9cbmNsYXNzIFN0b3JhZ2VSZXRyeVBvbGljeUZhY3Rvcnkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeS5cbiAgICAgKiBAcGFyYW0gcmV0cnlPcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihyZXRyeU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5yZXRyeU9wdGlvbnMgPSByZXRyeU9wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBTdG9yYWdlUmV0cnlQb2xpY3kgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjcmVhdGUobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VSZXRyeVBvbGljeShuZXh0UG9saWN5LCBvcHRpb25zLCB0aGlzLnJldHJ5T3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQ3JlZGVudGlhbCBwb2xpY3kgdXNlZCB0byBzaWduIEhUVFAoUykgcmVxdWVzdHMgYmVmb3JlIHNlbmRpbmcuIFRoaXMgaXMgYW5cbiAqIGFic3RyYWN0IGNsYXNzLlxuICovXG5jbGFzcyBDcmVkZW50aWFsUG9saWN5IGV4dGVuZHMgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIFNlbmRzIG91dCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25leHRQb2xpY3kuc2VuZFJlcXVlc3QodGhpcy5zaWduUmVxdWVzdChyZXF1ZXN0KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoaWxkIGNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2Qgd2l0aCByZXF1ZXN0IHNpZ25pbmcuIFRoaXMgbWV0aG9kXG4gICAgICogd2lsbCBiZSBleGVjdXRlZCBpbiB7QGxpbmsgc2VuZFJlcXVlc3R9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIHNpZ25SZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgLy8gQ2hpbGQgY2xhc3NlcyBtdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggcmVxdWVzdCBzaWduaW5nLiBUaGlzIG1ldGhvZFxuICAgICAgICAvLyB3aWxsIGJlIGV4ZWN1dGVkIGluIHNlbmRSZXF1ZXN0KCkuXG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKlxuICogV2UgbmVlZCB0byBpbWl0YXRlIC5OZXQgY3VsdHVyZS1hd2FyZSBzb3J0aW5nLCB3aGljaCBpcyB1c2VkIGluIHN0b3JhZ2Ugc2VydmljZS5cbiAqIEJlbG93IHRhYmxlcyBjb250YWluIHNvcnQta2V5cyBmb3IgZW4tVVMgY3VsdHVyZS5cbiAqL1xuY29uc3QgdGFibGVfbHYwID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4NzFjLCAweDAsIDB4NzFmLCAweDcyMSxcbiAgICAweDcyMywgMHg3MjUsIDB4MCwgMHgwLCAweDAsIDB4NzJkLCAweDgwMywgMHgwLCAweDAsIDB4NzMzLCAweDAsIDB4ZDAzLCAweGQxYSwgMHhkMWMsIDB4ZDFlLFxuICAgIDB4ZDIwLCAweGQyMiwgMHhkMjQsIDB4ZDI2LCAweGQyOCwgMHhkMmEsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHhlMDIsIDB4ZTA5LCAweGUwYSxcbiAgICAweGUxYSwgMHhlMjEsIDB4ZTIzLCAweGUyNSwgMHhlMmMsIDB4ZTMyLCAweGUzNSwgMHhlMzYsIDB4ZTQ4LCAweGU1MSwgMHhlNzAsIDB4ZTdjLCAweGU3ZSwgMHhlODksXG4gICAgMHhlOGEsIDB4ZTkxLCAweGU5OSwgMHhlOWYsIDB4ZWEyLCAweGVhNCwgMHhlYTYsIDB4ZWE3LCAweGVhOSwgMHgwLCAweDAsIDB4MCwgMHg3NDMsIDB4NzQ0LCAweDc0OCxcbiAgICAweGUwMiwgMHhlMDksIDB4ZTBhLCAweGUxYSwgMHhlMjEsIDB4ZTIzLCAweGUyNSwgMHhlMmMsIDB4ZTMyLCAweGUzNSwgMHhlMzYsIDB4ZTQ4LCAweGU1MSwgMHhlNzAsXG4gICAgMHhlN2MsIDB4ZTdlLCAweGU4OSwgMHhlOGEsIDB4ZTkxLCAweGU5OSwgMHhlOWYsIDB4ZWEyLCAweGVhNCwgMHhlYTYsIDB4ZWE3LCAweGVhOSwgMHgwLCAweDc0YyxcbiAgICAweDAsIDB4NzUwLCAweDAsXG5dKTtcbmNvbnN0IHRhYmxlX2x2MiA9IG5ldyBVaW50MzJBcnJheShbXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsXG4gICAgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMixcbiAgICAweDEyLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbl0pO1xuY29uc3QgdGFibGVfbHY0ID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHg4MDEyLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHg4MjEyLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbl0pO1xuZnVuY3Rpb24gY29tcGFyZUhlYWRlcihsaHMsIHJocykge1xuICAgIGlmIChpc0xlc3NUaGFuKGxocywgcmhzKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIHJldHVybiAxO1xufVxuZnVuY3Rpb24gaXNMZXNzVGhhbihsaHMsIHJocykge1xuICAgIGNvbnN0IHRhYmxlcyA9IFt0YWJsZV9sdjAsIHRhYmxlX2x2MiwgdGFibGVfbHY0XTtcbiAgICBsZXQgY3Vycl9sZXZlbCA9IDA7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBqID0gMDtcbiAgICB3aGlsZSAoY3Vycl9sZXZlbCA8IHRhYmxlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGN1cnJfbGV2ZWwgPT09IHRhYmxlcy5sZW5ndGggLSAxICYmIGkgIT09IGopIHtcbiAgICAgICAgICAgIHJldHVybiBpID4gajtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3ZWlnaHQxID0gaSA8IGxocy5sZW5ndGggPyB0YWJsZXNbY3Vycl9sZXZlbF1bbGhzW2ldLmNoYXJDb2RlQXQoMCldIDogMHgxO1xuICAgICAgICBjb25zdCB3ZWlnaHQyID0gaiA8IHJocy5sZW5ndGggPyB0YWJsZXNbY3Vycl9sZXZlbF1bcmhzW2pdLmNoYXJDb2RlQXQoMCldIDogMHgxO1xuICAgICAgICBpZiAod2VpZ2h0MSA9PT0gMHgxICYmIHdlaWdodDIgPT09IDB4MSkge1xuICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICsrY3Vycl9sZXZlbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWlnaHQxID09PSB3ZWlnaHQyKSB7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgICAgICArK2o7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2VpZ2h0MSA9PT0gMCkge1xuICAgICAgICAgICAgKytpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdlaWdodDIgPT09IDApIHtcbiAgICAgICAgICAgICsrajtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWlnaHQxIDwgd2VpZ2h0MjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIHNpZ24gSFRUUCByZXF1ZXN0IHdpdGggYSBzaGFyZWQga2V5LlxuICovXG5jbGFzcyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSBleHRlbmRzIENyZWRlbnRpYWxQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kuXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKiBAcGFyYW0gZmFjdG9yeSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmV4dFBvbGljeSwgb3B0aW9ucywgZmFjdG9yeSkge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2lnbnMgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBzaWduUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLlhfTVNfREFURSwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKTtcbiAgICAgICAgaWYgKHJlcXVlc3QuYm9keSAmJlxuICAgICAgICAgICAgKHR5cGVvZiByZXF1ZXN0LmJvZHkgPT09IFwic3RyaW5nXCIgfHwgcmVxdWVzdC5ib2R5ICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICByZXF1ZXN0LmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgsIEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcXVlc3QuYm9keSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xBTkdVQUdFKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfRU5DT0RJTkcpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9NRDUpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UWVBFKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkRBVEUpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTU9ESUZJRURfU0lOQ0UpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTUFUQ0gpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTk9ORV9NQVRDSCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9VTk1PRElGSUVEX1NJTkNFKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLlJBTkdFKSxcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpICtcbiAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgdGhpcy5nZXRDYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZyhyZXF1ZXN0KSArXG4gICAgICAgICAgICB0aGlzLmdldENhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyhyZXF1ZXN0KTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5mYWN0b3J5LmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04sIGBTaGFyZWRLZXkgJHt0aGlzLmZhY3RvcnkuYWNjb3VudE5hbWV9OiR7c2lnbmF0dXJlfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW1VSTF06JHtyZXF1ZXN0LnVybH1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtIRUFERVJTXToke3JlcXVlc3QuaGVhZGVycy50b1N0cmluZygpfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW1NUUklORyBUTyBTSUdOXToke0pTT04uc3RyaW5naWZ5KHN0cmluZ1RvU2lnbil9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbS0VZXTogJHtyZXF1ZXN0LmhlYWRlcnMuZ2V0KEhlYWRlckNvbnN0YW50cy5BVVRIT1JJWkFUSU9OKX1gKTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGhlYWRlciB2YWx1ZSBhY2NvcmRpbmcgdG8gc2hhcmVkIGtleSBzaWduIHJ1bGVzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKiBAcGFyYW0gaGVhZGVyTmFtZSAtXG4gICAgICovXG4gICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlcXVlc3QuaGVhZGVycy5nZXQoaGVhZGVyTmFtZSk7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gdXNpbmcgdmVyc2lvbiAyMDE1LTAyLTIxIG9yIGxhdGVyLCBpZiBDb250ZW50LUxlbmd0aCBpcyB6ZXJvLCB0aGVuXG4gICAgICAgIC8vIHNldCB0aGUgQ29udGVudC1MZW5ndGggcGFydCBvZiB0aGUgU3RyaW5nVG9TaWduIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgICAgaWYgKGhlYWRlck5hbWUgPT09IEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCAmJiB2YWx1ZSA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gY29uc3RydWN0IHRoZSBDYW5vbmljYWxpemVkSGVhZGVycyBwb3J0aW9uIG9mIHRoZSBzaWduYXR1cmUgc3RyaW5nLCBmb2xsb3cgdGhlc2Ugc3RlcHM6XG4gICAgICogMS4gUmV0cmlldmUgYWxsIGhlYWRlcnMgZm9yIHRoZSByZXNvdXJjZSB0aGF0IGJlZ2luIHdpdGggeC1tcy0sIGluY2x1ZGluZyB0aGUgeC1tcy1kYXRlIGhlYWRlci5cbiAgICAgKiAyLiBDb252ZXJ0IGVhY2ggSFRUUCBoZWFkZXIgbmFtZSB0byBsb3dlcmNhc2UuXG4gICAgICogMy4gU29ydCB0aGUgaGVhZGVycyBsZXhpY29ncmFwaGljYWxseSBieSBoZWFkZXIgbmFtZSwgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAqICAgIEVhY2ggaGVhZGVyIG1heSBhcHBlYXIgb25seSBvbmNlIGluIHRoZSBzdHJpbmcuXG4gICAgICogNC4gUmVwbGFjZSBhbnkgbGluZWFyIHdoaXRlc3BhY2UgaW4gdGhlIGhlYWRlciB2YWx1ZSB3aXRoIGEgc2luZ2xlIHNwYWNlLlxuICAgICAqIDUuIFRyaW0gYW55IHdoaXRlc3BhY2UgYXJvdW5kIHRoZSBjb2xvbiBpbiB0aGUgaGVhZGVyLlxuICAgICAqIDYuIEZpbmFsbHksIGFwcGVuZCBhIG5ldy1saW5lIGNoYXJhY3RlciB0byBlYWNoIGNhbm9uaWNhbGl6ZWQgaGVhZGVyIGluIHRoZSByZXN1bHRpbmcgbGlzdC5cbiAgICAgKiAgICBDb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHN0cmluZyBieSBjb25jYXRlbmF0aW5nIGFsbCBoZWFkZXJzIGluIHRoaXMgbGlzdCBpbnRvIGEgc2luZ2xlIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBnZXRDYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZyhyZXF1ZXN0KSB7XG4gICAgICAgIGxldCBoZWFkZXJzQXJyYXkgPSByZXF1ZXN0LmhlYWRlcnMuaGVhZGVyc0FycmF5KCkuZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKEhlYWRlckNvbnN0YW50cy5QUkVGSVhfRk9SX1NUT1JBR0UpO1xuICAgICAgICB9KTtcbiAgICAgICAgaGVhZGVyc0FycmF5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb21wYXJlSGVhZGVyKGEubmFtZS50b0xvd2VyQ2FzZSgpLCBiLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZW1vdmUgZHVwbGljYXRlIGhlYWRlcnNcbiAgICAgICAgaGVhZGVyc0FycmF5ID0gaGVhZGVyc0FycmF5LmZpbHRlcigodmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCAmJiB2YWx1ZS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFycmF5W2luZGV4IC0gMV0ubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ24gPSBcIlwiO1xuICAgICAgICBoZWFkZXJzQXJyYXkuZm9yRWFjaCgoaGVhZGVyKSA9PiB7XG4gICAgICAgICAgICBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbiArPSBgJHtoZWFkZXIubmFtZVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLnRyaW1SaWdodCgpfToke2hlYWRlci52YWx1ZS50cmltTGVmdCgpfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgd2ViUmVzb3VyY2UgY2Fub25pY2FsaXplZCByZXNvdXJjZSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgZ2V0Q2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFVSTFBhdGgocmVxdWVzdC51cmwpIHx8IFwiL1wiO1xuICAgICAgICBsZXQgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nID0gXCJcIjtcbiAgICAgICAgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nICs9IGAvJHt0aGlzLmZhY3RvcnkuYWNjb3VudE5hbWV9JHtwYXRofWA7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBnZXRVUkxRdWVyaWVzKHJlcXVlc3QudXJsKTtcbiAgICAgICAgY29uc3QgbG93ZXJjYXNlUXVlcmllcyA9IHt9O1xuICAgICAgICBpZiAocXVlcmllcykge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlLZXlzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBxdWVyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyaWVzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvd2VyY2FzZUtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBsb3dlcmNhc2VRdWVyaWVzW2xvd2VyY2FzZUtleV0gPSBxdWVyaWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5S2V5cy5wdXNoKGxvd2VyY2FzZUtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlLZXlzLnNvcnQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHF1ZXJ5S2V5cykge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyArPSBgXFxuJHtrZXl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KGxvd2VyY2FzZVF1ZXJpZXNba2V5XSl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIENyZWRlbnRpYWwgaXMgYW4gYWJzdHJhY3QgY2xhc3MgZm9yIEF6dXJlIFN0b3JhZ2UgSFRUUCByZXF1ZXN0cyBzaWduaW5nLiBUaGlzXG4gKiBjbGFzcyB3aWxsIGhvc3QgYW4gY3JlZGVudGlhbFBvbGljeUNyZWF0b3IgZmFjdG9yeSB3aGljaCBnZW5lcmF0ZXMgQ3JlZGVudGlhbFBvbGljeS5cbiAqL1xuY2xhc3MgQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFJlcXVlc3RQb2xpY3kgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIF9uZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gX29wdGlvbnMgLVxuICAgICAqL1xuICAgIGNyZWF0ZShfbmV4dFBvbGljeSwgX29wdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBjaGlsZHJlbiBjbGFzc2VzLlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgZm9yIGFjY291bnQga2V5IGF1dGhvcml6YXRpb24gb2YgQXp1cmUgU3RvcmFnZSBzZXJ2aWNlLlxuICovXG5jbGFzcyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCBleHRlbmRzIENyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwuXG4gICAgICogQHBhcmFtIGFjY291bnROYW1lIC1cbiAgICAgKiBAcGFyYW0gYWNjb3VudEtleSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYWNjb3VudE5hbWUsIGFjY291bnRLZXkpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnROYW1lO1xuICAgICAgICB0aGlzLmFjY291bnRLZXkgPSBCdWZmZXIuZnJvbShhY2NvdW50S2V5LCBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeShuZXh0UG9saWN5LCBvcHRpb25zLCB0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgaGFzaCBzaWduYXR1cmUgZm9yIGFuIEhUVFAgcmVxdWVzdCBvciBmb3IgYSBTQVMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyaW5nVG9TaWduIC1cbiAgICAgKi9cbiAgICBjb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIbWFjKFwic2hhMjU2XCIsIHRoaXMuYWNjb3VudEtleSkudXBkYXRlKHN0cmluZ1RvU2lnbiwgXCJ1dGY4XCIpLmRpZ2VzdChcImJhc2U2NFwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IGlzIHVzZWQgd2l0aCBIVFRQKFMpIHJlcXVlc3RzIHRoYXQgcmVhZCBwdWJsaWMgcmVzb3VyY2VzXG4gKiBvciBmb3IgdXNlIHdpdGggU2hhcmVkIEFjY2VzcyBTaWduYXR1cmVzIChTQVMpLlxuICovXG5jbGFzcyBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IGV4dGVuZHMgQ3JlZGVudGlhbFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5LlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgLy8gVGhlIGJhc2UgY2xhc3MgaGFzIGEgcHJvdGVjdGVkIGNvbnN0cnVjdG9yLiBBZGRpbmcgYSBwdWJsaWMgb25lIHRvIGVuYWJsZSBjb25zdHJ1Y3Rpbmcgb2YgdGhpcyBjbGFzcy5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZWxlc3MtY29uc3RydWN0b3IqL1xuICAgIGNvbnN0cnVjdG9yKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIobmV4dFBvbGljeSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQW5vbnltb3VzQ3JlZGVudGlhbCBwcm92aWRlcyBhIGNyZWRlbnRpYWxQb2xpY3lDcmVhdG9yIG1lbWJlciB1c2VkIHRvIGNyZWF0ZVxuICogQW5vbnltb3VzQ3JlZGVudGlhbFBvbGljeSBvYmplY3RzLiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IGlzIHVzZWQgd2l0aFxuICogSFRUUChTKSByZXF1ZXN0cyB0aGF0IHJlYWQgcHVibGljIHJlc291cmNlcyBvciBmb3IgdXNlIHdpdGggU2hhcmVkIEFjY2Vzc1xuICogU2lnbmF0dXJlcyAoU0FTKS5cbiAqL1xuY2xhc3MgQW5vbnltb3VzQ3JlZGVudGlhbCBleHRlbmRzIENyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3l9IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5KG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5sZXQgX2RlZmF1bHRIdHRwQ2xpZW50O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkRGVmYXVsdEh0dHBDbGllbnQoKSB7XG4gICAgaWYgKCFfZGVmYXVsdEh0dHBDbGllbnQpIHtcbiAgICAgICAgX2RlZmF1bHRIdHRwQ2xpZW50ID0gY29yZVJlc3RQaXBlbGluZS5jcmVhdGVEZWZhdWx0SHR0cENsaWVudCgpO1xuICAgIH1cbiAgICByZXR1cm4gX2RlZmF1bHRIdHRwQ2xpZW50O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBTdG9yYWdlQnJvd3NlclBvbGljeS5cbiAqL1xuY29uc3Qgc3RvcmFnZUJyb3dzZXJQb2xpY3lOYW1lID0gXCJzdG9yYWdlQnJvd3NlclBvbGljeVwiO1xuLyoqXG4gKiBzdG9yYWdlQnJvd3NlclBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIHByZXZlbnQgYnJvd3NlcnMgZnJvbSBjYWNoaW5nIHJlcXVlc3RzXG4gKiBhbmQgdG8gcmVtb3ZlIGNvb2tpZXMgYW5kIGV4cGxpY2l0IGNvbnRlbnQtbGVuZ3RoIGhlYWRlcnMuXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VCcm93c2VyUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHN0b3JhZ2VCcm93c2VyUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSBcIkdFVFwiIHx8IHJlcXVlc3QubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsID0gc2V0VVJMUGFyYW1ldGVyKHJlcXVlc3QudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5GT1JDRV9CUk9XU0VSX05PX0NBQ0hFLCBuZXcgRGF0ZSgpLmdldFRpbWUoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoSGVhZGVyQ29uc3RhbnRzLkNPT0tJRSk7XG4gICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gWEhSIHN0YW5kYXJkcywgY29udGVudC1sZW5ndGggc2hvdWxkIGJlIGZ1bGx5IGNvbnRyb2xsZWQgYnkgYnJvd3NlcnNcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIKTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBOYW1lIG9mIHRoZSB7QGxpbmsgc3RvcmFnZVJldHJ5UG9saWN5fVxuICovXG5jb25zdCBzdG9yYWdlUmV0cnlQb2xpY3lOYW1lID0gXCJzdG9yYWdlUmV0cnlQb2xpY3lcIjtcbi8qKlxuICogUmV0cnlQb2xpY3kgdHlwZXMuXG4gKi9cbnZhciBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlO1xuKGZ1bmN0aW9uIChTdG9yYWdlUmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgLyoqXG4gICAgICogRXhwb25lbnRpYWwgcmV0cnkuIFJldHJ5IHRpbWUgZGVsYXkgZ3Jvd3MgZXhwb25lbnRpYWxseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJFWFBPTkVOVElBTFwiXSA9IDBdID0gXCJFWFBPTkVOVElBTFwiO1xuICAgIC8qKlxuICAgICAqIExpbmVhciByZXRyeS4gUmV0cnkgdGltZSBkZWxheSBncm93cyBsaW5lYXJseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJGSVhFRFwiXSA9IDFdID0gXCJGSVhFRFwiO1xufSkoU3RvcmFnZVJldHJ5UG9saWN5VHlwZSB8fCAoU3RvcmFnZVJldHJ5UG9saWN5VHlwZSA9IHt9KSk7XG4vLyBEZWZhdWx0IHZhbHVlcyBvZiBTdG9yYWdlUmV0cnlPcHRpb25zXG5jb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgbWF4UmV0cnlEZWxheUluTXM6IDEyMCAqIDEwMDAsXG4gICAgbWF4VHJpZXM6IDQsXG4gICAgcmV0cnlEZWxheUluTXM6IDQgKiAxMDAwLFxuICAgIHJldHJ5UG9saWN5VHlwZTogU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5FWFBPTkVOVElBTCxcbiAgICBzZWNvbmRhcnlIb3N0OiBcIlwiLFxuICAgIHRyeVRpbWVvdXRJbk1zOiB1bmRlZmluZWQsIC8vIFVzZSBzZXJ2ZXIgc2lkZSBkZWZhdWx0IHRpbWVvdXQgc3RyYXRlZ3lcbn07XG5jb25zdCByZXRyaWFibGVFcnJvcnMgPSBbXG4gICAgXCJFVElNRURPVVRcIixcbiAgICBcIkVTT0NLRVRUSU1FRE9VVFwiLFxuICAgIFwiRUNPTk5SRUZVU0VEXCIsXG4gICAgXCJFQ09OTlJFU0VUXCIsXG4gICAgXCJFTk9FTlRcIixcbiAgICBcIkVOT1RGT1VORFwiLFxuICAgIFwiVElNRU9VVFwiLFxuICAgIFwiRVBJUEVcIixcbiAgICBcIlJFUVVFU1RfU0VORF9FUlJPUlwiLFxuXTtcbmNvbnN0IFJFVFJZX0FCT1JUX0VSUk9SID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4vKipcbiAqIFJldHJ5IHBvbGljeSB3aXRoIGV4cG9uZW50aWFsIHJldHJ5IGFuZCBsaW5lYXIgcmV0cnkgaW1wbGVtZW50ZWQuXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VSZXRyeVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICBjb25zdCByZXRyeVBvbGljeVR5cGUgPSAoX2EgPSBvcHRpb25zLnJldHJ5UG9saWN5VHlwZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLnJldHJ5UG9saWN5VHlwZTtcbiAgICBjb25zdCBtYXhUcmllcyA9IChfYiA9IG9wdGlvbnMubWF4VHJpZXMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5tYXhUcmllcztcbiAgICBjb25zdCByZXRyeURlbGF5SW5NcyA9IChfYyA9IG9wdGlvbnMucmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5yZXRyeURlbGF5SW5NcztcbiAgICBjb25zdCBtYXhSZXRyeURlbGF5SW5NcyA9IChfZCA9IG9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5tYXhSZXRyeURlbGF5SW5NcztcbiAgICBjb25zdCBzZWNvbmRhcnlIb3N0ID0gKF9lID0gb3B0aW9ucy5zZWNvbmRhcnlIb3N0KSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBERUZBVUxUX1JFVFJZX09QVElPTlMuc2Vjb25kYXJ5SG9zdDtcbiAgICBjb25zdCB0cnlUaW1lb3V0SW5NcyA9IChfZiA9IG9wdGlvbnMudHJ5VGltZW91dEluTXMpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy50cnlUaW1lb3V0SW5NcztcbiAgICBmdW5jdGlvbiBzaG91bGRSZXRyeSh7IGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyb3IsIH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4VHJpZXMpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogQXR0ZW1wdChzKSAke2F0dGVtcHR9ID49IG1heFRyaWVzICR7bWF4VHJpZXN9LCBubyBmdXJ0aGVyIHRyeS5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV0cmlhYmxlRXJyb3Igb2YgcmV0cmlhYmxlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLm5hbWUudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhyZXRyaWFibGVFcnJvcikgfHxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IuY29kZSAmJiBlcnJvci5jb2RlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSA9PT0gcmV0cmlhYmxlRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogTmV0d29yayBlcnJvciAke3JldHJpYWJsZUVycm9yfSBmb3VuZCwgd2lsbCByZXRyeS5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSkgPT09IFwiUEFSU0VfRVJST1JcIiAmJlxuICAgICAgICAgICAgICAgIChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKGBFcnJvciBcIkVycm9yOiBVbmNsb3NlZCByb290IHRhZ2ApKSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiUmV0cnlQb2xpY3k6IEluY29tcGxldGUgWE1MIHJlc3BvbnNlIGxpa2VseSBkdWUgdG8gc2VydmljZSB0aW1lb3V0LCB3aWxsIHJldHJ5LlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBhdHRlbXB0IHdhcyBhZ2FpbnN0IHRoZSBzZWNvbmRhcnkgJiBpdCByZXR1cm5lZCBhIFN0YXR1c05vdEZvdW5kICg0MDQpLCB0aGVuXG4gICAgICAgIC8vIHRoZSByZXNvdXJjZSB3YXMgbm90IGZvdW5kLiBUaGlzIG1heSBiZSBkdWUgdG8gcmVwbGljYXRpb24gZGVsYXkuIFNvLCBpbiB0aGlzXG4gICAgICAgIC8vIGNhc2UsIHdlJ2xsIG5ldmVyIHRyeSB0aGUgc2Vjb25kYXJ5IGFnYWluIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgICAgaWYgKHJlc3BvbnNlIHx8IGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gKF9iID0gKF9hID0gcmVzcG9uc2UgPT09IG51bGwgfHwgcmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3BvbnNlLnN0YXR1cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLnN0YXR1c0NvZGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDA7XG4gICAgICAgICAgICBpZiAoIWlzUHJpbWFyeVJldHJ5ICYmIHN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogU2Vjb25kYXJ5IGFjY2VzcyB3aXRoIDQwNCwgd2lsbCByZXRyeS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNlcnZlciBpbnRlcm5hbCBlcnJvciBvciBzZXJ2ZXIgdGltZW91dFxuICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDUwMyB8fCBzdGF0dXNDb2RlID09PSA1MDApIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IFdpbGwgcmV0cnkgZm9yIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0uYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gW0NvcHkgc291cmNlIGVycm9yIGNvZGVdIEZlYXR1cmUgaXMgcGVuZGluZyBvbiBzZXJ2aWNlIHNpZGUsIHNraXAgcmV0cnkgb24gY29weSBzb3VyY2UgZXJyb3IgZm9yIG5vdy5cbiAgICAgICAgLy8gaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIC8vICAgLy8gUmV0cnkgc2VsZWN0IENvcHkgU291cmNlIEVycm9yIENvZGVzLlxuICAgICAgICAvLyAgIGlmIChyZXNwb25zZT8uc3RhdHVzID49IDQwMCkge1xuICAgICAgICAvLyAgICAgY29uc3QgY29weVNvdXJjZUVycm9yID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoSGVhZGVyQ29uc3RhbnRzLlhfTVNfQ29weVNvdXJjZUVycm9yQ29kZSk7XG4gICAgICAgIC8vICAgICBpZiAoY29weVNvdXJjZUVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gICAgICAgc3dpdGNoIChjb3B5U291cmNlRXJyb3IpIHtcbiAgICAgICAgLy8gICAgICAgICBjYXNlIFwiSW50ZXJuYWxFcnJvclwiOlxuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJPcGVyYXRpb25UaW1lZE91dFwiOlxuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJTZXJ2ZXJCdXN5XCI6XG4gICAgICAgIC8vICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZURlbGF5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0KSB7XG4gICAgICAgIGxldCBkZWxheVRpbWVJbk1zID0gMDtcbiAgICAgICAgaWYgKGlzUHJpbWFyeVJldHJ5KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJldHJ5UG9saWN5VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5FWFBPTkVOVElBTDpcbiAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IE1hdGgubWluKChNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSkgLSAxKSAqIHJldHJ5RGVsYXlJbk1zLCBtYXhSZXRyeURlbGF5SW5Ncyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5GSVhFRDpcbiAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IHJldHJ5RGVsYXlJbk1zO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSBNYXRoLnJhbmRvbSgpICogMTAwMDtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IERlbGF5IGZvciAke2RlbGF5VGltZUluTXN9bXNgKTtcbiAgICAgICAgcmV0dXJuIGRlbGF5VGltZUluTXM7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHN0b3JhZ2VSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgc2VydmVyLXNpZGUgdGltZW91dCBxdWVyeSBwYXJhbWV0ZXIgXCJ0aW1lb3V0PVtzZWNvbmRzXVwiXG4gICAgICAgICAgICBpZiAodHJ5VGltZW91dEluTXMpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LnVybCA9IHNldFVSTFBhcmFtZXRlcihyZXF1ZXN0LnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuVElNRU9VVCwgU3RyaW5nKE1hdGguZmxvb3IodHJ5VGltZW91dEluTXMgLyAxMDAwKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJpbWFyeVVybCA9IHJlcXVlc3QudXJsO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kYXJ5VXJsID0gc2Vjb25kYXJ5SG9zdCA/IHNldFVSTEhvc3QocmVxdWVzdC51cmwsIHNlY29uZGFyeUhvc3QpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHNlY29uZGFyeUhhczQwNCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGF0dGVtcHQgPSAxO1xuICAgICAgICAgICAgbGV0IHJldHJ5QWdhaW4gPSB0cnVlO1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAgICAgd2hpbGUgKHJldHJ5QWdhaW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1ByaW1hcnlSZXRyeSA9IHNlY29uZGFyeUhhczQwNCB8fFxuICAgICAgICAgICAgICAgICAgICAhc2Vjb25kYXJ5VXJsIHx8XG4gICAgICAgICAgICAgICAgICAgICFbXCJHRVRcIiwgXCJIRUFEXCIsIFwiT1BUSU9OU1wiXS5pbmNsdWRlcyhyZXF1ZXN0Lm1ldGhvZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdCAlIDIgPT09IDE7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC51cmwgPSBpc1ByaW1hcnlSZXRyeSA/IHByaW1hcnlVcmwgOiBzZWNvbmRhcnlVcmw7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiA9PT09PT4gVHJ5PSR7YXR0ZW1wdH0gJHtpc1ByaW1hcnlSZXRyeSA/IFwiUHJpbWFyeVwiIDogXCJTZWNvbmRhcnlcIn1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlIYXM0MDQgPSBzZWNvbmRhcnlIYXM0MDQgfHwgKCFpc1ByaW1hcnlSZXRyeSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDQwNCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3JlUmVzdFBpcGVsaW5lLmlzUmVzdEVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5UG9saWN5OiBDYXVnaHQgZXJyb3IsIG1lc3NhZ2U6ICR7ZS5tZXNzYWdlfSwgY29kZTogJHtlLmNvZGV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5UG9saWN5OiBDYXVnaHQgZXJyb3IsIG1lc3NhZ2U6ICR7Y29yZVV0aWwuZ2V0RXJyb3JNZXNzYWdlKGUpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXRyeUFnYWluID0gc2hvdWxkUmV0cnkoeyBpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVzcG9uc2UsIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXRyeUFnYWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KGNhbGN1bGF0ZURlbGF5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0KSwgcmVxdWVzdC5hYm9ydFNpZ25hbCwgUkVUUllfQUJPUlRfRVJST1IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiBuZXcgY29yZVJlc3RQaXBlbGluZS5SZXN0RXJyb3IoXCJSZXRyeVBvbGljeSBmYWlsZWQgd2l0aG91dCBrbm93biBlcnJvci5cIik7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kuXG4gKi9cbmNvbnN0IHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5TmFtZSA9IFwic3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3lcIjtcbi8qKlxuICogc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kgaGFuZGxlcyBzaWduaW5nIHJlcXVlc3RzIHVzaW5nIHN0b3JhZ2UgYWNjb3VudCBrZXlzLlxuICovXG5mdW5jdGlvbiBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeShvcHRpb25zKSB7XG4gICAgZnVuY3Rpb24gc2lnblJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5YX01TX0RBVEUsIG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSk7XG4gICAgICAgIGlmIChyZXF1ZXN0LmJvZHkgJiZcbiAgICAgICAgICAgICh0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihyZXF1ZXN0LmJvZHkpKSAmJlxuICAgICAgICAgICAgcmVxdWVzdC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RILCBCdWZmZXIuYnl0ZUxlbmd0aChyZXF1ZXN0LmJvZHkpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgICAgICByZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEFOR1VBR0UpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfRU5DT0RJTkcpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX01ENSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UWVBFKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5EQVRFKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NT0RJRklFRF9TSU5DRSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTUFUQ0gpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX05PTkVfTUFUQ0gpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX1VOTU9ESUZJRURfU0lOQ0UpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLlJBTkdFKSxcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpICtcbiAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgZ2V0Q2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmcocmVxdWVzdCkgK1xuICAgICAgICAgICAgZ2V0Q2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nKHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYyhcInNoYTI1NlwiLCBvcHRpb25zLmFjY291bnRLZXkpXG4gICAgICAgICAgICAudXBkYXRlKHN0cmluZ1RvU2lnbiwgXCJ1dGY4XCIpXG4gICAgICAgICAgICAuZGlnZXN0KFwiYmFzZTY0XCIpO1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5BVVRIT1JJWkFUSU9OLCBgU2hhcmVkS2V5ICR7b3B0aW9ucy5hY2NvdW50TmFtZX06JHtzaWduYXR1cmV9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbVVJMXToke3JlcXVlc3QudXJsfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW0hFQURFUlNdOiR7cmVxdWVzdC5oZWFkZXJzLnRvU3RyaW5nKCl9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbU1RSSU5HIFRPIFNJR05dOiR7SlNPTi5zdHJpbmdpZnkoc3RyaW5nVG9TaWduKX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtLRVldOiAke3JlcXVlc3QuaGVhZGVycy5nZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04pfWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBoZWFkZXIgdmFsdWUgYWNjb3JkaW5nIHRvIHNoYXJlZCBrZXkgc2lnbiBydWxlcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hdXRoZW50aWNhdGUtd2l0aC1zaGFyZWQta2V5XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlcXVlc3QuaGVhZGVycy5nZXQoaGVhZGVyTmFtZSk7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gdXNpbmcgdmVyc2lvbiAyMDE1LTAyLTIxIG9yIGxhdGVyLCBpZiBDb250ZW50LUxlbmd0aCBpcyB6ZXJvLCB0aGVuXG4gICAgICAgIC8vIHNldCB0aGUgQ29udGVudC1MZW5ndGggcGFydCBvZiB0aGUgU3RyaW5nVG9TaWduIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgICAgaWYgKGhlYWRlck5hbWUgPT09IEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCAmJiB2YWx1ZSA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gY29uc3RydWN0IHRoZSBDYW5vbmljYWxpemVkSGVhZGVycyBwb3J0aW9uIG9mIHRoZSBzaWduYXR1cmUgc3RyaW5nLCBmb2xsb3cgdGhlc2Ugc3RlcHM6XG4gICAgICogMS4gUmV0cmlldmUgYWxsIGhlYWRlcnMgZm9yIHRoZSByZXNvdXJjZSB0aGF0IGJlZ2luIHdpdGggeC1tcy0sIGluY2x1ZGluZyB0aGUgeC1tcy1kYXRlIGhlYWRlci5cbiAgICAgKiAyLiBDb252ZXJ0IGVhY2ggSFRUUCBoZWFkZXIgbmFtZSB0byBsb3dlcmNhc2UuXG4gICAgICogMy4gU29ydCB0aGUgaGVhZGVycyBsZXhpY29ncmFwaGljYWxseSBieSBoZWFkZXIgbmFtZSwgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAqICAgIEVhY2ggaGVhZGVyIG1heSBhcHBlYXIgb25seSBvbmNlIGluIHRoZSBzdHJpbmcuXG4gICAgICogNC4gUmVwbGFjZSBhbnkgbGluZWFyIHdoaXRlc3BhY2UgaW4gdGhlIGhlYWRlciB2YWx1ZSB3aXRoIGEgc2luZ2xlIHNwYWNlLlxuICAgICAqIDUuIFRyaW0gYW55IHdoaXRlc3BhY2UgYXJvdW5kIHRoZSBjb2xvbiBpbiB0aGUgaGVhZGVyLlxuICAgICAqIDYuIEZpbmFsbHksIGFwcGVuZCBhIG5ldy1saW5lIGNoYXJhY3RlciB0byBlYWNoIGNhbm9uaWNhbGl6ZWQgaGVhZGVyIGluIHRoZSByZXN1bHRpbmcgbGlzdC5cbiAgICAgKiAgICBDb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHN0cmluZyBieSBjb25jYXRlbmF0aW5nIGFsbCBoZWFkZXJzIGluIHRoaXMgbGlzdCBpbnRvIGEgc2luZ2xlIHN0cmluZy5cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldENhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nKHJlcXVlc3QpIHtcbiAgICAgICAgbGV0IGhlYWRlcnNBcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgcmVxdWVzdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoSGVhZGVyQ29uc3RhbnRzLlBSRUZJWF9GT1JfU1RPUkFHRSkpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzQXJyYXkucHVzaCh7IG5hbWUsIHZhbHVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnNBcnJheS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29tcGFyZUhlYWRlcihhLm5hbWUudG9Mb3dlckNhc2UoKSwgYi5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBoZWFkZXJzXG4gICAgICAgIGhlYWRlcnNBcnJheSA9IGhlYWRlcnNBcnJheS5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDAgJiYgdmFsdWUubmFtZS50b0xvd2VyQ2FzZSgpID09PSBhcnJheVtpbmRleCAtIDFdLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGNhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nVG9TaWduID0gXCJcIjtcbiAgICAgICAgaGVhZGVyc0FycmF5LmZvckVhY2goKGhlYWRlcikgPT4ge1xuICAgICAgICAgICAgY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ24gKz0gYCR7aGVhZGVyLm5hbWVcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgIC50cmltUmlnaHQoKX06JHtoZWFkZXIudmFsdWUudHJpbUxlZnQoKX1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nVG9TaWduO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0VVJMUGF0aChyZXF1ZXN0LnVybCkgfHwgXCIvXCI7XG4gICAgICAgIGxldCBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgPSBcIlwiO1xuICAgICAgICBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgKz0gYC8ke29wdGlvbnMuYWNjb3VudE5hbWV9JHtwYXRofWA7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBnZXRVUkxRdWVyaWVzKHJlcXVlc3QudXJsKTtcbiAgICAgICAgY29uc3QgbG93ZXJjYXNlUXVlcmllcyA9IHt9O1xuICAgICAgICBpZiAocXVlcmllcykge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlLZXlzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBxdWVyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyaWVzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvd2VyY2FzZUtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBsb3dlcmNhc2VRdWVyaWVzW2xvd2VyY2FzZUtleV0gPSBxdWVyaWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5S2V5cy5wdXNoKGxvd2VyY2FzZUtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlLZXlzLnNvcnQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHF1ZXJ5S2V5cykge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyArPSBgXFxuJHtrZXl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KGxvd2VyY2FzZVF1ZXJpZXNba2V5XSl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHNpZ25SZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFN0b3JhZ2VCcm93c2VyUG9saWN5IHdpbGwgaGFuZGxlIGRpZmZlcmVuY2VzIGJldHdlZW4gTm9kZS5qcyBhbmQgYnJvd3NlciBydW50aW1lLCBpbmNsdWRpbmc6XG4gKlxuICogMS4gQnJvd3NlcnMgY2FjaGUgR0VUL0hFQUQgcmVxdWVzdHMgYnkgYWRkaW5nIGNvbmRpdGlvbmFsIGhlYWRlcnMgc3VjaCBhcyAnSUZfTU9ESUZJRURfU0lOQ0UnLlxuICogU3RvcmFnZUJyb3dzZXJQb2xpY3kgaXMgYSBwb2xpY3kgdXNlZCB0byBhZGQgYSB0aW1lc3RhbXAgcXVlcnkgdG8gR0VUL0hFQUQgcmVxdWVzdCBVUkxcbiAqIHRodXMgYXZvaWQgdGhlIGJyb3dzZXIgY2FjaGUuXG4gKlxuICogMi4gUmVtb3ZlIGNvb2tpZSBoZWFkZXIgZm9yIHNlY3VyaXR5XG4gKlxuICogMy4gUmVtb3ZlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlciB0byBhdm9pZCBicm93c2VycyB3YXJuaW5nXG4gKi9cbmNsYXNzIFN0b3JhZ2VCcm93c2VyUG9saWN5IGV4dGVuZHMgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZUJyb3dzZXJQb2xpY3kuXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICAvLyBUaGUgYmFzZSBjbGFzcyBoYXMgYSBwcm90ZWN0ZWQgY29uc3RydWN0b3IuIEFkZGluZyBhIHB1YmxpYyBvbmUgdG8gZW5hYmxlIGNvbnN0cnVjdGluZyBvZiB0aGlzIGNsYXNzLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlbGVzcy1jb25zdHJ1Y3RvciovXG4gICAgY29uc3RydWN0b3IobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgb3V0IHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmV4dFBvbGljeS5zZW5kUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QudG9VcHBlckNhc2UoKSA9PT0gXCJHRVRcIiB8fCByZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgcmVxdWVzdC51cmwgPSBzZXRVUkxQYXJhbWV0ZXIocmVxdWVzdC51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLkZPUkNFX0JST1dTRVJfTk9fQ0FDSEUsIG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5yZW1vdmUoSGVhZGVyQ29uc3RhbnRzLkNPT0tJRSk7XG4gICAgICAgIC8vIEFjY29yZGluZyB0byBYSFIgc3RhbmRhcmRzLCBjb250ZW50LWxlbmd0aCBzaG91bGQgYmUgZnVsbHkgY29udHJvbGxlZCBieSBicm93c2Vyc1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMucmVtb3ZlKEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9uZXh0UG9saWN5LnNlbmRSZXF1ZXN0KHJlcXVlc3QpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSBpcyBhIGZhY3RvcnkgY2xhc3MgaGVscGluZyBnZW5lcmF0aW5nIFN0b3JhZ2VCcm93c2VyUG9saWN5IG9iamVjdHMuXG4gKi9cbmNsYXNzIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNyZWF0ZShuZXh0UG9saWN5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUJyb3dzZXJQb2xpY3kobmV4dFBvbGljeSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3kuXG4gKi9cbmNvbnN0IHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeU5hbWUgPSBcIlN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeVwiO1xuLyoqXG4gKiBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3kgdG8gY29ycmVjdGx5IHNldCBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCByZXF1ZXN0IGJvZHkgbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3koKSB7XG4gICAgZnVuY3Rpb24gY29ycmVjdENvbnRlbnRMZW5ndGgocmVxdWVzdCkge1xuICAgICAgICBpZiAocmVxdWVzdC5ib2R5ICYmXG4gICAgICAgICAgICAodHlwZW9mIHJlcXVlc3QuYm9keSA9PT0gXCJzdHJpbmdcIiB8fCBCdWZmZXIuaXNCdWZmZXIocmVxdWVzdC5ib2R5KSkgJiZcbiAgICAgICAgICAgIHJlcXVlc3QuYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCwgQnVmZmVyLmJ5dGVMZW5ndGgocmVxdWVzdC5ib2R5KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogc3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgY29ycmVjdENvbnRlbnRMZW5ndGgocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBoZWxwZXIgdG8gZGVjaWRlIGlmIGEgZ2l2ZW4gYXJndW1lbnQgc2F0aXNmaWVzIHRoZSBQaXBlbGluZSBjb250cmFjdFxuICogQHBhcmFtIHBpcGVsaW5lIC0gQW4gYXJndW1lbnQgdGhhdCBtYXkgYmUgYSBQaXBlbGluZVxuICogQHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBzYXRpc2ZpZXMgdGhlIFBpcGVsaW5lIGNvbnRyYWN0XG4gKi9cbmZ1bmN0aW9uIGlzUGlwZWxpbmVMaWtlKHBpcGVsaW5lKSB7XG4gICAgaWYgKCFwaXBlbGluZSB8fCB0eXBlb2YgcGlwZWxpbmUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjYXN0UGlwZWxpbmUgPSBwaXBlbGluZTtcbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkoY2FzdFBpcGVsaW5lLmZhY3RvcmllcykgJiZcbiAgICAgICAgdHlwZW9mIGNhc3RQaXBlbGluZS5vcHRpb25zID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHR5cGVvZiBjYXN0UGlwZWxpbmUudG9TZXJ2aWNlQ2xpZW50T3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKTtcbn1cbi8qKlxuICogQSBQaXBlbGluZSBjbGFzcyBjb250YWluaW5nIEhUVFAgcmVxdWVzdCBwb2xpY2llcy5cbiAqIFlvdSBjYW4gY3JlYXRlIGEgZGVmYXVsdCBQaXBlbGluZSBieSBjYWxsaW5nIHtAbGluayBuZXdQaXBlbGluZX0uXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSBhIFBpcGVsaW5lIHdpdGggeW91ciBvd24gcG9saWNpZXMgYnkgdGhlIGNvbnN0cnVjdG9yIG9mIFBpcGVsaW5lLlxuICpcbiAqIFJlZmVyIHRvIHtAbGluayBuZXdQaXBlbGluZX0gYW5kIHByb3ZpZGVkIHBvbGljaWVzIGJlZm9yZSBpbXBsZW1lbnRpbmcgeW91clxuICogY3VzdG9taXplZCBQaXBlbGluZS5cbiAqL1xuY2xhc3MgUGlwZWxpbmUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUGlwZWxpbmUuIEN1c3RvbWl6ZSBIVFRQQ2xpZW50IGJ5IGltcGxlbWVudGluZyBJSHR0cENsaWVudCBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmFjdG9yaWVzIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZmFjdG9yaWVzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5mYWN0b3JpZXMgPSBmYWN0b3JpZXM7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyYW5zZmVyIFBpcGVsaW5lIG9iamVjdCB0byBTZXJ2aWNlQ2xpZW50T3B0aW9ucyBvYmplY3Qgd2hpY2ggaXMgcmVxdWlyZWQgYnlcbiAgICAgKiBTZXJ2aWNlQ2xpZW50IGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIFNlcnZpY2VDbGllbnRPcHRpb25zIG9iamVjdCBmcm9tIHRoaXMgUGlwZWxpbmUuXG4gICAgICovXG4gICAgdG9TZXJ2aWNlQ2xpZW50T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGh0dHBDbGllbnQ6IHRoaXMub3B0aW9ucy5odHRwQ2xpZW50LFxuICAgICAgICAgICAgcmVxdWVzdFBvbGljeUZhY3RvcmllczogdGhpcy5mYWN0b3JpZXMsXG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFBpcGVsaW5lIG9iamVjdCB3aXRoIENyZWRlbnRpYWwgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSAgU3VjaCBhcyBBbm9ueW1vdXNDcmVkZW50aWFsLCBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCBvciBhbnkgY3JlZGVudGlhbCBmcm9tIHRoZSBgQGF6dXJlL2lkZW50aXR5YCBwYWNrYWdlIHRvIGF1dGhlbnRpY2F0ZSByZXF1ZXN0cyB0byB0aGUgc2VydmljZS4gWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgVG9rZW5DcmVkZW50aWFsIGludGVyZmFjZS4gSWYgbm90IHNwZWNpZmllZCwgQW5vbnltb3VzQ3JlZGVudGlhbCBpcyB1c2VkLlxuICogQHBhcmFtIHBpcGVsaW5lT3B0aW9ucyAtIE9wdGlvbmFsLiBPcHRpb25zLlxuICogQHJldHVybnMgQSBuZXcgUGlwZWxpbmUgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBuZXdQaXBlbGluZShjcmVkZW50aWFsLCBwaXBlbGluZU9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghY3JlZGVudGlhbCkge1xuICAgICAgICBjcmVkZW50aWFsID0gbmV3IEFub255bW91c0NyZWRlbnRpYWwoKTtcbiAgICB9XG4gICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUoW10sIHBpcGVsaW5lT3B0aW9ucyk7XG4gICAgcGlwZWxpbmUuX2NyZWRlbnRpYWwgPSBjcmVkZW50aWFsO1xuICAgIHJldHVybiBwaXBlbGluZTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NEb3dubGV2ZWxQaXBlbGluZShwaXBlbGluZSkge1xuICAgIGNvbnN0IGtub3duRmFjdG9yeUZ1bmN0aW9ucyA9IFtcbiAgICAgICAgaXNBbm9ueW1vdXNDcmVkZW50aWFsLFxuICAgICAgICBpc1N0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsLFxuICAgICAgICBpc0NvcmVIdHRwQmVhcmVyVG9rZW5GYWN0b3J5LFxuICAgICAgICBpc1N0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSxcbiAgICAgICAgaXNTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5LFxuICAgICAgICBpc1N0b3JhZ2VUZWxlbWV0cnlQb2xpY3lGYWN0b3J5LFxuICAgICAgICBpc0NvcmVIdHRwUG9saWN5RmFjdG9yeSxcbiAgICBdO1xuICAgIGlmIChwaXBlbGluZS5mYWN0b3JpZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5vdmVsRmFjdG9yaWVzID0gcGlwZWxpbmUuZmFjdG9yaWVzLmZpbHRlcigoZmFjdG9yeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFrbm93bkZhY3RvcnlGdW5jdGlvbnMuc29tZSgoa25vd25GYWN0b3J5KSA9PiBrbm93bkZhY3RvcnkoZmFjdG9yeSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vdmVsRmFjdG9yaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaGFzSW5qZWN0b3IgPSBub3ZlbEZhY3Rvcmllcy5zb21lKChmYWN0b3J5KSA9PiBpc0luamVjdG9yUG9saWN5RmFjdG9yeShmYWN0b3J5KSk7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgYW55IGxlZnQgb3Zlciwgd3JhcCBpbiBhIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdyYXBwZWRQb2xpY2llczogY29yZUh0dHBDb21wYXQuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kobm92ZWxGYWN0b3JpZXMpLFxuICAgICAgICAgICAgICAgIGFmdGVyUmV0cnk6IGhhc0luamVjdG9yLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0Q29yZUNsaWVudE9wdGlvbnMocGlwZWxpbmUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgX2IgPSBwaXBlbGluZS5vcHRpb25zLCB7IGh0dHBDbGllbnQ6IHYxQ2xpZW50IH0gPSBfYiwgcmVzdE9wdGlvbnMgPSB0c2xpYi5fX3Jlc3QoX2IsIFtcImh0dHBDbGllbnRcIl0pO1xuICAgIGxldCBodHRwQ2xpZW50ID0gcGlwZWxpbmUuX2NvcmVIdHRwQ2xpZW50O1xuICAgIGlmICghaHR0cENsaWVudCkge1xuICAgICAgICBodHRwQ2xpZW50ID0gdjFDbGllbnQgPyBjb3JlSHR0cENvbXBhdC5jb252ZXJ0SHR0cENsaWVudCh2MUNsaWVudCkgOiBnZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCgpO1xuICAgICAgICBwaXBlbGluZS5fY29yZUh0dHBDbGllbnQgPSBodHRwQ2xpZW50O1xuICAgIH1cbiAgICBsZXQgY29yZVBpcGVsaW5lID0gcGlwZWxpbmUuX2NvcmVQaXBlbGluZTtcbiAgICBpZiAoIWNvcmVQaXBlbGluZSkge1xuICAgICAgICBjb25zdCBwYWNrYWdlRGV0YWlscyA9IGBhenNkay1qcy1henVyZS1zdG9yYWdlLWJsb2IvJHtTREtfVkVSU0lPTn1gO1xuICAgICAgICBjb25zdCB1c2VyQWdlbnRQcmVmaXggPSByZXN0T3B0aW9ucy51c2VyQWdlbnRPcHRpb25zICYmIHJlc3RPcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMudXNlckFnZW50UHJlZml4XG4gICAgICAgICAgICA/IGAke3Jlc3RPcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMudXNlckFnZW50UHJlZml4fSAke3BhY2thZ2VEZXRhaWxzfWBcbiAgICAgICAgICAgIDogYCR7cGFja2FnZURldGFpbHN9YDtcbiAgICAgICAgY29yZVBpcGVsaW5lID0gY29yZUNsaWVudC5jcmVhdGVDbGllbnRQaXBlbGluZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3RPcHRpb25zKSwgeyBsb2dnaW5nT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkSGVhZGVyTmFtZXM6IFN0b3JhZ2VCbG9iTG9nZ2luZ0FsbG93ZWRIZWFkZXJOYW1lcyxcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICBsb2dnZXI6IGxvZ2dlci5pbmZvLFxuICAgICAgICAgICAgfSwgdXNlckFnZW50T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHVzZXJBZ2VudFByZWZpeCxcbiAgICAgICAgICAgIH0sIHNlcmlhbGl6YXRpb25PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5WE1MOiBjb3JlWG1sLnN0cmluZ2lmeVhNTCxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVyT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBjdXN0b21pemVkIFhNTCBjaGFyIGtleSBvZiBcIiNcIiBzbyB3ZSBjYW4gZGVzZXJpYWxpemUgbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggXCJfXCIga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyS2V5OiBcIiNcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgZGVzZXJpYWxpemF0aW9uT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHBhcnNlWE1MOiBjb3JlWG1sLnBhcnNlWE1MLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHhtbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGN1c3RvbWl6ZWQgWE1MIGNoYXIga2V5IG9mIFwiI1wiIHNvIHdlIGNhbiBkZXNlcmlhbGl6ZSBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBcIl9cIiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbENoYXJLZXk6IFwiI1wiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9IH0pKTtcbiAgICAgICAgY29yZVBpcGVsaW5lLnJlbW92ZVBvbGljeSh7IHBoYXNlOiBcIlJldHJ5XCIgfSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5yZW1vdmVQb2xpY3koeyBuYW1lOiBjb3JlUmVzdFBpcGVsaW5lLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgfSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5KCkpO1xuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KHN0b3JhZ2VSZXRyeVBvbGljeShyZXN0T3B0aW9ucy5yZXRyeU9wdGlvbnMpLCB7IHBoYXNlOiBcIlJldHJ5XCIgfSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZUJyb3dzZXJQb2xpY3koKSk7XG4gICAgICAgIGNvbnN0IGRvd25sZXZlbFJlc3VsdHMgPSBwcm9jZXNzRG93bmxldmVsUGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICBpZiAoZG93bmxldmVsUmVzdWx0cykge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShkb3dubGV2ZWxSZXN1bHRzLndyYXBwZWRQb2xpY2llcywgZG93bmxldmVsUmVzdWx0cy5hZnRlclJldHJ5ID8geyBhZnRlclBoYXNlOiBcIlJldHJ5XCIgfSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWxGcm9tUGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICBpZiAoY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koY29yZVJlc3RQaXBlbGluZS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KHtcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsLFxuICAgICAgICAgICAgICAgIHNjb3BlczogKF9hID0gcmVzdE9wdGlvbnMuYXVkaWVuY2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFN0b3JhZ2VPQXV0aFNjb3BlcyxcbiAgICAgICAgICAgICAgICBjaGFsbGVuZ2VDYWxsYmFja3M6IHsgYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlOiBjb3JlQ2xpZW50LmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSB9LFxuICAgICAgICAgICAgfSksIHsgcGhhc2U6IFwiU2lnblwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSh7XG4gICAgICAgICAgICAgICAgYWNjb3VudE5hbWU6IGNyZWRlbnRpYWwuYWNjb3VudE5hbWUsXG4gICAgICAgICAgICAgICAgYWNjb3VudEtleTogY3JlZGVudGlhbC5hY2NvdW50S2V5LFxuICAgICAgICAgICAgfSksIHsgcGhhc2U6IFwiU2lnblwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBpcGVsaW5lLl9jb3JlUGlwZWxpbmUgPSBjb3JlUGlwZWxpbmU7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3RPcHRpb25zKSwgeyBhbGxvd0luc2VjdXJlQ29ubmVjdGlvbjogdHJ1ZSwgaHR0cENsaWVudCwgcGlwZWxpbmU6IGNvcmVQaXBlbGluZSB9KTtcbn1cbmZ1bmN0aW9uIGdldENyZWRlbnRpYWxGcm9tUGlwZWxpbmUocGlwZWxpbmUpIHtcbiAgICAvLyBzZWUgaWYgd2Ugc3F1aXJyZWxlZCBvbmUgYXdheSBvbiB0aGUgdHlwZSBpdHNlbGZcbiAgICBpZiAocGlwZWxpbmUuX2NyZWRlbnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lLl9jcmVkZW50aWFsO1xuICAgIH1cbiAgICAvLyBpZiBpdCBjYW1lIGZyb20gYW5vdGhlciBwYWNrYWdlLCBsb29wIG92ZXIgdGhlIGZhY3RvcmllcyBhbmQgbG9vayBmb3Igb25lIGxpa2UgYmVmb3JlXG4gICAgbGV0IGNyZWRlbnRpYWwgPSBuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpO1xuICAgIGZvciAoY29uc3QgZmFjdG9yeSBvZiBwaXBlbGluZS5mYWN0b3JpZXMpIHtcbiAgICAgICAgaWYgKGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGZhY3RvcnkuY3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgd29ya3MgaWYgdGhlIGZhY3RvcnkgaGFzIGJlZW4gYXR0YWNoZWQgYSBcImNyZWRlbnRpYWxcIiBwcm9wZXJ0eS5cbiAgICAgICAgICAgIC8vIFdlIGRvIHRoYXQgaW4gbmV3UGlwZWxpbmUoKSB3aGVuIHVzaW5nIFRva2VuQ3JlZGVudGlhbC5cbiAgICAgICAgICAgIGNyZWRlbnRpYWwgPSBmYWN0b3J5LmNyZWRlbnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChmYWN0b3J5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhY3Rvcnk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWw7XG59XG5mdW5jdGlvbiBpc1N0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGZhY3RvcnkpIHtcbiAgICBpZiAoZmFjdG9yeSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsXCI7XG59XG5mdW5jdGlvbiBpc0Fub255bW91c0NyZWRlbnRpYWwoZmFjdG9yeSkge1xuICAgIGlmIChmYWN0b3J5IGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJBbm9ueW1vdXNDcmVkZW50aWFsXCI7XG59XG5mdW5jdGlvbiBpc0NvcmVIdHRwQmVhcmVyVG9rZW5GYWN0b3J5KGZhY3RvcnkpIHtcbiAgICByZXR1cm4gY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoZmFjdG9yeS5jcmVkZW50aWFsKTtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICBpZiAoZmFjdG9yeSBpbnN0YW5jZW9mIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdG9yYWdlQnJvd3NlclBvbGljeUZhY3RvcnlcIjtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgaWYgKGZhY3RvcnkgaW5zdGFuY2VvZiBTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlN0b3JhZ2VSZXRyeVBvbGljeUZhY3RvcnlcIjtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZVRlbGVtZXRyeVBvbGljeUZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiVGVsZW1ldHJ5UG9saWN5RmFjdG9yeVwiO1xufVxuZnVuY3Rpb24gaXNJbmplY3RvclBvbGljeUZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiSW5qZWN0b3JQb2xpY3lGYWN0b3J5XCI7XG59XG5mdW5jdGlvbiBpc0NvcmVIdHRwUG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgY29uc3Qga25vd25Qb2xpY2llcyA9IFtcbiAgICAgICAgXCJHZW5lcmF0ZUNsaWVudFJlcXVlc3RJZFBvbGljeVwiLFxuICAgICAgICBcIlRyYWNpbmdQb2xpY3lcIixcbiAgICAgICAgXCJMb2dQb2xpY3lcIixcbiAgICAgICAgXCJQcm94eVBvbGljeVwiLFxuICAgICAgICBcIkRpc2FibGVSZXNwb25zZURlY29tcHJlc3Npb25Qb2xpY3lcIixcbiAgICAgICAgXCJLZWVwQWxpdmVQb2xpY3lcIixcbiAgICAgICAgXCJEZXNlcmlhbGl6YXRpb25Qb2xpY3lcIixcbiAgICBdO1xuICAgIGNvbnN0IG1vY2tIdHRwQ2xpZW50ID0ge1xuICAgICAgICBzZW5kUmVxdWVzdDogYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMuY2xvbmUoKSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBtb2NrUmVxdWVzdFBvbGljeU9wdGlvbnMgPSB7XG4gICAgICAgIGxvZyhfbG9nTGV2ZWwsIF9tZXNzYWdlKSB7XG4gICAgICAgICAgICAvKiBkbyBub3RoaW5nICovXG4gICAgICAgIH0sXG4gICAgICAgIHNob3VsZExvZyhfbG9nTGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHBvbGljeUluc3RhbmNlID0gZmFjdG9yeS5jcmVhdGUobW9ja0h0dHBDbGllbnQsIG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyk7XG4gICAgY29uc3QgcG9saWN5TmFtZSA9IHBvbGljeUluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgLy8gYnVuZGxlcnMgc29tZXRpbWVzIGFkZCBhIGN1c3RvbSBzdWZmaXggdG8gdGhlIGNsYXNzIG5hbWUgdG8gbWFrZSBpdCB1bmlxdWVcbiAgICByZXR1cm4ga25vd25Qb2xpY2llcy5zb21lKChrbm93blBvbGljeU5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHBvbGljeU5hbWUuc3RhcnRzV2l0aChrbm93blBvbGljeU5hbWUpO1xuICAgIH0pO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG5jb25zdCBCbG9iU2VydmljZVByb3BlcnRpZXMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlNlcnZpY2VQcm9wZXJ0aWVzXCIsXG4gICAgeG1sTmFtZTogXCJTdG9yYWdlU2VydmljZVByb3BlcnRpZXNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2VydmljZVByb3BlcnRpZXNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBibG9iQW5hbHl0aWNzTG9nZ2luZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJMb2dnaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob3VyTWV0cmljczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkhvdXJNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIb3VyTWV0cmljc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIk1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1pbnV0ZU1ldHJpY3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNaW51dGVNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNaW51dGVNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiTWV0cmljc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29yczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcnNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ29yc1J1bGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkNvcnNSdWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdFNlcnZpY2VWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVmYXVsdFNlcnZpY2VWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWZhdWx0U2VydmljZVZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVSZXRlbnRpb25Qb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbGV0ZVJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdGljV2Vic2l0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJTdGF0aWNXZWJzaXRlXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBMb2dnaW5nID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxvZ2dpbmdcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJMb2dnaW5nXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVQcm9wZXJ0eToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZWFkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWFkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiV3JpdGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIldyaXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJldGVudGlvblBvbGljeToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBSZXRlbnRpb25Qb2xpY3kgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF5czoge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgIEluY2x1c2l2ZU1pbmltdW06IDEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEYXlzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEYXlzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTWV0cmljcyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJNZXRyaWNzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiTWV0cmljc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5jbHVkZUFQSXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbmNsdWRlQVBJc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW5jbHVkZUFQSXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV0ZW50aW9uUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvcnNSdWxlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcnNSdWxlXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29yc1J1bGVcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhbGxvd2VkT3JpZ2luczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFsbG93ZWRPcmlnaW5zXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBbGxvd2VkT3JpZ2luc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWxsb3dlZE1ldGhvZHNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFsbG93ZWRNZXRob2RzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsb3dlZEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBbGxvd2VkSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQWxsb3dlZEhlYWRlcnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBvc2VkSGVhZGVyczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV4cG9zZWRIZWFkZXJzXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHBvc2VkSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heEFnZUluU2Vjb25kczoge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgIEluY2x1c2l2ZU1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXhBZ2VJblNlY29uZHNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1heEFnZUluU2Vjb25kc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFN0YXRpY1dlYnNpdGUgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmRleERvY3VtZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW5kZXhEb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW5kZXhEb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yRG9jdW1lbnQ0MDRQYXRoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXJyb3JEb2N1bWVudDQwNFBhdGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVycm9yRG9jdW1lbnQ0MDRQYXRoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdEluZGV4RG9jdW1lbnRQYXRoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVmYXVsdEluZGV4RG9jdW1lbnRQYXRoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWZhdWx0SW5kZXhEb2N1bWVudFBhdGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTdG9yYWdlRXJyb3IgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU3RvcmFnZUVycm9yXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU3RvcmFnZUVycm9yXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uRXJyb3JEZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBdXRoZW50aWNhdGlvbkVycm9yRGV0YWlsXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBdXRoZW50aWNhdGlvbkVycm9yRGV0YWlsXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNlcnZpY2VTdGF0aXN0aWNzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JTZXJ2aWNlU3RhdGlzdGljc1wiLFxuICAgIHhtbE5hbWU6IFwiU3RvcmFnZVNlcnZpY2VTdGF0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXJ2aWNlU3RhdGlzdGljc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGdlb1JlcGxpY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkdlb1JlcGxpY2F0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEdlb1JlcGxpY2F0aW9uID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkdlb1JlcGxpY2F0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTdGF0dXNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxpdmVcIiwgXCJib290c3RyYXBcIiwgXCJ1bmF2YWlsYWJsZVwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RTeW5jT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXN0U3luY1RpbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhc3RTeW5jVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlXCIsXG4gICAgeG1sTmFtZTogXCJFbnVtZXJhdGlvblJlc3VsdHNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNlcnZpY2VFbmRwb2ludDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJlZml4OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXJrZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heFBhZ2VTaXplOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRhaW5lckl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVySXRlbXNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRhaW5lcnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGludWF0aW9uVG9rZW46IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVySXRlbSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJJdGVtXCIsXG4gICAgeG1sTmFtZTogXCJDb250YWluZXJcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJJdGVtXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNZXRhZGF0YVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUHJvcGVydGllcyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJQcm9wZXJ0aWVzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUHJvcGVydGllc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXRhZ1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHVibGljQWNjZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHVibGljQWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQdWJsaWNBY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzSW1tdXRhYmlsaXR5UG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGFzSW1tdXRhYmlsaXR5UG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIYXNJbW11dGFiaWxpdHlQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzTGVnYWxIb2xkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGFzTGVnYWxIb2xkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIYXNMZWdhbEhvbGRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdEVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlZmF1bHRFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlZmF1bHRFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZW55RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbnlFbmNyeXB0aW9uU2NvcGVPdmVycmlkZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1haW5pbmdSZXRlbnRpb25EYXlzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkltbXV0YWJsZVN0b3JhZ2VXaXRoVmVyc2lvbmluZ0VuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkltbXV0YWJsZVN0b3JhZ2VXaXRoVmVyc2lvbmluZ0VuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgS2V5SW5mbyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJLZXlJbmZvXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiS2V5SW5mb1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0c09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHBpcnlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBVc2VyRGVsZWdhdGlvbktleSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJVc2VyRGVsZWdhdGlvbktleVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlVzZXJEZWxlZ2F0aW9uS2V5XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2lnbmVkT2JqZWN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRPaWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZE9pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZFRlbmFudElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkVGlkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRUaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduZWRTdGFydHNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZFN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRTdGFydFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZEV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZEV4cGlyeVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmVkU2VydmljZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZFNlcnZpY2VcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZFNlcnZpY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduZWRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZhbHVlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgRmlsdGVyQmxvYlNlZ21lbnQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiRmlsdGVyQmxvYlNlZ21lbnRcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkZpbHRlckJsb2JTZWdtZW50XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIldoZXJlXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJXaGVyZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JzXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkZpbHRlckJsb2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGludWF0aW9uVG9rZW46IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgRmlsdGVyQmxvYkl0ZW0gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiRmlsdGVyQmxvYkl0ZW1cIixcbiAgICB4bWxOYW1lOiBcIkJsb2JcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJGaWx0ZXJCbG9iSXRlbVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbmVyTmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVGFnc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVGFnc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVGFncyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iVGFnc1wiLFxuICAgIHhtbE5hbWU6IFwiVGFnc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYlRhZ1NldDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdTZXRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlRhZ1NldFwiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJUYWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVGFnID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdcIixcbiAgICB4bWxOYW1lOiBcIlRhZ1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJLZXlcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIktleVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZhbHVlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2lnbmVkSWRlbnRpZmllciA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgeG1sTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIklkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXNzUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFjY2Vzc1BvbGljeSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzdGFydHNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV4cGlyeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQZXJtaXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQZXJtaXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlXCIsXG4gICAgeG1sTmFtZTogXCJFbnVtZXJhdGlvblJlc3VsdHNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluZXJOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWZpeDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFya2VyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhQYWdlU2l6ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWdtZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VnbWVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRmxhdExpc3RTZWdtZW50XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRmxhdExpc3RTZWdtZW50ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JGbGF0TGlzdFNlZ21lbnRcIixcbiAgICB4bWxOYW1lOiBcIkJsb2JzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkZsYXRMaXN0U2VnbWVudFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGJsb2JJdGVtczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JJdGVtc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYkl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvYlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkl0ZW1JbnRlcm5hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JJdGVtSW50ZXJuYWwgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkl0ZW1JbnRlcm5hbFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYlwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JJdGVtSW50ZXJuYWxcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JOYW1lXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlZlcnNpb25JZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmVyc2lvbklkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDdXJyZW50VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklzQ3VycmVudFZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIklzQ3VycmVudFZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUHJvcGVydGllc0ludGVybmFsXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNZXRhZGF0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iVGFnczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJUYWdzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJPYmplY3RSZXBsaWNhdGlvbk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJPck1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc1ZlcnNpb25zT25seToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkhhc1ZlcnNpb25zT25seVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSGFzVmVyc2lvbnNPbmx5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JOYW1lID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JOYW1lXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYk5hbWVcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlbmNvZGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5jb2RlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5jb2RlZFwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudFwiLFxuICAgICAgICAgICAgICAgIHhtbElzTXNUZXh0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JQcm9wZXJ0aWVzSW50ZXJuYWwgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlByb3BlcnRpZXNJbnRlcm5hbFwiLFxuICAgIHhtbE5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JQcm9wZXJ0aWVzSW50ZXJuYWxcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjcmVhdGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDcmVhdGlvbi1UaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDcmVhdGlvbi1UaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LUxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LUVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LUVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LU1ENVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1NRDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LURpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LURpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ2FjaGUtQ29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ2FjaGUtQ29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iVHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUeXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iVHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkJsb2NrQmxvYlwiLCBcIlBhZ2VCbG9iXCIsIFwiQXBwZW5kQmxvYlwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weUlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5SWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29weVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTb3VyY2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5U291cmNlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5U291cmNlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVByb2dyZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weVByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5UHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5Q29tcGxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5Q29tcGxldGlvblRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlDb21wbGV0aW9uVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcHlTdGF0dXNEZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29weVN0YXR1c0Rlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmVyRW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2ZXJFbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5jcmVtZW50YWxDb3B5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW5jcmVtZW50YWxDb3B5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbmNyZW1lbnRhbENvcHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdGluYXRpb25TbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlc3RpbmF0aW9uU25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlc3RpbmF0aW9uU25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1haW5pbmdSZXRlbnRpb25EYXlzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBY2Nlc3NUaWVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NUaWVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQMTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDE1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlAyMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQMzBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDQwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA1MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDcwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA4MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJIb3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29vbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmNoaXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbGRcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXJJbmZlcnJlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1RpZXJJbmZlcnJlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQWNjZXNzVGllckluZmVycmVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFyY2hpdmVTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBcmNoaXZlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBcmNoaXZlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWh5ZHJhdGUtcGVuZGluZy10by1ob3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVoeWRyYXRlLXBlbmRpbmctdG8tY29vbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWh5ZHJhdGUtcGVuZGluZy10by1jb2xkXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ3VzdG9tZXJQcm92aWRlZEtleVNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ3VzdG9tZXJQcm92aWRlZEtleVNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5jcnlwdGlvblNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllckNoYW5nZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1RpZXJDaGFuZ2VUaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NUaWVyQ2hhbmdlVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVGFnQ291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlRhZ0NvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwaXJ5LVRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cGlyeS1UaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZWFsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZWFsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWh5ZHJhdGVQcmlvcml0eToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlJlaHlkcmF0ZVByaW9yaXR5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWh5ZHJhdGVQcmlvcml0eVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkhpZ2hcIiwgXCJTdGFuZGFyZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RBY2Nlc3NlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGFzdEFjY2Vzc1RpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhc3RBY2Nlc3NUaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW1tdXRhYmlsaXR5UG9saWN5VW50aWxEYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lVbnRpbERhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW1tdXRhYmlsaXR5UG9saWN5TW9kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW1tdXRhYmlsaXR5UG9saWN5TW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxlZ2FsSG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVnYWxIb2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IExpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJMaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2VcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNlcnZpY2VFbmRwb2ludDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbmVyTmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmaXg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hcmtlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4UGFnZVNpemU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVsaW1pdGVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsaW1pdGVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxpbWl0ZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWdtZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VnbWVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRpbnVhdGlvblRva2VuOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnRcIixcbiAgICB4bWxOYW1lOiBcIkJsb2JzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkhpZXJhcmNoeUxpc3RTZWdtZW50XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYlByZWZpeGVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlByZWZpeGVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iUHJlZml4ZXNcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iSXRlbXNcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJCbG9iXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSXRlbUludGVybmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlByZWZpeCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlByZWZpeFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYk5hbWVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrTG9va3VwTGlzdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0xvb2t1cExpc3RcIixcbiAgICB4bWxOYW1lOiBcIkJsb2NrTGlzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrTG9va3VwTGlzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbW1pdHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbW1pdHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuY29tbWl0dGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVW5jb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlVuY29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiVW5jb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGF0ZXN0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGF0ZXN0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMYXRlc3RcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJMYXRlc3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tMaXN0ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrTGlzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrTGlzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbW1pdHRlZEJsb2Nrczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbW1pdHRlZEJsb2Nrc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29tbWl0dGVkQmxvY2tzXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuY29tbWl0dGVkQmxvY2tzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVW5jb21taXR0ZWRCbG9ja3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlVuY29tbWl0dGVkQmxvY2tzXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpemU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaXplXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaXplXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUxpc3QgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUxpc3RcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlTGlzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHBhZ2VSYW5nZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhclJhbmdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlUmFuZ2UgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgeG1sTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ2xlYXJSYW5nZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgeG1sTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5kXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBRdWVyeVJlcXVlc3QgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUXVlcnlSZXF1ZXN0XCIsXG4gICAgeG1sTmFtZTogXCJRdWVyeVJlcXVlc3RcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVJlcXVlc3RcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBxdWVyeVR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeVR5cGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlF1ZXJ5VHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFeHByZXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHByZXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5wdXRTZXJpYWxpemF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW5wdXRTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbnB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG91dHB1dFNlcmlhbGl6YXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJPdXRwdXRTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJPdXRwdXRTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUXVlcnlTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBRdWVyeVNlcmlhbGl6YXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUXVlcnlTZXJpYWxpemF0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUXVlcnlTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJGb3JtYXRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeUZvcm1hdFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUXVlcnlGb3JtYXQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUXVlcnlGb3JtYXRcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeUZvcm1hdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJUeXBlXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJUeXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiZGVsaW1pdGVkXCIsIFwianNvblwiLCBcImFycm93XCIsIFwicGFycXVldFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGpzb25UZXh0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkpzb25UZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcnJvd0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFycXVldFRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUGFycXVldFRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQYXJxdWV0VGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiYW55XCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICB4bWxOYW1lOiBcIkRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb2x1bW5TZXBhcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb2x1bW5TZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbHVtblNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpZWxkUXVvdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJGaWVsZFF1b3RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJGaWVsZFF1b3RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVjb3JkU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlc2NhcGVDaGFyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXNjYXBlQ2hhclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXNjYXBlQ2hhclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNQcmVzZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGVhZGVyc1ByZXNlbnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhhc0hlYWRlcnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgSnNvblRleHRDb25maWd1cmF0aW9uID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkpzb25UZXh0Q29uZmlndXJhdGlvblwiLFxuICAgIHhtbE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVjb3JkU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcnJvd0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXJyb3dDb25maWd1cmF0aW9uXCIsXG4gICAgeG1sTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTY2hlbWFcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNjaGVtYVwiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJGaWVsZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQXJyb3dGaWVsZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFycm93RmllbGQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXJyb3dGaWVsZFwiLFxuICAgIHhtbE5hbWU6IFwiRmllbGRcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcnJvd0ZpZWxkXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWNpc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByZWNpc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJlY2lzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTY2FsZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2NhbGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9zZXRQcm9wZXJ0aWVzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTZXRQcm9wZXJ0aWVzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZVNldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2Vfc2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VHZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFN0YXRpc3RpY3NIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0U3RhdGlzdGljc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFN0YXRpc3RpY3NFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfbGlzdENvbnRhaW5lcnNTZWdtZW50SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2xpc3RDb250YWluZXJzU2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRBY2NvdW50SW5mb0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBza3VOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0dSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9SQUdSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9aUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlbWl1bV9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJGaWxlU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9ja0Jsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0hpZXJhcmNoaWNhbE5hbWVzcGFjZUVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9zdWJtaXRCYXRjaEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX3N1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VGaWx0ZXJCbG9ic0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9maWx0ZXJCbG9ic0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9maWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDcmVhdGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jcmVhdGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyQ3JlYXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyQ3JlYXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlRHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5maW5pdGVcIiwgXCJmaXhlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxvY2tlZFwiLCBcInVubG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iUHVibGljQWNjZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1wdWJsaWMtYWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiY29udGFpbmVyXCIsIFwiYmxvYlwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc0ltbXV0YWJpbGl0eVBvbGljeToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaGFzLWltbXV0YWJpbGl0eS1wb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaGFzLWltbXV0YWJpbGl0eS1wb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzTGVnYWxIb2xkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1oYXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1oYXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0RW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVmYXVsdC1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVueUVuY3J5cHRpb25TY29wZU92ZXJyaWRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmxlLXN0b3JhZ2Utd2l0aC12ZXJzaW9uaW5nLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmxlLXN0b3JhZ2Utd2l0aC12ZXJzaW9uaW5nLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyRGVsZXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZGVsZXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckRlbGV0ZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldE1ldGFkYXRhSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc2V0TWV0YWRhdGFIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9nZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGJsb2JQdWJsaWNBY2Nlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVzdG9yZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3Jlc3RvcmVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVzdG9yZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3Jlc3RvcmVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmFtZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmFtZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZW5hbWVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmFtZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZW5hbWVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJTdWJtaXRCYXRjaEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3N1Ym1pdEJhdGNoSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJGaWx0ZXJCbG9ic0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2ZpbHRlckJsb2JzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9maWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2FjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2FjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVsZWFzZUxlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZW5ld0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJCcmVha0xlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYnJlYWtMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJCcmVha0xlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlVGltZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQ2hhbmdlTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9saXN0QmxvYkZsYXRTZWdtZW50SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfbGlzdEJsb2JGbGF0U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2xpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2t1TmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0xSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9HUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfUkFHUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfWlJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlByZW1pdW1fTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NvdW50S2luZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlVjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRmlsZVN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQmxvY2tCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNIaWVyYXJjaGljYWxOYW1lc3BhY2VFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkRvd25sb2FkSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Rvd25sb2FkSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEb3dubG9hZEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNyZWF0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW9yLXBvbGljeS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1vci1wb2xpY3ktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3RSZXBsaWNhdGlvblJ1bGVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1vclwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1vci1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtb3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50UmFuZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXJhbmdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudEVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iVHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkJsb2NrQmxvYlwiLCBcIlBhZ2VCbG9iXCIsIFwiQXBwZW5kQmxvYlwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlDb21wbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1jb21wbGV0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1jb21wbGV0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzLWRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzLWRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5UHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTb3VyY2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJwZW5kaW5nXCIsIFwic3VjY2Vzc1wiLCBcImFib3J0ZWRcIiwgXCJmYWlsZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDdXJyZW50VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWN1cnJlbnQtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NlcHRSYW5nZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWdDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXRhZy1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VhbGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0QWNjZXNzZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxhc3QtYWNjZXNzLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJNdXRhYmxlXCIsIFwiVW5sb2NrZWRcIiwgXCJMb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkRvd25sb2FkRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Rvd25sb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyZWF0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY3JlYXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtbWV0YS1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3RSZXBsaWNhdGlvblBvbGljeUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1vci1wb2xpY3ktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtb3ItcG9saWN5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0UmVwbGljYXRpb25SdWxlczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtb3JcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtb3ItXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW9yXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUNvbXBsZXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSW5jcmVtZW50YWxDb3B5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbmNyZW1lbnRhbC1jb3B5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWluY3JlbWVudGFsLWNvcHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdGluYXRpb25TbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1kZXN0aW5hdGlvbi1zbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWRlc3RpbmF0aW9uLXNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsZWFzZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwaXJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicmVha2luZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicm9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NlcHRSYW5nZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NUaWVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXJJbmZlcnJlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjZXNzLXRpZXItaW5mZXJyZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjZXNzLXRpZXItaW5mZXJyZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXJjaGl2ZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYXJjaGl2ZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYXJjaGl2ZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NUaWVyQ2hhbmdlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1jaGFuZ2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1jaGFuZ2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDdXJyZW50VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWN1cnJlbnQtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWdDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXRhZy1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXhwaXJ5LXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXhwaXJ5LXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlYWxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZWFsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZWFsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZWh5ZHJhdGUtcHJpb3JpdHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJIaWdoXCIsIFwiU3RhbmRhcmRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0QWNjZXNzZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxhc3QtYWNjZXNzLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJNdXRhYmxlXCIsIFwiVW5sb2NrZWRcIiwgXCJMb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlVuZGVsZXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3VuZGVsZXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JVbmRlbGV0ZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3VuZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JVbmRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRFeHBpcnlIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0RXhwaXJ5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRFeHBpcnlIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEV4cGlyeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEh0dHBIZWFkZXJzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEh0dHBIZWFkZXJzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0SHR0cEhlYWRlcnNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0SW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9kZWxldGVJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TGVnYWxIb2xkSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldE1ldGFkYXRhSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldE1ldGFkYXRhSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRNZXRhZGF0YUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hY3F1aXJlTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JSZWxlYXNlTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVsZWFzZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3JlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlJlbmV3TGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVuZXdMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUmVuZXdMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDaGFuZ2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQnJlYWtMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9icmVha0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JCcmVha0xlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlVGltZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9icmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNyZWF0ZVNuYXBzaG90SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NyZWF0ZVNuYXBzaG90SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfY3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlN0YXJ0Q29weUZyb21VUkxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc3RhcnRDb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlN0YXJ0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDb3B5RnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ29weUZyb21VUkxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1czoge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWJvcnRDb3B5RnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hYm9ydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWJvcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRpZXJIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGllckhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGllckhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRUaWVyRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldFRpZXJFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0QWNjb3VudEluZm9IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2t1TmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0xSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9HUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfUkFHUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfWlJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlByZW1pdW1fTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NvdW50S2luZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlVjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRmlsZVN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQmxvY2tCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNIaWVyYXJjaGljYWxOYW1lc3BhY2VFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlF1ZXJ5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3F1ZXJ5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JRdWVyeUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtbWV0YS1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRSYW5nZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUNvbXBsZXRpb25UaW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlRHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5maW5pdGVcIiwgXCJmaXhlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxvY2tlZFwiLCBcInVubG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXB0UmFuZ2VzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYWNjZXB0LXJhbmdlc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiYWNjZXB0LXJhbmdlc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9xdWVyeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUXVlcnlFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0VGFnc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRUYWdzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JHZXRUYWdzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRhZ3NIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGFnc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGFnc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRhZ3NFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ3JlYXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jcmVhdGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDcmVhdGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl91cGxvYWRQYWdlc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBsb2FkUGFnZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfY2xlYXJQYWdlc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNsZWFyUGFnZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2dldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0RpZmZIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2dldFBhZ2VSYW5nZXNEaWZmRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlJlc2l6ZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfcmVzaXplSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iUmVzaXplSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JSZXNpemVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3Jlc2l6ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl91cGRhdGVTZXF1ZW5jZU51bWJlckV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NvcHlJbmNyZW1lbnRhbEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJwZW5kaW5nXCIsIFwic3VjY2Vzc1wiLCBcImFib3J0ZWRcIiwgXCJmYWlsZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ29weUluY3JlbWVudGFsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2NyZWF0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQ3JlYXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2NyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXBwZW5kQmxvYkFwcGVuZEJsb2NrSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JBcHBlbmRPZmZzZXQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXBwZW5kQmxvYl9hcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQXBwZW5kQmxvY2tFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrRnJvbVVybEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQXBwZW5kT2Zmc2V0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1hcHBlbmQtb2Zmc2V0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXBwZW5kQmxvYlNlYWxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2Jfc2VhbEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iU2VhbEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VhbGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iU2VhbEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXBwZW5kQmxvYl9zZWFsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iVXBsb2FkSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfdXBsb2FkSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlVwbG9hZEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfdXBsb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlVwbG9hZEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfcHV0QmxvYkZyb21VcmxIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfcHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2Jfc3RhZ2VCbG9ja0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2Jfc3RhZ2VCbG9ja0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX2NvbW1pdEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfY29tbWl0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX2dldEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfZ2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkdldEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxudmFyIE1hcHBlcnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIEFjY2Vzc1BvbGljeTogQWNjZXNzUG9saWN5LFxuICAgIEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzOiBBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVyczogQXBwZW5kQmxvYkNyZWF0ZUhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYlNlYWxFeGNlcHRpb25IZWFkZXJzOiBBcHBlbmRCbG9iU2VhbEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYlNlYWxIZWFkZXJzOiBBcHBlbmRCbG9iU2VhbEhlYWRlcnMsXG4gICAgQXJyb3dDb25maWd1cmF0aW9uOiBBcnJvd0NvbmZpZ3VyYXRpb24sXG4gICAgQXJyb3dGaWVsZDogQXJyb3dGaWVsZCxcbiAgICBCbG9iQWJvcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQWJvcnRDb3B5RnJvbVVSTEhlYWRlcnM6IEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnM6IEJsb2JBY3F1aXJlTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JCcmVha0xlYXNlSGVhZGVyczogQmxvYkJyZWFrTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkNoYW5nZUxlYXNlSGVhZGVyczogQmxvYkNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICBCbG9iQ29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzOiBCbG9iQ29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JDb3B5RnJvbVVSTEhlYWRlcnM6IEJsb2JDb3B5RnJvbVVSTEhlYWRlcnMsXG4gICAgQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVyczogQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQ3JlYXRlU25hcHNob3RIZWFkZXJzOiBCbG9iQ3JlYXRlU25hcHNob3RIZWFkZXJzLFxuICAgIEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzOiBCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iRGVsZXRlSGVhZGVyczogQmxvYkRlbGV0ZUhlYWRlcnMsXG4gICAgQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzOiBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyxcbiAgICBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzOiBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JEb3dubG9hZEhlYWRlcnM6IEJsb2JEb3dubG9hZEhlYWRlcnMsXG4gICAgQmxvYkZsYXRMaXN0U2VnbWVudDogQmxvYkZsYXRMaXN0U2VnbWVudCxcbiAgICBCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzOiBCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnM6IEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzOiBCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzOiBCbG9iR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgQmxvYkdldFRhZ3NFeGNlcHRpb25IZWFkZXJzOiBCbG9iR2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkdldFRhZ3NIZWFkZXJzOiBCbG9iR2V0VGFnc0hlYWRlcnMsXG4gICAgQmxvYkhpZXJhcmNoeUxpc3RTZWdtZW50OiBCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnQsXG4gICAgQmxvYkl0ZW1JbnRlcm5hbDogQmxvYkl0ZW1JbnRlcm5hbCxcbiAgICBCbG9iTmFtZTogQmxvYk5hbWUsXG4gICAgQmxvYlByZWZpeDogQmxvYlByZWZpeCxcbiAgICBCbG9iUHJvcGVydGllc0ludGVybmFsOiBCbG9iUHJvcGVydGllc0ludGVybmFsLFxuICAgIEJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlF1ZXJ5SGVhZGVyczogQmxvYlF1ZXJ5SGVhZGVycyxcbiAgICBCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYlJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnM6IEJsb2JSZWxlYXNlTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYlJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JSZW5ld0xlYXNlSGVhZGVyczogQmxvYlJlbmV3TGVhc2VIZWFkZXJzLFxuICAgIEJsb2JTZXJ2aWNlUHJvcGVydGllczogQmxvYlNlcnZpY2VQcm9wZXJ0aWVzLFxuICAgIEJsb2JTZXJ2aWNlU3RhdGlzdGljczogQmxvYlNlcnZpY2VTdGF0aXN0aWNzLFxuICAgIEJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0RXhwaXJ5SGVhZGVyczogQmxvYlNldEV4cGlyeUhlYWRlcnMsXG4gICAgQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVyczogQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0SHR0cEhlYWRlcnNIZWFkZXJzOiBCbG9iU2V0SHR0cEhlYWRlcnNIZWFkZXJzLFxuICAgIEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyczogQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnMsXG4gICAgQmxvYlNldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzOiBCbG9iU2V0TGVnYWxIb2xkSGVhZGVycyxcbiAgICBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRNZXRhZGF0YUhlYWRlcnM6IEJsb2JTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgQmxvYlNldFRhZ3NFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldFRhZ3NIZWFkZXJzOiBCbG9iU2V0VGFnc0hlYWRlcnMsXG4gICAgQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0VGllckV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldFRpZXJIZWFkZXJzOiBCbG9iU2V0VGllckhlYWRlcnMsXG4gICAgQmxvYlN0YXJ0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzOiBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlN0YXJ0Q29weUZyb21VUkxIZWFkZXJzOiBCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnMsXG4gICAgQmxvYlRhZzogQmxvYlRhZyxcbiAgICBCbG9iVGFnczogQmxvYlRhZ3MsXG4gICAgQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVyczogQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iVW5kZWxldGVIZWFkZXJzOiBCbG9iVW5kZWxldGVIZWFkZXJzLFxuICAgIEJsb2NrOiBCbG9jayxcbiAgICBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnM6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnMsXG4gICAgQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzLFxuICAgIEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsRXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsSGVhZGVyczogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JTdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnM6IEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVyczogQmxvY2tCbG9iU3RhZ2VCbG9ja0hlYWRlcnMsXG4gICAgQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzOiBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzLFxuICAgIEJsb2NrTGlzdDogQmxvY2tMaXN0LFxuICAgIEJsb2NrTG9va3VwTGlzdDogQmxvY2tMb29rdXBMaXN0LFxuICAgIENsZWFyUmFuZ2U6IENsZWFyUmFuZ2UsXG4gICAgQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzOiBDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzLFxuICAgIENvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJCcmVha0xlYXNlSGVhZGVyczogQ29udGFpbmVyQnJlYWtMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyQ2hhbmdlTGVhc2VIZWFkZXJzOiBDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyQ3JlYXRlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJDcmVhdGVIZWFkZXJzOiBDb250YWluZXJDcmVhdGVIZWFkZXJzLFxuICAgIENvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyRGVsZXRlSGVhZGVyczogQ29udGFpbmVyRGVsZXRlSGVhZGVycyxcbiAgICBDb250YWluZXJGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJGaWx0ZXJCbG9ic0hlYWRlcnM6IENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVycyxcbiAgICBDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnM6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0QWNjb3VudEluZm9IZWFkZXJzOiBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckdldFByb3BlcnRpZXNIZWFkZXJzOiBDb250YWluZXJHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBDb250YWluZXJJdGVtOiBDb250YWluZXJJdGVtLFxuICAgIENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50SGVhZGVyczogQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnMsXG4gICAgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzLFxuICAgIENvbnRhaW5lclByb3BlcnRpZXM6IENvbnRhaW5lclByb3BlcnRpZXMsXG4gICAgQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzOiBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzLFxuICAgIENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVuYW1lSGVhZGVyczogQ29udGFpbmVyUmVuYW1lSGVhZGVycyxcbiAgICBDb250YWluZXJSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnM6IENvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzLFxuICAgIENvbnRhaW5lclJlc3RvcmVFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZXN0b3JlSGVhZGVyczogQ29udGFpbmVyUmVzdG9yZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzOiBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzLFxuICAgIENvbnRhaW5lclNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclNldE1ldGFkYXRhSGVhZGVyczogQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzLFxuICAgIENvbnRhaW5lclN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVyczogQ29udGFpbmVyU3VibWl0QmF0Y2hIZWFkZXJzLFxuICAgIENvcnNSdWxlOiBDb3JzUnVsZSxcbiAgICBEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvbjogRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb24sXG4gICAgRmlsdGVyQmxvYkl0ZW06IEZpbHRlckJsb2JJdGVtLFxuICAgIEZpbHRlckJsb2JTZWdtZW50OiBGaWx0ZXJCbG9iU2VnbWVudCxcbiAgICBHZW9SZXBsaWNhdGlvbjogR2VvUmVwbGljYXRpb24sXG4gICAgSnNvblRleHRDb25maWd1cmF0aW9uOiBKc29uVGV4dENvbmZpZ3VyYXRpb24sXG4gICAgS2V5SW5mbzogS2V5SW5mbyxcbiAgICBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlOiBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlLFxuICAgIExpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZTogTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlLFxuICAgIExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlOiBMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZSxcbiAgICBMb2dnaW5nOiBMb2dnaW5nLFxuICAgIE1ldHJpY3M6IE1ldHJpY3MsXG4gICAgUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYkNsZWFyUGFnZXNIZWFkZXJzOiBQYWdlQmxvYkNsZWFyUGFnZXNIZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ29weUluY3JlbWVudGFsRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ29weUluY3JlbWVudGFsSGVhZGVyczogUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxIZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ3JlYXRlSGVhZGVyczogUGFnZUJsb2JDcmVhdGVIZWFkZXJzLFxuICAgIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVyczogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnMsXG4gICAgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzLFxuICAgIFBhZ2VCbG9iUmVzaXplRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JSZXNpemVFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iUmVzaXplSGVhZGVyczogUGFnZUJsb2JSZXNpemVIZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVyczogUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnM6IFBhZ2VCbG9iVXBsb2FkUGFnZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVyczogUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxIZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzOiBQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVycyxcbiAgICBQYWdlTGlzdDogUGFnZUxpc3QsXG4gICAgUGFnZVJhbmdlOiBQYWdlUmFuZ2UsXG4gICAgUXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0LFxuICAgIFF1ZXJ5UmVxdWVzdDogUXVlcnlSZXF1ZXN0LFxuICAgIFF1ZXJ5U2VyaWFsaXphdGlvbjogUXVlcnlTZXJpYWxpemF0aW9uLFxuICAgIFJldGVudGlvblBvbGljeTogUmV0ZW50aW9uUG9saWN5LFxuICAgIFNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUZpbHRlckJsb2JzSGVhZGVyczogU2VydmljZUZpbHRlckJsb2JzSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnM6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgU2VydmljZUdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUdldFByb3BlcnRpZXNIZWFkZXJzOiBTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgU2VydmljZUdldFN0YXRpc3RpY3NFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUdldFN0YXRpc3RpY3NIZWFkZXJzOiBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnMsXG4gICAgU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVyczogU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzLFxuICAgIFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50SGVhZGVyczogU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnMsXG4gICAgU2VydmljZVNldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZVNldFByb3BlcnRpZXNIZWFkZXJzOiBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyczogU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzOiBTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzLFxuICAgIFNpZ25lZElkZW50aWZpZXI6IFNpZ25lZElkZW50aWZpZXIsXG4gICAgU3RhdGljV2Vic2l0ZTogU3RhdGljV2Vic2l0ZSxcbiAgICBTdG9yYWdlRXJyb3I6IFN0b3JhZ2VFcnJvcixcbiAgICBVc2VyRGVsZWdhdGlvbktleTogVXNlckRlbGVnYXRpb25LZXlcbn0pO1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG5jb25zdCBjb250ZW50VHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29udGVudFR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iU2VydmljZVByb3BlcnRpZXMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJibG9iU2VydmljZVByb3BlcnRpZXNcIixcbiAgICBtYXBwZXI6IEJsb2JTZXJ2aWNlUHJvcGVydGllcyxcbn07XG5jb25zdCBhY2NlcHQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY2NlcHRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFwcGxpY2F0aW9uL3htbFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBY2NlcHRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHVybCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInVybFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ1cmxcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwidXJsXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBza2lwRW5jb2Rpbmc6IHRydWUsXG59O1xuY29uc3QgcmVzdHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInJlc3R5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInNlcnZpY2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicmVzdHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInByb3BlcnRpZXNcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdGltZW91dEluU2Vjb25kcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwidGltZW91dEluU2Vjb25kc1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgIEluY2x1c2l2ZU1pbmltdW06IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInRpbWVvdXRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ0aW1lb3V0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB2ZXJzaW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwidmVyc2lvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiMjAyNC0xMS0wNFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJlcXVlc3RJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmVxdWVzdElkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWNjZXB0MSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjY2VwdFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24veG1sXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2VwdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzdGF0c1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImxpc3RcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcHJlZml4ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJwcmVmaXhcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInByZWZpeFwiLFxuICAgICAgICB4bWxOYW1lOiBcInByZWZpeFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbWFya2VyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtYXJrZXJcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIm1hcmtlclwiLFxuICAgICAgICB4bWxOYW1lOiBcIm1hcmtlclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbWF4UGFnZVNpemUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1heFBhZ2VTaXplXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibWF4cmVzdWx0c1wiLFxuICAgICAgICB4bWxOYW1lOiBcIm1heHJlc3VsdHNcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGluY2x1ZGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImluY2x1ZGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImluY2x1ZGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJpbmNsdWRlXCIsXG4gICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkxpc3RDb250YWluZXJzSW5jbHVkZVR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIm1ldGFkYXRhXCIsIFwiZGVsZXRlZFwiLCBcInN5c3RlbVwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIGNvbGxlY3Rpb25Gb3JtYXQ6IFwiQ1NWXCIsXG59O1xuY29uc3Qga2V5SW5mbyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImtleUluZm9cIixcbiAgICBtYXBwZXI6IEtleUluZm8sXG59O1xuY29uc3QgY29tcDMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJ1c2VyZGVsZWdhdGlvbmtleVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByZXN0eXBlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInJlc3R5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFjY291bnRcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicmVzdHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYm9keSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJvZHlcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYm9keVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJib2R5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyZWFtXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wNCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImJhdGNoXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbnRlbnRMZW5ndGggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb250ZW50TGVuZ3RoXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtdWx0aXBhcnRDb250ZW50VHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcIm11bHRpcGFydENvbnRlbnRUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYmxvYnNcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgd2hlcmUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIndoZXJlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ3aGVyZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIndoZXJlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByZXN0eXBlMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInJlc3R5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNvbnRhaW5lclwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJyZXN0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtZXRhZGF0YSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibWV0YWRhdGFcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtbWV0YS1cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWNjZXNzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJhY2Nlc3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1wdWJsaWMtYWNjZXNzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVmYXVsdEVuY3J5cHRpb25TY29wZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcImNvbnRhaW5lckVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICBcImRlZmF1bHRFbmNyeXB0aW9uU2NvcGVcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlZmF1bHQtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVmYXVsdC1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJjb250YWluZXJFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgXCJwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGVcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbnktZW5jcnlwdGlvbi1zY29wZS1vdmVycmlkZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVhc2VJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibGVhc2VBY2Nlc3NDb25kaXRpb25zXCIsIFwibGVhc2VJZFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmTW9kaWZpZWRTaW5jZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZNb2RpZmllZFNpbmNlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZi1Nb2RpZmllZC1TaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIklmLU1vZGlmaWVkLVNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZlVubW9kaWZpZWRTaW5jZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZVbm1vZGlmaWVkU2luY2VcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJJZi1Vbm1vZGlmaWVkLVNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wNiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIm1ldGFkYXRhXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA3ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYWNsXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbnRhaW5lckFjbCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29udGFpbmVyQWNsXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250YWluZXJBY2xcIixcbiAgICAgICAgeG1sTmFtZTogXCJTaWduZWRJZGVudGlmaWVyc1wiLFxuICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA4ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidW5kZWxldGVcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVsZXRlZENvbnRhaW5lck5hbWUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImRlbGV0ZWRDb250YWluZXJOYW1lXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLW5hbWVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLW5hbWVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGRlbGV0ZWRDb250YWluZXJWZXJzaW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJkZWxldGVkQ29udGFpbmVyVmVyc2lvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZWxldGVkLWNvbnRhaW5lci12ZXJzaW9uXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWxldGVkLWNvbnRhaW5lci12ZXJzaW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wOSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInJlbmFtZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VDb250YWluZXJOYW1lID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwic291cmNlQ29udGFpbmVyTmFtZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250YWluZXItbmFtZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250YWluZXItbmFtZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlTGVhc2VJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlTGVhc2VJZFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtbGVhc2UtaWRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDEwID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwibGVhc2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWN0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhY3F1aXJlXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkdXJhdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZHVyYXRpb25cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcm9wb3NlZExlYXNlSWQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByb3Bvc2VkTGVhc2VJZFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcHJvcG9zZWQtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInJlbGVhc2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGxlYXNlSWQxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwibGVhc2VJZFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInJlbmV3XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY3Rpb24zID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJicmVha1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYnJlYWtQZXJpb2QgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImJyZWFrUGVyaW9kXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWJyZWFrLXBlcmlvZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtYnJlYWstcGVyaW9kXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY3Rpb240ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJjaGFuZ2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByb3Bvc2VkTGVhc2VJZDEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJwcm9wb3NlZExlYXNlSWRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXByb3Bvc2VkLWxlYXNlLWlkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpbmNsdWRlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiaW5jbHVkZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiaW5jbHVkZVwiLFxuICAgICAgICB4bWxOYW1lOiBcImluY2x1ZGVcIixcbiAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiTGlzdEJsb2JzSW5jbHVkZUl0ZW1cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29weVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNuYXBzaG90c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmNvbW1pdHRlZGJsb2JzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZlcnNpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRhZ3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaW1tdXRhYmlsaXR5cG9saWN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlZ2FsaG9sZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWxldGVkd2l0aHZlcnNpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBjb2xsZWN0aW9uRm9ybWF0OiBcIkNTVlwiLFxufTtcbmNvbnN0IGRlbGltaXRlciA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImRlbGltaXRlclwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkZWxpbWl0ZXJcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiZGVsaW1pdGVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzbmFwc2hvdCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic25hcHNob3RcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInNuYXBzaG90XCIsXG4gICAgICAgIHhtbE5hbWU6IFwic25hcHNob3RcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHZlcnNpb25JZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwidmVyc2lvbklkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ2ZXJzaW9uaWRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ2ZXJzaW9uaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJhbmdlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJyYW5nZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yYW5nZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJhbmdlR2V0Q29udGVudE1ENSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmFuZ2VHZXRDb250ZW50TUQ1XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlLWdldC1jb250ZW50LW1kNVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2VHZXRDb250ZW50Q1JDNjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInJhbmdlR2V0Q29udGVudENSQzY0XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yYW5nZS1nZXQtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGVuY3J5cHRpb25LZXkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNwa0luZm9cIiwgXCJlbmNyeXB0aW9uS2V5XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZW5jcnlwdGlvbktleVNoYTI1NiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY3BrSW5mb1wiLCBcImVuY3J5cHRpb25LZXlTaGEyNTZcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGVuY3J5cHRpb25BbGdvcml0aG0gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNwa0luZm9cIiwgXCJlbmNyeXB0aW9uQWxnb3JpdGhtXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tYWxnb3JpdGhtXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWFsZ29yaXRobVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZNYXRjaCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZNYXRjaFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSWYtTWF0Y2hcIixcbiAgICAgICAgeG1sTmFtZTogXCJJZi1NYXRjaFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZOb25lTWF0Y2ggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLCBcImlmTm9uZU1hdGNoXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZi1Ob25lLU1hdGNoXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiSWYtTm9uZS1NYXRjaFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZUYWdzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZlRhZ3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtdGFnc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtaWYtdGFnc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVsZXRlU25hcHNob3RzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJkZWxldGVTbmFwc2hvdHNcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVsZXRlLXNuYXBzaG90c1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVsZXRlLXNuYXBzaG90c1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluY2x1ZGVcIiwgXCJvbmx5XCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkRlbGV0ZVR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImJsb2JEZWxldGVUeXBlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkZWxldGV0eXBlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiZGVsZXRldHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDExID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiZXhwaXJ5XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGV4cGlyeU9wdGlvbnMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJleHBpcnlPcHRpb25zXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXhwaXJ5LW9wdGlvblwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWV4cGlyeS1vcHRpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGV4cGlyZXNPbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZXhwaXJlc09uXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWV4cGlyeS10aW1lXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1leHBpcnktdGltZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNhY2hlQ29udHJvbCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNhY2hlQ29udHJvbFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY2FjaGUtY29udHJvbFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnRUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudFR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LXR5cGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC10eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudE1ENSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnRFbmNvZGluZyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnRFbmNvZGluZ1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnRMYW5ndWFnZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnRMYW5ndWFnZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnREaXNwb3NpdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnREaXNwb3NpdGlvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDEyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiaW1tdXRhYmlsaXR5UG9saWNpZXNcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnlcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGltbXV0YWJpbGl0eVBvbGljeU1vZGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImltbXV0YWJpbGl0eVBvbGljeU1vZGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJNdXRhYmxlXCIsIFwiVW5sb2NrZWRcIiwgXCJMb2NrZWRcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJsZWdhbGhvbGRcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVnYWxIb2xkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwibGVnYWxIb2xkXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBlbmNyeXB0aW9uU2NvcGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImVuY3J5cHRpb25TY29wZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzbmFwc2hvdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0aWVyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0aWVyXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICBcIlA0XCIsXG4gICAgICAgICAgICAgICAgXCJQNlwiLFxuICAgICAgICAgICAgICAgIFwiUDEwXCIsXG4gICAgICAgICAgICAgICAgXCJQMTVcIixcbiAgICAgICAgICAgICAgICBcIlAyMFwiLFxuICAgICAgICAgICAgICAgIFwiUDMwXCIsXG4gICAgICAgICAgICAgICAgXCJQNDBcIixcbiAgICAgICAgICAgICAgICBcIlA1MFwiLFxuICAgICAgICAgICAgICAgIFwiUDYwXCIsXG4gICAgICAgICAgICAgICAgXCJQNzBcIixcbiAgICAgICAgICAgICAgICBcIlA4MFwiLFxuICAgICAgICAgICAgICAgIFwiSG90XCIsXG4gICAgICAgICAgICAgICAgXCJDb29sXCIsXG4gICAgICAgICAgICAgICAgXCJBcmNoaXZlXCIsXG4gICAgICAgICAgICAgICAgXCJDb2xkXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmVoeWRyYXRlUHJpb3JpdHkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInJlaHlkcmF0ZVByaW9yaXR5XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiSGlnaFwiLCBcIlN0YW5kYXJkXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlSWZNb2RpZmllZFNpbmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwic291cmNlSWZNb2RpZmllZFNpbmNlXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbW9kaWZpZWQtc2luY2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1tb2RpZmllZC1zaW5jZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlSWZVbm1vZGlmaWVkU2luY2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VJZlVubW9kaWZpZWRTaW5jZVwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi11bm1vZGlmaWVkLXNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZk1hdGNoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJzb3VyY2VJZk1hdGNoXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1tYXRjaFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLW1hdGNoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZk5vbmVNYXRjaCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZUlmTm9uZU1hdGNoXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbm9uZS1tYXRjaFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLW5vbmUtbWF0Y2hcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUlmVGFncyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwic291cmNlSWZUYWdzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi10YWdzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtdGFnc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weVNvdXJjZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvcHlTb3VyY2VcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iVGFnc1N0cmluZyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYlRhZ3NTdHJpbmdcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdGFnc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtdGFnc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc2VhbEJsb2IgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNlYWxCbG9iXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlYWwtYmxvYlwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2VhbC1ibG9iXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVnYWxIb2xkMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibGVnYWxIb2xkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB4TXNSZXF1aXJlc1N5bmMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJ4TXNSZXF1aXJlc1N5bmNcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInRydWVcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1aXJlcy1zeW5jXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VDb250ZW50TUQ1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VDb250ZW50TUQ1XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250ZW50LW1kNVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5U291cmNlQXV0aG9yaXphdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29weVNvdXJjZUF1dGhvcml6YXRpb25cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYXV0aG9yaXphdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYXV0aG9yaXphdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weVNvdXJjZVRhZ3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNvcHlTb3VyY2VUYWdzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlLXRhZy1vcHRpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc291cmNlLXRhZy1vcHRpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJSRVBMQUNFXCIsIFwiQ09QWVwiXSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxNSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNvcHlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weUFjdGlvbkFib3J0Q29uc3RhbnQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb3B5QWN0aW9uQWJvcnRDb25zdGFudFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYWJvcnRcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weUlkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29weUlkXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvcHlpZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJjb3B5aWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxNiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInRpZXJcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdGllcjEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJ0aWVyXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjZXNzLXRpZXJcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICBcIlA0XCIsXG4gICAgICAgICAgICAgICAgXCJQNlwiLFxuICAgICAgICAgICAgICAgIFwiUDEwXCIsXG4gICAgICAgICAgICAgICAgXCJQMTVcIixcbiAgICAgICAgICAgICAgICBcIlAyMFwiLFxuICAgICAgICAgICAgICAgIFwiUDMwXCIsXG4gICAgICAgICAgICAgICAgXCJQNDBcIixcbiAgICAgICAgICAgICAgICBcIlA1MFwiLFxuICAgICAgICAgICAgICAgIFwiUDYwXCIsXG4gICAgICAgICAgICAgICAgXCJQNzBcIixcbiAgICAgICAgICAgICAgICBcIlA4MFwiLFxuICAgICAgICAgICAgICAgIFwiSG90XCIsXG4gICAgICAgICAgICAgICAgXCJDb29sXCIsXG4gICAgICAgICAgICAgICAgXCJBcmNoaXZlXCIsXG4gICAgICAgICAgICAgICAgXCJDb2xkXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcXVlcnlSZXF1ZXN0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJxdWVyeVJlcXVlc3RcIl0sXG4gICAgbWFwcGVyOiBRdWVyeVJlcXVlc3QsXG59O1xuY29uc3QgY29tcDE3ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicXVlcnlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE4ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidGFnc1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0YWdzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0YWdzXCJdLFxuICAgIG1hcHBlcjogQmxvYlRhZ3MsXG59O1xuY29uc3QgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRyYW5zYWN0aW9uYWxDb250ZW50TUQ1XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LU1ENVwiLFxuICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYlR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIlBhZ2VCbG9iXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudExlbmd0aCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JDb250ZW50TGVuZ3RoXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JTZXF1ZW5jZU51bWJlciA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYlNlcXVlbmNlTnVtYmVyXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb250ZW50VHlwZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNvbnRlbnRUeXBlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYm9keTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJib2R5XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImJvZHlcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiYm9keVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmVhbVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWNjZXB0MiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjY2VwdFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24veG1sXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2VwdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicGFnZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwYWdlV3JpdGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJwYWdlV3JpdGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInVwZGF0ZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXBhZ2Utd3JpdGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcImlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUb1wiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWxlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcImlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhblwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWx0XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbHRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmU2VxdWVuY2VOdW1iZXJFcXVhbFRvID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiaWZTZXF1ZW5jZU51bWJlckVxdWFsVG9cIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1lcVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWVxXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwYWdlV3JpdGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicGFnZVdyaXRlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJjbGVhclwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXBhZ2Utd3JpdGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZVVybCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInNvdXJjZVVybFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZVJhbmdlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwic291cmNlUmFuZ2VcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtcmFuZ2VcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUNvbnRlbnRDcmM2NCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlQ29udGVudENyYzY0XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2UxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmFuZ2VcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yYW5nZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJhbmdlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjAgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJwYWdlbGlzdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmV2c25hcHNob3QgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByZXZzbmFwc2hvdFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicHJldnNuYXBzaG90XCIsXG4gICAgICAgIHhtbE5hbWU6IFwicHJldnNuYXBzaG90XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmV2U25hcHNob3RVcmwgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByZXZTbmFwc2hvdFVybFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1wcmV2aW91cy1zbmFwc2hvdC11cmxcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXByZXZpb3VzLXNuYXBzaG90LXVybFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc2VxdWVuY2VOdW1iZXJBY3Rpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJzZXF1ZW5jZU51bWJlckFjdGlvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlcXVlbmNlLW51bWJlci1hY3Rpb25cIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXF1ZW5jZS1udW1iZXItYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibWF4XCIsIFwidXBkYXRlXCIsIFwiaW5jcmVtZW50XCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDIxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiaW5jcmVtZW50YWxjb3B5XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUeXBlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJBcHBlbmRCbG9iXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBlbmRibG9ja1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtYXhTaXplID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJtYXhTaXplXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29uZGl0aW9uLW1heHNpemVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29uZGl0aW9uLW1heHNpemVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFwcGVuZFBvc2l0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwiYXBwZW5kUG9zaXRpb25BY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiYXBwZW5kUG9zaXRpb25cIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29uZGl0aW9uLWFwcGVuZHBvc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tYXBwZW5kcG9zXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VSYW5nZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNvdXJjZVJhbmdlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLXJhbmdlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzZWFsXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUeXBlMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJCbG9ja0Jsb2JcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvcHlTb3VyY2VCbG9iUHJvcGVydGllcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29weVNvdXJjZUJsb2JQcm9wZXJ0aWVzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlLWJsb2ItcHJvcGVydGllc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYmxvYi1wcm9wZXJ0aWVzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDI0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYmxvY2tcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvY2tJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2NrSWRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYmxvY2tpZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJibG9ja2lkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9ja3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJibG9ja3NcIixcbiAgICBtYXBwZXI6IEJsb2NrTG9va3VwTGlzdCxcbn07XG5jb25zdCBjb21wMjUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJibG9ja2xpc3RcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGlzdFR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJsaXN0VHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiY29tbWl0dGVkXCIsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImJsb2NrbGlzdHR5cGVcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiYmxvY2tsaXN0dHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbW1pdHRlZFwiLCBcInVuY29tbWl0dGVkXCIsIFwiYWxsXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBTZXJ2aWNlIG9wZXJhdGlvbnMuICovXG5jbGFzcyBTZXJ2aWNlSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgU2VydmljZSBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgcHJvcGVydGllcyBmb3IgYSBzdG9yYWdlIGFjY291bnQncyBCbG9iIHNlcnZpY2UgZW5kcG9pbnQsIGluY2x1ZGluZyBwcm9wZXJ0aWVzIGZvciBTdG9yYWdlXG4gICAgICogQW5hbHl0aWNzIGFuZCBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgcnVsZXNcbiAgICAgKiBAcGFyYW0gYmxvYlNlcnZpY2VQcm9wZXJ0aWVzIFRoZSBTdG9yYWdlU2VydmljZSBwcm9wZXJ0aWVzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0UHJvcGVydGllcyhibG9iU2VydmljZVByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvYlNlcnZpY2VQcm9wZXJ0aWVzLCBvcHRpb25zIH0sIHNldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0cyB0aGUgcHJvcGVydGllcyBvZiBhIHN0b3JhZ2UgYWNjb3VudCdzIEJsb2Igc2VydmljZSwgaW5jbHVkaW5nIHByb3BlcnRpZXMgZm9yIFN0b3JhZ2UgQW5hbHl0aWNzXG4gICAgICogYW5kIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFByb3BlcnRpZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjJDIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgc3RhdGlzdGljcyByZWxhdGVkIHRvIHJlcGxpY2F0aW9uIGZvciB0aGUgQmxvYiBzZXJ2aWNlLiBJdCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGVcbiAgICAgKiBzZWNvbmRhcnkgbG9jYXRpb24gZW5kcG9pbnQgd2hlbiByZWFkLWFjY2VzcyBnZW8tcmVkdW5kYW50IHJlcGxpY2F0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBzdG9yYWdlXG4gICAgICogYWNjb3VudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFN0YXRpc3RpY3Mob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFN0YXRpc3RpY3NPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIExpc3QgQ29udGFpbmVycyBTZWdtZW50IG9wZXJhdGlvbiByZXR1cm5zIGEgbGlzdCBvZiB0aGUgY29udGFpbmVycyB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGxpc3RDb250YWluZXJzU2VnbWVudChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgbGlzdENvbnRhaW5lcnNTZWdtZW50T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIHVzZXIgZGVsZWdhdGlvbiBrZXkgZm9yIHRoZSBCbG9iIHNlcnZpY2UuIFRoaXMgaXMgb25seSBhIHZhbGlkIG9wZXJhdGlvbiB3aGVuIHVzaW5nXG4gICAgICogYmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBrZXlJbmZvIEtleSBpbmZvcm1hdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0VXNlckRlbGVnYXRpb25LZXkoa2V5SW5mbywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBrZXlJbmZvLCBvcHRpb25zIH0sIGdldFVzZXJEZWxlZ2F0aW9uS2V5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY291bnRJbmZvKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBCYXRjaCBvcGVyYXRpb24gYWxsb3dzIG11bHRpcGxlIEFQSSBjYWxscyB0byBiZSBlbWJlZGRlZCBpbnRvIGEgc2luZ2xlIEhUVFAgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBtdWx0aXBhcnRDb250ZW50VHlwZSBSZXF1aXJlZC4gVGhlIHZhbHVlIG9mIHRoaXMgaGVhZGVyIG11c3QgYmUgbXVsdGlwYXJ0L21peGVkIHdpdGggYSBiYXRjaFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeS4gRXhhbXBsZSBoZWFkZXIgdmFsdWU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9YmF0Y2hfPEdVSUQ+XG4gICAgICogQHBhcmFtIGJvZHkgSW5pdGlhbCBkYXRhXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzdWJtaXRCYXRjaChjb250ZW50TGVuZ3RoLCBtdWx0aXBhcnRDb250ZW50VHlwZSwgYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBtdWx0aXBhcnRDb250ZW50VHlwZSwgYm9keSwgb3B0aW9ucyB9LCBzdWJtaXRCYXRjaE9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBGaWx0ZXIgQmxvYnMgb3BlcmF0aW9uIGVuYWJsZXMgY2FsbGVycyB0byBsaXN0IGJsb2JzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aG9zZSB0YWdzIG1hdGNoIGFcbiAgICAgKiBnaXZlbiBzZWFyY2ggZXhwcmVzc2lvbi4gIEZpbHRlciBibG9icyBzZWFyY2hlcyBhY3Jvc3MgYWxsIGNvbnRhaW5lcnMgd2l0aGluIGEgc3RvcmFnZSBhY2NvdW50IGJ1dFxuICAgICAqIGNhbiBiZSBzY29wZWQgd2l0aGluIHRoZSBleHByZXNzaW9uIHRvIGEgc2luZ2xlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGZpbHRlckJsb2JzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBmaWx0ZXJCbG9ic09wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxufVxuLy8gT3BlcmF0aW9uIFNwZWNpZmljYXRpb25zXG5jb25zdCB4bWxTZXJpYWxpemVyJDUgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IHNldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZVNldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYmxvYlNlcnZpY2VQcm9wZXJ0aWVzLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjJDIgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9iU2VydmljZVByb3BlcnRpZXMsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgZ2V0U3RhdGlzdGljc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9iU2VydmljZVN0YXRpc3RpY3MsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGxpc3RDb250YWluZXJzU2VnbWVudE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMixcbiAgICAgICAgcHJlZml4LFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIG1heFBhZ2VTaXplLFxuICAgICAgICBpbmNsdWRlLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgZ2V0VXNlckRlbGVnYXRpb25LZXlPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFVzZXJEZWxlZ2F0aW9uS2V5LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBrZXlJbmZvLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMyxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMiA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29tcCxcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTEsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBzdWJtaXRCYXRjaE9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHksXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDRdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG11bHRpcGFydENvbnRlbnRUeXBlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBmaWx0ZXJCbG9ic09wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IEZpbHRlckJsb2JTZWdtZW50LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUZpbHRlckJsb2JzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIG1heFBhZ2VTaXplLFxuICAgICAgICBjb21wNSxcbiAgICAgICAgd2hlcmUsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIENvbnRhaW5lciBvcGVyYXRpb25zLiAqL1xuY2xhc3MgQ29udGFpbmVySW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQ29udGFpbmVyIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBhIG5ldyBjb250YWluZXIgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LiBJZiB0aGUgY29udGFpbmVyIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5XG4gICAgICogZXhpc3RzLCB0aGUgb3BlcmF0aW9uIGZhaWxzXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjcmVhdGUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGNyZWF0ZU9wZXJhdGlvblNwZWMkMik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSBhbmQgc3lzdGVtIHByb3BlcnRpZXMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgZGF0YVxuICAgICAqIHJldHVybmVkIGRvZXMgbm90IGluY2x1ZGUgdGhlIGNvbnRhaW5lcidzIGxpc3Qgb2YgYmxvYnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFByb3BlcnRpZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBvcGVyYXRpb24gbWFya3MgdGhlIHNwZWNpZmllZCBjb250YWluZXIgZm9yIGRlbGV0aW9uLiBUaGUgY29udGFpbmVyIGFuZCBhbnkgYmxvYnMgY29udGFpbmVkIHdpdGhpblxuICAgICAqIGl0IGFyZSBsYXRlciBkZWxldGVkIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGRlbGV0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZGVsZXRlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogb3BlcmF0aW9uIHNldHMgb25lIG9yIG1vcmUgdXNlci1kZWZpbmVkIG5hbWUtdmFsdWUgcGFpcnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0TWV0YWRhdGEob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNldE1ldGFkYXRhT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGUgd2hldGhlciBjb250YWluZXIgZGF0YVxuICAgICAqIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY2Vzc1BvbGljeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHNldHMgdGhlIHBlcm1pc3Npb25zIGZvciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lci4gVGhlIHBlcm1pc3Npb25zIGluZGljYXRlIHdoZXRoZXIgYmxvYnMgaW4gYVxuICAgICAqIGNvbnRhaW5lciBtYXkgYmUgYWNjZXNzZWQgcHVibGljbHkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRBY2Nlc3NQb2xpY3kob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNldEFjY2Vzc1BvbGljeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyBhIHByZXZpb3VzbHktZGVsZXRlZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZXN0b3JlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCByZXN0b3JlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbmFtZXMgYW4gZXhpc3RpbmcgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb250YWluZXJOYW1lIFJlcXVpcmVkLiAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdG8gcmVuYW1lLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVuYW1lKHNvdXJjZUNvbnRhaW5lck5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgc291cmNlQ29udGFpbmVyTmFtZSwgb3B0aW9ucyB9LCByZW5hbWVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEJhdGNoIG9wZXJhdGlvbiBhbGxvd3MgbXVsdGlwbGUgQVBJIGNhbGxzIHRvIGJlIGVtYmVkZGVkIGludG8gYSBzaW5nbGUgSFRUUCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIG11bHRpcGFydENvbnRlbnRUeXBlIFJlcXVpcmVkLiBUaGUgdmFsdWUgb2YgdGhpcyBoZWFkZXIgbXVzdCBiZSBtdWx0aXBhcnQvbWl4ZWQgd2l0aCBhIGJhdGNoXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LiBFeGFtcGxlIGhlYWRlciB2YWx1ZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF88R1VJRD5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHN1Ym1pdEJhdGNoKGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zIH0sIHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBGaWx0ZXIgQmxvYnMgb3BlcmF0aW9uIGVuYWJsZXMgY2FsbGVycyB0byBsaXN0IGJsb2JzIGluIGEgY29udGFpbmVyIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlblxuICAgICAqIHNlYXJjaCBleHByZXNzaW9uLiAgRmlsdGVyIGJsb2JzIHNlYXJjaGVzIHdpdGhpbiB0aGUgZ2l2ZW4gY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZmlsdGVyQmxvYnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGZpbHRlckJsb2JzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYWNxdWlyZUxlYXNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBhY3F1aXJlTGVhc2VPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBjb250YWluZXIgZm9yIGRlbGV0ZSBvcGVyYXRpb25zLiBUaGUgbG9jayBkdXJhdGlvbiBjYW5cbiAgICAgKiBiZSAxNSB0byA2MCBzZWNvbmRzLCBvciBjYW4gYmUgaW5maW5pdGVcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVsZWFzZUxlYXNlKGxlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgb3B0aW9ucyB9LCByZWxlYXNlTGVhc2VPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBjb250YWluZXIgZm9yIGRlbGV0ZSBvcGVyYXRpb25zLiBUaGUgbG9jayBkdXJhdGlvbiBjYW5cbiAgICAgKiBiZSAxNSB0byA2MCBzZWNvbmRzLCBvciBjYW4gYmUgaW5maW5pdGVcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVuZXdMZWFzZShsZWFzZUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxlYXNlSWQsIG9wdGlvbnMgfSwgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYnJlYWtMZWFzZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIHByb3Bvc2VkTGVhc2VJZCBQcm9wb3NlZCBsZWFzZSBJRCwgaW4gYSBHVUlEIHN0cmluZyBmb3JtYXQuIFRoZSBCbG9iIHNlcnZpY2UgcmV0dXJucyA0MDBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIChJbnZhbGlkIHJlcXVlc3QpIGlmIHRoZSBwcm9wb3NlZCBsZWFzZSBJRCBpcyBub3QgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LiBTZWUgR3VpZCBDb25zdHJ1Y3RvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKFN0cmluZykgZm9yIGEgbGlzdCBvZiB2YWxpZCBHVUlEIHN0cmluZyBmb3JtYXRzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY2hhbmdlTGVhc2UobGVhc2VJZCwgcHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxlYXNlSWQsIHByb3Bvc2VkTGVhc2VJZCwgb3B0aW9ucyB9LCBjaGFuZ2VMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIFRoZSBMaXN0IEJsb2JzIG9wZXJhdGlvbiByZXR1cm5zIGEgbGlzdCBvZiB0aGUgYmxvYnMgdW5kZXIgdGhlIHNwZWNpZmllZCBjb250YWluZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGxpc3RCbG9iRmxhdFNlZ21lbnQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGxpc3RCbG9iRmxhdFNlZ21lbnRPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExpc3QgQmxvYnMgb3BlcmF0aW9uIHJldHVybnMgYSBsaXN0IG9mIHRoZSBibG9icyB1bmRlciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgV2hlbiB0aGUgcmVxdWVzdCBpbmNsdWRlcyB0aGlzIHBhcmFtZXRlciwgdGhlIG9wZXJhdGlvbiByZXR1cm5zIGEgQmxvYlByZWZpeFxuICAgICAqICAgICAgICAgICAgICAgICAgZWxlbWVudCBpbiB0aGUgcmVzcG9uc2UgYm9keSB0aGF0IGFjdHMgYXMgYSBwbGFjZWhvbGRlciBmb3IgYWxsIGJsb2JzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggdGhlXG4gICAgICogICAgICAgICAgICAgICAgICBzYW1lIHN1YnN0cmluZyB1cCB0byB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgZGVsaW1pdGVyIGNoYXJhY3Rlci4gVGhlIGRlbGltaXRlciBtYXkgYmUgYSBzaW5nbGVcbiAgICAgKiAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBvciBhIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudChkZWxpbWl0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgZGVsaW1pdGVyLCBvcHRpb25zIH0sIGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRBY2NvdW50SW5mbyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQ0ID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBjcmVhdGVPcGVyYXRpb25TcGVjJDIgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJDcmVhdGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgcmVzdHlwZTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgYWNjZXNzLFxuICAgICAgICBkZWZhdWx0RW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIHJlc3R5cGUyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBkZWxldGVPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJERUxFVEVcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJEZWxldGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJEZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgcmVzdHlwZTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHNldE1ldGFkYXRhT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXA2LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZ2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIkNvbXBvc2l0ZVwiLCBjbGFzc05hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRJZGVudGlmaWVyc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkSWRlbnRpZmllcnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXA3LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3Qgc2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogY29udGFpbmVyQWNsLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDcsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXNzLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCByZXN0b3JlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlc3RvcmVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDgsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgZGVsZXRlZENvbnRhaW5lck5hbWUsXG4gICAgICAgIGRlbGV0ZWRDb250YWluZXJWZXJzaW9uLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHJlbmFtZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZW5hbWVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZW5hbWVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wOSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBzb3VyY2VDb250YWluZXJOYW1lLFxuICAgICAgICBzb3VyY2VMZWFzZUlkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBib2R5LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wNCxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBtdWx0aXBhcnRDb250ZW50VHlwZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZmlsdGVyQmxvYnNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogRmlsdGVyQmxvYlNlZ21lbnQsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJGaWx0ZXJCbG9ic0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIG1heFBhZ2VTaXplLFxuICAgICAgICBjb21wNSxcbiAgICAgICAgd2hlcmUsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgYWNxdWlyZUxlYXNlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQWNxdWlyZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDEwLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIHByb3Bvc2VkTGVhc2VJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCByZWxlYXNlTGVhc2VPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uMSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDEwLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGxlYXNlSWQxLFxuICAgICAgICBhY3Rpb24yLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGJyZWFrTGVhc2VPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJCcmVha0xlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXAxMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24zLFxuICAgICAgICBicmVha1BlcmlvZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBjaGFuZ2VMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGFjdGlvbjQsXG4gICAgICAgIHByb3Bvc2VkTGVhc2VJZDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgbGlzdEJsb2JGbGF0U2VnbWVudE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBpbmNsdWRlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBMaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBpbmNsdWRlMSxcbiAgICAgICAgZGVsaW1pdGVyLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgQmxvYiBvcGVyYXRpb25zLiAqL1xuY2xhc3MgQmxvYkltcGwge1xuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIEJsb2IgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgRG93bmxvYWQgb3BlcmF0aW9uIHJlYWRzIG9yIGRvd25sb2FkcyBhIGJsb2IgZnJvbSB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgaXRzIG1ldGFkYXRhIGFuZFxuICAgICAqIHByb3BlcnRpZXMuIFlvdSBjYW4gYWxzbyBjYWxsIERvd25sb2FkIHRvIHJlYWQgYSBzbmFwc2hvdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGRvd25sb2FkKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkb3dubG9hZE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uIHJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSwgc3RhbmRhcmQgSFRUUCBwcm9wZXJ0aWVzLCBhbmQgc3lzdGVtXG4gICAgICogcHJvcGVydGllcyBmb3IgdGhlIGJsb2IuIEl0IGRvZXMgbm90IHJldHVybiB0aGUgY29udGVudCBvZiB0aGUgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFByb3BlcnRpZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHN0b3JhZ2UgYWNjb3VudCdzIHNvZnQgZGVsZXRlIGZlYXR1cmUgaXMgZGlzYWJsZWQgdGhlbiwgd2hlbiBhIGJsb2IgaXMgZGVsZXRlZCwgaXQgaXNcbiAgICAgKiBwZXJtYW5lbnRseSByZW1vdmVkIGZyb20gdGhlIHN0b3JhZ2UgYWNjb3VudC4gSWYgdGhlIHN0b3JhZ2UgYWNjb3VudCdzIHNvZnQgZGVsZXRlIGZlYXR1cmUgaXNcbiAgICAgKiBlbmFibGVkLCB0aGVuLCB3aGVuIGEgYmxvYiBpcyBkZWxldGVkLCBpdCBpcyBtYXJrZWQgZm9yIGRlbGV0aW9uIGFuZCBiZWNvbWVzIGluYWNjZXNzaWJsZVxuICAgICAqIGltbWVkaWF0ZWx5LiBIb3dldmVyLCB0aGUgYmxvYiBzZXJ2aWNlIHJldGFpbnMgdGhlIGJsb2Igb3Igc25hcHNob3QgZm9yIHRoZSBudW1iZXIgb2YgZGF5cyBzcGVjaWZpZWRcbiAgICAgKiBieSB0aGUgRGVsZXRlUmV0ZW50aW9uUG9saWN5IHNlY3Rpb24gb2YgW1N0b3JhZ2Ugc2VydmljZSBwcm9wZXJ0aWVzXVxuICAgICAqIChTZXQtQmxvYi1TZXJ2aWNlLVByb3BlcnRpZXMubWQpLiBBZnRlciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIGhhcyBwYXNzZWQsIHRoZSBibG9iJ3MgZGF0YSBpc1xuICAgICAqIHBlcm1hbmVudGx5IHJlbW92ZWQgZnJvbSB0aGUgc3RvcmFnZSBhY2NvdW50LiBOb3RlIHRoYXQgeW91IGNvbnRpbnVlIHRvIGJlIGNoYXJnZWQgZm9yIHRoZVxuICAgICAqIHNvZnQtZGVsZXRlZCBibG9iJ3Mgc3RvcmFnZSB1bnRpbCBpdCBpcyBwZXJtYW5lbnRseSByZW1vdmVkLiBVc2UgdGhlIExpc3QgQmxvYnMgQVBJIGFuZCBzcGVjaWZ5IHRoZVxuICAgICAqIFwiaW5jbHVkZT1kZWxldGVkXCIgcXVlcnkgcGFyYW1ldGVyIHRvIGRpc2NvdmVyIHdoaWNoIGJsb2JzIGFuZCBzbmFwc2hvdHMgaGF2ZSBiZWVuIHNvZnQgZGVsZXRlZC4gWW91XG4gICAgICogY2FuIHRoZW4gdXNlIHRoZSBVbmRlbGV0ZSBCbG9iIEFQSSB0byByZXN0b3JlIGEgc29mdC1kZWxldGVkIGJsb2IuIEFsbCBvdGhlciBvcGVyYXRpb25zIG9uIGFcbiAgICAgKiBzb2Z0LWRlbGV0ZWQgYmxvYiBvciBzbmFwc2hvdCBjYXVzZXMgdGhlIHNlcnZpY2UgdG8gcmV0dXJuIGFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDA0XG4gICAgICogKFJlc291cmNlTm90Rm91bmQpLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZGVsZXRlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkZWxldGVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5kZWxldGUgYSBibG9iIHRoYXQgd2FzIHByZXZpb3VzbHkgc29mdCBkZWxldGVkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICB1bmRlbGV0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgdW5kZWxldGVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGltZSBhIGJsb2Igd2lsbCBleHBpcmUgYW5kIGJlIGRlbGV0ZWQuXG4gICAgICogQHBhcmFtIGV4cGlyeU9wdGlvbnMgUmVxdWlyZWQuIEluZGljYXRlcyBtb2RlIG9mIHRoZSBleHBpcnkgdGltZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0RXhwaXJ5KGV4cGlyeU9wdGlvbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgZXhwaXJ5T3B0aW9ucywgb3B0aW9ucyB9LCBzZXRFeHBpcnlPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNldCBIVFRQIEhlYWRlcnMgb3BlcmF0aW9uIHNldHMgc3lzdGVtIHByb3BlcnRpZXMgb24gdGhlIGJsb2JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldEh0dHBIZWFkZXJzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRIdHRwSGVhZGVyc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IEltbXV0YWJpbGl0eSBQb2xpY3kgb3BlcmF0aW9uIHNldHMgdGhlIGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldEltbXV0YWJpbGl0eVBvbGljeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0SW1tdXRhYmlsaXR5UG9saWN5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBEZWxldGUgSW1tdXRhYmlsaXR5IFBvbGljeSBvcGVyYXRpb24gZGVsZXRlcyB0aGUgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkZWxldGVJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNldCBMZWdhbCBIb2xkIG9wZXJhdGlvbiBzZXRzIGEgbGVnYWwgaG9sZCBvbiB0aGUgYmxvYi5cbiAgICAgKiBAcGFyYW0gbGVnYWxIb2xkIFNwZWNpZmllZCBpZiBhIGxlZ2FsIGhvbGQgc2hvdWxkIGJlIHNldCBvbiB0aGUgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldExlZ2FsSG9sZChsZWdhbEhvbGQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVnYWxIb2xkLCBvcHRpb25zIH0sIHNldExlZ2FsSG9sZE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IEJsb2IgTWV0YWRhdGEgb3BlcmF0aW9uIHNldHMgdXNlci1kZWZpbmVkIG1ldGFkYXRhIGZvciB0aGUgc3BlY2lmaWVkIGJsb2IgYXMgb25lIG9yIG1vcmVcbiAgICAgKiBuYW1lLXZhbHVlIHBhaXJzXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRNZXRhZGF0YShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhY3F1aXJlTGVhc2Uob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGFjcXVpcmVMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVsZWFzZUxlYXNlKGxlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgb3B0aW9ucyB9LCByZWxlYXNlTGVhc2VPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIGxlYXNlSWQgU3BlY2lmaWVzIHRoZSBjdXJyZW50IGxlYXNlIElEIG9uIHRoZSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHJlbmV3TGVhc2UobGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBvcHRpb25zIH0sIHJlbmV3TGVhc2VPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIGxlYXNlSWQgU3BlY2lmaWVzIHRoZSBjdXJyZW50IGxlYXNlIElEIG9uIHRoZSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gcHJvcG9zZWRMZWFzZUlkIFByb3Bvc2VkIGxlYXNlIElELCBpbiBhIEdVSUQgc3RyaW5nIGZvcm1hdC4gVGhlIEJsb2Igc2VydmljZSByZXR1cm5zIDQwMFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKEludmFsaWQgcmVxdWVzdCkgaWYgdGhlIHByb3Bvc2VkIGxlYXNlIElEIGlzIG5vdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQuIFNlZSBHdWlkIENvbnN0cnVjdG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBmb3IgYSBsaXN0IG9mIHZhbGlkIEdVSUQgc3RyaW5nIGZvcm1hdHMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjaGFuZ2VMZWFzZShsZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgcHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zIH0sIGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIFRoZSBMZWFzZSBCbG9iIG9wZXJhdGlvbiBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBibG9iIGZvciB3cml0ZSBhbmQgZGVsZXRlXG4gICAgICogb3BlcmF0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYnJlYWtMZWFzZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ3JlYXRlIFNuYXBzaG90IG9wZXJhdGlvbiBjcmVhdGVzIGEgcmVhZC1vbmx5IHNuYXBzaG90IG9mIGEgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY3JlYXRlU25hcHNob3Qob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGNyZWF0ZVNuYXBzaG90T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTdGFydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbiBjb3BpZXMgYSBibG9iIG9yIGFuIGludGVybmV0IHJlc291cmNlIHRvIGEgbmV3IGJsb2IuXG4gICAgICogQHBhcmFtIGNvcHlTb3VyY2UgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgcGFnZSBibG9iIHNuYXBzaG90LiBUaGlzIHZhbHVlIGlzIGEgVVJMIG9mIHVwIHRvXG4gICAgICogICAgICAgICAgICAgICAgICAgMiBLQiBpbiBsZW5ndGggdGhhdCBzcGVjaWZpZXMgYSBwYWdlIGJsb2Igc25hcHNob3QuIFRoZSB2YWx1ZSBzaG91bGQgYmUgVVJMLWVuY29kZWQgYXMgaXQgd291bGRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhcHBlYXIgaW4gYSByZXF1ZXN0IFVSSS4gVGhlIHNvdXJjZSBibG9iIG11c3QgZWl0aGVyIGJlIHB1YmxpYyBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkXG4gICAgICogICAgICAgICAgICAgICAgICAgYWNjZXNzIHNpZ25hdHVyZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHN0YXJ0Q29weUZyb21VUkwoY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb3B5U291cmNlLCBvcHRpb25zIH0sIHN0YXJ0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGNvcGllcyBhIGJsb2Igb3IgYW4gaW50ZXJuZXQgcmVzb3VyY2UgdG8gYSBuZXcgYmxvYi4gSXQgd2lsbCBub3QgcmV0dXJuXG4gICAgICogYSByZXNwb25zZSB1bnRpbCB0aGUgY29weSBpcyBjb21wbGV0ZS5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY29weUZyb21VUkwoY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb3B5U291cmNlLCBvcHRpb25zIH0sIGNvcHlGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBBYm9ydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbiBhYm9ydHMgYSBwZW5kaW5nIENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uLCBhbmQgbGVhdmVzIGEgZGVzdGluYXRpb25cbiAgICAgKiBibG9iIHdpdGggemVybyBsZW5ndGggYW5kIGZ1bGwgbWV0YWRhdGEuXG4gICAgICogQHBhcmFtIGNvcHlJZCBUaGUgY29weSBpZGVudGlmaWVyIHByb3ZpZGVkIGluIHRoZSB4LW1zLWNvcHktaWQgaGVhZGVyIG9mIHRoZSBvcmlnaW5hbCBDb3B5IEJsb2JcbiAgICAgKiAgICAgICAgICAgICAgIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGFib3J0Q29weUZyb21VUkwoY29weUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvcHlJZCwgb3B0aW9ucyB9LCBhYm9ydENvcHlGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgVGllciBvcGVyYXRpb24gc2V0cyB0aGUgdGllciBvbiBhIGJsb2IuIFRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZCBvbiBhIHBhZ2UgYmxvYiBpbiBhIHByZW1pdW1cbiAgICAgKiBzdG9yYWdlIGFjY291bnQgYW5kIG9uIGEgYmxvY2sgYmxvYiBpbiBhIGJsb2Igc3RvcmFnZSBhY2NvdW50IChsb2NhbGx5IHJlZHVuZGFudCBzdG9yYWdlIG9ubHkpLiBBXG4gICAgICogcHJlbWl1bSBwYWdlIGJsb2IncyB0aWVyIGRldGVybWluZXMgdGhlIGFsbG93ZWQgc2l6ZSwgSU9QUywgYW5kIGJhbmR3aWR0aCBvZiB0aGUgYmxvYi4gQSBibG9ja1xuICAgICAqIGJsb2IncyB0aWVyIGRldGVybWluZXMgSG90L0Nvb2wvQXJjaGl2ZSBzdG9yYWdlIHR5cGUuIFRoaXMgb3BlcmF0aW9uIGRvZXMgbm90IHVwZGF0ZSB0aGUgYmxvYidzXG4gICAgICogRVRhZy5cbiAgICAgKiBAcGFyYW0gdGllciBJbmRpY2F0ZXMgdGhlIHRpZXIgdG8gYmUgc2V0IG9uIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0VGllcih0aWVyLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IHRpZXIsIG9wdGlvbnMgfSwgc2V0VGllck9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRBY2NvdW50SW5mbyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFF1ZXJ5IG9wZXJhdGlvbiBlbmFibGVzIHVzZXJzIHRvIHNlbGVjdC9wcm9qZWN0IG9uIGJsb2IgZGF0YSBieSBwcm92aWRpbmcgc2ltcGxlIHF1ZXJ5XG4gICAgICogZXhwcmVzc2lvbnMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBxdWVyeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgcXVlcnlPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBUYWdzIG9wZXJhdGlvbiBlbmFibGVzIHVzZXJzIHRvIGdldCB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggYSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0VGFncyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0VGFnc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IFRhZ3Mgb3BlcmF0aW9uIGVuYWJsZXMgdXNlcnMgdG8gc2V0IHRhZ3Mgb24gYSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0VGFncyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0VGFnc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQzID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBkb3dubG9hZE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHsgbmFtZTogXCJTdHJlYW1cIiB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInBhcnNlZFJlc3BvbnNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkRvd25sb2FkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgMjA2OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRG93bmxvYWRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIHJhbmdlR2V0Q29udGVudE1ENSxcbiAgICAgICAgcmFuZ2VHZXRDb250ZW50Q1JDNjQsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiSEVBRFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBkZWxldGVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEZWxldGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBibG9iRGVsZXRlVHlwZSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBkZWxldGVTbmFwc2hvdHMsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgdW5kZWxldGVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JVbmRlbGV0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JVbmRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wOF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0RXhwaXJ5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0RXhwaXJ5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEV4cGlyeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTFdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBleHBpcnlPcHRpb25zLFxuICAgICAgICBleHBpcmVzT24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0SHR0cEhlYWRlcnNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtjb21wLCB0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBzZXRJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJERUxFVEVcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldExlZ2FsSG9sZE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldExlZ2FsSG9sZEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVnYWxIb2xkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldE1ldGFkYXRhT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0TWV0YWRhdGFIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDZdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGFjcXVpcmVMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgcHJvcG9zZWRMZWFzZUlkLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uMSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlJlbmV3TGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICAgICAgYWN0aW9uMixcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBjaGFuZ2VMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGxlYXNlSWQxLFxuICAgICAgICBhY3Rpb240LFxuICAgICAgICBwcm9wb3NlZExlYXNlSWQxLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGJyZWFrTGVhc2VPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JCcmVha0xlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uMyxcbiAgICAgICAgYnJlYWtQZXJpb2QsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgY3JlYXRlU25hcHNob3RPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDcmVhdGVTbmFwc2hvdEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTRdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHN0YXJ0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTdGFydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlN0YXJ0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgc291cmNlSWZUYWdzLFxuICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgc2VhbEJsb2IsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgY29weUZyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDb3B5RnJvbVVSTEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0aWVyLFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgICAgIHhNc1JlcXVpcmVzU3luYyxcbiAgICAgICAgc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb24sXG4gICAgICAgIGNvcHlTb3VyY2VUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGFib3J0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDQ6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAxNSxcbiAgICAgICAgY29weUlkLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGNvcHlBY3Rpb25BYm9ydENvbnN0YW50LFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldFRpZXJPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUaWVySGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0VGllckhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUaWVyRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBjb21wMTYsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICByZWh5ZHJhdGVQcmlvcml0eSxcbiAgICAgICAgdGllcjEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29tcCxcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTEsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBxdWVyeU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JRdWVyeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIDIwNjoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHsgbmFtZTogXCJTdHJlYW1cIiB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInBhcnNlZFJlc3BvbnNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlF1ZXJ5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBxdWVyeVJlcXVlc3QsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMTcsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZ2V0VGFnc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogQmxvYlRhZ3MsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iR2V0VGFnc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBjb21wMTgsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldFRhZ3NPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDQ6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUYWdzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRhZ3NFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IHRhZ3MsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHZlcnNpb25JZCxcbiAgICAgICAgY29tcDE4LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgUGFnZUJsb2Igb3BlcmF0aW9ucy4gKi9cbmNsYXNzIFBhZ2VCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgUGFnZUJsb2IgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ3JlYXRlIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IHBhZ2UgYmxvYi5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBibG9iQ29udGVudExlbmd0aCBUaGlzIGhlYWRlciBzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIHBhZ2UgYmxvYiwgdXAgdG8gMSBUQi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgYmxvYiBzaXplIG11c3QgYmUgYWxpZ25lZCB0byBhIDUxMi1ieXRlIGJvdW5kYXJ5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY3JlYXRlKGNvbnRlbnRMZW5ndGgsIGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zIH0sIGNyZWF0ZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uIHdyaXRlcyBhIHJhbmdlIG9mIHBhZ2VzIHRvIGEgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwbG9hZFBhZ2VzKGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCB1cGxvYWRQYWdlc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ2xlYXIgUGFnZXMgb3BlcmF0aW9uIGNsZWFycyBhIHNldCBvZiBwYWdlcyBmcm9tIGEgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNsZWFyUGFnZXMoY29udGVudExlbmd0aCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBvcHRpb25zIH0sIGNsZWFyUGFnZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFVwbG9hZCBQYWdlcyBvcGVyYXRpb24gd3JpdGVzIGEgcmFuZ2Ugb2YgcGFnZXMgdG8gYSBwYWdlIGJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIGFyZSByZWFkIGZyb20gYVxuICAgICAqIFVSTFxuICAgICAqIEBwYXJhbSBzb3VyY2VVcmwgU3BlY2lmeSBhIFVSTCB0byB0aGUgY29weSBzb3VyY2UuXG4gICAgICogQHBhcmFtIHNvdXJjZVJhbmdlIEJ5dGVzIG9mIHNvdXJjZSBkYXRhIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UuIFRoZSBsZW5ndGggb2YgdGhpcyByYW5nZSBzaG91bGRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIENvbnRlbnRMZW5ndGggaGVhZGVyIGFuZCB4LW1zLXJhbmdlL1JhbmdlIGRlc3RpbmF0aW9uIHJhbmdlIGhlYWRlci5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgcmFuZ2Ugb2YgYnl0ZXMgdG8gd2hpY2ggdGhlIHNvdXJjZSByYW5nZSB3b3VsZCBiZSB3cml0dGVuLiBUaGUgcmFuZ2Ugc2hvdWxkIGJlIDUxMlxuICAgICAqICAgICAgICAgICAgICBhbGlnbmVkIGFuZCByYW5nZS1lbmQgaXMgcmVxdWlyZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICB1cGxvYWRQYWdlc0Zyb21VUkwoc291cmNlVXJsLCBzb3VyY2VSYW5nZSwgY29udGVudExlbmd0aCwgcmFuZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgc291cmNlVXJsLCBzb3VyY2VSYW5nZSwgY29udGVudExlbmd0aCwgcmFuZ2UsIG9wdGlvbnMgfSwgdXBsb2FkUGFnZXNGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgUGFnZSBSYW5nZXMgb3BlcmF0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YgdmFsaWQgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iIG9yIHNuYXBzaG90IG9mIGFcbiAgICAgKiBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFBhZ2VSYW5nZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFBhZ2VSYW5nZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mIHZhbGlkIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYiB0aGF0IHdlcmVcbiAgICAgKiBjaGFuZ2VkIGJldHdlZW4gdGFyZ2V0IGJsb2IgYW5kIHByZXZpb3VzIHNuYXBzaG90LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UGFnZVJhbmdlc0RpZmYob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFBhZ2VSYW5nZXNEaWZmT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2l6ZSB0aGUgQmxvYlxuICAgICAqIEBwYXJhbSBibG9iQ29udGVudExlbmd0aCBUaGlzIGhlYWRlciBzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIHBhZ2UgYmxvYiwgdXAgdG8gMSBUQi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgYmxvYiBzaXplIG11c3QgYmUgYWxpZ25lZCB0byBhIDUxMi1ieXRlIGJvdW5kYXJ5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVzaXplKGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zIH0sIHJlc2l6ZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlckFjdGlvbiBSZXF1aXJlZCBpZiB0aGUgeC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlciBoZWFkZXIgaXMgc2V0IGZvciB0aGUgcmVxdWVzdC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9wZXJ0eSBhcHBsaWVzIHRvIHBhZ2UgYmxvYnMgb25seS4gVGhpcyBwcm9wZXJ0eSBpbmRpY2F0ZXMgaG93IHRoZSBzZXJ2aWNlIHNob3VsZCBtb2RpZnkgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2IncyBzZXF1ZW5jZSBudW1iZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwZGF0ZVNlcXVlbmNlTnVtYmVyKHNlcXVlbmNlTnVtYmVyQWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IHNlcXVlbmNlTnVtYmVyQWN0aW9uLCBvcHRpb25zIH0sIHVwZGF0ZVNlcXVlbmNlTnVtYmVyT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDb3B5IEluY3JlbWVudGFsIG9wZXJhdGlvbiBjb3BpZXMgYSBzbmFwc2hvdCBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiB0byBhIGRlc3RpbmF0aW9uIHBhZ2UgYmxvYi5cbiAgICAgKiBUaGUgc25hcHNob3QgaXMgY29waWVkIHN1Y2ggdGhhdCBvbmx5IHRoZSBkaWZmZXJlbnRpYWwgY2hhbmdlcyBiZXR3ZWVuIHRoZSBwcmV2aW91c2x5IGNvcGllZFxuICAgICAqIHNuYXBzaG90IGFyZSB0cmFuc2ZlcnJlZCB0byB0aGUgZGVzdGluYXRpb24uIFRoZSBjb3BpZWQgc25hcHNob3RzIGFyZSBjb21wbGV0ZSBjb3BpZXMgb2YgdGhlXG4gICAgICogb3JpZ2luYWwgc25hcHNob3QgYW5kIGNhbiBiZSByZWFkIG9yIGNvcGllZCBmcm9tIGFzIHVzdWFsLiBUaGlzIEFQSSBpcyBzdXBwb3J0ZWQgc2luY2UgUkVTVCB2ZXJzaW9uXG4gICAgICogMjAxNi0wNS0zMS5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY29weUluY3JlbWVudGFsKGNvcHlTb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29weVNvdXJjZSwgb3B0aW9ucyB9LCBjb3B5SW5jcmVtZW50YWxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIkMiA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3QgY3JlYXRlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ3JlYXRlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgICAgIGJsb2JUeXBlLFxuICAgICAgICBibG9iQ29udGVudExlbmd0aCxcbiAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IHVwbG9hZFBhZ2VzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keTEsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDE5XSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgIGNvbnRlbnRUeXBlMSxcbiAgICAgICAgYWNjZXB0MixcbiAgICAgICAgcGFnZVdyaXRlLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyTGVzc1RoYW5PckVxdWFsVG8sXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbixcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckVxdWFsVG8sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IGNsZWFyUGFnZXNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ2xlYXJQYWdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTldLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyTGVzc1RoYW5PckVxdWFsVG8sXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbixcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckVxdWFsVG8sXG4gICAgICAgIHBhZ2VXcml0ZTEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgdXBsb2FkUGFnZXNGcm9tVVJMT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxOV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZNYXRjaCxcbiAgICAgICAgc291cmNlSWZOb25lTWF0Y2gsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uLFxuICAgICAgICBwYWdlV3JpdGUsXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyRXF1YWxUbyxcbiAgICAgICAgc291cmNlVXJsLFxuICAgICAgICBzb3VyY2VSYW5nZSxcbiAgICAgICAgc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICByYW5nZTEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgZ2V0UGFnZVJhbmdlc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogUGFnZUxpc3QsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMjAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgZ2V0UGFnZVJhbmdlc0RpZmZPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFBhZ2VMaXN0LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMjAsXG4gICAgICAgIHByZXZzbmFwc2hvdCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgcHJldlNuYXBzaG90VXJsLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IHJlc2l6ZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JSZXNpemVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtjb21wLCB0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBibG9iQ29udGVudExlbmd0aCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCB1cGRhdGVTZXF1ZW5jZU51bWJlck9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbY29tcCwgdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgc2VxdWVuY2VOdW1iZXJBY3Rpb24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgY29weUluY3JlbWVudGFsT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ29weUluY3JlbWVudGFsRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyMV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGNvcHlTb3VyY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBBcHBlbmRCbG9iIG9wZXJhdGlvbnMuICovXG5jbGFzcyBBcHBlbmRCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQXBwZW5kQmxvYiBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDcmVhdGUgQXBwZW5kIEJsb2Igb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgYXBwZW5kIGJsb2IuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNyZWF0ZShjb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgY3JlYXRlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBBcHBlbmQgQmxvY2sgb3BlcmF0aW9uIGNvbW1pdHMgYSBuZXcgYmxvY2sgb2YgZGF0YSB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGFwcGVuZCBibG9iLiBUaGVcbiAgICAgKiBBcHBlbmQgQmxvY2sgb3BlcmF0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGlmIHRoZSBibG9iIHdhcyBjcmVhdGVkIHdpdGggeC1tcy1ibG9iLXR5cGUgc2V0IHRvXG4gICAgICogQXBwZW5kQmxvYi4gQXBwZW5kIEJsb2NrIGlzIHN1cHBvcnRlZCBvbmx5IG9uIHZlcnNpb24gMjAxNS0wMi0yMSB2ZXJzaW9uIG9yIGxhdGVyLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGJvZHkgSW5pdGlhbCBkYXRhXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhcHBlbmRCbG9jayhjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMgfSwgYXBwZW5kQmxvY2tPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gY29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2Igd2hlcmVcbiAgICAgKiB0aGUgY29udGVudHMgYXJlIHJlYWQgZnJvbSBhIHNvdXJjZSB1cmwuIFRoZSBBcHBlbmQgQmxvY2sgb3BlcmF0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGlmIHRoZSBibG9iXG4gICAgICogd2FzIGNyZWF0ZWQgd2l0aCB4LW1zLWJsb2ItdHlwZSBzZXQgdG8gQXBwZW5kQmxvYi4gQXBwZW5kIEJsb2NrIGlzIHN1cHBvcnRlZCBvbmx5IG9uIHZlcnNpb25cbiAgICAgKiAyMDE1LTAyLTIxIHZlcnNpb24gb3IgbGF0ZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZVVybCBTcGVjaWZ5IGEgVVJMIHRvIHRoZSBjb3B5IHNvdXJjZS5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYXBwZW5kQmxvY2tGcm9tVXJsKHNvdXJjZVVybCwgY29udGVudExlbmd0aCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBzb3VyY2VVcmwsIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgYXBwZW5kQmxvY2tGcm9tVXJsT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZWFsIG9wZXJhdGlvbiBzZWFscyB0aGUgQXBwZW5kIEJsb2IgdG8gbWFrZSBpdCByZWFkLW9ubHkuIFNlYWwgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvblxuICAgICAqIDIwMTktMTItMTIgdmVyc2lvbiBvciBsYXRlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNlYWwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNlYWxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIkMSA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3QgY3JlYXRlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgYmxvYlR5cGUxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcbmNvbnN0IGFwcGVuZEJsb2NrT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHkxLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgIGNvbnRlbnRUeXBlMSxcbiAgICAgICAgYWNjZXB0MixcbiAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgYXBwZW5kUG9zaXRpb24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcbmNvbnN0IGFwcGVuZEJsb2NrRnJvbVVybE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb24sXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICBzb3VyY2VVcmwsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgYXBwZW5kUG9zaXRpb24sXG4gICAgICAgIHNvdXJjZVJhbmdlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMSxcbn07XG5jb25zdCBzZWFsT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iU2VhbEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyM10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBhcHBlbmRQb3NpdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIEJsb2NrQmxvYiBvcGVyYXRpb25zLiAqL1xuY2xhc3MgQmxvY2tCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQmxvY2tCbG9iIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFVwbG9hZCBCbG9jayBCbG9iIG9wZXJhdGlvbiB1cGRhdGVzIHRoZSBjb250ZW50IG9mIGFuIGV4aXN0aW5nIGJsb2NrIGJsb2IuIFVwZGF0aW5nIGFuIGV4aXN0aW5nXG4gICAgICogYmxvY2sgYmxvYiBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBtZXRhZGF0YSBvbiB0aGUgYmxvYi4gUGFydGlhbCB1cGRhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggUHV0XG4gICAgICogQmxvYjsgdGhlIGNvbnRlbnQgb2YgdGhlIGV4aXN0aW5nIGJsb2IgaXMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgY29udGVudCBvZiB0aGUgbmV3IGJsb2IuIFRvIHBlcmZvcm0gYVxuICAgICAqIHBhcnRpYWwgdXBkYXRlIG9mIHRoZSBjb250ZW50IG9mIGEgYmxvY2sgYmxvYiwgdXNlIHRoZSBQdXQgQmxvY2sgTGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwbG9hZChjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMgfSwgdXBsb2FkT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBQdXQgQmxvYiBmcm9tIFVSTCBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBCbG9jayBCbG9iIHdoZXJlIHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiBhcmUgcmVhZFxuICAgICAqIGZyb20gYSBnaXZlbiBVUkwuICBUaGlzIEFQSSBpcyBzdXBwb3J0ZWQgYmVnaW5uaW5nIHdpdGggdGhlIDIwMjAtMDQtMDggdmVyc2lvbi4gUGFydGlhbCB1cGRhdGVzIGFyZVxuICAgICAqIG5vdCBzdXBwb3J0ZWQgd2l0aCBQdXQgQmxvYiBmcm9tIFVSTDsgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvYiBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZVxuICAgICAqIGNvbnRlbnQgb2YgdGhlIG5ldyBibG9iLiAgVG8gcGVyZm9ybSBwYXJ0aWFsIHVwZGF0ZXMgdG8gYSBibG9jayBibG9i4oCZcyBjb250ZW50cyB1c2luZyBhIHNvdXJjZSBVUkwsXG4gICAgICogdXNlIHRoZSBQdXQgQmxvY2sgZnJvbSBVUkwgQVBJIGluIGNvbmp1bmN0aW9uIHdpdGggUHV0IEJsb2NrIExpc3QuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcHV0QmxvYkZyb21VcmwoY29udGVudExlbmd0aCwgY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBjb3B5U291cmNlLCBvcHRpb25zIH0sIHB1dEJsb2JGcm9tVXJsT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTdGFnZSBCbG9jayBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBibG9jayB0byBiZSBjb21taXR0ZWQgYXMgcGFydCBvZiBhIGJsb2JcbiAgICAgKiBAcGFyYW0gYmxvY2tJZCBBIHZhbGlkIEJhc2U2NCBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBibG9jay4gUHJpb3IgdG8gZW5jb2RpbmcsIHRoZSBzdHJpbmdcbiAgICAgKiAgICAgICAgICAgICAgICBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2NCBieXRlcyBpbiBzaXplLiBGb3IgYSBnaXZlbiBibG9iLCB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBzcGVjaWZpZWRcbiAgICAgKiAgICAgICAgICAgICAgICBmb3IgdGhlIGJsb2NraWQgcGFyYW1ldGVyIG11c3QgYmUgdGhlIHNhbWUgc2l6ZSBmb3IgZWFjaCBibG9jay5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3RhZ2VCbG9jayhibG9ja0lkLCBjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMgfSwgc3RhZ2VCbG9ja09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU3RhZ2UgQmxvY2sgb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgYmxvY2sgdG8gYmUgY29tbWl0dGVkIGFzIHBhcnQgb2YgYSBibG9iIHdoZXJlIHRoZSBjb250ZW50c1xuICAgICAqIGFyZSByZWFkIGZyb20gYSBVUkwuXG4gICAgICogQHBhcmFtIGJsb2NrSWQgQSB2YWxpZCBCYXNlNjQgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgYmxvY2suIFByaW9yIHRvIGVuY29kaW5nLCB0aGUgc3RyaW5nXG4gICAgICogICAgICAgICAgICAgICAgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNjQgYnl0ZXMgaW4gc2l6ZS4gRm9yIGEgZ2l2ZW4gYmxvYiwgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgc3BlY2lmaWVkXG4gICAgICogICAgICAgICAgICAgICAgZm9yIHRoZSBibG9ja2lkIHBhcmFtZXRlciBtdXN0IGJlIHRoZSBzYW1lIHNpemUgZm9yIGVhY2ggYmxvY2suXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc291cmNlVXJsIFNwZWNpZnkgYSBVUkwgdG8gdGhlIGNvcHkgc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3RhZ2VCbG9ja0Zyb21VUkwoYmxvY2tJZCwgY29udGVudExlbmd0aCwgc291cmNlVXJsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIHNvdXJjZVVybCwgb3B0aW9ucyB9LCBzdGFnZUJsb2NrRnJvbVVSTE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ29tbWl0IEJsb2NrIExpc3Qgb3BlcmF0aW9uIHdyaXRlcyBhIGJsb2IgYnkgc3BlY2lmeWluZyB0aGUgbGlzdCBvZiBibG9jayBJRHMgdGhhdCBtYWtlIHVwIHRoZVxuICAgICAqIGJsb2IuIEluIG9yZGVyIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBhIGJsb2IsIGEgYmxvY2sgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlXG4gICAgICogc2VydmVyIGluIGEgcHJpb3IgUHV0IEJsb2NrIG9wZXJhdGlvbi4gWW91IGNhbiBjYWxsIFB1dCBCbG9jayBMaXN0IHRvIHVwZGF0ZSBhIGJsb2IgYnkgdXBsb2FkaW5nXG4gICAgICogb25seSB0aG9zZSBibG9ja3MgdGhhdCBoYXZlIGNoYW5nZWQsIHRoZW4gY29tbWl0dGluZyB0aGUgbmV3IGFuZCBleGlzdGluZyBibG9ja3MgdG9nZXRoZXIuIFlvdSBjYW5cbiAgICAgKiBkbyB0aGlzIGJ5IHNwZWNpZnlpbmcgd2hldGhlciB0byBjb21taXQgYSBibG9jayBmcm9tIHRoZSBjb21taXR0ZWQgYmxvY2sgbGlzdCBvciBmcm9tIHRoZVxuICAgICAqIHVuY29tbWl0dGVkIGJsb2NrIGxpc3QsIG9yIHRvIGNvbW1pdCB0aGUgbW9zdCByZWNlbnRseSB1cGxvYWRlZCB2ZXJzaW9uIG9mIHRoZSBibG9jaywgd2hpY2hldmVyIGxpc3RcbiAgICAgKiBpdCBtYXkgYmVsb25nIHRvLlxuICAgICAqIEBwYXJhbSBibG9ja3MgQmxvYiBCbG9ja3MuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjb21taXRCbG9ja0xpc3QoYmxvY2tzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2Nrcywgb3B0aW9ucyB9LCBjb21taXRCbG9ja0xpc3RPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBCbG9jayBMaXN0IG9wZXJhdGlvbiByZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgYmxvY2tzIHRoYXQgaGF2ZSBiZWVuIHVwbG9hZGVkIGFzIHBhcnQgb2YgYSBibG9ja1xuICAgICAqIGJsb2JcbiAgICAgKiBAcGFyYW0gbGlzdFR5cGUgU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZSBsaXN0IG9mIGNvbW1pdHRlZCBibG9ja3MsIHRoZSBsaXN0IG9mIHVuY29tbWl0dGVkXG4gICAgICogICAgICAgICAgICAgICAgIGJsb2Nrcywgb3IgYm90aCBsaXN0cyB0b2dldGhlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEJsb2NrTGlzdChsaXN0VHlwZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsaXN0VHlwZSwgb3B0aW9ucyB9LCBnZXRCbG9ja0xpc3RPcGVyYXRpb25TcGVjKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IHVwbG9hZE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iVXBsb2FkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBib2R5MSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0aWVyLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgIGNvbnRlbnRUeXBlMSxcbiAgICAgICAgYWNjZXB0MixcbiAgICAgICAgYmxvYlR5cGUyLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcImJpbmFyeVwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3QgcHV0QmxvYkZyb21VcmxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VJZlRhZ3MsXG4gICAgICAgIGNvcHlTb3VyY2UsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgY29weVNvdXJjZVRhZ3MsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICBibG9iVHlwZTIsXG4gICAgICAgIGNvcHlTb3VyY2VCbG9iUHJvcGVydGllcyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3Qgc3RhZ2VCbG9ja09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHkxLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMjQsXG4gICAgICAgIGJsb2NrSWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcImJpbmFyeVwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3Qgc3RhZ2VCbG9ja0Zyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyNCxcbiAgICAgICAgYmxvY2tJZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgc291cmNlVXJsLFxuICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgIHNvdXJjZVJhbmdlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3QgY29tbWl0QmxvY2tMaXN0T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJsb2NrcyxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMjVdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBsZWdhbEhvbGQxLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyLFxufTtcbmNvbnN0IGdldEJsb2NrTGlzdE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogQmxvY2tMaXN0LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iR2V0QmxvY2tMaXN0SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgY29tcDI1LFxuICAgICAgICBsaXN0VHlwZSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyLFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xubGV0IFN0b3JhZ2VDbGllbnQkMSA9IGNsYXNzIFN0b3JhZ2VDbGllbnQgZXh0ZW5kcyBjb3JlSHR0cENvbXBhdF9fbmFtZXNwYWNlLkV4dGVuZGVkU2VydmljZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFN0b3JhZ2VDbGllbnQgY2xhc3MuXG4gICAgICogQHBhcmFtIHVybCBUaGUgVVJMIG9mIHRoZSBzZXJ2aWNlIGFjY291bnQsIGNvbnRhaW5lciwgb3IgYmxvYiB0aGF0IGlzIHRoZSB0YXJnZXQgb2YgdGhlIGRlc2lyZWRcbiAgICAgKiAgICAgICAgICAgIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgcGFyYW1ldGVyIG9wdGlvbnNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIndXJsJyBjYW5ub3QgYmUgbnVsbFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbml0aWFsaXppbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIG9wdGlvbnNcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICByZXF1ZXN0Q29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYWNrYWdlRGV0YWlscyA9IGBhenNkay1qcy1henVyZS1zdG9yYWdlLWJsb2IvMTIuMjUuMGA7XG4gICAgICAgIGNvbnN0IHVzZXJBZ2VudFByZWZpeCA9IG9wdGlvbnMudXNlckFnZW50T3B0aW9ucyAmJiBvcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMudXNlckFnZW50UHJlZml4XG4gICAgICAgICAgICA/IGAke29wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXh9ICR7cGFja2FnZURldGFpbHN9YFxuICAgICAgICAgICAgOiBgJHtwYWNrYWdlRGV0YWlsc31gO1xuICAgICAgICBjb25zdCBvcHRpb25zV2l0aERlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKSwgb3B0aW9ucyksIHsgdXNlckFnZW50T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHVzZXJBZ2VudFByZWZpeCxcbiAgICAgICAgICAgIH0sIGVuZHBvaW50OiAoX2IgPSAoX2EgPSBvcHRpb25zLmVuZHBvaW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBvcHRpb25zLmJhc2VVcmkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwie3VybH1cIiB9KTtcbiAgICAgICAgc3VwZXIob3B0aW9uc1dpdGhEZWZhdWx0cyk7XG4gICAgICAgIC8vIFBhcmFtZXRlciBhc3NpZ25tZW50c1xuICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICAgICAgLy8gQXNzaWduaW5nIHZhbHVlcyB0byBDb25zdGFudCBwYXJhbWV0ZXJzXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvbiB8fCBcIjIwMjQtMTEtMDRcIjtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gbmV3IFNlcnZpY2VJbXBsKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IG5ldyBDb250YWluZXJJbXBsKHRoaXMpO1xuICAgICAgICB0aGlzLmJsb2IgPSBuZXcgQmxvYkltcGwodGhpcyk7XG4gICAgICAgIHRoaXMucGFnZUJsb2IgPSBuZXcgUGFnZUJsb2JJbXBsKHRoaXMpO1xuICAgICAgICB0aGlzLmFwcGVuZEJsb2IgPSBuZXcgQXBwZW5kQmxvYkltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuYmxvY2tCbG9iID0gbmV3IEJsb2NrQmxvYkltcGwodGhpcyk7XG4gICAgfVxufTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBTdG9yYWdlQ29udGV4dENsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQkMSB7XG4gICAgYXN5bmMgc2VuZE9wZXJhdGlvblJlcXVlc3Qob3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvblNwZWNUb1NlbmQgPSBPYmplY3QuYXNzaWduKHt9LCBvcGVyYXRpb25TcGVjKTtcbiAgICAgICAgaWYgKG9wZXJhdGlvblNwZWNUb1NlbmQucGF0aCA9PT0gXCIve2NvbnRhaW5lck5hbWV9XCIgfHxcbiAgICAgICAgICAgIG9wZXJhdGlvblNwZWNUb1NlbmQucGF0aCA9PT0gXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25TcGVjVG9TZW5kLnBhdGggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5zZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWNUb1NlbmQpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgU3RvcmFnZUNsaWVudCByZXByZXNlbnRzIGEgYmFzZWQgVVJMIGNsYXNzIGZvciB7QGxpbmsgQmxvYlNlcnZpY2VDbGllbnR9LCB7QGxpbmsgQ29udGFpbmVyQ2xpZW50fVxuICogYW5kIGV0Yy5cbiAqL1xuY2xhc3MgU3RvcmFnZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlQ2xpZW50LlxuICAgICAqIEBwYXJhbSB1cmwgLSB1cmwgdG8gcmVzb3VyY2VcbiAgICAgKiBAcGFyYW0gcGlwZWxpbmUgLSByZXF1ZXN0IHBvbGljeSBwaXBlbGluZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmwsIHBpcGVsaW5lKSB7XG4gICAgICAgIC8vIFVSTCBzaG91bGQgYmUgZW5jb2RlZCBhbmQgb25seSBvbmNlLCBwcm90b2NvbCBsYXllciBzaG91bGRuJ3QgZW5jb2RlIFVSTCBhZ2FpblxuICAgICAgICB0aGlzLnVybCA9IGVzY2FwZVVSTFBhdGgodXJsKTtcbiAgICAgICAgdGhpcy5hY2NvdW50TmFtZSA9IGdldEFjY291bnROYW1lRnJvbVVybCh1cmwpO1xuICAgICAgICB0aGlzLnBpcGVsaW5lID0gcGlwZWxpbmU7XG4gICAgICAgIHRoaXMuc3RvcmFnZUNsaWVudENvbnRleHQgPSBuZXcgU3RvcmFnZUNvbnRleHRDbGllbnQodGhpcy51cmwsIGdldENvcmVDbGllbnRPcHRpb25zKHBpcGVsaW5lKSk7XG4gICAgICAgIHRoaXMuaXNIdHRwcyA9IGlFcXVhbChnZXRVUkxTY2hlbWUodGhpcy51cmwpIHx8IFwiXCIsIFwiaHR0cHNcIik7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWxGcm9tUGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICAvLyBPdmVycmlkZSBwcm90b2NvbCBsYXllcidzIGRlZmF1bHQgY29udGVudC10eXBlXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VDbGllbnRDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dDtcbiAgICAgICAgc3RvcmFnZUNsaWVudENvbnRleHQucmVxdWVzdENvbnRlbnRUeXBlID0gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIENyZWF0ZXMgYSBzcGFuIHVzaW5nIHRoZSBnbG9iYWwgdHJhY2VyLlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IHRyYWNpbmdDbGllbnQgPSBjb3JlVHJhY2luZy5jcmVhdGVUcmFjaW5nQ2xpZW50KHtcbiAgICBwYWNrYWdlTmFtZTogXCJAYXp1cmUvc3RvcmFnZS1ibG9iXCIsXG4gICAgcGFja2FnZVZlcnNpb246IFNES19WRVJTSU9OLFxuICAgIG5hbWVzcGFjZTogXCJNaWNyb3NvZnQuU3RvcmFnZVwiLFxufSk7XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IGEgU2VydmljZVNBUyB0byBhIGJsb2IuIFNldHRpbmdcbiAqIGEgdmFsdWUgdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IHBlcm1pc3Npb25zIGZvciB0aGF0IG9wZXJhdGlvbi4gT25jZSBhbGxcbiAqIHRoZSB2YWx1ZXMgYXJlIHNldCwgdGhpcyBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIHRvU3RyaW5nIGFuZCBzZXQgYXMgdGhlIHBlcm1pc3Npb25zIGZpZWxkIG9uIGFcbiAqIHtAbGluayBCbG9iU0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgcGVybWlzc2lvbnMgc3RyaW5nIHdpdGhvdXQgdGhpcyBjbGFzcywgYnV0XG4gKiB0aGUgb3JkZXIgb2YgdGhlIHBlcm1pc3Npb25zIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQmxvYlNBU1Blcm1pc3Npb25zIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBSZWFkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgQWRkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBDcmVhdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNyZWF0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFdyaXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cml0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIERlbGV0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIHZlcnNpb24gYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlbGV0ZVZlcnNpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNmaWVzIFRhZyBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFnID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgTW92ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubW92ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIEV4ZWN1dGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4ZWN1dGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBTZXRJbW11dGFiaWxpdHlQb2xpY3kgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgUGVybWFuZW50IERlbGV0ZSBpcyBwZXJtaXR0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBlcm1hbmVudERlbGV0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2JTQVNQZXJtaXNzaW9uc30gZnJvbSB0aGUgc3BlY2lmaWVkIHBlcm1pc3Npb25zIHN0cmluZy4gVGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhblxuICAgICAqIEVycm9yIGlmIGl0IGVuY291bnRlcnMgYSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKHBlcm1pc3Npb25zKSB7XG4gICAgICAgIGNvbnN0IGJsb2JTQVNQZXJtaXNzaW9ucyA9IG5ldyBCbG9iU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXIpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiclwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLndyaXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmRlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5tb3ZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHBlcm1pc3Npb246ICR7Y2hhcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmxvYlNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2JTQVNQZXJtaXNzaW9uc30gZnJvbSBhIHJhdyBvYmplY3Qgd2hpY2ggY29udGFpbnMgc2FtZSBrZXlzIGFzIGl0XG4gICAgICogYW5kIGJvb2xlYW4gdmFsdWVzIGZvciB0aGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25MaWtlIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbShwZXJtaXNzaW9uTGlrZSkge1xuICAgICAgICBjb25zdCBibG9iU0FTUGVybWlzc2lvbnMgPSBuZXcgQmxvYlNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5yZWFkKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmFkZCkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmNyZWF0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmNyZWF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLndyaXRlKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnRhZykge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLm1vdmUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5tb3ZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZXhlY3V0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibG9iU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBwZXJtaXNzaW9ucyB0byBhIHN0cmluZy4gVXNpbmcgdGhpcyBtZXRob2Qgd2lsbCBndWFyYW50ZWUgdGhlIHBlcm1pc3Npb25zIGFyZSBpbiBhblxuICAgICAqIG9yZGVyIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBzdHJpbmcgd2hpY2ggcmVwcmVzZW50cyB0aGUgQmxvYlNBU1Blcm1pc3Npb25zXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG4gICAgICAgIGlmICh0aGlzLnJlYWQpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFkZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cml0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIndcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJtXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4ZWN1dGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgYSBTZXJ2aWNlU0FTIHRvIGEgY29udGFpbmVyLlxuICogU2V0dGluZyBhIHZhbHVlIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBwZXJtaXNzaW9ucyBmb3IgdGhhdCBvcGVyYXRpb24uXG4gKiBPbmNlIGFsbCB0aGUgdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSBwZXJtaXNzaW9ucyBmaWVsZCBvbiBhXG4gKiB7QGxpbmsgQmxvYlNBU1NpZ25hdHVyZVZhbHVlc30gb2JqZWN0LiBJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlIHBlcm1pc3Npb25zIHN0cmluZyB3aXRob3V0IHRoaXMgY2xhc3MsIGJ1dFxuICogdGhlIG9yZGVyIG9mIHRoZSBwZXJtaXNzaW9ucyBpcyBwYXJ0aWN1bGFyIGFuZCB0aGlzIGNsYXNzIGd1YXJhbnRlZXMgY29ycmVjdG5lc3MuXG4gKi9cbmNsYXNzIENvbnRhaW5lclNBU1Blcm1pc3Npb25zIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBSZWFkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgQWRkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBDcmVhdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNyZWF0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFdyaXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cml0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIERlbGV0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIHZlcnNpb24gYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlbGV0ZVZlcnNpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBMaXN0IGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5saXN0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjZmllcyBUYWcgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhZyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIE1vdmUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1vdmUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBFeGVjdXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leGVjdXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgU2V0SW1tdXRhYmlsaXR5UG9saWN5IGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IFBlcm1hbmVudCBEZWxldGUgaXMgcGVybWl0dGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZXJtYW5lbnREZWxldGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IEZpbHRlciBCbG9icyBieSBUYWdzIGlzIHBlcm1pdHRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyQnlUYWdzID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIENvbnRhaW5lclNBU1Blcm1pc3Npb25zfSBmcm9tIHRoZSBzcGVjaWZpZWQgcGVybWlzc2lvbnMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UocGVybWlzc2lvbnMpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyU0FTUGVybWlzc2lvbnMgPSBuZXcgQ29udGFpbmVyU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXIpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiclwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuYWRkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5leGVjdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZmlsdGVyQnlUYWdzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcGVybWlzc2lvbiAke2NoYXJ9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIENvbnRhaW5lclNBU1Blcm1pc3Npb25zfSBmcm9tIGEgcmF3IG9iamVjdCB3aGljaCBjb250YWlucyBzYW1lIGtleXMgYXMgaXRcbiAgICAgKiBhbmQgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbkxpa2UgLVxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHBlcm1pc3Npb25MaWtlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclNBU1Blcm1pc3Npb25zID0gbmV3IENvbnRhaW5lclNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5yZWFkKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuYWRkKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5jcmVhdGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmNyZWF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLndyaXRlKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UubGlzdCkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMubGlzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZVZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS50YWcpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLm1vdmUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5leGVjdXRlKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5leGVjdXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmZpbHRlckJ5VGFncykge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZmlsdGVyQnlUYWdzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGFpbmVyU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBwZXJtaXNzaW9ucyB0byBhIHN0cmluZy4gVXNpbmcgdGhpcyBtZXRob2Qgd2lsbCBndWFyYW50ZWUgdGhlIHBlcm1pc3Npb25zIGFyZSBpbiBhblxuICAgICAqIG9yZGVyIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogVGhlIG9yZGVyIG9mIHRoZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBhcyBzcGVjaWZpZWQgaGVyZSB0byBlbnN1cmUgY29ycmVjdG5lc3MuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5yZWFkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hZGQpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNyZWF0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JpdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ3XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInhcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwidFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwibVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGVjdXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBlcm1hbmVudERlbGV0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyQnlUYWdzKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsIGlzIG9ubHkgdXNlZCBmb3IgZ2VuZXJhdGlvbiBvZiB1c2VyIGRlbGVnYXRpb24gU0FTLlxuICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY3JlYXRlLXVzZXItZGVsZWdhdGlvbi1zYXNcbiAqL1xuY2xhc3MgVXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5cbiAgICAgKiBAcGFyYW0gYWNjb3VudE5hbWUgLVxuICAgICAqIEBwYXJhbSB1c2VyRGVsZWdhdGlvbktleSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYWNjb3VudE5hbWUsIHVzZXJEZWxlZ2F0aW9uS2V5KSB7XG4gICAgICAgIHRoaXMuYWNjb3VudE5hbWUgPSBhY2NvdW50TmFtZTtcbiAgICAgICAgdGhpcy51c2VyRGVsZWdhdGlvbktleSA9IHVzZXJEZWxlZ2F0aW9uS2V5O1xuICAgICAgICB0aGlzLmtleSA9IEJ1ZmZlci5mcm9tKHVzZXJEZWxlZ2F0aW9uS2V5LnZhbHVlLCBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgaGFzaCBzaWduYXR1cmUgZm9yIGFuIEhUVFAgcmVxdWVzdCBvciBmb3IgYSBTQVMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyaW5nVG9TaWduIC1cbiAgICAgKi9cbiAgICBjb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHN0cmluZ1RvU2lnbjogJHtKU09OLnN0cmluZ2lmeShzdHJpbmdUb1NpZ24pfWApO1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoXCJzaGEyNTZcIiwgdGhpcy5rZXkpLnVwZGF0ZShzdHJpbmdUb1NpZ24sIFwidXRmOFwiKS5kaWdlc3QoXCJiYXNlNjRcIik7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogR2VuZXJhdGUgU2FzSVBSYW5nZSBmb3JtYXQgc3RyaW5nLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBcIjguOC44LjhcIiBvciBcIjEuMS4xLjEtMjU1LjI1NS4yNTUuMjU1XCJcbiAqXG4gKiBAcGFyYW0gaXBSYW5nZSAtXG4gKi9cbmZ1bmN0aW9uIGlwUmFuZ2VUb1N0cmluZyhpcFJhbmdlKSB7XG4gICAgcmV0dXJuIGlwUmFuZ2UuZW5kID8gYCR7aXBSYW5nZS5zdGFydH0tJHtpcFJhbmdlLmVuZH1gIDogaXBSYW5nZS5zdGFydDtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFByb3RvY29scyBmb3IgZ2VuZXJhdGVkIFNBUy5cbiAqL1xuZXhwb3J0cy5TQVNQcm90b2NvbCA9IHZvaWQgMDtcbihmdW5jdGlvbiAoU0FTUHJvdG9jb2wpIHtcbiAgICAvKipcbiAgICAgKiBQcm90b2NvbCB0aGF0IGFsbG93cyBIVFRQUyBvbmx5XG4gICAgICovXG4gICAgU0FTUHJvdG9jb2xbXCJIdHRwc1wiXSA9IFwiaHR0cHNcIjtcbiAgICAvKipcbiAgICAgKiBQcm90b2NvbCB0aGF0IGFsbG93cyBib3RoIEhUVFBTIGFuZCBIVFRQXG4gICAgICovXG4gICAgU0FTUHJvdG9jb2xbXCJIdHRwc0FuZEh0dHBcIl0gPSBcImh0dHBzLGh0dHBcIjtcbn0pKGV4cG9ydHMuU0FTUHJvdG9jb2wgfHwgKGV4cG9ydHMuU0FTUHJvdG9jb2wgPSB7fSkpO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb21wb25lbnRzIHRoYXQgbWFrZSB1cCBhbiBBenVyZSBTdG9yYWdlIFNBUycgcXVlcnkgcGFyYW1ldGVycy4gVGhpcyB0eXBlIGlzIG5vdCBjb25zdHJ1Y3RlZCBkaXJlY3RseVxuICogYnkgdGhlIHVzZXI7IGl0IGlzIG9ubHkgZ2VuZXJhdGVkIGJ5IHRoZSB7QGxpbmsgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlc30gYW5kIHtAbGluayBCbG9iU0FTU2lnbmF0dXJlVmFsdWVzfVxuICogdHlwZXMuIE9uY2UgZ2VuZXJhdGVkLCBpdCBjYW4gYmUgZW5jb2RlZCBpbnRvIGEge0BsaW5rIFN0cmluZ30gYW5kIGFwcGVuZGVkIHRvIGEgVVJMIGRpcmVjdGx5ICh0aG91Z2ggY2F1dGlvbiBzaG91bGRcbiAqIGJlIHRha2VuIGhlcmUgaW4gY2FzZSB0aGVyZSBhcmUgZXhpc3RpbmcgcXVlcnkgcGFyYW1ldGVycywgd2hpY2ggbWlnaHQgYWZmZWN0IHRoZSBhcHByb3ByaWF0ZSBtZWFucyBvZiBhcHBlbmRpbmdcbiAqIHRoZXNlIHF1ZXJ5IHBhcmFtZXRlcnMpLlxuICpcbiAqIE5PVEU6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBpbW11dGFibGUuXG4gKi9cbmNsYXNzIFNBU1F1ZXJ5UGFyYW1ldGVycyB7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwuIElQIHJhbmdlIGFsbG93ZWQgZm9yIHRoaXMgU0FTLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlwUmFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmlwUmFuZ2VJbm5lcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaXBSYW5nZUlubmVyLmVuZCxcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5pcFJhbmdlSW5uZXIuc3RhcnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHZlcnNpb24sIHNpZ25hdHVyZSwgcGVybWlzc2lvbnNPck9wdGlvbnMsIHNlcnZpY2VzLCByZXNvdXJjZVR5cGVzLCBwcm90b2NvbCwgc3RhcnRzT24sIGV4cGlyZXNPbiwgaXBSYW5nZSwgaWRlbnRpZmllciwgcmVzb3VyY2UsIGNhY2hlQ29udHJvbCwgY29udGVudERpc3Bvc2l0aW9uLCBjb250ZW50RW5jb2RpbmcsIGNvbnRlbnRMYW5ndWFnZSwgY29udGVudFR5cGUsIHVzZXJEZWxlZ2F0aW9uS2V5LCBwcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCwgY29ycmVsYXRpb25JZCwgZW5jcnlwdGlvblNjb3BlKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgICAgICBpZiAocGVybWlzc2lvbnNPck9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGVybWlzc2lvbnNPck9wdGlvbnMgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIFNBU1F1ZXJ5UGFyYW1ldGVyc09wdGlvbnNcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5zZXJ2aWNlcztcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VUeXBlcyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnJlc291cmNlVHlwZXM7XG4gICAgICAgICAgICB0aGlzLnByb3RvY29sID0gcGVybWlzc2lvbnNPck9wdGlvbnMucHJvdG9jb2w7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0c09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMuc3RhcnRzT247XG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNPbiA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmV4cGlyZXNPbjtcbiAgICAgICAgICAgIHRoaXMuaXBSYW5nZUlubmVyID0gcGVybWlzc2lvbnNPck9wdGlvbnMuaXBSYW5nZTtcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmlkZW50aWZpZXI7XG4gICAgICAgICAgICB0aGlzLmVuY3J5cHRpb25TY29wZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmVuY3J5cHRpb25TY29wZTtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5yZXNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVDb250cm9sID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50RGlzcG9zaXRpb24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jb250ZW50RGlzcG9zaXRpb247XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRFbmNvZGluZyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmNvbnRlbnRFbmNvZGluZztcbiAgICAgICAgICAgIHRoaXMuY29udGVudExhbmd1YWdlID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29udGVudExhbmd1YWdlO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmNvbnRlbnRUeXBlO1xuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRPaWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFRlbmFudElkID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTdGFydHNPbiA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkRXhwaXJlc09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkU2VydmljZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFNlcnZpY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRWZXJzaW9uID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkID0gcGVybWlzc2lvbnNPck9wdGlvbnMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3JyZWxhdGlvbklkID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29ycmVsYXRpb25JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VUeXBlcyA9IHJlc291cmNlVHlwZXM7XG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNPbiA9IGV4cGlyZXNPbjtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uc09yT3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRzT24gPSBzdGFydHNPbjtcbiAgICAgICAgICAgIHRoaXMuaXBSYW5nZUlubmVyID0gaXBSYW5nZTtcbiAgICAgICAgICAgIHRoaXMuZW5jcnlwdGlvblNjb3BlID0gZW5jcnlwdGlvblNjb3BlO1xuICAgICAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVDb250cm9sID0gY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50RGlzcG9zaXRpb24gPSBjb250ZW50RGlzcG9zaXRpb247XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRFbmNvZGluZyA9IGNvbnRlbnRFbmNvZGluZztcbiAgICAgICAgICAgIHRoaXMuY29udGVudExhbmd1YWdlID0gY29udGVudExhbmd1YWdlO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xuICAgICAgICAgICAgaWYgKHVzZXJEZWxlZ2F0aW9uS2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRPaWQgPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFRlbmFudElkID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTdGFydHNPbiA9IHVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkRXhwaXJlc09uID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkU2VydmljZSA9IHVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFNlcnZpY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRWZXJzaW9uID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkID0gcHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3JyZWxhdGlvbklkID0gY29ycmVsYXRpb25JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGVzIGFsbCBTQVMgcXVlcnkgcGFyYW1ldGVycyBpbnRvIGEgc3RyaW5nIHRoYXQgY2FuIGJlIGFwcGVuZGVkIHRvIGEgVVJMLlxuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgICAgICAgIFwic3ZcIixcbiAgICAgICAgICAgIFwic3NcIixcbiAgICAgICAgICAgIFwic3J0XCIsXG4gICAgICAgICAgICBcInNwclwiLFxuICAgICAgICAgICAgXCJzdFwiLFxuICAgICAgICAgICAgXCJzZVwiLFxuICAgICAgICAgICAgXCJzaXBcIixcbiAgICAgICAgICAgIFwic2lcIixcbiAgICAgICAgICAgIFwic2VzXCIsXG4gICAgICAgICAgICBcInNrb2lkXCIsIC8vIFNpZ25lZCBvYmplY3QgSURcbiAgICAgICAgICAgIFwic2t0aWRcIiwgLy8gU2lnbmVkIHRlbmFudCBJRFxuICAgICAgICAgICAgXCJza3RcIiwgLy8gU2lnbmVkIGtleSBzdGFydCB0aW1lXG4gICAgICAgICAgICBcInNrZVwiLCAvLyBTaWduZWQga2V5IGV4cGlyeSB0aW1lXG4gICAgICAgICAgICBcInNrc1wiLCAvLyBTaWduZWQga2V5IHNlcnZpY2VcbiAgICAgICAgICAgIFwic2t2XCIsIC8vIFNpZ25lZCBrZXkgdmVyc2lvblxuICAgICAgICAgICAgXCJzclwiLFxuICAgICAgICAgICAgXCJzcFwiLFxuICAgICAgICAgICAgXCJzaWdcIixcbiAgICAgICAgICAgIFwicnNjY1wiLFxuICAgICAgICAgICAgXCJyc2NkXCIsXG4gICAgICAgICAgICBcInJzY2VcIixcbiAgICAgICAgICAgIFwicnNjbFwiLFxuICAgICAgICAgICAgXCJyc2N0XCIsXG4gICAgICAgICAgICBcInNhb2lkXCIsXG4gICAgICAgICAgICBcInNjaWRcIixcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuICAgICAgICAgICAgc3dpdGNoIChwYXJhbSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdlwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3NcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zZXJ2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5yZXNvdXJjZVR5cGVzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNwclwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnByb3RvY29sKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0XCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc3RhcnRzT24gPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh0aGlzLnN0YXJ0c09uLCBmYWxzZSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5leHBpcmVzT24gPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh0aGlzLmV4cGlyZXNPbiwgZmFsc2UpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpcFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcodGhpcy5pcFJhbmdlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzaVwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VzXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuZW5jcnlwdGlvblNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrb2lkXCI6IC8vIFNpZ25lZCBvYmplY3QgSURcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zaWduZWRPaWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2t0aWRcIjogLy8gU2lnbmVkIHRlbmFudCBJRFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFRlbmFudElkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrdFwiOiAvLyBTaWduZWQga2V5IHN0YXJ0IHRpbWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zaWduZWRTdGFydHNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuc2lnbmVkU3RhcnRzT24sIGZhbHNlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza2VcIjogLy8gU2lnbmVkIGtleSBleHBpcnkgdGltZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZEV4cGlyZXNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuc2lnbmVkRXhwaXJlc09uLCBmYWxzZSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2tzXCI6IC8vIFNpZ25lZCBrZXkgc2VydmljZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFNlcnZpY2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2t2XCI6IC8vIFNpZ25lZCBrZXkgdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3JcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5yZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzcFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpZ1wiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25hdHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyc2NjXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuY2FjaGVDb250cm9sKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY2RcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb250ZW50RGlzcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicnNjZVwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvbnRlbnRFbmNvZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyc2NsXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuY29udGVudExhbmd1YWdlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY3RcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzYW9pZFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjaWRcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJpZXMuam9pbihcIiZcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgcHJpdmF0ZSBoZWxwZXIgbWV0aG9kIHVzZWQgdG8gZmlsdGVyIGFuZCBhcHBlbmQgcXVlcnkga2V5L3ZhbHVlIHBhaXJzIGludG8gYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcXVlcmllcyAtXG4gICAgICogQHBhcmFtIGtleSAtXG4gICAgICogQHBhcmFtIHZhbHVlIC1cbiAgICAgKi9cbiAgICB0cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBrZXkgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KTtcbiAgICAgICAgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgICAgICBpZiAoa2V5Lmxlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcXVlcmllcy5wdXNoKGAke2tleX09JHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXksIGFjY291bnROYW1lKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWxPclVzZXJEZWxlZ2F0aW9uS2V5LCBhY2NvdW50TmFtZSkuc2FzUXVlcnlQYXJhbWV0ZXJzO1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXksIGFjY291bnROYW1lKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA6IFNFUlZJQ0VfVkVSU0lPTjtcbiAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXkgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFxuICAgICAgICA/IHNoYXJlZEtleUNyZWRlbnRpYWxPclVzZXJEZWxlZ2F0aW9uS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGxldCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWw7XG4gICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgPT09IHVuZGVmaW5lZCAmJiBhY2NvdW50TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCA9IG5ldyBVc2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwoYWNjb3VudE5hbWUsIHNoYXJlZEtleUNyZWRlbnRpYWxPclVzZXJEZWxlZ2F0aW9uS2V5KTtcbiAgICB9XG4gICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgPT09IHVuZGVmaW5lZCAmJiB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIHNoYXJlZEtleUNyZWRlbnRpYWwsIHVzZXJEZWxlZ2F0aW9uS2V5IG9yIGFjY291bnROYW1lLlwiKTtcbiAgICB9XG4gICAgLy8gVmVyc2lvbiAyMDIwLTEyLTA2IGFkZHMgc3VwcG9ydCBmb3IgZW5jcnlwdGlvbnNjb3BlIGluIFNBUy5cbiAgICBpZiAodmVyc2lvbiA+PSBcIjIwMjAtMTItMDZcIikge1xuICAgICAgICBpZiAoc2hhcmVkS2V5Q3JlZGVudGlhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzMjAyMDEyMDYoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzVURLMjAyMDEyMDYoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBWZXJzaW9uIDIwMTktMTItMTIgYWRkcyBzdXBwb3J0IGZvciB0aGUgYmxvYiB0YWdzIHBlcm1pc3Npb24uXG4gICAgLy8gVmVyc2lvbiAyMDE4LTExLTA5IGFkZHMgc3VwcG9ydCBmb3IgdGhlIHNpZ25lZCByZXNvdXJjZSBhbmQgc2lnbmVkIGJsb2Igc25hcHNob3QgdGltZSBmaWVsZHMuXG4gICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzI2NvbnN0cnVjdGluZy10aGUtc2lnbmF0dXJlLXN0cmluZ1xuICAgIGlmICh2ZXJzaW9uID49IFwiMjAxOC0xMS0wOVwiKSB7XG4gICAgICAgIGlmIChzaGFyZWRLZXlDcmVkZW50aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFZlcnNpb24gMjAyMC0wMi0xMCBkZWxlZ2F0aW9uIFNBUyBzaWduYXR1cmUgY29uc3RydWN0aW9uIGluY2x1ZGVzIHByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBhZ2VudE9iamVjdElkLCBjb3JyZWxhdGlvbklkLlxuICAgICAgICAgICAgaWYgKHZlcnNpb24gPj0gXCIyMDIwLTAyLTEwXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzVURLMjAyMDAyMTAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uID49IFwiMjAxNS0wNC0wNVwiKSB7XG4gICAgICAgIGlmIChzaGFyZWRLZXlDcmVkZW50aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDE1MDQwNShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTgtMTEtMDknIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTIHVzaW5nIHVzZXIgZGVsZWdhdGlvbiBrZXkuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTUtMDQtMDUnLlwiKTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAxNS0wNC0wNSBBTkQgQkVGT1JFIDIwMTgtMTEtMDkuXG4gKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTQVNRdWVyeVBhcmFtZXRlcnMuXG4gKlxuICogT25seSBhY2NlcHRzIHJlcXVpcmVkIHNldHRpbmdzIG5lZWRlZCB0byBjcmVhdGUgYSBTQVMuIEZvciBvcHRpb25hbCBzZXR0aW5ncyBwbGVhc2VcbiAqIHNldCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgZGlyZWN0bHksIHN1Y2ggYXMgcGVybWlzc2lvbnMsIHN0YXJ0c09uIGFuZCBpZGVudGlmaWVyLlxuICpcbiAqIFdBUk5JTkc6IFdoZW4gaWRlbnRpZmllciBpcyBub3QgcHJvdmlkZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICogWW91IE1VU1QgYXNzaWduIHZhbHVlIHRvIGlkZW50aWZpZXIgb3IgZXhwaXJlc09uICYgcGVybWlzc2lvbnMgbWFudWFsbHkgaWYgeW91IGluaXRpYWwgd2l0aFxuICogdGhpcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gc2hhcmVkS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMTUwNDA1KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciAmJlxuICAgICAgICAhKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24pKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gJ2lkZW50aWZpZXInIGlzIG5vdCBwcm92aWRlZC5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGFpbmVyTmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSksXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllcixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlIDogXCJcIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gc2hhcmVkS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAxOC0xMS0wOS5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24gYW5kIGlkZW50aWZpZXIuXG4gKlxuICogV0FSTklORzogV2hlbiBpZGVudGlmaWVyIGlzIG5vdCBwcm92aWRlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKiBZb3UgTVVTVCBhc3NpZ24gdmFsdWUgdG8gaWRlbnRpZmllciBvciBleHBpcmVzT24gJiBwZXJtaXNzaW9ucyBtYW51YWxseSBpZiB5b3UgaW5pdGlhbCB3aXRoXG4gKiB0aGlzIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSBzaGFyZWRLZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzMjAxODExMDkoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIGlmICghYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyICYmXG4gICAgICAgICEoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ3Blcm1pc3Npb25zJyBhbmQgJ2V4cGlyZXNPbicgZm9yIEJsb2IgU0FTIGdlbmVyYXRpb24gd2hlbiAnaWRlbnRpZmllcicgaXMgbm90IHByb3ZpZGVkLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUoc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgOiBcIlwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaGFyZWRLZXlDcmVkZW50aWFsLmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2FzUXVlcnlQYXJhbWV0ZXJzOiBuZXcgU0FTUXVlcnlQYXJhbWV0ZXJzKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiwgc2lnbmF0dXJlLCB2ZXJpZmllZFBlcm1pc3Npb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLCByZXNvdXJjZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZywgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDIwLTEyLTA2LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbiBhbmQgaWRlbnRpZmllci5cbiAqXG4gKiBXQVJOSU5HOiBXaGVuIGlkZW50aWZpZXIgaXMgbm90IHByb3ZpZGVkLCBwZXJtaXNzaW9ucyBhbmQgZXhwaXJlc09uIGFyZSByZXF1aXJlZC5cbiAqIFlvdSBNVVNUIGFzc2lnbiB2YWx1ZSB0byBpZGVudGlmaWVyIG9yIGV4cGlyZXNPbiAmIHBlcm1pc3Npb25zIG1hbnVhbGx5IGlmIHlvdSBpbml0aWFsIHdpdGhcbiAqIHRoaXMgY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHNoYXJlZEtleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDIwMTIwNihibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyA9IFNBU1NpZ25hdHVyZVZhbHVlc1Nhbml0eUNoZWNrQW5kQXV0b2ZpbGwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyk7XG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIgJiZcbiAgICAgICAgIShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuICdpZGVudGlmaWVyJyBpcyBub3QgcHJvdmlkZWQuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVzb3VyY2UgPSBcImNcIjtcbiAgICBsZXQgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWU7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJ2XCI7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHBhcnNlIGFuZCB0b1N0cmluZyBndWFyYW50ZWVzIHRoZSBwcm9wZXIgb3JkZXJpbmcgYW5kIHRocm93cyBvbiBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgbGV0IHZlcmlmaWVkUGVybWlzc2lvbnM7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTaWduYXR1cmUgaXMgZ2VuZXJhdGVkIG9uIHRoZSB1bi11cmwtZW5jb2RlZCB2YWx1ZXMuXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID8gdmVyaWZpZWRQZXJtaXNzaW9ucyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgZ2V0Q2Fub25pY2FsTmFtZShzaGFyZWRLZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgOiBcIlwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaGFyZWRLZXlDcmVkZW50aWFsLmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2FzUXVlcnlQYXJhbWV0ZXJzOiBuZXcgU0FTUXVlcnlQYXJhbWV0ZXJzKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiwgc2lnbmF0dXJlLCB2ZXJpZmllZFBlcm1pc3Npb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLCByZXNvdXJjZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZywgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAxOC0xMS0wOS5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24uXG4gKlxuICogV0FSTklORzogaWRlbnRpZmllciB3aWxsIGJlIGlnbm9yZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICAvLyBTdG9yZWQgYWNjZXNzIHBvbGljaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBhIHVzZXIgZGVsZWdhdGlvbiBTQVMuXG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zIHx8ICFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuIGdlbmVyYXRpbmcgdXNlciBkZWxlZ2F0aW9uIFNBUy5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGxldCB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZTtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICByZXNvdXJjZSA9IFwiYlwiO1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJic1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnZcIjtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFZlcnNpb24sXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5KSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAyMC0wMi0xMC5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24uXG4gKlxuICogV0FSTklORzogaWRlbnRpZmllciB3aWxsIGJlIGlnbm9yZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDIwMDIxMChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICAvLyBTdG9yZWQgYWNjZXNzIHBvbGljaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBhIHVzZXIgZGVsZWdhdGlvbiBTQVMuXG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zIHx8ICFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuIGdlbmVyYXRpbmcgdXNlciBkZWxlZ2F0aW9uIFNBUy5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGxldCB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZTtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICByZXNvdXJjZSA9IFwiYlwiO1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJic1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnZcIjtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFZlcnNpb24sXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsXG4gICAgICAgIHVuZGVmaW5lZCwgLy8gYWdlbnRPYmplY3RJZFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDIwLTEyLTA2LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbi5cbiAqXG4gKiBXQVJOSU5HOiBpZGVudGlmaWVyIHdpbGwgYmUgaWdub3JlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMjAxMjA2KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIC8vIFN0b3JlZCBhY2Nlc3MgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGEgdXNlciBkZWxlZ2F0aW9uIFNBUy5cbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgfHwgIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkT2JqZWN0SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCxcbiAgICAgICAgdW5kZWZpbmVkLCAvLyBhZ2VudE9iamVjdElkXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldENhbm9uaWNhbE5hbWUoYWNjb3VudE5hbWUsIGNvbnRhaW5lck5hbWUsIGJsb2JOYW1lKSB7XG4gICAgLy8gQ29udGFpbmVyOiBcIi9ibG9iL2FjY291bnQvY29udGFpbmVyTmFtZVwiXG4gICAgLy8gQmxvYjogICAgICBcIi9ibG9iL2FjY291bnQvY29udGFpbmVyTmFtZS9ibG9iTmFtZVwiXG4gICAgY29uc3QgZWxlbWVudHMgPSBbYC9ibG9iLyR7YWNjb3VudE5hbWV9LyR7Y29udGFpbmVyTmFtZX1gXTtcbiAgICBpZiAoYmxvYk5hbWUpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChgLyR7YmxvYk5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50cy5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA6IFNFUlZJQ0VfVkVSU0lPTjtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUgJiYgdmVyc2lvbiA8IFwiMjAxOC0xMS0wOVwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOC0xMS0wOScgd2hlbiBwcm92aWRpbmcgJ3NuYXBzaG90VGltZScuXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSA9PT0gdW5kZWZpbmVkICYmIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ2Jsb2JOYW1lJyB3aGVuIHByb3ZpZGluZyAnc25hcHNob3RUaW1lJy5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCAmJiB2ZXJzaW9uIDwgXCIyMDE5LTEwLTEwXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEwLTEwJyB3aGVuIHByb3ZpZGluZyAndmVyc2lvbklkJy5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lID09PSB1bmRlZmluZWQgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAnYmxvYk5hbWUnIHdoZW4gcHJvdmlkaW5nICd2ZXJzaW9uSWQnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAyMC0wOC0wNFwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0wOC0wNCcgd2hlbiBwcm92aWRlZCAnaScgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEwLTEwXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEwLTEwJyB3aGVuIHByb3ZpZGluZyAneCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkaW5nICd5JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50YWcgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMi0xMlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMi0xMicgd2hlbiBwcm92aWRpbmcgJ3QnIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAodmVyc2lvbiA8IFwiMjAyMC0wMi0xMFwiICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMubW92ZSB8fCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLmV4ZWN1dGUpKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0wMi0xMCcgd2hlbiBwcm92aWRpbmcgdGhlICdtJyBvciAnZScgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uIDwgXCIyMDIxLTA0LTEwXCIgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLmZpbHRlckJ5VGFncykge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjEtMDQtMTAnIHdoZW4gcHJvdmlkaW5nIHRoZSAnZicgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uIDwgXCIyMDIwLTAyLTEwXCIgJiZcbiAgICAgICAgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQgfHwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb3JyZWxhdGlvbklkKSkge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjAtMDItMTAnIHdoZW4gcHJvdmlkaW5nICdwcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCcgb3IgJ2NvcnJlbGF0aW9uSWQnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlICYmIHZlcnNpb24gPCBcIjIwMjAtMTItMDZcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjAtMTItMDYnIHdoZW4gcHJvdmlkZWQgJ2VuY3J5cHRpb25TY29wZScgaW4gU0FTLlwiKTtcbiAgICB9XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICByZXR1cm4gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcztcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgY2xpZW50IHRoYXQgbWFuYWdlcyBsZWFzZXMgZm9yIGEge0BsaW5rIENvbnRhaW5lckNsaWVudH0gb3IgYSB7QGxpbmsgQmxvYkNsaWVudH0uXG4gKi9cbmNsYXNzIEJsb2JMZWFzZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbGVhc2UgSWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYXNlSWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHVybC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB1cmwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cmw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYkxlYXNlQ2xpZW50LlxuICAgICAqIEBwYXJhbSBjbGllbnQgLSBUaGUgY2xpZW50IHRvIG1ha2UgdGhlIGxlYXNlIG9wZXJhdGlvbiByZXF1ZXN0cy5cbiAgICAgKiBAcGFyYW0gbGVhc2VJZCAtIEluaXRpYWwgcHJvcG9zZWQgbGVhc2UgaWQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50LCBsZWFzZUlkKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudENvbnRleHQgPSBjbGllbnQuc3RvcmFnZUNsaWVudENvbnRleHQ7XG4gICAgICAgIHRoaXMuX3VybCA9IGNsaWVudC51cmw7XG4gICAgICAgIGlmIChjbGllbnQubmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24gPSBjbGllbnRDb250ZXh0LmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24gPSBjbGllbnRDb250ZXh0LmJsb2I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsZWFzZUlkKSB7XG4gICAgICAgICAgICBsZWFzZUlkID0gY29yZVV0aWwucmFuZG9tVVVJRCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xlYXNlSWQgPSBsZWFzZUlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBjb250YWluZXIgZm9yIGRlbGV0ZSBvcGVyYXRpb25zLCBvciBvbiBhIGJsb2JcbiAgICAgKiBmb3Igd3JpdGUgYW5kIGRlbGV0ZSBvcGVyYXRpb25zLlxuICAgICAqIFRoZSBsb2NrIGR1cmF0aW9uIGNhbiBiZSAxNSB0byA2MCBzZWNvbmRzLCBvciBjYW4gYmUgaW5maW5pdGUuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGR1cmF0aW9uIC0gTXVzdCBiZSBiZXR3ZWVuIDE1IHRvIDYwIHNlY29uZHMsIG9yIGluZmluaXRlICgtMSlcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbiB0byBjb25maWd1cmUgbGVhc2UgbWFuYWdlbWVudCBvcGVyYXRpb25zLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIGFjcXVpcmUgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGFjcXVpcmVMZWFzZShkdXJhdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtYWNxdWlyZUxlYXNlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5hY3F1aXJlTGVhc2Uoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcm9wb3NlZExlYXNlSWQ6IHRoaXMuX2xlYXNlSWQsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gY2hhbmdlIHRoZSBJRCBvZiB0aGUgbGVhc2UuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bvc2VkTGVhc2VJZCAtIHRoZSBwcm9wb3NlZCBuZXcgbGVhc2UgSWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb24gdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciBjaGFuZ2UgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNoYW5nZUxlYXNlKHByb3Bvc2VkTGVhc2VJZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtY2hhbmdlTGVhc2VcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5jaGFuZ2VMZWFzZSh0aGlzLl9sZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdGhpcy5fbGVhc2VJZCA9IHByb3Bvc2VkTGVhc2VJZDtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvIGZyZWUgdGhlIGxlYXNlIGlmIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgc28gdGhhdCBhbm90aGVyIGNsaWVudCBtYXlcbiAgICAgKiBpbW1lZGlhdGVseSBhY3F1aXJlIGEgbGVhc2UgYWdhaW5zdCB0aGUgY29udGFpbmVyIG9yIHRoZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWNvbnRhaW5lclxuICAgICAqIGFuZFxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9uIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgcmVsZWFzZSBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgcmVsZWFzZUxlYXNlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICBpZiAodGhpcy5faXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICgoKChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlmTWF0Y2gpICYmICgoX2IgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKCgoX2MgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk5vbmVNYXRjaCkgJiYgKChfZCA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKChfZSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLnRhZ0NvbmRpdGlvbnMpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgSWZNYXRjaCwgSWZOb25lTWF0Y2ggYW5kIHRhZ3MgYWNjZXNzIGNvbmRpdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIHNlcnZpY2UuIFZhbHVlcyBvdGhlciB0aGFuIHVuZGVmaW5lZCBvciB0aGVpciBkZWZhdWx0IHZhbHVlcyBhcmUgbm90IGFjY2VwdGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkxlYXNlQ2xpZW50LXJlbGVhc2VMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24ucmVsZWFzZUxlYXNlKHRoaXMuX2xlYXNlSWQsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gcmVuZXcgdGhlIGxlYXNlLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWNvbnRhaW5lclxuICAgICAqIGFuZFxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9uIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgcmVuZXcgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHJlbmV3TGVhc2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtcmVuZXdMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24ucmVuZXdMZWFzZSh0aGlzLl9sZWFzZUlkLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gZW5kIHRoZSBsZWFzZSBidXQgZW5zdXJlIHRoYXQgYW5vdGhlciBjbGllbnQgY2Fubm90IGFjcXVpcmUgYSBuZXcgbGVhc2VcbiAgICAgKiB1bnRpbCB0aGUgY3VycmVudCBsZWFzZSBwZXJpb2QgaGFzIGV4cGlyZWQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJyZWFrUGVyaW9kIC0gQnJlYWsgcGVyaW9kXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgYnJlYWsgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGJyZWFrTGVhc2UoYnJlYWtQZXJpb2QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICBpZiAodGhpcy5faXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICgoKChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlmTWF0Y2gpICYmICgoX2IgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKCgoX2MgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk5vbmVNYXRjaCkgJiYgKChfZCA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKChfZSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLnRhZ0NvbmRpdGlvbnMpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgSWZNYXRjaCwgSWZOb25lTWF0Y2ggYW5kIHRhZ3MgYWNjZXNzIGNvbmRpdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIHNlcnZpY2UuIFZhbHVlcyBvdGhlciB0aGFuIHVuZGVmaW5lZCBvciB0aGVpciBkZWZhdWx0IHZhbHVlcyBhcmUgbm90IGFjY2VwdGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkxlYXNlQ2xpZW50LWJyZWFrTGVhc2VcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25PcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJyZWFrUGVyaW9kLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5icmVha0xlYXNlKG9wZXJhdGlvbk9wdGlvbnMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIEEgTm9kZS5qcyBSZWFkYWJsZVN0cmVhbSB3aWxsIGludGVybmFsbHkgcmV0cnkgd2hlbiBpbnRlcm5hbCBSZWFkYWJsZVN0cmVhbSB1bmV4cGVjdGVkIGVuZHMuXG4gKi9cbmNsYXNzIFJldHJpYWJsZVJlYWRhYmxlU3RyZWFtIGV4dGVuZHMgc3RyZWFtLlJlYWRhYmxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJldHJpYWJsZVJlYWRhYmxlU3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBjdXJyZW50IFJlYWRhYmxlU3RyZWFtIHJldHVybmVkIGZyb20gZ2V0dGVyXG4gICAgICogQHBhcmFtIGdldHRlciAtIEEgbWV0aG9kIGNhbGxpbmcgZG93bmxvYWRpbmcgcmVxdWVzdCByZXR1cm5pbmdcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBuZXcgUmVhZGFibGVTdHJlYW0gZnJvbSBzcGVjaWZpZWQgb2Zmc2V0XG4gICAgICogQHBhcmFtIG9mZnNldCAtIE9mZnNldCBwb3NpdGlvbiBpbiBvcmlnaW5hbCBkYXRhIHNvdXJjZSB0byByZWFkXG4gICAgICogQHBhcmFtIGNvdW50IC0gSG93IG11Y2ggZGF0YSBpbiBvcmlnaW5hbCBkYXRhIHNvdXJjZSB0byByZWFkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNvdXJjZSwgZ2V0dGVyLCBvZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIoeyBoaWdoV2F0ZXJNYXJrOiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgfSk7XG4gICAgICAgIHRoaXMucmV0cmllcyA9IDA7XG4gICAgICAgIHRoaXMuc291cmNlRGF0YUhhbmRsZXIgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kb0luamVjdEVycm9yT25jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kb0luamVjdEVycm9yT25jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgICAgICAvLyAgIGBPZmZzZXQ6ICR7dGhpcy5vZmZzZXR9LCBSZWNlaXZlZCAke2RhdGEubGVuZ3RofSBmcm9tIGludGVybmFsIHN0cmVhbWBcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogdGhpcy5vZmZzZXQgLSB0aGlzLnN0YXJ0IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnB1c2goZGF0YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNvdXJjZUFib3J0ZWRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBhYm9ydENvbnRyb2xsZXIuQWJvcnRFcnJvcihcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCIpO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KGFib3J0RXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyID0gKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIC8vICAgYFNvdXJjZSBzdHJlYW0gZW1pdHMgZW5kIG9yIGVycm9yLCBvZmZzZXQ6ICR7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5vZmZzZXRcbiAgICAgICAgICAgIC8vICAgfSwgZGVzdCBlbmQgOiAke3RoaXMuZW5kfWBcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNvdXJjZUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9mZnNldCAtIDEgPT09IHRoaXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vZmZzZXQgPD0gdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAvLyAgIGByZXRyaWVzOiAke3RoaXMucmV0cmllc30sIG1heCByZXRyaWVzOiAke3RoaXMubWF4UmV0cmllc31gXG4gICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXRyaWVzIDwgdGhpcy5tYXhSZXRyeVJlcXVlc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV0cmllcyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldHRlcih0aGlzLm9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChuZXdTb3VyY2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlID0gbmV3U291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTb3VyY2VFdmVudEhhbmRsZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShuZXcgRXJyb3IoYERhdGEgY29ycnVwdGlvbiBmYWlsdXJlOiByZWNlaXZlZCBsZXNzIGRhdGEgdGhhbiByZXF1aXJlZCBhbmQgcmVhY2hlZCBtYXhSZXRpcmVzIGxpbWl0YXRpb24uIFJlY2VpdmVkIGRhdGEgb2Zmc2V0OiAke3RoaXMub2Zmc2V0IC0gMX0sIGRhdGEgbmVlZGVkIG9mZnNldDogJHt0aGlzLmVuZH0sIHJldHJpZXM6ICR7dGhpcy5yZXRyaWVzfSwgbWF4IHJldHJpZXM6ICR7dGhpcy5tYXhSZXRyeVJlcXVlc3RzfWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kobmV3IEVycm9yKGBEYXRhIGNvcnJ1cHRpb24gZmFpbHVyZTogUmVjZWl2ZWQgbW9yZSBkYXRhIHRoYW4gb3JpZ2luYWwgcmVxdWVzdCwgZGF0YSBuZWVkZWQgb2Zmc2V0IGlzICR7dGhpcy5lbmR9LCByZWNlaXZlZCBvZmZzZXQ6ICR7dGhpcy5vZmZzZXQgLSAxfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXR0ZXIgPSBnZXR0ZXI7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLnN0YXJ0ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgdGhpcy5lbmQgPSBvZmZzZXQgKyBjb3VudCAtIDE7XG4gICAgICAgIHRoaXMubWF4UmV0cnlSZXF1ZXN0cyA9XG4gICAgICAgICAgICBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgJiYgb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzID49IDAgPyBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgOiAwO1xuICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBvcHRpb25zLm9uUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuc2V0U291cmNlRXZlbnRIYW5kbGVycygpO1xuICAgIH1cbiAgICBfcmVhZCgpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG4gICAgfVxuICAgIHNldFNvdXJjZUV2ZW50SGFuZGxlcnMoKSB7XG4gICAgICAgIHRoaXMuc291cmNlLm9uKFwiZGF0YVwiLCB0aGlzLnNvdXJjZURhdGFIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJlbmRcIiwgdGhpcy5zb3VyY2VFcnJvck9yRW5kSGFuZGxlcik7XG4gICAgICAgIHRoaXMuc291cmNlLm9uKFwiZXJyb3JcIiwgdGhpcy5zb3VyY2VFcnJvck9yRW5kSGFuZGxlcik7XG4gICAgICAgIC8vIG5lZWRlZCBmb3IgTm9kZTE0XG4gICAgICAgIHRoaXMuc291cmNlLm9uKFwiYWJvcnRlZFwiLCB0aGlzLnNvdXJjZUFib3J0ZWRIYW5kbGVyKTtcbiAgICB9XG4gICAgcmVtb3ZlU291cmNlRXZlbnRIYW5kbGVycygpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsIHRoaXMuc291cmNlRGF0YUhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydGVkXCIsIHRoaXMuc291cmNlQWJvcnRlZEhhbmRsZXIpO1xuICAgIH1cbiAgICBfZGVzdHJveShlcnJvciwgY2FsbGJhY2spIHtcbiAgICAgICAgLy8gcmVtb3ZlIGxpc3RlbmVyIGZyb20gc291cmNlIGFuZCByZWxlYXNlIHNvdXJjZVxuICAgICAgICB0aGlzLnJlbW92ZVNvdXJjZUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgdGhpcy5zb3VyY2UuZGVzdHJveSgpO1xuICAgICAgICBjYWxsYmFjayhlcnJvciA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGVycm9yKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogQmxvYkRvd25sb2FkUmVzcG9uc2UgaW1wbGVtZW50cyBCbG9iRG93bmxvYWRSZXNwb25zZVBhcnNlZCBpbnRlcmZhY2UsIGFuZCBpbiBOb2RlLmpzIHJ1bnRpbWUgaXQgd2lsbFxuICogYXV0b21hdGljYWxseSByZXRyeSB3aGVuIGludGVybmFsIHJlYWQgc3RyZWFtIHVuZXhwZWN0ZWQgZW5kcy4gKFRoaXMga2luZCBvZiB1bmV4cGVjdGVkIGVuZHMgY2Fubm90XG4gKiB0cmlnZ2VyIHJldHJpZXMgZGVmaW5lZCBpbiBwaXBlbGluZSByZXRyeSBwb2xpY3kuKVxuICpcbiAqIFRoZSB7QGxpbmsgcmVhZGFibGVTdHJlYW1Cb2R5fSBzdHJlYW0gd2lsbCByZXRyeSB1bmRlcmxheWVyLCB5b3UgY2FuIGp1c3QgdXNlIGl0IGFzIGEgbm9ybWFsIE5vZGUuanNcbiAqIFJlYWRhYmxlIHN0cmVhbS5cbiAqL1xuY2xhc3MgQmxvYkRvd25sb2FkUmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzZXJ2aWNlIHN1cHBvcnRzXG4gICAgICogcmVxdWVzdHMgZm9yIHBhcnRpYWwgZmlsZSBjb250ZW50LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGFjY2VwdFJhbmdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5hY2NlcHRSYW5nZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgaXQgd2FzIHByZXZpb3VzbHkgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNhY2hlQ29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jYWNoZUNvbnRyb2w7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgJ3gtbXMtY29udGVudC1kaXNwb3NpdGlvbicgaGVhZGVyIGFuZCBzcGVjaWZpZXMgaG93IHRvIHByb2Nlc3MgdGhlXG4gICAgICogcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudERpc3Bvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnREaXNwb3NpdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBDb250ZW50LUVuY29kaW5nIHJlcXVlc3QgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRFbmNvZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50RW5jb2Rpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgQ29udGVudC1MYW5ndWFnZSByZXF1ZXN0IGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TGFuZ3VhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudExhbmd1YWdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIgZm9yIGFcbiAgICAgKiBwYWdlIGJsb2IuIFRoaXMgaGVhZGVyIGlzIG5vdCByZXR1cm5lZCBmb3IgYmxvY2sgYmxvYnMgb3IgYXBwZW5kIGJsb2JzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JTZXF1ZW5jZU51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iU2VxdWVuY2VOdW1iZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBibG9iJ3MgdHlwZS4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6XG4gICAgICogJ0Jsb2NrQmxvYicsICdQYWdlQmxvYicsICdBcHBlbmRCbG9iJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iVHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBieXRlcyBwcmVzZW50IGluIHRoZVxuICAgICAqIHJlc3BvbnNlIGJvZHkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZmlsZSBoYXMgYW4gTUQ1IGhhc2ggYW5kIHRoZVxuICAgICAqIHJlcXVlc3QgaXMgdG8gcmVhZCB0aGUgZnVsbCBmaWxlLCB0aGlzIHJlc3BvbnNlIGhlYWRlciBpcyByZXR1cm5lZCBzbyB0aGF0XG4gICAgICogdGhlIGNsaWVudCBjYW4gY2hlY2sgZm9yIG1lc3NhZ2UgY29udGVudCBpbnRlZ3JpdHkuIElmIHRoZSByZXF1ZXN0IGlzIHRvXG4gICAgICogcmVhZCBhIHNwZWNpZmllZCByYW5nZSBhbmQgdGhlICd4LW1zLXJhbmdlLWdldC1jb250ZW50LW1kNScgaXMgc2V0IHRvXG4gICAgICogdHJ1ZSwgdGhlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGFuIE1ENSBoYXNoIGZvciB0aGUgcmFuZ2UsIGFzIGxvbmcgYXMgdGhlXG4gICAgICogcmFuZ2Ugc2l6ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNCBNQi4gSWYgbmVpdGhlciBvZiB0aGVzZSBzZXRzIG9mXG4gICAgICogY29uZGl0aW9ucyBpcyB0cnVlLCB0aGVuIG5vIHZhbHVlIGlzIHJldHVybmVkIGZvciB0aGUgJ0NvbnRlbnQtTUQ1J1xuICAgICAqIGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TUQ1KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRNRDU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgYnl0ZXMgcmV0dXJuZWQgaWZcbiAgICAgKiB0aGUgY2xpZW50IHJlcXVlc3RlZCBhIHN1YnNldCBvZiB0aGUgZmlsZSBieSBzZXR0aW5nIHRoZSBSYW5nZSByZXF1ZXN0XG4gICAgICogaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRSYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50UmFuZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgc3BlY2lmaWVkIGZvciB0aGUgZmlsZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBjb250ZW50IHR5cGUgaXMgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50VHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uY2x1c2lvbiB0aW1lIG9mIHRoZSBsYXN0IGF0dGVtcHRlZFxuICAgICAqIENvcHkgRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS4gVGhpcyB2YWx1ZVxuICAgICAqIGNhbiBzcGVjaWZ5IHRoZSB0aW1lIG9mIGEgY29tcGxldGVkLCBhYm9ydGVkLCBvciBmYWlsZWQgY29weSBhdHRlbXB0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlDb21wbGV0ZWRPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5Q29tcGxldGVkT247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0cmluZyBpZGVudGlmaWVyIGZvciB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weVxuICAgICAqIEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgYW5kXG4gICAgICogdGhlIHRvdGFsIGJ5dGVzIGluIHRoZSBzb3VyY2UgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb25cbiAgICAgKiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBDYW4gc2hvdyBiZXR3ZWVuIDAgYW5kXG4gICAgICogQ29udGVudC1MZW5ndGggYnl0ZXMgY29waWVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlQcm9ncmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5UHJvZ3Jlc3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVSTCB1cCB0byAyS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIHRoZVxuICAgICAqIHNvdXJjZSBmaWxlIHVzZWQgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlXG4gICAgICogd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVNvdXJjZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGUgb2YgdGhlIGNvcHkgb3BlcmF0aW9uXG4gICAgICogaWRlbnRpZmllZCBieSAneC1tcy1jb3B5LWlkJy4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdwZW5kaW5nJyxcbiAgICAgKiAnc3VjY2VzcycsICdhYm9ydGVkJywgJ2ZhaWxlZCdcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwZWFycyB3aGVuXG4gICAgICogeC1tcy1jb3B5LXN0YXR1cyBpcyBmYWlsZWQgb3IgcGVuZGluZy4gRGVzY3JpYmVzIGNhdXNlIG9mIGZhdGFsIG9yXG4gICAgICogbm9uLWZhdGFsIGNvcHkgb3BlcmF0aW9uIGZhaWx1cmUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVN0YXR1c0Rlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXNEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiBhIGJsb2IgaXMgbGVhc2VkLFxuICAgICAqIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBsZWFzZSBpcyBvZiBpbmZpbml0ZSBvciBmaXhlZCBkdXJhdGlvbi4gUG9zc2libGVcbiAgICAgKiB2YWx1ZXMgaW5jbHVkZTogJ2luZmluaXRlJywgJ2ZpeGVkJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZUR1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlRHVyYXRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExlYXNlIHN0YXRlIG9mIHRoZSBibG9iLiBQb3NzaWJsZVxuICAgICAqIHZhbHVlcyBpbmNsdWRlOiAnYXZhaWxhYmxlJywgJ2xlYXNlZCcsICdleHBpcmVkJywgJ2JyZWFraW5nJywgJ2Jyb2tlbicuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZVN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBsZWFzZSBzdGF0dXMgb2YgdGhlXG4gICAgICogYmxvYi4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdsb2NrZWQnLCAndW5sb2NrZWQnLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlU3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlU3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFVUQyBkYXRlL3RpbWUgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXRcbiAgICAgKiBpbmRpY2F0ZXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHJlc3BvbnNlIHdhcyBpbml0aWF0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5kYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGNvbW1pdHRlZCBibG9ja3NcbiAgICAgKiBwcmVzZW50IGluIHRoZSBibG9iLiBUaGlzIGhlYWRlciBpcyByZXR1cm5lZCBvbmx5IGZvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBFVGFnIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0b1xuICAgICAqIHBlcmZvcm0gb3BlcmF0aW9ucyBjb25kaXRpb25hbGx5LCBpbiBxdW90ZXMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXRhZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ldGFnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBibG9iXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgdGFnQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudGFnQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciBjb2RlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGVycm9yQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5lcnJvckNvZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGlzIGhlYWRlciBpcyBzZXQgdG9cbiAgICAgKiB0cnVlIGlmIHRoZSBmaWxlIGRhdGEgYW5kIGFwcGxpY2F0aW9uIG1ldGFkYXRhIGFyZSBjb21wbGV0ZWx5IGVuY3J5cHRlZFxuICAgICAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBpcyBzZXQgdG8gZmFsc2UgKHdoZW5cbiAgICAgKiB0aGUgZmlsZSBpcyB1bmVuY3J5cHRlZCwgb3IgaWYgb25seSBwYXJ0cyBvZiB0aGUgZmlsZS9hcHBsaWNhdGlvbiBtZXRhZGF0YVxuICAgICAqIGFyZSBlbmNyeXB0ZWQpLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlzU2VydmVyRW5jcnlwdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmlzU2VydmVyRW5jcnlwdGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgYmxvYiBoYXMgYSBNRDUgaGFzaCwgYW5kIGlmXG4gICAgICogcmVxdWVzdCBjb250YWlucyByYW5nZSBoZWFkZXIgKFJhbmdlIG9yIHgtbXMtcmFuZ2UpLCB0aGlzIHJlc3BvbnNlIGhlYWRlclxuICAgICAqIGlzIHJldHVybmVkIHdpdGggdGhlIHZhbHVlIG9mIHRoZSB3aG9sZSBibG9iJ3MgTUQ1IHZhbHVlLiBUaGlzIHZhbHVlIG1heVxuICAgICAqIG9yIG1heSBub3QgYmUgZXF1YWwgdG8gdGhlIHZhbHVlIHJldHVybmVkIGluIENvbnRlbnQtTUQ1IGhlYWRlciwgd2l0aCB0aGVcbiAgICAgKiBsYXR0ZXIgY2FsY3VsYXRlZCBmcm9tIHRoZSByZXF1ZXN0ZWQgcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkNvbnRlbnRNRDUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkNvbnRlbnRNRDU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRhdGUgYW5kIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3RcbiAgICAgKiBtb2RpZmllZC4gQW55IG9wZXJhdGlvbiB0aGF0IG1vZGlmaWVzIHRoZSBmaWxlIG9yIGl0cyBwcm9wZXJ0aWVzIHVwZGF0ZXNcbiAgICAgKiB0aGUgbGFzdCBtb2RpZmllZCB0aW1lLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxhc3RNb2RpZmllZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sYXN0TW9kaWZpZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIFVUQyBkYXRlIGFuZCB0aW1lIGdlbmVyYXRlZCBieSB0aGUgc2VydmljZSB0aGF0IGluZGljYXRlcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgYmxvYiB3YXNcbiAgICAgKiBsYXN0IHJlYWQgb3Igd3JpdHRlbiB0by5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsYXN0QWNjZXNzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGFzdEFjY2Vzc2VkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkYXRlIGFuZCB0aW1lIHRoZSBibG9iIHdhcyBjcmVhdGVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNyZWF0ZWRPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jcmVhdGVkT247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgbmFtZS12YWx1ZSBwYWlyXG4gICAgICogdG8gYXNzb2NpYXRlIHdpdGggYSBmaWxlIHN0b3JhZ2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IG1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLm1ldGFkYXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlYWRlciB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSByZXF1ZXN0XG4gICAgICogdGhhdCB3YXMgbWFkZSBhbmQgY2FuIGJlIHVzZWQgZm9yIHRyb3VibGVzaG9vdGluZyB0aGUgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCByZXF1ZXN0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UucmVxdWVzdElkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiBhIGNsaWVudCByZXF1ZXN0IGlkIGhlYWRlciBpcyBzZW50IGluIHRoZSByZXF1ZXN0LCB0aGlzIGhlYWRlciB3aWxsIGJlIHByZXNlbnQgaW4gdGhlXG4gICAgICogcmVzcG9uc2Ugd2l0aCB0aGUgc2FtZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjbGllbnRSZXF1ZXN0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY2xpZW50UmVxdWVzdElkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIHZlcnNpb24gb2YgdGhlIEJsb2Igc2VydmljZSB1c2VkXG4gICAgICogdG8gZXhlY3V0ZSB0aGUgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB2ZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLnZlcnNpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgdmVyc2lvbklkIG9mIHRoZSBkb3dubG9hZGVkIGJsb2IgdmVyc2lvbi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB2ZXJzaW9uSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudmVyc2lvbklkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB2ZXJzaW9uIG9mIHRoaXMgYmxvYiBpcyBhIGN1cnJlbnQgdmVyc2lvbi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBpc0N1cnJlbnRWZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmlzQ3VycmVudFZlcnNpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGVuY3J5cHRpb24ga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgYmxvYi4gVGhpcyB2YWx1ZSBpcyBvbmx5IHJldHVybmVkXG4gICAgICogd2hlbiB0aGUgYmxvYiB3YXMgZW5jcnlwdGVkIHdpdGggYSBjdXN0b21lci1wcm92aWRlZCBrZXkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZW5jcnlwdGlvbktleVNoYTI1NigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5lbmNyeXB0aW9uS2V5U2hhMjU2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgcmVxdWVzdCBpcyB0byByZWFkIGEgc3BlY2lmaWVkIHJhbmdlIGFuZCB0aGUgeC1tcy1yYW5nZS1nZXQtY29udGVudC1jcmM2NCBpcyBzZXQgdG9cbiAgICAgKiB0cnVlLCB0aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBjcmM2NCBmb3IgdGhlIHJhbmdlLCBhcyBsb25nIGFzIHRoZSByYW5nZSBzaXplIGlzIGxlc3MgdGhhblxuICAgICAqIG9yIGVxdWFsIHRvIDQgTUIuIElmIGJvdGggeC1tcy1yYW5nZS1nZXQtY29udGVudC1jcmM2NCAmIHgtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1IGlzXG4gICAgICogc3BlY2lmaWVkIGluIHRoZSBzYW1lIHJlcXVlc3QsIGl0IHdpbGwgZmFpbCB3aXRoIDQwMChCYWQgUmVxdWVzdClcbiAgICAgKi9cbiAgICBnZXQgY29udGVudENyYzY0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRDcmM2NDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT2JqZWN0IFJlcGxpY2F0aW9uIFBvbGljeSBJZCBvZiB0aGUgZGVzdGluYXRpb24gYmxvYi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBvYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2Uub2JqZWN0UmVwbGljYXRpb25EZXN0aW5hdGlvblBvbGljeUlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZWQgT2JqZWN0IFJlcGxpY2F0aW9uIFBvbGljeSBJZCwgUnVsZSBJZChzKSBhbmQgc3RhdHVzIG9mIHRoZSBzb3VyY2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2Uub2JqZWN0UmVwbGljYXRpb25Tb3VyY2VQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGJsb2IgaGFzIGJlZW4gc2VhbGVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlzU2VhbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmlzU2VhbGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVVEMgZGF0ZS90aW1lIHZhbHVlIGdlbmVyYXRlZCBieSB0aGUgc2VydmljZSB0aGF0IGluZGljYXRlcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgYmxvYiBpbW11dGFiaWxpdHkgcG9saWN5IHdpbGwgZXhwaXJlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5pbW11dGFiaWxpdHlQb2xpY3lFeHBpcmVzT247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpbW11dGFiaWxpdHkgcG9saWN5IG1vZGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5pbW11dGFiaWxpdHlQb2xpY3lNb2RlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgYSBsZWdhbCBob2xkIGlzIHByZXNlbnQgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVnYWxIb2xkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlZ2FsSG9sZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBicm93c2VyIEJsb2IuXG4gICAgICogQWx3YXlzIHVuZGVmaW5lZCBpbiBub2RlLmpzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRBc0Jsb2IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkJvZHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXNwb25zZSBib2R5IGFzIGEgbm9kZS5qcyBSZWFkYWJsZSBzdHJlYW0uXG4gICAgICogQWx3YXlzIHVuZGVmaW5lZCBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKlxuICAgICAqIEl0IHdpbGwgYXV0b21hdGljYWxseSByZXRyeSB3aGVuIGludGVybmFsIHJlYWQgc3RyZWFtIHVuZXhwZWN0ZWQgZW5kcy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCByZWFkYWJsZVN0cmVhbUJvZHkoKSB7XG4gICAgICAgIHJldHVybiBjb3JlVXRpbC5pc05vZGUgPyB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEhUVFAgcmVzcG9uc2UuXG4gICAgICovXG4gICAgZ2V0IF9yZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5fcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYkRvd25sb2FkUmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3JpZ2luYWxSZXNwb25zZSAtXG4gICAgICogQHBhcmFtIGdldHRlciAtXG4gICAgICogQHBhcmFtIG9mZnNldCAtXG4gICAgICogQHBhcmFtIGNvdW50IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3JpZ2luYWxSZXNwb25zZSwgZ2V0dGVyLCBvZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlc3BvbnNlID0gb3JpZ2luYWxSZXNwb25zZTtcbiAgICAgICAgdGhpcy5ibG9iRG93bmxvYWRTdHJlYW0gPSBuZXcgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW0odGhpcy5vcmlnaW5hbFJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSwgZ2V0dGVyLCBvZmZzZXQsIGNvdW50LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY29uc3QgQVZST19TWU5DX01BUktFUl9TSVpFID0gMTY7XG5jb25zdCBBVlJPX0lOSVRfQllURVMgPSBuZXcgVWludDhBcnJheShbNzksIDk4LCAxMDYsIDFdKTtcbmNvbnN0IEFWUk9fQ09ERUNfS0VZID0gXCJhdnJvLmNvZGVjXCI7XG5jb25zdCBBVlJPX1NDSEVNQV9LRVkgPSBcImF2cm8uc2NoZW1hXCI7XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY2xhc3MgQXZyb1BhcnNlciB7XG4gICAgLyoqXG4gICAgICogUmVhZHMgYSBmaXhlZCBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmVhbSAtXG4gICAgICogQHBhcmFtIGxlbmd0aCAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyByZWFkRml4ZWRCeXRlcyhzdHJlYW0sIGxlbmd0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgc3RyZWFtLnJlYWQobGVuZ3RoLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgICAgICBpZiAoYnl0ZXMubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhpdCBzdHJlYW0gZW5kLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgc2luZ2xlIGJ5dGUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmVhbSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyByZWFkQnl0ZShzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgMSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBidWZbMF07XG4gICAgfVxuICAgIC8vIGludCBhbmQgbG9uZyBhcmUgc3RvcmVkIGluIHZhcmlhYmxlLWxlbmd0aCB6aWctemFnIGNvZGluZy5cbiAgICAvLyB2YXJpYWJsZS1sZW5ndGg6IGh0dHBzOi8vbHVjZW5lLmFwYWNoZS5vcmcvY29yZS8zXzVfMC9maWxlZm9ybWF0cy5odG1sI1ZJbnRcbiAgICAvLyB6aWctemFnOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvZW5jb2Rpbmc/Y3N3PTEjdHlwZXNcbiAgICBzdGF0aWMgYXN5bmMgcmVhZFppZ1phZ0xvbmcoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgbGV0IHppZ1phZ0VuY29kZWQgPSAwO1xuICAgICAgICBsZXQgc2lnbmlmaWNhbmNlSW5CaXQgPSAwO1xuICAgICAgICBsZXQgYnl0ZSwgaGF2ZU1vcmVCeXRlLCBzaWduaWZpY2FuY2VJbkZsb2F0O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBieXRlID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQnl0ZShzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgaGF2ZU1vcmVCeXRlID0gYnl0ZSAmIDB4ODA7XG4gICAgICAgICAgICB6aWdaYWdFbmNvZGVkIHw9IChieXRlICYgMHg3ZikgPDwgc2lnbmlmaWNhbmNlSW5CaXQ7XG4gICAgICAgICAgICBzaWduaWZpY2FuY2VJbkJpdCArPSA3O1xuICAgICAgICB9IHdoaWxlIChoYXZlTW9yZUJ5dGUgJiYgc2lnbmlmaWNhbmNlSW5CaXQgPCAyOCk7IC8vIGJpdHdpc2Ugb3BlcmF0aW9uIG9ubHkgd29ya3MgZm9yIDMyLWJpdCBpbnRlZ2Vyc1xuICAgICAgICBpZiAoaGF2ZU1vcmVCeXRlKSB7XG4gICAgICAgICAgICAvLyBTd2l0Y2ggdG8gZmxvYXQgYXJpdGhtZXRpY1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduXG4gICAgICAgICAgICB6aWdaYWdFbmNvZGVkID0gemlnWmFnRW5jb2RlZDtcbiAgICAgICAgICAgIHNpZ25pZmljYW5jZUluRmxvYXQgPSAyNjg0MzU0NTY7IC8vIDIgKiogMjguXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgYnl0ZSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEJ5dGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB6aWdaYWdFbmNvZGVkICs9IChieXRlICYgMHg3ZikgKiBzaWduaWZpY2FuY2VJbkZsb2F0O1xuICAgICAgICAgICAgICAgIHNpZ25pZmljYW5jZUluRmxvYXQgKj0gMTI4OyAvLyAyICoqIDdcbiAgICAgICAgICAgIH0gd2hpbGUgKGJ5dGUgJiAweDgwKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9ICh6aWdaYWdFbmNvZGVkICUgMiA/IC0oemlnWmFnRW5jb2RlZCArIDEpIDogemlnWmFnRW5jb2RlZCkgLyAyO1xuICAgICAgICAgICAgaWYgKHJlcyA8IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSIHx8IHJlcyA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW50ZWdlciBvdmVyZmxvdy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoemlnWmFnRW5jb2RlZCA+PiAxKSBeIC0oemlnWmFnRW5jb2RlZCAmIDEpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZExvbmcoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZFppZ1phZ0xvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWRJbnQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZFppZ1phZ0xvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWROdWxsKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWRCb29sZWFuKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRCeXRlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChiID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCeXRlIHdhcyBub3QgYSBib29sZWFuLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEZsb2F0KHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHU4YXJyID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkRml4ZWRCeXRlcyhzdHJlYW0sIDQsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KHU4YXJyLmJ1ZmZlciwgdThhcnIuYnl0ZU9mZnNldCwgdThhcnIuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIoMCwgdHJ1ZSk7IC8vIGxpdHRsZUVuZGlhbiA9IHRydWVcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWREb3VibGUoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdThhcnIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgOCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcodThhcnIuYnVmZmVyLCB1OGFyci5ieXRlT2Zmc2V0LCB1OGFyci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQ2NCgwLCB0cnVlKTsgLy8gbGl0dGxlRW5kaWFuID0gdHJ1ZVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEJ5dGVzKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChzaXplIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQnl0ZXMgc2l6ZSB3YXMgbmVnYXRpdmUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJlYW0ucmVhZChzaXplLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZFN0cmluZyhzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB1OGFyciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEJ5dGVzKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHV0ZjhkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gICAgICAgIHJldHVybiB1dGY4ZGVjb2Rlci5kZWNvZGUodThhcnIpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZE1hcFBhaXIoc3RyZWFtLCByZWFkSXRlbU1ldGhvZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZFN0cmluZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAvLyBGVVRVUkU6IHRoaXMgd29uJ3Qgd29yayB3aXRoIHJlYWRGaXhlZCAoY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQpIHdoaWNoIG5lZWRzIGEgbGVuZ3RoIGFzIHRoZSBwYXJhbWV0ZXIuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcmVhZEl0ZW1NZXRob2Qoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZSB9O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZE1hcChzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVhZFBhaXJNZXRob2QgPSAocywgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkTWFwUGFpcihzLCByZWFkSXRlbU1ldGhvZCwgb3B0cyk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhaXJzID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQXJyYXkoc3RyZWFtLCByZWFkUGFpck1ldGhvZCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRpY3QgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICBkaWN0W3BhaXIua2V5XSA9IHBhaXIudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkQXJyYXkoc3RyZWFtLCByZWFkSXRlbU1ldGhvZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGNvdW50ID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkTG9uZyhzdHJlYW0sIG9wdGlvbnMpOyBjb3VudCAhPT0gMDsgY291bnQgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucykpIHtcbiAgICAgICAgICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgYmxvY2sgc2l6ZXNcbiAgICAgICAgICAgICAgICBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY291bnQgPSAtY291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY291bnQtLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBhd2FpdCByZWFkSXRlbU1ldGhvZChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbn1cbnZhciBBdnJvQ29tcGxleDtcbihmdW5jdGlvbiAoQXZyb0NvbXBsZXgpIHtcbiAgICBBdnJvQ29tcGxleFtcIlJFQ09SRFwiXSA9IFwicmVjb3JkXCI7XG4gICAgQXZyb0NvbXBsZXhbXCJFTlVNXCJdID0gXCJlbnVtXCI7XG4gICAgQXZyb0NvbXBsZXhbXCJBUlJBWVwiXSA9IFwiYXJyYXlcIjtcbiAgICBBdnJvQ29tcGxleFtcIk1BUFwiXSA9IFwibWFwXCI7XG4gICAgQXZyb0NvbXBsZXhbXCJVTklPTlwiXSA9IFwidW5pb25cIjtcbiAgICBBdnJvQ29tcGxleFtcIkZJWEVEXCJdID0gXCJmaXhlZFwiO1xufSkoQXZyb0NvbXBsZXggfHwgKEF2cm9Db21wbGV4ID0ge30pKTtcbnZhciBBdnJvUHJpbWl0aXZlO1xuKGZ1bmN0aW9uIChBdnJvUHJpbWl0aXZlKSB7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIk5VTExcIl0gPSBcIm51bGxcIjtcbiAgICBBdnJvUHJpbWl0aXZlW1wiQk9PTEVBTlwiXSA9IFwiYm9vbGVhblwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJJTlRcIl0gPSBcImludFwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJMT05HXCJdID0gXCJsb25nXCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkZMT0FUXCJdID0gXCJmbG9hdFwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJET1VCTEVcIl0gPSBcImRvdWJsZVwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJCWVRFU1wiXSA9IFwiYnl0ZXNcIjtcbiAgICBBdnJvUHJpbWl0aXZlW1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcbn0pKEF2cm9QcmltaXRpdmUgfHwgKEF2cm9QcmltaXRpdmUgPSB7fSkpO1xuY2xhc3MgQXZyb1R5cGUge1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgdGhlIEF2cm9UeXBlIGZyb20gdGhlIEF2cm8gU2NoZW1hLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICBzdGF0aWMgZnJvbVNjaGVtYShzY2hlbWEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tU3RyaW5nU2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1R5cGUuZnJvbUFycmF5U2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1R5cGUuZnJvbU9iamVjdFNjaGVtYShzY2hlbWEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tU3RyaW5nU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICBzd2l0Y2ggKHNjaGVtYSkge1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLk5VTEw6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQk9PTEVBTjpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5JTlQ6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuTE9ORzpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5GTE9BVDpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5ET1VCTEU6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQllURVM6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb1ByaW1pdGl2ZVR5cGUoc2NoZW1hKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEF2cm8gdHlwZSAke3NjaGVtYX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZnJvbUFycmF5U2NoZW1hKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gbmV3IEF2cm9VbmlvblR5cGUoc2NoZW1hLm1hcChBdnJvVHlwZS5mcm9tU2NoZW1hKSk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tT2JqZWN0U2NoZW1hKHNjaGVtYSkge1xuICAgICAgICBjb25zdCB0eXBlID0gc2NoZW1hLnR5cGU7XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgY2FuIGJlIGRlZmluZWQgYXMgc3RyaW5ncyBvciBvYmplY3RzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1R5cGUuZnJvbVN0cmluZ1NjaGVtYSh0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguUkVDT1JEOlxuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYWxpYXNlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGFsaWFzZXMgY3VycmVudGx5IGlzIG5vdCBzdXBwb3J0ZWQsIHNjaGVtYTogJHtzY2hlbWF9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc2NoZW1hLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhdHRyaWJ1dGUgJ25hbWUnIGRvZXNuJ3QgZXhpc3Qgb24gc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0ge307XG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYXR0cmlidXRlICdmaWVsZHMnIGRvZXNuJ3QgZXhpc3Qgb24gc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBzY2hlbWEuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkc1tmaWVsZC5uYW1lXSA9IEF2cm9UeXBlLmZyb21TY2hlbWEoZmllbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb1JlY29yZFR5cGUoZmllbGRzLCBzY2hlbWEubmFtZSk7XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4LkVOVU06XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5hbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYWxpYXNlcyBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRlZCwgc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuc3ltYm9scykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGF0dHJpYnV0ZSAnc3ltYm9scycgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF2cm9FbnVtVHlwZShzY2hlbWEuc3ltYm9scyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4Lk1BUDpcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhdHRyaWJ1dGUgJ3ZhbHVlcycgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF2cm9NYXBUeXBlKEF2cm9UeXBlLmZyb21TY2hlbWEoc2NoZW1hLnZhbHVlcykpO1xuICAgICAgICAgICAgY2FzZSBBdnJvQ29tcGxleC5BUlJBWTogLy8gVW51c2VkIHRvZGF5XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4LkZJWEVEOiAvLyBVbnVzZWQgdG9kYXlcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEF2cm8gdHlwZSAke3R5cGV9IGluICR7c2NoZW1hfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQXZyb1ByaW1pdGl2ZVR5cGUgZXh0ZW5kcyBBdnJvVHlwZSB7XG4gICAgY29uc3RydWN0b3IocHJpbWl0aXZlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3ByaW1pdGl2ZSA9IHByaW1pdGl2ZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9wcmltaXRpdmUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5OVUxMOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWROdWxsKCk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQk9PTEVBTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkQm9vbGVhbihzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLklOVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkSW50KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuTE9ORzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkTG9uZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkZMT0FUOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRGbG9hdChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkRPVUJMRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkRG91YmxlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQllURVM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZEJ5dGVzKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRTdHJpbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBBdnJvIFByaW1pdGl2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNsYXNzIEF2cm9FbnVtVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihzeW1ib2xzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3N5bWJvbHMgPSBzeW1ib2xzO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXdyYXBwZXItb2JqZWN0LXR5cGVzXG4gICAgYXN5bmMgcmVhZChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEludChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ltYm9sc1t2YWx1ZV07XG4gICAgfVxufVxuY2xhc3MgQXZyb1VuaW9uVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlcykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl90eXBlcyA9IHR5cGVzO1xuICAgIH1cbiAgICBhc3luYyByZWFkKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHR5cGVJbmRleCA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEludChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZXNbdHlwZUluZGV4XS5yZWFkKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgfVxufVxuY2xhc3MgQXZyb01hcFR5cGUgZXh0ZW5kcyBBdnJvVHlwZSB7XG4gICAgY29uc3RydWN0b3IoaXRlbVR5cGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5faXRlbVR5cGUgPSBpdGVtVHlwZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVhZEl0ZW1NZXRob2QgPSAocywgb3B0cykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1UeXBlLnJlYWQocywgb3B0cyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRNYXAoc3RyZWFtLCByZWFkSXRlbU1ldGhvZCwgb3B0aW9ucyk7XG4gICAgfVxufVxuY2xhc3MgQXZyb1JlY29yZFR5cGUgZXh0ZW5kcyBBdnJvVHlwZSB7XG4gICAgY29uc3RydWN0b3IoZmllbGRzLCBuYW1lKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2ZpZWxkcyA9IGZpZWxkcztcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICBhc3luYyByZWFkKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICAgICAgY29uc3QgcmVjb3JkID0ge307XG4gICAgICAgIHJlY29yZFtcIiRzY2hlbWFcIl0gPSB0aGlzLl9uYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9maWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fZmllbGRzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkW2tleV0gPSBhd2FpdCB0aGlzLl9maWVsZHNba2V5XS5yZWFkKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuZnVuY3Rpb24gYXJyYXlzRXF1YWwoYSwgYikge1xuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhW2ldICE9PSBiW2ldKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jbGFzcyBBdnJvUmVhZGVyIHtcbiAgICBnZXQgYmxvY2tPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ibG9ja09mZnNldDtcbiAgICB9XG4gICAgZ2V0IG9iamVjdEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0SW5kZXg7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRhdGFTdHJlYW0sIGhlYWRlclN0cmVhbSwgY3VycmVudEJsb2NrT2Zmc2V0LCBpbmRleFdpdGhpbkN1cnJlbnRCbG9jaykge1xuICAgICAgICB0aGlzLl9kYXRhU3RyZWFtID0gZGF0YVN0cmVhbTtcbiAgICAgICAgdGhpcy5faGVhZGVyU3RyZWFtID0gaGVhZGVyU3RyZWFtIHx8IGRhdGFTdHJlYW07XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gY3VycmVudEJsb2NrT2Zmc2V0IHx8IDA7XG4gICAgICAgIHRoaXMuX29iamVjdEluZGV4ID0gaW5kZXhXaXRoaW5DdXJyZW50QmxvY2sgfHwgMDtcbiAgICAgICAgdGhpcy5faW5pdGlhbEJsb2NrT2Zmc2V0ID0gY3VycmVudEJsb2NrT2Zmc2V0IHx8IDA7XG4gICAgfVxuICAgIGFzeW5jIGluaXRpYWxpemUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXModGhpcy5faGVhZGVyU3RyZWFtLCBBVlJPX0lOSVRfQllURVMubGVuZ3RoLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghYXJyYXlzRXF1YWwoaGVhZGVyLCBBVlJPX0lOSVRfQllURVMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJlYW0gaXMgbm90IGFuIEF2cm8gZmlsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlsZSBtZXRhZGF0YSBpcyB3cml0dGVuIGFzIGlmIGRlZmluZWQgYnkgdGhlIGZvbGxvd2luZyBtYXAgc2NoZW1hOlxuICAgICAgICAvLyB7IFwidHlwZVwiOiBcIm1hcFwiLCBcInZhbHVlc1wiOiBcImJ5dGVzXCJ9XG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkTWFwKHRoaXMuX2hlYWRlclN0cmVhbSwgQXZyb1BhcnNlci5yZWFkU3RyaW5nLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFZhbGlkYXRlIGNvZGVjXG4gICAgICAgIGNvbnN0IGNvZGVjID0gdGhpcy5fbWV0YWRhdGFbQVZST19DT0RFQ19LRVldO1xuICAgICAgICBpZiAoIShjb2RlYyA9PT0gdW5kZWZpbmVkIHx8IGNvZGVjID09PSBudWxsIHx8IGNvZGVjID09PSBcIm51bGxcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVjcyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgMTYtYnl0ZSwgcmFuZG9tbHktZ2VuZXJhdGVkIHN5bmMgbWFya2VyIGZvciB0aGlzIGZpbGUuXG4gICAgICAgIHRoaXMuX3N5bmNNYXJrZXIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHRoaXMuX2hlYWRlclN0cmVhbSwgQVZST19TWU5DX01BUktFUl9TSVpFLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFBhcnNlIHRoZSBzY2hlbWFcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gSlNPTi5wYXJzZSh0aGlzLl9tZXRhZGF0YVtBVlJPX1NDSEVNQV9LRVldKTtcbiAgICAgICAgdGhpcy5faXRlbVR5cGUgPSBBdnJvVHlwZS5mcm9tU2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIGlmICh0aGlzLl9ibG9ja09mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fYmxvY2tPZmZzZXQgPSB0aGlzLl9pbml0aWFsQmxvY2tPZmZzZXQgKyB0aGlzLl9kYXRhU3RyZWFtLnBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwge1xuICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBza2lwIGJsb2NrIGxlbmd0aFxuICAgICAgICBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHRoaXMuX2RhdGFTdHJlYW0sIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuX29iamVjdEluZGV4ICYmIHRoaXMuX29iamVjdEluZGV4ID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9vYmplY3RJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faXRlbVR5cGUucmVhZCh0aGlzLl9kYXRhU3RyZWFtLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jay0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGhhc05leHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5faW5pdGlhbGl6ZWQgfHwgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID4gMDtcbiAgICB9XG4gICAgcGFyc2VPYmplY3RzKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBwYXJzZU9iamVjdHNfMShvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMuaW5pdGlhbGl6ZShvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5oYXNOZXh0KCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMuX2l0ZW1UeXBlLnJlYWQodGhpcy5fZGF0YVN0cmVhbSwge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrLS07XG4gICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0SW5kZXgrKztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IHlpZWxkIHRzbGliLl9fYXdhaXQoQXZyb1BhcnNlci5yZWFkRml4ZWRCeXRlcyh0aGlzLl9kYXRhU3RyZWFtLCBBVlJPX1NZTkNfTUFSS0VSX1NJWkUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gdGhpcy5faW5pdGlhbEJsb2NrT2Zmc2V0ICsgdGhpcy5fZGF0YVN0cmVhbS5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFycmF5c0VxdWFsKHRoaXMuX3N5bmNNYXJrZXIsIG1hcmtlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmVhbSBpcyBub3QgYSB2YWxpZCBBdnJvIGZpbGUuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2sgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBibG9jayBzaXplXG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwgeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY2xhc3MgQXZyb1JlYWRhYmxlIHtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBBQk9SVF9FUlJPUiA9IG5ldyBhYm9ydENvbnRyb2xsZXIuQWJvcnRFcnJvcihcIlJlYWRpbmcgZnJvbSB0aGUgYXZybyBzdHJlYW0gd2FzIGFib3J0ZWQuXCIpO1xuY2xhc3MgQXZyb1JlYWRhYmxlRnJvbVN0cmVhbSBleHRlbmRzIEF2cm9SZWFkYWJsZSB7XG4gICAgdG9VaW50OEFycmF5KGRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHJlYWRhYmxlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlID0gcmVhZGFibGU7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gMDtcbiAgICB9XG4gICAgZ2V0IHBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XG4gICAgfVxuICAgIGFzeW5jIHJlYWQoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKChfYSA9IG9wdGlvbnMuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hYm9ydGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBBQk9SVF9FUlJPUjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZSA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2l6ZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHBvc2l0aXZlOiAke3NpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fcmVhZGFibGUucmVhZGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmVhbSBubyBsb25nZXIgcmVhZGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGVub3VnaCBkYXRhLlxuICAgICAgICBjb25zdCBjaHVuayA9IHRoaXMuX3JlYWRhYmxlLnJlYWQoc2l6ZSk7XG4gICAgICAgIGlmIChjaHVuaykge1xuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgLy8gY2h1bmsubGVuZ3RoIG1heWJlIGxlc3MgdGhhbiBkZXNpcmVkIHNpemUgaWYgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9VaW50OEFycmF5KGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGNhbGxiYWNrIHRvIHdhaXQgZm9yIGVub3VnaCBkYXRhIHRvIHJlYWRcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYW5VcCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJyZWFkYWJsZVwiLCByZWFkYWJsZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3RDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLCByZWplY3RDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkYWJsZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFja0NodW5rID0gdGhpcy5fcmVhZGFibGUucmVhZChzaXplKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrQ2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uICs9IGNhbGxiYWNrQ2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5VcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2tDaHVuay5sZW5ndGggbWF5YmUgbGVzcyB0aGFuIGRlc2lyZWQgc2l6ZSBpZiB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMudG9VaW50OEFycmF5KGNhbGxiYWNrQ2h1bmspKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVqZWN0Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEFCT1JUX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLm9uKFwicmVhZGFibGVcIiwgcmVhZGFibGVDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUub25jZShcImVycm9yXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5vbmNlKFwiZW5kXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5vbmNlKFwiY2xvc2VcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBBIE5vZGUuanMgQmxvYlF1aWNrUXVlcnlTdHJlYW0gd2lsbCBpbnRlcm5hbGx5IHBhcnNlIGF2cm8gZGF0YSBzdHJlYW0gZm9yIGJsb2IgcXVlcnkuXG4gKi9cbmNsYXNzIEJsb2JRdWlja1F1ZXJ5U3RyZWFtIGV4dGVuZHMgc3RyZWFtLlJlYWRhYmxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJsb2JRdWlja1F1ZXJ5U3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBjdXJyZW50IFJlYWRhYmxlU3RyZWFtIHJldHVybmVkIGZyb20gZ2V0dGVyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYXZyb1BhdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBvcHRpb25zLm9uUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMub25FcnJvciA9IG9wdGlvbnMub25FcnJvcjtcbiAgICAgICAgdGhpcy5hdnJvUmVhZGVyID0gbmV3IEF2cm9SZWFkZXIobmV3IEF2cm9SZWFkYWJsZUZyb21TdHJlYW0odGhpcy5zb3VyY2UpKTtcbiAgICAgICAgdGhpcy5hdnJvSXRlciA9IHRoaXMuYXZyb1JlYWRlci5wYXJzZU9iamVjdHMoeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KTtcbiAgICB9XG4gICAgX3JlYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmF2cm9QYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZEludGVybmFsKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyByZWFkSW50ZXJuYWwoKSB7XG4gICAgICAgIHRoaXMuYXZyb1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgYXZyb05leHQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGF2cm9OZXh0ID0gYXdhaXQgdGhpcy5hdnJvSXRlci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoYXZyb05leHQuZG9uZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2JqID0gYXZyb05leHQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBvYmouJHNjaGVtYTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIHNjaGVtYSBpbiBhdnJvIHJlY29yZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKHNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb20ubWljcm9zb2Z0LmF6dXJlLnN0b3JhZ2UucXVlcnlCbG9iQ29udGVudHMucmVzdWx0RGF0YVwiOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gb2JqLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGRhdGEgaW4gYXZybyByZXN1bHQgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5wdXNoKEJ1ZmZlci5mcm9tKGRhdGEpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXZyb1BhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5wcm9ncmVzc1wiOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlc1NjYW5uZWQgPSBvYmouYnl0ZXNTY2FubmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBieXRlc1NjYW5uZWQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgYnl0ZXNTY2FubmVkIGluIGF2cm8gcHJvZ3Jlc3MgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogYnl0ZXNTY2FubmVkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb20ubWljcm9zb2Z0LmF6dXJlLnN0b3JhZ2UucXVlcnlCbG9iQ29udGVudHMuZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsQnl0ZXMgPSBvYmoudG90YWxCeXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdG90YWxCeXRlcyAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCB0b3RhbEJ5dGVzIGluIGF2cm8gZW5kIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogdG90YWxCeXRlcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb20ubWljcm9zb2Z0LmF6dXJlLnN0b3JhZ2UucXVlcnlCbG9iQ29udGVudHMuZXJyb3JcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmF0YWwgPSBvYmouZmF0YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZhdGFsICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBmYXRhbCBpbiBhdnJvIGVycm9yIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gb2JqLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgbmFtZSBpbiBhdnJvIGVycm9yIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IG9iai5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRpb24gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgZGVzY3JpcHRpb24gaW4gYXZybyBlcnJvciByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBvYmoucG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBvc2l0aW9uICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHBvc2l0aW9uIGluIGF2cm8gZXJyb3IgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZhdGFsOiBmYXRhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBVbmtub3duIHNjaGVtYSAke3NjaGVtYX0gaW4gYXZybyBwcm9ncmVzcyByZWNvcmQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKCFhdnJvTmV4dC5kb25lICYmICF0aGlzLmF2cm9QYXVzZWQpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBCbG9iUXVlcnlSZXNwb25zZSBpbXBsZW1lbnRzIEJsb2JEb3dubG9hZFJlc3BvbnNlTW9kZWwgaW50ZXJmYWNlLCBhbmQgaW4gTm9kZS5qcyBydW50aW1lIGl0IHdpbGxcbiAqIHBhcnNlIGF2b3IgZGF0YSByZXR1cm5lZCBieSBibG9iIHF1ZXJ5LlxuICovXG5jbGFzcyBCbG9iUXVlcnlSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNlcnZpY2Ugc3VwcG9ydHNcbiAgICAgKiByZXF1ZXN0cyBmb3IgcGFydGlhbCBmaWxlIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYWNjZXB0UmFuZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmFjY2VwdFJhbmdlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiBpdCB3YXMgcHJldmlvdXNseSBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY2FjaGVDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNhY2hlQ29udHJvbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSAneC1tcy1jb250ZW50LWRpc3Bvc2l0aW9uJyBoZWFkZXIgYW5kIHNwZWNpZmllcyBob3cgdG8gcHJvY2VzcyB0aGVcbiAgICAgKiByZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50RGlzcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudERpc3Bvc2l0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIENvbnRlbnQtRW5jb2RpbmcgcmVxdWVzdCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudEVuY29kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRFbmNvZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBDb250ZW50LUxhbmd1YWdlIHJlcXVlc3QgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TGFuZ3VhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlciBmb3IgYVxuICAgICAqIHBhZ2UgYmxvYi4gVGhpcyBoZWFkZXIgaXMgbm90IHJldHVybmVkIGZvciBibG9jayBibG9icyBvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYlNlcXVlbmNlTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JTZXF1ZW5jZU51bWJlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGJsb2IncyB0eXBlLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTpcbiAgICAgKiAnQmxvY2tCbG9iJywgJ1BhZ2VCbG9iJywgJ0FwcGVuZEJsb2InLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHByZXNlbnQgaW4gdGhlXG4gICAgICogcmVzcG9uc2UgYm9keS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRMZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBmaWxlIGhhcyBhbiBNRDUgaGFzaCBhbmQgdGhlXG4gICAgICogcmVxdWVzdCBpcyB0byByZWFkIHRoZSBmdWxsIGZpbGUsIHRoaXMgcmVzcG9uc2UgaGVhZGVyIGlzIHJldHVybmVkIHNvIHRoYXRcbiAgICAgKiB0aGUgY2xpZW50IGNhbiBjaGVjayBmb3IgbWVzc2FnZSBjb250ZW50IGludGVncml0eS4gSWYgdGhlIHJlcXVlc3QgaXMgdG9cbiAgICAgKiByZWFkIGEgc3BlY2lmaWVkIHJhbmdlIGFuZCB0aGUgJ3gtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1JyBpcyBzZXQgdG9cbiAgICAgKiB0cnVlLCB0aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYW4gTUQ1IGhhc2ggZm9yIHRoZSByYW5nZSwgYXMgbG9uZyBhcyB0aGVcbiAgICAgKiByYW5nZSBzaXplIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA0IE1CLiBJZiBuZWl0aGVyIG9mIHRoZXNlIHNldHMgb2ZcbiAgICAgKiBjb25kaXRpb25zIGlzIHRydWUsIHRoZW4gbm8gdmFsdWUgaXMgcmV0dXJuZWQgZm9yIHRoZSAnQ29udGVudC1NRDUnXG4gICAgICogaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRNRDUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSByYW5nZSBvZiBieXRlcyByZXR1cm5lZCBpZlxuICAgICAqIHRoZSBjbGllbnQgcmVxdWVzdGVkIGEgc3Vic2V0IG9mIHRoZSBmaWxlIGJ5IHNldHRpbmcgdGhlIFJhbmdlIHJlcXVlc3RcbiAgICAgKiBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudFJhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRSYW5nZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgdHlwZSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlLlxuICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpcyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25jbHVzaW9uIHRpbWUgb2YgdGhlIGxhc3QgYXR0ZW1wdGVkXG4gICAgICogQ29weSBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBUaGlzIHZhbHVlXG4gICAgICogY2FuIHNwZWNpZnkgdGhlIHRpbWUgb2YgYSBjb21wbGV0ZWQsIGFib3J0ZWQsIG9yIGZhaWxlZCBjb3B5IGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUNvbXBsZXRlZE9uKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdHJpbmcgaWRlbnRpZmllciBmb3IgdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHlcbiAgICAgKiBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGFuZFxuICAgICAqIHRoZSB0b3RhbCBieXRlcyBpbiB0aGUgc291cmNlIGluIHRoZSBsYXN0IGF0dGVtcHRlZCBDb3B5IEZpbGUgb3BlcmF0aW9uXG4gICAgICogd2hlcmUgdGhpcyBmaWxlIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS4gQ2FuIHNob3cgYmV0d2VlbiAwIGFuZFxuICAgICAqIENvbnRlbnQtTGVuZ3RoIGJ5dGVzIGNvcGllZC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5UHJvZ3Jlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVByb2dyZXNzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVUkwgdXAgdG8gMktCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyB0aGVcbiAgICAgKiBzb3VyY2UgZmlsZSB1c2VkIGluIHRoZSBsYXN0IGF0dGVtcHRlZCBDb3B5IEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZVxuICAgICAqIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTb3VyY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXRlIG9mIHRoZSBjb3B5IG9wZXJhdGlvblxuICAgICAqIGlkZW50aWZpZWQgYnkgJ3gtbXMtY29weS1pZCcuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOiAncGVuZGluZycsXG4gICAgICogJ3N1Y2Nlc3MnLCAnYWJvcnRlZCcsICdmYWlsZWQnXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVN0YXR1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5U3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGFwcGVhcnMgd2hlblxuICAgICAqIHgtbXMtY29weS1zdGF0dXMgaXMgZmFpbGVkIG9yIHBlbmRpbmcuIERlc2NyaWJlcyBjYXVzZSBvZiBmYXRhbCBvclxuICAgICAqIG5vbi1mYXRhbCBjb3B5IG9wZXJhdGlvbiBmYWlsdXJlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTdGF0dXNEZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5U3RhdHVzRGVzY3JpcHRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZW4gYSBibG9iIGlzIGxlYXNlZCxcbiAgICAgKiBzcGVjaWZpZXMgd2hldGhlciB0aGUgbGVhc2UgaXMgb2YgaW5maW5pdGUgb3IgZml4ZWQgZHVyYXRpb24uIFBvc3NpYmxlXG4gICAgICogdmFsdWVzIGluY2x1ZGU6ICdpbmZpbml0ZScsICdmaXhlZCcuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VEdXJhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZUR1cmF0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMZWFzZSBzdGF0ZSBvZiB0aGUgYmxvYi4gUG9zc2libGVcbiAgICAgKiB2YWx1ZXMgaW5jbHVkZTogJ2F2YWlsYWJsZScsICdsZWFzZWQnLCAnZXhwaXJlZCcsICdicmVha2luZycsICdicm9rZW4nLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVhc2VTdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgbGVhc2Ugc3RhdHVzIG9mIHRoZVxuICAgICAqIGJsb2IuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOiAnbG9ja2VkJywgJ3VubG9ja2VkJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZVN0YXR1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZVN0YXR1cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBVVEMgZGF0ZS90aW1lIHZhbHVlIGdlbmVyYXRlZCBieSB0aGUgc2VydmljZSB0aGF0XG4gICAgICogaW5kaWNhdGVzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSByZXNwb25zZSB3YXMgaW5pdGlhdGVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBjb21taXR0ZWQgYmxvY2tzXG4gICAgICogcHJlc2VudCBpbiB0aGUgYmxvYi4gVGhpcyBoZWFkZXIgaXMgcmV0dXJuZWQgb25seSBmb3IgYXBwZW5kIGJsb2JzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JDb21taXR0ZWRCbG9ja0NvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JDb21taXR0ZWRCbG9ja0NvdW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgRVRhZyBjb250YWlucyBhIHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgdG9cbiAgICAgKiBwZXJmb3JtIG9wZXJhdGlvbnMgY29uZGl0aW9uYWxseSwgaW4gcXVvdGVzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGV0YWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZXRhZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIGNvZGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXJyb3JDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVycm9yQ29kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgaGVhZGVyIGlzIHNldCB0b1xuICAgICAqIHRydWUgaWYgdGhlIGZpbGUgZGF0YSBhbmQgYXBwbGljYXRpb24gbWV0YWRhdGEgYXJlIGNvbXBsZXRlbHkgZW5jcnlwdGVkXG4gICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0uIE90aGVyd2lzZSwgdGhlIHZhbHVlIGlzIHNldCB0byBmYWxzZSAod2hlblxuICAgICAqIHRoZSBmaWxlIGlzIHVuZW5jcnlwdGVkLCBvciBpZiBvbmx5IHBhcnRzIG9mIHRoZSBmaWxlL2FwcGxpY2F0aW9uIG1ldGFkYXRhXG4gICAgICogYXJlIGVuY3J5cHRlZCkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXNTZXJ2ZXJFbmNyeXB0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNTZXJ2ZXJFbmNyeXB0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBibG9iIGhhcyBhIE1ENSBoYXNoLCBhbmQgaWZcbiAgICAgKiByZXF1ZXN0IGNvbnRhaW5zIHJhbmdlIGhlYWRlciAoUmFuZ2Ugb3IgeC1tcy1yYW5nZSksIHRoaXMgcmVzcG9uc2UgaGVhZGVyXG4gICAgICogaXMgcmV0dXJuZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHdob2xlIGJsb2IncyBNRDUgdmFsdWUuIFRoaXMgdmFsdWUgbWF5XG4gICAgICogb3IgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgdmFsdWUgcmV0dXJuZWQgaW4gQ29udGVudC1NRDUgaGVhZGVyLCB3aXRoIHRoZVxuICAgICAqIGxhdHRlciBjYWxjdWxhdGVkIGZyb20gdGhlIHJlcXVlc3RlZCByYW5nZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQ29udGVudE1ENSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQ29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0ZSBhbmQgdGltZSB0aGUgZmlsZSB3YXMgbGFzdFxuICAgICAqIG1vZGlmaWVkLiBBbnkgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGZpbGUgb3IgaXRzIHByb3BlcnRpZXMgdXBkYXRlc1xuICAgICAqIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGFzdE1vZGlmaWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxhc3RNb2RpZmllZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBuYW1lLXZhbHVlIHBhaXJcbiAgICAgKiB0byBhc3NvY2lhdGUgd2l0aCBhIGZpbGUgc3RvcmFnZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubWV0YWRhdGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVhZGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHJlcXVlc3RcbiAgICAgKiB0aGF0IHdhcyBtYWRlIGFuZCBjYW4gYmUgdXNlZCBmb3IgdHJvdWJsZXNob290aW5nIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5yZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIGEgY2xpZW50IHJlcXVlc3QgaWQgaGVhZGVyIGlzIHNlbnQgaW4gdGhlIHJlcXVlc3QsIHRoaXMgaGVhZGVyIHdpbGwgYmUgcHJlc2VudCBpbiB0aGVcbiAgICAgKiByZXNwb25zZSB3aXRoIHRoZSBzYW1lIHZhbHVlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNsaWVudFJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jbGllbnRSZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgdmVyc2lvbiBvZiB0aGUgRmlsZSBzZXJ2aWNlIHVzZWRcbiAgICAgKiB0byBleGVjdXRlIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudmVyc2lvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgZW5jcnlwdGlvbiBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBibG9iLiBUaGlzIHZhbHVlIGlzIG9ubHkgcmV0dXJuZWRcbiAgICAgKiB3aGVuIHRoZSBibG9iIHdhcyBlbmNyeXB0ZWQgd2l0aCBhIGN1c3RvbWVyLXByb3ZpZGVkIGtleS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBlbmNyeXB0aW9uS2V5U2hhMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVuY3J5cHRpb25LZXlTaGEyNTY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSByZXF1ZXN0IGlzIHRvIHJlYWQgYSBzcGVjaWZpZWQgcmFuZ2UgYW5kIHRoZSB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0IGlzIHNldCB0b1xuICAgICAqIHRydWUsIHRoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIGNyYzY0IGZvciB0aGUgcmFuZ2UsIGFzIGxvbmcgYXMgdGhlIHJhbmdlIHNpemUgaXMgbGVzcyB0aGFuXG4gICAgICogb3IgZXF1YWwgdG8gNCBNQi4gSWYgYm90aCB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0ICYgeC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDUgaXNcbiAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgcmVxdWVzdCwgaXQgd2lsbCBmYWlsIHdpdGggNDAwKEJhZCBSZXF1ZXN0KVxuICAgICAqL1xuICAgIGdldCBjb250ZW50Q3JjNjQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudENyYzY0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzcG9uc2UgYm9keSBhcyBhIGJyb3dzZXIgQmxvYi5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIG5vZGUuanMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkJvZHkoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXNwb25zZSBib2R5IGFzIGEgbm9kZS5qcyBSZWFkYWJsZSBzdHJlYW0uXG4gICAgICogQWx3YXlzIHVuZGVmaW5lZCBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKlxuICAgICAqIEl0IHdpbGwgcGFyc2UgYXZvciBkYXRhIHJldHVybmVkIGJ5IGJsb2IgcXVlcnkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgcmVhZGFibGVTdHJlYW1Cb2R5KCkge1xuICAgICAgICByZXR1cm4gY29yZVV0aWwuaXNOb2RlID8gdGhpcy5ibG9iRG93bmxvYWRTdHJlYW0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBIVFRQIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGdldCBfcmVzcG9uc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuX3Jlc3BvbnNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJsb2JRdWVyeVJlc3BvbnNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9yaWdpbmFsUmVzcG9uc2UgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcmlnaW5hbFJlc3BvbnNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlc3BvbnNlID0gb3JpZ2luYWxSZXNwb25zZTtcbiAgICAgICAgdGhpcy5ibG9iRG93bmxvYWRTdHJlYW0gPSBuZXcgQmxvYlF1aWNrUXVlcnlTdHJlYW0odGhpcy5vcmlnaW5hbFJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYWNjZXNzIHRpZXIgb24gYSBibG9iLlxuICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGJsb2NrIGJsb2IgbGV2ZWwgdGllcmluZyBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2F6dXJlL3N0b3JhZ2UvYmxvYnMvc3RvcmFnZS1ibG9iLXN0b3JhZ2UtdGllcnN8SG90LCBjb29sIGFuZCBhcmNoaXZlIHN0b3JhZ2UgdGllcnMufVxuICovXG5leHBvcnRzLkJsb2NrQmxvYlRpZXIgPSB2b2lkIDA7XG4oZnVuY3Rpb24gKEJsb2NrQmxvYlRpZXIpIHtcbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgZm9yIHN0b3JpbmcgZGF0YSB0aGF0IGlzIGFjY2Vzc2VkIGZyZXF1ZW50bHkuXG4gICAgICovXG4gICAgQmxvY2tCbG9iVGllcltcIkhvdFwiXSA9IFwiSG90XCI7XG4gICAgLyoqXG4gICAgICogT3B0aW1pemVkIGZvciBzdG9yaW5nIGRhdGEgdGhhdCBpcyBpbmZyZXF1ZW50bHkgYWNjZXNzZWQgYW5kIHN0b3JlZCBmb3IgYXQgbGVhc3QgMzAgZGF5cy5cbiAgICAgKi9cbiAgICBCbG9ja0Jsb2JUaWVyW1wiQ29vbFwiXSA9IFwiQ29vbFwiO1xuICAgIC8qKlxuICAgICAqIE9wdGltaXplZCBmb3Igc3RvcmluZyBkYXRhIHRoYXQgaXMgcmFyZWx5IGFjY2Vzc2VkLlxuICAgICAqL1xuICAgIEJsb2NrQmxvYlRpZXJbXCJDb2xkXCJdID0gXCJDb2xkXCI7XG4gICAgLyoqXG4gICAgICogT3B0aW1pemVkIGZvciBzdG9yaW5nIGRhdGEgdGhhdCBpcyByYXJlbHkgYWNjZXNzZWQgYW5kIHN0b3JlZCBmb3IgYXQgbGVhc3QgMTgwIGRheXNcbiAgICAgKiB3aXRoIGZsZXhpYmxlIGxhdGVuY3kgcmVxdWlyZW1lbnRzIChvbiB0aGUgb3JkZXIgb2YgaG91cnMpLlxuICAgICAqL1xuICAgIEJsb2NrQmxvYlRpZXJbXCJBcmNoaXZlXCJdID0gXCJBcmNoaXZlXCI7XG59KShleHBvcnRzLkJsb2NrQmxvYlRpZXIgfHwgKGV4cG9ydHMuQmxvY2tCbG9iVGllciA9IHt9KSk7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgcGFnZSBibG9iIHRpZXIgdG8gc2V0IHRoZSBibG9iIHRvLiBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSB0byBwYWdlIGJsb2JzIG9uIHByZW1pdW0gc3RvcmFnZSBhY2NvdW50cy5cbiAqIFBsZWFzZSBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2F6dXJlL3N0b3JhZ2Uvc3RvcmFnZS1wcmVtaXVtLXN0b3JhZ2Ujc2NhbGFiaWxpdHktYW5kLXBlcmZvcm1hbmNlLXRhcmdldHN8aGVyZX1cbiAqIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgY29ycmVzcG9uZGluZyBJT1BTIGFuZCB0aHJvdWdocHV0IHBlciBQYWdlQmxvYlRpZXIuXG4gKi9cbmV4cG9ydHMuUHJlbWl1bVBhZ2VCbG9iVGllciA9IHZvaWQgMDtcbihmdW5jdGlvbiAoUHJlbWl1bVBhZ2VCbG9iVGllcikge1xuICAgIC8qKlxuICAgICAqIFA0IFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA0XCJdID0gXCJQNFwiO1xuICAgIC8qKlxuICAgICAqIFA2IFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA2XCJdID0gXCJQNlwiO1xuICAgIC8qKlxuICAgICAqIFAxMCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMTBcIl0gPSBcIlAxMFwiO1xuICAgIC8qKlxuICAgICAqIFAxNSBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMTVcIl0gPSBcIlAxNVwiO1xuICAgIC8qKlxuICAgICAqIFAyMCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMjBcIl0gPSBcIlAyMFwiO1xuICAgIC8qKlxuICAgICAqIFAzMCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMzBcIl0gPSBcIlAzMFwiO1xuICAgIC8qKlxuICAgICAqIFA0MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNDBcIl0gPSBcIlA0MFwiO1xuICAgIC8qKlxuICAgICAqIFA1MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNTBcIl0gPSBcIlA1MFwiO1xuICAgIC8qKlxuICAgICAqIFA2MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNjBcIl0gPSBcIlA2MFwiO1xuICAgIC8qKlxuICAgICAqIFA3MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNzBcIl0gPSBcIlA3MFwiO1xuICAgIC8qKlxuICAgICAqIFA4MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQODBcIl0gPSBcIlA4MFwiO1xufSkoZXhwb3J0cy5QcmVtaXVtUGFnZUJsb2JUaWVyIHx8IChleHBvcnRzLlByZW1pdW1QYWdlQmxvYlRpZXIgPSB7fSkpO1xuZnVuY3Rpb24gdG9BY2Nlc3NUaWVyKHRpZXIpIHtcbiAgICBpZiAodGllciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aWVyOyAvLyBObyBtb3JlIGNoZWNrIGlmIHN0cmluZyBpcyBhIHZhbGlkIEFjY2Vzc1RpZXIsIGFuZCBsZWZ0IHRoaXMgdG8gdW5kZXJsYXkgbG9naWMgdG8gZGVjaWRlKHNlcnZpY2UpLlxufVxuZnVuY3Rpb24gZW5zdXJlQ3BrSWZTcGVjaWZpZWQoY3BrLCBpc0h0dHBzKSB7XG4gICAgaWYgKGNwayAmJiAhaXNIdHRwcykge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkN1c3RvbWVyLXByb3ZpZGVkIGVuY3J5cHRpb24ga2V5IG11c3QgYmUgdXNlZCBvdmVyIEhUVFBTLlwiKTtcbiAgICB9XG4gICAgaWYgKGNwayAmJiAhY3BrLmVuY3J5cHRpb25BbGdvcml0aG0pIHtcbiAgICAgICAgY3BrLmVuY3J5cHRpb25BbGdvcml0aG0gPSBFbmNyeXB0aW9uQWxnb3JpdGhtQUVTMjU7XG4gICAgfVxufVxuLyoqXG4gKiBEZWZpbmVzIHRoZSBrbm93biBjbG91ZCBhdWRpZW5jZXMgZm9yIFN0b3JhZ2UuXG4gKi9cbmV4cG9ydHMuU3RvcmFnZUJsb2JBdWRpZW5jZSA9IHZvaWQgMDtcbihmdW5jdGlvbiAoU3RvcmFnZUJsb2JBdWRpZW5jZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBPQXV0aCBzY29wZSB0byB1c2UgdG8gcmV0cmlldmUgYW4gQUFEIHRva2VuIGZvciBBenVyZSBTdG9yYWdlLlxuICAgICAqL1xuICAgIFN0b3JhZ2VCbG9iQXVkaWVuY2VbXCJTdG9yYWdlT0F1dGhTY29wZXNcIl0gPSBcImh0dHBzOi8vc3RvcmFnZS5henVyZS5jb20vLmRlZmF1bHRcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgT0F1dGggc2NvcGUgdG8gdXNlIHRvIHJldHJpZXZlIGFuIEFBRCB0b2tlbiBmb3IgQXp1cmUgRGlzay5cbiAgICAgKi9cbiAgICBTdG9yYWdlQmxvYkF1ZGllbmNlW1wiRGlza0NvbXB1dGVPQXV0aFNjb3Blc1wiXSA9IFwiaHR0cHM6Ly9kaXNrLmNvbXB1dGUuYXp1cmUuY29tLy5kZWZhdWx0XCI7XG59KShleHBvcnRzLlN0b3JhZ2VCbG9iQXVkaWVuY2UgfHwgKGV4cG9ydHMuU3RvcmFnZUJsb2JBdWRpZW5jZSA9IHt9KSk7XG4vKipcbiAqXG4gKiBUbyBnZXQgT0F1dGggYXVkaWVuY2UgZm9yIGEgc3RvcmFnZSBhY2NvdW50IGZvciBibG9iIHNlcnZpY2UuXG4gKi9cbmZ1bmN0aW9uIGdldEJsb2JTZXJ2aWNlQWNjb3VudEF1ZGllbmNlKHN0b3JhZ2VBY2NvdW50TmFtZSkge1xuICAgIHJldHVybiBgaHR0cHM6Ly8ke3N0b3JhZ2VBY2NvdW50TmFtZX0uYmxvYi5jb3JlLndpbmRvd3MubmV0Ly5kZWZhdWx0YDtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgY29udmVydHMgUGFnZVJhbmdlIGFuZCBDbGVhclJhbmdlIHRvIGEgY29tbW9uIFJhbmdlIG9iamVjdC5cbiAqIFBhZ2VSYW5nZSBhbmQgQ2xlYXJSYW5nZSBoYXZlIHN0YXJ0IGFuZCBlbmQgd2hpbGUgUmFuZ2Ugb2Zmc2V0IGFuZCBjb3VudFxuICogdGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIHRvIFJhbmdlLlxuICogQHBhcmFtIHJlc3BvbnNlIC0gTW9kZWwgUGFnZUJsb2IgUmFuZ2UgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gcmFuZ2VSZXNwb25zZUZyb21Nb2RlbChyZXNwb25zZSkge1xuICAgIGNvbnN0IHBhZ2VSYW5nZSA9IChyZXNwb25zZS5fcmVzcG9uc2UucGFyc2VkQm9keS5wYWdlUmFuZ2UgfHwgW10pLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgb2Zmc2V0OiB4LnN0YXJ0LFxuICAgICAgICBjb3VudDogeC5lbmQgLSB4LnN0YXJ0LFxuICAgIH0pKTtcbiAgICBjb25zdCBjbGVhclJhbmdlID0gKHJlc3BvbnNlLl9yZXNwb25zZS5wYXJzZWRCb2R5LmNsZWFyUmFuZ2UgfHwgW10pLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgb2Zmc2V0OiB4LnN0YXJ0LFxuICAgICAgICBjb3VudDogeC5lbmQgLSB4LnN0YXJ0LFxuICAgIH0pKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgcGFnZVJhbmdlLFxuICAgICAgICBjbGVhclJhbmdlLCBfcmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UuX3Jlc3BvbnNlKSwgeyBwYXJzZWRCb2R5OiB7XG4gICAgICAgICAgICAgICAgcGFnZVJhbmdlLFxuICAgICAgICAgICAgICAgIGNsZWFyUmFuZ2UsXG4gICAgICAgICAgICB9IH0pIH0pO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhpcyBpcyB0aGUgcG9sbGVyIHJldHVybmVkIGJ5IHtAbGluayBCbG9iQ2xpZW50LmJlZ2luQ29weUZyb21VUkx9LlxuICogVGhpcyBjYW4gbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSBvdXRzaWRlIG9mIHRoaXMgcGFja2FnZS5cbiAqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEJsb2JCZWdpbkNvcHlGcm9tVXJsUG9sbGVyIGV4dGVuZHMgY29yZUxyby5Qb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBibG9iQ2xpZW50LCBjb3B5U291cmNlLCBpbnRlcnZhbEluTXMgPSAxNTAwMCwgb25Qcm9ncmVzcywgcmVzdW1lRnJvbSwgc3RhcnRDb3B5RnJvbVVSTE9wdGlvbnMsIH0gPSBvcHRpb25zO1xuICAgICAgICBsZXQgc3RhdGU7XG4gICAgICAgIGlmIChyZXN1bWVGcm9tKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEpTT04ucGFyc2UocmVzdW1lRnJvbSkuc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uID0gbWFrZUJsb2JCZWdpbkNvcHlGcm9tVVJMUG9sbE9wZXJhdGlvbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBibG9iQ2xpZW50LFxuICAgICAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgICAgIHN0YXJ0Q29weUZyb21VUkxPcHRpb25zIH0pKTtcbiAgICAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyhvblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludGVydmFsSW5NcyA9IGludGVydmFsSW5NcztcbiAgICB9XG4gICAgZGVsYXkoKSB7XG4gICAgICAgIHJldHVybiBjb3JlVXRpbC5kZWxheSh0aGlzLmludGVydmFsSW5Ncyk7XG4gICAgfVxufVxuLyoqXG4gKiBOb3RlOiBJbnRlbnRpb25hbGx5IHVzaW5nIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3ZlciBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uXG4gKiBzbyB0aGF0IHRoZSBmdW5jdGlvbiBjYW4gYmUgaW52b2tlZCB3aXRoIGEgZGlmZmVyZW50IGNvbnRleHQuXG4gKiBUaGlzIGFmZmVjdHMgd2hhdCBgdGhpc2AgcmVmZXJzIHRvLlxuICogQGhpZGRlblxuICovXG5jb25zdCBjYW5jZWwgPSBhc3luYyBmdW5jdGlvbiBjYW5jZWwob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgY29weUlkIH0gPSBzdGF0ZTtcbiAgICBpZiAoc3RhdGUuaXNDb21wbGV0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoIWNvcHlJZCkge1xuICAgICAgICBzdGF0ZS5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKTtcbiAgICB9XG4gICAgLy8gaWYgYWJvcnRDb3B5RnJvbVVSTCB0aHJvd3MsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHVzZXIncyBwb2xsZXIuY2FuY2VsT3BlcmF0aW9uIGNhbGxcbiAgICBhd2FpdCBzdGF0ZS5ibG9iQ2xpZW50LmFib3J0Q29weUZyb21VUkwoY29weUlkLCB7XG4gICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgIH0pO1xuICAgIHN0YXRlLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gbWFrZUJsb2JCZWdpbkNvcHlGcm9tVVJMUG9sbE9wZXJhdGlvbihzdGF0ZSk7XG59O1xuLyoqXG4gKiBOb3RlOiBJbnRlbnRpb25hbGx5IHVzaW5nIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3ZlciBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uXG4gKiBzbyB0aGF0IHRoZSBmdW5jdGlvbiBjYW4gYmUgaW52b2tlZCB3aXRoIGEgZGlmZmVyZW50IGNvbnRleHQuXG4gKiBUaGlzIGFmZmVjdHMgd2hhdCBgdGhpc2AgcmVmZXJzIHRvLlxuICogQGhpZGRlblxuICovXG5jb25zdCB1cGRhdGUgPSBhc3luYyBmdW5jdGlvbiB1cGRhdGUob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgYmxvYkNsaWVudCwgY29weVNvdXJjZSwgc3RhcnRDb3B5RnJvbVVSTE9wdGlvbnMgfSA9IHN0YXRlO1xuICAgIGlmICghc3RhdGUuaXNTdGFydGVkKSB7XG4gICAgICAgIHN0YXRlLmlzU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJsb2JDbGllbnQuc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCBzdGFydENvcHlGcm9tVVJMT3B0aW9ucyk7XG4gICAgICAgIC8vIGNvcHlJZCBpcyBuZWVkZWQgdG8gYWJvcnRcbiAgICAgICAgc3RhdGUuY29weUlkID0gcmVzdWx0LmNvcHlJZDtcbiAgICAgICAgaWYgKHJlc3VsdC5jb3B5U3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgc3RhdGUucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgc3RhdGUuaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzdGF0ZS5pc0NvbXBsZXRlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhdGUuYmxvYkNsaWVudC5nZXRQcm9wZXJ0aWVzKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICBjb25zdCB7IGNvcHlTdGF0dXMsIGNvcHlQcm9ncmVzcyB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgcHJldkNvcHlQcm9ncmVzcyA9IHN0YXRlLmNvcHlQcm9ncmVzcztcbiAgICAgICAgICAgIGlmIChjb3B5UHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jb3B5UHJvZ3Jlc3MgPSBjb3B5UHJvZ3Jlc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29weVN0YXR1cyA9PT0gXCJwZW5kaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBjb3B5UHJvZ3Jlc3MgIT09IHByZXZDb3B5UHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5maXJlUHJvZ3Jlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgaW4gc2V0VGltZW91dCwgb3Igc3dhbGxvdyBlcnJvcj9cbiAgICAgICAgICAgICAgICBvcHRpb25zLmZpcmVQcm9ncmVzcyhzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb3B5U3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgIHN0YXRlLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb3B5U3RhdHVzID09PSBcImZhaWxlZFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IgPSBuZXcgRXJyb3IoYEJsb2IgY29weSBmYWlsZWQgd2l0aCByZWFzb246IFwiJHtyZXN1bHQuY29weVN0YXR1c0Rlc2NyaXB0aW9uIHx8IFwidW5rbm93blwifVwiYCk7XG4gICAgICAgICAgICAgICAgc3RhdGUuaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN0YXRlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgc3RhdGUuaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKTtcbn07XG4vKipcbiAqIE5vdGU6IEludGVudGlvbmFsbHkgdXNpbmcgZnVuY3Rpb24gZXhwcmVzc2lvbiBvdmVyIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAqIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGggYSBkaWZmZXJlbnQgY29udGV4dC5cbiAqIFRoaXMgYWZmZWN0cyB3aGF0IGB0aGlzYCByZWZlcnMgdG8uXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgc3RhdGU6IHRoaXMuc3RhdGUgfSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgLy8gcmVtb3ZlIGJsb2JDbGllbnQgZnJvbSBzZXJpYWxpemVkIHN0YXRlIHNpbmNlIGEgY2xpZW50IGNhbid0IGJlIGh5ZHJhdGVkIGZyb20gdGhpcyBpbmZvLlxuICAgICAgICBpZiAoa2V5ID09PSBcImJsb2JDbGllbnRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgcG9sbCBvcGVyYXRpb24gZ2l2ZW4gdGhlIHByb3ZpZGVkIHN0YXRlLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGU6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSxcbiAgICAgICAgY2FuY2VsLFxuICAgICAgICB0b1N0cmluZyxcbiAgICAgICAgdXBkYXRlLFxuICAgIH07XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmdlIHN0cmluZy4gRm9yIGV4YW1wbGU6XG4gKlxuICogXCJieXRlcz0yNTUtXCIgb3IgXCJieXRlcz0wLTUxMVwiXG4gKlxuICogQHBhcmFtIGlSYW5nZSAtXG4gKi9cbmZ1bmN0aW9uIHJhbmdlVG9TdHJpbmcoaVJhbmdlKSB7XG4gICAgaWYgKGlSYW5nZS5vZmZzZXQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSYW5nZS5vZmZzZXQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAwLmApO1xuICAgIH1cbiAgICBpZiAoaVJhbmdlLmNvdW50ICYmIGlSYW5nZS5jb3VudCA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSYW5nZS5jb3VudCBtdXN0IGJlIGxhcmdlciB0aGFuIDAuIExlYXZlIGl0IHVuZGVmaW5lZCBpZiB5b3Ugd2FudCBhIHJhbmdlIGZyb20gb2Zmc2V0IHRvIHRoZSBlbmQuYCk7XG4gICAgfVxuICAgIHJldHVybiBpUmFuZ2UuY291bnRcbiAgICAgICAgPyBgYnl0ZXM9JHtpUmFuZ2Uub2Zmc2V0fS0ke2lSYW5nZS5vZmZzZXQgKyBpUmFuZ2UuY291bnQgLSAxfWBcbiAgICAgICAgOiBgYnl0ZXM9JHtpUmFuZ2Uub2Zmc2V0fS1gO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8vIEluIGJyb3dzZXIsIGR1cmluZyB3ZWJwYWNrIG9yIGJyb3dzZXJpZnkgYnVuZGxpbmcsIHRoaXMgbW9kdWxlIHdpbGwgYmUgcmVwbGFjZWQgYnkgJ2V2ZW50cydcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb3phbGEvZXZlbnRzXG4vKipcbiAqIFN0YXRlcyBmb3IgQmF0Y2guXG4gKi9cbnZhciBCYXRjaFN0YXRlcztcbihmdW5jdGlvbiAoQmF0Y2hTdGF0ZXMpIHtcbiAgICBCYXRjaFN0YXRlc1tCYXRjaFN0YXRlc1tcIkdvb2RcIl0gPSAwXSA9IFwiR29vZFwiO1xuICAgIEJhdGNoU3RhdGVzW0JhdGNoU3RhdGVzW1wiRXJyb3JcIl0gPSAxXSA9IFwiRXJyb3JcIjtcbn0pKEJhdGNoU3RhdGVzIHx8IChCYXRjaFN0YXRlcyA9IHt9KSk7XG4vKipcbiAqIEJhdGNoIHByb3ZpZGVzIGJhc2ljIHBhcmFsbGVsIGV4ZWN1dGlvbiB3aXRoIGNvbmN1cnJlbmN5IGxpbWl0cy5cbiAqIFdpbGwgc3RvcCBleGVjdXRlIGxlZnQgb3BlcmF0aW9ucyB3aGVuIG9uZSBvZiB0aGUgZXhlY3V0ZWQgb3BlcmF0aW9uIHRocm93cyBhbiBlcnJvci5cbiAqIEJ1dCBCYXRjaCBjYW5ub3QgY2FuY2VsIG9uZ29pbmcgb3BlcmF0aW9ucywgeW91IG5lZWQgdG8gY2FuY2VsIHRoZW0gYnkgeW91cnNlbGYuXG4gKi9cbmNsYXNzIEJhdGNoIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJhdGNoLlxuICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29uY3VycmVuY3kgPSA1KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOdW1iZXIgb2YgYWN0aXZlIG9wZXJhdGlvbnMgdW5kZXIgZXhlY3V0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVzID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE51bWJlciBvZiBjb21wbGV0ZWQgb3BlcmF0aW9ucyB1bmRlciBleGVjdXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPZmZzZXQgb2YgbmV4dCBvcGVyYXRpb24gdG8gYmUgZXhlY3V0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcGVyYXRpb24gYXJyYXkgdG8gYmUgZXhlY3V0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0YXRlcyBvZiBCYXRjaC4gV2hlbiBhbiBlcnJvciBoYXBwZW5zLCBzdGF0ZSB3aWxsIHR1cm4gaW50byBlcnJvci5cbiAgICAgICAgICogQmF0Y2ggd2lsbCBzdG9wIGV4ZWN1dGUgbGVmdCBvcGVyYXRpb25zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJhdGNoU3RhdGVzLkdvb2Q7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiY29uY3VycmVuY3kgbXVzdCBiZSBsYXJnZXIgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgb3BlcmF0aW9uIGludG8gcXVldWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIC1cbiAgICAgKi9cbiAgICBhZGRPcGVyYXRpb24ob3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVzKys7XG4gICAgICAgICAgICAgICAgYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVzLS07XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWQrKztcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFsbGVsRXhlY3V0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydCBleGVjdXRlIG9wZXJhdGlvbnMgaW4gdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICovXG4gICAgYXN5bmMgZG8oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJhbGxlbEV4ZWN1dGUoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImZpbmlzaFwiLCByZXNvbHZlKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCYXRjaFN0YXRlcy5FcnJvcjtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgbmV4dCBvcGVyYXRpb24gdG8gYmUgZXhlY3V0ZWQuIFJldHVybiBudWxsIHdoZW4gcmVhY2hpbmcgZW5kcy5cbiAgICAgKlxuICAgICAqL1xuICAgIG5leHRPcGVyYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9mZnNldCA8IHRoaXMub3BlcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbnNbdGhpcy5vZmZzZXQrK107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGV4ZWN1dGUgb3BlcmF0aW9ucy4gT25lIG9uZSB0aGUgbW9zdCBpbXBvcnRhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuXG4gICAgICogdGhpcyBtZXRob2Qgd2l0aCBkbygpIGlzIHRoYXQgZG8oKSB3cmFwcyBhcyBhbiBzeW5jIG1ldGhvZC5cbiAgICAgKlxuICAgICAqL1xuICAgIHBhcmFsbGVsRXhlY3V0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IEJhdGNoU3RhdGVzLkVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGVkID49IHRoaXMub3BlcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KFwiZmluaXNoXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLmFjdGl2ZXMgPCB0aGlzLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLm5leHRPcGVyYXRpb24oKTtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoaXMgY2xhc3MgZ2VuZXJhdGVzIGEgcmVhZGFibGUgc3RyZWFtIGZyb20gdGhlIGRhdGEgaW4gYW4gYXJyYXkgb2YgYnVmZmVycy5cbiAqL1xuY2xhc3MgQnVmZmVyc1N0cmVhbSBleHRlbmRzIHN0cmVhbS5SZWFkYWJsZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCdWZmZXJzU3RyZWFtIHRoYXQgd2lsbCBlbWl0IHRoZSBkYXRhXG4gICAgICogY29udGFpbmVkIGluIHRoZSBhcnJheSBvZiBidWZmZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlcnMgLSBBcnJheSBvZiBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIGRhdGFcbiAgICAgKiBAcGFyYW0gYnl0ZUxlbmd0aCAtIFRoZSB0b3RhbCBsZW5ndGggb2YgZGF0YSBjb250YWluZWQgaW4gdGhlIGJ1ZmZlcnNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihidWZmZXJzLCBieXRlTGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmJ1ZmZlcnMgPSBidWZmZXJzO1xuICAgICAgICB0aGlzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoO1xuICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSAwO1xuICAgICAgICB0aGlzLmJ1ZmZlckluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5wdXNoZWRCeXRlc0xlbmd0aCA9IDA7XG4gICAgICAgIC8vIGNoZWNrIGJ5dGVMZW5ndGggaXMgbm8gbGFyZ2VyIHRoYW4gYnVmZmVyc1tdIHRvdGFsIGxlbmd0aFxuICAgICAgICBsZXQgYnVmZmVyc0xlbmd0aCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgYnVmIG9mIHRoaXMuYnVmZmVycykge1xuICAgICAgICAgICAgYnVmZmVyc0xlbmd0aCArPSBidWYuYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVmZmVyc0xlbmd0aCA8IHRoaXMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSBzaXplIHNob3VsZG4ndCBiZSBsYXJnZXIgdGhhbiB0aGUgdG90YWwgbGVuZ3RoIG9mIGJ1ZmZlcnMuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludGVybmFsIF9yZWFkKCkgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gd2FudHMgdG8gcHVsbCBtb3JlIGRhdGEgaW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2l6ZSAtIE9wdGlvbmFsLiBUaGUgc2l6ZSBvZiBkYXRhIHRvIGJlIHJlYWRcbiAgICAgKi9cbiAgICBfcmVhZChzaXplKSB7XG4gICAgICAgIGlmICh0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoID49IHRoaXMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2l6ZSkge1xuICAgICAgICAgICAgc2l6ZSA9IHRoaXMucmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG91dEJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHNpemUgJiYgdGhpcy5wdXNoZWRCeXRlc0xlbmd0aCA8IHRoaXMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgLy8gVGhlIGxhc3QgYnVmZmVyIG1heSBiZSBsb25nZXIgdGhhbiB0aGUgZGF0YSBpdCBjb250YWlucy5cbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0RhdGFJbkFsbEJ1ZmZlcnMgPSB0aGlzLmJ5dGVMZW5ndGggLSB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nQ2FwYWNpdHlJblRoaXNCdWZmZXIgPSB0aGlzLmJ1ZmZlcnNbdGhpcy5idWZmZXJJbmRleF0uYnl0ZUxlbmd0aCAtIHRoaXMuYnl0ZU9mZnNldEluQ3VycmVudEJ1ZmZlcjtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IE1hdGgubWluKHJlbWFpbmluZ0NhcGFjaXR5SW5UaGlzQnVmZmVyLCByZW1haW5pbmdEYXRhSW5BbGxCdWZmZXJzKTtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPiBzaXplIC0gaSkge1xuICAgICAgICAgICAgICAgIC8vIGNodW5rU2l6ZSA9IHNpemUgLSBpXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyICsgc2l6ZSAtIGk7XG4gICAgICAgICAgICAgICAgb3V0QnVmZmVycy5wdXNoKHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XS5zbGljZSh0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIsIGVuZCkpO1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaGVkQnl0ZXNMZW5ndGggKz0gc2l6ZSAtIGk7XG4gICAgICAgICAgICAgICAgdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyID0gZW5kO1xuICAgICAgICAgICAgICAgIGkgPSBzaXplO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY2h1bmtTaXplID0gcmVtYWluaW5nXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyICsgcmVtYWluaW5nO1xuICAgICAgICAgICAgICAgIG91dEJ1ZmZlcnMucHVzaCh0aGlzLmJ1ZmZlcnNbdGhpcy5idWZmZXJJbmRleF0uc2xpY2UodGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyLCBlbmQpKTtcbiAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nID09PSByZW1haW5pbmdDYXBhY2l0eUluVGhpc0J1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmJ1ZmZlcnNbdGhpcy5idWZmZXJJbmRleF0gdXNlZCB1cCwgc2hpZnQgdG8gbmV4dCBvbmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyID0gZW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoICs9IHJlbWFpbmluZztcbiAgICAgICAgICAgICAgICBpICs9IHJlbWFpbmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3V0QnVmZmVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnB1c2goQnVmZmVyLmNvbmNhdChvdXRCdWZmZXJzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3V0QnVmZmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMucHVzaChvdXRCdWZmZXJzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBtYXhCdWZmZXJMZW5ndGggPSBidWZmZXIuY29uc3RhbnRzLk1BWF9MRU5HVEg7XG4vKipcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBidWZmZXIgY29udGFpbmVyIHdoaWNoIGNvbmNlcHR1YWxseSBoYXMgbm8gaGFyZCBzaXplIGxpbWl0LlxuICogSXQgYWNjZXB0cyBhIGNhcGFjaXR5LCBhbiBhcnJheSBvZiBpbnB1dCBidWZmZXJzIGFuZCB0aGUgdG90YWwgbGVuZ3RoIG9mIGlucHV0IGRhdGEuXG4gKiBJdCB3aWxsIGFsbG9jYXRlIGFuIGludGVybmFsIFwiYnVmZmVyXCIgb2YgdGhlIGNhcGFjaXR5IGFuZCBmaWxsIHRoZSBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXJzXG4gKiBpbnRvIHRoZSBpbnRlcm5hbCBcImJ1ZmZlclwiIHNlcmlhbGx5IHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbGVuZ3RoLlxuICogVGhlbiBieSBjYWxsaW5nIFBvb2xlZEJ1ZmZlci5nZXRSZWFkYWJsZVN0cmVhbSgpLCB5b3UgY2FuIGdldCBhIHJlYWRhYmxlIHN0cmVhbVxuICogYXNzZW1ibGVkIGZyb20gYWxsIHRoZSBkYXRhIGluIHRoZSBpbnRlcm5hbCBcImJ1ZmZlclwiLlxuICovXG5jbGFzcyBQb29sZWRCdWZmZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgcG9vbGVkIGJ1ZmZlcnMuXG4gICAgICovXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihjYXBhY2l0eSwgYnVmZmVycywgdG90YWxMZW5ndGgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEludGVybmFsIGJ1ZmZlcnMgdXNlZCB0byBrZWVwIHRoZSBkYXRhLlxuICAgICAgICAgKiBFYWNoIGJ1ZmZlciBoYXMgYSBsZW5ndGggb2YgdGhlIG1heEJ1ZmZlckxlbmd0aCBleGNlcHQgbGFzdCBvbmUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5jYXBhY2l0eSA9IGNhcGFjaXR5O1xuICAgICAgICB0aGlzLl9zaXplID0gMDtcbiAgICAgICAgLy8gYWxsb2NhdGVcbiAgICAgICAgY29uc3QgYnVmZmVyTnVtID0gTWF0aC5jZWlsKGNhcGFjaXR5IC8gbWF4QnVmZmVyTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJOdW07IGkrKykge1xuICAgICAgICAgICAgbGV0IGxlbiA9IGkgPT09IGJ1ZmZlck51bSAtIDEgPyBjYXBhY2l0eSAlIG1heEJ1ZmZlckxlbmd0aCA6IG1heEJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZW4gPSBtYXhCdWZmZXJMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcnMucHVzaChCdWZmZXIuYWxsb2NVbnNhZmUobGVuKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsbChidWZmZXJzLCB0b3RhbExlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRmlsbCB0aGUgaW50ZXJuYWwgYnVmZmVycyB3aXRoIGRhdGEgaW4gdGhlIGlucHV0IGJ1ZmZlcnMgc2VyaWFsbHlcbiAgICAgKiB3aXRoIHJlc3BlY3QgdG8gdGhlIHRvdGFsIGxlbmd0aCBhbmQgdGhlIHRvdGFsIGNhcGFjaXR5IG9mIHRoZSBpbnRlcm5hbCBidWZmZXJzLlxuICAgICAqIERhdGEgY29waWVkIHdpbGwgYmUgc2hpZnQgb3V0IG9mIHRoZSBpbnB1dCBidWZmZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlcnMgLSBJbnB1dCBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUgZmlsbGVkIGluIHRoZSBwb29sZWQgYnVmZmVyXG4gICAgICogQHBhcmFtIHRvdGFsTGVuZ3RoIC0gVG90YWwgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGZpbGxlZCBpbi5cbiAgICAgKlxuICAgICAqL1xuICAgIGZpbGwoYnVmZmVycywgdG90YWxMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IE1hdGgubWluKHRoaXMuY2FwYWNpdHksIHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgbGV0IGkgPSAwLCBqID0gMCwgdGFyZ2V0T2Zmc2V0ID0gMCwgc291cmNlT2Zmc2V0ID0gMCwgdG90YWxDb3BpZWROdW0gPSAwO1xuICAgICAgICB3aGlsZSAodG90YWxDb3BpZWROdW0gPCB0aGlzLl9zaXplKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBidWZmZXJzW2ldO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5idWZmZXJzW2pdO1xuICAgICAgICAgICAgY29uc3QgY29waWVkTnVtID0gc291cmNlLmNvcHkodGFyZ2V0LCB0YXJnZXRPZmZzZXQsIHNvdXJjZU9mZnNldCk7XG4gICAgICAgICAgICB0b3RhbENvcGllZE51bSArPSBjb3BpZWROdW07XG4gICAgICAgICAgICBzb3VyY2VPZmZzZXQgKz0gY29waWVkTnVtO1xuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0ICs9IGNvcGllZE51bTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VPZmZzZXQgPT09IHNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YXJnZXRPZmZzZXQgPT09IHRhcmdldC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciBjb3BpZWQgZnJvbSBzb3VyY2UgYnVmZmVyc1xuICAgICAgICBidWZmZXJzLnNwbGljZSgwLCBpKTtcbiAgICAgICAgaWYgKGJ1ZmZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYnVmZmVyc1swXSA9IGJ1ZmZlcnNbMF0uc2xpY2Uoc291cmNlT2Zmc2V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHJlYWRhYmxlIHN0cmVhbSBhc3NlbWJsZWQgZnJvbSBhbGwgdGhlIGRhdGEgaW4gdGhlIGludGVybmFsIGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRSZWFkYWJsZVN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXJzU3RyZWFtKHRoaXMuYnVmZmVycywgdGhpcy5zaXplKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGlzIGNsYXNzIGFjY2VwdHMgYSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbSBhcyBpbnB1dCwgYW5kIGtlZXBzIHJlYWRpbmcgZGF0YVxuICogZnJvbSB0aGUgc3RyZWFtIGludG8gdGhlIGludGVybmFsIGJ1ZmZlciBzdHJ1Y3R1cmUsIHVudGlsIGl0IHJlYWNoZXMgbWF4QnVmZmVycy5cbiAqIEV2ZXJ5IGF2YWlsYWJsZSBidWZmZXIgd2lsbCB0cnkgdG8gdHJpZ2dlciBvdXRnb2luZ0hhbmRsZXIuXG4gKlxuICogVGhlIGludGVybmFsIGJ1ZmZlciBzdHJ1Y3R1cmUgaW5jbHVkZXMgYW4gaW5jb21pbmcgYnVmZmVyIGFycmF5LCBhbmQgYSBvdXRnb2luZ1xuICogYnVmZmVyIGFycmF5LiBUaGUgaW5jb21pbmcgYnVmZmVyIGFycmF5IGluY2x1ZGVzIHRoZSBcImVtcHR5XCIgYnVmZmVycyBjYW4gYmUgZmlsbGVkXG4gKiB3aXRoIG5ldyBpbmNvbWluZyBkYXRhLiBUaGUgb3V0Z29pbmcgYXJyYXkgaW5jbHVkZXMgdGhlIGZpbGxlZCBidWZmZXJzIHRvIGJlXG4gKiBoYW5kbGVkIGJ5IG91dGdvaW5nSGFuZGxlci4gRXZlcnkgYWJvdmUgYnVmZmVyIHNpemUgaXMgZGVmaW5lZCBieSBwYXJhbWV0ZXIgYnVmZmVyU2l6ZS5cbiAqXG4gKiBOVU1fT0ZfQUxMX0JVRkZFUlMgPSBCVUZGRVJTX0lOX0lOQ09NSU5HICsgQlVGRkVSU19JTl9PVVRHT0lORyArIEJVRkZFUlNfVU5ERVJfSEFORExJTkdcbiAqXG4gKiBOVU1fT0ZfQUxMX0JVRkZFUlMgbGVzc2VyIHRoYW4gb3IgZXF1YWwgdG8gbWF4QnVmZmVyc1xuICpcbiAqIFBFUkZPUk1BTkNFIElNUFJPVkVNRU5UIFRJUFM6XG4gKiAxLiBJbnB1dCBzdHJlYW0gaGlnaFdhdGVyTWFyayBpcyBiZXR0ZXIgdG8gc2V0IGEgc2FtZSB2YWx1ZSB3aXRoIGJ1ZmZlclNpemVcbiAqICAgIHBhcmFtZXRlciwgd2hpY2ggd2lsbCBhdm9pZCBCdWZmZXIuY29uY2F0KCkgb3BlcmF0aW9ucy5cbiAqIDIuIGNvbmN1cnJlbmN5IHNob3VsZCBzZXQgYSBzbWFsbGVyIHZhbHVlIHRoYW4gbWF4QnVmZmVycywgd2hpY2ggaXMgaGVscGZ1bCB0b1xuICogICAgcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSB3aGVuIGEgb3V0Z29pbmcgaGFuZGxlciB3YWl0cyBmb3IgdGhlIHN0cmVhbSBkYXRhLlxuICogICAgaW4gdGhpcyBzaXR1YXRpb24sIG91dGdvaW5nIGhhbmRsZXJzIGFyZSBibG9ja2VkLlxuICogICAgT3V0Z29pbmcgcXVldWUgc2hvdWxkbid0IGJlIGVtcHR5LlxuICovXG5jbGFzcyBCdWZmZXJTY2hlZHVsZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyU2NoZWR1bGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlYWRhYmxlIC0gQSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbVxuICAgICAqIEBwYXJhbSBidWZmZXJTaXplIC0gQnVmZmVyIHNpemUgb2YgZXZlcnkgbWFpbnRhaW5lZCBidWZmZXJcbiAgICAgKiBAcGFyYW0gbWF4QnVmZmVycyAtIEhvdyBtYW55IGJ1ZmZlcnMgY2FuIGJlIGFsbG9jYXRlZFxuICAgICAqIEBwYXJhbSBvdXRnb2luZ0hhbmRsZXIgLSBBbiBhc3luYyBmdW5jdGlvbiBzY2hlZHVsZWQgdG8gYmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJlZCB3aGVuIGEgYnVmZmVyIGZ1bGx5IGZpbGxlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzdHJlYW0gZGF0YVxuICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeSAtIENvbmN1cnJlbmN5IG9mIGV4ZWN1dGluZyBvdXRnb2luZ0hhbmRsZXJzICg+MClcbiAgICAgKiBAcGFyYW0gZW5jb2RpbmcgLSBbT3B0aW9uYWxdIEVuY29kaW5nIG9mIFJlYWRhYmxlIHN0cmVhbSB3aGVuIGl0J3MgYSBzdHJpbmcgc3RyZWFtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocmVhZGFibGUsIGJ1ZmZlclNpemUsIG1heEJ1ZmZlcnMsIG91dGdvaW5nSGFuZGxlciwgY29uY3VycmVuY3ksIGVuY29kaW5nKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBldmVudCBlbWl0dGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGludGVybmFsIG9mZnNldCBtYXJrZXIgdG8gdHJhY2sgZGF0YSBvZmZzZXQgaW4gYnl0ZXMgb2YgbmV4dCBvdXRnb2luZ0hhbmRsZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBtYXJrZXIgdG8gdHJhY2sgd2hldGhlciBzdHJlYW0gaXMgZW5kLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc1N0cmVhbUVuZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gaW50ZXJuYWwgbWFya2VyIHRvIHRyYWNrIHdoZXRoZXIgc3RyZWFtIG9yIG91dGdvaW5nSGFuZGxlciByZXR1cm5zIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIb3cgbWFueSBoYW5kbGVycyBhcmUgZXhlY3V0aW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhvdyBtYW55IGJ1ZmZlcnMgaGF2ZSBiZWVuIGFsbG9jYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubnVtQnVmZmVycyA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCZWNhdXNlIHRoaXMgY2xhc3MgZG9lc24ndCBrbm93IGhvdyBtdWNoIGRhdGEgZXZlcnkgdGltZSBzdHJlYW0gcG9wcywgd2hpY2hcbiAgICAgICAgICogaXMgZGVmaW5lZCBieSBoaWdoV2F0ZXJNYXJrZXIgb2YgdGhlIHN0cmVhbS4gU28gQnVmZmVyU2NoZWR1bGVyIHdpbGwgY2FjaGVcbiAgICAgICAgICogZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBzdHJlYW0sIHdoZW4gZGF0YSBpbiB1bnJlc29sdmVkRGF0YUFycmF5IGV4Y2VlZHMgdGhlXG4gICAgICAgICAqIGJsb2NrU2l6ZSBkZWZpbmVkLCBpdCB3aWxsIHRyeSB0byBjb25jYXQgYSBibG9ja1NpemUgb2YgYnVmZmVyLCBmaWxsIGludG8gYXZhaWxhYmxlXG4gICAgICAgICAqIGJ1ZmZlcnMgZnJvbSBpbmNvbWluZyBhbmQgcHVzaCB0byBvdXRnb2luZyBhcnJheS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudW5yZXNvbHZlZERhdGFBcnJheSA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogSG93IG11Y2ggZGF0YSBjb25zaXN0ZWQgaW4gdW5yZXNvbHZlZERhdGFBcnJheS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudW5yZXNvbHZlZExlbmd0aCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgYXJyYXkgaW5jbHVkZXMgYWxsIHRoZSBhdmFpbGFibGUgYnVmZmVycyBjYW4gYmUgdXNlZCB0byBmaWxsIGRhdGEgZnJvbSBzdHJlYW0uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmluY29taW5nID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgYXJyYXkgKHF1ZXVlKSBpbmNsdWRlcyBhbGwgdGhlIGJ1ZmZlcnMgZmlsbGVkIGZyb20gc3RyZWFtIGRhdGEuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm91dGdvaW5nID0gW107XG4gICAgICAgIGlmIChidWZmZXJTaXplIDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBidWZmZXJTaXplIG11c3QgYmUgbGFyZ2VyIHRoYW4gMCwgY3VycmVudCBpcyAke2J1ZmZlclNpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heEJ1ZmZlcnMgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYG1heEJ1ZmZlcnMgbXVzdCBiZSBsYXJnZXIgdGhhbiAwLCBjdXJyZW50IGlzICR7bWF4QnVmZmVyc31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uY3VycmVuY3kgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGNvbmN1cnJlbmN5IG11c3QgYmUgbGFyZ2VyIHRoYW4gMCwgY3VycmVudCBpcyAke2NvbmN1cnJlbmN5fWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7XG4gICAgICAgIHRoaXMubWF4QnVmZmVycyA9IG1heEJ1ZmZlcnM7XG4gICAgICAgIHRoaXMucmVhZGFibGUgPSByZWFkYWJsZTtcbiAgICAgICAgdGhpcy5vdXRnb2luZ0hhbmRsZXIgPSBvdXRnb2luZ0hhbmRsZXI7XG4gICAgICAgIHRoaXMuY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydCB0aGUgc2NoZWR1bGVyLCB3aWxsIHJldHVybiBlcnJvciB3aGVuIHN0cmVhbSBvZiBhbnkgb2YgdGhlIG91dGdvaW5nSGFuZGxlcnNcbiAgICAgKiByZXR1cm5zIGVycm9yLlxuICAgICAqXG4gICAgICovXG4gICAgYXN5bmMgZG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlYWRhYmxlLm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiA/IEJ1ZmZlci5mcm9tKGRhdGEsIHRoaXMuZW5jb2RpbmcpIDogZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFVucmVzb2x2ZWREYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZXNvbHZlRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZGFibGUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlYWRhYmxlLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3RyZWFtRW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImNoZWNrRW5kXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWRhYmxlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImNoZWNrRW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vdXRnb2luZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlck91dGdvaW5nSGFuZGxlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N0cmVhbUVuZCAmJiB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5yZXNvbHZlZExlbmd0aCA+IDAgJiYgdGhpcy51bnJlc29sdmVkTGVuZ3RoIDwgdGhpcy5idWZmZXJTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLnNoaWZ0QnVmZmVyRnJvbVVucmVzb2x2ZWREYXRhQXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0Z29pbmdIYW5kbGVyKCgpID0+IGJ1ZmZlci5nZXRSZWFkYWJsZVN0cmVhbSgpLCBidWZmZXIuc2l6ZSwgdGhpcy5vZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnVucmVzb2x2ZWRMZW5ndGggPj0gdGhpcy5idWZmZXJTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluc2VydCBhIG5ldyBkYXRhIGludG8gdW5yZXNvbHZlZCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIC1cbiAgICAgKi9cbiAgICBhcHBlbmRVbnJlc29sdmVkRGF0YShkYXRhKSB7XG4gICAgICAgIHRoaXMudW5yZXNvbHZlZERhdGFBcnJheS5wdXNoKGRhdGEpO1xuICAgICAgICB0aGlzLnVucmVzb2x2ZWRMZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyeSB0byBzaGlmdCBhIGJ1ZmZlciB3aXRoIHNpemUgaW4gYmxvY2tTaXplLiBUaGUgYnVmZmVyIHJldHVybmVkIG1heSBiZSBsZXNzXG4gICAgICogdGhhbiBibG9ja1NpemUgd2hlbiBkYXRhIGluIHVucmVzb2x2ZWREYXRhQXJyYXkgaXMgbGVzcyB0aGFuIGJ1ZmZlclNpemUuXG4gICAgICpcbiAgICAgKi9cbiAgICBzaGlmdEJ1ZmZlckZyb21VbnJlc29sdmVkRGF0YUFycmF5KGJ1ZmZlcikge1xuICAgICAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICAgICAgYnVmZmVyID0gbmV3IFBvb2xlZEJ1ZmZlcih0aGlzLmJ1ZmZlclNpemUsIHRoaXMudW5yZXNvbHZlZERhdGFBcnJheSwgdGhpcy51bnJlc29sdmVkTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlci5maWxsKHRoaXMudW5yZXNvbHZlZERhdGFBcnJheSwgdGhpcy51bnJlc29sdmVkTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVucmVzb2x2ZWRMZW5ndGggLT0gYnVmZmVyLnNpemU7XG4gICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgZGF0YSBpbiB1bnJlc29sdmVkRGF0YUFycmF5LiBGb3IgZXZlcnkgYnVmZmVyIHdpdGggc2l6ZSBpbiBibG9ja1NpemVcbiAgICAgKiBzaGlmdGVkLCBpdCB3aWxsIHRyeSB0byBnZXQgKG9yIGFsbG9jYXRlIGEgYnVmZmVyKSBmcm9tIGluY29taW5nLCBhbmQgZmlsbCBpdCxcbiAgICAgKiB0aGVuIHB1c2ggaXQgaW50byBvdXRnb2luZyB0byBiZSBoYW5kbGVkIGJ5IG91dGdvaW5nIGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBSZXR1cm4gZmFsc2Ugd2hlbiBhdmFpbGFibGUgYnVmZmVycyBpbiBpbmNvbWluZyBhcmUgbm90IGVub3VnaCwgZWxzZSB0cnVlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgUmV0dXJuIGZhbHNlIHdoZW4gYnVmZmVycyBpbiBpbmNvbWluZyBhcmUgbm90IGVub3VnaCwgZWxzZSB0cnVlLlxuICAgICAqL1xuICAgIHJlc29sdmVEYXRhKCkge1xuICAgICAgICB3aGlsZSAodGhpcy51bnJlc29sdmVkTGVuZ3RoID49IHRoaXMuYnVmZmVyU2l6ZSkge1xuICAgICAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgICAgIGlmICh0aGlzLmluY29taW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSB0aGlzLmluY29taW5nLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGlmdEJ1ZmZlckZyb21VbnJlc29sdmVkRGF0YUFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1CdWZmZXJzIDwgdGhpcy5tYXhCdWZmZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuc2hpZnRCdWZmZXJGcm9tVW5yZXNvbHZlZERhdGFBcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bUJ1ZmZlcnMrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vIGF2YWlsYWJsZSBidWZmZXIsIHdhaXQgZm9yIGJ1ZmZlciByZXR1cm5lZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vdXRnb2luZy5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJPdXRnb2luZ0hhbmRsZXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyeSB0byB0cmlnZ2VyIGEgb3V0Z29pbmcgaGFuZGxlciBmb3IgZXZlcnkgYnVmZmVyIGluIG91dGdvaW5nLiBTdG9wIHdoZW5cbiAgICAgKiBjb25jdXJyZW5jeSByZWFjaGVzLlxuICAgICAqL1xuICAgIGFzeW5jIHRyaWdnZXJPdXRnb2luZ0hhbmRsZXJzKCkge1xuICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAodGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzID49IHRoaXMuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSB0aGlzLm91dGdvaW5nLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyT3V0Z29pbmdIYW5kbGVyKGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGJ1ZmZlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgYSBvdXRnb2luZyBoYW5kbGVyIGZvciBhIGJ1ZmZlciBzaGlmdGVkIGZyb20gb3V0Z29pbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVmZmVyIC1cbiAgICAgKi9cbiAgICBhc3luYyB0cmlnZ2VyT3V0Z29pbmdIYW5kbGVyKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWZmZXJMZW5ndGggPSBidWZmZXIuc2l6ZTtcbiAgICAgICAgdGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzKys7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub3V0Z29pbmdIYW5kbGVyKCgpID0+IGJ1ZmZlci5nZXRSZWFkYWJsZVN0cmVhbSgpLCBidWZmZXJMZW5ndGgsIHRoaXMub2Zmc2V0IC0gYnVmZmVyTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzLS07XG4gICAgICAgIHRoaXMucmV1c2VCdWZmZXIoYnVmZmVyKTtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJjaGVja0VuZFwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGJ1ZmZlciB1c2VkIGJ5IG91dGdvaW5nIGhhbmRsZXIgaW50byBpbmNvbWluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBidWZmZXIgLVxuICAgICAqL1xuICAgIHJldXNlQnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICB0aGlzLmluY29taW5nLnB1c2goYnVmZmVyKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRXJyb3IgJiYgdGhpcy5yZXNvbHZlRGF0YSgpICYmICF0aGlzLmlzU3RyZWFtRW5kKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWRhYmxlLnJlc3VtZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmVhZHMgYSByZWFkYWJsZSBzdHJlYW0gaW50byBidWZmZXIuIEZpbGwgdGhlIGJ1ZmZlciBmcm9tIG9mZnNldCB0byBlbmQuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAtIEEgTm9kZS5qcyBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSBidWZmZXIgLSBCdWZmZXIgdG8gYmUgZmlsbGVkLCBsZW5ndGggbXVzdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb2Zmc2V0XG4gKiBAcGFyYW0gb2Zmc2V0IC0gRnJvbSB3aGljaCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyIHRvIGJlIGZpbGxlZCwgaW5jbHVzaXZlXG4gKiBAcGFyYW0gZW5kIC0gVG8gd2hpY2ggcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciB0byBiZSBmaWxsZWQsIGV4Y2x1c2l2ZVxuICogQHBhcmFtIGVuY29kaW5nIC0gRW5jb2Rpbmcgb2YgdGhlIFJlYWRhYmxlIHN0cmVhbVxuICovXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub0J1ZmZlcihzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKSB7XG4gICAgbGV0IHBvcyA9IDA7IC8vIFBvc2l0aW9uIGluIHN0cmVhbVxuICAgIGNvbnN0IGNvdW50ID0gZW5kIC0gb2Zmc2V0OyAvLyBUb3RhbCBhbW91bnQgb2YgZGF0YSBuZWVkZWQgaW4gc3RyZWFtXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgVGhlIG9wZXJhdGlvbiBjYW5ub3QgYmUgY29tcGxldGVkIGluIHRpbWVvdXQuYCkpLCBSRVFVRVNUX1RJTUVPVVQpO1xuICAgICAgICBzdHJlYW0ub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocG9zID49IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY2h1bmsgPSBzdHJlYW0ucmVhZCgpO1xuICAgICAgICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIb3cgbXVjaCBkYXRhIG5lZWRlZCBpbiB0aGlzIGNodW5rXG4gICAgICAgICAgICBjb25zdCBjaHVua0xlbmd0aCA9IHBvcyArIGNodW5rLmxlbmd0aCA+IGNvdW50ID8gY291bnQgLSBwb3MgOiBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICBidWZmZXIuZmlsbChjaHVuay5zbGljZSgwLCBjaHVua0xlbmd0aCksIG9mZnNldCArIHBvcywgb2Zmc2V0ICsgcG9zICsgY2h1bmtMZW5ndGgpO1xuICAgICAgICAgICAgcG9zICs9IGNodW5rTGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIGlmIChwb3MgPCBjb3VudCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0cmVhbSBkcmFpbnMgYmVmb3JlIGdldHRpbmcgZW5vdWdoIGRhdGEgbmVlZGVkLiBEYXRhIHJlYWQ6ICR7cG9zfSwgZGF0YSBuZWVkOiAke2NvdW50fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHJlamVjdChtc2cpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8qKlxuICogUmVhZHMgYSByZWFkYWJsZSBzdHJlYW0gaW50byBidWZmZXIgZW50aXJlbHkuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAtIEEgTm9kZS5qcyBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSBidWZmZXIgLSBCdWZmZXIgdG8gYmUgZmlsbGVkLCBsZW5ndGggbXVzdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb2Zmc2V0XG4gKiBAcGFyYW0gZW5jb2RpbmcgLSBFbmNvZGluZyBvZiB0aGUgUmVhZGFibGUgc3RyZWFtXG4gKiBAcmV0dXJucyB3aXRoIHRoZSBjb3VudCBvZiBieXRlcyByZWFkLlxuICogQHRocm93cyBgUmFuZ2VFcnJvcmAgSWYgYnVmZmVyIHNpemUgaXMgbm90IGJpZyBlbm91Z2guXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyMihzdHJlYW0sIGJ1ZmZlciwgZW5jb2RpbmcpIHtcbiAgICBsZXQgcG9zID0gMDsgLy8gUG9zaXRpb24gaW4gc3RyZWFtXG4gICAgY29uc3QgYnVmZmVyU2l6ZSA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc3RyZWFtLm9uKFwicmVhZGFibGVcIiwgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNodW5rID0gc3RyZWFtLnJlYWQoKTtcbiAgICAgICAgICAgIGlmICghY2h1bmspIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvcyArIGNodW5rLmxlbmd0aCA+IGJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBTdHJlYW0gZXhjZWVkcyBidWZmZXIgc2l6ZS4gQnVmZmVyIHNpemU6ICR7YnVmZmVyU2l6ZX1gKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyLmZpbGwoY2h1bmssIHBvcywgcG9zICsgY2h1bmsubGVuZ3RoKTtcbiAgICAgICAgICAgIHBvcyArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShwb3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIFdyaXRlcyB0aGUgY29udGVudCBvZiBhIHJlYWRzdHJlYW0gdG8gYSBsb2NhbCBmaWxlLiBSZXR1cm5zIGEgUHJvbWlzZSB3aGljaCBpcyBjb21wbGV0ZWQgYWZ0ZXIgdGhlIGZpbGUgaGFuZGxlIGlzIGNsb3NlZC5cbiAqXG4gKiBAcGFyYW0gcnMgLSBUaGUgcmVhZCBzdHJlYW0uXG4gKiBAcGFyYW0gZmlsZSAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZFN0cmVhbVRvTG9jYWxGaWxlKHJzLCBmaWxlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgd3MgPSBmc19fbmFtZXNwYWNlLmNyZWF0ZVdyaXRlU3RyZWFtKGZpbGUpO1xuICAgICAgICBycy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICAgICAgd3Mub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdzLm9uKFwiY2xvc2VcIiwgcmVzb2x2ZSk7XG4gICAgICAgIHJzLnBpcGUod3MpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogUHJvbWlzaWZpZWQgdmVyc2lvbiBvZiBmcy5zdGF0KCkuXG4gKi9cbmNvbnN0IGZzU3RhdCA9IHV0aWxfX25hbWVzcGFjZS5wcm9taXNpZnkoZnNfX25hbWVzcGFjZS5zdGF0KTtcbmNvbnN0IGZzQ3JlYXRlUmVhZFN0cmVhbSA9IGZzX19uYW1lc3BhY2UuY3JlYXRlUmVhZFN0cmVhbTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgQmxvYkNsaWVudCByZXByZXNlbnRzIGEgVVJMIHRvIGFuIEF6dXJlIFN0b3JhZ2UgYmxvYjsgdGhlIGJsb2IgbWF5IGJlIGEgYmxvY2sgYmxvYixcbiAqIGFwcGVuZCBibG9iLCBvciBwYWdlIGJsb2IuXG4gKi9cbmNsYXNzIEJsb2JDbGllbnQgZXh0ZW5kcyBTdG9yYWdlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYmxvYi5cbiAgICAgKi9cbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBzdG9yYWdlIGNvbnRhaW5lciB0aGUgYmxvYiBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAgICovXG4gICAgZ2V0IGNvbnRhaW5lck5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJOYW1lO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBibG9iTmFtZU9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgaWYgKGJsb2JOYW1lT3JPcHRpb25zICYmIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgYmxvYk5hbWVPck9wdGlvbnMgJiZcbiAgICAgICAgICAgIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKGNvbm5lY3Rpb25TdHJpbmc6IHN0cmluZywgY29udGFpbmVyTmFtZTogc3RyaW5nLCBibG9iTmFtZTogc3RyaW5nLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2JOYW1lID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHModXJsT3JDb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm94eU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJveHlPcHRpb25zID0gY29yZVJlc3RQaXBlbGluZS5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyhleHRyYWN0ZWRDcmVkcy5wcm94eVVyaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShzaGFyZWRLZXlDcmVkZW50aWFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gTm9kZS5qcyBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIlNBU0Nvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHVybCA9XG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzO1xuICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0aW5nIG5vbi1lbXB0eSBzdHJpbmdzIGZvciBjb250YWluZXJOYW1lIGFuZCBibG9iTmFtZSBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICAoeyBibG9iTmFtZTogdGhpcy5fbmFtZSwgY29udGFpbmVyTmFtZTogdGhpcy5fY29udGFpbmVyTmFtZSB9ID1cbiAgICAgICAgICAgIHRoaXMuZ2V0QmxvYkFuZENvbnRhaW5lck5hbWVzRnJvbVVybCgpKTtcbiAgICAgICAgdGhpcy5ibG9iQ29udGV4dCA9IHRoaXMuc3RvcmFnZUNsaWVudENvbnRleHQuYmxvYjtcbiAgICAgICAgdGhpcy5fc25hcHNob3QgPSBnZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9UKTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbklkID0gZ2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5WRVJTSU9OSUQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcFxuICAgICAqL1xuICAgIHdpdGhTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5TTkFQU0hPVCwgc25hcHNob3QubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogc25hcHNob3QpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBCbG9iQ2xpZW50IG9iamVjdCBwb2ludGluZyB0byBhIHZlcnNpb24gb2YgdGhpcyBibG9iLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgdmVyc2lvbklkIGFuZCByZXR1cm4gYSBDbGllbnQgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2ZXJzaW9uSWQgLSBUaGUgdmVyc2lvbklkLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IHBvaW50aW5nIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgYmxvYi5cbiAgICAgKi9cbiAgICB3aXRoVmVyc2lvbih2ZXJzaW9uSWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iQ2xpZW50KHNldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuVkVSU0lPTklELCB2ZXJzaW9uSWQubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdmVyc2lvbklkKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBBcHBlbmRCbG9iQ2xpZW50IG9iamVjdC5cbiAgICAgKlxuICAgICAqL1xuICAgIGdldEFwcGVuZEJsb2JDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXBwZW5kQmxvYkNsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBCbG9ja0Jsb2JDbGllbnQgb2JqZWN0LlxuICAgICAqXG4gICAgICovXG4gICAgZ2V0QmxvY2tCbG9iQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrQmxvYkNsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBQYWdlQmxvYkNsaWVudCBvYmplY3QuXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRQYWdlQmxvYkNsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQmxvYkNsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIG9yIGRvd25sb2FkcyBhIGJsb2IgZnJvbSB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgaXRzIG1ldGFkYXRhIGFuZCBwcm9wZXJ0aWVzLlxuICAgICAqIFlvdSBjYW4gYWxzbyBjYWxsIEdldCBCbG9iIHRvIHJlYWQgYSBzbmFwc2hvdC5cbiAgICAgKlxuICAgICAqICogSW4gTm9kZS5qcywgZGF0YSByZXR1cm5zIGluIGEgUmVhZGFibGUgc3RyZWFtIHJlYWRhYmxlU3RyZWFtQm9keVxuICAgICAqICogSW4gYnJvd3NlcnMsIGRhdGEgcmV0dXJucyBpbiBhIHByb21pc2UgYmxvYkJvZHlcbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gRnJvbSB3aGljaCBwb3NpdGlvbiBvZiB0aGUgYmxvYiB0byBkb3dubG9hZCwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDBcbiAgICAgKiBAcGFyYW0gY291bnQgLSBIb3cgbXVjaCBkYXRhIHRvIGJlIGRvd25sb2FkZWQsIGdyZWF0ZXIgdGhhbiAwLiBXaWxsIGRvd25sb2FkIHRvIHRoZSBlbmQgd2hlbiB1bmRlZmluZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBEb3dubG9hZCBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2UgKE5vZGUuanMpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBEb3dubG9hZCBhbmQgY29udmVydCBhIGJsb2IgdG8gYSBzdHJpbmdcbiAgICAgKiBjb25zdCBkb3dubG9hZEJsb2NrQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvYkNsaWVudC5kb3dubG9hZCgpO1xuICAgICAqIGNvbnN0IGRvd25sb2FkZWQgPSBhd2FpdCBzdHJlYW1Ub0J1ZmZlcihkb3dubG9hZEJsb2NrQmxvYlJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSk7XG4gICAgICogY29uc29sZS5sb2coXCJEb3dubG9hZGVkIGJsb2IgY29udGVudDpcIiwgZG93bmxvYWRlZC50b1N0cmluZygpKTtcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgICogcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgKiBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgKiByZWFkYWJsZVN0cmVhbS5vbihcImRhdGFcIiwgKGRhdGEpID0+IHtcbiAgICAgKiBjaHVua3MucHVzaChkYXRhIGluc3RhbmNlb2YgQnVmZmVyID8gZGF0YSA6IEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgKiB9KTtcbiAgICAgKiByZWFkYWJsZVN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICogcmVzb2x2ZShCdWZmZXIuY29uY2F0KGNodW5rcykpO1xuICAgICAqIH0pO1xuICAgICAqIHJlYWRhYmxlU3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgKiB9KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlIChicm93c2VyKTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gRG93bmxvYWQgYW5kIGNvbnZlcnQgYSBibG9iIHRvIGEgc3RyaW5nXG4gICAgICogY29uc3QgZG93bmxvYWRCbG9ja0Jsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2JDbGllbnQuZG93bmxvYWQoKTtcbiAgICAgKiBjb25zdCBkb3dubG9hZGVkID0gYXdhaXQgYmxvYlRvU3RyaW5nKGF3YWl0IGRvd25sb2FkQmxvY2tCbG9iUmVzcG9uc2UuYmxvYkJvZHkpO1xuICAgICAqIGNvbnNvbGUubG9nKFxuICAgICAqICAgXCJEb3dubG9hZGVkIGJsb2IgY29udGVudFwiLFxuICAgICAqICAgZG93bmxvYWRlZFxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBibG9iVG9TdHJpbmcoYmxvYjogQmxvYik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICogICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgKiAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgKiAgICAgZmlsZVJlYWRlci5vbmxvYWRlbmQgPSAoZXY6IGFueSkgPT4ge1xuICAgICAqICAgICAgIHJlc29sdmUoZXYudGFyZ2V0IS5yZXN1bHQpO1xuICAgICAqICAgICB9O1xuICAgICAqICAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICogICAgIGZpbGVSZWFkZXIucmVhZEFzVGV4dChibG9iKTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBkb3dubG9hZChvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kb3dubG9hZFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZG93bmxvYWQoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGNvcmVVdGlsLmlzTm9kZSA/IHVuZGVmaW5lZCA6IG9wdGlvbnMub25Qcm9ncmVzcywgLy8gZm9yIE5vZGUuanMsIHByb2dyZXNzIGlzIHJlcG9ydGVkIGJ5IFJldHJpYWJsZVJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByYW5nZTogb2Zmc2V0ID09PSAwICYmICFjb3VudCA/IHVuZGVmaW5lZCA6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHJhbmdlR2V0Q29udGVudE1ENTogb3B0aW9ucy5yYW5nZUdldENvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50Q1JDNjQ6IG9wdGlvbnMucmFuZ2VHZXRDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgc25hcHNob3Q6IG9wdGlvbnMuc25hcHNob3QsXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlLCBvYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQ6IHJlcy5vYmplY3RSZXBsaWNhdGlvblBvbGljeUlkLCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM6IHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQocmVzLm9iamVjdFJlcGxpY2F0aW9uUnVsZXMpIH0pO1xuICAgICAgICAgICAgLy8gUmV0dXJuIGJyb3dzZXIgcmVzcG9uc2UgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIGlmICghY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRSZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXZSBzdXBwb3J0IHJldHJ5aW5nIHdoZW4gZG93bmxvYWQgc3RyZWFtIHVuZXhwZWN0ZWQgZW5kcyBpbiBOb2RlLmpzIHJ1bnRpbWVcbiAgICAgICAgICAgIC8vIEZvbGxvd2luZyBjb2RlIHNob3VsZG4ndCBiZSBidW5kbGVkIGludG8gYnJvd3NlciBidWlsZCwgaG93ZXZlciBzb21lXG4gICAgICAgICAgICAvLyBidW5kbGVycyBtYXkgdHJ5IHRvIGJ1bmRsZSBmb2xsb3dpbmcgY29kZSBhbmQgXCJGaWxlUmVhZFJlc3BvbnNlLnRzXCIuXG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIFwiRmlsZURvd25sb2FkUmVzcG9uc2UuYnJvd3Nlci50c1wiIHdpbGwgYmUgdXNlZCBhcyBhIHNoaW0gb2YgXCJGaWxlRG93bmxvYWRSZXNwb25zZS50c1wiXG4gICAgICAgICAgICAvLyBUaGUgY29uZmlnIGlzIGluIHBhY2thZ2UuanNvbiBcImJyb3dzZXJcIiBmaWVsZFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWZhdWx0IHZhbHVlIG9yIG1ha2UgaXQgYSByZXF1aXJlZCBwYXJhbWV0ZXI/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzID0gREVGQVVMVF9NQVhfRE9XTkxPQURfUkVUUllfUkVRVUVTVFM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLmNvbnRlbnRMZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBGaWxlIGRvd25sb2FkIHJlc3BvbnNlIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBjb250ZW50IGxlbmd0aCBoZWFkZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzLmV0YWcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmlsZSBkb3dubG9hZCByZXNwb25zZSBkb2Vzbid0IGNvbnRhaW4gdmFsaWQgZXRhZyBoZWFkZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYkRvd25sb2FkUmVzcG9uc2Uod3JhcHBlZFJlcywgYXN5bmMgKHN0YXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWREb3dubG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmTWF0Y2g6IG9wdGlvbnMuY29uZGl0aW9ucy5pZk1hdGNoIHx8IHJlcy5ldGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWZNb2RpZmllZFNpbmNlOiBvcHRpb25zLmNvbmRpdGlvbnMuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWZOb25lTWF0Y2g6IG9wdGlvbnMuY29uZGl0aW9ucy5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmVW5tb2RpZmllZFNpbmNlOiBvcHRpb25zLmNvbmRpdGlvbnMuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBvZmZzZXQgKyByZXMuY29udGVudExlbmd0aCAtIHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlR2V0Q29udGVudE1ENTogb3B0aW9ucy5yYW5nZUdldENvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlR2V0Q29udGVudENSQzY0OiBvcHRpb25zLnJhbmdlR2V0Q29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdDogb3B0aW9ucy5zbmFwc2hvdCxcbiAgICAgICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gRGVidWcgcHVycG9zZSBvbmx5XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgLy8gICBgUmVhZCBmcm9tIGludGVybmFsIHN0cmVhbSwgcmFuZ2U6ICR7XG4gICAgICAgICAgICAgICAgLy8gICAgIHVwZGF0ZWRPcHRpb25zLnJhbmdlXG4gICAgICAgICAgICAgICAgLy8gICB9LCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KHVwZGF0ZWRPcHRpb25zKX1gXG4gICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZG93bmxvYWQoT2JqZWN0LmFzc2lnbih7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0sIHVwZGF0ZWREb3dubG9hZE9wdGlvbnMpKSkucmVhZGFibGVTdHJlYW1Cb2R5O1xuICAgICAgICAgICAgfSwgb2Zmc2V0LCByZXMuY29udGVudExlbmd0aCwge1xuICAgICAgICAgICAgICAgIG1heFJldHJ5UmVxdWVzdHM6IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyxcbiAgICAgICAgICAgICAgICBvblByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgQXp1cmUgYmxvYiByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCBleGlzdHM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGggY2FyZSBzaW5jZSBhbiBleGlzdGluZyBibG9iIG1pZ2h0IGJlIGRlbGV0ZWQgYnkgb3RoZXIgY2xpZW50cyBvclxuICAgICAqIGFwcGxpY2F0aW9ucy4gVmljZSB2ZXJzYSBuZXcgYmxvYnMgbWlnaHQgYmUgYWRkZWQgYnkgb3RoZXIgY2xpZW50cyBvciBhcHBsaWNhdGlvbnMgYWZ0ZXIgdGhpc1xuICAgICAqIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9ucyB0byBFeGlzdHMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyh7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5OiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gY2hlY2tpbmcgYmxvYiBleGlzdGVuY2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlLnN0YXR1c0NvZGUgPT09IDQwOSAmJlxuICAgICAgICAgICAgICAgICAgICAoZS5kZXRhaWxzLmVycm9yQ29kZSA9PT0gQmxvYlVzZXNDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25Nc2cgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGV0YWlscy5lcnJvckNvZGUgPT09IEJsb2JEb2VzTm90VXNlQ3VzdG9tZXJTcGVjaWZpZWRFbmNyeXB0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBjaGVja2luZyBibG9iIGV4aXN0ZW5jZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSwgc3RhbmRhcmQgSFRUUCBwcm9wZXJ0aWVzLCBhbmQgc3lzdGVtIHByb3BlcnRpZXNcbiAgICAgKiBmb3IgdGhlIGJsb2IuIEl0IGRvZXMgbm90IHJldHVybiB0aGUgY29udGVudCBvZiB0aGUgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvYi1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBXQVJOSU5HOiBUaGUgYG1ldGFkYXRhYCBvYmplY3QgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlIHdpbGwgaGF2ZSBpdHMga2V5cyBpbiBsb3dlcmNhc2UsIGV2ZW4gaWZcbiAgICAgKiB0aGV5IG9yaWdpbmFsbHkgY29udGFpbmVkIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgbWV0YWRhdGEga2V5cyByZXR1cm5lZCBieVxuICAgICAqIHRoZSBtZXRob2RzIG9mIHtAbGluayBDb250YWluZXJDbGllbnR9IHRoYXQgbGlzdCBibG9icyB1c2luZyB0aGUgYGluY2x1ZGVNZXRhZGF0YWAgb3B0aW9uLCB3aGljaFxuICAgICAqIHdpbGwgcmV0YWluIHRoZWlyIG9yaWdpbmFsIGNhc2luZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UHJvcGVydGllcyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1nZXRQcm9wZXJ0aWVzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlLCBvYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQ6IHJlcy5vYmplY3RSZXBsaWNhdGlvblBvbGljeUlkLCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM6IHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQocmVzLm9iamVjdFJlcGxpY2F0aW9uUnVsZXMpIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFya3MgdGhlIHNwZWNpZmllZCBibG9iIG9yIHNuYXBzaG90IGZvciBkZWxldGlvbi4gVGhlIGJsb2IgaXMgbGF0ZXIgZGVsZXRlZFxuICAgICAqIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uIE5vdGUgdGhhdCBpbiBvcmRlciB0byBkZWxldGUgYSBibG9iLCB5b3UgbXVzdCBkZWxldGVcbiAgICAgKiBhbGwgb2YgaXRzIHNuYXBzaG90cy4gWW91IGNhbiBkZWxldGUgYm90aCBhdCB0aGUgc2FtZSB0aW1lIHdpdGggdGhlIERlbGV0ZVxuICAgICAqIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZGVsZXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZGVsZXRlKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBkZWxldGVTbmFwc2hvdHM6IG9wdGlvbnMuZGVsZXRlU25hcHNob3RzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIGJsb2Igb3Igc25hcHNob3QgZm9yIGRlbGV0aW9uIGlmIGl0IGV4aXN0cy4gVGhlIGJsb2IgaXMgbGF0ZXIgZGVsZXRlZFxuICAgICAqIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uIE5vdGUgdGhhdCBpbiBvcmRlciB0byBkZWxldGUgYSBibG9iLCB5b3UgbXVzdCBkZWxldGVcbiAgICAgKiBhbGwgb2YgaXRzIHNuYXBzaG90cy4gWW91IGNhbiBkZWxldGUgYm90aCBhdCB0aGUgc2FtZSB0aW1lIHdpdGggdGhlIERlbGV0ZVxuICAgICAqIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUlmRXhpc3RzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZGVsZXRlSWZFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmRlbGV0ZSh1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IHRydWUgfSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gZS5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3JDb2RlKSA9PT0gXCJCbG9iTm90Rm91bmRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzdG9yZXMgdGhlIGNvbnRlbnRzIGFuZCBtZXRhZGF0YSBvZiBzb2Z0IGRlbGV0ZWQgYmxvYiBhbmQgYW55IGFzc29jaWF0ZWRcbiAgICAgKiBzb2Z0IGRlbGV0ZWQgc25hcHNob3RzLiBVbmRlbGV0ZSBCbG9iIGlzIHN1cHBvcnRlZCBvbmx5IG9uIHZlcnNpb24gMjAxNy0wNy0yOVxuICAgICAqIG9yIGxhdGVyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3VuZGVsZXRlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIFVuZGVsZXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1bmRlbGV0ZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXVuZGVsZXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQudW5kZWxldGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgc3lzdGVtIHByb3BlcnRpZXMgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBJZiBubyB2YWx1ZSBwcm92aWRlZCwgb3Igbm8gdmFsdWUgcHJvdmlkZWQgZm9yIHRoZSBzcGVjaWZpZWQgYmxvYiBIVFRQIGhlYWRlcnMsXG4gICAgICogdGhlc2UgYmxvYiBIVFRQIGhlYWRlcnMgd2l0aG91dCBhIHZhbHVlIHdpbGwgYmUgY2xlYXJlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9zZXQtYmxvYi1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYkhUVFBIZWFkZXJzIC0gSWYgbm8gdmFsdWUgcHJvdmlkZWQsIG9yIG5vIHZhbHVlIHByb3ZpZGVkIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNwZWNpZmllZCBibG9iIEhUVFAgaGVhZGVycywgdGhlc2UgYmxvYiBIVFRQXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzIHdpdGhvdXQgYSB2YWx1ZSB3aWxsIGJlIGNsZWFyZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGNvbW1vbiBoZWFkZXIgdG8gc2V0IGlzIGBibG9iQ29udGVudFR5cGVgXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGluZyB0aGUgYnJvd3NlciB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHlcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGZpbGUgdHlwZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBTZXQgSFRUUCBIZWFkZXJzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRIVFRQSGVhZGVycyhibG9iSFRUUEhlYWRlcnMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldEhUVFBIZWFkZXJzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0SHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JIdHRwSGVhZGVyczogYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICAvLyBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIC8vIENQSyBpcyBub3QgaW5jbHVkZWQgaW4gU3dhZ2dlciwgc2hvdWxkIGNoYW5nZSB0aGlzIGJhY2sgd2hlbiB0aGlzIGlzc3VlIGlzIGZpeGVkIGluIFN3YWdnZXIuXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB1c2VyLWRlZmluZWQgbWV0YWRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgYmxvYiBhcyBvbmUgb3IgbW9yZSBuYW1lLXZhbHVlIHBhaXJzLlxuICAgICAqXG4gICAgICogSWYgbm8gb3B0aW9uIHByb3ZpZGVkLCBvciBubyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBwYXJhbWV0ZXIsIHRoZSBibG9iXG4gICAgICogbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWV0YWRhdGEgLSBSZXBsYWNlIGV4aXN0aW5nIG1ldGFkYXRhIHdpdGggdGhpcyB2YWx1ZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyB2YWx1ZSBwcm92aWRlZCB0aGUgZXhpc3RpbmcgbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBTZXQgTWV0YWRhdGEgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldE1ldGFkYXRhKG1ldGFkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRNZXRhZGF0YVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnNldE1ldGFkYXRhKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0YWdzIG9uIHRoZSB1bmRlcmx5aW5nIGJsb2IuXG4gICAgICogQSBibG9iIGNhbiBoYXZlIHVwIHRvIDEwIHRhZ3MuIFRhZyBrZXlzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjggY2hhcmFjdGVycy4gIFRhZyB2YWx1ZXMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NiBjaGFyYWN0ZXJzLlxuICAgICAqIFZhbGlkIHRhZyBrZXkgYW5kIHZhbHVlIGNoYXJhY3RlcnMgaW5jbHVkZSBsb3dlciBhbmQgdXBwZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMgKDAtOSksXG4gICAgICogc3BhY2UgKCcgJyksIHBsdXMgKCcrJyksIG1pbnVzICgnLScpLCBwZXJpb2QgKCcuJyksIGZvd2FyZCBzbGFzaCAoJy8nKSwgY29sb24gKCc6JyksIGVxdWFscyAoJz0nKSwgYW5kIHVuZGVyc2NvcmUgKCdfJykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFncyAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHNldFRhZ3ModGFncywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRUYWdzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0VGFncyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB0YWdzOiB0b0Jsb2JUYWdzKHRhZ3MpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRUYWdzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZ2V0VGFnc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5nZXRUYWdzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlc3BvbnNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIHRhZ3M6IHRvVGFncyh7IGJsb2JUYWdTZXQ6IHJlc3BvbnNlLmJsb2JUYWdTZXQgfSkgfHwge30gfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEge0BsaW5rIEJsb2JMZWFzZUNsaWVudH0gdGhhdCBtYW5hZ2VzIGxlYXNlcyBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wb3NlTGVhc2VJZCAtIEluaXRpYWwgcHJvcG9zZWQgbGVhc2UgSWQuXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkxlYXNlQ2xpZW50IG9iamVjdCBmb3IgbWFuYWdpbmcgbGVhc2VzIG9uIHRoZSBibG9iLlxuICAgICAqL1xuICAgIGdldEJsb2JMZWFzZUNsaWVudChwcm9wb3NlTGVhc2VJZCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JMZWFzZUNsaWVudCh0aGlzLCBwcm9wb3NlTGVhc2VJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSByZWFkLW9ubHkgc25hcHNob3Qgb2YgYSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NuYXBzaG90LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byB0aGUgQmxvYiBDcmVhdGUgU25hcHNob3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZVNuYXBzaG90KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWNyZWF0ZVNuYXBzaG90XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuY3JlYXRlU25hcHNob3Qoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXNseSBjb3BpZXMgYSBibG9iIHRvIGEgZGVzdGluYXRpb24gd2l0aGluIHRoZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGxvbmcgcnVubmluZyBvcGVyYXRpb24gcG9sbGVyIHRoYXQgYWxsb3dzIHlvdSB0byB3YWl0XG4gICAgICogaW5kZWZpbml0ZWx5IHVudGlsIHRoZSBjb3B5IGlzIGNvbXBsZXRlZC5cbiAgICAgKiBZb3UgY2FuIGFsc28gY2FuY2VsIGEgY29weSBiZWZvcmUgaXQgaXMgY29tcGxldGVkIGJ5IGNhbGxpbmcgYGNhbmNlbE9wZXJhdGlvbmAgb24gdGhlIHBvbGxlci5cbiAgICAgKiBOb3RlIHRoYXQgdGhlIG9uUHJvZ3Jlc3MgY2FsbGJhY2sgd2lsbCBub3QgYmUgaW52b2tlZCBpZiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcyBpbiB0aGUgZmlyc3RcbiAgICAgKiByZXF1ZXN0LCBhbmQgYXR0ZW1wdGluZyB0byBjYW5jZWwgYSBjb21wbGV0ZWQgY29weSB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciBiZWluZyB0aHJvd24uXG4gICAgICpcbiAgICAgKiBJbiB2ZXJzaW9uIDIwMTItMDItMTIgYW5kIGxhdGVyLCB0aGUgc291cmNlIGZvciBhIENvcHkgQmxvYiBvcGVyYXRpb24gY2FuIGJlXG4gICAgICogYSBjb21taXR0ZWQgYmxvYiBpbiBhbnkgQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEJlZ2lubmluZyB3aXRoIHZlcnNpb24gMjAxNS0wMi0yMSwgdGhlIHNvdXJjZSBmb3IgYSBDb3B5IEJsb2Igb3BlcmF0aW9uIGNhbiBiZVxuICAgICAqIGFuIEF6dXJlIGZpbGUgaW4gYW55IEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBPbmx5IHN0b3JhZ2UgYWNjb3VudHMgY3JlYXRlZCBvbiBvciBhZnRlciBKdW5lIDd0aCwgMjAxMiBhbGxvdyB0aGUgQ29weSBCbG9iXG4gICAgICogb3BlcmF0aW9uIHRvIGNvcHkgZnJvbSBhbm90aGVyIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb3B5LWJsb2JcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYXV0b21hdGljIHBvbGxpbmc6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvcHlQb2xsZXIgPSBhd2FpdCBibG9iQ2xpZW50LmJlZ2luQ29weUZyb21VUkwoJ3VybCcpO1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvcHlQb2xsZXIucG9sbFVudGlsRG9uZSgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBtYW51YWwgcG9sbGluZzpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJyk7XG4gICAgICogd2hpbGUgKCFwb2xsZXIuaXNEb25lKCkpIHtcbiAgICAgKiAgICBhd2FpdCBwb2xsZXIucG9sbCgpO1xuICAgICAqIH1cbiAgICAgKiBjb25zdCByZXN1bHQgPSBjb3B5UG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwcm9ncmVzcyB1cGRhdGVzOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnLCB7XG4gICAgICogICBvblByb2dyZXNzKHN0YXRlKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBQcm9ncmVzczogJHtzdGF0ZS5jb3B5UHJvZ3Jlc3N9YCk7XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY29weVBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGEgY2hhbmdpbmcgcG9sbGluZyBpbnRlcnZhbCAoZGVmYXVsdCAxNSBzZWNvbmRzKTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJywge1xuICAgICAqICAgaW50ZXJ2YWxJbk1zOiAxMDAwIC8vIHBvbGwgYmxvYiBldmVyeSAxIHNlY29uZCBmb3IgY29weSBwcm9ncmVzc1xuICAgICAqIH0pO1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvcHlQb2xsZXIucG9sbFVudGlsRG9uZSgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBjb3B5IGNhbmNlbGxhdGlvbjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJyk7XG4gICAgICogLy8gY2FuY2VsIG9wZXJhdGlvbiBhZnRlciBzdGFydGluZyBpdC5cbiAgICAgKiB0cnkge1xuICAgICAqICAgYXdhaXQgY29weVBvbGxlci5jYW5jZWxPcGVyYXRpb24oKTtcbiAgICAgKiAgIC8vIGNhbGxzIHRvIGdldCB0aGUgcmVzdWx0IG5vdyB0aHJvdyBQb2xsZXJDYW5jZWxsZWRFcnJvclxuICAgICAqICAgYXdhaXQgY29weVBvbGxlci5nZXRSZXN1bHQoKTtcbiAgICAgKiB9IGNhdGNoIChlcnIpIHtcbiAgICAgKiAgIGlmIChlcnIubmFtZSA9PT0gJ1BvbGxlckNhbmNlbGxlZEVycm9yJykge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnVGhlIGNvcHkgd2FzIGNhbmNlbGxlZC4nKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSAtIHVybCB0byB0aGUgc291cmNlIEF6dXJlIEJsb2IvRmlsZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgU3RhcnQgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYmVnaW5Db3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0ge1xuICAgICAgICAgICAgYWJvcnRDb3B5RnJvbVVSTDogKC4uLmFyZ3MpID0+IHRoaXMuYWJvcnRDb3B5RnJvbVVSTCguLi5hcmdzKSxcbiAgICAgICAgICAgIGdldFByb3BlcnRpZXM6ICguLi5hcmdzKSA9PiB0aGlzLmdldFByb3BlcnRpZXMoLi4uYXJncyksXG4gICAgICAgICAgICBzdGFydENvcHlGcm9tVVJMOiAoLi4uYXJncykgPT4gdGhpcy5zdGFydENvcHlGcm9tVVJMKC4uLmFyZ3MpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwb2xsZXIgPSBuZXcgQmxvYkJlZ2luQ29weUZyb21VcmxQb2xsZXIoe1xuICAgICAgICAgICAgYmxvYkNsaWVudDogY2xpZW50LFxuICAgICAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgICAgIGludGVydmFsSW5Nczogb3B0aW9ucy5pbnRlcnZhbEluTXMsXG4gICAgICAgICAgICBvblByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZXN1bWVGcm9tOiBvcHRpb25zLnJlc3VtZUZyb20sXG4gICAgICAgICAgICBzdGFydENvcHlGcm9tVVJMT3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRyaWdnZXIgdGhlIHN0YXJ0Q29weUZyb21VUkwgY2FsbCBieSBjYWxsaW5nIHBvbGwuXG4gICAgICAgIC8vIEFueSBlcnJvcnMgZnJvbSB0aGlzIG1ldGhvZCBzaG91bGQgYmUgc3VyZmFjZWQgdG8gdGhlIHVzZXIuXG4gICAgICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG4gICAgICAgIHJldHVybiBwb2xsZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFib3J0cyBhIHBlbmRpbmcgYXN5bmNocm9ub3VzIENvcHkgQmxvYiBvcGVyYXRpb24sIGFuZCBsZWF2ZXMgYSBkZXN0aW5hdGlvbiBibG9iIHdpdGggemVyb1xuICAgICAqIGxlbmd0aCBhbmQgZnVsbCBtZXRhZGF0YS4gVmVyc2lvbiAyMDEyLTAyLTEyIGFuZCBuZXdlci5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hYm9ydC1jb3B5LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5SWQgLSBJZCBvZiB0aGUgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIHRoZSBCbG9iIEFib3J0IENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGFib3J0Q29weUZyb21VUkwoY29weUlkLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWFib3J0Q29weUZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5hYm9ydENvcHlGcm9tVVJMKGNvcHlJZCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBzeW5jaHJvbm91cyBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbiBjb3BpZXMgYSBibG9iIG9yIGFuIGludGVybmV0IHJlc291cmNlIHRvIGEgbmV3IGJsb2IuIEl0IHdpbGwgbm90XG4gICAgICogcmV0dXJuIGEgcmVzcG9uc2UgdW50aWwgdGhlIGNvcHkgaXMgY29tcGxldGUuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29weS1ibG9iLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSAtIFRoZSBzb3VyY2UgVVJMIHRvIGNvcHkgZnJvbSwgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUoU0FTKSBtYXliZSBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHN5bmNDb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zeW5jQ29weUZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5jb3B5RnJvbVVSTChjb3B5U291cmNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiAoX2IgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2U6IChfYyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IChfZCA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogKF9lID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50TUQ1OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb246IGh0dHBBdXRob3JpemF0aW9uVG9TdHJpbmcob3B0aW9ucy5zb3VyY2VBdXRob3JpemF0aW9uKSxcbiAgICAgICAgICAgICAgICB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9mID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfZyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2cucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZVRhZ3M6IG9wdGlvbnMuY29weVNvdXJjZVRhZ3MsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGllciBvbiBhIGJsb2IuIFRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZCBvbiBhIHBhZ2UgYmxvYiBpbiBhIHByZW1pdW1cbiAgICAgKiBzdG9yYWdlIGFjY291bnQgYW5kIG9uIGEgYmxvY2sgYmxvYiBpbiBhIGJsb2Igc3RvcmFnZSBhY2NvdW50IChsb2NhbGx5IHJlZHVuZGFudFxuICAgICAqIHN0b3JhZ2Ugb25seSkuIEEgcHJlbWl1bSBwYWdlIGJsb2IncyB0aWVyIGRldGVybWluZXMgdGhlIGFsbG93ZWQgc2l6ZSwgSU9QUyxcbiAgICAgKiBhbmQgYmFuZHdpZHRoIG9mIHRoZSBibG9iLiBBIGJsb2NrIGJsb2IncyB0aWVyIGRldGVybWluZXMgSG90L0Nvb2wvQXJjaGl2ZVxuICAgICAqIHN0b3JhZ2UgdHlwZS4gVGhpcyBvcGVyYXRpb24gZG9lcyBub3QgdXBkYXRlIHRoZSBibG9iJ3MgRVRhZy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9zZXQtYmxvYi10aWVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGllciAtIFRoZSB0aWVyIHRvIGJlIHNldCBvbiB0aGUgYmxvYi4gVmFsaWQgdmFsdWVzIGFyZSBIb3QsIENvb2wsIG9yIEFyY2hpdmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIHRoZSBCbG9iIFNldCBUaWVyIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRBY2Nlc3NUaWVyKHRpZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc2V0QWNjZXNzVGllclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnNldFRpZXIodG9BY2Nlc3NUaWVyKHRpZXIpLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5OiBvcHRpb25zLnJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGRvd25sb2FkVG9CdWZmZXIocGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00ID0ge30pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBwYXJhbTQ7XG4gICAgICAgIGlmIChwYXJhbTEgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHBhcmFtMTtcbiAgICAgICAgICAgIG9mZnNldCA9IHBhcmFtMiB8fCAwO1xuICAgICAgICAgICAgY291bnQgPSB0eXBlb2YgcGFyYW0zID09PSBcIm51bWJlclwiID8gcGFyYW0zIDogMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9mZnNldCA9IHR5cGVvZiBwYXJhbTEgPT09IFwibnVtYmVyXCIgPyBwYXJhbTEgOiAwO1xuICAgICAgICAgICAgY291bnQgPSB0eXBlb2YgcGFyYW0yID09PSBcIm51bWJlclwiID8gcGFyYW0yIDogMDtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBwYXJhbTMgfHwge307XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJsb2NrU2l6ZSA9IChfYSA9IG9wdGlvbnMuYmxvY2tTaXplKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICBpZiAoYmxvY2tTaXplIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJibG9ja1NpemUgb3B0aW9uIG11c3QgYmUgPj0gMFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2tTaXplID09PSAwKSB7XG4gICAgICAgICAgICBibG9ja1NpemUgPSBERUZBVUxUX0JMT0JfRE9XTkxPQURfQkxPQ0tfQllURVM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IG9wdGlvbiBtdXN0IGJlID49IDBcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50ICYmIGNvdW50IDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiY291bnQgb3B0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kb3dubG9hZFRvQnVmZmVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgLy8gQ3VzdG9tZXIgZG9lc24ndCBzcGVjaWZ5IGxlbmd0aCwgZ2V0IGl0XG4gICAgICAgICAgICBpZiAoIWNvdW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpO1xuICAgICAgICAgICAgICAgIGNvdW50ID0gcmVzcG9uc2UuY29udGVudExlbmd0aCAtIG9mZnNldDtcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBvZmZzZXQgJHtvZmZzZXR9IHNob3VsZG4ndCBiZSBsYXJnZXIgdGhhbiBibG9iIHNpemUgJHtyZXNwb25zZS5jb250ZW50TGVuZ3RofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFsbG9jYXRlIHRoZSBidWZmZXIgb2Ygc2l6ZSA9IGNvdW50IGlmIHRoZSBidWZmZXIgaXMgbm90IHByb3ZpZGVkXG4gICAgICAgICAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhjb3VudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIG9mIHNpemU6ICR7Y291bnR9KGluIGJ5dGVzKS4gUGxlYXNlIHRyeSBwYXNzaW5nIHlvdXIgb3duIGJ1ZmZlciB0byB0aGUgXCJkb3dubG9hZFRvQnVmZmVyXCIgbWV0aG9kIG9yIHRyeSB1c2luZyBvdGhlciBtZXRob2RzIGxpa2UgXCJkb3dubG9hZFwiIG9yIFwiZG93bmxvYWRUb0ZpbGVcIi5cXHQgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIGJ1ZmZlcidzIHNpemUgc2hvdWxkIGJlIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0IGNvdW50IG9mIGJ5dGVzOiAke2NvdW50fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHRyYW5zZmVyUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgY29uc3QgYmF0Y2ggPSBuZXcgQmF0Y2gob3B0aW9ucy5jb25jdXJyZW5jeSk7XG4gICAgICAgICAgICBmb3IgKGxldCBvZmYgPSBvZmZzZXQ7IG9mZiA8IG9mZnNldCArIGNvdW50OyBvZmYgPSBvZmYgKyBibG9ja1NpemUpIHtcbiAgICAgICAgICAgICAgICBiYXRjaC5hZGRPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeGNsdXNpdmUgY2h1bmsgZW5kIHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaHVua0VuZCA9IG9mZnNldCArIGNvdW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAob2ZmICsgYmxvY2tTaXplIDwgY2h1bmtFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rRW5kID0gb2ZmICsgYmxvY2tTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5kb3dubG9hZChvZmYsIGNodW5rRW5kIC0gb2ZmLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFJldHJ5UmVxdWVzdHM6IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0c1BlckJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJQcm92aWRlZEtleTogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gcmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5O1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzdHJlYW1Ub0J1ZmZlcihzdHJlYW0sIGJ1ZmZlciwgb2ZmIC0gb2Zmc2V0LCBjaHVua0VuZCAtIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcm9ncmVzcyBhZnRlciBibG9jayBpcyBkb3dubG9hZGVkLCBpbiBjYXNlIG9mIGJsb2NrIHRyeWluZ1xuICAgICAgICAgICAgICAgICAgICAvLyBDb3VsZCBwcm92aWRlIGZpbmVyIGdyYWluZWQgcHJvZ3Jlc3MgdXBkYXRpbmcgaW5zaWRlIEhUVFAgcmVxdWVzdHMsXG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaWYgY29udmVuaWVuY2UgbGF5ZXIgZG93bmxvYWQgdHJ5IGlzIGVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJQcm9ncmVzcyArPSBjaHVua0VuZCAtIG9mZjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHsgbG9hZGVkQnl0ZXM6IHRyYW5zZmVyUHJvZ3Jlc3MgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGJhdGNoLmRvKCk7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogRG93bmxvYWRzIGFuIEF6dXJlIEJsb2IgdG8gYSBsb2NhbCBmaWxlLlxuICAgICAqIEZhaWxzIGlmIHRoZSB0aGUgZ2l2ZW4gZmlsZSBwYXRoIGFscmVhZHkgZXhpdHMuXG4gICAgICogT2Zmc2V0IGFuZCBjb3VudCBhcmUgb3B0aW9uYWwsIHBhc3MgMCBhbmQgdW5kZWZpbmVkIHJlc3BlY3RpdmVseSB0byBkb3dubG9hZCB0aGUgZW50aXJlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZVBhdGggLVxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBGcm9tIHdoaWNoIHBvc2l0aW9uIG9mIHRoZSBibG9jayBibG9iIHRvIGRvd25sb2FkLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIEhvdyBtdWNoIGRhdGEgdG8gYmUgZG93bmxvYWRlZC4gV2lsbCBkb3dubG9hZCB0byB0aGUgZW5kIHdoZW4gcGFzc2luZyB1bmRlZmluZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIEJsb2IgZG93bmxvYWQgb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzcG9uc2UgZGF0YSBmb3IgYmxvYiBkb3dubG9hZCBvcGVyYXRpb24sXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHdpdGggcmVhZGFibGVTdHJlYW1Cb2R5IHNldCB0byB1bmRlZmluZWQgc2luY2UgaXRzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCBpcyBhbHJlYWR5IHJlYWQgYW5kIHdyaXR0ZW4gaW50byBhIGxvY2FsIGZpbGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgc3BlY2lmaWVkIHBhdGguXG4gICAgICovXG4gICAgYXN5bmMgZG93bmxvYWRUb0ZpbGUoZmlsZVBhdGgsIG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRvd25sb2FkVG9GaWxlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvd25sb2FkKG9mZnNldCwgY291bnQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZWFkU3RyZWFtVG9Mb2NhbEZpbGUocmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgc3RyZWFtIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlIHNvIHNldHRpbmcgaXQgdG8gdW5kZWZpbmVkLlxuICAgICAgICAgICAgcmVzcG9uc2UuYmxvYkRvd25sb2FkU3RyZWFtID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0QmxvYkFuZENvbnRhaW5lck5hbWVzRnJvbVVybCgpIHtcbiAgICAgICAgbGV0IGNvbnRhaW5lck5hbWU7XG4gICAgICAgIGxldCBibG9iTmFtZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vICBVUkwgbWF5IGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nXG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9ibG9iP3Nhc1N0cmluZ1wiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvYmxvYlwiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvYmxvYi9hLnR4dD9zYXNTdHJpbmdcIjtcbiAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL2Jsb2IvYS50eHRcIjtcbiAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLCBFbmRwb2ludHMgLSBgaHR0cDovLzEyNy4wLjAuMToxMDAwMC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYmBcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodGhpcy51cmwpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZFVybC5ob3N0LnNwbGl0KFwiLlwiKVsxXSA9PT0gXCJibG9iXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb250YWluZXJuYW1lL2Jsb2JcIi5cbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoQ29tcG9uZW50cyA9IHBhcnNlZFVybC5wYXRobmFtZS5tYXRjaChcIi8oW14vXSopKC8oLiopKT9cIik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhdGhDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGJsb2JOYW1lID0gcGF0aENvbXBvbmVudHNbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0lwRW5kcG9pbnRTdHlsZShwYXJzZWRVcmwpKSB7XG4gICAgICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMuLi4gRXhhbXBsZSAtIGh0dHA6Ly8xOTIuMC4wLjEwOjEwMDAxL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZS9ibG9iXG4gICAgICAgICAgICAgICAgLy8gU2luZ2xlIHdvcmQgZG9tYWluIHdpdGhvdXQgYSBbZG90XSBpbiB0aGUgZW5kcG9pbnQuLi4gRXhhbXBsZSAtIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhDb21wb25lbnRzID0gcGFyc2VkVXJsLnBhdGhuYW1lLm1hdGNoKFwiLyhbXi9dKikvKFteL10qKSgvKC4qKSk/XCIpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXRoQ29tcG9uZW50c1syXTtcbiAgICAgICAgICAgICAgICBibG9iTmFtZSA9IHBhdGhDb21wb25lbnRzWzRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gXCJodHRwczovL2N1c3RvbWRvbWFpbi5jb20vY29udGFpbmVybmFtZS9ibG9iXCIuXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvY29udGFpbmVybmFtZS9ibG9iXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aENvbXBvbmVudHMgPSBwYXJzZWRVcmwucGF0aG5hbWUubWF0Y2goXCIvKFteL10qKSgvKC4qKSk/XCIpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXRoQ29tcG9uZW50c1sxXTtcbiAgICAgICAgICAgICAgICBibG9iTmFtZSA9IHBhdGhDb21wb25lbnRzWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZGVjb2RlIHRoZSBlbmNvZGVkIGJsb2JOYW1lLCBjb250YWluZXJOYW1lIC0gdG8gZ2V0IGFsbCB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGVtXG4gICAgICAgICAgICBjb250YWluZXJOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgYmxvYk5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpO1xuICAgICAgICAgICAgLy8gQXp1cmUgU3RvcmFnZSBTZXJ2ZXIgd2lsbCByZXBsYWNlIFwiXFxcIiB3aXRoIFwiL1wiIGluIHRoZSBibG9iIG5hbWVzXG4gICAgICAgICAgICAvLyAgIGRvaW5nIHRoZSBzYW1lIGluIHRoZSBTREsgc2lkZSBzbyB0aGF0IHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSB0byByZXBsYWNlIFwiXFxcIiBpbnN0YW5jZXMgaW4gdGhlIGJsb2JOYW1lXG4gICAgICAgICAgICBibG9iTmFtZSA9IGJsb2JOYW1lLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXJOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgY29udGFpbmVyTmFtZSBpcyBpbnZhbGlkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGJsb2JOYW1lLCBjb250YWluZXJOYW1lIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZXh0cmFjdCBibG9iTmFtZSBhbmQgY29udGFpbmVyTmFtZSB3aXRoIHByb3ZpZGVkIGluZm9ybWF0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXNseSBjb3BpZXMgYSBibG9iIHRvIGEgZGVzdGluYXRpb24gd2l0aGluIHRoZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogSW4gdmVyc2lvbiAyMDEyLTAyLTEyIGFuZCBsYXRlciwgdGhlIHNvdXJjZSBmb3IgYSBDb3B5IEJsb2Igb3BlcmF0aW9uIGNhbiBiZVxuICAgICAqIGEgY29tbWl0dGVkIGJsb2IgaW4gYW55IEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBCZWdpbm5pbmcgd2l0aCB2ZXJzaW9uIDIwMTUtMDItMjEsIHRoZSBzb3VyY2UgZm9yIGEgQ29weSBCbG9iIG9wZXJhdGlvbiBjYW4gYmVcbiAgICAgKiBhbiBBenVyZSBmaWxlIGluIGFueSBBenVyZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogT25seSBzdG9yYWdlIGFjY291bnRzIGNyZWF0ZWQgb24gb3IgYWZ0ZXIgSnVuZSA3dGgsIDIwMTIgYWxsb3cgdGhlIENvcHkgQmxvYlxuICAgICAqIG9wZXJhdGlvbiB0byBjb3B5IGZyb20gYW5vdGhlciBzdG9yYWdlIGFjY291bnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29weS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSAtIHVybCB0byB0aGUgc291cmNlIEF6dXJlIEJsb2IvRmlsZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgU3RhcnQgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXN0YXJ0Q29weUZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnN0YXJ0Q29weUZyb21VUkwoY29weVNvdXJjZSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNYXRjaDogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucy5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2U6IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucy5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZUYWdzOiBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMudGFnQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5OiBvcHRpb25zLnJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgc2VhbEJsb2I6IG9wdGlvbnMuc2VhbEJsb2IsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIEJsb2JDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBhIEJsb2IgU2VydmljZSBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZSAoU0FTKSBVUkkgYmFzZWQgb24gdGhlIGNsaWVudCBwcm9wZXJ0aWVzXG4gICAgICogYW5kIHBhcmFtZXRlcnMgcGFzc2VkIGluLiBUaGUgU0FTIGlzIHNpZ25lZCBieSB0aGUgc2hhcmVkIGtleSBjcmVkZW50aWFsIG9mIHRoZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYS1zZXJ2aWNlLXNhc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAqIEByZXR1cm5zIFRoZSBTQVMgVVJJIGNvbnNpc3Rpbmcgb2YgdGhlIFVSSSB0byB0aGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbGllbnQsIGZvbGxvd2VkIGJ5IHRoZSBnZW5lcmF0ZWQgU0FTIHRva2VuLlxuICAgICAqL1xuICAgIGdlbmVyYXRlU2FzVXJsKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzYXMgPSBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMoT2JqZWN0LmFzc2lnbih7IGNvbnRhaW5lck5hbWU6IHRoaXMuX2NvbnRhaW5lck5hbWUsIGJsb2JOYW1lOiB0aGlzLl9uYW1lLCBzbmFwc2hvdFRpbWU6IHRoaXMuX3NuYXBzaG90LCB2ZXJzaW9uSWQ6IHRoaXMuX3ZlcnNpb25JZCB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS50b1N0cmluZygpO1xuICAgICAgICAgICAgcmVzb2x2ZShhcHBlbmRUb1VSTFF1ZXJ5KHRoaXMudXJsLCBzYXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBCbG9iQ2xpZW50IGNvbnN0cnVjdGVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWwuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZXMgc3RyaW5nIHRvIHNpZ24gZm9yIGEgQmxvYiBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSSBiYXNlZCBvblxuICAgICAqIHRoZSBjbGllbnQgcHJvcGVydGllcyBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIGdlbmVyYXRlU2FzU3RyaW5nVG9TaWduKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKE9iamVjdC5hc3NpZ24oeyBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lLCBibG9iTmFtZTogdGhpcy5fbmFtZSwgc25hcHNob3RUaW1lOiB0aGlzLl9zbmFwc2hvdCwgdmVyc2lvbklkOiB0aGlzLl92ZXJzaW9uSWQgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkuc3RyaW5nVG9TaWduO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGUgdGhlIGltbXV0YWJsaWxpdHkgcG9saWN5IG9uIHRoZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIGRlbGV0ZSBpbW11dGFiaWxpdHkgcG9saWN5IG9uIHRoZSBibG9iLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeSh7XG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gc2V0IGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgYXN5bmMgc2V0SW1tdXRhYmlsaXR5UG9saWN5KGltbXV0YWJpbGl0eVBvbGljeSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRJbW11dGFiaWxpdHlQb2xpY3lcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRJbW11dGFiaWxpdHlQb2xpY3koe1xuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogaW1tdXRhYmlsaXR5UG9saWN5LmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogaW1tdXRhYmlsaXR5UG9saWN5LnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGxlZ2FsIGhvbGQgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gc2V0IGxlZ2FsIGhvbGQgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgYXN5bmMgc2V0TGVnYWxIb2xkKGxlZ2FsSG9sZEVuYWJsZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc2V0TGVnYWxIb2xkXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0TGVnYWxIb2xkKGxlZ2FsSG9sZEVuYWJsZWQsIHtcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIHJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBmb3IgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gaXMgYXZhaWxhYmxlIG9uIHNlcnZpY2UgdmVyc2lvbnMgYmVnaW5uaW5nXG4gICAgICogd2l0aCB2ZXJzaW9uIDIwMTgtMDMtMjguXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWFjY291bnQtaW5mb3JtYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY2NvdW50SW5mbyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWdldEFjY291bnRJbmZvXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZ2V0QWNjb3VudEluZm8oe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBBcHBlbmRCbG9iQ2xpZW50IGRlZmluZXMgYSBzZXQgb2Ygb3BlcmF0aW9ucyBhcHBsaWNhYmxlIHRvIGFwcGVuZCBibG9icy5cbiAqL1xuY2xhc3MgQXBwZW5kQmxvYkNsaWVudCBleHRlbmRzIEJsb2JDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVybE9yQ29ubmVjdGlvblN0cmluZywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIGJsb2JOYW1lT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIC8vIEluIFR5cGVTY3JpcHQgd2UgY2Fubm90IHNpbXBseSBwYXNzIGFsbCBwYXJhbWV0ZXJzIHRvIHN1cGVyKCkgbGlrZSBiZWxvdyBzbyBoYXZlIHRvIGR1cGxpY2F0ZSB0aGUgY29kZSBpbnN0ZWFkLlxuICAgICAgICAvLyAgIHN1cGVyKHMsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lT3JPcHRpb25zLCBibG9iTmFtZU9yT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucykgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBibG9iTmFtZU9yT3B0aW9ucyAmJlxuICAgICAgICAgICAgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgYmxvYk5hbWUgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyh1cmxPckNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkS2V5Q3JlZGVudGlhbCA9IG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChleHRyYWN0ZWRDcmVkcy5hY2NvdW50TmFtZSwgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgYW5kIGJsb2JOYW1lIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kQmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmFwcGVuZEJsb2I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQXBwZW5kQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlXG4gICAgICogc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBQcm92aWRlIFwiXCIgd2lsbCByZW1vdmUgdGhlIHNuYXBzaG90IGFuZCByZXR1cm4gYSBDbGllbnQgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbmFwc2hvdCAtIFRoZSBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgQSBuZXcgQXBwZW5kQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICovXG4gICAgd2l0aFNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBuZXcgQXBwZW5kQmxvYkNsaWVudChzZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9ULCBzbmFwc2hvdC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBzbmFwc2hvdCksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgMC1sZW5ndGggYXBwZW5kIGJsb2IuIENhbGwgQXBwZW5kQmxvY2sgdG8gYXBwZW5kIGRhdGEgdG8gYW4gYXBwZW5kIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQXBwZW5kIEJsb2NrIENyZWF0ZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGFwcGVuZEJsb2JDbGllbnQgPSBjb250YWluZXJDbGllbnQuZ2V0QXBwZW5kQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGF3YWl0IGFwcGVuZEJsb2JDbGllbnQuY3JlYXRlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJBcHBlbmRCbG9iQ2xpZW50LWNyZWF0ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuY3JlYXRlKDAsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IChfYiA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiAoX2MgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgbGVnYWxIb2xkOiBvcHRpb25zLmxlZ2FsSG9sZCxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSAwLWxlbmd0aCBhcHBlbmQgYmxvYi4gQ2FsbCBBcHBlbmRCbG9jayB0byBhcHBlbmQgZGF0YSB0byBhbiBhcHBlbmQgYmxvYi5cbiAgICAgKiBJZiB0aGUgYmxvYiB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZSBjb250ZW50IG9mIHRoZSBleGlzdGluZyBibG9iIHdpbGwgcmVtYWluIHVuY2hhbmdlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZUlmTm90RXhpc3RzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBjb25kaXRpb25zID0geyBpZk5vbmVNYXRjaDogRVRhZ0FueSB9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtY3JlYXRlSWZOb3RFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNyZWF0ZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVwZGF0ZWRPcHRpb25zKSwgeyBjb25kaXRpb25zIH0pKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkJsb2JBbHJlYWR5RXhpc3RzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlYWxzIHRoZSBhcHBlbmQgYmxvYiwgbWFraW5nIGl0IHJlYWQgb25seS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBzZWFsKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQXBwZW5kQmxvYkNsaWVudC1zZWFsXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuc2VhbCh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYXBwZW5kUG9zaXRpb25BY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbW1pdHMgYSBuZXcgYmxvY2sgb2YgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBhcHBlbmQgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hcHBlbmQtYmxvY2tcbiAgICAgKlxuICAgICAqIEBwYXJhbSBib2R5IC0gRGF0YSB0byBiZSBhcHBlbmRlZC5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIExlbmd0aCBvZiB0aGUgYm9keSBpbiBieXRlcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRlbnQgPSBcIkhlbGxvIFdvcmxkIVwiO1xuICAgICAqXG4gICAgICogLy8gQ3JlYXRlIGEgbmV3IGFwcGVuZCBibG9iIGFuZCBhcHBlbmQgZGF0YSB0byB0aGUgYmxvYi5cbiAgICAgKiBjb25zdCBuZXdBcHBlbmRCbG9iQ2xpZW50ID0gY29udGFpbmVyQ2xpZW50LmdldEFwcGVuZEJsb2JDbGllbnQoXCI8YmxvYiBuYW1lPlwiKTtcbiAgICAgKiBhd2FpdCBuZXdBcHBlbmRCbG9iQ2xpZW50LmNyZWF0ZSgpO1xuICAgICAqIGF3YWl0IG5ld0FwcGVuZEJsb2JDbGllbnQuYXBwZW5kQmxvY2soY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqXG4gICAgICogLy8gQXBwZW5kIGRhdGEgdG8gYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2IuXG4gICAgICogY29uc3QgZXhpc3RpbmdBcHBlbmRCbG9iQ2xpZW50ID0gY29udGFpbmVyQ2xpZW50LmdldEFwcGVuZEJsb2JDbGllbnQoXCI8YmxvYiBuYW1lPlwiKTtcbiAgICAgKiBhd2FpdCBleGlzdGluZ0FwcGVuZEJsb2JDbGllbnQuYXBwZW5kQmxvY2soY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGFwcGVuZEJsb2NrKGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJBcHBlbmRCbG9iQ2xpZW50LWFwcGVuZEJsb2NrXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuYXBwZW5kQmxvY2soY29udGVudExlbmd0aCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGFwcGVuZFBvc2l0aW9uQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENTogb3B0aW9ucy50cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gY29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2JcbiAgICAgKiB3aGVyZSB0aGUgY29udGVudHMgYXJlIHJlYWQgZnJvbSBhIHNvdXJjZSB1cmwuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXBwZW5kLWJsb2NrLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC1cbiAgICAgKiAgICAgICAgICAgICAgICAgVGhlIHVybCB0byB0aGUgYmxvYiB0aGF0IHdpbGwgYmUgdGhlIHNvdXJjZSBvZiB0aGUgY29weS4gQSBzb3VyY2UgYmxvYiBpbiB0aGUgc2FtZSBzdG9yYWdlIGFjY291bnQgY2FuXG4gICAgICogICAgICAgICAgICAgICAgIGJlIGF1dGhlbnRpY2F0ZWQgdmlhIFNoYXJlZCBLZXkuIEhvd2V2ZXIsIGlmIHRoZSBzb3VyY2UgaXMgYSBibG9iIGluIGFub3RoZXIgYWNjb3VudCwgdGhlIHNvdXJjZSBibG9iXG4gICAgICogICAgICAgICAgICAgICAgIG11c3QgZWl0aGVyIGJlIHB1YmxpYyBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuIElmIHRoZSBzb3VyY2UgYmxvYiBpc1xuICAgICAqICAgICAgICAgICAgICAgICBwdWJsaWMsIG5vIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gc291cmNlT2Zmc2V0IC0gT2Zmc2V0IGluIHNvdXJjZSB0byBiZSBhcHBlbmRlZFxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBiZSBhcHBlbmRlZCBhcyBhIGJsb2NrXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGFwcGVuZEJsb2NrRnJvbVVSTChzb3VyY2VVUkwsIHNvdXJjZU9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtYXBwZW5kQmxvY2tGcm9tVVJMXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmFwcGVuZEJsb2JDb250ZXh0LmFwcGVuZEJsb2NrRnJvbVVybChzb3VyY2VVUkwsIDAsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldDogc291cmNlT2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50TUQ1OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudENyYzY0OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgc291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTWF0Y2g6IChfYiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogKF9jID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogKF9kID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlOiAoX2UgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uOiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKG9wdGlvbnMuc291cmNlQXV0aG9yaXphdGlvbiksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vKipcbiAqIEJsb2NrQmxvYkNsaWVudCBkZWZpbmVzIGEgc2V0IG9mIG9wZXJhdGlvbnMgYXBwbGljYWJsZSB0byBibG9jayBibG9icy5cbiAqL1xuY2xhc3MgQmxvY2tCbG9iQ2xpZW50IGV4dGVuZHMgQmxvYkNsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXJsT3JDb25uZWN0aW9uU3RyaW5nLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgYmxvYk5hbWVPck9wdGlvbnMsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gSW4gVHlwZVNjcmlwdCB3ZSBjYW5ub3Qgc2ltcGx5IHBhc3MgYWxsIHBhcmFtZXRlcnMgdG8gc3VwZXIoKSBsaWtlIGJlbG93IHNvIGhhdmUgdG8gZHVwbGljYXRlIHRoZSBjb2RlIGluc3RlYWQuXG4gICAgICAgIC8vICAgc3VwZXIocywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWVPck9wdGlvbnMsIGJsb2JOYW1lT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKGlzUGlwZWxpbmVMaWtlKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBwaXBlbGluZTogUGlwZWxpbmUpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgb3B0aW9ucyA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICAvLyBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB1bmRlZmluZWQuIFVzZSBhbm9ueW1vdXMgY3JlZGVudGlhbC5cbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIGlmIChibG9iTmFtZU9yT3B0aW9ucyAmJiB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGJsb2JOYW1lT3JPcHRpb25zICYmXG4gICAgICAgICAgICB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBibG9iTmFtZSA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudFNhcztcbiAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBzdHJpbmcgbXVzdCBiZSBlaXRoZXIgYW4gQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBvciBhIFNBUyBjb25uZWN0aW9uIHN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGluZyBub24tZW1wdHkgc3RyaW5ncyBmb3IgY29udGFpbmVyTmFtZSBhbmQgYmxvYk5hbWUgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5ibG9ja0Jsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5ibG9ja0Jsb2I7XG4gICAgICAgIHRoaXMuX2Jsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5ibG9iO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2NrQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlXG4gICAgICogc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBQcm92aWRlIFwiXCIgd2lsbCByZW1vdmUgdGhlIHNuYXBzaG90IGFuZCByZXR1cm4gYSBVUkwgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbmFwc2hvdCAtIFRoZSBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvY2tCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKi9cbiAgICB3aXRoU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0Jsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5TTkFQU0hPVCwgc25hcHNob3QubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogc25hcHNob3QpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogUXVpY2sgcXVlcnkgZm9yIGEgSlNPTiBvciBDU1YgZm9ybWF0dGVkIGJsb2IuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlIChOb2RlLmpzKTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gUXVlcnkgYW5kIGNvbnZlcnQgYSBibG9iIHRvIGEgc3RyaW5nXG4gICAgICogY29uc3QgcXVlcnlCbG9ja0Jsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC5xdWVyeShcInNlbGVjdCAqIGZyb20gQmxvYlN0b3JhZ2VcIik7XG4gICAgICogY29uc3QgZG93bmxvYWRlZCA9IChhd2FpdCBzdHJlYW1Ub0J1ZmZlcihxdWVyeUJsb2NrQmxvYlJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSkpLnRvU3RyaW5nKCk7XG4gICAgICogY29uc29sZS5sb2coXCJRdWVyeSBibG9iIGNvbnRlbnQ6XCIsIGRvd25sb2FkZWQpO1xuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIocmVhZGFibGVTdHJlYW0pIHtcbiAgICAgKiAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICogICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAqICAgICByZWFkYWJsZVN0cmVhbS5vbihcImRhdGFcIiwgKGRhdGEpID0+IHtcbiAgICAgKiAgICAgICBjaHVua3MucHVzaChkYXRhIGluc3RhbmNlb2YgQnVmZmVyID8gZGF0YSA6IEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgKiAgICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgICogICAgIH0pO1xuICAgICAqICAgICByZWFkYWJsZVN0cmVhbS5vbihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICogICB9KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcXVlcnkgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBxdWVyeShxdWVyeSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgaWYgKCFjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgb3BlcmF0aW9uIGN1cnJlbnRseSBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1xdWVyeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fYmxvYkNvbnRleHQucXVlcnkoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHF1ZXJ5UmVxdWVzdDoge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVR5cGU6IFwiU1FMXCIsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBpbnB1dFNlcmlhbGl6YXRpb246IHRvUXVlcnlTZXJpYWxpemF0aW9uKG9wdGlvbnMuaW5wdXRUZXh0Q29uZmlndXJhdGlvbiksXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFNlcmlhbGl6YXRpb246IHRvUXVlcnlTZXJpYWxpemF0aW9uKG9wdGlvbnMub3V0cHV0VGV4dENvbmZpZ3VyYXRpb24pLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJsb2JRdWVyeVJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgb25Qcm9ncmVzczogb3B0aW9ucy5vblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIG9uRXJyb3I6IG9wdGlvbnMub25FcnJvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBibG9jayBibG9iLCBvciB1cGRhdGVzIHRoZSBjb250ZW50IG9mIGFuIGV4aXN0aW5nIGJsb2NrIGJsb2IuXG4gICAgICogVXBkYXRpbmcgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYiBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBtZXRhZGF0YSBvbiB0aGUgYmxvYi5cbiAgICAgKiBQYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHRoZSBjb250ZW50IG9mIHRoZSBleGlzdGluZyBibG9iIGlzXG4gICAgICogb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV3IGNvbnRlbnQuIFRvIHBlcmZvcm0gYSBwYXJ0aWFsIHVwZGF0ZSBvZiBhIGJsb2NrIGJsb2IncyxcbiAgICAgKiB1c2Uge0BsaW5rIHN0YWdlQmxvY2t9IGFuZCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBub24tcGFyYWxsZWwgdXBsb2FkaW5nIG1ldGhvZCwgcGxlYXNlIHVzZSB7QGxpbmsgdXBsb2FkRmlsZX0sXG4gICAgICoge0BsaW5rIHVwbG9hZFN0cmVhbX0gb3Ige0BsaW5rIHVwbG9hZEJyb3dzZXJEYXRhfSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgICogd2l0aCBjb25jdXJyZW5jeSB1cGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHkgLSBCbG9iLCBzdHJpbmcsIEFycmF5QnVmZmVyLCBBcnJheUJ1ZmZlclZpZXcgb3IgYSBmdW5jdGlvblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHJldHVybnMgYSBuZXcgUmVhZGFibGUgc3RyZWFtIHdob3NlIG9mZnNldCBpcyBmcm9tIGRhdGEgc291cmNlIGJlZ2lubmluZy5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIExlbmd0aCBvZiBib2R5IGluIGJ5dGVzLiBVc2UgQnVmZmVyLmJ5dGVMZW5ndGgoKSB0byBjYWxjdWxhdGUgYm9keSBsZW5ndGggZm9yIGFcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgaW5jbHVkaW5nIG5vbiBub24tQmFzZTY0L0hleC1lbmNvZGVkIGNoYXJhY3RlcnMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBCbG9jayBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2NrIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRlbnQgPSBcIkhlbGxvIHdvcmxkIVwiO1xuICAgICAqIGNvbnN0IHVwbG9hZEJsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC51cGxvYWQoY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZChib2R5LCBjb250ZW50TGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC51cGxvYWQoY29udGVudExlbmd0aCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JIdHRwSGVhZGVyczogb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBCbG9jayBCbG9iIHdoZXJlIHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiBhcmUgcmVhZCBmcm9tIGEgZ2l2ZW4gVVJMLlxuICAgICAqIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBiZWdpbm5pbmcgd2l0aCB0aGUgMjAyMC0wNC0wOCB2ZXJzaW9uLiBQYXJ0aWFsIHVwZGF0ZXNcbiAgICAgKiBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIFB1dCBCbG9iIGZyb20gVVJMOyB0aGUgY29udGVudCBvZiBhbiBleGlzdGluZyBibG9iIGlzIG92ZXJ3cml0dGVuIHdpdGhcbiAgICAgKiB0aGUgY29udGVudCBvZiB0aGUgbmV3IGJsb2IuICBUbyBwZXJmb3JtIHBhcnRpYWwgdXBkYXRlcyB0byBhIGJsb2NrIGJsb2LigJlzIGNvbnRlbnRzIHVzaW5nIGFcbiAgICAgKiBzb3VyY2UgVVJMLCB1c2Uge0BsaW5rIHN0YWdlQmxvY2tGcm9tVVJMfSBhbmQge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC0gU3BlY2lmaWVzIHRoZSBVUkwgb2YgdGhlIGJsb2IuIFRoZSB2YWx1ZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIGEgVVJMIG9mIHVwIHRvIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgYmxvYi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgVVJMLWVuY29kZWQgYXMgaXQgd291bGQgYXBwZWFyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc291cmNlIGJsb2IgaXMgcHVibGljLCBubyBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHNvdXJjZSBvYmplY3QgVVJMczpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL215YmxvYlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iP3NuYXBzaG90PTxEYXRlVGltZT5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYXN5bmMgc3luY1VwbG9hZEZyb21VUkwoc291cmNlVVJMLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXN5bmNVcGxvYWRGcm9tVVJMXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnB1dEJsb2JGcm9tVXJsKDAsIHNvdXJjZVVSTCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLCBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucywgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLCBzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNYXRjaDogKF9iID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlOiAoX2MgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoOiAoX2QgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2U6IChfZSA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlRhZ3M6IChfZiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLnRhZ0NvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgfSwgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLCB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSwgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSwgY29weVNvdXJjZVRhZ3M6IG9wdGlvbnMuY29weVNvdXJjZVRhZ3MsIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyB9KSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBsb2FkcyB0aGUgc3BlY2lmaWVkIGJsb2NrIHRvIHRoZSBibG9jayBibG9iJ3MgXCJzdGFnaW5nIGFyZWFcIiB0byBiZSBsYXRlclxuICAgICAqIGNvbW1pdHRlZCBieSBhIGNhbGwgdG8gY29tbWl0QmxvY2tMaXN0LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9ja1xuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2NrSWQgLSBBIDY0LWJ5dGUgdmFsdWUgdGhhdCBpcyBiYXNlNjQtZW5jb2RlZFxuICAgICAqIEBwYXJhbSBib2R5IC0gRGF0YSB0byB1cGxvYWQgdG8gdGhlIHN0YWdpbmcgYXJlYS5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIE51bWJlciBvZiBieXRlcyB0byB1cGxvYWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvY2sgQmxvYiBTdGFnZSBCbG9jayBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhZ2VCbG9jayhibG9ja0lkLCBib2R5LCBjb250ZW50TGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1zdGFnZUJsb2NrXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC5zdGFnZUJsb2NrKGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIGJvZHksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENTogb3B0aW9ucy50cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFN0YWdlIEJsb2NrIEZyb20gVVJMIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IGJsb2NrIHRvIGJlIGNvbW1pdHRlZCBhcyBwYXJ0XG4gICAgICogb2YgYSBibG9iIHdoZXJlIHRoZSBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgVVJMLlxuICAgICAqIFRoaXMgQVBJIGlzIGF2YWlsYWJsZSBzdGFydGluZyBpbiB2ZXJzaW9uIDIwMTgtMDMtMjguXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2NrLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvY2tJZCAtIEEgNjQtYnl0ZSB2YWx1ZSB0aGF0IGlzIGJhc2U2NC1lbmNvZGVkXG4gICAgICogQHBhcmFtIHNvdXJjZVVSTCAtIFNwZWNpZmllcyB0aGUgVVJMIG9mIHRoZSBibG9iLiBUaGUgdmFsdWVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBhIFVSTCBvZiB1cCB0byAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIGJsb2IuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkIGFwcGVhclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSByZXF1ZXN0IFVSSS4gVGhlIHNvdXJjZSBibG9iIG11c3QgZWl0aGVyIGJlIHB1YmxpY1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHNvdXJjZSBibG9iIGlzIHB1YmxpYywgbm8gYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBzb3VyY2Ugb2JqZWN0IFVSTHM6XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAtIGh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9teWJsb2JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL215YmxvYj9zbmFwc2hvdD08RGF0ZVRpbWU+XG4gICAgICogQHBhcmFtIG9mZnNldCAtIEZyb20gd2hpY2ggcG9zaXRpb24gb2YgdGhlIGJsb2IgdG8gZG93bmxvYWQsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwXG4gICAgICogQHBhcmFtIGNvdW50IC0gSG93IG11Y2ggZGF0YSB0byBiZSBkb3dubG9hZGVkLCBncmVhdGVyIHRoYW4gMC4gV2lsbCBkb3dubG9hZCB0byB0aGUgZW5kIHdoZW4gdW5kZWZpbmVkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvY2sgQmxvYiBTdGFnZSBCbG9jayBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhZ2VCbG9ja0Zyb21VUkwoYmxvY2tJZCwgc291cmNlVVJMLCBvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtc3RhZ2VCbG9ja0Zyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnN0YWdlQmxvY2tGcm9tVVJMKGJsb2NrSWQsIDAsIHNvdXJjZVVSTCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRNRDU6IG9wdGlvbnMuc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQ6IG9wdGlvbnMuc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgIHNvdXJjZVJhbmdlOiBvZmZzZXQgPT09IDAgJiYgIWNvdW50ID8gdW5kZWZpbmVkIDogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb246IGh0dHBBdXRob3JpemF0aW9uVG9TdHJpbmcob3B0aW9ucy5zb3VyY2VBdXRob3JpemF0aW9uKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgYSBibG9iIGJ5IHNwZWNpZnlpbmcgdGhlIGxpc3Qgb2YgYmxvY2sgSURzIHRoYXQgbWFrZSB1cCB0aGUgYmxvYi5cbiAgICAgKiBJbiBvcmRlciB0byBiZSB3cml0dGVuIGFzIHBhcnQgb2YgYSBibG9iLCBhIGJsb2NrIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuXG4gICAgICogdG8gdGhlIHNlcnZlciBpbiBhIHByaW9yIHtAbGluayBzdGFnZUJsb2NrfSBvcGVyYXRpb24uIFlvdSBjYW4gY2FsbCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fSB0b1xuICAgICAqIHVwZGF0ZSBhIGJsb2IgYnkgdXBsb2FkaW5nIG9ubHkgdGhvc2UgYmxvY2tzIHRoYXQgaGF2ZSBjaGFuZ2VkLCB0aGVuIGNvbW1pdHRpbmcgdGhlIG5ldyBhbmQgZXhpc3RpbmdcbiAgICAgKiBibG9ja3MgdG9nZXRoZXIuIEFueSBibG9ja3Mgbm90IHNwZWNpZmllZCBpbiB0aGUgYmxvY2sgbGlzdCBhbmQgcGVybWFuZW50bHkgZGVsZXRlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvY2stbGlzdFxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2NrcyAtICBBcnJheSBvZiA2NC1ieXRlIHZhbHVlIHRoYXQgaXMgYmFzZTY0LWVuY29kZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgQ29tbWl0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIENvbW1pdCBCbG9jayBMaXN0IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBjb21taXRCbG9ja0xpc3QoYmxvY2tzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LWNvbW1pdEJsb2NrTGlzdFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC5jb21taXRCbG9ja0xpc3QoeyBsYXRlc3Q6IGJsb2NrcyB9LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBvcHRpb25zLmJsb2JIVFRQSGVhZGVycyxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2IgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9jID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgdGllcjogdG9BY2Nlc3NUaWVyKG9wdGlvbnMudGllciksXG4gICAgICAgICAgICAgICAgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGJsb2NrcyB0aGF0IGhhdmUgYmVlbiB1cGxvYWRlZCBhcyBwYXJ0IG9mIGEgYmxvY2sgYmxvYlxuICAgICAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgYmxvY2sgbGlzdCBmaWx0ZXIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2NrLWxpc3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBsaXN0VHlwZSAtIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGUgbGlzdCBvZiBjb21taXR0ZWQgYmxvY2tzLFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIHVuY29tbWl0dGVkIGJsb2Nrcywgb3IgYm90aCBsaXN0cyB0b2dldGhlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgR2V0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIEdldCBCbG9jayBMaXN0IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRCbG9ja0xpc3QobGlzdFR5cGUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1nZXRCbG9ja0xpc3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2NrQmxvYkNvbnRleHQuZ2V0QmxvY2tMaXN0KGxpc3RUeXBlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmICghcmVzLmNvbW1pdHRlZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgIHJlcy5jb21taXR0ZWRCbG9ja3MgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzLnVuY29tbWl0dGVkQmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgcmVzLnVuY29tbWl0dGVkQmxvY2tzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gSGlnaCBsZXZlbCBmdW5jdGlvbnNcbiAgICAvKipcbiAgICAgKiBVcGxvYWRzIGEgQnVmZmVyKE5vZGUuanMpL0Jsb2IoYnJvd3NlcnMpL0FycmF5QnVmZmVyL0FycmF5QnVmZmVyVmlldyBvYmplY3QgdG8gYSBCbG9ja0Jsb2IuXG4gICAgICpcbiAgICAgKiBXaGVuIGRhdGEgbGVuZ3RoIGlzIG5vIG1vcmUgdGhhbiB0aGUgc3BlY2lmaWxlZCB7QGxpbmsgQmxvY2tCbG9iUGFyYWxsZWxVcGxvYWRPcHRpb25zLm1heFNpbmdsZVNob3RTaXplfSAoZGVmYXVsdCBpc1xuICAgICAqIHtAbGluayBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFU30pLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHtAbGluayB1cGxvYWR9IGNhbGwgdG8gZmluaXNoIHRoZSB1cGxvYWQuXG4gICAgICogT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCB3aWxsIGNhbGwge0BsaW5rIHN0YWdlQmxvY2t9IHRvIHVwbG9hZCBibG9ja3MsIGFuZCBmaW5hbGx5IGNhbGwge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH1cbiAgICAgKiB0byBjb21taXQgdGhlIGJsb2NrIGxpc3QuXG4gICAgICpcbiAgICAgKiBBIGNvbW1vbiB7QGxpbmsgQmxvY2tCbG9iUGFyYWxsZWxVcGxvYWRPcHRpb25zLmJsb2JIVFRQSGVhZGVyc30gb3B0aW9uIHRvIHNldCBpc1xuICAgICAqIGBibG9iQ29udGVudFR5cGVgLCBlbmFibGluZyB0aGUgYnJvd3NlciB0byBwcm92aWRlXG4gICAgICogZnVuY3Rpb25hbGl0eSBiYXNlZCBvbiBmaWxlIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSAtIEJ1ZmZlcihOb2RlLmpzKSwgQmxvYiwgQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZERhdGEoZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZERhdGFcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkU2Vla2FibGVJbnRlcm5hbCgob2Zmc2V0LCBzaXplKSA9PiBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSwgYnVmZmVyLmJ5dGVMZW5ndGgsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyb3dzZXJCbG9iID0gbmV3IEJsb2IoW2RhdGFdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIHNpemUpID0+IGJyb3dzZXJCbG9iLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2l6ZSksIGJyb3dzZXJCbG9iLnNpemUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIElOIEJST1dTRVJTLlxuICAgICAqXG4gICAgICogVXBsb2FkcyBhIGJyb3dzZXIgQmxvYi9GaWxlL0FycmF5QnVmZmVyL0FycmF5QnVmZmVyVmlldyBvYmplY3QgdG8gYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFdoZW4gYnVmZmVyIGxlbmd0aCBsZXNzZXIgdGhhbiBvciBlcXVhbCB0byAyNTZNQiwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgMSB1cGxvYWQgY2FsbCB0byBmaW5pc2ggdGhlIHVwbG9hZC5cbiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCB7QGxpbmsgc3RhZ2VCbG9ja30gdG8gdXBsb2FkIGJsb2NrcywgYW5kIGZpbmFsbHkgY2FsbFxuICAgICAqIHtAbGluayBjb21taXRCbG9ja0xpc3R9IHRvIGNvbW1pdCB0aGUgYmxvY2sgbGlzdC5cbiAgICAgKlxuICAgICAqIEEgY29tbW9uIHtAbGluayBCbG9ja0Jsb2JQYXJhbGxlbFVwbG9hZE9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzfSBvcHRpb24gdG8gc2V0IGlzXG4gICAgICogYGJsb2JDb250ZW50VHlwZWAsIGVuYWJsaW5nIHRoZSBicm93c2VyIHRvIHByb3ZpZGVcbiAgICAgKiBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIGZpbGUgdHlwZS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgdXBsb2FkRGF0YX0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBicm93c2VyRGF0YSAtIEJsb2IsIEZpbGUsIEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlld1xuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB1cGxvYWQgYnJvd3NlciBkYXRhLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkQnJvd3NlckRhdGEoYnJvd3NlckRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC11cGxvYWRCcm93c2VyRGF0YVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXJCbG9iID0gbmV3IEJsb2IoW2Jyb3dzZXJEYXRhXSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIHNpemUpID0+IGJyb3dzZXJCbG9iLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2l6ZSksIGJyb3dzZXJCbG9iLnNpemUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqXG4gICAgICogVXBsb2FkcyBkYXRhIHRvIGJsb2NrIGJsb2IuIFJlcXVpcmVzIGEgYm9keUZhY3RvcnkgYXMgdGhlIGRhdGEgc291cmNlLFxuICAgICAqIHdoaWNoIG5lZWQgdG8gcmV0dXJuIGEge0BsaW5rIEh0dHBSZXF1ZXN0Qm9keX0gb2JqZWN0IHdpdGggdGhlIG9mZnNldCBhbmQgc2l6ZSBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIFdoZW4gZGF0YSBsZW5ndGggaXMgbm8gbW9yZSB0aGFuIHRoZSBzcGVjaWZpZWQge0BsaW5rIEJsb2NrQmxvYlBhcmFsbGVsVXBsb2FkT3B0aW9ucy5tYXhTaW5nbGVTaG90U2l6ZX0gKGRlZmF1bHQgaXNcbiAgICAgKiB7QGxpbmsgQkxPQ0tfQkxPQl9NQVhfVVBMT0FEX0JMT0JfQllURVN9KSwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgMSB7QGxpbmsgdXBsb2FkfSBjYWxsIHRvIGZpbmlzaCB0aGUgdXBsb2FkLlxuICAgICAqIE90aGVyd2lzZSwgdGhpcyBtZXRob2Qgd2lsbCBjYWxsIHtAbGluayBzdGFnZUJsb2NrfSB0byB1cGxvYWQgYmxvY2tzLCBhbmQgZmluYWxseSBjYWxsIHtAbGluayBjb21taXRCbG9ja0xpc3R9XG4gICAgICogdG8gY29tbWl0IHRoZSBibG9jayBsaXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHlGYWN0b3J5IC1cbiAgICAgKiBAcGFyYW0gc2l6ZSAtIHNpemUgb2YgdGhlIGRhdGEgdG8gdXBsb2FkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBVcGxvYWQgdG8gQmxvY2sgQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRTZWVrYWJsZUludGVybmFsKGJvZHlGYWN0b3J5LCBzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgbGV0IGJsb2NrU2l6ZSA9IChfYSA9IG9wdGlvbnMuYmxvY2tTaXplKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICBpZiAoYmxvY2tTaXplIDwgMCB8fCBibG9ja1NpemUgPiBCTE9DS19CTE9CX01BWF9TVEFHRV9CTE9DS19CWVRFUykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGJsb2NrU2l6ZSBvcHRpb24gbXVzdCBiZSA+PSAwIGFuZCA8PSAke0JMT0NLX0JMT0JfTUFYX1NUQUdFX0JMT0NLX0JZVEVTfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heFNpbmdsZVNob3RTaXplID0gKF9iID0gb3B0aW9ucy5tYXhTaW5nbGVTaG90U2l6ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogQkxPQ0tfQkxPQl9NQVhfVVBMT0FEX0JMT0JfQllURVM7XG4gICAgICAgIGlmIChtYXhTaW5nbGVTaG90U2l6ZSA8IDAgfHwgbWF4U2luZ2xlU2hvdFNpemUgPiBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFUykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYG1heFNpbmdsZVNob3RTaXplIG9wdGlvbiBtdXN0IGJlID49IDAgYW5kIDw9ICR7QkxPQ0tfQkxPQl9NQVhfVVBMT0FEX0JMT0JfQllURVN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHNpemUgPiBCTE9DS19CTE9CX01BWF9TVEFHRV9CTE9DS19CWVRFUyAqIEJMT0NLX0JMT0JfTUFYX0JMT0NLUykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGAke3NpemV9IGlzIHRvbyBsYXJnZXIgdG8gdXBsb2FkIHRvIGEgYmxvY2sgYmxvYi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaXplID4gbWF4U2luZ2xlU2hvdFNpemUpIHtcbiAgICAgICAgICAgICAgICBibG9ja1NpemUgPSBNYXRoLmNlaWwoc2l6ZSAvIEJMT0NLX0JMT0JfTUFYX0JMT0NLUyk7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrU2l6ZSA8IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUykge1xuICAgICAgICAgICAgICAgICAgICBibG9ja1NpemUgPSBERUZBVUxUX0JMT0JfRE9XTkxPQURfQkxPQ0tfQllURVM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZFNlZWthYmxlSW50ZXJuYWxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2l6ZSA8PSBtYXhTaW5nbGVTaG90U2l6ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnVwbG9hZChib2R5RmFjdG9yeSgwLCBzaXplKSwgc2l6ZSwgdXBkYXRlZE9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG51bUJsb2NrcyA9IE1hdGguZmxvb3IoKHNpemUgLSAxKSAvIGJsb2NrU2l6ZSkgKyAxO1xuICAgICAgICAgICAgaWYgKG51bUJsb2NrcyA+IEJMT0NLX0JMT0JfTUFYX0JMT0NLUykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBUaGUgYnVmZmVyJ3Mgc2l6ZSBpcyB0b28gYmlnIG9yIHRoZSBCbG9ja1NpemUgaXMgdG9vIHNtYWxsO2AgK1xuICAgICAgICAgICAgICAgICAgICBgdGhlIG51bWJlciBvZiBibG9ja3MgbXVzdCBiZSA8PSAke0JMT0NLX0JMT0JfTUFYX0JMT0NLU31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJsb2NrTGlzdCA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJRFByZWZpeCA9IGNvcmVVdGlsLnJhbmRvbVVVSUQoKTtcbiAgICAgICAgICAgIGxldCB0cmFuc2ZlclByb2dyZXNzID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGJhdGNoID0gbmV3IEJhdGNoKG9wdGlvbnMuY29uY3VycmVuY3kpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1CbG9ja3M7IGkrKykge1xuICAgICAgICAgICAgICAgIGJhdGNoLmFkZE9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrSUQgPSBnZW5lcmF0ZUJsb2NrSUQoYmxvY2tJRFByZWZpeCwgaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gYmxvY2tTaXplICogaTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gaSA9PT0gbnVtQmxvY2tzIC0gMSA/IHNpemUgOiBzdGFydCArIGJsb2NrU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGVuZCAtIHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBibG9ja0xpc3QucHVzaChibG9ja0lEKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFnZUJsb2NrKGJsb2NrSUQsIGJvZHlGYWN0b3J5KHN0YXJ0LCBjb250ZW50TGVuZ3RoKSwgY29udGVudExlbmd0aCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHByb2dyZXNzIGFmdGVyIGJsb2NrIGlzIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZCB0byBzZXJ2ZXIsIGluIGNhc2Ugb2YgYmxvY2sgdHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IEhvb2sgd2l0aCBjb252ZW5pZW5jZSBsYXllciBwcm9ncmVzcyBldmVudCBpbiBmaW5lciBsZXZlbFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlclByb2dyZXNzICs9IGNvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkQnl0ZXM6IHRyYW5zZmVyUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgYmF0Y2guZG8oKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1pdEJsb2NrTGlzdChibG9ja0xpc3QsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAgICAgKlxuICAgICAqIFVwbG9hZHMgYSBsb2NhbCBmaWxlIGluIGJsb2NrcyB0byBhIGJsb2NrIGJsb2IuXG4gICAgICpcbiAgICAgKiBXaGVuIGZpbGUgc2l6ZSBsZXNzZXIgdGhhbiBvciBlcXVhbCB0byAyNTZNQiwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgMSB1cGxvYWQgY2FsbCB0byBmaW5pc2ggdGhlIHVwbG9hZC5cbiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCBzdGFnZUJsb2NrIHRvIHVwbG9hZCBibG9ja3MsIGFuZCBmaW5hbGx5IGNhbGwgY29tbWl0QmxvY2tMaXN0XG4gICAgICogdG8gY29tbWl0IHRoZSBibG9jayBsaXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbGVQYXRoIC0gRnVsbCBwYXRoIG9mIGxvY2FsIGZpbGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gVXBsb2FkIHRvIEJsb2NrIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkRmlsZShmaWxlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZEZpbGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaXplID0gKGF3YWl0IGZzU3RhdChmaWxlUGF0aCkpLnNpemU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIGNvdW50KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGZzQ3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBhdXRvQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogY291bnQgPyBvZmZzZXQgKyBjb3VudCAtIDEgOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG9mZnNldCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHNpemUsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAgICAgKlxuICAgICAqIFVwbG9hZHMgYSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbSBpbnRvIGJsb2NrIGJsb2IuXG4gICAgICpcbiAgICAgKiBQRVJGT1JNQU5DRSBJTVBST1ZFTUVOVCBUSVBTOlxuICAgICAqICogSW5wdXQgc3RyZWFtIGhpZ2hXYXRlck1hcmsgaXMgYmV0dGVyIHRvIHNldCBhIHNhbWUgdmFsdWUgd2l0aCBidWZmZXJTaXplXG4gICAgICogICAgcGFyYW1ldGVyLCB3aGljaCB3aWxsIGF2b2lkIEJ1ZmZlci5jb25jYXQoKSBvcGVyYXRpb25zLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmVhbSAtIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtXG4gICAgICogQHBhcmFtIGJ1ZmZlclNpemUgLSBTaXplIG9mIGV2ZXJ5IGJ1ZmZlciBhbGxvY2F0ZWQsIGFsc28gdGhlIGJsb2NrIHNpemUgaW4gdGhlIHVwbG9hZGVkIGJsb2NrIGJsb2IuIERlZmF1bHQgdmFsdWUgaXMgOE1CXG4gICAgICogQHBhcmFtIG1heENvbmN1cnJlbmN5IC0gIE1heCBjb25jdXJyZW5jeSBpbmRpY2F0ZXMgdGhlIG1heCBudW1iZXIgb2YgYnVmZmVycyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZSBjb3JyZWxhdGlvbiB3aXRoIG1heCB1cGxvYWRpbmcgY29uY3VycmVuY3kuIERlZmF1bHQgdmFsdWUgaXMgNVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBVcGxvYWQgU3RyZWFtIHRvIEJsb2NrIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkU3RyZWFtKHN0cmVhbSwgYnVmZmVyU2l6ZSA9IERFRkFVTFRfQkxPQ0tfQlVGRkVSX1NJWkVfQllURVMsIG1heENvbmN1cnJlbmN5ID0gNSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZFN0cmVhbVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCBibG9ja051bSA9IDA7XG4gICAgICAgICAgICBjb25zdCBibG9ja0lEUHJlZml4ID0gY29yZVV0aWwucmFuZG9tVVVJRCgpO1xuICAgICAgICAgICAgbGV0IHRyYW5zZmVyUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tMaXN0ID0gW107XG4gICAgICAgICAgICBjb25zdCBzY2hlZHVsZXIgPSBuZXcgQnVmZmVyU2NoZWR1bGVyKHN0cmVhbSwgYnVmZmVyU2l6ZSwgbWF4Q29uY3VycmVuY3ksIGFzeW5jIChib2R5LCBsZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0lEID0gZ2VuZXJhdGVCbG9ja0lEKGJsb2NrSURQcmVmaXgsIGJsb2NrTnVtKTtcbiAgICAgICAgICAgICAgICBibG9ja0xpc3QucHVzaChibG9ja0lEKTtcbiAgICAgICAgICAgICAgICBibG9ja051bSsrO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhZ2VCbG9jayhibG9ja0lELCBib2R5LCBsZW5ndGgsIHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJQcm92aWRlZEtleTogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJvZ3Jlc3MgYWZ0ZXIgYmxvY2sgaXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkIHRvIHNlcnZlciwgaW4gY2FzZSBvZiBibG9jayB0cnlpbmdcbiAgICAgICAgICAgICAgICB0cmFuc2ZlclByb2dyZXNzICs9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiB0cmFuc2ZlclByb2dyZXNzIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgc2hvdWxkIHNldCBhIHNtYWxsZXIgdmFsdWUgdGhhbiBtYXhDb25jdXJyZW5jeSwgd2hpY2ggaXMgaGVscGZ1bCB0b1xuICAgICAgICAgICAgLy8gcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSB3aGVuIGEgb3V0Z29pbmcgaGFuZGxlciB3YWl0cyBmb3Igc3RyZWFtIGRhdGEsIGluXG4gICAgICAgICAgICAvLyB0aGlzIHNpdHVhdGlvbiwgb3V0Z29pbmcgaGFuZGxlcnMgYXJlIGJsb2NrZWQuXG4gICAgICAgICAgICAvLyBPdXRnb2luZyBxdWV1ZSBzaG91bGRuJ3QgYmUgZW1wdHkuXG4gICAgICAgICAgICBNYXRoLmNlaWwoKG1heENvbmN1cnJlbmN5IC8gNCkgKiAzKSk7XG4gICAgICAgICAgICBhd2FpdCBzY2hlZHVsZXIuZG8oKTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbW1pdEJsb2NrTGlzdChibG9ja0xpc3QsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogUGFnZUJsb2JDbGllbnQgZGVmaW5lcyBhIHNldCBvZiBvcGVyYXRpb25zIGFwcGxpY2FibGUgdG8gcGFnZSBibG9icy5cbiAqL1xuY2xhc3MgUGFnZUJsb2JDbGllbnQgZXh0ZW5kcyBCbG9iQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBibG9iTmFtZU9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICAvLyBJbiBUeXBlU2NyaXB0IHdlIGNhbm5vdCBzaW1wbHkgcGFzcyBhbGwgcGFyYW1ldGVycyB0byBzdXBlcigpIGxpa2UgYmVsb3cgc28gaGF2ZSB0byBkdXBsaWNhdGUgdGhlIGNvZGUgaW5zdGVhZC5cbiAgICAgICAgLy8gICBzdXBlcihzLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZU9yT3B0aW9ucywgYmxvYk5hbWVPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBibG9iTmFtZU9yT3B0aW9ucyAmJlxuICAgICAgICAgICAgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgYmxvYk5hbWUgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyh1cmxPckNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkS2V5Q3JlZGVudGlhbCA9IG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChleHRyYWN0ZWRDcmVkcy5hY2NvdW50TmFtZSwgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgYW5kIGJsb2JOYW1lIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgIHRoaXMucGFnZUJsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5wYWdlQmxvYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBQYWdlQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlXG4gICAgICogc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBQcm92aWRlIFwiXCIgd2lsbCByZW1vdmUgdGhlIHNuYXBzaG90IGFuZCByZXR1cm4gYSBDbGllbnQgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbmFwc2hvdCAtIFRoZSBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgQSBuZXcgUGFnZUJsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqL1xuICAgIHdpdGhTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gbmV3IFBhZ2VCbG9iQ2xpZW50KHNldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuU05BUFNIT1QsIHNuYXBzaG90Lmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHNuYXBzaG90KSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBwYWdlIGJsb2Igb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguIENhbGwgdXBsb2FkUGFnZXMgdG8gdXBsb2FkIGRhdGFcbiAgICAgKiBkYXRhIHRvIGEgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2l6ZSAtIHNpemUgb2YgdGhlIHBhZ2UgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBDcmVhdGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWNyZWF0ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmNyZWF0ZSgwLCBzaXplLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBvcHRpb25zLmJsb2JIVFRQSGVhZGVycyxcbiAgICAgICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IG9wdGlvbnMuYmxvYlNlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IChfYiA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiAoX2MgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgbGVnYWxIb2xkOiBvcHRpb25zLmxlZ2FsSG9sZCxcbiAgICAgICAgICAgICAgICB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBwYWdlIGJsb2Igb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguIENhbGwgdXBsb2FkUGFnZXMgdG8gdXBsb2FkIGRhdGFcbiAgICAgKiBkYXRhIHRvIGEgcGFnZSBibG9iLiBJZiB0aGUgYmxvYiB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZSBjb250ZW50XG4gICAgICogb2YgdGhlIGV4aXN0aW5nIGJsb2Igd2lsbCByZW1haW4gdW5jaGFuZ2VkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2l6ZSAtIHNpemUgb2YgdGhlIHBhZ2UgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSWZOb3RFeGlzdHMoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtY3JlYXRlSWZOb3RFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0geyBpZk5vbmVNYXRjaDogRVRhZ0FueSB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY3JlYXRlKHNpemUsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgY29uZGl0aW9ucywgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkJsb2JBbHJlYWR5RXhpc3RzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyAxIG9yIG1vcmUgcGFnZXMgdG8gdGhlIHBhZ2UgYmxvYi4gVGhlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNTEyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1wYWdlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIERhdGEgdG8gdXBsb2FkXG4gICAgICogQHBhcmFtIG9mZnNldCAtIE9mZnNldCBvZiBkZXN0aW5hdGlvbiBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBDb250ZW50IGxlbmd0aCBvZiB0aGUgYm9keSwgYWxzbyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdXBsb2FkZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgVXBsb2FkIFBhZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRQYWdlcyhib2R5LCBvZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtdXBsb2FkUGFnZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQudXBsb2FkUGFnZXMoY291bnQsIGJvZHksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogb3B0aW9ucy5vblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQ6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgVXBsb2FkIFBhZ2VzIG9wZXJhdGlvbiB3cml0ZXMgYSByYW5nZSBvZiBwYWdlcyB0byBhIHBhZ2UgYmxvYiB3aGVyZSB0aGVcbiAgICAgKiBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgVVJMLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1wYWdlLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC0gU3BlY2lmeSBhIFVSTCB0byB0aGUgY29weSBzb3VyY2UsIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlKFNBUykgbWF5YmUgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvblxuICAgICAqIEBwYXJhbSBzb3VyY2VPZmZzZXQgLSBUaGUgc291cmNlIG9mZnNldCB0byBjb3B5IGZyb20uIFBhc3MgMCB0byBjb3B5IGZyb20gdGhlIGJlZ2lubmluZyBvZiBzb3VyY2UgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGRlc3RPZmZzZXQgLSBPZmZzZXQgb2YgZGVzdGluYXRpb24gcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHVwbG9hZGVkIGZyb20gc291cmNlIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRQYWdlc0Zyb21VUkwoc291cmNlVVJMLCBzb3VyY2VPZmZzZXQsIGRlc3RPZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC11cGxvYWRQYWdlc0Zyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LnVwbG9hZFBhZ2VzRnJvbVVSTChzb3VyY2VVUkwsIHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQ6IHNvdXJjZU9mZnNldCwgY291bnQgfSksIDAsIHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQ6IGRlc3RPZmZzZXQsIGNvdW50IH0pLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudE1ENTogb3B0aW9ucy5zb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NDogb3B0aW9ucy5zb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiAoX2IgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2U6IChfYyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IChfZCA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogKF9lID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZyZWVzIHRoZSBzcGVjaWZpZWQgcGFnZXMgZnJvbSB0aGUgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1wYWdlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZXMgdG8gY2xlYXIuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGNsZWFyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIENsZWFyIFBhZ2VzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIENsZWFyIFBhZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBjbGVhclBhZ2VzKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWNsZWFyUGFnZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuY2xlYXJQYWdlcygwLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZU51bWJlckFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHZhbGlkIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYiBvciBzbmFwc2hvdCBvZiBhIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBSYW5nZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UGFnZVJhbmdlcyhvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1nZXRQYWdlUmFuZ2VzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZVJlc3BvbnNlRnJvbU1vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGdldFBhZ2VSYW5nZXNTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBwYWdlIHJhbmdlcyBzdGFydGluZyBmcm9tIHRoZVxuICAgICAqIHNwZWNpZmllZCBNYXJrZXIuIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGdldFBhZ2VSYW5nZXNTZWdtZW50IGFnYWluXG4gICAgICogKHBhc3NpbmcgdGhlIHRoZSBwcmV2aW91c2x5LXJldHVybmVkIE1hcmtlcikgdG8gZ2V0IHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBsaXN0IHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIFBhZ2VCbG9iIEdldCBQYWdlIFJhbmdlcyBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0UGFnZVJhbmdlc1NlZ21lbnQob2Zmc2V0ID0gMCwgY291bnQsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtZ2V0UGFnZVJhbmdlc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuZ2V0UGFnZVJhbmdlcyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1hcmtlcixcbiAgICAgICAgICAgICAgICBtYXhQYWdlU2l6ZTogb3B0aW9ucy5tYXhQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3Ige0BsaW5rIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc1Jlc3BvbnNlTW9kZWx9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBnZXQgb2YgcGFnZSByYW5nZXMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBnZXR0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBwYWdlIHJhbmdlcyByZW1haW5pbmcgd2l0aGluIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBnZXRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIExpc3QgUGFnZSBSYW5nZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHNfMShvZmZzZXQgPSAwLCBjb3VudCwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGxldCBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZTtcbiAgICAgICAgICAgIGlmICghIW1hcmtlciB8fCBtYXJrZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2UgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMubGlzdFBhZ2VSYW5nZXNTZWdtZW50KG9mZnNldCwgY291bnQsIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIG9mIHtAbGluayBQYWdlUmFuZ2VJbmZvfSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gTGlzdCBQYWdlIFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZUl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0UGFnZVJhbmdlSXRlbXNfMShvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMSwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5saXN0UGFnZVJhbmdlSXRlbVNlZ21lbnRzKG9mZnNldCwgY291bnQsIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0UGFnZVJhbmdlc1NlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKEV4dHJhY3RQYWdlUmFuZ2VJbmZvSXRlbXMoZ2V0UGFnZVJhbmdlc1NlZ21lbnQpKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBfZS5yZXR1cm4pKSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9iLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IG9mIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqICAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IG9mIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBHZXQgdGhlIHBhZ2VCbG9iQ2xpZW50IGJlZm9yZSB5b3UgcnVuIHRoZXNlIHNuaXBwZXRzLFxuICAgICAqIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8eW91ci1jb250YWluZXItbmFtZT5cIikuZ2V0UGFnZUJsb2JDbGllbnQoXCI8eW91ci1ibG9iLW5hbWU+XCIpO2BcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBwYWdlUmFuZ2Ugb2YgcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXMoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXIgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpO1xuICAgICAqIGxldCBwYWdlUmFuZ2VJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFwYWdlUmFuZ2VJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLnN0YXJ0fSAtICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5lbmR9LCBJc0NsZWFyOiAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuaXNDbGVhcn1gKTtcbiAgICAgKiAgIHBhZ2VSYW5nZUl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgZm9yIChjb25zdCBwYWdlUmFuZ2Ugb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBwYWdlIHJhbmdlc1xuICAgICAqIGZvciAoY29uc3QgcGFnZVJhbmdlIG9mIHJlc3BvbnNlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqXG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqXG4gICAgICogaXRlcmF0b3IgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpLmJ5UGFnZSh7IGNvbnRpbnVhdGlvblRva2VuOiBtYXJrZXIsIG1heFBhZ2VTaXplOiAxMCB9KTtcbiAgICAgKiByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDEwIHBhZ2UgcmFuZ2VzXG4gICAgICogZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RQYWdlUmFuZ2VzKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGl0ZXIgPSB0aGlzLmxpc3RQYWdlUmFuZ2VJdGVtcyhvZmZzZXQsIGNvdW50LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHMob2Zmc2V0LCBjb3VudCwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0IHJhbmdlcyBkaWZmLlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3QgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2UgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UGFnZVJhbmdlc0RpZmYob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWdldFBhZ2VSYW5nZXNEaWZmXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuZ2V0UGFnZVJhbmdlc0RpZmYoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcmV2c25hcHNob3Q6IHByZXZTbmFwc2hvdCxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVzcG9uc2VGcm9tTW9kZWwocmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGdldFBhZ2VSYW5nZXNEaWZmU2VnbWVudCByZXR1cm5zIGEgc2luZ2xlIHNlZ21lbnQgb2YgcGFnZSByYW5nZXMgc3RhcnRpbmcgZnJvbSB0aGVcbiAgICAgKiBzcGVjaWZpZWQgTWFya2VyIGZvciBkaWZmZXJlbmNlIGJldHdlZW4gcHJldmlvdXMgc25hcHNob3QgYW5kIHRoZSB0YXJnZXQgcGFnZSBibG9iLlxuICAgICAqIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGdldFBhZ2VSYW5nZXNEaWZmU2VnbWVudCBhZ2FpblxuICAgICAqIChwYXNzaW5nIHRoZSB0aGUgcHJldmlvdXNseS1yZXR1cm5lZCBNYXJrZXIpIHRvIGdldCB0aGUgbmV4dCBzZWdtZW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIHByZXZTbmFwc2hvdE9yVXJsIC0gVGltZXN0YW1wIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlIG9yIFVSTCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBnZXQgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBnZXQgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0UGFnZVJhbmdlc0RpZmZTZWdtZW50KG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWdldFBhZ2VSYW5nZXNEaWZmU2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzRGlmZih7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcHJldnNuYXBzaG90OiBwcmV2U25hcHNob3RPclVybCxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBjb3VudDogY291bnQsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFya2VyOiBtYXJrZXIsXG4gICAgICAgICAgICAgICAgbWF4UGFnZVNpemU6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tYXhQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3Ige0BsaW5rIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZSZXNwb25zZU1vZGVsfVxuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90T3JVcmwgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2Ugb3IgVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdldCBvZiBwYWdlIHJhbmdlcyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGdldHRpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIHBhZ2UgcmFuZ2VzIHJlbWFpbmluZyB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGdldFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZXMgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZURpZmZJdGVtU2VnbWVudHMob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90T3JVcmwsIG1hcmtlciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50c18xKCkge1xuICAgICAgICAgICAgbGV0IGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0UGFnZVJhbmdlc0RpZmZTZWdtZW50KG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliLl9fYXdhaXQoeWllbGQgdHNsaWIuX19hd2FpdChnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBvZiB7QGxpbmsgUGFnZVJhbmdlSW5mb30gb2JqZWN0c1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIHByZXZTbmFwc2hvdE9yVXJsIC0gVGltZXN0YW1wIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlIG9yIFVSTCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZXMgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZURpZmZJdGVtcyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3RPclVybCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1zXzEoKSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMiwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5saXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3RPclVybCwgbWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRQYWdlUmFuZ2VzU2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoRXh0cmFjdFBhZ2VSYW5nZUluZm9JdGVtcyhnZXRQYWdlUmFuZ2VzU2VnbWVudCkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcGFnZSByYW5nZXMgdGhhdCBkaWZmZXIgYmV0d2VlbiBhIHNwZWNpZmllZCBzbmFwc2hvdCBhbmQgdGhpcyBwYWdlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiAgLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBHZXQgdGhlIHBhZ2VCbG9iQ2xpZW50IGJlZm9yZSB5b3UgcnVuIHRoZXNlIHNuaXBwZXRzLFxuICAgICAqIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8eW91ci1jb250YWluZXItbmFtZT5cIikuZ2V0UGFnZUJsb2JDbGllbnQoXCI8eW91ci1ibG9iLW5hbWU+XCIpO2BcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBwYWdlUmFuZ2Ugb2YgcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCk7XG4gICAgICogbGV0IHBhZ2VSYW5nZUl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIXBhZ2VSYW5nZUl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuc3RhcnR9IC0gJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLmVuZH0sIElzQ2xlYXI6ICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5pc0NsZWFyfWApO1xuICAgICAqICAgcGFnZVJhbmdlSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzRGlmZigpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgZm9yIChjb25zdCBwYWdlUmFuZ2Ugb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzRGlmZigpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgcGFnZSByYW5nZXNcbiAgICAgKiBmb3IgKGNvbnN0IHBhZ2VSYW5nZSBvZiByZXNwb25zZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gR2V0cyBuZXh0IG1hcmtlclxuICAgICAqIGxldCBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgKlxuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKlxuICAgICAqIGl0ZXJhdG9yID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMTAgcGFnZSByYW5nZXNcbiAgICAgKiBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90IC0gVGltZXN0YW1wIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBSYW5nZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIEFuIGFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHN1cHBvcnRzIHBhZ2luZy5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlc0RpZmYob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGl0ZXIgPSB0aGlzLmxpc3RQYWdlUmFuZ2VEaWZmSXRlbXMob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90LCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBuZXh0IG1ldGhvZCwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIubmV4dCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIGNvbm5lY3Rpb24gdG8gdGhlIGFzeW5jIGl0ZXJhdG9yLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybiBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCB3b3JrcyBhIHBhZ2UgYXQgYSB0aW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJ5UGFnZTogKHNldHRpbmdzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbGxlY3Rpb24gb2YgcGFnZSByYW5nZXMgdGhhdCBkaWZmZXIgYmV0d2VlbiBhIHNwZWNpZmllZCBzbmFwc2hvdCBhbmQgdGhpcyBwYWdlIGJsb2IgZm9yIG1hbmFnZWQgZGlza3MuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldCByYW5nZXMgZGlmZi5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90VXJsIC0gVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlIERpZmYgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFBhZ2VSYW5nZXNEaWZmRm9yTWFuYWdlZERpc2tzKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdFVybCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1HZXRQYWdlUmFuZ2VzRGlmZkZvck1hbmFnZWREaXNrc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuZ2V0UGFnZVJhbmdlc0RpZmYoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcmV2U25hcHNob3RVcmwsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZVJlc3BvbnNlRnJvbU1vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2l6ZXMgdGhlIHBhZ2UgYmxvYiB0byB0aGUgc3BlY2lmaWVkIHNpemUgKHdoaWNoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA1MTIpLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gVGFyZ2V0IHNpemVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBSZXNpemUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgUmVzaXplIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyByZXNpemUoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1yZXNpemVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQucmVzaXplKHNpemUsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgcGFnZSBibG9iJ3Mgc2VxdWVuY2UgbnVtYmVyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlckFjdGlvbiAtIEluZGljYXRlcyBob3cgdGhlIHNlcnZpY2Ugc2hvdWxkIG1vZGlmeSB0aGUgYmxvYidzIHNlcXVlbmNlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gc2VxdWVuY2VOdW1iZXIgLSBSZXF1aXJlZCBpZiBzZXF1ZW5jZU51bWJlckFjdGlvbiBpcyBtYXggb3IgdXBkYXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgVXBkYXRlIFNlcXVlbmNlIE51bWJlciBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBVcGRhdGUgU2VxdWVuY2UgTnVtYmVyIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVTZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlckFjdGlvbiwgc2VxdWVuY2VOdW1iZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtdXBkYXRlU2VxdWVuY2VOdW1iZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQudXBkYXRlU2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1iZXJBY3Rpb24sIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHNlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCZWdpbnMgYW4gb3BlcmF0aW9uIHRvIHN0YXJ0IGFuIGluY3JlbWVudGFsIGNvcHkgZnJvbSBvbmUgcGFnZSBibG9iJ3Mgc25hcHNob3QgdG8gdGhpcyBwYWdlIGJsb2IuXG4gICAgICogVGhlIHNuYXBzaG90IGlzIGNvcGllZCBzdWNoIHRoYXQgb25seSB0aGUgZGlmZmVyZW50aWFsIGNoYW5nZXMgYmV0d2VlbiB0aGUgcHJldmlvdXNseVxuICAgICAqIGNvcGllZCBzbmFwc2hvdCBhcmUgdHJhbnNmZXJyZWQgdG8gdGhlIGRlc3RpbmF0aW9uLlxuICAgICAqIFRoZSBjb3BpZWQgc25hcHNob3RzIGFyZSBjb21wbGV0ZSBjb3BpZXMgb2YgdGhlIG9yaWdpbmFsIHNuYXBzaG90IGFuZCBjYW4gYmUgcmVhZCBvciBjb3BpZWQgZnJvbSBhcyB1c3VhbC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9pbmNyZW1lbnRhbC1jb3B5LWJsb2JcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZXMvd2luZG93cy9pbmNyZW1lbnRhbC1zbmFwc2hvdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgcGFnZSBibG9iIHNuYXBzaG90LiBGb3IgZXhhbXBsZSxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iP3NuYXBzaG90PTxEYXRlVGltZT5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBDb3B5IEluY3JlbWVudGFsIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIENvcHkgSW5jcmVtZW50YWwgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0Q29weUluY3JlbWVudGFsKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LXN0YXJ0Q29weUluY3JlbWVudGFsXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmNvcHlJbmNyZW1lbnRhbChjb3B5U291cmNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmFzeW5jIGZ1bmN0aW9uIGdldEJvZHlBc1RleHQoYmF0Y2hSZXNwb25zZSkge1xuICAgIGxldCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoQkFUQ0hfTUFYX1BBWUxPQURfSU5fQllURVMpO1xuICAgIGNvbnN0IHJlc3BvbnNlTGVuZ3RoID0gYXdhaXQgc3RyZWFtVG9CdWZmZXIyKGJhdGNoUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBidWZmZXIpO1xuICAgIC8vIFNsaWNlIHRoZSBidWZmZXIgdG8gdHJpbSB0aGUgZW1wdHkgZW5kaW5nLlxuICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgwLCByZXNwb25zZUxlbmd0aCk7XG4gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gdXRmOEJ5dGVMZW5ndGgoc3RyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKHN0cik7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY29uc3QgSFRUUF9IRUFERVJfREVMSU1JVEVSID0gXCI6IFwiO1xuY29uc3QgU1BBQ0VfREVMSU1JVEVSID0gXCIgXCI7XG5jb25zdCBOT1RfRk9VTkQgPSAtMTtcbi8qKlxuICogVXRpbCBjbGFzcyBmb3IgcGFyc2luZyBiYXRjaCByZXNwb25zZS5cbiAqL1xuY2xhc3MgQmF0Y2hSZXNwb25zZVBhcnNlciB7XG4gICAgY29uc3RydWN0b3IoYmF0Y2hSZXNwb25zZSwgc3ViUmVxdWVzdHMpIHtcbiAgICAgICAgaWYgKCFiYXRjaFJlc3BvbnNlIHx8ICFiYXRjaFJlc3BvbnNlLmNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAvLyBJbiBzcGVjaWFsIGNhc2UocmVwb3J0ZWQpLCBzZXJ2ZXIgbWF5IHJldHVybiBpbnZhbGlkIGNvbnRlbnQtdHlwZSB3aGljaCBjb3VsZCBub3QgYmUgcGFyc2VkLlxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJiYXRjaFJlc3BvbnNlIGlzIG1hbGZvcm1lZCBvciBkb2Vzbid0IGNvbnRhaW4gdmFsaWQgY29udGVudC10eXBlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN1YlJlcXVlc3RzIHx8IHN1YlJlcXVlc3RzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHByZXZlbnQgZHVyaW5nIGNvZGluZy5cbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBzdGF0ZTogc3ViUmVxdWVzdHMgaXMgbm90IHByb3ZpZGVkIG9yIHNpemUgaXMgMC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iYXRjaFJlc3BvbnNlID0gYmF0Y2hSZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdWJSZXF1ZXN0cyA9IHN1YlJlcXVlc3RzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlQmF0Y2hCb3VuZGFyeSA9IHRoaXMuYmF0Y2hSZXNwb25zZS5jb250ZW50VHlwZS5zcGxpdChcIj1cIilbMV07XG4gICAgICAgIHRoaXMucGVyUmVzcG9uc2VQcmVmaXggPSBgLS0ke3RoaXMucmVzcG9uc2VCYXRjaEJvdW5kYXJ5fSR7SFRUUF9MSU5FX0VORElOR31gO1xuICAgICAgICB0aGlzLmJhdGNoUmVzcG9uc2VFbmRpbmcgPSBgLS0ke3RoaXMucmVzcG9uc2VCYXRjaEJvdW5kYXJ5fS0tYDtcbiAgICB9XG4gICAgLy8gRm9yIGV4YW1wbGUgb2YgcmVzcG9uc2UsIHBsZWFzZSByZWZlciB0byBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaCNyZXNwb25zZVxuICAgIGFzeW5jIHBhcnNlQmF0Y2hSZXNwb25zZSgpIHtcbiAgICAgICAgLy8gV2hlbiBsb2dpYyByZWFjaCBoZXJlLCBzdXBwb3NlIGJhdGNoIHJlcXVlc3QgaGFzIGFscmVhZHkgc3VjY2VlZGVkIHdpdGggMjAyLCBzbyB3ZSBjYW4gZnVydGhlciBwYXJzZVxuICAgICAgICAvLyBzdWIgcmVxdWVzdCdzIHJlc3BvbnNlLlxuICAgICAgICBpZiAodGhpcy5iYXRjaFJlc3BvbnNlLl9yZXNwb25zZS5zdGF0dXMgIT09IEhUVFBVUkxDb25uZWN0aW9uLkhUVFBfQUNDRVBURUQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZTogYmF0Y2ggcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXM6ICcke3RoaXMuYmF0Y2hSZXNwb25zZS5fcmVzcG9uc2Uuc3RhdHVzfScuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5QXNUZXh0ID0gYXdhaXQgZ2V0Qm9keUFzVGV4dCh0aGlzLmJhdGNoUmVzcG9uc2UpO1xuICAgICAgICBjb25zdCBzdWJSZXNwb25zZXMgPSByZXNwb25zZUJvZHlBc1RleHRcbiAgICAgICAgICAgIC5zcGxpdCh0aGlzLmJhdGNoUmVzcG9uc2VFbmRpbmcpWzBdIC8vIHN0cmluZyBhZnRlciBlbmRpbmcgaXMgdXNlbGVzc1xuICAgICAgICAgICAgLnNwbGl0KHRoaXMucGVyUmVzcG9uc2VQcmVmaXgpXG4gICAgICAgICAgICAuc2xpY2UoMSk7IC8vIHN0cmluZyBiZWZvcmUgZmlyc3QgcmVzcG9uc2UgYm91bmRhcnkgaXMgdXNlbGVzc1xuICAgICAgICBjb25zdCBzdWJSZXNwb25zZUNvdW50ID0gc3ViUmVzcG9uc2VzLmxlbmd0aDtcbiAgICAgICAgLy8gRGVmZW5zaXZlIGNvZGluZyBpbiBjYXNlIG9mIHBvdGVudGlhbCBlcnJvciBwYXJzaW5nLlxuICAgICAgICAvLyBOb3RlOiBzdWJSZXNwb25zZUNvdW50ID09IDEgaXMgc3BlY2lhbCBjYXNlIHdoZXJlIHN1YiByZXF1ZXN0IGlzIGludmFsaWQuXG4gICAgICAgIC8vIFdlIHRyeSB0byBwcmV2ZW50IHN1Y2ggY2FzZXMgdGhyb3VnaCBlYXJseSB2YWxpZGF0aW9uLCBlLmcuIHZhbGlkYXRlIHN1YiByZXF1ZXN0IGNvdW50ID49IDEuXG4gICAgICAgIC8vIFdoaWxlIGluIHVuZXhwZWN0ZWQgc3ViIHJlcXVlc3QgaW52YWxpZCBjYXNlLCB3ZSBhbGxvdyBzdWIgcmVzcG9uc2UgdG8gYmUgcGFyc2VkIGFuZCByZXR1cm4gdG8gdXNlci5cbiAgICAgICAgaWYgKHN1YlJlc3BvbnNlQ291bnQgIT09IHRoaXMuc3ViUmVxdWVzdHMuc2l6ZSAmJiBzdWJSZXNwb25zZUNvdW50ICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzdWIgcmVzcG9uc2VzJyBjb3VudCBpcyBub3QgZXF1YWwgdG8gc3ViIHJlcXVlc3RzJyBjb3VudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2VzID0gbmV3IEFycmF5KHN1YlJlc3BvbnNlQ291bnQpO1xuICAgICAgICBsZXQgc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQgPSAwO1xuICAgICAgICBsZXQgc3ViUmVzcG9uc2VzRmFpbGVkQ291bnQgPSAwO1xuICAgICAgICAvLyBQYXJzZSBzdWIgc3ViUmVzcG9uc2VzLlxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3ViUmVzcG9uc2VDb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ViUmVzcG9uc2UgPSBzdWJSZXNwb25zZXNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLmhlYWRlcnMgPSBjb3JlSHR0cENvbXBhdC50b0h0dHBIZWFkZXJzTGlrZShjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZUh0dHBIZWFkZXJzKCkpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VMaW5lcyA9IHN1YlJlc3BvbnNlLnNwbGl0KGAke0hUVFBfTElORV9FTkRJTkd9YCk7XG4gICAgICAgICAgICBsZXQgc3ViUmVzcEhlYWRlclN0YXJ0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBzdWJSZXNwSGVhZGVyRW5kRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBzdWJSZXNwRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgY29udGVudElkID0gTk9UX0ZPVU5EO1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXNwb25zZUxpbmUgb2YgcmVzcG9uc2VMaW5lcykge1xuICAgICAgICAgICAgICAgIGlmICghc3ViUmVzcEhlYWRlclN0YXJ0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVudGlvbiBsaW5lIHRvIGluZGljYXRlIGNvbnRlbnQgSURcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS5zdGFydHNXaXRoKEhlYWRlckNvbnN0YW50cy5DT05URU5UX0lEKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudElkID0gcGFyc2VJbnQocmVzcG9uc2VMaW5lLnNwbGl0KEhUVFBfSEVBREVSX0RFTElNSVRFUilbMV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEh0dHAgdmVyc2lvbiBsaW5lIHdpdGggc3RhdHVzIGNvZGUgaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBzdWIgcmVxdWVzdCdzIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAvLyBFeGFtcGxlOiBIVFRQLzEuMSAyMDIgQWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS5zdGFydHNXaXRoKEhUVFBfVkVSU0lPTl8xXzEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbnMgPSByZXNwb25zZUxpbmUuc3BsaXQoU1BBQ0VfREVMSU1JVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLnN0YXR1cyA9IHBhcnNlSW50KHRva2Vuc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5zdGF0dXNNZXNzYWdlID0gdG9rZW5zLnNsaWNlKDIpLmpvaW4oU1BBQ0VfREVMSU1JVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCBjb252ZW50aW9uIGhlYWRlcnMgbm90IHNwZWNpZmljYWxseSBmb3Igc3ViIHJlcXVlc3QgaS5lLiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2h0dHAgYW5kIENvbnRlbnQtSUQ6ICpcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3ViIHJlc3BvbnNlJ3MgaGVhZGVyIHN0YXJ0IGxpbmUgYWxyZWFkeSBmb3VuZCwgYW5kIHRoZSBmaXJzdCBlbXB0eSBsaW5lIGluZGljYXRlcyBoZWFkZXIgZW5kIGxpbmUgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgIGlmICghc3ViUmVzcEhlYWRlckVuZEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJSZXNwSGVhZGVyRW5kRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIGVtcHR5IGxpbmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm90ZTogd2hlbiBjb2RlIHJlYWNoIGhlcmUsIGl0IGluZGljYXRlcyBzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCA9PSB0cnVlXG4gICAgICAgICAgICAgICAgaWYgKCFzdWJSZXNwSGVhZGVyRW5kRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS5pbmRleE9mKEhUVFBfSEVBREVSX0RFTElNSVRFUikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlbnNpdmUgY29kaW5nIHRvIHByZXZlbnQgZnJvbSBtaXNzaW5nIHZhbHVhYmxlIGxpbmVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBmaW5kIG5vbi1lbXB0eSBsaW5lICcke3Jlc3BvbnNlTGluZX0nIHdpdGhvdXQgSFRUUCBoZWFkZXIgZGVsaW1pdGVyICcke0hUVFBfSEVBREVSX0RFTElNSVRFUn0nLmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIGhlYWRlcnMgb2Ygc3ViIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbnMgPSByZXNwb25zZUxpbmUuc3BsaXQoSFRUUF9IRUFERVJfREVMSU1JVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuaGVhZGVycy5zZXQodG9rZW5zWzBdLCB0b2tlbnNbMV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzBdID09PSBIZWFkZXJDb25zdGFudHMuWF9NU19FUlJPUl9DT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5lcnJvckNvZGUgPSB0b2tlbnNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJSZXNwRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXNzZW1ibGUgYm9keSBvZiBzdWIgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuYm9keUFzVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuYm9keUFzVGV4dCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuYm9keUFzVGV4dCArPSByZXNwb25zZUxpbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBJbm5lciBmb3IgZW5kXG4gICAgICAgICAgICAvLyBUaGUgcmVzcG9uc2Ugd2lsbCBjb250YWluIHRoZSBDb250ZW50LUlEIGhlYWRlciBmb3IgZWFjaCBjb3JyZXNwb25kaW5nIHN1YnJlcXVlc3QgcmVzcG9uc2UgdG8gdXNlIGZvciB0cmFja2luZy5cbiAgICAgICAgICAgIC8vIFRoZSBDb250ZW50LUlEcyBhcmUgc2V0IHRvIGEgdmFsaWQgaW5kZXggaW4gdGhlIHN1YnJlcXVlc3RzIHdlIHNlbnQuIEluIHRoZSBzdGF0dXMgY29kZSAyMDIgcGF0aCwgd2UgY291bGQgZXhwZWN0IGl0XG4gICAgICAgICAgICAvLyB0byBiZSAxLTEgbWFwcGluZyBmcm9tIHRoZSBbMCwgc3ViUmVxdWVzdHMuc2l6ZSkgdG8gdGhlIENvbnRlbnQtSURzIHJldHVybmVkLiBJZiBub3QsIHdlIHNpbXBseSBkb24ndCByZXR1cm4gdGhhdFxuICAgICAgICAgICAgLy8gdW5leHBlY3RlZCBzdWJSZXNwb25zZSBpbiB0aGUgcGFyc2VkIHJlcG9uc2UgYW5kIHdlIGNhbiBhbHdheXMgbG9vayBpdCB1cCBpbiB0aGUgcmF3IHJlc3BvbnNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbiAgICAgICAgICAgIGlmIChjb250ZW50SWQgIT09IE5PVF9GT1VORCAmJlxuICAgICAgICAgICAgICAgIE51bWJlci5pc0ludGVnZXIoY29udGVudElkKSAmJlxuICAgICAgICAgICAgICAgIGNvbnRlbnRJZCA+PSAwICYmXG4gICAgICAgICAgICAgICAgY29udGVudElkIDwgdGhpcy5zdWJSZXF1ZXN0cy5zaXplICYmXG4gICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2VzW2NvbnRlbnRJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLl9yZXF1ZXN0ID0gdGhpcy5zdWJSZXF1ZXN0cy5nZXQoY29udGVudElkKTtcbiAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXNbY29udGVudElkXSA9IGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBzdWJSZXNwb25zZXNbJHtpbmRleH1dIGlzIGRyb3BwZWQgYXMgdGhlIENvbnRlbnQtSUQgaXMgbm90IGZvdW5kIG9yIGludmFsaWQsIENvbnRlbnQtSUQ6ICR7Y29udGVudElkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN1YlJlc3BGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXNGYWlsZWRDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3ViUmVzcG9uc2VzOiBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXMsXG4gICAgICAgICAgICBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudDogc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQsXG4gICAgICAgICAgICBzdWJSZXNwb25zZXNGYWlsZWRDb3VudDogc3ViUmVzcG9uc2VzRmFpbGVkQ291bnQsXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbnZhciBNdXRleExvY2tTdGF0dXM7XG4oZnVuY3Rpb24gKE11dGV4TG9ja1N0YXR1cykge1xuICAgIE11dGV4TG9ja1N0YXR1c1tNdXRleExvY2tTdGF0dXNbXCJMT0NLRURcIl0gPSAwXSA9IFwiTE9DS0VEXCI7XG4gICAgTXV0ZXhMb2NrU3RhdHVzW011dGV4TG9ja1N0YXR1c1tcIlVOTE9DS0VEXCJdID0gMV0gPSBcIlVOTE9DS0VEXCI7XG59KShNdXRleExvY2tTdGF0dXMgfHwgKE11dGV4TG9ja1N0YXR1cyA9IHt9KSk7XG4vKipcbiAqIEFuIGFzeW5jIG11dGV4IGxvY2suXG4gKi9cbmNsYXNzIE11dGV4IHtcbiAgICAvKipcbiAgICAgKiBMb2NrIGZvciBhIHNwZWNpZmljIGtleS4gSWYgdGhlIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQgYnkgYW5vdGhlciBjdXN0b21lciwgdGhlblxuICAgICAqIHdpbGwgd2FpdCB1bnRpbCBnZXR0aW5nIHRoZSBsb2NrLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSAtIGxvY2sga2V5XG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIGxvY2soa2V5KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMua2V5c1trZXldID09PSB1bmRlZmluZWQgfHwgdGhpcy5rZXlzW2tleV0gPT09IE11dGV4TG9ja1N0YXR1cy5VTkxPQ0tFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMua2V5c1trZXldID0gTXV0ZXhMb2NrU3RhdHVzLkxPQ0tFRDtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVW5sb2NrRXZlbnQoa2V5LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMua2V5c1trZXldID0gTXV0ZXhMb2NrU3RhdHVzLkxPQ0tFRDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5sb2NrIGEga2V5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSAtXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHVubG9jayhrZXkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXlzW2tleV0gPT09IE11dGV4TG9ja1N0YXR1cy5MT0NLRUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRVbmxvY2tFdmVudChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5c1trZXldO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhdGljIG9uVW5sb2NrRXZlbnQoa2V5LCBoYW5kbGVyKSB7XG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW2tleV0gPSBbaGFuZGxlcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1trZXldLnB1c2goaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGVtaXRVbmxvY2tFdmVudChrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2tleV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxpc3RlbmVyc1trZXldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmxpc3RlbmVyc1trZXldLnNoaWZ0KCk7XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuTXV0ZXgua2V5cyA9IHt9O1xuTXV0ZXgubGlzdGVuZXJzID0ge307XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBIEJsb2JCYXRjaCByZXByZXNlbnRzIGFuIGFnZ3JlZ2F0ZWQgc2V0IG9mIG9wZXJhdGlvbnMgb24gYmxvYnMuXG4gKiBDdXJyZW50bHksIG9ubHkgYGRlbGV0ZWAgYW5kIGBzZXRBY2Nlc3NUaWVyYCBhcmUgc3VwcG9ydGVkLlxuICovXG5jbGFzcyBCbG9iQmF0Y2gge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJhdGNoID0gXCJiYXRjaFwiO1xuICAgICAgICB0aGlzLmJhdGNoUmVxdWVzdCA9IG5ldyBJbm5lckJhdGNoUmVxdWVzdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIENvbnRlbnQtVHlwZSBmb3IgYSBiYXRjaCByZXF1ZXN0LlxuICAgICAqIFRoZSB2YWx1ZSBtdXN0IGJlIG11bHRpcGFydC9taXhlZCB3aXRoIGEgYmF0Y2ggYm91bmRhcnkuXG4gICAgICogRXhhbXBsZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF9hODE3ODZjOC1lMzAxLTRlNDItYTcyOS1hMzJjYTI0YWUyNTJcbiAgICAgKi9cbiAgICBnZXRNdWx0aVBhcnRDb250ZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hSZXF1ZXN0LmdldE11bHRpcGFydENvbnRlbnRUeXBlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhc3NlbWJsZWQgSFRUUCByZXF1ZXN0IGJvZHkgZm9yIHN1YiByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBnZXRIdHRwUmVxdWVzdEJvZHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoUmVxdWVzdC5nZXRIdHRwUmVxdWVzdEJvZHkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHN1YiByZXF1ZXN0cyB0aGF0IGFyZSBhZGRlZCBpbnRvIHRoZSBiYXRjaCByZXF1ZXN0LlxuICAgICAqL1xuICAgIGdldFN1YlJlcXVlc3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaFJlcXVlc3QuZ2V0U3ViUmVxdWVzdHMoKTtcbiAgICB9XG4gICAgYXN5bmMgYWRkU3ViUmVxdWVzdEludGVybmFsKHN1YlJlcXVlc3QsIGFzc2VtYmxlU3ViUmVxdWVzdEZ1bmMpIHtcbiAgICAgICAgYXdhaXQgTXV0ZXgubG9jayh0aGlzLmJhdGNoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0LnByZUFkZFN1YlJlcXVlc3Qoc3ViUmVxdWVzdCk7XG4gICAgICAgICAgICBhd2FpdCBhc3NlbWJsZVN1YlJlcXVlc3RGdW5jKCk7XG4gICAgICAgICAgICB0aGlzLmJhdGNoUmVxdWVzdC5wb3N0QWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IE11dGV4LnVubG9jayh0aGlzLmJhdGNoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRCYXRjaFR5cGUoYmF0Y2hUeXBlKSB7XG4gICAgICAgIGlmICghdGhpcy5iYXRjaFR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hUeXBlID0gYmF0Y2hUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJhdGNoVHlwZSAhPT0gYmF0Y2hUeXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQmxvYkJhdGNoIG9ubHkgc3VwcG9ydHMgb25lIG9wZXJhdGlvbiB0eXBlIHBlciBiYXRjaCBhbmQgaXQgYWxyZWFkeSBpcyBiZWluZyB1c2VkIGZvciAke3RoaXMuYmF0Y2hUeXBlfSBvcGVyYXRpb25zLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZUJsb2IodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JPcHRpb25zLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIGxldCBjcmVkZW50aWFsO1xuICAgICAgICBpZiAodHlwZW9mIHVybE9yQmxvYkNsaWVudCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yT3B0aW9ucyBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxPck9wdGlvbnMgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yT3B0aW9ucykpKSB7XG4gICAgICAgICAgICAvLyBGaXJzdCBvdmVybG9hZFxuICAgICAgICAgICAgdXJsID0gdXJsT3JCbG9iQ2xpZW50O1xuICAgICAgICAgICAgY3JlZGVudGlhbCA9IGNyZWRlbnRpYWxPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsT3JCbG9iQ2xpZW50IGluc3RhbmNlb2YgQmxvYkNsaWVudCkge1xuICAgICAgICAgICAgLy8gU2Vjb25kIG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQudXJsO1xuICAgICAgICAgICAgY3JlZGVudGlhbCA9IHVybE9yQmxvYkNsaWVudC5jcmVkZW50aWFsO1xuICAgICAgICAgICAgb3B0aW9ucyA9IGNyZWRlbnRpYWxPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgYXJndW1lbnRzLiBFaXRoZXIgdXJsIGFuZCBjcmVkZW50aWFsLCBvciBCbG9iQ2xpZW50IG5lZWQgYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmF0Y2hEZWxldGVSZXF1ZXN0LWFkZFN1YlJlcXVlc3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEJhdGNoVHlwZShcImRlbGV0ZVwiKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkU3ViUmVxdWVzdEludGVybmFsKHtcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsOiBjcmVkZW50aWFsLFxuICAgICAgICAgICAgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBCbG9iQ2xpZW50KHVybCwgdGhpcy5iYXRjaFJlcXVlc3QuY3JlYXRlUGlwZWxpbmUoY3JlZGVudGlhbCkpLmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHNldEJsb2JBY2Nlc3NUaWVyKHVybE9yQmxvYkNsaWVudCwgY3JlZGVudGlhbE9yVGllciwgdGllck9yT3B0aW9ucywgb3B0aW9ucykge1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBsZXQgY3JlZGVudGlhbDtcbiAgICAgICAgbGV0IHRpZXI7XG4gICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JUaWVyIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbE9yVGllciBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JUaWVyKSkpIHtcbiAgICAgICAgICAgIC8vIEZpcnN0IG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQ7XG4gICAgICAgICAgICBjcmVkZW50aWFsID0gY3JlZGVudGlhbE9yVGllcjtcbiAgICAgICAgICAgIHRpZXIgPSB0aWVyT3JPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybE9yQmxvYkNsaWVudCBpbnN0YW5jZW9mIEJsb2JDbGllbnQpIHtcbiAgICAgICAgICAgIC8vIFNlY29uZCBvdmVybG9hZFxuICAgICAgICAgICAgdXJsID0gdXJsT3JCbG9iQ2xpZW50LnVybDtcbiAgICAgICAgICAgIGNyZWRlbnRpYWwgPSB1cmxPckJsb2JDbGllbnQuY3JlZGVudGlhbDtcbiAgICAgICAgICAgIHRpZXIgPSBjcmVkZW50aWFsT3JUaWVyO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHRpZXJPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgYXJndW1lbnRzLiBFaXRoZXIgdXJsIGFuZCBjcmVkZW50aWFsLCBvciBCbG9iQ2xpZW50IG5lZWQgYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmF0Y2hTZXRUaWVyUmVxdWVzdC1hZGRTdWJSZXF1ZXN0XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRCYXRjaFR5cGUoXCJzZXRBY2Nlc3NUaWVyXCIpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRTdWJSZXF1ZXN0SW50ZXJuYWwoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWwsXG4gICAgICAgICAgICB9LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IEJsb2JDbGllbnQodXJsLCB0aGlzLmJhdGNoUmVxdWVzdC5jcmVhdGVQaXBlbGluZShjcmVkZW50aWFsKSkuc2V0QWNjZXNzVGllcih0aWVyLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBJbm5lciBiYXRjaCByZXF1ZXN0IGNsYXNzIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBhc3NlbWJsaW5nIGFuZCBzZXJpYWxpemluZyBzdWIgcmVxdWVzdHMuXG4gKiBTZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2gjcmVxdWVzdC1ib2R5IGZvciBob3cgcmVxdWVzdHMgYXJlIGFzc2VtYmxlZC5cbiAqL1xuY2xhc3MgSW5uZXJCYXRjaFJlcXVlc3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9wZXJhdGlvbkNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5ib2R5ID0gXCJcIjtcbiAgICAgICAgY29uc3QgdGVtcEd1aWQgPSBjb3JlVXRpbC5yYW5kb21VVUlEKCk7XG4gICAgICAgIC8vIGJhdGNoX3tiYXRjaGlkfVxuICAgICAgICB0aGlzLmJvdW5kYXJ5ID0gYGJhdGNoXyR7dGVtcEd1aWR9YDtcbiAgICAgICAgLy8gLS1iYXRjaF97YmF0Y2hpZH1cbiAgICAgICAgLy8gQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9odHRwXG4gICAgICAgIC8vIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeVxuICAgICAgICB0aGlzLnN1YlJlcXVlc3RQcmVmaXggPSBgLS0ke3RoaXMuYm91bmRhcnl9JHtIVFRQX0xJTkVfRU5ESU5HfSR7SGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfVFlQRX06IGFwcGxpY2F0aW9uL2h0dHAke0hUVFBfTElORV9FTkRJTkd9JHtIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElOR306IGJpbmFyeWA7XG4gICAgICAgIC8vIG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9YmF0Y2hfe2JhdGNoaWR9XG4gICAgICAgIHRoaXMubXVsdGlwYXJ0Q29udGVudFR5cGUgPSBgbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0ke3RoaXMuYm91bmRhcnl9YDtcbiAgICAgICAgLy8gLS1iYXRjaF97YmF0Y2hpZH0tLVxuICAgICAgICB0aGlzLmJhdGNoUmVxdWVzdEVuZGluZyA9IGAtLSR7dGhpcy5ib3VuZGFyeX0tLWA7XG4gICAgICAgIHRoaXMuc3ViUmVxdWVzdHMgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBwaXBlbGluZSB0byBhc3NlbWJsZSBzdWIgcmVxdWVzdHMuIFRoZSBpZGVhIGhlcmUgaXMgdG8gdXNlIGV4aXN0aW5nXG4gICAgICogY3JlZGVudGlhbCBhbmQgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gY29tcG9uZW50cywgd2l0aCBhZGRpdGlvbmFsIHBvbGljaWVzIHRvXG4gICAgICogZmlsdGVyIHVubmVjZXNzYXJ5IGhlYWRlcnMsIGFzc2VtYmxlIHN1YiByZXF1ZXN0cyBpbnRvIHJlcXVlc3QncyBib2R5XG4gICAgICogYW5kIGludGVyY2VwdCByZXF1ZXN0IGZyb20gZ29pbmcgdG8gd2lyZS5cbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbCAtICBTdWNoIGFzIEFub255bW91c0NyZWRlbnRpYWwsIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIG9yIGFueSBjcmVkZW50aWFsIGZyb20gdGhlIGBAYXp1cmUvaWRlbnRpdHlgIHBhY2thZ2UgdG8gYXV0aGVudGljYXRlIHJlcXVlc3RzIHRvIHRoZSBzZXJ2aWNlLiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBUb2tlbkNyZWRlbnRpYWwgaW50ZXJmYWNlLiBJZiBub3Qgc3BlY2lmaWVkLCBBbm9ueW1vdXNDcmVkZW50aWFsIGlzIHVzZWQuXG4gICAgICovXG4gICAgY3JlYXRlUGlwZWxpbmUoY3JlZGVudGlhbCkge1xuICAgICAgICBjb25zdCBjb3JlUGlwZWxpbmUgPSBjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZUVtcHR5UGlwZWxpbmUoKTtcbiAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShjb3JlQ2xpZW50LnNlcmlhbGl6YXRpb25Qb2xpY3koe1xuICAgICAgICAgICAgc3RyaW5naWZ5WE1MOiBjb3JlWG1sLnN0cmluZ2lmeVhNTCxcbiAgICAgICAgICAgIHNlcmlhbGl6ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgICAgIHhtbENoYXJLZXk6IFwiI1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSwgeyBwaGFzZTogXCJTZXJpYWxpemVcIiB9KTtcbiAgICAgICAgLy8gVXNlIGJhdGNoIGhlYWRlciBmaWx0ZXIgcG9saWN5IHRvIGV4Y2x1ZGUgdW5uZWNlc3NhcnkgaGVhZGVyc1xuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGJhdGNoSGVhZGVyRmlsdGVyUG9saWN5KCkpO1xuICAgICAgICAvLyBVc2UgYmF0Y2ggYXNzZW1ibGUgcG9saWN5IHRvIGFzc2VtYmxlIHJlcXVlc3QgYW5kIGludGVyY2VwdCByZXF1ZXN0IGZyb20gZ29pbmcgdG8gd2lyZVxuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGJhdGNoUmVxdWVzdEFzc2VtYmxlUG9saWN5KHRoaXMpLCB7IGFmdGVyUGhhc2U6IFwiU2lnblwiIH0pO1xuICAgICAgICBpZiAoY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koY29yZVJlc3RQaXBlbGluZS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KHtcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsLFxuICAgICAgICAgICAgICAgIHNjb3BlczogU3RvcmFnZU9BdXRoU2NvcGVzLFxuICAgICAgICAgICAgICAgIGNoYWxsZW5nZUNhbGxiYWNrczogeyBhdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2U6IGNvcmVDbGllbnQuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlIH0sXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhY2NvdW50TmFtZTogY3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgICAgICBhY2NvdW50S2V5OiBjcmVkZW50aWFsLmFjY291bnRLZXksXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUoW10pO1xuICAgICAgICAvLyBhdHRhY2ggdGhlIHYyIHBpcGVsaW5lIHRvIHRoaXMgb25lXG4gICAgICAgIHBpcGVsaW5lLl9jcmVkZW50aWFsID0gY3JlZGVudGlhbDtcbiAgICAgICAgcGlwZWxpbmUuX2NvcmVQaXBlbGluZSA9IGNvcmVQaXBlbGluZTtcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lO1xuICAgIH1cbiAgICBhcHBlbmRTdWJSZXF1ZXN0VG9Cb2R5KHJlcXVlc3QpIHtcbiAgICAgICAgLy8gU3RhcnQgdG8gYXNzZW1ibGUgc3ViIHJlcXVlc3RcbiAgICAgICAgdGhpcy5ib2R5ICs9IFtcbiAgICAgICAgICAgIHRoaXMuc3ViUmVxdWVzdFByZWZpeCwgLy8gc3ViIHJlcXVlc3QgY29uc3RhbnQgcHJlZml4XG4gICAgICAgICAgICBgJHtIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9JRH06ICR7dGhpcy5vcGVyYXRpb25Db3VudH1gLCAvLyBzdWIgcmVxdWVzdCdzIGNvbnRlbnQgSURcbiAgICAgICAgICAgIFwiXCIsIC8vIGVtcHR5IGxpbmUgYWZ0ZXIgc3ViIHJlcXVlc3QncyBjb250ZW50IElEXG4gICAgICAgICAgICBgJHtyZXF1ZXN0Lm1ldGhvZC50b1N0cmluZygpfSAke2dldFVSTFBhdGhBbmRRdWVyeShyZXF1ZXN0LnVybCl9ICR7SFRUUF9WRVJTSU9OXzFfMX0ke0hUVFBfTElORV9FTkRJTkd9YCwgLy8gc3ViIHJlcXVlc3Qgc3RhcnQgbGluZSB3aXRoIG1ldGhvZFxuICAgICAgICBdLmpvaW4oSFRUUF9MSU5FX0VORElORyk7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiByZXF1ZXN0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keSArPSBgJHtuYW1lfTogJHt2YWx1ZX0ke0hUVFBfTElORV9FTkRJTkd9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkgKz0gSFRUUF9MSU5FX0VORElORzsgLy8gc3ViIHJlcXVlc3QncyBoZWFkZXJzIG5lZWQgYmUgZW5kaW5nIHdpdGggYW4gZW1wdHkgbGluZVxuICAgICAgICAvLyBObyBib2R5IHRvIGFzc2VtYmxlIGZvciBjdXJyZW50IGJhdGNoIHJlcXVlc3Qgc3VwcG9ydFxuICAgICAgICAvLyBFbmQgdG8gYXNzZW1ibGUgc3ViIHJlcXVlc3RcbiAgICB9XG4gICAgcHJlQWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbkNvdW50ID49IEJBVENIX01BWF9SRVFVRVNUKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IGV4Y2VlZCAke0JBVENIX01BWF9SRVFVRVNUfSBzdWIgcmVxdWVzdHMgaW4gYSBzaW5nbGUgYmF0Y2hgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGYXN0IGZhaWwgaWYgdXJsIGZvciBzdWIgcmVxdWVzdCBpcyBpbnZhbGlkXG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRVUkxQYXRoKHN1YlJlcXVlc3QudXJsKTtcbiAgICAgICAgaWYgKCFwYXRoIHx8IHBhdGggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHVybCBmb3Igc3ViIHJlcXVlc3Q6ICcke3N1YlJlcXVlc3QudXJsfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwb3N0QWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuc3ViUmVxdWVzdHMuc2V0KHRoaXMub3BlcmF0aW9uQ291bnQsIHN1YlJlcXVlc3QpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbkNvdW50Kys7XG4gICAgfVxuICAgIC8vIFJldHVybiB0aGUgaHR0cCByZXF1ZXN0IGJvZHkgd2l0aCBhc3NlbWJsaW5nIHRoZSBlbmRpbmcgbGluZSB0byB0aGUgc3ViIHJlcXVlc3QgYm9keS5cbiAgICBnZXRIdHRwUmVxdWVzdEJvZHkoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmJvZHl9JHt0aGlzLmJhdGNoUmVxdWVzdEVuZGluZ30ke0hUVFBfTElORV9FTkRJTkd9YDtcbiAgICB9XG4gICAgZ2V0TXVsdGlwYXJ0Q29udGVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGFydENvbnRlbnRUeXBlO1xuICAgIH1cbiAgICBnZXRTdWJSZXF1ZXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViUmVxdWVzdHM7XG4gICAgfVxufVxuZnVuY3Rpb24gYmF0Y2hSZXF1ZXN0QXNzZW1ibGVQb2xpY3koYmF0Y2hSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogXCJiYXRjaFJlcXVlc3RBc3NlbWJsZVBvbGljeVwiLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgICAgICBiYXRjaFJlcXVlc3QuYXBwZW5kU3ViUmVxdWVzdFRvQm9keShyZXF1ZXN0KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZUh0dHBIZWFkZXJzKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiBiYXRjaEhlYWRlckZpbHRlclBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcImJhdGNoSGVhZGVyRmlsdGVyUG9saWN5XCIsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGxldCB4TXNIZWFkZXJOYW1lID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWVdIG9mIHJlcXVlc3QuaGVhZGVycykge1xuICAgICAgICAgICAgICAgIGlmIChpRXF1YWwobmFtZSwgSGVhZGVyQ29uc3RhbnRzLlhfTVNfVkVSU0lPTikpIHtcbiAgICAgICAgICAgICAgICAgICAgeE1zSGVhZGVyTmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHhNc0hlYWRlck5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZGVsZXRlKHhNc0hlYWRlck5hbWUpOyAvLyBUaGUgc3VicmVxdWVzdHMgc2hvdWxkIG5vdCBoYXZlIHRoZSB4LW1zLXZlcnNpb24gaGVhZGVyLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgQmxvYkJhdGNoQ2xpZW50IGFsbG93cyB5b3UgdG8gbWFrZSBiYXRjaGVkIHJlcXVlc3RzIHRvIHRoZSBBenVyZSBTdG9yYWdlIEJsb2Igc2VydmljZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoXG4gKi9cbmNsYXNzIEJsb2JCYXRjaENsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXJsLCBjcmVkZW50aWFsT3JQaXBlbGluZSwgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZSkpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWNyZWRlbnRpYWxPclBpcGVsaW5lKSB7XG4gICAgICAgICAgICAvLyBubyBjcmVkZW50aWFsIHByb3ZpZGVkXG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShjcmVkZW50aWFsT3JQaXBlbGluZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcmFnZUNsaWVudENvbnRleHQgPSBuZXcgU3RvcmFnZUNvbnRleHRDbGllbnQodXJsLCBnZXRDb3JlQ2xpZW50T3B0aW9ucyhwaXBlbGluZSkpO1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0VVJMUGF0aCh1cmwpO1xuICAgICAgICBpZiAocGF0aCAmJiBwYXRoICE9PSBcIi9cIikge1xuICAgICAgICAgICAgLy8gQ29udGFpbmVyIHNjb3BlZC5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZU9yQ29udGFpbmVyQ29udGV4dCA9IHN0b3JhZ2VDbGllbnRDb250ZXh0LmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZU9yQ29udGFpbmVyQ29udGV4dCA9IHN0b3JhZ2VDbGllbnRDb250ZXh0LnNlcnZpY2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBCbG9iQmF0Y2h9LlxuICAgICAqIEEgQmxvYkJhdGNoIHJlcHJlc2VudHMgYW4gYWdncmVnYXRlZCBzZXQgb2Ygb3BlcmF0aW9ucyBvbiBibG9icy5cbiAgICAgKi9cbiAgICBjcmVhdGVCYXRjaCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iQmF0Y2goKTtcbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlQmxvYnModXJsc09yQmxvYkNsaWVudHMsIGNyZWRlbnRpYWxPck9wdGlvbnMsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYmF0Y2ggPSBuZXcgQmxvYkJhdGNoKCk7XG4gICAgICAgIGZvciAoY29uc3QgdXJsT3JCbG9iQ2xpZW50IG9mIHVybHNPckJsb2JDbGllbnRzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybE9yQmxvYkNsaWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGF3YWl0IGJhdGNoLmRlbGV0ZUJsb2IodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGJhdGNoLmRlbGV0ZUJsb2IodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRCYXRjaChiYXRjaCk7XG4gICAgfVxuICAgIGFzeW5jIHNldEJsb2JzQWNjZXNzVGllcih1cmxzT3JCbG9iQ2xpZW50cywgY3JlZGVudGlhbE9yVGllciwgdGllck9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBiYXRjaCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgICAgZm9yIChjb25zdCB1cmxPckJsb2JDbGllbnQgb2YgdXJsc09yQmxvYkNsaWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guc2V0QmxvYkFjY2Vzc1RpZXIodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGJhdGNoLnNldEJsb2JBY2Nlc3NUaWVyKHVybE9yQmxvYkNsaWVudCwgY3JlZGVudGlhbE9yVGllciwgdGllck9yT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0QmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdWJtaXQgYmF0Y2ggcmVxdWVzdCB3aGljaCBjb25zaXN0cyBvZiBtdWx0aXBsZSBzdWJyZXF1ZXN0cy5cbiAgICAgKlxuICAgICAqIEdldCBgYmxvYkJhdGNoQ2xpZW50YCBhbmQgb3RoZXIgZGV0YWlscyBiZWZvcmUgcnVubmluZyB0aGUgc25pcHBldHMuXG4gICAgICogYGJsb2JTZXJ2aWNlQ2xpZW50LmdldEJsb2JCYXRjaENsaWVudCgpYCBnaXZlcyB0aGUgYGJsb2JCYXRjaENsaWVudGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBiYXRjaFJlcXVlc3QgPSBuZXcgQmxvYkJhdGNoKCk7XG4gICAgICogYXdhaXQgYmF0Y2hSZXF1ZXN0LmRlbGV0ZUJsb2IodXJsSW5TdHJpbmcwLCBjcmVkZW50aWFsMCk7XG4gICAgICogYXdhaXQgYmF0Y2hSZXF1ZXN0LmRlbGV0ZUJsb2IodXJsSW5TdHJpbmcxLCBjcmVkZW50aWFsMSwge1xuICAgICAqICBkZWxldGVTbmFwc2hvdHM6IFwiaW5jbHVkZVwiXG4gICAgICogfSk7XG4gICAgICogY29uc3QgYmF0Y2hSZXNwID0gYXdhaXQgYmxvYkJhdGNoQ2xpZW50LnN1Ym1pdEJhdGNoKGJhdGNoUmVxdWVzdCk7XG4gICAgICogY29uc29sZS5sb2coYmF0Y2hSZXNwLnN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYSBsZWFzZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGJhdGNoUmVxdWVzdCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgKiBhd2FpdCBiYXRjaFJlcXVlc3Quc2V0QmxvYkFjY2Vzc1RpZXIoYmxvY2tCbG9iQ2xpZW50MCwgXCJDb29sXCIpO1xuICAgICAqIGF3YWl0IGJhdGNoUmVxdWVzdC5zZXRCbG9iQWNjZXNzVGllcihibG9ja0Jsb2JDbGllbnQxLCBcIkNvb2xcIiwge1xuICAgICAqICBjb25kaXRpb25zOiB7IGxlYXNlSWQ6IGxlYXNlSWQgfVxuICAgICAqIH0pO1xuICAgICAqIGNvbnN0IGJhdGNoUmVzcCA9IGF3YWl0IGJsb2JCYXRjaENsaWVudC5zdWJtaXRCYXRjaChiYXRjaFJlcXVlc3QpO1xuICAgICAqIGNvbnNvbGUubG9nKGJhdGNoUmVzcC5zdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmF0Y2hSZXF1ZXN0IC0gQSBzZXQgb2YgRGVsZXRlIG9yIFNldFRpZXIgb3BlcmF0aW9ucy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgc3VibWl0QmF0Y2goYmF0Y2hSZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFiYXRjaFJlcXVlc3QgfHwgYmF0Y2hSZXF1ZXN0LmdldFN1YlJlcXVlc3RzKCkuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCYXRjaCByZXF1ZXN0IHNob3VsZCBjb250YWluIG9uZSBvciBtb3JlIHN1YiByZXF1ZXN0cy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQmF0Y2hDbGllbnQtc3VibWl0QmF0Y2hcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXRjaFJlcXVlc3RCb2R5ID0gYmF0Y2hSZXF1ZXN0LmdldEh0dHBSZXF1ZXN0Qm9keSgpO1xuICAgICAgICAgICAgLy8gU2VydmljZVN1Ym1pdEJhdGNoUmVzcG9uc2VNb2RlbCBhbmQgQ29udGFpbmVyU3VibWl0QmF0Y2hSZXNwb25zZSBhcmUgY29tcGF0aWJsZSBmb3Igbm93LlxuICAgICAgICAgICAgY29uc3QgcmF3QmF0Y2hSZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZU9yQ29udGFpbmVyQ29udGV4dC5zdWJtaXRCYXRjaCh1dGY4Qnl0ZUxlbmd0aChiYXRjaFJlcXVlc3RCb2R5KSwgYmF0Y2hSZXF1ZXN0LmdldE11bHRpUGFydENvbnRlbnRUeXBlKCksIGJhdGNoUmVxdWVzdEJvZHksIE9iamVjdC5hc3NpZ24oe30sIHVwZGF0ZWRPcHRpb25zKSkpO1xuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHN1YiByZXNwb25zZXMgcmVzdWx0LCBpZiBsb2dpYyByZWFjaGVzIGhlcmUoaS5lLiB0aGUgYmF0Y2ggcmVxdWVzdCBzdWNjZWVkZWQgd2l0aCBzdGF0dXMgY29kZSAyMDIpLlxuICAgICAgICAgICAgY29uc3QgYmF0Y2hSZXNwb25zZVBhcnNlciA9IG5ldyBCYXRjaFJlc3BvbnNlUGFyc2VyKHJhd0JhdGNoUmVzcG9uc2UsIGJhdGNoUmVxdWVzdC5nZXRTdWJSZXF1ZXN0cygpKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlU3VtbWFyeSA9IGF3YWl0IGJhdGNoUmVzcG9uc2VQYXJzZXIucGFyc2VCYXRjaFJlc3BvbnNlKCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgX3Jlc3BvbnNlOiByYXdCYXRjaFJlc3BvbnNlLl9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogcmF3QmF0Y2hSZXNwb25zZS5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IHJhd0JhdGNoUmVzcG9uc2UuZXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmF3QmF0Y2hSZXNwb25zZS5yZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiByYXdCYXRjaFJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiByYXdCYXRjaFJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzOiByZXNwb25zZVN1bW1hcnkuc3ViUmVzcG9uc2VzLFxuICAgICAgICAgICAgICAgIHN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50OiByZXNwb25zZVN1bW1hcnkuc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQsXG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzRmFpbGVkQ291bnQ6IHJlc3BvbnNlU3VtbWFyeS5zdWJSZXNwb25zZXNGYWlsZWRDb3VudCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBDb250YWluZXJDbGllbnQgcmVwcmVzZW50cyBhIFVSTCB0byB0aGUgQXp1cmUgU3RvcmFnZSBjb250YWluZXIgYWxsb3dpbmcgeW91IHRvIG1hbmlwdWxhdGUgaXRzIGJsb2JzLlxuICovXG5jbGFzcyBDb250YWluZXJDbGllbnQgZXh0ZW5kcyBTdG9yYWdlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyLlxuICAgICAqL1xuICAgIGdldCBjb250YWluZXJOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyTmFtZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IodXJsT3JDb25uZWN0aW9uU3RyaW5nLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzO1xuICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0aW5nIG5vbi1lbXB0eSBzdHJpbmdzIGZvciBjb250YWluZXJOYW1lIHBhcmFtZXRlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyTmFtZSA9IHRoaXMuZ2V0Q29udGFpbmVyTmFtZUZyb21VcmwoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5jb250YWluZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgY29udGFpbmVyIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC4gSWYgdGhlIGNvbnRhaW5lciB3aXRoXG4gICAgICogdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlIG9wZXJhdGlvbiBmYWlscy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtY29udGFpbmVyXG4gICAgICogTmFtaW5nIHJ1bGVzOiBAc2VlIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1jb250YWluZXJzLS1ibG9icy0tYW5kLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIENyZWF0ZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjxjb250YWluZXIgbmFtZT5cIik7XG4gICAgICogY29uc3QgY3JlYXRlQ29udGFpbmVyUmVzcG9uc2UgPSBhd2FpdCBjb250YWluZXJDbGllbnQuY3JlYXRlKCk7XG4gICAgICogY29uc29sZS5sb2coXCJDb250YWluZXIgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5XCIsIGNyZWF0ZUNvbnRhaW5lclJlc3BvbnNlLnJlcXVlc3RJZCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1jcmVhdGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmNyZWF0ZSh1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb250YWluZXIgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LiBJZiB0aGUgY29udGFpbmVyIHdpdGhcbiAgICAgKiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCBpdCBpcyBub3QgY2hhbmdlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtY29udGFpbmVyXG4gICAgICogTmFtaW5nIHJ1bGVzOiBAc2VlIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1jb250YWluZXJzLS1ibG9icy0tYW5kLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSWZOb3RFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWNyZWF0ZUlmTm90RXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jcmVhdGUodXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IHRydWUgfSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gZS5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3JDb2RlKSA9PT0gXCJDb250YWluZXJBbHJlYWR5RXhpc3RzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBBenVyZSBjb250YWluZXIgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbGllbnQgZXhpc3RzOyBmYWxzZSBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBOT1RFOiB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoIGNhcmUgc2luY2UgYW4gZXhpc3RpbmcgY29udGFpbmVyIG1pZ2h0IGJlIGRlbGV0ZWQgYnkgb3RoZXIgY2xpZW50cyBvclxuICAgICAqIGFwcGxpY2F0aW9ucy4gVmljZSB2ZXJzYSBuZXcgY29udGFpbmVycyB3aXRoIHRoZSBzYW1lIG5hbWUgbWlnaHQgYmUgYWRkZWQgYnkgb3RoZXIgY2xpZW50cyBvclxuICAgICAqIGFwcGxpY2F0aW9ucyBhZnRlciB0aGlzIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBleGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmxvYkNsaWVudH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iTmFtZSAtIEEgYmxvYiBuYW1lXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkNsaWVudCBvYmplY3QgZm9yIHRoZSBnaXZlbiBibG9iIG5hbWUuXG4gICAgICovXG4gICAgZ2V0QmxvYkNsaWVudChibG9iTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIHtAbGluayBBcHBlbmRCbG9iQ2xpZW50fVxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gQW4gYXBwZW5kIGJsb2IgbmFtZVxuICAgICAqL1xuICAgIGdldEFwcGVuZEJsb2JDbGllbnQoYmxvYk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcHBlbmRCbG9iQ2xpZW50KGFwcGVuZFRvVVJMUGF0aCh0aGlzLnVybCwgRXNjYXBlUGF0aChibG9iTmFtZSkpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBCbG9ja0Jsb2JDbGllbnR9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBBIGJsb2NrIGJsb2IgbmFtZVxuICAgICAqXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb250ZW50ID0gXCJIZWxsbyB3b3JsZCFcIjtcbiAgICAgKlxuICAgICAqIGNvbnN0IGJsb2NrQmxvYkNsaWVudCA9IGNvbnRhaW5lckNsaWVudC5nZXRCbG9ja0Jsb2JDbGllbnQoXCI8YmxvYiBuYW1lPlwiKTtcbiAgICAgKiBjb25zdCB1cGxvYWRCbG9iUmVzcG9uc2UgPSBhd2FpdCBibG9ja0Jsb2JDbGllbnQudXBsb2FkKGNvbnRlbnQsIGNvbnRlbnQubGVuZ3RoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZXRCbG9ja0Jsb2JDbGllbnQoYmxvYk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0Jsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIFBhZ2VCbG9iQ2xpZW50fVxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gQSBwYWdlIGJsb2IgbmFtZVxuICAgICAqL1xuICAgIGdldFBhZ2VCbG9iQ2xpZW50KGJsb2JOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGFnZUJsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCB1c2VyLWRlZmluZWQgbWV0YWRhdGEgYW5kIHN5c3RlbSBwcm9wZXJ0aWVzIGZvciB0aGUgc3BlY2lmaWVkXG4gICAgICogY29udGFpbmVyLiBUaGUgZGF0YSByZXR1cm5lZCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBjb250YWluZXIncyBsaXN0IG9mIGJsb2JzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1jb250YWluZXItcHJvcGVydGllc1xuICAgICAqXG4gICAgICogV0FSTklORzogVGhlIGBtZXRhZGF0YWAgb2JqZWN0IHJldHVybmVkIGluIHRoZSByZXNwb25zZSB3aWxsIGhhdmUgaXRzIGtleXMgaW4gbG93ZXJjYXNlLCBldmVuIGlmXG4gICAgICogdGhleSBvcmlnaW5hbGx5IGNvbnRhaW5lZCB1cHBlcmNhc2UgY2hhcmFjdGVycy4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIG1ldGFkYXRhIGtleXMgcmV0dXJuZWQgYnlcbiAgICAgKiB0aGUgYGxpc3RDb250YWluZXJzYCBtZXRob2Qgb2Yge0BsaW5rIEJsb2JTZXJ2aWNlQ2xpZW50fSB1c2luZyB0aGUgYGluY2x1ZGVNZXRhZGF0YWAgb3B0aW9uLCB3aGljaFxuICAgICAqIHdpbGwgcmV0YWluIHRoZWlyIG9yaWdpbmFsIGNhc2luZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFByb3BlcnRpZXMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1nZXRQcm9wZXJ0aWVzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5nZXRQcm9wZXJ0aWVzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBmb3IgZGVsZXRpb24uIFRoZSBjb250YWluZXIgYW5kIGFueSBibG9ic1xuICAgICAqIGNvbnRhaW5lZCB3aXRoaW4gaXQgYXJlIGxhdGVyIGRlbGV0ZWQgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9kZWxldGUtY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZGVsZXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5kZWxldGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGZvciBkZWxldGlvbiBpZiBpdCBleGlzdHMuIFRoZSBjb250YWluZXIgYW5kIGFueSBibG9ic1xuICAgICAqIGNvbnRhaW5lZCB3aXRoaW4gaXQgYXJlIGxhdGVyIGRlbGV0ZWQgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9kZWxldGUtY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlSWZFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWRlbGV0ZUlmRXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWxldGUodXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IHRydWUgfSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gZS5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3JDb2RlKSA9PT0gXCJDb250YWluZXJOb3RGb3VuZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IGZhbHNlIH0sIChfYiA9IGUucmVzcG9uc2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wYXJzZWRIZWFkZXJzKSwgeyBfcmVzcG9uc2U6IGUucmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9uZSBvciBtb3JlIHVzZXItZGVmaW5lZCBuYW1lLXZhbHVlIHBhaXJzIGZvciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIElmIG5vIG9wdGlvbiBwcm92aWRlZCwgb3Igbm8gbWV0YWRhdGEgZGVmaW5lZCBpbiB0aGUgcGFyYW1ldGVyLCB0aGUgY29udGFpbmVyXG4gICAgICogbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWNvbnRhaW5lci1tZXRhZGF0YVxuICAgICAqXG4gICAgICogQHBhcmFtIG1ldGFkYXRhIC0gUmVwbGFjZSBleGlzdGluZyBtZXRhZGF0YSB3aXRoIHRoaXMgdmFsdWUuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gdmFsdWUgcHJvdmlkZWQgdGhlIGV4aXN0aW5nIG1ldGFkYXRhIHdpbGwgYmUgcmVtb3ZlZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIFNldCBNZXRhZGF0YSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc2V0TWV0YWRhdGEobWV0YWRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uZGl0aW9ucy5pZlVubW9kaWZpZWRTaW5jZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0aGUgSWZVbm1vZGlmaWVkU2luY2UgbXVzdCBoYXZlIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGJlY2F1c2UgdGhleSBhcmUgaWdub3JlZCBieSB0aGUgYmxvYiBzZXJ2aWNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LXNldE1ldGFkYXRhXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5zZXRNZXRhZGF0YSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGVcbiAgICAgKiB3aGV0aGVyIGNvbnRhaW5lciBkYXRhIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKlxuICAgICAqIFdBUk5JTkc6IEphdmFTY3JpcHQgRGF0ZSB3aWxsIHBvdGVudGlhbGx5IGxvc2UgcHJlY2lzaW9uIHdoZW4gcGFyc2luZyBzdGFydHNPbiBhbmQgZXhwaXJlc09uIHN0cmluZ3MuXG4gICAgICogRm9yIGV4YW1wbGUsIG5ldyBEYXRlKFwiMjAxOC0xMi0zMVQwMzo0NDoyMy44ODI3ODkxWlwiKS50b0lTT1N0cmluZygpIHdpbGwgZ2V0IFwiMjAxOC0xMi0zMVQwMzo0NDoyMy44ODJaXCIuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtY29udGFpbmVyLWFjbFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBHZXQgQWNjZXNzIFBvbGljeSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjZXNzUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZ2V0QWNjZXNzUG9saWN5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQuZ2V0QWNjZXNzUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgYmxvYlB1YmxpY0FjY2VzczogcmVzcG9uc2UuYmxvYlB1YmxpY0FjY2VzcyxcbiAgICAgICAgICAgICAgICBkYXRlOiByZXNwb25zZS5kYXRlLFxuICAgICAgICAgICAgICAgIGV0YWc6IHJlc3BvbnNlLmV0YWcsXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlOiByZXNwb25zZS5lcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiByZXNwb25zZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXNwb25zZS5yZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiByZXNwb25zZS5jbGllbnRSZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgc2lnbmVkSWRlbnRpZmllcnM6IFtdLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZGVudGlmaWVyIG9mIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFjY2Vzc1BvbGljeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NQb2xpY3kuZXhwaXJlc09uID0gbmV3IERhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuc3RhcnRzT24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc1BvbGljeS5zdGFydHNPbiA9IG5ldyBEYXRlKGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnN0YXJ0c09uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMuc2lnbmVkSWRlbnRpZmllcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc1BvbGljeSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlkZW50aWZpZXIuaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGVcbiAgICAgKiB3aGV0aGVyIGJsb2JzIGluIGEgY29udGFpbmVyIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKlxuICAgICAqIFdoZW4geW91IHNldCBwZXJtaXNzaW9ucyBmb3IgYSBjb250YWluZXIsIHRoZSBleGlzdGluZyBwZXJtaXNzaW9ucyBhcmUgcmVwbGFjZWQuXG4gICAgICogSWYgbm8gYWNjZXNzIG9yIGNvbnRhaW5lckFjbCBwcm92aWRlZCwgdGhlIGV4aXN0aW5nIGNvbnRhaW5lciBBQ0wgd2lsbCBiZVxuICAgICAqIHJlbW92ZWQuXG4gICAgICpcbiAgICAgKiBXaGVuIHlvdSBlc3RhYmxpc2ggYSBzdG9yZWQgYWNjZXNzIHBvbGljeSBvbiBhIGNvbnRhaW5lciwgaXQgbWF5IHRha2UgdXAgdG8gMzAgc2Vjb25kcyB0byB0YWtlIGVmZmVjdC5cbiAgICAgKiBEdXJpbmcgdGhpcyBpbnRlcnZhbCwgYSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RvcmVkIGFjY2VzcyBwb2xpY3kgd2lsbFxuICAgICAqIGZhaWwgd2l0aCBzdGF0dXMgY29kZSA0MDMgKEZvcmJpZGRlbiksIHVudGlsIHRoZSBhY2Nlc3MgcG9saWN5IGJlY29tZXMgYWN0aXZlLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1jb250YWluZXItYWNsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWNjZXNzIC0gVGhlIGxldmVsIG9mIHB1YmxpYyBhY2Nlc3MgdG8gZGF0YSBpbiB0aGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBjb250YWluZXJBY2wgLSBBcnJheSBvZiBlbGVtZW50cyBlYWNoIGhhdmluZyBhIHVuaXF1ZSBJZCBhbmQgZGV0YWlscyBvZiB0aGUgYWNjZXNzIHBvbGljeS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIFNldCBBY2Nlc3MgUG9saWN5IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRBY2Nlc3NQb2xpY3koYWNjZXNzLCBjb250YWluZXJBY2wsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LXNldEFjY2Vzc1BvbGljeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjbCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZGVudGlmaWVyIG9mIGNvbnRhaW5lckFjbCB8fCBbXSkge1xuICAgICAgICAgICAgICAgIGFjbC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBpcmVzT246IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LmV4cGlyZXNPblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOiBpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5wZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0c09uOiBpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5zdGFydHNPblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuc3RhcnRzT24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpZDogaWRlbnRpZmllci5pZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQuc2V0QWNjZXNzUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBhY2Nlc3MsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyQWNsOiBhY2wsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEge0BsaW5rIEJsb2JMZWFzZUNsaWVudH0gdGhhdCBtYW5hZ2VzIGxlYXNlcyBvbiB0aGUgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bvc2VMZWFzZUlkIC0gSW5pdGlhbCBwcm9wb3NlZCBsZWFzZSBJZC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iTGVhc2VDbGllbnQgb2JqZWN0IGZvciBtYW5hZ2luZyBsZWFzZXMgb24gdGhlIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBnZXRCbG9iTGVhc2VDbGllbnQocHJvcG9zZUxlYXNlSWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iTGVhc2VDbGllbnQodGhpcywgcHJvcG9zZUxlYXNlSWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGJsb2NrIGJsb2IsIG9yIHVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFVwZGF0aW5nIGFuIGV4aXN0aW5nIGJsb2NrIGJsb2Igb3ZlcndyaXRlcyBhbnkgZXhpc3RpbmcgbWV0YWRhdGEgb24gdGhlIGJsb2IuXG4gICAgICogUGFydGlhbCB1cGRhdGVzIGFyZSBub3Qgc3VwcG9ydGVkOyB0aGUgY29udGVudCBvZiB0aGUgZXhpc3RpbmcgYmxvYiBpc1xuICAgICAqIG92ZXJ3cml0dGVuIHdpdGggdGhlIG5ldyBjb250ZW50LiBUbyBwZXJmb3JtIGEgcGFydGlhbCB1cGRhdGUgb2YgYSBibG9jayBibG9iJ3MsXG4gICAgICogdXNlIHtAbGluayBCbG9ja0Jsb2JDbGllbnQuc3RhZ2VCbG9ja30gYW5kIHtAbGluayBCbG9ja0Jsb2JDbGllbnQuY29tbWl0QmxvY2tMaXN0fS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBub24tcGFyYWxsZWwgdXBsb2FkaW5nIG1ldGhvZCwgcGxlYXNlIHVzZSB7QGxpbmsgQmxvY2tCbG9iQ2xpZW50LnVwbG9hZEZpbGV9LFxuICAgICAqIHtAbGluayBCbG9ja0Jsb2JDbGllbnQudXBsb2FkU3RyZWFtfSBvciB7QGxpbmsgQmxvY2tCbG9iQ2xpZW50LnVwbG9hZEJyb3dzZXJEYXRhfSBmb3IgYmV0dGVyXG4gICAgICogcGVyZm9ybWFuY2Ugd2l0aCBjb25jdXJyZW5jeSB1cGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gTmFtZSBvZiB0aGUgYmxvY2sgYmxvYiB0byBjcmVhdGUgb3IgdXBkYXRlLlxuICAgICAqIEBwYXJhbSBib2R5IC0gQmxvYiwgc3RyaW5nLCBBcnJheUJ1ZmZlciwgQXJyYXlCdWZmZXJWaWV3IG9yIGEgZnVuY3Rpb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCByZXR1cm5zIGEgbmV3IFJlYWRhYmxlIHN0cmVhbSB3aG9zZSBvZmZzZXQgaXMgZnJvbSBkYXRhIHNvdXJjZSBiZWdpbm5pbmcuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggLSBMZW5ndGggb2YgYm9keSBpbiBieXRlcy4gVXNlIEJ1ZmZlci5ieXRlTGVuZ3RoKCkgdG8gY2FsY3VsYXRlIGJvZHkgbGVuZ3RoIGZvciBhXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGluY2x1ZGluZyBub24gbm9uLUJhc2U2NC9IZXgtZW5jb2RlZCBjaGFyYWN0ZXJzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIEJsb2NrIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBCbG9jayBCbG9iIHVwbG9hZCByZXNwb25zZSBkYXRhIGFuZCB0aGUgY29ycmVzcG9uZGluZyBCbG9ja0Jsb2JDbGllbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkQmxvY2tCbG9iKGJsb2JOYW1lLCBib2R5LCBjb250ZW50TGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtdXBsb2FkQmxvY2tCbG9iXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tCbG9iQ2xpZW50ID0gdGhpcy5nZXRCbG9ja0Jsb2JDbGllbnQoYmxvYk5hbWUpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBibG9ja0Jsb2JDbGllbnQudXBsb2FkKGJvZHksIGNvbnRlbnRMZW5ndGgsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmxvY2tCbG9iQ2xpZW50LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgYmxvYiBvciBzbmFwc2hvdCBmb3IgZGVsZXRpb24uIFRoZSBibG9iIGlzIGxhdGVyIGRlbGV0ZWRcbiAgICAgKiBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLiBOb3RlIHRoYXQgaW4gb3JkZXIgdG8gZGVsZXRlIGEgYmxvYiwgeW91IG11c3QgZGVsZXRlXG4gICAgICogYWxsIG9mIGl0cyBzbmFwc2hvdHMuIFlvdSBjYW4gZGVsZXRlIGJvdGggYXQgdGhlIHNhbWUgdGltZSB3aXRoIHRoZSBEZWxldGVcbiAgICAgKiBCbG9iIG9wZXJhdGlvbi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9kZWxldGUtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQmxvYiBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIEJsb2NrIGJsb2IgZGVsZXRpb24gcmVzcG9uc2UgZGF0YS5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVCbG9iKGJsb2JOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZGVsZXRlQmxvYlwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCBibG9iQ2xpZW50ID0gdGhpcy5nZXRCbG9iQ2xpZW50KGJsb2JOYW1lKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgICAgIGJsb2JDbGllbnQgPSBibG9iQ2xpZW50LndpdGhWZXJzaW9uKG9wdGlvbnMudmVyc2lvbklkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBibG9iQ2xpZW50LmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBsaXN0QmxvYkZsYXRTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBibG9icyBzdGFydGluZyBmcm9tIHRoZVxuICAgICAqIHNwZWNpZmllZCBNYXJrZXIuIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGxpc3RCbG9ic0ZsYXRTZWdtZW50IGFnYWluXG4gICAgICogKHBhc3NpbmcgdGhlIHRoZSBwcmV2aW91c2x5LXJldHVybmVkIE1hcmtlcikgdG8gZ2V0IHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGlzdC1ibG9ic1xuICAgICAqXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZiB0aGUgbGlzdCB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgTGlzdCBCbG9iIEZsYXQgU2VnbWVudCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgbGlzdEJsb2JGbGF0U2VnbWVudChtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1saXN0QmxvYkZsYXRTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQubGlzdEJsb2JGbGF0U2VnbWVudChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBtYXJrZXIgfSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UuX3Jlc3BvbnNlKSwgeyBwYXJzZWRCb2R5OiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JGbGF0KHJlc3BvbnNlLl9yZXNwb25zZS5wYXJzZWRCb2R5KSB9KSwgc2VnbWVudDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5zZWdtZW50KSwgeyBibG9iSXRlbXM6IHJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zLm1hcCgoYmxvYkl0ZW1JbnRlcm5hbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYkl0ZW0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JJdGVtSW50ZXJuYWwpLCB7IG5hbWU6IEJsb2JOYW1lVG9TdHJpbmcoYmxvYkl0ZW1JbnRlcm5hbC5uYW1lKSwgdGFnczogdG9UYWdzKGJsb2JJdGVtSW50ZXJuYWwuYmxvYlRhZ3MpLCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM6IHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQoYmxvYkl0ZW1JbnRlcm5hbC5vYmplY3RSZXBsaWNhdGlvbk1ldGFkYXRhKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9iSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgfSkgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBibG9icyBzdGFydGluZyBmcm9tXG4gICAgICogdGhlIHNwZWNpZmllZCBNYXJrZXIuIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGVcbiAgICAgKiBiZWdpbm5pbmcuIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGxpc3RCbG9ic0hpZXJhcmNoaWNhbFNlZ21lbnRcbiAgICAgKiBhZ2FpbiAocGFzc2luZyB0aGUgdGhlIHByZXZpb3VzbHktcmV0dXJuZWQgTWFya2VyKSB0byBnZXQgdGhlIG5leHQgc2VnbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9saXN0LWJsb2JzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZiB0aGUgbGlzdCB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgTGlzdCBCbG9iIEhpZXJhcmNoeSBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQoZGVsaW1pdGVyLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQoZGVsaW1pdGVyLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBtYXJrZXIgfSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UuX3Jlc3BvbnNlKSwgeyBwYXJzZWRCb2R5OiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JIaWVyYXJjaHkocmVzcG9uc2UuX3Jlc3BvbnNlLnBhcnNlZEJvZHkpIH0pLCBzZWdtZW50OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlLnNlZ21lbnQpLCB7IGJsb2JJdGVtczogcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMubWFwKChibG9iSXRlbUludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iSXRlbSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYkl0ZW1JbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVybmFsLm5hbWUpLCB0YWdzOiB0b1RhZ3MoYmxvYkl0ZW1JbnRlcm5hbC5ibG9iVGFncyksIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChibG9iSXRlbUludGVybmFsLm9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGEpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgICAgICAgICB9KSwgYmxvYlByZWZpeGVzOiAoX2EgPSByZXNwb25zZS5zZWdtZW50LmJsb2JQcmVmaXhlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgoYmxvYlByZWZpeEludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iUHJlZml4ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iUHJlZml4SW50ZXJuYWwpLCB7IG5hbWU6IEJsb2JOYW1lVG9TdHJpbmcoYmxvYlByZWZpeEludGVybmFsLm5hbWUpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JQcmVmaXg7XG4gICAgICAgICAgICAgICAgICAgIH0pIH0pIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRSZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50UmVzcG9uc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgYmxvYnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBibG9icyByZW1haW5pbmcgdG8gYmUgbGlzdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGN1cnJlbnQgcGFnZS4gVGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RTZWdtZW50cyhtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0U2VnbWVudHNfMShtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMubGlzdEJsb2JGbGF0U2VnbWVudChtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3Igb2Yge0BsaW5rIEJsb2JJdGVtfSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0SXRlbXNfMShvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RTZWdtZW50cyhtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgYWxsIHRoZSBibG9ic1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGJsb2JzIGluIHBhZ2VzLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgZm9yIGF3YWl0YCBzeW50YXg6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIEdldCB0aGUgY29udGFpbmVyQ2xpZW50IGJlZm9yZSB5b3UgcnVuIHRoZXNlIHNuaXBwZXRzLFxuICAgICAqIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8eW91ci1jb250YWluZXItbmFtZT5cIik7YFxuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IGJsb2Igb2YgY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0ZsYXQoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNGbGF0KCk7XG4gICAgICogbGV0IGJsb2JJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFibG9iSXRlbS5kb25lKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYkl0ZW0udmFsdWUubmFtZX1gKTtcbiAgICAgKiAgIGJsb2JJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgYnlQYWdlKClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBwYXNzaW5nIG9wdGlvbmFsIG1heFBhZ2VTaXplIGluIHRoZSBwYWdlIHNldHRpbmdzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2YgY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0ZsYXQoKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMjAgfSkpIHtcbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgcGFnaW5nIHdpdGggYSBtYXJrZXI6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlcmF0b3IgPSBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgYmxvYiBuYW1lc1xuICAgICAqIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqXG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqXG4gICAgICogaXRlcmF0b3IgPSBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpLmJ5UGFnZSh7IGNvbnRpbnVhdGlvblRva2VuOiBtYXJrZXIsIG1heFBhZ2VTaXplOiAxMCB9KTtcbiAgICAgKiByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDEwIGJsb2IgbmFtZXNcbiAgICAgKiBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMuXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RCbG9ic0ZsYXQob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUNvcHkpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImNvcHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJtZXRhZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlU25hcHNob3RzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJzbmFwc2hvdHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ2ZXJzaW9uc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVW5jb21taXRlZEJsb2JzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ1bmNvbW1pdHRlZGJsb2JzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVUYWdzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ0YWdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVEZWxldGVkV2l0aFZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJkZWxldGVkd2l0aHZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImltbXV0YWJpbGl0eXBvbGljeVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTGVnYWxIb2xkKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJsZWdhbGhvbGRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnByZWZpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIChpbmNsdWRlLmxlbmd0aCA+IDAgPyB7IGluY2x1ZGU6IGluY2x1ZGUgfSA6IHt9KSk7XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdEl0ZW1zKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RTZWdtZW50cyhzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCB1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEhpZXJhcmNoeVNlZ21lbnRzKGRlbGltaXRlcl8xLCBtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0SGllcmFyY2h5U2VnbWVudHNfMShkZWxpbWl0ZXIsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgbGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMubGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50KGRlbGltaXRlciwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3Ige0BsaW5rIEJsb2JQcmVmaXh9IGFuZCB7QGxpbmsgQmxvYkl0ZW19IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RJdGVtc0J5SGllcmFyY2h5KGRlbGltaXRlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RJdGVtc0J5SGllcmFyY2h5XzEoZGVsaW1pdGVyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8yLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RIaWVyYXJjaHlTZWdtZW50cyhkZWxpbWl0ZXIsIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlID0gX2M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2Uuc2VnbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliLl9fYXdhaXQoT2JqZWN0LmFzc2lnbih7IGtpbmQ6IFwicHJlZml4XCIgfSwgcHJlZml4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBibG9iIG9mIHNlZ21lbnQuYmxvYkl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KE9iamVjdC5hc3NpZ24oeyBraW5kOiBcImJsb2JcIiB9LCBibG9iKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBhbGwgdGhlIGJsb2JzIGJ5IGhpZXJhcmNoeS5cbiAgICAgKiB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnQuXG4gICAgICpcbiAgICAgKiAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IHRoZSBibG9icyBieSBoaWVyYXJjaHkgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIikpIHtcbiAgICAgKiAgIGlmIChpdGVtLmtpbmQgPT09IFwicHJlZml4XCIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JQcmVmaXg6ICR7aXRlbS5uYW1lfWApO1xuICAgICAqICAgfSBlbHNlIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtpdGVtLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaXRlciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIiwgeyBwcmVmaXg6IFwicHJlZml4MS9cIiB9KTtcbiAgICAgKiBsZXQgZW50aXR5ID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFlbnRpdHkuZG9uZSkge1xuICAgICAqICAgbGV0IGl0ZW0gPSBlbnRpdHkudmFsdWU7XG4gICAgICogICBpZiAoaXRlbS5raW5kID09PSBcInByZWZpeFwiKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iUHJlZml4OiAke2l0ZW0ubmFtZX1gKTtcbiAgICAgKiAgIH0gZWxzZSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iSXRlbTogbmFtZSAtICR7aXRlbS5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqICAgZW50aXR5ID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgYnlQYWdlKClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zb2xlLmxvZyhcIkxpc3RpbmcgYmxvYnMgYnkgaGllcmFyY2h5IGJ5IHBhZ2VcIik7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnQubGlzdEJsb2JzQnlIaWVyYXJjaHkoXCIvXCIpLmJ5UGFnZSgpKSB7XG4gICAgICogICBjb25zdCBzZWdtZW50ID0gcmVzcG9uc2Uuc2VnbWVudDtcbiAgICAgKiAgIGlmIChzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iUHJlZml4OiAke3ByZWZpeC5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1heCBwYWdlIHNpemU6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnNvbGUubG9nKFwiTGlzdGluZyBibG9icyBieSBoaWVyYXJjaHkgYnkgcGFnZSwgc3BlY2lmeWluZyBhIHByZWZpeCBhbmQgYSBtYXggcGFnZSBzaXplXCIpO1xuICAgICAqXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2YgY29udGFpbmVyQ2xpZW50XG4gICAgICogICAubGlzdEJsb2JzQnlIaWVyYXJjaHkoXCIvXCIsIHsgcHJlZml4OiBcInByZWZpeDIvc3ViMS9cIiB9KVxuICAgICAqICAgLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSAke2krK31gKTtcbiAgICAgKiAgIGNvbnN0IHNlZ21lbnQgPSByZXNwb25zZS5zZWdtZW50O1xuICAgICAqXG4gICAgICogICBpZiAoc2VnbWVudC5ibG9iUHJlZml4ZXMpIHtcbiAgICAgKiAgICAgZm9yIChjb25zdCBwcmVmaXggb2Ygc2VnbWVudC5ibG9iUHJlZml4ZXMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYlByZWZpeDogJHtwcmVmaXgubmFtZX1gKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbGltaXRlciAtIFRoZSBjaGFyYWN0ZXIgb3Igc3RyaW5nIHVzZWQgdG8gZGVmaW5lIHRoZSB2aXJ0dWFsIGhpZXJhcmNoeVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGJsb2JzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0QmxvYnNCeUhpZXJhcmNoeShkZWxpbWl0ZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoZGVsaW1pdGVyID09PSBcIlwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImRlbGltaXRlciBzaG91bGQgY29udGFpbiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUNvcHkpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImNvcHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJtZXRhZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlU25hcHNob3RzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJzbmFwc2hvdHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ2ZXJzaW9uc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVW5jb21taXRlZEJsb2JzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ1bmNvbW1pdHRlZGJsb2JzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVUYWdzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ0YWdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVEZWxldGVkV2l0aFZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJkZWxldGVkd2l0aHZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImltbXV0YWJpbGl0eXBvbGljeVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTGVnYWxIb2xkKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJsZWdhbGhvbGRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnByZWZpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIChpbmNsdWRlLmxlbmd0aCA+IDAgPyB7IGluY2x1ZGU6IGluY2x1ZGUgfSA6IHt9KSk7XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYiBwcmVmaXhlcyBhbmQgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdEl0ZW1zQnlIaWVyYXJjaHkoZGVsaW1pdGVyLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBuZXh0IG1ldGhvZCwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIubmV4dCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIGNvbm5lY3Rpb24gdG8gdGhlIGFzeW5jIGl0ZXJhdG9yLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybiBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCB3b3JrcyBhIHBhZ2UgYXQgYSB0aW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJ5UGFnZTogKHNldHRpbmdzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0SGllcmFyY2h5U2VnbWVudHMoZGVsaW1pdGVyLCBzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCB1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgaW4gdGhlIGNvbnRhaW5lciB3aG9zZSB0YWdzXG4gICAgICogbWF0Y2ggYSBnaXZlbiBzZWFyY2ggZXhwcmVzc2lvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byB0cnVlIGZvciBhIGJsb2IgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdHMuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgYmxvYnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBibG9icyByZW1haW5pbmcgdG8gYmUgbGlzdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGN1cnJlbnQgcGFnZS4gVGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGZpbmQgYmxvYnMgYnkgdGFncy5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5kQmxvYnNCeVRhZ3NTZWdtZW50KHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWZpbmRCbG9ic0J5VGFnc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5maWx0ZXJCbG9icyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgd2hlcmU6IHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgICAgIG1heFBhZ2VTaXplOiBvcHRpb25zLm1heFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXNwb25zZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IF9yZXNwb25zZTogcmVzcG9uc2UuX3Jlc3BvbnNlLCBibG9iczogcmVzcG9uc2UuYmxvYnMubWFwKChibG9iKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRhZ1ZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBibG9iLnRhZ3MpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ibG9iVGFnU2V0Lmxlbmd0aCkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1ZhbHVlID0gYmxvYi50YWdzLmJsb2JUYWdTZXRbMF0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYiksIHsgdGFnczogdG9UYWdzKGJsb2IudGFncyksIHRhZ1ZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRSZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBDb250YWluZXJGaW5kQmxvYnNCeVRhZ3NTZWdtZW50UmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnRmlsdGVyU3FsRXhwcmVzc2lvbiAtICBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byB0cnVlIGZvciBhIGJsb2IgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdHMuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZVtPRGF0YSAtIEFCTkZdIGZpbHRlciBzeW50YXggcnVsZSBkZWZpbmVzIHRoZSBmb3JtYWwgZ3JhbW1hciBmb3IgdGhlIHZhbHVlIG9mIHRoZSB3aGVyZSBxdWVyeSBwYXJhbWV0ZXI7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb25fMSwgbWFya2VyXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzU2VnbWVudHNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50KHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5ibG9icyA9IHJlc3BvbnNlLmJsb2JzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBibG9icy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZEJsb2JzQnlUYWdzSXRlbXMuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGZpbmRCbG9ic0J5VGFnc0l0ZW1zXzEodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMywgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50cyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKHNlZ21lbnQuYmxvYnMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfM18xKSB7IGVfMyA9IHsgZXJyb3I6IGVfM18xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGZpbmQgYWxsIGJsb2JzIHdpdGggc3BlY2lmaWVkIHRhZ1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgYmxvYnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgYmxvYiBvZiBjb250YWluZXJDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogY29uc3QgaXRlciA9IGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKTtcbiAgICAgKiBsZXQgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWJsb2JJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iSXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBpZiAocmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgcGFnaW5nIHdpdGggYSBtYXJrZXI6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlcmF0b3IgPSBjb250YWluZXJDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKiBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudFxuICAgICAqICAgLmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpXG4gICAgICogICAuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgYmxvYiBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFncyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9ic1xuICAgICAgICBjb25zdCBsaXN0U2VnbWVudE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMuZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbGlzdFNlZ21lbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIGxpc3RTZWdtZW50T3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogZm9yIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIGlzIGF2YWlsYWJsZSBvbiBzZXJ2aWNlIHZlcnNpb25zIGJlZ2lubmluZ1xuICAgICAqIHdpdGggdmVyc2lvbiAyMDE4LTAzLTI4LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1hY2NvdW50LWluZm9ybWF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjb3VudEluZm8ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWdldEFjY291bnRJbmZvXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5nZXRBY2NvdW50SW5mbyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0Q29udGFpbmVyTmFtZUZyb21VcmwoKSB7XG4gICAgICAgIGxldCBjb250YWluZXJOYW1lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gIFVSTCBtYXkgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyP3Nhc1N0cmluZ1wiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXJcIjtcbiAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLCBFbmRwb2ludHMgLSBgaHR0cDovLzEyNy4wLjAuMToxMDAwMC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVgXG4gICAgICAgICAgICAvLyBodHRwOi8vbG9jYWxob3N0OjEwMDAxL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh0aGlzLnVybCk7XG4gICAgICAgICAgICBpZiAocGFyc2VkVXJsLmhvc3RuYW1lLnNwbGl0KFwiLlwiKVsxXSA9PT0gXCJibG9iXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb250YWluZXJuYW1lXCIuXG4gICAgICAgICAgICAgICAgLy8gXCJodHRwczovL2N1c3RvbWRvbWFpbi5jb20vY29udGFpbmVybmFtZVwiLlxuICAgICAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICBjb250YWluZXJOYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJUHY0L0lQdjYgYWRkcmVzcyBob3N0cy4uLiBFeGFtcGxlIC0gaHR0cDovLzE5Mi4wLjAuMTA6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgLy8gU2luZ2xlIHdvcmQgZG9tYWluIHdpdGhvdXQgYSBbZG90XSBpbiB0aGUgZW5kcG9pbnQuLi4gRXhhbXBsZSAtIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhcnNlZFVybC5wYXRobmFtZS5zcGxpdChcIi9cIilbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vY3VzdG9tZG9tYWluLmNvbS9jb250YWluZXJuYW1lXCIuXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvY29udGFpbmVybmFtZVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXJzZWRVcmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZGVjb2RlIHRoZSBlbmNvZGVkIGNvbnRhaW5lck5hbWUgLSB0byBnZXQgYWxsIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIGl0XG4gICAgICAgICAgICBjb250YWluZXJOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXJOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgY29udGFpbmVyTmFtZSBpcyBpbnZhbGlkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXJOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGV4dHJhY3QgY29udGFpbmVyTmFtZSB3aXRoIHByb3ZpZGVkIGluZm9ybWF0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQ29udGFpbmVyQ2xpZW50IGNvbnN0cnVjdGVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWwuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZXMgYSBCbG9iIENvbnRhaW5lciBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSSBiYXNlZCBvbiB0aGUgY2xpZW50IHByb3BlcnRpZXNcbiAgICAgKiBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVTYXNVcmwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHRoaXMuY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNhcyA9IGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVycyhPYmplY3QuYXNzaWduKHsgY29udGFpbmVyTmFtZTogdGhpcy5fY29udGFpbmVyTmFtZSB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS50b1N0cmluZygpO1xuICAgICAgICAgICAgcmVzb2x2ZShhcHBlbmRUb1VSTFF1ZXJ5KHRoaXMudXJsLCBzYXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBDb250YWluZXJDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBzdHJpbmcgdG8gc2lnbiBmb3IgYSBCbG9iIENvbnRhaW5lciBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSVxuICAgICAqIGJhc2VkIG9uIHRoZSBjbGllbnQgcHJvcGVydGllcyBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIGdlbmVyYXRlU2FzU3RyaW5nVG9TaWduKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKE9iamVjdC5hc3NpZ24oeyBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnN0cmluZ1RvU2lnbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEJsb2JCYXRjaENsaWVudCBvYmplY3QgdG8gY29uZHVjdCBiYXRjaCBvcGVyYXRpb25zLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaFxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkJhdGNoQ2xpZW50IG9iamVjdCBmb3IgdGhpcyBjb250YWluZXIuXG4gICAgICovXG4gICAgZ2V0QmxvYkJhdGNoQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JCYXRjaENsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSBhbiBBY2NvdW50U0FTLiBTZXR0aW5nIGEgdmFsdWVcbiAqIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBwZXJtaXNzaW9ucyBmb3IgdGhhdCBvcGVyYXRpb24uIE9uY2UgYWxsIHRoZVxuICogdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSBwZXJtaXNzaW9ucyBmaWVsZCBvbiBhblxuICoge0BsaW5rIEFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXN9IG9iamVjdC4gSXQgaXMgcG9zc2libGUgdG8gY29uc3RydWN0IHRoZSBwZXJtaXNzaW9ucyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgcGVybWlzc2lvbnMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBBY2NvdW50U0FTUGVybWlzc2lvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byByZWFkIHJlc291cmNlcyBhbmQgbGlzdCBxdWV1ZXMgYW5kIHRhYmxlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIHdyaXRlIHJlc291cmNlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cml0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBkZWxldGUgYmxvYnMgYW5kIGZpbGVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlbGV0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBkZWxldGUgdmVyc2lvbnMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBsaXN0IGJsb2IgY29udGFpbmVycywgYmxvYnMsIHNoYXJlcywgZGlyZWN0b3JpZXMsIGFuZCBmaWxlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5saXN0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFkZCBtZXNzYWdlcywgdGFibGUgZW50aXRpZXMsIGFuZCBhcHBlbmQgdG8gYmxvYnMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWRkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGNyZWF0ZSBibG9icyBhbmQgZmlsZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9ucyB0byB1cGRhdGUgbWVzc2FnZXMgYW5kIHRhYmxlIGVudGl0aWVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBnZXQgYW5kIGRlbGV0ZSBtZXNzYWdlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wcm9jZXNzID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjZmllcyBUYWcgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhZyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBmaWx0ZXIgYmxvYnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlciA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBzZXQgaW1tdXRhYmlsaXR5IHBvbGljeS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCBQZXJtYW5lbnQgRGVsZXRlIGlzIHBlcm1pdHRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGVybWFuZW50RGVsZXRlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlIGluaXRpYWxpemVzIHRoZSBBY2NvdW50U0FTUGVybWlzc2lvbnMgZmllbGRzIGZyb20gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShwZXJtaXNzaW9ucykge1xuICAgICAgICBjb25zdCBhY2NvdW50U0FTUGVybWlzc2lvbnMgPSBuZXcgQWNjb3VudFNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBwZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMubGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJwXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHBlcm1pc3Npb24gY2hhcmFjdGVyOiAke2N9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY291bnRTQVNQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBBY2NvdW50U0FTUGVybWlzc2lvbnN9IGZyb20gYSByYXcgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHNhbWUga2V5cyBhcyBpdFxuICAgICAqIGFuZCBib29sZWFuIHZhbHVlcyBmb3IgdGhlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9uTGlrZSAtXG4gICAgICovXG4gICAgc3RhdGljIGZyb20ocGVybWlzc2lvbkxpa2UpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudFNBU1Blcm1pc3Npb25zID0gbmV3IEFjY291bnRTQVNQZXJtaXNzaW9ucygpO1xuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UucmVhZCkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS53cml0ZSkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLndyaXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5maWx0ZXIpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS50YWcpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy50YWcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5saXN0KSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMubGlzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmFkZCkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmNyZWF0ZSkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmNyZWF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnVwZGF0ZSkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnVwZGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnByb2Nlc3MpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm9kdWNlcyB0aGUgU0FTIHBlcm1pc3Npb25zIHN0cmluZyBmb3IgYW4gQXp1cmUgU3RvcmFnZSBhY2NvdW50LlxuICAgICAqIENhbGwgdGhpcyBtZXRob2QgdG8gc2V0IEFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMgUGVybWlzc2lvbnMgZmllbGQuXG4gICAgICpcbiAgICAgKiBVc2luZyB0aGlzIG1ldGhvZCB3aWxsIGd1YXJhbnRlZSB0aGUgcmVzb3VyY2UgdHlwZXMgYXJlIGluXG4gICAgICogYW4gb3JkZXIgYWNjZXB0ZWQgYnkgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYW4tYWNjb3VudC1zYXNcbiAgICAgKlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGFzIHNwZWNpZmllZCBoZXJlIHRvIGVuc3VyZSBjb3JyZWN0bmVzczpcbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICAgICAgICAvLyBVc2UgYSBzdHJpbmcgYXJyYXkgaW5zdGVhZCBvZiBzdHJpbmcgY29uY2F0ZW5hdGluZyArPSBvcGVyYXRvciBmb3IgcGVyZm9ybWFuY2VcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucmVhZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JpdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ3XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInhcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFkZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51cGRhdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ1XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3MpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJwXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZXMgYWNjZXNzaWJsZSBieSBhbiBBY2NvdW50U0FTLiBTZXR0aW5nIGEgdmFsdWVcbiAqIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBhY2Nlc3MgdG8gdGhhdCByZXNvdXJjZSB0eXBlLiBPbmNlIGFsbCB0aGVcbiAqIHZhbHVlcyBhcmUgc2V0LCB0aGlzIHNob3VsZCBiZSBzZXJpYWxpemVkIHdpdGggdG9TdHJpbmcgYW5kIHNldCBhcyB0aGUgcmVzb3VyY2VzIGZpZWxkIG9uIGFuXG4gKiB7QGxpbmsgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlc30gb2JqZWN0LiBJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlIHJlc291cmNlcyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgcmVzb3VyY2VzIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQWNjb3VudFNBU1Jlc291cmNlVHlwZXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3Mgc2VydmljZSBsZXZlbCBBUElzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIGNvbnRhaW5lciBsZXZlbCBBUElzIChCbG9iIENvbnRhaW5lcnMsIFRhYmxlcywgUXVldWVzLCBGaWxlIFNoYXJlcykgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFjY2VzcyBvYmplY3QgbGV2ZWwgQVBJcyAoQmxvYnMsIFRhYmxlIEVudGl0aWVzLCBRdWV1ZSBNZXNzYWdlcywgRmlsZXMpIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9iamVjdCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIHtAbGluayBBY2NvdW50U0FTUmVzb3VyY2VUeXBlc30gZnJvbSB0aGUgc3BlY2lmaWVkIHJlc291cmNlIHR5cGVzIHN0cmluZy4gVGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhblxuICAgICAqIEVycm9yIGlmIGl0IGVuY291bnRlcnMgYSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgcmVzb3VyY2UgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGVzIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UocmVzb3VyY2VUeXBlcykge1xuICAgICAgICBjb25zdCBhY2NvdW50U0FTUmVzb3VyY2VUeXBlcyA9IG5ldyBBY2NvdW50U0FTUmVzb3VyY2VUeXBlcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgcmVzb3VyY2VUeXBlcykge1xuICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Jlc291cmNlVHlwZXMuc2VydmljZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNSZXNvdXJjZVR5cGVzLmNvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNSZXNvdXJjZVR5cGVzLm9iamVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHJlc291cmNlIHR5cGU6ICR7Y31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1Jlc291cmNlVHlwZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiByZXNvdXJjZSB0eXBlcyB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlVHlwZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZSkge1xuICAgICAgICAgICAgcmVzb3VyY2VUeXBlcy5wdXNoKFwic1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMucHVzaChcImNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub2JqZWN0KSB7XG4gICAgICAgICAgICByZXNvdXJjZVR5cGVzLnB1c2goXCJvXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvdXJjZVR5cGVzLmpvaW4oXCJcIik7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2VydmljZXMgYWNjZXNzaWJsZSBieSBhbiBBY2NvdW50U0FTLiBTZXR0aW5nIGEgdmFsdWVcbiAqIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBhY2Nlc3MgdG8gdGhhdCBzZXJ2aWNlLiBPbmNlIGFsbCB0aGVcbiAqIHZhbHVlcyBhcmUgc2V0LCB0aGlzIHNob3VsZCBiZSBzZXJpYWxpemVkIHdpdGggdG9TdHJpbmcgYW5kIHNldCBhcyB0aGUgc2VydmljZXMgZmllbGQgb24gYW5cbiAqIHtAbGluayBBY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgc2VydmljZXMgc3RyaW5nIHdpdGhvdXQgdGhpcyBjbGFzcywgYnV0XG4gKiB0aGUgb3JkZXIgb2YgdGhlIHNlcnZpY2VzIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQWNjb3VudFNBU1NlcnZpY2VzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIGJsb2IgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJsb2IgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIGZpbGUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIHF1ZXVlIHJlc291cmNlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5xdWV1ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgdGFibGUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFjY291bnRTQVNTZXJ2aWNlc30gZnJvbSB0aGUgc3BlY2lmaWVkIHNlcnZpY2VzIHN0cmluZy4gVGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhblxuICAgICAqIEVycm9yIGlmIGl0IGVuY291bnRlcnMgYSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgc2VydmljZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXJ2aWNlcyAtXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKHNlcnZpY2VzKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRTQVNTZXJ2aWNlcyA9IG5ldyBBY2NvdW50U0FTU2VydmljZXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHNlcnZpY2VzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYlwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTU2VydmljZXMuYmxvYiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNTZXJ2aWNlcy5maWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1NlcnZpY2VzLnF1ZXVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1NlcnZpY2VzLnRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgc2VydmljZSBjaGFyYWN0ZXI6ICR7Y31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1NlcnZpY2VzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gc2VydmljZXMgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuYmxvYikge1xuICAgICAgICAgICAgc2VydmljZXMucHVzaChcImJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnF1ZXVlKSB7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKFwicVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VydmljZXMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogR2VuZXJhdGVzIGEge0BsaW5rIFNBU1F1ZXJ5UGFyYW1ldGVyc30gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGFsbCBTQVMgcXVlcnkgcGFyYW1ldGVycyBuZWVkZWQgdG8gbWFrZSBhbiBhY3R1YWxcbiAqIFJFU1QgcmVxdWVzdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYW4tYWNjb3VudC1zYXNcbiAqXG4gKiBAcGFyYW0gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gc2hhcmVkS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycyhhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpXG4gICAgICAgIC5zYXNRdWVyeVBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZUFjY291bnRTQVNRdWVyeVBhcmFtZXRlcnNJbnRlcm5hbChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvblxuICAgICAgICA/IGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvblxuICAgICAgICA6IFNFUlZJQ0VfVkVSU0lPTjtcbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDIwLTA4LTA0XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTA4LTA0JyB3aGVuIHByb3ZpZGVkICdpJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkZWQgJ3gnIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEwLTEwXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEwLTEwJyB3aGVuIHByb3ZpZGVkICd5JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50YWcgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMi0xMlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMi0xMicgd2hlbiBwcm92aWRlZCAndCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZmlsdGVyICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTItMTJcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTItMTInIHdoZW4gcHJvdmlkZWQgJ2YnIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUgJiYgdmVyc2lvbiA8IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0xMi0wNicgd2hlbiBwcm92aWRlZCAnZW5jcnlwdGlvblNjb3BlJyBpbiBTQVMuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWRQZXJtaXNzaW9ucyA9IEFjY291bnRTQVNQZXJtaXNzaW9ucy5wYXJzZShhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHBhcnNlZFNlcnZpY2VzID0gQWNjb3VudFNBU1NlcnZpY2VzLnBhcnNlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc2VydmljZXMpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcGFyc2VkUmVzb3VyY2VUeXBlcyA9IEFjY291bnRTQVNSZXNvdXJjZVR5cGVzLnBhcnNlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucmVzb3VyY2VUeXBlcykudG9TdHJpbmcoKTtcbiAgICBsZXQgc3RyaW5nVG9TaWduO1xuICAgIGlmICh2ZXJzaW9uID49IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsXG4gICAgICAgICAgICBwYXJzZWRQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIHBhcnNlZFNlcnZpY2VzLFxuICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2VUeXBlcyxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgIHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSksXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUgPyBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSA6IFwiXCIsXG4gICAgICAgICAgICBcIlwiLCAvLyBBY2NvdW50IFNBUyByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIG5ld2xpbmUgY2hhcmFjdGVyXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsXG4gICAgICAgICAgICBwYXJzZWRQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIHBhcnNlZFNlcnZpY2VzLFxuICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2VUeXBlcyxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgIHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSksXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgXCJcIiwgLy8gQWNjb3VudCBTQVMgcmVxdWlyZXMgYW4gYWRkaXRpb25hbCBuZXdsaW5lIGNoYXJhY3RlclxuICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNoYXJlZEtleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnModmVyc2lvbiwgc2lnbmF0dXJlLCBwYXJzZWRQZXJtaXNzaW9ucy50b1N0cmluZygpLCBwYXJzZWRTZXJ2aWNlcywgcGFyc2VkUmVzb3VyY2VUeXBlcywgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSksXG4gICAgICAgIHN0cmluZ1RvU2lnbjogc3RyaW5nVG9TaWduLFxuICAgIH07XG59XG5cbi8qKlxuICogQSBCbG9iU2VydmljZUNsaWVudCByZXByZXNlbnRzIGEgQ2xpZW50IHRvIHRoZSBBenVyZSBTdG9yYWdlIEJsb2Igc2VydmljZSBhbGxvd2luZyB5b3VcbiAqIHRvIG1hbmlwdWxhdGUgYmxvYiBjb250YWluZXJzLlxuICovXG5jbGFzcyBCbG9iU2VydmljZUNsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCbG9iU2VydmljZUNsaWVudCBmcm9tIGNvbm5lY3Rpb24gc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbm5lY3Rpb25TdHJpbmcgLSBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nIG9mIGFuIEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIE5vdGUgLSBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGNhbiBvbmx5IGJlIHVzZWQgaW4gTk9ERS5KUyBydW50aW1lLiBdXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBleGFtcGxlIC1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRGVmYXVsdEVuZHBvaW50c1Byb3RvY29sPWh0dHBzO0FjY291bnROYW1lPW15YWNjb3VudDtBY2NvdW50S2V5PWFjY291bnRLZXk7RW5kcG9pbnRTdWZmaXg9Y29yZS53aW5kb3dzLm5ldGBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQVMgY29ubmVjdGlvbiBzdHJpbmcgZXhhbXBsZSAtXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYEJsb2JFbmRwb2ludD1odHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvO1F1ZXVlRW5kcG9pbnQ9aHR0cHM6Ly9teWFjY291bnQucXVldWUuY29yZS53aW5kb3dzLm5ldC87RmlsZUVuZHBvaW50PWh0dHBzOi8vbXlhY2NvdW50LmZpbGUuY29yZS53aW5kb3dzLm5ldC87VGFibGVFbmRwb2ludD1odHRwczovL215YWNjb3VudC50YWJsZS5jb3JlLndpbmRvd3MubmV0LztTaGFyZWRBY2Nlc3NTaWduYXR1cmU9c2FzU3RyaW5nYFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIE9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBIVFRQIHBpcGVsaW5lLlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tQ29ubmVjdGlvblN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHMoY29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJveHlPcHRpb25zID0gY29yZVJlc3RQaXBlbGluZS5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyhleHRyYWN0ZWRDcmVkcy5wcm94eVVyaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iU2VydmljZUNsaWVudChleHRyYWN0ZWRDcmVkcy51cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gTm9kZS5qcyBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIlNBU0Nvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYlNlcnZpY2VDbGllbnQoZXh0cmFjdGVkQ3JlZHMudXJsICsgXCI/XCIgKyBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzLCBwaXBlbGluZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHVybCwgY3JlZGVudGlhbE9yUGlwZWxpbmUsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmUpKSB7XG4gICAgICAgICAgICBwaXBlbGluZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yUGlwZWxpbmUgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxPclBpcGVsaW5lIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yUGlwZWxpbmUpKSB7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsXG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICB0aGlzLnNlcnZpY2VDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5zZXJ2aWNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIENvbnRhaW5lckNsaWVudH0gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyTmFtZSAtIEEgY29udGFpbmVyIG5hbWVcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBDb250YWluZXJDbGllbnQgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gY29udGFpbmVyIG5hbWUuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb250YWluZXJDbGllbnQgPSBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8Y29udGFpbmVyIG5hbWU+XCIpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldENvbnRhaW5lckNsaWVudChjb250YWluZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGFpbmVyQ2xpZW50KGFwcGVuZFRvVVJMUGF0aCh0aGlzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIEJsb2IgY29udGFpbmVyLiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyTmFtZSAtIE5hbWUgb2YgdGhlIGNvbnRhaW5lciB0byBjcmVhdGUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSBDb250YWluZXIgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBDb250YWluZXIgY3JlYXRpb24gcmVzcG9uc2UgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRhaW5lciBjbGllbnQuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lck5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWNyZWF0ZUNvbnRhaW5lclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IHRoaXMuZ2V0Q29udGFpbmVyQ2xpZW50KGNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ3JlYXRlUmVzcG9uc2UgPSBhd2FpdCBjb250YWluZXJDbGllbnQuY3JlYXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyQ2xpZW50LFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckNyZWF0ZVJlc3BvbnNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBCbG9iIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXJOYW1lIC0gTmFtZSBvZiB0aGUgY29udGFpbmVyIHRvIGRlbGV0ZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIENvbnRhaW5lciBkZWxldGlvbiByZXNwb25zZS5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVDb250YWluZXIoY29udGFpbmVyTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZGVsZXRlQ29udGFpbmVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ2xpZW50ID0gdGhpcy5nZXRDb250YWluZXJDbGllbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyQ2xpZW50LmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlIGEgcHJldmlvdXNseSBkZWxldGVkIEJsb2IgY29udGFpbmVyLlxuICAgICAqIFRoaXMgQVBJIGlzIG9ubHkgZnVuY3Rpb25hbCBpZiBDb250YWluZXIgU29mdCBEZWxldGUgaXMgZW5hYmxlZCBmb3IgdGhlIHN0b3JhZ2UgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxldGVkQ29udGFpbmVyTmFtZSAtIE5hbWUgb2YgdGhlIHByZXZpb3VzbHkgZGVsZXRlZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIGRlbGV0ZWRDb250YWluZXJWZXJzaW9uIC0gVmVyc2lvbiBvZiB0aGUgcHJldmlvdXNseSBkZWxldGVkIGNvbnRhaW5lciwgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgZGVsZXRlZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSBDb250YWluZXIgUmVzdG9yZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQ29udGFpbmVyIGRlbGV0aW9uIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIHVuZGVsZXRlQ29udGFpbmVyKGRlbGV0ZWRDb250YWluZXJOYW1lLCBkZWxldGVkQ29udGFpbmVyVmVyc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtdW5kZWxldGVDb250YWluZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDbGllbnQgPSB0aGlzLmdldENvbnRhaW5lckNsaWVudChvcHRpb25zLmRlc3RpbmF0aW9uQ29udGFpbmVyTmFtZSB8fCBkZWxldGVkQ29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICAvLyBIYWNrIHRvIGFjY2VzcyBhIHByb3RlY3RlZCBtZW1iZXIuXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDb250ZXh0ID0gY29udGFpbmVyQ2xpZW50W1wic3RvcmFnZUNsaWVudENvbnRleHRcIl0uY29udGFpbmVyO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyVW5kZWxldGVSZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IGNvbnRhaW5lckNvbnRleHQucmVzdG9yZSh7XG4gICAgICAgICAgICAgICAgZGVsZXRlZENvbnRhaW5lck5hbWUsXG4gICAgICAgICAgICAgICAgZGVsZXRlZENvbnRhaW5lclZlcnNpb24sXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHsgY29udGFpbmVyQ2xpZW50LCBjb250YWluZXJVbmRlbGV0ZVJlc3BvbnNlIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW5hbWUgYW4gZXhpc3RpbmcgQmxvYiBDb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlQ29udGFpbmVyTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBkZXN0aW5hdGlvbkNvbnRhaW5lck5hbWUgLSBUaGUgbmV3IG5hbWUgb2YgdGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBSZW5hbWUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbiAgICAvLyBAdHMtaWdub3JlIE5lZWQgdG8gaGlkZSB0aGlzIGludGVyZmFjZSBmb3Igbm93LiBNYWtlIGl0IHB1YmxpYyBhbmQgdHVybiBvbiB0aGUgbGl2ZSB0ZXN0cyBmb3IgaXQgd2hlbiB0aGUgc2VydmljZSBpcyByZWFkeS5cbiAgICBhc3luYyByZW5hbWVDb250YWluZXIoc291cmNlQ29udGFpbmVyTmFtZSwgZGVzdGluYXRpb25Db250YWluZXJOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1yZW5hbWVDb250YWluZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDbGllbnQgPSB0aGlzLmdldENvbnRhaW5lckNsaWVudChkZXN0aW5hdGlvbkNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgLy8gSGFjayB0byBhY2Nlc3MgYSBwcm90ZWN0ZWQgbWVtYmVyLlxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ29udGV4dCA9IGNvbnRhaW5lckNsaWVudFtcInN0b3JhZ2VDbGllbnRDb250ZXh0XCJdLmNvbnRhaW5lcjtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlbmFtZVJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgY29udGFpbmVyQ29udGV4dC5yZW5hbWUoc291cmNlQ29udGFpbmVyTmFtZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1cGRhdGVkT3B0aW9ucyksIHsgc291cmNlTGVhc2VJZDogKF9hID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZWFzZUlkIH0pKSk7XG4gICAgICAgICAgICByZXR1cm4geyBjb250YWluZXJDbGllbnQsIGNvbnRhaW5lclJlbmFtZVJlc3BvbnNlIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgc3RvcmFnZSBhY2NvdW504oCZcyBCbG9iIHNlcnZpY2UsIGluY2x1ZGluZyBwcm9wZXJ0aWVzXG4gICAgICogZm9yIFN0b3JhZ2UgQW5hbHl0aWNzIGFuZCBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgcnVsZXMuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2Itc2VydmljZS1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBTZXJ2aWNlIEdldCBQcm9wZXJ0aWVzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQcm9wZXJ0aWVzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWdldFByb3BlcnRpZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlQ29udGV4dC5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHByb3BlcnRpZXMgZm9yIGEgc3RvcmFnZSBhY2NvdW504oCZcyBCbG9iIHNlcnZpY2UgZW5kcG9pbnQsIGluY2x1ZGluZyBwcm9wZXJ0aWVzXG4gICAgICogZm9yIFN0b3JhZ2UgQW5hbHl0aWNzLCBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgcnVsZXMgYW5kIHNvZnQgZGVsZXRlIHNldHRpbmdzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXNlcnZpY2UtcHJvcGVydGllc1xuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBTZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgU2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldFByb3BlcnRpZXMocHJvcGVydGllcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtc2V0UHJvcGVydGllc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LnNldFByb3BlcnRpZXMocHJvcGVydGllcywge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gcmVwbGljYXRpb24gZm9yIHRoZSBCbG9iIHNlcnZpY2UuIEl0IGlzIG9ubHlcbiAgICAgKiBhdmFpbGFibGUgb24gdGhlIHNlY29uZGFyeSBsb2NhdGlvbiBlbmRwb2ludCB3aGVuIHJlYWQtYWNjZXNzIGdlby1yZWR1bmRhbnRcbiAgICAgKiByZXBsaWNhdGlvbiBpcyBlbmFibGVkIGZvciB0aGUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1ibG9iLXNlcnZpY2Utc3RhdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgU3RhdGlzdGljcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IFN0YXRpc3RpY3Mgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFN0YXRpc3RpY3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0U3RhdGlzdGljc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmdldFN0YXRpc3RpY3Moe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gcmV0dXJucyB0aGUgc2t1IG5hbWUgYW5kIGFjY291bnQga2luZFxuICAgICAqIGZvciB0aGUgc3BlY2lmaWVkIGFjY291bnQuXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiBpcyBhdmFpbGFibGUgb24gc2VydmljZSB2ZXJzaW9ucyBiZWdpbm5pbmdcbiAgICAgKiB3aXRoIHZlcnNpb24gMjAxOC0wMy0yOC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYWNjb3VudC1pbmZvcm1hdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEFjY291bnRJbmZvKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWdldEFjY291bnRJbmZvXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZ2V0QWNjb3VudEluZm8oe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBsaXN0IG9mIHRoZSBjb250YWluZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9saXN0LWNvbnRhaW5lcnMyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBjb250YWluZXJzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBjb250YWluZXJzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGN1cnJlbnQgcGFnZS4gVGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgTGlzdCBDb250YWluZXIgU2VnbWVudCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgTGlzdCBDb250YWluZXIgU2VnbWVudCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgbGlzdENvbnRhaW5lcnNTZWdtZW50KG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtbGlzdENvbnRhaW5lcnNTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQubGlzdENvbnRhaW5lcnNTZWdtZW50KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLCBtYXJrZXIgfSwgb3B0aW9ucyksIHsgaW5jbHVkZTogdHlwZW9mIG9wdGlvbnMuaW5jbHVkZSA9PT0gXCJzdHJpbmdcIiA/IFtvcHRpb25zLmluY2x1ZGVdIDogb3B0aW9ucy5pbmNsdWRlLCB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBGaWx0ZXIgQmxvYnMgb3BlcmF0aW9uIGVuYWJsZXMgY2FsbGVycyB0byBsaXN0IGJsb2JzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aG9zZSB0YWdzXG4gICAgICogbWF0Y2ggYSBnaXZlbiBzZWFyY2ggZXhwcmVzc2lvbi4gRmlsdGVyIGJsb2JzIHNlYXJjaGVzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aXRoaW4gYVxuICAgICAqIHN0b3JhZ2UgYWNjb3VudCBidXQgY2FuIGJlIHNjb3BlZCB3aXRoaW4gdGhlIGV4cHJlc3Npb24gdG8gYSBzaW5nbGUgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1maW5kQmxvYnNCeVRhZ3NTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmZpbHRlckJsb2JzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB3aGVyZTogdGFnRmlsdGVyU3FsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgbWF4UGFnZVNpemU6IG9wdGlvbnMubWF4UGFnZVNpemUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlc3BvbnNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIGJsb2JzOiByZXNwb25zZS5ibG9icy5tYXAoKGJsb2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFnVmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGJsb2IudGFncykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJsb2JUYWdTZXQubGVuZ3RoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnVmFsdWUgPSBibG9iLnRhZ3MuYmxvYlRhZ1NldFswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iKSwgeyB0YWdzOiB0b1RhZ3MoYmxvYi50YWdzKSwgdGFnVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIFNlcnZpY2VGaW5kQmxvYnNCeVRhZ3NTZWdtZW50UmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnRmlsdGVyU3FsRXhwcmVzc2lvbiAtICBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byB0cnVlIGZvciBhIGJsb2IgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdHMuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZVtPRGF0YSAtIEFCTkZdIGZpbHRlciBzeW50YXggcnVsZSBkZWZpbmVzIHRoZSBmb3JtYWwgZ3JhbW1hciBmb3IgdGhlIHZhbHVlIG9mIHRoZSB3aGVyZSBxdWVyeSBwYXJhbWV0ZXI7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb25fMSwgbWFya2VyXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzU2VnbWVudHNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50KHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5ibG9icyA9IHJlc3BvbnNlLmJsb2JzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBibG9icy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZEJsb2JzQnlUYWdzSXRlbXMuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGZpbmRCbG9ic0J5VGFnc0l0ZW1zXzEodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMSwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50cyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKHNlZ21lbnQuYmxvYnMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGZpbmQgYWxsIGJsb2JzIHdpdGggc3BlY2lmaWVkIHRhZ1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGJsb2JzIGluIHBhZ2VzLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2Itc2VydmljZS1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgYmxvYiBvZiBibG9iU2VydmljZUNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2NvbnRhaW5lci5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGNvbnN0IGl0ZXIgPSBibG9iU2VydmljZUNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKTtcbiAgICAgKiBsZXQgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWJsb2JJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iSXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBibG9iU2VydmljZUNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMjAgfSkpIHtcbiAgICAgKiAgIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgYmxvYiBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gR2V0cyBuZXh0IG1hcmtlclxuICAgICAqIGxldCBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICogaXRlcmF0b3IgPSBibG9iU2VydmljZUNsaWVudFxuICAgICAqICAgLmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpXG4gICAgICogICAuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgYmxvYiBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFncyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9ic1xuICAgICAgICBjb25zdCBsaXN0U2VnbWVudE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMuZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbGlzdFNlZ21lbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIGxpc3RTZWdtZW50T3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvbnRhaW5lcnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGNvbnRhaW5lcnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGNvbnRhaW5lcnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RTZWdtZW50cyhtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0U2VnbWVudHNfMShtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBsaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0Q29udGFpbmVyc1NlZ21lbnQobWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBDb250YWluZXIgSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGNvbnRhaW5lcnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogbGlzdEl0ZW1zXzEob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMiwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5saXN0U2VnbWVudHMobWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50ID0gX2M7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQoeWllbGQqIHRzbGliLl9fYXN5bmNEZWxlZ2F0b3IodHNsaWIuX19hc3luY1ZhbHVlcyhzZWdtZW50LmNvbnRhaW5lckl0ZW1zKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBfZS5yZXR1cm4pKSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9iLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IGFsbCB0aGUgY29udGFpbmVyc1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGNvbnRhaW5lcnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgY29udGFpbmVyIG9mIGJsb2JTZXJ2aWNlQ2xpZW50Lmxpc3RDb250YWluZXJzKCkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBDb250YWluZXIgJHtpKyt9OiAke2NvbnRhaW5lci5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGNvbnN0IGl0ZXIgPSBibG9iU2VydmljZUNsaWVudC5saXN0Q29udGFpbmVycygpO1xuICAgICAqIGxldCBjb250YWluZXJJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFjb250YWluZXJJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBDb250YWluZXIgJHtpKyt9OiAke2NvbnRhaW5lckl0ZW0udmFsdWUubmFtZX1gKTtcbiAgICAgKiAgIGNvbnRhaW5lckl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBibG9iU2VydmljZUNsaWVudC5saXN0Q29udGFpbmVycygpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgaWYgKHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICAgICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gYmxvYlNlcnZpY2VDbGllbnQubGlzdENvbnRhaW5lcnMoKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMiB9KTtcbiAgICAgKiBsZXQgcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAyIGNvbnRhaW5lciBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5jb250YWluZXJJdGVtcykge1xuICAgICAqICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgcmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gR2V0cyBuZXh0IG1hcmtlclxuICAgICAqIGxldCBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICogaXRlcmF0b3IgPSBibG9iU2VydmljZUNsaWVudFxuICAgICAqICAgLmxpc3RDb250YWluZXJzKClcbiAgICAgKiAgIC5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAxMCBjb250YWluZXIgbmFtZXNcbiAgICAgKiBpZiAocmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhgQ29udGFpbmVyICR7aSsrfTogJHtjb250YWluZXIubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBjb250YWluZXJzLlxuICAgICAqIEByZXR1cm5zIEFuIGFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHN1cHBvcnRzIHBhZ2luZy5cbiAgICAgKi9cbiAgICBsaXN0Q29udGFpbmVycyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnByZWZpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmNsdWRlID0gW107XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVEZWxldGVkKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJkZWxldGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVNZXRhZGF0YSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwibWV0YWRhdGFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVN5c3RlbSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwic3lzdGVtXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgY29udGFpbmVyc1xuICAgICAgICBjb25zdCBsaXN0U2VnbWVudE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCAoaW5jbHVkZS5sZW5ndGggPiAwID8geyBpbmNsdWRlIH0gOiB7fSkpO1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5saXN0SXRlbXMobGlzdFNlZ21lbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RTZWdtZW50cyhzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCBsaXN0U2VnbWVudE9wdGlvbnMpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIFdIRU4gVVNJTkcgQkVBUkVSIFRPS0VOIEFVVEhFTlRJQ0FUSU9OIChUb2tlbkNyZWRlbnRpYWwpLlxuICAgICAqXG4gICAgICogUmV0cmlldmVzIGEgdXNlciBkZWxlZ2F0aW9uIGtleSBmb3IgdGhlIEJsb2Igc2VydmljZS4gVGhpcyBpcyBvbmx5IGEgdmFsaWQgb3BlcmF0aW9uIHdoZW4gdXNpbmdcbiAgICAgKiBiZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24uXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtdXNlci1kZWxlZ2F0aW9uLWtleVxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXJ0c09uIC0gICAgICBUaGUgc3RhcnQgdGltZSBmb3IgdGhlIHVzZXIgZGVsZWdhdGlvbiBTQVMuIE11c3QgYmUgd2l0aGluIDcgZGF5cyBvZiB0aGUgY3VycmVudCB0aW1lXG4gICAgICogQHBhcmFtIGV4cGlyZXNPbiAtICAgICBUaGUgZW5kIHRpbWUgZm9yIHRoZSB1c2VyIGRlbGVnYXRpb24gU0FTLiBNdXN0IGJlIHdpdGhpbiA3IGRheXMgb2YgdGhlIGN1cnJlbnQgdGltZVxuICAgICAqL1xuICAgIGFzeW5jIGdldFVzZXJEZWxlZ2F0aW9uS2V5KHN0YXJ0c09uLCBleHBpcmVzT24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWdldFVzZXJEZWxlZ2F0aW9uS2V5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmdldFVzZXJEZWxlZ2F0aW9uS2V5KHtcbiAgICAgICAgICAgICAgICBzdGFydHNPbjogdHJ1bmNhdGVkSVNPODA2MURhdGUoc3RhcnRzT24sIGZhbHNlKSxcbiAgICAgICAgICAgICAgICBleHBpcmVzT246IHRydW5jYXRlZElTTzgwNjFEYXRlKGV4cGlyZXNPbiwgZmFsc2UpLFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJEZWxlZ2F0aW9uS2V5ID0ge1xuICAgICAgICAgICAgICAgIHNpZ25lZE9iamVjdElkOiByZXNwb25zZS5zaWduZWRPYmplY3RJZCxcbiAgICAgICAgICAgICAgICBzaWduZWRUZW5hbnRJZDogcmVzcG9uc2Uuc2lnbmVkVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgc2lnbmVkU3RhcnRzT246IG5ldyBEYXRlKHJlc3BvbnNlLnNpZ25lZFN0YXJ0c09uKSxcbiAgICAgICAgICAgICAgICBzaWduZWRFeHBpcmVzT246IG5ldyBEYXRlKHJlc3BvbnNlLnNpZ25lZEV4cGlyZXNPbiksXG4gICAgICAgICAgICAgICAgc2lnbmVkU2VydmljZTogcmVzcG9uc2Uuc2lnbmVkU2VydmljZSxcbiAgICAgICAgICAgICAgICBzaWduZWRWZXJzaW9uOiByZXNwb25zZS5zaWduZWRWZXJzaW9uLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNwb25zZS52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCByZXMgPSBPYmplY3QuYXNzaWduKHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIHJlcXVlc3RJZDogcmVzcG9uc2UucmVxdWVzdElkLCBjbGllbnRSZXF1ZXN0SWQ6IHJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZCwgdmVyc2lvbjogcmVzcG9uc2UudmVyc2lvbiwgZGF0ZTogcmVzcG9uc2UuZGF0ZSwgZXJyb3JDb2RlOiByZXNwb25zZS5lcnJvckNvZGUgfSwgdXNlckRlbGVnYXRpb25LZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBCbG9iQmF0Y2hDbGllbnQgb2JqZWN0IHRvIGNvbmR1Y3QgYmF0Y2ggb3BlcmF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2hcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JCYXRjaENsaWVudCBvYmplY3QgZm9yIHRoaXMgc2VydmljZS5cbiAgICAgKi9cbiAgICBnZXRCbG9iQmF0Y2hDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkJhdGNoQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIEJsb2JTZXJ2aWNlQ2xpZW50IGNvbnN0cnVjdGVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWwuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZXMgYSBCbG9iIGFjY291bnQgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uIHRoZSBjbGllbnQgcHJvcGVydGllc1xuICAgICAqIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY3JlYXRlLWFjY291bnQtc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXhwaXJlc09uIC0gT3B0aW9uYWwuIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSBiZWNvbWVzIGludmFsaWQuIERlZmF1bHQgdG8gYW4gaG91ciBsYXRlciBpZiBub3QgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC0gU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgU0FTLlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGVzIC0gU3BlY2lmaWVzIHRoZSByZXNvdXJjZSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBBbiBhY2NvdW50IFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVBY2NvdW50U2FzVXJsKGV4cGlyZXNPbiwgcGVybWlzc2lvbnMgPSBBY2NvdW50U0FTUGVybWlzc2lvbnMucGFyc2UoXCJyXCIpLCByZXNvdXJjZVR5cGVzID0gXCJzY29cIiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghKHRoaXMuY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBhY2NvdW50IFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwaXJlc09uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBleHBpcmVzT24gPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgMzYwMCAqIDEwMDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNhcyA9IGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycyhPYmplY3QuYXNzaWduKHsgcGVybWlzc2lvbnMsXG4gICAgICAgICAgICBleHBpcmVzT24sXG4gICAgICAgICAgICByZXNvdXJjZVR5cGVzLCBzZXJ2aWNlczogQWNjb3VudFNBU1NlcnZpY2VzLnBhcnNlKFwiYlwiKS50b1N0cmluZygpIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiBhcHBlbmRUb1VSTFF1ZXJ5KHRoaXMudXJsLCBzYXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQmxvYlNlcnZpY2VDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBzdHJpbmcgdG8gc2lnbiBmb3IgYSBCbG9iIGFjY291bnQgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uXG4gICAgICogdGhlIGNsaWVudCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY3JlYXRlLWFjY291bnQtc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXhwaXJlc09uIC0gT3B0aW9uYWwuIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSBiZWNvbWVzIGludmFsaWQuIERlZmF1bHQgdG8gYW4gaG91ciBsYXRlciBpZiBub3QgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC0gU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgU0FTLlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGVzIC0gU3BlY2lmaWVzIHRoZSByZXNvdXJjZSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBBbiBhY2NvdW50IFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVTYXNTdHJpbmdUb1NpZ24oZXhwaXJlc09uLCBwZXJtaXNzaW9ucyA9IEFjY291bnRTQVNQZXJtaXNzaW9ucy5wYXJzZShcInJcIiksIHJlc291cmNlVHlwZXMgPSBcInNjb1wiLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIGFjY291bnQgU0FTIHdoZW4gdGhlIGNsaWVudCBpcyBpbml0aWFsaXplZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBpcmVzT24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGV4cGlyZXNPbiA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyAzNjAwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKE9iamVjdC5hc3NpZ24oeyBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGV4cGlyZXNPbixcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMsIHNlcnZpY2VzOiBBY2NvdW50U0FTU2VydmljZXMucGFyc2UoXCJiXCIpLnRvU3RyaW5nKCkgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkuc3RyaW5nVG9TaWduO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKiogS25vd24gdmFsdWVzIG9mIHtAbGluayBFbmNyeXB0aW9uQWxnb3JpdGhtVHlwZX0gdGhhdCB0aGUgc2VydmljZSBhY2NlcHRzLiAqL1xuZXhwb3J0cy5Lbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChLbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlKSB7XG4gICAgS25vd25FbmNyeXB0aW9uQWxnb3JpdGhtVHlwZVtcIkFFUzI1NlwiXSA9IFwiQUVTMjU2XCI7XG59KShleHBvcnRzLktub3duRW5jcnlwdGlvbkFsZ29yaXRobVR5cGUgfHwgKGV4cG9ydHMuS25vd25FbmNyeXB0aW9uQWxnb3JpdGhtVHlwZSA9IHt9KSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlc3RFcnJvclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvcmVSZXN0UGlwZWxpbmUuUmVzdEVycm9yOyB9XG59KTtcbmV4cG9ydHMuQWNjb3VudFNBU1Blcm1pc3Npb25zID0gQWNjb3VudFNBU1Blcm1pc3Npb25zO1xuZXhwb3J0cy5BY2NvdW50U0FTUmVzb3VyY2VUeXBlcyA9IEFjY291bnRTQVNSZXNvdXJjZVR5cGVzO1xuZXhwb3J0cy5BY2NvdW50U0FTU2VydmljZXMgPSBBY2NvdW50U0FTU2VydmljZXM7XG5leHBvcnRzLkFub255bW91c0NyZWRlbnRpYWwgPSBBbm9ueW1vdXNDcmVkZW50aWFsO1xuZXhwb3J0cy5Bbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5ID0gQW5vbnltb3VzQ3JlZGVudGlhbFBvbGljeTtcbmV4cG9ydHMuQXBwZW5kQmxvYkNsaWVudCA9IEFwcGVuZEJsb2JDbGllbnQ7XG5leHBvcnRzLkJhc2VSZXF1ZXN0UG9saWN5ID0gQmFzZVJlcXVlc3RQb2xpY3k7XG5leHBvcnRzLkJsb2JCYXRjaCA9IEJsb2JCYXRjaDtcbmV4cG9ydHMuQmxvYkJhdGNoQ2xpZW50ID0gQmxvYkJhdGNoQ2xpZW50O1xuZXhwb3J0cy5CbG9iQ2xpZW50ID0gQmxvYkNsaWVudDtcbmV4cG9ydHMuQmxvYkxlYXNlQ2xpZW50ID0gQmxvYkxlYXNlQ2xpZW50O1xuZXhwb3J0cy5CbG9iU0FTUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnM7XG5leHBvcnRzLkJsb2JTZXJ2aWNlQ2xpZW50ID0gQmxvYlNlcnZpY2VDbGllbnQ7XG5leHBvcnRzLkJsb2NrQmxvYkNsaWVudCA9IEJsb2NrQmxvYkNsaWVudDtcbmV4cG9ydHMuQ29udGFpbmVyQ2xpZW50ID0gQ29udGFpbmVyQ2xpZW50O1xuZXhwb3J0cy5Db250YWluZXJTQVNQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zO1xuZXhwb3J0cy5DcmVkZW50aWFsID0gQ3JlZGVudGlhbDtcbmV4cG9ydHMuQ3JlZGVudGlhbFBvbGljeSA9IENyZWRlbnRpYWxQb2xpY3k7XG5leHBvcnRzLlBhZ2VCbG9iQ2xpZW50ID0gUGFnZUJsb2JDbGllbnQ7XG5leHBvcnRzLlBpcGVsaW5lID0gUGlwZWxpbmU7XG5leHBvcnRzLlNBU1F1ZXJ5UGFyYW1ldGVycyA9IFNBU1F1ZXJ5UGFyYW1ldGVycztcbmV4cG9ydHMuU3RvcmFnZUJyb3dzZXJQb2xpY3kgPSBTdG9yYWdlQnJvd3NlclBvbGljeTtcbmV4cG9ydHMuU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5ID0gU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5O1xuZXhwb3J0cy5TdG9yYWdlT0F1dGhTY29wZXMgPSBTdG9yYWdlT0F1dGhTY29wZXM7XG5leHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeSA9IFN0b3JhZ2VSZXRyeVBvbGljeTtcbmV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeSA9IFN0b3JhZ2VSZXRyeVBvbGljeUZhY3Rvcnk7XG5leHBvcnRzLlN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsID0gU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWw7XG5leHBvcnRzLlN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5ID0gU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3k7XG5leHBvcnRzLmdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycyA9IGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycztcbmV4cG9ydHMuZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzID0gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzO1xuZXhwb3J0cy5nZXRCbG9iU2VydmljZUFjY291bnRBdWRpZW5jZSA9IGdldEJsb2JTZXJ2aWNlQWNjb3VudEF1ZGllbmNlO1xuZXhwb3J0cy5pc1BpcGVsaW5lTGlrZSA9IGlzUGlwZWxpbmVMaWtlO1xuZXhwb3J0cy5sb2dnZXIgPSBsb2dnZXI7XG5leHBvcnRzLm5ld1BpcGVsaW5lID0gbmV3UGlwZWxpbmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51cGxvYWRaaXBUb0Jsb2JTdG9yYWdlID0gdm9pZCAwO1xuY29uc3Qgc3RvcmFnZV9ibG9iXzEgPSByZXF1aXJlKFwiQGF6dXJlL3N0b3JhZ2UtYmxvYlwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9jb25maWdcIik7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmNvbnN0IGNyeXB0byA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3J5cHRvXCIpKTtcbmNvbnN0IHN0cmVhbSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwic3RyZWFtXCIpKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5mdW5jdGlvbiB1cGxvYWRaaXBUb0Jsb2JTdG9yYWdlKGF1dGhlbnRpY2F0ZWRVcGxvYWRVUkwsIHppcFVwbG9hZFN0cmVhbSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCB1cGxvYWRCeXRlQ291bnQgPSAwO1xuICAgICAgICBsZXQgbGFzdFByb2dyZXNzVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgY2h1bmtUaW1lciA9IChpbnRlcnZhbCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKERhdGUubm93KCkgLSBsYXN0UHJvZ3Jlc3NUaW1lID4gaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VwbG9hZCBwcm9ncmVzcyBzdGFsbGVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYXhDb25jdXJyZW5jeSA9ICgwLCBjb25maWdfMS5nZXRDb25jdXJyZW5jeSkoKTtcbiAgICAgICAgY29uc3QgYnVmZmVyU2l6ZSA9ICgwLCBjb25maWdfMS5nZXRVcGxvYWRDaHVua1NpemUpKCk7XG4gICAgICAgIGNvbnN0IGJsb2JDbGllbnQgPSBuZXcgc3RvcmFnZV9ibG9iXzEuQmxvYkNsaWVudChhdXRoZW50aWNhdGVkVXBsb2FkVVJMKTtcbiAgICAgICAgY29uc3QgYmxvY2tCbG9iQ2xpZW50ID0gYmxvYkNsaWVudC5nZXRCbG9ja0Jsb2JDbGllbnQoKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgVXBsb2FkaW5nIGFydGlmYWN0IHppcCB0byBibG9iIHN0b3JhZ2Ugd2l0aCBtYXhDb25jdXJyZW5jeTogJHttYXhDb25jdXJyZW5jeX0sIGJ1ZmZlclNpemU6ICR7YnVmZmVyU2l6ZX1gKTtcbiAgICAgICAgY29uc3QgdXBsb2FkQ2FsbGJhY2sgPSAocHJvZ3Jlc3MpID0+IHtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgVXBsb2FkZWQgYnl0ZXMgJHtwcm9ncmVzcy5sb2FkZWRCeXRlc31gKTtcbiAgICAgICAgICAgIHVwbG9hZEJ5dGVDb3VudCA9IHByb2dyZXNzLmxvYWRlZEJ5dGVzO1xuICAgICAgICAgICAgbGFzdFByb2dyZXNzVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBibG9iSFRUUEhlYWRlcnM6IHsgYmxvYkNvbnRlbnRUeXBlOiAnemlwJyB9LFxuICAgICAgICAgICAgb25Qcm9ncmVzczogdXBsb2FkQ2FsbGJhY2ssXG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2hhMjU2SGFzaCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdXBsb2FkU3RyZWFtID0gbmV3IHN0cmVhbS5QYXNzVGhyb3VnaCgpO1xuICAgICAgICBjb25zdCBoYXNoU3RyZWFtID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICAgICAgICB6aXBVcGxvYWRTdHJlYW0ucGlwZSh1cGxvYWRTdHJlYW0pOyAvLyBUaGlzIHN0cmVhbSBpcyB1c2VkIGZvciB0aGUgdXBsb2FkXG4gICAgICAgIHppcFVwbG9hZFN0cmVhbS5waXBlKGhhc2hTdHJlYW0pLnNldEVuY29kaW5nKCdoZXgnKTsgLy8gVGhpcyBzdHJlYW0gaXMgdXNlZCB0byBjb21wdXRlIGEgaGFzaCBvZiB0aGUgemlwIGNvbnRlbnQgdGhhdCBnZXRzIHVzZWQuIEludGVncml0eSBjaGVja1xuICAgICAgICBjb3JlLmluZm8oJ0JlZ2lubmluZyB1cGxvYWQgb2YgYXJ0aWZhY3QgY29udGVudCB0byBibG9iIHN0b3JhZ2UnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIFByb21pc2UucmFjZShbXG4gICAgICAgICAgICAgICAgYmxvY2tCbG9iQ2xpZW50LnVwbG9hZFN0cmVhbSh1cGxvYWRTdHJlYW0sIGJ1ZmZlclNpemUsIG1heENvbmN1cnJlbmN5LCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBjaHVua1RpbWVyKCgwLCBjb25maWdfMS5nZXRVcGxvYWRDaHVua1RpbWVvdXQpKCkpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvcnNfMS5OZXR3b3JrRXJyb3IuaXNOZXR3b3JrRXJyb3JDb2RlKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5OZXR3b3JrRXJyb3IoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb3JlLmluZm8oJ0ZpbmlzaGVkIHVwbG9hZGluZyBhcnRpZmFjdCBjb250ZW50IHRvIGJsb2Igc3RvcmFnZSEnKTtcbiAgICAgICAgaGFzaFN0cmVhbS5lbmQoKTtcbiAgICAgICAgc2hhMjU2SGFzaCA9IGhhc2hTdHJlYW0ucmVhZCgpO1xuICAgICAgICBjb3JlLmluZm8oYFNIQTI1NiBoYXNoIG9mIHVwbG9hZGVkIGFydGlmYWN0IHppcCBpcyAke3NoYTI1Nkhhc2h9YCk7XG4gICAgICAgIGlmICh1cGxvYWRCeXRlQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIGNvcmUud2FybmluZyhgTm8gZGF0YSB3YXMgdXBsb2FkZWQgdG8gYmxvYiBzdG9yYWdlLiBSZXBvcnRlZCB1cGxvYWQgYnl0ZSBjb3VudCBpcyAwLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cGxvYWRTaXplOiB1cGxvYWRCeXRlQ291bnQsXG4gICAgICAgICAgICBzaGEyNTZIYXNoXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLnVwbG9hZFppcFRvQmxvYlN0b3JhZ2UgPSB1cGxvYWRaaXBUb0Jsb2JTdG9yYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmxvYi11cGxvYWQuanMubWFwIiwKICAgICJjb25zdCBpc1dpbmRvd3MgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgcHJvY2VzcyAmJlxuICBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInXG5tb2R1bGUuZXhwb3J0cyA9IGlzV2luZG93cyA/IHsgc2VwOiAnXFxcXCcgfSA6IHsgc2VwOiAnLycgfVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGJhbGFuY2VkO1xuZnVuY3Rpb24gYmFsYW5jZWQoYSwgYiwgc3RyKSB7XG4gIGlmIChhIGluc3RhbmNlb2YgUmVnRXhwKSBhID0gbWF5YmVNYXRjaChhLCBzdHIpO1xuICBpZiAoYiBpbnN0YW5jZW9mIFJlZ0V4cCkgYiA9IG1heWJlTWF0Y2goYiwgc3RyKTtcblxuICB2YXIgciA9IHJhbmdlKGEsIGIsIHN0cik7XG5cbiAgcmV0dXJuIHIgJiYge1xuICAgIHN0YXJ0OiByWzBdLFxuICAgIGVuZDogclsxXSxcbiAgICBwcmU6IHN0ci5zbGljZSgwLCByWzBdKSxcbiAgICBib2R5OiBzdHIuc2xpY2UoclswXSArIGEubGVuZ3RoLCByWzFdKSxcbiAgICBwb3N0OiBzdHIuc2xpY2UoclsxXSArIGIubGVuZ3RoKVxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXliZU1hdGNoKHJlZywgc3RyKSB7XG4gIHZhciBtID0gc3RyLm1hdGNoKHJlZyk7XG4gIHJldHVybiBtID8gbVswXSA6IG51bGw7XG59XG5cbmJhbGFuY2VkLnJhbmdlID0gcmFuZ2U7XG5mdW5jdGlvbiByYW5nZShhLCBiLCBzdHIpIHtcbiAgdmFyIGJlZ3MsIGJlZywgbGVmdCwgcmlnaHQsIHJlc3VsdDtcbiAgdmFyIGFpID0gc3RyLmluZGV4T2YoYSk7XG4gIHZhciBiaSA9IHN0ci5pbmRleE9mKGIsIGFpICsgMSk7XG4gIHZhciBpID0gYWk7XG5cbiAgaWYgKGFpID49IDAgJiYgYmkgPiAwKSB7XG4gICAgaWYoYT09PWIpIHtcbiAgICAgIHJldHVybiBbYWksIGJpXTtcbiAgICB9XG4gICAgYmVncyA9IFtdO1xuICAgIGxlZnQgPSBzdHIubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPj0gMCAmJiAhcmVzdWx0KSB7XG4gICAgICBpZiAoaSA9PSBhaSkge1xuICAgICAgICBiZWdzLnB1c2goaSk7XG4gICAgICAgIGFpID0gc3RyLmluZGV4T2YoYSwgaSArIDEpO1xuICAgICAgfSBlbHNlIGlmIChiZWdzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHJlc3VsdCA9IFsgYmVncy5wb3AoKSwgYmkgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlZyA9IGJlZ3MucG9wKCk7XG4gICAgICAgIGlmIChiZWcgPCBsZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IGJlZztcbiAgICAgICAgICByaWdodCA9IGJpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmkgPSBzdHIuaW5kZXhPZihiLCBpICsgMSk7XG4gICAgICB9XG5cbiAgICAgIGkgPSBhaSA8IGJpICYmIGFpID49IDAgPyBhaSA6IGJpO1xuICAgIH1cblxuICAgIGlmIChiZWdzLmxlbmd0aCkge1xuICAgICAgcmVzdWx0ID0gWyBsZWZ0LCByaWdodCBdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLAogICAgInZhciBiYWxhbmNlZCA9IHJlcXVpcmUoJ2JhbGFuY2VkLW1hdGNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwYW5kVG9wO1xuXG52YXIgZXNjU2xhc2ggPSAnXFwwU0xBU0gnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjT3BlbiA9ICdcXDBPUEVOJytNYXRoLnJhbmRvbSgpKydcXDAnO1xudmFyIGVzY0Nsb3NlID0gJ1xcMENMT1NFJytNYXRoLnJhbmRvbSgpKydcXDAnO1xudmFyIGVzY0NvbW1hID0gJ1xcMENPTU1BJytNYXRoLnJhbmRvbSgpKydcXDAnO1xudmFyIGVzY1BlcmlvZCA9ICdcXDBQRVJJT0QnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG5cbmZ1bmN0aW9uIG51bWVyaWMoc3RyKSB7XG4gIHJldHVybiBwYXJzZUludChzdHIsIDEwKSA9PSBzdHJcbiAgICA/IHBhcnNlSW50KHN0ciwgMTApXG4gICAgOiBzdHIuY2hhckNvZGVBdCgwKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlQnJhY2VzKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KCdcXFxcXFxcXCcpLmpvaW4oZXNjU2xhc2gpXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFx7Jykuam9pbihlc2NPcGVuKVxuICAgICAgICAgICAgLnNwbGl0KCdcXFxcfScpLmpvaW4oZXNjQ2xvc2UpXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFwsJykuam9pbihlc2NDb21tYSlcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXC4nKS5qb2luKGVzY1BlcmlvZCk7XG59XG5cbmZ1bmN0aW9uIHVuZXNjYXBlQnJhY2VzKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KGVzY1NsYXNoKS5qb2luKCdcXFxcJylcbiAgICAgICAgICAgIC5zcGxpdChlc2NPcGVuKS5qb2luKCd7JylcbiAgICAgICAgICAgIC5zcGxpdChlc2NDbG9zZSkuam9pbignfScpXG4gICAgICAgICAgICAuc3BsaXQoZXNjQ29tbWEpLmpvaW4oJywnKVxuICAgICAgICAgICAgLnNwbGl0KGVzY1BlcmlvZCkuam9pbignLicpO1xufVxuXG5cbi8vIEJhc2ljYWxseSBqdXN0IHN0ci5zcGxpdChcIixcIiksIGJ1dCBoYW5kbGluZyBjYXNlc1xuLy8gd2hlcmUgd2UgaGF2ZSBuZXN0ZWQgYnJhY2VkIHNlY3Rpb25zLCB3aGljaCBzaG91bGQgYmVcbi8vIHRyZWF0ZWQgYXMgaW5kaXZpZHVhbCBtZW1iZXJzLCBsaWtlIHthLHtiLGN9LGR9XG5mdW5jdGlvbiBwYXJzZUNvbW1hUGFydHMoc3RyKSB7XG4gIGlmICghc3RyKVxuICAgIHJldHVybiBbJyddO1xuXG4gIHZhciBwYXJ0cyA9IFtdO1xuICB2YXIgbSA9IGJhbGFuY2VkKCd7JywgJ30nLCBzdHIpO1xuXG4gIGlmICghbSlcbiAgICByZXR1cm4gc3RyLnNwbGl0KCcsJyk7XG5cbiAgdmFyIHByZSA9IG0ucHJlO1xuICB2YXIgYm9keSA9IG0uYm9keTtcbiAgdmFyIHBvc3QgPSBtLnBvc3Q7XG4gIHZhciBwID0gcHJlLnNwbGl0KCcsJyk7XG5cbiAgcFtwLmxlbmd0aC0xXSArPSAneycgKyBib2R5ICsgJ30nO1xuICB2YXIgcG9zdFBhcnRzID0gcGFyc2VDb21tYVBhcnRzKHBvc3QpO1xuICBpZiAocG9zdC5sZW5ndGgpIHtcbiAgICBwW3AubGVuZ3RoLTFdICs9IHBvc3RQYXJ0cy5zaGlmdCgpO1xuICAgIHAucHVzaC5hcHBseShwLCBwb3N0UGFydHMpO1xuICB9XG5cbiAgcGFydHMucHVzaC5hcHBseShwYXJ0cywgcCk7XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG5mdW5jdGlvbiBleHBhbmRUb3Aoc3RyKSB7XG4gIGlmICghc3RyKVxuICAgIHJldHVybiBbXTtcblxuICAvLyBJIGRvbid0IGtub3cgd2h5IEJhc2ggNC4zIGRvZXMgdGhpcywgYnV0IGl0IGRvZXMuXG4gIC8vIEFueXRoaW5nIHN0YXJ0aW5nIHdpdGgge30gd2lsbCBoYXZlIHRoZSBmaXJzdCB0d28gYnl0ZXMgcHJlc2VydmVkXG4gIC8vIGJ1dCAqb25seSogYXQgdGhlIHRvcCBsZXZlbCwgc28ge30sYX1iIHdpbGwgbm90IGV4cGFuZCB0byBhbnl0aGluZyxcbiAgLy8gYnV0IGF7fSxifWMgd2lsbCBiZSBleHBhbmRlZCB0byBbYX1jLGFiY10uXG4gIC8vIE9uZSBjb3VsZCBhcmd1ZSB0aGF0IHRoaXMgaXMgYSBidWcgaW4gQmFzaCwgYnV0IHNpbmNlIHRoZSBnb2FsIG9mXG4gIC8vIHRoaXMgbW9kdWxlIGlzIHRvIG1hdGNoIEJhc2gncyBydWxlcywgd2UgZXNjYXBlIGEgbGVhZGluZyB7fVxuICBpZiAoc3RyLnN1YnN0cigwLCAyKSA9PT0gJ3t9Jykge1xuICAgIHN0ciA9ICdcXFxce1xcXFx9JyArIHN0ci5zdWJzdHIoMik7XG4gIH1cblxuICByZXR1cm4gZXhwYW5kKGVzY2FwZUJyYWNlcyhzdHIpLCB0cnVlKS5tYXAodW5lc2NhcGVCcmFjZXMpO1xufVxuXG5mdW5jdGlvbiBlbWJyYWNlKHN0cikge1xuICByZXR1cm4gJ3snICsgc3RyICsgJ30nO1xufVxuZnVuY3Rpb24gaXNQYWRkZWQoZWwpIHtcbiAgcmV0dXJuIC9eLT8wXFxkLy50ZXN0KGVsKTtcbn1cblxuZnVuY3Rpb24gbHRlKGksIHkpIHtcbiAgcmV0dXJuIGkgPD0geTtcbn1cbmZ1bmN0aW9uIGd0ZShpLCB5KSB7XG4gIHJldHVybiBpID49IHk7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZChzdHIsIGlzVG9wKSB7XG4gIHZhciBleHBhbnNpb25zID0gW107XG5cbiAgdmFyIG0gPSBiYWxhbmNlZCgneycsICd9Jywgc3RyKTtcbiAgaWYgKCFtKSByZXR1cm4gW3N0cl07XG5cbiAgLy8gbm8gbmVlZCB0byBleHBhbmQgcHJlLCBzaW5jZSBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIGZyZWUgb2YgYnJhY2Utc2V0c1xuICB2YXIgcHJlID0gbS5wcmU7XG4gIHZhciBwb3N0ID0gbS5wb3N0Lmxlbmd0aFxuICAgID8gZXhwYW5kKG0ucG9zdCwgZmFsc2UpXG4gICAgOiBbJyddO1xuXG4gIGlmICgvXFwkJC8udGVzdChtLnByZSkpIHsgICAgXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBwb3N0Lmxlbmd0aDsgaysrKSB7XG4gICAgICB2YXIgZXhwYW5zaW9uID0gcHJlKyAneycgKyBtLmJvZHkgKyAnfScgKyBwb3N0W2tdO1xuICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpc051bWVyaWNTZXF1ZW5jZSA9IC9eLT9cXGQrXFwuXFwuLT9cXGQrKD86XFwuXFwuLT9cXGQrKT8kLy50ZXN0KG0uYm9keSk7XG4gICAgdmFyIGlzQWxwaGFTZXF1ZW5jZSA9IC9eW2EtekEtWl1cXC5cXC5bYS16QS1aXSg/OlxcLlxcLi0/XFxkKyk/JC8udGVzdChtLmJvZHkpO1xuICAgIHZhciBpc1NlcXVlbmNlID0gaXNOdW1lcmljU2VxdWVuY2UgfHwgaXNBbHBoYVNlcXVlbmNlO1xuICAgIHZhciBpc09wdGlvbnMgPSBtLmJvZHkuaW5kZXhPZignLCcpID49IDA7XG4gICAgaWYgKCFpc1NlcXVlbmNlICYmICFpc09wdGlvbnMpIHtcbiAgICAgIC8vIHthfSxifVxuICAgICAgaWYgKG0ucG9zdC5tYXRjaCgvLC4qXFx9LykpIHtcbiAgICAgICAgc3RyID0gbS5wcmUgKyAneycgKyBtLmJvZHkgKyBlc2NDbG9zZSArIG0ucG9zdDtcbiAgICAgICAgcmV0dXJuIGV4cGFuZChzdHIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtzdHJdO1xuICAgIH1cblxuICAgIHZhciBuO1xuICAgIGlmIChpc1NlcXVlbmNlKSB7XG4gICAgICBuID0gbS5ib2R5LnNwbGl0KC9cXC5cXC4vKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IHBhcnNlQ29tbWFQYXJ0cyhtLmJvZHkpO1xuICAgICAgaWYgKG4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIHh7e2EsYn19eSA9PT4geHthfXkgeHtifXlcbiAgICAgICAgbiA9IGV4cGFuZChuWzBdLCBmYWxzZSkubWFwKGVtYnJhY2UpO1xuICAgICAgICBpZiAobi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gcG9zdC5tYXAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIG0ucHJlICsgblswXSArIHA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBuIGlzIHRoZSBwYXJ0cywgYW5kIHdlIGtub3cgaXQncyBub3QgYSBjb21tYSBzZXRcbiAgICAvLyB3aXRoIGEgc2luZ2xlIGVudHJ5LlxuICAgIHZhciBOO1xuXG4gICAgaWYgKGlzU2VxdWVuY2UpIHtcbiAgICAgIHZhciB4ID0gbnVtZXJpYyhuWzBdKTtcbiAgICAgIHZhciB5ID0gbnVtZXJpYyhuWzFdKTtcbiAgICAgIHZhciB3aWR0aCA9IE1hdGgubWF4KG5bMF0ubGVuZ3RoLCBuWzFdLmxlbmd0aClcbiAgICAgIHZhciBpbmNyID0gbi5sZW5ndGggPT0gM1xuICAgICAgICA/IE1hdGguYWJzKG51bWVyaWMoblsyXSkpXG4gICAgICAgIDogMTtcbiAgICAgIHZhciB0ZXN0ID0gbHRlO1xuICAgICAgdmFyIHJldmVyc2UgPSB5IDwgeDtcbiAgICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgIGluY3IgKj0gLTE7XG4gICAgICAgIHRlc3QgPSBndGU7XG4gICAgICB9XG4gICAgICB2YXIgcGFkID0gbi5zb21lKGlzUGFkZGVkKTtcblxuICAgICAgTiA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0geDsgdGVzdChpLCB5KTsgaSArPSBpbmNyKSB7XG4gICAgICAgIHZhciBjO1xuICAgICAgICBpZiAoaXNBbHBoYVNlcXVlbmNlKSB7XG4gICAgICAgICAgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgICAgaWYgKGMgPT09ICdcXFxcJylcbiAgICAgICAgICAgIGMgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjID0gU3RyaW5nKGkpO1xuICAgICAgICAgIGlmIChwYWQpIHtcbiAgICAgICAgICAgIHZhciBuZWVkID0gd2lkdGggLSBjLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChuZWVkID4gMCkge1xuICAgICAgICAgICAgICB2YXIgeiA9IG5ldyBBcnJheShuZWVkICsgMSkuam9pbignMCcpO1xuICAgICAgICAgICAgICBpZiAoaSA8IDApXG4gICAgICAgICAgICAgICAgYyA9ICctJyArIHogKyBjLnNsaWNlKDEpO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYyA9IHogKyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBOLnB1c2goYyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIE4gPSBbXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIE4ucHVzaC5hcHBseShOLCBleHBhbmQobltqXSwgZmFsc2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IE4ubGVuZ3RoOyBqKyspIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcG9zdC5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgZXhwYW5zaW9uID0gcHJlICsgTltqXSArIHBvc3Rba107XG4gICAgICAgIGlmICghaXNUb3AgfHwgaXNTZXF1ZW5jZSB8fCBleHBhbnNpb24pXG4gICAgICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuc2lvbnM7XG59XG5cbiIsCiAgICAiY29uc3QgbWluaW1hdGNoID0gbW9kdWxlLmV4cG9ydHMgPSAocCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKVxuXG4gIC8vIHNob3J0Y3V0OiBjb21tZW50cyBtYXRjaCBub3RoaW5nLlxuICBpZiAoIW9wdGlvbnMubm9jb21tZW50ICYmIHBhdHRlcm4uY2hhckF0KDApID09PSAnIycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1hdGNoKHApXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWluaW1hdGNoXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCcuL2xpYi9wYXRoLmpzJylcbm1pbmltYXRjaC5zZXAgPSBwYXRoLnNlcFxuXG5jb25zdCBHTE9CU1RBUiA9IFN5bWJvbCgnZ2xvYnN0YXIgKionKVxubWluaW1hdGNoLkdMT0JTVEFSID0gR0xPQlNUQVJcbmNvbnN0IGV4cGFuZCA9IHJlcXVpcmUoJ2JyYWNlLWV4cGFuc2lvbicpXG5cbmNvbnN0IHBsVHlwZXMgPSB7XG4gICchJzogeyBvcGVuOiAnKD86KD8hKD86JywgY2xvc2U6ICcpKVteL10qPyknfSxcbiAgJz8nOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJyk/JyB9LFxuICAnKyc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKSsnIH0sXG4gICcqJzogeyBvcGVuOiAnKD86JywgY2xvc2U6ICcpKicgfSxcbiAgJ0AnOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJyknIH1cbn1cblxuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbi8vIGRvbid0IG5lZWQgdG8gZXNjYXBlIC8gd2hlbiB1c2luZyBuZXcgUmVnRXhwKClcbmNvbnN0IHFtYXJrID0gJ1teL10nXG5cbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG5jb25zdCBzdGFyID0gcW1hcmsgKyAnKj8nXG5cbi8vICoqIHdoZW4gZG90cyBhcmUgYWxsb3dlZC4gIEFueXRoaW5nIGdvZXMsIGV4Y2VwdCAuLiBhbmQgLlxuLy8gbm90ICheIG9yIC8gZm9sbG93ZWQgYnkgb25lIG9yIHR3byBkb3RzIGZvbGxvd2VkIGJ5ICQgb3IgLyksXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJEb3QgPSAnKD86KD8hKD86XFxcXFxcL3xeKSg/OlxcXFwuezEsMn0pKCR8XFxcXFxcLykpLikqPydcblxuLy8gbm90IGEgXiBvciAvIGZvbGxvd2VkIGJ5IGEgZG90LFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyTm9Eb3QgPSAnKD86KD8hKD86XFxcXFxcL3xeKVxcXFwuKS4pKj8nXG5cbi8vIFwiYWJjXCIgLT4geyBhOnRydWUsIGI6dHJ1ZSwgYzp0cnVlIH1cbmNvbnN0IGNoYXJTZXQgPSBzID0+IHMuc3BsaXQoJycpLnJlZHVjZSgoc2V0LCBjKSA9PiB7XG4gIHNldFtjXSA9IHRydWVcbiAgcmV0dXJuIHNldFxufSwge30pXG5cbi8vIGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIGVzY2FwZWQgaW4gUmVnRXhwLlxuY29uc3QgcmVTcGVjaWFscyA9IGNoYXJTZXQoJygpLip7fSs/W11eJFxcXFwhJylcblxuLy8gY2hhcmFjdGVycyB0aGF0IGluZGljYXRlIHdlIGhhdmUgdG8gYWRkIHRoZSBwYXR0ZXJuIHN0YXJ0XG5jb25zdCBhZGRQYXR0ZXJuU3RhcnRTZXQgPSBjaGFyU2V0KCdbLignKVxuXG4vLyBub3JtYWxpemVzIHNsYXNoZXMuXG5jb25zdCBzbGFzaFNwbGl0ID0gL1xcLysvXG5cbm1pbmltYXRjaC5maWx0ZXIgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PlxuICAocCwgaSwgbGlzdCkgPT4gbWluaW1hdGNoKHAsIHBhdHRlcm4sIG9wdGlvbnMpXG5cbmNvbnN0IGV4dCA9IChhLCBiID0ge30pID0+IHtcbiAgY29uc3QgdCA9IHt9XG4gIE9iamVjdC5rZXlzKGEpLmZvckVhY2goayA9PiB0W2tdID0gYVtrXSlcbiAgT2JqZWN0LmtleXMoYikuZm9yRWFjaChrID0+IHRba10gPSBiW2tdKVxuICByZXR1cm4gdFxufVxuXG5taW5pbWF0Y2guZGVmYXVsdHMgPSBkZWYgPT4ge1xuICBpZiAoIWRlZiB8fCB0eXBlb2YgZGVmICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LmtleXMoZGVmKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gbWluaW1hdGNoXG4gIH1cblxuICBjb25zdCBvcmlnID0gbWluaW1hdGNoXG5cbiAgY29uc3QgbSA9IChwLCBwYXR0ZXJuLCBvcHRpb25zKSA9PiBvcmlnKHAsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuICBtLk1pbmltYXRjaCA9IGNsYXNzIE1pbmltYXRjaCBleHRlbmRzIG9yaWcuTWluaW1hdGNoIHtcbiAgICBjb25zdHJ1Y3RvciAocGF0dGVybiwgb3B0aW9ucykge1xuICAgICAgc3VwZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gICAgfVxuICB9XG4gIG0uTWluaW1hdGNoLmRlZmF1bHRzID0gb3B0aW9ucyA9PiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKS5NaW5pbWF0Y2hcbiAgbS5maWx0ZXIgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5maWx0ZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0uZGVmYXVsdHMgPSBvcHRpb25zID0+IG9yaWcuZGVmYXVsdHMoZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0ubWFrZVJlID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IG9yaWcubWFrZVJlKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuICBtLmJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IG9yaWcuYnJhY2VFeHBhbmQocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0ubWF0Y2ggPSAobGlzdCwgcGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5tYXRjaChsaXN0LCBwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcblxuICByZXR1cm4gbVxufVxuXG5cblxuXG5cbi8vIEJyYWNlIGV4cGFuc2lvbjpcbi8vIGF7YixjfWQgLT4gYWJkIGFjZFxuLy8gYXtiLH1jIC0+IGFiYyBhY1xuLy8gYXswLi4zfWQgLT4gYTBkIGExZCBhMmQgYTNkXG4vLyBhe2IsY3tkLGV9Zn1nIC0+IGFiZyBhY2RmZyBhY2VmZ1xuLy8gYXtiLGN9ZHtlLGZ9ZyAtPiBhYmRlZyBhY2RlZyBhYmRlZyBhYmRmZ1xuLy9cbi8vIEludmFsaWQgc2V0cyBhcmUgbm90IGV4cGFuZGVkLlxuLy8gYXsyLi59YiAtPiBhezIuLn1iXG4vLyBhe2J9YyAtPiBhe2J9Y1xubWluaW1hdGNoLmJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IGJyYWNlRXhwYW5kKHBhdHRlcm4sIG9wdGlvbnMpXG5cbmNvbnN0IGJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybilcblxuICAvLyBUaGFua3MgdG8gWWV0aW5nIExpIDxodHRwczovL2dpdGh1Yi5jb20veWV0aW5nbGk+IGZvclxuICAvLyBpbXByb3ZpbmcgdGhpcyByZWdleHAgdG8gYXZvaWQgYSBSZURPUyB2dWxuZXJhYmlsaXR5LlxuICBpZiAob3B0aW9ucy5ub2JyYWNlIHx8ICEvXFx7KD86KD8hXFx7KS4pKlxcfS8udGVzdChwYXR0ZXJuKSkge1xuICAgIC8vIHNob3J0Y3V0LiBubyBuZWVkIHRvIGV4cGFuZC5cbiAgICByZXR1cm4gW3BhdHRlcm5dXG4gIH1cblxuICByZXR1cm4gZXhwYW5kKHBhdHRlcm4pXG59XG5cbmNvbnN0IE1BWF9QQVRURVJOX0xFTkdUSCA9IDEwMjQgKiA2NFxuY29uc3QgYXNzZXJ0VmFsaWRQYXR0ZXJuID0gcGF0dGVybiA9PiB7XG4gIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhdHRlcm4nKVxuICB9XG5cbiAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gTUFYX1BBVFRFUk5fTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGF0dGVybiBpcyB0b28gbG9uZycpXG4gIH1cbn1cblxuLy8gcGFyc2UgYSBjb21wb25lbnQgb2YgdGhlIGV4cGFuZGVkIHNldC5cbi8vIEF0IHRoaXMgcG9pbnQsIG5vIHBhdHRlcm4gbWF5IGNvbnRhaW4gXCIvXCIgaW4gaXRcbi8vIHNvIHdlJ3JlIGdvaW5nIHRvIHJldHVybiBhIDJkIGFycmF5LCB3aGVyZSBlYWNoIGVudHJ5IGlzIHRoZSBmdWxsXG4vLyBwYXR0ZXJuLCBzcGxpdCBvbiAnLycsIGFuZCB0aGVuIHR1cm5lZCBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uLlxuLy8gQSByZWdleHAgaXMgbWFkZSBhdCB0aGUgZW5kIHdoaWNoIGpvaW5zIGVhY2ggYXJyYXkgd2l0aCBhblxuLy8gZXNjYXBlZCAvLCBhbmQgYW5vdGhlciBmdWxsIG9uZSB3aGljaCBqb2lucyBlYWNoIHJlZ2V4cCB3aXRoIHwuXG4vL1xuLy8gRm9sbG93aW5nIHRoZSBsZWFkIG9mIEJhc2ggNC4xLCBub3RlIHRoYXQgXCIqKlwiIG9ubHkgaGFzIHNwZWNpYWwgbWVhbmluZ1xuLy8gd2hlbiBpdCBpcyB0aGUgKm9ubHkqIHRoaW5nIGluIGEgcGF0aCBwb3J0aW9uLiAgT3RoZXJ3aXNlLCBhbnkgc2VyaWVzXG4vLyBvZiAqIGlzIGVxdWl2YWxlbnQgdG8gYSBzaW5nbGUgKi4gIEdsb2JzdGFyIGJlaGF2aW9yIGlzIGVuYWJsZWQgYnlcbi8vIGRlZmF1bHQsIGFuZCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBvcHRpb25zLm5vZ2xvYnN0YXIuXG5jb25zdCBTVUJQQVJTRSA9IFN5bWJvbCgnc3VicGFyc2UnKVxuXG5taW5pbWF0Y2gubWFrZVJlID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+XG4gIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucyB8fCB7fSkubWFrZVJlKClcblxubWluaW1hdGNoLm1hdGNoID0gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucylcbiAgbGlzdCA9IGxpc3QuZmlsdGVyKGYgPT4gbW0ubWF0Y2goZikpXG4gIGlmIChtbS5vcHRpb25zLm5vbnVsbCAmJiAhbGlzdC5sZW5ndGgpIHtcbiAgICBsaXN0LnB1c2gocGF0dGVybilcbiAgfVxuICByZXR1cm4gbGlzdFxufVxuXG4vLyByZXBsYWNlIHN0dWZmIGxpa2UgXFwqIHdpdGggKlxuY29uc3QgZ2xvYlVuZXNjYXBlID0gcyA9PiBzLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJylcbmNvbnN0IGNoYXJVbmVzY2FwZSA9IHMgPT4gcy5yZXBsYWNlKC9cXFxcKFteLVxcXV0pL2csICckMScpXG5jb25zdCByZWdFeHBFc2NhcGUgPSBzID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKVxuY29uc3QgYnJhRXhwRXNjYXBlID0gcyA9PiBzLnJlcGxhY2UoL1tbXFxdXFxcXF0vZywgJ1xcXFwkJicpXG5cbmNsYXNzIE1pbmltYXRjaCB7XG4gIGNvbnN0cnVjdG9yIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuc2V0ID0gW11cbiAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuXG4gICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9ICEhb3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZSB8fFxuICAgICAgb3B0aW9ucy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09IGZhbHNlXG4gICAgaWYgKHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUpIHtcbiAgICAgIHRoaXMucGF0dGVybiA9IHRoaXMucGF0dGVybi5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICB9XG4gICAgdGhpcy5yZWdleHAgPSBudWxsXG4gICAgdGhpcy5uZWdhdGUgPSBmYWxzZVxuICAgIHRoaXMuY29tbWVudCA9IGZhbHNlXG4gICAgdGhpcy5lbXB0eSA9IGZhbHNlXG4gICAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWxcblxuICAgIC8vIG1ha2UgdGhlIHNldCBvZiByZWdleHBzIGV0Yy5cbiAgICB0aGlzLm1ha2UoKVxuICB9XG5cbiAgZGVidWcgKCkge31cblxuICBtYWtlICgpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgLy8gZW1wdHkgcGF0dGVybnMgYW5kIGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICB0aGlzLmNvbW1lbnQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFwYXR0ZXJuKSB7XG4gICAgICB0aGlzLmVtcHR5ID0gdHJ1ZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gc3RlcCAxOiBmaWd1cmUgb3V0IG5lZ2F0aW9uLCBldGMuXG4gICAgdGhpcy5wYXJzZU5lZ2F0ZSgpXG5cbiAgICAvLyBzdGVwIDI6IGV4cGFuZCBicmFjZXNcbiAgICBsZXQgc2V0ID0gdGhpcy5nbG9iU2V0ID0gdGhpcy5icmFjZUV4cGFuZCgpXG5cbiAgICBpZiAob3B0aW9ucy5kZWJ1ZykgdGhpcy5kZWJ1ZyA9ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKC4uLmFyZ3MpXG5cbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gICAgLy8gc3RlcCAzOiBub3cgd2UgaGF2ZSBhIHNldCwgc28gdHVybiBlYWNoIG9uZSBpbnRvIGEgc2VyaWVzIG9mIHBhdGgtcG9ydGlvblxuICAgIC8vIG1hdGNoaW5nIHBhdHRlcm5zLlxuICAgIC8vIFRoZXNlIHdpbGwgYmUgcmVnZXhwcywgZXhjZXB0IGluIHRoZSBjYXNlIG9mIFwiKipcIiwgd2hpY2ggaXNcbiAgICAvLyBzZXQgdG8gdGhlIEdMT0JTVEFSIG9iamVjdCBmb3IgZ2xvYnN0YXIgYmVoYXZpb3IsXG4gICAgLy8gYW5kIHdpbGwgbm90IGNvbnRhaW4gYW55IC8gY2hhcmFjdGVyc1xuICAgIHNldCA9IHRoaXMuZ2xvYlBhcnRzID0gc2V0Lm1hcChzID0+IHMuc3BsaXQoc2xhc2hTcGxpdCkpXG5cbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gICAgLy8gZ2xvYiAtLT4gcmVnZXhwc1xuICAgIHNldCA9IHNldC5tYXAoKHMsIHNpLCBzZXQpID0+IHMubWFwKHRoaXMucGFyc2UsIHRoaXMpKVxuXG4gICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHNldClcblxuICAgIC8vIGZpbHRlciBvdXQgZXZlcnl0aGluZyB0aGF0IGRpZG4ndCBjb21waWxlIHByb3Blcmx5LlxuICAgIHNldCA9IHNldC5maWx0ZXIocyA9PiBzLmluZGV4T2YoZmFsc2UpID09PSAtMSlcblxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgICB0aGlzLnNldCA9IHNldFxuICB9XG5cbiAgcGFyc2VOZWdhdGUgKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubm9uZWdhdGUpIHJldHVyblxuXG4gICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVyblxuICAgIGxldCBuZWdhdGUgPSBmYWxzZVxuICAgIGxldCBuZWdhdGVPZmZzZXQgPSAwXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoICYmIHBhdHRlcm4uY2hhckF0KGkpID09PSAnISc7IGkrKykge1xuICAgICAgbmVnYXRlID0gIW5lZ2F0ZVxuICAgICAgbmVnYXRlT2Zmc2V0KytcbiAgICB9XG5cbiAgICBpZiAobmVnYXRlT2Zmc2V0KSB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKG5lZ2F0ZU9mZnNldClcbiAgICB0aGlzLm5lZ2F0ZSA9IG5lZ2F0ZVxuICB9XG5cbiAgLy8gc2V0IHBhcnRpYWwgdG8gdHJ1ZSB0byB0ZXN0IGlmLCBmb3IgZXhhbXBsZSxcbiAgLy8gXCIvYS9iXCIgbWF0Y2hlcyB0aGUgc3RhcnQgb2YgXCIvKi9iLyovZFwiXG4gIC8vIFBhcnRpYWwgbWVhbnMsIGlmIHlvdSBydW4gb3V0IG9mIGZpbGUgYmVmb3JlIHlvdSBydW5cbiAgLy8gb3V0IG9mIHBhdHRlcm4sIHRoZW4gdGhhdCdzIGZpbmUsIGFzIGxvbmcgYXMgYWxsXG4gIC8vIHRoZSBwYXJ0cyBtYXRjaC5cbiAgbWF0Y2hPbmUgKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUnLFxuICAgICAgeyAndGhpcyc6IHRoaXMsIGZpbGU6IGZpbGUsIHBhdHRlcm46IHBhdHRlcm4gfSlcblxuICAgIHRoaXMuZGVidWcoJ21hdGNoT25lJywgZmlsZS5sZW5ndGgsIHBhdHRlcm4ubGVuZ3RoKVxuXG4gICAgZm9yICh2YXIgZmkgPSAwLFxuICAgICAgICBwaSA9IDAsXG4gICAgICAgIGZsID0gZmlsZS5sZW5ndGgsXG4gICAgICAgIHBsID0gcGF0dGVybi5sZW5ndGhcbiAgICAgICAgOyAoZmkgPCBmbCkgJiYgKHBpIDwgcGwpXG4gICAgICAgIDsgZmkrKywgcGkrKykge1xuICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUgbG9vcCcpXG4gICAgICB2YXIgcCA9IHBhdHRlcm5bcGldXG4gICAgICB2YXIgZiA9IGZpbGVbZmldXG5cbiAgICAgIHRoaXMuZGVidWcocGF0dGVybiwgcCwgZilcblxuICAgICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUuXG4gICAgICAvLyBzb21lIGludmFsaWQgcmVnZXhwIHN0dWZmIGluIHRoZSBzZXQuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChwID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGlmIChwID09PSBHTE9CU1RBUikge1xuICAgICAgICB0aGlzLmRlYnVnKCdHTE9CU1RBUicsIFtwYXR0ZXJuLCBwLCBmXSlcblxuICAgICAgICAvLyBcIioqXCJcbiAgICAgICAgLy8gYS8qKi9iLyoqL2Mgd291bGQgbWF0Y2ggdGhlIGZvbGxvd2luZzpcbiAgICAgICAgLy8gYS9iL3gveS96L2NcbiAgICAgICAgLy8gYS94L3kvei9iL2NcbiAgICAgICAgLy8gYS9iL3gvYi94L2NcbiAgICAgICAgLy8gYS9iL2NcbiAgICAgICAgLy8gVG8gZG8gdGhpcywgdGFrZSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlclxuICAgICAgICAvLyB0aGUgKiosIGFuZCBzZWUgaWYgaXQgd291bGQgbWF0Y2ggdGhlIGZpbGUgcmVtYWluZGVyLlxuICAgICAgICAvLyBJZiBzbywgcmV0dXJuIHN1Y2Nlc3MuXG4gICAgICAgIC8vIElmIG5vdCwgdGhlICoqIFwic3dhbGxvd3NcIiBhIHNlZ21lbnQsIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgIC8vIFRoaXMgaXMgcmVjdXJzaXZlbHkgYXdmdWwuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGEvKiovYi8qKi9jIG1hdGNoaW5nIGEvYi94L3kvei9jXG4gICAgICAgIC8vIC0gYSBtYXRjaGVzIGFcbiAgICAgICAgLy8gLSBkb3VibGVzdGFyXG4gICAgICAgIC8vICAgLSBtYXRjaE9uZShiL3gveS96L2MsIGIvKiovYylcbiAgICAgICAgLy8gICAgIC0gYiBtYXRjaGVzIGJcbiAgICAgICAgLy8gICAgIC0gZG91Ymxlc3RhclxuICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKHgveS96L2MsIGMpIC0+IG5vXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoeS96L2MsIGMpIC0+IG5vXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoei9jLCBjKSAtPiBub1xuICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKGMsIGMpIHllcywgaGl0XG4gICAgICAgIHZhciBmciA9IGZpXG4gICAgICAgIHZhciBwciA9IHBpICsgMVxuICAgICAgICBpZiAocHIgPT09IHBsKSB7XG4gICAgICAgICAgdGhpcy5kZWJ1ZygnKiogYXQgdGhlIGVuZCcpXG4gICAgICAgICAgLy8gYSAqKiBhdCB0aGUgZW5kIHdpbGwganVzdCBzd2FsbG93IHRoZSByZXN0LlxuICAgICAgICAgIC8vIFdlIGhhdmUgZm91bmQgYSBtYXRjaC5cbiAgICAgICAgICAvLyBob3dldmVyLCBpdCB3aWxsIG5vdCBzd2FsbG93IC8ueCwgdW5sZXNzXG4gICAgICAgICAgLy8gb3B0aW9ucy5kb3QgaXMgc2V0LlxuICAgICAgICAgIC8vIC4gYW5kIC4uIGFyZSAqbmV2ZXIqIG1hdGNoZWQgYnkgKiosIGZvciBleHBsb3NpdmVseVxuICAgICAgICAgIC8vIGV4cG9uZW50aWFsIHJlYXNvbnMuXG4gICAgICAgICAgZm9yICg7IGZpIDwgZmw7IGZpKyspIHtcbiAgICAgICAgICAgIGlmIChmaWxlW2ZpXSA9PT0gJy4nIHx8IGZpbGVbZmldID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgZmlsZVtmaV0uY2hhckF0KDApID09PSAnLicpKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9rLCBsZXQncyBzZWUgaWYgd2UgY2FuIHN3YWxsb3cgd2hhdGV2ZXIgd2UgY2FuLlxuICAgICAgICB3aGlsZSAoZnIgPCBmbCkge1xuICAgICAgICAgIHZhciBzd2FsbG93ZWUgPSBmaWxlW2ZyXVxuXG4gICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuZ2xvYnN0YXIgd2hpbGUnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIsIHN3YWxsb3dlZSlcblxuICAgICAgICAgIC8vIFhYWCByZW1vdmUgdGhpcyBzbGljZS4gIEp1c3QgcGFzcyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICAgICAgaWYgKHRoaXMubWF0Y2hPbmUoZmlsZS5zbGljZShmciksIHBhdHRlcm4uc2xpY2UocHIpLCBwYXJ0aWFsKSkge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZ2xvYnN0YXIgZm91bmQgbWF0Y2ghJywgZnIsIGZsLCBzd2FsbG93ZWUpXG4gICAgICAgICAgICAvLyBmb3VuZCBhIG1hdGNoLlxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY2FuJ3Qgc3dhbGxvdyBcIi5cIiBvciBcIi4uXCIgZXZlci5cbiAgICAgICAgICAgIC8vIGNhbiBvbmx5IHN3YWxsb3cgXCIuZm9vXCIgd2hlbiBleHBsaWNpdGx5IGFza2VkLlxuICAgICAgICAgICAgaWYgKHN3YWxsb3dlZSA9PT0gJy4nIHx8IHN3YWxsb3dlZSA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIHN3YWxsb3dlZS5jaGFyQXQoMCkgPT09ICcuJykpIHtcbiAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZG90IGRldGVjdGVkIScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcilcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gKiogc3dhbGxvd3MgYSBzZWdtZW50LCBhbmQgY29udGludWUuXG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBzd2FsbG93IGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlJylcbiAgICAgICAgICAgIGZyKytcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBubyBtYXRjaCB3YXMgZm91bmQuXG4gICAgICAgIC8vIEhvd2V2ZXIsIGluIHBhcnRpYWwgbW9kZSwgd2UgY2FuJ3Qgc2F5IHRoaXMgaXMgbmVjZXNzYXJpbHkgb3Zlci5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBtb3JlICpwYXR0ZXJuKiBsZWZ0LCB0aGVuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocGFydGlhbCkge1xuICAgICAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZVxuICAgICAgICAgIHRoaXMuZGVidWcoJ1xcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8nLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpXG4gICAgICAgICAgaWYgKGZyID09PSBmbCkgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gKipcbiAgICAgIC8vIG5vbi1tYWdpYyBwYXR0ZXJucyBqdXN0IGhhdmUgdG8gbWF0Y2ggZXhhY3RseVxuICAgICAgLy8gcGF0dGVybnMgd2l0aCBtYWdpYyBoYXZlIGJlZW4gdHVybmVkIGludG8gcmVnZXhwcy5cbiAgICAgIHZhciBoaXRcbiAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGl0ID0gZiA9PT0gcFxuICAgICAgICB0aGlzLmRlYnVnKCdzdHJpbmcgbWF0Y2gnLCBwLCBmLCBoaXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaXQgPSBmLm1hdGNoKHApXG4gICAgICAgIHRoaXMuZGVidWcoJ3BhdHRlcm4gbWF0Y2gnLCBwLCBmLCBoaXQpXG4gICAgICB9XG5cbiAgICAgIGlmICghaGl0KSByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgVGhpcyBjYW4gb25seSBtYXRjaCBhXG4gICAgLy8gY29ycmVzcG9uZGluZyBcIlwiIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgICAvLyBhIHBhdHRlcm4gdGhhdCBlbmRzIGluIC8sIHVubGVzcyB0aGUgcGF0dGVybiBqdXN0XG4gICAgLy8gZG9lc24ndCBoYXZlIGFueSBtb3JlIGZvciBpdC4gQnV0LCBhL2IvIHNob3VsZCAqbm90KlxuICAgIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gICAgLy8gW14vXSo/IHBhdHRlcm4sIGV4Y2VwdCBpbiBwYXJ0aWFsIG1vZGUsIHdoZXJlIGl0IG1pZ2h0XG4gICAgLy8gc2ltcGx5IG5vdCBiZSByZWFjaGVkIHlldC5cbiAgICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuXG4gICAgLy8gbm93IGVpdGhlciB3ZSBmZWxsIG9mZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBvciB3ZSdyZSBkb25lLlxuICAgIGlmIChmaSA9PT0gZmwgJiYgcGkgPT09IHBsKSB7XG4gICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICAvLyBhbiBleGFjdCBoaXQhXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoZmkgPT09IGZsKSB7XG4gICAgICAvLyByYW4gb3V0IG9mIGZpbGUsIGJ1dCBzdGlsbCBoYWQgcGF0dGVybiBsZWZ0LlxuICAgICAgLy8gdGhpcyBpcyBvayBpZiB3ZSdyZSBkb2luZyB0aGUgbWF0Y2ggYXMgcGFydCBvZlxuICAgICAgLy8gYSBnbG9iIGZzIHRyYXZlcnNhbC5cbiAgICAgIHJldHVybiBwYXJ0aWFsXG4gICAgfSBlbHNlIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovIGlmIChwaSA9PT0gcGwpIHtcbiAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiwgc3RpbGwgaGF2ZSBmaWxlIGxlZnQuXG4gICAgICAvLyB0aGlzIGlzIG9ubHkgYWNjZXB0YWJsZSBpZiB3ZSdyZSBvbiB0aGUgdmVyeSBsYXN0XG4gICAgICAvLyBlbXB0eSBzZWdtZW50IG9mIGEgZmlsZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAgICAvLyBhLyogc2hvdWxkIG1hdGNoIGEvYi9cbiAgICAgIHJldHVybiAoZmkgPT09IGZsIC0gMSkgJiYgKGZpbGVbZmldID09PSAnJylcbiAgICB9XG5cbiAgICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGUuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3d0Zj8nKVxuICB9XG5cbiAgYnJhY2VFeHBhbmQgKCkge1xuICAgIHJldHVybiBicmFjZUV4cGFuZCh0aGlzLnBhdHRlcm4sIHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIHBhcnNlIChwYXR0ZXJuLCBpc1N1Yikge1xuICAgIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgLy8gc2hvcnRjdXRzXG4gICAgaWYgKHBhdHRlcm4gPT09ICcqKicpIHtcbiAgICAgIGlmICghb3B0aW9ucy5ub2dsb2JzdGFyKVxuICAgICAgICByZXR1cm4gR0xPQlNUQVJcbiAgICAgIGVsc2VcbiAgICAgICAgcGF0dGVybiA9ICcqJ1xuICAgIH1cbiAgICBpZiAocGF0dGVybiA9PT0gJycpIHJldHVybiAnJ1xuXG4gICAgbGV0IHJlID0gJydcbiAgICBsZXQgaGFzTWFnaWMgPSBmYWxzZVxuICAgIGxldCBlc2NhcGluZyA9IGZhbHNlXG4gICAgLy8gPyA9PiBvbmUgc2luZ2xlIGNoYXJhY3RlclxuICAgIGNvbnN0IHBhdHRlcm5MaXN0U3RhY2sgPSBbXVxuICAgIGNvbnN0IG5lZ2F0aXZlTGlzdHMgPSBbXVxuICAgIGxldCBzdGF0ZUNoYXJcbiAgICBsZXQgaW5DbGFzcyA9IGZhbHNlXG4gICAgbGV0IHJlQ2xhc3NTdGFydCA9IC0xXG4gICAgbGV0IGNsYXNzU3RhcnQgPSAtMVxuICAgIGxldCBjc1xuICAgIGxldCBwbFxuICAgIGxldCBzcFxuICAgIC8vIC4gYW5kIC4uIG5ldmVyIG1hdGNoIGFueXRoaW5nIHRoYXQgZG9lc24ndCBzdGFydCB3aXRoIC4sXG4gICAgLy8gZXZlbiB3aGVuIG9wdGlvbnMuZG90IGlzIHNldC4gIEhvd2V2ZXIsIGlmIHRoZSBwYXR0ZXJuXG4gICAgLy8gc3RhcnRzIHdpdGggLiwgdGhlbiB0cmF2ZXJzYWwgcGF0dGVybnMgY2FuIG1hdGNoLlxuICAgIGxldCBkb3RUcmF2QWxsb3dlZCA9IHBhdHRlcm4uY2hhckF0KDApID09PSAnLidcbiAgICBsZXQgZG90RmlsZUFsbG93ZWQgPSBvcHRpb25zLmRvdCB8fCBkb3RUcmF2QWxsb3dlZFxuICAgIGNvbnN0IHBhdHRlcm5TdGFydCA9ICgpID0+XG4gICAgICBkb3RUcmF2QWxsb3dlZFxuICAgICAgICA/ICcnXG4gICAgICAgIDogZG90RmlsZUFsbG93ZWRcbiAgICAgICAgPyAnKD8hKD86XnxcXFxcLylcXFxcLnsxLDJ9KD86JHxcXFxcLykpJ1xuICAgICAgICA6ICcoPyFcXFxcLiknXG4gICAgY29uc3Qgc3ViUGF0dGVyblN0YXJ0ID0gKHApID0+XG4gICAgICBwLmNoYXJBdCgwKSA9PT0gJy4nXG4gICAgICAgID8gJydcbiAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICA/ICcoPyEoPzpefFxcXFwvKVxcXFwuezEsMn0oPzokfFxcXFwvKSknXG4gICAgICAgIDogJyg/IVxcXFwuKSdcblxuXG4gICAgY29uc3QgY2xlYXJTdGF0ZUNoYXIgPSAoKSA9PiB7XG4gICAgICBpZiAoc3RhdGVDaGFyKSB7XG4gICAgICAgIC8vIHdlIGhhZCBzb21lIHN0YXRlLXRyYWNraW5nIGNoYXJhY3RlclxuICAgICAgICAvLyB0aGF0IHdhc24ndCBjb25zdW1lZCBieSB0aGlzIHBhc3MuXG4gICAgICAgIHN3aXRjaCAoc3RhdGVDaGFyKSB7XG4gICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICByZSArPSBzdGFyXG4gICAgICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJz8nOlxuICAgICAgICAgICAgcmUgKz0gcW1hcmtcbiAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJyArIHN0YXRlQ2hhclxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1ZygnY2xlYXJTdGF0ZUNoYXIgJWogJWonLCBzdGF0ZUNoYXIsIHJlKVxuICAgICAgICBzdGF0ZUNoYXIgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBjOyAoaSA8IHBhdHRlcm4ubGVuZ3RoKSAmJiAoYyA9IHBhdHRlcm4uY2hhckF0KGkpKTsgaSsrKSB7XG4gICAgICB0aGlzLmRlYnVnKCclc1xcdCVzICVzICVqJywgcGF0dGVybiwgaSwgcmUsIGMpXG5cbiAgICAgIC8vIHNraXAgb3ZlciBhbnkgdGhhdCBhcmUgZXNjYXBlZC5cbiAgICAgIGlmIChlc2NhcGluZykge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGNvbXBsZXRlbHkgbm90IGFsbG93ZWQsIGV2ZW4gZXNjYXBlZC4gKi9cbiAgICAgICAgaWYgKGMgPT09ICcvJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlU3BlY2lhbHNbY10pIHtcbiAgICAgICAgICByZSArPSAnXFxcXCdcbiAgICAgICAgfVxuICAgICAgICByZSArPSBjXG4gICAgICAgIGVzY2FwaW5nID0gZmFsc2VcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgJy8nOiB7XG4gICAgICAgICAgLy8gU2hvdWxkIGFscmVhZHkgYmUgcGF0aC1zcGxpdCBieSBub3cuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdcXFxcJzpcbiAgICAgICAgICBpZiAoaW5DbGFzcyAmJiBwYXR0ZXJuLmNoYXJBdChpICsgMSkgPT09ICctJykge1xuICAgICAgICAgICAgcmUgKz0gY1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gdGhlIHZhcmlvdXMgc3RhdGVDaGFyIHZhbHVlc1xuICAgICAgICAvLyBmb3IgdGhlIFwiZXh0Z2xvYlwiIHN0dWZmLlxuICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgY2FzZSAnKic6XG4gICAgICAgIGNhc2UgJysnOlxuICAgICAgICBjYXNlICdAJzpcbiAgICAgICAgY2FzZSAnISc6XG4gICAgICAgICAgdGhpcy5kZWJ1ZygnJXNcXHQlcyAlcyAlaiA8LS0gc3RhdGVDaGFyJywgcGF0dGVybiwgaSwgcmUsIGMpXG5cbiAgICAgICAgICAvLyBhbGwgb2YgdGhvc2UgYXJlIGxpdGVyYWxzIGluc2lkZSBhIGNsYXNzLCBleGNlcHQgdGhhdFxuICAgICAgICAgIC8vIHRoZSBnbG9iIFshYV0gbWVhbnMgW15hXSBpbiByZWdleHBcbiAgICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnICBpbiBjbGFzcycpXG4gICAgICAgICAgICBpZiAoYyA9PT0gJyEnICYmIGkgPT09IGNsYXNzU3RhcnQgKyAxKSBjID0gJ14nXG4gICAgICAgICAgICByZSArPSBjXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHN0YXRlQ2hhciwgdGhlbiBpdCBtZWFuc1xuICAgICAgICAgIC8vIHRoYXQgdGhlcmUgd2FzIHNvbWV0aGluZyBsaWtlICoqIG9yICs/IGluIHRoZXJlLlxuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3RhdGVDaGFyLCB0aGVuIHByb2NlZWQgd2l0aCB0aGlzIG9uZS5cbiAgICAgICAgICB0aGlzLmRlYnVnKCdjYWxsIGNsZWFyU3RhdGVDaGFyICVqJywgc3RhdGVDaGFyKVxuICAgICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgICBzdGF0ZUNoYXIgPSBjXG4gICAgICAgICAgLy8gaWYgZXh0Z2xvYiBpcyBkaXNhYmxlZCwgdGhlbiArKGFzZGZ8Zm9vKSBpc24ndCBhIHRoaW5nLlxuICAgICAgICAgIC8vIGp1c3QgY2xlYXIgdGhlIHN0YXRlY2hhciAqbm93KiwgcmF0aGVyIHRoYW4gZXZlbiBkaXZpbmcgaW50b1xuICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuTGlzdCBzdHVmZi5cbiAgICAgICAgICBpZiAob3B0aW9ucy5ub2V4dCkgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgJygnOiB7XG4gICAgICAgICAgaWYgKGluQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlICs9ICcoJ1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0YXRlQ2hhcikge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwoJ1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwbEVudHJ5ID0ge1xuICAgICAgICAgICAgdHlwZTogc3RhdGVDaGFyLFxuICAgICAgICAgICAgc3RhcnQ6IGkgLSAxLFxuICAgICAgICAgICAgcmVTdGFydDogcmUubGVuZ3RoLFxuICAgICAgICAgICAgb3BlbjogcGxUeXBlc1tzdGF0ZUNoYXJdLm9wZW4sXG4gICAgICAgICAgICBjbG9zZTogcGxUeXBlc1tzdGF0ZUNoYXJdLmNsb3NlLFxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ1xcdCcsIHBsRW50cnkpXG4gICAgICAgICAgcGF0dGVybkxpc3RTdGFjay5wdXNoKHBsRW50cnkpXG4gICAgICAgICAgLy8gbmVnYXRpb24gaXMgKD86KD8hKD86anMpKD86PHJlc3Q+KSlbXi9dKilcbiAgICAgICAgICByZSArPSBwbEVudHJ5Lm9wZW5cbiAgICAgICAgICAvLyBuZXh0IGVudHJ5IHN0YXJ0cyB3aXRoIGEgZG90IG1heWJlP1xuICAgICAgICAgIGlmIChwbEVudHJ5LnN0YXJ0ID09PSAwICYmIHBsRW50cnkudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICBkb3RUcmF2QWxsb3dlZCA9IHRydWVcbiAgICAgICAgICAgIHJlICs9IHN1YlBhdHRlcm5TdGFydChwYXR0ZXJuLnNsaWNlKGkgKyAxKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kZWJ1ZygncGxUeXBlICVqICVqJywgc3RhdGVDaGFyLCByZSlcbiAgICAgICAgICBzdGF0ZUNoYXIgPSBmYWxzZVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICcpJzoge1xuICAgICAgICAgIGNvbnN0IHBsRW50cnkgPSBwYXR0ZXJuTGlzdFN0YWNrW3BhdHRlcm5MaXN0U3RhY2subGVuZ3RoIC0gMV1cbiAgICAgICAgICBpZiAoaW5DbGFzcyB8fCAhcGxFbnRyeSkge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwpJ1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcGF0dGVybkxpc3RTdGFjay5wb3AoKVxuXG4gICAgICAgICAgLy8gY2xvc2luZyBhbiBleHRnbG9iXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgICAgICAgIHBsID0gcGxFbnRyeVxuICAgICAgICAgIC8vIG5lZ2F0aW9uIGlzICg/Oig/IWpzKVteL10qKVxuICAgICAgICAgIC8vIFRoZSBvdGhlcnMgYXJlICg/OjxwYXR0ZXJuPik8dHlwZT5cbiAgICAgICAgICByZSArPSBwbC5jbG9zZVxuICAgICAgICAgIGlmIChwbC50eXBlID09PSAnIScpIHtcbiAgICAgICAgICAgIG5lZ2F0aXZlTGlzdHMucHVzaChPYmplY3QuYXNzaWduKHBsLCB7IHJlRW5kOiByZS5sZW5ndGggfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICd8Jzoge1xuICAgICAgICAgIGNvbnN0IHBsRW50cnkgPSBwYXR0ZXJuTGlzdFN0YWNrW3BhdHRlcm5MaXN0U3RhY2subGVuZ3RoIC0gMV1cbiAgICAgICAgICBpZiAoaW5DbGFzcyB8fCAhcGxFbnRyeSkge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFx8J1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgICAgcmUgKz0gJ3wnXG4gICAgICAgICAgLy8gbmV4dCBzdWJwYXR0ZXJuIGNhbiBzdGFydCB3aXRoIGEgZG90P1xuICAgICAgICAgIGlmIChwbEVudHJ5LnN0YXJ0ID09PSAwICYmIHBsRW50cnkudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICBkb3RUcmF2QWxsb3dlZCA9IHRydWVcbiAgICAgICAgICAgIHJlICs9IHN1YlBhdHRlcm5TdGFydChwYXR0ZXJuLnNsaWNlKGkgKyAxKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoZXNlIGFyZSBtb3N0bHkgdGhlIHNhbWUgaW4gcmVnZXhwIGFuZCBnbG9iXG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgIC8vIHN3YWxsb3cgYW55IHN0YXRlLXRyYWNraW5nIGNoYXIgYmVmb3JlIHRoZSBbXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuXG4gICAgICAgICAgaWYgKGluQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJyArIGNcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5DbGFzcyA9IHRydWVcbiAgICAgICAgICBjbGFzc1N0YXJ0ID0gaVxuICAgICAgICAgIHJlQ2xhc3NTdGFydCA9IHJlLmxlbmd0aFxuICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAvLyAgYSByaWdodCBicmFja2V0IHNoYWxsIGxvc2UgaXRzIHNwZWNpYWxcbiAgICAgICAgICAvLyAgbWVhbmluZyBhbmQgcmVwcmVzZW50IGl0c2VsZiBpblxuICAgICAgICAgIC8vICBhIGJyYWNrZXQgZXhwcmVzc2lvbiBpZiBpdCBvY2N1cnNcbiAgICAgICAgICAvLyAgZmlyc3QgaW4gdGhlIGxpc3QuICAtLSBQT1NJWC4yIDIuOC4zLjJcbiAgICAgICAgICBpZiAoaSA9PT0gY2xhc3NTdGFydCArIDEgfHwgIWluQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJyArIGNcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc3BsaXQgd2hlcmUgdGhlIGxhc3QgWyB3YXMsIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlXG4gICAgICAgICAgLy8gYW4gaW52YWxpZCByZS4gaWYgc28sIHJlLXdhbGsgdGhlIGNvbnRlbnRzIG9mIHRoZVxuICAgICAgICAgIC8vIHdvdWxkLWJlIGNsYXNzIHRvIHJlLXRyYW5zbGF0ZSBhbnkgY2hhcmFjdGVycyB0aGF0XG4gICAgICAgICAgLy8gd2VyZSBwYXNzZWQgdGhyb3VnaCBhcy1pc1xuICAgICAgICAgIC8vIFRPRE86IEl0IHdvdWxkIHByb2JhYmx5IGJlIGZhc3RlciB0byBkZXRlcm1pbmUgdGhpc1xuICAgICAgICAgIC8vIHdpdGhvdXQgYSB0cnkvY2F0Y2ggYW5kIGEgbmV3IFJlZ0V4cCwgYnV0IGl0J3MgdHJpY2t5XG4gICAgICAgICAgLy8gdG8gZG8gc2FmZWx5LiAgRm9yIG5vdywgdGhpcyBpcyBzYWZlIGFuZCB3b3Jrcy5cbiAgICAgICAgICBjcyA9IHBhdHRlcm4uc3Vic3RyaW5nKGNsYXNzU3RhcnQgKyAxLCBpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBSZWdFeHAoJ1snICsgYnJhRXhwRXNjYXBlKGNoYXJVbmVzY2FwZShjcykpICsgJ10nKVxuICAgICAgICAgICAgLy8gbG9va3MgZ29vZCwgZmluaXNoIHVwIHRoZSBjbGFzcy5cbiAgICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICAgICAgLy8gb3V0IG9mIG9yZGVyIHJhbmdlcyBpbiBKUyBhcmUgZXJyb3JzLCBidXQgaW4gZ2xvYiBzeW50YXgsXG4gICAgICAgICAgICAvLyB0aGV5J3JlIGp1c3QgYSByYW5nZSB0aGF0IG1hdGNoZXMgbm90aGluZy5cbiAgICAgICAgICAgIHJlID0gcmUuc3Vic3RyaW5nKDAsIHJlQ2xhc3NTdGFydCkgKyAnKD86JC4pJyAvLyBtYXRjaCBub3RoaW5nIGV2ZXJcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgICAgaW5DbGFzcyA9IGZhbHNlXG4gICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBzd2FsbG93IGFueSBzdGF0ZSBjaGFyIHRoYXQgd2Fzbid0IGNvbnN1bWVkXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuXG4gICAgICAgICAgaWYgKHJlU3BlY2lhbHNbY10gJiYgIShjID09PSAnXicgJiYgaW5DbGFzcykpIHtcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgICBicmVha1xuXG4gICAgICB9IC8vIHN3aXRjaFxuICAgIH0gLy8gZm9yXG5cbiAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbGVmdCBhIGNsYXNzIG9wZW4uXG4gICAgLy8gXCJbYWJjXCIgaXMgdmFsaWQsIGVxdWl2YWxlbnQgdG8gXCJcXFthYmNcIlxuICAgIGlmIChpbkNsYXNzKSB7XG4gICAgICAvLyBzcGxpdCB3aGVyZSB0aGUgbGFzdCBbIHdhcywgYW5kIGVzY2FwZSBpdFxuICAgICAgLy8gdGhpcyBpcyBhIGh1Z2UgcGl0YS4gIFdlIG5vdyBoYXZlIHRvIHJlLXdhbGtcbiAgICAgIC8vIHRoZSBjb250ZW50cyBvZiB0aGUgd291bGQtYmUgY2xhc3MgdG8gcmUtdHJhbnNsYXRlXG4gICAgICAvLyBhbnkgY2hhcmFjdGVycyB0aGF0IHdlcmUgcGFzc2VkIHRocm91Z2ggYXMtaXNcbiAgICAgIGNzID0gcGF0dGVybi5zbGljZShjbGFzc1N0YXJ0ICsgMSlcbiAgICAgIHNwID0gdGhpcy5wYXJzZShjcywgU1VCUEFSU0UpXG4gICAgICByZSA9IHJlLnN1YnN0cmluZygwLCByZUNsYXNzU3RhcnQpICsgJ1xcXFxbJyArIHNwWzBdXG4gICAgICBoYXNNYWdpYyA9IGhhc01hZ2ljIHx8IHNwWzFdXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGhhZCBhICsoIHRoaW5nIGF0IHRoZSAqZW5kKlxuICAgIC8vIG9mIHRoZSBwYXR0ZXJuLlxuICAgIC8vIGVhY2ggcGF0dGVybiBsaXN0IHN0YWNrIGFkZHMgMyBjaGFycywgYW5kIHdlIG5lZWQgdG8gZ28gdGhyb3VnaFxuICAgIC8vIGFuZCBlc2NhcGUgYW55IHwgY2hhcnMgdGhhdCB3ZXJlIHBhc3NlZCB0aHJvdWdoIGFzLWlzIGZvciB0aGUgcmVnZXhwLlxuICAgIC8vIEdvIHRocm91Z2ggYW5kIGVzY2FwZSB0aGVtLCB0YWtpbmcgY2FyZSBub3QgdG8gZG91YmxlLWVzY2FwZSBhbnlcbiAgICAvLyB8IGNoYXJzIHRoYXQgd2VyZSBhbHJlYWR5IGVzY2FwZWQuXG4gICAgZm9yIChwbCA9IHBhdHRlcm5MaXN0U3RhY2sucG9wKCk7IHBsOyBwbCA9IHBhdHRlcm5MaXN0U3RhY2sucG9wKCkpIHtcbiAgICAgIGxldCB0YWlsXG4gICAgICB0YWlsID0gcmUuc2xpY2UocGwucmVTdGFydCArIHBsLm9wZW4ubGVuZ3RoKVxuICAgICAgdGhpcy5kZWJ1Zygnc2V0dGluZyB0YWlsJywgcmUsIHBsKVxuICAgICAgLy8gbWF5YmUgc29tZSBldmVuIG51bWJlciBvZiBcXCwgdGhlbiBtYXliZSAxIFxcLCBmb2xsb3dlZCBieSBhIHxcbiAgICAgIHRhaWwgPSB0YWlsLnJlcGxhY2UoLygoPzpcXFxcezJ9KXswLDY0fSkoXFxcXD8pXFx8L2csIChfLCAkMSwgJDIpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBzaG91bGQgYWxyZWFkeSBiZSBkb25lICovXG4gICAgICAgIGlmICghJDIpIHtcbiAgICAgICAgICAvLyB0aGUgfCBpc24ndCBhbHJlYWR5IGVzY2FwZWQsIHNvIGVzY2FwZSBpdC5cbiAgICAgICAgICAkMiA9ICdcXFxcJ1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmVlZCB0byBlc2NhcGUgYWxsIHRob3NlIHNsYXNoZXMgKmFnYWluKiwgd2l0aG91dCBlc2NhcGluZyB0aGVcbiAgICAgICAgLy8gb25lIHRoYXQgd2UgbmVlZCBmb3IgZXNjYXBpbmcgdGhlIHwgY2hhcmFjdGVyLiAgQXMgaXQgd29ya3Mgb3V0LFxuICAgICAgICAvLyBlc2NhcGluZyBhbiBldmVuIG51bWJlciBvZiBzbGFzaGVzIGNhbiBiZSBkb25lIGJ5IHNpbXBseSByZXBlYXRpbmdcbiAgICAgICAgLy8gaXQgZXhhY3RseSBhZnRlciBpdHNlbGYuICBUaGF0J3Mgd2h5IHRoaXMgdHJpY2sgd29ya3MuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEkgYW0gc29ycnkgdGhhdCB5b3UgaGF2ZSB0byBzZWUgdGhpcy5cbiAgICAgICAgcmV0dXJuICQxICsgJDEgKyAkMiArICd8J1xuICAgICAgfSlcblxuICAgICAgdGhpcy5kZWJ1ZygndGFpbD0lalxcbiAgICVzJywgdGFpbCwgdGFpbCwgcGwsIHJlKVxuICAgICAgY29uc3QgdCA9IHBsLnR5cGUgPT09ICcqJyA/IHN0YXJcbiAgICAgICAgOiBwbC50eXBlID09PSAnPycgPyBxbWFya1xuICAgICAgICA6ICdcXFxcJyArIHBsLnR5cGVcblxuICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICByZSA9IHJlLnNsaWNlKDAsIHBsLnJlU3RhcnQpICsgdCArICdcXFxcKCcgKyB0YWlsXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRyYWlsaW5nIHRoaW5ncyB0aGF0IG9ubHkgbWF0dGVyIGF0IHRoZSB2ZXJ5IGVuZC5cbiAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgaWYgKGVzY2FwaW5nKSB7XG4gICAgICAvLyB0cmFpbGluZyBcXFxcXG4gICAgICByZSArPSAnXFxcXFxcXFwnXG4gICAgfVxuXG4gICAgLy8gb25seSBuZWVkIHRvIGFwcGx5IHRoZSBub2RvdCBzdGFydCBpZiB0aGUgcmUgc3RhcnRzIHdpdGhcbiAgICAvLyBzb21ldGhpbmcgdGhhdCBjb3VsZCBjb25jZWl2YWJseSBjYXB0dXJlIGEgZG90XG4gICAgY29uc3QgYWRkUGF0dGVyblN0YXJ0ID0gYWRkUGF0dGVyblN0YXJ0U2V0W3JlLmNoYXJBdCgwKV1cblxuICAgIC8vIEhhY2sgdG8gd29yayBhcm91bmQgbGFjayBvZiBuZWdhdGl2ZSBsb29rYmVoaW5kIGluIEpTXG4gICAgLy8gQSBwYXR0ZXJuIGxpa2U6ICouISh4KS4hKHl8eikgbmVlZHMgdG8gZW5zdXJlIHRoYXQgYSBuYW1lXG4gICAgLy8gbGlrZSAnYS54eXoueXonIGRvZXNuJ3QgbWF0Y2guICBTbywgdGhlIGZpcnN0IG5lZ2F0aXZlXG4gICAgLy8gbG9va2FoZWFkLCBoYXMgdG8gbG9vayBBTEwgdGhlIHdheSBhaGVhZCwgdG8gdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAobGV0IG4gPSBuZWdhdGl2ZUxpc3RzLmxlbmd0aCAtIDE7IG4gPiAtMTsgbi0tKSB7XG4gICAgICBjb25zdCBubCA9IG5lZ2F0aXZlTGlzdHNbbl1cblxuICAgICAgY29uc3QgbmxCZWZvcmUgPSByZS5zbGljZSgwLCBubC5yZVN0YXJ0KVxuICAgICAgY29uc3QgbmxGaXJzdCA9IHJlLnNsaWNlKG5sLnJlU3RhcnQsIG5sLnJlRW5kIC0gOClcbiAgICAgIGxldCBubEFmdGVyID0gcmUuc2xpY2UobmwucmVFbmQpXG4gICAgICBjb25zdCBubExhc3QgPSByZS5zbGljZShubC5yZUVuZCAtIDgsIG5sLnJlRW5kKSArIG5sQWZ0ZXJcblxuICAgICAgLy8gSGFuZGxlIG5lc3RlZCBzdHVmZiBsaWtlICooKi5qc3whKCouanNvbikpLCB3aGVyZSBvcGVuIHBhcmVuc1xuICAgICAgLy8gbWVhbiB0aGF0IHdlIHNob3VsZCAqbm90KiBpbmNsdWRlIHRoZSApIGluIHRoZSBiaXQgdGhhdCBpcyBjb25zaWRlcmVkXG4gICAgICAvLyBcImFmdGVyXCIgdGhlIG5lZ2F0ZWQgc2VjdGlvbi5cbiAgICAgIGNvbnN0IGNsb3NlUGFyZW5zQmVmb3JlID0gbmxCZWZvcmUuc3BsaXQoJyknKS5sZW5ndGhcbiAgICAgIGNvbnN0IG9wZW5QYXJlbnNCZWZvcmUgPSBubEJlZm9yZS5zcGxpdCgnKCcpLmxlbmd0aCAtIGNsb3NlUGFyZW5zQmVmb3JlXG4gICAgICBsZXQgY2xlYW5BZnRlciA9IG5sQWZ0ZXJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BlblBhcmVuc0JlZm9yZTsgaSsrKSB7XG4gICAgICAgIGNsZWFuQWZ0ZXIgPSBjbGVhbkFmdGVyLnJlcGxhY2UoL1xcKVsrKj9dPy8sICcnKVxuICAgICAgfVxuICAgICAgbmxBZnRlciA9IGNsZWFuQWZ0ZXJcblxuICAgICAgY29uc3QgZG9sbGFyID0gbmxBZnRlciA9PT0gJycgJiYgaXNTdWIgIT09IFNVQlBBUlNFID8gJyg/OiR8XFxcXC8pJyA6ICcnXG5cbiAgICAgIHJlID0gbmxCZWZvcmUgKyBubEZpcnN0ICsgbmxBZnRlciArIGRvbGxhciArIG5sTGFzdFxuICAgIH1cblxuICAgIC8vIGlmIHRoZSByZSBpcyBub3QgXCJcIiBhdCB0aGlzIHBvaW50LCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlXG4gICAgLy8gaXQgZG9lc24ndCBtYXRjaCBhZ2FpbnN0IGFuIGVtcHR5IHBhdGggcGFydC5cbiAgICAvLyBPdGhlcndpc2UgYS8qIHdpbGwgbWF0Y2ggYS8sIHdoaWNoIGl0IHNob3VsZCBub3QuXG4gICAgaWYgKHJlICE9PSAnJyAmJiBoYXNNYWdpYykge1xuICAgICAgcmUgPSAnKD89LiknICsgcmVcbiAgICB9XG5cbiAgICBpZiAoYWRkUGF0dGVyblN0YXJ0KSB7XG4gICAgICByZSA9IHBhdHRlcm5TdGFydCgpICsgcmVcbiAgICB9XG5cbiAgICAvLyBwYXJzaW5nIGp1c3QgYSBwaWVjZSBvZiBhIGxhcmdlciBwYXR0ZXJuLlxuICAgIGlmIChpc1N1YiA9PT0gU1VCUEFSU0UpIHtcbiAgICAgIHJldHVybiBbcmUsIGhhc01hZ2ljXVxuICAgIH1cblxuICAgIC8vIGlmIGl0J3Mgbm9jYXNlLCBhbmQgdGhlIGxjYXNlL3VwcGVyY2FzZSBkb24ndCBtYXRjaCwgaXQncyBtYWdpY1xuICAgIGlmIChvcHRpb25zLm5vY2FzZSAmJiAhaGFzTWFnaWMpIHtcbiAgICAgIGhhc01hZ2ljID0gcGF0dGVybi50b1VwcGVyQ2FzZSgpICE9PSBwYXR0ZXJuLnRvTG93ZXJDYXNlKClcbiAgICB9XG5cbiAgICAvLyBza2lwIHRoZSByZWdleHAgZm9yIG5vbi1tYWdpY2FsIHBhdHRlcm5zXG4gICAgLy8gdW5lc2NhcGUgYW55dGhpbmcgaW4gaXQsIHRob3VnaCwgc28gdGhhdCBpdCdsbCBiZVxuICAgIC8vIGFuIGV4YWN0IG1hdGNoIGFnYWluc3QgYSBmaWxlIGV0Yy5cbiAgICBpZiAoIWhhc01hZ2ljKSB7XG4gICAgICByZXR1cm4gZ2xvYlVuZXNjYXBlKHBhdHRlcm4pXG4gICAgfVxuXG4gICAgY29uc3QgZmxhZ3MgPSBvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBSZWdFeHAoJ14nICsgcmUgKyAnJCcsIGZsYWdzKSwge1xuICAgICAgICBfZ2xvYjogcGF0dGVybixcbiAgICAgICAgX3NyYzogcmUsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVyKSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIHNob3VsZCBiZSBpbXBvc3NpYmxlICovIHtcbiAgICAgIC8vIElmIGl0IHdhcyBhbiBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiwgdGhlbiBpdCBjYW4ndCBtYXRjaFxuICAgICAgLy8gYW55dGhpbmcuICBUaGlzIHRyaWNrIGxvb2tzIGZvciBhIGNoYXJhY3RlciBhZnRlciB0aGUgZW5kIG9mXG4gICAgICAvLyB0aGUgc3RyaW5nLCB3aGljaCBpcyBvZiBjb3Vyc2UgaW1wb3NzaWJsZSwgZXhjZXB0IGluIG11bHRpLWxpbmVcbiAgICAgIC8vIG1vZGUsIGJ1dCBpdCdzIG5vdCBhIC9tIHJlZ2V4LlxuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJyQuJylcbiAgICB9XG4gIH1cblxuICBtYWtlUmUgKCkge1xuICAgIGlmICh0aGlzLnJlZ2V4cCB8fCB0aGlzLnJlZ2V4cCA9PT0gZmFsc2UpIHJldHVybiB0aGlzLnJlZ2V4cFxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gICAgLy8gcGF0dGVybiBzdHJpbmdzLCBvciBcIioqXCIuXG4gICAgLy9cbiAgICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAgIC8vIGJlIHVzZWQsIHJlYWxseSwgYnV0IGl0J3MgcHJldHR5IGNvbnZlbmllbnQgc29tZXRpbWVzLFxuICAgIC8vIHdoZW4geW91IGp1c3Qgd2FudCB0byB3b3JrIHdpdGggYSByZWdleC5cbiAgICBjb25zdCBzZXQgPSB0aGlzLnNldFxuXG4gICAgaWYgKCFzZXQubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlXG4gICAgICByZXR1cm4gdGhpcy5yZWdleHBcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgY29uc3QgdHdvU3RhciA9IG9wdGlvbnMubm9nbG9ic3RhciA/IHN0YXJcbiAgICAgIDogb3B0aW9ucy5kb3QgPyB0d29TdGFyRG90XG4gICAgICA6IHR3b1N0YXJOb0RvdFxuICAgIGNvbnN0IGZsYWdzID0gb3B0aW9ucy5ub2Nhc2UgPyAnaScgOiAnJ1xuXG4gICAgLy8gY29hbGVzY2UgZ2xvYnN0YXJzIGFuZCByZWdleHBpZnkgbm9uLWdsb2JzdGFyIHBhdHRlcm5zXG4gICAgLy8gaWYgaXQncyB0aGUgb25seSBpdGVtLCB0aGVuIHdlIGp1c3QgZG8gb25lIHR3b1N0YXJcbiAgICAvLyBpZiBpdCdzIHRoZSBmaXJzdCwgYW5kIHRoZXJlIGFyZSBtb3JlLCBwcmVwZW5kIChcXC98dHdvU3RhclxcLyk/IHRvIG5leHRcbiAgICAvLyBpZiBpdCdzIHRoZSBsYXN0LCBhcHBlbmQgKFxcL3R3b1N0YXJ8KSB0byBwcmV2aW91c1xuICAgIC8vIGlmIGl0J3MgaW4gdGhlIG1pZGRsZSwgYXBwZW5kIChcXC98XFwvdHdvU3RhclxcLykgdG8gcHJldmlvdXNcbiAgICAvLyB0aGVuIGZpbHRlciBvdXQgR0xPQlNUQVIgc3ltYm9sc1xuICAgIGxldCByZSA9IHNldC5tYXAocGF0dGVybiA9PiB7XG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi5tYXAocCA9PlxuICAgICAgICB0eXBlb2YgcCA9PT0gJ3N0cmluZycgPyByZWdFeHBFc2NhcGUocClcbiAgICAgICAgOiBwID09PSBHTE9CU1RBUiA/IEdMT0JTVEFSXG4gICAgICAgIDogcC5fc3JjXG4gICAgICApLnJlZHVjZSgoc2V0LCBwKSA9PiB7XG4gICAgICAgIGlmICghKHNldFtzZXQubGVuZ3RoIC0gMV0gPT09IEdMT0JTVEFSICYmIHAgPT09IEdMT0JTVEFSKSkge1xuICAgICAgICAgIHNldC5wdXNoKHApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFxuICAgICAgfSwgW10pXG4gICAgICBwYXR0ZXJuLmZvckVhY2goKHAsIGkpID0+IHtcbiAgICAgICAgaWYgKHAgIT09IEdMT0JTVEFSIHx8IHBhdHRlcm5baS0xXSA9PT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHBhdHRlcm5baSsxXSA9ICcoPzpcXFxcXFwvfCcgKyB0d29TdGFyICsgJ1xcXFxcXC8pPycgKyBwYXR0ZXJuW2krMV1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0dGVybltpXSA9IHR3b1N0YXJcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gcGF0dGVybi5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcGF0dGVybltpLTFdICs9ICcoPzpcXFxcXFwvfCcgKyB0d29TdGFyICsgJyk/J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdHRlcm5baS0xXSArPSAnKD86XFxcXFxcL3xcXFxcXFwvJyArIHR3b1N0YXIgKyAnXFxcXFxcLyknICsgcGF0dGVybltpKzFdXG4gICAgICAgICAgcGF0dGVybltpKzFdID0gR0xPQlNUQVJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBwYXR0ZXJuLmZpbHRlcihwID0+IHAgIT09IEdMT0JTVEFSKS5qb2luKCcvJylcbiAgICB9KS5qb2luKCd8JylcblxuICAgIC8vIG11c3QgbWF0Y2ggZW50aXJlIHBhdHRlcm5cbiAgICAvLyBlbmRpbmcgaW4gYSAqIG9yICoqIHdpbGwgbWFrZSBpdCBsZXNzIHN0cmljdC5cbiAgICByZSA9ICdeKD86JyArIHJlICsgJykkJ1xuXG4gICAgLy8gY2FuIG1hdGNoIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3Mgbm90IHRoaXMuXG4gICAgaWYgKHRoaXMubmVnYXRlKSByZSA9ICdeKD8hJyArIHJlICsgJykuKiQnXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBmbGFncylcbiAgICB9IGNhdGNoIChleCkgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBzaG91bGQgYmUgaW1wb3NzaWJsZSAqLyB7XG4gICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlZ2V4cFxuICB9XG5cbiAgbWF0Y2ggKGYsIHBhcnRpYWwgPSB0aGlzLnBhcnRpYWwpIHtcbiAgICB0aGlzLmRlYnVnKCdtYXRjaCcsIGYsIHRoaXMucGF0dGVybilcbiAgICAvLyBzaG9ydC1jaXJjdWl0IGluIHRoZSBjYXNlIG9mIGJ1c3RlZCB0aGluZ3MuXG4gICAgLy8gY29tbWVudHMsIGV0Yy5cbiAgICBpZiAodGhpcy5jb21tZW50KSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5lbXB0eSkgcmV0dXJuIGYgPT09ICcnXG5cbiAgICBpZiAoZiA9PT0gJy8nICYmIHBhcnRpYWwpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICAvLyB3aW5kb3dzOiBuZWVkIHRvIHVzZSAvLCBub3QgXFxcbiAgICBpZiAocGF0aC5zZXAgIT09ICcvJykge1xuICAgICAgZiA9IGYuc3BsaXQocGF0aC5zZXApLmpvaW4oJy8nKVxuICAgIH1cblxuICAgIC8vIHRyZWF0IHRoZSB0ZXN0IHBhdGggYXMgYSBzZXQgb2YgcGF0aHBhcnRzLlxuICAgIGYgPSBmLnNwbGl0KHNsYXNoU3BsaXQpXG4gICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzcGxpdCcsIGYpXG5cbiAgICAvLyBqdXN0IE9ORSBvZiB0aGUgcGF0dGVybiBzZXRzIGluIHRoaXMuc2V0IG5lZWRzIHRvIG1hdGNoXG4gICAgLy8gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHZhbGlkLiAgSWYgbmVnYXRpbmcsIHRoZW4ganVzdCBvbmVcbiAgICAvLyBtYXRjaCBtZWFucyB0aGF0IHdlIGhhdmUgZmFpbGVkLlxuICAgIC8vIEVpdGhlciB3YXksIHJldHVybiBvbiB0aGUgZmlyc3QgaGl0LlxuXG4gICAgY29uc3Qgc2V0ID0gdGhpcy5zZXRcbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NldCcsIHNldClcblxuICAgIC8vIEZpbmQgdGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoIGJ5IGxvb2tpbmcgZm9yIHRoZSBsYXN0IG5vbi1lbXB0eSBzZWdtZW50XG4gICAgbGV0IGZpbGVuYW1lXG4gICAgZm9yIChsZXQgaSA9IGYubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGZpbGVuYW1lID0gZltpXVxuICAgICAgaWYgKGZpbGVuYW1lKSBicmVha1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwYXR0ZXJuID0gc2V0W2ldXG4gICAgICBsZXQgZmlsZSA9IGZcbiAgICAgIGlmIChvcHRpb25zLm1hdGNoQmFzZSAmJiBwYXR0ZXJuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmaWxlID0gW2ZpbGVuYW1lXVxuICAgICAgfVxuICAgICAgY29uc3QgaGl0ID0gdGhpcy5tYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsKVxuICAgICAgaWYgKGhpdCkge1xuICAgICAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSByZXR1cm4gdHJ1ZVxuICAgICAgICByZXR1cm4gIXRoaXMubmVnYXRlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGlkbid0IGdldCBhbnkgaGl0cy4gIHRoaXMgaXMgc3VjY2VzcyBpZiBpdCdzIGEgbmVnYXRpdmVcbiAgICAvLyBwYXR0ZXJuLCBmYWlsdXJlIG90aGVyd2lzZS5cbiAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gdGhpcy5uZWdhdGVcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0cyAoZGVmKSB7XG4gICAgcmV0dXJuIG1pbmltYXRjaC5kZWZhdWx0cyhkZWYpLk1pbmltYXRjaFxuICB9XG59XG5cbm1pbmltYXRjaC5NaW5pbWF0Y2ggPSBNaW5pbWF0Y2hcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZWFkZGlyR2xvYjtcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuY29uc3QgeyBNaW5pbWF0Y2ggfSA9IHJlcXVpcmUoJ21pbmltYXRjaCcpO1xuY29uc3QgeyByZXNvbHZlIH0gPSByZXF1aXJlKCdwYXRoJyk7XG5cbmZ1bmN0aW9uIHJlYWRkaXIoZGlyLCBzdHJpY3QpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy5yZWFkZGlyKGRpciwge3dpdGhGaWxlVHlwZXM6IHRydWV9ICwoZXJyLCBmaWxlcykgPT4ge1xuICAgICAgaWYoZXJyKSB7XG4gICAgICAgIHN3aXRjaCAoZXJyLmNvZGUpIHtcbiAgICAgICAgICBjYXNlICdFTk9URElSJzogICAgICAvLyBOb3QgYSBkaXJlY3RvcnlcbiAgICAgICAgICAgIGlmKHN0cmljdCkge1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnRU5PVFNVUCc6ICAgICAgLy8gT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICBjYXNlICdFTk9FTlQnOiAgICAgICAvLyBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4gICAgICAgICAgY2FzZSAnRU5BTUVUT09MT05HJzogLy8gRmlsZW5hbWUgdG9vIGxvbmdcbiAgICAgICAgICBjYXNlICdVTktOT1dOJzpcbiAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnRUxPT1AnOiAgICAgICAgLy8gVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoZmlsZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHN0YXQoZmlsZSwgZm9sbG93U3ltbGlua3MpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdGF0RnVuYyA9IGZvbGxvd1N5bWxpbmtzID8gZnMuc3RhdCA6IGZzLmxzdGF0O1xuICAgIHN0YXRGdW5jKGZpbGUsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgICAgIGNhc2UgJ0VOT0VOVCc6XG4gICAgICAgICAgICBpZihmb2xsb3dTeW1saW5rcykge1xuICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBsc3RhdCB0byBoYW5kbGUgYnJva2VuIGxpbmtzIGFzIGZpbGVzXG4gICAgICAgICAgICAgIHJlc29sdmUoc3RhdChmaWxlLCBmYWxzZSkpOyBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHN0YXRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiBleHBsb3JlV2Fsa0FzeW5jKGRpciwgcGF0aCwgZm9sbG93U3ltbGlua3MsIHVzZVN0YXQsIHNob3VsZFNraXAsIHN0cmljdCkge1xuICBsZXQgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHBhdGggKyBkaXIsIHN0cmljdCk7XG4gIGZvcihjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgbGV0IG5hbWUgPSBmaWxlLm5hbWU7XG4gICAgaWYobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB1bmRlZmluZWQgZmlsZS5uYW1lIG1lYW5zIHRoZSBgd2l0aEZpbGVUeXBlc2Agb3B0aW9ucyBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5vZGVcbiAgICAgIC8vIHdlIGhhdmUgdG8gY2FsbCB0aGUgc3RhdCBmdW5jdGlvbiB0byBrbm93IGlmIGZpbGUgaXMgZGlyZWN0b3J5IG9yIG5vdC5cbiAgICAgIG5hbWUgPSBmaWxlO1xuICAgICAgdXNlU3RhdCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVuYW1lID0gZGlyICsgJy8nICsgbmFtZTtcbiAgICBjb25zdCByZWxhdGl2ZSA9IGZpbGVuYW1lLnNsaWNlKDEpOyAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgL1xuICAgIGNvbnN0IGFic29sdXRlID0gcGF0aCArICcvJyArIHJlbGF0aXZlO1xuICAgIGxldCBzdGF0cyA9IG51bGw7XG4gICAgaWYodXNlU3RhdCB8fCBmb2xsb3dTeW1saW5rcykge1xuICAgICAgc3RhdHMgPSBhd2FpdCBzdGF0KGFic29sdXRlLCBmb2xsb3dTeW1saW5rcyk7XG4gICAgfVxuICAgIGlmKCFzdGF0cyAmJiBmaWxlLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3RhdHMgPSBmaWxlO1xuICAgIH1cbiAgICBpZihzdGF0cyA9PT0gbnVsbCkge1xuICAgICAgc3RhdHMgPSB7IGlzRGlyZWN0b3J5OiAoKSA9PiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGlmKCFzaG91bGRTa2lwKHJlbGF0aXZlKSkge1xuICAgICAgICB5aWVsZCB7cmVsYXRpdmUsIGFic29sdXRlLCBzdGF0c307XG4gICAgICAgIHlpZWxkKiBleHBsb3JlV2Fsa0FzeW5jKGZpbGVuYW1lLCBwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB5aWVsZCB7cmVsYXRpdmUsIGFic29sdXRlLCBzdGF0c307XG4gICAgfVxuICB9XG59XG5hc3luYyBmdW5jdGlvbiogZXhwbG9yZShwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCkge1xuICB5aWVsZCogZXhwbG9yZVdhbGtBc3luYygnJywgcGF0aCwgZm9sbG93U3ltbGlua3MsIHVzZVN0YXQsIHNob3VsZFNraXAsIHRydWUpO1xufVxuXG5cbmZ1bmN0aW9uIHJlYWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICBwYXR0ZXJuOiBvcHRpb25zLnBhdHRlcm4sXG4gICAgZG90OiAhIW9wdGlvbnMuZG90LFxuICAgIG5vZ2xvYnN0YXI6ICEhb3B0aW9ucy5ub2dsb2JzdGFyLFxuICAgIG1hdGNoQmFzZTogISFvcHRpb25zLm1hdGNoQmFzZSxcbiAgICBub2Nhc2U6ICEhb3B0aW9ucy5ub2Nhc2UsXG4gICAgaWdub3JlOiBvcHRpb25zLmlnbm9yZSxcbiAgICBza2lwOiBvcHRpb25zLnNraXAsXG5cbiAgICBmb2xsb3c6ICEhb3B0aW9ucy5mb2xsb3csXG4gICAgc3RhdDogISFvcHRpb25zLnN0YXQsXG4gICAgbm9kaXI6ICEhb3B0aW9ucy5ub2RpcixcbiAgICBtYXJrOiAhIW9wdGlvbnMubWFyayxcbiAgICBzaWxlbnQ6ICEhb3B0aW9ucy5zaWxlbnQsXG4gICAgYWJzb2x1dGU6ICEhb3B0aW9ucy5hYnNvbHV0ZVxuICB9O1xufVxuXG5jbGFzcyBSZWFkZGlyR2xvYiBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKGN3ZCwgb3B0aW9ucywgY2IpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICBvcHRpb25zID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSByZWFkT3B0aW9ucyhvcHRpb25zIHx8wqB7fSk7XG4gIFxuICAgIHRoaXMubWF0Y2hlcnMgPSBbXTtcbiAgICBpZih0aGlzLm9wdGlvbnMucGF0dGVybikge1xuICAgICAgY29uc3QgbWF0Y2hlcnMgPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5wYXR0ZXJuKSA/IHRoaXMub3B0aW9ucy5wYXR0ZXJuIDogW3RoaXMub3B0aW9ucy5wYXR0ZXJuXTtcbiAgICAgIHRoaXMubWF0Y2hlcnMgPSBtYXRjaGVycy5tYXAoIG0gPT5cbiAgICAgICAgbmV3IE1pbmltYXRjaChtLCB7XG4gICAgICAgICAgZG90OiB0aGlzLm9wdGlvbnMuZG90LFxuICAgICAgICAgIG5vZ2xvYnN0YXI6dGhpcy5vcHRpb25zLm5vZ2xvYnN0YXIsXG4gICAgICAgICAgbWF0Y2hCYXNlOnRoaXMub3B0aW9ucy5tYXRjaEJhc2UsXG4gICAgICAgICAgbm9jYXNlOnRoaXMub3B0aW9ucy5ub2Nhc2VcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICBcbiAgICB0aGlzLmlnbm9yZU1hdGNoZXJzID0gW107XG4gICAgaWYodGhpcy5vcHRpb25zLmlnbm9yZSkge1xuICAgICAgY29uc3QgaWdub3JlUGF0dGVybnMgPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5pZ25vcmUpID8gdGhpcy5vcHRpb25zLmlnbm9yZSA6IFt0aGlzLm9wdGlvbnMuaWdub3JlXTtcbiAgICAgIHRoaXMuaWdub3JlTWF0Y2hlcnMgPSBpZ25vcmVQYXR0ZXJucy5tYXAoIGlnbm9yZSA9PlxuICAgICAgICBuZXcgTWluaW1hdGNoKGlnbm9yZSwge2RvdDogdHJ1ZX0pXG4gICAgICApO1xuICAgIH1cbiAgXG4gICAgdGhpcy5za2lwTWF0Y2hlcnMgPSBbXTtcbiAgICBpZih0aGlzLm9wdGlvbnMuc2tpcCkge1xuICAgICAgY29uc3Qgc2tpcFBhdHRlcm5zID0gQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuc2tpcCkgPyB0aGlzLm9wdGlvbnMuc2tpcCA6IFt0aGlzLm9wdGlvbnMuc2tpcF07XG4gICAgICB0aGlzLnNraXBNYXRjaGVycyA9IHNraXBQYXR0ZXJucy5tYXAoIHNraXAgPT5cbiAgICAgICAgbmV3IE1pbmltYXRjaChza2lwLCB7ZG90OiB0cnVlfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVyYXRvciA9IGV4cGxvcmUocmVzb2x2ZShjd2QgfHwgJy4nKSwgdGhpcy5vcHRpb25zLmZvbGxvdywgdGhpcy5vcHRpb25zLnN0YXQsIHRoaXMuX3Nob3VsZFNraXBEaXJlY3RvcnkuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmluYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gIFxuICAgIGlmKGNiKSB7XG4gICAgICB0aGlzLl9tYXRjaGVzID0gW107IFxuICAgICAgdGhpcy5vbignbWF0Y2gnLCBtYXRjaCA9PiB0aGlzLl9tYXRjaGVzLnB1c2godGhpcy5vcHRpb25zLmFic29sdXRlID8gbWF0Y2guYWJzb2x1dGUgOiBtYXRjaC5yZWxhdGl2ZSkpO1xuICAgICAgdGhpcy5vbignZXJyb3InLCBlcnIgPT4gY2IoZXJyKSk7XG4gICAgICB0aGlzLm9uKCdlbmQnLCAoKSA9PiBjYihudWxsLCB0aGlzLl9tYXRjaGVzKSk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCggKCkgPT4gdGhpcy5fbmV4dCgpLCAwKTtcbiAgfVxuXG4gIF9zaG91bGRTa2lwRGlyZWN0b3J5KHJlbGF0aXZlKSB7XG4gICAgLy9jb25zb2xlLmxvZyhyZWxhdGl2ZSwgdGhpcy5za2lwTWF0Y2hlcnMuc29tZShtID0+IG0ubWF0Y2gocmVsYXRpdmUpKSk7XG4gICAgcmV0dXJuIHRoaXMuc2tpcE1hdGNoZXJzLnNvbWUobSA9PiBtLm1hdGNoKHJlbGF0aXZlKSk7XG4gIH1cblxuICBfZmlsZU1hdGNoZXMocmVsYXRpdmUsIGlzRGlyZWN0b3J5KSB7XG4gICAgY29uc3QgZmlsZSA9IHJlbGF0aXZlICsgKGlzRGlyZWN0b3J5ID8gJy8nIDogJycpO1xuICAgIHJldHVybiAodGhpcy5tYXRjaGVycy5sZW5ndGggPT09IDAgfHwgdGhpcy5tYXRjaGVycy5zb21lKG0gPT4gbS5tYXRjaChmaWxlKSkpXG4gICAgICAmJiAhdGhpcy5pZ25vcmVNYXRjaGVycy5zb21lKG0gPT4gbS5tYXRjaChmaWxlKSlcbiAgICAgICYmICghdGhpcy5vcHRpb25zLm5vZGlyIHx8ICFpc0RpcmVjdG9yeSk7XG4gIH1cblxuICBfbmV4dCgpIHtcbiAgICBpZighdGhpcy5wYXVzZWQgJiYgIXRoaXMuYWJvcnRlZCkge1xuICAgICAgdGhpcy5pdGVyYXRvci5uZXh0KClcbiAgICAgIC50aGVuKChvYmopPT4ge1xuICAgICAgICBpZighb2JqLmRvbmUpIHtcbiAgICAgICAgICBjb25zdCBpc0RpcmVjdG9yeSA9IG9iai52YWx1ZS5zdGF0cy5pc0RpcmVjdG9yeSgpO1xuICAgICAgICAgIGlmKHRoaXMuX2ZpbGVNYXRjaGVzKG9iai52YWx1ZS5yZWxhdGl2ZSwgaXNEaXJlY3RvcnkgKSkge1xuICAgICAgICAgICAgbGV0IHJlbGF0aXZlID0gb2JqLnZhbHVlLnJlbGF0aXZlO1xuICAgICAgICAgICAgbGV0IGFic29sdXRlID0gb2JqLnZhbHVlLmFic29sdXRlO1xuICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLm1hcmsgJiYgaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgICAgcmVsYXRpdmUgKz0gJy8nO1xuICAgICAgICAgICAgICBhYnNvbHV0ZSArPSAnLyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMuc3RhdCkge1xuICAgICAgICAgICAgICB0aGlzLmVtaXQoJ21hdGNoJywge3JlbGF0aXZlLCBhYnNvbHV0ZSwgc3RhdDpvYmoudmFsdWUuc3RhdHN9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1pdCgnbWF0Y2gnLCB7cmVsYXRpdmUsIGFic29sdXRlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX25leHQodGhpcy5pdGVyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuYWJvcnQoKTtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIGlmKCFlcnIuY29kZSAmJiAhdGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5hY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gIH1cblxuICByZXN1bWUoKSB7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICBpZih0aGlzLmluYWN0aXZlKSB7XG4gICAgICB0aGlzLmluYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLl9uZXh0KCk7XG4gICAgfVxuICB9XG59XG5cblxuZnVuY3Rpb24gcmVhZGRpckdsb2IocGF0dGVybiwgb3B0aW9ucywgY2IpIHtcbiAgcmV0dXJuIG5ldyBSZWFkZGlyR2xvYihwYXR0ZXJuLCBvcHRpb25zLCBjYik7XG59XG5yZWFkZGlyR2xvYi5SZWFkZGlyR2xvYiA9IFJlYWRkaXJHbG9iOyIsCiAgICAiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5hc3luYyA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvbnRpbnVhdGlvbiBmdW5jdGlvbiB3aXRoIHNvbWUgYXJndW1lbnRzIGFscmVhZHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFVzZWZ1bCBhcyBhIHNob3J0aGFuZCB3aGVuIGNvbWJpbmVkIHdpdGggb3RoZXIgY29udHJvbCBmbG93IGZ1bmN0aW9ucy4gQW55XG4gICAgICogYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gYXJlIGFkZGVkIHRvIHRoZSBhcmd1bWVudHNcbiAgICAgKiBvcmlnaW5hbGx5IHBhc3NlZCB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGFwcGx5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBldmVudHVhbGx5IGFwcGx5IGFsbFxuICAgICAqIGFyZ3VtZW50cyB0by4gSW52b2tlcyB3aXRoIChhcmd1bWVudHMuLi4pLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJndW1lbnRzLi4uIC0gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gYXV0b21hdGljYWxseSBhcHBseVxuICAgICAqIHdoZW4gdGhlIGNvbnRpbnVhdGlvbiBpcyBjYWxsZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSB0aGUgcGFydGlhbGx5LWFwcGxpZWQgZnVuY3Rpb25cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgYXBwbHlcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLndyaXRlRmlsZSwgJ3Rlc3RmaWxlMScsICd0ZXN0MScpLFxuICAgICAqICAgICBhc3luYy5hcHBseShmcy53cml0ZUZpbGUsICd0ZXN0ZmlsZTInLCAndGVzdDInKVxuICAgICAqIF0pO1xuICAgICAqXG4gICAgICpcbiAgICAgKiAvLyB0aGUgc2FtZSBwcm9jZXNzIHdpdGhvdXQgdXNpbmcgYXBwbHlcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBmcy53cml0ZUZpbGUoJ3Rlc3RmaWxlMScsICd0ZXN0MScsIGNhbGxiYWNrKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGZzLndyaXRlRmlsZSgndGVzdGZpbGUyJywgJ3Rlc3QyJywgY2FsbGJhY2spO1xuICAgICAqICAgICB9XG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKiAvLyBJdCdzIHBvc3NpYmxlIHRvIHBhc3MgYW55IG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aGVuIGNhbGxpbmcgdGhlXG4gICAgICogLy8gY29udGludWF0aW9uOlxuICAgICAqXG4gICAgICogbm9kZT4gdmFyIGZuID0gYXN5bmMuYXBwbHkoc3lzLnB1dHMsICdvbmUnKTtcbiAgICAgKiBub2RlPiBmbigndHdvJywgJ3RocmVlJyk7XG4gICAgICogb25lXG4gICAgICogdHdvXG4gICAgICogdGhyZWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcHBseShmbiwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKC4uLmNhbGxBcmdzKSA9PiBmbiguLi5hcmdzLC4uLmNhbGxBcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0aWFsUGFyYW1zIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MvKiwgY2FsbGJhY2sqLykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGFyZ3MsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuXG4gICAgdmFyIGhhc1F1ZXVlTWljcm90YXNrID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nICYmIHF1ZXVlTWljcm90YXNrO1xuICAgIHZhciBoYXNTZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcbiAgICB2YXIgaGFzTmV4dFRpY2sgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbic7XG5cbiAgICBmdW5jdGlvbiBmYWxsYmFjayhmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cmFwKGRlZmVyKSB7XG4gICAgICAgIHJldHVybiAoZm4sIC4uLmFyZ3MpID0+IGRlZmVyKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiAgICB9XG5cbiAgICB2YXIgX2RlZmVyJDE7XG5cbiAgICBpZiAoaGFzUXVldWVNaWNyb3Rhc2spIHtcbiAgICAgICAgX2RlZmVyJDEgPSBxdWV1ZU1pY3JvdGFzaztcbiAgICB9IGVsc2UgaWYgKGhhc1NldEltbWVkaWF0ZSkge1xuICAgICAgICBfZGVmZXIkMSA9IHNldEltbWVkaWF0ZTtcbiAgICB9IGVsc2UgaWYgKGhhc05leHRUaWNrKSB7XG4gICAgICAgIF9kZWZlciQxID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZGVmZXIkMSA9IGZhbGxiYWNrO1xuICAgIH1cblxuICAgIHZhciBzZXRJbW1lZGlhdGUkMSA9IHdyYXAoX2RlZmVyJDEpO1xuXG4gICAgLyoqXG4gICAgICogVGFrZSBhIHN5bmMgZnVuY3Rpb24gYW5kIG1ha2UgaXQgYXN5bmMsIHBhc3NpbmcgaXRzIHJldHVybiB2YWx1ZSB0byBhXG4gICAgICogY2FsbGJhY2suIFRoaXMgaXMgdXNlZnVsIGZvciBwbHVnZ2luZyBzeW5jIGZ1bmN0aW9ucyBpbnRvIGEgd2F0ZXJmYWxsLFxuICAgICAqIHNlcmllcywgb3Igb3RoZXIgYXN5bmMgZnVuY3Rpb25zLiBBbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZ2VuZXJhdGVkXG4gICAgICogZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gKGV4Y2VwdCBmb3IgdGhlIGZpbmFsXG4gICAgICogY2FsbGJhY2sgYXJndW1lbnQpLiBFcnJvcnMgdGhyb3duIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIElmIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gYGFzeW5jaWZ5YCByZXR1cm5zIGEgUHJvbWlzZSwgdGhhdCBwcm9taXNlcydzXG4gICAgICogcmVzb2x2ZWQvcmVqZWN0ZWQgc3RhdGUgd2lsbCBiZSB1c2VkIHRvIGNhbGwgdGhlIGNhbGxiYWNrLCByYXRoZXIgdGhhbiBzaW1wbHlcbiAgICAgKiB0aGUgc3luY2hyb25vdXMgcmV0dXJuIHZhbHVlLlxuICAgICAqXG4gICAgICogVGhpcyBhbHNvIG1lYW5zIHlvdSBjYW4gYXN5bmNpZnkgRVMyMDE3IGBhc3luY2AgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQG5hbWUgYXN5bmNpZnlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgd3JhcFN5bmNcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgLSBUaGUgc3luY2hyb25vdXMgZnVuY3Rpb24sIG9yIFByb21pc2UtcmV0dXJuaW5nXG4gICAgICogZnVuY3Rpb24gdG8gY29udmVydCB0byBhbiB7QGxpbmsgQXN5bmNGdW5jdGlvbn0uXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IEFuIGFzeW5jaHJvbm91cyB3cmFwcGVyIG9mIHRoZSBgZnVuY2AuIFRvIGJlXG4gICAgICogaW52b2tlZCB3aXRoIGAoYXJncy4uLiwgY2FsbGJhY2spYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gcGFzc2luZyBhIHJlZ3VsYXIgc3luY2hyb25vdXMgZnVuY3Rpb25cbiAgICAgKiBhc3luYy53YXRlcmZhbGwoW1xuICAgICAqICAgICBhc3luYy5hcHBseShmcy5yZWFkRmlsZSwgZmlsZW5hbWUsIFwidXRmOFwiKSxcbiAgICAgKiAgICAgYXN5bmMuYXN5bmNpZnkoSlNPTi5wYXJzZSksXG4gICAgICogICAgIGZ1bmN0aW9uIChkYXRhLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLyBkYXRhIGlzIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgdGV4dC5cbiAgICAgKiAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIHBhcnNpbmcgZXJyb3IsIGl0IHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQuXG4gICAgICogICAgIH1cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiAvLyBwYXNzaW5nIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcHJvbWlzZVxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLnJlYWRGaWxlLCBmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICAgICAqICAgICBhc3luYy5hc3luY2lmeShmdW5jdGlvbiAoY29udGVudHMpIHtcbiAgICAgKiAgICAgICAgIHJldHVybiBkYi5tb2RlbC5jcmVhdGUoY29udGVudHMpO1xuICAgICAqICAgICB9KSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKG1vZGVsLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLyBgbW9kZWxgIGlzIHRoZSBpbnN0YW50aWF0ZWQgbW9kZWwgb2JqZWN0LlxuICAgICAqICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIGFuIGVycm9yLCB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHNraXBwZWQuXG4gICAgICogICAgIH1cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiAvLyBlczIwMTcgZXhhbXBsZSwgdGhvdWdoIGBhc3luY2lmeWAgaXMgbm90IG5lZWRlZCBpZiB5b3VyIEpTIGVudmlyb25tZW50XG4gICAgICogLy8gc3VwcG9ydHMgYXN5bmMgZnVuY3Rpb25zIG91dCBvZiB0aGUgYm94XG4gICAgICogdmFyIHEgPSBhc3luYy5xdWV1ZShhc3luYy5hc3luY2lmeShhc3luYyBmdW5jdGlvbihmaWxlKSB7XG4gICAgICogICAgIHZhciBpbnRlcm1lZGlhdGVTdGVwID0gYXdhaXQgcHJvY2Vzc0ZpbGUoZmlsZSk7XG4gICAgICogICAgIHJldHVybiBhd2FpdCBzb21lUHJvbWlzZShpbnRlcm1lZGlhdGVTdGVwKVxuICAgICAqIH0pKTtcbiAgICAgKlxuICAgICAqIHEucHVzaChmaWxlcyk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICBpZiAoaXNBc3luYyhmdW5jKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzLyosIGNhbGxiYWNrKi8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVByb21pc2UocHJvbWlzZSwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5pdGlhbFBhcmFtcyhmdW5jdGlvbiAoYXJncywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVQcm9taXNlKHJlc3VsdCwgY2FsbGJhY2spXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVByb21pc2UocHJvbWlzZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayhjYWxsYmFjaywgbnVsbCwgdmFsdWUpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2soY2FsbGJhY2ssIGVyciAmJiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgfHwgZXJyLm1lc3NhZ2UpID8gZXJyIDogbmV3IEVycm9yKGVycikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZva2VDYWxsYmFjayhjYWxsYmFjaywgZXJyb3IsIHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvciwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSQxKGUgPT4geyB0aHJvdyBlIH0sIGVycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBmbltTeW1ib2wudG9TdHJpbmdUYWddID09PSAnQXN5bmNGdW5jdGlvbic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBc3luY0dlbmVyYXRvcihmbikge1xuICAgICAgICByZXR1cm4gZm5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0FzeW5jR2VuZXJhdG9yJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cmFwQXN5bmMoYXN5bmNGbikge1xuICAgICAgICBpZiAodHlwZW9mIGFzeW5jRm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgYSBmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiBpc0FzeW5jKGFzeW5jRm4pID8gYXN5bmNpZnkoYXN5bmNGbikgOiBhc3luY0ZuO1xuICAgIH1cblxuICAgIC8vIGNvbmRpdGlvbmFsbHkgcHJvbWlzaWZ5IGEgZnVuY3Rpb24uXG4gICAgLy8gb25seSByZXR1cm4gYSBwcm9taXNlIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgIGZ1bmN0aW9uIGF3YWl0aWZ5IChhc3luY0ZuLCBhcml0eSkge1xuICAgICAgICBpZiAoIWFyaXR5KSBhcml0eSA9IGFzeW5jRm4ubGVuZ3RoO1xuICAgICAgICBpZiAoIWFyaXR5KSB0aHJvdyBuZXcgRXJyb3IoJ2FyaXR5IGlzIHVuZGVmaW5lZCcpXG4gICAgICAgIGZ1bmN0aW9uIGF3YWl0YWJsZSAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyaXR5IC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNGbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGFyZ3NbYXJpdHkgLSAxXSA9IChlcnIsIC4uLmNiQXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjYkFyZ3MubGVuZ3RoID4gMSA/IGNiQXJncyA6IGNiQXJnc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhc3luY0ZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdGFibGVcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseUVhY2gkMSAoZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBhcHBseUVhY2goZm5zLCAuLi5jYWxsQXJncykge1xuICAgICAgICAgICAgY29uc3QgZ28gPSBhd2FpdGlmeShmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIChmbiwgY2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd3JhcEFzeW5jKGZuKS5hcHBseSh0aGF0LCBjYWxsQXJncy5jb25jYXQoY2IpKTtcbiAgICAgICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG5cbiAgICAgICAgcmV0dXJuIGVhY2hmbihhcnIsICh2YWx1ZSwgXywgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgICAgICBfaXRlcmF0ZWUodmFsdWUsIChlcnIsIHYpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+PSAwICYmXG4gICAgICAgICAgICB2YWx1ZS5sZW5ndGggJSAxID09PSAwO1xuICAgIH1cblxuICAgIC8vIEEgdGVtcG9yYXJ5IHZhbHVlIHVzZWQgdG8gaWRlbnRpZnkgaWYgdGhlIGxvb3Agc2hvdWxkIGJlIGJyb2tlbi5cbiAgICAvLyBTZWUgIzEwNjQsICMxMjkzXG4gICAgY29uc3QgYnJlYWtMb29wID0ge307XG5cbiAgICBmdW5jdGlvbiBvbmNlKGZuKSB7XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZXIgKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGNhbGxGbiA9IGZuO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICAgICAgY2FsbEZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24od3JhcHBlciwgZm4pO1xuICAgICAgICByZXR1cm4gd3JhcHBlclxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdG9yIChjb2xsKSB7XG4gICAgICAgIHJldHVybiBjb2xsW1N5bWJvbC5pdGVyYXRvcl0gJiYgY29sbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQXJyYXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICByZXR1cm4gKytpIDwgbGVuID8ge3ZhbHVlOiBjb2xsW2ldLCBrZXk6IGl9IDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUVTMjAxNUl0ZXJhdG9yKGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoaXRlbS5kb25lKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogaXRlbS52YWx1ZSwga2V5OiBpfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEl0ZXJhdG9yKG9iaikge1xuICAgICAgICB2YXIgb2tleXMgPSBvYmogPyBPYmplY3Qua2V5cyhvYmopIDogW107XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW4gPSBva2V5cy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgdmFyIGtleSA9IG9rZXlzWysraV07XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IHt2YWx1ZTogb2JqW2tleV0sIGtleX0gOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yKGNvbGwpIHtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlJdGVyYXRvcihjb2xsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGNvbGwpO1xuICAgICAgICByZXR1cm4gaXRlcmF0b3IgPyBjcmVhdGVFUzIwMTVJdGVyYXRvcihpdGVyYXRvcikgOiBjcmVhdGVPYmplY3RJdGVyYXRvcihjb2xsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmx5T25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIHZhciBjYWxsRm4gPSBmbjtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgICAgIGNhbGxGbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3IgYXN5bmMgZ2VuZXJhdG9yc1xuICAgIGZ1bmN0aW9uIGFzeW5jRWFjaE9mTGltaXQoZ2VuZXJhdG9yLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgYXdhaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJ1bm5pbmcgPSAwO1xuICAgICAgICBsZXQgaWR4ID0gMDtcblxuICAgICAgICBmdW5jdGlvbiByZXBsZW5pc2goKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdyZXBsZW5pc2gnKVxuICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPj0gbGltaXQgfHwgYXdhaXRpbmcgfHwgZG9uZSkgcmV0dXJuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdyZXBsZW5pc2ggYXdhaXRpbmcnKVxuICAgICAgICAgICAgYXdhaXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgZ2VuZXJhdG9yLm5leHQoKS50aGVuKCh7dmFsdWUsIGRvbmU6IGl0ZXJEb25lfSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2dvdCB2YWx1ZScsIHZhbHVlKVxuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxlZCB8fCBkb25lKSByZXR1cm5cbiAgICAgICAgICAgICAgICBhd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChpdGVyRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnZG9uZSBuZXh0Q2InKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBydW5uaW5nKys7XG4gICAgICAgICAgICAgICAgaXRlcmF0ZWUodmFsdWUsIGlkeCwgaXRlcmF0ZWVDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWR4Kys7XG4gICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChoYW5kbGVFcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZUNhbGxiYWNrKGVyciwgcmVzdWx0KSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpdGVyYXRlZUNhbGxiYWNrJylcbiAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaGFuZGxlRXJyb3IoZXJyKVxuXG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gYnJlYWtMb29wIHx8IChkb25lICYmIHJ1bm5pbmcgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdkb25lIGl0ZXJDYicpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIpIHtcbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICBhd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2hPZkxpbWl0JDIgPSAobGltaXQpID0+IHtcbiAgICAgICAgcmV0dXJuIChvYmosIGl0ZXJhdGVlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2NvbmN1cnJlbmN5IGxpbWl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gMScpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0FzeW5jR2VuZXJhdG9yKG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNFYWNoT2ZMaW1pdChvYmosIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNFYWNoT2ZMaW1pdChvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbmV4dEVsZW0gPSBjcmVhdGVJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGxvb3BpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWVDYWxsYmFjayhlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGVkKSByZXR1cm5cbiAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gYnJlYWtMb29wIHx8IChkb25lICYmIHJ1bm5pbmcgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWxvb3BpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGxvb3BpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdoaWxlIChydW5uaW5nIDwgbGltaXQgJiYgIWRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBuZXh0RWxlbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRlZShlbGVtLnZhbHVlLCBlbGVtLmtleSwgb25seU9uY2UoaXRlcmF0ZWVDYWxsYmFjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb29waW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGVhY2hPZmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNoT2Z9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoT2ZMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmVhY2hPZl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn1cbiAgICAgKiBAYWxpYXMgZm9yRWFjaE9mTGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICAgICAqIGl0ZW0gaW4gYGNvbGxgLiBUaGUgYGtleWAgaXMgdGhlIGl0ZW0ncyBrZXksIG9yIGluZGV4IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgICogYXJyYXkuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoT2ZMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQyKGxpbWl0KShjb2xsLCB3cmFwQXN5bmMoaXRlcmF0ZWUpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2hPZkxpbWl0JDEgPSBhd2FpdGlmeShlYWNoT2ZMaW1pdCwgNCk7XG5cbiAgICAvLyBlYWNoT2YgaW1wbGVtZW50YXRpb24gb3B0aW1pemVkIGZvciBhcnJheS1saWtlc1xuICAgIGZ1bmN0aW9uIGVhY2hPZkFycmF5TGlrZShjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICAgIGNvbXBsZXRlZCA9IDAsXG4gICAgICAgICAgICB7bGVuZ3RofSA9IGNvbGwsXG4gICAgICAgICAgICBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdG9yQ2FsbGJhY2soZXJyLCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FuY2VsZWQgPT09IHRydWUpIHJldHVyblxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgrK2NvbXBsZXRlZCA9PT0gbGVuZ3RoKSB8fCB2YWx1ZSA9PT0gYnJlYWtMb29wKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKGNvbGxbaW5kZXhdLCBpbmRleCwgb25seU9uY2UoaXRlcmF0b3JDYWxsYmFjaykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYSBnZW5lcmljIHZlcnNpb24gb2YgZWFjaE9mIHdoaWNoIGNhbiBoYW5kbGUgYXJyYXksIG9iamVjdCwgYW5kIGl0ZXJhdG9yIGNhc2VzLlxuICAgIGZ1bmN0aW9uIGVhY2hPZkdlbmVyaWMgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZWFjaE9mTGltaXQkMShjb2xsLCBJbmZpbml0eSwgaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaWtlIFtgZWFjaGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofSwgZXhjZXB0IHRoYXQgaXQgcGFzc2VzIHRoZSBrZXkgKG9yIGluZGV4KSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50XG4gICAgICogdG8gdGhlIGl0ZXJhdGVlLlxuICAgICAqXG4gICAgICogQG5hbWUgZWFjaE9mXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGZvckVhY2hPZlxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHNlZSBbYXN5bmMuZWFjaF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICAgICAqIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBga2V5YCBpcyB0aGUgaXRlbSdzIGtleSwgb3IgaW5kZXggaW4gdGhlIGNhc2Ugb2YgYW4gYXJyYXkuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGV2Lmpzb24gaXMgYSBmaWxlIGNvbnRhaW5pbmcgYSB2YWxpZCBqc29uIG9iamVjdCBjb25maWcgZm9yIGRldiBlbnZpcm9ubWVudFxuICAgICAqIC8vIGRldi5qc29uIGlzIGEgZmlsZSBjb250YWluaW5nIGEgdmFsaWQganNvbiBvYmplY3QgY29uZmlnIGZvciB0ZXN0IGVudmlyb25tZW50XG4gICAgICogLy8gcHJvZC5qc29uIGlzIGEgZmlsZSBjb250YWluaW5nIGEgdmFsaWQganNvbiBvYmplY3QgY29uZmlnIGZvciBwcm9kIGVudmlyb25tZW50XG4gICAgICogLy8gaW52YWxpZC5qc29uIGlzIGEgZmlsZSB3aXRoIGEgbWFsZm9ybWVkIGpzb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBsZXQgY29uZmlncyA9IHt9OyAvL2dsb2JhbCB2YXJpYWJsZVxuICAgICAqIGxldCB2YWxpZENvbmZpZ0ZpbGVNYXAgPSB7ZGV2OiAnZGV2Lmpzb24nLCB0ZXN0OiAndGVzdC5qc29uJywgcHJvZDogJ3Byb2QuanNvbid9O1xuICAgICAqIGxldCBpbnZhbGlkQ29uZmlnRmlsZU1hcCA9IHtkZXY6ICdkZXYuanNvbicsIHRlc3Q6ICd0ZXN0Lmpzb24nLCBpbnZhbGlkOiAnaW52YWxpZC5qc29uJ307XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCByZWFkcyBhIGpzb24gZmlsZSBhbmQgcGFyc2VzIHRoZSBjb250ZW50cyBhcyBqc29uIG9iamVjdFxuICAgICAqIGZ1bmN0aW9uIHBhcnNlRmlsZShmaWxlLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnJlYWRGaWxlKGZpbGUsIFwidXRmOFwiLCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxiYWNrKGVycik7XG4gICAgICogICAgICAgICB0cnkge1xuICAgICAqICAgICAgICAgICAgIGNvbmZpZ3Nba2V5XSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICogICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuZm9yRWFjaE9mKHZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICAgICAgLy8gY29uZmlncyBpcyBub3cgYSBtYXAgb2YgSlNPTiBkYXRhLCBlLmcuXG4gICAgICogICAgICAgICAvLyB7IGRldjogLy9wYXJzZWQgZGV2Lmpzb24sIHRlc3Q6IC8vcGFyc2VkIHRlc3QuanNvbiwgcHJvZDogLy9wYXJzZWQgcHJvZC5qc29ufVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL0Vycm9yIGhhbmRpbmdcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YoaW52YWxpZENvbmZpZ0ZpbGVNYXAsIHBhcnNlRmlsZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICogICAgICAgICAvLyBKU09OIHBhcnNlIGVycm9yIGV4Y2VwdGlvblxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZm9yRWFjaE9mKHZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlKVxuICAgICAqIC50aGVuKCAoKSA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICAvLyBjb25maWdzIGlzIG5vdyBhIG1hcCBvZiBKU09OIGRhdGEsIGUuZy5cbiAgICAgKiAgICAgLy8geyBkZXY6IC8vcGFyc2VkIGRldi5qc29uLCB0ZXN0OiAvL3BhcnNlZCB0ZXN0Lmpzb24sIHByb2Q6IC8vcGFyc2VkIHByb2QuanNvbn1cbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9FcnJvciBoYW5kaW5nXG4gICAgICogYXN5bmMuZm9yRWFjaE9mKGludmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgKiAgICAgLy8gSlNPTiBwYXJzZSBlcnJvciBleGNlcHRpb25cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLmZvckVhY2hPZih2YWxpZENvbmZpZ0ZpbGVNYXAsIHBhcnNlRmlsZSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhjb25maWdzKTtcbiAgICAgKiAgICAgICAgIC8vIGNvbmZpZ3MgaXMgbm93IGEgbWFwIG9mIEpTT04gZGF0YSwgZS5nLlxuICAgICAqICAgICAgICAgLy8geyBkZXY6IC8vcGFyc2VkIGRldi5qc29uLCB0ZXN0OiAvL3BhcnNlZCB0ZXN0Lmpzb24sIHByb2Q6IC8vcGFyc2VkIHByb2QuanNvbn1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy9FcnJvciBoYW5kaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLmZvckVhY2hPZihpbnZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBKU09OIHBhcnNlIGVycm9yIGV4Y2VwdGlvblxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZWFjaE9mKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZWFjaE9mSW1wbGVtZW50YXRpb24gPSBpc0FycmF5TGlrZShjb2xsKSA/IGVhY2hPZkFycmF5TGlrZSA6IGVhY2hPZkdlbmVyaWM7XG4gICAgICAgIHJldHVybiBlYWNoT2ZJbXBsZW1lbnRhdGlvbihjb2xsLCB3cmFwQXN5bmMoaXRlcmF0ZWUpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2hPZiQxID0gYXdhaXRpZnkoZWFjaE9mLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIGEgbmV3IGNvbGxlY3Rpb24gb2YgdmFsdWVzIGJ5IG1hcHBpbmcgZWFjaCB2YWx1ZSBpbiBgY29sbGAgdGhyb3VnaFxuICAgICAqIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uLiBUaGUgYGl0ZXJhdGVlYCBpcyBjYWxsZWQgd2l0aCBhbiBpdGVtIGZyb20gYGNvbGxgXG4gICAgICogYW5kIGEgY2FsbGJhY2sgZm9yIHdoZW4gaXQgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcuIEVhY2ggb2YgdGhlc2UgY2FsbGJhY2tzXG4gICAgICogdGFrZXMgMiBhcmd1bWVudHM6IGFuIGBlcnJvcmAsIGFuZCB0aGUgdHJhbnNmb3JtZWQgaXRlbSBmcm9tIGBjb2xsYC4gSWZcbiAgICAgKiBgaXRlcmF0ZWVgIHBhc3NlcyBhbiBlcnJvciB0byBpdHMgY2FsbGJhY2ssIHRoZSBtYWluIGBjYWxsYmFja2AgKGZvciB0aGVcbiAgICAgKiBgbWFwYCBmdW5jdGlvbikgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhhdCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluXG4gICAgICogcGFyYWxsZWwsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlXG4gICAgICogaW4gb3JkZXIuIEhvd2V2ZXIsIHRoZSByZXN1bHRzIGFycmF5IHdpbGwgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4gICAgICogb3JpZ2luYWwgYGNvbGxgLlxuICAgICAqXG4gICAgICogSWYgYG1hcGAgaXMgcGFzc2VkIGFuIE9iamVjdCwgdGhlIHJlc3VsdHMgd2lsbCBiZSBhbiBBcnJheS4gIFRoZSByZXN1bHRzXG4gICAgICogd2lsbCByb3VnaGx5IGJlIGluIHRoZSBvcmRlciBvZiB0aGUgb3JpZ2luYWwgT2JqZWN0cycga2V5cyAoYnV0IHRoaXMgY2FuXG4gICAgICogdmFyeSBhY3Jvc3MgSmF2YVNjcmlwdCBlbmdpbmVzKS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIGl0ZW0uXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIEFycmF5IG9mIHRoZVxuICAgICAqIHRyYW5zZm9ybWVkIGl0ZW1zIGZyb20gdGhlIGBjb2xsYC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlNC50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlNC50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdC5zaXplKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMubWFwKGZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIFsgMTAwMCwgMjAwMCwgMzAwMF1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5tYXAod2l0aE1pc3NpbmdGaWxlTGlzdCwgZ2V0RmlsZVNpemVJbkJ5dGVzLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5tYXAoZmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgLy8gWyAxMDAwLCAyMDAwLCAzMDAwXVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5tYXAod2l0aE1pc3NpbmdGaWxlTGlzdCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMubWFwKGZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIFsgMTAwMCwgMjAwMCwgMzAwMF1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLm1hcCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXAgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2FzeW5jTWFwKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBtYXAkMSA9IGF3YWl0aWZ5KG1hcCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgdG8gZWFjaCBmdW5jdGlvbiBpbiB0aGUgYXJyYXksIGNhbGxpbmdcbiAgICAgKiBgY2FsbGJhY2tgIGFmdGVyIGFsbCBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQuIElmIHlvdSBvbmx5IHByb3ZpZGUgdGhlIGZpcnN0XG4gICAgICogYXJndW1lbnQsIGBmbnNgLCB0aGVuIGl0IHdpbGwgcmV0dXJuIGEgZnVuY3Rpb24gd2hpY2ggbGV0cyB5b3UgcGFzcyBpbiB0aGVcbiAgICAgKiBhcmd1bWVudHMgYXMgaWYgaXQgd2VyZSBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsLiBJZiBtb3JlIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCwgYGNhbGxiYWNrYCBpcyByZXF1aXJlZCB3aGlsZSBgYXJnc2AgaXMgc3RpbGwgb3B0aW9uYWwuIFRoZSByZXN1bHRzXG4gICAgICogZm9yIGVhY2ggb2YgdGhlIGFwcGxpZWQgYXN5bmMgZnVuY3Rpb25zIGFyZSBwYXNzZWQgdG8gdGhlIGZpbmFsIGNhbGxiYWNrXG4gICAgICogYXMgYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhcHBseUVhY2hcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gZm5zIC0gQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBc3luY0Z1bmN0aW9ufXNcbiAgICAgKiB0byBhbGwgY2FsbCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gYW55IG51bWJlciBvZiBzZXBhcmF0ZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGVcbiAgICAgKiBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gdGhlIGZpbmFsIGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgY2FsbGJhY2ssXG4gICAgICogY2FsbGVkIHdoZW4gYWxsIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZCBwcm9jZXNzaW5nLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSAtIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIG5vIGFyZ3Mgb3RoZXIgdGhhblxuICAgICAqIGFuIG9wdGlvbmFsIGNhbGxiYWNrLCB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIGBhcmdzYCB0byBlYWNoXG4gICAgICogb2YgdGhlIGZ1bmN0aW9ucy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogY29uc3QgYXBwbGllZEZuID0gYXN5bmMuYXBwbHlFYWNoKFtlbmFibGVTZWFyY2gsIHVwZGF0ZVNjaGVtYV0sICdidWNrZXQnKVxuICAgICAqXG4gICAgICogYXBwbGllZEZuKChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgKiAgICAgLy8gcmVzdWx0c1swXSBpcyB0aGUgcmVzdWx0cyBmb3IgYGVuYWJsZVNlYXJjaGBcbiAgICAgKiAgICAgLy8gcmVzdWx0c1sxXSBpcyB0aGUgcmVzdWx0cyBmb3IgYHVwZGF0ZVNjaGVtYWBcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHBhcnRpYWwgYXBwbGljYXRpb24gZXhhbXBsZTpcbiAgICAgKiBhc3luYy5lYWNoKFxuICAgICAqICAgICBidWNrZXRzLFxuICAgICAqICAgICBhc3luYyAoYnVja2V0KSA9PiBhc3luYy5hcHBseUVhY2goW2VuYWJsZVNlYXJjaCwgdXBkYXRlU2NoZW1hXSwgYnVja2V0KSgpLFxuICAgICAqICAgICBjYWxsYmFja1xuICAgICAqICk7XG4gICAgICovXG4gICAgdmFyIGFwcGx5RWFjaCA9IGFwcGx5RWFjaCQxKG1hcCQxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZWFjaE9mYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZWFjaE9mU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZWFjaE9mXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaE9mfVxuICAgICAqIEBhbGlhcyBmb3JFYWNoT2ZTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoT2ZTZXJpZXMoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQxKGNvbGwsIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGVhY2hPZlNlcmllcyQxID0gYXdhaXRpZnkoZWFjaE9mU2VyaWVzLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgbWFwYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIGl0ZW0uXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5IG9mIHRoZVxuICAgICAqIHRyYW5zZm9ybWVkIGl0ZW1zIGZyb20gdGhlIGBjb2xsYC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFNlcmllcyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfYXN5bmNNYXAoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIG1hcFNlcmllcyQxID0gYXdhaXRpZnkobWFwU2VyaWVzLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgYXBwbHlFYWNoYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmFwcGx5RWFjaH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgYXBwbHlFYWNoU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuYXBwbHlFYWNoXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXBwbHlFYWNofVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBmbnMgLSBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFzeW5jRnVuY3Rpb259cyB0byBhbGxcbiAgICAgKiBjYWxsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBhbnkgbnVtYmVyIG9mIHNlcGFyYXRlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZVxuICAgICAqIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSB0aGUgZmluYWwgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBjYWxsYmFjayxcbiAgICAgKiBjYWxsZWQgd2hlbiBhbGwgZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHByb2Nlc3NpbmcuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IC0gQSBmdW5jdGlvbiwgdGhhdCB3aGVuIGNhbGxlZCwgaXMgdGhlIHJlc3VsdCBvZlxuICAgICAqIGFwcGxpbmcgdGhlIGBhcmdzYCB0byB0aGUgbGlzdCBvZiBmdW5jdGlvbnMuICBJdCB0YWtlcyBubyBhcmdzLCBvdGhlciB0aGFuXG4gICAgICogYSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICB2YXIgYXBwbHlFYWNoU2VyaWVzID0gYXBwbHlFYWNoJDEobWFwU2VyaWVzJDEpO1xuXG4gICAgY29uc3QgUFJPTUlTRV9TWU1CT0wgPSBTeW1ib2woJ3Byb21pc2VDYWxsYmFjaycpO1xuXG4gICAgZnVuY3Rpb24gcHJvbWlzZUNhbGxiYWNrICgpIHtcbiAgICAgICAgbGV0IHJlc29sdmUsIHJlamVjdDtcbiAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sgKGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MubGVuZ3RoID4gMSA/IGFyZ3MgOiBhcmdzWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrW1BST01JU0VfU1lNQk9MXSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSA9IHJlcyxcbiAgICAgICAgICAgIHJlamVjdCA9IHJlajtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgYmVzdCBvcmRlciBmb3IgcnVubmluZyB0aGUge0BsaW5rIEFzeW5jRnVuY3Rpb259cyBpbiBgdGFza3NgLCBiYXNlZCBvblxuICAgICAqIHRoZWlyIHJlcXVpcmVtZW50cy4gRWFjaCBmdW5jdGlvbiBjYW4gb3B0aW9uYWxseSBkZXBlbmQgb24gb3RoZXIgZnVuY3Rpb25zXG4gICAgICogYmVpbmcgY29tcGxldGVkIGZpcnN0LCBhbmQgZWFjaCBmdW5jdGlvbiBpcyBydW4gYXMgc29vbiBhcyBpdHMgcmVxdWlyZW1lbnRzXG4gICAgICogYXJlIHNhdGlzZmllZC5cbiAgICAgKlxuICAgICAqIElmIGFueSBvZiB0aGUge0BsaW5rIEFzeW5jRnVuY3Rpb259cyBwYXNzIGFuIGVycm9yIHRvIHRoZWlyIGNhbGxiYWNrLCB0aGUgYGF1dG9gIHNlcXVlbmNlXG4gICAgICogd2lsbCBzdG9wLiBGdXJ0aGVyIHRhc2tzIHdpbGwgbm90IGV4ZWN1dGUgKHNvIGFueSBvdGhlciBmdW5jdGlvbnMgZGVwZW5kaW5nXG4gICAgICogb24gaXQgd2lsbCBub3QgcnVuKSwgYW5kIHRoZSBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlXG4gICAgICogZXJyb3IuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIGFsc28gcmVjZWl2ZSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiBmdW5jdGlvbnMgd2hpY2hcbiAgICAgKiBoYXZlIGNvbXBsZXRlZCBzbyBmYXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCBpZiB0aGV5IGhhdmUgZGVwZW5kZW5jaWVzLiBJZiBhXG4gICAgICogdGFzayBmdW5jdGlvbiBoYXMgbm8gZGVwZW5kZW5jaWVzLCBpdCB3aWxsIG9ubHkgYmUgcGFzc2VkIGEgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAbmFtZSBhdXRvXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXNrcyAtIEFuIG9iamVjdC4gRWFjaCBvZiBpdHMgcHJvcGVydGllcyBpcyBlaXRoZXIgYVxuICAgICAqIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHJlcXVpcmVtZW50cywgd2l0aCB0aGUge0BsaW5rIEFzeW5jRnVuY3Rpb259IGl0c2VsZiB0aGUgbGFzdCBpdGVtXG4gICAgICogaW4gdGhlIGFycmF5LiBUaGUgb2JqZWN0J3Mga2V5IG9mIGEgcHJvcGVydHkgc2VydmVzIGFzIHRoZSBuYW1lIG9mIHRoZSB0YXNrXG4gICAgICogZGVmaW5lZCBieSB0aGF0IHByb3BlcnR5LCBpLmUuIGNhbiBiZSB1c2VkIHdoZW4gc3BlY2lmeWluZyByZXF1aXJlbWVudHMgZm9yXG4gICAgICogb3RoZXIgdGFza3MuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBvbmUgb3IgdHdvIGFyZ3VtZW50czpcbiAgICAgKiAqIGEgYHJlc3VsdHNgIG9iamVjdCwgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXNseSBleGVjdXRlZFxuICAgICAqICAgZnVuY3Rpb25zLCBvbmx5IHBhc3NlZCBpZiB0aGUgdGFzayBoYXMgYW55IGRlcGVuZGVuY2llcyxcbiAgICAgKiAqIGEgYGNhbGxiYWNrKGVyciwgcmVzdWx0KWAgZnVuY3Rpb24sIHdoaWNoIG11c3QgYmUgY2FsbGVkIHdoZW4gZmluaXNoZWQsXG4gICAgICogICBwYXNzaW5nIGFuIGBlcnJvcmAgKHdoaWNoIGNhbiBiZSBgbnVsbGApIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbidzXG4gICAgICogICBleGVjdXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtjb25jdXJyZW5jeT1JbmZpbml0eV0gLSBBbiBvcHRpb25hbCBgaW50ZWdlcmAgZm9yXG4gICAgICogZGV0ZXJtaW5pbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIHRoYXQgY2FuIGJlIHJ1biBpbiBwYXJhbGxlbC4gQnlcbiAgICAgKiBkZWZhdWx0LCBhcyBtYW55IGFzIHBvc3NpYmxlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiB0aGUgdGFza3MgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgIGFyZ3VtZW50IGlmIGFueSBgdGFza3NgXG4gICAgICogcGFzcyBhbiBlcnJvciB0byB0aGVpciBjYWxsYmFjay4gUmVzdWx0cyBhcmUgYWx3YXlzIHJldHVybmVkOyBob3dldmVyLCBpZiBhblxuICAgICAqIGVycm9yIG9jY3Vycywgbm8gZnVydGhlciBgdGFza3NgIHdpbGwgYmUgcGVyZm9ybWVkLCBhbmQgdGhlIHJlc3VsdHMgb2JqZWN0XG4gICAgICogd2lsbCBvbmx5IGNvbnRhaW4gcGFydGlhbCByZXN1bHRzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBub3QgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vVXNpbmcgQ2FsbGJhY2tzXG4gICAgICogYXN5bmMuYXV0byh7XG4gICAgICogICAgIGdldF9kYXRhOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBnZXQgc29tZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgbWFrZV9mb2xkZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0byBzdG9yZSBhIGZpbGUgaW5cbiAgICAgKiAgICAgICAgIC8vIHRoaXMgaXMgcnVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgZ2V0dGluZyB0aGUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZvbGRlcicpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB3cml0ZV9maWxlOiBbJ2dldF9kYXRhJywgJ21ha2VfZm9sZGVyJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBvbmNlIHRoZSBmaWxlIGlzIHdyaXR0ZW4gbGV0J3MgZW1haWwgYSBsaW5rIHRvIGl0Li4uXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOnJlc3VsdHMud3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfV1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY29uc29sZS5sb2coJ3Jlc3VsdHMgPSAnLCByZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyA9IHtcbiAgICAgKiAgICAgLy8gICAgIGdldF9kYXRhOiBbJ2RhdGEnLCAnY29udmVydGVkIHRvIGFycmF5J11cbiAgICAgKiAgICAgLy8gICAgIG1ha2VfZm9sZGVyOyAnZm9sZGVyJyxcbiAgICAgKiAgICAgLy8gICAgIHdyaXRlX2ZpbGU6ICdmaWxlbmFtZSdcbiAgICAgKiAgICAgLy8gICAgIGVtYWlsX2xpbms6IHsgZmlsZTogJ2ZpbGVuYW1lJywgZW1haWw6ICd1c2VyQGV4YW1wbGUuY29tJyB9XG4gICAgICogICAgIC8vIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaW4gZ2V0X2RhdGEnKTtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gZ2V0IHNvbWUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2RhdGEnLCAnY29udmVydGVkIHRvIGFycmF5Jyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIG1ha2VfZm9sZGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ2luIG1ha2VfZm9sZGVyJyk7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0byBzdG9yZSBhIGZpbGUgaW5cbiAgICAgKiAgICAgICAgIC8vIHRoaXMgaXMgcnVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgZ2V0dGluZyB0aGUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZvbGRlcicpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB3cml0ZV9maWxlOiBbJ2dldF9kYXRhJywgJ21ha2VfZm9sZGVyJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBvbmNlIHRoZSBmaWxlIGlzIHdyaXR0ZW4gbGV0J3MgZW1haWwgYSBsaW5rIHRvIGl0Li4uXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOnJlc3VsdHMud3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfV1cbiAgICAgKiB9KS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZygncmVzdWx0cyA9ICcsIHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzID0ge1xuICAgICAqICAgICAvLyAgICAgZ2V0X2RhdGE6IFsnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknXVxuICAgICAqICAgICAvLyAgICAgbWFrZV9mb2xkZXI7ICdmb2xkZXInLFxuICAgICAqICAgICAvLyAgICAgd3JpdGVfZmlsZTogJ2ZpbGVuYW1lJ1xuICAgICAqICAgICAvLyAgICAgZW1haWxfbGluazogeyBmaWxlOiAnZmlsZW5hbWUnLCBlbWFpbDogJ3VzZXJAZXhhbXBsZS5jb20nIH1cbiAgICAgKiAgICAgLy8gfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlcnIgPSAnLCBlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuYXV0byh7XG4gICAgICogICAgICAgICAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gZ2V0IHNvbWUgZGF0YVxuICAgICAqICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIG1ha2VfZm9sZGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0byBzdG9yZSBhIGZpbGUgaW5cbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmb2xkZXInKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihyZXN1bHRzLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICAvLyBvbmNlIHRoZXJlIGlzIHNvbWUgZGF0YSBhbmQgdGhlIGRpcmVjdG9yeSBleGlzdHMsXG4gICAgICogICAgICAgICAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICAgICAgICAgIH1dLFxuICAgICAqICAgICAgICAgICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgeydmaWxlJzpyZXN1bHRzLndyaXRlX2ZpbGUsICdlbWFpbCc6J3VzZXJAZXhhbXBsZS5jb20nfSk7XG4gICAgICogICAgICAgICAgICAgfV1cbiAgICAgKiAgICAgICAgIH0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ3Jlc3VsdHMgPSAnLCByZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgPSB7XG4gICAgICogICAgICAgICAvLyAgICAgZ2V0X2RhdGE6IFsnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknXVxuICAgICAqICAgICAgICAgLy8gICAgIG1ha2VfZm9sZGVyOyAnZm9sZGVyJyxcbiAgICAgKiAgICAgICAgIC8vICAgICB3cml0ZV9maWxlOiAnZmlsZW5hbWUnXG4gICAgICogICAgICAgICAvLyAgICAgZW1haWxfbGluazogeyBmaWxlOiAnZmlsZW5hbWUnLCBlbWFpbDogJ3VzZXJAZXhhbXBsZS5jb20nIH1cbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXV0byh0YXNrcywgY29uY3VycmVuY3ksIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uY3VycmVuY3kgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayB8fCBwcm9taXNlQ2FsbGJhY2soKSk7XG4gICAgICAgIHZhciBudW1UYXNrcyA9IE9iamVjdC5rZXlzKHRhc2tzKS5sZW5ndGg7XG4gICAgICAgIGlmICghbnVtVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IG51bVRhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG4gICAgICAgIHZhciBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICB2YXIgcmVhZHlUYXNrcyA9IFtdO1xuXG4gICAgICAgIC8vIGZvciBjeWNsZSBkZXRlY3Rpb246XG4gICAgICAgIHZhciByZWFkeVRvQ2hlY2sgPSBbXTsgLy8gdGFza3MgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyByZWFjaGFibGVcbiAgICAgICAgLy8gd2l0aG91dCB0aGUgcG9zc2liaWxpdHkgb2YgcmV0dXJuaW5nIHRvIGFuIGFuY2VzdG9yIHRhc2tcbiAgICAgICAgdmFyIHVuY2hlY2tlZERlcGVuZGVuY2llcyA9IHt9O1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHRhc2tzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzW2tleV07XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFzaykpIHtcbiAgICAgICAgICAgICAgICAvLyBubyBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhrZXksIFt0YXNrXSk7XG4gICAgICAgICAgICAgICAgcmVhZHlUb0NoZWNrLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nRGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdEZXBlbmRlbmNpZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhrZXksIHRhc2spO1xuICAgICAgICAgICAgICAgIHJlYWR5VG9DaGVjay5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdW5jaGVja2VkRGVwZW5kZW5jaWVzW2tleV0gPSByZW1haW5pbmdEZXBlbmRlbmNpZXM7XG5cbiAgICAgICAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcGVuZGVuY3lOYW1lID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhc2tzW2RlcGVuZGVuY3lOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jLmF1dG8gdGFzayBgJyArIGtleSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYCBoYXMgYSBub24tZXhpc3RlbnQgZGVwZW5kZW5jeSBgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5TmFtZSArICdgIGluICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmpvaW4oJywgJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihkZXBlbmRlbmN5TmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdEZXBlbmRlbmNpZXMtLTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0RlcGVuZGVuY2llcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZVRhc2soa2V5LCB0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNoZWNrRm9yRGVhZGxvY2tzKCk7XG4gICAgICAgIHByb2Nlc3NRdWV1ZSgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGVucXVldWVUYXNrKGtleSwgdGFzaykge1xuICAgICAgICAgICAgcmVhZHlUYXNrcy5wdXNoKCgpID0+IHJ1blRhc2soa2V5LCB0YXNrKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUXVldWUoKSB7XG4gICAgICAgICAgICBpZiAoY2FuY2VsZWQpIHJldHVyblxuICAgICAgICAgICAgaWYgKHJlYWR5VGFza3MubGVuZ3RoID09PSAwICYmIHJ1bm5pbmdUYXNrcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlKHJlYWR5VGFza3MubGVuZ3RoICYmIHJ1bm5pbmdUYXNrcyA8IGNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1biA9IHJlYWR5VGFza3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBydW4oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkTGlzdGVuZXIodGFza05hbWUsIGZuKSB7XG4gICAgICAgICAgICB2YXIgdGFza0xpc3RlbmVycyA9IGxpc3RlbmVyc1t0YXNrTmFtZV07XG4gICAgICAgICAgICBpZiAoIXRhc2tMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICB0YXNrTGlzdGVuZXJzID0gbGlzdGVuZXJzW3Rhc2tOYW1lXSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YXNrTGlzdGVuZXJzLnB1c2goZm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdGFza0NvbXBsZXRlKHRhc2tOYW1lKSB7XG4gICAgICAgICAgICB2YXIgdGFza0xpc3RlbmVycyA9IGxpc3RlbmVyc1t0YXNrTmFtZV0gfHwgW107XG4gICAgICAgICAgICB0YXNrTGlzdGVuZXJzLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gICAgICAgICAgICBwcm9jZXNzUXVldWUoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZnVuY3Rpb24gcnVuVGFzayhrZXksIHRhc2spIHtcbiAgICAgICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuO1xuXG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gb25seU9uY2UoKGVyciwgLi4ucmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIFtyZXN1bHRdID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKHJrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSByZXN1bHRzW3JrZXldO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZWQpIHJldHVyblxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHNhZmVSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tDb21wbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgIHZhciB0YXNrRm4gPSB3cmFwQXN5bmModGFza1t0YXNrLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIGlmICh0YXNrLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0YXNrRm4ocmVzdWx0cywgdGFza0NhbGxiYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFza0ZuKHRhc2tDYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVja0ZvckRlYWRsb2NrcygpIHtcbiAgICAgICAgICAgIC8vIEthaG4ncyBhbGdvcml0aG1cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjS2Fobi4yN3NfYWxnb3JpdGhtXG4gICAgICAgICAgICAvLyBodHRwOi8vY29ubmFsbGUuYmxvZ3Nwb3QuY29tLzIwMTMvMTAvdG9wb2xvZ2ljYWwtc29ydGluZ2thaG4tYWxnb3JpdGhtLmh0bWxcbiAgICAgICAgICAgIHZhciBjdXJyZW50VGFzaztcbiAgICAgICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChyZWFkeVRvQ2hlY2subGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFRhc2sgPSByZWFkeVRvQ2hlY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgIGdldERlcGVuZGVudHMoY3VycmVudFRhc2spLmZvckVhY2goZGVwZW5kZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC0tdW5jaGVja2VkRGVwZW5kZW5jaWVzW2RlcGVuZGVudF0gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5VG9DaGVjay5wdXNoKGRlcGVuZGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvdW50ZXIgIT09IG51bVRhc2tzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnYXN5bmMuYXV0byBjYW5ub3QgZXhlY3V0ZSB0YXNrcyBkdWUgdG8gYSByZWN1cnNpdmUgZGVwZW5kZW5jeSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0RGVwZW5kZW50cyh0YXNrTmFtZSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGFza3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrID0gdGFza3Nba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXNrKSAmJiB0YXNrLmluZGV4T2YodGFza05hbWUpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FsbGJhY2tbUFJPTUlTRV9TWU1CT0xdXG4gICAgfVxuXG4gICAgdmFyIEZOX0FSR1MgPSAvXig/OmFzeW5jXFxzKT8oPzpmdW5jdGlvbik/XFxzKig/OlxcdytcXHMqKT9cXCgoW14pXSspXFwpKD86XFxzKnspLztcbiAgICB2YXIgQVJST1dfRk5fQVJHUyA9IC9eKD86YXN5bmNcXHMpP1xccyooPzpcXChcXHMqKT8oKD86W14pPVxcc11cXHMqKSopKD86XFwpXFxzKik/PT4vO1xuICAgIHZhciBGTl9BUkdfU1BMSVQgPSAvLC87XG4gICAgdmFyIEZOX0FSRyA9IC8oPS4rKT8oXFxzKikkLztcblxuICAgIGZ1bmN0aW9uIHN0cmlwQ29tbWVudHMoc3RyaW5nKSB7XG4gICAgICAgIGxldCBzdHJpcHBlZCA9ICcnO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgZW5kQmxvY2tDb21tZW50ID0gc3RyaW5nLmluZGV4T2YoJyovJyk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChzdHJpbmdbaW5kZXhdID09PSAnLycgJiYgc3RyaW5nW2luZGV4KzFdID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICAvLyBpbmxpbmUgY29tbWVudFxuICAgICAgICAgICAgICAgIGxldCBlbmRJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgaW5kZXggPSAoZW5kSW5kZXggPT09IC0xKSA/IHN0cmluZy5sZW5ndGggOiBlbmRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGVuZEJsb2NrQ29tbWVudCAhPT0gLTEpICYmIChzdHJpbmdbaW5kZXhdID09PSAnLycpICYmIChzdHJpbmdbaW5kZXgrMV0gPT09ICcqJykpIHtcbiAgICAgICAgICAgICAgICAvLyBibG9jayBjb21tZW50XG4gICAgICAgICAgICAgICAgbGV0IGVuZEluZGV4ID0gc3RyaW5nLmluZGV4T2YoJyovJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBlbmRJbmRleCArIDI7XG4gICAgICAgICAgICAgICAgICAgIGVuZEJsb2NrQ29tbWVudCA9IHN0cmluZy5pbmRleE9mKCcqLycsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZCArPSBzdHJpbmdbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyaXBwZWQgKz0gc3RyaW5nW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJpcHBlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtcyhmdW5jKSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IHN0cmlwQ29tbWVudHMoZnVuYy50b1N0cmluZygpKTtcbiAgICAgICAgbGV0IG1hdGNoID0gc3JjLm1hdGNoKEZOX0FSR1MpO1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHNyYy5tYXRjaChBUlJPV19GTl9BUkdTKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoKSB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBwYXJzZSBhcmdzIGluIGF1dG9JbmplY3RcXG5Tb3VyY2U6XFxuJyArIHNyYylcbiAgICAgICAgbGV0IFssIGFyZ3NdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBhcmdzXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzL2csICcnKVxuICAgICAgICAgICAgLnNwbGl0KEZOX0FSR19TUExJVClcbiAgICAgICAgICAgIC5tYXAoKGFyZykgPT4gYXJnLnJlcGxhY2UoRk5fQVJHLCAnJykudHJpbSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGRlcGVuZGVuY3ktaW5qZWN0ZWQgdmVyc2lvbiBvZiB0aGUgW2FzeW5jLmF1dG9de0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5hdXRvfSBmdW5jdGlvbi4gRGVwZW5kZW50XG4gICAgICogdGFza3MgYXJlIHNwZWNpZmllZCBhcyBwYXJhbWV0ZXJzIHRvIHRoZSBmdW5jdGlvbiwgYWZ0ZXIgdGhlIHVzdWFsIGNhbGxiYWNrXG4gICAgICogcGFyYW1ldGVyLCB3aXRoIHRoZSBwYXJhbWV0ZXIgbmFtZXMgbWF0Y2hpbmcgdGhlIG5hbWVzIG9mIHRoZSB0YXNrcyBpdFxuICAgICAqIGRlcGVuZHMgb24uIFRoaXMgY2FuIHByb3ZpZGUgZXZlbiBtb3JlIHJlYWRhYmxlIHRhc2sgZ3JhcGhzIHdoaWNoIGNhbiBiZVxuICAgICAqIGVhc2llciB0byBtYWludGFpbi5cbiAgICAgKlxuICAgICAqIElmIGEgZmluYWwgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGUgdGFzayByZXN1bHRzIGFyZSBzaW1pbGFybHkgaW5qZWN0ZWQsXG4gICAgICogc3BlY2lmaWVkIGFzIG5hbWVkIHBhcmFtZXRlcnMgYWZ0ZXIgdGhlIGluaXRpYWwgZXJyb3IgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogVGhlIGF1dG9JbmplY3QgZnVuY3Rpb24gaXMgcHVyZWx5IHN5bnRhY3RpYyBzdWdhciBhbmQgaXRzIHNlbWFudGljcyBhcmVcbiAgICAgKiBvdGhlcndpc2UgZXF1aXZhbGVudCB0byBbYXN5bmMuYXV0b117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99LlxuICAgICAqXG4gICAgICogQG5hbWUgYXV0b0luamVjdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmF1dG9de0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5hdXRvfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdGFza3MgLSBBbiBvYmplY3QsIGVhY2ggb2Ygd2hvc2UgcHJvcGVydGllcyBpcyBhbiB7QGxpbmsgQXN5bmNGdW5jdGlvbn0gb2ZcbiAgICAgKiB0aGUgZm9ybSAnZnVuYyhbZGVwZW5kZW5jaWVzLi4uXSwgY2FsbGJhY2spLiBUaGUgb2JqZWN0J3Mga2V5IG9mIGEgcHJvcGVydHlcbiAgICAgKiBzZXJ2ZXMgYXMgdGhlIG5hbWUgb2YgdGhlIHRhc2sgZGVmaW5lZCBieSB0aGF0IHByb3BlcnR5LCBpLmUuIGNhbiBiZSB1c2VkXG4gICAgICogd2hlbiBzcGVjaWZ5aW5nIHJlcXVpcmVtZW50cyBmb3Igb3RoZXIgdGFza3MuXG4gICAgICogKiBUaGUgYGNhbGxiYWNrYCBwYXJhbWV0ZXIgaXMgYSBgY2FsbGJhY2soZXJyLCByZXN1bHQpYCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqICAgd2hlbiBmaW5pc2hlZCwgcGFzc2luZyBhbiBgZXJyb3JgICh3aGljaCBjYW4gYmUgYG51bGxgKSBhbmQgdGhlIHJlc3VsdCBvZlxuICAgICAqICAgdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uLiBUaGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgbmFtZSBvdGhlciB0YXNrcyBvblxuICAgICAqICAgd2hpY2ggdGhlIHRhc2sgaXMgZGVwZW5kZW50LCBhbmQgdGhlIHJlc3VsdHMgZnJvbSB0aG9zZSB0YXNrcyBhcmUgdGhlXG4gICAgICogICBhcmd1bWVudHMgb2YgdGhvc2UgcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gICAgICogdGhlIHRhc2tzIGhhdmUgYmVlbiBjb21wbGV0ZWQuIEl0IHJlY2VpdmVzIHRoZSBgZXJyYCBhcmd1bWVudCBpZiBhbnkgYHRhc2tzYFxuICAgICAqIHBhc3MgYW4gZXJyb3IgdG8gdGhlaXIgY2FsbGJhY2ssIGFuZCBhIGByZXN1bHRzYCBvYmplY3Qgd2l0aCBhbnkgY29tcGxldGVkXG4gICAgICogdGFzayByZXN1bHRzLCBzaW1pbGFyIHRvIGBhdXRvYC5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gIFRoZSBleGFtcGxlIGZyb20gYGF1dG9gIGNhbiBiZSByZXdyaXR0ZW4gYXMgZm9sbG93czpcbiAgICAgKiBhc3luYy5hdXRvSW5qZWN0KHtcbiAgICAgKiAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGdldCBzb21lIGRhdGFcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBtYWtlX2ZvbGRlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZm9sZGVyJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IGZ1bmN0aW9uKGdldF9kYXRhLCBtYWtlX2ZvbGRlciwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZW1haWxfbGluazogZnVuY3Rpb24od3JpdGVfZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgIC8vIHdyaXRlX2ZpbGUgY29udGFpbnMgdGhlIGZpbGVuYW1lIHJldHVybmVkIGJ5IHdyaXRlX2ZpbGUuXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOndyaXRlX2ZpbGUsICdlbWFpbCc6J3VzZXJAZXhhbXBsZS5jb20nfSk7XG4gICAgICogICAgIH1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlbWFpbF9saW5rID0gJywgcmVzdWx0cy5lbWFpbF9saW5rKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIElmIHlvdSBhcmUgdXNpbmcgYSBKUyBtaW5pZmllciB0aGF0IG1hbmdsZXMgcGFyYW1ldGVyIG5hbWVzLCBgYXV0b0luamVjdGBcbiAgICAgKiAvLyB3aWxsIG5vdCB3b3JrIHdpdGggcGxhaW4gZnVuY3Rpb25zLCBzaW5jZSB0aGUgcGFyYW1ldGVyIG5hbWVzIHdpbGwgYmVcbiAgICAgKiAvLyBjb2xsYXBzZWQgdG8gYSBzaW5nbGUgbGV0dGVyIGlkZW50aWZpZXIuICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB5b3UgY2FuXG4gICAgICogLy8gZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBuYW1lcyBvZiB0aGUgcGFyYW1ldGVycyB5b3VyIHRhc2sgZnVuY3Rpb24gbmVlZHNcbiAgICAgKiAvLyBpbiBhbiBhcnJheSwgc2ltaWxhciB0byBBbmd1bGFyLmpzIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgICAqXG4gICAgICogLy8gVGhpcyBzdGlsbCBoYXMgYW4gYWR2YW50YWdlIG92ZXIgcGxhaW4gYGF1dG9gLCBzaW5jZSB0aGUgcmVzdWx0cyBhIHRhc2tcbiAgICAgKiAvLyBkZXBlbmRzIG9uIGFyZSBzdGlsbCBzcHJlYWQgaW50byBhcmd1bWVudHMuXG4gICAgICogYXN5bmMuYXV0b0luamVjdCh7XG4gICAgICogICAgIC8vLi4uXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihnZXRfZGF0YSwgbWFrZV9mb2xkZXIsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHdyaXRlX2ZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOndyaXRlX2ZpbGUsICdlbWFpbCc6J3VzZXJAZXhhbXBsZS5jb20nfSk7XG4gICAgICogICAgIH1dXG4gICAgICogICAgIC8vLi4uXG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlcnIgPSAnLCBlcnIpO1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZW1haWxfbGluayA9ICcsIHJlc3VsdHMuZW1haWxfbGluayk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gYXV0b0luamVjdCh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG5ld1Rhc2tzID0ge307XG5cbiAgICAgICAgT2JqZWN0LmtleXModGFza3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHZhciB0YXNrRm4gPSB0YXNrc1trZXldO1xuICAgICAgICAgICAgdmFyIHBhcmFtcztcbiAgICAgICAgICAgIHZhciBmbklzQXN5bmMgPSBpc0FzeW5jKHRhc2tGbik7XG4gICAgICAgICAgICB2YXIgaGFzTm9EZXBzID1cbiAgICAgICAgICAgICAgICAoIWZuSXNBc3luYyAmJiB0YXNrRm4ubGVuZ3RoID09PSAxKSB8fFxuICAgICAgICAgICAgICAgIChmbklzQXN5bmMgJiYgdGFza0ZuLmxlbmd0aCA9PT0gMCk7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhc2tGbikpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBbLi4udGFza0ZuXTtcbiAgICAgICAgICAgICAgICB0YXNrRm4gPSBwYXJhbXMucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBuZXdUYXNrc1trZXldID0gcGFyYW1zLmNvbmNhdChwYXJhbXMubGVuZ3RoID4gMCA/IG5ld1Rhc2sgOiB0YXNrRm4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNOb0RlcHMpIHtcbiAgICAgICAgICAgICAgICAvLyBubyBkZXBlbmRlbmNpZXMsIHVzZSB0aGUgZnVuY3Rpb24gYXMtaXNcbiAgICAgICAgICAgICAgICBuZXdUYXNrc1trZXldID0gdGFza0ZuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcyh0YXNrRm4pO1xuICAgICAgICAgICAgICAgIGlmICgodGFza0ZuLmxlbmd0aCA9PT0gMCAmJiAhZm5Jc0FzeW5jKSAmJiBwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImF1dG9JbmplY3QgdGFzayBmdW5jdGlvbnMgcmVxdWlyZSBleHBsaWNpdCBwYXJhbWV0ZXJzLlwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgY2FsbGJhY2sgcGFyYW1cbiAgICAgICAgICAgICAgICBpZiAoIWZuSXNBc3luYykgcGFyYW1zLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgbmV3VGFza3Nba2V5XSA9IHBhcmFtcy5jb25jYXQobmV3VGFzayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld1Rhc2socmVzdWx0cywgdGFza0NiKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5ld0FyZ3MgPSBwYXJhbXMubWFwKG5hbWUgPT4gcmVzdWx0c1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgbmV3QXJncy5wdXNoKHRhc2tDYik7XG4gICAgICAgICAgICAgICAgd3JhcEFzeW5jKHRhc2tGbikoLi4ubmV3QXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhdXRvKG5ld1Rhc2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlIGRvdWJseSBsaW5rZWQgbGlzdCAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRG91Ymx5X2xpbmtlZF9saXN0KSBpbXBsZW1lbnRhdGlvblxuICAgIC8vIHVzZWQgZm9yIHF1ZXVlcy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIG5vZGUgcHJvdmlkZWQgYnkgdGhlIHVzZXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgLy8gdG8gYWRqdXN0IHRoZSBuZXh0IGFuZCBsYXN0IHByb3BlcnRpZXMuIFdlIGltcGxlbWVudCBvbmx5IHRoZSBtaW5pbWFsIGZ1bmN0aW9uYWxpdHlcbiAgICAvLyBmb3IgcXVldWUgc3VwcG9ydC5cbiAgICBjbGFzcyBETEwge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVMaW5rKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnByZXYpIG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBpZiAobm9kZS5uZXh0KSBub2RlLm5leHQucHJldiA9IG5vZGUucHJldjtcbiAgICAgICAgICAgIGVsc2UgdGhpcy50YWlsID0gbm9kZS5wcmV2O1xuXG4gICAgICAgICAgICBub2RlLnByZXYgPSBub2RlLm5leHQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggLT0gMTtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgZW1wdHkgKCkge1xuICAgICAgICAgICAgd2hpbGUodGhpcy5oZWFkKSB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEFmdGVyKG5vZGUsIG5ld05vZGUpIHtcbiAgICAgICAgICAgIG5ld05vZGUucHJldiA9IG5vZGU7XG4gICAgICAgICAgICBuZXdOb2RlLm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBpZiAobm9kZS5uZXh0KSBub2RlLm5leHQucHJldiA9IG5ld05vZGU7XG4gICAgICAgICAgICBlbHNlIHRoaXMudGFpbCA9IG5ld05vZGU7XG4gICAgICAgICAgICBub2RlLm5leHQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEJlZm9yZShub2RlLCBuZXdOb2RlKSB7XG4gICAgICAgICAgICBuZXdOb2RlLnByZXYgPSBub2RlLnByZXY7XG4gICAgICAgICAgICBuZXdOb2RlLm5leHQgPSBub2RlO1xuICAgICAgICAgICAgaWYgKG5vZGUucHJldikgbm9kZS5wcmV2Lm5leHQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgbm9kZS5wcmV2ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICB1bnNoaWZ0KG5vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhlYWQpIHRoaXMuaW5zZXJ0QmVmb3JlKHRoaXMuaGVhZCwgbm9kZSk7XG4gICAgICAgICAgICBlbHNlIHNldEluaXRpYWwodGhpcywgbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRhaWwpIHRoaXMuaW5zZXJ0QWZ0ZXIodGhpcy50YWlsLCBub2RlKTtcbiAgICAgICAgICAgIGVsc2Ugc2V0SW5pdGlhbCh0aGlzLCBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNoaWZ0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhZCAmJiB0aGlzLnJlbW92ZUxpbmsodGhpcy5oZWFkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvcCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRhaWwgJiYgdGhpcy5yZW1vdmVMaW5rKHRoaXMudGFpbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0b0FycmF5KCkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi50aGlzXVxuICAgICAgICB9XG5cbiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAgICAgICAgIHZhciBjdXIgPSB0aGlzLmhlYWQ7XG4gICAgICAgICAgICB3aGlsZSAoY3VyKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgY3VyLmRhdGE7XG4gICAgICAgICAgICAgICAgY3VyID0gY3VyLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmUgKHRlc3RGbikge1xuICAgICAgICAgICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XG4gICAgICAgICAgICB3aGlsZShjdXJyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHtuZXh0fSA9IGN1cnI7XG4gICAgICAgICAgICAgICAgaWYgKHRlc3RGbihjdXJyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmsoY3Vycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnIgPSBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRJbml0aWFsKGRsbCwgbm9kZSkge1xuICAgICAgICBkbGwubGVuZ3RoID0gMTtcbiAgICAgICAgZGxsLmhlYWQgPSBkbGwudGFpbCA9IG5vZGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcXVldWUkMSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfd29ya2VyID0gd3JhcEFzeW5jKHdvcmtlcik7XG4gICAgICAgIHZhciBudW1SdW5uaW5nID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHtcbiAgICAgICAgICAgIGVycm9yOiBbXSxcbiAgICAgICAgICAgIGRyYWluOiBbXSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogW10sXG4gICAgICAgICAgICB1bnNhdHVyYXRlZDogW10sXG4gICAgICAgICAgICBlbXB0eTogW11cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBvbiAoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGV2ZW50c1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uY2UgKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBbmRSZW1vdmUgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIG9mZihldmVudCwgaGFuZGxlQW5kUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGV2ZW50c1tldmVudF0ucHVzaChoYW5kbGVBbmRSZW1vdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb2ZmIChldmVudCwgaGFuZGxlcikge1xuICAgICAgICAgICAgaWYgKCFldmVudCkgcmV0dXJuIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaChldiA9PiBldmVudHNbZXZdID0gW10pXG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHJldHVybiBldmVudHNbZXZlbnRdID0gW11cbiAgICAgICAgICAgIGV2ZW50c1tldmVudF0gPSBldmVudHNbZXZlbnRdLmZpbHRlcihldiA9PiBldiAhPT0gaGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyIChldmVudCwgLi4uYXJncykge1xuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XS5mb3JFYWNoKGhhbmRsZXIgPT4gaGFuZGxlciguLi5hcmdzKSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcHJvY2Vzc2luZ1NjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KGRhdGEsIGluc2VydEF0RnJvbnQsIHJlamVjdE9uRXJyb3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Rhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB2YXIgcmVzLCByZWo7XG4gICAgICAgICAgICBmdW5jdGlvbiBwcm9taXNlQ2FsbGJhY2sgKGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yLCBsZXQgdGhlIGdsb2JhbCBlcnJvciBoYW5kbGVyXG4gICAgICAgICAgICAgICAgLy8gZGVhbCB3aXRoIGl0XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdE9uRXJyb3IgPyByZWooZXJyKSA6IHJlcygpXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHJldHVybiByZXMoYXJnc1swXSlcbiAgICAgICAgICAgICAgICByZXMoYXJncyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpdGVtID0gcS5fY3JlYXRlVGFza0l0ZW0oXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICByZWplY3RPbkVycm9yID8gcHJvbWlzZUNhbGxiYWNrIDpcbiAgICAgICAgICAgICAgICAgICAgKGNhbGxiYWNrIHx8IHByb21pc2VDYWxsYmFjaylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChpbnNlcnRBdEZyb250KSB7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzaW5nU2NoZWR1bGVkKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVqZWN0T25FcnJvciB8fCAhY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICByZWogPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDQih0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBudW1SdW5uaW5nIC09IDE7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRhc2tzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHdvcmtlcnNMaXN0LmluZGV4T2YodGFzayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0YXNrLmNhbGxiYWNrKGVyciwgLi4uYXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdlcnJvcicsIGVyciwgdGFzay5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChudW1SdW5uaW5nIDw9IChxLmNvbmN1cnJlbmN5IC0gcS5idWZmZXIpICkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCd1bnNhdHVyYXRlZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdkcmFpbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBxLnByb2Nlc3MoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfbWF5YmVEcmFpbihkYXRhKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSQxKCgpID0+IHRyaWdnZXIoJ2RyYWluJykpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50TWV0aG9kID0gKG5hbWUpID0+IChoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvbmNlKG5hbWUsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZihuYW1lKTtcbiAgICAgICAgICAgIG9uKG5hbWUsIGhhbmRsZXIpO1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIF90YXNrczogbmV3IERMTCgpLFxuICAgICAgICAgICAgX2NyZWF0ZVRhc2tJdGVtIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBxLl90YXNrc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgYnVmZmVyOiBjb25jdXJyZW5jeSAvIDQsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfbWF5YmVEcmFpbihkYXRhKSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcChkYXR1bSA9PiBfaW5zZXJ0KGRhdHVtLCBmYWxzZSwgZmFsc2UsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnNlcnQoZGF0YSwgZmFsc2UsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHVzaEFzeW5jIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfbWF5YmVEcmFpbihkYXRhKSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcChkYXR1bSA9PiBfaW5zZXJ0KGRhdHVtLCBmYWxzZSwgdHJ1ZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCBmYWxzZSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGwgKCkge1xuICAgICAgICAgICAgICAgIG9mZigpO1xuICAgICAgICAgICAgICAgIHEuX3Rhc2tzLmVtcHR5KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdCAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX21heWJlRHJhaW4oZGF0YSkpIHJldHVyblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoZGF0dW0gPT4gX2luc2VydChkYXR1bSwgdHJ1ZSwgZmFsc2UsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnNlcnQoZGF0YSwgdHJ1ZSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0QXN5bmMgKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXliZURyYWluKGRhdGEpKSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGRhdHVtID0+IF9pbnNlcnQoZGF0dW0sIHRydWUsIHRydWUsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnNlcnQoZGF0YSwgdHJ1ZSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZSAodGVzdEZuKSB7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MucmVtb3ZlKHRlc3RGbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzcyAoKSB7XG4gICAgICAgICAgICAgICAgLy8gQXZvaWQgdHJ5aW5nIHRvIHN0YXJ0IHRvbyBtYW55IHByb2Nlc3Npbmcgb3BlcmF0aW9ucy4gVGhpcyBjYW4gb2NjdXJcbiAgICAgICAgICAgICAgICAvLyB3aGVuIGNhbGxiYWNrcyByZXNvbHZlIHN5bmNocm9ub3VzbHkgKCMxMjY3KS5cbiAgICAgICAgICAgICAgICBpZiAoaXNQcm9jZXNzaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXNQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB3aGlsZSghcS5wYXVzZWQgJiYgbnVtUnVubmluZyA8IHEuY29uY3VycmVuY3kgJiYgcS5fdGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2tzID0gW10sIGRhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBxLl90YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLnBheWxvYWQpIGwgPSBNYXRoLm1pbihsLCBxLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBxLl90YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gobm9kZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG51bVJ1bm5pbmcgKz0gMTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocS5fdGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdlbXB0eScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVJ1bm5pbmcgPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3NhdHVyYXRlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGNiID0gb25seU9uY2UoX2NyZWF0ZUNCKHRhc2tzKSk7XG4gICAgICAgICAgICAgICAgICAgIF93b3JrZXIoZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGggKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLl90YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZyAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bVJ1bm5pbmc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd29ya2Vyc0xpc3QgKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLl90YXNrcy5sZW5ndGggKyBudW1SdW5uaW5nID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEocS5wcm9jZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gZGVmaW5lIHRoZXNlIGFzIGZpeGVkIHByb3BlcnRpZXMsIHNvIHBlb3BsZSBnZXQgdXNlZnVsIGVycm9ycyB3aGVuIHVwZGF0aW5nXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHEsIHtcbiAgICAgICAgICAgIHNhdHVyYXRlZDoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ3NhdHVyYXRlZCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zYXR1cmF0ZWQ6IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCd1bnNhdHVyYXRlZCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW1wdHk6IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCdlbXB0eScpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZHJhaW46IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCdkcmFpbicpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCdlcnJvcicpXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBjYXJnb2Agb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwYXlsb2FkLiBUYXNrcyBhZGRlZCB0byB0aGVcbiAgICAgKiBjYXJnbyB3aWxsIGJlIHByb2Nlc3NlZCBhbHRvZ2V0aGVyICh1cCB0byB0aGUgYHBheWxvYWRgIGxpbWl0KS4gSWYgdGhlXG4gICAgICogYHdvcmtlcmAgaXMgaW4gcHJvZ3Jlc3MsIHRoZSB0YXNrIGlzIHF1ZXVlZCB1bnRpbCBpdCBiZWNvbWVzIGF2YWlsYWJsZS4gT25jZVxuICAgICAqIHRoZSBgd29ya2VyYCBoYXMgY29tcGxldGVkIHNvbWUgdGFza3MsIGVhY2ggY2FsbGJhY2sgb2YgdGhvc2UgdGFza3MgaXNcbiAgICAgKiBjYWxsZWQuIENoZWNrIG91dCBbdGhlc2VdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vNmJiZDM2ZjRjZjViMzVhMGYxMWE5NmRjZDJlOTc3MTFmZmMyZmIzNy82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDM4MmY2MjYyNjMzMDYzNjY2MjMwMmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM5MzczNDY2MmQzMzMzMzkzNzYzMzYzNDY0NjMzODM1MzgyZTY3Njk2NikgW2FuaW1hdGlvbnNdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vZjQ4MTBlMDBlMWM1ZjVmOGFkZGJlM2U5ZjQ5MDY0ZmQ1ZDEwMjY5OS82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDMxMmYzODM0NjMzOTMyMzAzNjM2MmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM4MzEzNDY2MmQzOTY0MzM2NDMwMzIzNDMxMzM2MjY2NjQyZTY3Njk2NilcbiAgICAgKiBmb3IgaG93IGBjYXJnb2AgYW5kIGBxdWV1ZWAgd29yay5cbiAgICAgKlxuICAgICAqIFdoaWxlIFtgcXVldWVgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9IHBhc3NlcyBvbmx5IG9uZSB0YXNrIHRvIG9uZSBvZiBhIGdyb3VwIG9mIHdvcmtlcnNcbiAgICAgKiBhdCBhIHRpbWUsIGNhcmdvIHBhc3NlcyBhbiBhcnJheSBvZiB0YXNrcyB0byBhIHNpbmdsZSB3b3JrZXIsIHJlcGVhdGluZ1xuICAgICAqIHdoZW4gdGhlIHdvcmtlciBpcyBmaW5pc2hlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhcmdvXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYW4gYXJyYXlcbiAgICAgKiBvZiBxdWV1ZWQgdGFza3MuIEludm9rZWQgd2l0aCBgKHRhc2tzLCBjYWxsYmFjaylgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcGF5bG9hZD1JbmZpbml0eV0gLSBBbiBvcHRpb25hbCBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nXG4gICAgICogaG93IG1hbnkgdGFza3Mgc2hvdWxkIGJlIHByb2Nlc3NlZCBwZXIgcm91bmQ7IGlmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IGlzXG4gICAgICogdW5saW1pdGVkLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgY2FyZ28gb2JqZWN0IHRvIG1hbmFnZSB0aGUgdGFza3MuIENhbGxiYWNrcyBjYW5cbiAgICAgKiBhdHRhY2hlZCBhcyBjZXJ0YWluIHByb3BlcnRpZXMgdG8gbGlzdGVuIGZvciBzcGVjaWZpYyBldmVudHMgZHVyaW5nIHRoZVxuICAgICAqIGxpZmVjeWNsZSBvZiB0aGUgY2FyZ28gYW5kIGlubmVyIHF1ZXVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBjcmVhdGUgYSBjYXJnbyBvYmplY3Qgd2l0aCBwYXlsb2FkIDJcbiAgICAgKiB2YXIgY2FyZ28gPSBhc3luYy5jYXJnbyhmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZm9yICh2YXIgaT0wOyBpPHRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaGVsbG8gJyArIHRhc2tzW2ldLm5hbWUpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhbGxiYWNrKCk7XG4gICAgICogfSwgMik7XG4gICAgICpcbiAgICAgKiAvLyBhZGQgc29tZSBpdGVtc1xuICAgICAqIGNhcmdvLnB1c2goe25hbWU6ICdmb28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGZvbycpO1xuICAgICAqIH0pO1xuICAgICAqIGNhcmdvLnB1c2goe25hbWU6ICdiYXInfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJhcicpO1xuICAgICAqIH0pO1xuICAgICAqIGF3YWl0IGNhcmdvLnB1c2goe25hbWU6ICdiYXonfSk7XG4gICAgICogY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYmF6Jyk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FyZ28kMSh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXVlJDEod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGNhcmdvUXVldWVgIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgcGF5bG9hZC4gVGFza3MgYWRkZWQgdG8gdGhlXG4gICAgICogY2FyZ29RdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCB0b2dldGhlciAodXAgdG8gdGhlIGBwYXlsb2FkYCBsaW1pdCkgaW4gYGNvbmN1cnJlbmN5YCBwYXJhbGxlbCB3b3JrZXJzLlxuICAgICAqIElmIHRoZSBhbGwgYHdvcmtlcnNgIGFyZSBpbiBwcm9ncmVzcywgdGhlIHRhc2sgaXMgcXVldWVkIHVudGlsIG9uZSBiZWNvbWVzIGF2YWlsYWJsZS4gT25jZVxuICAgICAqIGEgYHdvcmtlcmAgaGFzIGNvbXBsZXRlZCBzb21lIHRhc2tzLCBlYWNoIGNhbGxiYWNrIG9mIHRob3NlIHRhc2tzIGlzXG4gICAgICogY2FsbGVkLiBDaGVjayBvdXQgW3RoZXNlXShodHRwczovL2NhbW8uZ2l0aHVidXNlcmNvbnRlbnQuY29tLzZiYmQzNmY0Y2Y1YjM1YTBmMTFhOTZkY2QyZTk3NzExZmZjMmZiMzcvNjg3NDc0NzA3MzNhMmYyZjY2MmU2MzZjNmY3NTY0MmU2NzY5NzQ2ODc1NjIyZTYzNmY2ZDJmNjE3MzczNjU3NDczMmYzMTM2MzczNjM4MzczMTJmMzYzODMxMzAzODJmNjI2MjYzMzA2MzY2NjIzMDJkMzU2NjMyMzkyZDMxMzE2NTMyMmQzOTM3MzQ2NjJkMzMzMzM5Mzc2MzM2MzQ2NDYzMzgzNTM4MmU2NzY5NjYpIFthbmltYXRpb25zXShodHRwczovL2NhbW8uZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Y0ODEwZTAwZTFjNWY1ZjhhZGRiZTNlOWY0OTA2NGZkNWQxMDI2OTkvNjg3NDc0NzA3MzNhMmYyZjY2MmU2MzZjNmY3NTY0MmU2NzY5NzQ2ODc1NjIyZTYzNmY2ZDJmNjE3MzczNjU3NDczMmYzMTM2MzczNjM4MzczMTJmMzYzODMxMzAzMTJmMzgzNDYzMzkzMjMwMzYzNjJkMzU2NjMyMzkyZDMxMzE2NTMyMmQzODMxMzQ2NjJkMzk2NDMzNjQzMDMyMzQzMTMzNjI2NjY0MmU2NzY5NjYpXG4gICAgICogZm9yIGhvdyBgY2FyZ29gIGFuZCBgcXVldWVgIHdvcmsuXG4gICAgICpcbiAgICAgKiBXaGlsZSBbYHF1ZXVlYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfSBwYXNzZXMgb25seSBvbmUgdGFzayB0byBvbmUgb2YgYSBncm91cCBvZiB3b3JrZXJzXG4gICAgICogYXQgYSB0aW1lLCBhbmQgW2BjYXJnb2Bde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jYXJnb30gcGFzc2VzIGFuIGFycmF5IG9mIHRhc2tzIHRvIGEgc2luZ2xlIHdvcmtlcixcbiAgICAgKiB0aGUgY2FyZ29RdWV1ZSBwYXNzZXMgYW4gYXJyYXkgb2YgdGFza3MgdG8gbXVsdGlwbGUgcGFyYWxsZWwgd29ya2Vycy5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhcmdvUXVldWVcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5xdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfVxuICAgICAqIEBzZWUgW2FzeW5jLmNhcmdvXXtAbGluayBtb2R1bGU6Q29udHJvbEZMb3cuY2FyZ299XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gd29ya2VyIC0gQW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIGFuIGFycmF5XG4gICAgICogb2YgcXVldWVkIHRhc2tzLiBJbnZva2VkIHdpdGggYCh0YXNrcywgY2FsbGJhY2spYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbmN5PTFdIC0gQW4gYGludGVnZXJgIGZvciBkZXRlcm1pbmluZyBob3cgbWFueVxuICAgICAqIGB3b3JrZXJgIGZ1bmN0aW9ucyBzaG91bGQgYmUgcnVuIGluIHBhcmFsbGVsLiAgSWYgb21pdHRlZCwgdGhlIGNvbmN1cnJlbmN5XG4gICAgICogZGVmYXVsdHMgdG8gYDFgLiAgSWYgdGhlIGNvbmN1cnJlbmN5IGlzIGAwYCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcGF5bG9hZD1JbmZpbml0eV0gLSBBbiBvcHRpb25hbCBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nXG4gICAgICogaG93IG1hbnkgdGFza3Mgc2hvdWxkIGJlIHByb2Nlc3NlZCBwZXIgcm91bmQ7IGlmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IGlzXG4gICAgICogdW5saW1pdGVkLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgY2FyZ29RdWV1ZSBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gQ2FsbGJhY2tzIGNhblxuICAgICAqIGF0dGFjaGVkIGFzIGNlcnRhaW4gcHJvcGVydGllcyB0byBsaXN0ZW4gZm9yIHNwZWNpZmljIGV2ZW50cyBkdXJpbmcgdGhlXG4gICAgICogbGlmZWN5Y2xlIG9mIHRoZSBjYXJnb1F1ZXVlIGFuZCBpbm5lciBxdWV1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gY3JlYXRlIGEgY2FyZ29RdWV1ZSBvYmplY3Qgd2l0aCBwYXlsb2FkIDIgYW5kIGNvbmN1cnJlbmN5IDJcbiAgICAgKiB2YXIgY2FyZ29RdWV1ZSA9IGFzeW5jLmNhcmdvUXVldWUoZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZvciAodmFyIGk9MDsgaTx0YXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ2hlbGxvICcgKyB0YXNrc1tpXS5uYW1lKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYWxsYmFjaygpO1xuICAgICAqIH0sIDIsIDIpO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXNcbiAgICAgKiBjYXJnb1F1ZXVlLnB1c2goe25hbWU6ICdmb28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGZvbycpO1xuICAgICAqIH0pO1xuICAgICAqIGNhcmdvUXVldWUucHVzaCh7bmFtZTogJ2Jhcid9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYmFyJyk7XG4gICAgICogfSk7XG4gICAgICogY2FyZ29RdWV1ZS5wdXNoKHtuYW1lOiAnYmF6J30sIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXonKTtcbiAgICAgKiB9KTtcbiAgICAgKiBjYXJnb1F1ZXVlLnB1c2goe25hbWU6ICdib28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJvbycpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhcmdvKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXVlJDEod29ya2VyLCBjb25jdXJyZW5jeSwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVkdWNlcyBgY29sbGAgaW50byBhIHNpbmdsZSB2YWx1ZSB1c2luZyBhbiBhc3luYyBgaXRlcmF0ZWVgIHRvIHJldHVybiBlYWNoXG4gICAgICogc3VjY2Vzc2l2ZSBzdGVwLiBgbWVtb2AgaXMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi4gVGhpcyBmdW5jdGlvblxuICAgICAqIG9ubHkgb3BlcmF0ZXMgaW4gc2VyaWVzLlxuICAgICAqXG4gICAgICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGl0IG1heSBtYWtlIHNlbnNlIHRvIHNwbGl0IGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uXG4gICAgICogaW50byBhIHBhcmFsbGVsIG1hcCwgYW5kIHRoZW4gdXNlIHRoZSBub3JtYWwgYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG9uIHRoZVxuICAgICAqIHJlc3VsdHMuIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHNpdHVhdGlvbnMgd2hlcmUgZWFjaCBzdGVwIGluIHRoZSByZWR1Y3Rpb25cbiAgICAgKiBuZWVkcyB0byBiZSBhc3luYzsgaWYgeW91IGNhbiBnZXQgdGhlIGRhdGEgYmVmb3JlIHJlZHVjaW5nIGl0LCB0aGVuIGl0J3NcbiAgICAgKiBwcm9iYWJseSBhIGdvb2QgaWRlYSB0byBkbyBzby5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlZHVjZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBpbmplY3RcbiAgICAgKiBAYWxpYXMgZm9sZGxcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Kn0gbWVtbyAtIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSByZWR1Y3Rpb24uXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gYXBwbGllZCB0byBlYWNoIGl0ZW0gaW4gdGhlXG4gICAgICogYXJyYXkgdG8gcHJvZHVjZSB0aGUgbmV4dCBzdGVwIGluIHRoZSByZWR1Y3Rpb24uXG4gICAgICogVGhlIGBpdGVyYXRlZWAgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIG5leHQgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBJZiB0aGUgaXRlcmF0ZWUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsIHRoZSByZWR1Y3Rpb24gaXMgc3RvcHBlZCBhbmQgdGhlXG4gICAgICogbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAgICAgKiBJbnZva2VkIHdpdGggKG1lbW8sIGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCBpcyB0aGUgcmVkdWNlZCB2YWx1ZS4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZmlsZTEudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDEwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUyLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAyMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMy50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMzAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTQudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlTGlzdCA9IFsnZmlsZTEudHh0JywnZmlsZTIudHh0JywnZmlsZTMudHh0J107XG4gICAgICogY29uc3Qgd2l0aE1pc3NpbmdGaWxlTGlzdCA9IFsnZmlsZTEudHh0JywnZmlsZTIudHh0JywnZmlsZTMudHh0JywgJ2ZpbGU0LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlc1xuICAgICAqIC8vIGZpbGUgc2l6ZSBpcyBhZGRlZCB0byB0aGUgbWVtb2l6ZWQgdmFsdWUsIHRoZW4gcmV0dXJuZWRcbiAgICAgKiBmdW5jdGlvbiBnZXRGaWxlU2l6ZUluQnl0ZXMobWVtbywgZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdChmaWxlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIG1lbW8gKyBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5yZWR1Y2UoZmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyA2MDAwXG4gICAgICogICAgICAgICAvLyB3aGljaCBpcyB0aGUgc3VtIG9mIHRoZSBmaWxlIHNpemVzIG9mIHRoZSB0aHJlZSBmaWxlc1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLnJlZHVjZSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5yZWR1Y2UoZmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gNjAwMFxuICAgICAqICAgICAvLyB3aGljaCBpcyB0aGUgc3VtIG9mIHRoZSBmaWxlIHNpemVzIG9mIHRoZSB0aHJlZSBmaWxlc1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5yZWR1Y2Uod2l0aE1pc3NpbmdGaWxlTGlzdCwgMCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMucmVkdWNlKGZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIDYwMDBcbiAgICAgKiAgICAgICAgIC8vIHdoaWNoIGlzIHRoZSBzdW0gb2YgdGhlIGZpbGUgc2l6ZXMgb2YgdGhlIHRocmVlIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLnJlZHVjZSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZHVjZShjb2xsLCBtZW1vLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBlYWNoT2ZTZXJpZXMkMShjb2xsLCAoeCwgaSwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBfaXRlcmF0ZWUobWVtbywgeCwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVyciA9PiBjYWxsYmFjayhlcnIsIG1lbW8pKTtcbiAgICB9XG4gICAgdmFyIHJlZHVjZSQxID0gYXdhaXRpZnkocmVkdWNlLCA0KTtcblxuICAgIC8qKlxuICAgICAqIFZlcnNpb24gb2YgdGhlIGNvbXBvc2UgZnVuY3Rpb24gdGhhdCBpcyBtb3JlIG5hdHVyYWwgdG8gcmVhZC4gRWFjaCBmdW5jdGlvblxuICAgICAqIGNvbnN1bWVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzIGZ1bmN0aW9uLiBJdCBpcyB0aGUgZXF1aXZhbGVudCBvZlxuICAgICAqIFtjb21wb3NlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuY29tcG9zZX0gd2l0aCB0aGUgYXJndW1lbnRzIHJldmVyc2VkLlxuICAgICAqXG4gICAgICogRWFjaCBmdW5jdGlvbiBpcyBleGVjdXRlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY29tcG9zZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbmFtZSBzZXFcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5jb21wb3NlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuY29tcG9zZX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHsuLi5Bc3luY0Z1bmN0aW9ufSBmdW5jdGlvbnMgLSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9ucyB0byBjb21wb3NlXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHRoYXQgY29tcG9zZXMgdGhlIGBmdW5jdGlvbnNgIGluIG9yZGVyXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFJlcXVpcmVzIGxvZGFzaCAob3IgdW5kZXJzY29yZSksIGV4cHJlc3MzIGFuZCBkcmVzZW5kZSdzIG9ybTIuXG4gICAgICogLy8gUGFydCBvZiBhbiBhcHAsIHRoYXQgZmV0Y2hlcyBjYXRzIG9mIHRoZSBsb2dnZWQgdXNlci5cbiAgICAgKiAvLyBUaGlzIGV4YW1wbGUgdXNlcyBgc2VxYCBmdW5jdGlvbiB0byBhdm9pZCBvdmVybmVzdGluZyBhbmQgZXJyb3JcbiAgICAgKiAvLyBoYW5kbGluZyBjbHV0dGVyLlxuICAgICAqIGFwcC5nZXQoJy9jYXRzJywgZnVuY3Rpb24ocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICAgKiAgICAgdmFyIFVzZXIgPSByZXF1ZXN0Lm1vZGVscy5Vc2VyO1xuICAgICAqICAgICBhc3luYy5zZXEoXG4gICAgICogICAgICAgICBVc2VyLmdldC5iaW5kKFVzZXIpLCAgLy8gJ1VzZXIuZ2V0JyBoYXMgc2lnbmF0dXJlIChpZCwgY2FsbGJhY2soZXJyLCBkYXRhKSlcbiAgICAgKiAgICAgICAgIGZ1bmN0aW9uKHVzZXIsIGZuKSB7XG4gICAgICogICAgICAgICAgICAgdXNlci5nZXRDYXRzKGZuKTsgICAgICAvLyAnZ2V0Q2F0cycgaGFzIHNpZ25hdHVyZSAoY2FsbGJhY2soZXJyLCBkYXRhKSlcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgKShyZXEuc2Vzc2lvbi51c2VyX2lkLCBmdW5jdGlvbiAoZXJyLCBjYXRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqICAgICAgICAgICAgIHJlc3BvbnNlLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6IGVyci5tZXNzYWdlIH0pO1xuICAgICAqICAgICAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgICAgICByZXNwb25zZS5qc29uKHsgc3RhdHVzOiAnb2snLCBtZXNzYWdlOiAnQ2F0cyBmb3VuZCcsIGRhdGE6IGNhdHMgfSk7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH0pO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcSguLi5mdW5jdGlvbnMpIHtcbiAgICAgICAgdmFyIF9mdW5jdGlvbnMgPSBmdW5jdGlvbnMubWFwKHdyYXBBc3luYyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNiID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYiA9IHByb21pc2VDYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZWR1Y2UkMShfZnVuY3Rpb25zLCBhcmdzLCAobmV3YXJncywgZm4sIGl0ZXJDYikgPT4ge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KChlcnIsIC4uLm5leHRhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJDYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVyciwgcmVzdWx0cykgPT4gY2IoZXJyLCAuLi5yZXN1bHRzKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjYltQUk9NSVNFX1NZTUJPTF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gd2hpY2ggaXMgYSBjb21wb3NpdGlvbiBvZiB0aGUgcGFzc2VkIGFzeW5jaHJvbm91c1xuICAgICAqIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiBjb25zdW1lcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0XG4gICAgICogZm9sbG93cy4gQ29tcG9zaW5nIGZ1bmN0aW9ucyBgZigpYCwgYGcoKWAsIGFuZCBgaCgpYCB3b3VsZCBwcm9kdWNlIHRoZSByZXN1bHRcbiAgICAgKiBvZiBgZihnKGgoKSkpYCwgb25seSB0aGlzIHZlcnNpb24gdXNlcyBjYWxsYmFja3MgdG8gb2J0YWluIHRoZSByZXR1cm4gdmFsdWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIGxhc3QgYXJndW1lbnQgdG8gdGhlIGNvbXBvc2VkIGZ1bmN0aW9uIGlzIG5vdCBhIGZ1bmN0aW9uLCBhIHByb21pc2VcbiAgICAgKiBpcyByZXR1cm5lZCB3aGVuIHlvdSBjYWxsIGl0LlxuICAgICAqXG4gICAgICogRWFjaCBmdW5jdGlvbiBpcyBleGVjdXRlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY29tcG9zZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb21wb3NlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7Li4uQXN5bmNGdW5jdGlvbn0gZnVuY3Rpb25zIC0gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbnMgdG8gY29tcG9zZVxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2VkXG4gICAgICogYXN5bmNocm9ub3VzIGBmdW5jdGlvbnNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGFkZDEobiwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBuICsgMSk7XG4gICAgICogICAgIH0sIDEwKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBtdWwzKG4sIGNhbGxiYWNrKSB7XG4gICAgICogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgbiAqIDMpO1xuICAgICAqICAgICB9LCAxMCk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGFkZDFtdWwzID0gYXN5bmMuY29tcG9zZShtdWwzLCBhZGQxKTtcbiAgICAgKiBhZGQxbXVsMyg0LCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgMTVcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wb3NlKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHNlcSguLi5hcmdzLnJldmVyc2UoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcExpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB0cmFuc2Zvcm1lZCBpdGVtLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyBhbiBhcnJheSBvZiB0aGVcbiAgICAgKiB0cmFuc2Zvcm1lZCBpdGVtcyBmcm9tIHRoZSBgY29sbGAuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBMaW1pdCAoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2FzeW5jTWFwKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBtYXBMaW1pdCQxID0gYXdhaXRpZnkobWFwTGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2Bjb25jYXRgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuY29uY2F0fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbmNhdExpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuY29uY2F0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuY29uY2F0fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQGFsaWFzIGZsYXRNYXBMaW1pdFxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLFxuICAgICAqIHdoaWNoIHNob3VsZCB1c2UgYW4gYXJyYXkgYXMgaXRzIHJlc3VsdC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gYXJyYXlcbiAgICAgKiBjb250YWluaW5nIHRoZSBjb25jYXRlbmF0ZWQgcmVzdWx0cyBvZiB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbi4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMgQSBQcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25jYXRMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICByZXR1cm4gbWFwTGltaXQkMShjb2xsLCBsaW1pdCwgKHZhbCwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBfaXRlcmF0ZWUodmFsLCAoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyQ2IoZXJyLCBhcmdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAoZXJyLCBtYXBSZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcFJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwUmVzdWx0c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KC4uLm1hcFJlc3VsdHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBjb25jYXRMaW1pdCQxID0gYXdhaXRpZnkoY29uY2F0TGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyBgaXRlcmF0ZWVgIHRvIGVhY2ggaXRlbSBpbiBgY29sbGAsIGNvbmNhdGVuYXRpbmcgdGhlIHJlc3VsdHMuIFJldHVybnNcbiAgICAgKiB0aGUgY29uY2F0ZW5hdGVkIGxpc3QuIFRoZSBgaXRlcmF0ZWVgcyBhcmUgY2FsbGVkIGluIHBhcmFsbGVsLCBhbmQgdGhlXG4gICAgICogcmVzdWx0cyBhcmUgY29uY2F0ZW5hdGVkIGFzIHRoZXkgcmV0dXJuLiBUaGUgcmVzdWx0cyBhcnJheSB3aWxsIGJlIHJldHVybmVkIGluXG4gICAgICogdGhlIG9yaWdpbmFsIG9yZGVyIG9mIGBjb2xsYCBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb25jYXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBhbGlhcyBmbGF0TWFwXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYCxcbiAgICAgKiB3aGljaCBzaG91bGQgdXNlIGFuIGFycmF5IGFzIGl0cyByZXN1bHQuIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5XG4gICAgICogY29udGFpbmluZyB0aGUgY29uY2F0ZW5hdGVkIHJlc3VsdHMgb2YgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKiAvLyBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBsZXQgZGlyZWN0b3J5TGlzdCA9IFsnZGlyMScsJ2RpcjInLCdkaXIzJ107XG4gICAgICogbGV0IHdpdGhNaXNzaW5nRGlyZWN0b3J5TGlzdCA9IFsnZGlyMScsJ2RpcjInLCdkaXIzJywgJ2RpcjQnXTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmNvbmNhdChkaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgIC8vIFsgJ2ZpbGUxLnR4dCcsICdmaWxlMi50eHQnLCAnZmlsZTMudHh0JywgJ2ZpbGU0LnR4dCcsIGZpbGU1LnR4dCBdXG4gICAgICogICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5jb25jYXQod2l0aE1pc3NpbmdEaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgICAgIC8vIHNpbmNlIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmNvbmNhdChkaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyKVxuICAgICAqIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gWyAnZmlsZTEudHh0JywgJ2ZpbGUyLnR4dCcsICdmaWxlMy50eHQnLCAnZmlsZTQudHh0JywgZmlsZTUudHh0IF1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMuY29uY2F0KHdpdGhNaXNzaW5nRGlyZWN0b3J5TGlzdCwgZnMucmVhZGRpcilcbiAgICAgKiAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgLy8gc2luY2UgZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLmNvbmNhdChkaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gWyAnZmlsZTEudHh0JywgJ2ZpbGUyLnR4dCcsICdmaWxlMy50eHQnLCAnZmlsZTQudHh0JywgZmlsZTUudHh0IF1cbiAgICAgKiAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLmNvbmNhdCh3aXRoTWlzc2luZ0RpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgICAgICAvLyBzaW5jZSBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25jYXQoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBjb25jYXRMaW1pdCQxKGNvbGwsIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBjb25jYXQkMSA9IGF3YWl0aWZ5KGNvbmNhdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGNvbmNhdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5jb25jYXR9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbmNhdFNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmNvbmNhdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmNvbmNhdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBhbGlhcyBmbGF0TWFwU2VyaWVzXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYW4gYXJyYXkgYW4gYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyBhbiBhcnJheVxuICAgICAqIGNvbnRhaW5pbmcgdGhlIGNvbmNhdGVuYXRlZCByZXN1bHRzIG9mIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdFNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdExpbWl0JDEoY29sbCwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgY29uY2F0U2VyaWVzJDEgPSBhd2FpdGlmeShjb25jYXRTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2hlbiBjYWxsZWQsIGNhbGxzLWJhY2sgd2l0aCB0aGUgdmFsdWVzIHByb3ZpZGVkLlxuICAgICAqIFVzZWZ1bCBhcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gYSBbYHdhdGVyZmFsbGBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy53YXRlcmZhbGx9LCBvciBmb3IgcGx1Z2dpbmcgdmFsdWVzIGluIHRvXG4gICAgICogW2BhdXRvYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99LlxuICAgICAqXG4gICAgICogQG5hbWUgY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJndW1lbnRzLi4uIC0gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gYXV0b21hdGljYWxseSBpbnZva2VcbiAgICAgKiBjYWxsYmFjayB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aGVuIGludm9rZWQsIGF1dG9tYXRpY2FsbHlcbiAgICAgKiBpbnZva2VzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBwcmV2aW91cyBnaXZlbiBhcmd1bWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmNvbnN0YW50KDQyKSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKHZhbHVlLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLyB2YWx1ZSA9PT0gNDJcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiBhc3luYy53YXRlcmZhbGwoW1xuICAgICAqICAgICBhc3luYy5jb25zdGFudChmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICAgICAqICAgICBmcy5yZWFkRmlsZSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKGZpbGVEYXRhLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLy4uLlxuICAgICAqICAgICB9XG4gICAgICogICAgIC8vLi4uXG4gICAgICogXSwgY2FsbGJhY2spO1xuICAgICAqXG4gICAgICogYXN5bmMuYXV0byh7XG4gICAgICogICAgIGhvc3RuYW1lOiBhc3luYy5jb25zdGFudChcImh0dHBzOi8vc2VydmVyLm5ldC9cIiksXG4gICAgICogICAgIHBvcnQ6IGZpbmRGcmVlUG9ydCxcbiAgICAgKiAgICAgbGF1bmNoU2VydmVyOiBbXCJob3N0bmFtZVwiLCBcInBvcnRcIiwgZnVuY3Rpb24gKG9wdGlvbnMsIGNiKSB7XG4gICAgICogICAgICAgICBzdGFydFNlcnZlcihvcHRpb25zLCBjYik7XG4gICAgICogICAgIH1dLFxuICAgICAqICAgICAvLy4uLlxuICAgICAqIH0sIGNhbGxiYWNrKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25zdGFudCQxKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5pZ25vcmVkQXJncy8qLCBjYWxsYmFjayovKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBpZ25vcmVkQXJncy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCAuLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY3JlYXRlVGVzdGVyKGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIChlYWNoZm4sIGFyciwgX2l0ZXJhdGVlLCBjYikgPT4ge1xuICAgICAgICAgICAgdmFyIHRlc3RQYXNzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciB0ZXN0UmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgaXRlcmF0ZWUgPSB3cmFwQXN5bmMoX2l0ZXJhdGVlKTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsICh2YWx1ZSwgXywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgICBpdGVyYXRlZSh2YWx1ZSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgZXJyID09PSBmYWxzZSkgcmV0dXJuIGNhbGxiYWNrKGVycik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrKHJlc3VsdCkgJiYgIXRlc3RSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdCA9IGdldFJlc3VsdCh0cnVlLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgYnJlYWtMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgICAgICBjYihudWxsLCB0ZXN0UGFzc2VkID8gdGVzdFJlc3VsdCA6IGdldFJlc3VsdChmYWxzZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgdmFsdWUgaW4gYGNvbGxgIHRoYXQgcGFzc2VzIGFuIGFzeW5jIHRydXRoIHRlc3QuIFRoZVxuICAgICAqIGBpdGVyYXRlZWAgaXMgYXBwbGllZCBpbiBwYXJhbGxlbCwgbWVhbmluZyB0aGUgZmlyc3QgaXRlcmF0ZWUgdG8gcmV0dXJuXG4gICAgICogYHRydWVgIHdpbGwgZmlyZSB0aGUgZGV0ZWN0IGBjYWxsYmFja2Agd2l0aCB0aGF0IHJlc3VsdC4gVGhhdCBtZWFucyB0aGVcbiAgICAgKiByZXN1bHQgbWlnaHQgbm90IGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBvcmlnaW5hbCBgY29sbGAgKGluIHRlcm1zIG9mIG9yZGVyKVxuICAgICAqIHRoYXQgcGFzc2VzIHRoZSB0ZXN0LlxuXG4gICAgICogSWYgb3JkZXIgd2l0aGluIHRoZSBvcmlnaW5hbCBgY29sbGAgaXMgaW1wb3J0YW50LCB0aGVuIGxvb2sgYXRcbiAgICAgKiBbYGRldGVjdFNlcmllc2Bde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3RTZXJpZXN9LlxuICAgICAqXG4gICAgICogQG5hbWUgZGV0ZWN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGZpbmRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbnNcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSB0aGF0IHBhc3NlcyB0aGUgdHJ1dGggdGVzdFxuICAgICAqIChpdGVyYXRlZSkgb3IgdGhlIHZhbHVlIGB1bmRlZmluZWRgIGlmIG5vbmUgcGFzc2VkLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYSBmaWxlIGV4aXN0c1xuICAgICAqIGZ1bmN0aW9uIGZpbGVFeGlzdHMoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICBmcy5hY2Nlc3MoZmlsZSwgZnMuY29uc3RhbnRzLkZfT0ssIChlcnIpID0+IHtcbiAgICAgKiAgICAgICAgY2FsbGJhY2sobnVsbCwgIWVycik7XG4gICAgICogICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMuZGV0ZWN0KFsnZmlsZTMudHh0JywnZmlsZTIudHh0JywnZGlyMS9maWxlMS50eHQnXSwgZmlsZUV4aXN0cyxcbiAgICAgKiAgICBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAvLyBkaXIxL2ZpbGUxLnR4dFxuICAgICAqICAgICAgICAvLyByZXN1bHQgbm93IGVxdWFscyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgbGlzdCB0aGF0IGV4aXN0c1xuICAgICAqICAgIH1cbiAgICAgKik7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmRldGVjdChbJ2ZpbGUzLnR4dCcsJ2ZpbGUyLnR4dCcsJ2RpcjEvZmlsZTEudHh0J10sIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gZGlyMS9maWxlMS50eHRcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIGxpc3QgdGhhdCBleGlzdHNcbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZGV0ZWN0KFsnZmlsZTMudHh0JywnZmlsZTIudHh0JywnZGlyMS9maWxlMS50eHQnXSwgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gZGlyMS9maWxlMS50eHRcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBub3cgZXF1YWxzIHRoZSBmaWxlIGluIHRoZSBsaXN0IHRoYXQgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRldGVjdChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiBib29sLCAocmVzLCBpdGVtKSA9PiBpdGVtKShlYWNoT2YkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZGV0ZWN0JDEgPSBhd2FpdGlmeShkZXRlY3QsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BkZXRlY3RgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZGV0ZWN0fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZGV0ZWN0TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5kZXRlY3Rde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3R9XG4gICAgICogQGFsaWFzIGZpbmRMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uc1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSB0aGF0IHBhc3NlcyB0aGUgdHJ1dGggdGVzdFxuICAgICAqIChpdGVyYXRlZSkgb3IgdGhlIHZhbHVlIGB1bmRlZmluZWRgIGlmIG5vbmUgcGFzc2VkLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRldGVjdExpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiBib29sLCAocmVzLCBpdGVtKSA9PiBpdGVtKShlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZGV0ZWN0TGltaXQkMSA9IGF3YWl0aWZ5KGRldGVjdExpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZGV0ZWN0YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmRldGVjdH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZGV0ZWN0U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZGV0ZWN0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZGV0ZWN0fVxuICAgICAqIEBhbGlhcyBmaW5kU2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25zXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC5cbiAgICAgKiBSZXN1bHQgd2lsbCBiZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkgdGhhdCBwYXNzZXMgdGhlIHRydXRoIHRlc3RcbiAgICAgKiAoaXRlcmF0ZWUpIG9yIHRoZSB2YWx1ZSBgdW5kZWZpbmVkYCBpZiBub25lIHBhc3NlZC4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZXRlY3RTZXJpZXMoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKGJvb2wgPT4gYm9vbCwgKHJlcywgaXRlbSkgPT4gaXRlbSkoZWFjaE9mTGltaXQkMigxKSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIHZhciBkZXRlY3RTZXJpZXMkMSA9IGF3YWl0aWZ5KGRldGVjdFNlcmllcywgMyk7XG5cbiAgICBmdW5jdGlvbiBjb25zb2xlRnVuYyhuYW1lKSB7XG4gICAgICAgIHJldHVybiAoZm4sIC4uLmFyZ3MpID0+IHdyYXBBc3luYyhmbikoLi4uYXJncywgKGVyciwgLi4ucmVzdWx0QXJncykgPT4ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uc29sZVtuYW1lXSkgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRBcmdzLmZvckVhY2goeCA9PiBjb25zb2xlW25hbWVdKHgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9ncyB0aGUgcmVzdWx0IG9mIGFuIFtgYXN5bmNgIGZ1bmN0aW9uXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byB0aGVcbiAgICAgKiBgY29uc29sZWAgdXNpbmcgYGNvbnNvbGUuZGlyYCB0byBkaXNwbGF5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSByZXN1bHRpbmcgb2JqZWN0LlxuICAgICAqIE9ubHkgd29ya3MgaW4gTm9kZS5qcyBvciBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgYGNvbnNvbGUuZGlyYCBhbmRcbiAgICAgKiBgY29uc29sZS5lcnJvcmAgKHN1Y2ggYXMgRkYgYW5kIENocm9tZSkuXG4gICAgICogSWYgbXVsdGlwbGUgYXJndW1lbnRzIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBhc3luYyBmdW5jdGlvbixcbiAgICAgKiBgY29uc29sZS5kaXJgIGlzIGNhbGxlZCBvbiBlYWNoIGFyZ3VtZW50IGluIG9yZGVyLlxuICAgICAqXG4gICAgICogQG5hbWUgZGlyXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZ1bmN0aW9uIC0gVGhlIGZ1bmN0aW9uIHlvdSB3YW50IHRvIGV2ZW50dWFsbHkgYXBwbHlcbiAgICAgKiBhbGwgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJndW1lbnRzLi4uIC0gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gYXBwbHkgdG8gdGhlIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBpbiBhIG1vZHVsZVxuICAgICAqIHZhciBoZWxsbyA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7aGVsbG86IG5hbWV9KTtcbiAgICAgKiAgICAgfSwgMTAwMCk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGluIHRoZSBub2RlIHJlcGxcbiAgICAgKiBub2RlPiBhc3luYy5kaXIoaGVsbG8sICd3b3JsZCcpO1xuICAgICAqIHtoZWxsbzogJ3dvcmxkJ31cbiAgICAgKi9cbiAgICB2YXIgZGlyID0gY29uc29sZUZ1bmMoJ2RpcicpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc3QtY2hlY2sgdmVyc2lvbiBvZiBbYHdoaWxzdGBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy53aGlsc3R9LiBUbyByZWZsZWN0IHRoZSBkaWZmZXJlbmNlIGluXG4gICAgICogdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIHRoZSBhcmd1bWVudHMgYHRlc3RgIGFuZCBgaXRlcmF0ZWVgIGFyZSBzd2l0Y2hlZC5cbiAgICAgKlxuICAgICAqIGBkb1doaWxzdGAgaXMgdG8gYHdoaWxzdGAgYXMgYGRvIHdoaWxlYCBpcyB0byBgd2hpbGVgIGluIHBsYWluIEphdmFTY3JpcHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkb1doaWxzdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLndoaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZSBgdGVzdGBcbiAgICAgKiBwYXNzZXMuIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gdGVzdCAtIGFzeW5jaHJvbm91cyB0cnV0aCB0ZXN0IHRvIHBlcmZvcm0gYWZ0ZXIgZWFjaFxuICAgICAqIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgLiBJbnZva2VkIHdpdGggKC4uLmFyZ3MsIGNhbGxiYWNrKSwgd2hlcmUgYC4uLmFyZ3NgIGFyZSB0aGVcbiAgICAgKiBub24tZXJyb3IgYXJncyBmcm9tIHRoZSBwcmV2aW91cyBjYWxsYmFjayBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgdGVzdFxuICAgICAqIGZ1bmN0aW9uIGhhcyBmYWlsZWQgYW5kIHJlcGVhdGVkIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgIGhhcyBzdG9wcGVkLlxuICAgICAqIGBjYWxsYmFja2Agd2lsbCBiZSBwYXNzZWQgYW4gZXJyb3IgYW5kIGFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbFxuICAgICAqIGBpdGVyYXRlZWAncyBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSk7XG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9XaGlsc3QoaXRlcmF0ZWUsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25seU9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgdmFyIF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICB2YXIgcmVzdWx0cztcblxuICAgICAgICBmdW5jdGlvbiBuZXh0KGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgcmVzdWx0cyA9IGFyZ3M7XG4gICAgICAgICAgICBfdGVzdCguLi5hcmdzLCBjaGVjayk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVjayhlcnIsIHRydXRoKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRydXRoKSByZXR1cm4gY2FsbGJhY2sobnVsbCwgLi4ucmVzdWx0cyk7XG4gICAgICAgICAgICBfZm4obmV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hlY2sobnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdmFyIGRvV2hpbHN0JDEgPSBhd2FpdGlmeShkb1doaWxzdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBMaWtlIFsnZG9XaGlsc3QnXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuZG9XaGlsc3R9LCBleGNlcHQgdGhlIGB0ZXN0YCBpcyBpbnZlcnRlZC4gTm90ZSB0aGVcbiAgICAgKiBhcmd1bWVudCBvcmRlcmluZyBkaWZmZXJzIGZyb20gYHVudGlsYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGRvVW50aWxcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5kb1doaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmRvV2hpbHN0fVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZVxuICAgICAqIGB0ZXN0YCBmYWlscy4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBhZnRlciBlYWNoXG4gICAgICogZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAuIEludm9rZWQgd2l0aCAoLi4uYXJncywgY2FsbGJhY2spLCB3aGVyZSBgLi4uYXJnc2AgYXJlIHRoZVxuICAgICAqIG5vbi1lcnJvciBhcmdzIGZyb20gdGhlIHByZXZpb3VzIGNhbGxiYWNrIG9mIGBpdGVyYXRlZWBcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHRlc3RcbiAgICAgKiBmdW5jdGlvbiBoYXMgcGFzc2VkIGFuZCByZXBlYXRlZCBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYCBoYXMgc3RvcHBlZC4gYGNhbGxiYWNrYFxuICAgICAqIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzXG4gICAgICogY2FsbGJhY2suIEludm9rZWQgd2l0aCAoZXJyLCBbcmVzdWx0c10pO1xuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvVW50aWwoaXRlcmF0ZWUsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICByZXR1cm4gZG9XaGlsc3QkMShpdGVyYXRlZSwgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIF90ZXN0KC4uLmFyZ3MsIChlcnIsIHRydXRoKSA9PiBjYiAoZXJyLCAhdHJ1dGgpKTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0ZWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSA9PiBpdGVyYXRlZSh2YWx1ZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGZ1bmN0aW9uIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIGBjb2xsYCwgaW4gcGFyYWxsZWwuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgY2FsbGVkIHdpdGggYW4gaXRlbSBmcm9tIHRoZSBsaXN0LCBhbmQgYSBjYWxsYmFjayBmb3Igd2hlblxuICAgICAqIGl0IGhhcyBmaW5pc2hlZC4gSWYgdGhlIGBpdGVyYXRlZWAgcGFzc2VzIGFuIGVycm9yIHRvIGl0cyBgY2FsbGJhY2tgLCB0aGVcbiAgICAgKiBtYWluIGBjYWxsYmFja2AgKGZvciB0aGUgYGVhY2hgIGZ1bmN0aW9uKSBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGVcbiAgICAgKiBlcnJvci5cbiAgICAgKlxuICAgICAqIE5vdGUsIHRoYXQgc2luY2UgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIHBhcmFsbGVsLFxuICAgICAqIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBpdGVyYXRlZSBmdW5jdGlvbnMgd2lsbCBjb21wbGV0ZSBpbiBvcmRlci5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVhY2hcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgZm9yRWFjaFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvXG4gICAgICogZWFjaCBpdGVtIGluIGBjb2xsYC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogVGhlIGFycmF5IGluZGV4IGlzIG5vdCBwYXNzZWQgdG8gdGhlIGl0ZXJhdGVlLlxuICAgICAqIElmIHlvdSBuZWVkIHRoZSBpbmRleCwgdXNlIGBlYWNoT2ZgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbICdkaXIxL2ZpbGUyLnR4dCcsICdkaXIyL2ZpbGUzLnR4dCcsICdkaXIvZmlsZTUudHh0J107XG4gICAgICogY29uc3Qgd2l0aE1pc3NpbmdGaWxlTGlzdCA9IFsnZGlyMS9maWxlMS50eHQnLCAnZGlyNC9maWxlMi50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGRlbGV0ZXMgYSBmaWxlXG4gICAgICogY29uc3QgZGVsZXRlRmlsZSA9IGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnVubGluayhmaWxlLCBjYWxsYmFjayk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmVhY2goZmlsZUxpc3QsIGRlbGV0ZUZpbGUsIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBpZiggZXJyICkge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKCdBbGwgZmlsZXMgaGF2ZSBiZWVuIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMuZWFjaCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBkZWxldGVGaWxlLCBmdW5jdGlvbihlcnIpe1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAvLyBzaW5jZSBkaXI0L2ZpbGUyLnR4dCBkb2VzIG5vdCBleGlzdFxuICAgICAqICAgICAvLyBkaXIxL2ZpbGUxLnR4dCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5lYWNoKGZpbGVMaXN0LCBkZWxldGVGaWxlKVxuICAgICAqIC50aGVuKCAoKSA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdBbGwgZmlsZXMgaGF2ZSBiZWVuIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLmVhY2goZmlsZUxpc3QsIGRlbGV0ZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ0FsbCBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgLy8gc2luY2UgZGlyNC9maWxlMi50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICAgLy8gZGlyMS9maWxlMS50eHQgY291bGQgaGF2ZSBiZWVuIGRlbGV0ZWRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgYXdhaXQgYXN5bmMuZWFjaChmaWxlcywgZGVsZXRlRmlsZSk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgYXdhaXQgYXN5bmMuZWFjaCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBkZWxldGVGaWxlKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgICAgIC8vIHNpbmNlIGRpcjQvZmlsZTIudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICogICAgICAgICAvLyBkaXIxL2ZpbGUxLnR4dCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZWFjaExpbWl0JDIoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2YkMShjb2xsLCBfd2l0aG91dEluZGV4KHdyYXBBc3luYyhpdGVyYXRlZSkpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2ggPSBhd2FpdGlmeShlYWNoTGltaXQkMiwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGVhY2hgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAgICAgKiBAYWxpYXMgZm9yRWFjaExpbWl0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgYXJyYXkgaW5kZXggaXMgbm90IHBhc3NlZCB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZkxpbWl0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoTGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZWFjaE9mTGltaXQkMihsaW1pdCkoY29sbCwgX3dpdGhvdXRJbmRleCh3cmFwQXN5bmMoaXRlcmF0ZWUpKSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICB2YXIgZWFjaExpbWl0JDEgPSBhd2FpdGlmeShlYWNoTGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIE5vdGUsIHRoYXQgdW5saWtlIFtgZWFjaGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofSwgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIGl0ZXJhdGVlIHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHNlcmllcyBhbmQgdGhlcmVmb3JlIHRoZSBpdGVyYXRlZSBmdW5jdGlvbnMgd2lsbCBjb21wbGV0ZSBpbiBvcmRlci5cblxuICAgICAqIEBuYW1lIGVhY2hTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAgICAgKiBAYWxpYXMgZm9yRWFjaFNlcmllc1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2hcbiAgICAgKiBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgYXJyYXkgaW5kZXggaXMgbm90IHBhc3NlZCB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZlNlcmllc2AuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBJbnZva2VkIHdpdGggKGVycikuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZWFjaFNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hMaW1pdCQxKGNvbGwsIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGVhY2hTZXJpZXMkMSA9IGF3YWl0aWZ5KGVhY2hTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogV3JhcCBhbiBhc3luYyBmdW5jdGlvbiBhbmQgZW5zdXJlIGl0IGNhbGxzIGl0cyBjYWxsYmFjayBvbiBhIGxhdGVyIHRpY2sgb2ZcbiAgICAgKiB0aGUgZXZlbnQgbG9vcC4gIElmIHRoZSBmdW5jdGlvbiBhbHJlYWR5IGNhbGxzIGl0cyBjYWxsYmFjayBvbiBhIG5leHQgdGljayxcbiAgICAgKiBubyBleHRyYSBkZWZlcnJhbCBpcyBhZGRlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIHByZXZlbnRpbmcgc3RhY2sgb3ZlcmZsb3dzXG4gICAgICogKGBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZGApIGFuZCBnZW5lcmFsbHkga2VlcGluZ1xuICAgICAqIFtaYWxnb10oaHR0cDovL2Jsb2cuaXpzLm1lL3Bvc3QvNTkxNDI3NDIxNDMvZGVzaWduaW5nLWFwaXMtZm9yLWFzeW5jaHJvbnkpXG4gICAgICogY29udGFpbmVkLiBFUzIwMTcgYGFzeW5jYCBmdW5jdGlvbnMgYXJlIHJldHVybmVkIGFzLWlzIC0tIHRoZXkgYXJlIGltbXVuZVxuICAgICAqIHRvIFphbGdvJ3MgY29ycnVwdGluZyBpbmZsdWVuY2VzLCBhcyB0aGV5IGFsd2F5cyByZXNvbHZlIG9uIGEgbGF0ZXIgdGljay5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVuc3VyZUFzeW5jXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZuIC0gYW4gYXN5bmMgZnVuY3Rpb24sIG9uZSB0aGF0IGV4cGVjdHMgYSBub2RlLXN0eWxlXG4gICAgICogY2FsbGJhY2sgYXMgaXRzIGxhc3QgYXJndW1lbnQuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IFJldHVybnMgYSB3cmFwcGVkIGZ1bmN0aW9uIHdpdGggdGhlIGV4YWN0IHNhbWUgY2FsbFxuICAgICAqIHNpZ25hdHVyZSBhcyB0aGUgZnVuY3Rpb24gcGFzc2VkIGluLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzb21ldGltZXNBc3luYyhhcmcsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGlmIChjYWNoZVthcmddKSB7XG4gICAgICogICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgY2FjaGVbYXJnXSk7IC8vIHRoaXMgd291bGQgYmUgc3luY2hyb25vdXMhIVxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgZG9Tb21lSU8oYXJnLCBjYWxsYmFjayk7IC8vIHRoaXMgSU8gd291bGQgYmUgYXN5bmNocm9ub3VzXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyB0aGlzIGhhcyBhIHJpc2sgb2Ygc3RhY2sgb3ZlcmZsb3dzIGlmIG1hbnkgcmVzdWx0cyBhcmUgY2FjaGVkIGluIGEgcm93XG4gICAgICogYXN5bmMubWFwU2VyaWVzKGFyZ3MsIHNvbWV0aW1lc0FzeW5jLCBkb25lKTtcbiAgICAgKlxuICAgICAqIC8vIHRoaXMgd2lsbCBkZWZlciBzb21ldGltZXNBc3luYydzIGNhbGxiYWNrIGlmIG5lY2Vzc2FyeSxcbiAgICAgKiAvLyBwcmV2ZW50aW5nIHN0YWNrIG92ZXJmbG93c1xuICAgICAqIGFzeW5jLm1hcFNlcmllcyhhcmdzLCBhc3luYy5lbnN1cmVBc3luYyhzb21ldGltZXNBc3luYyksIGRvbmUpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIGlmIChpc0FzeW5jKGZuKSkgcmV0dXJuIGZuO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MvKiwgY2FsbGJhY2sqLykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgoLi4uaW5uZXJBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoKCkgPT4gY2FsbGJhY2soLi4uaW5uZXJBcmdzKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soLi4uaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGV2ZXJ5IGVsZW1lbnQgaW4gYGNvbGxgIHNhdGlzZmllcyBhbiBhc3luYyB0ZXN0LiBJZiBhbnlcbiAgICAgKiBpdGVyYXRlZSBjYWxsIHJldHVybnMgYGZhbHNlYCwgdGhlIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBldmVyeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBhbGxcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9uIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luYyB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydkaXIxL2ZpbGUxLnR4dCcsJ2RpcjIvZmlsZTMudHh0JywnZGlyMy9maWxlNS50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlNC50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5ldmVyeShmaWxlTGlzdCwgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXN5bmMuZXZlcnkod2l0aE1pc3NpbmdGaWxlTGlzdCwgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIE5PVCBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5ldmVyeShmaWxlTGlzdCwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXN5bmMuZXZlcnkod2l0aE1pc3NpbmdGaWxlTGlzdCwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIE5PVCBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZXZlcnkoZmlsZUxpc3QsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHRydWVcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5ldmVyeSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyBmYWxzZVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIE5PVCBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeShjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiAhYm9vbCwgcmVzID0+ICFyZXMpKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBldmVyeSQxID0gYXdhaXRpZnkoZXZlcnksIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BldmVyeWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ldmVyeX0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBldmVyeUxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZXZlcnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ldmVyeX1cbiAgICAgKiBAYWxpYXMgYWxsTGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW1cbiAgICAgKiBpbiB0aGUgY29sbGVjdGlvbiBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgbXVzdCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiByZXN1bHQgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBSZXN1bHQgd2lsbCBiZSBlaXRoZXIgYHRydWVgIG9yIGBmYWxzZWBcbiAgICAgKiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGUgYXN5bmMgdGVzdHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXZlcnlMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKGJvb2wgPT4gIWJvb2wsIHJlcyA9PiAhcmVzKShlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZXZlcnlMaW1pdCQxID0gYXdhaXRpZnkoZXZlcnlMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGV2ZXJ5YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmV2ZXJ5fSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBldmVyeVNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmV2ZXJ5XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZXZlcnl9XG4gICAgICogQGFsaWFzIGFsbFNlcmllc1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb24gaW4gc2VyaWVzLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luYyB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeVNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiAhYm9vbCwgcmVzID0+ICFyZXMpKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBldmVyeVNlcmllcyQxID0gYXdhaXRpZnkoZXZlcnlTZXJpZXMsIDMpO1xuXG4gICAgZnVuY3Rpb24gZmlsdGVyQXJyYXkoZWFjaGZuLCBhcnIsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgdHJ1dGhWYWx1ZXMgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gICAgICAgIGVhY2hmbihhcnIsICh4LCBpbmRleCwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBpdGVyYXRlZSh4LCAoZXJyLCB2KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ1dGhWYWx1ZXNbaW5kZXhdID0gISF2O1xuICAgICAgICAgICAgICAgIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0cnV0aFZhbHVlc1tpXSkgcmVzdWx0cy5wdXNoKGFycltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsdGVyR2VuZXJpYyhlYWNoZm4sIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBlYWNoZm4oY29sbCwgKHgsIGluZGV4LCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKHgsIChlcnIsIHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaXRlckNiKGVycik7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0c1xuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleClcbiAgICAgICAgICAgICAgICAubWFwKHYgPT4gdi52YWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmaWx0ZXIgPSBpc0FycmF5TGlrZShjb2xsKSA/IGZpbHRlckFycmF5IDogZmlsdGVyR2VuZXJpYztcbiAgICAgICAgcmV0dXJuIGZpbHRlcihlYWNoZm4sIGNvbGwsIHdyYXBBc3luYyhpdGVyYXRlZSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIGFsbCB0aGUgdmFsdWVzIGluIGBjb2xsYCB3aGljaCBwYXNzIGFuIGFzeW5jIHRydXRoXG4gICAgICogdGVzdC4gVGhpcyBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGluIHBhcmFsbGVsLCBidXQgdGhlIHJlc3VsdHMgYXJyYXkgd2lsbCBiZVxuICAgICAqIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBvcmlnaW5hbC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZpbHRlclxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBzZWxlY3RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgdHJ1dGhWYWx1ZSlgLCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqIHdpdGggYSBib29sZWFuIGFyZ3VtZW50IG9uY2UgaXQgaGFzIGNvbXBsZXRlZC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZXMgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMi9maWxlMy50eHQnLCdkaXIzL2ZpbGU2LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmZpbHRlcihmaWxlcywgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgaWYoZXJyKSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgIC8vIFsgJ2RpcjEvZmlsZTEudHh0JywgJ2RpcjIvZmlsZTMudHh0JyBdXG4gICAgICogICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBleGlzdGluZyBmaWxlc1xuICAgICAqICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZmlsdGVyKGZpbGVzLCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gWyAnZGlyMS9maWxlMS50eHQnLCAnZGlyMi9maWxlMy50eHQnIF1cbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBub3cgYW4gYXJyYXkgb2YgdGhlIGV4aXN0aW5nIGZpbGVzXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5maWx0ZXIoZmlsZXMsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyBbICdkaXIxL2ZpbGUxLnR4dCcsICdkaXIyL2ZpbGUzLnR4dCcgXVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgYW4gYXJyYXkgb2YgdGhlIGV4aXN0aW5nIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbHRlciAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfZmlsdGVyKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBmaWx0ZXIkMSA9IGF3YWl0aWZ5KGZpbHRlciwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGZpbHRlcmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5maWx0ZXJ9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBmaWx0ZXJMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmZpbHRlcl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn1cbiAgICAgKiBAYWxpYXMgc2VsZWN0TGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIGlzIHBhc3NlZCBhIGBjYWxsYmFjayhlcnIsIHRydXRoVmFsdWUpYCwgd2hpY2ggbXVzdCBiZSBjYWxsZWRcbiAgICAgKiB3aXRoIGEgYm9vbGVhbiBhcmd1bWVudCBvbmNlIGl0IGhhcyBjb21wbGV0ZWQuIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyTGltaXQgKGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9maWx0ZXIoZWFjaE9mTGltaXQkMihsaW1pdCksIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGZpbHRlckxpbWl0JDEgPSBhd2FpdGlmeShmaWx0ZXJMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGZpbHRlcmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5maWx0ZXJ9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZpbHRlclNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmZpbHRlcl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn1cbiAgICAgKiBAYWxpYXMgc2VsZWN0U2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIGlzIHBhc3NlZCBhIGBjYWxsYmFjayhlcnIsIHRydXRoVmFsdWUpYCwgd2hpY2ggbXVzdCBiZSBjYWxsZWRcbiAgICAgKiB3aXRoIGEgYm9vbGVhbiBhcmd1bWVudCBvbmNlIGl0IGhhcyBjb21wbGV0ZWQuIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWx0ZXJTZXJpZXMgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2ZpbHRlcihlYWNoT2ZTZXJpZXMkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZmlsdGVyU2VyaWVzJDEgPSBhd2FpdGlmeShmaWx0ZXJTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBgZm5gIHdpdGggYSBjYWxsYmFjayBwYXJhbWV0ZXIgdGhhdCBhbGxvd3MgaXRcbiAgICAgKiB0byBjYWxsIGl0c2VsZiBhZ2FpbiwgaW4gc2VyaWVzLCBpbmRlZmluaXRlbHkuXG5cbiAgICAgKiBJZiBhbiBlcnJvciBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHRoZW4gYGVycmJhY2tgIGlzIGNhbGxlZCB3aXRoIHRoZVxuICAgICAqIGVycm9yLCBhbmQgZXhlY3V0aW9uIHN0b3BzLCBvdGhlcndpc2UgaXQgd2lsbCBuZXZlciBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBmb3JldmVyXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSBhbiBhc3luYyBmdW5jdGlvbiB0byBjYWxsIHJlcGVhdGVkbHkuXG4gICAgICogSW52b2tlZCB3aXRoIChuZXh0KS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZXJyYmFja10gLSB3aGVuIGBmbmAgcGFzc2VzIGFuIGVycm9yIHRvIGl0J3MgY2FsbGJhY2ssXG4gICAgICogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCwgYW5kIGV4ZWN1dGlvbiBzdG9wcy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCByZWplY3RzIGlmIGFuIGVycm9yIG9jY3VycyBhbmQgYW4gZXJyYmFja1xuICAgICAqIGlzIG5vdCBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMuZm9yZXZlcihcbiAgICAgKiAgICAgZnVuY3Rpb24obmV4dCkge1xuICAgICAqICAgICAgICAgLy8gbmV4dCBpcyBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byB0aGluZ3MgdGhhdCBuZWVkIGEgY2FsbGJhY2soZXJyIFssIHdoYXRldmVyXSk7XG4gICAgICogICAgICAgICAvLyBpdCB3aWxsIHJlc3VsdCBpbiB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBhZ2Fpbi5cbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgICAgICAvLyBpZiBuZXh0IGlzIGNhbGxlZCB3aXRoIGEgdmFsdWUgaW4gaXRzIGZpcnN0IHBhcmFtZXRlciwgaXQgd2lsbCBhcHBlYXJcbiAgICAgKiAgICAgICAgIC8vIGluIGhlcmUgYXMgJ2VycicsIGFuZCBleGVjdXRpb24gd2lsbCBzdG9wLlxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JldmVyKGZuLCBlcnJiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seU9uY2UoZXJyYmFjayk7XG4gICAgICAgIHZhciB0YXNrID0gd3JhcEFzeW5jKGVuc3VyZUFzeW5jKGZuKSk7XG5cbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBkb25lKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgIH1cbiAgICB2YXIgZm9yZXZlciQxID0gYXdhaXRpZnkoZm9yZXZlciwgMik7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGdyb3VwQnlgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZ3JvdXBCeX0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBncm91cEJ5TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5ncm91cEJ5XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZ3JvdXBCeX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGBrZXlgIHRvIGdyb3VwIHRoZSB2YWx1ZSB1bmRlci5cbiAgICAgKiBJbnZva2VkIHdpdGggKHZhbHVlLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHQgaXMgYW4gYE9iamVjdGAgd2hvc2VzXG4gICAgICogcHJvcGVydGllcyBhcmUgYXJyYXlzIG9mIHZhbHVlcyB3aGljaCByZXR1cm5lZCB0aGUgY29ycmVzcG9uZGluZyBrZXkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3JvdXBCeUxpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXBMaW1pdCQxKGNvbGwsIGxpbWl0LCAodmFsLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWwsIChlcnIsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlckNiKGVyciwge2tleSwgdmFsfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVyciwgbWFwUmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgLy8gZnJvbSBNRE4sIGhhbmRsZSBvYmplY3QgaGF2aW5nIGFuIGBoYXNPd25Qcm9wZXJ0eWAgcHJvcFxuICAgICAgICAgICAgdmFyIHtoYXNPd25Qcm9wZXJ0eX0gPSBPYmplY3QucHJvdG90eXBlO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcFJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwUmVzdWx0c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIge2tleX0gPSBtYXBSZXN1bHRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB2YXIge3ZhbH0gPSBtYXBSZXN1bHRzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBbdmFsXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIGdyb3VwQnlMaW1pdCQxID0gYXdhaXRpZnkoZ3JvdXBCeUxpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgb2JqZWN0LCB3aGVyZSBlYWNoIHZhbHVlIGNvcnJlc3BvbmRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLCBmcm9tXG4gICAgICogYGNvbGxgLCB0aGF0IHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS4gVGhhdCBpcywgdGhlIGtleXMgb2YgdGhlIG9iamVjdFxuICAgICAqIGNvcnJlc3BvbmQgdG8gdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlZWAgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBOb3RlOiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIHBhcmFsbGVsLFxuICAgICAqIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlIGluIG9yZGVyLlxuICAgICAqIEhvd2V2ZXIsIHRoZSB2YWx1ZXMgZm9yIGVhY2gga2V5IGluIHRoZSBgcmVzdWx0YCB3aWxsIGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzXG4gICAgICogdGhlIG9yaWdpbmFsIGBjb2xsYC4gRm9yIE9iamVjdHMsIHRoZSB2YWx1ZXMgd2lsbCByb3VnaGx5IGJlIGluIHRoZSBvcmRlciBvZlxuICAgICAqIHRoZSBvcmlnaW5hbCBPYmplY3RzJyBrZXlzIChidXQgdGhpcyBjYW4gdmFyeSBhY3Jvc3MgSmF2YVNjcmlwdCBlbmdpbmVzKS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGdyb3VwQnlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYGtleWAgdG8gZ3JvdXAgdGhlIHZhbHVlIHVuZGVyLlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdCBpcyBhbiBgT2JqZWN0YCB3aG9zZXNcbiAgICAgKiBwcm9wZXJ0aWVzIGFyZSBhcnJheXMgb2YgdmFsdWVzIHdoaWNoIHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVzID0gWydkaXIxL2ZpbGUxLnR4dCcsJ2RpcjInLCdkaXI0J11cbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGRldGVjdHMgZmlsZSB0eXBlIGFzIG5vbmUsIGZpbGUsIG9yIGRpcmVjdG9yeVxuICAgICAqIGZ1bmN0aW9uIGRldGVjdEZpbGUoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdChmaWxlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgJ25vbmUnKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXQuaXNEaXJlY3RvcnkoKSA/ICdkaXJlY3RvcnknIDogJ2ZpbGUnKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy9Vc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5ncm91cEJ5KGZpbGVzLCBkZXRlY3RGaWxlLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICpcdCAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8ge1xuICAgICAqICAgICAgICAgLy8gICAgIGZpbGU6IFsgJ2RpcjEvZmlsZTEudHh0JyBdLFxuICAgICAqICAgICAgICAgLy8gICAgIG5vbmU6IFsgJ2RpcjQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgZGlyZWN0b3J5OiBbICdkaXIyJ11cbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgZ3JvdXBlZCBieSB0eXBlXG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZ3JvdXBCeShmaWxlcywgZGV0ZWN0RmlsZSlcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8ge1xuICAgICAqICAgICAvLyAgICAgZmlsZTogWyAnZGlyMS9maWxlMS50eHQnIF0sXG4gICAgICogICAgIC8vICAgICBub25lOiBbICdkaXI0JyBdLFxuICAgICAqICAgICAvLyAgICAgZGlyZWN0b3J5OiBbICdkaXIyJ11cbiAgICAgKiAgICAgLy8gfVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbGVzIGdyb3VwZWQgYnkgdHlwZVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZ3JvdXBCeShmaWxlcywgZGV0ZWN0RmlsZSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8ge1xuICAgICAqICAgICAgICAgLy8gICAgIGZpbGU6IFsgJ2RpcjEvZmlsZTEudHh0JyBdLFxuICAgICAqICAgICAgICAgLy8gICAgIG5vbmU6IFsgJ2RpcjQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgZGlyZWN0b3J5OiBbICdkaXIyJ11cbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgZ3JvdXBlZCBieSB0eXBlXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdyb3VwQnkgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZ3JvdXBCeUxpbWl0JDEoY29sbCwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGdyb3VwQnlgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZ3JvdXBCeX0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZ3JvdXBCeVNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmdyb3VwQnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBga2V5YCB0byBncm91cCB0aGUgdmFsdWUgdW5kZXIuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0IGlzIGFuIGBPYmplY3RgIHdob3NlXG4gICAgICogcHJvcGVydGllcyBhcmUgYXJyYXlzIG9mIHZhbHVlcyB3aGljaCByZXR1cm5lZCB0aGUgY29ycmVzcG9uZGluZyBrZXkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3JvdXBCeVNlcmllcyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBncm91cEJ5TGltaXQkMShjb2xsLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9ncyB0aGUgcmVzdWx0IG9mIGFuIGBhc3luY2AgZnVuY3Rpb24gdG8gdGhlIGBjb25zb2xlYC4gT25seSB3b3JrcyBpblxuICAgICAqIE5vZGUuanMgb3IgaW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGBjb25zb2xlLmxvZ2AgYW5kIGBjb25zb2xlLmVycm9yYCAoc3VjaFxuICAgICAqIGFzIEZGIGFuZCBDaHJvbWUpLiBJZiBtdWx0aXBsZSBhcmd1bWVudHMgYXJlIHJldHVybmVkIGZyb20gdGhlIGFzeW5jXG4gICAgICogZnVuY3Rpb24sIGBjb25zb2xlLmxvZ2AgaXMgY2FsbGVkIG9uIGVhY2ggYXJndW1lbnQgaW4gb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSBsb2dcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24geW91IHdhbnQgdG8gZXZlbnR1YWxseSBhcHBseVxuICAgICAqIGFsbCBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhcHBseSB0byB0aGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGluIGEgbW9kdWxlXG4gICAgICogdmFyIGhlbGxvID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdoZWxsbyAnICsgbmFtZSk7XG4gICAgICogICAgIH0sIDEwMDApO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiAvLyBpbiB0aGUgbm9kZSByZXBsXG4gICAgICogbm9kZT4gYXN5bmMubG9nKGhlbGxvLCAnd29ybGQnKTtcbiAgICAgKiAnaGVsbG8gd29ybGQnXG4gICAgICovXG4gICAgdmFyIGxvZyA9IGNvbnNvbGVGdW5jKCdsb2cnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgbWFwVmFsdWVzYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcFZhbHVlc30gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcFZhbHVlc0xpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwVmFsdWVzXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwVmFsdWVzfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUgYW5kIGtleVxuICAgICAqIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgcmVzdWx0YCBpcyBhIG5ldyBvYmplY3QgY29uc2lzdGluZ1xuICAgICAqIG9mIGVhY2gga2V5IGZyb20gYG9iamAsIHdpdGggZWFjaCB0cmFuc2Zvcm1lZCB2YWx1ZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlc0xpbWl0KG9iaiwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgbmV3T2JqID0ge307XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICByZXR1cm4gZWFjaE9mTGltaXQkMihsaW1pdCkob2JqLCAodmFsLCBrZXksIG5leHQpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWwsIGtleSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIG5leHQoZXJyKTtcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBuZXh0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IGNhbGxiYWNrKGVyciwgbmV3T2JqKSk7XG4gICAgfVxuXG4gICAgdmFyIG1hcFZhbHVlc0xpbWl0JDEgPSBhd2FpdGlmeShtYXBWYWx1ZXNMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBBIHJlbGF0aXZlIG9mIFtgbWFwYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0sIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBvYmplY3RzLlxuICAgICAqXG4gICAgICogUHJvZHVjZXMgYSBuZXcgT2JqZWN0IGJ5IG1hcHBpbmcgZWFjaCB2YWx1ZSBvZiBgb2JqYCB0aHJvdWdoIHRoZSBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb24uIFRoZSBgaXRlcmF0ZWVgIGlzIGNhbGxlZCBlYWNoIGB2YWx1ZWAgYW5kIGBrZXlgIGZyb20gYG9iamAgYW5kIGFcbiAgICAgKiBjYWxsYmFjayBmb3Igd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZy4gRWFjaCBvZiB0aGVzZSBjYWxsYmFja3MgdGFrZXNcbiAgICAgKiB0d28gYXJndW1lbnRzOiBhbiBgZXJyb3JgLCBhbmQgdGhlIHRyYW5zZm9ybWVkIGl0ZW0gZnJvbSBgb2JqYC4gSWYgYGl0ZXJhdGVlYFxuICAgICAqIHBhc3NlcyBhbiBlcnJvciB0byBpdHMgY2FsbGJhY2ssIHRoZSBtYWluIGBjYWxsYmFja2AgKGZvciB0aGUgYG1hcFZhbHVlc2BcbiAgICAgKiBmdW5jdGlvbikgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhlIG9yZGVyIG9mIHRoZSBrZXlzIGluIHRoZSByZXN1bHQgaXMgbm90IGd1YXJhbnRlZWQuICBUaGUga2V5cyB3aWxsXG4gICAgICogYmUgcm91Z2hseSBpbiB0aGUgb3JkZXIgdGhleSBjb21wbGV0ZSwgKGJ1dCB0aGlzIGlzIHZlcnkgZW5naW5lLXNwZWNpZmljKVxuICAgICAqXG4gICAgICogQG5hbWUgbWFwVmFsdWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIHZhbHVlIGFuZCBrZXlcbiAgICAgKiBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gYHJlc3VsdGAgaXMgYSBuZXcgb2JqZWN0IGNvbnNpc3RpbmdcbiAgICAgKiBvZiBlYWNoIGtleSBmcm9tIGBvYmpgLCB3aXRoIGVhY2ggdHJhbnNmb3JtZWQgdmFsdWUgb24gdGhlIHJpZ2h0LWhhbmQgc2lkZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZmlsZTEudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDEwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUyLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAyMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMy50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMzAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTQudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlTWFwID0ge1xuICAgICAqICAgICBmMTogJ2ZpbGUxLnR4dCcsXG4gICAgICogICAgIGYyOiAnZmlsZTIudHh0JyxcbiAgICAgKiAgICAgZjM6ICdmaWxlMy50eHQnXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIGNvbnN0IHdpdGhNaXNzaW5nRmlsZU1hcCA9IHtcbiAgICAgKiAgICAgZjE6ICdmaWxlMS50eHQnLFxuICAgICAqICAgICBmMjogJ2ZpbGUyLnR4dCcsXG4gICAgICogICAgIGYzOiAnZmlsZTQudHh0J1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXNcbiAgICAgKiBmdW5jdGlvbiBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwga2V5LCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdC5zaXplKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMubWFwVmFsdWVzKGZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgbm93IGEgbWFwIG9mIGZpbGUgc2l6ZSBpbiBieXRlcyBmb3IgZWFjaCBmaWxlLCBlLmcuXG4gICAgICogICAgICAgICAvLyB7XG4gICAgICogICAgICAgICAvLyAgICAgZjE6IDEwMDAsXG4gICAgICogICAgICAgICAvLyAgICAgZjI6IDIwMDAsXG4gICAgICogICAgICAgICAvLyAgICAgZjM6IDMwMDBcbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYy5tYXBWYWx1ZXMod2l0aE1pc3NpbmdGaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5tYXBWYWx1ZXMoZmlsZU1hcCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyByZXN1bHQgaXMgbm93IGEgbWFwIG9mIGZpbGUgc2l6ZSBpbiBieXRlcyBmb3IgZWFjaCBmaWxlLCBlLmcuXG4gICAgICogICAgIC8vIHtcbiAgICAgKiAgICAgLy8gICAgIGYxOiAxMDAwLFxuICAgICAqICAgICAvLyAgICAgZjI6IDIwMDAsXG4gICAgICogICAgIC8vICAgICBmMzogMzAwMFxuICAgICAqICAgICAvLyB9XG4gICAgICogfSkuY2F0Y2ggKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcFZhbHVlcyh3aXRoTWlzc2luZ0ZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiB9KS5jYXRjaCAoZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLm1hcFZhbHVlcyhmaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBub3cgYSBtYXAgb2YgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIHtcbiAgICAgKiAgICAgICAgIC8vICAgICBmMTogMTAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMjogMjAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMzogMzAwMFxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5tYXBWYWx1ZXMod2l0aE1pc3NpbmdGaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlcyhvYmosIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gbWFwVmFsdWVzTGltaXQkMShvYmosIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBWYWx1ZXNgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwVmFsdWVzfSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBtYXBWYWx1ZXNTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBWYWx1ZXNde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXBWYWx1ZXN9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIHZhbHVlIGFuZCBrZXlcbiAgICAgKiBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gYHJlc3VsdGAgaXMgYSBuZXcgb2JqZWN0IGNvbnNpc3RpbmdcbiAgICAgKiBvZiBlYWNoIGtleSBmcm9tIGBvYmpgLCB3aXRoIGVhY2ggdHJhbnNmb3JtZWQgdmFsdWUgb24gdGhlIHJpZ2h0LWhhbmQgc2lkZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBWYWx1ZXNTZXJpZXMob2JqLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlc0xpbWl0JDEob2JqLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FjaGVzIHRoZSByZXN1bHRzIG9mIGFuIGFzeW5jIGZ1bmN0aW9uLiBXaGVuIGNyZWF0aW5nIGEgaGFzaCB0byBzdG9yZVxuICAgICAqIGZ1bmN0aW9uIHJlc3VsdHMgYWdhaW5zdCwgdGhlIGNhbGxiYWNrIGlzIG9taXR0ZWQgZnJvbSB0aGUgaGFzaCBhbmQgYW5cbiAgICAgKiBvcHRpb25hbCBoYXNoIGZ1bmN0aW9uIGNhbiBiZSB1c2VkLlxuICAgICAqXG4gICAgICogKipOb3RlOiBpZiB0aGUgYXN5bmMgZnVuY3Rpb24gZXJycywgdGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBjYWNoZWQgYW5kXG4gICAgICogc3Vic2VxdWVudCBjYWxscyB3aWxsIGNhbGwgdGhlIHdyYXBwZWQgZnVuY3Rpb24uKipcbiAgICAgKlxuICAgICAqIElmIG5vIGhhc2ggZnVuY3Rpb24gaXMgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhhc2gga2V5LFxuICAgICAqIHdoaWNoIG1heSB3b3JrIHJlYXNvbmFibHkgaWYgaXQgaXMgYSBzdHJpbmcgb3IgYSBkYXRhIHR5cGUgdGhhdCBjb252ZXJ0cyB0byBhXG4gICAgICogZGlzdGluY3Qgc3RyaW5nLiBOb3RlIHRoYXQgb2JqZWN0cyBhbmQgYXJyYXlzIHdpbGwgbm90IGJlaGF2ZSByZWFzb25hYmx5LlxuICAgICAqIE5laXRoZXIgd2lsbCBjYXNlcyB3aGVyZSB0aGUgb3RoZXIgYXJndW1lbnRzIGFyZSBzaWduaWZpY2FudC4gSW4gc3VjaCBjYXNlcyxcbiAgICAgKiBzcGVjaWZ5IHlvdXIgb3duIGhhc2ggZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGUgY2FjaGUgb2YgcmVzdWx0cyBpcyBleHBvc2VkIGFzIHRoZSBgbWVtb2AgcHJvcGVydHkgb2YgdGhlIGZ1bmN0aW9uXG4gICAgICogcmV0dXJuZWQgYnkgYG1lbW9pemVgLlxuICAgICAqXG4gICAgICogQG5hbWUgbWVtb2l6ZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmbiAtIFRoZSBhc3luYyBmdW5jdGlvbiB0byBwcm94eSBhbmQgY2FjaGUgcmVzdWx0cyBmcm9tLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc2hlciAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIGEgY3VzdG9tIGhhc2hcbiAgICAgKiBmb3Igc3RvcmluZyByZXN1bHRzLiBJdCBoYXMgYWxsIHRoZSBhcmd1bWVudHMgYXBwbGllZCB0byBpdCBhcGFydCBmcm9tIHRoZVxuICAgICAqIGNhbGxiYWNrLCBhbmQgbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gYSBtZW1vaXplZCB2ZXJzaW9uIG9mIGBmbmBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNsb3dfZm4gPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmdcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgKiB9O1xuICAgICAqIHZhciBmbiA9IGFzeW5jLm1lbW9pemUoc2xvd19mbik7XG4gICAgICpcbiAgICAgKiAvLyBmbiBjYW4gbm93IGJlIHVzZWQgYXMgaWYgaXQgd2VyZSBzbG93X2ZuXG4gICAgICogZm4oJ3NvbWUgbmFtZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAvLyBjYWxsYmFja1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemUoZm4sIGhhc2hlciA9IHYgPT4gdikge1xuICAgICAgICB2YXIgbWVtbyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHZhciBxdWV1ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGZuKTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gaW5pdGlhbFBhcmFtcygoYXJncywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIoLi4uYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMSgoKSA9PiBjYWxsYmFjayhudWxsLCAuLi5tZW1vW2tleV0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgX2ZuKC4uLmFyZ3MsIChlcnIsIC4uLnJlc3VsdEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gIzE0NjUgZG9uJ3QgbWVtb2l6ZSBpZiBhbiBlcnJvciBvY2N1cnJlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gcmVzdWx0QXJncztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0oZXJyLCAuLi5yZXN1bHRBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5cbiAgICAvKipcbiAgICAgKiBDYWxscyBgY2FsbGJhY2tgIG9uIGEgbGF0ZXIgbG9vcCBhcm91bmQgdGhlIGV2ZW50IGxvb3AuIEluIE5vZGUuanMgdGhpcyBqdXN0XG4gICAgICogY2FsbHMgYHByb2Nlc3MubmV4dFRpY2tgLiAgSW4gdGhlIGJyb3dzZXIgaXQgd2lsbCB1c2UgYHNldEltbWVkaWF0ZWAgaWZcbiAgICAgKiBhdmFpbGFibGUsIG90aGVyd2lzZSBgc2V0VGltZW91dChjYWxsYmFjaywgMClgLCB3aGljaCBtZWFucyBvdGhlciBoaWdoZXJcbiAgICAgKiBwcmlvcml0eSBldmVudHMgbWF5IHByZWNlZGUgdGhlIGV4ZWN1dGlvbiBvZiBgY2FsbGJhY2tgLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJyb3dzZXItY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy5cbiAgICAgKlxuICAgICAqIEBuYW1lIG5leHRUaWNrXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuc2V0SW1tZWRpYXRlXXtAbGluayBtb2R1bGU6VXRpbHMuc2V0SW1tZWRpYXRlfVxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBhIGxhdGVyIGxvb3AgYXJvdW5kXG4gICAgICogdGhlIGV2ZW50IGxvb3AuIEludm9rZWQgd2l0aCAoYXJncy4uLikuXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmdzLi4uIC0gYW55IG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZVxuICAgICAqIGNhbGxiYWNrIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBjYWxsX29yZGVyID0gW107XG4gICAgICogYXN5bmMubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICogICAgIGNhbGxfb3JkZXIucHVzaCgndHdvJyk7XG4gICAgICogICAgIC8vIGNhbGxfb3JkZXIgbm93IGVxdWFscyBbJ29uZScsJ3R3byddXG4gICAgICogfSk7XG4gICAgICogY2FsbF9vcmRlci5wdXNoKCdvbmUnKTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAqICAgICAvLyBhLCBiLCBhbmQgYyBlcXVhbCAxLCAyLCBhbmQgM1xuICAgICAqIH0sIDEsIDIsIDMpO1xuICAgICAqL1xuICAgIHZhciBfZGVmZXI7XG5cbiAgICBpZiAoaGFzTmV4dFRpY2spIHtcbiAgICAgICAgX2RlZmVyID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2UgaWYgKGhhc1NldEltbWVkaWF0ZSkge1xuICAgICAgICBfZGVmZXIgPSBzZXRJbW1lZGlhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2RlZmVyID0gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgdmFyIG5leHRUaWNrID0gd3JhcChfZGVmZXIpO1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGF3YWl0aWZ5KChlYWNoZm4sIHRhc2tzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IGlzQXJyYXlMaWtlKHRhc2tzKSA/IFtdIDoge307XG5cbiAgICAgICAgZWFjaGZuKHRhc2tzLCAodGFzaywga2V5LCB0YXNrQ2IpID0+IHtcbiAgICAgICAgICAgIHdyYXBBc3luYyh0YXNrKSgoZXJyLCAuLi5yZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdF0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB0YXNrQ2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4gY2FsbGJhY2soZXJyLCByZXN1bHRzKSk7XG4gICAgfSwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGhlIGB0YXNrc2AgY29sbGVjdGlvbiBvZiBmdW5jdGlvbnMgaW4gcGFyYWxsZWwsIHdpdGhvdXQgd2FpdGluZyB1bnRpbFxuICAgICAqIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiBJZiBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBwYXNzIGFuIGVycm9yIHRvXG4gICAgICogaXRzIGNhbGxiYWNrLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGVcbiAgICAgKiBlcnJvci4gT25jZSB0aGUgYHRhc2tzYCBoYXZlIGNvbXBsZXRlZCwgdGhlIHJlc3VsdHMgYXJlIHBhc3NlZCB0byB0aGUgZmluYWxcbiAgICAgKiBgY2FsbGJhY2tgIGFzIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIGBwYXJhbGxlbGAgaXMgYWJvdXQga2lja2luZy1vZmYgSS9PIHRhc2tzIGluIHBhcmFsbGVsLCBub3QgYWJvdXRcbiAgICAgKiBwYXJhbGxlbCBleGVjdXRpb24gb2YgY29kZS4gIElmIHlvdXIgdGFza3MgZG8gbm90IHVzZSBhbnkgdGltZXJzIG9yIHBlcmZvcm1cbiAgICAgKiBhbnkgSS9PLCB0aGV5IHdpbGwgYWN0dWFsbHkgYmUgZXhlY3V0ZWQgaW4gc2VyaWVzLiAgQW55IHN5bmNocm9ub3VzIHNldHVwXG4gICAgICogc2VjdGlvbnMgZm9yIGVhY2ggdGFzayB3aWxsIGhhcHBlbiBvbmUgYWZ0ZXIgdGhlIG90aGVyLiAgSmF2YVNjcmlwdCByZW1haW5zXG4gICAgICogc2luZ2xlLXRocmVhZGVkLlxuICAgICAqXG4gICAgICogKipIaW50OioqIFVzZSBbYHJlZmxlY3RgXXtAbGluayBtb2R1bGU6VXRpbHMucmVmbGVjdH0gdG8gY29udGludWUgdGhlXG4gICAgICogZXhlY3V0aW9uIG9mIG90aGVyIHRhc2tzIHdoZW4gYSB0YXNrIGZhaWxzLlxuICAgICAqXG4gICAgICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIEVhY2ggcHJvcGVydHkgd2lsbFxuICAgICAqIGJlIHJ1biBhcyBhIGZ1bmN0aW9uIGFuZCB0aGUgcmVzdWx0cyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZmluYWwgYGNhbGxiYWNrYFxuICAgICAqIGFzIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5LiBUaGlzIGNhbiBiZSBhIG1vcmUgcmVhZGFibGUgd2F5IG9mIGhhbmRsaW5nXG4gICAgICogcmVzdWx0cyBmcm9tIHtAbGluayBhc3luYy5wYXJhbGxlbH0uXG4gICAgICpcbiAgICAgKiBAbmFtZSBwYXJhbGxlbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSB0YXNrcyAtIEEgY29sbGVjdGlvbiBvZlxuICAgICAqIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHJ1bi5cbiAgICAgKiBFYWNoIGFzeW5jIGZ1bmN0aW9uIGNhbiBjb21wbGV0ZSB3aXRoIGFueSBudW1iZXIgb2Ygb3B0aW9uYWwgYHJlc3VsdGAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBydW4gb25jZSBhbGwgdGhlXG4gICAgICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVzdWx0cyBhcnJheVxuICAgICAqIChvciBvYmplY3QpIGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdGFzayBjYWxsYmFja3MuXG4gICAgICogSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgbm90IHBhc3NlZFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vVXNpbmcgQ2FsbGJhY2tzXG4gICAgICogYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogXSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ10gZXZlbiB0aG91Z2hcbiAgICAgKiAgICAgLy8gdGhlIHNlY29uZCBmdW5jdGlvbiBoYWQgYSBzaG9ydGVyIHRpbWVvdXQuXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBhbiBleGFtcGxlIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5XG4gICAgICogYXN5bmMucGFyYWxsZWwoe1xuICAgICAqICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAyKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnBhcmFsbGVsKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ10gZXZlbiB0aG91Z2hcbiAgICAgKiAgICAgLy8gdGhlIHNlY29uZCBmdW5jdGlvbiBoYWQgYSBzaG9ydGVyIHRpbWVvdXQuXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYy5wYXJhbGxlbCh7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvOiB7IG9uZTogMSwgdHdvOiAyIH1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIF0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ10gZXZlbiB0aG91Z2hcbiAgICAgKiAgICAgICAgIC8vIHRoZSBzZWNvbmQgZnVuY3Rpb24gaGFkIGEgc2hvcnRlciB0aW1lb3V0LlxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBhbiBleGFtcGxlIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5wYXJhbGxlbCh7XG4gICAgICogICAgICAgICAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICAgICAgICAgfVxuICAgICAqICAgICAgICAgfSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJhbGxlbCh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9wYXJhbGxlbChlYWNoT2YkMSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHBhcmFsbGVsYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnBhcmFsbGVsfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgcGFyYWxsZWxMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnBhcmFsbGVsXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucGFyYWxsZWx9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIG9mXG4gICAgICogW2FzeW5jIGZ1bmN0aW9uc117QGxpbmsgQXN5bmNGdW5jdGlvbn0gdG8gcnVuLlxuICAgICAqIEVhY2ggYXN5bmMgZnVuY3Rpb24gY2FuIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBydW4gb25jZSBhbGwgdGhlXG4gICAgICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVzdWx0cyBhcnJheVxuICAgICAqIChvciBvYmplY3QpIGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdGFzayBjYWxsYmFja3MuXG4gICAgICogSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgbm90IHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcmFsbGVsTGltaXQodGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX3BhcmFsbGVsKGVhY2hPZkxpbWl0JDIobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgcXVldWUgb2YgdGFza3MgZm9yIHRoZSB3b3JrZXIgZnVuY3Rpb24gdG8gY29tcGxldGUuXG4gICAgICogQHR5cGVkZWYge0l0ZXJhYmxlfSBRdWV1ZU9iamVjdFxuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBsZW5ndGggLSBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICogd2FpdGluZyB0byBiZSBwcm9jZXNzZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5sZW5ndGgoKWAuXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBzdGFydGVkIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgYW55XG4gICAgICogaXRlbXMgaGF2ZSBiZWVuIHB1c2hlZCBhbmQgcHJvY2Vzc2VkIGJ5IHRoZSBxdWV1ZS5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBydW5uaW5nIC0gYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIG51bWJlciBvZiBpdGVtc1xuICAgICAqIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5ydW5uaW5nKClgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHdvcmtlcnNMaXN0IC0gYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGFycmF5IG9mIGl0ZW1zXG4gICAgICogY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gSW52b2tlIHdpdGggYHF1ZXVlLndvcmtlcnNMaXN0KClgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGlkbGUgLSBhIGZ1bmN0aW9uIHJldHVybmluZyBmYWxzZSBpZiB0aGVyZSBhcmUgaXRlbXNcbiAgICAgKiB3YWl0aW5nIG9yIGJlaW5nIHByb2Nlc3NlZCwgb3IgdHJ1ZSBpZiBub3QuIEludm9rZSB3aXRoIGBxdWV1ZS5pZGxlKClgLlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb25jdXJyZW5jeSAtIGFuIGludGVnZXIgZm9yIGRldGVybWluaW5nIGhvdyBtYW55IGB3b3JrZXJgXG4gICAgICogZnVuY3Rpb25zIHNob3VsZCBiZSBydW4gaW4gcGFyYWxsZWwuIFRoaXMgcHJvcGVydHkgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgYVxuICAgICAqIGBxdWV1ZWAgaXMgY3JlYXRlZCB0byBhbHRlciB0aGUgY29uY3VycmVuY3kgb24tdGhlLWZseS5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gcGF5bG9hZCAtIGFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgaXRlbXMgYXJlXG4gICAgICogcGFzc2VkIHRvIHRoZSB3b3JrZXIgZnVuY3Rpb24gYXQgYSB0aW1lLiBvbmx5IGFwcGxpZXMgaWYgdGhpcyBpcyBhXG4gICAgICogW2NhcmdvXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuY2FyZ299IG9iamVjdFxuICAgICAqIEBwcm9wZXJ0eSB7QXN5bmNGdW5jdGlvbn0gcHVzaCAtIGFkZCBhIG5ldyB0YXNrIHRvIHRoZSBgcXVldWVgLiBDYWxscyBgY2FsbGJhY2tgXG4gICAgICogb25jZSB0aGUgYHdvcmtlcmAgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRhc2suIEluc3RlYWQgb2YgYSBzaW5nbGUgdGFzayxcbiAgICAgKiBhIGB0YXNrc2AgYXJyYXkgY2FuIGJlIHN1Ym1pdHRlZC4gVGhlIHJlc3BlY3RpdmUgY2FsbGJhY2sgaXMgdXNlZCBmb3IgZXZlcnlcbiAgICAgKiB0YXNrIGluIHRoZSBsaXN0LiBJbnZva2Ugd2l0aCBgcXVldWUucHVzaCh0YXNrLCBbY2FsbGJhY2tdKWAsXG4gICAgICogQHByb3BlcnR5IHtBc3luY0Z1bmN0aW9ufSB1bnNoaWZ0IC0gYWRkIGEgbmV3IHRhc2sgdG8gdGhlIGZyb250IG9mIHRoZSBgcXVldWVgLlxuICAgICAqIEludm9rZSB3aXRoIGBxdWV1ZS51bnNoaWZ0KHRhc2ssIFtjYWxsYmFja10pYC5cbiAgICAgKiBAcHJvcGVydHkge0FzeW5jRnVuY3Rpb259IHB1c2hBc3luYyAtIHRoZSBzYW1lIGFzIGBxLnB1c2hgLCBleGNlcHQgdGhpcyByZXR1cm5zXG4gICAgICogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyBpZiBhbiBlcnJvciBvY2N1cnMuXG4gICAgICogQHByb3BlcnR5IHtBc3luY0Z1bmN0aW9ufSB1bnNoaWZ0QXN5bmMgLSB0aGUgc2FtZSBhcyBgcS51bnNoaWZ0YCwgZXhjZXB0IHRoaXMgcmV0dXJuc1xuICAgICAqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgaWYgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHJlbW92ZSAtIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBxdWV1ZSB0aGF0IG1hdGNoIGEgdGVzdFxuICAgICAqIGZ1bmN0aW9uLiAgVGhlIHRlc3QgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYW4gb2JqZWN0IHdpdGggYSBgZGF0YWAgcHJvcGVydHksXG4gICAgICogYW5kIGEgYHByaW9yaXR5YCBwcm9wZXJ0eSwgaWYgdGhpcyBpcyBhXG4gICAgICogW3ByaW9yaXR5UXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5wcmlvcml0eVF1ZXVlfSBvYmplY3QuXG4gICAgICogSW52b2tlZCB3aXRoIGBxdWV1ZS5yZW1vdmUodGVzdEZuKWAsIHdoZXJlIGB0ZXN0Rm5gIGlzIG9mIHRoZSBmb3JtXG4gICAgICogYGZ1bmN0aW9uICh7ZGF0YSwgcHJpb3JpdHl9KSB7fWAgYW5kIHJldHVybnMgYSBCb29sZWFuLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHNhdHVyYXRlZCAtIGEgZnVuY3Rpb24gdGhhdCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpc1xuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBudW1iZXIgb2YgcnVubmluZyB3b3JrZXJzIGhpdHMgdGhlIGBjb25jdXJyZW5jeWAgbGltaXQsIGFuZFxuICAgICAqIGZ1cnRoZXIgdGFza3Mgd2lsbCBiZSBxdWV1ZWQuICBJZiB0aGUgY2FsbGJhY2sgaXMgb21pdHRlZCwgYHEuc2F0dXJhdGVkKClgXG4gICAgICogcmV0dXJucyBhIHByb21pc2UgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2UuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdW5zYXR1cmF0ZWQgLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXNcbiAgICAgKiBjYWxsZWQgd2hlbiB0aGUgbnVtYmVyIG9mIHJ1bm5pbmcgd29ya2VycyBpcyBsZXNzIHRoYW4gdGhlIGBjb25jdXJyZW5jeWAgJlxuICAgICAqIGBidWZmZXJgIGxpbWl0cywgYW5kIGZ1cnRoZXIgdGFza3Mgd2lsbCBub3QgYmUgcXVldWVkLiBJZiB0aGUgY2FsbGJhY2sgaXNcbiAgICAgKiBvbWl0dGVkLCBgcS51bnNhdHVyYXRlZCgpYCByZXR1cm5zIGEgcHJvbWlzZSBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZS5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYnVmZmVyIC0gQSBtaW5pbXVtIHRocmVzaG9sZCBidWZmZXIgaW4gb3JkZXIgdG8gc2F5IHRoYXRcbiAgICAgKiB0aGUgYHF1ZXVlYCBpcyBgdW5zYXR1cmF0ZWRgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGVtcHR5IC0gYSBmdW5jdGlvbiB0aGF0IHNldHMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZFxuICAgICAqIHdoZW4gdGhlIGxhc3QgaXRlbSBmcm9tIHRoZSBgcXVldWVgIGlzIGdpdmVuIHRvIGEgYHdvcmtlcmAuIElmIHRoZSBjYWxsYmFja1xuICAgICAqIGlzIG9taXR0ZWQsIGBxLmVtcHR5KClgIHJldHVybnMgYSBwcm9taXNlIGZvciB0aGUgbmV4dCBvY2N1cnJlbmNlLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGRyYWluIC0gYSBmdW5jdGlvbiB0aGF0IHNldHMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZFxuICAgICAqIHdoZW4gdGhlIGxhc3QgaXRlbSBmcm9tIHRoZSBgcXVldWVgIGhhcyByZXR1cm5lZCBmcm9tIHRoZSBgd29ya2VyYC4gSWYgdGhlXG4gICAgICogY2FsbGJhY2sgaXMgb21pdHRlZCwgYHEuZHJhaW4oKWAgcmV0dXJucyBhIHByb21pc2UgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2UuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZXJyb3IgLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkXG4gICAgICogd2hlbiBhIHRhc2sgZXJyb3JzLiBIYXMgdGhlIHNpZ25hdHVyZSBgZnVuY3Rpb24oZXJyb3IsIHRhc2spYC4gSWYgdGhlXG4gICAgICogY2FsbGJhY2sgaXMgb21pdHRlZCwgYGVycm9yKClgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVqZWN0cyBvbiB0aGUgbmV4dFxuICAgICAqIGVycm9yLlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGF1c2VkIC0gYSBib29sZWFuIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBxdWV1ZSBpc1xuICAgICAqIGluIGEgcGF1c2VkIHN0YXRlLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHBhdXNlIC0gYSBmdW5jdGlvbiB0aGF0IHBhdXNlcyB0aGUgcHJvY2Vzc2luZyBvZiB0YXNrc1xuICAgICAqIHVudGlsIGByZXN1bWUoKWAgaXMgY2FsbGVkLiBJbnZva2Ugd2l0aCBgcXVldWUucGF1c2UoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcmVzdW1lIC0gYSBmdW5jdGlvbiB0aGF0IHJlc3VtZXMgdGhlIHByb2Nlc3Npbmcgb2ZcbiAgICAgKiBxdWV1ZWQgdGFza3Mgd2hlbiB0aGUgcXVldWUgaXMgcGF1c2VkLiBJbnZva2Ugd2l0aCBgcXVldWUucmVzdW1lKClgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGtpbGwgLSBhIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyB0aGUgYGRyYWluYCBjYWxsYmFjayBhbmRcbiAgICAgKiBlbXB0aWVzIHJlbWFpbmluZyB0YXNrcyBmcm9tIHRoZSBxdWV1ZSBmb3JjaW5nIGl0IHRvIGdvIGlkbGUuIE5vIG1vcmUgdGFza3NcbiAgICAgKiBzaG91bGQgYmUgcHVzaGVkIHRvIHRoZSBxdWV1ZSBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIEludm9rZSB3aXRoIGBxdWV1ZS5raWxsKClgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCBxID0gYXN5bmMucXVldWUod29ya2VyLCAyKVxuICAgICAqIHEucHVzaChpdGVtMSlcbiAgICAgKiBxLnB1c2goaXRlbTIpXG4gICAgICogcS5wdXNoKGl0ZW0zKVxuICAgICAqIC8vIHF1ZXVlcyBhcmUgaXRlcmFibGUsIHNwcmVhZCBpbnRvIGFuIGFycmF5IHRvIGluc3BlY3RcbiAgICAgKiBjb25zdCBpdGVtcyA9IFsuLi5xXSAvLyBbaXRlbTEsIGl0ZW0yLCBpdGVtM11cbiAgICAgKiAvLyBvciB1c2UgZm9yIG9mXG4gICAgICogZm9yIChsZXQgaXRlbSBvZiBxKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGl0ZW0pXG4gICAgICogfVxuICAgICAqXG4gICAgICogcS5kcmFpbigoKSA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdhbGwgZG9uZScpXG4gICAgICogfSlcbiAgICAgKiAvLyBvclxuICAgICAqIGF3YWl0IHEuZHJhaW4oKVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBxdWV1ZWAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBgY29uY3VycmVuY3lgLiBUYXNrcyBhZGRlZCB0byB0aGVcbiAgICAgKiBgcXVldWVgIGFyZSBwcm9jZXNzZWQgaW4gcGFyYWxsZWwgKHVwIHRvIHRoZSBgY29uY3VycmVuY3lgIGxpbWl0KS4gSWYgYWxsXG4gICAgICogYHdvcmtlcmBzIGFyZSBpbiBwcm9ncmVzcywgdGhlIHRhc2sgaXMgcXVldWVkIHVudGlsIG9uZSBiZWNvbWVzIGF2YWlsYWJsZS5cbiAgICAgKiBPbmNlIGEgYHdvcmtlcmAgY29tcGxldGVzIGEgYHRhc2tgLCB0aGF0IGB0YXNrYCdzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHF1ZXVlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gd29ya2VyIC0gQW4gYXN5bmMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYSBxdWV1ZWQgdGFzay5cbiAgICAgKiBJZiB5b3Ugd2FudCB0byBoYW5kbGUgZXJyb3JzIGZyb20gYW4gaW5kaXZpZHVhbCB0YXNrLCBwYXNzIGEgY2FsbGJhY2sgdG9cbiAgICAgKiBgcS5wdXNoKClgLiBJbnZva2VkIHdpdGggKHRhc2ssIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbmN5PTFdIC0gQW4gYGludGVnZXJgIGZvciBkZXRlcm1pbmluZyBob3cgbWFueVxuICAgICAqIGB3b3JrZXJgIGZ1bmN0aW9ucyBzaG91bGQgYmUgcnVuIGluIHBhcmFsbGVsLiAgSWYgb21pdHRlZCwgdGhlIGNvbmN1cnJlbmN5XG4gICAgICogZGVmYXVsdHMgdG8gYDFgLiAgSWYgdGhlIGNvbmN1cnJlbmN5IGlzIGAwYCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgcXVldWUgb2JqZWN0IHRvIG1hbmFnZSB0aGUgdGFza3MuIENhbGxiYWNrcyBjYW4gYmVcbiAgICAgKiBhdHRhY2hlZCBhcyBjZXJ0YWluIHByb3BlcnRpZXMgdG8gbGlzdGVuIGZvciBzcGVjaWZpYyBldmVudHMgZHVyaW5nIHRoZVxuICAgICAqIGxpZmVjeWNsZSBvZiB0aGUgcXVldWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGNyZWF0ZSBhIHF1ZXVlIG9iamVjdCB3aXRoIGNvbmN1cnJlbmN5IDJcbiAgICAgKiB2YXIgcSA9IGFzeW5jLnF1ZXVlKGZ1bmN0aW9uKHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdoZWxsbyAnICsgdGFzay5uYW1lKTtcbiAgICAgKiAgICAgY2FsbGJhY2soKTtcbiAgICAgKiB9LCAyKTtcbiAgICAgKlxuICAgICAqIC8vIGFzc2lnbiBhIGNhbGxiYWNrXG4gICAgICogcS5kcmFpbihmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2FsbCBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkJyk7XG4gICAgICogfSk7XG4gICAgICogLy8gb3IgYXdhaXQgdGhlIGVuZFxuICAgICAqIGF3YWl0IHEuZHJhaW4oKVxuICAgICAqXG4gICAgICogLy8gYXNzaWduIGFuIGVycm9yIGNhbGxiYWNrXG4gICAgICogcS5lcnJvcihmdW5jdGlvbihlcnIsIHRhc2spIHtcbiAgICAgKiAgICAgY29uc29sZS5lcnJvcigndGFzayBleHBlcmllbmNlZCBhbiBlcnJvcicpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXMgdG8gdGhlIHF1ZXVlXG4gICAgICogcS5wdXNoKHtuYW1lOiAnZm9vJ30sIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBmb28nKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyBjYWxsYmFjayBpcyBvcHRpb25hbFxuICAgICAqIHEucHVzaCh7bmFtZTogJ2Jhcid9KTtcbiAgICAgKlxuICAgICAqIC8vIGFkZCBzb21lIGl0ZW1zIHRvIHRoZSBxdWV1ZSAoYmF0Y2gtd2lzZSlcbiAgICAgKiBxLnB1c2goW3tuYW1lOiAnYmF6J30se25hbWU6ICdiYXknfSx7bmFtZTogJ2JheCd9XSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGl0ZW0nKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFkZCBzb21lIGl0ZW1zIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWVcbiAgICAgKiBxLnVuc2hpZnQoe25hbWU6ICdiYXInfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXInKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBxdWV1ZSAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgX3dvcmtlciA9IHdyYXBBc3luYyh3b3JrZXIpO1xuICAgICAgICByZXR1cm4gcXVldWUkMSgoaXRlbXMsIGNiKSA9PiB7XG4gICAgICAgICAgICBfd29ya2VyKGl0ZW1zWzBdLCBjYik7XG4gICAgICAgIH0sIGNvbmN1cnJlbmN5LCAxKTtcbiAgICB9XG5cbiAgICAvLyBCaW5hcnkgbWluLWhlYXAgaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgcHJpb3JpdHkgcXVldWUuXG4gICAgLy8gSW1wbGVtZW50YXRpb24gaXMgc3RhYmxlLCBpLmUuIHB1c2ggdGltZSBpcyBjb25zaWRlcmVkIGZvciBlcXVhbCBwcmlvcml0aWVzXG4gICAgY2xhc3MgSGVhcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5oZWFwID0gW107XG4gICAgICAgICAgICB0aGlzLnB1c2hDb3VudCA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlYXAubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgZW1wdHkgKCkge1xuICAgICAgICAgICAgdGhpcy5oZWFwID0gW107XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcmNVcChpbmRleCkge1xuICAgICAgICAgICAgbGV0IHA7XG5cbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA+IDAgJiYgc21hbGxlcih0aGlzLmhlYXBbaW5kZXhdLCB0aGlzLmhlYXBbcD1wYXJlbnQoaW5kZXgpXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IHRoaXMuaGVhcFtpbmRleF07XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFwW2luZGV4XSA9IHRoaXMuaGVhcFtwXTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYXBbcF0gPSB0O1xuXG4gICAgICAgICAgICAgICAgaW5kZXggPSBwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcGVyY0Rvd24oaW5kZXgpIHtcbiAgICAgICAgICAgIGxldCBsO1xuXG4gICAgICAgICAgICB3aGlsZSAoKGw9bGVmdENoaShpbmRleCkpIDwgdGhpcy5oZWFwLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChsKzEgPCB0aGlzLmhlYXAubGVuZ3RoICYmIHNtYWxsZXIodGhpcy5oZWFwW2wrMV0sIHRoaXMuaGVhcFtsXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbCA9IGwrMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc21hbGxlcih0aGlzLmhlYXBbaW5kZXhdLCB0aGlzLmhlYXBbbF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCB0ID0gdGhpcy5oZWFwW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYXBbaW5kZXhdID0gdGhpcy5oZWFwW2xdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtsXSA9IHQ7XG5cbiAgICAgICAgICAgICAgICBpbmRleCA9IGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKG5vZGUpIHtcbiAgICAgICAgICAgIG5vZGUucHVzaENvdW50ID0gKyt0aGlzLnB1c2hDb3VudDtcbiAgICAgICAgICAgIHRoaXMuaGVhcC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy5wZXJjVXAodGhpcy5oZWFwLmxlbmd0aC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVuc2hpZnQobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhcC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hpZnQoKSB7XG4gICAgICAgICAgICBsZXQgW3RvcF0gPSB0aGlzLmhlYXA7XG5cbiAgICAgICAgICAgIHRoaXMuaGVhcFswXSA9IHRoaXMuaGVhcFt0aGlzLmhlYXAubGVuZ3RoLTFdO1xuICAgICAgICAgICAgdGhpcy5oZWFwLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5wZXJjRG93bigwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvQXJyYXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLnRoaXNdO1xuICAgICAgICB9XG5cbiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5oZWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5oZWFwW2ldLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmUgKHRlc3RGbikge1xuICAgICAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmhlYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRlc3RGbih0aGlzLmhlYXBbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtqXSA9IHRoaXMuaGVhcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oZWFwLnNwbGljZShqKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudCh0aGlzLmhlYXAubGVuZ3RoLTEpOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVyY0Rvd24oaSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGVmdENoaShpKSB7XG4gICAgICAgIHJldHVybiAoaTw8MSkrMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJlbnQoaSkge1xuICAgICAgICByZXR1cm4gKChpKzEpPj4xKS0xO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNtYWxsZXIoeCwgeSkge1xuICAgICAgICBpZiAoeC5wcmlvcml0eSAhPT0geS5wcmlvcml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIHgucHJpb3JpdHkgPCB5LnByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHgucHVzaENvdW50IDwgeS5wdXNoQ291bnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYXN5bmMucXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX0gb25seSB0YXNrcyBhcmUgYXNzaWduZWQgYSBwcmlvcml0eSBhbmRcbiAgICAgKiBjb21wbGV0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5IG9yZGVyLlxuICAgICAqXG4gICAgICogQG5hbWUgcHJpb3JpdHlRdWV1ZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnF1ZXVlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gd29ya2VyIC0gQW4gYXN5bmMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYSBxdWV1ZWQgdGFzay5cbiAgICAgKiBJZiB5b3Ugd2FudCB0byBoYW5kbGUgZXJyb3JzIGZyb20gYW4gaW5kaXZpZHVhbCB0YXNrLCBwYXNzIGEgY2FsbGJhY2sgdG9cbiAgICAgKiBgcS5wdXNoKClgLlxuICAgICAqIEludm9rZWQgd2l0aCAodGFzaywgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb25jdXJyZW5jeSAtIEFuIGBpbnRlZ2VyYCBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgYHdvcmtlcmBcbiAgICAgKiBmdW5jdGlvbnMgc2hvdWxkIGJlIHJ1biBpbiBwYXJhbGxlbC4gIElmIG9taXR0ZWQsIHRoZSBjb25jdXJyZW5jeSBkZWZhdWx0cyB0b1xuICAgICAqIGAxYC4gIElmIHRoZSBjb25jdXJyZW5jeSBpcyBgMGAsIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkNvbnRyb2xGbG93LlF1ZXVlT2JqZWN0fSBBIHByaW9yaXR5UXVldWUgb2JqZWN0IHRvIG1hbmFnZSB0aGUgdGFza3MuIFRoZXJlIGFyZSB0aHJlZVxuICAgICAqIGRpZmZlcmVuY2VzIGJldHdlZW4gYHF1ZXVlYCBhbmQgYHByaW9yaXR5UXVldWVgIG9iamVjdHM6XG4gICAgICogKiBgcHVzaCh0YXNrLCBwcmlvcml0eSwgW2NhbGxiYWNrXSlgIC0gYHByaW9yaXR5YCBzaG91bGQgYmUgYSBudW1iZXIuIElmIGFuXG4gICAgICogICBhcnJheSBvZiBgdGFza3NgIGlzIGdpdmVuLCBhbGwgdGFza3Mgd2lsbCBiZSBhc3NpZ25lZCB0aGUgc2FtZSBwcmlvcml0eS5cbiAgICAgKiAqIGBwdXNoQXN5bmModGFzaywgcHJpb3JpdHksIFtjYWxsYmFja10pYCAtIHRoZSBzYW1lIGFzIGBwcmlvcml0eVF1ZXVlLnB1c2hgLFxuICAgICAqICAgZXhjZXB0IHRoaXMgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZWplY3RzIGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKiAqIFRoZSBgdW5zaGlmdGAgYW5kIGB1bnNoaWZ0QXN5bmNgIG1ldGhvZHMgd2VyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByaW9yaXR5UXVldWUod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gcXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgdmFyIHtcbiAgICAgICAgICAgIHB1c2gsXG4gICAgICAgICAgICBwdXNoQXN5bmNcbiAgICAgICAgfSA9IHE7XG5cbiAgICAgICAgcS5fdGFza3MgPSBuZXcgSGVhcCgpO1xuICAgICAgICBxLl9jcmVhdGVUYXNrSXRlbSA9ICh7ZGF0YSwgcHJpb3JpdHl9LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGFJdGVtcyh0YXNrcywgcHJpb3JpdHkpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge2RhdGE6IHRhc2tzLCBwcmlvcml0eX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFza3MubWFwKGRhdGEgPT4geyByZXR1cm4ge2RhdGEsIHByaW9yaXR5fTsgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbihkYXRhLCBwcmlvcml0eSA9IDAsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gcHVzaChjcmVhdGVEYXRhSXRlbXMoZGF0YSwgcHJpb3JpdHkpLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcS5wdXNoQXN5bmMgPSBmdW5jdGlvbihkYXRhLCBwcmlvcml0eSA9IDAsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gcHVzaEFzeW5jKGNyZWF0ZURhdGFJdGVtcyhkYXRhLCBwcmlvcml0eSksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvbnNcbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdEFzeW5jO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgdGhlIGB0YXNrc2AgYXJyYXkgb2YgZnVuY3Rpb25zIGluIHBhcmFsbGVsLCB3aXRob3V0IHdhaXRpbmcgdW50aWwgdGhlXG4gICAgICogcHJldmlvdXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZC4gT25jZSBhbnkgb2YgdGhlIGB0YXNrc2AgY29tcGxldGUgb3IgcGFzcyBhblxuICAgICAqIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgdGhlIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQuIEl0J3NcbiAgICAgKiBlcXVpdmFsZW50IHRvIGBQcm9taXNlLnJhY2UoKWAuXG4gICAgICpcbiAgICAgKiBAbmFtZSByYWNlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl9IHRhc2tzIC0gQW4gYXJyYXkgY29udGFpbmluZyBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufVxuICAgICAqIHRvIHJ1bi4gRWFjaCBmdW5jdGlvbiBjYW4gY29tcGxldGUgd2l0aCBhbiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYW55IG9mIHRoZSBmdW5jdGlvbnMgaGF2ZVxuICAgICAqIGNvbXBsZXRlZC4gVGhpcyBmdW5jdGlvbiBnZXRzIGFuIGVycm9yIG9yIHJlc3VsdCBmcm9tIHRoZSBmaXJzdCBmdW5jdGlvbiB0aGF0XG4gICAgICogY29tcGxldGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMucmFjZShbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLFxuICAgICAqIC8vIG1haW4gY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyB0aGUgcmVzdWx0IHdpbGwgYmUgZXF1YWwgdG8gJ3R3bycgYXMgaXQgZmluaXNoZXMgZWFybGllclxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJhY2UodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrcykpIHJldHVybiBjYWxsYmFjayhuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCB0byByYWNlIG11c3QgYmUgYW4gYXJyYXkgb2YgZnVuY3Rpb25zJykpO1xuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFza3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICB3cmFwQXN5bmModGFza3NbaV0pKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciByYWNlJDEgPSBhd2FpdGlmeShyYWNlLCAyKTtcblxuICAgIC8qKlxuICAgICAqIFNhbWUgYXMgW2ByZWR1Y2VgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVkdWNlfSwgb25seSBvcGVyYXRlcyBvbiBgYXJyYXlgIGluIHJldmVyc2Ugb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZWR1Y2VSaWdodFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlZHVjZV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlZHVjZX1cbiAgICAgKiBAYWxpYXMgZm9sZHJcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0geyp9IG1lbW8gLSBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgcmVkdWN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIGFwcGxpZWQgdG8gZWFjaCBpdGVtIGluIHRoZVxuICAgICAqIGFycmF5IHRvIHByb2R1Y2UgdGhlIG5leHQgc3RlcCBpbiB0aGUgcmVkdWN0aW9uLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSByZWR1Y3Rpb24uXG4gICAgICogSWYgdGhlIGl0ZXJhdGVlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLCB0aGUgcmVkdWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZVxuICAgICAqIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICogSW52b2tlZCB3aXRoIChtZW1vLCBpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBSZXN1bHQgaXMgdGhlIHJlZHVjZWQgdmFsdWUuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkdWNlUmlnaHQgKGFycmF5LCBtZW1vLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gWy4uLmFycmF5XS5yZXZlcnNlKCk7XG4gICAgICAgIHJldHVybiByZWR1Y2UkMShyZXZlcnNlZCwgbWVtbywgaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcmFwcyB0aGUgYXN5bmMgZnVuY3Rpb24gaW4gYW5vdGhlciBmdW5jdGlvbiB0aGF0IGFsd2F5cyBjb21wbGV0ZXMgd2l0aCBhXG4gICAgICogcmVzdWx0IG9iamVjdCwgZXZlbiB3aGVuIGl0IGVycm9ycy5cbiAgICAgKlxuICAgICAqIFRoZSByZXN1bHQgb2JqZWN0IGhhcyBlaXRoZXIgdGhlIHByb3BlcnR5IGBlcnJvcmAgb3IgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlZmxlY3RcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSBUaGUgYXN5bmMgZnVuY3Rpb24geW91IHdhbnQgdG8gd3JhcFxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gLSBBIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHBhc3NlcyBudWxsIHRvIGl0J3MgY2FsbGJhY2sgYXNcbiAgICAgKiB0aGUgZXJyb3IuIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIHdpbGwgYmUgYW4gYG9iamVjdGAgd2l0aFxuICAgICAqIGVpdGhlciBhbiBgZXJyb3JgIG9yIGEgYHZhbHVlYCBwcm9wZXJ0eS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICBhc3luYy5yZWZsZWN0KGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21lIHN0dWZmIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICB9KSxcbiAgICAgKiAgICAgYXN5bmMucmVmbGVjdChmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBtb3JlIHN0dWZmIGJ1dCBlcnJvciAuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKCdiYWQgc3R1ZmYgaGFwcGVuZWQnKTtcbiAgICAgKiAgICAgfSksXG4gICAgICogICAgIGFzeW5jLnJlZmxlY3QoZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWUgbW9yZSBzdHVmZiAuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgfSlcbiAgICAgKiBdLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIHZhbHVlc1xuICAgICAqICAgICAvLyByZXN1bHRzWzBdLnZhbHVlID0gJ29uZSdcbiAgICAgKiAgICAgLy8gcmVzdWx0c1sxXS5lcnJvciA9ICdiYWQgc3R1ZmYgaGFwcGVuZWQnXG4gICAgICogICAgIC8vIHJlc3VsdHNbMl0udmFsdWUgPSAndHdvJ1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZmxlY3QoZm4pIHtcbiAgICAgICAgdmFyIF9mbiA9IHdyYXBBc3luYyhmbik7XG4gICAgICAgIHJldHVybiBpbml0aWFsUGFyYW1zKGZ1bmN0aW9uIHJlZmxlY3RPbihhcmdzLCByZWZsZWN0Q2FsbGJhY2spIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgoZXJyb3IsIC4uLmNiQXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXRWYWwgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjYkFyZ3MubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNiQXJncztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNiQXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXSA9IGNiQXJncztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXRWYWwudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVmbGVjdENhbGxiYWNrKG51bGwsIHJldFZhbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIF9mbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCB3cmFwcyBhbiBhcnJheSBvciBhbiBvYmplY3Qgb2YgZnVuY3Rpb25zIHdpdGggYHJlZmxlY3RgLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVmbGVjdEFsbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlZmxlY3Rde0BsaW5rIG1vZHVsZTpVdGlscy5yZWZsZWN0fVxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8SXRlcmFibGV9IHRhc2tzIC0gVGhlIGNvbGxlY3Rpb24gb2ZcbiAgICAgKiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byB3cmFwIGluIGBhc3luYy5yZWZsZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgYXN5bmMgZnVuY3Rpb25zLCBlYWNoIHdyYXBwZWQgaW5cbiAgICAgKiBgYXN5bmMucmVmbGVjdGBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogbGV0IHRhc2tzID0gW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBtb3JlIHN0dWZmIGJ1dCBlcnJvciAuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignYmFkIHN0dWZmIGhhcHBlbmVkJykpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnBhcmFsbGVsKGFzeW5jLnJlZmxlY3RBbGwodGFza3MpLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIHZhbHVlc1xuICAgICAqICAgICAvLyByZXN1bHRzWzBdLnZhbHVlID0gJ29uZSdcbiAgICAgKiAgICAgLy8gcmVzdWx0c1sxXS5lcnJvciA9IEVycm9yKCdiYWQgc3R1ZmYgaGFwcGVuZWQnKVxuICAgICAqICAgICAvLyByZXN1bHRzWzJdLnZhbHVlID0gJ3R3bydcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBsZXQgdGFza3MgPSB7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgY2FsbGJhY2soJ3R3bycpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0aHJlZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnBhcmFsbGVsKGFzeW5jLnJlZmxlY3RBbGwodGFza3MpLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIHZhbHVlc1xuICAgICAqICAgICAvLyByZXN1bHRzLm9uZS52YWx1ZSA9ICdvbmUnXG4gICAgICogICAgIC8vIHJlc3VsdHMudHdvLmVycm9yID0gJ3R3bydcbiAgICAgKiAgICAgLy8gcmVzdWx0cy50aHJlZS52YWx1ZSA9ICd0aHJlZSdcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWZsZWN0QWxsKHRhc2tzKSB7XG4gICAgICAgIHZhciByZXN1bHRzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHJlc3VsdHMgPSB0YXNrcy5tYXAocmVmbGVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRzID0ge307XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0YXNrcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHJlZmxlY3QuY2FsbCh0aGlzLCB0YXNrc1trZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdCQyKGVhY2hmbiwgYXJyLCBfaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdGVlID0gd3JhcEFzeW5jKF9pdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBfZmlsdGVyKGVhY2hmbiwgYXJyLCAodmFsdWUsIGNiKSA9PiB7XG4gICAgICAgICAgICBpdGVyYXRlZSh2YWx1ZSwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIGNiKGVyciwgIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgW2BmaWx0ZXJgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfS4gUmVtb3ZlcyB2YWx1ZXMgdGhhdCBwYXNzIGFuIGBhc3luY2AgdHJ1dGggdGVzdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlamVjdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmZpbHRlcl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgYHJlc3VsdGAuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydkaXIxL2ZpbGUxLnR4dCcsJ2RpcjIvZmlsZTMudHh0JywnZGlyMy9maWxlNi50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5yZWplY3QoZmlsZUxpc3QsIGZpbGVFeGlzdHMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgIC8vIFsgJ2RpcjMvZmlsZTYudHh0JyBdXG4gICAgICogICAgLy8gcmVzdWx0cyBub3cgZXF1YWxzIGFuIGFycmF5IG9mIHRoZSBub24tZXhpc3RpbmcgZmlsZXNcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMucmVqZWN0KGZpbGVMaXN0LCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIFsgJ2RpcjMvZmlsZTYudHh0JyBdXG4gICAgICogICAgIC8vIHJlc3VsdHMgbm93IGVxdWFscyBhbiBhcnJheSBvZiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMucmVqZWN0KGZpbGVMaXN0LCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gWyAnZGlyMy9maWxlNi50eHQnIF1cbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgbm93IGVxdWFscyBhbiBhcnJheSBvZiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlamVjdCAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiByZWplY3QkMihlYWNoT2YkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgcmVqZWN0JDEgPSBhd2FpdGlmeShyZWplY3QsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2ByZWplY3RgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVqZWN0fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVqZWN0TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5yZWplY3Rde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWplY3R9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWplY3RMaW1pdCAoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gcmVqZWN0JDIoZWFjaE9mTGltaXQkMihsaW1pdCksIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHJlamVjdExpbWl0JDEgPSBhd2FpdGlmeShyZWplY3RMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHJlamVjdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWplY3R9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlamVjdFNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlamVjdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlamVjdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgYHJlc3VsdGAuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVqZWN0U2VyaWVzIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCQyKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciByZWplY3RTZXJpZXMkMSA9IGF3YWl0aWZ5KHJlamVjdFNlcmllcywgMyk7XG5cbiAgICBmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gZ2V0IGEgc3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGB0YXNrYCBubyBtb3JlIHRoYW4gYHRpbWVzYCB0aW1lc1xuICAgICAqIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3IuIElmIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWwsIHRoZSBgY2FsbGJhY2tgIHdpbGwgYmVcbiAgICAgKiBwYXNzZWQgdGhlIHJlc3VsdCBvZiB0aGUgc3VjY2Vzc2Z1bCB0YXNrLiBJZiBhbGwgYXR0ZW1wdHMgZmFpbCwgdGhlIGNhbGxiYWNrXG4gICAgICogd2lsbCBiZSBwYXNzZWQgdGhlIGVycm9yIGFuZCByZXN1bHQgKGlmIGFueSkgb2YgdGhlIGZpbmFsIGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZXRyeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAc2VlIFthc3luYy5yZXRyeWFibGVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5yZXRyeWFibGV9XG4gICAgICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSBbb3B0cyA9IHt0aW1lczogNSwgaW50ZXJ2YWw6IDB9fCA1XSAtIENhbiBiZSBlaXRoZXIgYW5cbiAgICAgKiBvYmplY3Qgd2l0aCBgdGltZXNgIGFuZCBgaW50ZXJ2YWxgIG9yIGEgbnVtYmVyLlxuICAgICAqICogYHRpbWVzYCAtIFRoZSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gbWFrZSBiZWZvcmUgZ2l2aW5nIHVwLiAgVGhlIGRlZmF1bHRcbiAgICAgKiAgIGlzIGA1YC5cbiAgICAgKiAqIGBpbnRlcnZhbGAgLSBUaGUgdGltZSB0byB3YWl0IGJldHdlZW4gcmV0cmllcywgaW4gbWlsbGlzZWNvbmRzLiAgVGhlXG4gICAgICogICBkZWZhdWx0IGlzIGAwYC4gVGhlIGludGVydmFsIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhIGZ1bmN0aW9uIG9mIHRoZVxuICAgICAqICAgcmV0cnkgY291bnQgKHNlZSBleGFtcGxlKS5cbiAgICAgKiAqIGBlcnJvckZpbHRlcmAgLSBBbiBvcHRpb25hbCBzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgb25cbiAgICAgKiAgIGVycm9uZW91cyByZXN1bHQuIElmIGl0IHJldHVybnMgYHRydWVgIHRoZSByZXRyeSBhdHRlbXB0cyB3aWxsIGNvbnRpbnVlO1xuICAgICAqICAgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGZhbHNlYCB0aGUgcmV0cnkgZmxvdyBpcyBhYm9ydGVkIHdpdGggdGhlIGN1cnJlbnRcbiAgICAgKiAgIGF0dGVtcHQncyBlcnJvciBhbmQgcmVzdWx0IGJlaW5nIHJldHVybmVkIHRvIHRoZSBmaW5hbCBjYWxsYmFjay5cbiAgICAgKiAgIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiAqIElmIGBvcHRzYCBpcyBhIG51bWJlciwgdGhlIG51bWJlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSxcbiAgICAgKiAgIHdpdGggdGhlIGRlZmF1bHQgaW50ZXJ2YWwgb2YgYDBgLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gdGFzayAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIHJldHJ5LlxuICAgICAqIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGVcbiAgICAgKiB0YXNrIGhhcyBzdWNjZWVkZWQsIG9yIGFmdGVyIHRoZSBmaW5hbCBmYWlsZWQgYXR0ZW1wdC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgXG4gICAgICogYW5kIGByZXN1bHRgIGFyZ3VtZW50cyBvZiB0aGUgbGFzdCBhdHRlbXB0IGF0IGNvbXBsZXRpbmcgdGhlIGB0YXNrYC4gSW52b2tlZFxuICAgICAqIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgcmV0cnlgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgc3RhbmQtYWxvbmUgY29udHJvbCBmbG93IGJ5IHBhc3NpbmdcbiAgICAgKiAvLyBhIGNhbGxiYWNrLCBhcyBzaG93biBiZWxvdzpcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCAzIHRpbWVzXG4gICAgICogYXN5bmMucmV0cnkoMywgYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0cnkgY2FsbGluZyBhcGlNZXRob2QgMyB0aW1lcywgd2FpdGluZyAyMDAgbXMgYmV0d2VlbiBlYWNoIHJldHJ5XG4gICAgICogYXN5bmMucmV0cnkoe3RpbWVzOiAzLCBpbnRlcnZhbDogMjAwfSwgYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0cnkgY2FsbGluZyBhcGlNZXRob2QgMTAgdGltZXMgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgICogLy8gKGkuZS4gaW50ZXJ2YWxzIG9mIDEwMCwgMjAwLCA0MDAsIDgwMCwgMTYwMCwgLi4uIG1pbGxpc2Vjb25kcylcbiAgICAgKiBhc3luYy5yZXRyeSh7XG4gICAgICogICB0aW1lczogMTAsXG4gICAgICogICBpbnRlcnZhbDogZnVuY3Rpb24ocmV0cnlDb3VudCkge1xuICAgICAqICAgICByZXR1cm4gNTAgKiBNYXRoLnBvdygyLCByZXRyeUNvdW50KTtcbiAgICAgKiAgIH1cbiAgICAgKiB9LCBhcGlNZXRob2QsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCB0aGUgZGVmYXVsdCA1IHRpbWVzIG5vIGRlbGF5IGJldHdlZW4gZWFjaCByZXRyeVxuICAgICAqIGFzeW5jLnJldHJ5KGFwaU1ldGhvZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gdHJ5IGNhbGxpbmcgYXBpTWV0aG9kIG9ubHkgd2hlbiBlcnJvciBjb25kaXRpb24gc2F0aXNmaWVzLCBhbGwgb3RoZXJcbiAgICAgKiAvLyBlcnJvcnMgd2lsbCBhYm9ydCB0aGUgcmV0cnkgY29udHJvbCBmbG93IGFuZCByZXR1cm4gdG8gZmluYWwgY2FsbGJhY2tcbiAgICAgKiBhc3luYy5yZXRyeSh7XG4gICAgICogICBlcnJvckZpbHRlcjogZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIHJldHVybiBlcnIubWVzc2FnZSA9PT0gJ1RlbXBvcmFyeSBlcnJvcic7IC8vIG9ubHkgcmV0cnkgb24gYSBzcGVjaWZpYyBlcnJvclxuICAgICAqICAgfVxuICAgICAqIH0sIGFwaU1ldGhvZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gdG8gcmV0cnkgaW5kaXZpZHVhbCBtZXRob2RzIHRoYXQgYXJlIG5vdCBhcyByZWxpYWJsZSB3aXRoaW4gb3RoZXJcbiAgICAgKiAvLyBjb250cm9sIGZsb3cgZnVuY3Rpb25zLCB1c2UgdGhlIGByZXRyeWFibGVgIHdyYXBwZXI6XG4gICAgICogYXN5bmMuYXV0byh7XG4gICAgICogICAgIHVzZXJzOiBhcGkuZ2V0VXNlcnMuYmluZChhcGkpLFxuICAgICAqICAgICBwYXltZW50czogYXN5bmMucmV0cnlhYmxlKDMsIGFwaS5nZXRQYXltZW50cy5iaW5kKGFwaSkpXG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRzXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKi9cbiAgICBjb25zdCBERUZBVUxUX1RJTUVTID0gNTtcbiAgICBjb25zdCBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgIGZ1bmN0aW9uIHJldHJ5KG9wdHMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbEZ1bmM6IGNvbnN0YW50KERFRkFVTFRfSU5URVJWQUwpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzICYmIHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2sgfHwgcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB0YXNrID0gb3B0cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IHByb21pc2VDYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0YXNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBmb3IgYXN5bmMucmV0cnlcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3Rhc2sgPSB3cmFwQXN5bmModGFzayk7XG5cbiAgICAgICAgdmFyIGF0dGVtcHQgPSAxO1xuICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQoKSB7XG4gICAgICAgICAgICBfdGFzaygoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVyblxuICAgICAgICAgICAgICAgIGlmIChlcnIgJiYgYXR0ZW1wdCsrIDwgb3B0aW9ucy50aW1lcyAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIG9wdGlvbnMuZXJyb3JGaWx0ZXIgIT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5lcnJvckZpbHRlcihlcnIpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJldHJ5QXR0ZW1wdCwgb3B0aW9ucy5pbnRlcnZhbEZ1bmMoYXR0ZW1wdCAtIDEpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0cnlBdHRlbXB0KCk7XG4gICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCkge1xuICAgICAgICBpZiAodHlwZW9mIHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhY2MudGltZXMgPSArdC50aW1lcyB8fCBERUZBVUxUX1RJTUVTO1xuXG4gICAgICAgICAgICBhY2MuaW50ZXJ2YWxGdW5jID0gdHlwZW9mIHQuaW50ZXJ2YWwgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICAgICAgIHQuaW50ZXJ2YWwgOlxuICAgICAgICAgICAgICAgIGNvbnN0YW50KCt0LmludGVydmFsIHx8IERFRkFVTFRfSU5URVJWQUwpO1xuXG4gICAgICAgICAgICBhY2MuZXJyb3JGaWx0ZXIgPSB0LmVycm9yRmlsdGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGFjYy50aW1lcyA9ICt0IHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBmb3IgYXN5bmMucmV0cnlcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGNsb3NlIHJlbGF0aXZlIG9mIFtgcmV0cnlgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucmV0cnl9LiAgVGhpcyBtZXRob2RcbiAgICAgKiB3cmFwcyBhIHRhc2sgYW5kIG1ha2VzIGl0IHJldHJ5YWJsZSwgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgY2FsbGluZyBpdFxuICAgICAqIHdpdGggcmV0cmllcy5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJldHJ5YWJsZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJldHJ5XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucmV0cnl9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0gW29wdHMgPSB7dGltZXM6IDUsIGludGVydmFsOiAwfXwgNV0gLSBvcHRpb25hbFxuICAgICAqIG9wdGlvbnMsIGV4YWN0bHkgdGhlIHNhbWUgYXMgZnJvbSBgcmV0cnlgLCBleGNlcHQgZm9yIGEgYG9wdHMuYXJpdHlgIHRoYXRcbiAgICAgKiBpcyB0aGUgYXJpdHkgb2YgdGhlIGB0YXNrYCBmdW5jdGlvbiwgZGVmYXVsdGluZyB0byBgdGFzay5sZW5ndGhgXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0YXNrIC0gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHJldHVybmVkIHdyYXBwZXIuXG4gICAgICogSW52b2tlZCB3aXRoICguLi5hcmdzLCBjYWxsYmFjaykuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IFRoZSB3cmFwcGVkIGZ1bmN0aW9uLCB3aGljaCB3aGVuIGludm9rZWQsIHdpbGxcbiAgICAgKiByZXRyeSBvbiBhbiBlcnJvciwgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGluIGBvcHRzYC5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNjZXB0IHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgYHRhc2tgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgZGVwMTogYXN5bmMucmV0cnlhYmxlKDMsIGdldEZyb21GbGFreVNlcnZpY2UpLFxuICAgICAqICAgICBwcm9jZXNzOiBbXCJkZXAxXCIsIGFzeW5jLnJldHJ5YWJsZSgzLCBmdW5jdGlvbiAocmVzdWx0cywgY2IpIHtcbiAgICAgKiAgICAgICAgIG1heWJlUHJvY2Vzc0RhdGEocmVzdWx0cy5kZXAxLCBjYik7XG4gICAgICogICAgIH0pXVxuICAgICAqIH0sIGNhbGxiYWNrKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXRyeWFibGUgKG9wdHMsIHRhc2spIHtcbiAgICAgICAgaWYgKCF0YXNrKSB7XG4gICAgICAgICAgICB0YXNrID0gb3B0cztcbiAgICAgICAgICAgIG9wdHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhcml0eSA9IChvcHRzICYmIG9wdHMuYXJpdHkpIHx8IHRhc2subGVuZ3RoO1xuICAgICAgICBpZiAoaXNBc3luYyh0YXNrKSkge1xuICAgICAgICAgICAgYXJpdHkgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX3Rhc2sgPSB3cmFwQXN5bmModGFzayk7XG4gICAgICAgIHJldHVybiBpbml0aWFsUGFyYW1zKChhcmdzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgYXJpdHkgLSAxIHx8IGNhbGxiYWNrID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB0YXNrRm4oY2IpIHtcbiAgICAgICAgICAgICAgICBfdGFzayguLi5hcmdzLCBjYik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRzKSByZXRyeShvcHRzLCB0YXNrRm4sIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGVsc2UgcmV0cnkodGFza0ZuLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVuIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGB0YXNrc2AgY29sbGVjdGlvbiBpbiBzZXJpZXMsIGVhY2ggb25lIHJ1bm5pbmcgb25jZVxuICAgICAqIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiBJZiBhbnkgZnVuY3Rpb25zIGluIHRoZSBzZXJpZXMgcGFzcyBhblxuICAgICAqIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgbm8gbW9yZSBmdW5jdGlvbnMgYXJlIHJ1biwgYW5kIGBjYWxsYmFja2AgaXNcbiAgICAgKiBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIGVycm9yLiBPdGhlcndpc2UsIGBjYWxsYmFja2BcbiAgICAgKiByZWNlaXZlcyBhbiBhcnJheSBvZiByZXN1bHRzIHdoZW4gYHRhc2tzYCBoYXZlIGNvbXBsZXRlZC5cbiAgICAgKlxuICAgICAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5LiBFYWNoIHByb3BlcnR5IHdpbGxcbiAgICAgKiBiZSBydW4gYXMgYSBmdW5jdGlvbiwgYW5kIHRoZSByZXN1bHRzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmaW5hbCBgY2FsbGJhY2tgXG4gICAgICogYXMgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIFRoaXMgY2FuIGJlIGEgbW9yZSByZWFkYWJsZSB3YXkgb2YgaGFuZGxpbmdcbiAgICAgKiAgcmVzdWx0cyBmcm9tIHtAbGluayBhc3luYy5zZXJpZXN9LlxuICAgICAqXG4gICAgICogKipOb3RlKiogdGhhdCB3aGlsZSBtYW55IGltcGxlbWVudGF0aW9ucyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2Ygb2JqZWN0XG4gICAgICogcHJvcGVydGllcywgdGhlIFtFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb25dKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjYpXG4gICAgICogZXhwbGljaXRseSBzdGF0ZXMgdGhhdFxuICAgICAqXG4gICAgICogPiBUaGUgbWVjaGFuaWNzIGFuZCBvcmRlciBvZiBlbnVtZXJhdGluZyB0aGUgcHJvcGVydGllcyBpcyBub3Qgc3BlY2lmaWVkLlxuICAgICAqXG4gICAgICogU28gaWYgeW91IHJlbHkgb24gdGhlIG9yZGVyIGluIHdoaWNoIHlvdXIgc2VyaWVzIG9mIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQsXG4gICAgICogYW5kIHdhbnQgdGhpcyB0byB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMsIGNvbnNpZGVyIHVzaW5nIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQG5hbWUgc2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIGNvbnRhaW5pbmdcbiAgICAgKiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byBydW4gaW4gc2VyaWVzLlxuICAgICAqIEVhY2ggZnVuY3Rpb24gY2FuIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIHJ1biBvbmNlIGFsbCB0aGVcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIHJlc3VsdHMgYXJyYXkgKG9yIG9iamVjdClcbiAgICAgKiBjb250YWluaW5nIGFsbCB0aGUgcmVzdWx0IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGB0YXNrYCBjYWxsYmFja3MuIEludm9rZWRcbiAgICAgKiB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy9Vc2luZyBDYWxsYmFja3NcbiAgICAgKiBhc3luYy5zZXJpZXMoW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBvYmplY3RzIGluc3RlYWQgb2YgYXJyYXlzXG4gICAgICogYXN5bmMuc2VyaWVzKHtcbiAgICAgKiAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAxKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgLy8gdGhlbiBkbyBhbm90aGVyIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAyKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnNlcmllcyhbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0byBbJ29uZScsJ3R3byddXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYy5zZXJpZXMoe1xuICAgICAqICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvOiB7IG9uZTogMSwgdHdvOiAyIH1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuc2VyaWVzKFtcbiAgICAgKiAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgLy8gZG8gc29tZSBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBkbyBhbm90aGVyIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgICAgICAgICB9XG4gICAgICogICAgICAgICBdKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0byBbJ29uZScsJ3R3byddXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnBhcmFsbGVsKHtcbiAgICAgKiAgICAgICAgICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgICAgICAgICB9XG4gICAgICogICAgICAgICB9KTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcmllcyh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9wYXJhbGxlbChlYWNoT2ZTZXJpZXMkMSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgYGNvbGxgIHNhdGlzZmllcyBhbiBhc3luYyB0ZXN0LlxuICAgICAqIElmIGFueSBpdGVyYXRlZSBjYWxsIHJldHVybnMgYHRydWVgLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5XG4gICAgICogY2FsbGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgc29tZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBhbnlcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9ucyBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIGByZXN1bHRgIHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGUgYXN5bmNcbiAgICAgKiB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXIzL2ZpbGU1LnR4dCddLCBmaWxlRXhpc3RzLFxuICAgICAqICAgIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgIC8vIHRydWVcbiAgICAgKiAgICAgICAgLy8gcmVzdWx0IGlzIHRydWUgc2luY2Ugc29tZSBmaWxlIGluIHRoZSBsaXN0IGV4aXN0c1xuICAgICAqICAgIH1cbiAgICAgKik7XG4gICAgICpcbiAgICAgKiBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXI0L21pc3NpbmcudHh0J10sIGZpbGVFeGlzdHMsXG4gICAgICogICAgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIG5vbmUgb2YgdGhlIGZpbGVzIGV4aXN0c1xuICAgICAqICAgIH1cbiAgICAgKik7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjMvZmlsZTUudHh0J10sIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIHRydWVcbiAgICAgKiAgICAgLy8gcmVzdWx0IGlzIHRydWUgc2luY2Ugc29tZSBmaWxlIGluIHRoZSBsaXN0IGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXN5bmMuc29tZShbJ2RpcjEvbWlzc2luZy50eHQnLCdkaXIyL21pc3NpbmcudHh0JywnZGlyNC9taXNzaW5nLnR4dCddLCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBmYWxzZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2Ugbm9uZSBvZiB0aGUgZmlsZXMgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXIzL2ZpbGU1LnR4dCddLCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB0cnVlXG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBzb21lIGZpbGUgaW4gdGhlIGxpc3QgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXI0L21pc3NpbmcudHh0J10sIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIGZhbHNlXG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2Ugbm9uZSBvZiB0aGUgZmlsZXMgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWUoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKEJvb2xlYW4sIHJlcyA9PiByZXMpKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBzb21lJDEgPSBhd2FpdGlmeShzb21lLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgc29tZWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5zb21lfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNvbWVMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnNvbWVde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5zb21lfVxuICAgICAqIEBhbGlhcyBhbnlMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9ucyBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIGByZXN1bHRgIHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGUgYXN5bmNcbiAgICAgKiB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb21lTGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3RlcihCb29sZWFuLCByZXMgPT4gcmVzKShlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgc29tZUxpbWl0JDEgPSBhd2FpdGlmeShzb21lTGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2Bzb21lYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnNvbWV9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNvbWVTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5zb21lXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuc29tZX1cbiAgICAgKiBAYWxpYXMgYW55U2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW1cbiAgICAgKiBpbiB0aGUgY29sbGVjdGlvbnMgaW4gc2VyaWVzLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gYHJlc3VsdGAgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgaXRlcmF0ZWUgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luY1xuICAgICAqIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWVTZXJpZXMoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKEJvb2xlYW4sIHJlcyA9PiByZXMpKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBzb21lU2VyaWVzJDEgPSBhd2FpdGlmeShzb21lU2VyaWVzLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFNvcnRzIGEgbGlzdCBieSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGVhY2ggYGNvbGxgIHZhbHVlIHRocm91Z2ggYW4gYXN5bmNcbiAgICAgKiBgaXRlcmF0ZWVgLlxuICAgICAqXG4gICAgICogQG5hbWUgc29ydEJ5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIHZhbHVlIHRvIHVzZSBhcyB0aGUgc29ydCBjcml0ZXJpYSBhc1xuICAgICAqIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgdGhlIGl0ZW1zXG4gICAgICogZnJvbSB0aGUgb3JpZ2luYWwgYGNvbGxgIHNvcnRlZCBieSB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBgaXRlcmF0ZWVgXG4gICAgICogY2FsbHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gYmlnZmlsZS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjUxMTAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBtZWRpdW1maWxlLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gc21hbGxmaWxlLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMjEgYnl0ZXMgaW4gc2l6ZVxuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZ2V0RmlsZVNpemVJbkJ5dGVzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnN0YXQoZmlsZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdiaWdmaWxlLnR4dCddLCBnZXRGaWxlU2l6ZUluQnl0ZXMsXG4gICAgICogICAgIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgICAgICAvLyBmaWxlIHNpemUgKGFzY2VuZGluZyBieSBkZWZhdWx0KSwgZS5nLlxuICAgICAqICAgICAgICAgICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIEJ5IG1vZGlmeWluZyB0aGUgY2FsbGJhY2sgcGFyYW1ldGVyIHRoZVxuICAgICAqIC8vIHNvcnRpbmcgb3JkZXIgY2FuIGJlIGluZmx1ZW5jZWQ6XG4gICAgICpcbiAgICAgKiAvLyBhc2NlbmRpbmcgb3JkZXJcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdiaWdmaWxlLnR4dCddLCBmdW5jdGlvbihmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwgZnVuY3Rpb24oZ2V0RmlsZVNpemVFcnIsIGZpbGVTaXplKSB7XG4gICAgICogICAgICAgICBpZiAoZ2V0RmlsZVNpemVFcnIpIHJldHVybiBjYWxsYmFjayhnZXRGaWxlU2l6ZUVycik7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgICAgICAvLyBmaWxlIHNpemUgKGFzY2VuZGluZyBieSBkZWZhdWx0KSwgZS5nLlxuICAgICAqICAgICAgICAgICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIGRlc2NlbmRpbmcgb3JkZXJcbiAgICAgKiBhc3luYy5zb3J0QnkoWydiaWdmaWxlLnR4dCcsJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCddLCBmdW5jdGlvbihmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwgZnVuY3Rpb24oZ2V0RmlsZVNpemVFcnIsIGZpbGVTaXplKSB7XG4gICAgICogICAgICAgICBpZiAoZ2V0RmlsZVNpemVFcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZ2V0RmlsZVNpemVFcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsZVNpemUgKiAtMSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgICAgICAvLyBmaWxlIHNpemUgKGFzY2VuZGluZyBieSBkZWZhdWx0KSwgZS5nLlxuICAgICAqICAgICAgICAgICAgIC8vIFsgJ2JpZ2ZpbGUudHh0JywgJ21lZGl1bWZpbGUudHh0JywgJ3NtYWxsZmlsZS50eHQnXVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIGhhbmRsaW5nXG4gICAgICogYXN5bmMuc29ydEJ5KFsnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0JywnbWlzc2luZ2ZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcyxcbiAgICAgKiAgICAgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgfVxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ2JpZ2ZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIG5vdyB0aGUgb3JpZ2luYWwgYXJyYXkgb2YgZmlsZXMgc29ydGVkIGJ5XG4gICAgICogICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdtaXNzaW5nZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIChhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnNvcnRCeShbJ2JpZ2ZpbGUudHh0JywnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAvLyBbICdzbWFsbGZpbGUudHh0JywgJ21lZGl1bWZpbGUudHh0JywgJ2JpZ2ZpbGUudHh0J11cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfSkoKTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIGhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5zb3J0QnkoWydtaXNzaW5nZmlsZS50eHQnLCdtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydEJ5IChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXAkMShjb2xsLCAoeCwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBfaXRlcmF0ZWUoeCwgKGVyciwgY3JpdGVyaWEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaXRlckNiKGVycik7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVyciwge3ZhbHVlOiB4LCBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0cy5zb3J0KGNvbXBhcmF0b3IpLm1hcCh2ID0+IHYudmFsdWUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZnVuY3Rpb24gY29tcGFyYXRvcihsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhLCBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIHNvcnRCeSQxID0gYXdhaXRpZnkoc29ydEJ5LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgYSB0aW1lIGxpbWl0IG9uIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNhbGxcbiAgICAgKiBpdHMgY2FsbGJhY2sgd2l0aGluIHRoZSBzcGVjaWZpZWQgbWlsbGlzZWNvbmRzLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFcbiAgICAgKiB0aW1lb3V0IGVycm9yLiBUaGUgY29kZSBwcm9wZXJ0eSBmb3IgdGhlIGVycm9yIG9iamVjdCB3aWxsIGJlIGAnRVRJTUVET1VUJ2AuXG4gICAgICpcbiAgICAgKiBAbmFtZSB0aW1lb3V0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGFzeW5jRm4gLSBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gbGltaXQgaW4gdGltZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWlsbGlzZWNvbmRzIC0gVGhlIHNwZWNpZmllZCB0aW1lIGxpbWl0LlxuICAgICAqIEBwYXJhbSB7Kn0gW2luZm9dIC0gQW55IHZhcmlhYmxlIHlvdSB3YW50IGF0dGFjaGVkIChgc3RyaW5nYCwgYG9iamVjdGAsIGV0YylcbiAgICAgKiB0byB0aW1lb3V0IEVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLi5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGFueVxuICAgICAqIG9mIHRoZSBjb250cm9sIGZsb3cgZnVuY3Rpb25zLlxuICAgICAqIEludm9rZSB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB5b3Ugd291bGQgYGFzeW5jRnVuY2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIG15RnVuY3Rpb24oZm9vLCBjYWxsYmFjaykge1xuICAgICAqICAgICBkb0FzeW5jVGFzayhmb28sIGZ1bmN0aW9uKGVyciwgZGF0YSkge1xuICAgICAqICAgICAgICAgLy8gaGFuZGxlIGVycm9yc1xuICAgICAqICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICpcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWUgc3R1ZmYgLi4uXG4gICAgICpcbiAgICAgKiAgICAgICAgIC8vIHJldHVybiBwcm9jZXNzZWQgZGF0YVxuICAgICAqICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIGRhdGEpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IGFzeW5jLnRpbWVvdXQobXlGdW5jdGlvbiwgMTAwMCk7XG4gICAgICpcbiAgICAgKiAvLyBjYWxsIGB3cmFwcGVkYCBhcyB5b3Ugd291bGQgYG15RnVuY3Rpb25gXG4gICAgICogd3JhcHBlZCh7IGJhcjogJ2JhcicgfSwgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICogICAgIC8vIGlmIGBteUZ1bmN0aW9uYCB0YWtlcyA8IDEwMDAgbXMgdG8gZXhlY3V0ZSwgYGVycmBcbiAgICAgKiAgICAgLy8gYW5kIGBkYXRhYCB3aWxsIGhhdmUgdGhlaXIgZXhwZWN0ZWQgdmFsdWVzXG4gICAgICpcbiAgICAgKiAgICAgLy8gZWxzZSBgZXJyYCB3aWxsIGJlIGFuIEVycm9yIHdpdGggdGhlIGNvZGUgJ0VUSU1FRE9VVCdcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lb3V0KGFzeW5jRm4sIG1pbGxpc2Vjb25kcywgaW5mbykge1xuICAgICAgICB2YXIgZm4gPSB3cmFwQXN5bmMoYXN5bmNGbik7XG5cbiAgICAgICAgcmV0dXJuIGluaXRpYWxQYXJhbXMoKGFyZ3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICB2YXIgdGltZWRPdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciB0aW1lcjtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXN5bmNGbi5uYW1lIHx8ICdhbm9ueW1vdXMnO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvciAgPSBuZXcgRXJyb3IoJ0NhbGxiYWNrIGZ1bmN0aW9uIFwiJyArIG5hbWUgKyAnXCIgdGltZWQgb3V0LicpO1xuICAgICAgICAgICAgICAgIGVycm9yLmNvZGUgPSAnRVRJTUVET1VUJztcbiAgICAgICAgICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5pbmZvID0gaW5mbztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZWRPdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXJncy5wdXNoKCguLi5jYkFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbWVkT3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKC4uLmNiQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHNldHVwIHRpbWVyIGFuZCBjYWxsIG9yaWdpbmFsIGZ1bmN0aW9uXG4gICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQodGltZW91dENhbGxiYWNrLCBtaWxsaXNlY29uZHMpO1xuICAgICAgICAgICAgZm4oLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJhbmdlKHNpemUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5KHNpemUpO1xuICAgICAgICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgICAgICAgICByZXN1bHRbc2l6ZV0gPSBzaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW3RpbWVzXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cudGltZXN9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSB0aW1lc0xpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMudGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc31cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IC0gVGhlIG51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgYG5gIHRpbWVzLlxuICAgICAqIEludm9rZWQgd2l0aCB0aGUgaXRlcmF0aW9uIGluZGV4IGFuZCBhIGNhbGxiYWNrOiAobiwgbmV4dCkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBzZWUgW2FzeW5jLm1hcF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0uXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lc0xpbWl0KGNvdW50LCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICByZXR1cm4gbWFwTGltaXQkMShyYW5nZShjb3VudCksIGxpbWl0LCBfaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbiBgbmAgdGltZXMsIGFuZCBhY2N1bXVsYXRlcyByZXN1bHRzIGluIHRoZSBzYW1lXG4gICAgICogbWFubmVyIHlvdSB3b3VsZCB1c2Ugd2l0aCBbbWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcnVuIHRoZSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgYG5gIHRpbWVzLlxuICAgICAqIEludm9rZWQgd2l0aCB0aGUgaXRlcmF0aW9uIGluZGV4IGFuZCBhIGNhbGxiYWNrOiAobiwgbmV4dCkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBzZWUge0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHByb3ZpZGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFByZXRlbmQgdGhpcyBpcyBzb21lIGNvbXBsaWNhdGVkIGFzeW5jIGZhY3RvcnlcbiAgICAgKiB2YXIgY3JlYXRlVXNlciA9IGZ1bmN0aW9uKGlkLCBjYWxsYmFjaykge1xuICAgICAqICAgICBjYWxsYmFjayhudWxsLCB7XG4gICAgICogICAgICAgICBpZDogJ3VzZXInICsgaWRcbiAgICAgKiAgICAgfSk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGdlbmVyYXRlIDUgdXNlcnNcbiAgICAgKiBhc3luYy50aW1lcyg1LCBmdW5jdGlvbihuLCBuZXh0KSB7XG4gICAgICogICAgIGNyZWF0ZVVzZXIobiwgZnVuY3Rpb24oZXJyLCB1c2VyKSB7XG4gICAgICogICAgICAgICBuZXh0KGVyciwgdXNlcik7XG4gICAgICogICAgIH0pO1xuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgdXNlcnMpIHtcbiAgICAgKiAgICAgLy8gd2Ugc2hvdWxkIG5vdyBoYXZlIDUgdXNlcnNcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lcyAobiwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aW1lc0xpbWl0KG4sIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW3RpbWVzXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cudGltZXN9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVzU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMudGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc31cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIFRoZSBhc3luYyBmdW5jdGlvbiB0byBjYWxsIGBuYCB0aW1lcy5cbiAgICAgKiBJbnZva2VkIHdpdGggdGhlIGl0ZXJhdGlvbiBpbmRleCBhbmQgYSBjYWxsYmFjazogKG4sIG5leHQpLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gc2VlIHtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVzU2VyaWVzIChuLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRpbWVzTGltaXQobiwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgcmVsYXRpdmUgb2YgYHJlZHVjZWAuICBUYWtlcyBhbiBPYmplY3Qgb3IgQXJyYXksIGFuZCBpdGVyYXRlcyBvdmVyIGVhY2hcbiAgICAgKiBlbGVtZW50IGluIHBhcmFsbGVsLCBlYWNoIHN0ZXAgcG90ZW50aWFsbHkgbXV0YXRpbmcgYW4gYGFjY3VtdWxhdG9yYCB2YWx1ZS5cbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgYWNjdW11bGF0b3IgZGVmYXVsdHMgdG8gdGhlIHR5cGUgb2YgY29sbGVjdGlvbiBwYXNzZWQgaW4uXG4gICAgICpcbiAgICAgKiBAbmFtZSB0cmFuc2Zvcm1cbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSAtIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSB0cmFuc2Zvcm0uICBJZiBvbWl0dGVkLFxuICAgICAqIGl0IHdpbGwgZGVmYXVsdCB0byBhbiBlbXB0eSBPYmplY3Qgb3IgQXJyYXksIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBgY29sbGBcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiBhcHBsaWVkIHRvIGVhY2ggaXRlbSBpbiB0aGVcbiAgICAgKiBjb2xsZWN0aW9uIHRoYXQgcG90ZW50aWFsbHkgbW9kaWZpZXMgdGhlIGFjY3VtdWxhdG9yLlxuICAgICAqIEludm9rZWQgd2l0aCAoYWNjdW11bGF0b3IsIGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IGlzIHRoZSB0cmFuc2Zvcm1lZCBhY2N1bXVsYXRvci5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKlxuICAgICAqIC8vIGhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgaHVtYW4tcmVhZGFibGUgc2l6ZSBmb3JtYXQgZnJvbSBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKGJ5dGVzLCBkZWNpbWFscyA9IDIpIHtcbiAgICAgKiAgIC8vIGltcGxlbWVudGF0aW9uIG5vdCBpbmNsdWRlZCBmb3IgYnJldml0eVxuICAgICAqICAgcmV0dXJuIGh1bWFuUmVhZGJsZUZpbGVzaXplO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSwgdHJhbnNmb3JtZWQgdG8gaHVtYW4tcmVhZGFibGUgZm9ybWF0XG4gICAgICogLy8gZS5nLiAxMDI0IGJ5dGVzID0gMUtCLCAxMjM0IGJ5dGVzID0gMS4yMSBLQiwgMTA0ODU3NiBieXRlcyA9IDFNQiwgZXRjLlxuICAgICAqIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVTaXplKGFjYywgdmFsdWUsIGtleSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdCh2YWx1ZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBhY2Nba2V5XSA9IGZvcm1hdEJ5dGVzKHN0YXQuc2l6ZSk7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMudHJhbnNmb3JtKGZpbGVMaXN0LCB0cmFuc2Zvcm1GaWxlU2l6ZSwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIFsgJzEwMDAgQnl0ZXMnLCAnMS45NSBLQicsICcyLjkzIEtCJyBdXG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMudHJhbnNmb3JtKGZpbGVMaXN0LCB0cmFuc2Zvcm1GaWxlU2l6ZSlcbiAgICAgKiAudGhlbihyZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBbICcxMDAwIEJ5dGVzJywgJzEuOTUgS0InLCAnMi45MyBLQicgXVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIChhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMudHJhbnNmb3JtKGZpbGVMaXN0LCB0cmFuc2Zvcm1GaWxlU2l6ZSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gWyAnMTAwMCBCeXRlcycsICcxLjk1IEtCJywgJzIuOTMgS0InIF1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfSkoKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKlxuICAgICAqIC8vIGhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgaHVtYW4tcmVhZGFibGUgc2l6ZSBmb3JtYXQgZnJvbSBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKGJ5dGVzLCBkZWNpbWFscyA9IDIpIHtcbiAgICAgKiAgIC8vIGltcGxlbWVudGF0aW9uIG5vdCBpbmNsdWRlZCBmb3IgYnJldml0eVxuICAgICAqICAgcmV0dXJuIGh1bWFuUmVhZGJsZUZpbGVzaXplO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVNYXAgPSB7IGYxOiAnZmlsZTEudHh0JywgZjI6ICdmaWxlMi50eHQnLCBmMzogJ2ZpbGUzLnR4dCcgfTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSwgdHJhbnNmb3JtZWQgdG8gaHVtYW4tcmVhZGFibGUgZm9ybWF0XG4gICAgICogLy8gZS5nLiAxMDI0IGJ5dGVzID0gMUtCLCAxMjM0IGJ5dGVzID0gMS4yMSBLQiwgMTA0ODU3NiBieXRlcyA9IDFNQiwgZXRjLlxuICAgICAqIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVTaXplKGFjYywgdmFsdWUsIGtleSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdCh2YWx1ZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBhY2Nba2V5XSA9IGZvcm1hdEJ5dGVzKHN0YXQuc2l6ZSk7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMudHJhbnNmb3JtKGZpbGVNYXAsIHRyYW5zZm9ybUZpbGVTaXplLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8geyBmMTogJzEwMDAgQnl0ZXMnLCBmMjogJzEuOTUgS0InLCBmMzogJzIuOTMgS0InIH1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZU1hcCwgdHJhbnNmb3JtRmlsZVNpemUpXG4gICAgICogLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8geyBmMTogJzEwMDAgQnl0ZXMnLCBmMjogJzEuOTUgS0InLCBmMzogJzIuOTMgS0InIH1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMudHJhbnNmb3JtKGZpbGVNYXAsIHRyYW5zZm9ybUZpbGVTaXplKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7IGYxOiAnMTAwMCBCeXRlcycsIGYyOiAnMS45NSBLQicsIGYzOiAnMi45MyBLQicgfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm0gKGNvbGwsIGFjY3VtdWxhdG9yLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPD0gMyAmJiB0eXBlb2YgYWNjdW11bGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0ZWU7XG4gICAgICAgICAgICBpdGVyYXRlZSA9IGFjY3VtdWxhdG9yO1xuICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBBcnJheS5pc0FycmF5KGNvbGwpID8gW10gOiB7fTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2sgfHwgcHJvbWlzZUNhbGxiYWNrKCkpO1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcblxuICAgICAgICBlYWNoT2YkMShjb2xsLCAodiwgaywgY2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZShhY2N1bXVsYXRvciwgdiwgaywgY2IpO1xuICAgICAgICB9LCBlcnIgPT4gY2FsbGJhY2soZXJyLCBhY2N1bXVsYXRvcikpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2tbUFJPTUlTRV9TWU1CT0xdXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXQgcnVucyBlYWNoIHRhc2sgaW4gc2VyaWVzIGJ1dCBzdG9wcyB3aGVuZXZlciBhbnkgb2YgdGhlIGZ1bmN0aW9ucyB3ZXJlXG4gICAgICogc3VjY2Vzc2Z1bC4gSWYgb25lIG9mIHRoZSB0YXNrcyB3ZXJlIHN1Y2Nlc3NmdWwsIHRoZSBgY2FsbGJhY2tgIHdpbGwgYmVcbiAgICAgKiBwYXNzZWQgdGhlIHJlc3VsdCBvZiB0aGUgc3VjY2Vzc2Z1bCB0YXNrLiBJZiBhbGwgdGFza3MgZmFpbCwgdGhlIGNhbGxiYWNrXG4gICAgICogd2lsbCBiZSBwYXNzZWQgdGhlIGVycm9yIGFuZCByZXN1bHQgKGlmIGFueSkgb2YgdGhlIGZpbmFsIGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSB0cnlFYWNoXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRvXG4gICAgICogcnVuLCBlYWNoIGZ1bmN0aW9uIGlzIHBhc3NlZCBhIGBjYWxsYmFjayhlcnIsIHJlc3VsdClgIGl0IG11c3QgY2FsbCBvblxuICAgICAqIGNvbXBsZXRpb24gd2l0aCBhbiBlcnJvciBgZXJyYCAod2hpY2ggY2FuIGJlIGBudWxsYCkgYW5kIGFuIG9wdGlvbmFsIGByZXN1bHRgXG4gICAgICogdmFsdWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIG9uZVxuICAgICAqIG9mIHRoZSB0YXNrcyBoYXMgc3VjY2VlZGVkLCBvciBhbGwgaGF2ZSBmYWlsZWQuIEl0IHJlY2VpdmVzIHRoZSBgZXJyYCBhbmRcbiAgICAgKiBgcmVzdWx0YCBhcmd1bWVudHMgb2YgdGhlIGxhc3QgYXR0ZW1wdCBhdCBjb21wbGV0aW5nIHRoZSBgdGFza2AuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICogYXN5bmMudHJ5RWFjaChbXG4gICAgICogICAgIGZ1bmN0aW9uIGdldERhdGFGcm9tRmlyc3RXZWJzaXRlKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBUcnkgZ2V0dGluZyB0aGUgZGF0YSBmcm9tIHRoZSBmaXJzdCB3ZWJzaXRlXG4gICAgICogICAgICAgICBjYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbiBnZXREYXRhRnJvbVNlY29uZFdlYnNpdGUoY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIEZpcnN0IHdlYnNpdGUgZmFpbGVkLFxuICAgICAqICAgICAgICAgLy8gVHJ5IGdldHRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgYmFja3VwIHdlYnNpdGVcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIE5vdyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyeUVhY2godGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IG51bGw7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHJldHVybiBlYWNoU2VyaWVzJDEodGFza3MsICh0YXNrLCB0YXNrQ2IpID0+IHtcbiAgICAgICAgICAgIHdyYXBBc3luYyh0YXNrKSgoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybiB0YXNrQ2IoZXJyKTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdF0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHRhc2tDYihlcnIgPyBudWxsIDoge30pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sICgpID0+IGNhbGxiYWNrKGVycm9yLCByZXN1bHQpKTtcbiAgICB9XG5cbiAgICB2YXIgdHJ5RWFjaCQxID0gYXdhaXRpZnkodHJ5RWFjaCk7XG5cbiAgICAvKipcbiAgICAgKiBVbmRvZXMgYSBbbWVtb2l6ZV17QGxpbmsgbW9kdWxlOlV0aWxzLm1lbW9pemV9ZCBmdW5jdGlvbiwgcmV2ZXJ0aW5nIGl0IHRvIHRoZSBvcmlnaW5hbCxcbiAgICAgKiB1bm1lbW9pemVkIGZvcm0uIEhhbmR5IGZvciB0ZXN0aW5nLlxuICAgICAqXG4gICAgICogQG5hbWUgdW5tZW1vaXplXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWVtb2l6ZV17QGxpbmsgbW9kdWxlOlV0aWxzLm1lbW9pemV9XG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZuIC0gdGhlIG1lbW9pemVkIGZ1bmN0aW9uXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IGEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgb3JpZ2luYWwgdW5tZW1vaXplZCBmdW5jdGlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVubWVtb2l6ZShmbikge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwZWF0ZWRseSBjYWxsIGBpdGVyYXRlZWAsIHdoaWxlIGB0ZXN0YCByZXR1cm5zIGB0cnVlYC4gQ2FsbHMgYGNhbGxiYWNrYCB3aGVuXG4gICAgICogc3RvcHBlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqXG4gICAgICogQG5hbWUgd2hpbHN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gdGVzdCAtIGFzeW5jaHJvbm91cyB0cnV0aCB0ZXN0IHRvIHBlcmZvcm0gYmVmb3JlIGVhY2hcbiAgICAgKiBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYC4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBlYWNoIHRpbWVcbiAgICAgKiBgdGVzdGAgcGFzc2VzLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHRlc3RcbiAgICAgKiBmdW5jdGlvbiBoYXMgZmFpbGVkIGFuZCByZXBlYXRlZCBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYCBoYXMgc3RvcHBlZC4gYGNhbGxiYWNrYFxuICAgICAqIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzXG4gICAgICogY2FsbGJhY2suIEludm9rZWQgd2l0aCAoZXJyLCBbcmVzdWx0c10pO1xuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgY291bnQgPSAwO1xuICAgICAqIGFzeW5jLndoaWxzdChcbiAgICAgKiAgICAgZnVuY3Rpb24gdGVzdChjYikgeyBjYihudWxsLCBjb3VudCA8IDUpOyB9LFxuICAgICAqICAgICBmdW5jdGlvbiBpdGVyKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjb3VudCsrO1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBjb3VudCk7XG4gICAgICogICAgICAgICB9LCAxMDAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKGVyciwgbikge1xuICAgICAqICAgICAgICAgLy8gNSBzZWNvbmRzIGhhdmUgcGFzc2VkLCBuID0gNVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3aGlsc3QodGVzdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25seU9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgdmFyIF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyLCAuLi5yZXN0KSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIHJlc3VsdHMgPSByZXN0O1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgICAgICAgIF90ZXN0KGNoZWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdHJ1dGgpIHJldHVybiBjYWxsYmFjayhudWxsLCAuLi5yZXN1bHRzKTtcbiAgICAgICAgICAgIF9mbihuZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfdGVzdChjaGVjayk7XG4gICAgfVxuICAgIHZhciB3aGlsc3QkMSA9IGF3YWl0aWZ5KHdoaWxzdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBSZXBlYXRlZGx5IGNhbGwgYGl0ZXJhdGVlYCB1bnRpbCBgdGVzdGAgcmV0dXJucyBgdHJ1ZWAuIENhbGxzIGBjYWxsYmFja2Agd2hlblxuICAgICAqIHN0b3BwZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gYGNhbGxiYWNrYCB3aWxsIGJlIHBhc3NlZCBhbiBlcnJvciBhbmQgYW55XG4gICAgICogYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogVGhlIGludmVyc2Ugb2YgW3doaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH0uXG4gICAgICpcbiAgICAgKiBAbmFtZSB1bnRpbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLndoaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBiZWZvcmUgZWFjaFxuICAgICAqIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZVxuICAgICAqIGB0ZXN0YCBmYWlscy4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHRoZSB0ZXN0XG4gICAgICogZnVuY3Rpb24gaGFzIHBhc3NlZCBhbmQgcmVwZWF0ZWQgZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAgaGFzIHN0b3BwZWQuIGBjYWxsYmFja2BcbiAgICAgKiB3aWxsIGJlIHBhc3NlZCBhbiBlcnJvciBhbmQgYW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZpbmFsIGBpdGVyYXRlZWAnc1xuICAgICAqIGNhbGxiYWNrLiBJbnZva2VkIHdpdGggKGVyciwgW3Jlc3VsdHNdKTtcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG5vdCBwYXNzZWRcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgcmVzdWx0cyA9IFtdXG4gICAgICogbGV0IGZpbmlzaGVkID0gZmFsc2VcbiAgICAgKiBhc3luYy51bnRpbChmdW5jdGlvbiB0ZXN0KGNiKSB7XG4gICAgICogICAgIGNiKG51bGwsIGZpbmlzaGVkKVxuICAgICAqIH0sIGZ1bmN0aW9uIGl0ZXIobmV4dCkge1xuICAgICAqICAgICBmZXRjaFBhZ2UodXJsLCAoZXJyLCBib2R5KSA9PiB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSByZXR1cm4gbmV4dChlcnIpXG4gICAgICogICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoYm9keS5vYmplY3RzKVxuICAgICAqICAgICAgICAgZmluaXNoZWQgPSAhIWJvZHkubmV4dFxuICAgICAqICAgICAgICAgbmV4dChlcnIpXG4gICAgICogICAgIH0pXG4gICAgICogfSwgZnVuY3Rpb24gZG9uZSAoZXJyKSB7XG4gICAgICogICAgIC8vIGFsbCBwYWdlcyBoYXZlIGJlZW4gZmV0Y2hlZFxuICAgICAqIH0pXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW50aWwodGVzdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICByZXR1cm4gd2hpbHN0JDEoKGNiKSA9PiBfdGVzdCgoZXJyLCB0cnV0aCkgPT4gY2IgKGVyciwgIXRydXRoKSksIGl0ZXJhdGVlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgYHRhc2tzYCBhcnJheSBvZiBmdW5jdGlvbnMgaW4gc2VyaWVzLCBlYWNoIHBhc3NpbmcgdGhlaXIgcmVzdWx0cyB0b1xuICAgICAqIHRoZSBuZXh0IGluIHRoZSBhcnJheS4gSG93ZXZlciwgaWYgYW55IG9mIHRoZSBgdGFza3NgIHBhc3MgYW4gZXJyb3IgdG8gdGhlaXJcbiAgICAgKiBvd24gY2FsbGJhY2ssIHRoZSBuZXh0IGZ1bmN0aW9uIGlzIG5vdCBleGVjdXRlZCwgYW5kIHRoZSBtYWluIGBjYWxsYmFja2AgaXNcbiAgICAgKiBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICpcbiAgICAgKiBAbmFtZSB3YXRlcmZhbGxcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheX0gdGFza3MgLSBBbiBhcnJheSBvZiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufVxuICAgICAqIHRvIHJ1bi5cbiAgICAgKiBFYWNoIGZ1bmN0aW9uIHNob3VsZCBjb21wbGV0ZSB3aXRoIGFueSBudW1iZXIgb2YgYHJlc3VsdGAgdmFsdWVzLlxuICAgICAqIFRoZSBgcmVzdWx0YCB2YWx1ZXMgd2lsbCBiZSBwYXNzZWQgYXMgYXJndW1lbnRzLCBpbiBvcmRlciwgdG8gdGhlIG5leHQgdGFzay5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYWxsIHRoZVxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gVGhpcyB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzdWx0cyBvZiB0aGUgbGFzdCB0YXNrJ3NcbiAgICAgKiBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJywgJ3R3bycpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihhcmcxLCBhcmcyLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXJnMSBub3cgZXF1YWxzICdvbmUnIGFuZCBhcmcyIG5vdyBlcXVhbHMgJ3R3bydcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0aHJlZScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihhcmcxLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXJnMSBub3cgZXF1YWxzICd0aHJlZSdcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkb25lJyk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgJ2RvbmUnXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBPciwgd2l0aCBuYW1lZCBmdW5jdGlvbnM6XG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgbXlGaXJzdEZ1bmN0aW9uLFxuICAgICAqICAgICBteVNlY29uZEZ1bmN0aW9uLFxuICAgICAqICAgICBteUxhc3RGdW5jdGlvbixcbiAgICAgKiBdLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgJ2RvbmUnXG4gICAgICogfSk7XG4gICAgICogZnVuY3Rpb24gbXlGaXJzdEZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgIGNhbGxiYWNrKG51bGwsICdvbmUnLCAndHdvJyk7XG4gICAgICogfVxuICAgICAqIGZ1bmN0aW9uIG15U2Vjb25kRnVuY3Rpb24oYXJnMSwgYXJnMiwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgLy8gYXJnMSBub3cgZXF1YWxzICdvbmUnIGFuZCBhcmcyIG5vdyBlcXVhbHMgJ3R3bydcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gICAgICogfVxuICAgICAqIGZ1bmN0aW9uIG15TGFzdEZ1bmN0aW9uKGFyZzEsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIC8vIGFyZzEgbm93IGVxdWFscyAndGhyZWUnXG4gICAgICogICAgIGNhbGxiYWNrKG51bGwsICdkb25lJyk7XG4gICAgICogfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdhdGVyZmFsbCAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrcykpIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpKTtcbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB2YXIgdGFza0luZGV4ID0gMDtcblxuICAgICAgICBmdW5jdGlvbiBuZXh0VGFzayhhcmdzKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHdyYXBBc3luYyh0YXNrc1t0YXNrSW5kZXgrK10pO1xuICAgICAgICAgICAgdGFzayguLi5hcmdzLCBvbmx5T25jZShuZXh0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBuZXh0KGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVyblxuICAgICAgICAgICAgaWYgKGVyciB8fCB0YXNrSW5kZXggPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dFRhc2soYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0VGFzayhbXSk7XG4gICAgfVxuXG4gICAgdmFyIHdhdGVyZmFsbCQxID0gYXdhaXRpZnkod2F0ZXJmYWxsKTtcblxuICAgIC8qKlxuICAgICAqIEFuIFwiYXN5bmMgZnVuY3Rpb25cIiBpbiB0aGUgY29udGV4dCBvZiBBc3luYyBpcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gd2l0aFxuICAgICAqIGEgdmFyaWFibGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIHdpdGggdGhlIGZpbmFsIHBhcmFtZXRlciBiZWluZyBhIGNhbGxiYWNrLlxuICAgICAqIChgZnVuY3Rpb24gKGFyZzEsIGFyZzIsIC4uLiwgY2FsbGJhY2spIHt9YClcbiAgICAgKiBUaGUgZmluYWwgY2FsbGJhY2sgaXMgb2YgdGhlIGZvcm0gYGNhbGxiYWNrKGVyciwgcmVzdWx0cy4uLilgLCB3aGljaCBtdXN0IGJlXG4gICAgICogY2FsbGVkIG9uY2UgdGhlIGZ1bmN0aW9uIGlzIGNvbXBsZXRlZC4gIFRoZSBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIHdpdGggYVxuICAgICAqIEVycm9yIGFzIGl0cyBmaXJzdCBhcmd1bWVudCB0byBzaWduYWwgdGhhdCBhbiBlcnJvciBvY2N1cnJlZC5cbiAgICAgKiBPdGhlcndpc2UsIGlmIG5vIGVycm9yIG9jY3VycmVkLCBpdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggYG51bGxgIGFzIHRoZSBmaXJzdFxuICAgICAqIGFyZ3VtZW50LCBhbmQgYW55IGFkZGl0aW9uYWwgYHJlc3VsdGAgYXJndW1lbnRzIHRoYXQgbWF5IGFwcGx5LCB0byBzaWduYWxcbiAgICAgKiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uXG4gICAgICogVGhlIGNhbGxiYWNrIG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSwgaWRlYWxseSBvbiBhIGxhdGVyIHRpY2sgb2YgdGhlXG4gICAgICogSmF2YVNjcmlwdCBldmVudCBsb29wLlxuICAgICAqXG4gICAgICogVGhpcyB0eXBlIG9mIGZ1bmN0aW9uIGlzIGFsc28gcmVmZXJyZWQgdG8gYXMgYSBcIk5vZGUtc3R5bGUgYXN5bmMgZnVuY3Rpb25cIixcbiAgICAgKiBvciBhIFwiY29udGludWF0aW9uIHBhc3Npbmctc3R5bGUgZnVuY3Rpb25cIiAoQ1BTKS4gTW9zdCBvZiB0aGUgbWV0aG9kcyBvZiB0aGlzXG4gICAgICogbGlicmFyeSBhcmUgdGhlbXNlbHZlcyBDUFMvTm9kZS1zdHlsZSBhc3luYyBmdW5jdGlvbnMsIG9yIGZ1bmN0aW9ucyB0aGF0XG4gICAgICogcmV0dXJuIENQUy9Ob2RlLXN0eWxlIGFzeW5jIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIFdoZXJldmVyIHdlIGFjY2VwdCBhIE5vZGUtc3R5bGUgYXN5bmMgZnVuY3Rpb24sIHdlIGFsc28gZGlyZWN0bHkgYWNjZXB0IGFuXG4gICAgICogW0VTMjAxNyBgYXN5bmNgIGZ1bmN0aW9uXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9TdGF0ZW1lbnRzL2FzeW5jX2Z1bmN0aW9ufS5cbiAgICAgKiBJbiB0aGlzIGNhc2UsIHRoZSBgYXN5bmNgIGZ1bmN0aW9uIHdpbGwgbm90IGJlIHBhc3NlZCBhIGZpbmFsIGNhbGxiYWNrXG4gICAgICogYXJndW1lbnQsIGFuZCBhbnkgdGhyb3duIGVycm9yIHdpbGwgYmUgdXNlZCBhcyB0aGUgYGVycmAgYXJndW1lbnQgb2YgdGhlXG4gICAgICogaW1wbGljaXQgY2FsbGJhY2ssIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgYHJlc3VsdGAgdmFsdWUuXG4gICAgICogKGkuZS4gYSBgcmVqZWN0ZWRgIG9mIHRoZSByZXR1cm5lZCBQcm9taXNlIGJlY29tZXMgdGhlIGBlcnJgIGNhbGxiYWNrXG4gICAgICogYXJndW1lbnQsIGFuZCBhIGByZXNvbHZlZGAgdmFsdWUgYmVjb21lcyB0aGUgYHJlc3VsdGAuKVxuICAgICAqXG4gICAgICogTm90ZSwgZHVlIHRvIEphdmFTY3JpcHQgbGltaXRhdGlvbnMsIHdlIGNhbiBvbmx5IGRldGVjdCBuYXRpdmUgYGFzeW5jYFxuICAgICAqIGZ1bmN0aW9ucyBhbmQgbm90IHRyYW5zcGlsaWVkIGltcGxlbWVudGF0aW9ucy5cbiAgICAgKiBZb3VyIGVudmlyb25tZW50IG11c3QgaGF2ZSBgYXN5bmNgL2Bhd2FpdGAgc3VwcG9ydCBmb3IgdGhpcyB0byB3b3JrLlxuICAgICAqIChlLmcuIE5vZGUgPiB2Ny42LCBvciBhIHJlY2VudCB2ZXJzaW9uIG9mIGEgbW9kZXJuIGJyb3dzZXIpLlxuICAgICAqIElmIHlvdSBhcmUgdXNpbmcgYGFzeW5jYCBmdW5jdGlvbnMgdGhyb3VnaCBhIHRyYW5zcGlsZXIgKGUuZy4gQmFiZWwpLCB5b3VcbiAgICAgKiBtdXN0IHN0aWxsIHdyYXAgdGhlIGZ1bmN0aW9uIHdpdGggW2FzeW5jaWZ5XXtAbGluayBtb2R1bGU6VXRpbHMuYXN5bmNpZnl9LFxuICAgICAqIGJlY2F1c2UgdGhlIGBhc3luYyBmdW5jdGlvbmAgd2lsbCBiZSBjb21waWxlZCB0byBhbiBvcmRpbmFyeSBmdW5jdGlvbiB0aGF0XG4gICAgICogcmV0dXJucyBhIHByb21pc2UuXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IEFzeW5jRnVuY3Rpb25cbiAgICAgKiBAc3RhdGljXG4gICAgICovXG5cblxuICAgIHZhciBpbmRleCA9IHtcbiAgICAgICAgYXBwbHksXG4gICAgICAgIGFwcGx5RWFjaCxcbiAgICAgICAgYXBwbHlFYWNoU2VyaWVzLFxuICAgICAgICBhc3luY2lmeSxcbiAgICAgICAgYXV0byxcbiAgICAgICAgYXV0b0luamVjdCxcbiAgICAgICAgY2FyZ286IGNhcmdvJDEsXG4gICAgICAgIGNhcmdvUXVldWU6IGNhcmdvLFxuICAgICAgICBjb21wb3NlLFxuICAgICAgICBjb25jYXQ6IGNvbmNhdCQxLFxuICAgICAgICBjb25jYXRMaW1pdDogY29uY2F0TGltaXQkMSxcbiAgICAgICAgY29uY2F0U2VyaWVzOiBjb25jYXRTZXJpZXMkMSxcbiAgICAgICAgY29uc3RhbnQ6IGNvbnN0YW50JDEsXG4gICAgICAgIGRldGVjdDogZGV0ZWN0JDEsXG4gICAgICAgIGRldGVjdExpbWl0OiBkZXRlY3RMaW1pdCQxLFxuICAgICAgICBkZXRlY3RTZXJpZXM6IGRldGVjdFNlcmllcyQxLFxuICAgICAgICBkaXIsXG4gICAgICAgIGRvVW50aWwsXG4gICAgICAgIGRvV2hpbHN0OiBkb1doaWxzdCQxLFxuICAgICAgICBlYWNoLFxuICAgICAgICBlYWNoTGltaXQ6IGVhY2hMaW1pdCQxLFxuICAgICAgICBlYWNoT2Y6IGVhY2hPZiQxLFxuICAgICAgICBlYWNoT2ZMaW1pdDogZWFjaE9mTGltaXQkMSxcbiAgICAgICAgZWFjaE9mU2VyaWVzOiBlYWNoT2ZTZXJpZXMkMSxcbiAgICAgICAgZWFjaFNlcmllczogZWFjaFNlcmllcyQxLFxuICAgICAgICBlbnN1cmVBc3luYyxcbiAgICAgICAgZXZlcnk6IGV2ZXJ5JDEsXG4gICAgICAgIGV2ZXJ5TGltaXQ6IGV2ZXJ5TGltaXQkMSxcbiAgICAgICAgZXZlcnlTZXJpZXM6IGV2ZXJ5U2VyaWVzJDEsXG4gICAgICAgIGZpbHRlcjogZmlsdGVyJDEsXG4gICAgICAgIGZpbHRlckxpbWl0OiBmaWx0ZXJMaW1pdCQxLFxuICAgICAgICBmaWx0ZXJTZXJpZXM6IGZpbHRlclNlcmllcyQxLFxuICAgICAgICBmb3JldmVyOiBmb3JldmVyJDEsXG4gICAgICAgIGdyb3VwQnksXG4gICAgICAgIGdyb3VwQnlMaW1pdDogZ3JvdXBCeUxpbWl0JDEsXG4gICAgICAgIGdyb3VwQnlTZXJpZXMsXG4gICAgICAgIGxvZyxcbiAgICAgICAgbWFwOiBtYXAkMSxcbiAgICAgICAgbWFwTGltaXQ6IG1hcExpbWl0JDEsXG4gICAgICAgIG1hcFNlcmllczogbWFwU2VyaWVzJDEsXG4gICAgICAgIG1hcFZhbHVlcyxcbiAgICAgICAgbWFwVmFsdWVzTGltaXQ6IG1hcFZhbHVlc0xpbWl0JDEsXG4gICAgICAgIG1hcFZhbHVlc1NlcmllcyxcbiAgICAgICAgbWVtb2l6ZSxcbiAgICAgICAgbmV4dFRpY2ssXG4gICAgICAgIHBhcmFsbGVsLFxuICAgICAgICBwYXJhbGxlbExpbWl0LFxuICAgICAgICBwcmlvcml0eVF1ZXVlLFxuICAgICAgICBxdWV1ZSxcbiAgICAgICAgcmFjZTogcmFjZSQxLFxuICAgICAgICByZWR1Y2U6IHJlZHVjZSQxLFxuICAgICAgICByZWR1Y2VSaWdodCxcbiAgICAgICAgcmVmbGVjdCxcbiAgICAgICAgcmVmbGVjdEFsbCxcbiAgICAgICAgcmVqZWN0OiByZWplY3QkMSxcbiAgICAgICAgcmVqZWN0TGltaXQ6IHJlamVjdExpbWl0JDEsXG4gICAgICAgIHJlamVjdFNlcmllczogcmVqZWN0U2VyaWVzJDEsXG4gICAgICAgIHJldHJ5LFxuICAgICAgICByZXRyeWFibGUsXG4gICAgICAgIHNlcSxcbiAgICAgICAgc2VyaWVzLFxuICAgICAgICBzZXRJbW1lZGlhdGU6IHNldEltbWVkaWF0ZSQxLFxuICAgICAgICBzb21lOiBzb21lJDEsXG4gICAgICAgIHNvbWVMaW1pdDogc29tZUxpbWl0JDEsXG4gICAgICAgIHNvbWVTZXJpZXM6IHNvbWVTZXJpZXMkMSxcbiAgICAgICAgc29ydEJ5OiBzb3J0QnkkMSxcbiAgICAgICAgdGltZW91dCxcbiAgICAgICAgdGltZXMsXG4gICAgICAgIHRpbWVzTGltaXQsXG4gICAgICAgIHRpbWVzU2VyaWVzLFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIHRyeUVhY2g6IHRyeUVhY2gkMSxcbiAgICAgICAgdW5tZW1vaXplLFxuICAgICAgICB1bnRpbCxcbiAgICAgICAgd2F0ZXJmYWxsOiB3YXRlcmZhbGwkMSxcbiAgICAgICAgd2hpbHN0OiB3aGlsc3QkMSxcblxuICAgICAgICAvLyBhbGlhc2VzXG4gICAgICAgIGFsbDogZXZlcnkkMSxcbiAgICAgICAgYWxsTGltaXQ6IGV2ZXJ5TGltaXQkMSxcbiAgICAgICAgYWxsU2VyaWVzOiBldmVyeVNlcmllcyQxLFxuICAgICAgICBhbnk6IHNvbWUkMSxcbiAgICAgICAgYW55TGltaXQ6IHNvbWVMaW1pdCQxLFxuICAgICAgICBhbnlTZXJpZXM6IHNvbWVTZXJpZXMkMSxcbiAgICAgICAgZmluZDogZGV0ZWN0JDEsXG4gICAgICAgIGZpbmRMaW1pdDogZGV0ZWN0TGltaXQkMSxcbiAgICAgICAgZmluZFNlcmllczogZGV0ZWN0U2VyaWVzJDEsXG4gICAgICAgIGZsYXRNYXA6IGNvbmNhdCQxLFxuICAgICAgICBmbGF0TWFwTGltaXQ6IGNvbmNhdExpbWl0JDEsXG4gICAgICAgIGZsYXRNYXBTZXJpZXM6IGNvbmNhdFNlcmllcyQxLFxuICAgICAgICBmb3JFYWNoOiBlYWNoLFxuICAgICAgICBmb3JFYWNoU2VyaWVzOiBlYWNoU2VyaWVzJDEsXG4gICAgICAgIGZvckVhY2hMaW1pdDogZWFjaExpbWl0JDEsXG4gICAgICAgIGZvckVhY2hPZjogZWFjaE9mJDEsXG4gICAgICAgIGZvckVhY2hPZlNlcmllczogZWFjaE9mU2VyaWVzJDEsXG4gICAgICAgIGZvckVhY2hPZkxpbWl0OiBlYWNoT2ZMaW1pdCQxLFxuICAgICAgICBpbmplY3Q6IHJlZHVjZSQxLFxuICAgICAgICBmb2xkbDogcmVkdWNlJDEsXG4gICAgICAgIGZvbGRyOiByZWR1Y2VSaWdodCxcbiAgICAgICAgc2VsZWN0OiBmaWx0ZXIkMSxcbiAgICAgICAgc2VsZWN0TGltaXQ6IGZpbHRlckxpbWl0JDEsXG4gICAgICAgIHNlbGVjdFNlcmllczogZmlsdGVyU2VyaWVzJDEsXG4gICAgICAgIHdyYXBTeW5jOiBhc3luY2lmeSxcbiAgICAgICAgZHVyaW5nOiB3aGlsc3QkMSxcbiAgICAgICAgZG9EdXJpbmc6IGRvV2hpbHN0JDFcbiAgICB9O1xuXG4gICAgZXhwb3J0cy5hbGwgPSBldmVyeSQxO1xuICAgIGV4cG9ydHMuYWxsTGltaXQgPSBldmVyeUxpbWl0JDE7XG4gICAgZXhwb3J0cy5hbGxTZXJpZXMgPSBldmVyeVNlcmllcyQxO1xuICAgIGV4cG9ydHMuYW55ID0gc29tZSQxO1xuICAgIGV4cG9ydHMuYW55TGltaXQgPSBzb21lTGltaXQkMTtcbiAgICBleHBvcnRzLmFueVNlcmllcyA9IHNvbWVTZXJpZXMkMTtcbiAgICBleHBvcnRzLmFwcGx5ID0gYXBwbHk7XG4gICAgZXhwb3J0cy5hcHBseUVhY2ggPSBhcHBseUVhY2g7XG4gICAgZXhwb3J0cy5hcHBseUVhY2hTZXJpZXMgPSBhcHBseUVhY2hTZXJpZXM7XG4gICAgZXhwb3J0cy5hc3luY2lmeSA9IGFzeW5jaWZ5O1xuICAgIGV4cG9ydHMuYXV0byA9IGF1dG87XG4gICAgZXhwb3J0cy5hdXRvSW5qZWN0ID0gYXV0b0luamVjdDtcbiAgICBleHBvcnRzLmNhcmdvID0gY2FyZ28kMTtcbiAgICBleHBvcnRzLmNhcmdvUXVldWUgPSBjYXJnbztcbiAgICBleHBvcnRzLmNvbXBvc2UgPSBjb21wb3NlO1xuICAgIGV4cG9ydHMuY29uY2F0ID0gY29uY2F0JDE7XG4gICAgZXhwb3J0cy5jb25jYXRMaW1pdCA9IGNvbmNhdExpbWl0JDE7XG4gICAgZXhwb3J0cy5jb25jYXRTZXJpZXMgPSBjb25jYXRTZXJpZXMkMTtcbiAgICBleHBvcnRzLmNvbnN0YW50ID0gY29uc3RhbnQkMTtcbiAgICBleHBvcnRzLmRlZmF1bHQgPSBpbmRleDtcbiAgICBleHBvcnRzLmRldGVjdCA9IGRldGVjdCQxO1xuICAgIGV4cG9ydHMuZGV0ZWN0TGltaXQgPSBkZXRlY3RMaW1pdCQxO1xuICAgIGV4cG9ydHMuZGV0ZWN0U2VyaWVzID0gZGV0ZWN0U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5kaXIgPSBkaXI7XG4gICAgZXhwb3J0cy5kb0R1cmluZyA9IGRvV2hpbHN0JDE7XG4gICAgZXhwb3J0cy5kb1VudGlsID0gZG9VbnRpbDtcbiAgICBleHBvcnRzLmRvV2hpbHN0ID0gZG9XaGlsc3QkMTtcbiAgICBleHBvcnRzLmR1cmluZyA9IHdoaWxzdCQxO1xuICAgIGV4cG9ydHMuZWFjaCA9IGVhY2g7XG4gICAgZXhwb3J0cy5lYWNoTGltaXQgPSBlYWNoTGltaXQkMTtcbiAgICBleHBvcnRzLmVhY2hPZiA9IGVhY2hPZiQxO1xuICAgIGV4cG9ydHMuZWFjaE9mTGltaXQgPSBlYWNoT2ZMaW1pdCQxO1xuICAgIGV4cG9ydHMuZWFjaE9mU2VyaWVzID0gZWFjaE9mU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5lYWNoU2VyaWVzID0gZWFjaFNlcmllcyQxO1xuICAgIGV4cG9ydHMuZW5zdXJlQXN5bmMgPSBlbnN1cmVBc3luYztcbiAgICBleHBvcnRzLmV2ZXJ5ID0gZXZlcnkkMTtcbiAgICBleHBvcnRzLmV2ZXJ5TGltaXQgPSBldmVyeUxpbWl0JDE7XG4gICAgZXhwb3J0cy5ldmVyeVNlcmllcyA9IGV2ZXJ5U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5maWx0ZXIgPSBmaWx0ZXIkMTtcbiAgICBleHBvcnRzLmZpbHRlckxpbWl0ID0gZmlsdGVyTGltaXQkMTtcbiAgICBleHBvcnRzLmZpbHRlclNlcmllcyA9IGZpbHRlclNlcmllcyQxO1xuICAgIGV4cG9ydHMuZmluZCA9IGRldGVjdCQxO1xuICAgIGV4cG9ydHMuZmluZExpbWl0ID0gZGV0ZWN0TGltaXQkMTtcbiAgICBleHBvcnRzLmZpbmRTZXJpZXMgPSBkZXRlY3RTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZsYXRNYXAgPSBjb25jYXQkMTtcbiAgICBleHBvcnRzLmZsYXRNYXBMaW1pdCA9IGNvbmNhdExpbWl0JDE7XG4gICAgZXhwb3J0cy5mbGF0TWFwU2VyaWVzID0gY29uY2F0U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5mb2xkbCA9IHJlZHVjZSQxO1xuICAgIGV4cG9ydHMuZm9sZHIgPSByZWR1Y2VSaWdodDtcbiAgICBleHBvcnRzLmZvckVhY2ggPSBlYWNoO1xuICAgIGV4cG9ydHMuZm9yRWFjaExpbWl0ID0gZWFjaExpbWl0JDE7XG4gICAgZXhwb3J0cy5mb3JFYWNoT2YgPSBlYWNoT2YkMTtcbiAgICBleHBvcnRzLmZvckVhY2hPZkxpbWl0ID0gZWFjaE9mTGltaXQkMTtcbiAgICBleHBvcnRzLmZvckVhY2hPZlNlcmllcyA9IGVhY2hPZlNlcmllcyQxO1xuICAgIGV4cG9ydHMuZm9yRWFjaFNlcmllcyA9IGVhY2hTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZvcmV2ZXIgPSBmb3JldmVyJDE7XG4gICAgZXhwb3J0cy5ncm91cEJ5ID0gZ3JvdXBCeTtcbiAgICBleHBvcnRzLmdyb3VwQnlMaW1pdCA9IGdyb3VwQnlMaW1pdCQxO1xuICAgIGV4cG9ydHMuZ3JvdXBCeVNlcmllcyA9IGdyb3VwQnlTZXJpZXM7XG4gICAgZXhwb3J0cy5pbmplY3QgPSByZWR1Y2UkMTtcbiAgICBleHBvcnRzLmxvZyA9IGxvZztcbiAgICBleHBvcnRzLm1hcCA9IG1hcCQxO1xuICAgIGV4cG9ydHMubWFwTGltaXQgPSBtYXBMaW1pdCQxO1xuICAgIGV4cG9ydHMubWFwU2VyaWVzID0gbWFwU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5tYXBWYWx1ZXMgPSBtYXBWYWx1ZXM7XG4gICAgZXhwb3J0cy5tYXBWYWx1ZXNMaW1pdCA9IG1hcFZhbHVlc0xpbWl0JDE7XG4gICAgZXhwb3J0cy5tYXBWYWx1ZXNTZXJpZXMgPSBtYXBWYWx1ZXNTZXJpZXM7XG4gICAgZXhwb3J0cy5tZW1vaXplID0gbWVtb2l6ZTtcbiAgICBleHBvcnRzLm5leHRUaWNrID0gbmV4dFRpY2s7XG4gICAgZXhwb3J0cy5wYXJhbGxlbCA9IHBhcmFsbGVsO1xuICAgIGV4cG9ydHMucGFyYWxsZWxMaW1pdCA9IHBhcmFsbGVsTGltaXQ7XG4gICAgZXhwb3J0cy5wcmlvcml0eVF1ZXVlID0gcHJpb3JpdHlRdWV1ZTtcbiAgICBleHBvcnRzLnF1ZXVlID0gcXVldWU7XG4gICAgZXhwb3J0cy5yYWNlID0gcmFjZSQxO1xuICAgIGV4cG9ydHMucmVkdWNlID0gcmVkdWNlJDE7XG4gICAgZXhwb3J0cy5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0O1xuICAgIGV4cG9ydHMucmVmbGVjdCA9IHJlZmxlY3Q7XG4gICAgZXhwb3J0cy5yZWZsZWN0QWxsID0gcmVmbGVjdEFsbDtcbiAgICBleHBvcnRzLnJlamVjdCA9IHJlamVjdCQxO1xuICAgIGV4cG9ydHMucmVqZWN0TGltaXQgPSByZWplY3RMaW1pdCQxO1xuICAgIGV4cG9ydHMucmVqZWN0U2VyaWVzID0gcmVqZWN0U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5yZXRyeSA9IHJldHJ5O1xuICAgIGV4cG9ydHMucmV0cnlhYmxlID0gcmV0cnlhYmxlO1xuICAgIGV4cG9ydHMuc2VsZWN0ID0gZmlsdGVyJDE7XG4gICAgZXhwb3J0cy5zZWxlY3RMaW1pdCA9IGZpbHRlckxpbWl0JDE7XG4gICAgZXhwb3J0cy5zZWxlY3RTZXJpZXMgPSBmaWx0ZXJTZXJpZXMkMTtcbiAgICBleHBvcnRzLnNlcSA9IHNlcTtcbiAgICBleHBvcnRzLnNlcmllcyA9IHNlcmllcztcbiAgICBleHBvcnRzLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZSQxO1xuICAgIGV4cG9ydHMuc29tZSA9IHNvbWUkMTtcbiAgICBleHBvcnRzLnNvbWVMaW1pdCA9IHNvbWVMaW1pdCQxO1xuICAgIGV4cG9ydHMuc29tZVNlcmllcyA9IHNvbWVTZXJpZXMkMTtcbiAgICBleHBvcnRzLnNvcnRCeSA9IHNvcnRCeSQxO1xuICAgIGV4cG9ydHMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgZXhwb3J0cy50aW1lcyA9IHRpbWVzO1xuICAgIGV4cG9ydHMudGltZXNMaW1pdCA9IHRpbWVzTGltaXQ7XG4gICAgZXhwb3J0cy50aW1lc1NlcmllcyA9IHRpbWVzU2VyaWVzO1xuICAgIGV4cG9ydHMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGV4cG9ydHMudHJ5RWFjaCA9IHRyeUVhY2gkMTtcbiAgICBleHBvcnRzLnVubWVtb2l6ZSA9IHVubWVtb2l6ZTtcbiAgICBleHBvcnRzLnVudGlsID0gdW50aWw7XG4gICAgZXhwb3J0cy53YXRlcmZhbGwgPSB3YXRlcmZhbGwkMTtcbiAgICBleHBvcnRzLndoaWxzdCA9IHdoaWxzdCQxO1xuICAgIGV4cG9ydHMud3JhcFN5bmMgPSBhc3luY2lmeTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsCiAgICAidmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJ2NvbnN0YW50cycpXG5cbnZhciBvcmlnQ3dkID0gcHJvY2Vzcy5jd2RcbnZhciBjd2QgPSBudWxsXG5cbnZhciBwbGF0Zm9ybSA9IHByb2Nlc3MuZW52LkdSQUNFRlVMX0ZTX1BMQVRGT1JNIHx8IHByb2Nlc3MucGxhdGZvcm1cblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCFjd2QpXG4gICAgY3dkID0gb3JpZ0N3ZC5jYWxsKHByb2Nlc3MpXG4gIHJldHVybiBjd2Rcbn1cbnRyeSB7XG4gIHByb2Nlc3MuY3dkKClcbn0gY2F0Y2ggKGVyKSB7fVxuXG4vLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB1bnRpbCBub2RlLmpzIDEyIGlzIHJlcXVpcmVkXG5pZiAodHlwZW9mIHByb2Nlc3MuY2hkaXIgPT09ICdmdW5jdGlvbicpIHtcbiAgdmFyIGNoZGlyID0gcHJvY2Vzcy5jaGRpclxuICBwcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGQpIHtcbiAgICBjd2QgPSBudWxsXG4gICAgY2hkaXIuY2FsbChwcm9jZXNzLCBkKVxuICB9XG4gIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm9jZXNzLmNoZGlyLCBjaGRpcilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaFxuXG5mdW5jdGlvbiBwYXRjaCAoZnMpIHtcbiAgLy8gKHJlLSlpbXBsZW1lbnQgc29tZSB0aGluZ3MgdGhhdCBhcmUga25vd24gYnVzdGVkIG9yIG1pc3NpbmcuXG5cbiAgLy8gbGNobW9kLCBicm9rZW4gcHJpb3IgdG8gMC42LjJcbiAgLy8gYmFjay1wb3J0IHRoZSBmaXggaGVyZS5cbiAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSgnT19TWU1MSU5LJykgJiZcbiAgICAgIHByb2Nlc3MudmVyc2lvbi5tYXRjaCgvXnYwXFwuNlxcLlswLTJdfF52MFxcLjVcXC4vKSkge1xuICAgIHBhdGNoTGNobW9kKGZzKVxuICB9XG5cbiAgLy8gbHV0aW1lcyBpbXBsZW1lbnRhdGlvbiwgb3Igbm8tb3BcbiAgaWYgKCFmcy5sdXRpbWVzKSB7XG4gICAgcGF0Y2hMdXRpbWVzKGZzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdyYWNlZnVsLWZzL2lzc3Vlcy80XG4gIC8vIENob3duIHNob3VsZCBub3QgZmFpbCBvbiBlaW52YWwgb3IgZXBlcm0gaWYgbm9uLXJvb3QuXG4gIC8vIEl0IHNob3VsZCBub3QgZmFpbCBvbiBlbm9zeXMgZXZlciwgYXMgdGhpcyBqdXN0IGluZGljYXRlc1xuICAvLyB0aGF0IGEgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBpbnRlbmRlZCBvcGVyYXRpb24uXG5cbiAgZnMuY2hvd24gPSBjaG93bkZpeChmcy5jaG93bilcbiAgZnMuZmNob3duID0gY2hvd25GaXgoZnMuZmNob3duKVxuICBmcy5sY2hvd24gPSBjaG93bkZpeChmcy5sY2hvd24pXG5cbiAgZnMuY2htb2QgPSBjaG1vZEZpeChmcy5jaG1vZClcbiAgZnMuZmNobW9kID0gY2htb2RGaXgoZnMuZmNobW9kKVxuICBmcy5sY2htb2QgPSBjaG1vZEZpeChmcy5sY2htb2QpXG5cbiAgZnMuY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmNob3duU3luYylcbiAgZnMuZmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5mY2hvd25TeW5jKVxuICBmcy5sY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmxjaG93blN5bmMpXG5cbiAgZnMuY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmNobW9kU3luYylcbiAgZnMuZmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5mY2htb2RTeW5jKVxuICBmcy5sY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmxjaG1vZFN5bmMpXG5cbiAgZnMuc3RhdCA9IHN0YXRGaXgoZnMuc3RhdClcbiAgZnMuZnN0YXQgPSBzdGF0Rml4KGZzLmZzdGF0KVxuICBmcy5sc3RhdCA9IHN0YXRGaXgoZnMubHN0YXQpXG5cbiAgZnMuc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5zdGF0U3luYylcbiAgZnMuZnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuZnN0YXRTeW5jKVxuICBmcy5sc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5sc3RhdFN5bmMpXG5cbiAgLy8gaWYgbGNobW9kL2xjaG93biBkbyBub3QgZXhpc3QsIHRoZW4gbWFrZSB0aGVtIG5vLW9wc1xuICBpZiAoZnMuY2htb2QgJiYgIWZzLmxjaG1vZCkge1xuICAgIGZzLmxjaG1vZCA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuICBpZiAoZnMuY2hvd24gJiYgIWZzLmxjaG93bikge1xuICAgIGZzLmxjaG93biA9IGZ1bmN0aW9uIChwYXRoLCB1aWQsIGdpZCwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNob3duU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cblxuICAvLyBvbiBXaW5kb3dzLCBBL1Ygc29mdHdhcmUgY2FuIGxvY2sgdGhlIGRpcmVjdG9yeSwgY2F1c2luZyB0aGlzXG4gIC8vIHRvIGZhaWwgd2l0aCBhbiBFQUNDRVMgb3IgRVBFUk0gaWYgdGhlIGRpcmVjdG9yeSBjb250YWlucyBuZXdseVxuICAvLyBjcmVhdGVkIGZpbGVzLiAgVHJ5IGFnYWluIG9uIGZhaWx1cmUsIGZvciB1cCB0byA2MCBzZWNvbmRzLlxuXG4gIC8vIFNldCB0aGUgdGltZW91dCB0aGlzIGxvbmcgYmVjYXVzZSBzb21lIFdpbmRvd3MgQW50aS1WaXJ1cywgc3VjaCBhcyBQYXJpdHlcbiAgLy8gYml0OSwgbWF5IGxvY2sgZmlsZXMgZm9yIHVwIHRvIGEgbWludXRlLCBjYXVzaW5nIG5wbSBwYWNrYWdlIGluc3RhbGxcbiAgLy8gZmFpbHVyZXMuIEFsc28sIHRha2UgY2FyZSB0byB5aWVsZCB0aGUgc2NoZWR1bGVyLiBXaW5kb3dzIHNjaGVkdWxpbmcgZ2l2ZXNcbiAgLy8gQ1BVIHRvIGEgYnVzeSBsb29waW5nIHByb2Nlc3MsIHdoaWNoIGNhbiBjYXVzZSB0aGUgcHJvZ3JhbSBjYXVzaW5nIHRoZSBsb2NrXG4gIC8vIGNvbnRlbnRpb24gdG8gYmUgc3RhcnZlZCBvZiBDUFUgYnkgbm9kZSwgc28gdGhlIGNvbnRlbnRpb24gZG9lc24ndCByZXNvbHZlLlxuICBpZiAocGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgIGZzLnJlbmFtZSA9IHR5cGVvZiBmcy5yZW5hbWUgIT09ICdmdW5jdGlvbicgPyBmcy5yZW5hbWVcbiAgICA6IChmdW5jdGlvbiAoZnMkcmVuYW1lKSB7XG4gICAgICBmdW5jdGlvbiByZW5hbWUgKGZyb20sIHRvLCBjYikge1xuICAgICAgICB2YXIgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIHZhciBiYWNrb2ZmID0gMDtcbiAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBmdW5jdGlvbiBDQiAoZXIpIHtcbiAgICAgICAgICBpZiAoZXJcbiAgICAgICAgICAgICAgJiYgKGVyLmNvZGUgPT09IFwiRUFDQ0VTXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiIHx8IGVyLmNvZGUgPT09IFwiRUJVU1lcIilcbiAgICAgICAgICAgICAgJiYgRGF0ZS5ub3coKSAtIHN0YXJ0IDwgNjAwMDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGZzLnN0YXQodG8sIGZ1bmN0aW9uIChzdGF0ZXIsIHN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlciAmJiBzdGF0ZXIuY29kZSA9PT0gXCJFTk9FTlRcIilcbiAgICAgICAgICAgICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgQ0IpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGNiKGVyKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgYmFja29mZilcbiAgICAgICAgICAgIGlmIChiYWNrb2ZmIDwgMTAwKVxuICAgICAgICAgICAgICBiYWNrb2ZmICs9IDEwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlbmFtZSwgZnMkcmVuYW1lKVxuICAgICAgcmV0dXJuIHJlbmFtZVxuICAgIH0pKGZzLnJlbmFtZSlcbiAgfVxuXG4gIC8vIGlmIHJlYWQoKSByZXR1cm5zIEVBR0FJTiwgdGhlbiBqdXN0IHRyeSBpdCBhZ2Fpbi5cbiAgZnMucmVhZCA9IHR5cGVvZiBmcy5yZWFkICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFxuICA6IChmdW5jdGlvbiAoZnMkcmVhZCkge1xuICAgIGZ1bmN0aW9uIHJlYWQgKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2tfKSB7XG4gICAgICB2YXIgY2FsbGJhY2tcbiAgICAgIGlmIChjYWxsYmFja18gJiYgdHlwZW9mIGNhbGxiYWNrXyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXIsIF8sIF9fKSB7XG4gICAgICAgICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FsbGJhY2tfLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvLyBUaGlzIGVuc3VyZXMgYHV0aWwucHJvbWlzaWZ5YCB3b3JrcyBhcyBpdCBkb2VzIGZvciBuYXRpdmUgYGZzLnJlYWRgLlxuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZWFkLCBmcyRyZWFkKVxuICAgIHJldHVybiByZWFkXG4gIH0pKGZzLnJlYWQpXG5cbiAgZnMucmVhZFN5bmMgPSB0eXBlb2YgZnMucmVhZFN5bmMgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkU3luY1xuICA6IChmdW5jdGlvbiAoZnMkcmVhZFN5bmMpIHsgcmV0dXJuIGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHtcbiAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRTeW5jLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbilcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfX0pKGZzLnJlYWRTeW5jKVxuXG4gIGZ1bmN0aW9uIHBhdGNoTGNobW9kIChmcykge1xuICAgIGZzLmxjaG1vZCA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICAgICAgZnMub3BlbiggcGF0aFxuICAgICAgICAgICAgICwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOS1xuICAgICAgICAgICAgICwgbW9kZVxuICAgICAgICAgICAgICwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICAgIGZzLmZjaG1vZChmZCwgbW9kZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbihlcnIyKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVyciB8fCBlcnIyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSkge1xuICAgICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOSywgbW9kZSlcblxuICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICB2YXIgcmV0XG4gICAgICB0cnkge1xuICAgICAgICByZXQgPSBmcy5mY2htb2RTeW5jKGZkLCBtb2RlKVxuICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoTHV0aW1lcyAoZnMpIHtcbiAgICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KFwiT19TWU1MSU5LXCIpICYmIGZzLmZ1dGltZXMpIHtcbiAgICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10LCBjYikge1xuICAgICAgICBmcy5vcGVuKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkssIGZ1bmN0aW9uIChlciwgZmQpIHtcbiAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgZnMuZnV0aW1lcyhmZCwgYXQsIG10LCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbiAoZXIyKSB7XG4gICAgICAgICAgICAgIGlmIChjYikgY2IoZXIgfHwgZXIyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQpIHtcbiAgICAgICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSylcbiAgICAgICAgdmFyIHJldFxuICAgICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0ID0gZnMuZnV0aW1lc1N5bmMoZmQsIGF0LCBtdClcbiAgICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGZzLmZ1dGltZXMpIHtcbiAgICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAoX2EsIF9iLCBfYywgY2IpIHsgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKSB9XG4gICAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSlcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGNob3duRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG93bkZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRGaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBjYikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9uc1xuICAgICAgICBvcHRpb25zID0gbnVsbFxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY2FsbGJhY2sgKGVyLCBzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgICAgaWYgKHN0YXRzLmdpZCA8IDApIHN0YXRzLmdpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICB9XG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucywgY2FsbGJhY2spXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucykge1xuICAgICAgdmFyIHN0YXRzID0gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0KVxuICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgaWYgKHN0YXRzLmdpZCA8IDApIHN0YXRzLmdpZCArPSAweDEwMDAwMDAwMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRzO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVOT1NZUyBtZWFucyB0aGF0IHRoZSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIG9wLiBKdXN0IGlnbm9yZVxuICAvLyB0aGF0LCBiZWNhdXNlIGl0IGRvZXNuJ3QgbWF0dGVyLlxuICAvL1xuICAvLyBpZiB0aGVyZSdzIG5vIGdldHVpZCwgb3IgaWYgZ2V0dWlkKCkgaXMgc29tZXRoaW5nIG90aGVyXG4gIC8vIHRoYW4gMCwgYW5kIHRoZSBlcnJvciBpcyBFSU5WQUwgb3IgRVBFUk0sIHRoZW4ganVzdCBpZ25vcmVcbiAgLy8gaXQuXG4gIC8vXG4gIC8vIFRoaXMgc3BlY2lmaWMgY2FzZSBpcyBhIHNpbGVudCBmYWlsdXJlIGluIGNwLCBpbnN0YWxsLCB0YXIsXG4gIC8vIGFuZCBtb3N0IG90aGVyIHVuaXggdG9vbHMgdGhhdCBtYW5hZ2UgcGVybWlzc2lvbnMuXG4gIC8vXG4gIC8vIFdoZW4gcnVubmluZyBhcyByb290LCBvciBpZiBvdGhlciB0eXBlcyBvZiBlcnJvcnMgYXJlXG4gIC8vIGVuY291bnRlcmVkLCB0aGVuIGl0J3Mgc3RyaWN0LlxuICBmdW5jdGlvbiBjaG93bkVyT2sgKGVyKSB7XG4gICAgaWYgKCFlcilcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICBpZiAoZXIuY29kZSA9PT0gXCJFTk9TWVNcIilcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICB2YXIgbm9ucm9vdCA9ICFwcm9jZXNzLmdldHVpZCB8fCBwcm9jZXNzLmdldHVpZCgpICE9PSAwXG4gICAgaWYgKG5vbnJvb3QpIHtcbiAgICAgIGlmIChlci5jb2RlID09PSBcIkVJTlZBTFwiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIilcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwKICAgICJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtXG5cbm1vZHVsZS5leHBvcnRzID0gbGVnYWN5XG5cbmZ1bmN0aW9uIGxlZ2FjeSAoZnMpIHtcbiAgcmV0dXJuIHtcbiAgICBSZWFkU3RyZWFtOiBSZWFkU3RyZWFtLFxuICAgIFdyaXRlU3RyZWFtOiBXcml0ZVN0cmVhbVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKSkgcmV0dXJuIG5ldyBSZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3InO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5idWZmZXJTaXplID0gNjQgKiAxMDI0O1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmNvZGluZykgdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKTtcblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVuZCA9IEluZmluaXR5O1xuICAgICAgfSBlbHNlIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignZW5kIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnQgPiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPD0gZW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mZCAhPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5fcmVhZCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnMub3Blbih0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIHNlbGYucmVhZGFibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLmZkID0gZmQ7XG4gICAgICBzZWxmLmVtaXQoJ29wZW4nLCBmZCk7XG4gICAgICBzZWxmLl9yZWFkKCk7XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKSkgcmV0dXJuIG5ldyBXcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAndyc7XG4gICAgdGhpcy5lbmNvZGluZyA9ICdiaW5hcnknO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhcnQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA+PSB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZmQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX29wZW4gPSBmcy5vcGVuO1xuICAgICAgdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3BlbiwgdGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIHVuZGVmaW5lZF0pO1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVxuXG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqLl9fcHJvdG9fX1xufVxuXG5mdW5jdGlvbiBjbG9uZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpXG4gICAgcmV0dXJuIG9ialxuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgdmFyIGNvcHkgPSB7IF9fcHJvdG9fXzogZ2V0UHJvdG90eXBlT2Yob2JqKSB9XG4gIGVsc2VcbiAgICB2YXIgY29weSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb3B5LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpKVxuICB9KVxuXG4gIHJldHVybiBjb3B5XG59XG4iLAogICAgInZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwb2x5ZmlsbHMgPSByZXF1aXJlKCcuL3BvbHlmaWxscy5qcycpXG52YXIgbGVnYWN5ID0gcmVxdWlyZSgnLi9sZWdhY3ktc3RyZWFtcy5qcycpXG52YXIgY2xvbmUgPSByZXF1aXJlKCcuL2Nsb25lLmpzJylcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xudmFyIGdyYWNlZnVsUXVldWVcbnZhciBwcmV2aW91c1N5bWJvbFxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAtIG5vZGUgMC54IHBvbHlmaWxsICovXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLmZvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBncmFjZWZ1bFF1ZXVlID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucXVldWUnKVxuICAvLyBUaGlzIGlzIHVzZWQgaW4gdGVzdGluZyBieSBmdXR1cmUgdmVyc2lvbnNcbiAgcHJldmlvdXNTeW1ib2wgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5wcmV2aW91cycpXG59IGVsc2Uge1xuICBncmFjZWZ1bFF1ZXVlID0gJ19fX2dyYWNlZnVsLWZzLnF1ZXVlJ1xuICBwcmV2aW91c1N5bWJvbCA9ICdfX19ncmFjZWZ1bC1mcy5wcmV2aW91cydcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuXG5mdW5jdGlvbiBwdWJsaXNoUXVldWUoY29udGV4dCwgcXVldWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHQsIGdyYWNlZnVsUXVldWUsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHF1ZXVlXG4gICAgfVxuICB9KVxufVxuXG52YXIgZGVidWcgPSBub29wXG5pZiAodXRpbC5kZWJ1Z2xvZylcbiAgZGVidWcgPSB1dGlsLmRlYnVnbG9nKCdnZnM0JylcbmVsc2UgaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSlcbiAgZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbSA9IHV0aWwuZm9ybWF0LmFwcGx5KHV0aWwsIGFyZ3VtZW50cylcbiAgICBtID0gJ0dGUzQ6ICcgKyBtLnNwbGl0KC9cXG4vKS5qb2luKCdcXG5HRlM0OiAnKVxuICAgIGNvbnNvbGUuZXJyb3IobSlcbiAgfVxuXG4vLyBPbmNlIHRpbWUgaW5pdGlhbGl6YXRpb25cbmlmICghZnNbZ3JhY2VmdWxRdWV1ZV0pIHtcbiAgLy8gVGhpcyBxdWV1ZSBjYW4gYmUgc2hhcmVkIGJ5IG11bHRpcGxlIGxvYWRlZCBpbnN0YW5jZXNcbiAgdmFyIHF1ZXVlID0gZ2xvYmFsW2dyYWNlZnVsUXVldWVdIHx8IFtdXG4gIHB1Ymxpc2hRdWV1ZShmcywgcXVldWUpXG5cbiAgLy8gUGF0Y2ggZnMuY2xvc2UvY2xvc2VTeW5jIHRvIHNoYXJlZCBxdWV1ZSB2ZXJzaW9uLCBiZWNhdXNlIHdlIG5lZWRcbiAgLy8gdG8gcmV0cnkoKSB3aGVuZXZlciBhIGNsb3NlIGhhcHBlbnMgKmFueXdoZXJlKiBpbiB0aGUgcHJvZ3JhbS5cbiAgLy8gVGhpcyBpcyBlc3NlbnRpYWwgd2hlbiBtdWx0aXBsZSBncmFjZWZ1bC1mcyBpbnN0YW5jZXMgYXJlXG4gIC8vIGluIHBsYXkgYXQgdGhlIHNhbWUgdGltZS5cbiAgZnMuY2xvc2UgPSAoZnVuY3Rpb24gKGZzJGNsb3NlKSB7XG4gICAgZnVuY3Rpb24gY2xvc2UgKGZkLCBjYikge1xuICAgICAgcmV0dXJuIGZzJGNsb3NlLmNhbGwoZnMsIGZkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlLCBwcmV2aW91c1N5bWJvbCwge1xuICAgICAgdmFsdWU6IGZzJGNsb3NlXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VcbiAgfSkoZnMuY2xvc2UpXG5cbiAgZnMuY2xvc2VTeW5jID0gKGZ1bmN0aW9uIChmcyRjbG9zZVN5bmMpIHtcbiAgICBmdW5jdGlvbiBjbG9zZVN5bmMgKGZkKSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgZnMkY2xvc2VTeW5jLmFwcGx5KGZzLCBhcmd1bWVudHMpXG4gICAgICByZXNldFF1ZXVlKClcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2VTeW5jLCBwcmV2aW91c1N5bWJvbCwge1xuICAgICAgdmFsdWU6IGZzJGNsb3NlU3luY1xuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlU3luY1xuICB9KShmcy5jbG9zZVN5bmMpXG5cbiAgaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSkge1xuICAgIHByb2Nlc3Mub24oJ2V4aXQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGRlYnVnKGZzW2dyYWNlZnVsUXVldWVdKVxuICAgICAgcmVxdWlyZSgnYXNzZXJ0JykuZXF1YWwoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoLCAwKVxuICAgIH0pXG4gIH1cbn1cblxuaWYgKCFnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0pIHtcbiAgcHVibGlzaFF1ZXVlKGdsb2JhbCwgZnNbZ3JhY2VmdWxRdWV1ZV0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGNsb25lKGZzKSlcbmlmIChwcm9jZXNzLmVudi5URVNUX0dSQUNFRlVMX0ZTX0dMT0JBTF9QQVRDSCAmJiAhZnMuX19wYXRjaGVkKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwYXRjaChmcylcbiAgICBmcy5fX3BhdGNoZWQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBwYXRjaCAoZnMpIHtcbiAgLy8gRXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZXMgdGhlIG9wZW4oKSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbiBoZXJlXG4gIHBvbHlmaWxscyhmcylcbiAgZnMuZ3JhY2VmdWxpZnkgPSBwYXRjaFxuXG4gIGZzLmNyZWF0ZVJlYWRTdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtXG4gIGZzLmNyZWF0ZVdyaXRlU3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW1cbiAgdmFyIGZzJHJlYWRGaWxlID0gZnMucmVhZEZpbGVcbiAgZnMucmVhZEZpbGUgPSByZWFkRmlsZVxuICBmdW5jdGlvbiByZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRyZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kcmVhZEZpbGUsIFtwYXRoLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyR3cml0ZUZpbGUgPSBmcy53cml0ZUZpbGVcbiAgZnMud3JpdGVGaWxlID0gd3JpdGVGaWxlXG4gIGZ1bmN0aW9uIHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kd3JpdGVGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkYXBwZW5kRmlsZSA9IGZzLmFwcGVuZEZpbGVcbiAgaWYgKGZzJGFwcGVuZEZpbGUpXG4gICAgZnMuYXBwZW5kRmlsZSA9IGFwcGVuZEZpbGVcbiAgZnVuY3Rpb24gYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kYXBwZW5kRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGNvcHlGaWxlID0gZnMuY29weUZpbGVcbiAgaWYgKGZzJGNvcHlGaWxlKVxuICAgIGZzLmNvcHlGaWxlID0gY29weUZpbGVcbiAgZnVuY3Rpb24gY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IgPSBmbGFnc1xuICAgICAgZmxhZ3MgPSAwXG4gICAgfVxuICAgIHJldHVybiBnbyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRjb3B5RmlsZSwgW3NyYywgZGVzdCwgZmxhZ3MsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHJlYWRkaXIgPSBmcy5yZWFkZGlyXG4gIGZzLnJlYWRkaXIgPSByZWFkZGlyXG4gIHZhciBub1JlYWRkaXJPcHRpb25WZXJzaW9ucyA9IC9edlswLTVdXFwuL1xuICBmdW5jdGlvbiByZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHZhciBnbyRyZWFkZGlyID0gbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMudGVzdChwcm9jZXNzLnZlcnNpb24pXG4gICAgICA/IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cbiAgICAgIDogZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBvcHRpb25zLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuXG4gICAgcmV0dXJuIGdvJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBmcyRyZWFkZGlyQ2FsbGJhY2sgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXJyLCBmaWxlcykge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtcbiAgICAgICAgICAgIGdvJHJlYWRkaXIsXG4gICAgICAgICAgICBbcGF0aCwgb3B0aW9ucywgY2JdLFxuICAgICAgICAgICAgZXJyLFxuICAgICAgICAgICAgc3RhcnRUaW1lIHx8IERhdGUubm93KCksXG4gICAgICAgICAgICBEYXRlLm5vdygpXG4gICAgICAgICAgXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLnNvcnQpXG4gICAgICAgICAgICBmaWxlcy5zb3J0KClcblxuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5jYWxsKHRoaXMsIGVyciwgZmlsZXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy52ZXJzaW9uLnN1YnN0cigwLCA0KSA9PT0gJ3YwLjgnKSB7XG4gICAgdmFyIGxlZ1N0cmVhbXMgPSBsZWdhY3koZnMpXG4gICAgUmVhZFN0cmVhbSA9IGxlZ1N0cmVhbXMuUmVhZFN0cmVhbVxuICAgIFdyaXRlU3RyZWFtID0gbGVnU3RyZWFtcy5Xcml0ZVN0cmVhbVxuICB9XG5cbiAgdmFyIGZzJFJlYWRTdHJlYW0gPSBmcy5SZWFkU3RyZWFtXG4gIGlmIChmcyRSZWFkU3RyZWFtKSB7XG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFJlYWRTdHJlYW0ucHJvdG90eXBlKVxuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBSZWFkU3RyZWFtJG9wZW5cbiAgfVxuXG4gIHZhciBmcyRXcml0ZVN0cmVhbSA9IGZzLldyaXRlU3RyZWFtXG4gIGlmIChmcyRXcml0ZVN0cmVhbSkge1xuICAgIFdyaXRlU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkV3JpdGVTdHJlYW0ucHJvdG90eXBlKVxuICAgIFdyaXRlU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gV3JpdGVTdHJlYW0kb3BlblxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIFJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1dyaXRlU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIFdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIC8vIGxlZ2FjeSBuYW1lc1xuICB2YXIgRmlsZVJlYWRTdHJlYW0gPSBSZWFkU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEZpbGVSZWFkU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICB2YXIgRmlsZVdyaXRlU3RyZWFtID0gV3JpdGVTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVdyaXRlU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEZpbGVXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRSZWFkU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gUmVhZFN0cmVhbS5hcHBseShPYmplY3QuY3JlYXRlKFJlYWRTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBpZiAodGhhdC5hdXRvQ2xvc2UpXG4gICAgICAgICAgdGhhdC5kZXN0cm95KClcblxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgICB0aGF0LnJlYWQoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkV3JpdGVTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbS5hcHBseShPYmplY3QuY3JlYXRlKFdyaXRlU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRoYXQuZGVzdHJveSgpXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLlJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5Xcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgdmFyIGZzJG9wZW4gPSBmcy5vcGVuXG4gIGZzLm9wZW4gPSBvcGVuXG4gIGZ1bmN0aW9uIG9wZW4gKHBhdGgsIGZsYWdzLCBtb2RlLCBjYikge1xuICAgIGlmICh0eXBlb2YgbW9kZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gbW9kZSwgbW9kZSA9IG51bGxcblxuICAgIHJldHVybiBnbyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJG9wZW4gKHBhdGgsIGZsYWdzLCBtb2RlLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkb3BlbihwYXRoLCBmbGFncywgbW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kb3BlbiwgW3BhdGgsIGZsYWdzLCBtb2RlLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmc1xufVxuXG5mdW5jdGlvbiBlbnF1ZXVlIChlbGVtKSB7XG4gIGRlYnVnKCdFTlFVRVVFJywgZWxlbVswXS5uYW1lLCBlbGVtWzFdKVxuICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gIHJldHJ5KClcbn1cblxuLy8ga2VlcCB0cmFjayBvZiB0aGUgdGltZW91dCBiZXR3ZWVuIHJldHJ5KCkgY2FsbHNcbnZhciByZXRyeVRpbWVyXG5cbi8vIHJlc2V0IHRoZSBzdGFydFRpbWUgYW5kIGxhc3RUaW1lIHRvIG5vd1xuLy8gdGhpcyByZXNldHMgdGhlIHN0YXJ0IG9mIHRoZSA2MCBzZWNvbmQgb3ZlcmFsbCB0aW1lb3V0IGFzIHdlbGwgYXMgdGhlXG4vLyBkZWxheSBiZXR3ZWVuIGF0dGVtcHRzIHNvIHRoYXQgd2UnbGwgcmV0cnkgdGhlc2Ugam9icyBzb29uZXJcbmZ1bmN0aW9uIHJlc2V0UXVldWUgKCkge1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gZW50cmllcyB0aGF0IGFyZSBvbmx5IGEgbGVuZ3RoIG9mIDIgYXJlIGZyb20gYW4gb2xkZXIgdmVyc2lvbiwgZG9uJ3RcbiAgICAvLyBib3RoZXIgbW9kaWZ5aW5nIHRob3NlIHNpbmNlIHRoZXknbGwgYmUgcmV0cmllZCBhbnl3YXkuXG4gICAgaWYgKGZzW2dyYWNlZnVsUXVldWVdW2ldLmxlbmd0aCA+IDIpIHtcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzNdID0gbm93IC8vIHN0YXJ0VGltZVxuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bNF0gPSBub3cgLy8gbGFzdFRpbWVcbiAgICB9XG4gIH1cbiAgLy8gY2FsbCByZXRyeSB0byBtYWtlIHN1cmUgd2UncmUgYWN0aXZlbHkgcHJvY2Vzc2luZyB0aGUgcXVldWVcbiAgcmV0cnkoKVxufVxuXG5mdW5jdGlvbiByZXRyeSAoKSB7XG4gIC8vIGNsZWFyIHRoZSB0aW1lciBhbmQgcmVtb3ZlIGl0IHRvIGhlbHAgcHJldmVudCB1bmludGVuZGVkIGNvbmN1cnJlbmN5XG4gIGNsZWFyVGltZW91dChyZXRyeVRpbWVyKVxuICByZXRyeVRpbWVyID0gdW5kZWZpbmVkXG5cbiAgaWYgKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm5cblxuICB2YXIgZWxlbSA9IGZzW2dyYWNlZnVsUXVldWVdLnNoaWZ0KClcbiAgdmFyIGZuID0gZWxlbVswXVxuICB2YXIgYXJncyA9IGVsZW1bMV1cbiAgLy8gdGhlc2UgaXRlbXMgbWF5IGJlIHVuc2V0IGlmIHRoZXkgd2VyZSBhZGRlZCBieSBhbiBvbGRlciBncmFjZWZ1bC1mc1xuICB2YXIgZXJyID0gZWxlbVsyXVxuICB2YXIgc3RhcnRUaW1lID0gZWxlbVszXVxuICB2YXIgbGFzdFRpbWUgPSBlbGVtWzRdXG5cbiAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHN0YXJ0VGltZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmIHdlJ3ZlIHdhaXRlZFxuICAvLyBsb25nIGVub3VnaCwgc28gZ28gYWhlYWQgYW5kIHJldHJ5IHRoaXMgaXRlbSBub3dcbiAgaWYgKHN0YXJ0VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVidWcoJ1JFVFJZJywgZm4ubmFtZSwgYXJncylcbiAgICBmbi5hcHBseShudWxsLCBhcmdzKVxuICB9IGVsc2UgaWYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPj0gNjAwMDApIHtcbiAgICAvLyBpdCdzIGJlZW4gbW9yZSB0aGFuIDYwIHNlY29uZHMgdG90YWwsIGJhaWwgbm93XG4gICAgZGVidWcoJ1RJTUVPVVQnLCBmbi5uYW1lLCBhcmdzKVxuICAgIHZhciBjYiA9IGFyZ3MucG9wKClcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IuY2FsbChudWxsLCBlcnIpXG4gIH0gZWxzZSB7XG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gdGhlIGxhc3QgYXR0ZW1wdCBhbmQgcmlnaHQgbm93XG4gICAgdmFyIHNpbmNlQXR0ZW1wdCA9IERhdGUubm93KCkgLSBsYXN0VGltZVxuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHdoZW4gd2UgZmlyc3QgdHJpZWQsIGFuZCB3aGVuIHdlIGxhc3QgdHJpZWRcbiAgICAvLyByb3VuZGVkIHVwIHRvIGF0IGxlYXN0IDFcbiAgICB2YXIgc2luY2VTdGFydCA9IE1hdGgubWF4KGxhc3RUaW1lIC0gc3RhcnRUaW1lLCAxKVxuICAgIC8vIGJhY2tvZmYuIHdhaXQgbG9uZ2VyIHRoYW4gdGhlIHRvdGFsIHRpbWUgd2UndmUgYmVlbiByZXRyeWluZywgYnV0IG9ubHlcbiAgICAvLyB1cCB0byBhIG1heGltdW0gb2YgMTAwbXNcbiAgICB2YXIgZGVzaXJlZERlbGF5ID0gTWF0aC5taW4oc2luY2VTdGFydCAqIDEuMiwgMTAwKVxuICAgIC8vIGl0J3MgYmVlbiBsb25nIGVub3VnaCBzaW5jZSB0aGUgbGFzdCByZXRyeSwgZG8gaXQgYWdhaW5cbiAgICBpZiAoc2luY2VBdHRlbXB0ID49IGRlc2lyZWREZWxheSkge1xuICAgICAgZGVidWcoJ1JFVFJZJywgZm4ubmFtZSwgYXJncylcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtzdGFydFRpbWVdKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgd2UgY2FuJ3QgZG8gdGhpcyBqb2IgeWV0LCBwdXNoIGl0IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG4gICAgICAvLyBhbmQgbGV0IHRoZSBuZXh0IGl0ZXJhdGlvbiBjaGVjayBhZ2FpblxuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICAgIH1cbiAgfVxuXG4gIC8vIHNjaGVkdWxlIG91ciBuZXh0IHJ1biBpZiBvbmUgaXNuJ3QgYWxyZWFkeSBzY2hlZHVsZWRcbiAgaWYgKHJldHJ5VGltZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHJ5VGltZXIgPSBzZXRUaW1lb3V0KHJldHJ5LCAwKVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXNTdHJlYW0gPSBzdHJlYW0gPT5cblx0c3RyZWFtICE9PSBudWxsICYmXG5cdHR5cGVvZiBzdHJlYW0gPT09ICdvYmplY3QnICYmXG5cdHR5cGVvZiBzdHJlYW0ucGlwZSA9PT0gJ2Z1bmN0aW9uJztcblxuaXNTdHJlYW0ud3JpdGFibGUgPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0oc3RyZWFtKSAmJlxuXHRzdHJlYW0ud3JpdGFibGUgIT09IGZhbHNlICYmXG5cdHR5cGVvZiBzdHJlYW0uX3dyaXRlID09PSAnZnVuY3Rpb24nICYmXG5cdHR5cGVvZiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xuXG5pc1N0cmVhbS5yZWFkYWJsZSA9IHN0cmVhbSA9PlxuXHRpc1N0cmVhbShzdHJlYW0pICYmXG5cdHN0cmVhbS5yZWFkYWJsZSAhPT0gZmFsc2UgJiZcblx0dHlwZW9mIHN0cmVhbS5fcmVhZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuXHR0eXBlb2Ygc3RyZWFtLl9yZWFkYWJsZVN0YXRlID09PSAnb2JqZWN0JztcblxuaXNTdHJlYW0uZHVwbGV4ID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtLndyaXRhYmxlKHN0cmVhbSkgJiZcblx0aXNTdHJlYW0ucmVhZGFibGUoc3RyZWFtKTtcblxuaXNTdHJlYW0udHJhbnNmb3JtID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtLmR1cGxleChzdHJlYW0pICYmXG5cdHR5cGVvZiBzdHJlYW0uX3RyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmVhbTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgIXByb2Nlc3MudmVyc2lvbiB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MC4nKSA9PT0gMCB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS4nKSA9PT0gMCAmJiBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuOC4nKSAhPT0gMCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHsgbmV4dFRpY2s6IG5leHRUaWNrIH07XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3Ncbn1cblxuZnVuY3Rpb24gbmV4dFRpY2soZm4sIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGFyZ3MsIGk7XG4gIHN3aXRjaCAobGVuKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZuKTtcbiAgY2FzZSAyOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja09uZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSk7XG4gICAgfSk7XG4gIGNhc2UgMzpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUd28oKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIpO1xuICAgIH0pO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVGhyZWUoKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIH0pO1xuICBkZWZhdWx0OlxuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgYXJnc1tpKytdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2soKSB7XG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4iLAogICAgInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwKICAgICIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cblxuZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuICB9XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyLmlzQnVmZmVyO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG4iLAogICAgImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAidHJ5IHtcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICh0eXBlb2YgdXRpbC5pbmhlcml0cyAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgJyc7XG4gIG1vZHVsZS5leHBvcnRzID0gdXRpbC5pbmhlcml0cztcbn0gY2F0Y2ggKGUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2luaGVyaXRzX2Jyb3dzZXIuanMnKTtcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuZnVuY3Rpb24gY29weUJ1ZmZlcihzcmMsIHRhcmdldCwgb2Zmc2V0KSB7XG4gIHNyYy5jb3B5KHRhcmdldCwgb2Zmc2V0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJ1ZmZlckxpc3QoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1ZmZlckxpc3QpO1xuXG4gICAgdGhpcy5oZWFkID0gbnVsbDtcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoKHYpIHtcbiAgICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IG51bGwgfTtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O2Vsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gICAgKyt0aGlzLmxlbmd0aDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gdW5zaGlmdCh2KSB7XG4gICAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiB0aGlzLmhlYWQgfTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgICsrdGhpcy5sZW5ndGg7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiBzaGlmdCgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICB2YXIgcmV0ID0gdGhpcy5oZWFkLmRhdGE7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO2Vsc2UgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQ7XG4gICAgLS10aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIGpvaW4ocykge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgIHZhciByZXQgPSAnJyArIHAuZGF0YTtcbiAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgcmV0ICs9IHMgKyBwLmRhdGE7XG4gICAgfXJldHVybiByZXQ7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0KG4pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuID4+PiAwKTtcbiAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKHApIHtcbiAgICAgIGNvcHlCdWZmZXIocC5kYXRhLCByZXQsIGkpO1xuICAgICAgaSArPSBwLmRhdGEubGVuZ3RoO1xuICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcblxuICByZXR1cm4gQnVmZmVyTGlzdDtcbn0oKTtcblxuaWYgKHV0aWwgJiYgdXRpbC5pbnNwZWN0ICYmIHV0aWwuaW5zcGVjdC5jdXN0b20pIHtcbiAgbW9kdWxlLmV4cG9ydHMucHJvdG90eXBlW3V0aWwuaW5zcGVjdC5jdXN0b21dID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvYmogPSB1dGlsLmluc3BlY3QoeyBsZW5ndGg6IHRoaXMubGVuZ3RoIH0pO1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnICcgKyBvYmo7XG4gIH07XG59IiwKICAgICIndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8vIHVuZG9jdW1lbnRlZCBjYigpIEFQSSwgbmVlZGVkIGZvciBjb3JlLCBub3QgZm9yIHB1YmxpYyBBUElcbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciByZWFkYWJsZURlc3Ryb3llZCA9IHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIHZhciB3cml0YWJsZURlc3Ryb3llZCA9IHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG5cbiAgaWYgKHJlYWRhYmxlRGVzdHJveWVkIHx8IHdyaXRhYmxlRGVzdHJveWVkKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIHRoaXMsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3ZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgdGhpcy5fZGVzdHJveShlcnIgfHwgbnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmICghY2IgJiYgZXJyKSB7XG4gICAgICBpZiAoIV90aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHBuYS5uZXh0VGljayhlbWl0RXJyb3JOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2UgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULCBfdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHVuZGVzdHJveSgpIHtcbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRFcnJvck5UKHNlbGYsIGVycikge1xuICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gIHVuZGVzdHJveTogdW5kZXN0cm95XG59OyIsCiAgICAiXG4vKipcbiAqIEZvciBOb2RlLmpzLCBzaW1wbHkgcmUtZXhwb3J0IHRoZSBjb3JlIGB1dGlsLmRlcHJlY2F0ZWAgZnVuY3Rpb24uXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCd1dGlsJykuZGVwcmVjYXRlO1xuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG5cbi8qIDxyZXBsYWNlbWVudD4gKi9cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxuLy8gSXQgc2VlbXMgYSBsaW5rZWQgbGlzdCBidXQgaXQgaXMgbm90XG4vLyB0aGVyZSB3aWxsIGJlIG9ubHkgMiBvZiB0aGVzZSBmb3IgZWFjaCBzdHJlYW1cbmZ1bmN0aW9uIENvcmtlZFJlcXVlc3Qoc3RhdGUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLmVudHJ5ID0gbnVsbDtcbiAgdGhpcy5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgb25Db3JrZWRGaW5pc2goX3RoaXMsIHN0YXRlKTtcbiAgfTtcbn1cbi8qIDwvcmVwbGFjZW1lbnQ+ICovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYXN5bmNXcml0ZSA9ICFwcm9jZXNzLmJyb3dzZXIgJiYgWyd2MC4xMCcsICd2MC45LiddLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsIDUpKSA+IC0xID8gc2V0SW1tZWRpYXRlIDogcG5hLm5leHRUaWNrO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaW50ZXJuYWxVdGlsID0ge1xuICBkZXByZWNhdGU6IHJlcXVpcmUoJ3V0aWwtZGVwcmVjYXRlJylcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcblxudXRpbC5pbmhlcml0cyhXcml0YWJsZSwgU3RyZWFtKTtcblxuZnVuY3Rpb24gbm9wKCkge31cblxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIHZhciBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCB3cml0ZSgpIHN0YXJ0cyByZXR1cm5pbmcgZmFsc2VcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyB0aGF0IHdlIGFsd2F5cyByZXR1cm4gZmFsc2UgaWZcbiAgLy8gdGhlIGVudGlyZSBidWZmZXIgaXMgbm90IGZsdXNoZWQgaW1tZWRpYXRlbHkgb24gd3JpdGUoKVxuICB2YXIgaHdtID0gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrO1xuICB2YXIgd3JpdGFibGVId20gPSBvcHRpb25zLndyaXRhYmxlSGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcblxuICBpZiAoaHdtIHx8IGh3bSA9PT0gMCkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaHdtO2Vsc2UgaWYgKGlzRHVwbGV4ICYmICh3cml0YWJsZUh3bSB8fCB3cml0YWJsZUh3bSA9PT0gMCkpIHRoaXMuaGlnaFdhdGVyTWFyayA9IHdyaXRhYmxlSHdtO2Vsc2UgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZGVmYXVsdEh3bTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IE1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKTtcblxuICAvLyBpZiBfZmluYWwgaGFzIGJlZW4gY2FsbGVkXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZTtcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlO1xuICAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuICB0aGlzLmVuZGluZyA9IGZhbHNlO1xuICAvLyB3aGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gd2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBzaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyBub3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gd2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbFxuICB0aGlzLmNvcmtlZCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gYSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQncyBwYXNzZWQgdG8gX3dyaXRlKGNodW5rLGNiKVxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9O1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLGVuY29kaW5nLGNiKVxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG5cbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cblxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuYnVmZmVyZWRSZXF1ZXN0O1xuICB2YXIgb3V0ID0gW107XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgb3V0LnB1c2goY3VycmVudCk7XG4gICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgfVxuICByZXR1cm4gb3V0O1xufTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gICAgICBnZXQ6IGludGVybmFsVXRpbC5kZXByZWNhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJywgJ0RFUDAwMDMnKVxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7fVxufSkoKTtcblxuLy8gVGVzdCBfd3JpdGFibGVTdGF0ZSBmb3IgaW5oZXJpdGFuY2UgdG8gYWNjb3VudCBmb3IgRHVwbGV4IHN0cmVhbXMsXG4vLyB3aG9zZSBwcm90b3R5cGUgY2hhaW4gb25seSBwb2ludHMgdG8gUmVhZGFibGUuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmhhc0luc3RhbmNlICYmIHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICByZWFsSGFzSW5zdGFuY2UgPSBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgaWYgKHJlYWxIYXNJbnN0YW5jZS5jYWxsKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHRoaXMgIT09IFdyaXRhYmxlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiB0aGlzO1xuICB9O1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0b28uXG4gIC8vIGByZWFsSGFzSW5zdGFuY2VgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVzaW5nIHBsYWluIGBpbnN0YW5jZW9mYFxuICAvLyB3b3VsZCByZXR1cm4gZmFsc2UsIGFzIG5vIGBfd3JpdGFibGVTdGF0ZWAgcHJvcGVydHkgaXMgYXR0YWNoZWQuXG5cbiAgLy8gVHJ5aW5nIHRvIHVzZSB0aGUgY3VzdG9tIGBpbnN0YW5jZW9mYCBmb3IgV3JpdGFibGUgaGVyZSB3aWxsIGFsc28gYnJlYWsgdGhlXG4gIC8vIE5vZGUuanMgTGF6eVRyYW5zZm9ybSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaGFzIGEgbm9uLXRyaXZpYWwgZ2V0dGVyIGZvclxuICAvLyBgX3dyaXRhYmxlU3RhdGVgIHRoYXQgd291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gIGlmICghcmVhbEhhc0luc3RhbmNlLmNhbGwoV3JpdGFibGUsIHRoaXMpICYmICEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHtcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKG9wdGlvbnMpO1xuICB9XG5cbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeS5cbiAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbDtcbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBPdGhlcndpc2UgcGVvcGxlIGNhbiBwaXBlIFdyaXRhYmxlIHN0cmVhbXMsIHdoaWNoIGlzIGp1c3Qgd3JvbmcuXG5Xcml0YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScpKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBjYikge1xuICB2YXIgZXIgPSBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAvLyBUT0RPOiBkZWZlciBlcnJvciBldmVudHMgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IHRoZSBjYlxuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIHBuYS5uZXh0VGljayhjYiwgZXIpO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhIHVzZXItc3VwcGxpZWQgY2h1bmsgaXMgdmFsaWQsIGVzcGVjaWFsbHkgZm9yIHRoZSBwYXJ0aWN1bGFyXG4vLyBtb2RlIHRoZSBzdHJlYW0gaXMgaW4uIEN1cnJlbnRseSB0aGlzIG1lYW5zIHRoYXQgYG51bGxgIGlzIG5ldmVyIGFjY2VwdGVkXG4vLyBhbmQgdW5kZWZpbmVkL25vbi1zdHJpbmcgdmFsdWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IG1vZGUuXG5mdW5jdGlvbiB2YWxpZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBjYikge1xuICB2YXIgdmFsaWQgPSB0cnVlO1xuICB2YXIgZXIgPSBmYWxzZTtcblxuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ01heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgaWYgKGVyKSB7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgIHBuYS5uZXh0VGljayhjYiwgZXIpO1xuICAgIHZhbGlkID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuICB2YXIgcmV0ID0gZmFsc2U7XG4gIHZhciBpc0J1ZiA9ICFzdGF0ZS5vYmplY3RNb2RlICYmIF9pc1VpbnQ4QXJyYXkoY2h1bmspO1xuXG4gIGlmIChpc0J1ZiAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoaXNCdWYpIGVuY29kaW5nID0gJ2J1ZmZlcic7ZWxzZSBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcblxuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG5vcDtcblxuICBpZiAoc3RhdGUuZW5kZWQpIHdyaXRlQWZ0ZXJFbmQodGhpcywgY2IpO2Vsc2UgaWYgKGlzQnVmIHx8IHZhbGlkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBjYikpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICByZXQgPSB3cml0ZU9yQnVmZmVyKHRoaXMsIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgc3RhdGUuY29ya2VkKys7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUudW5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcblxuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nID0gZnVuY3Rpb24gc2V0RGVmYXVsdEVuY29kaW5nKGVuY29kaW5nKSB7XG4gIC8vIG5vZGU6OlBhcnNlRW5jb2RpbmcoKSByZXF1aXJlcyBsb3dlciBjYXNlLlxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykgZW5jb2RpbmcgPSBlbmNvZGluZy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIShbJ2hleCcsICd1dGY4JywgJ3V0Zi04JywgJ2FzY2lpJywgJ2JpbmFyeScsICdiYXNlNjQnLCAndWNzMicsICd1Y3MtMicsICd1dGYxNmxlJywgJ3V0Zi0xNmxlJywgJ3JhdyddLmluZGV4T2YoKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKCkpID4gLTEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gaWYgd2UncmUgYWxyZWFkeSB3cml0aW5nIHNvbWV0aGluZywgdGhlbiBqdXN0IHB1dCB0aGlzXG4vLyBpbiB0aGUgcXVldWUsIGFuZCB3YWl0IG91ciB0dXJuLiAgT3RoZXJ3aXNlLCBjYWxsIF93cml0ZVxuLy8gSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIHdlIG5lZWQgYSBkcmFpbiBldmVudCwgc28gc2V0IHRoYXQgZmxhZy5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgaWYgKCFpc0J1Zikge1xuICAgIHZhciBuZXdDaHVuayA9IGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpO1xuICAgIGlmIChjaHVuayAhPT0gbmV3Q2h1bmspIHtcbiAgICAgIGlzQnVmID0gdHJ1ZTtcbiAgICAgIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gICAgICBjaHVuayA9IG5ld0NodW5rO1xuICAgIH1cbiAgfVxuICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG5cbiAgc3RhdGUubGVuZ3RoICs9IGxlbjtcblxuICB2YXIgcmV0ID0gc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgLy8gd2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlO1xuXG4gIGlmIChzdGF0ZS53cml0aW5nIHx8IHN0YXRlLmNvcmtlZCkge1xuICAgIHZhciBsYXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0ge1xuICAgICAgY2h1bms6IGNodW5rLFxuICAgICAgZW5jb2Rpbmc6IGVuY29kaW5nLFxuICAgICAgaXNCdWY6IGlzQnVmLFxuICAgICAgY2FsbGJhY2s6IGNiLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIGxhc3QubmV4dCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgfVxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ICs9IDE7XG4gIH0gZWxzZSB7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAod3JpdGV2KSBzdHJlYW0uX3dyaXRldihjaHVuaywgc3RhdGUub253cml0ZSk7ZWxzZSBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYikge1xuICAtLXN0YXRlLnBlbmRpbmdjYjtcblxuICBpZiAoc3luYykge1xuICAgIC8vIGRlZmVyIHRoZSBjYWxsYmFjayBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIHN5bmNocm9ub3VzbHlcbiAgICAvLyB0byBhdm9pZCBwaWxpbmcgdXAgdGhpbmdzIG9uIHRoZSBzdGFja1xuICAgIHBuYS5uZXh0VGljayhjYiwgZXIpO1xuICAgIC8vIHRoaXMgY2FuIGVtaXQgZmluaXNoLCBhbmQgaXQgd2lsbCBhbHdheXMgaGFwcGVuXG4gICAgLy8gYWZ0ZXIgZXJyb3JcbiAgICBwbmEubmV4dFRpY2soZmluaXNoTWF5YmUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY2FsbGVyIGV4cGVjdCB0aGlzIHRvIGhhcHBlbiBiZWZvcmUgaWZcbiAgICAvLyBpdCBpcyBhc3luY1xuICAgIGNiKGVyKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGJ1dCBmaW5pc2ggbXVzdFxuICAgIC8vIGFsd2F5cyBmb2xsb3cgZXJyb3JcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGUoc3RyZWFtLCBlcikge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIHZhciBzeW5jID0gc3RhdGUuc3luYztcbiAgdmFyIGNiID0gc3RhdGUud3JpdGVjYjtcblxuICBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpO1xuXG4gIGlmIChlcikgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYik7ZWxzZSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gZmluaXNoLCBidXQgZG9uJ3QgZW1pdCB5ZXRcbiAgICB2YXIgZmluaXNoZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcblxuICAgIGlmICghZmluaXNoZWQgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzeW5jKSB7XG4gICAgICAvKjxyZXBsYWNlbWVudD4qL1xuICAgICAgYXN5bmNXcml0ZShhZnRlcldyaXRlLCBzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgICAgLyo8L3JlcGxhY2VtZW50PiovXG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpIHtcbiAgaWYgKCFmaW5pc2hlZCkgb253cml0ZURyYWluKHN0cmVhbSwgc3RhdGUpO1xuICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgY2IoKTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG59XG5cbi8vIE11c3QgZm9yY2UgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIG5leHRUaWNrLCBzbyB0aGF0IHdlIGRvbid0XG4vLyBlbWl0ICdkcmFpbicgYmVmb3JlIHRoZSB3cml0ZSgpIGNvbnN1bWVyIGdldHMgdGhlICdmYWxzZScgcmV0dXJuXG4vLyB2YWx1ZSwgYW5kIGhhcyBhIGNoYW5jZSB0byBhdHRhY2ggYSAnZHJhaW4nIGxpc3RlbmVyLlxuZnVuY3Rpb24gb253cml0ZURyYWluKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5uZWVkRHJhaW4pIHtcbiAgICBzdGF0ZS5uZWVkRHJhaW4gPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZHJhaW4nKTtcbiAgfVxufVxuXG4vLyBpZiB0aGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgYnVmZmVyIHdhaXRpbmcsIHRoZW4gcHJvY2VzcyBpdFxuZnVuY3Rpb24gY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSkge1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgdmFyIGVudHJ5ID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0O1xuXG4gIGlmIChzdHJlYW0uX3dyaXRldiAmJiBlbnRyeSAmJiBlbnRyeS5uZXh0KSB7XG4gICAgLy8gRmFzdCBjYXNlLCB3cml0ZSBldmVyeXRoaW5nIHVzaW5nIF93cml0ZXYoKVxuICAgIHZhciBsID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsKTtcbiAgICB2YXIgaG9sZGVyID0gc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlO1xuICAgIGhvbGRlci5lbnRyeSA9IGVudHJ5O1xuXG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgYWxsQnVmZmVycyA9IHRydWU7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBpZiAoIWVudHJ5LmlzQnVmKSBhbGxCdWZmZXJzID0gZmFsc2U7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBidWZmZXIuYWxsQnVmZmVycyA9IGFsbEJ1ZmZlcnM7XG5cbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHRydWUsIHN0YXRlLmxlbmd0aCwgYnVmZmVyLCAnJywgaG9sZGVyLmZpbmlzaCk7XG5cbiAgICAvLyBkb1dyaXRlIGlzIGFsbW9zdCBhbHdheXMgYXN5bmMsIGRlZmVyIHRoZXNlIHRvIHNhdmUgYSBiaXQgb2YgdGltZVxuICAgIC8vIGFzIHRoZSBob3QgcGF0aCBlbmRzIHdpdGggZG9Xcml0ZVxuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICAgIGlmIChob2xkZXIubmV4dCkge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gaG9sZGVyLm5leHQ7XG4gICAgICBob2xkZXIubmV4dCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IG5ldyBDb3JrZWRSZXF1ZXN0KHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFNsb3cgY2FzZSwgd3JpdGUgY2h1bmtzIG9uZS1ieS1vbmVcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIHZhciBjaHVuayA9IGVudHJ5LmNodW5rO1xuICAgICAgdmFyIGVuY29kaW5nID0gZW50cnkuZW5jb2Rpbmc7XG4gICAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICAgIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS07XG4gICAgICAvLyBpZiB3ZSBkaWRuJ3QgY2FsbCB0aGUgb253cml0ZSBpbW1lZGlhdGVseSwgdGhlblxuICAgICAgLy8gaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXQgZG9lcy5cbiAgICAgIC8vIGFsc28sIHRoYXQgbWVhbnMgdGhhdCB0aGUgY2h1bmsgYW5kIGNiIGFyZSBjdXJyZW50bHlcbiAgICAgIC8vIGJlaW5nIHByb2Nlc3NlZCwgc28gbW92ZSB0aGUgYnVmZmVyIGNvdW50ZXIgcGFzdCB0aGVtLlxuICAgICAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IGVudHJ5O1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRXJyb3IoJ193cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpKTtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbDtcblxuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gY2h1bms7XG4gICAgY2h1bmsgPSBudWxsO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG5cbiAgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3NcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDE7XG4gICAgdGhpcy51bmNvcmsoKTtcbiAgfVxuXG4gIC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cbiAgaWYgKCFzdGF0ZS5lbmRpbmcpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG59O1xuXG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5lbmRpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9PT0gbnVsbCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLndyaXRpbmc7XG59XG5mdW5jdGlvbiBjYWxsRmluYWwoc3RyZWFtLCBzdGF0ZSkge1xuICBzdHJlYW0uX2ZpbmFsKGZ1bmN0aW9uIChlcnIpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH1cbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHBuYS5uZXh0VGljayhjYWxsRmluYWwsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcbiAgaWYgKG5lZWQpIHtcbiAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHN0YXRlLnBlbmRpbmdjYiA9PT0gMCkge1xuICAgICAgc3RhdGUuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmVlZDtcbn1cblxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZCkgcG5hLm5leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb25Db3JrZWRGaW5pc2goY29ya1JlcSwgc3RhdGUsIGVycikge1xuICB2YXIgZW50cnkgPSBjb3JrUmVxLmVudHJ5O1xuICBjb3JrUmVxLmVudHJ5ID0gbnVsbDtcbiAgd2hpbGUgKGVudHJ5KSB7XG4gICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgY2IoZXJyKTtcbiAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gIH1cblxuICAvLyByZXVzZSB0aGUgZnJlZSBjb3JrUmVxLlxuICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dCA9IGNvcmtSZXE7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgdGhpcy5lbmQoKTtcbiAgY2IoZXJyKTtcbn07IiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfXJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV93cml0YWJsZScpO1xuXG51dGlsLmluaGVyaXRzKER1cGxleCwgUmVhZGFibGUpO1xuXG57XG4gIC8vIGF2b2lkIHNjb3BlIGNyZWVwLCB0aGUga2V5cyBhcnJheSBjYW4gdGhlbiBiZSBjb2xsZWN0ZWRcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSk7XG4gIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBEdXBsZXgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSkgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG5cbiAgdGhpcy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gdGhlIG5vLWhhbGYtb3BlbiBlbmZvcmNlclxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIGlmIHdlIGFsbG93IGhhbGYtb3BlbiBzdGF0ZSwgb3IgaWYgdGhlIHdyaXRhYmxlIHNpZGUgZW5kZWQsXG4gIC8vIHRoZW4gd2UncmUgb2suXG4gIGlmICh0aGlzLmFsbG93SGFsZk9wZW4gfHwgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHBuYS5uZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gb25FbmROVChzZWxmKSB7XG4gIHNlbGYuZW5kKCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbkR1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLnB1c2gobnVsbCk7XG4gIHRoaXMuZW5kKCk7XG5cbiAgcG5hLm5leHRUaWNrKGNiLCBlcnIpO1xufTsiLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgaXNFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nIHx8IGZ1bmN0aW9uIChlbmNvZGluZykge1xuICBlbmNvZGluZyA9ICcnICsgZW5jb2Rpbmc7XG4gIHN3aXRjaCAoZW5jb2RpbmcgJiYgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6Y2FzZSAndXRmOCc6Y2FzZSAndXRmLTgnOmNhc2UgJ2FzY2lpJzpjYXNlICdiaW5hcnknOmNhc2UgJ2Jhc2U2NCc6Y2FzZSAndWNzMic6Y2FzZSAndWNzLTInOmNhc2UgJ3V0ZjE2bGUnOmNhc2UgJ3V0Zi0xNmxlJzpjYXNlICdyYXcnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX25vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICBpZiAoIWVuYykgcmV0dXJuICd1dGY4JztcbiAgdmFyIHJldHJpZWQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmMpIHtcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gJ3V0ZjgnO1xuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuICd1dGYxNmxlJztcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gJ2xhdGluMSc7XG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGVuYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyZXRyaWVkKSByZXR1cm47IC8vIHVuZGVmaW5lZFxuICAgICAgICBlbmMgPSAoJycgKyBlbmMpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHJpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLy8gRG8gbm90IGNhY2hlIGBCdWZmZXIuaXNFbmNvZGluZ2Agd2hlbiBjaGVja2luZyBlbmNvZGluZyBuYW1lcyBhcyBzb21lXG4vLyBtb2R1bGVzIG1vbmtleS1wYXRjaCBpdCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgZW5jb2RpbmdzXG5mdW5jdGlvbiBub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgdmFyIG5lbmMgPSBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKTtcbiAgaWYgKHR5cGVvZiBuZW5jICE9PSAnc3RyaW5nJyAmJiAoQnVmZmVyLmlzRW5jb2RpbmcgPT09IGlzRW5jb2RpbmcgfHwgIWlzRW5jb2RpbmcoZW5jKSkpIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuYyk7XG4gIHJldHVybiBuZW5jIHx8IGVuYztcbn1cblxuLy8gU3RyaW5nRGVjb2RlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGVmZmljaWVudGx5IHNwbGl0dGluZyBhIHNlcmllcyBvZlxuLy8gYnVmZmVycyBpbnRvIGEgc2VyaWVzIG9mIEpTIHN0cmluZ3Mgd2l0aG91dCBicmVha2luZyBhcGFydCBtdWx0aS1ieXRlXG4vLyBjaGFyYWN0ZXJzLlxuZXhwb3J0cy5TdHJpbmdEZWNvZGVyID0gU3RyaW5nRGVjb2RlcjtcbmZ1bmN0aW9uIFN0cmluZ0RlY29kZXIoZW5jb2RpbmcpIHtcbiAgdGhpcy5lbmNvZGluZyA9IG5vcm1hbGl6ZUVuY29kaW5nKGVuY29kaW5nKTtcbiAgdmFyIG5iO1xuICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIHRoaXMudGV4dCA9IHV0ZjE2VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gdXRmMTZFbmQ7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1dGY4JzpcbiAgICAgIHRoaXMuZmlsbExhc3QgPSB1dGY4RmlsbExhc3Q7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgdGhpcy50ZXh0ID0gYmFzZTY0VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gYmFzZTY0RW5kO1xuICAgICAgbmIgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud3JpdGUgPSBzaW1wbGVXcml0ZTtcbiAgICAgIHRoaXMuZW5kID0gc2ltcGxlRW5kO1xuICAgICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAwO1xuICB0aGlzLmxhc3RUb3RhbCA9IDA7XG4gIHRoaXMubGFzdENoYXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobmIpO1xufVxuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgdmFyIHI7XG4gIHZhciBpO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHIgPSB0aGlzLmZpbGxMYXN0KGJ1Zik7XG4gICAgaWYgKHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuICcnO1xuICAgIGkgPSB0aGlzLmxhc3ROZWVkO1xuICAgIHRoaXMubGFzdE5lZWQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGkgPSAwO1xuICB9XG4gIGlmIChpIDwgYnVmLmxlbmd0aCkgcmV0dXJuIHIgPyByICsgdGhpcy50ZXh0KGJ1ZiwgaSkgOiB0aGlzLnRleHQoYnVmLCBpKTtcbiAgcmV0dXJuIHIgfHwgJyc7XG59O1xuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSB1dGY4RW5kO1xuXG4vLyBSZXR1cm5zIG9ubHkgY29tcGxldGUgY2hhcmFjdGVycyBpbiBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUudGV4dCA9IHV0ZjhUZXh0O1xuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIHBhcnRpYWwgbm9uLVVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5maWxsTGFzdCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn07XG5cbi8vIENoZWNrcyB0aGUgdHlwZSBvZiBhIFVURi04IGJ5dGUsIHdoZXRoZXIgaXQncyBBU0NJSSwgYSBsZWFkaW5nIGJ5dGUsIG9yIGFcbi8vIGNvbnRpbnVhdGlvbiBieXRlLiBJZiBhbiBpbnZhbGlkIGJ5dGUgaXMgZGV0ZWN0ZWQsIC0yIGlzIHJldHVybmVkLlxuZnVuY3Rpb24gdXRmOENoZWNrQnl0ZShieXRlKSB7XG4gIGlmIChieXRlIDw9IDB4N0YpIHJldHVybiAwO2Vsc2UgaWYgKGJ5dGUgPj4gNSA9PT0gMHgwNikgcmV0dXJuIDI7ZWxzZSBpZiAoYnl0ZSA+PiA0ID09PSAweDBFKSByZXR1cm4gMztlbHNlIGlmIChieXRlID4+IDMgPT09IDB4MUUpIHJldHVybiA0O1xuICByZXR1cm4gYnl0ZSA+PiA2ID09PSAweDAyID8gLTEgOiAtMjtcbn1cblxuLy8gQ2hlY2tzIGF0IG1vc3QgMyBieXRlcyBhdCB0aGUgZW5kIG9mIGEgQnVmZmVyIGluIG9yZGVyIHRvIGRldGVjdCBhblxuLy8gaW5jb21wbGV0ZSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3Rlci4gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyAoMiwgMywgb3IgNClcbi8vIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgVVRGLTggY2hhcmFjdGVyIChpZiBhcHBsaWNhYmxlKSBhcmUgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tJbmNvbXBsZXRlKHNlbGYsIGJ1ZiwgaSkge1xuICB2YXIgaiA9IGJ1Zi5sZW5ndGggLSAxO1xuICBpZiAoaiA8IGkpIHJldHVybiAwO1xuICB2YXIgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMTtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkgfHwgbmIgPT09IC0yKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMjtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkgfHwgbmIgPT09IC0yKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkge1xuICAgICAgaWYgKG5iID09PSAyKSBuYiA9IDA7ZWxzZSBzZWxmLmxhc3ROZWVkID0gbmIgLSAzO1xuICAgIH1cbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vIFZhbGlkYXRlcyBhcyBtYW55IGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciBhc1xuLy8gbmVlZGVkIG9yIGFyZSBhdmFpbGFibGUuIElmIHdlIHNlZSBhIG5vbi1jb250aW51YXRpb24gYnl0ZSB3aGVyZSB3ZSBleHBlY3Rcbi8vIG9uZSwgd2UgXCJyZXBsYWNlXCIgdGhlIHZhbGlkYXRlZCBjb250aW51YXRpb24gYnl0ZXMgd2UndmUgc2VlbiBzbyBmYXIgd2l0aFxuLy8gYSBzaW5nbGUgVVRGLTggcmVwbGFjZW1lbnQgY2hhcmFjdGVyICgnXFx1ZmZmZCcpLCB0byBtYXRjaCB2OCdzIFVURi04IGRlY29kaW5nXG4vLyBiZWhhdmlvci4gVGhlIGNvbnRpbnVhdGlvbiBieXRlIGNoZWNrIGlzIGluY2x1ZGVkIHRocmVlIHRpbWVzIGluIHRoZSBjYXNlXG4vLyB3aGVyZSBhbGwgb2YgdGhlIGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBjaGFyYWN0ZXIgZXhpc3QgaW4gdGhlIHNhbWUgYnVmZmVyLlxuLy8gSXQgaXMgYWxzbyBkb25lIHRoaXMgd2F5IGFzIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGluY3JlYXNlIGluc3RlYWQgb2YgdXNpbmcgYVxuLy8gbG9vcC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0V4dHJhQnl0ZXMoc2VsZiwgYnVmLCBwKSB7XG4gIGlmICgoYnVmWzBdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICBzZWxmLmxhc3ROZWVkID0gMDtcbiAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICB9XG4gIGlmIChzZWxmLmxhc3ROZWVkID4gMSAmJiBidWYubGVuZ3RoID4gMSkge1xuICAgIGlmICgoYnVmWzFdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgIHNlbGYubGFzdE5lZWQgPSAxO1xuICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICB9XG4gICAgaWYgKHNlbGYubGFzdE5lZWQgPiAyICYmIGJ1Zi5sZW5ndGggPiAyKSB7XG4gICAgICBpZiAoKGJ1ZlsyXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgICAgIHNlbGYubGFzdE5lZWQgPSAyO1xuICAgICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXIuXG5mdW5jdGlvbiB1dGY4RmlsbExhc3QoYnVmKSB7XG4gIHZhciBwID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICB2YXIgciA9IHV0ZjhDaGVja0V4dHJhQnl0ZXModGhpcywgYnVmLCBwKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHI7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn1cblxuLy8gUmV0dXJucyBhbGwgY29tcGxldGUgVVRGLTggY2hhcmFjdGVycyBpbiBhIEJ1ZmZlci4gSWYgdGhlIEJ1ZmZlciBlbmRlZCBvbiBhXG4vLyBwYXJ0aWFsIGNoYXJhY3RlciwgdGhlIGNoYXJhY3RlcidzIGJ5dGVzIGFyZSBidWZmZXJlZCB1bnRpbCB0aGUgcmVxdWlyZWRcbi8vIG51bWJlciBvZiBieXRlcyBhcmUgYXZhaWxhYmxlLlxuZnVuY3Rpb24gdXRmOFRleHQoYnVmLCBpKSB7XG4gIHZhciB0b3RhbCA9IHV0ZjhDaGVja0luY29tcGxldGUodGhpcywgYnVmLCBpKTtcbiAgaWYgKCF0aGlzLmxhc3ROZWVkKSByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSk7XG4gIHRoaXMubGFzdFRvdGFsID0gdG90YWw7XG4gIHZhciBlbmQgPSBidWYubGVuZ3RoIC0gKHRvdGFsIC0gdGhpcy5sYXN0TmVlZCk7XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIDAsIGVuZCk7XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpLCBlbmQpO1xufVxuXG4vLyBGb3IgVVRGLTgsIGEgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlzIGFkZGVkIHdoZW4gZW5kaW5nIG9uIGEgcGFydGlhbFxuLy8gY2hhcmFjdGVyLlxuZnVuY3Rpb24gdXRmOEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyAnXFx1ZmZmZCc7XG4gIHJldHVybiByO1xufVxuXG4vLyBVVEYtMTZMRSB0eXBpY2FsbHkgbmVlZHMgdHdvIGJ5dGVzIHBlciBjaGFyYWN0ZXIsIGJ1dCBldmVuIGlmIHdlIGhhdmUgYW4gZXZlblxuLy8gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSwgd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBlbmQgb24gYSBsZWFkaW5nL2hpZ2hcbi8vIHN1cnJvZ2F0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IHR3byBieXRlcyBpbiBvcmRlciB0b1xuLy8gZGVjb2RlIHRoZSBsYXN0IGNoYXJhY3RlciBwcm9wZXJseS5cbmZ1bmN0aW9uIHV0ZjE2VGV4dChidWYsIGkpIHtcbiAgaWYgKChidWYubGVuZ3RoIC0gaSkgJSAyID09PSAwKSB7XG4gICAgdmFyIHIgPSBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpKTtcbiAgICBpZiAocikge1xuICAgICAgdmFyIGMgPSByLmNoYXJDb2RlQXQoci5sZW5ndGggLSAxKTtcbiAgICAgIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REJGRikge1xuICAgICAgICB0aGlzLmxhc3ROZWVkID0gMjtcbiAgICAgICAgdGhpcy5sYXN0VG90YWwgPSA0O1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiByLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDE7XG4gIHRoaXMubGFzdFRvdGFsID0gMjtcbiAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpLCBidWYubGVuZ3RoIC0gMSk7XG59XG5cbi8vIEZvciBVVEYtMTZMRSB3ZSBkbyBub3QgZXhwbGljaXRseSBhcHBlbmQgc3BlY2lhbCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIGlmIHdlXG4vLyBlbmQgb24gYSBwYXJ0aWFsIGNoYXJhY3Rlciwgd2Ugc2ltcGx5IGxldCB2OCBoYW5kbGUgdGhhdC5cbmZ1bmN0aW9uIHV0ZjE2RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgdmFyIGVuZCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgICByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ3V0ZjE2bGUnLCAwLCBlbmQpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRUZXh0KGJ1ZiwgaSkge1xuICB2YXIgbiA9IChidWYubGVuZ3RoIC0gaSkgJSAzO1xuICBpZiAobiA9PT0gMCkgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSk7XG4gIHRoaXMubGFzdE5lZWQgPSAzIC0gbjtcbiAgdGhpcy5sYXN0VG90YWwgPSAzO1xuICBpZiAobiA9PT0gMSkge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGksIGJ1Zi5sZW5ndGggLSBuKTtcbn1cblxuZnVuY3Rpb24gYmFzZTY0RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ2Jhc2U2NCcsIDAsIDMgLSB0aGlzLmxhc3ROZWVkKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFBhc3MgYnl0ZXMgb24gdGhyb3VnaCBmb3Igc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIChlLmcuIGFzY2lpLCBsYXRpbjEsIGhleClcbmZ1bmN0aW9uIHNpbXBsZVdyaXRlKGJ1Zikge1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVFbmQoYnVmKSB7XG4gIHJldHVybiBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xufSIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZyA9IHZvaWQgMDtcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlckxpc3QgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCcpO1xudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBTdHJpbmdEZWNvZGVyO1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG52YXIga1Byb3h5RXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuXG5mdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuKSB7XG4gIC8vIFNhZGx5IHRoaXMgaXMgbm90IGNhY2hlYWJsZSBhcyBzb21lIGxpYnJhcmllcyBidW5kbGUgdGhlaXIgb3duXG4gIC8vIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVtLlxuICBpZiAodHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKTtlbHNlIGlmIChpc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO2Vsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV07XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICB2YXIgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciByZWFkYWJsZUh3bSA9IG9wdGlvbnMucmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuXG4gIGlmIChod20gfHwgaHdtID09PSAwKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBod207ZWxzZSBpZiAoaXNEdXBsZXggJiYgKHJlYWRhYmxlSHdtIHx8IHJlYWRhYmxlSHdtID09PSAwKSkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gcmVhZGFibGVId207ZWxzZSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gTWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspO1xuXG4gIC8vIEEgbGlua2VkIGxpc3QgaXMgdXNlZCB0byBzdG9yZSBkYXRhIGNodW5rcyBpbnN0ZWFkIG9mIGFuIGFycmF5IGJlY2F1c2UgdGhlXG4gIC8vIGxpbmtlZCBsaXN0IGNhbiByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgYmVnaW5uaW5nIGZhc3RlciB0aGFuXG4gIC8vIGFycmF5LnNoaWZ0KClcbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB0aGUgbnVtYmVyIG9mIHdyaXRlcnMgdGhhdCBhcmUgYXdhaXRpbmcgYSBkcmFpbiBldmVudCBpbiAucGlwZSgpc1xuICB0aGlzLmF3YWl0RHJhaW4gPSAwO1xuXG4gIC8vIGlmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWRcbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuXG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKSB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuUmVhZGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLnB1c2gobnVsbCk7XG4gIGNiKGVycik7XG59O1xuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHNraXBDaHVua0NoZWNrO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBlbmNvZGluZyA9ICcnO1xuICAgICAgfVxuICAgICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlLCBza2lwQ2h1bmtDaGVjayk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIG51bGwsIHRydWUsIGZhbHNlKTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQsIHNraXBDaHVua0NoZWNrKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVyO1xuICAgIGlmICghc2tpcENodW5rQ2hlY2spIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gICAgaWYgKGVyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihjaHVuaykgIT09IEJ1ZmZlci5wcm90b3R5cGUpIHtcbiAgICAgICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKSk7ZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO2Vsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZWVkTW9yZURhdGEoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkge1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSkgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gIH1cbiAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXI7XG4gIGlmICghX2lzVWludDhBcnJheShjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG4vLyBpZiBpdCdzIHBhc3QgdGhlIGhpZ2ggd2F0ZXIgbWFyaywgd2UgY2FuIHB1c2ggaW4gc29tZSBtb3JlLlxuLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWVcbi8vIG1vcmUgYnl0ZXMuICBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLFxuLy8gc3VjaCBhcyB0aGUgcmVwbC4gIEFsc28sIGlmIHRoZSBwdXNoKCkgdHJpZ2dlcmVkIGFcbi8vIHJlYWRhYmxlIGV2ZW50LCBhbmQgdGhlIHVzZXIgY2FsbGVkIHJlYWQobGFyZ2VOdW1iZXIpIHN1Y2ggdGhhdFxuLy8gbmVlZFJlYWRhYmxlIHdhcyBzZXQsIHRoZW4gd2Ugb3VnaHQgdG8gcHVzaCBtb3JlLCBzbyB0aGF0IGFub3RoZXJcbi8vICdyZWFkYWJsZScgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQuXG5mdW5jdGlvbiBuZWVkTW9yZURhdGEoc3RhdGUpIHtcbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubmVlZFJlYWRhYmxlIHx8IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcblxuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtlbHNlIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICB9XG5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cblxuICBpZiAocmV0ICE9PSBudWxsKSB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG59XG5cbi8vIERvbid0IGVtaXQgcmVhZGFibGUgcmlnaHQgYXdheSBpbiBzeW5jIG1vZGUsIGJlY2F1c2UgdGhpcyBjYW4gdHJpZ2dlclxuLy8gYW5vdGhlciByZWFkKCkgY2FsbCA9PiBzdGFjayBvdmVyZmxvdy4gIFRoaXMgd2F5LCBpdCBtaWdodCB0cmlnZ2VyXG4vLyBhIG5leHRUaWNrIHJlY3Vyc2lvbiB3YXJuaW5nLCBidXQgdGhhdCdzIG5vdCBzbyBiYWQuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnN5bmMpIHBuYS5uZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO2Vsc2UgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGRlYnVnKCdlbWl0IHJlYWRhYmxlJyk7XG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICBmbG93KHN0cmVhbSk7XG59XG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcG5hLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztlbHNlIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufVxuXG4vLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ19yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcG5hLm5leHRUaWNrKGVuZEZuKTtlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBpZiAodW5waXBlSW5mbyAmJiB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHVucGlwZUluZm8uaGFzVW5waXBlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgLy8gdG9vIHNsb3cuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICB2YXIgY2xlYW5lZFVwID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTtcbiAgICAvLyBjbGVhbnVwIGV2ZW50IGhhbmRsZXJzIG9uY2UgdGhlIHBpcGUgaXMgYnJva2VuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcblxuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKTtcbiAgfVxuXG4gIC8vIElmIHRoZSB1c2VyIHB1c2hlcyBtb3JlIGRhdGEgd2hpbGUgd2UncmUgd3JpdGluZyB0byBkZXN0IHRoZW4gd2UnbGwgZW5kIHVwXG4gIC8vIGluIG9uZGF0YSBhZ2Fpbi4gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIGluY3JlYXNlIGF3YWl0RHJhaW4gb25jZSBiZWNhdXNlXG4gIC8vIGRlc3Qgd2lsbCBvbmx5IGVtaXQgb25lICdkcmFpbicgZXZlbnQgZm9yIHRoZSBtdWx0aXBsZSB3cml0ZXMuXG4gIC8vID0+IEludHJvZHVjZSBhIGd1YXJkIG9uIGluY3JlYXNpbmcgYXdhaXREcmFpbi5cbiAgdmFyIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpO1xuICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgaWYgKGZhbHNlID09PSByZXQgJiYgIWluY3JlYXNlZEF3YWl0RHJhaW4pIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICAgIGlmICgoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJiBzdGF0ZS5waXBlcyA9PT0gZGVzdCB8fCBzdGF0ZS5waXBlc0NvdW50ID4gMSAmJiBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KSAhPT0gLTEpICYmICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgICAgICBzdGF0ZS5hd2FpdERyYWluKys7XG4gICAgICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIGhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpO1xuICAgIHVucGlwZSgpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgaWYgKEVFbGlzdGVuZXJDb3VudChkZXN0LCAnZXJyb3InKSA9PT0gMCkgZGVzdC5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgdXNlcmxhbmQgb25lcy5cbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKTtcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcblxuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BpcGUgcmVzdW1lJyk7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pIHN0YXRlLmF3YWl0RHJhaW4tLTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiA9PT0gMCAmJiBFRWxpc3RlbmVyQ291bnQoc3JjLCAnZGF0YScpKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbiAoZGVzdCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgdW5waXBlSW5mbyA9IHsgaGFzVW5waXBlZDogZmFsc2UgfTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKCFkZXN0KSBkZXN0ID0gc3RhdGUucGlwZXM7XG5cbiAgICAvLyBnb3QgYSBtYXRjaC5cbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGlmIChkZXN0KSBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIHZhciBkZXN0cyA9IHN0YXRlLnBpcGVzO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5waXBlc0NvdW50O1xuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzLCB7IGhhc1VucGlwZWQ6IGZhbHNlIH0pO1xuICAgIH1yZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpbmRleCA9IGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpO1xuICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGhpcztcblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuXG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBzZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZ1xuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG5cbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyBTdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWRcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkgdGhpcy5yZXN1bWUoKTtcbiAgfSBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpO1xuICBzZWxmLnJlYWQoMCk7XG59XG5cbi8vIHBhdXNlKCkgYW5kIHJlc3VtZSgpIGFyZSByZW1uYW50cyBvZiB0aGUgbGVnYWN5IHJlYWRhYmxlIHN0cmVhbSBBUElcbi8vIElmIHRoZSB1c2VyIHVzZXMgdGhlbSwgdGhlbiBzd2l0Y2ggaW50byBvbGQgbW9kZS5cblJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHBuYS5uZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpIHt9XG59XG5cbi8vIHdyYXAgYW4gb2xkLXN0eWxlIHN0cmVhbSBhcyB0aGUgYXN5bmMgZGF0YSBzb3VyY2UuXG4vLyBUaGlzIGlzICpub3QqIHBhcnQgb2YgdGhlIHJlYWRhYmxlIHN0cmVhbSBpbnRlcmZhY2UuXG4vLyBJdCBpcyBhbiB1Z2x5IHVuZm9ydHVuYXRlIG1lc3Mgb2YgaGlzdG9yeS5cblJlYWRhYmxlLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24gKHN0cmVhbSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcblxuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBfdGhpcy5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gX3RoaXMucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBrUHJveHlFdmVudHMubGVuZ3RoOyBuKyspIHtcbiAgICBzdHJlYW0ub24oa1Byb3h5RXZlbnRzW25dLCB0aGlzLmVtaXQuYmluZCh0aGlzLCBrUHJveHlFdmVudHNbbl0pKTtcbiAgfVxuXG4gIC8vIHdoZW4gd2UgdHJ5IHRvIGNvbnN1bWUgc29tZSBtb3JlIGJ5dGVzLCBzaW1wbHkgdW5wYXVzZSB0aGVcbiAgLy8gdW5kZXJseWluZyBzdHJlYW0uXG4gIHRoaXMuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIGRlYnVnKCd3cmFwcGVkIF9yZWFkJywgbik7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gIHZhciByZXQ7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKTtlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdFxuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSByZXQgPSBzdGF0ZS5idWZmZXIuam9pbignJyk7ZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IGZyb21MaXN0UGFydGlhbChuLCBzdGF0ZS5idWZmZXIsIHN0YXRlLmRlY29kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gRXh0cmFjdHMgb25seSBlbm91Z2ggYnVmZmVyZWQgZGF0YSB0byBzYXRpc2Z5IHRoZSBhbW91bnQgcmVxdWVzdGVkLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdFBhcnRpYWwobiwgbGlzdCwgaGFzU3RyaW5ncykge1xuICB2YXIgcmV0O1xuICBpZiAobiA8IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzXG4gICAgcmV0ID0gbGlzdC5oZWFkLmRhdGEuc2xpY2UoMCwgbik7XG4gICAgbGlzdC5oZWFkLmRhdGEgPSBsaXN0LmhlYWQuZGF0YS5zbGljZShuKTtcbiAgfSBlbHNlIGlmIChuID09PSBsaXN0LmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAvLyBmaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyXG4gICAgcmV0ID0gaGFzU3RyaW5ncyA/IGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIDogY29weUZyb21CdWZmZXIobiwgbGlzdCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YVxuLy8gY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLCBsaXN0KSB7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHZhciByZXQgPSBwLmRhdGE7XG4gIG4gLT0gcmV0Lmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgc3RyID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSByZXQgKz0gc3RyO2Vsc2UgcmV0ICs9IHN0ci5zbGljZSgwLCBuKTtcbiAgICBuIC09IG5iO1xuICAgIGlmIChuID09PSAwKSB7XG4gICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgKytjO1xuICAgICAgICBpZiAocC5uZXh0KSBsaXN0LmhlYWQgPSBwLm5leHQ7ZWxzZSBsaXN0LmhlYWQgPSBsaXN0LnRhaWwgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdC5oZWFkID0gcDtcbiAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICArK2M7XG4gIH1cbiAgbGlzdC5sZW5ndGggLT0gYztcbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBsaXN0IG9mIGJ1ZmZlcmVkIGRhdGEgY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KSB7XG4gIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHAuZGF0YS5jb3B5KHJldCk7XG4gIG4gLT0gcC5kYXRhLmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgYnVmID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBidWYubGVuZ3RoID8gYnVmLmxlbmd0aCA6IG47XG4gICAgYnVmLmNvcHkocmV0LCByZXQubGVuZ3RoIC0gbiwgMCwgbmIpO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIElmIHdlIGdldCBoZXJlIGJlZm9yZSBjb25zdW1pbmcgYWxsIHRoZSBieXRlcywgdGhlbiB0aGF0IGlzIGFcbiAgLy8gYnVnIGluIG5vZGUuICBTaG91bGQgbmV2ZXIgaGFwcGVuLlxuICBpZiAoc3RhdGUubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKCdcImVuZFJlYWRhYmxlKClcIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwbmEubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn0iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHRyYW5zZm9ybSBzdHJlYW0gaXMgYSByZWFkYWJsZS93cml0YWJsZSBzdHJlYW0gd2hlcmUgeW91IGRvXG4vLyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gIFNvbWV0aW1lcyBpdCdzIGNhbGxlZCBhIFwiZmlsdGVyXCIsXG4vLyBidXQgdGhhdCdzIG5vdCBhIGdyZWF0IG5hbWUgZm9yIGl0LCBzaW5jZSB0aGF0IGltcGxpZXMgYSB0aGluZyB3aGVyZVxuLy8gc29tZSBiaXRzIHBhc3MgdGhyb3VnaCwgYW5kIG90aGVycyBhcmUgc2ltcGx5IGlnbm9yZWQuICAoVGhhdCB3b3VsZFxuLy8gYmUgYSB2YWxpZCBleGFtcGxlIG9mIGEgdHJhbnNmb3JtLCBvZiBjb3Vyc2UuKVxuLy9cbi8vIFdoaWxlIHRoZSBvdXRwdXQgaXMgY2F1c2FsbHkgcmVsYXRlZCB0byB0aGUgaW5wdXQsIGl0J3Mgbm90IGFcbi8vIG5lY2Vzc2FyaWx5IHN5bW1ldHJpYyBvciBzeW5jaHJvbm91cyB0cmFuc2Zvcm1hdGlvbi4gIEZvciBleGFtcGxlLFxuLy8gYSB6bGliIHN0cmVhbSBtaWdodCB0YWtlIG11bHRpcGxlIHBsYWluLXRleHQgd3JpdGVzKCksIGFuZCB0aGVuXG4vLyBlbWl0IGEgc2luZ2xlIGNvbXByZXNzZWQgY2h1bmsgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuXG4vL1xuLy8gSGVyZSdzIGhvdyB0aGlzIHdvcmtzOlxuLy9cbi8vIFRoZSBUcmFuc2Zvcm0gc3RyZWFtIGhhcyBhbGwgdGhlIGFzcGVjdHMgb2YgdGhlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuLy8gc3RyZWFtIGNsYXNzZXMuICBXaGVuIHlvdSB3cml0ZShjaHVuayksIHRoYXQgY2FsbHMgX3dyaXRlKGNodW5rLGNiKVxuLy8gaW50ZXJuYWxseSwgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBhIGxvdCBvZiBwZW5kaW5nIHdyaXRlc1xuLy8gYnVmZmVyZWQgdXAuICBXaGVuIHlvdSBjYWxsIHJlYWQoKSwgdGhhdCBjYWxscyBfcmVhZChuKSB1bnRpbFxuLy8gdGhlcmUncyBlbm91Z2ggcGVuZGluZyByZWFkYWJsZSBkYXRhIGJ1ZmZlcmVkIHVwLlxuLy9cbi8vIEluIGEgdHJhbnNmb3JtIHN0cmVhbSwgdGhlIHdyaXR0ZW4gZGF0YSBpcyBwbGFjZWQgaW4gYSBidWZmZXIuICBXaGVuXG4vLyBfcmVhZChuKSBpcyBjYWxsZWQsIGl0IHRyYW5zZm9ybXMgdGhlIHF1ZXVlZCB1cCBkYXRhLCBjYWxsaW5nIHRoZVxuLy8gYnVmZmVyZWQgX3dyaXRlIGNiJ3MgYXMgaXQgY29uc3VtZXMgY2h1bmtzLiAgSWYgY29uc3VtaW5nIGEgc2luZ2xlXG4vLyB3cml0dGVuIGNodW5rIHdvdWxkIHJlc3VsdCBpbiBtdWx0aXBsZSBvdXRwdXQgY2h1bmtzLCB0aGVuIHRoZSBmaXJzdFxuLy8gb3V0cHV0dGVkIGJpdCBjYWxscyB0aGUgcmVhZGNiLCBhbmQgc3Vic2VxdWVudCBjaHVua3MganVzdCBnbyBpbnRvXG4vLyB0aGUgcmVhZCBidWZmZXIsIGFuZCB3aWxsIGNhdXNlIGl0IHRvIGVtaXQgJ3JlYWRhYmxlJyBpZiBuZWNlc3NhcnkuXG4vL1xuLy8gVGhpcyB3YXksIGJhY2stcHJlc3N1cmUgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcmVhZGluZyBzaWRlLFxuLy8gc2luY2UgX3JlYWQgaGFzIHRvIGJlIGNhbGxlZCB0byBzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGNodW5rLiAgSG93ZXZlcixcbi8vIGEgcGF0aG9sb2dpY2FsIGluZmxhdGUgdHlwZSBvZiB0cmFuc2Zvcm0gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBidWZmZXJpbmdcbi8vIGhlcmUuICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhIHN0cmVhbSB3aGVyZSBldmVyeSBieXRlIG9mIGlucHV0IGlzXG4vLyBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIGZyb20gMC0yNTUsIGFuZCB0aGVuIHJlc3VsdHMgaW4gdGhhdCBtYW55XG4vLyBieXRlcyBvZiBvdXRwdXQuICBXcml0aW5nIHRoZSA0IGJ5dGVzIHtmZixmZixmZixmZn0gd291bGQgcmVzdWx0IGluXG4vLyAxa2Igb2YgZGF0YSBiZWluZyBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIHlvdSBjb3VsZCB3cml0ZSBhIHZlcnkgc21hbGxcbi8vIGFtb3VudCBvZiBpbnB1dCwgYW5kIGVuZCB1cCB3aXRoIGEgdmVyeSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0LiAgSW5cbi8vIHN1Y2ggYSBwYXRob2xvZ2ljYWwgaW5mbGF0aW5nIG1lY2hhbmlzbSwgdGhlcmUnZCBiZSBubyB3YXkgdG8gdGVsbFxuLy8gdGhlIHN5c3RlbSB0byBzdG9wIGRvaW5nIHRoZSB0cmFuc2Zvcm0uICBBIHNpbmdsZSA0TUIgd3JpdGUgY291bGRcbi8vIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuXG4vL1xuLy8gSG93ZXZlciwgZXZlbiBpbiBzdWNoIGEgcGF0aG9sb2dpY2FsIGNhc2UsIG9ubHkgYSBzaW5nbGUgd3JpdHRlbiBjaHVua1xuLy8gd291bGQgYmUgY29uc3VtZWQsIGFuZCB0aGVuIHRoZSByZXN0IHdvdWxkIHdhaXQgKHVuLXRyYW5zZm9ybWVkKSB1bnRpbFxuLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHRyYW5zZm9ybWVkIGNodW5rIHdlcmUgY29uc3VtZWQuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cbnZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IE9iamVjdC5jcmVhdGUocmVxdWlyZSgnY29yZS11dGlsLWlzJykpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhUcmFuc2Zvcm0sIER1cGxleCk7XG5cbmZ1bmN0aW9uIGFmdGVyVHJhbnNmb3JtKGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy50cmFuc2Zvcm1pbmcgPSBmYWxzZTtcblxuICB2YXIgY2IgPSB0cy53cml0ZWNiO1xuXG4gIGlmICghY2IpIHtcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignd3JpdGUgY2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzJykpO1xuICB9XG5cbiAgdHMud3JpdGVjaHVuayA9IG51bGw7XG4gIHRzLndyaXRlY2IgPSBudWxsO1xuXG4gIGlmIChkYXRhICE9IG51bGwpIC8vIHNpbmdsZSBlcXVhbHMgY2hlY2sgZm9yIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICAgIHRoaXMucHVzaChkYXRhKTtcblxuICBjYihlcik7XG5cbiAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcnMucmVhZGluZyA9IGZhbHNlO1xuICBpZiAocnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHtcbiAgICB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKSByZXR1cm4gbmV3IFRyYW5zZm9ybShvcHRpb25zKTtcblxuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZSA9IHtcbiAgICBhZnRlclRyYW5zZm9ybTogYWZ0ZXJUcmFuc2Zvcm0uYmluZCh0aGlzKSxcbiAgICBuZWVkVHJhbnNmb3JtOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1pbmc6IGZhbHNlLFxuICAgIHdyaXRlY2I6IG51bGwsXG4gICAgd3JpdGVjaHVuazogbnVsbCxcbiAgICB3cml0ZWVuY29kaW5nOiBudWxsXG4gIH07XG5cbiAgLy8gc3RhcnQgb3V0IGFza2luZyBmb3IgYSByZWFkYWJsZSBldmVudCBvbmNlIGRhdGEgaXMgdHJhbnNmb3JtZWQuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyB3ZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fdHJhbnNmb3JtID0gb3B0aW9ucy50cmFuc2Zvcm07XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoID0gb3B0aW9ucy5mbHVzaDtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKTtcbn1cblxuZnVuY3Rpb24gcHJlZmluaXNoKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgdGhpcy5fZmx1c2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9mbHVzaChmdW5jdGlvbiAoZXIsIGRhdGEpIHtcbiAgICAgIGRvbmUoX3RoaXMsIGVyLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBkb25lKHRoaXMsIG51bGwsIG51bGwpO1xuICB9XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICByZXR1cm4gRHVwbGV4LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGVuY29kaW5nKTtcbn07XG5cbi8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgeW91IGRvIHN0dWZmIVxuLy8gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gJ2NodW5rJyBpcyBhbiBpbnB1dCBjaHVuay5cbi8vXG4vLyBDYWxsIGBwdXNoKG5ld0NodW5rKWAgdG8gcGFzcyBhbG9uZyB0cmFuc2Zvcm1lZCBvdXRwdXRcbi8vIHRvIHRoZSByZWFkYWJsZSBzaWRlLiAgWW91IG1heSBjYWxsICdwdXNoJyB6ZXJvIG9yIG1vcmUgdGltZXMuXG4vL1xuLy8gQ2FsbCBgY2IoZXJyKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGlzIGNodW5rLiAgSWYgeW91IHBhc3Ncbi8vIGFuIGVycm9yLCB0aGVuIHRoYXQnbGwgcHV0IHRoZSBodXJ0IG9uIHRoZSB3aG9sZSBvcGVyYXRpb24uICBJZiB5b3Vcbi8vIG5ldmVyIGNhbGwgY2IoKSwgdGhlbiB5b3UnbGwgbmV2ZXIgZ2V0IGFub3RoZXIgY2h1bmsuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ190cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLndyaXRlY2IgPSBjYjtcbiAgdHMud3JpdGVjaHVuayA9IGNodW5rO1xuICB0cy53cml0ZWVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIGlmICghdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAodHMubmVlZFRyYW5zZm9ybSB8fCBycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufTtcblxuLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgYXJncyBhcmUgaGVyZS5cbi8vIF90cmFuc2Zvcm0gZG9lcyBhbGwgdGhlIHdvcmsuXG4vLyBUaGF0IHdlIGdvdCBoZXJlIG1lYW5zIHRoYXQgdGhlIHJlYWRhYmxlIHNpZGUgd2FudHMgbW9yZSBkYXRhLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmIHRzLndyaXRlY2IgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB2YXIgX3RoaXMyID0gdGhpcztcblxuICBEdXBsZXgucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcywgZXJyLCBmdW5jdGlvbiAoZXJyMikge1xuICAgIGNiKGVycjIpO1xuICAgIF90aGlzMi5lbWl0KCdjbG9zZScpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG5cbiAgaWYgKGRhdGEgIT0gbnVsbCkgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgLy8gaWYgdGhlcmUncyBub3RoaW5nIGluIHRoZSB3cml0ZSBidWZmZXIsIHRoZW4gdGhhdCBtZWFuc1xuICAvLyB0aGF0IG5vdGhpbmcgbW9yZSB3aWxsIGV2ZXIgYmUgcHJvdmlkZWRcbiAgaWYgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwJyk7XG5cbiAgaWYgKHN0cmVhbS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmcnKTtcblxuICByZXR1cm4gc3RyZWFtLnB1c2gobnVsbCk7XG59IiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaDtcblxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vX3N0cmVhbV90cmFuc2Zvcm0nKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pO1xuXG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspO1xufTsiLAogICAgInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmlmIChwcm9jZXNzLmVudi5SRUFEQUJMRV9TVFJFQU0gPT09ICdkaXNhYmxlJyAmJiBTdHJlYW0pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBTdHJlYW07XG4gIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IFN0cmVhbS5SZWFkYWJsZTtcbiAgZXhwb3J0cy5SZWFkYWJsZSA9IFN0cmVhbS5SZWFkYWJsZTtcbiAgZXhwb3J0cy5Xcml0YWJsZSA9IFN0cmVhbS5Xcml0YWJsZTtcbiAgZXhwb3J0cy5EdXBsZXggPSBTdHJlYW0uRHVwbGV4O1xuICBleHBvcnRzLlRyYW5zZm9ybSA9IFN0cmVhbS5UcmFuc2Zvcm07XG4gIGV4cG9ydHMuUGFzc1Rocm91Z2ggPSBTdHJlYW0uUGFzc1Rocm91Z2g7XG4gIGV4cG9ydHMuU3RyZWFtID0gU3RyZWFtO1xufSBlbHNlIHtcbiAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuICBleHBvcnRzLlN0cmVhbSA9IFN0cmVhbSB8fCBleHBvcnRzO1xuICBleHBvcnRzLlJlYWRhYmxlID0gZXhwb3J0cztcbiAgZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbiAgZXhwb3J0cy5EdXBsZXggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuICBleHBvcnRzLlRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzJyk7XG4gIGV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpLlBhc3NUaHJvdWdoXG4iLAogICAgInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBSZWFkYWJsZTogUmVhZGFibGUsXG4gIFdyaXRhYmxlOiBXcml0YWJsZVxufTtcblxudXRpbC5pbmhlcml0cyhSZWFkYWJsZSwgUGFzc1Rocm91Z2gpO1xudXRpbC5pbmhlcml0cyhXcml0YWJsZSwgUGFzc1Rocm91Z2gpO1xuXG4vLyBQYXRjaCB0aGUgZ2l2ZW4gbWV0aG9kIG9mIGluc3RhbmNlIHNvIHRoYXQgdGhlIGNhbGxiYWNrXG4vLyBpcyBleGVjdXRlZCBvbmNlLCBiZWZvcmUgdGhlIGFjdHVhbCBtZXRob2QgaXMgY2FsbGVkIHRoZVxuLy8gZmlyc3QgdGltZS5cbmZ1bmN0aW9uIGJlZm9yZUZpcnN0Q2FsbChpbnN0YW5jZSwgbWV0aG9kLCBjYWxsYmFjaykge1xuICBpbnN0YW5jZVttZXRob2RdID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIGluc3RhbmNlW21ldGhvZF07XG4gICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdGhpc1ttZXRob2RdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlKGZuLCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZShmbiwgb3B0aW9ucyk7XG5cbiAgUGFzc1Rocm91Z2guY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBiZWZvcmVGaXJzdENhbGwodGhpcywgJ19yZWFkJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNvdXJjZSA9IGZuLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgdmFyIGVtaXQgPSB0aGlzLmVtaXQuYmluZCh0aGlzLCAnZXJyb3InKTtcbiAgICBzb3VyY2Uub24oJ2Vycm9yJywgZW1pdCk7XG4gICAgc291cmNlLnBpcGUodGhpcyk7XG4gIH0pO1xuXG4gIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGUoZm4sIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRhYmxlKSlcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKGZuLCBvcHRpb25zKTtcblxuICBQYXNzVGhyb3VnaC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGJlZm9yZUZpcnN0Q2FsbCh0aGlzLCAnX3dyaXRlJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gZm4uY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB2YXIgZW1pdCA9IHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlcnJvcicpO1xuICAgIGRlc3RpbmF0aW9uLm9uKCdlcnJvcicsIGVtaXQpO1xuICAgIHRoaXMucGlwZShkZXN0aW5hdGlvbik7XG4gIH0pO1xuXG4gIHRoaXMuZW1pdCgnd3JpdGFibGUnKTtcbn1cblxuIiwKICAgICIvKiFcbiAqIG5vcm1hbGl6ZS1wYXRoIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9ub3JtYWxpemUtcGF0aD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCwgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihwYXRoLCBzdHJpcFRyYWlsaW5nKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBwYXRoIHRvIGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAocGF0aCA9PT0gJ1xcXFwnIHx8IHBhdGggPT09ICcvJykgcmV0dXJuICcvJztcblxuICB2YXIgbGVuID0gcGF0aC5sZW5ndGg7XG4gIGlmIChsZW4gPD0gMSkgcmV0dXJuIHBhdGg7XG5cbiAgLy8gZW5zdXJlIHRoYXQgd2luMzIgbmFtZXNwYWNlcyBoYXMgdHdvIGxlYWRpbmcgc2xhc2hlcywgc28gdGhhdCB0aGUgcGF0aCBpc1xuICAvLyBoYW5kbGVkIHByb3Blcmx5IGJ5IHRoZSB3aW4zMiB2ZXJzaW9uIG9mIHBhdGgucGFyc2UoKSBhZnRlciBiZWluZyBub3JtYWxpemVkXG4gIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MjQ3KHY9dnMuODUpLmFzcHgjbmFtZXNwYWNlc1xuICB2YXIgcHJlZml4ID0gJyc7XG4gIGlmIChsZW4gPiA0ICYmIHBhdGhbM10gPT09ICdcXFxcJykge1xuICAgIHZhciBjaCA9IHBhdGhbMl07XG4gICAgaWYgKChjaCA9PT0gJz8nIHx8IGNoID09PSAnLicpICYmIHBhdGguc2xpY2UoMCwgMikgPT09ICdcXFxcXFxcXCcpIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDIpO1xuICAgICAgcHJlZml4ID0gJy8vJztcbiAgICB9XG4gIH1cblxuICB2YXIgc2VncyA9IHBhdGguc3BsaXQoL1svXFxcXF0rLyk7XG4gIGlmIChzdHJpcFRyYWlsaW5nICE9PSBmYWxzZSAmJiBzZWdzW3NlZ3MubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgc2Vncy5wb3AoKTtcbiAgfVxuICByZXR1cm4gcHJlZml4ICsgc2Vncy5qb2luKCcvJyk7XG59O1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwKICAgICIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLAogICAgInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlclJlc3Q7XG4iLAogICAgIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwKICAgICIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLAogICAgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsCiAgICAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsCiAgICAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsCiAgICAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLAogICAgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLAogICAgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLAogICAgInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLAogICAgInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLAogICAgIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwKICAgICJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsCiAgICAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsCiAgICAidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwKICAgICIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLAogICAgInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLAogICAgInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsCiAgICAiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLAogICAgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsCiAgICAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLAogICAgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwKICAgICJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IGluZGV4IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgaW5kZXggb3Iga2V5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICA/IChpc0FycmF5TGlrZShvYmplY3QpICYmIGlzSW5kZXgoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxuICAgICAgICA6ICh0eXBlID09ICdzdHJpbmcnICYmIGluZGV4IGluIG9iamVjdClcbiAgICAgICkge1xuICAgIHJldHVybiBlcShvYmplY3RbaW5kZXhdLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXRlcmF0ZWVDYWxsO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwKICAgICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsCiAgICAidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwKICAgICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLAogICAgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwKICAgICJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsCiAgICAidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLAogICAgInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsCiAgICAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwKICAgICIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLAogICAgInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsCiAgICAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwKICAgICJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAqIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXMgdGhhdFxuICogcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmRlZmF1bHRzRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBkZWZhdWx0cyA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoO1xuICB2YXIgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3VyY2UpO1xuICAgIHZhciBwcm9wc0luZGV4ID0gLTE7XG4gICAgdmFyIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsrcHJvcHNJbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbcHJvcHNJbmRleF07XG4gICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAoZXEodmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKlxuICBUaGlzIGZpbGUgaXMgYSByZWR1Y2VkIGFuZCBhZGFwdGVkIHZlcnNpb24gb2YgdGhlIG1haW4gbGliL2ludGVybmFsL3Blcl9jb250ZXh0L3ByaW1vcmRpYWxzLmpzIGZpbGUgZGVmaW5lZCBhdFxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvcGVyX2NvbnRleHQvcHJpbW9yZGlhbHMuanNcblxuICBEb24ndCB0cnkgdG8gcmVwbGFjZSB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIGFuZCBrZWVwIGl0IHVwIHRvIGRhdGUgd2l0aCB0aGUgdXBzdHJlYW0gZmlsZS5cbiovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQXJyYXlJc0FycmF5KHNlbGYpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzZWxmKVxuICB9LFxuICBBcnJheVByb3RvdHlwZUluY2x1ZGVzKHNlbGYsIGVsKSB7XG4gICAgcmV0dXJuIHNlbGYuaW5jbHVkZXMoZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlSW5kZXhPZihzZWxmLCBlbCkge1xuICAgIHJldHVybiBzZWxmLmluZGV4T2YoZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlSm9pbihzZWxmLCBzZXApIHtcbiAgICByZXR1cm4gc2VsZi5qb2luKHNlcClcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVNYXAoc2VsZiwgZm4pIHtcbiAgICByZXR1cm4gc2VsZi5tYXAoZm4pXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlUG9wKHNlbGYsIGVsKSB7XG4gICAgcmV0dXJuIHNlbGYucG9wKGVsKVxuICB9LFxuICBBcnJheVByb3RvdHlwZVB1c2goc2VsZiwgZWwpIHtcbiAgICByZXR1cm4gc2VsZi5wdXNoKGVsKVxuICB9LFxuICBBcnJheVByb3RvdHlwZVNsaWNlKHNlbGYsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc2VsZi5zbGljZShzdGFydCwgZW5kKVxuICB9LFxuICBFcnJvcixcbiAgRnVuY3Rpb25Qcm90b3R5cGVDYWxsKGZuLCB0aGlzQXJncywgLi4uYXJncykge1xuICAgIHJldHVybiBmbi5jYWxsKHRoaXNBcmdzLCAuLi5hcmdzKVxuICB9LFxuICBGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlKHNlbGYsIGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLmNhbGwoc2VsZiwgaW5zdGFuY2UpXG4gIH0sXG4gIE1hdGhGbG9vcjogTWF0aC5mbG9vcixcbiAgTnVtYmVyLFxuICBOdW1iZXJJc0ludGVnZXI6IE51bWJlci5pc0ludGVnZXIsXG4gIE51bWJlcklzTmFOOiBOdW1iZXIuaXNOYU4sXG4gIE51bWJlck1BWF9TQUZFX0lOVEVHRVI6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJNSU5fU0FGRV9JTlRFR0VSOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgTnVtYmVyUGFyc2VJbnQ6IE51bWJlci5wYXJzZUludCxcbiAgT2JqZWN0RGVmaW5lUHJvcGVydGllcyhzZWxmLCBwcm9wcykge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzZWxmLCBwcm9wcylcbiAgfSxcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoc2VsZiwgbmFtZSwgcHJvcCkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgbmFtZSwgcHJvcClcbiAgfSxcbiAgT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNlbGYsIG5hbWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzZWxmLCBuYW1lKVxuICB9LFxuICBPYmplY3RLZXlzKG9iaikge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gIH0sXG4gIE9iamVjdFNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG4gIH0sXG4gIFByb21pc2UsXG4gIFByb21pc2VQcm90b3R5cGVDYXRjaChzZWxmLCBmbikge1xuICAgIHJldHVybiBzZWxmLmNhdGNoKGZuKVxuICB9LFxuICBQcm9taXNlUHJvdG90eXBlVGhlbihzZWxmLCB0aGVuRm4sIGNhdGNoRm4pIHtcbiAgICByZXR1cm4gc2VsZi50aGVuKHRoZW5GbiwgY2F0Y2hGbilcbiAgfSxcbiAgUHJvbWlzZVJlamVjdChlcnIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICB9LFxuICBQcm9taXNlUmVzb2x2ZSh2YWwpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbClcbiAgfSxcbiAgUmVmbGVjdEFwcGx5OiBSZWZsZWN0LmFwcGx5LFxuICBSZWdFeHBQcm90b3R5cGVUZXN0KHNlbGYsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHNlbGYudGVzdCh2YWx1ZSlcbiAgfSxcbiAgU2FmZVNldDogU2V0LFxuICBTdHJpbmcsXG4gIFN0cmluZ1Byb3RvdHlwZVNsaWNlKHNlbGYsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc2VsZi5zbGljZShzdGFydCwgZW5kKVxuICB9LFxuICBTdHJpbmdQcm90b3R5cGVUb0xvd2VyQ2FzZShzZWxmKSB7XG4gICAgcmV0dXJuIHNlbGYudG9Mb3dlckNhc2UoKVxuICB9LFxuICBTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZShzZWxmKSB7XG4gICAgcmV0dXJuIHNlbGYudG9VcHBlckNhc2UoKVxuICB9LFxuICBTdHJpbmdQcm90b3R5cGVUcmltKHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi50cmltKClcbiAgfSxcbiAgU3ltYm9sLFxuICBTeW1ib2xGb3I6IFN5bWJvbC5mb3IsXG4gIFN5bWJvbEFzeW5jSXRlcmF0b3I6IFN5bWJvbC5hc3luY0l0ZXJhdG9yLFxuICBTeW1ib2xIYXNJbnN0YW5jZTogU3ltYm9sLmhhc0luc3RhbmNlLFxuICBTeW1ib2xJdGVyYXRvcjogU3ltYm9sLml0ZXJhdG9yLFxuICBTeW1ib2xEaXNwb3NlOiBTeW1ib2wuZGlzcG9zZSB8fCBTeW1ib2woJ1N5bWJvbC5kaXNwb3NlJyksXG4gIFN5bWJvbEFzeW5jRGlzcG9zZTogU3ltYm9sLmFzeW5jRGlzcG9zZSB8fCBTeW1ib2woJ1N5bWJvbC5hc3luY0Rpc3Bvc2UnKSxcbiAgVHlwZWRBcnJheVByb3RvdHlwZVNldChzZWxmLCBidWYsIGxlbikge1xuICAgIHJldHVybiBzZWxmLnNldChidWYsIGxlbilcbiAgfSxcbiAgQm9vbGVhbjogQm9vbGVhbixcbiAgVWludDhBcnJheVxufVxuIiwKICAgICIvKipcbiAqIEBhdXRob3IgVG9ydSBOYWdhc2hpbWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9teXN0aWNhdGVhPlxuICogQGNvcHlyaWdodCAyMDE1IFRvcnUgTmFnYXNoaW1hLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUHJpdmF0ZURhdGFcbiAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge3t0eXBlOnN0cmluZ319IGV2ZW50IFRoZSBvcmlnaW5hbCBldmVudCBvYmplY3QuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXZlbnRQaGFzZSBUaGUgY3VycmVudCBldmVudCBwaGFzZS5cbiAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR8bnVsbH0gY3VycmVudFRhcmdldCBUaGUgY3VycmVudCBldmVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNhbmNlbGVkIFRoZSBmbGFnIHRvIHByZXZlbnQgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3RvcHBlZCBUaGUgZmxhZyB0byBzdG9wIHByb3BhZ2F0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBpbW1lZGlhdGVTdG9wcGVkIFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24gaW1tZWRpYXRlbHkuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufG51bGx9IHBhc3NpdmVMaXN0ZW5lciBUaGUgbGlzdGVuZXIgaWYgdGhlIGN1cnJlbnQgbGlzdGVuZXIgaXMgcGFzc2l2ZS4gT3RoZXJ3aXNlIHRoaXMgaXMgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lU3RhbXAgVGhlIHVuaXggdGltZS5cbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBQcml2YXRlIGRhdGEgZm9yIGV2ZW50IHdyYXBwZXJzLlxuICogQHR5cGUge1dlYWtNYXA8RXZlbnQsIFByaXZhdGVEYXRhPn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHByaXZhdGVEYXRhID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBDYWNoZSBmb3Igd3JhcHBlciBjbGFzc2VzLlxuICogQHR5cGUge1dlYWtNYXA8T2JqZWN0LCBGdW5jdGlvbj59XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCB3cmFwcGVycyA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogR2V0IHByaXZhdGUgZGF0YS5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QgdG8gZ2V0IHByaXZhdGUgZGF0YS5cbiAqIEByZXR1cm5zIHtQcml2YXRlRGF0YX0gVGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgZXZlbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwZChldmVudCkge1xuICAgIGNvbnN0IHJldHYgPSBwcml2YXRlRGF0YS5nZXQoZXZlbnQpO1xuICAgIGNvbnNvbGUuYXNzZXJ0KFxuICAgICAgICByZXR2ICE9IG51bGwsXG4gICAgICAgIFwiJ3RoaXMnIGlzIGV4cGVjdGVkIGFuIEV2ZW50IG9iamVjdCwgYnV0IGdvdFwiLFxuICAgICAgICBldmVudFxuICAgICk7XG4gICAgcmV0dXJuIHJldHZcbn1cblxuLyoqXG4gKiBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI3NldC10aGUtY2FuY2VsZWQtZmxhZ1xuICogQHBhcmFtIGRhdGEge1ByaXZhdGVEYXRhfSBwcml2YXRlIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIHNldENhbmNlbEZsYWcoZGF0YSkge1xuICAgIGlmIChkYXRhLnBhc3NpdmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuYWJsZSB0byBwcmV2ZW50RGVmYXVsdCBpbnNpZGUgcGFzc2l2ZSBldmVudCBsaXN0ZW5lciBpbnZvY2F0aW9uLlwiLFxuICAgICAgICAgICAgICAgIGRhdGEucGFzc2l2ZUxpc3RlbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWRhdGEuZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBkYXRhLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQucHJldmVudERlZmF1bHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbi8qKlxuICogVGhlIGV2ZW50IHdyYXBwZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgb2YgdGhpcyBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7RXZlbnR8e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIG9yaWdpbmFsIGV2ZW50IHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIEV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgIHByaXZhdGVEYXRhLnNldCh0aGlzLCB7XG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICBldmVudCxcbiAgICAgICAgZXZlbnRQaGFzZTogMixcbiAgICAgICAgY3VycmVudFRhcmdldDogZXZlbnRUYXJnZXQsXG4gICAgICAgIGNhbmNlbGVkOiBmYWxzZSxcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIGltbWVkaWF0ZVN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICBwYXNzaXZlTGlzdGVuZXI6IG51bGwsXG4gICAgICAgIHRpbWVTdGFtcDogZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCksXG4gICAgfSk7XG5cbiAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNVbmZvcmdlYWJsZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlzVHJ1c3RlZFwiLCB7IHZhbHVlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuICAgIC8vIERlZmluZSBhY2Nlc3NvcnNcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoIShrZXkgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gU2hvdWxkIGJlIGVudW1lcmFibGUsIGJ1dCBjbGFzcyBtZXRob2RzIGFyZSBub3QgZW51bWVyYWJsZS5cbkV2ZW50LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudC50eXBlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICovXG4gICAgZ2V0IHRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRUYXJnZXQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5jdXJyZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtFdmVudFRhcmdldFtdfSBUaGUgY29tcG9zZWQgcGF0aCBvZiB0aGlzIGV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBvc2VkUGF0aCgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IHBkKHRoaXMpLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbY3VycmVudFRhcmdldF1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgb2YgTk9ORS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBOT05FKCkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBDQVBUVVJJTkdfUEhBU0UuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgQ0FQVFVSSU5HX1BIQVNFKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBBVF9UQVJHRVQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgQVRfVEFSR0VUKCkge1xuICAgICAgICByZXR1cm4gMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBCVUJCTElOR19QSEFTRS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBCVUJCTElOR19QSEFTRSgpIHtcbiAgICAgICAgcmV0dXJuIDNcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IGV2ZW50UGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFBoYXNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0b3AgZXZlbnQgYnViYmxpbmcuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gcGQodGhpcyk7XG5cbiAgICAgICAgZGF0YS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0b3AgZXZlbnQgYnViYmxpbmcuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gcGQodGhpcyk7XG5cbiAgICAgICAgZGF0YS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgZGF0YS5pbW1lZGlhdGVTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGJ1YmJsaW5nLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBidWJibGVzKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5idWJibGVzKVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBiZSBjYW5jZWxhYmxlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBjYW5jZWxhYmxlKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5jYW5jZWxhYmxlKVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWwgdGhpcyBldmVudC5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgc2V0Q2FuY2VsRmxhZyhwZCh0aGlzKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdFByZXZlbnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmNhbmNlbGVkXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGNvbXBvc2VkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBjb21wb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ocGQodGhpcykuZXZlbnQuY29tcG9zZWQpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bml4IHRpbWUgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCB0aW1lU3RhbXAoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS50aW1lU3RhbXBcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBzcmNFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gc3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBjYW5jZWxCdWJibGUoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5zdG9wcGVkXG4gICAgfSxcbiAgICBzZXQgY2FuY2VsQnViYmxlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuY2FuY2VsQnViYmxlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgZGF0YS5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCByZXR1cm5WYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuICFwZCh0aGlzKS5jYW5jZWxlZFxuICAgIH0sXG4gICAgc2V0IHJldHVyblZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHNldENhbmNlbEZsYWcocGQodGhpcykpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhpcyBldmVudCBvYmplY3QuIEJ1dCBkbyBub3RoaW5nIHVuZGVyIGV2ZW50IGRpc3BhdGNoaW5nLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2J1YmJsZXM9ZmFsc2VdIFRoZSBmbGFnIHRvIGJlIHBvc3NpYmxlIHRvIGJ1YmJsZSB1cC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjYW5jZWxhYmxlPWZhbHNlXSBUaGUgZmxhZyB0byBiZSBwb3NzaWJsZSB0byBjYW5jZWwuXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBpbml0RXZlbnQoKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSxcbn07XG5cbi8vIGBjb25zdHJ1Y3RvcmAgaXMgbm90IGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogRXZlbnQsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxufSk7XG5cbi8vIEVuc3VyZSBgZXZlbnQgaW5zdGFuY2VvZiB3aW5kb3cuRXZlbnRgIGlzIGB0cnVlYC5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuRXZlbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXZlbnQucHJvdG90eXBlLCB3aW5kb3cuRXZlbnQucHJvdG90eXBlKTtcblxuICAgIC8vIE1ha2UgYXNzb2NpYXRpb24gZm9yIHdyYXBwZXJzLlxuICAgIHdyYXBwZXJzLnNldCh3aW5kb3cuRXZlbnQucHJvdG90eXBlLCBFdmVudCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIHJlZGlyZWN0IGEgZ2l2ZW4gcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFByb3BlcnR5IG5hbWUgdG8gZGVmaW5lIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZXNjcmlwdG9yfSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byByZWRpcmVjdCB0aGUgcHJvcGVydHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWRpcmVjdERlc2NyaXB0b3Ioa2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50W2tleV1cbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICBwZCh0aGlzKS5ldmVudFtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIGNhbGwgYSBnaXZlbiBtZXRob2QgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFByb3BlcnR5IG5hbWUgdG8gZGVmaW5lIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZXNjcmlwdG9yfSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byBjYWxsIHRoZSBtZXRob2QgcHJvcGVydHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVDYWxsRGVzY3JpcHRvcihrZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGQodGhpcykuZXZlbnQ7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnRba2V5XS5hcHBseShldmVudCwgYXJndW1lbnRzKVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfVxufVxuXG4vKipcbiAqIERlZmluZSBuZXcgd3JhcHBlciBjbGFzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IEJhc2VFdmVudCBUaGUgYmFzZSB3cmFwcGVyIGNsYXNzLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBwcm90b3R5cGUgb2YgdGhlIG9yaWdpbmFsIGV2ZW50LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgZGVmaW5lZCB3cmFwcGVyIGNsYXNzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lV3JhcHBlcihCYXNlRXZlbnQsIHByb3RvKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3RvKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJhc2VFdmVudFxuICAgIH1cblxuICAgIC8qKiBDdXN0b21FdmVudCAqL1xuICAgIGZ1bmN0aW9uIEN1c3RvbUV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgICAgICBCYXNlRXZlbnQuY2FsbCh0aGlzLCBldmVudFRhcmdldCwgZXZlbnQpO1xuICAgIH1cblxuICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogQ3VzdG9tRXZlbnQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIC8vIERlZmluZSBhY2Nlc3NvcnMuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmICghKGtleSBpbiBCYXNlRXZlbnQucHJvdG90eXBlKSkge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGtleSk7XG4gICAgICAgICAgICBjb25zdCBpc0Z1bmMgPSB0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgaXNGdW5jXG4gICAgICAgICAgICAgICAgICAgID8gZGVmaW5lQ2FsbERlc2NyaXB0b3Ioa2V5KVxuICAgICAgICAgICAgICAgICAgICA6IGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50XG59XG5cbi8qKlxuICogR2V0IHRoZSB3cmFwcGVyIGNsYXNzIG9mIGEgZ2l2ZW4gcHJvdG90eXBlLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBwcm90b3R5cGUgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIGdldCBpdHMgd3JhcHBlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIHdyYXBwZXIgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRXcmFwcGVyKHByb3RvKSB7XG4gICAgaWYgKHByb3RvID09IG51bGwgfHwgcHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIEV2ZW50XG4gICAgfVxuXG4gICAgbGV0IHdyYXBwZXIgPSB3cmFwcGVycy5nZXQocHJvdG8pO1xuICAgIGlmICh3cmFwcGVyID09IG51bGwpIHtcbiAgICAgICAgd3JhcHBlciA9IGRlZmluZVdyYXBwZXIoZ2V0V3JhcHBlcihPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pKSwgcHJvdG8pO1xuICAgICAgICB3cmFwcGVycy5zZXQocHJvdG8sIHdyYXBwZXIpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlclxufVxuXG4vKipcbiAqIFdyYXAgYSBnaXZlbiBldmVudCB0byBtYW5hZ2VtZW50IGEgZGlzcGF0Y2hpbmcuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSBldmVudFRhcmdldCBUaGUgZXZlbnQgdGFyZ2V0IG9mIHRoaXMgZGlzcGF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RXZlbnR9IFRoZSB3cmFwcGVyIGluc3RhbmNlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gd3JhcEV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgIGNvbnN0IFdyYXBwZXIgPSBnZXRXcmFwcGVyKE9iamVjdC5nZXRQcm90b3R5cGVPZihldmVudCkpO1xuICAgIHJldHVybiBuZXcgV3JhcHBlcihldmVudFRhcmdldCwgZXZlbnQpXG59XG5cbi8qKlxuICogR2V0IHRoZSBpbW1lZGlhdGVTdG9wcGVkIGZsYWcgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVGhlIGZsYWcgdG8gc3RvcCBwcm9wYWdhdGlvbiBpbW1lZGlhdGVseS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzU3RvcHBlZChldmVudCkge1xuICAgIHJldHVybiBwZChldmVudCkuaW1tZWRpYXRlU3RvcHBlZFxufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBldmVudCBwaGFzZSBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIHNldCBjdXJyZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBldmVudFBoYXNlIE5ldyBldmVudCBwaGFzZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0RXZlbnRQaGFzZShldmVudCwgZXZlbnRQaGFzZSkge1xuICAgIHBkKGV2ZW50KS5ldmVudFBoYXNlID0gZXZlbnRQaGFzZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtFdmVudFRhcmdldHxudWxsfSBjdXJyZW50VGFyZ2V0IE5ldyBjdXJyZW50IHRhcmdldC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0Q3VycmVudFRhcmdldChldmVudCwgY3VycmVudFRhcmdldCkge1xuICAgIHBkKGV2ZW50KS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbn1cblxuLyoqXG4gKiBTZXQgYSBwYXNzaXZlIGxpc3RlbmVyIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSBwYXNzaXZlTGlzdGVuZXIgTmV3IHBhc3NpdmUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldFBhc3NpdmVMaXN0ZW5lcihldmVudCwgcGFzc2l2ZUxpc3RlbmVyKSB7XG4gICAgcGQoZXZlbnQpLnBhc3NpdmVMaXN0ZW5lciA9IHBhc3NpdmVMaXN0ZW5lcjtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMaXN0ZW5lck5vZGVcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGxpc3RlbmVyXG4gKiBAcHJvcGVydHkgezF8MnwzfSBsaXN0ZW5lclR5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFzc2l2ZVxuICogQHByb3BlcnR5IHtib29sZWFufSBvbmNlXG4gKiBAcHJvcGVydHkge0xpc3RlbmVyTm9kZXxudWxsfSBuZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCBNYXA8c3RyaW5nLCBMaXN0ZW5lck5vZGU+Pn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGxpc3RlbmVyc01hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbi8vIExpc3RlbmVyIHR5cGVzXG5jb25zdCBDQVBUVVJFID0gMTtcbmNvbnN0IEJVQkJMRSA9IDI7XG5jb25zdCBBVFRSSUJVVEUgPSAzO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBnaXZlbiB2YWx1ZSBpcyBhbiBvYmplY3Qgb3Igbm90LlxuICogQHBhcmFtIHthbnl9IHggVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc09iamVjdCh4KSB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09IFwib2JqZWN0XCIgLy9lc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG59XG5cbi8qKlxuICogR2V0IGxpc3RlbmVycy5cbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgdG8gZ2V0LlxuICogQHJldHVybnMge01hcDxzdHJpbmcsIExpc3RlbmVyTm9kZT59IFRoZSBsaXN0ZW5lcnMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRMaXN0ZW5lcnMoZXZlbnRUYXJnZXQpIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnNNYXAuZ2V0KGV2ZW50VGFyZ2V0KTtcbiAgICBpZiAobGlzdGVuZXJzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIFwiJ3RoaXMnIGlzIGV4cGVjdGVkIGFuIEV2ZW50VGFyZ2V0IG9iamVjdCwgYnV0IGdvdCBhbm90aGVyIHZhbHVlLlwiXG4gICAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGxpc3RlbmVyc1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIGV2ZW50IGF0dHJpYnV0ZSBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byBnZXQgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yKGV2ZW50TmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmxpc3RlbmVyVHlwZSA9PT0gQVRUUklCVVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmxpc3RlbmVyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9LFxuXG4gICAgICAgIHNldChsaXN0ZW5lcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiICYmICFpc09iamVjdChsaXN0ZW5lcikpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IG51bGw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcblxuICAgICAgICAgICAgLy8gVHJhdmVyc2UgdG8gdGhlIHRhaWwgd2hpbGUgcmVtb3Zpbmcgb2xkIHZhbHVlLlxuICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubGlzdGVuZXJUeXBlID09PSBBVFRSSUJVVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIG9sZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIG5ldyB2YWx1ZS5cbiAgICAgICAgICAgIGlmIChsaXN0ZW5lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lclR5cGU6IEFUVFJJQlVURSxcbiAgICAgICAgICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG9uY2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5ld05vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfVxufVxuXG4vKipcbiAqIERlZmluZSBhbiBldmVudCBhdHRyaWJ1dGUgKGUuZy4gYGV2ZW50VGFyZ2V0Lm9uY2xpY2tgKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFRhcmdldFByb3RvdHlwZSBUaGUgZXZlbnQgdGFyZ2V0IHByb3RvdHlwZSB0byBkZWZpbmUgYW4gZXZlbnQgYXR0cmJpdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGRlZmluZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBkZWZpbmVFdmVudEF0dHJpYnV0ZShldmVudFRhcmdldFByb3RvdHlwZSwgZXZlbnROYW1lKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICBldmVudFRhcmdldFByb3RvdHlwZSxcbiAgICAgICAgYG9uJHtldmVudE5hbWV9YCxcbiAgICAgICAgZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yKGV2ZW50TmFtZSlcbiAgICApO1xufVxuXG4vKipcbiAqIERlZmluZSBhIGN1c3RvbSBFdmVudFRhcmdldCB3aXRoIGV2ZW50IGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBldmVudE5hbWVzIEV2ZW50IG5hbWVzIGZvciBldmVudCBhdHRyaWJ1dGVzLlxuICogQHJldHVybnMge0V2ZW50VGFyZ2V0fSBUaGUgY3VzdG9tIEV2ZW50VGFyZ2V0LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQoZXZlbnROYW1lcykge1xuICAgIC8qKiBDdXN0b21FdmVudFRhcmdldCAqL1xuICAgIGZ1bmN0aW9uIEN1c3RvbUV2ZW50VGFyZ2V0KCkge1xuICAgICAgICBFdmVudFRhcmdldC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIEN1c3RvbUV2ZW50VGFyZ2V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRUYXJnZXQucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogQ3VzdG9tRXZlbnRUYXJnZXQsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnROYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBkZWZpbmVFdmVudEF0dHJpYnV0ZShDdXN0b21FdmVudFRhcmdldC5wcm90b3R5cGUsIGV2ZW50TmFtZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiBDdXN0b21FdmVudFRhcmdldFxufVxuXG4vKipcbiAqIEV2ZW50VGFyZ2V0LlxuICpcbiAqIC0gVGhpcyBpcyBjb25zdHJ1Y3RvciBpZiBubyBhcmd1bWVudHMuXG4gKiAtIFRoaXMgaXMgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGEgQ3VzdG9tRXZlbnRUYXJnZXQgY29uc3RydWN0b3IgaWYgdGhlcmUgYXJlIGFyZ3VtZW50cy5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgY2xhc3MgQSBleHRlbmRzIEV2ZW50VGFyZ2V0IHt9XG4gKiAgICAgY2xhc3MgQiBleHRlbmRzIEV2ZW50VGFyZ2V0KFwibWVzc2FnZVwiKSB7fVxuICogICAgIGNsYXNzIEMgZXh0ZW5kcyBFdmVudFRhcmdldChcIm1lc3NhZ2VcIiwgXCJlcnJvclwiKSB7fVxuICogICAgIGNsYXNzIEQgZXh0ZW5kcyBFdmVudFRhcmdldChbXCJtZXNzYWdlXCIsIFwiZXJyb3JcIl0pIHt9XG4gKi9cbmZ1bmN0aW9uIEV2ZW50VGFyZ2V0KCkge1xuICAgIC8qZXNsaW50LWRpc2FibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0KSB7XG4gICAgICAgIGxpc3RlbmVyc01hcC5zZXQodGhpcywgbmV3IE1hcCgpKTtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQoYXJndW1lbnRzWzBdKVxuICAgIH1cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0eXBlc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQodHlwZXMpXG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIilcbiAgICAvKmVzbGludC1lbmFibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbn1cblxuLy8gU2hvdWxkIGJlIGVudW1lcmFibGUsIGJ1dCBjbGFzcyBtZXRob2RzIGFyZSBub3QgZW51bWVyYWJsZS5cbkV2ZW50VGFyZ2V0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBnaXZlbiBsaXN0ZW5lciB0byB0aGlzIGV2ZW50IHRhcmdldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGFkZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnx7Y2FwdHVyZT86Ym9vbGVhbixwYXNzaXZlPzpib29sZWFuLG9uY2U/OmJvb2xlYW59fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgZm9yIHRoaXMgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIgJiYgIWlzT2JqZWN0KGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIidsaXN0ZW5lcicgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LlwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICBjb25zdCBvcHRpb25zSXNPYmogPSBpc09iamVjdChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IG9wdGlvbnNJc09ialxuICAgICAgICAgICAgPyBCb29sZWFuKG9wdGlvbnMuY2FwdHVyZSlcbiAgICAgICAgICAgIDogQm9vbGVhbihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJUeXBlID0gY2FwdHVyZSA/IENBUFRVUkUgOiBCVUJCTEU7XG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgICBsaXN0ZW5lcixcbiAgICAgICAgICAgIGxpc3RlbmVyVHlwZSxcbiAgICAgICAgICAgIHBhc3NpdmU6IG9wdGlvbnNJc09iaiAmJiBCb29sZWFuKG9wdGlvbnMucGFzc2l2ZSksXG4gICAgICAgICAgICBvbmNlOiBvcHRpb25zSXNPYmogJiYgQm9vbGVhbihvcHRpb25zLm9uY2UpLFxuICAgICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTZXQgaXQgYXMgdGhlIGZpcnN0IG5vZGUgaWYgdGhlIGZpcnN0IG5vZGUgaXMgbnVsbC5cbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBuZXdOb2RlKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJhdmVyc2UgdG8gdGhlIHRhaWwgd2hpbGUgY2hlY2tpbmcgZHVwbGljYXRpb24uLlxuICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyID09PSBsaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXJUeXBlID09PSBsaXN0ZW5lclR5cGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIFNob3VsZCBpZ25vcmUgZHVwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2ID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgaXQuXG4gICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIGdpdmVuIGxpc3RlbmVyIGZyb20gdGhpcyBldmVudCB0YXJnZXQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58e2NhcHR1cmU/OmJvb2xlYW4scGFzc2l2ZT86Ym9vbGVhbixvbmNlPzpib29sZWFufX0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGZvciB0aGlzIGxpc3RlbmVyLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgICAgICBpZiAobGlzdGVuZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgIGNvbnN0IGNhcHR1cmUgPSBpc09iamVjdChvcHRpb25zKVxuICAgICAgICAgICAgPyBCb29sZWFuKG9wdGlvbnMuY2FwdHVyZSlcbiAgICAgICAgICAgIDogQm9vbGVhbihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJUeXBlID0gY2FwdHVyZSA/IENBUFRVUkUgOiBCVUJCTEU7XG5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIgPT09IGxpc3RlbmVyICYmXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgPT09IGxpc3RlbmVyVHlwZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwYXRjaCBhIGdpdmVuIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7RXZlbnR8e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIGV2ZW50IHRvIGRpc3BhdGNoLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgZmFsc2VgIGlmIGNhbmNlbGVkLlxuICAgICAqL1xuICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50ID09IG51bGwgfHwgdHlwZW9mIGV2ZW50LnR5cGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXZlbnQudHlwZVwiIHNob3VsZCBiZSBhIHN0cmluZy4nKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbGlzdGVuZXJzIGFyZW4ndCByZWdpc3RlcmVkLCB0ZXJtaW5hdGUuXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgY29uc3QgZXZlbnROYW1lID0gZXZlbnQudHlwZTtcbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaW5jZSB3ZSBjYW5ub3QgcmV3cml0ZSBzZXZlcmFsIHByb3BlcnRpZXMsIHNvIHdyYXAgb2JqZWN0LlxuICAgICAgICBjb25zdCB3cmFwcGVkRXZlbnQgPSB3cmFwRXZlbnQodGhpcywgZXZlbnQpO1xuXG4gICAgICAgIC8vIFRoaXMgZG9lc24ndCBwcm9jZXNzIGNhcHR1cmluZyBwaGFzZSBhbmQgYnViYmxpbmcgcGhhc2UuXG4gICAgICAgIC8vIFRoaXMgaXNuJ3QgcGFydGljaXBhdGluZyBpbiBhIHRyZWUuXG4gICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGlzdGVuZXIgaWYgaXQncyBvbmNlXG4gICAgICAgICAgICBpZiAobm9kZS5vbmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWxsIHRoaXMgbGlzdGVuZXJcbiAgICAgICAgICAgIHNldFBhc3NpdmVMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICB3cmFwcGVkRXZlbnQsXG4gICAgICAgICAgICAgICAgbm9kZS5wYXNzaXZlID8gbm9kZS5saXN0ZW5lciA6IG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUubGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIuY2FsbCh0aGlzLCB3cmFwcGVkRXZlbnQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgIT09IEFUVFJJQlVURSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBub2RlLmxpc3RlbmVyLmhhbmRsZUV2ZW50ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIuaGFuZGxlRXZlbnQod3JhcHBlZEV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQnJlYWsgaWYgYGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbmAgd2FzIGNhbGxlZC5cbiAgICAgICAgICAgIGlmIChpc1N0b3BwZWQod3JhcHBlZEV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UGFzc2l2ZUxpc3RlbmVyKHdyYXBwZWRFdmVudCwgbnVsbCk7XG4gICAgICAgIHNldEV2ZW50UGhhc2Uod3JhcHBlZEV2ZW50LCAwKTtcbiAgICAgICAgc2V0Q3VycmVudFRhcmdldCh3cmFwcGVkRXZlbnQsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiAhd3JhcHBlZEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWRcbiAgICB9LFxufTtcblxuLy8gYGNvbnN0cnVjdG9yYCBpcyBub3QgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudFRhcmdldC5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBFdmVudFRhcmdldCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG59KTtcblxuLy8gRW5zdXJlIGBldmVudFRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudFRhcmdldGAgaXMgYHRydWVgLlxuaWYgKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2Ygd2luZG93LkV2ZW50VGFyZ2V0ICE9PSBcInVuZGVmaW5lZFwiXG4pIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXZlbnRUYXJnZXQucHJvdG90eXBlLCB3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlKTtcbn1cblxuZXhwb3J0cy5kZWZpbmVFdmVudEF0dHJpYnV0ZSA9IGRlZmluZUV2ZW50QXR0cmlidXRlO1xuZXhwb3J0cy5FdmVudFRhcmdldCA9IEV2ZW50VGFyZ2V0O1xuZXhwb3J0cy5kZWZhdWx0ID0gRXZlbnRUYXJnZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRUYXJnZXRcbm1vZHVsZS5leHBvcnRzLkV2ZW50VGFyZ2V0ID0gbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRXZlbnRUYXJnZXRcbm1vZHVsZS5leHBvcnRzLmRlZmluZUV2ZW50QXR0cmlidXRlID0gZGVmaW5lRXZlbnRBdHRyaWJ1dGVcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50LXRhcmdldC1zaGltLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEBhdXRob3IgVG9ydSBOYWdhc2hpbWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9teXN0aWNhdGVhPlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBldmVudFRhcmdldFNoaW0gPSByZXF1aXJlKCdldmVudC10YXJnZXQtc2hpbScpO1xuXG4vKipcbiAqIFRoZSBzaWduYWwgY2xhc3MuXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jYWJvcnRzaWduYWxcbiAqL1xuY2xhc3MgQWJvcnRTaWduYWwgZXh0ZW5kcyBldmVudFRhcmdldFNoaW0uRXZlbnRUYXJnZXQge1xuICAgIC8qKlxuICAgICAqIEFib3J0U2lnbmFsIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFib3J0U2lnbmFsIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseVwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBgQWJvcnRTaWduYWxgJ3MgYEFib3J0Q29udHJvbGxlcmAgaGFzIHNpZ25hbGVkIHRvIGFib3J0LCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIGNvbnN0IGFib3J0ZWQgPSBhYm9ydGVkRmxhZ3MuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAodHlwZW9mIGFib3J0ZWQgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAndGhpcycgdG8gYmUgYW4gJ0Fib3J0U2lnbmFsJyBvYmplY3QsIGJ1dCBnb3QgJHt0aGlzID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdGhpc31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJvcnRlZDtcbiAgICB9XG59XG5ldmVudFRhcmdldFNoaW0uZGVmaW5lRXZlbnRBdHRyaWJ1dGUoQWJvcnRTaWduYWwucHJvdG90eXBlLCBcImFib3J0XCIpO1xuLyoqXG4gKiBDcmVhdGUgYW4gQWJvcnRTaWduYWwgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVBYm9ydFNpZ25hbCgpIHtcbiAgICBjb25zdCBzaWduYWwgPSBPYmplY3QuY3JlYXRlKEFib3J0U2lnbmFsLnByb3RvdHlwZSk7XG4gICAgZXZlbnRUYXJnZXRTaGltLkV2ZW50VGFyZ2V0LmNhbGwoc2lnbmFsKTtcbiAgICBhYm9ydGVkRmxhZ3Muc2V0KHNpZ25hbCwgZmFsc2UpO1xuICAgIHJldHVybiBzaWduYWw7XG59XG4vKipcbiAqIEFib3J0IGEgZ2l2ZW4gc2lnbmFsLlxuICovXG5mdW5jdGlvbiBhYm9ydFNpZ25hbChzaWduYWwpIHtcbiAgICBpZiAoYWJvcnRlZEZsYWdzLmdldChzaWduYWwpICE9PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFib3J0ZWRGbGFncy5zZXQoc2lnbmFsLCB0cnVlKTtcbiAgICBzaWduYWwuZGlzcGF0Y2hFdmVudCh7IHR5cGU6IFwiYWJvcnRcIiB9KTtcbn1cbi8qKlxuICogQWJvcnRlZCBmbGFnIGZvciBlYWNoIGluc3RhbmNlcy5cbiAqL1xuY29uc3QgYWJvcnRlZEZsYWdzID0gbmV3IFdlYWtNYXAoKTtcbi8vIFByb3BlcnRpZXMgc2hvdWxkIGJlIGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYm9ydFNpZ25hbC5wcm90b3R5cGUsIHtcbiAgICBhYm9ydGVkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbn0pO1xuLy8gYHRvU3RyaW5nKClgIHNob3VsZCByZXR1cm4gYFwiW29iamVjdCBBYm9ydFNpZ25hbF1cImBcbmlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gXCJzeW1ib2xcIikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYm9ydFNpZ25hbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBcIkFib3J0U2lnbmFsXCIsXG4gICAgfSk7XG59XG5cbi8qKlxuICogVGhlIEFib3J0Q29udHJvbGxlci5cbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNhYm9ydGNvbnRyb2xsZXJcbiAqL1xuY2xhc3MgQWJvcnRDb250cm9sbGVyIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHRoaXMgY29udHJvbGxlci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc2lnbmFscy5zZXQodGhpcywgY3JlYXRlQWJvcnRTaWduYWwoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBBYm9ydFNpZ25hbGAgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBnZXQgc2lnbmFsKCkge1xuICAgICAgICByZXR1cm4gZ2V0U2lnbmFsKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBYm9ydCBhbmQgc2lnbmFsIHRvIGFueSBvYnNlcnZlcnMgdGhhdCB0aGUgYXNzb2NpYXRlZCBhY3Rpdml0eSBpcyB0byBiZSBhYm9ydGVkLlxuICAgICAqL1xuICAgIGFib3J0KCkge1xuICAgICAgICBhYm9ydFNpZ25hbChnZXRTaWduYWwodGhpcykpO1xuICAgIH1cbn1cbi8qKlxuICogQXNzb2NpYXRlZCBzaWduYWxzLlxuICovXG5jb25zdCBzaWduYWxzID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogR2V0IHRoZSBhc3NvY2lhdGVkIHNpZ25hbCBvZiBhIGdpdmVuIGNvbnRyb2xsZXIuXG4gKi9cbmZ1bmN0aW9uIGdldFNpZ25hbChjb250cm9sbGVyKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gc2lnbmFscy5nZXQoY29udHJvbGxlcik7XG4gICAgaWYgKHNpZ25hbCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICd0aGlzJyB0byBiZSBhbiAnQWJvcnRDb250cm9sbGVyJyBvYmplY3QsIGJ1dCBnb3QgJHtjb250cm9sbGVyID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgY29udHJvbGxlcn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25hbDtcbn1cbi8vIFByb3BlcnRpZXMgc2hvdWxkIGJlIGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlLCB7XG4gICAgc2lnbmFsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBhYm9ydDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG59KTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gXCJzeW1ib2xcIikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogXCJBYm9ydENvbnRyb2xsZXJcIixcbiAgICB9KTtcbn1cblxuZXhwb3J0cy5BYm9ydENvbnRyb2xsZXIgPSBBYm9ydENvbnRyb2xsZXI7XG5leHBvcnRzLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWw7XG5leHBvcnRzLmRlZmF1bHQgPSBBYm9ydENvbnRyb2xsZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gQWJvcnRDb250cm9sbGVyXG5tb2R1bGUuZXhwb3J0cy5BYm9ydENvbnRyb2xsZXIgPSBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBYm9ydENvbnRyb2xsZXJcbm1vZHVsZS5leHBvcnRzLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFib3J0LWNvbnRyb2xsZXIuanMubWFwXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBidWZmZXJNb2R1bGUgPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrUmVzaXN0U3RvcFByb3BhZ2F0aW9uLCBTeW1ib2xEaXNwb3NlIH0gPSByZXF1aXJlKCcuL3ByaW1vcmRpYWxzJylcbmNvbnN0IEFib3J0U2lnbmFsID0gZ2xvYmFsVGhpcy5BYm9ydFNpZ25hbCB8fCByZXF1aXJlKCdhYm9ydC1jb250cm9sbGVyJykuQWJvcnRTaWduYWxcbmNvbnN0IEFib3J0Q29udHJvbGxlciA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydENvbnRyb2xsZXJcbmNvbnN0IEFzeW5jRnVuY3Rpb24gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXN5bmMgZnVuY3Rpb24gKCkge30pLmNvbnN0cnVjdG9yXG5jb25zdCBCbG9iID0gZ2xvYmFsVGhpcy5CbG9iIHx8IGJ1ZmZlck1vZHVsZS5CbG9iXG4vKiBlc2xpbnQtZGlzYWJsZSBpbmRlbnQgKi9cbmNvbnN0IGlzQmxvYiA9XG4gIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJ1xuICAgID8gZnVuY3Rpb24gaXNCbG9iKGIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGluZGVudFxuICAgICAgICByZXR1cm4gYiBpbnN0YW5jZW9mIEJsb2JcbiAgICAgIH1cbiAgICA6IGZ1bmN0aW9uIGlzQmxvYihiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuLyogZXNsaW50LWVuYWJsZSBpbmRlbnQgKi9cblxuY29uc3QgdmFsaWRhdGVBYm9ydFNpZ25hbCA9IChzaWduYWwsIG5hbWUpID0+IHtcbiAgaWYgKHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIChzaWduYWwgPT09IG51bGwgfHwgdHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Fib3J0U2lnbmFsJywgc2lnbmFsKVxuICB9XG59XG5jb25zdCB2YWxpZGF0ZUZ1bmN0aW9uID0gKHZhbHVlLCBuYW1lKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnRnVuY3Rpb24nLCB2YWx1ZSlcbn1cblxuLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBBZ2dyZWdhdGVFcnJvclxuY2xhc3MgQWdncmVnYXRlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVycm9ycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShlcnJvcnMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBpbnB1dCB0byBiZSBhbiBBcnJheSwgZ290ICR7dHlwZW9mIGVycm9yc31gKVxuICAgIH1cbiAgICBsZXQgbWVzc2FnZSA9ICcnXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCAgICAke2Vycm9yc1tpXS5zdGFja31cXG5gXG4gICAgfVxuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0FnZ3JlZ2F0ZUVycm9yJ1xuICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBZ2dyZWdhdGVFcnJvcixcbiAga0VtcHR5T2JqZWN0OiBPYmplY3QuZnJlZXplKHt9KSxcbiAgb25jZShjYWxsYmFjaykge1xuICAgIGxldCBjYWxsZWQgPSBmYWxzZVxuICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgaWYgKGNhbGxlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhbGxlZCA9IHRydWVcbiAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgfVxuICB9LFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2U6IGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcmVzb2x2ZVxuICAgIGxldCByZWplY3RcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3BhcmFtLW5hbWVzXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgcmVzb2x2ZSA9IHJlc1xuICAgICAgcmVqZWN0ID0gcmVqXG4gICAgfSlcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3RcbiAgICB9XG4gIH0sXG4gIHByb21pc2lmeShmbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmbigoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZSguLi5hcmdzKVxuICAgICAgfSlcbiAgICB9KVxuICB9LFxuICBkZWJ1Z2xvZygpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge31cbiAgfSxcbiAgZm9ybWF0KGZvcm1hdCwgLi4uYXJncykge1xuICAgIC8vIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL25vZGVqcy5vcmcvYXBpL3V0aWwuaHRtbCN1dGlsZm9ybWF0Zm9ybWF0LWFyZ3NcbiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoLyUoW3NkaWZqXSkvZywgZnVuY3Rpb24gKC4uLltfdW51c2VkLCB0eXBlXSkge1xuICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBhcmdzLnNoaWZ0KClcbiAgICAgIGlmICh0eXBlID09PSAnZicpIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50LnRvRml4ZWQoNilcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2onKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXBsYWNlbWVudClcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3MnICYmIHR5cGVvZiByZXBsYWNlbWVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgY3RvciA9IHJlcGxhY2VtZW50LmNvbnN0cnVjdG9yICE9PSBPYmplY3QgPyByZXBsYWNlbWVudC5jb25zdHJ1Y3Rvci5uYW1lIDogJydcbiAgICAgICAgcmV0dXJuIGAke2N0b3J9IHt9YC50cmltKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudC50b1N0cmluZygpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgaW5zcGVjdCh2YWx1ZSkge1xuICAgIC8vIFZhc3RseSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS91dGlsLmh0bWwjdXRpbGluc3BlY3RvYmplY3Qtb3B0aW9uc1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCInXCIpKSB7XG4gICAgICAgICAgaWYgKCF2YWx1ZS5pbmNsdWRlcygnXCInKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBcIiR7dmFsdWV9XCJgXG4gICAgICAgICAgfSBlbHNlIGlmICghdmFsdWUuaW5jbHVkZXMoJ2AnKSAmJiAhdmFsdWUuaW5jbHVkZXMoJyR7JykpIHtcbiAgICAgICAgICAgIHJldHVybiBgXFxgJHt2YWx1ZX1cXGBgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJyR7dmFsdWV9J2BcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gJ05hTidcbiAgICAgICAgfSBlbHNlIGlmIChPYmplY3QuaXModmFsdWUsIC0wKSkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICByZXR1cm4gYCR7U3RyaW5nKHZhbHVlKX1uYFxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICd7fSdcbiAgICB9XG4gIH0sXG4gIHR5cGVzOiB7XG4gICAgaXNBc3luY0Z1bmN0aW9uKGZuKSB7XG4gICAgICByZXR1cm4gZm4gaW5zdGFuY2VvZiBBc3luY0Z1bmN0aW9uXG4gICAgfSxcbiAgICBpc0FycmF5QnVmZmVyVmlldyhhcnIpIHtcbiAgICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyKVxuICAgIH1cbiAgfSxcbiAgaXNCbG9iLFxuICBkZXByZWNhdGUoZm4sIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gZm5cbiAgfSxcbiAgYWRkQWJvcnRMaXN0ZW5lcjpcbiAgICByZXF1aXJlKCdldmVudHMnKS5hZGRBYm9ydExpc3RlbmVyIHx8XG4gICAgZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lcihzaWduYWwsIGxpc3RlbmVyKSB7XG4gICAgICBpZiAoc2lnbmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdzaWduYWwnLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKHNpZ25hbCwgJ3NpZ25hbCcpXG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uKGxpc3RlbmVyLCAnbGlzdGVuZXInKVxuICAgICAgbGV0IHJlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBsaXN0ZW5lcigpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIsIHtcbiAgICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgICAgb25jZTogdHJ1ZSxcbiAgICAgICAgICBba1Jlc2lzdFN0b3BQcm9wYWdhdGlvbl06IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBbU3ltYm9sRGlzcG9zZV0oKSB7XG4gICAgICAgICAgdmFyIF9yZW1vdmVFdmVudExpc3RlbmVyXG4gICAgICAgICAgOyhfcmVtb3ZlRXZlbnRMaXN0ZW5lciA9IHJlbW92ZUV2ZW50TGlzdGVuZXIpID09PSBudWxsIHx8IF9yZW1vdmVFdmVudExpc3RlbmVyID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IF9yZW1vdmVFdmVudExpc3RlbmVyKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIEFib3J0U2lnbmFsQW55OlxuICAgIEFib3J0U2lnbmFsLmFueSB8fFxuICAgIGZ1bmN0aW9uIEFib3J0U2lnbmFsQW55KHNpZ25hbHMpIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzaWduYWwuXG4gICAgICBpZiAoc2lnbmFscy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHNpZ25hbHNbMF1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgICBjb25zdCBhYm9ydCA9ICgpID0+IGFjLmFib3J0KClcbiAgICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCAnc2lnbmFscycpXG4gICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0LCB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIGFjLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnYWJvcnQnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uY2U6IHRydWVcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgcmV0dXJuIGFjLnNpZ25hbFxuICAgIH1cbn1cbm1vZHVsZS5leHBvcnRzLnByb21pc2lmeS5jdXN0b20gPSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5wcm9taXNpZnkuY3VzdG9tJylcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZm9ybWF0LCBpbnNwZWN0LCBBZ2dyZWdhdGVFcnJvcjogQ3VzdG9tQWdncmVnYXRlRXJyb3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8qXG4gIFRoaXMgZmlsZSBpcyBhIHJlZHVjZWQgYW5kIGFkYXB0ZWQgdmVyc2lvbiBvZiB0aGUgbWFpbiBsaWIvaW50ZXJuYWwvZXJyb3JzLmpzIGZpbGUgZGVmaW5lZCBhdFxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvZXJyb3JzLmpzXG5cbiAgRG9uJ3QgdHJ5IHRvIHJlcGxhY2Ugd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSBhbmQga2VlcCBpdCB1cCB0byBkYXRlIChzdGFydGluZyBmcm9tIEUoLi4uKSBkZWZpbml0aW9ucylcbiAgd2l0aCB0aGUgdXBzdHJlYW0gZmlsZS5cbiovXG5cbmNvbnN0IEFnZ3JlZ2F0ZUVycm9yID0gZ2xvYmFsVGhpcy5BZ2dyZWdhdGVFcnJvciB8fCBDdXN0b21BZ2dyZWdhdGVFcnJvclxuY29uc3Qga0lzTm9kZUVycm9yID0gU3ltYm9sKCdrSXNOb2RlRXJyb3InKVxuY29uc3Qga1R5cGVzID0gW1xuICAnc3RyaW5nJyxcbiAgJ2Z1bmN0aW9uJyxcbiAgJ251bWJlcicsXG4gICdvYmplY3QnLFxuICAvLyBBY2NlcHQgJ0Z1bmN0aW9uJyBhbmQgJ09iamVjdCcgYXMgYWx0ZXJuYXRpdmUgdG8gdGhlIGxvd2VyIGNhc2VkIHZlcnNpb24uXG4gICdGdW5jdGlvbicsXG4gICdPYmplY3QnLFxuICAnYm9vbGVhbicsXG4gICdiaWdpbnQnLFxuICAnc3ltYm9sJ1xuXVxuY29uc3QgY2xhc3NSZWdFeHAgPSAvXihbQS1aXVthLXowLTldKikrJC9cbmNvbnN0IG5vZGVJbnRlcm5hbFByZWZpeCA9ICdfX25vZGVfaW50ZXJuYWxfJ1xuY29uc3QgY29kZXMgPSB7fVxuZnVuY3Rpb24gYXNzZXJ0KHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVEVSTkFMX0FTU0VSVElPTihtZXNzYWdlKVxuICB9XG59XG5cbi8vIE9ubHkgdXNlIHRoaXMgZm9yIGludGVnZXJzISBEZWNpbWFsIG51bWJlcnMgZG8gbm90IHdvcmsgd2l0aCB0aGlzIGZ1bmN0aW9uLlxuZnVuY3Rpb24gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHZhbCkge1xuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSB2YWwubGVuZ3RoXG4gIGNvbnN0IHN0YXJ0ID0gdmFsWzBdID09PSAnLScgPyAxIDogMFxuICBmb3IgKDsgaSA+PSBzdGFydCArIDQ7IGkgLT0gMykge1xuICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWBcbiAgfVxuICByZXR1cm4gYCR7dmFsLnNsaWNlKDAsIGkpfSR7cmVzfWBcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2Uoa2V5LCBtc2csIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhc3NlcnQoXG4gICAgICBtc2cubGVuZ3RoIDw9IGFyZ3MubGVuZ3RoLFxuICAgICAgLy8gRGVmYXVsdCBvcHRpb25zIGRvIG5vdCBjb3VudC5cbiAgICAgIGBDb2RlOiAke2tleX07IFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbGVuZ3RoICgke2FyZ3MubGVuZ3RofSkgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIG9uZXMgKCR7bXNnLmxlbmd0aH0pLmBcbiAgICApXG4gICAgcmV0dXJuIG1zZyguLi5hcmdzKVxuICB9XG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gKG1zZy5tYXRjaCgvJVtkZmlqb09zXS9nKSB8fCBbXSkubGVuZ3RoXG4gIGFzc2VydChcbiAgICBleHBlY3RlZExlbmd0aCA9PT0gYXJncy5sZW5ndGgsXG4gICAgYENvZGU6ICR7a2V5fTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7YXJncy5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHtleHBlY3RlZExlbmd0aH0pLmBcbiAgKVxuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbXNnXG4gIH1cbiAgcmV0dXJuIGZvcm1hdChtc2csIC4uLmFyZ3MpXG59XG5mdW5jdGlvbiBFKGNvZGUsIG1lc3NhZ2UsIEJhc2UpIHtcbiAgaWYgKCFCYXNlKSB7XG4gICAgQmFzZSA9IEVycm9yXG4gIH1cbiAgY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgQmFzZSB7XG4gICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgc3VwZXIoZ2V0TWVzc2FnZShjb2RlLCBtZXNzYWdlLCBhcmdzKSlcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHtjb2RlfV06ICR7dGhpcy5tZXNzYWdlfWBcbiAgICB9XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9kZUVycm9yLnByb3RvdHlwZSwge1xuICAgIG5hbWU6IHtcbiAgICAgIHZhbHVlOiBCYXNlLm5hbWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB0b1N0cmluZzoge1xuICAgICAgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske2NvZGV9XTogJHt0aGlzLm1lc3NhZ2V9YFxuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pXG4gIE5vZGVFcnJvci5wcm90b3R5cGUuY29kZSA9IGNvZGVcbiAgTm9kZUVycm9yLnByb3RvdHlwZVtrSXNOb2RlRXJyb3JdID0gdHJ1ZVxuICBjb2Rlc1tjb2RlXSA9IE5vZGVFcnJvclxufVxuZnVuY3Rpb24gaGlkZVN0YWNrRnJhbWVzKGZuKSB7XG4gIC8vIFdlIHJlbmFtZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBoaWRkZW4gdG8gY3V0IG9mZiB0aGUgc3RhY2t0cmFjZVxuICAvLyBhdCB0aGUgb3V0ZXJtb3N0IG9uZVxuICBjb25zdCBoaWRkZW4gPSBub2RlSW50ZXJuYWxQcmVmaXggKyBmbi5uYW1lXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7XG4gICAgdmFsdWU6IGhpZGRlblxuICB9KVxuICByZXR1cm4gZm5cbn1cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZVR3b0Vycm9ycyhpbm5lckVycm9yLCBvdXRlckVycm9yKSB7XG4gIGlmIChpbm5lckVycm9yICYmIG91dGVyRXJyb3IgJiYgaW5uZXJFcnJvciAhPT0gb3V0ZXJFcnJvcikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG91dGVyRXJyb3IuZXJyb3JzKSkge1xuICAgICAgLy8gSWYgYG91dGVyRXJyb3JgIGlzIGFscmVhZHkgYW4gYEFnZ3JlZ2F0ZUVycm9yYC5cbiAgICAgIG91dGVyRXJyb3IuZXJyb3JzLnB1c2goaW5uZXJFcnJvcilcbiAgICAgIHJldHVybiBvdXRlckVycm9yXG4gICAgfVxuICAgIGNvbnN0IGVyciA9IG5ldyBBZ2dyZWdhdGVFcnJvcihbb3V0ZXJFcnJvciwgaW5uZXJFcnJvcl0sIG91dGVyRXJyb3IubWVzc2FnZSlcbiAgICBlcnIuY29kZSA9IG91dGVyRXJyb3IuY29kZVxuICAgIHJldHVybiBlcnJcbiAgfVxuICByZXR1cm4gaW5uZXJFcnJvciB8fCBvdXRlckVycm9yXG59XG5jbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSgnb3B0aW9ucycsICdPYmplY3QnLCBvcHRpb25zKVxuICAgIH1cbiAgICBzdXBlcihtZXNzYWdlLCBvcHRpb25zKVxuICAgIHRoaXMuY29kZSA9ICdBQk9SVF9FUlInXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gIH1cbn1cbkUoJ0VSUl9BU1NFUlRJT04nLCAnJXMnLCBFcnJvcilcbkUoXG4gICdFUlJfSU5WQUxJRF9BUkdfVFlQRScsXG4gIChuYW1lLCBleHBlY3RlZCwgYWN0dWFsKSA9PiB7XG4gICAgYXNzZXJ0KHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJywgXCInbmFtZScgbXVzdCBiZSBhIHN0cmluZ1wiKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICAgIGV4cGVjdGVkID0gW2V4cGVjdGVkXVxuICAgIH1cbiAgICBsZXQgbXNnID0gJ1RoZSAnXG4gICAgaWYgKG5hbWUuZW5kc1dpdGgoJyBhcmd1bWVudCcpKSB7XG4gICAgICAvLyBGb3IgY2FzZXMgbGlrZSAnZmlyc3QgYXJndW1lbnQnXG4gICAgICBtc2cgKz0gYCR7bmFtZX0gYFxuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgKz0gYFwiJHtuYW1lfVwiICR7bmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCd9IGBcbiAgICB9XG4gICAgbXNnICs9ICdtdXN0IGJlICdcbiAgICBjb25zdCB0eXBlcyA9IFtdXG4gICAgY29uc3QgaW5zdGFuY2VzID0gW11cbiAgICBjb25zdCBvdGhlciA9IFtdXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBleHBlY3RlZCkge1xuICAgICAgYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycsICdBbGwgZXhwZWN0ZWQgZW50cmllcyBoYXZlIHRvIGJlIG9mIHR5cGUgc3RyaW5nJylcbiAgICAgIGlmIChrVHlwZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIHR5cGVzLnB1c2godmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIH0gZWxzZSBpZiAoY2xhc3NSZWdFeHAudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgaW5zdGFuY2VzLnB1c2godmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQodmFsdWUgIT09ICdvYmplY3QnLCAnVGhlIHZhbHVlIFwib2JqZWN0XCIgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgXCJPYmplY3RcIicpXG4gICAgICAgIG90aGVyLnB1c2godmFsdWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBoYW5kbGUgYG9iamVjdGAgaW4gY2FzZSBvdGhlciBpbnN0YW5jZXMgYXJlIGFsbG93ZWQgdG8gb3V0bGluZVxuICAgIC8vIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGVhY2ggb3RoZXIuXG4gICAgaWYgKGluc3RhbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwb3MgPSB0eXBlcy5pbmRleE9mKCdvYmplY3QnKVxuICAgICAgaWYgKHBvcyAhPT0gLTEpIHtcbiAgICAgICAgdHlwZXMuc3BsaWNlKHR5cGVzLCBwb3MsIDEpXG4gICAgICAgIGluc3RhbmNlcy5wdXNoKCdPYmplY3QnKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3dpdGNoICh0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1zZyArPSBgb2YgdHlwZSAke3R5cGVzWzBdfWBcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbXNnICs9IGBvbmUgb2YgdHlwZSAke3R5cGVzWzBdfSBvciAke3R5cGVzWzFdfWBcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgbGFzdCA9IHR5cGVzLnBvcCgpXG4gICAgICAgICAgbXNnICs9IGBvbmUgb2YgdHlwZSAke3R5cGVzLmpvaW4oJywgJyl9LCBvciAke2xhc3R9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDAgfHwgb3RoZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBtc2cgKz0gJyBvciAnXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3dpdGNoIChpbnN0YW5jZXMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtc2cgKz0gYGFuIGluc3RhbmNlIG9mICR7aW5zdGFuY2VzWzBdfWBcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbXNnICs9IGBhbiBpbnN0YW5jZSBvZiAke2luc3RhbmNlc1swXX0gb3IgJHtpbnN0YW5jZXNbMV19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gaW5zdGFuY2VzLnBvcCgpXG4gICAgICAgICAgbXNnICs9IGBhbiBpbnN0YW5jZSBvZiAke2luc3RhbmNlcy5qb2luKCcsICcpfSwgb3IgJHtsYXN0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG90aGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbXNnICs9ICcgb3IgJ1xuICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKG90aGVyLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAxOlxuICAgICAgICBpZiAob3RoZXJbMF0udG9Mb3dlckNhc2UoKSAhPT0gb3RoZXJbMF0pIHtcbiAgICAgICAgICBtc2cgKz0gJ2FuICdcbiAgICAgICAgfVxuICAgICAgICBtc2cgKz0gYCR7b3RoZXJbMF19YFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICBtc2cgKz0gYG9uZSBvZiAke290aGVyWzBdfSBvciAke290aGVyWzFdfWBcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgbGFzdCA9IG90aGVyLnBvcCgpXG4gICAgICAgIG1zZyArPSBgb25lIG9mICR7b3RoZXIuam9pbignLCAnKX0sIG9yICR7bGFzdH1gXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3R1YWwgPT0gbnVsbCkge1xuICAgICAgbXNnICs9IGAuIFJlY2VpdmVkICR7YWN0dWFsfWBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY3R1YWwgPT09ICdmdW5jdGlvbicgJiYgYWN0dWFsLm5hbWUpIHtcbiAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCBmdW5jdGlvbiAke2FjdHVhbC5uYW1lfWBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY3R1YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgX2FjdHVhbCRjb25zdHJ1Y3RvclxuICAgICAgaWYgKFxuICAgICAgICAoX2FjdHVhbCRjb25zdHJ1Y3RvciA9IGFjdHVhbC5jb25zdHJ1Y3RvcikgIT09IG51bGwgJiZcbiAgICAgICAgX2FjdHVhbCRjb25zdHJ1Y3RvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9hY3R1YWwkY29uc3RydWN0b3IubmFtZVxuICAgICAgKSB7XG4gICAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2FjdHVhbC5jb25zdHJ1Y3Rvci5uYW1lfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RlZCA9IGluc3BlY3QoYWN0dWFsLCB7XG4gICAgICAgICAgZGVwdGg6IC0xXG4gICAgICAgIH0pXG4gICAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCAke2luc3BlY3RlZH1gXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpbnNwZWN0ZWQgPSBpbnNwZWN0KGFjdHVhbCwge1xuICAgICAgICBjb2xvcnM6IGZhbHNlXG4gICAgICB9KVxuICAgICAgaWYgKGluc3BlY3RlZC5sZW5ndGggPiAyNSkge1xuICAgICAgICBpbnNwZWN0ZWQgPSBgJHtpbnNwZWN0ZWQuc2xpY2UoMCwgMjUpfS4uLmBcbiAgICAgIH1cbiAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH0gKCR7aW5zcGVjdGVkfSlgXG4gICAgfVxuICAgIHJldHVybiBtc2dcbiAgfSxcbiAgVHlwZUVycm9yXG4pXG5FKFxuICAnRVJSX0lOVkFMSURfQVJHX1ZBTFVFJyxcbiAgKG5hbWUsIHZhbHVlLCByZWFzb24gPSAnaXMgaW52YWxpZCcpID0+IHtcbiAgICBsZXQgaW5zcGVjdGVkID0gaW5zcGVjdCh2YWx1ZSlcbiAgICBpZiAoaW5zcGVjdGVkLmxlbmd0aCA+IDEyOCkge1xuICAgICAgaW5zcGVjdGVkID0gaW5zcGVjdGVkLnNsaWNlKDAsIDEyOCkgKyAnLi4uJ1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gbmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCdcbiAgICByZXR1cm4gYFRoZSAke3R5cGV9ICcke25hbWV9JyAke3JlYXNvbn0uIFJlY2VpdmVkICR7aW5zcGVjdGVkfWBcbiAgfSxcbiAgVHlwZUVycm9yXG4pXG5FKFxuICAnRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFJyxcbiAgKGlucHV0LCBuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIHZhciBfdmFsdWUkY29uc3RydWN0b3JcbiAgICBjb25zdCB0eXBlID1cbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX3ZhbHVlJGNvbnN0cnVjdG9yID0gdmFsdWUuY29uc3RydWN0b3IpICE9PSBudWxsICYmXG4gICAgICBfdmFsdWUkY29uc3RydWN0b3IgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgX3ZhbHVlJGNvbnN0cnVjdG9yLm5hbWVcbiAgICAgICAgPyBgaW5zdGFuY2Ugb2YgJHt2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lfWBcbiAgICAgICAgOiBgdHlwZSAke3R5cGVvZiB2YWx1ZX1gXG4gICAgcmV0dXJuIGBFeHBlY3RlZCAke2lucHV0fSB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSBcIiR7bmFtZX1cImAgKyBgIGZ1bmN0aW9uIGJ1dCBnb3QgJHt0eXBlfS5gXG4gIH0sXG4gIFR5cGVFcnJvclxuKVxuRShcbiAgJ0VSUl9NSVNTSU5HX0FSR1MnLFxuICAoLi4uYXJncykgPT4ge1xuICAgIGFzc2VydChhcmdzLmxlbmd0aCA+IDAsICdBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCcpXG4gICAgbGV0IG1zZ1xuICAgIGNvbnN0IGxlbiA9IGFyZ3MubGVuZ3RoXG4gICAgYXJncyA9IChBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFthcmdzXSkubWFwKChhKSA9PiBgXCIke2F9XCJgKS5qb2luKCcgb3IgJylcbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICBtc2cgKz0gYFRoZSAke2FyZ3NbMF19IGFyZ3VtZW50YFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICBtc2cgKz0gYFRoZSAke2FyZ3NbMF19IGFuZCAke2FyZ3NbMV19IGFyZ3VtZW50c2BcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gYXJncy5wb3AoKVxuICAgICAgICAgIG1zZyArPSBgVGhlICR7YXJncy5qb2luKCcsICcpfSwgYW5kICR7bGFzdH0gYXJndW1lbnRzYFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIHJldHVybiBgJHttc2d9IG11c3QgYmUgc3BlY2lmaWVkYFxuICB9LFxuICBUeXBlRXJyb3JcbilcbkUoXG4gICdFUlJfT1VUX09GX1JBTkdFJyxcbiAgKHN0ciwgcmFuZ2UsIGlucHV0KSA9PiB7XG4gICAgYXNzZXJ0KHJhbmdlLCAnTWlzc2luZyBcInJhbmdlXCIgYXJndW1lbnQnKVxuICAgIGxldCByZWNlaXZlZFxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGlucHV0KSAmJiBNYXRoLmFicyhpbnB1dCkgPiAyICoqIDMyKSB7XG4gICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihTdHJpbmcoaW5wdXQpKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnYmlnaW50Jykge1xuICAgICAgcmVjZWl2ZWQgPSBTdHJpbmcoaW5wdXQpXG4gICAgICBpZiAoaW5wdXQgPiAybiAqKiAzMm4gfHwgaW5wdXQgPCAtKDJuICoqIDMybikpIHtcbiAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IocmVjZWl2ZWQpXG4gICAgICB9XG4gICAgICByZWNlaXZlZCArPSAnbidcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjZWl2ZWQgPSBpbnNwZWN0KGlucHV0KVxuICAgIH1cbiAgICByZXR1cm4gYFRoZSB2YWx1ZSBvZiBcIiR7c3RyfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gXG4gIH0sXG4gIFJhbmdlRXJyb3JcbilcbkUoJ0VSUl9NVUxUSVBMRV9DQUxMQkFDSycsICdDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMnLCBFcnJvcilcbkUoJ0VSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEJywgJ1RoZSAlcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkJywgRXJyb3IpXG5FKCdFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRUQnLCAnQ2Fubm90IGNhbGwgJXMgYWZ0ZXIgYSBzdHJlYW0gd2FzIGZpbmlzaGVkJywgRXJyb3IpXG5FKCdFUlJfU1RSRUFNX0NBTk5PVF9QSVBFJywgJ0Nhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fREVTVFJPWUVEJywgJ0Nhbm5vdCBjYWxsICVzIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fTlVMTF9WQUxVRVMnLCAnTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0nLCBUeXBlRXJyb3IpXG5FKCdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRScsICdQcmVtYXR1cmUgY2xvc2UnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YnLCAnc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQnLCAnc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EJywgJ3dyaXRlIGFmdGVyIGVuZCcsIEVycm9yKVxuRSgnRVJSX1VOS05PV05fRU5DT0RJTkcnLCAnVW5rbm93biBlbmNvZGluZzogJXMnLCBUeXBlRXJyb3IpXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQWJvcnRFcnJvcixcbiAgYWdncmVnYXRlVHdvRXJyb3JzOiBoaWRlU3RhY2tGcmFtZXMoYWdncmVnYXRlVHdvRXJyb3JzKSxcbiAgaGlkZVN0YWNrRnJhbWVzLFxuICBjb2Rlc1xufVxuIiwKICAgICIvKiBlc2xpbnQganNkb2MvcmVxdWlyZS1qc2RvYzogXCJlcnJvclwiICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEFycmF5SXNBcnJheSxcbiAgQXJyYXlQcm90b3R5cGVJbmNsdWRlcyxcbiAgQXJyYXlQcm90b3R5cGVKb2luLFxuICBBcnJheVByb3RvdHlwZU1hcCxcbiAgTnVtYmVySXNJbnRlZ2VyLFxuICBOdW1iZXJJc05hTixcbiAgTnVtYmVyTUFYX1NBRkVfSU5URUdFUixcbiAgTnVtYmVyTUlOX1NBRkVfSU5URUdFUixcbiAgTnVtYmVyUGFyc2VJbnQsXG4gIE9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5LFxuICBSZWdFeHBQcm90b3R5cGVFeGVjLFxuICBTdHJpbmcsXG4gIFN0cmluZ1Byb3RvdHlwZVRvVXBwZXJDYXNlLFxuICBTdHJpbmdQcm90b3R5cGVUcmltXG59ID0gcmVxdWlyZSgnLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7XG4gIGhpZGVTdGFja0ZyYW1lcyxcbiAgY29kZXM6IHsgRVJSX1NPQ0tFVF9CQURfUE9SVCwgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9JTlZBTElEX0FSR19WQUxVRSwgRVJSX09VVF9PRl9SQU5HRSwgRVJSX1VOS05PV05fU0lHTkFMIH1cbn0gPSByZXF1aXJlKCcuLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IG5vcm1hbGl6ZUVuY29kaW5nIH0gPSByZXF1aXJlKCcuLi9vdXJzL3V0aWwnKVxuY29uc3QgeyBpc0FzeW5jRnVuY3Rpb24sIGlzQXJyYXlCdWZmZXJWaWV3IH0gPSByZXF1aXJlKCcuLi9vdXJzL3V0aWwnKS50eXBlc1xuY29uc3Qgc2lnbmFscyA9IHt9XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzSW50MzIodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSAodmFsdWUgfCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1VpbnQzMih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID4+PiAwXG59XG5jb25zdCBvY3RhbFJlZyA9IC9eWzAtN10rJC9cbmNvbnN0IG1vZGVEZXNjID0gJ211c3QgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBvciBhbiBvY3RhbCBzdHJpbmcnXG5cbi8qKlxuICogUGFyc2UgYW5kIHZhbGlkYXRlIHZhbHVlcyB0aGF0IHdpbGwgYmUgY29udmVydGVkIGludG8gbW9kZV90ICh0aGUgU18qXG4gKiBjb25zdGFudHMpLiBPbmx5IHZhbGlkIG51bWJlcnMgYW5kIG9jdGFsIHN0cmluZ3MgYXJlIGFsbG93ZWQuIFRoZXkgY291bGQgYmVcbiAqIGNvbnZlcnRlZCB0byAzMi1iaXQgdW5zaWduZWQgaW50ZWdlcnMgb3Igbm9uLW5lZ2F0aXZlIHNpZ25lZCBpbnRlZ2VycyBpbiB0aGVcbiAqIEMrKyBsYW5kLCBidXQgYW55IHZhbHVlIGhpZ2hlciB0aGFuIDBvNzc3IHdpbGwgcmVzdWx0IGluIHBsYXRmb3JtLXNwZWNpZmljXG4gKiBiZWhhdmlvcnMuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlcyB0byBiZSB2YWxpZGF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGFyZ3VtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gW2RlZl0gSWYgc3BlY2lmaWVkLCB3aWxsIGJlIHJldHVybmVkIGZvciBpbnZhbGlkIHZhbHVlc1xuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VGaWxlTW9kZSh2YWx1ZSwgbmFtZSwgZGVmKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFsdWUgPSBkZWZcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChSZWdFeHBQcm90b3R5cGVFeGVjKG9jdGFsUmVnLCB2YWx1ZSkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgdmFsdWUsIG1vZGVEZXNjKVxuICAgIH1cbiAgICB2YWx1ZSA9IE51bWJlclBhcnNlSW50KHZhbHVlLCA4KVxuICB9XG4gIHZhbGlkYXRlVWludDMyKHZhbHVlLCBuYW1lKVxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVJbnRlZ2VyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlSW50ZWdlcn0gKi9cbmNvbnN0IHZhbGlkYXRlSW50ZWdlciA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG1pbiA9IE51bWJlck1JTl9TQUZFX0lOVEVHRVIsIG1heCA9IE51bWJlck1BWF9TQUZFX0lOVEVHRVIpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIGlmICghTnVtYmVySXNJbnRlZ2VyKHZhbHVlKSkgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJ2FuIGludGVnZXInLCB2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVJbnQzMlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWluXVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhdXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBudW1iZXJ9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUludDMyfSAqL1xuY29uc3QgdmFsaWRhdGVJbnQzMiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG1pbiA9IC0yMTQ3NDgzNjQ4LCBtYXggPSAyMTQ3NDgzNjQ3KSA9PiB7XG4gIC8vIFRoZSBkZWZhdWx0cyBmb3IgbWluIGFuZCBtYXggY29ycmVzcG9uZCB0byB0aGUgbGltaXRzIG9mIDMyLWJpdCBpbnRlZ2Vycy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ251bWJlcicsIHZhbHVlKVxuICB9XG4gIGlmICghTnVtYmVySXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsICdhbiBpbnRlZ2VyJywgdmFsdWUpXG4gIH1cbiAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgYD49ICR7bWlufSAmJiA8PSAke21heH1gLCB2YWx1ZSlcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVVaW50MzJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcnxib29sZWFufSBbcG9zaXRpdmU9ZmFsc2VdXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBudW1iZXJ9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZVVpbnQzMn0gKi9cbmNvbnN0IHZhbGlkYXRlVWludDMyID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgcG9zaXRpdmUgPSBmYWxzZSkgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbiAgaWYgKCFOdW1iZXJJc0ludGVnZXIodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJ2FuIGludGVnZXInLCB2YWx1ZSlcbiAgfVxuICBjb25zdCBtaW4gPSBwb3NpdGl2ZSA/IDEgOiAwXG4gIC8vIDIgKiogMzIgPT09IDQyOTQ5NjcyOTZcbiAgY29uc3QgbWF4ID0gNDI5NDk2NzI5NVxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVN0cmluZ1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIHN0cmluZ31cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlU3RyaW5nfSAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnc3RyaW5nJywgdmFsdWUpXG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlTnVtYmVyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlTnVtYmVyfSAqL1xuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIodmFsdWUsIG5hbWUsIG1pbiA9IHVuZGVmaW5lZCwgbWF4KSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ251bWJlcicsIHZhbHVlKVxuICBpZiAoXG4gICAgKG1pbiAhPSBudWxsICYmIHZhbHVlIDwgbWluKSB8fFxuICAgIChtYXggIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkgfHxcbiAgICAoKG1pbiAhPSBudWxsIHx8IG1heCAhPSBudWxsKSAmJiBOdW1iZXJJc05hTih2YWx1ZSkpXG4gICkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKFxuICAgICAgbmFtZSxcbiAgICAgIGAke21pbiAhPSBudWxsID8gYD49ICR7bWlufWAgOiAnJ30ke21pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gJyAmJiAnIDogJyd9JHttYXggIT0gbnVsbCA/IGA8PSAke21heH1gIDogJyd9YCxcbiAgICAgIHZhbHVlXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlT25lT2ZcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtUW119IG9uZU9mXG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZU9uZU9mfSAqL1xuY29uc3QgdmFsaWRhdGVPbmVPZiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG9uZU9mKSA9PiB7XG4gIGlmICghQXJyYXlQcm90b3R5cGVJbmNsdWRlcyhvbmVPZiwgdmFsdWUpKSB7XG4gICAgY29uc3QgYWxsb3dlZCA9IEFycmF5UHJvdG90eXBlSm9pbihcbiAgICAgIEFycmF5UHJvdG90eXBlTWFwKG9uZU9mLCAodikgPT4gKHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGAnJHt2fSdgIDogU3RyaW5nKHYpKSksXG4gICAgICAnLCAnXG4gICAgKVxuICAgIGNvbnN0IHJlYXNvbiA9ICdtdXN0IGJlIG9uZSBvZjogJyArIGFsbG93ZWRcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIHZhbHVlLCByZWFzb24pXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQm9vbGVhblxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIGJvb2xlYW59XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUJvb2xlYW59ICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW4odmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ2Jvb2xlYW4nLCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtib29sZWFufSBkZWZhdWx0VmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiBvcHRpb25zID09IG51bGwgfHwgIU9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5KG9wdGlvbnMsIGtleSkgPyBkZWZhdWx0VmFsdWUgOiBvcHRpb25zW2tleV1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVPYmplY3RcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3tcbiAqICAgYWxsb3dBcnJheT86IGJvb2xlYW4sXG4gKiAgIGFsbG93RnVuY3Rpb24/OiBib29sZWFuLFxuICogICBudWxsYWJsZT86IGJvb2xlYW5cbiAqIH19IFtvcHRpb25zXVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVPYmplY3R9ICovXG5jb25zdCB2YWxpZGF0ZU9iamVjdCA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG9wdGlvbnMgPSBudWxsKSA9PiB7XG4gIGNvbnN0IGFsbG93QXJyYXkgPSBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsICdhbGxvd0FycmF5JywgZmFsc2UpXG4gIGNvbnN0IGFsbG93RnVuY3Rpb24gPSBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsICdhbGxvd0Z1bmN0aW9uJywgZmFsc2UpXG4gIGNvbnN0IG51bGxhYmxlID0gZ2V0T3duUHJvcGVydHlWYWx1ZU9yRGVmYXVsdChvcHRpb25zLCAnbnVsbGFibGUnLCBmYWxzZSlcbiAgaWYgKFxuICAgICghbnVsbGFibGUgJiYgdmFsdWUgPT09IG51bGwpIHx8XG4gICAgKCFhbGxvd0FycmF5ICYmIEFycmF5SXNBcnJheSh2YWx1ZSkpIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgJiYgKCFhbGxvd0Z1bmN0aW9uIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykpXG4gICkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnT2JqZWN0JywgdmFsdWUpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlRGljdGlvbmFyeSAtIFdlIGFyZSB1c2luZyB0aGUgV2ViIElETCBTdGFuZGFyZCBkZWZpbml0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgXCJkaWN0aW9uYXJ5XCIgaGVyZSwgd2hpY2ggbWVhbnMgYW55IHZhbHVlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hvc2UgVHlwZSBpcyBlaXRoZXIgVW5kZWZpbmVkLCBOdWxsLCBvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAod2hpY2ggaW5jbHVkZXMgZnVuY3Rpb25zKS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtZGljdGlvbmFyeVxuICogQHNlZSBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jdGFibGUtdHlwZW9mLW9wZXJhdG9yLXJlc3VsdHNcbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlRGljdGlvbmFyeX0gKi9cbmNvbnN0IHZhbGlkYXRlRGljdGlvbmFyeSA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ2EgZGljdGlvbmFyeScsIHZhbHVlKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUFycmF5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5MZW5ndGhdXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBhbnlbXX1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQXJyYXl9ICovXG5jb25zdCB2YWxpZGF0ZUFycmF5ID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgbWluTGVuZ3RoID0gMCkgPT4ge1xuICBpZiAoIUFycmF5SXNBcnJheSh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0FycmF5JywgdmFsdWUpXG4gIH1cbiAgaWYgKHZhbHVlLmxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgIGNvbnN0IHJlYXNvbiA9IGBtdXN0IGJlIGxvbmdlciB0aGFuICR7bWluTGVuZ3RofWBcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIHZhbHVlLCByZWFzb24pXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlU3RyaW5nQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBzdHJpbmdbXX1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlU3RyaW5nQXJyYXl9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZ0FycmF5KHZhbHVlLCBuYW1lKSB7XG4gIHZhbGlkYXRlQXJyYXkodmFsdWUsIG5hbWUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YWxpZGF0ZVN0cmluZyh2YWx1ZVtpXSwgYCR7bmFtZX1bJHtpfV1gKVxuICB9XG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQm9vbGVhbkFycmF5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgYm9vbGVhbltdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVCb29sZWFuQXJyYXl9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW5BcnJheSh2YWx1ZSwgbmFtZSkge1xuICB2YWxpZGF0ZUFycmF5KHZhbHVlLCBuYW1lKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVCb29sZWFuKHZhbHVlW2ldLCBgJHtuYW1lfVske2l9XWApXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgQWJvcnRTaWduYWxbXX1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQWJvcnRTaWduYWxBcnJheX0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQWJvcnRTaWduYWxBcnJheSh2YWx1ZSwgbmFtZSkge1xuICB2YWxpZGF0ZUFycmF5KHZhbHVlLCBuYW1lKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gdmFsdWVbaV1cbiAgICBjb25zdCBpbmRleGVkTmFtZSA9IGAke25hbWV9WyR7aX1dYFxuICAgIGlmIChzaWduYWwgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKGluZGV4ZWROYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gICAgfVxuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCBpbmRleGVkTmFtZSlcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gc2lnbmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J3NpZ25hbCddXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBzaWduYWwgaXMga2V5b2Ygc2lnbmFsc31cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTaWduYWxOYW1lKHNpZ25hbCwgbmFtZSA9ICdzaWduYWwnKSB7XG4gIHZhbGlkYXRlU3RyaW5nKHNpZ25hbCwgbmFtZSlcbiAgaWYgKHNpZ25hbHNbc2lnbmFsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHNpZ25hbHNbU3RyaW5nUHJvdG90eXBlVG9VcHBlckNhc2Uoc2lnbmFsKV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9VTktOT1dOX1NJR05BTChzaWduYWwgKyAnIChzaWduYWxzIG11c3QgdXNlIGFsbCBjYXBpdGFsIGxldHRlcnMpJylcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVSUl9VTktOT1dOX1NJR05BTChzaWduYWwpXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVCdWZmZXJcbiAqIEBwYXJhbSB7Kn0gYnVmZmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J2J1ZmZlciddXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBidWZmZXIgaXMgQXJyYXlCdWZmZXJWaWV3fVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVCdWZmZXJ9ICovXG5jb25zdCB2YWxpZGF0ZUJ1ZmZlciA9IGhpZGVTdGFja0ZyYW1lcygoYnVmZmVyLCBuYW1lID0gJ2J1ZmZlcicpID0+IHtcbiAgaWYgKCFpc0FycmF5QnVmZmVyVmlldyhidWZmZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsIFsnQnVmZmVyJywgJ1R5cGVkQXJyYXknLCAnRGF0YVZpZXcnXSwgYnVmZmVyKVxuICB9XG59KVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RpbmdcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFbmNvZGluZyhkYXRhLCBlbmNvZGluZykge1xuICBjb25zdCBub3JtYWxpemVkRW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZylcbiAgY29uc3QgbGVuZ3RoID0gZGF0YS5sZW5ndGhcbiAgaWYgKG5vcm1hbGl6ZWRFbmNvZGluZyA9PT0gJ2hleCcgJiYgbGVuZ3RoICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoJ2VuY29kaW5nJywgZW5jb2RpbmcsIGBpcyBpbnZhbGlkIGZvciBkYXRhIG9mIGxlbmd0aCAke2xlbmd0aH1gKVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgdGhhdCB0aGUgcG9ydCBudW1iZXIgaXMgbm90IE5hTiB3aGVuIGNvZXJjZWQgdG8gYSBudW1iZXIsXG4gKiBpcyBhbiBpbnRlZ2VyIGFuZCB0aGF0IGl0IGZhbGxzIHdpdGhpbiB0aGUgbGVnYWwgcmFuZ2Ugb2YgcG9ydCBudW1iZXJzLlxuICogQHBhcmFtIHsqfSBwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J1BvcnQnXVxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3daZXJvPXRydWVdXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBvcnQocG9ydCwgbmFtZSA9ICdQb3J0JywgYWxsb3daZXJvID0gdHJ1ZSkge1xuICBpZiAoXG4gICAgKHR5cGVvZiBwb3J0ICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgcG9ydCAhPT0gJ3N0cmluZycpIHx8XG4gICAgKHR5cGVvZiBwb3J0ID09PSAnc3RyaW5nJyAmJiBTdHJpbmdQcm90b3R5cGVUcmltKHBvcnQpLmxlbmd0aCA9PT0gMCkgfHxcbiAgICArcG9ydCAhPT0gK3BvcnQgPj4+IDAgfHxcbiAgICBwb3J0ID4gMHhmZmZmIHx8XG4gICAgKHBvcnQgPT09IDAgJiYgIWFsbG93WmVybylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9TT0NLRVRfQkFEX1BPUlQobmFtZSwgcG9ydCwgYWxsb3daZXJvKVxuICB9XG4gIHJldHVybiBwb3J0IHwgMFxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUFib3J0U2lnbmFsXG4gKiBAcGFyYW0geyp9IHNpZ25hbFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQWJvcnRTaWduYWx9ICovXG5jb25zdCB2YWxpZGF0ZUFib3J0U2lnbmFsID0gaGlkZVN0YWNrRnJhbWVzKChzaWduYWwsIG5hbWUpID0+IHtcbiAgaWYgKHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIChzaWduYWwgPT09IG51bGwgfHwgdHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Fib3J0U2lnbmFsJywgc2lnbmFsKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgRnVuY3Rpb259XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUZ1bmN0aW9ufSAqL1xuY29uc3QgdmFsaWRhdGVGdW5jdGlvbiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdGdW5jdGlvbicsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVQbGFpbkZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgRnVuY3Rpb259XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZVBsYWluRnVuY3Rpb259ICovXG5jb25zdCB2YWxpZGF0ZVBsYWluRnVuY3Rpb24gPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgfHwgaXNBc3luY0Z1bmN0aW9uKHZhbHVlKSkgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdGdW5jdGlvbicsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVVbmRlZmluZWRcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyB1bmRlZmluZWR9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZVVuZGVmaW5lZH0gKi9cbmNvbnN0IHZhbGlkYXRlVW5kZWZpbmVkID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICd1bmRlZmluZWQnLCB2YWx1ZSlcbn0pXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1RbXX0gdW5pb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVVbmlvbih2YWx1ZSwgbmFtZSwgdW5pb24pIHtcbiAgaWYgKCFBcnJheVByb3RvdHlwZUluY2x1ZGVzKHVuaW9uLCB2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgYCgnJHtBcnJheVByb3RvdHlwZUpvaW4odW5pb24sICd8Jyl9JylgLCB2YWx1ZSlcbiAgfVxufVxuXG4vKlxuICBUaGUgcnVsZXMgZm9yIHRoZSBMaW5rIGhlYWRlciBmaWVsZCBhcmUgZGVzY3JpYmVkIGhlcmU6XG4gIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM4Mjg4Lmh0bWwjc2VjdGlvbi0zXG5cbiAgVGhpcyByZWdleCB2YWxpZGF0ZXMgYW55IHN0cmluZyBzdXJyb3VuZGVkIGJ5IGFuZ2xlIGJyYWNrZXRzXG4gIChub3QgbmVjZXNzYXJpbHkgYSB2YWxpZCBVUkkgcmVmZXJlbmNlKSBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmVcbiAgbGluay1wYXJhbXMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMuXG4qL1xuY29uc3QgbGlua1ZhbHVlUmVnRXhwID0gL14oPzo8W14+XSo+KSg/Olxccyo7XFxzKlteO1wiXFxzXSsoPzo9KFwiKT9bXjtcIlxcc10qXFwxKT8pKiQvXG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUxpbmtIZWFkZXJGb3JtYXQodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIVJlZ0V4cFByb3RvdHlwZUV4ZWMobGlua1ZhbHVlUmVnRXhwLCB2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgJ211c3QgYmUgYW4gYXJyYXkgb3Igc3RyaW5nIG9mIGZvcm1hdCBcIjwvc3R5bGVzLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZVwiJ1xuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBoaW50c1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUxpbmtIZWFkZXJWYWx1ZShoaW50cykge1xuICBpZiAodHlwZW9mIGhpbnRzID09PSAnc3RyaW5nJykge1xuICAgIHZhbGlkYXRlTGlua0hlYWRlckZvcm1hdChoaW50cywgJ2hpbnRzJylcbiAgICByZXR1cm4gaGludHNcbiAgfSBlbHNlIGlmIChBcnJheUlzQXJyYXkoaGludHMpKSB7XG4gICAgY29uc3QgaGludHNMZW5ndGggPSBoaW50cy5sZW5ndGhcbiAgICBsZXQgcmVzdWx0ID0gJydcbiAgICBpZiAoaGludHNMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoaW50c0xlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5rID0gaGludHNbaV1cbiAgICAgIHZhbGlkYXRlTGlua0hlYWRlckZvcm1hdChsaW5rLCAnaGludHMnKVxuICAgICAgcmVzdWx0ICs9IGxpbmtcbiAgICAgIGlmIChpICE9PSBoaW50c0xlbmd0aCAtIDEpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsICdcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG4gIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoXG4gICAgJ2hpbnRzJyxcbiAgICBoaW50cyxcbiAgICAnbXVzdCBiZSBhbiBhcnJheSBvciBzdHJpbmcgb2YgZm9ybWF0IFwiPC9zdHlsZXMuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlXCInXG4gIClcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0ludDMyLFxuICBpc1VpbnQzMixcbiAgcGFyc2VGaWxlTW9kZSxcbiAgdmFsaWRhdGVBcnJheSxcbiAgdmFsaWRhdGVTdHJpbmdBcnJheSxcbiAgdmFsaWRhdGVCb29sZWFuQXJyYXksXG4gIHZhbGlkYXRlQWJvcnRTaWduYWxBcnJheSxcbiAgdmFsaWRhdGVCb29sZWFuLFxuICB2YWxpZGF0ZUJ1ZmZlcixcbiAgdmFsaWRhdGVEaWN0aW9uYXJ5LFxuICB2YWxpZGF0ZUVuY29kaW5nLFxuICB2YWxpZGF0ZUZ1bmN0aW9uLFxuICB2YWxpZGF0ZUludDMyLFxuICB2YWxpZGF0ZUludGVnZXIsXG4gIHZhbGlkYXRlTnVtYmVyLFxuICB2YWxpZGF0ZU9iamVjdCxcbiAgdmFsaWRhdGVPbmVPZixcbiAgdmFsaWRhdGVQbGFpbkZ1bmN0aW9uLFxuICB2YWxpZGF0ZVBvcnQsXG4gIHZhbGlkYXRlU2lnbmFsTmFtZSxcbiAgdmFsaWRhdGVTdHJpbmcsXG4gIHZhbGlkYXRlVWludDMyLFxuICB2YWxpZGF0ZVVuZGVmaW5lZCxcbiAgdmFsaWRhdGVVbmlvbixcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbCxcbiAgdmFsaWRhdGVMaW5rSGVhZGVyVmFsdWVcbn1cbiIsCiAgICAiLy8gZm9yIG5vdyBqdXN0IGV4cG9zZSB0aGUgYnVpbHRpbiBwcm9jZXNzIGdsb2JhbCBmcm9tIG5vZGUuanNcbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLnByb2Nlc3M7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFN5bWJvbEFzeW5jSXRlcmF0b3IsIFN5bWJvbEl0ZXJhdG9yLCBTeW1ib2xGb3IgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuXG4vLyBXZSBuZWVkIHRvIHVzZSBTeW1ib2xGb3IgdG8gbWFrZSB0aGVzZSBnbG9iYWxseSBhdmFpbGFibGVcbi8vIGZvciBpbnRlcm9wdCB3aXRoIHJlYWRhYmxlLXN0cmVhbSwgaS5lLiByZWFkYWJsZS1zdHJlYW1cbi8vIGFuZCBub2RlIGNvcmUgbmVlZHMgdG8gYmUgYWJsZSB0byByZWFkL3dyaXRlIHByaXZhdGUgc3RhdGVcbi8vIGZyb20gZWFjaCBvdGhlciBmb3IgcHJvcGVyIGludGVyb3BlcmFiaWxpdHkuXG5jb25zdCBrSXNEZXN0cm95ZWQgPSBTeW1ib2xGb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJylcbmNvbnN0IGtJc0Vycm9yZWQgPSBTeW1ib2xGb3IoJ25vZGVqcy5zdHJlYW0uZXJyb3JlZCcpXG5jb25zdCBrSXNSZWFkYWJsZSA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5yZWFkYWJsZScpXG5jb25zdCBrSXNXcml0YWJsZSA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS53cml0YWJsZScpXG5jb25zdCBrSXNEaXN0dXJiZWQgPSBTeW1ib2xGb3IoJ25vZGVqcy5zdHJlYW0uZGlzdHVyYmVkJylcbmNvbnN0IGtJc0Nsb3NlZFByb21pc2UgPSBTeW1ib2xGb3IoJ25vZGVqcy53ZWJzdHJlYW0uaXNDbG9zZWRQcm9taXNlJylcbmNvbnN0IGtDb250cm9sbGVyRXJyb3JGdW5jdGlvbiA9IFN5bWJvbEZvcignbm9kZWpzLndlYnN0cmVhbS5jb250cm9sbGVyRXJyb3JGdW5jdGlvbicpXG5mdW5jdGlvbiBpc1JlYWRhYmxlTm9kZVN0cmVhbShvYmosIHN0cmljdCA9IGZhbHNlKSB7XG4gIHZhciBfb2JqJF9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiAhIShcbiAgICAoXG4gICAgICBvYmogJiZcbiAgICAgIHR5cGVvZiBvYmoucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKCFzdHJpY3QgfHwgKHR5cGVvZiBvYmoucGF1c2UgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5yZXN1bWUgPT09ICdmdW5jdGlvbicpKSAmJlxuICAgICAgKCFvYmouX3dyaXRhYmxlU3RhdGUgfHxcbiAgICAgICAgKChfb2JqJF9yZWFkYWJsZVN0YXRlID0gb2JqLl9yZWFkYWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfb2JqJF9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogX29iaiRfcmVhZGFibGVTdGF0ZS5yZWFkYWJsZSkgIT09IGZhbHNlKSAmJlxuICAgICAgLy8gRHVwbGV4XG4gICAgICAoIW9iai5fd3JpdGFibGVTdGF0ZSB8fCBvYmouX3JlYWRhYmxlU3RhdGUpXG4gICAgKSAvLyBXcml0YWJsZSBoYXMgLnBpcGUuXG4gIClcbn1cblxuZnVuY3Rpb24gaXNXcml0YWJsZU5vZGVTdHJlYW0ob2JqKSB7XG4gIHZhciBfb2JqJF93cml0YWJsZVN0YXRlXG4gIHJldHVybiAhIShcbiAgICAoXG4gICAgICBvYmogJiZcbiAgICAgIHR5cGVvZiBvYmoud3JpdGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICghb2JqLl9yZWFkYWJsZVN0YXRlIHx8XG4gICAgICAgICgoX29iaiRfd3JpdGFibGVTdGF0ZSA9IG9iai5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX29iaiRfd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IF9vYmokX3dyaXRhYmxlU3RhdGUud3JpdGFibGUpICE9PSBmYWxzZSlcbiAgICApIC8vIER1cGxleFxuICApXG59XG5cbmZ1bmN0aW9uIGlzRHVwbGV4Tm9kZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuICEhKFxuICAgIG9iaiAmJlxuICAgIHR5cGVvZiBvYmoucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIG9iai5fcmVhZGFibGVTdGF0ZSAmJlxuICAgIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqLndyaXRlID09PSAnZnVuY3Rpb24nXG4gIClcbn1cbmZ1bmN0aW9uIGlzTm9kZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuIChcbiAgICBvYmogJiZcbiAgICAob2JqLl9yZWFkYWJsZVN0YXRlIHx8XG4gICAgICBvYmouX3dyaXRhYmxlU3RhdGUgfHxcbiAgICAgICh0eXBlb2Ygb2JqLndyaXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicpIHx8XG4gICAgICAodHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicpKVxuICApXG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEoXG4gICAgb2JqICYmXG4gICAgIWlzTm9kZVN0cmVhbShvYmopICYmXG4gICAgdHlwZW9mIG9iai5waXBlVGhyb3VnaCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmouZ2V0UmVhZGVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iai5jYW5jZWwgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuZnVuY3Rpb24gaXNXcml0YWJsZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAmJiAhaXNOb2RlU3RyZWFtKG9iaikgJiYgdHlwZW9mIG9iai5nZXRXcml0ZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5hYm9ydCA9PT0gJ2Z1bmN0aW9uJylcbn1cbmZ1bmN0aW9uIGlzVHJhbnNmb3JtU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEob2JqICYmICFpc05vZGVTdHJlYW0ob2JqKSAmJiB0eXBlb2Ygb2JqLnJlYWRhYmxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLndyaXRhYmxlID09PSAnb2JqZWN0Jylcbn1cbmZ1bmN0aW9uIGlzV2ViU3RyZWFtKG9iaikge1xuICByZXR1cm4gaXNSZWFkYWJsZVN0cmVhbShvYmopIHx8IGlzV3JpdGFibGVTdHJlYW0ob2JqKSB8fCBpc1RyYW5zZm9ybVN0cmVhbShvYmopXG59XG5mdW5jdGlvbiBpc0l0ZXJhYmxlKG9iaiwgaXNBc3luYykge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZVxuICBpZiAoaXNBc3luYyA9PT0gdHJ1ZSkgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sQXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbidcbiAgaWYgKGlzQXN5bmMgPT09IGZhbHNlKSByZXR1cm4gdHlwZW9mIG9ialtTeW1ib2xJdGVyYXRvcl0gPT09ICdmdW5jdGlvbidcbiAgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sQXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2xJdGVyYXRvcl0gPT09ICdmdW5jdGlvbidcbn1cbmZ1bmN0aW9uIGlzRGVzdHJveWVkKHN0cmVhbSkge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbFxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHN0YXRlID0gd1N0YXRlIHx8IHJTdGF0ZVxuICByZXR1cm4gISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0lzRGVzdHJveWVkXSB8fCAoc3RhdGUgIT09IG51bGwgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5kZXN0cm95ZWQpKVxufVxuXG4vLyBIYXZlIGJlZW4gZW5kKCk6ZC5cbmZ1bmN0aW9uIGlzV3JpdGFibGVFbmRlZChzdHJlYW0pIHtcbiAgaWYgKCFpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbFxuICBpZiAoc3RyZWFtLndyaXRhYmxlRW5kZWQgPT09IHRydWUpIHJldHVybiB0cnVlXG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBpZiAod1N0YXRlICE9PSBudWxsICYmIHdTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHdTdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgaWYgKHR5cGVvZiAod1N0YXRlID09PSBudWxsIHx8IHdTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogd1N0YXRlLmVuZGVkKSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gbnVsbFxuICByZXR1cm4gd1N0YXRlLmVuZGVkXG59XG5cbi8vIEhhdmUgZW1pdHRlZCAnZmluaXNoJy5cbmZ1bmN0aW9uIGlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0sIHN0cmljdCkge1xuICBpZiAoIWlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGlmIChzdHJlYW0ud3JpdGFibGVGaW5pc2hlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmICh3U3RhdGUgIT09IG51bGwgJiYgd1N0YXRlICE9PSB1bmRlZmluZWQgJiYgd1N0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mICh3U3RhdGUgPT09IG51bGwgfHwgd1N0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB3U3RhdGUuZmluaXNoZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiAhISh3U3RhdGUuZmluaXNoZWQgfHwgKHN0cmljdCA9PT0gZmFsc2UgJiYgd1N0YXRlLmVuZGVkID09PSB0cnVlICYmIHdTdGF0ZS5sZW5ndGggPT09IDApKVxufVxuXG4vLyBIYXZlIGJlZW4gcHVzaChudWxsKTpkLlxuZnVuY3Rpb24gaXNSZWFkYWJsZUVuZGVkKHN0cmVhbSkge1xuICBpZiAoIWlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGlmIChzdHJlYW0ucmVhZGFibGVFbmRlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGlmICghclN0YXRlIHx8IHJTdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgaWYgKHR5cGVvZiAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmVuZGVkKSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gbnVsbFxuICByZXR1cm4gclN0YXRlLmVuZGVkXG59XG5cbi8vIEhhdmUgZW1pdHRlZCAnZW5kJy5cbmZ1bmN0aW9uIGlzUmVhZGFibGVGaW5pc2hlZChzdHJlYW0sIHN0cmljdCkge1xuICBpZiAoIWlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBpZiAoclN0YXRlICE9PSBudWxsICYmIHJTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHJTdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgaWYgKHR5cGVvZiAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmVuZEVtaXR0ZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiAhIShyU3RhdGUuZW5kRW1pdHRlZCB8fCAoc3RyaWN0ID09PSBmYWxzZSAmJiByU3RhdGUuZW5kZWQgPT09IHRydWUgJiYgclN0YXRlLmxlbmd0aCA9PT0gMCkpXG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlKHN0cmVhbSkge1xuICBpZiAoc3RyZWFtICYmIHN0cmVhbVtrSXNSZWFkYWJsZV0gIT0gbnVsbCkgcmV0dXJuIHN0cmVhbVtrSXNSZWFkYWJsZV1cbiAgaWYgKHR5cGVvZiAoc3RyZWFtID09PSBudWxsIHx8IHN0cmVhbSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc3RyZWFtLnJlYWRhYmxlKSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gbnVsbFxuICBpZiAoaXNEZXN0cm95ZWQoc3RyZWFtKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBpc1JlYWRhYmxlTm9kZVN0cmVhbShzdHJlYW0pICYmIHN0cmVhbS5yZWFkYWJsZSAmJiAhaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSlcbn1cbmZ1bmN0aW9uIGlzV3JpdGFibGUoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW0gJiYgc3RyZWFtW2tJc1dyaXRhYmxlXSAhPSBudWxsKSByZXR1cm4gc3RyZWFtW2tJc1dyaXRhYmxlXVxuICBpZiAodHlwZW9mIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzdHJlYW0ud3JpdGFibGUpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIGlmIChpc0Rlc3Ryb3llZChzdHJlYW0pKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgJiYgc3RyZWFtLndyaXRhYmxlICYmICFpc1dyaXRhYmxlRW5kZWQoc3RyZWFtKVxufVxuZnVuY3Rpb24gaXNGaW5pc2hlZChzdHJlYW0sIG9wdHMpIHtcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKGlzRGVzdHJveWVkKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICgob3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRzLnJlYWRhYmxlKSAhPT0gZmFsc2UgJiYgaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMud3JpdGFibGUpICE9PSBmYWxzZSAmJiBpc1dyaXRhYmxlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuZnVuY3Rpb24gaXNXcml0YWJsZUVycm9yZWQoc3RyZWFtKSB7XG4gIHZhciBfc3RyZWFtJF93cml0YWJsZVN0YXQsIF9zdHJlYW0kX3dyaXRhYmxlU3RhdDJcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHN0cmVhbS53cml0YWJsZUVycm9yZWQpIHtcbiAgICByZXR1cm4gc3RyZWFtLndyaXRhYmxlRXJyb3JlZFxuICB9XG4gIHJldHVybiAoX3N0cmVhbSRfd3JpdGFibGVTdGF0ID1cbiAgICAoX3N0cmVhbSRfd3JpdGFibGVTdGF0MiA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfd3JpdGFibGVTdGF0MiA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBfc3RyZWFtJF93cml0YWJsZVN0YXQyLmVycm9yZWQpICE9PSBudWxsICYmIF9zdHJlYW0kX3dyaXRhYmxlU3RhdCAhPT0gdW5kZWZpbmVkXG4gICAgPyBfc3RyZWFtJF93cml0YWJsZVN0YXRcbiAgICA6IG51bGxcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVFcnJvcmVkKHN0cmVhbSkge1xuICB2YXIgX3N0cmVhbSRfcmVhZGFibGVTdGF0LCBfc3RyZWFtJF9yZWFkYWJsZVN0YXQyXG4gIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGlmIChzdHJlYW0ucmVhZGFibGVFcnJvcmVkKSB7XG4gICAgcmV0dXJuIHN0cmVhbS5yZWFkYWJsZUVycm9yZWRcbiAgfVxuICByZXR1cm4gKF9zdHJlYW0kX3JlYWRhYmxlU3RhdCA9XG4gICAgKF9zdHJlYW0kX3JlYWRhYmxlU3RhdDIgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDIgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogX3N0cmVhbSRfcmVhZGFibGVTdGF0Mi5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfc3RyZWFtJF9yZWFkYWJsZVN0YXQgIT09IHVuZGVmaW5lZFxuICAgID8gX3N0cmVhbSRfcmVhZGFibGVTdGF0XG4gICAgOiBudWxsXG59XG5mdW5jdGlvbiBpc0Nsb3NlZChzdHJlYW0pIHtcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJlYW0uY2xvc2VkID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gc3RyZWFtLmNsb3NlZFxuICB9XG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgaWYgKFxuICAgIHR5cGVvZiAod1N0YXRlID09PSBudWxsIHx8IHdTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogd1N0YXRlLmNsb3NlZCkgPT09ICdib29sZWFuJyB8fFxuICAgIHR5cGVvZiAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmNsb3NlZCkgPT09ICdib29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHdTdGF0ZSA9PT0gbnVsbCB8fCB3U3RhdGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHdTdGF0ZS5jbG9zZWQpIHx8XG4gICAgICAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmNsb3NlZClcbiAgICApXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJlYW0uX2Nsb3NlZCA9PT0gJ2Jvb2xlYW4nICYmIGlzT3V0Z29pbmdNZXNzYWdlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gc3RyZWFtLl9jbG9zZWRcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuZnVuY3Rpb24gaXNPdXRnb2luZ01lc3NhZ2Uoc3RyZWFtKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHN0cmVhbS5fY2xvc2VkID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9kZWZhdWx0S2VlcEFsaXZlID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9yZW1vdmVkQ29ubmVjdGlvbiA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgdHlwZW9mIHN0cmVhbS5fcmVtb3ZlZENvbnRMZW4gPT09ICdib29sZWFuJ1xuICApXG59XG5mdW5jdGlvbiBpc1NlcnZlclJlc3BvbnNlKHN0cmVhbSkge1xuICByZXR1cm4gdHlwZW9mIHN0cmVhbS5fc2VudDEwMCA9PT0gJ2Jvb2xlYW4nICYmIGlzT3V0Z29pbmdNZXNzYWdlKHN0cmVhbSlcbn1cbmZ1bmN0aW9uIGlzU2VydmVyUmVxdWVzdChzdHJlYW0pIHtcbiAgdmFyIF9zdHJlYW0kcmVxXG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHN0cmVhbS5fY29uc3VtaW5nID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9kdW1wZWQgPT09ICdib29sZWFuJyAmJlxuICAgICgoX3N0cmVhbSRyZXEgPSBzdHJlYW0ucmVxKSA9PT0gbnVsbCB8fCBfc3RyZWFtJHJlcSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogX3N0cmVhbSRyZXEudXBncmFkZU9yQ29ubmVjdCkgPT09XG4gICAgICB1bmRlZmluZWRcbiAgKVxufVxuZnVuY3Rpb24gd2lsbEVtaXRDbG9zZShzdHJlYW0pIHtcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCBzdGF0ZSA9IHdTdGF0ZSB8fCByU3RhdGVcbiAgcmV0dXJuIChcbiAgICAoIXN0YXRlICYmIGlzU2VydmVyUmVzcG9uc2Uoc3RyZWFtKSkgfHwgISEoc3RhdGUgJiYgc3RhdGUuYXV0b0Rlc3Ryb3kgJiYgc3RhdGUuZW1pdENsb3NlICYmIHN0YXRlLmNsb3NlZCA9PT0gZmFsc2UpXG4gIClcbn1cbmZ1bmN0aW9uIGlzRGlzdHVyYmVkKHN0cmVhbSkge1xuICB2YXIgX3N0cmVhbSRrSXNEaXN0dXJiZWRcbiAgcmV0dXJuICEhKFxuICAgIHN0cmVhbSAmJlxuICAgICgoX3N0cmVhbSRrSXNEaXN0dXJiZWQgPSBzdHJlYW1ba0lzRGlzdHVyYmVkXSkgIT09IG51bGwgJiYgX3N0cmVhbSRrSXNEaXN0dXJiZWQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBfc3RyZWFtJGtJc0Rpc3R1cmJlZFxuICAgICAgOiBzdHJlYW0ucmVhZGFibGVEaWRSZWFkIHx8IHN0cmVhbS5yZWFkYWJsZUFib3J0ZWQpXG4gIClcbn1cbmZ1bmN0aW9uIGlzRXJyb3JlZChzdHJlYW0pIHtcbiAgdmFyIF9yZWYsXG4gICAgX3JlZjIsXG4gICAgX3JlZjMsXG4gICAgX3JlZjQsXG4gICAgX3JlZjUsXG4gICAgX3N0cmVhbSRrSXNFcnJvcmVkLFxuICAgIF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMsXG4gICAgX3N0cmVhbSRfd3JpdGFibGVTdGF0MyxcbiAgICBfc3RyZWFtJF9yZWFkYWJsZVN0YXQ0LFxuICAgIF9zdHJlYW0kX3dyaXRhYmxlU3RhdDRcbiAgcmV0dXJuICEhKFxuICAgIHN0cmVhbSAmJlxuICAgICgoX3JlZiA9XG4gICAgICAoX3JlZjIgPVxuICAgICAgICAoX3JlZjMgPVxuICAgICAgICAgIChfcmVmNCA9XG4gICAgICAgICAgICAoX3JlZjUgPVxuICAgICAgICAgICAgICAoX3N0cmVhbSRrSXNFcnJvcmVkID0gc3RyZWFtW2tJc0Vycm9yZWRdKSAhPT0gbnVsbCAmJiBfc3RyZWFtJGtJc0Vycm9yZWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gX3N0cmVhbSRrSXNFcnJvcmVkXG4gICAgICAgICAgICAgICAgOiBzdHJlYW0ucmVhZGFibGVFcnJvcmVkKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gX3JlZjVcbiAgICAgICAgICAgICAgOiBzdHJlYW0ud3JpdGFibGVFcnJvcmVkKSAhPT0gbnVsbCAmJiBfcmVmNCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IF9yZWY0XG4gICAgICAgICAgICA6IChfc3RyZWFtJF9yZWFkYWJsZVN0YXQzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfc3RyZWFtJF9yZWFkYWJsZVN0YXQzID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMuZXJyb3JFbWl0dGVkKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBfcmVmM1xuICAgICAgICAgIDogKF9zdHJlYW0kX3dyaXRhYmxlU3RhdDMgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBfc3RyZWFtJF93cml0YWJsZVN0YXQzLmVycm9yRW1pdHRlZCkgIT09IG51bGwgJiYgX3JlZjIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IF9yZWYyXG4gICAgICAgIDogKF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQuZXJyb3JlZCkgIT09IG51bGwgJiYgX3JlZiAhPT0gdW5kZWZpbmVkXG4gICAgICA/IF9yZWZcbiAgICAgIDogKF9zdHJlYW0kX3dyaXRhYmxlU3RhdDQgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDQgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogX3N0cmVhbSRfd3JpdGFibGVTdGF0NC5lcnJvcmVkKVxuICApXG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNEZXN0cm95ZWQsXG4gIGtJc0Rlc3Ryb3llZCxcbiAgaXNEaXN0dXJiZWQsXG4gIGtJc0Rpc3R1cmJlZCxcbiAgaXNFcnJvcmVkLFxuICBrSXNFcnJvcmVkLFxuICBpc1JlYWRhYmxlLFxuICBrSXNSZWFkYWJsZSxcbiAga0lzQ2xvc2VkUHJvbWlzZSxcbiAga0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uLFxuICBrSXNXcml0YWJsZSxcbiAgaXNDbG9zZWQsXG4gIGlzRHVwbGV4Tm9kZVN0cmVhbSxcbiAgaXNGaW5pc2hlZCxcbiAgaXNJdGVyYWJsZSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVhZGFibGVFbmRlZCxcbiAgaXNSZWFkYWJsZUZpbmlzaGVkLFxuICBpc1JlYWRhYmxlRXJyb3JlZCxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1dlYlN0cmVhbSxcbiAgaXNXcml0YWJsZSxcbiAgaXNXcml0YWJsZU5vZGVTdHJlYW0sXG4gIGlzV3JpdGFibGVTdHJlYW0sXG4gIGlzV3JpdGFibGVFbmRlZCxcbiAgaXNXcml0YWJsZUZpbmlzaGVkLFxuICBpc1dyaXRhYmxlRXJyb3JlZCxcbiAgaXNTZXJ2ZXJSZXF1ZXN0LFxuICBpc1NlcnZlclJlc3BvbnNlLFxuICB3aWxsRW1pdENsb3NlLFxuICBpc1RyYW5zZm9ybVN0cmVhbVxufVxuIiwKICAgICIvKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvZW5kLW9mLXN0cmVhbSB3aXRoXG4vLyBwZXJtaXNzaW9uIGZyb20gdGhlIGF1dGhvciwgTWF0aGlhcyBCdXVzIChAbWFmaW50b3NoKS5cblxuOygndXNlIHN0cmljdCcpXG5jb25zdCB7IEFib3J0RXJyb3IsIGNvZGVzIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IEVSUl9JTlZBTElEX0FSR19UWVBFLCBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSB9ID0gY29kZXNcbmNvbnN0IHsga0VtcHR5T2JqZWN0LCBvbmNlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxuY29uc3QgeyB2YWxpZGF0ZUFib3J0U2lnbmFsLCB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVCb29sZWFuIH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IHsgUHJvbWlzZSwgUHJvbWlzZVByb3RvdHlwZVRoZW4sIFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3Qge1xuICBpc0Nsb3NlZCxcbiAgaXNSZWFkYWJsZSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVhZGFibGVGaW5pc2hlZCxcbiAgaXNSZWFkYWJsZUVycm9yZWQsXG4gIGlzV3JpdGFibGUsXG4gIGlzV3JpdGFibGVOb2RlU3RyZWFtLFxuICBpc1dyaXRhYmxlU3RyZWFtLFxuICBpc1dyaXRhYmxlRmluaXNoZWQsXG4gIGlzV3JpdGFibGVFcnJvcmVkLFxuICBpc05vZGVTdHJlYW0sXG4gIHdpbGxFbWl0Q2xvc2U6IF93aWxsRW1pdENsb3NlLFxuICBrSXNDbG9zZWRQcm9taXNlXG59ID0gcmVxdWlyZSgnLi91dGlscycpXG5sZXQgYWRkQWJvcnRMaXN0ZW5lclxuZnVuY3Rpb24gaXNSZXF1ZXN0KHN0cmVhbSkge1xuICByZXR1cm4gc3RyZWFtLnNldEhlYWRlciAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nXG59XG5jb25zdCBub3AgPSAoKSA9PiB7fVxuZnVuY3Rpb24gZW9zKHN0cmVhbSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIF9vcHRpb25zJHJlYWRhYmxlLCBfb3B0aW9ucyR3cml0YWJsZVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBrRW1wdHlPYmplY3RcbiAgfSBlbHNlIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICBvcHRpb25zID0ga0VtcHR5T2JqZWN0XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2ssICdjYWxsYmFjaycpXG4gIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIGNhbGxiYWNrID0gb25jZShjYWxsYmFjaylcbiAgaWYgKGlzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSB8fCBpc1dyaXRhYmxlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gZW9zV2ViKHN0cmVhbSwgb3B0aW9ucywgY2FsbGJhY2spXG4gIH1cbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnc3RyZWFtJywgWydSZWFkYWJsZVN0cmVhbScsICdXcml0YWJsZVN0cmVhbScsICdTdHJlYW0nXSwgc3RyZWFtKVxuICB9XG4gIGNvbnN0IHJlYWRhYmxlID1cbiAgICAoX29wdGlvbnMkcmVhZGFibGUgPSBvcHRpb25zLnJlYWRhYmxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRyZWFkYWJsZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IF9vcHRpb25zJHJlYWRhYmxlXG4gICAgICA6IGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSlcbiAgY29uc3Qgd3JpdGFibGUgPVxuICAgIChfb3B0aW9ucyR3cml0YWJsZSA9IG9wdGlvbnMud3JpdGFibGUpICE9PSBudWxsICYmIF9vcHRpb25zJHdyaXRhYmxlICE9PSB1bmRlZmluZWRcbiAgICAgID8gX29wdGlvbnMkd3JpdGFibGVcbiAgICAgIDogaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKVxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IG9ubGVnYWN5ZmluaXNoID0gKCkgPT4ge1xuICAgIGlmICghc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICBvbmZpbmlzaCgpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyAocm9uYWcpOiBJbXByb3ZlIHNvZnQgZGV0ZWN0aW9uIHRvIGluY2x1ZGUgY29yZSBtb2R1bGVzIGFuZFxuICAvLyBjb21tb24gZWNvc3lzdGVtIG1vZHVsZXMgdGhhdCBkbyBwcm9wZXJseSBlbWl0ICdjbG9zZScgYnV0IGZhaWxcbiAgLy8gdGhpcyBnZW5lcmljIGNoZWNrLlxuICBsZXQgd2lsbEVtaXRDbG9zZSA9XG4gICAgX3dpbGxFbWl0Q2xvc2Uoc3RyZWFtKSAmJiBpc1JlYWRhYmxlTm9kZVN0cmVhbShzdHJlYW0pID09PSByZWFkYWJsZSAmJiBpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pID09PSB3cml0YWJsZVxuICBsZXQgd3JpdGFibGVGaW5pc2hlZCA9IGlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0sIGZhbHNlKVxuICBjb25zdCBvbmZpbmlzaCA9ICgpID0+IHtcbiAgICB3cml0YWJsZUZpbmlzaGVkID0gdHJ1ZVxuICAgIC8vIFN0cmVhbSBzaG91bGQgbm90IGJlIGRlc3Ryb3llZCBoZXJlLiBJZiBpdCBpcyB0aGF0XG4gICAgLy8gbWVhbnMgdGhhdCB1c2VyIHNwYWNlIGlzIGRvaW5nIHNvbWV0aGluZyBkaWZmZXJlbnRseSBhbmRcbiAgICAvLyB3ZSBjYW5ub3QgdHJ1c3Qgd2lsbEVtaXRDbG9zZS5cbiAgICBpZiAoc3RyZWFtLmRlc3Ryb3llZCkge1xuICAgICAgd2lsbEVtaXRDbG9zZSA9IGZhbHNlXG4gICAgfVxuICAgIGlmICh3aWxsRW1pdENsb3NlICYmICghc3RyZWFtLnJlYWRhYmxlIHx8IHJlYWRhYmxlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghcmVhZGFibGUgfHwgcmVhZGFibGVGaW5pc2hlZCkge1xuICAgICAgY2FsbGJhY2suY2FsbChzdHJlYW0pXG4gICAgfVxuICB9XG4gIGxldCByZWFkYWJsZUZpbmlzaGVkID0gaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpXG4gIGNvbnN0IG9uZW5kID0gKCkgPT4ge1xuICAgIHJlYWRhYmxlRmluaXNoZWQgPSB0cnVlXG4gICAgLy8gU3RyZWFtIHNob3VsZCBub3QgYmUgZGVzdHJveWVkIGhlcmUuIElmIGl0IGlzIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHVzZXIgc3BhY2UgaXMgZG9pbmcgc29tZXRoaW5nIGRpZmZlcmVudGx5IGFuZFxuICAgIC8vIHdlIGNhbm5vdCB0cnVzdCB3aWxsRW1pdENsb3NlLlxuICAgIGlmIChzdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICB3aWxsRW1pdENsb3NlID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHdpbGxFbWl0Q2xvc2UgJiYgKCFzdHJlYW0ud3JpdGFibGUgfHwgd3JpdGFibGUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCF3cml0YWJsZSB8fCB3cml0YWJsZUZpbmlzaGVkKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25lcnJvciA9IChlcnIpID0+IHtcbiAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKVxuICB9XG4gIGxldCBjbG9zZWQgPSBpc0Nsb3NlZChzdHJlYW0pXG4gIGNvbnN0IG9uY2xvc2UgPSAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICAgIGNvbnN0IGVycm9yZWQgPSBpc1dyaXRhYmxlRXJyb3JlZChzdHJlYW0pIHx8IGlzUmVhZGFibGVFcnJvcmVkKHN0cmVhbSlcbiAgICBpZiAoZXJyb3JlZCAmJiB0eXBlb2YgZXJyb3JlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIGVycm9yZWQpXG4gICAgfVxuICAgIGlmIChyZWFkYWJsZSAmJiAhcmVhZGFibGVGaW5pc2hlZCAmJiBpc1JlYWRhYmxlTm9kZVN0cmVhbShzdHJlYW0sIHRydWUpKSB7XG4gICAgICBpZiAoIWlzUmVhZGFibGVGaW5pc2hlZChzdHJlYW0sIGZhbHNlKSkgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSlcbiAgICB9XG4gICAgaWYgKHdyaXRhYmxlICYmICF3cml0YWJsZUZpbmlzaGVkKSB7XG4gICAgICBpZiAoIWlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0sIGZhbHNlKSkgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSlcbiAgICB9XG4gICAgY2FsbGJhY2suY2FsbChzdHJlYW0pXG4gIH1cbiAgY29uc3Qgb25jbG9zZWQgPSAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICAgIGNvbnN0IGVycm9yZWQgPSBpc1dyaXRhYmxlRXJyb3JlZChzdHJlYW0pIHx8IGlzUmVhZGFibGVFcnJvcmVkKHN0cmVhbSlcbiAgICBpZiAoZXJyb3JlZCAmJiB0eXBlb2YgZXJyb3JlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIGVycm9yZWQpXG4gICAgfVxuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtKVxuICB9XG4gIGNvbnN0IG9ucmVxdWVzdCA9ICgpID0+IHtcbiAgICBzdHJlYW0ucmVxLm9uKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgfVxuICBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0ub24oJ2NvbXBsZXRlJywgb25maW5pc2gpXG4gICAgaWYgKCF3aWxsRW1pdENsb3NlKSB7XG4gICAgICBzdHJlYW0ub24oJ2Fib3J0Jywgb25jbG9zZSlcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5yZXEpIHtcbiAgICAgIG9ucmVxdWVzdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vbigncmVxdWVzdCcsIG9ucmVxdWVzdClcbiAgICB9XG4gIH0gZWxzZSBpZiAod3JpdGFibGUgJiYgIXdTdGF0ZSkge1xuICAgIC8vIGxlZ2FjeSBzdHJlYW1zXG4gICAgc3RyZWFtLm9uKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaClcbiAgICBzdHJlYW0ub24oJ2Nsb3NlJywgb25sZWdhY3lmaW5pc2gpXG4gIH1cblxuICAvLyBOb3QgYWxsIHN0cmVhbXMgd2lsbCBlbWl0ICdjbG9zZScgYWZ0ZXIgJ2Fib3J0ZWQnLlxuICBpZiAoIXdpbGxFbWl0Q2xvc2UgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICBzdHJlYW0ub24oJ2Fib3J0ZWQnLCBvbmNsb3NlKVxuICB9XG4gIHN0cmVhbS5vbignZW5kJywgb25lbmQpXG4gIHN0cmVhbS5vbignZmluaXNoJywgb25maW5pc2gpXG4gIGlmIChvcHRpb25zLmVycm9yICE9PSBmYWxzZSkge1xuICAgIHN0cmVhbS5vbignZXJyb3InLCBvbmVycm9yKVxuICB9XG4gIHN0cmVhbS5vbignY2xvc2UnLCBvbmNsb3NlKVxuICBpZiAoY2xvc2VkKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlKVxuICB9IGVsc2UgaWYgKFxuICAgICh3U3RhdGUgIT09IG51bGwgJiYgd1N0YXRlICE9PSB1bmRlZmluZWQgJiYgd1N0YXRlLmVycm9yRW1pdHRlZCkgfHxcbiAgICAoclN0YXRlICE9PSBudWxsICYmIHJTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHJTdGF0ZS5lcnJvckVtaXR0ZWQpXG4gICkge1xuICAgIGlmICghd2lsbEVtaXRDbG9zZSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlZClcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgIXJlYWRhYmxlICYmXG4gICAgKCF3aWxsRW1pdENsb3NlIHx8IGlzUmVhZGFibGUoc3RyZWFtKSkgJiZcbiAgICAod3JpdGFibGVGaW5pc2hlZCB8fCBpc1dyaXRhYmxlKHN0cmVhbSkgPT09IGZhbHNlKVxuICApIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2VkKVxuICB9IGVsc2UgaWYgKFxuICAgICF3cml0YWJsZSAmJlxuICAgICghd2lsbEVtaXRDbG9zZSB8fCBpc1dyaXRhYmxlKHN0cmVhbSkpICYmXG4gICAgKHJlYWRhYmxlRmluaXNoZWQgfHwgaXNSZWFkYWJsZShzdHJlYW0pID09PSBmYWxzZSlcbiAgKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlZClcbiAgfSBlbHNlIGlmIChyU3RhdGUgJiYgc3RyZWFtLnJlcSAmJiBzdHJlYW0uYWJvcnRlZCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2sob25jbG9zZWQpXG4gIH1cbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBjYWxsYmFjayA9IG5vcFxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignYWJvcnRlZCcsIG9uY2xvc2UpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjb21wbGV0ZScsIG9uZmluaXNoKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBvbmNsb3NlKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigncmVxdWVzdCcsIG9ucmVxdWVzdClcbiAgICBpZiAoc3RyZWFtLnJlcSkgc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25sZWdhY3lmaW5pc2gpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKVxuICB9XG4gIGlmIChvcHRpb25zLnNpZ25hbCAmJiAhY2xvc2VkKSB7XG4gICAgY29uc3QgYWJvcnQgPSAoKSA9PiB7XG4gICAgICAvLyBLZWVwIGl0IGJlY2F1c2UgY2xlYW51cCByZW1vdmVzIGl0LlxuICAgICAgY29uc3QgZW5kQ2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgY2xlYW51cCgpXG4gICAgICBlbmRDYWxsYmFjay5jYWxsKFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGNhdXNlOiBvcHRpb25zLnNpZ25hbC5yZWFzb25cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soYWJvcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEFib3J0TGlzdGVuZXIgPSBhZGRBYm9ydExpc3RlbmVyIHx8IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpLmFkZEFib3J0TGlzdGVuZXJcbiAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBhZGRBYm9ydExpc3RlbmVyKG9wdGlvbnMuc2lnbmFsLCBhYm9ydClcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgY2FsbGJhY2sgPSBvbmNlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRpc3Bvc2FibGVbU3ltYm9sRGlzcG9zZV0oKVxuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmFwcGx5KHN0cmVhbSwgYXJncylcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIHJldHVybiBjbGVhbnVwXG59XG5mdW5jdGlvbiBlb3NXZWIoc3RyZWFtLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBsZXQgaXNBYm9ydGVkID0gZmFsc2VcbiAgbGV0IGFib3J0ID0gbm9wXG4gIGlmIChvcHRpb25zLnNpZ25hbCkge1xuICAgIGFib3J0ID0gKCkgPT4ge1xuICAgICAgaXNBYm9ydGVkID0gdHJ1ZVxuICAgICAgY2FsbGJhY2suY2FsbChcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICBjYXVzZTogb3B0aW9ucy5zaWduYWwucmVhc29uXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGFib3J0KVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRBYm9ydExpc3RlbmVyID0gYWRkQWJvcnRMaXN0ZW5lciB8fCByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5hZGRBYm9ydExpc3RlbmVyXG4gICAgICBjb25zdCBkaXNwb3NhYmxlID0gYWRkQWJvcnRMaXN0ZW5lcihvcHRpb25zLnNpZ25hbCwgYWJvcnQpXG4gICAgICBjb25zdCBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gb25jZSgoLi4uYXJncykgPT4ge1xuICAgICAgICBkaXNwb3NhYmxlW1N5bWJvbERpc3Bvc2VdKClcbiAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5hcHBseShzdHJlYW0sIGFyZ3MpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlckZuID0gKC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoIWlzQWJvcnRlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiBjYWxsYmFjay5hcHBseShzdHJlYW0sIGFyZ3MpKVxuICAgIH1cbiAgfVxuICBQcm9taXNlUHJvdG90eXBlVGhlbihzdHJlYW1ba0lzQ2xvc2VkUHJvbWlzZV0ucHJvbWlzZSwgcmVzb2x2ZXJGbiwgcmVzb2x2ZXJGbilcbiAgcmV0dXJuIG5vcFxufVxuZnVuY3Rpb24gZmluaXNoZWQoc3RyZWFtLCBvcHRzKSB7XG4gIHZhciBfb3B0c1xuICBsZXQgYXV0b0NsZWFudXAgPSBmYWxzZVxuICBpZiAob3B0cyA9PT0gbnVsbCkge1xuICAgIG9wdHMgPSBrRW1wdHlPYmplY3RcbiAgfVxuICBpZiAoKF9vcHRzID0gb3B0cykgIT09IG51bGwgJiYgX29wdHMgIT09IHVuZGVmaW5lZCAmJiBfb3B0cy5jbGVhbnVwKSB7XG4gICAgdmFsaWRhdGVCb29sZWFuKG9wdHMuY2xlYW51cCwgJ2NsZWFudXAnKVxuICAgIGF1dG9DbGVhbnVwID0gb3B0cy5jbGVhbnVwXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gZW9zKHN0cmVhbSwgb3B0cywgKGVycikgPT4ge1xuICAgICAgaWYgKGF1dG9DbGVhbnVwKSB7XG4gICAgICAgIGNsZWFudXAoKVxuICAgICAgfVxuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cbm1vZHVsZS5leHBvcnRzID0gZW9zXG5tb2R1bGUuZXhwb3J0cy5maW5pc2hlZCA9IGZpbmlzaGVkXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cblxuY29uc3Qge1xuICBhZ2dyZWdhdGVUd29FcnJvcnMsXG4gIGNvZGVzOiB7IEVSUl9NVUxUSVBMRV9DQUxMQkFDSyB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyBTeW1ib2wgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBrSXNEZXN0cm95ZWQsIGlzRGVzdHJveWVkLCBpc0ZpbmlzaGVkLCBpc1NlcnZlclJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3Qga0Rlc3Ryb3kgPSBTeW1ib2woJ2tEZXN0cm95JylcbmNvbnN0IGtDb25zdHJ1Y3QgPSBTeW1ib2woJ2tDb25zdHJ1Y3QnKVxuZnVuY3Rpb24gY2hlY2tFcnJvcihlcnIsIHcsIHIpIHtcbiAgaWYgKGVycikge1xuICAgIC8vIEF2b2lkIFY4IGxlYWssIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0MTAzI2lzc3VlY29tbWVudC02NTIwMDIzNjRcbiAgICBlcnIuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICh3ICYmICF3LmVycm9yZWQpIHtcbiAgICAgIHcuZXJyb3JlZCA9IGVyclxuICAgIH1cbiAgICBpZiAociAmJiAhci5lcnJvcmVkKSB7XG4gICAgICByLmVycm9yZWQgPSBlcnJcbiAgICB9XG4gIH1cbn1cblxuLy8gQmFja3dhcmRzIGNvbXBhdC4gY2IoKSBpcyB1bmRvY3VtZW50ZWQgYW5kIHVudXNlZCBpbiBjb3JlIGJ1dFxuLy8gdW5mb3J0dW5hdGVseSBtaWdodCBiZSB1c2VkIGJ5IG1vZHVsZXMuXG5mdW5jdGlvbiBkZXN0cm95KGVyciwgY2IpIHtcbiAgY29uc3QgciA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgLy8gV2l0aCBkdXBsZXggc3RyZWFtcyB3ZSB1c2UgdGhlIHdyaXRhYmxlIHNpZGUgZm9yIHN0YXRlLlxuICBjb25zdCBzID0gdyB8fCByXG4gIGlmICgodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5kZXN0cm95ZWQpIHx8IChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmRlc3Ryb3llZCkpIHtcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYigpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBXZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG4gIGNoZWNrRXJyb3IoZXJyLCB3LCByKVxuICBpZiAodykge1xuICAgIHcuZGVzdHJveWVkID0gdHJ1ZVxuICB9XG4gIGlmIChyKSB7XG4gICAgci5kZXN0cm95ZWQgPSB0cnVlXG4gIH1cblxuICAvLyBJZiBzdGlsbCBjb25zdHJ1Y3RpbmcgdGhlbiBkZWZlciBjYWxsaW5nIF9kZXN0cm95LlxuICBpZiAoIXMuY29uc3RydWN0ZWQpIHtcbiAgICB0aGlzLm9uY2Uoa0Rlc3Ryb3ksIGZ1bmN0aW9uIChlcikge1xuICAgICAgX2Rlc3Ryb3kodGhpcywgYWdncmVnYXRlVHdvRXJyb3JzKGVyLCBlcnIpLCBjYilcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIF9kZXN0cm95KHRoaXMsIGVyciwgY2IpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIF9kZXN0cm95KHNlbGYsIGVyciwgY2IpIHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlXG4gIGZ1bmN0aW9uIG9uRGVzdHJveShlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIGNvbnN0IHIgPSBzZWxmLl9yZWFkYWJsZVN0YXRlXG4gICAgY29uc3QgdyA9IHNlbGYuX3dyaXRhYmxlU3RhdGVcbiAgICBjaGVja0Vycm9yKGVyciwgdywgcilcbiAgICBpZiAodykge1xuICAgICAgdy5jbG9zZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChyKSB7XG4gICAgICByLmNsb3NlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IoZXJyKVxuICAgIH1cbiAgICBpZiAoZXJyKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckNsb3NlTlQsIHNlbGYsIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgc2VsZilcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICBzZWxmLl9kZXN0cm95KGVyciB8fCBudWxsLCBvbkRlc3Ryb3kpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRGVzdHJveShlcnIpXG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRFcnJvckNsb3NlTlQoc2VsZiwgZXJyKSB7XG4gIGVtaXRFcnJvck5UKHNlbGYsIGVycilcbiAgZW1pdENsb3NlTlQoc2VsZilcbn1cbmZ1bmN0aW9uIGVtaXRDbG9zZU5UKHNlbGYpIHtcbiAgY29uc3QgciA9IHNlbGYuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHNlbGYuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHcpIHtcbiAgICB3LmNsb3NlRW1pdHRlZCA9IHRydWVcbiAgfVxuICBpZiAocikge1xuICAgIHIuY2xvc2VFbWl0dGVkID0gdHJ1ZVxuICB9XG4gIGlmICgodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5lbWl0Q2xvc2UpIHx8IChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmVtaXRDbG9zZSkpIHtcbiAgICBzZWxmLmVtaXQoJ2Nsb3NlJylcbiAgfVxufVxuZnVuY3Rpb24gZW1pdEVycm9yTlQoc2VsZiwgZXJyKSB7XG4gIGNvbnN0IHIgPSBzZWxmLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHcgPSBzZWxmLl93cml0YWJsZVN0YXRlXG4gIGlmICgodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5lcnJvckVtaXR0ZWQpIHx8IChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmVycm9yRW1pdHRlZCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodykge1xuICAgIHcuZXJyb3JFbWl0dGVkID0gdHJ1ZVxuICB9XG4gIGlmIChyKSB7XG4gICAgci5lcnJvckVtaXR0ZWQgPSB0cnVlXG4gIH1cbiAgc2VsZi5lbWl0KCdlcnJvcicsIGVycilcbn1cbmZ1bmN0aW9uIHVuZGVzdHJveSgpIHtcbiAgY29uc3QgciA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHIpIHtcbiAgICByLmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIHIuY2xvc2VkID0gZmFsc2VcbiAgICByLmNsb3NlRW1pdHRlZCA9IGZhbHNlXG4gICAgci5kZXN0cm95ZWQgPSBmYWxzZVxuICAgIHIuZXJyb3JlZCA9IG51bGxcbiAgICByLmVycm9yRW1pdHRlZCA9IGZhbHNlXG4gICAgci5yZWFkaW5nID0gZmFsc2VcbiAgICByLmVuZGVkID0gci5yZWFkYWJsZSA9PT0gZmFsc2VcbiAgICByLmVuZEVtaXR0ZWQgPSByLnJlYWRhYmxlID09PSBmYWxzZVxuICB9XG4gIGlmICh3KSB7XG4gICAgdy5jb25zdHJ1Y3RlZCA9IHRydWVcbiAgICB3LmRlc3Ryb3llZCA9IGZhbHNlXG4gICAgdy5jbG9zZWQgPSBmYWxzZVxuICAgIHcuY2xvc2VFbWl0dGVkID0gZmFsc2VcbiAgICB3LmVycm9yZWQgPSBudWxsXG4gICAgdy5lcnJvckVtaXR0ZWQgPSBmYWxzZVxuICAgIHcuZmluYWxDYWxsZWQgPSBmYWxzZVxuICAgIHcucHJlZmluaXNoZWQgPSBmYWxzZVxuICAgIHcuZW5kZWQgPSB3LndyaXRhYmxlID09PSBmYWxzZVxuICAgIHcuZW5kaW5nID0gdy53cml0YWJsZSA9PT0gZmFsc2VcbiAgICB3LmZpbmlzaGVkID0gdy53cml0YWJsZSA9PT0gZmFsc2VcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIsIHN5bmMpIHtcbiAgLy8gV2UgaGF2ZSB0ZXN0cyB0aGF0IHJlbHkgb24gZXJyb3JzIGJlaW5nIGVtaXR0ZWRcbiAgLy8gaW4gdGhlIHNhbWUgdGljaywgc28gY2hhbmdpbmcgdGhpcyBpcyBzZW12ZXIgbWFqb3IuXG4gIC8vIEZvciBub3cgd2hlbiB5b3Ugb3B0LWluIHRvIGF1dG9EZXN0cm95IHdlIGFsbG93XG4gIC8vIHRoZSBlcnJvciB0byBiZSBlbWl0dGVkIG5leHRUaWNrLiBJbiBhIGZ1dHVyZVxuICAvLyBzZW12ZXIgbWFqb3IgdXBkYXRlIHdlIHNob3VsZCBjaGFuZ2UgdGhlIGRlZmF1bHQgdG8gdGhpcy5cblxuICBjb25zdCByID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHcgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmRlc3Ryb3llZCkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZGVzdHJveWVkKSkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgaWYgKChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmF1dG9EZXN0cm95KSB8fCAodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5hdXRvRGVzdHJveSkpXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICBlbHNlIGlmIChlcnIpIHtcbiAgICAvLyBBdm9pZCBWOCBsZWFrLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zNDEwMyNpc3N1ZWNvbW1lbnQtNjUyMDAyMzY0XG4gICAgZXJyLnN0YWNrIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cbiAgICBpZiAodyAmJiAhdy5lcnJvcmVkKSB7XG4gICAgICB3LmVycm9yZWQgPSBlcnJcbiAgICB9XG4gICAgaWYgKHIgJiYgIXIuZXJyb3JlZCkge1xuICAgICAgci5lcnJvcmVkID0gZXJyXG4gICAgfVxuICAgIGlmIChzeW5jKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCBzdHJlYW0sIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdEVycm9yTlQoc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjb25zdHJ1Y3Qoc3RyZWFtLCBjYikge1xuICBpZiAodHlwZW9mIHN0cmVhbS5fY29uc3RydWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgciA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmIChyKSB7XG4gICAgci5jb25zdHJ1Y3RlZCA9IGZhbHNlXG4gIH1cbiAgaWYgKHcpIHtcbiAgICB3LmNvbnN0cnVjdGVkID0gZmFsc2VcbiAgfVxuICBzdHJlYW0ub25jZShrQ29uc3RydWN0LCBjYilcbiAgaWYgKHN0cmVhbS5saXN0ZW5lckNvdW50KGtDb25zdHJ1Y3QpID4gMSkge1xuICAgIC8vIER1cGxleFxuICAgIHJldHVyblxuICB9XG4gIHByb2Nlc3MubmV4dFRpY2soY29uc3RydWN0TlQsIHN0cmVhbSlcbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdE5UKHN0cmVhbSkge1xuICBsZXQgY2FsbGVkID0gZmFsc2VcbiAgZnVuY3Rpb24gb25Db25zdHJ1Y3QoZXJyKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIgIT09IG51bGwgJiYgZXJyICE9PSB1bmRlZmluZWQgPyBlcnIgOiBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIGNvbnN0IHIgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgICBjb25zdCB3ID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gICAgY29uc3QgcyA9IHcgfHwgclxuICAgIGlmIChyKSB7XG4gICAgICByLmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodykge1xuICAgICAgdy5jb25zdHJ1Y3RlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKHMuZGVzdHJveWVkKSB7XG4gICAgICBzdHJlYW0uZW1pdChrRGVzdHJveSwgZXJyKVxuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q29uc3RydWN0TlQsIHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICBzdHJlYW0uX2NvbnN0cnVjdCgoZXJyKSA9PiB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKG9uQ29uc3RydWN0LCBlcnIpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbkNvbnN0cnVjdCwgZXJyKVxuICB9XG59XG5mdW5jdGlvbiBlbWl0Q29uc3RydWN0TlQoc3RyZWFtKSB7XG4gIHN0cmVhbS5lbWl0KGtDb25zdHJ1Y3QpXG59XG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiAoc3RyZWFtID09PSBudWxsIHx8IHN0cmVhbSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc3RyZWFtLnNldEhlYWRlcikgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJ1xufVxuZnVuY3Rpb24gZW1pdENsb3NlTGVnYWN5KHN0cmVhbSkge1xuICBzdHJlYW0uZW1pdCgnY2xvc2UnKVxufVxuZnVuY3Rpb24gZW1pdEVycm9yQ2xvc2VMZWdhY3koc3RyZWFtLCBlcnIpIHtcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKVxuICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZUxlZ2FjeSwgc3RyZWFtKVxufVxuXG4vLyBOb3JtYWxpemUgZGVzdHJveSBmb3IgbGVnYWN5LlxuZnVuY3Rpb24gZGVzdHJveWVyKHN0cmVhbSwgZXJyKSB7XG4gIGlmICghc3RyZWFtIHx8IGlzRGVzdHJveWVkKHN0cmVhbSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoIWVyciAmJiAhaXNGaW5pc2hlZChzdHJlYW0pKSB7XG4gICAgZXJyID0gbmV3IEFib3J0RXJyb3IoKVxuICB9XG5cbiAgLy8gVE9ETzogUmVtb3ZlIGlzUmVxdWVzdCBicmFuY2hlcy5cbiAgaWYgKGlzU2VydmVyUmVxdWVzdChzdHJlYW0pKSB7XG4gICAgc3RyZWFtLnNvY2tldCA9IG51bGxcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH0gZWxzZSBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0uYWJvcnQoKVxuICB9IGVsc2UgaWYgKGlzUmVxdWVzdChzdHJlYW0ucmVxKSkge1xuICAgIHN0cmVhbS5yZXEuYWJvcnQoKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc3RyZWFtLmNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVE9ETzogRG9uJ3QgbG9zZSBlcnI/XG4gICAgc3RyZWFtLmNsb3NlKClcbiAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckNsb3NlTGVnYWN5LCBzdHJlYW0sIGVycilcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZUxlZ2FjeSwgc3RyZWFtKVxuICB9XG4gIGlmICghc3RyZWFtLmRlc3Ryb3llZCkge1xuICAgIHN0cmVhbVtrSXNEZXN0cm95ZWRdID0gdHJ1ZVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29uc3RydWN0LFxuICBkZXN0cm95ZXIsXG4gIGRlc3Ryb3ksXG4gIHVuZGVzdHJveSxcbiAgZXJyb3JPckRlc3Ryb3lcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQXJyYXlJc0FycmF5LCBPYmplY3RTZXRQcm90b3R5cGVPZiB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7IEV2ZW50RW1pdHRlcjogRUUgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5mdW5jdGlvbiBTdHJlYW0ob3B0cykge1xuICBFRS5jYWxsKHRoaXMsIG9wdHMpXG59XG5PYmplY3RTZXRQcm90b3R5cGVPZihTdHJlYW0ucHJvdG90eXBlLCBFRS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihTdHJlYW0sIEVFKVxuU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc291cmNlID0gdGhpc1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBpZiAoZGVzdC53cml0YWJsZSAmJiBkZXN0LndyaXRlKGNodW5rKSA9PT0gZmFsc2UgJiYgc291cmNlLnBhdXNlKSB7XG4gICAgICBzb3VyY2UucGF1c2UoKVxuICAgIH1cbiAgfVxuICBzb3VyY2Uub24oJ2RhdGEnLCBvbmRhdGEpXG4gIGZ1bmN0aW9uIG9uZHJhaW4oKSB7XG4gICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7XG4gICAgICBzb3VyY2UucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKVxuXG4gIC8vIElmIHRoZSAnZW5kJyBvcHRpb24gaXMgbm90IHN1cHBsaWVkLCBkZXN0LmVuZCgpIHdpbGwgYmUgY2FsbGVkIHdoZW5cbiAgLy8gc291cmNlIGdldHMgdGhlICdlbmQnIG9yICdjbG9zZScgZXZlbnRzLiAgT25seSBkZXN0LmVuZCgpIG9uY2UuXG4gIGlmICghZGVzdC5faXNTdGRpbyAmJiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5lbmQgIT09IGZhbHNlKSkge1xuICAgIHNvdXJjZS5vbignZW5kJywgb25lbmQpXG4gICAgc291cmNlLm9uKCdjbG9zZScsIG9uY2xvc2UpXG4gIH1cbiAgbGV0IGRpZE9uRW5kID0gZmFsc2VcbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm5cbiAgICBkaWRPbkVuZCA9IHRydWVcbiAgICBkZXN0LmVuZCgpXG4gIH1cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVyblxuICAgIGRpZE9uRW5kID0gdHJ1ZVxuICAgIGlmICh0eXBlb2YgZGVzdC5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSBkZXN0LmRlc3Ryb3koKVxuICB9XG5cbiAgLy8gRG9uJ3QgbGVhdmUgZGFuZ2xpbmcgcGlwZXMgd2hlbiB0aGVyZSBhcmUgZXJyb3JzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgY2xlYW51cCgpXG4gICAgaWYgKEVFLmxpc3RlbmVyQ291bnQodGhpcywgJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcilcbiAgICB9XG4gIH1cbiAgcHJlcGVuZExpc3RlbmVyKHNvdXJjZSwgJ2Vycm9yJywgb25lcnJvcilcbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpXG5cbiAgLy8gUmVtb3ZlIGFsbCB0aGUgZXZlbnQgbGlzdGVuZXJzIHRoYXQgd2VyZSBhZGRlZC5cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKVxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xlYW51cClcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cClcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIGNsZWFudXApXG4gIH1cbiAgc291cmNlLm9uKCdlbmQnLCBjbGVhbnVwKVxuICBzb3VyY2Uub24oJ2Nsb3NlJywgY2xlYW51cClcbiAgZGVzdC5vbignY2xvc2UnLCBjbGVhbnVwKVxuICBkZXN0LmVtaXQoJ3BpcGUnLCBzb3VyY2UpXG5cbiAgLy8gQWxsb3cgZm9yIHVuaXgtbGlrZSB1c2FnZTogQS5waXBlKEIpLnBpcGUoQylcbiAgcmV0dXJuIGRlc3Rcbn1cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pXG5cbiAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueVxuICAvLyB1c2VybGFuZCBvbmVzLiAgTkVWRVIgRE8gVEhJUy4gVGhpcyBpcyBoZXJlIG9ubHkgYmVjYXVzZSB0aGlzIGNvZGUgbmVlZHNcbiAgLy8gdG8gY29udGludWUgdG8gd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIE5vZGUuanMgdGhhdCBkbyBub3QgaW5jbHVkZVxuICAvLyB0aGUgcHJlcGVuZExpc3RlbmVyKCkgbWV0aG9kLiBUaGUgZ29hbCBpcyB0byBldmVudHVhbGx5IHJlbW92ZSB0aGlzIGhhY2suXG4gIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbZXZlbnRdKSBlbWl0dGVyLm9uKGV2ZW50LCBmbilcbiAgZWxzZSBpZiAoQXJyYXlJc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pXG4gIGVsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBTdHJlYW0sXG4gIHByZXBlbmRMaXN0ZW5lclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBTeW1ib2xEaXNwb3NlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgQWJvcnRFcnJvciwgY29kZXMgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgaXNOb2RlU3RyZWFtLCBpc1dlYlN0cmVhbSwga0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCB7IEVSUl9JTlZBTElEX0FSR19UWVBFIH0gPSBjb2Rlc1xubGV0IGFkZEFib3J0TGlzdGVuZXJcblxuLy8gVGhpcyBtZXRob2QgaXMgaW5saW5lZCBoZXJlIGZvciByZWFkYWJsZS1zdHJlYW1cbi8vIEl0IGFsc28gZG9lcyBub3QgYWxsb3cgZm9yIHNpZ25hbCB0byBub3QgZXhpc3Qgb24gdGhlIHN0cmVhbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzYwNjEjZGlzY3Vzc2lvbl9yNTMzNzE4MDI5XG5jb25zdCB2YWxpZGF0ZUFib3J0U2lnbmFsID0gKHNpZ25hbCwgbmFtZSkgPT4ge1xuICBpZiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsID0gZnVuY3Rpb24gYWRkQWJvcnRTaWduYWwoc2lnbmFsLCBzdHJlYW0pIHtcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsICdzaWduYWwnKVxuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pICYmICFpc1dlYlN0cmVhbShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdzdHJlYW0nLCBbJ1JlYWRhYmxlU3RyZWFtJywgJ1dyaXRhYmxlU3RyZWFtJywgJ1N0cmVhbSddLCBzdHJlYW0pXG4gIH1cbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZShzaWduYWwsIHN0cmVhbSlcbn1cbm1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZSA9IGZ1bmN0aW9uIChzaWduYWwsIHN0cmVhbSkge1xuICBpZiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkge1xuICAgIHJldHVybiBzdHJlYW1cbiAgfVxuICBjb25zdCBvbkFib3J0ID0gaXNOb2RlU3RyZWFtKHN0cmVhbSlcbiAgICA/ICgpID0+IHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koXG4gICAgICAgICAgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBjYXVzZTogc2lnbmFsLnJlYXNvblxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICA6ICgpID0+IHtcbiAgICAgICAgc3RyZWFtW2tDb250cm9sbGVyRXJyb3JGdW5jdGlvbl0oXG4gICAgICAgICAgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBjYXVzZTogc2lnbmFsLnJlYXNvblxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgb25BYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgYWRkQWJvcnRMaXN0ZW5lciA9IGFkZEFib3J0TGlzdGVuZXIgfHwgcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuYWRkQWJvcnRMaXN0ZW5lclxuICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBhZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgb25BYm9ydClcbiAgICBlb3Moc3RyZWFtLCBkaXNwb3NhYmxlW1N5bWJvbERpc3Bvc2VdKVxuICB9XG4gIHJldHVybiBzdHJlYW1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgU3RyaW5nUHJvdG90eXBlU2xpY2UsIFN5bWJvbEl0ZXJhdG9yLCBUeXBlZEFycmF5UHJvdG90eXBlU2V0LCBVaW50OEFycmF5IH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpbnNwZWN0IH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBCdWZmZXJMaXN0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gbnVsbFxuICAgIHRoaXMudGFpbCA9IG51bGxcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgfVxuICBwdXNoKHYpIHtcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgIGRhdGE6IHYsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnlcbiAgICBlbHNlIHRoaXMuaGVhZCA9IGVudHJ5XG4gICAgdGhpcy50YWlsID0gZW50cnlcbiAgICArK3RoaXMubGVuZ3RoXG4gIH1cbiAgdW5zaGlmdCh2KSB7XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICBkYXRhOiB2LFxuICAgICAgbmV4dDogdGhpcy5oZWFkXG4gICAgfVxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnlcbiAgICB0aGlzLmhlYWQgPSBlbnRyeVxuICAgICsrdGhpcy5sZW5ndGhcbiAgfVxuICBzaGlmdCgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVyblxuICAgIGNvbnN0IHJldCA9IHRoaXMuaGVhZC5kYXRhXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dFxuICAgIC0tdGhpcy5sZW5ndGhcbiAgICByZXR1cm4gcmV0XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbFxuICAgIHRoaXMubGVuZ3RoID0gMFxuICB9XG4gIGpvaW4ocykge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgcmV0ID0gJycgKyBwLmRhdGFcbiAgICB3aGlsZSAoKHAgPSBwLm5leHQpICE9PSBudWxsKSByZXQgKz0gcyArIHAuZGF0YVxuICAgIHJldHVybiByZXRcbiAgfVxuICBjb25jYXQobikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICAgIGNvbnN0IHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuID4+PiAwKVxuICAgIGxldCBwID0gdGhpcy5oZWFkXG4gICAgbGV0IGkgPSAwXG4gICAgd2hpbGUgKHApIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGVTZXQocmV0LCBwLmRhdGEsIGkpXG4gICAgICBpICs9IHAuZGF0YS5sZW5ndGhcbiAgICAgIHAgPSBwLm5leHRcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIG9yIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgY29uc3VtZShuLCBoYXNTdHJpbmdzKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuaGVhZC5kYXRhXG4gICAgaWYgKG4gPCBkYXRhLmxlbmd0aCkge1xuICAgICAgLy8gYHNsaWNlYCBpcyB0aGUgc2FtZSBmb3IgYnVmZmVycyBhbmQgc3RyaW5ncy5cbiAgICAgIGNvbnN0IHNsaWNlID0gZGF0YS5zbGljZSgwLCBuKVxuICAgICAgdGhpcy5oZWFkLmRhdGEgPSBkYXRhLnNsaWNlKG4pXG4gICAgICByZXR1cm4gc2xpY2VcbiAgICB9XG4gICAgaWYgKG4gPT09IGRhdGEubGVuZ3RoKSB7XG4gICAgICAvLyBGaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2guXG4gICAgICByZXR1cm4gdGhpcy5zaGlmdCgpXG4gICAgfVxuICAgIC8vIFJlc3VsdCBzcGFucyBtb3JlIHRoYW4gb25lIGJ1ZmZlci5cbiAgICByZXR1cm4gaGFzU3RyaW5ncyA/IHRoaXMuX2dldFN0cmluZyhuKSA6IHRoaXMuX2dldEJ1ZmZlcihuKVxuICB9XG4gIGZpcnN0KCkge1xuICAgIHJldHVybiB0aGlzLmhlYWQuZGF0YVxuICB9XG4gICpbU3ltYm9sSXRlcmF0b3JdKCkge1xuICAgIGZvciAobGV0IHAgPSB0aGlzLmhlYWQ7IHA7IHAgPSBwLm5leHQpIHtcbiAgICAgIHlpZWxkIHAuZGF0YVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIF9nZXRTdHJpbmcobikge1xuICAgIGxldCByZXQgPSAnJ1xuICAgIGxldCBwID0gdGhpcy5oZWFkXG4gICAgbGV0IGMgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3Qgc3RyID0gcC5kYXRhXG4gICAgICBpZiAobiA+IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0ICs9IHN0clxuICAgICAgICBuIC09IHN0ci5sZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0ICs9IHN0clxuICAgICAgICAgICsrY1xuICAgICAgICAgIGlmIChwLm5leHQpIHRoaXMuaGVhZCA9IHAubmV4dFxuICAgICAgICAgIGVsc2UgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCArPSBTdHJpbmdQcm90b3R5cGVTbGljZShzdHIsIDAsIG4pXG4gICAgICAgICAgdGhpcy5oZWFkID0gcFxuICAgICAgICAgIHAuZGF0YSA9IFN0cmluZ1Byb3RvdHlwZVNsaWNlKHN0ciwgbilcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgKytjXG4gICAgfSB3aGlsZSAoKHAgPSBwLm5leHQpICE9PSBudWxsKVxuICAgIHRoaXMubGVuZ3RoIC09IGNcbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgX2dldEJ1ZmZlcihuKSB7XG4gICAgY29uc3QgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgY29uc3QgcmV0TGVuID0gblxuICAgIGxldCBwID0gdGhpcy5oZWFkXG4gICAgbGV0IGMgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYnVmID0gcC5kYXRhXG4gICAgICBpZiAobiA+IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIGJ1ZiwgcmV0TGVuIC0gbilcbiAgICAgICAgbiAtPSBidWYubGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGVTZXQocmV0LCBidWYsIHJldExlbiAtIG4pXG4gICAgICAgICAgKytjXG4gICAgICAgICAgaWYgKHAubmV4dCkgdGhpcy5oZWFkID0gcC5uZXh0XG4gICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBuKSwgcmV0TGVuIC0gbilcbiAgICAgICAgICB0aGlzLmhlYWQgPSBwXG4gICAgICAgICAgcC5kYXRhID0gYnVmLnNsaWNlKG4pXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgICsrY1xuICAgIH0gd2hpbGUgKChwID0gcC5uZXh0KSAhPT0gbnVsbClcbiAgICB0aGlzLmxlbmd0aCAtPSBjXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRoZSBsaW5rZWQgbGlzdCBvbmx5IHNob3dzIHRoZSBtaW5pbWFsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi5cbiAgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldKF8sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5zcGVjdCh0aGlzLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgLy8gT25seSBpbnNwZWN0IG9uZSBsZXZlbC5cbiAgICAgIGRlcHRoOiAwLFxuICAgICAgLy8gSXQgc2hvdWxkIG5vdCByZWN1cnNlLlxuICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2VcbiAgICB9KVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE1hdGhGbG9vciwgTnVtYmVySXNJbnRlZ2VyIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgdmFsaWRhdGVJbnRlZ2VyIH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IHsgRVJSX0lOVkFMSURfQVJHX1ZBTFVFIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpLmNvZGVzXG5sZXQgZGVmYXVsdEhpZ2hXYXRlck1hcmtCeXRlcyA9IDE2ICogMTAyNFxubGV0IGRlZmF1bHRIaWdoV2F0ZXJNYXJrT2JqZWN0TW9kZSA9IDE2XG5mdW5jdGlvbiBoaWdoV2F0ZXJNYXJrRnJvbShvcHRpb25zLCBpc0R1cGxleCwgZHVwbGV4S2V5KSB7XG4gIHJldHVybiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgIT0gbnVsbCA/IG9wdGlvbnMuaGlnaFdhdGVyTWFyayA6IGlzRHVwbGV4ID8gb3B0aW9uc1tkdXBsZXhLZXldIDogbnVsbFxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsob2JqZWN0TW9kZSkge1xuICByZXR1cm4gb2JqZWN0TW9kZSA/IGRlZmF1bHRIaWdoV2F0ZXJNYXJrT2JqZWN0TW9kZSA6IGRlZmF1bHRIaWdoV2F0ZXJNYXJrQnl0ZXNcbn1cbmZ1bmN0aW9uIHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrKG9iamVjdE1vZGUsIHZhbHVlKSB7XG4gIHZhbGlkYXRlSW50ZWdlcih2YWx1ZSwgJ3ZhbHVlJywgMClcbiAgaWYgKG9iamVjdE1vZGUpIHtcbiAgICBkZWZhdWx0SGlnaFdhdGVyTWFya09iamVjdE1vZGUgPSB2YWx1ZVxuICB9IGVsc2Uge1xuICAgIGRlZmF1bHRIaWdoV2F0ZXJNYXJrQnl0ZXMgPSB2YWx1ZVxuICB9XG59XG5mdW5jdGlvbiBnZXRIaWdoV2F0ZXJNYXJrKHN0YXRlLCBvcHRpb25zLCBkdXBsZXhLZXksIGlzRHVwbGV4KSB7XG4gIGNvbnN0IGh3bSA9IGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpXG4gIGlmIChod20gIT0gbnVsbCkge1xuICAgIGlmICghTnVtYmVySXNJbnRlZ2VyKGh3bSkgfHwgaHdtIDwgMCkge1xuICAgICAgY29uc3QgbmFtZSA9IGlzRHVwbGV4ID8gYG9wdGlvbnMuJHtkdXBsZXhLZXl9YCA6ICdvcHRpb25zLmhpZ2hXYXRlck1hcmsnXG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIGh3bSlcbiAgICB9XG4gICAgcmV0dXJuIE1hdGhGbG9vcihod20pXG4gIH1cblxuICAvLyBEZWZhdWx0IHZhbHVlXG4gIHJldHVybiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhzdGF0ZS5vYmplY3RNb2RlKVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEhpZ2hXYXRlck1hcmssXG4gIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrLFxuICBzZXREZWZhdWx0SGlnaFdhdGVyTWFya1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG5cbmNvbnN0IHsgUHJvbWlzZVByb3RvdHlwZVRoZW4sIFN5bWJvbEFzeW5jSXRlcmF0b3IsIFN5bWJvbEl0ZXJhdG9yIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBFUlJfSU5WQUxJRF9BUkdfVFlQRSwgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKS5jb2Rlc1xuZnVuY3Rpb24gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpIHtcbiAgbGV0IGl0ZXJhdG9yXG4gIGlmICh0eXBlb2YgaXRlcmFibGUgPT09ICdzdHJpbmcnIHx8IGl0ZXJhYmxlIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7XG4gICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlYWQoKSB7XG4gICAgICAgIHRoaXMucHVzaChpdGVyYWJsZSlcbiAgICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBsZXQgaXNBc3luY1xuICBpZiAoaXRlcmFibGUgJiYgaXRlcmFibGVbU3ltYm9sQXN5bmNJdGVyYXRvcl0pIHtcbiAgICBpc0FzeW5jID0gdHJ1ZVxuICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sQXN5bmNJdGVyYXRvcl0oKVxuICB9IGVsc2UgaWYgKGl0ZXJhYmxlICYmIGl0ZXJhYmxlW1N5bWJvbEl0ZXJhdG9yXSkge1xuICAgIGlzQXN5bmMgPSBmYWxzZVxuICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sSXRlcmF0b3JdKClcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2l0ZXJhYmxlJywgWydJdGVyYWJsZSddLCBpdGVyYWJsZSlcbiAgfVxuICBjb25zdCByZWFkYWJsZSA9IG5ldyBSZWFkYWJsZSh7XG4gICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICBoaWdoV2F0ZXJNYXJrOiAxLFxuICAgIC8vIFRPRE8ocm9uYWcpOiBXaGF0IG9wdGlvbnMgc2hvdWxkIGJlIGFsbG93ZWQ/XG4gICAgLi4ub3B0c1xuICB9KVxuXG4gIC8vIEZsYWcgdG8gcHJvdGVjdCBhZ2FpbnN0IF9yZWFkXG4gIC8vIGJlaW5nIGNhbGxlZCBiZWZvcmUgbGFzdCBpdGVyYXRpb24gY29tcGxldGlvbi5cbiAgbGV0IHJlYWRpbmcgPSBmYWxzZVxuICByZWFkYWJsZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXJlYWRpbmcpIHtcbiAgICAgIHJlYWRpbmcgPSB0cnVlXG4gICAgICBuZXh0KClcbiAgICB9XG4gIH1cbiAgcmVhZGFibGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyb3IsIGNiKSB7XG4gICAgUHJvbWlzZVByb3RvdHlwZVRoZW4oXG4gICAgICBjbG9zZShlcnJvciksXG4gICAgICAoKSA9PiBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnJvciksXG4gICAgICAvLyBuZXh0VGljayBpcyBoZXJlIGluIGNhc2UgY2IgdGhyb3dzXG4gICAgICAoZSkgPT4gcHJvY2Vzcy5uZXh0VGljayhjYiwgZSB8fCBlcnJvcilcbiAgICApXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gY2xvc2UoZXJyb3IpIHtcbiAgICBjb25zdCBoYWRFcnJvciA9IGVycm9yICE9PSB1bmRlZmluZWQgJiYgZXJyb3IgIT09IG51bGxcbiAgICBjb25zdCBoYXNUaHJvdyA9IHR5cGVvZiBpdGVyYXRvci50aHJvdyA9PT0gJ2Z1bmN0aW9uJ1xuICAgIGlmIChoYWRFcnJvciAmJiBoYXNUaHJvdykge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IudGhyb3coZXJyb3IpXG4gICAgICBhd2FpdCB2YWx1ZVxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3IucmV0dXJuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKVxuICAgICAgYXdhaXQgdmFsdWVcbiAgICB9XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBpc0FzeW5jID8gYXdhaXQgaXRlcmF0b3IubmV4dCgpIDogaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgcmVhZGFibGUucHVzaChudWxsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nID8gYXdhaXQgdmFsdWUgOiB2YWx1ZVxuICAgICAgICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVhZGFibGUucHVzaChyZXMpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWFkaW5nID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWFkYWJsZS5kZXN0cm95KGVycilcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIHJldHVybiByZWFkYWJsZVxufVxubW9kdWxlLmV4cG9ydHMgPSBmcm9tXG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3Qge1xuICBBcnJheVByb3RvdHlwZUluZGV4T2YsXG4gIE51bWJlcklzSW50ZWdlcixcbiAgTnVtYmVySXNOYU4sXG4gIE51bWJlclBhcnNlSW50LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzLFxuICBPYmplY3RLZXlzLFxuICBPYmplY3RTZXRQcm90b3R5cGVPZixcbiAgUHJvbWlzZSxcbiAgU2FmZVNldCxcbiAgU3ltYm9sQXN5bmNEaXNwb3NlLFxuICBTeW1ib2xBc3luY0l0ZXJhdG9yLFxuICBTeW1ib2xcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGVcblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlXG5jb25zdCB7IEV2ZW50RW1pdHRlcjogRUUgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCB7IFN0cmVhbSwgcHJlcGVuZExpc3RlbmVyIH0gPSByZXF1aXJlKCcuL2xlZ2FjeScpXG5jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWRkLWFib3J0LXNpZ25hbCcpXG5jb25zdCBlb3MgPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKVxubGV0IGRlYnVnID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuZGVidWdsb2coJ3N0cmVhbScsIChmbikgPT4ge1xuICBkZWJ1ZyA9IGZuXG59KVxuY29uc3QgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vYnVmZmVyX2xpc3QnKVxuY29uc3QgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2Rlc3Ryb3knKVxuY29uc3QgeyBnZXRIaWdoV2F0ZXJNYXJrLCBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9zdGF0ZScpXG5jb25zdCB7XG4gIGFnZ3JlZ2F0ZVR3b0Vycm9ycyxcbiAgY29kZXM6IHtcbiAgICBFUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgICBFUlJfT1VUX09GX1JBTkdFLFxuICAgIEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsXG4gICAgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVFxuICB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyB2YWxpZGF0ZU9iamVjdCB9ID0gcmVxdWlyZSgnLi4vdmFsaWRhdG9ycycpXG5jb25zdCBrUGF1c2VkID0gU3ltYm9sKCdrUGF1c2VkJylcbmNvbnN0IHsgU3RyaW5nRGVjb2RlciB9ID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKVxuY29uc3QgZnJvbSA9IHJlcXVpcmUoJy4vZnJvbScpXG5PYmplY3RTZXRQcm90b3R5cGVPZihSZWFkYWJsZS5wcm90b3R5cGUsIFN0cmVhbS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihSZWFkYWJsZSwgU3RyZWFtKVxuY29uc3Qgbm9wID0gKCkgPT4ge31cbmNvbnN0IHsgZXJyb3JPckRlc3Ryb3kgfSA9IGRlc3Ryb3lJbXBsXG5jb25zdCBrT2JqZWN0TW9kZSA9IDEgPDwgMFxuY29uc3Qga0VuZGVkID0gMSA8PCAxXG5jb25zdCBrRW5kRW1pdHRlZCA9IDEgPDwgMlxuY29uc3Qga1JlYWRpbmcgPSAxIDw8IDNcbmNvbnN0IGtDb25zdHJ1Y3RlZCA9IDEgPDwgNFxuY29uc3Qga1N5bmMgPSAxIDw8IDVcbmNvbnN0IGtOZWVkUmVhZGFibGUgPSAxIDw8IDZcbmNvbnN0IGtFbWl0dGVkUmVhZGFibGUgPSAxIDw8IDdcbmNvbnN0IGtSZWFkYWJsZUxpc3RlbmluZyA9IDEgPDwgOFxuY29uc3Qga1Jlc3VtZVNjaGVkdWxlZCA9IDEgPDwgOVxuY29uc3Qga0Vycm9yRW1pdHRlZCA9IDEgPDwgMTBcbmNvbnN0IGtFbWl0Q2xvc2UgPSAxIDw8IDExXG5jb25zdCBrQXV0b0Rlc3Ryb3kgPSAxIDw8IDEyXG5jb25zdCBrRGVzdHJveWVkID0gMSA8PCAxM1xuY29uc3Qga0Nsb3NlZCA9IDEgPDwgMTRcbmNvbnN0IGtDbG9zZUVtaXR0ZWQgPSAxIDw8IDE1XG5jb25zdCBrTXVsdGlBd2FpdERyYWluID0gMSA8PCAxNlxuY29uc3Qga1JlYWRpbmdNb3JlID0gMSA8PCAxN1xuY29uc3Qga0RhdGFFbWl0dGVkID0gMSA8PCAxOFxuXG4vLyBUT0RPKGJlbmphbWluZ3IpIGl0IGlzIGxpa2VseSBzbG93ZXIgdG8gZG8gaXQgdGhpcyB3YXkgdGhhbiB3aXRoIGZyZWUgZnVuY3Rpb25zXG5mdW5jdGlvbiBtYWtlQml0TWFwRGVzY3JpcHRvcihiaXQpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuc3RhdGUgJiBiaXQpICE9PSAwXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkgdGhpcy5zdGF0ZSB8PSBiaXRcbiAgICAgIGVsc2UgdGhpcy5zdGF0ZSAmPSB+Yml0XG4gICAgfVxuICB9XG59XG5PYmplY3REZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlU3RhdGUucHJvdG90eXBlLCB7XG4gIG9iamVjdE1vZGU6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtPYmplY3RNb2RlKSxcbiAgZW5kZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtFbmRlZCksXG4gIGVuZEVtaXR0ZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtFbmRFbWl0dGVkKSxcbiAgcmVhZGluZzogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa1JlYWRpbmcpLFxuICAvLyBTdHJlYW0gaXMgc3RpbGwgYmVpbmcgY29uc3RydWN0ZWQgYW5kIGNhbm5vdCBiZVxuICAvLyBkZXN0cm95ZWQgdW50aWwgY29uc3RydWN0aW9uIGZpbmlzaGVkIG9yIGZhaWxlZC5cbiAgLy8gQXN5bmMgY29uc3RydWN0aW9uIGlzIG9wdCBpbiwgdGhlcmVmb3JlIHdlIHN0YXJ0IGFzXG4gIC8vIGNvbnN0cnVjdGVkLlxuICBjb25zdHJ1Y3RlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0NvbnN0cnVjdGVkKSxcbiAgLy8gQSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgZXZlbnQgJ3JlYWRhYmxlJy8nZGF0YScgaXMgZW1pdHRlZFxuICAvLyBpbW1lZGlhdGVseSwgb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZVxuICAvLyBhbnkgYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3QgcmVhZCBjYWxsLlxuICBzeW5jOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrU3luYyksXG4gIC8vIFdoZW5ldmVyIHdlIHJldHVybiBudWxsLCB0aGVuIHdlIHNldCBhIGZsYWcgdG8gc2F5XG4gIC8vIHRoYXQgd2UncmUgYXdhaXRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGVtaXNzaW9uLlxuICBuZWVkUmVhZGFibGU6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtOZWVkUmVhZGFibGUpLFxuICBlbWl0dGVkUmVhZGFibGU6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtFbWl0dGVkUmVhZGFibGUpLFxuICByZWFkYWJsZUxpc3RlbmluZzogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa1JlYWRhYmxlTGlzdGVuaW5nKSxcbiAgcmVzdW1lU2NoZWR1bGVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVzdW1lU2NoZWR1bGVkKSxcbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW4uXG4gIGVycm9yRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Vycm9yRW1pdHRlZCksXG4gIGVtaXRDbG9zZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VtaXRDbG9zZSksXG4gIGF1dG9EZXN0cm95OiBtYWtlQml0TWFwRGVzY3JpcHRvcihrQXV0b0Rlc3Ryb3kpLFxuICAvLyBIYXMgaXQgYmVlbiBkZXN0cm95ZWQuXG4gIGRlc3Ryb3llZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Rlc3Ryb3llZCksXG4gIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzdHJlYW0gaGFzIGZpbmlzaGVkIGRlc3Ryb3lpbmcuXG4gIGNsb3NlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Nsb3NlZCksXG4gIC8vIFRydWUgaWYgY2xvc2UgaGFzIGJlZW4gZW1pdHRlZCBvciB3b3VsZCBoYXZlIGJlZW4gZW1pdHRlZFxuICAvLyBkZXBlbmRpbmcgb24gZW1pdENsb3NlLlxuICBjbG9zZUVtaXR0ZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtDbG9zZUVtaXR0ZWQpLFxuICBtdWx0aUF3YWl0RHJhaW46IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtNdWx0aUF3YWl0RHJhaW4pLFxuICAvLyBJZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkLlxuICByZWFkaW5nTW9yZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa1JlYWRpbmdNb3JlKSxcbiAgZGF0YUVtaXR0ZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtEYXRhRW1pdHRlZClcbn0pXG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICBpZiAodHlwZW9mIGlzRHVwbGV4ICE9PSAnYm9vbGVhbicpIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgcmVxdWlyZSgnLi9kdXBsZXgnKVxuXG4gIC8vIEJpdCBtYXAgZmllbGQgdG8gc3RvcmUgUmVhZGFibGVTdGF0ZSBtb3JlIGVmZmNpZW50bHkgd2l0aCAxIGJpdCBwZXIgZmllbGRcbiAgLy8gaW5zdGVhZCBvZiBhIFY4IHNsb3QgcGVyIGZpZWxkLlxuICB0aGlzLnN0YXRlID0ga0VtaXRDbG9zZSB8IGtBdXRvRGVzdHJveSB8IGtDb25zdHJ1Y3RlZCB8IGtTeW5jXG4gIC8vIE9iamVjdCBzdHJlYW0gZmxhZy4gVXNlZCB0byBtYWtlIHJlYWQobikgaWdub3JlIG4gYW5kIHRvXG4gIC8vIG1ha2UgYWxsIHRoZSBidWZmZXIgbWVyZ2luZyBhbmQgbGVuZ3RoIGNoZWNrcyBnbyBhd2F5LlxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9iamVjdE1vZGUpIHRoaXMuc3RhdGUgfD0ga09iamVjdE1vZGVcbiAgaWYgKGlzRHVwbGV4ICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUpIHRoaXMuc3RhdGUgfD0ga09iamVjdE1vZGVcblxuICAvLyBUaGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IG9wdGlvbnNcbiAgICA/IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KVxuICAgIDogZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsoZmFsc2UpXG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKS5cbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpXG4gIHRoaXMubGVuZ3RoID0gMFxuICB0aGlzLnBpcGVzID0gW11cbiAgdGhpcy5mbG93aW5nID0gbnVsbFxuICB0aGlzW2tQYXVzZWRdID0gbnVsbFxuXG4gIC8vIFNob3VsZCBjbG9zZSBiZSBlbWl0dGVkIG9uIGRlc3Ryb3kuIERlZmF1bHRzIHRvIHRydWUuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW1pdENsb3NlID09PSBmYWxzZSkgdGhpcy5zdGF0ZSAmPSB+a0VtaXRDbG9zZVxuXG4gIC8vIFNob3VsZCAuZGVzdHJveSgpIGJlIGNhbGxlZCBhZnRlciAnZW5kJyAoYW5kIHBvdGVudGlhbGx5ICdmaW5pc2gnKS5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hdXRvRGVzdHJveSA9PT0gZmFsc2UpIHRoaXMuc3RhdGUgJj0gfmtBdXRvRGVzdHJveVxuXG4gIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzdHJlYW0gaGFzIGVycm9yZWQuIFdoZW4gdHJ1ZSBubyBmdXJ0aGVyXG4gIC8vIF9yZWFkIGNhbGxzLCAnZGF0YScgb3IgJ3JlYWRhYmxlJyBldmVudHMgc2hvdWxkIG9jY3VyLiBUaGlzIGlzIG5lZWRlZFxuICAvLyBzaW5jZSB3aGVuIGF1dG9EZXN0cm95IGlzIGRpc2FibGVkIHdlIG5lZWQgYSB3YXkgdG8gdGVsbCB3aGV0aGVyIHRoZVxuICAvLyBzdHJlYW0gaGFzIGZhaWxlZC5cbiAgdGhpcy5lcnJvcmVkID0gbnVsbFxuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpIHx8ICd1dGY4J1xuXG4gIC8vIFJlZiB0aGUgcGlwZWQgZGVzdCB3aGljaCB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQgb24gaXRcbiAgLy8gdHlwZTogbnVsbCB8IFdyaXRhYmxlIHwgU2V0PFdyaXRhYmxlPi5cbiAgdGhpcy5hd2FpdERyYWluV3JpdGVycyA9IG51bGxcbiAgdGhpcy5kZWNvZGVyID0gbnVsbFxuICB0aGlzLmVuY29kaW5nID0gbnVsbFxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZylcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZ1xuICB9XG59XG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucylcblxuICAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBSZWFkYWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNS5cbiAgY29uc3QgaXNEdXBsZXggPSB0aGlzIGluc3RhbmNlb2YgcmVxdWlyZSgnLi9kdXBsZXgnKVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcywgaXNEdXBsZXgpXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWRcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3QgPT09ICdmdW5jdGlvbicpIHRoaXMuX2NvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsICYmICFpc0R1cGxleCkgYWRkQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsIHRoaXMpXG4gIH1cbiAgU3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucylcbiAgZGVzdHJveUltcGwuY29uc3RydWN0KHRoaXMsICgpID0+IHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUpIHtcbiAgICAgIG1heWJlUmVhZE1vcmUodGhpcywgdGhpcy5fcmVhZGFibGVTdGF0ZSlcbiAgICB9XG4gIH0pXG59XG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3lcblJlYWRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95XG5SZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICBjYihlcnIpXG59XG5SZWFkYWJsZS5wcm90b3R5cGVbRUUuY2FwdHVyZVJlamVjdGlvblN5bWJvbF0gPSBmdW5jdGlvbiAoZXJyKSB7XG4gIHRoaXMuZGVzdHJveShlcnIpXG59XG5SZWFkYWJsZS5wcm90b3R5cGVbU3ltYm9sQXN5bmNEaXNwb3NlXSA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IGVycm9yXG4gIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcbiAgICBlcnJvciA9IHRoaXMucmVhZGFibGVFbmRlZCA/IG51bGwgOiBuZXcgQWJvcnRFcnJvcigpXG4gICAgdGhpcy5kZXN0cm95KGVycm9yKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBlb3ModGhpcywgKGVycikgPT4gKGVyciAmJiBlcnIgIT09IGVycm9yID8gcmVqZWN0KGVycikgOiByZXNvbHZlKG51bGwpKSkpXG59XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKS5cblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIHRydWUpXG59XG5mdW5jdGlvbiByZWFkYWJsZUFkZENodW5rKHN0cmVhbSwgY2h1bmssIGVuY29kaW5nLCBhZGRUb0Zyb250KSB7XG4gIGRlYnVnKCdyZWFkYWJsZUFkZENodW5rJywgY2h1bmspXG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGxldCBlcnJcbiAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtPYmplY3RNb2RlKSA9PT0gMCkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZ1xuICAgICAgaWYgKHN0YXRlLmVuY29kaW5nICE9PSBlbmNvZGluZykge1xuICAgICAgICBpZiAoYWRkVG9Gcm9udCAmJiBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgICAgIC8vIFdoZW4gdW5zaGlmdGluZywgaWYgc3RhdGUuZW5jb2RpbmcgaXMgc2V0LCB3ZSBoYXZlIHRvIHNhdmVcbiAgICAgICAgICAvLyB0aGUgc3RyaW5nIGluIHRoZSBCdWZmZXJMaXN0IHdpdGggdGhlIHN0YXRlIGVuY29kaW5nLlxuICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKS50b1N0cmluZyhzdGF0ZS5lbmNvZGluZylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZylcbiAgICAgICAgICBlbmNvZGluZyA9ICcnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNodW5rIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICBlbmNvZGluZyA9ICcnXG4gICAgfSBlbHNlIGlmIChTdHJlYW0uX2lzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgIGNodW5rID0gU3RyZWFtLl91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspXG4gICAgICBlbmNvZGluZyA9ICcnXG4gICAgfSBlbHNlIGlmIChjaHVuayAhPSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJywgJ1VpbnQ4QXJyYXknXSwgY2h1bmspXG4gICAgfVxuICB9XG4gIGlmIChlcnIpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVycilcbiAgfSBlbHNlIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnN0YXRlICY9IH5rUmVhZGluZ1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSlcbiAgfSBlbHNlIGlmICgoc3RhdGUuc3RhdGUgJiBrT2JqZWN0TW9kZSkgIT09IDAgfHwgKGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApKSB7XG4gICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgIGlmICgoc3RhdGUuc3RhdGUgJiBrRW5kRW1pdHRlZCkgIT09IDApIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQoKSlcbiAgICAgIGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCB8fCBzdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgICAgIGVsc2UgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIHRydWUpXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRlZCkge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRigpKVxuICAgIH0gZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkIHx8IHN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5zdGF0ZSAmPSB+a1JlYWRpbmdcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspXG4gICAgICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rLmxlbmd0aCAhPT0gMCkgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKVxuICAgICAgICBlbHNlIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICBzdGF0ZS5zdGF0ZSAmPSB+a1JlYWRpbmdcbiAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpXG4gIH1cblxuICAvLyBXZSBjYW4gcHVzaCBtb3JlIGRhdGEgaWYgd2UgYXJlIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLlxuICAvLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZSBtb3JlIGJ5dGVzLlxuICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLCBzdWNoIGFzIHRoZSByZXBsLlxuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmxlbmd0aCA9PT0gMClcbn1cbmZ1bmN0aW9uIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBhZGRUb0Zyb250KSB7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYyAmJiBzdHJlYW0ubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIC8vIFVzZSB0aGUgZ3VhcmQgdG8gYXZvaWQgY3JlYXRpbmcgYFNldCgpYCByZXBlYXRlZGx5XG4gICAgLy8gd2hlbiB3ZSBoYXZlIG11bHRpcGxlIHBpcGVzLlxuICAgIGlmICgoc3RhdGUuc3RhdGUgJiBrTXVsdGlBd2FpdERyYWluKSAhPT0gMCkge1xuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuY2xlYXIoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG51bGxcbiAgICB9XG4gICAgc3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuaylcbiAgfSBlbHNlIHtcbiAgICAvLyBVcGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgIGlmIChhZGRUb0Zyb250KSBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuaylcbiAgICBlbHNlIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKVxuICAgIGlmICgoc3RhdGUuc3RhdGUgJiBrTmVlZFJlYWRhYmxlKSAhPT0gMCkgZW1pdFJlYWRhYmxlKHN0cmVhbSlcbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpXG59XG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICByZXR1cm4gc3RhdGVba1BhdXNlZF0gPT09IHRydWUgfHwgc3RhdGUuZmxvd2luZyA9PT0gZmFsc2Vcbn1cblxuLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IGRlY29kZXJcbiAgLy8gSWYgc2V0RW5jb2RpbmcobnVsbCksIGRlY29kZXIuZW5jb2RpbmcgZXF1YWxzIHV0ZjguXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2RpbmdcbiAgY29uc3QgYnVmZmVyID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJcbiAgLy8gSXRlcmF0ZSBvdmVyIGN1cnJlbnQgYnVmZmVyIHRvIGNvbnZlcnQgYWxyZWFkeSBzdG9yZWQgQnVmZmVyczpcbiAgbGV0IGNvbnRlbnQgPSAnJ1xuICBmb3IgKGNvbnN0IGRhdGEgb2YgYnVmZmVyKSB7XG4gICAgY29udGVudCArPSBkZWNvZGVyLndyaXRlKGRhdGEpXG4gIH1cbiAgYnVmZmVyLmNsZWFyKClcbiAgaWYgKGNvbnRlbnQgIT09ICcnKSBidWZmZXIucHVzaChjb250ZW50KVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aCA9IGNvbnRlbnQubGVuZ3RoXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiAxR0IuXG5jb25zdCBNQVhfSFdNID0gMHg0MDAwMDAwMFxuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+IE1BWF9IV00pIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRSgnc2l6ZScsICc8PSAxR2lCJywgbilcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHMuXG4gICAgbi0tXG4gICAgbiB8PSBuID4+PiAxXG4gICAgbiB8PSBuID4+PiAyXG4gICAgbiB8PSBuID4+PiA0XG4gICAgbiB8PSBuID4+PiA4XG4gICAgbiB8PSBuID4+PiAxNlxuICAgIG4rK1xuICB9XG4gIHJldHVybiBuXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpKSByZXR1cm4gMFxuICBpZiAoKHN0YXRlLnN0YXRlICYga09iamVjdE1vZGUpICE9PSAwKSByZXR1cm4gMVxuICBpZiAoTnVtYmVySXNOYU4obikpIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWUuXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmZpcnN0KCkubGVuZ3RoXG4gICAgcmV0dXJuIHN0YXRlLmxlbmd0aFxuICB9XG4gIGlmIChuIDw9IHN0YXRlLmxlbmd0aCkgcmV0dXJuIG5cbiAgcmV0dXJuIHN0YXRlLmVuZGVkID8gc3RhdGUubGVuZ3RoIDogMFxufVxuXG4vLyBZb3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pXG4gIC8vIFNhbWUgYXMgcGFyc2VJbnQodW5kZWZpbmVkLCAxMCksIGhvd2V2ZXIgVjggNy4zIHBlcmZvcm1hbmNlIHJlZ3Jlc3NlZFxuICAvLyBpbiB0aGlzIHNjZW5hcmlvLCBzbyB3ZSBhcmUgZG9pbmcgaXQgbWFudWFsbHkuXG4gIGlmIChuID09PSB1bmRlZmluZWQpIHtcbiAgICBuID0gTmFOXG4gIH0gZWxzZSBpZiAoIU51bWJlcklzSW50ZWdlcihuKSkge1xuICAgIG4gPSBOdW1iZXJQYXJzZUludChuLCAxMClcbiAgfVxuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3Qgbk9yaWcgPSBuXG5cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pXG4gIGlmIChuICE9PSAwKSBzdGF0ZS5zdGF0ZSAmPSB+a0VtaXR0ZWRSZWFkYWJsZVxuXG4gIC8vIElmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKFxuICAgIG4gPT09IDAgJiZcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgJiZcbiAgICAoKHN0YXRlLmhpZ2hXYXRlck1hcmsgIT09IDAgPyBzdGF0ZS5sZW5ndGggPj0gc3RhdGUuaGlnaFdhdGVyTWFyayA6IHN0YXRlLmxlbmd0aCA+IDApIHx8IHN0YXRlLmVuZGVkKVxuICApIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZClcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKVxuICAgIGVsc2UgZW1pdFJlYWRhYmxlKHRoaXMpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBuID0gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSlcblxuICAvLyBJZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcylcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gQWxsIHRoZSBhY3R1YWwgY2h1bmsgZ2VuZXJhdGlvbiBsb2dpYyBuZWVkcyB0byBiZVxuICAvLyAqYmVsb3cqIHRoZSBjYWxsIHRvIF9yZWFkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGluIGNlcnRhaW5cbiAgLy8gc3ludGhldGljIHN0cmVhbSBjYXNlcywgc3VjaCBhcyBwYXNzdGhyb3VnaCBzdHJlYW1zLCBfcmVhZFxuICAvLyBtYXkgYmUgYSBjb21wbGV0ZWx5IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGljaCBtYXkgY2hhbmdlXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgcmVhZCBidWZmZXIsIHByb3ZpZGluZyBlbm91Z2ggZGF0YSB3aGVuXG4gIC8vIGJlZm9yZSB0aGVyZSB3YXMgKm5vdCogZW5vdWdoLlxuICAvL1xuICAvLyBTbywgdGhlIHN0ZXBzIGFyZTpcbiAgLy8gMS4gRmlndXJlIG91dCB3aGF0IHRoZSBzdGF0ZSBvZiB0aGluZ3Mgd2lsbCBiZSBhZnRlciB3ZSBkb1xuICAvLyBhIHJlYWQgZnJvbSB0aGUgYnVmZmVyLlxuICAvL1xuICAvLyAyLiBJZiB0aGF0IHJlc3VsdGluZyBzdGF0ZSB3aWxsIHRyaWdnZXIgYSBfcmVhZCwgdGhlbiBjYWxsIF9yZWFkLlxuICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgYXN5bmNocm9ub3VzLCBvciBzeW5jaHJvbm91cy4gIFllcywgaXQgaXNcbiAgLy8gZGVlcGx5IHVnbHkgdG8gd3JpdGUgQVBJcyB0aGlzIHdheSwgYnV0IHRoYXQgc3RpbGwgZG9lc24ndCBtZWFuXG4gIC8vIHRoYXQgdGhlIFJlYWRhYmxlIGNsYXNzIHNob3VsZCBiZWhhdmUgaW1wcm9wZXJseSwgYXMgc3RyZWFtcyBhcmVcbiAgLy8gZGVzaWduZWQgdG8gYmUgc3luYy9hc3luYyBhZ25vc3RpYy5cbiAgLy8gVGFrZSBub3RlIGlmIHRoZSBfcmVhZCBjYWxsIGlzIHN5bmMgb3IgYXN5bmMgKGllLCBpZiB0aGUgcmVhZCBjYWxsXG4gIC8vIGhhcyByZXR1cm5lZCB5ZXQpLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBvciBub3QgaXQncyBzYWZlIHRvIGVtaXRcbiAgLy8gJ3JlYWRhYmxlJyBldGMuXG4gIC8vXG4gIC8vIDMuIEFjdHVhbGx5IHB1bGwgdGhlIHJlcXVlc3RlZCBjaHVua3Mgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJldHVybi5cblxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG4gIGxldCBkb1JlYWQgPSAoc3RhdGUuc3RhdGUgJiBrTmVlZFJlYWRhYmxlKSAhPT0gMFxuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZClcblxuICAvLyBJZiB3ZSBjdXJyZW50bHkgaGF2ZSBsZXNzIHRoYW4gdGhlIGhpZ2hXYXRlck1hcmssIHRoZW4gYWxzbyByZWFkIHNvbWUuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlXG4gICAgZGVidWcoJ2xlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrJywgZG9SZWFkKVxuICB9XG5cbiAgLy8gSG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnksIGlmIHdlJ3JlIGNvbnN0cnVjdGluZyB3ZSBoYXZlIHRvIHdhaXQsXG4gIC8vIGFuZCBpZiB3ZSdyZSBkZXN0cm95ZWQgb3IgZXJyb3JlZCwgdGhlbiBpdCdzIG5vdCBhbGxvd2VkLFxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZyB8fCBzdGF0ZS5kZXN0cm95ZWQgfHwgc3RhdGUuZXJyb3JlZCB8fCAhc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICBkb1JlYWQgPSBmYWxzZVxuICAgIGRlYnVnKCdyZWFkaW5nLCBlbmRlZCBvciBjb25zdHJ1Y3RpbmcnLCBkb1JlYWQpXG4gIH0gZWxzZSBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKVxuICAgIHN0YXRlLnN0YXRlIHw9IGtSZWFkaW5nIHwga1N5bmNcbiAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSB6ZXJvLCB0aGVuIHdlICpuZWVkKiBhIHJlYWRhYmxlIGV2ZW50LlxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHN0YXRlLnN0YXRlIHw9IGtOZWVkUmVhZGFibGVcblxuICAgIC8vIENhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0cnkge1xuICAgICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3JPckRlc3Ryb3kodGhpcywgZXJyKVxuICAgIH1cbiAgICBzdGF0ZS5zdGF0ZSAmPSB+a1N5bmNcblxuICAgIC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuICAgIGlmICghc3RhdGUucmVhZGluZykgbiA9IGhvd011Y2hUb1JlYWQobk9yaWcsIHN0YXRlKVxuICB9XG4gIGxldCByZXRcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSlcbiAgZWxzZSByZXQgPSBudWxsXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFya1xuICAgIG4gPSAwXG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG5cbiAgICBpZiAoc3RhdGUubXVsdGlBd2FpdERyYWluKSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbFxuICAgIH1cbiAgfVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gICAgLy8gYXMgc29vbiBhcyB3ZSAqZG8qIGdldCBzb21ldGhpbmcgaW50byB0aGUgYnVmZmVyLlxuICAgIGlmICghc3RhdGUuZW5kZWQpIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWVcblxuICAgIC8vIElmIHdlIHRyaWVkIHRvIHJlYWQoKSBwYXN0IHRoZSBFT0YsIHRoZW4gZW1pdCBlbmQgb24gdGhlIG5leHQgdGljay5cbiAgICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpXG4gIH1cbiAgaWYgKHJldCAhPT0gbnVsbCAmJiAhc3RhdGUuZXJyb3JFbWl0dGVkICYmICFzdGF0ZS5jbG9zZUVtaXR0ZWQpIHtcbiAgICBzdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWVcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGRlYnVnKCdvbkVvZkNodW5rJylcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm5cbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICBjb25zdCBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKClcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuaylcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWVcbiAgaWYgKHN0YXRlLnN5bmMpIHtcbiAgICAvLyBJZiB3ZSBhcmUgc3luYywgd2FpdCB1bnRpbCBuZXh0IHRpY2sgdG8gZW1pdCB0aGUgZGF0YS5cbiAgICAvLyBPdGhlcndpc2Ugd2UgcmlzayBlbWl0dGluZyBkYXRhIGluIHRoZSBmbG93KClcbiAgICAvLyB0aGUgcmVhZGFibGUgY29kZSB0cmlnZ2VycyBkdXJpbmcgYSByZWFkKCkgY2FsbC5cbiAgICBlbWl0UmVhZGFibGUoc3RyZWFtKVxuICB9IGVsc2Uge1xuICAgIC8vIEVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlXG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZVxuICAgIC8vIFdlIGhhdmUgdG8gZW1pdCByZWFkYWJsZSBub3cgdGhhdCB3ZSBhcmUgRU9GLiBNb2R1bGVzXG4gICAgLy8gaW4gdGhlIGVjb3N5c3RlbSAoZS5nLiBkaWNlcikgcmVseSBvbiB0aGlzIGV2ZW50IGJlaW5nIHN5bmMuXG4gICAgZW1pdFJlYWRhYmxlXyhzdHJlYW0pXG4gIH1cbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLm5lZWRSZWFkYWJsZSwgc3RhdGUuZW1pdHRlZFJlYWRhYmxlKVxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZVxuICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5mbG93aW5nKVxuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWVcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSlcbiAgfVxufVxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZV8nLCBzdGF0ZS5kZXN0cm95ZWQsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpXG4gIGlmICghc3RhdGUuZGVzdHJveWVkICYmICFzdGF0ZS5lcnJvcmVkICYmIChzdGF0ZS5sZW5ndGggfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJylcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhlIHN0cmVhbSBuZWVkcyBhbm90aGVyIHJlYWRhYmxlIGV2ZW50IGlmOlxuICAvLyAxLiBJdCBpcyBub3QgZmxvd2luZywgYXMgdGhlIGZsb3cgbWVjaGFuaXNtIHdpbGwgdGFrZVxuICAvLyAgICBjYXJlIG9mIGl0LlxuICAvLyAyLiBJdCBpcyBub3QgZW5kZWQuXG4gIC8vIDMuIEl0IGlzIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLCBzbyB3ZSBjYW4gc2NoZWR1bGVcbiAgLy8gICAgYW5vdGhlciByZWFkYWJsZSBsYXRlci5cbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gIXN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLmVuZGVkICYmIHN0YXRlLmxlbmd0aCA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gIGZsb3coc3RyZWFtKVxufVxuXG4vLyBBdCB0aGlzIHBvaW50LCB0aGUgdXNlciBoYXMgcHJlc3VtYWJseSBzZWVuIHRoZSAncmVhZGFibGUnIGV2ZW50LFxuLy8gYW5kIGNhbGxlZCByZWFkKCkgdG8gY29uc3VtZSBzb21lIGRhdGEuICB0aGF0IG1heSBoYXZlIHRyaWdnZXJlZFxuLy8gaW4gdHVybiBhbm90aGVyIF9yZWFkKG4pIGNhbGwsIGluIHdoaWNoIGNhc2UgcmVhZGluZyA9IHRydWUgaWZcbi8vIGl0J3MgaW4gcHJvZ3Jlc3MuXG4vLyBIb3dldmVyLCBpZiB3ZSdyZSBub3QgZW5kZWQsIG9yIHJlYWRpbmcsIGFuZCB0aGUgbGVuZ3RoIDwgaHdtLFxuLy8gdGhlbiBnbyBhaGVhZCBhbmQgdHJ5IHRvIHJlYWQgc29tZSBtb3JlIHByZWVtcHRpdmVseS5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmdNb3JlICYmIHN0YXRlLmNvbnN0cnVjdGVkKSB7XG4gICAgc3RhdGUucmVhZGluZ01vcmUgPSB0cnVlXG4gICAgcHJvY2Vzcy5uZXh0VGljayhtYXliZVJlYWRNb3JlXywgc3RyZWFtLCBzdGF0ZSlcbiAgfVxufVxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICAvLyBBdHRlbXB0IHRvIHJlYWQgbW9yZSBkYXRhIGlmIHdlIHNob3VsZC5cbiAgLy9cbiAgLy8gVGhlIGNvbmRpdGlvbnMgZm9yIHJlYWRpbmcgbW9yZSBkYXRhIGFyZSAob25lIG9mKTpcbiAgLy8gLSBOb3QgZW5vdWdoIGRhdGEgYnVmZmVyZWQgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspLiBUaGUgbG9vcFxuICAvLyAgIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZSBidWZmZXIgd2l0aCBlbm91Z2ggZGF0YSBpZiBzdWNoIGRhdGFcbiAgLy8gICBpcyBhdmFpbGFibGUuIElmIGhpZ2hXYXRlck1hcmsgaXMgMCBhbmQgd2UgYXJlIG5vdCBpbiB0aGUgZmxvd2luZyBtb2RlXG4gIC8vICAgd2Ugc2hvdWxkIF9ub3RfIGF0dGVtcHQgdG8gYnVmZmVyIGFueSBleHRyYSBkYXRhLiBXZSdsbCBnZXQgbW9yZSBkYXRhXG4gIC8vICAgd2hlbiB0aGUgc3RyZWFtIGNvbnN1bWVyIGNhbGxzIHJlYWQoKSBpbnN0ZWFkLlxuICAvLyAtIE5vIGRhdGEgaW4gdGhlIGJ1ZmZlciwgYW5kIHRoZSBzdHJlYW0gaXMgaW4gZmxvd2luZyBtb2RlLiBJbiB0aGlzIG1vZGVcbiAgLy8gICB0aGUgbG9vcCBiZWxvdyBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgcmVhZCgpIGlzIGNhbGxlZC4gRmFpbGluZyB0b1xuICAvLyAgIGNhbGwgcmVhZCBoZXJlIHdvdWxkIGFib3J0IHRoZSBmbG93IGFuZCB0aGVyZSdzIG5vIG90aGVyIG1lY2hhbmlzbSBmb3JcbiAgLy8gICBjb250aW51aW5nIHRoZSBmbG93IGlmIHRoZSBzdHJlYW0gY29uc3VtZXIgaGFzIGp1c3Qgc3Vic2NyaWJlZCB0byB0aGVcbiAgLy8gICAnZGF0YScgZXZlbnQuXG4gIC8vXG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBjb25kaXRpb25zIHRvIGtlZXAgcmVhZGluZyBkYXRhLCB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgcHJldmVudCB0aGUgZGF0YSBmcm9tIGJlaW5nIHJlYWQ6XG4gIC8vIC0gVGhlIHN0cmVhbSBoYXMgZW5kZWQgKHN0YXRlLmVuZGVkKS5cbiAgLy8gLSBUaGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyAncmVhZCcgb3BlcmF0aW9uIChzdGF0ZS5yZWFkaW5nKS4gVGhpcyBpcyBhXG4gIC8vICAgY2FzZSB3aGVyZSB0aGUgc3RyZWFtIGhhcyBjYWxsZWQgdGhlIGltcGxlbWVudGF0aW9uIGRlZmluZWQgX3JlYWQoKVxuICAvLyAgIG1ldGhvZCwgYnV0IHRoZXkgYXJlIHByb2Nlc3NpbmcgdGhlIGNhbGwgYXN5bmNocm9ub3VzbHkgYW5kIGhhdmUgX25vdF9cbiAgLy8gICBjYWxsZWQgcHVzaCgpIHdpdGggbmV3IGRhdGEuIEluIHRoaXMgY2FzZSB3ZSBza2lwIHBlcmZvcm1pbmcgbW9yZVxuICAvLyAgIHJlYWQoKXMuIFRoZSBleGVjdXRpb24gZW5kcyBpbiB0aGlzIG1ldGhvZCBhZ2FpbiBhZnRlciB0aGUgX3JlYWQoKSBlbmRzXG4gIC8vICAgdXAgY2FsbGluZyBwdXNoKCkgd2l0aCBtb3JlIGRhdGEuXG4gIHdoaWxlIChcbiAgICAhc3RhdGUucmVhZGluZyAmJlxuICAgICFzdGF0ZS5lbmRlZCAmJlxuICAgIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkpXG4gICkge1xuICAgIGNvbnN0IGxlbiA9IHN0YXRlLmxlbmd0aFxuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpXG4gICAgc3RyZWFtLnJlYWQoMClcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpXG4gICAgICAvLyBEaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlXG59XG5cbi8vIEFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhyb3cgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfcmVhZCgpJylcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIHBpcGVPcHRzKSB7XG4gIGNvbnN0IHNyYyA9IHRoaXNcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGlmIChzdGF0ZS5waXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoIXN0YXRlLm11bHRpQXdhaXREcmFpbikge1xuICAgICAgc3RhdGUubXVsdGlBd2FpdERyYWluID0gdHJ1ZVxuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBuZXcgU2FmZVNldChzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA/IFtzdGF0ZS5hd2FpdERyYWluV3JpdGVyc10gOiBbXSlcbiAgICB9XG4gIH1cbiAgc3RhdGUucGlwZXMucHVzaChkZXN0KVxuICBkZWJ1ZygncGlwZSBjb3VudD0lZCBvcHRzPSVqJywgc3RhdGUucGlwZXMubGVuZ3RoLCBwaXBlT3B0cylcbiAgY29uc3QgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyXG4gIGNvbnN0IGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IHVucGlwZVxuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcHJvY2Vzcy5uZXh0VGljayhlbmRGbilcbiAgZWxzZSBzcmMub25jZSgnZW5kJywgZW5kRm4pXG4gIGRlc3Qub24oJ3VucGlwZScsIG9udW5waXBlKVxuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpXG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZVxuICAgICAgICBjbGVhbnVwKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJylcbiAgICBkZXN0LmVuZCgpXG4gIH1cbiAgbGV0IG9uZHJhaW5cbiAgbGV0IGNsZWFuZWRVcCA9IGZhbHNlXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKVxuICAgIC8vIENsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW4uXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICAgIGlmIChvbmRyYWluKSB7XG4gICAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pXG4gICAgfVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcilcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSlcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKVxuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgdW5waXBlKVxuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSlcbiAgICBjbGVhbmVkVXAgPSB0cnVlXG5cbiAgICAvLyBJZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChvbmRyYWluICYmIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKVxuICB9XG4gIGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICBpZiAoIWNsZWFuZWRVcCkge1xuICAgICAgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA9PT0gMSAmJiBzdGF0ZS5waXBlc1swXSA9PT0gZGVzdCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgMClcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBkZXN0XG4gICAgICAgIHN0YXRlLm11bHRpQXdhaXREcmFpbiA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA+IDEgJiYgc3RhdGUucGlwZXMuaW5jbHVkZXMoZGVzdCkpIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpXG4gICAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmFkZChkZXN0KVxuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKClcbiAgICB9XG4gICAgaWYgKCFvbmRyYWluKSB7XG4gICAgICAvLyBXaGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gICAgICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgICAgIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gICAgICAvLyB0b28gc2xvdy5cbiAgICAgIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMsIGRlc3QpXG4gICAgICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pXG4gICAgfVxuICB9XG4gIHNyYy5vbignZGF0YScsIG9uZGF0YSlcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpXG4gICAgY29uc3QgcmV0ID0gZGVzdC53cml0ZShjaHVuaylcbiAgICBkZWJ1ZygnZGVzdC53cml0ZScsIHJldClcbiAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgcGF1c2UoKVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBIb3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKVxuICAgIHVucGlwZSgpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIGlmIChkZXN0Lmxpc3RlbmVyQ291bnQoJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIGNvbnN0IHMgPSBkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmIChzICYmICFzLmVycm9yRW1pdHRlZCkge1xuICAgICAgICAvLyBVc2VyIGluY29ycmVjdGx5IGVtaXR0ZWQgJ2Vycm9yJyBkaXJlY3RseSBvbiB0aGUgc3RyZWFtLlxuICAgICAgICBlcnJvck9yRGVzdHJveShkZXN0LCBlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc3QuZW1pdCgnZXJyb3InLCBlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG4gIHByZXBlbmRMaXN0ZW5lcihkZXN0LCAnZXJyb3InLCBvbmVycm9yKVxuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpXG4gICAgdW5waXBlKClcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSlcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJylcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gICAgdW5waXBlKClcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpXG4gICAgc3JjLnVucGlwZShkZXN0KVxuICB9XG5cbiAgLy8gVGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG8uXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYylcblxuICAvLyBTdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG5cbiAgaWYgKGRlc3Qud3JpdGFibGVOZWVkRHJhaW4gPT09IHRydWUpIHtcbiAgICBwYXVzZSgpXG4gIH0gZWxzZSBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKVxuICAgIHNyYy5yZXN1bWUoKVxuICB9XG4gIHJldHVybiBkZXN0XG59XG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMsIGRlc3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVPbkRyYWluRnVuY3Rpb25SZXN1bHQoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGVcblxuICAgIC8vIGBvbmRyYWluYCB3aWxsIGNhbGwgZGlyZWN0bHksXG4gICAgLy8gYHRoaXNgIG1heWJlIG5vdCBhIHJlZmVyZW5jZSB0byBkZXN0LFxuICAgIC8vIHNvIHdlIHVzZSB0aGUgcmVhbCBkZXN0IGhlcmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID09PSBkZXN0KSB7XG4gICAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCAxKVxuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBudWxsXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5tdWx0aUF3YWl0RHJhaW4pIHtcbiAgICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpXG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5kZWxldGUoZGVzdClcbiAgICB9XG4gICAgaWYgKCghc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgfHwgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuc2l6ZSA9PT0gMCkgJiYgc3JjLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSkge1xuICAgICAgc3JjLnJlc3VtZSgpXG4gICAgfVxuICB9XG59XG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHVucGlwZUluZm8gPSB7XG4gICAgaGFzVW5waXBlZDogZmFsc2VcbiAgfVxuXG4gIC8vIElmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXNcbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICBjb25zdCBkZXN0cyA9IHN0YXRlLnBpcGVzXG4gICAgc3RhdGUucGlwZXMgPSBbXVxuICAgIHRoaXMucGF1c2UoKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdHMubGVuZ3RoOyBpKyspXG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzLCB7XG4gICAgICAgIGhhc1VucGlwZWQ6IGZhbHNlXG4gICAgICB9KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBUcnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICBjb25zdCBpbmRleCA9IEFycmF5UHJvdG90eXBlSW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdClcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXNcbiAgc3RhdGUucGlwZXMuc3BsaWNlKGluZGV4LCAxKVxuICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAwKSB0aGlzLnBhdXNlKClcbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKVxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBTZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZy5cblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgZm4pIHtcbiAgY29uc3QgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbilcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgLy8gVXBkYXRlIHJlYWRhYmxlTGlzdGVuaW5nIHNvIHRoYXQgcmVzdW1lKCkgbWF5IGJlIGEgbm8tb3BcbiAgICAvLyBhIGZldyBsaW5lcyBkb3duLiBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJykuXG4gICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG5cbiAgICAvLyBUcnkgc3RhcnQgZmxvd2luZyBvbiBuZXh0IHRpY2sgaWYgc3RyZWFtIGlzbid0IGV4cGxpY2l0bHkgcGF1c2VkLlxuICAgIGlmIChzdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkgdGhpcy5yZXN1bWUoKVxuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlXG4gICAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2VcbiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlXG4gICAgICBkZWJ1Zygnb24gcmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLnJlYWRpbmcpXG4gICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKVxuICAgICAgfSBlbHNlIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IFJlYWRhYmxlLnByb3RvdHlwZS5vblxuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICBjb25zdCByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcywgZXYsIGZuKVxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcylcbiAgfVxuICByZXR1cm4gcmVzXG59XG5SZWFkYWJsZS5wcm90b3R5cGUub2ZmID0gUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyXG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2KSB7XG4gIGNvbnN0IHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgaWYgKGV2ID09PSAncmVhZGFibGUnIHx8IGV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcylcbiAgfVxuICByZXR1cm4gcmVzXG59XG5mdW5jdGlvbiB1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyhzZWxmKSB7XG4gIGNvbnN0IHN0YXRlID0gc2VsZi5fcmVhZGFibGVTdGF0ZVxuICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHNlbGYubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgaWYgKHN0YXRlLnJlc3VtZVNjaGVkdWxlZCAmJiBzdGF0ZVtrUGF1c2VkXSA9PT0gZmFsc2UpIHtcbiAgICAvLyBGbG93aW5nIG5lZWRzIHRvIGJlIHNldCB0byB0cnVlIG5vdywgb3RoZXJ3aXNlXG4gICAgLy8gdGhlIHVwY29taW5nIHJlc3VtZSB3aWxsIG5vdCBmbG93LlxuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlXG5cbiAgICAvLyBDcnVkZSB3YXkgdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIHJlc3VtZS5cbiAgfSBlbHNlIGlmIChzZWxmLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDApIHtcbiAgICBzZWxmLnJlc3VtZSgpXG4gIH0gZWxzZSBpZiAoIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgc3RhdGUuZmxvd2luZyA9IG51bGxcbiAgfVxufVxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKVxuICBzZWxmLnJlYWQoMClcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKVxuICAgIC8vIFdlIGZsb3cgb25seSBpZiB0aGVyZSBpcyBubyBvbmUgbGlzdGVuaW5nXG4gICAgLy8gZm9yIHJlYWRhYmxlLCBidXQgd2Ugc3RpbGwgaGF2ZSB0byBjYWxsXG4gICAgLy8gcmVzdW1lKCkuXG4gICAgc3RhdGUuZmxvd2luZyA9ICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZ1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSlcbiAgfVxuICBzdGF0ZVtrUGF1c2VkXSA9IGZhbHNlXG4gIHJldHVybiB0aGlzXG59XG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWVcbiAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpXG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1ZygncmVzdW1lJywgc3RhdGUucmVhZGluZylcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgc3RyZWFtLnJlYWQoMClcbiAgfVxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZVxuICBzdHJlYW0uZW1pdCgncmVzdW1lJylcbiAgZmxvdyhzdHJlYW0pXG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKVxufVxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKVxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkge1xuICAgIGRlYnVnKCdwYXVzZScpXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gZmFsc2VcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJylcbiAgfVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlW2tQYXVzZWRdID0gdHJ1ZVxuICByZXR1cm4gdGhpc1xufVxuZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKVxuICB3aGlsZSAoc3RhdGUuZmxvd2luZyAmJiBzdHJlYW0ucmVhZCgpICE9PSBudWxsKTtcbn1cblxuLy8gV3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIGxldCBwYXVzZWQgPSBmYWxzZVxuXG4gIC8vIFRPRE8gKHJvbmFnKTogU2hvdWxkIHRoaXMuZGVzdHJveShlcnIpIGVtaXRcbiAgLy8gJ2Vycm9yJyBvbiB0aGUgd3JhcHBlZCBzdHJlYW0/IFdvdWxkIHJlcXVpcmVcbiAgLy8gYSBzdGF0aWMgZmFjdG9yeSBtZXRob2QsIGUuZy4gUmVhZGFibGUud3JhcChzdHJlYW0pLlxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmICghdGhpcy5wdXNoKGNodW5rKSAmJiBzdHJlYW0ucGF1c2UpIHtcbiAgICAgIHBhdXNlZCA9IHRydWVcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgfSlcbiAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICBlcnJvck9yRGVzdHJveSh0aGlzLCBlcnIpXG4gIH0pXG4gIHN0cmVhbS5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgdGhpcy5kZXN0cm95KClcbiAgfSlcbiAgc3RyZWFtLm9uKCdkZXN0cm95JywgKCkgPT4ge1xuICAgIHRoaXMuZGVzdHJveSgpXG4gIH0pXG4gIHRoaXMuX3JlYWQgPSAoKSA9PiB7XG4gICAgaWYgKHBhdXNlZCAmJiBzdHJlYW0ucmVzdW1lKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZVxuICAgICAgc3RyZWFtLnJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLiBJbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgY29uc3Qgc3RyZWFtS2V5cyA9IE9iamVjdEtleXMoc3RyZWFtKVxuICBmb3IgKGxldCBqID0gMTsgaiA8IHN0cmVhbUtleXMubGVuZ3RoOyBqKyspIHtcbiAgICBjb25zdCBpID0gc3RyZWFtS2V5c1tqXVxuICAgIGlmICh0aGlzW2ldID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tpXSA9IHN0cmVhbVtpXS5iaW5kKHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2xBc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHN0cmVhbVRvQXN5bmNJdGVyYXRvcih0aGlzKVxufVxuUmVhZGFibGUucHJvdG90eXBlLml0ZXJhdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICByZXR1cm4gc3RyZWFtVG9Bc3luY0l0ZXJhdG9yKHRoaXMsIG9wdGlvbnMpXG59XG5mdW5jdGlvbiBzdHJlYW1Ub0FzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc3RyZWFtLnJlYWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHJlYW0gPSBSZWFkYWJsZS53cmFwKHN0cmVhbSwge1xuICAgICAgb2JqZWN0TW9kZTogdHJ1ZVxuICAgIH0pXG4gIH1cbiAgY29uc3QgaXRlciA9IGNyZWF0ZUFzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKVxuICBpdGVyLnN0cmVhbSA9IHN0cmVhbVxuICByZXR1cm4gaXRlclxufVxuYXN5bmMgZnVuY3Rpb24qIGNyZWF0ZUFzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKSB7XG4gIGxldCBjYWxsYmFjayA9IG5vcFxuICBmdW5jdGlvbiBuZXh0KHJlc29sdmUpIHtcbiAgICBpZiAodGhpcyA9PT0gc3RyZWFtKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICBjYWxsYmFjayA9IG5vcFxuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayA9IHJlc29sdmVcbiAgICB9XG4gIH1cbiAgc3RyZWFtLm9uKCdyZWFkYWJsZScsIG5leHQpXG4gIGxldCBlcnJvclxuICBjb25zdCBjbGVhbnVwID0gZW9zKFxuICAgIHN0cmVhbSxcbiAgICB7XG4gICAgICB3cml0YWJsZTogZmFsc2VcbiAgICB9LFxuICAgIChlcnIpID0+IHtcbiAgICAgIGVycm9yID0gZXJyID8gYWdncmVnYXRlVHdvRXJyb3JzKGVycm9yLCBlcnIpIDogbnVsbFxuICAgICAgY2FsbGJhY2soKVxuICAgICAgY2FsbGJhY2sgPSBub3BcbiAgICB9XG4gIClcbiAgdHJ5IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBzdHJlYW0uZGVzdHJveWVkID8gbnVsbCA6IHN0cmVhbS5yZWFkKClcbiAgICAgIGlmIChjaHVuayAhPT0gbnVsbCkge1xuICAgICAgICB5aWVsZCBjaHVua1xuICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSBlbHNlIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKG5leHQpXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvciA9IGFnZ3JlZ2F0ZVR3b0Vycm9ycyhlcnJvciwgZXJyKVxuICAgIHRocm93IGVycm9yXG4gIH0gZmluYWxseSB7XG4gICAgaWYgKFxuICAgICAgKGVycm9yIHx8IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuZGVzdHJveU9uUmV0dXJuKSAhPT0gZmFsc2UpICYmXG4gICAgICAoZXJyb3IgPT09IHVuZGVmaW5lZCB8fCBzdHJlYW0uX3JlYWRhYmxlU3RhdGUuYXV0b0Rlc3Ryb3kpXG4gICAgKSB7XG4gICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3RyZWFtLCBudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0ub2ZmKCdyZWFkYWJsZScsIG5leHQpXG4gICAgICBjbGVhbnVwKClcbiAgICB9XG4gIH1cbn1cblxuLy8gTWFraW5nIGl0IGV4cGxpY2l0IHRoZXNlIHByb3BlcnRpZXMgYXJlIG5vdCBlbnVtZXJhYmxlXG4vLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbi8vIHVzZXJsYW5kIHdpbGwgZmFpbC5cbk9iamVjdERlZmluZVByb3BlcnRpZXMoUmVhZGFibGUucHJvdG90eXBlLCB7XG4gIHJlYWRhYmxlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gICAgICAvLyByLnJlYWRhYmxlID09PSBmYWxzZSBtZWFucyB0aGF0IHRoaXMgaXMgcGFydCBvZiBhIER1cGxleCBzdHJlYW1cbiAgICAgIC8vIHdoZXJlIHRoZSByZWFkYWJsZSBzaWRlIHdhcyBkaXNhYmxlZCB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgIC8vIENvbXBhdC4gVGhlIHVzZXIgbWlnaHQgbWFudWFsbHkgZGlzYWJsZSByZWFkYWJsZSBzaWRlIHRocm91Z2hcbiAgICAgIC8vIGRlcHJlY2F0ZWQgc2V0dGVyLlxuICAgICAgcmV0dXJuICEhciAmJiByLnJlYWRhYmxlICE9PSBmYWxzZSAmJiAhci5kZXN0cm95ZWQgJiYgIXIuZXJyb3JFbWl0dGVkICYmICFyLmVuZEVtaXR0ZWRcbiAgICB9LFxuICAgIHNldCh2YWwpIHtcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQuXG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gISF2YWxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlRGlkUmVhZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkXG4gICAgfVxuICB9LFxuICByZWFkYWJsZUFib3J0ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgIT09IGZhbHNlICYmXG4gICAgICAgICh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCB8fCB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQpICYmXG4gICAgICAgICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlSGlnaFdhdGVyTWFyazoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlQnVmZmVyOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlRmxvd2luZzoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmdcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBzdGF0ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVMZW5ndGg6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoXG4gICAgfVxuICB9LFxuICByZWFkYWJsZU9iamVjdE1vZGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLm9iamVjdE1vZGUgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVFbmNvZGluZzoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSA/IHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgOiBudWxsXG4gICAgfVxuICB9LFxuICBlcnJvcmVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkIDogbnVsbFxuICAgIH1cbiAgfSxcbiAgY2xvc2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5jbG9zZWQgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZGVzdHJveWVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgOiBmYWxzZVxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBXZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuXG4gICAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZC5cbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlRW5kZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgOiBmYWxzZVxuICAgIH1cbiAgfVxufSlcbk9iamVjdERlZmluZVByb3BlcnRpZXMoUmVhZGFibGVTdGF0ZS5wcm90b3R5cGUsIHtcbiAgLy8gTGVnYWN5IGdldHRlciBmb3IgYHBpcGVzQ291bnRgLlxuICBwaXBlc0NvdW50OiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBpcGVzLmxlbmd0aFxuICAgIH1cbiAgfSxcbiAgLy8gTGVnYWN5IHByb3BlcnR5IGZvciBgcGF1c2VkYC5cbiAgcGF1c2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzW2tQYXVzZWRdICE9PSBmYWxzZVxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICB0aGlzW2tQYXVzZWRdID0gISF2YWx1ZVxuICAgIH1cbiAgfVxufSlcblxuLy8gRXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3RcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZC5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGxcbiAgbGV0IHJldFxuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KClcbiAgZWxzZSBpZiAoIW4gfHwgbiA+PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAvLyBSZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGxpc3QuXG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKVxuICAgIGVsc2UgaWYgKHN0YXRlLmJ1ZmZlci5sZW5ndGggPT09IDEpIHJldCA9IHN0YXRlLmJ1ZmZlci5maXJzdCgpXG4gICAgZWxzZSByZXQgPSBzdGF0ZS5idWZmZXIuY29uY2F0KHN0YXRlLmxlbmd0aClcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKVxuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0LlxuICAgIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25zdW1lKG4sIHN0YXRlLmRlY29kZXIpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGRlYnVnKCdlbmRSZWFkYWJsZScsIHN0YXRlLmVuZEVtaXR0ZWQpXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZVxuICAgIHByb2Nlc3MubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSlcbiAgfVxufVxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZU5UJywgc3RhdGUuZW5kRW1pdHRlZCwgc3RhdGUubGVuZ3RoKVxuXG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVycm9yZWQgJiYgIXN0YXRlLmNsb3NlRW1pdHRlZCAmJiAhc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZVxuICAgIHN0cmVhbS5lbWl0KCdlbmQnKVxuICAgIGlmIChzdHJlYW0ud3JpdGFibGUgJiYgc3RyZWFtLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVuZFdyaXRhYmxlTlQsIHN0cmVhbSlcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgICAvLyBJbiBjYXNlIG9mIGR1cGxleCBzdHJlYW1zIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZWN0XG4gICAgICAvLyBpZiB0aGUgd3JpdGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbC5cbiAgICAgIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICAgICAgY29uc3QgYXV0b0Rlc3Ryb3kgPVxuICAgICAgICAhd1N0YXRlIHx8XG4gICAgICAgICh3U3RhdGUuYXV0b0Rlc3Ryb3kgJiZcbiAgICAgICAgICAvLyBXZSBkb24ndCBleHBlY3QgdGhlIHdyaXRhYmxlIHRvIGV2ZXIgJ2ZpbmlzaCdcbiAgICAgICAgICAvLyBpZiB3cml0YWJsZSBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZS5cbiAgICAgICAgICAod1N0YXRlLmZpbmlzaGVkIHx8IHdTdGF0ZS53cml0YWJsZSA9PT0gZmFsc2UpKVxuICAgICAgaWYgKGF1dG9EZXN0cm95KSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVuZFdyaXRhYmxlTlQoc3RyZWFtKSB7XG4gIGNvbnN0IHdyaXRhYmxlID0gc3RyZWFtLndyaXRhYmxlICYmICFzdHJlYW0ud3JpdGFibGVFbmRlZCAmJiAhc3RyZWFtLmRlc3Ryb3llZFxuICBpZiAod3JpdGFibGUpIHtcbiAgICBzdHJlYW0uZW5kKClcbiAgfVxufVxuUmVhZGFibGUuZnJvbSA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgb3B0cykge1xuICByZXR1cm4gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpXG59XG5sZXQgd2ViU3RyZWFtc0FkYXB0ZXJzXG5cbi8vIExhenkgdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuZnVuY3Rpb24gbGF6eVdlYlN0cmVhbXMoKSB7XG4gIGlmICh3ZWJTdHJlYW1zQWRhcHRlcnMgPT09IHVuZGVmaW5lZCkgd2ViU3RyZWFtc0FkYXB0ZXJzID0ge31cbiAgcmV0dXJuIHdlYlN0cmVhbXNBZGFwdGVyc1xufVxuUmVhZGFibGUuZnJvbVdlYiA9IGZ1bmN0aW9uIChyZWFkYWJsZVN0cmVhbSwgb3B0aW9ucykge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdTdHJlYW1SZWFkYWJsZUZyb21SZWFkYWJsZVN0cmVhbShyZWFkYWJsZVN0cmVhbSwgb3B0aW9ucylcbn1cblJlYWRhYmxlLnRvV2ViID0gZnVuY3Rpb24gKHN0cmVhbVJlYWRhYmxlLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1JlYWRhYmxlU3RyZWFtRnJvbVN0cmVhbVJlYWRhYmxlKHN0cmVhbVJlYWRhYmxlLCBvcHRpb25zKVxufVxuUmVhZGFibGUud3JhcCA9IGZ1bmN0aW9uIChzcmMsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9zcmMkcmVhZGFibGVPYmplY3RNb1xuICByZXR1cm4gbmV3IFJlYWRhYmxlKHtcbiAgICBvYmplY3RNb2RlOlxuICAgICAgKF9yZWYgPVxuICAgICAgICAoX3NyYyRyZWFkYWJsZU9iamVjdE1vID0gc3JjLnJlYWRhYmxlT2JqZWN0TW9kZSkgIT09IG51bGwgJiYgX3NyYyRyZWFkYWJsZU9iamVjdE1vICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IF9zcmMkcmVhZGFibGVPYmplY3RNb1xuICAgICAgICAgIDogc3JjLm9iamVjdE1vZGUpICE9PSBudWxsICYmIF9yZWYgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IF9yZWZcbiAgICAgICAgOiB0cnVlLFxuICAgIC4uLm9wdGlvbnMsXG4gICAgZGVzdHJveShlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3JjLCBlcnIpXG4gICAgICBjYWxsYmFjayhlcnIpXG4gICAgfVxuICB9KS53cmFwKHNyYylcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHtcbiAgQXJyYXlQcm90b3R5cGVTbGljZSxcbiAgRXJyb3IsXG4gIEZ1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2UsXG4gIE9iamVjdERlZmluZVByb3BlcnR5LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzLFxuICBPYmplY3RTZXRQcm90b3R5cGVPZixcbiAgU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2UsXG4gIFN5bWJvbCxcbiAgU3ltYm9sSGFzSW5zdGFuY2Vcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGVcbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlXG5jb25zdCB7IEV2ZW50RW1pdHRlcjogRUUgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCcuL2xlZ2FjeScpLlN0cmVhbVxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCB7IGFkZEFib3J0U2lnbmFsIH0gPSByZXF1aXJlKCcuL2FkZC1hYm9ydC1zaWduYWwnKVxuY29uc3QgeyBnZXRIaWdoV2F0ZXJNYXJrLCBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9zdGF0ZScpXG5jb25zdCB7XG4gIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgRVJSX01VTFRJUExFX0NBTExCQUNLLFxuICBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFLFxuICBFUlJfU1RSRUFNX0RFU1RST1lFRCxcbiAgRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVELFxuICBFUlJfU1RSRUFNX05VTExfVkFMVUVTLFxuICBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxcbiAgRVJSX1VOS05PV05fRU5DT0RJTkdcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpLmNvZGVzXG5jb25zdCB7IGVycm9yT3JEZXN0cm95IH0gPSBkZXN0cm95SW1wbFxuT2JqZWN0U2V0UHJvdG90eXBlT2YoV3JpdGFibGUucHJvdG90eXBlLCBTdHJlYW0ucHJvdG90eXBlKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoV3JpdGFibGUsIFN0cmVhbSlcbmZ1bmN0aW9uIG5vcCgpIHt9XG5jb25zdCBrT25GaW5pc2hlZCA9IFN5bWJvbCgna09uRmluaXNoZWQnKVxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0sIGlzRHVwbGV4KSB7XG4gIC8vIER1cGxleCBzdHJlYW1zIGFyZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYnV0IHNoYXJlXG4gIC8vIHRoZSBzYW1lIG9wdGlvbnMgb2JqZWN0LlxuICAvLyBIb3dldmVyLCBzb21lIGNhc2VzIHJlcXVpcmUgc2V0dGluZyBvcHRpb25zIHRvIGRpZmZlcmVudFxuICAvLyB2YWx1ZXMgZm9yIHRoZSByZWFkYWJsZSBhbmQgdGhlIHdyaXRhYmxlIHNpZGVzIG9mIHRoZSBkdXBsZXggc3RyZWFtLFxuICAvLyBlLmcuIG9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlIHZzLiBvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZSwgZXRjLlxuICBpZiAodHlwZW9mIGlzRHVwbGV4ICE9PSAnYm9vbGVhbicpIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgcmVxdWlyZSgnLi9kdXBsZXgnKVxuXG4gIC8vIE9iamVjdCBzdHJlYW0gZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGlzIHN0cmVhbVxuICAvLyBjb250YWlucyBidWZmZXJzIG9yIG9iamVjdHMuXG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5vYmplY3RNb2RlKVxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIShvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlKVxuXG4gIC8vIFRoZSBwb2ludCBhdCB3aGljaCB3cml0ZSgpIHN0YXJ0cyByZXR1cm5pbmcgZmFsc2VcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyB0aGF0IHdlIGFsd2F5cyByZXR1cm4gZmFsc2UgaWZcbiAgLy8gdGhlIGVudGlyZSBidWZmZXIgaXMgbm90IGZsdXNoZWQgaW1tZWRpYXRlbHkgb24gd3JpdGUoKS5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gb3B0aW9uc1xuICAgID8gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpXG4gICAgOiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhmYWxzZSlcblxuICAvLyBpZiBfZmluYWwgaGFzIGJlZW4gY2FsbGVkLlxuICB0aGlzLmZpbmFsQ2FsbGVkID0gZmFsc2VcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlXG4gIC8vIEF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2VcbiAgLy8gV2hlbiBlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCByZXR1cm5lZC5cbiAgdGhpcy5lbmRlZCA9IGZhbHNlXG4gIC8vIFdoZW4gJ2ZpbmlzaCcgaXMgZW1pdHRlZC5cbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG5cbiAgLy8gSGFzIGl0IGJlZW4gZGVzdHJveWVkXG4gIHRoaXMuZGVzdHJveWVkID0gZmFsc2VcblxuICAvLyBTaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIGNvbnN0IG5vRGVjb2RlID0gISEob3B0aW9ucyAmJiBvcHRpb25zLmRlY29kZVN0cmluZ3MgPT09IGZhbHNlKVxuICB0aGlzLmRlY29kZVN0cmluZ3MgPSAhbm9EZWNvZGVcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKSB8fCAndXRmOCdcblxuICAvLyBOb3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDBcblxuICAvLyBBIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZVxuXG4gIC8vIFdoZW4gdHJ1ZSBhbGwgd3JpdGVzIHdpbGwgYmUgYnVmZmVyZWQgdW50aWwgLnVuY29yaygpIGNhbGwuXG4gIHRoaXMuY29ya2VkID0gMFxuXG4gIC8vIEEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlXG5cbiAgLy8gQSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2VcblxuICAvLyBUaGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssIGNiKS5cbiAgdGhpcy5vbndyaXRlID0gb253cml0ZS5iaW5kKHVuZGVmaW5lZCwgc3RyZWFtKVxuXG4gIC8vIFRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLlxuICB0aGlzLndyaXRlY2IgPSBudWxsXG5cbiAgLy8gVGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMFxuXG4gIC8vIFN0b3JhZ2UgZm9yIGRhdGEgcGFzc2VkIHRvIHRoZSBhZnRlcldyaXRlKCkgY2FsbGJhY2sgaW4gY2FzZSBvZlxuICAvLyBzeW5jaHJvbm91cyBfd3JpdGUoKSBjb21wbGV0aW9uLlxuICB0aGlzLmFmdGVyV3JpdGVUaWNrSW5mbyA9IG51bGxcbiAgcmVzZXRCdWZmZXIodGhpcylcblxuICAvLyBOdW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWQuXG4gIHRoaXMucGVuZGluZ2NiID0gMFxuXG4gIC8vIFN0cmVhbSBpcyBzdGlsbCBiZWluZyBjb25zdHJ1Y3RlZCBhbmQgY2Fubm90IGJlXG4gIC8vIGRlc3Ryb3llZCB1bnRpbCBjb25zdHJ1Y3Rpb24gZmluaXNoZWQgb3IgZmFpbGVkLlxuICAvLyBBc3luYyBjb25zdHJ1Y3Rpb24gaXMgb3B0IGluLCB0aGVyZWZvcmUgd2Ugc3RhcnQgYXNcbiAgLy8gY29uc3RydWN0ZWQuXG4gIHRoaXMuY29uc3RydWN0ZWQgPSB0cnVlXG5cbiAgLy8gRW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtcy5cbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlXG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW4uXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2VcblxuICAvLyBTaG91bGQgY2xvc2UgYmUgZW1pdHRlZCBvbiBkZXN0cm95LiBEZWZhdWx0cyB0byB0cnVlLlxuICB0aGlzLmVtaXRDbG9zZSA9ICFvcHRpb25zIHx8IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZVxuXG4gIC8vIFNob3VsZCAuZGVzdHJveSgpIGJlIGNhbGxlZCBhZnRlciAnZmluaXNoJyAoYW5kIHBvdGVudGlhbGx5ICdlbmQnKS5cbiAgdGhpcy5hdXRvRGVzdHJveSA9ICFvcHRpb25zIHx8IG9wdGlvbnMuYXV0b0Rlc3Ryb3kgIT09IGZhbHNlXG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZXJyb3JlZC4gV2hlbiB0cnVlIGFsbCB3cml0ZSgpIGNhbGxzXG4gIC8vIHNob3VsZCByZXR1cm4gZmFsc2UuIFRoaXMgaXMgbmVlZGVkIHNpbmNlIHdoZW4gYXV0b0Rlc3Ryb3lcbiAgLy8gaXMgZGlzYWJsZWQgd2UgbmVlZCBhIHdheSB0byB0ZWxsIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmFpbGVkLlxuICB0aGlzLmVycm9yZWQgPSBudWxsXG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmluaXNoZWQgZGVzdHJveWluZy5cbiAgdGhpcy5jbG9zZWQgPSBmYWxzZVxuXG4gIC8vIFRydWUgaWYgY2xvc2UgaGFzIGJlZW4gZW1pdHRlZCBvciB3b3VsZCBoYXZlIGJlZW4gZW1pdHRlZFxuICAvLyBkZXBlbmRpbmcgb24gZW1pdENsb3NlLlxuICB0aGlzLmNsb3NlRW1pdHRlZCA9IGZhbHNlXG4gIHRoaXNba09uRmluaXNoZWRdID0gW11cbn1cbmZ1bmN0aW9uIHJlc2V0QnVmZmVyKHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlcmVkID0gW11cbiAgc3RhdGUuYnVmZmVyZWRJbmRleCA9IDBcbiAgc3RhdGUuYWxsQnVmZmVycyA9IHRydWVcbiAgc3RhdGUuYWxsTm9vcCA9IHRydWVcbn1cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgcmV0dXJuIEFycmF5UHJvdG90eXBlU2xpY2UodGhpcy5idWZmZXJlZCwgdGhpcy5idWZmZXJlZEluZGV4KVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXJlZFJlcXVlc3RDb3VudCcsIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyZWQubGVuZ3RoIC0gdGhpcy5idWZmZXJlZEluZGV4XG4gIH1cbn0pXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFdyaXRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41LlxuICBjb25zdCBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG4gIGlmICghaXNEdXBsZXggJiYgIUZ1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2UoV3JpdGFibGUsIHRoaXMpKSByZXR1cm4gbmV3IFdyaXRhYmxlKG9wdGlvbnMpXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleClcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3lcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbFxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3QgPT09ICdmdW5jdGlvbicpIHRoaXMuX2NvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsKSBhZGRBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgdGhpcylcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzLCBvcHRpb25zKVxuICBkZXN0cm95SW1wbC5jb25zdHJ1Y3QodGhpcywgKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICAgIGlmICghc3RhdGUud3JpdGluZykge1xuICAgICAgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpXG4gICAgfVxuICAgIGZpbmlzaE1heWJlKHRoaXMsIHN0YXRlKVxuICB9KVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbEhhc0luc3RhbmNlLCB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgdmFsdWU6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICBpZiAoRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZSh0aGlzLCBvYmplY3QpKSByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzICE9PSBXcml0YWJsZSkgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlXG4gIH1cbn0pXG5cbi8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICBlcnJvck9yRGVzdHJveSh0aGlzLCBuZXcgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSgpKVxufVxuZnVuY3Rpb24gX3dyaXRlKHN0cmVhbSwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZ1xuICAgIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nXG4gIH0gZWxzZSB7XG4gICAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2RpbmdcbiAgICBlbHNlIGlmIChlbmNvZGluZyAhPT0gJ2J1ZmZlcicgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkgdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKVxuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wXG4gIH1cbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKVxuICB9IGVsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSkge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJ1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2h1bmsgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIGVuY29kaW5nID0gJ2J1ZmZlcidcbiAgICB9IGVsc2UgaWYgKFN0cmVhbS5faXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgY2h1bmsgPSBTdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaylcbiAgICAgIGVuY29kaW5nID0gJ2J1ZmZlcidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdjaHVuaycsIFsnc3RyaW5nJywgJ0J1ZmZlcicsICdVaW50OEFycmF5J10sIGNodW5rKVxuICAgIH1cbiAgfVxuICBsZXQgZXJyXG4gIGlmIChzdGF0ZS5lbmRpbmcpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQoKVxuICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKVxuICB9XG4gIGlmIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnIpXG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIsIHRydWUpXG4gICAgcmV0dXJuIGVyclxuICB9XG4gIHN0YXRlLnBlbmRpbmdjYisrXG4gIHJldHVybiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgY2IpXG59XG5Xcml0YWJsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICByZXR1cm4gX3dyaXRlKHRoaXMsIGNodW5rLCBlbmNvZGluZywgY2IpID09PSB0cnVlXG59XG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK1xufVxuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLVxuICAgIGlmICghc3RhdGUud3JpdGluZykgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpXG4gIH1cbn1cbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlKGVuY29kaW5nKVxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkgdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKVxuICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIElmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgY29uc3QgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGhcbiAgc3RhdGUubGVuZ3RoICs9IGxlblxuXG4gIC8vIHN0cmVhbS5fd3JpdGUgcmVzZXRzIHN0YXRlLmxlbmd0aFxuICBjb25zdCByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gIC8vIFdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkgc3RhdGUubmVlZERyYWluID0gdHJ1ZVxuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQgfHwgc3RhdGUuZXJyb3JlZCB8fCAhc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICBzdGF0ZS5idWZmZXJlZC5wdXNoKHtcbiAgICAgIGNodW5rLFxuICAgICAgZW5jb2RpbmcsXG4gICAgICBjYWxsYmFja1xuICAgIH0pXG4gICAgaWYgKHN0YXRlLmFsbEJ1ZmZlcnMgJiYgZW5jb2RpbmcgIT09ICdidWZmZXInKSB7XG4gICAgICBzdGF0ZS5hbGxCdWZmZXJzID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHN0YXRlLmFsbE5vb3AgJiYgY2FsbGJhY2sgIT09IG5vcCkge1xuICAgICAgc3RhdGUuYWxsTm9vcCA9IGZhbHNlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0YXRlLndyaXRlbGVuID0gbGVuXG4gICAgc3RhdGUud3JpdGVjYiA9IGNhbGxiYWNrXG4gICAgc3RhdGUud3JpdGluZyA9IHRydWVcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZVxuICAgIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKVxuICAgIHN0YXRlLnN5bmMgPSBmYWxzZVxuICB9XG5cbiAgLy8gUmV0dXJuIGZhbHNlIGlmIGVycm9yZWQgb3IgZGVzdHJveWVkIGluIG9yZGVyIHRvIGJyZWFrXG4gIC8vIGFueSBzeW5jaHJvbm91cyB3aGlsZShzdHJlYW0ud3JpdGUoZGF0YSkpIGxvb3BzLlxuICByZXR1cm4gcmV0ICYmICFzdGF0ZS5lcnJvcmVkICYmICFzdGF0ZS5kZXN0cm95ZWRcbn1cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW5cbiAgc3RhdGUud3JpdGVjYiA9IGNiXG4gIHN0YXRlLndyaXRpbmcgPSB0cnVlXG4gIHN0YXRlLnN5bmMgPSB0cnVlXG4gIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHN0YXRlLm9ud3JpdGUobmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCd3cml0ZScpKVxuICBlbHNlIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKVxuICBlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKVxuICBzdGF0ZS5zeW5jID0gZmFsc2Vcbn1cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2JcbiAgY2IoZXIpXG4gIC8vIEVuc3VyZSBjYWxsYmFja3MgYXJlIGludm9rZWQgZXZlbiB3aGVuIGF1dG9EZXN0cm95IGlzXG4gIC8vIG5vdCBlbmFibGVkLiBQYXNzaW5nIGBlcmAgaGVyZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2luY2VcbiAgLy8gaXQncyByZWxhdGVkIHRvIG9uZSBzcGVjaWZpYyB3cml0ZSwgbm90IHRvIHRoZSBidWZmZXJlZFxuICAvLyB3cml0ZXMuXG4gIGVycm9yQnVmZmVyKHN0YXRlKVxuICAvLyBUaGlzIGNhbiBlbWl0IGVycm9yLCBidXQgZXJyb3IgbXVzdCBhbHdheXMgZm9sbG93IGNiLlxuICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKVxufVxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IHN5bmMgPSBzdGF0ZS5zeW5jXG4gIGNvbnN0IGNiID0gc3RhdGUud3JpdGVjYlxuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpXG4gICAgcmV0dXJuXG4gIH1cbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlXG4gIHN0YXRlLndyaXRlY2IgPSBudWxsXG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlblxuICBzdGF0ZS53cml0ZWxlbiA9IDBcbiAgaWYgKGVyKSB7XG4gICAgLy8gQXZvaWQgVjggbGVhaywgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzQxMDMjaXNzdWVjb21tZW50LTY1MjAwMjM2NFxuICAgIGVyLnN0YWNrIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cbiAgICBpZiAoIXN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHN0YXRlLmVycm9yZWQgPSBlclxuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCB0byBub3RpZnkgdGhlIHJlYWRhYmxlIHNpZGUgb2YgdGhlXG4gICAgLy8gZXJyb3IuXG4gICAgaWYgKHN0cmVhbS5fcmVhZGFibGVTdGF0ZSAmJiAhc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkID0gZXJcbiAgICB9XG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2sob253cml0ZUVycm9yLCBzdHJlYW0sIHN0YXRlLCBlciwgY2IpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBlciwgY2IpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChzdGF0ZS5idWZmZXJlZC5sZW5ndGggPiBzdGF0ZS5idWZmZXJlZEluZGV4KSB7XG4gICAgICBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKVxuICAgIH1cbiAgICBpZiAoc3luYykge1xuICAgICAgLy8gSXQgaXMgYSBjb21tb24gY2FzZSB0aGF0IHRoZSBjYWxsYmFjayBwYXNzZWQgdG8gLndyaXRlKCkgaXMgYWx3YXlzXG4gICAgICAvLyB0aGUgc2FtZS4gSW4gdGhhdCBjYXNlLCB3ZSBkbyBub3Qgc2NoZWR1bGUgYSBuZXcgbmV4dFRpY2soKSwgYnV0XG4gICAgICAvLyByYXRoZXIganVzdCBpbmNyZWFzZSBhIGNvdW50ZXIsIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIGF2b2lkXG4gICAgICAvLyBtZW1vcnkgYWxsb2NhdGlvbnMuXG4gICAgICBpZiAoc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvICE9PSBudWxsICYmIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mby5jYiA9PT0gY2IpIHtcbiAgICAgICAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvLmNvdW50KytcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbyA9IHtcbiAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICBjYixcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGFmdGVyV3JpdGVUaWNrLCBzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgMSwgY2IpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBhZnRlcldyaXRlVGljayh7IHN0cmVhbSwgc3RhdGUsIGNvdW50LCBjYiB9KSB7XG4gIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbyA9IG51bGxcbiAgcmV0dXJuIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgY291bnQsIGNiKVxufVxuZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBjb3VudCwgY2IpIHtcbiAgY29uc3QgbmVlZERyYWluID0gIXN0YXRlLmVuZGluZyAmJiAhc3RyZWFtLmRlc3Ryb3llZCAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluXG4gIGlmIChuZWVkRHJhaW4pIHtcbiAgICBzdGF0ZS5uZWVkRHJhaW4gPSBmYWxzZVxuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpXG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiLS1cbiAgICBjYigpXG4gIH1cbiAgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgIGVycm9yQnVmZmVyKHN0YXRlKVxuICB9XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpXG59XG5cbi8vIElmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBpbnZva2UgY2FsbGJhY2tzLlxuZnVuY3Rpb24gZXJyb3JCdWZmZXIoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICByZXR1cm5cbiAgfVxuICBmb3IgKGxldCBuID0gc3RhdGUuYnVmZmVyZWRJbmRleDsgbiA8IHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aDsgKytuKSB7XG4gICAgdmFyIF9zdGF0ZSRlcnJvcmVkXG4gICAgY29uc3QgeyBjaHVuaywgY2FsbGJhY2sgfSA9IHN0YXRlLmJ1ZmZlcmVkW25dXG4gICAgY29uc3QgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGhcbiAgICBzdGF0ZS5sZW5ndGggLT0gbGVuXG4gICAgY2FsbGJhY2soXG4gICAgICAoX3N0YXRlJGVycm9yZWQgPSBzdGF0ZS5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfc3RhdGUkZXJyb3JlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gX3N0YXRlJGVycm9yZWRcbiAgICAgICAgOiBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3dyaXRlJylcbiAgICApXG4gIH1cbiAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb25maW5pc2hDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX3N0YXRlJGVycm9yZWQyXG4gICAgb25maW5pc2hDYWxsYmFja3NbaV0oXG4gICAgICAoX3N0YXRlJGVycm9yZWQyID0gc3RhdGUuZXJyb3JlZCkgIT09IG51bGwgJiYgX3N0YXRlJGVycm9yZWQyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBfc3RhdGUkZXJyb3JlZDJcbiAgICAgICAgOiBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ2VuZCcpXG4gICAgKVxuICB9XG4gIHJlc2V0QnVmZmVyKHN0YXRlKVxufVxuXG4vLyBJZiB0aGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgYnVmZmVyIHdhaXRpbmcsIHRoZW4gcHJvY2VzcyBpdC5cbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmNvcmtlZCB8fCBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nIHx8IHN0YXRlLmRlc3Ryb3llZCB8fCAhc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCB7IGJ1ZmZlcmVkLCBidWZmZXJlZEluZGV4LCBvYmplY3RNb2RlIH0gPSBzdGF0ZVxuICBjb25zdCBidWZmZXJlZExlbmd0aCA9IGJ1ZmZlcmVkLmxlbmd0aCAtIGJ1ZmZlcmVkSW5kZXhcbiAgaWYgKCFidWZmZXJlZExlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG4gIGxldCBpID0gYnVmZmVyZWRJbmRleFxuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gdHJ1ZVxuICBpZiAoYnVmZmVyZWRMZW5ndGggPiAxICYmIHN0cmVhbS5fd3JpdGV2KSB7XG4gICAgc3RhdGUucGVuZGluZ2NiIC09IGJ1ZmZlcmVkTGVuZ3RoIC0gMVxuICAgIGNvbnN0IGNhbGxiYWNrID0gc3RhdGUuYWxsTm9vcFxuICAgICAgPyBub3BcbiAgICAgIDogKGVycikgPT4ge1xuICAgICAgICAgIGZvciAobGV0IG4gPSBpOyBuIDwgYnVmZmVyZWQubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgIGJ1ZmZlcmVkW25dLmNhbGxiYWNrKGVycilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAvLyBNYWtlIGEgY29weSBvZiBgYnVmZmVyZWRgIGlmIGl0J3MgZ29pbmcgdG8gYmUgdXNlZCBieSBgY2FsbGJhY2tgIGFib3ZlLFxuICAgIC8vIHNpbmNlIGBkb1dyaXRlYCB3aWxsIG11dGF0ZSB0aGUgYXJyYXkuXG4gICAgY29uc3QgY2h1bmtzID0gc3RhdGUuYWxsTm9vcCAmJiBpID09PSAwID8gYnVmZmVyZWQgOiBBcnJheVByb3RvdHlwZVNsaWNlKGJ1ZmZlcmVkLCBpKVxuICAgIGNodW5rcy5hbGxCdWZmZXJzID0gc3RhdGUuYWxsQnVmZmVyc1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBjaHVua3MsICcnLCBjYWxsYmFjaylcbiAgICByZXNldEJ1ZmZlcihzdGF0ZSlcbiAgfSBlbHNlIHtcbiAgICBkbyB7XG4gICAgICBjb25zdCB7IGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2sgfSA9IGJ1ZmZlcmVkW2ldXG4gICAgICBidWZmZXJlZFtpKytdID0gbnVsbFxuICAgICAgY29uc3QgbGVuID0gb2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGhcbiAgICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgICB9IHdoaWxlIChpIDwgYnVmZmVyZWQubGVuZ3RoICYmICFzdGF0ZS53cml0aW5nKVxuICAgIGlmIChpID09PSBidWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHJlc2V0QnVmZmVyKHN0YXRlKVxuICAgIH0gZWxzZSBpZiAoaSA+IDI1Nikge1xuICAgICAgYnVmZmVyZWQuc3BsaWNlKDAsIGkpXG4gICAgICBzdGF0ZS5idWZmZXJlZEluZGV4ID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5idWZmZXJlZEluZGV4ID0gaVxuICAgIH1cbiAgfVxuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2Vcbn1cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAodGhpcy5fd3JpdGV2KSB7XG4gICAgdGhpcy5fd3JpdGV2KFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgY2h1bmssXG4gICAgICAgICAgZW5jb2RpbmdcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGNiXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3dyaXRlKCknKVxuICB9XG59XG5Xcml0YWJsZS5wcm90b3R5cGUuX3dyaXRldiA9IG51bGxcbldyaXRhYmxlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gY2h1bmtcbiAgICBjaHVuayA9IG51bGxcbiAgICBlbmNvZGluZyA9IG51bGxcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSBudWxsXG4gIH1cbiAgbGV0IGVyclxuICBpZiAoY2h1bmsgIT09IG51bGwgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJldCA9IF93cml0ZSh0aGlzLCBjaHVuaywgZW5jb2RpbmcpXG4gICAgaWYgKHJldCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnIgPSByZXRcbiAgICB9XG4gIH1cblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrcy5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDFcbiAgICB0aGlzLnVuY29yaygpXG4gIH1cbiAgaWYgKGVycikge1xuICAgIC8vIERvIG5vdGhpbmcuLi5cbiAgfSBlbHNlIGlmICghc3RhdGUuZXJyb3JlZCAmJiAhc3RhdGUuZW5kaW5nKSB7XG4gICAgLy8gVGhpcyBpcyBmb3JnaXZpbmcgaW4gdGVybXMgb2YgdW5uZWNlc3NhcnkgY2FsbHMgdG8gZW5kKCkgYW5kIGNhbiBoaWRlXG4gICAgLy8gbG9naWMgZXJyb3JzLiBIb3dldmVyLCB1c3VhbGx5IHN1Y2ggZXJyb3JzIGFyZSBoYXJtbGVzcyBhbmQgY2F1c2luZyBhXG4gICAgLy8gaGFyZCBlcnJvciBjYW4gYmUgZGlzcHJvcG9ydGlvbmF0ZWx5IGRlc3RydWN0aXZlLiBJdCBpcyBub3QgYWx3YXlzXG4gICAgLy8gdHJpdmlhbCBmb3IgdGhlIHVzZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgZW5kKCkgbmVlZHMgdG8gYmUgY2FsbGVkXG4gICAgLy8gb3Igbm90LlxuXG4gICAgc3RhdGUuZW5kaW5nID0gdHJ1ZVxuICAgIGZpbmlzaE1heWJlKHRoaXMsIHN0YXRlLCB0cnVlKVxuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZVxuICB9IGVsc2UgaWYgKHN0YXRlLmZpbmlzaGVkKSB7XG4gICAgZXJyID0gbmV3IEVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRCgnZW5kJylcbiAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ2VuZCcpXG4gIH1cbiAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChlcnIgfHwgc3RhdGUuZmluaXNoZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVba09uRmluaXNoZWRdLnB1c2goY2IpXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiAoXG4gICAgc3RhdGUuZW5kaW5nICYmXG4gICAgIXN0YXRlLmRlc3Ryb3llZCAmJlxuICAgIHN0YXRlLmNvbnN0cnVjdGVkICYmXG4gICAgc3RhdGUubGVuZ3RoID09PSAwICYmXG4gICAgIXN0YXRlLmVycm9yZWQgJiZcbiAgICBzdGF0ZS5idWZmZXJlZC5sZW5ndGggPT09IDAgJiZcbiAgICAhc3RhdGUuZmluaXNoZWQgJiZcbiAgICAhc3RhdGUud3JpdGluZyAmJlxuICAgICFzdGF0ZS5lcnJvckVtaXR0ZWQgJiZcbiAgICAhc3RhdGUuY2xvc2VFbWl0dGVkXG4gIClcbn1cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIGxldCBjYWxsZWQgPSBmYWxzZVxuICBmdW5jdGlvbiBvbkZpbmlzaChlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciAhPT0gbnVsbCAmJiBlcnIgIT09IHVuZGVmaW5lZCA/IGVyciA6IEVSUl9NVUxUSVBMRV9DQUxMQkFDSygpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWVcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLVxuICAgIGlmIChlcnIpIHtcbiAgICAgIGNvbnN0IG9uZmluaXNoQ2FsbGJhY2tzID0gc3RhdGVba09uRmluaXNoZWRdLnNwbGljZSgwKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBvbmZpbmlzaENhbGxiYWNrc1tpXShlcnIpXG4gICAgICB9XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgc3RhdGUuc3luYylcbiAgICB9IGVsc2UgaWYgKG5lZWRGaW5pc2goc3RhdGUpKSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWVcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKVxuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdC4gRG9uJ3QgY2hlY2sgc3RhdGUuc3luYyBoZXJlLlxuICAgICAgLy8gU29tZSBzdHJlYW1zIGFzc3VtZSAnZmluaXNoJyB3aWxsIGJlIGVtaXR0ZWRcbiAgICAgIC8vIGFzeW5jaHJvbm91c2x5IHJlbGF0aXZlIHRvIF9maW5hbCBjYWxsYmFjay5cbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZpbmlzaCwgc3RyZWFtLCBzdGF0ZSlcbiAgICB9XG4gIH1cbiAgc3RhdGUuc3luYyA9IHRydWVcbiAgc3RhdGUucGVuZGluZ2NiKytcbiAgdHJ5IHtcbiAgICBzdHJlYW0uX2ZpbmFsKG9uRmluaXNoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBvbkZpbmlzaChlcnIpXG4gIH1cbiAgc3RhdGUuc3luYyA9IGZhbHNlXG59XG5mdW5jdGlvbiBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnByZWZpbmlzaGVkICYmICFzdGF0ZS5maW5hbENhbGxlZCkge1xuICAgIGlmICh0eXBlb2Ygc3RyZWFtLl9maW5hbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICBzdGF0ZS5maW5hbENhbGxlZCA9IHRydWVcbiAgICAgIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWVcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSwgc3luYykge1xuICBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSlcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBzdGF0ZS5wZW5kaW5nY2IrK1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKFxuICAgICAgICAgIChzdHJlYW0sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICAgICAgICAgICAgZmluaXNoKHN0cmVhbSwgc3RhdGUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGF0ZS5wZW5kaW5nY2ItLVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICAgICAgc3RhdGUucGVuZGluZ2NiKytcbiAgICAgICAgZmluaXNoKHN0cmVhbSwgc3RhdGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBzdGF0ZS5wZW5kaW5nY2ItLVxuICBzdGF0ZS5maW5pc2hlZCA9IHRydWVcbiAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb25maW5pc2hDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICBvbmZpbmlzaENhbGxiYWNrc1tpXSgpXG4gIH1cbiAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpXG4gIGlmIChzdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAvLyBpZiB0aGUgcmVhZGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbC5cbiAgICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgICBjb25zdCBhdXRvRGVzdHJveSA9XG4gICAgICAhclN0YXRlIHx8XG4gICAgICAoclN0YXRlLmF1dG9EZXN0cm95ICYmXG4gICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0aGUgcmVhZGFibGUgdG8gZXZlciAnZW5kJ1xuICAgICAgICAvLyBpZiByZWFkYWJsZSBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZS5cbiAgICAgICAgKHJTdGF0ZS5lbmRFbWl0dGVkIHx8IHJTdGF0ZS5yZWFkYWJsZSA9PT0gZmFsc2UpKVxuICAgIGlmIChhdXRvRGVzdHJveSkge1xuICAgICAgc3RyZWFtLmRlc3Ryb3koKVxuICAgIH1cbiAgfVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhXcml0YWJsZS5wcm90b3R5cGUsIHtcbiAgY2xvc2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5jbG9zZWQgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZGVzdHJveWVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgOiBmYWxzZVxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5IG1hbmFnaW5nIGRlc3Ryb3llZC5cbiAgICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHcgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gICAgICAvLyB3LndyaXRhYmxlID09PSBmYWxzZSBtZWFucyB0aGF0IHRoaXMgaXMgcGFydCBvZiBhIER1cGxleCBzdHJlYW1cbiAgICAgIC8vIHdoZXJlIHRoZSB3cml0YWJsZSBzaWRlIHdhcyBkaXNhYmxlZCB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgIC8vIENvbXBhdC4gVGhlIHVzZXIgbWlnaHQgbWFudWFsbHkgZGlzYWJsZSB3cml0YWJsZSBzaWRlIHRocm91Z2hcbiAgICAgIC8vIGRlcHJlY2F0ZWQgc2V0dGVyLlxuICAgICAgcmV0dXJuICEhdyAmJiB3LndyaXRhYmxlICE9PSBmYWxzZSAmJiAhdy5kZXN0cm95ZWQgJiYgIXcuZXJyb3JlZCAmJiAhdy5lbmRpbmcgJiYgIXcuZW5kZWRcbiAgICB9LFxuICAgIHNldCh2YWwpIHtcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmxlLlxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9ICEhdmFsXG4gICAgICB9XG4gICAgfVxuICB9LFxuICB3cml0YWJsZUZpbmlzaGVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA6IGZhbHNlXG4gICAgfVxuICB9LFxuICB3cml0YWJsZU9iamVjdE1vZGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLm9iamVjdE1vZGUgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVCdWZmZXI6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVFbmRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nIDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlTmVlZERyYWluOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHdTdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgICAgIGlmICghd1N0YXRlKSByZXR1cm4gZmFsc2VcbiAgICAgIHJldHVybiAhd1N0YXRlLmRlc3Ryb3llZCAmJiAhd1N0YXRlLmVuZGluZyAmJiB3U3RhdGUubmVlZERyYWluXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUhpZ2hXYXRlck1hcms6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUNvcmtlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkIDogMFxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVMZW5ndGg6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGhcbiAgICB9XG4gIH0sXG4gIGVycm9yZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWQgOiBudWxsXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUFib3J0ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGUgIT09IGZhbHNlICYmXG4gICAgICAgICh0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWQpICYmXG4gICAgICAgICF0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkXG4gICAgICApXG4gICAgfVxuICB9XG59KVxuY29uc3QgZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3lcbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG5cbiAgLy8gSW52b2tlIHBlbmRpbmcgY2FsbGJhY2tzLlxuICBpZiAoIXN0YXRlLmRlc3Ryb3llZCAmJiAoc3RhdGUuYnVmZmVyZWRJbmRleCA8IHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCB8fCBzdGF0ZVtrT25GaW5pc2hlZF0ubGVuZ3RoKSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZXJyb3JCdWZmZXIsIHN0YXRlKVxuICB9XG4gIGRlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGNiKVxuICByZXR1cm4gdGhpc1xufVxuV3JpdGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3lcbldyaXRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycilcbn1cbldyaXRhYmxlLnByb3RvdHlwZVtFRS5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgdGhpcy5kZXN0cm95KGVycilcbn1cbmxldCB3ZWJTdHJlYW1zQWRhcHRlcnNcblxuLy8gTGF6eSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG5mdW5jdGlvbiBsYXp5V2ViU3RyZWFtcygpIHtcbiAgaWYgKHdlYlN0cmVhbXNBZGFwdGVycyA9PT0gdW5kZWZpbmVkKSB3ZWJTdHJlYW1zQWRhcHRlcnMgPSB7fVxuICByZXR1cm4gd2ViU3RyZWFtc0FkYXB0ZXJzXG59XG5Xcml0YWJsZS5mcm9tV2ViID0gZnVuY3Rpb24gKHdyaXRhYmxlU3RyZWFtLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1N0cmVhbVdyaXRhYmxlRnJvbVdyaXRhYmxlU3RyZWFtKHdyaXRhYmxlU3RyZWFtLCBvcHRpb25zKVxufVxuV3JpdGFibGUudG9XZWIgPSBmdW5jdGlvbiAoc3RyZWFtV3JpdGFibGUpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3V3JpdGFibGVTdHJlYW1Gcm9tU3RyZWFtV3JpdGFibGUoc3RyZWFtV3JpdGFibGUpXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IGJ1ZmZlck1vZHVsZSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7XG4gIGlzUmVhZGFibGUsXG4gIGlzV3JpdGFibGUsXG4gIGlzSXRlcmFibGUsXG4gIGlzTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzV3JpdGFibGVOb2RlU3RyZWFtLFxuICBpc0R1cGxleE5vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzV3JpdGFibGVTdHJlYW1cbn0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCB7XG4gIEFib3J0RXJyb3IsXG4gIGNvZGVzOiB7IEVSUl9JTlZBTElEX0FSR19UWVBFLCBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUgfVxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgZGVzdHJveWVyIH0gPSByZXF1aXJlKCcuL2Rlc3Ryb3knKVxuY29uc3QgRHVwbGV4ID0gcmVxdWlyZSgnLi9kdXBsZXgnKVxuY29uc3QgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IFdyaXRhYmxlID0gcmVxdWlyZSgnLi93cml0YWJsZScpXG5jb25zdCB7IGNyZWF0ZURlZmVycmVkUHJvbWlzZSB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJylcbmNvbnN0IGZyb20gPSByZXF1aXJlKCcuL2Zyb20nKVxuY29uc3QgQmxvYiA9IGdsb2JhbFRoaXMuQmxvYiB8fCBidWZmZXJNb2R1bGUuQmxvYlxuY29uc3QgaXNCbG9iID1cbiAgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnXG4gICAgPyBmdW5jdGlvbiBpc0Jsb2IoYikge1xuICAgICAgICByZXR1cm4gYiBpbnN0YW5jZW9mIEJsb2JcbiAgICAgIH1cbiAgICA6IGZ1bmN0aW9uIGlzQmxvYihiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuY29uc3QgQWJvcnRDb250cm9sbGVyID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIgfHwgcmVxdWlyZSgnYWJvcnQtY29udHJvbGxlcicpLkFib3J0Q29udHJvbGxlclxuY29uc3QgeyBGdW5jdGlvblByb3RvdHlwZUNhbGwgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuXG4vLyBUaGlzIGlzIG5lZWRlZCBmb3IgcHJlIG5vZGUgMTcuXG5jbGFzcyBEdXBsZXhpZnkgZXh0ZW5kcyBEdXBsZXgge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0Mzg1XG5cbiAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5yZWFkYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLndyaXRhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGUgPSBmYWxzZVxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSB0cnVlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gdHJ1ZVxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IHRydWVcbiAgICB9XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZHVwbGV4aWZ5KGJvZHksIG5hbWUpIHtcbiAgaWYgKGlzRHVwbGV4Tm9kZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBib2R5XG4gIH1cbiAgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgcmVhZGFibGU6IGJvZHlcbiAgICB9KVxuICB9XG4gIGlmIChpc1dyaXRhYmxlTm9kZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBfZHVwbGV4aWZ5KHtcbiAgICAgIHdyaXRhYmxlOiBib2R5XG4gICAgfSlcbiAgfVxuICBpZiAoaXNOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgcmVhZGFibGU6IGZhbHNlXG4gICAgfSlcbiAgfVxuICBpZiAoaXNSZWFkYWJsZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBfZHVwbGV4aWZ5KHtcbiAgICAgIHJlYWRhYmxlOiBSZWFkYWJsZS5mcm9tV2ViKGJvZHkpXG4gICAgfSlcbiAgfVxuICBpZiAoaXNXcml0YWJsZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBfZHVwbGV4aWZ5KHtcbiAgICAgIHdyaXRhYmxlOiBXcml0YWJsZS5mcm9tV2ViKGJvZHkpXG4gICAgfSlcbiAgfVxuICBpZiAodHlwZW9mIGJvZHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCB7IHZhbHVlLCB3cml0ZSwgZmluYWwsIGRlc3Ryb3kgfSA9IGZyb21Bc3luY0dlbihib2R5KVxuICAgIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZyb20oRHVwbGV4aWZ5LCB2YWx1ZSwge1xuICAgICAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgIHdyaXRlLFxuICAgICAgICBmaW5hbCxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgdGhlbiA9IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWx1ZS50aGVuXG4gICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgZFxuICAgICAgY29uc3QgcHJvbWlzZSA9IEZ1bmN0aW9uUHJvdG90eXBlQ2FsbChcbiAgICAgICAgdGhlbixcbiAgICAgICAgdmFsdWUsXG4gICAgICAgICh2YWwpID0+IHtcbiAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ251bGx5JywgJ2JvZHknLCB2YWwpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgZGVzdHJveWVyKGQsIGVycilcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgcmV0dXJuIChkID0gbmV3IER1cGxleGlmeSh7XG4gICAgICAgIC8vIFRPRE8gKHJvbmFnKTogaGlnaFdhdGVyTWFyaz9cbiAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgcmVhZGFibGU6IGZhbHNlLFxuICAgICAgICB3cml0ZSxcbiAgICAgICAgZmluYWwoY2IpIHtcbiAgICAgICAgICBmaW5hbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBwcm9taXNlXG4gICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIG51bGwpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXJyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGRlc3Ryb3lcbiAgICAgIH0pKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKCdJdGVyYWJsZSwgQXN5bmNJdGVyYWJsZSBvciBBc3luY0Z1bmN0aW9uJywgbmFtZSwgdmFsdWUpXG4gIH1cbiAgaWYgKGlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBkdXBsZXhpZnkoYm9keS5hcnJheUJ1ZmZlcigpKVxuICB9XG4gIGlmIChpc0l0ZXJhYmxlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGZyb20oRHVwbGV4aWZ5LCBib2R5LCB7XG4gICAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgfSlcbiAgfVxuICBpZiAoXG4gICAgaXNSZWFkYWJsZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkucmVhZGFibGUpICYmXG4gICAgaXNXcml0YWJsZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkud3JpdGFibGUpXG4gICkge1xuICAgIHJldHVybiBEdXBsZXhpZnkuZnJvbVdlYihib2R5KVxuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS53cml0YWJsZSkgPT09ICdvYmplY3QnIHx8XG4gICAgdHlwZW9mIChib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkucmVhZGFibGUpID09PSAnb2JqZWN0J1xuICApIHtcbiAgICBjb25zdCByZWFkYWJsZSA9XG4gICAgICBib2R5ICE9PSBudWxsICYmIGJvZHkgIT09IHVuZGVmaW5lZCAmJiBib2R5LnJlYWRhYmxlXG4gICAgICAgID8gaXNSZWFkYWJsZU5vZGVTdHJlYW0oYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBib2R5LnJlYWRhYmxlKVxuICAgICAgICAgID8gYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IGJvZHkucmVhZGFibGVcbiAgICAgICAgICA6IGR1cGxleGlmeShib2R5LnJlYWRhYmxlKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IHdyaXRhYmxlID1cbiAgICAgIGJvZHkgIT09IG51bGwgJiYgYm9keSAhPT0gdW5kZWZpbmVkICYmIGJvZHkud3JpdGFibGVcbiAgICAgICAgPyBpc1dyaXRhYmxlTm9kZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkud3JpdGFibGUpXG4gICAgICAgICAgPyBib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogYm9keS53cml0YWJsZVxuICAgICAgICAgIDogZHVwbGV4aWZ5KGJvZHkud3JpdGFibGUpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgcmVhZGFibGUsXG4gICAgICB3cml0YWJsZVxuICAgIH0pXG4gIH1cbiAgY29uc3QgdGhlbiA9IGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS50aGVuXG4gIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGxldCBkXG4gICAgRnVuY3Rpb25Qcm90b3R5cGVDYWxsKFxuICAgICAgdGhlbixcbiAgICAgIGJvZHksXG4gICAgICAodmFsKSA9PiB7XG4gICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgICAgIGQucHVzaCh2YWwpXG4gICAgICAgIH1cbiAgICAgICAgZC5wdXNoKG51bGwpXG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBkZXN0cm95ZXIoZCwgZXJyKVxuICAgICAgfVxuICAgIClcbiAgICByZXR1cm4gKGQgPSBuZXcgRHVwbGV4aWZ5KHtcbiAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICByZWFkKCkge31cbiAgICB9KSlcbiAgfVxuICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgbmFtZSxcbiAgICBbXG4gICAgICAnQmxvYicsXG4gICAgICAnUmVhZGFibGVTdHJlYW0nLFxuICAgICAgJ1dyaXRhYmxlU3RyZWFtJyxcbiAgICAgICdTdHJlYW0nLFxuICAgICAgJ0l0ZXJhYmxlJyxcbiAgICAgICdBc3luY0l0ZXJhYmxlJyxcbiAgICAgICdGdW5jdGlvbicsXG4gICAgICAneyByZWFkYWJsZSwgd3JpdGFibGUgfSBwYWlyJyxcbiAgICAgICdQcm9taXNlJ1xuICAgIF0sXG4gICAgYm9keVxuICApXG59XG5mdW5jdGlvbiBmcm9tQXN5bmNHZW4oZm4pIHtcbiAgbGV0IHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcbiAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgY29uc3Qgc2lnbmFsID0gYWMuc2lnbmFsXG4gIGNvbnN0IHZhbHVlID0gZm4oXG4gICAgKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBfcHJvbWlzZSA9IHByb21pc2VcbiAgICAgICAgcHJvbWlzZSA9IG51bGxcbiAgICAgICAgY29uc3QgeyBjaHVuaywgZG9uZSwgY2IgfSA9IGF3YWl0IF9wcm9taXNlXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgICAgIGlmIChkb25lKSByZXR1cm5cbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKVxuICAgICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgY2F1c2U6IHNpZ25hbC5yZWFzb25cbiAgICAgICAgICB9KVxuICAgICAgICA7KHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKCkpXG4gICAgICAgIHlpZWxkIGNodW5rXG4gICAgICB9XG4gICAgfSkoKSxcbiAgICB7XG4gICAgICBzaWduYWxcbiAgICB9XG4gIClcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZSxcbiAgICB3cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICBjb25zdCBfcmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIHJlc29sdmUgPSBudWxsXG4gICAgICBfcmVzb2x2ZSh7XG4gICAgICAgIGNodW5rLFxuICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgY2JcbiAgICAgIH0pXG4gICAgfSxcbiAgICBmaW5hbChjYikge1xuICAgICAgY29uc3QgX3Jlc29sdmUgPSByZXNvbHZlXG4gICAgICByZXNvbHZlID0gbnVsbFxuICAgICAgX3Jlc29sdmUoe1xuICAgICAgICBkb25lOiB0cnVlLFxuICAgICAgICBjYlxuICAgICAgfSlcbiAgICB9LFxuICAgIGRlc3Ryb3koZXJyLCBjYikge1xuICAgICAgYWMuYWJvcnQoKVxuICAgICAgY2IoZXJyKVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gX2R1cGxleGlmeShwYWlyKSB7XG4gIGNvbnN0IHIgPSBwYWlyLnJlYWRhYmxlICYmIHR5cGVvZiBwYWlyLnJlYWRhYmxlLnJlYWQgIT09ICdmdW5jdGlvbicgPyBSZWFkYWJsZS53cmFwKHBhaXIucmVhZGFibGUpIDogcGFpci5yZWFkYWJsZVxuICBjb25zdCB3ID0gcGFpci53cml0YWJsZVxuICBsZXQgcmVhZGFibGUgPSAhIWlzUmVhZGFibGUocilcbiAgbGV0IHdyaXRhYmxlID0gISFpc1dyaXRhYmxlKHcpXG4gIGxldCBvbmRyYWluXG4gIGxldCBvbmZpbmlzaFxuICBsZXQgb25yZWFkYWJsZVxuICBsZXQgb25jbG9zZVxuICBsZXQgZFxuICBmdW5jdGlvbiBvbmZpbmlzaGVkKGVycikge1xuICAgIGNvbnN0IGNiID0gb25jbG9zZVxuICAgIG9uY2xvc2UgPSBudWxsXG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpXG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGQuZGVzdHJveShlcnIpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyhyb25hZyk6IEF2b2lkIGRvdWJsZSBidWZmZXJpbmcuXG4gIC8vIEltcGxlbWVudCBXcml0YWJsZS9SZWFkYWJsZS9EdXBsZXggdHJhaXRzLlxuICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzMzNTE1LlxuICBkID0gbmV3IER1cGxleGlmeSh7XG4gICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogISEociAhPT0gbnVsbCAmJiByICE9PSB1bmRlZmluZWQgJiYgci5yZWFkYWJsZU9iamVjdE1vZGUpLFxuICAgIHdyaXRhYmxlT2JqZWN0TW9kZTogISEodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy53cml0YWJsZU9iamVjdE1vZGUpLFxuICAgIHJlYWRhYmxlLFxuICAgIHdyaXRhYmxlXG4gIH0pXG4gIGlmICh3cml0YWJsZSkge1xuICAgIGVvcyh3LCAoZXJyKSA9PiB7XG4gICAgICB3cml0YWJsZSA9IGZhbHNlXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGRlc3Ryb3llcihyLCBlcnIpXG4gICAgICB9XG4gICAgICBvbmZpbmlzaGVkKGVycilcbiAgICB9KVxuICAgIGQuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgIGlmICh3LndyaXRlKGNodW5rLCBlbmNvZGluZykpIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25kcmFpbiA9IGNhbGxiYWNrXG4gICAgICB9XG4gICAgfVxuICAgIGQuX2ZpbmFsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB3LmVuZCgpXG4gICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrXG4gICAgfVxuICAgIHcub24oJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9uZHJhaW4pIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbmRyYWluXG4gICAgICAgIG9uZHJhaW4gPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHcub24oJ2ZpbmlzaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbmZpbmlzaCkge1xuICAgICAgICBjb25zdCBjYiA9IG9uZmluaXNoXG4gICAgICAgIG9uZmluaXNoID0gbnVsbFxuICAgICAgICBjYigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBpZiAocmVhZGFibGUpIHtcbiAgICBlb3MociwgKGVycikgPT4ge1xuICAgICAgcmVhZGFibGUgPSBmYWxzZVxuICAgICAgaWYgKGVycikge1xuICAgICAgICBkZXN0cm95ZXIociwgZXJyKVxuICAgICAgfVxuICAgICAgb25maW5pc2hlZChlcnIpXG4gICAgfSlcbiAgICByLm9uKCdyZWFkYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbnJlYWRhYmxlKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25yZWFkYWJsZVxuICAgICAgICBvbnJlYWRhYmxlID0gbnVsbFxuICAgICAgICBjYigpXG4gICAgICB9XG4gICAgfSlcbiAgICByLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkLnB1c2gobnVsbClcbiAgICB9KVxuICAgIGQuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBidWYgPSByLnJlYWQoKVxuICAgICAgICBpZiAoYnVmID09PSBudWxsKSB7XG4gICAgICAgICAgb25yZWFkYWJsZSA9IGQuX3JlYWRcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWQucHVzaChidWYpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZC5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgb25jbG9zZSAhPT0gbnVsbCkge1xuICAgICAgZXJyID0gbmV3IEFib3J0RXJyb3IoKVxuICAgIH1cbiAgICBvbnJlYWRhYmxlID0gbnVsbFxuICAgIG9uZHJhaW4gPSBudWxsXG4gICAgb25maW5pc2ggPSBudWxsXG4gICAgaWYgKG9uY2xvc2UgPT09IG51bGwpIHtcbiAgICAgIGNhbGxiYWNrKGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgb25jbG9zZSA9IGNhbGxiYWNrXG4gICAgICBkZXN0cm95ZXIodywgZXJyKVxuICAgICAgZGVzdHJveWVyKHIsIGVycilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRcbn1cbiIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgZHVwbGV4IHN0cmVhbSBpcyBqdXN0IGEgc3RyZWFtIHRoYXQgaXMgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUuXG4vLyBTaW5jZSBKUyBkb2Vzbid0IGhhdmUgbXVsdGlwbGUgcHJvdG90eXBlIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGljYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzLFxuICBPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIE9iamVjdEtleXMsXG4gIE9iamVjdFNldFByb3RvdHlwZU9mXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleFxuY29uc3QgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IFdyaXRhYmxlID0gcmVxdWlyZSgnLi93cml0YWJsZScpXG5PYmplY3RTZXRQcm90b3R5cGVPZihEdXBsZXgucHJvdG90eXBlLCBSZWFkYWJsZS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihEdXBsZXgsIFJlYWRhYmxlKVxue1xuICBjb25zdCBrZXlzID0gT2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpXG4gIC8vIEFsbG93IHRoZSBrZXlzIGFycmF5IHRvIGJlIEdDJ2VkLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBtZXRob2QgPSBrZXlzW2ldXG4gICAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIER1cGxleC5wcm90b3R5cGVbbWV0aG9kXSA9IFdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdXG4gIH1cbn1cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKVxuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpXG4gIFdyaXRhYmxlLmNhbGwodGhpcywgb3B0aW9ucylcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSBvcHRpb25zLmFsbG93SGFsZk9wZW4gIT09IGZhbHNlXG4gICAgaWYgKG9wdGlvbnMucmVhZGFibGUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChvcHRpb25zLndyaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IHRydWVcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlXG4gIH1cbn1cbk9iamVjdERlZmluZVByb3BlcnRpZXMoRHVwbGV4LnByb3RvdHlwZSwge1xuICB3cml0YWJsZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGUnKVxuICB9LFxuICB3cml0YWJsZUhpZ2hXYXRlck1hcms6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycpXG4gIH0sXG4gIHdyaXRhYmxlT2JqZWN0TW9kZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVPYmplY3RNb2RlJylcbiAgfSxcbiAgd3JpdGFibGVCdWZmZXI6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJylcbiAgfSxcbiAgd3JpdGFibGVMZW5ndGg6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlTGVuZ3RoJylcbiAgfSxcbiAgd3JpdGFibGVGaW5pc2hlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVGaW5pc2hlZCcpXG4gIH0sXG4gIHdyaXRhYmxlQ29ya2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUNvcmtlZCcpXG4gIH0sXG4gIHdyaXRhYmxlRW5kZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlRW5kZWQnKVxuICB9LFxuICB3cml0YWJsZU5lZWREcmFpbjoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVOZWVkRHJhaW4nKVxuICB9LFxuICBkZXN0cm95ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWRcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlXG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5sZXQgd2ViU3RyZWFtc0FkYXB0ZXJzXG5cbi8vIExhenkgdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuZnVuY3Rpb24gbGF6eVdlYlN0cmVhbXMoKSB7XG4gIGlmICh3ZWJTdHJlYW1zQWRhcHRlcnMgPT09IHVuZGVmaW5lZCkgd2ViU3RyZWFtc0FkYXB0ZXJzID0ge31cbiAgcmV0dXJuIHdlYlN0cmVhbXNBZGFwdGVyc1xufVxuRHVwbGV4LmZyb21XZWIgPSBmdW5jdGlvbiAocGFpciwgb3B0aW9ucykge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdTdHJlYW1EdXBsZXhGcm9tUmVhZGFibGVXcml0YWJsZVBhaXIocGFpciwgb3B0aW9ucylcbn1cbkR1cGxleC50b1dlYiA9IGZ1bmN0aW9uIChkdXBsZXgpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3UmVhZGFibGVXcml0YWJsZVBhaXJGcm9tRHVwbGV4KGR1cGxleClcbn1cbmxldCBkdXBsZXhpZnlcbkR1cGxleC5mcm9tID0gZnVuY3Rpb24gKGJvZHkpIHtcbiAgaWYgKCFkdXBsZXhpZnkpIHtcbiAgICBkdXBsZXhpZnkgPSByZXF1aXJlKCcuL2R1cGxleGlmeScpXG4gIH1cbiAgcmV0dXJuIGR1cGxleGlmeShib2R5LCAnYm9keScpXG59XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHRyYW5zZm9ybSBzdHJlYW0gaXMgYSByZWFkYWJsZS93cml0YWJsZSBzdHJlYW0gd2hlcmUgeW91IGRvXG4vLyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gIFNvbWV0aW1lcyBpdCdzIGNhbGxlZCBhIFwiZmlsdGVyXCIsXG4vLyBidXQgdGhhdCdzIG5vdCBhIGdyZWF0IG5hbWUgZm9yIGl0LCBzaW5jZSB0aGF0IGltcGxpZXMgYSB0aGluZyB3aGVyZVxuLy8gc29tZSBiaXRzIHBhc3MgdGhyb3VnaCwgYW5kIG90aGVycyBhcmUgc2ltcGx5IGlnbm9yZWQuICAoVGhhdCB3b3VsZFxuLy8gYmUgYSB2YWxpZCBleGFtcGxlIG9mIGEgdHJhbnNmb3JtLCBvZiBjb3Vyc2UuKVxuLy9cbi8vIFdoaWxlIHRoZSBvdXRwdXQgaXMgY2F1c2FsbHkgcmVsYXRlZCB0byB0aGUgaW5wdXQsIGl0J3Mgbm90IGFcbi8vIG5lY2Vzc2FyaWx5IHN5bW1ldHJpYyBvciBzeW5jaHJvbm91cyB0cmFuc2Zvcm1hdGlvbi4gIEZvciBleGFtcGxlLFxuLy8gYSB6bGliIHN0cmVhbSBtaWdodCB0YWtlIG11bHRpcGxlIHBsYWluLXRleHQgd3JpdGVzKCksIGFuZCB0aGVuXG4vLyBlbWl0IGEgc2luZ2xlIGNvbXByZXNzZWQgY2h1bmsgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuXG4vL1xuLy8gSGVyZSdzIGhvdyB0aGlzIHdvcmtzOlxuLy9cbi8vIFRoZSBUcmFuc2Zvcm0gc3RyZWFtIGhhcyBhbGwgdGhlIGFzcGVjdHMgb2YgdGhlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuLy8gc3RyZWFtIGNsYXNzZXMuICBXaGVuIHlvdSB3cml0ZShjaHVuayksIHRoYXQgY2FsbHMgX3dyaXRlKGNodW5rLGNiKVxuLy8gaW50ZXJuYWxseSwgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBhIGxvdCBvZiBwZW5kaW5nIHdyaXRlc1xuLy8gYnVmZmVyZWQgdXAuICBXaGVuIHlvdSBjYWxsIHJlYWQoKSwgdGhhdCBjYWxscyBfcmVhZChuKSB1bnRpbFxuLy8gdGhlcmUncyBlbm91Z2ggcGVuZGluZyByZWFkYWJsZSBkYXRhIGJ1ZmZlcmVkIHVwLlxuLy9cbi8vIEluIGEgdHJhbnNmb3JtIHN0cmVhbSwgdGhlIHdyaXR0ZW4gZGF0YSBpcyBwbGFjZWQgaW4gYSBidWZmZXIuICBXaGVuXG4vLyBfcmVhZChuKSBpcyBjYWxsZWQsIGl0IHRyYW5zZm9ybXMgdGhlIHF1ZXVlZCB1cCBkYXRhLCBjYWxsaW5nIHRoZVxuLy8gYnVmZmVyZWQgX3dyaXRlIGNiJ3MgYXMgaXQgY29uc3VtZXMgY2h1bmtzLiAgSWYgY29uc3VtaW5nIGEgc2luZ2xlXG4vLyB3cml0dGVuIGNodW5rIHdvdWxkIHJlc3VsdCBpbiBtdWx0aXBsZSBvdXRwdXQgY2h1bmtzLCB0aGVuIHRoZSBmaXJzdFxuLy8gb3V0cHV0dGVkIGJpdCBjYWxscyB0aGUgcmVhZGNiLCBhbmQgc3Vic2VxdWVudCBjaHVua3MganVzdCBnbyBpbnRvXG4vLyB0aGUgcmVhZCBidWZmZXIsIGFuZCB3aWxsIGNhdXNlIGl0IHRvIGVtaXQgJ3JlYWRhYmxlJyBpZiBuZWNlc3NhcnkuXG4vL1xuLy8gVGhpcyB3YXksIGJhY2stcHJlc3N1cmUgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcmVhZGluZyBzaWRlLFxuLy8gc2luY2UgX3JlYWQgaGFzIHRvIGJlIGNhbGxlZCB0byBzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGNodW5rLiAgSG93ZXZlcixcbi8vIGEgcGF0aG9sb2dpY2FsIGluZmxhdGUgdHlwZSBvZiB0cmFuc2Zvcm0gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBidWZmZXJpbmdcbi8vIGhlcmUuICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhIHN0cmVhbSB3aGVyZSBldmVyeSBieXRlIG9mIGlucHV0IGlzXG4vLyBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIGZyb20gMC0yNTUsIGFuZCB0aGVuIHJlc3VsdHMgaW4gdGhhdCBtYW55XG4vLyBieXRlcyBvZiBvdXRwdXQuICBXcml0aW5nIHRoZSA0IGJ5dGVzIHtmZixmZixmZixmZn0gd291bGQgcmVzdWx0IGluXG4vLyAxa2Igb2YgZGF0YSBiZWluZyBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIHlvdSBjb3VsZCB3cml0ZSBhIHZlcnkgc21hbGxcbi8vIGFtb3VudCBvZiBpbnB1dCwgYW5kIGVuZCB1cCB3aXRoIGEgdmVyeSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0LiAgSW5cbi8vIHN1Y2ggYSBwYXRob2xvZ2ljYWwgaW5mbGF0aW5nIG1lY2hhbmlzbSwgdGhlcmUnZCBiZSBubyB3YXkgdG8gdGVsbFxuLy8gdGhlIHN5c3RlbSB0byBzdG9wIGRvaW5nIHRoZSB0cmFuc2Zvcm0uICBBIHNpbmdsZSA0TUIgd3JpdGUgY291bGRcbi8vIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuXG4vL1xuLy8gSG93ZXZlciwgZXZlbiBpbiBzdWNoIGEgcGF0aG9sb2dpY2FsIGNhc2UsIG9ubHkgYSBzaW5nbGUgd3JpdHRlbiBjaHVua1xuLy8gd291bGQgYmUgY29uc3VtZWQsIGFuZCB0aGVuIHRoZSByZXN0IHdvdWxkIHdhaXQgKHVuLXRyYW5zZm9ybWVkKSB1bnRpbFxuLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHRyYW5zZm9ybWVkIGNodW5rIHdlcmUgY29uc3VtZWQuXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE9iamVjdFNldFByb3RvdHlwZU9mLCBTeW1ib2wgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm1cbmNvbnN0IHsgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJykuY29kZXNcbmNvbnN0IER1cGxleCA9IHJlcXVpcmUoJy4vZHVwbGV4JylcbmNvbnN0IHsgZ2V0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9zdGF0ZScpXG5PYmplY3RTZXRQcm90b3R5cGVPZihUcmFuc2Zvcm0ucHJvdG90eXBlLCBEdXBsZXgucHJvdG90eXBlKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoVHJhbnNmb3JtLCBEdXBsZXgpXG5jb25zdCBrQ2FsbGJhY2sgPSBTeW1ib2woJ2tDYWxsYmFjaycpXG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucylcblxuICAvLyBUT0RPIChyb25hZyk6IFRoaXMgc2hvdWxkIHByZWZlcmFibHkgYWx3YXlzIGJlXG4gIC8vIGFwcGxpZWQgYnV0IHdvdWxkIGJlIHNlbXZlci1tYWpvci4gT3IgZXZlbiBiZXR0ZXI7XG4gIC8vIG1ha2UgVHJhbnNmb3JtIGEgUmVhZGFibGUgd2l0aCB0aGUgV3JpdGFibGUgaW50ZXJmYWNlLlxuICBjb25zdCByZWFkYWJsZUhpZ2hXYXRlck1hcmsgPSBvcHRpb25zID8gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywgdHJ1ZSkgOiBudWxsXG4gIGlmIChyZWFkYWJsZUhpZ2hXYXRlck1hcmsgPT09IDApIHtcbiAgICAvLyBBIER1cGxleCB3aWxsIGJ1ZmZlciBib3RoIG9uIHRoZSB3cml0YWJsZSBhbmQgcmVhZGFibGUgc2lkZSB3aGlsZVxuICAgIC8vIGEgVHJhbnNmb3JtIGp1c3Qgd2FudHMgdG8gYnVmZmVyIGh3bSBudW1iZXIgb2YgZWxlbWVudHMuIFRvIGF2b2lkXG4gICAgLy8gYnVmZmVyaW5nIHR3aWNlIHdlIGRpc2FibGUgYnVmZmVyaW5nIG9uIHRoZSB3cml0YWJsZSBzaWRlLlxuICAgIG9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGlnaFdhdGVyTWFyazogbnVsbCxcbiAgICAgIHJlYWRhYmxlSGlnaFdhdGVyTWFyayxcbiAgICAgIC8vIFRPRE8gKHJvbmFnKTogMCBpcyBub3Qgb3B0aW1hbCBzaW5jZSB3ZSBoYXZlXG4gICAgICAvLyBhIFwiYnVnXCIgd2hlcmUgd2UgY2hlY2sgbmVlZERyYWluIGJlZm9yZSBjYWxsaW5nIF93cml0ZSBhbmQgbm90IGFmdGVyLlxuICAgICAgLy8gUmVmczogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzI4ODdcbiAgICAgIC8vIFJlZnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM1OTQxXG4gICAgICB3cml0YWJsZUhpZ2hXYXRlck1hcms6IG9wdGlvbnMud3JpdGFibGVIaWdoV2F0ZXJNYXJrIHx8IDBcbiAgICB9XG4gIH1cbiAgRHVwbGV4LmNhbGwodGhpcywgb3B0aW9ucylcblxuICAvLyBXZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlXG4gIHRoaXNba0NhbGxiYWNrXSA9IG51bGxcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoXG4gIH1cblxuICAvLyBXaGVuIHRoZSB3cml0YWJsZSBzaWRlIGZpbmlzaGVzLCB0aGVuIGZsdXNoIG91dCBhbnl0aGluZyByZW1haW5pbmcuXG4gIC8vIEJhY2t3YXJkcyBjb21wYXQuIFNvbWUgVHJhbnNmb3JtIHN0cmVhbXMgaW5jb3JyZWN0bHkgaW1wbGVtZW50IF9maW5hbFxuICAvLyBpbnN0ZWFkIG9mIG9yIGluIGFkZGl0aW9uIHRvIF9mbHVzaC4gQnkgdXNpbmcgJ3ByZWZpbmlzaCcgaW5zdGVhZCBvZlxuICAvLyBpbXBsZW1lbnRpbmcgX2ZpbmFsIHdlIGNvbnRpbnVlIHN1cHBvcnRpbmcgdGhpcyB1bmZvcnR1bmF0ZSB1c2UgY2FzZS5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKVxufVxuZnVuY3Rpb24gZmluYWwoY2IpIHtcbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICB0aGlzLl9mbHVzaCgoZXIsIGRhdGEpID0+IHtcbiAgICAgIGlmIChlcikge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICBjYihlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koZXIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZGF0YSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMucHVzaChkYXRhKVxuICAgICAgfVxuICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgICBpZiAoY2IpIHtcbiAgICAgICAgY2IoKVxuICAgICAgfVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5wdXNoKG51bGwpXG4gICAgaWYgKGNiKSB7XG4gICAgICBjYigpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcmVmaW5pc2goKSB7XG4gIGlmICh0aGlzLl9maW5hbCAhPT0gZmluYWwpIHtcbiAgICBmaW5hbC5jYWxsKHRoaXMpXG4gIH1cbn1cblRyYW5zZm9ybS5wcm90b3R5cGUuX2ZpbmFsID0gZmluYWxcblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIHRocm93IG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3RyYW5zZm9ybSgpJylcbn1cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgY29uc3QgclN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3U3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IGxlbmd0aCA9IHJTdGF0ZS5sZW5ndGhcbiAgdGhpcy5fdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgKGVyciwgdmFsKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgdGhpcy5wdXNoKHZhbClcbiAgICB9XG4gICAgaWYgKFxuICAgICAgd1N0YXRlLmVuZGVkIHx8XG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0LlxuICAgICAgbGVuZ3RoID09PSByU3RhdGUubGVuZ3RoIHx8XG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0LlxuICAgICAgclN0YXRlLmxlbmd0aCA8IHJTdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gICAgKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0NhbGxiYWNrXSA9IGNhbGxiYWNrXG4gICAgfVxuICB9KVxufVxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXNba0NhbGxiYWNrXSkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpc1trQ2FsbGJhY2tdXG4gICAgdGhpc1trQ2FsbGJhY2tdID0gbnVsbFxuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE9iamVjdFNldFByb3RvdHlwZU9mIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2hcbmNvbnN0IFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtJylcbk9iamVjdFNldFByb3RvdHlwZU9mKFBhc3NUaHJvdWdoLnByb3RvdHlwZSwgVHJhbnNmb3JtLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pXG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucylcbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucylcbn1cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9wdW1wIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHsgQXJyYXlJc0FycmF5LCBQcm9taXNlLCBTeW1ib2xBc3luY0l0ZXJhdG9yLCBTeW1ib2xEaXNwb3NlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCB7IG9uY2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5jb25zdCBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCBEdXBsZXggPSByZXF1aXJlKCcuL2R1cGxleCcpXG5jb25zdCB7XG4gIGFnZ3JlZ2F0ZVR3b0Vycm9ycyxcbiAgY29kZXM6IHtcbiAgICBFUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgICBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUsXG4gICAgRVJSX01JU1NJTkdfQVJHUyxcbiAgICBFUlJfU1RSRUFNX0RFU1RST1lFRCxcbiAgICBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVxuICB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZUFib3J0U2lnbmFsIH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IHtcbiAgaXNJdGVyYWJsZSxcbiAgaXNSZWFkYWJsZSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzTm9kZVN0cmVhbSxcbiAgaXNUcmFuc2Zvcm1TdHJlYW0sXG4gIGlzV2ViU3RyZWFtLFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlYWRhYmxlRmluaXNoZWRcbn0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IEFib3J0Q29udHJvbGxlciA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydENvbnRyb2xsZXJcbmxldCBQYXNzVGhyb3VnaFxubGV0IFJlYWRhYmxlXG5sZXQgYWRkQWJvcnRMaXN0ZW5lclxuZnVuY3Rpb24gZGVzdHJveWVyKHN0cmVhbSwgcmVhZGluZywgd3JpdGluZykge1xuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICBzdHJlYW0ub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICB9KVxuICBjb25zdCBjbGVhbnVwID0gZW9zKFxuICAgIHN0cmVhbSxcbiAgICB7XG4gICAgICByZWFkYWJsZTogcmVhZGluZyxcbiAgICAgIHdyaXRhYmxlOiB3cml0aW5nXG4gICAgfSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBmaW5pc2hlZCA9ICFlcnJcbiAgICB9XG4gIClcbiAgcmV0dXJuIHtcbiAgICBkZXN0cm95OiAoZXJyKSA9PiB7XG4gICAgICBpZiAoZmluaXNoZWQpIHJldHVyblxuICAgICAgZmluaXNoZWQgPSB0cnVlXG4gICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3RyZWFtLCBlcnIgfHwgbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCdwaXBlJykpXG4gICAgfSxcbiAgICBjbGVhbnVwXG4gIH1cbn1cbmZ1bmN0aW9uIHBvcENhbGxiYWNrKHN0cmVhbXMpIHtcbiAgLy8gU3RyZWFtcyBzaG91bGQgbmV2ZXIgYmUgYW4gZW1wdHkgYXJyYXkuIEl0IHNob3VsZCBhbHdheXMgY29udGFpbiBhdCBsZWFzdFxuICAvLyBhIHNpbmdsZSBzdHJlYW0uIFRoZXJlZm9yZSBvcHRpbWl6ZSBmb3IgdGhlIGF2ZXJhZ2UgY2FzZSBpbnN0ZWFkIG9mXG4gIC8vIGNoZWNraW5nIGZvciBsZW5ndGggPT09IDAgYXMgd2VsbC5cbiAgdmFsaWRhdGVGdW5jdGlvbihzdHJlYW1zW3N0cmVhbXMubGVuZ3RoIC0gMV0sICdzdHJlYW1zW3N0cmVhbS5sZW5ndGggLSAxXScpXG4gIHJldHVybiBzdHJlYW1zLnBvcCgpXG59XG5mdW5jdGlvbiBtYWtlQXN5bmNJdGVyYWJsZSh2YWwpIHtcbiAgaWYgKGlzSXRlcmFibGUodmFsKSkge1xuICAgIHJldHVybiB2YWxcbiAgfSBlbHNlIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbSh2YWwpKSB7XG4gICAgLy8gTGVnYWN5IHN0cmVhbXMgYXJlIG5vdCBJdGVyYWJsZS5cbiAgICByZXR1cm4gZnJvbVJlYWRhYmxlKHZhbClcbiAgfVxuICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3ZhbCcsIFsnUmVhZGFibGUnLCAnSXRlcmFibGUnLCAnQXN5bmNJdGVyYWJsZSddLCB2YWwpXG59XG5hc3luYyBmdW5jdGlvbiogZnJvbVJlYWRhYmxlKHZhbCkge1xuICBpZiAoIVJlYWRhYmxlKSB7XG4gICAgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbiAgfVxuICB5aWVsZCogUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbEFzeW5jSXRlcmF0b3JdLmNhbGwodmFsKVxufVxuYXN5bmMgZnVuY3Rpb24gcHVtcFRvTm9kZShpdGVyYWJsZSwgd3JpdGFibGUsIGZpbmlzaCwgeyBlbmQgfSkge1xuICBsZXQgZXJyb3JcbiAgbGV0IG9ucmVzb2x2ZSA9IG51bGxcbiAgY29uc3QgcmVzdW1lID0gKGVycikgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVycm9yID0gZXJyXG4gICAgfVxuICAgIGlmIChvbnJlc29sdmUpIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gb25yZXNvbHZlXG4gICAgICBvbnJlc29sdmUgPSBudWxsXG4gICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9XG4gIGNvbnN0IHdhaXQgPSAoKSA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbnJlc29sdmUgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIHdyaXRhYmxlLm9uKCdkcmFpbicsIHJlc3VtZSlcbiAgY29uc3QgY2xlYW51cCA9IGVvcyhcbiAgICB3cml0YWJsZSxcbiAgICB7XG4gICAgICByZWFkYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHJlc3VtZVxuICApXG4gIHRyeSB7XG4gICAgaWYgKHdyaXRhYmxlLndyaXRhYmxlTmVlZERyYWluKSB7XG4gICAgICBhd2FpdCB3YWl0KClcbiAgICB9XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgICAgaWYgKCF3cml0YWJsZS53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdCgpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmQpIHtcbiAgICAgIHdyaXRhYmxlLmVuZCgpXG4gICAgICBhd2FpdCB3YWl0KClcbiAgICB9XG4gICAgZmluaXNoKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZmluaXNoKGVycm9yICE9PSBlcnIgPyBhZ2dyZWdhdGVUd29FcnJvcnMoZXJyb3IsIGVycikgOiBlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgY2xlYW51cCgpXG4gICAgd3JpdGFibGUub2ZmKCdkcmFpbicsIHJlc3VtZSlcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcHVtcFRvV2ViKHJlYWRhYmxlLCB3cml0YWJsZSwgZmluaXNoLCB7IGVuZCB9KSB7XG4gIGlmIChpc1RyYW5zZm9ybVN0cmVhbSh3cml0YWJsZSkpIHtcbiAgICB3cml0YWJsZSA9IHdyaXRhYmxlLndyaXRhYmxlXG4gIH1cbiAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jZXhhbXBsZS1tYW51YWwtd3JpdGUtd2l0aC1iYWNrcHJlc3N1cmVcbiAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGUuZ2V0V3JpdGVyKClcbiAgdHJ5IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRhYmxlKSB7XG4gICAgICBhd2FpdCB3cml0ZXIucmVhZHlcbiAgICAgIHdyaXRlci53cml0ZShjaHVuaykuY2F0Y2goKCkgPT4ge30pXG4gICAgfVxuICAgIGF3YWl0IHdyaXRlci5yZWFkeVxuICAgIGlmIChlbmQpIHtcbiAgICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpXG4gICAgfVxuICAgIGZpbmlzaCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3cml0ZXIuYWJvcnQoZXJyKVxuICAgICAgZmluaXNoKGVycilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZpbmlzaChlcnIpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwaXBlbGluZSguLi5zdHJlYW1zKSB7XG4gIHJldHVybiBwaXBlbGluZUltcGwoc3RyZWFtcywgb25jZShwb3BDYWxsYmFjayhzdHJlYW1zKSkpXG59XG5mdW5jdGlvbiBwaXBlbGluZUltcGwoc3RyZWFtcywgY2FsbGJhY2ssIG9wdHMpIHtcbiAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAxICYmIEFycmF5SXNBcnJheShzdHJlYW1zWzBdKSkge1xuICAgIHN0cmVhbXMgPSBzdHJlYW1zWzBdXG4gIH1cbiAgaWYgKHN0cmVhbXMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdzdHJlYW1zJylcbiAgfVxuICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBjb25zdCBzaWduYWwgPSBhYy5zaWduYWxcbiAgY29uc3Qgb3V0ZXJTaWduYWwgPSBvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMuc2lnbmFsXG5cbiAgLy8gTmVlZCB0byBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycyBpZiBsYXN0IHN0cmVhbSBpcyByZWFkYWJsZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzM1NDUyXG4gIGNvbnN0IGxhc3RTdHJlYW1DbGVhbnVwID0gW11cbiAgdmFsaWRhdGVBYm9ydFNpZ25hbChvdXRlclNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgZnVuY3Rpb24gYWJvcnQoKSB7XG4gICAgZmluaXNoSW1wbChuZXcgQWJvcnRFcnJvcigpKVxuICB9XG4gIGFkZEFib3J0TGlzdGVuZXIgPSBhZGRBYm9ydExpc3RlbmVyIHx8IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpLmFkZEFib3J0TGlzdGVuZXJcbiAgbGV0IGRpc3Bvc2FibGVcbiAgaWYgKG91dGVyU2lnbmFsKSB7XG4gICAgZGlzcG9zYWJsZSA9IGFkZEFib3J0TGlzdGVuZXIob3V0ZXJTaWduYWwsIGFib3J0KVxuICB9XG4gIGxldCBlcnJvclxuICBsZXQgdmFsdWVcbiAgY29uc3QgZGVzdHJveXMgPSBbXVxuICBsZXQgZmluaXNoQ291bnQgPSAwXG4gIGZ1bmN0aW9uIGZpbmlzaChlcnIpIHtcbiAgICBmaW5pc2hJbXBsKGVyciwgLS1maW5pc2hDb3VudCA9PT0gMClcbiAgfVxuICBmdW5jdGlvbiBmaW5pc2hJbXBsKGVyciwgZmluYWwpIHtcbiAgICB2YXIgX2Rpc3Bvc2FibGVcbiAgICBpZiAoZXJyICYmICghZXJyb3IgfHwgZXJyb3IuY29kZSA9PT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJykpIHtcbiAgICAgIGVycm9yID0gZXJyXG4gICAgfVxuICAgIGlmICghZXJyb3IgJiYgIWZpbmFsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgd2hpbGUgKGRlc3Ryb3lzLmxlbmd0aCkge1xuICAgICAgZGVzdHJveXMuc2hpZnQoKShlcnJvcilcbiAgICB9XG4gICAgOyhfZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGUpID09PSBudWxsIHx8IF9kaXNwb3NhYmxlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfZGlzcG9zYWJsZVtTeW1ib2xEaXNwb3NlXSgpXG4gICAgYWMuYWJvcnQoKVxuICAgIGlmIChmaW5hbCkge1xuICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICBsYXN0U3RyZWFtQ2xlYW51cC5mb3JFYWNoKChmbikgPT4gZm4oKSlcbiAgICAgIH1cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIGVycm9yLCB2YWx1ZSlcbiAgICB9XG4gIH1cbiAgbGV0IHJldFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmVhbXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdHJlYW0gPSBzdHJlYW1zW2ldXG4gICAgY29uc3QgcmVhZGluZyA9IGkgPCBzdHJlYW1zLmxlbmd0aCAtIDFcbiAgICBjb25zdCB3cml0aW5nID0gaSA+IDBcbiAgICBjb25zdCBlbmQgPSByZWFkaW5nIHx8IChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMuZW5kKSAhPT0gZmFsc2VcbiAgICBjb25zdCBpc0xhc3RTdHJlYW0gPSBpID09PSBzdHJlYW1zLmxlbmd0aCAtIDFcbiAgICBpZiAoaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgY29uc3QgeyBkZXN0cm95LCBjbGVhbnVwIH0gPSBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nKVxuICAgICAgICBkZXN0cm95cy5wdXNoKGRlc3Ryb3kpXG4gICAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkgJiYgaXNMYXN0U3RyZWFtKSB7XG4gICAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaChjbGVhbnVwKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENhdGNoIHN0cmVhbSBlcnJvcnMgdGhhdCBvY2N1ciBhZnRlciBwaXBlL3B1bXAgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgIT09ICdBYm9ydEVycm9yJyAmJiBlcnIuY29kZSAhPT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJykge1xuICAgICAgICAgIGZpbmlzaChlcnIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSAmJiBpc0xhc3RTdHJlYW0pIHtcbiAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaCgoKSA9PiB7XG4gICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBpZiAodHlwZW9mIHN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXQgPSBzdHJlYW0oe1xuICAgICAgICAgIHNpZ25hbFxuICAgICAgICB9KVxuICAgICAgICBpZiAoIWlzSXRlcmFibGUocmV0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ0l0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIFN0cmVhbScsICdzb3VyY2UnLCByZXQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShzdHJlYW0pIHx8IGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0oc3RyZWFtKSkge1xuICAgICAgICByZXQgPSBzdHJlYW1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IER1cGxleC5mcm9tKHN0cmVhbSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChpc1RyYW5zZm9ybVN0cmVhbShyZXQpKSB7XG4gICAgICAgIHZhciBfcmV0XG4gICAgICAgIHJldCA9IG1ha2VBc3luY0l0ZXJhYmxlKChfcmV0ID0gcmV0KSA9PT0gbnVsbCB8fCBfcmV0ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfcmV0LnJlYWRhYmxlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gbWFrZUFzeW5jSXRlcmFibGUocmV0KVxuICAgICAgfVxuICAgICAgcmV0ID0gc3RyZWFtKHJldCwge1xuICAgICAgICBzaWduYWxcbiAgICAgIH0pXG4gICAgICBpZiAocmVhZGluZykge1xuICAgICAgICBpZiAoIWlzSXRlcmFibGUocmV0LCB0cnVlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ0FzeW5jSXRlcmFibGUnLCBgdHJhbnNmb3JtWyR7aSAtIDF9XWAsIHJldClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9yZXQyXG4gICAgICAgIGlmICghUGFzc1Rocm91Z2gpIHtcbiAgICAgICAgICBQYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vcGFzc3Rocm91Z2gnKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGxhc3QgYXJndW1lbnQgdG8gcGlwZWxpbmUgaXMgbm90IGEgc3RyZWFtXG4gICAgICAgIC8vIHdlIG11c3QgY3JlYXRlIGEgcHJveHkgc3RyZWFtIHNvIHRoYXQgcGlwZWxpbmUoLi4uKVxuICAgICAgICAvLyBhbHdheXMgcmV0dXJucyBhIHN0cmVhbSB3aGljaCBjYW4gYmUgZnVydGhlclxuICAgICAgICAvLyBjb21wb3NlZCB0aHJvdWdoIGAucGlwZShzdHJlYW0pYC5cblxuICAgICAgICBjb25zdCBwdCA9IG5ldyBQYXNzVGhyb3VnaCh7XG4gICAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEhhbmRsZSBQcm9taXNlcy9BKyBzcGVjLCBgdGhlbmAgY291bGQgYmUgYSBnZXR0ZXIgdGhhdCB0aHJvd3Mgb25cbiAgICAgICAgLy8gc2Vjb25kIHVzZS5cbiAgICAgICAgY29uc3QgdGhlbiA9IChfcmV0MiA9IHJldCkgPT09IG51bGwgfHwgX3JldDIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZXQyLnRoZW5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWxcbiAgICAgICAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcHQud3JpdGUodmFsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgICAgICAgICBwdC5lbmQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgcHQuZGVzdHJveShlcnIpXG4gICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoLCBlcnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2UgaWYgKGlzSXRlcmFibGUocmV0LCB0cnVlKSkge1xuICAgICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgICBwdW1wVG9Ob2RlKHJldCwgcHQsIGZpbmlzaCwge1xuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlYWRhYmxlU3RyZWFtKHJldCkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0ocmV0KSkge1xuICAgICAgICAgIGNvbnN0IHRvUmVhZCA9IHJldC5yZWFkYWJsZSB8fCByZXRcbiAgICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgICAgcHVtcFRvTm9kZSh0b1JlYWQsIHB0LCBmaW5pc2gsIHtcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnQXN5bmNJdGVyYWJsZSBvciBQcm9taXNlJywgJ2Rlc3RpbmF0aW9uJywgcmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldCA9IHB0XG4gICAgICAgIGNvbnN0IHsgZGVzdHJveSwgY2xlYW51cCB9ID0gZGVzdHJveWVyKHJldCwgZmFsc2UsIHRydWUpXG4gICAgICAgIGRlc3Ryb3lzLnB1c2goZGVzdHJveSlcbiAgICAgICAgaWYgKGlzTGFzdFN0cmVhbSkge1xuICAgICAgICAgIGxhc3RTdHJlYW1DbGVhbnVwLnB1c2goY2xlYW51cClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50ICs9IDJcbiAgICAgICAgY29uc3QgY2xlYW51cCA9IHBpcGUocmV0LCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pICYmIGlzTGFzdFN0cmVhbSkge1xuICAgICAgICAgIGxhc3RTdHJlYW1DbGVhbnVwLnB1c2goY2xlYW51cClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVN0cmVhbShyZXQpIHx8IGlzUmVhZGFibGVTdHJlYW0ocmV0KSkge1xuICAgICAgICBjb25zdCB0b1JlYWQgPSByZXQucmVhZGFibGUgfHwgcmV0XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvTm9kZSh0b1JlYWQsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGlzSXRlcmFibGUocmV0KSkge1xuICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgIHB1bXBUb05vZGUocmV0LCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgICAgICd2YWwnLFxuICAgICAgICAgIFsnUmVhZGFibGUnLCAnSXRlcmFibGUnLCAnQXN5bmNJdGVyYWJsZScsICdSZWFkYWJsZVN0cmVhbScsICdUcmFuc2Zvcm1TdHJlYW0nXSxcbiAgICAgICAgICByZXRcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0ID0gc3RyZWFtXG4gICAgfSBlbHNlIGlmIChpc1dlYlN0cmVhbShzdHJlYW0pKSB7XG4gICAgICBpZiAoaXNSZWFkYWJsZU5vZGVTdHJlYW0ocmV0KSkge1xuICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgIHB1bXBUb1dlYihtYWtlQXN5bmNJdGVyYWJsZShyZXQpLCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChpc1JlYWRhYmxlU3RyZWFtKHJldCkgfHwgaXNJdGVyYWJsZShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvV2ViKHJldCwgc3RyZWFtLCBmaW5pc2gsIHtcbiAgICAgICAgICBlbmRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXNUcmFuc2Zvcm1TdHJlYW0ocmV0KSkge1xuICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgIHB1bXBUb1dlYihyZXQucmVhZGFibGUsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICAgICAgJ3ZhbCcsXG4gICAgICAgICAgWydSZWFkYWJsZScsICdJdGVyYWJsZScsICdBc3luY0l0ZXJhYmxlJywgJ1JlYWRhYmxlU3RyZWFtJywgJ1RyYW5zZm9ybVN0cmVhbSddLFxuICAgICAgICAgIHJldFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXQgPSBzdHJlYW1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0ID0gRHVwbGV4LmZyb20oc3RyZWFtKVxuICAgIH1cbiAgfVxuICBpZiAoXG4gICAgKHNpZ25hbCAhPT0gbnVsbCAmJiBzaWduYWwgIT09IHVuZGVmaW5lZCAmJiBzaWduYWwuYWJvcnRlZCkgfHxcbiAgICAob3V0ZXJTaWduYWwgIT09IG51bGwgJiYgb3V0ZXJTaWduYWwgIT09IHVuZGVmaW5lZCAmJiBvdXRlclNpZ25hbC5hYm9ydGVkKVxuICApIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGFib3J0KVxuICB9XG4gIHJldHVybiByZXRcbn1cbmZ1bmN0aW9uIHBpcGUoc3JjLCBkc3QsIGZpbmlzaCwgeyBlbmQgfSkge1xuICBsZXQgZW5kZWQgPSBmYWxzZVxuICBkc3Qub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGlmICghZW5kZWQpIHtcbiAgICAgIC8vIEZpbmlzaCBpZiB0aGUgZGVzdGluYXRpb24gY2xvc2VzIGJlZm9yZSB0aGUgc291cmNlIGhhcyBjb21wbGV0ZWQuXG4gICAgICBmaW5pc2gobmV3IEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFKCkpXG4gICAgfVxuICB9KVxuICBzcmMucGlwZShkc3QsIHtcbiAgICBlbmQ6IGZhbHNlXG4gIH0pIC8vIElmIGVuZCBpcyB0cnVlIHdlIGFscmVhZHkgd2lsbCBoYXZlIGEgbGlzdGVuZXIgdG8gZW5kIGRzdC5cblxuICBpZiAoZW5kKSB7XG4gICAgLy8gQ29tcGF0LiBCZWZvcmUgbm9kZSB2MTAuMTIuMCBzdGRpbyB1c2VkIHRvIHRocm93IGFuIGVycm9yIHNvXG4gICAgLy8gcGlwZSgpIGRpZC9kb2VzIG5vdCBlbmQoKSBzdGRpbyBkZXN0aW5hdGlvbnMuXG4gICAgLy8gTm93IHRoZXkgYWxsb3cgaXQgYnV0IFwic2VjcmV0bHlcIiBkb24ndCBjbG9zZSB0aGUgdW5kZXJseWluZyBmZC5cblxuICAgIGZ1bmN0aW9uIGVuZEZuKCkge1xuICAgICAgZW5kZWQgPSB0cnVlXG4gICAgICBkc3QuZW5kKClcbiAgICB9XG4gICAgaWYgKGlzUmVhZGFibGVGaW5pc2hlZChzcmMpKSB7XG4gICAgICAvLyBFbmQgdGhlIGRlc3RpbmF0aW9uIGlmIHRoZSBzb3VyY2UgaGFzIGFscmVhZHkgZW5kZWQuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVuZEZuKVxuICAgIH0gZWxzZSB7XG4gICAgICBzcmMub25jZSgnZW5kJywgZW5kRm4pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpbmlzaCgpXG4gIH1cbiAgZW9zKFxuICAgIHNyYyxcbiAgICB7XG4gICAgICByZWFkYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgKGVycikgPT4ge1xuICAgICAgY29uc3QgclN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlXG4gICAgICBpZiAoXG4gICAgICAgIGVyciAmJlxuICAgICAgICBlcnIuY29kZSA9PT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJyAmJlxuICAgICAgICByU3RhdGUgJiZcbiAgICAgICAgclN0YXRlLmVuZGVkICYmXG4gICAgICAgICFyU3RhdGUuZXJyb3JlZCAmJlxuICAgICAgICAhclN0YXRlLmVycm9yRW1pdHRlZFxuICAgICAgKSB7XG4gICAgICAgIC8vIFNvbWUgcmVhZGFibGUgc3RyZWFtcyB3aWxsIGVtaXQgJ2Nsb3NlJyBiZWZvcmUgJ2VuZCcuIEhvd2V2ZXIsIHNpbmNlXG4gICAgICAgIC8vIHRoaXMgaXMgb24gdGhlIHJlYWRhYmxlIHNpZGUgJ2VuZCcgc2hvdWxkIHN0aWxsIGJlIGVtaXR0ZWQgaWYgdGhlXG4gICAgICAgIC8vIHN0cmVhbSBoYXMgYmVlbiBlbmRlZCBhbmQgbm8gZXJyb3IgZW1pdHRlZC4gVGhpcyBzaG91bGQgYmUgYWxsb3dlZCBpblxuICAgICAgICAvLyBmYXZvciBvZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gU2luY2UgdGhlIHN0cmVhbSBpcyBwaXBlZCB0byBhXG4gICAgICAgIC8vIGRlc3RpbmF0aW9uIHRoaXMgc2hvdWxkIG5vdCByZXN1bHQgaW4gYW55IG9ic2VydmFibGUgZGlmZmVyZW5jZS5cbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGlzIGlzIGEgd3JpdGFibGUgcHJlbWF0dXJlIGNsb3NlIHNpbmNlXG4gICAgICAgIC8vIGVvcyB3aWxsIG9ubHkgZmFpbCB3aXRoIHByZW1hdHVyZSBjbG9zZSBvbiB0aGUgcmVhZGluZyBzaWRlIGZvclxuICAgICAgICAvLyBkdXBsZXggc3RyZWFtcy5cbiAgICAgICAgc3JjLm9uY2UoJ2VuZCcsIGZpbmlzaCkub25jZSgnZXJyb3InLCBmaW5pc2gpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5pc2goZXJyKVxuICAgICAgfVxuICAgIH1cbiAgKVxuICByZXR1cm4gZW9zKFxuICAgIGRzdCxcbiAgICB7XG4gICAgICByZWFkYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAgZmluaXNoXG4gIClcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwaXBlbGluZUltcGwsXG4gIHBpcGVsaW5lXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCcuL3BpcGVsaW5lJylcbmNvbnN0IER1cGxleCA9IHJlcXVpcmUoJy4vZHVwbGV4JylcbmNvbnN0IHsgZGVzdHJveWVyIH0gPSByZXF1aXJlKCcuL2Rlc3Ryb3knKVxuY29uc3Qge1xuICBpc05vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGUsXG4gIGlzV3JpdGFibGUsXG4gIGlzV2ViU3RyZWFtLFxuICBpc1RyYW5zZm9ybVN0cmVhbSxcbiAgaXNXcml0YWJsZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbVxufSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3Qge1xuICBBYm9ydEVycm9yLFxuICBjb2RlczogeyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUsIEVSUl9NSVNTSU5HX0FSR1MgfVxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbXBvc2UoLi4uc3RyZWFtcykge1xuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygnc3RyZWFtcycpXG4gIH1cbiAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIER1cGxleC5mcm9tKHN0cmVhbXNbMF0pXG4gIH1cbiAgY29uc3Qgb3JnU3RyZWFtcyA9IFsuLi5zdHJlYW1zXVxuICBpZiAodHlwZW9mIHN0cmVhbXNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHJlYW1zWzBdID0gRHVwbGV4LmZyb20oc3RyZWFtc1swXSlcbiAgfVxuICBpZiAodHlwZW9mIHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGlkeCA9IHN0cmVhbXMubGVuZ3RoIC0gMVxuICAgIHN0cmVhbXNbaWR4XSA9IER1cGxleC5mcm9tKHN0cmVhbXNbaWR4XSlcbiAgfVxuICBmb3IgKGxldCBuID0gMDsgbiA8IHN0cmVhbXMubGVuZ3RoOyArK24pIHtcbiAgICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW1zW25dKSAmJiAhaXNXZWJTdHJlYW0oc3RyZWFtc1tuXSkpIHtcbiAgICAgIC8vIFRPRE8ocm9uYWcpOiBBZGQgY2hlY2tzIGZvciBub24gc3RyZWFtcy5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIG4gPCBzdHJlYW1zLmxlbmd0aCAtIDEgJiZcbiAgICAgICEoaXNSZWFkYWJsZShzdHJlYW1zW25dKSB8fCBpc1JlYWRhYmxlU3RyZWFtKHN0cmVhbXNbbl0pIHx8IGlzVHJhbnNmb3JtU3RyZWFtKHN0cmVhbXNbbl0pKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShgc3RyZWFtc1ske259XWAsIG9yZ1N0cmVhbXNbbl0sICdtdXN0IGJlIHJlYWRhYmxlJylcbiAgICB9XG4gICAgaWYgKG4gPiAwICYmICEoaXNXcml0YWJsZShzdHJlYW1zW25dKSB8fCBpc1dyaXRhYmxlU3RyZWFtKHN0cmVhbXNbbl0pIHx8IGlzVHJhbnNmb3JtU3RyZWFtKHN0cmVhbXNbbl0pKSkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShgc3RyZWFtc1ske259XWAsIG9yZ1N0cmVhbXNbbl0sICdtdXN0IGJlIHdyaXRhYmxlJylcbiAgICB9XG4gIH1cbiAgbGV0IG9uZHJhaW5cbiAgbGV0IG9uZmluaXNoXG4gIGxldCBvbnJlYWRhYmxlXG4gIGxldCBvbmNsb3NlXG4gIGxldCBkXG4gIGZ1bmN0aW9uIG9uZmluaXNoZWQoZXJyKSB7XG4gICAgY29uc3QgY2IgPSBvbmNsb3NlXG4gICAgb25jbG9zZSA9IG51bGxcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycilcbiAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgZC5kZXN0cm95KGVycilcbiAgICB9IGVsc2UgaWYgKCFyZWFkYWJsZSAmJiAhd3JpdGFibGUpIHtcbiAgICAgIGQuZGVzdHJveSgpXG4gICAgfVxuICB9XG4gIGNvbnN0IGhlYWQgPSBzdHJlYW1zWzBdXG4gIGNvbnN0IHRhaWwgPSBwaXBlbGluZShzdHJlYW1zLCBvbmZpbmlzaGVkKVxuICBjb25zdCB3cml0YWJsZSA9ICEhKGlzV3JpdGFibGUoaGVhZCkgfHwgaXNXcml0YWJsZVN0cmVhbShoZWFkKSB8fCBpc1RyYW5zZm9ybVN0cmVhbShoZWFkKSlcbiAgY29uc3QgcmVhZGFibGUgPSAhIShpc1JlYWRhYmxlKHRhaWwpIHx8IGlzUmVhZGFibGVTdHJlYW0odGFpbCkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0odGFpbCkpXG5cbiAgLy8gVE9ETyhyb25hZyk6IEF2b2lkIGRvdWJsZSBidWZmZXJpbmcuXG4gIC8vIEltcGxlbWVudCBXcml0YWJsZS9SZWFkYWJsZS9EdXBsZXggdHJhaXRzLlxuICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzMzNTE1LlxuICBkID0gbmV3IER1cGxleCh7XG4gICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgIHdyaXRhYmxlT2JqZWN0TW9kZTogISEoaGVhZCAhPT0gbnVsbCAmJiBoZWFkICE9PSB1bmRlZmluZWQgJiYgaGVhZC53cml0YWJsZU9iamVjdE1vZGUpLFxuICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogISEodGFpbCAhPT0gbnVsbCAmJiB0YWlsICE9PSB1bmRlZmluZWQgJiYgdGFpbC5yZWFkYWJsZU9iamVjdE1vZGUpLFxuICAgIHdyaXRhYmxlLFxuICAgIHJlYWRhYmxlXG4gIH0pXG4gIGlmICh3cml0YWJsZSkge1xuICAgIGlmIChpc05vZGVTdHJlYW0oaGVhZCkpIHtcbiAgICAgIGQuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGhlYWQud3JpdGUoY2h1bmssIGVuY29kaW5nKSkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbmRyYWluID0gY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZC5fZmluYWwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaGVhZC5lbmQoKVxuICAgICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrXG4gICAgICB9XG4gICAgICBoZWFkLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG9uZHJhaW4pIHtcbiAgICAgICAgICBjb25zdCBjYiA9IG9uZHJhaW5cbiAgICAgICAgICBvbmRyYWluID0gbnVsbFxuICAgICAgICAgIGNiKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKGlzV2ViU3RyZWFtKGhlYWQpKSB7XG4gICAgICBjb25zdCB3cml0YWJsZSA9IGlzVHJhbnNmb3JtU3RyZWFtKGhlYWQpID8gaGVhZC53cml0YWJsZSA6IGhlYWRcbiAgICAgIGNvbnN0IHdyaXRlciA9IHdyaXRhYmxlLmdldFdyaXRlcigpXG4gICAgICBkLl93cml0ZSA9IGFzeW5jIGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgd3JpdGVyLnJlYWR5XG4gICAgICAgICAgd3JpdGVyLndyaXRlKGNodW5rKS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZC5fZmluYWwgPSBhc3luYyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3cml0ZXIucmVhZHlcbiAgICAgICAgICB3cml0ZXIuY2xvc2UoKS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0b1JlYWQgPSBpc1RyYW5zZm9ybVN0cmVhbSh0YWlsKSA/IHRhaWwucmVhZGFibGUgOiB0YWlsXG4gICAgZW9zKHRvUmVhZCwgKCkgPT4ge1xuICAgICAgaWYgKG9uZmluaXNoKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25maW5pc2hcbiAgICAgICAgb25maW5pc2ggPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGlmIChyZWFkYWJsZSkge1xuICAgIGlmIChpc05vZGVTdHJlYW0odGFpbCkpIHtcbiAgICAgIHRhaWwub24oJ3JlYWRhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAob25yZWFkYWJsZSkge1xuICAgICAgICAgIGNvbnN0IGNiID0gb25yZWFkYWJsZVxuICAgICAgICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgICAgICAgY2IoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGFpbC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkLnB1c2gobnVsbClcbiAgICAgIH0pXG4gICAgICBkLl9yZWFkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IHRhaWwucmVhZCgpXG4gICAgICAgICAgaWYgKGJ1ZiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgb25yZWFkYWJsZSA9IGQuX3JlYWRcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWQucHVzaChidWYpKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzV2ViU3RyZWFtKHRhaWwpKSB7XG4gICAgICBjb25zdCByZWFkYWJsZSA9IGlzVHJhbnNmb3JtU3RyZWFtKHRhaWwpID8gdGFpbC5yZWFkYWJsZSA6IHRhaWxcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlYWRhYmxlLmdldFJlYWRlcigpXG4gICAgICBkLl9yZWFkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICAgICAgICBpZiAoIWQucHVzaCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICBkLnB1c2gobnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZC5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgb25jbG9zZSAhPT0gbnVsbCkge1xuICAgICAgZXJyID0gbmV3IEFib3J0RXJyb3IoKVxuICAgIH1cbiAgICBvbnJlYWRhYmxlID0gbnVsbFxuICAgIG9uZHJhaW4gPSBudWxsXG4gICAgb25maW5pc2ggPSBudWxsXG4gICAgaWYgKG9uY2xvc2UgPT09IG51bGwpIHtcbiAgICAgIGNhbGxiYWNrKGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgb25jbG9zZSA9IGNhbGxiYWNrXG4gICAgICBpZiAoaXNOb2RlU3RyZWFtKHRhaWwpKSB7XG4gICAgICAgIGRlc3Ryb3llcih0YWlsLCBlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBBYm9ydENvbnRyb2xsZXIgPSBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlciB8fCByZXF1aXJlKCdhYm9ydC1jb250cm9sbGVyJykuQWJvcnRDb250cm9sbGVyXG5jb25zdCB7XG4gIGNvZGVzOiB7IEVSUl9JTlZBTElEX0FSR19WQUxVRSwgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9NSVNTSU5HX0FSR1MsIEVSUl9PVVRfT0ZfUkFOR0UgfSxcbiAgQWJvcnRFcnJvclxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgdmFsaWRhdGVBYm9ydFNpZ25hbCwgdmFsaWRhdGVJbnRlZ2VyLCB2YWxpZGF0ZU9iamVjdCB9ID0gcmVxdWlyZSgnLi4vdmFsaWRhdG9ycycpXG5jb25zdCBrV2Vha0hhbmRsZXIgPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJykuU3ltYm9sKCdrV2VhaycpXG5jb25zdCBrUmVzaXN0U3RvcFByb3BhZ2F0aW9uID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpLlN5bWJvbCgna1Jlc2lzdFN0b3BQcm9wYWdhdGlvbicpXG5jb25zdCB7IGZpbmlzaGVkIH0gPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKVxuY29uc3Qgc3RhdGljQ29tcG9zZSA9IHJlcXVpcmUoJy4vY29tcG9zZScpXG5jb25zdCB7IGFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZSB9ID0gcmVxdWlyZSgnLi9hZGQtYWJvcnQtc2lnbmFsJylcbmNvbnN0IHsgaXNXcml0YWJsZSwgaXNOb2RlU3RyZWFtIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IHsgZGVwcmVjYXRlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxuY29uc3Qge1xuICBBcnJheVByb3RvdHlwZVB1c2gsXG4gIEJvb2xlYW4sXG4gIE1hdGhGbG9vcixcbiAgTnVtYmVyLFxuICBOdW1iZXJJc05hTixcbiAgUHJvbWlzZSxcbiAgUHJvbWlzZVJlamVjdCxcbiAgUHJvbWlzZVJlc29sdmUsXG4gIFByb21pc2VQcm90b3R5cGVUaGVuLFxuICBTeW1ib2xcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IGtFbXB0eSA9IFN5bWJvbCgna0VtcHR5JylcbmNvbnN0IGtFb2YgPSBTeW1ib2woJ2tFb2YnKVxuZnVuY3Rpb24gY29tcG9zZShzdHJlYW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIGlmIChpc05vZGVTdHJlYW0oc3RyZWFtKSAmJiAhaXNXcml0YWJsZShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRSgnc3RyZWFtJywgc3RyZWFtLCAnbXVzdCBiZSB3cml0YWJsZScpXG4gIH1cbiAgY29uc3QgY29tcG9zZWRTdHJlYW0gPSBzdGF0aWNDb21wb3NlKHRoaXMsIHN0cmVhbSlcbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgLy8gTm90IHZhbGlkYXRpbmcgYXMgd2UgYWxyZWFkeSB2YWxpZGF0ZWQgYmVmb3JlXG4gICAgYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlKG9wdGlvbnMuc2lnbmFsLCBjb21wb3NlZFN0cmVhbSlcbiAgfVxuICByZXR1cm4gY29tcG9zZWRTdHJlYW1cbn1cbmZ1bmN0aW9uIG1hcChmbiwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdmbicsIFsnRnVuY3Rpb24nLCAnQXN5bmNGdW5jdGlvbiddLCBmbilcbiAgfVxuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgbGV0IGNvbmN1cnJlbmN5ID0gMVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5jb25jdXJyZW5jeSkgIT0gbnVsbCkge1xuICAgIGNvbmN1cnJlbmN5ID0gTWF0aEZsb29yKG9wdGlvbnMuY29uY3VycmVuY3kpXG4gIH1cbiAgbGV0IGhpZ2hXYXRlck1hcmsgPSBjb25jdXJyZW5jeSAtIDFcbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuaGlnaFdhdGVyTWFyaykgIT0gbnVsbCkge1xuICAgIGhpZ2hXYXRlck1hcmsgPSBNYXRoRmxvb3Iob3B0aW9ucy5oaWdoV2F0ZXJNYXJrKVxuICB9XG4gIHZhbGlkYXRlSW50ZWdlcihjb25jdXJyZW5jeSwgJ29wdGlvbnMuY29uY3VycmVuY3knLCAxKVxuICB2YWxpZGF0ZUludGVnZXIoaGlnaFdhdGVyTWFyaywgJ29wdGlvbnMuaGlnaFdhdGVyTWFyaycsIDApXG4gIGhpZ2hXYXRlck1hcmsgKz0gY29uY3VycmVuY3lcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBtYXAoKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuQWJvcnRTaWduYWxBbnkoXG4gICAgICBbb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbF0uZmlsdGVyKEJvb2xlYW4pXG4gICAgKVxuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXNcbiAgICBjb25zdCBxdWV1ZSA9IFtdXG4gICAgY29uc3Qgc2lnbmFsT3B0ID0ge1xuICAgICAgc2lnbmFsXG4gICAgfVxuICAgIGxldCBuZXh0XG4gICAgbGV0IHJlc3VtZVxuICAgIGxldCBkb25lID0gZmFsc2VcbiAgICBsZXQgY250ID0gMFxuICAgIGZ1bmN0aW9uIG9uQ2F0Y2goKSB7XG4gICAgICBkb25lID0gdHJ1ZVxuICAgICAgYWZ0ZXJJdGVtUHJvY2Vzc2VkKClcbiAgICB9XG4gICAgZnVuY3Rpb24gYWZ0ZXJJdGVtUHJvY2Vzc2VkKCkge1xuICAgICAgY250IC09IDFcbiAgICAgIG1heWJlUmVzdW1lKClcbiAgICB9XG4gICAgZnVuY3Rpb24gbWF5YmVSZXN1bWUoKSB7XG4gICAgICBpZiAocmVzdW1lICYmICFkb25lICYmIGNudCA8IGNvbmN1cnJlbmN5ICYmIHF1ZXVlLmxlbmd0aCA8IGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgcmVzdW1lKClcbiAgICAgICAgcmVzdW1lID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBmdW5jdGlvbiBwdW1wKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChsZXQgdmFsIG9mIHN0cmVhbSkge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWwgPSBmbih2YWwsIHNpZ25hbE9wdClcbiAgICAgICAgICAgIGlmICh2YWwgPT09IGtFbXB0eSkge1xuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsID0gUHJvbWlzZVJlc29sdmUodmFsKVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdmFsID0gUHJvbWlzZVJlamVjdChlcnIpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNudCArPSAxXG4gICAgICAgICAgUHJvbWlzZVByb3RvdHlwZVRoZW4odmFsLCBhZnRlckl0ZW1Qcm9jZXNzZWQsIG9uQ2F0Y2gpXG4gICAgICAgICAgcXVldWUucHVzaCh2YWwpXG4gICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgbmV4dCA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFkb25lICYmIChxdWV1ZS5sZW5ndGggPj0gaGlnaFdhdGVyTWFyayB8fCBjbnQgPj0gY29uY3VycmVuY3kpKSB7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICByZXN1bWUgPSByZXNvbHZlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZS5wdXNoKGtFb2YpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgdmFsID0gUHJvbWlzZVJlamVjdChlcnIpXG4gICAgICAgIFByb21pc2VQcm90b3R5cGVUaGVuKHZhbCwgYWZ0ZXJJdGVtUHJvY2Vzc2VkLCBvbkNhdGNoKVxuICAgICAgICBxdWV1ZS5wdXNoKHZhbClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGRvbmUgPSB0cnVlXG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgbmV4dCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBwdW1wKClcbiAgICB0cnkge1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB2YWwgPSBhd2FpdCBxdWV1ZVswXVxuICAgICAgICAgIGlmICh2YWwgPT09IGtFb2YpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbCAhPT0ga0VtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCB2YWxcbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUuc2hpZnQoKVxuICAgICAgICAgIG1heWJlUmVzdW1lKClcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIG5leHQgPSByZXNvbHZlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRvbmUgPSB0cnVlXG4gICAgICBpZiAocmVzdW1lKSB7XG4gICAgICAgIHJlc3VtZSgpXG4gICAgICAgIHJlc3VtZSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxuZnVuY3Rpb24gYXNJbmRleGVkUGFpcnMob3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBhc0luZGV4ZWRQYWlycygpIHtcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgICAgdmFyIF9vcHRpb25zJHNpZ25hbFxuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAoX29wdGlvbnMkc2lnbmFsID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbC5hYm9ydGVkXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3Ioe1xuICAgICAgICAgIGNhdXNlOiBvcHRpb25zLnNpZ25hbC5yZWFzb25cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHlpZWxkIFtpbmRleCsrLCB2YWxdXG4gICAgfVxuICB9LmNhbGwodGhpcylcbn1cbmFzeW5jIGZ1bmN0aW9uIHNvbWUoZm4sIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgZm9yIGF3YWl0IChjb25zdCB1bnVzZWQgb2YgZmlsdGVyLmNhbGwodGhpcywgZm4sIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cbmFzeW5jIGZ1bmN0aW9uIGV2ZXJ5KGZuLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2ZuJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIGZuKVxuICB9XG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RlX01vcmdhbiUyN3NfbGF3c1xuICByZXR1cm4gIShhd2FpdCBzb21lLmNhbGwoXG4gICAgdGhpcyxcbiAgICBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgcmV0dXJuICEoYXdhaXQgZm4oLi4uYXJncykpXG4gICAgfSxcbiAgICBvcHRpb25zXG4gICkpXG59XG5hc3luYyBmdW5jdGlvbiBmaW5kKGZuLCBvcHRpb25zKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgcmVzdWx0IG9mIGZpbHRlci5jYWxsKHRoaXMsIGZuLCBvcHRpb25zKSkge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5hc3luYyBmdW5jdGlvbiBmb3JFYWNoKGZuLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2ZuJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIGZuKVxuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIGZvckVhY2hGbih2YWx1ZSwgb3B0aW9ucykge1xuICAgIGF3YWl0IGZuKHZhbHVlLCBvcHRpb25zKVxuICAgIHJldHVybiBrRW1wdHlcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZm9yIGF3YWl0IChjb25zdCB1bnVzZWQgb2YgbWFwLmNhbGwodGhpcywgZm9yRWFjaEZuLCBvcHRpb25zKSk7XG59XG5mdW5jdGlvbiBmaWx0ZXIoZm4sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZm4nLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgZm4pXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gZmlsdGVyRm4odmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXdhaXQgZm4odmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIGtFbXB0eVxuICB9XG4gIHJldHVybiBtYXAuY2FsbCh0aGlzLCBmaWx0ZXJGbiwgb3B0aW9ucylcbn1cblxuLy8gU3BlY2lmaWMgdG8gcHJvdmlkZSBiZXR0ZXIgZXJyb3IgdG8gcmVkdWNlIHNpbmNlIHRoZSBhcmd1bWVudCBpcyBvbmx5XG4vLyBtaXNzaW5nIGlmIHRoZSBzdHJlYW0gaGFzIG5vIGl0ZW1zIGluIGl0IC0gYnV0IHRoZSBjb2RlIGlzIHN0aWxsIGFwcHJvcHJpYXRlXG5jbGFzcyBSZWR1Y2VBd2FyZUVyck1pc3NpbmdBcmdzIGV4dGVuZHMgRVJSX01JU1NJTkdfQVJHUyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdyZWR1Y2UnKVxuICAgIHRoaXMubWVzc2FnZSA9ICdSZWR1Y2Ugb2YgYW4gZW1wdHkgc3RyZWFtIHJlcXVpcmVzIGFuIGluaXRpYWwgdmFsdWUnXG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHJlZHVjZShyZWR1Y2VyLCBpbml0aWFsVmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIF9vcHRpb25zJHNpZ25hbDJcbiAgaWYgKHR5cGVvZiByZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdyZWR1Y2VyJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIHJlZHVjZXIpXG4gIH1cbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIGxldCBoYXNJbml0aWFsVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMVxuICBpZiAoXG4gICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgIChfb3B0aW9ucyRzaWduYWwyID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgX29wdGlvbnMkc2lnbmFsMiAhPT0gdW5kZWZpbmVkICYmXG4gICAgX29wdGlvbnMkc2lnbmFsMi5hYm9ydGVkXG4gICkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgIH0pXG4gICAgdGhpcy5vbmNlKCdlcnJvcicsICgpID0+IHt9KSAvLyBUaGUgZXJyb3IgaXMgYWxyZWFkeSBwcm9wYWdhdGVkXG4gICAgYXdhaXQgZmluaXNoZWQodGhpcy5kZXN0cm95KGVycikpXG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgY29uc3Qgc2lnbmFsID0gYWMuc2lnbmFsXG4gIGlmIChvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnNpZ25hbCkge1xuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgICAgW2tXZWFrSGFuZGxlcl06IHRoaXMsXG4gICAgICBba1Jlc2lzdFN0b3BQcm9wYWdhdGlvbl06IHRydWVcbiAgICB9XG4gICAgb3B0aW9ucy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBhYy5hYm9ydCgpLCBvcHRzKVxuICB9XG4gIGxldCBnb3RBbnlJdGVtRnJvbVN0cmVhbSA9IGZhbHNlXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiB0aGlzKSB7XG4gICAgICB2YXIgX29wdGlvbnMkc2lnbmFsM1xuICAgICAgZ290QW55SXRlbUZyb21TdHJlYW0gPSB0cnVlXG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChfb3B0aW9ucyRzaWduYWwzID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBfb3B0aW9ucyRzaWduYWwzLmFib3J0ZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgICB9XG4gICAgICBpZiAoIWhhc0luaXRpYWxWYWx1ZSkge1xuICAgICAgICBpbml0aWFsVmFsdWUgPSB2YWx1ZVxuICAgICAgICBoYXNJbml0aWFsVmFsdWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsVmFsdWUgPSBhd2FpdCByZWR1Y2VyKGluaXRpYWxWYWx1ZSwgdmFsdWUsIHtcbiAgICAgICAgICBzaWduYWxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFnb3RBbnlJdGVtRnJvbVN0cmVhbSAmJiAhaGFzSW5pdGlhbFZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgUmVkdWNlQXdhcmVFcnJNaXNzaW5nQXJncygpXG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGFjLmFib3J0KClcbiAgfVxuICByZXR1cm4gaW5pdGlhbFZhbHVlXG59XG5hc3luYyBmdW5jdGlvbiB0b0FycmF5KG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIHRoaXMpIHtcbiAgICB2YXIgX29wdGlvbnMkc2lnbmFsNFxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKF9vcHRpb25zJHNpZ25hbDQgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgIF9vcHRpb25zJHNpZ25hbDQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNC5hYm9ydGVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgICAgfSlcbiAgICB9XG4gICAgQXJyYXlQcm90b3R5cGVQdXNoKHJlc3VsdCwgdmFsKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cbmZ1bmN0aW9uIGZsYXRNYXAoZm4sIG9wdGlvbnMpIHtcbiAgY29uc3QgdmFsdWVzID0gbWFwLmNhbGwodGhpcywgZm4sIG9wdGlvbnMpXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiogZmxhdE1hcCgpIHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpIHtcbiAgICAgIHlpZWxkKiB2YWxcbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxuZnVuY3Rpb24gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1iZXIpIHtcbiAgLy8gV2UgY29lcmNlIGhlcmUgdG8gYWxpZ24gd2l0aCB0aGUgc3BlY1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzL2lzc3Vlcy8xNjlcbiAgbnVtYmVyID0gTnVtYmVyKG51bWJlcilcbiAgaWYgKE51bWJlcklzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmIChudW1iZXIgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UoJ251bWJlcicsICc+PSAwJywgbnVtYmVyKVxuICB9XG4gIHJldHVybiBudW1iZXJcbn1cbmZ1bmN0aW9uIGRyb3AobnVtYmVyLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICBudW1iZXIgPSB0b0ludGVnZXJPckluZmluaXR5KG51bWJlcilcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBkcm9wKCkge1xuICAgIHZhciBfb3B0aW9ucyRzaWduYWw1XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX29wdGlvbnMkc2lnbmFsNSA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw1LmFib3J0ZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICB9XG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgICAgdmFyIF9vcHRpb25zJHNpZ25hbDZcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKF9vcHRpb25zJHNpZ25hbDYgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsNiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDYuYWJvcnRlZFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgIH1cbiAgICAgIGlmIChudW1iZXItLSA8PSAwKSB7XG4gICAgICAgIHlpZWxkIHZhbFxuICAgICAgfVxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5mdW5jdGlvbiB0YWtlKG51bWJlciwgb3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgbnVtYmVyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1iZXIpXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiogdGFrZSgpIHtcbiAgICB2YXIgX29wdGlvbnMkc2lnbmFsN1xuICAgIGlmIChcbiAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKF9vcHRpb25zJHNpZ25hbDcgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgIF9vcHRpb25zJHNpZ25hbDcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNy5hYm9ydGVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgfVxuICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIHRoaXMpIHtcbiAgICAgIHZhciBfb3B0aW9ucyRzaWduYWw4XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChfb3B0aW9ucyRzaWduYWw4ID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBfb3B0aW9ucyRzaWduYWw4LmFib3J0ZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyLS0gPiAwKSB7XG4gICAgICAgIHlpZWxkIHZhbFxuICAgICAgfVxuXG4gICAgICAvLyBEb24ndCBnZXQgYW5vdGhlciBpdGVtIGZyb20gaXRlcmF0b3IgaW4gY2FzZSB3ZSByZWFjaGVkIHRoZSBlbmRcbiAgICAgIGlmIChudW1iZXIgPD0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzID0ge1xuICBhc0luZGV4ZWRQYWlyczogZGVwcmVjYXRlKGFzSW5kZXhlZFBhaXJzLCAncmVhZGFibGUuYXNJbmRleGVkUGFpcnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uJyksXG4gIGRyb3AsXG4gIGZpbHRlcixcbiAgZmxhdE1hcCxcbiAgbWFwLFxuICB0YWtlLFxuICBjb21wb3NlXG59XG5tb2R1bGUuZXhwb3J0cy5wcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzID0ge1xuICBldmVyeSxcbiAgZm9yRWFjaCxcbiAgcmVkdWNlLFxuICB0b0FycmF5LFxuICBzb21lLFxuICBmaW5kXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFycmF5UHJvdG90eXBlUG9wLCBQcm9taXNlIH0gPSByZXF1aXJlKCcuLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgaXNJdGVyYWJsZSwgaXNOb2RlU3RyZWFtLCBpc1dlYlN0cmVhbSB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvc3RyZWFtcy91dGlscycpXG5jb25zdCB7IHBpcGVsaW5lSW1wbDogcGwgfSA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUnKVxuY29uc3QgeyBmaW5pc2hlZCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtJylcbnJlcXVpcmUoJy4uLy4uL2xpYi9zdHJlYW0uanMnKVxuZnVuY3Rpb24gcGlwZWxpbmUoLi4uc3RyZWFtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzaWduYWxcbiAgICBsZXQgZW5kXG4gICAgY29uc3QgbGFzdEFyZyA9IHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXVxuICAgIGlmIChcbiAgICAgIGxhc3RBcmcgJiZcbiAgICAgIHR5cGVvZiBsYXN0QXJnID09PSAnb2JqZWN0JyAmJlxuICAgICAgIWlzTm9kZVN0cmVhbShsYXN0QXJnKSAmJlxuICAgICAgIWlzSXRlcmFibGUobGFzdEFyZykgJiZcbiAgICAgICFpc1dlYlN0cmVhbShsYXN0QXJnKVxuICAgICkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5UHJvdG90eXBlUG9wKHN0cmVhbXMpXG4gICAgICBzaWduYWwgPSBvcHRpb25zLnNpZ25hbFxuICAgICAgZW5kID0gb3B0aW9ucy5lbmRcbiAgICB9XG4gICAgcGwoXG4gICAgICBzdHJlYW1zLFxuICAgICAgKGVyciwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICBlbmRcbiAgICAgIH1cbiAgICApXG4gIH0pXG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmluaXNoZWQsXG4gIHBpcGVsaW5lXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHsgT2JqZWN0RGVmaW5lUHJvcGVydHksIE9iamVjdEtleXMsIFJlZmxlY3RBcHBseSB9ID0gcmVxdWlyZSgnLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHtcbiAgcHJvbWlzaWZ5OiB7IGN1c3RvbTogY3VzdG9tUHJvbWlzaWZ5IH1cbn0gPSByZXF1aXJlKCcuL291cnMvdXRpbCcpXG5jb25zdCB7IHN0cmVhbVJldHVybmluZ09wZXJhdG9ycywgcHJvbWlzZVJldHVybmluZ09wZXJhdG9ycyB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL29wZXJhdG9ycycpXG5jb25zdCB7XG4gIGNvZGVzOiB7IEVSUl9JTExFR0FMX0NPTlNUUlVDVE9SIH1cbn0gPSByZXF1aXJlKCcuL291cnMvZXJyb3JzJylcbmNvbnN0IGNvbXBvc2UgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvY29tcG9zZScpXG5jb25zdCB7IHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrLCBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZScpXG5jb25zdCB7IGRlc3Ryb3llciB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0nKVxuY29uc3QgaW50ZXJuYWxCdWZmZXIgPSB7fVxuY29uc3QgcHJvbWlzZXMgPSByZXF1aXJlKCcuL3N0cmVhbS9wcm9taXNlcycpXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy91dGlscycpXG5jb25zdCBTdHJlYW0gPSAobW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvbGVnYWN5JykuU3RyZWFtKVxuU3RyZWFtLmlzRGVzdHJveWVkID0gdXRpbHMuaXNEZXN0cm95ZWRcblN0cmVhbS5pc0Rpc3R1cmJlZCA9IHV0aWxzLmlzRGlzdHVyYmVkXG5TdHJlYW0uaXNFcnJvcmVkID0gdXRpbHMuaXNFcnJvcmVkXG5TdHJlYW0uaXNSZWFkYWJsZSA9IHV0aWxzLmlzUmVhZGFibGVcblN0cmVhbS5pc1dyaXRhYmxlID0gdXRpbHMuaXNXcml0YWJsZVxuU3RyZWFtLlJlYWRhYmxlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3JlYWRhYmxlJylcbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdEtleXMoc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzKSkge1xuICBjb25zdCBvcCA9IHN0cmVhbVJldHVybmluZ09wZXJhdG9yc1trZXldXG4gIGZ1bmN0aW9uIGZuKC4uLmFyZ3MpIHtcbiAgICBpZiAobmV3LnRhcmdldCkge1xuICAgICAgdGhyb3cgRVJSX0lMTEVHQUxfQ09OU1RSVUNUT1IoKVxuICAgIH1cbiAgICByZXR1cm4gU3RyZWFtLlJlYWRhYmxlLmZyb20oUmVmbGVjdEFwcGx5KG9wLCB0aGlzLCBhcmdzKSlcbiAgfVxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBvcC5uYW1lXG4gIH0pXG4gIE9iamVjdERlZmluZVByb3BlcnR5KGZuLCAnbGVuZ3RoJywge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogb3AubGVuZ3RoXG4gIH0pXG4gIE9iamVjdERlZmluZVByb3BlcnR5KFN0cmVhbS5SZWFkYWJsZS5wcm90b3R5cGUsIGtleSwge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogZm4sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pXG59XG5mb3IgKGNvbnN0IGtleSBvZiBPYmplY3RLZXlzKHByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnMpKSB7XG4gIGNvbnN0IG9wID0gcHJvbWlzZVJldHVybmluZ09wZXJhdG9yc1trZXldXG4gIGZ1bmN0aW9uIGZuKC4uLmFyZ3MpIHtcbiAgICBpZiAobmV3LnRhcmdldCkge1xuICAgICAgdGhyb3cgRVJSX0lMTEVHQUxfQ09OU1RSVUNUT1IoKVxuICAgIH1cbiAgICByZXR1cm4gUmVmbGVjdEFwcGx5KG9wLCB0aGlzLCBhcmdzKVxuICB9XG4gIE9iamVjdERlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IG9wLm5hbWVcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoZm4sICdsZW5ndGgnLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBvcC5sZW5ndGhcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoU3RyZWFtLlJlYWRhYmxlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBmbixcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSlcbn1cblN0cmVhbS5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy93cml0YWJsZScpXG5TdHJlYW0uRHVwbGV4ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleCcpXG5TdHJlYW0uVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3RyYW5zZm9ybScpXG5TdHJlYW0uUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvcGFzc3Rocm91Z2gnKVxuU3RyZWFtLnBpcGVsaW5lID0gcGlwZWxpbmVcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9hZGQtYWJvcnQtc2lnbmFsJylcblN0cmVhbS5hZGRBYm9ydFNpZ25hbCA9IGFkZEFib3J0U2lnbmFsXG5TdHJlYW0uZmluaXNoZWQgPSBlb3NcblN0cmVhbS5kZXN0cm95ID0gZGVzdHJveWVyXG5TdHJlYW0uY29tcG9zZSA9IGNvbXBvc2VcblN0cmVhbS5zZXREZWZhdWx0SGlnaFdhdGVyTWFyayA9IHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrXG5TdHJlYW0uZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsgPSBnZXREZWZhdWx0SGlnaFdhdGVyTWFya1xuT2JqZWN0RGVmaW5lUHJvcGVydHkoU3RyZWFtLCAncHJvbWlzZXMnLCB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHByb21pc2VzXG4gIH1cbn0pXG5PYmplY3REZWZpbmVQcm9wZXJ0eShwaXBlbGluZSwgY3VzdG9tUHJvbWlzaWZ5LCB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0KCkge1xuICAgIHJldHVybiBwcm9taXNlcy5waXBlbGluZVxuICB9XG59KVxuT2JqZWN0RGVmaW5lUHJvcGVydHkoZW9zLCBjdXN0b21Qcm9taXNpZnksIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHByb21pc2VzLmZpbmlzaGVkXG4gIH1cbn0pXG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuNC54XG5TdHJlYW0uU3RyZWFtID0gU3RyZWFtXG5TdHJlYW0uX2lzVWludDhBcnJheSA9IGZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5XG59XG5TdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlciA9IGZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rLmJ1ZmZlciwgY2h1bmsuYnl0ZU9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aClcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5pZiAoU3RyZWFtICYmIHByb2Nlc3MuZW52LlJFQURBQkxFX1NUUkVBTSA9PT0gJ2Rpc2FibGUnKSB7XG4gIGNvbnN0IHByb21pc2VzID0gU3RyZWFtLnByb21pc2VzXG5cbiAgLy8gRXhwbGljaXQgZXhwb3J0IG5hbWluZyBpcyBuZWVkZWQgZm9yIEVTTVxuICBtb2R1bGUuZXhwb3J0cy5fdWludDhBcnJheVRvQnVmZmVyID0gU3RyZWFtLl91aW50OEFycmF5VG9CdWZmZXJcbiAgbW9kdWxlLmV4cG9ydHMuX2lzVWludDhBcnJheSA9IFN0cmVhbS5faXNVaW50OEFycmF5XG4gIG1vZHVsZS5leHBvcnRzLmlzRGlzdHVyYmVkID0gU3RyZWFtLmlzRGlzdHVyYmVkXG4gIG1vZHVsZS5leHBvcnRzLmlzRXJyb3JlZCA9IFN0cmVhbS5pc0Vycm9yZWRcbiAgbW9kdWxlLmV4cG9ydHMuaXNSZWFkYWJsZSA9IFN0cmVhbS5pc1JlYWRhYmxlXG4gIG1vZHVsZS5leHBvcnRzLlJlYWRhYmxlID0gU3RyZWFtLlJlYWRhYmxlXG4gIG1vZHVsZS5leHBvcnRzLldyaXRhYmxlID0gU3RyZWFtLldyaXRhYmxlXG4gIG1vZHVsZS5leHBvcnRzLkR1cGxleCA9IFN0cmVhbS5EdXBsZXhcbiAgbW9kdWxlLmV4cG9ydHMuVHJhbnNmb3JtID0gU3RyZWFtLlRyYW5zZm9ybVxuICBtb2R1bGUuZXhwb3J0cy5QYXNzVGhyb3VnaCA9IFN0cmVhbS5QYXNzVGhyb3VnaFxuICBtb2R1bGUuZXhwb3J0cy5hZGRBYm9ydFNpZ25hbCA9IFN0cmVhbS5hZGRBYm9ydFNpZ25hbFxuICBtb2R1bGUuZXhwb3J0cy5maW5pc2hlZCA9IFN0cmVhbS5maW5pc2hlZFxuICBtb2R1bGUuZXhwb3J0cy5kZXN0cm95ID0gU3RyZWFtLmRlc3Ryb3lcbiAgbW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSBTdHJlYW0ucGlwZWxpbmVcbiAgbW9kdWxlLmV4cG9ydHMuY29tcG9zZSA9IFN0cmVhbS5jb21wb3NlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJlYW0sICdwcm9taXNlcycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZXNcbiAgICB9XG4gIH0pXG4gIG1vZHVsZS5leHBvcnRzLlN0cmVhbSA9IFN0cmVhbS5TdHJlYW1cbn0gZWxzZSB7XG4gIGNvbnN0IEN1c3RvbVN0cmVhbSA9IHJlcXVpcmUoJy4uL3N0cmVhbScpXG4gIGNvbnN0IHByb21pc2VzID0gcmVxdWlyZSgnLi4vc3RyZWFtL3Byb21pc2VzJylcbiAgY29uc3Qgb3JpZ2luYWxEZXN0cm95ID0gQ3VzdG9tU3RyZWFtLlJlYWRhYmxlLmRlc3Ryb3lcbiAgbW9kdWxlLmV4cG9ydHMgPSBDdXN0b21TdHJlYW0uUmVhZGFibGVcblxuICAvLyBFeHBsaWNpdCBleHBvcnQgbmFtaW5nIGlzIG5lZWRlZCBmb3IgRVNNXG4gIG1vZHVsZS5leHBvcnRzLl91aW50OEFycmF5VG9CdWZmZXIgPSBDdXN0b21TdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlclxuICBtb2R1bGUuZXhwb3J0cy5faXNVaW50OEFycmF5ID0gQ3VzdG9tU3RyZWFtLl9pc1VpbnQ4QXJyYXlcbiAgbW9kdWxlLmV4cG9ydHMuaXNEaXN0dXJiZWQgPSBDdXN0b21TdHJlYW0uaXNEaXN0dXJiZWRcbiAgbW9kdWxlLmV4cG9ydHMuaXNFcnJvcmVkID0gQ3VzdG9tU3RyZWFtLmlzRXJyb3JlZFxuICBtb2R1bGUuZXhwb3J0cy5pc1JlYWRhYmxlID0gQ3VzdG9tU3RyZWFtLmlzUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuUmVhZGFibGUgPSBDdXN0b21TdHJlYW0uUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuV3JpdGFibGUgPSBDdXN0b21TdHJlYW0uV3JpdGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuRHVwbGV4ID0gQ3VzdG9tU3RyZWFtLkR1cGxleFxuICBtb2R1bGUuZXhwb3J0cy5UcmFuc2Zvcm0gPSBDdXN0b21TdHJlYW0uVHJhbnNmb3JtXG4gIG1vZHVsZS5leHBvcnRzLlBhc3NUaHJvdWdoID0gQ3VzdG9tU3RyZWFtLlBhc3NUaHJvdWdoXG4gIG1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsID0gQ3VzdG9tU3RyZWFtLmFkZEFib3J0U2lnbmFsXG4gIG1vZHVsZS5leHBvcnRzLmZpbmlzaGVkID0gQ3VzdG9tU3RyZWFtLmZpbmlzaGVkXG4gIG1vZHVsZS5leHBvcnRzLmRlc3Ryb3kgPSBDdXN0b21TdHJlYW0uZGVzdHJveVxuICBtb2R1bGUuZXhwb3J0cy5kZXN0cm95ID0gb3JpZ2luYWxEZXN0cm95XG4gIG1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gQ3VzdG9tU3RyZWFtLnBpcGVsaW5lXG4gIG1vZHVsZS5leHBvcnRzLmNvbXBvc2UgPSBDdXN0b21TdHJlYW0uY29tcG9zZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VzdG9tU3RyZWFtLCAncHJvbWlzZXMnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHByb21pc2VzXG4gICAgfVxuICB9KVxuICBtb2R1bGUuZXhwb3J0cy5TdHJlYW0gPSBDdXN0b21TdHJlYW0uU3RyZWFtXG59XG5cbi8vIEFsbG93IGRlZmF1bHQgaW1wb3J0aW5nXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gbW9kdWxlLmV4cG9ydHNcbiIsCiAgICAiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsCiAgICAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGbGF0dGVuYWJsZTtcbiIsCiAgICAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwKICAgICJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsCiAgICAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLAogICAgInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwKICAgICIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLAogICAgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLAogICAgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLAogICAgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsCiAgICAidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsCiAgICAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsCiAgICAidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwKICAgICJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwKICAgICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwKICAgICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwKICAgICJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwKICAgICIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwKICAgICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YCB3aXRob3V0XG4gKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7XG5cbiAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbmRJbmRleDtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYU47XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwKICAgICJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwKICAgICJ2YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCcuL19iYXNlSW5kZXhPZicpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmNsdWRlc2AgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5SW5jbHVkZXM7XG4iLAogICAgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwKICAgICJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgfVxuICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID09IG51bGwgPyB2YWx1ZSA6IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VEaWZmZXJlbmNlO1xuIiwKICAgICJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gKiBpcyBhbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlT2JqZWN0O1xuIiwKICAgICJ2YXIgYmFzZURpZmZlcmVuY2UgPSByZXF1aXJlKCcuL19iYXNlRGlmZmVyZW5jZScpLFxuICAgIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBgYXJyYXlgIHZhbHVlcyBub3QgaW5jbHVkZWQgaW4gdGhlIG90aGVyIGdpdmVuIGFycmF5c1xuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKiBAc2VlIF8ud2l0aG91dCwgXy54b3JcbiAqIEBleGFtcGxlXG4gKlxuICogXy5kaWZmZXJlbmNlKFsyLCAxXSwgWzIsIDNdKTtcbiAqIC8vID0+IFsxXVxuICovXG52YXIgZGlmZmVyZW5jZSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKVxuICAgIDogW107XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkaWZmZXJlbmNlO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vb3A7XG4iLAogICAgIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsCiAgICAidmFyIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIG5vb3AgPSByZXF1aXJlKCcuL25vb3AnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZXQgb2JqZWN0IG9mIGB2YWx1ZXNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhZGQgdG8gdGhlIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBzZXQuXG4gKi9cbnZhciBjcmVhdGVTZXQgPSAhKFNldCAmJiAoMSAvIHNldFRvQXJyYXkobmV3IFNldChbLC0wXSkpWzFdKSA9PSBJTkZJTklUWSkgPyBub29wIDogZnVuY3Rpb24odmFsdWVzKSB7XG4gIHJldHVybiBuZXcgU2V0KHZhbHVlcyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVNldDtcbiIsCiAgICAidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyksXG4gICAgY3JlYXRlU2V0ID0gcmVxdWlyZSgnLi9fY3JlYXRlU2V0JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICBzZWVuID0gcmVzdWx0O1xuXG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICB9XG4gIGVsc2UgaWYgKGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgdmFyIHNldCA9IGl0ZXJhdGVlID8gbnVsbCA6IGNyZWF0ZVNldChhcnJheSk7XG4gICAgaWYgKHNldCkge1xuICAgICAgcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtcbiAgICB9XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIHNlZW4gPSBuZXcgU2V0Q2FjaGU7XG4gIH1cbiAgZWxzZSB7XG4gICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHtcbiAgICAgICAgaWYgKHNlZW5bc2VlbkluZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyhzZWVuLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIGlmIChzZWVuICE9PSByZXN1bHQpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5pcTtcbiIsCiAgICAidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgYmFzZVVuaXEgPSByZXF1aXJlKCcuL19iYXNlVW5pcScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cyB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlvbihbMl0sIFsxLCAyXSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqL1xudmFyIHVuaW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmlvbjtcbiIsCiAgICAiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsCiAgICAidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsCiAgICAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3NlcnRWYWxpZFBhdHRlcm4gPSB2b2lkIDA7XG5jb25zdCBNQVhfUEFUVEVSTl9MRU5HVEggPSAxMDI0ICogNjQ7XG5jb25zdCBhc3NlcnRWYWxpZFBhdHRlcm4gPSAocGF0dGVybikgPT4ge1xuICAgIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXR0ZXJuJyk7XG4gICAgfVxuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA+IE1BWF9QQVRURVJOX0xFTkdUSCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXR0ZXJuIGlzIHRvbyBsb25nJyk7XG4gICAgfVxufTtcbmV4cG9ydHMuYXNzZXJ0VmFsaWRQYXR0ZXJuID0gYXNzZXJ0VmFsaWRQYXR0ZXJuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXNzZXJ0LXZhbGlkLXBhdHRlcm4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIHRyYW5zbGF0ZSB0aGUgdmFyaW91cyBwb3NpeCBjaGFyYWN0ZXIgY2xhc3NlcyBpbnRvIHVuaWNvZGUgcHJvcGVydGllc1xuLy8gdGhpcyB3b3JrcyBhY3Jvc3MgYWxsIHVuaWNvZGUgbG9jYWxlc1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZUNsYXNzID0gdm9pZCAwO1xuLy8geyA8cG9zaXggY2xhc3M+OiBbPHRyYW5zbGF0aW9uPiwgL3UgZmxhZyByZXF1aXJlZCwgbmVnYXRlZF1cbmNvbnN0IHBvc2l4Q2xhc3NlcyA9IHtcbiAgICAnWzphbG51bTpdJzogWydcXFxccHtMfVxcXFxwe05sfVxcXFxwe05kfScsIHRydWVdLFxuICAgICdbOmFscGhhOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9JywgdHJ1ZV0sXG4gICAgJ1s6YXNjaWk6XSc6IFsnXFxcXHgnICsgJzAwLVxcXFx4JyArICc3ZicsIGZhbHNlXSxcbiAgICAnWzpibGFuazpdJzogWydcXFxccHtac31cXFxcdCcsIHRydWVdLFxuICAgICdbOmNudHJsOl0nOiBbJ1xcXFxwe0NjfScsIHRydWVdLFxuICAgICdbOmRpZ2l0Ol0nOiBbJ1xcXFxwe05kfScsIHRydWVdLFxuICAgICdbOmdyYXBoOl0nOiBbJ1xcXFxwe1p9XFxcXHB7Q30nLCB0cnVlLCB0cnVlXSxcbiAgICAnWzpsb3dlcjpdJzogWydcXFxccHtMbH0nLCB0cnVlXSxcbiAgICAnWzpwcmludDpdJzogWydcXFxccHtDfScsIHRydWVdLFxuICAgICdbOnB1bmN0Ol0nOiBbJ1xcXFxwe1B9JywgdHJ1ZV0sXG4gICAgJ1s6c3BhY2U6XSc6IFsnXFxcXHB7Wn1cXFxcdFxcXFxyXFxcXG5cXFxcdlxcXFxmJywgdHJ1ZV0sXG4gICAgJ1s6dXBwZXI6XSc6IFsnXFxcXHB7THV9JywgdHJ1ZV0sXG4gICAgJ1s6d29yZDpdJzogWydcXFxccHtMfVxcXFxwe05sfVxcXFxwe05kfVxcXFxwe1BjfScsIHRydWVdLFxuICAgICdbOnhkaWdpdDpdJzogWydBLUZhLWYwLTknLCBmYWxzZV0sXG59O1xuLy8gb25seSBuZWVkIHRvIGVzY2FwZSBhIGZldyB0aGluZ3MgaW5zaWRlIG9mIGJyYWNlIGV4cHJlc3Npb25zXG4vLyBlc2NhcGVzOiBbIFxcIF0gLVxuY29uc3QgYnJhY2VFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bW1xcXVxcXFwtXS9nLCAnXFxcXCQmJyk7XG4vLyBlc2NhcGUgYWxsIHJlZ2V4cCBtYWdpYyBjaGFyYWN0ZXJzXG5jb25zdCByZWdleHBFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xuLy8gZXZlcnl0aGluZyBoYXMgYWxyZWFkeSBiZWVuIGVzY2FwZWQsIHdlIGp1c3QgaGF2ZSB0byBqb2luXG5jb25zdCByYW5nZXNUb1N0cmluZyA9IChyYW5nZXMpID0+IHJhbmdlcy5qb2luKCcnKTtcbi8vIHRha2VzIGEgZ2xvYiBzdHJpbmcgYXQgYSBwb3NpeCBicmFjZSBleHByZXNzaW9uLCBhbmQgcmV0dXJuc1xuLy8gYW4gZXF1aXZhbGVudCByZWd1bGFyIGV4cHJlc3Npb24gc291cmNlLCBhbmQgYm9vbGVhbiBpbmRpY2F0aW5nXG4vLyB3aGV0aGVyIHRoZSAvdSBmbGFnIG5lZWRzIHRvIGJlIGFwcGxpZWQsIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJzXG4vLyBjb25zdW1lZCB0byBwYXJzZSB0aGUgY2hhcmFjdGVyIGNsYXNzLlxuLy8gVGhpcyBhbHNvIHJlbW92ZXMgb3V0IG9mIG9yZGVyIHJhbmdlcywgYW5kIHJldHVybnMgKCQuKSBpZiB0aGVcbi8vIGVudGlyZSBjbGFzcyBqdXN0IG5vIGdvb2QuXG5jb25zdCBwYXJzZUNsYXNzID0gKGdsb2IsIHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3QgcG9zID0gcG9zaXRpb247XG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgaWYgKGdsb2IuY2hhckF0KHBvcykgIT09ICdbJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbiBhIGJyYWNlIGV4cHJlc3Npb24nKTtcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICBjb25zdCByYW5nZXMgPSBbXTtcbiAgICBjb25zdCBuZWdzID0gW107XG4gICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgIGxldCBzYXdTdGFydCA9IGZhbHNlO1xuICAgIGxldCB1ZmxhZyA9IGZhbHNlO1xuICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgIGxldCBuZWdhdGUgPSBmYWxzZTtcbiAgICBsZXQgZW5kUG9zID0gcG9zO1xuICAgIGxldCByYW5nZVN0YXJ0ID0gJyc7XG4gICAgV0hJTEU6IHdoaWxlIChpIDwgZ2xvYi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYyA9IGdsb2IuY2hhckF0KGkpO1xuICAgICAgICBpZiAoKGMgPT09ICchJyB8fCBjID09PSAnXicpICYmIGkgPT09IHBvcyArIDEpIHtcbiAgICAgICAgICAgIG5lZ2F0ZSA9IHRydWU7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ10nICYmIHNhd1N0YXJ0ICYmICFlc2NhcGluZykge1xuICAgICAgICAgICAgZW5kUG9zID0gaSArIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzYXdTdGFydCA9IHRydWU7XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmICghZXNjYXBpbmcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNjYXBlZCBcXCBjaGFyLCBmYWxsIHRocm91Z2ggYW5kIHRyZWF0IGxpa2Ugbm9ybWFsIGNoYXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ1snICYmICFlc2NhcGluZykge1xuICAgICAgICAgICAgLy8gZWl0aGVyIGEgcG9zaXggY2xhc3MsIGEgY29sbGF0aW9uIGVxdWl2YWxlbnQsIG9yIGp1c3QgYSBbXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtjbHMsIFt1bmlwLCB1LCBuZWddXSBvZiBPYmplY3QuZW50cmllcyhwb3NpeENsYXNzZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aChjbHMsIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWQsIFthLVtdIGlzIGZpbmUsIGJ1dCBub3QgW2EtWzphbHBoYV1dXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyckLicsIGZhbHNlLCBnbG9iLmxlbmd0aCAtIHBvcywgdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaSArPSBjbHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmVnKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmVncy5wdXNoKHVuaXApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaCh1bmlwKTtcbiAgICAgICAgICAgICAgICAgICAgdWZsYWcgPSB1ZmxhZyB8fCB1O1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBXSElMRTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IGl0J3MganVzdCBhIG5vcm1hbCBjaGFyYWN0ZXIsIGVmZmVjdGl2ZWx5XG4gICAgICAgIGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChyYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAvLyB0aHJvdyB0aGlzIHJhbmdlIGF3YXkgaWYgaXQncyBub3QgdmFsaWQsIGJ1dCBvdGhlcnNcbiAgICAgICAgICAgIC8vIGNhbiBzdGlsbCBtYXRjaC5cbiAgICAgICAgICAgIGlmIChjID4gcmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKHJhbmdlU3RhcnQpICsgJy0nICsgYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gcmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSAnJztcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyBtaWdodCBiZSB0aGUgc3RhcnQgb2YgYSByYW5nZS5cbiAgICAgICAgLy8gY2FuIGJlIGVpdGhlciBjLWQgb3IgYy1dIG9yIGM8bW9yZS4uLj5dIG9yIGNdIGF0IHRoaXMgcG9pbnRcbiAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnLV0nLCBpICsgMSkpIHtcbiAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMgKyAnLScpKTtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnbG9iLnN0YXJ0c1dpdGgoJy0nLCBpICsgMSkpIHtcbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSBjO1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90IHRoZSBzdGFydCBvZiBhIHJhbmdlLCBqdXN0IGEgc2luZ2xlIGNoYXJhY3RlclxuICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShjKSk7XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgaWYgKGVuZFBvcyA8IGkpIHtcbiAgICAgICAgLy8gZGlkbid0IHNlZSB0aGUgZW5kIG9mIHRoZSBjbGFzcywgbm90IGEgdmFsaWQgY2xhc3MsXG4gICAgICAgIC8vIGJ1dCBtaWdodCBzdGlsbCBiZSB2YWxpZCBhcyBhIGxpdGVyYWwgbWF0Y2guXG4gICAgICAgIHJldHVybiBbJycsIGZhbHNlLCAwLCBmYWxzZV07XG4gICAgfVxuICAgIC8vIGlmIHdlIGdvdCBubyByYW5nZXMgYW5kIG5vIG5lZ2F0ZXMsIHRoZW4gd2UgaGF2ZSBhIHJhbmdlIHRoYXRcbiAgICAvLyBjYW5ub3QgcG9zc2libHkgbWF0Y2ggYW55dGhpbmcsIGFuZCB0aGF0IHBvaXNvbnMgdGhlIHdob2xlIGdsb2JcbiAgICBpZiAoIXJhbmdlcy5sZW5ndGggJiYgIW5lZ3MubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbJyQuJywgZmFsc2UsIGdsb2IubGVuZ3RoIC0gcG9zLCB0cnVlXTtcbiAgICB9XG4gICAgLy8gaWYgd2UgZ290IG9uZSBwb3NpdGl2ZSByYW5nZSwgYW5kIGl0J3MgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGVuIHRoYXQnc1xuICAgIC8vIG5vdCBhY3R1YWxseSBhIG1hZ2ljIHBhdHRlcm4sIGl0J3MganVzdCB0aGF0IG9uZSBsaXRlcmFsIGNoYXJhY3Rlci5cbiAgICAvLyB3ZSBzaG91bGQgbm90IHRyZWF0IHRoYXQgYXMgXCJtYWdpY1wiLCB3ZSBzaG91bGQganVzdCByZXR1cm4gdGhlIGxpdGVyYWxcbiAgICAvLyBjaGFyYWN0ZXIuIFtfXSBpcyBhIHBlcmZlY3RseSB2YWxpZCB3YXkgdG8gZXNjYXBlIGdsb2IgbWFnaWMgY2hhcnMuXG4gICAgaWYgKG5lZ3MubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHJhbmdlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgL15cXFxcPy4kLy50ZXN0KHJhbmdlc1swXSkgJiZcbiAgICAgICAgIW5lZ2F0ZSkge1xuICAgICAgICBjb25zdCByID0gcmFuZ2VzWzBdLmxlbmd0aCA9PT0gMiA/IHJhbmdlc1swXS5zbGljZSgtMSkgOiByYW5nZXNbMF07XG4gICAgICAgIHJldHVybiBbcmVnZXhwRXNjYXBlKHIpLCBmYWxzZSwgZW5kUG9zIC0gcG9zLCBmYWxzZV07XG4gICAgfVxuICAgIGNvbnN0IHNyYW5nZXMgPSAnWycgKyAobmVnYXRlID8gJ14nIDogJycpICsgcmFuZ2VzVG9TdHJpbmcocmFuZ2VzKSArICddJztcbiAgICBjb25zdCBzbmVncyA9ICdbJyArIChuZWdhdGUgPyAnJyA6ICdeJykgKyByYW5nZXNUb1N0cmluZyhuZWdzKSArICddJztcbiAgICBjb25zdCBjb21iID0gcmFuZ2VzLmxlbmd0aCAmJiBuZWdzLmxlbmd0aFxuICAgICAgICA/ICcoJyArIHNyYW5nZXMgKyAnfCcgKyBzbmVncyArICcpJ1xuICAgICAgICA6IHJhbmdlcy5sZW5ndGhcbiAgICAgICAgICAgID8gc3Jhbmdlc1xuICAgICAgICAgICAgOiBzbmVncztcbiAgICByZXR1cm4gW2NvbWIsIHVmbGFnLCBlbmRQb3MgLSBwb3MsIHRydWVdO1xufTtcbmV4cG9ydHMucGFyc2VDbGFzcyA9IHBhcnNlQ2xhc3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1icmFjZS1leHByZXNzaW9ucy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51bmVzY2FwZSA9IHZvaWQgMDtcbi8qKlxuICogVW4tZXNjYXBlIGEgc3RyaW5nIHRoYXQgaGFzIGJlZW4gZXNjYXBlZCB3aXRoIHtAbGluayBlc2NhcGV9LlxuICpcbiAqIElmIHRoZSB7QGxpbmsgd2luZG93c1BhdGhzTm9Fc2NhcGV9IG9wdGlvbiBpcyB1c2VkLCB0aGVuIHNxdWFyZS1icmFjZVxuICogZXNjYXBlcyBhcmUgcmVtb3ZlZCwgYnV0IG5vdCBiYWNrc2xhc2ggZXNjYXBlcy4gIEZvciBleGFtcGxlLCBpdCB3aWxsIHR1cm5cbiAqIHRoZSBzdHJpbmcgYCdbKl0nYCBpbnRvIGAqYCwgYnV0IGl0IHdpbGwgbm90IHR1cm4gYCdcXFxcKidgIGludG8gYCcqJ2AsXG4gKiBiZWN1YXNlIGBcXGAgaXMgYSBwYXRoIHNlcGFyYXRvciBpbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIG1vZGUuXG4gKlxuICogV2hlbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIGlzIG5vdCBzZXQsIHRoZW4gYm90aCBicmFjZSBlc2NhcGVzIGFuZFxuICogYmFja3NsYXNoIGVzY2FwZXMgYXJlIHJlbW92ZWQuXG4gKlxuICogU2xhc2hlcyAoYW5kIGJhY2tzbGFzaGVzIGluIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgbW9kZSkgY2Fubm90IGJlIGVzY2FwZWRcbiAqIG9yIHVuZXNjYXBlZC5cbiAqL1xuY29uc3QgdW5lc2NhcGUgPSAocywgeyB3aW5kb3dzUGF0aHNOb0VzY2FwZSA9IGZhbHNlLCB9ID0ge30pID0+IHtcbiAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGVcbiAgICAgICAgPyBzLnJlcGxhY2UoL1xcWyhbXlxcL1xcXFxdKVxcXS9nLCAnJDEnKVxuICAgICAgICA6IHMucmVwbGFjZSgvKCg/IVxcXFwpLnxeKVxcWyhbXlxcL1xcXFxdKVxcXS9nLCAnJDEkMicpLnJlcGxhY2UoL1xcXFwoW15cXC9dKS9nLCAnJDEnKTtcbn07XG5leHBvcnRzLnVuZXNjYXBlID0gdW5lc2NhcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmVzY2FwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gcGFyc2UgYSBzaW5nbGUgcGF0aCBwb3J0aW9uXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFTVCA9IHZvaWQgMDtcbmNvbnN0IGJyYWNlX2V4cHJlc3Npb25zX2pzXzEgPSByZXF1aXJlKFwiLi9icmFjZS1leHByZXNzaW9ucy5qc1wiKTtcbmNvbnN0IHVuZXNjYXBlX2pzXzEgPSByZXF1aXJlKFwiLi91bmVzY2FwZS5qc1wiKTtcbmNvbnN0IHR5cGVzID0gbmV3IFNldChbJyEnLCAnPycsICcrJywgJyonLCAnQCddKTtcbmNvbnN0IGlzRXh0Z2xvYlR5cGUgPSAoYykgPT4gdHlwZXMuaGFzKGMpO1xuLy8gUGF0dGVybnMgdGhhdCBnZXQgcHJlcGVuZGVkIHRvIGJpbmQgdG8gdGhlIHN0YXJ0IG9mIGVpdGhlciB0aGVcbi8vIGVudGlyZSBzdHJpbmcsIG9yIGp1c3QgYSBzaW5nbGUgcGF0aCBwb3J0aW9uLCB0byBwcmV2ZW50IGRvdHNcbi8vIGFuZC9vciB0cmF2ZXJzYWwgcGF0dGVybnMsIHdoZW4gbmVlZGVkLlxuLy8gRXh0cyBkb24ndCBuZWVkIHRoZSBeIG9yIC8gYml0LCBiZWNhdXNlIHRoZSByb290IGJpbmRzIHRoYXQgYWxyZWFkeS5cbmNvbnN0IHN0YXJ0Tm9UcmF2ZXJzYWwgPSAnKD8hKD86XnwvKVxcXFwuXFxcXC4/KD86JHwvKSknO1xuY29uc3Qgc3RhcnROb0RvdCA9ICcoPyFcXFxcLiknO1xuLy8gY2hhcmFjdGVycyB0aGF0IGluZGljYXRlIGEgc3RhcnQgb2YgcGF0dGVybiBuZWVkcyB0aGUgXCJubyBkb3RzXCIgYml0LFxuLy8gYmVjYXVzZSBhIGRvdCAqbWlnaHQqIGJlIG1hdGNoZWQuICggaXMgbm90IGluIHRoZSBsaXN0LCBiZWNhdXNlIGluXG4vLyB0aGUgY2FzZSBvZiBhIGNoaWxkIGV4dGdsb2IsIGl0IHdpbGwgaGFuZGxlIHRoZSBwcmV2ZW50aW9uIGl0c2VsZi5cbmNvbnN0IGFkZFBhdHRlcm5TdGFydCA9IG5ldyBTZXQoWydbJywgJy4nXSk7XG4vLyBjYXNlcyB3aGVyZSB0cmF2ZXJzYWwgaXMgQS1PSywgbm8gZG90IHByZXZlbnRpb24gbmVlZGVkXG5jb25zdCBqdXN0RG90cyA9IG5ldyBTZXQoWycuLicsICcuJ10pO1xuY29uc3QgcmVTcGVjaWFscyA9IG5ldyBTZXQoJygpLip7fSs/W11eJFxcXFwhJyk7XG5jb25zdCByZWdFeHBFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyB1c2UgKyB3aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgKnNvbWV0aGluZyogbWF0Y2hlcywgYmVjYXVzZSB0aGUgKiBpc1xuLy8gdGhlIG9ubHkgdGhpbmcgaW4gdGhlIHBhdGggcG9ydGlvbi5cbmNvbnN0IHN0YXJOb0VtcHR5ID0gcW1hcmsgKyAnKz8nO1xuLy8gcmVtb3ZlIHRoZSBcXCBjaGFycyB0aGF0IHdlIGFkZGVkIGlmIHdlIGVuZCB1cCBkb2luZyBhIG5vbm1hZ2ljIGNvbXBhcmVcbi8vIGNvbnN0IGRlc2xhc2ggPSAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJylcbmNsYXNzIEFTVCB7XG4gICAgdHlwZTtcbiAgICAjcm9vdDtcbiAgICAjaGFzTWFnaWM7XG4gICAgI3VmbGFnID0gZmFsc2U7XG4gICAgI3BhcnRzID0gW107XG4gICAgI3BhcmVudDtcbiAgICAjcGFyZW50SW5kZXg7XG4gICAgI25lZ3M7XG4gICAgI2ZpbGxlZE5lZ3MgPSBmYWxzZTtcbiAgICAjb3B0aW9ucztcbiAgICAjdG9TdHJpbmc7XG4gICAgLy8gc2V0IHRvIHRydWUgaWYgaXQncyBhbiBleHRnbG9iIHdpdGggbm8gY2hpbGRyZW5cbiAgICAvLyAod2hpY2ggcmVhbGx5IG1lYW5zIG9uZSBjaGlsZCBvZiAnJylcbiAgICAjZW1wdHlFeHQgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICAvLyBleHRnbG9icyBhcmUgaW5oZXJlbnRseSBtYWdpY2FsXG4gICAgICAgIGlmICh0eXBlKVxuICAgICAgICAgICAgdGhpcy4jaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICB0aGlzLiNwYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuI3Jvb3QgPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3Jvb3QgOiB0aGlzO1xuICAgICAgICB0aGlzLiNvcHRpb25zID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IG9wdGlvbnMgOiB0aGlzLiNyb290LiNvcHRpb25zO1xuICAgICAgICB0aGlzLiNuZWdzID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IFtdIDogdGhpcy4jcm9vdC4jbmVncztcbiAgICAgICAgaWYgKHR5cGUgPT09ICchJyAmJiAhdGhpcy4jcm9vdC4jZmlsbGVkTmVncylcbiAgICAgICAgICAgIHRoaXMuI25lZ3MucHVzaCh0aGlzKTtcbiAgICAgICAgdGhpcy4jcGFyZW50SW5kZXggPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3BhcnRzLmxlbmd0aCA6IDA7XG4gICAgfVxuICAgIGdldCBoYXNNYWdpYygpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLiNoYXNNYWdpYyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2hhc01hZ2ljO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAocC50eXBlIHx8IHAuaGFzTWFnaWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNoYXNNYWdpYyA9IHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGU6IHdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIHdlIGdlbmVyYXRlIHRoZSByZWdleHAgc3JjIGFuZCBmaW5kIG91dFxuICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgfVxuICAgIC8vIHJlY29uc3RydWN0cyB0aGUgcGF0dGVyblxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBpZiAodGhpcy4jdG9TdHJpbmcgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiN0b1N0cmluZztcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jdG9TdHJpbmcgPSB0aGlzLiNwYXJ0cy5tYXAocCA9PiBTdHJpbmcocCkpLmpvaW4oJycpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jdG9TdHJpbmcgPVxuICAgICAgICAgICAgICAgIHRoaXMudHlwZSArICcoJyArIHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignfCcpICsgJyknKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjZmlsbE5lZ3MoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcyAhPT0gdGhpcy4jcm9vdClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG9ubHkgY2FsbCBvbiByb290Jyk7XG4gICAgICAgIGlmICh0aGlzLiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIC8vIGNhbGwgdG9TdHJpbmcoKSBvbmNlIHRvIGZpbGwgdGhpcyBvdXRcbiAgICAgICAgdGhpcy50b1N0cmluZygpO1xuICAgICAgICB0aGlzLiNmaWxsZWROZWdzID0gdHJ1ZTtcbiAgICAgICAgbGV0IG47XG4gICAgICAgIHdoaWxlICgobiA9IHRoaXMuI25lZ3MucG9wKCkpKSB7XG4gICAgICAgICAgICBpZiAobi50eXBlICE9PSAnIScpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvLyB3YWxrIHVwIHRoZSB0cmVlLCBhcHBlbmRpbmcgZXZlcnRoaW5nIHRoYXQgY29tZXMgQUZURVIgcGFyZW50SW5kZXhcbiAgICAgICAgICAgIGxldCBwID0gbjtcbiAgICAgICAgICAgIGxldCBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIHdoaWxlIChwcCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBwLiNwYXJlbnRJbmRleCArIDE7ICFwcC50eXBlICYmIGkgPCBwcC4jcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG4uI3BhcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBwYXJ0IGluIGV4dGdsb2IgQVNUPz8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmNvcHlJbihwcC4jcGFydHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHAgPSBwcDtcbiAgICAgICAgICAgICAgICBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcHVzaCguLi5wYXJ0cykge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwID09PSAnJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJyAmJiAhKHAgaW5zdGFuY2VvZiBBU1QgJiYgcC4jcGFyZW50ID09PSB0aGlzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwYXJ0OiAnICsgcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jcGFydHMucHVzaChwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMudHlwZSA9PT0gbnVsbFxuICAgICAgICAgICAgPyB0aGlzLiNwYXJ0cy5zbGljZSgpLm1hcChwID0+ICh0eXBlb2YgcCA9PT0gJ3N0cmluZycgPyBwIDogcC50b0pTT04oKSkpXG4gICAgICAgICAgICA6IFt0aGlzLnR5cGUsIC4uLnRoaXMuI3BhcnRzLm1hcChwID0+IHAudG9KU09OKCkpXTtcbiAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpICYmICF0aGlzLnR5cGUpXG4gICAgICAgICAgICByZXQudW5zaGlmdChbXSk7XG4gICAgICAgIGlmICh0aGlzLmlzRW5kKCkgJiZcbiAgICAgICAgICAgICh0aGlzID09PSB0aGlzLiNyb290IHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuI3Jvb3QuI2ZpbGxlZE5lZ3MgJiYgdGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goe30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlzU3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyb290ID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIGlmICh0aGlzLnR5cGUpIHJldHVybiAhIXRoaXMuI3BhcmVudD8uaXNTdGFydCgpXG4gICAgICAgIGlmICghdGhpcy4jcGFyZW50Py5pc1N0YXJ0KCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLiNwYXJlbnRJbmRleCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBpZiBldmVyeXRoaW5nIEFIRUFEIG9mIHRoaXMgaXMgYSBuZWdhdGlvbiwgdGhlbiBpdCdzIHN0aWxsIHRoZSBcInN0YXJ0XCJcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuI3BhcmVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNwYXJlbnRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwcCA9IHAuI3BhcnRzW2ldO1xuICAgICAgICAgICAgaWYgKCEocHAgaW5zdGFuY2VvZiBBU1QgJiYgcHAudHlwZSA9PT0gJyEnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaXNFbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyb290ID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuI3BhcmVudD8uaXNFbmQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50Py5pc0VuZCgpO1xuICAgICAgICAvLyBpZiBub3Qgcm9vdCwgaXQnbGwgYWx3YXlzIGhhdmUgYSBwYXJlbnRcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGFyZW50ID8gdGhpcy4jcGFyZW50LiNwYXJ0cy5sZW5ndGggOiAwO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50SW5kZXggPT09IHBsIC0gMTtcbiAgICB9XG4gICAgY29weUluKHBhcnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHRoaXMucHVzaChwYXJ0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wdXNoKHBhcnQuY2xvbmUodGhpcykpO1xuICAgIH1cbiAgICBjbG9uZShwYXJlbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IG5ldyBBU1QodGhpcy50eXBlLCBwYXJlbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGMuY29weUluKHApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlQVNUKHN0ciwgYXN0LCBwb3MsIG9wdCkge1xuICAgICAgICBsZXQgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgbGV0IGJyYWNlU3RhcnQgPSAtMTtcbiAgICAgICAgbGV0IGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgIGlmIChhc3QudHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiBhIGV4dGdsb2IsIGFwcGVuZCB1bnRpbCB3ZSBmaW5kIGEgc3RhcnRcbiAgICAgICAgICAgIGxldCBpID0gcG9zO1xuICAgICAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGkgPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0cyB0aGF0IGFyZSBlc2NhcGVkXG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5CcmFjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICddJyAmJiAhKGkgPT09IGJyYWNlU3RhcnQgKyAyICYmIGJyYWNlTmVnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW9wdC5ub2V4dCAmJiBpc0V4dGdsb2JUeXBlKGMpICYmIHN0ci5jaGFyQXQoaSkgPT09ICcoJykge1xuICAgICAgICAgICAgICAgICAgICBhc3QucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gbmV3IEFTVChjLCBhc3QpO1xuICAgICAgICAgICAgICAgICAgICBpID0gQVNULiNwYXJzZUFTVChzdHIsIGV4dCwgaSwgb3B0KTtcbiAgICAgICAgICAgICAgICAgICAgYXN0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXN0LnB1c2goYWNjKTtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNvbWUga2luZCBvZiBleHRnbG9iLCBwb3MgaXMgYXQgdGhlIChcbiAgICAgICAgLy8gZmluZCB0aGUgbmV4dCB8IG9yIClcbiAgICAgICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgICAgICBsZXQgcGFydCA9IG5ldyBBU1QobnVsbCwgYXN0KTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBzdHIuY2hhckF0KGkrKyk7XG4gICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgIGlmIChlc2NhcGluZyB8fCBjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGJyYWNlU3RhcnQgKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBpbkJyYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRXh0Z2xvYlR5cGUoYykgJiYgc3RyLmNoYXJBdChpKSA9PT0gJygnKSB7XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gbmV3IEFTVChjLCBwYXJ0KTtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICBpID0gQVNULiNwYXJzZUFTVChzdHIsIGV4dCwgaSwgb3B0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnfCcpIHtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHBhcnQgPSBuZXcgQVNUKG51bGwsIGFzdCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyknKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjYyA9PT0gJycgJiYgYXN0LiNwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXN0LiNlbXB0eUV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIGFzdC5wdXNoKC4uLnBhcnRzLCBwYXJ0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICB9XG4gICAgICAgIC8vIHVuZmluaXNoZWQgZXh0Z2xvYlxuICAgICAgICAvLyBpZiB3ZSBnb3QgaGVyZSwgaXQgd2FzIGEgbWFsZm9ybWVkIGV4dGdsb2IhIG5vdCBhbiBleHRnbG9iLCBidXRcbiAgICAgICAgLy8gbWF5YmUgc29tZXRoaW5nIGVsc2UgaW4gdGhlcmUuXG4gICAgICAgIGFzdC50eXBlID0gbnVsbDtcbiAgICAgICAgYXN0LiNoYXNNYWdpYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgYXN0LiNwYXJ0cyA9IFtzdHIuc3Vic3RyaW5nKHBvcyAtIDEpXTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tR2xvYihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgYXN0ID0gbmV3IEFTVChudWxsLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICAgICAgICBBU1QuI3BhcnNlQVNUKHBhdHRlcm4sIGFzdCwgMCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBhc3Q7XG4gICAgfVxuICAgIC8vIHJldHVybnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB0aGVyZSdzIG1hZ2ljLCBvciB0aGUgdW5lc2NhcGVkXG4gICAgLy8gc3RyaW5nIGlmIG5vdC5cbiAgICB0b01NUGF0dGVybigpIHtcbiAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHJvb3RcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzICE9PSB0aGlzLiNyb290KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jvb3QudG9NTVBhdHRlcm4oKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgY29uc3QgZ2xvYiA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgW3JlLCBib2R5LCBoYXNNYWdpYywgdWZsYWddID0gdGhpcy50b1JlZ0V4cFNvdXJjZSgpO1xuICAgICAgICAvLyBpZiB3ZSdyZSBpbiBub2Nhc2UgbW9kZSwgYW5kIG5vdCBub2Nhc2VNYWdpY09ubHksIHRoZW4gd2UgZG9cbiAgICAgICAgLy8gc3RpbGwgbmVlZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB3ZSBoYXZlIHRvIGNhc2UtaW5zZW5zaXRpdmVseVxuICAgICAgICAvLyBtYXRjaCBjYXBpdGFsL2xvd2VyY2FzZSBjaGFyYWN0ZXJzLlxuICAgICAgICBjb25zdCBhbnlNYWdpYyA9IGhhc01hZ2ljIHx8XG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyB8fFxuICAgICAgICAgICAgKHRoaXMuI29wdGlvbnMubm9jYXNlICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI29wdGlvbnMubm9jYXNlTWFnaWNPbmx5ICYmXG4gICAgICAgICAgICAgICAgZ2xvYi50b1VwcGVyQ2FzZSgpICE9PSBnbG9iLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoIWFueU1hZ2ljKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFncyA9ICh0aGlzLiNvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnKSArICh1ZmxhZyA/ICd1JyA6ICcnKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFJlZ0V4cChgXiR7cmV9JGAsIGZsYWdzKSwge1xuICAgICAgICAgICAgX3NyYzogcmUsXG4gICAgICAgICAgICBfZ2xvYjogZ2xvYixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jb3B0aW9ucztcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgc3RyaW5nIG1hdGNoLCB0aGUgcmVnZXhwIHNvdXJjZSwgd2hldGhlciB0aGVyZSdzIG1hZ2ljXG4gICAgLy8gaW4gdGhlIHJlZ2V4cCAoc28gYSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcmVxdWlyZWQpIGFuZCB3aGV0aGVyIG9yXG4gICAgLy8gbm90IHRoZSB1ZmxhZyBpcyBuZWVkZWQgZm9yIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKGZvciBwb3NpeCBjbGFzc2VzKVxuICAgIC8vIFRPRE86IGluc3RlYWQgb2YgaW5qZWN0aW5nIHRoZSBzdGFydC9lbmQgYXQgdGhpcyBwb2ludCwganVzdCByZXR1cm5cbiAgICAvLyB0aGUgQk9EWSBvZiB0aGUgcmVnZXhwLCBhbG9uZyB3aXRoIHRoZSBzdGFydC9lbmQgcG9ydGlvbnMgc3VpdGFibGVcbiAgICAvLyBmb3IgYmluZGluZyB0aGUgc3RhcnQvZW5kIGluIGVpdGhlciBhIGpvaW5lZCBmdWxsLXBhdGggbWFrZVJlIGNvbnRleHRcbiAgICAvLyAod2hlcmUgd2UgYmluZCB0byAoXnwvKSwgb3IgYSBzdGFuZGFsb25lIG1hdGNoUGFydCBjb250ZXh0ICh3aGVyZVxuICAgIC8vIHdlIGJpbmQgdG8gXiwgYW5kIG5vdCAvKS4gIE90aGVyd2lzZSBzbGFzaGVzIGdldCBkdXBlZCFcbiAgICAvL1xuICAgIC8vIEluIHBhcnQtbWF0Y2hpbmcgbW9kZSwgdGhlIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiBeKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiBeXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogXig/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNFbmQoKTogbm90aGluZ1xuICAgIC8vIC0gZWxzZTogJFxuICAgIC8vXG4gICAgLy8gSW4gZnVsbC1wYXRoIG1hdGNoaW5nIG1vZGUsIHdlIHB1dCB0aGUgc2xhc2ggYXQgdGhlIFNUQVJUIG9mIHRoZVxuICAgIC8vIHBhdHRlcm4sIHNvIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgZmlyc3QgcGF0dGVybjogc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGlmIG5vdCBpc1N0YXJ0KCk6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAvKD8hXFwuXFwuPyg/OiR8LykpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAvXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogLyg/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBsYXN0IHBhdHRlcm4sIHNhbWUgYXMgcGFydC1tYXRjaGluZyBtb2RlXG4gICAgLy8gLSBlbHNlIG5vdGhpbmdcbiAgICAvL1xuICAgIC8vIEFsd2F5cyBwdXQgdGhlICg/OiR8Lykgb24gbmVnYXRlZCB0YWlscywgdGhvdWdoLCBiZWNhdXNlIHRoYXQgaGFzIHRvIGJlXG4gICAgLy8gdGhlcmUgdG8gYmluZCB0aGUgZW5kIG9mIHRoZSBuZWdhdGVkIHBhdHRlcm4gcG9ydGlvbiwgYW5kIGl0J3MgZWFzaWVyIHRvXG4gICAgLy8ganVzdCBzdGljayBpdCBpbiBub3cgcmF0aGVyIHRoYW4gdHJ5IHRvIGluamVjdCBpdCBsYXRlciBpbiB0aGUgbWlkZGxlIG9mXG4gICAgLy8gdGhlIHBhdHRlcm4uXG4gICAgLy9cbiAgICAvLyBXZSBjYW4ganVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGVuZCwgYW5kIGxlYXZlIGl0IHVwIHRvIHRoZSBjYWxsZXJcbiAgICAvLyB0byBrbm93IHdoZXRoZXIgaXQncyBnb2luZyB0byBiZSB1c2VkIGpvaW5lZCBvciBpbiBwYXJ0cy5cbiAgICAvLyBBbmQsIGlmIHRoZSBzdGFydCBpcyBhZGp1c3RlZCBzbGlnaHRseSwgY2FuIGRvIHRoZSBzYW1lIHRoZXJlOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAoPzovfF4pXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogKD86L3xeKSg/IVxcLilcbiAgICAvL1xuICAgIC8vIEJ1dCBpdCdzIGJldHRlciB0byBoYXZlIGEgc2ltcGxlciBiaW5kaW5nIHdpdGhvdXQgYSBjb25kaXRpb25hbCwgZm9yXG4gICAgLy8gcGVyZm9ybWFuY2UsIHNvIHByb2JhYmx5IGJldHRlciB0byByZXR1cm4gYm90aCBzdGFydCBvcHRpb25zLlxuICAgIC8vXG4gICAgLy8gVGhlbiB0aGUgY2FsbGVyIGp1c3QgaWdub3JlcyB0aGUgZW5kIGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBwYXR0ZXJuLFxuICAgIC8vIGFuZCB0aGUgc3RhcnQgYWx3YXlzIGdldHMgYXBwbGllZC5cbiAgICAvL1xuICAgIC8vIEJ1dCB0aGF0J3MgYWx3YXlzIGdvaW5nIHRvIGJlICQgaWYgaXQncyB0aGUgZW5kaW5nIHBhdHRlcm4sIG9yIG5vdGhpbmcsXG4gICAgLy8gc28gdGhlIGNhbGxlciBjYW4ganVzdCBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gYnVpbGRpbmcuXG4gICAgLy9cbiAgICAvLyBTbyB0aGUgdG9kbyBpczpcbiAgICAvLyAtIGJldHRlciBkZXRlY3Qgd2hhdCBraW5kIG9mIHN0YXJ0IGlzIG5lZWRlZFxuICAgIC8vIC0gcmV0dXJuIGJvdGggZmxhdm9ycyBvZiBzdGFydGluZyBwYXR0ZXJuXG4gICAgLy8gLSBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gY3JlYXRpbmcgdGhlIGFjdHVhbCBSZWdFeHBcbiAgICAvL1xuICAgIC8vIEFoLCBidXQgd2FpdCwgbm8sIHRoYXQgYWxsIG9ubHkgYXBwbGllcyB0byB0aGUgcm9vdCB3aGVuIHRoZSBmaXJzdCBwYXR0ZXJuXG4gICAgLy8gaXMgbm90IGFuIGV4dGdsb2IuIElmIHRoZSBmaXJzdCBwYXR0ZXJuIElTIGFuIGV4dGdsb2IsIHRoZW4gd2UgbmVlZCBhbGxcbiAgICAvLyB0aGF0IGRvdCBwcmV2ZW50aW9uIGJpeiB0byBsaXZlIGluIHRoZSBleHRnbG9iIHBvcnRpb25zLCBiZWNhdXNlIGVnXG4gICAgLy8gKygqfC54KikgY2FuIG1hdGNoIC54eSBidXQgbm90IC55eC5cbiAgICAvL1xuICAgIC8vIFNvLCByZXR1cm4gdGhlIHR3byBmbGF2b3JzIGlmIGl0J3MgI3Jvb3QgYW5kIHRoZSBmaXJzdCBjaGlsZCBpcyBub3QgYW5cbiAgICAvLyBBU1QsIG90aGVyd2lzZSBsZWF2ZSBpdCB0byB0aGUgY2hpbGQgQVNUIHRvIGhhbmRsZSBpdCwgYW5kIHRoZXJlLFxuICAgIC8vIHVzZSB0aGUgKD86XnwvKSBzdHlsZSBvZiBzdGFydCBiaW5kaW5nLlxuICAgIC8vXG4gICAgLy8gRXZlbiBzaW1wbGlmaWVkIGZ1cnRoZXI6XG4gICAgLy8gLSBTaW5jZSB0aGUgc3RhcnQgZm9yIGEgam9pbiBpcyBlZyAvKD8hXFwuKSBhbmQgdGhlIHN0YXJ0IGZvciBhIHBhcnRcbiAgICAvLyBpcyBeKD8hXFwuKSwgd2UgY2FuIGp1c3QgcHJlcGVuZCAoPyFcXC4pIHRvIHRoZSBwYXR0ZXJuIChlaXRoZXIgcm9vdFxuICAgIC8vIG9yIHN0YXJ0IG9yIHdoYXRldmVyKSBhbmQgcHJlcGVuZCBeIG9yIC8gYXQgdGhlIFJlZ2V4cCBjb25zdHJ1Y3Rpb24uXG4gICAgdG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpIHtcbiAgICAgICAgY29uc3QgZG90ID0gYWxsb3dEb3QgPz8gISF0aGlzLiNvcHRpb25zLmRvdDtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICB0aGlzLiNmaWxsTmVncygpO1xuICAgICAgICBpZiAoIXRoaXMudHlwZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9FbXB0eSA9IHRoaXMuaXNTdGFydCgpICYmIHRoaXMuaXNFbmQoKTtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHRoaXMuI3BhcnRzXG4gICAgICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcmUsIF8sIGhhc01hZ2ljLCB1ZmxhZ10gPSB0eXBlb2YgcCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBBU1QuI3BhcnNlR2xvYihwLCB0aGlzLiNoYXNNYWdpYywgbm9FbXB0eSlcbiAgICAgICAgICAgICAgICAgICAgOiBwLnRvUmVnRXhwU291cmNlKGFsbG93RG90KTtcbiAgICAgICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHRoaXMuI2hhc01hZ2ljIHx8IGhhc01hZ2ljO1xuICAgICAgICAgICAgICAgIHRoaXMuI3VmbGFnID0gdGhpcy4jdWZsYWcgfHwgdWZsYWc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3RhcnQoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy4jcGFydHNbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHN0cmluZyB0aGF0IHdpbGwgbWF0Y2ggdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuLFxuICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBkb3RzIGFuZCBzdWNoLlxuICAgICAgICAgICAgICAgICAgICAvLyAnLicgYW5kICcuLicgY2Fubm90IG1hdGNoIHVubGVzcyB0aGUgcGF0dGVybiBpcyB0aGF0IGV4YWN0bHksXG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgaXQgc3RhcnRzIHdpdGggLiBvciBkb3Q6dHJ1ZSBpcyBzZXQuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdFRyYXZBbGxvd2VkID0gdGhpcy4jcGFydHMubGVuZ3RoID09PSAxICYmIGp1c3REb3RzLmhhcyh0aGlzLiNwYXJ0c1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG90VHJhdkFsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcyA9IGFkZFBhdHRlcm5TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYSBwb3NzaWJpbGl0eSBvZiBtYXRjaGluZyAuIG9yIC4uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHByZXZlbnQgdGhhdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWROb1RyYXYgPSBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvdHMgYXJlIGFsbG93ZWQsIGFuZCB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgIChkb3QgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDApKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBcXC4sIGFuZCB0aGVuIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcmMuc3RhcnRzV2l0aCgnXFxcXC4nKSAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMikpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFxcLlxcLiwgYW5kIHRoZW4gWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyYy5zdGFydHNXaXRoKCdcXFxcLlxcXFwuJykgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDQpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIHByZXZlbnQgZG90cyBpZiBpdCBjYW4ndCBtYXRjaCBhIGRvdCwgb3IgaWYgYVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3ViLXBhdHRlcm4gd2lsbCBiZSBwcmV2ZW50aW5nIGl0IGFueXdheS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWROb0RvdCA9ICFkb3QgJiYgIWFsbG93RG90ICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG5lZWROb1RyYXYgPyBzdGFydE5vVHJhdmVyc2FsIDogbmVlZE5vRG90ID8gc3RhcnROb0RvdCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXBwZW5kIHRoZSBcImVuZCBvZiBwYXRoIHBvcnRpb25cIiBwYXR0ZXJuIHRvIG5lZ2F0aW9uIHRhaWxzXG4gICAgICAgICAgICBsZXQgZW5kID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VuZCgpICYmXG4gICAgICAgICAgICAgICAgdGhpcy4jcm9vdC4jZmlsbGVkTmVncyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuI3BhcmVudD8udHlwZSA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgZW5kID0gJyg/OiR8XFxcXC8pJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbmFsID0gc3RhcnQgKyBzcmMgKyBlbmQ7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGZpbmFsLFxuICAgICAgICAgICAgICAgICgwLCB1bmVzY2FwZV9qc18xLnVuZXNjYXBlKShzcmMpLFxuICAgICAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgICAgIHRoaXMuI3VmbGFnLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgYm9keSAqdHdpY2UqIGlmIGl0J3MgYSByZXBlYXQgcGF0dGVyblxuICAgICAgICAvLyBhdCB0aGUgc3RhcnQsIG9uY2UgaW4gbm9kb3QgbW9kZSwgdGhlbiBhZ2FpbiBpbiBkb3QgbW9kZSwgc28gYVxuICAgICAgICAvLyBwYXR0ZXJuIGxpa2UgKig/KSBjYW4gbWF0Y2ggJ3gueSdcbiAgICAgICAgY29uc3QgcmVwZWF0ZWQgPSB0aGlzLnR5cGUgPT09ICcqJyB8fCB0aGlzLnR5cGUgPT09ICcrJztcbiAgICAgICAgLy8gc29tZSBraW5kIG9mIGV4dGdsb2JcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnR5cGUgPT09ICchJyA/ICcoPzooPyEoPzonIDogJyg/Oic7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy4jcGFydHNUb1JlZ0V4cChkb3QpO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpICYmICFib2R5ICYmIHRoaXMudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICAvLyBpbnZhbGlkIGV4dGdsb2IsIGhhcyB0byBhdCBsZWFzdCBiZSAqc29tZXRoaW5nKiBwcmVzZW50LCBpZiBpdCdzXG4gICAgICAgICAgICAvLyB0aGUgZW50aXJlIHBhdGggcG9ydGlvbi5cbiAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLiNwYXJ0cyA9IFtzXTtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBbcywgKDAsIHVuZXNjYXBlX2pzXzEudW5lc2NhcGUpKHRoaXMudG9TdHJpbmcoKSksIGZhbHNlLCBmYWxzZV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gWFhYIGFic3RyYWN0IG91dCB0aGlzIG1hcCBtZXRob2RcbiAgICAgICAgbGV0IGJvZHlEb3RBbGxvd2VkID0gIXJlcGVhdGVkIHx8IGFsbG93RG90IHx8IGRvdCB8fCAhc3RhcnROb0RvdFxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiB0aGlzLiNwYXJ0c1RvUmVnRXhwKHRydWUpO1xuICAgICAgICBpZiAoYm9keURvdEFsbG93ZWQgPT09IGJvZHkpIHtcbiAgICAgICAgICAgIGJvZHlEb3RBbGxvd2VkID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHlEb3RBbGxvd2VkKSB7XG4gICAgICAgICAgICBib2R5ID0gYCg/OiR7Ym9keX0pKD86JHtib2R5RG90QWxsb3dlZH0pKj9gO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFuIGVtcHR5ICEoKSBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gYSBzdGFyTm9FbXB0eVxuICAgICAgICBsZXQgZmluYWwgPSAnJztcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJyEnICYmIHRoaXMuI2VtcHR5RXh0KSB7XG4gICAgICAgICAgICBmaW5hbCA9ICh0aGlzLmlzU3RhcnQoKSAmJiAhZG90ID8gc3RhcnROb0RvdCA6ICcnKSArIHN0YXJOb0VtcHR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY2xvc2UgPSB0aGlzLnR5cGUgPT09ICchJ1xuICAgICAgICAgICAgICAgID8gLy8gISgpIG11c3QgbWF0Y2ggc29tZXRoaW5nLGJ1dCAhKHgpIGNhbiBtYXRjaCAnJ1xuICAgICAgICAgICAgICAgICAgICAnKSknICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmlzU3RhcnQoKSAmJiAhZG90ICYmICFhbGxvd0RvdCA/IHN0YXJ0Tm9Eb3QgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhciArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJ0AnXG4gICAgICAgICAgICAgICAgICAgID8gJyknXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnPydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJyk/J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICcrJyAmJiBib2R5RG90QWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJyknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICcqJyAmJiBib2R5RG90QWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGApP2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgKSR7dGhpcy50eXBlfWA7XG4gICAgICAgICAgICBmaW5hbCA9IHN0YXJ0ICsgYm9keSArIGNsb3NlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBmaW5hbCxcbiAgICAgICAgICAgICgwLCB1bmVzY2FwZV9qc18xLnVuZXNjYXBlKShib2R5KSxcbiAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgdGhpcy4jdWZsYWcsXG4gICAgICAgIF07XG4gICAgfVxuICAgICNwYXJ0c1RvUmVnRXhwKGRvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFydHNcbiAgICAgICAgICAgIC5tYXAocCA9PiB7XG4gICAgICAgICAgICAvLyBleHRnbG9iIEFTVHMgc2hvdWxkIG9ubHkgY29udGFpbiBwYXJlbnQgQVNUc1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgdHlwZSBpbiBleHRnbG9iIGFzdD8/Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgLy8gY2FuIGlnbm9yZSBoYXNNYWdpYywgYmVjYXVzZSBleHRnbG9icyBhcmUgYWxyZWFkeSBhbHdheXMgbWFnaWNcbiAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgX2hhc01hZ2ljLCB1ZmxhZ10gPSBwLnRvUmVnRXhwU291cmNlKGRvdCk7XG4gICAgICAgICAgICB0aGlzLiN1ZmxhZyA9IHRoaXMuI3VmbGFnIHx8IHVmbGFnO1xuICAgICAgICAgICAgcmV0dXJuIHJlO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcihwID0+ICEodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpKSB8fCAhIXApXG4gICAgICAgICAgICAuam9pbignfCcpO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlR2xvYihnbG9iLCBoYXNNYWdpYywgbm9FbXB0eSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgcmUgPSAnJztcbiAgICAgICAgbGV0IHVmbGFnID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYyA9IGdsb2IuY2hhckF0KGkpO1xuICAgICAgICAgICAgaWYgKGVzY2FwaW5nKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZSArPSAocmVTcGVjaWFscy5oYXMoYykgPyAnXFxcXCcgOiAnJykgKyBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSBnbG9iLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gJ1xcXFxcXFxcJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3NyYywgbmVlZFVmbGFnLCBjb25zdW1lZCwgbWFnaWNdID0gKDAsIGJyYWNlX2V4cHJlc3Npb25zX2pzXzEucGFyc2VDbGFzcykoZ2xvYiwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHNyYztcbiAgICAgICAgICAgICAgICAgICAgdWZsYWcgPSB1ZmxhZyB8fCBuZWVkVWZsYWc7XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gY29uc3VtZWQgLSAxO1xuICAgICAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IGhhc01hZ2ljIHx8IG1hZ2ljO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vRW1wdHkgJiYgZ2xvYiA9PT0gJyonKVxuICAgICAgICAgICAgICAgICAgICByZSArPSBzdGFyTm9FbXB0eTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHN0YXI7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgICAgIHJlICs9IHFtYXJrO1xuICAgICAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlICs9IHJlZ0V4cEVzY2FwZShjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3JlLCAoMCwgdW5lc2NhcGVfanNfMS51bmVzY2FwZSkoZ2xvYiksICEhaGFzTWFnaWMsIHVmbGFnXTtcbiAgICB9XG59XG5leHBvcnRzLkFTVCA9IEFTVDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lc2NhcGUgPSB2b2lkIDA7XG4vKipcbiAqIEVzY2FwZSBhbGwgbWFnaWMgY2hhcmFjdGVycyBpbiBhIGdsb2IgcGF0dGVybi5cbiAqXG4gKiBJZiB0aGUge0BsaW5rIHdpbmRvd3NQYXRoc05vRXNjYXBlIHwgR2xvYk9wdGlvbnMud2luZG93c1BhdGhzTm9Fc2NhcGV9XG4gKiBvcHRpb24gaXMgdXNlZCwgdGhlbiBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIGJ5IHdyYXBwaW5nIGluIGBbXWAsIGJlY2F1c2VcbiAqIGEgbWFnaWMgY2hhcmFjdGVyIHdyYXBwZWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MgY2FuIG9ubHkgYmUgc2F0aXNmaWVkIGJ5XG4gKiB0aGF0IGV4YWN0IGNoYXJhY3Rlci4gIEluIHRoaXMgbW9kZSwgYFxcYCBpcyBfbm90XyBlc2NhcGVkLCBiZWNhdXNlIGl0IGlzXG4gKiBub3QgaW50ZXJwcmV0ZWQgYXMgYSBtYWdpYyBjaGFyYWN0ZXIsIGJ1dCBpbnN0ZWFkIGFzIGEgcGF0aCBzZXBhcmF0b3IuXG4gKi9cbmNvbnN0IGVzY2FwZSA9IChzLCB7IHdpbmRvd3NQYXRoc05vRXNjYXBlID0gZmFsc2UsIH0gPSB7fSkgPT4ge1xuICAgIC8vIGRvbid0IG5lZWQgdG8gZXNjYXBlICtAISBiZWNhdXNlIHdlIGVzY2FwZSB0aGUgcGFyZW5zXG4gICAgLy8gdGhhdCBtYWtlIHRob3NlIG1hZ2ljLCBhbmQgZXNjYXBpbmcgISBhcyBbIV0gaXNuJ3QgdmFsaWQsXG4gICAgLy8gYmVjYXVzZSBbIV1dIGlzIGEgdmFsaWQgZ2xvYiBjbGFzcyBtZWFuaW5nIG5vdCAnXScuXG4gICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlXG4gICAgICAgID8gcy5yZXBsYWNlKC9bPyooKVtcXF1dL2csICdbJCZdJylcbiAgICAgICAgOiBzLnJlcGxhY2UoL1s/KigpW1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbn07XG5leHBvcnRzLmVzY2FwZSA9IGVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzY2FwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51bmVzY2FwZSA9IGV4cG9ydHMuZXNjYXBlID0gZXhwb3J0cy5BU1QgPSBleHBvcnRzLk1pbmltYXRjaCA9IGV4cG9ydHMubWF0Y2ggPSBleHBvcnRzLm1ha2VSZSA9IGV4cG9ydHMuYnJhY2VFeHBhbmQgPSBleHBvcnRzLmRlZmF1bHRzID0gZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLkdMT0JTVEFSID0gZXhwb3J0cy5zZXAgPSBleHBvcnRzLm1pbmltYXRjaCA9IHZvaWQgMDtcbmNvbnN0IGJyYWNlX2V4cGFuc2lvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJicmFjZS1leHBhbnNpb25cIikpO1xuY29uc3QgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydC12YWxpZC1wYXR0ZXJuLmpzXCIpO1xuY29uc3QgYXN0X2pzXzEgPSByZXF1aXJlKFwiLi9hc3QuanNcIik7XG5jb25zdCBlc2NhcGVfanNfMSA9IHJlcXVpcmUoXCIuL2VzY2FwZS5qc1wiKTtcbmNvbnN0IHVuZXNjYXBlX2pzXzEgPSByZXF1aXJlKFwiLi91bmVzY2FwZS5qc1wiKTtcbmNvbnN0IG1pbmltYXRjaCA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAoMCwgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMS5hc3NlcnRWYWxpZFBhdHRlcm4pKHBhdHRlcm4pO1xuICAgIC8vIHNob3J0Y3V0OiBjb21tZW50cyBtYXRjaCBub3RoaW5nLlxuICAgIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1hdGNoKHApO1xufTtcbmV4cG9ydHMubWluaW1hdGNoID0gbWluaW1hdGNoO1xuLy8gT3B0aW1pemVkIGNoZWNraW5nIGZvciB0aGUgbW9zdCBjb21tb24gZ2xvYiBwYXR0ZXJucy5cbmNvbnN0IHN0YXJEb3RFeHRSRSA9IC9eXFwqKyhbXitAIT9cXCpcXFtcXChdKikkLztcbmNvbnN0IHN0YXJEb3RFeHRUZXN0ID0gKGV4dCkgPT4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdERvdCA9IChleHQpID0+IChmKSA9PiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZSA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZURvdCA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHN0YXJEb3RTdGFyUkUgPSAvXlxcKitcXC5cXCorJC87XG5jb25zdCBzdGFyRG90U3RhclRlc3QgPSAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYuaW5jbHVkZXMoJy4nKTtcbmNvbnN0IHN0YXJEb3RTdGFyVGVzdERvdCA9IChmKSA9PiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJyAmJiBmLmluY2x1ZGVzKCcuJyk7XG5jb25zdCBkb3RTdGFyUkUgPSAvXlxcLlxcKiskLztcbmNvbnN0IGRvdFN0YXJUZXN0ID0gKGYpID0+IGYgIT09ICcuJyAmJiBmICE9PSAnLi4nICYmIGYuc3RhcnRzV2l0aCgnLicpO1xuY29uc3Qgc3RhclJFID0gL15cXCorJC87XG5jb25zdCBzdGFyVGVzdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG5jb25zdCBzdGFyVGVzdERvdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJztcbmNvbnN0IHFtYXJrc1JFID0gL15cXD8rKFteK0AhP1xcKlxcW1xcKF0qKT8kLztcbmNvbnN0IHFtYXJrc1Rlc3ROb2Nhc2UgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dChbJDBdKTtcbiAgICBpZiAoIWV4dClcbiAgICAgICAgcmV0dXJuIG5vZXh0O1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gbm9leHQoZikgJiYgZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vY2FzZURvdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0RG90KFskMF0pO1xuICAgIGlmICghZXh0KVxuICAgICAgICByZXR1cm4gbm9leHQ7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBub2V4dChmKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0RG90ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHREb3QoWyQwXSk7XG4gICAgcmV0dXJuICFleHQgPyBub2V4dCA6IChmKSA9PiBub2V4dChmKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0KFskMF0pO1xuICAgIHJldHVybiAhZXh0ID8gbm9leHQgOiAoZikgPT4gbm9leHQoZikgJiYgZi5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3ROb0V4dCA9IChbJDBdKSA9PiB7XG4gICAgY29uc3QgbGVuID0gJDAubGVuZ3RoO1xuICAgIHJldHVybiAoZikgPT4gZi5sZW5ndGggPT09IGxlbiAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vRXh0RG90ID0gKFskMF0pID0+IHtcbiAgICBjb25zdCBsZW4gPSAkMC5sZW5ndGg7XG4gICAgcmV0dXJuIChmKSA9PiBmLmxlbmd0aCA9PT0gbGVuICYmIGYgIT09ICcuJyAmJiBmICE9PSAnLi4nO1xufTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzXG4gICAgPyAodHlwZW9mIHByb2Nlc3MuZW52ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBwcm9jZXNzLmVudiAmJlxuICAgICAgICBwcm9jZXNzLmVudi5fX01JTklNQVRDSF9URVNUSU5HX1BMQVRGT1JNX18pIHx8XG4gICAgICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdwb3NpeCcpO1xuY29uc3QgcGF0aCA9IHtcbiAgICB3aW4zMjogeyBzZXA6ICdcXFxcJyB9LFxuICAgIHBvc2l4OiB7IHNlcDogJy8nIH0sXG59O1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmV4cG9ydHMuc2VwID0gZGVmYXVsdFBsYXRmb3JtID09PSAnd2luMzInID8gcGF0aC53aW4zMi5zZXAgOiBwYXRoLnBvc2l4LnNlcDtcbmV4cG9ydHMubWluaW1hdGNoLnNlcCA9IGV4cG9ydHMuc2VwO1xuZXhwb3J0cy5HTE9CU1RBUiA9IFN5bWJvbCgnZ2xvYnN0YXIgKionKTtcbmV4cG9ydHMubWluaW1hdGNoLkdMT0JTVEFSID0gZXhwb3J0cy5HTE9CU1RBUjtcbi8vIGFueSBzaW5nbGUgdGhpbmcgb3RoZXIgdGhhbiAvXG4vLyBkb24ndCBuZWVkIHRvIGVzY2FwZSAvIHdoZW4gdXNpbmcgbmV3IFJlZ0V4cCgpXG5jb25zdCBxbWFyayA9ICdbXi9dJztcbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG5jb25zdCBzdGFyID0gcW1hcmsgKyAnKj8nO1xuLy8gKiogd2hlbiBkb3RzIGFyZSBhbGxvd2VkLiAgQW55dGhpbmcgZ29lcywgZXhjZXB0IC4uIGFuZCAuXG4vLyBub3QgKF4gb3IgLyBmb2xsb3dlZCBieSBvbmUgb3IgdHdvIGRvdHMgZm9sbG93ZWQgYnkgJCBvciAvKSxcbi8vIGZvbGxvd2VkIGJ5IGFueXRoaW5nLCBhbnkgbnVtYmVyIG9mIHRpbWVzLlxuY29uc3QgdHdvU3RhckRvdCA9ICcoPzooPyEoPzpcXFxcL3xeKSg/OlxcXFwuezEsMn0pKCR8XFxcXC8pKS4pKj8nO1xuLy8gbm90IGEgXiBvciAvIGZvbGxvd2VkIGJ5IGEgZG90LFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyTm9Eb3QgPSAnKD86KD8hKD86XFxcXC98XilcXFxcLikuKSo/JztcbmNvbnN0IGZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IChwKSA9PiAoMCwgZXhwb3J0cy5taW5pbWF0Y2gpKHAsIHBhdHRlcm4sIG9wdGlvbnMpO1xuZXhwb3J0cy5maWx0ZXIgPSBmaWx0ZXI7XG5leHBvcnRzLm1pbmltYXRjaC5maWx0ZXIgPSBleHBvcnRzLmZpbHRlcjtcbmNvbnN0IGV4dCA9IChhLCBiID0ge30pID0+IE9iamVjdC5hc3NpZ24oe30sIGEsIGIpO1xuY29uc3QgZGVmYXVsdHMgPSAoZGVmKSA9PiB7XG4gICAgaWYgKCFkZWYgfHwgdHlwZW9mIGRlZiAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKGRlZikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm1pbmltYXRjaDtcbiAgICB9XG4gICAgY29uc3Qgb3JpZyA9IGV4cG9ydHMubWluaW1hdGNoO1xuICAgIGNvbnN0IG0gPSAocCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnKHAsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtLCB7XG4gICAgICAgIE1pbmltYXRjaDogY2xhc3MgTWluaW1hdGNoIGV4dGVuZHMgb3JpZy5NaW5pbWF0Y2gge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIGRlZmF1bHRzKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSkuTWluaW1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBBU1Q6IGNsYXNzIEFTVCBleHRlbmRzIG9yaWcuQVNUIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgY29uc3RydWN0b3IodHlwZSwgcGFyZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcih0eXBlLCBwYXJlbnQsIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBzdGF0aWMgZnJvbUdsb2IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWcuQVNULmZyb21HbG9iKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdW5lc2NhcGU6IChzLCBvcHRpb25zID0ge30pID0+IG9yaWcudW5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBlc2NhcGU6IChzLCBvcHRpb25zID0ge30pID0+IG9yaWcuZXNjYXBlKHMsIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZmlsdGVyOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmZpbHRlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGRlZmF1bHRzOiAob3B0aW9ucykgPT4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIG1ha2VSZTogKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5tYWtlUmUocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBicmFjZUV4cGFuZDogKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5icmFjZUV4cGFuZChwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIG1hdGNoOiAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1hdGNoKGxpc3QsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgc2VwOiBvcmlnLnNlcCxcbiAgICAgICAgR0xPQlNUQVI6IGV4cG9ydHMuR0xPQlNUQVIsXG4gICAgfSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuZXhwb3J0cy5taW5pbWF0Y2guZGVmYXVsdHMgPSBleHBvcnRzLmRlZmF1bHRzO1xuLy8gQnJhY2UgZXhwYW5zaW9uOlxuLy8gYXtiLGN9ZCAtPiBhYmQgYWNkXG4vLyBhe2IsfWMgLT4gYWJjIGFjXG4vLyBhezAuLjN9ZCAtPiBhMGQgYTFkIGEyZCBhM2Rcbi8vIGF7Yixje2QsZX1mfWcgLT4gYWJnIGFjZGZnIGFjZWZnXG4vLyBhe2IsY31ke2UsZn1nIC0+IGFiZGVnIGFjZGVnIGFiZGVnIGFiZGZnXG4vL1xuLy8gSW52YWxpZCBzZXRzIGFyZSBub3QgZXhwYW5kZWQuXG4vLyBhezIuLn1iIC0+IGF7Mi4ufWJcbi8vIGF7Yn1jIC0+IGF7Yn1jXG5jb25zdCBicmFjZUV4cGFuZCA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAoMCwgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMS5hc3NlcnRWYWxpZFBhdHRlcm4pKHBhdHRlcm4pO1xuICAgIC8vIFRoYW5rcyB0byBZZXRpbmcgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS95ZXRpbmdsaT4gZm9yXG4gICAgLy8gaW1wcm92aW5nIHRoaXMgcmVnZXhwIHRvIGF2b2lkIGEgUmVET1MgdnVsbmVyYWJpbGl0eS5cbiAgICBpZiAob3B0aW9ucy5ub2JyYWNlIHx8ICEvXFx7KD86KD8hXFx7KS4pKlxcfS8udGVzdChwYXR0ZXJuKSkge1xuICAgICAgICAvLyBzaG9ydGN1dC4gbm8gbmVlZCB0byBleHBhbmQuXG4gICAgICAgIHJldHVybiBbcGF0dGVybl07XG4gICAgfVxuICAgIHJldHVybiAoMCwgYnJhY2VfZXhwYW5zaW9uXzEuZGVmYXVsdCkocGF0dGVybik7XG59O1xuZXhwb3J0cy5icmFjZUV4cGFuZCA9IGJyYWNlRXhwYW5kO1xuZXhwb3J0cy5taW5pbWF0Y2guYnJhY2VFeHBhbmQgPSBleHBvcnRzLmJyYWNlRXhwYW5kO1xuLy8gcGFyc2UgYSBjb21wb25lbnQgb2YgdGhlIGV4cGFuZGVkIHNldC5cbi8vIEF0IHRoaXMgcG9pbnQsIG5vIHBhdHRlcm4gbWF5IGNvbnRhaW4gXCIvXCIgaW4gaXRcbi8vIHNvIHdlJ3JlIGdvaW5nIHRvIHJldHVybiBhIDJkIGFycmF5LCB3aGVyZSBlYWNoIGVudHJ5IGlzIHRoZSBmdWxsXG4vLyBwYXR0ZXJuLCBzcGxpdCBvbiAnLycsIGFuZCB0aGVuIHR1cm5lZCBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uLlxuLy8gQSByZWdleHAgaXMgbWFkZSBhdCB0aGUgZW5kIHdoaWNoIGpvaW5zIGVhY2ggYXJyYXkgd2l0aCBhblxuLy8gZXNjYXBlZCAvLCBhbmQgYW5vdGhlciBmdWxsIG9uZSB3aGljaCBqb2lucyBlYWNoIHJlZ2V4cCB3aXRoIHwuXG4vL1xuLy8gRm9sbG93aW5nIHRoZSBsZWFkIG9mIEJhc2ggNC4xLCBub3RlIHRoYXQgXCIqKlwiIG9ubHkgaGFzIHNwZWNpYWwgbWVhbmluZ1xuLy8gd2hlbiBpdCBpcyB0aGUgKm9ubHkqIHRoaW5nIGluIGEgcGF0aCBwb3J0aW9uLiAgT3RoZXJ3aXNlLCBhbnkgc2VyaWVzXG4vLyBvZiAqIGlzIGVxdWl2YWxlbnQgdG8gYSBzaW5nbGUgKi4gIEdsb2JzdGFyIGJlaGF2aW9yIGlzIGVuYWJsZWQgYnlcbi8vIGRlZmF1bHQsIGFuZCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBvcHRpb25zLm5vZ2xvYnN0YXIuXG5jb25zdCBtYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1ha2VSZSgpO1xuZXhwb3J0cy5tYWtlUmUgPSBtYWtlUmU7XG5leHBvcnRzLm1pbmltYXRjaC5tYWtlUmUgPSBleHBvcnRzLm1ha2VSZTtcbmNvbnN0IG1hdGNoID0gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKTtcbiAgICBsaXN0ID0gbGlzdC5maWx0ZXIoZiA9PiBtbS5tYXRjaChmKSk7XG4gICAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgICAgICBsaXN0LnB1c2gocGF0dGVybik7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufTtcbmV4cG9ydHMubWF0Y2ggPSBtYXRjaDtcbmV4cG9ydHMubWluaW1hdGNoLm1hdGNoID0gZXhwb3J0cy5tYXRjaDtcbi8vIHJlcGxhY2Ugc3R1ZmYgbGlrZSBcXCogd2l0aCAqXG5jb25zdCBnbG9iTWFnaWMgPSAvWz8qXXxbK0AhXVxcKC4qP1xcKXxcXFt8XFxdLztcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG5jbGFzcyBNaW5pbWF0Y2gge1xuICAgIG9wdGlvbnM7XG4gICAgc2V0O1xuICAgIHBhdHRlcm47XG4gICAgd2luZG93c1BhdGhzTm9Fc2NhcGU7XG4gICAgbm9uZWdhdGU7XG4gICAgbmVnYXRlO1xuICAgIGNvbW1lbnQ7XG4gICAgZW1wdHk7XG4gICAgcHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgcGFydGlhbDtcbiAgICBnbG9iU2V0O1xuICAgIGdsb2JQYXJ0cztcbiAgICBub2Nhc2U7XG4gICAgaXNXaW5kb3dzO1xuICAgIHBsYXRmb3JtO1xuICAgIHdpbmRvd3NOb01hZ2ljUm9vdDtcbiAgICByZWdleHA7XG4gICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gb3B0aW9ucy5wbGF0Zm9ybSB8fCBkZWZhdWx0UGxhdGZvcm07XG4gICAgICAgIHRoaXMuaXNXaW5kb3dzID0gdGhpcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgICAgICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9XG4gICAgICAgICAgICAhIW9wdGlvbnMud2luZG93c1BhdGhzTm9Fc2NhcGUgfHwgb3B0aW9ucy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzID0gISFvcHRpb25zLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzO1xuICAgICAgICB0aGlzLnJlZ2V4cCA9IG51bGw7XG4gICAgICAgIHRoaXMubmVnYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubm9uZWdhdGUgPSAhIW9wdGlvbnMubm9uZWdhdGU7XG4gICAgICAgIHRoaXMuY29tbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFydGlhbCA9ICEhb3B0aW9ucy5wYXJ0aWFsO1xuICAgICAgICB0aGlzLm5vY2FzZSA9ICEhdGhpcy5vcHRpb25zLm5vY2FzZTtcbiAgICAgICAgdGhpcy53aW5kb3dzTm9NYWdpY1Jvb3QgPVxuICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzTm9NYWdpY1Jvb3QgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy53aW5kb3dzTm9NYWdpY1Jvb3RcbiAgICAgICAgICAgICAgICA6ICEhKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMubm9jYXNlKTtcbiAgICAgICAgdGhpcy5nbG9iU2V0ID0gW107XG4gICAgICAgIHRoaXMuZ2xvYlBhcnRzID0gW107XG4gICAgICAgIHRoaXMuc2V0ID0gW107XG4gICAgICAgIC8vIG1ha2UgdGhlIHNldCBvZiByZWdleHBzIGV0Yy5cbiAgICAgICAgdGhpcy5tYWtlKCk7XG4gICAgfVxuICAgIGhhc01hZ2ljKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm1hZ2ljYWxCcmFjZXMgJiYgdGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0dGVybikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZGVidWcoLi4uXykgeyB9XG4gICAgbWFrZSgpIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybjtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gZW1wdHkgcGF0dGVybnMgYW5kIGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgICAgIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgICAgIHRoaXMuZW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0ZXAgMTogZmlndXJlIG91dCBuZWdhdGlvbiwgZXRjLlxuICAgICAgICB0aGlzLnBhcnNlTmVnYXRlKCk7XG4gICAgICAgIC8vIHN0ZXAgMjogZXhwYW5kIGJyYWNlc1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbLi4ubmV3IFNldCh0aGlzLmJyYWNlRXhwYW5kKCkpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcgPSAoLi4uYXJncykgPT4gY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgdGhpcy5nbG9iU2V0KTtcbiAgICAgICAgLy8gc3RlcCAzOiBub3cgd2UgaGF2ZSBhIHNldCwgc28gdHVybiBlYWNoIG9uZSBpbnRvIGEgc2VyaWVzIG9mXG4gICAgICAgIC8vIHBhdGgtcG9ydGlvbiBtYXRjaGluZyBwYXR0ZXJucy5cbiAgICAgICAgLy8gVGhlc2Ugd2lsbCBiZSByZWdleHBzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgXCIqKlwiLCB3aGljaCBpc1xuICAgICAgICAvLyBzZXQgdG8gdGhlIEdMT0JTVEFSIG9iamVjdCBmb3IgZ2xvYnN0YXIgYmVoYXZpb3IsXG4gICAgICAgIC8vIGFuZCB3aWxsIG5vdCBjb250YWluIGFueSAvIGNoYXJhY3RlcnNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gRmlyc3QsIHdlIHByZXByb2Nlc3MgdG8gbWFrZSB0aGUgZ2xvYiBwYXR0ZXJuIHNldHMgYSBiaXQgc2ltcGxlclxuICAgICAgICAvLyBhbmQgZGVkdXBlZC4gIFRoZXJlIGFyZSBzb21lIHBlcmYta2lsbGluZyBwYXR0ZXJucyB0aGF0IGNhbiBjYXVzZVxuICAgICAgICAvLyBwcm9ibGVtcyB3aXRoIGEgZ2xvYiB3YWxrLCBidXQgd2UgY2FuIHNpbXBsaWZ5IHRoZW0gZG93biBhIGJpdC5cbiAgICAgICAgY29uc3QgcmF3R2xvYlBhcnRzID0gdGhpcy5nbG9iU2V0Lm1hcChzID0+IHRoaXMuc2xhc2hTcGxpdChzKSk7XG4gICAgICAgIHRoaXMuZ2xvYlBhcnRzID0gdGhpcy5wcmVwcm9jZXNzKHJhd0dsb2JQYXJ0cyk7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JQYXJ0cyk7XG4gICAgICAgIC8vIGdsb2IgLS0+IHJlZ2V4cHNcbiAgICAgICAgbGV0IHNldCA9IHRoaXMuZ2xvYlBhcnRzLm1hcCgocywgXywgX18pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzV2luZG93cyAmJiB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCkge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0J3MgYSBkcml2ZSBvciB1bmMgcGF0aC5cbiAgICAgICAgICAgICAgICBjb25zdCBpc1VOQyA9IHNbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHNbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIChzWzJdID09PSAnPycgfHwgIWdsb2JNYWdpYy50ZXN0KHNbMl0pKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZ2xvYk1hZ2ljLnRlc3Qoc1szXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEcml2ZSA9IC9eW2Etel06L2kudGVzdChzWzBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNVTkMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5zLnNsaWNlKDAsIDQpLCAuLi5zLnNsaWNlKDQpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0RyaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbc1swXSwgLi4ucy5zbGljZSgxKS5tYXAoc3MgPT4gdGhpcy5wYXJzZShzcykpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcy5tYXAoc3MgPT4gdGhpcy5wYXJzZShzcykpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHNldCk7XG4gICAgICAgIC8vIGZpbHRlciBvdXQgZXZlcnl0aGluZyB0aGF0IGRpZG4ndCBjb21waWxlIHByb3Blcmx5LlxuICAgICAgICB0aGlzLnNldCA9IHNldC5maWx0ZXIocyA9PiBzLmluZGV4T2YoZmFsc2UpID09PSAtMSk7XG4gICAgICAgIC8vIGRvIG5vdCB0cmVhdCB0aGUgPyBpbiBVTkMgcGF0aHMgYXMgbWFnaWNcbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuc2V0W2ldO1xuICAgICAgICAgICAgICAgIGlmIChwWzBdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICBwWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdsb2JQYXJ0c1tpXVsyXSA9PT0gJz8nICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgIHBbMl0gPSAnPyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLnNldCk7XG4gICAgfVxuICAgIC8vIHZhcmlvdXMgdHJhbnNmb3JtcyB0byBlcXVpdmFsZW50IHBhdHRlcm4gc2V0cyB0aGF0IGFyZVxuICAgIC8vIGZhc3RlciB0byBwcm9jZXNzIGluIGEgZmlsZXN5c3RlbSB3YWxrLiAgVGhlIGdvYWwgaXMgdG9cbiAgICAvLyBlbGltaW5hdGUgd2hhdCB3ZSBjYW4sIGFuZCBwdXNoIGFsbCAqKiBwYXR0ZXJucyBhcyBmYXJcbiAgICAvLyB0byB0aGUgcmlnaHQgYXMgcG9zc2libGUsIGV2ZW4gaWYgaXQgaW5jcmVhc2VzIHRoZSBudW1iZXJcbiAgICAvLyBvZiBwYXR0ZXJucyB0aGF0IHdlIGhhdmUgdG8gcHJvY2Vzcy5cbiAgICBwcmVwcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICAvLyBpZiB3ZSdyZSBub3QgaW4gZ2xvYnN0YXIgbW9kZSwgdGhlbiB0dXJuIGFsbCAqKiBpbnRvICpcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub2dsb2JzdGFyKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2JQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ2xvYlBhcnRzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnbG9iUGFydHNbaV1bal0gPT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0c1tpXVtqXSA9ICcqJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IG9wdGltaXphdGlvbkxldmVsID0gMSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMikge1xuICAgICAgICAgICAgLy8gYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGZzIHdhbGtpbmdcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMSkge1xuICAgICAgICAgICAgLy8ganVzdCBiYXNpYyBvcHRpbWl6YXRpb25zIHRvIHJlbW92ZSBzb21lIC4uIHBhcnRzXG4gICAgICAgICAgICBnbG9iUGFydHMgPSB0aGlzLmxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGp1c3QgY29sbGFwc2UgbXVsdGlwbGUgKiogcG9ydGlvbnMgaW50byBvbmVcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuYWRqYXNjZW50R2xvYnN0YXJPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIGp1c3QgZ2V0IHJpZCBvZiBhZGphc2NlbnQgKiogcG9ydGlvbnNcbiAgICBhZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cykge1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLm1hcChwYXJ0cyA9PiB7XG4gICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGdzID0gcGFydHMuaW5kZXhPZignKionLCBncyArIDEpKSkge1xuICAgICAgICAgICAgICAgIGxldCBpID0gZ3M7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHBhcnRzW2kgKyAxXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpICE9PSBncykge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MsIGkgLSBncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZ2V0IHJpZCBvZiBhZGphc2NlbnQgKiogYW5kIHJlc29sdmUgLi4gcG9ydGlvbnNcbiAgICBsZXZlbE9uZU9wdGltaXplKGdsb2JQYXJ0cykge1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLm1hcChwYXJ0cyA9PiB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnJlZHVjZSgoc2V0LCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHNldFtzZXQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcqKicgJiYgcHJldiA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiBwcmV2ICE9PSAnLi4nICYmIHByZXYgIT09ICcuJyAmJiBwcmV2ICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldC5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGV2ZWxUd29GaWxlT3B0aW1pemUocGFydHMpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnRzKSkge1xuICAgICAgICAgICAgcGFydHMgPSB0aGlzLnNsYXNoU3BsaXQocGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBzcXVlZXplIG91dCBVTkMgcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgcCA9PT0gJycgJiYgcGFydHNbMF0gPT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwID09PSAnLicgfHwgcCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzWzBdID09PSAnLicgJiZcbiAgICAgICAgICAgICAgICAgICAgcGFydHMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gPHByZT4vPHA+Ly4uLzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoLTEgIT09IChkZCA9IHBhcnRzLmluZGV4T2YoJy4uJywgZGQgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZGQgLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocCAmJiBwICE9PSAnLicgJiYgcCAhPT0gJy4uJyAmJiBwICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShkZCAtIDEsIDIpO1xuICAgICAgICAgICAgICAgICAgICBkZCAtPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoZGlkU29tZXRoaW5nKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMCA/IFsnJ10gOiBwYXJ0cztcbiAgICB9XG4gICAgLy8gRmlyc3QgcGhhc2U6IHNpbmdsZS1wYXR0ZXJuIHByb2Nlc3NpbmdcbiAgICAvLyA8cHJlPiBpcyAxIG9yIG1vcmUgcG9ydGlvbnNcbiAgICAvLyA8cmVzdD4gaXMgMSBvciBtb3JlIHBvcnRpb25zXG4gICAgLy8gPHA+IGlzIGFueSBwb3J0aW9uIG90aGVyIHRoYW4gLiwgLi4sICcnLCBvciAqKlxuICAgIC8vIDxlPiBpcyAuIG9yICcnXG4gICAgLy9cbiAgICAvLyAqKi8uLiBpcyAqYnJ1dGFsKiBmb3IgZmlsZXN5c3RlbSB3YWxraW5nIHBlcmZvcm1hbmNlLCBiZWNhdXNlXG4gICAgLy8gaXQgZWZmZWN0aXZlbHkgcmVzZXRzIHRoZSByZWN1cnNpdmUgd2FsayBlYWNoIHRpbWUgaXQgb2NjdXJzLFxuICAgIC8vIGFuZCAqKiBjYW5ub3QgYmUgcmVkdWNlZCBvdXQgYnkgYSAuLiBwYXR0ZXJuIHBhcnQgbGlrZSBhIHJlZ2V4cFxuICAgIC8vIG9yIG1vc3Qgc3RyaW5ncyAob3RoZXIgdGhhbiAuLiwgLiwgYW5kICcnKSBjYW4gYmUuXG4gICAgLy9cbiAgICAvLyA8cHJlPi8qKi8uLi88cD4vPHA+LzxyZXN0PiAtPiB7PHByZT4vLi4vPHA+LzxwPi88cmVzdD4sPHByZT4vKiovPHA+LzxwPi88cmVzdD59XG4gICAgLy8gPHByZT4vPGU+LzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vICoqLyoqLzxyZXN0PiAtPiAqKi88cmVzdD5cbiAgICAvL1xuICAgIC8vICoqLyovPHJlc3Q+IC0+ICovKiovPHJlc3Q+IDw9PSBub3QgdmFsaWQgYmVjYXVzZSAqKiBkb2Vzbid0IGZvbGxvd1xuICAgIC8vIHRoaXMgV09VTEQgYmUgYWxsb3dlZCBpZiAqKiBkaWQgZm9sbG93IHN5bWxpbmtzLCBvciAqIGRpZG4ndFxuICAgIGZpcnN0UGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICBsZXQgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gPHByZT4vKiovLi4vPHA+LzxwPi88cmVzdD4gLT4gezxwcmU+Ly4uLzxwPi88cD4vPHJlc3Q+LDxwcmU+LyoqLzxwPi88cD4vPHJlc3Q+fVxuICAgICAgICAgICAgZm9yIChsZXQgcGFydHMgb2YgZ2xvYlBhcnRzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGdzID0gLTE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZ3MgPSBwYXJ0cy5pbmRleE9mKCcqKicsIGdzICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnc3MgPSBncztcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcnRzW2dzcyArIDFdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA8cHJlPi8qKi8qKi88cmVzdD4gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICBnc3MrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBlZywgaWYgZ3MgaXMgMiBhbmQgZ3NzIGlzIDQsIHRoYXQgbWVhbnMgd2UgaGF2ZSAzICoqXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhcnRzLCBhbmQgY2FuIHJlbW92ZSAyIG9mIHRoZW0uXG4gICAgICAgICAgICAgICAgICAgIGlmIChnc3MgPiBncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGdzICsgMSwgZ3NzIC0gZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gcGFydHNbZ3MgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2dzICsgMl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAyID0gcGFydHNbZ3MgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09ICcuLicpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFwMiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcDIgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcDIgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVkaXQgcGFydHMgaW4gcGxhY2UsIGFuZCBwdXNoIHRoZSBuZXcgb25lXG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyID0gcGFydHMuc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgICAgIG90aGVyW2dzXSA9ICcqKic7XG4gICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0cy5wdXNoKG90aGVyKTtcbiAgICAgICAgICAgICAgICAgICAgZ3MtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gPHByZT4vPGU+LzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHNxdWVlemUgb3V0IFVOQyBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgcCA9PT0gJycgJiYgcGFydHNbMF0gPT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09ICcuJyB8fCBwID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydHNbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAocGFydHNbMV0gPT09ICcuJyB8fCBwYXJ0c1sxXSA9PT0gJycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gPHByZT4vPHA+Ly4uLzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgICAgICBsZXQgZGQgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGRkID0gcGFydHMuaW5kZXhPZignLi4nLCBkZCArIDEpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZGQgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgJiYgcCAhPT0gJy4nICYmIHAgIT09ICcuLicgJiYgcCAhPT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWREb3QgPSBkZCA9PT0gMSAmJiBwYXJ0c1tkZCArIDFdID09PSAnKionO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BsaW4gPSBuZWVkRG90ID8gWycuJ10gOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShkZCAtIDEsIDIsIC4uLnNwbGluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZCAtPSAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRTb21ldGhpbmcpO1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzO1xuICAgIH1cbiAgICAvLyBzZWNvbmQgcGhhc2U6IG11bHRpLXBhdHRlcm4gZGVkdXBlc1xuICAgIC8vIHs8cHJlPi8qLzxyZXN0Piw8cHJlPi88cD4vPHJlc3Q+fSAtPiA8cHJlPi8qLzxyZXN0PlxuICAgIC8vIHs8cHJlPi88cmVzdD4sPHByZT4vPHJlc3Q+fSAtPiA8cHJlPi88cmVzdD5cbiAgICAvLyB7PHByZT4vKiovPHJlc3Q+LDxwcmU+LzxyZXN0Pn0gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgLy9cbiAgICAvLyB7PHByZT4vKiovPHJlc3Q+LDxwcmU+LyoqLzxwPi88cmVzdD59IC0+IDxwcmU+LyoqLzxyZXN0PlxuICAgIC8vIF4tLSBub3QgdmFsaWQgYmVjYXVzZSAqKiBkb2Vucyd0IGZvbGxvdyBzeW1saW5rc1xuICAgIHNlY29uZFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBnbG9iUGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gdGhpcy5wYXJ0c01hdGNoKGdsb2JQYXJ0c1tpXSwgZ2xvYlBhcnRzW2pdLCAhdGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcyk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2ldID0gW107XG4gICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0c1tqXSA9IG1hdGNoZWQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLmZpbHRlcihncyA9PiBncy5sZW5ndGgpO1xuICAgIH1cbiAgICBwYXJ0c01hdGNoKGEsIGIsIGVtcHR5R1NNYXRjaCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBhaSA9IDA7XG4gICAgICAgIGxldCBiaSA9IDA7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IHdoaWNoID0gJyc7XG4gICAgICAgIHdoaWxlIChhaSA8IGEubGVuZ3RoICYmIGJpIDwgYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChhW2FpXSA9PT0gYltiaV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh3aGljaCA9PT0gJ2InID8gYltiaV0gOiBhW2FpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZW1wdHlHU01hdGNoICYmIGFbYWldID09PSAnKionICYmIGJbYmldID09PSBhW2FpICsgMV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhW2FpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVtcHR5R1NNYXRjaCAmJiBiW2JpXSA9PT0gJyoqJyAmJiBhW2FpXSA9PT0gYltiaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYltiaV0pO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhW2FpXSA9PT0gJyonICYmXG4gICAgICAgICAgICAgICAgYltiaV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmRvdCB8fCAhYltiaV0uc3RhcnRzV2l0aCgnLicpKSAmJlxuICAgICAgICAgICAgICAgIGJbYmldICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdoaWNoID09PSAnYicpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGljaCA9ICdhJztcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhW2FpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYltiaV0gPT09ICcqJyAmJlxuICAgICAgICAgICAgICAgIGFbYWldICYmXG4gICAgICAgICAgICAgICAgKHRoaXMub3B0aW9ucy5kb3QgfHwgIWFbYWldLnN0YXJ0c1dpdGgoJy4nKSkgJiZcbiAgICAgICAgICAgICAgICBhW2FpXSAhPT0gJyoqJykge1xuICAgICAgICAgICAgICAgIGlmICh3aGljaCA9PT0gJ2EnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgd2hpY2ggPSAnYic7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYltiaV0pO1xuICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSBmYWxsIG91dCBvZiB0aGUgbG9vcCwgaXQgbWVhbnMgdGhleSB0d28gYXJlIGlkZW50aWNhbFxuICAgICAgICAvLyBhcyBsb25nIGFzIHRoZWlyIGxlbmd0aHMgbWF0Y2hcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiByZXN1bHQ7XG4gICAgfVxuICAgIHBhcnNlTmVnYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5ub25lZ2F0ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybjtcbiAgICAgICAgbGV0IG5lZ2F0ZSA9IGZhbHNlO1xuICAgICAgICBsZXQgbmVnYXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXR0ZXJuLmxlbmd0aCAmJiBwYXR0ZXJuLmNoYXJBdChpKSA9PT0gJyEnOyBpKyspIHtcbiAgICAgICAgICAgIG5lZ2F0ZSA9ICFuZWdhdGU7XG4gICAgICAgICAgICBuZWdhdGVPZmZzZXQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAobmVnYXRlT2Zmc2V0KVxuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybi5zbGljZShuZWdhdGVPZmZzZXQpO1xuICAgICAgICB0aGlzLm5lZ2F0ZSA9IG5lZ2F0ZTtcbiAgICB9XG4gICAgLy8gc2V0IHBhcnRpYWwgdG8gdHJ1ZSB0byB0ZXN0IGlmLCBmb3IgZXhhbXBsZSxcbiAgICAvLyBcIi9hL2JcIiBtYXRjaGVzIHRoZSBzdGFydCBvZiBcIi8qL2IvKi9kXCJcbiAgICAvLyBQYXJ0aWFsIG1lYW5zLCBpZiB5b3UgcnVuIG91dCBvZiBmaWxlIGJlZm9yZSB5b3UgcnVuXG4gICAgLy8gb3V0IG9mIHBhdHRlcm4sIHRoZW4gdGhhdCdzIGZpbmUsIGFzIGxvbmcgYXMgYWxsXG4gICAgLy8gdGhlIHBhcnRzIG1hdGNoLlxuICAgIG1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBVTkMgcGF0aHMgbGlrZSAvLz8vWDovLi4uIGNhbiBtYXRjaCBYOi8uLi4gYW5kIHZpY2UgdmVyc2FcbiAgICAgICAgLy8gRHJpdmUgbGV0dGVycyBpbiBhYnNvbHV0ZSBkcml2ZSBvciB1bmMgcGF0aHMgYXJlIGFsd2F5cyBjb21wYXJlZFxuICAgICAgICAvLyBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gICAgICAgIGlmICh0aGlzLmlzV2luZG93cykge1xuICAgICAgICAgICAgY29uc3QgZmlsZURyaXZlID0gdHlwZW9mIGZpbGVbMF0gPT09ICdzdHJpbmcnICYmIC9eW2Etel06JC9pLnRlc3QoZmlsZVswXSk7XG4gICAgICAgICAgICBjb25zdCBmaWxlVU5DID0gIWZpbGVEcml2ZSAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgZmlsZVsxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KGZpbGVbM10pO1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybkRyaXZlID0gdHlwZW9mIHBhdHRlcm5bMF0gPT09ICdzdHJpbmcnICYmIC9eW2Etel06JC9pLnRlc3QocGF0dGVyblswXSk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuVU5DID0gIXBhdHRlcm5Ecml2ZSAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblsxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgcGF0dGVyblszXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBhdHRlcm5bM10pO1xuICAgICAgICAgICAgY29uc3QgZmRpID0gZmlsZVVOQyA/IDMgOiBmaWxlRHJpdmUgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGRpID0gcGF0dGVyblVOQyA/IDMgOiBwYXR0ZXJuRHJpdmUgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmZGkgPT09ICdudW1iZXInICYmIHR5cGVvZiBwZGkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2ZkLCBwZF0gPSBbZmlsZVtmZGldLCBwYXR0ZXJuW3BkaV1dO1xuICAgICAgICAgICAgICAgIGlmIChmZC50b0xvd2VyQ2FzZSgpID09PSBwZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5bcGRpXSA9IGZkO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGRpID4gZmRpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5zbGljZShwZGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZkaSA+IHBkaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoZmRpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvbHZlIGFuZCByZWR1Y2UgLiBhbmQgLi4gcG9ydGlvbnMgaW4gdGhlIGZpbGUgYXMgd2VsbC5cbiAgICAgICAgLy8gZG9udCcgbmVlZCB0byBkbyB0aGUgc2Vjb25kIHBoYXNlLCBiZWNhdXNlIGl0J3Mgb25seSBvbmUgc3RyaW5nW11cbiAgICAgICAgY29uc3QgeyBvcHRpbWl6YXRpb25MZXZlbCA9IDEgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKG9wdGltaXphdGlvbkxldmVsID49IDIpIHtcbiAgICAgICAgICAgIGZpbGUgPSB0aGlzLmxldmVsVHdvRmlsZU9wdGltaXplKGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lJywgdGhpcywgeyBmaWxlLCBwYXR0ZXJuIH0pO1xuICAgICAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZScsIGZpbGUubGVuZ3RoLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGZpID0gMCwgcGkgPSAwLCBmbCA9IGZpbGUubGVuZ3RoLCBwbCA9IHBhdHRlcm4ubGVuZ3RoOyBmaSA8IGZsICYmIHBpIDwgcGw7IGZpKyssIHBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lIGxvb3AnKTtcbiAgICAgICAgICAgIHZhciBwID0gcGF0dGVybltwaV07XG4gICAgICAgICAgICB2YXIgZiA9IGZpbGVbZmldO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhwYXR0ZXJuLCBwLCBmKTtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlLlxuICAgICAgICAgICAgLy8gc29tZSBpbnZhbGlkIHJlZ2V4cCBzdHVmZiBpbiB0aGUgc2V0LlxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAocCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgaWYgKHAgPT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdHTE9CU1RBUicsIFtwYXR0ZXJuLCBwLCBmXSk7XG4gICAgICAgICAgICAgICAgLy8gXCIqKlwiXG4gICAgICAgICAgICAgICAgLy8gYS8qKi9iLyoqL2Mgd291bGQgbWF0Y2ggdGhlIGZvbGxvd2luZzpcbiAgICAgICAgICAgICAgICAvLyBhL2IveC95L3ovY1xuICAgICAgICAgICAgICAgIC8vIGEveC95L3ovYi9jXG4gICAgICAgICAgICAgICAgLy8gYS9iL3gvYi94L2NcbiAgICAgICAgICAgICAgICAvLyBhL2IvY1xuICAgICAgICAgICAgICAgIC8vIFRvIGRvIHRoaXMsIHRha2UgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gYWZ0ZXJcbiAgICAgICAgICAgICAgICAvLyB0aGUgKiosIGFuZCBzZWUgaWYgaXQgd291bGQgbWF0Y2ggdGhlIGZpbGUgcmVtYWluZGVyLlxuICAgICAgICAgICAgICAgIC8vIElmIHNvLCByZXR1cm4gc3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAvLyBJZiBub3QsIHRoZSAqKiBcInN3YWxsb3dzXCIgYSBzZWdtZW50LCBhbmQgdHJ5IGFnYWluLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVjdXJzaXZlbHkgYXdmdWwuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBhLyoqL2IvKiovYyBtYXRjaGluZyBhL2IveC95L3ovY1xuICAgICAgICAgICAgICAgIC8vIC0gYSBtYXRjaGVzIGFcbiAgICAgICAgICAgICAgICAvLyAtIGRvdWJsZXN0YXJcbiAgICAgICAgICAgICAgICAvLyAgIC0gbWF0Y2hPbmUoYi94L3kvei9jLCBiLyoqL2MpXG4gICAgICAgICAgICAgICAgLy8gICAgIC0gYiBtYXRjaGVzIGJcbiAgICAgICAgICAgICAgICAvLyAgICAgLSBkb3VibGVzdGFyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh4L3kvei9jLCBjKSAtPiBub1xuICAgICAgICAgICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoeS96L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh6L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZShjLCBjKSB5ZXMsIGhpdFxuICAgICAgICAgICAgICAgIHZhciBmciA9IGZpO1xuICAgICAgICAgICAgICAgIHZhciBwciA9IHBpICsgMTtcbiAgICAgICAgICAgICAgICBpZiAocHIgPT09IHBsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJyoqIGF0IHRoZSBlbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYSAqKiBhdCB0aGUgZW5kIHdpbGwganVzdCBzd2FsbG93IHRoZSByZXN0LlxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IHdpbGwgbm90IHN3YWxsb3cgLy54LCB1bmxlc3NcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucy5kb3QgaXMgc2V0LlxuICAgICAgICAgICAgICAgICAgICAvLyAuIGFuZCAuLiBhcmUgKm5ldmVyKiBtYXRjaGVkIGJ5ICoqLCBmb3IgZXhwbG9zaXZlbHlcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVhc29ucy5cbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGZpIDwgZmw7IGZpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlW2ZpXSA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtmaV0gPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIGZpbGVbZmldLmNoYXJBdCgwKSA9PT0gJy4nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG9rLCBsZXQncyBzZWUgaWYgd2UgY2FuIHN3YWxsb3cgd2hhdGV2ZXIgd2UgY2FuLlxuICAgICAgICAgICAgICAgIHdoaWxlIChmciA8IGZsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzd2FsbG93ZWUgPSBmaWxlW2ZyXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuZ2xvYnN0YXIgd2hpbGUnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIsIHN3YWxsb3dlZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFhYWCByZW1vdmUgdGhpcyBzbGljZS4gIEp1c3QgcGFzcyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoT25lKGZpbGUuc2xpY2UoZnIpLCBwYXR0ZXJuLnNsaWNlKHByKSwgcGFydGlhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIGZvdW5kIG1hdGNoIScsIGZyLCBmbCwgc3dhbGxvd2VlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbid0IHN3YWxsb3cgXCIuXCIgb3IgXCIuLlwiIGV2ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gb25seSBzd2FsbG93IFwiLmZvb1wiIHdoZW4gZXhwbGljaXRseSBhc2tlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzd2FsbG93ZWUgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YWxsb3dlZSA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgc3dhbGxvd2VlLmNoYXJBdCgwKSA9PT0gJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2RvdCBkZXRlY3RlZCEnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKiogc3dhbGxvd3MgYSBzZWdtZW50LCBhbmQgY29udGludWUuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBzd2FsbG93IGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcisrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG5vIG1hdGNoIHdhcyBmb3VuZC5cbiAgICAgICAgICAgICAgICAvLyBIb3dldmVyLCBpbiBwYXJ0aWFsIG1vZGUsIHdlIGNhbid0IHNheSB0aGlzIGlzIG5lY2Vzc2FyaWx5IG92ZXIuXG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKHBhcnRpYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ1xcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8nLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnIgPT09IGZsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBvdGhlciB0aGFuICoqXG4gICAgICAgICAgICAvLyBub24tbWFnaWMgcGF0dGVybnMganVzdCBoYXZlIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgICAgIC8vIHBhdHRlcm5zIHdpdGggbWFnaWMgaGF2ZSBiZWVuIHR1cm5lZCBpbnRvIHJlZ2V4cHMuXG4gICAgICAgICAgICBsZXQgaGl0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGhpdCA9IGYgPT09IHA7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Zygnc3RyaW5nIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpdCA9IHAudGVzdChmKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdwYXR0ZXJuIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGl0KVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFRoaXMgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgICAgICAgLy8gYSBwYXR0ZXJuIHRoYXQgZW5kcyBpbiAvLCB1bmxlc3MgdGhlIHBhdHRlcm4ganVzdFxuICAgICAgICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gICAgICAgIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gICAgICAgIC8vIFteL10qPyBwYXR0ZXJuLCBleGNlcHQgaW4gcGFydGlhbCBtb2RlLCB3aGVyZSBpdCBtaWdodFxuICAgICAgICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAgICAgICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuICAgICAgICAvLyBub3cgZWl0aGVyIHdlIGZlbGwgb2ZmIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIG9yIHdlJ3JlIGRvbmUuXG4gICAgICAgIGlmIChmaSA9PT0gZmwgJiYgcGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICAgICAgICAvLyBhbiBleGFjdCBoaXQhXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaSA9PT0gZmwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZSwgYnV0IHN0aWxsIGhhZCBwYXR0ZXJuIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgICAgICAgICAvLyBhIGdsb2IgZnMgdHJhdmVyc2FsLlxuICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4sIHN0aWxsIGhhdmUgZmlsZSBsZWZ0LlxuICAgICAgICAgICAgLy8gdGhpcyBpcyBvbmx5IGFjY2VwdGFibGUgaWYgd2UncmUgb24gdGhlIHZlcnkgbGFzdFxuICAgICAgICAgICAgLy8gZW1wdHkgc2VnbWVudCBvZiBhIGZpbGUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICAgICAgICAgICAgLy8gYS8qIHNob3VsZCBtYXRjaCBhL2IvXG4gICAgICAgICAgICByZXR1cm4gZmkgPT09IGZsIC0gMSAmJiBmaWxlW2ZpXSA9PT0gJyc7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSB1bnJlYWNoYWJsZS5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd3RmPycpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIGJyYWNlRXhwYW5kKCkge1xuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuYnJhY2VFeHBhbmQpKHRoaXMucGF0dGVybiwgdGhpcy5vcHRpb25zKTtcbiAgICB9XG4gICAgcGFyc2UocGF0dGVybikge1xuICAgICAgICAoMCwgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMS5hc3NlcnRWYWxpZFBhdHRlcm4pKHBhdHRlcm4pO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBzaG9ydGN1dHNcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICcqKicpXG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5HTE9CU1RBUjtcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICcnKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAvLyBmYXIgYW5kIGF3YXksIHRoZSBtb3N0IGNvbW1vbiBnbG9iIHBhdHRlcm4gcGFydHMgYXJlXG4gICAgICAgIC8vICosICouKiwgYW5kICouPGV4dD4gIEFkZCBhIGZhc3QgY2hlY2sgbWV0aG9kIGZvciB0aG9zZS5cbiAgICAgICAgbGV0IG07XG4gICAgICAgIGxldCBmYXN0VGVzdCA9IG51bGw7XG4gICAgICAgIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goc3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gb3B0aW9ucy5kb3QgPyBzdGFyVGVzdERvdCA6IHN0YXJUZXN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyRG90RXh0UkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSAob3B0aW9ucy5ub2Nhc2VcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZG90XG4gICAgICAgICAgICAgICAgICAgID8gc3RhckRvdEV4dFRlc3ROb2Nhc2VEb3RcbiAgICAgICAgICAgICAgICAgICAgOiBzdGFyRG90RXh0VGVzdE5vY2FzZVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBzdGFyRG90RXh0VGVzdERvdFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJEb3RFeHRUZXN0KShtWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2gocW1hcmtzUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSAob3B0aW9ucy5ub2Nhc2VcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZG90XG4gICAgICAgICAgICAgICAgICAgID8gcW1hcmtzVGVzdE5vY2FzZURvdFxuICAgICAgICAgICAgICAgICAgICA6IHFtYXJrc1Rlc3ROb2Nhc2VcbiAgICAgICAgICAgICAgICA6IG9wdGlvbnMuZG90XG4gICAgICAgICAgICAgICAgICAgID8gcW1hcmtzVGVzdERvdFxuICAgICAgICAgICAgICAgICAgICA6IHFtYXJrc1Rlc3QpKG0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyRG90U3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gb3B0aW9ucy5kb3QgPyBzdGFyRG90U3RhclRlc3REb3QgOiBzdGFyRG90U3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKGRvdFN0YXJSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IGRvdFN0YXJUZXN0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlID0gYXN0X2pzXzEuQVNULmZyb21HbG9iKHBhdHRlcm4sIHRoaXMub3B0aW9ucykudG9NTVBhdHRlcm4oKTtcbiAgICAgICAgaWYgKGZhc3RUZXN0ICYmIHR5cGVvZiByZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkcyBvdmVycmlkaW5nIGluIGZyb3plbiBlbnZpcm9ubWVudHNcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkocmUsICd0ZXN0JywgeyB2YWx1ZTogZmFzdFRlc3QgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlO1xuICAgIH1cbiAgICBtYWtlUmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZ2V4cCB8fCB0aGlzLnJlZ2V4cCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdleHA7XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHRoaXMuc2V0IGlzIGEgMmQgYXJyYXkgb2YgcGFydGlhbFxuICAgICAgICAvLyBwYXR0ZXJuIHN0cmluZ3MsIG9yIFwiKipcIi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSXQncyBiZXR0ZXIgdG8gdXNlIC5tYXRjaCgpLiAgVGhpcyBmdW5jdGlvbiBzaG91bGRuJ3RcbiAgICAgICAgLy8gYmUgdXNlZCwgcmVhbGx5LCBidXQgaXQncyBwcmV0dHkgY29udmVuaWVudCBzb21ldGltZXMsXG4gICAgICAgIC8vIHdoZW4geW91IGp1c3Qgd2FudCB0byB3b3JrIHdpdGggYSByZWdleC5cbiAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy5zZXQ7XG4gICAgICAgIGlmICghc2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0d29TdGFyID0gb3B0aW9ucy5ub2dsb2JzdGFyXG4gICAgICAgICAgICA/IHN0YXJcbiAgICAgICAgICAgIDogb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICA/IHR3b1N0YXJEb3RcbiAgICAgICAgICAgICAgICA6IHR3b1N0YXJOb0RvdDtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBuZXcgU2V0KG9wdGlvbnMubm9jYXNlID8gWydpJ10gOiBbXSk7XG4gICAgICAgIC8vIHJlZ2V4cGlmeSBub24tZ2xvYnN0YXIgcGF0dGVybnNcbiAgICAgICAgLy8gaWYgKiogaXMgb25seSBpdGVtLCB0aGVuIHdlIGp1c3QgZG8gb25lIHR3b1N0YXJcbiAgICAgICAgLy8gaWYgKiogaXMgZmlyc3QsIGFuZCB0aGVyZSBhcmUgbW9yZSwgcHJlcGVuZCAoXFwvfHR3b1N0YXJcXC8pPyB0byBuZXh0XG4gICAgICAgIC8vIGlmICoqIGlzIGxhc3QsIGFwcGVuZCAoXFwvdHdvU3RhcnwpIHRvIHByZXZpb3VzXG4gICAgICAgIC8vIGlmICoqIGlzIGluIHRoZSBtaWRkbGUsIGFwcGVuZCAoXFwvfFxcL3R3b1N0YXJcXC8pIHRvIHByZXZpb3VzXG4gICAgICAgIC8vIHRoZW4gZmlsdGVyIG91dCBHTE9CU1RBUiBzeW1ib2xzXG4gICAgICAgIGxldCByZSA9IHNldFxuICAgICAgICAgICAgLm1hcChwYXR0ZXJuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBwID0gcGF0dGVybi5tYXAocCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIHAuZmxhZ3Muc3BsaXQoJycpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWRkKGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHAgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcmVnRXhwRXNjYXBlKHApXG4gICAgICAgICAgICAgICAgICAgIDogcCA9PT0gZXhwb3J0cy5HTE9CU1RBUlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBleHBvcnRzLkdMT0JTVEFSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHAuX3NyYztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHAuZm9yRWFjaCgocCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBwcFtpICsgMV07XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHBwW2kgLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocCAhPT0gZXhwb3J0cy5HTE9CU1RBUiB8fCBwcmV2ID09PSBleHBvcnRzLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmIG5leHQgIT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBwW2kgKyAxXSA9ICcoPzpcXFxcL3wnICsgdHdvU3RhciArICdcXFxcLyk/JyArIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcFtpXSA9IHR3b1N0YXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHBwW2kgLSAxXSA9IHByZXYgKyAnKD86XFxcXC98JyArIHR3b1N0YXIgKyAnKT8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ICE9PSBleHBvcnRzLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHBwW2kgLSAxXSA9IHByZXYgKyAnKD86XFxcXC98XFxcXC8nICsgdHdvU3RhciArICdcXFxcLyknICsgbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSArIDFdID0gZXhwb3J0cy5HTE9CU1RBUjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwcC5maWx0ZXIocCA9PiBwICE9PSBleHBvcnRzLkdMT0JTVEFSKS5qb2luKCcvJyk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignfCcpO1xuICAgICAgICAvLyBuZWVkIHRvIHdyYXAgaW4gcGFyZW5zIGlmIHdlIGhhZCBtb3JlIHRoYW4gb25lIHRoaW5nIHdpdGggfCxcbiAgICAgICAgLy8gb3RoZXJ3aXNlIG9ubHkgdGhlIGZpcnN0IHdpbGwgYmUgYW5jaG9yZWQgdG8gXiBhbmQgdGhlIGxhc3QgdG8gJFxuICAgICAgICBjb25zdCBbb3BlbiwgY2xvc2VdID0gc2V0Lmxlbmd0aCA+IDEgPyBbJyg/OicsICcpJ10gOiBbJycsICcnXTtcbiAgICAgICAgLy8gbXVzdCBtYXRjaCBlbnRpcmUgcGF0dGVyblxuICAgICAgICAvLyBlbmRpbmcgaW4gYSAqIG9yICoqIHdpbGwgbWFrZSBpdCBsZXNzIHN0cmljdC5cbiAgICAgICAgcmUgPSAnXicgKyBvcGVuICsgcmUgKyBjbG9zZSArICckJztcbiAgICAgICAgLy8gY2FuIG1hdGNoIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3Mgbm90IHRoaXMuXG4gICAgICAgIGlmICh0aGlzLm5lZ2F0ZSlcbiAgICAgICAgICAgIHJlID0gJ14oPyEnICsgcmUgKyAnKS4rJCc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIFsuLi5mbGFnc10uam9pbignJykpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdleHA7XG4gICAgfVxuICAgIHNsYXNoU3BsaXQocCkge1xuICAgICAgICAvLyBpZiBwIHN0YXJ0cyB3aXRoIC8vIG9uIHdpbmRvd3MsIHdlIHByZXNlcnZlIHRoYXRcbiAgICAgICAgLy8gc28gdGhhdCBVTkMgcGF0aHMgYXJlbid0IGJyb2tlbi4gIE90aGVyd2lzZSwgYW55IG51bWJlciBvZlxuICAgICAgICAvLyAvIGNoYXJhY3RlcnMgYXJlIGNvYWxlc2NlZCBpbnRvIG9uZSwgdW5sZXNzXG4gICAgICAgIC8vIHByZXNlcnZlTXVsdGlwbGVTbGFzaGVzIGlzIHNldCB0byB0cnVlLlxuICAgICAgICBpZiAodGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoJy8nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzV2luZG93cyAmJiAvXlxcL1xcL1teXFwvXSsvLnRlc3QocCkpIHtcbiAgICAgICAgICAgIC8vIGFkZCBhbiBleHRyYSAnJyBmb3IgdGhlIG9uZSB3ZSBsb3NlXG4gICAgICAgICAgICByZXR1cm4gWycnLCAuLi5wLnNwbGl0KC9cXC8rLyldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoL1xcLysvKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXRjaChmLCBwYXJ0aWFsID0gdGhpcy5wYXJ0aWFsKSB7XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoJywgZiwgdGhpcy5wYXR0ZXJuKTtcbiAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpbiB0aGUgY2FzZSBvZiBidXN0ZWQgdGhpbmdzLlxuICAgICAgICAvLyBjb21tZW50cywgZXRjLlxuICAgICAgICBpZiAodGhpcy5jb21tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmID09PSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZiA9PT0gJy8nICYmIHBhcnRpYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIHdpbmRvd3M6IG5lZWQgdG8gdXNlIC8sIG5vdCBcXFxuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGYgPSBmLnNwbGl0KCdcXFxcJykuam9pbignLycpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyZWF0IHRoZSB0ZXN0IHBhdGggYXMgYSBzZXQgb2YgcGF0aHBhcnRzLlxuICAgICAgICBjb25zdCBmZiA9IHRoaXMuc2xhc2hTcGxpdChmKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzcGxpdCcsIGZmKTtcbiAgICAgICAgLy8ganVzdCBPTkUgb2YgdGhlIHBhdHRlcm4gc2V0cyBpbiB0aGlzLnNldCBuZWVkcyB0byBtYXRjaFxuICAgICAgICAvLyBpbiBvcmRlciBmb3IgaXQgdG8gYmUgdmFsaWQuICBJZiBuZWdhdGluZywgdGhlbiBqdXN0IG9uZVxuICAgICAgICAvLyBtYXRjaCBtZWFucyB0aGF0IHdlIGhhdmUgZmFpbGVkLlxuICAgICAgICAvLyBFaXRoZXIgd2F5LCByZXR1cm4gb24gdGhlIGZpcnN0IGhpdC5cbiAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy5zZXQ7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc2V0Jywgc2V0KTtcbiAgICAgICAgLy8gRmluZCB0aGUgYmFzZW5hbWUgb2YgdGhlIHBhdGggYnkgbG9va2luZyBmb3IgdGhlIGxhc3Qgbm9uLWVtcHR5IHNlZ21lbnRcbiAgICAgICAgbGV0IGZpbGVuYW1lID0gZmZbZmYubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBmZi5sZW5ndGggLSAyOyAhZmlsZW5hbWUgJiYgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZmW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gc2V0W2ldO1xuICAgICAgICAgICAgbGV0IGZpbGUgPSBmZjtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm1hdGNoQmFzZSAmJiBwYXR0ZXJuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGZpbGUgPSBbZmlsZW5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5tYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsKTtcbiAgICAgICAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMubmVnYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGhpdHMuICB0aGlzIGlzIHN1Y2Nlc3MgaWYgaXQncyBhIG5lZ2F0aXZlXG4gICAgICAgIC8vIHBhdHRlcm4sIGZhaWx1cmUgb3RoZXJ3aXNlLlxuICAgICAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubmVnYXRlO1xuICAgIH1cbiAgICBzdGF0aWMgZGVmYXVsdHMoZGVmKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm1pbmltYXRjaC5kZWZhdWx0cyhkZWYpLk1pbmltYXRjaDtcbiAgICB9XG59XG5leHBvcnRzLk1pbmltYXRjaCA9IE1pbmltYXRjaDtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xudmFyIGFzdF9qc18yID0gcmVxdWlyZShcIi4vYXN0LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQVNUXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3RfanNfMi5BU1Q7IH0gfSk7XG52YXIgZXNjYXBlX2pzXzIgPSByZXF1aXJlKFwiLi9lc2NhcGUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlc2NhcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVzY2FwZV9qc18yLmVzY2FwZTsgfSB9KTtcbnZhciB1bmVzY2FwZV9qc18yID0gcmVxdWlyZShcIi4vdW5lc2NhcGUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmVzY2FwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5lc2NhcGVfanNfMi51bmVzY2FwZTsgfSB9KTtcbi8qIGM4IGlnbm9yZSBzdG9wICovXG5leHBvcnRzLm1pbmltYXRjaC5BU1QgPSBhc3RfanNfMS5BU1Q7XG5leHBvcnRzLm1pbmltYXRjaC5NaW5pbWF0Y2ggPSBNaW5pbWF0Y2g7XG5leHBvcnRzLm1pbmltYXRjaC5lc2NhcGUgPSBlc2NhcGVfanNfMS5lc2NhcGU7XG5leHBvcnRzLm1pbmltYXRjaC51bmVzY2FwZSA9IHVuZXNjYXBlX2pzXzEudW5lc2NhcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAbW9kdWxlIExSVUNhY2hlXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTFJVQ2FjaGUgPSB2b2lkIDA7XG5jb25zdCBwZXJmID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJlxuICAgIHBlcmZvcm1hbmNlICYmXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gcGVyZm9ybWFuY2VcbiAgICA6IERhdGU7XG5jb25zdCB3YXJuZWQgPSBuZXcgU2V0KCk7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmNvbnN0IFBST0NFU1MgPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmICEhcHJvY2VzcyA/IHByb2Nlc3MgOiB7fSk7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmNvbnN0IGVtaXRXYXJuaW5nID0gKG1zZywgdHlwZSwgY29kZSwgZm4pID0+IHtcbiAgICB0eXBlb2YgUFJPQ0VTUy5lbWl0V2FybmluZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IFBST0NFU1MuZW1pdFdhcm5pbmcobXNnLCB0eXBlLCBjb2RlLCBmbilcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKGBbJHtjb2RlfV0gJHt0eXBlfTogJHttc2d9YCk7XG59O1xubGV0IEFDID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXI7XG5sZXQgQVMgPSBnbG9iYWxUaGlzLkFib3J0U2lnbmFsO1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG5pZiAodHlwZW9mIEFDID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIEFTID0gY2xhc3MgQWJvcnRTaWduYWwge1xuICAgICAgICBvbmFib3J0O1xuICAgICAgICBfb25hYm9ydCA9IFtdO1xuICAgICAgICByZWFzb247XG4gICAgICAgIGFib3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihfLCBmbikge1xuICAgICAgICAgICAgdGhpcy5fb25hYm9ydC5wdXNoKGZuKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy9AdHMtaWdub3JlXG4gICAgQUMgPSBjbGFzcyBBYm9ydENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHdhcm5BQ1BvbHlmaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2lnbmFsID0gbmV3IEFTKCk7XG4gICAgICAgIGFib3J0KHJlYXNvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICB0aGlzLnNpZ25hbC5yZWFzb24gPSByZWFzb247XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIHRoaXMuc2lnbmFsLl9vbmFib3J0KSB7XG4gICAgICAgICAgICAgICAgZm4ocmVhc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLm9uYWJvcnQ/LihyZWFzb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgcHJpbnRBQ1BvbHlmaWxsV2FybmluZyA9IFBST0NFU1MuZW52Py5MUlVfQ0FDSEVfSUdOT1JFX0FDX1dBUk5JTkcgIT09ICcxJztcbiAgICBjb25zdCB3YXJuQUNQb2x5ZmlsbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFwcmludEFDUG9seWZpbGxXYXJuaW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwcmludEFDUG9seWZpbGxXYXJuaW5nID0gZmFsc2U7XG4gICAgICAgIGVtaXRXYXJuaW5nKCdBYm9ydENvbnRyb2xsZXIgaXMgbm90IGRlZmluZWQuIElmIHVzaW5nIGxydS1jYWNoZSBpbiAnICtcbiAgICAgICAgICAgICdub2RlIDE0LCBsb2FkIGFuIEFib3J0Q29udHJvbGxlciBwb2x5ZmlsbCBmcm9tIHRoZSAnICtcbiAgICAgICAgICAgICdgbm9kZS1hYm9ydC1jb250cm9sbGVyYCBwYWNrYWdlLiBBIG1pbmltYWwgcG9seWZpbGwgaXMgJyArXG4gICAgICAgICAgICAncHJvdmlkZWQgZm9yIHVzZSBieSBMUlVDYWNoZS5mZXRjaCgpLCBidXQgaXQgc2hvdWxkIG5vdCBiZSAnICtcbiAgICAgICAgICAgICdyZWxpZWQgdXBvbiBpbiBvdGhlciBjb250ZXh0cyAoZWcsIHBhc3NpbmcgaXQgdG8gb3RoZXIgQVBJcyB0aGF0ICcgK1xuICAgICAgICAgICAgJ3VzZSBBYm9ydENvbnRyb2xsZXIvQWJvcnRTaWduYWwgbWlnaHQgaGF2ZSB1bmRlc2lyYWJsZSBlZmZlY3RzKS4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBkaXNhYmxlIHRoaXMgd2l0aCBMUlVfQ0FDSEVfSUdOT1JFX0FDX1dBUk5JTkc9MSBpbiB0aGUgZW52LicsICdOT19BQk9SVF9DT05UUk9MTEVSJywgJ0VOT1RTVVAnLCB3YXJuQUNQb2x5ZmlsbCk7XG4gICAgfTtcbn1cbi8qIGM4IGlnbm9yZSBzdG9wICovXG5jb25zdCBzaG91bGRXYXJuID0gKGNvZGUpID0+ICF3YXJuZWQuaGFzKGNvZGUpO1xuY29uc3QgVFlQRSA9IFN5bWJvbCgndHlwZScpO1xuY29uc3QgaXNQb3NJbnQgPSAobikgPT4gbiAmJiBuID09PSBNYXRoLmZsb29yKG4pICYmIG4gPiAwICYmIGlzRmluaXRlKG4pO1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG4vLyBUaGlzIGlzIGEgbGl0dGxlIGJpdCByaWRpY3Vsb3VzLCB0YmguXG4vLyBUaGUgbWF4aW11bSBhcnJheSBsZW5ndGggaXMgMl4zMi0xIG9yIHRoZXJlYWJvdXRzIG9uIG1vc3QgSlMgaW1wbHMuXG4vLyBBbmQgd2VsbCBiZWZvcmUgdGhhdCBwb2ludCwgeW91J3JlIGNhY2hpbmcgdGhlIGVudGlyZSB3b3JsZCwgSSBtZWFuLFxuLy8gdGhhdCdzIH4zMkdCIG9mIGp1c3QgaW50ZWdlcnMgZm9yIHRoZSBuZXh0L3ByZXYgbGlua3MsIHBsdXMgd2hhdGV2ZXJcbi8vIGVsc2UgdG8gaG9sZCB0aGF0IG1hbnkga2V5cyBhbmQgdmFsdWVzLiAgSnVzdCBmaWxsaW5nIHRoZSBtZW1vcnkgd2l0aFxuLy8gemVyb2VzIGF0IGluaXQgdGltZSBpcyBicnV0YWwgd2hlbiB5b3UgZ2V0IHRoYXQgYmlnLlxuLy8gQnV0IHdoeSBub3QgYmUgY29tcGxldGU/XG4vLyBNYXliZSBpbiB0aGUgZnV0dXJlLCB0aGVzZSBsaW1pdHMgd2lsbCBoYXZlIGV4cGFuZGVkLlxuY29uc3QgZ2V0VWludEFycmF5ID0gKG1heCkgPT4gIWlzUG9zSW50KG1heClcbiAgICA/IG51bGxcbiAgICA6IG1heCA8PSBNYXRoLnBvdygyLCA4KVxuICAgICAgICA/IFVpbnQ4QXJyYXlcbiAgICAgICAgOiBtYXggPD0gTWF0aC5wb3coMiwgMTYpXG4gICAgICAgICAgICA/IFVpbnQxNkFycmF5XG4gICAgICAgICAgICA6IG1heCA8PSBNYXRoLnBvdygyLCAzMilcbiAgICAgICAgICAgICAgICA/IFVpbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgOiBtYXggPD0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgICAgICAgICAgICAgICAgICAgPyBaZXJvQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmNsYXNzIFplcm9BcnJheSBleHRlbmRzIEFycmF5IHtcbiAgICBjb25zdHJ1Y3RvcihzaXplKSB7XG4gICAgICAgIHN1cGVyKHNpemUpO1xuICAgICAgICB0aGlzLmZpbGwoMCk7XG4gICAgfVxufVxuY2xhc3MgU3RhY2sge1xuICAgIGhlYXA7XG4gICAgbGVuZ3RoO1xuICAgIC8vIHByaXZhdGUgY29uc3RydWN0b3JcbiAgICBzdGF0aWMgI2NvbnN0cnVjdGluZyA9IGZhbHNlO1xuICAgIHN0YXRpYyBjcmVhdGUobWF4KSB7XG4gICAgICAgIGNvbnN0IEhlYXBDbHMgPSBnZXRVaW50QXJyYXkobWF4KTtcbiAgICAgICAgaWYgKCFIZWFwQ2xzKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICBTdGFjay4jY29uc3RydWN0aW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcyA9IG5ldyBTdGFjayhtYXgsIEhlYXBDbHMpO1xuICAgICAgICBTdGFjay4jY29uc3RydWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihtYXgsIEhlYXBDbHMpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghU3RhY2suI2NvbnN0cnVjdGluZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5zdGFudGlhdGUgU3RhY2sgdXNpbmcgU3RhY2suY3JlYXRlKG4pJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy5oZWFwID0gbmV3IEhlYXBDbHMobWF4KTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIH1cbiAgICBwdXNoKG4pIHtcbiAgICAgICAgdGhpcy5oZWFwW3RoaXMubGVuZ3RoKytdID0gbjtcbiAgICB9XG4gICAgcG9wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFwWy0tdGhpcy5sZW5ndGhdO1xuICAgIH1cbn1cbi8qKlxuICogRGVmYXVsdCBleHBvcnQsIHRoZSB0aGluZyB5b3UncmUgdXNpbmcgdGhpcyBtb2R1bGUgdG8gZ2V0LlxuICpcbiAqIFRoZSBgS2AgYW5kIGBWYCB0eXBlcyBkZWZpbmUgdGhlIGtleSBhbmQgdmFsdWUgdHlwZXMsIHJlc3BlY3RpdmVseS4gVGhlXG4gKiBvcHRpb25hbCBgRkNgIHR5cGUgZGVmaW5lcyB0aGUgdHlwZSBvZiB0aGUgYGNvbnRleHRgIG9iamVjdCBwYXNzZWQgdG9cbiAqIGBjYWNoZS5mZXRjaCgpYCBhbmQgYGNhY2hlLm1lbW8oKWAuXG4gKlxuICogS2V5cyBhbmQgdmFsdWVzICoqbXVzdCBub3QqKiBiZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKlxuICogQWxsIHByb3BlcnRpZXMgZnJvbSB0aGUgb3B0aW9ucyBvYmplY3QgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBgbWF4YCxcbiAqIGBtYXhTaXplYCwgYGZldGNoTWV0aG9kYCwgYG1lbW9NZXRob2RgLCBgZGlzcG9zZWAgYW5kIGBkaXNwb3NlQWZ0ZXJgKSBhcmVcbiAqIGFkZGVkIGFzIG5vcm1hbCBwdWJsaWMgbWVtYmVycy4gKFRoZSBsaXN0ZWQgb3B0aW9ucyBhcmUgcmVhZC1vbmx5IGdldHRlcnMuKVxuICpcbiAqIENoYW5naW5nIGFueSBvZiB0aGVzZSB3aWxsIGFsdGVyIHRoZSBkZWZhdWx0cyBmb3Igc3Vic2VxdWVudCBtZXRob2QgY2FsbHMuXG4gKi9cbmNsYXNzIExSVUNhY2hlIHtcbiAgICAvLyBvcHRpb25zIHRoYXQgY2Fubm90IGJlIGNoYW5nZWQgd2l0aG91dCBkaXNhc3RlclxuICAgICNtYXg7XG4gICAgI21heFNpemU7XG4gICAgI2Rpc3Bvc2U7XG4gICAgI2Rpc3Bvc2VBZnRlcjtcbiAgICAjZmV0Y2hNZXRob2Q7XG4gICAgI21lbW9NZXRob2Q7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bH1cbiAgICAgKi9cbiAgICB0dGw7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bFJlc29sdXRpb259XG4gICAgICovXG4gICAgdHRsUmVzb2x1dGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsQXV0b3B1cmdlfVxuICAgICAqL1xuICAgIHR0bEF1dG9wdXJnZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudXBkYXRlQWdlT25HZXR9XG4gICAgICovXG4gICAgdXBkYXRlQWdlT25HZXQ7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfVxuICAgICAqL1xuICAgIHVwZGF0ZUFnZU9uSGFzO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlfVxuICAgICAqL1xuICAgIGFsbG93U3RhbGU7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm5vRGlzcG9zZU9uU2V0fVxuICAgICAqL1xuICAgIG5vRGlzcG9zZU9uU2V0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub1VwZGF0ZVRUTH1cbiAgICAgKi9cbiAgICBub1VwZGF0ZVRUTDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4RW50cnlTaXplfVxuICAgICAqL1xuICAgIG1heEVudHJ5U2l6ZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uuc2l6ZUNhbGN1bGF0aW9ufVxuICAgICAqL1xuICAgIHNpemVDYWxjdWxhdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EZWxldGVPbkZldGNoUmVqZWN0aW9ufVxuICAgICAqL1xuICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EZWxldGVPblN0YWxlR2V0fVxuICAgICAqL1xuICAgIG5vRGVsZXRlT25TdGFsZUdldDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydH1cbiAgICAgKi9cbiAgICBhbGxvd1N0YWxlT25GZXRjaEFib3J0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbn1cbiAgICAgKi9cbiAgICBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuaWdub3JlRmV0Y2hBYm9ydH1cbiAgICAgKi9cbiAgICBpZ25vcmVGZXRjaEFib3J0O1xuICAgIC8vIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgICAjc2l6ZTtcbiAgICAjY2FsY3VsYXRlZFNpemU7XG4gICAgI2tleU1hcDtcbiAgICAja2V5TGlzdDtcbiAgICAjdmFsTGlzdDtcbiAgICAjbmV4dDtcbiAgICAjcHJldjtcbiAgICAjaGVhZDtcbiAgICAjdGFpbDtcbiAgICAjZnJlZTtcbiAgICAjZGlzcG9zZWQ7XG4gICAgI3NpemVzO1xuICAgICNzdGFydHM7XG4gICAgI3R0bHM7XG4gICAgI2hhc0Rpc3Bvc2U7XG4gICAgI2hhc0ZldGNoTWV0aG9kO1xuICAgICNoYXNEaXNwb3NlQWZ0ZXI7XG4gICAgLyoqXG4gICAgICogRG8gbm90IGNhbGwgdGhpcyBtZXRob2QgdW5sZXNzIHlvdSBuZWVkIHRvIGluc3BlY3QgdGhlXG4gICAgICogaW5uZXIgd29ya2luZ3Mgb2YgdGhlIGNhY2hlLiAgSWYgYW55dGhpbmcgcmV0dXJuZWQgYnkgdGhpc1xuICAgICAqIG9iamVjdCBpcyBtb2RpZmllZCBpbiBhbnkgd2F5LCBzdHJhbmdlIGJyZWFrYWdlIG1heSBvY2N1ci5cbiAgICAgKlxuICAgICAqIFRoZXNlIGZpZWxkcyBhcmUgcHJpdmF0ZSBmb3IgYSByZWFzb24hXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgdW5zYWZlRXhwb3NlSW50ZXJuYWxzKGMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHN0YXJ0czogYy4jc3RhcnRzLFxuICAgICAgICAgICAgdHRsczogYy4jdHRscyxcbiAgICAgICAgICAgIHNpemVzOiBjLiNzaXplcyxcbiAgICAgICAgICAgIGtleU1hcDogYy4ja2V5TWFwLFxuICAgICAgICAgICAga2V5TGlzdDogYy4ja2V5TGlzdCxcbiAgICAgICAgICAgIHZhbExpc3Q6IGMuI3ZhbExpc3QsXG4gICAgICAgICAgICBuZXh0OiBjLiNuZXh0LFxuICAgICAgICAgICAgcHJldjogYy4jcHJldixcbiAgICAgICAgICAgIGdldCBoZWFkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLiNoZWFkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCB0YWlsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLiN0YWlsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZyZWU6IGMuI2ZyZWUsXG4gICAgICAgICAgICAvLyBtZXRob2RzXG4gICAgICAgICAgICBpc0JhY2tncm91bmRGZXRjaDogKHApID0+IGMuI2lzQmFja2dyb3VuZEZldGNoKHApLFxuICAgICAgICAgICAgYmFja2dyb3VuZEZldGNoOiAoaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpID0+IGMuI2JhY2tncm91bmRGZXRjaChrLCBpbmRleCwgb3B0aW9ucywgY29udGV4dCksXG4gICAgICAgICAgICBtb3ZlVG9UYWlsOiAoaW5kZXgpID0+IGMuI21vdmVUb1RhaWwoaW5kZXgpLFxuICAgICAgICAgICAgaW5kZXhlczogKG9wdGlvbnMpID0+IGMuI2luZGV4ZXMob3B0aW9ucyksXG4gICAgICAgICAgICByaW5kZXhlczogKG9wdGlvbnMpID0+IGMuI3JpbmRleGVzKG9wdGlvbnMpLFxuICAgICAgICAgICAgaXNTdGFsZTogKGluZGV4KSA9PiBjLiNpc1N0YWxlKGluZGV4KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gUHJvdGVjdGVkIHJlYWQtb25seSBtZW1iZXJzXG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm1heH0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgbWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWF4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4U2l6ZX0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgbWF4U2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21heFNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBjb21wdXRlZCBzaXplIG9mIGl0ZW1zIGluIHRoZSBjYWNoZSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBjYWxjdWxhdGVkU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhbGN1bGF0ZWRTaXplO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpbiB0aGUgY2FjaGUgKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZmV0Y2hNZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNmZXRjaE1ldGhvZDtcbiAgICB9XG4gICAgZ2V0IG1lbW9NZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtZW1vTWV0aG9kO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuZGlzcG9zZX0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZGlzcG9zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5kaXNwb3NlQWZ0ZXJ9IChyZWFkLW9ubHkpXG4gICAgICovXG4gICAgZ2V0IGRpc3Bvc2VBZnRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2VBZnRlcjtcbiAgICB9XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IG1heCA9IDAsIHR0bCwgdHRsUmVzb2x1dGlvbiA9IDEsIHR0bEF1dG9wdXJnZSwgdXBkYXRlQWdlT25HZXQsIHVwZGF0ZUFnZU9uSGFzLCBhbGxvd1N0YWxlLCBkaXNwb3NlLCBkaXNwb3NlQWZ0ZXIsIG5vRGlzcG9zZU9uU2V0LCBub1VwZGF0ZVRUTCwgbWF4U2l6ZSA9IDAsIG1heEVudHJ5U2l6ZSA9IDAsIHNpemVDYWxjdWxhdGlvbiwgZmV0Y2hNZXRob2QsIG1lbW9NZXRob2QsIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiwgbm9EZWxldGVPblN0YWxlR2V0LCBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiwgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCwgaWdub3JlRmV0Y2hBYm9ydCwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChtYXggIT09IDAgJiYgIWlzUG9zSW50KG1heCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heCBvcHRpb24gbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBVaW50QXJyYXkgPSBtYXggPyBnZXRVaW50QXJyYXkobWF4KSA6IEFycmF5O1xuICAgICAgICBpZiAoIVVpbnRBcnJheSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG1heCB2YWx1ZTogJyArIG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jbWF4ID0gbWF4O1xuICAgICAgICB0aGlzLiNtYXhTaXplID0gbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5tYXhFbnRyeVNpemUgPSBtYXhFbnRyeVNpemUgfHwgdGhpcy4jbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5zaXplQ2FsY3VsYXRpb24gPSBzaXplQ2FsY3VsYXRpb247XG4gICAgICAgIGlmICh0aGlzLnNpemVDYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLiNtYXhTaXplICYmICF0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBzZXQgc2l6ZUNhbGN1bGF0aW9uIHdpdGhvdXQgc2V0dGluZyBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpemVDYWxjdWxhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBzZXQgdG8gbm9uLWZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lbW9NZXRob2QgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1lbW9NZXRob2QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lbW9NZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIGRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNtZW1vTWV0aG9kID0gbWVtb01ldGhvZDtcbiAgICAgICAgaWYgKGZldGNoTWV0aG9kICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBmZXRjaE1ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZmV0Y2hNZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2ZldGNoTWV0aG9kID0gZmV0Y2hNZXRob2Q7XG4gICAgICAgIHRoaXMuI2hhc0ZldGNoTWV0aG9kID0gISFmZXRjaE1ldGhvZDtcbiAgICAgICAgdGhpcy4ja2V5TWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLiNrZXlMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLiN2YWxMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLiNuZXh0ID0gbmV3IFVpbnRBcnJheShtYXgpO1xuICAgICAgICB0aGlzLiNwcmV2ID0gbmV3IFVpbnRBcnJheShtYXgpO1xuICAgICAgICB0aGlzLiNoZWFkID0gMDtcbiAgICAgICAgdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgIHRoaXMuI2ZyZWUgPSBTdGFjay5jcmVhdGUobWF4KTtcbiAgICAgICAgdGhpcy4jc2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMDtcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlID0gZGlzcG9zZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2VBZnRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyID0gZGlzcG9zZUFmdGVyO1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2hhc0Rpc3Bvc2UgPSAhIXRoaXMuI2Rpc3Bvc2U7XG4gICAgICAgIHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciA9ICEhdGhpcy4jZGlzcG9zZUFmdGVyO1xuICAgICAgICB0aGlzLm5vRGlzcG9zZU9uU2V0ID0gISFub0Rpc3Bvc2VPblNldDtcbiAgICAgICAgdGhpcy5ub1VwZGF0ZVRUTCA9ICEhbm9VcGRhdGVUVEw7XG4gICAgICAgIHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gISFub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24gPSAhIWFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uO1xuICAgICAgICB0aGlzLmFsbG93U3RhbGVPbkZldGNoQWJvcnQgPSAhIWFsbG93U3RhbGVPbkZldGNoQWJvcnQ7XG4gICAgICAgIHRoaXMuaWdub3JlRmV0Y2hBYm9ydCA9ICEhaWdub3JlRmV0Y2hBYm9ydDtcbiAgICAgICAgLy8gTkI6IG1heEVudHJ5U2l6ZSBpcyBzZXQgdG8gbWF4U2l6ZSBpZiBpdCdzIHNldFxuICAgICAgICBpZiAodGhpcy5tYXhFbnRyeVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNtYXhTaXplICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLiNtYXhTaXplKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXhTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQb3NJbnQodGhpcy5tYXhFbnRyeVNpemUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4RW50cnlTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZVNpemVUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZSA9ICEhYWxsb3dTdGFsZTtcbiAgICAgICAgdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQgPSAhIW5vRGVsZXRlT25TdGFsZUdldDtcbiAgICAgICAgdGhpcy51cGRhdGVBZ2VPbkdldCA9ICEhdXBkYXRlQWdlT25HZXQ7XG4gICAgICAgIHRoaXMudXBkYXRlQWdlT25IYXMgPSAhIXVwZGF0ZUFnZU9uSGFzO1xuICAgICAgICB0aGlzLnR0bFJlc29sdXRpb24gPVxuICAgICAgICAgICAgaXNQb3NJbnQodHRsUmVzb2x1dGlvbikgfHwgdHRsUmVzb2x1dGlvbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gdHRsUmVzb2x1dGlvblxuICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgdGhpcy50dGxBdXRvcHVyZ2UgPSAhIXR0bEF1dG9wdXJnZTtcbiAgICAgICAgdGhpcy50dGwgPSB0dGwgfHwgMDtcbiAgICAgICAgaWYgKHRoaXMudHRsKSB7XG4gICAgICAgICAgICBpZiAoIWlzUG9zSW50KHRoaXMudHRsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3R0bCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2luaXRpYWxpemVUVExUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvIG5vdCBhbGxvdyBjb21wbGV0ZWx5IHVuYm91bmRlZCBjYWNoZXNcbiAgICAgICAgaWYgKHRoaXMuI21heCA9PT0gMCAmJiB0aGlzLnR0bCA9PT0gMCAmJiB0aGlzLiNtYXhTaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBdCBsZWFzdCBvbmUgb2YgbWF4LCBtYXhTaXplLCBvciB0dGwgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudHRsQXV0b3B1cmdlICYmICF0aGlzLiNtYXggJiYgIXRoaXMuI21heFNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSAnTFJVX0NBQ0hFX1VOQk9VTkRFRCc7XG4gICAgICAgICAgICBpZiAoc2hvdWxkV2Fybihjb2RlKSkge1xuICAgICAgICAgICAgICAgIHdhcm5lZC5hZGQoY29kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gJ1RUTCBjYWNoaW5nIHdpdGhvdXQgdHRsQXV0b3B1cmdlLCBtYXgsIG9yIG1heFNpemUgY2FuICcgK1xuICAgICAgICAgICAgICAgICAgICAncmVzdWx0IGluIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uJztcbiAgICAgICAgICAgICAgICBlbWl0V2FybmluZyhtc2csICdVbmJvdW5kZWRDYWNoZVdhcm5pbmcnLCBjb2RlLCBMUlVDYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXMgbGVmdCBpbiB0aGUgaXRlbSdzIFRUTC4gSWYgaXRlbSBpcyBub3QgaW4gY2FjaGUsXG4gICAgICogcmV0dXJucyBgMGAuIFJldHVybnMgYEluZmluaXR5YCBpZiBpdGVtIGlzIGluIGNhY2hlIHdpdGhvdXQgYSBkZWZpbmVkIFRUTC5cbiAgICAgKi9cbiAgICBnZXRSZW1haW5pbmdUVEwoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNrZXlNYXAuaGFzKGtleSkgPyBJbmZpbml0eSA6IDA7XG4gICAgfVxuICAgICNpbml0aWFsaXplVFRMVHJhY2tpbmcoKSB7XG4gICAgICAgIGNvbnN0IHR0bHMgPSBuZXcgWmVyb0FycmF5KHRoaXMuI21heCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0cyA9IG5ldyBaZXJvQXJyYXkodGhpcy4jbWF4KTtcbiAgICAgICAgdGhpcy4jdHRscyA9IHR0bHM7XG4gICAgICAgIHRoaXMuI3N0YXJ0cyA9IHN0YXJ0cztcbiAgICAgICAgdGhpcy4jc2V0SXRlbVRUTCA9IChpbmRleCwgdHRsLCBzdGFydCA9IHBlcmYubm93KCkpID0+IHtcbiAgICAgICAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGwgIT09IDAgPyBzdGFydCA6IDA7XG4gICAgICAgICAgICB0dGxzW2luZGV4XSA9IHR0bDtcbiAgICAgICAgICAgIGlmICh0dGwgIT09IDAgJiYgdGhpcy50dGxBdXRvcHVyZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaW5kZXhdLCAnZXhwaXJlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0dGwgKyAxKTtcbiAgICAgICAgICAgICAgICAvLyB1bnJlZigpIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3Jtc1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmICh0LnVucmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHQudW5yZWYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jdXBkYXRlSXRlbUFnZSA9IGluZGV4ID0+IHtcbiAgICAgICAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGxzW2luZGV4XSAhPT0gMCA/IHBlcmYubm93KCkgOiAwO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNzdGF0dXNUVEwgPSAoc3RhdHVzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR0bHNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHRsID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBzdGFydHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgaWYgKCF0dGwgfHwgIXN0YXJ0KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgc3RhdHVzLnR0bCA9IHR0bDtcbiAgICAgICAgICAgICAgICBzdGF0dXMuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICBzdGF0dXMubm93ID0gY2FjaGVkTm93IHx8IGdldE5vdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFnZSA9IHN0YXR1cy5ub3cgLSBzdGFydDtcbiAgICAgICAgICAgICAgICBzdGF0dXMucmVtYWluaW5nVFRMID0gdHRsIC0gYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBkZWJvdW5jZSBjYWxscyB0byBwZXJmLm5vdygpIHRvIDFzIHNvIHdlJ3JlIG5vdCBoaXR0aW5nXG4gICAgICAgIC8vIHRoYXQgY29zdGx5IGNhbGwgcmVwZWF0ZWRseS5cbiAgICAgICAgbGV0IGNhY2hlZE5vdyA9IDA7XG4gICAgICAgIGNvbnN0IGdldE5vdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBwZXJmLm5vdygpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHRsUmVzb2x1dGlvbiA+IDApIHtcbiAgICAgICAgICAgICAgICBjYWNoZWROb3cgPSBuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IChjYWNoZWROb3cgPSAwKSwgdGhpcy50dGxSZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICAvLyBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAodC51bnJlZikge1xuICAgICAgICAgICAgICAgICAgICB0LnVucmVmKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRSZW1haW5pbmdUVEwgPSBrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHRsID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0c1tpbmRleF07XG4gICAgICAgICAgICBpZiAoIXR0bCB8fCAhc3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhZ2UgPSAoY2FjaGVkTm93IHx8IGdldE5vdygpKSAtIHN0YXJ0O1xuICAgICAgICAgICAgcmV0dXJuIHR0bCAtIGFnZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jaXNTdGFsZSA9IGluZGV4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBzdGFydHNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgdCA9IHR0bHNbaW5kZXhdO1xuICAgICAgICAgICAgcmV0dXJuICEhdCAmJiAhIXMgJiYgKGNhY2hlZE5vdyB8fCBnZXROb3coKSkgLSBzID4gdDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gY29uZGl0aW9uYWxseSBzZXQgcHJpdmF0ZSBtZXRob2RzIHJlbGF0ZWQgdG8gVFRMXG4gICAgI3VwZGF0ZUl0ZW1BZ2UgPSAoKSA9PiB7IH07XG4gICAgI3N0YXR1c1RUTCA9ICgpID0+IHsgfTtcbiAgICAjc2V0SXRlbVRUTCA9ICgpID0+IHsgfTtcbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICNpc1N0YWxlID0gKCkgPT4gZmFsc2U7XG4gICAgI2luaXRpYWxpemVTaXplVHJhY2tpbmcoKSB7XG4gICAgICAgIGNvbnN0IHNpemVzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpO1xuICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI3NpemVzID0gc2l6ZXM7XG4gICAgICAgIHRoaXMuI3JlbW92ZUl0ZW1TaXplID0gaW5kZXggPT4ge1xuICAgICAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgLT0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgc2l6ZXNbaW5kZXhdID0gMDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jcmVxdWlyZVNpemUgPSAoaywgdiwgc2l6ZSwgc2l6ZUNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyBwcm92aXNpb25hbGx5IGFjY2VwdCBiYWNrZ3JvdW5kIGZldGNoZXMuXG4gICAgICAgICAgICAvLyBhY3R1YWwgdmFsdWUgc2l6ZSB3aWxsIGJlIGNoZWNrZWQgd2hlbiB0aGV5IHJldHVybi5cbiAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1Bvc0ludChzaXplKSkge1xuICAgICAgICAgICAgICAgIGlmIChzaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzaXplQ2FsY3VsYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZUNhbGN1bGF0aW9uKHYsIGspO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUG9zSW50KHNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplQ2FsY3VsYXRpb24gcmV0dXJuIGludmFsaWQgKGV4cGVjdCBwb3NpdGl2ZSBpbnRlZ2VyKScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHNpemUgdmFsdWUgKG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcikuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1doZW4gbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgaXMgdXNlZCwgc2l6ZUNhbGN1bGF0aW9uICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ29yIHNpemUgbXVzdCBiZSBzZXQuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNpemU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplID0gKGluZGV4LCBzaXplLCBzdGF0dXMpID0+IHtcbiAgICAgICAgICAgIHNpemVzW2luZGV4XSA9IHNpemU7XG4gICAgICAgICAgICBpZiAodGhpcy4jbWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSB0aGlzLiNtYXhTaXplIC0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLiNjYWxjdWxhdGVkU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgKz0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5lbnRyeVNpemUgPSBzaXplO1xuICAgICAgICAgICAgICAgIHN0YXR1cy50b3RhbENhbGN1bGF0ZWRTaXplID0gdGhpcy4jY2FsY3VsYXRlZFNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgICNyZW1vdmVJdGVtU2l6ZSA9IF9pID0+IHsgfTtcbiAgICAjYWRkSXRlbVNpemUgPSAoX2ksIF9zLCBfc3QpID0+IHsgfTtcbiAgICAjcmVxdWlyZVNpemUgPSAoX2ssIF92LCBzaXplLCBzaXplQ2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgaWYgKHNpemUgfHwgc2l6ZUNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW5ub3Qgc2V0IHNpemUgd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplIG9uIGNhY2hlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICAqI2luZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuI3RhaWw7IHRydWU7KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1ZhbGlkSW5kZXgoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhbGxvd1N0YWxlIHx8ICF0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLiNoZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IHRoaXMuI3ByZXZbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICojcmluZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuI2hlYWQ7IHRydWU7KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1ZhbGlkSW5kZXgoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhbGxvd1N0YWxlIHx8ICF0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IHRoaXMuI25leHRbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNpc1ZhbGlkSW5kZXgoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIChpbmRleCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLiNrZXlNYXAuZ2V0KHRoaXMuI2tleUxpc3RbaW5kZXhdKSA9PT0gaW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgYFtrZXksIHZhbHVlXWAgcGFpcnMsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqZW50cmllcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI3ZhbExpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIFt0aGlzLiNrZXlMaXN0W2ldLCB0aGlzLiN2YWxMaXN0W2ldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmVudHJpZXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgYFtrZXksIHZhbHVlXWAgcGFpcnMsXG4gICAgICogaW4gb3JkZXIgZnJvbSBsZWFzdCByZWNlbnRseSB1c2VkIHRvIG1vc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqcmVudHJpZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgdGhpcy4ja2V5TGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgW3RoaXMuI2tleUxpc3RbaV0sIHRoaXMuI3ZhbExpc3RbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqa2V5cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgayA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmtleXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIGtleXMgaW4gdGhlIGNhY2hlLFxuICAgICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAgICovXG4gICAgKnJrZXlzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgayA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqdmFsdWVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUudmFsdWVzfVxuICAgICAqXG4gICAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIGNhY2hlLFxuICAgICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAgICovXG4gICAgKnJ2YWx1ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGluZyBvdmVyIHRoZSBjYWNoZSBpdHNlbGYgeWllbGRzIHRoZSBzYW1lIHJlc3VsdHMgYXNcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuZW50cmllc31cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFN0cmluZyB2YWx1ZSB0aGF0IGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBkZWZhdWx0IHN0cmluZ1xuICAgICAqIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdC4gQ2FsbGVkIGJ5IHRoZSBidWlsdC1pbiBtZXRob2RcbiAgICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAgICovXG4gICAgW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTFJVQ2FjaGUnO1xuICAgIC8qKlxuICAgICAqIEZpbmQgYSB2YWx1ZSBmb3Igd2hpY2ggdGhlIHN1cHBsaWVkIGZuIG1ldGhvZCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLFxuICAgICAqIHNpbWlsYXIgdG8gYEFycmF5LmZpbmQoKWAuIGZuIGlzIGNhbGxlZCBhcyBgZm4odmFsdWUsIGtleSwgY2FjaGUpYC5cbiAgICAgKi9cbiAgICBmaW5kKGZuLCBnZXRPcHRpb25zID0ge30pIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZm4odmFsdWUsIHRoaXMuI2tleUxpc3RbaV0sIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHRoaXMuI2tleUxpc3RbaV0sIGdldE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIG9uIGVhY2ggaXRlbSBpbiB0aGUgY2FjaGUsIGluIG9yZGVyIGZyb20gbW9zdFxuICAgICAqIHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKlxuICAgICAqIGBmbmAgaXMgY2FsbGVkIGFzIGBmbih2YWx1ZSwga2V5LCBjYWNoZSlgLlxuICAgICAqXG4gICAgICogSWYgYHRoaXNwYCBpcyBwcm92aWRlZCwgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGB0aGlzYC1jb250ZXh0IG9mXG4gICAgICogdGhlIHByb3ZpZGVkIG9iamVjdCwgb3IgdGhlIGNhY2hlIGlmIG5vIGB0aGlzcGAgb2JqZWN0IGlzIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgdXBkYXRlIGFnZSBvciByZWNlbnR5IG9mIHVzZSwgb3IgaXRlcmF0ZSBvdmVyIHN0YWxlIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmb3JFYWNoKGZuLCB0aGlzcCA9IHRoaXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMge0BsaW5rIExSVUNhY2hlLmZvckVhY2h9IGJ1dCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBpblxuICAgICAqIHJldmVyc2Ugb3JkZXIuICAoaWUsIGxlc3MgcmVjZW50bHkgdXNlZCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBmaXJzdC4pXG4gICAgICovXG4gICAgcmZvckVhY2goZm4sIHRoaXNwID0gdGhpcykge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlIGFueSBzdGFsZSBlbnRyaWVzLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHJlbW92ZWQsXG4gICAgICogZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1cmdlU3RhbGUoKSB7XG4gICAgICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcyh7IGFsbG93U3RhbGU6IHRydWUgfSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaV0sICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsZXRlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBleHRlbmRlZCBpbmZvIGFib3V0IGEgZ2l2ZW4gZW50cnksIHRvIGdldCBpdHMgdmFsdWUsIHNpemUsIGFuZFxuICAgICAqIFRUTCBpbmZvIHNpbXVsdGFuZW91c2x5LiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQuXG4gICAgICpcbiAgICAgKiBVbmxpa2Uge0BsaW5rIExSVUNhY2hlI2R1bXB9LCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSBhbmQgc3Vydml2ZVxuICAgICAqIHNlcmlhbGl6YXRpb24sIHRoZSBgc3RhcnRgIHZhbHVlIGlzIGFsd2F5cyB0aGUgY3VycmVudCB0aW1lc3RhbXAsIGFuZCB0aGVcbiAgICAgKiBgdHRsYCBpcyBhIGNhbGN1bGF0ZWQgcmVtYWluaW5nIHRpbWUgdG8gbGl2ZSAobmVnYXRpdmUgaWYgZXhwaXJlZCkuXG4gICAgICpcbiAgICAgKiBBbHdheXMgcmV0dXJucyBzdGFsZSB2YWx1ZXMsIGlmIHRoZWlyIGluZm8gaXMgZm91bmQgaW4gdGhlIGNhY2hlLCBzbyBiZVxuICAgICAqIHN1cmUgdG8gY2hlY2sgZm9yIGV4cGlyYXRpb25zIChpZSwgYSBuZWdhdGl2ZSB7QGxpbmsgTFJVQ2FjaGUuRW50cnkjdHRsfSlcbiAgICAgKiBpZiByZWxldmFudC5cbiAgICAgKi9cbiAgICBpbmZvKGtleSkge1xuICAgICAgICBjb25zdCBpID0gdGhpcy4ja2V5TWFwLmdldChrZXkpO1xuICAgICAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAgICAgOiB2O1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0geyB2YWx1ZSB9O1xuICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHR0bCA9IHRoaXMuI3R0bHNbaV07XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuI3N0YXJ0c1tpXTtcbiAgICAgICAgICAgIGlmICh0dGwgJiYgc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1haW4gPSB0dGwgLSAocGVyZi5ub3coKSAtIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBlbnRyeS50dGwgPSByZW1haW47XG4gICAgICAgICAgICAgICAgZW50cnkuc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgZW50cnkuc2l6ZSA9IHRoaXMuI3NpemVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIFtrZXksIHtAbGluayBMUlVDYWNoZS5FbnRyeX1dIHR1cGxlcyB3aGljaCBjYW4gYmVcbiAgICAgKiBwYXNzZWQgdG8ge0BsaW5rIExSTFVDYWNoZSNsb2FkfS5cbiAgICAgKlxuICAgICAqIFRoZSBgc3RhcnRgIGZpZWxkcyBhcmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlIGBEYXRlLm5vdygpYFxuICAgICAqIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIFN0YWxlIGVudHJpZXMgYXJlIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgYGR1bXBgLCBldmVuIGlmXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9IGlzIGZhbHNlLlxuICAgICAqXG4gICAgICogTm90ZTogdGhpcyByZXR1cm5zIGFuIGFjdHVhbCBhcnJheSwgbm90IGEgZ2VuZXJhdG9yLCBzbyBpdCBjYW4gYmUgbW9yZVxuICAgICAqIGVhc2lseSBwYXNzZWQgYXJvdW5kLlxuICAgICAqL1xuICAgIGR1bXAoKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcyh7IGFsbG93U3RhbGU6IHRydWUgfSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0geyB2YWx1ZSB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuI3R0bHMgJiYgdGhpcy4jc3RhcnRzKSB7XG4gICAgICAgICAgICAgICAgZW50cnkudHRsID0gdGhpcy4jdHRsc1tpXTtcbiAgICAgICAgICAgICAgICAvLyBhbHdheXMgZHVtcCB0aGUgc3RhcnQgcmVsYXRpdmUgdG8gYSBwb3J0YWJsZSB0aW1lc3RhbXBcbiAgICAgICAgICAgICAgICAvLyBpdCdzIG9rIGZvciB0aGlzIHRvIGJlIGEgYml0IHNsb3csIGl0J3MgYSByYXJlIG9wZXJhdGlvbi5cbiAgICAgICAgICAgICAgICBjb25zdCBhZ2UgPSBwZXJmLm5vdygpIC0gdGhpcy4jc3RhcnRzW2ldO1xuICAgICAgICAgICAgICAgIGVudHJ5LnN0YXJ0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC0gYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgICAgIGVudHJ5LnNpemUgPSB0aGlzLiNzaXplc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFyci51bnNoaWZ0KFtrZXksIGVudHJ5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzZXQgdGhlIGNhY2hlIGFuZCBsb2FkIGluIHRoZSBpdGVtcyBpbiBlbnRyaWVzIGluIHRoZSBvcmRlciBsaXN0ZWQuXG4gICAgICpcbiAgICAgKiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdGluZyBjYWNoZSBtYXkgYmUgZGlmZmVyZW50IGlmIHRoZSBzYW1lIG9wdGlvbnMgYXJlXG4gICAgICogbm90IHVzZWQgaW4gYm90aCBjYWNoZXMuXG4gICAgICpcbiAgICAgKiBUaGUgYHN0YXJ0YCBmaWVsZHMgYXJlIGFzc3VtZWQgdG8gYmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlXG4gICAgICogYERhdGUubm93KClgIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBsb2FkKGFycikge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIGFycikge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gZW50cnkuc3RhcnQgaXMgYSBwb3J0YWJsZSB0aW1lc3RhbXAsIGJ1dCB3ZSBtYXkgYmUgdXNpbmdcbiAgICAgICAgICAgICAgICAvLyBub2RlJ3MgcGVyZm9ybWFuY2Uubm93KCksIHNvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0LCBzbyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gd2UgZ2V0IHRoZSBpbnRlbmRlZCByZW1haW5pbmcgVFRMLCBubyBtYXR0ZXIgaG93IGxvbmcgaXQnc1xuICAgICAgICAgICAgICAgIC8vIGJlZW4gb24gaWNlLlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gaXQncyBvayBmb3IgdGhpcyB0byBiZSBhIGJpdCBzbG93LCBpdCdzIGEgcmFyZSBvcGVyYXRpb24uXG4gICAgICAgICAgICAgICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIGVudHJ5LnN0YXJ0O1xuICAgICAgICAgICAgICAgIGVudHJ5LnN0YXJ0ID0gcGVyZi5ub3coKSAtIGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgZW50cnkudmFsdWUsIGVudHJ5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSB2YWx1ZSB0byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBOb3RlOiBpZiBgdW5kZWZpbmVkYCBpcyBzcGVjaWZpZWQgYXMgYSB2YWx1ZSwgdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUjZGVsZXRlfVxuICAgICAqXG4gICAgICogRmllbGRzIG9uIHRoZSB7QGxpbmsgTFJVQ2FjaGUuU2V0T3B0aW9uc30gb3B0aW9ucyBwYXJhbSB3aWxsIG92ZXJyaWRlXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMgZm9yIHRoZSBzY29wZVxuICAgICAqIG9mIHRoaXMgc2luZ2xlIGBzZXQoKWAgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogSWYgYHN0YXJ0YCBpcyBwcm92aWRlZCwgdGhlbiB0aGF0IHdpbGwgc2V0IHRoZSBlZmZlY3RpdmUgc3RhcnRcbiAgICAgKiB0aW1lIGZvciB0aGUgVFRMIGNhbGN1bGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGEgcHJldmlvdXNcbiAgICAgKiB2YWx1ZSBvZiBgcGVyZm9ybWFuY2Uubm93KClgIGlmIHN1cHBvcnRlZCwgb3IgYSBwcmV2aW91cyB2YWx1ZSBvZlxuICAgICAqIGBEYXRlLm5vdygpYCBpZiBub3QuXG4gICAgICpcbiAgICAgKiBPcHRpb25zIG9iamVjdCBtYXkgYWxzbyBpbmNsdWRlIGBzaXplYCwgd2hpY2ggd2lsbCBwcmV2ZW50XG4gICAgICogY2FsbGluZyB0aGUgYHNpemVDYWxjdWxhdGlvbmAgZnVuY3Rpb24gYW5kIGp1c3QgdXNlIHRoZSBzcGVjaWZpZWRcbiAgICAgKiBudW1iZXIgaWYgaXQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBhbmQgYG5vRGlzcG9zZU9uU2V0YCB3aGljaFxuICAgICAqIHdpbGwgcHJldmVudCBjYWxsaW5nIGEgYGRpc3Bvc2VgIGZ1bmN0aW9uIGluIHRoZSBjYXNlIG9mXG4gICAgICogb3ZlcndyaXRlcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBgc2l6ZWAgKG9yIHJldHVybiB2YWx1ZSBvZiBgc2l6ZUNhbGN1bGF0aW9uYCkgZm9yIGEgZ2l2ZW5cbiAgICAgKiBlbnRyeSBpcyBncmVhdGVyIHRoYW4gYG1heEVudHJ5U2l6ZWAsIHRoZW4gdGhlIGl0ZW0gd2lsbCBub3QgYmVcbiAgICAgKiBhZGRlZCB0byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBXaWxsIHVwZGF0ZSB0aGUgcmVjZW5jeSBvZiB0aGUgZW50cnkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgYHVuZGVmaW5lZGAsIHRoZW4gdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICAgKiBgY2FjaGUuZGVsZXRlKGtleSlgLiBgdW5kZWZpbmVkYCBpcyBuZXZlciBzdG9yZWQgaW4gdGhlIGNhY2hlLlxuICAgICAqL1xuICAgIHNldChrLCB2LCBzZXRPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGUoayk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHR0bCA9IHRoaXMudHRsLCBzdGFydCwgbm9EaXNwb3NlT25TZXQgPSB0aGlzLm5vRGlzcG9zZU9uU2V0LCBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbiwgc3RhdHVzLCB9ID0gc2V0T3B0aW9ucztcbiAgICAgICAgbGV0IHsgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMIH0gPSBzZXRPcHRpb25zO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy4jcmVxdWlyZVNpemUoaywgdiwgc2V0T3B0aW9ucy5zaXplIHx8IDAsIHNpemVDYWxjdWxhdGlvbik7XG4gICAgICAgIC8vIGlmIHRoZSBpdGVtIGRvZXNuJ3QgZml0LCBkb24ndCBkbyBhbnl0aGluZ1xuICAgICAgICAvLyBOQjogbWF4RW50cnlTaXplIHNldCB0byBtYXhTaXplIGJ5IGRlZmF1bHRcbiAgICAgICAgaWYgKHRoaXMubWF4RW50cnlTaXplICYmIHNpemUgPiB0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAnbWlzcyc7XG4gICAgICAgICAgICAgICAgc3RhdHVzLm1heEVudHJ5U2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhdmUgdG8gZGVsZXRlLCBpbiBjYXNlIHNvbWV0aGluZyBpcyB0aGVyZSBhbHJlYWR5LlxuICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdzZXQnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuI3NpemUgPT09IDAgPyB1bmRlZmluZWQgOiB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gYWRkaXRpb25cbiAgICAgICAgICAgIGluZGV4ID0gKHRoaXMuI3NpemUgPT09IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuI3RhaWxcbiAgICAgICAgICAgICAgICA6IHRoaXMuI2ZyZWUubGVuZ3RoICE9PSAwXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy4jZnJlZS5wb3AoKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI3NpemUgPT09IHRoaXMuI21heFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiNldmljdChmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy4jc2l6ZSk7XG4gICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2luZGV4XSA9IGs7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHY7XG4gICAgICAgICAgICB0aGlzLiNrZXlNYXAuc2V0KGssIGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuI25leHRbdGhpcy4jdGFpbF0gPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuI3ByZXZbaW5kZXhdID0gdGhpcy4jdGFpbDtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuI3NpemUrKztcbiAgICAgICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplKGluZGV4LCBzaXplLCBzdGF0dXMpO1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICBzdGF0dXMuc2V0ID0gJ2FkZCc7XG4gICAgICAgICAgICBub1VwZGF0ZVRUTCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlXG4gICAgICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbCA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHYgIT09IG9sZFZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaChvbGRWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbC5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ3JlcGxhY2VkJykpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IF9fc3RhbGVXaGlsZUZldGNoaW5nOiBzIH0gPSBvbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzICE9PSB1bmRlZmluZWQgJiYgIW5vRGlzcG9zZU9uU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/LihzLCBrLCAnc2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3MsIGssICdzZXQnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIW5vRGlzcG9zZU9uU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4ob2xkVmFsLCBrLCAnc2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW29sZFZhbCwgaywgJ3NldCddKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShpbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jYWRkSXRlbVNpemUoaW5kZXgsIHNpemUsIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSB2O1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNldCA9ICdyZXBsYWNlJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSBvbGRWYWwgJiYgdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2gob2xkVmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBvbGRWYWwuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkVmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5vbGRWYWx1ZSA9IG9sZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAndXBkYXRlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHRsICE9PSAwICYmICF0aGlzLiN0dGxzKSB7XG4gICAgICAgICAgICB0aGlzLiNpbml0aWFsaXplVFRMVHJhY2tpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jdHRscykge1xuICAgICAgICAgICAgaWYgKCFub1VwZGF0ZVRUTCkge1xuICAgICAgICAgICAgICAgIHRoaXMuI3NldEl0ZW1UVEwoaW5kZXgsIHR0bCwgc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFub0Rpc3Bvc2VPblNldCAmJiB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gdGhpcy4jZGlzcG9zZWQ7XG4gICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlcj8uKC4uLnRhc2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmljdCB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBpdGVtLCByZXR1cm5pbmcgaXRzIHZhbHVlIG9yXG4gICAgICogYHVuZGVmaW5lZGAgaWYgY2FjaGUgaXMgZW1wdHkuXG4gICAgICovXG4gICAgcG9wKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMuI3NpemUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLiN2YWxMaXN0W3RoaXMuI2hlYWRdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2V2aWN0KHRydWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwuX19zdGFsZVdoaWxlRmV0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgICAgICB3aGlsZSAoKHRhc2sgPSBkdD8uc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNldmljdChmcmVlKSB7XG4gICAgICAgIGNvbnN0IGhlYWQgPSB0aGlzLiNoZWFkO1xuICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtoZWFkXTtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaGVhZF07XG4gICAgICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2V2aWN0ZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssICdldmljdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VkPy5wdXNoKFt2LCBrLCAnZXZpY3QnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaGVhZCk7XG4gICAgICAgIC8vIGlmIHdlIGFyZW4ndCBhYm91dCB0byB1c2UgdGhlIGluZGV4LCB0aGVuIG51bGwgdGhlc2Ugb3V0XG4gICAgICAgIGlmIChmcmVlKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2hlYWRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtoZWFkXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuI2ZyZWUucHVzaChoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI3RhaWwgPSAwO1xuICAgICAgICAgICAgdGhpcy4jZnJlZS5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI25leHRbaGVhZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4ja2V5TWFwLmRlbGV0ZShrKTtcbiAgICAgICAgdGhpcy4jc2l6ZS0tO1xuICAgICAgICByZXR1cm4gaGVhZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBrZXkgaXMgaW4gdGhlIGNhY2hlLCB3aXRob3V0IHVwZGF0aW5nIHRoZSByZWNlbmN5IG9mIHVzZS5cbiAgICAgKiBXaWxsIHJldHVybiBmYWxzZSBpZiB0aGUgaXRlbSBpcyBzdGFsZSwgZXZlbiB0aG91Z2ggaXQgaXMgdGVjaG5pY2FsbHlcbiAgICAgKiBpbiB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBDaGVjayBpZiBhIGtleSBpcyBpbiB0aGUgY2FjaGUsIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJlY2VuY3kgb2ZcbiAgICAgKiB1c2UuIEFnZSBpcyB1cGRhdGVkIGlmIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0XG4gICAgICogdG8gYHRydWVgIGluIGVpdGhlciB0aGUgb3B0aW9ucyBvciB0aGUgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBXaWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseSBpblxuICAgICAqIHRoZSBjYWNoZS4gVGhlIGRpZmZlcmVuY2UgY2FuIGJlIGRldGVybWluZWQgKGlmIGl0IG1hdHRlcnMpIGJ5IHVzaW5nIGFcbiAgICAgKiBgc3RhdHVzYCBhcmd1bWVudCwgYW5kIGluc3BlY3RpbmcgdGhlIGBoYXNgIGZpZWxkLlxuICAgICAqXG4gICAgICogV2lsbCBub3QgdXBkYXRlIGl0ZW0gYWdlIHVubGVzc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0LlxuICAgICAqL1xuICAgIGhhcyhrLCBoYXNPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyB1cGRhdGVBZ2VPbkhhcyA9IHRoaXMudXBkYXRlQWdlT25IYXMsIHN0YXR1cyB9ID0gaGFzT3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpICYmXG4gICAgICAgICAgICAgICAgdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVBZ2VPbkhhcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlKGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuaGFzID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuaGFzID0gJ3N0YWxlJztcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBzdGF0dXMuaGFzID0gJ21pc3MnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGlrZSB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSBidXQgZG9lc24ndCB1cGRhdGUgcmVjZW5jeSBvciBkZWxldGUgc3RhbGVcbiAgICAgKiBpdGVtcy5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGl0ZW0gaXMgc3RhbGUsIHVubGVzc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlfSBpcyBzZXQuXG4gICAgICovXG4gICAgcGVlayhrLCBwZWVrT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSB9ID0gcGVla09wdGlvbnM7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICghYWxsb3dTdGFsZSAmJiB0aGlzLiNpc1N0YWxlKGluZGV4KSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgIC8vIGVpdGhlciBzdGFsZSBhbmQgYWxsb3dlZCwgb3IgZm9yY2luZyBhIHJlZnJlc2ggb2Ygbm9uLXN0YWxlIHZhbHVlXG4gICAgICAgIHJldHVybiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiB2O1xuICAgIH1cbiAgICAjYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHYgPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWMgPSBuZXcgQUMoKTtcbiAgICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgICAgIC8vIHdoZW4vaWYgb3VyIEFDIHNpZ25hbHMsIHRoZW4gc3RvcCBsaXN0ZW5pbmcgdG8gdGhlaXJzLlxuICAgICAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gYWMuYWJvcnQoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgICAgICAgIHNpZ25hbDogYWMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZmV0Y2hPcHRzID0ge1xuICAgICAgICAgICAgc2lnbmFsOiBhYy5zaWduYWwsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2IgPSAodiwgdXBkYXRlQ2FjaGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhYm9ydGVkIH0gPSBhYy5zaWduYWw7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVBYm9ydCA9IG9wdGlvbnMuaWdub3JlRmV0Y2hBYm9ydCAmJiB2ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWJvcnRlZCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hBYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGFjLnNpZ25hbC5yZWFzb247XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZ25vcmVBYm9ydClcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoQWJvcnRJZ25vcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhYm9ydGVkICYmICFpZ25vcmVBYm9ydCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hGYWlsKGFjLnNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWl0aGVyIHdlIGRpZG4ndCBhYm9ydCwgYW5kIGFyZSBzdGlsbCBoZXJlLCBvciB3ZSBkaWQsIGFuZCBpZ25vcmVkXG4gICAgICAgICAgICBjb25zdCBiZiA9IHA7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleF0gPT09IHApIHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZi5fX3N0YWxlV2hpbGVGZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2RlbGV0ZShrLCAnZmV0Y2gnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoaywgdiwgZmV0Y2hPcHRzLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlYiA9IChlcikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoRmFpbChlcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZldGNoRmFpbCA9IChlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhYm9ydGVkIH0gPSBhYy5zaWduYWw7XG4gICAgICAgICAgICBjb25zdCBhbGxvd1N0YWxlQWJvcnRlZCA9IGFib3J0ZWQgJiYgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0O1xuICAgICAgICAgICAgY29uc3QgYWxsb3dTdGFsZSA9IGFsbG93U3RhbGVBYm9ydGVkIHx8IG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgICAgICBjb25zdCBub0RlbGV0ZSA9IGFsbG93U3RhbGUgfHwgb3B0aW9ucy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgICAgICBjb25zdCBiZiA9IHA7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleF0gPT09IHApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhbGxvdyBzdGFsZSBvbiBmZXRjaCByZWplY3Rpb25zLCB0aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXRcbiAgICAgICAgICAgICAgICAvLyB0aGUgc3RhbGUgdmFsdWUgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgd2hlbiB0aGUgZmV0Y2ggZmFpbHMuXG4gICAgICAgICAgICAgICAgY29uc3QgZGVsID0gIW5vRGVsZXRlIHx8IGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGRlbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ2ZldGNoJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhbGxvd1N0YWxlQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCByZXBsYWNlIHRoZSAqcHJvbWlzZSogd2l0aCB0aGUgc3RhbGUgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIGFyZSBkb25lIHdpdGggdGhlIHByb21pc2UgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgaXQgdW50b3VjaGVkIGlmIHdlJ3JlIHN0aWxsIHdhaXRpbmcgZm9yIGFuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFib3J0ZWQgYmFja2dyb3VuZCBmZXRjaCB0aGF0IGhhc24ndCB5ZXQgcmV0dXJuZWQuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbG93U3RhbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMgJiYgYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmYuX19yZXR1cm5lZCA9PT0gYmYpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGNhbGwgPSAocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZtcCA9IHRoaXMuI2ZldGNoTWV0aG9kPy4oaywgdiwgZmV0Y2hPcHRzKTtcbiAgICAgICAgICAgIGlmIChmbXAgJiYgZm1wIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGZtcC50aGVuKHYgPT4gcmVzKHYgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHYpLCByZWopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWdub3JlZCwgd2UgZ28gdW50aWwgd2UgZmluaXNoLCByZWdhcmRsZXNzLlxuICAgICAgICAgICAgLy8gZGVmZXIgY2hlY2sgdW50aWwgd2UgYXJlIGFjdHVhbGx5IGFib3J0aW5nLFxuICAgICAgICAgICAgLy8gc28gZmV0Y2hNZXRob2QgY2FuIG92ZXJyaWRlLlxuICAgICAgICAgICAgYWMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVGZXRjaEFib3J0IHx8XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCkge1xuICAgICAgICAgICAgICAgICAgICByZXModW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBpdCBldmVudHVhbGx5IHJlc29sdmVzLCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgPSB2ID0+IGNiKHYsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnN0YXR1cylcbiAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoRGlzcGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZShwY2FsbCkudGhlbihjYiwgZWIpO1xuICAgICAgICBjb25zdCBiZiA9IE9iamVjdC5hc3NpZ24ocCwge1xuICAgICAgICAgICAgX19hYm9ydENvbnRyb2xsZXI6IGFjLFxuICAgICAgICAgICAgX19zdGFsZVdoaWxlRmV0Y2hpbmc6IHYsXG4gICAgICAgICAgICBfX3JldHVybmVkOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gaW50ZXJuYWwsIGRvbid0IGV4cG9zZSBzdGF0dXMuXG4gICAgICAgICAgICB0aGlzLnNldChrLCBiZiwgeyAuLi5mZXRjaE9wdHMub3B0aW9ucywgc3RhdHVzOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IGJmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiZjtcbiAgICB9XG4gICAgI2lzQmFja2dyb3VuZEZldGNoKHApIHtcbiAgICAgICAgaWYgKCF0aGlzLiNoYXNGZXRjaE1ldGhvZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgYiA9IHA7XG4gICAgICAgIHJldHVybiAoISFiICYmXG4gICAgICAgICAgICBiIGluc3RhbmNlb2YgUHJvbWlzZSAmJlxuICAgICAgICAgICAgYi5oYXNPd25Qcm9wZXJ0eSgnX19zdGFsZVdoaWxlRmV0Y2hpbmcnKSAmJlxuICAgICAgICAgICAgYi5fX2Fib3J0Q29udHJvbGxlciBpbnN0YW5jZW9mIEFDKTtcbiAgICB9XG4gICAgYXN5bmMgZmV0Y2goaywgZmV0Y2hPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBcbiAgICAgICAgLy8gZ2V0IG9wdGlvbnNcbiAgICAgICAgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSwgdXBkYXRlQWdlT25HZXQgPSB0aGlzLnVwZGF0ZUFnZU9uR2V0LCBub0RlbGV0ZU9uU3RhbGVHZXQgPSB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCwgXG4gICAgICAgIC8vIHNldCBvcHRpb25zXG4gICAgICAgIHR0bCA9IHRoaXMudHRsLCBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsIHNpemUgPSAwLCBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbiwgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMLCBcbiAgICAgICAgLy8gZmV0Y2ggZXhjbHVzaXZlIG9wdGlvbnNcbiAgICAgICAgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gdGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uID0gdGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiwgaWdub3JlRmV0Y2hBYm9ydCA9IHRoaXMuaWdub3JlRmV0Y2hBYm9ydCwgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCA9IHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCwgY29udGV4dCwgZm9yY2VSZWZyZXNoID0gZmFsc2UsIHN0YXR1cywgc2lnbmFsLCB9ID0gZmV0Y2hPcHRpb25zO1xuICAgICAgICBpZiAoIXRoaXMuI2hhc0ZldGNoTWV0aG9kKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdnZXQnO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGssIHtcbiAgICAgICAgICAgICAgICBhbGxvd1N0YWxlLFxuICAgICAgICAgICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICAgICAgICAgIG5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dTdGFsZSxcbiAgICAgICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICAgICAgbm9EZWxldGVPblN0YWxlR2V0LFxuICAgICAgICAgICAgdHRsLFxuICAgICAgICAgICAgbm9EaXNwb3NlT25TZXQsXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgc2l6ZUNhbGN1bGF0aW9uLFxuICAgICAgICAgICAgbm9VcGRhdGVUVEwsXG4gICAgICAgICAgICBub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sXG4gICAgICAgICAgICBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbixcbiAgICAgICAgICAgIGFsbG93U3RhbGVPbkZldGNoQWJvcnQsXG4gICAgICAgICAgICBpZ25vcmVGZXRjaEFib3J0LFxuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICBzdGF0dXMuZmV0Y2ggPSAnbWlzcyc7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAocC5fX3JldHVybmVkID0gcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBpbiBjYWNoZSwgbWF5YmUgYWxyZWFkeSBmZXRjaGluZ1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhbGUgPSBhbGxvd1N0YWxlICYmIHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdpbmZsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YWxlID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6ICh2Ll9fcmV0dXJuZWQgPSB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIHdlIGZvcmNlIGEgcmVmcmVzaCwgdGhhdCBtZWFucyBkbyBOT1Qgc2VydmUgdGhlIGNhY2hlZCB2YWx1ZSxcbiAgICAgICAgICAgIC8vIHVubGVzcyB3ZSBhcmUgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiByZWZyZXNoaW5nIHRoZSBjYWNoZS5cbiAgICAgICAgICAgIGNvbnN0IGlzU3RhbGUgPSB0aGlzLiNpc1N0YWxlKGluZGV4KTtcbiAgICAgICAgICAgIGlmICghZm9yY2VSZWZyZXNoICYmICFpc1N0YWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgdGhpcy4jbW92ZVRvVGFpbChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBvaywgaXQgaXMgc3RhbGUgb3IgYSBmb3JjZWQgcmVmcmVzaCwgYW5kIG5vdCBhbHJlYWR5IGZldGNoaW5nLlxuICAgICAgICAgICAgLy8gcmVmcmVzaCB0aGUgY2FjaGUuXG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1N0YWxlID0gcC5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3Qgc3RhbGVWYWwgPSBoYXNTdGFsZSAmJiBhbGxvd1N0YWxlO1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9IGlzU3RhbGUgPyAnc3RhbGUnIDogJ3JlZnJlc2gnO1xuICAgICAgICAgICAgICAgIGlmIChzdGFsZVZhbCAmJiBpc1N0YWxlKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhbGVWYWwgPyBwLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogKHAuX19yZXR1cm5lZCA9IHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGZvcmNlRmV0Y2goaywgZmV0Y2hPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IHRoaXMuZmV0Y2goaywgZmV0Y2hPcHRpb25zKTtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmV0Y2goKSByZXR1cm5lZCB1bmRlZmluZWQnKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIG1lbW8oaywgbWVtb09wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBtZW1vTWV0aG9kID0gdGhpcy4jbWVtb01ldGhvZDtcbiAgICAgICAgaWYgKCFtZW1vTWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIG1lbW9NZXRob2QgcHJvdmlkZWQgdG8gY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGNvbnRleHQsIGZvcmNlUmVmcmVzaCwgLi4ub3B0aW9ucyB9ID0gbWVtb09wdGlvbnM7XG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLmdldChrLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFmb3JjZVJlZnJlc2ggJiYgdiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNvbnN0IHZ2ID0gbWVtb01ldGhvZChrLCB2LCB7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0KGssIHZ2LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHZ2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZS4gV2lsbCB1cGRhdGUgdGhlIHJlY2VuY3kgb2YgdGhlIGNhY2hlXG4gICAgICogZW50cnkgZm91bmQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgZ2V0KCkgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgZ2V0KGssIGdldE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUsIHVwZGF0ZUFnZU9uR2V0ID0gdGhpcy51cGRhdGVBZ2VPbkdldCwgbm9EZWxldGVPblN0YWxlR2V0ID0gdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQsIHN0YXR1cywgfSA9IGdldE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBmZXRjaGluZyA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmdldCA9ICdzdGFsZSc7XG4gICAgICAgICAgICAgICAgLy8gZGVsZXRlIG9ubHkgaWYgbm90IGFuIGluLWZsaWdodCBiYWNrZ3JvdW5kIGZldGNoXG4gICAgICAgICAgICAgICAgaWYgKCFmZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vRGVsZXRlT25TdGFsZUdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYmIGFsbG93U3RhbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvd1N0YWxlID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1N0YWxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG93U3RhbGUgPyB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgY3VycmVudGx5IGZldGNoaW5nIGl0LCB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIGl0IHlldFxuICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHN0YWxlLCB3aGljaCBtZWFucyB0aGlzIGlzbid0IGEgc3RhbGVXaGlsZVJlZmV0Y2hpbmcuXG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyBub3Qgc3RhbGUsIGFuZCBmZXRjaGluZywgQU5EIGhhcyBhIF9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgLy8gdmFsdWUsIHRoZW4gdGhhdCBtZWFucyB0aGUgdXNlciBmZXRjaGVkIHdpdGgge2ZvcmNlUmVmcmVzaDp0cnVlfSxcbiAgICAgICAgICAgICAgICAvLyBzbyBpdCdzIHNhZmUgdG8gcmV0dXJuIHRoYXQgdmFsdWUuXG4gICAgICAgICAgICAgICAgaWYgKGZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jbW92ZVRvVGFpbChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ21pc3MnO1xuICAgICAgICB9XG4gICAgfVxuICAgICNjb25uZWN0KHAsIG4pIHtcbiAgICAgICAgdGhpcy4jcHJldltuXSA9IHA7XG4gICAgICAgIHRoaXMuI25leHRbcF0gPSBuO1xuICAgIH1cbiAgICAjbW92ZVRvVGFpbChpbmRleCkge1xuICAgICAgICAvLyBpZiB0YWlsIGFscmVhZHksIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgLy8gaWYgaGVhZCwgbW92ZSBoZWFkIHRvIG5leHRbaW5kZXhdXG4gICAgICAgIC8vIGVsc2VcbiAgICAgICAgLy8gICBtb3ZlIG5leHRbcHJldltpbmRleF1dIHRvIG5leHRbaW5kZXhdIChoZWFkIGhhcyBubyBwcmV2KVxuICAgICAgICAvLyAgIG1vdmUgcHJldltuZXh0W2luZGV4XV0gdG8gcHJldltpbmRleF1cbiAgICAgICAgLy8gcHJldltpbmRleF0gPSB0YWlsXG4gICAgICAgIC8vIG5leHRbdGFpbF0gPSBpbmRleFxuICAgICAgICAvLyB0YWlsID0gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNoZWFkID0gdGhpcy4jbmV4dFtpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNjb25uZWN0KHRoaXMuI3ByZXZbaW5kZXhdLCB0aGlzLiNuZXh0W2luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjb25uZWN0KHRoaXMuI3RhaWwsIGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSBpbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEga2V5IG91dCBvZiB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGtleSB3YXMgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGRlbGV0ZShrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkZWxldGUoaywgJ2RlbGV0ZScpO1xuICAgIH1cbiAgICAjZGVsZXRlKGssIHJlYXNvbikge1xuICAgICAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjbGVhcihyZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssIHJlYXNvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2tleU1hcC5kZWxldGUoayk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaW5kZXhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiN0YWlsID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNuZXh0W3BpXSA9IHRoaXMuI25leHRbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmkgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3ByZXZbbmldID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jc2l6ZS0tO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNmcmVlLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gdGhpcy4jZGlzcG9zZWQ7XG4gICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlcj8uKC4uLnRhc2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgY2FjaGUgZW50aXJlbHksIHRocm93aW5nIGF3YXkgYWxsIHZhbHVlcy5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NsZWFyKCdkZWxldGUnKTtcbiAgICB9XG4gICAgI2NsZWFyKHJlYXNvbikge1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssIHJlYXNvbl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNrZXlNYXAuY2xlYXIoKTtcbiAgICAgICAgdGhpcy4jdmFsTGlzdC5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuI2tleUxpc3QuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgIHRoaXMuI3R0bHMuZmlsbCgwKTtcbiAgICAgICAgICAgIHRoaXMuI3N0YXJ0cy5maWxsKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgdGhpcy4jc2l6ZXMuZmlsbCgwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNoZWFkID0gMDtcbiAgICAgICAgdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgIHRoaXMuI2ZyZWUubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgPSAwO1xuICAgICAgICB0aGlzLiNzaXplID0gMDtcbiAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZCkge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkxSVUNhY2hlID0gTFJVQ2FjaGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NaW5pcGFzcyA9IGV4cG9ydHMuaXNXcml0YWJsZSA9IGV4cG9ydHMuaXNSZWFkYWJsZSA9IGV4cG9ydHMuaXNTdHJlYW0gPSB2b2lkIDA7XG5jb25zdCBwcm9jID0gdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3NcbiAgICA/IHByb2Nlc3NcbiAgICA6IHtcbiAgICAgICAgc3Rkb3V0OiBudWxsLFxuICAgICAgICBzdGRlcnI6IG51bGwsXG4gICAgfTtcbmNvbnN0IG5vZGVfZXZlbnRzXzEgPSByZXF1aXJlKFwibm9kZTpldmVudHNcIik7XG5jb25zdCBub2RlX3N0cmVhbV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJub2RlOnN0cmVhbVwiKSk7XG5jb25zdCBub2RlX3N0cmluZ19kZWNvZGVyXzEgPSByZXF1aXJlKFwibm9kZTpzdHJpbmdfZGVjb2RlclwiKTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgTWluaXBhc3Mgc3RyZWFtLCBOb2RlIHN0cmVhbSwgb3Igc29tZXRoaW5nXG4gKiBlbHNlIHRoYXQgTWluaXBhc3MgY2FuIGludGVyYWN0IHdpdGguXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIChzIGluc3RhbmNlb2YgTWluaXBhc3MgfHxcbiAgICAgICAgcyBpbnN0YW5jZW9mIG5vZGVfc3RyZWFtXzEuZGVmYXVsdCB8fFxuICAgICAgICAoMCwgZXhwb3J0cy5pc1JlYWRhYmxlKShzKSB8fFxuICAgICAgICAoMCwgZXhwb3J0cy5pc1dyaXRhYmxlKShzKSk7XG5leHBvcnRzLmlzU3RyZWFtID0gaXNTdHJlYW07XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIHtAbGluayBNaW5pcGFzcy5SZWFkYWJsZX1cbiAqL1xuY29uc3QgaXNSZWFkYWJsZSA9IChzKSA9PiAhIXMgJiZcbiAgICB0eXBlb2YgcyA9PT0gJ29iamVjdCcgJiZcbiAgICBzIGluc3RhbmNlb2Ygbm9kZV9ldmVudHNfMS5FdmVudEVtaXR0ZXIgJiZcbiAgICB0eXBlb2Ygcy5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgLy8gbm9kZSBjb3JlIFdyaXRhYmxlIHN0cmVhbXMgaGF2ZSBhIHBpcGUoKSBtZXRob2QsIGJ1dCBpdCB0aHJvd3NcbiAgICBzLnBpcGUgIT09IG5vZGVfc3RyZWFtXzEuZGVmYXVsdC5Xcml0YWJsZS5wcm90b3R5cGUucGlwZTtcbmV4cG9ydHMuaXNSZWFkYWJsZSA9IGlzUmVhZGFibGU7XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIHtAbGluayBNaW5pcGFzcy5Xcml0YWJsZX1cbiAqL1xuY29uc3QgaXNXcml0YWJsZSA9IChzKSA9PiAhIXMgJiZcbiAgICB0eXBlb2YgcyA9PT0gJ29iamVjdCcgJiZcbiAgICBzIGluc3RhbmNlb2Ygbm9kZV9ldmVudHNfMS5FdmVudEVtaXR0ZXIgJiZcbiAgICB0eXBlb2Ygcy53cml0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBzLmVuZCA9PT0gJ2Z1bmN0aW9uJztcbmV4cG9ydHMuaXNXcml0YWJsZSA9IGlzV3JpdGFibGU7XG5jb25zdCBFT0YgPSBTeW1ib2woJ0VPRicpO1xuY29uc3QgTUFZQkVfRU1JVF9FTkQgPSBTeW1ib2woJ21heWJlRW1pdEVuZCcpO1xuY29uc3QgRU1JVFRFRF9FTkQgPSBTeW1ib2woJ2VtaXR0ZWRFbmQnKTtcbmNvbnN0IEVNSVRUSU5HX0VORCA9IFN5bWJvbCgnZW1pdHRpbmdFbmQnKTtcbmNvbnN0IEVNSVRURURfRVJST1IgPSBTeW1ib2woJ2VtaXR0ZWRFcnJvcicpO1xuY29uc3QgQ0xPU0VEID0gU3ltYm9sKCdjbG9zZWQnKTtcbmNvbnN0IFJFQUQgPSBTeW1ib2woJ3JlYWQnKTtcbmNvbnN0IEZMVVNIID0gU3ltYm9sKCdmbHVzaCcpO1xuY29uc3QgRkxVU0hDSFVOSyA9IFN5bWJvbCgnZmx1c2hDaHVuaycpO1xuY29uc3QgRU5DT0RJTkcgPSBTeW1ib2woJ2VuY29kaW5nJyk7XG5jb25zdCBERUNPREVSID0gU3ltYm9sKCdkZWNvZGVyJyk7XG5jb25zdCBGTE9XSU5HID0gU3ltYm9sKCdmbG93aW5nJyk7XG5jb25zdCBQQVVTRUQgPSBTeW1ib2woJ3BhdXNlZCcpO1xuY29uc3QgUkVTVU1FID0gU3ltYm9sKCdyZXN1bWUnKTtcbmNvbnN0IEJVRkZFUiA9IFN5bWJvbCgnYnVmZmVyJyk7XG5jb25zdCBQSVBFUyA9IFN5bWJvbCgncGlwZXMnKTtcbmNvbnN0IEJVRkZFUkxFTkdUSCA9IFN5bWJvbCgnYnVmZmVyTGVuZ3RoJyk7XG5jb25zdCBCVUZGRVJQVVNIID0gU3ltYm9sKCdidWZmZXJQdXNoJyk7XG5jb25zdCBCVUZGRVJTSElGVCA9IFN5bWJvbCgnYnVmZmVyU2hpZnQnKTtcbmNvbnN0IE9CSkVDVE1PREUgPSBTeW1ib2woJ29iamVjdE1vZGUnKTtcbi8vIGludGVybmFsIGV2ZW50IHdoZW4gc3RyZWFtIGlzIGRlc3Ryb3llZFxuY29uc3QgREVTVFJPWUVEID0gU3ltYm9sKCdkZXN0cm95ZWQnKTtcbi8vIGludGVybmFsIGV2ZW50IHdoZW4gc3RyZWFtIGhhcyBhbiBlcnJvclxuY29uc3QgRVJST1IgPSBTeW1ib2woJ2Vycm9yJyk7XG5jb25zdCBFTUlUREFUQSA9IFN5bWJvbCgnZW1pdERhdGEnKTtcbmNvbnN0IEVNSVRFTkQgPSBTeW1ib2woJ2VtaXRFbmQnKTtcbmNvbnN0IEVNSVRFTkQyID0gU3ltYm9sKCdlbWl0RW5kMicpO1xuY29uc3QgQVNZTkMgPSBTeW1ib2woJ2FzeW5jJyk7XG5jb25zdCBBQk9SVCA9IFN5bWJvbCgnYWJvcnQnKTtcbmNvbnN0IEFCT1JURUQgPSBTeW1ib2woJ2Fib3J0ZWQnKTtcbmNvbnN0IFNJR05BTCA9IFN5bWJvbCgnc2lnbmFsJyk7XG5jb25zdCBEQVRBTElTVEVORVJTID0gU3ltYm9sKCdkYXRhTGlzdGVuZXJzJyk7XG5jb25zdCBESVNDQVJERUQgPSBTeW1ib2woJ2Rpc2NhcmRlZCcpO1xuY29uc3QgZGVmZXIgPSAoZm4pID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pO1xuY29uc3Qgbm9kZWZlciA9IChmbikgPT4gZm4oKTtcbmNvbnN0IGlzRW5kaXNoID0gKGV2KSA9PiBldiA9PT0gJ2VuZCcgfHwgZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJztcbmNvbnN0IGlzQXJyYXlCdWZmZXJMaWtlID0gKGIpID0+IGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgICghIWIgJiZcbiAgICAgICAgdHlwZW9mIGIgPT09ICdvYmplY3QnICYmXG4gICAgICAgIGIuY29uc3RydWN0b3IgJiZcbiAgICAgICAgYi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXJyYXlCdWZmZXInICYmXG4gICAgICAgIGIuYnl0ZUxlbmd0aCA+PSAwKTtcbmNvbnN0IGlzQXJyYXlCdWZmZXJWaWV3ID0gKGIpID0+ICFCdWZmZXIuaXNCdWZmZXIoYikgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGIpO1xuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHRvIGEgZGVzdGluYXRpb24gc3RyZWFtLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBQaXBlIHtcbiAgICBzcmM7XG4gICAgZGVzdDtcbiAgICBvcHRzO1xuICAgIG9uZHJhaW47XG4gICAgY29uc3RydWN0b3Ioc3JjLCBkZXN0LCBvcHRzKSB7XG4gICAgICAgIHRoaXMuc3JjID0gc3JjO1xuICAgICAgICB0aGlzLmRlc3QgPSBkZXN0O1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLm9uZHJhaW4gPSAoKSA9PiBzcmNbUkVTVU1FXSgpO1xuICAgICAgICB0aGlzLmRlc3Qub24oJ2RyYWluJywgdGhpcy5vbmRyYWluKTtcbiAgICB9XG4gICAgdW5waXBlKCkge1xuICAgICAgICB0aGlzLmRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgdGhpcy5vbmRyYWluKTtcbiAgICB9XG4gICAgLy8gb25seSBoZXJlIGZvciB0aGUgcHJvdG90eXBlXG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgcHJveHlFcnJvcnMoX2VyKSB7IH1cbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIGVuZCgpIHtcbiAgICAgICAgdGhpcy51bnBpcGUoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5lbmQpXG4gICAgICAgICAgICB0aGlzLmRlc3QuZW5kKCk7XG4gICAgfVxufVxuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHRvIGEgZGVzdGluYXRpb24gc3RyZWFtIHdoZXJlXG4gKiBlcnJvcnMgYXJlIHByb3hpZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFBpcGVQcm94eUVycm9ycyBleHRlbmRzIFBpcGUge1xuICAgIHVucGlwZSgpIHtcbiAgICAgICAgdGhpcy5zcmMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5wcm94eUVycm9ycyk7XG4gICAgICAgIHN1cGVyLnVucGlwZSgpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihzcmMsIGRlc3QsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIoc3JjLCBkZXN0LCBvcHRzKTtcbiAgICAgICAgdGhpcy5wcm94eUVycm9ycyA9IGVyID0+IGRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgIHNyYy5vbignZXJyb3InLCB0aGlzLnByb3h5RXJyb3JzKTtcbiAgICB9XG59XG5jb25zdCBpc09iamVjdE1vZGVPcHRpb25zID0gKG8pID0+ICEhby5vYmplY3RNb2RlO1xuY29uc3QgaXNFbmNvZGluZ09wdGlvbnMgPSAobykgPT4gIW8ub2JqZWN0TW9kZSAmJiAhIW8uZW5jb2RpbmcgJiYgby5lbmNvZGluZyAhPT0gJ2J1ZmZlcic7XG4vKipcbiAqIE1haW4gZXhwb3J0LCB0aGUgTWluaXBhc3MgY2xhc3NcbiAqXG4gKiBgUlR5cGVgIGlzIHRoZSB0eXBlIG9mIGRhdGEgZW1pdHRlZCwgZGVmYXVsdHMgdG8gQnVmZmVyXG4gKlxuICogYFdUeXBlYCBpcyB0aGUgdHlwZSBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4sIGlmIFJUeXBlIGlzIGJ1ZmZlciBvciBzdHJpbmcsXG4gKiB0aGVuIGFueSB7QGxpbmsgTWluaXBhc3MuQ29udGlndW91c0RhdGF9IGlzIGFsbG93ZWQuXG4gKlxuICogYEV2ZW50c2AgaXMgdGhlIHNldCBvZiBldmVudCBoYW5kbGVyIHNpZ25hdHVyZXMgdGhhdCB0aGlzIG9iamVjdFxuICogd2lsbCBlbWl0LCBzZWUge0BsaW5rIE1pbmlwYXNzLkV2ZW50c31cbiAqL1xuY2xhc3MgTWluaXBhc3MgZXh0ZW5kcyBub2RlX2V2ZW50c18xLkV2ZW50RW1pdHRlciB7XG4gICAgW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgW1BBVVNFRF0gPSBmYWxzZTtcbiAgICBbUElQRVNdID0gW107XG4gICAgW0JVRkZFUl0gPSBbXTtcbiAgICBbT0JKRUNUTU9ERV07XG4gICAgW0VOQ09ESU5HXTtcbiAgICBbQVNZTkNdO1xuICAgIFtERUNPREVSXTtcbiAgICBbRU9GXSA9IGZhbHNlO1xuICAgIFtFTUlUVEVEX0VORF0gPSBmYWxzZTtcbiAgICBbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgIFtDTE9TRURdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRVJST1JdID0gbnVsbDtcbiAgICBbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgW0RFU1RST1lFRF0gPSBmYWxzZTtcbiAgICBbU0lHTkFMXTtcbiAgICBbQUJPUlRFRF0gPSBmYWxzZTtcbiAgICBbREFUQUxJU1RFTkVSU10gPSAwO1xuICAgIFtESVNDQVJERURdID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSB3cml0dGVuXG4gICAgICovXG4gICAgd3JpdGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBjYW4gYmUgcmVhZFxuICAgICAqL1xuICAgIHJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBJZiBgUlR5cGVgIGlzIEJ1ZmZlciwgdGhlbiBvcHRpb25zIGRvIG5vdCBuZWVkIHRvIGJlIHByb3ZpZGVkLlxuICAgICAqIE90aGVyd2lzZSwgYW4gb3B0aW9ucyBvYmplY3QgbXVzdCBiZSBwcm92aWRlZCB0byBzcGVjaWZ5IGVpdGhlclxuICAgICAqIHtAbGluayBNaW5pcGFzcy5TaGFyZWRPcHRpb25zLm9iamVjdE1vZGV9IG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMuZW5jb2Rpbmd9LCBhcyBhcHByb3ByaWF0ZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoYXJnc1swXSB8fFxuICAgICAgICAgICAge30pO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAob3B0aW9ucy5vYmplY3RNb2RlICYmIHR5cGVvZiBvcHRpb25zLmVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RpbmcgYW5kIG9iamVjdE1vZGUgbWF5IG5vdCBiZSB1c2VkIHRvZ2V0aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0TW9kZU9wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpc1tFTkNPRElOR10gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRW5jb2RpbmdPcHRpb25zKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tBU1lOQ10gPSAhIW9wdGlvbnMuYXN5bmM7XG4gICAgICAgIHRoaXNbREVDT0RFUl0gPSB0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBuZXcgbm9kZV9zdHJpbmdfZGVjb2Rlcl8xLlN0cmluZ0RlY29kZXIodGhpc1tFTkNPRElOR10pXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIC8vQHRzLWlnbm9yZSAtIHByaXZhdGUgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmdcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1Z0V4cG9zZUJ1ZmZlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdidWZmZXInLCB7IGdldDogKCkgPT4gdGhpc1tCVUZGRVJdIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vQHRzLWlnbm9yZSAtIHByaXZhdGUgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmdcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1Z0V4cG9zZVBpcGVzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3BpcGVzJywgeyBnZXQ6ICgpID0+IHRoaXNbUElQRVNdIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBvcHRpb25zO1xuICAgICAgICBpZiAoc2lnbmFsKSB7XG4gICAgICAgICAgICB0aGlzW1NJR05BTF0gPSBzaWduYWw7XG4gICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzW0FCT1JUXSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gdGhpc1tBQk9SVF0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBkYXRhIHN0b3JlZCBpbiB0aGUgYnVmZmVyIHdhaXRpbmcgdG8gYmUgcmVhZC5cbiAgICAgKlxuICAgICAqIEZvciBCdWZmZXIgc3RyaW5ncywgdGhpcyB3aWxsIGJlIHRoZSB0b3RhbCBieXRlIGxlbmd0aC5cbiAgICAgKiBGb3Igc3RyaW5nIGVuY29kaW5nIHN0cmVhbXMsIHRoaXMgd2lsbCBiZSB0aGUgc3RyaW5nIGNoYXJhY3RlciBsZW5ndGgsXG4gICAgICogYWNjb3JkaW5nIHRvIEphdmFTY3JpcHQncyBgc3RyaW5nLmxlbmd0aGAgbG9naWMuXG4gICAgICogRm9yIG9iamVjdE1vZGUgc3RyZWFtcywgdGhpcyBpcyBhIGNvdW50IG9mIHRoZSBpdGVtcyB3YWl0aW5nIHRvIGJlXG4gICAgICogZW1pdHRlZC5cbiAgICAgKi9cbiAgICBnZXQgYnVmZmVyTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tCVUZGRVJMRU5HVEhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYEJ1ZmZlckVuY29kaW5nYCBjdXJyZW50bHkgaW4gdXNlLCBvciBgbnVsbGBcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0VOQ09ESU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIGlzIGEgcmVhZCBvbmx5IHByb3BlcnR5XG4gICAgICovXG4gICAgc2V0IGVuY29kaW5nKF9lbmMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGluZyBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBFbmNvZGluZyBtYXkgb25seSBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lXG4gICAgICovXG4gICAgc2V0RW5jb2RpbmcoX2VuYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kaW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcnVlIGlmIHRoaXMgaXMgYW4gb2JqZWN0TW9kZSBzdHJlYW1cbiAgICAgKi9cbiAgICBnZXQgb2JqZWN0TW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbT0JKRUNUTU9ERV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIC0gVGhpcyBpcyBhIHJlYWQtb25seSBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHNldCBvYmplY3RNb2RlKF9vbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29iamVjdE1vZGUgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhpcyBpcyBhbiBhc3luYyBzdHJlYW1cbiAgICAgKi9cbiAgICBnZXQgWydhc3luYyddKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tBU1lOQ107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIG1ha2UgdGhpcyBzdHJlYW0gYXN5bmMuXG4gICAgICpcbiAgICAgKiBPbmNlIHNldCwgaXQgY2Fubm90IGJlIHVuc2V0LCBhcyB0aGlzIHdvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGluY29ycmVjdFxuICAgICAqIGJlaGF2aW9yLiAgSWUsIGEgc3luYyBzdHJlYW0gY2FuIGJlIG1hZGUgYXN5bmMsIGJ1dCBhbiBhc3luYyBzdHJlYW1cbiAgICAgKiBjYW5ub3QgYmUgc2FmZWx5IG1hZGUgc3luYy5cbiAgICAgKi9cbiAgICBzZXQgWydhc3luYyddKGEpIHtcbiAgICAgICAgdGhpc1tBU1lOQ10gPSB0aGlzW0FTWU5DXSB8fCAhIWE7XG4gICAgfVxuICAgIC8vIGRyb3AgZXZlcnl0aGluZyBhbmQgZ2V0IG91dCBvZiB0aGUgZmxvdyBjb21wbGV0ZWx5XG4gICAgW0FCT1JUXSgpIHtcbiAgICAgICAgdGhpc1tBQk9SVEVEXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgnYWJvcnQnLCB0aGlzW1NJR05BTF0/LnJlYXNvbik7XG4gICAgICAgIHRoaXMuZGVzdHJveSh0aGlzW1NJR05BTF0/LnJlYXNvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBhYm9ydGVkLlxuICAgICAqL1xuICAgIGdldCBhYm9ydGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tBQk9SVEVEXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTm8tb3Agc2V0dGVyLiBTdHJlYW0gYWJvcnRlZCBzdGF0dXMgaXMgc2V0IHZpYSB0aGUgQWJvcnRTaWduYWwgcHJvdmlkZWRcbiAgICAgKiBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9ucy5cbiAgICAgKi9cbiAgICBzZXQgYWJvcnRlZChfKSB7IH1cbiAgICB3cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzW0FCT1JURURdKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cml0ZSBhZnRlciBlbmQnKTtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdDYW5ub3QgY2FsbCB3cml0ZSBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkJyksIHsgY29kZTogJ0VSUl9TVFJFQU1fREVTVFJPWUVEJyB9KSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGVuY29kaW5nO1xuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbmNvZGluZylcbiAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0ZjgnO1xuICAgICAgICBjb25zdCBmbiA9IHRoaXNbQVNZTkNdID8gZGVmZXIgOiBub2RlZmVyO1xuICAgICAgICAvLyBjb252ZXJ0IGFycmF5IGJ1ZmZlcnMgYW5kIHR5cGVkIGFycmF5IHZpZXdzIGludG8gYnVmZmVyc1xuICAgICAgICAvLyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGRvIHRoZSBvcHBvc2l0ZSFcbiAgICAgICAgLy8gbGVhdmUgc3RyaW5ncyBhbmQgYnVmZmVycyBhcy1pc1xuICAgICAgICAvLyBhbnl0aGluZyBpcyBvbmx5IGFsbG93ZWQgaWYgaW4gb2JqZWN0IG1vZGUsIHNvIHRocm93XG4gICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXlCdWZmZXJWaWV3KGNodW5rKSkge1xuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2luZ1xuICAgICAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmsuYnVmZmVyLCBjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlCdWZmZXJMaWtlKGNodW5rKSkge1xuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2luZ1xuICAgICAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm9uLWNvbnRpZ3VvdXMgZGF0YSB3cml0dGVuIHRvIG5vbi1vYmplY3RNb2RlIHN0cmVhbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBvYmplY3QgbW9kZSB1cCBmcm9udCwgc2luY2UgaXQncyBzaW1wbGVyXG4gICAgICAgIC8vIHRoaXMgeWllbGRzIGJldHRlciBwZXJmb3JtYW5jZSwgZmV3ZXIgY2hlY2tzIGxhdGVyLlxuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgLy8gbWF5YmUgaW1wb3NzaWJsZT9cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXNbRkxVU0hdKHRydWUpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIGlmICh0aGlzW0ZMT1dJTkddKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUlBVU0hdKGNodW5rKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICAgICAgaWYgKGNiKVxuICAgICAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgICAgICB9XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQgdGhlIGNodW5rIGlzIGEgYnVmZmVyIG9yIHN0cmluZ1xuICAgICAgICAvLyBkb24ndCBidWZmZXIgaXQgdXAgb3Igc2VuZCBpdCB0byB0aGUgZGVjb2RlclxuICAgICAgICBpZiAoIWNodW5rLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmFzdC1wYXRoIHdyaXRpbmcgc3RyaW5ncyBvZiBzYW1lIGVuY29kaW5nIHRvIGEgc3RyZWFtIHdpdGhcbiAgICAgICAgLy8gYW4gZW1wdHkgYnVmZmVyLCBza2lwcGluZyB0aGUgYnVmZmVyL2RlY29kZXIgZGFuY2VcbiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIC8vIHVubGVzcyBpdCBpcyBhIHN0cmluZyBhbHJlYWR5IHJlYWR5IGZvciB1cyB0byB1c2VcbiAgICAgICAgICAgICEoZW5jb2RpbmcgPT09IHRoaXNbRU5DT0RJTkddICYmICF0aGlzW0RFQ09ERVJdPy5sYXN0TmVlZCkpIHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2VcbiAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNodW5rKSAmJiB0aGlzW0VOQ09ESU5HXSkge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5nZVxuICAgICAgICAgICAgY2h1bmsgPSB0aGlzW0RFQ09ERVJdLndyaXRlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBmbHVzaGluZyBDQU4gcG90ZW50aWFsbHkgc3dpdGNoIHVzIGludG8gbm90LWZsb3dpbmcgbW9kZVxuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICB0aGlzW0ZMVVNIXSh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSUFVTSF0oY2h1bmspO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICBmbihjYik7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb3ctbGV2ZWwgZXhwbGljaXQgcmVhZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBJbiBvYmplY3RNb2RlLCB0aGUgYXJndW1lbnQgaXMgaWdub3JlZCwgYW5kIG9uZSBpdGVtIGlzIHJldHVybmVkIGlmXG4gICAgICogYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogYG5gIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgKG9yIGluIHRoZSBjYXNlIG9mIGVuY29kaW5nIHN0cmVhbXMsXG4gICAgICogY2hhcmFjdGVycykgdG8gY29uc3VtZS4gSWYgYG5gIGlzIG5vdCBwcm92aWRlZCwgdGhlbiB0aGUgZW50aXJlIGJ1ZmZlclxuICAgICAqIGlzIHJldHVybmVkLCBvciBgbnVsbGAgaXMgcmV0dXJuZWQgaWYgbm8gZGF0YSBpcyBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBJZiBgbmAgaXMgZ3JlYXRlciB0aGF0IHRoZSBhbW91bnQgb2YgZGF0YSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyLFxuICAgICAqIHRoZW4gYG51bGxgIGlzIHJldHVybmVkLlxuICAgICAqL1xuICAgIHJlYWQobikge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdID09PSAwIHx8XG4gICAgICAgICAgICBuID09PSAwIHx8XG4gICAgICAgICAgICAobiAmJiBuID4gdGhpc1tCVUZGRVJMRU5HVEhdKSkge1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgbiA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUl0ubGVuZ3RoID4gMSAmJiAhdGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgLy8gbm90IG9iamVjdCBtb2RlLCBzbyBpZiB3ZSBoYXZlIGFuIGVuY29kaW5nLCB0aGVuIFJUeXBlIGlzIHN0cmluZ1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBtdXN0IGJlIEJ1ZmZlclxuICAgICAgICAgICAgdGhpc1tCVUZGRVJdID0gW1xuICAgICAgICAgICAgICAgICh0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXNbQlVGRkVSXS5qb2luKCcnKVxuICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5jb25jYXQodGhpc1tCVUZGRVJdLCB0aGlzW0JVRkZFUkxFTkdUSF0pKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gdGhpc1tSRUFEXShuIHx8IG51bGwsIHRoaXNbQlVGRkVSXVswXSk7XG4gICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIFtSRUFEXShuLCBjaHVuaykge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSU0hJRlRdKCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYyA9IGNodW5rO1xuICAgICAgICAgICAgaWYgKG4gPT09IGMubGVuZ3RoIHx8IG4gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJTSElGVF0oKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSXVswXSA9IGMuc2xpY2Uobik7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBjLnNsaWNlKDAsIG4pO1xuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSAtPSBuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJdWzBdID0gYy5zdWJhcnJheShuKTtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGMuc3ViYXJyYXkoMCwgbik7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IG47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICBpZiAoIXRoaXNbQlVGRkVSXS5sZW5ndGggJiYgIXRoaXNbRU9GXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgICAgICAgcmV0dXJuIGNodW5rO1xuICAgIH1cbiAgICBlbmQoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGNodW5rO1xuICAgICAgICAgICAgY2h1bmsgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2IgPSBlbmNvZGluZztcbiAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0ZjgnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaHVuayAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy53cml0ZShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIGNiKTtcbiAgICAgICAgdGhpc1tFT0ZdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IHdyaXR0ZW4gYW55dGhpbmcsIHRoZW4gZ28gYWhlYWQgYW5kIGVtaXQsXG4gICAgICAgIC8vIGV2ZW4gaWYgd2UncmUgbm90IHJlYWRpbmcuXG4gICAgICAgIC8vIHdlJ2xsIHJlLWVtaXQgaWYgYSBuZXcgJ2VuZCcgbGlzdGVuZXIgaXMgYWRkZWQgYW55d2F5LlxuICAgICAgICAvLyBUaGlzIG1ha2VzIE1QIG1vcmUgc3VpdGFibGUgdG8gd3JpdGUtb25seSB1c2UgY2FzZXMuXG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddIHx8ICF0aGlzW1BBVVNFRF0pXG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZG9uJ3QgbGV0IHRoZSBpbnRlcm5hbCByZXN1bWUgYmUgb3ZlcndyaXR0ZW5cbiAgICBbUkVTVU1FXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzW0RBVEFMSVNURU5FUlNdICYmICF0aGlzW1BJUEVTXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tQQVVTRURdID0gZmFsc2U7XG4gICAgICAgIHRoaXNbRkxPV0lOR10gPSB0cnVlO1xuICAgICAgICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJdLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXNbRkxVU0hdKCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzdW1lIHRoZSBzdHJlYW0gaWYgaXQgaXMgY3VycmVudGx5IGluIGEgcGF1c2VkIHN0YXRlXG4gICAgICpcbiAgICAgKiBJZiBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMgb3IgYGRhdGFgIGV2ZW50IGxpc3RlbmVycyxcbiAgICAgKiB0aGlzIHdpbGwgcGxhY2UgdGhlIHN0cmVhbSBpbiBhIFwiZGlzY2FyZGVkXCIgc3RhdGUsIHdoZXJlIGFsbCBkYXRhIHdpbGxcbiAgICAgKiBiZSB0aHJvd24gYXdheS4gVGhlIGRpc2NhcmRlZCBzdGF0ZSBpcyByZW1vdmVkIGlmIGEgcGlwZSBkZXN0aW5hdGlvbiBvclxuICAgICAqIGRhdGEgaGFuZGxlciBpcyBhZGRlZCwgaWYgcGF1c2UoKSBpcyBjYWxsZWQsIG9yIGlmIGFueSBzeW5jaHJvbm91cyBvclxuICAgICAqIGFzeW5jaHJvbm91cyBpdGVyYXRpb24gaXMgc3RhcnRlZC5cbiAgICAgKi9cbiAgICByZXN1bWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW1JFU1VNRV0oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGF1c2UgdGhlIHN0cmVhbVxuICAgICAqL1xuICAgIHBhdXNlKCkge1xuICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgIHRoaXNbUEFVU0VEXSA9IHRydWU7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaGFzIGJlZW4gZm9yY2libHkgZGVzdHJveWVkXG4gICAgICovXG4gICAgZ2V0IGRlc3Ryb3llZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbREVTVFJPWUVEXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGlzIGN1cnJlbnRseSBpbiBhIGZsb3dpbmcgc3RhdGUsIG1lYW5pbmcgdGhhdFxuICAgICAqIGFueSB3cml0ZXMgd2lsbCBiZSBpbW1lZGlhdGVseSBlbWl0dGVkLlxuICAgICAqL1xuICAgIGdldCBmbG93aW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGlzIGN1cnJlbnRseSBpbiBhIHBhdXNlZCBzdGF0ZVxuICAgICAqL1xuICAgIGdldCBwYXVzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW1BBVVNFRF07XG4gICAgfVxuICAgIFtCVUZGRVJQVVNIXShjaHVuaykge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSArPSAxO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICB0aGlzW0JVRkZFUl0ucHVzaChjaHVuayk7XG4gICAgfVxuICAgIFtCVUZGRVJTSElGVF0oKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSAtPSB0aGlzW0JVRkZFUl1bMF0ubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpc1tCVUZGRVJdLnNoaWZ0KCk7XG4gICAgfVxuICAgIFtGTFVTSF0obm9EcmFpbiA9IGZhbHNlKSB7XG4gICAgICAgIGRvIHsgfSB3aGlsZSAodGhpc1tGTFVTSENIVU5LXSh0aGlzW0JVRkZFUlNISUZUXSgpKSAmJlxuICAgICAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCk7XG4gICAgICAgIGlmICghbm9EcmFpbiAmJiAhdGhpc1tCVUZGRVJdLmxlbmd0aCAmJiAhdGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgIH1cbiAgICBbRkxVU0hDSFVOS10oY2h1bmspIHtcbiAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGlwZSBhbGwgZGF0YSBlbWl0dGVkIGJ5IHRoaXMgc3RyZWFtIGludG8gdGhlIGRlc3RpbmF0aW9uIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogVHJpZ2dlcnMgdGhlIGZsb3cgb2YgZGF0YS5cbiAgICAgKi9cbiAgICBwaXBlKGRlc3QsIG9wdHMpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZW5kZWQgPSB0aGlzW0VNSVRURURfRU5EXTtcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIGlmIChkZXN0ID09PSBwcm9jLnN0ZG91dCB8fCBkZXN0ID09PSBwcm9jLnN0ZGVycilcbiAgICAgICAgICAgIG9wdHMuZW5kID0gZmFsc2U7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9wdHMuZW5kID0gb3B0cy5lbmQgIT09IGZhbHNlO1xuICAgICAgICBvcHRzLnByb3h5RXJyb3JzID0gISFvcHRzLnByb3h5RXJyb3JzO1xuICAgICAgICAvLyBwaXBpbmcgYW4gZW5kZWQgc3RyZWFtIGVuZHMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5lbmQpXG4gICAgICAgICAgICAgICAgZGVzdC5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFwiYXNcIiBoZXJlIGp1c3QgaWdub3JlcyB0aGUgV1R5cGUsIHdoaWNoIHBpcGVzIGRvbid0IGNhcmUgYWJvdXQsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGV5J3JlIG9ubHkgY29uc3VtaW5nIGZyb20gdXMsIGFuZCB3cml0aW5nIHRvIHRoZSBkZXN0XG4gICAgICAgICAgICB0aGlzW1BJUEVTXS5wdXNoKCFvcHRzLnByb3h5RXJyb3JzXG4gICAgICAgICAgICAgICAgPyBuZXcgUGlwZSh0aGlzLCBkZXN0LCBvcHRzKVxuICAgICAgICAgICAgICAgIDogbmV3IFBpcGVQcm94eUVycm9ycyh0aGlzLCBkZXN0LCBvcHRzKSk7XG4gICAgICAgICAgICBpZiAodGhpc1tBU1lOQ10pXG4gICAgICAgICAgICAgICAgZGVmZXIoKCkgPT4gdGhpc1tSRVNVTUVdKCkpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbUkVTVU1FXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdWxseSB1bmhvb2sgYSBwaXBlZCBkZXN0aW5hdGlvbiBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZGVzdGluYXRpb24gc3RyZWFtIHdhcyB0aGUgb25seSBjb25zdW1lciBvZiB0aGlzIHN0cmVhbSAoaWUsXG4gICAgICogdGhlcmUgYXJlIG5vIG90aGVyIHBpcGVkIGRlc3RpbmF0aW9ucyBvciBgJ2RhdGEnYCBldmVudCBsaXN0ZW5lcnMpXG4gICAgICogdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICovXG4gICAgdW5waXBlKGRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXNbUElQRVNdLmZpbmQocCA9PiBwLmRlc3QgPT09IGRlc3QpO1xuICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgaWYgKHRoaXNbUElQRVNdLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbREFUQUxJU1RFTkVSU10gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW1BJUEVTXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbUElQRVNdLnNwbGljZSh0aGlzW1BJUEVTXS5pbmRleE9mKHApLCAxKTtcbiAgICAgICAgICAgIHAudW5waXBlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBNaW5pcGFzcyNvbn1cbiAgICAgKi9cbiAgICBhZGRMaXN0ZW5lcihldiwgaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vbihldiwgaGFuZGxlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5vbmAsIHdpdGggdGhlIGZvbGxvd2luZ1xuICAgICAqIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRvIHByZXZlbnQgZGF0YSBsb3NzIGFuZCB1bm5lY2Vzc2FyeSBoYW5nczpcbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGEgJ2RhdGEnIGV2ZW50IGhhbmRsZXIgd2lsbCB0cmlnZ2VyIHRoZSBmbG93IG9mIGRhdGFcbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGEgJ3JlYWRhYmxlJyBldmVudCBoYW5kbGVyIHdoZW4gdGhlcmUgaXMgZGF0YSB3YWl0aW5nIHRvIGJlIHJlYWRcbiAgICAgKiAgIHdpbGwgY2F1c2UgJ3JlYWRhYmxlJyB0byBiZSBlbWl0dGVkIGltbWVkaWF0ZWx5LlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYW4gJ2VuZGlzaCcgZXZlbnQgaGFuZGxlciAoJ2VuZCcsICdmaW5pc2gnLCBldGMuKSB3aGljaCBoYXNcbiAgICAgKiAgIGFscmVhZHkgcGFzc2VkIHdpbGwgY2F1c2UgdGhlIGV2ZW50IHRvIGJlIGVtaXR0ZWQgaW1tZWRpYXRlbHkgYW5kIGFsbFxuICAgICAqICAgaGFuZGxlcnMgcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGFuICdlcnJvcicgZXZlbnQgaGFuZGxlciBhZnRlciBhbiBlcnJvciBoYXMgYmVlbiBlbWl0dGVkIHdpbGxcbiAgICAgKiAgIGNhdXNlIHRoZSBldmVudCB0byBiZSByZS1lbWl0dGVkIGltbWVkaWF0ZWx5IHdpdGggdGhlIGVycm9yIHByZXZpb3VzbHlcbiAgICAgKiAgIHJhaXNlZC5cbiAgICAgKi9cbiAgICBvbihldiwgaGFuZGxlcikge1xuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5vbihldiwgaGFuZGxlcik7XG4gICAgICAgIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXNbREFUQUxJU1RFTkVSU10rKztcbiAgICAgICAgICAgIGlmICghdGhpc1tQSVBFU10ubGVuZ3RoICYmICF0aGlzW0ZMT1dJTkddKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tSRVNVTUVdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScgJiYgdGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKSB7XG4gICAgICAgICAgICBzdXBlci5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRW5kaXNoKGV2KSAmJiB0aGlzW0VNSVRURURfRU5EXSkge1xuICAgICAgICAgICAgc3VwZXIuZW1pdChldik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlcnJvcicgJiYgdGhpc1tFTUlUVEVEX0VSUk9SXSkge1xuICAgICAgICAgICAgY29uc3QgaCA9IGhhbmRsZXI7XG4gICAgICAgICAgICBpZiAodGhpc1tBU1lOQ10pXG4gICAgICAgICAgICAgICAgZGVmZXIoKCkgPT4gaC5jYWxsKHRoaXMsIHRoaXNbRU1JVFRFRF9FUlJPUl0pKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBoLmNhbGwodGhpcywgdGhpc1tFTUlUVEVEX0VSUk9SXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBNaW5pcGFzcyNvZmZ9XG4gICAgICovXG4gICAgcmVtb3ZlTGlzdGVuZXIoZXYsIGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2ZmKGV2LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLm9mZmBcbiAgICAgKlxuICAgICAqIElmIGEgJ2RhdGEnIGV2ZW50IGhhbmRsZXIgaXMgcmVtb3ZlZCwgYW5kIGl0IHdhcyB0aGUgbGFzdCBjb25zdW1lclxuICAgICAqIChpZSwgdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zIG9yIG90aGVyICdkYXRhJyBldmVudCBsaXN0ZW5lcnMpLFxuICAgICAqIHRoZW4gdGhlIGZsb3cgb2YgZGF0YSB3aWxsIHN0b3AgdW50aWwgdGhlcmUgaXMgYW5vdGhlciBjb25zdW1lciBvclxuICAgICAqIHtAbGluayBNaW5pcGFzcyNyZXN1bWV9IGlzIGV4cGxpY2l0bHkgY2FsbGVkLlxuICAgICAqL1xuICAgIG9mZihldiwgaGFuZGxlcikge1xuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5vZmYoZXYsIGhhbmRsZXIpO1xuICAgICAgICAvLyBpZiB3ZSBwcmV2aW91c2x5IGhhZCBsaXN0ZW5lcnMsIGFuZCBub3cgd2UgZG9uJ3QsIGFuZCB3ZSBkb24ndFxuICAgICAgICAvLyBoYXZlIGFueSBwaXBlcywgdGhlbiBzdG9wIHRoZSBmbG93LCB1bmxlc3MgaXQncyBiZWVuIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gcHV0IGluIGEgZGlzY2FyZGVkIGZsb3dpbmcgc3RhdGUgdmlhIHN0cmVhbS5yZXN1bWUoKS5cbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRoaXNbREFUQUxJU1RFTkVSU10gPSB0aGlzLmxpc3RlbmVycygnZGF0YScpLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzW0RBVEFMSVNURU5FUlNdID09PSAwICYmXG4gICAgICAgICAgICAgICAgIXRoaXNbRElTQ0FSREVEXSAmJlxuICAgICAgICAgICAgICAgICF0aGlzW1BJUEVTXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVyc2BcbiAgICAgKlxuICAgICAqIElmIGFsbCAnZGF0YScgZXZlbnQgaGFuZGxlcnMgYXJlIHJlbW92ZWQsIGFuZCB0aGV5IHdlcmUgdGhlIGxhc3QgY29uc3VtZXJcbiAgICAgKiAoaWUsIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyksIHRoZW4gdGhlIGZsb3cgb2YgZGF0YSB3aWxsIHN0b3BcbiAgICAgKiB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yIHtAbGluayBNaW5pcGFzcyNyZXN1bWV9IGlzIGV4cGxpY2l0bHlcbiAgICAgKiBjYWxsZWQuXG4gICAgICovXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzKGV2KSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXNbREFUQUxJU1RFTkVSU10gPSAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzW0RJU0NBUkRFRF0gJiYgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSAnZW5kJyBldmVudCBoYXMgYmVlbiBlbWl0dGVkXG4gICAgICovXG4gICAgZ2V0IGVtaXR0ZWRFbmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0VNSVRURURfRU5EXTtcbiAgICB9XG4gICAgW01BWUJFX0VNSVRfRU5EXSgpIHtcbiAgICAgICAgaWYgKCF0aGlzW0VNSVRUSU5HX0VORF0gJiZcbiAgICAgICAgICAgICF0aGlzW0VNSVRURURfRU5EXSAmJlxuICAgICAgICAgICAgIXRoaXNbREVTVFJPWUVEXSAmJlxuICAgICAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpc1tFT0ZdKSB7XG4gICAgICAgICAgICB0aGlzW0VNSVRUSU5HX0VORF0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncHJlZmluaXNoJyk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2ZpbmlzaCcpO1xuICAgICAgICAgICAgaWYgKHRoaXNbQ0xPU0VEXSlcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgICB0aGlzW0VNSVRUSU5HX0VORF0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIuZW1pdGAsIHdpdGggdGhlIGZvbGxvd2luZ1xuICAgICAqIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRvIHByZXZlbnQgZGF0YSBsb3NzIGFuZCB1bm5lY2Vzc2FyeSBoYW5nczpcbiAgICAgKlxuICAgICAqIElmIHRoZSBzdHJlYW0gaGFzIGJlZW4gZGVzdHJveWVkLCBhbmQgdGhlIGV2ZW50IGlzIHNvbWV0aGluZyBvdGhlclxuICAgICAqIHRoYW4gJ2Nsb3NlJyBvciAnZXJyb3InLCB0aGVuIGBmYWxzZWAgaXMgcmV0dXJuZWQgYW5kIG5vIGhhbmRsZXJzXG4gICAgICogYXJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZW5kJywgYW5kIGhhcyBhbHJlYWR5IGJlZW4gZW1pdHRlZCwgdGhlbiB0aGUgZXZlbnRcbiAgICAgKiBpcyBpZ25vcmVkLiBJZiB0aGUgc3RyZWFtIGlzIGluIGEgcGF1c2VkIG9yIG5vbi1mbG93aW5nIHN0YXRlLCB0aGVuXG4gICAgICogdGhlIGV2ZW50IHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgZGF0YSBmbG93IHJlc3VtZXMuIElmIHRoZSBzdHJlYW0gaXNcbiAgICAgKiBhc3luYywgdGhlbiBoYW5kbGVycyB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgbmV4dCB0aWNrIHJhdGhlciB0aGFuXG4gICAgICogaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2Nsb3NlJywgYW5kICdlbmQnIGhhcyBub3QgeWV0IGJlZW4gZW1pdHRlZCwgdGhlblxuICAgICAqIHRoZSBldmVudCB3aWxsIGJlIGRlZmVycmVkIHVudGlsIGFmdGVyICdlbmQnIGlzIGVtaXR0ZWQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2Vycm9yJywgYW5kIGFuIEFib3J0U2lnbmFsIHdhcyBwcm92aWRlZCBmb3IgdGhlIHN0cmVhbSxcbiAgICAgKiBhbmQgdGhlcmUgYXJlIG5vIGxpc3RlbmVycywgdGhlbiB0aGUgZXZlbnQgaXMgaWdub3JlZCwgbWF0Y2hpbmcgdGhlXG4gICAgICogYmVoYXZpb3Igb2Ygbm9kZSBjb3JlIHN0cmVhbXMgaW4gdGhlIHByZXNlbnNlIG9mIGFuIEFib3J0U2lnbmFsLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdmaW5pc2gnIG9yICdwcmVmaW5pc2gnLCB0aGVuIGFsbCBsaXN0ZW5lcnMgd2lsbCBiZVxuICAgICAqIHJlbW92ZWQgYWZ0ZXIgZW1pdHRpbmcgdGhlIGV2ZW50LCB0byBwcmV2ZW50IGRvdWJsZS1maXJpbmcuXG4gICAgICovXG4gICAgZW1pdChldiwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJnc1swXTtcbiAgICAgICAgLy8gZXJyb3IgYW5kIGNsb3NlIGFyZSBvbmx5IGV2ZW50cyBhbGxvd2VkIGFmdGVyIGNhbGxpbmcgZGVzdHJveSgpXG4gICAgICAgIGlmIChldiAhPT0gJ2Vycm9yJyAmJlxuICAgICAgICAgICAgZXYgIT09ICdjbG9zZScgJiZcbiAgICAgICAgICAgIGV2ICE9PSBERVNUUk9ZRUQgJiZcbiAgICAgICAgICAgIHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpc1tPQkpFQ1RNT0RFXSAmJiAhZGF0YVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IHRoaXNbQVNZTkNdXG4gICAgICAgICAgICAgICAgICAgID8gKGRlZmVyKCgpID0+IHRoaXNbRU1JVERBVEFdKGRhdGEpKSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzW0VNSVREQVRBXShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW0VNSVRFTkRdKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdjbG9zZScpIHtcbiAgICAgICAgICAgIHRoaXNbQ0xPU0VEXSA9IHRydWU7XG4gICAgICAgICAgICAvLyBkb24ndCBlbWl0IGNsb3NlIGJlZm9yZSAnZW5kJyBhbmQgJ2ZpbmlzaCdcbiAgICAgICAgICAgIGlmICghdGhpc1tFTUlUVEVEX0VORF0gJiYgIXRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KCdjbG9zZScpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Nsb3NlJyk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICB0aGlzW0VNSVRURURfRVJST1JdID0gZGF0YTtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoRVJST1IsIGRhdGEpO1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gIXRoaXNbU0lHTkFMXSB8fCB0aGlzLmxpc3RlbmVycygnZXJyb3InKS5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IHN1cGVyLmVtaXQoJ2Vycm9yJywgZGF0YSlcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdyZXN1bWUnKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KCdyZXN1bWUnKTtcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZmluaXNoJyB8fCBldiA9PT0gJ3ByZWZpbmlzaCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoZXYpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoZXYpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb21lIG90aGVyIHVua25vd24gZXZlbnRcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdChldiwgLi4uYXJncyk7XG4gICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIFtFTUlUREFUQV0oZGF0YSkge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgIGlmIChwLmRlc3Qud3JpdGUoZGF0YSkgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB0aGlzW0RJU0NBUkRFRF0gPyBmYWxzZSA6IHN1cGVyLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW0VNSVRFTkRdKCkge1xuICAgICAgICBpZiAodGhpc1tFTUlUVEVEX0VORF0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXNbRU1JVFRFRF9FTkRdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpc1tBU1lOQ11cbiAgICAgICAgICAgID8gKGRlZmVyKCgpID0+IHRoaXNbRU1JVEVORDJdKCkpLCB0cnVlKVxuICAgICAgICAgICAgOiB0aGlzW0VNSVRFTkQyXSgpO1xuICAgIH1cbiAgICBbRU1JVEVORDJdKCkge1xuICAgICAgICBpZiAodGhpc1tERUNPREVSXSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXNbREVDT0RFUl0uZW5kKCk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgICAgICAgICBwLmRlc3Qud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpc1tESVNDQVJERURdKVxuICAgICAgICAgICAgICAgICAgICBzdXBlci5lbWl0KCdkYXRhJywgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICBwLmVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ2VuZCcpO1xuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygnZW5kJyk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiBhbGwgZW1pdHRlZCBkYXRhIG9uY2VcbiAgICAgKiB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICovXG4gICAgYXN5bmMgY29sbGVjdCgpIHtcbiAgICAgICAgY29uc3QgYnVmID0gT2JqZWN0LmFzc2lnbihbXSwge1xuICAgICAgICAgICAgZGF0YUxlbmd0aDogMCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIGJ1Zi5kYXRhTGVuZ3RoID0gMDtcbiAgICAgICAgLy8gc2V0IHRoZSBwcm9taXNlIGZpcnN0LCBpbiBjYXNlIGFuIGVycm9yIGlzIHJhaXNlZFxuICAgICAgICAvLyBieSB0cmlnZ2VyaW5nIHRoZSBmbG93IGhlcmUuXG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnByb21pc2UoKTtcbiAgICAgICAgdGhpcy5vbignZGF0YScsIGMgPT4ge1xuICAgICAgICAgICAgYnVmLnB1c2goYyk7XG4gICAgICAgICAgICBpZiAoIXRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICAgICAgYnVmLmRhdGFMZW5ndGggKz0gYy5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBwO1xuICAgICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIGVtaXR0ZWQgZGF0YVxuICAgICAqIG9uY2UgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqXG4gICAgICogTm90IGFsbG93ZWQgb24gb2JqZWN0TW9kZSBzdHJlYW1zLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbmNhdCgpIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNvbmNhdCBpbiBvYmplY3RNb2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmID0gYXdhaXQgdGhpcy5jb2xsZWN0KCk7XG4gICAgICAgIHJldHVybiAodGhpc1tFTkNPRElOR11cbiAgICAgICAgICAgID8gYnVmLmpvaW4oJycpXG4gICAgICAgICAgICA6IEJ1ZmZlci5jb25jYXQoYnVmLCBidWYuZGF0YUxlbmd0aCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSB2b2lkIFByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKi9cbiAgICBhc3luYyBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbihERVNUUk9ZRUQsICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ3N0cmVhbSBkZXN0cm95ZWQnKSkpO1xuICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlciA9PiByZWplY3QoZXIpKTtcbiAgICAgICAgICAgIHRoaXMub24oJ2VuZCcsICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXMgYGZvciBhd2FpdCBvZmAgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyB3aWxsIGNvbnRpbnVlIGVtaXR0aW5nIGFsbCBjaHVua3MgdW50aWwgdGhlIHN0cmVhbSB0ZXJtaW5hdGVzLlxuICAgICAqL1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIHNldCB0aGlzIHVwIGZyb250LCBpbiBjYXNlIHRoZSBjb25zdW1lciBkb2Vzbid0IGNhbGwgbmV4dCgpXG4gICAgICAgIC8vIHJpZ2h0IGF3YXkuXG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzdG9wID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RvcHBlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICBpZiAocmVzICE9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJlcyB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AoKTtcbiAgICAgICAgICAgIGxldCByZXNvbHZlO1xuICAgICAgICAgICAgbGV0IHJlamVjdDtcbiAgICAgICAgICAgIGNvbnN0IG9uZXJyID0gKGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2RhdGEnLCBvbmRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZGF0YSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHZhbHVlLCBkb25lOiAhIXRoaXNbRU9GXSB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmVuZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZXJyb3InLCBvbmVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2RhdGEnLCBvbmRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25kZXN0cm95ID0gKCkgPT4gb25lcnIobmV3IEVycm9yKCdzdHJlYW0gZGVzdHJveWVkJykpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdCA9IHJlajtcbiAgICAgICAgICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZShERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2RhdGEnLCBvbmRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgdGhyb3c6IHN0b3AsXG4gICAgICAgICAgICByZXR1cm46IHN0b3AsXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMgYGZvciBvZmAgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGl0ZXJhdGlvbiB3aWxsIHRlcm1pbmF0ZSB3aGVuIHRoZSBpbnRlcm5hbCBidWZmZXIgcnVucyBvdXQsIGV2ZW5cbiAgICAgKiBpZiB0aGUgc3RyZWFtIGhhcyBub3QgeWV0IHRlcm1pbmF0ZWQuXG4gICAgICovXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIHNldCB0aGlzIHVwIGZyb250LCBpbiBjYXNlIHRoZSBjb25zdW1lciBkb2Vzbid0IGNhbGwgbmV4dCgpXG4gICAgICAgIC8vIHJpZ2h0IGF3YXkuXG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgICAgdGhpcy5vZmYoRVJST1IsIHN0b3ApO1xuICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBzdG9wKTtcbiAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBzdG9wKTtcbiAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBzdG9wKCkgOiB7IGRvbmU6IGZhbHNlLCB2YWx1ZSB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIHN0b3ApO1xuICAgICAgICB0aGlzLm9uY2UoRVJST1IsIHN0b3ApO1xuICAgICAgICB0aGlzLm9uY2UoREVTVFJPWUVELCBzdG9wKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBhIHN0cmVhbSwgcHJldmVudGluZyBpdCBmcm9tIGJlaW5nIHVzZWQgZm9yIGFueSBmdXJ0aGVyIHB1cnBvc2UuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgc3RyZWFtIGhhcyBhIGBjbG9zZSgpYCBtZXRob2QsIHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgb25cbiAgICAgKiBkZXN0cnVjdGlvbi5cbiAgICAgKlxuICAgICAqIEFmdGVyIGRlc3RydWN0aW9uLCBhbnkgYXR0ZW1wdCB0byB3cml0ZSBkYXRhLCByZWFkIGRhdGEsIG9yIGVtaXQgbW9zdFxuICAgICAqIGV2ZW50cyB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiBJZiBhbiBlcnJvciBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlbiBpdCB3aWxsIGJlIGVtaXR0ZWQgaW4gYW5cbiAgICAgKiAnZXJyb3InIGV2ZW50LlxuICAgICAqL1xuICAgIGRlc3Ryb3koZXIpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KERFU1RST1lFRCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzW0RFU1RST1lFRF0gPSB0cnVlO1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSB0cnVlO1xuICAgICAgICAvLyB0aHJvdyBhd2F5IGFsbCBidWZmZXJlZCBkYXRhLCBpdCdzIG5ldmVyIGNvbWluZyBvdXRcbiAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgICAgIGNvbnN0IHdjID0gdGhpcztcbiAgICAgICAgaWYgKHR5cGVvZiB3Yy5jbG9zZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgd2MuY2xvc2UoKTtcbiAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgLy8gaWYgbm8gZXJyb3IgdG8gZW1pdCwgc3RpbGwgcmVqZWN0IHBlbmRpbmcgcHJvbWlzZXNcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KERFU1RST1lFRCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIGlzU3RyZWFtfVxuICAgICAqXG4gICAgICogRm9ybWVyIGV4cG9ydCBsb2NhdGlvbiwgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQgaXNTdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLmlzU3RyZWFtO1xuICAgIH1cbn1cbmV4cG9ydHMuTWluaXBhc3MgPSBNaW5pcGFzcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGF0aFNjdXJyeSA9IGV4cG9ydHMuUGF0aCA9IGV4cG9ydHMuUGF0aFNjdXJyeURhcndpbiA9IGV4cG9ydHMuUGF0aFNjdXJyeVBvc2l4ID0gZXhwb3J0cy5QYXRoU2N1cnJ5V2luMzIgPSBleHBvcnRzLlBhdGhTY3VycnlCYXNlID0gZXhwb3J0cy5QYXRoUG9zaXggPSBleHBvcnRzLlBhdGhXaW4zMiA9IGV4cG9ydHMuUGF0aEJhc2UgPSBleHBvcnRzLkNoaWxkcmVuQ2FjaGUgPSBleHBvcnRzLlJlc29sdmVDYWNoZSA9IHZvaWQgMDtcbmNvbnN0IGxydV9jYWNoZV8xID0gcmVxdWlyZShcImxydS1jYWNoZVwiKTtcbmNvbnN0IG5vZGVfcGF0aF8xID0gcmVxdWlyZShcIm5vZGU6cGF0aFwiKTtcbmNvbnN0IG5vZGVfdXJsXzEgPSByZXF1aXJlKFwibm9kZTp1cmxcIik7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgYWN0dWFsRlMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6ZnNcIikpO1xuY29uc3QgcmVhbHBhdGhTeW5jID0gZnNfMS5yZWFscGF0aFN5bmMubmF0aXZlO1xuLy8gVE9ETzogdGVzdCBwZXJmIG9mIGZzL3Byb21pc2VzIHJlYWxwYXRoIHZzIHJlYWxwYXRoQ0IsXG4vLyBzaW5jZSB0aGUgcHJvbWlzZXMgb25lIHVzZXMgcmVhbHBhdGgubmF0aXZlXG5jb25zdCBwcm9taXNlc18xID0gcmVxdWlyZShcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG5jb25zdCBtaW5pcGFzc18xID0gcmVxdWlyZShcIm1pbmlwYXNzXCIpO1xuY29uc3QgZGVmYXVsdEZTID0ge1xuICAgIGxzdGF0U3luYzogZnNfMS5sc3RhdFN5bmMsXG4gICAgcmVhZGRpcjogZnNfMS5yZWFkZGlyLFxuICAgIHJlYWRkaXJTeW5jOiBmc18xLnJlYWRkaXJTeW5jLFxuICAgIHJlYWRsaW5rU3luYzogZnNfMS5yZWFkbGlua1N5bmMsXG4gICAgcmVhbHBhdGhTeW5jLFxuICAgIHByb21pc2VzOiB7XG4gICAgICAgIGxzdGF0OiBwcm9taXNlc18xLmxzdGF0LFxuICAgICAgICByZWFkZGlyOiBwcm9taXNlc18xLnJlYWRkaXIsXG4gICAgICAgIHJlYWRsaW5rOiBwcm9taXNlc18xLnJlYWRsaW5rLFxuICAgICAgICByZWFscGF0aDogcHJvbWlzZXNfMS5yZWFscGF0aCxcbiAgICB9LFxufTtcbi8vIGlmIHRoZXkganVzdCBnYXZlIHVzIHJlcXVpcmUoJ2ZzJykgdGhlbiB1c2Ugb3VyIGRlZmF1bHRcbmNvbnN0IGZzRnJvbU9wdGlvbiA9IChmc09wdGlvbikgPT4gIWZzT3B0aW9uIHx8IGZzT3B0aW9uID09PSBkZWZhdWx0RlMgfHwgZnNPcHRpb24gPT09IGFjdHVhbEZTID9cbiAgICBkZWZhdWx0RlNcbiAgICA6IHtcbiAgICAgICAgLi4uZGVmYXVsdEZTLFxuICAgICAgICAuLi5mc09wdGlvbixcbiAgICAgICAgcHJvbWlzZXM6IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRGUy5wcm9taXNlcyxcbiAgICAgICAgICAgIC4uLihmc09wdGlvbi5wcm9taXNlcyB8fCB7fSksXG4gICAgICAgIH0sXG4gICAgfTtcbi8vIHR1cm4gc29tZXRoaW5nIGxpa2UgLy8/L2M6LyBpbnRvIGM6XFxcbmNvbnN0IHVuY0RyaXZlUmVnZXhwID0gL15cXFxcXFxcXFxcP1xcXFwoW2Etel06KVxcXFw/JC9pO1xuY29uc3QgdW5jVG9Ecml2ZSA9IChyb290UGF0aCkgPT4gcm9vdFBhdGgucmVwbGFjZSgvXFwvL2csICdcXFxcJykucmVwbGFjZSh1bmNEcml2ZVJlZ2V4cCwgJyQxXFxcXCcpO1xuLy8gd2luZG93cyBwYXRocyBhcmUgc2VwYXJhdGVkIGJ5IGVpdGhlciAvIG9yIFxcXG5jb25zdCBlaXRoZXJTZXAgPSAvW1xcXFxcXC9dLztcbmNvbnN0IFVOS05PV04gPSAwOyAvLyBtYXkgbm90IGV2ZW4gZXhpc3QsIGZvciBhbGwgd2Uga25vd1xuY29uc3QgSUZJRk8gPSAwYjAwMDE7XG5jb25zdCBJRkNIUiA9IDBiMDAxMDtcbmNvbnN0IElGRElSID0gMGIwMTAwO1xuY29uc3QgSUZCTEsgPSAwYjAxMTA7XG5jb25zdCBJRlJFRyA9IDBiMTAwMDtcbmNvbnN0IElGTE5LID0gMGIxMDEwO1xuY29uc3QgSUZTT0NLID0gMGIxMTAwO1xuY29uc3QgSUZNVCA9IDBiMTExMTtcbi8vIG1hc2sgdG8gdW5zZXQgbG93IDQgYml0c1xuY29uc3QgSUZNVF9VTktOT1dOID0gfklGTVQ7XG4vLyBzZXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGNhbGxpbmcgcmVhZGRpcigpIGFuZCBnZXR0aW5nIGVudHJpZXMuXG5jb25zdCBSRUFERElSX0NBTExFRCA9IDBiMDAwMF8wMDAxXzAwMDA7XG4vLyBzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGxzdGF0KClcbmNvbnN0IExTVEFUX0NBTExFRCA9IDBiMDAwMF8wMDEwXzAwMDA7XG4vLyBzZXQgaWYgYW4gZW50cnkgKG9yIG9uZSBvZiBpdHMgcGFyZW50cykgaXMgZGVmaW5pdGVseSBub3QgYSBkaXJcbmNvbnN0IEVOT1RESVIgPSAwYjAwMDBfMDEwMF8wMDAwO1xuLy8gc2V0IGlmIGFuIGVudHJ5IChvciBvbmUgb2YgaXRzIHBhcmVudHMpIGRvZXMgbm90IGV4aXN0XG4vLyAoY2FuIGFsc28gYmUgc2V0IG9uIGxzdGF0IGVycm9ycyBsaWtlIEVBQ0NFUyBvciBFTkFNRVRPT0xPTkcpXG5jb25zdCBFTk9FTlQgPSAwYjAwMDBfMTAwMF8wMDAwO1xuLy8gY2Fubm90IGhhdmUgY2hpbGQgZW50cmllcyAtLSBhbHNvIHZlcmlmeSAmSUZNVCBpcyBlaXRoZXIgSUZESVIgb3IgSUZMTktcbi8vIHNldCBpZiB3ZSBmYWlsIHRvIHJlYWRsaW5rXG5jb25zdCBFTk9SRUFETElOSyA9IDBiMDAwMV8wMDAwXzAwMDA7XG4vLyBzZXQgaWYgd2Uga25vdyByZWFscGF0aCgpIHdpbGwgZmFpbFxuY29uc3QgRU5PUkVBTFBBVEggPSAwYjAwMTBfMDAwMF8wMDAwO1xuY29uc3QgRU5PQ0hJTEQgPSBFTk9URElSIHwgRU5PRU5UIHwgRU5PUkVBTFBBVEg7XG5jb25zdCBUWVBFTUFTSyA9IDBiMDAxMV8xMTExXzExMTE7XG5jb25zdCBlbnRUb1R5cGUgPSAocykgPT4gcy5pc0ZpbGUoKSA/IElGUkVHXG4gICAgOiBzLmlzRGlyZWN0b3J5KCkgPyBJRkRJUlxuICAgICAgICA6IHMuaXNTeW1ib2xpY0xpbmsoKSA/IElGTE5LXG4gICAgICAgICAgICA6IHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSA/IElGQ0hSXG4gICAgICAgICAgICAgICAgOiBzLmlzQmxvY2tEZXZpY2UoKSA/IElGQkxLXG4gICAgICAgICAgICAgICAgICAgIDogcy5pc1NvY2tldCgpID8gSUZTT0NLXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHMuaXNGSUZPKCkgPyBJRklGT1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVU5LTk9XTjtcbi8vIG5vcm1hbGl6ZSB1bmljb2RlIHBhdGggbmFtZXNcbmNvbnN0IG5vcm1hbGl6ZUNhY2hlID0gbmV3IE1hcCgpO1xuY29uc3Qgbm9ybWFsaXplID0gKHMpID0+IHtcbiAgICBjb25zdCBjID0gbm9ybWFsaXplQ2FjaGUuZ2V0KHMpO1xuICAgIGlmIChjKVxuICAgICAgICByZXR1cm4gYztcbiAgICBjb25zdCBuID0gcy5ub3JtYWxpemUoJ05GS0QnKTtcbiAgICBub3JtYWxpemVDYWNoZS5zZXQocywgbik7XG4gICAgcmV0dXJuIG47XG59O1xuY29uc3Qgbm9ybWFsaXplTm9jYXNlQ2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBub3JtYWxpemVOb2Nhc2UgPSAocykgPT4ge1xuICAgIGNvbnN0IGMgPSBub3JtYWxpemVOb2Nhc2VDYWNoZS5nZXQocyk7XG4gICAgaWYgKGMpXG4gICAgICAgIHJldHVybiBjO1xuICAgIGNvbnN0IG4gPSBub3JtYWxpemUocy50b0xvd2VyQ2FzZSgpKTtcbiAgICBub3JtYWxpemVOb2Nhc2VDYWNoZS5zZXQocywgbik7XG4gICAgcmV0dXJuIG47XG59O1xuLyoqXG4gKiBBbiBMUlVDYWNoZSBmb3Igc3RvcmluZyByZXNvbHZlZCBwYXRoIHN0cmluZ3Mgb3IgUGF0aCBvYmplY3RzLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFJlc29sdmVDYWNoZSBleHRlbmRzIGxydV9jYWNoZV8xLkxSVUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoeyBtYXg6IDI1NiB9KTtcbiAgICB9XG59XG5leHBvcnRzLlJlc29sdmVDYWNoZSA9IFJlc29sdmVDYWNoZTtcbi8vIEluIG9yZGVyIHRvIHByZXZlbnQgYmxvd2luZyBvdXQgdGhlIGpzIGhlYXAgYnkgYWxsb2NhdGluZyBodW5kcmVkcyBvZlxuLy8gdGhvdXNhbmRzIG9mIFBhdGggZW50cmllcyB3aGVuIHdhbGtpbmcgZXh0cmVtZWx5IGxhcmdlIHRyZWVzLCB0aGUgXCJjaGlsZHJlblwiXG4vLyBpbiB0aGlzIHRyZWUgYXJlIHJlcHJlc2VudGVkIGJ5IHN0b3JpbmcgYW4gYXJyYXkgb2YgUGF0aCBlbnRyaWVzIGluIGFuXG4vLyBMUlVDYWNoZSwgaW5kZXhlZCBieSB0aGUgcGFyZW50LiAgQXQgYW55IHRpbWUsIFBhdGguY2hpbGRyZW4oKSBtYXkgcmV0dXJuIGFuXG4vLyBlbXB0eSBhcnJheSwgaW5kaWNhdGluZyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dCBhbnkgb2YgaXRzIGNoaWxkcmVuLCBhbmRcbi8vIHRodXMgaGFzIHRvIHJlYnVpbGQgdGhhdCBjYWNoZS4gIFRoaXMgaXMgZmluZSwgaXQganVzdCBtZWFucyB0aGF0IHdlIGRvbid0XG4vLyBiZW5lZml0IGFzIG11Y2ggZnJvbSBoYXZpbmcgdGhlIGNhY2hlZCBlbnRyaWVzLCBidXQgaHVnZSBkaXJlY3Rvcnkgd2Fsa3Ncbi8vIGRvbid0IGJsb3cgb3V0IHRoZSBzdGFjaywgYW5kIHNtYWxsZXIgb25lcyBhcmUgc3RpbGwgYXMgZmFzdCBhcyBwb3NzaWJsZS5cbi8vXG4vL0l0IGRvZXMgaW1wb3NlIHNvbWUgY29tcGxleGl0eSB3aGVuIGJ1aWxkaW5nIHVwIHRoZSByZWFkZGlyIGRhdGEsIGJlY2F1c2Ugd2Vcbi8vbmVlZCB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZHJlbiBhcnJheSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aC5cbi8qKlxuICogYW4gTFJVQ2FjaGUgZm9yIHN0b3JpbmcgY2hpbGQgZW50cmllcy5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBDaGlsZHJlbkNhY2hlIGV4dGVuZHMgbHJ1X2NhY2hlXzEuTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKG1heFNpemUgPSAxNiAqIDEwMjQpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgICAgIC8vIHBhcmVudCArIGNoaWxkcmVuXG4gICAgICAgICAgICBzaXplQ2FsY3VsYXRpb246IGEgPT4gYS5sZW5ndGggKyAxLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkNoaWxkcmVuQ2FjaGUgPSBDaGlsZHJlbkNhY2hlO1xuY29uc3Qgc2V0QXNDd2QgPSBTeW1ib2woJ1BhdGhTY3Vycnkgc2V0QXNDd2QnKTtcbi8qKlxuICogUGF0aCBvYmplY3RzIGFyZSBzb3J0IG9mIGxpa2UgYSBzdXBlci1wb3dlcmVkXG4gKiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9mcy5odG1sI2NsYXNzLWZzZGlyZW50IGZzLkRpcmVudH1cbiAqXG4gKiBFYWNoIG9uZSByZXByZXNlbnRzIGEgc2luZ2xlIGZpbGVzeXN0ZW0gZW50cnkgb24gZGlzaywgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAqIGV4aXN0LiBJdCBpbmNsdWRlcyBtZXRob2RzIGZvciByZWFkaW5nIHZhcmlvdXMgdHlwZXMgb2YgaW5mb3JtYXRpb24gdmlhXG4gKiBsc3RhdCwgcmVhZGxpbmssIGFuZCByZWFkZGlyLCBhbmQgY2FjaGVzIGFsbCBpbmZvcm1hdGlvbiB0byB0aGUgZ3JlYXRlc3RcbiAqIGRlZ3JlZSBwb3NzaWJsZS5cbiAqXG4gKiBOb3RlIHRoYXQgZnMgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIG5vcm1hbGx5IHRocm93IHdpbGwgaW5zdGVhZCByZXR1cm4gYW5cbiAqIFwiZW1wdHlcIiB2YWx1ZS4gVGhpcyBpcyBpbiBvcmRlciB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBvdmVyaGVhZCBmcm9tIGVycm9yXG4gKiBzdGFjayB0cmFjZXMuXG4gKi9cbmNsYXNzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiB0aGUgYmFzZW5hbWUgb2YgdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiAqKkltcG9ydGFudCoqOiAqYWx3YXlzKiB0ZXN0IHRoZSBwYXRoIG5hbWUgYWdhaW5zdCBhbnkgdGVzdCBzdHJpbmdcbiAgICAgKiB1c2luZ3RoZSB7QGxpbmsgaXNOYW1lZH0gbWV0aG9kLCBhbmQgbm90IGJ5IGRpcmVjdGx5IGNvbXBhcmluZyB0aGlzXG4gICAgICogc3RyaW5nLiBPdGhlcndpc2UsIHVuaWNvZGUgcGF0aCBzdHJpbmdzIHRoYXQgdGhlIHN5c3RlbSBzZWVzIGFzIGlkZW50aWNhbFxuICAgICAqIHdpbGwgbm90IGJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdGhlIHNhbWUgcGF0aCwgbGVhZGluZyB0byBpbmNvcnJlY3RcbiAgICAgKiBiZWhhdmlvciBhbmQgcG9zc2libGUgc2VjdXJpdHkgaXNzdWVzLlxuICAgICAqL1xuICAgIG5hbWU7XG4gICAgLyoqXG4gICAgICogdGhlIFBhdGggZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgcGF0aCByb290LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcm9vdDtcbiAgICAvKipcbiAgICAgKiBBbGwgcm9vdHMgZm91bmQgd2l0aGluIHRoZSBjdXJyZW50IFBhdGhTY3VycnkgZmFtaWx5XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICByb290cztcbiAgICAvKipcbiAgICAgKiBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHBhdGgsIG9yIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiByb290IGVudHJpZXNcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcmVudDtcbiAgICAvKipcbiAgICAgKiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBwYXRocyBhcmUgY29tcGFyZWQgY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbm9jYXNlO1xuICAgIC8qKlxuICAgICAqIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMgcGF0aCBpcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAqIG9mIHRoZSBQYXRoU2N1cnJ5IGNvbGxlY3Rpb24gdGhhdCBjb250YWlucyBpdC5cbiAgICAgKi9cbiAgICBpc0NXRCA9IGZhbHNlO1xuICAgIC8vIHBvdGVudGlhbCBkZWZhdWx0IGZzIG92ZXJyaWRlXG4gICAgI2ZzO1xuICAgIC8vIFN0YXRzIGZpZWxkc1xuICAgICNkZXY7XG4gICAgZ2V0IGRldigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RldjtcbiAgICB9XG4gICAgI21vZGU7XG4gICAgZ2V0IG1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtb2RlO1xuICAgIH1cbiAgICAjbmxpbms7XG4gICAgZ2V0IG5saW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbmxpbms7XG4gICAgfVxuICAgICN1aWQ7XG4gICAgZ2V0IHVpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3VpZDtcbiAgICB9XG4gICAgI2dpZDtcbiAgICBnZXQgZ2lkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZ2lkO1xuICAgIH1cbiAgICAjcmRldjtcbiAgICBnZXQgcmRldigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JkZXY7XG4gICAgfVxuICAgICNibGtzaXplO1xuICAgIGdldCBibGtzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmxrc2l6ZTtcbiAgICB9XG4gICAgI2lubztcbiAgICBnZXQgaW5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jaW5vO1xuICAgIH1cbiAgICAjc2l6ZTtcbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NpemU7XG4gICAgfVxuICAgICNibG9ja3M7XG4gICAgZ2V0IGJsb2NrcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Jsb2NrcztcbiAgICB9XG4gICAgI2F0aW1lTXM7XG4gICAgZ2V0IGF0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhdGltZU1zO1xuICAgIH1cbiAgICAjbXRpbWVNcztcbiAgICBnZXQgbXRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI210aW1lTXM7XG4gICAgfVxuICAgICNjdGltZU1zO1xuICAgIGdldCBjdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3RpbWVNcztcbiAgICB9XG4gICAgI2JpcnRodGltZU1zO1xuICAgIGdldCBiaXJ0aHRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JpcnRodGltZU1zO1xuICAgIH1cbiAgICAjYXRpbWU7XG4gICAgZ2V0IGF0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYXRpbWU7XG4gICAgfVxuICAgICNtdGltZTtcbiAgICBnZXQgbXRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtdGltZTtcbiAgICB9XG4gICAgI2N0aW1lO1xuICAgIGdldCBjdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2N0aW1lO1xuICAgIH1cbiAgICAjYmlydGh0aW1lO1xuICAgIGdldCBiaXJ0aHRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNiaXJ0aHRpbWU7XG4gICAgfVxuICAgICNtYXRjaE5hbWU7XG4gICAgI2RlcHRoO1xuICAgICNmdWxscGF0aDtcbiAgICAjZnVsbHBhdGhQb3NpeDtcbiAgICAjcmVsYXRpdmU7XG4gICAgI3JlbGF0aXZlUG9zaXg7XG4gICAgI3R5cGU7XG4gICAgI2NoaWxkcmVuO1xuICAgICNsaW5rVGFyZ2V0O1xuICAgICNyZWFscGF0aDtcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIERpcmVudCBjbGFzcyBhcyBvZlxuICAgICAqIE5vZGUgdjIwLCB3aGVyZSBEaXJlbnRbJ3BhcmVudFBhdGgnXSByZWZlcnMgdG8gdGhlIHBhdGggb2YgdGhlXG4gICAgICogZGlyZWN0b3J5IHRoYXQgd2FzIHBhc3NlZCB0byByZWFkZGlyLiBGb3Igcm9vdCBlbnRyaWVzLCBpdCdzIHRoZSBwYXRoXG4gICAgICogdG8gdGhlIGVudHJ5IGl0c2VsZi5cbiAgICAgKi9cbiAgICBnZXQgcGFyZW50UGF0aCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudCB8fCB0aGlzKS5mdWxscGF0aCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXByZWNhdGVkIGFsaWFzIGZvciBEaXJlbnRbJ3BhcmVudFBhdGgnXSBTb21ld2hhdCBjb3VudGVyaW50dWl0aXZlbHksXG4gICAgICogdGhpcyBwcm9wZXJ0eSByZWZlcnMgdG8gdGhlICpwYXJlbnQqIHBhdGgsIG5vdCB0aGUgcGF0aCBvYmplY3QgaXRzZWxmLlxuICAgICAqL1xuICAgIGdldCBwYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRQYXRoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLiNtYXRjaE5hbWUgPSBub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UobmFtZSkgOiBub3JtYWxpemUobmFtZSk7XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0eXBlICYgVFlQRU1BU0s7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICB0aGlzLnJvb3RzID0gcm9vdHM7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3QgfHwgdGhpcztcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgdGhpcy4jZnVsbHBhdGggPSBvcHRzLmZ1bGxwYXRoO1xuICAgICAgICB0aGlzLiNyZWxhdGl2ZSA9IG9wdHMucmVsYXRpdmU7XG4gICAgICAgIHRoaXMuI3JlbGF0aXZlUG9zaXggPSBvcHRzLnJlbGF0aXZlUG9zaXg7XG4gICAgICAgIHRoaXMucGFyZW50ID0gb3B0cy5wYXJlbnQ7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy4jZnMgPSB0aGlzLnBhcmVudC4jZnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNmcyA9IGZzRnJvbU9wdGlvbihvcHRzLmZzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgUGF0aCBvYmplY3QgZnJvbSBpdHMgcm9vdC5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlLCBhIHBhdGggYXQgYC9mb28vYmFyYCB3b3VsZCBoYXZlIGEgZGVwdGggb2YgMi5cbiAgICAgKi9cbiAgICBkZXB0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2RlcHRoICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZGVwdGg7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2RlcHRoID0gMCk7XG4gICAgICAgIHJldHVybiAodGhpcy4jZGVwdGggPSB0aGlzLnBhcmVudC5kZXB0aCgpICsgMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuQ2FjaGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBQYXRoIG9iamVjdCByZWZlcmVuY2VkIGJ5IHRoZSBzdHJpbmcgcGF0aCwgcmVzb2x2ZWQgZnJvbSB0aGlzIFBhdGhcbiAgICAgKi9cbiAgICByZXNvbHZlKHBhdGgpIHtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290UGF0aCA9IHRoaXMuZ2V0Um9vdFN0cmluZyhwYXRoKTtcbiAgICAgICAgY29uc3QgZGlyID0gcGF0aC5zdWJzdHJpbmcocm9vdFBhdGgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZGlyUGFydHMgPSBkaXIuc3BsaXQodGhpcy5zcGxpdFNlcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJvb3RQYXRoID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Um9vdChyb290UGF0aCkuI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cylcbiAgICAgICAgICAgIDogdGhpcy4jcmVzb2x2ZVBhcnRzKGRpclBhcnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cykge1xuICAgICAgICBsZXQgcCA9IHRoaXM7XG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBkaXJQYXJ0cykge1xuICAgICAgICAgICAgcCA9IHAuY2hpbGQocGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCBjaGlsZHJlbiBQYXRoIG9iamVjdHMsIGlmIHN0aWxsIGF2YWlsYWJsZS4gIElmIHRoZXlcbiAgICAgKiBoYXZlIGZhbGxlbiBvdXQgb2YgdGhlIGNhY2hlLCB0aGVuIHJldHVybnMgYW4gZW1wdHkgYXJyYXksIGFuZCByZXNldHMgdGhlXG4gICAgICogUkVBRERJUl9DQUxMRUQgYml0LCBzbyB0aGF0IGZ1dHVyZSBjYWxscyB0byByZWFkZGlyKCkgd2lsbCByZXF1aXJlIGFuIGZzXG4gICAgICogbG9va3VwLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW4oKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI2NoaWxkcmVuLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5hc3NpZ24oW10sIHsgcHJvdmlzaW9uYWw6IDAgfSk7XG4gICAgICAgIHRoaXMuI2NoaWxkcmVuLnNldCh0aGlzLCBjaGlsZHJlbik7XG4gICAgICAgIHRoaXMuI3R5cGUgJj0gflJFQURESVJfQ0FMTEVEO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmVzIGEgcGF0aCBwb3J0aW9uIGFuZCByZXR1cm5zIG9yIGNyZWF0ZXMgdGhlIGNoaWxkIFBhdGguXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGB0aGlzYCBpZiBwYXRoUGFydCBpcyBgJydgIG9yIGAnLidgLCBvciBgcGFyZW50YCBpZiBwYXRoUGFydCBpc1xuICAgICAqIGAnLi4nYC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuICBJZiBgcGF0aFBhcnRgIGNvbnRhaW5zIGFueSBwYXRoXG4gICAgICogc2VwYXJhdG9ycywgaXQgd2lsbCBsZWFkIHRvIHVuc2FmZSB1bmRlZmluZWQgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBVc2UgYFBhdGgucmVzb2x2ZSgpYCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGQocGF0aFBhcnQsIG9wdHMpIHtcbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSAnJyB8fCBwYXRoUGFydCA9PT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCB8fCB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgdGhlIGNoaWxkXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5ub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UocGF0aFBhcnQpIDogbm9ybWFsaXplKHBhdGhQYXJ0KTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAocC4jbWF0Y2hOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlkbid0IGZpbmQgaXQsIGNyZWF0ZSBwcm92aXNpb25hbCBjaGlsZCwgc2luY2UgaXQgbWlnaHQgbm90XG4gICAgICAgIC8vIGFjdHVhbGx5IGV4aXN0LiAgSWYgd2Uga25vdyB0aGUgcGFyZW50IGlzbid0IGEgZGlyLCB0aGVuXG4gICAgICAgIC8vIGluIGZhY3QgaXQgQ0FOJ1QgZXhpc3QuXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnBhcmVudCA/IHRoaXMuc2VwIDogJyc7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy4jZnVsbHBhdGggPyB0aGlzLiNmdWxscGF0aCArIHMgKyBwYXRoUGFydCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcGNoaWxkID0gdGhpcy5uZXdDaGlsZChwYXRoUGFydCwgVU5LTk9XTiwge1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcyxcbiAgICAgICAgICAgIGZ1bGxwYXRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcGNoaWxkLiN0eXBlIHw9IEVOT0VOVDtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBoYXZlIHRvIHVwZGF0ZSBwcm92aXNpb25hbCwgYmVjYXVzZSBpZiB3ZSBoYXZlIHJlYWwgY2hpbGRyZW4sXG4gICAgICAgIC8vIHRoZW4gcHJvdmlzaW9uYWwgaXMgc2V0IHRvIGNoaWxkcmVuLmxlbmd0aCwgb3RoZXJ3aXNlIGEgbG93ZXIgbnVtYmVyXG4gICAgICAgIGNoaWxkcmVuLnB1c2gocGNoaWxkKTtcbiAgICAgICAgcmV0dXJuIHBjaGlsZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkLiBJZiBpdCBkb2VzIG5vdCBzaGFyZSBhbiBhbmNlc3RvciB3aXRoXG4gICAgICogdGhlIGN3ZCwgdGhlbiB0aGlzIGVuZHMgdXAgYmVpbmcgZXF1aXZhbGVudCB0byB0aGUgZnVsbHBhdGgoKVxuICAgICAqL1xuICAgIHJlbGF0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NXRClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHRoaXMuI3JlbGF0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWxhdGl2ZSA9IHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLnJlbGF0aXZlKCk7XG4gICAgICAgIHJldHVybiBwdiArICghcHYgfHwgIXAucGFyZW50ID8gJycgOiB0aGlzLnNlcCkgKyBuYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QsIHVzaW5nIC8gYXMgdGhlIHBhdGggc2VwYXJhdG9yLlxuICAgICAqIElmIGl0IGRvZXMgbm90IHNoYXJlIGFuIGFuY2VzdG9yIHdpdGhcbiAgICAgKiB0aGUgY3dkLCB0aGVuIHRoaXMgZW5kcyB1cCBiZWluZyBlcXVpdmFsZW50IHRvIHRoZSBmdWxscGF0aFBvc2l4KClcbiAgICAgKiBPbiBwb3NpeCBzeXN0ZW1zLCB0aGlzIGlzIGlkZW50aWNhbCB0byByZWxhdGl2ZSgpLlxuICAgICAqL1xuICAgIHJlbGF0aXZlUG9zaXgoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlcCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRpdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNDV0QpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0aGlzLiNyZWxhdGl2ZVBvc2l4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVsYXRpdmVQb3NpeDtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVsYXRpdmVQb3NpeCA9IHRoaXMuZnVsbHBhdGhQb3NpeCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAucmVsYXRpdmVQb3NpeCgpO1xuICAgICAgICByZXR1cm4gcHYgKyAoIXB2IHx8ICFwLnBhcmVudCA/ICcnIDogJy8nKSArIG5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBmdWxseSByZXNvbHZlZCBwYXRoIHN0cmluZyBmb3IgdGhpcyBQYXRoIGVudHJ5XG4gICAgICovXG4gICAgZnVsbHBhdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNmdWxscGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZnVsbHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGggPSB0aGlzLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBmcCA9IHB2ICsgKCFwLnBhcmVudCA/ICcnIDogdGhpcy5zZXApICsgbmFtZTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aCA9IGZwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT24gcGxhdGZvcm1zIG90aGVyIHRoYW4gd2luZG93cywgdGhpcyBpcyBpZGVudGljYWwgdG8gZnVsbHBhdGguXG4gICAgICpcbiAgICAgKiBPbiB3aW5kb3dzLCB0aGlzIGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIHRoZSBmb3J3YXJkLXNsYXNoIGZvcm0gb2YgdGhlXG4gICAgICogZnVsbCBVTkMgcGF0aC5cbiAgICAgKi9cbiAgICBmdWxscGF0aFBvc2l4KCkge1xuICAgICAgICBpZiAodGhpcy4jZnVsbHBhdGhQb3NpeCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2Z1bGxwYXRoUG9zaXg7XG4gICAgICAgIGlmICh0aGlzLnNlcCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gdGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuZnVsbHBhdGgoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgICAgICBpZiAoL15bYS16XTpcXC8vaS50ZXN0KHApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gYC8vPy8ke3B9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGNvbnN0IHBmcHAgPSBwLmZ1bGxwYXRoUG9zaXgoKTtcbiAgICAgICAgY29uc3QgZnBwID0gcGZwcCArICghcGZwcCB8fCAhcC5wYXJlbnQgPyAnJyA6ICcvJykgKyB0aGlzLm5hbWU7XG4gICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IGZwcCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIG9mIGFuIHVua25vd24gdHlwZT9cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB3ZSBtaWdodCBrbm93ICpzb21ldGhpbmcqIGFib3V0IGl0IGlmIHRoZXJlIGhhcyBiZWVuIGEgcHJldmlvdXNcbiAgICAgKiBmaWxlc3lzdGVtIG9wZXJhdGlvbiwgZm9yIGV4YW1wbGUgdGhhdCBpdCBkb2VzIG5vdCBleGlzdCwgb3IgaXMgbm90IGFcbiAgICAgKiBsaW5rLCBvciB3aGV0aGVyIGl0IGhhcyBjaGlsZCBlbnRyaWVzLlxuICAgICAqL1xuICAgIGlzVW5rbm93bigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IFVOS05PV047XG4gICAgfVxuICAgIGlzVHlwZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2BpcyR7dHlwZX1gXSgpO1xuICAgIH1cbiAgICBnZXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXNVbmtub3duKCkgPyAnVW5rbm93bidcbiAgICAgICAgICAgIDogdGhpcy5pc0RpcmVjdG9yeSgpID8gJ0RpcmVjdG9yeSdcbiAgICAgICAgICAgICAgICA6IHRoaXMuaXNGaWxlKCkgPyAnRmlsZSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzU3ltYm9saWNMaW5rKCkgPyAnU3ltYm9saWNMaW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzRklGTygpID8gJ0ZJRk8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgPyAnQ2hhcmFjdGVyRGV2aWNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNCbG9ja0RldmljZSgpID8gJ0Jsb2NrRGV2aWNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBjOCBpZ25vcmUgc3RhcnQgKi8gdGhpcy5pc1NvY2tldCgpID8gJ1NvY2tldCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdVbmtub3duJyk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIGEgcmVndWxhciBmaWxlP1xuICAgICAqL1xuICAgIGlzRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGUkVHO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgUGF0aCBhIGRpcmVjdG9yeT9cbiAgICAgKi9cbiAgICBpc0RpcmVjdG9yeSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGRElSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIGNoYXJhY3RlciBkZXZpY2U/XG4gICAgICovXG4gICAgaXNDaGFyYWN0ZXJEZXZpY2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRkNIUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBibG9jayBkZXZpY2U/XG4gICAgICovXG4gICAgaXNCbG9ja0RldmljZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGQkxLO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIEZJRk8gcGlwZT9cbiAgICAgKi9cbiAgICBpc0ZJRk8oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRklGTztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBzb2NrZXQ/XG4gICAgICovXG4gICAgaXNTb2NrZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRlNPQ0s7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgc3ltYm9saWMgbGluaz9cbiAgICAgKi9cbiAgICBpc1N5bWJvbGljTGluaygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZMTkspID09PSBJRkxOSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBlbnRyeSBpZiBpdCBoYXMgYmVlbiBzdWJqZWN0IG9mIGEgc3VjY2Vzc2Z1bCBsc3RhdCwgb3JcbiAgICAgKiB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIHNpbXBseVxuICAgICAqIG1lYW4gdGhhdCB3ZSBoYXZlbid0IGNhbGxlZCBsc3RhdCBvbiBpdC5cbiAgICAgKi9cbiAgICBsc3RhdENhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3R5cGUgJiBMU1RBVF9DQUxMRUQgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNhY2hlZCBsaW5rIHRhcmdldCBpZiB0aGUgZW50cnkgaGFzIGJlZW4gdGhlIHN1YmplY3Qgb2YgYVxuICAgICAqIHN1Y2Nlc3NmdWwgcmVhZGxpbmssIG9yIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWRsaW5rKCkgaGFzIGJlZW4gY2FsbGVkIGF0IHNvbWUgcG9pbnQuXG4gICAgICovXG4gICAgcmVhZGxpbmtDYWNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgcmVhbHBhdGggdGFyZ2V0IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGUgc3ViamVjdFxuICAgICAqIG9mIGEgc3VjY2Vzc2Z1bCByZWFscGF0aCwgb3IgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhbHBhdGgoKSBoYXMgYmVlbiBjYWxsZWQgYXQgc29tZSBwb2ludC5cbiAgICAgKi9cbiAgICByZWFscGF0aENhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgY2hpbGQgUGF0aCBlbnRyaWVzIGFycmF5IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGVcbiAgICAgKiBzdWJqZWN0IG9mIGEgc3VjY2Vzc2Z1bCByZWFkZGlyKCksIG9yIFtdIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIGVtcHR5IGFycmF5ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWRkaXIoKSBoYXMgYmVlbiBjYWxsZWQgcmVjZW50bHkgZW5vdWdoIHRvIHN0aWxsIGJlIHZhbGlkLlxuICAgICAqL1xuICAgIHJlYWRkaXJDYWNoZWQoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCdzIHdvcnRoIHRyeWluZyB0byByZWFkbGluay4gIEllLCB3ZSBkb24ndCAoeWV0KSBoYXZlXG4gICAgICogYW55IGluZGljYXRpb24gdGhhdCByZWFkbGluayB3aWxsIGRlZmluaXRlbHkgZmFpbC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhdGggaXMga25vd24gdG8gbm90IGJlIGEgc3ltbGluaywgaWYgYSBwcmV2aW91c1xuICAgICAqIHJlYWRsaW5rIGZhaWxlZCwgb3IgaWYgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LlxuICAgICAqL1xuICAgIGNhblJlYWRsaW5rKCkge1xuICAgICAgICBpZiAodGhpcy4jbGlua1RhcmdldClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBjYXNlcyB3aGVyZSBpdCBjYW5ub3QgcG9zc2libHkgc3VjY2VlZFxuICAgICAgICBjb25zdCBpZm10ID0gdGhpcy4jdHlwZSAmIElGTVQ7XG4gICAgICAgIHJldHVybiAhKChpZm10ICE9PSBVTktOT1dOICYmIGlmbXQgIT09IElGTE5LKSB8fFxuICAgICAgICAgICAgdGhpcy4jdHlwZSAmIEVOT1JFQURMSU5LIHx8XG4gICAgICAgICAgICB0aGlzLiN0eXBlICYgRU5PRU5UKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgcmVhZGRpciBoYXMgcHJldmlvdXNseSBiZWVuIHN1Y2Nlc3NmdWxseSBjYWxsZWQgb24gdGhpc1xuICAgICAqIHBhdGgsIGluZGljYXRpbmcgdGhhdCBjYWNoZWRSZWFkZGlyKCkgaXMgbGlrZWx5IHZhbGlkLlxuICAgICAqL1xuICAgIGNhbGxlZFJlYWRkaXIoKSB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLiN0eXBlICYgUkVBRERJUl9DQUxMRUQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhdGggaXMga25vd24gdG8gbm90IGV4aXN0LiBUaGF0IGlzLCBhIHByZXZpb3VzIGxzdGF0XG4gICAgICogb3IgcmVhZGRpciBmYWlsZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2Ugd2hlbiB0aGF0IHdvdWxkIGhhdmUgYmVlblxuICAgICAqIGV4cGVjdGVkLCBvciBhIHBhcmVudCBlbnRyeSB3YXMgbWFya2VkIGVpdGhlciBlbm9lbnQgb3IgZW5vdGRpci5cbiAgICAgKi9cbiAgICBpc0VOT0VOVCgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuI3R5cGUgJiBFTk9FTlQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aCBpcyBhIG1hdGNoIGZvciB0aGUgZ2l2ZW4gcGF0aCBuYW1lLiAgVGhpcyBoYW5kbGVzXG4gICAgICogY2FzZSBzZW5zaXRpdml0eSBhbmQgdW5pY29kZSBub3JtYWxpemF0aW9uLlxuICAgICAqXG4gICAgICogTm90ZTogZXZlbiBvbiBjYXNlLXNlbnNpdGl2ZSBzeXN0ZW1zLCBpdCBpcyAqKm5vdCoqIHNhZmUgdG8gdGVzdCB0aGVcbiAgICAgKiBlcXVhbGl0eSBvZiB0aGUgYC5uYW1lYCBwcm9wZXJ0eSB0byBkZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIHBhdGhuYW1lXG4gICAgICogbWF0Y2hlcywgZHVlIHRvIHVuaWNvZGUgbm9ybWFsaXphdGlvbiBtaXNtYXRjaGVzLlxuICAgICAqXG4gICAgICogQWx3YXlzIHVzZSB0aGlzIG1ldGhvZCBpbnN0ZWFkIG9mIHRlc3RpbmcgdGhlIGBwYXRoLm5hbWVgIHByb3BlcnR5XG4gICAgICogZGlyZWN0bHkuXG4gICAgICovXG4gICAgaXNOYW1lZChuKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ub2Nhc2UgP1xuICAgICAgICAgICAgdGhpcy4jbWF0Y2hOYW1lID09PSBub3JtYWxpemUobilcbiAgICAgICAgICAgIDogdGhpcy4jbWF0Y2hOYW1lID09PSBub3JtYWxpemVOb2Nhc2Uobik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGF0aCBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0IG9mIGEgc3ltYm9saWMgbGluay5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGlzIG5vdCBhIHN5bWJvbGljIGxpbmssIG9yIGlmIHRoZSByZWFkbGluayBjYWxsIGZhaWxzIGZvciBhbnlcbiAgICAgKiByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0IGlzIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dGRhdGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcmVhZGxpbmsoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRsaW5rKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIC8vIGFscmVhZHkgY292ZXJlZCBieSB0aGUgY2FuUmVhZGxpbmsgdGVzdCwgaGVyZSBmb3IgdHMgZ3J1bXBsZXNcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhZCA9IGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWRsaW5rKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGFyZ2V0ID0gKGF3YWl0IHRoaXMucGFyZW50LnJlYWxwYXRoKCkpPy5yZXNvbHZlKHJlYWQpO1xuICAgICAgICAgICAgaWYgKGxpbmtUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2xpbmtUYXJnZXQgPSBsaW5rVGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRsaW5rRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLnJlYWRsaW5rfVxuICAgICAqL1xuICAgIHJlYWRsaW5rU3luYygpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4jbGlua1RhcmdldDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGxpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgLy8gYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBjYW5SZWFkbGluayB0ZXN0LCBoZXJlIGZvciB0cyBncnVtcGxlc1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZWFkID0gdGhpcy4jZnMucmVhZGxpbmtTeW5jKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGFyZ2V0ID0gdGhpcy5wYXJlbnQucmVhbHBhdGhTeW5jKCk/LnJlc29sdmUocmVhZCk7XG4gICAgICAgICAgICBpZiAobGlua1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jbGlua1RhcmdldCA9IGxpbmtUYXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGxpbmtGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pIHtcbiAgICAgICAgLy8gc3VjY2VlZGVkLCBtYXJrIHJlYWRkaXIgY2FsbGVkIGJpdFxuICAgICAgICB0aGlzLiN0eXBlIHw9IFJFQURESVJfQ0FMTEVEO1xuICAgICAgICAvLyBtYXJrIGFsbCByZW1haW5pbmcgcHJvdmlzaW9uYWwgY2hpbGRyZW4gYXMgRU5PRU5UXG4gICAgICAgIGZvciAobGV0IHAgPSBjaGlsZHJlbi5wcm92aXNpb25hbDsgcCA8IGNoaWxkcmVuLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2hpbGRyZW5bcF07XG4gICAgICAgICAgICBpZiAoYylcbiAgICAgICAgICAgICAgICBjLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI21hcmtFTk9FTlQoKSB7XG4gICAgICAgIC8vIG1hcmsgYXMgVU5LTk9XTiBhbmQgRU5PRU5UXG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PRU5UKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLiN0eXBlID0gKHRoaXMuI3R5cGUgfCBFTk9FTlQpICYgSUZNVF9VTktOT1dOO1xuICAgICAgICB0aGlzLiNtYXJrQ2hpbGRyZW5FTk9FTlQoKTtcbiAgICB9XG4gICAgI21hcmtDaGlsZHJlbkVOT0VOVCgpIHtcbiAgICAgICAgLy8gYWxsIGNoaWxkcmVuIGFyZSBwcm92aXNpb25hbCBhbmQgZG8gbm90IGV4aXN0XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgcC4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNtYXJrRU5PUkVBTFBBVEgoKSB7XG4gICAgICAgIHRoaXMuI3R5cGUgfD0gRU5PUkVBTFBBVEg7XG4gICAgICAgIHRoaXMuI21hcmtFTk9URElSKCk7XG4gICAgfVxuICAgIC8vIHNhdmUgdGhlIGluZm9ybWF0aW9uIHdoZW4gd2Uga25vdyB0aGUgZW50cnkgaXMgbm90IGEgZGlyXG4gICAgI21hcmtFTk9URElSKCkge1xuICAgICAgICAvLyBlbnRyeSBpcyBub3QgYSBkaXJlY3RvcnksIHNvIGFueSBjaGlsZHJlbiBjYW4ndCBleGlzdC5cbiAgICAgICAgLy8gdGhpcyAqc2hvdWxkKiBiZSBpbXBvc3NpYmxlLCBzaW5jZSBhbnkgY2hpbGRyZW4gY3JlYXRlZFxuICAgICAgICAvLyBhZnRlciBpdCdzIGJlZW4gbWFya2VkIEVOT1RESVIgc2hvdWxkIGJlIG1hcmtlZCBFTk9FTlQsXG4gICAgICAgIC8vIHNvIGl0IHdvbid0IGV2ZW4gZ2V0IHRvIHRoaXMgcG9pbnQuXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy4jdHlwZSAmIEVOT1RESVIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGxldCB0ID0gdGhpcy4jdHlwZTtcbiAgICAgICAgLy8gdGhpcyBjb3VsZCBoYXBwZW4gaWYgd2Ugc3RhdCBhIGRpciwgdGhlbiBkZWxldGUgaXQsXG4gICAgICAgIC8vIHRoZW4gdHJ5IHRvIHJlYWQgaXQgb3Igb25lIG9mIGl0cyBjaGlsZHJlbi5cbiAgICAgICAgaWYgKCh0ICYgSUZNVCkgPT09IElGRElSKVxuICAgICAgICAgICAgdCAmPSBJRk1UX1VOS05PV047XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0IHwgRU5PVERJUjtcbiAgICAgICAgdGhpcy4jbWFya0NoaWxkcmVuRU5PRU5UKCk7XG4gICAgfVxuICAgICNyZWFkZGlyRmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgLy8gbWFya0VOT1RESVIgYW5kIG1hcmtFTk9FTlQgYWxzbyBzZXQgcHJvdmlzaW9uYWw9MFxuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInIHx8IGNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4oKS5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2xzdGF0RmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgLy8gV2luZG93cyBqdXN0IHJhaXNlcyBFTk9FTlQgaW4gdGhpcyBjYXNlLCBkaXNhYmxlIGZvciB3aW4gQ0lcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgICAgICAgIC8vIGFscmVhZHkga25vdyBpdCBoYXMgYSBwYXJlbnQgYnkgdGhpcyBwb2ludFxuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgcC4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGxpbmtGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICBsZXQgdGVyID0gdGhpcy4jdHlwZTtcbiAgICAgICAgdGVyIHw9IEVOT1JFQURMSU5LO1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpXG4gICAgICAgICAgICB0ZXIgfD0gRU5PRU5UO1xuICAgICAgICAvLyB3aW5kb3dzIGdldHMgYSB3ZWlyZCBlcnJvciB3aGVuIHlvdSB0cnkgdG8gcmVhZGxpbmsgYSBmaWxlXG4gICAgICAgIGlmIChjb2RlID09PSAnRUlOVkFMJyB8fCBjb2RlID09PSAnVU5LTk9XTicpIHtcbiAgICAgICAgICAgIC8vIGV4aXN0cywgYnV0IG5vdCBhIHN5bWxpbmssIHdlIGRvbid0IGtub3cgV0hBVCBpdCBpcywgc28gcmVtb3ZlXG4gICAgICAgICAgICAvLyBhbGwgSUZNVCBiaXRzLlxuICAgICAgICAgICAgdGVyICY9IElGTVRfVU5LTk9XTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiN0eXBlID0gdGVyO1xuICAgICAgICAvLyB3aW5kb3dzIGp1c3QgZ2V0cyBFTk9FTlQgaW4gdGhpcyBjYXNlLiAgV2UgZG8gY292ZXIgdGhlIGNhc2UsXG4gICAgICAgIC8vIGp1c3QgZGlzYWJsZWQgYmVjYXVzZSBpdCdzIGltcG9zc2libGUgb24gV2luZG93cyBDSVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJyAmJiB0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgI3JlYWRkaXJBZGRDaGlsZChlLCBjKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jcmVhZGRpck1heWJlUHJvbW90ZUNoaWxkKGUsIGMpIHx8XG4gICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkTmV3Q2hpbGQoZSwgYykpO1xuICAgIH1cbiAgICAjcmVhZGRpckFkZE5ld0NoaWxkKGUsIGMpIHtcbiAgICAgICAgLy8gYWxsb2MgbmV3IGVudHJ5IGF0IGhlYWQsIHNvIGl0J3MgbmV2ZXIgcHJvdmlzaW9uYWxcbiAgICAgICAgY29uc3QgdHlwZSA9IGVudFRvVHlwZShlKTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLm5ld0NoaWxkKGUubmFtZSwgdHlwZSwgeyBwYXJlbnQ6IHRoaXMgfSk7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBjaGlsZC4jdHlwZSAmIElGTVQ7XG4gICAgICAgIGlmIChpZm10ICE9PSBJRkRJUiAmJiBpZm10ICE9PSBJRkxOSyAmJiBpZm10ICE9PSBVTktOT1dOKSB7XG4gICAgICAgICAgICBjaGlsZC4jdHlwZSB8PSBFTk9URElSO1xuICAgICAgICB9XG4gICAgICAgIGMudW5zaGlmdChjaGlsZCk7XG4gICAgICAgIGMucHJvdmlzaW9uYWwrKztcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICAjcmVhZGRpck1heWJlUHJvbW90ZUNoaWxkKGUsIGMpIHtcbiAgICAgICAgZm9yIChsZXQgcCA9IGMucHJvdmlzaW9uYWw7IHAgPCBjLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwY2hpbGQgPSBjW3BdO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubm9jYXNlID8gbm9ybWFsaXplTm9jYXNlKGUubmFtZSkgOiBub3JtYWxpemUoZS5uYW1lKTtcbiAgICAgICAgICAgIGlmIChuYW1lICE9PSBwY2hpbGQuI21hdGNoTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWRkaXJQcm9tb3RlQ2hpbGQoZSwgcGNoaWxkLCBwLCBjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGRpclByb21vdGVDaGlsZChlLCBwLCBpbmRleCwgYykge1xuICAgICAgICBjb25zdCB2ID0gcC5uYW1lO1xuICAgICAgICAvLyByZXRhaW4gYW55IG90aGVyIGZsYWdzLCBidXQgc2V0IGlmbXQgZnJvbSBkaXJlbnRcbiAgICAgICAgcC4jdHlwZSA9IChwLiN0eXBlICYgSUZNVF9VTktOT1dOKSB8IGVudFRvVHlwZShlKTtcbiAgICAgICAgLy8gY2FzZSBzZW5zaXRpdml0eSBmaXhpbmcgd2hlbiB3ZSBsZWFybiB0aGUgdHJ1ZSBuYW1lLlxuICAgICAgICBpZiAodiAhPT0gZS5uYW1lKVxuICAgICAgICAgICAgcC5uYW1lID0gZS5uYW1lO1xuICAgICAgICAvLyBqdXN0IGFkdmFuY2UgcHJvdmlzaW9uYWwgaW5kZXggKHBvdGVudGlhbGx5IG9mZiB0aGUgbGlzdCksXG4gICAgICAgIC8vIG90aGVyd2lzZSB3ZSBoYXZlIHRvIHNwbGljZS9wb3AgaXQgb3V0IGFuZCByZS1pbnNlcnQgYXQgaGVhZFxuICAgICAgICBpZiAoaW5kZXggIT09IGMucHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gYy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgIGMucG9wKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgYy51bnNoaWZ0KHApO1xuICAgICAgICB9XG4gICAgICAgIGMucHJvdmlzaW9uYWwrKztcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgbHN0YXQoKSBvbiB0aGlzIFBhdGgsIGFuZCB1cGRhdGUgYWxsIGtub3duIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlXG4gICAgICogZGV0ZXJtaW5lZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1bmxpa2UgYGZzLmxzdGF0KClgLCB0aGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBzb21lXG4gICAgICogaW5mb3JtYXRpb24sIHN1Y2ggYXMgYG1vZGVgLCBgZGV2YCwgYG5saW5rYCwgYW5kIGBpbm9gLiAgSWYgdGhhdFxuICAgICAqIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGNhbGwgYGZzLmxzdGF0YCB5b3Vyc2VsZi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIG9yIGlmIHRoZSBsc3RhdCBjYWxsIGZhaWxzIGZvclxuICAgICAqIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSB1cGRhdGVkIFBhdGggb2JqZWN0IGlzXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgbHN0YXQoKSB7XG4gICAgICAgIGlmICgodGhpcy4jdHlwZSAmIEVOT0VOVCkgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXBwbHlTdGF0KGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLmxzdGF0KHRoaXMuZnVsbHBhdGgoKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbHN0YXRGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5sc3RhdH1cbiAgICAgKi9cbiAgICBsc3RhdFN5bmMoKSB7XG4gICAgICAgIGlmICgodGhpcy4jdHlwZSAmIEVOT0VOVCkgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXBwbHlTdGF0KHRoaXMuI2ZzLmxzdGF0U3luYyh0aGlzLmZ1bGxwYXRoKCkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2xzdGF0RmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAjYXBwbHlTdGF0KHN0KSB7XG4gICAgICAgIGNvbnN0IHsgYXRpbWUsIGF0aW1lTXMsIGJpcnRodGltZSwgYmlydGh0aW1lTXMsIGJsa3NpemUsIGJsb2NrcywgY3RpbWUsIGN0aW1lTXMsIGRldiwgZ2lkLCBpbm8sIG1vZGUsIG10aW1lLCBtdGltZU1zLCBubGluaywgcmRldiwgc2l6ZSwgdWlkLCB9ID0gc3Q7XG4gICAgICAgIHRoaXMuI2F0aW1lID0gYXRpbWU7XG4gICAgICAgIHRoaXMuI2F0aW1lTXMgPSBhdGltZU1zO1xuICAgICAgICB0aGlzLiNiaXJ0aHRpbWUgPSBiaXJ0aHRpbWU7XG4gICAgICAgIHRoaXMuI2JpcnRodGltZU1zID0gYmlydGh0aW1lTXM7XG4gICAgICAgIHRoaXMuI2Jsa3NpemUgPSBibGtzaXplO1xuICAgICAgICB0aGlzLiNibG9ja3MgPSBibG9ja3M7XG4gICAgICAgIHRoaXMuI2N0aW1lID0gY3RpbWU7XG4gICAgICAgIHRoaXMuI2N0aW1lTXMgPSBjdGltZU1zO1xuICAgICAgICB0aGlzLiNkZXYgPSBkZXY7XG4gICAgICAgIHRoaXMuI2dpZCA9IGdpZDtcbiAgICAgICAgdGhpcy4jaW5vID0gaW5vO1xuICAgICAgICB0aGlzLiNtb2RlID0gbW9kZTtcbiAgICAgICAgdGhpcy4jbXRpbWUgPSBtdGltZTtcbiAgICAgICAgdGhpcy4jbXRpbWVNcyA9IG10aW1lTXM7XG4gICAgICAgIHRoaXMuI25saW5rID0gbmxpbms7XG4gICAgICAgIHRoaXMuI3JkZXYgPSByZGV2O1xuICAgICAgICB0aGlzLiNzaXplID0gc2l6ZTtcbiAgICAgICAgdGhpcy4jdWlkID0gdWlkO1xuICAgICAgICBjb25zdCBpZm10ID0gZW50VG9UeXBlKHN0KTtcbiAgICAgICAgLy8gcmV0YWluIGFueSBvdGhlciBmbGFncywgYnV0IHNldCB0aGUgaWZtdFxuICAgICAgICB0aGlzLiN0eXBlID0gKHRoaXMuI3R5cGUgJiBJRk1UX1VOS05PV04pIHwgaWZtdCB8IExTVEFUX0NBTExFRDtcbiAgICAgICAgaWYgKGlmbXQgIT09IFVOS05PV04gJiYgaWZtdCAhPT0gSUZESVIgJiYgaWZtdCAhPT0gSUZMTkspIHtcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgfD0gRU5PVERJUjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjb25SZWFkZGlyQ0IgPSBbXTtcbiAgICAjcmVhZGRpckNCSW5GbGlnaHQgPSBmYWxzZTtcbiAgICAjY2FsbE9uUmVhZGRpckNCKGNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNicyA9IHRoaXMuI29uUmVhZGRpckNCLnNsaWNlKCk7XG4gICAgICAgIHRoaXMuI29uUmVhZGRpckNCLmxlbmd0aCA9IDA7XG4gICAgICAgIGNicy5mb3JFYWNoKGNiID0+IGNiKG51bGwsIGNoaWxkcmVuKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIG5vZGUtc3R5bGUgY2FsbGJhY2sgaW50ZXJmYWNlIHRvIGdldCBsaXN0IG9mIGRpcmVjdG9yeSBlbnRyaWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggY2Fubm90IG9yIGRvZXMgbm90IGNvbnRhaW4gYW55IGNoaWxkcmVuLCB0aGVuIGFuIGVtcHR5IGFycmF5XG4gICAgICogaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIChlciwgZW50cmllcykuICBOb3RlIHRoYXQgdGhlIGBlcmBcbiAgICAgKiBwYXJhbSBpcyBzb21ld2hhdCBleHRyYW5lb3VzLCBhcyBhbGwgcmVhZGRpcigpIGVycm9ycyBhcmUgaGFuZGxlZCBhbmRcbiAgICAgKiBzaW1wbHkgcmVzdWx0IGluIGFuIGVtcHR5IHNldCBvZiBlbnRyaWVzIGJlaW5nIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSBhbGxvd1phbGdvIEJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGltbWVkaWF0ZWx5IGtub3duIHJlc3VsdHMgc2hvdWxkXG4gICAgICogKm5vdCogYmUgZGVmZXJyZWQgd2l0aCBgcXVldWVNaWNyb3Rhc2tgLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBSZWxlYXNlXG4gICAgICogemFsZ28gYXQgeW91ciBwZXJpbCwgdGhlIGRhcmsgcG9ueSBsb3JkIGlzIGRldmlvdXMgYW5kIHVuZm9yZ2l2aW5nLlxuICAgICAqL1xuICAgIHJlYWRkaXJDQihjYiwgYWxsb3daYWxnbyA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd1phbGdvKVxuICAgICAgICAgICAgICAgIGNiKG51bGwsIFtdKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYihudWxsLCBbXSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBpZiAodGhpcy5jYWxsZWRSZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgICAgICAgICBpZiAoYWxsb3daYWxnbylcbiAgICAgICAgICAgICAgICBjYihudWxsLCBjKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYihudWxsLCBjKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB6YWxnbyBhdCB0aGlzIHBvaW50LlxuICAgICAgICB0aGlzLiNvblJlYWRkaXJDQi5wdXNoKGNiKTtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVhZGRpckNCSW5GbGlnaHQgPSB0cnVlO1xuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICB0aGlzLiNmcy5yZWFkZGlyKGZ1bGxwYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGFuIGVycm9yLCB3ZSBhbHdheXMgZ2V0IGVudHJpZXMuXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jY2FsbE9uUmVhZGRpckNCKGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAjYXN5bmNSZWFkZGlySW5GbGlnaHQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIGtub3duIGNoaWxkIGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBjYW5ub3Qgb3IgZG9lcyBub3QgY29udGFpbiBhbnkgY2hpbGRyZW4sIHRoZW4gYW4gZW1wdHkgYXJyYXlcbiAgICAgKiBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFkZGlyKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICBpZiAodGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBsZXQgcmVzb2x2ZSA9ICgpID0+IHsgfTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCA9IG5ldyBQcm9taXNlKHJlcyA9PiAocmVzb2x2ZSA9IHJlcykpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhZGRpcihmdWxscGF0aCwge1xuICAgICAgICAgICAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGRDaGlsZChlLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5yZWFkZGlyfVxuICAgICAqL1xuICAgIHJlYWRkaXJTeW5jKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHRoaXMuI2ZzLnJlYWRkaXJTeW5jKGZ1bGxwYXRoLCB7XG4gICAgICAgICAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIGNhblJlYWRkaXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PQ0hJTEQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBJRk1UICYgdGhpcy4jdHlwZTtcbiAgICAgICAgLy8gd2UgYWx3YXlzIHNldCBFTk9URElSIHdoZW4gc2V0dGluZyBJRk1ULCBzbyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCEoaWZtdCA9PT0gVU5LTk9XTiB8fCBpZm10ID09PSBJRkRJUiB8fCBpZm10ID09PSBJRkxOSykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSB7XG4gICAgICAgIHJldHVybiAoKHRoaXMuI3R5cGUgJiBJRkRJUikgPT09IElGRElSICYmXG4gICAgICAgICAgICAhKHRoaXMuI3R5cGUgJiBFTk9DSElMRCkgJiZcbiAgICAgICAgICAgICFkaXJzLmhhcyh0aGlzKSAmJlxuICAgICAgICAgICAgKCF3YWxrRmlsdGVyIHx8IHdhbGtGaWx0ZXIodGhpcykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBQYXRoIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHBhdGggYXMgcmVzb2x2ZWRcbiAgICAgKiBieSByZWFscGF0aCgzKS5cbiAgICAgKlxuICAgICAqIElmIHRoZSByZWFscGF0aCBjYWxsIGZhaWxzIGZvciBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdCBpcyBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXRkYXRlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtdXRhdGVkLlxuICAgICAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgYSBQYXRoIG9iamVjdC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFscGF0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWxwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgICAgICBpZiAoKEVOT1JFQUxQQVRIIHwgRU5PUkVBRExJTksgfCBFTk9FTlQpICYgdGhpcy4jdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWxwYXRoKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlYWxwYXRoID0gdGhpcy5yZXNvbHZlKHJwKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9SRUFMUEFUSCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN5bmNocm9ub3VzIHtAbGluayByZWFscGF0aH1cbiAgICAgKi9cbiAgICByZWFscGF0aFN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZWFscGF0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWFscGF0aDtcbiAgICAgICAgaWYgKChFTk9SRUFMUEFUSCB8IEVOT1JFQURMSU5LIHwgRU5PRU5UKSAmIHRoaXMuI3R5cGUpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSB0aGlzLiNmcy5yZWFscGF0aFN5bmModGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVhbHBhdGggPSB0aGlzLnJlc29sdmUocnApKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1JFQUxQQVRIKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIG1hcmsgdGhpcyBQYXRoIG9iamVjdCBhcyB0aGUgc2N1cnJ5IGN3ZCxcbiAgICAgKiBjYWxsZWQgYnkge0BsaW5rIFBhdGhTY3VycnkjY2hkaXJ9XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBbc2V0QXNDd2RdKG9sZEN3ZCkge1xuICAgICAgICBpZiAob2xkQ3dkID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBvbGRDd2QuaXNDV0QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0NXRCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSBuZXcgU2V0KFtdKTtcbiAgICAgICAgbGV0IHJwID0gW107XG4gICAgICAgIGxldCBwID0gdGhpcztcbiAgICAgICAgd2hpbGUgKHAgJiYgcC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNoYW5nZWQuYWRkKHApO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmUgPSBycC5qb2luKHRoaXMuc2VwKTtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlUG9zaXggPSBycC5qb2luKCcvJyk7XG4gICAgICAgICAgICBwID0gcC5wYXJlbnQ7XG4gICAgICAgICAgICBycC5wdXNoKCcuLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB1bi1tZW1vaXplIHBhcmVudHMgb2Ygb2xkIGN3ZFxuICAgICAgICBwID0gb2xkQ3dkO1xuICAgICAgICB3aGlsZSAocCAmJiBwLnBhcmVudCAmJiAhY2hhbmdlZC5oYXMocCkpIHtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmVQb3NpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHAgPSBwLnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuUGF0aEJhc2UgPSBQYXRoQmFzZTtcbi8qKlxuICogUGF0aCBjbGFzcyB1c2VkIG9uIHdpbjMyIHN5c3RlbXNcbiAqXG4gKiBVc2VzIGAnXFxcXCdgIGFzIHRoZSBwYXRoIHNlcGFyYXRvciBmb3IgcmV0dXJuZWQgcGF0aHMsIGVpdGhlciBgJ1xcXFwnYCBvciBgJy8nYFxuICogYXMgdGhlIHBhdGggc2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGhzLlxuICovXG5jbGFzcyBQYXRoV2luMzIgZXh0ZW5kcyBQYXRoQmFzZSB7XG4gICAgLyoqXG4gICAgICogU2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5ncy5cbiAgICAgKi9cbiAgICBzZXAgPSAnXFxcXCc7XG4gICAgLyoqXG4gICAgICogU2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGggc3RyaW5ncy5cbiAgICAgKi9cbiAgICBzcGxpdFNlcCA9IGVpdGhlclNlcDtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICBzdXBlcihuYW1lLCB0eXBlLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld0NoaWxkKG5hbWUsIHR5cGUgPSBVTktOT1dOLCBvcHRzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoV2luMzIobmFtZSwgdHlwZSwgdGhpcy5yb290LCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290U3RyaW5nKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVfcGF0aF8xLndpbjMyLnBhcnNlKHBhdGgpLnJvb3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3Qocm9vdFBhdGgpIHtcbiAgICAgICAgcm9vdFBhdGggPSB1bmNUb0RyaXZlKHJvb3RQYXRoLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICBpZiAocm9vdFBhdGggPT09IHRoaXMucm9vdC5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgICAgICB9XG4gICAgICAgIC8vIG9rLCBub3QgdGhhdCBvbmUsIGNoZWNrIGlmIGl0IG1hdGNoZXMgYW5vdGhlciB3ZSBrbm93IGFib3V0XG4gICAgICAgIGZvciAoY29uc3QgW2NvbXBhcmUsIHJvb3RdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucm9vdHMpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zYW1lUm9vdChyb290UGF0aCwgY29tcGFyZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMucm9vdHNbcm9vdFBhdGhdID0gcm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgICAgIHJldHVybiAodGhpcy5yb290c1tyb290UGF0aF0gPSBuZXcgUGF0aFNjdXJyeVdpbjMyKHJvb3RQYXRoLCB0aGlzKS5yb290KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgc2FtZVJvb3Qocm9vdFBhdGgsIGNvbXBhcmUgPSB0aGlzLnJvb3QubmFtZSkge1xuICAgICAgICAvLyB3aW5kb3dzIGNhbiAocmFyZWx5KSBoYXZlIGNhc2Utc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIGJ1dFxuICAgICAgICAvLyBVTkMgYW5kIGRyaXZlIGxldHRlcnMgYXJlIGFsd2F5cyBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgY2Fub25pY2FsbHlcbiAgICAgICAgLy8gcmVwcmVzZW50ZWQgdXBwZXJjYXNlLlxuICAgICAgICByb290UGF0aCA9IHJvb3RQYXRoXG4gICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXFxcXCcpXG4gICAgICAgICAgICAucmVwbGFjZSh1bmNEcml2ZVJlZ2V4cCwgJyQxXFxcXCcpO1xuICAgICAgICByZXR1cm4gcm9vdFBhdGggPT09IGNvbXBhcmU7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoV2luMzIgPSBQYXRoV2luMzI7XG4vKipcbiAqIFBhdGggY2xhc3MgdXNlZCBvbiBhbGwgcG9zaXggc3lzdGVtcy5cbiAqXG4gKiBVc2VzIGAnLydgIGFzIHRoZSBwYXRoIHNlcGFyYXRvci5cbiAqL1xuY2xhc3MgUGF0aFBvc2l4IGV4dGVuZHMgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgcGFyc2luZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzcGxpdFNlcCA9ICcvJztcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJy8nO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHR5cGUsIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdFN0cmluZyhwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/ICcvJyA6ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290KF9yb290UGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdDaGlsZChuYW1lLCB0eXBlID0gVU5LTk9XTiwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFBvc2l4KG5hbWUsIHR5cGUsIHRoaXMucm9vdCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCBvcHRzKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhQb3NpeCA9IFBhdGhQb3NpeDtcbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBQYXRoU2N1cnJ5IGNsYXNzZXMsIHByb3ZpZGluZyB0aGUgaW50ZXJmYWNlIGZvciBwYXRoXG4gKiByZXNvbHV0aW9uIGFuZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuXG4gKlxuICogVHlwaWNhbGx5LCB5b3Ugc2hvdWxkICpub3QqIGluc3RhbnRpYXRlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGJ1dCByYXRoZXIgb25lXG4gKiBvZiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY2xhc3Nlcywgb3IgdGhlIGV4cG9ydGVkIHtAbGluayBQYXRoU2N1cnJ5fSB3aGljaFxuICogZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKi9cbmNsYXNzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcm9vdCBQYXRoIGVudHJ5IGZvciB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGlzIFNjdXJyeVxuICAgICAqL1xuICAgIHJvb3Q7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmluZyBwYXRoIGZvciB0aGUgcm9vdCBvZiB0aGlzIFNjdXJyeSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgKi9cbiAgICByb290UGF0aDtcbiAgICAvKipcbiAgICAgKiBBIGNvbGxlY3Rpb24gb2YgYWxsIHJvb3RzIGVuY291bnRlcmVkLCByZWZlcmVuY2VkIGJ5IHJvb3RQYXRoXG4gICAgICovXG4gICAgcm9vdHM7XG4gICAgLyoqXG4gICAgICogVGhlIFBhdGggZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGlzIFBhdGhTY3VycnkncyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgICAqL1xuICAgIGN3ZDtcbiAgICAjcmVzb2x2ZUNhY2hlO1xuICAgICNyZXNvbHZlUG9zaXhDYWNoZTtcbiAgICAjY2hpbGRyZW47XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBwYXRoIGNvbXBhcmlzb25zIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRydWUgb24gRGFyd2luIGFuZCBXaW5kb3dzIHN5c3RlbXMsIGZhbHNlIGVsc2V3aGVyZS5cbiAgICAgKi9cbiAgICBub2Nhc2U7XG4gICAgI2ZzO1xuICAgIC8qKlxuICAgICAqIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG4gICAgICpcbiAgICAgKiBVc2UgUGF0aFNjdXJyeVdpbjMyLCBQYXRoU2N1cnJ5RGFyd2luLCBQYXRoU2N1cnJ5UG9zaXgsIG9yIFBhdGhTY3VycnlcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIHBhdGhJbXBsLCBzZXAsIHsgbm9jYXNlLCBjaGlsZHJlbkNhY2hlU2l6ZSA9IDE2ICogMTAyNCwgZnMgPSBkZWZhdWx0RlMsIH0gPSB7fSkge1xuICAgICAgICB0aGlzLiNmcyA9IGZzRnJvbU9wdGlvbihmcyk7XG4gICAgICAgIGlmIChjd2QgaW5zdGFuY2VvZiBVUkwgfHwgY3dkLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgY3dkID0gKDAsIG5vZGVfdXJsXzEuZmlsZVVSTFRvUGF0aCkoY3dkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvbHZlIGFuZCBzcGxpdCByb290LCBhbmQgdGhlbiBhZGQgdG8gdGhlIHN0b3JlLlxuICAgICAgICAvLyB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgY2FsbCBwYXRoLnJlc29sdmUoKVxuICAgICAgICBjb25zdCBjd2RQYXRoID0gcGF0aEltcGwucmVzb2x2ZShjd2QpO1xuICAgICAgICB0aGlzLnJvb3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5yb290UGF0aCA9IHRoaXMucGFyc2VSb290UGF0aChjd2RQYXRoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZUNhY2hlID0gbmV3IFJlc29sdmVDYWNoZSgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZSA9IG5ldyBSZXNvbHZlQ2FjaGUoKTtcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW5DYWNoZShjaGlsZHJlbkNhY2hlU2l6ZSk7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0gY3dkUGF0aC5zdWJzdHJpbmcodGhpcy5yb290UGF0aC5sZW5ndGgpLnNwbGl0KHNlcCk7XG4gICAgICAgIC8vIHJlc29sdmUoJy8nKSBsZWF2ZXMgJycsIHNwbGl0cyB0byBbJyddLCB3ZSBkb24ndCB3YW50IHRoYXQuXG4gICAgICAgIGlmIChzcGxpdC5sZW5ndGggPT09IDEgJiYgIXNwbGl0WzBdKSB7XG4gICAgICAgICAgICBzcGxpdC5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKG5vY2FzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHByb3ZpZGUgbm9jYXNlIHNldHRpbmcgdG8gUGF0aFNjdXJyeUJhc2UgY3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLm5ld1Jvb3QodGhpcy4jZnMpO1xuICAgICAgICB0aGlzLnJvb3RzW3RoaXMucm9vdFBhdGhdID0gdGhpcy5yb290O1xuICAgICAgICBsZXQgcHJldiA9IHRoaXMucm9vdDtcbiAgICAgICAgbGV0IGxlbiA9IHNwbGl0Lmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGpvaW5TZXAgPSBwYXRoSW1wbC5zZXA7XG4gICAgICAgIGxldCBhYnMgPSB0aGlzLnJvb3RQYXRoO1xuICAgICAgICBsZXQgc2F3Rmlyc3QgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHNwbGl0KSB7XG4gICAgICAgICAgICBjb25zdCBsID0gbGVuLS07XG4gICAgICAgICAgICBwcmV2ID0gcHJldi5jaGlsZChwYXJ0LCB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmU6IG5ldyBBcnJheShsKS5maWxsKCcuLicpLmpvaW4oam9pblNlcCksXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQb3NpeDogbmV3IEFycmF5KGwpLmZpbGwoJy4uJykuam9pbignLycpLFxuICAgICAgICAgICAgICAgIGZ1bGxwYXRoOiAoYWJzICs9IChzYXdGaXJzdCA/ICcnIDogam9pblNlcCkgKyBwYXJ0KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2F3Rmlyc3QgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3dkID0gcHJldjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBkZXB0aCBvZiBhIHByb3ZpZGVkIHBhdGgsIHN0cmluZywgb3IgdGhlIGN3ZFxuICAgICAqL1xuICAgIGRlcHRoKHBhdGggPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXRoID0gdGhpcy5jd2QucmVzb2x2ZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aC5kZXB0aCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNhY2hlIG9mIGNoaWxkIGVudHJpZXMuICBFeHBvc2VkIHNvIHN1YmNsYXNzZXMgY2FuIGNyZWF0ZVxuICAgICAqIGNoaWxkIFBhdGggb2JqZWN0cyBpbiBhIHBsYXRmb3JtLXNwZWNpZmljIHdheS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuQ2FjaGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBwYXRoIHN0cmluZ3MgdG8gYSByZXNvbHZlZCBzdHJpbmdcbiAgICAgKlxuICAgICAqIFNhbWUgaW50ZXJmYWNlIGFzIHJlcXVpcmUoJ3BhdGgnKS5yZXNvbHZlLlxuICAgICAqXG4gICAgICogTXVjaCBmYXN0ZXIgdGhhbiBwYXRoLnJlc29sdmUoKSB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAgKiBwYXRoLCBiZWNhdXNlIHRoZSByZXNvbHZlZCBQYXRoIG9iamVjdHMgYXJlIGNhY2hlZC4gIE11Y2ggc2xvd2VyXG4gICAgICogb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHJlc29sdmUoLi4ucGF0aHMpIHtcbiAgICAgICAgLy8gZmlyc3QgZmlndXJlIG91dCB0aGUgbWluaW11bSBudW1iZXIgb2YgcGF0aHMgd2UgaGF2ZSB0byB0ZXN0XG4gICAgICAgIC8vIHdlIGFsd2F5cyBzdGFydCBhdCBjd2QsIGJ1dCBhbnkgYWJzb2x1dGVzIHdpbGwgYnVtcCB0aGUgc3RhcnRcbiAgICAgICAgbGV0IHIgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcGF0aHNbaV07XG4gICAgICAgICAgICBpZiAoIXAgfHwgcCA9PT0gJy4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgciA9IHIgPyBgJHtwfS8ke3J9YCA6IHA7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKHApKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jcmVzb2x2ZUNhY2hlLmdldChyKTtcbiAgICAgICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3dkLnJlc29sdmUocikuZnVsbHBhdGgoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZUNhY2hlLnNldChyLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIG9uZSBvciBtb3JlIHBhdGggc3RyaW5ncyB0byBhIHJlc29sdmVkIHN0cmluZywgcmV0dXJuaW5nXG4gICAgICogdGhlIHBvc2l4IHBhdGguICBJZGVudGljYWwgdG8gLnJlc29sdmUoKSBvbiBwb3NpeCBzeXN0ZW1zLCBidXQgb25cbiAgICAgKiB3aW5kb3dzIHdpbGwgcmV0dXJuIGEgZm9yd2FyZC1zbGFzaCBzZXBhcmF0ZWQgVU5DIHBhdGguXG4gICAgICpcbiAgICAgKiBTYW1lIGludGVyZmFjZSBhcyByZXF1aXJlKCdwYXRoJykucmVzb2x2ZS5cbiAgICAgKlxuICAgICAqIE11Y2ggZmFzdGVyIHRoYW4gcGF0aC5yZXNvbHZlKCkgd2hlbiBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lXG4gICAgICogcGF0aCwgYmVjYXVzZSB0aGUgcmVzb2x2ZWQgUGF0aCBvYmplY3RzIGFyZSBjYWNoZWQuICBNdWNoIHNsb3dlclxuICAgICAqIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICByZXNvbHZlUG9zaXgoLi4ucGF0aHMpIHtcbiAgICAgICAgLy8gZmlyc3QgZmlndXJlIG91dCB0aGUgbWluaW11bSBudW1iZXIgb2YgcGF0aHMgd2UgaGF2ZSB0byB0ZXN0XG4gICAgICAgIC8vIHdlIGFsd2F5cyBzdGFydCBhdCBjd2QsIGJ1dCBhbnkgYWJzb2x1dGVzIHdpbGwgYnVtcCB0aGUgc3RhcnRcbiAgICAgICAgbGV0IHIgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcGF0aHNbaV07XG4gICAgICAgICAgICBpZiAoIXAgfHwgcCA9PT0gJy4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgciA9IHIgPyBgJHtwfS8ke3J9YCA6IHA7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKHApKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUuZ2V0KHIpO1xuICAgICAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jd2QucmVzb2x2ZShyKS5mdWxscGF0aFBvc2l4KCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlLnNldChyLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCB0byB0aGUgc3VwcGxpZWQgcGF0aCBzdHJpbmcgb3IgZW50cnlcbiAgICAgKi9cbiAgICByZWxhdGl2ZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5yZWxhdGl2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCB0byB0aGUgc3VwcGxpZWQgcGF0aCBzdHJpbmcgb3JcbiAgICAgKiBlbnRyeSwgdXNpbmcgLyBhcyB0aGUgcGF0aCBkZWxpbWl0ZXIsIGV2ZW4gb24gV2luZG93cy5cbiAgICAgKi9cbiAgICByZWxhdGl2ZVBvc2l4KGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LnJlbGF0aXZlUG9zaXgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBiYXNlbmFtZSBmb3IgdGhlIHByb3ZpZGVkIHN0cmluZyBvciBQYXRoIG9iamVjdFxuICAgICAqL1xuICAgIGJhc2VuYW1lKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5Lm5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgZGlybmFtZSBmb3IgdGhlIHByb3ZpZGVkIHN0cmluZyBvciBQYXRoIG9iamVjdFxuICAgICAqL1xuICAgIGRpcm5hbWUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGVudHJ5LnBhcmVudCB8fCBlbnRyeSkuZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZGRpcihlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZW50cnkuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwID0gYXdhaXQgZW50cnkucmVhZGRpcigpO1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBwIDogcC5tYXAoZSA9PiBlLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRkaXJTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZW50cnkuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2l0aEZpbGVUeXBlcykge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnJlYWRkaXJTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkucmVhZGRpclN5bmMoKS5tYXAoZSA9PiBlLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgbHN0YXQoKSBvbiB0aGUgc3RyaW5nIG9yIFBhdGggb2JqZWN0LCBhbmQgdXBkYXRlIGFsbCBrbm93blxuICAgICAqIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGRldGVybWluZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdW5saWtlIGBmcy5sc3RhdCgpYCwgdGhlIHJldHVybmVkIHZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc29tZVxuICAgICAqIGluZm9ybWF0aW9uLCBzdWNoIGFzIGBtb2RlYCwgYGRldmAsIGBubGlua2AsIGFuZCBgaW5vYC4gIElmIHRoYXRcbiAgICAgKiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCwgeW91IHdpbGwgbmVlZCB0byBjYWxsIGBmcy5sc3RhdGAgeW91cnNlbGYuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCByZWZlcnMgdG8gYSBub25leGlzdGVudCBmaWxlLCBvciBpZiB0aGUgbHN0YXQgY2FsbCBmYWlscyBmb3JcbiAgICAgKiBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSB0aGUgdXBkYXRlZCBQYXRoIG9iamVjdCBpc1xuICAgICAqIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGxzdGF0KGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LmxzdGF0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5sc3RhdH1cbiAgICAgKi9cbiAgICBsc3RhdFN5bmMoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubHN0YXRTeW5jKCk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWRsaW5rKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gYXdhaXQgZW50cnkucmVhZGxpbmsoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgcmVhZGxpbmtTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gZW50cnkucmVhZGxpbmtTeW5jKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWxwYXRoKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gYXdhaXQgZW50cnkucmVhbHBhdGgoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgcmVhbHBhdGhTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gZW50cnkucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIGFzeW5jIHdhbGsoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHdhbGsgPSAoZGlyLCBjYikgPT4ge1xuICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgIGRpci5yZWFkZGlyQ0IoKGVyLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYihlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgbGV0IGxlbiA9IGVudHJpZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICghbGVuKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoLS1sZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sbG93ICYmIGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5yZWFscGF0aCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ociA9PiAocj8uaXNVbmtub3duKCkgPyByLmxzdGF0KCkgOiByKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyID0+IHI/LnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikgPyB3YWxrKHIsIG5leHQpIDogbmV4dCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrKGUsIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSk7IC8vIHphbGdvb29vb29vXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZW50cnk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHdhbGsoc3RhcnQsIGVyID0+IHtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWooZXIpO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgcmVzKHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3YWxrU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoW2VudHJ5XSk7XG4gICAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByID0gZTtcbiAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoci5pc1Vua25vd24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlycy5hZGQocik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdXBwb3J0IGZvciBgZm9yIGF3YWl0YFxuICAgICAqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5pdGVyYXRlfVxuICAgICAqXG4gICAgICogTm90ZTogQXMgb2YgTm9kZSAxOSwgdGhpcyBpcyB2ZXJ5IHNsb3csIGNvbXBhcmVkIHRvIG90aGVyIG1ldGhvZHMgb2ZcbiAgICAgKiB3YWxraW5nLiAgQ29uc2lkZXIgdXNpbmcge0BsaW5rIFBhdGhTY3VycnlCYXNlLnN0cmVhbX0gaWYgbWVtb3J5IG92ZXJoZWFkXG4gICAgICogYW5kIGJhY2twcmVzc3VyZSBhcmUgY29uY2VybnMsIG9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS53YWxrfSBpZiBub3QuXG4gICAgICovXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZSgpO1xuICAgIH1cbiAgICBpdGVyYXRlKGVudHJ5ID0gdGhpcy5jd2QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBpdGVyYXRpbmcgYXN5bmMgb3ZlciB0aGUgc3RyZWFtIGlzIHNpZ25pZmljYW50bHkgbW9yZSBwZXJmb3JtYW50LFxuICAgICAgICAvLyBlc3BlY2lhbGx5IGluIHRoZSB3YXJtLWNhY2hlIHNjZW5hcmlvLCBiZWNhdXNlIGl0IGJ1ZmZlcnMgdXAgZGlyZWN0b3J5XG4gICAgICAgIC8vIGVudHJpZXMgaW4gdGhlIGJhY2tncm91bmQgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhIHlpZWxkIGZvciBlYWNoIG9uZS5cbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0oZW50cnksIG9wdGlvbnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJdGVyYXRpbmcgb3ZlciBhIFBhdGhTY3VycnkgcGVyZm9ybXMgYSBzeW5jaHJvbm91cyB3YWxrLlxuICAgICAqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5pdGVyYXRlU3luY31cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZVN5bmMoKTtcbiAgICB9XG4gICAgKml0ZXJhdGVTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICB5aWVsZCB3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KFtlbnRyeV0pO1xuICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyLnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJzLmFkZChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RyZWFtKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gbmV3IG1pbmlwYXNzXzEuTWluaXBhc3MoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW2VudHJ5XTtcbiAgICAgICAgbGV0IHByb2Nlc3NpbmcgPSAwO1xuICAgICAgICBjb25zdCBwcm9jZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKCFwYXVzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmICghZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nKys7XG4gICAgICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvblJlYWRkaXIgPSAoZXIsIGVudHJpZXMsIGRpZFJlYWxwYXRocyA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGxvdyAmJiAhZGlkUmVhbHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlYWxwYXRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyKSA9PiByPy5pc1Vua25vd24oKSA/IHIubHN0YXQoKSA6IHIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4gb25SZWFkZGlyKG51bGwsIGVudHJpZXMsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICYmICghZmlsdGVyIHx8IGZpbHRlcihlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmctLTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXVzZWQgJiYgIXJlc3VsdHMuZmxvd2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5vbmNlKCdkcmFpbicsIHByb2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIHphbGdvIGNvbnRhaW5tZW50XG4gICAgICAgICAgICAgICAgbGV0IHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRpci5yZWFkZGlyQ0Iob25SZWFkZGlyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgbWluaXBhc3NfMS5NaW5pcGFzcyh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVldWUgPSBbZW50cnldO1xuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IDA7XG4gICAgICAgIGNvbnN0IHByb2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcrKztcbiAgICAgICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmctLTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaChyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXVzZWQgJiYgIXJlc3VsdHMuZmxvd2luZylcbiAgICAgICAgICAgICAgICByZXN1bHRzLm9uY2UoJ2RyYWluJywgcHJvY2Vzcyk7XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGNoZGlyKHBhdGggPSB0aGlzLmN3ZCkge1xuICAgICAgICBjb25zdCBvbGRDd2QgPSB0aGlzLmN3ZDtcbiAgICAgICAgdGhpcy5jd2QgPSB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyB0aGlzLmN3ZC5yZXNvbHZlKHBhdGgpIDogcGF0aDtcbiAgICAgICAgdGhpcy5jd2Rbc2V0QXNDd2RdKG9sZEN3ZCk7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoU2N1cnJ5QmFzZSA9IFBhdGhTY3VycnlCYXNlO1xuLyoqXG4gKiBXaW5kb3dzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBQYXRoU2N1cnJ5QmFzZX1cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlIGluc2Vuc2l0dmUsIHVzZXMgYCdcXFxcJ2AgdG8gZ2VuZXJhdGUgcGF0aCBzdHJpbmdzLiAgVXNlc1xuICoge0BsaW5rIFBhdGhXaW4zMn0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeVdpbjMyIGV4dGVuZHMgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnXFxcXCc7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCBub2RlX3BhdGhfMS53aW4zMiwgJ1xcXFwnLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIGZvciAobGV0IHAgPSB0aGlzLmN3ZDsgcDsgcCA9IHAucGFyZW50KSB7XG4gICAgICAgICAgICBwLm5vY2FzZSA9IHRoaXMubm9jYXNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcnNlUm9vdFBhdGgoZGlyKSB7XG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2luZ2xlIHNlcGFyYXRvciwgaXQncyBub3QgYSBVTkMsIGFuZCB3ZSdsbFxuICAgICAgICAvLyBqdXN0IGdldCBzZXBhcmF0b3IgYXMgdGhlIHJvb3QsIGFuZCBkcml2ZUZyb21VTkMgd2lsbCByZXR1cm4gXFxcbiAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCBtb3VudCBcXCBvbiB0aGUgcm9vdCBmcm9tIHRoZSBjd2QuXG4gICAgICAgIHJldHVybiBub2RlX3BhdGhfMS53aW4zMi5wYXJzZShkaXIpLnJvb3QudG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Um9vdChmcykge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhXaW4zMih0aGlzLnJvb3RQYXRoLCBJRkRJUiwgdW5kZWZpbmVkLCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIHsgZnMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwcm92aWRlZCBwYXRoIHN0cmluZyBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICovXG4gICAgaXNBYnNvbHV0ZShwKSB7XG4gICAgICAgIHJldHVybiAocC5zdGFydHNXaXRoKCcvJykgfHwgcC5zdGFydHNXaXRoKCdcXFxcJykgfHwgL15bYS16XTooXFwvfFxcXFwpL2kudGVzdChwKSk7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoU2N1cnJ5V2luMzIgPSBQYXRoU2N1cnJ5V2luMzI7XG4vKipcbiAqIHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIGFsbCBwb3NpeCBzeXN0ZW1zIG90aGVyIHRoYW4gRGFyd2luLlxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2Utc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2VzIGAnLydgIHRvIGdlbmVyYXRlIHBhdGggc3RyaW5ncy5cbiAqXG4gKiBVc2VzIHtAbGluayBQYXRoUG9zaXh9IGZvciBQYXRoIG9iamVjdHMuXG4gKi9cbmNsYXNzIFBhdGhTY3VycnlQb3NpeCBleHRlbmRzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJy8nO1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIG9wdHMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IG5vY2FzZSA9IGZhbHNlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIG5vZGVfcGF0aF8xLnBvc2l4LCAnLycsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyc2VSb290UGF0aChfZGlyKSB7XG4gICAgICAgIHJldHVybiAnLyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld1Jvb3QoZnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoUG9zaXgodGhpcy5yb290UGF0aCwgSUZESVIsIHVuZGVmaW5lZCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCB7IGZzIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgcGF0aCBzdHJpbmcgaXMgYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUocCkge1xuICAgICAgICByZXR1cm4gcC5zdGFydHNXaXRoKCcvJyk7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoU2N1cnJ5UG9zaXggPSBQYXRoU2N1cnJ5UG9zaXg7XG4vKipcbiAqIHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIERhcndpbiAobWFjT1MpIHN5c3RlbXMuXG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZywgdXNlcyBgJy8nYCBmb3IgZ2VuZXJhdGluZyBwYXRoXG4gKiBzdHJpbmdzLlxuICpcbiAqIFVzZXMge0BsaW5rIFBhdGhQb3NpeH0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeURhcndpbiBleHRlbmRzIFBhdGhTY3VycnlQb3NpeCB7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlEYXJ3aW4gPSBQYXRoU2N1cnJ5RGFyd2luO1xuLyoqXG4gKiBEZWZhdWx0IHtAbGluayBQYXRoQmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIHtAbGluayBQYXRoV2luMzJ9IG9uIFdpbmRvd3Mgc3lzdGVtcywge0BsaW5rIFBhdGhQb3NpeH0gb24gYWxsIG90aGVycy5cbiAqL1xuZXhwb3J0cy5QYXRoID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhXaW4zMiA6IFBhdGhQb3NpeDtcbi8qKlxuICogRGVmYXVsdCB7QGxpbmsgUGF0aFNjdXJyeUJhc2V9IGltcGxlbWVudGF0aW9uIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiB7QGxpbmsgUGF0aFNjdXJyeVdpbjMyfSBvbiBXaW5kb3dzIHN5c3RlbXMsIHtAbGluayBQYXRoU2N1cnJ5RGFyd2lufSBvblxuICogRGFyd2luIChtYWNPUykgc3lzdGVtcywge0BsaW5rIFBhdGhTY3VycnlQb3NpeH0gb24gYWxsIG90aGVycy5cbiAqL1xuZXhwb3J0cy5QYXRoU2N1cnJ5ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhTY3VycnlXaW4zMlxuICAgIDogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyBQYXRoU2N1cnJ5RGFyd2luXG4gICAgICAgIDogUGF0aFNjdXJyeVBvc2l4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIHRoaXMgaXMganVzdCBhIHZlcnkgbGlnaHQgd3JhcHBlciBhcm91bmQgMiBhcnJheXMgd2l0aCBhbiBvZmZzZXQgaW5kZXhcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGF0dGVybiA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IGlzUGF0dGVybkxpc3QgPSAocGwpID0+IHBsLmxlbmd0aCA+PSAxO1xuY29uc3QgaXNHbG9iTGlzdCA9IChnbCkgPT4gZ2wubGVuZ3RoID49IDE7XG4vKipcbiAqIEFuIGltbXV0YWJsZS1pc2ggdmlldyBvbiBhbiBhcnJheSBvZiBnbG9iIHBhcnRzIGFuZCB0aGVpciBwYXJzZWRcbiAqIHJlc3VsdHNcbiAqL1xuY2xhc3MgUGF0dGVybiB7XG4gICAgI3BhdHRlcm5MaXN0O1xuICAgICNnbG9iTGlzdDtcbiAgICAjaW5kZXg7XG4gICAgbGVuZ3RoO1xuICAgICNwbGF0Zm9ybTtcbiAgICAjcmVzdDtcbiAgICAjZ2xvYlN0cmluZztcbiAgICAjaXNEcml2ZTtcbiAgICAjaXNVTkM7XG4gICAgI2lzQWJzb2x1dGU7XG4gICAgI2ZvbGxvd0dsb2JzdGFyID0gdHJ1ZTtcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuTGlzdCwgZ2xvYkxpc3QsIGluZGV4LCBwbGF0Zm9ybSkge1xuICAgICAgICBpZiAoIWlzUGF0dGVybkxpc3QocGF0dGVybkxpc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbXB0eSBwYXR0ZXJuIGxpc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzR2xvYkxpc3QoZ2xvYkxpc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbXB0eSBnbG9iIGxpc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2xvYkxpc3QubGVuZ3RoICE9PSBwYXR0ZXJuTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc21hdGNoZWQgcGF0dGVybiBsaXN0IGFuZCBnbG9iIGxpc3QgbGVuZ3RocycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVuZ3RoID0gcGF0dGVybkxpc3QubGVuZ3RoO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNwYXR0ZXJuTGlzdCA9IHBhdHRlcm5MaXN0O1xuICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IGdsb2JMaXN0O1xuICAgICAgICB0aGlzLiNpbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9IHBsYXRmb3JtO1xuICAgICAgICAvLyBub3JtYWxpemUgcm9vdCBlbnRyaWVzIG9mIGFic29sdXRlIHBhdHRlcm5zIG9uIGluaXRpYWwgY3JlYXRpb24uXG4gICAgICAgIGlmICh0aGlzLiNpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gYzogPT4gWydjOi8nXVxuICAgICAgICAgICAgLy8gQzovID0+IFsnQzovJ11cbiAgICAgICAgICAgIC8vIEM6L3ggPT4gWydDOi8nLCAneCddXG4gICAgICAgICAgICAvLyAvL2hvc3Qvc2hhcmUgPT4gWycvL2hvc3Qvc2hhcmUvJ11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZS8gPT4gWycvL2hvc3Qvc2hhcmUvJ11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZS94ID0+IFsnLy9ob3N0L3NoYXJlLycsICd4J11cbiAgICAgICAgICAgIC8vIC9ldGMgPT4gWycvJywgJ2V0YyddXG4gICAgICAgICAgICAvLyAvID0+IFsnLyddXG4gICAgICAgICAgICBpZiAodGhpcy5pc1VOQygpKSB7XG4gICAgICAgICAgICAgICAgLy8gJycgLyAnJyAvICdob3N0JyAvICdzaGFyZSdcbiAgICAgICAgICAgICAgICBjb25zdCBbcDAsIHAxLCBwMiwgcDMsIC4uLnByZXN0XSA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IFtnMCwgZzEsIGcyLCBnMywgLi4uZ3Jlc3RdID0gdGhpcy4jZ2xvYkxpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHByZXN0WzBdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbmRzIGluIC9cbiAgICAgICAgICAgICAgICAgICAgcHJlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZ3Jlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFtwMCwgcDEsIHAyLCBwMywgJyddLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gW2cwLCBnMSwgZzIsIGczLCAnJ10uam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gW3AsIC4uLnByZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IFtnLCAuLi5ncmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLiNwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzRHJpdmUoKSB8fCB0aGlzLmlzQWJzb2x1dGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwMSwgLi4ucHJlc3RdID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgW2cxLCAuLi5ncmVzdF0gPSB0aGlzLiNnbG9iTGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocHJlc3RbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgaW4gL1xuICAgICAgICAgICAgICAgICAgICBwcmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBncmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcDEgKyAnLyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZyA9IGcxICsgJy8nO1xuICAgICAgICAgICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gW3AsIC4uLnByZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IFtnLCAuLi5ncmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLiNwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYXJzZWQgbGlzdCBvZiBwYXR0ZXJuc1xuICAgICAqL1xuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgb2YgaWYgcGF0dGVybigpIHJldHVybnMgYSBzdHJpbmdcbiAgICAgKi9cbiAgICBpc1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF0gPT09ICdzdHJpbmcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIG9mIGlmIHBhdHRlcm4oKSByZXR1cm5zIEdMT0JTVEFSXG4gICAgICovXG4gICAgaXNHbG9ic3RhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSA9PT0gbWluaW1hdGNoXzEuR0xPQlNUQVI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgcGF0dGVybigpIHJldHVybnMgYSByZWdleHBcbiAgICAgKi9cbiAgICBpc1JlZ0V4cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSBpbnN0YW5jZW9mIFJlZ0V4cDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIC8tam9pbmVkIHNldCBvZiBnbG9iIHBhcnRzIHRoYXQgbWFrZSB1cCB0aGlzIHBhdHRlcm5cbiAgICAgKi9cbiAgICBnbG9iU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI2dsb2JTdHJpbmcgPVxuICAgICAgICAgICAgdGhpcy4jZ2xvYlN0cmluZyB8fFxuICAgICAgICAgICAgICAgICh0aGlzLiNpbmRleCA9PT0gMCA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBYnNvbHV0ZSgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0WzBdICsgdGhpcy4jZ2xvYkxpc3Quc2xpY2UoMSkuam9pbignLycpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI2dsb2JMaXN0LmpvaW4oJy8nKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI2dsb2JMaXN0LnNsaWNlKHRoaXMuI2luZGV4KS5qb2luKCcvJykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGVyZSBhcmUgbW9yZSBwYXR0ZXJuIHBhcnRzIGFmdGVyIHRoaXMgb25lXG4gICAgICovXG4gICAgaGFzTW9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gdGhpcy4jaW5kZXggKyAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlciB0aGlzIHBhcnQsIG9yIG51bGwgaWYgdGhpcyBpcyB0aGUgZW5kXG4gICAgICovXG4gICAgcmVzdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jlc3QgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZXN0O1xuICAgICAgICBpZiAoIXRoaXMuaGFzTW9yZSgpKVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZXN0ID0gbnVsbCk7XG4gICAgICAgIHRoaXMuI3Jlc3QgPSBuZXcgUGF0dGVybih0aGlzLiNwYXR0ZXJuTGlzdCwgdGhpcy4jZ2xvYkxpc3QsIHRoaXMuI2luZGV4ICsgMSwgdGhpcy4jcGxhdGZvcm0pO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc0Fic29sdXRlID0gdGhpcy4jaXNBYnNvbHV0ZTtcbiAgICAgICAgdGhpcy4jcmVzdC4jaXNVTkMgPSB0aGlzLiNpc1VOQztcbiAgICAgICAgdGhpcy4jcmVzdC4jaXNEcml2ZSA9IHRoaXMuI2lzRHJpdmU7XG4gICAgICAgIHJldHVybiB0aGlzLiNyZXN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBwYXR0ZXJuIHJlcHJlc2VudHMgYSAvL3VuYy9wYXRoLyBvbiB3aW5kb3dzXG4gICAgICovXG4gICAgaXNVTkMoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc1VOQyAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMuI2lzVU5DXG4gICAgICAgICAgICA6ICh0aGlzLiNpc1VOQyA9XG4gICAgICAgICAgICAgICAgdGhpcy4jcGxhdGZvcm0gPT09ICd3aW4zMicgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5kZXggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcGxbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHBsWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbMl0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICEhcGxbMl0gJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAhIXBsWzNdKTtcbiAgICB9XG4gICAgLy8gcGF0dGVybiBsaWtlIEM6Ly4uLlxuICAgIC8vIHNwbGl0ID0gWydDOicsIC4uLl1cbiAgICAvLyBYWFg6IHdvdWxkIGJlIG5pY2UgdG8gaGFuZGxlIHBhdHRlcm5zIGxpa2UgYGM6KmAgdG8gdGVzdCB0aGUgY3dkXG4gICAgLy8gaW4gYzogZm9yICosIGJ1dCBJIGRvbid0IGtub3cgb2YgYSB3YXkgdG8gZXZlbiBmaWd1cmUgb3V0IHdoYXQgdGhhdFxuICAgIC8vIGN3ZCBpcyB3aXRob3V0IGFjdHVhbGx5IGNoZGlyJ2luZyBpbnRvIGl0P1xuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBkcml2ZSBsZXR0ZXIgb24gV2luZG93c1xuICAgICAqL1xuICAgIGlzRHJpdmUoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0RyaXZlICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNEcml2ZVxuICAgICAgICAgICAgOiAodGhpcy4jaXNEcml2ZSA9XG4gICAgICAgICAgICAgICAgdGhpcy4jcGxhdGZvcm0gPT09ICd3aW4zMicgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5kZXggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFswXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgL15bYS16XTokL2kudGVzdChwbFswXSkpO1xuICAgIH1cbiAgICAvLyBwYXR0ZXJuID0gJy8nIG9yICcvLi4uJyBvciAnL3gvLi4uJ1xuICAgIC8vIHNwbGl0ID0gWycnLCAnJ10gb3IgWycnLCAuLi5dIG9yIFsnJywgJ3gnLCAuLi5dXG4gICAgLy8gRHJpdmUgYW5kIFVOQyBib3RoIGNvbnNpZGVyZWQgYWJzb2x1dGUgb24gd2luZG93c1xuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHBhdHRlcm4gaXMgcm9vdGVkIG9uIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKCkge1xuICAgICAgICBjb25zdCBwbCA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNBYnNvbHV0ZSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMuI2lzQWJzb2x1dGVcbiAgICAgICAgICAgIDogKHRoaXMuI2lzQWJzb2x1dGUgPVxuICAgICAgICAgICAgICAgIChwbFswXSA9PT0gJycgJiYgcGwubGVuZ3RoID4gMSkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RyaXZlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1VOQygpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY29uc3VtZSB0aGUgcm9vdCBvZiB0aGUgcGF0dGVybiwgYW5kIHJldHVybiBpdFxuICAgICAqL1xuICAgIHJvb3QoKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLiNwYXR0ZXJuTGlzdFswXTtcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgcCA9PT0gJ3N0cmluZycgJiYgdGhpcy5pc0Fic29sdXRlKCkgJiYgdGhpcy4jaW5kZXggPT09IDApID9cbiAgICAgICAgICAgIHBcbiAgICAgICAgICAgIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBnbG9ic3RhciBwYXR0ZXJuIGlzIGFsbG93ZWQgdG8gZm9sbG93XG4gICAgICogYSBzeW1ib2xpYyBsaW5rLlxuICAgICAqL1xuICAgIGNoZWNrRm9sbG93R2xvYnN0YXIoKSB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuI2luZGV4ID09PSAwIHx8XG4gICAgICAgICAgICAhdGhpcy5pc0dsb2JzdGFyKCkgfHxcbiAgICAgICAgICAgICF0aGlzLiNmb2xsb3dHbG9ic3Rhcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmsgdGhhdCB0aGUgY3VycmVudCBnbG9ic3RhciBwYXR0ZXJuIGlzIGZvbGxvd2luZyBhIHN5bWJvbGljIGxpbmtcbiAgICAgKi9cbiAgICBtYXJrRm9sbG93R2xvYnN0YXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiNpbmRleCA9PT0gMCB8fCAhdGhpcy5pc0dsb2JzdGFyKCkgfHwgIXRoaXMuI2ZvbGxvd0dsb2JzdGFyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLiNmb2xsb3dHbG9ic3RhciA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnRzLlBhdHRlcm4gPSBQYXR0ZXJuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gZ2l2ZSBpdCBhIHBhdHRlcm4sIGFuZCBpdCdsbCBiZSBhYmxlIHRvIHRlbGwgeW91IGlmXG4vLyBhIGdpdmVuIHBhdGggc2hvdWxkIGJlIGlnbm9yZWQuXG4vLyBJZ25vcmluZyBhIHBhdGggaWdub3JlcyBpdHMgY2hpbGRyZW4gaWYgdGhlIHBhdHRlcm4gZW5kcyBpbiAvKipcbi8vIElnbm9yZXMgYXJlIGFsd2F5cyBwYXJzZWQgaW4gZG90OnRydWUgbW9kZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JZ25vcmUgPSB2b2lkIDA7XG5jb25zdCBtaW5pbWF0Y2hfMSA9IHJlcXVpcmUoXCJtaW5pbWF0Y2hcIik7XG5jb25zdCBwYXR0ZXJuX2pzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuLmpzXCIpO1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpID9cbiAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAnbGludXgnO1xuLyoqXG4gKiBDbGFzcyB1c2VkIHRvIHByb2Nlc3MgaWdub3JlZCBwYXR0ZXJuc1xuICovXG5jbGFzcyBJZ25vcmUge1xuICAgIHJlbGF0aXZlO1xuICAgIHJlbGF0aXZlQ2hpbGRyZW47XG4gICAgYWJzb2x1dGU7XG4gICAgYWJzb2x1dGVDaGlsZHJlbjtcbiAgICBwbGF0Zm9ybTtcbiAgICBtbW9wdHM7XG4gICAgY29uc3RydWN0b3IoaWdub3JlZCwgeyBub2JyYWNlLCBub2Nhc2UsIG5vZXh0LCBub2dsb2JzdGFyLCBwbGF0Zm9ybSA9IGRlZmF1bHRQbGF0Zm9ybSwgfSkge1xuICAgICAgICB0aGlzLnJlbGF0aXZlID0gW107XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSBbXTtcbiAgICAgICAgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIHRoaXMubW1vcHRzID0ge1xuICAgICAgICAgICAgZG90OiB0cnVlLFxuICAgICAgICAgICAgbm9icmFjZSxcbiAgICAgICAgICAgIG5vY2FzZSxcbiAgICAgICAgICAgIG5vZXh0LFxuICAgICAgICAgICAgbm9nbG9ic3RhcixcbiAgICAgICAgICAgIG9wdGltaXphdGlvbkxldmVsOiAyLFxuICAgICAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgICAgICBub2NvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBub25lZ2F0ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBpZ24gb2YgaWdub3JlZClcbiAgICAgICAgICAgIHRoaXMuYWRkKGlnbik7XG4gICAgfVxuICAgIGFkZChpZ24pIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IGl0IGdpdmVzIHVzIGEgY2xlYW4gc2V0IG9mIG9wdGltaXplZFxuICAgICAgICAvLyBtaW5pbWF0Y2ggbWF0Y2hlcnMsIHdpdGhvdXQgZ2V0dGluZyB0cmlwcGVkIHVwIGlmIG9uZSBvZiB0aGVtXG4gICAgICAgIC8vIGVuZHMgaW4gLyoqIGluc2lkZSBhIGJyYWNlIHNlY3Rpb24sIGFuZCBpdCdzIG9ubHkgaW5lZmZpY2llbnQgYXRcbiAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSB3YWxrLCBub3QgYWxvbmcgaXQuXG4gICAgICAgIC8vIEl0J2QgYmUgbmljZSBpZiB0aGUgUGF0dGVybiBjbGFzcyBqdXN0IGhhZCBhIC50ZXN0KCkgbWV0aG9kLCBidXRcbiAgICAgICAgLy8gaGFuZGxpbmcgZ2xvYnN0YXJzIGlzIGEgYml0IG9mIGEgcGl0YSwgYW5kIHRoYXQgY29kZSBhbHJlYWR5IGxpdmVzXG4gICAgICAgIC8vIGluIG1pbmltYXRjaCBhbnl3YXkuXG4gICAgICAgIC8vIEFub3RoZXIgd2F5IHdvdWxkIGJlIGlmIG1heWJlIE1pbmltYXRjaCBjb3VsZCB0YWtlIGl0cyBzZXQvZ2xvYlBhcnRzXG4gICAgICAgIC8vIGFzIGFuIG9wdGlvbiwgYW5kIHRoZW4gd2UgY291bGQgYXQgbGVhc3QganVzdCB1c2UgUGF0dGVybiB0byB0ZXN0XG4gICAgICAgIC8vIGZvciBhYnNvbHV0ZS1uZXNzLlxuICAgICAgICAvLyBZZXQgYW5vdGhlciB3YXksIE1pbmltYXRjaCBjb3VsZCB0YWtlIGFuIGFycmF5IG9mIGdsb2Igc3RyaW5ncywgYW5kXG4gICAgICAgIC8vIGEgY3dkIG9wdGlvbiwgYW5kIGRvIHRoZSByaWdodCB0aGluZy5cbiAgICAgICAgY29uc3QgbW0gPSBuZXcgbWluaW1hdGNoXzEuTWluaW1hdGNoKGlnbiwgdGhpcy5tbW9wdHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1tLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbW0uc2V0W2ldO1xuICAgICAgICAgICAgY29uc3QgZ2xvYlBhcnRzID0gbW0uZ2xvYlBhcnRzW2ldO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIXBhcnNlZCB8fCAhZ2xvYlBhcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhdHRlcm4gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzdHJpcCBvZmYgbGVhZGluZyAuLyBwb3J0aW9uc1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzU3MFxuICAgICAgICAgICAgd2hpbGUgKHBhcnNlZFswXSA9PT0gJy4nICYmIGdsb2JQYXJ0c1swXSA9PT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgY29uc3QgcCA9IG5ldyBwYXR0ZXJuX2pzXzEuUGF0dGVybihwYXJzZWQsIGdsb2JQYXJ0cywgMCwgdGhpcy5wbGF0Zm9ybSk7XG4gICAgICAgICAgICBjb25zdCBtID0gbmV3IG1pbmltYXRjaF8xLk1pbmltYXRjaChwLmdsb2JTdHJpbmcoKSwgdGhpcy5tbW9wdHMpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBnbG9iUGFydHNbZ2xvYlBhcnRzLmxlbmd0aCAtIDFdID09PSAnKionO1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwLmlzQWJzb2x1dGUoKTtcbiAgICAgICAgICAgIGlmIChhYnNvbHV0ZSlcbiAgICAgICAgICAgICAgICB0aGlzLmFic29sdXRlLnB1c2gobSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZS5wdXNoKG0pO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFic29sdXRlKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFic29sdXRlQ2hpbGRyZW4ucHVzaChtKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVDaGlsZHJlbi5wdXNoKG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlnbm9yZWQocCkge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHAuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgZnVsbHBhdGhzID0gYCR7ZnVsbHBhdGh9L2A7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gcC5yZWxhdGl2ZSgpIHx8ICcuJztcbiAgICAgICAgY29uc3QgcmVsYXRpdmVzID0gYCR7cmVsYXRpdmV9L2A7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnJlbGF0aXZlKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChyZWxhdGl2ZSkgfHwgbS5tYXRjaChyZWxhdGl2ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLmFic29sdXRlKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChmdWxscGF0aCkgfHwgbS5tYXRjaChmdWxscGF0aHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2hpbGRyZW5JZ25vcmVkKHApIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSBwLmZ1bGxwYXRoKCkgKyAnLyc7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gKHAucmVsYXRpdmUoKSB8fCAnLicpICsgJy8nO1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChyZWxhdGl2ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMuYWJzb2x1dGVDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKG0ubWF0Y2goZnVsbHBhdGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLklnbm9yZSA9IElnbm9yZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlnbm9yZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gc3luY2hyb25vdXMgdXRpbGl0eSBmb3IgZmlsdGVyaW5nIGVudHJpZXMgYW5kIGNhbGN1bGF0aW5nIHN1YndhbGtzXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlByb2Nlc3NvciA9IGV4cG9ydHMuU3ViV2Fsa3MgPSBleHBvcnRzLk1hdGNoUmVjb3JkID0gZXhwb3J0cy5IYXNXYWxrZWRDYWNoZSA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbi8qKlxuICogQSBjYWNoZSBvZiB3aGljaCBwYXR0ZXJucyBoYXZlIGJlZW4gcHJvY2Vzc2VkIGZvciBhIGdpdmVuIFBhdGhcbiAqL1xuY2xhc3MgSGFzV2Fsa2VkQ2FjaGUge1xuICAgIHN0b3JlO1xuICAgIGNvbnN0cnVjdG9yKHN0b3JlID0gbmV3IE1hcCgpKSB7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICB9XG4gICAgY29weSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIYXNXYWxrZWRDYWNoZShuZXcgTWFwKHRoaXMuc3RvcmUpKTtcbiAgICB9XG4gICAgaGFzV2Fsa2VkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXQodGFyZ2V0LmZ1bGxwYXRoKCkpPy5oYXMocGF0dGVybi5nbG9iU3RyaW5nKCkpO1xuICAgIH1cbiAgICBzdG9yZVdhbGtlZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0YXJnZXQuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zdG9yZS5nZXQoZnVsbHBhdGgpO1xuICAgICAgICBpZiAoY2FjaGVkKVxuICAgICAgICAgICAgY2FjaGVkLmFkZChwYXR0ZXJuLmdsb2JTdHJpbmcoKSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KGZ1bGxwYXRoLCBuZXcgU2V0KFtwYXR0ZXJuLmdsb2JTdHJpbmcoKV0pKTtcbiAgICB9XG59XG5leHBvcnRzLkhhc1dhbGtlZENhY2hlID0gSGFzV2Fsa2VkQ2FjaGU7XG4vKipcbiAqIEEgcmVjb3JkIG9mIHdoaWNoIHBhdGhzIGhhdmUgYmVlbiBtYXRjaGVkIGluIGEgZ2l2ZW4gd2FsayBzdGVwLFxuICogYW5kIHdoZXRoZXIgdGhleSBvbmx5IGFyZSBjb25zaWRlcmVkIGEgbWF0Y2ggaWYgdGhleSBhcmUgYSBkaXJlY3RvcnksXG4gKiBhbmQgd2hldGhlciB0aGVpciBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHNob3VsZCBiZSByZXR1cm5lZC5cbiAqL1xuY2xhc3MgTWF0Y2hSZWNvcmQge1xuICAgIHN0b3JlID0gbmV3IE1hcCgpO1xuICAgIGFkZCh0YXJnZXQsIGFic29sdXRlLCBpZkRpcikge1xuICAgICAgICBjb25zdCBuID0gKGFic29sdXRlID8gMiA6IDApIHwgKGlmRGlyID8gMSA6IDApO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0LCBjdXJyZW50ID09PSB1bmRlZmluZWQgPyBuIDogbiAmIGN1cnJlbnQpO1xuICAgIH1cbiAgICAvLyBtYXRjaCwgYWJzb2x1dGUsIGlmZGlyXG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnN0b3JlLmVudHJpZXMoKV0ubWFwKChbcGF0aCwgbl0pID0+IFtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAhIShuICYgMiksXG4gICAgICAgICAgICAhIShuICYgMSksXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbmV4cG9ydHMuTWF0Y2hSZWNvcmQgPSBNYXRjaFJlY29yZDtcbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHBhdHRlcm5zIHRoYXQgbXVzdCBiZSBwcm9jZXNzZWQgaW4gYSBzdWJzZXF1ZW50IHN0ZXBcbiAqIGZvciBhIGdpdmVuIHBhdGguXG4gKi9cbmNsYXNzIFN1YldhbGtzIHtcbiAgICBzdG9yZSA9IG5ldyBNYXAoKTtcbiAgICBhZGQodGFyZ2V0LCBwYXR0ZXJuKSB7XG4gICAgICAgIGlmICghdGFyZ2V0LmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgaWYgKCFzdWJzLmZpbmQocCA9PiBwLmdsb2JTdHJpbmcoKSA9PT0gcGF0dGVybi5nbG9iU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgc3Vicy5wdXNoKHBhdHRlcm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KHRhcmdldCwgW3BhdHRlcm5dKTtcbiAgICB9XG4gICAgZ2V0KHRhcmdldCkge1xuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghc3Vicykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRlbXB0aW5nIHRvIHdhbGsgdW5rbm93biBwYXRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmV0dXJuIHN1YnM7XG4gICAgfVxuICAgIGVudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmtleXMoKS5tYXAoayA9PiBbaywgdGhpcy5zdG9yZS5nZXQoayldKTtcbiAgICB9XG4gICAga2V5cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnN0b3JlLmtleXMoKV0uZmlsdGVyKHQgPT4gdC5jYW5SZWFkZGlyKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuU3ViV2Fsa3MgPSBTdWJXYWxrcztcbi8qKlxuICogVGhlIGNsYXNzIHRoYXQgcHJvY2Vzc2VzIHBhdHRlcm5zIGZvciBhIGdpdmVuIHBhdGguXG4gKlxuICogSGFuZGxlcyBjaGlsZCBlbnRyeSBmaWx0ZXJpbmcsIGFuZCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcGF0aCdzXG4gKiBkaXJlY3RvcnkgY29udGVudHMgbXVzdCBiZSByZWFkLlxuICovXG5jbGFzcyBQcm9jZXNzb3Ige1xuICAgIGhhc1dhbGtlZENhY2hlO1xuICAgIG1hdGNoZXMgPSBuZXcgTWF0Y2hSZWNvcmQoKTtcbiAgICBzdWJ3YWxrcyA9IG5ldyBTdWJXYWxrcygpO1xuICAgIHBhdHRlcm5zO1xuICAgIGZvbGxvdztcbiAgICBkb3Q7XG4gICAgb3B0cztcbiAgICBjb25zdHJ1Y3RvcihvcHRzLCBoYXNXYWxrZWRDYWNoZSkge1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLmZvbGxvdyA9ICEhb3B0cy5mb2xsb3c7XG4gICAgICAgIHRoaXMuZG90ID0gISFvcHRzLmRvdDtcbiAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZSA9XG4gICAgICAgICAgICBoYXNXYWxrZWRDYWNoZSA/IGhhc1dhbGtlZENhY2hlLmNvcHkoKSA6IG5ldyBIYXNXYWxrZWRDYWNoZSgpO1xuICAgIH1cbiAgICBwcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucykge1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NpbmdTZXQgPSBwYXR0ZXJucy5tYXAocCA9PiBbdGFyZ2V0LCBwXSk7XG4gICAgICAgIC8vIG1hcCBvZiBwYXRocyB0byB0aGUgbWFnaWMtc3RhcnRpbmcgc3Vid2Fsa3MgdGhleSBuZWVkIHRvIHdhbGtcbiAgICAgICAgLy8gZmlyc3QgaXRlbSBpbiBwYXR0ZXJucyBpcyB0aGUgZmlsdGVyXG4gICAgICAgIGZvciAobGV0IFt0LCBwYXR0ZXJuXSBvZiBwcm9jZXNzaW5nU2V0KSB7XG4gICAgICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlLnN0b3JlV2Fsa2VkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHBhdHRlcm4ucm9vdCgpO1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLmlzQWJzb2x1dGUoKSAmJiB0aGlzLm9wdHMuYWJzb2x1dGUgIT09IGZhbHNlO1xuICAgICAgICAgICAgLy8gc3RhcnQgYWJzb2x1dGUgcGF0dGVybnMgYXQgcm9vdFxuICAgICAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICAgICB0ID0gdC5yZXNvbHZlKHJvb3QgPT09ICcvJyAmJiB0aGlzLm9wdHMucm9vdCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLnJvb3RcbiAgICAgICAgICAgICAgICAgICAgOiByb290KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodCwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmlzRU5PRU5UKCkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBsZXQgcDtcbiAgICAgICAgICAgIGxldCByZXN0O1xuICAgICAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICh0eXBlb2YgKHAgPSBwYXR0ZXJuLnBhdHRlcm4oKSkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgKHJlc3QgPSBwYXR0ZXJuLnJlc3QoKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdC5yZXNvbHZlKHApO1xuICAgICAgICAgICAgICAgIHQgPSBjO1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZXN0O1xuICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcCA9IHBhdHRlcm4ucGF0dGVybigpO1xuICAgICAgICAgICAgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNXYWxrZWRDYWNoZS5oYXNXYWxrZWQodCwgcGF0dGVybikpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUuc3RvcmVXYWxrZWQodCwgcGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub3cgd2UgaGF2ZSBlaXRoZXIgYSBmaW5hbCBzdHJpbmcgZm9yIGEga25vd24gZW50cnksXG4gICAgICAgICAgICAvLyBtb3JlIHN0cmluZ3MgZm9yIGFuIHVua25vd24gZW50cnksXG4gICAgICAgICAgICAvLyBvciBhIHBhdHRlcm4gc3RhcnRpbmcgd2l0aCBtYWdpYywgbW91bnRlZCBvbiB0LlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIG11c3Qgbm90IGJlIGZpbmFsIGVudHJ5LCBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZVxuICAgICAgICAgICAgICAgIC8vIGNvbmNhdGVuYXRlZCBpdCBlYXJsaWVyLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlmRGlyID0gcCA9PT0gJy4uJyB8fCBwID09PSAnJyB8fCBwID09PSAnLic7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LnJlc29sdmUocCksIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwID09PSBtaW5pbWF0Y2hfMS5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgIC8vIGlmIG5vIHJlc3QsIG1hdGNoIGFuZCBzdWJ3YWxrIHBhdHRlcm5cbiAgICAgICAgICAgICAgICAvLyBpZiByZXN0LCBwcm9jZXNzIHJlc3QgYW5kIHN1YndhbGsgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBzeW1saW5rLCBidXQgd2UgZGlkbid0IGdldCBoZXJlIGJ5IHdheSBvZiBhXG4gICAgICAgICAgICAgICAgLy8gZ2xvYnN0YXIgbWF0Y2ggKG1lYW5pbmcgaXQncyB0aGUgZmlyc3QgdGltZSBUSElTIGdsb2JzdGFyXG4gICAgICAgICAgICAgICAgLy8gaGFzIHRyYXZlcnNlZCBhIHN5bWxpbmspLCB0aGVuIHdlIGZvbGxvdyBpdC4gT3RoZXJ3aXNlLCBzdG9wLlxuICAgICAgICAgICAgICAgIGlmICghdC5pc1N5bWJvbGljTGluaygpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sbG93IHx8XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4uY2hlY2tGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBycCA9IHJlc3Q/LnBhdHRlcm4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBycmVzdCA9IHJlc3Q/LnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3QgfHwgKChycCA9PT0gJycgfHwgcnAgPT09ICcuJykgJiYgIXJyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IEhBUyB0byBiZSBhIGRpciBpZiBpdCBlbmRzIGluICoqLyBvciAqKi8uXG4gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBlbmRpbmcgaW4gKiogd2lsbCBtYXRjaCBmaWxlcyBhcyB3ZWxsLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQsIGFic29sdXRlLCBycCA9PT0gJycgfHwgcnAgPT09ICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnAgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd291bGQgbWVhbiB5b3UncmUgbWF0Y2hpbmcgKiovLi4gYXQgdGhlIGZzIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbm8gdGhhbmtzLCBJJ20gbm90IGdvbm5hIHRlc3QgdGhhdCBzcGVjaWZpYyBjYXNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cCA9IHQucGFyZW50IHx8IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFycmVzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHRwLCBhYnNvbHV0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5oYXNXYWxrZWRDYWNoZS5oYXNXYWxrZWQodHAsIHJyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHRwLCBycmVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodCwgcGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN1YndhbGtUYXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJ3YWxrcy5rZXlzKCk7XG4gICAgfVxuICAgIGNoaWxkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb2Nlc3Nvcih0aGlzLm9wdHMsIHRoaXMuaGFzV2Fsa2VkQ2FjaGUpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gYSBuZXcgUHJvY2Vzc29yIGNvbnRhaW5pbmcgdGhlIHN1YndhbGtzIGZvciBlYWNoXG4gICAgLy8gY2hpbGQgZW50cnksIGFuZCBhIHNldCBvZiBtYXRjaGVzLCBhbmRcbiAgICAvLyBhIGhhc1dhbGtlZENhY2hlIHRoYXQncyBhIGNvcHkgb2YgdGhpcyBvbmVcbiAgICAvLyB0aGVuIHdlJ3JlIGdvaW5nIHRvIGNhbGxcbiAgICBmaWx0ZXJFbnRyaWVzKHBhcmVudCwgZW50cmllcykge1xuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IHRoaXMuc3Vid2Fsa3MuZ2V0KHBhcmVudCk7XG4gICAgICAgIC8vIHB1dCBtYXRjaGVzIGFuZCBlbnRyeSB3YWxrcyBpbnRvIHRoZSByZXN1bHRzIHByb2Nlc3NvclxuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5jaGlsZCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLmlzQWJzb2x1dGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGF0dGVybi5wYXR0ZXJuKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmIChwID09PSBtaW5pbWF0Y2hfMS5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RHbG9ic3RhcihlLCBwYXR0ZXJuLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0UmVnRXhwKGUsIHAsIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdFN0cmluZyhlLCBwLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICB0ZXN0R2xvYnN0YXIoZSwgcGF0dGVybiwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZG90IHx8ICFlLm5hbWUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4uaGFzTW9yZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgaW4gZm9sbG93IG1vZGUgb3IgaXQncyBub3QgYSBzeW1saW5rLCBqdXN0IGtlZXBcbiAgICAgICAgICAgICAgICAvLyB0ZXN0aW5nIHRoZSBzYW1lIHBhdHRlcm4uIElmIHRoZXJlJ3MgbW9yZSBhZnRlciB0aGUgZ2xvYnN0YXIsXG4gICAgICAgICAgICAgICAgLy8gdGhlbiB0aGlzIHN5bWxpbmsgY29uc3VtZXMgdGhlIGdsb2JzdGFyLiBJZiBub3QsIHRoZW4gd2UgY2FuXG4gICAgICAgICAgICAgICAgLy8gZm9sbG93IGF0IG1vc3QgT05FIHN5bWxpbmsgYWxvbmcgdGhlIHdheSwgc28gd2UgbWFyayBpdCwgd2hpY2hcbiAgICAgICAgICAgICAgICAvLyBhbHNvIGNoZWNrcyB0byBlbnN1cmUgdGhhdCBpdCB3YXNuJ3QgYWxyZWFkeSBtYXJrZWQuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9sbG93IHx8ICFlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdCAmJiBwYXR0ZXJuLmNoZWNrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGF0dGVybi5tYXJrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIE5FWFQgdGhpbmcgbWF0Y2hlcyB0aGlzIGVudHJ5LCB0aGVuIGFsc28gYWRkXG4gICAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSByZXN0LnBhdHRlcm4oKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcnAgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgLy8gZG90cyBhbmQgZW1wdHkgd2VyZSBoYW5kbGVkIGFscmVhZHlcbiAgICAgICAgICAgICAgICBycCAhPT0gJy4uJyAmJlxuICAgICAgICAgICAgICAgIHJwICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIHJwICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RTdHJpbmcoZSwgcnAsIHJlc3QucmVzdCgpLCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChycCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IGVwID0gZS5wYXJlbnQgfHwgZTtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGVwLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0UmVnRXhwKGUsIHJwLCByZXN0LnJlc3QoKSwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRlc3RSZWdFeHAoZSwgcCwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKCFwLnRlc3QoZS5uYW1lKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0ZXN0U3RyaW5nKGUsIHAsIHJlc3QsIGFic29sdXRlKSB7XG4gICAgICAgIC8vIHNob3VsZCBuZXZlciBoYXBwZW4/XG4gICAgICAgIGlmICghZS5pc05hbWVkKHApKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Qcm9jZXNzb3IgPSBQcm9jZXNzb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9jZXNzb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2xvYlN0cmVhbSA9IGV4cG9ydHMuR2xvYldhbGtlciA9IGV4cG9ydHMuR2xvYlV0aWwgPSB2b2lkIDA7XG4vKipcbiAqIFNpbmdsZS11c2UgdXRpbGl0eSBjbGFzc2VzIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eSB0byB0aGUge0BsaW5rIEdsb2J9XG4gKiBtZXRob2RzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuY29uc3QgbWluaXBhc3NfMSA9IHJlcXVpcmUoXCJtaW5pcGFzc1wiKTtcbmNvbnN0IGlnbm9yZV9qc18xID0gcmVxdWlyZShcIi4vaWdub3JlLmpzXCIpO1xuY29uc3QgcHJvY2Vzc29yX2pzXzEgPSByZXF1aXJlKFwiLi9wcm9jZXNzb3IuanNcIik7XG5jb25zdCBtYWtlSWdub3JlID0gKGlnbm9yZSwgb3B0cykgPT4gdHlwZW9mIGlnbm9yZSA9PT0gJ3N0cmluZycgPyBuZXcgaWdub3JlX2pzXzEuSWdub3JlKFtpZ25vcmVdLCBvcHRzKVxuICAgIDogQXJyYXkuaXNBcnJheShpZ25vcmUpID8gbmV3IGlnbm9yZV9qc18xLklnbm9yZShpZ25vcmUsIG9wdHMpXG4gICAgICAgIDogaWdub3JlO1xuLyoqXG4gKiBiYXNpYyB3YWxraW5nIHV0aWxpdGllcyB0aGF0IGFsbCB0aGUgZ2xvYiB3YWxrZXIgdHlwZXMgdXNlXG4gKi9cbmNsYXNzIEdsb2JVdGlsIHtcbiAgICBwYXRoO1xuICAgIHBhdHRlcm5zO1xuICAgIG9wdHM7XG4gICAgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICBhYm9ydGVkID0gZmFsc2U7XG4gICAgI29uUmVzdW1lID0gW107XG4gICAgI2lnbm9yZTtcbiAgICAjc2VwO1xuICAgIHNpZ25hbDtcbiAgICBtYXhEZXB0aDtcbiAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICAgICAgdGhpcy4jc2VwID0gIW9wdHMucG9zaXggJiYgb3B0cy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdcXFxcJyA6ICcvJztcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzID0gb3B0cy5pbmNsdWRlQ2hpbGRNYXRjaGVzICE9PSBmYWxzZTtcbiAgICAgICAgaWYgKG9wdHMuaWdub3JlIHx8ICF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuI2lnbm9yZSA9IG1ha2VJZ25vcmUob3B0cy5pZ25vcmUgPz8gW10sIG9wdHMpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy4jaWdub3JlLmFkZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG0gPSAnY2Fubm90IGlnbm9yZSBjaGlsZCBtYXRjaGVzLCBpZ25vcmUgbGFja3MgYWRkKCkgbWV0aG9kLic7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlnbm9yZSwgYWx3YXlzIHNldCB3aXRoIG1heERlcHRoLCBidXQgaXQncyBvcHRpb25hbCBvbiB0aGVcbiAgICAgICAgLy8gR2xvYk9wdGlvbnMgdHlwZVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9IG9wdHMubWF4RGVwdGggfHwgSW5maW5pdHk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGlmIChvcHRzLnNpZ25hbCkge1xuICAgICAgICAgICAgdGhpcy5zaWduYWwgPSBvcHRzLnNpZ25hbDtcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjaWdub3JlZChwYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlZW4uaGFzKHBhdGgpIHx8ICEhdGhpcy4jaWdub3JlPy5pZ25vcmVkPy4ocGF0aCk7XG4gICAgfVxuICAgICNjaGlsZHJlbklnbm9yZWQocGF0aCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLiNpZ25vcmU/LmNoaWxkcmVuSWdub3JlZD8uKHBhdGgpO1xuICAgIH1cbiAgICAvLyBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdW1lKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZm4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgKGZuID0gdGhpcy4jb25SZXN1bWUuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25SZXN1bWUoZm4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCF0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNvblJlc3VtZS5wdXNoKGZuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBkbyB0aGUgcmVxdWlzaXRlIHJlYWxwYXRoL3N0YXQgY2hlY2tpbmcsIGFuZCByZXR1cm4gdGhlIHBhdGhcbiAgICAvLyB0byBhZGQgb3IgdW5kZWZpbmVkIHRvIGZpbHRlciBpdCBvdXQuXG4gICAgYXN5bmMgbWF0Y2hDaGVjayhlLCBpZkRpcikge1xuICAgICAgICBpZiAoaWZEaXIgJiYgdGhpcy5vcHRzLm5vZGlyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJwYztcbiAgICAgICAgaWYgKHRoaXMub3B0cy5yZWFscGF0aCkge1xuICAgICAgICAgICAgcnBjID0gZS5yZWFscGF0aENhY2hlZCgpIHx8IChhd2FpdCBlLnJlYWxwYXRoKCkpO1xuICAgICAgICAgICAgaWYgKCFycGMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGUgPSBycGM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmVlZFN0YXQgPSBlLmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0O1xuICAgICAgICBjb25zdCBzID0gbmVlZFN0YXQgPyBhd2FpdCBlLmxzdGF0KCkgOiBlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZvbGxvdyAmJiB0aGlzLm9wdHMubm9kaXIgJiYgcz8uaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXdhaXQgcy5yZWFscGF0aCgpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGFyZ2V0LmxzdGF0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoQ2hlY2tUZXN0KHMsIGlmRGlyKTtcbiAgICB9XG4gICAgbWF0Y2hDaGVja1Rlc3QoZSwgaWZEaXIpIHtcbiAgICAgICAgcmV0dXJuIChlICYmXG4gICAgICAgICAgICAodGhpcy5tYXhEZXB0aCA9PT0gSW5maW5pdHkgfHwgZS5kZXB0aCgpIDw9IHRoaXMubWF4RGVwdGgpICYmXG4gICAgICAgICAgICAoIWlmRGlyIHx8IGUuY2FuUmVhZGRpcigpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLm9wdHMubm9kaXIgfHwgIWUuaXNEaXJlY3RvcnkoKSkgJiZcbiAgICAgICAgICAgICghdGhpcy5vcHRzLm5vZGlyIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMub3B0cy5mb2xsb3cgfHxcbiAgICAgICAgICAgICAgICAhZS5pc1N5bWJvbGljTGluaygpIHx8XG4gICAgICAgICAgICAgICAgIWUucmVhbHBhdGhDYWNoZWQoKT8uaXNEaXJlY3RvcnkoKSkgJiZcbiAgICAgICAgICAgICF0aGlzLiNpZ25vcmVkKGUpKSA/XG4gICAgICAgICAgICBlXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbWF0Y2hDaGVja1N5bmMoZSwgaWZEaXIpIHtcbiAgICAgICAgaWYgKGlmRGlyICYmIHRoaXMub3B0cy5ub2RpcilcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBycGM7XG4gICAgICAgIGlmICh0aGlzLm9wdHMucmVhbHBhdGgpIHtcbiAgICAgICAgICAgIHJwYyA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCBlLnJlYWxwYXRoU3luYygpO1xuICAgICAgICAgICAgaWYgKCFycGMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGUgPSBycGM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmVlZFN0YXQgPSBlLmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0O1xuICAgICAgICBjb25zdCBzID0gbmVlZFN0YXQgPyBlLmxzdGF0U3luYygpIDogZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5mb2xsb3cgJiYgdGhpcy5vcHRzLm5vZGlyICYmIHM/LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHMucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQ/LmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaENoZWNrVGVzdChzLCBpZkRpcik7XG4gICAgfVxuICAgIG1hdGNoRmluaXNoKGUsIGFic29sdXRlKSB7XG4gICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyB3ZSBrbm93IHdlIGhhdmUgYW4gaWdub3JlIGlmIHRoaXMgaXMgZmFsc2UsIGJ1dCBUUyBkb2Vzbid0XG4gICAgICAgIGlmICghdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzICYmIHRoaXMuI2lnbm9yZT8uYWRkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ24gPSBgJHtlLnJlbGF0aXZlUG9zaXgoKX0vKipgO1xuICAgICAgICAgICAgdGhpcy4jaWdub3JlLmFkZChpZ24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFicyA9IHRoaXMub3B0cy5hYnNvbHV0ZSA9PT0gdW5kZWZpbmVkID8gYWJzb2x1dGUgOiB0aGlzLm9wdHMuYWJzb2x1dGU7XG4gICAgICAgIHRoaXMuc2Vlbi5hZGQoZSk7XG4gICAgICAgIGNvbnN0IG1hcmsgPSB0aGlzLm9wdHMubWFyayAmJiBlLmlzRGlyZWN0b3J5KCkgPyB0aGlzLiNzZXAgOiAnJztcbiAgICAgICAgLy8gb2ssIHdlIGhhdmUgd2hhdCB3ZSBuZWVkIVxuICAgICAgICBpZiAodGhpcy5vcHRzLndpdGhGaWxlVHlwZXMpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFicykge1xuICAgICAgICAgICAgY29uc3QgYWJzID0gdGhpcy5vcHRzLnBvc2l4ID8gZS5mdWxscGF0aFBvc2l4KCkgOiBlLmZ1bGxwYXRoKCk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoRW1pdChhYnMgKyBtYXJrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbCA9IHRoaXMub3B0cy5wb3NpeCA/IGUucmVsYXRpdmVQb3NpeCgpIDogZS5yZWxhdGl2ZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJlID0gdGhpcy5vcHRzLmRvdFJlbGF0aXZlICYmICFyZWwuc3RhcnRzV2l0aCgnLi4nICsgdGhpcy4jc2VwKSA/XG4gICAgICAgICAgICAgICAgJy4nICsgdGhpcy4jc2VwXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KCFyZWwgPyAnLicgKyBtYXJrIDogcHJlICsgcmVsICsgbWFyayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgbWF0Y2goZSwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBhd2FpdCB0aGlzLm1hdGNoQ2hlY2soZSwgaWZEaXIpO1xuICAgICAgICBpZiAocClcbiAgICAgICAgICAgIHRoaXMubWF0Y2hGaW5pc2gocCwgYWJzb2x1dGUpO1xuICAgIH1cbiAgICBtYXRjaFN5bmMoZSwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLm1hdGNoQ2hlY2tTeW5jKGUsIGlmRGlyKTtcbiAgICAgICAgaWYgKHApXG4gICAgICAgICAgICB0aGlzLm1hdGNoRmluaXNoKHAsIGFic29sdXRlKTtcbiAgICB9XG4gICAgd2Fsa0NCKHRhcmdldCwgcGF0dGVybnMsIGNiKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgbmV3IHByb2Nlc3Nvcl9qc18xLlByb2Nlc3Nvcih0aGlzLm9wdHMpLCBjYik7XG4gICAgfVxuICAgIHdhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBpZiAodGhpcy4jY2hpbGRyZW5JZ25vcmVkKHRhcmdldCkpXG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgaWYgKHRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uUmVzdW1lKCgpID0+IHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc29yLnByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKTtcbiAgICAgICAgLy8gZG9uZSBwcm9jZXNzaW5nLiAgYWxsIG9mIHRoZSBhYm92ZSBpcyBzeW5jLCBjYW4gYmUgYWJzdHJhY3RlZCBvdXQuXG4gICAgICAgIC8vIHN1YndhbGtzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIHRoZSBlbnRyeSBmaWx0ZXJzIHRoZXkgbmVlZFxuICAgICAgICAvLyBtYXRjaGVzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIFthYnNvbHV0ZSwgaWZEaXJdIHR1cGxlcy5cbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKG0sIGFic29sdXRlLCBpZkRpcikudGhlbigoKSA9PiBuZXh0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiBwcm9jZXNzb3Iuc3Vid2Fsa1RhcmdldHMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ICYmIHQuZGVwdGgoKSA+PSB0aGlzLm1heERlcHRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW5DYWNoZWQgPSB0LnJlYWRkaXJDYWNoZWQoKTtcbiAgICAgICAgICAgIGlmICh0LmNhbGxlZFJlYWRkaXIoKSlcbiAgICAgICAgICAgICAgICB0aGlzLndhbGtDQjModCwgY2hpbGRyZW5DYWNoZWQsIHByb2Nlc3NvciwgbmV4dCk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0LnJlYWRkaXJDQigoXywgZW50cmllcykgPT4gdGhpcy53YWxrQ0IzKHQsIGVudHJpZXMsIHByb2Nlc3NvciwgbmV4dCksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCMyh0YXJnZXQsIGVudHJpZXMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc29yLmZpbHRlckVudHJpZXModGFyZ2V0LCBlbnRyaWVzKTtcbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKG0sIGFic29sdXRlLCBpZkRpcikudGhlbigoKSA9PiBuZXh0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3RhcmdldCwgcGF0dGVybnNdIG9mIHByb2Nlc3Nvci5zdWJ3YWxrcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLmNoaWxkKCksIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBjYikge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBuZXcgcHJvY2Vzc29yX2pzXzEuUHJvY2Vzc29yKHRoaXMub3B0cyksIGNiKTtcbiAgICB9XG4gICAgd2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBpZiAodGhpcy4jY2hpbGRyZW5JZ25vcmVkKHRhcmdldCkpXG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgaWYgKHRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uUmVzdW1lKCgpID0+IHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3Nvci5wcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucyk7XG4gICAgICAgIC8vIGRvbmUgcHJvY2Vzc2luZy4gIGFsbCBvZiB0aGUgYWJvdmUgaXMgc3luYywgY2FuIGJlIGFic3RyYWN0ZWQgb3V0LlxuICAgICAgICAvLyBzdWJ3YWxrcyBpcyBhIG1hcCBvZiBwYXRocyB0byB0aGUgZW50cnkgZmlsdGVycyB0aGV5IG5lZWRcbiAgICAgICAgLy8gbWF0Y2hlcyBpcyBhIG1hcCBvZiBwYXRocyB0byBbYWJzb2x1dGUsIGlmRGlyXSB0dXBsZXMuXG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoU3luYyhtLCBhYnNvbHV0ZSwgaWZEaXIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiBwcm9jZXNzb3Iuc3Vid2Fsa1RhcmdldHMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ICYmIHQuZGVwdGgoKSA+PSB0aGlzLm1heERlcHRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0LnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjNTeW5jKHQsIGNoaWxkcmVuLCBwcm9jZXNzb3IsIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCM1N5bmModGFyZ2V0LCBlbnRyaWVzLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3Nvci5maWx0ZXJFbnRyaWVzKHRhcmdldCwgZW50cmllcyk7XG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoU3luYyhtLCBhYnNvbHV0ZSwgaWZEaXIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3RhcmdldCwgcGF0dGVybnNdIG9mIHByb2Nlc3Nvci5zdWJ3YWxrcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3Nvci5jaGlsZCgpLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxufVxuZXhwb3J0cy5HbG9iVXRpbCA9IEdsb2JVdGlsO1xuY2xhc3MgR2xvYldhbGtlciBleHRlbmRzIEdsb2JVdGlsIHtcbiAgICBtYXRjaGVzID0gbmV3IFNldCgpO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhdHRlcm5zLCBwYXRoLCBvcHRzKTtcbiAgICB9XG4gICAgbWF0Y2hFbWl0KGUpIHtcbiAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlKTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBhdGgubHN0YXQoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRoaXMucGF0aCwgdGhpcy5wYXR0ZXJucywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWoodGhpcy5zaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyh0aGlzLm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcztcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIHRocm93IHRoaXMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoLmxzdGF0U3luYygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGhpbmcgZm9yIHRoZSBjYWxsYmFjayB0byBkbywgYmVjYXVzZSB0aGlzIG5ldmVyIHBhdXNlc1xuICAgICAgICB0aGlzLndhbGtDQlN5bmModGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcztcbiAgICB9XG59XG5leHBvcnRzLkdsb2JXYWxrZXIgPSBHbG9iV2Fsa2VyO1xuY2xhc3MgR2xvYlN0cmVhbSBleHRlbmRzIEdsb2JVdGlsIHtcbiAgICByZXN1bHRzO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhdHRlcm5zLCBwYXRoLCBvcHRzKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gbmV3IG1pbmlwYXNzXzEuTWluaXBhc3Moe1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc3VsdHMub24oJ2RyYWluJywgKCkgPT4gdGhpcy5yZXN1bWUoKSk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5vbigncmVzdW1lJywgKCkgPT4gdGhpcy5yZXN1bWUoKSk7XG4gICAgfVxuICAgIG1hdGNoRW1pdChlKSB7XG4gICAgICAgIHRoaXMucmVzdWx0cy53cml0ZShlKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdHMuZmxvd2luZylcbiAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG4gICAgc3RyZWFtKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnBhdGg7XG4gICAgICAgIGlmICh0YXJnZXQuaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5sc3RhdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRhcmdldCwgdGhpcy5wYXR0ZXJucywgKCkgPT4gdGhpcy5yZXN1bHRzLmVuZCgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IodGFyZ2V0LCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aC5sc3RhdFN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndhbGtDQlN5bmModGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xuICAgIH1cbn1cbmV4cG9ydHMuR2xvYlN0cmVhbSA9IEdsb2JTdHJlYW07XG4vLyMgc291cmNlTWFwcGluZ1VSTD13YWxrZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2xvYiA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IG5vZGVfdXJsXzEgPSByZXF1aXJlKFwibm9kZTp1cmxcIik7XG5jb25zdCBwYXRoX3NjdXJyeV8xID0gcmVxdWlyZShcInBhdGgtc2N1cnJ5XCIpO1xuY29uc3QgcGF0dGVybl9qc18xID0gcmVxdWlyZShcIi4vcGF0dGVybi5qc1wiKTtcbmNvbnN0IHdhbGtlcl9qc18xID0gcmVxdWlyZShcIi4vd2Fsa2VyLmpzXCIpO1xuLy8gaWYgbm8gcHJvY2VzcyBnbG9iYWwsIGp1c3QgY2FsbCBpdCBsaW51eC5cbi8vIHNvIHdlIGRlZmF1bHQgdG8gY2FzZS1zZW5zaXRpdmUsIC8gc2VwYXJhdG9yc1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpID9cbiAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAnbGludXgnO1xuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjYW4gcGVyZm9ybSBnbG9iIHBhdHRlcm4gdHJhdmVyc2Fscy5cbiAqL1xuY2xhc3MgR2xvYiB7XG4gICAgYWJzb2x1dGU7XG4gICAgY3dkO1xuICAgIHJvb3Q7XG4gICAgZG90O1xuICAgIGRvdFJlbGF0aXZlO1xuICAgIGZvbGxvdztcbiAgICBpZ25vcmU7XG4gICAgbWFnaWNhbEJyYWNlcztcbiAgICBtYXJrO1xuICAgIG1hdGNoQmFzZTtcbiAgICBtYXhEZXB0aDtcbiAgICBub2JyYWNlO1xuICAgIG5vY2FzZTtcbiAgICBub2RpcjtcbiAgICBub2V4dDtcbiAgICBub2dsb2JzdGFyO1xuICAgIHBhdHRlcm47XG4gICAgcGxhdGZvcm07XG4gICAgcmVhbHBhdGg7XG4gICAgc2N1cnJ5O1xuICAgIHN0YXQ7XG4gICAgc2lnbmFsO1xuICAgIHdpbmRvd3NQYXRoc05vRXNjYXBlO1xuICAgIHdpdGhGaWxlVHlwZXM7XG4gICAgaW5jbHVkZUNoaWxkTWF0Y2hlcztcbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICovXG4gICAgb3B0cztcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwYXJzZWQgaW1tdXRhYmxlIHtAbGluayBQYXR0ZXJufSBvYmplY3RzLlxuICAgICAqL1xuICAgIHBhdHRlcm5zO1xuICAgIC8qKlxuICAgICAqIEFsbCBvcHRpb25zIGFyZSBzdG9yZWQgYXMgcHJvcGVydGllcyBvbiB0aGUgYEdsb2JgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgR2xvYk9wdGlvbnN9IGZvciBmdWxsIG9wdGlvbnMgZGVzY3JpcHRpb25zLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGEgcHJldmlvdXMgYEdsb2JgIG9iamVjdCBjYW4gYmUgcGFzc2VkIGFzIHRoZVxuICAgICAqIGBHbG9iT3B0aW9uc2AgdG8gYW5vdGhlciBgR2xvYmAgaW5zdGFudGlhdGlvbiB0byByZS11c2Ugc2V0dGluZ3NcbiAgICAgKiBhbmQgY2FjaGVzIHdpdGggYSBuZXcgcGF0dGVybi5cbiAgICAgKlxuICAgICAqIFRyYXZlcnNhbCBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBydW4gdGhlIHdhbGtcbiAgICAgKiBhZ2Fpbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRzKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIW9wdHMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdnbG9iIG9wdGlvbnMgcmVxdWlyZWQnKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53aXRoRmlsZVR5cGVzID0gISFvcHRzLndpdGhGaWxlVHlwZXM7XG4gICAgICAgIHRoaXMuc2lnbmFsID0gb3B0cy5zaWduYWw7XG4gICAgICAgIHRoaXMuZm9sbG93ID0gISFvcHRzLmZvbGxvdztcbiAgICAgICAgdGhpcy5kb3QgPSAhIW9wdHMuZG90O1xuICAgICAgICB0aGlzLmRvdFJlbGF0aXZlID0gISFvcHRzLmRvdFJlbGF0aXZlO1xuICAgICAgICB0aGlzLm5vZGlyID0gISFvcHRzLm5vZGlyO1xuICAgICAgICB0aGlzLm1hcmsgPSAhIW9wdHMubWFyaztcbiAgICAgICAgaWYgKCFvcHRzLmN3ZCkge1xuICAgICAgICAgICAgdGhpcy5jd2QgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRzLmN3ZCBpbnN0YW5jZW9mIFVSTCB8fCBvcHRzLmN3ZC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgIG9wdHMuY3dkID0gKDAsIG5vZGVfdXJsXzEuZmlsZVVSTFRvUGF0aCkob3B0cy5jd2QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3dkID0gb3B0cy5jd2QgfHwgJyc7XG4gICAgICAgIHRoaXMucm9vdCA9IG9wdHMucm9vdDtcbiAgICAgICAgdGhpcy5tYWdpY2FsQnJhY2VzID0gISFvcHRzLm1hZ2ljYWxCcmFjZXM7XG4gICAgICAgIHRoaXMubm9icmFjZSA9ICEhb3B0cy5ub2JyYWNlO1xuICAgICAgICB0aGlzLm5vZXh0ID0gISFvcHRzLm5vZXh0O1xuICAgICAgICB0aGlzLnJlYWxwYXRoID0gISFvcHRzLnJlYWxwYXRoO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gb3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzID0gb3B0cy5pbmNsdWRlQ2hpbGRNYXRjaGVzICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub2dsb2JzdGFyID0gISFvcHRzLm5vZ2xvYnN0YXI7XG4gICAgICAgIHRoaXMubWF0Y2hCYXNlID0gISFvcHRzLm1hdGNoQmFzZTtcbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9XG4gICAgICAgICAgICB0eXBlb2Ygb3B0cy5tYXhEZXB0aCA9PT0gJ251bWJlcicgPyBvcHRzLm1heERlcHRoIDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMuc3RhdCA9ICEhb3B0cy5zdGF0O1xuICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdHMuaWdub3JlO1xuICAgICAgICBpZiAodGhpcy53aXRoRmlsZVR5cGVzICYmIHRoaXMuYWJzb2x1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3Qgc2V0IGFic29sdXRlIGFuZCB3aXRoRmlsZVR5cGVzOnRydWUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUgPVxuICAgICAgICAgICAgISFvcHRzLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8XG4gICAgICAgICAgICAgICAgb3B0cy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gcC5yZXBsYWNlKC9cXFxcL2csICcvJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hdGNoQmFzZSkge1xuICAgICAgICAgICAgaWYgKG9wdHMubm9nbG9ic3Rhcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Jhc2UgbWF0Y2hpbmcgcmVxdWlyZXMgZ2xvYnN0YXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChwID0+IChwLmluY2x1ZGVzKCcvJykgPyBwIDogYC4vKiovJHtwfWApKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gb3B0cy5wbGF0Zm9ybSB8fCBkZWZhdWx0UGxhdGZvcm07XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0gfTtcbiAgICAgICAgaWYgKG9wdHMuc2N1cnJ5KSB7XG4gICAgICAgICAgICB0aGlzLnNjdXJyeSA9IG9wdHMuc2N1cnJ5O1xuICAgICAgICAgICAgaWYgKG9wdHMubm9jYXNlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBvcHRzLm5vY2FzZSAhPT0gb3B0cy5zY3Vycnkubm9jYXNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub2Nhc2Ugb3B0aW9uIGNvbnRyYWRpY3RzIHByb3ZpZGVkIHNjdXJyeSBvcHRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFNjdXJyeSA9IG9wdHMucGxhdGZvcm0gPT09ICd3aW4zMicgPyBwYXRoX3NjdXJyeV8xLlBhdGhTY3VycnlXaW4zMlxuICAgICAgICAgICAgICAgIDogb3B0cy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyBwYXRoX3NjdXJyeV8xLlBhdGhTY3VycnlEYXJ3aW5cbiAgICAgICAgICAgICAgICAgICAgOiBvcHRzLnBsYXRmb3JtID8gcGF0aF9zY3VycnlfMS5QYXRoU2N1cnJ5UG9zaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcGF0aF9zY3VycnlfMS5QYXRoU2N1cnJ5O1xuICAgICAgICAgICAgdGhpcy5zY3VycnkgPSBuZXcgU2N1cnJ5KHRoaXMuY3dkLCB7XG4gICAgICAgICAgICAgICAgbm9jYXNlOiBvcHRzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBmczogb3B0cy5mcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9jYXNlID0gdGhpcy5zY3Vycnkubm9jYXNlO1xuICAgICAgICAvLyBJZiB5b3UgZG8gbm9jYXNlOnRydWUgb24gYSBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5c3RlbSwgdGhlblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHVzZSByZWdleHBzIGluc3RlYWQgb2Ygc3RyaW5ncyBmb3Igbm9uLW1hZ2ljXG4gICAgICAgIC8vIHBhdGggcG9ydGlvbnMsIGJlY2F1c2Ugc3RhdHRpbmcgYGFCY2Agd29uJ3QgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgLy8gZm9yIHRoZSBmaWxlIGBBYkNgIGZvciBleGFtcGxlLlxuICAgICAgICBjb25zdCBub2Nhc2VNYWdpY09ubHkgPSB0aGlzLnBsYXRmb3JtID09PSAnZGFyd2luJyB8fCB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICBjb25zdCBtbW8gPSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IG5vY2FzZSBiYXNlZCBvbiBwbGF0Zm9ybVxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIGRvdDogdGhpcy5kb3QsXG4gICAgICAgICAgICBtYXRjaEJhc2U6IHRoaXMubWF0Y2hCYXNlLFxuICAgICAgICAgICAgbm9icmFjZTogdGhpcy5ub2JyYWNlLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIG5vY2FzZU1hZ2ljT25seSxcbiAgICAgICAgICAgIG5vY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIG5vZXh0OiB0aGlzLm5vZXh0LFxuICAgICAgICAgICAgbm9uZWdhdGU6IHRydWUsXG4gICAgICAgICAgICBvcHRpbWl6YXRpb25MZXZlbDogMixcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgd2luZG93c1BhdGhzTm9Fc2NhcGU6IHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUsXG4gICAgICAgICAgICBkZWJ1ZzogISF0aGlzLm9wdHMuZGVidWcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1tcyA9IHRoaXMucGF0dGVybi5tYXAocCA9PiBuZXcgbWluaW1hdGNoXzEuTWluaW1hdGNoKHAsIG1tbykpO1xuICAgICAgICBjb25zdCBbbWF0Y2hTZXQsIGdsb2JQYXJ0c10gPSBtbXMucmVkdWNlKChzZXQsIG0pID0+IHtcbiAgICAgICAgICAgIHNldFswXS5wdXNoKC4uLm0uc2V0KTtcbiAgICAgICAgICAgIHNldFsxXS5wdXNoKC4uLm0uZ2xvYlBhcnRzKTtcbiAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgIH0sIFtbXSwgW11dKTtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IG1hdGNoU2V0Lm1hcCgoc2V0LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnID0gZ2xvYlBhcnRzW2ldO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIWcpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhdHRlcm4gb2JqZWN0Jyk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBwYXR0ZXJuX2pzXzEuUGF0dGVybihzZXQsIGcsIDAsIHRoaXMucGxhdGZvcm0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgLy8gV2Fsa2VycyBhbHdheXMgcmV0dXJuIGFycmF5IG9mIFBhdGggb2JqZWN0cywgc28gd2UganVzdCBoYXZlIHRvXG4gICAgICAgIC8vIGNvZXJjZSB0aGVtIGludG8gdGhlIHJpZ2h0IHNoYXBlLiAgSXQgd2lsbCBoYXZlIGFscmVhZHkgY2FsbGVkXG4gICAgICAgIC8vIHJlYWxwYXRoKCkgaWYgdGhlIG9wdGlvbiB3YXMgc2V0IHRvIGRvIHNvLCBzbyB3ZSBrbm93IHRoYXQncyBjYWNoZWQuXG4gICAgICAgIC8vIHN0YXJ0IG91dCBrbm93aW5nIHRoZSBjd2QsIGF0IGxlYXN0XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi4oYXdhaXQgbmV3IHdhbGtlcl9qc18xLkdsb2JXYWxrZXIodGhpcy5wYXR0ZXJucywgdGhpcy5zY3VycnkuY3dkLCB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF4RGVwdGggKyB0aGlzLnNjdXJyeS5jd2QuZGVwdGgoKVxuICAgICAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIG5vY2FzZTogdGhpcy5ub2Nhc2UsXG4gICAgICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICAgICAgfSkud2FsaygpKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5uZXcgd2Fsa2VyX2pzXzEuR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrU3luYygpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBuZXcgd2Fsa2VyX2pzXzEuR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtKCk7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgd2Fsa2VyX2pzXzEuR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHN5bmMgaXRlcmF0aW9uIGZ1bmN0aW9uLiBSZXR1cm5zIGEgR2VuZXJhdG9yIHRoYXRcbiAgICAgKiBpdGVyYXRlcyBvdmVyIHRoZSByZXN1bHRzLlxuICAgICAqL1xuICAgIGl0ZXJhdGVTeW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW1TeW5jKClbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZVN5bmMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBhc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYW4gQXN5bmNHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtKClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdGUoKTtcbiAgICB9XG59XG5leHBvcnRzLkdsb2IgPSBHbG9iO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2xvYi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5oYXNNYWdpYyA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIHBhdHRlcm5zIHByb3ZpZGVkIGNvbnRhaW4gYW55IG1hZ2ljIGdsb2IgY2hhcmFjdGVycyxcbiAqIGdpdmVuIHRoZSBvcHRpb25zIHByb3ZpZGVkLlxuICpcbiAqIEJyYWNlIGV4cGFuc2lvbiBpcyBub3QgY29uc2lkZXJlZCBcIm1hZ2ljXCIgdW5sZXNzIHRoZSBgbWFnaWNhbEJyYWNlc2Agb3B0aW9uXG4gKiBpcyBzZXQsIGFzIGJyYWNlIGV4cGFuc2lvbiBqdXN0IHR1cm5zIG9uZSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogU28gYSBwYXR0ZXJuIGxpa2UgYCd4e2EsYn15J2Agd291bGQgcmV0dXJuIGBmYWxzZWAsIGJlY2F1c2UgYCd4YXknYCBhbmRcbiAqIGAneGJ5J2AgYm90aCBkbyBub3QgY29udGFpbiBhbnkgbWFnaWMgZ2xvYiBjaGFyYWN0ZXJzLCBhbmQgaXQncyB0cmVhdGVkIHRoZVxuICogc2FtZSBhcyBpZiB5b3UgaGFkIGNhbGxlZCBpdCBvbiBgWyd4YXknLCAneGJ5J11gLiBXaGVuIGBtYWdpY2FsQnJhY2VzOnRydWVgXG4gKiBpcyBpbiB0aGUgb3B0aW9ucywgYnJhY2UgZXhwYW5zaW9uIF9pc18gdHJlYXRlZCBhcyBhIHBhdHRlcm4gaGF2aW5nIG1hZ2ljLlxuICovXG5jb25zdCBoYXNNYWdpYyA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF0dGVybikpIHtcbiAgICAgICAgcGF0dGVybiA9IFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwIG9mIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKG5ldyBtaW5pbWF0Y2hfMS5NaW5pbWF0Y2gocCwgb3B0aW9ucykuaGFzTWFnaWMoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0cy5oYXNNYWdpYyA9IGhhc01hZ2ljO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLW1hZ2ljLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdsb2IgPSBleHBvcnRzLnN5bmMgPSBleHBvcnRzLml0ZXJhdGUgPSBleHBvcnRzLml0ZXJhdGVTeW5jID0gZXhwb3J0cy5zdHJlYW0gPSBleHBvcnRzLnN0cmVhbVN5bmMgPSBleHBvcnRzLklnbm9yZSA9IGV4cG9ydHMuaGFzTWFnaWMgPSBleHBvcnRzLkdsb2IgPSBleHBvcnRzLnVuZXNjYXBlID0gZXhwb3J0cy5lc2NhcGUgPSB2b2lkIDA7XG5leHBvcnRzLmdsb2JTdHJlYW1TeW5jID0gZ2xvYlN0cmVhbVN5bmM7XG5leHBvcnRzLmdsb2JTdHJlYW0gPSBnbG9iU3RyZWFtO1xuZXhwb3J0cy5nbG9iU3luYyA9IGdsb2JTeW5jO1xuZXhwb3J0cy5nbG9iSXRlcmF0ZVN5bmMgPSBnbG9iSXRlcmF0ZVN5bmM7XG5leHBvcnRzLmdsb2JJdGVyYXRlID0gZ2xvYkl0ZXJhdGU7XG5jb25zdCBtaW5pbWF0Y2hfMSA9IHJlcXVpcmUoXCJtaW5pbWF0Y2hcIik7XG5jb25zdCBnbG9iX2pzXzEgPSByZXF1aXJlKFwiLi9nbG9iLmpzXCIpO1xuY29uc3QgaGFzX21hZ2ljX2pzXzEgPSByZXF1aXJlKFwiLi9oYXMtbWFnaWMuanNcIik7XG52YXIgbWluaW1hdGNoXzIgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXNjYXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtaW5pbWF0Y2hfMi5lc2NhcGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmVzY2FwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWluaW1hdGNoXzIudW5lc2NhcGU7IH0gfSk7XG52YXIgZ2xvYl9qc18yID0gcmVxdWlyZShcIi4vZ2xvYi5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdsb2JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdsb2JfanNfMi5HbG9iOyB9IH0pO1xudmFyIGhhc19tYWdpY19qc18yID0gcmVxdWlyZShcIi4vaGFzLW1hZ2ljLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGFzTWFnaWNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGhhc19tYWdpY19qc18yLmhhc01hZ2ljOyB9IH0pO1xudmFyIGlnbm9yZV9qc18xID0gcmVxdWlyZShcIi4vaWdub3JlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSWdub3JlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpZ25vcmVfanNfMS5JZ25vcmU7IH0gfSk7XG5mdW5jdGlvbiBnbG9iU3RyZWFtU3luYyhwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IGdsb2JfanNfMS5HbG9iKHBhdHRlcm4sIG9wdGlvbnMpLnN0cmVhbVN5bmMoKTtcbn1cbmZ1bmN0aW9uIGdsb2JTdHJlYW0ocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5zdHJlYW0oKTtcbn1cbmZ1bmN0aW9uIGdsb2JTeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykud2Fsa1N5bmMoKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdsb2JfKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykud2FsaygpO1xufVxuZnVuY3Rpb24gZ2xvYkl0ZXJhdGVTeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykuaXRlcmF0ZVN5bmMoKTtcbn1cbmZ1bmN0aW9uIGdsb2JJdGVyYXRlKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykuaXRlcmF0ZSgpO1xufVxuLy8gYWxpYXNlczogZ2xvYi5zeW5jLnN0cmVhbSgpIGdsb2Iuc3RyZWFtLnN5bmMoKSBnbG9iLnN5bmMoKSBldGNcbmV4cG9ydHMuc3RyZWFtU3luYyA9IGdsb2JTdHJlYW1TeW5jO1xuZXhwb3J0cy5zdHJlYW0gPSBPYmplY3QuYXNzaWduKGdsb2JTdHJlYW0sIHsgc3luYzogZ2xvYlN0cmVhbVN5bmMgfSk7XG5leHBvcnRzLml0ZXJhdGVTeW5jID0gZ2xvYkl0ZXJhdGVTeW5jO1xuZXhwb3J0cy5pdGVyYXRlID0gT2JqZWN0LmFzc2lnbihnbG9iSXRlcmF0ZSwge1xuICAgIHN5bmM6IGdsb2JJdGVyYXRlU3luYyxcbn0pO1xuZXhwb3J0cy5zeW5jID0gT2JqZWN0LmFzc2lnbihnbG9iU3luYywge1xuICAgIHN0cmVhbTogZ2xvYlN0cmVhbVN5bmMsXG4gICAgaXRlcmF0ZTogZ2xvYkl0ZXJhdGVTeW5jLFxufSk7XG5leHBvcnRzLmdsb2IgPSBPYmplY3QuYXNzaWduKGdsb2JfLCB7XG4gICAgZ2xvYjogZ2xvYl8sXG4gICAgZ2xvYlN5bmMsXG4gICAgc3luYzogZXhwb3J0cy5zeW5jLFxuICAgIGdsb2JTdHJlYW0sXG4gICAgc3RyZWFtOiBleHBvcnRzLnN0cmVhbSxcbiAgICBnbG9iU3RyZWFtU3luYyxcbiAgICBzdHJlYW1TeW5jOiBleHBvcnRzLnN0cmVhbVN5bmMsXG4gICAgZ2xvYkl0ZXJhdGUsXG4gICAgaXRlcmF0ZTogZXhwb3J0cy5pdGVyYXRlLFxuICAgIGdsb2JJdGVyYXRlU3luYyxcbiAgICBpdGVyYXRlU3luYzogZXhwb3J0cy5pdGVyYXRlU3luYyxcbiAgICBHbG9iOiBnbG9iX2pzXzEuR2xvYixcbiAgICBoYXNNYWdpYzogaGFzX21hZ2ljX2pzXzEuaGFzTWFnaWMsXG4gICAgZXNjYXBlOiBtaW5pbWF0Y2hfMS5lc2NhcGUsXG4gICAgdW5lc2NhcGU6IG1pbmltYXRjaF8xLnVuZXNjYXBlLFxufSk7XG5leHBvcnRzLmdsb2IuZ2xvYiA9IGV4cG9ydHMuZ2xvYjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqXG4gKiBhcmNoaXZlci11dGlsc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xudmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG52YXIgZmxhdHRlbiA9IHJlcXVpcmUoJ2xvZGFzaC9mbGF0dGVuJyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC9kaWZmZXJlbmNlJyk7XG52YXIgdW5pb24gPSByZXF1aXJlKCdsb2Rhc2gvdW5pb24nKTtcbnZhciBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnbG9kYXNoL2lzUGxhaW5PYmplY3QnKTtcblxudmFyIGdsb2IgPSByZXF1aXJlKCdnbG9iJyk7XG5cbnZhciBmaWxlID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxudmFyIHBhdGhTZXBhcmF0b3JSZSA9IC9bXFwvXFxcXF0vZztcblxuLy8gUHJvY2VzcyBzcGVjaWZpZWQgd2lsZGNhcmQgZ2xvYiBwYXR0ZXJucyBvciBmaWxlbmFtZXMgYWdhaW5zdCBhXG4vLyBjYWxsYmFjaywgZXhjbHVkaW5nIGFuZCB1bmlxdWluZyBmaWxlcyBpbiB0aGUgcmVzdWx0IHNldC5cbnZhciBwcm9jZXNzUGF0dGVybnMgPSBmdW5jdGlvbihwYXR0ZXJucywgZm4pIHtcbiAgLy8gRmlsZXBhdGhzIHRvIHJldHVybi5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAvLyBJdGVyYXRlIG92ZXIgZmxhdHRlbmVkIHBhdHRlcm5zIGFycmF5LlxuICBmbGF0dGVuKHBhdHRlcm5zKS5mb3JFYWNoKGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgICAvLyBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzICEgaXQgc2hvdWxkIGJlIG9taXR0ZWRcbiAgICB2YXIgZXhjbHVzaW9uID0gcGF0dGVybi5pbmRleE9mKCchJykgPT09IDA7XG4gICAgLy8gSWYgdGhlIHBhdHRlcm4gaXMgYW4gZXhjbHVzaW9uLCByZW1vdmUgdGhlICFcbiAgICBpZiAoZXhjbHVzaW9uKSB7IHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKDEpOyB9XG4gICAgLy8gRmluZCBhbGwgbWF0Y2hpbmcgZmlsZXMgZm9yIHRoaXMgcGF0dGVybi5cbiAgICB2YXIgbWF0Y2hlcyA9IGZuKHBhdHRlcm4pO1xuICAgIGlmIChleGNsdXNpb24pIHtcbiAgICAgIC8vIElmIGFuIGV4Y2x1c2lvbiwgcmVtb3ZlIG1hdGNoaW5nIGZpbGVzLlxuICAgICAgcmVzdWx0ID0gZGlmZmVyZW5jZShyZXN1bHQsIG1hdGNoZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgYWRkIG1hdGNoaW5nIGZpbGVzLlxuICAgICAgcmVzdWx0ID0gdW5pb24ocmVzdWx0LCBtYXRjaGVzKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVHJ1ZSBpZiB0aGUgZmlsZSBwYXRoIGV4aXN0cy5cbmZpbGUuZXhpc3RzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaWxlcGF0aCA9IHBhdGguam9pbi5hcHBseShwYXRoLCBhcmd1bWVudHMpO1xuICByZXR1cm4gZnMuZXhpc3RzU3luYyhmaWxlcGF0aCk7XG59O1xuXG4vLyBSZXR1cm4gYW4gYXJyYXkgb2YgYWxsIGZpbGUgcGF0aHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gd2lsZGNhcmQgcGF0dGVybnMuXG5maWxlLmV4cGFuZCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgLy8gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbnMgb2JqZWN0LCBzYXZlIHRob3NlIG9wdGlvbnMgdG8gcGFzc1xuICAvLyBpbnRvIHRoZSBGaWxlLnByb3RvdHlwZS5nbG9iLnN5bmMgbWV0aG9kLlxuICB2YXIgb3B0aW9ucyA9IGlzUGxhaW5PYmplY3QoYXJnc1swXSkgPyBhcmdzLnNoaWZ0KCkgOiB7fTtcbiAgLy8gVXNlIHRoZSBmaXJzdCBhcmd1bWVudCBpZiBpdCdzIGFuIEFycmF5LCBvdGhlcndpc2UgY29udmVydCB0aGUgYXJndW1lbnRzXG4gIC8vIG9iamVjdCB0byBhbiBhcnJheSBhbmQgdXNlIHRoYXQuXG4gIHZhciBwYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkoYXJnc1swXSkgPyBhcmdzWzBdIDogYXJncztcbiAgLy8gUmV0dXJuIGVtcHR5IHNldCBpZiB0aGVyZSBhcmUgbm8gcGF0dGVybnMgb3IgZmlsZXBhdGhzLlxuICBpZiAocGF0dGVybnMubGVuZ3RoID09PSAwKSB7IHJldHVybiBbXTsgfVxuICAvLyBSZXR1cm4gYWxsIG1hdGNoaW5nIGZpbGVwYXRocy5cbiAgdmFyIG1hdGNoZXMgPSBwcm9jZXNzUGF0dGVybnMocGF0dGVybnMsIGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgICAvLyBGaW5kIGFsbCBtYXRjaGluZyBmaWxlcyBmb3IgdGhpcyBwYXR0ZXJuLlxuICAgIHJldHVybiBnbG9iLnN5bmMocGF0dGVybiwgb3B0aW9ucyk7XG4gIH0pO1xuICAvLyBGaWx0ZXIgcmVzdWx0IHNldD9cbiAgaWYgKG9wdGlvbnMuZmlsdGVyKSB7XG4gICAgbWF0Y2hlcyA9IG1hdGNoZXMuZmlsdGVyKGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gICAgICBmaWxlcGF0aCA9IHBhdGguam9pbihvcHRpb25zLmN3ZCB8fCAnJywgZmlsZXBhdGgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmZpbHRlcihmaWxlcGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGZpbGUgaXMgb2YgdGhlIHJpZ2h0IHR5cGUgYW5kIGV4aXN0cywgdGhpcyBzaG91bGQgd29yay5cbiAgICAgICAgICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZXBhdGgpW29wdGlvbnMuZmlsdGVyXSgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpdCdzIHByb2JhYmx5IG5vdCB0aGUgcmlnaHQgdHlwZS5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufTtcblxuLy8gQnVpbGQgYSBtdWx0aSB0YXNrIFwiZmlsZXNcIiBvYmplY3QgZHluYW1pY2FsbHkuXG5maWxlLmV4cGFuZE1hcHBpbmcgPSBmdW5jdGlvbihwYXR0ZXJucywgZGVzdEJhc2UsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHJlbmFtZTogZnVuY3Rpb24oZGVzdEJhc2UsIGRlc3RQYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aC5qb2luKGRlc3RCYXNlIHx8ICcnLCBkZXN0UGF0aCk7XG4gICAgfVxuICB9LCBvcHRpb25zKTtcbiAgdmFyIGZpbGVzID0gW107XG4gIHZhciBmaWxlQnlEZXN0ID0ge307XG4gIC8vIEZpbmQgYWxsIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4sIHVzaW5nIHBhc3NlZC1pbiBvcHRpb25zLlxuICBmaWxlLmV4cGFuZChvcHRpb25zLCBwYXR0ZXJucykuZm9yRWFjaChmdW5jdGlvbihzcmMpIHtcbiAgICB2YXIgZGVzdFBhdGggPSBzcmM7XG4gICAgLy8gRmxhdHRlbj9cbiAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICBkZXN0UGF0aCA9IHBhdGguYmFzZW5hbWUoZGVzdFBhdGgpO1xuICAgIH1cbiAgICAvLyBDaGFuZ2UgdGhlIGV4dGVuc2lvbj9cbiAgICBpZiAob3B0aW9ucy5leHQpIHtcbiAgICAgIGRlc3RQYXRoID0gZGVzdFBhdGgucmVwbGFjZSgvKFxcLlteXFwvXSopPyQvLCBvcHRpb25zLmV4dCk7XG4gICAgfVxuICAgIC8vIEdlbmVyYXRlIGRlc3RpbmF0aW9uIGZpbGVuYW1lLlxuICAgIHZhciBkZXN0ID0gb3B0aW9ucy5yZW5hbWUoZGVzdEJhc2UsIGRlc3RQYXRoLCBvcHRpb25zKTtcbiAgICAvLyBQcmVwZW5kIGN3ZCB0byBzcmMgcGF0aCBpZiBuZWNlc3NhcnkuXG4gICAgaWYgKG9wdGlvbnMuY3dkKSB7IHNyYyA9IHBhdGguam9pbihvcHRpb25zLmN3ZCwgc3JjKTsgfVxuICAgIC8vIE5vcm1hbGl6ZSBmaWxlcGF0aHMgdG8gYmUgdW5peC1zdHlsZS5cbiAgICBkZXN0ID0gZGVzdC5yZXBsYWNlKHBhdGhTZXBhcmF0b3JSZSwgJy8nKTtcbiAgICBzcmMgPSBzcmMucmVwbGFjZShwYXRoU2VwYXJhdG9yUmUsICcvJyk7XG4gICAgLy8gTWFwIGNvcnJlY3Qgc3JjIHBhdGggdG8gZGVzdCBwYXRoLlxuICAgIGlmIChmaWxlQnlEZXN0W2Rlc3RdKSB7XG4gICAgICAvLyBJZiBkZXN0IGFscmVhZHkgZXhpc3RzLCBwdXNoIHRoaXMgc3JjIG9udG8gdGhhdCBkZXN0J3Mgc3JjIGFycmF5LlxuICAgICAgZmlsZUJ5RGVzdFtkZXN0XS5zcmMucHVzaChzcmMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IHNyYy1kZXN0IGZpbGUgbWFwcGluZyBvYmplY3QuXG4gICAgICBmaWxlcy5wdXNoKHtcbiAgICAgICAgc3JjOiBbc3JjXSxcbiAgICAgICAgZGVzdDogZGVzdCxcbiAgICAgIH0pO1xuICAgICAgLy8gQW5kIHN0b3JlIGEgcmVmZXJlbmNlIGZvciBsYXRlciB1c2UuXG4gICAgICBmaWxlQnlEZXN0W2Rlc3RdID0gZmlsZXNbZmlsZXMubGVuZ3RoIC0gMV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpbGVzO1xufTtcblxuLy8gcmV1c2luZyBiaXRzIG9mIGdydW50J3MgbXVsdGktdGFzayBzb3VyY2Ugbm9ybWFsaXphdGlvblxuZmlsZS5ub3JtYWxpemVGaWxlc0FycmF5ID0gZnVuY3Rpb24oZGF0YSkge1xuICB2YXIgZmlsZXMgPSBbXTtcblxuICBkYXRhLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHByb3A7XG4gICAgaWYgKCdzcmMnIGluIG9iaiB8fCAnZGVzdCcgaW4gb2JqKSB7XG4gICAgICBmaWxlcy5wdXNoKG9iaik7XG4gICAgfVxuICB9KTtcblxuICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZmlsZXMgPSBfKGZpbGVzKS5jaGFpbigpLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCEoJ3NyYycgaW4gb2JqKSB8fCAhb2JqLnNyYykgeyByZXR1cm47IH1cbiAgICAvLyBOb3JtYWxpemUgLnNyYyBwcm9wZXJ0aWVzIHRvIGZsYXR0ZW5lZCBhcnJheS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmouc3JjKSkge1xuICAgICAgb2JqLnNyYyA9IGZsYXR0ZW4ob2JqLnNyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5zcmMgPSBbb2JqLnNyY107XG4gICAgfVxuICB9KS5tYXAoZnVuY3Rpb24ob2JqKSB7XG4gICAgLy8gQnVpbGQgb3B0aW9ucyBvYmplY3QsIHJlbW92aW5nIHVud2FudGVkIHByb3BlcnRpZXMuXG4gICAgdmFyIGV4cGFuZE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgIGRlbGV0ZSBleHBhbmRPcHRpb25zLnNyYztcbiAgICBkZWxldGUgZXhwYW5kT3B0aW9ucy5kZXN0O1xuXG4gICAgLy8gRXhwYW5kIGZpbGUgbWFwcGluZ3MuXG4gICAgaWYgKG9iai5leHBhbmQpIHtcbiAgICAgIHJldHVybiBmaWxlLmV4cGFuZE1hcHBpbmcob2JqLnNyYywgb2JqLmRlc3QsIGV4cGFuZE9wdGlvbnMpLm1hcChmdW5jdGlvbihtYXBPYmopIHtcbiAgICAgICAgLy8gQ29weSBvYmogcHJvcGVydGllcyB0byByZXN1bHQuXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgICAgICAvLyBNYWtlIGEgY2xvbmUgb2YgdGhlIG9yaWcgb2JqIGF2YWlsYWJsZS5cbiAgICAgICAgcmVzdWx0Lm9yaWcgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgICAgICAvLyBTZXQgLnNyYyBhbmQgLmRlc3QsIHByb2Nlc3NpbmcgYm90aCBhcyB0ZW1wbGF0ZXMuXG4gICAgICAgIHJlc3VsdC5zcmMgPSBtYXBPYmouc3JjO1xuICAgICAgICByZXN1bHQuZGVzdCA9IG1hcE9iai5kZXN0O1xuICAgICAgICAvLyBSZW1vdmUgdW53YW50ZWQgcHJvcGVydGllcy5cbiAgICAgICAgWydleHBhbmQnLCAnY3dkJywgJ2ZsYXR0ZW4nLCAncmVuYW1lJywgJ2V4dCddLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgIGRlbGV0ZSByZXN1bHRbcHJvcF07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBvYmogcHJvcGVydGllcyB0byByZXN1bHQsIGFkZGluZyBhbiAub3JpZyBwcm9wZXJ0eS5cbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcbiAgICAvLyBNYWtlIGEgY2xvbmUgb2YgdGhlIG9yaWcgb2JqIGF2YWlsYWJsZS5cbiAgICByZXN1bHQub3JpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoJ3NyYycgaW4gcmVzdWx0KSB7XG4gICAgICAvLyBFeHBvc2UgYW4gZXhwYW5kLW9uLWRlbWFuZCBnZXR0ZXIgbWV0aG9kIGFzIC5zcmMuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCAnc3JjJywge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGZuKCkge1xuICAgICAgICAgIHZhciBzcmM7XG4gICAgICAgICAgaWYgKCEoJ3Jlc3VsdCcgaW4gZm4pKSB7XG4gICAgICAgICAgICBzcmMgPSBvYmouc3JjO1xuICAgICAgICAgICAgLy8gSWYgc3JjIGlzIGFuIGFycmF5LCBmbGF0dGVuIGl0LiBPdGhlcndpc2UsIG1ha2UgaXQgaW50byBhbiBhcnJheS5cbiAgICAgICAgICAgIHNyYyA9IEFycmF5LmlzQXJyYXkoc3JjKSA/IGZsYXR0ZW4oc3JjKSA6IFtzcmNdO1xuICAgICAgICAgICAgLy8gRXhwYW5kIHNyYyBmaWxlcywgbWVtb2l6aW5nIHJlc3VsdC5cbiAgICAgICAgICAgIGZuLnJlc3VsdCA9IGZpbGUuZXhwYW5kKGV4cGFuZE9wdGlvbnMsIHNyYyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmbi5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgnZGVzdCcgaW4gcmVzdWx0KSB7XG4gICAgICByZXN1bHQuZGVzdCA9IG9iai5kZXN0O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pLmZsYXR0ZW4oKS52YWx1ZSgpO1xuXG4gIHJldHVybiBmaWxlcztcbn07XG4iLAogICAgIi8qKlxuICogYXJjaGl2ZXItdXRpbHNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2hyaXMgVGFsa2luZ3Rvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL2FyY2hpdmVyLXV0aWxzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xudmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGlzU3RyZWFtID0gcmVxdWlyZSgnaXMtc3RyZWFtJyk7XG52YXIgbGF6eXN0cmVhbSA9IHJlcXVpcmUoJ2xhenlzdHJlYW0nKTtcbnZhciBub3JtYWxpemVQYXRoID0gcmVxdWlyZSgnbm9ybWFsaXplLXBhdGgnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJ2xvZGFzaC9kZWZhdWx0cycpO1xuXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuUGFzc1Rocm91Z2g7XG5cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge307XG51dGlscy5maWxlID0gcmVxdWlyZSgnLi9maWxlLmpzJyk7XG5cbnV0aWxzLmNvbGxlY3RTdHJlYW0gPSBmdW5jdGlvbihzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIHZhciBjb2xsZWN0aW9uID0gW107XG4gIHZhciBzaXplID0gMDtcblxuICBzb3VyY2Uub24oJ2Vycm9yJywgY2FsbGJhY2spO1xuXG4gIHNvdXJjZS5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgY29sbGVjdGlvbi5wdXNoKGNodW5rKTtcbiAgICBzaXplICs9IGNodW5rLmxlbmd0aDtcbiAgfSk7XG5cbiAgc291cmNlLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKHNpemUpO1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIGRhdGEuY29weShidWYsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYWxsYmFjayhudWxsLCBidWYpO1xuICB9KTtcbn07XG5cbnV0aWxzLmRhdGVpZnkgPSBmdW5jdGlvbihkYXRlaXNoKSB7XG4gIGRhdGVpc2ggPSBkYXRlaXNoIHx8IG5ldyBEYXRlKCk7XG5cbiAgaWYgKGRhdGVpc2ggaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgZGF0ZWlzaCA9IGRhdGVpc2g7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGVpc2ggPT09ICdzdHJpbmcnKSB7XG4gICAgZGF0ZWlzaCA9IG5ldyBEYXRlKGRhdGVpc2gpO1xuICB9IGVsc2Uge1xuICAgIGRhdGVpc2ggPSBuZXcgRGF0ZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGVpc2g7XG59O1xuXG4vLyB0aGlzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIGxvZGFzaCB2ZXJzaW9uXG51dGlscy5kZWZhdWx0cyA9IGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBndWFyZCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgYXJnc1swXSA9IGFyZ3NbMF0gfHwge307XG5cbiAgcmV0dXJuIGRlZmF1bHRzKC4uLmFyZ3MpO1xufTtcblxudXRpbHMuaXNTdHJlYW0gPSBmdW5jdGlvbihzb3VyY2UpIHtcbiAgcmV0dXJuIGlzU3RyZWFtKHNvdXJjZSk7XG59O1xuXG51dGlscy5sYXp5UmVhZFN0cmVhbSA9IGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gIHJldHVybiBuZXcgbGF6eXN0cmVhbS5SZWFkYWJsZShmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlcGF0aCk7XG4gIH0pO1xufTtcblxudXRpbHMubm9ybWFsaXplSW5wdXRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc291cmNlKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1N0cmVhbShzb3VyY2UpKSB7XG4gICAgLy8gQWx3YXlzIHBpcGUgdGhyb3VnaCBhIFBhc3NUaHJvdWdoIHN0cmVhbSB0byBndWFyYW50ZWUgcGF1c2luZyB0aGUgc3RyZWFtIGlmIGl0J3MgYWxyZWFkeSBmbG93aW5nLFxuICAgIC8vIHNpbmNlIGl0IHdpbGwgb25seSBiZSBwcm9jZXNzZWQgaW4gYSAoZGlzdGFudCkgZnV0dXJlIGl0ZXJhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcCwgYW5kIHdpbGwgbG9zZVxuICAgIC8vIGRhdGEgaWYgYWxyZWFkeSBmbG93aW5nIG5vdy5cbiAgICByZXR1cm4gc291cmNlLnBpcGUobmV3IFBhc3NUaHJvdWdoKCkpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbnV0aWxzLnNhbml0aXplUGF0aCA9IGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKGZpbGVwYXRoLCBmYWxzZSkucmVwbGFjZSgvXlxcdys6LywgJycpLnJlcGxhY2UoL14oXFwuXFwuXFwvfFxcLykrLywgJycpO1xufTtcblxudXRpbHMudHJhaWxpbmdTbGFzaEl0ID0gZnVuY3Rpb24oc3RyKSB7XG4gIHJldHVybiBzdHIuc2xpY2UoLTEpICE9PSAnLycgPyBzdHIgKyAnLycgOiBzdHI7XG59O1xuXG51dGlscy51bml4aWZ5UGF0aCA9IGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKGZpbGVwYXRoLCBmYWxzZSkucmVwbGFjZSgvXlxcdys6LywgJycpO1xufTtcblxudXRpbHMud2Fsa2RpciA9IGZ1bmN0aW9uKGRpcnBhdGgsIGJhc2UsIGNhbGxiYWNrKSB7XG4gIHZhciByZXN1bHRzID0gW107XG5cbiAgaWYgKHR5cGVvZiBiYXNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBiYXNlO1xuICAgIGJhc2UgPSBkaXJwYXRoO1xuICB9XG5cbiAgZnMucmVhZGRpcihkaXJwYXRoLCBmdW5jdGlvbihlcnIsIGxpc3QpIHtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGZpbGU7XG4gICAgdmFyIGZpbGVwYXRoO1xuXG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgfVxuXG4gICAgKGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmaWxlID0gbGlzdFtpKytdO1xuXG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgfVxuXG4gICAgICBmaWxlcGF0aCA9IHBhdGguam9pbihkaXJwYXRoLCBmaWxlKTtcblxuICAgICAgZnMuc3RhdChmaWxlcGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0cykge1xuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IGZpbGVwYXRoLFxuICAgICAgICAgIHJlbGF0aXZlOiBwYXRoLnJlbGF0aXZlKGJhc2UsIGZpbGVwYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyksXG4gICAgICAgICAgc3RhdHM6IHN0YXRzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzdGF0cyAmJiBzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgdXRpbHMud2Fsa2RpcihmaWxlcGF0aCwgYmFzZSwgZnVuY3Rpb24oZXJyLCByZXMpIHtcblx0ICAgIGlmKGVycil7XG5cdCAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuXHQgICAgfVxuXG4gICAgICAgICAgICByZXMuZm9yRWFjaChmdW5jdGlvbihkaXJFbnRyeSkge1xuICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZGlyRW50cnkpO1xuICAgICAgICAgICAgfSk7XG5cdFx0ICBcbiAgICAgICAgICAgIG5leHQoKTsgIFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgfSk7XG59O1xuIiwKICAgICIvKipcbiAqIEFyY2hpdmVyIENvcmVcbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5jb25zdCBFUlJPUl9DT0RFUyA9IHtcbiAgJ0FCT1JURUQnOiAnYXJjaGl2ZSB3YXMgYWJvcnRlZCcsXG4gICdESVJFQ1RPUllESVJQQVRIUkVRVUlSRUQnOiAnZGlyZXRvcnkgZGlycGF0aCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdESVJFQ1RPUllGVU5DVElPTklOVkFMSUREQVRBJzogJ2ludmFsaWQgZGF0YSByZXR1cm5lZCBieSBkaXJlY3RvcnkgY3VzdG9tIGRhdGEgZnVuY3Rpb24nLFxuICAnRU5UUllOQU1FUkVRVUlSRUQnOiAnZW50cnkgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdGSUxFRklMRVBBVEhSRVFVSVJFRCc6ICdmaWxlIGZpbGVwYXRoIGFyZ3VtZW50IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ0ZJTkFMSVpJTkcnOiAnYXJjaGl2ZSBhbHJlYWR5IGZpbmFsaXppbmcnLFxuICAnUVVFVUVDTE9TRUQnOiAncXVldWUgY2xvc2VkJyxcbiAgJ05PRU5ETUVUSE9EJzogJ25vIHN1aXRhYmxlIGZpbmFsaXplL2VuZCBtZXRob2QgZGVmaW5lZCBieSBtb2R1bGUnLFxuICAnRElSRUNUT1JZTk9UU1VQUE9SVEVEJzogJ3N1cHBvcnQgZm9yIGRpcmVjdG9yeSBlbnRyaWVzIG5vdCBkZWZpbmVkIGJ5IG1vZHVsZScsXG4gICdGT1JNQVRTRVQnOiAnYXJjaGl2ZSBmb3JtYXQgYWxyZWFkeSBzZXQnLFxuICAnSU5QVVRTVEVBTUJVRkZFUlJFUVVJUkVEJzogJ2lucHV0IHNvdXJjZSBtdXN0IGJlIHZhbGlkIFN0cmVhbSBvciBCdWZmZXIgaW5zdGFuY2UnLFxuICAnTU9EVUxFU0VUJzogJ21vZHVsZSBhbHJlYWR5IHNldCcsXG4gICdTWU1MSU5LTk9UU1VQUE9SVEVEJzogJ3N1cHBvcnQgZm9yIHN5bWxpbmsgZW50cmllcyBub3QgZGVmaW5lZCBieSBtb2R1bGUnLFxuICAnU1lNTElOS0ZJTEVQQVRIUkVRVUlSRUQnOiAnc3ltbGluayBmaWxlcGF0aCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdTWU1MSU5LVEFSR0VUUkVRVUlSRUQnOiAnc3ltbGluayB0YXJnZXQgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUnLFxuICAnRU5UUllOT1RTVVBQT1JURUQnOiAnZW50cnkgbm90IHN1cHBvcnRlZCdcbn07XG5cbmZ1bmN0aW9uIEFyY2hpdmVyRXJyb3IoY29kZSwgZGF0YSkge1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgLy90aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIHRoaXMubWVzc2FnZSA9IEVSUk9SX0NPREVTW2NvZGVdIHx8IGNvZGU7XG4gIHRoaXMuY29kZSA9IGNvZGU7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbnV0aWwuaW5oZXJpdHMoQXJjaGl2ZXJFcnJvciwgRXJyb3IpO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBBcmNoaXZlckVycm9yOyIsCiAgICAiLyoqXG4gKiBBcmNoaXZlciBDb3JlXG4gKlxuICogQGlnbm9yZVxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFfVxuICogQGNvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBnbG9iID0gcmVxdWlyZSgncmVhZGRpci1nbG9iJyk7XG52YXIgYXN5bmMgPSByZXF1aXJlKCdhc3luYycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ2FyY2hpdmVyLXV0aWxzJyk7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBBcmNoaXZlckVycm9yID0gcmVxdWlyZSgnLi9lcnJvcicpO1xudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpLlRyYW5zZm9ybTtcblxudmFyIHdpbjMyID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgVGhlIGFyY2hpdmUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSB7KENvcmVPcHRpb25zfFRyYW5zZm9ybU9wdGlvbnMpfSBvcHRpb25zIFNlZSBhbHNvIHtAbGluayBaaXBPcHRpb25zfSBhbmQge0BsaW5rIFRhck9wdGlvbnN9LlxuICovXG52YXIgQXJjaGl2ZXIgPSBmdW5jdGlvbihmb3JtYXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFyY2hpdmVyKSkge1xuICAgIHJldHVybiBuZXcgQXJjaGl2ZXIoZm9ybWF0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZm9ybWF0ICE9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSBmb3JtYXQ7XG4gICAgZm9ybWF0ID0gJ3ppcCc7XG4gIH1cblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gdXRpbC5kZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgaGlnaFdhdGVyTWFyazogMTAyNCAqIDEwMjQsXG4gICAgc3RhdENvbmN1cnJlbmN5OiA0XG4gIH0pO1xuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX2Zvcm1hdCA9IGZhbHNlO1xuICB0aGlzLl9tb2R1bGUgPSBmYWxzZTtcbiAgdGhpcy5fcGVuZGluZyA9IDA7XG4gIHRoaXMuX3BvaW50ZXIgPSAwO1xuXG4gIHRoaXMuX2VudHJpZXNDb3VudCA9IDA7XG4gIHRoaXMuX2VudHJpZXNQcm9jZXNzZWRDb3VudCA9IDA7XG4gIHRoaXMuX2ZzRW50cmllc1RvdGFsQnl0ZXMgPSAwO1xuICB0aGlzLl9mc0VudHJpZXNQcm9jZXNzZWRCeXRlcyA9IDA7XG5cbiAgdGhpcy5fcXVldWUgPSBhc3luYy5xdWV1ZSh0aGlzLl9vblF1ZXVlVGFzay5iaW5kKHRoaXMpLCAxKTtcbiAgdGhpcy5fcXVldWUuZHJhaW4odGhpcy5fb25RdWV1ZURyYWluLmJpbmQodGhpcykpO1xuXG4gIHRoaXMuX3N0YXRRdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX29uU3RhdFF1ZXVlVGFzay5iaW5kKHRoaXMpLCBvcHRpb25zLnN0YXRDb25jdXJyZW5jeSk7XG4gIHRoaXMuX3N0YXRRdWV1ZS5kcmFpbih0aGlzLl9vblF1ZXVlRHJhaW4uYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5fc3RhdGUgPSB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgZmluYWxpemU6IGZhbHNlLFxuICAgIGZpbmFsaXppbmc6IGZhbHNlLFxuICAgIGZpbmFsaXplZDogZmFsc2UsXG4gICAgbW9kdWxlUGlwZWQ6IGZhbHNlXG4gIH07XG5cbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xufTtcblxuaW5oZXJpdHMoQXJjaGl2ZXIsIFRyYW5zZm9ybSk7XG5cbi8qKlxuICogSW50ZXJuYWwgbG9naWMgZm9yIGBhYm9ydGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX2Fib3J0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3N0YXRlLmFib3J0ZWQgPSB0cnVlO1xuICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gIHRoaXMuX3N0YXRRdWV1ZS5raWxsKCk7XG5cbiAgaWYgKHRoaXMuX3F1ZXVlLmlkbGUoKSkge1xuICAgIHRoaXMuX3NodXRkb3duKCk7XG4gIH1cbn07XG5cbi8qKlxuICogSW50ZXJuYWwgaGVscGVyIGZvciBhcHBlbmRpbmcgZmlsZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge1N0cmluZ30gZmlsZXBhdGggVGhlIHNvdXJjZSBmaWxlcGF0aC5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBUaGUgZW50cnkgZGF0YS5cbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX2FwcGVuZCA9IGZ1bmN0aW9uKGZpbGVwYXRoLCBkYXRhKSB7XG4gIGRhdGEgPSBkYXRhIHx8IHt9O1xuXG4gIHZhciB0YXNrID0ge1xuICAgIHNvdXJjZTogbnVsbCxcbiAgICBmaWxlcGF0aDogZmlsZXBhdGhcbiAgfTtcblxuICBpZiAoIWRhdGEubmFtZSkge1xuICAgIGRhdGEubmFtZSA9IGZpbGVwYXRoO1xuICB9XG5cbiAgZGF0YS5zb3VyY2VQYXRoID0gZmlsZXBhdGg7XG4gIHRhc2suZGF0YSA9IGRhdGE7XG4gIHRoaXMuX2VudHJpZXNDb3VudCsrO1xuXG4gIGlmIChkYXRhLnN0YXRzICYmIGRhdGEuc3RhdHMgaW5zdGFuY2VvZiBmcy5TdGF0cykge1xuICAgIHRhc2sgPSB0aGlzLl91cGRhdGVRdWV1ZVRhc2tXaXRoU3RhdHModGFzaywgZGF0YS5zdGF0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGlmIChkYXRhLnN0YXRzLnNpemUpIHtcbiAgICAgICAgdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyArPSBkYXRhLnN0YXRzLnNpemU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2godGFzayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX3N0YXRRdWV1ZS5wdXNoKHRhc2spO1xuICB9XG59O1xuXG4vKipcbiAqIEludGVybmFsIGxvZ2ljIGZvciBgZmluYWxpemVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX3N0YXRlLmZpbmFsaXppbmcgPSB0cnVlO1xuXG4gIHRoaXMuX21vZHVsZUZpbmFsaXplKCk7XG5cbiAgdGhpcy5fc3RhdGUuZmluYWxpemluZyA9IGZhbHNlO1xuICB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhlIHZhcmlvdXMgc3RhdGUgdmFyaWFibGVzIHRvIGRldGVybWluZSBpZiB3ZSBjYW4gYGZpbmFsaXplYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tYXliZUZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplICYmIHRoaXMuX3BlbmRpbmcgPT09IDAgJiYgdGhpcy5fcXVldWUuaWRsZSgpICYmIHRoaXMuX3N0YXRRdWV1ZS5pZGxlKCkpIHtcbiAgICB0aGlzLl9maW5hbGl6ZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIGFuIGVudHJ5IHRvIHRoZSBtb2R1bGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBmaXJlcyAgQXJjaGl2ZXIjZW50cnlcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtKX0gc291cmNlXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGFcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlQXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIGNhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlLmFwcGVuZChzb3VyY2UsIGRhdGEsIGZ1bmN0aW9uKGVycikge1xuICAgIHRoaXMuX3Rhc2sgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICAgIHRoaXMuX3NodXRkb3duKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGVudHJ5J3MgaW5wdXQgaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBhcHBlbmRlZCB0byB0aGUgYXJjaGl2ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBBcmNoaXZlciNlbnRyeVxuICAgICAqIEB0eXBlIHtFbnRyeURhdGF9XG4gICAgICovXG4gICAgdGhpcy5lbWl0KCdlbnRyeScsIGRhdGEpO1xuICAgIHRoaXMuX2VudHJpZXNQcm9jZXNzZWRDb3VudCsrO1xuXG4gICAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5zdGF0cy5zaXplKSB7XG4gICAgICB0aGlzLl9mc0VudHJpZXNQcm9jZXNzZWRCeXRlcyArPSBkYXRhLnN0YXRzLnNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGV2ZW50IEFyY2hpdmVyI3Byb2dyZXNzXG4gICAgICogQHR5cGUge1Byb2dyZXNzRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywge1xuICAgICAgZW50cmllczoge1xuICAgICAgICB0b3RhbDogdGhpcy5fZW50cmllc0NvdW50LFxuICAgICAgICBwcm9jZXNzZWQ6IHRoaXMuX2VudHJpZXNQcm9jZXNzZWRDb3VudFxuICAgICAgfSxcbiAgICAgIGZzOiB7XG4gICAgICAgIHRvdGFsQnl0ZXM6IHRoaXMuX2ZzRW50cmllc1RvdGFsQnl0ZXMsXG4gICAgICAgIHByb2Nlc3NlZEJ5dGVzOiB0aGlzLl9mc0VudHJpZXNQcm9jZXNzZWRCeXRlc1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogRmluYWxpemVzIHRoZSBtb2R1bGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX21vZHVsZUZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2YgdGhpcy5fbW9kdWxlLmZpbmFsaXplID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fbW9kdWxlLmZpbmFsaXplKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX21vZHVsZS5lbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9tb2R1bGUuZW5kKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdOT0VORE1FVEhPRCcpKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQaXBlcyB0aGUgbW9kdWxlIHRvIG91ciBpbnRlcm5hbCBzdHJlYW0gd2l0aCBlcnJvciBidWJibGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlUGlwZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9tb2R1bGUub24oJ2Vycm9yJywgdGhpcy5fb25Nb2R1bGVFcnJvci5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fbW9kdWxlLnBpcGUodGhpcyk7XG4gIHRoaXMuX3N0YXRlLm1vZHVsZVBpcGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCBtb2R1bGUgc3VwcG9ydHMgYSBkZWZpbmVkIGZlYXR1cmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge1N0cmluZ30ga2V5XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX21vZHVsZVN1cHBvcnRzID0gZnVuY3Rpb24oa2V5KSB7XG4gIGlmICghdGhpcy5fbW9kdWxlLnN1cHBvcnRzIHx8ICF0aGlzLl9tb2R1bGUuc3VwcG9ydHNba2V5XSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9tb2R1bGUuc3VwcG9ydHNba2V5XTtcbn07XG5cbi8qKlxuICogVW5waXBlcyB0aGUgbW9kdWxlIGZyb20gb3VyIGludGVybmFsIHN0cmVhbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlVW5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX21vZHVsZS51bnBpcGUodGhpcyk7XG4gIHRoaXMuX3N0YXRlLm1vZHVsZVBpcGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZW50cnkgZGF0YSB3aXRoIGZhbGxiYWNrcyBmb3Iga2V5IHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gZGF0YVxuICogQHBhcmFtICB7ZnMuU3RhdHN9IHN0YXRzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbm9ybWFsaXplRW50cnlEYXRhID0gZnVuY3Rpb24oZGF0YSwgc3RhdHMpIHtcbiAgZGF0YSA9IHV0aWwuZGVmYXVsdHMoZGF0YSwge1xuICAgIHR5cGU6ICdmaWxlJyxcbiAgICBuYW1lOiBudWxsLFxuICAgIGRhdGU6IG51bGwsXG4gICAgbW9kZTogbnVsbCxcbiAgICBwcmVmaXg6IG51bGwsXG4gICAgc291cmNlUGF0aDogbnVsbCxcbiAgICBzdGF0czogZmFsc2VcbiAgfSk7XG5cbiAgaWYgKHN0YXRzICYmIGRhdGEuc3RhdHMgPT09IGZhbHNlKSB7XG4gICAgZGF0YS5zdGF0cyA9IHN0YXRzO1xuICB9XG5cbiAgdmFyIGlzRGlyID0gZGF0YS50eXBlID09PSAnZGlyZWN0b3J5JztcblxuICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhLnByZWZpeCA9PT0gJ3N0cmluZycgJiYgJycgIT09IGRhdGEucHJlZml4KSB7XG4gICAgICBkYXRhLm5hbWUgPSBkYXRhLnByZWZpeCArICcvJyArIGRhdGEubmFtZTtcbiAgICAgIGRhdGEucHJlZml4ID0gbnVsbDtcbiAgICB9XG5cbiAgICBkYXRhLm5hbWUgPSB1dGlsLnNhbml0aXplUGF0aChkYXRhLm5hbWUpO1xuXG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ3N5bWxpbmsnICYmIGRhdGEubmFtZS5zbGljZSgtMSkgPT09ICcvJykge1xuICAgICAgaXNEaXIgPSB0cnVlO1xuICAgICAgZGF0YS50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgfSBlbHNlIGlmIChpc0Rpcikge1xuICAgICAgZGF0YS5uYW1lICs9ICcvJztcbiAgICB9XG4gIH1cblxuICAvLyA1MTEgPT09IDA3Nzc7IDQ5MyA9PT0gMDc1NTsgNDM4ID09PSAwNjY2OyA0MjAgPT09IDA2NDRcbiAgaWYgKHR5cGVvZiBkYXRhLm1vZGUgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHdpbjMyKSB7XG4gICAgICBkYXRhLm1vZGUgJj0gNTExO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhLm1vZGUgJj0gNDA5NVxuICAgIH1cbiAgfSBlbHNlIGlmIChkYXRhLnN0YXRzICYmIGRhdGEubW9kZSA9PT0gbnVsbCkge1xuICAgIGlmICh3aW4zMikge1xuICAgICAgZGF0YS5tb2RlID0gZGF0YS5zdGF0cy5tb2RlICYgNTExO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhLm1vZGUgPSBkYXRhLnN0YXRzLm1vZGUgJiA0MDk1O1xuICAgIH1cblxuICAgIC8vIHN0YXQgaXNuJ3QgcmVsaWFibGUgb24gd2luZG93czsgZm9yY2UgMDc1NSBmb3IgZGlyXG4gICAgaWYgKHdpbjMyICYmIGlzRGlyKSB7XG4gICAgICBkYXRhLm1vZGUgPSA0OTM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRhdGEubW9kZSA9PT0gbnVsbCkge1xuICAgIGRhdGEubW9kZSA9IGlzRGlyID8gNDkzIDogNDIwO1xuICB9XG5cbiAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5kYXRlID09PSBudWxsKSB7XG4gICAgZGF0YS5kYXRlID0gZGF0YS5zdGF0cy5tdGltZTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhLmRhdGUgPSB1dGlsLmRhdGVpZnkoZGF0YS5kYXRlKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBFcnJvciBsaXN0ZW5lciB0aGF0IHJlLWVtaXRzIGVycm9yIG9uIHRvIG91ciBpbnRlcm5hbCBzdHJlYW0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX29uTW9kdWxlRXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgLyoqXG4gICAqIEBldmVudCBBcmNoaXZlciNlcnJvclxuICAgKiBAdHlwZSB7RXJyb3JEYXRhfVxuICAgKi9cbiAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGUgdmFyaW91cyBzdGF0ZSB2YXJpYWJsZXMgYWZ0ZXIgcXVldWUgaGFzIGRyYWluZWQgdG8gZGV0ZXJtaW5lIGlmXG4gKiB3ZSBuZWVkIHRvIGBmaW5hbGl6ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX29uUXVldWVEcmFpbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSAmJiB0aGlzLl9wZW5kaW5nID09PSAwICYmIHRoaXMuX3F1ZXVlLmlkbGUoKSAmJiB0aGlzLl9zdGF0UXVldWUuaWRsZSgpKSB7XG4gICAgdGhpcy5fZmluYWxpemUoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBcHBlbmRzIGVhY2ggcXVldWUgdGFzayB0byB0aGUgbW9kdWxlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhc2tcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25RdWV1ZVRhc2sgPSBmdW5jdGlvbih0YXNrLCBjYWxsYmFjaykge1xuICB2YXIgZnVsbENhbGxiYWNrID0gKCkgPT4ge1xuICAgIGlmKHRhc2suZGF0YS5jYWxsYmFjaykge1xuICAgICAgdGFzay5kYXRhLmNhbGxiYWNrKCk7XG4gICAgfVxuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIGZ1bGxDYWxsYmFjaygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX3Rhc2sgPSB0YXNrO1xuICB0aGlzLl9tb2R1bGVBcHBlbmQodGFzay5zb3VyY2UsIHRhc2suZGF0YSwgZnVsbENhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBmaWxlIHN0YXQgYW5kIHJlaW5qZWN0cyB0aGUgdGFzayBiYWNrIGludG8gdGhlIHF1ZXVlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhc2tcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25TdGF0UXVldWVUYXNrID0gZnVuY3Rpb24odGFzaywgY2FsbGJhY2spIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXppbmcgfHwgdGhpcy5fc3RhdGUuZmluYWxpemVkIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICBjYWxsYmFjaygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZzLmxzdGF0KHRhc2suZmlsZXBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdHMpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzLl9lbnRyaWVzQ291bnQtLTtcblxuICAgICAgLyoqXG4gICAgICAgKiBAZXZlbnQgQXJjaGl2ZXIjd2FybmluZ1xuICAgICAgICogQHR5cGUge0Vycm9yRGF0YX1cbiAgICAgICAqL1xuICAgICAgdGhpcy5lbWl0KCd3YXJuaW5nJywgZXJyKTtcbiAgICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGFzayA9IHRoaXMuX3VwZGF0ZVF1ZXVlVGFza1dpdGhTdGF0cyh0YXNrLCBzdGF0cyk7XG5cbiAgICBpZiAodGFzaykge1xuICAgICAgaWYgKHN0YXRzLnNpemUpIHtcbiAgICAgICAgdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyArPSBzdGF0cy5zaXplO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRhc2spO1xuICAgIH1cblxuICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIFVucGlwZXMgdGhlIG1vZHVsZSBhbmQgZW5kcyBvdXIgaW50ZXJuYWwgc3RyZWFtLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9tb2R1bGVVbnBpcGUoKTtcbiAgdGhpcy5lbmQoKTtcbn07XG5cbi8qKlxuICogVHJhY2tzIHRoZSBieXRlcyBlbWl0dGVkIGJ5IG91ciBpbnRlcm5hbCBzdHJlYW0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0J1ZmZlcn0gY2h1bmtcbiAqIEBwYXJhbSAge1N0cmluZ30gZW5jb2RpbmdcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBpZiAoY2h1bmspIHtcbiAgICB0aGlzLl9wb2ludGVyICs9IGNodW5rLmxlbmd0aDtcbiAgfVxuXG4gIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyBhbmQgbm9ybWFsaXplcyBhIHF1ZXVlIHRhc2sgdXNpbmcgc3RhdHMgZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7T2JqZWN0fSB0YXNrXG4gKiBAcGFyYW0gIHtmcy5TdGF0c30gc3RhdHNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl91cGRhdGVRdWV1ZVRhc2tXaXRoU3RhdHMgPSBmdW5jdGlvbih0YXNrLCBzdGF0cykge1xuICBpZiAoc3RhdHMuaXNGaWxlKCkpIHtcbiAgICB0YXNrLmRhdGEudHlwZSA9ICdmaWxlJztcbiAgICB0YXNrLmRhdGEuc291cmNlVHlwZSA9ICdzdHJlYW0nO1xuICAgIHRhc2suc291cmNlID0gdXRpbC5sYXp5UmVhZFN0cmVhbSh0YXNrLmZpbGVwYXRoKTtcbiAgfSBlbHNlIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpICYmIHRoaXMuX21vZHVsZVN1cHBvcnRzKCdkaXJlY3RvcnknKSkge1xuICAgIHRhc2suZGF0YS5uYW1lID0gdXRpbC50cmFpbGluZ1NsYXNoSXQodGFzay5kYXRhLm5hbWUpO1xuICAgIHRhc2suZGF0YS50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgdGFzay5kYXRhLnNvdXJjZVBhdGggPSB1dGlsLnRyYWlsaW5nU2xhc2hJdCh0YXNrLmZpbGVwYXRoKTtcbiAgICB0YXNrLmRhdGEuc291cmNlVHlwZSA9ICdidWZmZXInO1xuICAgIHRhc2suc291cmNlID0gQnVmZmVyLmNvbmNhdChbXSk7XG4gIH0gZWxzZSBpZiAoc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSAmJiB0aGlzLl9tb2R1bGVTdXBwb3J0cygnc3ltbGluaycpKSB7XG4gICAgdmFyIGxpbmtQYXRoID0gZnMucmVhZGxpbmtTeW5jKHRhc2suZmlsZXBhdGgpO1xuICAgIHZhciBkaXJOYW1lID0gcGF0aC5kaXJuYW1lKHRhc2suZmlsZXBhdGgpO1xuICAgIHRhc2suZGF0YS50eXBlID0gJ3N5bWxpbmsnO1xuICAgIHRhc2suZGF0YS5saW5rbmFtZSA9IHBhdGgucmVsYXRpdmUoZGlyTmFtZSwgcGF0aC5yZXNvbHZlKGRpck5hbWUsIGxpbmtQYXRoKSk7XG4gICAgdGFzay5kYXRhLnNvdXJjZVR5cGUgPSAnYnVmZmVyJztcbiAgICB0YXNrLnNvdXJjZSA9IEJ1ZmZlci5jb25jYXQoW10pO1xuICB9IGVsc2Uge1xuICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZTk9UU1VQUE9SVEVEJywgdGFzay5kYXRhKSk7XG4gICAgfSBlbHNlIGlmIChzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS05PVFNVUFBPUlRFRCcsIHRhc2suZGF0YSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBuZXcgQXJjaGl2ZXJFcnJvcignRU5UUllOT1RTVVBQT1JURUQnLCB0YXNrLmRhdGEpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRhc2suZGF0YSA9IHRoaXMuX25vcm1hbGl6ZUVudHJ5RGF0YSh0YXNrLmRhdGEsIHN0YXRzKTtcblxuICByZXR1cm4gdGFzaztcbn07XG5cbi8qKlxuICogQWJvcnRzIHRoZSBhcmNoaXZpbmcgcHJvY2VzcywgdGFraW5nIGEgYmVzdC1lZmZvcnQgYXBwcm9hY2gsIGJ5OlxuICpcbiAqIC0gcmVtb3ZpbmcgYW55IHBlbmRpbmcgcXVldWUgdGFza3NcbiAqIC0gYWxsb3dpbmcgYW55IGFjdGl2ZSBxdWV1ZSB3b3JrZXJzIHRvIGZpbmlzaFxuICogLSBkZXRhY2hpbmcgaW50ZXJuYWwgbW9kdWxlIHBpcGVzXG4gKiAtIGVuZGluZyBib3RoIHNpZGVzIG9mIHRoZSBUcmFuc2Zvcm0gc3RyZWFtXG4gKlxuICogSXQgd2lsbCBOT1QgZHJhaW4gYW55IHJlbWFpbmluZyBzb3VyY2VzLlxuICpcbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2Fib3J0KCk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYW4gaW5wdXQgc291cmNlICh0ZXh0IHN0cmluZywgYnVmZmVyLCBvciBzdHJlYW0pIHRvIHRoZSBpbnN0YW5jZS5cbiAqXG4gKiBXaGVuIHRoZSBpbnN0YW5jZSBoYXMgcmVjZWl2ZWQsIHByb2Nlc3NlZCwgYW5kIGVtaXR0ZWQgdGhlIGlucHV0LCB0aGUgYGVudHJ5YFxuICogZXZlbnQgaXMgZmlyZWQuXG4gKlxuICogQGZpcmVzICBBcmNoaXZlciNlbnRyeVxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW18U3RyaW5nKX0gc291cmNlIFRoZSBpbnB1dCBzb3VyY2UuXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGEgU2VlIGFsc28ge0BsaW5rIFppcEVudHJ5RGF0YX0gYW5kIHtAbGluayBUYXJFbnRyeURhdGF9LlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHNvdXJjZSwgZGF0YSkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignUVVFVUVDTE9TRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkYXRhID0gdGhpcy5fbm9ybWFsaXplRW50cnlEYXRhKGRhdGEpO1xuXG4gIGlmICh0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJyB8fCBkYXRhLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdFTlRSWU5BTUVSRVFVSVJFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdkaXJlY3RvcnknICYmICF0aGlzLl9tb2R1bGVTdXBwb3J0cygnZGlyZWN0b3J5JykpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0RJUkVDVE9SWU5PVFNVUFBPUlRFRCcsIHsgbmFtZTogZGF0YS5uYW1lIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNvdXJjZSA9IHV0aWwubm9ybWFsaXplSW5wdXRTb3VyY2Uoc291cmNlKTtcblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICBkYXRhLnNvdXJjZVR5cGUgPSAnYnVmZmVyJztcbiAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKHNvdXJjZSkpIHtcbiAgICBkYXRhLnNvdXJjZVR5cGUgPSAnc3RyZWFtJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0lOUFVUU1RFQU1CVUZGRVJSRVFVSVJFRCcsIHsgbmFtZTogZGF0YS5uYW1lIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2VudHJpZXNDb3VudCsrO1xuICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIHNvdXJjZTogc291cmNlXG4gIH0pO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIGEgZGlyZWN0b3J5IGFuZCBpdHMgZmlsZXMsIHJlY3Vyc2l2ZWx5LCBnaXZlbiBpdHMgZGlycGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRpcnBhdGggVGhlIHNvdXJjZSBkaXJlY3RvcnkgcGF0aC5cbiAqIEBwYXJhbSAge1N0cmluZ30gZGVzdHBhdGggVGhlIGRlc3RpbmF0aW9uIHBhdGggd2l0aGluIHRoZSBhcmNoaXZlLlxuICogQHBhcmFtICB7KEVudHJ5RGF0YXxGdW5jdGlvbil9IGRhdGEgU2VlIGFsc28gW1ppcEVudHJ5RGF0YV17QGxpbmsgWmlwRW50cnlEYXRhfSBhbmRcbiAqIFtUYXJFbnRyeURhdGFde0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZGlyZWN0b3J5ID0gZnVuY3Rpb24oZGlycGF0aCwgZGVzdHBhdGgsIGRhdGEpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1FVRVVFQ0xPU0VEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkaXJwYXRoICE9PSAnc3RyaW5nJyB8fCBkaXJwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZRElSUEFUSFJFUVVJUkVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fcGVuZGluZysrO1xuXG4gIGlmIChkZXN0cGF0aCA9PT0gZmFsc2UpIHtcbiAgICBkZXN0cGF0aCA9ICcnO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZXN0cGF0aCAhPT0gJ3N0cmluZycpe1xuICAgIGRlc3RwYXRoID0gZGlycGF0aDtcbiAgfVxuXG4gIHZhciBkYXRhRnVuY3Rpb24gPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZGF0YUZ1bmN0aW9uID0gZGF0YTtcbiAgICBkYXRhID0ge307XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgZGF0YSA9IHt9O1xuICB9XG5cbiAgdmFyIGdsb2JPcHRpb25zID0ge1xuICAgIHN0YXQ6IHRydWUsXG4gICAgZG90OiB0cnVlXG4gIH07XG5cbiAgZnVuY3Rpb24gb25HbG9iRW5kKCkge1xuICAgIHRoaXMuX3BlbmRpbmctLTtcbiAgICB0aGlzLl9tYXliZUZpbmFsaXplKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkdsb2JFcnJvcihlcnIpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYk1hdGNoKG1hdGNoKXtcbiAgICBnbG9iYmVyLnBhdXNlKCk7XG5cbiAgICB2YXIgaWdub3JlTWF0Y2ggPSBmYWxzZTtcbiAgICB2YXIgZW50cnlEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSk7XG4gICAgZW50cnlEYXRhLm5hbWUgPSBtYXRjaC5yZWxhdGl2ZTtcbiAgICBlbnRyeURhdGEucHJlZml4ID0gZGVzdHBhdGg7XG4gICAgZW50cnlEYXRhLnN0YXRzID0gbWF0Y2guc3RhdDtcbiAgICBlbnRyeURhdGEuY2FsbGJhY2sgPSBnbG9iYmVyLnJlc3VtZS5iaW5kKGdsb2JiZXIpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChkYXRhRnVuY3Rpb24pIHtcbiAgICAgICAgZW50cnlEYXRhID0gZGF0YUZ1bmN0aW9uKGVudHJ5RGF0YSk7XG5cbiAgICAgICAgaWYgKGVudHJ5RGF0YSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZ25vcmVNYXRjaCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5RGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZRlVOQ1RJT05JTlZBTElEREFUQScsIHsgZGlycGF0aDogZGlycGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2goZSkge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpZ25vcmVNYXRjaCkge1xuICAgICAgZ2xvYmJlci5yZXN1bWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBlbmQobWF0Y2guYWJzb2x1dGUsIGVudHJ5RGF0YSk7XG4gIH1cblxuICB2YXIgZ2xvYmJlciA9IGdsb2IoZGlycGF0aCwgZ2xvYk9wdGlvbnMpO1xuICBnbG9iYmVyLm9uKCdlcnJvcicsIG9uR2xvYkVycm9yLmJpbmQodGhpcykpO1xuICBnbG9iYmVyLm9uKCdtYXRjaCcsIG9uR2xvYk1hdGNoLmJpbmQodGhpcykpO1xuICBnbG9iYmVyLm9uKCdlbmQnLCBvbkdsb2JFbmQuYmluZCh0aGlzKSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYSBmaWxlIGdpdmVuIGl0cyBmaWxlcGF0aCB1c2luZyBhXG4gKiBbbGF6eXN0cmVhbV17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2pwb21tZXJlbmluZy9ub2RlLWxhenlzdHJlYW19IHdyYXBwZXIgdG9cbiAqIHByZXZlbnQgaXNzdWVzIHdpdGggb3BlbiBmaWxlIGxpbWl0cy5cbiAqXG4gKiBXaGVuIHRoZSBpbnN0YW5jZSBoYXMgcmVjZWl2ZWQsIHByb2Nlc3NlZCwgYW5kIGVtaXR0ZWQgdGhlIGZpbGUsIHRoZSBgZW50cnlgXG4gKiBldmVudCBpcyBmaXJlZC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZpbGVwYXRoIFRoZSBzb3VyY2UgZmlsZXBhdGguXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGEgU2VlIGFsc28gW1ppcEVudHJ5RGF0YV17QGxpbmsgWmlwRW50cnlEYXRhfSBhbmRcbiAqIFtUYXJFbnRyeURhdGFde0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZmlsZSA9IGZ1bmN0aW9uKGZpbGVwYXRoLCBkYXRhKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdRVUVVRUNMT1NFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmlsZXBhdGggIT09ICdzdHJpbmcnIHx8IGZpbGVwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRklMRUZJTEVQQVRIUkVRVUlSRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aGlzLl9hcHBlbmQoZmlsZXBhdGgsIGRhdGEpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIG11bHRpcGxlIGZpbGVzIHRoYXQgbWF0Y2ggYSBnbG9iIHBhdHRlcm4uXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBwYXR0ZXJuIFRoZSBbZ2xvYiBwYXR0ZXJuXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL21pbmltYXRjaH0gdG8gbWF0Y2guXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgU2VlIFtub2RlLXJlYWRkaXItZ2xvYl17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3lxbm4vbm9kZS1yZWFkZGlyLWdsb2Ijb3B0aW9uc30uXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGEgU2VlIGFsc28gW1ppcEVudHJ5RGF0YV17QGxpbmsgWmlwRW50cnlEYXRhfSBhbmRcbiAqIFtUYXJFbnRyeURhdGFde0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZ2xvYiA9IGZ1bmN0aW9uKHBhdHRlcm4sIG9wdGlvbnMsIGRhdGEpIHtcbiAgdGhpcy5fcGVuZGluZysrO1xuXG4gIG9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBzdGF0OiB0cnVlLFxuICAgIHBhdHRlcm46IHBhdHRlcm5cbiAgfSk7XG5cbiAgZnVuY3Rpb24gb25HbG9iRW5kKCkge1xuICAgIHRoaXMuX3BlbmRpbmctLTtcbiAgICB0aGlzLl9tYXliZUZpbmFsaXplKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkdsb2JFcnJvcihlcnIpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYk1hdGNoKG1hdGNoKXtcbiAgICBnbG9iYmVyLnBhdXNlKCk7XG4gICAgdmFyIGVudHJ5RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEpO1xuICAgIGVudHJ5RGF0YS5jYWxsYmFjayA9IGdsb2JiZXIucmVzdW1lLmJpbmQoZ2xvYmJlcik7XG4gICAgZW50cnlEYXRhLnN0YXRzID0gbWF0Y2guc3RhdDtcbiAgICBlbnRyeURhdGEubmFtZSA9IG1hdGNoLnJlbGF0aXZlO1xuXG4gICAgdGhpcy5fYXBwZW5kKG1hdGNoLmFic29sdXRlLCBlbnRyeURhdGEpO1xuICB9XG5cbiAgdmFyIGdsb2JiZXIgPSBnbG9iKG9wdGlvbnMuY3dkIHx8ICcuJywgb3B0aW9ucyk7XG4gIGdsb2JiZXIub24oJ2Vycm9yJywgb25HbG9iRXJyb3IuYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ21hdGNoJywgb25HbG9iTWF0Y2guYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ2VuZCcsIG9uR2xvYkVuZC5iaW5kKHRoaXMpKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRmluYWxpemVzIHRoZSBpbnN0YW5jZSBhbmQgcHJldmVudHMgZnVydGhlciBhcHBlbmRpbmcgdG8gdGhlIGFyY2hpdmVcbiAqIHN0cnVjdHVyZSAocXVldWUgd2lsbCBjb250aW51ZSB0aWwgZHJhaW5lZCkuXG4gKlxuICogVGhlIGBlbmRgLCBgY2xvc2VgIG9yIGBmaW5pc2hgIGV2ZW50cyBvbiB0aGUgZGVzdGluYXRpb24gc3RyZWFtIG1heSBmaXJlXG4gKiByaWdodCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIHNvIHlvdSBzaG91bGQgc2V0IGxpc3RlbmVycyBiZWZvcmVoYW5kIHRvXG4gKiBwcm9wZXJseSBkZXRlY3Qgc3RyZWFtIGNvbXBsZXRpb24uXG4gKlxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdmFyIGFib3J0ZWRFcnJvciA9IG5ldyBBcmNoaXZlckVycm9yKCdBQk9SVEVEJyk7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGFib3J0ZWRFcnJvcik7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGFib3J0ZWRFcnJvcik7XG4gIH1cblxuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUpIHtcbiAgICB2YXIgZmluYWxpemluZ0Vycm9yID0gbmV3IEFyY2hpdmVyRXJyb3IoJ0ZJTkFMSVpJTkcnKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZmluYWxpemluZ0Vycm9yKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZmluYWxpemluZ0Vycm9yKTtcbiAgfVxuXG4gIHRoaXMuX3N0YXRlLmZpbmFsaXplID0gdHJ1ZTtcblxuICBpZiAodGhpcy5fcGVuZGluZyA9PT0gMCAmJiB0aGlzLl9xdWV1ZS5pZGxlKCkgJiYgdGhpcy5fc3RhdFF1ZXVlLmlkbGUoKSkge1xuICAgIHRoaXMuX2ZpbmFsaXplKCk7XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBlcnJvcmVkO1xuXG4gICAgc2VsZi5fbW9kdWxlLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghZXJyb3JlZCkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSlcblxuICAgIHNlbGYuX21vZHVsZS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSlcbiAgfSlcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbW9kdWxlIGZvcm1hdCBuYW1lIHVzZWQgZm9yIGFyY2hpdmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IFRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuc2V0Rm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gIGlmICh0aGlzLl9mb3JtYXQpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0ZPUk1BVFNFVCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2Zvcm1hdCA9IGZvcm1hdDtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbW9kdWxlIHVzZWQgZm9yIGFyY2hpdmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2R1bGUgVGhlIGZ1bmN0aW9uIGZvciBhcmNoaXZlciB0byBpbnRlcmFjdCB3aXRoLlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLnNldE1vZHVsZSA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignQUJPUlRFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5tb2R1bGUpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ01PRFVMRVNFVCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX21vZHVsZSA9IG1vZHVsZTtcbiAgdGhpcy5fbW9kdWxlUGlwZSgpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIGEgc3ltbGluayB0byB0aGUgaW5zdGFuY2UuXG4gKlxuICogVGhpcyBkb2VzIE5PVCBpbnRlcmFjdCB3aXRoIGZpbGVzeXN0ZW0gYW5kIGlzIHVzZWQgZm9yIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRpbmcgc3ltbGlua3MuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBmaWxlcGF0aCBUaGUgc3ltbGluayBwYXRoICh3aXRoaW4gYXJjaGl2ZSkuXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHRhcmdldCBUaGUgdGFyZ2V0IHBhdGggKHdpdGhpbiBhcmNoaXZlKS5cbiAqIEBwYXJhbSAge051bWJlcn0gbW9kZSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5zeW1saW5rID0gZnVuY3Rpb24oZmlsZXBhdGgsIHRhcmdldCwgbW9kZSkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignUVVFVUVDTE9TRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAodHlwZW9mIGZpbGVwYXRoICE9PSAnc3RyaW5nJyB8fCBmaWxlcGF0aC5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1NZTUxJTktGSUxFUEFUSFJFUVVJUkVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdzdHJpbmcnIHx8IHRhcmdldC5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1NZTUxJTktUQVJHRVRSRVFVSVJFRCcsIHsgZmlsZXBhdGg6IGZpbGVwYXRoIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICghdGhpcy5fbW9kdWxlU3VwcG9ydHMoJ3N5bWxpbmsnKSkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS05PVFNVUFBPUlRFRCcsIHsgZmlsZXBhdGg6IGZpbGVwYXRoIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBkYXRhID0ge307XG4gIGRhdGEudHlwZSA9ICdzeW1saW5rJztcbiAgZGF0YS5uYW1lID0gZmlsZXBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBkYXRhLmxpbmtuYW1lID0gdGFyZ2V0LnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgZGF0YS5zb3VyY2VUeXBlID0gJ2J1ZmZlcic7XG5cbiAgaWYgKHR5cGVvZiBtb2RlID09PSBcIm51bWJlclwiKSB7XG4gICAgZGF0YS5tb2RlID0gbW9kZTtcbiAgfVxuXG4gIHRoaXMuX2VudHJpZXNDb3VudCsrO1xuICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIHNvdXJjZTogQnVmZmVyLmNvbmNhdChbXSlcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgbGVuZ3RoIChpbiBieXRlcykgdGhhdCBoYXMgYmVlbiBlbWl0dGVkLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLnBvaW50ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3BvaW50ZXI7XG59O1xuXG4vKipcbiAqIE1pZGRsZXdhcmUtbGlrZSBoZWxwZXIgdGhhdCBoYXMgeWV0IHRvIGJlIGZ1bGx5IGltcGxlbWVudGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gcGx1Z2luXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24ocGx1Z2luKSB7XG4gIHRoaXMuX3N0cmVhbXMucHVzaChwbHVnaW4pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXJjaGl2ZXI7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29yZU9wdGlvbnNcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbc3RhdENvbmN1cnJlbmN5PTRdIFNldHMgdGhlIG51bWJlciBvZiB3b3JrZXJzIHVzZWQgdG9cbiAqIHByb2Nlc3MgdGhlIGludGVybmFsIGZzIHN0YXQgcXVldWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUcmFuc2Zvcm1PcHRpb25zXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFthbGxvd0hhbGZPcGVuPXRydWVdIElmIHNldCB0byBmYWxzZSwgdGhlbiB0aGUgc3RyZWFtXG4gKiB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSByZWFkYWJsZSBzaWRlIHdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZW5kcyBhbmQgdmljZVxuICogdmVyc2EuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtyZWFkYWJsZU9iamVjdE1vZGU9ZmFsc2VdIFNldHMgb2JqZWN0TW9kZSBmb3IgcmVhZGFibGVcbiAqIHNpZGUgb2YgdGhlIHN0cmVhbS4gSGFzIG5vIGVmZmVjdCBpZiBvYmplY3RNb2RlIGlzIHRydWUuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFt3cml0YWJsZU9iamVjdE1vZGU9ZmFsc2VdIFNldHMgb2JqZWN0TW9kZSBmb3Igd3JpdGFibGVcbiAqIHNpZGUgb2YgdGhlIHN0cmVhbS4gSGFzIG5vIGVmZmVjdCBpZiBvYmplY3RNb2RlIGlzIHRydWUuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtkZWNvZGVTdHJpbmdzPXRydWVdIFdoZXRoZXIgb3Igbm90IHRvIGRlY29kZSBzdHJpbmdzXG4gKiBpbnRvIEJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byBfd3JpdGUoKS4gYFdyaXRhYmxlYFxuICogQHByb3BlcnR5IHtTdHJpbmd9IFtlbmNvZGluZz1OVUxMXSBJZiBzcGVjaWZpZWQsIHRoZW4gYnVmZmVycyB3aWxsIGJlIGRlY29kZWRcbiAqIHRvIHN0cmluZ3MgdXNpbmcgdGhlIHNwZWNpZmllZCBlbmNvZGluZy4gYFJlYWRhYmxlYFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFtoaWdoV2F0ZXJNYXJrPTE2a2JdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBzdG9yZVxuICogaW4gdGhlIGludGVybmFsIGJ1ZmZlciBiZWZvcmUgY2Vhc2luZyB0byByZWFkIGZyb20gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UuXG4gKiBgUmVhZGFibGVgIGBXcml0YWJsZWBcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW29iamVjdE1vZGU9ZmFsc2VdIFdoZXRoZXIgdGhpcyBzdHJlYW0gc2hvdWxkIGJlaGF2ZSBhcyBhXG4gKiBzdHJlYW0gb2Ygb2JqZWN0cy4gTWVhbmluZyB0aGF0IHN0cmVhbS5yZWFkKG4pIHJldHVybnMgYSBzaW5nbGUgdmFsdWUgaW5zdGVhZFxuICogb2YgYSBCdWZmZXIgb2Ygc2l6ZSBuLiBgUmVhZGFibGVgIGBXcml0YWJsZWBcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVudHJ5RGF0YVxuICogQHByb3BlcnR5IHtTdHJpbmd9IG5hbWUgU2V0cyB0aGUgZW50cnkgbmFtZSBpbmNsdWRpbmcgaW50ZXJuYWwgcGF0aC5cbiAqIEBwcm9wZXJ0eSB7KFN0cmluZ3xEYXRlKX0gW2RhdGU9Tk9XKCldIFNldHMgdGhlIGVudHJ5IGRhdGUuXG4gKiBAcHJvcGVydHkge051bWJlcn0gW21vZGU9RDowNzU1L0Y6MDY0NF0gU2V0cyB0aGUgZW50cnkgcGVybWlzc2lvbnMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gW3ByZWZpeF0gU2V0cyBhIHBhdGggcHJlZml4IGZvciB0aGUgZW50cnkgbmFtZS4gVXNlZnVsXG4gKiB3aGVuIHdvcmtpbmcgd2l0aCBtZXRob2RzIGxpa2UgYGRpcmVjdG9yeWAgb3IgYGdsb2JgLlxuICogQHByb3BlcnR5IHtmcy5TdGF0c30gW3N0YXRzXSBTZXRzIHRoZSBmcyBzdGF0IGRhdGEgZm9yIHRoaXMgZW50cnkgYWxsb3dpbmdcbiAqIGZvciByZWR1Y3Rpb24gb2YgZnMgc3RhdCBjYWxscyB3aGVuIHN0YXQgZGF0YSBpcyBhbHJlYWR5IGtub3duLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRXJyb3JEYXRhXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gY29kZSBUaGUgZXJyb3IgY29kZSBhc3NpZ25lZCB0byB0aGlzIGVycm9yLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGEgQWRkaXRpb25hbCBkYXRhIHByb3ZpZGVkIGZvciByZXBvcnRpbmcgb3IgZGVidWdnaW5nICh3aGVyZSBhdmFpbGFibGUpLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJvZ3Jlc3NEYXRhXG4gKiBAcHJvcGVydHkge09iamVjdH0gZW50cmllc1xuICogQHByb3BlcnR5IHtOdW1iZXJ9IGVudHJpZXMudG90YWwgTnVtYmVyIG9mIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gYXBwZW5kZWQuXG4gKiBAcHJvcGVydHkge051bWJlcn0gZW50cmllcy5wcm9jZXNzZWQgTnVtYmVyIG9mIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGZzXG4gKiBAcHJvcGVydHkge051bWJlcn0gZnMudG90YWxCeXRlcyBOdW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gYXBwZW5kZWQuIENhbGN1bGF0ZWQgYXN5bmNocm9ub3VzbHkgYW5kIG1pZ2h0IG5vdCBiZSBhY2N1cmF0ZTogaXQgZ3Jvd3RoIHdoaWxlIGVudHJpZXMgYXJlIGFkZGVkLiAoYmFzZWQgb24gZnMuU3RhdHMpXG4gKiBAcHJvcGVydHkge051bWJlcn0gZnMucHJvY2Vzc2VkQnl0ZXMgTnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gKGJhc2VkIG9uIGZzLlN0YXRzKVxuICovXG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgQXJjaGl2ZUVudHJ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFNpemUgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmdldExhc3RNb2RpZmllZERhdGUgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmlzRGlyZWN0b3J5ID0gZnVuY3Rpb24oKSB7fTsiLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgdXRpbCA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbnV0aWwuZGF0ZVRvRG9zID0gZnVuY3Rpb24oZCwgZm9yY2VMb2NhbFRpbWUpIHtcbiAgZm9yY2VMb2NhbFRpbWUgPSBmb3JjZUxvY2FsVGltZSB8fCBmYWxzZTtcblxuICB2YXIgeWVhciA9IGZvcmNlTG9jYWxUaW1lID8gZC5nZXRGdWxsWWVhcigpIDogZC5nZXRVVENGdWxsWWVhcigpO1xuXG4gIGlmICh5ZWFyIDwgMTk4MCkge1xuICAgIHJldHVybiAyMTYyNjg4OyAvLyAxOTgwLTEtMSAwMDowMDowMFxuICB9IGVsc2UgaWYgKHllYXIgPj0gMjA0NCkge1xuICAgIHJldHVybiAyMTQxMTc1Njc3OyAvLyAyMDQzLTEyLTMxIDIzOjU5OjU4XG4gIH1cblxuICB2YXIgdmFsID0ge1xuICAgIHllYXI6IHllYXIsXG4gICAgbW9udGg6IGZvcmNlTG9jYWxUaW1lID8gZC5nZXRNb250aCgpIDogZC5nZXRVVENNb250aCgpLFxuICAgIGRhdGU6IGZvcmNlTG9jYWxUaW1lID8gZC5nZXREYXRlKCkgOiBkLmdldFVUQ0RhdGUoKSxcbiAgICBob3VyczogZm9yY2VMb2NhbFRpbWUgPyBkLmdldEhvdXJzKCkgOiBkLmdldFVUQ0hvdXJzKCksXG4gICAgbWludXRlczogZm9yY2VMb2NhbFRpbWUgPyBkLmdldE1pbnV0ZXMoKSA6IGQuZ2V0VVRDTWludXRlcygpLFxuICAgIHNlY29uZHM6IGZvcmNlTG9jYWxUaW1lID8gZC5nZXRTZWNvbmRzKCkgOiBkLmdldFVUQ1NlY29uZHMoKVxuICB9O1xuXG4gIHJldHVybiAoKHZhbC55ZWFyIC0gMTk4MCkgPDwgMjUpIHwgKCh2YWwubW9udGggKyAxKSA8PCAyMSkgfCAodmFsLmRhdGUgPDwgMTYpIHxcbiAgICAodmFsLmhvdXJzIDw8IDExKSB8ICh2YWwubWludXRlcyA8PCA1KSB8ICh2YWwuc2Vjb25kcyAvIDIpO1xufTtcblxudXRpbC5kb3NUb0RhdGUgPSBmdW5jdGlvbihkb3MpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKCgoZG9zID4+IDI1KSAmIDB4N2YpICsgMTk4MCwgKChkb3MgPj4gMjEpICYgMHgwZikgLSAxLCAoZG9zID4+IDE2KSAmIDB4MWYsIChkb3MgPj4gMTEpICYgMHgxZiwgKGRvcyA+PiA1KSAmIDB4M2YsIChkb3MgJiAweDFmKSA8PCAxKTtcbn07XG5cbnV0aWwuZnJvbURvc1RpbWUgPSBmdW5jdGlvbihidWYpIHtcbiAgcmV0dXJuIHV0aWwuZG9zVG9EYXRlKGJ1Zi5yZWFkVUludDMyTEUoMCkpO1xufTtcblxudXRpbC5nZXRFaWdodEJ5dGVzID0gZnVuY3Rpb24odikge1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKDgpO1xuICBidWYud3JpdGVVSW50MzJMRSh2ICUgMHgwMTAwMDAwMDAwLCAwKTtcbiAgYnVmLndyaXRlVUludDMyTEUoKHYgLyAweDAxMDAwMDAwMDApIHwgMCwgNCk7XG5cbiAgcmV0dXJuIGJ1Zjtcbn07XG5cbnV0aWwuZ2V0U2hvcnRCeXRlcyA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgYnVmLndyaXRlVUludDE2TEUoKHYgJiAweEZGRkYpID4+PiAwLCAwKTtcblxuICByZXR1cm4gYnVmO1xufTtcblxudXRpbC5nZXRTaG9ydEJ5dGVzVmFsdWUgPSBmdW5jdGlvbihidWYsIG9mZnNldCkge1xuICByZXR1cm4gYnVmLnJlYWRVSW50MTZMRShvZmZzZXQpO1xufTtcblxudXRpbC5nZXRMb25nQnl0ZXMgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2MoNCk7XG4gIGJ1Zi53cml0ZVVJbnQzMkxFKCh2ICYgMHhGRkZGRkZGRikgPj4+IDAsIDApO1xuXG4gIHJldHVybiBidWY7XG59O1xuXG51dGlsLmdldExvbmdCeXRlc1ZhbHVlID0gZnVuY3Rpb24oYnVmLCBvZmZzZXQpIHtcbiAgcmV0dXJuIGJ1Zi5yZWFkVUludDMyTEUob2Zmc2V0KTtcbn07XG5cbnV0aWwudG9Eb3NUaW1lID0gZnVuY3Rpb24oZCkge1xuICByZXR1cm4gdXRpbC5nZXRMb25nQnl0ZXModXRpbC5kYXRlVG9Eb3MoZCkpO1xufTsiLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgemlwVXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgREFUQV9ERVNDUklQVE9SX0ZMQUcgPSAxIDw8IDM7XG52YXIgRU5DUllQVElPTl9GTEFHID0gMSA8PCAwO1xudmFyIE5VTUJFUl9PRl9TSEFOTk9OX0ZBTk9fVFJFRVNfRkxBRyA9IDEgPDwgMjtcbnZhciBTTElESU5HX0RJQ1RJT05BUllfU0laRV9GTEFHID0gMSA8PCAxO1xudmFyIFNUUk9OR19FTkNSWVBUSU9OX0ZMQUcgPSAxIDw8IDY7XG52YXIgVUZUOF9OQU1FU19GTEFHID0gMSA8PCAxMTtcblxudmFyIEdlbmVyYWxQdXJwb3NlQml0ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEdlbmVyYWxQdXJwb3NlQml0KSkge1xuICAgIHJldHVybiBuZXcgR2VuZXJhbFB1cnBvc2VCaXQoKTtcbiAgfVxuXG4gIHRoaXMuZGVzY3JpcHRvciA9IGZhbHNlO1xuICB0aGlzLmVuY3J5cHRpb24gPSBmYWxzZTtcbiAgdGhpcy51dGY4ID0gZmFsc2U7XG4gIHRoaXMubnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzID0gMDtcbiAgdGhpcy5zdHJvbmdFbmNyeXB0aW9uID0gZmFsc2U7XG4gIHRoaXMuc2xpZGluZ0RpY3Rpb25hcnlTaXplID0gMDtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhcbiAgICAodGhpcy5kZXNjcmlwdG9yID8gREFUQV9ERVNDUklQVE9SX0ZMQUcgOiAwKSB8XG4gICAgKHRoaXMudXRmOCA/IFVGVDhfTkFNRVNfRkxBRyA6IDApIHxcbiAgICAodGhpcy5lbmNyeXB0aW9uID8gRU5DUllQVElPTl9GTEFHIDogMCkgfFxuICAgICh0aGlzLnN0cm9uZ0VuY3J5cHRpb24gPyBTVFJPTkdfRU5DUllQVElPTl9GTEFHIDogMClcbiAgKTtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBmbGFnID0gemlwVXRpbC5nZXRTaG9ydEJ5dGVzVmFsdWUoYnVmLCBvZmZzZXQpO1xuICB2YXIgZ2JwID0gbmV3IEdlbmVyYWxQdXJwb3NlQml0KCk7XG5cbiAgZ2JwLnVzZURhdGFEZXNjcmlwdG9yKChmbGFnICYgREFUQV9ERVNDUklQVE9SX0ZMQUcpICE9PSAwKTtcbiAgZ2JwLnVzZVVURjhGb3JOYW1lcygoZmxhZyAmIFVGVDhfTkFNRVNfRkxBRykgIT09IDApO1xuICBnYnAudXNlU3Ryb25nRW5jcnlwdGlvbigoZmxhZyAmIFNUUk9OR19FTkNSWVBUSU9OX0ZMQUcpICE9PSAwKTtcbiAgZ2JwLnVzZUVuY3J5cHRpb24oKGZsYWcgJiBFTkNSWVBUSU9OX0ZMQUcpICE9PSAwKTtcbiAgZ2JwLnNldFNsaWRpbmdEaWN0aW9uYXJ5U2l6ZSgoZmxhZyAmIFNMSURJTkdfRElDVElPTkFSWV9TSVpFX0ZMQUcpICE9PSAwID8gODE5MiA6IDQwOTYpO1xuICBnYnAuc2V0TnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzKChmbGFnICYgTlVNQkVSX09GX1NIQU5OT05fRkFOT19UUkVFU19GTEFHKSAhPT0gMCA/IDMgOiAyKTtcblxuICByZXR1cm4gZ2JwO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnNldE51bWJlck9mU2hhbm5vbkZhbm9UcmVlcyA9IGZ1bmN0aW9uKG4pIHtcbiAgdGhpcy5udW1iZXJPZlNoYW5ub25GYW5vVHJlZXMgPSBuO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLmdldE51bWJlck9mU2hhbm5vbkZhbm9UcmVlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5udW1iZXJPZlNoYW5ub25GYW5vVHJlZXM7XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuc2V0U2xpZGluZ0RpY3Rpb25hcnlTaXplID0gZnVuY3Rpb24obikge1xuICB0aGlzLnNsaWRpbmdEaWN0aW9uYXJ5U2l6ZSA9IG47XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuZ2V0U2xpZGluZ0RpY3Rpb25hcnlTaXplID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNsaWRpbmdEaWN0aW9uYXJ5U2l6ZTtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VEYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uKGIpIHtcbiAgdGhpcy5kZXNjcmlwdG9yID0gYjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VzRGF0YURlc2NyaXB0b3IgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvcjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VFbmNyeXB0aW9uID0gZnVuY3Rpb24oYikge1xuICB0aGlzLmVuY3J5cHRpb24gPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNFbmNyeXB0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVuY3J5cHRpb247XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUudXNlU3Ryb25nRW5jcnlwdGlvbiA9IGZ1bmN0aW9uKGIpIHtcbiAgdGhpcy5zdHJvbmdFbmNyeXB0aW9uID0gYjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VzU3Ryb25nRW5jcnlwdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zdHJvbmdFbmNyeXB0aW9uO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZVVURjhGb3JOYW1lcyA9IGZ1bmN0aW9uKGIpIHtcbiAgdGhpcy51dGY4ID0gYjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VzVVRGOEZvck5hbWVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnV0Zjg7XG59OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIEJpdHMgdXNlZCBmb3IgcGVybWlzc2lvbnMgKGFuZCBzdGlja3kgYml0KVxuICAgICAqL1xuICAgIFBFUk1fTUFTSzogNDA5NSwgLy8gMDc3NzdcblxuICAgIC8qKlxuICAgICAqIEJpdHMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgZmlsZXN5c3RlbSBvYmplY3QgdHlwZS5cbiAgICAgKi9cbiAgICBGSUxFX1RZUEVfRkxBRzogNjE0NDAsIC8vIDAxNzAwMDBcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBzeW1ib2xpYyBsaW5rcy5cbiAgICAgKi9cbiAgICBMSU5LX0ZMQUc6IDQwOTYwLCAvLyAwMTIwMDAwXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgcGxhaW4gZmlsZXMuXG4gICAgICovXG4gICAgRklMRV9GTEFHOiAzMjc2OCwgLy8gMDEwMDAwMFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGRpcmVjdG9yaWVzLlxuICAgICAqL1xuICAgIERJUl9GTEFHOiAxNjM4NCwgLy8gMDQwMDAwXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gc29tZXdoYXQgYXJiaXRyYXJ5IGNob2ljZXMgdGhhdCBhcmUgcXVpdGUgY29tbW9uIGZvciBzaGFyZWRcbiAgICAvLyBpbnN0YWxsYXRpb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcGVybWlzc2lvbnMgZm9yIHN5bWJvbGljIGxpbmtzLlxuICAgICAqL1xuICAgIERFRkFVTFRfTElOS19QRVJNOiA1MTEsIC8vIDA3NzdcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGRpcmVjdG9yaWVzLlxuICAgICAqL1xuICAgIERFRkFVTFRfRElSX1BFUk06IDQ5MywgLy8gMDc1NVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgcGxhaW4gZmlsZXMuXG4gICAgICovXG4gICAgREVGQVVMVF9GSUxFX1BFUk06IDQyMCAvLyAwNjQ0XG59OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXT1JEOiA0LFxuICBEV09SRDogOCxcbiAgRU1QVFk6IEJ1ZmZlci5hbGxvYygwKSxcblxuICBTSE9SVDogMixcbiAgU0hPUlRfTUFTSzogMHhmZmZmLFxuICBTSE9SVF9TSElGVDogMTYsXG4gIFNIT1JUX1pFUk86IEJ1ZmZlci5mcm9tKEFycmF5KDIpKSxcbiAgTE9ORzogNCxcbiAgTE9OR19aRVJPOiBCdWZmZXIuZnJvbShBcnJheSg0KSksXG5cbiAgTUlOX1ZFUlNJT05fSU5JVElBTDogMTAsXG4gIE1JTl9WRVJTSU9OX0RBVEFfREVTQ1JJUFRPUjogMjAsXG4gIE1JTl9WRVJTSU9OX1pJUDY0OiA0NSxcbiAgVkVSU0lPTl9NQURFQlk6IDQ1LFxuXG4gIE1FVEhPRF9TVE9SRUQ6IDAsXG4gIE1FVEhPRF9ERUZMQVRFRDogOCxcblxuICBQTEFURk9STV9VTklYOiAzLFxuICBQTEFURk9STV9GQVQ6IDAsXG5cbiAgU0lHX0xGSDogMHgwNDAzNGI1MCxcbiAgU0lHX0REOiAweDA4MDc0YjUwLFxuICBTSUdfQ0ZIOiAweDAyMDE0YjUwLFxuICBTSUdfRU9DRDogMHgwNjA1NGI1MCxcbiAgU0lHX1pJUDY0X0VPQ0Q6IDB4MDYwNjRCNTAsXG4gIFNJR19aSVA2NF9FT0NEX0xPQzogMHgwNzA2NEI1MCxcblxuICBaSVA2NF9NQUdJQ19TSE9SVDogMHhmZmZmLFxuICBaSVA2NF9NQUdJQzogMHhmZmZmZmZmZixcbiAgWklQNjRfRVhUUkFfSUQ6IDB4MDAwMSxcblxuICBaTElCX05PX0NPTVBSRVNTSU9OOiAwLFxuICBaTElCX0JFU1RfU1BFRUQ6IDEsXG4gIFpMSUJfQkVTVF9DT01QUkVTU0lPTjogOSxcbiAgWkxJQl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAtMSxcblxuICBNT0RFX01BU0s6IDB4RkZGLFxuICBERUZBVUxUX0ZJTEVfTU9ERTogMzMxODgsIC8vIDAxMDY0NCA9IC1ydy1yLS1yLS0gPSBTX0lGUkVHIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JUk9USFxuICBERUZBVUxUX0RJUl9NT0RFOiAxNjg3NywgIC8vIDA0MDc1NSA9IGRyd3hyLXhyLXggPSBTX0lGRElSIHwgU19JUldYVSB8IFNfSVJHUlAgfCBTX0lYR1JQIHwgU19JUk9USCB8IFNfSVhPVEhcblxuICBFWFRfRklMRV9BVFRSX0RJUjogMTEwNjA1MTA4OCwgIC8vIDAxMDE3MzIwMDAyMCA9IGRyd3hyLXhyLXggPSAoKChTX0lGRElSIHwgMDc1NSkgPDwgMTYpIHwgU19ET1NfRClcbiAgRVhUX0ZJTEVfQVRUUl9GSUxFOiAyMTc1MDA4ODAwLCAvLyAwMjAxNTEwMDAwNDAgPSAtcnctci0tci0tID0gKCgoU19JRlJFRyB8IDA2NDQpIDw8IDE2KSB8IFNfRE9TX0EpID4+PiAwXG5cbiAgLy8gVW5peCBmaWxlIHR5cGVzXG4gIFNfSUZNVDogNjE0NDAsICAgLy8gMDE3MDAwMCB0eXBlIG9mIGZpbGUgbWFza1xuICBTX0lGSUZPOiA0MDk2LCAgIC8vIDAxMDAwMCBuYW1lZCBwaXBlIChmaWZvKVxuICBTX0lGQ0hSOiA4MTkyLCAgIC8vIDAyMDAwMCBjaGFyYWN0ZXIgc3BlY2lhbFxuICBTX0lGRElSOiAxNjM4NCwgIC8vIDA0MDAwMCBkaXJlY3RvcnlcbiAgU19JRkJMSzogMjQ1NzYsICAvLyAwNjAwMDAgYmxvY2sgc3BlY2lhbFxuICBTX0lGUkVHOiAzMjc2OCwgIC8vIDAxMDAwMDAgcmVndWxhclxuICBTX0lGTE5LOiA0MDk2MCwgIC8vIDAxMjAwMDAgc3ltYm9saWMgbGlua1xuICBTX0lGU09DSzogNDkxNTIsIC8vIDAxNDAwMDAgc29ja2V0XG5cbiAgLy8gRE9TIGZpbGUgdHlwZSBmbGFnc1xuICBTX0RPU19BOiAzMiwgLy8gMDQwIEFyY2hpdmVcbiAgU19ET1NfRDogMTYsIC8vIDAyMCBEaXJlY3RvcnlcbiAgU19ET1NfVjogOCwgIC8vIDAxMCBWb2x1bWVcbiAgU19ET1NfUzogNCwgIC8vIDA0IFN5c3RlbVxuICBTX0RPU19IOiAyLCAgLy8gMDIgSGlkZGVuXG4gIFNfRE9TX1I6IDEgICAvLyAwMSBSZWFkIE9ubHlcbn07XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgbm9ybWFsaXplUGF0aCA9IHJlcXVpcmUoJ25vcm1hbGl6ZS1wYXRoJyk7XG5cbnZhciBBcmNoaXZlRW50cnkgPSByZXF1aXJlKCcuLi9hcmNoaXZlLWVudHJ5Jyk7XG52YXIgR2VuZXJhbFB1cnBvc2VCaXQgPSByZXF1aXJlKCcuL2dlbmVyYWwtcHVycG9zZS1iaXQnKTtcbnZhciBVbml4U3RhdCA9IHJlcXVpcmUoJy4vdW5peC1zdGF0Jyk7XG5cbnZhciBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xudmFyIHppcFV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxudmFyIFppcEFyY2hpdmVFbnRyeSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgWmlwQXJjaGl2ZUVudHJ5KSkge1xuICAgIHJldHVybiBuZXcgWmlwQXJjaGl2ZUVudHJ5KG5hbWUpO1xuICB9XG5cbiAgQXJjaGl2ZUVudHJ5LmNhbGwodGhpcyk7XG5cbiAgdGhpcy5wbGF0Zm9ybSA9IGNvbnN0YW50cy5QTEFURk9STV9GQVQ7XG4gIHRoaXMubWV0aG9kID0gLTE7XG5cbiAgdGhpcy5uYW1lID0gbnVsbDtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5jc2l6ZSA9IDA7XG4gIHRoaXMuZ3BiID0gbmV3IEdlbmVyYWxQdXJwb3NlQml0KCk7XG4gIHRoaXMuY3JjID0gMDtcbiAgdGhpcy50aW1lID0gLTE7XG5cbiAgdGhpcy5taW52ZXIgPSBjb25zdGFudHMuTUlOX1ZFUlNJT05fSU5JVElBTDtcbiAgdGhpcy5tb2RlID0gLTE7XG4gIHRoaXMuZXh0cmEgPSBudWxsO1xuICB0aGlzLmV4YXR0ciA9IDA7XG4gIHRoaXMuaW5hdHRyID0gMDtcbiAgdGhpcy5jb21tZW50ID0gbnVsbDtcblxuICBpZiAobmFtZSkge1xuICAgIHRoaXMuc2V0TmFtZShuYW1lKTtcbiAgfVxufTtcblxuaW5oZXJpdHMoWmlwQXJjaGl2ZUVudHJ5LCBBcmNoaXZlRW50cnkpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldENlbnRyYWxEaXJlY3RvcnlFeHRyYSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRFeHRyYSgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21tZW50IHNldCBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0Q29tbWVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jb21tZW50ICE9PSBudWxsID8gdGhpcy5jb21tZW50IDogJyc7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbXByZXNzZWQgc2l6ZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRDb21wcmVzc2VkU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jc2l6ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgQ1JDMzIgZGlnZXN0IGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRDcmMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY3JjO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgZm9yIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEV4dGVybmFsQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5leGF0dHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEV4dHJhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmV4dHJhICE9PSBudWxsID8gdGhpcy5leHRyYSA6IGNvbnN0YW50cy5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGJpdHMgcmVsYXRlZCB0byB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge0dlbmVyYWxQdXJwb3NlQml0fVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEdlbmVyYWxQdXJwb3NlQml0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdwYjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRJbnRlcm5hbEF0dHJpYnV0ZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuaW5hdHRyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TGFzdE1vZGlmaWVkRGF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRUaW1lKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldExvY2FsRmlsZURhdGFFeHRyYSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRFeHRyYSgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdXNlZCBvbiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRNZXRob2QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubWV0aG9kO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaWxlbmFtZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm5hbWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtIG9uIHdoaWNoIHRoZSBlbnRyeSB3YXMgbWFkZS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFBsYXRmb3JtID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnBsYXRmb3JtO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFNpemUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2l6ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGRhdGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbGFzdCBtb2RpZmllZCBkYXRlIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfERhdGV9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0VGltZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50aW1lICE9PSAtMSA/IHppcFV0aWwuZG9zVG9EYXRlKHRoaXMudGltZSkgOiAtMTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgRE9TIHRpbWVzdGFtcCBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0VGltZURvcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50aW1lICE9PSAtMSA/IHRoaXMudGltZSA6IDA7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIFVOSVggZmlsZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0VW5peE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMucGxhdGZvcm0gIT09IGNvbnN0YW50cy5QTEFURk9STV9VTklYID8gMCA6ICgodGhpcy5nZXRFeHRlcm5hbEF0dHJpYnV0ZXMoKSA+PiBjb25zdGFudHMuU0hPUlRfU0hJRlQpICYgY29uc3RhbnRzLlNIT1JUX01BU0spO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIFpJUCBuZWVkZWQgdG8gZXh0cmFjdCB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm1pbnZlcjtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY29tbWVudCBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGNvbW1lbnRcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRDb21tZW50ID0gZnVuY3Rpb24oY29tbWVudCkge1xuICBpZiAoQnVmZmVyLmJ5dGVMZW5ndGgoY29tbWVudCkgIT09IGNvbW1lbnQubGVuZ3RoKSB7XG4gICAgdGhpcy5nZXRHZW5lcmFsUHVycG9zZUJpdCgpLnVzZVVURjhGb3JOYW1lcyh0cnVlKTtcbiAgfVxuXG4gIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGNvbXByZXNzZWQgc2l6ZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIHNpemVcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRDb21wcmVzc2VkU2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IGNvbXByZXNzZWQgc2l6ZScpO1xuICB9XG5cbiAgdGhpcy5jc2l6ZSA9IHNpemU7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGNoZWNrc3VtIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gY3JjXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0Q3JjID0gZnVuY3Rpb24oY3JjKSB7XG4gIGlmIChjcmMgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IGNyYzMyJyk7XG4gIH1cblxuICB0aGlzLmNyYyA9IGNyYztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gYXR0clxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldEV4dGVybmFsQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGF0dHIpIHtcbiAgdGhpcy5leGF0dHIgPSBhdHRyID4+PiAwO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBleHRyYSBmaWVsZHMgcmVsYXRlZCB0byB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGV4dHJhXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0RXh0cmEgPSBmdW5jdGlvbihleHRyYSkge1xuICB0aGlzLmV4dHJhID0gZXh0cmE7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGdlbmVyYWwgcHVycG9zZSBiaXRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBncGJcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRHZW5lcmFsUHVycG9zZUJpdCA9IGZ1bmN0aW9uKGdwYikge1xuICBpZiAoIShncGIgaW5zdGFuY2VvZiBHZW5lcmFsUHVycG9zZUJpdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZW50cnkgR2VuZXJhbFB1cnBvc2VCaXQnKTtcbiAgfVxuXG4gIHRoaXMuZ3BiID0gZ3BiO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBhdHRyXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0SW50ZXJuYWxBdHRyaWJ1dGVzID0gZnVuY3Rpb24oYXR0cikge1xuICB0aGlzLmluYXR0ciA9IGF0dHI7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIG1ldGhvZFxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldE1ldGhvZCA9IGZ1bmN0aW9uKG1ldGhvZCkge1xuICBpZiAobWV0aG9kIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSBjb21wcmVzc2lvbiBtZXRob2QnKTtcbiAgfVxuXG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBuYW1lIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbmFtZVxuICogQHBhcmFtIHByZXBlbmRTbGFzaFxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbihuYW1lLCBwcmVwZW5kU2xhc2ggPSBmYWxzZSkge1xuICBuYW1lID0gbm9ybWFsaXplUGF0aChuYW1lLCBmYWxzZSlcbiAgICAucmVwbGFjZSgvXlxcdys6LywgJycpXG4gICAgLnJlcGxhY2UoL14oXFwuXFwuXFwvfFxcLykrLywgJycpO1xuXG4gIGlmIChwcmVwZW5kU2xhc2gpIHtcbiAgICBuYW1lID0gYC8ke25hbWV9YDtcbiAgfVxuXG4gIGlmIChCdWZmZXIuYnl0ZUxlbmd0aChuYW1lKSAhPT0gbmFtZS5sZW5ndGgpIHtcbiAgICB0aGlzLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlVVRGOEZvck5hbWVzKHRydWUpO1xuICB9XG5cbiAgdGhpcy5uYW1lID0gbmFtZTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcGxhdGZvcm0gb24gd2hpY2ggdGhlIGVudHJ5IHdhcyBtYWRlLlxuICpcbiAqIEBwYXJhbSBwbGF0Zm9ybVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldFBsYXRmb3JtID0gZnVuY3Rpb24ocGxhdGZvcm0pIHtcbiAgdGhpcy5wbGF0Zm9ybSA9IHBsYXRmb3JtO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gc2l6ZVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldFNpemUgPSBmdW5jdGlvbihzaXplKSB7XG4gIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSBzaXplJyk7XG4gIH1cblxuICB0aGlzLnNpemUgPSBzaXplO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSB0aW1lIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gdGltZVxuICogQHBhcmFtIGZvcmNlTG9jYWxUaW1lXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uKHRpbWUsIGZvcmNlTG9jYWxUaW1lKSB7XG4gIGlmICghKHRpbWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSB0aW1lJyk7XG4gIH1cblxuICB0aGlzLnRpbWUgPSB6aXBVdGlsLmRhdGVUb0Rvcyh0aW1lLCBmb3JjZUxvY2FsVGltZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIFVOSVggZmlsZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBtb2RlXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0VW5peE1vZGUgPSBmdW5jdGlvbihtb2RlKSB7XG4gIG1vZGUgfD0gdGhpcy5pc0RpcmVjdG9yeSgpID8gY29uc3RhbnRzLlNfSUZESVIgOiBjb25zdGFudHMuU19JRlJFRztcblxuICB2YXIgZXh0YXR0ciA9IDA7XG4gIGV4dGF0dHIgfD0gKG1vZGUgPDwgY29uc3RhbnRzLlNIT1JUX1NISUZUKSB8ICh0aGlzLmlzRGlyZWN0b3J5KCkgPyBjb25zdGFudHMuU19ET1NfRCA6IGNvbnN0YW50cy5TX0RPU19BKTtcblxuICB0aGlzLnNldEV4dGVybmFsQXR0cmlidXRlcyhleHRhdHRyKTtcbiAgdGhpcy5tb2RlID0gbW9kZSAmIGNvbnN0YW50cy5NT0RFX01BU0s7XG4gIHRoaXMucGxhdGZvcm0gPSBjb25zdGFudHMuUExBVEZPUk1fVU5JWDtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgdmVyc2lvbiBvZiBaSVAgbmVlZGVkIHRvIGV4dHJhY3QgdGhpcyBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbWludmVyXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdCA9IGZ1bmN0aW9uKG1pbnZlcikge1xuICB0aGlzLm1pbnZlciA9IG1pbnZlcjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZW50cnkgcmVwcmVzZW50cyBhIGRpcmVjdG9yeS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5pc0RpcmVjdG9yeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXROYW1lKCkuc2xpY2UoLTEpID09PSAnLyc7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGVudHJ5IHJlcHJlc2VudHMgYSB1bml4IHN5bWxpbmssXG4gKiBpbiB3aGljaCBjYXNlIHRoZSBlbnRyeSdzIGNvbnRlbnQgY29udGFpbnMgdGhlIHRhcmdldCBwYXRoXG4gKiBmb3IgdGhlIHN5bWxpbmsuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuaXNVbml4U3ltbGluayA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gKHRoaXMuZ2V0VW5peE1vZGUoKSAmIFVuaXhTdGF0LkZJTEVfVFlQRV9GTEFHKSA9PT0gVW5peFN0YXQuTElOS19GTEFHO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBlbnRyeSBpcyB1c2luZyB0aGUgWklQNjQgZXh0ZW5zaW9uIG9mIFpJUC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5pc1ppcDY0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNzaXplID4gY29uc3RhbnRzLlpJUDY0X01BR0lDIHx8IHRoaXMuc2l6ZSA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcbn07XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuUGFzc1Rocm91Z2g7XG52YXIgaXNTdHJlYW0gPSByZXF1aXJlKCdpcy1zdHJlYW0nKTtcblxudmFyIHV0aWwgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG51dGlsLm5vcm1hbGl6ZUlucHV0U291cmNlID0gZnVuY3Rpb24oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgPT09IG51bGwpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNvdXJjZSk7XG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oc291cmNlKSAmJiAhc291cmNlLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdmFyIG5vcm1hbGl6ZWQgPSBuZXcgUGFzc1Rocm91Z2goKTtcbiAgICBzb3VyY2UucGlwZShub3JtYWxpemVkKTtcblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZTtcbn07IiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xudmFyIGlzU3RyZWFtID0gcmVxdWlyZSgnaXMtc3RyZWFtJyk7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuVHJhbnNmb3JtO1xuXG52YXIgQXJjaGl2ZUVudHJ5ID0gcmVxdWlyZSgnLi9hcmNoaXZlLWVudHJ5Jyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxudmFyIEFyY2hpdmVPdXRwdXRTdHJlYW0gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFyY2hpdmVPdXRwdXRTdHJlYW0pKSB7XG4gICAgcmV0dXJuIG5ldyBBcmNoaXZlT3V0cHV0U3RyZWFtKG9wdGlvbnMpO1xuICB9XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5vZmZzZXQgPSAwO1xuICB0aGlzLl9hcmNoaXZlID0ge1xuICAgIGZpbmlzaDogZmFsc2UsXG4gICAgZmluaXNoZWQ6IGZhbHNlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlXG4gIH07XG59O1xuXG5pbmhlcml0cyhBcmNoaXZlT3V0cHV0U3RyZWFtLCBUcmFuc2Zvcm0pO1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fYXBwZW5kQnVmZmVyID0gZnVuY3Rpb24oemFlLCBzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIC8vIHNjYWZmb2xkIG9ubHlcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hcHBlbmRTdHJlYW0gPSBmdW5jdGlvbih6YWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyKSB7XG4gIGlmIChlcnIpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2ZpbmlzaCA9IGZ1bmN0aW9uKGFlKSB7XG4gIC8vIHNjYWZmb2xkIG9ubHlcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9ub3JtYWxpemVFbnRyeSA9IGZ1bmN0aW9uKGFlKSB7XG4gIC8vIHNjYWZmb2xkIG9ubHlcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmVudHJ5ID0gZnVuY3Rpb24oYWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgc291cmNlID0gc291cmNlIHx8IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gdGhpcy5fZW1pdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIGlmICghKGFlIGluc3RhbmNlb2YgQXJjaGl2ZUVudHJ5KSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcignbm90IGEgdmFsaWQgaW5zdGFuY2Ugb2YgQXJjaGl2ZUVudHJ5JykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9hcmNoaXZlLmZpbmlzaCB8fCB0aGlzLl9hcmNoaXZlLmZpbmlzaGVkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCd1bmFjY2VwdGFibGUgZW50cnkgYWZ0ZXIgZmluaXNoJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2FscmVhZHkgcHJvY2Vzc2luZyBhbiBlbnRyeScpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcgPSB0cnVlO1xuICB0aGlzLl9ub3JtYWxpemVFbnRyeShhZSk7XG4gIHRoaXMuX2VudHJ5ID0gYWU7XG5cbiAgc291cmNlID0gdXRpbC5ub3JtYWxpemVJbnB1dFNvdXJjZShzb3VyY2UpO1xuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIHRoaXMuX2FwcGVuZEJ1ZmZlcihhZSwgc291cmNlLCBjYWxsYmFjayk7XG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oc291cmNlKSkge1xuICAgIHRoaXMuX2FwcGVuZFN0cmVhbShhZSwgc291cmNlLCBjYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYXJjaGl2ZS5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdpbnB1dCBzb3VyY2UgbXVzdCBiZSB2YWxpZCBTdHJlYW0gb3IgQnVmZmVyIGluc3RhbmNlJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcpIHtcbiAgICB0aGlzLl9hcmNoaXZlLmZpbmlzaCA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fZmluaXNoKCk7XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5nZXRCeXRlc1dyaXR0ZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub2Zmc2V0O1xufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihjaHVuaywgY2IpIHtcbiAgaWYgKGNodW5rKSB7XG4gICAgdGhpcy5vZmZzZXQgKz0gY2h1bmsubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIFRyYW5zZm9ybS5wcm90b3R5cGUud3JpdGUuY2FsbCh0aGlzLCBjaHVuaywgY2IpO1xufTsiLAogICAgIi8qISBjcmMzMi5qcyAoQykgMjAxNC1wcmVzZW50IFNoZWV0SlMgLS0gaHR0cDovL3NoZWV0anMuY29tICovXG4vKiB2aW06IHNldCB0cz0yOiAqL1xuLypleHBvcnRlZCBDUkMzMiAqL1xudmFyIENSQzMyO1xuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdC8qanNoaW50IGlnbm9yZTpzdGFydCAqL1xuXHQvKmVzbGludC1kaXNhYmxlICovXG5cdGlmKHR5cGVvZiBET19OT1RfRVhQT1JUX0NSQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZignb2JqZWN0JyA9PT0gdHlwZW9mIGV4cG9ydHMpIHtcblx0XHRcdGZhY3RvcnkoZXhwb3J0cyk7XG5cdFx0fSBlbHNlIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZGVmaW5lICYmIGRlZmluZS5hbWQpIHtcblx0XHRcdGRlZmluZShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHZhciBtb2R1bGUgPSB7fTtcblx0XHRcdFx0ZmFjdG9yeShtb2R1bGUpO1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZhY3RvcnkoQ1JDMzIgPSB7fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoQ1JDMzIgPSB7fSk7XG5cdH1cblx0Lyplc2xpbnQtZW5hYmxlICovXG5cdC8qanNoaW50IGlnbm9yZTplbmQgKi9cbn0oZnVuY3Rpb24oQ1JDMzIpIHtcbkNSQzMyLnZlcnNpb24gPSAnMS4yLjInO1xuLypnbG9iYWwgSW50MzJBcnJheSAqL1xuZnVuY3Rpb24gc2lnbmVkX2NyY190YWJsZSgpIHtcblx0dmFyIGMgPSAwLCB0YWJsZSA9IG5ldyBBcnJheSgyNTYpO1xuXG5cdGZvcih2YXIgbiA9MDsgbiAhPSAyNTY7ICsrbil7XG5cdFx0YyA9IG47XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0dGFibGVbbl0gPSBjO1xuXHR9XG5cblx0cmV0dXJuIHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyA/IG5ldyBJbnQzMkFycmF5KHRhYmxlKSA6IHRhYmxlO1xufVxuXG52YXIgVDAgPSBzaWduZWRfY3JjX3RhYmxlKCk7XG5mdW5jdGlvbiBzbGljZV9ieV8xNl90YWJsZXMoVCkge1xuXHR2YXIgYyA9IDAsIHYgPSAwLCBuID0gMCwgdGFibGUgPSB0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBuZXcgSW50MzJBcnJheSg0MDk2KSA6IG5ldyBBcnJheSg0MDk2KSA7XG5cblx0Zm9yKG4gPSAwOyBuICE9IDI1NjsgKytuKSB0YWJsZVtuXSA9IFRbbl07XG5cdGZvcihuID0gMDsgbiAhPSAyNTY7ICsrbikge1xuXHRcdHYgPSBUW25dO1xuXHRcdGZvcihjID0gMjU2ICsgbjsgYyA8IDQwOTY7IGMgKz0gMjU2KSB2ID0gdGFibGVbY10gPSAodiA+Pj4gOCkgXiBUW3YgJiAweEZGXTtcblx0fVxuXHR2YXIgb3V0ID0gW107XG5cdGZvcihuID0gMTsgbiAhPSAxNjsgKytuKSBvdXRbbiAtIDFdID0gdHlwZW9mIEludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnID8gdGFibGUuc3ViYXJyYXkobiAqIDI1NiwgbiAqIDI1NiArIDI1NikgOiB0YWJsZS5zbGljZShuICogMjU2LCBuICogMjU2ICsgMjU2KTtcblx0cmV0dXJuIG91dDtcbn1cbnZhciBUVCA9IHNsaWNlX2J5XzE2X3RhYmxlcyhUMCk7XG52YXIgVDEgPSBUVFswXSwgIFQyID0gVFRbMV0sICBUMyA9IFRUWzJdLCAgVDQgPSBUVFszXSwgIFQ1ID0gVFRbNF07XG52YXIgVDYgPSBUVFs1XSwgIFQ3ID0gVFRbNl0sICBUOCA9IFRUWzddLCAgVDkgPSBUVFs4XSwgIFRhID0gVFRbOV07XG52YXIgVGIgPSBUVFsxMF0sIFRjID0gVFRbMTFdLCBUZCA9IFRUWzEyXSwgVGUgPSBUVFsxM10sIFRmID0gVFRbMTRdO1xuZnVuY3Rpb24gY3JjMzJfYnN0cihic3RyLCBzZWVkKSB7XG5cdHZhciBDID0gc2VlZCBeIC0xO1xuXHRmb3IodmFyIGkgPSAwLCBMID0gYnN0ci5sZW5ndGg7IGkgPCBMOykgQyA9IChDPj4+OCkgXiBUMFsoQ15ic3RyLmNoYXJDb2RlQXQoaSsrKSkmMHhGRl07XG5cdHJldHVybiB+Qztcbn1cblxuZnVuY3Rpb24gY3JjMzJfYnVmKEIsIHNlZWQpIHtcblx0dmFyIEMgPSBzZWVkIF4gLTEsIEwgPSBCLmxlbmd0aCAtIDE1LCBpID0gMDtcblx0Zm9yKDsgaSA8IEw7KSBDID1cblx0XHRUZltCW2krK10gXiAoQyAmIDI1NSldIF5cblx0XHRUZVtCW2krK10gXiAoKEMgPj4gOCkgJiAyNTUpXSBeXG5cdFx0VGRbQltpKytdIF4gKChDID4+IDE2KSAmIDI1NSldIF5cblx0XHRUY1tCW2krK10gXiAoQyA+Pj4gMjQpXSBeXG5cdFx0VGJbQltpKytdXSBeIFRhW0JbaSsrXV0gXiBUOVtCW2krK11dIF4gVDhbQltpKytdXSBeXG5cdFx0VDdbQltpKytdXSBeIFQ2W0JbaSsrXV0gXiBUNVtCW2krK11dIF4gVDRbQltpKytdXSBeXG5cdFx0VDNbQltpKytdXSBeIFQyW0JbaSsrXV0gXiBUMVtCW2krK11dIF4gVDBbQltpKytdXTtcblx0TCArPSAxNTtcblx0d2hpbGUoaSA8IEwpIEMgPSAoQz4+PjgpIF4gVDBbKENeQltpKytdKSYweEZGXTtcblx0cmV0dXJuIH5DO1xufVxuXG5mdW5jdGlvbiBjcmMzMl9zdHIoc3RyLCBzZWVkKSB7XG5cdHZhciBDID0gc2VlZCBeIC0xO1xuXHRmb3IodmFyIGkgPSAwLCBMID0gc3RyLmxlbmd0aCwgYyA9IDAsIGQgPSAwOyBpIDwgTDspIHtcblx0XHRjID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcblx0XHRpZihjIDwgMHg4MCkge1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQ15jKSYweEZGXTtcblx0XHR9IGVsc2UgaWYoYyA8IDB4ODAwKSB7XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDE5MnwoKGM+PjYpJjMxKSkpJjB4RkZdO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgxMjh8KGMmNjMpKSkmMHhGRl07XG5cdFx0fSBlbHNlIGlmKGMgPj0gMHhEODAwICYmIGMgPCAweEUwMDApIHtcblx0XHRcdGMgPSAoYyYxMDIzKSs2NDsgZCA9IHN0ci5jaGFyQ29kZUF0KGkrKykmMTAyMztcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMjQwfCgoYz4+OCkmNykpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fCgoYz4+MikmNjMpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoKGQ+PjYpJjE1KXwoKGMmMyk8PDQpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoZCY2MykpKSYweEZGXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgyMjR8KChjPj4xMikmMTUpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoKGM+PjYpJjYzKSkpJjB4RkZdO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgxMjh8KGMmNjMpKSkmMHhGRl07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB+Qztcbn1cbkNSQzMyLnRhYmxlID0gVDA7XG4vLyAkRmxvd0lnbm9yZVxuQ1JDMzIuYnN0ciA9IGNyYzMyX2JzdHI7XG4vLyAkRmxvd0lnbm9yZVxuQ1JDMzIuYnVmID0gY3JjMzJfYnVmO1xuLy8gJEZsb3dJZ25vcmVcbkNSQzMyLnN0ciA9IGNyYzMyX3N0cjtcbn0pKTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNyYzMyLXN0cmVhbVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNyYzMyLXN0cmVhbS9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG5cbiAndXNlIHN0cmljdCc7XG5cbmNvbnN0IHtUcmFuc2Zvcm19ID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJyk7XG5cbmNvbnN0IGNyYzMyID0gcmVxdWlyZSgnY3JjLTMyJyk7XG5cbmNsYXNzIENSQzMyU3RyZWFtIGV4dGVuZHMgVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMuY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgdGhpcy5jaGVja3N1bS53cml0ZUludDMyQkUoMCwgMCk7XG5cbiAgICB0aGlzLnJhd1NpemUgPSAwO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLmNoZWNrc3VtID0gY3JjMzIuYnVmKGNodW5rLCB0aGlzLmNoZWNrc3VtKSA+Pj4gMDtcbiAgICAgIHRoaXMucmF3U2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xuICB9XG5cbiAgZGlnZXN0KGVuY29kaW5nKSB7XG4gICAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgY2hlY2tzdW0ud3JpdGVVSW50MzJCRSh0aGlzLmNoZWNrc3VtID4+PiAwLCAwKTtcbiAgICByZXR1cm4gZW5jb2RpbmcgPyBjaGVja3N1bS50b1N0cmluZyhlbmNvZGluZykgOiBjaGVja3N1bTtcbiAgfVxuXG4gIGhleCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaWdlc3QoJ2hleCcpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLnJhd1NpemU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDUkMzMlN0cmVhbTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNyYzMyLXN0cmVhbVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNyYzMyLXN0cmVhbS9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3Qge0RlZmxhdGVSYXd9ID0gcmVxdWlyZSgnemxpYicpO1xuXG5jb25zdCBjcmMzMiA9IHJlcXVpcmUoJ2NyYy0zMicpO1xuXG5jbGFzcyBEZWZsYXRlQ1JDMzJTdHJlYW0gZXh0ZW5kcyBEZWZsYXRlUmF3IHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5jaGVja3N1bSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICB0aGlzLmNoZWNrc3VtLndyaXRlSW50MzJCRSgwLCAwKTtcblxuICAgIHRoaXMucmF3U2l6ZSA9IDA7XG4gICAgdGhpcy5jb21wcmVzc2VkU2l6ZSA9IDA7XG4gIH1cblxuICBwdXNoKGNodW5rLCBlbmNvZGluZykge1xuICAgIGlmIChjaHVuaykge1xuICAgICAgdGhpcy5jb21wcmVzc2VkU2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLnB1c2goY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuXG4gIF90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgIGlmIChjaHVuaykge1xuICAgICAgdGhpcy5jaGVja3N1bSA9IGNyYzMyLmJ1ZihjaHVuaywgdGhpcy5jaGVja3N1bSkgPj4+IDA7XG4gICAgICB0aGlzLnJhd1NpemUgKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cblxuICAgIHN1cGVyLl90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgfVxuXG4gIGRpZ2VzdChlbmNvZGluZykge1xuICAgIGNvbnN0IGNoZWNrc3VtID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpO1xuICAgIGNoZWNrc3VtLndyaXRlVUludDMyQkUodGhpcy5jaGVja3N1bSA+Pj4gMCwgMCk7XG4gICAgcmV0dXJuIGVuY29kaW5nID8gY2hlY2tzdW0udG9TdHJpbmcoZW5jb2RpbmcpIDogY2hlY2tzdW07XG4gIH1cblxuICBoZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlnZXN0KCdoZXgnKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgc2l6ZShjb21wcmVzc2VkID0gZmFsc2UpIHtcbiAgICBpZiAoY29tcHJlc3NlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcHJlc3NlZFNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJhd1NpemU7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVmbGF0ZUNSQzMyU3RyZWFtO1xuIiwKICAgICIvKipcbiAqIG5vZGUtY3JjMzItc3RyZWFtXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY3JjMzItc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1JDMzJTdHJlYW06IHJlcXVpcmUoJy4vY3JjMzItc3RyZWFtJyksXG4gIERlZmxhdGVDUkMzMlN0cmVhbTogcmVxdWlyZSgnLi9kZWZsYXRlLWNyYzMyLXN0cmVhbScpXG59XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgY3JjMzIgPSByZXF1aXJlKCdjcmMtMzInKTtcbnZhciB7Q1JDMzJTdHJlYW19ID0gcmVxdWlyZSgnY3JjMzItc3RyZWFtJyk7XG52YXIge0RlZmxhdGVDUkMzMlN0cmVhbX0gPSByZXF1aXJlKCdjcmMzMi1zdHJlYW0nKTtcblxudmFyIEFyY2hpdmVPdXRwdXRTdHJlYW0gPSByZXF1aXJlKCcuLi9hcmNoaXZlLW91dHB1dC1zdHJlYW0nKTtcbnZhciBaaXBBcmNoaXZlRW50cnkgPSByZXF1aXJlKCcuL3ppcC1hcmNoaXZlLWVudHJ5Jyk7XG52YXIgR2VuZXJhbFB1cnBvc2VCaXQgPSByZXF1aXJlKCcuL2dlbmVyYWwtcHVycG9zZS1iaXQnKTtcblxudmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4uLy4uL3V0aWwnKTtcbnZhciB6aXBVdGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbnZhciBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtKSkge1xuICAgIHJldHVybiBuZXcgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbShvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB0aGlzLl9kZWZhdWx0cyhvcHRpb25zKTtcblxuICBBcmNoaXZlT3V0cHV0U3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fZW50cnkgPSBudWxsO1xuICB0aGlzLl9lbnRyaWVzID0gW107XG4gIHRoaXMuX2FyY2hpdmUgPSB7XG4gICAgY2VudHJhbExlbmd0aDogMCxcbiAgICBjZW50cmFsT2Zmc2V0OiAwLFxuICAgIGNvbW1lbnQ6ICcnLFxuICAgIGZpbmlzaDogZmFsc2UsXG4gICAgZmluaXNoZWQ6IGZhbHNlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgIGZvcmNlWmlwNjQ6IG9wdGlvbnMuZm9yY2VaaXA2NCxcbiAgICBmb3JjZUxvY2FsVGltZTogb3B0aW9ucy5mb3JjZUxvY2FsVGltZVxuICB9O1xufTtcblxuaW5oZXJpdHMoWmlwQXJjaGl2ZU91dHB1dFN0cmVhbSwgQXJjaGl2ZU91dHB1dFN0cmVhbSk7XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hZnRlckFwcGVuZCA9IGZ1bmN0aW9uKGFlKSB7XG4gIHRoaXMuX2VudHJpZXMucHVzaChhZSk7XG5cbiAgaWYgKGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlc0RhdGFEZXNjcmlwdG9yKCkpIHtcbiAgICB0aGlzLl93cml0ZURhdGFEZXNjcmlwdG9yKGFlKTtcbiAgfVxuXG4gIHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZyA9IGZhbHNlO1xuICB0aGlzLl9lbnRyeSA9IG51bGw7XG5cbiAgaWYgKHRoaXMuX2FyY2hpdmUuZmluaXNoICYmICF0aGlzLl9hcmNoaXZlLmZpbmlzaGVkKSB7XG4gICAgdGhpcy5fZmluaXNoKCk7XG4gIH1cbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hcHBlbmRCdWZmZXIgPSBmdW5jdGlvbihhZSwgc291cmNlLCBjYWxsYmFjaykge1xuICBpZiAoc291cmNlLmxlbmd0aCA9PT0gMCkge1xuICAgIGFlLnNldE1ldGhvZChjb25zdGFudHMuTUVUSE9EX1NUT1JFRCk7XG4gIH1cblxuICB2YXIgbWV0aG9kID0gYWUuZ2V0TWV0aG9kKCk7XG5cbiAgaWYgKG1ldGhvZCA9PT0gY29uc3RhbnRzLk1FVEhPRF9TVE9SRUQpIHtcbiAgICBhZS5zZXRTaXplKHNvdXJjZS5sZW5ndGgpO1xuICAgIGFlLnNldENvbXByZXNzZWRTaXplKHNvdXJjZS5sZW5ndGgpO1xuICAgIGFlLnNldENyYyhjcmMzMi5idWYoc291cmNlKSA+Pj4gMCk7XG4gIH1cblxuICB0aGlzLl93cml0ZUxvY2FsRmlsZUhlYWRlcihhZSk7XG5cbiAgaWYgKG1ldGhvZCA9PT0gY29uc3RhbnRzLk1FVEhPRF9TVE9SRUQpIHtcbiAgICB0aGlzLndyaXRlKHNvdXJjZSk7XG4gICAgdGhpcy5fYWZ0ZXJBcHBlbmQoYWUpO1xuICAgIGNhbGxiYWNrKG51bGwsIGFlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAobWV0aG9kID09PSBjb25zdGFudHMuTUVUSE9EX0RFRkxBVEVEKSB7XG4gICAgdGhpcy5fc21hcnRTdHJlYW0oYWUsIGNhbGxiYWNrKS5lbmQoc291cmNlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdjb21wcmVzc2lvbiBtZXRob2QgJyArIG1ldGhvZCArICcgbm90IGltcGxlbWVudGVkJykpO1xuICAgIHJldHVybjtcbiAgfVxufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FwcGVuZFN0cmVhbSA9IGZ1bmN0aW9uKGFlLCBzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlRGF0YURlc2NyaXB0b3IodHJ1ZSk7XG4gIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX0RBVEFfREVTQ1JJUFRPUik7XG5cbiAgdGhpcy5fd3JpdGVMb2NhbEZpbGVIZWFkZXIoYWUpO1xuXG4gIHZhciBzbWFydCA9IHRoaXMuX3NtYXJ0U3RyZWFtKGFlLCBjYWxsYmFjayk7XG4gIHNvdXJjZS5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIHNtYXJ0LmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICBzbWFydC5lbmQoKTtcbiAgfSlcbiAgc291cmNlLnBpcGUoc21hcnQpO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2RlZmF1bHRzID0gZnVuY3Rpb24obykge1xuICBpZiAodHlwZW9mIG8gIT09ICdvYmplY3QnKSB7XG4gICAgbyA9IHt9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvLnpsaWIgIT09ICdvYmplY3QnKSB7XG4gICAgby56bGliID0ge307XG4gIH1cblxuICBpZiAodHlwZW9mIG8uemxpYi5sZXZlbCAhPT0gJ251bWJlcicpIHtcbiAgICBvLnpsaWIubGV2ZWwgPSBjb25zdGFudHMuWkxJQl9CRVNUX1NQRUVEO1xuICB9XG5cbiAgby5mb3JjZVppcDY0ID0gISFvLmZvcmNlWmlwNjQ7XG4gIG8uZm9yY2VMb2NhbFRpbWUgPSAhIW8uZm9yY2VMb2NhbFRpbWU7XG5cbiAgcmV0dXJuIG87XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCA9IHRoaXMub2Zmc2V0O1xuXG4gIHRoaXMuX2VudHJpZXMuZm9yRWFjaChmdW5jdGlvbihhZSkge1xuICAgIHRoaXMuX3dyaXRlQ2VudHJhbEZpbGVIZWFkZXIoYWUpO1xuICB9LmJpbmQodGhpcykpO1xuXG4gIHRoaXMuX2FyY2hpdmUuY2VudHJhbExlbmd0aCA9IHRoaXMub2Zmc2V0IC0gdGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0O1xuXG4gIGlmICh0aGlzLmlzWmlwNjQoKSkge1xuICAgIHRoaXMuX3dyaXRlQ2VudHJhbERpcmVjdG9yeVppcDY0KCk7XG4gIH1cblxuICB0aGlzLl93cml0ZUNlbnRyYWxEaXJlY3RvcnlFbmQoKTtcblxuICB0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgdGhpcy5fYXJjaGl2ZS5maW5pc2ggPSB0cnVlO1xuICB0aGlzLl9hcmNoaXZlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgdGhpcy5lbmQoKTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9ub3JtYWxpemVFbnRyeSA9IGZ1bmN0aW9uKGFlKSB7XG4gIGlmIChhZS5nZXRNZXRob2QoKSA9PT0gLTEpIHtcbiAgICBhZS5zZXRNZXRob2QoY29uc3RhbnRzLk1FVEhPRF9ERUZMQVRFRCk7XG4gIH1cblxuICBpZiAoYWUuZ2V0TWV0aG9kKCkgPT09IGNvbnN0YW50cy5NRVRIT0RfREVGTEFURUQpIHtcbiAgICBhZS5nZXRHZW5lcmFsUHVycG9zZUJpdCgpLnVzZURhdGFEZXNjcmlwdG9yKHRydWUpO1xuICAgIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX0RBVEFfREVTQ1JJUFRPUik7XG4gIH1cblxuICBpZiAoYWUuZ2V0VGltZSgpID09PSAtMSkge1xuICAgIGFlLnNldFRpbWUobmV3IERhdGUoKSwgdGhpcy5fYXJjaGl2ZS5mb3JjZUxvY2FsVGltZSk7XG4gIH1cblxuICBhZS5fb2Zmc2V0cyA9IHtcbiAgICBmaWxlOiAwLFxuICAgIGRhdGE6IDAsXG4gICAgY29udGVudHM6IDAsXG4gIH07XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fc21hcnRTdHJlYW0gPSBmdW5jdGlvbihhZSwgY2FsbGJhY2spIHtcbiAgdmFyIGRlZmxhdGUgPSBhZS5nZXRNZXRob2QoKSA9PT0gY29uc3RhbnRzLk1FVEhPRF9ERUZMQVRFRDtcbiAgdmFyIHByb2Nlc3MgPSBkZWZsYXRlID8gbmV3IERlZmxhdGVDUkMzMlN0cmVhbSh0aGlzLm9wdGlvbnMuemxpYikgOiBuZXcgQ1JDMzJTdHJlYW0oKTtcbiAgdmFyIGVycm9yID0gbnVsbDtcblxuICBmdW5jdGlvbiBoYW5kbGVTdHVmZigpIHtcbiAgICB2YXIgZGlnZXN0ID0gcHJvY2Vzcy5kaWdlc3QoKS5yZWFkVUludDMyQkUoMCk7XG4gICAgYWUuc2V0Q3JjKGRpZ2VzdCk7XG4gICAgYWUuc2V0U2l6ZShwcm9jZXNzLnNpemUoKSk7XG4gICAgYWUuc2V0Q29tcHJlc3NlZFNpemUocHJvY2Vzcy5zaXplKHRydWUpKTtcbiAgICB0aGlzLl9hZnRlckFwcGVuZChhZSk7XG4gICAgY2FsbGJhY2soZXJyb3IsIGFlKTtcbiAgfVxuXG4gIHByb2Nlc3Mub25jZSgnZW5kJywgaGFuZGxlU3R1ZmYuYmluZCh0aGlzKSk7XG4gIHByb2Nlc3Mub25jZSgnZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBlcnJvciA9IGVycjtcbiAgfSk7XG5cbiAgcHJvY2Vzcy5waXBlKHRoaXMsIHsgZW5kOiBmYWxzZSB9KTtcblxuICByZXR1cm4gcHJvY2Vzcztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZUNlbnRyYWxEaXJlY3RvcnlFbmQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlY29yZHMgPSB0aGlzLl9lbnRyaWVzLmxlbmd0aDtcbiAgdmFyIHNpemUgPSB0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGg7XG4gIHZhciBvZmZzZXQgPSB0aGlzLl9hcmNoaXZlLmNlbnRyYWxPZmZzZXQ7XG5cbiAgaWYgKHRoaXMuaXNaaXA2NCgpKSB7XG4gICAgcmVjb3JkcyA9IGNvbnN0YW50cy5aSVA2NF9NQUdJQ19TSE9SVDtcbiAgICBzaXplID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICAgIG9mZnNldCA9IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcbiAgfVxuXG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfRU9DRCkpO1xuXG4gIC8vIGRpc2sgbnVtYmVyc1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5TSE9SVF9aRVJPKTtcbiAgdGhpcy53cml0ZShjb25zdGFudHMuU0hPUlRfWkVSTyk7XG5cbiAgLy8gbnVtYmVyIG9mIGVudHJpZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMocmVjb3JkcykpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhyZWNvcmRzKSk7XG5cbiAgLy8gbGVuZ3RoIGFuZCBsb2NhdGlvbiBvZiBDRFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKHNpemUpKTtcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhvZmZzZXQpKTtcblxuICAvLyBhcmNoaXZlIGNvbW1lbnRcbiAgdmFyIGNvbW1lbnQgPSB0aGlzLmdldENvbW1lbnQoKTtcbiAgdmFyIGNvbW1lbnRMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChjb21tZW50KTtcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoY29tbWVudExlbmd0aCkpO1xuICB0aGlzLndyaXRlKGNvbW1lbnQpO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX3dyaXRlQ2VudHJhbERpcmVjdG9yeVppcDY0ID0gZnVuY3Rpb24oKSB7XG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfWklQNjRfRU9DRCkpO1xuXG4gIC8vIHNpemUgb2YgdGhlIFpJUDY0IEVPQ0QgcmVjb3JkXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKDQ0KSk7XG5cbiAgLy8gdmVyc2lvbiBtYWRlIGJ5XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCkpO1xuXG4gIC8vIHZlcnNpb24gdG8gZXh0cmFjdFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb25zdGFudHMuTUlOX1ZFUlNJT05fWklQNjQpKTtcblxuICAvLyBkaXNrIG51bWJlcnNcbiAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcbiAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcblxuICAvLyBudW1iZXIgb2YgZW50cmllc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9lbnRyaWVzLmxlbmd0aCkpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9lbnRyaWVzLmxlbmd0aCkpO1xuXG4gIC8vIGxlbmd0aCBhbmQgbG9jYXRpb24gb2YgQ0RcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXModGhpcy5fYXJjaGl2ZS5jZW50cmFsTGVuZ3RoKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCkpO1xuXG4gIC8vIGV4dGVuc2libGUgZGF0YSBzZWN0b3JcbiAgLy8gbm90IGltcGxlbWVudGVkIGF0IHRoaXMgdGltZVxuXG4gIC8vIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19aSVA2NF9FT0NEX0xPQykpO1xuXG4gIC8vIGRpc2sgbnVtYmVyIGhvbGRpbmcgdGhlIFpJUDY0IEVPQ0QgcmVjb3JkXG4gIHRoaXMud3JpdGUoY29uc3RhbnRzLkxPTkdfWkVSTyk7XG5cbiAgLy8gcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSBaSVA2NCBFT0NEIHJlY29yZFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9hcmNoaXZlLmNlbnRyYWxPZmZzZXQgKyB0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGgpKTtcblxuICAvLyB0b3RhbCBudW1iZXIgb2YgZGlza3NcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcygxKSk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVDZW50cmFsRmlsZUhlYWRlciA9IGZ1bmN0aW9uKGFlKSB7XG4gIHZhciBncGIgPSBhZS5nZXRHZW5lcmFsUHVycG9zZUJpdCgpO1xuICB2YXIgbWV0aG9kID0gYWUuZ2V0TWV0aG9kKCk7XG4gIHZhciBmaWxlT2Zmc2V0ID0gYWUuX29mZnNldHMuZmlsZTtcblxuICB2YXIgc2l6ZSA9IGFlLmdldFNpemUoKTtcbiAgdmFyIGNvbXByZXNzZWRTaXplID0gYWUuZ2V0Q29tcHJlc3NlZFNpemUoKTtcblxuICBpZiAoYWUuaXNaaXA2NCgpIHx8IGZpbGVPZmZzZXQgPiBjb25zdGFudHMuWklQNjRfTUFHSUMpIHtcbiAgICBzaXplID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICAgIGNvbXByZXNzZWRTaXplID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICAgIGZpbGVPZmZzZXQgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG5cbiAgICBhZS5zZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCk7XG5cbiAgICB2YXIgZXh0cmFCdWYgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb25zdGFudHMuWklQNjRfRVhUUkFfSUQpLFxuICAgICAgemlwVXRpbC5nZXRTaG9ydEJ5dGVzKDI0KSxcbiAgICAgIHppcFV0aWwuZ2V0RWlnaHRCeXRlcyhhZS5nZXRTaXplKCkpLFxuICAgICAgemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpLFxuICAgICAgemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLl9vZmZzZXRzLmZpbGUpXG4gICAgXSwgMjgpO1xuXG4gICAgYWUuc2V0RXh0cmEoZXh0cmFCdWYpO1xuICB9XG5cbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19DRkgpKTtcblxuICAvLyB2ZXJzaW9uIG1hZGUgYnlcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoKGFlLmdldFBsYXRmb3JtKCkgPDwgOCkgfCBjb25zdGFudHMuVkVSU0lPTl9NQURFQlkpKTtcblxuICAvLyB2ZXJzaW9uIHRvIGV4dHJhY3QgYW5kIGdlbmVyYWwgYml0IGZsYWdcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoYWUuZ2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdCgpKSk7XG4gIHRoaXMud3JpdGUoZ3BiLmVuY29kZSgpKTtcblxuICAvLyBjb21wcmVzc2lvbiBtZXRob2RcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMobWV0aG9kKSk7XG5cbiAgLy8gZGF0ZXRpbWVcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhhZS5nZXRUaW1lRG9zKCkpKTtcblxuICAvLyBjcmMzMiBjaGVja3N1bVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENyYygpKSk7XG5cbiAgLy8gc2l6ZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb21wcmVzc2VkU2l6ZSkpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKHNpemUpKTtcblxuICB2YXIgbmFtZSA9IGFlLmdldE5hbWUoKTtcbiAgdmFyIGNvbW1lbnQgPSBhZS5nZXRDb21tZW50KCk7XG4gIHZhciBleHRyYSA9IGFlLmdldENlbnRyYWxEaXJlY3RvcnlFeHRyYSgpO1xuXG4gIGlmIChncGIudXNlc1VURjhGb3JOYW1lcygpKSB7XG4gICAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpO1xuICAgIGNvbW1lbnQgPSBCdWZmZXIuZnJvbShjb21tZW50KTtcbiAgfVxuXG4gIC8vIG5hbWUgbGVuZ3RoXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKG5hbWUubGVuZ3RoKSk7XG5cbiAgLy8gZXh0cmEgbGVuZ3RoXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGV4dHJhLmxlbmd0aCkpO1xuXG4gIC8vIGNvbW1lbnRzIGxlbmd0aFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb21tZW50Lmxlbmd0aCkpO1xuXG4gIC8vIGRpc2sgbnVtYmVyIHN0YXJ0XG4gIHRoaXMud3JpdGUoY29uc3RhbnRzLlNIT1JUX1pFUk8pO1xuXG4gIC8vIGludGVybmFsIGF0dHJpYnV0ZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoYWUuZ2V0SW50ZXJuYWxBdHRyaWJ1dGVzKCkpKTtcblxuICAvLyBleHRlcm5hbCBhdHRyaWJ1dGVzXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0RXh0ZXJuYWxBdHRyaWJ1dGVzKCkpKTtcblxuICAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgTEZIXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoZmlsZU9mZnNldCkpO1xuXG4gIC8vIG5hbWVcbiAgdGhpcy53cml0ZShuYW1lKTtcblxuICAvLyBleHRyYVxuICB0aGlzLndyaXRlKGV4dHJhKTtcblxuICAvLyBjb21tZW50XG4gIHRoaXMud3JpdGUoY29tbWVudCk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVEYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uKGFlKSB7XG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfREQpKTtcblxuICAvLyBjcmMzMiBjaGVja3N1bVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENyYygpKSk7XG5cbiAgLy8gc2l6ZXNcbiAgaWYgKGFlLmlzWmlwNjQoKSkge1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyhhZS5nZXRTaXplKCkpKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFNpemUoKSkpO1xuICB9XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVMb2NhbEZpbGVIZWFkZXIgPSBmdW5jdGlvbihhZSkge1xuICB2YXIgZ3BiID0gYWUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKTtcbiAgdmFyIG1ldGhvZCA9IGFlLmdldE1ldGhvZCgpO1xuICB2YXIgbmFtZSA9IGFlLmdldE5hbWUoKTtcbiAgdmFyIGV4dHJhID0gYWUuZ2V0TG9jYWxGaWxlRGF0YUV4dHJhKCk7XG5cbiAgaWYgKGFlLmlzWmlwNjQoKSkge1xuICAgIGdwYi51c2VEYXRhRGVzY3JpcHRvcih0cnVlKTtcbiAgICBhZS5zZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCk7XG4gIH1cblxuICBpZiAoZ3BiLnVzZXNVVEY4Rm9yTmFtZXMoKSkge1xuICAgIG5hbWUgPSBCdWZmZXIuZnJvbShuYW1lKTtcbiAgfVxuXG4gIGFlLl9vZmZzZXRzLmZpbGUgPSB0aGlzLm9mZnNldDtcblxuICAvLyBzaWduYXR1cmVcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb25zdGFudHMuU0lHX0xGSCkpO1xuXG4gIC8vIHZlcnNpb24gdG8gZXh0cmFjdCBhbmQgZ2VuZXJhbCBiaXQgZmxhZ1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhhZS5nZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KCkpKTtcbiAgdGhpcy53cml0ZShncGIuZW5jb2RlKCkpO1xuXG4gIC8vIGNvbXByZXNzaW9uIG1ldGhvZFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhtZXRob2QpKTtcblxuICAvLyBkYXRldGltZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFRpbWVEb3MoKSkpO1xuXG4gIGFlLl9vZmZzZXRzLmRhdGEgPSB0aGlzLm9mZnNldDtcblxuICAvLyBjcmMzMiBjaGVja3N1bSBhbmQgc2l6ZXNcbiAgaWYgKGdwYi51c2VzRGF0YURlc2NyaXB0b3IoKSkge1xuICAgIHRoaXMud3JpdGUoY29uc3RhbnRzLkxPTkdfWkVSTyk7XG4gICAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcbiAgICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q3JjKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFNpemUoKSkpO1xuICB9XG5cbiAgLy8gbmFtZSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMobmFtZS5sZW5ndGgpKTtcblxuICAvLyBleHRyYSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoZXh0cmEubGVuZ3RoKSk7XG5cbiAgLy8gbmFtZVxuICB0aGlzLndyaXRlKG5hbWUpO1xuXG4gIC8vIGV4dHJhXG4gIHRoaXMud3JpdGUoZXh0cmEpO1xuXG4gIGFlLl9vZmZzZXRzLmNvbnRlbnRzID0gdGhpcy5vZmZzZXQ7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5nZXRDb21tZW50ID0gZnVuY3Rpb24oY29tbWVudCkge1xuICByZXR1cm4gdGhpcy5fYXJjaGl2ZS5jb21tZW50ICE9PSBudWxsID8gdGhpcy5fYXJjaGl2ZS5jb21tZW50IDogJyc7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5pc1ppcDY0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9hcmNoaXZlLmZvcmNlWmlwNjQgfHwgdGhpcy5fZW50cmllcy5sZW5ndGggPiBjb25zdGFudHMuWklQNjRfTUFHSUNfU0hPUlQgfHwgdGhpcy5fYXJjaGl2ZS5jZW50cmFsTGVuZ3RoID4gY29uc3RhbnRzLlpJUDY0X01BR0lDIHx8IHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLnNldENvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KSB7XG4gIHRoaXMuX2FyY2hpdmUuY29tbWVudCA9IGNvbW1lbnQ7XG59O1xuIiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFyY2hpdmVFbnRyeTogcmVxdWlyZSgnLi9hcmNoaXZlcnMvYXJjaGl2ZS1lbnRyeScpLFxuICBaaXBBcmNoaXZlRW50cnk6IHJlcXVpcmUoJy4vYXJjaGl2ZXJzL3ppcC96aXAtYXJjaGl2ZS1lbnRyeScpLFxuICBBcmNoaXZlT3V0cHV0U3RyZWFtOiByZXF1aXJlKCcuL2FyY2hpdmVycy9hcmNoaXZlLW91dHB1dC1zdHJlYW0nKSxcbiAgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbTogcmVxdWlyZSgnLi9hcmNoaXZlcnMvemlwL3ppcC1hcmNoaXZlLW91dHB1dC1zdHJlYW0nKVxufTsiLAogICAgIi8qKlxuICogWmlwU3RyZWFtXG4gKlxuICogQGlnbm9yZVxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS16aXAtc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xuXG52YXIgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbSA9IHJlcXVpcmUoJ2NvbXByZXNzLWNvbW1vbnMnKS5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtO1xudmFyIFppcEFyY2hpdmVFbnRyeSA9IHJlcXVpcmUoJ2NvbXByZXNzLWNvbW1vbnMnKS5aaXBBcmNoaXZlRW50cnk7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgnYXJjaGl2ZXItdXRpbHMnKTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIGV4dGVybmFsOlppcEFyY2hpdmVPdXRwdXRTdHJlYW1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5jb21tZW50XSBTZXRzIHRoZSB6aXAgYXJjaGl2ZSBjb21tZW50LlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZUxvY2FsVGltZT1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gbG9jYWwgZmlsZSB0aW1lcyBpbnN0ZWFkIG9mIFVUQy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZm9yY2VaaXA2ND1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gWklQNjQgaGVhZGVycy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc3RvcmU9ZmFsc2VdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy56bGliXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqIHRvIGNvbnRyb2wgY29tcHJlc3Npb24uXG4gKi9cbnZhciBaaXBTdHJlYW0gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFppcFN0cmVhbSkpIHtcbiAgICByZXR1cm4gbmV3IFppcFN0cmVhbShvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLnpsaWIgPSBvcHRpb25zLnpsaWIgfHwge307XG5cbiAgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5sZXZlbCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5sZXZlbCA+PSAwKSB7XG4gICAgb3B0aW9ucy56bGliLmxldmVsID0gb3B0aW9ucy5sZXZlbDtcbiAgICBkZWxldGUgb3B0aW9ucy5sZXZlbDtcbiAgfVxuXG4gIGlmICghb3B0aW9ucy5mb3JjZVppcDY0ICYmIHR5cGVvZiBvcHRpb25zLnpsaWIubGV2ZWwgPT09ICdudW1iZXInICYmIG9wdGlvbnMuemxpYi5sZXZlbCA9PT0gMCkge1xuICAgIG9wdGlvbnMuc3RvcmUgPSB0cnVlO1xuICB9XG5cbiAgb3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoID0gb3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoIHx8IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zLmNvbW1lbnQgJiYgb3B0aW9ucy5jb21tZW50Lmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLnNldENvbW1lbnQob3B0aW9ucy5jb21tZW50KTtcbiAgfVxufTtcblxuaW5oZXJpdHMoWmlwU3RyZWFtLCBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtKTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGVudHJ5IGRhdGEgd2l0aCBmYWxsYmFja3MgZm9yIGtleSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuWmlwU3RyZWFtLnByb3RvdHlwZS5fbm9ybWFsaXplRmlsZURhdGEgPSBmdW5jdGlvbihkYXRhKSB7XG4gIGRhdGEgPSB1dGlsLmRlZmF1bHRzKGRhdGEsIHtcbiAgICB0eXBlOiAnZmlsZScsXG4gICAgbmFtZTogbnVsbCxcbiAgICBuYW1lUHJlcGVuZFNsYXNoOiB0aGlzLm9wdGlvbnMubmFtZVByZXBlbmRTbGFzaCxcbiAgICBsaW5rbmFtZTogbnVsbCxcbiAgICBkYXRlOiBudWxsLFxuICAgIG1vZGU6IG51bGwsXG4gICAgc3RvcmU6IHRoaXMub3B0aW9ucy5zdG9yZSxcbiAgICBjb21tZW50OiAnJ1xuICB9KTtcblxuICB2YXIgaXNEaXIgPSBkYXRhLnR5cGUgPT09ICdkaXJlY3RvcnknO1xuICB2YXIgaXNTeW1saW5rID0gZGF0YS50eXBlID09PSAnc3ltbGluayc7XG5cbiAgaWYgKGRhdGEubmFtZSkge1xuICAgIGRhdGEubmFtZSA9IHV0aWwuc2FuaXRpemVQYXRoKGRhdGEubmFtZSk7XG5cbiAgICBpZiAoIWlzU3ltbGluayAmJiBkYXRhLm5hbWUuc2xpY2UoLTEpID09PSAnLycpIHtcbiAgICAgIGlzRGlyID0gdHJ1ZTtcbiAgICAgIGRhdGEudHlwZSA9ICdkaXJlY3RvcnknO1xuICAgIH0gZWxzZSBpZiAoaXNEaXIpIHtcbiAgICAgIGRhdGEubmFtZSArPSAnLyc7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzRGlyIHx8IGlzU3ltbGluaykge1xuICAgIGRhdGEuc3RvcmUgPSB0cnVlO1xuICB9XG5cbiAgZGF0YS5kYXRlID0gdXRpbC5kYXRlaWZ5KGRhdGEuZGF0ZSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYW4gZW50cnkgZ2l2ZW4gYW4gaW5wdXQgc291cmNlICh0ZXh0IHN0cmluZywgYnVmZmVyLCBvciBzdHJlYW0pLlxuICpcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtfFN0cmluZyl9IHNvdXJjZSBUaGUgaW5wdXQgc291cmNlLlxuICogQHBhcmFtICB7T2JqZWN0fSBkYXRhXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRhdGEubmFtZSBTZXRzIHRoZSBlbnRyeSBuYW1lIGluY2x1ZGluZyBpbnRlcm5hbCBwYXRoLlxuICogQHBhcmFtICB7U3RyaW5nfSBbZGF0YS5jb21tZW50XSBTZXRzIHRoZSBlbnRyeSBjb21tZW50LlxuICogQHBhcmFtICB7KFN0cmluZ3xEYXRlKX0gW2RhdGEuZGF0ZT1OT1coKV0gU2V0cyB0aGUgZW50cnkgZGF0ZS5cbiAqIEBwYXJhbSAge051bWJlcn0gW2RhdGEubW9kZT1EOjA3NTUvRjowNjQ0XSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEBwYXJhbSAge0Jvb2xlYW59IFtkYXRhLnN0b3JlPW9wdGlvbnMuc3RvcmVdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSAge1N0cmluZ30gW2RhdGEudHlwZT1maWxlXSBTZXRzIHRoZSBlbnRyeSB0eXBlLiBEZWZhdWx0cyB0byBgZGlyZWN0b3J5YFxuICogaWYgbmFtZSBlbmRzIHdpdGggdHJhaWxpbmcgc2xhc2guXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4gdGhpc1xuICovXG5aaXBTdHJlYW0ucHJvdG90eXBlLmVudHJ5ID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSB0aGlzLl9lbWl0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgZGF0YSA9IHRoaXMuX25vcm1hbGl6ZUZpbGVEYXRhKGRhdGEpO1xuXG4gIGlmIChkYXRhLnR5cGUgIT09ICdmaWxlJyAmJiBkYXRhLnR5cGUgIT09ICdkaXJlY3RvcnknICYmIGRhdGEudHlwZSAhPT0gJ3N5bWxpbmsnKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKGRhdGEudHlwZSArICcgZW50cmllcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCcpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEubmFtZSAhPT0gJ3N0cmluZycgfHwgZGF0YS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcignZW50cnkgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZGF0YS50eXBlID09PSAnc3ltbGluaycgJiYgdHlwZW9mIGRhdGEubGlua25hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdlbnRyeSBsaW5rbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZSB3aGVuIHR5cGUgZXF1YWxzIHN5bWxpbmsnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGVudHJ5ID0gbmV3IFppcEFyY2hpdmVFbnRyeShkYXRhLm5hbWUpO1xuICBlbnRyeS5zZXRUaW1lKGRhdGEuZGF0ZSwgdGhpcy5vcHRpb25zLmZvcmNlTG9jYWxUaW1lKTtcblxuICBpZiAoZGF0YS5uYW1lUHJlcGVuZFNsYXNoKSB7XG4gICAgZW50cnkuc2V0TmFtZShkYXRhLm5hbWUsIHRydWUpO1xuICB9XG5cbiAgaWYgKGRhdGEuc3RvcmUpIHtcbiAgICBlbnRyeS5zZXRNZXRob2QoMCk7XG4gIH1cblxuICBpZiAoZGF0YS5jb21tZW50Lmxlbmd0aCA+IDApIHtcbiAgICBlbnRyeS5zZXRDb21tZW50KGRhdGEuY29tbWVudCk7XG4gIH1cblxuICBpZiAoZGF0YS50eXBlID09PSAnc3ltbGluaycgJiYgdHlwZW9mIGRhdGEubW9kZSAhPT0gJ251bWJlcicpIHtcbiAgICBkYXRhLm1vZGUgPSA0MDk2MDsgLy8gMDEyMDAwMFxuICB9XG5cbiAgaWYgKHR5cGVvZiBkYXRhLm1vZGUgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ3N5bWxpbmsnKSB7XG4gICAgICBkYXRhLm1vZGUgfD0gNDA5NjA7XG4gICAgfVxuXG4gICAgZW50cnkuc2V0VW5peE1vZGUoZGF0YS5tb2RlKTtcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdzeW1saW5rJyAmJiB0eXBlb2YgZGF0YS5saW5rbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2UgPSBCdWZmZXIuZnJvbShkYXRhLmxpbmtuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5lbnRyeS5jYWxsKHRoaXMsIGVudHJ5LCBzb3VyY2UsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogRmluYWxpemVzIHRoZSBpbnN0YW5jZSBhbmQgcHJldmVudHMgZnVydGhlciBhcHBlbmRpbmcgdG8gdGhlIGFyY2hpdmVcbiAqIHN0cnVjdHVyZSAocXVldWUgd2lsbCBjb250aW51ZSB0aWwgZHJhaW5lZCkuXG4gKlxuICogQHJldHVybiB2b2lkXG4gKi9cblppcFN0cmVhbS5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5maW5pc2goKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGlzIHN0cmVhbS5cbiAqIEBmdW5jdGlvbiBaaXBTdHJlYW0jZ2V0Qnl0ZXNXcml0dGVuXG4gKiBAcmV0dXJucyB7TnVtYmVyfVxuICovXG5cbi8qKlxuICogQ29tcHJlc3MgQ29tbW9ucyBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtXG4gKiBAZXh0ZXJuYWwgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zfVxuICovXG4iLAogICAgIi8qKlxuICogWklQIEZvcm1hdCBQbHVnaW5cbiAqXG4gKiBAbW9kdWxlIHBsdWdpbnMvemlwXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgZW5naW5lID0gcmVxdWlyZSgnemlwLXN0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtaaXBPcHRpb25zfSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5jb21tZW50XSBTZXRzIHRoZSB6aXAgYXJjaGl2ZSBjb21tZW50LlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZUxvY2FsVGltZT1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gbG9jYWwgZmlsZSB0aW1lcyBpbnN0ZWFkIG9mIFVUQy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZm9yY2VaaXA2ND1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gWklQNjQgaGVhZGVycy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubmFtZVByZXBlbmRTbGFzaD1mYWxzZV0gUHJlcGVuZHMgYSBmb3J3YXJkIHNsYXNoIHRvIGFyY2hpdmUgZmlsZSBwYXRocy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc3RvcmU9ZmFsc2VdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy56bGliXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqL1xudmFyIFppcCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFppcCkpIHtcbiAgICByZXR1cm4gbmV3IFppcChvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBjb21tZW50OiAnJyxcbiAgICBmb3JjZVVUQzogZmFsc2UsXG4gICAgbmFtZVByZXBlbmRTbGFzaDogZmFsc2UsXG4gICAgc3RvcmU6IGZhbHNlXG4gIH0pO1xuXG4gIHRoaXMuc3VwcG9ydHMgPSB7XG4gICAgZGlyZWN0b3J5OiB0cnVlLFxuICAgIHN5bWxpbms6IHRydWVcbiAgfTtcblxuICB0aGlzLmVuZ2luZSA9IG5ldyBlbmdpbmUob3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtKX0gc291cmNlXG4gKiBAcGFyYW0gIHtaaXBFbnRyeURhdGF9IGRhdGFcbiAqIEBwYXJhbSAge1N0cmluZ30gZGF0YS5uYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcGFyYW0gIHsoU3RyaW5nfERhdGUpfSBbZGF0YS5kYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHBhcmFtICB7TnVtYmVyfSBbZGF0YS5tb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHBhcmFtICB7U3RyaW5nfSBbZGF0YS5wcmVmaXhdIFNldHMgYSBwYXRoIHByZWZpeCBmb3IgdGhlIGVudHJ5IG5hbWUuIFVzZWZ1bFxuICogd2hlbiB3b3JraW5nIHdpdGggbWV0aG9kcyBsaWtlIGBkaXJlY3RvcnlgIG9yIGBnbG9iYC5cbiAqIEBwYXJhbSAge2ZzLlN0YXRzfSBbZGF0YS5zdGF0c10gU2V0cyB0aGUgZnMgc3RhdCBkYXRhIGZvciB0aGlzIGVudHJ5IGFsbG93aW5nXG4gKiBmb3IgcmVkdWN0aW9uIG9mIGZzIHN0YXQgY2FsbHMgd2hlbiBzdGF0IGRhdGEgaXMgYWxyZWFkeSBrbm93bi5cbiAqIEBwYXJhbSAge0Jvb2xlYW59IFtkYXRhLnN0b3JlPVppcE9wdGlvbnMuc3RvcmVdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cblppcC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICB0aGlzLmVuZ2luZS5lbnRyeShzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB2b2lkXG4gKi9cblppcC5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbmdpbmUuZmluYWxpemUoKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5aaXAucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVuZ2luZS5vbi5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5aaXAucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLnBpcGUuYXBwbHkodGhpcy5lbmdpbmUsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuWmlwLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLnVucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gWmlwO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcE9wdGlvbnNcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbY29tbWVudF0gU2V0cyB0aGUgemlwIGFyY2hpdmUgY29tbWVudC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW2ZvcmNlTG9jYWxUaW1lPWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBsb2NhbCBmaWxlIHRpbWVzIGluc3RlYWQgb2YgVVRDLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZm9yY2VaaXA2ND1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gWklQNjQgaGVhZGVycy5cbiAqIEBwcnBwZXJ0eSB7Qm9vbGVhbn0gW25hbWVQcmVwZW5kU2xhc2g9ZmFsc2VdIFByZXBlbmRzIGEgZm9yd2FyZCBzbGFzaCB0byBhcmNoaXZlIGZpbGUgcGF0aHMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtzdG9yZT1mYWxzZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFt6bGliXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqIHRvIGNvbnRyb2wgY29tcHJlc3Npb24uXG4gKiBAcHJvcGVydHkgeyp9IFsqXSBTZWUgW3ppcC1zdHJlYW1de0BsaW5rIGh0dHBzOi8vYXJjaGl2ZXJqcy5jb20vemlwLXN0cmVhbS9aaXBTdHJlYW0uaHRtbH0gZG9jdW1lbnRhdGlvbiBmb3IgY3VycmVudCBsaXN0IG9mIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBaaXBFbnRyeURhdGFcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBuYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcHJvcGVydHkgeyhTdHJpbmd8RGF0ZSl9IFtkYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFttb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbbmFtZVByZXBlbmRTbGFzaD1aaXBPcHRpb25zLm5hbWVQcmVwZW5kU2xhc2hdIFByZXBlbmRzIGEgZm9yd2FyZCBzbGFzaCB0byBhcmNoaXZlIGZpbGUgcGF0aHMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gW3ByZWZpeF0gU2V0cyBhIHBhdGggcHJlZml4IGZvciB0aGUgZW50cnkgbmFtZS4gVXNlZnVsXG4gKiB3aGVuIHdvcmtpbmcgd2l0aCBtZXRob2RzIGxpa2UgYGRpcmVjdG9yeWAgb3IgYGdsb2JgLlxuICogQHByb3BlcnR5IHtmcy5TdGF0c30gW3N0YXRzXSBTZXRzIHRoZSBmcyBzdGF0IGRhdGEgZm9yIHRoaXMgZW50cnkgYWxsb3dpbmdcbiAqIGZvciByZWR1Y3Rpb24gb2YgZnMgc3RhdCBjYWxscyB3aGVuIHN0YXQgZGF0YSBpcyBhbHJlYWR5IGtub3duLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbc3RvcmU9WmlwT3B0aW9ucy5zdG9yZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICovXG5cbi8qKlxuICogWmlwU3RyZWFtIE1vZHVsZVxuICogQGV4dGVybmFsIFppcFN0cmVhbVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuYXJjaGl2ZXJqcy5jb20vemlwLXN0cmVhbS9aaXBTdHJlYW0uaHRtbH1cbiAqL1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gJ2Z1bmN0aW9uJyA/IHF1ZXVlTWljcm90YXNrIDogKGZuKSA9PiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZuKVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbicpXG4gID8gcHJvY2Vzcy5uZXh0VGljay5iaW5kKHByb2Nlc3MpXG4gIDogcmVxdWlyZSgnLi9xdWV1ZS1taWNyb3Rhc2snKVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZpeGVkRklGTyB7XG4gIGNvbnN0cnVjdG9yIChod20pIHtcbiAgICBpZiAoIShod20gPiAwKSB8fCAoKGh3bSAtIDEpICYgaHdtKSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdNYXggc2l6ZSBmb3IgYSBGaXhlZEZJRk8gc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvJylcbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheShod20pXG4gICAgdGhpcy5tYXNrID0gaHdtIC0gMVxuICAgIHRoaXMudG9wID0gMFxuICAgIHRoaXMuYnRtID0gMFxuICAgIHRoaXMubmV4dCA9IG51bGxcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzLnRvcCA9IHRoaXMuYnRtID0gMFxuICAgIHRoaXMubmV4dCA9IG51bGxcbiAgICB0aGlzLmJ1ZmZlci5maWxsKHVuZGVmaW5lZClcbiAgfVxuXG4gIHB1c2ggKGRhdGEpIHtcbiAgICBpZiAodGhpcy5idWZmZXJbdGhpcy50b3BdICE9PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZVxuICAgIHRoaXMuYnVmZmVyW3RoaXMudG9wXSA9IGRhdGFcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYgdGhpcy5tYXNrXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHNoaWZ0ICgpIHtcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5idWZmZXJbdGhpcy5idG1dXG4gICAgaWYgKGxhc3QgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHRoaXMuYnVmZmVyW3RoaXMuYnRtXSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYnRtID0gKHRoaXMuYnRtICsgMSkgJiB0aGlzLm1hc2tcbiAgICByZXR1cm4gbGFzdFxuICB9XG5cbiAgcGVlayAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuYnRtXVxuICB9XG5cbiAgaXNFbXB0eSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuYnRtXSA9PT0gdW5kZWZpbmVkXG4gIH1cbn1cbiIsCiAgICAiY29uc3QgRml4ZWRGSUZPID0gcmVxdWlyZSgnLi9maXhlZC1zaXplJylcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGYXN0RklGTyB7XG4gIGNvbnN0cnVjdG9yIChod20pIHtcbiAgICB0aGlzLmh3bSA9IGh3bSB8fCAxNlxuICAgIHRoaXMuaGVhZCA9IG5ldyBGaXhlZEZJRk8odGhpcy5od20pXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkXG4gICAgdGhpcy5sZW5ndGggPSAwXG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsXG4gICAgdGhpcy5oZWFkLmNsZWFyKClcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgfVxuXG4gIHB1c2ggKHZhbCkge1xuICAgIHRoaXMubGVuZ3RoKytcbiAgICBpZiAoIXRoaXMuaGVhZC5wdXNoKHZhbCkpIHtcbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmhlYWRcbiAgICAgIHRoaXMuaGVhZCA9IHByZXYubmV4dCA9IG5ldyBGaXhlZEZJRk8oMiAqIHRoaXMuaGVhZC5idWZmZXIubGVuZ3RoKVxuICAgICAgdGhpcy5oZWFkLnB1c2godmFsKVxuICAgIH1cbiAgfVxuXG4gIHNoaWZ0ICgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggIT09IDApIHRoaXMubGVuZ3RoLS1cbiAgICBjb25zdCB2YWwgPSB0aGlzLnRhaWwuc2hpZnQoKVxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhaWwubmV4dCkge1xuICAgICAgY29uc3QgbmV4dCA9IHRoaXMudGFpbC5uZXh0XG4gICAgICB0aGlzLnRhaWwubmV4dCA9IG51bGxcbiAgICAgIHRoaXMudGFpbCA9IG5leHRcbiAgICAgIHJldHVybiB0aGlzLnRhaWwuc2hpZnQoKVxuICAgIH1cblxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIHBlZWsgKCkge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMudGFpbC5wZWVrKClcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQgJiYgdGhpcy50YWlsLm5leHQpIHJldHVybiB0aGlzLnRhaWwubmV4dC5wZWVrKClcbiAgICByZXR1cm4gdmFsXG4gIH1cblxuICBpc0VtcHR5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5sZW5ndGggPT09IDBcbiAgfVxufVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBhc3NUaHJvdWdoRGVjb2RlciB7XG4gIGNvbnN0cnVjdG9yIChlbmNvZGluZykge1xuICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZ1xuICB9XG5cbiAgZ2V0IHJlbWFpbmluZyAoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGRlY29kZSAodGFpbCkge1xuICAgIHJldHVybiB0YWlsLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpXG4gIH1cblxuICBmbHVzaCAoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cbiIsCiAgICAiLyoqXG4gKiBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFVURjhEZWNvZGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuY29kZVBvaW50ID0gMFxuICAgIHRoaXMuYnl0ZXNTZWVuID0gMFxuICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAwXG4gICAgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHg4MFxuICAgIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4YmZcbiAgfVxuXG4gIGdldCByZW1haW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmJ5dGVzU2VlblxuICB9XG5cbiAgZGVjb2RlIChkYXRhKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhIGZhc3QgcGF0aCwganVzdCBzbmlmZiBpZiB0aGUgbGFzdCBwYXJ0IGlzIGEgYm91bmRhcnlcbiAgICBpZiAodGhpcy5ieXRlc05lZWRlZCA9PT0gMCkge1xuICAgICAgbGV0IGlzQm91bmRhcnkgPSB0cnVlXG5cbiAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1heCgwLCBkYXRhLmJ5dGVMZW5ndGggLSA0KSwgbiA9IGRhdGEuYnl0ZUxlbmd0aDsgaSA8IG4gJiYgaXNCb3VuZGFyeTsgaSsrKSB7XG4gICAgICAgIGlzQm91bmRhcnkgPSBkYXRhW2ldIDw9IDB4N2ZcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQm91bmRhcnkpIHJldHVybiBkYXRhLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gJydcblxuICAgIGZvciAobGV0IGkgPSAwLCBuID0gZGF0YS5ieXRlTGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBjb25zdCBieXRlID0gZGF0YVtpXVxuXG4gICAgICBpZiAodGhpcy5ieXRlc05lZWRlZCA9PT0gMCkge1xuICAgICAgICBpZiAoYnl0ZSA8PSAweDdmKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJ5dGVzU2VlbiA9IDFcblxuICAgICAgICAgIGlmIChieXRlID49IDB4YzIgJiYgYnl0ZSA8PSAweGRmKSB7XG4gICAgICAgICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gMlxuICAgICAgICAgICAgdGhpcy5jb2RlUG9pbnQgPSBieXRlICYgMHgxZlxuICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAweGUwICYmIGJ5dGUgPD0gMHhlZikge1xuICAgICAgICAgICAgaWYgKGJ5dGUgPT09IDB4ZTApIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4YTBcbiAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGUgPT09IDB4ZWQpIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4OWZcbiAgICAgICAgICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAzXG4gICAgICAgICAgICB0aGlzLmNvZGVQb2ludCA9IGJ5dGUgJiAweGZcbiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPj0gMHhmMCAmJiBieXRlIDw9IDB4ZjQpIHtcbiAgICAgICAgICAgIGlmIChieXRlID09PSAweGYwKSB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDkwXG4gICAgICAgICAgICBpZiAoYnl0ZSA9PT0gMHhmNCkgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHg4ZlxuICAgICAgICAgICAgdGhpcy5ieXRlc05lZWRlZCA9IDRcbiAgICAgICAgICAgIHRoaXMuY29kZVBvaW50ID0gYnl0ZSAmIDB4N1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcdWZmZmQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGJ5dGUgPCB0aGlzLmxvd2VyQm91bmRhcnkgfHwgYnl0ZSA+IHRoaXMudXBwZXJCb3VuZGFyeSkge1xuICAgICAgICB0aGlzLmNvZGVQb2ludCA9IDBcbiAgICAgICAgdGhpcy5ieXRlc05lZWRlZCA9IDBcbiAgICAgICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgICAgIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4ODBcbiAgICAgICAgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHhiZlxuXG4gICAgICAgIHJlc3VsdCArPSAnXFx1ZmZmZCdcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDgwXG4gICAgICB0aGlzLnVwcGVyQm91bmRhcnkgPSAweGJmXG5cbiAgICAgIHRoaXMuY29kZVBvaW50ID0gKHRoaXMuY29kZVBvaW50IDw8IDYpIHwgKGJ5dGUgJiAweDNmKVxuICAgICAgdGhpcy5ieXRlc1NlZW4rK1xuXG4gICAgICBpZiAodGhpcy5ieXRlc1NlZW4gIT09IHRoaXMuYnl0ZXNOZWVkZWQpIGNvbnRpbnVlXG5cbiAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludCh0aGlzLmNvZGVQb2ludClcblxuICAgICAgdGhpcy5jb2RlUG9pbnQgPSAwXG4gICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gMFxuICAgICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZmx1c2ggKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYnl0ZXNOZWVkZWQgPiAwID8gJ1xcdWZmZmQnIDogJydcblxuICAgIHRoaXMuY29kZVBvaW50ID0gMFxuICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAwXG4gICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHg4MFxuICAgIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4YmZcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuIiwKICAgICJjb25zdCBQYXNzVGhyb3VnaERlY29kZXIgPSByZXF1aXJlKCcuL2xpYi9wYXNzLXRocm91Z2gtZGVjb2RlcicpXG5jb25zdCBVVEY4RGVjb2RlciA9IHJlcXVpcmUoJy4vbGliL3V0ZjgtZGVjb2RlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgVGV4dERlY29kZXIge1xuICBjb25zdHJ1Y3RvciAoZW5jb2RpbmcgPSAndXRmOCcpIHtcbiAgICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpXG5cbiAgICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgICB0aGlzLmRlY29kZXIgPSBuZXcgVVRGOERlY29kZXIoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVuY29kaW5nOiAnICsgdGhpcy5lbmNvZGluZylcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IG5ldyBQYXNzVGhyb3VnaERlY29kZXIodGhpcy5lbmNvZGluZylcbiAgICB9XG4gIH1cblxuICBnZXQgcmVtYWluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLnJlbWFpbmluZ1xuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHJldHVybiBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci5kZWNvZGUoZGF0YSlcbiAgfVxuXG4gIC8vIEZvciBOb2RlLmpzIGNvbXBhdGliaWxpdHlcbiAgd3JpdGUgKGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5wdXNoKGRhdGEpXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICBsZXQgcmVzdWx0ID0gJydcbiAgICBpZiAoZGF0YSkgcmVzdWx0ID0gdGhpcy5wdXNoKGRhdGEpXG4gICAgcmVzdWx0ICs9IHRoaXMuZGVjb2Rlci5mbHVzaCgpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nIChlbmNvZGluZykge1xuICBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKClcblxuICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgICAgcmV0dXJuICd1dGY4J1xuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gJ3V0ZjE2bGUnXG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgICAgcmV0dXJuICdsYXRpbjEnXG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnaGV4JzpcbiAgICAgIHJldHVybiBlbmNvZGluZ1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxufTtcbiIsCiAgICAiY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCBTVFJFQU1fREVTVFJPWUVEID0gbmV3IEVycm9yKCdTdHJlYW0gd2FzIGRlc3Ryb3llZCcpXG5jb25zdCBQUkVNQVRVUkVfQ0xPU0UgPSBuZXcgRXJyb3IoJ1ByZW1hdHVyZSBjbG9zZScpXG5cbmNvbnN0IHF1ZXVlVGljayA9IHJlcXVpcmUoJ3F1ZXVlLXRpY2snKVxuY29uc3QgRklGTyA9IHJlcXVpcmUoJ2Zhc3QtZmlmbycpXG5jb25zdCBUZXh0RGVjb2RlciA9IHJlcXVpcmUoJ3RleHQtZGVjb2RlcicpXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLXNwYWNlcyAqL1xuXG4vLyAyOSBiaXRzIHVzZWQgdG90YWwgKDQgZnJvbSBzaGFyZWQsIDE0IGZyb20gcmVhZCwgYW5kIDExIGZyb20gd3JpdGUpXG5jb25zdCBNQVggPSAoKDEgPDwgMjkpIC0gMSlcblxuLy8gU2hhcmVkIHN0YXRlXG5jb25zdCBPUEVOSU5HICAgICAgID0gMGIwMDAxXG5jb25zdCBQUkVERVNUUk9ZSU5HID0gMGIwMDEwXG5jb25zdCBERVNUUk9ZSU5HICAgID0gMGIwMTAwXG5jb25zdCBERVNUUk9ZRUQgICAgID0gMGIxMDAwXG5cbmNvbnN0IE5PVF9PUEVOSU5HID0gTUFYIF4gT1BFTklOR1xuY29uc3QgTk9UX1BSRURFU1RST1lJTkcgPSBNQVggXiBQUkVERVNUUk9ZSU5HXG5cbi8vIFJlYWQgc3RhdGUgKDQgYml0IG9mZnNldCBmcm9tIHNoYXJlZCBzdGF0ZSlcbmNvbnN0IFJFQURfQUNUSVZFICAgICAgICAgICA9IDBiMDAwMDAwMDAwMDAwMDEgPDwgNFxuY29uc3QgUkVBRF9VUERBVElORyAgICAgICAgID0gMGIwMDAwMDAwMDAwMDAxMCA8PCA0XG5jb25zdCBSRUFEX1BSSU1BUlkgICAgICAgICAgPSAwYjAwMDAwMDAwMDAwMTAwIDw8IDRcbmNvbnN0IFJFQURfUVVFVUVEICAgICAgICAgICA9IDBiMDAwMDAwMDAwMDEwMDAgPDwgNFxuY29uc3QgUkVBRF9SRVNVTUVEICAgICAgICAgID0gMGIwMDAwMDAwMDAxMDAwMCA8PCA0XG5jb25zdCBSRUFEX1BJUEVfRFJBSU5FRCAgICAgPSAwYjAwMDAwMDAwMTAwMDAwIDw8IDRcbmNvbnN0IFJFQURfRU5ESU5HICAgICAgICAgICA9IDBiMDAwMDAwMDEwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9FTUlUX0RBVEEgICAgICAgID0gMGIwMDAwMDAxMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX0VNSVRfUkVBREFCTEUgICAgPSAwYjAwMDAwMTAwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfRU1JVFRFRF9SRUFEQUJMRSA9IDBiMDAwMDEwMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9ET05FICAgICAgICAgICAgID0gMGIwMDAxMDAwMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX05FWFRfVElDSyAgICAgICAgPSAwYjAwMTAwMDAwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfTkVFRFNfUFVTSCAgICAgICA9IDBiMDEwMDAwMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9SRUFEX0FIRUFEICAgICAgID0gMGIxMDAwMDAwMDAwMDAwMCA8PCA0XG5cbi8vIENvbWJpbmVkIHJlYWQgc3RhdGVcbmNvbnN0IFJFQURfRkxPV0lORyA9IFJFQURfUkVTVU1FRCB8IFJFQURfUElQRV9EUkFJTkVEXG5jb25zdCBSRUFEX0FDVElWRV9BTkRfTkVFRFNfUFVTSCA9IFJFQURfQUNUSVZFIHwgUkVBRF9ORUVEU19QVVNIXG5jb25zdCBSRUFEX1BSSU1BUllfQU5EX0FDVElWRSA9IFJFQURfUFJJTUFSWSB8IFJFQURfQUNUSVZFXG5jb25zdCBSRUFEX0VNSVRfUkVBREFCTEVfQU5EX1FVRVVFRCA9IFJFQURfRU1JVF9SRUFEQUJMRSB8IFJFQURfUVVFVUVEXG5jb25zdCBSRUFEX1JFU1VNRURfUkVBRF9BSEVBRCA9IFJFQURfUkVTVU1FRCB8IFJFQURfUkVBRF9BSEVBRFxuXG5jb25zdCBSRUFEX05PVF9BQ1RJVkUgICAgICAgICAgICAgPSBNQVggXiBSRUFEX0FDVElWRVxuY29uc3QgUkVBRF9OT05fUFJJTUFSWSAgICAgICAgICAgID0gTUFYIF4gUkVBRF9QUklNQVJZXG5jb25zdCBSRUFEX05PTl9QUklNQVJZX0FORF9QVVNIRUQgPSBNQVggXiAoUkVBRF9QUklNQVJZIHwgUkVBRF9ORUVEU19QVVNIKVxuY29uc3QgUkVBRF9QVVNIRUQgICAgICAgICAgICAgICAgID0gTUFYIF4gUkVBRF9ORUVEU19QVVNIXG5jb25zdCBSRUFEX1BBVVNFRCAgICAgICAgICAgICAgICAgPSBNQVggXiBSRUFEX1JFU1VNRURcbmNvbnN0IFJFQURfTk9UX1FVRVVFRCAgICAgICAgICAgICA9IE1BWCBeIChSRUFEX1FVRVVFRCB8IFJFQURfRU1JVFRFRF9SRUFEQUJMRSlcbmNvbnN0IFJFQURfTk9UX0VORElORyAgICAgICAgICAgICA9IE1BWCBeIFJFQURfRU5ESU5HXG5jb25zdCBSRUFEX1BJUEVfTk9UX0RSQUlORUQgICAgICAgPSBNQVggXiBSRUFEX0ZMT1dJTkdcbmNvbnN0IFJFQURfTk9UX05FWFRfVElDSyAgICAgICAgICA9IE1BWCBeIFJFQURfTkVYVF9USUNLXG5jb25zdCBSRUFEX05PVF9VUERBVElORyAgICAgICAgICAgPSBNQVggXiBSRUFEX1VQREFUSU5HXG5jb25zdCBSRUFEX05PX1JFQURfQUhFQUQgICAgICAgICAgPSBNQVggXiBSRUFEX1JFQURfQUhFQURcbmNvbnN0IFJFQURfUEFVU0VEX05PX1JFQURfQUhFQUQgICA9IE1BWCBeIFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEXG5cbi8vIFdyaXRlIHN0YXRlICgxOCBiaXQgb2Zmc2V0LCA0IGJpdCBvZmZzZXQgZnJvbSBzaGFyZWQgc3RhdGUgYW5kIDE0IGZyb20gcmVhZCBzdGF0ZSlcbmNvbnN0IFdSSVRFX0FDVElWRSAgICAgPSAwYjAwMDAwMDAwMDAxIDw8IDE4XG5jb25zdCBXUklURV9VUERBVElORyAgID0gMGIwMDAwMDAwMDAxMCA8PCAxOFxuY29uc3QgV1JJVEVfUFJJTUFSWSAgICA9IDBiMDAwMDAwMDAxMDAgPDwgMThcbmNvbnN0IFdSSVRFX1FVRVVFRCAgICAgPSAwYjAwMDAwMDAxMDAwIDw8IDE4XG5jb25zdCBXUklURV9VTkRSQUlORUQgID0gMGIwMDAwMDAxMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfRE9ORSAgICAgICA9IDBiMDAwMDAxMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX0VNSVRfRFJBSU4gPSAwYjAwMDAxMDAwMDAwIDw8IDE4XG5jb25zdCBXUklURV9ORVhUX1RJQ0sgID0gMGIwMDAxMDAwMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfV1JJVElORyAgICA9IDBiMDAxMDAwMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX0ZJTklTSElORyAgPSAwYjAxMDAwMDAwMDAwIDw8IDE4XG5jb25zdCBXUklURV9DT1JLRUQgICAgID0gMGIxMDAwMDAwMDAwMCA8PCAxOFxuXG5jb25zdCBXUklURV9OT1RfQUNUSVZFICAgID0gTUFYIF4gKFdSSVRFX0FDVElWRSB8IFdSSVRFX1dSSVRJTkcpXG5jb25zdCBXUklURV9OT05fUFJJTUFSWSAgID0gTUFYIF4gV1JJVEVfUFJJTUFSWVxuY29uc3QgV1JJVEVfTk9UX0ZJTklTSElORyA9IE1BWCBeIFdSSVRFX0ZJTklTSElOR1xuY29uc3QgV1JJVEVfRFJBSU5FRCAgICAgICA9IE1BWCBeIFdSSVRFX1VORFJBSU5FRFxuY29uc3QgV1JJVEVfTk9UX1FVRVVFRCAgICA9IE1BWCBeIFdSSVRFX1FVRVVFRFxuY29uc3QgV1JJVEVfTk9UX05FWFRfVElDSyA9IE1BWCBeIFdSSVRFX05FWFRfVElDS1xuY29uc3QgV1JJVEVfTk9UX1VQREFUSU5HICA9IE1BWCBeIFdSSVRFX1VQREFUSU5HXG5jb25zdCBXUklURV9OT1RfQ09SS0VEICAgID0gTUFYIF4gV1JJVEVfQ09SS0VEXG5cbi8vIENvbWJpbmVkIHNoYXJlZCBzdGF0ZVxuY29uc3QgQUNUSVZFID0gUkVBRF9BQ1RJVkUgfCBXUklURV9BQ1RJVkVcbmNvbnN0IE5PVF9BQ1RJVkUgPSBNQVggXiBBQ1RJVkVcbmNvbnN0IERPTkUgPSBSRUFEX0RPTkUgfCBXUklURV9ET05FXG5jb25zdCBERVNUUk9ZX1NUQVRVUyA9IERFU1RST1lJTkcgfCBERVNUUk9ZRUQgfCBQUkVERVNUUk9ZSU5HXG5jb25zdCBPUEVOX1NUQVRVUyA9IERFU1RST1lfU1RBVFVTIHwgT1BFTklOR1xuY29uc3QgQVVUT19ERVNUUk9ZID0gREVTVFJPWV9TVEFUVVMgfCBET05FXG5jb25zdCBOT05fUFJJTUFSWSA9IFdSSVRFX05PTl9QUklNQVJZICYgUkVBRF9OT05fUFJJTUFSWVxuY29uc3QgQUNUSVZFX09SX1RJQ0tJTkcgPSBXUklURV9ORVhUX1RJQ0sgfCBSRUFEX05FWFRfVElDS1xuY29uc3QgVElDS0lORyA9IEFDVElWRV9PUl9USUNLSU5HICYgTk9UX0FDVElWRVxuY29uc3QgSVNfT1BFTklORyA9IE9QRU5fU1RBVFVTIHwgVElDS0lOR1xuXG4vLyBDb21iaW5lZCBzaGFyZWQgc3RhdGUgYW5kIHJlYWQgc3RhdGVcbmNvbnN0IFJFQURfUFJJTUFSWV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFJFQURfRU5ESU5HIHwgUkVBRF9ET05FXG5jb25zdCBSRUFEX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9ET05FIHwgUkVBRF9RVUVVRURcbmNvbnN0IFJFQURfRU5ESU5HX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9FTkRJTkcgfCBSRUFEX1FVRVVFRFxuY29uc3QgUkVBRF9SRUFEQUJMRV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFJFQURfRU1JVF9SRUFEQUJMRSB8IFJFQURfUVVFVUVEIHwgUkVBRF9FTUlUVEVEX1JFQURBQkxFXG5jb25zdCBTSE9VTERfTk9UX1JFQUQgPSBPUEVOX1NUQVRVUyB8IFJFQURfQUNUSVZFIHwgUkVBRF9FTkRJTkcgfCBSRUFEX0RPTkUgfCBSRUFEX05FRURTX1BVU0ggfCBSRUFEX1JFQURfQUhFQURcbmNvbnN0IFJFQURfQkFDS1BSRVNTVVJFX1NUQVRVUyA9IERFU1RST1lfU1RBVFVTIHwgUkVBRF9FTkRJTkcgfCBSRUFEX0RPTkVcbmNvbnN0IFJFQURfVVBEQVRFX1NZTkNfU1RBVFVTID0gUkVBRF9VUERBVElORyB8IE9QRU5fU1RBVFVTIHwgUkVBRF9ORVhUX1RJQ0sgfCBSRUFEX1BSSU1BUllcblxuLy8gQ29tYmluZWQgd3JpdGUgc3RhdGVcbmNvbnN0IFdSSVRFX1BSSU1BUllfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBXUklURV9GSU5JU0hJTkcgfCBXUklURV9ET05FXG5jb25zdCBXUklURV9RVUVVRURfQU5EX1VORFJBSU5FRCA9IFdSSVRFX1FVRVVFRCB8IFdSSVRFX1VORFJBSU5FRFxuY29uc3QgV1JJVEVfUVVFVUVEX0FORF9BQ1RJVkUgPSBXUklURV9RVUVVRUQgfCBXUklURV9BQ1RJVkVcbmNvbnN0IFdSSVRFX0RSQUlOX1NUQVRVUyA9IFdSSVRFX1FVRVVFRCB8IFdSSVRFX1VORFJBSU5FRCB8IE9QRU5fU1RBVFVTIHwgV1JJVEVfQUNUSVZFXG5jb25zdCBXUklURV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFdSSVRFX0FDVElWRSB8IFdSSVRFX1FVRVVFRCB8IFdSSVRFX0NPUktFRFxuY29uc3QgV1JJVEVfUFJJTUFSWV9BTkRfQUNUSVZFID0gV1JJVEVfUFJJTUFSWSB8IFdSSVRFX0FDVElWRVxuY29uc3QgV1JJVEVfQUNUSVZFX0FORF9XUklUSU5HID0gV1JJVEVfQUNUSVZFIHwgV1JJVEVfV1JJVElOR1xuY29uc3QgV1JJVEVfRklOSVNISU5HX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgV1JJVEVfRklOSVNISU5HIHwgV1JJVEVfUVVFVUVEX0FORF9BQ1RJVkUgfCBXUklURV9ET05FXG5jb25zdCBXUklURV9CQUNLUFJFU1NVUkVfU1RBVFVTID0gV1JJVEVfVU5EUkFJTkVEIHwgREVTVFJPWV9TVEFUVVMgfCBXUklURV9GSU5JU0hJTkcgfCBXUklURV9ET05FXG5jb25zdCBXUklURV9VUERBVEVfU1lOQ19TVEFUVVMgPSBXUklURV9VUERBVElORyB8IE9QRU5fU1RBVFVTIHwgV1JJVEVfTkVYVF9USUNLIHwgV1JJVEVfUFJJTUFSWVxuXG5jb25zdCBhc3luY0l0ZXJhdG9yID0gU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgU3ltYm9sKCdhc3luY0l0ZXJhdG9yJylcblxuY2xhc3MgV3JpdGFibGVTdGF0ZSB7XG4gIGNvbnN0cnVjdG9yIChzdHJlYW0sIHsgaGlnaFdhdGVyTWFyayA9IDE2Mzg0LCBtYXAgPSBudWxsLCBtYXBXcml0YWJsZSwgYnl0ZUxlbmd0aCwgYnl0ZUxlbmd0aFdyaXRhYmxlIH0gPSB7fSkge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtXG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBGSUZPKClcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG4gICAgdGhpcy5idWZmZXJlZCA9IDBcbiAgICB0aGlzLmVycm9yID0gbnVsbFxuICAgIHRoaXMucGlwZWxpbmUgPSBudWxsXG4gICAgdGhpcy5kcmFpbnMgPSBudWxsIC8vIGlmIHdlIGFkZCBtb3JlIHNlbGRvbWx5IHVzZWQgaGVscGVycyB3ZSBtaWdodCB0aGVtIGludG8gYSBzdWJvYmplY3Qgc28gaXRzIGEgc2luZ2xlIHB0clxuICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhXcml0YWJsZSB8fCBieXRlTGVuZ3RoIHx8IGRlZmF1bHRCeXRlTGVuZ3RoXG4gICAgdGhpcy5tYXAgPSBtYXBXcml0YWJsZSB8fCBtYXBcbiAgICB0aGlzLmFmdGVyV3JpdGUgPSBhZnRlcldyaXRlLmJpbmQodGhpcylcbiAgICB0aGlzLmFmdGVyVXBkYXRlTmV4dFRpY2sgPSB1cGRhdGVXcml0ZU5ULmJpbmQodGhpcylcbiAgfVxuXG4gIGdldCBlbmRlZCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9ET05FKSAhPT0gMFxuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIGlmICh0aGlzLm1hcCAhPT0gbnVsbCkgZGF0YSA9IHRoaXMubWFwKGRhdGEpXG5cbiAgICB0aGlzLmJ1ZmZlcmVkICs9IHRoaXMuYnl0ZUxlbmd0aChkYXRhKVxuICAgIHRoaXMucXVldWUucHVzaChkYXRhKVxuXG4gICAgaWYgKHRoaXMuYnVmZmVyZWQgPCB0aGlzLmhpZ2hXYXRlck1hcmspIHtcbiAgICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9RVUVVRURcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX1FVRVVFRF9BTkRfVU5EUkFJTkVEXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBzaGlmdCAoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucXVldWUuc2hpZnQoKVxuXG4gICAgdGhpcy5idWZmZXJlZCAtPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICBpZiAodGhpcy5idWZmZXJlZCA9PT0gMCkgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9RVUVVRURcblxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHRoaXMuc3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGRhdGEpXG4gICAgZWxzZSBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IG51bGwpIHRoaXMucHVzaChkYXRhKVxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSA9ICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgfCBXUklURV9GSU5JU0hJTkcpICYgV1JJVEVfTk9OX1BSSU1BUllcbiAgfVxuXG4gIGF1dG9CYXRjaCAoZGF0YSwgY2IpIHtcbiAgICBjb25zdCBidWZmZXIgPSBbXVxuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBidWZmZXIucHVzaChkYXRhKVxuICAgIHdoaWxlICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1NUQVRVUykgPT09IFdSSVRFX1FVRVVFRF9BTkRfQUNUSVZFKSB7XG4gICAgICBidWZmZXIucHVzaChzdHJlYW0uX3dyaXRhYmxlU3RhdGUuc2hpZnQoKSlcbiAgICB9XG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBPUEVOX1NUQVRVUykgIT09IDApIHJldHVybiBjYihudWxsKVxuICAgIHN0cmVhbS5fd3JpdGV2KGJ1ZmZlciwgY2IpXG4gIH1cblxuICB1cGRhdGUgKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX1VQREFUSU5HXG5cbiAgICBkbyB7XG4gICAgICB3aGlsZSAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9TVEFUVVMpID09PSBXUklURV9RVUVVRUQpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc2hpZnQoKVxuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX0FDVElWRV9BTkRfV1JJVElOR1xuICAgICAgICBzdHJlYW0uX3dyaXRlKGRhdGEsIHRoaXMuYWZ0ZXJXcml0ZSlcbiAgICAgIH1cblxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfUFJJTUFSWV9BTkRfQUNUSVZFKSA9PT0gMCkgdGhpcy51cGRhdGVOb25QcmltYXJ5KClcbiAgICB9IHdoaWxlICh0aGlzLmNvbnRpbnVlVXBkYXRlKCkgPT09IHRydWUpXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9VUERBVElOR1xuICB9XG5cbiAgdXBkYXRlTm9uUHJpbWFyeSAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0ZJTklTSElOR19TVEFUVVMpID09PSBXUklURV9GSU5JU0hJTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFdSSVRFX0FDVElWRSkgJiBXUklURV9OT1RfRklOSVNISU5HXG4gICAgICBzdHJlYW0uX2ZpbmFsKGFmdGVyRmluYWwuYmluZCh0aGlzKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIERFU1RST1lfU1RBVFVTKSA9PT0gREVTVFJPWUlORykge1xuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgQUNUSVZFX09SX1RJQ0tJTkcpID09PSAwKSB7XG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gQUNUSVZFXG4gICAgICAgIHN0cmVhbS5fZGVzdHJveShhZnRlckRlc3Ryb3kuYmluZCh0aGlzKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIElTX09QRU5JTkcpID09PSBPUEVOSU5HKSB7XG4gICAgICBzdHJlYW0uX2R1cGxleFN0YXRlID0gKHN0cmVhbS5fZHVwbGV4U3RhdGUgfCBBQ1RJVkUpICYgTk9UX09QRU5JTkdcbiAgICAgIHN0cmVhbS5fb3BlbihhZnRlck9wZW4uYmluZCh0aGlzKSlcbiAgICB9XG4gIH1cblxuICBjb250aW51ZVVwZGF0ZSAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9ORVhUX1RJQ0spID09PSAwKSByZXR1cm4gZmFsc2VcbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX05FWFRfVElDS1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1cGRhdGVDYWxsYmFjayAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9VUERBVEVfU1lOQ19TVEFUVVMpID09PSBXUklURV9QUklNQVJZKSB0aGlzLnVwZGF0ZSgpXG4gICAgZWxzZSB0aGlzLnVwZGF0ZU5leHRUaWNrKClcbiAgfVxuXG4gIHVwZGF0ZU5leHRUaWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX05FWFRfVElDSykgIT09IDApIHJldHVyblxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9ORVhUX1RJQ0tcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1VQREFUSU5HKSA9PT0gMCkgcXVldWVUaWNrKHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljaylcbiAgfVxufVxuXG5jbGFzcyBSZWFkYWJsZVN0YXRlIHtcbiAgY29uc3RydWN0b3IgKHN0cmVhbSwgeyBoaWdoV2F0ZXJNYXJrID0gMTYzODQsIG1hcCA9IG51bGwsIG1hcFJlYWRhYmxlLCBieXRlTGVuZ3RoLCBieXRlTGVuZ3RoUmVhZGFibGUgfSA9IHt9KSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW1cbiAgICB0aGlzLnF1ZXVlID0gbmV3IEZJRk8oKVxuICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcmsgPT09IDAgPyAxIDogaGlnaFdhdGVyTWFya1xuICAgIHRoaXMuYnVmZmVyZWQgPSAwXG4gICAgdGhpcy5yZWFkQWhlYWQgPSBoaWdoV2F0ZXJNYXJrID4gMFxuICAgIHRoaXMuZXJyb3IgPSBudWxsXG4gICAgdGhpcy5waXBlbGluZSA9IG51bGxcbiAgICB0aGlzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoUmVhZGFibGUgfHwgYnl0ZUxlbmd0aCB8fCBkZWZhdWx0Qnl0ZUxlbmd0aFxuICAgIHRoaXMubWFwID0gbWFwUmVhZGFibGUgfHwgbWFwXG4gICAgdGhpcy5waXBlVG8gPSBudWxsXG4gICAgdGhpcy5hZnRlclJlYWQgPSBhZnRlclJlYWQuYmluZCh0aGlzKVxuICAgIHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljayA9IHVwZGF0ZVJlYWROVC5iaW5kKHRoaXMpXG4gIH1cblxuICBnZXQgZW5kZWQgKCkge1xuICAgIHJldHVybiAodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSAhPT0gMFxuICB9XG5cbiAgcGlwZSAocGlwZVRvLCBjYikge1xuICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBwaXBlIHRvIG9uZSBkZXN0aW5hdGlvbicpXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgY2IgPSBudWxsXG5cbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gUkVBRF9QSVBFX0RSQUlORURcbiAgICB0aGlzLnBpcGVUbyA9IHBpcGVUb1xuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcy5zdHJlYW0sIHBpcGVUbywgY2IpXG5cbiAgICBpZiAoY2IpIHRoaXMuc3RyZWFtLm9uKCdlcnJvcicsIG5vb3ApIC8vIFdlIGFscmVhZHkgZXJyb3IgaGFuZGxlIHRoaXMgc28gc3VwcmVzcyBjcmFzaGVzXG5cbiAgICBpZiAoaXNTdHJlYW14KHBpcGVUbykpIHtcbiAgICAgIHBpcGVUby5fd3JpdGFibGVTdGF0ZS5waXBlbGluZSA9IHRoaXMucGlwZWxpbmVcbiAgICAgIGlmIChjYikgcGlwZVRvLm9uKCdlcnJvcicsIG5vb3ApIC8vIFdlIGFscmVhZHkgZXJyb3IgaGFuZGxlIHRoaXMgc28gc3VwcmVzcyBjcmFzaGVzXG4gICAgICBwaXBlVG8ub24oJ2ZpbmlzaCcsIHRoaXMucGlwZWxpbmUuZmluaXNoZWQuYmluZCh0aGlzLnBpcGVsaW5lKSkgLy8gVE9ETzoganVzdCBjYWxsIGZpbmlzaGVkIGZyb20gcGlwZVRvIGl0c2VsZlxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvbmVycm9yID0gdGhpcy5waXBlbGluZS5kb25lLmJpbmQodGhpcy5waXBlbGluZSwgcGlwZVRvKVxuICAgICAgY29uc3Qgb25jbG9zZSA9IHRoaXMucGlwZWxpbmUuZG9uZS5iaW5kKHRoaXMucGlwZWxpbmUsIHBpcGVUbywgbnVsbCkgLy8gb25jbG9zZSBoYXMgYSB3ZWlyZCBib29sIGFyZ1xuICAgICAgcGlwZVRvLm9uKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgICBwaXBlVG8ub24oJ2Nsb3NlJywgb25jbG9zZSlcbiAgICAgIHBpcGVUby5vbignZmluaXNoJywgdGhpcy5waXBlbGluZS5maW5pc2hlZC5iaW5kKHRoaXMucGlwZWxpbmUpKVxuICAgIH1cblxuICAgIHBpcGVUby5vbignZHJhaW4nLCBhZnRlckRyYWluLmJpbmQodGhpcykpXG4gICAgdGhpcy5zdHJlYW0uZW1pdCgncGlwaW5nJywgcGlwZVRvKVxuICAgIHBpcGVUby5lbWl0KCdwaXBlJywgdGhpcy5zdHJlYW0pXG4gIH1cblxuICBwdXNoIChkYXRhKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSAwXG4gICAgICBzdHJlYW0uX2R1cGxleFN0YXRlID0gKHN0cmVhbS5fZHVwbGV4U3RhdGUgfCBSRUFEX0VORElORykgJiBSRUFEX05PTl9QUklNQVJZX0FORF9QVVNIRURcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1hcCAhPT0gbnVsbCkge1xuICAgICAgZGF0YSA9IHRoaXMubWFwKGRhdGEpXG4gICAgICBpZiAoZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfUFVTSEVEXG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcmVkIDwgdGhpcy5oaWdoV2F0ZXJNYXJrXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXJlZCArPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICB0aGlzLnF1ZXVlLnB1c2goZGF0YSlcblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFJFQURfUVVFVUVEKSAmIFJFQURfUFVTSEVEXG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJlZCA8IHRoaXMuaGlnaFdhdGVyTWFya1xuICB9XG5cbiAgc2hpZnQgKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnF1ZXVlLnNoaWZ0KClcblxuICAgIHRoaXMuYnVmZmVyZWQgLT0gdGhpcy5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgaWYgKHRoaXMuYnVmZmVyZWQgPT09IDApIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PVF9RVUVVRURcbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgdW5zaGlmdCAoZGF0YSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSBbdGhpcy5tYXAgIT09IG51bGwgPyB0aGlzLm1hcChkYXRhKSA6IGRhdGFdXG4gICAgd2hpbGUgKHRoaXMuYnVmZmVyZWQgPiAwKSBwZW5kaW5nLnB1c2godGhpcy5zaGlmdCgpKVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZW5kaW5nLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgY29uc3QgZGF0YSA9IHBlbmRpbmdbaV1cbiAgICAgIHRoaXMuYnVmZmVyZWQgKz0gdGhpcy5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgICB0aGlzLnF1ZXVlLnB1c2goZGF0YSlcbiAgICB9XG5cbiAgICB0aGlzLnB1c2gocGVuZGluZ1twZW5kaW5nLmxlbmd0aCAtIDFdKVxuICB9XG5cbiAgcmVhZCAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfU1RBVFVTKSA9PT0gUkVBRF9RVUVVRUQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNoaWZ0KClcbiAgICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCAmJiB0aGlzLnBpcGVUby53cml0ZShkYXRhKSA9PT0gZmFsc2UpIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9QSVBFX05PVF9EUkFJTkVEXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0VNSVRfREFUQSkgIT09IDApIHN0cmVhbS5lbWl0KCdkYXRhJywgZGF0YSlcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZEFoZWFkID09PSBmYWxzZSkge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1JFQURfQUhFQURcbiAgICAgIHRoaXMudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBkcmFpbiAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIHdoaWxlICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfU1RBVFVTKSA9PT0gUkVBRF9RVUVVRUQgJiYgKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0ZMT1dJTkcpICE9PSAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5zaGlmdCgpXG4gICAgICBpZiAodGhpcy5waXBlVG8gIT09IG51bGwgJiYgdGhpcy5waXBlVG8ud3JpdGUoZGF0YSkgPT09IGZhbHNlKSBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfUElQRV9OT1RfRFJBSU5FRFxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9FTUlUX0RBVEEpICE9PSAwKSBzdHJlYW0uZW1pdCgnZGF0YScsIGRhdGEpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1VQREFUSU5HXG5cbiAgICBkbyB7XG4gICAgICB0aGlzLmRyYWluKClcblxuICAgICAgd2hpbGUgKHRoaXMuYnVmZmVyZWQgPCB0aGlzLmhpZ2hXYXRlck1hcmsgJiYgKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBTSE9VTERfTk9UX1JFQUQpID09PSBSRUFEX1JFQURfQUhFQUQpIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX0FDVElWRV9BTkRfTkVFRFNfUFVTSFxuICAgICAgICBzdHJlYW0uX3JlYWQodGhpcy5hZnRlclJlYWQpXG4gICAgICAgIHRoaXMuZHJhaW4oKVxuICAgICAgfVxuXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFQURBQkxFX1NUQVRVUykgPT09IFJFQURfRU1JVF9SRUFEQUJMRV9BTkRfUVVFVUVEKSB7XG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gUkVBRF9FTUlUVEVEX1JFQURBQkxFXG4gICAgICAgIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpXG4gICAgICB9XG5cbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfUFJJTUFSWV9BTkRfQUNUSVZFKSA9PT0gMCkgdGhpcy51cGRhdGVOb25QcmltYXJ5KClcbiAgICB9IHdoaWxlICh0aGlzLmNvbnRpbnVlVXBkYXRlKCkgPT09IHRydWUpXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX1VQREFUSU5HXG4gIH1cblxuICB1cGRhdGVOb25QcmltYXJ5ICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9FTkRJTkdfU1RBVFVTKSA9PT0gUkVBRF9FTkRJTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFJFQURfRE9ORSkgJiBSRUFEX05PVF9FTkRJTkdcbiAgICAgIHN0cmVhbS5lbWl0KCdlbmQnKVxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgQVVUT19ERVNUUk9ZKSA9PT0gRE9ORSkgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBERVNUUk9ZSU5HXG4gICAgICBpZiAodGhpcy5waXBlVG8gIT09IG51bGwpIHRoaXMucGlwZVRvLmVuZCgpXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSBERVNUUk9ZSU5HKSB7XG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBQ1RJVkVfT1JfVElDS0lORykgPT09IDApIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBBQ1RJVkVcbiAgICAgICAgc3RyZWFtLl9kZXN0cm95KGFmdGVyRGVzdHJveS5iaW5kKHRoaXMpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgSVNfT1BFTklORykgPT09IE9QRU5JTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IEFDVElWRSkgJiBOT1RfT1BFTklOR1xuICAgICAgc3RyZWFtLl9vcGVuKGFmdGVyT3Blbi5iaW5kKHRoaXMpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnRpbnVlVXBkYXRlICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfTkVYVF9USUNLKSA9PT0gMCkgcmV0dXJuIGZhbHNlXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX05FWFRfVElDS1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1cGRhdGVDYWxsYmFjayAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1VQREFURV9TWU5DX1NUQVRVUykgPT09IFJFQURfUFJJTUFSWSkgdGhpcy51cGRhdGUoKVxuICAgIGVsc2UgdGhpcy51cGRhdGVOZXh0VGljaygpXG4gIH1cblxuICB1cGRhdGVOZXh0VGljayAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX05FWFRfVElDSykgIT09IDApIHJldHVyblxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX05FWFRfVElDS1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9VUERBVElORykgPT09IDApIHF1ZXVlVGljayh0aGlzLmFmdGVyVXBkYXRlTmV4dFRpY2spXG4gIH1cbn1cblxuY2xhc3MgVHJhbnNmb3JtU3RhdGUge1xuICBjb25zdHJ1Y3RvciAoc3RyZWFtKSB7XG4gICAgdGhpcy5kYXRhID0gbnVsbFxuICAgIHRoaXMuYWZ0ZXJUcmFuc2Zvcm0gPSBhZnRlclRyYW5zZm9ybS5iaW5kKHN0cmVhbSlcbiAgICB0aGlzLmFmdGVyRmluYWwgPSBudWxsXG4gIH1cbn1cblxuY2xhc3MgUGlwZWxpbmUge1xuICBjb25zdHJ1Y3RvciAoc3JjLCBkc3QsIGNiKSB7XG4gICAgdGhpcy5mcm9tID0gc3JjXG4gICAgdGhpcy50byA9IGRzdFxuICAgIHRoaXMuYWZ0ZXJQaXBlID0gY2JcbiAgICB0aGlzLmVycm9yID0gbnVsbFxuICAgIHRoaXMucGlwZVRvRmluaXNoZWQgPSBmYWxzZVxuICB9XG5cbiAgZmluaXNoZWQgKCkge1xuICAgIHRoaXMucGlwZVRvRmluaXNoZWQgPSB0cnVlXG4gIH1cblxuICBkb25lIChzdHJlYW0sIGVycikge1xuICAgIGlmIChlcnIpIHRoaXMuZXJyb3IgPSBlcnJcblxuICAgIGlmIChzdHJlYW0gPT09IHRoaXMudG8pIHtcbiAgICAgIHRoaXMudG8gPSBudWxsXG5cbiAgICAgIGlmICh0aGlzLmZyb20gIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCh0aGlzLmZyb20uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSA9PT0gMCB8fCAhdGhpcy5waXBlVG9GaW5pc2hlZCkge1xuICAgICAgICAgIHRoaXMuZnJvbS5kZXN0cm95KHRoaXMuZXJyb3IgfHwgbmV3IEVycm9yKCdXcml0YWJsZSBzdHJlYW0gY2xvc2VkIHByZW1hdHVyZWx5JykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbSA9PT0gdGhpcy5mcm9tKSB7XG4gICAgICB0aGlzLmZyb20gPSBudWxsXG5cbiAgICAgIGlmICh0aGlzLnRvICE9PSBudWxsKSB7XG4gICAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRE9ORSkgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnRvLmRlc3Ryb3kodGhpcy5lcnJvciB8fCBuZXcgRXJyb3IoJ1JlYWRhYmxlIHN0cmVhbSBjbG9zZWQgYmVmb3JlIGVuZGluZycpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFmdGVyUGlwZSAhPT0gbnVsbCkgdGhpcy5hZnRlclBpcGUodGhpcy5lcnJvcilcbiAgICB0aGlzLnRvID0gdGhpcy5mcm9tID0gdGhpcy5hZnRlclBpcGUgPSBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJEcmFpbiAoKSB7XG4gIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1BJUEVfRFJBSU5FRFxuICB0aGlzLnVwZGF0ZUNhbGxiYWNrKClcbn1cblxuZnVuY3Rpb24gYWZ0ZXJGaW5hbCAoZXJyKSB7XG4gIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG4gIGlmIChlcnIpIHN0cmVhbS5kZXN0cm95KGVycilcbiAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSAwKSB7XG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9ET05FXG4gICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpXG4gIH1cbiAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgQVVUT19ERVNUUk9ZKSA9PT0gRE9ORSkge1xuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gREVTVFJPWUlOR1xuICB9XG5cbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQUNUSVZFXG5cbiAgLy8gbm8gbmVlZCB0byB3YWl0IHRoZSBleHRyYSB0aWNrIGhlcmUsIHNvIHdlIHNob3J0IGNpcmN1aXQgdGhhdFxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9VUERBVElORykgPT09IDApIHRoaXMudXBkYXRlKClcbiAgZWxzZSB0aGlzLnVwZGF0ZU5leHRUaWNrKClcbn1cblxuZnVuY3Rpb24gYWZ0ZXJEZXN0cm95IChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICBpZiAoIWVyciAmJiB0aGlzLmVycm9yICE9PSBTVFJFQU1fREVTVFJPWUVEKSBlcnIgPSB0aGlzLmVycm9yXG4gIGlmIChlcnIpIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycilcbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBERVNUUk9ZRURcbiAgc3RyZWFtLmVtaXQoJ2Nsb3NlJylcblxuICBjb25zdCBycyA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3cyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuXG4gIGlmIChycyAhPT0gbnVsbCAmJiBycy5waXBlbGluZSAhPT0gbnVsbCkgcnMucGlwZWxpbmUuZG9uZShzdHJlYW0sIGVycilcblxuICBpZiAod3MgIT09IG51bGwpIHtcbiAgICB3aGlsZSAod3MuZHJhaW5zICE9PSBudWxsICYmIHdzLmRyYWlucy5sZW5ndGggPiAwKSB3cy5kcmFpbnMuc2hpZnQoKS5yZXNvbHZlKGZhbHNlKVxuICAgIGlmICh3cy5waXBlbGluZSAhPT0gbnVsbCkgd3MucGlwZWxpbmUuZG9uZShzdHJlYW0sIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlIChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICBpZiAoZXJyKSBzdHJlYW0uZGVzdHJveShlcnIpXG4gIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX0FDVElWRVxuXG4gIGlmICh0aGlzLmRyYWlucyAhPT0gbnVsbCkgdGlja0RyYWlucyh0aGlzLmRyYWlucylcblxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9EUkFJTl9TVEFUVVMpID09PSBXUklURV9VTkRSQUlORUQpIHtcbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX0RSQUlORURcbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9FTUlUX0RSQUlOKSA9PT0gV1JJVEVfRU1JVF9EUkFJTikge1xuICAgICAgc3RyZWFtLmVtaXQoJ2RyYWluJylcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZUNhbGxiYWNrKClcbn1cblxuZnVuY3Rpb24gYWZ0ZXJSZWFkIChlcnIpIHtcbiAgaWYgKGVycikgdGhpcy5zdHJlYW0uZGVzdHJveShlcnIpXG4gIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PVF9BQ1RJVkVcbiAgaWYgKHRoaXMucmVhZEFoZWFkID09PSBmYWxzZSAmJiAodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9SRVNVTUVEKSA9PT0gMCkgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9fUkVBRF9BSEVBRFxuICB0aGlzLnVwZGF0ZUNhbGxiYWNrKClcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVhZE5UICgpIHtcbiAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1VQREFUSU5HKSA9PT0gMCkge1xuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PVF9ORVhUX1RJQ0tcbiAgICB0aGlzLnVwZGF0ZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlV3JpdGVOVCAoKSB7XG4gIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfVVBEQVRJTkcpID09PSAwKSB7XG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9ORVhUX1RJQ0tcbiAgICB0aGlzLnVwZGF0ZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gdGlja0RyYWlucyAoZHJhaW5zKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZHJhaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gZHJhaW5zLndyaXRlcyBhcmUgbW9ub3RvbmljLCBzbyBpZiBvbmUgaXMgMCBpdHMgYWx3YXlzIHRoZSBmaXJzdCBvbmVcbiAgICBpZiAoLS1kcmFpbnNbaV0ud3JpdGVzID09PSAwKSB7XG4gICAgICBkcmFpbnMuc2hpZnQoKS5yZXNvbHZlKHRydWUpXG4gICAgICBpLS1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJPcGVuIChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICBpZiAoZXJyKSBzdHJlYW0uZGVzdHJveShlcnIpXG5cbiAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWUlORykgPT09IDApIHtcbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1BSSU1BUllfU1RBVFVTKSA9PT0gMCkgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1BSSU1BUllcbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9QUklNQVJZX1NUQVRVUykgPT09IDApIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfUFJJTUFSWVxuICAgIHN0cmVhbS5lbWl0KCdvcGVuJylcbiAgfVxuXG4gIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gTk9UX0FDVElWRVxuXG4gIGlmIChzdHJlYW0uX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUudXBkYXRlQ2FsbGJhY2soKVxuICB9XG5cbiAgaWYgKHN0cmVhbS5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS51cGRhdGVDYWxsYmFjaygpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJUcmFuc2Zvcm0gKGVyciwgZGF0YSkge1xuICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IG51bGwpIHRoaXMucHVzaChkYXRhKVxuICB0aGlzLl93cml0YWJsZVN0YXRlLmFmdGVyV3JpdGUoZXJyKVxufVxuXG5mdW5jdGlvbiBuZXdMaXN0ZW5lciAobmFtZSkge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuYW1lID09PSAnZGF0YScpIHtcbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IChSRUFEX0VNSVRfREFUQSB8IFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEKVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICAgIGlmIChuYW1lID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX0VNSVRfUkVBREFCTEVcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5hbWUgPT09ICdkcmFpbicpIHtcbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFdSSVRFX0VNSVRfRFJBSU5cbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBTdHJlYW0gZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2R1cGxleFN0YXRlID0gMFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBudWxsXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG51bGxcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAob3B0cy5vcGVuKSB0aGlzLl9vcGVuID0gb3B0cy5vcGVuXG4gICAgICBpZiAob3B0cy5kZXN0cm95KSB0aGlzLl9kZXN0cm95ID0gb3B0cy5kZXN0cm95XG4gICAgICBpZiAob3B0cy5wcmVkZXN0cm95KSB0aGlzLl9wcmVkZXN0cm95ID0gb3B0cy5wcmVkZXN0cm95XG4gICAgICBpZiAob3B0cy5zaWduYWwpIHtcbiAgICAgICAgb3B0cy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydC5iaW5kKHRoaXMpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgbmV3TGlzdGVuZXIpXG4gIH1cblxuICBfb3BlbiAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIF9wcmVkZXN0cm95ICgpIHtcbiAgICAvLyBkb2VzIG5vdGhpbmdcbiAgfVxuXG4gIGdldCByZWFkYWJsZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgIT09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkXG4gIH1cblxuICBnZXQgd3JpdGFibGUgKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlICE9PSBudWxsID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLl9kdXBsZXhTdGF0ZSAmIERFU1RST1lFRCkgIT09IDBcbiAgfVxuXG4gIGdldCBkZXN0cm95aW5nICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpICE9PSAwXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBpZiAoKHRoaXMuX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSAwKSB7XG4gICAgICBpZiAoIWVycikgZXJyID0gU1RSRUFNX0RFU1RST1lFRFxuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgPSAodGhpcy5fZHVwbGV4U3RhdGUgfCBERVNUUk9ZSU5HKSAmIE5PTl9QUklNQVJZXG5cbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyayA9IDBcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvciA9IGVyclxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrID0gMFxuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yID0gZXJyXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFBSRURFU1RST1lJTkdcbiAgICAgIHRoaXMuX3ByZWRlc3Ryb3koKVxuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgJj0gTk9UX1BSRURFU1RST1lJTkdcblxuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgIT09IG51bGwpIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBSZWFkYWJsZSBleHRlbmRzIFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IE9QRU5JTkcgfCBXUklURV9ET05FIHwgUkVBRF9SRUFEX0FIRUFEXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKHRoaXMsIG9wdHMpXG5cbiAgICBpZiAob3B0cykge1xuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZEFoZWFkID09PSBmYWxzZSkgdGhpcy5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT19SRUFEX0FIRUFEXG4gICAgICBpZiAob3B0cy5yZWFkKSB0aGlzLl9yZWFkID0gb3B0cy5yZWFkXG4gICAgICBpZiAob3B0cy5lYWdlck9wZW4pIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgICAgaWYgKG9wdHMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2Rpbmcob3B0cy5lbmNvZGluZylcbiAgICB9XG4gIH1cblxuICBzZXRFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgICBjb25zdCBkZWMgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpXG4gICAgY29uc3QgbWFwID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5tYXAgfHwgZWNob1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUubWFwID0gbWFwT3JTa2lwXG4gICAgcmV0dXJuIHRoaXNcblxuICAgIGZ1bmN0aW9uIG1hcE9yU2tpcCAoZGF0YSkge1xuICAgICAgY29uc3QgbmV4dCA9IGRlYy5wdXNoKGRhdGEpXG4gICAgICByZXR1cm4gbmV4dCA9PT0gJycgJiYgKGRhdGEuYnl0ZUxlbmd0aCAhPT0gMCB8fCBkZWMucmVtYWluaW5nID4gMCkgPyBudWxsIDogbWFwKG5leHQpXG4gICAgfVxuICB9XG5cbiAgX3JlYWQgKGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIHBpcGUgKGRlc3QsIGNiKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5waXBlKGRlc3QsIGNiKVxuICAgIHJldHVybiBkZXN0XG4gIH1cblxuICByZWFkICgpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkKClcbiAgfVxuXG4gIHB1c2ggKGRhdGEpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5wdXNoKGRhdGEpXG4gIH1cblxuICB1bnNoaWZ0IChkYXRhKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUudW5zaGlmdChkYXRhKVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1JFU1VNRURfUkVBRF9BSEVBRFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwYXVzZSAoKSB7XG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgJj0gKHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZEFoZWFkID09PSBmYWxzZSA/IFJFQURfUEFVU0VEX05PX1JFQURfQUhFQUQgOiBSRUFEX1BBVVNFRClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhdGljIF9mcm9tQXN5bmNJdGVyYXRvciAoaXRlLCBvcHRzKSB7XG4gICAgbGV0IGRlc3Ryb3lcblxuICAgIGNvbnN0IHJzID0gbmV3IFJlYWRhYmxlKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZWFkIChjYikge1xuICAgICAgICBpdGUubmV4dCgpLnRoZW4ocHVzaCkudGhlbihjYi5iaW5kKG51bGwsIG51bGwpKS5jYXRjaChjYilcbiAgICAgIH0sXG4gICAgICBwcmVkZXN0cm95ICgpIHtcbiAgICAgICAgZGVzdHJveSA9IGl0ZS5yZXR1cm4oKVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3kgKGNiKSB7XG4gICAgICAgIGlmICghZGVzdHJveSkgcmV0dXJuIGNiKG51bGwpXG4gICAgICAgIGRlc3Ryb3kudGhlbihjYi5iaW5kKG51bGwsIG51bGwpKS5jYXRjaChjYilcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHJzXG5cbiAgICBmdW5jdGlvbiBwdXNoIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5kb25lKSBycy5wdXNoKG51bGwpXG4gICAgICBlbHNlIHJzLnB1c2goZGF0YS52YWx1ZSlcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbSAoZGF0YSwgb3B0cykge1xuICAgIGlmIChpc1JlYWRTdHJlYW14KGRhdGEpKSByZXR1cm4gZGF0YVxuICAgIGlmIChkYXRhW2FzeW5jSXRlcmF0b3JdKSByZXR1cm4gdGhpcy5fZnJvbUFzeW5jSXRlcmF0b3IoZGF0YVthc3luY0l0ZXJhdG9yXSgpLCBvcHRzKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkgZGF0YSA9IGRhdGEgPT09IHVuZGVmaW5lZCA/IFtdIDogW2RhdGFdXG5cbiAgICBsZXQgaSA9IDBcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZWFkIChjYikge1xuICAgICAgICB0aGlzLnB1c2goaSA9PT0gZGF0YS5sZW5ndGggPyBudWxsIDogZGF0YVtpKytdKVxuICAgICAgICBjYihudWxsKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgaXNCYWNrcHJlc3N1cmVkIChycykge1xuICAgIHJldHVybiAocnMuX2R1cGxleFN0YXRlICYgUkVBRF9CQUNLUFJFU1NVUkVfU1RBVFVTKSAhPT0gMCB8fCBycy5fcmVhZGFibGVTdGF0ZS5idWZmZXJlZCA+PSBycy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICBzdGF0aWMgaXNQYXVzZWQgKHJzKSB7XG4gICAgcmV0dXJuIChycy5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFU1VNRUQpID09PSAwXG4gIH1cblxuICBbYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXNcblxuICAgIGxldCBlcnJvciA9IG51bGxcbiAgICBsZXQgcHJvbWlzZVJlc29sdmUgPSBudWxsXG4gICAgbGV0IHByb21pc2VSZWplY3QgPSBudWxsXG5cbiAgICB0aGlzLm9uKCdlcnJvcicsIChlcnIpID0+IHsgZXJyb3IgPSBlcnIgfSlcbiAgICB0aGlzLm9uKCdyZWFkYWJsZScsIG9ucmVhZGFibGUpXG4gICAgdGhpcy5vbignY2xvc2UnLCBvbmNsb3NlKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFthc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9LFxuICAgICAgbmV4dCAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgcHJvbWlzZVJlc29sdmUgPSByZXNvbHZlXG4gICAgICAgICAgcHJvbWlzZVJlamVjdCA9IHJlamVjdFxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBzdHJlYW0ucmVhZCgpXG4gICAgICAgICAgaWYgKGRhdGEgIT09IG51bGwpIG9uZGF0YShkYXRhKVxuICAgICAgICAgIGVsc2UgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWUVEKSAhPT0gMCkgb25kYXRhKG51bGwpXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgcmV0dXJuICgpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Ryb3kobnVsbClcbiAgICAgIH0sXG4gICAgICB0aHJvdyAoZXJyKSB7XG4gICAgICAgIHJldHVybiBkZXN0cm95KGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbnJlYWRhYmxlICgpIHtcbiAgICAgIGlmIChwcm9taXNlUmVzb2x2ZSAhPT0gbnVsbCkgb25kYXRhKHN0cmVhbS5yZWFkKCkpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25jbG9zZSAoKSB7XG4gICAgICBpZiAocHJvbWlzZVJlc29sdmUgIT09IG51bGwpIG9uZGF0YShudWxsKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uZGF0YSAoZGF0YSkge1xuICAgICAgaWYgKHByb21pc2VSZWplY3QgPT09IG51bGwpIHJldHVyblxuICAgICAgaWYgKGVycm9yKSBwcm9taXNlUmVqZWN0KGVycm9yKVxuICAgICAgZWxzZSBpZiAoZGF0YSA9PT0gbnVsbCAmJiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRE9ORSkgPT09IDApIHByb21pc2VSZWplY3QoU1RSRUFNX0RFU1RST1lFRClcbiAgICAgIGVsc2UgcHJvbWlzZVJlc29sdmUoeyB2YWx1ZTogZGF0YSwgZG9uZTogZGF0YSA9PT0gbnVsbCB9KVxuICAgICAgcHJvbWlzZVJlamVjdCA9IHByb21pc2VSZXNvbHZlID0gbnVsbFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3kgKGVycikge1xuICAgICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZRUQpIHJldHVybiByZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGVycikgcmVqZWN0KGVycilcbiAgICAgICAgICBlbHNlIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBXcml0YWJsZSBleHRlbmRzIFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IE9QRU5JTkcgfCBSRUFEX0RPTkVcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUodGhpcywgb3B0cylcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAob3B0cy53cml0ZXYpIHRoaXMuX3dyaXRldiA9IG9wdHMud3JpdGV2XG4gICAgICBpZiAob3B0cy53cml0ZSkgdGhpcy5fd3JpdGUgPSBvcHRzLndyaXRlXG4gICAgICBpZiAob3B0cy5maW5hbCkgdGhpcy5fZmluYWwgPSBvcHRzLmZpbmFsXG4gICAgICBpZiAob3B0cy5lYWdlck9wZW4pIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxuXG4gIGNvcmsgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFdSSVRFX0NPUktFRFxuICB9XG5cbiAgdW5jb3JrICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQ09SS0VEXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gIH1cblxuICBfd3JpdGV2IChiYXRjaCwgY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuYXV0b0JhdGNoKGRhdGEsIGNiKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBzdGF0aWMgaXNCYWNrcHJlc3N1cmVkICh3cykge1xuICAgIHJldHVybiAod3MuX2R1cGxleFN0YXRlICYgV1JJVEVfQkFDS1BSRVNTVVJFX1NUQVRVUykgIT09IDBcbiAgfVxuXG4gIHN0YXRpYyBkcmFpbmVkICh3cykge1xuICAgIGlmICh3cy5kZXN0cm95ZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpXG4gICAgY29uc3Qgc3RhdGUgPSB3cy5fd3JpdGFibGVTdGF0ZVxuICAgIGNvbnN0IHBlbmRpbmcgPSAoaXNXcml0ZXYod3MpID8gTWF0aC5taW4oMSwgc3RhdGUucXVldWUubGVuZ3RoKSA6IHN0YXRlLnF1ZXVlLmxlbmd0aClcbiAgICBjb25zdCB3cml0ZXMgPSBwZW5kaW5nICsgKCh3cy5fZHVwbGV4U3RhdGUgJiBXUklURV9XUklUSU5HKSA/IDEgOiAwKVxuICAgIGlmICh3cml0ZXMgPT09IDApIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSlcbiAgICBpZiAoc3RhdGUuZHJhaW5zID09PSBudWxsKSBzdGF0ZS5kcmFpbnMgPSBbXVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgc3RhdGUuZHJhaW5zLnB1c2goeyB3cml0ZXMsIHJlc29sdmUgfSlcbiAgICB9KVxuICB9XG5cbiAgd3JpdGUgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5wdXNoKGRhdGEpXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZChkYXRhKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuY2xhc3MgRHVwbGV4IGV4dGVuZHMgUmVhZGFibGUgeyAvLyBhbmQgV3JpdGFibGVcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgPSBPUEVOSU5HIHwgKHRoaXMuX2R1cGxleFN0YXRlICYgUkVBRF9SRUFEX0FIRUFEKVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZSh0aGlzLCBvcHRzKVxuXG4gICAgaWYgKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLndyaXRldikgdGhpcy5fd3JpdGV2ID0gb3B0cy53cml0ZXZcbiAgICAgIGlmIChvcHRzLndyaXRlKSB0aGlzLl93cml0ZSA9IG9wdHMud3JpdGVcbiAgICAgIGlmIChvcHRzLmZpbmFsKSB0aGlzLl9maW5hbCA9IG9wdHMuZmluYWxcbiAgICB9XG4gIH1cblxuICBjb3JrICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9DT1JLRURcbiAgfVxuXG4gIHVuY29yayAoKSB7XG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX0NPUktFRFxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICB9XG5cbiAgX3dyaXRldiAoYmF0Y2gsIGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIF93cml0ZSAoZGF0YSwgY2IpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmF1dG9CYXRjaChkYXRhLCBjYilcbiAgfVxuXG4gIF9maW5hbCAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgd3JpdGUgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5wdXNoKGRhdGEpXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZChkYXRhKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuY2xhc3MgVHJhbnNmb3JtIGV4dGVuZHMgRHVwbGV4IHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0gbmV3IFRyYW5zZm9ybVN0YXRlKHRoaXMpXG5cbiAgICBpZiAob3B0cykge1xuICAgICAgaWYgKG9wdHMudHJhbnNmb3JtKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRzLnRyYW5zZm9ybVxuICAgICAgaWYgKG9wdHMuZmx1c2gpIHRoaXMuX2ZsdXNoID0gb3B0cy5mbHVzaFxuICAgIH1cbiAgfVxuXG4gIF93cml0ZSAoZGF0YSwgY2IpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJlZCA+PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgPSBkYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybShkYXRhLCB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5hZnRlclRyYW5zZm9ybSlcbiAgICB9XG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICBpZiAodGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGFcbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgPSBudWxsXG4gICAgICBjYihudWxsKVxuICAgICAgdGhpcy5fdHJhbnNmb3JtKGRhdGEsIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyVHJhbnNmb3JtKVxuICAgIH0gZWxzZSB7XG4gICAgICBjYihudWxsKVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIHN1cGVyLmRlc3Ryb3koZXJyKVxuICAgIGlmICh0aGlzLl90cmFuc2Zvcm1TdGF0ZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5kYXRhID0gbnVsbFxuICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuYWZ0ZXJUcmFuc2Zvcm0oKVxuICAgIH1cbiAgfVxuXG4gIF90cmFuc2Zvcm0gKGRhdGEsIGNiKSB7XG4gICAgY2IobnVsbCwgZGF0YSlcbiAgfVxuXG4gIF9mbHVzaCAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyRmluYWwgPSBjYlxuICAgIHRoaXMuX2ZsdXNoKHRyYW5zZm9ybUFmdGVyRmx1c2guYmluZCh0aGlzKSlcbiAgfVxufVxuXG5jbGFzcyBQYXNzVGhyb3VnaCBleHRlbmRzIFRyYW5zZm9ybSB7fVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1BZnRlckZsdXNoIChlcnIsIGRhdGEpIHtcbiAgY29uc3QgY2IgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5hZnRlckZpbmFsXG4gIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkgdGhpcy5wdXNoKGRhdGEpXG4gIHRoaXMucHVzaChudWxsKVxuICBjYihudWxsKVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZVByb21pc2UgKC4uLnN0cmVhbXMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXR1cm4gcGlwZWxpbmUoLi4uc3RyZWFtcywgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKClcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAoc3RyZWFtLCAuLi5zdHJlYW1zKSB7XG4gIGNvbnN0IGFsbCA9IEFycmF5LmlzQXJyYXkoc3RyZWFtKSA/IFsuLi5zdHJlYW0sIC4uLnN0cmVhbXNdIDogW3N0cmVhbSwgLi4uc3RyZWFtc11cbiAgY29uc3QgZG9uZSA9IChhbGwubGVuZ3RoICYmIHR5cGVvZiBhbGxbYWxsLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSA/IGFsbC5wb3AoKSA6IG51bGxcblxuICBpZiAoYWxsLmxlbmd0aCA8IDIpIHRocm93IG5ldyBFcnJvcignUGlwZWxpbmUgcmVxdWlyZXMgYXQgbGVhc3QgMiBzdHJlYW1zJylcblxuICBsZXQgc3JjID0gYWxsWzBdXG4gIGxldCBkZXN0ID0gbnVsbFxuICBsZXQgZXJyb3IgPSBudWxsXG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBhbGwubGVuZ3RoOyBpKyspIHtcbiAgICBkZXN0ID0gYWxsW2ldXG5cbiAgICBpZiAoaXNTdHJlYW14KHNyYykpIHtcbiAgICAgIHNyYy5waXBlKGRlc3QsIG9uZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9ySGFuZGxlKHNyYywgdHJ1ZSwgaSA+IDEsIG9uZXJyb3IpXG4gICAgICBzcmMucGlwZShkZXN0KVxuICAgIH1cblxuICAgIHNyYyA9IGRlc3RcbiAgfVxuXG4gIGlmIChkb25lKSB7XG4gICAgbGV0IGZpbiA9IGZhbHNlXG5cbiAgICBjb25zdCBhdXRvRGVzdHJveSA9IGlzU3RyZWFteChkZXN0KSB8fCAhIShkZXN0Ll93cml0YWJsZVN0YXRlICYmIGRlc3QuX3dyaXRhYmxlU3RhdGUuYXV0b0Rlc3Ryb3kpXG5cbiAgICBkZXN0Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkgZXJyb3IgPSBlcnJcbiAgICB9KVxuXG4gICAgZGVzdC5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgZmluID0gdHJ1ZVxuICAgICAgaWYgKCFhdXRvRGVzdHJveSkgZG9uZShlcnJvcilcbiAgICB9KVxuXG4gICAgaWYgKGF1dG9EZXN0cm95KSB7XG4gICAgICBkZXN0Lm9uKCdjbG9zZScsICgpID0+IGRvbmUoZXJyb3IgfHwgKGZpbiA/IG51bGwgOiBQUkVNQVRVUkVfQ0xPU0UpKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVzdFxuXG4gIGZ1bmN0aW9uIGVycm9ySGFuZGxlIChzLCByZCwgd3IsIG9uZXJyb3IpIHtcbiAgICBzLm9uKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgcy5vbignY2xvc2UnLCBvbmNsb3NlKVxuXG4gICAgZnVuY3Rpb24gb25jbG9zZSAoKSB7XG4gICAgICBpZiAocmQgJiYgcy5fcmVhZGFibGVTdGF0ZSAmJiAhcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuIG9uZXJyb3IoUFJFTUFUVVJFX0NMT1NFKVxuICAgICAgaWYgKHdyICYmIHMuX3dyaXRhYmxlU3RhdGUgJiYgIXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQpIHJldHVybiBvbmVycm9yKFBSRU1BVFVSRV9DTE9TRSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbmVycm9yIChlcnIpIHtcbiAgICBpZiAoIWVyciB8fCBlcnJvcikgcmV0dXJuXG4gICAgZXJyb3IgPSBlcnJcblxuICAgIGZvciAoY29uc3QgcyBvZiBhbGwpIHtcbiAgICAgIHMuZGVzdHJveShlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVjaG8gKHMpIHtcbiAgcmV0dXJuIHNcbn1cblxuZnVuY3Rpb24gaXNTdHJlYW0gKHN0cmVhbSkge1xuICByZXR1cm4gISFzdHJlYW0uX3JlYWRhYmxlU3RhdGUgfHwgISFzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbn1cblxuZnVuY3Rpb24gaXNTdHJlYW14IChzdHJlYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiBzdHJlYW0uX2R1cGxleFN0YXRlID09PSAnbnVtYmVyJyAmJiBpc1N0cmVhbShzdHJlYW0pXG59XG5cbmZ1bmN0aW9uIGlzRW5kZWQgKHN0cmVhbSkge1xuICByZXR1cm4gISFzdHJlYW0uX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZGVkXG59XG5cbmZ1bmN0aW9uIGlzRmluaXNoZWQgKHN0cmVhbSkge1xuICByZXR1cm4gISFzdHJlYW0uX3dyaXRhYmxlU3RhdGUgJiYgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVuZGVkXG59XG5cbmZ1bmN0aW9uIGdldFN0cmVhbUVycm9yIChzdHJlYW0sIG9wdHMgPSB7fSkge1xuICBjb25zdCBlcnIgPSAoc3RyZWFtLl9yZWFkYWJsZVN0YXRlICYmIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lcnJvcikgfHwgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3IpXG5cbiAgLy8gYXZvaWQgaW1wbGljaXQgZXJyb3JzIGJ5IGRlZmF1bHRcbiAgcmV0dXJuICghb3B0cy5hbGwgJiYgZXJyID09PSBTVFJFQU1fREVTVFJPWUVEKSA/IG51bGwgOiBlcnJcbn1cblxuZnVuY3Rpb24gaXNSZWFkU3RyZWFteCAoc3RyZWFtKSB7XG4gIHJldHVybiBpc1N0cmVhbXgoc3RyZWFtKSAmJiBzdHJlYW0ucmVhZGFibGVcbn1cblxuZnVuY3Rpb24gaXNUeXBlZEFycmF5IChkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YS5ieXRlTGVuZ3RoID09PSAnbnVtYmVyJ1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Qnl0ZUxlbmd0aCAoZGF0YSkge1xuICByZXR1cm4gaXNUeXBlZEFycmF5KGRhdGEpID8gZGF0YS5ieXRlTGVuZ3RoIDogMTAyNFxufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIGFib3J0ICgpIHtcbiAgdGhpcy5kZXN0cm95KG5ldyBFcnJvcignU3RyZWFtIGFib3J0ZWQuJykpXG59XG5cbmZ1bmN0aW9uIGlzV3JpdGV2IChzKSB7XG4gIHJldHVybiBzLl93cml0ZXYgIT09IFdyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ICYmIHMuX3dyaXRldiAhPT0gRHVwbGV4LnByb3RvdHlwZS5fd3JpdGV2XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwaXBlbGluZSxcbiAgcGlwZWxpbmVQcm9taXNlLFxuICBpc1N0cmVhbSxcbiAgaXNTdHJlYW14LFxuICBpc0VuZGVkLFxuICBpc0ZpbmlzaGVkLFxuICBnZXRTdHJlYW1FcnJvcixcbiAgU3RyZWFtLFxuICBXcml0YWJsZSxcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgVHJhbnNmb3JtLFxuICAvLyBFeHBvcnQgUGFzc1Rocm91Z2ggZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBOb2RlLmpzIGNvcmUncyBzdHJlYW0gbW9kdWxlXG4gIFBhc3NUaHJvdWdoXG59XG4iLAogICAgImZ1bmN0aW9uIGlzQnVmZmVyICh2YWx1ZSkge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbn1cblxuZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZVNsb3cgKHNpemUpIHtcbiAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3coc2l6ZSlcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyLmJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUoYSwgYilcbn1cblxuZnVuY3Rpb24gY29uY2F0IChidWZmZXJzLCB0b3RhbExlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzLCB0b3RhbExlbmd0aClcbn1cblxuZnVuY3Rpb24gY29weSAoc291cmNlLCB0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiB0b0J1ZmZlcihzb3VyY2UpLmNvcHkodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbn1cblxuZnVuY3Rpb24gZXF1YWxzIChhLCBiKSB7XG4gIHJldHVybiB0b0J1ZmZlcihhKS5lcXVhbHMoYilcbn1cblxuZnVuY3Rpb24gZmlsbCAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLmZpbGwodmFsdWUsIG9mZnNldCwgZW5kLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMgKGJ1ZmZlciwgdmFsdWUsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLmluY2x1ZGVzKHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gaW5kZXhPZiAoYnVmZmVyLCB2YWx1ZSwgYnlmZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuaW5kZXhPZih2YWx1ZSwgYnlmZU9mZnNldCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGxhc3RJbmRleE9mIChidWZmZXIsIHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5sYXN0SW5kZXhPZih2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIHN3YXAxNiAoYnVmZmVyKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnN3YXAxNigpXG59XG5cbmZ1bmN0aW9uIHN3YXAzMiAoYnVmZmVyKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnN3YXAzMigpXG59XG5cbmZ1bmN0aW9uIHN3YXA2NCAoYnVmZmVyKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnN3YXA2NCgpXG59XG5cbmZ1bmN0aW9uIHRvQnVmZmVyIChidWZmZXIpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpKSByZXR1cm4gYnVmZmVyXG4gIHJldHVybiBCdWZmZXIuZnJvbShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nIChidWZmZXIsIGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnRvU3RyaW5nKGVuY29kaW5nLCBzdGFydCwgZW5kKVxufVxuXG5mdW5jdGlvbiB3cml0ZSAoYnVmZmVyLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlRG91YmxlTEUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdExFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVGbG9hdExFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZVVJbnQzMkxFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzJMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlSW50MzJMRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkRG91YmxlTEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWREb3VibGVMRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRGbG9hdExFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkRmxvYXRMRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRVSW50MzJMRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZFVJbnQzMkxFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEludDMyTEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRJbnQzMkxFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlRG91YmxlQkUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdEJFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVGbG9hdEJFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZVVJbnQzMkJFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzJCRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlSW50MzJCRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkRG91YmxlQkUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWREb3VibGVCRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRGbG9hdEJFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkRmxvYXRCRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRVSW50MzJCRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZFVJbnQzMkJFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEludDMyQkUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRJbnQzMkJFKG9mZnNldClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQnVmZmVyLFxuICBpc0VuY29kaW5nLFxuICBhbGxvYyxcbiAgYWxsb2NVbnNhZmUsXG4gIGFsbG9jVW5zYWZlU2xvdyxcbiAgYnl0ZUxlbmd0aCxcbiAgY29tcGFyZSxcbiAgY29uY2F0LFxuICBjb3B5LFxuICBlcXVhbHMsXG4gIGZpbGwsXG4gIGZyb20sXG4gIGluY2x1ZGVzLFxuICBpbmRleE9mLFxuICBsYXN0SW5kZXhPZixcbiAgc3dhcDE2LFxuICBzd2FwMzIsXG4gIHN3YXA2NCxcbiAgdG9CdWZmZXIsXG4gIHRvU3RyaW5nLFxuICB3cml0ZSxcbiAgd3JpdGVEb3VibGVMRSxcbiAgd3JpdGVGbG9hdExFLFxuICB3cml0ZVVJbnQzMkxFLFxuICB3cml0ZUludDMyTEUsXG4gIHJlYWREb3VibGVMRSxcbiAgcmVhZEZsb2F0TEUsXG4gIHJlYWRVSW50MzJMRSxcbiAgcmVhZEludDMyTEUsXG4gIHdyaXRlRG91YmxlQkUsXG4gIHdyaXRlRmxvYXRCRSxcbiAgd3JpdGVVSW50MzJCRSxcbiAgd3JpdGVJbnQzMkJFLFxuICByZWFkRG91YmxlQkUsXG4gIHJlYWRGbG9hdEJFLFxuICByZWFkVUludDMyQkUsXG4gIHJlYWRJbnQzMkJFXG5cbn1cbiIsCiAgICAiY29uc3QgYjRhID0gcmVxdWlyZSgnYjRhJylcblxuY29uc3QgWkVST1MgPSAnMDAwMDAwMDAwMDAwMDAwMDAwMCdcbmNvbnN0IFNFVkVOUyA9ICc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3J1xuY29uc3QgWkVST19PRkZTRVQgPSAnMCcuY2hhckNvZGVBdCgwKVxuY29uc3QgVVNUQVJfTUFHSUMgPSBiNGEuZnJvbShbMHg3NSwgMHg3MywgMHg3NCwgMHg2MSwgMHg3MiwgMHgwMF0pIC8vIHVzdGFyXFx4MDBcbmNvbnN0IFVTVEFSX1ZFUiA9IGI0YS5mcm9tKFtaRVJPX09GRlNFVCwgWkVST19PRkZTRVRdKVxuY29uc3QgR05VX01BR0lDID0gYjRhLmZyb20oWzB4NzUsIDB4NzMsIDB4NzQsIDB4NjEsIDB4NzIsIDB4MjBdKSAvLyB1c3RhclxceDIwXG5jb25zdCBHTlVfVkVSID0gYjRhLmZyb20oWzB4MjAsIDB4MDBdKVxuY29uc3QgTUFTSyA9IDBvNzc3N1xuY29uc3QgTUFHSUNfT0ZGU0VUID0gMjU3XG5jb25zdCBWRVJTSU9OX09GRlNFVCA9IDI2M1xuXG5leHBvcnRzLmRlY29kZUxvbmdQYXRoID0gZnVuY3Rpb24gZGVjb2RlTG9uZ1BhdGggKGJ1ZiwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGRlY29kZVN0cihidWYsIDAsIGJ1Zi5sZW5ndGgsIGVuY29kaW5nKVxufVxuXG5leHBvcnRzLmVuY29kZVBheCA9IGZ1bmN0aW9uIGVuY29kZVBheCAob3B0cykgeyAvLyBUT0RPOiBlbmNvZGUgbW9yZSBzdHVmZiBpbiBwYXhcbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGlmIChvcHRzLm5hbWUpIHJlc3VsdCArPSBhZGRMZW5ndGgoJyBwYXRoPScgKyBvcHRzLm5hbWUgKyAnXFxuJylcbiAgaWYgKG9wdHMubGlua25hbWUpIHJlc3VsdCArPSBhZGRMZW5ndGgoJyBsaW5rcGF0aD0nICsgb3B0cy5saW5rbmFtZSArICdcXG4nKVxuICBjb25zdCBwYXggPSBvcHRzLnBheFxuICBpZiAocGF4KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcGF4KSB7XG4gICAgICByZXN1bHQgKz0gYWRkTGVuZ3RoKCcgJyArIGtleSArICc9JyArIHBheFtrZXldICsgJ1xcbicpXG4gICAgfVxuICB9XG4gIHJldHVybiBiNGEuZnJvbShyZXN1bHQpXG59XG5cbmV4cG9ydHMuZGVjb2RlUGF4ID0gZnVuY3Rpb24gZGVjb2RlUGF4IChidWYpIHtcbiAgY29uc3QgcmVzdWx0ID0ge31cblxuICB3aGlsZSAoYnVmLmxlbmd0aCkge1xuICAgIGxldCBpID0gMFxuICAgIHdoaWxlIChpIDwgYnVmLmxlbmd0aCAmJiBidWZbaV0gIT09IDMyKSBpKytcbiAgICBjb25zdCBsZW4gPSBwYXJzZUludChiNGEudG9TdHJpbmcoYnVmLnN1YmFycmF5KDAsIGkpKSwgMTApXG4gICAgaWYgKCFsZW4pIHJldHVybiByZXN1bHRcblxuICAgIGNvbnN0IGIgPSBiNGEudG9TdHJpbmcoYnVmLnN1YmFycmF5KGkgKyAxLCBsZW4gLSAxKSlcbiAgICBjb25zdCBrZXlJbmRleCA9IGIuaW5kZXhPZignPScpXG4gICAgaWYgKGtleUluZGV4ID09PSAtMSkgcmV0dXJuIHJlc3VsdFxuICAgIHJlc3VsdFtiLnNsaWNlKDAsIGtleUluZGV4KV0gPSBiLnNsaWNlKGtleUluZGV4ICsgMSlcblxuICAgIGJ1ZiA9IGJ1Zi5zdWJhcnJheShsZW4pXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlIChvcHRzKSB7XG4gIGNvbnN0IGJ1ZiA9IGI0YS5hbGxvYyg1MTIpXG4gIGxldCBuYW1lID0gb3B0cy5uYW1lXG4gIGxldCBwcmVmaXggPSAnJ1xuXG4gIGlmIChvcHRzLnR5cGVmbGFnID09PSA1ICYmIG5hbWVbbmFtZS5sZW5ndGggLSAxXSAhPT0gJy8nKSBuYW1lICs9ICcvJ1xuICBpZiAoYjRhLmJ5dGVMZW5ndGgobmFtZSkgIT09IG5hbWUubGVuZ3RoKSByZXR1cm4gbnVsbCAvLyB1dGYtOFxuXG4gIHdoaWxlIChiNGEuYnl0ZUxlbmd0aChuYW1lKSA+IDEwMCkge1xuICAgIGNvbnN0IGkgPSBuYW1lLmluZGV4T2YoJy8nKVxuICAgIGlmIChpID09PSAtMSkgcmV0dXJuIG51bGxcbiAgICBwcmVmaXggKz0gcHJlZml4ID8gJy8nICsgbmFtZS5zbGljZSgwLCBpKSA6IG5hbWUuc2xpY2UoMCwgaSlcbiAgICBuYW1lID0gbmFtZS5zbGljZShpICsgMSlcbiAgfVxuXG4gIGlmIChiNGEuYnl0ZUxlbmd0aChuYW1lKSA+IDEwMCB8fCBiNGEuYnl0ZUxlbmd0aChwcmVmaXgpID4gMTU1KSByZXR1cm4gbnVsbFxuICBpZiAob3B0cy5saW5rbmFtZSAmJiBiNGEuYnl0ZUxlbmd0aChvcHRzLmxpbmtuYW1lKSA+IDEwMCkgcmV0dXJuIG51bGxcblxuICBiNGEud3JpdGUoYnVmLCBuYW1lKVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3Qob3B0cy5tb2RlICYgTUFTSywgNiksIDEwMClcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG9wdHMudWlkLCA2KSwgMTA4KVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3Qob3B0cy5naWQsIDYpLCAxMTYpXG4gIGVuY29kZVNpemUob3B0cy5zaXplLCBidWYsIDEyNClcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KChvcHRzLm10aW1lLmdldFRpbWUoKSAvIDEwMDApIHwgMCwgMTEpLCAxMzYpXG5cbiAgYnVmWzE1Nl0gPSBaRVJPX09GRlNFVCArIHRvVHlwZWZsYWcob3B0cy50eXBlKVxuXG4gIGlmIChvcHRzLmxpbmtuYW1lKSBiNGEud3JpdGUoYnVmLCBvcHRzLmxpbmtuYW1lLCAxNTcpXG5cbiAgYjRhLmNvcHkoVVNUQVJfTUFHSUMsIGJ1ZiwgTUFHSUNfT0ZGU0VUKVxuICBiNGEuY29weShVU1RBUl9WRVIsIGJ1ZiwgVkVSU0lPTl9PRkZTRVQpXG4gIGlmIChvcHRzLnVuYW1lKSBiNGEud3JpdGUoYnVmLCBvcHRzLnVuYW1lLCAyNjUpXG4gIGlmIChvcHRzLmduYW1lKSBiNGEud3JpdGUoYnVmLCBvcHRzLmduYW1lLCAyOTcpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLmRldm1ham9yIHx8IDAsIDYpLCAzMjkpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLmRldm1pbm9yIHx8IDAsIDYpLCAzMzcpXG5cbiAgaWYgKHByZWZpeCkgYjRhLndyaXRlKGJ1ZiwgcHJlZml4LCAzNDUpXG5cbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KGNrc3VtKGJ1ZiksIDYpLCAxNDgpXG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZSAoYnVmLCBmaWxlbmFtZUVuY29kaW5nLCBhbGxvd1Vua25vd25Gb3JtYXQpIHtcbiAgbGV0IHR5cGVmbGFnID0gYnVmWzE1Nl0gPT09IDAgPyAwIDogYnVmWzE1Nl0gLSBaRVJPX09GRlNFVFxuXG4gIGxldCBuYW1lID0gZGVjb2RlU3RyKGJ1ZiwgMCwgMTAwLCBmaWxlbmFtZUVuY29kaW5nKVxuICBjb25zdCBtb2RlID0gZGVjb2RlT2N0KGJ1ZiwgMTAwLCA4KVxuICBjb25zdCB1aWQgPSBkZWNvZGVPY3QoYnVmLCAxMDgsIDgpXG4gIGNvbnN0IGdpZCA9IGRlY29kZU9jdChidWYsIDExNiwgOClcbiAgY29uc3Qgc2l6ZSA9IGRlY29kZU9jdChidWYsIDEyNCwgMTIpXG4gIGNvbnN0IG10aW1lID0gZGVjb2RlT2N0KGJ1ZiwgMTM2LCAxMilcbiAgY29uc3QgdHlwZSA9IHRvVHlwZSh0eXBlZmxhZylcbiAgY29uc3QgbGlua25hbWUgPSBidWZbMTU3XSA9PT0gMCA/IG51bGwgOiBkZWNvZGVTdHIoYnVmLCAxNTcsIDEwMCwgZmlsZW5hbWVFbmNvZGluZylcbiAgY29uc3QgdW5hbWUgPSBkZWNvZGVTdHIoYnVmLCAyNjUsIDMyKVxuICBjb25zdCBnbmFtZSA9IGRlY29kZVN0cihidWYsIDI5NywgMzIpXG4gIGNvbnN0IGRldm1ham9yID0gZGVjb2RlT2N0KGJ1ZiwgMzI5LCA4KVxuICBjb25zdCBkZXZtaW5vciA9IGRlY29kZU9jdChidWYsIDMzNywgOClcblxuICBjb25zdCBjID0gY2tzdW0oYnVmKVxuXG4gIC8vIGNoZWNrc3VtIGlzIHN0aWxsIGluaXRpYWwgdmFsdWUgaWYgaGVhZGVyIHdhcyBudWxsLlxuICBpZiAoYyA9PT0gOCAqIDMyKSByZXR1cm4gbnVsbFxuXG4gIC8vIHZhbGlkIGNoZWNrc3VtXG4gIGlmIChjICE9PSBkZWNvZGVPY3QoYnVmLCAxNDgsIDgpKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFyIGhlYWRlci4gTWF5YmUgdGhlIHRhciBpcyBjb3JydXB0ZWQgb3IgaXQgbmVlZHMgdG8gYmUgZ3VuemlwcGVkPycpXG5cbiAgaWYgKGlzVVNUQVIoYnVmKSkge1xuICAgIC8vIHVzdGFyIChwb3NpeCkgZm9ybWF0LlxuICAgIC8vIHByZXBlbmQgcHJlZml4LCBpZiBwcmVzZW50LlxuICAgIGlmIChidWZbMzQ1XSkgbmFtZSA9IGRlY29kZVN0cihidWYsIDM0NSwgMTU1LCBmaWxlbmFtZUVuY29kaW5nKSArICcvJyArIG5hbWVcbiAgfSBlbHNlIGlmIChpc0dOVShidWYpKSB7XG4gICAgLy8gJ2dudScvJ29sZGdudScgZm9ybWF0LiBTaW1pbGFyIHRvIHVzdGFyLCBidXQgaGFzIHN1cHBvcnQgZm9yIGluY3JlbWVudGFsIGFuZFxuICAgIC8vIG11bHRpLXZvbHVtZSB0YXJiYWxscy5cbiAgfSBlbHNlIHtcbiAgICBpZiAoIWFsbG93VW5rbm93bkZvcm1hdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRhciBoZWFkZXI6IHVua25vd24gZm9ybWF0LicpXG4gICAgfVxuICB9XG5cbiAgLy8gdG8gc3VwcG9ydCBvbGQgdGFyIHZlcnNpb25zIHRoYXQgdXNlIHRyYWlsaW5nIC8gdG8gaW5kaWNhdGUgZGlyc1xuICBpZiAodHlwZWZsYWcgPT09IDAgJiYgbmFtZSAmJiBuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcvJykgdHlwZWZsYWcgPSA1XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lLFxuICAgIG1vZGUsXG4gICAgdWlkLFxuICAgIGdpZCxcbiAgICBzaXplLFxuICAgIG10aW1lOiBuZXcgRGF0ZSgxMDAwICogbXRpbWUpLFxuICAgIHR5cGUsXG4gICAgbGlua25hbWUsXG4gICAgdW5hbWUsXG4gICAgZ25hbWUsXG4gICAgZGV2bWFqb3IsXG4gICAgZGV2bWlub3IsXG4gICAgcGF4OiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVU1RBUiAoYnVmKSB7XG4gIHJldHVybiBiNGEuZXF1YWxzKFVTVEFSX01BR0lDLCBidWYuc3ViYXJyYXkoTUFHSUNfT0ZGU0VULCBNQUdJQ19PRkZTRVQgKyA2KSlcbn1cblxuZnVuY3Rpb24gaXNHTlUgKGJ1Zikge1xuICByZXR1cm4gYjRhLmVxdWFscyhHTlVfTUFHSUMsIGJ1Zi5zdWJhcnJheShNQUdJQ19PRkZTRVQsIE1BR0lDX09GRlNFVCArIDYpKSAmJlxuICAgIGI0YS5lcXVhbHMoR05VX1ZFUiwgYnVmLnN1YmFycmF5KFZFUlNJT05fT0ZGU0VULCBWRVJTSU9OX09GRlNFVCArIDIpKVxufVxuXG5mdW5jdGlvbiBjbGFtcCAoaW5kZXgsIGxlbiwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInKSByZXR1cm4gZGVmYXVsdFZhbHVlXG4gIGluZGV4ID0gfn5pbmRleCAvLyBDb2VyY2UgdG8gaW50ZWdlci5cbiAgaWYgKGluZGV4ID49IGxlbikgcmV0dXJuIGxlblxuICBpZiAoaW5kZXggPj0gMCkgcmV0dXJuIGluZGV4XG4gIGluZGV4ICs9IGxlblxuICBpZiAoaW5kZXggPj0gMCkgcmV0dXJuIGluZGV4XG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHRvVHlwZSAoZmxhZykge1xuICBzd2l0Y2ggKGZsYWcpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gJ2ZpbGUnXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuICdsaW5rJ1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiAnc3ltbGluaydcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gJ2NoYXJhY3Rlci1kZXZpY2UnXG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuICdibG9jay1kZXZpY2UnXG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuICdkaXJlY3RvcnknXG4gICAgY2FzZSA2OlxuICAgICAgcmV0dXJuICdmaWZvJ1xuICAgIGNhc2UgNzpcbiAgICAgIHJldHVybiAnY29udGlndW91cy1maWxlJ1xuICAgIGNhc2UgNzI6XG4gICAgICByZXR1cm4gJ3BheC1oZWFkZXInXG4gICAgY2FzZSA1NTpcbiAgICAgIHJldHVybiAncGF4LWdsb2JhbC1oZWFkZXInXG4gICAgY2FzZSAyNzpcbiAgICAgIHJldHVybiAnZ251LWxvbmctbGluay1wYXRoJ1xuICAgIGNhc2UgMjg6XG4gICAgY2FzZSAzMDpcbiAgICAgIHJldHVybiAnZ251LWxvbmctcGF0aCdcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHRvVHlwZWZsYWcgKGZsYWcpIHtcbiAgc3dpdGNoIChmbGFnKSB7XG4gICAgY2FzZSAnZmlsZSc6XG4gICAgICByZXR1cm4gMFxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgcmV0dXJuIDFcbiAgICBjYXNlICdzeW1saW5rJzpcbiAgICAgIHJldHVybiAyXG4gICAgY2FzZSAnY2hhcmFjdGVyLWRldmljZSc6XG4gICAgICByZXR1cm4gM1xuICAgIGNhc2UgJ2Jsb2NrLWRldmljZSc6XG4gICAgICByZXR1cm4gNFxuICAgIGNhc2UgJ2RpcmVjdG9yeSc6XG4gICAgICByZXR1cm4gNVxuICAgIGNhc2UgJ2ZpZm8nOlxuICAgICAgcmV0dXJuIDZcbiAgICBjYXNlICdjb250aWd1b3VzLWZpbGUnOlxuICAgICAgcmV0dXJuIDdcbiAgICBjYXNlICdwYXgtaGVhZGVyJzpcbiAgICAgIHJldHVybiA3MlxuICB9XG5cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gaW5kZXhPZiAoYmxvY2ssIG51bSwgb2Zmc2V0LCBlbmQpIHtcbiAgZm9yICg7IG9mZnNldCA8IGVuZDsgb2Zmc2V0KyspIHtcbiAgICBpZiAoYmxvY2tbb2Zmc2V0XSA9PT0gbnVtKSByZXR1cm4gb2Zmc2V0XG4gIH1cbiAgcmV0dXJuIGVuZFxufVxuXG5mdW5jdGlvbiBja3N1bSAoYmxvY2spIHtcbiAgbGV0IHN1bSA9IDggKiAzMlxuICBmb3IgKGxldCBpID0gMDsgaSA8IDE0ODsgaSsrKSBzdW0gKz0gYmxvY2tbaV1cbiAgZm9yIChsZXQgaiA9IDE1NjsgaiA8IDUxMjsgaisrKSBzdW0gKz0gYmxvY2tbal1cbiAgcmV0dXJuIHN1bVxufVxuXG5mdW5jdGlvbiBlbmNvZGVPY3QgKHZhbCwgbikge1xuICB2YWwgPSB2YWwudG9TdHJpbmcoOClcbiAgaWYgKHZhbC5sZW5ndGggPiBuKSByZXR1cm4gU0VWRU5TLnNsaWNlKDAsIG4pICsgJyAnXG4gIHJldHVybiBaRVJPUy5zbGljZSgwLCBuIC0gdmFsLmxlbmd0aCkgKyB2YWwgKyAnICdcbn1cblxuZnVuY3Rpb24gZW5jb2RlU2l6ZUJpbiAobnVtLCBidWYsIG9mZikge1xuICBidWZbb2ZmXSA9IDB4ODBcbiAgZm9yIChsZXQgaSA9IDExOyBpID4gMDsgaS0tKSB7XG4gICAgYnVmW29mZiArIGldID0gbnVtICYgMHhmZlxuICAgIG51bSA9IE1hdGguZmxvb3IobnVtIC8gMHgxMDApXG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlU2l6ZSAobnVtLCBidWYsIG9mZikge1xuICBpZiAobnVtLnRvU3RyaW5nKDgpLmxlbmd0aCA+IDExKSB7XG4gICAgZW5jb2RlU2l6ZUJpbihudW0sIGJ1Ziwgb2ZmKVxuICB9IGVsc2Uge1xuICAgIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChudW0sIDExKSwgb2ZmKVxuICB9XG59XG5cbi8qIENvcGllZCBmcm9tIHRoZSBub2RlLXRhciByZXBvIGFuZCBtb2RpZmllZCB0byBtZWV0XG4gKiB0YXItc3RyZWFtIGNvZGluZyBzdGFuZGFyZC5cbiAqXG4gKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbm9kZS10YXIvYmxvYi81MWI2NjI3YTFmMzU3ZDJlYjQzM2U3Mzc4ZTVmMDVlODNiN2FhNmNkL2xpYi9oZWFkZXIuanMjTDM0OVxuICovXG5mdW5jdGlvbiBwYXJzZTI1NiAoYnVmKSB7XG4gIC8vIGZpcnN0IGJ5dGUgTVVTVCBiZSBlaXRoZXIgODAgb3IgRkZcbiAgLy8gODAgZm9yIHBvc2l0aXZlLCBGRiBmb3IgMidzIGNvbXBcbiAgbGV0IHBvc2l0aXZlXG4gIGlmIChidWZbMF0gPT09IDB4ODApIHBvc2l0aXZlID0gdHJ1ZVxuICBlbHNlIGlmIChidWZbMF0gPT09IDB4RkYpIHBvc2l0aXZlID0gZmFsc2VcbiAgZWxzZSByZXR1cm4gbnVsbFxuXG4gIC8vIGJ1aWxkIHVwIGEgYmFzZS0yNTYgdHVwbGUgZnJvbSB0aGUgbGVhc3Qgc2lnIHRvIHRoZSBoaWdoZXN0XG4gIGNvbnN0IHR1cGxlID0gW11cbiAgbGV0IGlcbiAgZm9yIChpID0gYnVmLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBjb25zdCBieXRlID0gYnVmW2ldXG4gICAgaWYgKHBvc2l0aXZlKSB0dXBsZS5wdXNoKGJ5dGUpXG4gICAgZWxzZSB0dXBsZS5wdXNoKDB4RkYgLSBieXRlKVxuICB9XG5cbiAgbGV0IHN1bSA9IDBcbiAgY29uc3QgbCA9IHR1cGxlLmxlbmd0aFxuICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgc3VtICs9IHR1cGxlW2ldICogTWF0aC5wb3coMjU2LCBpKVxuICB9XG5cbiAgcmV0dXJuIHBvc2l0aXZlID8gc3VtIDogLTEgKiBzdW1cbn1cblxuZnVuY3Rpb24gZGVjb2RlT2N0ICh2YWwsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHZhbCA9IHZhbC5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aClcbiAgb2Zmc2V0ID0gMFxuXG4gIC8vIElmIHByZWZpeGVkIHdpdGggMHg4MCB0aGVuIHBhcnNlIGFzIGEgYmFzZS0yNTYgaW50ZWdlclxuICBpZiAodmFsW29mZnNldF0gJiAweDgwKSB7XG4gICAgcmV0dXJuIHBhcnNlMjU2KHZhbClcbiAgfSBlbHNlIHtcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiB0YXIgY2FuIHByZWZpeCB3aXRoIHNwYWNlc1xuICAgIHdoaWxlIChvZmZzZXQgPCB2YWwubGVuZ3RoICYmIHZhbFtvZmZzZXRdID09PSAzMikgb2Zmc2V0KytcbiAgICBjb25zdCBlbmQgPSBjbGFtcChpbmRleE9mKHZhbCwgMzIsIG9mZnNldCwgdmFsLmxlbmd0aCksIHZhbC5sZW5ndGgsIHZhbC5sZW5ndGgpXG4gICAgd2hpbGUgKG9mZnNldCA8IGVuZCAmJiB2YWxbb2Zmc2V0XSA9PT0gMCkgb2Zmc2V0KytcbiAgICBpZiAoZW5kID09PSBvZmZzZXQpIHJldHVybiAwXG4gICAgcmV0dXJuIHBhcnNlSW50KGI0YS50b1N0cmluZyh2YWwuc3ViYXJyYXkob2Zmc2V0LCBlbmQpKSwgOClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVTdHIgKHZhbCwgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiNGEudG9TdHJpbmcodmFsLnN1YmFycmF5KG9mZnNldCwgaW5kZXhPZih2YWwsIDAsIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKSksIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhZGRMZW5ndGggKHN0cikge1xuICBjb25zdCBsZW4gPSBiNGEuYnl0ZUxlbmd0aChzdHIpXG4gIGxldCBkaWdpdHMgPSBNYXRoLmZsb29yKE1hdGgubG9nKGxlbikgLyBNYXRoLmxvZygxMCkpICsgMVxuICBpZiAobGVuICsgZGlnaXRzID49IE1hdGgucG93KDEwLCBkaWdpdHMpKSBkaWdpdHMrK1xuXG4gIHJldHVybiAobGVuICsgZGlnaXRzKSArIHN0clxufVxuIiwKICAgICJjb25zdCB7IFdyaXRhYmxlLCBSZWFkYWJsZSwgZ2V0U3RyZWFtRXJyb3IgfSA9IHJlcXVpcmUoJ3N0cmVhbXgnKVxuY29uc3QgRklGTyA9IHJlcXVpcmUoJ2Zhc3QtZmlmbycpXG5jb25zdCBiNGEgPSByZXF1aXJlKCdiNGEnKVxuY29uc3QgaGVhZGVycyA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5cbmNvbnN0IEVNUFRZID0gYjRhLmFsbG9jKDApXG5cbmNsYXNzIEJ1ZmZlckxpc3Qge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5idWZmZXJlZCA9IDBcbiAgICB0aGlzLnNoaWZ0ZWQgPSAwXG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBGSUZPKClcblxuICAgIHRoaXMuX29mZnNldCA9IDBcbiAgfVxuXG4gIHB1c2ggKGJ1ZmZlcikge1xuICAgIHRoaXMuYnVmZmVyZWQgKz0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgICB0aGlzLnF1ZXVlLnB1c2goYnVmZmVyKVxuICB9XG5cbiAgc2hpZnRGaXJzdCAoc2l6ZSkge1xuICAgIHJldHVybiB0aGlzLl9idWZmZXJlZCA9PT0gMCA/IG51bGwgOiB0aGlzLl9uZXh0KHNpemUpXG4gIH1cblxuICBzaGlmdCAoc2l6ZSkge1xuICAgIGlmIChzaXplID4gdGhpcy5idWZmZXJlZCkgcmV0dXJuIG51bGxcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuIEVNUFRZXG5cbiAgICBsZXQgY2h1bmsgPSB0aGlzLl9uZXh0KHNpemUpXG5cbiAgICBpZiAoc2l6ZSA9PT0gY2h1bmsuYnl0ZUxlbmd0aCkgcmV0dXJuIGNodW5rIC8vIGxpa2VseSBjYXNlXG5cbiAgICBjb25zdCBjaHVua3MgPSBbY2h1bmtdXG5cbiAgICB3aGlsZSAoKHNpemUgLT0gY2h1bmsuYnl0ZUxlbmd0aCkgPiAwKSB7XG4gICAgICBjaHVuayA9IHRoaXMuX25leHQoc2l6ZSlcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIH1cblxuICAgIHJldHVybiBiNGEuY29uY2F0KGNodW5rcylcbiAgfVxuXG4gIF9uZXh0IChzaXplKSB7XG4gICAgY29uc3QgYnVmID0gdGhpcy5xdWV1ZS5wZWVrKClcbiAgICBjb25zdCByZW0gPSBidWYuYnl0ZUxlbmd0aCAtIHRoaXMuX29mZnNldFxuXG4gICAgaWYgKHNpemUgPj0gcmVtKSB7XG4gICAgICBjb25zdCBzdWIgPSB0aGlzLl9vZmZzZXQgPyBidWYuc3ViYXJyYXkodGhpcy5fb2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCkgOiBidWZcbiAgICAgIHRoaXMucXVldWUuc2hpZnQoKVxuICAgICAgdGhpcy5fb2Zmc2V0ID0gMFxuICAgICAgdGhpcy5idWZmZXJlZCAtPSByZW1cbiAgICAgIHRoaXMuc2hpZnRlZCArPSByZW1cbiAgICAgIHJldHVybiBzdWJcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlcmVkIC09IHNpemVcbiAgICB0aGlzLnNoaWZ0ZWQgKz0gc2l6ZVxuXG4gICAgcmV0dXJuIGJ1Zi5zdWJhcnJheSh0aGlzLl9vZmZzZXQsICh0aGlzLl9vZmZzZXQgKz0gc2l6ZSkpXG4gIH1cbn1cblxuY2xhc3MgU291cmNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoc2VsZiwgaGVhZGVyLCBvZmZzZXQpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmhlYWRlciA9IGhlYWRlclxuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0XG5cbiAgICB0aGlzLl9wYXJlbnQgPSBzZWxmXG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICBpZiAodGhpcy5oZWFkZXIuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgfVxuICAgIGlmICh0aGlzLl9wYXJlbnQuX3N0cmVhbSA9PT0gdGhpcykge1xuICAgICAgdGhpcy5fcGFyZW50Ll91cGRhdGUoKVxuICAgIH1cbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3ByZWRlc3Ryb3kgKCkge1xuICAgIHRoaXMuX3BhcmVudC5kZXN0cm95KGdldFN0cmVhbUVycm9yKHRoaXMpKVxuICB9XG5cbiAgX2RldGFjaCAoKSB7XG4gICAgaWYgKHRoaXMuX3BhcmVudC5fc3RyZWFtID09PSB0aGlzKSB7XG4gICAgICB0aGlzLl9wYXJlbnQuX3N0cmVhbSA9IG51bGxcbiAgICAgIHRoaXMuX3BhcmVudC5fbWlzc2luZyA9IG92ZXJmbG93KHRoaXMuaGVhZGVyLnNpemUpXG4gICAgICB0aGlzLl9wYXJlbnQuX3VwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgdGhpcy5fZGV0YWNoKClcbiAgICBjYihudWxsKVxuICB9XG59XG5cbmNsYXNzIEV4dHJhY3QgZXh0ZW5kcyBXcml0YWJsZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIGlmICghb3B0cykgb3B0cyA9IHt9XG5cbiAgICB0aGlzLl9idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpXG4gICAgdGhpcy5fb2Zmc2V0ID0gMFxuICAgIHRoaXMuX2hlYWRlciA9IG51bGxcbiAgICB0aGlzLl9zdHJlYW0gPSBudWxsXG4gICAgdGhpcy5fbWlzc2luZyA9IDBcbiAgICB0aGlzLl9sb25nSGVhZGVyID0gZmFsc2VcbiAgICB0aGlzLl9jYWxsYmFjayA9IG5vb3BcbiAgICB0aGlzLl9sb2NrZWQgPSBmYWxzZVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2VcbiAgICB0aGlzLl9wYXggPSBudWxsXG4gICAgdGhpcy5fcGF4R2xvYmFsID0gbnVsbFxuICAgIHRoaXMuX2dudUxvbmdQYXRoID0gbnVsbFxuICAgIHRoaXMuX2dudUxvbmdMaW5rUGF0aCA9IG51bGxcbiAgICB0aGlzLl9maWxlbmFtZUVuY29kaW5nID0gb3B0cy5maWxlbmFtZUVuY29kaW5nIHx8ICd1dGYtOCdcbiAgICB0aGlzLl9hbGxvd1Vua25vd25Gb3JtYXQgPSAhIW9wdHMuYWxsb3dVbmtub3duRm9ybWF0XG4gICAgdGhpcy5fdW5sb2NrQm91bmQgPSB0aGlzLl91bmxvY2suYmluZCh0aGlzKVxuICB9XG5cbiAgX3VubG9jayAoZXJyKSB7XG4gICAgdGhpcy5fbG9ja2VkID0gZmFsc2VcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuZGVzdHJveShlcnIpXG4gICAgICB0aGlzLl9jb250aW51ZVdyaXRlKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZSgpXG4gIH1cblxuICBfY29uc3VtZUhlYWRlciAoKSB7XG4gICAgaWYgKHRoaXMuX2xvY2tlZCkgcmV0dXJuIGZhbHNlXG5cbiAgICB0aGlzLl9vZmZzZXQgPSB0aGlzLl9idWZmZXIuc2hpZnRlZFxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2hlYWRlciA9IGhlYWRlcnMuZGVjb2RlKHRoaXMuX2J1ZmZlci5zaGlmdCg1MTIpLCB0aGlzLl9maWxlbmFtZUVuY29kaW5nLCB0aGlzLl9hbGxvd1Vua25vd25Gb3JtYXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jb250aW51ZVdyaXRlKGVycilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICghdGhpcy5faGVhZGVyKSByZXR1cm4gdHJ1ZVxuXG4gICAgc3dpdGNoICh0aGlzLl9oZWFkZXIudHlwZSkge1xuICAgICAgY2FzZSAnZ251LWxvbmctcGF0aCc6XG4gICAgICBjYXNlICdnbnUtbG9uZy1saW5rLXBhdGgnOlxuICAgICAgY2FzZSAncGF4LWdsb2JhbC1oZWFkZXInOlxuICAgICAgY2FzZSAncGF4LWhlYWRlcic6XG4gICAgICAgIHRoaXMuX2xvbmdIZWFkZXIgPSB0cnVlXG4gICAgICAgIHRoaXMuX21pc3NpbmcgPSB0aGlzLl9oZWFkZXIuc2l6ZVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHRoaXMuX2xvY2tlZCA9IHRydWVcbiAgICB0aGlzLl9hcHBseUxvbmdIZWFkZXJzKClcblxuICAgIGlmICh0aGlzLl9oZWFkZXIuc2l6ZSA9PT0gMCB8fCB0aGlzLl9oZWFkZXIudHlwZSA9PT0gJ2RpcmVjdG9yeScpIHtcbiAgICAgIHRoaXMuZW1pdCgnZW50cnknLCB0aGlzLl9oZWFkZXIsIHRoaXMuX2NyZWF0ZVN0cmVhbSgpLCB0aGlzLl91bmxvY2tCb3VuZClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fc3RyZWFtID0gdGhpcy5fY3JlYXRlU3RyZWFtKClcbiAgICB0aGlzLl9taXNzaW5nID0gdGhpcy5faGVhZGVyLnNpemVcblxuICAgIHRoaXMuZW1pdCgnZW50cnknLCB0aGlzLl9oZWFkZXIsIHRoaXMuX3N0cmVhbSwgdGhpcy5fdW5sb2NrQm91bmQpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIF9hcHBseUxvbmdIZWFkZXJzICgpIHtcbiAgICBpZiAodGhpcy5fZ251TG9uZ1BhdGgpIHtcbiAgICAgIHRoaXMuX2hlYWRlci5uYW1lID0gdGhpcy5fZ251TG9uZ1BhdGhcbiAgICAgIHRoaXMuX2dudUxvbmdQYXRoID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9nbnVMb25nTGlua1BhdGgpIHtcbiAgICAgIHRoaXMuX2hlYWRlci5saW5rbmFtZSA9IHRoaXMuX2dudUxvbmdMaW5rUGF0aFxuICAgICAgdGhpcy5fZ251TG9uZ0xpbmtQYXRoID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wYXgpIHtcbiAgICAgIGlmICh0aGlzLl9wYXgucGF0aCkgdGhpcy5faGVhZGVyLm5hbWUgPSB0aGlzLl9wYXgucGF0aFxuICAgICAgaWYgKHRoaXMuX3BheC5saW5rcGF0aCkgdGhpcy5faGVhZGVyLmxpbmtuYW1lID0gdGhpcy5fcGF4LmxpbmtwYXRoXG4gICAgICBpZiAodGhpcy5fcGF4LnNpemUpIHRoaXMuX2hlYWRlci5zaXplID0gcGFyc2VJbnQodGhpcy5fcGF4LnNpemUsIDEwKVxuICAgICAgdGhpcy5faGVhZGVyLnBheCA9IHRoaXMuX3BheFxuICAgICAgdGhpcy5fcGF4ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIF9kZWNvZGVMb25nSGVhZGVyIChidWYpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2hlYWRlci50eXBlKSB7XG4gICAgICBjYXNlICdnbnUtbG9uZy1wYXRoJzpcbiAgICAgICAgdGhpcy5fZ251TG9uZ1BhdGggPSBoZWFkZXJzLmRlY29kZUxvbmdQYXRoKGJ1ZiwgdGhpcy5fZmlsZW5hbWVFbmNvZGluZylcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2dudS1sb25nLWxpbmstcGF0aCc6XG4gICAgICAgIHRoaXMuX2dudUxvbmdMaW5rUGF0aCA9IGhlYWRlcnMuZGVjb2RlTG9uZ1BhdGgoYnVmLCB0aGlzLl9maWxlbmFtZUVuY29kaW5nKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncGF4LWdsb2JhbC1oZWFkZXInOlxuICAgICAgICB0aGlzLl9wYXhHbG9iYWwgPSBoZWFkZXJzLmRlY29kZVBheChidWYpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwYXgtaGVhZGVyJzpcbiAgICAgICAgdGhpcy5fcGF4ID0gdGhpcy5fcGF4R2xvYmFsID09PSBudWxsXG4gICAgICAgICAgPyBoZWFkZXJzLmRlY29kZVBheChidWYpXG4gICAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wYXhHbG9iYWwsIGhlYWRlcnMuZGVjb2RlUGF4KGJ1ZikpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgX2NvbnN1bWVMb25nSGVhZGVyICgpIHtcbiAgICB0aGlzLl9sb25nSGVhZGVyID0gZmFsc2VcbiAgICB0aGlzLl9taXNzaW5nID0gb3ZlcmZsb3codGhpcy5faGVhZGVyLnNpemUpXG5cbiAgICBjb25zdCBidWYgPSB0aGlzLl9idWZmZXIuc2hpZnQodGhpcy5faGVhZGVyLnNpemUpXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fZGVjb2RlTG9uZ0hlYWRlcihidWYpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jb250aW51ZVdyaXRlKGVycilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBfY29uc3VtZVN0cmVhbSAoKSB7XG4gICAgY29uc3QgYnVmID0gdGhpcy5fYnVmZmVyLnNoaWZ0Rmlyc3QodGhpcy5fbWlzc2luZylcbiAgICBpZiAoYnVmID09PSBudWxsKSByZXR1cm4gZmFsc2VcblxuICAgIHRoaXMuX21pc3NpbmcgLT0gYnVmLmJ5dGVMZW5ndGhcbiAgICBjb25zdCBkcmFpbmVkID0gdGhpcy5fc3RyZWFtLnB1c2goYnVmKVxuXG4gICAgaWYgKHRoaXMuX21pc3NpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3N0cmVhbS5wdXNoKG51bGwpXG4gICAgICBpZiAoZHJhaW5lZCkgdGhpcy5fc3RyZWFtLl9kZXRhY2goKVxuICAgICAgcmV0dXJuIGRyYWluZWQgJiYgdGhpcy5fbG9ja2VkID09PSBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiBkcmFpbmVkXG4gIH1cblxuICBfY3JlYXRlU3RyZWFtICgpIHtcbiAgICByZXR1cm4gbmV3IFNvdXJjZSh0aGlzLCB0aGlzLl9oZWFkZXIsIHRoaXMuX29mZnNldClcbiAgfVxuXG4gIF91cGRhdGUgKCkge1xuICAgIHdoaWxlICh0aGlzLl9idWZmZXIuYnVmZmVyZWQgPiAwICYmICF0aGlzLmRlc3Ryb3lpbmcpIHtcbiAgICAgIGlmICh0aGlzLl9taXNzaW5nID4gMCkge1xuICAgICAgICBpZiAodGhpcy5fc3RyZWFtICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NvbnN1bWVTdHJlYW0oKSA9PT0gZmFsc2UpIHJldHVyblxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbG9uZ0hlYWRlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGlmICh0aGlzLl9taXNzaW5nID4gdGhpcy5fYnVmZmVyLmJ1ZmZlcmVkKSBicmVha1xuICAgICAgICAgIGlmICh0aGlzLl9jb25zdW1lTG9uZ0hlYWRlcigpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlnbm9yZSA9IHRoaXMuX2J1ZmZlci5zaGlmdEZpcnN0KHRoaXMuX21pc3NpbmcpXG4gICAgICAgIGlmIChpZ25vcmUgIT09IG51bGwpIHRoaXMuX21pc3NpbmcgLT0gaWdub3JlLmJ5dGVMZW5ndGhcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2J1ZmZlci5idWZmZXJlZCA8IDUxMikgYnJlYWtcbiAgICAgIGlmICh0aGlzLl9zdHJlYW0gIT09IG51bGwgfHwgdGhpcy5fY29uc3VtZUhlYWRlcigpID09PSBmYWxzZSkgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fY29udGludWVXcml0ZShudWxsKVxuICB9XG5cbiAgX2NvbnRpbnVlV3JpdGUgKGVycikge1xuICAgIGNvbnN0IGNiID0gdGhpcy5fY2FsbGJhY2tcbiAgICB0aGlzLl9jYWxsYmFjayA9IG5vb3BcbiAgICBjYihlcnIpXG4gIH1cblxuICBfd3JpdGUgKGRhdGEsIGNiKSB7XG4gICAgdGhpcy5fY2FsbGJhY2sgPSBjYlxuICAgIHRoaXMuX2J1ZmZlci5wdXNoKGRhdGEpXG4gICAgdGhpcy5fdXBkYXRlKClcbiAgfVxuXG4gIF9maW5hbCAoY2IpIHtcbiAgICB0aGlzLl9maW5pc2hlZCA9IHRoaXMuX21pc3NpbmcgPT09IDAgJiYgdGhpcy5fYnVmZmVyLmJ1ZmZlcmVkID09PSAwXG4gICAgY2IodGhpcy5fZmluaXNoZWQgPyBudWxsIDogbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVuZCBvZiBkYXRhJykpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgdGhpcy5fY29udGludWVXcml0ZShudWxsKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgaWYgKHRoaXMuX3N0cmVhbSkgdGhpcy5fc3RyZWFtLmRlc3Ryb3koZ2V0U3RyZWFtRXJyb3IodGhpcykpXG4gICAgY2IobnVsbClcbiAgfVxuXG4gIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGxldCBlcnJvciA9IG51bGxcblxuICAgIGxldCBwcm9taXNlUmVzb2x2ZSA9IG51bGxcbiAgICBsZXQgcHJvbWlzZVJlamVjdCA9IG51bGxcblxuICAgIGxldCBlbnRyeVN0cmVhbSA9IG51bGxcbiAgICBsZXQgZW50cnlDYWxsYmFjayA9IG51bGxcblxuICAgIGNvbnN0IGV4dHJhY3QgPSB0aGlzXG5cbiAgICB0aGlzLm9uKCdlbnRyeScsIG9uZW50cnkpXG4gICAgdGhpcy5vbignZXJyb3InLCAoZXJyKSA9PiB7IGVycm9yID0gZXJyIH0pXG4gICAgdGhpcy5vbignY2xvc2UnLCBvbmNsb3NlKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgfSxcbiAgICAgIG5leHQgKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2Uob25uZXh0KVxuICAgICAgfSxcbiAgICAgIHJldHVybiAoKSB7XG4gICAgICAgIHJldHVybiBkZXN0cm95KG51bGwpXG4gICAgICB9LFxuICAgICAgdGhyb3cgKGVycikge1xuICAgICAgICByZXR1cm4gZGVzdHJveShlcnIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uc3VtZUNhbGxiYWNrIChlcnIpIHtcbiAgICAgIGlmICghZW50cnlDYWxsYmFjaykgcmV0dXJuXG4gICAgICBjb25zdCBjYiA9IGVudHJ5Q2FsbGJhY2tcbiAgICAgIGVudHJ5Q2FsbGJhY2sgPSBudWxsXG4gICAgICBjYihlcnIpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25uZXh0IChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKVxuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnlTdHJlYW0pIHtcbiAgICAgICAgcmVzb2x2ZSh7IHZhbHVlOiBlbnRyeVN0cmVhbSwgZG9uZTogZmFsc2UgfSlcbiAgICAgICAgZW50cnlTdHJlYW0gPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBwcm9taXNlUmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIHByb21pc2VSZWplY3QgPSByZWplY3RcblxuICAgICAgY29uc3VtZUNhbGxiYWNrKG51bGwpXG5cbiAgICAgIGlmIChleHRyYWN0Ll9maW5pc2hlZCAmJiBwcm9taXNlUmVzb2x2ZSkge1xuICAgICAgICBwcm9taXNlUmVzb2x2ZSh7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSlcbiAgICAgICAgcHJvbWlzZVJlc29sdmUgPSBwcm9taXNlUmVqZWN0ID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uZW50cnkgKGhlYWRlciwgc3RyZWFtLCBjYWxsYmFjaykge1xuICAgICAgZW50cnlDYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgbm9vcCkgLy8gbm8gd2F5IGFyb3VuZCB0aGlzIGR1ZSB0byB0aWNrIHNpbGx5bmVzc1xuXG4gICAgICBpZiAocHJvbWlzZVJlc29sdmUpIHtcbiAgICAgICAgcHJvbWlzZVJlc29sdmUoeyB2YWx1ZTogc3RyZWFtLCBkb25lOiBmYWxzZSB9KVxuICAgICAgICBwcm9taXNlUmVzb2x2ZSA9IHByb21pc2VSZWplY3QgPSBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyeVN0cmVhbSA9IHN0cmVhbVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uY2xvc2UgKCkge1xuICAgICAgY29uc3VtZUNhbGxiYWNrKGVycm9yKVxuICAgICAgaWYgKCFwcm9taXNlUmVzb2x2ZSkgcmV0dXJuXG4gICAgICBpZiAoZXJyb3IpIHByb21pc2VSZWplY3QoZXJyb3IpXG4gICAgICBlbHNlIHByb21pc2VSZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgcHJvbWlzZVJlc29sdmUgPSBwcm9taXNlUmVqZWN0ID0gbnVsbFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3kgKGVycikge1xuICAgICAgZXh0cmFjdC5kZXN0cm95KGVycilcbiAgICAgIGNvbnN1bWVDYWxsYmFjayhlcnIpXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAoZXh0cmFjdC5kZXN0cm95ZWQpIHJldHVybiByZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICBleHRyYWN0Lm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpXG4gICAgICAgICAgZWxzZSByZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRyYWN0IChvcHRzKSB7XG4gIHJldHVybiBuZXcgRXh0cmFjdChvcHRzKVxufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIG92ZXJmbG93IChzaXplKSB7XG4gIHNpemUgJj0gNTExXG4gIHJldHVybiBzaXplICYmIDUxMiAtIHNpemVcbn1cbiIsCiAgICAiY29uc3QgY29uc3RhbnRzID0geyAvLyBqdXN0IGZvciBlbnZzIHdpdGhvdXQgZnNcbiAgU19JRk1UOiA2MTQ0MCxcbiAgU19JRkRJUjogMTYzODQsXG4gIFNfSUZDSFI6IDgxOTIsXG4gIFNfSUZCTEs6IDI0NTc2LFxuICBTX0lGSUZPOiA0MDk2LFxuICBTX0lGTE5LOiA0MDk2MFxufVxuXG50cnkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2ZzJykuY29uc3RhbnRzIHx8IGNvbnN0YW50c1xufSBjYXRjaCB7XG4gIG1vZHVsZS5leHBvcnRzID0gY29uc3RhbnRzXG59XG4iLAogICAgImNvbnN0IHsgUmVhZGFibGUsIFdyaXRhYmxlLCBnZXRTdHJlYW1FcnJvciB9ID0gcmVxdWlyZSgnc3RyZWFteCcpXG5jb25zdCBiNGEgPSByZXF1aXJlKCdiNGEnKVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCBoZWFkZXJzID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcblxuY29uc3QgRE1PREUgPSAwbzc1NVxuY29uc3QgRk1PREUgPSAwbzY0NFxuXG5jb25zdCBFTkRfT0ZfVEFSID0gYjRhLmFsbG9jKDEwMjQpXG5cbmNsYXNzIFNpbmsgZXh0ZW5kcyBXcml0YWJsZSB7XG4gIGNvbnN0cnVjdG9yIChwYWNrLCBoZWFkZXIsIGNhbGxiYWNrKSB7XG4gICAgc3VwZXIoeyBtYXBXcml0YWJsZSwgZWFnZXJPcGVuOiB0cnVlIH0pXG5cbiAgICB0aGlzLndyaXR0ZW4gPSAwXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcblxuICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLl9saW5rbmFtZSA9IG51bGxcbiAgICB0aGlzLl9pc0xpbmtuYW1lID0gaGVhZGVyLnR5cGUgPT09ICdzeW1saW5rJyAmJiAhaGVhZGVyLmxpbmtuYW1lXG4gICAgdGhpcy5faXNWb2lkID0gaGVhZGVyLnR5cGUgIT09ICdmaWxlJyAmJiBoZWFkZXIudHlwZSAhPT0gJ2NvbnRpZ3VvdXMtZmlsZSdcbiAgICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG4gICAgdGhpcy5fcGFjayA9IHBhY2tcbiAgICB0aGlzLl9vcGVuQ2FsbGJhY2sgPSBudWxsXG5cbiAgICBpZiAodGhpcy5fcGFjay5fc3RyZWFtID09PSBudWxsKSB0aGlzLl9wYWNrLl9zdHJlYW0gPSB0aGlzXG4gICAgZWxzZSB0aGlzLl9wYWNrLl9wZW5kaW5nLnB1c2godGhpcylcbiAgfVxuXG4gIF9vcGVuIChjYikge1xuICAgIHRoaXMuX29wZW5DYWxsYmFjayA9IGNiXG4gICAgaWYgKHRoaXMuX3BhY2suX3N0cmVhbSA9PT0gdGhpcykgdGhpcy5fY29udGludWVPcGVuKClcbiAgfVxuXG4gIF9jb250aW51ZVBhY2sgKGVycikge1xuICAgIGlmICh0aGlzLl9jYWxsYmFjayA9PT0gbnVsbCkgcmV0dXJuXG5cbiAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsXG5cbiAgICBjYWxsYmFjayhlcnIpXG4gIH1cblxuICBfY29udGludWVPcGVuICgpIHtcbiAgICBpZiAodGhpcy5fcGFjay5fc3RyZWFtID09PSBudWxsKSB0aGlzLl9wYWNrLl9zdHJlYW0gPSB0aGlzXG5cbiAgICBjb25zdCBjYiA9IHRoaXMuX29wZW5DYWxsYmFja1xuICAgIHRoaXMuX29wZW5DYWxsYmFjayA9IG51bGxcbiAgICBpZiAoY2IgPT09IG51bGwpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuX3BhY2suZGVzdHJveWluZykgcmV0dXJuIGNiKG5ldyBFcnJvcigncGFjayBzdHJlYW0gZGVzdHJveWVkJykpXG4gICAgaWYgKHRoaXMuX3BhY2suX2ZpbmFsaXplZCkgcmV0dXJuIGNiKG5ldyBFcnJvcigncGFjayBzdHJlYW0gaXMgYWxyZWFkeSBmaW5hbGl6ZWQnKSlcblxuICAgIHRoaXMuX3BhY2suX3N0cmVhbSA9IHRoaXNcblxuICAgIGlmICghdGhpcy5faXNMaW5rbmFtZSkge1xuICAgICAgdGhpcy5fcGFjay5fZW5jb2RlKHRoaXMuaGVhZGVyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1ZvaWQpIHtcbiAgICAgIHRoaXMuX2ZpbmlzaCgpXG4gICAgICB0aGlzLl9jb250aW51ZVBhY2sobnVsbClcbiAgICB9XG5cbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIGlmICh0aGlzLl9pc0xpbmtuYW1lKSB7XG4gICAgICB0aGlzLl9saW5rbmFtZSA9IHRoaXMuX2xpbmtuYW1lID8gYjRhLmNvbmNhdChbdGhpcy5fbGlua25hbWUsIGRhdGFdKSA6IGRhdGFcbiAgICAgIHJldHVybiBjYihudWxsKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1ZvaWQpIHtcbiAgICAgIGlmIChkYXRhLmJ5dGVMZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ05vIGJvZHkgYWxsb3dlZCBmb3IgdGhpcyBlbnRyeScpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNiKClcbiAgICB9XG5cbiAgICB0aGlzLndyaXR0ZW4gKz0gZGF0YS5ieXRlTGVuZ3RoXG4gICAgaWYgKHRoaXMuX3BhY2sucHVzaChkYXRhKSkgcmV0dXJuIGNiKClcbiAgICB0aGlzLl9wYWNrLl9kcmFpbiA9IGNiXG4gIH1cblxuICBfZmluaXNoICgpIHtcbiAgICBpZiAodGhpcy5fZmluaXNoZWQpIHJldHVyblxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMuX2lzTGlua25hbWUpIHtcbiAgICAgIHRoaXMuaGVhZGVyLmxpbmtuYW1lID0gdGhpcy5fbGlua25hbWUgPyBiNGEudG9TdHJpbmcodGhpcy5fbGlua25hbWUsICd1dGYtOCcpIDogJydcbiAgICAgIHRoaXMuX3BhY2suX2VuY29kZSh0aGlzLmhlYWRlcilcbiAgICB9XG5cbiAgICBvdmVyZmxvdyh0aGlzLl9wYWNrLCB0aGlzLmhlYWRlci5zaXplKVxuXG4gICAgdGhpcy5fcGFjay5fZG9uZSh0aGlzKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIGlmICh0aGlzLndyaXR0ZW4gIT09IHRoaXMuaGVhZGVyLnNpemUpIHsgLy8gY29ycnVwdGluZyB0YXJcbiAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ1NpemUgbWlzbWF0Y2gnKSlcbiAgICB9XG5cbiAgICB0aGlzLl9maW5pc2goKVxuICAgIGNiKG51bGwpXG4gIH1cblxuICBfZ2V0RXJyb3IgKCkge1xuICAgIHJldHVybiBnZXRTdHJlYW1FcnJvcih0aGlzKSB8fCBuZXcgRXJyb3IoJ3RhciBlbnRyeSBkZXN0cm95ZWQnKVxuICB9XG5cbiAgX3ByZWRlc3Ryb3kgKCkge1xuICAgIHRoaXMuX3BhY2suZGVzdHJveSh0aGlzLl9nZXRFcnJvcigpKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgdGhpcy5fcGFjay5fZG9uZSh0aGlzKVxuXG4gICAgdGhpcy5fY29udGludWVQYWNrKHRoaXMuX2ZpbmlzaGVkID8gbnVsbCA6IHRoaXMuX2dldEVycm9yKCkpXG5cbiAgICBjYigpXG4gIH1cbn1cblxuY2xhc3MgUGFjayBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuICAgIHRoaXMuX2RyYWluID0gbm9vcFxuICAgIHRoaXMuX2ZpbmFsaXplZCA9IGZhbHNlXG4gICAgdGhpcy5fZmluYWxpemluZyA9IGZhbHNlXG4gICAgdGhpcy5fcGVuZGluZyA9IFtdXG4gICAgdGhpcy5fc3RyZWFtID0gbnVsbFxuICB9XG5cbiAgZW50cnkgKGhlYWRlciwgYnVmZmVyLCBjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQgfHwgdGhpcy5kZXN0cm95aW5nKSB0aHJvdyBuZXcgRXJyb3IoJ2FscmVhZHkgZmluYWxpemVkIG9yIGRlc3Ryb3llZCcpXG5cbiAgICBpZiAodHlwZW9mIGJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBidWZmZXJcbiAgICAgIGJ1ZmZlciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IG5vb3BcblxuICAgIGlmICghaGVhZGVyLnNpemUgfHwgaGVhZGVyLnR5cGUgPT09ICdzeW1saW5rJykgaGVhZGVyLnNpemUgPSAwXG4gICAgaWYgKCFoZWFkZXIudHlwZSkgaGVhZGVyLnR5cGUgPSBtb2RlVG9UeXBlKGhlYWRlci5tb2RlKVxuICAgIGlmICghaGVhZGVyLm1vZGUpIGhlYWRlci5tb2RlID0gaGVhZGVyLnR5cGUgPT09ICdkaXJlY3RvcnknID8gRE1PREUgOiBGTU9ERVxuICAgIGlmICghaGVhZGVyLnVpZCkgaGVhZGVyLnVpZCA9IDBcbiAgICBpZiAoIWhlYWRlci5naWQpIGhlYWRlci5naWQgPSAwXG4gICAgaWYgKCFoZWFkZXIubXRpbWUpIGhlYWRlci5tdGltZSA9IG5ldyBEYXRlKClcblxuICAgIGlmICh0eXBlb2YgYnVmZmVyID09PSAnc3RyaW5nJykgYnVmZmVyID0gYjRhLmZyb20oYnVmZmVyKVxuXG4gICAgY29uc3Qgc2luayA9IG5ldyBTaW5rKHRoaXMsIGhlYWRlciwgY2FsbGJhY2spXG5cbiAgICBpZiAoYjRhLmlzQnVmZmVyKGJ1ZmZlcikpIHtcbiAgICAgIGhlYWRlci5zaXplID0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgIHNpbmsud3JpdGUoYnVmZmVyKVxuICAgICAgc2luay5lbmQoKVxuICAgICAgcmV0dXJuIHNpbmtcbiAgICB9XG5cbiAgICBpZiAoc2luay5faXNWb2lkKSB7XG4gICAgICByZXR1cm4gc2lua1xuICAgIH1cblxuICAgIHJldHVybiBzaW5rXG4gIH1cblxuICBmaW5hbGl6ZSAoKSB7XG4gICAgaWYgKHRoaXMuX3N0cmVhbSB8fCB0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2ZpbmFsaXppbmcgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZmluYWxpemVkKSByZXR1cm5cbiAgICB0aGlzLl9maW5hbGl6ZWQgPSB0cnVlXG5cbiAgICB0aGlzLnB1c2goRU5EX09GX1RBUilcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgfVxuXG4gIF9kb25lIChzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtICE9PSB0aGlzLl9zdHJlYW0pIHJldHVyblxuXG4gICAgdGhpcy5fc3RyZWFtID0gbnVsbFxuXG4gICAgaWYgKHRoaXMuX2ZpbmFsaXppbmcpIHRoaXMuZmluYWxpemUoKVxuICAgIGlmICh0aGlzLl9wZW5kaW5nLmxlbmd0aCkgdGhpcy5fcGVuZGluZy5zaGlmdCgpLl9jb250aW51ZU9wZW4oKVxuICB9XG5cbiAgX2VuY29kZSAoaGVhZGVyKSB7XG4gICAgaWYgKCFoZWFkZXIucGF4KSB7XG4gICAgICBjb25zdCBidWYgPSBoZWFkZXJzLmVuY29kZShoZWFkZXIpXG4gICAgICBpZiAoYnVmKSB7XG4gICAgICAgIHRoaXMucHVzaChidWYpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9lbmNvZGVQYXgoaGVhZGVyKVxuICB9XG5cbiAgX2VuY29kZVBheCAoaGVhZGVyKSB7XG4gICAgY29uc3QgcGF4SGVhZGVyID0gaGVhZGVycy5lbmNvZGVQYXgoe1xuICAgICAgbmFtZTogaGVhZGVyLm5hbWUsXG4gICAgICBsaW5rbmFtZTogaGVhZGVyLmxpbmtuYW1lLFxuICAgICAgcGF4OiBoZWFkZXIucGF4XG4gICAgfSlcblxuICAgIGNvbnN0IG5ld0hlYWRlciA9IHtcbiAgICAgIG5hbWU6ICdQYXhIZWFkZXInLFxuICAgICAgbW9kZTogaGVhZGVyLm1vZGUsXG4gICAgICB1aWQ6IGhlYWRlci51aWQsXG4gICAgICBnaWQ6IGhlYWRlci5naWQsXG4gICAgICBzaXplOiBwYXhIZWFkZXIuYnl0ZUxlbmd0aCxcbiAgICAgIG10aW1lOiBoZWFkZXIubXRpbWUsXG4gICAgICB0eXBlOiAncGF4LWhlYWRlcicsXG4gICAgICBsaW5rbmFtZTogaGVhZGVyLmxpbmtuYW1lICYmICdQYXhIZWFkZXInLFxuICAgICAgdW5hbWU6IGhlYWRlci51bmFtZSxcbiAgICAgIGduYW1lOiBoZWFkZXIuZ25hbWUsXG4gICAgICBkZXZtYWpvcjogaGVhZGVyLmRldm1ham9yLFxuICAgICAgZGV2bWlub3I6IGhlYWRlci5kZXZtaW5vclxuICAgIH1cblxuICAgIHRoaXMucHVzaChoZWFkZXJzLmVuY29kZShuZXdIZWFkZXIpKVxuICAgIHRoaXMucHVzaChwYXhIZWFkZXIpXG4gICAgb3ZlcmZsb3codGhpcywgcGF4SGVhZGVyLmJ5dGVMZW5ndGgpXG5cbiAgICBuZXdIZWFkZXIuc2l6ZSA9IGhlYWRlci5zaXplXG4gICAgbmV3SGVhZGVyLnR5cGUgPSBoZWFkZXIudHlwZVxuICAgIHRoaXMucHVzaChoZWFkZXJzLmVuY29kZShuZXdIZWFkZXIpKVxuICB9XG5cbiAgX2RvRHJhaW4gKCkge1xuICAgIGNvbnN0IGRyYWluID0gdGhpcy5fZHJhaW5cbiAgICB0aGlzLl9kcmFpbiA9IG5vb3BcbiAgICBkcmFpbigpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgY29uc3QgZXJyID0gZ2V0U3RyZWFtRXJyb3IodGhpcylcblxuICAgIGlmICh0aGlzLl9zdHJlYW0pIHRoaXMuX3N0cmVhbS5kZXN0cm95KGVycilcblxuICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fcGVuZGluZy5zaGlmdCgpXG4gICAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gICAgICBzdHJlYW0uX2NvbnRpbnVlT3BlbigpXG4gICAgfVxuXG4gICAgdGhpcy5fZG9EcmFpbigpXG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICB0aGlzLl9kb0RyYWluKClcbiAgICBjYigpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYWNrIChvcHRzKSB7XG4gIHJldHVybiBuZXcgUGFjayhvcHRzKVxufVxuXG5mdW5jdGlvbiBtb2RlVG9UeXBlIChtb2RlKSB7XG4gIHN3aXRjaCAobW9kZSAmIGNvbnN0YW50cy5TX0lGTVQpIHtcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGQkxLOiByZXR1cm4gJ2Jsb2NrLWRldmljZSdcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGQ0hSOiByZXR1cm4gJ2NoYXJhY3Rlci1kZXZpY2UnXG4gICAgY2FzZSBjb25zdGFudHMuU19JRkRJUjogcmV0dXJuICdkaXJlY3RvcnknXG4gICAgY2FzZSBjb25zdGFudHMuU19JRklGTzogcmV0dXJuICdmaWZvJ1xuICAgIGNhc2UgY29uc3RhbnRzLlNfSUZMTks6IHJldHVybiAnc3ltbGluaydcbiAgfVxuXG4gIHJldHVybiAnZmlsZSdcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuXG5mdW5jdGlvbiBvdmVyZmxvdyAoc2VsZiwgc2l6ZSkge1xuICBzaXplICY9IDUxMVxuICBpZiAoc2l6ZSkgc2VsZi5wdXNoKEVORF9PRl9UQVIuc3ViYXJyYXkoMCwgNTEyIC0gc2l6ZSkpXG59XG5cbmZ1bmN0aW9uIG1hcFdyaXRhYmxlIChidWYpIHtcbiAgcmV0dXJuIGI0YS5pc0J1ZmZlcihidWYpID8gYnVmIDogYjRhLmZyb20oYnVmKVxufVxuIiwKICAgICJleHBvcnRzLmV4dHJhY3QgPSByZXF1aXJlKCcuL2V4dHJhY3QnKVxuZXhwb3J0cy5wYWNrID0gcmVxdWlyZSgnLi9wYWNrJylcbiIsCiAgICAiLyoqXG4gKiBUQVIgRm9ybWF0IFBsdWdpblxuICpcbiAqIEBtb2R1bGUgcGx1Z2lucy90YXJcbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuXG52YXIgZW5naW5lID0gcmVxdWlyZSgndGFyLXN0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtUYXJPcHRpb25zfSBvcHRpb25zXG4gKi9cbnZhciBUYXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUYXIpKSB7XG4gICAgcmV0dXJuIG5ldyBUYXIob3B0aW9ucyk7XG4gIH1cblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gdXRpbC5kZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgZ3ppcDogZmFsc2VcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmd6aXBPcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMuZ3ppcE9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHRoaXMuc3VwcG9ydHMgPSB7XG4gICAgZGlyZWN0b3J5OiB0cnVlLFxuICAgIHN5bWxpbms6IHRydWVcbiAgfTtcblxuICB0aGlzLmVuZ2luZSA9IGVuZ2luZS5wYWNrKG9wdGlvbnMpO1xuICB0aGlzLmNvbXByZXNzb3IgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucy5nemlwKSB7XG4gICAgdGhpcy5jb21wcmVzc29yID0gemxpYi5jcmVhdGVHemlwKG9wdGlvbnMuZ3ppcE9wdGlvbnMpO1xuICAgIHRoaXMuY29tcHJlc3Nvci5vbignZXJyb3InLCB0aGlzLl9vbkNvbXByZXNzb3JFcnJvci5iaW5kKHRoaXMpKTtcbiAgfVxufTtcblxuLyoqXG4gKiBbX29uQ29tcHJlc3NvckVycm9yIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtFcnJvcn0gZXJyXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuVGFyLnByb3RvdHlwZS5fb25Db21wcmVzc29yRXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgdGhpcy5lbmdpbmUuZW1pdCgnZXJyb3InLCBlcnIpO1xufTtcblxuLyoqXG4gKiBbYXBwZW5kIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtKX0gc291cmNlXG4gKiBAcGFyYW0gIHtUYXJFbnRyeURhdGF9IGRhdGFcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cblRhci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZGF0YS5tdGltZSA9IGRhdGEuZGF0ZTtcblxuICBmdW5jdGlvbiBhcHBlbmQoZXJyLCBzb3VyY2VCdWZmZXIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZW5naW5lLmVudHJ5KGRhdGEsIHNvdXJjZUJ1ZmZlciwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ2J1ZmZlcicpIHtcbiAgICBhcHBlbmQobnVsbCwgc291cmNlKTtcbiAgfSBlbHNlIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdzdHJlYW0nICYmIGRhdGEuc3RhdHMpIHtcbiAgICBkYXRhLnNpemUgPSBkYXRhLnN0YXRzLnNpemU7XG5cbiAgICB2YXIgZW50cnkgPSBzZWxmLmVuZ2luZS5lbnRyeShkYXRhLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgfSk7XG5cbiAgICBzb3VyY2UucGlwZShlbnRyeSk7XG4gIH0gZWxzZSBpZiAoZGF0YS5zb3VyY2VUeXBlID09PSAnc3RyZWFtJykge1xuICAgIHV0aWwuY29sbGVjdFN0cmVhbShzb3VyY2UsIGFwcGVuZCk7XG4gIH1cbn07XG5cbi8qKlxuICogW2ZpbmFsaXplIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdm9pZFxuICovXG5UYXIucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZW5naW5lLmZpbmFsaXplKCk7XG59O1xuXG4vKipcbiAqIFtvbiBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblRhci5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLm9uLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xufTtcblxuLyoqXG4gKiBbcGlwZSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRlc3RpbmF0aW9uXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuVGFyLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIG9wdGlvbnMpIHtcbiAgaWYgKHRoaXMuY29tcHJlc3Nvcikge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5waXBlLmFwcGx5KHRoaXMuZW5naW5lLCBbdGhpcy5jb21wcmVzc29yXSkucGlwZShkZXN0aW5hdGlvbiwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLnBpcGUuYXBwbHkodGhpcy5lbmdpbmUsIGFyZ3VtZW50cyk7XG4gIH1cbn07XG5cbi8qKlxuICogW3VucGlwZSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblRhci5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmNvbXByZXNzb3IpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wcmVzc29yLnVucGlwZS5hcHBseSh0aGlzLmNvbXByZXNzb3IsIGFyZ3VtZW50cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLnVucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUYXI7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGFyT3B0aW9uc1xuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZ3ppcD1mYWxzZV0gQ29tcHJlc3MgdGhlIHRhciBhcmNoaXZlIHVzaW5nIGd6aXAuXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2d6aXBPcHRpb25zXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqIHRvIGNvbnRyb2wgY29tcHJlc3Npb24uXG4gKiBAcHJvcGVydHkgeyp9IFsqXSBTZWUgW3Rhci1zdHJlYW1de0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvdGFyLXN0cmVhbX0gZG9jdW1lbnRhdGlvbiBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGFyRW50cnlEYXRhXG4gKiBAZ2xvYmFsXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbmFtZSBTZXRzIHRoZSBlbnRyeSBuYW1lIGluY2x1ZGluZyBpbnRlcm5hbCBwYXRoLlxuICogQHByb3BlcnR5IHsoU3RyaW5nfERhdGUpfSBbZGF0ZT1OT1coKV0gU2V0cyB0aGUgZW50cnkgZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbbW9kZT1EOjA3NTUvRjowNjQ0XSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbcHJlZml4XSBTZXRzIGEgcGF0aCBwcmVmaXggZm9yIHRoZSBlbnRyeSBuYW1lLiBVc2VmdWxcbiAqIHdoZW4gd29ya2luZyB3aXRoIG1ldGhvZHMgbGlrZSBgZGlyZWN0b3J5YCBvciBgZ2xvYmAuXG4gKiBAcHJvcGVydHkge2ZzLlN0YXRzfSBbc3RhdHNdIFNldHMgdGhlIGZzIHN0YXQgZGF0YSBmb3IgdGhpcyBlbnRyeSBhbGxvd2luZ1xuICogZm9yIHJlZHVjdGlvbiBvZiBmcyBzdGF0IGNhbGxzIHdoZW4gc3RhdCBkYXRhIGlzIGFscmVhZHkga25vd24uXG4gKi9cblxuLyoqXG4gKiBUYXJTdHJlYW0gTW9kdWxlXG4gKiBAZXh0ZXJuYWwgVGFyU3RyZWFtXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL3Rhci1zdHJlYW19XG4gKi9cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyAoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdkZWZhdWx0JykgPyB4WydkZWZhdWx0J10gOiB4O1xufVxuXG5jb25zdCBDUkNfVEFCTEUgPSBuZXcgSW50MzJBcnJheShbXG4gIDAsXG4gIDE5OTY5NTk4OTQsXG4gIDM5OTM5MTk3ODgsXG4gIDI1Njc1MjQ3OTQsXG4gIDEyNDYzNDEzNyxcbiAgMTg4NjA1NzYxNSxcbiAgMzkxNTYyMTY4NSxcbiAgMjY1NzM5MjAzNSxcbiAgMjQ5MjY4Mjc0LFxuICAyMDQ0NTA4MzI0LFxuICAzNzcyMTE1MjMwLFxuICAyNTQ3MTc3ODY0LFxuICAxNjI5NDE5OTUsXG4gIDIxMjU1NjEwMjEsXG4gIDM4ODc2MDcwNDcsXG4gIDI0Mjg0NDQwNDksXG4gIDQ5ODUzNjU0OCxcbiAgMTc4OTkyNzY2NixcbiAgNDA4OTAxNjY0OCxcbiAgMjIyNzA2MTIxNCxcbiAgNDUwNTQ4ODYxLFxuICAxODQzMjU4NjAzLFxuICA0MTA3NTgwNzUzLFxuICAyMjExNjc3NjM5LFxuICAzMjU4ODM5OTAsXG4gIDE2ODQ3NzcxNTIsXG4gIDQyNTExMjIwNDIsXG4gIDIzMjE5MjY2MzYsXG4gIDMzNTYzMzQ4NyxcbiAgMTY2MTM2NTQ2NSxcbiAgNDE5NTMwMjc1NSxcbiAgMjM2NjExNTMxNyxcbiAgOTk3MDczMDk2LFxuICAxMjgxOTUzODg2LFxuICAzNTc5ODU1MzMyLFxuICAyNzI0Njg4MjQyLFxuICAxMDA2ODg4MTQ1LFxuICAxMjU4NjA3Njg3LFxuICAzNTI0MTAxNjI5LFxuICAyNzY4OTQyNDQzLFxuICA5MDEwOTc3MjIsXG4gIDExMTkwMDA2ODQsXG4gIDM2ODY1MTcyMDYsXG4gIDI4OTgwNjU3MjgsXG4gIDg1MzA0NDQ1MSxcbiAgMTE3MjI2NjEwMSxcbiAgMzcwNTAxNTc1OSxcbiAgMjg4MjYxNjY2NSxcbiAgNjUxNzY3OTgwLFxuICAxMzczNTAzNTQ2LFxuICAzMzY5NTU0MzA0LFxuICAzMjE4MTA0NTk4LFxuICA1NjU1MDcyNTMsXG4gIDE0NTQ2MjE3MzEsXG4gIDM0ODUxMTE3MDUsXG4gIDMwOTk0MzYzMDMsXG4gIDY3MTI2Njk3NCxcbiAgMTU5NDE5ODAyNCxcbiAgMzMyMjczMDkzMCxcbiAgMjk3MDM0NzgxMixcbiAgNzk1ODM1NTI3LFxuICAxNDgzMjMwMjI1LFxuICAzMjQ0MzY3Mjc1LFxuICAzMDYwMTQ5NTY1LFxuICAxOTk0MTQ2MTkyLFxuICAzMTE1ODUzNCxcbiAgMjU2MzkwNzc3MixcbiAgNDAyMzcxNzkzMCxcbiAgMTkwNzQ1OTQ2NSxcbiAgMTEyNjM3MjE1LFxuICAyNjgwMTUzMjUzLFxuICAzOTA0NDI3MDU5LFxuICAyMDEzNzc2MjkwLFxuICAyNTE3MjIwMzYsXG4gIDI1MTcyMTUzNzQsXG4gIDM3NzU4MzAwNDAsXG4gIDIxMzc2NTY3NjMsXG4gIDE0MTM3NjgxMyxcbiAgMjQzOTI3NzcxOSxcbiAgMzg2NTI3MTI5NyxcbiAgMTgwMjE5NTQ0NCxcbiAgNDc2ODY0ODY2LFxuICAyMjM4MDAxMzY4LFxuICA0MDY2NTA4ODc4LFxuICAxODEyMzcwOTI1LFxuICA0NTMwOTI3MzEsXG4gIDIxODE2MjUwMjUsXG4gIDQxMTE0NTEyMjMsXG4gIDE3MDYwODg5MDIsXG4gIDMxNDA0MjcwNCxcbiAgMjM0NDUzMjIwMixcbiAgNDI0MDAxNzUzMixcbiAgMTY1ODY1ODI3MSxcbiAgMzY2NjE5OTc3LFxuICAyMzYyNjcwMzIzLFxuICA0MjI0OTk0NDA1LFxuICAxMzAzNTM1OTYwLFxuICA5ODQ5NjE0ODYsXG4gIDI3NDcwMDcwOTIsXG4gIDM1NjkwMzc1MzgsXG4gIDEyNTYxNzA4MTcsXG4gIDEwMzc2MDQzMTEsXG4gIDI3NjUyMTA3MzMsXG4gIDM1NTQwNzk5OTUsXG4gIDExMzEwMTQ1MDYsXG4gIDg3OTY3OTk5NixcbiAgMjkwOTI0MzQ2MixcbiAgMzY2Mzc3MTg1NixcbiAgMTE0MTEyNDQ2NyxcbiAgODU1ODQyMjc3LFxuICAyODUyODAxNjMxLFxuICAzNzA4NjQ4NjQ5LFxuICAxMzQyNTMzOTQ4LFxuICA2NTQ0NTkzMDYsXG4gIDMxODgzOTYwNDgsXG4gIDMzNzMwMTUxNzQsXG4gIDE0NjY0Nzk5MDksXG4gIDU0NDE3OTYzNSxcbiAgMzExMDUyMzkxMyxcbiAgMzQ2MjUyMjAxNSxcbiAgMTU5MTY3MTA1NCxcbiAgNzAyMTM4Nzc2LFxuICAyOTY2NDYwNDUwLFxuICAzMzUyNzk5NDEyLFxuICAxNTA0OTE4ODA3LFxuICA3ODM1NTE4NzMsXG4gIDMwODI2NDA0NDMsXG4gIDMyMzM0NDI5ODksXG4gIDM5ODgyOTIzODQsXG4gIDI1OTYyNTQ2NDYsXG4gIDYyMzE3MDY4LFxuICAxOTU3ODEwODQyLFxuICAzOTM5ODQ1OTQ1LFxuICAyNjQ3ODE2MTExLFxuICA4MTQ3MDk5NyxcbiAgMTk0MzgwMzUyMyxcbiAgMzgxNDkxODkzMCxcbiAgMjQ4OTU5NjgwNCxcbiAgMjI1Mjc0NDMwLFxuICAyMDUzNzkwMzc2LFxuICAzODI2MTc1NzU1LFxuICAyNDY2OTA2MDEzLFxuICAxNjc4MTY3NDMsXG4gIDIwOTc2NTEzNzcsXG4gIDQwMjc1NTI1ODAsXG4gIDIyNjU0OTAzODYsXG4gIDUwMzQ0NDA3MixcbiAgMTc2MjA1MDgxNCxcbiAgNDE1MDQxNzI0NSxcbiAgMjE1NDEyOTM1NSxcbiAgNDI2NTIyMjI1LFxuICAxODUyNTA3ODc5LFxuICA0Mjc1MzEzNTI2LFxuICAyMzEyMzE3OTIwLFxuICAyODI3NTM2MjYsXG4gIDE3NDI1NTU4NTIsXG4gIDQxODk3MDgxNDMsXG4gIDIzOTQ4Nzc5NDUsXG4gIDM5NzkxNzc2MyxcbiAgMTYyMjE4MzYzNyxcbiAgMzYwNDM5MDg4OCxcbiAgMjcxNDg2NjU1OCxcbiAgOTUzNzI5NzMyLFxuICAxMzQwMDc2NjI2LFxuICAzNTE4NzE5OTg1LFxuICAyNzk3MzYwOTk5LFxuICAxMDY4ODI4MzgxLFxuICAxMjE5NjM4ODU5LFxuICAzNjI0NzQxODUwLFxuICAyOTM2Njc1MTQ4LFxuICA5MDYxODU0NjIsXG4gIDEwOTA4MTI1MTIsXG4gIDM3NDc2NzIwMDMsXG4gIDI4MjUzNzk2NjksXG4gIDgyOTMyOTEzNSxcbiAgMTE4MTMzNTE2MSxcbiAgMzQxMjE3NzgwNCxcbiAgMzE2MDgzNDg0MixcbiAgNjI4MDg1NDA4LFxuICAxMzgyNjA1MzY2LFxuICAzNDIzMzY5MTA5LFxuICAzMTM4MDc4NDY3LFxuICA1NzA1NjIyMzMsXG4gIDE0MjY0MDA4MTUsXG4gIDMzMTczMTY1NDIsXG4gIDI5OTg3MzM2MDgsXG4gIDczMzIzOTk1NCxcbiAgMTU1NTI2MTk1NixcbiAgMzI2ODkzNTU5MSxcbiAgMzA1MDM2MDYyNSxcbiAgNzUyNDU5NDAzLFxuICAxNTQxMzIwMjIxLFxuICAyNjA3MDcxOTIwLFxuICAzOTY1OTczMDMwLFxuICAxOTY5OTIyOTcyLFxuICA0MDczNTQ5OCxcbiAgMjYxNzgzNzIyNSxcbiAgMzk0MzU3NzE1MSxcbiAgMTkxMzA4Nzg3NyxcbiAgODM5MDgzNzEsXG4gIDI1MTIzNDE2MzQsXG4gIDM4MDM3NDA2OTIsXG4gIDIwNzUyMDg2MjIsXG4gIDIxMzI2MTExMixcbiAgMjQ2MzI3MjYwMyxcbiAgMzg1NTk5MDI4NSxcbiAgMjA5NDg1NDA3MSxcbiAgMTk4OTU4ODgxLFxuICAyMjYyMDI5MDEyLFxuICA0MDU3MjYwNjEwLFxuICAxNzU5MzU5OTkyLFxuICA1MzQ0MTQxOTAsXG4gIDIxNzY3MTg1NDEsXG4gIDQxMzkzMjkxMTUsXG4gIDE4NzM4MzYwMDEsXG4gIDQxNDY2NDU2NyxcbiAgMjI4MjI0ODkzNCxcbiAgNDI3OTIwMDM2OCxcbiAgMTcxMTY4NDU1NCxcbiAgMjg1MjgxMTE2LFxuICAyNDA1ODAxNzI3LFxuICA0MTY3MjE2NzQ1LFxuICAxNjM0NDY3Nzk1LFxuICAzNzYyMjk3MDEsXG4gIDI2ODUwNjc4OTYsXG4gIDM2MDgwMDc0MDYsXG4gIDEzMDg5MTg2MTIsXG4gIDk1NjU0MzkzOCxcbiAgMjgwODU1NTEwNSxcbiAgMzQ5NTk1ODI2MyxcbiAgMTIzMTYzNjMwMSxcbiAgMTA0NzQyNzAzNSxcbiAgMjkzMjk1OTgxOCxcbiAgMzY1NDcwMzgzNixcbiAgMTA4ODM1OTI3MCxcbiAgOTM2OTE4ZTMsXG4gIDI4NDc3MTQ4OTksXG4gIDM3MzY4Mzc4MjksXG4gIDEyMDI5MDA4NjMsXG4gIDgxNzIzMzg5NyxcbiAgMzE4MzM0MjEwOCxcbiAgMzQwMTIzNzEzMCxcbiAgMTQwNDI3NzU1MixcbiAgNjE1ODE4MTUwLFxuICAzMTM0MjA3NDkzLFxuICAzNDUzNDIxMjAzLFxuICAxNDIzODU3NDQ5LFxuICA2MDE0NTA0MzEsXG4gIDMwMDk4Mzc2MTQsXG4gIDMyOTQ3MTA0NTYsXG4gIDE1NjcxMDM3NDYsXG4gIDcxMTkyODcyNCxcbiAgMzAyMDY2ODQ3MSxcbiAgMzI3MjM4MDA2NSxcbiAgMTUxMDMzNDIzNSxcbiAgNzU1MTY3MTE3XG5dKTtcbmZ1bmN0aW9uIGVuc3VyZUJ1ZmZlcihpbnB1dCkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYyhpbnB1dCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnB1dCBtdXN0IGJlIGJ1ZmZlciwgbnVtYmVyLCBvciBzdHJpbmcsIHJlY2VpdmVkIFwiICsgdHlwZW9mIGlucHV0KTtcbiAgfVxufVxuZnVuY3Rpb24gYnVmZmVyaXplSW50KG51bSkge1xuICBjb25zdCB0bXAgPSBlbnN1cmVCdWZmZXIoNCk7XG4gIHRtcC53cml0ZUludDMyQkUobnVtLCAwKTtcbiAgcmV0dXJuIHRtcDtcbn1cbmZ1bmN0aW9uIF9jcmMzMihidWYsIHByZXZpb3VzKSB7XG4gIGJ1ZiA9IGVuc3VyZUJ1ZmZlcihidWYpO1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHByZXZpb3VzKSkge1xuICAgIHByZXZpb3VzID0gcHJldmlvdXMucmVhZFVJbnQzMkJFKDApO1xuICB9XG4gIGxldCBjcmMgPSB+fnByZXZpb3VzIF4gLTE7XG4gIGZvciAodmFyIG4gPSAwOyBuIDwgYnVmLmxlbmd0aDsgbisrKSB7XG4gICAgY3JjID0gQ1JDX1RBQkxFWyhjcmMgXiBidWZbbl0pICYgMjU1XSBeIGNyYyA+Pj4gODtcbiAgfVxuICByZXR1cm4gY3JjIF4gLTE7XG59XG5mdW5jdGlvbiBjcmMzMigpIHtcbiAgcmV0dXJuIGJ1ZmZlcml6ZUludChfY3JjMzIuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG59XG5jcmMzMi5zaWduZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufTtcbmNyYzMyLnVuc2lnbmVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBfY3JjMzIuYXBwbHkobnVsbCwgYXJndW1lbnRzKSA+Pj4gMDtcbn07XG52YXIgYnVmZmVyQ3JjMzIgPSBjcmMzMjtcblxuY29uc3QgaW5kZXggPSAvKkBfX1BVUkVfXyovZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoYnVmZmVyQ3JjMzIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGluZGV4O1xuIiwKICAgICIvKipcbiAqIEpTT04gRm9ybWF0IFBsdWdpblxuICpcbiAqIEBtb2R1bGUgcGx1Z2lucy9qc29uXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuVHJhbnNmb3JtO1xuXG52YXIgY3JjMzIgPSByZXF1aXJlKCdidWZmZXItY3JjMzInKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnYXJjaGl2ZXItdXRpbHMnKTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7KEpzb25PcHRpb25zfFRyYW5zZm9ybU9wdGlvbnMpfSBvcHRpb25zXG4gKi9cbnZhciBKc29uID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSnNvbikpIHtcbiAgICByZXR1cm4gbmV3IEpzb24ob3B0aW9ucyk7XG4gIH1cblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gdXRpbC5kZWZhdWx0cyhvcHRpb25zLCB7fSk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5zdXBwb3J0cyA9IHtcbiAgICBkaXJlY3Rvcnk6IHRydWUsXG4gICAgc3ltbGluazogdHJ1ZVxuICB9O1xuXG4gIHRoaXMuZmlsZXMgPSBbXTtcbn07XG5cbmluaGVyaXRzKEpzb24sIFRyYW5zZm9ybSk7XG5cbi8qKlxuICogW190cmFuc2Zvcm0gZGVzY3JpcHRpb25dXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0J1ZmZlcn0gICBjaHVua1xuICogQHBhcmFtICB7U3RyaW5nfSAgIGVuY29kaW5nXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4gdm9pZFxuICovXG5Kc29uLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayhudWxsLCBjaHVuayk7XG59O1xuXG4vKipcbiAqIFtfd3JpdGVTdHJpbmdpZmllZCBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkpzb24ucHJvdG90eXBlLl93cml0ZVN0cmluZ2lmaWVkID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaWxlU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5maWxlcyk7XG4gIHRoaXMud3JpdGUoZmlsZVN0cmluZyk7XG59O1xuXG4vKipcbiAqIFthcHBlbmQgZGVzY3JpcHRpb25dXG4gKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSAgIHNvdXJjZVxuICogQHBhcmFtICB7RW50cnlEYXRhfSAgIGRhdGFcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkpzb24ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHNvdXJjZSwgZGF0YSwgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGRhdGEuY3JjMzIgPSAwO1xuXG4gIGZ1bmN0aW9uIG9uZW5kKGVyciwgc291cmNlQnVmZmVyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLnNpemUgPSBzb3VyY2VCdWZmZXIubGVuZ3RoIHx8IDA7XG4gICAgZGF0YS5jcmMzMiA9IGNyYzMyLnVuc2lnbmVkKHNvdXJjZUJ1ZmZlcik7XG5cbiAgICBzZWxmLmZpbGVzLnB1c2goZGF0YSk7XG5cbiAgICBjYWxsYmFjayhudWxsLCBkYXRhKTtcbiAgfVxuXG4gIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdidWZmZXInKSB7XG4gICAgb25lbmQobnVsbCwgc291cmNlKTtcbiAgfSBlbHNlIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgdXRpbC5jb2xsZWN0U3RyZWFtKHNvdXJjZSwgb25lbmQpO1xuICB9XG59O1xuXG4vKipcbiAqIFtmaW5hbGl6ZSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuSnNvbi5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fd3JpdGVTdHJpbmdpZmllZCgpO1xuICB0aGlzLmVuZCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBKc29uO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEpzb25PcHRpb25zXG4gKiBAZ2xvYmFsXG4gKi9cbiIsCiAgICAiLyoqXG4gKiBBcmNoaXZlciBWZW5kaW5nXG4gKlxuICogQGlnbm9yZVxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFfVxuICogQGNvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIEFyY2hpdmVyID0gcmVxdWlyZSgnLi9saWIvY29yZScpO1xuXG52YXIgZm9ybWF0cyA9IHt9O1xuXG4vKipcbiAqIERpc3BlbnNlcyBhIG5ldyBBcmNoaXZlciBpbnN0YW5jZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSAge1N0cmluZ30gZm9ybWF0IFRoZSBhcmNoaXZlIGZvcm1hdCB0byB1c2UuXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgU2VlIFtBcmNoaXZlcl17QGxpbmsgQXJjaGl2ZXJ9XG4gKiBAcmV0dXJuIHtBcmNoaXZlcn1cbiAqL1xudmFyIHZlbmRpbmcgPSBmdW5jdGlvbihmb3JtYXQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHZlbmRpbmcuY3JlYXRlKGZvcm1hdCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQXJjaGl2ZXIgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBmb3JtYXQgVGhlIGFyY2hpdmUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBTZWUgW0FyY2hpdmVyXXtAbGluayBBcmNoaXZlcn1cbiAqIEByZXR1cm4ge0FyY2hpdmVyfVxuICovXG52ZW5kaW5nLmNyZWF0ZSA9IGZ1bmN0aW9uKGZvcm1hdCwgb3B0aW9ucykge1xuICBpZiAoZm9ybWF0c1tmb3JtYXRdKSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IEFyY2hpdmVyKGZvcm1hdCwgb3B0aW9ucyk7XG4gICAgaW5zdGFuY2Uuc2V0Rm9ybWF0KGZvcm1hdCk7XG4gICAgaW5zdGFuY2Uuc2V0TW9kdWxlKG5ldyBmb3JtYXRzW2Zvcm1hdF0ob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IG5vdCByZWdpc3RlcmVkJyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgZm9ybWF0IGZvciB1c2Ugd2l0aCBhcmNoaXZlci5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZvcm1hdCBUaGUgbmFtZSBvZiB0aGUgZm9ybWF0LlxuICogQHBhcmFtICB7RnVuY3Rpb259IG1vZHVsZSBUaGUgZnVuY3Rpb24gZm9yIGFyY2hpdmVyIHRvIGludGVyYWN0IHdpdGguXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xudmVuZGluZy5yZWdpc3RlckZvcm1hdCA9IGZ1bmN0aW9uKGZvcm1hdCwgbW9kdWxlKSB7XG4gIGlmIChmb3JtYXRzW2Zvcm1hdF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lzdGVyKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IGFscmVhZHkgcmVnaXN0ZXJlZCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lzdGVyKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IG1vZHVsZSBpbnZhbGlkJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZHVsZS5wcm90b3R5cGUuYXBwZW5kICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBtb2R1bGUucHJvdG90eXBlLmZpbmFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWdpc3RlcignICsgZm9ybWF0ICsgJyk6IGZvcm1hdCBtb2R1bGUgbWlzc2luZyBtZXRob2RzJyk7XG4gIH1cblxuICBmb3JtYXRzW2Zvcm1hdF0gPSBtb2R1bGU7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLlxuICogXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IHRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuXG4gKiBAcmV0dXJuIGJvb2xlYW5cbiAqL1xudmVuZGluZy5pc1JlZ2lzdGVyZWRGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gIGlmIChmb3JtYXRzW2Zvcm1hdF0pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxudmVuZGluZy5yZWdpc3RlckZvcm1hdCgnemlwJywgcmVxdWlyZSgnLi9saWIvcGx1Z2lucy96aXAnKSk7XG52ZW5kaW5nLnJlZ2lzdGVyRm9ybWF0KCd0YXInLCByZXF1aXJlKCcuL2xpYi9wbHVnaW5zL3RhcicpKTtcbnZlbmRpbmcucmVnaXN0ZXJGb3JtYXQoJ2pzb24nLCByZXF1aXJlKCcuL2xpYi9wbHVnaW5zL2pzb24nKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gdmVuZGluZzsiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlWmlwVXBsb2FkU3RyZWFtID0gZXhwb3J0cy5aaXBVcGxvYWRTdHJlYW0gPSBleHBvcnRzLkRFRkFVTFRfQ09NUFJFU1NJT05fTEVWRUwgPSB2b2lkIDA7XG5jb25zdCBzdHJlYW0gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInN0cmVhbVwiKSk7XG5jb25zdCBwcm9taXNlc18xID0gcmVxdWlyZShcImZzL3Byb21pc2VzXCIpO1xuY29uc3QgYXJjaGl2ZXIgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImFyY2hpdmVyXCIpKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2NvbmZpZ1wiKTtcbmV4cG9ydHMuREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCA9IDY7XG4vLyBDdXN0b20gc3RyZWFtIHRyYW5zZm9ybWVyIHNvIHdlIGNhbiBzZXQgdGhlIGhpZ2hXYXRlck1hcmsgcHJvcGVydHlcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzg4NTVcbmNsYXNzIFppcFVwbG9hZFN0cmVhbSBleHRlbmRzIHN0cmVhbS5UcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKGJ1ZmZlclNpemUpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgaGlnaFdhdGVyTWFyazogYnVmZmVyU2l6ZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBfdHJhbnNmb3JtKGNodW5rLCBlbmMsIGNiKSB7XG4gICAgICAgIGNiKG51bGwsIGNodW5rKTtcbiAgICB9XG59XG5leHBvcnRzLlppcFVwbG9hZFN0cmVhbSA9IFppcFVwbG9hZFN0cmVhbTtcbmZ1bmN0aW9uIGNyZWF0ZVppcFVwbG9hZFN0cmVhbSh1cGxvYWRTcGVjaWZpY2F0aW9uLCBjb21wcmVzc2lvbkxldmVsID0gZXhwb3J0cy5ERUZBVUxUX0NPTVBSRVNTSU9OX0xFVkVMKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29yZS5kZWJ1ZyhgQ3JlYXRpbmcgQXJ0aWZhY3QgYXJjaGl2ZSB3aXRoIGNvbXByZXNzaW9uTGV2ZWw6ICR7Y29tcHJlc3Npb25MZXZlbH1gKTtcbiAgICAgICAgY29uc3QgemlwID0gYXJjaGl2ZXIuY3JlYXRlKCd6aXAnLCB7XG4gICAgICAgICAgICBoaWdoV2F0ZXJNYXJrOiAoMCwgY29uZmlnXzEuZ2V0VXBsb2FkQ2h1bmtTaXplKSgpLFxuICAgICAgICAgICAgemxpYjogeyBsZXZlbDogY29tcHJlc3Npb25MZXZlbCB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyByZWdpc3RlciBjYWxsYmFja3MgZm9yIHZhcmlvdXMgZXZlbnRzIGR1cmluZyB0aGUgemlwIGxpZmVjeWNsZVxuICAgICAgICB6aXAub24oJ2Vycm9yJywgemlwRXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHppcC5vbignd2FybmluZycsIHppcFdhcm5pbmdDYWxsYmFjayk7XG4gICAgICAgIHppcC5vbignZmluaXNoJywgemlwRmluaXNoQ2FsbGJhY2spO1xuICAgICAgICB6aXAub24oJ2VuZCcsIHppcEVuZENhbGxiYWNrKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHVwbG9hZFNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChmaWxlLnNvdXJjZVBhdGggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBzeW1saW5rIGFuZCByZXNvbHZlIHRoZSBzb3VyY2UgcGF0aFxuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VQYXRoID0gZmlsZS5zb3VyY2VQYXRoO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLnN0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aCA9IHlpZWxkICgwLCBwcm9taXNlc18xLnJlYWxwYXRoKShmaWxlLnNvdXJjZVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGZpbGUgdG8gdGhlIHppcFxuICAgICAgICAgICAgICAgIHppcC5maWxlKHNvdXJjZVBhdGgsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5kZXN0aW5hdGlvblBhdGhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBhIGRpcmVjdG9yeSB0byB0aGUgemlwXG4gICAgICAgICAgICAgICAgemlwLmFwcGVuZCgnJywgeyBuYW1lOiBmaWxlLmRlc3RpbmF0aW9uUGF0aCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXJTaXplID0gKDAsIGNvbmZpZ18xLmdldFVwbG9hZENodW5rU2l6ZSkoKTtcbiAgICAgICAgY29uc3QgemlwVXBsb2FkU3RyZWFtID0gbmV3IFppcFVwbG9hZFN0cmVhbShidWZmZXJTaXplKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgWmlwIHdyaXRlIGhpZ2ggd2F0ZXJtYXJrIHZhbHVlICR7emlwVXBsb2FkU3RyZWFtLndyaXRhYmxlSGlnaFdhdGVyTWFya31gKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgWmlwIHJlYWQgaGlnaCB3YXRlcm1hcmsgdmFsdWUgJHt6aXBVcGxvYWRTdHJlYW0ucmVhZGFibGVIaWdoV2F0ZXJNYXJrfWApO1xuICAgICAgICB6aXAucGlwZSh6aXBVcGxvYWRTdHJlYW0pO1xuICAgICAgICB6aXAuZmluYWxpemUoKTtcbiAgICAgICAgcmV0dXJuIHppcFVwbG9hZFN0cmVhbTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlWmlwVXBsb2FkU3RyZWFtID0gY3JlYXRlWmlwVXBsb2FkU3RyZWFtO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IHppcEVycm9yQ2FsbGJhY2sgPSAoZXJyb3IpID0+IHtcbiAgICBjb3JlLmVycm9yKCdBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHppcCBmaWxlIGZvciB1cGxvYWQnKTtcbiAgICBjb3JlLmluZm8oZXJyb3IpO1xuICAgIHRocm93IG5ldyBFcnJvcignQW4gZXJyb3IgaGFzIG9jY3VycmVkIGR1cmluZyB6aXAgY3JlYXRpb24gZm9yIHRoZSBhcnRpZmFjdCcpO1xufTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jb25zdCB6aXBXYXJuaW5nQ2FsbGJhY2sgPSAoZXJyb3IpID0+IHtcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgY29yZS53YXJuaW5nKCdFTk9FTlQgd2FybmluZyBkdXJpbmcgYXJ0aWZhY3QgemlwIGNyZWF0aW9uLiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Jyk7XG4gICAgICAgIGNvcmUuaW5mbyhlcnJvcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb3JlLndhcm5pbmcoYEEgbm9uLWJsb2NraW5nIHdhcm5pbmcgaGFzIG9jY3VycmVkIGR1cmluZyBhcnRpZmFjdCB6aXAgY3JlYXRpb246ICR7ZXJyb3IuY29kZX1gKTtcbiAgICAgICAgY29yZS5pbmZvKGVycm9yKTtcbiAgICB9XG59O1xuY29uc3QgemlwRmluaXNoQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgY29yZS5kZWJ1ZygnWmlwIHN0cmVhbSBmb3IgdXBsb2FkIGhhcyBmaW5pc2hlZC4nKTtcbn07XG5jb25zdCB6aXBFbmRDYWxsYmFjayA9ICgpID0+IHtcbiAgICBjb3JlLmRlYnVnKCdaaXAgc3RyZWFtIGZvciB1cGxvYWQgaGFzIGVuZGVkLicpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXBsb2FkQXJ0aWZhY3QgPSB2b2lkIDA7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmNvbnN0IHJldGVudGlvbl8xID0gcmVxdWlyZShcIi4vcmV0ZW50aW9uXCIpO1xuY29uc3QgcGF0aF9hbmRfYXJ0aWZhY3RfbmFtZV92YWxpZGF0aW9uXzEgPSByZXF1aXJlKFwiLi9wYXRoLWFuZC1hcnRpZmFjdC1uYW1lLXZhbGlkYXRpb25cIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgdXBsb2FkX3ppcF9zcGVjaWZpY2F0aW9uXzEgPSByZXF1aXJlKFwiLi91cGxvYWQtemlwLXNwZWNpZmljYXRpb25cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3V0aWxcIik7XG5jb25zdCBibG9iX3VwbG9hZF8xID0gcmVxdWlyZShcIi4vYmxvYi11cGxvYWRcIik7XG5jb25zdCB6aXBfMSA9IHJlcXVpcmUoXCIuL3ppcFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5mdW5jdGlvbiB1cGxvYWRBcnRpZmFjdChuYW1lLCBmaWxlcywgcm9vdERpcmVjdG9yeSwgb3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICgwLCBwYXRoX2FuZF9hcnRpZmFjdF9uYW1lX3ZhbGlkYXRpb25fMS52YWxpZGF0ZUFydGlmYWN0TmFtZSkobmFtZSk7XG4gICAgICAgICgwLCB1cGxvYWRfemlwX3NwZWNpZmljYXRpb25fMS52YWxpZGF0ZVJvb3REaXJlY3RvcnkpKHJvb3REaXJlY3RvcnkpO1xuICAgICAgICBjb25zdCB6aXBTcGVjaWZpY2F0aW9uID0gKDAsIHVwbG9hZF96aXBfc3BlY2lmaWNhdGlvbl8xLmdldFVwbG9hZFppcFNwZWNpZmljYXRpb24pKGZpbGVzLCByb290RGlyZWN0b3J5KTtcbiAgICAgICAgaWYgKHppcFNwZWNpZmljYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuRmlsZXNOb3RGb3VuZEVycm9yKHppcFNwZWNpZmljYXRpb24uZmxhdE1hcChzID0+IChzLnNvdXJjZVBhdGggPyBbcy5zb3VyY2VQYXRoXSA6IFtdKSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCB0aGUgSURzIG5lZWRlZCBmb3IgdGhlIGFydGlmYWN0IGNyZWF0aW9uXG4gICAgICAgIGNvbnN0IGJhY2tlbmRJZHMgPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIC8vIGNyZWF0ZSB0aGUgYXJ0aWZhY3QgY2xpZW50XG4gICAgICAgIGNvbnN0IGFydGlmYWN0Q2xpZW50ID0gKDAsIGFydGlmYWN0X3R3aXJwX2NsaWVudF8xLmludGVybmFsQXJ0aWZhY3RUd2lycENsaWVudCkoKTtcbiAgICAgICAgLy8gY3JlYXRlIHRoZSBhcnRpZmFjdFxuICAgICAgICBjb25zdCBjcmVhdGVBcnRpZmFjdFJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkOiBiYWNrZW5kSWRzLndvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IGJhY2tlbmRJZHMud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmVyc2lvbjogNFxuICAgICAgICB9O1xuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHJldGVudGlvbiBwZXJpb2QsIGFkZCBpdCB0byB0aGUgcmVxdWVzdFxuICAgICAgICBjb25zdCBleHBpcmVzQXQgPSAoMCwgcmV0ZW50aW9uXzEuZ2V0RXhwaXJhdGlvbikob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJldGVudGlvbkRheXMpO1xuICAgICAgICBpZiAoZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICBjcmVhdGVBcnRpZmFjdFJlcS5leHBpcmVzQXQgPSBleHBpcmVzQXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlQXJ0aWZhY3RSZXNwID0geWllbGQgYXJ0aWZhY3RDbGllbnQuQ3JlYXRlQXJ0aWZhY3QoY3JlYXRlQXJ0aWZhY3RSZXEpO1xuICAgICAgICBpZiAoIWNyZWF0ZUFydGlmYWN0UmVzcC5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkludmFsaWRSZXNwb25zZUVycm9yKCdDcmVhdGVBcnRpZmFjdDogcmVzcG9uc2UgZnJvbSBiYWNrZW5kIHdhcyBub3Qgb2snKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB6aXBVcGxvYWRTdHJlYW0gPSB5aWVsZCAoMCwgemlwXzEuY3JlYXRlWmlwVXBsb2FkU3RyZWFtKSh6aXBTcGVjaWZpY2F0aW9uLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29tcHJlc3Npb25MZXZlbCk7XG4gICAgICAgIC8vIFVwbG9hZCB6aXAgdG8gYmxvYiBzdG9yYWdlXG4gICAgICAgIGNvbnN0IHVwbG9hZFJlc3VsdCA9IHlpZWxkICgwLCBibG9iX3VwbG9hZF8xLnVwbG9hZFppcFRvQmxvYlN0b3JhZ2UpKGNyZWF0ZUFydGlmYWN0UmVzcC5zaWduZWRVcGxvYWRVcmwsIHppcFVwbG9hZFN0cmVhbSk7XG4gICAgICAgIC8vIGZpbmFsaXplIHRoZSBhcnRpZmFjdFxuICAgICAgICBjb25zdCBmaW5hbGl6ZUFydGlmYWN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGJhY2tlbmRJZHMud29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogYmFja2VuZElkcy53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzaXplOiB1cGxvYWRSZXN1bHQudXBsb2FkU2l6ZSA/IHVwbG9hZFJlc3VsdC51cGxvYWRTaXplLnRvU3RyaW5nKCkgOiAnMCdcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHVwbG9hZFJlc3VsdC5zaGEyNTZIYXNoKSB7XG4gICAgICAgICAgICBmaW5hbGl6ZUFydGlmYWN0UmVxLmhhc2ggPSBnZW5lcmF0ZWRfMS5TdHJpbmdWYWx1ZS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBgc2hhMjU2OiR7dXBsb2FkUmVzdWx0LnNoYTI1Nkhhc2h9YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29yZS5pbmZvKGBGaW5hbGl6aW5nIGFydGlmYWN0IHVwbG9hZGApO1xuICAgICAgICBjb25zdCBmaW5hbGl6ZUFydGlmYWN0UmVzcCA9IHlpZWxkIGFydGlmYWN0Q2xpZW50LkZpbmFsaXplQXJ0aWZhY3QoZmluYWxpemVBcnRpZmFjdFJlcSk7XG4gICAgICAgIGlmICghZmluYWxpemVBcnRpZmFjdFJlc3Aub2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5JbnZhbGlkUmVzcG9uc2VFcnJvcignRmluYWxpemVBcnRpZmFjdDogcmVzcG9uc2UgZnJvbSBiYWNrZW5kIHdhcyBub3Qgb2snKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcnRpZmFjdElkID0gQmlnSW50KGZpbmFsaXplQXJ0aWZhY3RSZXNwLmFydGlmYWN0SWQpO1xuICAgICAgICBjb3JlLmluZm8oYEFydGlmYWN0ICR7bmFtZX0uemlwIHN1Y2Nlc3NmdWxseSBmaW5hbGl6ZWQuIEFydGlmYWN0IElEICR7YXJ0aWZhY3RJZH1gKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IHVwbG9hZFJlc3VsdC51cGxvYWRTaXplLFxuICAgICAgICAgICAgaWQ6IE51bWJlcihhcnRpZmFjdElkKVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy51cGxvYWRBcnRpZmFjdCA9IHVwbG9hZEFydGlmYWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXBsb2FkLWFydGlmYWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3Qgb3NfMSA9IHJlcXVpcmUoXCJvc1wiKTtcbmNsYXNzIENvbnRleHQge1xuICAgIC8qKlxuICAgICAqIEh5ZHJhdGUgdGhlIGNvbnRleHQgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpIHtcbiAgICAgICAgICAgIGlmIChmc18xLmV4aXN0c1N5bmMocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXlsb2FkID0gSlNPTi5wYXJzZShmc18xLnJlYWRGaWxlU3luYyhwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSDtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgR0lUSFVCX0VWRU5UX1BBVEggJHtwYXRofSBkb2VzIG5vdCBleGlzdCR7b3NfMS5FT0x9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudE5hbWUgPSBwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfTkFNRTtcbiAgICAgICAgdGhpcy5zaGEgPSBwcm9jZXNzLmVudi5HSVRIVUJfU0hBO1xuICAgICAgICB0aGlzLnJlZiA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRUY7XG4gICAgICAgIHRoaXMud29ya2Zsb3cgPSBwcm9jZXNzLmVudi5HSVRIVUJfV09SS0ZMT1c7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVElPTjtcbiAgICAgICAgdGhpcy5hY3RvciA9IHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RPUjtcbiAgICAgICAgdGhpcy5qb2IgPSBwcm9jZXNzLmVudi5HSVRIVUJfSk9CO1xuICAgICAgICB0aGlzLnJ1bk51bWJlciA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fTlVNQkVSLCAxMCk7XG4gICAgICAgIHRoaXMucnVuSWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5HSVRIVUJfUlVOX0lELCAxMCk7XG4gICAgICAgIHRoaXMuYXBpVXJsID0gKF9hID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FQSV9VUkwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGBodHRwczovL2FwaS5naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5zZXJ2ZXJVcmwgPSAoX2IgPSBwcm9jZXNzLmVudi5HSVRIVUJfU0VSVkVSX1VSTCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogYGh0dHBzOi8vZ2l0aHViLmNvbWA7XG4gICAgICAgIHRoaXMuZ3JhcGhxbFVybCA9IChfYyA9IHByb2Nlc3MuZW52LkdJVEhVQl9HUkFQSFFMX1VSTCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbGA7XG4gICAgfVxuICAgIGdldCBpc3N1ZSgpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXBvKSwgeyBudW1iZXI6IChwYXlsb2FkLmlzc3VlIHx8IHBheWxvYWQucHVsbF9yZXF1ZXN0IHx8IHBheWxvYWQpLm51bWJlciB9KTtcbiAgICB9XG4gICAgZ2V0IHJlcG8oKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWSkge1xuICAgICAgICAgICAgY29uc3QgW293bmVyLCByZXBvXSA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBheWxvYWQucmVwb3NpdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkub3duZXIubG9naW4sXG4gICAgICAgICAgICAgICAgcmVwbzogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb250ZXh0LnJlcG8gcmVxdWlyZXMgYSBHSVRIVUJfUkVQT1NJVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBsaWtlICdvd25lci9yZXBvJ1wiKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbnRleHQgPSBDb250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXBpQmFzZVVybCA9IGV4cG9ydHMuZ2V0UHJveHlBZ2VudCA9IGV4cG9ydHMuZ2V0QXV0aFN0cmluZyA9IHZvaWQgMDtcbmNvbnN0IGh0dHBDbGllbnQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpKTtcbmZ1bmN0aW9uIGdldEF1dGhTdHJpbmcodG9rZW4sIG9wdGlvbnMpIHtcbiAgICBpZiAoIXRva2VuICYmICFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgdG9rZW4gb3Igb3B0cy5hdXRoIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRva2VuICYmIG9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgdG9rZW4gYW5kIG9wdHMuYXV0aCBtYXkgbm90IGJvdGggYmUgc3BlY2lmaWVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2Ygb3B0aW9ucy5hdXRoID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuYXV0aCA6IGB0b2tlbiAke3Rva2VufWA7XG59XG5leHBvcnRzLmdldEF1dGhTdHJpbmcgPSBnZXRBdXRoU3RyaW5nO1xuZnVuY3Rpb24gZ2V0UHJveHlBZ2VudChkZXN0aW5hdGlvblVybCkge1xuICAgIGNvbnN0IGhjID0gbmV3IGh0dHBDbGllbnQuSHR0cENsaWVudCgpO1xuICAgIHJldHVybiBoYy5nZXRBZ2VudChkZXN0aW5hdGlvblVybCk7XG59XG5leHBvcnRzLmdldFByb3h5QWdlbnQgPSBnZXRQcm94eUFnZW50O1xuZnVuY3Rpb24gZ2V0QXBpQmFzZVVybCgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9BUElfVVJMJ10gfHwgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nO1xufVxuZXhwb3J0cy5nZXRBcGlCYXNlVXJsID0gZ2V0QXBpQmFzZVVybDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBnZXRVc2VyQWdlbnQoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcIm9iamVjdFwiICYmIFwidXNlckFnZW50XCIgaW4gbmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYE5vZGUuanMvJHtwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDEpfSAoJHtwcm9jZXNzLnBsYXRmb3JtfTsgJHtwcm9jZXNzLmFyY2h9KWA7XG4gIH1cblxuICByZXR1cm4gXCI8ZW52aXJvbm1lbnQgdW5kZXRlY3RhYmxlPlwiO1xufVxuXG5leHBvcnRzLmdldFVzZXJBZ2VudCA9IGdldFVzZXJBZ2VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IHJlZ2lzdGVyO1xuXG5mdW5jdGlvbiByZWdpc3RlcihzdGF0ZSwgbmFtZSwgbWV0aG9kLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgZm9yIGJlZm9yZSBob29rIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmV2ZXJzZSgpLnJlZHVjZShmdW5jdGlvbiAoY2FsbGJhY2ssIG5hbWUpIHtcbiAgICAgIHJldHVybiByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlLCBuYW1lLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICAgIHJldHVybiBtZXRob2Qob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnJlZHVjZShmdW5jdGlvbiAobWV0aG9kLCByZWdpc3RlcmVkKSB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5ob29rLmJpbmQobnVsbCwgbWV0aG9kLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH0pO1xufVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IGFkZEhvb2s7XG5cbmZ1bmN0aW9uIGFkZEhvb2soc3RhdGUsIGtpbmQsIG5hbWUsIGhvb2spIHtcbiAgdmFyIG9yaWcgPSBob29rO1xuICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgc3RhdGUucmVnaXN0cnlbbmFtZV0gPSBbXTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImJlZm9yZVwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihvcmlnLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYWZ0ZXJcIikge1xuICAgIGhvb2sgPSBmdW5jdGlvbiAobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0Xykge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF87XG4gICAgICAgICAgcmV0dXJuIG9yaWcocmVzdWx0LCBvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBvcmlnKGVycm9yLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnB1c2goe1xuICAgIGhvb2s6IGhvb2ssXG4gICAgb3JpZzogb3JpZyxcbiAgfSk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVtb3ZlSG9vaztcblxuZnVuY3Rpb24gcmVtb3ZlSG9vayhzdGF0ZSwgbmFtZSwgbWV0aG9kKSB7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaW5kZXggPSBzdGF0ZS5yZWdpc3RyeVtuYW1lXVxuICAgIC5tYXAoZnVuY3Rpb24gKHJlZ2lzdGVyZWQpIHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLm9yaWc7XG4gICAgfSlcbiAgICAuaW5kZXhPZihtZXRob2QpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xufVxuIiwKICAgICJ2YXIgcmVnaXN0ZXIgPSByZXF1aXJlKFwiLi9saWIvcmVnaXN0ZXJcIik7XG52YXIgYWRkSG9vayA9IHJlcXVpcmUoXCIuL2xpYi9hZGRcIik7XG52YXIgcmVtb3ZlSG9vayA9IHJlcXVpcmUoXCIuL2xpYi9yZW1vdmVcIik7XG5cbi8vIGJpbmQgd2l0aCBhcnJheSBvZiBhcmd1bWVudHM6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTc5MjkxM1xudmFyIGJpbmQgPSBGdW5jdGlvbi5iaW5kO1xudmFyIGJpbmRhYmxlID0gYmluZC5iaW5kKGJpbmQpO1xuXG5mdW5jdGlvbiBiaW5kQXBpKGhvb2ssIHN0YXRlLCBuYW1lKSB7XG4gIHZhciByZW1vdmVIb29rUmVmID0gYmluZGFibGUocmVtb3ZlSG9vaywgbnVsbCkuYXBwbHkoXG4gICAgbnVsbCxcbiAgICBuYW1lID8gW3N0YXRlLCBuYW1lXSA6IFtzdGF0ZV1cbiAgKTtcbiAgaG9vay5hcGkgPSB7IHJlbW92ZTogcmVtb3ZlSG9va1JlZiB9O1xuICBob29rLnJlbW92ZSA9IHJlbW92ZUhvb2tSZWY7XG4gIFtcImJlZm9yZVwiLCBcImVycm9yXCIsIFwiYWZ0ZXJcIiwgXCJ3cmFwXCJdLmZvckVhY2goZnVuY3Rpb24gKGtpbmQpIHtcbiAgICB2YXIgYXJncyA9IG5hbWUgPyBbc3RhdGUsIGtpbmQsIG5hbWVdIDogW3N0YXRlLCBraW5kXTtcbiAgICBob29rW2tpbmRdID0gaG9vay5hcGlba2luZF0gPSBiaW5kYWJsZShhZGRIb29rLCBudWxsKS5hcHBseShudWxsLCBhcmdzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEhvb2tTaW5ndWxhcigpIHtcbiAgdmFyIHNpbmd1bGFySG9va05hbWUgPSBcImhcIjtcbiAgdmFyIHNpbmd1bGFySG9va1N0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcbiAgdmFyIHNpbmd1bGFySG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICBiaW5kQXBpKHNpbmd1bGFySG9vaywgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICByZXR1cm4gc2luZ3VsYXJIb29rO1xufVxuXG5mdW5jdGlvbiBIb29rQ29sbGVjdGlvbigpIHtcbiAgdmFyIHN0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcblxuICB2YXIgaG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUpO1xuICBiaW5kQXBpKGhvb2ssIHN0YXRlKTtcblxuICByZXR1cm4gaG9vaztcbn1cblxudmFyIGNvbGxlY3Rpb25Ib29rRGVwcmVjYXRpb25NZXNzYWdlRGlzcGxheWVkID0gZmFsc2U7XG5mdW5jdGlvbiBIb29rKCkge1xuICBpZiAoIWNvbGxlY3Rpb25Ib29rRGVwcmVjYXRpb25NZXNzYWdlRGlzcGxheWVkKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1tiZWZvcmUtYWZ0ZXItaG9va106IFwiSG9vaygpXCIgcmVwdXJwb3Npbmcgd2FybmluZywgdXNlIFwiSG9vay5Db2xsZWN0aW9uKClcIi4gUmVhZCBtb3JlOiBodHRwczovL2dpdC5pby91cGdyYWRlLWJlZm9yZS1hZnRlci1ob29rLXRvLTEuNCdcbiAgICApO1xuICAgIGNvbGxlY3Rpb25Ib29rRGVwcmVjYXRpb25NZXNzYWdlRGlzcGxheWVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gSG9va0NvbGxlY3Rpb24oKTtcbn1cblxuSG9vay5TaW5ndWxhciA9IEhvb2tTaW5ndWxhci5iaW5kKCk7XG5Ib29rLkNvbGxlY3Rpb24gPSBIb29rQ29sbGVjdGlvbi5iaW5kKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gSG9vaztcbi8vIGV4cG9zZSBjb25zdHJ1Y3RvcnMgYXMgYSBuYW1lZCBwcm9wZXJ0eSBmb3IgVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuSG9vayA9IEhvb2s7XG5tb2R1bGUuZXhwb3J0cy5TaW5ndWxhciA9IEhvb2suU2luZ3VsYXI7XG5tb2R1bGUuZXhwb3J0cy5Db2xsZWN0aW9uID0gSG9vay5Db2xsZWN0aW9uO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qIVxuICogaXMtcGxhaW4tb2JqZWN0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3Q+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICB2YXIgY3Rvcixwcm90O1xuXG4gIGlmIChpc09iamVjdChvKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcbiAgY3RvciA9IG8uY29uc3RydWN0b3I7XG4gIGlmIChjdG9yID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBwcm90b3R5cGVcbiAgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuICBpZiAoaXNPYmplY3QocHJvdCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgY29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhbiBPYmplY3Qtc3BlY2lmaWMgbWV0aG9kXG4gIGlmIChwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCdpcy1wbGFpbi1vYmplY3QnKTtcbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xuXG5mdW5jdGlvbiBsb3dlcmNhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBtZXJnZURlZXAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpO1xuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QuaXNQbGFpbk9iamVjdChvcHRpb25zW2tleV0pKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGVmYXVsdHMpKSBPYmplY3QuYXNzaWduKHJlc3VsdCwge1xuICAgICAgICBba2V5XTogb3B0aW9uc1trZXldXG4gICAgICB9KTtlbHNlIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7XG4gICAgICAgIFtrZXldOiBvcHRpb25zW2tleV1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmxcbiAgICB9IDoge1xuICAgICAgdXJsOiBtZXRob2RcbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9IC8vIGxvd2VyY2FzZSBoZWFkZXIgbmFtZXMgYmVmb3JlIG1lcmdpbmcgd2l0aCBkZWZhdWx0cyB0byBhdm9pZCBkdXBsaWNhdGVzXG5cblxuICBvcHRpb25zLmhlYWRlcnMgPSBsb3dlcmNhc2VLZXlzKG9wdGlvbnMuaGVhZGVycyk7IC8vIHJlbW92ZSBwcm9wZXJ0aWVzIHdpdGggdW5kZWZpbmVkIHZhbHVlcyBiZWZvcmUgbWVyZ2luZ1xuXG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucyk7XG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IG1lcmdlRGVlcChkZWZhdWx0cyB8fCB7fSwgb3B0aW9ucyk7IC8vIG1lZGlhVHlwZS5wcmV2aWV3cyBhcnJheXMgYXJlIG1lcmdlZCwgaW5zdGVhZCBvZiBvdmVyd3JpdHRlblxuXG4gIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MubGVuZ3RoKSB7XG4gICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKHByZXZpZXcgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICB9XG5cbiAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5tYXAocHJldmlldyA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICByZXR1cm4gbWVyZ2VkT3B0aW9ucztcbn1cblxuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuXG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcmV0dXJuIHVybCArIHNlcGFyYXRvciArIG5hbWVzLm1hcChuYW1lID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtuYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJzW25hbWVdKX1gO1xuICB9KS5qb2luKFwiJlwiKTtcbn1cblxuY29uc3QgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXn1dK1xcfS9nO1xuXG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC9eXFxXK3xcXFcrJC9nLCBcIlwiKS5zcGxpdCgvLC8pO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcblxuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcy5tYXAocmVtb3ZlTm9uQ2hhcnMpLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKTtcbn1cblxuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXNUb09taXQpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkuZmlsdGVyKG9wdGlvbiA9PiAha2V5c1RvT21pdC5pbmNsdWRlcyhvcHRpb24pKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgb2JqW2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gb2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9icmFtc3RlaW4vdXJsLXRlbXBsYXRlLCBsaWNlbnNlZCB1bmRlciBCU0Rcbi8vIFRPRE86IGNyZWF0ZSBzZXBhcmF0ZSBwYWNrYWdlLlxuLy9cbi8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0LCBCcmFtIFN0ZWluXG4vLyBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnNcbi8vIGFyZSBtZXQ6XG4vLyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4vLyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4vLyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbi8vICAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbi8vICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRURcbi8vIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOT1xuLy8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULFxuLy8gSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXG4vLyBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWVxuLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbi8vIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSxcbi8vIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgaWYgKCEvJVswLTlBLUZhLWZdLy50ZXN0KHBhcnQpKSB7XG4gICAgICBwYXJ0ID0gZW5jb2RlVVJJKHBhcnQpLnJlcGxhY2UoLyU1Qi9nLCBcIltcIikucmVwbGFjZSgvJTVEL2csIFwiXVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcblxuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwga2V5LCBtb2RpZmllcikge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0W2tleV0sXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBpZiAoaXNEZWZpbmVkKHZhbHVlKSAmJiB2YWx1ZSAhPT0gXCJcIikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblxuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1vZGlmaWVyID09PSBcIipcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IFtdO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVW5yZXNlcnZlZChrKSk7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHRlbXBsYXRlKSB7XG4gIHJldHVybiB7XG4gICAgZXhwYW5kOiBleHBhbmQuYmluZChudWxsLCB0ZW1wbGF0ZSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFx7KFteXFx7XFx9XSspXFx9fChbXlxce1xcfV0rKS9nLCBmdW5jdGlvbiAoXywgZXhwcmVzc2lvbiwgbGl0ZXJhbCkge1xuICAgIGlmIChleHByZXNzaW9uKSB7XG4gICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG5cbiAgICAgIGlmIChvcGVyYXRvcnMuaW5kZXhPZihleHByZXNzaW9uLmNoYXJBdCgwKSkgIT09IC0xKSB7XG4gICAgICAgIG9wZXJhdG9yID0gZXhwcmVzc2lvbi5jaGFyQXQoMCk7XG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgIH1cblxuICAgICAgZXhwcmVzc2lvbi5zcGxpdCgvLC9nKS5mb3JFYWNoKGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIHRtcFsxXSwgdG1wWzJdIHx8IHRtcFszXSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcGVyYXRvciAmJiBvcGVyYXRvciAhPT0gXCIrXCIpIHtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuXG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICBzZXBhcmF0b3IgPSBcIiZcIjtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciAhPT0gXCIjXCIpIHtcbiAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAodmFsdWVzLmxlbmd0aCAhPT0gMCA/IG9wZXJhdG9yIDogXCJcIikgKyB2YWx1ZXMuam9pbihzZXBhcmF0b3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKG9wdGlvbnMpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI21ldGhvZHNcbiAgbGV0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCk7IC8vIHJlcGxhY2UgOnZhcm5hbWUgd2l0aCB7dmFybmFtZX0gdG8gbWFrZSBpdCBSRkMgNjU3MCBjb21wYXRpYmxlXG5cbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcIm1ldGhvZFwiLCBcImJhc2VVcmxcIiwgXCJ1cmxcIiwgXCJoZWFkZXJzXCIsIFwicmVxdWVzdFwiLCBcIm1lZGlhVHlwZVwiXSk7IC8vIGV4dHJhY3QgdmFyaWFibGUgbmFtZXMgZnJvbSBVUkwgdG8gY2FsY3VsYXRlIHJlbWFpbmluZyB2YXJpYWJsZXMgbGF0ZXJcblxuICBjb25zdCB1cmxWYXJpYWJsZU5hbWVzID0gZXh0cmFjdFVybFZhcmlhYmxlTmFtZXModXJsKTtcbiAgdXJsID0gcGFyc2VVcmwodXJsKS5leHBhbmQocGFyYW1ldGVycyk7XG5cbiAgaWYgKCEvXmh0dHAvLnRlc3QodXJsKSkge1xuICAgIHVybCA9IG9wdGlvbnMuYmFzZVVybCArIHVybDtcbiAgfVxuXG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKG9wdGlvbiA9PiB1cmxWYXJpYWJsZU5hbWVzLmluY2x1ZGVzKG9wdGlvbikpLmNvbmNhdChcImJhc2VVcmxcIik7XG4gIGNvbnN0IHJlbWFpbmluZ1BhcmFtZXRlcnMgPSBvbWl0KHBhcmFtZXRlcnMsIG9taXR0ZWRQYXJhbWV0ZXJzKTtcbiAgY29uc3QgaXNCaW5hcnlSZXF1ZXN0ID0gL2FwcGxpY2F0aW9uXFwvb2N0ZXQtc3RyZWFtL2kudGVzdChoZWFkZXJzLmFjY2VwdCk7XG5cbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICAvLyBlLmcuIGFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbiA9PiBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzLnJhd1xuICAgICAgaGVhZGVycy5hY2NlcHQgPSBoZWFkZXJzLmFjY2VwdC5zcGxpdCgvLC8pLm1hcChwcmV2aWV3ID0+IHByZXZpZXcucmVwbGFjZSgvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sIGBhcHBsaWNhdGlvbi92bmQkMSQyLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWApKS5qb2luKFwiLFwiKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIgPSBoZWFkZXJzLmFjY2VwdC5tYXRjaCgvW1xcdy1dKyg/PS1wcmV2aWV3KS9nKSB8fCBbXTtcbiAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKHByZXZpZXcgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQgPyBgLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWAgOiBcIitqc29uXCI7XG4gICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgfSkuam9pbihcIixcIik7XG4gICAgfVxuICB9IC8vIGZvciBHRVQvSEVBRCByZXF1ZXN0cywgc2V0IFVSTCBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gcmVtYWluaW5nIHBhcmFtZXRlcnNcbiAgLy8gZm9yIFBBVENIL1BPU1QvUFVUL0RFTEVURSByZXF1ZXN0cywgc2V0IHJlcXVlc3QgYm9keSBmcm9tIHJlbWFpbmluZyBwYXJhbWV0ZXJzXG5cblxuICBpZiAoW1wiR0VUXCIsIFwiSEVBRFwiXS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgdXJsID0gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcmVtYWluaW5nUGFyYW1ldGVycyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKFwiZGF0YVwiIGluIHJlbWFpbmluZ1BhcmFtZXRlcnMpIHtcbiAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZW1haW5pbmdQYXJhbWV0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFkZXJzW1wiY29udGVudC1sZW5ndGhcIl0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBkZWZhdWx0IGNvbnRlbnQtdHlwZSBmb3IgSlNPTiBpZiBib2R5IGlzIHNldFxuXG5cbiAgaWYgKCFoZWFkZXJzW1wiY29udGVudC10eXBlXCJdICYmIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuICB9IC8vIEdpdEh1YiBleHBlY3RzICdjb250ZW50LWxlbmd0aDogMCcgaGVhZGVyIGZvciBQVVQvUEFUQ0ggcmVxdWVzdHMgd2l0aG91dCBib2R5LlxuICAvLyBmZXRjaCBkb2VzIG5vdCBhbGxvdyB0byBzZXQgYGNvbnRlbnQtbGVuZ3RoYCBoZWFkZXIsIGJ1dCB3ZSBjYW4gc2V0IGJvZHkgdG8gYW4gZW1wdHkgc3RyaW5nXG5cblxuICBpZiAoW1wiUEFUQ0hcIiwgXCJQVVRcIl0uaW5jbHVkZXMobWV0aG9kKSAmJiB0eXBlb2YgYm9keSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGJvZHkgPSBcIlwiO1xuICB9IC8vIE9ubHkgcmV0dXJuIGJvZHkvcmVxdWVzdCBrZXlzIGlmIHByZXNlbnRcblxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHtcbiAgICBtZXRob2QsXG4gICAgdXJsLFxuICAgIGhlYWRlcnNcbiAgfSwgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7XG4gICAgYm9keVxuICB9IDogbnVsbCwgb3B0aW9ucy5yZXF1ZXN0ID8ge1xuICAgIHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdFxuICB9IDogbnVsbCk7XG59XG5cbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgREVGQVVMVFMgPSBtZXJnZShvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICBjb25zdCBlbmRwb2ludCA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlbmRwb2ludCwge1xuICAgIERFRkFVTFRTLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUyksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgREVGQVVMVFMpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCI2LjAuMTJcIjtcblxuY29uc3QgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAke3VuaXZlcnNhbFVzZXJBZ2VudC5nZXRVc2VyQWdlbnQoKX1gOyAvLyBERUZBVUxUUyBoYXMgYWxsIHByb3BlcnRpZXMgc2V0IHRoYXQgRW5kcG9pbnRPcHRpb25zIGhhcywgZXhjZXB0IHVybC5cbi8vIFNvIHdlIHVzZSBSZXF1ZXN0UGFyYW1ldGVycyBhbmQgYWRkIG1ldGhvZCBhcyBhZGRpdGlvbmFsIHJlcXVpcmVkIHByb3BlcnR5LlxuXG5jb25zdCBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIixcbiAgICBwcmV2aWV3czogW11cbiAgfVxufTtcblxuY29uc3QgZW5kcG9pbnQgPSB3aXRoRGVmYXVsdHMobnVsbCwgREVGQVVMVFMpO1xuXG5leHBvcnRzLmVuZHBvaW50ID0gZW5kcG9pbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb252ZXJzaW9ucyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJzaW9ucztcblxuZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgcmV0dXJuIHggPCAwID8gLTEgOiAxO1xufVxuXG5mdW5jdGlvbiBldmVuUm91bmQoeCkge1xuICAgIC8vIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28uXG4gICAgaWYgKCh4ICUgMSkgPT09IDAuNSAmJiAoeCAmIDEpID09PSAwKSB7IC8vIFtldmVuIG51bWJlcl0uNTsgcm91bmQgZG93biAoaS5lLiBmbG9vcilcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoeCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKGJpdExlbmd0aCwgdHlwZU9wdHMpIHtcbiAgICBpZiAoIXR5cGVPcHRzLnVuc2lnbmVkKSB7XG4gICAgICAgIC0tYml0TGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBsb3dlckJvdW5kID0gdHlwZU9wdHMudW5zaWduZWQgPyAwIDogLU1hdGgucG93KDIsIGJpdExlbmd0aCk7XG4gICAgY29uc3QgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxO1xuXG4gICAgY29uc3QgbW9kdWxvVmFsID0gdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoID8gTWF0aC5wb3coMiwgdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoKSA6IE1hdGgucG93KDIsIGJpdExlbmd0aCk7XG4gICAgY29uc3QgbW9kdWxvQm91bmQgPSB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggPyBNYXRoLnBvdygyLCB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggLSAxKSA6IE1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKFYsIG9wdHMpIHtcbiAgICAgICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG5cbiAgICAgICAgbGV0IHggPSArVjtcblxuICAgICAgICBpZiAob3B0cy5lbmZvcmNlUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIGZpbml0ZSBudW1iZXJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHggPSBzaWduKHgpICogTWF0aC5mbG9vcihNYXRoLmFicyh4KSk7XG4gICAgICAgICAgICBpZiAoeCA8IGxvd2VyQm91bmQgfHwgeCA+IHVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGluIGJ5dGUgcmFuZ2VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTih4KSAmJiBvcHRzLmNsYW1wKSB7XG4gICAgICAgICAgICB4ID0gZXZlblJvdW5kKHgpO1xuXG4gICAgICAgICAgICBpZiAoeCA8IGxvd2VyQm91bmQpIHggPSBsb3dlckJvdW5kO1xuICAgICAgICAgICAgaWYgKHggPiB1cHBlckJvdW5kKSB4ID0gdXBwZXJCb3VuZDtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkgfHwgeCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICB4ID0gc2lnbih4KSAqIE1hdGguZmxvb3IoTWF0aC5hYnMoeCkpO1xuICAgICAgICB4ID0geCAlIG1vZHVsb1ZhbDtcblxuICAgICAgICBpZiAoIXR5cGVPcHRzLnVuc2lnbmVkICYmIHggPj0gbW9kdWxvQm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiB4IC0gbW9kdWxvVmFsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVPcHRzLnVuc2lnbmVkKSB7XG4gICAgICAgICAgICBpZiAoeCA8IDApIHtcbiAgICAgICAgICAgICAgeCArPSBtb2R1bG9WYWw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHggPT09IC0wKSB7IC8vIGRvbid0IHJldHVybiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxufVxuXG5jb252ZXJzaW9uc1tcInZvaWRcIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gISF2YWw7XG59O1xuXG5jb252ZXJzaW9uc1tcImJ5dGVcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDgsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJvY3RldFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oOCwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJzaG9ydFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMTYsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBzaG9ydFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMTYsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmNvbnZlcnNpb25zW1wibG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJsb25nIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiBmYWxzZSwgbW9kdWxvQml0TGVuZ3RoOiA2NCB9KTtcbmNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZyBsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogdHJ1ZSwgbW9kdWxvQml0TGVuZ3RoOiA2NCB9KTtcblxuY29udmVyc2lvbnNbXCJkb3VibGVcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IHggPSArVjtcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSBmaW5pdGUgZmxvYXRpbmctcG9pbnQgdmFsdWVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG5jb252ZXJzaW9uc1tcInVucmVzdHJpY3RlZCBkb3VibGVcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IHggPSArVjtcblxuICAgIGlmIChpc05hTih4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgTmFOXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuLy8gbm90IHF1aXRlIHZhbGlkLCBidXQgZ29vZCBlbm91Z2ggZm9yIEpTXG5jb252ZXJzaW9uc1tcImZsb2F0XCJdID0gY29udmVyc2lvbnNbXCJkb3VibGVcIl07XG5jb252ZXJzaW9uc1tcInVucmVzdHJpY3RlZCBmbG9hdFwiXSA9IGNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGRvdWJsZVwiXTtcblxuY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghb3B0cykgb3B0cyA9IHt9O1xuXG4gICAgaWYgKG9wdHMudHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiBWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmcoVik7XG59O1xuXG5jb252ZXJzaW9uc1tcIkJ5dGVTdHJpbmdcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGNvbnN0IHggPSBTdHJpbmcoVik7XG4gICAgbGV0IGMgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IChjID0geC5jb2RlUG9pbnRBdChpKSkgIT09IHVuZGVmaW5lZDsgKytpKSB7XG4gICAgICAgIGlmIChjID4gMjU1KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgdmFsaWQgYnl0ZXN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IFMgPSBTdHJpbmcoVik7XG4gICAgY29uc3QgbiA9IFMubGVuZ3RoO1xuICAgIGNvbnN0IFUgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBjb25zdCBjID0gUy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID4gMHhERkZGKSB7XG4gICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoYykpO1xuICAgICAgICB9IGVsc2UgaWYgKDB4REMwMCA8PSBjICYmIGMgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gbiAtIDEpIHtcbiAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBTLmNoYXJDb2RlQXQoaSArIDEpO1xuICAgICAgICAgICAgICAgIGlmICgweERDMDAgPD0gZCAmJiBkIDw9IDB4REZGRikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gYyAmIDB4M0ZGO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiID0gZCAmIDB4M0ZGO1xuICAgICAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoKDIgPDwgMTUpICsgKDIgPDwgOSkgKiBhICsgYikpO1xuICAgICAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KDB4RkZGRCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBVLmpvaW4oJycpO1xufTtcblxuY29udmVyc2lvbnNbXCJEYXRlXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAoIShWIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIERhdGUgb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAoaXNOYU4oVikpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG5cbmNvbnZlcnNpb25zW1wiUmVnRXhwXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAoIShWIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICBWID0gbmV3IFJlZ0V4cChWKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXlzW2ldLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5c1tpXSkpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyU3ltYm9sID0gU3ltYm9sKFwid3JhcHBlclwiKTtcbm1vZHVsZS5leHBvcnRzLmltcGxTeW1ib2wgPSBTeW1ib2woXCJpbXBsXCIpO1xuXG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyRm9ySW1wbCA9IGZ1bmN0aW9uIChpbXBsKSB7XG4gIHJldHVybiBpbXBsW21vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2xdO1xufTtcblxubW9kdWxlLmV4cG9ydHMuaW1wbEZvcldyYXBwZXIgPSBmdW5jdGlvbiAod3JhcHBlcikge1xuICByZXR1cm4gd3JhcHBlclttb2R1bGUuZXhwb3J0cy5pbXBsU3ltYm9sXTtcbn07XG5cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBwdW55Y29kZSA9IHJlcXVpcmUoXCJwdW55Y29kZVwiKTtcbnZhciBtYXBwaW5nVGFibGUgPSByZXF1aXJlKFwiLi9saWIvbWFwcGluZ1RhYmxlLmpzb25cIik7XG5cbnZhciBQUk9DRVNTSU5HX09QVElPTlMgPSB7XG4gIFRSQU5TSVRJT05BTDogMCxcbiAgTk9OVFJBTlNJVElPTkFMOiAxXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemUoc3RyKSB7IC8vIGZpeCBidWcgaW4gdjhcbiAgcmV0dXJuIHN0ci5zcGxpdCgnXFx1MDAwMCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy5ub3JtYWxpemUoJ05GQycpOyB9KS5qb2luKCdcXHUwMDAwJyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRTdGF0dXModmFsKSB7XG4gIHZhciBzdGFydCA9IDA7XG4gIHZhciBlbmQgPSBtYXBwaW5nVGFibGUubGVuZ3RoIC0gMTtcblxuICB3aGlsZSAoc3RhcnQgPD0gZW5kKSB7XG4gICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKHN0YXJ0ICsgZW5kKSAvIDIpO1xuXG4gICAgdmFyIHRhcmdldCA9IG1hcHBpbmdUYWJsZVttaWRdO1xuICAgIGlmICh0YXJnZXRbMF1bMF0gPD0gdmFsICYmIHRhcmdldFswXVsxXSA+PSB2YWwpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSBlbHNlIGlmICh0YXJnZXRbMF1bMF0gPiB2YWwpIHtcbiAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gbWlkICsgMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIHJlZ2V4QXN0cmFsU3ltYm9scyA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG5cbmZ1bmN0aW9uIGNvdW50U3ltYm9scyhzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZ1xuICAgIC8vIHJlcGxhY2UgZXZlcnkgc3Vycm9nYXRlIHBhaXIgd2l0aCBhIEJNUCBzeW1ib2xcbiAgICAucmVwbGFjZShyZWdleEFzdHJhbFN5bWJvbHMsICdfJylcbiAgICAvLyB0aGVuIGdldCB0aGUgbGVuZ3RoXG4gICAgLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gbWFwQ2hhcnMoZG9tYWluX25hbWUsIHVzZVNURDMsIHByb2Nlc3Npbmdfb3B0aW9uKSB7XG4gIHZhciBoYXNFcnJvciA9IGZhbHNlO1xuICB2YXIgcHJvY2Vzc2VkID0gXCJcIjtcblxuICB2YXIgbGVuID0gY291bnRTeW1ib2xzKGRvbWFpbl9uYW1lKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBjb2RlUG9pbnQgPSBkb21haW5fbmFtZS5jb2RlUG9pbnRBdChpKTtcbiAgICB2YXIgc3RhdHVzID0gZmluZFN0YXR1cyhjb2RlUG9pbnQpO1xuXG4gICAgc3dpdGNoIChzdGF0dXNbMV0pIHtcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkXCI6XG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImlnbm9yZWRcIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWFwcGVkXCI6XG4gICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRldmlhdGlvblwiOlxuICAgICAgICBpZiAocHJvY2Vzc2luZ19vcHRpb24gPT09IFBST0NFU1NJTkdfT1BUSU9OUy5UUkFOU0lUSU9OQUwpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCBzdGF0dXNbMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInZhbGlkXCI6XG4gICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCI6XG4gICAgICAgIGlmICh1c2VTVEQzKSB7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCI6XG4gICAgICAgIGlmICh1c2VTVEQzKSB7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RyaW5nOiBwcm9jZXNzZWQsXG4gICAgZXJyb3I6IGhhc0Vycm9yXG4gIH07XG59XG5cbnZhciBjb21iaW5pbmdNYXJrc1JlZ2V4ID0gL1tcXHUwMzAwLVxcdTAzNkZcXHUwNDgzLVxcdTA0ODlcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNjEwLVxcdTA2MUFcXHUwNjRCLVxcdTA2NUZcXHUwNjcwXFx1MDZENi1cXHUwNkRDXFx1MDZERi1cXHUwNkU0XFx1MDZFN1xcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExXFx1MDczMC1cXHUwNzRBXFx1MDdBNi1cXHUwN0IwXFx1MDdFQi1cXHUwN0YzXFx1MDgxNi1cXHUwODE5XFx1MDgxQi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJEXFx1MDg1OS1cXHUwODVCXFx1MDhFNC1cXHUwOTAzXFx1MDkzQS1cXHUwOTNDXFx1MDkzRS1cXHUwOTRGXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTgxLVxcdTA5ODNcXHUwOUJDXFx1MDlCRS1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0RcXHUwOUQ3XFx1MDlFMlxcdTA5RTNcXHUwQTAxLVxcdTBBMDNcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE3MFxcdTBBNzFcXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEFCQ1xcdTBBQkUtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRTJcXHUwQUUzXFx1MEIwMS1cXHUwQjAzXFx1MEIzQ1xcdTBCM0UtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjYyXFx1MEI2M1xcdTBCODJcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQ3XFx1MEMwMC1cXHUwQzAzXFx1MEMzRS1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzYyXFx1MEM2M1xcdTBDODEtXFx1MEM4M1xcdTBDQkNcXHUwQ0JFLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDRTJcXHUwQ0UzXFx1MEQwMS1cXHUwRDAzXFx1MEQzRS1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDREXFx1MEQ1N1xcdTBENjJcXHUwRDYzXFx1MEQ4MlxcdTBEODNcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUzMVxcdTBFMzQtXFx1MEUzQVxcdTBFNDctXFx1MEU0RVxcdTBFQjFcXHUwRUI0LVxcdTBFQjlcXHUwRUJCXFx1MEVCQ1xcdTBFQzgtXFx1MEVDRFxcdTBGMThcXHUwRjE5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRVxcdTBGM0ZcXHUwRjcxLVxcdTBGODRcXHUwRjg2XFx1MEY4N1xcdTBGOEQtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDJCLVxcdTEwM0VcXHUxMDU2LVxcdTEwNTlcXHUxMDVFLVxcdTEwNjBcXHUxMDYyLVxcdTEwNjRcXHUxMDY3LVxcdTEwNkRcXHUxMDcxLVxcdTEwNzRcXHUxMDgyLVxcdTEwOERcXHUxMDhGXFx1MTA5QS1cXHUxMDlEXFx1MTM1RC1cXHUxMzVGXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3QjQtXFx1MTdEM1xcdTE3RERcXHUxODBCLVxcdTE4MERcXHUxOEE5XFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MTlCMC1cXHUxOUMwXFx1MTlDOFxcdTE5QzlcXHUxQTE3LVxcdTFBMUJcXHUxQTU1LVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGXFx1MUFCMC1cXHUxQUJFXFx1MUIwMC1cXHUxQjA0XFx1MUIzNC1cXHUxQjQ0XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQjgyXFx1MUJBMS1cXHUxQkFEXFx1MUJFNi1cXHUxQkYzXFx1MUMyNC1cXHUxQzM3XFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0U4XFx1MUNFRFxcdTFDRjItXFx1MUNGNFxcdTFDRjhcXHUxQ0Y5XFx1MURDMC1cXHUxREY1XFx1MURGQy1cXHUxREZGXFx1MjBEMC1cXHUyMEYwXFx1MkNFRi1cXHUyQ0YxXFx1MkQ3RlxcdTJERTAtXFx1MkRGRlxcdTMwMkEtXFx1MzAyRlxcdTMwOTlcXHUzMDlBXFx1QTY2Ri1cXHVBNjcyXFx1QTY3NC1cXHVBNjdEXFx1QTY5RlxcdUE2RjBcXHVBNkYxXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyMy1cXHVBODI3XFx1QTg4MFxcdUE4ODFcXHVBOEI0LVxcdUE4QzRcXHVBOEUwLVxcdUE4RjFcXHVBOTI2LVxcdUE5MkRcXHVBOTQ3LVxcdUE5NTNcXHVBOTgwLVxcdUE5ODNcXHVBOUIzLVxcdUE5QzBcXHVBOUU1XFx1QUEyOS1cXHVBQTM2XFx1QUE0M1xcdUFBNENcXHVBQTREXFx1QUE3Qi1cXHVBQTdEXFx1QUFCMFxcdUFBQjItXFx1QUFCNFxcdUFBQjdcXHVBQUI4XFx1QUFCRVxcdUFBQkZcXHVBQUMxXFx1QUFFQi1cXHVBQUVGXFx1QUFGNVxcdUFBRjZcXHVBQkUzLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkRdfFxcdUQ4MDBbXFx1RERGRFxcdURFRTBcXHVERjc2LVxcdURGN0FdfFxcdUQ4MDJbXFx1REUwMS1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMEZcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REVFNVxcdURFRTZdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzAyXFx1REMzOC1cXHVEQzQ2XFx1REM3Ri1cXHVEQzgyXFx1RENCMC1cXHVEQ0JBXFx1REQwMC1cXHVERDAyXFx1REQyNy1cXHVERDM0XFx1REQ3M1xcdUREODAtXFx1REQ4MlxcdUREQjMtXFx1RERDMFxcdURFMkMtXFx1REUzN1xcdURFREYtXFx1REVFQVxcdURGMDEtXFx1REYwM1xcdURGM0NcXHVERjNFLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQ0IwLVxcdURDQzNcXHVEREFGLVxcdUREQjVcXHVEREI4LVxcdUREQzBcXHVERTMwLVxcdURFNDBcXHVERUFCLVxcdURFQjddfFxcdUQ4MUFbXFx1REVGMC1cXHVERUY0XFx1REYzMC1cXHVERjM2XXxcXHVEODFCW1xcdURGNTEtXFx1REY3RVxcdURGOEYtXFx1REY5Ml18XFx1RDgyRltcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1LVxcdURENjlcXHVERDZELVxcdURENzJcXHVERDdCLVxcdUREODJcXHVERDg1LVxcdUREOEJcXHVEREFBLVxcdUREQURcXHVERTQyLVxcdURFNDRdfFxcdUQ4M0FbXFx1RENEMC1cXHVEQ0Q2XXxcXHVEQjQwW1xcdUREMDAtXFx1RERFRl0vO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUxhYmVsKGxhYmVsLCBwcm9jZXNzaW5nX29wdGlvbikge1xuICBpZiAobGFiZWwuc3Vic3RyKDAsIDQpID09PSBcInhuLS1cIikge1xuICAgIGxhYmVsID0gcHVueWNvZGUudG9Vbmljb2RlKGxhYmVsKTtcbiAgICBwcm9jZXNzaW5nX29wdGlvbiA9IFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUw7XG4gIH1cblxuICB2YXIgZXJyb3IgPSBmYWxzZTtcblxuICBpZiAobm9ybWFsaXplKGxhYmVsKSAhPT0gbGFiZWwgfHxcbiAgICAgIChsYWJlbFszXSA9PT0gXCItXCIgJiYgbGFiZWxbNF0gPT09IFwiLVwiKSB8fFxuICAgICAgbGFiZWxbMF0gPT09IFwiLVwiIHx8IGxhYmVsW2xhYmVsLmxlbmd0aCAtIDFdID09PSBcIi1cIiB8fFxuICAgICAgbGFiZWwuaW5kZXhPZihcIi5cIikgIT09IC0xIHx8XG4gICAgICBsYWJlbC5zZWFyY2goY29tYmluaW5nTWFya3NSZWdleCkgPT09IDApIHtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICB2YXIgbGVuID0gY291bnRTeW1ib2xzKGxhYmVsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBzdGF0dXMgPSBmaW5kU3RhdHVzKGxhYmVsLmNvZGVQb2ludEF0KGkpKTtcbiAgICBpZiAoKHByb2Nlc3NpbmcgPT09IFBST0NFU1NJTkdfT1BUSU9OUy5UUkFOU0lUSU9OQUwgJiYgc3RhdHVzWzFdICE9PSBcInZhbGlkXCIpIHx8XG4gICAgICAgIChwcm9jZXNzaW5nID09PSBQUk9DRVNTSU5HX09QVElPTlMuTk9OVFJBTlNJVElPTkFMICYmXG4gICAgICAgICBzdGF0dXNbMV0gIT09IFwidmFsaWRcIiAmJiBzdGF0dXNbMV0gIT09IFwiZGV2aWF0aW9uXCIpKSB7XG4gICAgICBlcnJvciA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxhYmVsOiBsYWJlbCxcbiAgICBlcnJvcjogZXJyb3JcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc2luZyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pIHtcbiAgdmFyIHJlc3VsdCA9IG1hcENoYXJzKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbik7XG4gIHJlc3VsdC5zdHJpbmcgPSBub3JtYWxpemUocmVzdWx0LnN0cmluZyk7XG5cbiAgdmFyIGxhYmVscyA9IHJlc3VsdC5zdHJpbmcuc3BsaXQoXCIuXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHZhbGlkYXRlTGFiZWwobGFiZWxzW2ldKTtcbiAgICAgIGxhYmVsc1tpXSA9IHZhbGlkYXRpb24ubGFiZWw7XG4gICAgICByZXN1bHQuZXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgdmFsaWRhdGlvbi5lcnJvcjtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdHJpbmc6IGxhYmVscy5qb2luKFwiLlwiKSxcbiAgICBlcnJvcjogcmVzdWx0LmVycm9yXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzLnRvQVNDSUkgPSBmdW5jdGlvbihkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24sIHZlcmlmeURuc0xlbmd0aCkge1xuICB2YXIgcmVzdWx0ID0gcHJvY2Vzc2luZyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pO1xuICB2YXIgbGFiZWxzID0gcmVzdWx0LnN0cmluZy5zcGxpdChcIi5cIik7XG4gIGxhYmVscyA9IGxhYmVscy5tYXAoZnVuY3Rpb24obCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcHVueWNvZGUudG9BU0NJSShsKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgICByZXR1cm4gbDtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh2ZXJpZnlEbnNMZW5ndGgpIHtcbiAgICB2YXIgdG90YWwgPSBsYWJlbHMuc2xpY2UoMCwgbGFiZWxzLmxlbmd0aCAtIDEpLmpvaW4oXCIuXCIpLmxlbmd0aDtcbiAgICBpZiAodG90YWwubGVuZ3RoID4gMjUzIHx8IHRvdGFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBsYWJlbHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChsYWJlbHMubGVuZ3RoID4gNjMgfHwgbGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXN1bHQuZXJyb3IgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmVzdWx0LmVycm9yKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGxhYmVscy5qb2luKFwiLlwiKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnRvVW5pY29kZSA9IGZ1bmN0aW9uKGRvbWFpbl9uYW1lLCB1c2VTVEQzKSB7XG4gIHZhciByZXN1bHQgPSBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBQUk9DRVNTSU5HX09QVElPTlMuTk9OVFJBTlNJVElPTkFMKTtcblxuICByZXR1cm4ge1xuICAgIGRvbWFpbjogcmVzdWx0LnN0cmluZyxcbiAgICBlcnJvcjogcmVzdWx0LmVycm9yXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5QUk9DRVNTSU5HX09QVElPTlMgPSBQUk9DRVNTSU5HX09QVElPTlM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xyXG5jb25zdCBwdW55Y29kZSA9IHJlcXVpcmUoXCJwdW55Y29kZVwiKTtcclxuY29uc3QgdHI0NiA9IHJlcXVpcmUoXCJ0cjQ2XCIpO1xyXG5cclxuY29uc3Qgc3BlY2lhbFNjaGVtZXMgPSB7XHJcbiAgZnRwOiAyMSxcclxuICBmaWxlOiBudWxsLFxyXG4gIGdvcGhlcjogNzAsXHJcbiAgaHR0cDogODAsXHJcbiAgaHR0cHM6IDQ0MyxcclxuICB3czogODAsXHJcbiAgd3NzOiA0NDNcclxufTtcclxuXHJcbmNvbnN0IGZhaWx1cmUgPSBTeW1ib2woXCJmYWlsdXJlXCIpO1xyXG5cclxuZnVuY3Rpb24gY291bnRTeW1ib2xzKHN0cikge1xyXG4gIHJldHVybiBwdW55Y29kZS51Y3MyLmRlY29kZShzdHIpLmxlbmd0aDtcclxufVxyXG5cclxuZnVuY3Rpb24gYXQoaW5wdXQsIGlkeCkge1xyXG4gIGNvbnN0IGMgPSBpbnB1dFtpZHhdO1xyXG4gIHJldHVybiBpc05hTihjKSA/IHVuZGVmaW5lZCA6IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJRGlnaXQoYykge1xyXG4gIHJldHVybiBjID49IDB4MzAgJiYgYyA8PSAweDM5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJQWxwaGEoYykge1xyXG4gIHJldHVybiAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4N0EpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHtcclxuICByZXR1cm4gaXNBU0NJSUFscGhhKGMpIHx8IGlzQVNDSUlEaWdpdChjKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBU0NJSUhleChjKSB7XHJcbiAgcmV0dXJuIGlzQVNDSUlEaWdpdChjKSB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg0NikgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4NjYpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NpbmdsZURvdChidWZmZXIpIHtcclxuICByZXR1cm4gYnVmZmVyID09PSBcIi5cIiB8fCBidWZmZXIudG9Mb3dlckNhc2UoKSA9PT0gXCIlMmVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEb3VibGVEb3QoYnVmZmVyKSB7XHJcbiAgYnVmZmVyID0gYnVmZmVyLnRvTG93ZXJDYXNlKCk7XHJcbiAgcmV0dXJuIGJ1ZmZlciA9PT0gXCIuLlwiIHx8IGJ1ZmZlciA9PT0gXCIlMmUuXCIgfHwgYnVmZmVyID09PSBcIi4lMmVcIiB8fCBidWZmZXIgPT09IFwiJTJlJTJlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2luZG93c0RyaXZlTGV0dGVyQ29kZVBvaW50cyhjcDEsIGNwMikge1xyXG4gIHJldHVybiBpc0FTQ0lJQWxwaGEoY3AxKSAmJiAoY3AyID09PSA1OCB8fCBjcDIgPT09IDEyNCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID09PSAyICYmIGlzQVNDSUlBbHBoYShzdHJpbmcuY29kZVBvaW50QXQoMCkpICYmIChzdHJpbmdbMV0gPT09IFwiOlwiIHx8IHN0cmluZ1sxXSA9PT0gXCJ8XCIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc05vcm1hbGl6ZWRXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgaXNBU0NJSUFscGhhKHN0cmluZy5jb2RlUG9pbnRBdCgwKSkgJiYgc3RyaW5nWzFdID09PSBcIjpcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50KHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcuc2VhcmNoKC9cXHUwMDAwfFxcdTAwMDl8XFx1MDAwQXxcXHUwMDBEfFxcdTAwMjB8I3wlfFxcL3w6fFxcP3xAfFxcW3xcXFxcfFxcXS8pICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50RXhjbHVkaW5nUGVyY2VudChzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLnNlYXJjaCgvXFx1MDAwMHxcXHUwMDA5fFxcdTAwMEF8XFx1MDAwRHxcXHUwMDIwfCN8XFwvfDp8XFw/fEB8XFxbfFxcXFx8XFxdLykgIT09IC0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NwZWNpYWxTY2hlbWUoc2NoZW1lKSB7XHJcbiAgcmV0dXJuIHNwZWNpYWxTY2hlbWVzW3NjaGVtZV0gIT09IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTcGVjaWFsKHVybCkge1xyXG4gIHJldHVybiBpc1NwZWNpYWxTY2hlbWUodXJsLnNjaGVtZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRQb3J0KHNjaGVtZSkge1xyXG4gIHJldHVybiBzcGVjaWFsU2NoZW1lc1tzY2hlbWVdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50RW5jb2RlKGMpIHtcclxuICBsZXQgaGV4ID0gYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICBpZiAoaGV4Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgaGV4ID0gXCIwXCIgKyBoZXg7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gXCIlXCIgKyBoZXg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHV0ZjhQZXJjZW50RW5jb2RlKGMpIHtcclxuICBjb25zdCBidWYgPSBuZXcgQnVmZmVyKGMpO1xyXG5cclxuICBsZXQgc3RyID0gXCJcIjtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyArK2kpIHtcclxuICAgIHN0ciArPSBwZXJjZW50RW5jb2RlKGJ1ZltpXSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1dGY4UGVyY2VudERlY29kZShzdHIpIHtcclxuICBjb25zdCBpbnB1dCA9IG5ldyBCdWZmZXIoc3RyKTtcclxuICBjb25zdCBvdXRwdXQgPSBbXTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoaW5wdXRbaV0gIT09IDM3KSB7XHJcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0W2ldKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wdXRbaV0gPT09IDM3ICYmIGlzQVNDSUlIZXgoaW5wdXRbaSArIDFdKSAmJiBpc0FTQ0lJSGV4KGlucHV0W2kgKyAyXSkpIHtcclxuICAgICAgb3V0cHV0LnB1c2gocGFyc2VJbnQoaW5wdXQuc2xpY2UoaSArIDEsIGkgKyAzKS50b1N0cmluZygpLCAxNikpO1xyXG4gICAgICBpICs9IDI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRwdXQucHVzaChpbnB1dFtpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBuZXcgQnVmZmVyKG91dHB1dCkudG9TdHJpbmcoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKGMpIHtcclxuICByZXR1cm4gYyA8PSAweDFGIHx8IGMgPiAweDdFO1xyXG59XHJcblxyXG5jb25zdCBleHRyYVBhdGhQZXJjZW50RW5jb2RlU2V0ID0gbmV3IFNldChbMzIsIDM0LCAzNSwgNjAsIDYyLCA2MywgOTYsIDEyMywgMTI1XSk7XHJcbmZ1bmN0aW9uIGlzUGF0aFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUoYykgfHwgZXh0cmFQYXRoUGVyY2VudEVuY29kZVNldC5oYXMoYyk7XHJcbn1cclxuXHJcbmNvbnN0IGV4dHJhVXNlcmluZm9QZXJjZW50RW5jb2RlU2V0ID1cclxuICBuZXcgU2V0KFs0NywgNTgsIDU5LCA2MSwgNjQsIDkxLCA5MiwgOTMsIDk0LCAxMjRdKTtcclxuZnVuY3Rpb24gaXNVc2VyaW5mb1BlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBpc1BhdGhQZXJjZW50RW5jb2RlKGMpIHx8IGV4dHJhVXNlcmluZm9QZXJjZW50RW5jb2RlU2V0LmhhcyhjKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGVyY2VudEVuY29kZUNoYXIoYywgZW5jb2RlU2V0UHJlZGljYXRlKSB7XHJcbiAgY29uc3QgY1N0ciA9IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG5cclxuICBpZiAoZW5jb2RlU2V0UHJlZGljYXRlKGMpKSB7XHJcbiAgICByZXR1cm4gdXRmOFBlcmNlbnRFbmNvZGUoY1N0cik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY1N0cjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY0TnVtYmVyKGlucHV0KSB7XHJcbiAgbGV0IFIgPSAxMDtcclxuXHJcbiAgaWYgKGlucHV0Lmxlbmd0aCA+PSAyICYmIGlucHV0LmNoYXJBdCgwKSA9PT0gXCIwXCIgJiYgaW5wdXQuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCkgPT09IFwieFwiKSB7XHJcbiAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZygyKTtcclxuICAgIFIgPSAxNjtcclxuICB9IGVsc2UgaWYgKGlucHV0Lmxlbmd0aCA+PSAyICYmIGlucHV0LmNoYXJBdCgwKSA9PT0gXCIwXCIpIHtcclxuICAgIGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDEpO1xyXG4gICAgUiA9IDg7XHJcbiAgfVxyXG5cclxuICBpZiAoaW5wdXQgPT09IFwiXCIpIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVnZXggPSBSID09PSAxMCA/IC9bXjAtOV0vIDogKFIgPT09IDE2ID8gL1teMC05QS1GYS1mXS8gOiAvW14wLTddLyk7XHJcbiAgaWYgKHJlZ2V4LnRlc3QoaW5wdXQpKSB7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJzZUludChpbnB1dCwgUik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlSVB2NChpbnB1dCkge1xyXG4gIGNvbnN0IHBhcnRzID0gaW5wdXQuc3BsaXQoXCIuXCIpO1xyXG4gIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gXCJcIikge1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgcGFydHMucG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAocGFydHMubGVuZ3RoID4gNCkge1xyXG4gICAgcmV0dXJuIGlucHV0O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbnVtYmVycyA9IFtdO1xyXG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgaWYgKHBhcnQgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgbiA9IHBhcnNlSVB2NE51bWJlcihwYXJ0KTtcclxuICAgIGlmIChuID09PSBmYWlsdXJlKSB7XHJcbiAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBudW1iZXJzLnB1c2gobik7XHJcbiAgfVxyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoIC0gMTsgKytpKSB7XHJcbiAgICBpZiAobnVtYmVyc1tpXSA+IDI1NSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSA+PSBNYXRoLnBvdygyNTYsIDUgLSBudW1iZXJzLmxlbmd0aCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgbGV0IGlwdjQgPSBudW1iZXJzLnBvcCgpO1xyXG4gIGxldCBjb3VudGVyID0gMDtcclxuXHJcbiAgZm9yIChjb25zdCBuIG9mIG51bWJlcnMpIHtcclxuICAgIGlwdjQgKz0gbiAqIE1hdGgucG93KDI1NiwgMyAtIGNvdW50ZXIpO1xyXG4gICAgKytjb3VudGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGlwdjQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcykge1xyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGxldCBuID0gYWRkcmVzcztcclxuXHJcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gNDsgKytpKSB7XHJcbiAgICBvdXRwdXQgPSBTdHJpbmcobiAlIDI1NikgKyBvdXRwdXQ7XHJcbiAgICBpZiAoaSAhPT0gNCkge1xyXG4gICAgICBvdXRwdXQgPSBcIi5cIiArIG91dHB1dDtcclxuICAgIH1cclxuICAgIG4gPSBNYXRoLmZsb29yKG4gLyAyNTYpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY2KGlucHV0KSB7XHJcbiAgY29uc3QgYWRkcmVzcyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcclxuICBsZXQgcGllY2VJbmRleCA9IDA7XHJcbiAgbGV0IGNvbXByZXNzID0gbnVsbDtcclxuICBsZXQgcG9pbnRlciA9IDA7XHJcblxyXG4gIGlucHV0ID0gcHVueWNvZGUudWNzMi5kZWNvZGUoaW5wdXQpO1xyXG5cclxuICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDU4KSB7XHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlciArIDFdICE9PSA1OCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBwb2ludGVyICs9IDI7XHJcbiAgICArK3BpZWNlSW5kZXg7XHJcbiAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XHJcbiAgfVxyXG5cclxuICB3aGlsZSAocG9pbnRlciA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgaWYgKHBpZWNlSW5kZXggPT09IDgpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA1OCkge1xyXG4gICAgICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgICsrcGllY2VJbmRleDtcclxuICAgICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmFsdWUgPSAwO1xyXG4gICAgbGV0IGxlbmd0aCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGxlbmd0aCA8IDQgJiYgaXNBU0NJSUhleChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZSAqIDB4MTAgKyBwYXJzZUludChhdChpbnB1dCwgcG9pbnRlciksIDE2KTtcclxuICAgICAgKytwb2ludGVyO1xyXG4gICAgICArK2xlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDQ2KSB7XHJcbiAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcG9pbnRlciAtPSBsZW5ndGg7XHJcblxyXG4gICAgICBpZiAocGllY2VJbmRleCA+IDYpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG51bWJlcnNTZWVuID0gMDtcclxuXHJcbiAgICAgIHdoaWxlIChpbnB1dFtwb2ludGVyXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbGV0IGlwdjRQaWVjZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA+IDApIHtcclxuICAgICAgICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNDYgJiYgbnVtYmVyc1NlZW4gPCA0KSB7XHJcbiAgICAgICAgICAgICsrcG9pbnRlcjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoaW5wdXRbcG9pbnRlcl0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdoaWxlIChpc0FTQ0lJRGlnaXQoaW5wdXRbcG9pbnRlcl0pKSB7XHJcbiAgICAgICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludChhdChpbnB1dCwgcG9pbnRlcikpO1xyXG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpcHY0UGllY2UgPSBudW1iZXI7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGlwdjRQaWVjZSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlwdjRQaWVjZSA9IGlwdjRQaWVjZSAqIDEwICsgbnVtYmVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA+IDI1NSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICsrcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFkZHJlc3NbcGllY2VJbmRleF0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdICogMHgxMDAgKyBpcHY0UGllY2U7XHJcblxyXG4gICAgICAgICsrbnVtYmVyc1NlZW47XHJcblxyXG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA9PT0gMiB8fCBudW1iZXJzU2VlbiA9PT0gNCkge1xyXG4gICAgICAgICAgKytwaWVjZUluZGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG51bWJlcnNTZWVuICE9PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfSBlbHNlIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgICAgKytwb2ludGVyO1xyXG4gICAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0W3BvaW50ZXJdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IHZhbHVlO1xyXG4gICAgKytwaWVjZUluZGV4O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbXByZXNzICE9PSBudWxsKSB7XHJcbiAgICBsZXQgc3dhcHMgPSBwaWVjZUluZGV4IC0gY29tcHJlc3M7XHJcbiAgICBwaWVjZUluZGV4ID0gNztcclxuICAgIHdoaWxlIChwaWVjZUluZGV4ICE9PSAwICYmIHN3YXBzID4gMCkge1xyXG4gICAgICBjb25zdCB0ZW1wID0gYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV07XHJcbiAgICAgIGFkZHJlc3NbY29tcHJlc3MgKyBzd2FwcyAtIDFdID0gYWRkcmVzc1twaWVjZUluZGV4XTtcclxuICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IHRlbXA7XHJcbiAgICAgIC0tcGllY2VJbmRleDtcclxuICAgICAgLS1zd2FwcztcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKGNvbXByZXNzID09PSBudWxsICYmIHBpZWNlSW5kZXggIT09IDgpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFkZHJlc3M7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZUlQdjYoYWRkcmVzcykge1xyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGNvbnN0IHNlcVJlc3VsdCA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGFkZHJlc3MpO1xyXG4gIGNvbnN0IGNvbXByZXNzID0gc2VxUmVzdWx0LmlkeDtcclxuICBsZXQgaWdub3JlMCA9IGZhbHNlO1xyXG5cclxuICBmb3IgKGxldCBwaWVjZUluZGV4ID0gMDsgcGllY2VJbmRleCA8PSA3OyArK3BpZWNlSW5kZXgpIHtcclxuICAgIGlmIChpZ25vcmUwICYmIGFkZHJlc3NbcGllY2VJbmRleF0gPT09IDApIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9IGVsc2UgaWYgKGlnbm9yZTApIHtcclxuICAgICAgaWdub3JlMCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21wcmVzcyA9PT0gcGllY2VJbmRleCkge1xyXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSBwaWVjZUluZGV4ID09PSAwID8gXCI6OlwiIDogXCI6XCI7XHJcbiAgICAgIG91dHB1dCArPSBzZXBhcmF0b3I7XHJcbiAgICAgIGlnbm9yZTAgPSB0cnVlO1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBvdXRwdXQgKz0gYWRkcmVzc1twaWVjZUluZGV4XS50b1N0cmluZygxNik7XHJcblxyXG4gICAgaWYgKHBpZWNlSW5kZXggIT09IDcpIHtcclxuICAgICAgb3V0cHV0ICs9IFwiOlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VIb3N0KGlucHV0LCBpc1NwZWNpYWxBcmcpIHtcclxuICBpZiAoaW5wdXRbMF0gPT09IFwiW1wiKSB7XHJcbiAgICBpZiAoaW5wdXRbaW5wdXQubGVuZ3RoIC0gMV0gIT09IFwiXVwiKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJzZUlQdjYoaW5wdXQuc3Vic3RyaW5nKDEsIGlucHV0Lmxlbmd0aCAtIDEpKTtcclxuICB9XHJcblxyXG4gIGlmICghaXNTcGVjaWFsQXJnKSB7XHJcbiAgICByZXR1cm4gcGFyc2VPcGFxdWVIb3N0KGlucHV0KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGRvbWFpbiA9IHV0ZjhQZXJjZW50RGVjb2RlKGlucHV0KTtcclxuICBjb25zdCBhc2NpaURvbWFpbiA9IHRyNDYudG9BU0NJSShkb21haW4sIGZhbHNlLCB0cjQ2LlBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwsIGZhbHNlKTtcclxuICBpZiAoYXNjaWlEb21haW4gPT09IG51bGwpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbnRhaW5zRm9yYmlkZGVuSG9zdENvZGVQb2ludChhc2NpaURvbWFpbikpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgaXB2NEhvc3QgPSBwYXJzZUlQdjQoYXNjaWlEb21haW4pO1xyXG4gIGlmICh0eXBlb2YgaXB2NEhvc3QgPT09IFwibnVtYmVyXCIgfHwgaXB2NEhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgIHJldHVybiBpcHY0SG9zdDtcclxuICB9XHJcblxyXG4gIHJldHVybiBhc2NpaURvbWFpbjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VPcGFxdWVIb3N0KGlucHV0KSB7XHJcbiAgaWYgKGNvbnRhaW5zRm9yYmlkZGVuSG9zdENvZGVQb2ludEV4Y2x1ZGluZ1BlcmNlbnQoaW5wdXQpKSB7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGNvbnN0IGRlY29kZWQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShpbnB1dCk7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgKytpKSB7XHJcbiAgICBvdXRwdXQgKz0gcGVyY2VudEVuY29kZUNoYXIoZGVjb2RlZFtpXSwgaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYXJyKSB7XHJcbiAgbGV0IG1heElkeCA9IG51bGw7XHJcbiAgbGV0IG1heExlbiA9IDE7IC8vIG9ubHkgZmluZCBlbGVtZW50cyA+IDFcclxuICBsZXQgY3VyclN0YXJ0ID0gbnVsbDtcclxuICBsZXQgY3VyckxlbiA9IDA7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoYXJyW2ldICE9PSAwKSB7XHJcbiAgICAgIGlmIChjdXJyTGVuID4gbWF4TGVuKSB7XHJcbiAgICAgICAgbWF4SWR4ID0gY3VyclN0YXJ0O1xyXG4gICAgICAgIG1heExlbiA9IGN1cnJMZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1cnJTdGFydCA9IG51bGw7XHJcbiAgICAgIGN1cnJMZW4gPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGN1cnJTdGFydCA9PT0gbnVsbCkge1xyXG4gICAgICAgIGN1cnJTdGFydCA9IGk7XHJcbiAgICAgIH1cclxuICAgICAgKytjdXJyTGVuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaWYgdHJhaWxpbmcgemVyb3NcclxuICBpZiAoY3VyckxlbiA+IG1heExlbikge1xyXG4gICAgbWF4SWR4ID0gY3VyclN0YXJ0O1xyXG4gICAgbWF4TGVuID0gY3VyckxlbjtcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBpZHg6IG1heElkeCxcclxuICAgIGxlbjogbWF4TGVuXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSG9zdChob3N0KSB7XHJcbiAgaWYgKHR5cGVvZiBob3N0ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICByZXR1cm4gc2VyaWFsaXplSVB2NChob3N0KTtcclxuICB9XHJcblxyXG4gIC8vIElQdjYgc2VyaWFsaXplclxyXG4gIGlmIChob3N0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgIHJldHVybiBcIltcIiArIHNlcmlhbGl6ZUlQdjYoaG9zdCkgKyBcIl1cIjtcclxuICB9XHJcblxyXG4gIHJldHVybiBob3N0O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0cmltQ29udHJvbENoYXJzKHVybCkge1xyXG4gIHJldHVybiB1cmwucmVwbGFjZSgvXltcXHUwMDAwLVxcdTAwMUZcXHUwMDIwXSt8W1xcdTAwMDAtXFx1MDAxRlxcdTAwMjBdKyQvZywgXCJcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyaW1UYWJBbmROZXdsaW5lKHVybCkge1xyXG4gIHJldHVybiB1cmwucmVwbGFjZSgvXFx1MDAwOXxcXHUwMDBBfFxcdTAwMEQvZywgXCJcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3J0ZW5QYXRoKHVybCkge1xyXG4gIGNvbnN0IHBhdGggPSB1cmwucGF0aDtcclxuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgaWYgKHVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIHBhdGgubGVuZ3RoID09PSAxICYmIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlcihwYXRoWzBdKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcGF0aC5wb3AoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5jbHVkZXNDcmVkZW50aWFscyh1cmwpIHtcclxuICByZXR1cm4gdXJsLnVzZXJuYW1lICE9PSBcIlwiIHx8IHVybC5wYXNzd29yZCAhPT0gXCJcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh1cmwpIHtcclxuICByZXR1cm4gdXJsLmhvc3QgPT09IG51bGwgfHwgdXJsLmhvc3QgPT09IFwiXCIgfHwgdXJsLmNhbm5vdEJlQUJhc2VVUkwgfHwgdXJsLnNjaGVtZSA9PT0gXCJmaWxlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlcihzdHJpbmcpIHtcclxuICByZXR1cm4gL15bQS1aYS16XTokLy50ZXN0KHN0cmluZyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFVSTFN0YXRlTWFjaGluZShpbnB1dCwgYmFzZSwgZW5jb2RpbmdPdmVycmlkZSwgdXJsLCBzdGF0ZU92ZXJyaWRlKSB7XHJcbiAgdGhpcy5wb2ludGVyID0gMDtcclxuICB0aGlzLmlucHV0ID0gaW5wdXQ7XHJcbiAgdGhpcy5iYXNlID0gYmFzZSB8fCBudWxsO1xyXG4gIHRoaXMuZW5jb2RpbmdPdmVycmlkZSA9IGVuY29kaW5nT3ZlcnJpZGUgfHwgXCJ1dGYtOFwiO1xyXG4gIHRoaXMuc3RhdGVPdmVycmlkZSA9IHN0YXRlT3ZlcnJpZGU7XHJcbiAgdGhpcy51cmwgPSB1cmw7XHJcbiAgdGhpcy5mYWlsdXJlID0gZmFsc2U7XHJcbiAgdGhpcy5wYXJzZUVycm9yID0gZmFsc2U7XHJcblxyXG4gIGlmICghdGhpcy51cmwpIHtcclxuICAgIHRoaXMudXJsID0ge1xyXG4gICAgICBzY2hlbWU6IFwiXCIsXHJcbiAgICAgIHVzZXJuYW1lOiBcIlwiLFxyXG4gICAgICBwYXNzd29yZDogXCJcIixcclxuICAgICAgaG9zdDogbnVsbCxcclxuICAgICAgcG9ydDogbnVsbCxcclxuICAgICAgcGF0aDogW10sXHJcbiAgICAgIHF1ZXJ5OiBudWxsLFxyXG4gICAgICBmcmFnbWVudDogbnVsbCxcclxuXHJcbiAgICAgIGNhbm5vdEJlQUJhc2VVUkw6IGZhbHNlXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcyA9IHRyaW1Db250cm9sQ2hhcnModGhpcy5pbnB1dCk7XHJcbiAgICBpZiAocmVzICE9PSB0aGlzLmlucHV0KSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlucHV0ID0gcmVzO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVzID0gdHJpbVRhYkFuZE5ld2xpbmUodGhpcy5pbnB1dCk7XHJcbiAgaWYgKHJlcyAhPT0gdGhpcy5pbnB1dCkge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICB9XHJcbiAgdGhpcy5pbnB1dCA9IHJlcztcclxuXHJcbiAgdGhpcy5zdGF0ZSA9IHN0YXRlT3ZlcnJpZGUgfHwgXCJzY2hlbWUgc3RhcnRcIjtcclxuXHJcbiAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gIHRoaXMuYXRGbGFnID0gZmFsc2U7XHJcbiAgdGhpcy5hcnJGbGFnID0gZmFsc2U7XHJcbiAgdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcgPSBmYWxzZTtcclxuXHJcbiAgdGhpcy5pbnB1dCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHRoaXMuaW5wdXQpO1xyXG5cclxuICBmb3IgKDsgdGhpcy5wb2ludGVyIDw9IHRoaXMuaW5wdXQubGVuZ3RoOyArK3RoaXMucG9pbnRlcikge1xyXG4gICAgY29uc3QgYyA9IHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyXTtcclxuICAgIGNvbnN0IGNTdHIgPSBpc05hTihjKSA/IHVuZGVmaW5lZCA6IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG5cclxuICAgIC8vIGV4ZWMgc3RhdGUgbWFjaGluZVxyXG4gICAgY29uc3QgcmV0ID0gdGhpc1tcInBhcnNlIFwiICsgdGhpcy5zdGF0ZV0oYywgY1N0cik7XHJcbiAgICBpZiAoIXJldCkge1xyXG4gICAgICBicmVhazsgLy8gdGVybWluYXRlIGFsZ29yaXRobVxyXG4gICAgfSBlbHNlIGlmIChyZXQgPT09IGZhaWx1cmUpIHtcclxuICAgICAgdGhpcy5mYWlsdXJlID0gdHJ1ZTtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2Ugc2NoZW1lIHN0YXJ0XCJdID0gZnVuY3Rpb24gcGFyc2VTY2hlbWVTdGFydChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlBbHBoYShjKSkge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwic2NoZW1lXCI7XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJubyBzY2hlbWVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzY2hlbWVcIl0gPSBmdW5jdGlvbiBwYXJzZVNjaGVtZShjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PT0gNDMgfHwgYyA9PT0gNDUgfHwgYyA9PT0gNDYpIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHIudG9Mb3dlckNhc2UoKTtcclxuICB9IGVsc2UgaWYgKGMgPT09IDU4KSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmICFpc1NwZWNpYWxTY2hlbWUodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlzU3BlY2lhbCh0aGlzLnVybCkgJiYgaXNTcGVjaWFsU2NoZW1lKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKChpbmNsdWRlc0NyZWRlbnRpYWxzKHRoaXMudXJsKSB8fCB0aGlzLnVybC5wb3J0ICE9PSBudWxsKSAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmICh0aGlzLnVybC5ob3N0ID09PSBcIlwiIHx8IHRoaXMudXJsLmhvc3QgPT09IG51bGwpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnVybC5zY2hlbWUgPSB0aGlzLmJ1ZmZlcjtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gIT09IDQ3IHx8IHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0gIT09IDQ3KSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmaWxlXCI7XHJcbiAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgdGhpcy5iYXNlICE9PSBudWxsICYmIHRoaXMuYmFzZS5zY2hlbWUgPT09IHRoaXMudXJsLnNjaGVtZSkge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIHJlbGF0aXZlIG9yIGF1dGhvcml0eVwiO1xyXG4gICAgfSBlbHNlIGlmIChpc1NwZWNpYWwodGhpcy51cmwpKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IHNsYXNoZXNcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSA9PT0gNDcpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBvciBhdXRob3JpdHlcIjtcclxuICAgICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKFwiXCIpO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJjYW5ub3QtYmUtYS1iYXNlLVVSTCBwYXRoXCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJubyBzY2hlbWVcIjtcclxuICAgIHRoaXMucG9pbnRlciA9IC0xO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBubyBzY2hlbWVcIl0gPSBmdW5jdGlvbiBwYXJzZU5vU2NoZW1lKGMpIHtcclxuICBpZiAodGhpcy5iYXNlID09PSBudWxsIHx8ICh0aGlzLmJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjICE9PSAzNSkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH0gZWxzZSBpZiAodGhpcy5iYXNlLmNhbm5vdEJlQUJhc2VVUkwgJiYgYyA9PT0gMzUpIHtcclxuICAgIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYmFzZS5zY2hlbWU7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgdGhpcy51cmwuY2Fubm90QmVBQmFzZVVSTCA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAodGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIHJlbGF0aXZlIG9yIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlU3BlY2lhbFJlbGF0aXZlT3JBdXRob3JpdHkoYykge1xyXG4gIGlmIChjID09PSA0NyAmJiB0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdID09PSA0Nykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwic3BlY2lhbCBhdXRob3JpdHkgaWdub3JlIHNsYXNoZXNcIjtcclxuICAgICsrdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicmVsYXRpdmVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcGF0aCBvciBhdXRob3JpdHlcIl0gPSBmdW5jdGlvbiBwYXJzZVBhdGhPckF1dGhvcml0eShjKSB7XHJcbiAgaWYgKGMgPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJhdXRob3JpdHlcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSByZWxhdGl2ZVwiXSA9IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmUoYykge1xyXG4gIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYmFzZS5zY2hlbWU7XHJcbiAgaWYgKGlzTmFOKGMpKSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICB9IGVsc2UgaWYgKGMgPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZSBzbGFzaFwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNjMpIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSB0aGlzLmJhc2UucXVlcnk7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5Mikge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoMCwgdGhpcy5iYXNlLnBhdGgubGVuZ3RoIC0gMSk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSByZWxhdGl2ZSBzbGFzaFwiXSA9IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVTbGFzaChjKSB7XHJcbiAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSkge1xyXG4gICAgaWYgKGMgPT09IDkyKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImF1dGhvcml0eVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIGF1dGhvcml0eSBzbGFzaGVzXCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsQXV0aG9yaXR5U2xhc2hlcyhjKSB7XHJcbiAgaWYgKGMgPT09IDQ3ICYmIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiXSA9IGZ1bmN0aW9uIHBhcnNlU3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXMoYykge1xyXG4gIGlmIChjICE9PSA0NyAmJiBjICE9PSA5Mikge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiYXV0aG9yaXR5XCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlQXV0aG9yaXR5KGMsIGNTdHIpIHtcclxuICBpZiAoYyA9PT0gNjQpIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5hdEZsYWcpIHtcclxuICAgICAgdGhpcy5idWZmZXIgPSBcIiU0MFwiICsgdGhpcy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0RmxhZyA9IHRydWU7XHJcblxyXG4gICAgLy8gY2FyZWZ1bCwgdGhpcyBpcyBiYXNlZCBvbiBidWZmZXIgYW5kIGhhcyBpdHMgb3duIHBvaW50ZXIgKHRoaXMucG9pbnRlciAhPSBwb2ludGVyKSBhbmQgaW5uZXIgY2hhcnNcclxuICAgIGNvbnN0IGxlbiA9IGNvdW50U3ltYm9scyh0aGlzLmJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBwb2ludGVyID0gMDsgcG9pbnRlciA8IGxlbjsgKytwb2ludGVyKSB7XHJcbiAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHRoaXMuYnVmZmVyLmNvZGVQb2ludEF0KHBvaW50ZXIpO1xyXG5cclxuICAgICAgaWYgKGNvZGVQb2ludCA9PT0gNTggJiYgIXRoaXMucGFzc3dvcmRUb2tlblNlZW5GbGFnKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVuY29kZWRDb2RlUG9pbnRzID0gcGVyY2VudEVuY29kZUNoYXIoY29kZVBvaW50LCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgICAgIGlmICh0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZykge1xyXG4gICAgICAgIHRoaXMudXJsLnBhc3N3b3JkICs9IGVuY29kZWRDb2RlUG9pbnRzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLnVzZXJuYW1lICs9IGVuY29kZWRDb2RlUG9pbnRzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgfSBlbHNlIGlmIChpc05hTihjKSB8fCBjID09PSA0NyB8fCBjID09PSA2MyB8fCBjID09PSAzNSB8fFxyXG4gICAgICAgICAgICAgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpKSB7XHJcbiAgICBpZiAodGhpcy5hdEZsYWcgJiYgdGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvaW50ZXIgLT0gY291bnRTeW1ib2xzKHRoaXMuYnVmZmVyKSArIDE7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJob3N0XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBob3N0bmFtZVwiXSA9XHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBob3N0XCJdID0gZnVuY3Rpb24gcGFyc2VIb3N0TmFtZShjLCBjU3RyKSB7XHJcbiAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSAmJiB0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgaG9zdFwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNTggJiYgIXRoaXMuYXJyRmxhZykge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhvc3QgPSBwYXJzZUhvc3QodGhpcy5idWZmZXIsIGlzU3BlY2lhbCh0aGlzLnVybCkpO1xyXG4gICAgaWYgKGhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cmwuaG9zdCA9IGhvc3Q7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwb3J0XCI7XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlID09PSBcImhvc3RuYW1lXCIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUgfHxcclxuICAgICAgICAgICAgIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlICYmIHRoaXMuYnVmZmVyID09PSBcIlwiICYmXHJcbiAgICAgICAgICAgICAgIChpbmNsdWRlc0NyZWRlbnRpYWxzKHRoaXMudXJsKSB8fCB0aGlzLnVybC5wb3J0ICE9PSBudWxsKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdCA9IHBhcnNlSG9zdCh0aGlzLmJ1ZmZlciwgaXNTcGVjaWFsKHRoaXMudXJsKSk7XHJcbiAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVybC5ob3N0ID0gaG9zdDtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoYyA9PT0gOTEpIHtcclxuICAgICAgdGhpcy5hcnJGbGFnID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoYyA9PT0gOTMpIHtcclxuICAgICAgdGhpcy5hcnJGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcG9ydFwiXSA9IGZ1bmN0aW9uIHBhcnNlUG9ydChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlEaWdpdChjKSkge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9IGVsc2UgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDYzIHx8IGMgPT09IDM1IHx8XHJcbiAgICAgICAgICAgICAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikgfHxcclxuICAgICAgICAgICAgIHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyICE9PSBcIlwiKSB7XHJcbiAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh0aGlzLmJ1ZmZlcik7XHJcbiAgICAgIGlmIChwb3J0ID4gTWF0aC5wb3coMiwgMTYpIC0gMSkge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwucG9ydCA9IHBvcnQgPT09IGRlZmF1bHRQb3J0KHRoaXMudXJsLnNjaGVtZSkgPyBudWxsIDogcG9ydDtcclxuICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoIHN0YXJ0XCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5jb25zdCBmaWxlT3RoZXJ3aXNlQ29kZVBvaW50cyA9IG5ldyBTZXQoWzQ3LCA5MiwgNjMsIDM1XSk7XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZVwiXSA9IGZ1bmN0aW9uIHBhcnNlRmlsZShjKSB7XHJcbiAgdGhpcy51cmwuc2NoZW1lID0gXCJmaWxlXCI7XHJcblxyXG4gIGlmIChjID09PSA0NyB8fCBjID09PSA5Mikge1xyXG4gICAgaWYgKGMgPT09IDkyKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmaWxlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIGlmIChpc05hTihjKSkge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgIH0gZWxzZSBpZiAoYyA9PT0gNjMpIHtcclxuICAgICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gICAgfSBlbHNlIGlmIChjID09PSAzNSkge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaW5wdXQubGVuZ3RoIC0gdGhpcy5wb2ludGVyIC0gMSA9PT0gMCB8fCAvLyByZW1haW5pbmcgY29uc2lzdHMgb2YgMCBjb2RlIHBvaW50c1xyXG4gICAgICAgICAgIWlzV2luZG93c0RyaXZlTGV0dGVyQ29kZVBvaW50cyhjLCB0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICAgKHRoaXMuaW5wdXQubGVuZ3RoIC0gdGhpcy5wb2ludGVyIC0gMSA+PSAyICYmIC8vIHJlbWFpbmluZyBoYXMgYXQgbGVhc3QgMiBjb2RlIHBvaW50c1xyXG4gICAgICAgICAgICFmaWxlT3RoZXJ3aXNlQ29kZVBvaW50cy5oYXModGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICAgIHNob3J0ZW5QYXRoKHRoaXMudXJsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGZpbGUgc2xhc2hcIl0gPSBmdW5jdGlvbiBwYXJzZUZpbGVTbGFzaChjKSB7XHJcbiAgaWYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgaG9zdFwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAodGhpcy5iYXNlICE9PSBudWxsICYmIHRoaXMuYmFzZS5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICAgIGlmIChpc05vcm1hbGl6ZWRXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5iYXNlLnBhdGhbMF0pKSB7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aC5wdXNoKHRoaXMuYmFzZS5wYXRoWzBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZSBob3N0XCJdID0gZnVuY3Rpb24gcGFyc2VGaWxlSG9zdChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDkyIHx8IGMgPT09IDYzIHx8IGMgPT09IDM1KSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSBcIlwiO1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBob3N0ID0gcGFyc2VIb3N0KHRoaXMuYnVmZmVyLCBpc1NwZWNpYWwodGhpcy51cmwpKTtcclxuICAgICAgaWYgKGhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaG9zdCA9PT0gXCJsb2NhbGhvc3RcIikge1xyXG4gICAgICAgIGhvc3QgPSBcIlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSBob3N0O1xyXG5cclxuICAgICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoIHN0YXJ0XCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoIHN0YXJ0XCJdID0gZnVuY3Rpb24gcGFyc2VQYXRoU3RhcnQoYykge1xyXG4gIGlmIChpc1NwZWNpYWwodGhpcy51cmwpKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuXHJcbiAgICBpZiAoYyAhPT0gNDcgJiYgYyAhPT0gOTIpIHtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGMgPT09IDYzKSB7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gIH0gZWxzZSBpZiAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiBjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICB9IGVsc2UgaWYgKGMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgaWYgKGMgIT09IDQ3KSB7XHJcbiAgICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcGF0aFwiXSA9IGZ1bmN0aW9uIHBhcnNlUGF0aChjKSB7XHJcbiAgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB8fFxyXG4gICAgICAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiAoYyA9PT0gNjMgfHwgYyA9PT0gMzUpKSkge1xyXG4gICAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEb3VibGVEb3QodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIHNob3J0ZW5QYXRoKHRoaXMudXJsKTtcclxuICAgICAgaWYgKGMgIT09IDQ3ICYmICEoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaXNTaW5nbGVEb3QodGhpcy5idWZmZXIpICYmIGMgIT09IDQ3ICYmXHJcbiAgICAgICAgICAgICAgICEoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKFwiXCIpO1xyXG4gICAgfSBlbHNlIGlmICghaXNTaW5nbGVEb3QodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIHRoaXMudXJsLnBhdGgubGVuZ3RoID09PSAwICYmIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICAgIGlmICh0aGlzLnVybC5ob3N0ICE9PSBcIlwiICYmIHRoaXMudXJsLmhvc3QgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnVybC5ob3N0ID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlclswXSArIFwiOlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXJsLnBhdGgucHVzaCh0aGlzLmJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICBpZiAodGhpcy51cmwuc2NoZW1lID09PSBcImZpbGVcIiAmJiAoYyA9PT0gdW5kZWZpbmVkIHx8IGMgPT09IDYzIHx8IGMgPT09IDM1KSkge1xyXG4gICAgICB3aGlsZSAodGhpcy51cmwucGF0aC5sZW5ndGggPiAxICYmIHRoaXMudXJsLnBhdGhbMF0gPT09IFwiXCIpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGguc2hpZnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGMgPT09IDYzKSB7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICAgIH1cclxuICAgIGlmIChjID09PSAzNSkge1xyXG4gICAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IElmIGMgaXMgbm90IGEgVVJMIGNvZGUgcG9pbnQgYW5kIG5vdCBcIiVcIiwgcGFyc2UgZXJyb3IuXHJcblxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVmZmVyICs9IHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzUGF0aFBlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgY2Fubm90LWJlLWEtYmFzZS1VUkwgcGF0aFwiXSA9IGZ1bmN0aW9uIHBhcnNlQ2Fubm90QmVBQmFzZVVSTFBhdGgoYykge1xyXG4gIGlmIChjID09PSA2Mykge1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBBZGQ6IG5vdCBhIFVSTCBjb2RlIHBvaW50XHJcbiAgICBpZiAoIWlzTmFOKGMpICYmIGMgIT09IDM3KSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNOYU4oYykpIHtcclxuICAgICAgdGhpcy51cmwucGF0aFswXSA9IHRoaXMudXJsLnBhdGhbMF0gKyBwZXJjZW50RW5jb2RlQ2hhcihjLCBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcXVlcnlcIl0gPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5KGMsIGNTdHIpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgYyA9PT0gMzUpKSB7XHJcbiAgICBpZiAoIWlzU3BlY2lhbCh0aGlzLnVybCkgfHwgdGhpcy51cmwuc2NoZW1lID09PSBcIndzXCIgfHwgdGhpcy51cmwuc2NoZW1lID09PSBcIndzc1wiKSB7XHJcbiAgICAgIHRoaXMuZW5jb2RpbmdPdmVycmlkZSA9IFwidXRmLThcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgQnVmZmVyKHRoaXMuYnVmZmVyKTsgLy8gVE9ETzogVXNlIGVuY29kaW5nIG92ZXJyaWRlIGluc3RlYWRcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGlmIChidWZmZXJbaV0gPCAweDIxIHx8IGJ1ZmZlcltpXSA+IDB4N0UgfHwgYnVmZmVyW2ldID09PSAweDIyIHx8IGJ1ZmZlcltpXSA9PT0gMHgyMyB8fFxyXG4gICAgICAgICAgYnVmZmVyW2ldID09PSAweDNDIHx8IGJ1ZmZlcltpXSA9PT0gMHgzRSkge1xyXG4gICAgICAgIHRoaXMudXJsLnF1ZXJ5ICs9IHBlcmNlbnRFbmNvZGUoYnVmZmVyW2ldKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVybC5xdWVyeSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChidWZmZXJbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogSWYgYyBpcyBub3QgYSBVUkwgY29kZSBwb2ludCBhbmQgbm90IFwiJVwiLCBwYXJzZSBlcnJvci5cclxuICAgIGlmIChjID09PSAzNyAmJlxyXG4gICAgICAoIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSkgfHxcclxuICAgICAgICAhaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDJdKSkpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZnJhZ21lbnRcIl0gPSBmdW5jdGlvbiBwYXJzZUZyYWdtZW50KGMpIHtcclxuICBpZiAoaXNOYU4oYykpIHsgLy8gZG8gbm90aGluZ1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gMHgwKSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBJZiBjIGlzIG5vdCBhIFVSTCBjb2RlIHBvaW50IGFuZCBub3QgXCIlXCIsIHBhcnNlIGVycm9yLlxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXJsLmZyYWdtZW50ICs9IHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzQzBDb250cm9sUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZVVSTCh1cmwsIGV4Y2x1ZGVGcmFnbWVudCkge1xyXG4gIGxldCBvdXRwdXQgPSB1cmwuc2NoZW1lICsgXCI6XCI7XHJcbiAgaWYgKHVybC5ob3N0ICE9PSBudWxsKSB7XHJcbiAgICBvdXRwdXQgKz0gXCIvL1wiO1xyXG5cclxuICAgIGlmICh1cmwudXNlcm5hbWUgIT09IFwiXCIgfHwgdXJsLnBhc3N3b3JkICE9PSBcIlwiKSB7XHJcbiAgICAgIG91dHB1dCArPSB1cmwudXNlcm5hbWU7XHJcbiAgICAgIGlmICh1cmwucGFzc3dvcmQgIT09IFwiXCIpIHtcclxuICAgICAgICBvdXRwdXQgKz0gXCI6XCIgKyB1cmwucGFzc3dvcmQ7XHJcbiAgICAgIH1cclxuICAgICAgb3V0cHV0ICs9IFwiQFwiO1xyXG4gICAgfVxyXG5cclxuICAgIG91dHB1dCArPSBzZXJpYWxpemVIb3N0KHVybC5ob3N0KTtcclxuXHJcbiAgICBpZiAodXJsLnBvcnQgIT09IG51bGwpIHtcclxuICAgICAgb3V0cHV0ICs9IFwiOlwiICsgdXJsLnBvcnQ7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICh1cmwuaG9zdCA9PT0gbnVsbCAmJiB1cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgb3V0cHV0ICs9IFwiLy9cIjtcclxuICB9XHJcblxyXG4gIGlmICh1cmwuY2Fubm90QmVBQmFzZVVSTCkge1xyXG4gICAgb3V0cHV0ICs9IHVybC5wYXRoWzBdO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBmb3IgKGNvbnN0IHN0cmluZyBvZiB1cmwucGF0aCkge1xyXG4gICAgICBvdXRwdXQgKz0gXCIvXCIgKyBzdHJpbmc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodXJsLnF1ZXJ5ICE9PSBudWxsKSB7XHJcbiAgICBvdXRwdXQgKz0gXCI/XCIgKyB1cmwucXVlcnk7XHJcbiAgfVxyXG5cclxuICBpZiAoIWV4Y2x1ZGVGcmFnbWVudCAmJiB1cmwuZnJhZ21lbnQgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIiNcIiArIHVybC5mcmFnbWVudDtcclxuICB9XHJcblxyXG4gIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZU9yaWdpbih0dXBsZSkge1xyXG4gIGxldCByZXN1bHQgPSB0dXBsZS5zY2hlbWUgKyBcIjovL1wiO1xyXG4gIHJlc3VsdCArPSBzZXJpYWxpemVIb3N0KHR1cGxlLmhvc3QpO1xyXG5cclxuICBpZiAodHVwbGUucG9ydCAhPT0gbnVsbCkge1xyXG4gICAgcmVzdWx0ICs9IFwiOlwiICsgdHVwbGUucG9ydDtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZVVSTCA9IHNlcmlhbGl6ZVVSTDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZVVSTE9yaWdpbiA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLW9yaWdpblxyXG4gIHN3aXRjaCAodXJsLnNjaGVtZSkge1xyXG4gICAgY2FzZSBcImJsb2JcIjpcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMT3JpZ2luKG1vZHVsZS5leHBvcnRzLnBhcnNlVVJMKHVybC5wYXRoWzBdKSk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyBzZXJpYWxpemluZyBhbiBvcGFxdWUgb3JpZ2luIHJldHVybnMgXCJudWxsXCJcclxuICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgIH1cclxuICAgIGNhc2UgXCJmdHBcIjpcclxuICAgIGNhc2UgXCJnb3BoZXJcIjpcclxuICAgIGNhc2UgXCJodHRwXCI6XHJcbiAgICBjYXNlIFwiaHR0cHNcIjpcclxuICAgIGNhc2UgXCJ3c1wiOlxyXG4gICAgY2FzZSBcIndzc1wiOlxyXG4gICAgICByZXR1cm4gc2VyaWFsaXplT3JpZ2luKHtcclxuICAgICAgICBzY2hlbWU6IHVybC5zY2hlbWUsXHJcbiAgICAgICAgaG9zdDogdXJsLmhvc3QsXHJcbiAgICAgICAgcG9ydDogdXJsLnBvcnRcclxuICAgICAgfSk7XHJcbiAgICBjYXNlIFwiZmlsZVwiOlxyXG4gICAgICAvLyBzcGVjIHNheXMgXCJleGVyY2lzZSB0byB0aGUgcmVhZGVyXCIsIGNocm9tZSBzYXlzIFwiZmlsZTovL1wiXHJcbiAgICAgIHJldHVybiBcImZpbGU6Ly9cIjtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIC8vIHNlcmlhbGl6aW5nIGFuIG9wYXF1ZSBvcmlnaW4gcmV0dXJucyBcIm51bGxcIlxyXG4gICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuYmFzaWNVUkxQYXJzZSA9IGZ1bmN0aW9uIChpbnB1dCwgb3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgIG9wdGlvbnMgPSB7fTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHVzbSA9IG5ldyBVUkxTdGF0ZU1hY2hpbmUoaW5wdXQsIG9wdGlvbnMuYmFzZVVSTCwgb3B0aW9ucy5lbmNvZGluZ092ZXJyaWRlLCBvcHRpb25zLnVybCwgb3B0aW9ucy5zdGF0ZU92ZXJyaWRlKTtcclxuICBpZiAodXNtLmZhaWx1cmUpIHtcclxuICAgIHJldHVybiBcImZhaWx1cmVcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiB1c20udXJsO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2V0VGhlVXNlcm5hbWUgPSBmdW5jdGlvbiAodXJsLCB1c2VybmFtZSkge1xyXG4gIHVybC51c2VybmFtZSA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHVzZXJuYW1lKTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIHVybC51c2VybmFtZSArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2V0VGhlUGFzc3dvcmQgPSBmdW5jdGlvbiAodXJsLCBwYXNzd29yZCkge1xyXG4gIHVybC5wYXNzd29yZCA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHBhc3N3b3JkKTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIHVybC5wYXNzd29yZCArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplSG9zdCA9IHNlcmlhbGl6ZUhvc3Q7XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0ID0gY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUludGVnZXIgPSBmdW5jdGlvbiAoaW50ZWdlcikge1xyXG4gIHJldHVybiBTdHJpbmcoaW50ZWdlcik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5wYXJzZVVSTCA9IGZ1bmN0aW9uIChpbnB1dCwgb3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgIG9wdGlvbnMgPSB7fTtcclxuICB9XHJcblxyXG4gIC8vIFdlIGRvbid0IGhhbmRsZSBibG9icywgc28gdGhpcyBqdXN0IGRlbGVnYXRlczpcclxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuYmFzaWNVUkxQYXJzZShpbnB1dCwgeyBiYXNlVVJMOiBvcHRpb25zLmJhc2VVUkwsIGVuY29kaW5nT3ZlcnJpZGU6IG9wdGlvbnMuZW5jb2RpbmdPdmVycmlkZSB9KTtcclxufTtcclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHVzbSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgVVJMSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yQXJncykge1xuICAgIGNvbnN0IHVybCA9IGNvbnN0cnVjdG9yQXJnc1swXTtcbiAgICBjb25zdCBiYXNlID0gY29uc3RydWN0b3JBcmdzWzFdO1xuXG4gICAgbGV0IHBhcnNlZEJhc2UgPSBudWxsO1xuICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZEJhc2UgPSB1c20uYmFzaWNVUkxQYXJzZShiYXNlKTtcbiAgICAgIGlmIChwYXJzZWRCYXNlID09PSBcImZhaWx1cmVcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBiYXNlIFVSTFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRVUkwgPSB1c20uYmFzaWNVUkxQYXJzZSh1cmwsIHsgYmFzZVVSTDogcGFyc2VkQmFzZSB9KTtcbiAgICBpZiAocGFyc2VkVVJMID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgVVJMXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX3VybCA9IHBhcnNlZFVSTDtcblxuICAgIC8vIFRPRE86IHF1ZXJ5IHN0dWZmXG4gIH1cblxuICBnZXQgaHJlZigpIHtcbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZVVSTCh0aGlzLl91cmwpO1xuICB9XG5cbiAgc2V0IGhyZWYodikge1xuICAgIGNvbnN0IHBhcnNlZFVSTCA9IHVzbS5iYXNpY1VSTFBhcnNlKHYpO1xuICAgIGlmIChwYXJzZWRVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBVUkxcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsID0gcGFyc2VkVVJMO1xuICB9XG5cbiAgZ2V0IG9yaWdpbigpIHtcbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZVVSTE9yaWdpbih0aGlzLl91cmwpO1xuICB9XG5cbiAgZ2V0IHByb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwuc2NoZW1lICsgXCI6XCI7XG4gIH1cblxuICBzZXQgcHJvdG9jb2wodikge1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYgKyBcIjpcIiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJzY2hlbWUgc3RhcnRcIiB9KTtcbiAgfVxuXG4gIGdldCB1c2VybmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsLnVzZXJuYW1lO1xuICB9XG5cbiAgc2V0IHVzZXJuYW1lKHYpIHtcbiAgICBpZiAodXNtLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQodGhpcy5fdXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5zZXRUaGVVc2VybmFtZSh0aGlzLl91cmwsIHYpO1xuICB9XG5cbiAgZ2V0IHBhc3N3b3JkKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwucGFzc3dvcmQ7XG4gIH1cblxuICBzZXQgcGFzc3dvcmQodikge1xuICAgIGlmICh1c20uY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh0aGlzLl91cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLnNldFRoZVBhc3N3b3JkKHRoaXMuX3VybCwgdik7XG4gIH1cblxuICBnZXQgaG9zdCgpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodXJsLmhvc3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGlmICh1cmwucG9ydCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVzbS5zZXJpYWxpemVIb3N0KHVybC5ob3N0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpICsgXCI6XCIgKyB1c20uc2VyaWFsaXplSW50ZWdlcih1cmwucG9ydCk7XG4gIH1cblxuICBzZXQgaG9zdCh2KSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJob3N0XCIgfSk7XG4gIH1cblxuICBnZXQgaG9zdG5hbWUoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5ob3N0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodGhpcy5fdXJsLmhvc3QpO1xuICB9XG5cbiAgc2V0IGhvc3RuYW1lKHYpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RuYW1lXCIgfSk7XG4gIH1cblxuICBnZXQgcG9ydCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLnBvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSW50ZWdlcih0aGlzLl91cmwucG9ydCk7XG4gIH1cblxuICBzZXQgcG9ydCh2KSB7XG4gICAgaWYgKHVzbS5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHRoaXMuX3VybCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdGhpcy5fdXJsLnBvcnQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInBvcnRcIiB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGF0aG5hbWUoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdXJsLnBhdGhbMF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3VybC5wYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiL1wiICsgdGhpcy5fdXJsLnBhdGguam9pbihcIi9cIik7XG4gIH1cblxuICBzZXQgcGF0aG5hbWUodikge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3VybC5wYXRoID0gW107XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJwYXRoIHN0YXJ0XCIgfSk7XG4gIH1cblxuICBnZXQgc2VhcmNoKCkge1xuICAgIGlmICh0aGlzLl91cmwucXVlcnkgPT09IG51bGwgfHwgdGhpcy5fdXJsLnF1ZXJ5ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCI/XCIgKyB0aGlzLl91cmwucXVlcnk7XG4gIH1cblxuICBzZXQgc2VhcmNoKHYpIHtcbiAgICAvLyBUT0RPOiBxdWVyeSBzdHVmZlxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5fdXJsO1xuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHVybC5xdWVyeSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSB2WzBdID09PSBcIj9cIiA/IHYuc3Vic3RyaW5nKDEpIDogdjtcbiAgICB1cmwucXVlcnkgPSBcIlwiO1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IHVybCwgc3RhdGVPdmVycmlkZTogXCJxdWVyeVwiIH0pO1xuICB9XG5cbiAgZ2V0IGhhc2goKSB7XG4gICAgaWYgKHRoaXMuX3VybC5mcmFnbWVudCA9PT0gbnVsbCB8fCB0aGlzLl91cmwuZnJhZ21lbnQgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIiNcIiArIHRoaXMuX3VybC5mcmFnbWVudDtcbiAgfVxuXG4gIHNldCBoYXNoKHYpIHtcbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdGhpcy5fdXJsLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiI1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgIHRoaXMuX3VybC5mcmFnbWVudCA9IFwiXCI7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwiZnJhZ21lbnRcIiB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy5ocmVmO1xuICB9XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi8vVVJMLWltcGwuanNcIik7XG5cbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBVUkwodXJsKSB7XG4gIGlmICghdGhpcyB8fCB0aGlzW2ltcGxdIHx8ICEodGhpcyBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnVVJMJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdVUkwnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1swXSk7XG4gIGlmIChhcmdzWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0dXAodGhpcywgYXJncyk7XG59XG5cblVSTC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMDsgKytpKSB7XG4gICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS50b0pTT04uYXBwbHkodGhpc1tpbXBsXSwgYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaHJlZlwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ocmVmO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhyZWYgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5VUkwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpcy5ocmVmO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwib3JpZ2luXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9yaWdpbjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicHJvdG9jb2xcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucHJvdG9jb2w7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucHJvdG9jb2wgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJ1c2VybmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS51c2VybmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS51c2VybmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInBhc3N3b3JkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnBhc3N3b3JkO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBhc3N3b3JkID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaG9zdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3QgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJob3N0bmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0bmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ob3N0bmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInBvcnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucG9ydDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wb3J0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicGF0aG5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGF0aG5hbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGF0aG5hbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJzZWFyY2hcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VhcmNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNlYXJjaCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhhc2hcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaGFzaDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5oYXNoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXMob2JqKSB7XG4gICAgcmV0dXJuICEhb2JqICYmIG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb247XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoVVJMLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBVUkwsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBVUkw6IFVSTCB9LFxuICAgIFdvcmtlcjogeyBVUkw6IFVSTCB9XG4gIH1cbn07XG5cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuVVJMID0gcmVxdWlyZShcIi4vVVJMXCIpLmludGVyZmFjZTtcbmV4cG9ydHMuc2VyaWFsaXplVVJMID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplVVJMO1xuZXhwb3J0cy5zZXJpYWxpemVVUkxPcmlnaW4gPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVVUkxPcmlnaW47XG5leHBvcnRzLmJhc2ljVVJMUGFyc2UgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5iYXNpY1VSTFBhcnNlO1xuZXhwb3J0cy5zZXRUaGVVc2VybmFtZSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNldFRoZVVzZXJuYW1lO1xuZXhwb3J0cy5zZXRUaGVQYXNzd29yZCA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNldFRoZVBhc3N3b3JkO1xuZXhwb3J0cy5zZXJpYWxpemVIb3N0ID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplSG9zdDtcbmV4cG9ydHMuc2VyaWFsaXplSW50ZWdlciA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNlcmlhbGl6ZUludGVnZXI7XG5leHBvcnRzLnBhcnNlVVJMID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikucGFyc2VVUkw7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0IChleCkgeyByZXR1cm4gKGV4ICYmICh0eXBlb2YgZXggPT09ICdvYmplY3QnKSAmJiAnZGVmYXVsdCcgaW4gZXgpID8gZXhbJ2RlZmF1bHQnXSA6IGV4OyB9XG5cbnZhciBTdHJlYW0gPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnc3RyZWFtJykpO1xudmFyIGh0dHAgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnaHR0cCcpKTtcbnZhciBVcmwgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgndXJsJykpO1xudmFyIHdoYXR3Z1VybCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd3aGF0d2ctdXJsJykpO1xudmFyIGh0dHBzID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ2h0dHBzJykpO1xudmFyIHpsaWIgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnemxpYicpKTtcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3RtcHZhci9qc2RvbS9ibG9iL2FhODViMmFiZjA3NzY2ZmY3YmY1YzFmNmRhYWZiMzcyNmYyZjJkYjUvbGliL2pzZG9tL2xpdmluZy9ibG9iLmpzXG5cbi8vIGZpeCBmb3IgXCJSZWFkYWJsZVwiIGlzbid0IGEgbmFtZWQgZXhwb3J0IGlzc3VlXG5jb25zdCBSZWFkYWJsZSA9IFN0cmVhbS5SZWFkYWJsZTtcblxuY29uc3QgQlVGRkVSID0gU3ltYm9sKCdidWZmZXInKTtcbmNvbnN0IFRZUEUgPSBTeW1ib2woJ3R5cGUnKTtcblxuY2xhc3MgQmxvYiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXNbVFlQRV0gPSAnJztcblxuXHRcdGNvbnN0IGJsb2JQYXJ0cyA9IGFyZ3VtZW50c1swXTtcblx0XHRjb25zdCBvcHRpb25zID0gYXJndW1lbnRzWzFdO1xuXG5cdFx0Y29uc3QgYnVmZmVycyA9IFtdO1xuXHRcdGxldCBzaXplID0gMDtcblxuXHRcdGlmIChibG9iUGFydHMpIHtcblx0XHRcdGNvbnN0IGEgPSBibG9iUGFydHM7XG5cdFx0XHRjb25zdCBsZW5ndGggPSBOdW1iZXIoYS5sZW5ndGgpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gYVtpXTtcblx0XHRcdFx0bGV0IGJ1ZmZlcjtcblx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCdWZmZXIpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBlbGVtZW50O1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhlbGVtZW50KSkge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGVsZW1lbnQuYnVmZmVyLCBlbGVtZW50LmJ5dGVPZmZzZXQsIGVsZW1lbnQuYnl0ZUxlbmd0aCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20oZWxlbWVudCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJsb2IpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBlbGVtZW50W0JVRkZFUl07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20odHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnID8gZWxlbWVudCA6IFN0cmluZyhlbGVtZW50KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2l6ZSArPSBidWZmZXIubGVuZ3RoO1xuXHRcdFx0XHRidWZmZXJzLnB1c2goYnVmZmVyKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW0JVRkZFUl0gPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpO1xuXG5cdFx0bGV0IHR5cGUgPSBvcHRpb25zICYmIG9wdGlvbnMudHlwZSAhPT0gdW5kZWZpbmVkICYmIFN0cmluZyhvcHRpb25zLnR5cGUpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKHR5cGUgJiYgIS9bXlxcdTAwMjAtXFx1MDA3RV0vLnRlc3QodHlwZSkpIHtcblx0XHRcdHRoaXNbVFlQRV0gPSB0eXBlO1xuXHRcdH1cblx0fVxuXHRnZXQgc2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tCVUZGRVJdLmxlbmd0aDtcblx0fVxuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tUWVBFXTtcblx0fVxuXHR0ZXh0KCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpc1tCVUZGRVJdLnRvU3RyaW5nKCkpO1xuXHR9XG5cdGFycmF5QnVmZmVyKCkge1xuXHRcdGNvbnN0IGJ1ZiA9IHRoaXNbQlVGRkVSXTtcblx0XHRjb25zdCBhYiA9IGJ1Zi5idWZmZXIuc2xpY2UoYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlT2Zmc2V0ICsgYnVmLmJ5dGVMZW5ndGgpO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYWIpO1xuXHR9XG5cdHN0cmVhbSgpIHtcblx0XHRjb25zdCByZWFkYWJsZSA9IG5ldyBSZWFkYWJsZSgpO1xuXHRcdHJlYWRhYmxlLl9yZWFkID0gZnVuY3Rpb24gKCkge307XG5cdFx0cmVhZGFibGUucHVzaCh0aGlzW0JVRkZFUl0pO1xuXHRcdHJlYWRhYmxlLnB1c2gobnVsbCk7XG5cdFx0cmV0dXJuIHJlYWRhYmxlO1xuXHR9XG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiAnW29iamVjdCBCbG9iXSc7XG5cdH1cblx0c2xpY2UoKSB7XG5cdFx0Y29uc3Qgc2l6ZSA9IHRoaXMuc2l6ZTtcblxuXHRcdGNvbnN0IHN0YXJ0ID0gYXJndW1lbnRzWzBdO1xuXHRcdGNvbnN0IGVuZCA9IGFyZ3VtZW50c1sxXTtcblx0XHRsZXQgcmVsYXRpdmVTdGFydCwgcmVsYXRpdmVFbmQ7XG5cdFx0aWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlbGF0aXZlU3RhcnQgPSAwO1xuXHRcdH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7XG5cdFx0XHRyZWxhdGl2ZVN0YXJ0ID0gTWF0aC5tYXgoc2l6ZSArIHN0YXJ0LCAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVsYXRpdmVTdGFydCA9IE1hdGgubWluKHN0YXJ0LCBzaXplKTtcblx0XHR9XG5cdFx0aWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZWxhdGl2ZUVuZCA9IHNpemU7XG5cdFx0fSBlbHNlIGlmIChlbmQgPCAwKSB7XG5cdFx0XHRyZWxhdGl2ZUVuZCA9IE1hdGgubWF4KHNpemUgKyBlbmQsIDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWxhdGl2ZUVuZCA9IE1hdGgubWluKGVuZCwgc2l6ZSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNwYW4gPSBNYXRoLm1heChyZWxhdGl2ZUVuZCAtIHJlbGF0aXZlU3RhcnQsIDApO1xuXG5cdFx0Y29uc3QgYnVmZmVyID0gdGhpc1tCVUZGRVJdO1xuXHRcdGNvbnN0IHNsaWNlZEJ1ZmZlciA9IGJ1ZmZlci5zbGljZShyZWxhdGl2ZVN0YXJ0LCByZWxhdGl2ZVN0YXJ0ICsgc3Bhbik7XG5cdFx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFtdLCB7IHR5cGU6IGFyZ3VtZW50c1syXSB9KTtcblx0XHRibG9iW0JVRkZFUl0gPSBzbGljZWRCdWZmZXI7XG5cdFx0cmV0dXJuIGJsb2I7XG5cdH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvYi5wcm90b3R5cGUsIHtcblx0c2l6ZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHR5cGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzbGljZTogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQmxvYi5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ0Jsb2InLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG4vKipcbiAqIGZldGNoLWVycm9yLmpzXG4gKlxuICogRmV0Y2hFcnJvciBpbnRlcmZhY2UgZm9yIG9wZXJhdGlvbmFsIGVycm9yc1xuICovXG5cbi8qKlxuICogQ3JlYXRlIEZldGNoRXJyb3IgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gICBTdHJpbmcgICAgICBtZXNzYWdlICAgICAgRXJyb3IgbWVzc2FnZSBmb3IgaHVtYW5cbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIHR5cGUgICAgICAgICBFcnJvciB0eXBlIGZvciBtYWNoaW5lXG4gKiBAcGFyYW0gICBTdHJpbmcgICAgICBzeXN0ZW1FcnJvciAgRm9yIE5vZGUuanMgc3lzdGVtIGVycm9yXG4gKiBAcmV0dXJuICBGZXRjaEVycm9yXG4gKi9cbmZ1bmN0aW9uIEZldGNoRXJyb3IobWVzc2FnZSwgdHlwZSwgc3lzdGVtRXJyb3IpIHtcbiAgRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gIC8vIHdoZW4gZXJyLnR5cGUgaXMgYHN5c3RlbWAsIGVyci5jb2RlIGNvbnRhaW5zIHN5c3RlbSBlcnJvciBjb2RlXG4gIGlmIChzeXN0ZW1FcnJvcikge1xuICAgIHRoaXMuY29kZSA9IHRoaXMuZXJybm8gPSBzeXN0ZW1FcnJvci5jb2RlO1xuICB9XG5cbiAgLy8gaGlkZSBjdXN0b20gZXJyb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmcm9tIGVuZC11c2Vyc1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbn1cblxuRmV0Y2hFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5GZXRjaEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZldGNoRXJyb3I7XG5GZXRjaEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ZldGNoRXJyb3InO1xuXG5sZXQgY29udmVydDtcbnRyeSB7XG5cdGNvbnZlcnQgPSByZXF1aXJlKCdlbmNvZGluZycpLmNvbnZlcnQ7XG59IGNhdGNoIChlKSB7fVxuXG5jb25zdCBJTlRFUk5BTFMgPSBTeW1ib2woJ0JvZHkgaW50ZXJuYWxzJyk7XG5cbi8vIGZpeCBhbiBpc3N1ZSB3aGVyZSBcIlBhc3NUaHJvdWdoXCIgaXNuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBQYXNzVGhyb3VnaCA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcblxuLyoqXG4gKiBCb2R5IG1peGluXG4gKlxuICogUmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keVxuICpcbiAqIEBwYXJhbSAgIFN0cmVhbSAgYm9keSAgUmVhZGFibGUgc3RyZWFtXG4gKiBAcGFyYW0gICBPYmplY3QgIG9wdHMgIFJlc3BvbnNlIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuZnVuY3Rpb24gQm9keShib2R5KSB7XG5cdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0dmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuXHQgICAgX3JlZiRzaXplID0gX3JlZi5zaXplO1xuXG5cdGxldCBzaXplID0gX3JlZiRzaXplID09PSB1bmRlZmluZWQgPyAwIDogX3JlZiRzaXplO1xuXHR2YXIgX3JlZiR0aW1lb3V0ID0gX3JlZi50aW1lb3V0O1xuXHRsZXQgdGltZW91dCA9IF9yZWYkdGltZW91dCA9PT0gdW5kZWZpbmVkID8gMCA6IF9yZWYkdGltZW91dDtcblxuXHRpZiAoYm9keSA9PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyB1bmRlZmluZWQgb3IgbnVsbFxuXHRcdGJvZHkgPSBudWxsO1xuXHR9IGVsc2UgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBhIFVSTFNlYXJjaFBhcmFtc1xuXHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5LnRvU3RyaW5nKCkpO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkgOyBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIDsgZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSB7XG5cdFx0Ly8gYm9keSBpcyBBcnJheUJ1ZmZlclxuXHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5KTtcblx0fSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyVmlld1xuXHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpO1xuXHR9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIDsgZWxzZSB7XG5cdFx0Ly8gbm9uZSBvZiB0aGUgYWJvdmVcblx0XHQvLyBjb2VyY2UgdG8gc3RyaW5nIHRoZW4gYnVmZmVyXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKFN0cmluZyhib2R5KSk7XG5cdH1cblx0dGhpc1tJTlRFUk5BTFNdID0ge1xuXHRcdGJvZHksXG5cdFx0ZGlzdHVyYmVkOiBmYWxzZSxcblx0XHRlcnJvcjogbnVsbFxuXHR9O1xuXHR0aGlzLnNpemUgPSBzaXplO1xuXHR0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuXG5cdGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtKSB7XG5cdFx0Ym9keS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRjb25zdCBlcnJvciA9IGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicgPyBlcnIgOiBuZXcgRmV0Y2hFcnJvcihgSW52YWxpZCByZXNwb25zZSBib2R5IHdoaWxlIHRyeWluZyB0byBmZXRjaCAke190aGlzLnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycik7XG5cdFx0XHRfdGhpc1tJTlRFUk5BTFNdLmVycm9yID0gZXJyb3I7XG5cdFx0fSk7XG5cdH1cbn1cblxuQm9keS5wcm90b3R5cGUgPSB7XG5cdGdldCBib2R5KCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMU10uYm9keTtcblx0fSxcblxuXHRnZXQgYm9keVVzZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTXS5kaXN0dXJiZWQ7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIEFycmF5QnVmZmVyXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdGFycmF5QnVmZmVyKCkge1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1Zikge1xuXHRcdFx0cmV0dXJuIGJ1Zi5idWZmZXIuc2xpY2UoYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlT2Zmc2V0ICsgYnVmLmJ5dGVMZW5ndGgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIFJldHVybiByYXcgcmVzcG9uc2UgYXMgQmxvYlxuICAqXG4gICogQHJldHVybiBQcm9taXNlXG4gICovXG5cdGJsb2IoKSB7XG5cdFx0bGV0IGN0ID0gdGhpcy5oZWFkZXJzICYmIHRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIHx8ICcnO1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1Zikge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHQvLyBQcmV2ZW50IGNvcHlpbmdcblx0XHRcdG5ldyBCbG9iKFtdLCB7XG5cdFx0XHRcdHR5cGU6IGN0LnRvTG93ZXJDYXNlKClcblx0XHRcdH0pLCB7XG5cdFx0XHRcdFtCVUZGRVJdOiBidWZcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyBqc29uXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdGpzb24oKSB7XG5cdFx0dmFyIF90aGlzMiA9IHRoaXM7XG5cblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKGJ1ZmZlci50b1N0cmluZygpKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlamVjdChuZXcgRmV0Y2hFcnJvcihgaW52YWxpZCBqc29uIHJlc3BvbnNlIGJvZHkgYXQgJHtfdGhpczIudXJsfSByZWFzb246ICR7ZXJyLm1lc3NhZ2V9YCwgJ2ludmFsaWQtanNvbicpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKipcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMgdGV4dFxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHR0ZXh0KCkge1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0cmV0dXJuIGJ1ZmZlci50b1N0cmluZygpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyBidWZmZXIgKG5vbi1zcGVjIGFwaSlcbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0YnVmZmVyKCkge1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyB0ZXh0LCB3aGlsZSBhdXRvbWF0aWNhbGx5IGRldGVjdGluZyB0aGUgZW5jb2RpbmcgYW5kXG4gICogdHJ5aW5nIHRvIGRlY29kZSB0byBVVEYtOCAobm9uLXNwZWMgYXBpKVxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHR0ZXh0Q29udmVydGVkKCkge1xuXHRcdHZhciBfdGhpczMgPSB0aGlzO1xuXG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHRyZXR1cm4gY29udmVydEJvZHkoYnVmZmVyLCBfdGhpczMuaGVhZGVycyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbi8vIEluIGJyb3dzZXJzLCBhbGwgcHJvcGVydGllcyBhcmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJvZHkucHJvdG90eXBlLCB7XG5cdGJvZHk6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRib2R5VXNlZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGFycmF5QnVmZmVyOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0YmxvYjogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGpzb246IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHR0ZXh0OiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5cbkJvZHkubWl4SW4gPSBmdW5jdGlvbiAocHJvdG8pIHtcblx0Zm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEJvZHkucHJvdG90eXBlKSkge1xuXHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBmdXR1cmUgcHJvb2Zcblx0XHRpZiAoIShuYW1lIGluIHByb3RvKSkge1xuXHRcdFx0Y29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQm9keS5wcm90b3R5cGUsIG5hbWUpO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBuYW1lLCBkZXNjKTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogQ29uc3VtZSBhbmQgY29udmVydCBhbiBlbnRpcmUgQm9keSB0byBhIEJ1ZmZlci5cbiAqXG4gKiBSZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKlxuICogQHJldHVybiAgUHJvbWlzZVxuICovXG5mdW5jdGlvbiBjb25zdW1lQm9keSgpIHtcblx0dmFyIF90aGlzNCA9IHRoaXM7XG5cblx0aWYgKHRoaXNbSU5URVJOQUxTXS5kaXN0dXJiZWQpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKGBib2R5IHVzZWQgYWxyZWFkeSBmb3I6ICR7dGhpcy51cmx9YCkpO1xuXHR9XG5cblx0dGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZCA9IHRydWU7XG5cblx0aWYgKHRoaXNbSU5URVJOQUxTXS5lcnJvcikge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KHRoaXNbSU5URVJOQUxTXS5lcnJvcik7XG5cdH1cblxuXHRsZXQgYm9keSA9IHRoaXMuYm9keTtcblxuXHQvLyBib2R5IGlzIG51bGxcblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgYmxvYlxuXHRpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0Ym9keSA9IGJvZHkuc3RyZWFtKCk7XG5cdH1cblxuXHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZXNvbHZlKGJvZHkpO1xuXHR9XG5cblx0Ly8gaXN0YW5idWwgaWdub3JlIGlmOiBzaG91bGQgbmV2ZXIgaGFwcGVuXG5cdGlmICghKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG5cdH1cblxuXHQvLyBib2R5IGlzIHN0cmVhbVxuXHQvLyBnZXQgcmVhZHkgdG8gYWN0dWFsbHkgY29uc3VtZSB0aGUgYm9keVxuXHRsZXQgYWNjdW0gPSBbXTtcblx0bGV0IGFjY3VtQnl0ZXMgPSAwO1xuXHRsZXQgYWJvcnQgPSBmYWxzZTtcblxuXHRyZXR1cm4gbmV3IEJvZHkuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0bGV0IHJlc1RpbWVvdXQ7XG5cblx0XHQvLyBhbGxvdyB0aW1lb3V0IG9uIHNsb3cgcmVzcG9uc2UgYm9keVxuXHRcdGlmIChfdGhpczQudGltZW91dCkge1xuXHRcdFx0cmVzVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRhYm9ydCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgUmVzcG9uc2UgdGltZW91dCB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtfdGhpczQudXJsfSAob3ZlciAke190aGlzNC50aW1lb3V0fW1zKWAsICdib2R5LXRpbWVvdXQnKSk7XG5cdFx0XHR9LCBfdGhpczQudGltZW91dCk7XG5cdFx0fVxuXG5cdFx0Ly8gaGFuZGxlIHN0cmVhbSBlcnJvcnNcblx0XHRib2R5Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSByZXF1ZXN0IHdhcyBhYm9ydGVkLCByZWplY3Qgd2l0aCB0aGlzIEVycm9yXG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBvdGhlciBlcnJvcnMsIHN1Y2ggYXMgaW5jb3JyZWN0IGNvbnRlbnQtZW5jb2Rpbmdcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGJvZHkgd2hpbGUgdHJ5aW5nIHRvIGZldGNoICR7X3RoaXM0LnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ym9keS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuXHRcdFx0aWYgKGFib3J0IHx8IGNodW5rID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKF90aGlzNC5zaXplICYmIGFjY3VtQnl0ZXMgKyBjaHVuay5sZW5ndGggPiBfdGhpczQuc2l6ZSkge1xuXHRcdFx0XHRhYm9ydCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgY29udGVudCBzaXplIGF0ICR7X3RoaXM0LnVybH0gb3ZlciBsaW1pdDogJHtfdGhpczQuc2l6ZX1gLCAnbWF4LXNpemUnKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0YWNjdW1CeXRlcyArPSBjaHVuay5sZW5ndGg7XG5cdFx0XHRhY2N1bS5wdXNoKGNodW5rKTtcblx0XHR9KTtcblxuXHRcdGJvZHkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChhYm9ydCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNsZWFyVGltZW91dChyZXNUaW1lb3V0KTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShCdWZmZXIuY29uY2F0KGFjY3VtLCBhY2N1bUJ5dGVzKSk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIHN0cmVhbXMgdGhhdCBoYXZlIGFjY3VtdWxhdGVkIHRvbyBtdWNoIGRhdGEgKGlzc3VlICM0MTQpXG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgQ291bGQgbm90IGNyZWF0ZSBCdWZmZXIgZnJvbSByZXNwb25zZSBib2R5IGZvciAke190aGlzNC51cmx9OiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogRGV0ZWN0IGJ1ZmZlciBlbmNvZGluZyBhbmQgY29udmVydCB0byB0YXJnZXQgZW5jb2RpbmdcbiAqIHJlZjogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1odG1sNS0yMDExMDExMy9wYXJzaW5nLmh0bWwjZGV0ZXJtaW5pbmctdGhlLWNoYXJhY3Rlci1lbmNvZGluZ1xuICpcbiAqIEBwYXJhbSAgIEJ1ZmZlciAgYnVmZmVyICAgIEluY29taW5nIGJ1ZmZlclxuICogQHBhcmFtICAgU3RyaW5nICBlbmNvZGluZyAgVGFyZ2V0IGVuY29kaW5nXG4gKiBAcmV0dXJuICBTdHJpbmdcbiAqL1xuZnVuY3Rpb24gY29udmVydEJvZHkoYnVmZmVyLCBoZWFkZXJzKSB7XG5cdGlmICh0eXBlb2YgY29udmVydCAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIHBhY2thZ2UgYGVuY29kaW5nYCBtdXN0IGJlIGluc3RhbGxlZCB0byB1c2UgdGhlIHRleHRDb252ZXJ0ZWQoKSBmdW5jdGlvbicpO1xuXHR9XG5cblx0Y29uc3QgY3QgPSBoZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG5cdGxldCBjaGFyc2V0ID0gJ3V0Zi04Jztcblx0bGV0IHJlcywgc3RyO1xuXG5cdC8vIGhlYWRlclxuXHRpZiAoY3QpIHtcblx0XHRyZXMgPSAvY2hhcnNldD0oW147XSopL2kuZXhlYyhjdCk7XG5cdH1cblxuXHQvLyBubyBjaGFyc2V0IGluIGNvbnRlbnQgdHlwZSwgcGVlayBhdCByZXNwb25zZSBib2R5IGZvciBhdCBtb3N0IDEwMjQgYnl0ZXNcblx0c3RyID0gYnVmZmVyLnNsaWNlKDAsIDEwMjQpLnRvU3RyaW5nKCk7XG5cblx0Ly8gaHRtbDVcblx0aWYgKCFyZXMgJiYgc3RyKSB7XG5cdFx0cmVzID0gLzxtZXRhLis/Y2hhcnNldD0oWydcIl0pKC4rPylcXDEvaS5leGVjKHN0cik7XG5cdH1cblxuXHQvLyBodG1sNFxuXHRpZiAoIXJlcyAmJiBzdHIpIHtcblx0XHRyZXMgPSAvPG1ldGFbXFxzXSs/aHR0cC1lcXVpdj0oWydcIl0pY29udGVudC10eXBlXFwxW1xcc10rP2NvbnRlbnQ9KFsnXCJdKSguKz8pXFwyL2kuZXhlYyhzdHIpO1xuXHRcdGlmICghcmVzKSB7XG5cdFx0XHRyZXMgPSAvPG1ldGFbXFxzXSs/Y29udGVudD0oWydcIl0pKC4rPylcXDFbXFxzXSs/aHR0cC1lcXVpdj0oWydcIl0pY29udGVudC10eXBlXFwzL2kuZXhlYyhzdHIpO1xuXHRcdFx0aWYgKHJlcykge1xuXHRcdFx0XHRyZXMucG9wKCk7IC8vIGRyb3AgbGFzdCBxdW90ZVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZXMpIHtcblx0XHRcdHJlcyA9IC9jaGFyc2V0PSguKikvaS5leGVjKHJlcy5wb3AoKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8geG1sXG5cdGlmICghcmVzICYmIHN0cikge1xuXHRcdHJlcyA9IC88XFw/eG1sLis/ZW5jb2Rpbmc9KFsnXCJdKSguKz8pXFwxL2kuZXhlYyhzdHIpO1xuXHR9XG5cblx0Ly8gZm91bmQgY2hhcnNldFxuXHRpZiAocmVzKSB7XG5cdFx0Y2hhcnNldCA9IHJlcy5wb3AoKTtcblxuXHRcdC8vIHByZXZlbnQgZGVjb2RlIGlzc3VlcyB3aGVuIHNpdGVzIHVzZSBpbmNvcnJlY3QgZW5jb2Rpbmdcblx0XHQvLyByZWY6IGh0dHBzOi8vaHNpdm9uZW4uZmkvZW5jb2RpbmctbWVudS9cblx0XHRpZiAoY2hhcnNldCA9PT0gJ2diMjMxMicgfHwgY2hhcnNldCA9PT0gJ2diaycpIHtcblx0XHRcdGNoYXJzZXQgPSAnZ2IxODAzMCc7XG5cdFx0fVxuXHR9XG5cblx0Ly8gdHVybiByYXcgYnVmZmVycyBpbnRvIGEgc2luZ2xlIHV0Zi04IGJ1ZmZlclxuXHRyZXR1cm4gY29udmVydChidWZmZXIsICdVVEYtOCcsIGNoYXJzZXQpLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogRGV0ZWN0IGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICogcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYml0aW5uL25vZGUtZmV0Y2gvaXNzdWVzLzI5NiNpc3N1ZWNvbW1lbnQtMzA3NTk4MTQzXG4gKlxuICogQHBhcmFtICAgT2JqZWN0ICBvYmogICAgIE9iamVjdCB0byBkZXRlY3QgYnkgdHlwZSBvciBicmFuZFxuICogQHJldHVybiAgU3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKG9iaikge1xuXHQvLyBEdWNrLXR5cGluZyBhcyBhIG5lY2Vzc2FyeSBjb25kaXRpb24uXG5cdGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqLmFwcGVuZCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmRlbGV0ZSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmdldEFsbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmhhcyAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIEJyYW5kLWNoZWNraW5nIGFuZCBtb3JlIGR1Y2stdHlwaW5nIGFzIG9wdGlvbmFsIGNvbmRpdGlvbi5cblx0cmV0dXJuIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVVJMU2VhcmNoUGFyYW1zJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgVVJMU2VhcmNoUGFyYW1zXScgfHwgdHlwZW9mIG9iai5zb3J0ID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBvYmpgIGlzIGEgVzNDIGBCbG9iYCBvYmplY3QgKHdoaWNoIGBGaWxlYCBpbmhlcml0cyBmcm9tKVxuICogQHBhcmFtICB7Kn0gb2JqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Jsb2Iob2JqKSB7XG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoudHlwZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG9iai5zdHJlYW0gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdzdHJpbmcnICYmIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iai5jb25zdHJ1Y3Rvci5uYW1lKSAmJiAvXihCbG9ifEZpbGUpJC8udGVzdChvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG59XG5cbi8qKlxuICogQ2xvbmUgYm9keSBnaXZlbiBSZXMvUmVxIGluc3RhbmNlXG4gKlxuICogQHBhcmFtICAgTWl4ZWQgIGluc3RhbmNlICBSZXNwb25zZSBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcmV0dXJuICBNaXhlZFxuICovXG5mdW5jdGlvbiBjbG9uZShpbnN0YW5jZSkge1xuXHRsZXQgcDEsIHAyO1xuXHRsZXQgYm9keSA9IGluc3RhbmNlLmJvZHk7XG5cblx0Ly8gZG9uJ3QgYWxsb3cgY2xvbmluZyBhIHVzZWQgYm9keVxuXHRpZiAoaW5zdGFuY2UuYm9keVVzZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjbG9uZSBib2R5IGFmdGVyIGl0IGlzIHVzZWQnKTtcblx0fVxuXG5cdC8vIGNoZWNrIHRoYXQgYm9keSBpcyBhIHN0cmVhbSBhbmQgbm90IGZvcm0tZGF0YSBvYmplY3Rcblx0Ly8gbm90ZTogd2UgY2FuJ3QgY2xvbmUgdGhlIGZvcm0tZGF0YSBvYmplY3Qgd2l0aG91dCBoYXZpbmcgaXQgYXMgYSBkZXBlbmRlbmN5XG5cdGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtICYmIHR5cGVvZiBib2R5LmdldEJvdW5kYXJ5ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gdGVlIGluc3RhbmNlIGJvZHlcblx0XHRwMSA9IG5ldyBQYXNzVGhyb3VnaCgpO1xuXHRcdHAyID0gbmV3IFBhc3NUaHJvdWdoKCk7XG5cdFx0Ym9keS5waXBlKHAxKTtcblx0XHRib2R5LnBpcGUocDIpO1xuXHRcdC8vIHNldCBpbnN0YW5jZSBib2R5IHRvIHRlZWQgYm9keSBhbmQgcmV0dXJuIHRoZSBvdGhlciB0ZWVkIGJvZHlcblx0XHRpbnN0YW5jZVtJTlRFUk5BTFNdLmJvZHkgPSBwMTtcblx0XHRib2R5ID0gcDI7XG5cdH1cblxuXHRyZXR1cm4gYm9keTtcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgb3BlcmF0aW9uIFwiZXh0cmFjdCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb20gfG9iamVjdHxcIiBhc1xuICogc3BlY2lmaWVkIGluIHRoZSBzcGVjaWZpY2F0aW9uOlxuICogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGluc3RhbmNlLmJvZHkgaXMgcHJlc2VudC5cbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgaW5zdGFuY2UgIEFueSBvcHRpb25zLmJvZHkgaW5wdXRcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdENvbnRlbnRUeXBlKGJvZHkpIHtcblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIG51bGxcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcblx0XHQvLyBib2R5IGlzIHN0cmluZ1xuXHRcdHJldHVybiAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jztcblx0fSBlbHNlIGlmIChpc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYSBVUkxTZWFyY2hQYXJhbXNcblx0XHRyZXR1cm4gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Jztcblx0fSBlbHNlIGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJsb2Jcblx0XHRyZXR1cm4gYm9keS50eXBlIHx8IG51bGw7XG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBBcnJheUJ1ZmZlclZpZXdcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmICh0eXBlb2YgYm9keS5nZXRCb3VuZGFyeSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdC8vIGRldGVjdCBmb3JtIGRhdGEgaW5wdXQgZnJvbSBmb3JtLWRhdGEgbW9kdWxlXG5cdFx0cmV0dXJuIGBtdWx0aXBhcnQvZm9ybS1kYXRhO2JvdW5kYXJ5PSR7Ym9keS5nZXRCb3VuZGFyeSgpfWA7XG5cdH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkge1xuXHRcdC8vIGJvZHkgaXMgc3RyZWFtXG5cdFx0Ly8gY2FuJ3QgcmVhbGx5IGRvIG11Y2ggYWJvdXQgdGhpc1xuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEJvZHkgY29uc3RydWN0b3IgZGVmYXVsdHMgb3RoZXIgdGhpbmdzIHRvIHN0cmluZ1xuXHRcdHJldHVybiAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jztcblx0fVxufVxuXG4vKipcbiAqIFRoZSBGZXRjaCBTdGFuZGFyZCB0cmVhdHMgdGhpcyBhcyBpZiBcInRvdGFsIGJ5dGVzXCIgaXMgYSBwcm9wZXJ0eSBvbiB0aGUgYm9keS5cbiAqIEZvciB1cywgd2UgaGF2ZSB0byBleHBsaWNpdGx5IGdldCBpdCB3aXRoIGEgZnVuY3Rpb24uXG4gKlxuICogcmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LXRvdGFsLWJ5dGVzXG4gKlxuICogQHBhcmFtICAgQm9keSAgICBpbnN0YW5jZSAgIEluc3RhbmNlIG9mIEJvZHlcbiAqIEByZXR1cm4gIE51bWJlcj8gICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMsIG9yIG51bGwgaWYgbm90IHBvc3NpYmxlXG4gKi9cbmZ1bmN0aW9uIGdldFRvdGFsQnl0ZXMoaW5zdGFuY2UpIHtcblx0Y29uc3QgYm9keSA9IGluc3RhbmNlLmJvZHk7XG5cblxuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdC8vIGJvZHkgaXMgbnVsbFxuXHRcdHJldHVybiAwO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdHJldHVybiBib2R5LnNpemU7XG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcblx0XHRyZXR1cm4gYm9keS5sZW5ndGg7XG5cdH0gZWxzZSBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5nZXRMZW5ndGhTeW5jID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gZGV0ZWN0IGZvcm0gZGF0YSBpbnB1dCBmcm9tIGZvcm0tZGF0YSBtb2R1bGVcblx0XHRpZiAoYm9keS5fbGVuZ3RoUmV0cmlldmVycyAmJiBib2R5Ll9sZW5ndGhSZXRyaWV2ZXJzLmxlbmd0aCA9PSAwIHx8IC8vIDEueFxuXHRcdGJvZHkuaGFzS25vd25MZW5ndGggJiYgYm9keS5oYXNLbm93bkxlbmd0aCgpKSB7XG5cdFx0XHQvLyAyLnhcblx0XHRcdHJldHVybiBib2R5LmdldExlbmd0aFN5bmMoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIFdyaXRlIGEgQm9keSB0byBhIE5vZGUuanMgV3JpdGFibGVTdHJlYW0gKGUuZy4gaHR0cC5SZXF1ZXN0KSBvYmplY3QuXG4gKlxuICogQHBhcmFtICAgQm9keSAgICBpbnN0YW5jZSAgIEluc3RhbmNlIG9mIEJvZHlcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuZnVuY3Rpb24gd3JpdGVUb1N0cmVhbShkZXN0LCBpbnN0YW5jZSkge1xuXHRjb25zdCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyBudWxsXG5cdFx0ZGVzdC5lbmQoKTtcblx0fSBlbHNlIGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHRib2R5LnN0cmVhbSgpLnBpcGUoZGVzdCk7XG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcblx0XHRkZXN0LndyaXRlKGJvZHkpO1xuXHRcdGRlc3QuZW5kKCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cblx0XHRib2R5LnBpcGUoZGVzdCk7XG5cdH1cbn1cblxuLy8gZXhwb3NlIFByb21pc2VcbkJvZHkuUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuXG4vKipcbiAqIGhlYWRlcnMuanNcbiAqXG4gKiBIZWFkZXJzIGNsYXNzIG9mZmVycyBjb252ZW5pZW50IGhlbHBlcnNcbiAqL1xuXG5jb25zdCBpbnZhbGlkVG9rZW5SZWdleCA9IC9bXlxcXl9gYS16QS1aXFwtMC05ISMkJSYnKisufH5dLztcbmNvbnN0IGludmFsaWRIZWFkZXJDaGFyUmVnZXggPSAvW15cXHRcXHgyMC1cXHg3ZVxceDgwLVxceGZmXS87XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTmFtZShuYW1lKSB7XG5cdG5hbWUgPSBgJHtuYW1lfWA7XG5cdGlmIChpbnZhbGlkVG9rZW5SZWdleC50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBpcyBub3QgYSBsZWdhbCBIVFRQIGhlYWRlciBuYW1lYCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVWYWx1ZSh2YWx1ZSkge1xuXHR2YWx1ZSA9IGAke3ZhbHVlfWA7XG5cdGlmIChpbnZhbGlkSGVhZGVyQ2hhclJlZ2V4LnRlc3QodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgJHt2YWx1ZX0gaXMgbm90IGEgbGVnYWwgSFRUUCBoZWFkZXIgdmFsdWVgKTtcblx0fVxufVxuXG4vKipcbiAqIEZpbmQgdGhlIGtleSBpbiB0aGUgbWFwIG9iamVjdCBnaXZlbiBhIGhlYWRlciBuYW1lLlxuICpcbiAqIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJuICBTdHJpbmd8VW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGZpbmQobWFwLCBuYW1lKSB7XG5cdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdGZvciAoY29uc3Qga2V5IGluIG1hcCkge1xuXHRcdGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSkge1xuXHRcdFx0cmV0dXJuIGtleTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgTUFQID0gU3ltYm9sKCdtYXAnKTtcbmNsYXNzIEhlYWRlcnMge1xuXHQvKipcbiAgKiBIZWFkZXJzIGNsYXNzXG4gICpcbiAgKiBAcGFyYW0gICBPYmplY3QgIGhlYWRlcnMgIFJlc3BvbnNlIGhlYWRlcnNcbiAgKiBAcmV0dXJuICBWb2lkXG4gICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGxldCBpbml0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzW01BUF0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5cdFx0aWYgKGluaXQgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG5cdFx0XHRjb25zdCByYXdIZWFkZXJzID0gaW5pdC5yYXcoKTtcblx0XHRcdGNvbnN0IGhlYWRlck5hbWVzID0gT2JqZWN0LmtleXMocmF3SGVhZGVycyk7XG5cblx0XHRcdGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiBoZWFkZXJOYW1lcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIHJhd0hlYWRlcnNbaGVhZGVyTmFtZV0pIHtcblx0XHRcdFx0XHR0aGlzLmFwcGVuZChoZWFkZXJOYW1lLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFdlIGRvbid0IHdvcnJ5IGFib3V0IGNvbnZlcnRpbmcgcHJvcCB0byBCeXRlU3RyaW5nIGhlcmUgYXMgYXBwZW5kKClcblx0XHQvLyB3aWxsIGhhbmRsZSBpdC5cblx0XHRpZiAoaW5pdCA9PSBudWxsKSA7IGVsc2UgaWYgKHR5cGVvZiBpbml0ID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Y29uc3QgbWV0aG9kID0gaW5pdFtTeW1ib2wuaXRlcmF0b3JdO1xuXHRcdFx0aWYgKG1ldGhvZCAhPSBudWxsKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbWV0aG9kICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSGVhZGVyIHBhaXJzIG11c3QgYmUgaXRlcmFibGUnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PlxuXHRcdFx0XHQvLyBOb3RlOiBwZXIgc3BlYyB3ZSBoYXZlIHRvIGZpcnN0IGV4aGF1c3QgdGhlIGxpc3RzIHRoZW4gcHJvY2VzcyB0aGVtXG5cdFx0XHRcdGNvbnN0IHBhaXJzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgcGFpciBvZiBpbml0KSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwYWlyICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgcGFpcltTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFYWNoIGhlYWRlciBwYWlyIG11c3QgYmUgaXRlcmFibGUnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cGFpcnMucHVzaChBcnJheS5mcm9tKHBhaXIpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuXHRcdFx0XHRcdGlmIChwYWlyLmxlbmd0aCAhPT0gMikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRWFjaCBoZWFkZXIgcGFpciBtdXN0IGJlIGEgbmFtZS92YWx1ZSB0dXBsZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmFwcGVuZChwYWlyWzBdLCBwYWlyWzFdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+XG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGluaXQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpbml0W2tleV07XG5cdFx0XHRcdFx0dGhpcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgaW5pdGlhbGl6ZXIgbXVzdCBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBSZXR1cm4gY29tYmluZWQgaGVhZGVyIHZhbHVlIGdpdmVuIG5hbWVcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgSGVhZGVyIG5hbWVcbiAgKiBAcmV0dXJuICBNaXhlZFxuICAqL1xuXHRnZXQobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzW01BUF1ba2V5XS5qb2luKCcsICcpO1xuXHR9XG5cblx0LyoqXG4gICogSXRlcmF0ZSBvdmVyIGFsbCBoZWFkZXJzXG4gICpcbiAgKiBAcGFyYW0gICBGdW5jdGlvbiAgY2FsbGJhY2sgIEV4ZWN1dGVkIGZvciBlYWNoIGl0ZW0gd2l0aCBwYXJhbWV0ZXJzICh2YWx1ZSwgbmFtZSwgdGhpc0FyZylcbiAgKiBAcGFyYW0gICBCb29sZWFuICAgdGhpc0FyZyAgIGB0aGlzYCBjb250ZXh0IGZvciBjYWxsYmFjayBmdW5jdGlvblxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0Zm9yRWFjaChjYWxsYmFjaykge1xuXHRcdGxldCB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG5cblx0XHRsZXQgcGFpcnMgPSBnZXRIZWFkZXJzKHRoaXMpO1xuXHRcdGxldCBpID0gMDtcblx0XHR3aGlsZSAoaSA8IHBhaXJzLmxlbmd0aCkge1xuXHRcdFx0dmFyIF9wYWlycyRpID0gcGFpcnNbaV07XG5cdFx0XHRjb25zdCBuYW1lID0gX3BhaXJzJGlbMF0sXG5cdFx0XHQgICAgICB2YWx1ZSA9IF9wYWlycyRpWzFdO1xuXG5cdFx0XHRjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHZhbHVlLCBuYW1lLCB0aGlzKTtcblx0XHRcdHBhaXJzID0gZ2V0SGVhZGVycyh0aGlzKTtcblx0XHRcdGkrKztcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBPdmVyd3JpdGUgaGVhZGVyIHZhbHVlcyBnaXZlbiBuYW1lXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgICBIZWFkZXIgbmFtZVxuICAqIEBwYXJhbSAgIFN0cmluZyAgdmFsdWUgIEhlYWRlciB2YWx1ZVxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0c2V0KG5hbWUsIHZhbHVlKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWx1ZSA9IGAke3ZhbHVlfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHZhbGlkYXRlVmFsdWUodmFsdWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHR0aGlzW01BUF1ba2V5ICE9PSB1bmRlZmluZWQgPyBrZXkgOiBuYW1lXSA9IFt2YWx1ZV07XG5cdH1cblxuXHQvKipcbiAgKiBBcHBlbmQgYSB2YWx1ZSBvbnRvIGV4aXN0aW5nIGhlYWRlclxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICAgSGVhZGVyIG5hbWVcbiAgKiBAcGFyYW0gICBTdHJpbmcgIHZhbHVlICBIZWFkZXIgdmFsdWVcbiAgKiBAcmV0dXJuICBWb2lkXG4gICovXG5cdGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsdWUgPSBgJHt2YWx1ZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHR2YWxpZGF0ZVZhbHVlKHZhbHVlKTtcblx0XHRjb25zdCBrZXkgPSBmaW5kKHRoaXNbTUFQXSwgbmFtZSk7XG5cdFx0aWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW01BUF1ba2V5XS5wdXNoKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpc1tNQVBdW25hbWVdID0gW3ZhbHVlXTtcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBDaGVjayBmb3IgaGVhZGVyIG5hbWUgZXhpc3RlbmNlXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgICBuYW1lICBIZWFkZXIgbmFtZVxuICAqIEByZXR1cm4gIEJvb2xlYW5cbiAgKi9cblx0aGFzKG5hbWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHRyZXR1cm4gZmluZCh0aGlzW01BUF0sIG5hbWUpICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcbiAgKiBEZWxldGUgYWxsIGhlYWRlciB2YWx1ZXMgZ2l2ZW4gbmFtZVxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICBIZWFkZXIgbmFtZVxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0ZGVsZXRlKG5hbWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHRjb25zdCBrZXkgPSBmaW5kKHRoaXNbTUFQXSwgbmFtZSk7XG5cdFx0aWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkZWxldGUgdGhpc1tNQVBdW2tleV07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG4gICogUmV0dXJuIHJhdyBoZWFkZXJzIChub24tc3BlYyBhcGkpXG4gICpcbiAgKiBAcmV0dXJuICBPYmplY3RcbiAgKi9cblx0cmF3KCkge1xuXHRcdHJldHVybiB0aGlzW01BUF07XG5cdH1cblxuXHQvKipcbiAgKiBHZXQgYW4gaXRlcmF0b3Igb24ga2V5cy5cbiAgKlxuICAqIEByZXR1cm4gIEl0ZXJhdG9yXG4gICovXG5cdGtleXMoKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAna2V5Jyk7XG5cdH1cblxuXHQvKipcbiAgKiBHZXQgYW4gaXRlcmF0b3Igb24gdmFsdWVzLlxuICAqXG4gICogQHJldHVybiAgSXRlcmF0b3JcbiAgKi9cblx0dmFsdWVzKCkge1xuXHRcdHJldHVybiBjcmVhdGVIZWFkZXJzSXRlcmF0b3IodGhpcywgJ3ZhbHVlJyk7XG5cdH1cblxuXHQvKipcbiAgKiBHZXQgYW4gaXRlcmF0b3Igb24gZW50cmllcy5cbiAgKlxuICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaXRlcmF0b3Igb2YgdGhlIEhlYWRlcnMgb2JqZWN0LlxuICAqXG4gICogQHJldHVybiAgSXRlcmF0b3JcbiAgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAna2V5K3ZhbHVlJyk7XG5cdH1cbn1cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSGVhZGVycy5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ0hlYWRlcnMnLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuXHRnZXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRmb3JFYWNoOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c2V0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0YXBwZW5kOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0aGFzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0ZGVsZXRlOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0a2V5czogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHZhbHVlczogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGVudHJpZXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuZnVuY3Rpb24gZ2V0SGVhZGVycyhoZWFkZXJzKSB7XG5cdGxldCBraW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAna2V5K3ZhbHVlJztcblxuXHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVyc1tNQVBdKS5zb3J0KCk7XG5cdHJldHVybiBrZXlzLm1hcChraW5kID09PSAna2V5JyA/IGZ1bmN0aW9uIChrKSB7XG5cdFx0cmV0dXJuIGsudG9Mb3dlckNhc2UoKTtcblx0fSA6IGtpbmQgPT09ICd2YWx1ZScgPyBmdW5jdGlvbiAoaykge1xuXHRcdHJldHVybiBoZWFkZXJzW01BUF1ba10uam9pbignLCAnKTtcblx0fSA6IGZ1bmN0aW9uIChrKSB7XG5cdFx0cmV0dXJuIFtrLnRvTG93ZXJDYXNlKCksIGhlYWRlcnNbTUFQXVtrXS5qb2luKCcsICcpXTtcblx0fSk7XG59XG5cbmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKCdpbnRlcm5hbCcpO1xuXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzSXRlcmF0b3IodGFyZ2V0LCBraW5kKSB7XG5cdGNvbnN0IGl0ZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUpO1xuXHRpdGVyYXRvcltJTlRFUk5BTF0gPSB7XG5cdFx0dGFyZ2V0LFxuXHRcdGtpbmQsXG5cdFx0aW5kZXg6IDBcblx0fTtcblx0cmV0dXJuIGl0ZXJhdG9yO1xufVxuXG5jb25zdCBIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Yoe1xuXHRuZXh0KCkge1xuXHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuXHRcdGlmICghdGhpcyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykgIT09IEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgb2YgYHRoaXNgIGlzIG5vdCBhIEhlYWRlcnNJdGVyYXRvcicpO1xuXHRcdH1cblxuXHRcdHZhciBfSU5URVJOQUwgPSB0aGlzW0lOVEVSTkFMXTtcblx0XHRjb25zdCB0YXJnZXQgPSBfSU5URVJOQUwudGFyZ2V0LFxuXHRcdCAgICAgIGtpbmQgPSBfSU5URVJOQUwua2luZCxcblx0XHQgICAgICBpbmRleCA9IF9JTlRFUk5BTC5pbmRleDtcblxuXHRcdGNvbnN0IHZhbHVlcyA9IGdldEhlYWRlcnModGFyZ2V0LCBraW5kKTtcblx0XHRjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoO1xuXHRcdGlmIChpbmRleCA+PSBsZW4pIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdGRvbmU6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTF0uaW5kZXggPSBpbmRleCArIDE7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dmFsdWU6IHZhbHVlc1tpbmRleF0sXG5cdFx0XHRkb25lOiBmYWxzZVxuXHRcdH07XG5cdH1cbn0sIE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSkpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdIZWFkZXJzSXRlcmF0b3InLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG4vKipcbiAqIEV4cG9ydCB0aGUgSGVhZGVycyBvYmplY3QgaW4gYSBmb3JtIHRoYXQgTm9kZS5qcyBjYW4gY29uc3VtZS5cbiAqXG4gKiBAcGFyYW0gICBIZWFkZXJzICBoZWFkZXJzXG4gKiBAcmV0dXJuICBPYmplY3RcbiAqL1xuZnVuY3Rpb24gZXhwb3J0Tm9kZUNvbXBhdGlibGVIZWFkZXJzKGhlYWRlcnMpIHtcblx0Y29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7IF9fcHJvdG9fXzogbnVsbCB9LCBoZWFkZXJzW01BUF0pO1xuXG5cdC8vIGh0dHAucmVxdWVzdCgpIG9ubHkgc3VwcG9ydHMgc3RyaW5nIGFzIEhvc3QgaGVhZGVyLiBUaGlzIGhhY2sgbWFrZXNcblx0Ly8gc3BlY2lmeWluZyBjdXN0b20gSG9zdCBoZWFkZXIgcG9zc2libGUuXG5cdGNvbnN0IGhvc3RIZWFkZXJLZXkgPSBmaW5kKGhlYWRlcnNbTUFQXSwgJ0hvc3QnKTtcblx0aWYgKGhvc3RIZWFkZXJLZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdG9ialtob3N0SGVhZGVyS2V5XSA9IG9ialtob3N0SGVhZGVyS2V5XVswXTtcblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgSGVhZGVycyBvYmplY3QgZnJvbSBhbiBvYmplY3Qgb2YgaGVhZGVycywgaWdub3JpbmcgdGhvc2UgdGhhdCBkb1xuICogbm90IGNvbmZvcm0gdG8gSFRUUCBncmFtbWFyIHByb2R1Y3Rpb25zLlxuICpcbiAqIEBwYXJhbSAgIE9iamVjdCAgb2JqICBPYmplY3Qgb2YgaGVhZGVyc1xuICogQHJldHVybiAgSGVhZGVyc1xuICovXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzTGVuaWVudChvYmopIHtcblx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG5cdGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG5cdFx0aWYgKGludmFsaWRUb2tlblJlZ2V4LnRlc3QobmFtZSkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmpbbmFtZV0pKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBvYmpbbmFtZV0pIHtcblx0XHRcdFx0aWYgKGludmFsaWRIZWFkZXJDaGFyUmVnZXgudGVzdCh2YWwpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGhlYWRlcnNbTUFQXVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1tNQVBdW25hbWVdID0gW3ZhbF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aGVhZGVyc1tNQVBdW25hbWVdLnB1c2godmFsKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIWludmFsaWRIZWFkZXJDaGFyUmVnZXgudGVzdChvYmpbbmFtZV0pKSB7XG5cdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0gPSBbb2JqW25hbWVdXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhlYWRlcnM7XG59XG5cbmNvbnN0IElOVEVSTkFMUyQxID0gU3ltYm9sKCdSZXNwb25zZSBpbnRlcm5hbHMnKTtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiU1RBVFVTX0NPREVTXCIgYXJlbid0IGEgbmFtZWQgZXhwb3J0IGZvciBub2RlIDwxMFxuY29uc3QgU1RBVFVTX0NPREVTID0gaHR0cC5TVEFUVVNfQ09ERVM7XG5cbi8qKlxuICogUmVzcG9uc2UgY2xhc3NcbiAqXG4gKiBAcGFyYW0gICBTdHJlYW0gIGJvZHkgIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtICAgT2JqZWN0ICBvcHRzICBSZXNwb25zZSBvcHRpb25zXG4gKiBAcmV0dXJuICBWb2lkXG4gKi9cbmNsYXNzIFJlc3BvbnNlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0bGV0IGJvZHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG5cdFx0bGV0IG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG5cdFx0Qm9keS5jYWxsKHRoaXMsIGJvZHksIG9wdHMpO1xuXG5cdFx0Y29uc3Qgc3RhdHVzID0gb3B0cy5zdGF0dXMgfHwgMjAwO1xuXHRcdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRzLmhlYWRlcnMpO1xuXG5cdFx0aWYgKGJvZHkgIT0gbnVsbCAmJiAhaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG5cdFx0XHRjb25zdCBjb250ZW50VHlwZSA9IGV4dHJhY3RDb250ZW50VHlwZShib2R5KTtcblx0XHRcdGlmIChjb250ZW50VHlwZSkge1xuXHRcdFx0XHRoZWFkZXJzLmFwcGVuZCgnQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbSU5URVJOQUxTJDFdID0ge1xuXHRcdFx0dXJsOiBvcHRzLnVybCxcblx0XHRcdHN0YXR1cyxcblx0XHRcdHN0YXR1c1RleHQ6IG9wdHMuc3RhdHVzVGV4dCB8fCBTVEFUVVNfQ09ERVNbc3RhdHVzXSxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRjb3VudGVyOiBvcHRzLmNvdW50ZXJcblx0XHR9O1xuXHR9XG5cblx0Z2V0IHVybCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0udXJsIHx8ICcnO1xuXHR9XG5cblx0Z2V0IHN0YXR1cygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzO1xuXHR9XG5cblx0LyoqXG4gICogQ29udmVuaWVuY2UgcHJvcGVydHkgcmVwcmVzZW50aW5nIGlmIHRoZSByZXF1ZXN0IGVuZGVkIG5vcm1hbGx5XG4gICovXG5cdGdldCBvaygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzID49IDIwMCAmJiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXMgPCAzMDA7XG5cdH1cblxuXHRnZXQgcmVkaXJlY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uY291bnRlciA+IDA7XG5cdH1cblxuXHRnZXQgc3RhdHVzVGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzVGV4dDtcblx0fVxuXG5cdGdldCBoZWFkZXJzKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5oZWFkZXJzO1xuXHR9XG5cblx0LyoqXG4gICogQ2xvbmUgdGhpcyByZXNwb25zZVxuICAqXG4gICogQHJldHVybiAgUmVzcG9uc2VcbiAgKi9cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXNwb25zZShjbG9uZSh0aGlzKSwge1xuXHRcdFx0dXJsOiB0aGlzLnVybCxcblx0XHRcdHN0YXR1czogdGhpcy5zdGF0dXMsXG5cdFx0XHRzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG5cdFx0XHRoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG5cdFx0XHRvazogdGhpcy5vayxcblx0XHRcdHJlZGlyZWN0ZWQ6IHRoaXMucmVkaXJlY3RlZFxuXHRcdH0pO1xuXHR9XG59XG5cbkJvZHkubWl4SW4oUmVzcG9uc2UucHJvdG90eXBlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XG5cdHVybDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHN0YXR1czogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdG9rOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0cmVkaXJlY3RlZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHN0YXR1c1RleHQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoZWFkZXJzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0Y2xvbmU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc3BvbnNlLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnUmVzcG9uc2UnLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5jb25zdCBJTlRFUk5BTFMkMiA9IFN5bWJvbCgnUmVxdWVzdCBpbnRlcm5hbHMnKTtcbmNvbnN0IFVSTCA9IFVybC5VUkwgfHwgd2hhdHdnVXJsLlVSTDtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiZm9ybWF0XCIsIFwicGFyc2VcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBwYXJzZV91cmwgPSBVcmwucGFyc2U7XG5jb25zdCBmb3JtYXRfdXJsID0gVXJsLmZvcm1hdDtcblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBgbmV3IFVSTGAgdG8gaGFuZGxlIGFyYml0cmFyeSBVUkxzXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB1cmxTdHJcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVVJMKHVybFN0cikge1xuXHQvKlxuIFx0Q2hlY2sgd2hldGhlciB0aGUgVVJMIGlzIGFic29sdXRlIG9yIG5vdFxuIFx0XHRTY2hlbWU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xXG4gXHRBYnNvbHV0ZSBVUkw6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4zXG4gKi9cblx0aWYgKC9eW2EtekEtWl1bYS16QS1aXFxkK1xcLS5dKjovLmV4ZWModXJsU3RyKSkge1xuXHRcdHVybFN0ciA9IG5ldyBVUkwodXJsU3RyKS50b1N0cmluZygpO1xuXHR9XG5cblx0Ly8gRmFsbGJhY2sgdG8gb2xkIGltcGxlbWVudGF0aW9uIGZvciBhcmJpdHJhcnkgVVJMc1xuXHRyZXR1cm4gcGFyc2VfdXJsKHVybFN0cik7XG59XG5cbmNvbnN0IHN0cmVhbURlc3RydWN0aW9uU3VwcG9ydGVkID0gJ2Rlc3Ryb3knIGluIFN0cmVhbS5SZWFkYWJsZS5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBSZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgaW5wdXRcbiAqIEByZXR1cm4gIEJvb2xlYW5cbiAqL1xuZnVuY3Rpb24gaXNSZXF1ZXN0KGlucHV0KSB7XG5cdHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBpbnB1dFtJTlRFUk5BTFMkMl0gPT09ICdvYmplY3QnO1xufVxuXG5mdW5jdGlvbiBpc0Fib3J0U2lnbmFsKHNpZ25hbCkge1xuXHRjb25zdCBwcm90byA9IHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsID09PSAnb2JqZWN0JyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc2lnbmFsKTtcblx0cmV0dXJuICEhKHByb3RvICYmIHByb3RvLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBYm9ydFNpZ25hbCcpO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgY2xhc3NcbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgIGlucHV0ICBVcmwgb3IgUmVxdWVzdCBpbnN0YW5jZVxuICogQHBhcmFtICAgT2JqZWN0ICBpbml0ICAgQ3VzdG9tIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuY2xhc3MgUmVxdWVzdCB7XG5cdGNvbnN0cnVjdG9yKGlucHV0KSB7XG5cdFx0bGV0IGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG5cdFx0bGV0IHBhcnNlZFVSTDtcblxuXHRcdC8vIG5vcm1hbGl6ZSBpbnB1dFxuXHRcdGlmICghaXNSZXF1ZXN0KGlucHV0KSkge1xuXHRcdFx0aWYgKGlucHV0ICYmIGlucHV0LmhyZWYpIHtcblx0XHRcdFx0Ly8gaW4gb3JkZXIgdG8gc3VwcG9ydCBOb2RlLmpzJyBVcmwgb2JqZWN0czsgdGhvdWdoIFdIQVRXRydzIFVSTCBvYmplY3RzXG5cdFx0XHRcdC8vIHdpbGwgZmFsbCBpbnRvIHRoaXMgYnJhbmNoIGFsc28gKHNpbmNlIHRoZWlyIGB0b1N0cmluZygpYCB3aWxsIHJldHVyblxuXHRcdFx0XHQvLyBgaHJlZmAgcHJvcGVydHkgYW55d2F5KVxuXHRcdFx0XHRwYXJzZWRVUkwgPSBwYXJzZVVSTChpbnB1dC5ocmVmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGNvZXJjZSBpbnB1dCB0byBhIHN0cmluZyBiZWZvcmUgYXR0ZW1wdGluZyB0byBwYXJzZVxuXHRcdFx0XHRwYXJzZWRVUkwgPSBwYXJzZVVSTChgJHtpbnB1dH1gKTtcblx0XHRcdH1cblx0XHRcdGlucHV0ID0ge307XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGlucHV0LnVybCk7XG5cdFx0fVxuXG5cdFx0bGV0IG1ldGhvZCA9IGluaXQubWV0aG9kIHx8IGlucHV0Lm1ldGhvZCB8fCAnR0VUJztcblx0XHRtZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKTtcblxuXHRcdGlmICgoaW5pdC5ib2R5ICE9IG51bGwgfHwgaXNSZXF1ZXN0KGlucHV0KSAmJiBpbnB1dC5ib2R5ICE9PSBudWxsKSAmJiAobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3Qgd2l0aCBHRVQvSEVBRCBtZXRob2QgY2Fubm90IGhhdmUgYm9keScpO1xuXHRcdH1cblxuXHRcdGxldCBpbnB1dEJvZHkgPSBpbml0LmJvZHkgIT0gbnVsbCA/IGluaXQuYm9keSA6IGlzUmVxdWVzdChpbnB1dCkgJiYgaW5wdXQuYm9keSAhPT0gbnVsbCA/IGNsb25lKGlucHV0KSA6IG51bGw7XG5cblx0XHRCb2R5LmNhbGwodGhpcywgaW5wdXRCb2R5LCB7XG5cdFx0XHR0aW1lb3V0OiBpbml0LnRpbWVvdXQgfHwgaW5wdXQudGltZW91dCB8fCAwLFxuXHRcdFx0c2l6ZTogaW5pdC5zaXplIHx8IGlucHV0LnNpemUgfHwgMFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGluaXQuaGVhZGVycyB8fCBpbnB1dC5oZWFkZXJzIHx8IHt9KTtcblxuXHRcdGlmIChpbnB1dEJvZHkgIT0gbnVsbCAmJiAhaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG5cdFx0XHRjb25zdCBjb250ZW50VHlwZSA9IGV4dHJhY3RDb250ZW50VHlwZShpbnB1dEJvZHkpO1xuXHRcdFx0aWYgKGNvbnRlbnRUeXBlKSB7XG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHNpZ25hbCA9IGlzUmVxdWVzdChpbnB1dCkgPyBpbnB1dC5zaWduYWwgOiBudWxsO1xuXHRcdGlmICgnc2lnbmFsJyBpbiBpbml0KSBzaWduYWwgPSBpbml0LnNpZ25hbDtcblxuXHRcdGlmIChzaWduYWwgIT0gbnVsbCAmJiAhaXNBYm9ydFNpZ25hbChzaWduYWwpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzaWduYWwgdG8gYmUgYW4gaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCcpO1xuXHRcdH1cblxuXHRcdHRoaXNbSU5URVJOQUxTJDJdID0ge1xuXHRcdFx0bWV0aG9kLFxuXHRcdFx0cmVkaXJlY3Q6IGluaXQucmVkaXJlY3QgfHwgaW5wdXQucmVkaXJlY3QgfHwgJ2ZvbGxvdycsXG5cdFx0XHRoZWFkZXJzLFxuXHRcdFx0cGFyc2VkVVJMLFxuXHRcdFx0c2lnbmFsXG5cdFx0fTtcblxuXHRcdC8vIG5vZGUtZmV0Y2gtb25seSBvcHRpb25zXG5cdFx0dGhpcy5mb2xsb3cgPSBpbml0LmZvbGxvdyAhPT0gdW5kZWZpbmVkID8gaW5pdC5mb2xsb3cgOiBpbnB1dC5mb2xsb3cgIT09IHVuZGVmaW5lZCA/IGlucHV0LmZvbGxvdyA6IDIwO1xuXHRcdHRoaXMuY29tcHJlc3MgPSBpbml0LmNvbXByZXNzICE9PSB1bmRlZmluZWQgPyBpbml0LmNvbXByZXNzIDogaW5wdXQuY29tcHJlc3MgIT09IHVuZGVmaW5lZCA/IGlucHV0LmNvbXByZXNzIDogdHJ1ZTtcblx0XHR0aGlzLmNvdW50ZXIgPSBpbml0LmNvdW50ZXIgfHwgaW5wdXQuY291bnRlciB8fCAwO1xuXHRcdHRoaXMuYWdlbnQgPSBpbml0LmFnZW50IHx8IGlucHV0LmFnZW50O1xuXHR9XG5cblx0Z2V0IG1ldGhvZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0ubWV0aG9kO1xuXHR9XG5cblx0Z2V0IHVybCgpIHtcblx0XHRyZXR1cm4gZm9ybWF0X3VybCh0aGlzW0lOVEVSTkFMUyQyXS5wYXJzZWRVUkwpO1xuXHR9XG5cblx0Z2V0IGhlYWRlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDJdLmhlYWRlcnM7XG5cdH1cblxuXHRnZXQgcmVkaXJlY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDJdLnJlZGlyZWN0O1xuXHR9XG5cblx0Z2V0IHNpZ25hbCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0uc2lnbmFsO1xuXHR9XG5cblx0LyoqXG4gICogQ2xvbmUgdGhpcyByZXF1ZXN0XG4gICpcbiAgKiBAcmV0dXJuICBSZXF1ZXN0XG4gICovXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdCh0aGlzKTtcblx0fVxufVxuXG5Cb2R5Lm1peEluKFJlcXVlc3QucHJvdG90eXBlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlcXVlc3QucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdSZXF1ZXN0Jyxcblx0d3JpdGFibGU6IGZhbHNlLFxuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcblx0bWV0aG9kOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dXJsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0aGVhZGVyczogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHJlZGlyZWN0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0Y2xvbmU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzaWduYWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgUmVxdWVzdCB0byBOb2RlLmpzIGh0dHAgcmVxdWVzdCBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAgIFJlcXVlc3QgIEEgUmVxdWVzdCBpbnN0YW5jZVxuICogQHJldHVybiAgT2JqZWN0ICAgVGhlIG9wdGlvbnMgb2JqZWN0IHRvIGJlIHBhc3NlZCB0byBodHRwLnJlcXVlc3RcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZVJlcXVlc3RPcHRpb25zKHJlcXVlc3QpIHtcblx0Y29uc3QgcGFyc2VkVVJMID0gcmVxdWVzdFtJTlRFUk5BTFMkMl0ucGFyc2VkVVJMO1xuXHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMocmVxdWVzdFtJTlRFUk5BTFMkMl0uaGVhZGVycyk7XG5cblx0Ly8gZmV0Y2ggc3RlcCAxLjNcblx0aWYgKCFoZWFkZXJzLmhhcygnQWNjZXB0JykpIHtcblx0XHRoZWFkZXJzLnNldCgnQWNjZXB0JywgJyovKicpO1xuXHR9XG5cblx0Ly8gQmFzaWMgZmV0Y2hcblx0aWYgKCFwYXJzZWRVUkwucHJvdG9jb2wgfHwgIXBhcnNlZFVSTC5ob3N0bmFtZSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09ubHkgYWJzb2x1dGUgVVJMcyBhcmUgc3VwcG9ydGVkJyk7XG5cdH1cblxuXHRpZiAoIS9eaHR0cHM/OiQvLnRlc3QocGFyc2VkVVJMLnByb3RvY29sKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09ubHkgSFRUUChTKSBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZCcpO1xuXHR9XG5cblx0aWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIFN0cmVhbS5SZWFkYWJsZSAmJiAhc3RyZWFtRGVzdHJ1Y3Rpb25TdXBwb3J0ZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhbmNlbGxhdGlvbiBvZiBzdHJlYW1lZCByZXF1ZXN0cyB3aXRoIEFib3J0U2lnbmFsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbm9kZSA8IDgnKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBzdGVwcyAyLjQtMi43XG5cdGxldCBjb250ZW50TGVuZ3RoVmFsdWUgPSBudWxsO1xuXHRpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgL14oUE9TVHxQVVQpJC9pLnRlc3QocmVxdWVzdC5tZXRob2QpKSB7XG5cdFx0Y29udGVudExlbmd0aFZhbHVlID0gJzAnO1xuXHR9XG5cdGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuXHRcdGNvbnN0IHRvdGFsQnl0ZXMgPSBnZXRUb3RhbEJ5dGVzKHJlcXVlc3QpO1xuXHRcdGlmICh0eXBlb2YgdG90YWxCeXRlcyA9PT0gJ251bWJlcicpIHtcblx0XHRcdGNvbnRlbnRMZW5ndGhWYWx1ZSA9IFN0cmluZyh0b3RhbEJ5dGVzKTtcblx0XHR9XG5cdH1cblx0aWYgKGNvbnRlbnRMZW5ndGhWYWx1ZSkge1xuXHRcdGhlYWRlcnMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGNvbnRlbnRMZW5ndGhWYWx1ZSk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggc3RlcCAyLjExXG5cdGlmICghaGVhZGVycy5oYXMoJ1VzZXItQWdlbnQnKSkge1xuXHRcdGhlYWRlcnMuc2V0KCdVc2VyLUFnZW50JywgJ25vZGUtZmV0Y2gvMS4wICgraHR0cHM6Ly9naXRodWIuY29tL2JpdGlubi9ub2RlLWZldGNoKScpO1xuXHR9XG5cblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXAgMi4xNVxuXHRpZiAocmVxdWVzdC5jb21wcmVzcyAmJiAhaGVhZGVycy5oYXMoJ0FjY2VwdC1FbmNvZGluZycpKSB7XG5cdFx0aGVhZGVycy5zZXQoJ0FjY2VwdC1FbmNvZGluZycsICdnemlwLGRlZmxhdGUnKTtcblx0fVxuXG5cdGxldCBhZ2VudCA9IHJlcXVlc3QuYWdlbnQ7XG5cdGlmICh0eXBlb2YgYWdlbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRhZ2VudCA9IGFnZW50KHBhcnNlZFVSTCk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCA0LjJcblx0Ly8gY2h1bmtlZCBlbmNvZGluZyBpcyBoYW5kbGVkIGJ5IE5vZGUuanNcblxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkVVJMLCB7XG5cdFx0bWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcblx0XHRoZWFkZXJzOiBleHBvcnROb2RlQ29tcGF0aWJsZUhlYWRlcnMoaGVhZGVycyksXG5cdFx0YWdlbnRcblx0fSk7XG59XG5cbi8qKlxuICogYWJvcnQtZXJyb3IuanNcbiAqXG4gKiBBYm9ydEVycm9yIGludGVyZmFjZSBmb3IgY2FuY2VsbGVkIHJlcXVlc3RzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgQWJvcnRFcnJvciBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIG1lc3NhZ2UgICAgICBFcnJvciBtZXNzYWdlIGZvciBodW1hblxuICogQHJldHVybiAgQWJvcnRFcnJvclxuICovXG5mdW5jdGlvbiBBYm9ydEVycm9yKG1lc3NhZ2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICB0aGlzLnR5cGUgPSAnYWJvcnRlZCc7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cbiAgLy8gaGlkZSBjdXN0b20gZXJyb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmcm9tIGVuZC11c2Vyc1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbn1cblxuQWJvcnRFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5BYm9ydEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFib3J0RXJyb3I7XG5BYm9ydEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0Fib3J0RXJyb3InO1xuXG5jb25zdCBVUkwkMSA9IFVybC5VUkwgfHwgd2hhdHdnVXJsLlVSTDtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiUGFzc1Rocm91Z2hcIiwgXCJyZXNvbHZlXCIgYXJlbid0IGEgbmFtZWQgZXhwb3J0IGZvciBub2RlIDwxMFxuY29uc3QgUGFzc1Rocm91Z2gkMSA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcblxuY29uc3QgaXNEb21haW5PclN1YmRvbWFpbiA9IGZ1bmN0aW9uIGlzRG9tYWluT3JTdWJkb21haW4oZGVzdGluYXRpb24sIG9yaWdpbmFsKSB7XG5cdGNvbnN0IG9yaWcgPSBuZXcgVVJMJDEob3JpZ2luYWwpLmhvc3RuYW1lO1xuXHRjb25zdCBkZXN0ID0gbmV3IFVSTCQxKGRlc3RpbmF0aW9uKS5ob3N0bmFtZTtcblxuXHRyZXR1cm4gb3JpZyA9PT0gZGVzdCB8fCBvcmlnW29yaWcubGVuZ3RoIC0gZGVzdC5sZW5ndGggLSAxXSA9PT0gJy4nICYmIG9yaWcuZW5kc1dpdGgoZGVzdCk7XG59O1xuXG4vKipcbiAqIGlzU2FtZVByb3RvY29sIHJlcG9ydHMgd2hldGhlciB0aGUgdHdvIHByb3ZpZGVkIFVSTHMgdXNlIHRoZSBzYW1lIHByb3RvY29sLlxuICpcbiAqIEJvdGggZG9tYWlucyBtdXN0IGFscmVhZHkgYmUgaW4gY2Fub25pY2FsIGZvcm0uXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IG9yaWdpbmFsXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IGRlc3RpbmF0aW9uXG4gKi9cbmNvbnN0IGlzU2FtZVByb3RvY29sID0gZnVuY3Rpb24gaXNTYW1lUHJvdG9jb2woZGVzdGluYXRpb24sIG9yaWdpbmFsKSB7XG5cdGNvbnN0IG9yaWcgPSBuZXcgVVJMJDEob3JpZ2luYWwpLnByb3RvY29sO1xuXHRjb25zdCBkZXN0ID0gbmV3IFVSTCQxKGRlc3RpbmF0aW9uKS5wcm90b2NvbDtcblxuXHRyZXR1cm4gb3JpZyA9PT0gZGVzdDtcbn07XG5cbi8qKlxuICogRmV0Y2ggZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgICB1cmwgICBBYnNvbHV0ZSB1cmwgb3IgUmVxdWVzdCBpbnN0YW5jZVxuICogQHBhcmFtICAgT2JqZWN0ICAgb3B0cyAgRmV0Y2ggb3B0aW9uc1xuICogQHJldHVybiAgUHJvbWlzZVxuICovXG5mdW5jdGlvbiBmZXRjaCh1cmwsIG9wdHMpIHtcblxuXHQvLyBhbGxvdyBjdXN0b20gcHJvbWlzZVxuXHRpZiAoIWZldGNoLlByb21pc2UpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ25hdGl2ZSBwcm9taXNlIG1pc3NpbmcsIHNldCBmZXRjaC5Qcm9taXNlIHRvIHlvdXIgZmF2b3JpdGUgYWx0ZXJuYXRpdmUnKTtcblx0fVxuXG5cdEJvZHkuUHJvbWlzZSA9IGZldGNoLlByb21pc2U7XG5cblx0Ly8gd3JhcCBodHRwLnJlcXVlc3QgaW50byBmZXRjaFxuXHRyZXR1cm4gbmV3IGZldGNoLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdC8vIGJ1aWxkIHJlcXVlc3Qgb2JqZWN0XG5cdFx0Y29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwgb3B0cyk7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldE5vZGVSZXF1ZXN0T3B0aW9ucyhyZXF1ZXN0KTtcblxuXHRcdGNvbnN0IHNlbmQgPSAob3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBodHRwcyA6IGh0dHApLnJlcXVlc3Q7XG5cdFx0Y29uc3Qgc2lnbmFsID0gcmVxdWVzdC5zaWduYWw7XG5cblx0XHRsZXQgcmVzcG9uc2UgPSBudWxsO1xuXG5cdFx0Y29uc3QgYWJvcnQgPSBmdW5jdGlvbiBhYm9ydCgpIHtcblx0XHRcdGxldCBlcnJvciA9IG5ldyBBYm9ydEVycm9yKCdUaGUgdXNlciBhYm9ydGVkIGEgcmVxdWVzdC4nKTtcblx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHRpZiAocmVxdWVzdC5ib2R5ICYmIHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIFN0cmVhbS5SZWFkYWJsZSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlcXVlc3QuYm9keSwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UuYm9keSkgcmV0dXJuO1xuXHRcdFx0cmVzcG9uc2UuYm9keS5lbWl0KCdlcnJvcicsIGVycm9yKTtcblx0XHR9O1xuXG5cdFx0aWYgKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkge1xuXHRcdFx0YWJvcnQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBhYm9ydEFuZEZpbmFsaXplID0gZnVuY3Rpb24gYWJvcnRBbmRGaW5hbGl6ZSgpIHtcblx0XHRcdGFib3J0KCk7XG5cdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdH07XG5cblx0XHQvLyBzZW5kIHJlcXVlc3Rcblx0XHRjb25zdCByZXEgPSBzZW5kKG9wdGlvbnMpO1xuXHRcdGxldCByZXFUaW1lb3V0O1xuXG5cdFx0aWYgKHNpZ25hbCkge1xuXHRcdFx0c2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZmluYWxpemUoKSB7XG5cdFx0XHRyZXEuYWJvcnQoKTtcblx0XHRcdGlmIChzaWduYWwpIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0QW5kRmluYWxpemUpO1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHJlcVRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0LnRpbWVvdXQpIHtcblx0XHRcdHJlcS5vbmNlKCdzb2NrZXQnLCBmdW5jdGlvbiAoc29ja2V0KSB7XG5cdFx0XHRcdHJlcVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYG5ldHdvcmsgdGltZW91dCBhdDogJHtyZXF1ZXN0LnVybH1gLCAncmVxdWVzdC10aW1lb3V0JykpO1xuXHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdH0sIHJlcXVlc3QudGltZW91dCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGByZXF1ZXN0IHRvICR7cmVxdWVzdC51cmx9IGZhaWxlZCwgcmVhc29uOiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpKTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmJvZHkpIHtcblx0XHRcdFx0ZGVzdHJveVN0cmVhbShyZXNwb25zZS5ib2R5LCBlcnIpO1xuXHRcdFx0fVxuXG5cdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdH0pO1xuXG5cdFx0Zml4UmVzcG9uc2VDaHVua2VkVHJhbnNmZXJCYWRFbmRpbmcocmVxLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmJvZHkpIHtcblx0XHRcdFx0ZGVzdHJveVN0cmVhbShyZXNwb25zZS5ib2R5LCBlcnIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0LyogYzggaWdub3JlIG5leHQgMTggKi9cblx0XHRpZiAocGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnN1YnN0cmluZygxKSkgPCAxNCkge1xuXHRcdFx0Ly8gQmVmb3JlIE5vZGUuanMgMTQsIHBpcGVsaW5lKCkgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBhc3luYyBpdGVyYXRvcnMgYW5kIGRvZXMgbm90IGFsd2F5c1xuXHRcdFx0Ly8gcHJvcGVybHkgaGFuZGxlIHdoZW4gdGhlIHNvY2tldCBjbG9zZS9lbmQgZXZlbnRzIGFyZSBvdXQgb2Ygb3JkZXIuXG5cdFx0XHRyZXEub24oJ3NvY2tldCcsIGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdHMuYWRkTGlzdGVuZXIoJ2Nsb3NlJywgZnVuY3Rpb24gKGhhZEVycm9yKSB7XG5cdFx0XHRcdFx0Ly8gaWYgYSBkYXRhIGxpc3RlbmVyIGlzIHN0aWxsIHByZXNlbnQgd2UgZGlkbid0IGVuZCBjbGVhbmx5XG5cdFx0XHRcdFx0Y29uc3QgaGFzRGF0YUxpc3RlbmVyID0gcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwO1xuXG5cdFx0XHRcdFx0Ly8gaWYgZW5kIGhhcHBlbmVkIGJlZm9yZSBjbG9zZSBidXQgdGhlIHNvY2tldCBkaWRuJ3QgZW1pdCBhbiBlcnJvciwgZG8gaXQgbm93XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlICYmIGhhc0RhdGFMaXN0ZW5lciAmJiAhaGFkRXJyb3IgJiYgIShzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1ByZW1hdHVyZSBjbG9zZScpO1xuXHRcdFx0XHRcdFx0ZXJyLmNvZGUgPSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnO1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UuYm9keS5lbWl0KCdlcnJvcicsIGVycik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJlcS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQocmVxVGltZW91dCk7XG5cblx0XHRcdGNvbnN0IGhlYWRlcnMgPSBjcmVhdGVIZWFkZXJzTGVuaWVudChyZXMuaGVhZGVycyk7XG5cblx0XHRcdC8vIEhUVFAgZmV0Y2ggc3RlcCA1XG5cdFx0XHRpZiAoZmV0Y2guaXNSZWRpcmVjdChyZXMuc3RhdHVzQ29kZSkpIHtcblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuMlxuXHRcdFx0XHRjb25zdCBsb2NhdGlvbiA9IGhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpO1xuXG5cdFx0XHRcdC8vIEhUVFAgZmV0Y2ggc3RlcCA1LjNcblx0XHRcdFx0bGV0IGxvY2F0aW9uVVJMID0gbnVsbDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2NhdGlvblVSTCA9IGxvY2F0aW9uID09PSBudWxsID8gbnVsbCA6IG5ldyBVUkwkMShsb2NhdGlvbiwgcmVxdWVzdC51cmwpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdC8vIGVycm9yIGhlcmUgY2FuIG9ubHkgYmUgaW52YWxpZCBVUkwgaW4gTG9jYXRpb246IGhlYWRlclxuXHRcdFx0XHRcdC8vIGRvIG5vdCB0aHJvdyB3aGVuIG9wdGlvbnMucmVkaXJlY3QgPT0gbWFudWFsXG5cdFx0XHRcdFx0Ly8gbGV0IHRoZSB1c2VyIGV4dHJhY3QgdGhlIGVycm9ybmVvdXMgcmVkaXJlY3QgVVJMXG5cdFx0XHRcdFx0aWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdtYW51YWwnKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHVyaSByZXF1ZXN0ZWQgcmVzcG9uZHMgd2l0aCBhbiBpbnZhbGlkIHJlZGlyZWN0IFVSTDogJHtsb2NhdGlvbn1gLCAnaW52YWxpZC1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuNVxuXHRcdFx0XHRzd2l0Y2ggKHJlcXVlc3QucmVkaXJlY3QpIHtcblx0XHRcdFx0XHRjYXNlICdlcnJvcic6XG5cdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHVyaSByZXF1ZXN0ZWQgcmVzcG9uZHMgd2l0aCBhIHJlZGlyZWN0LCByZWRpcmVjdCBtb2RlIGlzIHNldCB0byBlcnJvcjogJHtyZXF1ZXN0LnVybH1gLCAnbm8tcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdGNhc2UgJ21hbnVhbCc6XG5cdFx0XHRcdFx0XHQvLyBub2RlLWZldGNoLXNwZWNpZmljIHN0ZXA6IG1ha2UgbWFudWFsIHJlZGlyZWN0IGEgYml0IGVhc2llciB0byB1c2UgYnkgc2V0dGluZyB0aGUgTG9jYXRpb24gaGVhZGVyIHZhbHVlIHRvIHRoZSByZXNvbHZlZCBVUkwuXG5cdFx0XHRcdFx0XHRpZiAobG9jYXRpb25VUkwgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaGFuZGxlIGNvcnJ1cHRlZCBoZWFkZXJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRoZWFkZXJzLnNldCgnTG9jYXRpb24nLCBsb2NhdGlvblVSTCk7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBub2RlanMgc2VydmVyIHByZXZlbnQgaW52YWxpZCByZXNwb25zZSBoZWFkZXJzLCB3ZSBjYW4ndCB0ZXN0IHRoaXMgdGhyb3VnaCBub3JtYWwgcmVxdWVzdFxuXHRcdFx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdmb2xsb3cnOlxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDJcblx0XHRcdFx0XHRcdGlmIChsb2NhdGlvblVSTCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDVcblx0XHRcdFx0XHRcdGlmIChyZXF1ZXN0LmNvdW50ZXIgPj0gcmVxdWVzdC5mb2xsb3cpIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBtYXhpbXVtIHJlZGlyZWN0IHJlYWNoZWQgYXQ6ICR7cmVxdWVzdC51cmx9YCwgJ21heC1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgNiAoY291bnRlciBpbmNyZW1lbnQpXG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgUmVxdWVzdCBvYmplY3QuXG5cdFx0XHRcdFx0XHRjb25zdCByZXF1ZXN0T3B0cyA9IHtcblx0XHRcdFx0XHRcdFx0aGVhZGVyczogbmV3IEhlYWRlcnMocmVxdWVzdC5oZWFkZXJzKSxcblx0XHRcdFx0XHRcdFx0Zm9sbG93OiByZXF1ZXN0LmZvbGxvdyxcblx0XHRcdFx0XHRcdFx0Y291bnRlcjogcmVxdWVzdC5jb3VudGVyICsgMSxcblx0XHRcdFx0XHRcdFx0YWdlbnQ6IHJlcXVlc3QuYWdlbnQsXG5cdFx0XHRcdFx0XHRcdGNvbXByZXNzOiByZXF1ZXN0LmNvbXByZXNzLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRib2R5OiByZXF1ZXN0LmJvZHksXG5cdFx0XHRcdFx0XHRcdHNpZ25hbDogcmVxdWVzdC5zaWduYWwsXG5cdFx0XHRcdFx0XHRcdHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcblx0XHRcdFx0XHRcdFx0c2l6ZTogcmVxdWVzdC5zaXplXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRpZiAoIWlzRG9tYWluT3JTdWJkb21haW4ocmVxdWVzdC51cmwsIGxvY2F0aW9uVVJMKSB8fCAhaXNTYW1lUHJvdG9jb2wocmVxdWVzdC51cmwsIGxvY2F0aW9uVVJMKSkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgWydhdXRob3JpemF0aW9uJywgJ3d3dy1hdXRoZW50aWNhdGUnLCAnY29va2llJywgJ2Nvb2tpZTInXSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRzLmhlYWRlcnMuZGVsZXRlKG5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCA5XG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgIT09IDMwMyAmJiByZXF1ZXN0LmJvZHkgJiYgZ2V0VG90YWxCeXRlcyhyZXF1ZXN0KSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoJ0Nhbm5vdCBmb2xsb3cgcmVkaXJlY3Qgd2l0aCBib2R5IGJlaW5nIGEgcmVhZGFibGUgc3RyZWFtJywgJ3Vuc3VwcG9ydGVkLXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCAxMVxuXHRcdFx0XHRcdFx0aWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDMgfHwgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwMikgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdQT1NUJykge1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5tZXRob2QgPSAnR0VUJztcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuYm9keSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuaGVhZGVycy5kZWxldGUoJ2NvbnRlbnQtbGVuZ3RoJyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCAxNVxuXHRcdFx0XHRcdFx0cmVzb2x2ZShmZXRjaChuZXcgUmVxdWVzdChsb2NhdGlvblVSTCwgcmVxdWVzdE9wdHMpKSk7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByZXBhcmUgcmVzcG9uc2Vcblx0XHRcdHJlcy5vbmNlKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChzaWduYWwpIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0QW5kRmluYWxpemUpO1xuXHRcdFx0fSk7XG5cdFx0XHRsZXQgYm9keSA9IHJlcy5waXBlKG5ldyBQYXNzVGhyb3VnaCQxKCkpO1xuXG5cdFx0XHRjb25zdCByZXNwb25zZV9vcHRpb25zID0ge1xuXHRcdFx0XHR1cmw6IHJlcXVlc3QudXJsLFxuXHRcdFx0XHRzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuXHRcdFx0XHRzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcblx0XHRcdFx0aGVhZGVyczogaGVhZGVycyxcblx0XHRcdFx0c2l6ZTogcmVxdWVzdC5zaXplLFxuXHRcdFx0XHR0aW1lb3V0OiByZXF1ZXN0LnRpbWVvdXQsXG5cdFx0XHRcdGNvdW50ZXI6IHJlcXVlc3QuY291bnRlclxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gSFRUUC1uZXR3b3JrIGZldGNoIHN0ZXAgMTIuMS4xLjNcblx0XHRcdGNvbnN0IGNvZGluZ3MgPSBoZWFkZXJzLmdldCgnQ29udGVudC1FbmNvZGluZycpO1xuXG5cdFx0XHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCAxMi4xLjEuNDogaGFuZGxlIGNvbnRlbnQgY29kaW5nc1xuXG5cdFx0XHQvLyBpbiBmb2xsb3dpbmcgc2NlbmFyaW9zIHdlIGlnbm9yZSBjb21wcmVzc2lvbiBzdXBwb3J0XG5cdFx0XHQvLyAxLiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGRpc2FibGVkXG5cdFx0XHQvLyAyLiBIRUFEIHJlcXVlc3Rcblx0XHRcdC8vIDMuIG5vIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyXG5cdFx0XHQvLyA0LiBubyBjb250ZW50IHJlc3BvbnNlICgyMDQpXG5cdFx0XHQvLyA1LiBjb250ZW50IG5vdCBtb2RpZmllZCByZXNwb25zZSAoMzA0KVxuXHRcdFx0aWYgKCFyZXF1ZXN0LmNvbXByZXNzIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcgfHwgY29kaW5ncyA9PT0gbnVsbCB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHJlcy5zdGF0dXNDb2RlID09PSAzMDQpIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBOb2RlIHY2K1xuXHRcdFx0Ly8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG5cdFx0XHQvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcblx0XHRcdC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cblx0XHRcdC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG5cdFx0XHRjb25zdCB6bGliT3B0aW9ucyA9IHtcblx0XHRcdFx0Zmx1c2g6IHpsaWIuWl9TWU5DX0ZMVVNILFxuXHRcdFx0XHRmaW5pc2hGbHVzaDogemxpYi5aX1NZTkNfRkxVU0hcblx0XHRcdH07XG5cblx0XHRcdC8vIGZvciBnemlwXG5cdFx0XHRpZiAoY29kaW5ncyA9PSAnZ3ppcCcgfHwgY29kaW5ncyA9PSAneC1nemlwJykge1xuXHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlR3VuemlwKHpsaWJPcHRpb25zKSk7XG5cdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmb3IgZGVmbGF0ZVxuXHRcdFx0aWYgKGNvZGluZ3MgPT0gJ2RlZmxhdGUnIHx8IGNvZGluZ3MgPT0gJ3gtZGVmbGF0ZScpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIHRoZSBpbmZhbW91cyByYXcgZGVmbGF0ZSByZXNwb25zZSBmcm9tIG9sZCBzZXJ2ZXJzXG5cdFx0XHRcdC8vIGEgaGFjayBmb3Igb2xkIElJUyBhbmQgQXBhY2hlIHNlcnZlcnNcblx0XHRcdFx0Y29uc3QgcmF3ID0gcmVzLnBpcGUobmV3IFBhc3NUaHJvdWdoJDEoKSk7XG5cdFx0XHRcdHJhdy5vbmNlKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG5cdFx0XHRcdFx0Ly8gc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzc1MTk4Mjhcblx0XHRcdFx0XHRpZiAoKGNodW5rWzBdICYgMHgwRikgPT09IDB4MDgpIHtcblx0XHRcdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVJbmZsYXRlKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyYXcub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQvLyBzb21lIG9sZCBJSVMgc2VydmVycyByZXR1cm4gemVyby1sZW5ndGggT0sgZGVmbGF0ZSByZXNwb25zZXMsIHNvICdkYXRhJyBpcyBuZXZlciBlbWl0dGVkLlxuXHRcdFx0XHRcdGlmICghcmVzcG9uc2UpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmb3IgYnJcblx0XHRcdGlmIChjb2RpbmdzID09ICdicicgJiYgdHlwZW9mIHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKTtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIG90aGVyd2lzZSwgdXNlIHJlc3BvbnNlIGFzLWlzXG5cdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdH0pO1xuXG5cdFx0d3JpdGVUb1N0cmVhbShyZXEsIHJlcXVlc3QpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGZpeFJlc3BvbnNlQ2h1bmtlZFRyYW5zZmVyQmFkRW5kaW5nKHJlcXVlc3QsIGVycm9yQ2FsbGJhY2spIHtcblx0bGV0IHNvY2tldDtcblxuXHRyZXF1ZXN0Lm9uKCdzb2NrZXQnLCBmdW5jdGlvbiAocykge1xuXHRcdHNvY2tldCA9IHM7XG5cdH0pO1xuXG5cdHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cdFx0Y29uc3QgaGVhZGVycyA9IHJlc3BvbnNlLmhlYWRlcnM7XG5cblx0XHRpZiAoaGVhZGVyc1sndHJhbnNmZXItZW5jb2RpbmcnXSA9PT0gJ2NodW5rZWQnICYmICFoZWFkZXJzWydjb250ZW50LWxlbmd0aCddKSB7XG5cdFx0XHRyZXNwb25zZS5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uIChoYWRFcnJvcikge1xuXHRcdFx0XHQvLyB0ZXN0cyBmb3Igc29ja2V0IHByZXNlbmNlLCBhcyBpbiBzb21lIHNpdHVhdGlvbnMgdGhlXG5cdFx0XHRcdC8vIHRoZSAnc29ja2V0JyBldmVudCBpcyBub3QgdHJpZ2dlcmVkIGZvciB0aGUgcmVxdWVzdFxuXHRcdFx0XHQvLyAoaGFwcGVucyBpbiBkZW5vKSwgYXZvaWRzIGBUeXBlRXJyb3JgXG5cdFx0XHRcdC8vIGlmIGEgZGF0YSBsaXN0ZW5lciBpcyBzdGlsbCBwcmVzZW50IHdlIGRpZG4ndCBlbmQgY2xlYW5seVxuXHRcdFx0XHRjb25zdCBoYXNEYXRhTGlzdGVuZXIgPSBzb2NrZXQgJiYgc29ja2V0Lmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDA7XG5cblx0XHRcdFx0aWYgKGhhc0RhdGFMaXN0ZW5lciAmJiAhaGFkRXJyb3IpIHtcblx0XHRcdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1ByZW1hdHVyZSBjbG9zZScpO1xuXHRcdFx0XHRcdGVyci5jb2RlID0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJztcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKGVycik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lTdHJlYW0oc3RyZWFtLCBlcnIpIHtcblx0aWYgKHN0cmVhbS5kZXN0cm95KSB7XG5cdFx0c3RyZWFtLmRlc3Ryb3koZXJyKTtcblx0fSBlbHNlIHtcblx0XHQvLyBub2RlIDwgOFxuXHRcdHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG5cdFx0c3RyZWFtLmVuZCgpO1xuXHR9XG59XG5cbi8qKlxuICogUmVkaXJlY3QgY29kZSBtYXRjaGluZ1xuICpcbiAqIEBwYXJhbSAgIE51bWJlciAgIGNvZGUgIFN0YXR1cyBjb2RlXG4gKiBAcmV0dXJuICBCb29sZWFuXG4gKi9cbmZldGNoLmlzUmVkaXJlY3QgPSBmdW5jdGlvbiAoY29kZSkge1xuXHRyZXR1cm4gY29kZSA9PT0gMzAxIHx8IGNvZGUgPT09IDMwMiB8fCBjb2RlID09PSAzMDMgfHwgY29kZSA9PT0gMzA3IHx8IGNvZGUgPT09IDMwODtcbn07XG5cbi8vIGV4cG9zZSBQcm9taXNlXG5mZXRjaC5Qcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZldGNoO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cztcbmV4cG9ydHMuSGVhZGVycyA9IEhlYWRlcnM7XG5leHBvcnRzLlJlcXVlc3QgPSBSZXF1ZXN0O1xuZXhwb3J0cy5SZXNwb25zZSA9IFJlc3BvbnNlO1xuZXhwb3J0cy5GZXRjaEVycm9yID0gRmV0Y2hFcnJvcjtcbmV4cG9ydHMuQWJvcnRFcnJvciA9IEFib3J0RXJyb3I7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY2xhc3MgRGVwcmVjYXRpb24gZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTsgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSAob25seSBhdmFpbGFibGUgb24gVjgpXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLm5hbWUgPSAnRGVwcmVjYXRpb24nO1xuICB9XG5cbn1cblxuZXhwb3J0cy5EZXByZWNhdGlvbiA9IERlcHJlY2F0aW9uO1xuIiwKICAgICIvLyBSZXR1cm5zIGEgd3JhcHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB3cmFwcGVkIGNhbGxiYWNrXG4vLyBUaGUgd3JhcHBlciBmdW5jdGlvbiBzaG91bGQgZG8gc29tZSBzdHVmZiwgYW5kIHJldHVybiBhXG4vLyBwcmVzdW1hYmx5IGRpZmZlcmVudCBjYWxsYmFjayBmdW5jdGlvbi5cbi8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG93biBwcm9wZXJ0aWVzIGFyZSByZXRhaW5lZCwgc28gdGhhdFxuLy8gZGVjb3JhdGlvbnMgYW5kIHN1Y2ggYXJlIG5vdCBsb3N0IGFsb25nIHRoZSB3YXkuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBweVxuZnVuY3Rpb24gd3JhcHB5IChmbiwgY2IpIHtcbiAgaWYgKGZuICYmIGNiKSByZXR1cm4gd3JhcHB5KGZuKShjYilcblxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25lZWQgd3JhcHBlciBmdW5jdGlvbicpXG5cbiAgT2JqZWN0LmtleXMoZm4pLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICB3cmFwcGVyW2tdID0gZm5ba11cbiAgfSlcblxuICByZXR1cm4gd3JhcHBlclxuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV1cbiAgICB9XG4gICAgdmFyIHJldCA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJnc1thcmdzLmxlbmd0aC0xXVxuICAgIGlmICh0eXBlb2YgcmV0ID09PSAnZnVuY3Rpb24nICYmIHJldCAhPT0gY2IpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNiKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldFtrXSA9IGNiW2tdXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cbiIsCiAgICAidmFyIHdyYXBweSA9IHJlcXVpcmUoJ3dyYXBweScpXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBweShvbmNlKVxubW9kdWxlLmV4cG9ydHMuc3RyaWN0ID0gd3JhcHB5KG9uY2VTdHJpY3QpXG5cbm9uY2UucHJvdG8gPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgJ29uY2UnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBvbmNlKHRoaXMpXG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCAnb25jZVN0cmljdCcsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG9uY2VTdHJpY3QodGhpcylcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxufSlcblxuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGYgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGYuY2FsbGVkKSByZXR1cm4gZi52YWx1ZVxuICAgIGYuY2FsbGVkID0gdHJ1ZVxuICAgIHJldHVybiBmLnZhbHVlID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG4gIGYuY2FsbGVkID0gZmFsc2VcbiAgcmV0dXJuIGZcbn1cblxuZnVuY3Rpb24gb25jZVN0cmljdCAoZm4pIHtcbiAgdmFyIGYgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGYuY2FsbGVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGYub25jZUVycm9yKVxuICAgIGYuY2FsbGVkID0gdHJ1ZVxuICAgIHJldHVybiBmLnZhbHVlID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG4gIHZhciBuYW1lID0gZm4ubmFtZSB8fCAnRnVuY3Rpb24gd3JhcHBlZCB3aXRoIGBvbmNlYCdcbiAgZi5vbmNlRXJyb3IgPSBuYW1lICsgXCIgc2hvdWxkbid0IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZVwiXG4gIGYuY2FsbGVkID0gZmFsc2VcbiAgcmV0dXJuIGZcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIGRlcHJlY2F0aW9uID0gcmVxdWlyZSgnZGVwcmVjYXRpb24nKTtcbnZhciBvbmNlID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ29uY2UnKSk7XG5cbmNvbnN0IGxvZ09uY2VDb2RlID0gb25jZShkZXByZWNhdGlvbiA9PiBjb25zb2xlLndhcm4oZGVwcmVjYXRpb24pKTtcbmNvbnN0IGxvZ09uY2VIZWFkZXJzID0gb25jZShkZXByZWNhdGlvbiA9PiBjb25zb2xlLndhcm4oZGVwcmVjYXRpb24pKTtcbi8qKlxuICogRXJyb3Igd2l0aCBleHRyYSBwcm9wZXJ0aWVzIHRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmdcbiAqL1xuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlKTsgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSAob25seSBhdmFpbGFibGUgb24gVjgpXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZTtcbiAgICBsZXQgaGVhZGVycztcblxuICAgIGlmIChcImhlYWRlcnNcIiBpbiBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmhlYWRlcnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gICAgfVxuXG4gICAgaWYgKFwicmVzcG9uc2VcIiBpbiBvcHRpb25zKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICAgIGhlYWRlcnMgPSBvcHRpb25zLnJlc3BvbnNlLmhlYWRlcnM7XG4gICAgfSAvLyByZWRhY3QgcmVxdWVzdCBjcmVkZW50aWFscyB3aXRob3V0IG11dGF0aW5nIG9yaWdpbmFsIHJlcXVlc3Qgb3B0aW9uc1xuXG5cbiAgICBjb25zdCByZXF1ZXN0Q29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCk7XG5cbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgcmVxdWVzdENvcHkuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLCB7XG4gICAgICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24ucmVwbGFjZSgvIC4qJC8sIFwiIFtSRURBQ1RFRF1cIilcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybCAvLyBjbGllbnRfaWQgJiBjbGllbnRfc2VjcmV0IGNhbiBiZSBwYXNzZWQgYXMgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gaW5jcmVhc2UgcmF0ZSBsaW1pdFxuICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzLyNpbmNyZWFzaW5nLXRoZS11bmF1dGhlbnRpY2F0ZWQtcmF0ZS1saW1pdC1mb3Itb2F1dGgtYXBwbGljYXRpb25zXG4gICAgLnJlcGxhY2UoL1xcYmNsaWVudF9zZWNyZXQ9XFx3Ky9nLCBcImNsaWVudF9zZWNyZXQ9W1JFREFDVEVEXVwiKSAvLyBPQXV0aCB0b2tlbnMgY2FuIGJlIHBhc3NlZCBhcyBVUkwgcXVlcnkgcGFyYW1ldGVycywgYWx0aG91Z2ggaXQgaXMgbm90IHJlY29tbWVuZGVkXG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvI29hdXRoMi10b2tlbi1zZW50LWluLWEtaGVhZGVyXG4gICAgLnJlcGxhY2UoL1xcYmFjY2Vzc190b2tlbj1cXHcrL2csIFwiYWNjZXNzX3Rva2VuPVtSRURBQ1RFRF1cIik7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdENvcHk7IC8vIGRlcHJlY2F0aW9uc1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiY29kZVwiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxvZ09uY2VDb2RlKG5ldyBkZXByZWNhdGlvbi5EZXByZWNhdGlvbihcIltAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXSBgZXJyb3IuY29kZWAgaXMgZGVwcmVjYXRlZCwgdXNlIGBlcnJvci5zdGF0dXNgLlwiKSk7XG4gICAgICAgIHJldHVybiBzdGF0dXNDb2RlO1xuICAgICAgfVxuXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaGVhZGVyc1wiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxvZ09uY2VIZWFkZXJzKG5ldyBkZXByZWNhdGlvbi5EZXByZWNhdGlvbihcIltAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXSBgZXJyb3IuaGVhZGVyc2AgaXMgZGVwcmVjYXRlZCwgdXNlIGBlcnJvci5yZXNwb25zZS5oZWFkZXJzYC5cIikpO1xuICAgICAgICByZXR1cm4gaGVhZGVycyB8fCB7fTtcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbn1cblxuZXhwb3J0cy5SZXF1ZXN0RXJyb3IgPSBSZXF1ZXN0RXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIGVuZHBvaW50ID0gcmVxdWlyZSgnQG9jdG9raXQvZW5kcG9pbnQnKTtcbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xudmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCdpcy1wbGFpbi1vYmplY3QnKTtcbnZhciBub2RlRmV0Y2ggPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnbm9kZS1mZXRjaCcpKTtcbnZhciByZXF1ZXN0RXJyb3IgPSByZXF1aXJlKCdAb2N0b2tpdC9yZXF1ZXN0LWVycm9yJyk7XG5cbmNvbnN0IFZFUlNJT04gPSBcIjUuNi4zXCI7XG5cbmZ1bmN0aW9uIGdldEJ1ZmZlclJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xufVxuXG5mdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgbG9nID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCAmJiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmxvZyA/IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nIDogY29uc29sZTtcblxuICBpZiAoaXNQbGFpbk9iamVjdC5pc1BsYWluT2JqZWN0KHJlcXVlc3RPcHRpb25zLmJvZHkpIHx8IEFycmF5LmlzQXJyYXkocmVxdWVzdE9wdGlvbnMuYm9keSkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSk7XG4gIH1cblxuICBsZXQgaGVhZGVycyA9IHt9O1xuICBsZXQgc3RhdHVzO1xuICBsZXQgdXJsO1xuICBjb25zdCBmZXRjaCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QgJiYgcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5mZXRjaCB8fCBub2RlRmV0Y2g7XG4gIHJldHVybiBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIE9iamVjdC5hc3NpZ24oe1xuICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgIGJvZHk6IHJlcXVlc3RPcHRpb25zLmJvZHksXG4gICAgaGVhZGVyczogcmVxdWVzdE9wdGlvbnMuaGVhZGVycyxcbiAgICByZWRpcmVjdDogcmVxdWVzdE9wdGlvbnMucmVkaXJlY3RcbiAgfSwgLy8gYHJlcXVlc3RPcHRpb25zLnJlcXVlc3QuYWdlbnRgIHR5cGUgaXMgaW5jb21wYXRpYmxlXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC90eXBlcy50cy9wdWxsLzI2NFxuICByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSkudGhlbihhc3luYyByZXNwb25zZSA9PiB7XG4gICAgdXJsID0gcmVzcG9uc2UudXJsO1xuICAgIHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIGZvciAoY29uc3Qga2V5QW5kVmFsdWUgb2YgcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXlBbmRWYWx1ZVswXV0gPSBrZXlBbmRWYWx1ZVsxXTtcbiAgICB9XG5cbiAgICBpZiAoXCJkZXByZWNhdGlvblwiIGluIGhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBoZWFkZXJzLmxpbmsgJiYgaGVhZGVycy5saW5rLm1hdGNoKC88KFtePl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICAgIGNvbnN0IGRlcHJlY2F0aW9uTGluayA9IG1hdGNoZXMgJiYgbWF0Y2hlcy5wb3AoKTtcbiAgICAgIGxvZy53YXJuKGBbQG9jdG9raXQvcmVxdWVzdF0gXCIke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtyZXF1ZXN0T3B0aW9ucy51cmx9XCIgaXMgZGVwcmVjYXRlZC4gSXQgaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQgb24gJHtoZWFkZXJzLnN1bnNldH0ke2RlcHJlY2F0aW9uTGluayA/IGAuIFNlZSAke2RlcHJlY2F0aW9uTGlua31gIDogXCJcIn1gKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSAyMDQgfHwgc3RhdHVzID09PSAyMDUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEdpdEh1YiBBUEkgcmV0dXJucyAyMDAgZm9yIEhFQUQgcmVxdWVzdHNcblxuXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zLm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgIGlmIChzdGF0dXMgPCA0MDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgcmVxdWVzdEVycm9yLlJlcXVlc3RFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCBzdGF0dXMsIHtcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgZGF0YTogdW5kZWZpbmVkXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIHRocm93IG5ldyByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKFwiTm90IG1vZGlmaWVkXCIsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiBhd2FpdCBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKHRvRXJyb3JNZXNzYWdlKGRhdGEpLCBzdGF0dXMsIHtcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKTtcbiAgfSkudGhlbihkYXRhID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGRhdGFcbiAgICB9O1xuICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgcmVxdWVzdEVycm9yLlJlcXVlc3RFcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgdGhyb3cgbmV3IHJlcXVlc3RFcnJvci5SZXF1ZXN0RXJyb3IoZXJyb3IubWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG5cbiAgaWYgKC9hcHBsaWNhdGlvblxcL2pzb24vLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgfVxuXG4gIGlmICghY29udGVudFR5cGUgfHwgL150ZXh0XFwvfGNoYXJzZXQ9dXRmLTgkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gIH1cblxuICByZXR1cm4gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpO1xufVxuXG5mdW5jdGlvbiB0b0Vycm9yTWVzc2FnZShkYXRhKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGRhdGE7IC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlIC0ganVzdCBpbiBjYXNlXG5cbiAgaWYgKFwibWVzc2FnZVwiIGluIGRhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLmVycm9ycykpIHtcbiAgICAgIHJldHVybiBgJHtkYXRhLm1lc3NhZ2V9OiAke2RhdGEuZXJyb3JzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEubWVzc2FnZTtcbiAgfSAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGp1c3QgaW4gY2FzZVxuXG5cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGRFbmRwb2ludCwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSBvbGRFbmRwb2ludC5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG5cbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24gKHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRPcHRpb25zID0gZW5kcG9pbnQubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuXG4gICAgaWYgKCFlbmRwb2ludE9wdGlvbnMucmVxdWVzdCB8fCAhZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vaykge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihlbmRwb2ludC5wYXJzZShlbmRwb2ludE9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gKHJvdXRlLCBwYXJhbWV0ZXJzKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50LnBhcnNlKGVuZHBvaW50Lm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKSkpO1xuICAgIH07XG5cbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QsIHtcbiAgICAgIGVuZHBvaW50LFxuICAgICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50KVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QsIGVuZHBvaW50T3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZW5kcG9pbnQsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50KVxuICB9KTtcbn1cblxuY29uc3QgcmVxdWVzdCA9IHdpdGhEZWZhdWx0cyhlbmRwb2ludC5lbmRwb2ludCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke3VuaXZlcnNhbFVzZXJBZ2VudC5nZXRVc2VyQWdlbnQoKX1gXG4gIH1cbn0pO1xuXG5leHBvcnRzLnJlcXVlc3QgPSByZXF1ZXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIHJlcXVlc3QgPSByZXF1aXJlKCdAb2N0b2tpdC9yZXF1ZXN0Jyk7XG52YXIgdW5pdmVyc2FsVXNlckFnZW50ID0gcmVxdWlyZSgndW5pdmVyc2FsLXVzZXItYWdlbnQnKTtcblxuY29uc3QgVkVSU0lPTiA9IFwiNC44LjBcIjtcblxuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcXG5gICsgZGF0YS5lcnJvcnMubWFwKGUgPT4gYCAtICR7ZS5tZXNzYWdlfWApLmpvaW4oXCJcXG5cIik7XG59XG5cbmNsYXNzIEdyYXBocWxSZXNwb25zZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5uYW1lID0gXCJHcmFwaHFsUmVzcG9uc2VFcnJvclwiOyAvLyBFeHBvc2UgdGhlIGVycm9ycyBhbmQgcmVzcG9uc2UgZGF0YSBpbiB0aGVpciBzaG9ydGhhbmQgcHJvcGVydGllcy5cblxuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7IC8vIE1haW50YWlucyBwcm9wZXIgc3RhY2sgdHJhY2UgKG9ubHkgYXZhaWxhYmxlIG9uIFY4KVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG5cbn1cblxuY29uc3QgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXCJtZXRob2RcIiwgXCJiYXNlVXJsXCIsIFwidXJsXCIsIFwiaGVhZGVyc1wiLCBcInJlcXVlc3RcIiwgXCJxdWVyeVwiLCBcIm1lZGlhVHlwZVwiXTtcbmNvbnN0IEZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TID0gW1wicXVlcnlcIiwgXCJtZXRob2RcIiwgXCJ1cmxcIl07XG5jb25zdCBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIFwicXVlcnlcIiBpbiBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBbQG9jdG9raXQvZ3JhcGhxbF0gXCJxdWVyeVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCFGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IE9iamVjdC5hc3NpZ24oe1xuICAgIHF1ZXJ5XG4gIH0sIG9wdGlvbnMpIDogcXVlcnk7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmtleXMocGFyc2VkT3B0aW9ucykucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKCFyZXN1bHQudmFyaWFibGVzKSB7XG4gICAgICByZXN1bHQudmFyaWFibGVzID0ge307XG4gICAgfVxuXG4gICAgcmVzdWx0LnZhcmlhYmxlc1trZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTsgLy8gd29ya2Fyb3VuZCBmb3IgR2l0SHViIEVudGVycHJpc2UgYmFzZVVybCBzZXQgd2l0aCAvYXBpL3YzIHN1ZmZpeFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9hdXRoLWFwcC5qcy9pc3N1ZXMvMTExI2lzc3VlY29tbWVudC02NTc2MTA0NTFcblxuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybDtcblxuICBpZiAoR0hFU19WM19TVUZGSVhfUkVHRVgudGVzdChiYXNlVXJsKSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnVybCA9IGJhc2VVcmwucmVwbGFjZShHSEVTX1YzX1NVRkZJWF9SRUdFWCwgXCIvYXBpL2dyYXBocWxcIik7XG4gIH1cblxuICByZXR1cm4gcmVxdWVzdChyZXF1ZXN0T3B0aW9ucykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnNba2V5XTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEdyYXBocWxSZXNwb25zZUVycm9yKHJlcXVlc3RPcHRpb25zLCBoZWFkZXJzLCByZXNwb25zZS5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHJlcXVlc3QkMSwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QkMS5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG5cbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBuZXdSZXF1ZXN0KSxcbiAgICBlbmRwb2ludDogcmVxdWVzdC5yZXF1ZXN0LmVuZHBvaW50XG4gIH0pO1xufVxuXG5jb25zdCBncmFwaHFsJDEgPSB3aXRoRGVmYXVsdHMocmVxdWVzdC5yZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWBcbiAgfSxcbiAgbWV0aG9kOiBcIlBPU1RcIixcbiAgdXJsOiBcIi9ncmFwaHFsXCJcbn0pO1xuZnVuY3Rpb24gd2l0aEN1c3RvbVJlcXVlc3QoY3VzdG9tUmVxdWVzdCkge1xuICByZXR1cm4gd2l0aERlZmF1bHRzKGN1c3RvbVJlcXVlc3QsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIHVybDogXCIvZ3JhcGhxbFwiXG4gIH0pO1xufVxuXG5leHBvcnRzLkdyYXBocWxSZXNwb25zZUVycm9yID0gR3JhcGhxbFJlc3BvbnNlRXJyb3I7XG5leHBvcnRzLmdyYXBocWwgPSBncmFwaHFsJDE7XG5leHBvcnRzLndpdGhDdXN0b21SZXF1ZXN0ID0gd2l0aEN1c3RvbVJlcXVlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBSRUdFWF9JU19JTlNUQUxMQVRJT05fTEVHQUNZID0gL152MVxcLi87XG5jb25zdCBSRUdFWF9JU19JTlNUQUxMQVRJT04gPSAvXmdoc18vO1xuY29uc3QgUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIgPSAvXmdodV8vO1xuYXN5bmMgZnVuY3Rpb24gYXV0aCh0b2tlbikge1xuICBjb25zdCBpc0FwcCA9IHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDM7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gUkVHRVhfSVNfSU5TVEFMTEFUSU9OX0xFR0FDWS50ZXN0KHRva2VuKSB8fCBSRUdFWF9JU19JTlNUQUxMQVRJT04udGVzdCh0b2tlbik7XG4gIGNvbnN0IGlzVXNlclRvU2VydmVyID0gUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIudGVzdCh0b2tlbik7XG4gIGNvbnN0IHRva2VuVHlwZSA9IGlzQXBwID8gXCJhcHBcIiA6IGlzSW5zdGFsbGF0aW9uID8gXCJpbnN0YWxsYXRpb25cIiA6IGlzVXNlclRvU2VydmVyID8gXCJ1c2VyLXRvLXNlcnZlclwiIDogXCJvYXV0aFwiO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidG9rZW5cIixcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8qKlxuICogUHJlZml4IHRva2VuIGZvciB1c2FnZSBpbiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXJcbiAqXG4gKiBAcGFyYW0gdG9rZW4gT0F1dGggdG9rZW4gb3IgSlNPTiBXZWIgVG9rZW5cbiAqL1xuZnVuY3Rpb24gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pIHtcbiAgaWYgKHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYGJlYXJlciAke3Rva2VufWA7XG4gIH1cblxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaG9vayh0b2tlbiwgcmVxdWVzdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSByZXF1ZXN0LmVuZHBvaW50Lm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgZW5kcG9pbnQuaGVhZGVycy5hdXRob3JpemF0aW9uID0gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pO1xuICByZXR1cm4gcmVxdWVzdChlbmRwb2ludCk7XG59XG5cbmNvbnN0IGNyZWF0ZVRva2VuQXV0aCA9IGZ1bmN0aW9uIGNyZWF0ZVRva2VuQXV0aCh0b2tlbikge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIE5vIHRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGhcIik7XG4gIH1cblxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIFRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGggaXMgbm90IGEgc3RyaW5nXCIpO1xuICB9XG5cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZVRva2VuQXV0aCA9IGNyZWF0ZVRva2VuQXV0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xudmFyIGJlZm9yZUFmdGVySG9vayA9IHJlcXVpcmUoJ2JlZm9yZS1hZnRlci1ob29rJyk7XG52YXIgcmVxdWVzdCA9IHJlcXVpcmUoJ0BvY3Rva2l0L3JlcXVlc3QnKTtcbnZhciBncmFwaHFsID0gcmVxdWlyZSgnQG9jdG9raXQvZ3JhcGhxbCcpO1xudmFyIGF1dGhUb2tlbiA9IHJlcXVpcmUoJ0BvY3Rva2l0L2F1dGgtdG9rZW4nKTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuXG4gIHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcblxuICB2YXIga2V5LCBpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIzLjYuMFwiO1xuXG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRoU3RyYXRlZ3lcIl07XG5jbGFzcyBPY3Rva2l0IHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBiZWZvcmVBZnRlckhvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IHJlcXVlc3QucmVxdWVzdC5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICByZXF1ZXN0OiBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QsIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCB1c2FnZSBvbmx5LCBubyBuZWVkIHRvIHR5cGVcbiAgICAgICAgaG9vazogaG9vay5iaW5kKG51bGwsIFwicmVxdWVzdFwiKVxuICAgICAgfSksXG4gICAgICBtZWRpYVR5cGU6IHtcbiAgICAgICAgcHJldmlld3M6IFtdLFxuICAgICAgICBmb3JtYXQ6IFwiXCJcbiAgICAgIH1cbiAgICB9OyAvLyBwcmVwZW5kIGRlZmF1bHQgdXNlciBhZ2VudCB3aXRoIGBvcHRpb25zLnVzZXJBZ2VudGAgaWYgc2V0XG5cbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBbb3B0aW9ucy51c2VyQWdlbnQsIGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAke3VuaXZlcnNhbFVzZXJBZ2VudC5nZXRVc2VyQWdlbnQoKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wcmV2aWV3cykge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cyA9IG9wdGlvbnMucHJldmlld3M7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0LnJlcXVlc3QuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmdyYXBocWwgPSBncmFwaHFsLndpdGhDdXN0b21SZXF1ZXN0KHRoaXMucmVxdWVzdCkuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmxvZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgZGVidWc6ICgpID0+IHt9LFxuICAgICAgaW5mbzogKCkgPT4ge30sXG4gICAgICB3YXJuOiBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKSxcbiAgICAgIGVycm9yOiBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSlcbiAgICB9LCBvcHRpb25zLmxvZyk7XG4gICAgdGhpcy5ob29rID0gaG9vazsgLy8gKDEpIElmIG5laXRoZXIgYG9wdGlvbnMuYXV0aFN0cmF0ZWd5YCBub3IgYG9wdGlvbnMuYXV0aGAgYXJlIHNldCwgdGhlIGBvY3Rva2l0YCBpbnN0YW5jZVxuICAgIC8vICAgICBpcyB1bmF1dGhlbnRpY2F0ZWQuIFRoZSBgdGhpcy5hdXRoKClgIG1ldGhvZCBpcyBhIG5vLW9wIGFuZCBubyByZXF1ZXN0IGhvb2sgaXMgcmVnaXN0ZXJlZC5cbiAgICAvLyAoMikgSWYgb25seSBgb3B0aW9ucy5hdXRoYCBpcyBzZXQsIHVzZSB0aGUgZGVmYXVsdCB0b2tlbiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneS5cbiAgICAvLyAoMykgSWYgYG9wdGlvbnMuYXV0aFN0cmF0ZWd5YCBpcyBzZXQgdGhlbiB1c2UgaXQgYW5kIHBhc3MgaW4gYG9wdGlvbnMuYXV0aGAuIEFsd2F5cyBwYXNzIG93biByZXF1ZXN0IGFzIG1hbnkgc3RyYXRlZ2llcyBhY2NlcHQgYSBjdXN0b20gcmVxdWVzdCBpbnN0YW5jZS5cbiAgICAvLyBUT0RPOiB0eXBlIGBvcHRpb25zLmF1dGhgIGJhc2VkIG9uIGBvcHRpb25zLmF1dGhTdHJhdGVneWAuXG5cbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICAvLyAoMSlcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gKDIpXG4gICAgICAgIGNvbnN0IGF1dGggPSBhdXRoVG9rZW4uY3JlYXRlVG9rZW5BdXRoKG9wdGlvbnMuYXV0aCk7IC8vIEB0cy1pZ25vcmUgIMKvXFxfKOODhClfL8KvXG5cbiAgICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGF1dGhTdHJhdGVneVxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICAgICAgICBvdGhlck9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9ucywgX2V4Y2x1ZGVkKTtcblxuICAgICAgY29uc3QgYXV0aCA9IGF1dGhTdHJhdGVneShPYmplY3QuYXNzaWduKHtcbiAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgICAvLyB3ZSBwYXNzIHRoZSBjdXJyZW50IG9jdG9raXQgaW5zdGFuY2UgYXMgd2VsbCBhcyBpdHMgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgIC8vIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGludGVybmFsIHN0YXRlIGFzIHRoZSBjdXJyZW50IG9uZS4gVGhlIG9yaWdpbmFsXG4gICAgICAgIC8vIHJlcXVpcmVtZW50IGZvciB0aGlzIHdhcyB0aGUgXCJldmVudC1vY3Rva2l0XCIgYXV0aGVudGljYXRpb24gc3RyYXRlZ3lcbiAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICBvY3Rva2l0OiB0aGlzLFxuICAgICAgICBvY3Rva2l0T3B0aW9uczogb3RoZXJPcHRpb25zXG4gICAgICB9LCBvcHRpb25zLmF1dGgpKTsgLy8gQHRzLWlnbm9yZSAgwq9cXF8o44OEKV8vwq9cblxuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9IC8vIGFwcGx5IHBsdWdpbnNcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTYzNDUxNzJcblxuXG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGx1Z2luKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcblxuICAgICAgICBpZiAodHlwZW9mIGRlZmF1bHRzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzdXBlcihkZWZhdWx0cyhvcHRpb25zKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9wdGlvbnMsIG9wdGlvbnMudXNlckFnZW50ICYmIGRlZmF1bHRzLnVzZXJBZ2VudCA/IHtcbiAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgIH0gOiBudWxsKSk7XG4gICAgICB9XG5cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggYSBwbHVnaW4gKG9yIG1hbnkpIHRvIHlvdXIgT2N0b2tpdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgQVBJID0gT2N0b2tpdC5wbHVnaW4ocGx1Z2luMSwgcGx1Z2luMiwgcGx1Z2luMywgLi4uKVxuICAgKi9cblxuXG4gIHN0YXRpYyBwbHVnaW4oLi4ubmV3UGx1Z2lucykge1xuICAgIHZhciBfYTtcblxuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5zID0gdGhpcy5wbHVnaW5zO1xuICAgIGNvbnN0IE5ld09jdG9raXQgPSAoX2EgPSBjbGFzcyBleHRlbmRzIHRoaXMge30sIF9hLnBsdWdpbnMgPSBjdXJyZW50UGx1Z2lucy5jb25jYXQobmV3UGx1Z2lucy5maWx0ZXIocGx1Z2luID0+ICFjdXJyZW50UGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4pKSksIF9hKTtcbiAgICByZXR1cm4gTmV3T2N0b2tpdDtcbiAgfVxuXG59XG5PY3Rva2l0LlZFUlNJT04gPSBWRVJTSU9OO1xuT2N0b2tpdC5wbHVnaW5zID0gW107XG5cbmV4cG9ydHMuT2N0b2tpdCA9IE9jdG9raXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG5cbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHtcbiAgICAgIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuY29uc3QgRW5kcG9pbnRzID0ge1xuICBhY3Rpb25zOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgYXBwcm92ZVdvcmtmbG93UnVuOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiXSxcbiAgICBjYW5jZWxXb3JrZmxvd1J1bjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2NhbmNlbFwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0OiBbXCJQVVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIl0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvclJlcG86IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZW1vdmUtdG9rZW5cIl0sXG4gICAgY3JlYXRlV29ya2Zsb3dEaXNwYXRjaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCJdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5SWQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUtleTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIl0sXG4gICAgZGVsZXRlQXJ0aWZhY3Q6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBkZWxldGVFbnZpcm9ubWVudFNlY3JldDogW1wiREVMRVRFIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlU2VsZkhvc3RlZFJ1bm5lckZyb21Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZGVsZXRlU2VsZkhvc3RlZFJ1bm5lckZyb21SZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW5Mb2dzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCJdLFxuICAgIGRpc2FibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIGRpc2FibGVXb3JrZmxvdzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIl0sXG4gICAgZG93bmxvYWRBcnRpZmFjdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9L3thcmNoaXZlX2Zvcm1hdH1cIl0sXG4gICAgZG93bmxvYWRKb2JMb2dzRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIl0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkF0dGVtcHRMb2dzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIl0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkxvZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIl0sXG4gICAgZW5hYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBlbmFibGVXb3JrZmxvdzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVMaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VCeVJlcG9Gb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRFbnZpcm9ubWVudFNlY3JldDogW1wiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl1cbiAgICB9XSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmV2aWV3c0ZvclJ1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIl0sXG4gICAgZ2V0V29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuQXR0ZW1wdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIl0sXG4gICAgZ2V0V29ya2Zsb3dVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiXSxcbiAgICBsaXN0QXJ0aWZhY3RzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiXSxcbiAgICBsaXN0RW52aXJvbm1lbnRTZWNyZXRzOiBbXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCJdLFxuICAgIGxpc3RKb2JzRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bkFydGlmYWN0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvdzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuXCJdLFxuICAgIHJlUnVuV29ya2Zsb3dGYWlsZWRKb2JzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIl0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCJdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzXCJdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJdXG4gIH0sXG4gIGFjdGl2aXR5OiB7XG4gICAgY2hlY2tSZXBvSXNTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlUmVwb1N1YnNjcmlwdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZGVsZXRlVGhyZWFkU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZ2V0RmVlZHM6IFtcIkdFVCAvZmVlZHNcIl0sXG4gICAgZ2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZ2V0VGhyZWFkOiBbXCJHRVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBnZXRUaHJlYWRTdWJzY3JpcHRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGxpc3RFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiXSxcbiAgICBsaXN0Tm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbGlzdE9yZ0V2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50czogW1wiR0VUIC9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclJlcG9OZXR3b3JrOiBbXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFB1YmxpY09yZ0V2ZW50czogW1wiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCJdLFxuICAgIGxpc3RSZXBvRXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVwb05vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NXYXRjaGVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0U3RhcmdhemVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiXSxcbiAgICBsaXN0V2F0Y2hlZFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RXYXRjaGVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIl0sXG4gICAgbWFya05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrUmVwb05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrVGhyZWFkQXNSZWFkOiBbXCJQQVRDSCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIHNldFJlcG9TdWJzY3JpcHRpb246IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIHNldFRocmVhZFN1YnNjcmlwdGlvbjogW1wiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJdLFxuICAgIHN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVuc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl1cbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1wiUFVUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgY2hlY2tUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGNyZWF0ZUZyb21NYW5pZmVzdDogW1wiUE9TVCAvYXBwLW1hbmlmZXN0cy97Y29kZX0vY29udmVyc2lvbnNcIl0sXG4gICAgY3JlYXRlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcIlBPU1QgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L2FjY2Vzc190b2tlbnNcIl0sXG4gICAgZGVsZXRlQXV0aG9yaXphdGlvbjogW1wiREVMRVRFIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vZ3JhbnRcIl0sXG4gICAgZGVsZXRlSW5zdGFsbGF0aW9uOiBbXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGRlbGV0ZVRva2VuOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL2FwcFwiXSxcbiAgICBnZXRCeVNsdWc6IFtcIkdFVCAvYXBwcy97YXBwX3NsdWd9XCJdLFxuICAgIGdldEluc3RhbGxhdGlvbjogW1wiR0VUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfVwiXSxcbiAgICBnZXRPcmdJbnN0YWxsYXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25cIl0sXG4gICAgZ2V0UmVwb0luc3RhbGxhdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnN0YWxsYXRpb25cIl0sXG4gICAgZ2V0U3Vic2NyaXB0aW9uUGxhbkZvckFjY291bnQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9hY2NvdW50cy97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0U3Vic2NyaXB0aW9uUGxhbkZvckFjY291bnRTdHViYmVkOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0VXNlckluc3RhbGxhdGlvbjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJHRVQgL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW46IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhblN0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcIlBPU1QgL2FwcC9ob29rL2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1wiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIHJlc2V0VG9rZW46IFtcIlBBVENIIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgcmV2b2tlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcIkRFTEVURSAvaW5zdGFsbGF0aW9uL3Rva2VuXCJdLFxuICAgIHNjb3BlVG9rZW46IFtcIlBPU1QgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlbi9zY29wZWRcIl0sXG4gICAgc3VzcGVuZEluc3RhbGxhdGlvbjogW1wiUFVUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIl0sXG4gICAgdW5zdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJQQVRDSCAvYXBwL2hvb2svY29uZmlnXCJdXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWR2YW5jZWRTZWN1cml0eUJpbGxpbmdHaGU6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIl0sXG4gICAgZ2V0R2l0aHViQWR2YW5jZWRTZWN1cml0eUJpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FkdmFuY2VkLXNlY3VyaXR5XCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIl1cbiAgfSxcbiAgY2hlY2tzOiB7XG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zXCJdLFxuICAgIGNyZWF0ZVN1aXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXNcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH1cIl0sXG4gICAgZ2V0U3VpdGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH1cIl0sXG4gICAgbGlzdEFubm90YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIl0sXG4gICAgbGlzdEZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIl0sXG4gICAgbGlzdEZvclN1aXRlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIl0sXG4gICAgbGlzdFN1aXRlc0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiXSxcbiAgICByZXJlcXVlc3RSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vcmVyZXF1ZXN0XCJdLFxuICAgIHJlcmVxdWVzdFN1aXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9yZXJlcXVlc3RcIl0sXG4gICAgc2V0U3VpdGVzUHJlZmVyZW5jZXM6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXVxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBkZWxldGVBbmFseXNpczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiXSxcbiAgICBnZXRBbGVydDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZFBhcmFtZXRlcnM6IHtcbiAgICAgICAgYWxlcnRfaWQ6IFwiYWxlcnRfbnVtYmVyXCJcbiAgICAgIH1cbiAgICB9XSxcbiAgICBnZXRBbmFseXNpczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH1cIl0sXG4gICAgZ2V0U2FyaWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnMve3NhcmlmX2lkfVwiXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdXG4gICAgfV0sXG4gICAgbGlzdFJlY2VudEFuYWx5c2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIl0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl1cbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl1cbiAgfSxcbiAgY29kZXNwYWNlczoge1xuICAgIGFkZFJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgY29kZXNwYWNlTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCJdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0c1wiXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiXSxcbiAgICBnZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBnZXRQdWJsaWNLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGxpc3REZXZjb250YWluZXJzSW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZFBhcmFtZXRlcnM6IHtcbiAgICAgICAgb3JnX2lkOiBcIm9yZ1wiXG4gICAgICB9XG4gICAgfV0sXG4gICAgbGlzdEluUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb3NpdG9yaWVzRm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFNlY3JldHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICByZW1vdmVSZXBvc2l0b3J5Rm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIHJlcG9NYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbWFjaGluZXNcIl0sXG4gICAgc2V0UmVwb3NpdG9yaWVzRm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RhcnRcIl0sXG4gICAgc3RvcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdG9wXCJdLFxuICAgIHN0b3BJbk9yZ2FuaXphdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIl0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXVxuICB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXVxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc25hcHNob3RzXCJdLFxuICAgIGRpZmZSYW5nZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL2NvbXBhcmUve2Jhc2VoZWFkfVwiXVxuICB9LFxuICBlbW9qaXM6IHtcbiAgICBnZXQ6IFtcIkdFVCAvZW1vamlzXCJdXG4gIH0sXG4gIGVudGVycHJpc2VBZG1pbjoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvckVudGVycHJpc2U6IFtcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIGRpc2FibGVTZWxlY3RlZE9yZ2FuaXphdGlvbkdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnMve29yZ19pZH1cIl0sXG4gICAgZW5hYmxlU2VsZWN0ZWRPcmdhbml6YXRpb25HaXRodWJBY3Rpb25zRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9vcmdhbml6YXRpb25zL3tvcmdfaWR9XCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgZ2V0U2VydmVyU3RhdGlzdGljczogW1wiR0VUIC9lbnRlcnByaXNlLWluc3RhbGxhdGlvbi97ZW50ZXJwcmlzZV9vcl9vcmd9L3NlcnZlci1zdGF0aXN0aWNzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRPcmdhbml6YXRpb25zRW5hYmxlZEdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnNcIl0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc0VudGVycHJpc2U6IFtcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJdLFxuICAgIHNldFNlbGVjdGVkT3JnYW5pemF0aW9uc0VuYWJsZWRHaXRodWJBY3Rpb25zRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9vcmdhbml6YXRpb25zXCJdXG4gIH0sXG4gIGdpc3RzOiB7XG4gICAgY2hlY2tJc1N0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9naXN0c1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBkZWxldGVDb21tZW50OiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZm9yazogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGdldDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldFJldmlzaW9uOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS97c2hhfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2dpc3RzXCJdLFxuICAgIGxpc3RDb21tZW50czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvZ2lzdHMvcHVibGljXCJdLFxuICAgIGxpc3RTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3N0YXJyZWRcIl0sXG4gICAgc3RhcjogW1wiUFVUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1bnN0YXI6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdXG4gIH0sXG4gIGdpdDoge1xuICAgIGNyZWF0ZUJsb2I6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9ic1wiXSxcbiAgICBjcmVhdGVDb21taXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzXCJdLFxuICAgIGNyZWF0ZVJlZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnNcIl0sXG4gICAgY3JlYXRlVGFnOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFnc1wiXSxcbiAgICBjcmVhdGVUcmVlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXNcIl0sXG4gICAgZGVsZXRlUmVmOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICAgIGdldEJsb2I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzL3tmaWxlX3NoYX1cIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzL3tjb21taXRfc2hhfVwiXSxcbiAgICBnZXRSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZi97cmVmfVwiXSxcbiAgICBnZXRUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3Mve3RhZ19zaGF9XCJdLFxuICAgIGdldFRyZWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzL3t0cmVlX3NoYX1cIl0sXG4gICAgbGlzdE1hdGNoaW5nUmVmczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiXSxcbiAgICB1cGRhdGVSZWY6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXVxuICB9LFxuICBnaXRpZ25vcmU6IHtcbiAgICBnZXRBbGxUZW1wbGF0ZXM6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlc1wiXSxcbiAgICBnZXRUZW1wbGF0ZTogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzL3tuYW1lfVwiXVxuICB9LFxuICBpbnRlcmFjdGlvbnM6IHtcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XVxuICB9LFxuICBpc3N1ZXM6IHtcbiAgICBhZGRBc3NpZ25lZXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIl0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzL3thc3NpZ25lZX1cIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGNyZWF0ZUxhYmVsOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgY3JlYXRlTWlsZXN0b25lOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3RpbWVsaW5lXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yTWlsZXN0b25lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxvY2s6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgcmVtb3ZlQWxsTGFiZWxzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQXNzaWduZWVzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIl0sXG4gICAgcmVtb3ZlTGFiZWw6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIl0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl1cbiAgfSxcbiAgbGljZW5zZXM6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbGljZW5zZXMve2xpY2Vuc2V9XCJdLFxuICAgIGdldEFsbENvbW1vbmx5VXNlZDogW1wiR0VUIC9saWNlbnNlc1wiXSxcbiAgICBnZXRGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xpY2Vuc2VcIl1cbiAgfSxcbiAgbWFya2Rvd246IHtcbiAgICByZW5kZXI6IFtcIlBPU1QgL21hcmtkb3duXCJdLFxuICAgIHJlbmRlclJhdzogW1wiUE9TVCAvbWFya2Rvd24vcmF3XCIsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCJcbiAgICAgIH1cbiAgICB9XVxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl1cbiAgfSxcbiAgbWlncmF0aW9uczoge1xuICAgIGNhbmNlbEltcG9ydDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIl0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIl0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJdLFxuICAgIGdldEFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXSxcbiAgICBnZXRDb21taXRBdXRob3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzXCJdLFxuICAgIGdldEltcG9ydFN0YXR1czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIl0sXG4gICAgZ2V0TGFyZ2VGaWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvbGFyZ2VfZmlsZXNcIl0sXG4gICAgZ2V0U3RhdHVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGdldFN0YXR1c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0ZvclVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wibWlncmF0aW9uc1wiLCBcImxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbWFwQ29tbWl0QXV0aG9yOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnMve2F1dGhvcl9pZH1cIl0sXG4gICAgc2V0TGZzUHJlZmVyZW5jZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9sZnNcIl0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0Rm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRJbXBvcnQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCJdLFxuICAgIHVubG9ja1JlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJdLFxuICAgIHVwZGF0ZUltcG9ydDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiXVxuICB9LFxuICBvcmdzOiB7XG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXCJQVVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlSW52aXRhdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0OiBbXCJHRVQgL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEJsb2NrZWRVc2VyczogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiXSxcbiAgICBsaXN0Q3VzdG9tUm9sZXM6IFtcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnYW5pemF0aW9uX2lkfS9jdXN0b21fcm9sZXNcIl0sXG4gICAgbGlzdEZhaWxlZEludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL29yZ3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3V0c2lkZUNvbGxhYm9yYXRvcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZVB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZU1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXVxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yVXNlcjogW1wiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1wiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl1cbiAgICB9XSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlUaGVBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIl0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIl0sXG4gICAgZ2V0UGFja2FnZUZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIl0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JVc2VyOiBbXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXVxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgY3JlYXRlQ29sdW1uOiBbXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBkZWxldGVDYXJkOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbHVtbjogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldDogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZ2V0Q2FyZDogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBnZXRDb2x1bW46IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9L3Blcm1pc3Npb25cIl0sXG4gICAgbGlzdENhcmRzOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbHVtbnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIl0sXG4gICAgbW92ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9L21vdmVzXCJdLFxuICAgIG1vdmVDb2x1bW46IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vbW92ZXNcIl0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIHVwZGF0ZUNhcmQ6IFtcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICB1cGRhdGVDb2x1bW46IFtcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZXBsaWVzXCJdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIl0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGlzbWlzc1JldmlldzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZGlzbWlzc2Fsc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCJdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIl0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9ldmVudHNcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS91cGRhdGUtYnJhbmNoXCJdLFxuICAgIHVwZGF0ZVJldmlldzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIl0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXVxuICB9LFxuICByYXRlTGltaXQ6IHtcbiAgICBnZXQ6IFtcIkdFVCAvcmF0ZV9saW1pdFwiXVxuICB9LFxuICByZWFjdGlvbnM6IHtcbiAgICBjcmVhdGVGb3JDb21taXRDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvcklzc3VlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvcklzc3VlQ29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvclJlbGVhc2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGRlbGV0ZUZvckNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvcklzc3VlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVGb3JJc3N1ZUNvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVGb3JQdWxsUmVxdWVzdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckNvbW1pdENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9ySXNzdWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9ySXNzdWVDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9yUmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXVxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgYWRkQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiYXBwc1wiXG4gICAgfV0sXG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBhZGRTdGF0dXNDaGVja0NvbnRleHRzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJjb250ZXh0c1wiXG4gICAgfV0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ0ZWFtc1wiXG4gICAgfV0sXG4gICAgYWRkVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ1c2Vyc1wiXG4gICAgfV0sXG4gICAgY2hlY2tDb2xsYWJvcmF0b3I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrVnVsbmVyYWJpbGl0eUFsZXJ0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXSxcbiAgICBjb2Rlb3duZXJzRXJyb3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVvd25lcnMvZXJyb3JzXCJdLFxuICAgIGNvbXBhcmVDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9XCJdLFxuICAgIGNvbXBhcmVDb21taXRzV2l0aEJhc2VoZWFkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXSxcbiAgICBjcmVhdGVDb21taXRTdGF0dXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXR1c2VzL3tzaGF9XCJdLFxuICAgIGNyZWF0ZURlcGxveUtleTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIl0sXG4gICAgY3JlYXRlRGlzcGF0Y2hFdmVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGlzcGF0Y2hlc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9yZXBvc1wiXSxcbiAgICBjcmVhdGVGb3JrOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBjcmVhdGVJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlVGFnUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcIlBPU1QgL3JlcG9zL3t0ZW1wbGF0ZV9vd25lcn0ve3RlbXBsYXRlX3JlcG99L2dlbmVyYXRlXCJdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uOiBbXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJdLFxuICAgIGRlbGV0ZUFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJdLFxuICAgIGRlbGV0ZUFuRW52aXJvbm1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXSxcbiAgICBkZWxldGVBdXRvbGluazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3Mve2F1dG9saW5rX2lkfVwiXSxcbiAgICBkZWxldGVCcmFuY2hQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIl0sXG4gICAgZGVsZXRlQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIl0sXG4gICAgZGVsZXRlRGVwbG95S2V5OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlRGVwbG95bWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICBkZWxldGVUYWdQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvbi97dGFnX3Byb3RlY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGRpc2FibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXSxcbiAgICBkaXNhYmxlTGZzRm9yUmVwbzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sZnNcIl0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIl0sXG4gICAgZG93bmxvYWRBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZG93bmxvYWRaaXBiYWxsQXJjaGl2ZVwiXVxuICAgIH1dLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIl0sXG4gICAgZW5hYmxlTGZzRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sZnNcIl0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXSxcbiAgICBnZW5lcmF0ZVJlbGVhc2VOb3RlczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCJdLFxuICAgIGdldEFsbFRvcGljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgZ2V0QXBwc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCJdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9L3Blcm1pc3Npb25cIl0sXG4gICAgZ2V0Q29tYmluZWRTdGF0dXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn1cIl0sXG4gICAgZ2V0Q29tbWl0QWN0aXZpdHlTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb21taXRfYWN0aXZpdHlcIl0sXG4gICAgZ2V0Q29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0Q29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIl0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRTdGF0dXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzL3tzdGF0dXNfaWR9XCJdLFxuICAgIGdldEVudmlyb25tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIl0sXG4gICAgZ2V0TGF0ZXN0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMvbGF0ZXN0XCJdLFxuICAgIGdldExhdGVzdFJlbGVhc2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvbGF0ZXN0XCJdLFxuICAgIGdldFBhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGdldFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL3tidWlsZF9pZH1cIl0sXG4gICAgZ2V0UGFnZXNIZWFsdGhDaGVjazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9oZWFsdGhcIl0sXG4gICAgZ2V0UGFydGljaXBhdGlvblN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3BhcnRpY2lwYXRpb25cIl0sXG4gICAgZ2V0UHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIl0sXG4gICAgZ2V0UHVuY2hDYXJkU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcHVuY2hfY2FyZFwiXSxcbiAgICBnZXRSZWFkbWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lXCJdLFxuICAgIGdldFJlYWRtZUluRGlyZWN0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZS97ZGlyfVwiXSxcbiAgICBnZXRSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQXNzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUJ5VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3RhZ3Mve3RhZ31cIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIl0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIl0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCJdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXSxcbiAgICBsaXN0QXV0b2xpbmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBsaXN0QnJhbmNoZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIl0sXG4gICAgbGlzdEJyYW5jaGVzRm9ySGVhZENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9icmFuY2hlcy13aGVyZS1oZWFkXCJdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yQ29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdFN0YXR1c2VzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIl0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiXSxcbiAgICBsaXN0Q29udHJpYnV0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBsaXN0RGVwbG95S2V5czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCJdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCJdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgbGlzdFRhZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFnc1wiXSxcbiAgICBsaXN0VGVhbXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGVhbXNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCJdLFxuICAgIGxpc3RXZWJob29rczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiXSxcbiAgICBtZXJnZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2VzXCJdLFxuICAgIG1lcmdlVXBzdHJlYW06IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlLXVwc3RyZWFtXCJdLFxuICAgIHBpbmdXZWJob29rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJdLFxuICAgIHJlbW92ZUFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiYXBwc1wiXG4gICAgfV0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcImNvbnRleHRzXCJcbiAgICB9XSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ0ZWFtc1wiXG4gICAgfV0sXG4gICAgcmVtb3ZlVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInVzZXJzXCJcbiAgICB9XSxcbiAgICByZW5hbWVCcmFuY2g6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3JlbmFtZVwiXSxcbiAgICByZXBsYWNlQWxsVG9waWNzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICByZXF1ZXN0UGFnZXNCdWlsZDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIHNldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiXSxcbiAgICBzZXRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcImFwcHNcIlxuICAgIH1dLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiY29udGV4dHNcIlxuICAgIH1dLFxuICAgIHNldFRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ0ZWFtc1wiXG4gICAgfV0sXG4gICAgc2V0VXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInVzZXJzXCJcbiAgICB9XSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCJdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlSW5mb3JtYXRpb25BYm91dFBhZ2VzU2l0ZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICB1cGRhdGVJbnZpdGF0aW9uOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIl0sXG4gICAgdXBkYXRlUmVsZWFzZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICB1cGRhdGVSZWxlYXNlQXNzZXQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1BvdGVjdGlvbjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJ1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb25cIl1cbiAgICB9XSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yUmVwbzogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gICAgdXBsb2FkUmVsZWFzZUFzc2V0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLCB7XG4gICAgICBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCJcbiAgICB9XVxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIl0sXG4gICAgbGFiZWxzOiBbXCJHRVQgL3NlYXJjaC9sYWJlbHNcIl0sXG4gICAgcmVwb3M6IFtcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiXSxcbiAgICB0b3BpY3M6IFtcIkdFVCAvc2VhcmNoL3RvcGljc1wiXSxcbiAgICB1c2VyczogW1wiR0VUIC9zZWFyY2gvdXNlcnNcIl1cbiAgfSxcbiAgc2VjcmV0U2Nhbm5pbmc6IHtcbiAgICBnZXRBbGVydDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vbG9jYXRpb25zXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXVxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBhZGRPclVwZGF0ZVJlcG9QZXJtaXNzaW9uc0luT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUmVwb0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJdLFxuICAgIGRlbGV0ZUluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0QnlOYW1lOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0RGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBsaXN0Q2hpbGRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCJdLFxuICAgIGxpc3REaXNjdXNzaW9uQ29tbWVudHNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHJvamVjdHNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlUHJvamVjdEluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIHJlbW92ZVJlcG9Jbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIl0sXG4gICAgdXBkYXRlSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiUE9TVCAvdXNlci9rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIva2V5c1wiXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGZvbGxvdzogW1wiUFVUIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlclwiXSxcbiAgICBnZXRCeVVzZXJuYW1lOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0Q29udGV4dEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ob3ZlcmNhcmRcIl0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvdXNlcnNcIl0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3NcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvYmxvY2tzXCJdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZW1haWxzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmdcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2dwZ19rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5c1wiXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZDogW1wiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIl0sXG4gICAgdW5ibG9jazogW1wiREVMRVRFIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVuZm9sbG93OiBbXCJERUxFVEUgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlQXV0aGVudGljYXRlZDogW1wiUEFUQ0ggL3VzZXJcIl1cbiAgfVxufTtcblxuY29uc3QgVkVSU0lPTiA9IFwiNS4xNi4yXCI7XG5cbmZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0LCBlbmRwb2ludHNNYXApIHtcbiAgY29uc3QgbmV3TWV0aG9kcyA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3Njb3BlLCBlbmRwb2ludHNdIG9mIE9iamVjdC5lbnRyaWVzKGVuZHBvaW50c01hcCkpIHtcbiAgICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBlbmRwb2ludF0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgICAgY29uc3QgW3JvdXRlLCBkZWZhdWx0cywgZGVjb3JhdGlvbnNdID0gZW5kcG9pbnQ7XG4gICAgICBjb25zdCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoLyAvKTtcbiAgICAgIGNvbnN0IGVuZHBvaW50RGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmxcbiAgICAgIH0sIGRlZmF1bHRzKTtcblxuICAgICAgaWYgKCFuZXdNZXRob2RzW3Njb3BlXSkge1xuICAgICAgICBuZXdNZXRob2RzW3Njb3BlXSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzY29wZU1ldGhvZHMgPSBuZXdNZXRob2RzW3Njb3BlXTtcblxuICAgICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICAgIHNjb3BlTWV0aG9kc1ttZXRob2ROYW1lXSA9IGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBlbmRwb2ludERlZmF1bHRzLCBkZWNvcmF0aW9ucyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBzY29wZU1ldGhvZHNbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld01ldGhvZHM7XG59XG5cbmZ1bmN0aW9uIGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBkZWZhdWx0cywgZGVjb3JhdGlvbnMpIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgZnVuY3Rpb24gd2l0aERlY29yYXRpb25zKC4uLmFyZ3MpIHtcbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7IC8vIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gb3RoZXIgZGVjb3JhdGlvbnMgdGhhbiBgLm1hcFRvRGF0YWBcblxuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKGBvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKSBoYXMgYmVlbiByZW5hbWVkIHRvIG9jdG9raXQuJHtuZXdTY29wZX0uJHtuZXdNZXRob2ROYW1lfSgpYCk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgKTtcblxuICAgICAgICAgIGlmICghKGFsaWFzIGluIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICBvcHRpb25zW2FsaWFzXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfSAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcblxuXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih3aXRoRGVjb3JhdGlvbnMsIHJlcXVlc3RXaXRoRGVmYXVsdHMpO1xufVxuXG5mdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQsIEVuZHBvaW50cyk7XG4gIHJldHVybiB7XG4gICAgcmVzdDogYXBpXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0LCBFbmRwb2ludHMpO1xuICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGFwaSksIHt9LCB7XG4gICAgcmVzdDogYXBpXG4gIH0pO1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzID0gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcztcbmV4cG9ydHMucmVzdEVuZHBvaW50TWV0aG9kcyA9IHJlc3RFbmRwb2ludE1ldGhvZHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBWRVJTSU9OID0gXCIyLjIxLjNcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBTb21lIOKAnGxpc3TigJ0gcmVzcG9uc2UgdGhhdCBjYW4gYmUgcGFnaW5hdGVkIGhhdmUgYSBkaWZmZXJlbnQgcmVzcG9uc2Ugc3RydWN0dXJlXG4gKlxuICogVGhleSBoYXZlIGEgYHRvdGFsX2NvdW50YCBrZXkgaW4gdGhlIHJlc3BvbnNlIChzZWFyY2ggYWxzbyBoYXMgYGluY29tcGxldGVfcmVzdWx0c2AsXG4gKiAvaW5zdGFsbGF0aW9uL3JlcG9zaXRvcmllcyBhbHNvIGhhcyBgcmVwb3NpdG9yeV9zZWxlY3Rpb25gKSwgYXMgd2VsbCBhcyBhIGtleSB3aXRoXG4gKiB0aGUgbGlzdCBvZiB0aGUgaXRlbXMgd2hpY2ggbmFtZSB2YXJpZXMgZnJvbSBlbmRwb2ludCB0byBlbmRwb2ludC5cbiAqXG4gKiBPY3Rva2l0IG5vcm1hbGl6ZXMgdGhlc2UgcmVzcG9uc2VzIHNvIHRoYXQgcGFnaW5hdGVkIHJlc3VsdHMgYXJlIGFsd2F5cyByZXR1cm5lZCBmb2xsb3dpbmdcbiAqIHRoZSBzYW1lIHN0cnVjdHVyZS4gT25lIGNoYWxsZW5nZSBpcyB0aGF0IGlmIHRoZSBsaXN0IHJlc3BvbnNlIGhhcyBvbmx5IG9uZSBwYWdlLCBubyBMaW5rXG4gKiBoZWFkZXIgaXMgcHJvdmlkZWQsIHNvIHRoaXMgaGVhZGVyIGFsb25lIGlzIG5vdCBzdWZmaWNpZW50IHRvIGNoZWNrIHdldGhlciBhIHJlc3BvbnNlIGlzXG4gKiBwYWdpbmF0ZWQgb3Igbm90LlxuICpcbiAqIFdlIGNoZWNrIGlmIGEgXCJ0b3RhbF9jb3VudFwiIGtleSBpcyBwcmVzZW50IGluIHRoZSByZXNwb25zZSBkYXRhLCBidXQgYWxzbyBtYWtlIHN1cmUgdGhhdFxuICogYSBcInVybFwiIHByb3BlcnR5IGlzIG5vdCwgYXMgdGhlIFwiR2V0IHRoZSBjb21iaW5lZCBzdGF0dXMgZm9yIGEgc3BlY2lmaWMgcmVmXCIgZW5kcG9pbnQgd291bGRcbiAqIG90aGVyd2lzZSBtYXRjaDogaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9yZXBvcy9zdGF0dXNlcy8jZ2V0LXRoZS1jb21iaW5lZC1zdGF0dXMtZm9yLWEtc3BlY2lmaWMtcmVmXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSkge1xuICAvLyBlbmRwb2ludHMgY2FuIHJlc3BvbmQgd2l0aCAyMDQgaWYgcmVwb3NpdG9yeSBpcyBlbXB0eVxuICBpZiAoIXJlc3BvbnNlLmRhdGEpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHJlc3BvbnNlKSwge30sIHtcbiAgICAgIGRhdGE6IFtdXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlOyAvLyBrZWVwIHRoZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaW50YWN0IGFzIHRoZXJlIGlzIGN1cnJlbnRseSBubyBvdGhlciB3YXlcbiAgLy8gdG8gcmV0cmlldmUgdGhlIHNhbWUgaW5mb3JtYXRpb24uXG5cbiAgY29uc3QgaW5jb21wbGV0ZVJlc3VsdHMgPSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgY29uc3QgcmVwb3NpdG9yeVNlbGVjdGlvbiA9IHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGNvbnN0IHRvdGFsQ291bnQgPSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgY29uc3QgbmFtZXNwYWNlS2V5ID0gT2JqZWN0LmtleXMocmVzcG9uc2UuZGF0YSlbMF07XG4gIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhW25hbWVzcGFjZUtleV07XG4gIHJlc3BvbnNlLmRhdGEgPSBkYXRhO1xuXG4gIGlmICh0eXBlb2YgaW5jb21wbGV0ZVJlc3VsdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cyA9IGluY29tcGxldGVSZXN1bHRzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cblxuICByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50ID0gdG90YWxDb3VudDtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5mdW5jdGlvbiBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZS5lbmRwb2ludChwYXJhbWV0ZXJzKSA6IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludChyb3V0ZSwgcGFyYW1ldGVycyk7XG4gIGNvbnN0IHJlcXVlc3RNZXRob2QgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlIDogb2N0b2tpdC5yZXF1ZXN0O1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgbGV0IHVybCA9IG9wdGlvbnMudXJsO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+ICh7XG4gICAgICBhc3luYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIHtcbiAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2Qoe1xuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgaGVhZGVyc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZSA9IG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSk7IC8vIGByZXNwb25zZS5oZWFkZXJzLmxpbmtgIGZvcm1hdDpcbiAgICAgICAgICAvLyAnPGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXNlZW1rL2ZvbGxvd2Vycz9wYWdlPTI+OyByZWw9XCJuZXh0XCIsIDxodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2FzZWVtay9mb2xsb3dlcnM/cGFnZT0yPjsgcmVsPVwibGFzdFwiJ1xuICAgICAgICAgIC8vIHNldHMgYHVybGAgdG8gdW5kZWZpbmVkIGlmIFwibmV4dFwiIFVSTCBpcyBub3QgcHJlc2VudCBvciBgbGlua2AgaGVhZGVyIGlzIG5vdCBzZXRcblxuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaCgvPChbXj5dKyk+O1xccypyZWw9XCJuZXh0XCIvKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVkUmVzcG9uc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0pXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGdhdGhlcihvY3Rva2l0LCBbXSwgaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLCBtYXBGbik7XG59XG5cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvciwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yLm5leHQoKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBsZXQgZWFybHlFeGl0ID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQobWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGEpO1xuXG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvciwgbWFwRm4pO1xuICB9KTtcbn1cblxuY29uc3QgY29tcG9zZVBhZ2luYXRlUmVzdCA9IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUsIHtcbiAgaXRlcmF0b3Jcbn0pO1xuXG5jb25zdCBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLCBcIkdFVCAvYXBwbGljYXRpb25zL2dyYW50c1wiLCBcIkdFVCAvYXV0aG9yaXphdGlvbnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lci1ncm91cHNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vb3JnYW5pemF0aW9uc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXJzXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYXVkaXQtbG9nXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIiwgXCJHRVQgL2V2ZW50c1wiLCBcIkdFVCAvZ2lzdHNcIiwgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLCBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLCBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLCBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9pc3N1ZXNcIiwgXCJHRVQgL2xpY2Vuc2VzXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLCBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIiwgXCJHRVQgL25vdGlmaWNhdGlvbnNcIiwgXCJHRVQgL29yZ2FuaXphdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2F1ZGl0LWxvZ1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9jcmVkZW50aWFsLWF1dGhvcml6YXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2V4dGVybmFsLWdyb3Vwc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FkdmFuY2VkLXNlY3VyaXR5XCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW0tc3luYy9ncm91cHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIiwgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIiwgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21taXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2ZpbGVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsIFwiR0VUIC9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsIFwiR0VUIC9zZWFyY2gvY29kZVwiLCBcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIiwgXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIiwgXCJHRVQgL3NlYXJjaC9sYWJlbHNcIiwgXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL3NlYXJjaC90b3BpY3NcIiwgXCJHRVQgL3NlYXJjaC91c2Vyc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2ludml0YXRpb25zXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vbWVtYmVyc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcmVwb3NcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS90ZWFtc1wiLCBcIkdFVCAvdXNlci9ibG9ja3NcIiwgXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiLCBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIiwgXCJHRVQgL3VzZXIvZW1haWxzXCIsIFwiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiLCBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIiwgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIiwgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiLCBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvdXNlci9pc3N1ZXNcIiwgXCJHRVQgL3VzZXIva2V5c1wiLCBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIiwgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzL3N0dWJiZWRcIiwgXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiLCBcIkdFVCAvdXNlci9taWdyYXRpb25zXCIsIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC91c2VyL29yZ3NcIiwgXCJHRVQgL3VzZXIvcGFja2FnZXNcIiwgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLCBcIkdFVCAvdXNlci9yZXBvc1wiLCBcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCIsIFwiR0VUIC91c2VyL3N0YXJyZWRcIiwgXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiLCBcIkdFVCAvdXNlci90ZWFtc1wiLCBcIkdFVCAvdXNlcnNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdO1xuXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSBvY3Rva2l0IE9jdG9raXQgaW5zdGFuY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgcGFzc2VkIHRvIE9jdG9raXQgY29uc3RydWN0b3JcbiAqL1xuXG5mdW5jdGlvbiBwYWdpbmF0ZVJlc3Qob2N0b2tpdCkge1xuICByZXR1cm4ge1xuICAgIHBhZ2luYXRlOiBPYmplY3QuYXNzaWduKHBhZ2luYXRlLmJpbmQobnVsbCwgb2N0b2tpdCksIHtcbiAgICAgIGl0ZXJhdG9yOiBpdGVyYXRvci5iaW5kKG51bGwsIG9jdG9raXQpXG4gICAgfSlcbiAgfTtcbn1cbnBhZ2luYXRlUmVzdC5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5jb21wb3NlUGFnaW5hdGVSZXN0ID0gY29tcG9zZVBhZ2luYXRlUmVzdDtcbmV4cG9ydHMuaXNQYWdpbmF0aW5nRW5kcG9pbnQgPSBpc1BhZ2luYXRpbmdFbmRwb2ludDtcbmV4cG9ydHMucGFnaW5hdGVSZXN0ID0gcGFnaW5hdGVSZXN0O1xuZXhwb3J0cy5wYWdpbmF0aW5nRW5kcG9pbnRzID0gcGFnaW5hdGluZ0VuZHBvaW50cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9jdG9raXRPcHRpb25zID0gZXhwb3J0cy5HaXRIdWIgPSBleHBvcnRzLmRlZmF1bHRzID0gZXhwb3J0cy5jb250ZXh0ID0gdm9pZCAwO1xuY29uc3QgQ29udGV4dCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpKTtcbmNvbnN0IFV0aWxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWxzXCIpKTtcbi8vIG9jdG9raXQgKyBwbHVnaW5zXG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvY29yZVwiKTtcbmNvbnN0IHBsdWdpbl9yZXN0X2VuZHBvaW50X21ldGhvZHNfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzXCIpO1xuY29uc3QgcGx1Z2luX3BhZ2luYXRlX3Jlc3RfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdFwiKTtcbmV4cG9ydHMuY29udGV4dCA9IG5ldyBDb250ZXh0LkNvbnRleHQoKTtcbmNvbnN0IGJhc2VVcmwgPSBVdGlscy5nZXRBcGlCYXNlVXJsKCk7XG5leHBvcnRzLmRlZmF1bHRzID0ge1xuICAgIGJhc2VVcmwsXG4gICAgcmVxdWVzdDoge1xuICAgICAgICBhZ2VudDogVXRpbHMuZ2V0UHJveHlBZ2VudChiYXNlVXJsKVxuICAgIH1cbn07XG5leHBvcnRzLkdpdEh1YiA9IGNvcmVfMS5PY3Rva2l0LnBsdWdpbihwbHVnaW5fcmVzdF9lbmRwb2ludF9tZXRob2RzXzEucmVzdEVuZHBvaW50TWV0aG9kcywgcGx1Z2luX3BhZ2luYXRlX3Jlc3RfMS5wYWdpbmF0ZVJlc3QpLmRlZmF1bHRzKGV4cG9ydHMuZGVmYXVsdHMpO1xuLyoqXG4gKiBDb252aWVuY2UgZnVuY3Rpb24gdG8gY29ycmVjdGx5IGZvcm1hdCBPY3Rva2l0IE9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdE9wdGlvbnModG9rZW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyB8fCB7fSk7IC8vIFNoYWxsb3cgY2xvbmUgLSBkb24ndCBtdXRhdGUgdGhlIG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyXG4gICAgLy8gQXV0aFxuICAgIGNvbnN0IGF1dGggPSBVdGlscy5nZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRzKTtcbiAgICBpZiAoYXV0aCkge1xuICAgICAgICBvcHRzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICByZXR1cm4gb3B0cztcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBnZXRPY3Rva2l0T3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZXhwb3J0cy5jb250ZXh0ID0gdm9pZCAwO1xuY29uc3QgQ29udGV4dCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuY29udGV4dCA9IG5ldyBDb250ZXh0LkNvbnRleHQoKTtcbi8qKlxuICogUmV0dXJucyBhIGh5ZHJhdGVkIG9jdG9raXQgcmVhZHkgdG8gdXNlIGZvciBHaXRIdWIgQWN0aW9uc1xuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0KHRva2VuLCBvcHRpb25zLCAuLi5hZGRpdGlvbmFsUGx1Z2lucykge1xuICAgIGNvbnN0IEdpdEh1YldpdGhQbHVnaW5zID0gdXRpbHNfMS5HaXRIdWIucGx1Z2luKC4uLmFkZGl0aW9uYWxQbHVnaW5zKTtcbiAgICByZXR1cm4gbmV3IEdpdEh1YldpdGhQbHVnaW5zKHV0aWxzXzEuZ2V0T2N0b2tpdE9wdGlvbnModG9rZW4sIG9wdGlvbnMpKTtcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGdldE9jdG9raXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1naXRodWIuanMubWFwIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IFRyYXZlcnNlO1xuZnVuY3Rpb24gVHJhdmVyc2UgKG9iaikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmF2ZXJzZSkpIHJldHVybiBuZXcgVHJhdmVyc2Uob2JqKTtcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xufVxuXG5UcmF2ZXJzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBzKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBwc1tpXTtcbiAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBrZXkpKSB7XG4gICAgICAgICAgICBub2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGVba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBzLCB2YWx1ZSkge1xuICAgIHZhciBub2RlID0gdGhpcy52YWx1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBzLmxlbmd0aCAtIDE7IGkgKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHBzW2ldO1xuICAgICAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGtleSkpIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICBub2RlID0gbm9kZVtrZXldO1xuICAgIH1cbiAgICBub2RlW3BzW2ldXSA9IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICByZXR1cm4gd2Fsayh0aGlzLnZhbHVlLCBjYiwgdHJ1ZSk7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYikge1xuICAgIHRoaXMudmFsdWUgPSB3YWxrKHRoaXMudmFsdWUsIGNiLCBmYWxzZSk7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gKGNiLCBpbml0KSB7XG4gICAgdmFyIHNraXAgPSBhcmd1bWVudHMubGVuZ3RoID09PSAxO1xuICAgIHZhciBhY2MgPSBza2lwID8gdGhpcy52YWx1ZSA6IGluaXQ7XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1Jvb3QgfHwgIXNraXApIHtcbiAgICAgICAgICAgIGFjYyA9IGNiLmNhbGwodGhpcywgYWNjLCB4KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUuZGVlcEVxdWFsID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdkZWVwRXF1YWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgb2JqZWN0IHRvIGNvbXBhcmUgYWdhaW5zdCdcbiAgICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIGVxdWFsID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IG9iajtcbiAgICBcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgdmFyIG5vdEVxdWFsID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAvL3RoaXMuc3RvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSkuYmluZCh0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIC8vaWYgKG5vZGUgPT09IHVuZGVmaW5lZCB8fCBub2RlID09PSBudWxsKSByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgXG4gICAgICAgIGlmICghdGhpcy5pc1Jvb3QpIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgdGhpcy5rZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlW3RoaXMua2V5XTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFyIHggPSBub2RlO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5wb3N0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vZGUgPSB4O1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHZhciB0b1MgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLmNpcmN1bGFyKSB7XG4gICAgICAgICAgICBpZiAoVHJhdmVyc2Uob2JqKS5nZXQodGhpcy5jaXJjdWxhci5wYXRoKSAhPT0geCkgbm90RXF1YWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgeCAhPT0gdHlwZW9mIHkpIHtcbiAgICAgICAgICAgIG5vdEVxdWFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoeCA9PT0gbnVsbCB8fCB5ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh4ICE9PSB5KSBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHguX19wcm90b19fICE9PSB5Ll9fcHJvdG9fXykge1xuICAgICAgICAgICAgbm90RXF1YWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4ID09PSB5KSB7XG4gICAgICAgICAgICAvLyBub3BcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAvLyBib3RoIHJlZ2V4cHMgb24gYWNjb3VudCBvZiB0aGUgX19wcm90b19fIGNoZWNrXG4gICAgICAgICAgICAgICAgaWYgKHgudG9TdHJpbmcoKSAhPSB5LnRvU3RyaW5nKCkpIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh4ICE9PSB5KSBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHRvUyh5KSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSdcbiAgICAgICAgICAgIHx8IHRvUyh4KSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXScpIHtcbiAgICAgICAgICAgICAgICBpZiAodG9TKHgpICE9PSB0b1MoeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm90RXF1YWwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh4IGluc3RhbmNlb2YgRGF0ZSB8fCB5IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICghKHggaW5zdGFuY2VvZiBEYXRlKSB8fCAhKHkgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHx8IHguZ2V0VGltZSgpICE9PSB5LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBreCA9IE9iamVjdC5rZXlzKHgpO1xuICAgICAgICAgICAgICAgIHZhciBreSA9IE9iamVjdC5rZXlzKHkpO1xuICAgICAgICAgICAgICAgIGlmIChreC5sZW5ndGggIT09IGt5Lmxlbmd0aCkgcmV0dXJuIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBreC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgayA9IGt4W2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksIGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGVxdWFsO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLnBhdGhzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhY2MgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgYWNjLnB1c2godGhpcy5wYXRoKTsgXG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5ub2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYWNjID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGFjYy5wdXNoKHRoaXMubm9kZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdLCBub2RlcyA9IFtdO1xuICAgIFxuICAgIHJldHVybiAoZnVuY3Rpb24gY2xvbmUgKHNyYykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRzW2ldID09PSBzcmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2Ygc3JjID09PSAnb2JqZWN0JyAmJiBzcmMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBkc3QgPSBjb3B5KHNyYyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBhcmVudHMucHVzaChzcmMpO1xuICAgICAgICAgICAgbm9kZXMucHVzaChkc3QpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGRzdFtrZXldID0gY2xvbmUoc3JjW2tleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBhcmVudHMucG9wKCk7XG4gICAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBkc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3JjO1xuICAgICAgICB9XG4gICAgfSkodGhpcy52YWx1ZSk7XG59O1xuXG5mdW5jdGlvbiB3YWxrIChyb290LCBjYiwgaW1tdXRhYmxlKSB7XG4gICAgdmFyIHBhdGggPSBbXTtcbiAgICB2YXIgcGFyZW50cyA9IFtdO1xuICAgIHZhciBhbGl2ZSA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIChmdW5jdGlvbiB3YWxrZXIgKG5vZGVfKSB7XG4gICAgICAgIHZhciBub2RlID0gaW1tdXRhYmxlID8gY29weShub2RlXykgOiBub2RlXztcbiAgICAgICAgdmFyIG1vZGlmaWVycyA9IHt9O1xuICAgICAgICBcbiAgICAgICAgdmFyIHN0YXRlID0ge1xuICAgICAgICAgICAgbm9kZSA6IG5vZGUsXG4gICAgICAgICAgICBub2RlXyA6IG5vZGVfLFxuICAgICAgICAgICAgcGF0aCA6IFtdLmNvbmNhdChwYXRoKSxcbiAgICAgICAgICAgIHBhcmVudCA6IHBhcmVudHMuc2xpY2UoLTEpWzBdLFxuICAgICAgICAgICAga2V5IDogcGF0aC5zbGljZSgtMSlbMF0sXG4gICAgICAgICAgICBpc1Jvb3QgOiBwYXRoLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICAgIGxldmVsIDogcGF0aC5sZW5ndGgsXG4gICAgICAgICAgICBjaXJjdWxhciA6IG51bGwsXG4gICAgICAgICAgICB1cGRhdGUgOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIGlmICghc3RhdGUuaXNSb290KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudC5ub2RlW3N0YXRlLmtleV0gPSB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZS5ub2RlID0geDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZGVsZXRlJyA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGUucGFyZW50Lm5vZGVbc3RhdGUua2V5XTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1vdmUgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucGFyZW50Lm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudC5ub2RlLnNwbGljZShzdGF0ZS5rZXksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLnBhcmVudC5ub2RlW3N0YXRlLmtleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJlZm9yZSA6IGZ1bmN0aW9uIChmKSB7IG1vZGlmaWVycy5iZWZvcmUgPSBmIH0sXG4gICAgICAgICAgICBhZnRlciA6IGZ1bmN0aW9uIChmKSB7IG1vZGlmaWVycy5hZnRlciA9IGYgfSxcbiAgICAgICAgICAgIHByZSA6IGZ1bmN0aW9uIChmKSB7IG1vZGlmaWVycy5wcmUgPSBmIH0sXG4gICAgICAgICAgICBwb3N0IDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLnBvc3QgPSBmIH0sXG4gICAgICAgICAgICBzdG9wIDogZnVuY3Rpb24gKCkgeyBhbGl2ZSA9IGZhbHNlIH1cbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGlmICghYWxpdmUpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgbm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUuaXNMZWFmID0gT2JqZWN0LmtleXMobm9kZSkubGVuZ3RoID09IDA7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRzW2ldLm5vZGVfID09PSBub2RlXykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaXJjdWxhciA9IHBhcmVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLmlzTGVhZiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHN0YXRlLm5vdExlYWYgPSAhc3RhdGUuaXNMZWFmO1xuICAgICAgICBzdGF0ZS5ub3RSb290ID0gIXN0YXRlLmlzUm9vdDtcbiAgICAgICAgXG4gICAgICAgIC8vIHVzZSByZXR1cm4gdmFsdWVzIHRvIHVwZGF0ZSBpZiBkZWZpbmVkXG4gICAgICAgIHZhciByZXQgPSBjYi5jYWxsKHN0YXRlLCBzdGF0ZS5ub2RlKTtcbiAgICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLnVwZGF0ZSkgc3RhdGUudXBkYXRlKHJldCk7XG4gICAgICAgIGlmIChtb2RpZmllcnMuYmVmb3JlKSBtb2RpZmllcnMuYmVmb3JlLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZS5ub2RlID09ICdvYmplY3QnXG4gICAgICAgICYmIHN0YXRlLm5vZGUgIT09IG51bGwgJiYgIXN0YXRlLmNpcmN1bGFyKSB7XG4gICAgICAgICAgICBwYXJlbnRzLnB1c2goc3RhdGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHN0YXRlLm5vZGUpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXksIGkpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnByZSkgbW9kaWZpZXJzLnByZS5jYWxsKHN0YXRlLCBzdGF0ZS5ub2RlW2tleV0sIGtleSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gd2Fsa2VyKHN0YXRlLm5vZGVba2V5XSk7XG4gICAgICAgICAgICAgICAgaWYgKGltbXV0YWJsZSAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5ub2RlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLm5vZGVba2V5XSA9IGNoaWxkLm5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNoaWxkLmlzTGFzdCA9IGkgPT0ga2V5cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIGNoaWxkLmlzRmlyc3QgPSBpID09IDA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVycy5wb3N0KSBtb2RpZmllcnMucG9zdC5jYWxsKHN0YXRlLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyZW50cy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKG1vZGlmaWVycy5hZnRlcikgbW9kaWZpZXJzLmFmdGVyLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGUpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0pKHJvb3QpLm5vZGU7XG59XG5cbk9iamVjdC5rZXlzKFRyYXZlcnNlLnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgVHJhdmVyc2Vba2V5XSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHZhciB0ID0gVHJhdmVyc2Uob2JqKTtcbiAgICAgICAgcmV0dXJuIHRba2V5XS5hcHBseSh0LCBhcmdzKTtcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGNvcHkgKHNyYykge1xuICAgIGlmICh0eXBlb2Ygc3JjID09PSAnb2JqZWN0JyAmJiBzcmMgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRzdDtcbiAgICAgICAgXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNyYykpIHtcbiAgICAgICAgICAgIGRzdCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIGRzdCA9IG5ldyBEYXRlKHNyYyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgQm9vbGVhbikge1xuICAgICAgICAgICAgZHN0ID0gbmV3IEJvb2xlYW4oc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgICAgIGRzdCA9IG5ldyBOdW1iZXIoc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgIGRzdCA9IG5ldyBTdHJpbmcoc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRzdCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNyYykpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkc3Q7XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIHNyYztcbn1cbiIsCiAgICAidmFyIFRyYXZlcnNlID0gcmVxdWlyZSgndHJhdmVyc2UnKTtcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2hhaW5zYXc7XG5mdW5jdGlvbiBDaGFpbnNhdyAoYnVpbGRlcikge1xuICAgIHZhciBzYXcgPSBDaGFpbnNhdy5zYXcoYnVpbGRlciwge30pO1xuICAgIHZhciByID0gYnVpbGRlci5jYWxsKHNhdy5oYW5kbGVycywgc2F3KTtcbiAgICBpZiAociAhPT0gdW5kZWZpbmVkKSBzYXcuaGFuZGxlcnMgPSByO1xuICAgIHNhdy5yZWNvcmQoKTtcbiAgICByZXR1cm4gc2F3LmNoYWluKCk7XG59O1xuXG5DaGFpbnNhdy5saWdodCA9IGZ1bmN0aW9uIENoYWluc2F3TGlnaHQgKGJ1aWxkZXIpIHtcbiAgICB2YXIgc2F3ID0gQ2hhaW5zYXcuc2F3KGJ1aWxkZXIsIHt9KTtcbiAgICB2YXIgciA9IGJ1aWxkZXIuY2FsbChzYXcuaGFuZGxlcnMsIHNhdyk7XG4gICAgaWYgKHIgIT09IHVuZGVmaW5lZCkgc2F3LmhhbmRsZXJzID0gcjtcbiAgICByZXR1cm4gc2F3LmNoYWluKCk7XG59O1xuXG5DaGFpbnNhdy5zYXcgPSBmdW5jdGlvbiAoYnVpbGRlciwgaGFuZGxlcnMpIHtcbiAgICB2YXIgc2F3ID0gbmV3IEV2ZW50RW1pdHRlcjtcbiAgICBzYXcuaGFuZGxlcnMgPSBoYW5kbGVycztcbiAgICBzYXcuYWN0aW9ucyA9IFtdO1xuXG4gICAgc2F3LmNoYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2ggPSBUcmF2ZXJzZShzYXcuaGFuZGxlcnMpLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSb290KSByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIHZhciBwcyA9IHRoaXMucGF0aDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzYXcuYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggOiBwcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgOiBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzYXcuZW1pdCgnYmVnaW4nKTtcbiAgICAgICAgICAgIHNhdy5uZXh0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9O1xuXG4gICAgc2F3LnBvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNhdy5hY3Rpb25zLnNoaWZ0KCk7XG4gICAgfTtcblxuICAgIHNhdy5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWN0aW9uID0gc2F3LnBvcCgpO1xuXG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICBzYXcuZW1pdCgnZW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWFjdGlvbi50cmFwKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IHNhdy5oYW5kbGVycztcbiAgICAgICAgICAgIGFjdGlvbi5wYXRoLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBub2RlID0gbm9kZVtrZXldIH0pO1xuICAgICAgICAgICAgbm9kZS5hcHBseShzYXcuaGFuZGxlcnMsIGFjdGlvbi5hcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzYXcubmVzdCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGF1dG9uZXh0ID0gdHJ1ZTtcblxuICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHZhciBhdXRvbmV4dCA9IGNiO1xuICAgICAgICAgICAgY2IgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcyA9IENoYWluc2F3LnNhdyhidWlsZGVyLCB7fSk7XG4gICAgICAgIHZhciByID0gYnVpbGRlci5jYWxsKHMuaGFuZGxlcnMsIHMpO1xuXG4gICAgICAgIGlmIChyICE9PSB1bmRlZmluZWQpIHMuaGFuZGxlcnMgPSByO1xuXG4gICAgICAgIC8vIElmIHdlIGFyZSByZWNvcmRpbmcuLi5cbiAgICAgICAgaWYgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBzYXcuc3RlcCkge1xuICAgICAgICAgICAgLy8gLi4uIG91ciBjaGlsZHJlbiBzaG91bGQsIHRvb1xuICAgICAgICAgICAgcy5yZWNvcmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNiLmFwcGx5KHMuY2hhaW4oKSwgYXJncyk7XG4gICAgICAgIGlmIChhdXRvbmV4dCAhPT0gZmFsc2UpIHMub24oJ2VuZCcsIHNhdy5uZXh0KTtcbiAgICB9O1xuXG4gICAgc2F3LnJlY29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdXBncmFkZUNoYWluc2F3KHNhdyk7XG4gICAgfTtcblxuICAgIFsndHJhcCcsICdkb3duJywgJ2p1bXAnXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgc2F3W21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUbyB1c2UgdGhlIHRyYXAsIGRvd24gYW5kIGp1bXAgZmVhdHVyZXMsIHBsZWFzZSBcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNhbGwgcmVjb3JkKCkgZmlyc3QgdG8gc3RhcnQgcmVjb3JkaW5nIGFjdGlvbnMuXCIpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNhdztcbn07XG5cbmZ1bmN0aW9uIHVwZ3JhZGVDaGFpbnNhdyhzYXcpIHtcbiAgICBzYXcuc3RlcCA9IDA7XG5cbiAgICAvLyBvdmVycmlkZSBwb3BcbiAgICBzYXcucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2F3LmFjdGlvbnNbc2F3LnN0ZXArK107XG4gICAgfTtcblxuICAgIHNhdy50cmFwID0gZnVuY3Rpb24gKG5hbWUsIGNiKSB7XG4gICAgICAgIHZhciBwcyA9IEFycmF5LmlzQXJyYXkobmFtZSkgPyBuYW1lIDogW25hbWVdO1xuICAgICAgICBzYXcuYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHBhdGggOiBwcyxcbiAgICAgICAgICAgIHN0ZXAgOiBzYXcuc3RlcCxcbiAgICAgICAgICAgIGNiIDogY2IsXG4gICAgICAgICAgICB0cmFwIDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgc2F3LmRvd24gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgcHMgPSAoQXJyYXkuaXNBcnJheShuYW1lKSA/IG5hbWUgOiBbbmFtZV0pLmpvaW4oJy8nKTtcbiAgICAgICAgdmFyIGkgPSBzYXcuYWN0aW9ucy5zbGljZShzYXcuc3RlcCkubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpZiAoeC50cmFwICYmIHguc3RlcCA8PSBzYXcuc3RlcCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHgucGF0aC5qb2luKCcvJykgPT0gcHM7XG4gICAgICAgIH0pLmluZGV4T2YodHJ1ZSk7XG5cbiAgICAgICAgaWYgKGkgPj0gMCkgc2F3LnN0ZXAgKz0gaTtcbiAgICAgICAgZWxzZSBzYXcuc3RlcCA9IHNhdy5hY3Rpb25zLmxlbmd0aDtcblxuICAgICAgICB2YXIgYWN0ID0gc2F3LmFjdGlvbnNbc2F3LnN0ZXAgLSAxXTtcbiAgICAgICAgaWYgKGFjdCAmJiBhY3QudHJhcCkge1xuICAgICAgICAgICAgLy8gSXQncyBhIHRyYXAhXG4gICAgICAgICAgICBzYXcuc3RlcCA9IGFjdC5zdGVwO1xuICAgICAgICAgICAgYWN0LmNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzYXcubmV4dCgpO1xuICAgIH07XG5cbiAgICBzYXcuanVtcCA9IGZ1bmN0aW9uIChzdGVwKSB7XG4gICAgICAgIHNhdy5zdGVwID0gc3RlcDtcbiAgICAgICAgc2F3Lm5leHQoKTtcbiAgICB9O1xufTtcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJzO1xuXG5mdW5jdGlvbiBCdWZmZXJzIChidWZzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcnMpKSByZXR1cm4gbmV3IEJ1ZmZlcnMoYnVmcyk7XG4gICAgdGhpcy5idWZmZXJzID0gYnVmcyB8fCBbXTtcbiAgICB0aGlzLmxlbmd0aCA9IHRoaXMuYnVmZmVycy5yZWR1Y2UoZnVuY3Rpb24gKHNpemUsIGJ1Zikge1xuICAgICAgICByZXR1cm4gc2l6ZSArIGJ1Zi5sZW5ndGhcbiAgICB9LCAwKTtcbn1cblxuQnVmZmVycy5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhcmd1bWVudHNbaV0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmllZCB0byBwdXNoIGEgbm9uLWJ1ZmZlcicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHRoaXMuYnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgIHRoaXMubGVuZ3RoICs9IGJ1Zi5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYXJndW1lbnRzW2ldKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gdW5zaGlmdCBhIG5vbi1idWZmZXInKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYnVmID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB0aGlzLmJ1ZmZlcnMudW5zaGlmdChidWYpO1xuICAgICAgICB0aGlzLmxlbmd0aCArPSBidWYubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKGRzdCwgZFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2Uoc3RhcnQsIGVuZCkuY29weShkc3QsIGRTdGFydCwgMCwgZW5kIC0gc3RhcnQpO1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24gKGksIGhvd01hbnkpIHtcbiAgICB2YXIgYnVmZmVycyA9IHRoaXMuYnVmZmVycztcbiAgICB2YXIgaW5kZXggPSBpID49IDAgPyBpIDogdGhpcy5sZW5ndGggLSBpO1xuICAgIHZhciByZXBzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIFxuICAgIGlmIChob3dNYW55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaG93TWFueSA9IHRoaXMubGVuZ3RoIC0gaW5kZXg7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhvd01hbnkgPiB0aGlzLmxlbmd0aCAtIGluZGV4KSB7XG4gICAgICAgIGhvd01hbnkgPSB0aGlzLmxlbmd0aCAtIGluZGV4O1xuICAgIH1cbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5sZW5ndGggKz0gcmVwc1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIFxuICAgIHZhciByZW1vdmVkID0gbmV3IEJ1ZmZlcnMoKTtcbiAgICB2YXIgYnl0ZXMgPSAwO1xuICAgIFxuICAgIHZhciBzdGFydEJ5dGVzID0gMDtcbiAgICBmb3IgKFxuICAgICAgICB2YXIgaWkgPSAwO1xuICAgICAgICBpaSA8IGJ1ZmZlcnMubGVuZ3RoICYmIHN0YXJ0Qnl0ZXMgKyBidWZmZXJzW2lpXS5sZW5ndGggPCBpbmRleDtcbiAgICAgICAgaWkgKytcbiAgICApIHsgc3RhcnRCeXRlcyArPSBidWZmZXJzW2lpXS5sZW5ndGggfVxuICAgIFxuICAgIGlmIChpbmRleCAtIHN0YXJ0Qnl0ZXMgPiAwKSB7XG4gICAgICAgIHZhciBzdGFydCA9IGluZGV4IC0gc3RhcnRCeXRlcztcbiAgICAgICAgXG4gICAgICAgIGlmIChzdGFydCArIGhvd01hbnkgPCBidWZmZXJzW2lpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlbW92ZWQucHVzaChidWZmZXJzW2lpXS5zbGljZShzdGFydCwgc3RhcnQgKyBob3dNYW55KSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBvcmlnID0gYnVmZmVyc1tpaV07XG4gICAgICAgICAgICAvL3ZhciBidWYgPSBuZXcgQnVmZmVyKG9yaWcubGVuZ3RoIC0gaG93TWFueSk7XG4gICAgICAgICAgICB2YXIgYnVmMCA9IG5ldyBCdWZmZXIoc3RhcnQpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnVmMFtpXSA9IG9yaWdbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBidWYxID0gbmV3IEJ1ZmZlcihvcmlnLmxlbmd0aCAtIHN0YXJ0IC0gaG93TWFueSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQgKyBob3dNYW55OyBpIDwgb3JpZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGJ1ZjFbIGkgLSBob3dNYW55IC0gc3RhcnQgXSA9IG9yaWdbaV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHJlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciByZXBzXyA9IHJlcHMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICByZXBzXy51bnNoaWZ0KGJ1ZjApO1xuICAgICAgICAgICAgICAgIHJlcHNfLnB1c2goYnVmMSk7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5zcGxpY2UuYXBwbHkoYnVmZmVycywgWyBpaSwgMSBdLmNvbmNhdChyZXBzXykpO1xuICAgICAgICAgICAgICAgIGlpICs9IHJlcHNfLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXBzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzLnNwbGljZShpaSwgMSwgYnVmMCwgYnVmMSk7XG4gICAgICAgICAgICAgICAgLy9idWZmZXJzW2lpXSA9IGJ1ZjtcbiAgICAgICAgICAgICAgICBpaSArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGJ1ZmZlcnNbaWldLnNsaWNlKHN0YXJ0KSk7XG4gICAgICAgICAgICBidWZmZXJzW2lpXSA9IGJ1ZmZlcnNbaWldLnNsaWNlKDAsIHN0YXJ0KTtcbiAgICAgICAgICAgIGlpICsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmIChyZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYnVmZmVycy5zcGxpY2UuYXBwbHkoYnVmZmVycywgWyBpaSwgMCBdLmNvbmNhdChyZXBzKSk7XG4gICAgICAgIGlpICs9IHJlcHMubGVuZ3RoO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAocmVtb3ZlZC5sZW5ndGggPCBob3dNYW55KSB7XG4gICAgICAgIHZhciBidWYgPSBidWZmZXJzW2lpXTtcbiAgICAgICAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIHZhciB0YWtlID0gTWF0aC5taW4obGVuLCBob3dNYW55IC0gcmVtb3ZlZC5sZW5ndGgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRha2UgPT09IGxlbikge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGJ1Zik7XG4gICAgICAgICAgICBidWZmZXJzLnNwbGljZShpaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goYnVmLnNsaWNlKDAsIHRha2UpKTtcbiAgICAgICAgICAgIGJ1ZmZlcnNbaWldID0gYnVmZmVyc1tpaV0uc2xpY2UodGFrZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5sZW5ndGggLT0gcmVtb3ZlZC5sZW5ndGg7XG4gICAgXG4gICAgcmV0dXJuIHJlbW92ZWQ7XG59O1xuIFxuQnVmZmVycy5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoaSwgaikge1xuICAgIHZhciBidWZmZXJzID0gdGhpcy5idWZmZXJzO1xuICAgIGlmIChqID09PSB1bmRlZmluZWQpIGogPSB0aGlzLmxlbmd0aDtcbiAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSBpID0gMDtcbiAgICBcbiAgICBpZiAoaiA+IHRoaXMubGVuZ3RoKSBqID0gdGhpcy5sZW5ndGg7XG4gICAgXG4gICAgdmFyIHN0YXJ0Qnl0ZXMgPSAwO1xuICAgIGZvciAoXG4gICAgICAgIHZhciBzaSA9IDA7XG4gICAgICAgIHNpIDwgYnVmZmVycy5sZW5ndGggJiYgc3RhcnRCeXRlcyArIGJ1ZmZlcnNbc2ldLmxlbmd0aCA8PSBpO1xuICAgICAgICBzaSArK1xuICAgICkgeyBzdGFydEJ5dGVzICs9IGJ1ZmZlcnNbc2ldLmxlbmd0aCB9XG4gICAgXG4gICAgdmFyIHRhcmdldCA9IG5ldyBCdWZmZXIoaiAtIGkpO1xuICAgIFxuICAgIHZhciB0aSA9IDA7XG4gICAgZm9yICh2YXIgaWkgPSBzaTsgdGkgPCBqIC0gaSAmJiBpaSA8IGJ1ZmZlcnMubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgIHZhciBsZW4gPSBidWZmZXJzW2lpXS5sZW5ndGg7XG4gICAgICAgIFxuICAgICAgICB2YXIgc3RhcnQgPSB0aSA9PT0gMCA/IGkgLSBzdGFydEJ5dGVzIDogMDtcbiAgICAgICAgdmFyIGVuZCA9IHRpICsgbGVuID49IGogLSBpXG4gICAgICAgICAgICA/IE1hdGgubWluKHN0YXJ0ICsgKGogLSBpKSAtIHRpLCBsZW4pXG4gICAgICAgICAgICA6IGxlblxuICAgICAgICA7XG4gICAgICAgIFxuICAgICAgICBidWZmZXJzW2lpXS5jb3B5KHRhcmdldCwgdGksIHN0YXJ0LCBlbmQpO1xuICAgICAgICB0aSArPSBlbmQgLSBzdGFydDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRhcmdldDtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnBvcyA9IGZ1bmN0aW9uIChpKSB7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignb29iJyk7XG4gICAgdmFyIGwgPSBpLCBiaSA9IDAsIGJ1ID0gbnVsbDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICAgIGJ1ID0gdGhpcy5idWZmZXJzW2JpXTtcbiAgICAgICAgaWYgKGwgPCBidS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7YnVmOiBiaSwgb2Zmc2V0OiBsfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGwgLT0gYnUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGJpKys7XG4gICAgfVxufTtcblxuQnVmZmVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChpKSB7XG4gICAgdmFyIHBvcyA9IHRoaXMucG9zKGkpO1xuXG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyc1twb3MuYnVmXS5nZXQocG9zLm9mZnNldCk7XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQgKGksIGIpIHtcbiAgICB2YXIgcG9zID0gdGhpcy5wb3MoaSk7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJzW3Bvcy5idWZdLnNldChwb3Mub2Zmc2V0LCBiKTtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAobmVlZGxlLCBvZmZzZXQpIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5lZWRsZSkge1xuICAgICAgICBuZWVkbGUgPSBuZXcgQnVmZmVyKG5lZWRsZSk7XG4gICAgfSBlbHNlIGlmIChuZWVkbGUgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgLy8gYWxyZWFkeSBhIGJ1ZmZlclxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0eXBlIGZvciBhIHNlYXJjaCBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoIW5lZWRsZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAwLCBqID0gMCwgbWF0Y2ggPSAwLCBtc3RhcnQsIHBvcyA9IDA7XG5cbiAgICAvLyBzdGFydCBzZWFyY2ggZnJvbSBhIHBhcnRpY3VsYXIgcG9pbnQgaW4gdGhlIHZpcnR1YWwgYnVmZmVyXG4gICAgaWYgKG9mZnNldCkge1xuICAgICAgICB2YXIgcCA9IHRoaXMucG9zKG9mZnNldCk7XG4gICAgICAgIGkgPSBwLmJ1ZjtcbiAgICAgICAgaiA9IHAub2Zmc2V0O1xuICAgICAgICBwb3MgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggY2hhcmFjdGVyIGluIHZpcnR1YWwgYnVmZmVyXG4gICAgZm9yICg7Oykge1xuICAgICAgICB3aGlsZSAoaiA+PSB0aGlzLmJ1ZmZlcnNbaV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgIGkrKztcblxuICAgICAgICAgICAgaWYgKGkgPj0gdGhpcy5idWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBzdHJpbmcgbm90IGZvdW5kXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXIgPSB0aGlzLmJ1ZmZlcnNbaV1bal07XG5cbiAgICAgICAgaWYgKGNoYXIgPT0gbmVlZGxlW21hdGNoXSkge1xuICAgICAgICAgICAgLy8ga2VlcCB0cmFjayB3aGVyZSBtYXRjaCBzdGFydGVkXG4gICAgICAgICAgICBpZiAobWF0Y2ggPT0gMCkge1xuICAgICAgICAgICAgICAgIG1zdGFydCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaTogaSxcbiAgICAgICAgICAgICAgICAgICAgajogaixcbiAgICAgICAgICAgICAgICAgICAgcG9zOiBwb3NcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF0Y2grKztcbiAgICAgICAgICAgIGlmIChtYXRjaCA9PSBuZWVkbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gZnVsbCBtYXRjaFxuICAgICAgICAgICAgICAgIHJldHVybiBtc3RhcnQucG9zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoICE9IDApIHtcbiAgICAgICAgICAgIC8vIGEgcGFydGlhbCBtYXRjaCBlbmRlZCwgZ28gYmFjayB0byBtYXRjaCBzdGFydGluZyBwb3NpdGlvblxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIGNvbnRpbnVlIHRoZSBzZWFyY2ggYXQgdGhlIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgICBpID0gbXN0YXJ0Lmk7XG4gICAgICAgICAgICBqID0gbXN0YXJ0Lmo7XG4gICAgICAgICAgICBwb3MgPSBtc3RhcnQucG9zO1xuICAgICAgICAgICAgbWF0Y2ggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaisrO1xuICAgICAgICBwb3MrKztcbiAgICB9XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNsaWNlKCk7XG59XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gdGhpcy5zbGljZShzdGFydCwgZW5kKS50b1N0cmluZyhlbmNvZGluZyk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0b3JlKSB7XG4gICAgZnVuY3Rpb24gZ2V0c2V0IChuYW1lLCB2YWx1ZSkge1xuICAgICAgICB2YXIgbm9kZSA9IHZhcnMuc3RvcmU7XG4gICAgICAgIHZhciBrZXlzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgICAgICBrZXlzLnNsaWNlKDAsLTEpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIGlmIChub2RlW2tdID09PSB1bmRlZmluZWQpIG5vZGVba10gPSB7fTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlW2tdXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIga2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHZhciB2YXJzID0ge1xuICAgICAgICBnZXQgOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldHNldChuYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0IDogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0c2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RvcmUgOiBzdG9yZSB8fCB7fSxcbiAgICB9O1xuICAgIHJldHVybiB2YXJzO1xufTtcbiIsCiAgICAidmFyIENoYWluc2F3ID0gcmVxdWlyZSgnY2hhaW5zYXcnKTtcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgQnVmZmVycyA9IHJlcXVpcmUoJ2J1ZmZlcnMnKTtcbnZhciBWYXJzID0gcmVxdWlyZSgnLi9saWIvdmFycy5qcycpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJ1Zk9yRW0sIGV2ZW50TmFtZSkge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoYnVmT3JFbSkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMucGFyc2UoYnVmT3JFbSk7XG4gICAgfVxuICAgIFxuICAgIHZhciBzID0gZXhwb3J0cy5zdHJlYW0oKTtcbiAgICBpZiAoYnVmT3JFbSAmJiBidWZPckVtLnBpcGUpIHtcbiAgICAgICAgYnVmT3JFbS5waXBlKHMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChidWZPckVtKSB7XG4gICAgICAgIGJ1Zk9yRW0ub24oZXZlbnROYW1lIHx8ICdkYXRhJywgZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgcy53cml0ZShidWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGJ1Zk9yRW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHMuZW5kKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcztcbn07XG5cbmV4cG9ydHMuc3RyZWFtID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgaWYgKGlucHV0KSByZXR1cm4gZXhwb3J0cy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIFxuICAgIHZhciBwZW5kaW5nID0gbnVsbDtcbiAgICBmdW5jdGlvbiBnZXRCeXRlcyAoYnl0ZXMsIGNiLCBza2lwKSB7XG4gICAgICAgIHBlbmRpbmcgPSB7XG4gICAgICAgICAgICBieXRlcyA6IGJ5dGVzLFxuICAgICAgICAgICAgc2tpcCA6IHNraXAsXG4gICAgICAgICAgICBjYiA6IGZ1bmN0aW9uIChidWYpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjYihidWYpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZGlzcGF0Y2goKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIG9mZnNldCA9IG51bGw7XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2ggKCkge1xuICAgICAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgICAgICAgIGlmIChjYXVnaHRFbmQpIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGVuZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGVuZGluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGJ5dGVzID0gb2Zmc2V0ICsgcGVuZGluZy5ieXRlcztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGJ1ZmZlcnMubGVuZ3RoID49IGJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZjtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmZmVycy5zcGxpY2UoMCwgYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBlbmRpbmcuc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGVuZGluZy5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWZmZXJzLnNsaWNlKG9mZnNldCwgYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGJ5dGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAocGVuZGluZy5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuY2IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuY2IoYnVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gYnVpbGRlciAoc2F3KSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQgKCkgeyBpZiAoIWRvbmUpIHNhdy5uZXh0KCkgfVxuICAgICAgICBcbiAgICAgICAgdmFyIHNlbGYgPSB3b3JkcyhmdW5jdGlvbiAoYnl0ZXMsIGNiKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBnZXRCeXRlcyhieXRlcywgZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgICAgICAgICB2YXJzLnNldChuYW1lLCBjYihidWYpKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBzZWxmLnRhcCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgc2F3Lm5lc3QoY2IsIHZhcnMuc3RvcmUpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5pbnRvID0gZnVuY3Rpb24gKGtleSwgY2IpIHtcbiAgICAgICAgICAgIGlmICghdmFycy5nZXQoa2V5KSkgdmFycy5zZXQoa2V5LCB7fSk7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gdmFycztcbiAgICAgICAgICAgIHZhcnMgPSBWYXJzKHBhcmVudC5nZXQoa2V5KSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNhdy5uZXN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFycyA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHZhcnMuc3RvcmUpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5mbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhcnMuc3RvcmUgPSB7fTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYubG9vcCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgdmFyIGVuZCA9IGZhbHNlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBzYXcubmVzdChmYWxzZSwgZnVuY3Rpb24gbG9vcCAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJzID0gdmFycy5zdG9yZTtcbiAgICAgICAgICAgICAgICBjYi5jYWxsKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH0sIHZhcnMuc3RvcmUpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZCkgc2F3Lm5leHQoKVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGxvb3AuY2FsbCh0aGlzKVxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9LCB2YXJzLnN0b3JlKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYuYnVmZmVyID0gZnVuY3Rpb24gKG5hbWUsIGJ5dGVzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJ5dGVzID0gdmFycy5nZXQoYnl0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBnZXRCeXRlcyhieXRlcywgZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgICAgIHZhcnMuc2V0KG5hbWUsIGJ1Zik7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLnNraXAgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYnl0ZXMgPSB2YXJzLmdldChieXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGdldEJ5dGVzKGJ5dGVzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLnNjYW4gPSBmdW5jdGlvbiBmaW5kIChuYW1lLCBzZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHNlYXJjaCA9IG5ldyBCdWZmZXIoc2VhcmNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2VhcmNoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2VhcmNoIG11c3QgYmUgYSBCdWZmZXIgb3IgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRha2VuID0gMDtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBvcyA9IGJ1ZmZlcnMuaW5kZXhPZihzZWFyY2gsIG9mZnNldCArIHRha2VuKTtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IHBvcy1vZmZzZXQtdGFrZW47XG4gICAgICAgICAgICAgICAgaWYgKHBvcyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFycy5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdGFrZW4gKyBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB0YWtlbiArIGkgKyBzZWFyY2gubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFycy5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnNsaWNlKDAsIHRha2VuICsgaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnNwbGljZSgwLCB0YWtlbiArIGkgKyBzZWFyY2gubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IE1hdGgubWF4KGJ1ZmZlcnMubGVuZ3RoIC0gc2VhcmNoLmxlbmd0aCAtIG9mZnNldCAtIHRha2VuLCAwKTtcblx0XHRcdFx0fVxuICAgICAgICAgICAgICAgIHRha2VuICs9IGk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGlzcGF0Y2goKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYucGVlayA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHNhdy5uZXN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYi5jYWxsKHRoaXMsIHZhcnMuc3RvcmUpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICB2YXIgc3RyZWFtID0gQ2hhaW5zYXcubGlnaHQoYnVpbGRlcik7XG4gICAgc3RyZWFtLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBcbiAgICB2YXIgYnVmZmVycyA9IEJ1ZmZlcnMoKTtcbiAgICBcbiAgICBzdHJlYW0ud3JpdGUgPSBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChidWYpO1xuICAgICAgICBkaXNwYXRjaCgpO1xuICAgIH07XG4gICAgXG4gICAgdmFyIHZhcnMgPSBWYXJzKCk7XG4gICAgXG4gICAgdmFyIGRvbmUgPSBmYWxzZSwgY2F1Z2h0RW5kID0gZmFsc2U7XG4gICAgc3RyZWFtLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2F1Z2h0RW5kID0gdHJ1ZTtcbiAgICB9O1xuICAgIFxuICAgIHN0cmVhbS5waXBlID0gU3RyZWFtLnByb3RvdHlwZS5waXBlO1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgc3RyZWFtW25hbWVdID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZVtuYW1lXTtcbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gc3RyZWFtO1xufTtcblxuZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlIChidWZmZXIpIHtcbiAgICB2YXIgc2VsZiA9IHdvcmRzKGZ1bmN0aW9uIChieXRlcywgY2IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICsgYnl0ZXMgPD0gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBidWYgPSBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBieXRlcyk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzO1xuICAgICAgICAgICAgICAgIHZhcnMuc2V0KG5hbWUsIGNiKGJ1ZikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFycy5zZXQobmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgdmFycyA9IFZhcnMoKTtcbiAgICBzZWxmLnZhcnMgPSB2YXJzLnN0b3JlO1xuICAgIFxuICAgIHNlbGYudGFwID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIGNiLmNhbGwoc2VsZiwgdmFycy5zdG9yZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5pbnRvID0gZnVuY3Rpb24gKGtleSwgY2IpIHtcbiAgICAgICAgaWYgKCF2YXJzLmdldChrZXkpKSB7XG4gICAgICAgICAgICB2YXJzLnNldChrZXksIHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50ID0gdmFycztcbiAgICAgICAgdmFycyA9IFZhcnMocGFyZW50LmdldChrZXkpKTtcbiAgICAgICAgY2IuY2FsbChzZWxmLCB2YXJzLnN0b3JlKTtcbiAgICAgICAgdmFycyA9IHBhcmVudDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmxvb3AgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgdmFyIGVuZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZW5kZXIgPSBmdW5jdGlvbiAoKSB7IGVuZCA9IHRydWUgfTtcbiAgICAgICAgd2hpbGUgKGVuZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNiLmNhbGwoc2VsZiwgZW5kZXIsIHZhcnMuc3RvcmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5idWZmZXIgPSBmdW5jdGlvbiAobmFtZSwgc2l6ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHNpemUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzaXplID0gdmFycy5nZXQoc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJ1ZiA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIE1hdGgubWluKGJ1ZmZlci5sZW5ndGgsIG9mZnNldCArIHNpemUpKTtcbiAgICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgICAgIHZhcnMuc2V0KG5hbWUsIGJ1Zik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYuc2tpcCA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYnl0ZXMgPSB2YXJzLmdldChieXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLnNjYW4gPSBmdW5jdGlvbiAobmFtZSwgc2VhcmNoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc2VhcmNoID0gbmV3IEJ1ZmZlcihzZWFyY2gpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2VhcmNoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWFyY2ggbXVzdCBiZSBhIEJ1ZmZlciBvciBhIHN0cmluZycpO1xuICAgICAgICB9XG4gICAgICAgIHZhcnMuc2V0KG5hbWUsIG51bGwpO1xuICAgICAgICBcbiAgICAgICAgLy8gc2ltcGxlIGJ1dCBzbG93IHN0cmluZyBzZWFyY2hcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgKyBvZmZzZXQgPD0gYnVmZmVyLmxlbmd0aCAtIHNlYXJjaC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgdmFyIGogPSAwO1xuICAgICAgICAgICAgICAgIGogPCBzZWFyY2gubGVuZ3RoICYmIGJ1ZmZlcltvZmZzZXQraStqXSA9PT0gc2VhcmNoW2pdO1xuICAgICAgICAgICAgICAgIGorK1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChqID09PSBzZWFyY2gubGVuZ3RoKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFycy5zZXQobmFtZSwgYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgaSkpO1xuICAgICAgICBvZmZzZXQgKz0gaSArIHNlYXJjaC5sZW5ndGg7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5wZWVrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIHZhciB3YXMgPSBvZmZzZXQ7XG4gICAgICAgIGNiLmNhbGwoc2VsZiwgdmFycy5zdG9yZSk7XG4gICAgICAgIG9mZnNldCA9IHdhcztcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXJzLnN0b3JlID0ge307XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5lb2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvZmZzZXQgPj0gYnVmZmVyLmxlbmd0aDtcbiAgICB9O1xuICAgIFxuICAgIHJldHVybiBzZWxmO1xufTtcblxuLy8gY29udmVydCBieXRlIHN0cmluZ3MgdG8gdW5zaWduZWQgbGl0dGxlIGVuZGlhbiBudW1iZXJzXG5mdW5jdGlvbiBkZWNvZGVMRXUgKGJ5dGVzKSB7XG4gICAgdmFyIGFjYyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhY2MgKz0gTWF0aC5wb3coMjU2LGkpICogYnl0ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG59XG5cbi8vIGNvbnZlcnQgYnl0ZSBzdHJpbmdzIHRvIHVuc2lnbmVkIGJpZyBlbmRpYW4gbnVtYmVyc1xuZnVuY3Rpb24gZGVjb2RlQkV1IChieXRlcykge1xuICAgIHZhciBhY2MgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYWNjICs9IE1hdGgucG93KDI1NiwgYnl0ZXMubGVuZ3RoIC0gaSAtIDEpICogYnl0ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG59XG5cbi8vIGNvbnZlcnQgYnl0ZSBzdHJpbmdzIHRvIHNpZ25lZCBiaWcgZW5kaWFuIG51bWJlcnNcbmZ1bmN0aW9uIGRlY29kZUJFcyAoYnl0ZXMpIHtcbiAgICB2YXIgdmFsID0gZGVjb2RlQkV1KGJ5dGVzKTtcbiAgICBpZiAoKGJ5dGVzWzBdICYgMHg4MCkgPT0gMHg4MCkge1xuICAgICAgICB2YWwgLT0gTWF0aC5wb3coMjU2LCBieXRlcy5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuXG4vLyBjb252ZXJ0IGJ5dGUgc3RyaW5ncyB0byBzaWduZWQgbGl0dGxlIGVuZGlhbiBudW1iZXJzXG5mdW5jdGlvbiBkZWNvZGVMRXMgKGJ5dGVzKSB7XG4gICAgdmFyIHZhbCA9IGRlY29kZUxFdShieXRlcyk7XG4gICAgaWYgKChieXRlc1tieXRlcy5sZW5ndGggLSAxXSAmIDB4ODApID09IDB4ODApIHtcbiAgICAgICAgdmFsIC09IE1hdGgucG93KDI1NiwgYnl0ZXMubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gd29yZHMgKGRlY29kZSkge1xuICAgIHZhciBzZWxmID0ge307XG4gICAgXG4gICAgWyAxLCAyLCA0LCA4IF0uZm9yRWFjaChmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIGJpdHMgPSBieXRlcyAqIDg7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnbGUnXVxuICAgICAgICA9IHNlbGZbJ3dvcmQnICsgYml0cyArICdsdSddXG4gICAgICAgID0gZGVjb2RlKGJ5dGVzLCBkZWNvZGVMRXUpO1xuICAgICAgICBcbiAgICAgICAgc2VsZlsnd29yZCcgKyBiaXRzICsgJ2xzJ11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUxFcyk7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnYmUnXVxuICAgICAgICA9IHNlbGZbJ3dvcmQnICsgYml0cyArICdidSddXG4gICAgICAgID0gZGVjb2RlKGJ5dGVzLCBkZWNvZGVCRXUpO1xuICAgICAgICBcbiAgICAgICAgc2VsZlsnd29yZCcgKyBiaXRzICsgJ2JzJ11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUJFcyk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gd29yZDhiZShuKSA9PSB3b3JkOGxlKG4pIGZvciBhbGwgblxuICAgIHNlbGYud29yZDggPSBzZWxmLndvcmQ4dSA9IHNlbGYud29yZDhiZTtcbiAgICBzZWxmLndvcmQ4cyA9IHNlbGYud29yZDhicztcbiAgICBcbiAgICByZXR1cm4gc2VsZjtcbn1cbiIsCiAgICAidmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBNYXRjaGVyU3RyZWFtKHBhdHRlcm5EZXNjLCBtYXRjaEZuKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1hdGNoZXJTdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2hlclN0cmVhbSgpO1xuICAgIH1cblxuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHAgPSB0eXBlb2YgcGF0dGVybkRlc2MgPT09ICdvYmplY3QnID8gcGF0dGVybkRlc2MucGF0dGVybiA6IHBhdHRlcm5EZXNjO1xuXG4gICAgdGhpcy5wYXR0ZXJuID0gQnVmZmVyLmlzQnVmZmVyKHApID8gcCA6IEJ1ZmZlci5mcm9tKHApO1xuICAgIHRoaXMucmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhdHRlcm4ubGVuZ3RoO1xuICAgIGlmIChwYXR0ZXJuRGVzYy5yZXF1aXJlZEV4dHJhU2l6ZSkgdGhpcy5yZXF1aXJlZExlbmd0aCArPSBwYXR0ZXJuRGVzYy5yZXF1aXJlZEV4dHJhU2l6ZTtcblxuICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgIHRoaXMuYnl0ZXNTb0ZhciA9IDA7XG5cbiAgICB0aGlzLm1hdGNoRm4gPSBtYXRjaEZuO1xufVxuXG51dGlsLmluaGVyaXRzKE1hdGNoZXJTdHJlYW0sIFRyYW5zZm9ybSk7XG5cbk1hdGNoZXJTdHJlYW0ucHJvdG90eXBlLmNoZWNrRGF0YUNodW5rID0gZnVuY3Rpb24gKGlnbm9yZU1hdGNoWmVybykge1xuICAgIHZhciBlbm91Z2hEYXRhID0gdGhpcy5kYXRhLmxlbmd0aCA+PSB0aGlzLnJlcXVpcmVkTGVuZ3RoOyAvLyBzdHJpY3QgbW9yZSB0aGFuID9cbiAgICBpZiAoIWVub3VnaERhdGEpIHsgcmV0dXJuOyB9XG5cbiAgICB2YXIgbWF0Y2hJbmRleCA9IHRoaXMuZGF0YS5pbmRleE9mKHRoaXMucGF0dGVybiwgaWdub3JlTWF0Y2haZXJvID8gMSA6IDApO1xuICAgIGlmIChtYXRjaEluZGV4ID49IDAgJiYgbWF0Y2hJbmRleCArIHRoaXMucmVxdWlyZWRMZW5ndGggPiB0aGlzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtYXRjaEluZGV4ID4gMCkge1xuICAgICAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCBtYXRjaEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMucHVzaChwYWNrZXQpO1xuICAgICAgICAgICAgdGhpcy5ieXRlc1NvRmFyICs9IG1hdGNoSW5kZXg7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UobWF0Y2hJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtYXRjaEluZGV4ID09PSAtMSkge1xuICAgICAgICB2YXIgcGFja2V0TGVuID0gdGhpcy5kYXRhLmxlbmd0aCAtIHRoaXMucmVxdWlyZWRMZW5ndGggKyAxO1xuXG4gICAgICAgIHZhciBwYWNrZXQgPSB0aGlzLmRhdGEuc2xpY2UoMCwgcGFja2V0TGVuKTtcbiAgICAgICAgdGhpcy5wdXNoKHBhY2tldCk7XG4gICAgICAgIHRoaXMuYnl0ZXNTb0ZhciArPSBwYWNrZXRMZW47XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zbGljZShwYWNrZXRMZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZm91bmQgbWF0Y2hcbiAgICBpZiAobWF0Y2hJbmRleCA+IDApIHtcbiAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCBtYXRjaEluZGV4KTtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKG1hdGNoSW5kZXgpO1xuICAgICAgICB0aGlzLnB1c2gocGFja2V0KTtcbiAgICAgICAgdGhpcy5ieXRlc1NvRmFyICs9IG1hdGNoSW5kZXg7XG4gICAgfVxuXG4gICAgdmFyIGZpbmlzaGVkID0gdGhpcy5tYXRjaEZuID8gdGhpcy5tYXRjaEZuKHRoaXMuZGF0YSwgdGhpcy5ieXRlc1NvRmFyKSA6IHRydWU7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbk1hdGNoZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuZGF0YSwgY2h1bmtdKTtcblxuICAgIHZhciBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7XG4gICAgd2hpbGUgKHRoaXMuY2hlY2tEYXRhQ2h1bmsoIWZpcnN0SXRlcmF0aW9uKSkge1xuICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNiKCk7XG59XG5cbk1hdGNoZXJTdHJlYW0ucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChjYikge1xuICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgZmlyc3RJdGVyYXRpb24gPSB0cnVlO1xuICAgICAgICB3aGlsZSAodGhpcy5jaGVja0RhdGFDaHVuayghZmlyc3RJdGVyYXRpb24pKSB7XG4gICAgICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMucHVzaCh0aGlzLmRhdGEpO1xuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIGNiKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWF0Y2hlclN0cmVhbTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xuXG5mdW5jdGlvbiBFbnRyeSgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRW50cnkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRW50cnkoKTtcbiAgICB9XG5cbiAgICBzdHJlYW0uUGFzc1Rocm91Z2guY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IG51bGw7XG4gICAgdGhpcy50eXBlID0gbnVsbDtcbiAgICB0aGlzLmlzRGlyZWN0b3J5ID0gZmFsc2U7XG59XG5cbmluaGVyaXRzKEVudHJ5LCBzdHJlYW0uUGFzc1Rocm91Z2gpO1xuXG5FbnRyeS5wcm90b3R5cGUuYXV0b2RyYWluID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnBpcGUobmV3IHN0cmVhbS5UcmFuc2Zvcm0oeyB0cmFuc2Zvcm06IGZ1bmN0aW9uIChkLCBlLCBjYikgeyBjYigpOyB9IH0pKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFbnRyeTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmFyeSA9IHJlcXVpcmUoJ2JpbmFyeScpO1xudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcbnZhciBNYXRjaGVyU3RyZWFtID0gcmVxdWlyZSgnLi9tYXRjaGVyLXN0cmVhbScpO1xudmFyIEVudHJ5ID0gcmVxdWlyZSgnLi9lbnRyeScpO1xuXG5jb25zdCBzdGF0ZXMgPSB7XG4gICAgU1RSRUFNX1NUQVJUOiAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgIFNUQVJUOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICBMT0NBTF9GSUxFX0hFQURFUjogICAgICAgICAgICAgICAgICAgIDIsXG4gICAgTE9DQUxfRklMRV9IRUFERVJfU1VGRklYOiAgICAgICAgICAgICAzLFxuICAgIEZJTEVfREFUQTogICAgICAgICAgICAgICAgICAgICAgICAgICAgNCxcbiAgICBGSUxFX0RBVEFfRU5EOiAgICAgICAgICAgICAgICAgICAgICAgIDUsXG4gICAgREFUQV9ERVNDUklQVE9SOiAgICAgICAgICAgICAgICAgICAgICA2LFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOiAgICAgICAgNyxcbiAgICBDRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg6IDgsXG4gICAgQ0RJUjY0X0VORDogICAgICAgICAgICAgICAgICAgICAgICAgICA5LFxuICAgIENESVI2NF9FTkRfREFUQV9TRUNUT1I6ICAgICAgICAgICAgICAgMTAsXG4gICAgQ0RJUjY0X0xPQ0FUT1I6ICAgICAgICAgICAgICAgICAgICAgICAxMSxcbiAgICBDRU5UUkFMX0RJUkVDVE9SWV9FTkQ6ICAgICAgICAgICAgICAgIDEyLFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOiAgICAgICAgMTMsXG4gICAgVFJBSUxJTkdfSlVOSzogICAgICAgICAgICAgICAgICAgICAgICAxNCxcblxuICAgIEVSUk9SOiA5OVxufVxuXG5jb25zdCBGT1VSX0dJR1MgPSA0Mjk0OTY3Mjk2O1xuXG5jb25zdCBTSUdfTE9DQUxfRklMRV9IRUFERVIgID0gMHgwNDAzNGI1MDtcbmNvbnN0IFNJR19EQVRBX0RFU0NSSVBUT1IgICAgPSAweDA4MDc0YjUwO1xuY29uc3QgU0lHX0NESVJfUkVDT1JEICAgICAgICA9IDB4MDIwMTRiNTA7XG5jb25zdCBTSUdfQ0RJUjY0X1JFQ09SRF9FTkQgID0gMHgwNjA2NGI1MDtcbmNvbnN0IFNJR19DRElSNjRfTE9DQVRPUl9FTkQgPSAweDA3MDY0YjUwO1xuY29uc3QgU0lHX0NESVJfUkVDT1JEX0VORCAgICA9IDB4MDYwNTRiNTA7XG5cbmZ1bmN0aW9uIFVuemlwU3RyZWFtKG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVW56aXBTdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgVW56aXBTdHJlYW0ob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc3RyZWFtLlRyYW5zZm9ybS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLmRhdGEgPSBuZXcgQnVmZmVyKCcnKTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUUkVBTV9TVEFSVDtcbiAgICB0aGlzLnNraXBwZWRCeXRlcyA9IDA7XG4gICAgdGhpcy5wYXJzZWRFbnRpdHkgPSBudWxsO1xuICAgIHRoaXMub3V0U3RyZWFtSW5mbyA9IHt9O1xufVxuXG51dGlsLmluaGVyaXRzKFVuemlwU3RyZWFtLCBzdHJlYW0uVHJhbnNmb3JtKTtcblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLnByb2Nlc3NEYXRhQ2h1bmsgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICB2YXIgcmVxdWlyZWRMZW5ndGg7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgY2FzZSBzdGF0ZXMuU1RSRUFNX1NUQVJUOlxuICAgICAgICBjYXNlIHN0YXRlcy5TVEFSVDpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gMjY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhRmllbGRMZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuREFUQV9ERVNDUklQVE9SOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhRmllbGRMZW5ndGggKyB0aGlzLnBhcnNlZEVudGl0eS5maWxlQ29tbWVudExlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EX0RBVEFfU0VDVE9SOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5jZW50cmFsRGlyZWN0b3J5UmVjb3JkU2l6ZSAtIDQ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9MT0NBVE9SOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSAxNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDE4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5jb21tZW50TGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkZJTEVfREFUQTpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBjYXNlIHN0YXRlcy5GSUxFX0RBVEFfRU5EOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2Ugc3RhdGVzLlRSQUlMSU5HX0pVTks6XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSBjb25zb2xlLmxvZyhcImZvdW5kXCIsIGNodW5rLmxlbmd0aCwgXCJieXRlcyBvZiBUUkFJTElOR19KVU5LXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIGNodW5rTGVuZ3RoID0gY2h1bmsubGVuZ3RoO1xuICAgIGlmIChjaHVua0xlbmd0aCA8IHJlcXVpcmVkTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIHN0YXRlcy5TVFJFQU1fU1RBUlQ6XG4gICAgICAgIGNhc2Ugc3RhdGVzLlNUQVJUOlxuICAgICAgICAgICAgdmFyIHNpZ25hdHVyZSA9IGNodW5rLnJlYWRVSW50MzJMRSgwKTtcbiAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBTSUdfTE9DQUxfRklMRV9IRUFERVI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVJfUkVDT1JEOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFNJR19DRElSNjRfUkVDT1JEX0VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRElSNjRfRU5EO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFNJR19DRElSNjRfTE9DQVRPUl9FTkQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuQ0RJUjY0X0xPQ0FUT1I7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVJfUkVDT1JEX0VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1N0cmVhbVN0YXJ0ID0gdGhpcy5zdGF0ZSA9PT0gc3RhdGVzLlNUUkVBTV9TVEFSVDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N0cmVhbVN0YXJ0ICYmIChzaWduYXR1cmUgJiAweGZmZmYpICE9PSAweDRiNTAgJiYgdGhpcy5za2lwcGVkQnl0ZXMgPCAyNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UnbGwgYWxsb3cgYSBwYWRkaW5nIG9mIG1heCAyOCBieXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IHNpZ25hdHVyZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b1NraXAgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA0ICYmIHJlbWFpbmluZyAhPT0gMDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gcmVtYWluaW5nID4+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmVtYWluaW5nICYgMHhmZikgPT09IDB4NTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9Ta2lwID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5za2lwcGVkQnl0ZXMgKz0gdG9Ta2lwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1ZykgY29uc29sZS5sb2coJ1NraXBwZWQnLCB0aGlzLnNraXBwZWRCeXRlcywgJ2J5dGVzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9Ta2lwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuRVJST1I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJNc2cgPSBpc1N0cmVhbVN0YXJ0ID8gXCJOb3QgYSB2YWxpZCB6aXAgZmlsZVwiIDogXCJJbnZhbGlkIHNpZ25hdHVyZSBpbiB6aXAgZmlsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lnID0gY2h1bmsucmVhZFVJbnQzMkxFKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzU3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXNTdHJpbmcgPSBjaHVuay5zbGljZSgwLCA0KS50b1N0cmluZygpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJVbmV4cGVjdGVkIHNpZ25hdHVyZSBpbiB6aXAgZmlsZTogMHhcIiArIHNpZy50b1N0cmluZygxNiksICdcIicgKyBhc1N0cmluZyArICdcIiwgc2tpcHBlZCcsIHRoaXMuc2tpcHBlZEJ5dGVzLCAnYnl0ZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IoZXJyTXNnKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNraXBwZWRCeXRlcyA9IDA7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVI6XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eSA9IHRoaXMuX3JlYWRGaWxlKGNodW5rKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVJfU1VGRklYO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gbmV3IEVudHJ5KCk7XG4gICAgICAgICAgICB2YXIgaXNVdGY4ID0gKHRoaXMucGFyc2VkRW50aXR5LmZsYWdzICYgMHg4MDApICE9PSAwO1xuICAgICAgICAgICAgZW50cnkucGF0aCA9IHRoaXMuX2RlY29kZVN0cmluZyhjaHVuay5zbGljZSgwLCB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCksIGlzVXRmOCk7XG4gICAgICAgICAgICB2YXIgZXh0cmFEYXRhQnVmZmVyID0gY2h1bmsuc2xpY2UodGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGgsIHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aCk7XG4gICAgICAgICAgICB2YXIgZXh0cmEgPSB0aGlzLl9yZWFkRXh0cmFGaWVsZHMoZXh0cmFEYXRhQnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChleHRyYSAmJiBleHRyYS5wYXJzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEucGFyc2VkLnBhdGggJiYgIWlzVXRmOCkge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeS5wYXRoID0gZXh0cmEucGFyc2VkLnBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZXh0cmEucGFyc2VkLnVuY29tcHJlc3NlZFNpemUpICYmIHRoaXMucGFyc2VkRW50aXR5LnVuY29tcHJlc3NlZFNpemUgPT09IEZPVVJfR0lHUy0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LnVuY29tcHJlc3NlZFNpemUgPSBleHRyYS5wYXJzZWQudW5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShleHRyYS5wYXJzZWQuY29tcHJlc3NlZFNpemUpICYmIHRoaXMucGFyc2VkRW50aXR5LmNvbXByZXNzZWRTaXplID09PSBGT1VSX0dJR1MtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eS5jb21wcmVzc2VkU2l6ZSA9IGV4dHJhLnBhcnNlZC5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eS5leHRyYSA9IGV4dHJhLnBhcnNlZCB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnT2JqID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJzZWRFbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogZW50cnkucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3M6ICcweCcgKyB0aGlzLnBhcnNlZEVudGl0eS5mbGFncy50b1N0cmluZygxNiksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhRmllbGRzOiBleHRyYSAmJiBleHRyYS5kZWJ1Z1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBMT0NBTF9GSUxFX0hFQURFUjpcIiwgSlNPTi5zdHJpbmdpZnkoZGVidWdPYmosIG51bGwsIDIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVPdXRTdHJlYW0odGhpcy5wYXJzZWRFbnRpdHksIGVudHJ5KTtcblxuICAgICAgICAgICAgdGhpcy5lbWl0KFwiZW50cnlcIiwgZW50cnkpO1xuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkZJTEVfREFUQTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOlxuICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkgPSB0aGlzLl9yZWFkQ2VudHJhbERpcmVjdG9yeUVudHJ5KGNodW5rKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVJfU1VGRklYO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgLy8gZ290IGZpbGUgbmFtZSBpbiBjaHVua1swLi5dXG4gICAgICAgICAgICB2YXIgaXNVdGY4ID0gKHRoaXMucGFyc2VkRW50aXR5LmZsYWdzICYgMHg4MDApICE9PSAwO1xuICAgICAgICAgICAgdmFyIHBhdGggPSB0aGlzLl9kZWNvZGVTdHJpbmcoY2h1bmsuc2xpY2UoMCwgdGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGgpLCBpc1V0ZjgpO1xuICAgICAgICAgICAgdmFyIGV4dHJhRGF0YUJ1ZmZlciA9IGNodW5rLnNsaWNlKHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoLCB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhRmllbGRMZW5ndGgpO1xuICAgICAgICAgICAgdmFyIGV4dHJhID0gdGhpcy5fcmVhZEV4dHJhRmllbGRzKGV4dHJhRGF0YUJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoZXh0cmEgJiYgZXh0cmEucGFyc2VkICYmIGV4dHJhLnBhcnNlZC5wYXRoICYmICFpc1V0ZjgpIHtcbiAgICAgICAgICAgICAgICBwYXRoID0gZXh0cmEucGFyc2VkLnBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eS5leHRyYSA9IGV4dHJhLnBhcnNlZDtcblxuICAgICAgICAgICAgdmFyIGlzVW5peCA9ICgodGhpcy5wYXJzZWRFbnRpdHkudmVyc2lvbk1hZGVCeSAmIDB4ZmYwMCkgPj4gOCkgPT09IDM7XG4gICAgICAgICAgICB2YXIgdW5peEF0dHJzLCBpc1N5bWxpbms7XG4gICAgICAgICAgICBpZiAoaXNVbml4KSB7XG4gICAgICAgICAgICAgICAgdW5peEF0dHJzID0gdGhpcy5wYXJzZWRFbnRpdHkuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA+Pj4gMTY7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlID0gdW5peEF0dHJzID4+PiAxMjtcbiAgICAgICAgICAgICAgICBpc1N5bWxpbmsgPSAoZmlsZVR5cGUgJiAwbzEyKSA9PT0gMG8xMjsgLy8gX19TX0lGTE5LXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVidWdPYmogPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcnNlZEVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgICAgICAgICBmbGFnczogJzB4JyArIHRoaXMucGFyc2VkRW50aXR5LmZsYWdzLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICAgICAgICAgdW5peEF0dHJzOiB1bml4QXR0cnMgJiYgJzAnICsgdW5peEF0dHJzLnRvU3RyaW5nKDgpLFxuICAgICAgICAgICAgICAgICAgICBpc1N5bWxpbms6IGlzU3ltbGluayxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFGaWVsZHM6IGV4dHJhLmRlYnVnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBDRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUjpcIiwgSlNPTi5zdHJpbmdpZnkoZGVidWdPYmosIG51bGwsIDIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RBUlQ7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EOlxuICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkgPSB0aGlzLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5NjQoY2h1bmspO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBDRElSNjRfRU5EX1JFQ09SRDpcIiwgdGhpcy5wYXJzZWRFbnRpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRElSNjRfRU5EX0RBVEFfU0VDVE9SO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0RJUjY0X0VORF9EQVRBX1NFQ1RPUjpcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RBUlQ7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfTE9DQVRPUjpcbiAgICAgICAgICAgIC8vIGlnbm9yZSwgbm90aGluZyBpbnRlcmVzdGluZ1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5ID0gdGhpcy5fcmVhZEVuZE9mQ2VudHJhbERpcmVjdG9yeShjaHVuayk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENFTlRSQUxfRElSRUNUT1JZX0VORDpcIiwgdGhpcy5wYXJzZWRFbnRpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9FTkRfQ09NTUVOVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOlxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBDRU5UUkFMX0RJUkVDVE9SWV9FTkRfQ09NTUVOVDpcIiwgY2h1bmsuc2xpY2UoMCwgcmVxdWlyZWRMZW5ndGgpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5UUkFJTElOR19KVU5LO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuRVJST1I6XG4gICAgICAgICAgICByZXR1cm4gY2h1bmsubGVuZ3RoOyAvLyBkaXNjYXJkXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlkbid0IGhhbmRsZSBzdGF0ZSAjXCIsIHRoaXMuc3RhdGUsIFwiZGlzY2FyZGluZ1wiKTtcbiAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7XG4gICAgfVxufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3ByZXBhcmVPdXRTdHJlYW0gPSBmdW5jdGlvbiAodmFycywgZW50cnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgaXNEaXJlY3RvcnkgPSB2YXJzLnVuY29tcHJlc3NlZFNpemUgPT09IDAgJiYgL1tcXC9cXFxcXSQvLnRlc3QoZW50cnkucGF0aCk7XG4gICAgLy8gcHJvdGVjdCBhZ2FpbnN0IG1hbGljaW91cyB6aXAgZmlsZXMgd2hpY2ggd2FudCB0byBleHRyYWN0IHRvIHBhcmVudCBkaXJzXG4gICAgZW50cnkucGF0aCA9IGVudHJ5LnBhdGgucmVwbGFjZSgvKD88PV58Wy9cXFxcXSspWy5dWy5dKyg/PVsvXFxcXF0rfCQpL2csIFwiLlwiKTtcbiAgICBlbnRyeS50eXBlID0gaXNEaXJlY3RvcnkgPyAnRGlyZWN0b3J5JyA6ICdGaWxlJztcbiAgICBlbnRyeS5pc0RpcmVjdG9yeSA9IGlzRGlyZWN0b3J5O1xuXG4gICAgdmFyIGZpbGVTaXplS25vd24gPSAhKHZhcnMuZmxhZ3MgJiAweDA4KTtcbiAgICBpZiAoZmlsZVNpemVLbm93bikge1xuICAgICAgICBlbnRyeS5zaXplID0gdmFycy51bmNvbXByZXNzZWRTaXplO1xuICAgIH1cblxuICAgIHZhciBpc1ZlcnNpb25TdXBwb3J0ZWQgPSB2YXJzLnZlcnNpb25zTmVlZGVkVG9FeHRyYWN0IDw9IDQ1O1xuXG4gICAgdGhpcy5vdXRTdHJlYW1JbmZvID0ge1xuICAgICAgICBzdHJlYW06IG51bGwsXG4gICAgICAgIGxpbWl0OiBmaWxlU2l6ZUtub3duID8gdmFycy5jb21wcmVzc2VkU2l6ZSA6IC0xLFxuICAgICAgICB3cml0dGVuOiAwXG4gICAgfTtcblxuICAgIGlmICghZmlsZVNpemVLbm93bikge1xuICAgICAgICB2YXIgcGF0dGVybiA9IG5ldyBCdWZmZXIoNCk7XG4gICAgICAgIHBhdHRlcm4ud3JpdGVVSW50MzJMRShTSUdfREFUQV9ERVNDUklQVE9SLCAwKTtcbiAgICAgICAgdmFyIHppcDY0TW9kZSA9IHZhcnMuZXh0cmEuemlwNjRNb2RlO1xuICAgICAgICB2YXIgZXh0cmFTaXplID0gemlwNjRNb2RlID8gMjAgOiAxMjtcbiAgICAgICAgdmFyIHNlYXJjaFBhdHRlcm4gPSB7XG4gICAgICAgICAgICBwYXR0ZXJuOiBwYXR0ZXJuLFxuICAgICAgICAgICAgcmVxdWlyZWRFeHRyYVNpemU6IGV4dHJhU2l6ZVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1hdGNoZXJTdHJlYW0gPSBuZXcgTWF0Y2hlclN0cmVhbShzZWFyY2hQYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2hlZENodW5rLCBzaXplU29GYXIpIHtcbiAgICAgICAgICAgIHZhciB2YXJzID0gc2VsZi5fcmVhZERhdGFEZXNjcmlwdG9yKG1hdGNoZWRDaHVuaywgemlwNjRNb2RlKTtcblxuICAgICAgICAgICAgdmFyIGNvbXByZXNzZWRTaXplTWF0Y2hlcyA9IHZhcnMuY29tcHJlc3NlZFNpemUgPT09IHNpemVTb0ZhcjtcbiAgICAgICAgICAgIC8vIGxldCdzIGFsc28gZGVhbCB3aXRoIGFyY2hpdmVzIHdpdGggNEdpQisgZmlsZXMgd2l0aG91dCB6aXA2NFxuICAgICAgICAgICAgaWYgKCF6aXA2NE1vZGUgJiYgIWNvbXByZXNzZWRTaXplTWF0Y2hlcyAmJiBzaXplU29GYXIgPj0gRk9VUl9HSUdTKSB7XG4gICAgICAgICAgICAgICAgdmFyIG92ZXJmbG93biA9IHNpemVTb0ZhciAtIEZPVVJfR0lHUztcbiAgICAgICAgICAgICAgICB3aGlsZSAob3ZlcmZsb3duID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZFNpemVNYXRjaGVzID0gdmFycy5jb21wcmVzc2VkU2l6ZSA9PT0gb3ZlcmZsb3duO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHJlc3NlZFNpemVNYXRjaGVzKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3duIC09IEZPVVJfR0lHUztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvbXByZXNzZWRTaXplTWF0Y2hlcykgeyByZXR1cm47IH1cblxuICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlcy5GSUxFX0RBVEFfRU5EO1xuICAgICAgICAgICAgdmFyIHNsaWNlT2Zmc2V0ID0gemlwNjRNb2RlID8gMjQgOiAxNjtcbiAgICAgICAgICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGF0YSA9IEJ1ZmZlci5jb25jYXQoW21hdGNoZWRDaHVuay5zbGljZShzbGljZU9mZnNldCksIHNlbGYuZGF0YV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmRhdGEgPSBtYXRjaGVkQ2h1bmsuc2xpY2Uoc2xpY2VPZmZzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0gPSBtYXRjaGVyU3RyZWFtO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0gPSBuZXcgc3RyZWFtLlBhc3NUaHJvdWdoKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzRW5jcnlwdGVkID0gKHZhcnMuZmxhZ3MgJiAweDAxKSB8fCAodmFycy5mbGFncyAmIDB4NDApO1xuICAgIGlmIChpc0VuY3J5cHRlZCB8fCAhaXNWZXJzaW9uU3VwcG9ydGVkKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gaXNFbmNyeXB0ZWQgPyBcIkVuY3J5cHRlZCBmaWxlcyBhcmUgbm90IHN1cHBvcnRlZCFcIlxuICAgICAgICAgICAgOiAoXCJaaXAgdmVyc2lvbiBcIiArIE1hdGguZmxvb3IodmFycy52ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCAvIDEwKSArIFwiLlwiICsgdmFycy52ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCAlIDEwICsgXCIgaXMgbm90IHN1cHBvcnRlZFwiKTtcblxuICAgICAgICBlbnRyeS5za2lwID0gdHJ1ZTtcbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0cnkgdG8gc2tpcCBvdmVyIHRoaXMgZW50cnlcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbS5waXBlKG5ldyBFbnRyeSgpLmF1dG9kcmFpbigpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpc0NvbXByZXNzZWQgPSB2YXJzLmNvbXByZXNzaW9uTWV0aG9kID4gMDtcbiAgICBpZiAoaXNDb21wcmVzc2VkKSB7XG4gICAgICAgIHZhciBpbmZsYXRlciA9IHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpO1xuICAgICAgICBpbmZsYXRlci5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGVzLkVSUk9SO1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLnBpcGUoaW5mbGF0ZXIpLnBpcGUoZW50cnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0ucGlwZShlbnRyeSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RyYWluQWxsRW50cmllcykge1xuICAgICAgICBlbnRyeS5hdXRvZHJhaW4oKTtcbiAgICB9XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZEZpbGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkMTZsdSgndmVyc2lvbnNOZWVkZWRUb0V4dHJhY3QnKVxuICAgICAgICAud29yZDE2bHUoJ2ZsYWdzJylcbiAgICAgICAgLndvcmQxNmx1KCdjb21wcmVzc2lvbk1ldGhvZCcpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkVGltZScpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkRGF0ZScpXG4gICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAud29yZDMybHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQzMmx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQxNmx1KCdmaWxlTmFtZUxlbmd0aCcpXG4gICAgICAgIC53b3JkMTZsdSgnZXh0cmFGaWVsZExlbmd0aCcpXG4gICAgICAgIC52YXJzO1xuXG4gICAgcmV0dXJuIHZhcnM7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZEV4dHJhRmllbGRzID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgZXh0cmEgPSB7fTtcbiAgICB2YXIgcmVzdWx0ID0geyBwYXJzZWQ6IGV4dHJhIH07XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICByZXN1bHQuZGVidWcgPSBbXTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBkYXRhLmxlbmd0aCkge1xuICAgICAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAgICAgLnNraXAoaW5kZXgpXG4gICAgICAgICAgICAud29yZDE2bHUoJ2V4dHJhSWQnKVxuICAgICAgICAgICAgLndvcmQxNmx1KCdleHRyYVNpemUnKVxuICAgICAgICAgICAgLnZhcnM7XG5cbiAgICAgICAgaW5kZXggKz0gNDtcblxuICAgICAgICB2YXIgZmllbGRUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgICBzd2l0Y2ggKHZhcnMuZXh0cmFJZCkge1xuICAgICAgICAgICAgY2FzZSAweDAwMDE6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJaaXA2NCBleHRlbmRlZCBpbmZvcm1hdGlvbiBleHRyYSBmaWVsZFwiO1xuICAgICAgICAgICAgICAgIHZhciB6NjR2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEuc2xpY2UoaW5kZXgsIGluZGV4K3ZhcnMuZXh0cmFTaXplKSlcbiAgICAgICAgICAgICAgICAgICAgLndvcmQ2NGx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgICAgICAgICAgICAgLndvcmQ2NGx1KCdjb21wcmVzc2VkU2l6ZScpXG4gICAgICAgICAgICAgICAgICAgIC53b3JkNjRsdSgnb2Zmc2V0VG9Mb2NhbEhlYWRlcicpXG4gICAgICAgICAgICAgICAgICAgIC53b3JkMzJsdSgnZGlza1N0YXJ0TnVtYmVyJylcbiAgICAgICAgICAgICAgICAgICAgLnZhcnM7XG4gICAgICAgICAgICAgICAgaWYgKHo2NHZhcnMudW5jb21wcmVzc2VkU2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS51bmNvbXByZXNzZWRTaXplID0gejY0dmFycy51bmNvbXByZXNzZWRTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoejY0dmFycy5jb21wcmVzc2VkU2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5jb21wcmVzc2VkU2l6ZSA9IHo2NHZhcnMuY29tcHJlc3NlZFNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4dHJhLnppcDY0TW9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4MDAwYTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIk5URlMgZXh0cmEgZmllbGRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg1NDU1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiZXh0ZW5kZWQgdGltZXN0YW1wXCI7XG4gICAgICAgICAgICAgICAgdmFyIHRpbWVzdGFtcEZpZWxkcyA9IGRhdGEucmVhZFVJbnQ4KGluZGV4KTtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMTtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gb2Zmc2V0ICsgNCAmJiB0aW1lc3RhbXBGaWVsZHMgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLm10aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gb2Zmc2V0ICsgNCAmJiB0aW1lc3RhbXBGaWVsZHMgJiAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmF0aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gb2Zmc2V0ICsgNCAmJiB0aW1lc3RhbXBGaWVsZHMgJiA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmN0aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAweDcwNzU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJJbmZvLVpJUCBVbmljb2RlIFBhdGggRXh0cmEgRmllbGRcIjtcbiAgICAgICAgICAgICAgICB2YXIgZmllbGRWZXIgPSBkYXRhLnJlYWRVSW50OChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkVmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgYmUgY2hlY2tpbmcgdGhpcyBhZ2FpbnN0IG91ciBwYXRoIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUNyYzMyID0gZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGhCdWZmZXIgPSBkYXRhLnNsaWNlKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEucGF0aCA9IHBhdGhCdWZmZXIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4MDAwZDpcbiAgICAgICAgICAgIGNhc2UgMHg1ODU1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IHZhcnMuZXh0cmFJZCA9PT0gMHgwMDBkID8gXCJQS1dBUkUgVW5peFwiIDogXCJJbmZvLVpJUCBVTklYICh0eXBlIDEpXCI7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID49IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmF0aW1lID0gYXRpbWU7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLm10aW1lID0gbXRpbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID49IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS51aWQgPSB1aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5naWQgPSBnaWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4Nzg1NTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIkluZm8tWklQIFVOSVggKHR5cGUgMilcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gNCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdWlkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdpZCA9IGRhdGEucmVhZFVJbnQxNkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnVpZCA9IHVpZDtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuZ2lkID0gZ2lkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg3ODc1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiSW5mby1aSVAgTmV3IFVuaXhcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFWZXIgPSBkYXRhLnJlYWRVSW50OChpbmRleCk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhVmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1aWRTaXplID0gZGF0YS5yZWFkVUludDgoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVpZFNpemUgPD0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudWlkID0gZGF0YS5yZWFkVUludExFKGluZGV4ICsgb2Zmc2V0LCB1aWRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdWlkU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkU2l6ZSA9IGRhdGEucmVhZFVJbnQ4KGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnaWRTaXplIDw9IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmdpZCA9IGRhdGEucmVhZFVJbnRMRShpbmRleCArIG9mZnNldCwgZ2lkU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4NzU2ZTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIkFTaSBVbml4XCI7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID49IDE0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjcmMgPSBkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IGRhdGEucmVhZFVJbnQxNkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXpkZXYgPSBkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgdWlkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdpZCA9IGRhdGEucmVhZFVJbnQxNkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLm1vZGUgPSBtb2RlO1xuICAgICAgICAgICAgICAgICAgICBleHRyYS51aWQgPSB1aWQ7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmdpZCA9IGdpZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID4gMTQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGluZGV4ICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGluZGV4ICsgdmFycy5leHRyYVNpemUgLSAxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1saW5rTmFtZSA9IHRoaXMuX2RlY29kZVN0cmluZyhkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnN5bWxpbmsgPSBzeW1saW5rTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIHJlc3VsdC5kZWJ1Zy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHRyYUlkOiAnMHgnICsgdmFycy5leHRyYUlkLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZmllbGRUeXBlLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEuc2xpY2UoaW5kZXgsIGluZGV4ICsgdmFycy5leHRyYVNpemUpLmluc3BlY3QoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleCArPSB2YXJzLmV4dHJhU2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3JlYWREYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uIChkYXRhLCB6aXA2NE1vZGUpIHtcbiAgICBpZiAoemlwNjRNb2RlKSB7XG4gICAgICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgICAgICAud29yZDMybHUoJ2RhdGFEZXNjcmlwdG9yU2lnbmF0dXJlJylcbiAgICAgICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAgICAgLndvcmQ2NGx1KCdjb21wcmVzc2VkU2l6ZScpXG4gICAgICAgICAgICAud29yZDY0bHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAgICAgLnZhcnM7XG5cbiAgICAgICAgcmV0dXJuIHZhcnM7XG4gICAgfVxuXG4gICAgdmFyIHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YSlcbiAgICAgICAgLndvcmQzMmx1KCdkYXRhRGVzY3JpcHRvclNpZ25hdHVyZScpXG4gICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAud29yZDMybHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQzMmx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkQ2VudHJhbERpcmVjdG9yeUVudHJ5ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25NYWRlQnknKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25zTmVlZGVkVG9FeHRyYWN0JylcbiAgICAgICAgLndvcmQxNmx1KCdmbGFncycpXG4gICAgICAgIC53b3JkMTZsdSgnY29tcHJlc3Npb25NZXRob2QnKVxuICAgICAgICAud29yZDE2bHUoJ2xhc3RNb2RpZmllZFRpbWUnKVxuICAgICAgICAud29yZDE2bHUoJ2xhc3RNb2RpZmllZERhdGUnKVxuICAgICAgICAud29yZDMybHUoJ2NyYzMyJylcbiAgICAgICAgLndvcmQzMmx1KCdjb21wcmVzc2VkU2l6ZScpXG4gICAgICAgIC53b3JkMzJsdSgndW5jb21wcmVzc2VkU2l6ZScpXG4gICAgICAgIC53b3JkMTZsdSgnZmlsZU5hbWVMZW5ndGgnKVxuICAgICAgICAud29yZDE2bHUoJ2V4dHJhRmllbGRMZW5ndGgnKVxuICAgICAgICAud29yZDE2bHUoJ2ZpbGVDb21tZW50TGVuZ3RoJylcbiAgICAgICAgLndvcmQxNmx1KCdkaXNrTnVtYmVyJylcbiAgICAgICAgLndvcmQxNmx1KCdpbnRlcm5hbEZpbGVBdHRyaWJ1dGVzJylcbiAgICAgICAgLndvcmQzMmx1KCdleHRlcm5hbEZpbGVBdHRyaWJ1dGVzJylcbiAgICAgICAgLndvcmQzMmx1KCdvZmZzZXRUb0xvY2FsRmlsZUhlYWRlcicpXG4gICAgICAgIC52YXJzO1xuXG4gICAgcmV0dXJuIHZhcnM7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZEVuZE9mQ2VudHJhbERpcmVjdG9yeTY0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDY0bHUoJ2NlbnRyYWxEaXJlY3RvcnlSZWNvcmRTaXplJylcbiAgICAgICAgLndvcmQxNmx1KCd2ZXJzaW9uTWFkZUJ5JylcbiAgICAgICAgLndvcmQxNmx1KCd2ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCcpXG4gICAgICAgIC53b3JkMzJsdSgnZGlza051bWJlcicpXG4gICAgICAgIC53b3JkMzJsdSgnZGlza051bWJlcldpdGhDZW50cmFsRGlyZWN0b3J5U3RhcnQnKVxuICAgICAgICAud29yZDY0bHUoJ2NlbnRyYWxEaXJlY3RvcnlFbnRyaWVzJylcbiAgICAgICAgLndvcmQ2NGx1KCd0b3RhbENlbnRyYWxEaXJlY3RvcnlFbnRyaWVzJylcbiAgICAgICAgLndvcmQ2NGx1KCdzaXplT2ZDZW50cmFsRGlyZWN0b3J5JylcbiAgICAgICAgLndvcmQ2NGx1KCdvZmZzZXRUb1N0YXJ0T2ZDZW50cmFsRGlyZWN0b3J5JylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDE2bHUoJ2Rpc2tOdW1iZXInKVxuICAgICAgICAud29yZDE2bHUoJ2Rpc2tTdGFydCcpXG4gICAgICAgIC53b3JkMTZsdSgnY2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDE2bHUoJ3RvdGFsQ2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDMybHUoJ3NpemVPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAud29yZDMybHUoJ29mZnNldFRvU3RhcnRPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAud29yZDE2bHUoJ2NvbW1lbnRMZW5ndGgnKVxuICAgICAgICAudmFycztcblxuICAgIHJldHVybiB2YXJzO1xufVxuXG5jb25zdCBjcDQzNyA9ICdcXHUwMDAw4pi64pi74pml4pmm4pmj4pmg4oCi4peY4peL4peZ4pmC4pmA4pmq4pmr4pi84pa64peE4oaV4oC8wrbCp+KWrOKGqOKGkeKGk+KGkuKGkOKIn+KGlOKWsuKWvCAhXCIjJCUmXFwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+4oyCw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcwqLCo8Kl4oKnxpLDocOtw7PDusOxw5HCqsK6wr/ijJDCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoCAnO1xuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX2RlY29kZVN0cmluZyA9IGZ1bmN0aW9uIChidWZmZXIsIGlzVXRmOCkge1xuICAgIGlmIChpc1V0ZjgpIHtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygndXRmOCcpO1xuICAgIH1cbiAgICAvLyBhbGxvdyBwYXNzaW5nIGN1c3RvbSBkZWNvZGVyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWNvZGVTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kZWNvZGVTdHJpbmcoYnVmZmVyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaT0wOyBpPGJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgKz0gY3A0MzdbYnVmZmVyW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9wYXJzZU9yT3V0cHV0ID0gZnVuY3Rpb24gKGVuY29kaW5nLCBjYikge1xuICAgIHZhciBjb25zdW1lO1xuICAgIHdoaWxlICgoY29uc3VtZSA9IHRoaXMucHJvY2Vzc0RhdGFDaHVuayh0aGlzLmRhdGEpKSA+IDApIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKGNvbnN1bWUpO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IHN0YXRlcy5GSUxFX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMub3V0U3RyZWFtSW5mby5saW1pdCA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gdGhpcy5vdXRTdHJlYW1JbmZvLmxpbWl0IC0gdGhpcy5vdXRTdHJlYW1JbmZvLndyaXR0ZW47XG4gICAgICAgICAgICB2YXIgcGFja2V0O1xuICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA8IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwYWNrZXQgPSB0aGlzLmRhdGEuc2xpY2UoMCwgcmVtYWluaW5nKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UocmVtYWluaW5nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFja2V0ID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbiArPSBwYWNrZXQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3V0U3RyZWFtSW5mby5saW1pdCA9PT0gdGhpcy5vdXRTdHJlYW1JbmZvLndyaXR0ZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUQVJUO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbS5lbmQocGFja2V0LCBlbmNvZGluZywgY2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLndyaXRlKHBhY2tldCwgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwYWNrZXQgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQnVmZmVyKCcnKTtcblxuICAgICAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLndyaXR0ZW4gKz0gcGFja2V0Lmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBvdXRwdXRTdHJlYW0gPSB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtO1xuICAgICAgICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKHBhY2tldCwgZW5jb2RpbmcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gc3RhdGVzLkZJTEVfREFUQV9FTkQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dFN0cmVhbS5lbmQoY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UndmUgd3JpdHRlbiB0byB0aGUgb3V0cHV0IHN0cmVhbSwgbGV0dGluZyB0aGF0IHdyaXRlIGRlYWwgd2l0aCB0aGUgY2FsbGJhY2tcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNiKCk7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5kcmFpbkFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9kcmFpbkFsbEVudHJpZXMgPSB0cnVlO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWxmLmRhdGEgPSBCdWZmZXIuY29uY2F0KFtzZWxmLmRhdGEsIGNodW5rXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5kYXRhID0gY2h1bms7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0RGF0YUxlbmd0aCA9IHNlbGYuZGF0YS5sZW5ndGg7XG4gICAgdmFyIGRvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCAmJiBzZWxmLmRhdGEubGVuZ3RoIDwgc3RhcnREYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGFydERhdGFMZW5ndGggPSBzZWxmLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgc2VsZi5fcGFyc2VPck91dHB1dChlbmNvZGluZywgZG9uZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2IoKTtcbiAgICB9O1xuICAgIHNlbGYuX3BhcnNlT3JPdXRwdXQoZW5jb2RpbmcsIGRvbmUpO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWxmLl9wYXJzZU9yT3V0cHV0KCdidWZmZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXRhLmxlbmd0aCA+IDApIHJldHVybiBzZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkgeyBzZWxmLl9mbHVzaChjYik7IH0pO1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZWxmLnN0YXRlID09PSBzdGF0ZXMuRklMRV9EQVRBKSB7XG4gICAgICAgIC8vIHVoIG9oLCBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgICByZXR1cm4gY2IobmV3IEVycm9yKFwiU3RyZWFtIGZpbmlzaGVkIGluIGFuIGludmFsaWQgc3RhdGUsIHVuY29tcHJlc3Npb24gZmFpbGVkXCIpKTtcbiAgICB9XG5cbiAgICBzZXRJbW1lZGlhdGUoY2IpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVuemlwU3RyZWFtO1xuIiwKICAgICJ2YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgVW56aXBTdHJlYW0gPSByZXF1aXJlKCcuL3VuemlwLXN0cmVhbScpO1xuXG5mdW5jdGlvbiBQYXJzZXJTdHJlYW0ob3B0cykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXJzZXJTdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2VyU3RyZWFtKG9wdHMpO1xuICAgIH1cblxuICAgIHZhciB0cmFuc2Zvcm1PcHRzID0gb3B0cyB8fCB7fTtcbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCB7IHJlYWRhYmxlT2JqZWN0TW9kZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMub3B0cyA9IG9wdHMgfHwge307XG4gICAgdGhpcy51bnppcFN0cmVhbSA9IG5ldyBVbnppcFN0cmVhbSh0aGlzLm9wdHMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2VudHJ5JywgZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgc2VsZi5wdXNoKGVudHJ5KTtcbiAgICB9KTtcbiAgICB0aGlzLnVuemlwU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgfSk7XG59XG5cbnV0aWwuaW5oZXJpdHMoUGFyc2VyU3RyZWFtLCBUcmFuc2Zvcm0pO1xuXG5QYXJzZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgIHRoaXMudW56aXBTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYik7XG59XG5cblBhcnNlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudW56aXBTdHJlYW0uZW5kKGZ1bmN0aW9uKCkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkgeyBzZWxmLmVtaXQoJ2Nsb3NlJyk7IH0pO1xuICAgICAgICBjYigpO1xuICAgIH0pO1xufVxuXG5QYXJzZXJTdHJlYW0ucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXZlbnROYW1lLCBmbikge1xuICAgIGlmIChldmVudE5hbWUgPT09ICdlbnRyeScpIHtcbiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCAnZGF0YScsIGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIFRyYW5zZm9ybS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldmVudE5hbWUsIGZuKTtcbn1cblxuUGFyc2VyU3RyZWFtLnByb3RvdHlwZS5kcmFpbkFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnVuemlwU3RyZWFtLmRyYWluQWxsKCk7XG4gICAgcmV0dXJuIHRoaXMucGlwZShuZXcgVHJhbnNmb3JtKHsgb2JqZWN0TW9kZTogdHJ1ZSwgdHJhbnNmb3JtOiBmdW5jdGlvbiAoZCwgZSwgY2IpIHsgY2IoKTsgfSB9KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyU3RyZWFtO1xuIiwKICAgICJ2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgXzA3NzcgPSBwYXJzZUludCgnMDc3NycsIDgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1rZGlyUC5ta2RpcnAgPSBta2RpclAubWtkaXJQID0gbWtkaXJQO1xuXG5mdW5jdGlvbiBta2RpclAgKHAsIG9wdHMsIGYsIG1hZGUpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZiA9IG9wdHM7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdHMgPSB7IG1vZGU6IG9wdHMgfTtcbiAgICB9XG4gICAgXG4gICAgdmFyIG1vZGUgPSBvcHRzLm1vZGU7XG4gICAgdmFyIHhmcyA9IG9wdHMuZnMgfHwgZnM7XG4gICAgXG4gICAgaWYgKG1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtb2RlID0gXzA3NzdcbiAgICB9XG4gICAgaWYgKCFtYWRlKSBtYWRlID0gbnVsbDtcbiAgICBcbiAgICB2YXIgY2IgPSBmIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uICgpIHt9O1xuICAgIHAgPSBwYXRoLnJlc29sdmUocCk7XG4gICAgXG4gICAgeGZzLm1rZGlyKHAsIG1vZGUsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoIWVyKSB7XG4gICAgICAgICAgICBtYWRlID0gbWFkZSB8fCBwO1xuICAgICAgICAgICAgcmV0dXJuIGNiKG51bGwsIG1hZGUpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZXIuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnRU5PRU5UJzpcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAocGF0aC5kaXJuYW1lKHApID09PSBwKSByZXR1cm4gY2IoZXIpO1xuICAgICAgICAgICAgICAgIG1rZGlyUChwYXRoLmRpcm5hbWUocCksIG9wdHMsIGZ1bmN0aW9uIChlciwgbWFkZSkge1xuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyKSBjYihlciwgbWFkZSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgbWtkaXJQKHAsIG9wdHMsIGNiLCBtYWRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYW55IG90aGVyIGVycm9yLCBqdXN0IHNlZSBpZiB0aGVyZSdzIGEgZGlyXG4gICAgICAgICAgICAvLyB0aGVyZSBhbHJlYWR5LiAgSWYgc28sIHRoZW4gaG9vcmF5ISAgSWYgbm90LCB0aGVuIHNvbWV0aGluZ1xuICAgICAgICAgICAgLy8gaXMgYm9ya2VkLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB4ZnMuc3RhdChwLCBmdW5jdGlvbiAoZXIyLCBzdGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzdGF0IGZhaWxzLCB0aGVuIHRoYXQncyBzdXBlciB3ZWlyZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHRoZSBvcmlnaW5hbCBlcnJvciBiZSB0aGUgZmFpbHVyZSByZWFzb24uXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcjIgfHwgIXN0YXQuaXNEaXJlY3RvcnkoKSkgY2IoZXIsIG1hZGUpXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY2IobnVsbCwgbWFkZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxubWtkaXJQLnN5bmMgPSBmdW5jdGlvbiBzeW5jIChwLCBvcHRzLCBtYWRlKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBvcHRzID0geyBtb2RlOiBvcHRzIH07XG4gICAgfVxuICAgIFxuICAgIHZhciBtb2RlID0gb3B0cy5tb2RlO1xuICAgIHZhciB4ZnMgPSBvcHRzLmZzIHx8IGZzO1xuICAgIFxuICAgIGlmIChtb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbW9kZSA9IF8wNzc3XG4gICAgfVxuICAgIGlmICghbWFkZSkgbWFkZSA9IG51bGw7XG5cbiAgICBwID0gcGF0aC5yZXNvbHZlKHApO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgeGZzLm1rZGlyU3luYyhwLCBtb2RlKTtcbiAgICAgICAgbWFkZSA9IG1hZGUgfHwgcDtcbiAgICB9XG4gICAgY2F0Y2ggKGVycjApIHtcbiAgICAgICAgc3dpdGNoIChlcnIwLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0VOT0VOVCcgOlxuICAgICAgICAgICAgICAgIG1hZGUgPSBzeW5jKHBhdGguZGlybmFtZShwKSwgb3B0cywgbWFkZSk7XG4gICAgICAgICAgICAgICAgc3luYyhwLCBvcHRzLCBtYWRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYW55IG90aGVyIGVycm9yLCBqdXN0IHNlZSBpZiB0aGVyZSdzIGEgZGlyXG4gICAgICAgICAgICAvLyB0aGVyZSBhbHJlYWR5LiAgSWYgc28sIHRoZW4gaG9vcmF5ISAgSWYgbm90LCB0aGVuIHNvbWV0aGluZ1xuICAgICAgICAgICAgLy8gaXMgYm9ya2VkLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB2YXIgc3RhdDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ID0geGZzLnN0YXRTeW5jKHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyMSkgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8ge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnIwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoIXN0YXQuaXNEaXJlY3RvcnkoKSkgdGhyb3cgZXJyMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYWRlO1xufTtcbiIsCiAgICAidmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgbWtkaXJwID0gcmVxdWlyZSgnbWtkaXJwJyk7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtO1xudmFyIFVuemlwU3RyZWFtID0gcmVxdWlyZSgnLi91bnppcC1zdHJlYW0nKTtcblxuZnVuY3Rpb24gRXh0cmFjdCAob3B0cykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFeHRyYWN0KSlcbiAgICByZXR1cm4gbmV3IEV4dHJhY3Qob3B0cyk7XG5cbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMub3B0cyA9IG9wdHMgfHwge307XG4gICAgdGhpcy51bnppcFN0cmVhbSA9IG5ldyBVbnppcFN0cmVhbSh0aGlzLm9wdHMpO1xuICAgIHRoaXMudW5maW5pc2hlZEVudHJpZXMgPSAwO1xuICAgIHRoaXMuYWZ0ZXJGbHVzaFdhaXQgPSBmYWxzZTtcbiAgICB0aGlzLmNyZWF0ZWREaXJlY3RvcmllcyA9IHt9O1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2VudHJ5JywgdGhpcy5fcHJvY2Vzc0VudHJ5LmJpbmQodGhpcykpO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9KTtcbn1cblxudXRpbC5pbmhlcml0cyhFeHRyYWN0LCBUcmFuc2Zvcm0pO1xuXG5FeHRyYWN0LnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICB0aGlzLnVuemlwU3RyZWFtLndyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpO1xufVxuXG5FeHRyYWN0LnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgYWxsRG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkgeyBzZWxmLmVtaXQoJ2Nsb3NlJyk7IH0pO1xuICAgICAgICBjYigpO1xuICAgIH1cblxuICAgIHRoaXMudW56aXBTdHJlYW0uZW5kKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoc2VsZi51bmZpbmlzaGVkRW50cmllcyA+IDApIHtcbiAgICAgICAgICAgIHNlbGYuYWZ0ZXJGbHVzaFdhaXQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYub24oJ2F3YWl0LWZpbmlzaGVkJywgYWxsRG9uZSk7XG4gICAgICAgIH1cbiAgICAgICAgYWxsRG9uZSgpO1xuICAgIH0pO1xufVxuXG5FeHRyYWN0LnByb3RvdHlwZS5fcHJvY2Vzc0VudHJ5ID0gZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBkZXN0UGF0aCA9IHBhdGguam9pbih0aGlzLm9wdHMucGF0aCwgZW50cnkucGF0aCk7XG4gICAgdmFyIGRpcmVjdG9yeSA9IGVudHJ5LmlzRGlyZWN0b3J5ID8gZGVzdFBhdGggOiBwYXRoLmRpcm5hbWUoZGVzdFBhdGgpO1xuXG4gICAgdGhpcy51bmZpbmlzaGVkRW50cmllcysrO1xuXG4gICAgdmFyIHdyaXRlRmlsZUZuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwaXBlZFN0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRlc3RQYXRoKTtcblxuICAgICAgICBwaXBlZFN0cmVhbS5vbignY2xvc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGYudW5maW5pc2hlZEVudHJpZXMtLTtcbiAgICAgICAgICAgIHNlbGYuX25vdGlmeUF3YWl0ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBpcGVkU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVudHJ5LnBpcGUocGlwZWRTdHJlYW0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNyZWF0ZWREaXJlY3Rvcmllc1tkaXJlY3RvcnldIHx8IGRpcmVjdG9yeSA9PT0gJy4nKSB7XG4gICAgICAgIHJldHVybiB3cml0ZUZpbGVGbigpO1xuICAgIH1cblxuICAgIC8vIEZJWE1FOiBjYWxscyB0byBta2RpcnAgY2FuIHN0aWxsIGJlIGR1cGxpY2F0ZWRcbiAgICBta2RpcnAoZGlyZWN0b3J5LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuXG4gICAgICAgIHNlbGYuY3JlYXRlZERpcmVjdG9yaWVzW2RpcmVjdG9yeV0gPSB0cnVlO1xuXG4gICAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSkge1xuICAgICAgICAgICAgc2VsZi51bmZpbmlzaGVkRW50cmllcy0tO1xuICAgICAgICAgICAgc2VsZi5fbm90aWZ5QXdhaXRlcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgd3JpdGVGaWxlRm4oKTtcbiAgICB9KTtcbn1cblxuRXh0cmFjdC5wcm90b3R5cGUuX25vdGlmeUF3YWl0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5hZnRlckZsdXNoV2FpdCAmJiB0aGlzLnVuZmluaXNoZWRFbnRyaWVzID09PSAwKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnYXdhaXQtZmluaXNoZWQnKTtcbiAgICAgICAgdGhpcy5hZnRlckZsdXNoV2FpdCA9IGZhbHNlO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFeHRyYWN0OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLlBhcnNlID0gcmVxdWlyZSgnLi9saWIvcGFyc2VyLXN0cmVhbScpO1xuZXhwb3J0cy5FeHRyYWN0ID0gcmVxdWlyZSgnLi9saWIvZXh0cmFjdCcpOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kb3dubG9hZEFydGlmYWN0SW50ZXJuYWwgPSBleHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RQdWJsaWMgPSBleHBvcnRzLnN0cmVhbUV4dHJhY3RFeHRlcm5hbCA9IHZvaWQgMDtcbmNvbnN0IHByb21pc2VzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImZzL3Byb21pc2VzXCIpKTtcbmNvbnN0IGdpdGh1YiA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViXCIpKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgaHR0cENsaWVudCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIikpO1xuY29uc3QgdW56aXBfc3RyZWFtXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInVuemlwLXN0cmVhbVwiKSk7XG5jb25zdCB1c2VyX2FnZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3VzZXItYWdlbnRcIik7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvY29uZmlnXCIpO1xuY29uc3QgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5jb25zdCBzY3J1YlF1ZXJ5UGFyYW1ldGVycyA9ICh1cmwpID0+IHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgcGFyc2VkLnNlYXJjaCA9ICcnO1xuICAgIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn07XG5mdW5jdGlvbiBleGlzdHMocGF0aCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5aWVsZCBwcm9taXNlc18xLmRlZmF1bHQuYWNjZXNzKHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc3RyZWFtRXh0cmFjdCh1cmwsIGRpcmVjdG9yeSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgICAgd2hpbGUgKHJldHJ5Q291bnQgPCA1KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHN0cmVhbUV4dHJhY3RFeHRlcm5hbCh1cmwsIGRpcmVjdG9yeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICAgICAgICAgIGNvcmUuZGVidWcoYEZhaWxlZCB0byBkb3dubG9hZCBhcnRpZmFjdCBhZnRlciAke3JldHJ5Q291bnR9IHJldHJpZXMgZHVlIHRvICR7ZXJyb3IubWVzc2FnZX0uIFJldHJ5aW5nIGluIDUgc2Vjb25kcy4uLmApO1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgNSBzZWNvbmRzIGJlZm9yZSByZXRyeWluZ1xuICAgICAgICAgICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCA1MDAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnRpZmFjdCBkb3dubG9hZCBmYWlsZWQgYWZ0ZXIgJHtyZXRyeUNvdW50fSByZXRyaWVzLmApO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gc3RyZWFtRXh0cmFjdEV4dGVybmFsKHVybCwgZGlyZWN0b3J5KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IGh0dHBDbGllbnQuSHR0cENsaWVudCgoMCwgdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFN0cmluZykoKSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgY2xpZW50LmdldCh1cmwpO1xuICAgICAgICBpZiAocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBIVFRQIHJlc3BvbnNlIGZyb20gYmxvYiBzdG9yYWdlOiAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZX0gJHtyZXNwb25zZS5tZXNzYWdlLnN0YXR1c01lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZW91dCA9IDMwICogMTAwMDsgLy8gMzAgc2Vjb25kc1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGltZXJGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlLmRlc3Ryb3kobmV3IEVycm9yKGBCbG9iIHN0b3JhZ2UgY2h1bmsgZGlkIG5vdCByZXNwb25kIGluICR7dGltZW91dH1tc2ApKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQodGltZXJGbiwgdGltZW91dCk7XG4gICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgLm9uKCdkYXRhJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRpbWVyLnJlZnJlc2goKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvcmUuZGVidWcoYHJlc3BvbnNlLm1lc3NhZ2U6IEFydGlmYWN0IGRvd25sb2FkIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUodW56aXBfc3RyZWFtXzEuZGVmYXVsdC5FeHRyYWN0KHsgcGF0aDogZGlyZWN0b3J5IH0pKVxuICAgICAgICAgICAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zdHJlYW1FeHRyYWN0RXh0ZXJuYWwgPSBzdHJlYW1FeHRyYWN0RXh0ZXJuYWw7XG5mdW5jdGlvbiBkb3dubG9hZEFydGlmYWN0UHVibGljKGFydGlmYWN0SWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRQYXRoID0geWllbGQgcmVzb2x2ZU9yQ3JlYXRlRGlyZWN0b3J5KG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wYXRoKTtcbiAgICAgICAgY29uc3QgYXBpID0gZ2l0aHViLmdldE9jdG9raXQodG9rZW4pO1xuICAgICAgICBjb3JlLmluZm8oYERvd25sb2FkaW5nIGFydGlmYWN0ICcke2FydGlmYWN0SWR9JyBmcm9tICcke3JlcG9zaXRvcnlPd25lcn0vJHtyZXBvc2l0b3J5TmFtZX0nYCk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycywgc3RhdHVzIH0gPSB5aWVsZCBhcGkucmVzdC5hY3Rpb25zLmRvd25sb2FkQXJ0aWZhY3Qoe1xuICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgYXJ0aWZhY3RfaWQ6IGFydGlmYWN0SWQsXG4gICAgICAgICAgICBhcmNoaXZlX2Zvcm1hdDogJ3ppcCcsXG4gICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3Q6ICdtYW51YWwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc3RhdHVzICE9PSAzMDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIGFydGlmYWN0LiBVbmV4cGVjdGVkIHN0YXR1czogJHtzdGF0dXN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsb2NhdGlvbiB9ID0gaGVhZGVycztcbiAgICAgICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVkaXJlY3QgdG8gYXJ0aWZhY3QgZG93bmxvYWQgdXJsYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29yZS5pbmZvKGBSZWRpcmVjdGluZyB0byBibG9iIGRvd25sb2FkIHVybDogJHtzY3J1YlF1ZXJ5UGFyYW1ldGVycyhsb2NhdGlvbil9YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb3JlLmluZm8oYFN0YXJ0aW5nIGRvd25sb2FkIG9mIGFydGlmYWN0IHRvOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgICAgIHlpZWxkIHN0cmVhbUV4dHJhY3QobG9jYXRpb24sIGRvd25sb2FkUGF0aCk7XG4gICAgICAgICAgICBjb3JlLmluZm8oYEFydGlmYWN0IGRvd25sb2FkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkb3dubG9hZCBhbmQgZXh0cmFjdCBhcnRpZmFjdDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvd25sb2FkUGF0aCB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5kb3dubG9hZEFydGlmYWN0UHVibGljID0gZG93bmxvYWRBcnRpZmFjdFB1YmxpYztcbmZ1bmN0aW9uIGRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbChhcnRpZmFjdElkLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRQYXRoID0geWllbGQgcmVzb2x2ZU9yQ3JlYXRlRGlyZWN0b3J5KG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wYXRoKTtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCBsaXN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIGlkRmlsdGVyOiBnZW5lcmF0ZWRfMS5JbnQ2NFZhbHVlLmNyZWF0ZSh7IHZhbHVlOiBhcnRpZmFjdElkLnRvU3RyaW5nKCkgfSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBhcnRpZmFjdHMgfSA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMobGlzdFJlcSk7XG4gICAgICAgIGlmIChhcnRpZmFjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXJ0aWZhY3ROb3RGb3VuZEVycm9yKGBObyBhcnRpZmFjdHMgZm91bmQgZm9yIElEOiAke2FydGlmYWN0SWR9XFxuQXJlIHlvdSB0cnlpbmcgdG8gZG93bmxvYWQgZnJvbSBhIGRpZmZlcmVudCBydW4/IFRyeSBzcGVjaWZ5aW5nIGEgZ2l0aHViLXRva2VuIHdpdGggXFxgYWN0aW9uczpyZWFkXFxgIHNjb3BlLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnRpZmFjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29yZS53YXJuaW5nKCdNdWx0aXBsZSBhcnRpZmFjdHMgZm91bmQsIGRlZmF1bHRpbmcgdG8gZmlyc3QuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmVkUmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGFydGlmYWN0c1swXS53b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBhcnRpZmFjdHNbMF0ud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICBuYW1lOiBhcnRpZmFjdHNbMF0ubmFtZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHNpZ25lZFVybCB9ID0geWllbGQgYXJ0aWZhY3RDbGllbnQuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoc2lnbmVkUmVxKTtcbiAgICAgICAgY29yZS5pbmZvKGBSZWRpcmVjdGluZyB0byBibG9iIGRvd25sb2FkIHVybDogJHtzY3J1YlF1ZXJ5UGFyYW1ldGVycyhzaWduZWRVcmwpfWApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29yZS5pbmZvKGBTdGFydGluZyBkb3dubG9hZCBvZiBhcnRpZmFjdCB0bzogJHtkb3dubG9hZFBhdGh9YCk7XG4gICAgICAgICAgICB5aWVsZCBzdHJlYW1FeHRyYWN0KHNpZ25lZFVybCwgZG93bmxvYWRQYXRoKTtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgQXJ0aWZhY3QgZG93bmxvYWQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIGFuZCBleHRyYWN0IGFydGlmYWN0OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG93bmxvYWRQYXRoIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbCA9IGRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbDtcbmZ1bmN0aW9uIHJlc29sdmVPckNyZWF0ZURpcmVjdG9yeShkb3dubG9hZFBhdGggPSAoMCwgY29uZmlnXzEuZ2V0R2l0SHViV29ya3NwYWNlRGlyKSgpKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCEoeWllbGQgZXhpc3RzKGRvd25sb2FkUGF0aCkpKSB7XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBBcnRpZmFjdCBkZXN0aW5hdGlvbiBmb2xkZXIgZG9lcyBub3QgZXhpc3QsIGNyZWF0aW5nOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgICAgIHlpZWxkIHByb21pc2VzXzEuZGVmYXVsdC5ta2Rpcihkb3dubG9hZFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29yZS5kZWJ1ZyhgQXJ0aWZhY3QgZGVzdGluYXRpb24gZm9sZGVyIGFscmVhZHkgZXhpc3RzOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG93bmxvYWRQYXRoO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZG93bmxvYWQtYXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSZXRyeU9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbi8vIERlZmF1bHRzIGZvciBmZXRjaGluZyBhcnRpZmFjdHNcbmNvbnN0IGRlZmF1bHRNYXhSZXRyeU51bWJlciA9IDU7XG5jb25zdCBkZWZhdWx0RXhlbXB0U3RhdHVzQ29kZXMgPSBbNDAwLCA0MDEsIDQwMywgNDA0LCA0MjJdOyAvLyBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9wbHVnaW4tcmV0cnkuanMvYmxvYi85YTI0NDM3NDZjMzUwYjNiZWVkZWMzNWNmMjZlMTk3ZWEzMThhMjYxL3NyYy9pbmRleC50cyNMMTRcbmZ1bmN0aW9uIGdldFJldHJ5T3B0aW9ucyhkZWZhdWx0T3B0aW9ucywgcmV0cmllcyA9IGRlZmF1bHRNYXhSZXRyeU51bWJlciwgZXhlbXB0U3RhdHVzQ29kZXMgPSBkZWZhdWx0RXhlbXB0U3RhdHVzQ29kZXMpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHJldHJpZXMgPD0gMCkge1xuICAgICAgICByZXR1cm4gW3sgZW5hYmxlZDogZmFsc2UgfSwgZGVmYXVsdE9wdGlvbnMucmVxdWVzdF07XG4gICAgfVxuICAgIGNvbnN0IHJldHJ5T3B0aW9ucyA9IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgIH07XG4gICAgaWYgKGV4ZW1wdFN0YXR1c0NvZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0cnlPcHRpb25zLmRvTm90UmV0cnkgPSBleGVtcHRTdGF0dXNDb2RlcztcbiAgICB9XG4gICAgLy8gVGhlIEdpdEh1YiB0eXBlIGhhcyBzb21lIGRlZmF1bHRzIGZvciBgb3B0aW9ucy5yZXF1ZXN0YFxuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iLzRmYmM1Yzk0MWE1NzI0OWIxOTU2MjAxNWVkYmQ3MmFkZDE0YmU5M2QvcGFja2FnZXMvZ2l0aHViL3NyYy91dGlscy50cyNMMTVcbiAgICAvLyBXZSBwYXNzIHRoZXNlIGluIGhlcmUgc28gdGhleSBhcmUgbm90IG92ZXJyaWRkZW4uXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLnJlcXVlc3QpLCB7IHJldHJpZXMgfSk7XG4gICAgY29yZS5kZWJ1ZyhgR2l0SHViIGNsaWVudCBjb25maWd1cmVkIHdpdGg6IChyZXRyaWVzOiAke3JlcXVlc3RPcHRpb25zLnJldHJpZXN9LCByZXRyeS1leGVtcHQtc3RhdHVzLWNvZGU6ICR7KF9hID0gcmV0cnlPcHRpb25zLmRvTm90UmV0cnkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdvY3Rva2l0IGRlZmF1bHQ6IFs0MDAsIDQwMSwgNDAzLCA0MDQsIDQyMl0nfSlgKTtcbiAgICByZXR1cm4gW3JldHJ5T3B0aW9ucywgcmVxdWVzdE9wdGlvbnNdO1xufVxuZXhwb3J0cy5nZXRSZXRyeU9wdGlvbnMgPSBnZXRSZXRyeU9wdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeS1vcHRpb25zLmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBWRVJTSU9OID0gXCIxLjAuNFwiO1xuXG4vKipcbiAqIEBwYXJhbSBvY3Rva2l0IE9jdG9raXQgaW5zdGFuY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgcGFzc2VkIHRvIE9jdG9raXQgY29uc3RydWN0b3JcbiAqL1xuXG5mdW5jdGlvbiByZXF1ZXN0TG9nKG9jdG9raXQpIHtcbiAgb2N0b2tpdC5ob29rLndyYXAoXCJyZXF1ZXN0XCIsIChyZXF1ZXN0LCBvcHRpb25zKSA9PiB7XG4gICAgb2N0b2tpdC5sb2cuZGVidWcoXCJyZXF1ZXN0XCIsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludC5wYXJzZShvcHRpb25zKTtcbiAgICBjb25zdCBwYXRoID0gcmVxdWVzdE9wdGlvbnMudXJsLnJlcGxhY2Uob3B0aW9ucy5iYXNlVXJsLCBcIlwiKTtcbiAgICByZXR1cm4gcmVxdWVzdChvcHRpb25zKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIG9jdG9raXQubG9nLmluZm8oYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtyZXNwb25zZS5zdGF0dXN9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhgJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cGF0aH0gLSAke2Vycm9yLnN0YXR1c30gaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbnJlcXVlc3RMb2cuVkVSU0lPTiA9IFZFUlNJT047XG5cbmV4cG9ydHMucmVxdWVzdExvZyA9IHJlcXVlc3RMb2c7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiLyoqXG4gICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBCb3R0bGVuZWNrIGxpYnJhcnkgKE1JVCksIGNvbXBpbGVkIHRvIEVTMjAxNywgYW5kIHdpdGhvdXQgQ2x1c3RlcmluZyBzdXBwb3J0LlxuICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9TR3JvbmRpbi9ib3R0bGVuZWNrXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG5cdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG5cdChnbG9iYWwuQm90dGxlbmVjayA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuXHR2YXIgY29tbW9uanNHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fTtcblxuXHRmdW5jdGlvbiBnZXRDanNFeHBvcnRGcm9tTmFtZXNwYWNlIChuKSB7XG5cdFx0cmV0dXJuIG4gJiYgblsnZGVmYXVsdCddIHx8IG47XG5cdH1cblxuXHR2YXIgbG9hZCA9IGZ1bmN0aW9uKHJlY2VpdmVkLCBkZWZhdWx0cywgb250byA9IHt9KSB7XG5cdCAgdmFyIGssIHJlZiwgdjtcblx0ICBmb3IgKGsgaW4gZGVmYXVsdHMpIHtcblx0ICAgIHYgPSBkZWZhdWx0c1trXTtcblx0ICAgIG9udG9ba10gPSAocmVmID0gcmVjZWl2ZWRba10pICE9IG51bGwgPyByZWYgOiB2O1xuXHQgIH1cblx0ICByZXR1cm4gb250bztcblx0fTtcblxuXHR2YXIgb3ZlcndyaXRlID0gZnVuY3Rpb24ocmVjZWl2ZWQsIGRlZmF1bHRzLCBvbnRvID0ge30pIHtcblx0ICB2YXIgaywgdjtcblx0ICBmb3IgKGsgaW4gcmVjZWl2ZWQpIHtcblx0ICAgIHYgPSByZWNlaXZlZFtrXTtcblx0ICAgIGlmIChkZWZhdWx0c1trXSAhPT0gdm9pZCAwKSB7XG5cdCAgICAgIG9udG9ba10gPSB2O1xuXHQgICAgfVxuXHQgIH1cblx0ICByZXR1cm4gb250bztcblx0fTtcblxuXHR2YXIgcGFyc2VyID0ge1xuXHRcdGxvYWQ6IGxvYWQsXG5cdFx0b3ZlcndyaXRlOiBvdmVyd3JpdGVcblx0fTtcblxuXHR2YXIgRExMaXN0O1xuXG5cdERMTGlzdCA9IGNsYXNzIERMTGlzdCB7XG5cdCAgY29uc3RydWN0b3IoaW5jciwgZGVjcikge1xuXHQgICAgdGhpcy5pbmNyID0gaW5jcjtcblx0ICAgIHRoaXMuZGVjciA9IGRlY3I7XG5cdCAgICB0aGlzLl9maXJzdCA9IG51bGw7XG5cdCAgICB0aGlzLl9sYXN0ID0gbnVsbDtcblx0ICAgIHRoaXMubGVuZ3RoID0gMDtcblx0ICB9XG5cblx0ICBwdXNoKHZhbHVlKSB7XG5cdCAgICB2YXIgbm9kZTtcblx0ICAgIHRoaXMubGVuZ3RoKys7XG5cdCAgICBpZiAodHlwZW9mIHRoaXMuaW5jciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgIHRoaXMuaW5jcigpO1xuXHQgICAgfVxuXHQgICAgbm9kZSA9IHtcblx0ICAgICAgdmFsdWUsXG5cdCAgICAgIHByZXY6IHRoaXMuX2xhc3QsXG5cdCAgICAgIG5leHQ6IG51bGxcblx0ICAgIH07XG5cdCAgICBpZiAodGhpcy5fbGFzdCAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuX2xhc3QubmV4dCA9IG5vZGU7XG5cdCAgICAgIHRoaXMuX2xhc3QgPSBub2RlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fZmlyc3QgPSB0aGlzLl9sYXN0ID0gbm9kZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiB2b2lkIDA7XG5cdCAgfVxuXG5cdCAgc2hpZnQoKSB7XG5cdCAgICB2YXIgdmFsdWU7XG5cdCAgICBpZiAodGhpcy5fZmlyc3QgPT0gbnVsbCkge1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLmxlbmd0aC0tO1xuXHQgICAgICBpZiAodHlwZW9mIHRoaXMuZGVjciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgdGhpcy5kZWNyKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHZhbHVlID0gdGhpcy5fZmlyc3QudmFsdWU7XG5cdCAgICBpZiAoKHRoaXMuX2ZpcnN0ID0gdGhpcy5fZmlyc3QubmV4dCkgIT0gbnVsbCkge1xuXHQgICAgICB0aGlzLl9maXJzdC5wcmV2ID0gbnVsbDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2xhc3QgPSBudWxsO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZhbHVlO1xuXHQgIH1cblxuXHQgIGZpcnN0KCkge1xuXHQgICAgaWYgKHRoaXMuX2ZpcnN0ICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2ZpcnN0LnZhbHVlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGdldEFycmF5KCkge1xuXHQgICAgdmFyIG5vZGUsIHJlZiwgcmVzdWx0cztcblx0ICAgIG5vZGUgPSB0aGlzLl9maXJzdDtcblx0ICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcblx0ICAgICAgcmVzdWx0cy5wdXNoKChyZWYgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0LCByZWYudmFsdWUpKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiByZXN1bHRzO1xuXHQgIH1cblxuXHQgIGZvckVhY2hTaGlmdChjYikge1xuXHQgICAgdmFyIG5vZGU7XG5cdCAgICBub2RlID0gdGhpcy5zaGlmdCgpO1xuXHQgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuXHQgICAgICAoY2Iobm9kZSksIG5vZGUgPSB0aGlzLnNoaWZ0KCkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZvaWQgMDtcblx0ICB9XG5cblx0ICBkZWJ1ZygpIHtcblx0ICAgIHZhciBub2RlLCByZWYsIHJlZjEsIHJlZjIsIHJlc3VsdHM7XG5cdCAgICBub2RlID0gdGhpcy5fZmlyc3Q7XG5cdCAgICByZXN1bHRzID0gW107XG5cdCAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG5cdCAgICAgIHJlc3VsdHMucHVzaCgocmVmID0gbm9kZSwgbm9kZSA9IG5vZGUubmV4dCwge1xuXHQgICAgICAgIHZhbHVlOiByZWYudmFsdWUsXG5cdCAgICAgICAgcHJldjogKHJlZjEgPSByZWYucHJldikgIT0gbnVsbCA/IHJlZjEudmFsdWUgOiB2b2lkIDAsXG5cdCAgICAgICAgbmV4dDogKHJlZjIgPSByZWYubmV4dCkgIT0gbnVsbCA/IHJlZjIudmFsdWUgOiB2b2lkIDBcblx0ICAgICAgfSkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgfVxuXG5cdH07XG5cblx0dmFyIERMTGlzdF8xID0gRExMaXN0O1xuXG5cdHZhciBFdmVudHM7XG5cblx0RXZlbnRzID0gY2xhc3MgRXZlbnRzIHtcblx0ICBjb25zdHJ1Y3RvcihpbnN0YW5jZSkge1xuXHQgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuXHQgICAgdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICBpZiAoKHRoaXMuaW5zdGFuY2Uub24gIT0gbnVsbCkgfHwgKHRoaXMuaW5zdGFuY2Uub25jZSAhPSBudWxsKSB8fCAodGhpcy5pbnN0YW5jZS5yZW1vdmVBbGxMaXN0ZW5lcnMgIT0gbnVsbCkpIHtcblx0ICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gRW1pdHRlciBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBvYmplY3RcIik7XG5cdCAgICB9XG5cdCAgICB0aGlzLmluc3RhbmNlLm9uID0gKG5hbWUsIGNiKSA9PiB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcihuYW1lLCBcIm1hbnlcIiwgY2IpO1xuXHQgICAgfTtcblx0ICAgIHRoaXMuaW5zdGFuY2Uub25jZSA9IChuYW1lLCBjYikgPT4ge1xuXHQgICAgICByZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIobmFtZSwgXCJvbmNlXCIsIGNiKTtcblx0ICAgIH07XG5cdCAgICB0aGlzLmluc3RhbmNlLnJlbW92ZUFsbExpc3RlbmVycyA9IChuYW1lID0gbnVsbCkgPT4ge1xuXHQgICAgICBpZiAobmFtZSAhPSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuIGRlbGV0ZSB0aGlzLl9ldmVudHNbbmFtZV07XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHQgICAgICB9XG5cdCAgICB9O1xuXHQgIH1cblxuXHQgIF9hZGRMaXN0ZW5lcihuYW1lLCBzdGF0dXMsIGNiKSB7XG5cdCAgICB2YXIgYmFzZTtcblx0ICAgIGlmICgoYmFzZSA9IHRoaXMuX2V2ZW50cylbbmFtZV0gPT0gbnVsbCkge1xuXHQgICAgICBiYXNlW25hbWVdID0gW107XG5cdCAgICB9XG5cdCAgICB0aGlzLl9ldmVudHNbbmFtZV0ucHVzaCh7Y2IsIHN0YXR1c30pO1xuXHQgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG5cdCAgfVxuXG5cdCAgbGlzdGVuZXJDb3VudChuYW1lKSB7XG5cdCAgICBpZiAodGhpcy5fZXZlbnRzW25hbWVdICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1tuYW1lXS5sZW5ndGg7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBhc3luYyB0cmlnZ2VyKG5hbWUsIC4uLmFyZ3MpIHtcblx0ICAgIHZhciBlLCBwcm9taXNlcztcblx0ICAgIHRyeSB7XG5cdCAgICAgIGlmIChuYW1lICE9PSBcImRlYnVnXCIpIHtcblx0ICAgICAgICB0aGlzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRXZlbnQgdHJpZ2dlcmVkOiAke25hbWV9YCwgYXJncyk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHRoaXMuX2V2ZW50c1tuYW1lXSA9PSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuX2V2ZW50c1tuYW1lXSA9IHRoaXMuX2V2ZW50c1tuYW1lXS5maWx0ZXIoZnVuY3Rpb24obGlzdGVuZXIpIHtcblx0ICAgICAgICByZXR1cm4gbGlzdGVuZXIuc3RhdHVzICE9PSBcIm5vbmVcIjtcblx0ICAgICAgfSk7XG5cdCAgICAgIHByb21pc2VzID0gdGhpcy5fZXZlbnRzW25hbWVdLm1hcChhc3luYyhsaXN0ZW5lcikgPT4ge1xuXHQgICAgICAgIHZhciBlLCByZXR1cm5lZDtcblx0ICAgICAgICBpZiAobGlzdGVuZXIuc3RhdHVzID09PSBcIm5vbmVcIikge1xuXHQgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAobGlzdGVuZXIuc3RhdHVzID09PSBcIm9uY2VcIikge1xuXHQgICAgICAgICAgbGlzdGVuZXIuc3RhdHVzID0gXCJub25lXCI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICByZXR1cm5lZCA9IHR5cGVvZiBsaXN0ZW5lci5jYiA9PT0gXCJmdW5jdGlvblwiID8gbGlzdGVuZXIuY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgICAgICBpZiAodHlwZW9mIChyZXR1cm5lZCAhPSBudWxsID8gcmV0dXJuZWQudGhlbiA6IHZvaWQgMCkgPT09IFwiZnVuY3Rpb25cIikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGF3YWl0IHJldHVybmVkKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiByZXR1cm5lZDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICAgICAgZSA9IGVycm9yO1xuXHQgICAgICAgICAge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJlcnJvclwiLCBlKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHJldHVybiAoKGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKSkpLmZpbmQoZnVuY3Rpb24oeCkge1xuXHQgICAgICAgIHJldHVybiB4ICE9IG51bGw7XG5cdCAgICAgIH0pO1xuXHQgICAgfSBjYXRjaCAoZXJyb3IpIHtcblx0ICAgICAgZSA9IGVycm9yO1xuXHQgICAgICB7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9XG5cdCAgfVxuXG5cdH07XG5cblx0dmFyIEV2ZW50c18xID0gRXZlbnRzO1xuXG5cdHZhciBETExpc3QkMSwgRXZlbnRzJDEsIFF1ZXVlcztcblxuXHRETExpc3QkMSA9IERMTGlzdF8xO1xuXG5cdEV2ZW50cyQxID0gRXZlbnRzXzE7XG5cblx0UXVldWVzID0gY2xhc3MgUXVldWVzIHtcblx0ICBjb25zdHJ1Y3RvcihudW1fcHJpb3JpdGllcykge1xuXHQgICAgdmFyIGk7XG5cdCAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMSh0aGlzKTtcblx0ICAgIHRoaXMuX2xlbmd0aCA9IDA7XG5cdCAgICB0aGlzLl9saXN0cyA9IChmdW5jdGlvbigpIHtcblx0ICAgICAgdmFyIGosIHJlZiwgcmVzdWx0cztcblx0ICAgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgICBmb3IgKGkgPSBqID0gMSwgcmVmID0gbnVtX3ByaW9yaXRpZXM7ICgxIDw9IHJlZiA/IGogPD0gcmVmIDogaiA+PSByZWYpOyBpID0gMSA8PSByZWYgPyArK2ogOiAtLWopIHtcblx0ICAgICAgICByZXN1bHRzLnB1c2gobmV3IERMTGlzdCQxKCgoKSA9PiB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5pbmNyKCk7XG5cdCAgICAgICAgfSksICgoKSA9PiB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyKCk7XG5cdCAgICAgICAgfSkpKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH0pLmNhbGwodGhpcyk7XG5cdCAgfVxuXG5cdCAgaW5jcigpIHtcblx0ICAgIGlmICh0aGlzLl9sZW5ndGgrKyA9PT0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImxlZnR6ZXJvXCIpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGRlY3IoKSB7XG5cdCAgICBpZiAoLS10aGlzLl9sZW5ndGggPT09IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJ6ZXJvXCIpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHB1c2goam9iKSB7XG5cdCAgICByZXR1cm4gdGhpcy5fbGlzdHNbam9iLm9wdGlvbnMucHJpb3JpdHldLnB1c2goam9iKTtcblx0ICB9XG5cblx0ICBxdWV1ZWQocHJpb3JpdHkpIHtcblx0ICAgIGlmIChwcmlvcml0eSAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9saXN0c1twcmlvcml0eV0ubGVuZ3RoO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzaGlmdEFsbChmbikge1xuXHQgICAgcmV0dXJuIHRoaXMuX2xpc3RzLmZvckVhY2goZnVuY3Rpb24obGlzdCkge1xuXHQgICAgICByZXR1cm4gbGlzdC5mb3JFYWNoU2hpZnQoZm4pO1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgZ2V0Rmlyc3QoYXJyID0gdGhpcy5fbGlzdHMpIHtcblx0ICAgIHZhciBqLCBsZW4sIGxpc3Q7XG5cdCAgICBmb3IgKGogPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcblx0ICAgICAgbGlzdCA9IGFycltqXTtcblx0ICAgICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xuXHQgICAgICAgIHJldHVybiBsaXN0O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICByZXR1cm4gW107XG5cdCAgfVxuXG5cdCAgc2hpZnRMYXN0RnJvbShwcmlvcml0eSkge1xuXHQgICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3QodGhpcy5fbGlzdHMuc2xpY2UocHJpb3JpdHkpLnJldmVyc2UoKSkuc2hpZnQoKTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgUXVldWVzXzEgPSBRdWV1ZXM7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvcjtcblxuXHRCb3R0bGVuZWNrRXJyb3IgPSBjbGFzcyBCb3R0bGVuZWNrRXJyb3IgZXh0ZW5kcyBFcnJvciB7fTtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yXzEgPSBCb3R0bGVuZWNrRXJyb3I7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQxLCBERUZBVUxUX1BSSU9SSVRZLCBKb2IsIE5VTV9QUklPUklUSUVTLCBwYXJzZXIkMTtcblxuXHROVU1fUFJJT1JJVElFUyA9IDEwO1xuXG5cdERFRkFVTFRfUFJJT1JJVFkgPSA1O1xuXG5cdHBhcnNlciQxID0gcGFyc2VyO1xuXG5cdEJvdHRsZW5lY2tFcnJvciQxID0gQm90dGxlbmVja0Vycm9yXzE7XG5cblx0Sm9iID0gY2xhc3MgSm9iIHtcblx0ICBjb25zdHJ1Y3Rvcih0YXNrLCBhcmdzLCBvcHRpb25zLCBqb2JEZWZhdWx0cywgcmVqZWN0T25Ecm9wLCBFdmVudHMsIF9zdGF0ZXMsIFByb21pc2UpIHtcblx0ICAgIHRoaXMudGFzayA9IHRhc2s7XG5cdCAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuXHQgICAgdGhpcy5yZWplY3RPbkRyb3AgPSByZWplY3RPbkRyb3A7XG5cdCAgICB0aGlzLkV2ZW50cyA9IEV2ZW50cztcblx0ICAgIHRoaXMuX3N0YXRlcyA9IF9zdGF0ZXM7XG5cdCAgICB0aGlzLlByb21pc2UgPSBQcm9taXNlO1xuXHQgICAgdGhpcy5vcHRpb25zID0gcGFyc2VyJDEubG9hZChvcHRpb25zLCBqb2JEZWZhdWx0cyk7XG5cdCAgICB0aGlzLm9wdGlvbnMucHJpb3JpdHkgPSB0aGlzLl9zYW5pdGl6ZVByaW9yaXR5KHRoaXMub3B0aW9ucy5wcmlvcml0eSk7XG5cdCAgICBpZiAodGhpcy5vcHRpb25zLmlkID09PSBqb2JEZWZhdWx0cy5pZCkge1xuXHQgICAgICB0aGlzLm9wdGlvbnMuaWQgPSBgJHt0aGlzLm9wdGlvbnMuaWR9LSR7dGhpcy5fcmFuZG9tSW5kZXgoKX1gO1xuXHQgICAgfVxuXHQgICAgdGhpcy5wcm9taXNlID0gbmV3IHRoaXMuUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcblx0ICAgICAgdGhpcy5fcmVzb2x2ZSA9IF9yZXNvbHZlO1xuXHQgICAgICB0aGlzLl9yZWplY3QgPSBfcmVqZWN0O1xuXHQgICAgfSk7XG5cdCAgICB0aGlzLnJldHJ5Q291bnQgPSAwO1xuXHQgIH1cblxuXHQgIF9zYW5pdGl6ZVByaW9yaXR5KHByaW9yaXR5KSB7XG5cdCAgICB2YXIgc1Byb3BlcnR5O1xuXHQgICAgc1Byb3BlcnR5ID0gfn5wcmlvcml0eSAhPT0gcHJpb3JpdHkgPyBERUZBVUxUX1BSSU9SSVRZIDogcHJpb3JpdHk7XG5cdCAgICBpZiAoc1Byb3BlcnR5IDwgMCkge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH0gZWxzZSBpZiAoc1Byb3BlcnR5ID4gTlVNX1BSSU9SSVRJRVMgLSAxKSB7XG5cdCAgICAgIHJldHVybiBOVU1fUFJJT1JJVElFUyAtIDE7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gc1Byb3BlcnR5O1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIF9yYW5kb21JbmRleCgpIHtcblx0ICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcblx0ICB9XG5cblx0ICBkb0Ryb3Aoe2Vycm9yLCBtZXNzYWdlID0gXCJUaGlzIGpvYiBoYXMgYmVlbiBkcm9wcGVkIGJ5IEJvdHRsZW5lY2tcIn0gPSB7fSkge1xuXHQgICAgaWYgKHRoaXMuX3N0YXRlcy5yZW1vdmUodGhpcy5vcHRpb25zLmlkKSkge1xuXHQgICAgICBpZiAodGhpcy5yZWplY3RPbkRyb3ApIHtcblx0ICAgICAgICB0aGlzLl9yZWplY3QoZXJyb3IgIT0gbnVsbCA/IGVycm9yIDogbmV3IEJvdHRsZW5lY2tFcnJvciQxKG1lc3NhZ2UpKTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZHJvcHBlZFwiLCB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHRhc2s6IHRoaXMudGFzaywgcHJvbWlzZTogdGhpcy5wcm9taXNlfSk7XG5cdCAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIF9hc3NlcnRTdGF0dXMoZXhwZWN0ZWQpIHtcblx0ICAgIHZhciBzdGF0dXM7XG5cdCAgICBzdGF0dXMgPSB0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICBpZiAoIShzdGF0dXMgPT09IGV4cGVjdGVkIHx8IChleHBlY3RlZCA9PT0gXCJET05FXCIgJiYgc3RhdHVzID09PSBudWxsKSkpIHtcblx0ICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQxKGBJbnZhbGlkIGpvYiBzdGF0dXMgJHtzdGF0dXN9LCBleHBlY3RlZCAke2V4cGVjdGVkfS4gUGxlYXNlIG9wZW4gYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2svaXNzdWVzYCk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9SZWNlaXZlKCkge1xuXHQgICAgdGhpcy5fc3RhdGVzLnN0YXJ0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInJlY2VpdmVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9uc30pO1xuXHQgIH1cblxuXHQgIGRvUXVldWUocmVhY2hlZEhXTSwgYmxvY2tlZCkge1xuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUkVDRUlWRURcIik7XG5cdCAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJxdWV1ZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zLCByZWFjaGVkSFdNLCBibG9ja2VkfSk7XG5cdCAgfVxuXG5cdCAgZG9SdW4oKSB7XG5cdCAgICBpZiAodGhpcy5yZXRyeUNvdW50ID09PSAwKSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIlFVRVVFRFwiKTtcblx0ICAgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwic2NoZWR1bGVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9uc30pO1xuXHQgIH1cblxuXHQgIGFzeW5jIGRvRXhlY3V0ZShjaGFpbmVkLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpIHtcblx0ICAgIHZhciBlcnJvciwgZXZlbnRJbmZvLCBwYXNzZWQ7XG5cdCAgICBpZiAodGhpcy5yZXRyeUNvdW50ID09PSAwKSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIlJVTk5JTkdcIik7XG5cdCAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJFWEVDVVRJTkdcIik7XG5cdCAgICB9XG5cdCAgICBldmVudEluZm8gPSB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJldHJ5Q291bnQ6IHRoaXMucmV0cnlDb3VudH07XG5cdCAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXhlY3V0aW5nXCIsIGV2ZW50SW5mbyk7XG5cdCAgICB0cnkge1xuXHQgICAgICBwYXNzZWQgPSAoYXdhaXQgKGNoYWluZWQgIT0gbnVsbCA/IGNoYWluZWQuc2NoZWR1bGUodGhpcy5vcHRpb25zLCB0aGlzLnRhc2ssIC4uLnRoaXMuYXJncykgOiB0aGlzLnRhc2soLi4udGhpcy5hcmdzKSkpO1xuXHQgICAgICBpZiAoY2xlYXJHbG9iYWxTdGF0ZSgpKSB7XG5cdCAgICAgICAgdGhpcy5kb0RvbmUoZXZlbnRJbmZvKTtcblx0ICAgICAgICBhd2FpdCBmcmVlKHRoaXMub3B0aW9ucywgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJET05FXCIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlKHBhc3NlZCk7XG5cdCAgICAgIH1cblx0ICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuXHQgICAgICBlcnJvciA9IGVycm9yMTtcblx0ICAgICAgcmV0dXJuIHRoaXMuX29uRmFpbHVyZShlcnJvciwgZXZlbnRJbmZvLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGRvRXhwaXJlKGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIGVycm9yLCBldmVudEluZm87XG5cdCAgICBpZiAodGhpcy5fc3RhdGVzLmpvYlN0YXR1cyh0aGlzLm9wdGlvbnMuaWQgPT09IFwiUlVOTklOR1wiKSkge1xuXHQgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgfVxuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgZXZlbnRJbmZvID0ge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zLCByZXRyeUNvdW50OiB0aGlzLnJldHJ5Q291bnR9O1xuXHQgICAgZXJyb3IgPSBuZXcgQm90dGxlbmVja0Vycm9yJDEoYFRoaXMgam9iIHRpbWVkIG91dCBhZnRlciAke3RoaXMub3B0aW9ucy5leHBpcmF0aW9ufSBtcy5gKTtcblx0ICAgIHJldHVybiB0aGlzLl9vbkZhaWx1cmUoZXJyb3IsIGV2ZW50SW5mbywgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICB9XG5cblx0ICBhc3luYyBfb25GYWlsdXJlKGVycm9yLCBldmVudEluZm8sIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIHJldHJ5LCByZXRyeUFmdGVyO1xuXHQgICAgaWYgKGNsZWFyR2xvYmFsU3RhdGUoKSkge1xuXHQgICAgICByZXRyeSA9IChhd2FpdCB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZmFpbGVkXCIsIGVycm9yLCBldmVudEluZm8pKTtcblx0ICAgICAgaWYgKHJldHJ5ICE9IG51bGwpIHtcblx0ICAgICAgICByZXRyeUFmdGVyID0gfn5yZXRyeTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwicmV0cnlcIiwgYFJldHJ5aW5nICR7dGhpcy5vcHRpb25zLmlkfSBhZnRlciAke3JldHJ5QWZ0ZXJ9IG1zYCwgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLnJldHJ5Q291bnQrKztcblx0ICAgICAgICByZXR1cm4gcnVuKHJldHJ5QWZ0ZXIpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuZG9Eb25lKGV2ZW50SW5mbyk7XG5cdCAgICAgICAgYXdhaXQgZnJlZSh0aGlzLm9wdGlvbnMsIGV2ZW50SW5mbyk7XG5cdCAgICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRE9ORVwiKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fcmVqZWN0KGVycm9yKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIGRvRG9uZShldmVudEluZm8pIHtcblx0ICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImRvbmVcIiwgZXZlbnRJbmZvKTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgSm9iXzEgPSBKb2I7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQyLCBMb2NhbERhdGFzdG9yZSwgcGFyc2VyJDI7XG5cblx0cGFyc2VyJDIgPSBwYXJzZXI7XG5cblx0Qm90dGxlbmVja0Vycm9yJDIgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRMb2NhbERhdGFzdG9yZSA9IGNsYXNzIExvY2FsRGF0YXN0b3JlIHtcblx0ICBjb25zdHJ1Y3RvcihpbnN0YW5jZSwgc3RvcmVPcHRpb25zLCBzdG9yZUluc3RhbmNlT3B0aW9ucykge1xuXHQgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuXHQgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSBzdG9yZU9wdGlvbnM7XG5cdCAgICB0aGlzLmNsaWVudElkID0gdGhpcy5pbnN0YW5jZS5fcmFuZG9tSW5kZXgoKTtcblx0ICAgIHBhcnNlciQyLmxvYWQoc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zLCB0aGlzKTtcblx0ICAgIHRoaXMuX25leHRSZXF1ZXN0ID0gdGhpcy5fbGFzdFJlc2Vydm9pclJlZnJlc2ggPSB0aGlzLl9sYXN0UmVzZXJ2b2lySW5jcmVhc2UgPSBEYXRlLm5vdygpO1xuXHQgICAgdGhpcy5fcnVubmluZyA9IDA7XG5cdCAgICB0aGlzLl9kb25lID0gMDtcblx0ICAgIHRoaXMuX3VuYmxvY2tUaW1lID0gMDtcblx0ICAgIHRoaXMucmVhZHkgPSB0aGlzLlByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgdGhpcy5jbGllbnRzID0ge307XG5cdCAgICB0aGlzLl9zdGFydEhlYXJ0YmVhdCgpO1xuXHQgIH1cblxuXHQgIF9zdGFydEhlYXJ0YmVhdCgpIHtcblx0ICAgIHZhciBiYXNlO1xuXHQgICAgaWYgKCh0aGlzLmhlYXJ0YmVhdCA9PSBudWxsKSAmJiAoKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwgIT0gbnVsbCkgJiYgKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hBbW91bnQgIT0gbnVsbCkpIHx8ICgodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lySW5jcmVhc2VJbnRlcnZhbCAhPSBudWxsKSAmJiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lySW5jcmVhc2VBbW91bnQgIT0gbnVsbCkpKSkge1xuXHQgICAgICByZXR1cm4gdHlwZW9mIChiYXNlID0gKHRoaXMuaGVhcnRiZWF0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHQgICAgICAgIHZhciBhbW91bnQsIGluY3IsIG1heGltdW0sIG5vdywgcmVzZXJ2b2lyO1xuXHQgICAgICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICAgICAgaWYgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwgIT0gbnVsbCkgJiYgbm93ID49IHRoaXMuX2xhc3RSZXNlcnZvaXJSZWZyZXNoICsgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEludGVydmFsKSB7XG5cdCAgICAgICAgICB0aGlzLl9sYXN0UmVzZXJ2b2lyUmVmcmVzaCA9IG5vdztcblx0ICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pciA9IHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hBbW91bnQ7XG5cdCAgICAgICAgICB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsICE9IG51bGwpICYmIG5vdyA+PSB0aGlzLl9sYXN0UmVzZXJ2b2lySW5jcmVhc2UgKyB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsKSB7XG5cdCAgICAgICAgICAoe1xuXHQgICAgICAgICAgICByZXNlcnZvaXJJbmNyZWFzZUFtb3VudDogYW1vdW50LFxuXHQgICAgICAgICAgICByZXNlcnZvaXJJbmNyZWFzZU1heGltdW06IG1heGltdW0sXG5cdCAgICAgICAgICAgIHJlc2Vydm9pclxuXHQgICAgICAgICAgfSA9IHRoaXMuc3RvcmVPcHRpb25zKTtcblx0ICAgICAgICAgIHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSA9IG5vdztcblx0ICAgICAgICAgIGluY3IgPSBtYXhpbXVtICE9IG51bGwgPyBNYXRoLm1pbihhbW91bnQsIG1heGltdW0gLSByZXNlcnZvaXIpIDogYW1vdW50O1xuXHQgICAgICAgICAgaWYgKGluY3IgPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pciArPSBpbmNyO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9LCB0aGlzLmhlYXJ0YmVhdEludGVydmFsKSkpLnVucmVmID09PSBcImZ1bmN0aW9uXCIgPyBiYXNlLnVucmVmKCkgOiB2b2lkIDA7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0YmVhdCk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19wdWJsaXNoX18obWVzc2FnZSkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLmluc3RhbmNlLkV2ZW50cy50cmlnZ2VyKFwibWVzc2FnZVwiLCBtZXNzYWdlLnRvU3RyaW5nKCkpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZGlzY29ubmVjdF9fKGZsdXNoKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0YmVhdCk7XG5cdCAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUoKTtcblx0ICB9XG5cblx0ICB5aWVsZExvb3AodCA9IDApIHtcblx0ICAgIHJldHVybiBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHQgICAgICByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0KTtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIGNvbXB1dGVQZW5hbHR5KCkge1xuXHQgICAgdmFyIHJlZjtcblx0ICAgIHJldHVybiAocmVmID0gdGhpcy5zdG9yZU9wdGlvbnMucGVuYWx0eSkgIT0gbnVsbCA/IHJlZiA6ICgxNSAqIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWUpIHx8IDUwMDA7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX191cGRhdGVTZXR0aW5nc19fKG9wdGlvbnMpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBwYXJzZXIkMi5vdmVyd3JpdGUob3B0aW9ucywgb3B0aW9ucywgdGhpcy5zdG9yZU9wdGlvbnMpO1xuXHQgICAgdGhpcy5fc3RhcnRIZWFydGJlYXQoKTtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHRydWU7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19ydW5uaW5nX18oKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuX3J1bm5pbmc7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19xdWV1ZWRfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5xdWV1ZWQoKTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2RvbmVfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5fZG9uZTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2dyb3VwQ2hlY2tfXyh0aW1lKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuICh0aGlzLl9uZXh0UmVxdWVzdCArIHRoaXMudGltZW91dCkgPCB0aW1lO1xuXHQgIH1cblxuXHQgIGNvbXB1dGVDYXBhY2l0eSgpIHtcblx0ICAgIHZhciBtYXhDb25jdXJyZW50LCByZXNlcnZvaXI7XG5cdCAgICAoe21heENvbmN1cnJlbnQsIHJlc2Vydm9pcn0gPSB0aGlzLnN0b3JlT3B0aW9ucyk7XG5cdCAgICBpZiAoKG1heENvbmN1cnJlbnQgIT0gbnVsbCkgJiYgKHJlc2Vydm9pciAhPSBudWxsKSkge1xuXHQgICAgICByZXR1cm4gTWF0aC5taW4obWF4Q29uY3VycmVudCAtIHRoaXMuX3J1bm5pbmcsIHJlc2Vydm9pcik7XG5cdCAgICB9IGVsc2UgaWYgKG1heENvbmN1cnJlbnQgIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gbWF4Q29uY3VycmVudCAtIHRoaXMuX3J1bm5pbmc7XG5cdCAgICB9IGVsc2UgaWYgKHJlc2Vydm9pciAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiByZXNlcnZvaXI7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBjb25kaXRpb25zQ2hlY2sod2VpZ2h0KSB7XG5cdCAgICB2YXIgY2FwYWNpdHk7XG5cdCAgICBjYXBhY2l0eSA9IHRoaXMuY29tcHV0ZUNhcGFjaXR5KCk7XG5cdCAgICByZXR1cm4gKGNhcGFjaXR5ID09IG51bGwpIHx8IHdlaWdodCA8PSBjYXBhY2l0eTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2luY3JlbWVudFJlc2Vydm9pcl9fKGluY3IpIHtcblx0ICAgIHZhciByZXNlcnZvaXI7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmVzZXJ2b2lyID0gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICs9IGluY3I7XG5cdCAgICB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgIHJldHVybiByZXNlcnZvaXI7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19jdXJyZW50UmVzZXJ2b2lyX18oKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pcjtcblx0ICB9XG5cblx0ICBpc0Jsb2NrZWQobm93KSB7XG5cdCAgICByZXR1cm4gdGhpcy5fdW5ibG9ja1RpbWUgPj0gbm93O1xuXHQgIH1cblxuXHQgIGNoZWNrKHdlaWdodCwgbm93KSB7XG5cdCAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zQ2hlY2sod2VpZ2h0KSAmJiAodGhpcy5fbmV4dFJlcXVlc3QgLSBub3cpIDw9IDA7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19jaGVja19fKHdlaWdodCkge1xuXHQgICAgdmFyIG5vdztcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBub3cgPSBEYXRlLm5vdygpO1xuXHQgICAgcmV0dXJuIHRoaXMuY2hlY2sod2VpZ2h0LCBub3cpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fcmVnaXN0ZXJfXyhpbmRleCwgd2VpZ2h0LCBleHBpcmF0aW9uKSB7XG5cdCAgICB2YXIgbm93LCB3YWl0O1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICBpZiAodGhpcy5jb25kaXRpb25zQ2hlY2sod2VpZ2h0KSkge1xuXHQgICAgICB0aGlzLl9ydW5uaW5nICs9IHdlaWdodDtcblx0ICAgICAgaWYgKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pciAhPSBudWxsKSB7XG5cdCAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyIC09IHdlaWdodDtcblx0ICAgICAgfVxuXHQgICAgICB3YWl0ID0gTWF0aC5tYXgodGhpcy5fbmV4dFJlcXVlc3QgLSBub3csIDApO1xuXHQgICAgICB0aGlzLl9uZXh0UmVxdWVzdCA9IG5vdyArIHdhaXQgKyB0aGlzLnN0b3JlT3B0aW9ucy5taW5UaW1lO1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG5cdCAgICAgICAgd2FpdCxcblx0ICAgICAgICByZXNlcnZvaXI6IHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclxuXHQgICAgICB9O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIHtcblx0ICAgICAgICBzdWNjZXNzOiBmYWxzZVxuXHQgICAgICB9O1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHN0cmF0ZWd5SXNCbG9jaygpIHtcblx0ICAgIHJldHVybiB0aGlzLnN0b3JlT3B0aW9ucy5zdHJhdGVneSA9PT0gMztcblx0ICB9XG5cblx0ICBhc3luYyBfX3N1Ym1pdF9fKHF1ZXVlTGVuZ3RoLCB3ZWlnaHQpIHtcblx0ICAgIHZhciBibG9ja2VkLCBub3csIHJlYWNoZWRIV007XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgaWYgKCh0aGlzLnN0b3JlT3B0aW9ucy5tYXhDb25jdXJyZW50ICE9IG51bGwpICYmIHdlaWdodCA+IHRoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnQpIHtcblx0ICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQyKGBJbXBvc3NpYmxlIHRvIGFkZCBhIGpvYiBoYXZpbmcgYSB3ZWlnaHQgb2YgJHt3ZWlnaHR9IHRvIGEgbGltaXRlciBoYXZpbmcgYSBtYXhDb25jdXJyZW50IHNldHRpbmcgb2YgJHt0aGlzLnN0b3JlT3B0aW9ucy5tYXhDb25jdXJyZW50fWApO1xuXHQgICAgfVxuXHQgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgIHJlYWNoZWRIV00gPSAodGhpcy5zdG9yZU9wdGlvbnMuaGlnaFdhdGVyICE9IG51bGwpICYmIHF1ZXVlTGVuZ3RoID09PSB0aGlzLnN0b3JlT3B0aW9ucy5oaWdoV2F0ZXIgJiYgIXRoaXMuY2hlY2sod2VpZ2h0LCBub3cpO1xuXHQgICAgYmxvY2tlZCA9IHRoaXMuc3RyYXRlZ3lJc0Jsb2NrKCkgJiYgKHJlYWNoZWRIV00gfHwgdGhpcy5pc0Jsb2NrZWQobm93KSk7XG5cdCAgICBpZiAoYmxvY2tlZCkge1xuXHQgICAgICB0aGlzLl91bmJsb2NrVGltZSA9IG5vdyArIHRoaXMuY29tcHV0ZVBlbmFsdHkoKTtcblx0ICAgICAgdGhpcy5fbmV4dFJlcXVlc3QgPSB0aGlzLl91bmJsb2NrVGltZSArIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWU7XG5cdCAgICAgIHRoaXMuaW5zdGFuY2UuX2Ryb3BBbGxRdWV1ZWQoKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHJlYWNoZWRIV00sXG5cdCAgICAgIGJsb2NrZWQsXG5cdCAgICAgIHN0cmF0ZWd5OiB0aGlzLnN0b3JlT3B0aW9ucy5zdHJhdGVneVxuXHQgICAgfTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2ZyZWVfXyhpbmRleCwgd2VpZ2h0KSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgdGhpcy5fcnVubmluZyAtPSB3ZWlnaHQ7XG5cdCAgICB0aGlzLl9kb25lICs9IHdlaWdodDtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcnVubmluZzogdGhpcy5fcnVubmluZ1xuXHQgICAgfTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgTG9jYWxEYXRhc3RvcmVfMSA9IExvY2FsRGF0YXN0b3JlO1xuXG5cdHZhciBCb3R0bGVuZWNrRXJyb3IkMywgU3RhdGVzO1xuXG5cdEJvdHRsZW5lY2tFcnJvciQzID0gQm90dGxlbmVja0Vycm9yXzE7XG5cblx0U3RhdGVzID0gY2xhc3MgU3RhdGVzIHtcblx0ICBjb25zdHJ1Y3RvcihzdGF0dXMxKSB7XG5cdCAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czE7XG5cdCAgICB0aGlzLl9qb2JzID0ge307XG5cdCAgICB0aGlzLmNvdW50cyA9IHRoaXMuc3RhdHVzLm1hcChmdW5jdGlvbigpIHtcblx0ICAgICAgcmV0dXJuIDA7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBuZXh0KGlkKSB7XG5cdCAgICB2YXIgY3VycmVudCwgbmV4dDtcblx0ICAgIGN1cnJlbnQgPSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIG5leHQgPSBjdXJyZW50ICsgMTtcblx0ICAgIGlmICgoY3VycmVudCAhPSBudWxsKSAmJiBuZXh0IDwgdGhpcy5zdGF0dXMubGVuZ3RoKSB7XG5cdCAgICAgIHRoaXMuY291bnRzW2N1cnJlbnRdLS07XG5cdCAgICAgIHRoaXMuY291bnRzW25leHRdKys7XG5cdCAgICAgIHJldHVybiB0aGlzLl9qb2JzW2lkXSsrO1xuXHQgICAgfSBlbHNlIGlmIChjdXJyZW50ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgcmV0dXJuIGRlbGV0ZSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzdGFydChpZCkge1xuXHQgICAgdmFyIGluaXRpYWw7XG5cdCAgICBpbml0aWFsID0gMDtcblx0ICAgIHRoaXMuX2pvYnNbaWRdID0gaW5pdGlhbDtcblx0ICAgIHJldHVybiB0aGlzLmNvdW50c1tpbml0aWFsXSsrO1xuXHQgIH1cblxuXHQgIHJlbW92ZShpZCkge1xuXHQgICAgdmFyIGN1cnJlbnQ7XG5cdCAgICBjdXJyZW50ID0gdGhpcy5fam9ic1tpZF07XG5cdCAgICBpZiAoY3VycmVudCAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuY291bnRzW2N1cnJlbnRdLS07XG5cdCAgICAgIGRlbGV0ZSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBjdXJyZW50ICE9IG51bGw7XG5cdCAgfVxuXG5cdCAgam9iU3RhdHVzKGlkKSB7XG5cdCAgICB2YXIgcmVmO1xuXHQgICAgcmV0dXJuIChyZWYgPSB0aGlzLnN0YXR1c1t0aGlzLl9qb2JzW2lkXV0pICE9IG51bGwgPyByZWYgOiBudWxsO1xuXHQgIH1cblxuXHQgIHN0YXR1c0pvYnMoc3RhdHVzKSB7XG5cdCAgICB2YXIgaywgcG9zLCByZWYsIHJlc3VsdHMsIHY7XG5cdCAgICBpZiAoc3RhdHVzICE9IG51bGwpIHtcblx0ICAgICAgcG9zID0gdGhpcy5zdGF0dXMuaW5kZXhPZihzdGF0dXMpO1xuXHQgICAgICBpZiAocG9zIDwgMCkge1xuXHQgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrRXJyb3IkMyhgc3RhdHVzIG11c3QgYmUgb25lIG9mICR7dGhpcy5zdGF0dXMuam9pbignLCAnKX1gKTtcblx0ICAgICAgfVxuXHQgICAgICByZWYgPSB0aGlzLl9qb2JzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgIGlmICh2ID09PSBwb3MpIHtcblx0ICAgICAgICAgIHJlc3VsdHMucHVzaChrKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fam9icyk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgc3RhdHVzQ291bnRzKCkge1xuXHQgICAgcmV0dXJuIHRoaXMuY291bnRzLnJlZHVjZSgoKGFjYywgdiwgaSkgPT4ge1xuXHQgICAgICBhY2NbdGhpcy5zdGF0dXNbaV1dID0gdjtcblx0ICAgICAgcmV0dXJuIGFjYztcblx0ICAgIH0pLCB7fSk7XG5cdCAgfVxuXG5cdH07XG5cblx0dmFyIFN0YXRlc18xID0gU3RhdGVzO1xuXG5cdHZhciBETExpc3QkMiwgU3luYztcblxuXHRETExpc3QkMiA9IERMTGlzdF8xO1xuXG5cdFN5bmMgPSBjbGFzcyBTeW5jIHtcblx0ICBjb25zdHJ1Y3RvcihuYW1lLCBQcm9taXNlKSB7XG5cdCAgICB0aGlzLnNjaGVkdWxlID0gdGhpcy5zY2hlZHVsZS5iaW5kKHRoaXMpO1xuXHQgICAgdGhpcy5uYW1lID0gbmFtZTtcblx0ICAgIHRoaXMuUHJvbWlzZSA9IFByb21pc2U7XG5cdCAgICB0aGlzLl9ydW5uaW5nID0gMDtcblx0ICAgIHRoaXMuX3F1ZXVlID0gbmV3IERMTGlzdCQyKCk7XG5cdCAgfVxuXG5cdCAgaXNFbXB0eSgpIHtcblx0ICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGggPT09IDA7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX3RyeVRvUnVuKCkge1xuXHQgICAgdmFyIGFyZ3MsIGNiLCBlcnJvciwgcmVqZWN0LCByZXNvbHZlLCByZXR1cm5lZCwgdGFzaztcblx0ICAgIGlmICgodGhpcy5fcnVubmluZyA8IDEpICYmIHRoaXMuX3F1ZXVlLmxlbmd0aCA+IDApIHtcblx0ICAgICAgdGhpcy5fcnVubmluZysrO1xuXHQgICAgICAoe3Rhc2ssIGFyZ3MsIHJlc29sdmUsIHJlamVjdH0gPSB0aGlzLl9xdWV1ZS5zaGlmdCgpKTtcblx0ICAgICAgY2IgPSAoYXdhaXQgKGFzeW5jIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICByZXR1cm5lZCA9IChhd2FpdCB0YXNrKC4uLmFyZ3MpKTtcblx0ICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmV0dXJuZWQpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICAgIGVycm9yID0gZXJyb3IxO1xuXHQgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICB9KSgpKTtcblx0ICAgICAgdGhpcy5fcnVubmluZy0tO1xuXHQgICAgICB0aGlzLl90cnlUb1J1bigpO1xuXHQgICAgICByZXR1cm4gY2IoKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzY2hlZHVsZSh0YXNrLCAuLi5hcmdzKSB7XG5cdCAgICB2YXIgcHJvbWlzZSwgcmVqZWN0LCByZXNvbHZlO1xuXHQgICAgcmVzb2x2ZSA9IHJlamVjdCA9IG51bGw7XG5cdCAgICBwcm9taXNlID0gbmV3IHRoaXMuUHJvbWlzZShmdW5jdGlvbihfcmVzb2x2ZSwgX3JlamVjdCkge1xuXHQgICAgICByZXNvbHZlID0gX3Jlc29sdmU7XG5cdCAgICAgIHJldHVybiByZWplY3QgPSBfcmVqZWN0O1xuXHQgICAgfSk7XG5cdCAgICB0aGlzLl9xdWV1ZS5wdXNoKHt0YXNrLCBhcmdzLCByZXNvbHZlLCByZWplY3R9KTtcblx0ICAgIHRoaXMuX3RyeVRvUnVuKCk7XG5cdCAgICByZXR1cm4gcHJvbWlzZTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgU3luY18xID0gU3luYztcblxuXHR2YXIgdmVyc2lvbiA9IFwiMi4xOS41XCI7XG5cdHZhciB2ZXJzaW9uJDEgPSB7XG5cdFx0dmVyc2lvbjogdmVyc2lvblxuXHR9O1xuXG5cdHZhciB2ZXJzaW9uJDIgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdFx0dmVyc2lvbjogdmVyc2lvbixcblx0XHRkZWZhdWx0OiB2ZXJzaW9uJDFcblx0fSk7XG5cblx0dmFyIHJlcXVpcmUkJDIgPSAoKSA9PiBjb25zb2xlLmxvZygnWW91IG11c3QgaW1wb3J0IHRoZSBmdWxsIHZlcnNpb24gb2YgQm90dGxlbmVjayBpbiBvcmRlciB0byB1c2UgdGhpcyBmZWF0dXJlLicpO1xuXG5cdHZhciByZXF1aXJlJCQzID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgcmVxdWlyZSQkNCA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIEV2ZW50cyQyLCBHcm91cCwgSU9SZWRpc0Nvbm5lY3Rpb24kMSwgUmVkaXNDb25uZWN0aW9uJDEsIFNjcmlwdHMkMSwgcGFyc2VyJDM7XG5cblx0cGFyc2VyJDMgPSBwYXJzZXI7XG5cblx0RXZlbnRzJDIgPSBFdmVudHNfMTtcblxuXHRSZWRpc0Nvbm5lY3Rpb24kMSA9IHJlcXVpcmUkJDI7XG5cblx0SU9SZWRpc0Nvbm5lY3Rpb24kMSA9IHJlcXVpcmUkJDM7XG5cblx0U2NyaXB0cyQxID0gcmVxdWlyZSQkNDtcblxuXHRHcm91cCA9IChmdW5jdGlvbigpIHtcblx0ICBjbGFzcyBHcm91cCB7XG5cdCAgICBjb25zdHJ1Y3RvcihsaW1pdGVyT3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHRoaXMuZGVsZXRlS2V5ID0gdGhpcy5kZWxldGVLZXkuYmluZCh0aGlzKTtcblx0ICAgICAgdGhpcy5saW1pdGVyT3B0aW9ucyA9IGxpbWl0ZXJPcHRpb25zO1xuXHQgICAgICBwYXJzZXIkMy5sb2FkKHRoaXMubGltaXRlck9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMih0aGlzKTtcblx0ICAgICAgdGhpcy5pbnN0YW5jZXMgPSB7fTtcblx0ICAgICAgdGhpcy5Cb3R0bGVuZWNrID0gQm90dGxlbmVja18xO1xuXHQgICAgICB0aGlzLl9zdGFydEF1dG9DbGVhbnVwKCk7XG5cdCAgICAgIHRoaXMuc2hhcmVkQ29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbiAhPSBudWxsO1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uID09IG51bGwpIHtcblx0ICAgICAgICBpZiAodGhpcy5saW1pdGVyT3B0aW9ucy5kYXRhc3RvcmUgPT09IFwicmVkaXNcIikge1xuXHQgICAgICAgICAgdGhpcy5jb25uZWN0aW9uID0gbmV3IFJlZGlzQ29ubmVjdGlvbiQxKE9iamVjdC5hc3NpZ24oe30sIHRoaXMubGltaXRlck9wdGlvbnMsIHtFdmVudHM6IHRoaXMuRXZlbnRzfSkpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5saW1pdGVyT3B0aW9ucy5kYXRhc3RvcmUgPT09IFwiaW9yZWRpc1wiKSB7XG5cdCAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgSU9SZWRpc0Nvbm5lY3Rpb24kMShPYmplY3QuYXNzaWduKHt9LCB0aGlzLmxpbWl0ZXJPcHRpb25zLCB7RXZlbnRzOiB0aGlzLkV2ZW50c30pKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAga2V5KGtleSA9IFwiXCIpIHtcblx0ICAgICAgdmFyIHJlZjtcblx0ICAgICAgcmV0dXJuIChyZWYgPSB0aGlzLmluc3RhbmNlc1trZXldKSAhPSBudWxsID8gcmVmIDogKCgpID0+IHtcblx0ICAgICAgICB2YXIgbGltaXRlcjtcblx0ICAgICAgICBsaW1pdGVyID0gdGhpcy5pbnN0YW5jZXNba2V5XSA9IG5ldyB0aGlzLkJvdHRsZW5lY2soT2JqZWN0LmFzc2lnbih0aGlzLmxpbWl0ZXJPcHRpb25zLCB7XG5cdCAgICAgICAgICBpZDogYCR7dGhpcy5pZH0tJHtrZXl9YCxcblx0ICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcblx0ICAgICAgICAgIGNvbm5lY3Rpb246IHRoaXMuY29ubmVjdGlvblxuXHQgICAgICAgIH0pKTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiY3JlYXRlZFwiLCBsaW1pdGVyLCBrZXkpO1xuXHQgICAgICAgIHJldHVybiBsaW1pdGVyO1xuXHQgICAgICB9KSgpO1xuXHQgICAgfVxuXG5cdCAgICBhc3luYyBkZWxldGVLZXkoa2V5ID0gXCJcIikge1xuXHQgICAgICB2YXIgZGVsZXRlZCwgaW5zdGFuY2U7XG5cdCAgICAgIGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXNba2V5XTtcblx0ICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbikge1xuXHQgICAgICAgIGRlbGV0ZWQgPSAoYXdhaXQgdGhpcy5jb25uZWN0aW9uLl9fcnVuQ29tbWFuZF9fKFsnZGVsJywgLi4uU2NyaXB0cyQxLmFsbEtleXMoYCR7dGhpcy5pZH0tJHtrZXl9YCldKSk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHtcblx0ICAgICAgICBkZWxldGUgdGhpcy5pbnN0YW5jZXNba2V5XTtcblx0ICAgICAgICBhd2FpdCBpbnN0YW5jZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIChpbnN0YW5jZSAhPSBudWxsKSB8fCBkZWxldGVkID4gMDtcblx0ICAgIH1cblxuXHQgICAgbGltaXRlcnMoKSB7XG5cdCAgICAgIHZhciBrLCByZWYsIHJlc3VsdHMsIHY7XG5cdCAgICAgIHJlZiA9IHRoaXMuaW5zdGFuY2VzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgIHJlc3VsdHMucHVzaCh7XG5cdCAgICAgICAgICBrZXk6IGssXG5cdCAgICAgICAgICBsaW1pdGVyOiB2XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgICB9XG5cblx0ICAgIGtleXMoKSB7XG5cdCAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmluc3RhbmNlcyk7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIGNsdXN0ZXJLZXlzKCkge1xuXHQgICAgICB2YXIgY3Vyc29yLCBlbmQsIGZvdW5kLCBpLCBrLCBrZXlzLCBsZW4sIG5leHQsIHN0YXJ0O1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uID09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUodGhpcy5rZXlzKCkpO1xuXHQgICAgICB9XG5cdCAgICAgIGtleXMgPSBbXTtcblx0ICAgICAgY3Vyc29yID0gbnVsbDtcblx0ICAgICAgc3RhcnQgPSBgYl8ke3RoaXMuaWR9LWAubGVuZ3RoO1xuXHQgICAgICBlbmQgPSBcIl9zZXR0aW5nc1wiLmxlbmd0aDtcblx0ICAgICAgd2hpbGUgKGN1cnNvciAhPT0gMCkge1xuXHQgICAgICAgIFtuZXh0LCBmb3VuZF0gPSAoYXdhaXQgdGhpcy5jb25uZWN0aW9uLl9fcnVuQ29tbWFuZF9fKFtcInNjYW5cIiwgY3Vyc29yICE9IG51bGwgPyBjdXJzb3IgOiAwLCBcIm1hdGNoXCIsIGBiXyR7dGhpcy5pZH0tKl9zZXR0aW5nc2AsIFwiY291bnRcIiwgMTAwMDBdKSk7XG5cdCAgICAgICAgY3Vyc29yID0gfn5uZXh0O1xuXHQgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGZvdW5kLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICBrID0gZm91bmRbaV07XG5cdCAgICAgICAgICBrZXlzLnB1c2goay5zbGljZShzdGFydCwgLWVuZCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4ga2V5cztcblx0ICAgIH1cblxuXHQgICAgX3N0YXJ0QXV0b0NsZWFudXAoKSB7XG5cdCAgICAgIHZhciBiYXNlO1xuXHQgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuXHQgICAgICByZXR1cm4gdHlwZW9mIChiYXNlID0gKHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChhc3luYygpID0+IHtcblx0ICAgICAgICB2YXIgZSwgaywgcmVmLCByZXN1bHRzLCB0aW1lLCB2O1xuXHQgICAgICAgIHRpbWUgPSBEYXRlLm5vdygpO1xuXHQgICAgICAgIHJlZiA9IHRoaXMuaW5zdGFuY2VzO1xuXHQgICAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICBmb3IgKGsgaW4gcmVmKSB7XG5cdCAgICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgaWYgKChhd2FpdCB2Ll9zdG9yZS5fX2dyb3VwQ2hlY2tfXyh0aW1lKSkpIHtcblx0ICAgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5kZWxldGVLZXkoaykpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh2b2lkIDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICAgICAgICBlID0gZXJyb3I7XG5cdCAgICAgICAgICAgIHJlc3VsdHMucHVzaCh2LkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSkpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgICAgfSwgdGhpcy50aW1lb3V0IC8gMikpKS51bnJlZiA9PT0gXCJmdW5jdGlvblwiID8gYmFzZS51bnJlZigpIDogdm9pZCAwO1xuXHQgICAgfVxuXG5cdCAgICB1cGRhdGVTZXR0aW5ncyhvcHRpb25zID0ge30pIHtcblx0ICAgICAgcGFyc2VyJDMub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICBwYXJzZXIkMy5vdmVyd3JpdGUob3B0aW9ucywgb3B0aW9ucywgdGhpcy5saW1pdGVyT3B0aW9ucyk7XG5cdCAgICAgIGlmIChvcHRpb25zLnRpbWVvdXQgIT0gbnVsbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF1dG9DbGVhbnVwKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZGlzY29ubmVjdChmbHVzaCA9IHRydWUpIHtcblx0ICAgICAgdmFyIHJlZjtcblx0ICAgICAgaWYgKCF0aGlzLnNoYXJlZENvbm5lY3Rpb24pIHtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuY29ubmVjdGlvbikgIT0gbnVsbCA/IHJlZi5kaXNjb25uZWN0KGZsdXNoKSA6IHZvaWQgMDtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgfVxuXHQgIEdyb3VwLnByb3RvdHlwZS5kZWZhdWx0cyA9IHtcblx0ICAgIHRpbWVvdXQ6IDEwMDAgKiA2MCAqIDUsXG5cdCAgICBjb25uZWN0aW9uOiBudWxsLFxuXHQgICAgUHJvbWlzZTogUHJvbWlzZSxcblx0ICAgIGlkOiBcImdyb3VwLWtleVwiXG5cdCAgfTtcblxuXHQgIHJldHVybiBHcm91cDtcblxuXHR9KS5jYWxsKGNvbW1vbmpzR2xvYmFsKTtcblxuXHR2YXIgR3JvdXBfMSA9IEdyb3VwO1xuXG5cdHZhciBCYXRjaGVyLCBFdmVudHMkMywgcGFyc2VyJDQ7XG5cblx0cGFyc2VyJDQgPSBwYXJzZXI7XG5cblx0RXZlbnRzJDMgPSBFdmVudHNfMTtcblxuXHRCYXRjaGVyID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEJhdGNoZXIge1xuXHQgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdCAgICAgIHBhcnNlciQ0LmxvYWQodGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgdGhpcy5FdmVudHMgPSBuZXcgRXZlbnRzJDModGhpcyk7XG5cdCAgICAgIHRoaXMuX2FyciA9IFtdO1xuXHQgICAgICB0aGlzLl9yZXNldFByb21pc2UoKTtcblx0ICAgICAgdGhpcy5fbGFzdEZsdXNoID0gRGF0ZS5ub3coKTtcblx0ICAgIH1cblxuXHQgICAgX3Jlc2V0UHJvbWlzZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKChyZXMsIHJlaikgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlID0gcmVzO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX2ZsdXNoKCkge1xuXHQgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgIHRoaXMuX2xhc3RGbHVzaCA9IERhdGUubm93KCk7XG5cdCAgICAgIHRoaXMuX3Jlc29sdmUoKTtcblx0ICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImJhdGNoXCIsIHRoaXMuX2Fycik7XG5cdCAgICAgIHRoaXMuX2FyciA9IFtdO1xuXHQgICAgICByZXR1cm4gdGhpcy5fcmVzZXRQcm9taXNlKCk7XG5cdCAgICB9XG5cblx0ICAgIGFkZChkYXRhKSB7XG5cdCAgICAgIHZhciByZXQ7XG5cdCAgICAgIHRoaXMuX2Fyci5wdXNoKGRhdGEpO1xuXHQgICAgICByZXQgPSB0aGlzLl9wcm9taXNlO1xuXHQgICAgICBpZiAodGhpcy5fYXJyLmxlbmd0aCA9PT0gdGhpcy5tYXhTaXplKSB7XG5cdCAgICAgICAgdGhpcy5fZmx1c2goKTtcblx0ICAgICAgfSBlbHNlIGlmICgodGhpcy5tYXhUaW1lICE9IG51bGwpICYmIHRoaXMuX2Fyci5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5fZmx1c2goKTtcblx0ICAgICAgICB9LCB0aGlzLm1heFRpbWUpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgQmF0Y2hlci5wcm90b3R5cGUuZGVmYXVsdHMgPSB7XG5cdCAgICBtYXhUaW1lOiBudWxsLFxuXHQgICAgbWF4U2l6ZTogbnVsbCxcblx0ICAgIFByb21pc2U6IFByb21pc2Vcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEJhdGNoZXI7XG5cblx0fSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG5cblx0dmFyIEJhdGNoZXJfMSA9IEJhdGNoZXI7XG5cblx0dmFyIHJlcXVpcmUkJDQkMSA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIHJlcXVpcmUkJDggPSBnZXRDanNFeHBvcnRGcm9tTmFtZXNwYWNlKHZlcnNpb24kMik7XG5cblx0dmFyIEJvdHRsZW5lY2ssIERFRkFVTFRfUFJJT1JJVFkkMSwgRXZlbnRzJDQsIEpvYiQxLCBMb2NhbERhdGFzdG9yZSQxLCBOVU1fUFJJT1JJVElFUyQxLCBRdWV1ZXMkMSwgUmVkaXNEYXRhc3RvcmUkMSwgU3RhdGVzJDEsIFN5bmMkMSwgcGFyc2VyJDUsXG5cdCAgc3BsaWNlID0gW10uc3BsaWNlO1xuXG5cdE5VTV9QUklPUklUSUVTJDEgPSAxMDtcblxuXHRERUZBVUxUX1BSSU9SSVRZJDEgPSA1O1xuXG5cdHBhcnNlciQ1ID0gcGFyc2VyO1xuXG5cdFF1ZXVlcyQxID0gUXVldWVzXzE7XG5cblx0Sm9iJDEgPSBKb2JfMTtcblxuXHRMb2NhbERhdGFzdG9yZSQxID0gTG9jYWxEYXRhc3RvcmVfMTtcblxuXHRSZWRpc0RhdGFzdG9yZSQxID0gcmVxdWlyZSQkNCQxO1xuXG5cdEV2ZW50cyQ0ID0gRXZlbnRzXzE7XG5cblx0U3RhdGVzJDEgPSBTdGF0ZXNfMTtcblxuXHRTeW5jJDEgPSBTeW5jXzE7XG5cblx0Qm90dGxlbmVjayA9IChmdW5jdGlvbigpIHtcblx0ICBjbGFzcyBCb3R0bGVuZWNrIHtcblx0ICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgLi4uaW52YWxpZCkge1xuXHQgICAgICB2YXIgc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHN0b3JlT3B0aW9ucztcblx0ICAgICAgdGhpcy5fYWRkVG9RdWV1ZSA9IHRoaXMuX2FkZFRvUXVldWUuYmluZCh0aGlzKTtcblx0ICAgICAgdGhpcy5fdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMsIGludmFsaWQpO1xuXHQgICAgICBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMuaW5zdGFuY2VEZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHRoaXMuX3F1ZXVlcyA9IG5ldyBRdWV1ZXMkMShOVU1fUFJJT1JJVElFUyQxKTtcblx0ICAgICAgdGhpcy5fc2NoZWR1bGVkID0ge307XG5cdCAgICAgIHRoaXMuX3N0YXRlcyA9IG5ldyBTdGF0ZXMkMShbXCJSRUNFSVZFRFwiLCBcIlFVRVVFRFwiLCBcIlJVTk5JTkdcIiwgXCJFWEVDVVRJTkdcIl0uY29uY2F0KHRoaXMudHJhY2tEb25lU3RhdHVzID8gW1wiRE9ORVwiXSA6IFtdKSk7XG5cdCAgICAgIHRoaXMuX2xpbWl0ZXIgPSBudWxsO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkNCh0aGlzKTtcblx0ICAgICAgdGhpcy5fc3VibWl0TG9jayA9IG5ldyBTeW5jJDEoXCJzdWJtaXRcIiwgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgdGhpcy5fcmVnaXN0ZXJMb2NrID0gbmV3IFN5bmMkMShcInJlZ2lzdGVyXCIsIHRoaXMuUHJvbWlzZSk7XG5cdCAgICAgIHN0b3JlT3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5zdG9yZURlZmF1bHRzLCB7fSk7XG5cdCAgICAgIHRoaXMuX3N0b3JlID0gKGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmRhdGFzdG9yZSA9PT0gXCJyZWRpc1wiIHx8IHRoaXMuZGF0YXN0b3JlID09PSBcImlvcmVkaXNcIiB8fCAodGhpcy5jb25uZWN0aW9uICE9IG51bGwpKSB7XG5cdCAgICAgICAgICBzdG9yZUluc3RhbmNlT3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5yZWRpc1N0b3JlRGVmYXVsdHMsIHt9KTtcblx0ICAgICAgICAgIHJldHVybiBuZXcgUmVkaXNEYXRhc3RvcmUkMSh0aGlzLCBzdG9yZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YXN0b3JlID09PSBcImxvY2FsXCIpIHtcblx0ICAgICAgICAgIHN0b3JlSW5zdGFuY2VPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLmxvY2FsU3RvcmVEZWZhdWx0cywge30pO1xuXHQgICAgICAgICAgcmV0dXJuIG5ldyBMb2NhbERhdGFzdG9yZSQxKHRoaXMsIHN0b3JlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aHJvdyBuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKGBJbnZhbGlkIGRhdGFzdG9yZSB0eXBlOiAke3RoaXMuZGF0YXN0b3JlfWApO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSkuY2FsbCh0aGlzKTtcblx0ICAgICAgdGhpcy5fcXVldWVzLm9uKFwibGVmdHplcm9cIiwgKCkgPT4ge1xuXHQgICAgICAgIHZhciByZWY7XG5cdCAgICAgICAgcmV0dXJuIChyZWYgPSB0aGlzLl9zdG9yZS5oZWFydGJlYXQpICE9IG51bGwgPyB0eXBlb2YgcmVmLnJlZiA9PT0gXCJmdW5jdGlvblwiID8gcmVmLnJlZigpIDogdm9pZCAwIDogdm9pZCAwO1xuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy5fcXVldWVzLm9uKFwiemVyb1wiLCAoKSA9PiB7XG5cdCAgICAgICAgdmFyIHJlZjtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3N0b3JlLmhlYXJ0YmVhdCkgIT0gbnVsbCA/IHR5cGVvZiByZWYudW5yZWYgPT09IFwiZnVuY3Rpb25cIiA/IHJlZi51bnJlZigpIDogdm9pZCAwIDogdm9pZCAwO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX3ZhbGlkYXRlT3B0aW9ucyhvcHRpb25zLCBpbnZhbGlkKSB7XG5cdCAgICAgIGlmICghKChvcHRpb25zICE9IG51bGwpICYmIHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiICYmIGludmFsaWQubGVuZ3RoID09PSAwKSkge1xuXHQgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoXCJCb3R0bGVuZWNrIHYyIHRha2VzIGEgc2luZ2xlIG9iamVjdCBhcmd1bWVudC4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2sjdXBncmFkaW5nLXRvLXYyIGlmIHlvdSdyZSB1cGdyYWRpbmcgZnJvbSBCb3R0bGVuZWNrIHYxLlwiKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICByZWFkeSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLnJlYWR5O1xuXHQgICAgfVxuXG5cdCAgICBjbGllbnRzKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuY2xpZW50cztcblx0ICAgIH1cblxuXHQgICAgY2hhbm5lbCgpIHtcblx0ICAgICAgcmV0dXJuIGBiXyR7dGhpcy5pZH1gO1xuXHQgICAgfVxuXG5cdCAgICBjaGFubmVsX2NsaWVudCgpIHtcblx0ICAgICAgcmV0dXJuIGBiXyR7dGhpcy5pZH1fJHt0aGlzLl9zdG9yZS5jbGllbnRJZH1gO1xuXHQgICAgfVxuXG5cdCAgICBwdWJsaXNoKG1lc3NhZ2UpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fcHVibGlzaF9fKG1lc3NhZ2UpO1xuXHQgICAgfVxuXG5cdCAgICBkaXNjb25uZWN0KGZsdXNoID0gdHJ1ZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19kaXNjb25uZWN0X18oZmx1c2gpO1xuXHQgICAgfVxuXG5cdCAgICBjaGFpbihfbGltaXRlcikge1xuXHQgICAgICB0aGlzLl9saW1pdGVyID0gX2xpbWl0ZXI7XG5cdCAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfVxuXG5cdCAgICBxdWV1ZWQocHJpb3JpdHkpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3F1ZXVlcy5xdWV1ZWQocHJpb3JpdHkpO1xuXHQgICAgfVxuXG5cdCAgICBjbHVzdGVyUXVldWVkKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19xdWV1ZWRfXygpO1xuXHQgICAgfVxuXG5cdCAgICBlbXB0eSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMucXVldWVkKCkgPT09IDAgJiYgdGhpcy5fc3VibWl0TG9jay5pc0VtcHR5KCk7XG5cdCAgICB9XG5cblx0ICAgIHJ1bm5pbmcoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3J1bm5pbmdfXygpO1xuXHQgICAgfVxuXG5cdCAgICBkb25lKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19kb25lX18oKTtcblx0ICAgIH1cblxuXHQgICAgam9iU3RhdHVzKGlkKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKGlkKTtcblx0ICAgIH1cblxuXHQgICAgam9icyhzdGF0dXMpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5zdGF0dXNKb2JzKHN0YXR1cyk7XG5cdCAgICB9XG5cblx0ICAgIGNvdW50cygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5zdGF0dXNDb3VudHMoKTtcblx0ICAgIH1cblxuXHQgICAgX3JhbmRvbUluZGV4KCkge1xuXHQgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG5cdCAgICB9XG5cblx0ICAgIGNoZWNrKHdlaWdodCA9IDEpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fY2hlY2tfXyh3ZWlnaHQpO1xuXHQgICAgfVxuXG5cdCAgICBfY2xlYXJHbG9iYWxTdGF0ZShpbmRleCkge1xuXHQgICAgICBpZiAodGhpcy5fc2NoZWR1bGVkW2luZGV4XSAhPSBudWxsKSB7XG5cdCAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NjaGVkdWxlZFtpbmRleF0uZXhwaXJhdGlvbik7XG5cdCAgICAgICAgZGVsZXRlIHRoaXMuX3NjaGVkdWxlZFtpbmRleF07XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIF9mcmVlKGluZGV4LCBqb2IsIG9wdGlvbnMsIGV2ZW50SW5mbykge1xuXHQgICAgICB2YXIgZSwgcnVubmluZztcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICAoe3J1bm5pbmd9ID0gKGF3YWl0IHRoaXMuX3N0b3JlLl9fZnJlZV9fKGluZGV4LCBvcHRpb25zLndlaWdodCkpKTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYEZyZWVkICR7b3B0aW9ucy5pZH1gLCBldmVudEluZm8pO1xuXHQgICAgICAgIGlmIChydW5uaW5nID09PSAwICYmIHRoaXMuZW1wdHkoKSkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJpZGxlXCIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgICAgZSA9IGVycm9yMTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIF9ydW4oaW5kZXgsIGpvYiwgd2FpdCkge1xuXHQgICAgICB2YXIgY2xlYXJHbG9iYWxTdGF0ZSwgZnJlZSwgcnVuO1xuXHQgICAgICBqb2IuZG9SdW4oKTtcblx0ICAgICAgY2xlYXJHbG9iYWxTdGF0ZSA9IHRoaXMuX2NsZWFyR2xvYmFsU3RhdGUuYmluZCh0aGlzLCBpbmRleCk7XG5cdCAgICAgIHJ1biA9IHRoaXMuX3J1bi5iaW5kKHRoaXMsIGluZGV4LCBqb2IpO1xuXHQgICAgICBmcmVlID0gdGhpcy5fZnJlZS5iaW5kKHRoaXMsIGluZGV4LCBqb2IpO1xuXHQgICAgICByZXR1cm4gdGhpcy5fc2NoZWR1bGVkW2luZGV4XSA9IHtcblx0ICAgICAgICB0aW1lb3V0OiBzZXRUaW1lb3V0KCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiBqb2IuZG9FeGVjdXRlKHRoaXMuX2xpbWl0ZXIsIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSk7XG5cdCAgICAgICAgfSwgd2FpdCksXG5cdCAgICAgICAgZXhwaXJhdGlvbjogam9iLm9wdGlvbnMuZXhwaXJhdGlvbiAhPSBudWxsID8gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0ICAgICAgICAgIHJldHVybiBqb2IuZG9FeHBpcmUoY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICAgICAgICB9LCB3YWl0ICsgam9iLm9wdGlvbnMuZXhwaXJhdGlvbikgOiB2b2lkIDAsXG5cdCAgICAgICAgam9iOiBqb2Jcblx0ICAgICAgfTtcblx0ICAgIH1cblxuXHQgICAgX2RyYWluT25lKGNhcGFjaXR5KSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RlckxvY2suc2NoZWR1bGUoKCkgPT4ge1xuXHQgICAgICAgIHZhciBhcmdzLCBpbmRleCwgbmV4dCwgb3B0aW9ucywgcXVldWU7XG5cdCAgICAgICAgaWYgKHRoaXMucXVldWVkKCkgPT09IDApIHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShudWxsKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcXVldWUgPSB0aGlzLl9xdWV1ZXMuZ2V0Rmlyc3QoKTtcblx0ICAgICAgICAoe29wdGlvbnMsIGFyZ3N9ID0gbmV4dCA9IHF1ZXVlLmZpcnN0KCkpO1xuXHQgICAgICAgIGlmICgoY2FwYWNpdHkgIT0gbnVsbCkgJiYgb3B0aW9ucy53ZWlnaHQgPiBjYXBhY2l0eSkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYERyYWluaW5nICR7b3B0aW9ucy5pZH1gLCB7YXJncywgb3B0aW9uc30pO1xuXHQgICAgICAgIGluZGV4ID0gdGhpcy5fcmFuZG9tSW5kZXgoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19yZWdpc3Rlcl9fKGluZGV4LCBvcHRpb25zLndlaWdodCwgb3B0aW9ucy5leHBpcmF0aW9uKS50aGVuKCh7c3VjY2Vzcywgd2FpdCwgcmVzZXJ2b2lyfSkgPT4ge1xuXHQgICAgICAgICAgdmFyIGVtcHR5O1xuXHQgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImRlYnVnXCIsIGBEcmFpbmVkICR7b3B0aW9ucy5pZH1gLCB7c3VjY2VzcywgYXJncywgb3B0aW9uc30pO1xuXHQgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcblx0ICAgICAgICAgICAgcXVldWUuc2hpZnQoKTtcblx0ICAgICAgICAgICAgZW1wdHkgPSB0aGlzLmVtcHR5KCk7XG5cdCAgICAgICAgICAgIGlmIChlbXB0eSkge1xuXHQgICAgICAgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJlbXB0eVwiKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAocmVzZXJ2b2lyID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImRlcGxldGVkXCIsIGVtcHR5KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9ydW4oaW5kZXgsIG5leHQsIHdhaXQpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUob3B0aW9ucy53ZWlnaHQpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX2RyYWluQWxsKGNhcGFjaXR5LCB0b3RhbCA9IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2RyYWluT25lKGNhcGFjaXR5KS50aGVuKChkcmFpbmVkKSA9PiB7XG5cdCAgICAgICAgdmFyIG5ld0NhcGFjaXR5O1xuXHQgICAgICAgIGlmIChkcmFpbmVkICE9IG51bGwpIHtcblx0ICAgICAgICAgIG5ld0NhcGFjaXR5ID0gY2FwYWNpdHkgIT0gbnVsbCA/IGNhcGFjaXR5IC0gZHJhaW5lZCA6IGNhcGFjaXR5O1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuX2RyYWluQWxsKG5ld0NhcGFjaXR5LCB0b3RhbCArIGRyYWluZWQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUodG90YWwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSkuY2F0Y2goKGUpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX2Ryb3BBbGxRdWV1ZWQobWVzc2FnZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcXVldWVzLnNoaWZ0QWxsKGZ1bmN0aW9uKGpvYikge1xuXHQgICAgICAgIHJldHVybiBqb2IuZG9Ecm9wKHttZXNzYWdlfSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBzdG9wKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICB2YXIgZG9uZSwgd2FpdEZvckV4ZWN1dGluZztcblx0ICAgICAgb3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5zdG9wRGVmYXVsdHMpO1xuXHQgICAgICB3YWl0Rm9yRXhlY3V0aW5nID0gKGF0KSA9PiB7XG5cdCAgICAgICAgdmFyIGZpbmlzaGVkO1xuXHQgICAgICAgIGZpbmlzaGVkID0gKCkgPT4ge1xuXHQgICAgICAgICAgdmFyIGNvdW50cztcblx0ICAgICAgICAgIGNvdW50cyA9IHRoaXMuX3N0YXRlcy5jb3VudHM7XG5cdCAgICAgICAgICByZXR1cm4gKGNvdW50c1swXSArIGNvdW50c1sxXSArIGNvdW50c1syXSArIGNvdW50c1szXSkgPT09IGF0O1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHQgICAgICAgICAgaWYgKGZpbmlzaGVkKCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm9uKFwiZG9uZVwiLCAoKSA9PiB7XG5cdCAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkKCkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwiZG9uZVwiKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfTtcblx0ICAgICAgZG9uZSA9IG9wdGlvbnMuZHJvcFdhaXRpbmdKb2JzID8gKHRoaXMuX3J1biA9IGZ1bmN0aW9uKGluZGV4LCBuZXh0KSB7XG5cdCAgICAgICAgcmV0dXJuIG5leHQuZG9Ecm9wKHtcblx0ICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9LCB0aGlzLl9kcmFpbk9uZSA9ICgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgIH0sIHRoaXMuX3JlZ2lzdGVyTG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdExvY2suc2NoZWR1bGUoKCkgPT4ge1xuXHQgICAgICAgICAgdmFyIGssIHJlZiwgdjtcblx0ICAgICAgICAgIHJlZiA9IHRoaXMuX3NjaGVkdWxlZDtcblx0ICAgICAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICAgICAgdiA9IHJlZltrXTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuam9iU3RhdHVzKHYuam9iLm9wdGlvbnMuaWQpID09PSBcIlJVTk5JTkdcIikge1xuXHQgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh2LnRpbWVvdXQpO1xuXHQgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh2LmV4cGlyYXRpb24pO1xuXHQgICAgICAgICAgICAgIHYuam9iLmRvRHJvcCh7XG5cdCAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLmRyb3BFcnJvck1lc3NhZ2Vcblx0ICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgdGhpcy5fZHJvcEFsbFF1ZXVlZChvcHRpb25zLmRyb3BFcnJvck1lc3NhZ2UpO1xuXHQgICAgICAgICAgcmV0dXJuIHdhaXRGb3JFeGVjdXRpbmcoMCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0pKSA6IHRoaXMuc2NoZWR1bGUoe1xuXHQgICAgICAgIHByaW9yaXR5OiBOVU1fUFJJT1JJVElFUyQxIC0gMSxcblx0ICAgICAgICB3ZWlnaHQ6IDBcblx0ICAgICAgfSwgKCkgPT4ge1xuXHQgICAgICAgIHJldHVybiB3YWl0Rm9yRXhlY3V0aW5nKDEpO1xuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy5fcmVjZWl2ZSA9IGZ1bmN0aW9uKGpvYikge1xuXHQgICAgICAgIHJldHVybiBqb2IuX3JlamVjdChuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKG9wdGlvbnMuZW5xdWV1ZUVycm9yTWVzc2FnZSkpO1xuXHQgICAgICB9O1xuXHQgICAgICB0aGlzLnN0b3AgPSAoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZWplY3QobmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihcInN0b3AoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZFwiKSk7XG5cdCAgICAgIH07XG5cdCAgICAgIHJldHVybiBkb25lO1xuXHQgICAgfVxuXG5cdCAgICBhc3luYyBfYWRkVG9RdWV1ZShqb2IpIHtcblx0ICAgICAgdmFyIGFyZ3MsIGJsb2NrZWQsIGVycm9yLCBvcHRpb25zLCByZWFjaGVkSFdNLCBzaGlmdGVkLCBzdHJhdGVneTtcblx0ICAgICAgKHthcmdzLCBvcHRpb25zfSA9IGpvYik7XG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgKHtyZWFjaGVkSFdNLCBibG9ja2VkLCBzdHJhdGVneX0gPSAoYXdhaXQgdGhpcy5fc3RvcmUuX19zdWJtaXRfXyh0aGlzLnF1ZXVlZCgpLCBvcHRpb25zLndlaWdodCkpKTtcblx0ICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgICAgZXJyb3IgPSBlcnJvcjE7XG5cdCAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImRlYnVnXCIsIGBDb3VsZCBub3QgcXVldWUgJHtvcHRpb25zLmlkfWAsIHthcmdzLCBvcHRpb25zLCBlcnJvcn0pO1xuXHQgICAgICAgIGpvYi5kb0Ryb3Aoe2Vycm9yfSk7XG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChibG9ja2VkKSB7XG5cdCAgICAgICAgam9iLmRvRHJvcCgpO1xuXHQgICAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgICB9IGVsc2UgaWYgKHJlYWNoZWRIV00pIHtcblx0ICAgICAgICBzaGlmdGVkID0gc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5LkxFQUsgPyB0aGlzLl9xdWV1ZXMuc2hpZnRMYXN0RnJvbShvcHRpb25zLnByaW9yaXR5KSA6IHN0cmF0ZWd5ID09PSBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdHJhdGVneS5PVkVSRkxPV19QUklPUklUWSA/IHRoaXMuX3F1ZXVlcy5zaGlmdExhc3RGcm9tKG9wdGlvbnMucHJpb3JpdHkgKyAxKSA6IHN0cmF0ZWd5ID09PSBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdHJhdGVneS5PVkVSRkxPVyA/IGpvYiA6IHZvaWQgMDtcblx0ICAgICAgICBpZiAoc2hpZnRlZCAhPSBudWxsKSB7XG5cdCAgICAgICAgICBzaGlmdGVkLmRvRHJvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoKHNoaWZ0ZWQgPT0gbnVsbCkgfHwgc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XKSB7XG5cdCAgICAgICAgICBpZiAoc2hpZnRlZCA9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGpvYi5kb0Ryb3AoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHJldHVybiByZWFjaGVkSFdNO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICBqb2IuZG9RdWV1ZShyZWFjaGVkSFdNLCBibG9ja2VkKTtcblx0ICAgICAgdGhpcy5fcXVldWVzLnB1c2goam9iKTtcblx0ICAgICAgYXdhaXQgdGhpcy5fZHJhaW5BbGwoKTtcblx0ICAgICAgcmV0dXJuIHJlYWNoZWRIV007XG5cdCAgICB9XG5cblx0ICAgIF9yZWNlaXZlKGpvYikge1xuXHQgICAgICBpZiAodGhpcy5fc3RhdGVzLmpvYlN0YXR1cyhqb2Iub3B0aW9ucy5pZCkgIT0gbnVsbCkge1xuXHQgICAgICAgIGpvYi5fcmVqZWN0KG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoYEEgam9iIHdpdGggdGhlIHNhbWUgaWQgYWxyZWFkeSBleGlzdHMgKGlkPSR7am9iLm9wdGlvbnMuaWR9KWApKTtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgam9iLmRvUmVjZWl2ZSgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRMb2NrLnNjaGVkdWxlKHRoaXMuX2FkZFRvUXVldWUsIGpvYik7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgc3VibWl0KC4uLmFyZ3MpIHtcblx0ICAgICAgdmFyIGNiLCBmbiwgam9iLCBvcHRpb25zLCByZWYsIHJlZjEsIHRhc2s7XG5cdCAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgcmVmID0gYXJncywgW2ZuLCAuLi5hcmdzXSA9IHJlZiwgW2NiXSA9IHNwbGljZS5jYWxsKGFyZ3MsIC0xKTtcblx0ICAgICAgICBvcHRpb25zID0gcGFyc2VyJDUubG9hZCh7fSwgdGhpcy5qb2JEZWZhdWx0cyk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmVmMSA9IGFyZ3MsIFtvcHRpb25zLCBmbiwgLi4uYXJnc10gPSByZWYxLCBbY2JdID0gc3BsaWNlLmNhbGwoYXJncywgLTEpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMuam9iRGVmYXVsdHMpO1xuXHQgICAgICB9XG5cdCAgICAgIHRhc2sgPSAoLi4uYXJncykgPT4ge1xuXHQgICAgICAgIHJldHVybiBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHQgICAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MsIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIChhcmdzWzBdICE9IG51bGwgPyByZWplY3QgOiByZXNvbHZlKShhcmdzKTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9O1xuXHQgICAgICBqb2IgPSBuZXcgSm9iJDEodGFzaywgYXJncywgb3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cywgdGhpcy5yZWplY3RPbkRyb3AsIHRoaXMuRXZlbnRzLCB0aGlzLl9zdGF0ZXMsIHRoaXMuUHJvbWlzZSk7XG5cdCAgICAgIGpvYi5wcm9taXNlLnRoZW4oZnVuY3Rpb24oYXJncykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKC4uLmFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICB9KS5jYXRjaChmdW5jdGlvbihhcmdzKSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcblx0ICAgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKC4uLmFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gdHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIgPyBjYihhcmdzKSA6IHZvaWQgMDtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgICByZXR1cm4gdGhpcy5fcmVjZWl2ZShqb2IpO1xuXHQgICAgfVxuXG5cdCAgICBzY2hlZHVsZSguLi5hcmdzKSB7XG5cdCAgICAgIHZhciBqb2IsIG9wdGlvbnMsIHRhc2s7XG5cdCAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgW3Rhc2ssIC4uLmFyZ3NdID0gYXJncztcblx0ICAgICAgICBvcHRpb25zID0ge307XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgW29wdGlvbnMsIHRhc2ssIC4uLmFyZ3NdID0gYXJncztcblx0ICAgICAgfVxuXHQgICAgICBqb2IgPSBuZXcgSm9iJDEodGFzaywgYXJncywgb3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cywgdGhpcy5yZWplY3RPbkRyb3AsIHRoaXMuRXZlbnRzLCB0aGlzLl9zdGF0ZXMsIHRoaXMuUHJvbWlzZSk7XG5cdCAgICAgIHRoaXMuX3JlY2VpdmUoam9iKTtcblx0ICAgICAgcmV0dXJuIGpvYi5wcm9taXNlO1xuXHQgICAgfVxuXG5cdCAgICB3cmFwKGZuKSB7XG5cdCAgICAgIHZhciBzY2hlZHVsZSwgd3JhcHBlZDtcblx0ICAgICAgc2NoZWR1bGUgPSB0aGlzLnNjaGVkdWxlLmJpbmQodGhpcyk7XG5cdCAgICAgIHdyYXBwZWQgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNjaGVkdWxlKGZuLmJpbmQodGhpcyksIC4uLmFyZ3MpO1xuXHQgICAgICB9O1xuXHQgICAgICB3cmFwcGVkLndpdGhPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucywgLi4uYXJncykge1xuXHQgICAgICAgIHJldHVybiBzY2hlZHVsZShvcHRpb25zLCBmbiwgLi4uYXJncyk7XG5cdCAgICAgIH07XG5cdCAgICAgIHJldHVybiB3cmFwcGVkO1xuXHQgICAgfVxuXG5cdCAgICBhc3luYyB1cGRhdGVTZXR0aW5ncyhvcHRpb25zID0ge30pIHtcblx0ICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuX191cGRhdGVTZXR0aW5nc19fKHBhcnNlciQ1Lm92ZXJ3cml0ZShvcHRpb25zLCB0aGlzLnN0b3JlRGVmYXVsdHMpKTtcblx0ICAgICAgcGFyc2VyJDUub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuaW5zdGFuY2VEZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfVxuXG5cdCAgICBjdXJyZW50UmVzZXJ2b2lyKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19jdXJyZW50UmVzZXJ2b2lyX18oKTtcblx0ICAgIH1cblxuXHQgICAgaW5jcmVtZW50UmVzZXJ2b2lyKGluY3IgPSAwKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2luY3JlbWVudFJlc2Vydm9pcl9fKGluY3IpO1xuXHQgICAgfVxuXG5cdCAgfVxuXHQgIEJvdHRsZW5lY2suZGVmYXVsdCA9IEJvdHRsZW5lY2s7XG5cblx0ICBCb3R0bGVuZWNrLkV2ZW50cyA9IEV2ZW50cyQ0O1xuXG5cdCAgQm90dGxlbmVjay52ZXJzaW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUudmVyc2lvbiA9IHJlcXVpcmUkJDgudmVyc2lvbjtcblxuXHQgIEJvdHRsZW5lY2suc3RyYXRlZ3kgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdHJhdGVneSA9IHtcblx0ICAgIExFQUs6IDEsXG5cdCAgICBPVkVSRkxPVzogMixcblx0ICAgIE9WRVJGTE9XX1BSSU9SSVRZOiA0LFxuXHQgICAgQkxPQ0s6IDNcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5Cb3R0bGVuZWNrRXJyb3IgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHQgIEJvdHRsZW5lY2suR3JvdXAgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5Hcm91cCA9IEdyb3VwXzE7XG5cblx0ICBCb3R0bGVuZWNrLlJlZGlzQ29ubmVjdGlvbiA9IEJvdHRsZW5lY2sucHJvdG90eXBlLlJlZGlzQ29ubmVjdGlvbiA9IHJlcXVpcmUkJDI7XG5cblx0ICBCb3R0bGVuZWNrLklPUmVkaXNDb25uZWN0aW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUuSU9SZWRpc0Nvbm5lY3Rpb24gPSByZXF1aXJlJCQzO1xuXG5cdCAgQm90dGxlbmVjay5CYXRjaGVyID0gQm90dGxlbmVjay5wcm90b3R5cGUuQmF0Y2hlciA9IEJhdGNoZXJfMTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLmpvYkRlZmF1bHRzID0ge1xuXHQgICAgcHJpb3JpdHk6IERFRkFVTFRfUFJJT1JJVFkkMSxcblx0ICAgIHdlaWdodDogMSxcblx0ICAgIGV4cGlyYXRpb246IG51bGwsXG5cdCAgICBpZDogXCI8bm8taWQ+XCJcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuc3RvcmVEZWZhdWx0cyA9IHtcblx0ICAgIG1heENvbmN1cnJlbnQ6IG51bGwsXG5cdCAgICBtaW5UaW1lOiAwLFxuXHQgICAgaGlnaFdhdGVyOiBudWxsLFxuXHQgICAgc3RyYXRlZ3k6IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5LkxFQUssXG5cdCAgICBwZW5hbHR5OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lyOiBudWxsLFxuXHQgICAgcmVzZXJ2b2lyUmVmcmVzaEludGVydmFsOiBudWxsLFxuXHQgICAgcmVzZXJ2b2lyUmVmcmVzaEFtb3VudDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWw6IG51bGwsXG5cdCAgICByZXNlcnZvaXJJbmNyZWFzZUFtb3VudDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlTWF4aW11bTogbnVsbFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5sb2NhbFN0b3JlRGVmYXVsdHMgPSB7XG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgdGltZW91dDogbnVsbCxcblx0ICAgIGhlYXJ0YmVhdEludGVydmFsOiAyNTBcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUucmVkaXNTdG9yZURlZmF1bHRzID0ge1xuXHQgICAgUHJvbWlzZTogUHJvbWlzZSxcblx0ICAgIHRpbWVvdXQ6IG51bGwsXG5cdCAgICBoZWFydGJlYXRJbnRlcnZhbDogNTAwMCxcblx0ICAgIGNsaWVudFRpbWVvdXQ6IDEwMDAwLFxuXHQgICAgUmVkaXM6IG51bGwsXG5cdCAgICBjbGllbnRPcHRpb25zOiB7fSxcblx0ICAgIGNsdXN0ZXJOb2RlczogbnVsbCxcblx0ICAgIGNsZWFyRGF0YXN0b3JlOiBmYWxzZSxcblx0ICAgIGNvbm5lY3Rpb246IG51bGxcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuaW5zdGFuY2VEZWZhdWx0cyA9IHtcblx0ICAgIGRhdGFzdG9yZTogXCJsb2NhbFwiLFxuXHQgICAgY29ubmVjdGlvbjogbnVsbCxcblx0ICAgIGlkOiBcIjxuby1pZD5cIixcblx0ICAgIHJlamVjdE9uRHJvcDogdHJ1ZSxcblx0ICAgIHRyYWNrRG9uZVN0YXR1czogZmFsc2UsXG5cdCAgICBQcm9taXNlOiBQcm9taXNlXG5cdCAgfTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLnN0b3BEZWZhdWx0cyA9IHtcblx0ICAgIGVucXVldWVFcnJvck1lc3NhZ2U6IFwiVGhpcyBsaW1pdGVyIGhhcyBiZWVuIHN0b3BwZWQgYW5kIGNhbm5vdCBhY2NlcHQgbmV3IGpvYnMuXCIsXG5cdCAgICBkcm9wV2FpdGluZ0pvYnM6IHRydWUsXG5cdCAgICBkcm9wRXJyb3JNZXNzYWdlOiBcIlRoaXMgbGltaXRlciBoYXMgYmVlbiBzdG9wcGVkLlwiXG5cdCAgfTtcblxuXHQgIHJldHVybiBCb3R0bGVuZWNrO1xuXG5cdH0pLmNhbGwoY29tbW9uanNHbG9iYWwpO1xuXG5cdHZhciBCb3R0bGVuZWNrXzEgPSBCb3R0bGVuZWNrO1xuXG5cdHZhciBsaWIgPSBCb3R0bGVuZWNrXzE7XG5cblx0cmV0dXJuIGxpYjtcblxufSkpKTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIEJvdHRsZW5lY2sgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnYm90dGxlbmVjay9saWdodCcpKTtcblxuLy8gQHRzLWlnbm9yZVxuYXN5bmMgZnVuY3Rpb24gZXJyb3JSZXF1ZXN0KG9jdG9raXQsIHN0YXRlLCBlcnJvciwgb3B0aW9ucykge1xuICBpZiAoIWVycm9yLnJlcXVlc3QgfHwgIWVycm9yLnJlcXVlc3QucmVxdWVzdCkge1xuICAgIC8vIGFkZHJlc3MgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvcGx1Z2luLXJldHJ5LmpzL2lzc3Vlcy84XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gLy8gcmV0cnkgYWxsID49IDQwMCAmJiBub3QgZG9Ob3RSZXRyeVxuXG5cbiAgaWYgKGVycm9yLnN0YXR1cyA+PSA0MDAgJiYgIXN0YXRlLmRvTm90UmV0cnkuaW5jbHVkZXMoZXJyb3Iuc3RhdHVzKSkge1xuICAgIGNvbnN0IHJldHJpZXMgPSBvcHRpb25zLnJlcXVlc3QucmV0cmllcyAhPSBudWxsID8gb3B0aW9ucy5yZXF1ZXN0LnJldHJpZXMgOiBzdGF0ZS5yZXRyaWVzO1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBNYXRoLnBvdygob3B0aW9ucy5yZXF1ZXN0LnJldHJ5Q291bnQgfHwgMCkgKyAxLCAyKTtcbiAgICB0aHJvdyBvY3Rva2l0LnJldHJ5LnJldHJ5UmVxdWVzdChlcnJvciwgcmV0cmllcywgcmV0cnlBZnRlcik7XG4gIH0gLy8gTWF5YmUgZXZlbnR1YWxseSB0aGVyZSB3aWxsIGJlIG1vcmUgY2FzZXMgaGVyZVxuXG5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbi8vIEB0cy1pZ25vcmVcblxuYXN5bmMgZnVuY3Rpb24gd3JhcFJlcXVlc3Qoc3RhdGUsIHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBCb3R0bGVuZWNrKCk7IC8vIEB0cy1pZ25vcmVcblxuICBsaW1pdGVyLm9uKFwiZmFpbGVkXCIsIGZ1bmN0aW9uIChlcnJvciwgaW5mbykge1xuICAgIGNvbnN0IG1heFJldHJpZXMgPSB+fmVycm9yLnJlcXVlc3QucmVxdWVzdC5yZXRyaWVzO1xuICAgIGNvbnN0IGFmdGVyID0gfn5lcnJvci5yZXF1ZXN0LnJlcXVlc3QucmV0cnlBZnRlcjtcbiAgICBvcHRpb25zLnJlcXVlc3QucmV0cnlDb3VudCA9IGluZm8ucmV0cnlDb3VudCArIDE7XG5cbiAgICBpZiAobWF4UmV0cmllcyA+IGluZm8ucmV0cnlDb3VudCkge1xuICAgICAgLy8gUmV0dXJuaW5nIGEgbnVtYmVyIGluc3RydWN0cyB0aGUgbGltaXRlciB0byByZXRyeVxuICAgICAgLy8gdGhlIHJlcXVlc3QgYWZ0ZXIgdGhhdCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGhhdmUgcGFzc2VkXG4gICAgICByZXR1cm4gYWZ0ZXIgKiBzdGF0ZS5yZXRyeUFmdGVyQmFzZVZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsaW1pdGVyLnNjaGVkdWxlKHJlcXVlc3QsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIzLjAuOVwiO1xuZnVuY3Rpb24gcmV0cnkob2N0b2tpdCwgb2N0b2tpdE9wdGlvbnMpIHtcbiAgY29uc3Qgc3RhdGUgPSBPYmplY3QuYXNzaWduKHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHJldHJ5QWZ0ZXJCYXNlVmFsdWU6IDEwMDAsXG4gICAgZG9Ob3RSZXRyeTogWzQwMCwgNDAxLCA0MDMsIDQwNCwgNDIyXSxcbiAgICByZXRyaWVzOiAzXG4gIH0sIG9jdG9raXRPcHRpb25zLnJldHJ5KTtcblxuICBpZiAoc3RhdGUuZW5hYmxlZCkge1xuICAgIG9jdG9raXQuaG9vay5lcnJvcihcInJlcXVlc3RcIiwgZXJyb3JSZXF1ZXN0LmJpbmQobnVsbCwgb2N0b2tpdCwgc3RhdGUpKTtcbiAgICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgd3JhcFJlcXVlc3QuYmluZChudWxsLCBzdGF0ZSkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZXRyeToge1xuICAgICAgcmV0cnlSZXF1ZXN0OiAoZXJyb3IsIHJldHJpZXMsIHJldHJ5QWZ0ZXIpID0+IHtcbiAgICAgICAgZXJyb3IucmVxdWVzdC5yZXF1ZXN0ID0gT2JqZWN0LmFzc2lnbih7fSwgZXJyb3IucmVxdWVzdC5yZXF1ZXN0LCB7XG4gICAgICAgICAgcmV0cmllczogcmV0cmllcyxcbiAgICAgICAgICByZXRyeUFmdGVyOiByZXRyeUFmdGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxucmV0cnkuVkVSU0lPTiA9IFZFUlNJT047XG5cbmV4cG9ydHMuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnRzLnJldHJ5ID0gcmV0cnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBcnRpZmFjdEludGVybmFsID0gZXhwb3J0cy5nZXRBcnRpZmFjdFB1YmxpYyA9IHZvaWQgMDtcbmNvbnN0IGdpdGh1Yl8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1YlwiKTtcbmNvbnN0IHBsdWdpbl9yZXRyeV8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXRyeVwiKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWIvbGliL3V0aWxzXCIpO1xuY29uc3QgcmV0cnlfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vcmV0cnktb3B0aW9uc1wiKTtcbmNvbnN0IHBsdWdpbl9yZXF1ZXN0X2xvZ18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZ1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IGFydGlmYWN0X3R3aXJwX2NsaWVudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9hcnRpZmFjdC10d2lycC1jbGllbnRcIik7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvZXJyb3JzXCIpO1xuZnVuY3Rpb24gZ2V0QXJ0aWZhY3RQdWJsaWMoYXJ0aWZhY3ROYW1lLCB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBbcmV0cnlPcHRzLCByZXF1ZXN0T3B0c10gPSAoMCwgcmV0cnlfb3B0aW9uc18xLmdldFJldHJ5T3B0aW9ucykodXRpbHNfMS5kZWZhdWx0cyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICBsb2c6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogKDAsIHVzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRTdHJpbmcpKCksXG4gICAgICAgICAgICBwcmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmV0cnk6IHJldHJ5T3B0cyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdpdGh1YiA9ICgwLCBnaXRodWJfMS5nZXRPY3Rva2l0KSh0b2tlbiwgb3B0cywgcGx1Z2luX3JldHJ5XzEucmV0cnksIHBsdWdpbl9yZXF1ZXN0X2xvZ18xLnJlcXVlc3RMb2cpO1xuICAgICAgICBjb25zdCBnZXRBcnRpZmFjdFJlc3AgPSB5aWVsZCBnaXRodWIucmVxdWVzdCgnR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3Rzez9uYW1lfScsIHtcbiAgICAgICAgICAgIG93bmVyOiByZXBvc2l0b3J5T3duZXIsXG4gICAgICAgICAgICByZXBvOiByZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgIHJ1bl9pZDogd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0TmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGdldEFydGlmYWN0UmVzcC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkludmFsaWRSZXNwb25zZUVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGZyb20gR2l0SHViIEFQSTogJHtnZXRBcnRpZmFjdFJlc3Auc3RhdHVzfSAoJHsoX2EgPSBnZXRBcnRpZmFjdFJlc3AgPT09IG51bGwgfHwgZ2V0QXJ0aWZhY3RSZXNwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRBcnRpZmFjdFJlc3AuaGVhZGVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWyd4LWdpdGh1Yi1yZXF1ZXN0LWlkJ119KWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXJ0aWZhY3ROb3RGb3VuZEVycm9yKGBBcnRpZmFjdCBub3QgZm91bmQgZm9yIG5hbWU6ICR7YXJ0aWZhY3ROYW1lfVxuICAgICAgICBQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBhcnRpZmFjdCBpcyBub3QgZXhwaXJlZCBhbmQgdGhlIGFydGlmYWN0IHdhcyB1cGxvYWRlZCB1c2luZyBhIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0b29sa2l0L3VwbG9hZC1hcnRpZmFjdC5cbiAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSBHaXRIdWIgQXJ0aWZhY3RzIEZBUTogaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iL21haW4vcGFja2FnZXMvYXJ0aWZhY3QvZG9jcy9mYXEubWRgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJ0aWZhY3QgPSBnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHNbMF07XG4gICAgICAgIGlmIChnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgYXJ0aWZhY3QgPSBnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHMuc29ydCgoYSwgYikgPT4gYi5pZCAtIGEuaWQpWzBdO1xuICAgICAgICAgICAgY29yZS5kZWJ1ZyhgTW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBmb3VuZCBmb3IgYSBzaW5nbGUgbmFtZSwgcmV0dXJuaW5nIG5ld2VzdCAoaWQ6ICR7YXJ0aWZhY3QuaWR9KWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcnRpZmFjdDoge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IGFydGlmYWN0LmlkLFxuICAgICAgICAgICAgICAgIHNpemU6IGFydGlmYWN0LnNpemVfaW5fYnl0ZXMsXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBhcnRpZmFjdC5jcmVhdGVkX2F0ID8gbmV3IERhdGUoYXJ0aWZhY3QuY3JlYXRlZF9hdCkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0QXJ0aWZhY3RQdWJsaWMgPSBnZXRBcnRpZmFjdFB1YmxpYztcbmZ1bmN0aW9uIGdldEFydGlmYWN0SW50ZXJuYWwoYXJ0aWZhY3ROYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZUZpbHRlcjogZ2VuZXJhdGVkXzEuU3RyaW5nVmFsdWUuY3JlYXRlKHsgdmFsdWU6IGFydGlmYWN0TmFtZSB9KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBhcnRpZmFjdENsaWVudC5MaXN0QXJ0aWZhY3RzKHJlcSk7XG4gICAgICAgIGlmIChyZXMuYXJ0aWZhY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkFydGlmYWN0Tm90Rm91bmRFcnJvcihgQXJ0aWZhY3Qgbm90IGZvdW5kIGZvciBuYW1lOiAke2FydGlmYWN0TmFtZX1cbiAgICAgICAgUGxlYXNlIGVuc3VyZSB0aGF0IHlvdXIgYXJ0aWZhY3QgaXMgbm90IGV4cGlyZWQgYW5kIHRoZSBhcnRpZmFjdCB3YXMgdXBsb2FkZWQgdXNpbmcgYSBjb21wYXRpYmxlIHZlcnNpb24gb2YgdG9vbGtpdC91cGxvYWQtYXJ0aWZhY3QuXG4gICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCB2aXNpdCB0aGUgR2l0SHViIEFydGlmYWN0cyBGQVE6IGh0dHBzOi8vZ2l0aHViLmNvbS9hY3Rpb25zL3Rvb2xraXQvYmxvYi9tYWluL3BhY2thZ2VzL2FydGlmYWN0L2RvY3MvZmFxLm1kYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFydGlmYWN0ID0gcmVzLmFydGlmYWN0c1swXTtcbiAgICAgICAgaWYgKHJlcy5hcnRpZmFjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgYXJ0aWZhY3QgPSByZXMuYXJ0aWZhY3RzLnNvcnQoKGEsIGIpID0+IE51bWJlcihiLmRhdGFiYXNlSWQpIC0gTnVtYmVyKGEuZGF0YWJhc2VJZCkpWzBdO1xuICAgICAgICAgICAgY29yZS5kZWJ1ZyhgTW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBmb3VuZCBmb3IgYSBzaW5nbGUgbmFtZSwgcmV0dXJuaW5nIG5ld2VzdCAoaWQ6ICR7YXJ0aWZhY3QuZGF0YWJhc2VJZH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFydGlmYWN0OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogTnVtYmVyKGFydGlmYWN0LmRhdGFiYXNlSWQpLFxuICAgICAgICAgICAgICAgIHNpemU6IE51bWJlcihhcnRpZmFjdC5zaXplKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGFydGlmYWN0LmNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgICAgICA/IGdlbmVyYXRlZF8xLlRpbWVzdGFtcC50b0RhdGUoYXJ0aWZhY3QuY3JlYXRlZEF0KVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRBcnRpZmFjdEludGVybmFsID0gZ2V0QXJ0aWZhY3RJbnRlcm5hbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGV0ZUFydGlmYWN0SW50ZXJuYWwgPSBleHBvcnRzLmRlbGV0ZUFydGlmYWN0UHVibGljID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG5jb25zdCBnaXRodWJfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWJcIik7XG5jb25zdCB1c2VyX2FnZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3VzZXItYWdlbnRcIik7XG5jb25zdCByZXRyeV9vcHRpb25zXzEgPSByZXF1aXJlKFwiLi4vZmluZC9yZXRyeS1vcHRpb25zXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWIvbGliL3V0aWxzXCIpO1xuY29uc3QgcGx1Z2luX3JlcXVlc3RfbG9nXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCIpO1xuY29uc3QgcGx1Z2luX3JldHJ5XzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJldHJ5XCIpO1xuY29uc3QgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGdldF9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4uL2ZpbmQvZ2V0LWFydGlmYWN0XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIGRlbGV0ZUFydGlmYWN0UHVibGljKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgW3JldHJ5T3B0cywgcmVxdWVzdE9wdHNdID0gKDAsIHJldHJ5X29wdGlvbnNfMS5nZXRSZXRyeU9wdGlvbnMpKHV0aWxzXzEuZGVmYXVsdHMpO1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgbG9nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6ICgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpLFxuICAgICAgICAgICAgcHJldmlld3M6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJldHJ5OiByZXRyeU9wdHMsXG4gICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0c1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnaXRodWIgPSAoMCwgZ2l0aHViXzEuZ2V0T2N0b2tpdCkodG9rZW4sIG9wdHMsIHBsdWdpbl9yZXRyeV8xLnJldHJ5LCBwbHVnaW5fcmVxdWVzdF9sb2dfMS5yZXF1ZXN0TG9nKTtcbiAgICAgICAgY29uc3QgZ2V0QXJ0aWZhY3RSZXNwID0geWllbGQgKDAsIGdldF9hcnRpZmFjdF8xLmdldEFydGlmYWN0UHVibGljKShhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKTtcbiAgICAgICAgY29uc3QgZGVsZXRlQXJ0aWZhY3RSZXNwID0geWllbGQgZ2l0aHViLnJlc3QuYWN0aW9ucy5kZWxldGVBcnRpZmFjdCh7XG4gICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgcmVwbzogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgICBhcnRpZmFjdF9pZDogZ2V0QXJ0aWZhY3RSZXNwLmFydGlmYWN0LmlkXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGVsZXRlQXJ0aWZhY3RSZXNwLnN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuSW52YWxpZFJlc3BvbnNlRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgZnJvbSBHaXRIdWIgQVBJOiAke2RlbGV0ZUFydGlmYWN0UmVzcC5zdGF0dXN9ICgkeyhfYSA9IGRlbGV0ZUFydGlmYWN0UmVzcCA9PT0gbnVsbCB8fCBkZWxldGVBcnRpZmFjdFJlc3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGV0ZUFydGlmYWN0UmVzcC5oZWFkZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbJ3gtZ2l0aHViLXJlcXVlc3QtaWQnXX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBnZXRBcnRpZmFjdFJlc3AuYXJ0aWZhY3QuaWRcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RQdWJsaWMgPSBkZWxldGVBcnRpZmFjdFB1YmxpYztcbmZ1bmN0aW9uIGRlbGV0ZUFydGlmYWN0SW50ZXJuYWwoYXJ0aWZhY3ROYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCBsaXN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWVGaWx0ZXI6IGdlbmVyYXRlZF8xLlN0cmluZ1ZhbHVlLmNyZWF0ZSh7IHZhbHVlOiBhcnRpZmFjdE5hbWUgfSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGlzdFJlcyA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMobGlzdFJlcSk7XG4gICAgICAgIGlmIChsaXN0UmVzLmFydGlmYWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BcnRpZmFjdE5vdEZvdW5kRXJyb3IoYEFydGlmYWN0IG5vdCBmb3VuZCBmb3IgbmFtZTogJHthcnRpZmFjdE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFydGlmYWN0ID0gbGlzdFJlcy5hcnRpZmFjdHNbMF07XG4gICAgICAgIGlmIChsaXN0UmVzLmFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhcnRpZmFjdCA9IGxpc3RSZXMuYXJ0aWZhY3RzLnNvcnQoKGEsIGIpID0+IE51bWJlcihiLmRhdGFiYXNlSWQpIC0gTnVtYmVyKGEuZGF0YWJhc2VJZCkpWzBdO1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYE1vcmUgdGhhbiBvbmUgYXJ0aWZhY3QgZm91bmQgZm9yIGEgc2luZ2xlIG5hbWUsIHJldHVybmluZyBuZXdlc3QgKGlkOiAke2FydGlmYWN0LmRhdGFiYXNlSWR9KWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkOiBhcnRpZmFjdC53b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBhcnRpZmFjdC53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzID0geWllbGQgYXJ0aWZhY3RDbGllbnQuRGVsZXRlQXJ0aWZhY3QocmVxKTtcbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgQXJ0aWZhY3QgJyR7YXJ0aWZhY3ROYW1lfScgKElEOiAke3Jlcy5hcnRpZmFjdElkfSkgZGVsZXRlZGApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IE51bWJlcihyZXMuYXJ0aWZhY3RJZClcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbCA9IGRlbGV0ZUFydGlmYWN0SW50ZXJuYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxldGUtYXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5saXN0QXJ0aWZhY3RzSW50ZXJuYWwgPSBleHBvcnRzLmxpc3RBcnRpZmFjdHNQdWJsaWMgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGdpdGh1Yl8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1YlwiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IHJldHJ5X29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5LW9wdGlvbnNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHNcIik7XG5jb25zdCBwbHVnaW5fcmVxdWVzdF9sb2dfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2dcIik7XG5jb25zdCBwbHVnaW5fcmV0cnlfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmV0cnlcIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuLy8gTGltaXRpbmcgdG8gMTAwMCBmb3IgcGVyZiByZWFzb25zXG5jb25zdCBtYXhpbXVtQXJ0aWZhY3RDb3VudCA9IDEwMDA7XG5jb25zdCBwYWdpbmF0aW9uQ291bnQgPSAxMDA7XG5jb25zdCBtYXhOdW1iZXJPZlBhZ2VzID0gbWF4aW11bUFydGlmYWN0Q291bnQgLyBwYWdpbmF0aW9uQ291bnQ7XG5mdW5jdGlvbiBsaXN0QXJ0aWZhY3RzUHVibGljKHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuLCBsYXRlc3QgPSBmYWxzZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICgwLCBjb3JlXzEuaW5mbykoYEZldGNoaW5nIGFydGlmYWN0IGxpc3QgZm9yIHdvcmtmbG93IHJ1biAke3dvcmtmbG93UnVuSWR9IGluIHJlcG9zaXRvcnkgJHtyZXBvc2l0b3J5T3duZXJ9LyR7cmVwb3NpdG9yeU5hbWV9YCk7XG4gICAgICAgIGxldCBhcnRpZmFjdHMgPSBbXTtcbiAgICAgICAgY29uc3QgW3JldHJ5T3B0cywgcmVxdWVzdE9wdHNdID0gKDAsIHJldHJ5X29wdGlvbnNfMS5nZXRSZXRyeU9wdGlvbnMpKHV0aWxzXzEuZGVmYXVsdHMpO1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgbG9nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6ICgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpLFxuICAgICAgICAgICAgcHJldmlld3M6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJldHJ5OiByZXRyeU9wdHMsXG4gICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0c1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnaXRodWIgPSAoMCwgZ2l0aHViXzEuZ2V0T2N0b2tpdCkodG9rZW4sIG9wdHMsIHBsdWdpbl9yZXRyeV8xLnJldHJ5LCBwbHVnaW5fcmVxdWVzdF9sb2dfMS5yZXF1ZXN0TG9nKTtcbiAgICAgICAgbGV0IGN1cnJlbnRQYWdlTnVtYmVyID0gMTtcbiAgICAgICAgY29uc3QgeyBkYXRhOiBsaXN0QXJ0aWZhY3RSZXNwb25zZSB9ID0geWllbGQgZ2l0aHViLnJlc3QuYWN0aW9ucy5saXN0V29ya2Zsb3dSdW5BcnRpZmFjdHMoe1xuICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgcnVuX2lkOiB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgcGVyX3BhZ2U6IHBhZ2luYXRpb25Db3VudCxcbiAgICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlTnVtYmVyXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgbnVtYmVyT2ZQYWdlcyA9IE1hdGguY2VpbChsaXN0QXJ0aWZhY3RSZXNwb25zZS50b3RhbF9jb3VudCAvIHBhZ2luYXRpb25Db3VudCk7XG4gICAgICAgIGNvbnN0IHRvdGFsQXJ0aWZhY3RDb3VudCA9IGxpc3RBcnRpZmFjdFJlc3BvbnNlLnRvdGFsX2NvdW50O1xuICAgICAgICBpZiAodG90YWxBcnRpZmFjdENvdW50ID4gbWF4aW11bUFydGlmYWN0Q291bnQpIHtcbiAgICAgICAgICAgICgwLCBjb3JlXzEud2FybmluZykoYFdvcmtmbG93IHJ1biAke3dvcmtmbG93UnVuSWR9IGhhcyBtb3JlIHRoYW4gMTAwMCBhcnRpZmFjdHMuIFJlc3VsdHMgd2lsbCBiZSBpbmNvbXBsZXRlIGFzIG9ubHkgdGhlIGZpcnN0ICR7bWF4aW11bUFydGlmYWN0Q291bnR9IGFydGlmYWN0cyB3aWxsIGJlIHJldHVybmVkYCk7XG4gICAgICAgICAgICBudW1iZXJPZlBhZ2VzID0gbWF4TnVtYmVyT2ZQYWdlcztcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGZpcnN0IHBhZ2VcbiAgICAgICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBsaXN0QXJ0aWZhY3RSZXNwb25zZS5hcnRpZmFjdHMpIHtcbiAgICAgICAgICAgIGFydGlmYWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgICAgIGlkOiBhcnRpZmFjdC5pZCxcbiAgICAgICAgICAgICAgICBzaXplOiBhcnRpZmFjdC5zaXplX2luX2J5dGVzLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZF9hdCA/IG5ldyBEYXRlKGFydGlmYWN0LmNyZWF0ZWRfYXQpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYW55IHJlbWFpbmluZyBwYWdlc1xuICAgICAgICBmb3IgKGN1cnJlbnRQYWdlTnVtYmVyOyBjdXJyZW50UGFnZU51bWJlciA8IG51bWJlck9mUGFnZXM7IGN1cnJlbnRQYWdlTnVtYmVyKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlTnVtYmVyKys7XG4gICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgRmV0Y2hpbmcgcGFnZSAke2N1cnJlbnRQYWdlTnVtYmVyfSBvZiBhcnRpZmFjdCBsaXN0YCk7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGE6IGxpc3RBcnRpZmFjdFJlc3BvbnNlIH0gPSB5aWVsZCBnaXRodWIucmVzdC5hY3Rpb25zLmxpc3RXb3JrZmxvd1J1bkFydGlmYWN0cyh7XG4gICAgICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgICAgICByZXBvOiByZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgICAgICBydW5faWQ6IHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgICAgcGVyX3BhZ2U6IHBhZ2luYXRpb25Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBjdXJyZW50UGFnZU51bWJlclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGxpc3RBcnRpZmFjdFJlc3BvbnNlLmFydGlmYWN0cykge1xuICAgICAgICAgICAgICAgIGFydGlmYWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGFydGlmYWN0LmlkLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBhcnRpZmFjdC5zaXplX2luX2J5dGVzLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGFydGlmYWN0LmNyZWF0ZWRfYXRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoYXJ0aWZhY3QuY3JlYXRlZF9hdClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhdGVzdCkge1xuICAgICAgICAgICAgYXJ0aWZhY3RzID0gZmlsdGVyTGF0ZXN0KGFydGlmYWN0cyk7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgRm91bmQgJHthcnRpZmFjdHMubGVuZ3RofSBhcnRpZmFjdChzKWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJ0aWZhY3RzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmxpc3RBcnRpZmFjdHNQdWJsaWMgPSBsaXN0QXJ0aWZhY3RzUHVibGljO1xuZnVuY3Rpb24gbGlzdEFydGlmYWN0c0ludGVybmFsKGxhdGVzdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMocmVxKTtcbiAgICAgICAgbGV0IGFydGlmYWN0cyA9IHJlcy5hcnRpZmFjdHMubWFwKGFydGlmYWN0ID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgaWQ6IE51bWJlcihhcnRpZmFjdC5kYXRhYmFzZUlkKSxcbiAgICAgICAgICAgIHNpemU6IE51bWJlcihhcnRpZmFjdC5zaXplKSxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgPyBnZW5lcmF0ZWRfMS5UaW1lc3RhbXAudG9EYXRlKGFydGlmYWN0LmNyZWF0ZWRBdClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChsYXRlc3QpIHtcbiAgICAgICAgICAgIGFydGlmYWN0cyA9IGZpbHRlckxhdGVzdChhcnRpZmFjdHMpO1xuICAgICAgICB9XG4gICAgICAgICgwLCBjb3JlXzEuaW5mbykoYEZvdW5kICR7YXJ0aWZhY3RzLmxlbmd0aH0gYXJ0aWZhY3QocylgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFydGlmYWN0c1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5saXN0QXJ0aWZhY3RzSW50ZXJuYWwgPSBsaXN0QXJ0aWZhY3RzSW50ZXJuYWw7XG4vKipcbiAqIEZpbHRlcnMgYSBsaXN0IG9mIGFydGlmYWN0cyB0byBvbmx5IGluY2x1ZGUgdGhlIGxhdGVzdCBhcnRpZmFjdCBmb3IgZWFjaCBuYW1lXG4gKiBAcGFyYW0gYXJ0aWZhY3RzIFRoZSBhcnRpZmFjdHMgdG8gZmlsdGVyXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyZWQgbGlzdCBvZiBhcnRpZmFjdHNcbiAqL1xuZnVuY3Rpb24gZmlsdGVyTGF0ZXN0KGFydGlmYWN0cykge1xuICAgIGFydGlmYWN0cy5zb3J0KChhLCBiKSA9PiBiLmlkIC0gYS5pZCk7XG4gICAgY29uc3QgbGF0ZXN0QXJ0aWZhY3RzID0gW107XG4gICAgY29uc3Qgc2VlbkFydGlmYWN0TmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBhcnRpZmFjdHMpIHtcbiAgICAgICAgaWYgKCFzZWVuQXJ0aWZhY3ROYW1lcy5oYXMoYXJ0aWZhY3QubmFtZSkpIHtcbiAgICAgICAgICAgIGxhdGVzdEFydGlmYWN0cy5wdXNoKGFydGlmYWN0KTtcbiAgICAgICAgICAgIHNlZW5BcnRpZmFjdE5hbWVzLmFkZChhcnRpZmFjdC5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGF0ZXN0QXJ0aWZhY3RzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGlzdC1hcnRpZmFjdHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZhdWx0QXJ0aWZhY3RDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vc2hhcmVkL2NvbmZpZ1wiKTtcbmNvbnN0IHVwbG9hZF9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vdXBsb2FkL3VwbG9hZC1hcnRpZmFjdFwiKTtcbmNvbnN0IGRvd25sb2FkX2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9kb3dubG9hZC9kb3dubG9hZC1hcnRpZmFjdFwiKTtcbmNvbnN0IGRlbGV0ZV9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vZGVsZXRlL2RlbGV0ZS1hcnRpZmFjdFwiKTtcbmNvbnN0IGdldF9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vZmluZC9nZXQtYXJ0aWZhY3RcIik7XG5jb25zdCBsaXN0X2FydGlmYWN0c18xID0gcmVxdWlyZShcIi4vZmluZC9saXN0LWFydGlmYWN0c1wiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vc2hhcmVkL2Vycm9yc1wiKTtcbi8qKlxuICogVGhlIGRlZmF1bHQgYXJ0aWZhY3QgY2xpZW50IHRoYXQgaXMgdXNlZCBieSB0aGUgYXJ0aWZhY3QgYWN0aW9uKHMpLlxuICovXG5jbGFzcyBEZWZhdWx0QXJ0aWZhY3RDbGllbnQge1xuICAgIHVwbG9hZEFydGlmYWN0KG5hbWUsIGZpbGVzLCByb290RGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgY29uZmlnXzEuaXNHaGVzKSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5HSEVTTm90U3VwcG9ydGVkRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCB1cGxvYWRfYXJ0aWZhY3RfMS51cGxvYWRBcnRpZmFjdCkobmFtZSwgZmlsZXMsIHJvb3REaXJlY3RvcnksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgQXJ0aWZhY3QgdXBsb2FkIGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBpcyBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkb3dubG9hZEFydGlmYWN0KGFydGlmYWN0SWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiB9IH0gPSBvcHRpb25zLCBkb3dubG9hZE9wdGlvbnMgPSBfX3Jlc3Qob3B0aW9ucywgW1wiZmluZEJ5XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBkb3dubG9hZF9hcnRpZmFjdF8xLmRvd25sb2FkQXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0SWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuLCBkb3dubG9hZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRvd25sb2FkX2FydGlmYWN0XzEuZG93bmxvYWRBcnRpZmFjdEludGVybmFsKShhcnRpZmFjdElkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEud2FybmluZykoYERvd25sb2FkIEFydGlmYWN0IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsaXN0QXJ0aWZhY3RzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiB9IH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGxpc3RfYXJ0aWZhY3RzXzEubGlzdEFydGlmYWN0c1B1YmxpYykod29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sYXRlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGxpc3RfYXJ0aWZhY3RzXzEubGlzdEFydGlmYWN0c0ludGVybmFsKShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGF0ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEud2FybmluZykoYExpc3RpbmcgQXJ0aWZhY3RzIGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRBcnRpZmFjdChhcnRpZmFjdE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiB9IH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGdldF9hcnRpZmFjdF8xLmdldEFydGlmYWN0UHVibGljKShhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBnZXRfYXJ0aWZhY3RfMS5nZXRBcnRpZmFjdEludGVybmFsKShhcnRpZmFjdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgR2V0IEFydGlmYWN0IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWxldGVBcnRpZmFjdChhcnRpZmFjdE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB3b3JrZmxvd1J1bklkLCB0b2tlbiB9IH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRlbGV0ZV9hcnRpZmFjdF8xLmRlbGV0ZUFydGlmYWN0UHVibGljKShhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBkZWxldGVfYXJ0aWZhY3RfMS5kZWxldGVBcnRpZmFjdEludGVybmFsKShhcnRpZmFjdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgRGVsZXRlIEFydGlmYWN0IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVmYXVsdEFydGlmYWN0Q2xpZW50ID0gRGVmYXVsdEFydGlmYWN0Q2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcmZhY2VzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNsaWVudF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvY2xpZW50XCIpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3NoYXJlZC9pbnRlcmZhY2VzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcm5hbC9zaGFyZWQvZXJyb3JzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcm5hbC9jbGllbnRcIiksIGV4cG9ydHMpO1xuY29uc3QgY2xpZW50ID0gbmV3IGNsaWVudF8xLkRlZmF1bHRBcnRpZmFjdENsaWVudCgpO1xuZXhwb3J0cy5kZWZhdWx0ID0gY2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY2xhc3MgQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogSHlkcmF0ZSB0aGUgY29udGV4dCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgdGhpcy5wYXlsb2FkID0ge307XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCkge1xuICAgICAgICAgICAgaWYgKCgwLCBmc18xLmV4aXN0c1N5bmMpKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGF5bG9hZCA9IEpTT04ucGFyc2UoKDAsIGZzXzEucmVhZEZpbGVTeW5jKShwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSDtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgR0lUSFVCX0VWRU5UX1BBVEggJHtwYXRofSBkb2VzIG5vdCBleGlzdCR7b3NfMS5FT0x9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudE5hbWUgPSBwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfTkFNRTtcbiAgICAgICAgdGhpcy5zaGEgPSBwcm9jZXNzLmVudi5HSVRIVUJfU0hBO1xuICAgICAgICB0aGlzLnJlZiA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRUY7XG4gICAgICAgIHRoaXMud29ya2Zsb3cgPSBwcm9jZXNzLmVudi5HSVRIVUJfV09SS0ZMT1c7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVElPTjtcbiAgICAgICAgdGhpcy5hY3RvciA9IHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RPUjtcbiAgICAgICAgdGhpcy5qb2IgPSBwcm9jZXNzLmVudi5HSVRIVUJfSk9CO1xuICAgICAgICB0aGlzLnJ1bk51bWJlciA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fTlVNQkVSLCAxMCk7XG4gICAgICAgIHRoaXMucnVuSWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5HSVRIVUJfUlVOX0lELCAxMCk7XG4gICAgICAgIHRoaXMuYXBpVXJsID0gKF9hID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FQSV9VUkwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGBodHRwczovL2FwaS5naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5zZXJ2ZXJVcmwgPSAoX2IgPSBwcm9jZXNzLmVudi5HSVRIVUJfU0VSVkVSX1VSTCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogYGh0dHBzOi8vZ2l0aHViLmNvbWA7XG4gICAgICAgIHRoaXMuZ3JhcGhxbFVybCA9XG4gICAgICAgICAgICAoX2MgPSBwcm9jZXNzLmVudi5HSVRIVUJfR1JBUEhRTF9VUkwpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGBodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWxgO1xuICAgIH1cbiAgICBnZXQgaXNzdWUoKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnBheWxvYWQ7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMucmVwbyksIHsgbnVtYmVyOiAocGF5bG9hZC5pc3N1ZSB8fCBwYXlsb2FkLnB1bGxfcmVxdWVzdCB8fCBwYXlsb2FkKS5udW1iZXIgfSk7XG4gICAgfVxuICAgIGdldCByZXBvKCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtvd25lciwgcmVwb10gPSBwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgcmV0dXJuIHsgb3duZXIsIHJlcG8gfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3duZXI6IHRoaXMucGF5bG9hZC5yZXBvc2l0b3J5Lm93bmVyLmxvZ2luLFxuICAgICAgICAgICAgICAgIHJlcG86IHRoaXMucGF5bG9hZC5yZXBvc2l0b3J5Lm5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY29udGV4dC5yZXBvIHJlcXVpcmVzIGEgR0lUSFVCX1JFUE9TSVRPUlkgZW52aXJvbm1lbnQgdmFyaWFibGUgbGlrZSAnb3duZXIvcmVwbydcIik7XG4gICAgfVxufVxuZXhwb3J0cy5Db250ZXh0ID0gQ29udGV4dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRleHQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEFwaUJhc2VVcmwgPSBleHBvcnRzLmdldFByb3h5RmV0Y2ggPSBleHBvcnRzLmdldFByb3h5QWdlbnREaXNwYXRjaGVyID0gZXhwb3J0cy5nZXRQcm94eUFnZW50ID0gZXhwb3J0cy5nZXRBdXRoU3RyaW5nID0gdm9pZCAwO1xuY29uc3QgaHR0cENsaWVudCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIikpO1xuY29uc3QgdW5kaWNpXzEgPSByZXF1aXJlKFwidW5kaWNpXCIpO1xuZnVuY3Rpb24gZ2V0QXV0aFN0cmluZyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGlmICghdG9rZW4gJiYgIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB0b2tlbiBvciBvcHRzLmF1dGggaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4gJiYgb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyB0b2tlbiBhbmQgb3B0cy5hdXRoIG1heSBub3QgYm90aCBiZSBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBvcHRpb25zLmF1dGggPT09ICdzdHJpbmcnID8gb3B0aW9ucy5hdXRoIDogYHRva2VuICR7dG9rZW59YDtcbn1cbmV4cG9ydHMuZ2V0QXV0aFN0cmluZyA9IGdldEF1dGhTdHJpbmc7XG5mdW5jdGlvbiBnZXRQcm94eUFnZW50KGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaGMgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCk7XG4gICAgcmV0dXJuIGhjLmdldEFnZW50KGRlc3RpbmF0aW9uVXJsKTtcbn1cbmV4cG9ydHMuZ2V0UHJveHlBZ2VudCA9IGdldFByb3h5QWdlbnQ7XG5mdW5jdGlvbiBnZXRQcm94eUFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCkge1xuICAgIGNvbnN0IGhjID0gbmV3IGh0dHBDbGllbnQuSHR0cENsaWVudCgpO1xuICAgIHJldHVybiBoYy5nZXRBZ2VudERpc3BhdGNoZXIoZGVzdGluYXRpb25VcmwpO1xufVxuZXhwb3J0cy5nZXRQcm94eUFnZW50RGlzcGF0Y2hlciA9IGdldFByb3h5QWdlbnREaXNwYXRjaGVyO1xuZnVuY3Rpb24gZ2V0UHJveHlGZXRjaChkZXN0aW5hdGlvblVybCkge1xuICAgIGNvbnN0IGh0dHBEaXNwYXRjaGVyID0gZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIoZGVzdGluYXRpb25VcmwpO1xuICAgIGNvbnN0IHByb3h5RmV0Y2ggPSAodXJsLCBvcHRzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiAoMCwgdW5kaWNpXzEuZmV0Y2gpKHVybCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRzKSwgeyBkaXNwYXRjaGVyOiBodHRwRGlzcGF0Y2hlciB9KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb3h5RmV0Y2g7XG59XG5leHBvcnRzLmdldFByb3h5RmV0Y2ggPSBnZXRQcm94eUZldGNoO1xuZnVuY3Rpb24gZ2V0QXBpQmFzZVVybCgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9BUElfVVJMJ10gfHwgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nO1xufVxuZXhwb3J0cy5nZXRBcGlCYXNlVXJsID0gZ2V0QXBpQmFzZVVybDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGVuZHBvaW50OiAoKSA9PiBlbmRwb2ludFxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhkaXN0X3NyY19leHBvcnRzKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50ID0gcmVxdWlyZShcInVuaXZlcnNhbC11c2VyLWFnZW50XCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjkuMC41XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xudmFyIHVzZXJBZ2VudCA9IGBvY3Rva2l0LWVuZHBvaW50LmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gO1xudmFyIERFRkFVTFRTID0ge1xuICBtZXRob2Q6IFwiR0VUXCIsXG4gIGJhc2VVcmw6IFwiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVwiLFxuICBoZWFkZXJzOiB7XG4gICAgYWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvblwiLFxuICAgIFwidXNlci1hZ2VudFwiOiB1c2VyQWdlbnRcbiAgfSxcbiAgbWVkaWFUeXBlOiB7XG4gICAgZm9ybWF0OiBcIlwiXG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2xvd2VyY2FzZS1rZXlzLmpzXG5mdW5jdGlvbiBsb3dlcmNhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5yZWR1Y2UoKG5ld09iaiwga2V5KSA9PiB7XG4gICAgbmV3T2JqW2tleS50b0xvd2VyQ2FzZSgpXSA9IG9iamVjdFtrZXldO1xuICAgIHJldHVybiBuZXdPYmo7XG4gIH0sIHt9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvaXMtcGxhaW4tb2JqZWN0LmpzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIilcbiAgICByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKVxuICAgIHJldHVybiB0cnVlO1xuICBjb25zdCBDdG9yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJiBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbChDdG9yKSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwodmFsdWUpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9tZXJnZS1kZWVwLmpzXG5mdW5jdGlvbiBtZXJnZURlZXAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpO1xuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChvcHRpb25zW2tleV0pKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGVmYXVsdHMpKVxuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBba2V5XTogb3B0aW9uc1trZXldIH0pO1xuICAgICAgZWxzZVxuICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlRGVlcChkZWZhdWx0c1trZXldLCBvcHRpb25zW2tleV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBba2V5XTogb3B0aW9uc1trZXldIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL3JlbW92ZS11bmRlZmluZWQtcHJvcGVydGllcy5qc1xuZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvYmopIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKG9ialtrZXldID09PSB2b2lkIDApIHtcbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL21lcmdlLmpzXG5mdW5jdGlvbiBtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiByb3V0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGxldCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoXCIgXCIpO1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHVybCA/IHsgbWV0aG9kLCB1cmwgfSA6IHsgdXJsOiBtZXRob2QgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHJvdXRlKTtcbiAgfVxuICBvcHRpb25zLmhlYWRlcnMgPSBsb3dlcmNhc2VLZXlzKG9wdGlvbnMuaGVhZGVycyk7XG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucyk7XG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IG1lcmdlRGVlcChkZWZhdWx0cyB8fCB7fSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLnVybCA9PT0gXCIvZ3JhcGhxbFwiKSB7XG4gICAgaWYgKGRlZmF1bHRzICYmIGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cy5maWx0ZXIoXG4gICAgICAgIChwcmV2aWV3KSA9PiAhbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MuaW5jbHVkZXMocHJldmlldylcbiAgICAgICkuY29uY2F0KG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzKTtcbiAgICB9XG4gICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSAobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgfHwgW10pLm1hcCgocHJldmlldykgPT4gcHJldmlldy5yZXBsYWNlKC8tcHJldmlldy8sIFwiXCIpKTtcbiAgfVxuICByZXR1cm4gbWVyZ2VkT3B0aW9ucztcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvYWRkLXF1ZXJ5LXBhcmFtZXRlcnMuanNcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qgc2VwYXJhdG9yID0gL1xcPy8udGVzdCh1cmwpID8gXCImXCIgOiBcIj9cIjtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKTtcbiAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcmV0dXJuIHVybCArIHNlcGFyYXRvciArIG5hbWVzLm1hcCgobmFtZSkgPT4ge1xuICAgIGlmIChuYW1lID09PSBcInFcIikge1xuICAgICAgcmV0dXJuIFwicT1cIiArIHBhcmFtZXRlcnMucS5zcGxpdChcIitcIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbihcIitcIik7XG4gICAgfVxuICAgIHJldHVybiBgJHtuYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJzW25hbWVdKX1gO1xuICB9KS5qb2luKFwiJlwiKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvZXh0cmFjdC11cmwtdmFyaWFibGUtbmFtZXMuanNcbnZhciB1cmxWYXJpYWJsZVJlZ2V4ID0gL1xce1tefV0rXFx9L2c7XG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC9eXFxXK3xcXFcrJC9nLCBcIlwiKS5zcGxpdCgvLC8pO1xufVxuZnVuY3Rpb24gZXh0cmFjdFVybFZhcmlhYmxlTmFtZXModXJsKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSB1cmwubWF0Y2godXJsVmFyaWFibGVSZWdleCk7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcy5tYXAocmVtb3ZlTm9uQ2hhcnMpLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvb21pdC5qc1xuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXNUb09taXQpIHtcbiAgY29uc3QgcmVzdWx0ID0geyBfX3Byb3RvX186IG51bGwgfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xuICAgIGlmIChrZXlzVG9PbWl0LmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL3VybC10ZW1wbGF0ZS5qc1xuZnVuY3Rpb24gZW5jb2RlUmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoLyglWzAtOUEtRmEtZl17Mn0pL2cpLm1hcChmdW5jdGlvbihwYXJ0KSB7XG4gICAgaWYgKCEvJVswLTlBLUZhLWZdLy50ZXN0KHBhcnQpKSB7XG4gICAgICBwYXJ0ID0gZW5jb2RlVVJJKHBhcnQpLnJlcGxhY2UoLyU1Qi9nLCBcIltcIikucmVwbGFjZSgvJTVEL2csIFwiXVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnQ7XG4gIH0pLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBlbmNvZGVVbnJlc2VydmVkKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbihjKSB7XG4gICAgcmV0dXJuIFwiJVwiICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwga2V5KSB7XG4gIHZhbHVlID0gb3BlcmF0b3IgPT09IFwiK1wiIHx8IG9wZXJhdG9yID09PSBcIiNcIiA/IGVuY29kZVJlc2VydmVkKHZhbHVlKSA6IGVuY29kZVVucmVzZXJ2ZWQodmFsdWUpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBpc0RlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2b2lkIDAgJiYgdmFsdWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSB7XG4gIHJldHVybiBvcGVyYXRvciA9PT0gXCI7XCIgfHwgb3BlcmF0b3IgPT09IFwiJlwiIHx8IG9wZXJhdG9yID09PSBcIj9cIjtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwga2V5LCBtb2RpZmllcikge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0W2tleV0sIHJlc3VsdCA9IFtdO1xuICBpZiAoaXNEZWZpbmVkKHZhbHVlKSAmJiB2YWx1ZSAhPT0gXCJcIikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIGlmIChtb2RpZmllciAmJiBtb2RpZmllciAhPT0gXCIqXCIpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgcGFyc2VJbnQobW9kaWZpZXIsIDEwKSk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChcbiAgICAgICAgZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobW9kaWZpZXIgPT09IFwiKlwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24odmFsdWUyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlMiwgaXNLZXlPcGVyYXRvcihvcGVyYXRvcikgPyBrZXkgOiBcIlwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10sIGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG1wID0gW107XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24odmFsdWUyKSB7XG4gICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVW5yZXNlcnZlZChrKSk7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB0bXAuam9pbihcIixcIikpO1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh0bXAuam9pbihcIixcIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChvcGVyYXRvciA9PT0gXCI7XCIpIHtcbiAgICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcIiAmJiAob3BlcmF0b3IgPT09IFwiJlwiIHx8IG9wZXJhdG9yID09PSBcIj9cIikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiKSB7XG4gICAgICByZXN1bHQucHVzaChcIlwiKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHBhcnNlVXJsKHRlbXBsYXRlKSB7XG4gIHJldHVybiB7XG4gICAgZXhwYW5kOiBleHBhbmQuYmluZChudWxsLCB0ZW1wbGF0ZSlcbiAgfTtcbn1cbmZ1bmN0aW9uIGV4cGFuZCh0ZW1wbGF0ZSwgY29udGV4dCkge1xuICB2YXIgb3BlcmF0b3JzID0gW1wiK1wiLCBcIiNcIiwgXCIuXCIsIFwiL1wiLCBcIjtcIiwgXCI/XCIsIFwiJlwiXTtcbiAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKFxuICAgIC9cXHsoW15cXHtcXH1dKylcXH18KFteXFx7XFx9XSspL2csXG4gICAgZnVuY3Rpb24oXywgZXhwcmVzc2lvbiwgbGl0ZXJhbCkge1xuICAgICAgaWYgKGV4cHJlc3Npb24pIHtcbiAgICAgICAgbGV0IG9wZXJhdG9yID0gXCJcIjtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICAgIGlmIChvcGVyYXRvcnMuaW5kZXhPZihleHByZXNzaW9uLmNoYXJBdCgwKSkgIT09IC0xKSB7XG4gICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmNoYXJBdCgwKTtcbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwcmVzc2lvbi5zcGxpdCgvLC9nKS5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlhYmxlKSB7XG4gICAgICAgICAgdmFyIHRtcCA9IC8oW146XFwqXSopKD86OihcXGQrKXwoXFwqKSk/Ly5leGVjKHZhcmlhYmxlKTtcbiAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIHRtcFsxXSwgdG1wWzJdIHx8IHRtcFszXSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yICE9PSBcIitcIikge1xuICAgICAgICAgIHZhciBzZXBhcmF0b3IgPSBcIixcIjtcbiAgICAgICAgICBpZiAob3BlcmF0b3IgPT09IFwiP1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBcIiZcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSBcIiNcIikge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAodmFsdWVzLmxlbmd0aCAhPT0gMCA/IG9wZXJhdG9yIDogXCJcIikgKyB2YWx1ZXMuam9pbihzZXBhcmF0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB2YWx1ZXMuam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVSZXNlcnZlZChsaXRlcmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG4gIGlmICh0ZW1wbGF0ZSA9PT0gXCIvXCIpIHtcbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFyc2UuanNcbmZ1bmN0aW9uIHBhcnNlKG9wdGlvbnMpIHtcbiAgbGV0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gIGxldCB1cmwgPSAob3B0aW9ucy51cmwgfHwgXCIvXCIpLnJlcGxhY2UoLzooW2Etel1cXHcrKS9nLCBcInskMX1cIik7XG4gIGxldCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5oZWFkZXJzKTtcbiAgbGV0IGJvZHk7XG4gIGxldCBwYXJhbWV0ZXJzID0gb21pdChvcHRpb25zLCBbXG4gICAgXCJtZXRob2RcIixcbiAgICBcImJhc2VVcmxcIixcbiAgICBcInVybFwiLFxuICAgIFwiaGVhZGVyc1wiLFxuICAgIFwicmVxdWVzdFwiLFxuICAgIFwibWVkaWFUeXBlXCJcbiAgXSk7XG4gIGNvbnN0IHVybFZhcmlhYmxlTmFtZXMgPSBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpO1xuICB1cmwgPSBwYXJzZVVybCh1cmwpLmV4cGFuZChwYXJhbWV0ZXJzKTtcbiAgaWYgKCEvXmh0dHAvLnRlc3QodXJsKSkge1xuICAgIHVybCA9IG9wdGlvbnMuYmFzZVVybCArIHVybDtcbiAgfVxuICBjb25zdCBvbWl0dGVkUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpLmZpbHRlcigob3B0aW9uKSA9PiB1cmxWYXJpYWJsZU5hbWVzLmluY2x1ZGVzKG9wdGlvbikpLmNvbmNhdChcImJhc2VVcmxcIik7XG4gIGNvbnN0IHJlbWFpbmluZ1BhcmFtZXRlcnMgPSBvbWl0KHBhcmFtZXRlcnMsIG9taXR0ZWRQYXJhbWV0ZXJzKTtcbiAgY29uc3QgaXNCaW5hcnlSZXF1ZXN0ID0gL2FwcGxpY2F0aW9uXFwvb2N0ZXQtc3RyZWFtL2kudGVzdChoZWFkZXJzLmFjY2VwdCk7XG4gIGlmICghaXNCaW5hcnlSZXF1ZXN0KSB7XG4gICAgaWYgKG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCkge1xuICAgICAgaGVhZGVycy5hY2NlcHQgPSBoZWFkZXJzLmFjY2VwdC5zcGxpdCgvLC8pLm1hcChcbiAgICAgICAgKGZvcm1hdCkgPT4gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAgICAgL2FwcGxpY2F0aW9uXFwvdm5kKFxcLlxcdyspKFxcLnYzKT8oXFwuXFx3Kyk/KFxcK2pzb24pPyQvLFxuICAgICAgICAgIGBhcHBsaWNhdGlvbi92bmQkMSQyLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWBcbiAgICAgICAgKVxuICAgICAgKS5qb2luKFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKHVybC5lbmRzV2l0aChcIi9ncmFwaHFsXCIpKSB7XG4gICAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIgPSBoZWFkZXJzLmFjY2VwdC5tYXRjaCgvW1xcdy1dKyg/PS1wcmV2aWV3KS9nKSB8fCBbXTtcbiAgICAgICAgaGVhZGVycy5hY2NlcHQgPSBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIuY29uY2F0KG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzKS5tYXAoKHByZXZpZXcpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQgPyBgLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWAgOiBcIitqc29uXCI7XG4gICAgICAgICAgcmV0dXJuIGBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLiR7cHJldmlld30tcHJldmlldyR7Zm9ybWF0fWA7XG4gICAgICAgIH0pLmpvaW4oXCIsXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoW1wiR0VUXCIsIFwiSEVBRFwiXS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgdXJsID0gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcmVtYWluaW5nUGFyYW1ldGVycyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKFwiZGF0YVwiIGluIHJlbWFpbmluZ1BhcmFtZXRlcnMpIHtcbiAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZW1haW5pbmdQYXJhbWV0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnM7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSAmJiB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIjtcbiAgfVxuICBpZiAoW1wiUEFUQ0hcIiwgXCJQVVRcIl0uaW5jbHVkZXMobWV0aG9kKSAmJiB0eXBlb2YgYm9keSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGJvZHkgPSBcIlwiO1xuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgIHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSxcbiAgICB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIiA/IHsgYm9keSB9IDogbnVsbCxcbiAgICBvcHRpb25zLnJlcXVlc3QgPyB7IHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdCB9IDogbnVsbFxuICApO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvZW5kcG9pbnQtd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gZW5kcG9pbnRXaXRoRGVmYXVsdHMoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwYXJzZShtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgREVGQVVMVFMyID0gbWVyZ2Uob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgZW5kcG9pbnQyID0gZW5kcG9pbnRXaXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUzIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlbmRwb2ludDIsIHtcbiAgICBERUZBVUxUUzogREVGQVVMVFMyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIG1lcmdlOiBtZXJnZS5iaW5kKG51bGwsIERFRkFVTFRTMiksXG4gICAgcGFyc2VcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGVuZHBvaW50ID0gd2l0aERlZmF1bHRzKG51bGwsIERFRkFVTFRTKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmRwb2ludFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvRVNNID0gKG1vZCwgaXNOb2RlTW9kZSwgdGFyZ2V0KSA9PiAodGFyZ2V0ID0gbW9kICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSkgOiB7fSwgX19jb3B5UHJvcHMoXG4gIC8vIElmIHRoZSBpbXBvcnRlciBpcyBpbiBub2RlIGNvbXBhdGliaWxpdHkgbW9kZSBvciB0aGlzIGlzIG5vdCBhbiBFU01cbiAgLy8gZmlsZSB0aGF0IGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhIENvbW1vbkpTIGZpbGUgdXNpbmcgYSBCYWJlbC1cbiAgLy8gY29tcGF0aWJsZSB0cmFuc2Zvcm0gKGkuZS4gXCJfX2VzTW9kdWxlXCIgaGFzIG5vdCBiZWVuIHNldCksIHRoZW4gc2V0XG4gIC8vIFwiZGVmYXVsdFwiIHRvIHRoZSBDb21tb25KUyBcIm1vZHVsZS5leHBvcnRzXCIgZm9yIG5vZGUgY29tcGF0aWJpbGl0eS5cbiAgaXNOb2RlTW9kZSB8fCAhbW9kIHx8ICFtb2QuX19lc01vZHVsZSA/IF9fZGVmUHJvcCh0YXJnZXQsIFwiZGVmYXVsdFwiLCB7IHZhbHVlOiBtb2QsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0YXJnZXQsXG4gIG1vZFxuKSk7XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBSZXF1ZXN0RXJyb3I6ICgpID0+IFJlcXVlc3RFcnJvclxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhkaXN0X3NyY19leHBvcnRzKTtcbnZhciBpbXBvcnRfZGVwcmVjYXRpb24gPSByZXF1aXJlKFwiZGVwcmVjYXRpb25cIik7XG52YXIgaW1wb3J0X29uY2UgPSBfX3RvRVNNKHJlcXVpcmUoXCJvbmNlXCIpKTtcbnZhciBsb2dPbmNlQ29kZSA9ICgwLCBpbXBvcnRfb25jZS5kZWZhdWx0KSgoZGVwcmVjYXRpb24pID0+IGNvbnNvbGUud2FybihkZXByZWNhdGlvbikpO1xudmFyIGxvZ09uY2VIZWFkZXJzID0gKDAsIGltcG9ydF9vbmNlLmRlZmF1bHQpKChkZXByZWNhdGlvbikgPT4gY29uc29sZS53YXJuKGRlcHJlY2F0aW9uKSk7XG52YXIgUmVxdWVzdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZTtcbiAgICBsZXQgaGVhZGVycztcbiAgICBpZiAoXCJoZWFkZXJzXCIgaW4gb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5oZWFkZXJzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICAgIH1cbiAgICBpZiAoXCJyZXNwb25zZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgaGVhZGVycyA9IG9wdGlvbnMucmVzcG9uc2UuaGVhZGVycztcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8gLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2RlXCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbG9nT25jZUNvZGUoXG4gICAgICAgICAgbmV3IGltcG9ydF9kZXByZWNhdGlvbi5EZXByZWNhdGlvbihcbiAgICAgICAgICAgIFwiW0BvY3Rva2l0L3JlcXVlc3QtZXJyb3JdIGBlcnJvci5jb2RlYCBpcyBkZXByZWNhdGVkLCB1c2UgYGVycm9yLnN0YXR1c2AuXCJcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBzdGF0dXNDb2RlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhlYWRlcnNcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsb2dPbmNlSGVhZGVycyhcbiAgICAgICAgICBuZXcgaW1wb3J0X2RlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFxuICAgICAgICAgICAgXCJbQG9jdG9raXQvcmVxdWVzdC1lcnJvcl0gYGVycm9yLmhlYWRlcnNgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgZXJyb3IucmVzcG9uc2UuaGVhZGVyc2AuXCJcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzIHx8IHt9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIFJlcXVlc3RFcnJvclxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICByZXF1ZXN0OiAoKSA9PiByZXF1ZXN0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9lbmRwb2ludCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9lbmRwb2ludFwiKTtcbnZhciBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQgPSByZXF1aXJlKFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOC40LjBcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbnZhciBpbXBvcnRfcmVxdWVzdF9lcnJvciA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2V0LWJ1ZmZlci1yZXNwb25zZS5qc1xuZnVuY3Rpb24gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9mZXRjaC13cmFwcGVyLmpzXG5mdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0ICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nID8gcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgOiBjb25zb2xlO1xuICBjb25zdCBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPSAoKF9hID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSkgIT09IGZhbHNlO1xuICBpZiAoaXNQbGFpbk9iamVjdChyZXF1ZXN0T3B0aW9ucy5ib2R5KSB8fCBBcnJheS5pc0FycmF5KHJlcXVlc3RPcHRpb25zLmJvZHkpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpO1xuICB9XG4gIGxldCBoZWFkZXJzID0ge307XG4gIGxldCBzdGF0dXM7XG4gIGxldCB1cmw7XG4gIGxldCB7IGZldGNoIH0gPSBnbG9iYWxUaGlzO1xuICBpZiAoKF9iID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmZldGNoKSB7XG4gICAgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmZldGNoO1xuICB9XG4gIGlmICghZmV0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImZldGNoIGlzIG5vdCBzZXQuIFBsZWFzZSBwYXNzIGEgZmV0Y2ggaW1wbGVtZW50YXRpb24gYXMgbmV3IE9jdG9raXQoeyByZXF1ZXN0OiB7IGZldGNoIH19KS4gTGVhcm4gbW9yZSBhdCBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9vY3Rva2l0LmpzLyNmZXRjaC1taXNzaW5nXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIHtcbiAgICBtZXRob2Q6IHJlcXVlc3RPcHRpb25zLm1ldGhvZCxcbiAgICBib2R5OiByZXF1ZXN0T3B0aW9ucy5ib2R5LFxuICAgIHJlZGlyZWN0OiAoX2MgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2MucmVkaXJlY3QsXG4gICAgaGVhZGVyczogcmVxdWVzdE9wdGlvbnMuaGVhZGVycyxcbiAgICBzaWduYWw6IChfZCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QpID09IG51bGwgPyB2b2lkIDAgOiBfZC5zaWduYWwsXG4gICAgLy8gZHVwbGV4IG11c3QgYmUgc2V0IGlmIHJlcXVlc3QuYm9keSBpcyBSZWFkYWJsZVN0cmVhbSBvciBBc3luYyBJdGVyYWJsZXMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICB1cmwgPSByZXNwb25zZS51cmw7XG4gICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGZvciAoY29uc3Qga2V5QW5kVmFsdWUgb2YgcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXlBbmRWYWx1ZVswXV0gPSBrZXlBbmRWYWx1ZVsxXTtcbiAgICB9XG4gICAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gaGVhZGVycy5saW5rICYmIGhlYWRlcnMubGluay5tYXRjaCgvPChbXj5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke2hlYWRlcnMuc3Vuc2V0fSR7ZGVwcmVjYXRpb25MaW5rID8gYC4gU2VlICR7ZGVwcmVjYXRpb25MaW5rfWAgOiBcIlwifWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDIwNCB8fCBzdGF0dXMgPT09IDIwNSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgaW1wb3J0X3JlcXVlc3RfZXJyb3IuUmVxdWVzdEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiB2b2lkIDBcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIHRocm93IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSlcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2UoZGF0YSksIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSA6IHJlc3BvbnNlLmJvZHk7XG4gIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGRhdGFcbiAgICB9O1xuICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IpXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIilcbiAgICAgIHRocm93IGVycm9yO1xuICAgIGxldCBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBlcnJvci5jYXVzZS5tZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgaW1wb3J0X3JlcXVlc3RfZXJyb3IuUmVxdWVzdEVycm9yKG1lc3NhZ2UsIDUwMCwge1xuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKC9hcHBsaWNhdGlvblxcL2pzb24vLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiByZXNwb25zZS50ZXh0KCkpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGlmICghY29udGVudFR5cGUgfHwgL150ZXh0XFwvfGNoYXJzZXQ9dXRmLTgkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gIH1cbiAgcmV0dXJuIGdldEJ1ZmZlclJlc3BvbnNlKHJlc3BvbnNlKTtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiBkYXRhO1xuICBsZXQgc3VmZml4O1xuICBpZiAoXCJkb2N1bWVudGF0aW9uX3VybFwiIGluIGRhdGEpIHtcbiAgICBzdWZmaXggPSBgIC0gJHtkYXRhLmRvY3VtZW50YXRpb25fdXJsfWA7XG4gIH0gZWxzZSB7XG4gICAgc3VmZml4ID0gXCJcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKFwiLCBcIil9JHtzdWZmaXh9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX0ke3N1ZmZpeH1gO1xuICB9XG4gIHJldHVybiBgVW5rbm93biBlcnJvcjogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZEVuZHBvaW50LCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBlbmRwb2ludDIgPSBvbGRFbmRwb2ludC5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IGZ1bmN0aW9uKHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRPcHRpb25zID0gZW5kcG9pbnQyLm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgICBpZiAoIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0IHx8ICFlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKSB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50Mi5wYXJzZShlbmRwb2ludE9wdGlvbnMpKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdDIgPSAocm91dGUyLCBwYXJhbWV0ZXJzMikgPT4ge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihcbiAgICAgICAgZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50Mi5tZXJnZShyb3V0ZTIsIHBhcmFtZXRlcnMyKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QyLCB7XG4gICAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50MilcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vayhyZXF1ZXN0MiwgZW5kcG9pbnRPcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZW5kcG9pbnQ6IGVuZHBvaW50MixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgcmVxdWVzdCA9IHdpdGhEZWZhdWx0cyhpbXBvcnRfZW5kcG9pbnQuZW5kcG9pbnQsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1yZXF1ZXN0LmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gXG4gIH1cbn0pO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlcXVlc3Rcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3I6ICgpID0+IEdyYXBocWxSZXNwb25zZUVycm9yLFxuICBncmFwaHFsOiAoKSA9PiBncmFwaHFsMixcbiAgd2l0aEN1c3RvbVJlcXVlc3Q6ICgpID0+IHdpdGhDdXN0b21SZXF1ZXN0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9yZXF1ZXN0MyA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI3LjEuMFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xudmFyIGltcG9ydF9yZXF1ZXN0MiA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIGltcG9ydF9yZXF1ZXN0ID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3RcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy9lcnJvci5qc1xuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcbmAgKyBkYXRhLmVycm9ycy5tYXAoKGUpID0+IGAgLSAke2UubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xufVxudmFyIEdyYXBocWxSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QyLCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QyO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMubmFtZSA9IFwiR3JhcGhxbFJlc3BvbnNlRXJyb3JcIjtcbiAgICB0aGlzLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIE5PTl9WQVJJQUJMRV9PUFRJT05TID0gW1xuICBcIm1ldGhvZFwiLFxuICBcImJhc2VVcmxcIixcbiAgXCJ1cmxcIixcbiAgXCJoZWFkZXJzXCIsXG4gIFwicmVxdWVzdFwiLFxuICBcInF1ZXJ5XCIsXG4gIFwibWVkaWFUeXBlXCJcbl07XG52YXIgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbnZhciBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdDIsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBcInF1ZXJ5XCIgaW4gb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgPyBPYmplY3QuYXNzaWduKHsgcXVlcnkgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhcbiAgICBwYXJzZWRPcHRpb25zXG4gICkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICghcmVzdWx0LnZhcmlhYmxlcykge1xuICAgICAgcmVzdWx0LnZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QyLmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmw7XG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdDIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzW2tleV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IoXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZS5kYXRhXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhyZXF1ZXN0MiwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QyLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgbmV3UmVxdWVzdCksXG4gICAgZW5kcG9pbnQ6IG5ld1JlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGdyYXBocWwyID0gd2l0aERlZmF1bHRzKGltcG9ydF9yZXF1ZXN0My5yZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7KDAsIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudC5nZXRVc2VyQWdlbnQpKCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3IsXG4gIGdyYXBocWwsXG4gIHdpdGhDdXN0b21SZXF1ZXN0XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGNyZWF0ZVRva2VuQXV0aDogKCkgPT4gY3JlYXRlVG9rZW5BdXRoXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvYXV0aC5qc1xudmFyIFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kgPSAvXnYxXFwuLztcbnZhciBSRUdFWF9JU19JTlNUQUxMQVRJT04gPSAvXmdoc18vO1xudmFyIFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSID0gL15naHVfLztcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSB0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzO1xuICBjb25zdCBpc0luc3RhbGxhdGlvbiA9IFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kudGVzdCh0b2tlbikgfHwgUkVHRVhfSVNfSU5TVEFMTEFUSU9OLnRlc3QodG9rZW4pO1xuICBjb25zdCBpc1VzZXJUb1NlcnZlciA9IFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSLnRlc3QodG9rZW4pO1xuICBjb25zdCB0b2tlblR5cGUgPSBpc0FwcCA/IFwiYXBwXCIgOiBpc0luc3RhbGxhdGlvbiA/IFwiaW5zdGFsbGF0aW9uXCIgOiBpc1VzZXJUb1NlcnZlciA/IFwidXNlci10by1zZXJ2ZXJcIiA6IFwib2F1dGhcIjtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInRva2VuXCIsXG4gICAgdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWF1dGhvcml6YXRpb24tcHJlZml4LmpzXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2hvb2suanNcbmFzeW5jIGZ1bmN0aW9uIGhvb2sodG9rZW4sIHJlcXVlc3QsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IGVuZHBvaW50ID0gcmVxdWVzdC5lbmRwb2ludC5tZXJnZShcbiAgICByb3V0ZSxcbiAgICBwYXJhbWV0ZXJzXG4gICk7XG4gIGVuZHBvaW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKTtcbiAgcmV0dXJuIHJlcXVlc3QoZW5kcG9pbnQpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBjcmVhdGVUb2tlbkF1dGggPSBmdW5jdGlvbiBjcmVhdGVUb2tlbkF1dGgyKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIlxuICAgICk7XG4gIH1cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZVRva2VuQXV0aFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBPY3Rva2l0OiAoKSA9PiBPY3Rva2l0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcbnZhciBpbXBvcnRfYmVmb3JlX2FmdGVyX2hvb2sgPSByZXF1aXJlKFwiYmVmb3JlLWFmdGVyLWhvb2tcIik7XG52YXIgaW1wb3J0X3JlcXVlc3QgPSByZXF1aXJlKFwiQG9jdG9raXQvcmVxdWVzdFwiKTtcbnZhciBpbXBvcnRfZ3JhcGhxbCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9ncmFwaHFsXCIpO1xudmFyIGltcG9ydF9hdXRoX3Rva2VuID0gcmVxdWlyZShcIkBvY3Rva2l0L2F1dGgtdG9rZW5cIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiNS4yLjBcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgbm9vcCA9ICgpID0+IHtcbn07XG52YXIgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbnZhciBjb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG52YXIgdXNlckFnZW50VHJhaWwgPSBgb2N0b2tpdC1jb3JlLmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gO1xudmFyIE9jdG9raXQgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5WRVJTSU9OID0gVkVSU0lPTjtcbiAgfVxuICBzdGF0aWMgZGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBjb25zdCBPY3Rva2l0V2l0aERlZmF1bHRzID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3NbMF0gfHwge307XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5wbHVnaW5zID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuICBzdGF0aWMgcGx1Z2luKC4uLm5ld1BsdWdpbnMpIHtcbiAgICBjb25zdCBjdXJyZW50UGx1Z2lucyA9IHRoaXMucGx1Z2lucztcbiAgICBjb25zdCBOZXdPY3Rva2l0ID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIHN0YXRpYyB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChcbiAgICAgICAgICBuZXdQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiAhY3VycmVudFBsdWdpbnMuaW5jbHVkZXMocGx1Z2luKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGhvb2sgPSBuZXcgaW1wb3J0X2JlZm9yZV9hZnRlcl9ob29rLkNvbGxlY3Rpb24oKTtcbiAgICBjb25zdCByZXF1ZXN0RGVmYXVsdHMgPSB7XG4gICAgICBiYXNlVXJsOiBpbXBvcnRfcmVxdWVzdC5yZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdID0gb3B0aW9ucy51c2VyQWdlbnQgPyBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHt1c2VyQWdlbnRUcmFpbH1gIDogdXNlckFnZW50VHJhaWw7XG4gICAgaWYgKG9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0ID0gaW1wb3J0X3JlcXVlc3QucmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9ICgwLCBpbXBvcnRfZ3JhcGhxbC53aXRoQ3VzdG9tUmVxdWVzdCkodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgZGVidWc6IG5vb3AsXG4gICAgICAgIGluZm86IG5vb3AsXG4gICAgICAgIHdhcm46IGNvbnNvbGVXYXJuLFxuICAgICAgICBlcnJvcjogY29uc29sZUVycm9yXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5sb2dcbiAgICApO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFvcHRpb25zLmF1dGhTdHJhdGVneSkge1xuICAgICAgaWYgKCFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXV0aCA9ICgwLCBpbXBvcnRfYXV0aF90b2tlbi5jcmVhdGVUb2tlbkF1dGgpKG9wdGlvbnMuYXV0aCk7XG4gICAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBhdXRoU3RyYXRlZ3ksIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGF1dGggPSBhdXRoU3RyYXRlZ3koXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgICAgICAvLyB0aGF0IHNoYXJlcyB0aGUgc2FtZSBpbnRlcm5hbCBzdGF0ZSBhcyB0aGUgY3VycmVudCBvbmUuIFRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICAgICAgb2N0b2tpdDogdGhpcyxcbiAgICAgICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnMuYXV0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zW2ldKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbn07XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgT2N0b2tpdFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzOiAoKSA9PiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLFxuICByZXN0RW5kcG9pbnRNZXRob2RzOiAoKSA9PiByZXN0RW5kcG9pbnRNZXRob2RzXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjEwLjQuMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2VuZXJhdGVkL2VuZHBvaW50cy5qc1xudmFyIEVuZHBvaW50cyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiXG4gICAgXSxcbiAgICBjYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vY2FuY2VsXCJcbiAgICBdLFxuICAgIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yZ1ZhcmlhYmxlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXG4gICAgXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9WYXJpYWJsZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlV29ya2Zsb3dEaXNwYXRjaDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc3BhdGNoZXNcIlxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzL3tjYWNoZV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIlxuICAgIF0sXG4gICAgZGVsZXRlQXJ0aWZhY3Q6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIlxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcnRpZmFjdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH0ve2FyY2hpdmVfZm9ybWF0fVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIlxuICAgIF0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiXG4gICAgXSxcbiAgICBmb3JjZUNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9mb3JjZS1jYW5jZWxcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZUxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUJ5UmVwb0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRBcnRpZmFjdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJdLFxuICAgIGdldEN1c3RvbU9pZGNTdWJDbGFpbUZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnVmFyaWFibGU6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1Blcm1pc3Npb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImFjdGlvbnNcIiwgXCJnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5XCJdIH1cbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCJcbiAgICBdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3c6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1VzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS90aW1pbmdcIlxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCJcbiAgICBdLFxuICAgIGxpc3RFbnZpcm9ubWVudFZhcmlhYmxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIlxuICAgIF0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCJcbiAgICBdLFxuICAgIGxpc3RKb2JzRm9yV29ya2Zsb3dSdW5BdHRlbXB0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCJdLFxuICAgIGxpc3RPcmdWYXJpYWJsZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb09yZ2FuaXphdGlvblNlY3JldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvT3JnYW5pemF0aW9uVmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCJcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bkFydGlmYWN0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIlxuICAgIF0sXG4gICAgbGlzdFdvcmtmbG93UnVuczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIlxuICAgIF0sXG4gICAgcmVSdW5Xb3JrZmxvdzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuXCJdLFxuICAgIHJlUnVuV29ya2Zsb3dGYWlsZWRKb2JzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1bi1mYWlsZWQtam9ic1wiXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJldmlld0N1c3RvbUdhdGVzRm9yUnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZVwiXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIlxuICAgIF0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIlxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgc2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiXG4gICAgXSxcbiAgICB1cGRhdGVFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdXG4gIH0sXG4gIGFjdGl2aXR5OiB7XG4gICAgY2hlY2tSZXBvSXNTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlUmVwb1N1YnNjcmlwdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZGVsZXRlVGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBsaXN0RXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIl0sXG4gICAgbGlzdE5vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RPcmdFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgbGlzdFB1YmxpY0V2ZW50czogW1wiR0VUIC9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclJlcG9OZXR3b3JrOiBbXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFB1YmxpY09yZ0V2ZW50czogW1wiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zV2F0Y2hlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFN0YXJnYXplcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIl0sXG4gICAgbGlzdFdhdGNoZWRSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0V2F0Y2hlcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCJdLFxuICAgIG1hcmtOb3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1JlcG9Ob3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1RocmVhZEFzRG9uZTogW1wiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgbWFya1RocmVhZEFzUmVhZDogW1wiUEFUQ0ggL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBzZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBzZXRUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIHN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVuc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl1cbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgY2hlY2tUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGNyZWF0ZUZyb21NYW5pZmVzdDogW1wiUE9TVCAvYXBwLW1hbmlmZXN0cy97Y29kZX0vY29udmVyc2lvbnNcIl0sXG4gICAgY3JlYXRlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcbiAgICAgIFwiUE9TVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vYWNjZXNzX3Rva2Vuc1wiXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCJcbiAgICBdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50U3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0VXNlckluc3RhbGxhdGlvbjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJHRVQgL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW46IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhblN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVxdWVzdHNGb3JBdXRoZW50aWNhdGVkQXBwOiBbXG4gICAgICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uczogW1wiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0UGxhbnM6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFuc1wiXSxcbiAgICBsaXN0UGxhbnNTdHViYmVkOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFuc1wiXSxcbiAgICBsaXN0UmVwb3NBY2Nlc3NpYmxlVG9JbnN0YWxsYXRpb246IFtcIkdFVCAvaW5zdGFsbGF0aW9uL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXJTdHViYmVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIlxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiUEFUQ0ggL2FwcC9ob29rL2NvbmZpZ1wiXVxuICB9LFxuICBiaWxsaW5nOiB7XG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiXG4gICAgXVxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCJdLFxuICAgIGxpc3RGb3JTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIlxuICAgIF0sXG4gICAgbGlzdFN1aXRlc0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiXSxcbiAgICByZXJlcXVlc3RSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9yZXJlcXVlc3RcIlxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCJcbiAgICBdLFxuICAgIHNldFN1aXRlc1ByZWZlcmVuY2VzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIlxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXVxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBkZWxldGVBbmFseXNpczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCJcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkUGFyYW1ldGVyczogeyBhbGVydF9pZDogXCJhbGVydF9udW1iZXJcIiB9IH1cbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCJcbiAgICBdLFxuICAgIGdldENvZGVxbERhdGFiYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzL3tsYW5ndWFnZX1cIlxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0luc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImNvZGVTY2FubmluZ1wiLCBcImxpc3RBbGVydEluc3RhbmNlc1wiXSB9XG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCJcbiAgICBdLFxuICAgIGxpc3RSZWNlbnRBbmFseXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICB1cGRhdGVEZWZhdWx0U2V0dXA6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl1cbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl1cbiAgfSxcbiAgY29kZXNwYWNlczoge1xuICAgIGFkZFJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yRGV2Y29udGFpbmVyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9wZXJtaXNzaW9uc19jaGVja1wiXG4gICAgXSxcbiAgICBjb2Rlc3BhY2VNYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vbWFjaGluZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBkZWxldGVGcm9tT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZXhwb3J0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0c1wiXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCJcbiAgICBdLFxuICAgIGdldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFB1YmxpY0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldFNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCJcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgb3JnX2lkOiBcIm9yZ1wiIH0gfVxuICAgIF0sXG4gICAgbGlzdEluUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWNyZXRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBwcmVGbGlnaHRXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9uZXdcIlxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCJcbiAgICBdLFxuICAgIHNldFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIlxuICAgIF0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXVxuICB9LFxuICBjb3BpbG90OiB7XG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVGVhbXM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIlxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIlxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVGVhbXM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiXG4gICAgXSxcbiAgICBjYW5jZWxDb3BpbG90U2VhdEFzc2lnbm1lbnRGb3JVc2VyczogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3VzZXJzXCJcbiAgICBdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCJcbiAgICBdLFxuICAgIGxpc3RDb3BpbG90U2VhdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIl1cbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIlxuICAgIF0sXG4gICAgZGlmZlJhbmdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9jb21wYXJlL3tiYXNlaGVhZH1cIlxuICAgIF0sXG4gICAgZXhwb3J0U2JvbTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3Nib21cIl1cbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl1cbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF1cbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIlxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzL3thc3NpZ25lZX1cIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZFRvSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzL3thc3NpZ25lZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlTGFiZWw6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBkZWxldGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIlxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdExhYmVsc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCJdLFxuICAgIGxpc3RMYWJlbHNPbklzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxvY2s6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgcmVtb3ZlQWxsTGFiZWxzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZUxhYmVsOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXVxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfVxuICAgIF1cbiAgfSxcbiAgbWV0YToge1xuICAgIGdldDogW1wiR0VUIC9tZXRhXCJdLFxuICAgIGdldEFsbFZlcnNpb25zOiBbXCJHRVQgL3ZlcnNpb25zXCJdLFxuICAgIGdldE9jdG9jYXQ6IFtcIkdFVCAvb2N0b2NhdFwiXSxcbiAgICBnZXRaZW46IFtcIkdFVCAvemVuXCJdLFxuICAgIHJvb3Q6IFtcIkdFVCAvXCJdXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBjYW5jZWxJbXBvcnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmNhbmNlbEltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjY2FuY2VsLWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0Q29tbWl0QXV0aG9yczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5nZXRDb21taXRBdXRob3JzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyNnZXQtY29tbWl0LWF1dGhvcnNcIlxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0SW1wb3J0U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5nZXRJbXBvcnRTdGF0dXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1hbi1pbXBvcnQtc3RhdHVzXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGdldExhcmdlRmlsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvbGFyZ2VfZmlsZXNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmdldExhcmdlRmlsZXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1sYXJnZS1maWxlc1wiXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcIm1pZ3JhdGlvbnNcIiwgXCJsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBtYXBDb21taXRBdXRob3I6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzL3thdXRob3JfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5tYXBDb21taXRBdXRob3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI21hcC1hLWNvbW1pdC1hdXRob3JcIlxuICAgICAgfVxuICAgIF0sXG4gICAgc2V0TGZzUHJlZmVyZW5jZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2xmc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuc2V0TGZzUHJlZmVyZW5jZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjdXBkYXRlLWdpdC1sZnMtcHJlZmVyZW5jZVwiXG4gICAgICB9XG4gICAgXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEltcG9ydDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuc3RhcnRJbXBvcnQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI3N0YXJ0LWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiXG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIlxuICAgIF0sXG4gICAgdXBkYXRlSW1wb3J0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLnVwZGF0ZUltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjdXBkYXRlLWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBvaWRjOiB7XG4gICAgZ2V0T2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF0sXG4gICAgdXBkYXRlT2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF1cbiAgfSxcbiAgb3Jnczoge1xuICAgIGFkZFNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCJcbiAgICBdLFxuICAgIGFzc2lnblRlYW1Ub09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgYXNzaWduVXNlclRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIGJsb2NrVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNhbmNlbEludml0YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgY2hlY2tCbG9ja2VkVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tQdWJsaWNNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY29udmVydE1lbWJlclRvT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlQ3VzdG9tT3JnYW5pemF0aW9uUm9sZTogW1wiUE9TVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgY3JlYXRlSW52aXRhdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXM6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfVwiXSxcbiAgICBkZWxldGVDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZW5hYmxlT3JEaXNhYmxlU2VjdXJpdHlQcm9kdWN0T25BbGxPcmdSZXBvczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3tzZWN1cml0eV9wcm9kdWN0fS97ZW5hYmxlbWVudH1cIlxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0QWxsQ3VzdG9tUHJvcGVydGllczogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGdldEN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCJcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldFdlYmhvb2s6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEJsb2NrZWRVc2VyczogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiXSxcbiAgICBsaXN0Q3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgbGlzdEZhaWxlZEludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL29yZ3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgbGlzdE91dHNpZGVDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCJdLFxuICAgIGxpc3RQYXRHcmFudFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzXCJdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCJdLFxuICAgIGxpc3RXZWJob29rczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIHBhdGNoQ3VzdG9tT3JnYW5pemF0aW9uUm9sZTogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHBpbmdXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCJcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9XCJcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdHNJbkJ1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIlxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHNldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZU1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCJcbiAgICBdLFxuICAgIHVwZGF0ZVBhdEFjY2VzczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9XCJdLFxuICAgIHVwZGF0ZVBhdEFjY2Vzc2VzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JPcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl1cbiAgfSxcbiAgcGFja2FnZXM6IHtcbiAgICBkZWxldGVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlBbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnXCJdIH1cbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeVRoZUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHJlbmFtZWQ6IFtcbiAgICAgICAgICBcInBhY2thZ2VzXCIsXG4gICAgICAgICAgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCJcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2RvY2tlci9jb25mbGljdHNcIlxuICAgIF0sXG4gICAgbGlzdFBhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF1cbiAgfSxcbiAgcHJvamVjdHM6IHtcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVDYXJkOiBbXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCJdLFxuICAgIGNyZWF0ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGNyZWF0ZUZvclJlcG86IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZGVsZXRlQ2FyZDogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBkZWxldGVDb2x1bW46IFtcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGdldENhcmQ6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgZ2V0Q29sdW1uOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl0sXG4gICAgZ2V0UGVybWlzc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9L3Blcm1pc3Npb25cIlxuICAgIF0sXG4gICAgbGlzdENhcmRzOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbHVtbnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIl0sXG4gICAgbW92ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9L21vdmVzXCJdLFxuICAgIG1vdmVDb2x1bW46IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vbW92ZXNcIl0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgdXBkYXRlQ2FyZDogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbHVtbjogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl1cbiAgfSxcbiAgcHVsbHM6IHtcbiAgICBjaGVja0lmTWVyZ2VkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBjcmVhdGVSZXBseUZvclJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVwbGllc1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXZpZXc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBjcmVhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJcbiAgICBdLFxuICAgIGRpc21pc3NSZXZpZXc6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZGlzbWlzc2Fsc1wiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIlxuICAgIF0sXG4gICAgZ2V0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21taXRzXCJdLFxuICAgIGxpc3RGaWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2ZpbGVzXCJdLFxuICAgIGxpc3RSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIlxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RSZXZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBtZXJnZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIHJlbW92ZVJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICByZXF1ZXN0UmV2aWV3ZXJzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUJyYW5jaDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vdXBkYXRlLWJyYW5jaFwiXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXc6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJcbiAgICBdXG4gIH0sXG4gIHJhdGVMaW1pdDogeyBnZXQ6IFtcIkdFVCAvcmF0ZV9saW1pdFwiXSB9LFxuICByZWFjdGlvbnM6IHtcbiAgICBjcmVhdGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGxpc3RGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9ySXNzdWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclJlbGVhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIlxuICAgIF1cbiAgfSxcbiAgcmVwb3M6IHtcbiAgICBhY2NlcHRJbnZpdGF0aW9uOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGFkZEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9XG4gICAgXSxcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGFkZFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfVxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIGFkZFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICBjYW5jZWxQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHMve3BhZ2VzX2RlcGxveW1lbnRfaWR9L2NhbmNlbFwiXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIlxuICAgIF0sXG4gICAgY2hlY2tDb2xsYWJvcmF0b3I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIlxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFN0YXR1czogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHVzZXMve3NoYX1cIl0sXG4gICAgY3JlYXRlRGVwbG95S2V5OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGlzcGF0Y2hFdmVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGlzcGF0Y2hlc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9yZXBvc1wiXSxcbiAgICBjcmVhdGVGb3JrOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBjcmVhdGVJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRmlsZUNvbnRlbnRzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBjcmVhdGVPcmdSdWxlc2V0OiBbXCJQT1NUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlUGFnZXNTaXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBjcmVhdGVSZWxlYXNlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBjcmVhdGVSZXBvUnVsZXNldDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlVGFnUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIlxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFuRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCJcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgZGVsZXRlRGVwbG95S2V5OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlRGVwbG95bWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdSdWxlc2V0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVBhZ2VzU2l0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBkZWxldGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVUYWdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uL3t0YWdfcHJvdGVjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIlxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCJcbiAgICBdLFxuICAgIGRpc2FibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIlxuICAgIF0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS96aXBiYWxsL3tyZWZ9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkb3dubG9hZFppcGJhbGxBcmNoaXZlXCJdIH1cbiAgICBdLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBlbmFibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIlxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGdlbmVyYXRlUmVsZWFzZU5vdGVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2dlbmVyYXRlLW5vdGVzXCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBnZXRBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIGdldEFsbERlcGxveW1lbnRQcm90ZWN0aW9uUnVsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiXG4gICAgXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIlxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiXG4gICAgXSxcbiAgICBnZXRBdXRvbGluazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3Mve2F1dG9saW5rX2lkfVwiXSxcbiAgICBnZXRCcmFuY2g6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0QnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgZ2V0QnJhbmNoUnVsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJcbiAgICBdLFxuICAgIGdldENvbW11bml0eVByb2ZpbGVNZXRyaWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW11bml0eS9wcm9maWxlXCJdLFxuICAgIGdldENvbnRlbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGdldENvbnRyaWJ1dG9yc1N0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBnZXRDdXN0b21EZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy97cHJvdGVjdGlvbl9ydWxlX2lkfVwiXG4gICAgXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICBnZXREZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzL3tzdGF0dXNfaWR9XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFnZXNIZWFsdGhDaGVjazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9oZWFsdGhcIl0sXG4gICAgZ2V0UGFydGljaXBhdGlvblN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3BhcnRpY2lwYXRpb25cIl0sXG4gICAgZ2V0UHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXG4gICAgXSxcbiAgICBnZXRQdW5jaENhcmRTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wdW5jaF9jYXJkXCJdLFxuICAgIGdldFJlYWRtZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWVcIl0sXG4gICAgZ2V0UmVhZG1lSW5EaXJlY3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lL3tkaXJ9XCJdLFxuICAgIGdldFJlbGVhc2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VBc3NldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQnlUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvdGFncy97dGFnfVwiXSxcbiAgICBnZXRSZXBvUnVsZVN1aXRlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICBnZXRUZWFtc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCJcbiAgICBdLFxuICAgIGdldFRvcFBhdGhzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvcG9wdWxhci9wYXRoc1wiXSxcbiAgICBnZXRUb3BSZWZlcnJlcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3JlZmVycmVyc1wiXSxcbiAgICBnZXRVc2Vyc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCJcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJcbiAgICBdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEFjdGl2aXRpZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIl0sXG4gICAgbGlzdEF1dG9saW5rczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3NcIl0sXG4gICAgbGlzdEJyYW5jaGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCJdLFxuICAgIGxpc3RCcmFuY2hlc0ZvckhlYWRDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9icmFuY2hlcy13aGVyZS1oZWFkXCJcbiAgICBdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCJcbiAgICBdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIl0sXG4gICAgbGlzdENvbnRyaWJ1dG9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIl0sXG4gICAgbGlzdEN1c3RvbURlcGxveW1lbnRSdWxlSW50ZWdyYXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiXG4gICAgXSxcbiAgICBsaXN0RGVwbG95S2V5czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGxpc3REZXBsb3ltZW50QnJhbmNoUG9saWNpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCJcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEludml0YXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RMYW5ndWFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFuZ3VhZ2VzXCJdLFxuICAgIGxpc3RQYWdlc0J1aWxkczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFB1bGxSZXF1ZXN0c0Fzc29jaWF0ZWRXaXRoQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIlxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VBc3NldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCJcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgbGlzdFRhZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFnc1wiXSxcbiAgICBsaXN0VGVhbXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGVhbXNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIlxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiXG4gICAgXSxcbiAgICByZW1vdmVBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9XG4gICAgXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICByZW1vdmVUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9XG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICByZW5hbWVCcmFuY2g6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3JlbmFtZVwiXSxcbiAgICByZXBsYWNlQWxsVG9waWNzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICByZXF1ZXN0UGFnZXNCdWlsZDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIHNldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIHNldEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9XG4gICAgXSxcbiAgICBzZXRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9XG4gICAgXSxcbiAgICBzZXRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgdXBkYXRlQ29tbWl0Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlSW5mb3JtYXRpb25BYm91dFBhZ2VzU2l0ZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICB1cGRhdGVJbnZpdGF0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIlxuICAgIF0sXG4gICAgdXBkYXRlUmVsZWFzZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICB1cGRhdGVSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJcbiAgICBdLFxuICAgIHVwZGF0ZVJlcG9SdWxlc2V0OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1BvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJ1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb25cIl0gfVxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIlxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXG4gICAgXSxcbiAgICB1cGxvYWRSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c3s/bmFtZSxsYWJlbH1cIixcbiAgICAgIHsgYmFzZVVybDogXCJodHRwczovL3VwbG9hZHMuZ2l0aHViLmNvbVwiIH1cbiAgICBdXG4gIH0sXG4gIHNlYXJjaDoge1xuICAgIGNvZGU6IFtcIkdFVCAvc2VhcmNoL2NvZGVcIl0sXG4gICAgY29tbWl0czogW1wiR0VUIC9zZWFyY2gvY29tbWl0c1wiXSxcbiAgICBpc3N1ZXNBbmRQdWxsUmVxdWVzdHM6IFtcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiXSxcbiAgICBsYWJlbHM6IFtcIkdFVCAvc2VhcmNoL2xhYmVsc1wiXSxcbiAgICByZXBvczogW1wiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCJdLFxuICAgIHRvcGljczogW1wiR0VUIC9zZWFyY2gvdG9waWNzXCJdLFxuICAgIHVzZXJzOiBbXCJHRVQgL3NlYXJjaC91c2Vyc1wiXVxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIlxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIlxuICAgIF1cbiAgfSxcbiAgc2VjdXJpdHlBZHZpc29yaWVzOiB7XG4gICAgY3JlYXRlRm9yazogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9mb3Jrc1wiXG4gICAgXSxcbiAgICBjcmVhdGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3JlcG9ydHNcIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5Q3ZlUmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9jdmVcIlxuICAgIF0sXG4gICAgZ2V0R2xvYmFsQWR2aXNvcnk6IFtcIkdFVCAvYWR2aXNvcmllcy97Z2hzYV9pZH1cIl0sXG4gICAgZ2V0UmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIlxuICAgIF1cbiAgfSxcbiAgdGVhbXM6IHtcbiAgICBhZGRPclVwZGF0ZU1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIGFkZE9yVXBkYXRlUmVwb1Blcm1pc3Npb25zSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUmVwb0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIlxuICAgIF0sXG4gICAgZ2V0RGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGxpc3REaXNjdXNzaW9uc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uc0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0UHJvamVjdHNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXG4gICAgXSxcbiAgICByZW1vdmVSZXBvSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZUluT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXVxuICB9LFxuICB1c2Vyczoge1xuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIva2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIva2V5c1wiXSxcbiAgICBjcmVhdGVTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZW1haWxzXCJdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBkZWxldGVTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIlxuICAgIF0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5VXNlcm5hbWU6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRDb250ZXh0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2hvdmVyY2FyZFwiXSxcbiAgICBnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC91c2Vyc1wiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvYmxvY2tzXCJdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCJdLFxuICAgIGxpc3RQdWJsaWNLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiXG4gICAgXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXVxuICB9XG59O1xudmFyIGVuZHBvaW50c19kZWZhdWx0ID0gRW5kcG9pbnRzO1xuXG4vLyBwa2cvZGlzdC1zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMuanNcbnZhciBlbmRwb2ludE1ldGhvZHNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzX2RlZmF1bHQpKSB7XG4gIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHMpKSB7XG4gICAgY29uc3QgW3JvdXRlLCBkZWZhdWx0cywgZGVjb3JhdGlvbnNdID0gZW5kcG9pbnQ7XG4gICAgY29uc3QgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KC8gLyk7XG4gICAgY29uc3QgZW5kcG9pbnREZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdHNcbiAgICApO1xuICAgIGlmICghZW5kcG9pbnRNZXRob2RzTWFwLmhhcyhzY29wZSkpIHtcbiAgICAgIGVuZHBvaW50TWV0aG9kc01hcC5zZXQoc2NvcGUsIC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5zZXQobWV0aG9kTmFtZSwge1xuICAgICAgc2NvcGUsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgIGRlY29yYXRpb25zXG4gICAgfSk7XG4gIH1cbn1cbnZhciBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSxcbiAgICAgIC8vIGVuc3VyZXMgbWV0aG9kIGlzIGluIHRoZSBjYWNoZVxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jYWNoZSwgbWV0aG9kTmFtZSwgZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIGRlbGV0ZSB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG93bktleXMoeyBzY29wZSB9KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0LCBtZXRob2ROYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZTtcbiAgfSxcbiAgZ2V0KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlIH0sIG1ldGhvZE5hbWUpIHtcbiAgICBpZiAoY2FjaGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgICB9XG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCB7IGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zIH0gPSBtZXRob2Q7XG4gICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IGRlY29yYXRlKFxuICAgICAgICBvY3Rva2l0LFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgICAgZGVjb3JhdGlvbnNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGVuZHBvaW50RGVmYXVsdHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gIH1cbn07XG5mdW5jdGlvbiBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBuZXdNZXRob2RzID0ge307XG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuICByZXR1cm4gbmV3TWV0aG9kcztcbn1cbmZ1bmN0aW9uIGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBkZWZhdWx0cywgZGVjb3JhdGlvbnMpIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyguLi5hcmdzKSB7XG4gICAgbGV0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWQpIHtcbiAgICAgIGNvbnN0IFtuZXdTY29wZSwgbmV3TWV0aG9kTmFtZV0gPSBkZWNvcmF0aW9ucy5yZW5hbWVkO1xuICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCBvcHRpb25zMiA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMyKSB7XG4gICAgICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgICAgIGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zMikpIHtcbiAgICAgICAgICAgIG9wdGlvbnMyW2FsaWFzXSA9IG9wdGlvbnMyW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uczJbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5mdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIHJlc3Q6IGFwaVxuICB9O1xufVxucmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbmZ1bmN0aW9uIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgLi4uYXBpLFxuICAgIHJlc3Q6IGFwaVxuICB9O1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLFxuICByZXN0RW5kcG9pbnRNZXRob2RzXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGNvbXBvc2VQYWdpbmF0ZVJlc3Q6ICgpID0+IGNvbXBvc2VQYWdpbmF0ZVJlc3QsXG4gIGlzUGFnaW5hdGluZ0VuZHBvaW50OiAoKSA9PiBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0OiAoKSA9PiBwYWdpbmF0ZVJlc3QsXG4gIHBhZ2luYXRpbmdFbmRwb2ludHM6ICgpID0+IHBhZ2luYXRpbmdFbmRwb2ludHNcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4yLjFcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL25vcm1hbGl6ZS1wYWdpbmF0ZWQtbGlzdC1yZXNwb25zZS5qc1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfTtcbiAgfVxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbilcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIGNvbnN0IGluY29tcGxldGVSZXN1bHRzID0gcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGNvbnN0IHJlcG9zaXRvcnlTZWxlY3Rpb24gPSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBjb25zdCB0b3RhbENvdW50ID0gcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2l0ZXJhdG9yLmpzXG5mdW5jdGlvbiBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZS5lbmRwb2ludChwYXJhbWV0ZXJzKSA6IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludChyb3V0ZSwgcGFyYW1ldGVycyk7XG4gIGNvbnN0IHJlcXVlc3RNZXRob2QgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlIDogb2N0b2tpdC5yZXF1ZXN0O1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgbGV0IHVybCA9IG9wdGlvbnMudXJsO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+ICh7XG4gICAgICBhc3luYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXVybClcbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0TWV0aG9kKHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB1cmwgPSAoKG5vcm1hbGl6ZWRSZXNwb25zZS5oZWFkZXJzLmxpbmsgfHwgXCJcIikubWF0Y2goXG4gICAgICAgICAgICAvPChbXj5dKyk+O1xccypyZWw9XCJuZXh0XCIvXG4gICAgICAgICAgKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZSB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSlcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIHVybCA9IFwiXCI7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgZGF0YTogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRlLmpzXG5mdW5jdGlvbiBwYWdpbmF0ZShvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycywgbWFwRm4pIHtcbiAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtYXBGbiA9IHBhcmFtZXRlcnM7XG4gICAgcGFyYW1ldGVycyA9IHZvaWQgMDtcbiAgfVxuICByZXR1cm4gZ2F0aGVyKFxuICAgIG9jdG9raXQsXG4gICAgW10sXG4gICAgaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLFxuICAgIG1hcEZuXG4gICk7XG59XG5mdW5jdGlvbiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbikge1xuICByZXR1cm4gaXRlcmF0b3IyLm5leHQoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBsZXQgZWFybHlFeGl0ID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGVhcmx5RXhpdCA9IHRydWU7XG4gICAgfVxuICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChcbiAgICAgIG1hcEZuID8gbWFwRm4ocmVzdWx0LnZhbHVlLCBkb25lKSA6IHJlc3VsdC52YWx1ZS5kYXRhXG4gICAgKTtcbiAgICBpZiAoZWFybHlFeGl0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgcmV0dXJuIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKTtcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9jb21wb3NlLXBhZ2luYXRlLmpzXG52YXIgY29tcG9zZVBhZ2luYXRlUmVzdCA9IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUsIHtcbiAgaXRlcmF0b3Jcbn0pO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2VuZXJhdGVkL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG52YXIgcGFnaW5hdGluZ0VuZHBvaW50cyA9IFtcbiAgXCJHRVQgL2Fkdmlzb3JpZXNcIixcbiAgXCJHRVQgL2FwcC9ob29rL2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9hc3NpZ25tZW50cy97YXNzaWdubWVudF9pZH0vYWNjZXB0ZWRfYXNzaWdubWVudHNcIixcbiAgXCJHRVQgL2NsYXNzcm9vbXNcIixcbiAgXCJHRVQgL2NsYXNzcm9vbXMve2NsYXNzcm9vbV9pZH0vYXNzaWdubWVudHNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2lzc3Vlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3RpbWVsaW5lXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29kZVwiLFxuICBcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIixcbiAgXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9sYWJlbHNcIixcbiAgXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC90b3BpY3NcIixcbiAgXCJHRVQgL3NlYXJjaC91c2Vyc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vbWVtYmVyc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcmVwb3NcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL3VzZXIvZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiLFxuICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvdXNlci9pc3N1ZXNcIixcbiAgXCJHRVQgL3VzZXIva2V5c1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIixcbiAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzL3N0dWJiZWRcIixcbiAgXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL29yZ3NcIixcbiAgXCJHRVQgL3VzZXIvcGFja2FnZXNcIixcbiAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICBcIkdFVCAvdXNlci9yZXBvc1wiLFxuICBcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2VyL3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiLFxuICBcIkdFVCAvdXNlci90ZWFtc1wiLFxuICBcIkdFVCAvdXNlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJcbl07XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xuZnVuY3Rpb24gaXNQYWdpbmF0aW5nRW5kcG9pbnQoYXJnKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHBhZ2luYXRpbmdFbmRwb2ludHMuaW5jbHVkZXMoYXJnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5mdW5jdGlvbiBwYWdpbmF0ZVJlc3Qob2N0b2tpdCkge1xuICByZXR1cm4ge1xuICAgIHBhZ2luYXRlOiBPYmplY3QuYXNzaWduKHBhZ2luYXRlLmJpbmQobnVsbCwgb2N0b2tpdCksIHtcbiAgICAgIGl0ZXJhdG9yOiBpdGVyYXRvci5iaW5kKG51bGwsIG9jdG9raXQpXG4gICAgfSlcbiAgfTtcbn1cbnBhZ2luYXRlUmVzdC5WRVJTSU9OID0gVkVSU0lPTjtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBleHBvcnRzLkdpdEh1YiA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLmNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBDb250ZXh0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnRleHRcIikpO1xuY29uc3QgVXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbHNcIikpO1xuLy8gb2N0b2tpdCArIHBsdWdpbnNcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9jb3JlXCIpO1xuY29uc3QgcGx1Z2luX3Jlc3RfZW5kcG9pbnRfbWV0aG9kc18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIik7XG5jb25zdCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCIpO1xuZXhwb3J0cy5jb250ZXh0ID0gbmV3IENvbnRleHQuQ29udGV4dCgpO1xuY29uc3QgYmFzZVVybCA9IFV0aWxzLmdldEFwaUJhc2VVcmwoKTtcbmV4cG9ydHMuZGVmYXVsdHMgPSB7XG4gICAgYmFzZVVybCxcbiAgICByZXF1ZXN0OiB7XG4gICAgICAgIGFnZW50OiBVdGlscy5nZXRQcm94eUFnZW50KGJhc2VVcmwpLFxuICAgICAgICBmZXRjaDogVXRpbHMuZ2V0UHJveHlGZXRjaChiYXNlVXJsKVxuICAgIH1cbn07XG5leHBvcnRzLkdpdEh1YiA9IGNvcmVfMS5PY3Rva2l0LnBsdWdpbihwbHVnaW5fcmVzdF9lbmRwb2ludF9tZXRob2RzXzEucmVzdEVuZHBvaW50TWV0aG9kcywgcGx1Z2luX3BhZ2luYXRlX3Jlc3RfMS5wYWdpbmF0ZVJlc3QpLmRlZmF1bHRzKGV4cG9ydHMuZGVmYXVsdHMpO1xuLyoqXG4gKiBDb252aWVuY2UgZnVuY3Rpb24gdG8gY29ycmVjdGx5IGZvcm1hdCBPY3Rva2l0IE9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdE9wdGlvbnModG9rZW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyB8fCB7fSk7IC8vIFNoYWxsb3cgY2xvbmUgLSBkb24ndCBtdXRhdGUgdGhlIG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyXG4gICAgLy8gQXV0aFxuICAgIGNvbnN0IGF1dGggPSBVdGlscy5nZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRzKTtcbiAgICBpZiAoYXV0aCkge1xuICAgICAgICBvcHRzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICByZXR1cm4gb3B0cztcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBnZXRPY3Rva2l0T3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGV4cG9ydHMuY29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IENvbnRleHQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vY29udGV4dFwiKSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5leHBvcnRzLmNvbnRleHQgPSBuZXcgQ29udGV4dC5Db250ZXh0KCk7XG4vKipcbiAqIFJldHVybnMgYSBoeWRyYXRlZCBvY3Rva2l0IHJlYWR5IHRvIHVzZSBmb3IgR2l0SHViIEFjdGlvbnNcbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdCh0b2tlbiwgb3B0aW9ucywgLi4uYWRkaXRpb25hbFBsdWdpbnMpIHtcbiAgICBjb25zdCBHaXRIdWJXaXRoUGx1Z2lucyA9IHV0aWxzXzEuR2l0SHViLnBsdWdpbiguLi5hZGRpdGlvbmFsUGx1Z2lucyk7XG4gICAgcmV0dXJuIG5ldyBHaXRIdWJXaXRoUGx1Z2lucygoMCwgdXRpbHNfMS5nZXRPY3Rva2l0T3B0aW9ucykodG9rZW4sIG9wdGlvbnMpKTtcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGdldE9jdG9raXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1naXRodWIuanMubWFwIiwKICAgICJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBleGVjIH0gZnJvbSBcIkBhY3Rpb25zL2V4ZWNcIlxuaW1wb3J0IHsgZGVidWcsIGdldElucHV0LCBnZXRTdGF0ZSwgaW5mbywgc2F2ZVN0YXRlLCB3YXJuaW5nIH0gZnJvbSBcIkBhY3Rpb25zL2NvcmVcIlxuaW1wb3J0IHsgRGVmYXVsdEFydGlmYWN0Q2xpZW50IH0gZnJvbSAnQGFjdGlvbnMvYXJ0aWZhY3QnXG5pbXBvcnQgeyBjb2xsZWN0UHJvbWV0aGV1cyB9IGZyb20gJy4uL21ldHJpY3MvcHJvbWV0aGV1cydcbmltcG9ydCB7IGRlZmF1bHRNZXRyaWNzIH0gZnJvbSAnLi4vbWV0cmljcy9kZWZhdWx0J1xuaW1wb3J0IHsgcmVuZGVyUmVwb3J0IH0gZnJvbSAnLi4vcmVwb3J0L2RlZmF1bHQnXG5pbXBvcnQgeyBjb250ZXh0LCBnZXRPY3Rva2l0IH0gZnJvbSAnQGFjdGlvbnMvZ2l0aHViJ1xuaW1wb3J0IHsgZ2V0Q3VycmVudFdvcmtmbG93UnVucyB9IGZyb20gJy4uL3dvcmtmbG93L3dvcmtmbG93J1xuaW1wb3J0IHR5cGUgeyBTZXJpZXMgfSBmcm9tICcuLi9yZXBvcnQvY2hhcnQnXG5cbihhc3luYyBmdW5jdGlvbiBwb3N0KCkge1xuXHRsZXQgY3dkID0gZ2V0U3RhdGUoXCJjd2RcIilcblx0bGV0IHNkayA9IGdldElucHV0KFwic2RrX25hbWVcIiwgeyByZXF1aXJlZDogdHJ1ZSB9KVxuXHRsZXQgd2FybXVwID0gcGFyc2VJbnQoZ2V0SW5wdXQoXCJ3YXJtdXBfc2Vjb25kc1wiKSB8fCAnMCcpXG5cblx0bGV0IGVuZCA9IG5ldyBEYXRlKClcblx0bGV0IHN0YXJ0ID0gbmV3IERhdGUoZ2V0U3RhdGUoXCJzdGFydFwiKSlcblx0c2F2ZVN0YXRlKFwiZW5kXCIsIGVuZC50b0lTT1N0cmluZygpKVxuXG5cdGxldCBwdWxsTnVtYmVyID0gcGFyc2VJbnQoZ2V0U3RhdGUoXCJpc3N1ZVwiKSlcblx0bGV0IGlzUHVsbFJlcXVlc3QgPSBwdWxsTnVtYmVyID49IDBcblxuXHRsZXQgYXJ0aWZhY3RDbGllbnQgPSBuZXcgRGVmYXVsdEFydGlmYWN0Q2xpZW50KClcblxuXHRpbmZvKFwiQ29sbGVjdGluZyBtZXRyaWNzIGZvciBoZWFkIHJlZi4uLlwiKVxuXHRsZXQgYWRqU3RhcnQgPSBuZXcgRGF0ZShzdGFydC5nZXRUaW1lKCkgKyB3YXJtdXAgKiAxMDAwKSAvLyBza2lwIGZpcnN0IHdhcm11cCBzZWNvbmRzXG5cdGxldCBtZXRyaWNzID0gYXdhaXQgY29sbGVjdFByb21ldGhldXMoYWRqU3RhcnQsIGVuZCwgZGVmYXVsdE1ldHJpY3MubWV0cmljcylcblx0aW5mbyhgTWV0cmljcyBjb2xsZWN0ZWQgZm9yIGhlYWQgcmVmOiAke09iamVjdC5rZXlzKG1ldHJpY3MpfWApXG5cdGRlYnVnKGBIZWFkIHJlZiBtZXRyaWNzOiAke09iamVjdC5rZXlzKG1ldHJpY3MpfWApXG5cblx0e1xuXHRcdGluZm8oXCJXcml0aW5nIG1ldHJpY3MuLi5cIilcblx0XHRsZXQgbWV0cmljc1BhdGggPSBwYXRoLmpvaW4oY3dkLCBgJHtzZGt9LW1ldHJpY3MuanNvbmApXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhtZXRyaWNzUGF0aCwgSlNPTi5zdHJpbmdpZnkobWV0cmljcyksIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuXHRcdGluZm8oYE1ldHJpY3Mgd3JpdHRlbiB0byAke21ldHJpY3NQYXRofWApXG5cblx0XHRpbmZvKFwiVXBsb2FkIG1ldHJpY3MgYXMgYW4gYXJ0aWZhY3QuLi5cIilcblx0XHRsZXQgeyBpZCB9ID0gYXdhaXQgYXJ0aWZhY3RDbGllbnQudXBsb2FkQXJ0aWZhY3QoYCR7c2RrfS1tZXRyaWNzLmpzb25gLCBbbWV0cmljc1BhdGhdLCBjd2QsIHsgcmV0ZW50aW9uRGF5czogaXNQdWxsUmVxdWVzdCA/IDEgOiAzMCB9KVxuXHRcdGluZm8oYE1ldHJpY3MgdXBsb2FkZWQgYXMgYW4gYXJ0aWZhY3QgJHtpZH1gKVxuXHR9XG5cblx0UFI6XG5cdGlmICghaXNQdWxsUmVxdWVzdCkge1xuXHRcdHdhcm5pbmcoXCJOb3QgYSBwdWxsIHJlcXVlc3QuXCIpXG5cdH1cblx0ZWxzZSB7XG5cdFx0ZGVidWcoYFB1bGwgcmVxdWVzdCBudW1iZXI6ICR7cHVsbE51bWJlcn1gKVxuXG5cdFx0aW5mbyhcIkZldGNoaW5nIGluZm9ybWF0aW9uIGFib3V0IHB1bGwgcmVxdWVzdC4uLlwiKVxuXHRcdGxldCB7IGRhdGE6IHByIH0gPSBhd2FpdCBnZXRPY3Rva2l0KGdldElucHV0KFwiZ2l0aHViX3Rva2VuXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSkpLnJlc3QucHVsbHMuZ2V0KHtcblx0XHRcdG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG5cdFx0XHRyZXBvOiBjb250ZXh0LnJlcG8ucmVwbyxcblx0XHRcdHB1bGxfbnVtYmVyOiBwdWxsTnVtYmVyLFxuXHRcdH0pXG5cdFx0aW5mbyhgUHVsbCByZXF1ZXN0IGluZm9ybWF0aW9uIGZldGNoZWQ6ICR7cHIuaHRtbF91cmx9YClcblx0XHRkZWJ1ZyhgUHVsbCByZXF1ZXN0IGluZm9ybWF0aW9uOiAke0pTT04uc3RyaW5naWZ5KHByLCBudWxsLCA0KX1gKVxuXG5cdFx0aW5mbyhgRmV0Y2hpbmcgaW5mb3JtYXRpb24gYWJvdXQgcHJldmlvdXMgcnVucyBmb3IgYmFzZSBicmFuY2guLi5gKVxuXHRcdGxldCBydW5zID0gYXdhaXQgZ2V0Q3VycmVudFdvcmtmbG93UnVucyhwci5iYXNlLnJlZilcblx0XHRpbmZvKGBGb3VuZCAke3J1bnMubGVuZ3RofSBjb21wbGV0ZWQgYW5kIHN1Y2Nlc3NmdWwgcnVucyBmb3IgZGVmYXVsdCBicmFuY2guYClcblx0XHRkZWJ1ZyhgUHJldmlvdXMgcnVucyBmb3IgYmFzZSBicmFuY2g6ICR7SlNPTi5zdHJpbmdpZnkocnVucy5tYXAocnVuID0+ICh7IGlkOiBydW4uaWQsIHVwZDogcnVuLnVwZGF0ZWRfYXQgfSkpLCBudWxsLCA0KX1gKVxuXG5cdFx0aWYgKHJ1bnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR3YXJuaW5nKFwiTm8gcHJldmlvdXMgcnVucyBmb3VuZC5cIilcblx0XHRcdGJyZWFrIFBSXG5cdFx0fVxuXG5cdFx0aW5mbyhgRmluZGluZyBsYXRlc3QgcnVuLi4uYClcblx0XHRsZXQgbGF0ZXN0UnVuID0gcnVuc1swXVxuXHRcdGluZm8oYExhdGVzdCBydW46ICR7bGF0ZXN0UnVuLnVybH1gKVxuXHRcdGRlYnVnKGBMYXRlc3QgcnVuOiAke0pTT04uc3RyaW5naWZ5KGxhdGVzdFJ1biwgbnVsbCwgNCl9YClcblxuXHRcdGluZm8oYEZpbmRpbmcgbGF0ZXN0IHJ1biBhcnRpZmFjdHMuLi5gKVxuXHRcdGxldCB7IGRhdGE6IHsgYXJ0aWZhY3RzIH0gfSA9IGF3YWl0IGdldE9jdG9raXQoZ2V0SW5wdXQoXCJnaXRodWJfdG9rZW5cIiwgeyByZXF1aXJlZDogdHJ1ZSB9KSkucmVzdC5hY3Rpb25zLmxpc3RXb3JrZmxvd1J1bkFydGlmYWN0cyh7XG5cdFx0XHRvd25lcjogY29udGV4dC5yZXBvLm93bmVyLFxuXHRcdFx0cmVwbzogY29udGV4dC5yZXBvLnJlcG8sXG5cdFx0XHRydW5faWQ6IGxhdGVzdFJ1bi5pZCxcblx0XHR9KVxuXHRcdGluZm8oYEZvdW5kICR7YXJ0aWZhY3RzLmxlbmd0aH0gYXJ0aWZhY3RzLmApXG5cdFx0ZGVidWcoYExhdGVzdCBydW4gYXJ0aWZhY3RzOiAke0pTT04uc3RyaW5naWZ5KGFydGlmYWN0cywgbnVsbCwgNCl9YClcblxuXHRcdGxldCBhcnRpZmFjdCA9IGFydGlmYWN0cy5maW5kKGFydGlmYWN0ID0+IGFydGlmYWN0Lm5hbWUgPT09IGAke3Nka30tbWV0cmljcy5qc29uYClcblx0XHRpZiAoIWFydGlmYWN0IHx8IGFydGlmYWN0LmV4cGlyZWQpIHtcblx0XHRcdHdhcm5pbmcoXCJNZXRyaWNzIGZvciBiYXNlIHJlZiBub3QgZm91bmQgb3IgZXhwaXJlZC5cIilcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVidWcoYE1ldHJpY3MgYXJ0aWZhY3Q6ICR7SlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3QsIG51bGwsIDQpfWApXG5cblx0XHRcdGluZm8oYERvd25sb2FkaW5nIGFydGlmYWN0ICR7YXJ0aWZhY3QuaWR9Li4uYClcblx0XHRcdGxldCB7IGRvd25sb2FkUGF0aCB9ID0gYXdhaXQgYXJ0aWZhY3RDbGllbnQuZG93bmxvYWRBcnRpZmFjdChhcnRpZmFjdC5pZCwge1xuXHRcdFx0XHRwYXRoOiBjd2QsXG5cdFx0XHRcdGZpbmRCeToge1xuXHRcdFx0XHRcdHRva2VuOiBnZXRJbnB1dChcImdpdGh1Yl90b2tlblwiLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuXHRcdFx0XHRcdHdvcmtmbG93UnVuSWQ6IGxhdGVzdFJ1bi53b3JrZmxvd19pZCxcblx0XHRcdFx0XHRyZXBvc2l0b3J5T3duZXI6IGNvbnRleHQucmVwby5vd25lcixcblx0XHRcdFx0XHRyZXBvc2l0b3J5TmFtZTogY29udGV4dC5yZXBvLnJlcG8sXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpbmZvKGBEb3dubG9hZGVkIGFydGlmYWN0ICR7YXJ0aWZhY3QubmFtZX0gdG8gJHtkb3dubG9hZFBhdGh9YClcblxuXHRcdFx0aW5mbyhgRXh0cmFjdGluZyBtZXRyaWNzIGZyb20gYXJ0aWZhY3QgJHthcnRpZmFjdC5pZH0uLi5gKVxuXHRcdFx0bGV0IGJhc2VNZXRyaWNzID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGN3ZCwgYXJ0aWZhY3QubmFtZSksIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KSkgYXMgUmVjb3JkPHN0cmluZywgU2VyaWVzW10+XG5cblx0XHRcdGluZm8oYE1ldHJpY3MgZXh0cmFjdGVkIGZyb20gYXJ0aWZhY3QgJHthcnRpZmFjdC5pZH06ICR7T2JqZWN0LmtleXMoYmFzZU1ldHJpY3MpfWApXG5cdFx0XHRkZWJ1ZyhgQmFzZSBtZXRyaWNzOiAke0pTT04uc3RyaW5naWZ5KGJhc2VNZXRyaWNzLCBudWxsLCA0KX1gKVxuXG5cdFx0XHRpbmZvKGBNZXJnaW5nIG1ldHJpY3MuLi5gKVxuXHRcdFx0Zm9yIChsZXQgW25hbWUsIGJhc2VTZXJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGJhc2VNZXRyaWNzKSkge1xuXHRcdFx0XHRpZiAoIW1ldHJpY3NbbmFtZV0pIGNvbnRpbnVlXG5cblx0XHRcdFx0Ly8gYmFzZSBtZXRyaWNzIGFsd2F5cyBtdXN0IGJlIHRoZSBzZWNvbmRcblx0XHRcdFx0bWV0cmljc1tuYW1lXSA9IG1ldHJpY3NbbmFtZV0uY29uY2F0KGJhc2VTZXJpZXMpXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aW5mbyhcIlJlbmRlcmluZyByZXBvcnQuLi5cIilcblx0bGV0IHJlcG9ydCA9IHJlbmRlclJlcG9ydChzZGssIG1ldHJpY3MpXG5cdGRlYnVnKGBSZXBvcnQ6ICR7cmVwb3J0fWApXG5cblx0e1xuXHRcdGluZm8oXCJXcml0aW5nIHJlcG9ydC4uLlwiKVxuXHRcdGxldCByZXBvcnRQYXRoID0gcGF0aC5qb2luKGN3ZCwgYCR7c2RrfS1yZXBvcnQubWRgKVxuXHRcdGZzLndyaXRlRmlsZVN5bmMocmVwb3J0UGF0aCwgcmVwb3J0LCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSlcblx0XHRpbmZvKGBSZXBvcnQgd3JpdHRlbiB0byAke3JlcG9ydFBhdGh9YClcblxuXHRcdGluZm8oXCJVcGxvYWQgcmVwb3J0IGFzIGFuIGFydGlmYWN0Li4uXCIpXG5cdFx0bGV0IHsgaWQgfSA9IGF3YWl0IGFydGlmYWN0Q2xpZW50LnVwbG9hZEFydGlmYWN0KGAke3Nka30tcmVwb3J0Lm1kYCwgW3JlcG9ydFBhdGhdLCBjd2QsIHsgcmV0ZW50aW9uRGF5czogMSB9KVxuXHRcdGluZm8oYFJlcG9ydCB1cGxvYWRlZCBhcyBhbiBhcnRpZmFjdCAke2lkfWApXG5cdH1cblxuXHR7XG5cdFx0aW5mbyhcIldyaXRpbmcgcHVsbCBudW1iZXIuLi5cIilcblx0XHRsZXQgcHVsbFBhdGggPSBwYXRoLmpvaW4oY3dkLCBgJHtzZGt9LXB1bGwudHh0YClcblx0XHRmcy53cml0ZUZpbGVTeW5jKHB1bGxQYXRoLCBwdWxsTnVtYmVyLnRvRml4ZWQoMCksIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuXHRcdGluZm8oYFB1bGwgbnVtYmVyIHdyaXR0ZW4gdG8gJHtwdWxsUGF0aH1gKVxuXG5cdFx0aW5mbyhcIlVwbG9hZCBwdWxsIG51bWJlciBhcyBhbiBhcnRpZmFjdC4uLlwiKVxuXHRcdGxldCB7IGlkIH0gPSBhd2FpdCBhcnRpZmFjdENsaWVudC51cGxvYWRBcnRpZmFjdChgJHtzZGt9LXB1bGwudHh0YCwgW3B1bGxQYXRoXSwgY3dkLCB7IHJldGVudGlvbkRheXM6IDEgfSlcblx0XHRpbmZvKGBQdWxsIG51bWJlciB1cGxvYWRlZCBhcyBhbiBhcnRpZmFjdCAke2lkfWApXG5cdH1cblxuXHRpbmZvKFwiU3RvcHBpbmcgWURCLi4uXCIpXG5cdGF3YWl0IGV4ZWMoYGRvY2tlcmAsIFtgY29tcG9zZWAsIGAtZmAsIGBjb21wb3NlLnlhbWxgLCBgZG93bmBdLCB7IGN3ZCB9KVxuXG5cdGluZm8oYFlEQiBzdG9wcGVkIGF0ICR7ZW5kfWApXG5cblx0bGV0IGR1cmF0aW9uID0gZW5kLmdldFRpbWUoKSAtIHN0YXJ0LmdldFRpbWUoKVxuXHRpbmZvKGBZREIgU0xPIFRlc3QgZHVyYXRpb246ICR7ZHVyYXRpb259bXMuYClcblxuXHRkZWJ1ZyhcIkNsZWFuaW5nIHVwIHRlbXAgZGlyZWN0b3J5Li4uXCIpXG5cdGZzLnJtU3luYyhjd2QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufSkoKVxuIiwKICAgICIvLyBIb3N0XG5leHBvcnQgY29uc3QgSE9TVCA9ICdsb2NhbGhvc3QnXG5cbi8vIFlEQiBTdGF0aWMgbm9kZSBjb25maWd1cmF0aW9uLiBQcmVmZXJlIGRvIG5vdCBlZGl0LlxuZXhwb3J0IGNvbnN0IFlEQl9HUlBDX1BPUlQgPSAyMTM1XG5leHBvcnQgY29uc3QgWURCX01PTl9QT1JUID0gODc2NVxuZXhwb3J0IGNvbnN0IFlEQl9JQ19QT1JUID0gMTkwMDFcbmV4cG9ydCBjb25zdCBZREJfVEVOQU5UID0gJy9Sb290L3Rlc3RkYidcblxuLy8gUGFzcyBpbnRvIHdvcmtsb2FkXG5leHBvcnQgY29uc3QgWURCX0VORFBPSU5UID0gYGdycGM6Ly8ke0hPU1R9OiR7WURCX0dSUENfUE9SVH1gXG5leHBvcnQgY29uc3QgWUJEX0NPTk5FQ1RJT05fU1RSSU5HID0gYCR7WURCX0VORFBPSU5UfSR7WURCX1RFTkFOVH1gXG5cbmV4cG9ydCBjb25zdCBQUk9NRVRIRVVTX1BPUlQgPSA5MDkwXG5leHBvcnQgY29uc3QgUFJPTUVUSEVVU19QVVNIR0FURVdBWV9QT1JUID0gOTA5MVxuXG5leHBvcnQgY29uc3QgUFJPTUVUSEVVU19VUkwgPSBgaHR0cDovLyR7SE9TVH06JHtQUk9NRVRIRVVTX1BPUlR9YFxuZXhwb3J0IGNvbnN0IFBST01FVEhFVVNfUFVTSEdBVEVXQVlfVVJMID0gYGh0dHA6Ly8ke0hPU1R9OiR7UFJPTUVUSEVVU19QVVNIR0FURVdBWV9QT1JUfWBcbiIsCiAgICAiaW1wb3J0IHsgUFJPTUVUSEVVU19VUkwgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCJcbmltcG9ydCB0eXBlIHsgU2VyaWVzIH0gZnJvbSBcIi4uL3JlcG9ydC9jaGFydFwiXG5pbXBvcnQgdHlwZSB7IE1ldHJpY3NEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiXG5cbmV4cG9ydCB0eXBlIFByb21ldGhldXNRdWVyeVJhbmdlUmVzcG9uc2UgPSB7XG5cdFwic3RhdHVzXCI6IFwic3VjY2Vzc1wiIHwgXCJlcnJvclwiLFxuXHRcImRhdGFcIjoge1xuXHRcdFwicmVzdWx0VHlwZVwiOiBcIm1hdHJpeFwiIHwgXCJ2ZWN0b3JcIiB8IFwic2NhbGFyXCIgfCBcInN0cmluZ1wiLFxuXHRcdFwicmVzdWx0XCI6IFNlcmllc1tdXG5cdH0sXG5cdFwid2FybmluZ3NcIjogc3RyaW5nW10sXG5cdFwiaW5mb3NcIjogc3RyaW5nW10sXG5cdFwiZXJyb3JcIjogc3RyaW5nLFxufVxuXG5mdW5jdGlvbiBxdWVyeVJhbmdlKHF1ZXJ5OiBzdHJpbmcsIHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUpIHtcblx0bGV0IHVybCA9IG5ldyBVUkwoXCIvYXBpL3YxL3F1ZXJ5X3JhbmdlXCIsIFBST01FVEhFVVNfVVJMKVxuXHR1cmwuc2VhcmNoUGFyYW1zLnNldChcInF1ZXJ5XCIsIHF1ZXJ5KVxuXHR1cmwuc2VhcmNoUGFyYW1zLnNldChcInN0YXJ0XCIsIE1hdGguY2VpbChzdGFydC5nZXRUaW1lKCkgLyAxMDAwKS50b1N0cmluZygpKVxuXHR1cmwuc2VhcmNoUGFyYW1zLnNldChcImVuZFwiLCBNYXRoLmZsb29yKGVuZC5nZXRUaW1lKCkgLyAxMDAwKS50b1N0cmluZygpKVxuXHR1cmwuc2VhcmNoUGFyYW1zLnNldChcInN0ZXBcIiwgXCIxXCIpXG5cblx0cmV0dXJuIGZldGNoKHVybCkudGhlbihyID0+IHIuanNvbigpKSBhcyBQcm9taXNlPFByb21ldGhldXNRdWVyeVJhbmdlUmVzcG9uc2U+XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb2xsZWN0UHJvbWV0aGV1cyhzdGFydDogRGF0ZSwgZW5kOiBEYXRlLCBtZXRyaWNzOiBNZXRyaWNzRGVmaW5pdGlvbltcIm1ldHJpY3NcIl0pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFNlcmllc1tdPj4ge1xuXHRsZXQgcmVzdWx0cyA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIFNlcmllc1tdPlxuXG5cdGZvciAoY29uc3QgbSBvZiBtZXRyaWNzKSB7XG5cdFx0bGV0IHsgc3RhdHVzLCBkYXRhIH0gPSBhd2FpdCBxdWVyeVJhbmdlKG0ucXVlcnksIHN0YXJ0LCBlbmQpXG5cdFx0aWYgKHN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIGNvbnRpbnVlXG5cblx0XHRyZXN1bHRzW20uaWRdID0gZGF0YS5yZXN1bHRcblx0fVxuXG5cdHJldHVybiByZXN1bHRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgTWV0cmljc0RlZmluaXRpb24gfSBmcm9tIFwiLi9kZWZpbml0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0TWV0cmljczogTWV0cmljc0RlZmluaXRpb24gPSB7XG5cdG1ldHJpY3M6IFtcblx0XHR7XG5cdFx0XHRpZDogXCJyZWFkX2xhdGVuY3lfbXNcIixcblx0XHRcdHF1ZXJ5OiBgMTAwMCAqIGhpc3RvZ3JhbV9xdWFudGlsZSgwLjk1LCBzdW0gYnkocmVmLCBsZSkgKHJhdGUoc2RrX29wZXJhdGlvbl9sYXRlbmN5X3NlY29uZHNfYnVja2V0e29wZXJhdGlvbl90eXBlPVwicmVhZFwifVsyc10pKSlgLFxuXHRcdFx0ZGVzY3JpcHRpb246IFwiOTV0aCBwZXJjZW50aWxlIHJlYWQgb3BlcmF0aW9ucyBsYXRlbmN5IGluIG1pbGxpc2Vjb25kc1wiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6IFwid3JpdGVfbGF0ZW5jeV9tc1wiLFxuXHRcdFx0cXVlcnk6IGAxMDAwICogaGlzdG9ncmFtX3F1YW50aWxlKDAuOTUsIHN1bSBieShyZWYsIGxlKSAocmF0ZShzZGtfb3BlcmF0aW9uX2xhdGVuY3lfc2Vjb25kc19idWNrZXR7b3BlcmF0aW9uX3R5cGU9XCJ3cml0ZVwifVsyc10pKSlgLFxuXHRcdFx0ZGVzY3JpcHRpb246IFwiOTV0aCBwZXJjZW50aWxlIHdyaXRlIG9wZXJhdGlvbnMgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHNcIixcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiBcInJlYWRfdGhyb3VnaHB1dFwiLFxuXHRcdFx0cXVlcnk6IGBzdW0gYnkocmVmKSAocmF0ZShzZGtfb3BlcmF0aW9uc190b3RhbHtvcGVyYXRpb25fdHlwZT1cInJlYWRcIn1bMnNdKSA+IDApYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJlYWQgb3BlcmF0aW9ucyB0aHJvdWdocHV0XCIsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogXCJ3cml0ZV90aHJvdWdocHV0XCIsXG5cdFx0XHRxdWVyeTogYHN1bSBieShyZWYpIChyYXRlKHNka19vcGVyYXRpb25zX3RvdGFse29wZXJhdGlvbl90eXBlPVwid3JpdGVcIn1bMnNdKSA+IDApYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIldyaXRlIG9wZXJhdGlvbnMgdGhyb3VnaHB1dFwiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6IFwicmVhZF9hdHRlbXB0c1wiLFxuXHRcdFx0cXVlcnk6IGBzdW0gYnkocmVmKSAocmF0ZShzZGtfcmV0cnlfYXR0ZW1wdHN7b3BlcmF0aW9uX3R5cGU9XCJyZWFkXCJ9WzJzXSkgPiAwKWAsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJSZWFkIGF0dGVtcHRzIHRocm91Z2hwdXRcIixcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiBcIndyaXRlX2F0dGVtcHRzXCIsXG5cdFx0XHRxdWVyeTogYHN1bSBieShyZWYpIChyYXRlKHNka19yZXRyeV9hdHRlbXB0c3tvcGVyYXRpb25fdHlwZT1cIndyaXRlXCJ9WzJzXSkgPiAwKWAsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJXcml0ZSBhdHRlbXB0cyB0aHJvdWdocHV0XCIsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogXCJyZWFkX2F2YWlsYWJpbGl0eVwiLFxuXHRcdFx0cXVlcnk6IGAxMDAgKiBzdW0gYnkgKHJlZikgKGluY3JlYXNlKHNka19vcGVyYXRpb25zX3N1Y2Nlc3NfdG90YWx7b3BlcmF0aW9uX3R5cGU9XCJyZWFkXCJ9WzJzXSkpIC8gc3VtIGJ5IChyZWYpIChpbmNyZWFzZShzZGtfb3BlcmF0aW9uc190b3RhbHtvcGVyYXRpb25fdHlwZT1cInJlYWRcIn1bMnNdKSlgLFxuXHRcdFx0ZGVzY3JpcHRpb246IFwiUmVhZCBvcGVyYXRpb25zIGF2YWlsYWJpbGl0eVwiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6IFwid3JpdGVfYXZhaWxhYmlsaXR5XCIsXG5cdFx0XHRxdWVyeTogYDEwMCAqIHN1bSBieSAocmVmKSAoaW5jcmVhc2Uoc2RrX29wZXJhdGlvbnNfc3VjY2Vzc190b3RhbHtvcGVyYXRpb25fdHlwZT1cIndyaXRlXCJ9WzJzXSkpIC8gc3VtIGJ5IChyZWYpIChpbmNyZWFzZShzZGtfb3BlcmF0aW9uc190b3RhbHtvcGVyYXRpb25fdHlwZT1cIndyaXRlXCJ9WzJzXSkpYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIldyaXRlIG9wZXJhdGlvbnMgYXZhaWxhYmlsaXR5XCIsXG5cdFx0fSxcblx0XVxufVxuIiwKICAgICIvLyBUYWJsZWF1IDEwXG5leHBvcnQgY29uc3QgcGFsZXR0ZSA9IFtcblx0XCIjRkY3RjBFXCIsXG5cdFwiIzFGNzdCNFwiLFxuXHRcIiNENjI3MjhcIixcblx0XCIjMkNBMDJDXCIsXG5cdFwiIzk0NjdCRFwiLFxuXHRcIiM4QzU2NEJcIixcblx0XCIjRTM3N0MyXCIsXG5cdFwiIzdGN0Y3RlwiLFxuXHRcIiNCQ0JEMjJcIixcblx0XCIjMTdCRUNGXCJcbl1cbiIsCiAgICAiaW1wb3J0IHsgcGFsZXR0ZSBhcyBkZWZhdWx0UGFsZXR0ZSB9IGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgdHlwZSBTZXJpZXMgPSB7XG5cdFwibWV0cmljXCI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFwidmFsdWVzXCI6IFtudW1iZXIsIHN0cmluZ11bXSAvLyBbdGltZXN0YW1wIChzZWMpLCB2YWx1ZSAoZmxvYXQpXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ2hhcnQodGl0bGU6IHN0cmluZywgc2VyaWVzOiBTZXJpZXNbXSwgeExhYmVsID0gXCJcIiwgeUxhYmVsID0gXCJcIiwgcGFsZXR0ZSA9IGRlZmF1bHRQYWxldHRlKTogc3RyaW5nIHtcblx0Ly8gMS4gRmlsdGVyIHplcm9zXG5cdGxldCBtaW5MZW5ndGggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdGZvciAoY29uc3QgcyBvZiBzZXJpZXMpIHtcblx0XHRzLnZhbHVlcyA9IHMudmFsdWVzLmZpbHRlcih2ID0+IHZbMV0gIT0gJzAnKTtcblx0XHRpZiAocy52YWx1ZXMubGVuZ3RoIDwgbWluTGVuZ3RoKSBtaW5MZW5ndGggPSBzLnZhbHVlcy5sZW5ndGg7XG5cdH1cblxuXHQvLyAyLiBMaW1pdCB2YWx1ZXMgKGNvdW50KVxuXHRmb3IgKGNvbnN0IHMgb2Ygc2VyaWVzKSB7XG5cdFx0Ly8gU2tpcCBmaXJzdCB2YWx1ZXMgdGhlbiBhZGp1c3Rpbmdcblx0XHRzLnZhbHVlcyA9IHMudmFsdWVzLnNsaWNlKC0xICogbWluTGVuZ3RoKTtcblx0fVxuXG5cdGxldCBtaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdGxldCBtYXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cblx0bGV0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRmb3IgKGNvbnN0IHMgb2Ygc2VyaWVzKSB7XG5cdFx0bGV0IGxpbmU6IG51bWJlcltdID0gW11cblxuXHRcdGZvciAobGV0IFssIHZhbHVlXSBvZiBzLnZhbHVlcykge1xuXHRcdFx0bGV0IHYgPSBwYXJzZUZsb2F0KHZhbHVlKVxuXHRcdFx0aWYgKGlzTmFOKHYpKSB7XG5cdFx0XHRcdHYgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgdlIgPSBNYXRoLnJvdW5kKHYgKiAxMDAwKSAvIDEwMDA7XG5cdFx0XHRsZXQgdkYgPSBNYXRoLmZsb29yKHYgKiAxMDAwKSAvIDEwMDA7XG5cdFx0XHRsZXQgdkMgPSBNYXRoLmNlaWwodiAqIDEwMDApIC8gMTAwMDtcblxuXHRcdFx0bGluZS5wdXNoKHZSKTtcblxuXHRcdFx0aWYgKHZGIDwgbWluKSBtaW4gPSB2Rjtcblx0XHRcdGlmICh2QyA+IG1heCkgbWF4ID0gdkM7XG5cdFx0fVxuXG5cdFx0bGluZXMucHVzaChgbGluZSBbJHtsaW5lLmpvaW4oKX1dYCk7XG5cdH1cblxuXHRyZXR1cm4gYFxcYFxcYFxcYG1lcm1haWRcbi0tLVxuY29uZmlnOlxuICAgIHh5Q2hhcnQ6XG4gICAgICAgIHdpZHRoOiAxMjAwXG4gICAgICAgIGhlaWdodDogNDAwXG4gICAgdGhlbWVWYXJpYWJsZXM6XG4gICAgICAgIHh5Q2hhcnQ6XG4gICAgICAgICAgICB0aXRsZUNvbG9yOiBcIiMyMjJcIlxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmZmZcIlxuICAgICAgICAgICAgeEF4aXNMaW5lQ29sb3I6IFwiIzIyMlwiXG4gICAgICAgICAgICB5QXhpc0xpbmVDb2xvcjogXCIjMjIyXCJcbiAgICAgICAgICAgIHBsb3RDb2xvclBhbGV0dGU6IFwiJHtwYWxldHRlLmpvaW4oKX1cIlxuLS0tXG54eWNoYXJ0LWJldGFcbiAgICB0aXRsZSBcIiR7dGl0bGV9XCJcbiAgICB4LWF4aXMgXCIke3hMYWJlbH1cIiAwIC0tPiAxMFxuICAgIHktYXhpcyBcIiR7eUxhYmVsfVwiICR7TWF0aC5mbG9vcihtaW4gKiAwLjkpfSAtLT4gJHtNYXRoLmNlaWwobWF4ICogMS4xKX1cbiAgICAke2xpbmVzLmpvaW4oXCJcXG4gICAgXCIpfVxuXFxgXFxgXFxgXG5gXG59XG4iLAogICAgImltcG9ydCB7IHJlbmRlckNoYXJ0LCB0eXBlIFNlcmllcyB9IGZyb20gXCIuL2NoYXJ0XCI7XG5cbmV4cG9ydCBjb25zdCByZW5kZXJSZXBvcnQgPSAoc2RrOiBzdHJpbmcsIG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIFNlcmllc1tdPikgPT4gYCMgU0xPIFJlcG9ydCA8aW1nIGFsaWduPVwicmlnaHRcIiBoZWlnaHQ9XCIzNlwiIHNyYz1cImh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uv4o6HLWhlYWQtJTIzRkY3RjBFP3N0eWxlPWZvci10aGUtYmFkZ2VcIj48aW1nIGFsaWduPVwicmlnaHRcIiBoZWlnaHQ9XCIzNlwiICBzcmM9XCJodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL+KOhy1iYXNlLSUyMzFGNzdCND9zdHlsZT1mb3ItdGhlLWJhZGdlXCI+PGltZyBhbGlnbj1cInJpZ2h0XCIgaGVpZ2h0PVwiMzZcIiBzcmM9XCJodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL3Nkay0ke3Nkay5yZXBsYWNlKC8tL2csIFwiLS1cIil9LSUyM0UzNzdDMj9zdHlsZT1mb3ItdGhlLWJhZGdlXCI+XG5cbiMjIyBPcGVyYXRpb24gU3VjY2VzcyBSYXRlXG5cbiR7cmVuZGVyQ2hhcnQoXCJvcGVyYXRpb25fdHlwZT1yZWFkXCIsIG1ldHJpY3NbXCJyZWFkX2F2YWlsYWJpbGl0eVwiXSwgXCJUaW1lLCBtXCIsIFwiU3VjY2VzcyBSYXRlLCAlXCIpfVxuXG4ke3JlbmRlckNoYXJ0KFwib3BlcmF0aW9uX3R5cGU9d3JpdGVcIiwgbWV0cmljc1tcIndyaXRlX2F2YWlsYWJpbGl0eVwiXSwgXCJcdFRpbWUsIG1cIiwgXCJTdWNjZXNzIFJhdGUsICVcIil9XG5cbiMjIyBPcGVyYXRpb25zIFBlciBTZWNvbmRcblxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXJlYWRcIiwgbWV0cmljc1tcInJlYWRfdGhyb3VnaHB1dFwiXSwgXCJUaW1lLCBtXCIsIFwiT3BlcmF0aW9uc1wiKX1cblxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXdyaXRlXCIsIG1ldHJpY3NbXCJ3cml0ZV90aHJvdWdocHV0XCJdLCBcIlRpbWUsIG1cIiwgXCJPcGVyYXRpb25zXCIpfVxuXG4jIyMgUmV0cnkgQXR0ZW1wdHMgUGVyIFNlY29uZFxuXG4ke3JlbmRlckNoYXJ0KFwib3BlcmF0aW9uX3R5cGU9cmVhZFwiLCBtZXRyaWNzW1wicmVhZF9hdHRlbXB0c1wiXSwgXCJUaW1lLCBtXCIsIFwiQXR0ZW1wdHNcIil9XG5cbiR7cmVuZGVyQ2hhcnQoXCJvcGVyYXRpb25fdHlwZT13cml0ZVwiLCBtZXRyaWNzW1wid3JpdGVfYXR0ZW1wdHNcIl0sIFwiVGltZSwgbVwiLCBcIkF0dGVtcHRzXCIpfVxuXG4jIyMgOTV0aCBQZXJjZW50aWxlIExhdGVuY3lcblxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXJlYWRcIiwgbWV0cmljc1tcInJlYWRfbGF0ZW5jeV9tc1wiXSwgXCJUaW1lLCBtXCIsIFwiTGF0ZW5jeSwgbXNcIil9XG5cbiR7cmVuZGVyQ2hhcnQoXCJvcGVyYXRpb25fdHlwZT13cml0ZVwiLCBtZXRyaWNzW1wid3JpdGVfbGF0ZW5jeV9tc1wiXSwgXCJUaW1lLCBtXCIsIFwiTGF0ZW5jeSwgbXNcIil9XG5gXG4iLAogICAgImltcG9ydCB7IGdldElucHV0IH0gZnJvbSBcIkBhY3Rpb25zL2NvcmVcIlxuaW1wb3J0IHsgY29udGV4dCwgZ2V0T2N0b2tpdCB9IGZyb20gXCJAYWN0aW9ucy9naXRodWJcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudFdvcmtmbG93UnVucyhicmFuY2g6IHN0cmluZykge1xuXHRsZXQgeyBkYXRhOiB7IHdvcmtmbG93cyB9IH0gPSBhd2FpdCBnZXRPY3Rva2l0KGdldElucHV0KFwiZ2l0aHViX3Rva2VuXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSkpLnJlc3QuYWN0aW9ucy5saXN0UmVwb1dvcmtmbG93cyh7XG5cdFx0b3duZXI6IGNvbnRleHQucmVwby5vd25lcixcblx0XHRyZXBvOiBjb250ZXh0LnJlcG8ucmVwbyxcblx0fSlcblxuXHRsZXQgd29ya2Zsb3cgPSB3b3JrZmxvd3MuZmluZCh3b3JrZmxvdyA9PiB3b3JrZmxvdy5uYW1lID09PSBjb250ZXh0LndvcmtmbG93KVxuXG5cdGlmICghd29ya2Zsb3cpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdGxldCB7IGRhdGE6IHsgd29ya2Zsb3dfcnVucyB9IH0gPSBhd2FpdCBnZXRPY3Rva2l0KGdldElucHV0KFwiZ2l0aHViX3Rva2VuXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSkpLnJlc3QuYWN0aW9ucy5saXN0V29ya2Zsb3dSdW5zKHtcblx0XHRvd25lcjogY29udGV4dC5yZXBvLm93bmVyLFxuXHRcdHJlcG86IGNvbnRleHQucmVwby5yZXBvLFxuXHRcdHdvcmtmbG93X2lkOiB3b3JrZmxvdy5pZCxcblx0XHRicmFuY2g6IGJyYW5jaCxcblx0XHRzdGF0dXM6IFwiY29tcGxldGVkXCIsXG5cdH0pXG5cblx0cmV0dXJuIHdvcmtmbG93X3J1bnMuZmlsdGVyKHJ1biA9PiBydW4uY29uY2x1c2lvbiA9PT0gXCJzdWNjZXNzXCIpXG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLE1BQUksa0JBQW1CLFdBQVEsUUFBSyxvQkFBcUIsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQzVGLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsV0FBTyxlQUFlLEdBQUcsSUFBSSxFQUFFLFlBQVksTUFBTSxhQUFhLEdBQUc7QUFBRSxhQUFPLEVBQUU7QUFBQSxNQUFNLENBQUM7QUFBQSxjQUN6RSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUk7QUFDeEIsUUFBSSxPQUFPO0FBQVcsV0FBSztBQUMzQixNQUFFLE1BQU0sRUFBRTtBQUFBO0FBRWQsTUFBSSxxQkFBc0IsV0FBUSxRQUFLLHVCQUF3QixPQUFPLGlCQUFrQixDQUFDLEdBQUcsR0FBRztBQUMzRixXQUFPLGVBQWUsR0FBRyxXQUFXLEVBQUUsWUFBWSxNQUFNLE9BQU8sRUFBRSxDQUFDO0FBQUEsY0FDekQsQ0FBQyxHQUFHLEdBQUc7QUFDaEIsTUFBRSxhQUFhO0FBQUE7QUFFbkIsTUFBSSxlQUFnQixXQUFRLFFBQUssd0JBQTBCLENBQUMsS0FBSztBQUM3RCxRQUFJLE9BQU8sSUFBSTtBQUFZLGFBQU87QUFDbEMsUUFBSSxTQUFTLENBQUM7QUFDZCxRQUFJLE9BQU87QUFBTSxlQUFTLEtBQUs7QUFBSyxZQUFJLE1BQU0sYUFBYSxPQUFPLGVBQWUsS0FBSyxLQUFLLENBQUM7QUFBRywwQkFBZ0IsUUFBUSxLQUFLLENBQUM7QUFBQTtBQUM3SCx1QkFB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O0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUVBLFdBQVMsSUFBSSxFQUFHLElBQUkscUJBQXFCLFVBQVUsR0FBRztBQUNwRCxVQUFNLE1BQU0scUJBQXFCO0FBQ2pDLFVBQU0sZ0JBQWdCLElBQUksWUFBWTtBQUN0QywrQkFBMkIsT0FB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QUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBO0FBQUEsSUFBUSxPQUFPO0FBQUE7QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsRUFDdEQ7QUFFQSxXQUFTLGVBQWdCLENBQUMsT0FBTztBQUMvQixXQUFPLGNBQWM7QUFBQTtBQUd2QixNQUFNLFlBQVk7QUFDbEIsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZ0JBQWdCO0FBQ3RCLE1BQU0sYUFBYTtBQUVuQixXQUFTLFdBQVksQ0FBQyxLQUFLO0FBQ3pCLFVBQU0sTUFBTSxDQUFDO0FBQ2IsUUFBSSxRQUFRO0FBQ1osUUFBSSxVQUFVO0FBQ2QsUUFBSSxVQUFVO0FBQ2QsUUFBSSxXQUFXO0FBQ2YsUUFBSSxJQUFJO0FBQ1IsUUFBSSxNQUFNO0FBQ1YsVUFBTSxNQUFNLElBQUk7QUFFaEIsYUFBUyxJQUFJLEVBQUcsSUFBSSxPQUFPLEdBQUc7QUFDNUIsWUFBTSxPQUFPLElBQUk7QUFDakIsVUFBSSxTQUFTLFFBQVEsU0FBUztBQUM1QixZQUFJLFVBQVU7QUFBRSxxQkFBVztBQUFBLFFBQU0sT0FBTztBQUN0QyxxQkFBVztBQUNYO0FBQUE7QUFBQSxNQUVKLFdBQVcsU0FBUyxLQUFLO0FBQ3ZCLGFBQUssVUFBVTtBQUNiLGNBQUksU0FBUztBQUNYLHNCQUFVO0FBQ1Ysb0JBQVE7QUFBQSxVQUNWLE9BQU87QUFBRSxzQkFBVTtBQUFBO0FBQ25CO0FBQUEsUUFDRixPQUFPO0FBQUUscUJBQVc7QUFBQTtBQUFBLE1BQ3RCLE9BQU87QUFDTCxZQUFJLFlBQVksU0FBUztBQUFFLGlCQUFPO0FBQUEsUUFBSztBQUN2QyxtQkFBVztBQUNYLGFBQUssVUFBVSxpQkFBaUIsVUFBVSxlQUFlLFNBQVMsS0FBSztBQUNyRSxjQUFJLFVBQVUsZUFBZTtBQUMzQixvQkFBUTtBQUNSLHNCQUFVLElBQUksVUFBVSxDQUFDO0FBQUEsVUFDM0IsT0FBTztBQUFFLG9CQUFRO0FBQUE7QUFDakIsZ0JBQU07QUFDTjtBQUFBLFFBQ0YsV0FBVyxVQUFVLGNBQ2xCLFNBQVMsT0FBTyxTQUFTLFFBQzFCLElBQUksUUFBUTtBQUNaLGtCQUFRLFNBQVMsTUFDYixnQkFDQTtBQUNKLGNBQUksS0FBSyxDQUFDLEtBQUssU0FBUztBQUN4QixnQkFBTTtBQUNOO0FBQUEsUUFDRixZQUFZLFdBQVcsU0FBUyxLQUFLO0FBQ25DLGtCQUFRO0FBQ1IsY0FBSSxTQUFTO0FBQ1gsZ0JBQUksSUFBSSxRQUFRO0FBQ2Qsb0JBQU0sV0FBVyxJQUFJLFFBQVEsWUFBWSxlQUFlLEdBQ3RELFVBQ0EsT0FBTztBQUFBLFlBQ1g7QUFDQSxzQkFBVTtBQUFBLFVBQ1osV0FBVyxJQUFJLFFBQVE7QUFDckIsa0JBQU0sV0FBVyxLQUFLLFVBQVUsTUFBTTtBQUFBLFVBQ3hDO0FBQ0EsY0FBSSxJQUFJLE9BQU8sV0FBVztBQUFFLGdCQUFJLEtBQUs7QUFBQSxVQUFJLE9BQU87QUFBRSxnQkFBSSxHQUFHLEtBQUs7QUFBQTtBQUM5RCxnQkFBTTtBQUNOLFlBQUU7QUFDRjtBQUFBLFFBQ0YsWUFBWSxZQUFZLFNBQVMsT0FBTyxTQUFTLE9BQU87QUFBRTtBQUFBLFFBQVM7QUFBQTtBQUVyRSxhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksV0FBVyxJQUFJLFFBQVE7QUFDekIsWUFBTSxXQUFXLElBQUksUUFBUSxZQUFZLGVBQWUsR0FDdEQsVUFDQSxPQUFPO0FBQUEsSUFDWCxXQUFXLEtBQUs7QUFDZCxZQUFNLFdBQVcsS0FBSyxVQUFVLE1BQU07QUFBQSxJQUN4QztBQUVBLFFBQUksSUFBSSxPQUFPLFdBQVc7QUFDeEIsVUFBSSxLQUFLO0FBQUUsWUFBSSxLQUFLO0FBQUEsTUFBSTtBQUFBLElBQzFCLE9BQU87QUFBRSxVQUFJLEdBQUcsS0FBSztBQUFBO0FBRXJCLFdBQU87QUFBQTtBQUdULFNBQU8sVUFBVTtBQUFBOzs7O0FDak1qQixTQUFPLG1CQUFtQixRQUFTLENBQUMsTUFBTTtBQUN4QyxlQUFXLFNBQVMsVUFBVTtBQUFFLGFBQU87QUFBQSxJQUFHO0FBQzFDLGFBQVMsSUFBSSxLQUFLLFNBQVMsRUFBRyxLQUFLLEtBQUssR0FBRztBQUN6QyxjQUFRLEtBQUssV0FBVyxDQUFDO0FBQUEsYUFDbEI7QUFBQSxhQUNBO0FBQ0gsaUJBQU8sS0FBSyxNQUFNLElBQUksQ0FBQztBQUN2QixpQkFBUSxTQUFTLFFBQVEsU0FBUyxNQUFNLEtBQUs7QUFBQTtBQUFBLElBRW5EO0FBQ0EsV0FBUSxTQUFTLFFBQVEsU0FBUyxNQUFNLEtBQUs7QUFBQTtBQUFBOzs7O0FDSC9DLFFBQVE7QUFDUixRQUFRO0FBRVIsTUFBTTtBQUVOLE1BQU07QUFDTixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFFTixNQUFNLGNBQWM7QUFDcEIsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sYUFBYTtBQUNuQixNQUFNLGNBQWM7QUFDcEIsTUFBTSxVQUFVO0FBRWhCLFlBQVUsU0FBUztBQUNuQixXQUFTLFNBQVUsQ0FBQyxLQUFLLEtBQUs7QUFDNUIsUUFBSTtBQUNKLFFBQUk7QUFDSixVQUFNLFFBQU87QUFDYixRQUFJO0FBQ0osVUFBTSxTQUFTLElBQUk7QUFDbkIsVUFBTSxjQUFjLElBQUksZ0JBQWdCLENBQUMsV0FBVyxhQUFhLGFBQWMsZ0JBQWdCLDhCQUE4QixhQUFhO0FBQzFJLFVBQU0sZ0JBQWdCLElBQUksaUJBQWlCLENBQUM7QUFDNUMsVUFBTSxhQUFhLElBQUksY0FBYztBQUNyQyxVQUFNLGVBQWUsSUFBSTtBQUN6QixVQUFNLFdBQVcsRUFBRSxlQUFlLElBQUksUUFBUTtBQUU5QyxTQUFLLElBQUksR0FBRyxNQUFNLGNBQWMsT0FBUSxJQUFJLE9BQU8sR0FBRztBQUNwRCxVQUFJLE1BQU0sUUFBUSxjQUFjLEVBQUUsS0FDaEMsWUFBWSxLQUFLLGNBQWMsR0FBRyxFQUFFLEdBQUc7QUFDdkMsbUJBQVcsY0FBYyxHQUFHO0FBQzVCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxhQUFTLGFBQWMsR0FBRztBQUN4QixVQUFJLFVBQVUsS0FBSyxhQUFhLElBQUksT0FBTztBQUN6QyxtQkFBVztBQUNYLGNBQUssSUFBSTtBQUFBLE1BQ1g7QUFBQTtBQUdGLGVBQVcsYUFBYSxVQUFVO0FBQUUsWUFBTSxJQUFJLE1BQU0sK0JBQStCO0FBQUEsSUFBRTtBQUVyRixVQUFNLGlCQUFpQixTQUFTLFFBQVEsYUFBYSxJQUFJLE9BQU8sSUFBSTtBQUNwRSxVQUFNLGdCQUFnQixTQUFTLFFBQVEsWUFBWSxRQUFRO0FBQzNELFVBQU0sYUFBYSxTQUFTLFFBQVEsU0FBUyxRQUFRO0FBQ3JELFVBQU0sY0FBYyxTQUFTLFFBQVEsVUFBVSxRQUFRO0FBQ3ZELFVBQU0sYUFBYSxTQUFTLFFBQVEsU0FBUyxRQUFRO0FBQ3JELFVBQU0sbUJBQW1CLFNBQVMsUUFBUSxlQUFlLElBQUk7QUFDN0QsVUFBTSxrQkFBa0IsU0FBUyxRQUFRLGNBQWMsS0FBSyxJQUFJO0FBRWhFLFFBQUksU0FBUztBQUNiLFFBQUksVUFBVTtBQUNkLFFBQUksUUFBUTtBQUNaLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSSxXQUFXO0FBRWYsU0FBSyxhQUFhO0FBQ2xCLFNBQUssU0FBUztBQUNkLFNBQUssTUFBTTtBQUNYLFNBQUssVUFBVTtBQUNmLFNBQUssT0FBTztBQUVaLFVBQU0sWUFBWTtBQUFBLE1BQ2hCO0FBQUEsTUFDQSxnQkFBZ0I7QUFBQSxNQUNoQixlQUFlO0FBQUEsTUFDZixTQUFTLFNBQVM7QUFBQSxNQUNsQixlQUFlLElBQUk7QUFBQSxJQUNyQjtBQUVBLFNBQUssU0FBUyxJQUFJLE1BQU0sU0FBUztBQUNqQyxTQUFLLE9BQU8sR0FBRyxpQkFBa0IsR0FBRztBQUNsQyxZQUFLLGFBQWE7QUFDbEIsVUFBSSxNQUFLLFFBQVEsTUFBSyxRQUFRO0FBQzVCLGNBQU0sS0FBSyxNQUFLO0FBQ2hCLGNBQUssTUFBTTtBQUNYLFdBQUc7QUFBQSxNQUNMO0FBQUEsS0FDRCxFQUFFLEdBQUcsaUJBQWlCLE1BQU8sQ0FBQyxNQUFNO0FBQ25DLFlBQU0sTUFBSyxVQUFVLFlBQVk7QUFDL0IsY0FBSyxPQUFPLGVBQWUsUUFBUSxNQUFNO0FBQ3pDLGNBQUssT0FBTyxHQUFHLFFBQVEsUUFBUTtBQUMvQixZQUFJLGdCQUFnQjtBQUNwQixZQUFJLEtBQUssWUFBWTtBQUNyQixlQUFPLFNBQVMsSUFBSTtBQUFBLE1BQ3RCO0FBS0EsVUFBSSxVQUFVO0FBQ1osY0FBTSxRQUFRO0FBQ2QsY0FBTSxLQUFLLEtBQUs7QUFDaEIsY0FBTSxtQkFBbUIsS0FBSztBQUFBLE1BQ2hDO0FBRUEsV0FBSyxHQUFHLGtCQUFtQixDQUFDLFFBQVE7QUFDbEMsWUFBSTtBQUNKLFlBQUk7QUFDSixZQUFJO0FBQ0osWUFBSTtBQUNKLFlBQUk7QUFDSixZQUFJO0FBQ0osWUFBSSxRQUFRO0FBRVosWUFBSSxPQUFPLGlCQUFpQjtBQUMxQixtQkFBUyxZQUFZLE9BQU8sZ0JBQWdCLEVBQUU7QUFDOUMsY0FBSSxPQUFPLElBQUk7QUFDYixzQkFBVSxPQUFPLEdBQUcsWUFBWTtBQUNoQyxpQkFBSyxJQUFJLEdBQUcsTUFBTSxPQUFPLE9BQVEsSUFBSSxPQUFPLEdBQUc7QUFDN0Msa0JBQUksV0FBVyxLQUFLLE9BQU8sR0FBRyxFQUFFLEdBQUc7QUFDakMsMEJBQVUsT0FBTyxHQUFHLEdBQUcsWUFBWTtBQUNuQztBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFlBQVksV0FBVztBQUFFLG9CQUFVO0FBQUEsUUFBYTtBQUNwRCxZQUFJLFlBQVksV0FBVztBQUFFLG9CQUFVO0FBQUEsUUFBVztBQUVsRCxZQUFJLE9BQU8sd0JBQXdCO0FBQ2pDLG1CQUFTLFlBQVksT0FBTyx1QkFBdUIsRUFBRTtBQUNyRCxlQUFLLFNBQVMsS0FBSyxPQUFPLEVBQUUsR0FBRztBQUFFLG1CQUFPLFNBQVMsSUFBSTtBQUFBLFVBQUU7QUFDdkQsZUFBSyxJQUFJLEdBQUcsTUFBTSxPQUFPLE9BQVEsSUFBSSxPQUFPLEdBQUc7QUFDN0MsZ0JBQUksUUFBUSxLQUFLLE9BQU8sR0FBRyxFQUFFLEdBQUc7QUFDOUIsMEJBQVksT0FBTyxHQUFHO0FBQUEsWUFDeEIsV0FBVyxZQUFZLEtBQUssT0FBTyxHQUFHLEVBQUUsR0FBRztBQUN6Qyx5QkFBVyxPQUFPLEdBQUc7QUFDckIsbUJBQUssY0FBYztBQUFFLDJCQUFXLFNBQVMsUUFBUTtBQUFBLGNBQUU7QUFBQSxZQUNyRDtBQUFBLFVBQ0Y7QUFBQSxRQUNGLE9BQU87QUFBRSxpQkFBTyxTQUFTLElBQUk7QUFBQTtBQUU3QixZQUFJLE9BQU8sOEJBQThCO0FBQUUscUJBQVcsT0FBTyw2QkFBNkIsR0FBRyxZQUFZO0FBQUEsUUFBRSxPQUFPO0FBQUUscUJBQVc7QUFBQTtBQUUvSCxZQUFJLFFBQ0Y7QUFFRixZQUFJLFlBQVksV0FBVyxTQUFTLFFBQVEsR0FBRztBQUU3QyxjQUFJLFdBQVcsWUFBWTtBQUN6QixpQkFBSyxJQUFJLGVBQWU7QUFDdEIsa0JBQUksZ0JBQWdCO0FBQ3BCLGtCQUFJLEtBQUssWUFBWTtBQUFBLFlBQ3ZCO0FBQ0EsbUJBQU8sU0FBUyxJQUFJO0FBQUEsVUFDdEI7QUFFQSxZQUFFO0FBRUYsY0FBSSxJQUFJLGNBQWMsTUFBTSxNQUFNLEdBQUc7QUFDbkMsa0JBQUssT0FBTyxRQUFRO0FBQ3BCO0FBQUEsVUFDRjtBQUVBLFlBQUU7QUFDRixnQkFBTSxPQUFPLElBQUksV0FBVyxRQUFRO0FBQ3BDLG9CQUFVO0FBQ1YsZUFBSyxHQUFHLGVBQWdCLEdBQUc7QUFDekIsY0FBRTtBQUNGLGtCQUFLLFNBQVM7QUFDZCwwQkFBYztBQUNkLGdCQUFJLE1BQUssUUFBUSxNQUFLLFlBQVk7QUFDaEMsb0JBQU0sS0FBSyxNQUFLO0FBQ2hCLG9CQUFLLE1BQU07QUFDWCxpQkFBRztBQUFBLFlBQ0w7QUFBQSxXQUNEO0FBQ0QsZUFBSyxnQkFBaUIsQ0FBQyxHQUFHO0FBQ3hCLGlCQUFLLE1BQUssUUFBUTtBQUFFO0FBQUEsWUFBTztBQUMzQixrQkFBSyxTQUFTO0FBQ2QsZ0JBQUksTUFBSyxRQUFRLE1BQUssWUFBWTtBQUNoQyxvQkFBTSxLQUFLLE1BQUs7QUFDaEIsb0JBQUssTUFBTTtBQUNYLGlCQUFHO0FBQUEsWUFDTDtBQUFBO0FBRUYsY0FBSSxLQUFLLFFBQVEsV0FBVyxNQUFNLFVBQVUsVUFBVSxPQUFPO0FBRTdELDJCQUFrQixDQUFDLE1BQU07QUFDdkIsaUJBQUssU0FBUyxLQUFLLFVBQVUsZUFBZTtBQUMxQyxvQkFBTSxXQUFXLGdCQUFnQixRQUFRLEtBQUs7QUFDOUMsa0JBQUksV0FBVyxHQUFHO0FBQUUscUJBQUssS0FBSyxLQUFLLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFBQSxjQUFFO0FBQ3ZELG1CQUFLLFlBQVk7QUFDakIsbUJBQUssWUFBWTtBQUNqQixtQkFBSyxtQkFBbUIsTUFBTTtBQUM5QixtQkFBSyxLQUFLLE9BQU87QUFDakI7QUFBQSxZQUNGLFlBQVksS0FBSyxLQUFLLElBQUksR0FBRztBQUFFLG9CQUFLLFNBQVM7QUFBQSxZQUFLO0FBRWxELGlCQUFLLFlBQVk7QUFBQTtBQUduQiwwQkFBaUIsR0FBRztBQUNsQixzQkFBVTtBQUNWLGlCQUFLLEtBQUssSUFBSTtBQUFBO0FBQUEsUUFFbEIsT0FBTztBQUVMLGNBQUksWUFBWSxhQUFhO0FBQzNCLGlCQUFLLElBQUksZ0JBQWdCO0FBQ3ZCLGtCQUFJLGlCQUFpQjtBQUNyQixrQkFBSSxLQUFLLGFBQWE7QUFBQSxZQUN4QjtBQUNBLG1CQUFPLFNBQVMsSUFBSTtBQUFBLFVBQ3RCO0FBRUEsWUFBRTtBQUNGLFlBQUU7QUFDRixjQUFJLFNBQVM7QUFDYixjQUFJLFlBQVk7QUFDaEIscUJBQVc7QUFFWCwyQkFBa0IsQ0FBQyxNQUFNO0FBQ3ZCLGlCQUFLLFNBQVMsS0FBSyxVQUFVLGdCQUFnQjtBQUMzQyxvQkFBTSxXQUFZLGtCQUFrQixRQUFRLEtBQUs7QUFDakQsd0JBQVUsS0FBSyxTQUFTLFVBQVUsR0FBRyxRQUFRO0FBQzdDLDBCQUFZO0FBQ1osbUJBQUssbUJBQW1CLE1BQU07QUFBQSxZQUNoQyxPQUFPO0FBQUUsd0JBQVUsS0FBSyxTQUFTLFFBQVE7QUFBQTtBQUFBO0FBRzNDLDBCQUFpQixHQUFHO0FBQ2xCLHVCQUFXO0FBQ1gsZ0JBQUksT0FBTyxRQUFRO0FBQUUsdUJBQVMsV0FBVyxRQUFRLFVBQVUsT0FBTztBQUFBLFlBQUU7QUFDcEUsZ0JBQUksS0FBSyxTQUFTLFdBQVcsUUFBUSxPQUFPLFdBQVcsVUFBVSxPQUFPO0FBQ3hFLGNBQUU7QUFDRiwwQkFBYztBQUFBO0FBQUE7QUFTbEIsYUFBSyxlQUFlLE9BQU87QUFFM0IsYUFBSyxHQUFHLFFBQVEsTUFBTTtBQUN0QixhQUFLLEdBQUcsT0FBTyxLQUFLO0FBQUEsT0FDckIsRUFBRSxHQUFHLGlCQUFrQixDQUFDLEtBQUs7QUFDNUIsWUFBSSxTQUFTO0FBQUUsa0JBQVEsS0FBSyxTQUFTLEdBQUc7QUFBQSxRQUFFO0FBQUEsT0FDM0M7QUFBQSxLQUNGLEVBQUUsR0FBRyxpQkFBa0IsQ0FBQyxLQUFLO0FBQzVCLFVBQUksS0FBSyxTQUFTLEdBQUc7QUFBQSxLQUN0QixFQUFFLEdBQUcsa0JBQW1CLEdBQUc7QUFDMUIsaUJBQVc7QUFDWCxvQkFBYztBQUFBLEtBQ2Y7QUFBQTtBQUdILFlBQVUsVUFBVSxnQkFBaUIsQ0FBQyxPQUFPLElBQUk7QUFDL0MsVUFBTSxJQUFJLEtBQUssT0FBTyxNQUFNLEtBQUs7QUFDakMsUUFBSSxNQUFNLEtBQUssUUFBUTtBQUNyQixTQUFHO0FBQUEsSUFDTCxPQUFPO0FBQ0wsV0FBSyxjQUFjO0FBQ25CLFdBQUssTUFBTTtBQUFBO0FBQUE7QUFJZixZQUFVLFVBQVUsY0FBZSxHQUFHO0FBQ3BDLFVBQU0sUUFBTztBQUViLFFBQUksTUFBSyxPQUFPLFVBQVU7QUFDeEIsWUFBSyxPQUFPLElBQUk7QUFBQSxJQUNsQixZQUFZLE1BQUssS0FBSyxPQUFPO0FBQzNCLGNBQVEsaUJBQWtCLEdBQUc7QUFDM0IsY0FBSyxLQUFLLFFBQVE7QUFDbEIsY0FBSyxLQUFLLEtBQUssUUFBUTtBQUFBLE9BQ3hCO0FBQUEsSUFDSDtBQUFBO0FBR0YsV0FBUyxRQUFTLENBQUMsTUFBTTtBQUN2QixTQUFLLE9BQU87QUFBQTtBQUdkLFdBQVMsVUFBVyxDQUFDLE1BQU07QUFDekIsYUFBUyxLQUFLLE1BQU0sSUFBSTtBQUV4QixTQUFLLFlBQVk7QUFFakIsU0FBSyxZQUFZO0FBQUE7QUFHbkIsV0FBUyxZQUFZLFFBQVE7QUFFN0IsYUFBVyxVQUFVLGdCQUFpQixDQUFDLEdBQUc7QUFBQTtBQUUxQyxTQUFPLFVBQVU7QUFBQTs7OztBQy9TakIsTUFBTSxVQUFVO0FBRWhCLE1BQU0sTUFBTTtBQUFBLElBQ1Y7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLEVBQy9DO0FBRUEsV0FBUyxPQUFRLEdBQUc7QUFDbEIsU0FBSyxTQUFTO0FBQUE7QUFFaEIsVUFBUSxVQUFVLGdCQUFpQixDQUFDLEtBQUs7QUFFdkMsVUFBTSxJQUFJLFFBQVEsU0FBUyxHQUFHO0FBQzlCLFFBQUksTUFBTTtBQUNWLFFBQUksSUFBSTtBQUFHLFFBQUksSUFBSTtBQUFHLFVBQU0sTUFBTSxJQUFJO0FBQ3RDLFVBQU8sSUFBSSxPQUFPLEdBQUc7QUFDbkIsVUFBSSxLQUFLLFdBQVcsV0FBVztBQUM3QixhQUFLLElBQUksSUFBSSxXQUFXLENBQUMsSUFBSTtBQUMzQixpQkFBTyxNQUFNLEtBQUs7QUFDbEIsZUFBSyxTQUFTO0FBQ2QsWUFBRTtBQUFBLFFBQ0osT0FBTztBQUNMLGVBQUssVUFBVSxJQUFJO0FBQ25CLFlBQUU7QUFDRixjQUFJLEtBQUssT0FBTyxXQUFXLEdBQUc7QUFDNUIsbUJBQU8sT0FBTyxhQUFhLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztBQUNwRCxpQkFBSyxTQUFTO0FBQUEsVUFDaEI7QUFBQTtBQUFBLE1BRUosV0FBVyxJQUFJLE9BQU8sS0FBSztBQUN6QixZQUFJLElBQUksR0FBRztBQUNULGlCQUFPLElBQUksVUFBVSxHQUFHLENBQUM7QUFDekIsY0FBSTtBQUFBLFFBQ047QUFDQSxhQUFLLFNBQVM7QUFDZCxVQUFFO0FBQUEsTUFDSjtBQUFBLElBQ0Y7QUFDQSxRQUFJLElBQUksT0FBTyxLQUFLLFdBQVcsV0FBVztBQUFFLGFBQU8sSUFBSSxVQUFVLENBQUM7QUFBQSxJQUFFO0FBQ3BFLFdBQU87QUFBQTtBQUVULFVBQVEsVUFBVSxnQkFBaUIsR0FBRztBQUNwQyxTQUFLLFNBQVM7QUFBQTtBQUdoQixTQUFPLFVBQVU7QUFBQTs7OztBQ25EakIsTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBRU4sTUFBTSxhQUFhO0FBRW5CLGFBQVcsU0FBUztBQUNwQixXQUFTLFVBQVcsQ0FBQyxLQUFLLEtBQUs7QUFDN0IsVUFBTSxTQUFTLElBQUk7QUFDbkIsVUFBTSxnQkFBZ0IsSUFBSTtBQUMxQixTQUFLLE1BQU07QUFFWCxTQUFLLGlCQUFpQixTQUFTLFFBQVEsYUFBYSxJQUFJLE9BQU8sSUFBSTtBQUNuRSxTQUFLLHFCQUFxQixTQUFTLFFBQVEsaUJBQWlCLEdBQUc7QUFDL0QsU0FBSyxjQUFjLFNBQVMsUUFBUSxVQUFVLFFBQVE7QUFFdEQsUUFBSTtBQUNKLGFBQVMsSUFBSSxHQUFHLE1BQU0sY0FBYyxPQUFRLElBQUksT0FBTyxHQUFHO0FBQ3hELFVBQUksTUFBTSxRQUFRLGNBQWMsRUFBRSxLQUM5QixXQUFXLEtBQUssY0FBYyxHQUFHLEVBQUUsR0FBRztBQUN4QyxrQkFBVSxjQUFjLEdBQUcsR0FBRyxZQUFZO0FBQzFDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFlBQVksV0FBVztBQUFFLGdCQUFVLElBQUksY0FBYztBQUFBLElBQU87QUFFaEUsU0FBSyxVQUFVLElBQUk7QUFDbkIsU0FBSyxVQUFVO0FBQ2YsU0FBSyxVQUFVO0FBQ2YsU0FBSyxTQUFTO0FBQ2QsU0FBSyxpQkFBaUI7QUFDdEIsU0FBSyxZQUFZO0FBQ2pCLFNBQUssWUFBWTtBQUNqQixTQUFLLE9BQU87QUFDWixTQUFLLE9BQU87QUFDWixTQUFLLFlBQVk7QUFDakIsU0FBSyxZQUFZO0FBQ2pCLFNBQUssWUFBWTtBQUFBO0FBR25CLGFBQVcsVUFBVSxnQkFBaUIsQ0FBQyxNQUFNLElBQUk7QUFDL0MsUUFBSSxLQUFLLFlBQVksS0FBSyxhQUFhO0FBQ3JDLFdBQUssS0FBSyxJQUFJLGdCQUFnQjtBQUM1QixhQUFLLElBQUksaUJBQWlCO0FBQzFCLGFBQUssSUFBSSxLQUFLLGFBQWE7QUFBQSxNQUM3QjtBQUNBLGFBQU8sR0FBRztBQUFBLElBQ1o7QUFFQSxRQUFJO0FBQU8sUUFBSTtBQUFRLFFBQUk7QUFBRyxRQUFJLElBQUk7QUFBRyxVQUFNLE1BQU0sS0FBSztBQUUxRCxXQUFPLElBQUksS0FBSztBQUNkLFVBQUksS0FBSyxXQUFXLE9BQU87QUFDekIsZ0JBQVEsU0FBUztBQUNqQixhQUFLLElBQUksRUFBRyxJQUFJLE9BQU8sR0FBRztBQUN4QixlQUFLLEtBQUssZ0JBQWdCO0FBQUUsY0FBRTtBQUFBLFVBQUU7QUFDaEMsY0FBSSxLQUFLLE9BQU8sSUFBYTtBQUMzQixvQkFBUTtBQUNSO0FBQUEsVUFDRixXQUFXLEtBQUssT0FBTyxJQUFhO0FBQ2xDLHFCQUFTO0FBQ1Q7QUFBQSxVQUNGO0FBQ0EsY0FBSSxLQUFLLGtCQUFrQixLQUFLLGNBQWMsS0FBSyxvQkFBb0I7QUFDckUsaUJBQUssWUFBWTtBQUNqQjtBQUFBLFVBQ0YsV0FBVyxLQUFLLGdCQUFnQjtBQUFFLGNBQUUsS0FBSztBQUFBLFVBQVU7QUFBQSxRQUNyRDtBQUVBLFlBQUksVUFBVSxXQUFXO0FBRXZCLGNBQUksUUFBUSxHQUFHO0FBQUUsaUJBQUssUUFBUSxLQUFLLFFBQVEsTUFBTSxLQUFLLFNBQVMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUFBLFVBQUU7QUFDcEYsZUFBSyxTQUFTO0FBRWQsZUFBSyxZQUFZO0FBQ2pCLGVBQUssaUJBQWlCO0FBQ3RCLGVBQUssT0FBTztBQUNaLGVBQUssWUFBWTtBQUNqQixlQUFLLFlBQVk7QUFDakIsZUFBSyxRQUFRLE1BQU07QUFFbkIsY0FBSSxRQUFRO0FBQUEsUUFDZCxXQUFXLFdBQVcsV0FBVztBQUUvQixZQUFFLEtBQUs7QUFDUCxjQUFJO0FBQUssZ0JBQU0sV0FBVyxLQUFLO0FBQy9CLGNBQUksU0FBUyxHQUFHO0FBQUUsa0JBQU8sS0FBSyxRQUFRLEtBQUssUUFBUSxNQUFNLEtBQUssU0FBUyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQUEsVUFBRyxPQUFPO0FBQUUsa0JBQU0sS0FBSztBQUFBO0FBRWxILGVBQUssWUFBWTtBQUNqQixlQUFLLGlCQUFpQjtBQUN0QixlQUFLLE9BQU87QUFDWixlQUFLLFlBQVk7QUFDakIsZUFBSyxZQUFZO0FBQ2pCLGVBQUssUUFBUSxNQUFNO0FBRW5CLGNBQUksSUFBSSxRQUFRO0FBQ2QsaUJBQUssSUFBSSxLQUFLLFNBQVMsV0FBVyxLQUFLLFVBQVUsS0FBSyxPQUFPLEdBQzNELElBQ0EsVUFDQSxLQUFLO0FBQUEsVUFDVDtBQUVBLGNBQUksU0FBUztBQUNiLGNBQUksS0FBSyxZQUFZLEtBQUssYUFBYTtBQUFFLG1CQUFPLEdBQUc7QUFBQSxVQUFFO0FBQUEsUUFDdkQsV0FBVyxLQUFLLFdBQVc7QUFFekIsY0FBSSxJQUFJLEdBQUc7QUFBRSxpQkFBSyxRQUFRLEtBQUssUUFBUSxNQUFNLEtBQUssU0FBUyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQUEsVUFBRTtBQUM1RSxjQUFJO0FBQ0osZUFBSyxLQUFLLFlBQVksS0FBSyxLQUFLLFlBQVksS0FBSyxvQkFBb0I7QUFFbkUsaUJBQUssaUJBQWlCO0FBQ3RCLGlCQUFLLFlBQVk7QUFBQSxVQUNuQjtBQUFBLFFBQ0YsT0FBTztBQUNMLGNBQUksSUFBSSxLQUFLO0FBQUUsaUJBQUssUUFBUSxLQUFLLFFBQVEsTUFBTSxLQUFLLFNBQVMsVUFBVSxDQUFDLENBQUM7QUFBQSxVQUFFO0FBQzNFLGNBQUk7QUFBQTtBQUFBLE1BRVIsT0FBTztBQUNMLGlCQUFTO0FBQ1QsYUFBSyxJQUFJLEVBQUcsSUFBSSxPQUFPLEdBQUc7QUFDeEIsZUFBSyxLQUFLLGdCQUFnQjtBQUFFLGNBQUU7QUFBQSxVQUFFO0FBQ2hDLGNBQUksS0FBSyxPQUFPLElBQWE7QUFDM0IscUJBQVM7QUFDVDtBQUFBLFVBQ0Y7QUFDQSxjQUFJLEtBQUssa0JBQWtCLEtBQUssY0FBYyxLQUFLLGdCQUFnQjtBQUNqRSxpQkFBSyxZQUFZO0FBQ2pCO0FBQUEsVUFDRixXQUFXLEtBQUssZ0JBQWdCO0FBQUUsY0FBRSxLQUFLO0FBQUEsVUFBVTtBQUFBLFFBQ3JEO0FBRUEsWUFBSSxXQUFXLFdBQVc7QUFDeEIsWUFBRSxLQUFLO0FBQ1AsY0FBSSxTQUFTLEdBQUc7QUFBRSxpQkFBSyxRQUFRLEtBQUssUUFBUSxNQUFNLEtBQUssU0FBUyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQUEsVUFBRTtBQUN0RixlQUFLLElBQUksS0FBSyxTQUFTLFdBQVcsS0FBSyxNQUFNLFVBQVUsS0FBSyxPQUFPLEdBQ2pFLFdBQVcsS0FBSyxNQUFNLFVBQVUsS0FBSyxPQUFPLEdBQzVDLEtBQUssV0FDTCxLQUFLLFNBQVM7QUFDaEIsZUFBSyxTQUFTO0FBRWQsZUFBSyxZQUFZO0FBQ2pCLGVBQUssaUJBQWlCO0FBQ3RCLGVBQUssT0FBTztBQUNaLGVBQUssWUFBWTtBQUNqQixlQUFLLFlBQVk7QUFDakIsZUFBSyxRQUFRLE1BQU07QUFFbkIsY0FBSSxTQUFTO0FBQ2IsY0FBSSxLQUFLLFlBQVksS0FBSyxhQUFhO0FBQUUsbUJBQU8sR0FBRztBQUFBLFVBQUU7QUFBQSxRQUN2RCxXQUFXLEtBQUssV0FBVztBQUV6QixjQUFJLElBQUksR0FBRztBQUFFLGlCQUFLLFFBQVEsS0FBSyxRQUFRLE1BQU0sS0FBSyxTQUFTLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQSxVQUFFO0FBQzVFLGNBQUk7QUFDSixjQUFLLEtBQUssU0FBUyxNQUFNLEtBQUssbUJBQW1CLE1BQzVDLEtBQUssWUFBWSxLQUFLLEtBQUssWUFBWSxLQUFLLGdCQUFnQjtBQUUvRCxpQkFBSyxpQkFBaUI7QUFDdEIsaUJBQUssWUFBWTtBQUFBLFVBQ25CO0FBQUEsUUFDRixPQUFPO0FBQ0wsY0FBSSxJQUFJLEtBQUs7QUFBRSxpQkFBSyxRQUFRLEtBQUssUUFBUSxNQUFNLEtBQUssU0FBUyxVQUFVLENBQUMsQ0FBQztBQUFBLFVBQUU7QUFDM0UsY0FBSTtBQUFBO0FBQUE7QUFBQSxJQUdWO0FBQ0EsT0FBRztBQUFBO0FBR0wsYUFBVyxVQUFVLGNBQWUsR0FBRztBQUNyQyxRQUFJLEtBQUssSUFBSSxPQUFPO0FBQUU7QUFBQSxJQUFPO0FBRTdCLFFBQUksS0FBSyxXQUFXLFNBQVMsS0FBSyxLQUFLLFNBQVMsR0FBRztBQUNqRCxXQUFLLElBQUksS0FBSyxTQUFTLFdBQVcsS0FBSyxNQUFNLFVBQVUsS0FBSyxPQUFPLEdBQ2pFLElBQ0EsS0FBSyxXQUNMLEtBQUs7QUFBQSxJQUNULFdBQVcsS0FBSyxXQUFXLE9BQU87QUFDaEMsV0FBSyxJQUFJLEtBQUssU0FBUyxXQUFXLEtBQUssTUFBTSxVQUFVLEtBQUssT0FBTyxHQUNqRSxXQUFXLEtBQUssTUFBTSxVQUFVLEtBQUssT0FBTyxHQUM1QyxLQUFLLFdBQ0wsS0FBSyxTQUFTO0FBQUEsSUFDbEI7QUFDQSxTQUFLLElBQUksUUFBUTtBQUNqQixTQUFLLElBQUksS0FBSyxRQUFRO0FBQUE7QUFHeEIsU0FBTyxVQUFVO0FBQUE7Ozs7QUMzTGpCLE1BQU0sMENBQXdDO0FBQzlDLFFBQVE7QUFDUixNQUFNO0FBRU4sTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBRU4sV0FBUyxNQUFPLENBQUMsTUFBTTtBQUNyQixVQUFNLGdCQUFnQixTQUFTO0FBQUUsYUFBTyxJQUFJLE9BQU8sSUFBSTtBQUFBLElBQUU7QUFFekQsZUFBVyxTQUFTLFVBQVU7QUFDNUIsWUFBTSxJQUFJLFVBQVUsb0NBQW9DO0FBQUEsSUFDMUQ7QUFDQSxlQUFXLEtBQUssWUFBWSxVQUFVO0FBQ3BDLFlBQU0sSUFBSSxVQUFVLDJEQUEyRDtBQUFBLElBQ2pGO0FBQ0EsZUFBVyxLQUFLLFFBQVEsb0JBQW9CLFVBQVU7QUFDcEQsWUFBTSxJQUFJLFVBQVUsOEJBQThCO0FBQUEsSUFDcEQ7QUFFQTtBQUFBLE1BQ0U7QUFBQSxTQUNHO0FBQUEsUUFDRDtBQUVKLFNBQUssT0FBTztBQUFBLE1BQ1YsYUFBYTtBQUFBLFNBQ1Y7QUFBQSxJQUNMO0FBQ0EsbUJBQWUsS0FBSyxNQUFNLEtBQUssSUFBSTtBQUVuQyxTQUFLLFFBQVE7QUFDYixTQUFLLFVBQVUsS0FBSyxtQkFBbUIsT0FBTztBQUM5QyxTQUFLLFlBQVk7QUFBQTtBQUVuQixXQUFTLFFBQVEsY0FBYztBQUUvQixTQUFPLFVBQVUsZUFBZ0IsQ0FBQyxJQUFJO0FBQ3BDLFFBQUksT0FBTyxVQUFVO0FBQ25CLFdBQUssS0FBSyxPQUFPO0FBQ2YsYUFBSyxTQUFTLElBQUk7QUFDbEI7QUFBQSxNQUNGLFdBQVcsS0FBSyxXQUFXO0FBQ3pCO0FBQUEsTUFDRjtBQUNBLFdBQUssWUFBWTtBQUFBLElBQ25CO0FBQ0EsbUJBQWUsVUFBVSxLQUFLLE1BQU0sTUFBTSxTQUFTO0FBQUE7QUFHckQsU0FBTyxVQUFVLDZCQUE4QixDQUFDLFNBQVM7QUFDdkQsVUFBTSxTQUFTLFlBQVksUUFBUSxlQUFlO0FBRWxELFVBQU0sTUFBTTtBQUFBLE1BQ1YsWUFBWSxLQUFLLEtBQUs7QUFBQSxNQUN0QixTQUFTLEtBQUssS0FBSztBQUFBLE1BQ25CO0FBQUEsTUFDQSxlQUFlLEtBQUssS0FBSztBQUFBLE1BQ3pCLGFBQWEsS0FBSyxLQUFLO0FBQUEsTUFDdkIsUUFBUSxLQUFLLEtBQUs7QUFBQSxNQUNsQixlQUFlO0FBQUEsTUFDZixjQUFjLEtBQUssS0FBSztBQUFBLElBQzFCO0FBRUEsUUFBSSxnQkFBZ0IsT0FBTyxLQUFLLE9BQU8sRUFBRSxHQUFHO0FBQzFDLGFBQU8sSUFBSSxnQkFBZ0IsTUFBTSxHQUFHO0FBQUEsSUFDdEM7QUFDQSxRQUFJLGlCQUFpQixPQUFPLEtBQUssT0FBTyxFQUFFLEdBQUc7QUFDM0MsYUFBTyxJQUFJLGlCQUFpQixNQUFNLEdBQUc7QUFBQSxJQUN2QztBQUNBLFVBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBO0FBRzdDLFNBQU8sVUFBVSxpQkFBa0IsQ0FBQyxPQUFPLFVBQVUsSUFBSTtBQUN2RCxTQUFLLFFBQVEsTUFBTSxPQUFPLEVBQUU7QUFBQTtBQUc5QixTQUFPLFVBQVU7QUFDakIsU0FBTyxRQUFRLFVBQVU7QUFDekIsU0FBTyxRQUFRLFNBQVM7QUFFeEIsU0FBTyxRQUFRLFFBQVE7QUFBQTs7OztBQ2xGdkIsUUFBUSxnQkFBZ0I7QUFFeEIsTUFBTSx3QkFBd0IsQ0FBQyxPQUFPLFFBQVEsTUFBTTtBQUNwRCxNQUFNLDJCQUEyQixJQUFJLElBQUkscUJBQXFCO0FBRTlELE1BQU0saUJBQWlCLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRztBQUUxQyxNQUFNLGlCQUFpQixDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRztBQUMvQyxNQUFNLG9CQUFvQixJQUFJLElBQUksY0FBYztBQUdoRCxNQUFNLFdBQVc7QUFBQSxJQUNmO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQy9HO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDdkc7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQ2xHO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBUTtBQUFBLElBQVE7QUFBQSxJQUNwRztBQUFBLElBQVE7QUFBQSxJQUFRO0FBQUEsSUFBUTtBQUFBLElBQVE7QUFBQSxJQUFRO0FBQUEsSUFBUTtBQUFBLElBQVE7QUFBQSxJQUFRO0FBQUEsSUFBUTtBQUFBLElBQVE7QUFBQSxJQUFRO0FBQUEsSUFBUTtBQUFBLElBQ2hHO0FBQUEsRUFDRjtBQUVBLE1BQU0sY0FBYyxJQUFJLElBQUksUUFBUTtBQUdwQyxNQUFNLGlCQUFpQjtBQUFBLElBQ3JCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0EsTUFBTSxvQkFBb0IsSUFBSSxJQUFJLGNBQWM7QUFFaEQsTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLFVBQVUsT0FBTztBQUVwRCxNQUFNLGNBQWMsQ0FBQyxPQUFPLFFBQVEsV0FBVyxPQUFPO0FBQ3RELE1BQU0saUJBQWlCLElBQUksSUFBSSxXQUFXO0FBRTFDLE1BQU0sY0FBYyxDQUFDLFlBQVksZUFBZSxXQUFXLE1BQU07QUFFakUsTUFBTSxxQkFBcUIsQ0FBQyxRQUFRLGVBQWUsU0FBUztBQUU1RCxNQUFNLGVBQWU7QUFBQSxJQUNuQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUdBLE1BQU0sb0JBQW9CO0FBQUEsSUFDeEI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUtBO0FBQUEsRUFDRjtBQUdBLE1BQU0sZ0JBQWdCO0FBQUEsSUFDcEI7QUFBQSxFQUNGO0FBR0EsTUFBTSxtQkFBbUIsQ0FBQyxXQUFXLFNBQVMsT0FBTztBQUNyRCxNQUFNLHNCQUFzQixJQUFJLElBQUksZ0JBQWdCO0FBRXBELE1BQU0sY0FBYztBQUFBLElBQ2xCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0EsTUFBTSxpQkFBaUIsSUFBSSxJQUFJLFdBQVc7QUFHMUMsTUFBTSxnQkFBZSxXQUFXLGlCQUFpQixNQUFNO0FBR3JELFFBQUk7QUFDRixXQUFLLEdBQUc7QUFBQSxhQUNELEtBQVA7QUFDQSxhQUFPLE9BQU8sZUFBZSxHQUFHLEVBQUU7QUFBQTtBQUFBLEtBRW5DO0FBRUgsTUFBSTtBQUdKLE1BQU0sa0JBQ0osV0FBVyw0QkFHRixlQUFnQixDQUFDLE9BQU8sVUFBVSxXQUFXO0FBQ3BELFFBQUksVUFBVSxXQUFXLEdBQUc7QUFDMUIsWUFBTSxJQUFJLFVBQVUsa0JBQWtCO0FBQUEsSUFDeEM7QUFFQSxTQUFLLFNBQVM7QUFDWixnQkFBVSxJQUFJO0FBQUEsSUFDaEI7QUFDQSxZQUFRLE1BQU0sTUFBTTtBQUNwQixZQUFRLE1BQU0sTUFBTTtBQUNwQixZQUFRLE1BQU0sWUFBWSxPQUFPLFNBQVMsUUFBUTtBQUNsRCxXQUFPLHFCQUFxQixRQUFRLEtBQUssRUFBRTtBQUFBO0FBRy9DLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUFBOzs7O0FDbEpBLE1BQU0sZUFBZSxPQUFPLElBQUksdUJBQXVCO0FBRXZELFdBQVMsZUFBZ0IsR0FBRztBQUMxQixXQUFPLFdBQVc7QUFBQTtBQUdwQixXQUFTLGVBQWdCLENBQUMsV0FBVztBQUNuQyxRQUFJLGNBQWMsV0FBVztBQUMzQixhQUFPLGVBQWUsWUFBWSxjQUFjO0FBQUEsUUFDOUMsT0FBTztBQUFBLFFBQ1AsVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLFFBQ1osY0FBYztBQUFBLE1BQ2hCLENBQUM7QUFFRDtBQUFBLElBQ0Y7QUFFQSxVQUFNLFlBQVksSUFBSSxJQUFJLFNBQVM7QUFFbkMsUUFBSSxVQUFVLGFBQWEsV0FBVyxVQUFVLGFBQWEsVUFBVTtBQUNyRSxZQUFNLElBQUksVUFBVSxnREFBZ0QsVUFBVSxVQUFVO0FBQUEsSUFDMUY7QUFFQSxXQUFPLGVBQWUsWUFBWSxjQUFjO0FBQUEsTUFDOUMsT0FBTztBQUFBLE1BQ1AsVUFBVTtBQUFBLE1BQ1YsWUFBWTtBQUFBLE1BQ1osY0FBYztBQUFBLElBQ2hCLENBQUM7QUFBQTtBQUdILFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUFBOzs7O0FDckNBLFFBQVEsbUJBQW1CLG1CQUFtQixzQkFBc0I7QUFDcEUsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRLFlBQVksYUFBYTtBQUNqQyxNQUFNO0FBQ04sUUFBUTtBQUVSLE1BQUksa0JBQWtCLENBQUM7QUFJdkIsTUFBSTtBQUVKLE1BQUk7QUFDRjtBQUNBLFVBQU0seUJBQXlCLENBQUMsVUFBVSxVQUFVLFFBQVE7QUFDNUQsc0JBQWtCLE9BQU8sVUFBVSxFQUFFLE9BQU8sQ0FBQyxTQUFTLHVCQUF1QixTQUFTLElBQUksQ0FBQztBQUFBLFVBRTNGO0FBQUE7QUFHRixXQUFTLFdBQVksQ0FBQyxVQUFVO0FBSTlCLFVBQU0sVUFBVSxTQUFTO0FBQ3pCLFVBQU0sU0FBUyxRQUFRO0FBQ3ZCLFdBQU8sV0FBVyxJQUFJLE9BQU8sUUFBUSxTQUFTLEdBQUcsU0FBUztBQUFBO0FBSTVELFdBQVMsbUJBQW9CLENBQUMsVUFBVSxpQkFBaUI7QUFFdkQsU0FBSyxrQkFBa0IsSUFBSSxTQUFTLE1BQU0sR0FBRztBQUMzQyxhQUFPO0FBQUEsSUFDVDtBQUlBLFFBQUksV0FBVyxTQUFTLFlBQVksSUFBSSxVQUFVO0FBSWxELFFBQUksYUFBYSxRQUFRLG1CQUFtQixRQUFRLEdBQUc7QUFDckQsaUJBQVcsSUFBSSxJQUFJLFVBQVUsWUFBWSxRQUFRLENBQUM7QUFBQSxJQUNwRDtBQUlBLFFBQUksYUFBYSxTQUFTLE1BQU07QUFDOUIsZUFBUyxPQUFPO0FBQUEsSUFDbEI7QUFHQSxXQUFPO0FBQUE7QUFJVCxXQUFTLGlCQUFrQixDQUFDLFNBQVM7QUFDbkMsV0FBTyxRQUFRLFFBQVEsUUFBUSxRQUFRLFNBQVM7QUFBQTtBQUdsRCxXQUFTLGNBQWUsQ0FBQyxTQUFTO0FBRWhDLFVBQU0sTUFBTSxrQkFBa0IsT0FBTztBQUlyQyxRQUFJLHFCQUFxQixHQUFHLEtBQUssWUFBWSxJQUFJLElBQUksSUFBSSxHQUFHO0FBQzFELGFBQU87QUFBQSxJQUNUO0FBR0EsV0FBTztBQUFBO0FBR1QsV0FBUyxXQUFZLENBQUMsUUFBUTtBQUM1QixXQUFPLGtCQUFrQixVQUN2QixRQUFRLGFBQWEsU0FBUyxXQUM5QixRQUFRLGFBQWEsU0FBUztBQUFBO0FBVWxDLFdBQVMsbUJBQW9CLENBQUMsWUFBWTtBQUN4QyxhQUFTLElBQUksRUFBRyxJQUFJLFdBQVcsVUFBVSxHQUFHO0FBQzFDLFlBQU0sSUFBSSxXQUFXLFdBQVcsQ0FBQztBQUNqQyxZQUdNLE1BQU0sS0FDTCxLQUFLLE1BQVEsS0FBSyxPQUNsQixLQUFLLE9BQVEsS0FBSyxNQUd2QjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQTtBQU9ULFdBQVMsZUFBZ0IsQ0FBQyxHQUFHO0FBQzNCLFlBQVE7QUFBQSxXQUNEO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUVILGVBQU87QUFBQTtBQUdQLGVBQU8sS0FBSyxNQUFRLEtBQUs7QUFBQTtBQUFBO0FBTy9CLFdBQVMsZ0JBQWlCLENBQUMsWUFBWTtBQUNyQyxRQUFJLFdBQVcsV0FBVyxHQUFHO0FBQzNCLGFBQU87QUFBQSxJQUNUO0FBQ0EsYUFBUyxJQUFJLEVBQUcsSUFBSSxXQUFXLFVBQVUsR0FBRztBQUMxQyxXQUFLLGdCQUFnQixXQUFXLFdBQVcsQ0FBQyxDQUFDLEdBQUc7QUFDOUMsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBO0FBT1QsV0FBUyxpQkFBa0IsQ0FBQyxnQkFBZ0I7QUFDMUMsV0FBTyxpQkFBaUIsY0FBYztBQUFBO0FBT3hDLFdBQVMsa0JBQW1CLENBQUMsZ0JBQWdCO0FBRzNDLFFBQ0UsZUFBZSxXQUFXLElBQUksS0FDOUIsZUFBZSxXQUFXLEdBQUcsS0FDN0IsZUFBZSxTQUFTLElBQUksS0FDNUIsZUFBZSxTQUFTLEdBQUcsR0FDM0I7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQ0UsZUFBZSxTQUFTLElBQUksS0FDNUIsZUFBZSxTQUFTLElBQUksS0FDNUIsZUFBZSxTQUFTLElBQUksR0FDNUI7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU87QUFBQTtBQUlULFdBQVMsa0NBQW1DLENBQUMsU0FBUyxnQkFBZ0I7QUFVcEUsWUFBUSxnQkFBZ0I7QUFJeEIsVUFBTSxnQkFBZ0IsWUFBWSxJQUFJLGlCQUFpQixLQUFLLElBQUksTUFBTSxHQUFHO0FBTXpFLFFBQUksU0FBUztBQUNiLFFBQUksYUFBYSxTQUFTLEdBQUc7QUFHM0IsZUFBUyxJQUFJLGFBQWEsT0FBUSxNQUFNLEdBQUcsS0FBSztBQUM5QyxjQUFNLFFBQVEsYUFBYSxJQUFJLEdBQUcsS0FBSztBQUN2QyxZQUFJLHFCQUFxQixJQUFJLEtBQUssR0FBRztBQUNuQyxtQkFBUztBQUNUO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBR0EsUUFBSSxXQUFXLElBQUk7QUFDakIsY0FBUSxpQkFBaUI7QUFBQSxJQUMzQjtBQUFBO0FBSUYsV0FBUyw4QkFBK0IsR0FBRztBQUV6QyxXQUFPO0FBQUE7QUFJVCxXQUFTLFNBQVUsR0FBRztBQUVwQixXQUFPO0FBQUE7QUFJVCxXQUFTLFFBQVMsR0FBRztBQUVuQixXQUFPO0FBQUE7QUFHVCxXQUFTLG1CQUFvQixDQUFDLGFBQWE7QUFVekMsUUFBSSxTQUFTO0FBR2IsYUFBUyxZQUFZO0FBR3JCLGdCQUFZLFlBQVksSUFBSSxrQkFBa0IsTUFBTTtBQUFBO0FBVXRELFdBQVMseUJBQTBCLENBQUMsU0FBUztBQUUzQyxRQUFJLG1CQUFtQixRQUFRO0FBRy9CLFFBQUksUUFBUSxxQkFBcUIsVUFBVSxRQUFRLFNBQVMsYUFBYTtBQUN2RSxVQUFJLGtCQUFrQjtBQUNwQixnQkFBUSxZQUFZLE9BQU8sVUFBVSxnQkFBZ0I7QUFBQSxNQUN2RDtBQUFBLElBR0YsV0FBVyxRQUFRLFdBQVcsU0FBUyxRQUFRLFdBQVcsUUFBUTtBQUVoRSxjQUFRLFFBQVE7QUFBQSxhQUNUO0FBRUgsNkJBQW1CO0FBQ25CO0FBQUEsYUFDRztBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBRUgsY0FBSSxRQUFRLFVBQVUsa0JBQWtCLFFBQVEsTUFBTSxNQUFNLGtCQUFrQixrQkFBa0IsT0FBTyxDQUFDLEdBQUc7QUFDekcsK0JBQW1CO0FBQUEsVUFDckI7QUFDQTtBQUFBLGFBQ0c7QUFFSCxlQUFLLFdBQVcsU0FBUyxrQkFBa0IsT0FBTyxDQUFDLEdBQUc7QUFDcEQsK0JBQW1CO0FBQUEsVUFDckI7QUFDQTtBQUFBO0FBQUE7QUFLSixVQUFJLGtCQUFrQjtBQUVwQixnQkFBUSxZQUFZLE9BQU8sVUFBVSxnQkFBZ0I7QUFBQSxNQUN2RDtBQUFBLElBQ0Y7QUFBQTtBQUdGLFdBQVMsMEJBQTJCLENBQUMsK0JBQStCO0FBRWxFLFdBQU8sYUFBWSxJQUFJO0FBQUE7QUFJekIsV0FBUyxzQkFBdUIsQ0FBQyxZQUFZO0FBQzNDLFdBQU87QUFBQSxNQUNMLFdBQVcsV0FBVyxhQUFhO0FBQUEsTUFDbkMsbUJBQW1CO0FBQUEsTUFDbkIsaUJBQWlCO0FBQUEsTUFDakIsdUJBQXVCLFdBQVcsYUFBYTtBQUFBLE1BQy9DLDZCQUE2QjtBQUFBLE1BQzdCLCtCQUErQjtBQUFBLE1BQy9CLDhCQUE4QjtBQUFBLE1BQzlCLFNBQVM7QUFBQSxNQUNULGlCQUFpQjtBQUFBLE1BQ2pCLGlCQUFpQjtBQUFBLE1BQ2pCLDJCQUEyQjtBQUFBLElBQzdCO0FBQUE7QUFJRixXQUFTLG1CQUFvQixHQUFHO0FBRTlCLFdBQU87QUFBQSxNQUNMLGdCQUFnQjtBQUFBLElBQ2xCO0FBQUE7QUFJRixXQUFTLG9CQUFxQixDQUFDLGlCQUFpQjtBQUM5QyxXQUFPO0FBQUEsTUFDTCxnQkFBZ0IsZ0JBQWdCO0FBQUEsSUFDbEM7QUFBQTtBQUlGLFdBQVMseUJBQTBCLENBQUMsU0FBUztBQUUzQyxVQUFNLFNBQVMsUUFBUTtBQUd2QixXQUFPLE1BQU07QUFJYixRQUFJLGlCQUFpQjtBQUdyQixRQUFJLFFBQVEsYUFBYSxVQUFVO0FBSWpDLFlBQU0sZUFBZSxnQkFBZ0I7QUFFckMsV0FBSyxnQkFBZ0IsYUFBYSxXQUFXLFFBQVE7QUFDbkQsZUFBTztBQUFBLE1BQ1Q7QUFHQSx1QkFBaUIsSUFBSSxJQUFJLFlBQVk7QUFBQSxJQUN2QyxXQUFXLFFBQVEsb0JBQW9CLEtBQUs7QUFFMUMsdUJBQWlCLFFBQVE7QUFBQSxJQUMzQjtBQUlBLFFBQUksY0FBYyxvQkFBb0IsY0FBYztBQUlwRCxVQUFNLGlCQUFpQixvQkFBb0IsZ0JBQWdCLElBQUk7QUFJL0QsUUFBSSxZQUFZLFNBQVMsRUFBRSxTQUFTLE1BQU07QUFDeEMsb0JBQWM7QUFBQSxJQUNoQjtBQUVBLFVBQU0sZ0JBQWdCLFdBQVcsU0FBUyxXQUFXO0FBQ3JELFVBQU0sOEJBQThCLDRCQUE0QixXQUFXLE1BQ3hFLDRCQUE0QixRQUFRLEdBQUc7QUFHMUMsWUFBUTtBQUFBLFdBQ0Q7QUFBVSxlQUFPLGtCQUFrQixPQUFPLGlCQUFpQixvQkFBb0IsZ0JBQWdCLElBQUk7QUFBQSxXQUNuRztBQUFjLGVBQU87QUFBQSxXQUNyQjtBQUNILGVBQU8sZ0JBQWdCLGlCQUFpQjtBQUFBLFdBQ3JDO0FBQ0gsZUFBTyxnQkFBZ0IsY0FBYztBQUFBLFdBQ2xDLG1DQUFtQztBQUN0QyxjQUFNLGFBQWEsa0JBQWtCLE9BQU87QUFJNUMsWUFBSSxXQUFXLGFBQWEsVUFBVSxHQUFHO0FBQ3ZDLGlCQUFPO0FBQUEsUUFDVDtBQUtBLFlBQUksNEJBQTRCLFdBQVcsTUFBTSw0QkFBNEIsVUFBVSxHQUFHO0FBQ3hGLGlCQUFPO0FBQUEsUUFDVDtBQUdBLGVBQU87QUFBQSxNQUNUO0FBQUEsV0FDSztBQUFBLFdBT0E7QUFBQTtBQVNILGVBQU8sOEJBQThCLGdCQUFnQjtBQUFBO0FBQUE7QUFTM0QsV0FBUyxtQkFBb0IsQ0FBQyxLQUFLLFlBQVk7QUFFN0MsV0FBTyxlQUFlLEdBQUc7QUFHekIsUUFBSSxJQUFJLGFBQWEsV0FBVyxJQUFJLGFBQWEsWUFBWSxJQUFJLGFBQWEsVUFBVTtBQUN0RixhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUksV0FBVztBQUdmLFFBQUksV0FBVztBQUdmLFFBQUksT0FBTztBQUdYLFFBQUksWUFBWTtBQUVkLFVBQUksV0FBVztBQUdmLFVBQUksU0FBUztBQUFBLElBQ2Y7QUFHQSxXQUFPO0FBQUE7QUFHVCxXQUFTLDJCQUE0QixDQUFDLEtBQUs7QUFDekMsVUFBTSxlQUFlLE1BQU07QUFDekIsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUFJLElBQUksU0FBUyxpQkFBaUIsSUFBSSxTQUFTLGdCQUFnQjtBQUM3RCxhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUksSUFBSSxhQUFhO0FBQVMsYUFBTztBQUdyQyxRQUFJLElBQUksYUFBYTtBQUFTLGFBQU87QUFFckMsV0FBTywrQkFBK0IsSUFBSSxNQUFNO0FBRWhELGFBQVMsOEJBQStCLENBQUMsUUFBUTtBQUUvQyxVQUFJLFVBQVUsUUFBUSxXQUFXO0FBQVEsZUFBTztBQUVoRCxZQUFNLGNBQWMsSUFBSSxJQUFJLE1BQU07QUFHbEMsVUFBSSxZQUFZLGFBQWEsWUFBWSxZQUFZLGFBQWEsUUFBUTtBQUN4RSxlQUFPO0FBQUEsTUFDVDtBQUdBLFVBQUksc0RBQXNELEtBQUssWUFBWSxRQUFRLE1BQ2pGLFlBQVksYUFBYSxlQUFlLFlBQVksU0FBUyxTQUFTLFlBQVksTUFDbEYsWUFBWSxTQUFTLFNBQVMsWUFBWSxHQUFJO0FBQzlDLGVBQU87QUFBQSxNQUNUO0FBR0EsYUFBTztBQUFBO0FBQUE7QUFTWCxXQUFTLFVBQVcsQ0FBQyxPQUFPLGNBQWM7QUFLeEMsUUFBSSxXQUFXLFdBQVc7QUFDeEIsYUFBTztBQUFBLElBQ1Q7QUFHQSxVQUFNLGlCQUFpQixjQUFjLFlBQVk7QUFHakQsUUFBSSxtQkFBbUIsZUFBZTtBQUNwQyxhQUFPO0FBQUEsSUFDVDtBQU1BLFFBQUksZUFBZSxXQUFXLEdBQUc7QUFDL0IsYUFBTztBQUFBLElBQ1Q7QUFJQSxVQUFNLFlBQVkscUJBQXFCLGNBQWM7QUFDckQsVUFBTSxXQUFXLDhCQUE4QixnQkFBZ0IsU0FBUztBQUd4RSxlQUFXLFFBQVEsVUFBVTtBQUUzQixZQUFNLFlBQVksS0FBSztBQUd2QixZQUFNLGdCQUFnQixLQUFLO0FBTTNCLFVBQUksY0FBYyxPQUFPLFdBQVcsU0FBUyxFQUFFLE9BQU8sS0FBSyxFQUFFLE9BQU8sUUFBUTtBQUU1RSxVQUFJLFlBQVksWUFBWSxTQUFTLE9BQU8sS0FBSztBQUMvQyxZQUFJLFlBQVksWUFBWSxTQUFTLE9BQU8sS0FBSztBQUMvQyx3QkFBYyxZQUFZLE1BQU0sR0FBRyxFQUFFO0FBQUEsUUFDdkMsT0FBTztBQUNMLHdCQUFjLFlBQVksTUFBTSxHQUFHLEVBQUU7QUFBQTtBQUFBLE1BRXpDO0FBSUEsVUFBSSxtQkFBbUIsYUFBYSxhQUFhLEdBQUc7QUFDbEQsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBR0EsV0FBTztBQUFBO0FBTVQsTUFBTSx1QkFBdUI7QUFNN0IsV0FBUyxhQUFjLENBQUMsVUFBVTtBQUdoQyxVQUFNLFNBQVMsQ0FBQztBQUdoQixRQUFJLFFBQVE7QUFHWixlQUFXLFNBQVMsU0FBUyxNQUFNLEdBQUcsR0FBRztBQUV2QyxjQUFRO0FBR1IsWUFBTSxjQUFjLHFCQUFxQixLQUFLLEtBQUs7QUFHbkQsVUFDRSxnQkFBZ0IsUUFDaEIsWUFBWSxXQUFXLGFBQ3ZCLFlBQVksT0FBTyxTQUFTLFdBQzVCO0FBS0E7QUFBQSxNQUNGO0FBR0EsWUFBTSxZQUFZLFlBQVksT0FBTyxLQUFLLFlBQVk7QUFJdEQsVUFBSSxnQkFBZ0IsU0FBUyxTQUFTLEdBQUc7QUFDdkMsZUFBTyxLQUFLLFlBQVksTUFBTTtBQUFBLE1BQ2hDO0FBQUEsSUFDRjtBQUdBLFFBQUksVUFBVSxNQUFNO0FBQ2xCLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTztBQUFBO0FBTVQsV0FBUyxvQkFBcUIsQ0FBQyxjQUFjO0FBRzNDLFFBQUksWUFBWSxhQUFhLEdBQUc7QUFHaEMsUUFBSSxVQUFVLE9BQU8sS0FBSztBQUN4QixhQUFPO0FBQUEsSUFDVDtBQUVBLGFBQVMsSUFBSSxFQUFHLElBQUksYUFBYSxVQUFVLEdBQUc7QUFDNUMsWUFBTSxXQUFXLGFBQWE7QUFHOUIsVUFBSSxTQUFTLEtBQUssT0FBTyxLQUFLO0FBQzVCLG9CQUFZO0FBQ1o7QUFBQSxNQUVGLFdBQVcsVUFBVSxPQUFPLEtBQUs7QUFDL0I7QUFBQSxNQUdGLFdBQVcsU0FBUyxLQUFLLE9BQU8sS0FBSztBQUNuQyxvQkFBWTtBQUFBLE1BQ2Q7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBO0FBR1QsV0FBUyw2QkFBOEIsQ0FBQyxjQUFjLFdBQVc7QUFDL0QsUUFBSSxhQUFhLFdBQVcsR0FBRztBQUM3QixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksTUFBTTtBQUNWLGFBQVMsSUFBSSxFQUFHLElBQUksYUFBYSxVQUFVLEdBQUc7QUFDNUMsVUFBSSxhQUFhLEdBQUcsU0FBUyxXQUFXO0FBQ3RDLHFCQUFhLFNBQVMsYUFBYTtBQUFBLE1BQ3JDO0FBQUEsSUFDRjtBQUVBLGlCQUFhLFNBQVM7QUFFdEIsV0FBTztBQUFBO0FBV1QsV0FBUyxrQkFBbUIsQ0FBQyxhQUFhLGVBQWU7QUFDdkQsUUFBSSxZQUFZLFdBQVcsY0FBYyxRQUFRO0FBQy9DLGFBQU87QUFBQSxJQUNUO0FBQ0EsYUFBUyxJQUFJLEVBQUcsSUFBSSxZQUFZLFVBQVUsR0FBRztBQUMzQyxVQUFJLFlBQVksT0FBTyxjQUFjLElBQUk7QUFDdkMsWUFDRyxZQUFZLE9BQU8sT0FBTyxjQUFjLE9BQU8sT0FDL0MsWUFBWSxPQUFPLE9BQU8sY0FBYyxPQUFPLEtBQ2hEO0FBQ0E7QUFBQSxRQUNGO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBO0FBSVQsV0FBUyw2Q0FBOEMsQ0FBQyxTQUFTO0FBQUE7QUFTakUsV0FBUyxVQUFXLENBQUMsR0FBRyxHQUFHO0FBRXpCLFFBQUksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsUUFBUTtBQUNoRCxhQUFPO0FBQUEsSUFDVDtBQUlBLFFBQUksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFDL0UsYUFBTztBQUFBLElBQ1Q7QUFHQSxXQUFPO0FBQUE7QUFHVCxXQUFTLHFCQUFzQixHQUFHO0FBQ2hDLFFBQUk7QUFDSixRQUFJO0FBQ0osVUFBTSxVQUFVLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUMvQyxZQUFNO0FBQ04sWUFBTTtBQUFBLEtBQ1A7QUFFRCxXQUFPLEVBQUUsU0FBUyxTQUFTLEtBQUssUUFBUSxJQUFJO0FBQUE7QUFHOUMsV0FBUyxTQUFVLENBQUMsYUFBYTtBQUMvQixXQUFPLFlBQVksV0FBVyxVQUFVO0FBQUE7QUFHMUMsV0FBUyxXQUFZLENBQUMsYUFBYTtBQUNqQyxXQUFPLFlBQVksV0FBVyxVQUFVLGFBQ3RDLFlBQVksV0FBVyxVQUFVO0FBQUE7QUFHckMsTUFBTSx3QkFBd0I7QUFBQSxJQUM1QixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsRUFDUDtBQUdBLFNBQU8sZUFBZSx1QkFBdUIsSUFBSTtBQU1qRCxXQUFTLGVBQWdCLENBQUMsUUFBUTtBQUNoQyxXQUFPLHNCQUFzQixPQUFPLFlBQVksTUFBTTtBQUFBO0FBSXhELFdBQVMsb0NBQXFDLENBQUMsT0FBTztBQUVwRCxVQUFNLFNBQVMsS0FBSyxVQUFVLEtBQUs7QUFHbkMsUUFBSSxXQUFXLFdBQVc7QUFDeEIsWUFBTSxJQUFJLFVBQVUsZ0NBQWdDO0FBQUEsSUFDdEQ7QUFHQSxrQkFBYyxXQUFXLFFBQVE7QUFHakMsV0FBTztBQUFBO0FBSVQsTUFBTSxzQkFBc0IsT0FBTyxlQUFlLE9BQU8sZUFBZSxDQUFDLEVBQUUsT0FBTyxVQUFVLENBQUMsQ0FBQztBQVE5RixXQUFTLFlBQWEsQ0FBQyxVQUFVLE1BQU0sTUFBTTtBQUMzQyxVQUFNLFNBQVM7QUFBQSxNQUNiLE9BQU87QUFBQSxNQUNQO0FBQUEsTUFDQSxRQUFRO0FBQUEsSUFDVjtBQUVBLFVBQU0sSUFBSTtBQUFBLE1BQ1IsSUFBSyxHQUFHO0FBWU4sWUFBSSxPQUFPLGVBQWUsSUFBSSxNQUFNLEdBQUc7QUFDckMsZ0JBQU0sSUFBSSxVQUNSLGdFQUFnRSxnQkFDbEU7QUFBQSxRQUNGO0FBS0EsZ0JBQVEsT0FBTyxhQUFNLFdBQVc7QUFDaEMsY0FBTSxTQUFTLE9BQU87QUFHdEIsY0FBTSxNQUFNLE9BQU87QUFJbkIsWUFBSSxTQUFTLEtBQUs7QUFDaEIsaUJBQU8sRUFBRSxPQUFPLFdBQVcsTUFBTSxLQUFLO0FBQUEsUUFDeEM7QUFHQSxjQUFNLE9BQU8sT0FBTztBQUdwQixlQUFPLFFBQVEsUUFBUTtBQUd2QixlQUFPLGVBQWUsTUFBTSxLQUFJO0FBQUE7QUFBQSxPQUlqQyxPQUFPLGNBQWMsR0FBRztBQUFBLElBQzNCO0FBR0EsV0FBTyxlQUFlLEdBQUcsbUJBQW1CO0FBRzVDLFdBQU8sT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDO0FBQUE7QUFJcEMsV0FBUyxjQUFlLENBQUMsTUFBTSxNQUFNO0FBQ25DLFFBQUk7QUFHSixZQUFRO0FBQUEsV0FDRCxPQUFPO0FBS1YsaUJBQVMsS0FBSztBQUNkO0FBQUEsTUFDRjtBQUFBLFdBQ0ssU0FBUztBQUtaLGlCQUFTLEtBQUs7QUFDZDtBQUFBLE1BQ0Y7QUFBQSxXQUNLLGFBQWE7QUFXaEIsaUJBQVM7QUFDVDtBQUFBLE1BQ0Y7QUFBQTtBQUlGLFdBQU8sRUFBRSxPQUFPLFFBQVEsTUFBTSxNQUFNO0FBQUE7QUFNdEMsaUJBQWUsYUFBYyxDQUFDLE1BQU0sYUFBYSxrQkFBa0I7QUFNakUsVUFBTSxlQUFlO0FBSXJCLFVBQU0sYUFBYTtBQUtuQixRQUFJO0FBRUosUUFBSTtBQUNGLGVBQVMsS0FBSyxPQUFPLFVBQVU7QUFBQSxhQUN4QixHQUFQO0FBQ0EsaUJBQVcsQ0FBQztBQUNaO0FBQUE7QUFJRixRQUFJO0FBQ0YsWUFBTSxTQUFTLE1BQU0sYUFBYSxNQUFNO0FBQ3hDLG1CQUFhLE1BQU07QUFBQSxhQUNaLEdBQVA7QUFDQSxpQkFBVyxDQUFDO0FBQUE7QUFBQTtBQUtoQixNQUFJLGtCQUFpQixXQUFXO0FBRWhDLFdBQVMsb0JBQXFCLENBQUMsUUFBUTtBQUNyQyxTQUFLLGlCQUFnQjtBQUNuQixnREFBdUM7QUFBQSxJQUN6QztBQUVBLFdBQU8sa0JBQWtCLG1CQUN2QixPQUFPLE9BQU8saUJBQWlCLDJCQUN4QixPQUFPLFFBQVE7QUFBQTtBQUkxQixNQUFNLDBCQUEwQjtBQU1oQyxXQUFTLGdCQUFpQixDQUFDLE9BQU87QUFLaEMsUUFBSSxNQUFNLFNBQVMseUJBQXlCO0FBQzFDLGFBQU8sT0FBTyxhQUFhLEdBQUcsS0FBSztBQUFBLElBQ3JDO0FBRUEsV0FBTyxNQUFNLE9BQU8sQ0FBQyxVQUFVLFlBQVksV0FBVyxPQUFPLGFBQWEsT0FBTyxHQUFHLEVBQUU7QUFBQTtBQU14RixXQUFTLG1CQUFvQixDQUFDLFlBQVk7QUFDeEMsUUFBSTtBQUNGLGlCQUFXLE1BQU07QUFBQSxhQUNWLEtBQVA7QUFFQSxXQUFLLElBQUksUUFBUSxTQUFTLDhCQUE4QixHQUFHO0FBQ3pELGNBQU07QUFBQSxNQUNSO0FBQUE7QUFBQTtBQVFKLFdBQVMsZ0JBQWlCLENBQUMsT0FBTztBQUVoQyxhQUFTLElBQUksRUFBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQ3JDLGFBQU8sTUFBTSxXQUFXLENBQUMsS0FBSyxHQUFJO0FBQUEsSUFDcEM7QUFLQSxXQUFPO0FBQUE7QUFRVCxpQkFBZSxZQUFhLENBQUMsUUFBUTtBQUNuQyxVQUFNLFFBQVEsQ0FBQztBQUNmLFFBQUksYUFBYTtBQUVqQixXQUFPLE1BQU07QUFDWCxjQUFRLE1BQU0sT0FBTyxVQUFVLE1BQU0sT0FBTyxLQUFLO0FBRWpELFVBQUksTUFBTTtBQUVSLGVBQU8sT0FBTyxPQUFPLE9BQU8sVUFBVTtBQUFBLE1BQ3hDO0FBSUEsV0FBSyxhQUFhLEtBQUssR0FBRztBQUN4QixjQUFNLElBQUksVUFBVSwrQkFBK0I7QUFBQSxNQUNyRDtBQUdBLFlBQU0sS0FBSyxLQUFLO0FBQ2hCLG9CQUFjLE1BQU07QUFBQSxJQUd0QjtBQUFBO0FBT0YsV0FBUyxVQUFXLENBQUMsS0FBSztBQUN4QixXQUFPLGNBQWMsR0FBRztBQUV4QixVQUFNLFdBQVcsSUFBSTtBQUVyQixXQUFPLGFBQWEsWUFBWSxhQUFhLFdBQVcsYUFBYTtBQUFBO0FBTXZFLFdBQVMsaUJBQWtCLENBQUMsS0FBSztBQUMvQixlQUFXLFFBQVEsVUFBVTtBQUMzQixhQUFPLElBQUksV0FBVyxRQUFRO0FBQUEsSUFDaEM7QUFFQSxXQUFPLElBQUksYUFBYTtBQUFBO0FBTzFCLFdBQVMsb0JBQXFCLENBQUMsS0FBSztBQUNsQyxXQUFPLGNBQWMsR0FBRztBQUV4QixVQUFNLFdBQVcsSUFBSTtBQUVyQixXQUFPLGFBQWEsV0FBVyxhQUFhO0FBQUE7QUFNOUMsTUFBTSxTQUFTLE9BQU8sV0FBVyxDQUFDLE1BQU0sUUFBUSxPQUFPLFVBQVUsZUFBZSxLQUFLLE1BQU0sR0FBRztBQUU5RixTQUFPLFVBQVU7QUFBQSxJQUNmO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7Ozs7QUNybkNBLFNBQU8sVUFBVTtBQUFBLElBQ2YsTUFBTSxPQUFPLEtBQUs7QUFBQSxJQUNsQixVQUFVLE9BQU8sU0FBUztBQUFBLElBQzFCLFNBQVMsT0FBTyxRQUFRO0FBQUEsSUFDeEIsUUFBUSxPQUFPLE9BQU87QUFBQSxJQUN0QixRQUFRLE9BQU8sT0FBTztBQUFBLElBQ3RCLFFBQVEsT0FBTyxPQUFPO0FBQUEsRUFDeEI7QUFBQTs7OztBQ1BBLFFBQVE7QUFDUixRQUFRLFFBQVE7QUFHaEIsTUFBTSxTQUFTLENBQUM7QUFDaEIsU0FBTyxhQUFhLENBQUM7QUFDckIsU0FBTyxPQUFPLENBQUM7QUFDZixTQUFPLFNBQVMsQ0FBQztBQUVqQixTQUFPLE9BQU8sb0JBQXFCLENBQUMsU0FBUztBQUMzQyxXQUFPLElBQUksVUFBVSxHQUFHLFFBQVEsV0FBVyxRQUFRLFNBQVM7QUFBQTtBQUc5RCxTQUFPLE9BQU8sMkJBQTRCLENBQUMsU0FBUztBQUNsRCxVQUFNLFNBQVMsUUFBUSxNQUFNLFdBQVcsSUFBSSxLQUFLO0FBQ2pELFVBQU0sVUFDSixHQUFHLFFBQVEsdUNBQ1gsR0FBRyxXQUFXLFFBQVEsTUFBTSxLQUFLLElBQUk7QUFFdkMsV0FBTyxPQUFPLE9BQU8sVUFBVTtBQUFBLE1BQzdCLFFBQVEsUUFBUTtBQUFBLE1BQ2hCO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFHSCxTQUFPLE9BQU8sMEJBQTJCLENBQUMsU0FBUztBQUNqRCxXQUFPLE9BQU8sT0FBTyxVQUFVO0FBQUEsTUFDN0IsUUFBUSxRQUFRO0FBQUEsTUFDaEIsU0FBUyxJQUFJLFFBQVEsd0JBQXdCLFFBQVE7QUFBQSxJQUN2RCxDQUFDO0FBQUE7QUFJSCxTQUFPLHFCQUFzQixDQUFDLEdBQUcsR0FBRyxPQUFPLFdBQVc7QUFDcEQsUUFBSSxNQUFNLFdBQVcsV0FBVyxhQUFhLElBQUk7QUFDL0MsWUFBTSxJQUFJLFVBQVUsb0JBQW9CO0FBQUEsSUFDMUMsT0FBTztBQUNMLGFBQU8sSUFBSSxPQUFPLGlCQUFpQixFQUFFLFVBQVUsT0FBTztBQUFBO0FBQUE7QUFJMUQsU0FBTyw4QkFBK0IsR0FBRyxVQUFVLEtBQUssS0FBSztBQUMzRCxRQUFJLFNBQVMsS0FBSztBQUNoQixZQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsUUFDNUIsU0FBUyxHQUFHLGVBQWUsUUFBUSxJQUFJLE1BQU0sa0JBQ3BDLE1BQU0sU0FBUyxVQUFVLE1BQU07QUFBQSxXQUNyQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0g7QUFBQTtBQUdGLFNBQU8sNkJBQThCLEdBQUc7QUFDdEMsVUFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLE1BQzVCLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQTtBQUlILFNBQU8sS0FBSyxlQUFnQixDQUFDLEdBQUc7QUFDOUIsbUJBQWU7QUFBQSxXQUNSO0FBQWEsZUFBTztBQUFBLFdBQ3BCO0FBQVcsZUFBTztBQUFBLFdBQ2xCO0FBQVUsZUFBTztBQUFBLFdBQ2pCO0FBQVUsZUFBTztBQUFBLFdBQ2pCO0FBQVUsZUFBTztBQUFBLFdBQ2pCO0FBQVUsZUFBTztBQUFBLFdBQ2pCO0FBQUEsV0FDQSxVQUFVO0FBQ2IsWUFBSSxNQUFNLE1BQU07QUFDZCxpQkFBTztBQUFBLFFBQ1Q7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUFBO0FBQUE7QUFLSixTQUFPLEtBQUssdUJBQXdCLENBQUMsR0FBRyxXQUFXLFlBQVksT0FBTyxDQUFDLEdBQUc7QUFDeEUsUUFBSTtBQUNKLFFBQUk7QUFHSixRQUFJLGNBQWMsSUFBSTtBQUVwQixtQkFBYSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUk7QUFHL0IsVUFBSSxlQUFlLFlBQVk7QUFDN0IscUJBQWE7QUFBQSxNQUNmLE9BQU87QUFFTCxxQkFBYSxLQUFLLElBQUksSUFBSSxFQUFFLElBQUk7QUFBQTtBQUFBLElBRXBDLFdBQVcsZUFBZSxZQUFZO0FBSXBDLG1CQUFhO0FBR2IsbUJBQWEsS0FBSyxJQUFJLEdBQUcsU0FBUyxJQUFJO0FBQUEsSUFDeEMsT0FBTztBQUlMLG1CQUFhLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSTtBQUd2QyxtQkFBYSxLQUFLLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSTtBQUFBO0FBSTVDLFFBQUksSUFBSSxPQUFPLENBQUM7QUFHaEIsUUFBSSxNQUFNLEdBQUc7QUFDWCxVQUFJO0FBQUEsSUFDTjtBQUlBLFFBQUksS0FBSyxpQkFBaUIsTUFBTTtBQUU5QixVQUNFLE9BQU8sTUFBTSxDQUFDLEtBQ2QsTUFBTSxPQUFPLHFCQUNiLE1BQU0sT0FBTyxtQkFDYjtBQUNBLGNBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxVQUM1QixRQUFRO0FBQUEsVUFDUixTQUFTLHFCQUFxQjtBQUFBLFFBQ2hDLENBQUM7QUFBQSxNQUNIO0FBR0EsVUFBSSxPQUFPLEtBQUssWUFBWSxDQUFDO0FBSTdCLFVBQUksSUFBSSxjQUFjLElBQUksWUFBWTtBQUNwQyxjQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsVUFDNUIsUUFBUTtBQUFBLFVBQ1IsU0FBUyx5QkFBeUIsY0FBYyxtQkFBbUI7QUFBQSxRQUNyRSxDQUFDO0FBQUEsTUFDSDtBQUdBLGFBQU87QUFBQSxJQUNUO0FBS0EsU0FBSyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEtBQUssVUFBVSxNQUFNO0FBRTNDLFVBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLFVBQVUsR0FBRyxVQUFVO0FBS2hELFVBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUc7QUFDM0IsWUFBSSxLQUFLLE1BQU0sQ0FBQztBQUFBLE1BQ2xCLE9BQU87QUFDTCxZQUFJLEtBQUssS0FBSyxDQUFDO0FBQUE7QUFJakIsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUNFLE9BQU8sTUFBTSxDQUFDLEtBQ2IsTUFBTSxLQUFLLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FDMUIsTUFBTSxPQUFPLHFCQUNiLE1BQU0sT0FBTyxtQkFDYjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBR0EsUUFBSSxPQUFPLEtBQUssWUFBWSxDQUFDO0FBRzdCLFFBQUksSUFBSSxLQUFLLElBQUksR0FBRyxTQUFTO0FBSTdCLFFBQUksZUFBZSxZQUFZLEtBQUssS0FBSyxJQUFJLEdBQUcsU0FBUyxJQUFJLEdBQUc7QUFDOUQsYUFBTyxJQUFJLEtBQUssSUFBSSxHQUFHLFNBQVM7QUFBQSxJQUNsQztBQUdBLFdBQU87QUFBQTtBQUlULFNBQU8sS0FBSyxzQkFBdUIsQ0FBQyxHQUFHO0FBRXJDLFVBQU0sSUFBSSxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztBQUdoQyxRQUFJLElBQUksR0FBRztBQUNULGFBQU8sS0FBSztBQUFBLElBQ2Q7QUFHQSxXQUFPO0FBQUE7QUFJVCxTQUFPLDRCQUE2QixDQUFDLFdBQVc7QUFDOUMsV0FBTyxDQUFDLE1BQU07QUFFWixVQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsTUFBTSxVQUFVO0FBQ3BDLGNBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxVQUM1QixRQUFRO0FBQUEsVUFDUixTQUFTLGlCQUFpQixPQUFPLEtBQUssS0FBSyxDQUFDO0FBQUEsUUFDOUMsQ0FBQztBQUFBLE1BQ0g7QUFJQSxZQUFNLFNBQVMsSUFBSSxPQUFPLFlBQVk7QUFDdEMsWUFBTSxNQUFNLENBQUM7QUFHYixVQUNFLFdBQVcsb0JBQ0osT0FBTyxTQUFTLFlBQ3ZCO0FBQ0EsY0FBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLFVBQzVCLFFBQVE7QUFBQSxVQUNSLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUNIO0FBR0EsYUFBTyxNQUFNO0FBQ1gsZ0JBQVEsTUFBTSxVQUFVLE9BQU8sS0FBSztBQUVwQyxZQUFJLE1BQU07QUFDUjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLEtBQUssVUFBVSxLQUFLLENBQUM7QUFBQSxNQUMzQjtBQUVBLGFBQU87QUFBQTtBQUFBO0FBS1gsU0FBTywwQkFBMkIsQ0FBQyxjQUFjLGdCQUFnQjtBQUMvRCxXQUFPLENBQUMsTUFBTTtBQUVaLFVBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxNQUFNLFVBQVU7QUFDcEMsY0FBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLFVBQzVCLFFBQVE7QUFBQSxVQUNSLFNBQVMsaUJBQWlCLE9BQU8sS0FBSyxLQUFLLENBQUM7QUFBQSxRQUM5QyxDQUFDO0FBQUEsTUFDSDtBQUdBLFlBQU0sU0FBUyxDQUFDO0FBRWhCLFdBQUssTUFBTSxRQUFRLENBQUMsR0FBRztBQUVyQixjQUFNLFFBQU8sT0FBTyxLQUFLLENBQUM7QUFFMUIsbUJBQVcsT0FBTyxPQUFNO0FBRXRCLGdCQUFNLFdBQVcsYUFBYSxHQUFHO0FBSWpDLGdCQUFNLGFBQWEsZUFBZSxFQUFFLElBQUk7QUFHeEMsaUJBQU8sWUFBWTtBQUFBLFFBQ3JCO0FBR0EsZUFBTztBQUFBLE1BQ1Q7QUFHQSxZQUFNLE9BQU8sUUFBUSxRQUFRLENBQUM7QUFHOUIsaUJBQVcsT0FBTyxNQUFNO0FBRXRCLGNBQU0sT0FBTyxRQUFRLHlCQUF5QixHQUFHLEdBQUc7QUFHcEQsWUFBSSxNQUFNLFlBQVk7QUFFcEIsZ0JBQU0sV0FBVyxhQUFhLEdBQUc7QUFJakMsZ0JBQU0sYUFBYSxlQUFlLEVBQUUsSUFBSTtBQUd4QyxpQkFBTyxZQUFZO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBR0EsYUFBTztBQUFBO0FBQUE7QUFJWCxTQUFPLDZCQUE4QixDQUFDLEdBQUc7QUFDdkMsV0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU07QUFDdkIsVUFBSSxLQUFLLFdBQVcsV0FBVyxhQUFhLElBQUk7QUFDOUMsY0FBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLFVBQzVCLFFBQVEsRUFBRTtBQUFBLFVBQ1YsU0FBUyxZQUFZLDBCQUEwQixFQUFFO0FBQUEsUUFDbkQsQ0FBQztBQUFBLE1BQ0g7QUFFQSxhQUFPO0FBQUE7QUFBQTtBQUlYLFNBQU8sOEJBQStCLENBQUMsWUFBWTtBQUNqRCxXQUFPLENBQUMsZUFBZTtBQUNyQixZQUFNLE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVTtBQUN4QyxZQUFNLE9BQU8sQ0FBQztBQUVkLFVBQUksU0FBUyxVQUFVLFNBQVMsYUFBYTtBQUMzQyxlQUFPO0FBQUEsTUFDVCxXQUFXLFNBQVMsVUFBVTtBQUM1QixjQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsVUFDNUIsUUFBUTtBQUFBLFVBQ1IsU0FBUyxZQUFZO0FBQUEsUUFDdkIsQ0FBQztBQUFBLE1BQ0g7QUFFQSxpQkFBVyxXQUFXLFlBQVk7QUFDaEMsZ0JBQVEsS0FBSyxjQUFjLFVBQVUsY0FBYztBQUVuRCxZQUFJLGFBQWEsTUFBTTtBQUNyQixlQUFLLE9BQU8sWUFBWSxHQUFHLEdBQUc7QUFDNUIsa0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxjQUM1QixRQUFRO0FBQUEsY0FDUixTQUFTLHlCQUF5QjtBQUFBLFlBQ3BDLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUVBLFlBQUksUUFBUSxXQUFXO0FBQ3ZCLGNBQU0sYUFBYSxPQUFPLFNBQVMsY0FBYztBQUlqRCxZQUFJLGNBQWMsVUFBVSxNQUFNO0FBQ2hDLGtCQUFRLFNBQVM7QUFBQSxRQUNuQjtBQUtBLFlBQUksWUFBWSxjQUFjLFVBQVUsV0FBVztBQUNqRCxrQkFBUSxVQUFVLEtBQUs7QUFFdkIsY0FDRSxRQUFRLGtCQUNQLFFBQVEsY0FBYyxTQUFTLEtBQUssR0FDckM7QUFDQSxrQkFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLGNBQzVCLFFBQVE7QUFBQSxjQUNSLFNBQVMsR0FBRyxrREFBa0QsUUFBUSxjQUFjLEtBQUssSUFBSTtBQUFBLFlBQy9GLENBQUM7QUFBQSxVQUNIO0FBRUEsZUFBSyxPQUFPO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFFQSxhQUFPO0FBQUE7QUFBQTtBQUlYLFNBQU8sNEJBQTZCLENBQUMsV0FBVztBQUM5QyxXQUFPLENBQUMsTUFBTTtBQUNaLFVBQUksTUFBTSxNQUFNO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFLdEIsU0FBTyxXQUFXLG9CQUFxQixDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUc7QUFLcEQsUUFBSSxNQUFNLFFBQVEsS0FBSyx5QkFBeUI7QUFDOUMsYUFBTztBQUFBLElBQ1Q7QUFHQSxlQUFXLE1BQU0sVUFBVTtBQUN6QixZQUFNLElBQUksVUFBVSxzREFBc0Q7QUFBQSxJQUM1RTtBQUtBLFdBQU8sT0FBTyxDQUFDO0FBQUE7QUFJakIsU0FBTyxXQUFXLHFCQUFzQixDQUFDLEdBQUc7QUFHMUMsVUFBTSxJQUFJLE9BQU8sV0FBVyxVQUFVLENBQUM7QUFJdkMsYUFBUyxRQUFRLEVBQUcsUUFBUSxFQUFFLFFBQVEsU0FBUztBQUM3QyxVQUFJLEVBQUUsV0FBVyxLQUFLLElBQUksS0FBSztBQUM3QixjQUFNLElBQUksVUFDUixzRUFDQSxTQUFTLHdCQUF3QixFQUFFLFdBQVcsS0FBSyw4QkFDckQ7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUtBLFdBQU87QUFBQTtBQUlULFNBQU8sV0FBVyxZQUFZO0FBRzlCLFNBQU8sV0FBVyxrQkFBbUIsQ0FBQyxHQUFHO0FBRXZDLFVBQU0sSUFBSSxRQUFRLENBQUM7QUFJbkIsV0FBTztBQUFBO0FBSVQsU0FBTyxXQUFXLGNBQWUsQ0FBQyxHQUFHO0FBQ25DLFdBQU87QUFBQTtBQUlULFNBQU8sV0FBVyx1QkFBd0IsQ0FBQyxHQUFHO0FBRTVDLFVBQU0sSUFBSSxPQUFPLEtBQUssYUFBYSxHQUFHLElBQUksUUFBUTtBQUlsRCxXQUFPO0FBQUE7QUFJVCxTQUFPLFdBQVcsZ0NBQWlDLENBQUMsR0FBRztBQUVyRCxVQUFNLElBQUksT0FBTyxLQUFLLGFBQWEsR0FBRyxJQUFJLFVBQVU7QUFJcEQsV0FBTztBQUFBO0FBSVQsU0FBTyxXQUFXLDJCQUE0QixDQUFDLEdBQUc7QUFFaEQsVUFBTSxJQUFJLE9BQU8sS0FBSyxhQUFhLEdBQUcsSUFBSSxVQUFVO0FBSXBELFdBQU87QUFBQTtBQUlULFNBQU8sV0FBVyw0QkFBNkIsQ0FBQyxHQUFHLE1BQU07QUFFdkQsVUFBTSxJQUFJLE9BQU8sS0FBSyxhQUFhLEdBQUcsSUFBSSxZQUFZLElBQUk7QUFJMUQsV0FBTztBQUFBO0FBSVQsU0FBTyxXQUFXLHNCQUF1QixDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUc7QUFNdEQsUUFDRSxPQUFPLEtBQUssS0FBSyxDQUFDLE1BQU0sYUFDdkIsTUFBTSxpQkFBaUIsQ0FBQyxHQUN6QjtBQUNBLFlBQU0sT0FBTyxPQUFPLGlCQUFpQjtBQUFBLFFBQ25DLFFBQVEsR0FBRztBQUFBLFFBQ1gsVUFBVSxHQUFHO0FBQUEsUUFDYixPQUFPLENBQUMsYUFBYTtBQUFBLE1BQ3ZCLENBQUM7QUFBQSxJQUNIO0FBTUEsUUFBSSxLQUFLLGdCQUFnQixTQUFTLE1BQU0sb0JBQW9CLENBQUMsR0FBRztBQUM5RCxZQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsUUFDNUIsUUFBUTtBQUFBLFFBQ1IsU0FBUztBQUFBLE1BQ1gsQ0FBQztBQUFBLElBQ0g7QUFVQSxXQUFPO0FBQUE7QUFHVCxTQUFPLFdBQVcscUJBQXNCLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHO0FBTXhELFFBQ0UsT0FBTyxLQUFLLEtBQUssQ0FBQyxNQUFNLGFBQ3ZCLE1BQU0sYUFBYSxDQUFDLEtBQ3JCLEVBQUUsWUFBWSxTQUFTLEVBQUUsTUFDekI7QUFDQSxZQUFNLE9BQU8sT0FBTyxpQkFBaUI7QUFBQSxRQUNuQyxRQUFRLEdBQUcsRUFBRTtBQUFBLFFBQ2IsVUFBVSxHQUFHO0FBQUEsUUFDYixPQUFPLENBQUMsRUFBRSxJQUFJO0FBQUEsTUFDaEIsQ0FBQztBQUFBLElBQ0g7QUFNQSxRQUFJLEtBQUssZ0JBQWdCLFNBQVMsTUFBTSxvQkFBb0IsRUFBRSxNQUFNLEdBQUc7QUFDckUsWUFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLFFBQzVCLFFBQVE7QUFBQSxRQUNSLFNBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNIO0FBVUEsV0FBTztBQUFBO0FBR1QsU0FBTyxXQUFXLG1CQUFvQixDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUc7QUFHbkQsUUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLE1BQU0sYUFBYSxNQUFNLFdBQVcsQ0FBQyxHQUFHO0FBQzVELFlBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxRQUM1QixRQUFRO0FBQUEsUUFDUixTQUFTO0FBQUEsTUFDWCxDQUFDO0FBQUEsSUFDSDtBQU1BLFFBQUksS0FBSyxnQkFBZ0IsU0FBUyxNQUFNLG9CQUFvQixFQUFFLE1BQU0sR0FBRztBQUNyRSxZQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsUUFDNUIsUUFBUTtBQUFBLFFBQ1IsU0FBUztBQUFBLE1BQ1gsQ0FBQztBQUFBLElBQ0g7QUFVQSxXQUFPO0FBQUE7QUFJVCxTQUFPLFdBQVcsdUJBQXdCLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRztBQUN2RCxRQUFJLE1BQU0saUJBQWlCLENBQUMsR0FBRztBQUM3QixhQUFPLE9BQU8sV0FBVyxZQUFZLEdBQUcsSUFBSTtBQUFBLElBQzlDO0FBRUEsUUFBSSxNQUFNLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGFBQU8sT0FBTyxXQUFXLFdBQVcsR0FBRyxFQUFFLFdBQVc7QUFBQSxJQUN0RDtBQUVBLFFBQUksTUFBTSxXQUFXLENBQUMsR0FBRztBQUN2QixhQUFPLE9BQU8sV0FBVyxTQUFTLEdBQUcsSUFBSTtBQUFBLElBQzNDO0FBRUEsVUFBTSxJQUFJLFVBQVUscUJBQXFCLHNCQUFzQjtBQUFBO0FBR2pFLFNBQU8sV0FBVywwQkFBMEIsT0FBTyxrQkFDakQsT0FBTyxXQUFXLFVBQ3BCO0FBRUEsU0FBTyxXQUFXLG9DQUFvQyxPQUFPLGtCQUMzRCxPQUFPLFdBQVcsdUJBQ3BCO0FBRUEsU0FBTyxXQUFXLG9DQUFvQyxPQUFPLGdCQUMzRCxPQUFPLFdBQVcsWUFDbEIsT0FBTyxXQUFXLFVBQ3BCO0FBRUEsU0FBTyxVQUFVO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUFBQTs7OztBQ3JvQkEsTUFBTTtBQUNOLFFBQVE7QUFDUixRQUFRO0FBRVIsTUFBTSxVQUFVLElBQUk7QUFLcEIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx3QkFBd0I7QUFJOUIsTUFBTSw0QkFBNEI7QUFJbEMsV0FBUyxnQkFBaUIsQ0FBQyxTQUFTO0FBRWxDLFdBQU8sUUFBUSxhQUFhLE9BQU87QUFLbkMsUUFBSSxRQUFRLGNBQWMsU0FBUyxJQUFJO0FBR3ZDLFlBQVEsTUFBTSxNQUFNLENBQUM7QUFHckIsVUFBTSxXQUFXLEVBQUUsVUFBVSxFQUFFO0FBSy9CLFFBQUksV0FBVyxpQ0FDYixLQUNBLE9BQ0EsUUFDRjtBQVFBLFVBQU0saUJBQWlCLFNBQVM7QUFDaEMsZUFBVyxzQkFBc0IsVUFBVSxNQUFNLElBQUk7QUFJckQsUUFBSSxTQUFTLFlBQVksTUFBTSxRQUFRO0FBQ3JDLGFBQU87QUFBQSxJQUNUO0FBR0EsYUFBUztBQUdULFVBQU0sY0FBYyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFHbEQsUUFBSSxPQUFPLG9CQUFvQixXQUFXO0FBSzFDLFFBQUksd0JBQXdCLEtBQUssUUFBUSxHQUFHO0FBRTFDLFlBQU0sYUFBYSxpQkFBaUIsSUFBSTtBQUl4QyxhQUFPLGdCQUFnQixVQUFVO0FBR2pDLFVBQUksU0FBUyxXQUFXO0FBQ3RCLGVBQU87QUFBQSxNQUNUO0FBR0EsaUJBQVcsU0FBUyxNQUFNLEdBQUcsRUFBRTtBQUkvQixpQkFBVyxTQUFTLFFBQVEsY0FBYyxFQUFFO0FBRzVDLGlCQUFXLFNBQVMsTUFBTSxHQUFHLEVBQUU7QUFBQSxJQUNqQztBQUlBLFFBQUksU0FBUyxXQUFXLEdBQUcsR0FBRztBQUM1QixpQkFBVyxlQUFlO0FBQUEsSUFDNUI7QUFJQSxRQUFJLGlCQUFpQixjQUFjLFFBQVE7QUFJM0MsUUFBSSxtQkFBbUIsV0FBVztBQUNoQyx1QkFBaUIsY0FBYyw2QkFBNkI7QUFBQSxJQUM5RDtBQUtBLFdBQU8sRUFBRSxVQUFVLGdCQUFnQixLQUFLO0FBQUE7QUFRMUMsV0FBUyxhQUFjLENBQUMsS0FBSyxrQkFBa0IsT0FBTztBQUNwRCxTQUFLLGlCQUFpQjtBQUNwQixhQUFPLElBQUk7QUFBQSxJQUNiO0FBRUEsVUFBTSxPQUFPLElBQUk7QUFDakIsVUFBTSxhQUFhLElBQUksS0FBSztBQUU1QixXQUFPLGVBQWUsSUFBSSxPQUFPLEtBQUssVUFBVSxHQUFHLEtBQUssU0FBUyxVQUFVO0FBQUE7QUFTN0UsV0FBUyw0QkFBNkIsQ0FBQyxXQUFXLE9BQU8sVUFBVTtBQUVqRSxRQUFJLFNBQVM7QUFJYixXQUFPLFNBQVMsV0FBVyxNQUFNLFVBQVUsVUFBVSxNQUFNLFNBQVMsU0FBUyxHQUFHO0FBRTlFLGdCQUFVLE1BQU0sU0FBUztBQUd6QixlQUFTO0FBQUEsSUFDWDtBQUdBLFdBQU87QUFBQTtBQVNULFdBQVMsZ0NBQWlDLENBQUMsTUFBTSxPQUFPLFVBQVU7QUFDaEUsVUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLFNBQVMsUUFBUTtBQUNqRCxVQUFNLFFBQVEsU0FBUztBQUV2QixRQUFJLFFBQVEsSUFBSTtBQUNkLGVBQVMsV0FBVyxNQUFNO0FBQzFCLGFBQU8sTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUMxQjtBQUVBLGFBQVMsV0FBVztBQUNwQixXQUFPLE1BQU0sTUFBTSxPQUFPLFNBQVMsUUFBUTtBQUFBO0FBSzdDLFdBQVMsbUJBQW9CLENBQUMsT0FBTztBQUVuQyxVQUFNLFFBQVEsUUFBUSxPQUFPLEtBQUs7QUFHbEMsV0FBTyxjQUFjLEtBQUs7QUFBQTtBQUs1QixXQUFTLGFBQWMsQ0FBQyxPQUFPO0FBRzdCLFVBQU0sU0FBUyxDQUFDO0FBR2hCLGFBQVMsSUFBSSxFQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDckMsWUFBTSxPQUFPLE1BQU07QUFHbkIsVUFBSSxTQUFTLElBQU07QUFDakIsZUFBTyxLQUFLLElBQUk7QUFBQSxNQU9sQixXQUNFLFNBQVMsT0FDUixvQkFBb0IsS0FBSyxPQUFPLGFBQWEsTUFBTSxJQUFJLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUN6RTtBQUNBLGVBQU8sS0FBSyxFQUFJO0FBQUEsTUFHbEIsT0FBTztBQUdMLGNBQU0sZUFBZSxPQUFPLGFBQWEsTUFBTSxJQUFJLElBQUksTUFBTSxJQUFJLEVBQUU7QUFDbkUsY0FBTSxZQUFZLE9BQU8sU0FBUyxjQUFjLEVBQUU7QUFHbEQsZUFBTyxLQUFLLFNBQVM7QUFHckIsYUFBSztBQUFBO0FBQUEsSUFFVDtBQUdBLFdBQU8sV0FBVyxLQUFLLE1BQU07QUFBQTtBQUsvQixXQUFTLGFBQWMsQ0FBQyxPQUFPO0FBRzdCLFlBQVEscUJBQXFCLE9BQU8sTUFBTSxJQUFJO0FBSTlDLFVBQU0sV0FBVyxFQUFFLFVBQVUsRUFBRTtBQUsvQixVQUFNLE9BQU8saUNBQ1gsS0FDQSxPQUNBLFFBQ0Y7QUFLQSxRQUFJLEtBQUssV0FBVyxNQUFNLHNCQUFzQixLQUFLLElBQUksR0FBRztBQUMxRCxhQUFPO0FBQUEsSUFDVDtBQUlBLFFBQUksU0FBUyxXQUFXLE1BQU0sUUFBUTtBQUNwQyxhQUFPO0FBQUEsSUFDVDtBQUdBLGFBQVM7QUFLVCxRQUFJLFVBQVUsaUNBQ1osS0FDQSxPQUNBLFFBQ0Y7QUFHQSxjQUFVLHFCQUFxQixTQUFTLE9BQU8sSUFBSTtBQUluRCxRQUFJLFFBQVEsV0FBVyxNQUFNLHNCQUFzQixLQUFLLE9BQU8sR0FBRztBQUNoRSxhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sZ0JBQWdCLEtBQUssWUFBWTtBQUN2QyxVQUFNLG1CQUFtQixRQUFRLFlBQVk7QUFNN0MsVUFBTSxXQUFXO0FBQUEsTUFDZixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFFVCxZQUFZLElBQUk7QUFBQSxNQUVoQixTQUFTLEdBQUcsaUJBQWlCO0FBQUEsSUFDL0I7QUFHQSxXQUFPLFNBQVMsV0FBVyxNQUFNLFFBQVE7QUFFdkMsZUFBUztBQUlULG1DQUVFLFVBQVEsc0JBQXNCLEtBQUssSUFBSSxHQUN2QyxPQUNBLFFBQ0Y7QUFLQSxVQUFJLGdCQUFnQiw2QkFDbEIsQ0FBQyxTQUFTLFNBQVMsT0FBTyxTQUFTLEtBQ25DLE9BQ0EsUUFDRjtBQUlBLHNCQUFnQixjQUFjLFlBQVk7QUFHMUMsVUFBSSxTQUFTLFdBQVcsTUFBTSxRQUFRO0FBR3BDLFlBQUksTUFBTSxTQUFTLGNBQWMsS0FBSztBQUNwQztBQUFBLFFBQ0Y7QUFHQSxpQkFBUztBQUFBLE1BQ1g7QUFHQSxVQUFJLFNBQVMsV0FBVyxNQUFNLFFBQVE7QUFDcEM7QUFBQSxNQUNGO0FBR0EsVUFBSSxpQkFBaUI7QUFJckIsVUFBSSxNQUFNLFNBQVMsY0FBYyxLQUFLO0FBSXBDLHlCQUFpQiwwQkFBMEIsT0FBTyxVQUFVLElBQUk7QUFJaEUseUNBQ0UsS0FDQSxPQUNBLFFBQ0Y7QUFBQSxNQUdGLE9BQU87QUFJTCx5QkFBaUIsaUNBQ2YsS0FDQSxPQUNBLFFBQ0Y7QUFHQSx5QkFBaUIscUJBQXFCLGdCQUFnQixPQUFPLElBQUk7QUFHakUsWUFBSSxlQUFlLFdBQVcsR0FBRztBQUMvQjtBQUFBLFFBQ0Y7QUFBQTtBQVNGLFVBQ0UsY0FBYyxXQUFXLEtBQ3pCLHNCQUFzQixLQUFLLGFBQWEsTUFDdkMsZUFBZSxXQUFXLEtBQUssMEJBQTBCLEtBQUssY0FBYyxPQUM1RSxTQUFTLFdBQVcsSUFBSSxhQUFhLEdBQ3RDO0FBQ0EsaUJBQVMsV0FBVyxJQUFJLGVBQWUsY0FBYztBQUFBLE1BQ3ZEO0FBQUEsSUFDRjtBQUdBLFdBQU87QUFBQTtBQUtULFdBQVMsZUFBZ0IsQ0FBQyxNQUFNO0FBRTlCLFdBQU8sS0FBSyxRQUFRLHFDQUFxQyxFQUFFO0FBSTNELFFBQUksS0FBSyxTQUFTLE1BQU0sR0FBRztBQUd6QixhQUFPLEtBQUssUUFBUSxRQUFRLEVBQUU7QUFBQSxJQUNoQztBQUlBLFFBQUksS0FBSyxTQUFTLE1BQU0sR0FBRztBQUN6QixhQUFPO0FBQUEsSUFDVDtBQU9BLFFBQUksaUJBQWlCLEtBQUssSUFBSSxHQUFHO0FBQy9CLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxTQUFTLE1BQUssSUFBSTtBQUN4QixVQUFNLFFBQVEsSUFBSSxXQUFXLE9BQU8sTUFBTTtBQUUxQyxhQUFTLE9BQU8sRUFBRyxPQUFPLE9BQU8sUUFBUSxRQUFRO0FBQy9DLFlBQU0sUUFBUSxPQUFPLFdBQVcsSUFBSTtBQUFBLElBQ3RDO0FBRUEsV0FBTztBQUFBO0FBVVQsV0FBUyx5QkFBMEIsQ0FBQyxPQUFPLFVBQVUsY0FBYztBQUVqRSxVQUFNLGdCQUFnQixTQUFTO0FBRy9CLFFBQUksUUFBUTtBQUlaLFdBQU8sTUFBTSxTQUFTLGNBQWMsR0FBRztBQUd2QyxhQUFTO0FBR1QsV0FBTyxNQUFNO0FBSVgsZUFBUyw2QkFDUCxDQUFDLFNBQVMsU0FBUyxPQUFPLFNBQVMsTUFDbkMsT0FDQSxRQUNGO0FBR0EsVUFBSSxTQUFTLFlBQVksTUFBTSxRQUFRO0FBQ3JDO0FBQUEsTUFDRjtBQUlBLFlBQU0sbUJBQW1CLE1BQU0sU0FBUztBQUd4QyxlQUFTO0FBR1QsVUFBSSxxQkFBcUIsTUFBTTtBQUc3QixZQUFJLFNBQVMsWUFBWSxNQUFNLFFBQVE7QUFDckMsbUJBQVM7QUFDVDtBQUFBLFFBQ0Y7QUFHQSxpQkFBUyxNQUFNLFNBQVM7QUFHeEIsaUJBQVM7QUFBQSxNQUdYLE9BQU87QUFFTCxlQUFPLHFCQUFxQixHQUFHO0FBRy9CO0FBQUE7QUFBQSxJQUVKO0FBR0EsUUFBSSxjQUFjO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBSUEsV0FBTyxNQUFNLE1BQU0sZUFBZSxTQUFTLFFBQVE7QUFBQTtBQU1yRCxXQUFTLGtCQUFtQixDQUFDLFVBQVU7QUFDckMsV0FBTyxhQUFhLFNBQVM7QUFDN0IsWUFBUSxZQUFZLFlBQVk7QUFJaEMsUUFBSSxnQkFBZ0I7QUFHcEIsY0FBVSxNQUFNLFVBQVUsV0FBVyxRQUFRLEdBQUc7QUFFOUMsdUJBQWlCO0FBR2pCLHVCQUFpQjtBQUdqQix1QkFBaUI7QUFJakIsV0FBSyxzQkFBc0IsS0FBSyxLQUFLLEdBQUc7QUFHdEMsZ0JBQVEsTUFBTSxRQUFRLFdBQVcsTUFBTTtBQUd2QyxnQkFBUSxNQUFNO0FBR2QsaUJBQVM7QUFBQSxNQUNYO0FBR0EsdUJBQWlCO0FBQUEsSUFDbkI7QUFHQSxXQUFPO0FBQUE7QUFPVCxXQUFTLGdCQUFpQixDQUFDLE1BQU07QUFDL0IsV0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTO0FBQUE7QUFPckUsV0FBUyxvQkFBcUIsQ0FBQyxLQUFLLFVBQVUsTUFBTSxXQUFXLE1BQU07QUFDbkUsUUFBSSxPQUFPO0FBQ1gsUUFBSSxRQUFRLElBQUksU0FBUztBQUV6QixRQUFJLFNBQVM7QUFDWCxZQUFPLE9BQU8sSUFBSSxVQUFVLGlCQUFpQixJQUFJLEtBQUssR0FBRztBQUFBO0FBQUEsSUFDM0Q7QUFFQSxRQUFJLFVBQVU7QUFDWixZQUFPLFFBQVEsS0FBSyxpQkFBaUIsSUFBSSxNQUFNLEdBQUc7QUFBQTtBQUFBLElBQ3BEO0FBRUEsV0FBTyxJQUFJLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFBQTtBQU9sQyxXQUFTLGlCQUFrQixDQUFDLE1BQU07QUFDaEMsV0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUztBQUFBO0FBTXRGLFdBQVMscUJBQXNCLENBQUMsS0FBSyxVQUFVLE1BQU0sV0FBVyxNQUFNO0FBQ3BFLFFBQUksT0FBTztBQUNYLFFBQUksUUFBUSxJQUFJLFNBQVM7QUFFekIsUUFBSSxTQUFTO0FBQ1gsWUFBTyxPQUFPLElBQUksVUFBVSxrQkFBa0IsSUFBSSxLQUFLLEdBQUc7QUFBQTtBQUFBLElBQzVEO0FBRUEsUUFBSSxVQUFVO0FBQ1osWUFBTyxRQUFRLEtBQUssa0JBQWtCLElBQUksTUFBTSxHQUFHO0FBQUE7QUFBQSxJQUNyRDtBQUVBLFdBQU8sSUFBSSxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQUE7QUFHbEMsU0FBTyxVQUFVO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7Ozs7QUNobkJBLFFBQVEsYUFBTSxNQUFNO0FBQ3BCLFFBQVE7QUFDUixRQUFRO0FBQ1IsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRLGVBQWU7QUFDdkIsUUFBUTtBQUNSLE1BQU0sVUFBVSxJQUFJO0FBRXBCO0FBQUEsUUFBTSxjQUFhLE1BQUs7QUFBQSxJQUN0QixXQUFZLENBQUMsVUFBVSxVQUFVLFVBQVUsQ0FBQyxHQUFHO0FBSTdDLGFBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsbUJBQW1CLENBQUM7QUFFdkUsaUJBQVcsT0FBTyxXQUFXLHNCQUFzQixRQUFRO0FBQzNELGlCQUFXLE9BQU8sV0FBVyxVQUFVLFFBQVE7QUFDL0MsZ0JBQVUsT0FBTyxXQUFXLGdCQUFnQixPQUFPO0FBT25ELFlBQU0sSUFBSTtBQVVWLFVBQUksSUFBSSxRQUFRO0FBQ2hCLFVBQUk7QUFHSixlQUFTO0FBQ1AsWUFBSSxHQUFHO0FBQ0wsY0FBSSxjQUFjLENBQUM7QUFFbkIsY0FBSSxNQUFNLFdBQVc7QUFDbkIsZ0JBQUk7QUFFSjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLG1CQUFtQixDQUFDLEVBQUUsWUFBWTtBQUFBLFFBQ3hDO0FBTUEsWUFBSSxRQUFRO0FBQUEsTUFDZDtBQVNBLFlBQU0saUJBQWlCLFVBQVUsT0FBTyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDdEQsV0FBSyxVQUFVO0FBQUEsUUFDYixNQUFNO0FBQUEsUUFDTixjQUFjO0FBQUEsUUFDZCxNQUFNO0FBQUEsTUFDUjtBQUFBO0FBQUEsUUFHRSxJQUFLLEdBQUc7QUFDVixhQUFPLFdBQVcsTUFBTSxLQUFJO0FBRTVCLGFBQU8sS0FBSyxRQUFRO0FBQUE7QUFBQSxRQUdsQixZQUFhLEdBQUc7QUFDbEIsYUFBTyxXQUFXLE1BQU0sS0FBSTtBQUU1QixhQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsUUFHbEIsSUFBSyxHQUFHO0FBQ1YsYUFBTyxXQUFXLE1BQU0sS0FBSTtBQUU1QixhQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsRUFFeEI7QUFFQTtBQUFBLFFBQU0sU0FBUztBQUFBLElBQ2IsV0FBWSxDQUFDLFVBQVUsVUFBVSxVQUFVLENBQUMsR0FBRztBQVc3QyxZQUFNLElBQUk7QUFVVixZQUFNLElBQUksUUFBUTtBQVNsQixZQUFNLElBQUksUUFBUSxnQkFBZ0IsS0FBSyxJQUFJO0FBUzNDLFdBQUssVUFBVTtBQUFBLFFBQ2I7QUFBQSxRQUNBLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLGNBQWM7QUFBQSxNQUNoQjtBQUFBO0FBQUEsSUFHRixNQUFPLElBQUksTUFBTTtBQUNmLGFBQU8sV0FBVyxNQUFNLFFBQVE7QUFFaEMsYUFBTyxLQUFLLFFBQVEsU0FBUyxPQUFPLEdBQUcsSUFBSTtBQUFBO0FBQUEsSUFHN0MsV0FBWSxJQUFJLE1BQU07QUFDcEIsYUFBTyxXQUFXLE1BQU0sUUFBUTtBQUVoQyxhQUFPLEtBQUssUUFBUSxTQUFTLFlBQVksR0FBRyxJQUFJO0FBQUE7QUFBQSxJQUdsRCxLQUFNLElBQUksTUFBTTtBQUNkLGFBQU8sV0FBVyxNQUFNLFFBQVE7QUFFaEMsYUFBTyxLQUFLLFFBQVEsU0FBUyxNQUFNLEdBQUcsSUFBSTtBQUFBO0FBQUEsSUFHNUMsSUFBSyxJQUFJLE1BQU07QUFDYixhQUFPLFdBQVcsTUFBTSxRQUFRO0FBRWhDLGFBQU8sS0FBSyxRQUFRLFNBQVMsS0FBSyxHQUFHLElBQUk7QUFBQTtBQUFBLFFBR3ZDLElBQUssR0FBRztBQUNWLGFBQU8sV0FBVyxNQUFNLFFBQVE7QUFFaEMsYUFBTyxLQUFLLFFBQVEsU0FBUztBQUFBO0FBQUEsUUFHM0IsSUFBSyxHQUFHO0FBQ1YsYUFBTyxXQUFXLE1BQU0sUUFBUTtBQUVoQyxhQUFPLEtBQUssUUFBUSxTQUFTO0FBQUE7QUFBQSxRQUczQixJQUFLLEdBQUc7QUFDVixhQUFPLFdBQVcsTUFBTSxRQUFRO0FBRWhDLGFBQU8sS0FBSyxRQUFRO0FBQUE7QUFBQSxRQUdsQixZQUFhLEdBQUc7QUFDbEIsYUFBTyxXQUFXLE1BQU0sUUFBUTtBQUVoQyxhQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsU0FHakIsT0FBTyxZQUFhLEdBQUc7QUFDMUIsYUFBTztBQUFBO0FBQUEsRUFFWDtBQUVBLFNBQU8saUJBQWlCLE1BQUssV0FBVztBQUFBLEtBQ3JDLE9BQU8sY0FBYztBQUFBLE1BQ3BCLE9BQU87QUFBQSxNQUNQLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0EsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCLENBQUM7QUFFRCxTQUFPLFdBQVcsT0FBTyxPQUFPLG1CQUFtQixLQUFJO0FBRXZELFNBQU8sV0FBVyxtQkFBb0IsQ0FBQyxHQUFHLE1BQU07QUFDOUMsUUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLE1BQU0sVUFBVTtBQUNwQyxVQUFJLFdBQVcsQ0FBQyxHQUFHO0FBQ2pCLGVBQU8sT0FBTyxXQUFXLEtBQUssR0FBRyxFQUFFLFFBQVEsTUFBTSxDQUFDO0FBQUEsTUFDcEQ7QUFFQSxVQUNFLFlBQVksT0FBTyxDQUFDLEtBQ3BCLE1BQU0saUJBQWlCLENBQUMsR0FDeEI7QUFDQSxlQUFPLE9BQU8sV0FBVyxhQUFhLEdBQUcsSUFBSTtBQUFBLE1BQy9DO0FBQUEsSUFDRjtBQUVBLFdBQU8sT0FBTyxXQUFXLFVBQVUsR0FBRyxJQUFJO0FBQUE7QUFHNUMsU0FBTyxXQUFXLHdCQUF3QixPQUFPLGtCQUMvQyxPQUFPLFdBQVcsUUFDcEI7QUFHQSxTQUFPLFdBQVcsa0JBQWtCLE9BQU8sb0JBQW9CO0FBQUEsSUFDN0Q7QUFBQSxNQUNFLEtBQUs7QUFBQSxNQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsVUFDekIsWUFBYSxHQUFHO0FBQ2xCLGVBQU8sS0FBSyxJQUFJO0FBQUE7QUFBQSxJQUVwQjtBQUFBLElBQ0E7QUFBQSxNQUNFLEtBQUs7QUFBQSxNQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsTUFDN0IsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLE1BQ0UsS0FBSztBQUFBLE1BQ0wsV0FBVyxDQUFDLFVBQVU7QUFDcEIsZ0JBQVEsT0FBTyxXQUFXLFVBQVUsS0FBSztBQUN6QyxnQkFBUSxNQUFNLFlBQVk7QUFFMUIsWUFBSSxVQUFVLFVBQVU7QUFDdEIsa0JBQVE7QUFBQSxRQUNWO0FBRUEsZUFBTztBQUFBO0FBQUEsTUFFVCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxFQUNGLENBQUM7QUFPRCxXQUFTLGdCQUFpQixDQUFDLE9BQU8sU0FBUztBQUd6QyxVQUFNLFFBQVEsQ0FBQztBQUdmLGVBQVcsV0FBVyxPQUFPO0FBRTNCLGlCQUFXLFlBQVksVUFBVTtBQUUvQixZQUFJLElBQUk7QUFLUixZQUFJLFFBQVEsWUFBWSxVQUFVO0FBQ2hDLGNBQUkseUJBQXlCLENBQUM7QUFBQSxRQUNoQztBQUdBLGNBQU0sS0FBSyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQUEsTUFDOUIsV0FDRSxNQUFNLGlCQUFpQixPQUFPLEtBQzlCLE1BQU0sYUFBYSxPQUFPLEdBQzFCO0FBSUEsYUFBSyxRQUFRLFFBQVE7QUFDbkIsZ0JBQU0sS0FBSyxJQUFJLFdBQVcsT0FBTyxDQUFDO0FBQUEsUUFDcEMsT0FBTztBQUNMLGdCQUFNLEtBQ0osSUFBSSxXQUFXLFFBQVEsUUFBUSxRQUFRLFlBQVksUUFBUSxVQUFVLENBQ3ZFO0FBQUE7QUFBQSxNQUVKLFdBQVcsV0FBVyxPQUFPLEdBQUc7QUFHOUIsY0FBTSxLQUFLLE9BQU87QUFBQSxNQUNwQjtBQUFBLElBQ0Y7QUFHQSxXQUFPO0FBQUE7QUFPVCxXQUFTLHdCQUF5QixDQUFDLEdBQUc7QUFFcEMsUUFBSSxtQkFBbUI7QUFNdkIsUUFBSSxRQUFRLGFBQWEsU0FBUztBQUNoQyx5QkFBbUI7QUFBQSxJQUNyQjtBQUVBLFdBQU8sRUFBRSxRQUFRLFVBQVUsZ0JBQWdCO0FBQUE7QUFNN0MsV0FBUyxVQUFXLENBQUMsUUFBUTtBQUMzQixXQUNHLGNBQWMsa0JBQWtCLGNBQ2pDLGtCQUFrQixTQUNoQixrQkFDUSxPQUFPLFdBQVcscUJBQ25CLE9BQU8sZ0JBQWdCLGVBQzlCLE9BQU8sT0FBTyxpQkFBaUI7QUFBQTtBQUtyQyxTQUFPLFVBQVUsRUFBRSxhQUFNLFVBQVUsV0FBVztBQUFBOzs7O0FDclY5QyxRQUFRLFlBQVksYUFBYTtBQUNqQyxRQUFRO0FBQ1IsUUFBUSxNQUFNLFlBQVksVUFBVTtBQUNwQyxRQUFRO0FBQ1IsUUFBUSxhQUFNLE1BQU07QUFHcEIsTUFBTSxRQUFPLGNBQWM7QUFHM0I7QUFBQSxRQUFNLFVBQVM7QUFBQSxJQUNiLFdBQVksQ0FBQyxNQUFNO0FBQ2pCLFVBQUksU0FBUyxXQUFXO0FBQ3RCLGNBQU0sT0FBTyxPQUFPLGlCQUFpQjtBQUFBLFVBQ25DLFFBQVE7QUFBQSxVQUNSLFVBQVU7QUFBQSxVQUNWLE9BQU8sQ0FBQyxXQUFXO0FBQUEsUUFDckIsQ0FBQztBQUFBLE1BQ0g7QUFFQSxXQUFLLFVBQVUsQ0FBQztBQUFBO0FBQUEsSUFHbEIsTUFBTyxDQUFDLE1BQU0sT0FBTyxXQUFXLFdBQVc7QUFDekMsYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGtCQUFrQixDQUFDO0FBRXRFLFVBQUksVUFBVSxXQUFXLE1BQU0sV0FBVyxLQUFLLEdBQUc7QUFDaEQsY0FBTSxJQUFJLFVBQ1IsNkVBQ0Y7QUFBQSxNQUNGO0FBSUEsYUFBTyxPQUFPLFdBQVcsVUFBVSxJQUFJO0FBQ3ZDLGNBQVEsV0FBVyxLQUFLLElBQ3BCLE9BQU8sV0FBVyxLQUFLLE9BQU8sRUFBRSxRQUFRLE1BQU0sQ0FBQyxJQUMvQyxPQUFPLFdBQVcsVUFBVSxLQUFLO0FBQ3JDLGlCQUFXLFVBQVUsV0FBVyxJQUM1QixPQUFPLFdBQVcsVUFBVSxRQUFRLElBQ3BDO0FBSUosWUFBTSxRQUFRLFVBQVUsTUFBTSxPQUFPLFFBQVE7QUFHN0MsV0FBSyxRQUFRLEtBQUssS0FBSztBQUFBO0FBQUEsSUFHekIsTUFBTyxDQUFDLE1BQU07QUFDWixhQUFPLFdBQVcsTUFBTSxTQUFRO0FBRWhDLGFBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsa0JBQWtCLENBQUM7QUFFdEUsYUFBTyxPQUFPLFdBQVcsVUFBVSxJQUFJO0FBSXZDLFdBQUssVUFBVSxLQUFLLFFBQVEsT0FBTyxXQUFTLE1BQU0sU0FBUyxJQUFJO0FBQUE7QUFBQSxJQUdqRSxHQUFJLENBQUMsTUFBTTtBQUNULGFBQU8sV0FBVyxNQUFNLFNBQVE7QUFFaEMsYUFBTyxvQkFBb0IsV0FBVyxHQUFHLEVBQUUsUUFBUSxlQUFlLENBQUM7QUFFbkUsYUFBTyxPQUFPLFdBQVcsVUFBVSxJQUFJO0FBSXZDLFlBQU0sTUFBTSxLQUFLLFFBQVEsVUFBVSxDQUFDLFVBQVUsTUFBTSxTQUFTLElBQUk7QUFDakUsVUFBSSxRQUFRLElBQUk7QUFDZCxlQUFPO0FBQUEsTUFDVDtBQUlBLGFBQU8sS0FBSyxRQUFRLEtBQUs7QUFBQTtBQUFBLElBRzNCLE1BQU8sQ0FBQyxNQUFNO0FBQ1osYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGtCQUFrQixDQUFDO0FBRXRFLGFBQU8sT0FBTyxXQUFXLFVBQVUsSUFBSTtBQU12QyxhQUFPLEtBQUssUUFDVCxPQUFPLENBQUMsVUFBVSxNQUFNLFNBQVMsSUFBSSxFQUNyQyxJQUFJLENBQUMsVUFBVSxNQUFNLEtBQUs7QUFBQTtBQUFBLElBRy9CLEdBQUksQ0FBQyxNQUFNO0FBQ1QsYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGVBQWUsQ0FBQztBQUVuRSxhQUFPLE9BQU8sV0FBVyxVQUFVLElBQUk7QUFJdkMsYUFBTyxLQUFLLFFBQVEsVUFBVSxDQUFDLFVBQVUsTUFBTSxTQUFTLElBQUksTUFBTTtBQUFBO0FBQUEsSUFHcEUsR0FBSSxDQUFDLE1BQU0sT0FBTyxXQUFXLFdBQVc7QUFDdEMsYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGVBQWUsQ0FBQztBQUVuRSxVQUFJLFVBQVUsV0FBVyxNQUFNLFdBQVcsS0FBSyxHQUFHO0FBQ2hELGNBQU0sSUFBSSxVQUNSLDBFQUNGO0FBQUEsTUFDRjtBQU9BLGFBQU8sT0FBTyxXQUFXLFVBQVUsSUFBSTtBQUN2QyxjQUFRLFdBQVcsS0FBSyxJQUNwQixPQUFPLFdBQVcsS0FBSyxPQUFPLEVBQUUsUUFBUSxNQUFNLENBQUMsSUFDL0MsT0FBTyxXQUFXLFVBQVUsS0FBSztBQUNyQyxpQkFBVyxVQUFVLFdBQVcsSUFDNUIsWUFBWSxRQUFRLElBQ3BCO0FBSUosWUFBTSxRQUFRLFVBQVUsTUFBTSxPQUFPLFFBQVE7QUFJN0MsWUFBTSxNQUFNLEtBQUssUUFBUSxVQUFVLENBQUMsV0FBVSxPQUFNLFNBQVMsSUFBSTtBQUNqRSxVQUFJLFFBQVEsSUFBSTtBQUNkLGFBQUssVUFBVTtBQUFBLFVBQ2IsR0FBRyxLQUFLLFFBQVEsTUFBTSxHQUFHLEdBQUc7QUFBQSxVQUM1QjtBQUFBLFVBQ0EsR0FBRyxLQUFLLFFBQVEsTUFBTSxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVSxPQUFNLFNBQVMsSUFBSTtBQUFBLFFBQ3RFO0FBQUEsTUFDRixPQUFPO0FBRUwsYUFBSyxRQUFRLEtBQUssS0FBSztBQUFBO0FBQUE7QUFBQSxJQUkzQixPQUFRLEdBQUc7QUFDVCxhQUFPLFdBQVcsTUFBTSxTQUFRO0FBRWhDLGFBQU8sYUFDTCxNQUFNLEtBQUssUUFBUSxJQUFJLFVBQVEsQ0FBQyxLQUFLLE1BQU0sS0FBSyxLQUFLLENBQUMsR0FDdEQsWUFDQSxXQUNGO0FBQUE7QUFBQSxJQUdGLElBQUssR0FBRztBQUNOLGFBQU8sV0FBVyxNQUFNLFNBQVE7QUFFaEMsYUFBTyxhQUNMLE1BQU0sS0FBSyxRQUFRLElBQUksVUFBUSxDQUFDLEtBQUssTUFBTSxLQUFLLEtBQUssQ0FBQyxHQUN0RCxZQUNBLEtBQ0Y7QUFBQTtBQUFBLElBR0YsTUFBTyxHQUFHO0FBQ1IsYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLGFBQ0wsTUFBTSxLQUFLLFFBQVEsSUFBSSxVQUFRLENBQUMsS0FBSyxNQUFNLEtBQUssS0FBSyxDQUFDLEdBQ3RELFlBQ0EsT0FDRjtBQUFBO0FBQUEsSUFPRixPQUFRLENBQUMsWUFBWSxVQUFVLFlBQVk7QUFDekMsYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLG1CQUFtQixDQUFDO0FBRXZFLGlCQUFXLGVBQWUsWUFBWTtBQUNwQyxjQUFNLElBQUksVUFDUixtRkFDRjtBQUFBLE1BQ0Y7QUFFQSxrQkFBWSxLQUFLLFVBQVUsTUFBTTtBQUMvQixtQkFBVyxNQUFNLFNBQVMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFDOUM7QUFBQTtBQUFBLEVBRUo7QUFFQSxZQUFTLFVBQVUsT0FBTyxZQUFZLFVBQVMsVUFBVTtBQUV6RCxTQUFPLGlCQUFpQixVQUFTLFdBQVc7QUFBQSxLQUN6QyxPQUFPLGNBQWM7QUFBQSxNQUNwQixPQUFPO0FBQUEsTUFDUCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxFQUNGLENBQUM7QUFTRCxXQUFTLFNBQVUsQ0FBQyxNQUFNLE9BQU8sVUFBVTtBQUt6QyxXQUFPLE9BQU8sS0FBSyxJQUFJLEVBQUUsU0FBUyxNQUFNO0FBSXhDLGVBQVcsVUFBVSxVQUFVO0FBQzdCLGNBQVEsT0FBTyxLQUFLLEtBQUssRUFBRSxTQUFTLE1BQU07QUFBQSxJQUM1QyxPQUFPO0FBS0wsV0FBSyxXQUFXLEtBQUssR0FBRztBQUN0QixnQkFBUSxpQkFBaUIsUUFDckIsSUFBSSxNQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFBRSxNQUFNLE1BQU0sS0FBSyxDQUFDLElBQzlDLElBQUksU0FBUyxPQUFPLFFBQVEsRUFBRSxNQUFNLE1BQU0sS0FBSyxDQUFDO0FBQUEsTUFDdEQ7QUFJQSxVQUFJLGFBQWEsV0FBVztBQUUxQixjQUFNLFVBQVU7QUFBQSxVQUNkLE1BQU0sTUFBTTtBQUFBLFVBQ1osY0FBYyxNQUFNO0FBQUEsUUFDdEI7QUFFQSxnQkFBUyxjQUFjLGlCQUFpQixjQUFlLGlCQUFpQixhQUNwRSxJQUFJLE1BQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxPQUFPLElBQ25DLElBQUksU0FBUyxPQUFPLFVBQVUsT0FBTztBQUFBLE1BQzNDO0FBQUE7QUFJRixXQUFPLEVBQUUsTUFBTSxNQUFNO0FBQUE7QUFHdkIsU0FBTyxVQUFVLEVBQUUsb0JBQVM7QUFBQTs7OztBQ3RRNUIsTUFBTTtBQUNOLE1BQU07QUFDTjtBQUFBLElBQ0U7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBO0FBRUYsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRO0FBQ1IsUUFBUSw2QkFBYztBQUN0QixRQUFRLGFBQU0sTUFBTTtBQUNwQixRQUFRO0FBQ1IsTUFBTTtBQUNOLFFBQVE7QUFDUixRQUFRLGNBQWM7QUFDdEIsUUFBUSxNQUFNO0FBQ2QsUUFBUSxlQUFlO0FBRXZCLE1BQUksa0JBQWlCLFdBQVc7QUFHaEMsTUFBTSxRQUFPLGNBQWM7QUFDM0IsTUFBTSxjQUFjLElBQUk7QUFDeEIsTUFBTSxjQUFjLElBQUk7QUFHeEIsV0FBUyxXQUFZLENBQUMsUUFBUSxZQUFZLE9BQU87QUFDL0MsU0FBSyxpQkFBZ0I7QUFDbkIsZ0RBQXVDO0FBQUEsSUFDekM7QUFHQSxRQUFJLFNBQVM7QUFHYixRQUFJLGtCQUFrQixpQkFBZ0I7QUFDcEMsZUFBUztBQUFBLElBQ1gsV0FBVyxXQUFXLE1BQU0sR0FBRztBQUc3QixlQUFTLE9BQU8sT0FBTztBQUFBLElBQ3pCLE9BQU87QUFHTCxlQUFTLElBQUksZ0JBQWU7QUFBQSxhQUNwQixLQUFLLENBQUMsWUFBWTtBQUN0QixxQkFBVyxlQUNGLFdBQVcsV0FBVyxZQUFZLE9BQU8sTUFBTSxJQUFJLE1BQzVEO0FBQ0EseUJBQWUsTUFBTSxvQkFBb0IsVUFBVSxDQUFDO0FBQUE7QUFBQSxRQUV0RCxLQUFNLEdBQUc7QUFBQTtBQUFBLFFBQ1QsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBO0FBSUgsV0FBTyxxQkFBcUIsTUFBTSxDQUFDO0FBR25DLFFBQUksU0FBUztBQUdiLFFBQUksU0FBUztBQUdiLFFBQUksU0FBUztBQUdiLFFBQUksT0FBTztBQUdYLGVBQVcsV0FBVyxVQUFVO0FBRzlCLGVBQVM7QUFHVCxhQUFPO0FBQUEsSUFDVCxXQUFXLGtCQUFrQixpQkFBaUI7QUFTNUMsZUFBUyxPQUFPLFNBQVM7QUFHekIsYUFBTztBQUFBLElBQ1QsV0FBVyxjQUFjLE1BQU0sR0FBRztBQUloQyxlQUFTLElBQUksV0FBVyxPQUFPLE1BQU0sQ0FBQztBQUFBLElBQ3hDLFdBQVcsWUFBWSxPQUFPLE1BQU0sR0FBRztBQUlyQyxlQUFTLElBQUksV0FBVyxPQUFPLE9BQU8sTUFBTSxPQUFPLFlBQVksT0FBTyxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQUEsSUFDdkcsV0FBVyxLQUFLLGVBQWUsTUFBTSxHQUFHO0FBQ3RDLFlBQU0sV0FBVyx3QkFBd0IsR0FBRyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksWUFBSSxJQUFJLFNBQVMsSUFBSSxHQUFHO0FBQy9GLFlBQU0sU0FBUyxLQUFLO0FBR3BCO0FBQUEsWUFBTSxTQUFTLENBQUMsUUFDZCxJQUFJLFFBQVEsT0FBTyxLQUFLLEVBQUUsUUFBUSxPQUFPLEtBQUssRUFBRSxRQUFRLE1BQU0sS0FBSztBQUNyRSxZQUFNLHFCQUFxQixDQUFDLFVBQVUsTUFBTSxRQUFRLGFBQWEsTUFBTTtBQVF2RSxZQUFNLFlBQVksQ0FBQztBQUNuQixZQUFNLEtBQUssSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsZUFBUztBQUNULFVBQUksc0JBQXNCO0FBRTFCLGtCQUFZLE1BQU0sVUFBVSxRQUFRO0FBQ2xDLG1CQUFXLFVBQVUsVUFBVTtBQUM3QixnQkFBTSxTQUFRLFlBQVksT0FBTyxTQUMvQixXQUFXLE9BQU8sbUJBQW1CLElBQUksQ0FBQyxPQUMxQyxXQUFXLG1CQUFtQixLQUFLLE9BQU87QUFDNUMsb0JBQVUsS0FBSyxNQUFLO0FBQ3BCLG9CQUFVLE9BQU07QUFBQSxRQUNsQixPQUFPO0FBQ0wsZ0JBQU0sU0FBUSxZQUFZLE9BQU8sR0FBRyxpQkFBaUIsT0FBTyxtQkFBbUIsSUFBSSxDQUFDLFFBQ2pGLE1BQU0sT0FBTyxlQUFlLE9BQU8sTUFBTSxJQUFJLE9BQU8sTUFBTSxTQUMzRCxpQkFDRSxNQUFNLFFBQVEsb0NBQ047QUFDWixvQkFBVSxLQUFLLFFBQU8sT0FBTyxFQUFFO0FBQy9CLHFCQUFXLE1BQU0sU0FBUyxVQUFVO0FBQ2xDLHNCQUFVLE9BQU0sYUFBYSxNQUFNLE9BQU8sR0FBRztBQUFBLFVBQy9DLE9BQU87QUFDTCxrQ0FBc0I7QUFBQTtBQUFBO0FBQUEsTUFHNUI7QUFFQSxZQUFNLFFBQVEsWUFBWSxPQUFPLEtBQUssWUFBWTtBQUNsRCxnQkFBVSxLQUFLLEtBQUs7QUFDcEIsZ0JBQVUsTUFBTTtBQUNoQixVQUFJLHFCQUFxQjtBQUN2QixpQkFBUztBQUFBLE1BQ1g7QUFHQSxlQUFTO0FBRVQsZUFBUyxnQkFBaUIsR0FBRztBQUMzQixtQkFBVyxRQUFRLFdBQVc7QUFDNUIsY0FBSSxLQUFLLFFBQVE7QUFDZixtQkFBUSxLQUFLLE9BQU87QUFBQSxVQUN0QixPQUFPO0FBQ0wsa0JBQU07QUFBQTtBQUFBLFFBRVY7QUFBQTtBQU1GLGFBQU8sbUNBQW1DO0FBQUEsSUFDNUMsV0FBVyxXQUFXLE1BQU0sR0FBRztBQUk3QixlQUFTO0FBR1QsZUFBUyxPQUFPO0FBSWhCLFVBQUksT0FBTyxNQUFNO0FBQ2YsZUFBTyxPQUFPO0FBQUEsTUFDaEI7QUFBQSxJQUNGLGtCQUFrQixPQUFPLE9BQU8sbUJBQW1CLFlBQVk7QUFFN0QsVUFBSSxXQUFXO0FBQ2IsY0FBTSxJQUFJLFVBQVUsV0FBVztBQUFBLE1BQ2pDO0FBR0EsVUFBSSxLQUFLLFlBQVksTUFBTSxLQUFLLE9BQU8sUUFBUTtBQUM3QyxjQUFNLElBQUksVUFDUix3REFDRjtBQUFBLE1BQ0Y7QUFFQSxlQUNFLGtCQUFrQixrQkFBaUIsU0FBUyxtQkFBbUIsTUFBTTtBQUFBLElBQ3pFO0FBSUEsZUFBVyxXQUFXLFlBQVksS0FBSyxTQUFTLE1BQU0sR0FBRztBQUN2RCxlQUFTLE9BQU8sV0FBVyxNQUFNO0FBQUEsSUFDbkM7QUFHQSxRQUFJLFVBQVUsTUFBTTtBQUVsQixVQUFJO0FBQ0osZUFBUyxJQUFJLGdCQUFlO0FBQUEsYUFDcEIsTUFBTSxHQUFHO0FBQ2IscUJBQVcsT0FBTyxNQUFNLEVBQUUsT0FBTyxlQUFlO0FBQUE7QUFBQSxhQUU1QyxLQUFLLENBQUMsWUFBWTtBQUN0QixrQkFBUSxPQUFPLFNBQVMsTUFBTSxTQUFTLEtBQUs7QUFDNUMsY0FBSSxNQUFNO0FBRVIsMkJBQWUsTUFBTTtBQUNuQix5QkFBVyxNQUFNO0FBQUEsYUFDbEI7QUFBQSxVQUNILE9BQU87QUFJTCxpQkFBSyxVQUFVLE1BQU0sR0FBRztBQUN0Qix5QkFBVyxRQUFRLElBQUksV0FBVyxLQUFLLENBQUM7QUFBQSxZQUMxQztBQUFBO0FBRUYsaUJBQU8sV0FBVyxjQUFjO0FBQUE7QUFBQSxhQUU1QixPQUFPLENBQUMsUUFBUTtBQUNwQixnQkFBTSxTQUFTLE9BQU87QUFBQTtBQUFBLFFBRXhCLE1BQU07QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNIO0FBSUEsVUFBTSxPQUFPLEVBQUUsUUFBUSxRQUFRLE9BQU87QUFHdEMsV0FBTyxDQUFDLE1BQU0sSUFBSTtBQUFBO0FBSXBCLFdBQVMsaUJBQWtCLENBQUMsUUFBUSxZQUFZLE9BQU87QUFDckQsU0FBSyxpQkFBZ0I7QUFFbkIsZ0RBQXVDO0FBQUEsSUFDekM7QUFNQSxRQUFJLGtCQUFrQixpQkFBZ0I7QUFHcEMsY0FBUSxLQUFLLFlBQVksTUFBTSxHQUFHLHFDQUFxQztBQUV2RSxjQUFRLE9BQU8sUUFBUSx1QkFBdUI7QUFBQSxJQUNoRDtBQUdBLFdBQU8sWUFBWSxRQUFRLFNBQVM7QUFBQTtBQUd0QyxXQUFTLFNBQVUsQ0FBQyxNQUFNO0FBTXhCLFdBQU8sTUFBTSxRQUFRLEtBQUssT0FBTyxJQUFJO0FBQ3JDLFVBQU0sWUFBWSxnQkFBZ0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUc1RCxhQUFTLGNBQWMsVUFBVSxJQUFJO0FBR3JDLFNBQUssU0FBUztBQUdkLFdBQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxNQUNSLFFBQVEsS0FBSztBQUFBLE1BQ2IsUUFBUSxLQUFLO0FBQUEsSUFDZjtBQUFBO0FBR0Ysa0JBQWlCLFdBQVksQ0FBQyxNQUFNO0FBQ2xDLFFBQUksTUFBTTtBQUNSLFVBQUksYUFBYSxJQUFJLEdBQUc7QUFDdEIsY0FBTTtBQUFBLE1BQ1IsT0FBTztBQUNMLGNBQU0sU0FBUyxLQUFLO0FBRXBCLFlBQUksS0FBSyxZQUFZLE1BQU0sR0FBRztBQUM1QixnQkFBTSxJQUFJLFVBQVUscUNBQXFDO0FBQUEsUUFDM0Q7QUFFQSxZQUFJLE9BQU8sUUFBUTtBQUNqQixnQkFBTSxJQUFJLFVBQVUsdUJBQXVCO0FBQUEsUUFDN0M7QUFHQSxlQUFPLGFBQWE7QUFFcEIsZUFBUTtBQUFBO0FBQUEsSUFFWjtBQUFBO0FBR0YsV0FBUyxjQUFlLENBQUMsT0FBTztBQUM5QixRQUFJLE1BQU0sU0FBUztBQUNqQixZQUFNLElBQUksY0FBYSw4QkFBOEIsWUFBWTtBQUFBLElBQ25FO0FBQUE7QUFHRixXQUFTLGdCQUFpQixDQUFDLFVBQVU7QUFDbkMsVUFBTSxVQUFVO0FBQUEsTUFDZCxJQUFLLEdBQUc7QUFNTixlQUFPLGdCQUFnQixNQUFNLENBQUMsVUFBVTtBQUN0QyxjQUFJLFdBQVcsYUFBYSxJQUFJO0FBRWhDLGNBQUksYUFBYSxXQUFXO0FBQzFCLHVCQUFXO0FBQUEsVUFDYixXQUFXLFVBQVU7QUFDbkIsdUJBQVcsbUJBQW1CLFFBQVE7QUFBQSxVQUN4QztBQUlBLGlCQUFPLElBQUksTUFBSyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQUEsV0FDMUMsUUFBUTtBQUFBO0FBQUEsTUFHYixXQUFZLEdBQUc7QUFLYixlQUFPLGdCQUFnQixNQUFNLENBQUMsVUFBVTtBQUN0QyxpQkFBTyxJQUFJLFdBQVcsS0FBSyxFQUFFO0FBQUEsV0FDNUIsUUFBUTtBQUFBO0FBQUEsTUFHYixJQUFLLEdBQUc7QUFHTixlQUFPLGdCQUFnQixNQUFNLGlCQUFpQixRQUFRO0FBQUE7QUFBQSxNQUd4RCxJQUFLLEdBQUc7QUFHTixlQUFPLGdCQUFnQixNQUFNLG9CQUFvQixRQUFRO0FBQUE7QUFBQSxXQUdyRCxTQUFTLEdBQUc7QUFDaEIsZUFBTyxXQUFXLE1BQU0sUUFBUTtBQUVoQyx1QkFBZSxLQUFLLE9BQU87QUFFM0IsY0FBTSxjQUFjLEtBQUssUUFBUSxJQUFJLGNBQWM7QUFHbkQsWUFBSSx1QkFBdUIsS0FBSyxXQUFXLEdBQUc7QUFDNUMsZ0JBQU0sVUFBVSxDQUFDO0FBQ2pCLHNCQUFZLEtBQUssVUFBVSxLQUFLO0FBQVMsb0JBQVEsSUFBSSxZQUFZLEtBQUs7QUFFdEUsZ0JBQU0sbUJBQW1CLElBQUk7QUFFN0IsY0FBSTtBQUVKLGNBQUk7QUFDRixxQkFBUyxJQUFJLE9BQU87QUFBQSxjQUNsQjtBQUFBLGNBQ0EsY0FBYztBQUFBLFlBQ2hCLENBQUM7QUFBQSxtQkFDTSxLQUFQO0FBQ0Esa0JBQU0sSUFBSSxjQUFhLEdBQUcsT0FBTyxZQUFZO0FBQUE7QUFHL0MsaUJBQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxVQUFVO0FBQ2xDLDZCQUFpQixPQUFPLE1BQU0sS0FBSztBQUFBLFdBQ3BDO0FBQ0QsaUJBQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxPQUFPLFVBQVUsVUFBVSxhQUFhO0FBQy9ELGtCQUFNLFNBQVMsQ0FBQztBQUVoQixnQkFBSSxhQUFhLFlBQVksU0FBUyxZQUFZLE1BQU0sVUFBVTtBQUNoRSxrQkFBSSxjQUFjO0FBRWxCLG9CQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVU7QUFDMUIsK0JBQWUsTUFBTSxTQUFTLEVBQUUsUUFBUSxZQUFZLEVBQUU7QUFFdEQsc0JBQU0sTUFBTSxZQUFZLFNBQVMsWUFBWSxTQUFTO0FBQ3RELHVCQUFPLEtBQUssT0FBTyxLQUFLLFlBQVksTUFBTSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7QUFFNUQsOEJBQWMsWUFBWSxNQUFNLEdBQUc7QUFBQSxlQUNwQztBQUNELG9CQUFNLEdBQUcsT0FBTyxNQUFNO0FBQ3BCLHVCQUFPLEtBQUssT0FBTyxLQUFLLGFBQWEsUUFBUSxDQUFDO0FBQzlDLGlDQUFpQixPQUFPLE1BQU0sSUFBSSxNQUFLLFFBQVEsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUM7QUFBQSxlQUM3RTtBQUFBLFlBQ0gsT0FBTztBQUNMLG9CQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVU7QUFDMUIsdUJBQU8sS0FBSyxLQUFLO0FBQUEsZUFDbEI7QUFDRCxvQkFBTSxHQUFHLE9BQU8sTUFBTTtBQUNwQixpQ0FBaUIsT0FBTyxNQUFNLElBQUksTUFBSyxRQUFRLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFDO0FBQUEsZUFDN0U7QUFBQTtBQUFBLFdBRUo7QUFFRCxnQkFBTSxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3JELG1CQUFPLEdBQUcsVUFBVSxPQUFPO0FBQzNCLG1CQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsT0FBTyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQSxXQUN2RDtBQUVELGNBQUksS0FBSyxTQUFTO0FBQU0sNkJBQWlCLFNBQVMsWUFBWSxLQUFLLFFBQVEsSUFBSTtBQUFHLHFCQUFPLE1BQU0sS0FBSztBQUNwRyxpQkFBTyxJQUFJO0FBQ1gsZ0JBQU07QUFFTixpQkFBTztBQUFBLFFBQ1QsV0FBVyxxQ0FBcUMsS0FBSyxXQUFXLEdBQUc7QUFJakUsY0FBSTtBQUNKLGNBQUk7QUFDRixnQkFBSSxPQUFPO0FBSVgsa0JBQU0sbUJBQW1CLElBQUksWUFBWSxTQUFTLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFFckUsNkJBQWlCLFNBQVMsWUFBWSxLQUFLLFFBQVEsSUFBSSxHQUFHO0FBQ3hELG1CQUFLLGFBQWEsS0FBSyxHQUFHO0FBQ3hCLHNCQUFNLElBQUksVUFBVSwyQkFBMkI7QUFBQSxjQUNqRDtBQUNBLHNCQUFRLGlCQUFpQixPQUFPLE9BQU8sRUFBRSxRQUFRLEtBQUssQ0FBQztBQUFBLFlBQ3pEO0FBQ0Esb0JBQVEsaUJBQWlCLE9BQU87QUFDaEMsc0JBQVUsSUFBSSxnQkFBZ0IsSUFBSTtBQUFBLG1CQUMzQixLQUFQO0FBR0Esa0JBQU0sT0FBTyxPQUFPLElBQUksV0FBYSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUE7QUFJckQsZ0JBQU0sV0FBVyxJQUFJO0FBQ3JCLHNCQUFZLE1BQU0sVUFBVSxTQUFTO0FBQ25DLHFCQUFTLE9BQU8sTUFBTSxLQUFLO0FBQUEsVUFDN0I7QUFDQSxpQkFBTztBQUFBLFFBQ1QsT0FBTztBQUdMLGdCQUFNLFFBQVEsUUFBUTtBQUV0Qix5QkFBZSxLQUFLLE9BQU87QUFHM0IsZ0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxZQUM1QixRQUFRLEdBQUcsU0FBUztBQUFBLFlBQ3BCLFNBQVM7QUFBQSxVQUNYLENBQUM7QUFBQTtBQUFBO0FBQUEsSUFHUDtBQUVBLFdBQU87QUFBQTtBQUdULFdBQVMsU0FBVSxDQUFDLFdBQVc7QUFDN0IsV0FBTyxPQUFPLFVBQVUsV0FBVyxpQkFBaUIsU0FBUyxDQUFDO0FBQUE7QUFTaEUsaUJBQWUsZUFBZ0IsQ0FBQyxRQUFRLHVCQUF1QixVQUFVO0FBQ3ZFLFdBQU8sV0FBVyxRQUFRLFFBQVE7QUFFbEMsbUJBQWUsT0FBTyxPQUFPO0FBSTdCLFFBQUksYUFBYSxPQUFPLFFBQVEsSUFBSSxHQUFHO0FBQ3JDLFlBQU0sSUFBSSxVQUFVLGtCQUFrQjtBQUFBLElBQ3hDO0FBR0EsVUFBTSxVQUFVLHNCQUFzQjtBQUd0QyxVQUFNLGFBQWEsQ0FBQyxVQUFVLFFBQVEsT0FBTyxLQUFLO0FBTWxELFVBQU0sZUFBZSxDQUFDLFNBQVM7QUFDN0IsVUFBSTtBQUNGLGdCQUFRLFFBQVEsc0JBQXNCLElBQUksQ0FBQztBQUFBLGVBQ3BDLEdBQVA7QUFDQSxtQkFBVyxDQUFDO0FBQUE7QUFBQTtBQU1oQixRQUFJLE9BQU8sUUFBUSxRQUFRLE1BQU07QUFDL0IsbUJBQWEsSUFBSSxVQUFZO0FBQzdCLGFBQU8sUUFBUTtBQUFBLElBQ2pCO0FBSUEsVUFBTSxjQUFjLE9BQU8sUUFBUSxNQUFNLGNBQWMsVUFBVTtBQUdqRSxXQUFPLFFBQVE7QUFBQTtBQUlqQixXQUFTLFlBQWEsQ0FBQyxNQUFNO0FBSTNCLFdBQU8sUUFBUSxTQUFTLEtBQUssT0FBTyxVQUFVLEtBQUssWUFBWSxLQUFLLE1BQU07QUFBQTtBQU81RSxXQUFTLGVBQWdCLENBQUMsUUFBUTtBQUNoQyxRQUFJLE9BQU8sV0FBVyxHQUFHO0FBQ3ZCLGFBQU87QUFBQSxJQUNUO0FBT0EsUUFBSSxPQUFPLE9BQU8sT0FBUSxPQUFPLE9BQU8sT0FBUSxPQUFPLE9BQU8sS0FBTTtBQUNsRSxlQUFTLE9BQU8sU0FBUyxDQUFDO0FBQUEsSUFDNUI7QUFJQSxVQUFNLFNBQVMsWUFBWSxPQUFPLE1BQU07QUFHeEMsV0FBTztBQUFBO0FBT1QsV0FBUyxrQkFBbUIsQ0FBQyxPQUFPO0FBQ2xDLFdBQU8sS0FBSyxNQUFNLGdCQUFnQixLQUFLLENBQUM7QUFBQTtBQU8xQyxXQUFTLFlBQWEsQ0FBQyxRQUFRO0FBQzdCLFlBQVEsZ0JBQWdCLE9BQU87QUFDL0IsVUFBTSxjQUFjLFlBQVksSUFBSSxjQUFjO0FBRWxELFFBQUksZ0JBQWdCLE1BQU07QUFDeEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPLGNBQWMsV0FBVztBQUFBO0FBR2xDLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7Ozs7QUMxbEJBO0FBQUEsSUFDRTtBQUFBLElBQ0E7QUFBQTtBQUVGLE1BQU07QUFDTixRQUFRLG9CQUFvQixtQkFBbUI7QUFDL0MsTUFBTTtBQVVOLE1BQU0sY0FBYztBQVFwQixNQUFNLGtCQUFrQjtBQUd4QixNQUFNLG1CQUFtQjtBQUV6QixNQUFNLFdBQVcsT0FBTyxTQUFTO0FBRWpDLE1BQU0sV0FBVyxDQUFDO0FBRWxCLE1BQUk7QUFFSixNQUFJO0FBQ0YsVUFBTTtBQUNOLGFBQVMsU0FBUyxtQkFBbUIsUUFBUSx1QkFBdUI7QUFDcEUsYUFBUyxXQUFXLG1CQUFtQixRQUFRLHlCQUF5QjtBQUN4RSxhQUFTLFVBQVUsbUJBQW1CLFFBQVEsd0JBQXdCO0FBQ3RFLGFBQVMsV0FBVyxtQkFBbUIsUUFBUSx5QkFBeUI7QUFDeEUsYUFBUyxRQUFRLG1CQUFtQixRQUFRLHNCQUFzQjtBQUFBLFVBQ2xFO0FBQ0EsYUFBUyxTQUFTLEVBQUUsZ0JBQWdCLE1BQU07QUFDMUMsYUFBUyxXQUFXLEVBQUUsZ0JBQWdCLE1BQU07QUFDNUMsYUFBUyxVQUFVLEVBQUUsZ0JBQWdCLE1BQU07QUFDM0MsYUFBUyxXQUFXLEVBQUUsZ0JBQWdCLE1BQU07QUFDNUMsYUFBUyxRQUFRLEVBQUUsZ0JBQWdCLE1BQU07QUFBQTtBQUczQztBQUFBLFFBQU0sUUFBUTtBQUFBLElBQ1osV0FBWSxDQUFDO0FBQUEsTUFDWDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE9BQ0MsU0FBUztBQUNWLGlCQUFXLFNBQVMsVUFBVTtBQUM1QixjQUFNLElBQUkscUJBQXFCLHVCQUF1QjtBQUFBLE1BQ3hELFdBQ0UsS0FBSyxPQUFPLFNBQ1YsS0FBSyxXQUFXLFNBQVMsS0FBSyxLQUFLLFdBQVcsVUFBVSxNQUMxRCxXQUFXLFdBQ1g7QUFDQSxjQUFNLElBQUkscUJBQXFCLG9EQUFvRDtBQUFBLE1BQ3JGLFdBQVcsaUJBQWlCLEtBQUssSUFBSSxNQUFNLE1BQU07QUFDL0MsY0FBTSxJQUFJLHFCQUFxQixzQkFBc0I7QUFBQSxNQUN2RDtBQUVBLGlCQUFXLFdBQVcsVUFBVTtBQUM5QixjQUFNLElBQUkscUJBQXFCLHlCQUF5QjtBQUFBLE1BQzFELFdBQVcsWUFBWSxLQUFLLE1BQU0sTUFBTSxNQUFNO0FBQzVDLGNBQU0sSUFBSSxxQkFBcUIsd0JBQXdCO0FBQUEsTUFDekQ7QUFFQSxVQUFJLGtCQUFrQixZQUFZLFVBQVU7QUFDMUMsY0FBTSxJQUFJLHFCQUFxQiwwQkFBMEI7QUFBQSxNQUMzRDtBQUVBLFVBQUksa0JBQWtCLFVBQVUsT0FBTyxTQUFTLGNBQWMsS0FBSyxpQkFBaUIsSUFBSTtBQUN0RixjQUFNLElBQUkscUJBQXFCLHdCQUF3QjtBQUFBLE1BQ3pEO0FBRUEsVUFBSSxlQUFlLFVBQVUsT0FBTyxTQUFTLFdBQVcsS0FBSyxjQUFjLElBQUk7QUFDN0UsY0FBTSxJQUFJLHFCQUFxQixxQkFBcUI7QUFBQSxNQUN0RDtBQUVBLFVBQUksU0FBUyxlQUFlLFVBQVUsV0FBVztBQUMvQyxjQUFNLElBQUkscUJBQXFCLGVBQWU7QUFBQSxNQUNoRDtBQUVBLFVBQUksa0JBQWtCLGVBQWUsbUJBQW1CLFdBQVc7QUFDakUsY0FBTSxJQUFJLHFCQUFxQix3QkFBd0I7QUFBQSxNQUN6RDtBQUVBLFdBQUssaUJBQWlCO0FBRXRCLFdBQUssY0FBYztBQUVuQixXQUFLLGVBQWUsaUJBQWlCO0FBRXJDLFdBQUssU0FBUztBQUVkLFdBQUssUUFBUTtBQUViLFVBQUksUUFBUSxNQUFNO0FBQ2hCLGFBQUssT0FBTztBQUFBLE1BQ2QsV0FBVyxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQzlCLGFBQUssT0FBTztBQUVaLGNBQU0sU0FBUyxLQUFLLEtBQUs7QUFDekIsYUFBSyxXQUFXLE9BQU8sYUFBYTtBQUNsQyxlQUFLLHNCQUFzQixXQUFZLEdBQUc7QUFDeEMsaUJBQUssUUFBUSxJQUFJO0FBQUE7QUFFbkIsZUFBSyxLQUFLLEdBQUcsT0FBTyxLQUFLLFVBQVU7QUFBQSxRQUNyQztBQUVBLGFBQUssZUFBZSxTQUFPO0FBQ3pCLGNBQUksS0FBSyxPQUFPO0FBQ2QsaUJBQUssTUFBTSxHQUFHO0FBQUEsVUFDaEIsT0FBTztBQUNMLGlCQUFLLFFBQVE7QUFBQTtBQUFBO0FBR2pCLGFBQUssS0FBSyxHQUFHLFNBQVMsS0FBSyxZQUFZO0FBQUEsTUFDekMsV0FBVyxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQzlCLGFBQUssT0FBTyxLQUFLLGFBQWEsT0FBTztBQUFBLE1BQ3ZDLFdBQVcsWUFBWSxPQUFPLElBQUksR0FBRztBQUNuQyxhQUFLLE9BQU8sS0FBSyxPQUFPLGFBQWEsT0FBTyxLQUFLLEtBQUssUUFBUSxLQUFLLFlBQVksS0FBSyxVQUFVLElBQUk7QUFBQSxNQUNwRyxXQUFXLGdCQUFnQixhQUFhO0FBQ3RDLGFBQUssT0FBTyxLQUFLLGFBQWEsT0FBTyxLQUFLLElBQUksSUFBSTtBQUFBLE1BQ3BELGtCQUFrQixTQUFTLFVBQVU7QUFDbkMsYUFBSyxPQUFPLEtBQUssU0FBUyxPQUFPLEtBQUssSUFBSSxJQUFJO0FBQUEsTUFDaEQsV0FBVyxLQUFLLGVBQWUsSUFBSSxLQUFLLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxXQUFXLElBQUksR0FBRztBQUN0RixhQUFLLE9BQU87QUFBQSxNQUNkLE9BQU87QUFDTCxjQUFNLElBQUkscUJBQXFCLHVGQUF1RjtBQUFBO0FBR3hILFdBQUssWUFBWTtBQUVqQixXQUFLLFVBQVU7QUFFZixXQUFLLFVBQVUsV0FBVztBQUUxQixXQUFLLE9BQU8sUUFBUSxLQUFLLFNBQVMsTUFBTSxLQUFLLElBQUk7QUFFakQsV0FBSyxTQUFTO0FBRWQsV0FBSyxhQUFhLGNBQWMsT0FDNUIsV0FBVyxVQUFVLFdBQVcsUUFDaEM7QUFFSixXQUFLLFdBQVcsWUFBWSxPQUFPLFFBQVE7QUFFM0MsV0FBSyxRQUFRLFNBQVMsT0FBTyxPQUFPO0FBRXBDLFdBQUssT0FBTztBQUVaLFdBQUssZ0JBQWdCO0FBRXJCLFdBQUssY0FBYztBQUVuQixXQUFLLFVBQVU7QUFHZixXQUFLLGlCQUFpQixrQkFBa0IsT0FBTyxpQkFBaUI7QUFFaEUsVUFBSSxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBQzFCLFlBQUksUUFBUSxTQUFTLE1BQU0sR0FBRztBQUM1QixnQkFBTSxJQUFJLHFCQUFxQiw0QkFBNEI7QUFBQSxRQUM3RDtBQUNBLGlCQUFTLElBQUksRUFBRyxJQUFJLFFBQVEsUUFBUSxLQUFLLEdBQUc7QUFDMUMsd0JBQWMsTUFBTSxRQUFRLElBQUksUUFBUSxJQUFJLEVBQUU7QUFBQSxRQUNoRDtBQUFBLE1BQ0YsV0FBVyxrQkFBa0IsWUFBWSxVQUFVO0FBQ2pELGNBQU0sT0FBTyxPQUFPLEtBQUssT0FBTztBQUNoQyxpQkFBUyxJQUFJLEVBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztBQUNwQyxnQkFBTSxNQUFNLEtBQUs7QUFDakIsd0JBQWMsTUFBTSxLQUFLLFFBQVEsSUFBSTtBQUFBLFFBQ3ZDO0FBQUEsTUFDRixXQUFXLFdBQVcsTUFBTTtBQUMxQixjQUFNLElBQUkscUJBQXFCLHVDQUF1QztBQUFBLE1BQ3hFO0FBRUEsVUFBSSxLQUFLLGVBQWUsS0FBSyxJQUFJLEdBQUc7QUFDbEMsWUFBSSxLQUFLLFlBQVksTUFBTyxLQUFLLGNBQWMsTUFBTSxLQUFLLFlBQVksR0FBSTtBQUN4RSxnQkFBTSxJQUFJLHFCQUFxQiw4REFBOEQ7QUFBQSxRQUMvRjtBQUVBLGFBQUssYUFBYTtBQUNoQix1Q0FBMEM7QUFBQSxRQUM1QztBQUVBLGVBQU8sWUFBWSxlQUFlLFlBQVksSUFBSTtBQUNsRCxZQUFJLEtBQUssZUFBZSxNQUFNO0FBQzVCLGVBQUssY0FBYztBQUNuQixlQUFLLFdBQVcsaUJBQWlCO0FBQUEsUUFDbkM7QUFDQSxhQUFLLE9BQU8sV0FBVztBQUN2QixhQUFLLGdCQUFnQixXQUFXO0FBQUEsTUFDbEMsV0FBVyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssZUFBZSxRQUFRLEtBQUssTUFBTTtBQUN6RSxhQUFLLGNBQWMsS0FBSztBQUN4QixhQUFLLFdBQVcsaUJBQWlCLEtBQUs7QUFBQSxNQUN4QztBQUVBLFdBQUssZ0JBQWdCLFNBQVMsUUFBUSxPQUFPO0FBRTdDLFdBQUssYUFBYSxLQUFLLGNBQWMsS0FBSyxJQUFJO0FBRTlDLFdBQUssWUFBWTtBQUVqQixVQUFJLFNBQVMsT0FBTyxnQkFBZ0I7QUFDbEMsaUJBQVMsT0FBTyxRQUFRLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFBQSxNQUMzQztBQUFBO0FBQUEsSUFHRixVQUFXLENBQUMsT0FBTztBQUNqQixVQUFJLEtBQUssVUFBVSxZQUFZO0FBQzdCLFlBQUk7QUFDRixpQkFBTyxLQUFLLFVBQVUsV0FBVyxLQUFLO0FBQUEsaUJBQy9CLEtBQVA7QUFDQSxlQUFLLE1BQU0sR0FBRztBQUFBO0FBQUEsTUFFbEI7QUFBQTtBQUFBLElBR0YsYUFBYyxHQUFHO0FBQ2YsVUFBSSxTQUFTLFNBQVMsZ0JBQWdCO0FBQ3BDLGlCQUFTLFNBQVMsUUFBUSxFQUFFLFNBQVMsS0FBSyxDQUFDO0FBQUEsTUFDN0M7QUFFQSxVQUFJLEtBQUssVUFBVSxlQUFlO0FBQ2hDLFlBQUk7QUFDRixpQkFBTyxLQUFLLFVBQVUsY0FBYztBQUFBLGlCQUM3QixLQUFQO0FBQ0EsZUFBSyxNQUFNLEdBQUc7QUFBQTtBQUFBLE1BRWxCO0FBQUE7QUFBQSxJQUdGLFNBQVUsQ0FBQyxPQUFPO0FBQ2hCLGNBQVEsS0FBSyxPQUFPO0FBQ3BCLGNBQVEsS0FBSyxTQUFTO0FBRXRCLFVBQUksS0FBSyxPQUFPO0FBQ2QsY0FBTSxLQUFLLEtBQUs7QUFBQSxNQUNsQixPQUFPO0FBQ0wsYUFBSyxRQUFRO0FBQ2IsZUFBTyxLQUFLLFVBQVUsVUFBVSxLQUFLO0FBQUE7QUFBQTtBQUFBLElBSXpDLFNBQVUsQ0FBQyxZQUFZLFNBQVMsUUFBUSxZQUFZO0FBQ2xELGNBQVEsS0FBSyxPQUFPO0FBQ3BCLGNBQVEsS0FBSyxTQUFTO0FBRXRCLFVBQUksU0FBUyxRQUFRLGdCQUFnQjtBQUNuQyxpQkFBUyxRQUFRLFFBQVEsRUFBRSxTQUFTLE1BQU0sVUFBVSxFQUFFLFlBQVksU0FBUyxXQUFXLEVBQUUsQ0FBQztBQUFBLE1BQzNGO0FBRUEsVUFBSTtBQUNGLGVBQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxTQUFTLFFBQVEsVUFBVTtBQUFBLGVBQ2hFLEtBQVA7QUFDQSxhQUFLLE1BQU0sR0FBRztBQUFBO0FBQUE7QUFBQSxJQUlsQixNQUFPLENBQUMsT0FBTztBQUNiLGNBQVEsS0FBSyxPQUFPO0FBQ3BCLGNBQVEsS0FBSyxTQUFTO0FBRXRCLFVBQUk7QUFDRixlQUFPLEtBQUssVUFBVSxPQUFPLEtBQUs7QUFBQSxlQUMzQixLQUFQO0FBQ0EsYUFBSyxNQUFNLEdBQUc7QUFDZCxlQUFPO0FBQUE7QUFBQTtBQUFBLElBSVgsU0FBVSxDQUFDLFlBQVksU0FBUyxRQUFRO0FBQ3RDLGNBQVEsS0FBSyxPQUFPO0FBQ3BCLGNBQVEsS0FBSyxTQUFTO0FBRXRCLGFBQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxTQUFTLE1BQU07QUFBQTtBQUFBLElBRzdELFVBQVcsQ0FBQyxVQUFVO0FBQ3BCLFdBQUssVUFBVTtBQUVmLGNBQVEsS0FBSyxPQUFPO0FBRXBCLFdBQUssWUFBWTtBQUNqQixVQUFJLFNBQVMsU0FBUyxnQkFBZ0I7QUFDcEMsaUJBQVMsU0FBUyxRQUFRLEVBQUUsU0FBUyxNQUFNLFNBQVMsQ0FBQztBQUFBLE1BQ3ZEO0FBRUEsVUFBSTtBQUNGLGVBQU8sS0FBSyxVQUFVLFdBQVcsUUFBUTtBQUFBLGVBQ2xDLEtBQVA7QUFFQSxhQUFLLFFBQVEsR0FBRztBQUFBO0FBQUE7QUFBQSxJQUlwQixPQUFRLENBQUMsT0FBTztBQUNkLFdBQUssVUFBVTtBQUVmLFVBQUksU0FBUyxNQUFNLGdCQUFnQjtBQUNqQyxpQkFBUyxNQUFNLFFBQVEsRUFBRSxTQUFTLE1BQU0sTUFBTSxDQUFDO0FBQUEsTUFDakQ7QUFFQSxVQUFJLEtBQUssU0FBUztBQUNoQjtBQUFBLE1BQ0Y7QUFDQSxXQUFLLFVBQVU7QUFFZixhQUFPLEtBQUssVUFBVSxRQUFRLEtBQUs7QUFBQTtBQUFBLElBR3JDLFNBQVUsR0FBRztBQUNYLFVBQUksS0FBSyxjQUFjO0FBQ3JCLGFBQUssS0FBSyxJQUFJLFNBQVMsS0FBSyxZQUFZO0FBQ3hDLGFBQUssZUFBZTtBQUFBLE1BQ3RCO0FBRUEsVUFBSSxLQUFLLFlBQVk7QUFDbkIsYUFBSyxLQUFLLElBQUksT0FBTyxLQUFLLFVBQVU7QUFDcEMsYUFBSyxhQUFhO0FBQUEsTUFDcEI7QUFBQTtBQUFBLElBSUYsU0FBVSxDQUFDLEtBQUssT0FBTztBQUNyQixvQkFBYyxNQUFNLEtBQUssS0FBSztBQUM5QixhQUFPO0FBQUE7QUFBQSxZQUdELG1CQUFvQixDQUFDLFFBQVEsTUFBTSxTQUFTO0FBR2xELGFBQU8sSUFBSSxRQUFRLFFBQVEsTUFBTSxPQUFPO0FBQUE7QUFBQSxZQUdsQyxtQkFBb0IsQ0FBQyxRQUFRLE1BQU0sU0FBUztBQUNsRCxZQUFNLFVBQVUsS0FBSztBQUNyQixhQUFPLEtBQUssTUFBTSxTQUFTLEtBQUs7QUFFaEMsWUFBTSxVQUFVLElBQUksUUFBUSxRQUFRLE1BQU0sT0FBTztBQUVqRCxjQUFRLFVBQVUsQ0FBQztBQUVuQixVQUFJLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDMUIsWUFBSSxRQUFRLFNBQVMsTUFBTSxHQUFHO0FBQzVCLGdCQUFNLElBQUkscUJBQXFCLDRCQUE0QjtBQUFBLFFBQzdEO0FBQ0EsaUJBQVMsSUFBSSxFQUFHLElBQUksUUFBUSxRQUFRLEtBQUssR0FBRztBQUMxQyx3QkFBYyxTQUFTLFFBQVEsSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJO0FBQUEsUUFDekQ7QUFBQSxNQUNGLFdBQVcsa0JBQWtCLFlBQVksVUFBVTtBQUNqRCxjQUFNLE9BQU8sT0FBTyxLQUFLLE9BQU87QUFDaEMsaUJBQVMsSUFBSSxFQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDcEMsZ0JBQU0sTUFBTSxLQUFLO0FBQ2pCLHdCQUFjLFNBQVMsS0FBSyxRQUFRLE1BQU0sSUFBSTtBQUFBLFFBQ2hEO0FBQUEsTUFDRixXQUFXLFdBQVcsTUFBTTtBQUMxQixjQUFNLElBQUkscUJBQXFCLHVDQUF1QztBQUFBLE1BQ3hFO0FBRUEsYUFBTztBQUFBO0FBQUEsWUFHRCxrQkFBbUIsQ0FBQyxLQUFLO0FBQy9CLFlBQU0sYUFBYSxJQUFJLE1BQU0sTUFBTTtBQUNuQyxZQUFNLFVBQVUsQ0FBQztBQUVqQixpQkFBVyxVQUFVLFlBQVk7QUFDL0IsZUFBTyxLQUFLLFNBQVMsT0FBTyxNQUFNLElBQUk7QUFFdEMsWUFBSSxTQUFTLFFBQVEsTUFBTSxXQUFXO0FBQUc7QUFFekMsWUFBSSxRQUFRO0FBQU0sa0JBQVEsUUFBUSxJQUFJO0FBQUE7QUFDakMsa0JBQVEsT0FBTztBQUFBLE1BQ3RCO0FBRUEsYUFBTztBQUFBO0FBQUEsRUFFWDtBQUVBLFdBQVMsa0JBQW1CLENBQUMsS0FBSyxNQUFLLFlBQVk7QUFDakQsUUFBSSxlQUFjLFNBQVEsVUFBVTtBQUNsQyxZQUFNLElBQUkscUJBQXFCLFdBQVcsWUFBWTtBQUFBLElBQ3hEO0FBRUEsV0FBTSxRQUFPLE9BQU8sR0FBRyxTQUFRO0FBRS9CLFFBQUksZ0JBQWdCLEtBQUssSUFBRyxNQUFNLE1BQU07QUFDdEMsWUFBTSxJQUFJLHFCQUFxQixXQUFXLFlBQVk7QUFBQSxJQUN4RDtBQUVBLFdBQU8sYUFBYSxPQUFNLEdBQUcsUUFBUTtBQUFBO0FBR3ZDLFdBQVMsYUFBYyxDQUFDLFNBQVMsS0FBSyxNQUFLLGFBQWEsT0FBTztBQUM3RCxRQUFJLGdCQUFlLFNBQVEsYUFBYSxNQUFNLFFBQVEsSUFBRyxJQUFJO0FBQzNELFlBQU0sSUFBSSxxQkFBcUIsV0FBVyxZQUFZO0FBQUEsSUFDeEQsV0FBVyxTQUFRLFdBQVc7QUFDNUI7QUFBQSxJQUNGO0FBRUEsUUFDRSxRQUFRLFNBQVMsUUFDakIsSUFBSSxXQUFXLEtBQ2YsSUFBSSxZQUFZLE1BQU0sUUFDdEI7QUFDQSxVQUFJLGdCQUFnQixLQUFLLElBQUcsTUFBTSxNQUFNO0FBQ3RDLGNBQU0sSUFBSSxxQkFBcUIsV0FBVyxZQUFZO0FBQUEsTUFDeEQ7QUFFQSxjQUFRLE9BQU87QUFBQSxJQUNqQixXQUNFLFFBQVEsa0JBQWtCLFFBQzFCLElBQUksV0FBVyxNQUNmLElBQUksWUFBWSxNQUFNLGtCQUN0QjtBQUNBLGNBQVEsZ0JBQWdCLFNBQVMsTUFBSyxFQUFFO0FBQ3hDLFdBQUssT0FBTyxTQUFTLFFBQVEsYUFBYSxHQUFHO0FBQzNDLGNBQU0sSUFBSSxxQkFBcUIsK0JBQStCO0FBQUEsTUFDaEU7QUFBQSxJQUNGLFdBQ0UsUUFBUSxnQkFBZ0IsUUFDeEIsSUFBSSxXQUFXLE1BQ2YsSUFBSSxZQUFZLE1BQU0sZ0JBQ3RCO0FBQ0EsY0FBUSxjQUFjO0FBQ3RCLFVBQUk7QUFBWSxnQkFBUSxRQUFRLE9BQU8sbUJBQW1CLEtBQUssTUFBSyxVQUFVO0FBQUE7QUFDekUsZ0JBQVEsV0FBVyxtQkFBbUIsS0FBSyxJQUFHO0FBQUEsSUFDckQsV0FDRSxJQUFJLFdBQVcsTUFDZixJQUFJLFlBQVksTUFBTSxxQkFDdEI7QUFDQSxZQUFNLElBQUkscUJBQXFCLGtDQUFrQztBQUFBLElBQ25FLFdBQ0UsSUFBSSxXQUFXLE1BQ2YsSUFBSSxZQUFZLE1BQU0sY0FDdEI7QUFDQSxZQUFNLGVBQWUsU0FBUSxXQUFXLEtBQUksWUFBWSxJQUFJO0FBQzVELFVBQUksVUFBVSxXQUFXLFVBQVUsY0FBYztBQUMvQyxjQUFNLElBQUkscUJBQXFCLDJCQUEyQjtBQUFBLE1BQzVELFdBQVcsVUFBVSxTQUFTO0FBQzVCLGdCQUFRLFFBQVE7QUFBQSxNQUNsQjtBQUFBLElBQ0YsV0FDRSxJQUFJLFdBQVcsTUFDZixJQUFJLFlBQVksTUFBTSxjQUN0QjtBQUNBLFlBQU0sSUFBSSxxQkFBcUIsMkJBQTJCO0FBQUEsSUFDNUQsV0FDRSxJQUFJLFdBQVcsS0FDZixJQUFJLFlBQVksTUFBTSxXQUN0QjtBQUNBLFlBQU0sSUFBSSxxQkFBcUIsd0JBQXdCO0FBQUEsSUFDekQsV0FDRSxJQUFJLFdBQVcsS0FDZixJQUFJLFlBQVksTUFBTSxVQUN0QjtBQUNBLFlBQU0sSUFBSSxrQkFBa0IsNkJBQTZCO0FBQUEsSUFDM0QsV0FBVyxZQUFZLEtBQUssR0FBRyxNQUFNLE1BQU07QUFDekMsWUFBTSxJQUFJLHFCQUFxQixvQkFBb0I7QUFBQSxJQUNyRCxPQUFPO0FBQ0wsVUFBSSxNQUFNLFFBQVEsSUFBRyxHQUFHO0FBQ3RCLGlCQUFTLElBQUksRUFBRyxJQUFJLEtBQUksUUFBUSxLQUFLO0FBQ25DLGNBQUksWUFBWTtBQUNkLGdCQUFJLFFBQVEsUUFBUTtBQUFNLHNCQUFRLFFBQVEsUUFBUSxJQUFJLG1CQUFtQixLQUFLLEtBQUksSUFBSSxVQUFVO0FBQUE7QUFDM0Ysc0JBQVEsUUFBUSxPQUFPLG1CQUFtQixLQUFLLEtBQUksSUFBSSxVQUFVO0FBQUEsVUFDeEUsT0FBTztBQUNMLG9CQUFRLFdBQVcsbUJBQW1CLEtBQUssS0FBSSxFQUFFO0FBQUE7QUFBQSxRQUVyRDtBQUFBLE1BQ0YsT0FBTztBQUNMLFlBQUk7QUFBWSxrQkFBUSxRQUFRLE9BQU8sbUJBQW1CLEtBQUssTUFBSyxVQUFVO0FBQUE7QUFDekUsa0JBQVEsV0FBVyxtQkFBbUIsS0FBSyxJQUFHO0FBQUE7QUFBQTtBQUFBO0FBS3pELFNBQU8sVUFBVTtBQUFBOzs7O0FDaGZqQixNQUFNO0FBRU47QUFBQSxRQUFNLG1CQUFtQixhQUFhO0FBQUEsSUFDcEMsUUFBUyxHQUFHO0FBQ1YsWUFBTSxJQUFJLE1BQU0saUJBQWlCO0FBQUE7QUFBQSxJQUduQyxLQUFNLEdBQUc7QUFDUCxZQUFNLElBQUksTUFBTSxpQkFBaUI7QUFBQTtBQUFBLElBR25DLE9BQVEsR0FBRztBQUNULFlBQU0sSUFBSSxNQUFNLGlCQUFpQjtBQUFBO0FBQUEsRUFFckM7QUFFQSxTQUFPLFVBQVU7QUFBQTs7OztBQ2hCakIsTUFBTTtBQUNOO0FBQUEsSUFDRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUE7QUFFRixRQUFRLFVBQVUsUUFBUSxXQUFXO0FBRXJDLE1BQU0sYUFBYSxPQUFPLFdBQVc7QUFDckMsTUFBTSxVQUFVLE9BQU8sUUFBUTtBQUMvQixNQUFNLGVBQWUsT0FBTyxhQUFhO0FBQ3pDLE1BQU0sWUFBWSxPQUFPLFVBQVU7QUFDbkMsTUFBTSx1QkFBdUIsT0FBTyxzQkFBc0I7QUFFMUQ7QUFBQSxRQUFNLHVCQUF1QixXQUFXO0FBQUEsSUFDdEMsV0FBWSxHQUFHO0FBQ2IsWUFBTTtBQUVOLFdBQUssY0FBYztBQUNuQixXQUFLLGdCQUFnQjtBQUNyQixXQUFLLFdBQVc7QUFDaEIsV0FBSyxhQUFhLENBQUM7QUFBQTtBQUFBLFFBR2pCLFNBQVUsR0FBRztBQUNmLGFBQU8sS0FBSztBQUFBO0FBQUEsUUFHVixNQUFPLEdBQUc7QUFDWixhQUFPLEtBQUs7QUFBQTtBQUFBLFFBR1YsWUFBYSxHQUFHO0FBQ2xCLGFBQU8sS0FBSztBQUFBO0FBQUEsUUFHVixZQUFhLENBQUMsaUJBQWlCO0FBQ2pDLFVBQUksaUJBQWlCO0FBQ25CLGlCQUFTLElBQUksZ0JBQWdCLFNBQVMsRUFBRyxLQUFLLEdBQUcsS0FBSztBQUNwRCxnQkFBTSxjQUFjLEtBQUssZUFBZTtBQUN4QyxxQkFBVyxnQkFBZ0IsWUFBWTtBQUNyQyxrQkFBTSxJQUFJLHFCQUFxQixpQ0FBaUM7QUFBQSxVQUNsRTtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsV0FBSyxpQkFBaUI7QUFBQTtBQUFBLElBR3hCLEtBQU0sQ0FBQyxVQUFVO0FBQ2YsVUFBSSxhQUFhLFdBQVc7QUFDMUIsZUFBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsZUFBSyxNQUFNLENBQUMsS0FBSyxTQUFTO0FBQ3hCLG1CQUFPLE1BQU0sT0FBTyxHQUFHLElBQUksUUFBUSxJQUFJO0FBQUEsV0FDeEM7QUFBQSxTQUNGO0FBQUEsTUFDSDtBQUVBLGlCQUFXLGFBQWEsWUFBWTtBQUNsQyxjQUFNLElBQUkscUJBQXFCLGtCQUFrQjtBQUFBLE1BQ25EO0FBRUEsVUFBSSxLQUFLLGFBQWE7QUFDcEIsdUJBQWUsTUFBTSxTQUFTLElBQUksc0JBQXdCLElBQUksQ0FBQztBQUMvRDtBQUFBLE1BQ0Y7QUFFQSxVQUFJLEtBQUssVUFBVTtBQUNqQixZQUFJLEtBQUssWUFBWTtBQUNuQixlQUFLLFdBQVcsS0FBSyxRQUFRO0FBQUEsUUFDL0IsT0FBTztBQUNMLHlCQUFlLE1BQU0sU0FBUyxNQUFNLElBQUksQ0FBQztBQUFBO0FBRTNDO0FBQUEsTUFDRjtBQUVBLFdBQUssV0FBVztBQUNoQixXQUFLLFdBQVcsS0FBSyxRQUFRO0FBRTdCLFlBQU0sV0FBVyxNQUFNO0FBQ3JCLGNBQU0sWUFBWSxLQUFLO0FBQ3ZCLGFBQUssYUFBYTtBQUNsQixpQkFBUyxJQUFJLEVBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUN6QyxvQkFBVSxHQUFHLE1BQU0sSUFBSTtBQUFBLFFBQ3pCO0FBQUE7QUFJRixXQUFLLFFBQVEsRUFDVixLQUFLLE1BQU0sS0FBSyxRQUFRLENBQUMsRUFDekIsS0FBSyxNQUFNO0FBQ1YsdUJBQWUsUUFBUTtBQUFBLE9BQ3hCO0FBQUE7QUFBQSxJQUdMLE9BQVEsQ0FBQyxLQUFLLFVBQVU7QUFDdEIsaUJBQVcsUUFBUSxZQUFZO0FBQzdCLG1CQUFXO0FBQ1gsY0FBTTtBQUFBLE1BQ1I7QUFFQSxVQUFJLGFBQWEsV0FBVztBQUMxQixlQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN0QyxlQUFLLFFBQVEsS0FBSyxDQUFDLE1BQUssU0FBUztBQUMvQixtQkFBTyxPQUFxRCxPQUFPLElBQUcsSUFBSSxRQUFRLElBQUk7QUFBQSxXQUN2RjtBQUFBLFNBQ0Y7QUFBQSxNQUNIO0FBRUEsaUJBQVcsYUFBYSxZQUFZO0FBQ2xDLGNBQU0sSUFBSSxxQkFBcUIsa0JBQWtCO0FBQUEsTUFDbkQ7QUFFQSxVQUFJLEtBQUssYUFBYTtBQUNwQixZQUFJLEtBQUssZUFBZTtBQUN0QixlQUFLLGNBQWMsS0FBSyxRQUFRO0FBQUEsUUFDbEMsT0FBTztBQUNMLHlCQUFlLE1BQU0sU0FBUyxNQUFNLElBQUksQ0FBQztBQUFBO0FBRTNDO0FBQUEsTUFDRjtBQUVBLFdBQUssS0FBSztBQUNSLGNBQU0sSUFBSTtBQUFBLE1BQ1o7QUFFQSxXQUFLLGNBQWM7QUFDbkIsV0FBSyxnQkFBZ0IsS0FBSyxpQkFBaUIsQ0FBQztBQUM1QyxXQUFLLGNBQWMsS0FBSyxRQUFRO0FBRWhDLFlBQU0sY0FBYyxNQUFNO0FBQ3hCLGNBQU0sWUFBWSxLQUFLO0FBQ3ZCLGFBQUssZ0JBQWdCO0FBQ3JCLGlCQUFTLElBQUksRUFBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3pDLG9CQUFVLEdBQUcsTUFBTSxJQUFJO0FBQUEsUUFDekI7QUFBQTtBQUlGLFdBQUssVUFBVSxHQUFHLEVBQUUsS0FBSyxNQUFNO0FBQzdCLHVCQUFlLFdBQVc7QUFBQSxPQUMzQjtBQUFBO0FBQUEsS0FHRixxQkFBc0IsQ0FBQyxNQUFNLFNBQVM7QUFDckMsV0FBSyxLQUFLLGtCQUFrQixLQUFLLGVBQWUsV0FBVyxHQUFHO0FBQzVELGFBQUssd0JBQXdCLEtBQUs7QUFDbEMsZUFBTyxLQUFLLFdBQVcsTUFBTSxPQUFPO0FBQUEsTUFDdEM7QUFFQSxVQUFJLFdBQVcsS0FBSyxXQUFXLEtBQUssSUFBSTtBQUN4QyxlQUFTLElBQUksS0FBSyxlQUFlLFNBQVMsRUFBRyxLQUFLLEdBQUcsS0FBSztBQUN4RCxtQkFBVyxLQUFLLGVBQWUsR0FBRyxRQUFRO0FBQUEsTUFDNUM7QUFDQSxXQUFLLHdCQUF3QjtBQUM3QixhQUFPLFNBQVMsTUFBTSxPQUFPO0FBQUE7QUFBQSxJQUcvQixRQUFTLENBQUMsTUFBTSxTQUFTO0FBQ3ZCLFdBQUssa0JBQWtCLFlBQVksVUFBVTtBQUMzQyxjQUFNLElBQUkscUJBQXFCLDJCQUEyQjtBQUFBLE1BQzVEO0FBRUEsVUFBSTtBQUNGLGFBQUssZUFBZSxTQUFTLFVBQVU7QUFDckMsZ0JBQU0sSUFBSSxxQkFBcUIseUJBQXlCO0FBQUEsUUFDMUQ7QUFFQSxZQUFJLEtBQUssZUFBZSxLQUFLLGVBQWU7QUFDMUMsZ0JBQU0sSUFBSTtBQUFBLFFBQ1o7QUFFQSxZQUFJLEtBQUssVUFBVTtBQUNqQixnQkFBTSxJQUFJO0FBQUEsUUFDWjtBQUVBLGVBQU8sS0FBSyxzQkFBc0IsTUFBTSxPQUFPO0FBQUEsZUFDeEMsS0FBUDtBQUNBLG1CQUFXLFFBQVEsWUFBWSxZQUFZO0FBQ3pDLGdCQUFNLElBQUkscUJBQXFCLHdCQUF3QjtBQUFBLFFBQ3pEO0FBRUEsZ0JBQVEsUUFBUSxHQUFHO0FBRW5CLGVBQU87QUFBQTtBQUFBO0FBQUEsRUFHYjtBQUVBLFNBQU8sVUFBVTtBQUFBOzs7O0FDN0xqQixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFDTixRQUFRLHNCQUFzQjtBQUU5QixNQUFJO0FBT0osTUFBSTtBQUdKLE1BQUksT0FBTyx5QkFBeUIsUUFBUSxJQUFJLGtCQUFrQjtBQUNoRSxtQkFBZSxNQUFNLGlCQUFpQjtBQUFBLE1BQ3BDLFdBQVksQ0FBQyxtQkFBbUI7QUFDOUIsYUFBSyxxQkFBcUI7QUFDMUIsYUFBSyxnQkFBZ0IsSUFBSTtBQUN6QixhQUFLLG1CQUFtQixJQUFJLE9BQU8scUJBQXFCLENBQUMsUUFBUTtBQUMvRCxjQUFJLEtBQUssY0FBYyxPQUFPLEtBQUssb0JBQW9CO0FBQ3JEO0FBQUEsVUFDRjtBQUVBLGdCQUFNLE1BQU0sS0FBSyxjQUFjLElBQUksR0FBRztBQUN0QyxjQUFJLFFBQVEsYUFBYSxJQUFJLE1BQU0sTUFBTSxXQUFXO0FBQ2xELGlCQUFLLGNBQWMsT0FBTyxHQUFHO0FBQUEsVUFDL0I7QUFBQSxTQUNEO0FBQUE7QUFBQSxNQUdILEdBQUksQ0FBQyxZQUFZO0FBQ2YsY0FBTSxNQUFNLEtBQUssY0FBYyxJQUFJLFVBQVU7QUFDN0MsZUFBTyxNQUFNLElBQUksTUFBTSxJQUFJO0FBQUE7QUFBQSxNQUc3QixHQUFJLENBQUMsWUFBWSxTQUFTO0FBQ3hCLFlBQUksS0FBSyx1QkFBdUIsR0FBRztBQUNqQztBQUFBLFFBQ0Y7QUFFQSxhQUFLLGNBQWMsSUFBSSxZQUFZLElBQUksUUFBUSxPQUFPLENBQUM7QUFDdkQsYUFBSyxpQkFBaUIsU0FBUyxTQUFTLFVBQVU7QUFBQTtBQUFBLElBRXREO0FBQUEsRUFDRixPQUFPO0FBQ0wsbUJBQWUsTUFBTSxtQkFBbUI7QUFBQSxNQUN0QyxXQUFZLENBQUMsbUJBQW1CO0FBQzlCLGFBQUsscUJBQXFCO0FBQzFCLGFBQUssZ0JBQWdCLElBQUk7QUFBQTtBQUFBLE1BRzNCLEdBQUksQ0FBQyxZQUFZO0FBQ2YsZUFBTyxLQUFLLGNBQWMsSUFBSSxVQUFVO0FBQUE7QUFBQSxNQUcxQyxHQUFJLENBQUMsWUFBWSxTQUFTO0FBQ3hCLFlBQUksS0FBSyx1QkFBdUIsR0FBRztBQUNqQztBQUFBLFFBQ0Y7QUFFQSxZQUFJLEtBQUssY0FBYyxRQUFRLEtBQUssb0JBQW9CO0FBRXRELGtCQUFRLE9BQU8sY0FBYyxLQUFLLGNBQWMsS0FBSyxFQUFFLEtBQUs7QUFDNUQsZUFBSyxjQUFjLE9BQU8sU0FBUztBQUFBLFFBQ3JDO0FBRUEsYUFBSyxjQUFjLElBQUksWUFBWSxPQUFPO0FBQUE7QUFBQSxJQUU5QztBQUFBO0FBR0YsV0FBUyxjQUFlLEdBQUcsU0FBUyxtQkFBbUIsWUFBWSxZQUFZLFFBQVE7QUFDckYsUUFBSSxxQkFBcUIsVUFBVSxPQUFPLFVBQVUsaUJBQWlCLEtBQUssb0JBQW9CLElBQUk7QUFDaEcsWUFBTSxJQUFJLHFCQUFxQixzREFBc0Q7QUFBQSxJQUN2RjtBQUVBLFVBQU0sVUFBVSxFQUFFLE1BQU0sZUFBZSxLQUFLO0FBQzVDLFVBQU0sZUFBZSxJQUFJLGFBQWEscUJBQXFCLE9BQU8sTUFBTSxpQkFBaUI7QUFDekYsY0FBVSxXQUFXLE9BQU8sTUFBTztBQUNuQyxjQUFVLFdBQVcsT0FBTyxVQUFVO0FBQ3RDLG9CQUFnQixPQUFRLEdBQUcsVUFBVSxNQUFNLFVBQVUsTUFBTSxZQUFZLGNBQWMsY0FBYyxVQUFVO0FBQzNHLFVBQUk7QUFDSixVQUFJLGFBQWEsVUFBVTtBQUN6QixhQUFLLEtBQUs7QUFDUjtBQUFBLFFBQ0Y7QUFDQSxxQkFBYSxjQUFjLFFBQVEsY0FBYyxLQUFLLGNBQWMsSUFBSSxLQUFLO0FBRTdFLGNBQU0sYUFBYSxjQUFjO0FBQ2pDLGNBQU0sVUFBVSxhQUFhLElBQUksVUFBVSxLQUFLO0FBRWhELGVBQU8sVUFBVTtBQUVqQixpQkFBUyxJQUFJLFFBQVE7QUFBQSxVQUNuQixlQUFlO0FBQUEsYUFDWjtBQUFBLFVBQ0g7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBRUEsZUFBZSxVQUFVLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVO0FBQUEsVUFDekQsUUFBUTtBQUFBLFVBQ1IsTUFBTSxRQUFRO0FBQUEsVUFDZCxNQUFNO0FBQUEsUUFDUixDQUFDO0FBRUQsZUFDRyxHQUFHLG1CQUFvQixDQUFDLFVBQVM7QUFFaEMsdUJBQWEsSUFBSSxZQUFZLFFBQU87QUFBQSxTQUNyQztBQUFBLE1BQ0wsT0FBTztBQUNMLGdCQUFRLFlBQVksMkNBQTJDO0FBQy9ELGlCQUFTLElBQUksUUFBUTtBQUFBLFVBQ25CLGVBQWUsS0FBSztBQUFBLGFBQ2pCO0FBQUEsVUFDSDtBQUFBLFVBQ0EsTUFBTSxRQUFRO0FBQUEsVUFDZCxNQUFNO0FBQUEsUUFDUixDQUFDO0FBQUE7QUFJSCxVQUFJLFFBQVEsYUFBYSxRQUFRLFFBQVEsV0FBVztBQUNsRCxjQUFNLHdCQUF3QixRQUFRLDBCQUEwQixZQUFZLFFBQU8sUUFBUTtBQUMzRixlQUFPLGFBQWEsTUFBTSxxQkFBcUI7QUFBQSxNQUNqRDtBQUVBLFlBQU0sZ0JBQWdCLGFBQWEsTUFBTSxpQkFBaUIsTUFBTSxHQUFHLE9BQU87QUFFMUUsYUFDRyxXQUFXLElBQUksRUFDZixLQUFLLGFBQWEsV0FBVyxrQkFBa0IsbUJBQW9CLEdBQUc7QUFDckUsc0JBQWM7QUFFZCxZQUFJLFVBQVU7QUFDWixnQkFBTSxLQUFLO0FBQ1gscUJBQVc7QUFDWCxhQUFHLE1BQU0sSUFBSTtBQUFBLFFBQ2Y7QUFBQSxPQUNELEVBQ0EsR0FBRyxpQkFBa0IsQ0FBQyxLQUFLO0FBQzFCLHNCQUFjO0FBRWQsWUFBSSxVQUFVO0FBQ1osZ0JBQU0sS0FBSztBQUNYLHFCQUFXO0FBQ1gsYUFBRyxHQUFHO0FBQUEsUUFDUjtBQUFBLE9BQ0Q7QUFFSCxhQUFPO0FBQUE7QUFBQTtBQUlYLFdBQVMsWUFBYSxDQUFDLG1CQUFrQixTQUFTO0FBQ2hELFNBQUssU0FBUztBQUNaLGFBQU8sTUFBTTtBQUFBO0FBQUEsSUFDZjtBQUVBLFFBQUksS0FBSztBQUNULFFBQUksS0FBSztBQUNULFVBQU0sWUFBWSxXQUFXLE1BQU07QUFFakMsV0FBSyxhQUFhLE1BQU07QUFDdEIsWUFBSSxRQUFRLGFBQWEsU0FBUztBQUVoQyxlQUFLLGFBQWEsTUFBTSxrQkFBaUIsQ0FBQztBQUFBLFFBQzVDLE9BQU87QUFDTCw0QkFBaUI7QUFBQTtBQUFBLE9BRXBCO0FBQUEsT0FDQSxPQUFPO0FBQ1YsV0FBTyxNQUFNO0FBQ1gsbUJBQWEsU0FBUztBQUN0QixxQkFBZSxFQUFFO0FBQ2pCLHFCQUFlLEVBQUU7QUFBQTtBQUFBO0FBSXJCLFdBQVMsZ0JBQWlCLENBQUMsUUFBUTtBQUNqQyxTQUFLLFFBQVEsUUFBUSxJQUFJLG1CQUFxQjtBQUFBO0FBR2hELFNBQU8sVUFBVTtBQUFBOzs7O0FDM0xqQixTQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsRUFBUSxvQkFBaUI7QUFDekIsV0FBUyxTQUFTLENBQUMsS0FBSztBQUNwQixVQUFNLE1BQU0sQ0FBQztBQUNiLFdBQU8sS0FBSyxHQUFHLEVBQUUsUUFBUSxDQUFDLFFBQVE7QUFDOUIsWUFBTSxRQUFRLElBQUk7QUFDbEIsaUJBQVcsVUFBVSxVQUFVO0FBQzNCLFlBQUksT0FBTztBQUFBLE1BQ2Y7QUFBQSxLQUNIO0FBQ0QsV0FBTztBQUFBO0FBRVgsRUFBUSxvQkFBWTtBQUFBOzs7O0FDWnBCLFNBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxFQUFRLDBCQUEwQix1QkFBdUIsZ0JBQWdCLGdCQUFnQixpQ0FBaUMsdUJBQXVCLGdCQUFnQix1QkFBdUIsY0FBYyxtQkFBbUIsMEJBQTBCLHlCQUF5QixlQUFlLG1CQUFtQixjQUFjLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGlCQUFpQix1QkFBdUIscUJBQXFCLHVCQUF1QixzQkFBc0IsdUJBQXVCLGtCQUFrQix3QkFBd0IsZ0JBQWdCLGVBQWUsZ0JBQWE7QUFDdmtCLE1BQU07QUFFTixNQUFJO0FBQ0osV0FBVSxDQUFDLFFBQU87QUFDZCxXQUFNLE9BQU0sUUFBUSxLQUFLO0FBQ3pCLFdBQU0sT0FBTSxjQUFjLEtBQUs7QUFDL0IsV0FBTSxPQUFNLFlBQVksS0FBSztBQUM3QixXQUFNLE9BQU0saUJBQWlCLEtBQUs7QUFDbEMsV0FBTSxPQUFNLCtCQUErQixLQUFLO0FBQ2hELFdBQU0sT0FBTSx1QkFBdUIsS0FBSztBQUN4QyxXQUFNLE9BQU0sb0JBQW9CLEtBQUs7QUFDckMsV0FBTSxPQUFNLGlCQUFpQixLQUFLO0FBQ2xDLFdBQU0sT0FBTSxzQkFBc0IsS0FBSztBQUN2QyxXQUFNLE9BQU0scUJBQXFCLEtBQUs7QUFDdEMsV0FBTSxPQUFNLDBCQUEwQixNQUFNO0FBQzVDLFdBQU0sT0FBTSw0QkFBNEIsTUFBTTtBQUM5QyxXQUFNLE9BQU0sd0JBQXdCLE1BQU07QUFDMUMsV0FBTSxPQUFNLG9CQUFvQixNQUFNO0FBQ3RDLFdBQU0sT0FBTSx1QkFBdUIsTUFBTTtBQUN6QyxXQUFNLE9BQU0sK0JBQStCLE1BQU07QUFDakQsV0FBTSxPQUFNLHNCQUFzQixNQUFNO0FBQ3hDLFdBQU0sT0FBTSx5QkFBeUIsTUFBTTtBQUMzQyxXQUFNLE9BQU0seUJBQXlCLE1BQU07QUFDM0MsV0FBTSxPQUFNLHFCQUFxQixNQUFNO0FBQ3ZDLFdBQU0sT0FBTSx1QkFBdUIsTUFBTTtBQUN6QyxXQUFNLE9BQU0sWUFBWSxNQUFNO0FBQzlCLFdBQU0sT0FBTSxvQkFBb0IsTUFBTTtBQUN0QyxXQUFNLE9BQU0sdUJBQXVCLE1BQU07QUFDekMsV0FBTSxPQUFNLFVBQVUsTUFBTTtBQUFBLEtBQzdCLFFBQWdCLGtCQUFrQixnQkFBUSxDQUFDLEVBQUU7QUFDaEQsTUFBSTtBQUNKLFdBQVUsQ0FBQyxPQUFNO0FBQ2IsVUFBSyxNQUFLLFVBQVUsS0FBSztBQUN6QixVQUFLLE1BQUssYUFBYSxLQUFLO0FBQzVCLFVBQUssTUFBSyxjQUFjLEtBQUs7QUFBQSxLQUM5QixPQUFlLGlCQUFpQixlQUFPLENBQUMsRUFBRTtBQUM3QyxNQUFJO0FBQ0osV0FBVSxDQUFDLFFBQU87QUFDZCxXQUFNLE9BQU0sMkJBQTJCLEtBQUs7QUFDNUMsV0FBTSxPQUFNLHNCQUFzQixLQUFLO0FBQ3ZDLFdBQU0sT0FBTSx3QkFBd0IsS0FBSztBQUN6QyxXQUFNLE9BQU0sYUFBYSxLQUFLO0FBQzlCLFdBQU0sT0FBTSxhQUFhLE1BQU07QUFDL0IsV0FBTSxPQUFNLG9CQUFvQixNQUFNO0FBQ3RDLFdBQU0sT0FBTSxjQUFjLE1BQU07QUFDaEMsV0FBTSxPQUFNLGNBQWMsT0FBTztBQUVqQyxXQUFNLE9BQU0sdUJBQXVCLE9BQU87QUFBQSxLQUMzQyxRQUFnQixrQkFBa0IsZ0JBQVEsQ0FBQyxFQUFFO0FBQ2hELE1BQUk7QUFDSixXQUFVLENBQUMsZ0JBQWU7QUFDdEIsbUJBQWMsZUFBYyxhQUFhLEtBQUs7QUFDOUMsbUJBQWMsZUFBYyxvQkFBb0IsS0FBSztBQUNyRCxtQkFBYyxlQUFjLGdCQUFnQixLQUFLO0FBQUEsS0FDbEQsZ0JBQXdCLDBCQUEwQix3QkFBZ0IsQ0FBQyxFQUFFO0FBQ3hFLE1BQUk7QUFDSixXQUFVLENBQUMsVUFBUztBQUNoQixhQUFRLFNBQVEsWUFBWSxLQUFLO0FBQ2pDLGFBQVEsU0FBUSxTQUFTLEtBQUs7QUFDOUIsYUFBUSxTQUFRLFVBQVUsS0FBSztBQUMvQixhQUFRLFNBQVEsVUFBVSxLQUFLO0FBQy9CLGFBQVEsU0FBUSxTQUFTLEtBQUs7QUFFOUIsYUFBUSxTQUFRLGFBQWEsS0FBSztBQUNsQyxhQUFRLFNBQVEsYUFBYSxLQUFLO0FBQ2xDLGFBQVEsU0FBUSxXQUFXLEtBQUs7QUFFaEMsYUFBUSxTQUFRLFVBQVUsS0FBSztBQUMvQixhQUFRLFNBQVEsVUFBVSxLQUFLO0FBQy9CLGFBQVEsU0FBUSxXQUFXLE1BQU07QUFDakMsYUFBUSxTQUFRLFVBQVUsTUFBTTtBQUNoQyxhQUFRLFNBQVEsY0FBYyxNQUFNO0FBQ3BDLGFBQVEsU0FBUSxlQUFlLE1BQU07QUFDckMsYUFBUSxTQUFRLFlBQVksTUFBTTtBQUNsQyxhQUFRLFNBQVEsWUFBWSxNQUFNO0FBQ2xDLGFBQVEsU0FBUSxVQUFVLE1BQU07QUFDaEMsYUFBUSxTQUFRLFlBQVksTUFBTTtBQUNsQyxhQUFRLFNBQVEsWUFBWSxNQUFNO0FBQ2xDLGFBQVEsU0FBUSxTQUFTLE1BQU07QUFFL0IsYUFBUSxTQUFRLFlBQVksTUFBTTtBQUNsQyxhQUFRLFNBQVEsZ0JBQWdCLE1BQU07QUFDdEMsYUFBUSxTQUFRLGNBQWMsTUFBTTtBQUNwQyxhQUFRLFNBQVEsV0FBVyxNQUFNO0FBRWpDLGFBQVEsU0FBUSxjQUFjLE1BQU07QUFDcEMsYUFBUSxTQUFRLFlBQVksTUFBTTtBQUNsQyxhQUFRLFNBQVEsZUFBZSxNQUFNO0FBQ3JDLGFBQVEsU0FBUSxpQkFBaUIsTUFBTTtBQUV2QyxhQUFRLFNBQVEsV0FBVyxNQUFNO0FBQ2pDLGFBQVEsU0FBUSxXQUFXLE1BQU07QUFFakMsYUFBUSxTQUFRLGdCQUFnQixNQUFNO0FBRXRDLGFBQVEsU0FBUSxVQUFVLE1BQU07QUFDaEMsYUFBUSxTQUFRLFlBQVksTUFBTTtBQUVsQyxhQUFRLFNBQVEsWUFBWSxNQUFNO0FBRWxDLGFBQVEsU0FBUSxTQUFTLE1BQU07QUFFL0IsYUFBUSxTQUFRLGNBQWMsTUFBTTtBQUNwQyxhQUFRLFNBQVEsY0FBYyxNQUFNO0FBQ3BDLGFBQVEsU0FBUSxXQUFXLE1BQU07QUFDakMsYUFBUSxTQUFRLFVBQVUsTUFBTTtBQUNoQyxhQUFRLFNBQVEsV0FBVyxNQUFNO0FBQ2pDLGFBQVEsU0FBUSxjQUFjLE1BQU07QUFDcEMsYUFBUSxTQUFRLG1CQUFtQixNQUFNO0FBQ3pDLGFBQVEsU0FBUSxtQkFBbUIsTUFBTTtBQUN6QyxhQUFRLFNBQVEsY0FBYyxNQUFNO0FBQ3BDLGFBQVEsU0FBUSxZQUFZLE1BQU07QUFFbEMsYUFBUSxTQUFRLFdBQVcsTUFBTTtBQUFBLEtBQ2xDLFVBQWtCLG9CQUFvQixrQkFBVSxDQUFDLEVBQUU7QUFDdEQsRUFBUSx1QkFBZTtBQUFBLElBQ25CLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUVSLFFBQVE7QUFBQSxFQUNaO0FBQ0EsRUFBUSxzQkFBYztBQUFBLElBQ2xCLFFBQVE7QUFBQSxFQUNaO0FBQ0EsRUFBUSx1QkFBZTtBQUFBLElBQ25CLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUVSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxFQUNaO0FBQ0EsRUFBUSxxQkFBYSxRQUFRLFVBQVUsT0FBTztBQUM5QyxFQUFRLHVCQUFlLENBQUM7QUFDeEIsU0FBTyxLQUFhLGtCQUFVLEVBQUUsUUFBUSxDQUFDLFFBQVE7QUFDN0MsUUFBSSxLQUFLLEtBQUssR0FBRyxHQUFHO0FBQ2hCLE1BQVEscUJBQWEsT0FBZSxtQkFBVztBQUFBLElBQ25EO0FBQUEsR0FDSDtBQUNELE1BQUk7QUFDSixXQUFVLENBQUMsU0FBUTtBQUNmLFlBQU8sUUFBTyxVQUFVLEtBQUs7QUFDN0IsWUFBTyxRQUFPLGtCQUFrQixLQUFLO0FBQ3JDLFlBQU8sUUFBTyxZQUFZLEtBQUs7QUFBQSxLQUNoQyxTQUFpQixtQkFBbUIsaUJBQVMsQ0FBQyxFQUFFO0FBQ25ELEVBQVEsZ0JBQVEsQ0FBQztBQUNqQixXQUFTLElBQUksSUFBSSxXQUFXLENBQUMsRUFBRyxLQUFLLElBQUksV0FBVyxDQUFDLEdBQUcsS0FBSztBQUV6RCxJQUFRLGNBQU0sS0FBSyxPQUFPLGFBQWEsQ0FBQyxDQUFDO0FBRXpDLElBQVEsY0FBTSxLQUFLLE9BQU8sYUFBYSxJQUFJLEVBQUksQ0FBQztBQUFBLEVBQ3BEO0FBQ0EsRUFBUSxrQkFBVTtBQUFBLElBQ2QsR0FBRztBQUFBLElBQUcsR0FBRztBQUFBLElBQUcsR0FBRztBQUFBLElBQUcsR0FBRztBQUFBLElBQUcsR0FBRztBQUFBLElBQzNCLEdBQUc7QUFBQSxJQUFHLEdBQUc7QUFBQSxJQUFHLEdBQUc7QUFBQSxJQUFHLEdBQUc7QUFBQSxJQUFHLEdBQUc7QUFBQSxFQUMvQjtBQUNBLEVBQVEsa0JBQVU7QUFBQSxJQUNkLEdBQUc7QUFBQSxJQUFHLEdBQUc7QUFBQSxJQUFHLEdBQUc7QUFBQSxJQUFHLEdBQUc7QUFBQSxJQUFHLEdBQUc7QUFBQSxJQUMzQixHQUFHO0FBQUEsSUFBRyxHQUFHO0FBQUEsSUFBRyxHQUFHO0FBQUEsSUFBRyxHQUFHO0FBQUEsSUFBRyxHQUFHO0FBQUEsSUFDM0IsR0FBRztBQUFBLElBQUssR0FBRztBQUFBLElBQUssR0FBRztBQUFBLElBQUssR0FBRztBQUFBLElBQUssR0FBRztBQUFBLElBQUssR0FBRztBQUFBLElBQzNDLEdBQUc7QUFBQSxJQUFLLEdBQUc7QUFBQSxJQUFLLEdBQUc7QUFBQSxJQUFLLEdBQUc7QUFBQSxJQUFLLEdBQUc7QUFBQSxJQUFLLEdBQUc7QUFBQSxFQUMvQztBQUNBLEVBQVEsY0FBTTtBQUFBLElBQ1Y7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxFQUNqRDtBQUNBLEVBQVEsbUJBQW1CLGNBQU0sT0FBZSxXQUFHO0FBQ25ELEVBQVEsZUFBTyxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE1BQU0sS0FBSyxHQUFHO0FBQzVELEVBQVEseUJBQXlCLGlCQUM1QixPQUFlLFlBQUksRUFDbkIsT0FBTyxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBRXBELEVBQVEsMEJBQWtCO0FBQUEsSUFDdEI7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQ3pCO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQ25DO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQ3BCO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFNO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxQjtBQUFBLElBQ0E7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxFQUNuQixFQUFFLE9BQWUsZ0JBQVE7QUFDekIsRUFBUSxtQkFBbUIsd0JBQ3RCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQztBQUV4QixXQUFTLElBQUksSUFBTSxLQUFLLEtBQU0sS0FBSztBQUMvQixJQUFRLGlCQUFTLEtBQUssQ0FBQztBQUFBLEVBQzNCO0FBQ0EsRUFBUSxjQUFjLFlBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLENBQUM7QUFRN0YsRUFBUSx1QkFBZTtBQUFBLElBQ25CO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUN6QjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQ2Y7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQ1Y7QUFBQSxJQUFLO0FBQUEsRUFDVCxFQUFFLE9BQWUsZ0JBQVE7QUFDekIsRUFBUSxnQkFBZ0IscUJBQWEsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUtqRCxFQUFRLHVCQUFlLENBQUMsSUFBSTtBQUM1QixXQUFTLElBQUksR0FBSSxLQUFLLEtBQUssS0FBSztBQUM1QixRQUFJLE1BQU0sS0FBSztBQUNYLE1BQVEscUJBQWEsS0FBSyxDQUFDO0FBQUEsSUFDL0I7QUFBQSxFQUNKO0FBRUEsRUFBUSxpQ0FBaUMscUJBQWEsT0FBTyxDQUFDLE1BQU0sTUFBTSxFQUFFO0FBQzVFLEVBQVEsZ0JBQWdCO0FBQ3hCLEVBQVEsZ0JBQWdCO0FBQ3hCLE1BQUk7QUFDSixXQUFVLENBQUMsZUFBYztBQUNyQixrQkFBYSxjQUFhLGFBQWEsS0FBSztBQUM1QyxrQkFBYSxjQUFhLGdCQUFnQixLQUFLO0FBQy9DLGtCQUFhLGNBQWEsb0JBQW9CLEtBQUs7QUFDbkQsa0JBQWEsY0FBYSx1QkFBdUIsS0FBSztBQUN0RCxrQkFBYSxjQUFhLGFBQWEsS0FBSztBQUM1QyxrQkFBYSxjQUFhLDJCQUEyQixLQUFLO0FBQzFELGtCQUFhLGNBQWEsc0JBQXNCLEtBQUs7QUFDckQsa0JBQWEsY0FBYSx3QkFBd0IsS0FBSztBQUN2RCxrQkFBYSxjQUFhLCtCQUErQixLQUFLO0FBQUEsS0FDL0QsZUFBdUIseUJBQXlCLHVCQUFlLENBQUMsRUFBRTtBQUNyRSxFQUFRLDBCQUFrQjtBQUFBLElBQ3RCLFlBQWMsYUFBYTtBQUFBLElBQzNCLGtCQUFrQixhQUFhO0FBQUEsSUFDL0Isb0JBQW9CLGFBQWE7QUFBQSxJQUNqQyxxQkFBcUIsYUFBYTtBQUFBLElBQ2xDLFNBQVcsYUFBYTtBQUFBLEVBQzVCO0FBQUE7Ozs7QUNsUkEsTUFBTTtBQUNOLFFBQVE7QUFDUixNQUFNO0FBQ04sUUFBUTtBQUNSLE1BQU07QUFFTixNQUFNLDBCQUEwQixDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHO0FBRTdELE1BQU0sUUFBUSxPQUFPLE1BQU07QUFFM0I7QUFBQSxRQUFNLGtCQUFrQjtBQUFBLElBQ3RCLFdBQVksQ0FBQyxNQUFNO0FBQ2pCLFdBQUssU0FBUztBQUNkLFdBQUssYUFBYTtBQUFBO0FBQUEsWUFHWCxPQUFPLGNBQWUsR0FBRztBQUNoQyxjQUFRLEtBQUssWUFBWSxXQUFXO0FBQ3BDLFdBQUssYUFBYTtBQUNsQixhQUFRLEtBQUs7QUFBQTtBQUFBLEVBRWpCO0FBRUE7QUFBQSxRQUFNLGdCQUFnQjtBQUFBLElBQ3BCLFdBQVksQ0FBQyxVQUFVLGlCQUFpQixNQUFNLFNBQVM7QUFDckQsVUFBSSxtQkFBbUIsVUFBVSxPQUFPLFVBQVUsZUFBZSxLQUFLLGtCQUFrQixJQUFJO0FBQzFGLGNBQU0sSUFBSSxxQkFBcUIsMkNBQTJDO0FBQUEsTUFDNUU7QUFFQSxXQUFLLGdCQUFnQixTQUFTLEtBQUssUUFBUSxLQUFLLE9BQU87QUFFdkQsV0FBSyxXQUFXO0FBQ2hCLFdBQUssV0FBVztBQUNoQixXQUFLLFFBQVE7QUFDYixXQUFLLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixFQUFFO0FBQzFDLFdBQUssa0JBQWtCO0FBQ3ZCLFdBQUssVUFBVTtBQUNmLFdBQUssVUFBVSxDQUFDO0FBRWhCLFVBQUksS0FBSyxTQUFTLEtBQUssS0FBSyxJQUFJLEdBQUc7QUFJakMsWUFBSSxLQUFLLFdBQVcsS0FBSyxLQUFLLElBQUksTUFBTSxHQUFHO0FBQ3pDLGVBQUssS0FBSyxLQUNQLEdBQUcsZ0JBQWlCLEdBQUc7QUFDdEIsbUJBQU8sS0FBSztBQUFBLFdBQ2I7QUFBQSxRQUNMO0FBRUEsbUJBQVcsS0FBSyxLQUFLLEtBQUssb0JBQW9CLFdBQVc7QUFDdkQsZUFBSyxLQUFLLEtBQUssYUFBYTtBQUM1QixhQUFHLFVBQVUsR0FBRyxLQUFLLEtBQUssS0FBSyxNQUFNLGdCQUFpQixHQUFHO0FBQ3ZELGlCQUFLLGFBQWE7QUFBQSxXQUNuQjtBQUFBLFFBQ0g7QUFBQSxNQUNGLFdBQVcsS0FBSyxLQUFLLGVBQWUsS0FBSyxLQUFLLEtBQUssV0FBVyxZQUFZO0FBSXhFLGFBQUssS0FBSyxPQUFPLElBQUksa0JBQWtCLEtBQUssS0FBSyxJQUFJO0FBQUEsTUFDdkQsV0FDRSxLQUFLLEtBQUssZUFDSCxLQUFLLEtBQUssU0FBUyxhQUN6QixZQUFZLE9BQU8sS0FBSyxLQUFLLElBQUksS0FDbEMsS0FBSyxXQUFXLEtBQUssS0FBSyxJQUFJLEdBQzlCO0FBR0EsYUFBSyxLQUFLLE9BQU8sSUFBSSxrQkFBa0IsS0FBSyxLQUFLLElBQUk7QUFBQSxNQUN2RDtBQUFBO0FBQUEsSUFHRixTQUFVLENBQUMsT0FBTztBQUNoQixXQUFLLFFBQVE7QUFDYixXQUFLLFFBQVEsVUFBVSxPQUFPLEVBQUUsU0FBUyxLQUFLLFFBQVEsQ0FBQztBQUFBO0FBQUEsSUFHekQsU0FBVSxDQUFDLFlBQVksU0FBUyxRQUFRO0FBQ3RDLFdBQUssUUFBUSxVQUFVLFlBQVksU0FBUyxNQUFNO0FBQUE7QUFBQSxJQUdwRCxPQUFRLENBQUMsT0FBTztBQUNkLFdBQUssUUFBUSxRQUFRLEtBQUs7QUFBQTtBQUFBLElBRzVCLFNBQVUsQ0FBQyxZQUFZLFNBQVMsUUFBUSxZQUFZO0FBQ2xELFdBQUssV0FBVyxLQUFLLFFBQVEsVUFBVSxLQUFLLG1CQUFtQixLQUFLLFlBQVksS0FBSyxLQUFLLElBQUksSUFDMUYsT0FDQSxjQUFjLFlBQVksT0FBTztBQUVyQyxVQUFJLEtBQUssS0FBSyxRQUFRO0FBQ3BCLGFBQUssUUFBUSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssTUFBTSxLQUFLLEtBQUssTUFBTSxDQUFDO0FBQUEsTUFDN0Q7QUFFQSxXQUFLLEtBQUssVUFBVTtBQUNsQixlQUFPLEtBQUssUUFBUSxVQUFVLFlBQVksU0FBUyxRQUFRLFVBQVU7QUFBQSxNQUN2RTtBQUVBLGNBQVEsUUFBUSxVQUFVLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssS0FBSyxNQUFNLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztBQUN4SSxZQUFNLE9BQU8sU0FBUyxHQUFHLFdBQVcsV0FBVztBQUsvQyxXQUFLLEtBQUssVUFBVSxvQkFBb0IsS0FBSyxLQUFLLFNBQVMsZUFBZSxLQUFLLEtBQUssS0FBSyxXQUFXLE1BQU07QUFDMUcsV0FBSyxLQUFLLE9BQU87QUFDakIsV0FBSyxLQUFLLFNBQVM7QUFDbkIsV0FBSyxLQUFLLGtCQUFrQjtBQUM1QixXQUFLLEtBQUssUUFBUTtBQUlsQixVQUFJLGVBQWUsT0FBTyxLQUFLLEtBQUssV0FBVyxRQUFRO0FBQ3JELGFBQUssS0FBSyxTQUFTO0FBQ25CLGFBQUssS0FBSyxPQUFPO0FBQUEsTUFDbkI7QUFBQTtBQUFBLElBR0YsTUFBTyxDQUFDLE9BQU87QUFDYixVQUFJLEtBQUssVUFBVTtBQUFBLE1Ba0JuQixPQUFPO0FBQ0wsZUFBTyxLQUFLLFFBQVEsT0FBTyxLQUFLO0FBQUE7QUFBQTtBQUFBLElBSXBDLFVBQVcsQ0FBQyxVQUFVO0FBQ3BCLFVBQUksS0FBSyxVQUFVO0FBVWpCLGFBQUssV0FBVztBQUNoQixhQUFLLFFBQVE7QUFFYixhQUFLLFNBQVMsS0FBSyxNQUFNLElBQUk7QUFBQSxNQUMvQixPQUFPO0FBQ0wsYUFBSyxRQUFRLFdBQVcsUUFBUTtBQUFBO0FBQUE7QUFBQSxJQUlwQyxVQUFXLENBQUMsT0FBTztBQUNqQixVQUFJLEtBQUssUUFBUSxZQUFZO0FBQzNCLGFBQUssUUFBUSxXQUFXLEtBQUs7QUFBQSxNQUMvQjtBQUFBO0FBQUEsRUFFSjtBQUVBLFdBQVMsYUFBYyxDQUFDLFlBQVksU0FBUztBQUMzQyxRQUFJLHdCQUF3QixRQUFRLFVBQVUsTUFBTSxJQUFJO0FBQ3RELGFBQU87QUFBQSxJQUNUO0FBRUEsYUFBUyxJQUFJLEVBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQzFDLFVBQUksUUFBUSxHQUFHLFNBQVMsRUFBRSxZQUFZLE1BQU0sWUFBWTtBQUN0RCxlQUFPLFFBQVEsSUFBSTtBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUFBO0FBSUYsV0FBUyxrQkFBbUIsQ0FBQyxRQUFRLGVBQWUsZUFBZTtBQUNqRSxRQUFJLE9BQU8sV0FBVyxHQUFHO0FBQ3ZCLGFBQU8sS0FBSyxtQkFBbUIsTUFBTSxNQUFNO0FBQUEsSUFDN0M7QUFDQSxRQUFJLGlCQUFpQixLQUFLLG1CQUFtQixNQUFNLEVBQUUsV0FBVyxVQUFVLEdBQUc7QUFDM0UsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLGtCQUFrQixPQUFPLFdBQVcsTUFBTSxPQUFPLFdBQVcsS0FBSyxPQUFPLFdBQVcsS0FBSztBQUMxRixZQUFNLE9BQU8sS0FBSyxtQkFBbUIsTUFBTTtBQUMzQyxhQUFPLFNBQVMsbUJBQW1CLFNBQVMsWUFBWSxTQUFTO0FBQUEsSUFDbkU7QUFDQSxXQUFPO0FBQUE7QUFJVCxXQUFTLG1CQUFvQixDQUFDLFNBQVMsZUFBZSxlQUFlO0FBQ25FLFVBQU0sTUFBTSxDQUFDO0FBQ2IsUUFBSSxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBQzFCLGVBQVMsSUFBSSxFQUFHLElBQUksUUFBUSxRQUFRLEtBQUssR0FBRztBQUMxQyxhQUFLLG1CQUFtQixRQUFRLElBQUksZUFBZSxhQUFhLEdBQUc7QUFDakUsY0FBSSxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksRUFBRTtBQUFBLFFBQ3JDO0FBQUEsTUFDRjtBQUFBLElBQ0YsV0FBVyxrQkFBa0IsWUFBWSxVQUFVO0FBQ2pELGlCQUFXLE9BQU8sT0FBTyxLQUFLLE9BQU8sR0FBRztBQUN0QyxhQUFLLG1CQUFtQixLQUFLLGVBQWUsYUFBYSxHQUFHO0FBQzFELGNBQUksS0FBSyxLQUFLLFFBQVEsSUFBSTtBQUFBLFFBQzVCO0FBQUEsTUFDRjtBQUFBLElBQ0YsT0FBTztBQUNMLGFBQU8sV0FBVyxNQUFNLHVDQUF1QztBQUFBO0FBRWpFLFdBQU87QUFBQTtBQUdULFNBQU8sVUFBVTtBQUFBOzs7O0FDMU5qQixNQUFNO0FBRU4sV0FBUyx5QkFBMEIsR0FBRyxpQkFBaUIsMEJBQTBCO0FBQy9FLFdBQU8sQ0FBQyxhQUFhO0FBQ25CLHNCQUFnQixTQUFVLENBQUMsTUFBTSxTQUFTO0FBQ3hDLGdCQUFRLGtCQUFrQiwyQkFBMkI7QUFFckQsYUFBSyxpQkFBaUI7QUFDcEIsaUJBQU8sU0FBUyxNQUFNLE9BQU87QUFBQSxRQUMvQjtBQUVBLGNBQU0sa0JBQWtCLElBQUksZ0JBQWdCLFVBQVUsaUJBQWlCLE1BQU0sT0FBTztBQUNwRixlQUFPLEtBQUssTUFBTSxpQkFBaUIsRUFBRTtBQUNyQyxlQUFPLFNBQVMsTUFBTSxlQUFlO0FBQUE7QUFBQTtBQUFBO0FBSzNDLFNBQU8sVUFBVTtBQUFBOzs7O0FDcEJqQixTQUFPLFVBQVU7QUFBQTs7OztBQ0FqQixTQUFPLFVBQVU7QUFBQTs7OztBQ01qQixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFDTixRQUFRO0FBQ1IsTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBQ04sTUFBTTtBQUNOO0FBQUEsSUFDRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUE7QUFFRixNQUFNO0FBQ047QUFBQSxJQUNFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUE7QUFJRixNQUFJO0FBQ0osTUFBSTtBQUNGO0FBQUEsVUFDQTtBQUVBLFlBQVEsRUFBRSxXQUFXLENBQUMsRUFBRTtBQUFBO0FBRzFCO0FBQUEsSUFDRTtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQTtBQUFBLE1BRUE7QUFHSixNQUFJLHVCQUF1QjtBQUUzQixNQUFNLGFBQWEsT0FBTyxPQUFPO0FBRWpDLE1BQU0saUJBQWlCLE9BQU8s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V0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEs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SUFDRDtBQU1BLEVBQVEsaUJBQVMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUVsQyxNQUFJO0FBR0gsVUFBTTtBQUVOLFFBQUksa0JBQWtCLGNBQWMsVUFBVSxlQUFlLFNBQVMsR0FBRztBQUN4RSxNQUFRLGlCQUFTO0FBQUEsUUFDaEI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFB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QSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0o7QUFDQSxNQUFNLDJDQUEyQztBQUFBLElBQzdDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNKO0FBQ0EsTUFBTSx5Q0FBeUM7QUFDL0MsTUFBTSw0Q0FBNEM7QUFHbEQsTUFBTSxpQkFBaUI7QUFBQSxJQUNuQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtB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QUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFPO0FBQUEsSUFBSztBQUFBLElBQU87QUFBQSxJQUN6RjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDdEY7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUMzRjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUMzRjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDNUY7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDM0Y7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFDekY7QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLEVBQ2hCLENBQUM7QUFDRCxNQUFNLFlBQVksSUFBSSxZQUFZO0FBQUEsSUFDOUI7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFDeEY7QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUMxRjtBQUFBLElBQU07QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzNGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsRUFDOUYsQ0FBQztBQUNELE1BQU0sWUFBWSxJQUFJLFlBQVk7QUFBQSxJQUM5QjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBUTtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBUTtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzNGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFB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QUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNKLENBQUM7QUFTRCxNQUFNLGNBQWM7QUFBQSxJQUNoQixlQUFlLENBQUMsV0FBVyxhQUFhO0FBQUEsSUFDeEMsUUFBUTtBQUFBLE1BQ0osY0FBYztBQUFB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QUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJ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Q0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElB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 +//# debugId=842221DA94E8D74B64756E2164756E21 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL2xpYi9pby11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9saWIvaW8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvbGliL3Rvb2xydW5uZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvbGliL2V4ZWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9jb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9maWxlLWNvbW1hbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9wcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHVubmVsL2xpYi90dW5uZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi90aW1lcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL3N0cmVhbXNlYXJjaC9zYm1oLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9nZXRMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0hlYWRlclBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2RlY29kZVRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvcGFyc2VQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvbXVsdGlwYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL0RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi9tYWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3dlYmlkbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9kYXRhVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2ZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZm9ybWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25uZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9ub2RlL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wtc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYmFsYW5jZWQtcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYWJvcnQtc2lnbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcHJveHktYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9oZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29va2llcy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2V2ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC93ZWJzb2NrZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9saWIvYXV0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvb2lkYy11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvc3VtbWFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGF0aC11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGxhdGZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL2NvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvY29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLXR5cGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2Jhc2U2NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcHJvdG9idWZqcy11dGY4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktZm9ybWF0LWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9nb29nLXZhcmludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcGItbG9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYmluYXJ5LXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYXNzZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktd3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLWZvcm1hdC1jb250cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvbWVzc2FnZS10eXBlLWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9sb3dlci1jYW1lbC1jYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWluZm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL29uZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXR5cGUtY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24tcmVhZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24td3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1lcXVhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL21lc3NhZ2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jb250YWlucy1tZXNzYWdlLXR5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2VudW0tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvZ2VuZXJhdGVkL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24taW5mby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZpY2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1lcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS1ycGMvYnVpbGQvY29tbW9uanMvZGVmZXJyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9ycGMtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3VuYXJ5LWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9zZXJ2ZXItc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9jbGllbnQtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9kdXBsZXgtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy90ZXN0LXRyYW5zcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZlci1jYWxsLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2Vycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvc2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbnRlcmNlcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvdC1vYmplY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2h0dHAuY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9nYXRld2F5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC50d2lycC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC9yZXRlbnRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC91cGxvYWQvcGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL3VzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtemlwLXNwZWNpZmljYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2p3dC1kZWNvZGUvYnVpbGQvand0LWRlY29kZS5janMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2xvZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvbG9nZ2VyL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9sb2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9hYm9ydC1jb250cm9sbGVyL2Rpc3QvY29tbW9uanMvQWJvcnRFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXIvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9yYW5kb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9kZWxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Fib3J0ZXJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL29iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvc2hhMjU2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvdHlwZUd1YXJkcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL3V1aWRVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NoZWNrRW52aXJvbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9ieXRlc0VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL3Nhbml0aXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2xvZ1BvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlZGlyZWN0UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC91c2VyQWdlbnRQbGF0Zm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvdXNlckFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdXNlckFnZW50UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90eXBlR3VhcmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9tdWx0aXBhcnRQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvcmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9odHRwSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2Zvcm1EYXRhUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FnZW50LWJhc2UvZGlzdC9oZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hZ2VudC1iYXNlL2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvcGFyc2UtcHJveHktcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHAtcHJveHktYWdlbnQvZGlzdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3Byb3h5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGxzUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS10cmFjaW5nL2Rpc3QvY29tbW9uanMvdHJhY2luZ0NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL2luc3RydW1lbnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL3RyYWNpbmdDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvaW5zcGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3Jlc3RFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvbm9kZUh0dHBDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9kZWZhdWx0SHR0cENsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lUmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2V4cG9uZW50aWFsUmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGhyb3R0bGluZ1JldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90b2tlbkN5Y2xlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2JlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9uZEpzb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMva2V5Q3JlZGVudGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtYXV0aC9kaXN0L2NvbW1vbmpzL2F6dXJlTmFtZWRLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVTQVNDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvdG9rZW5DcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWh0dHAtY29tcGF0L2Rpc3QvY29tbW9uanMvcG9saWNpZXMvZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYmFzZTY0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbnRlcmZhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL29wZXJhdGlvbkhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvaW50ZXJmYWNlSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvdXJsSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvbG9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9zZXJ2aWNlQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtaHR0cC1jb21wYXQvZGlzdC9jb21tb25qcy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2V4dGVuZGVkQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRBZGFwdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcHRpb25zQnVpbGRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIveG1sTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvRG9jVHlwZVJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RybnVtL3N0cm51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9pZ25vcmVBdHRyaWJ1dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcmRlcmVkT2JqUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9ub2RlMmpzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL1hNTFBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxidWlsZGVyL29yZGVyZWRKczJYbWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sYnVpbGRlci9qc29uMnhtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9meHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUteG1sL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvaHR0cC9vcGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL3BvbGxlci9wb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2h0dHAvcG9sbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9sZWdhY3kvbHJvRW5naW5lL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L3BvbGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L2xyb0VuZ2luZS9scm9FbmdpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9scm9FbmdpbmUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9wb2xsT3BlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL3N0b3JhZ2UtYmxvYi9kaXN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL2Jsb2ItdXBsb2FkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvbGliL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9taW5pbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRkaXItZ2xvYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXN5bmMvZGlzdC9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvcG9seWZpbGxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9sZWdhY3ktc3RyZWFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvY2xvbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2dyYWNlZnVsLWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pcy1zdHJlYW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9saWIvbGF6eXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXBhdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGVmYXVsdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9wcmltb3JkaWFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXZlbnQtdGFyZ2V0LXNoaW0vZGlzdC9ldmVudC10YXJnZXQtc2hpbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWJvcnQtY29udHJvbGxlci9kaXN0L2Fib3J0LWNvbnRyb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL291cnMvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3ZhbGlkYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvbGVnYWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYWRkLWFib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleGlmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9jb21wb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvb3BlcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL3N0cmVhbS9wcm9taXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXNXaXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2VPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9kaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuaXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC91bmlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2Fzc2VydC12YWxpZC1wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9icmFjZS1leHByZXNzaW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvdW5lc2NhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2FzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvZXNjYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmlwYXNzL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9jb21tb25qcy9wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvaWdub3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvcHJvY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvd2Fsa2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvZ2xvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2hhcy1tYWdpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci9saWIvY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL2FyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9nZW5lcmFsLXB1cnBvc2UtYml0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb21wcmVzcy1jb21tb25zL2xpYi9hcmNoaXZlcnMvemlwL3VuaXgtc3RhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL3V0aWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy9hcmNoaXZlLW91dHB1dC1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYy0zMi9jcmMzMi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY3JjMzItc3RyZWFtL2xpYi9jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvZGVmbGF0ZS1jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvY29tcHJlc3MtY29tbW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvemlwLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9xdWV1ZS10aWNrL3F1ZXVlLW1pY3JvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVldWUtdGljay9wcm9jZXNzLW5leHQtdGljay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1maWZvL2ZpeGVkLXNpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZmlmby9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi9wYXNzLXRocm91Z2gtZGVjb2Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi91dGY4LWRlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RleHQtZGVjb2Rlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RyZWFteC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYjRhL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90YXItc3RyZWFtL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vcGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9idWZmZXItY3JjMzIvZGlzdC9pbmRleC5janMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2xpYi9wbHVnaW5zL2pzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL3ppcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bml2ZXJzYWwtdXNlci1hZ2VudC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2lzLXBsYWluLW9iamVjdC9kaXN0L2lzLXBsYWluLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvZW5kcG9pbnQvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93ZWJpZGwtY29udmVyc2lvbnMvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHI0Ni9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvd2hhdHdnLXVybC9saWIvdXJsLXN0YXRlLW1hY2hpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC1pbXBsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi9VUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3B1YmxpYy1hcGkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL25vZGUtZmV0Y2gvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZXByZWNhdGlvbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3dyYXBweS93cmFwcHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL29uY2Uvb25jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9ncmFwaHFsL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90cmF2ZXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhaW5zYXcvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2J1ZmZlcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JpbmFyeS9saWIvdmFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmluYXJ5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL21hdGNoZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL2VudHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL3VuemlwLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL2xpYi9wYXJzZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ta2RpcnAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuemlwLXN0cmVhbS9saWIvZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL3VuemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvZG93bmxvYWQvZG93bmxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL3JldHJ5LW9wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JvdHRsZW5lY2svbGlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXRyeS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2dldC1hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL2RlbGV0ZS9kZWxldGUtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2xpc3QtYXJ0aWZhY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2ludGVyZmFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvZ3JhcGhxbC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgInNyYy9qb2JzL3Bvc3QudHMiLCAic3JjL2NvbnN0YW50cy50cyIsICJzcmMvbWV0cmljcy9wcm9tZXRoZXVzLnRzIiwgInNyYy9tZXRyaWNzL2RlZmF1bHQudHMiLCAic3JjL3JlcG9ydC9jb2xvcnMudHMiLCAic3JjL3JlcG9ydC9jaGFydC50cyIsICJzcmMvcmVwb3J0L2RlZmF1bHQudHMiLCAic3JjL3dvcmtmbG93L3dvcmtmbG93LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9hO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDbWRQYXRoID0gZXhwb3J0cy50cnlHZXRFeGVjdXRhYmxlUGF0aCA9IGV4cG9ydHMuaXNSb290ZWQgPSBleHBvcnRzLmlzRGlyZWN0b3J5ID0gZXhwb3J0cy5leGlzdHMgPSBleHBvcnRzLlJFQURPTkxZID0gZXhwb3J0cy5VVl9GU19PX0VYTE9DSyA9IGV4cG9ydHMuSVNfV0lORE9XUyA9IGV4cG9ydHMudW5saW5rID0gZXhwb3J0cy5zeW1saW5rID0gZXhwb3J0cy5zdGF0ID0gZXhwb3J0cy5ybWRpciA9IGV4cG9ydHMucm0gPSBleHBvcnRzLnJlbmFtZSA9IGV4cG9ydHMucmVhZGxpbmsgPSBleHBvcnRzLnJlYWRkaXIgPSBleHBvcnRzLm9wZW4gPSBleHBvcnRzLm1rZGlyID0gZXhwb3J0cy5sc3RhdCA9IGV4cG9ydHMuY29weUZpbGUgPSBleHBvcnRzLmNobW9kID0gdm9pZCAwO1xuY29uc3QgZnMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImZzXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuX2EgPSBmcy5wcm9taXNlc1xuLy8gZXhwb3J0IGNvbnN0IHtvcGVufSA9ICdmcydcbiwgZXhwb3J0cy5jaG1vZCA9IF9hLmNobW9kLCBleHBvcnRzLmNvcHlGaWxlID0gX2EuY29weUZpbGUsIGV4cG9ydHMubHN0YXQgPSBfYS5sc3RhdCwgZXhwb3J0cy5ta2RpciA9IF9hLm1rZGlyLCBleHBvcnRzLm9wZW4gPSBfYS5vcGVuLCBleHBvcnRzLnJlYWRkaXIgPSBfYS5yZWFkZGlyLCBleHBvcnRzLnJlYWRsaW5rID0gX2EucmVhZGxpbmssIGV4cG9ydHMucmVuYW1lID0gX2EucmVuYW1lLCBleHBvcnRzLnJtID0gX2Eucm0sIGV4cG9ydHMucm1kaXIgPSBfYS5ybWRpciwgZXhwb3J0cy5zdGF0ID0gX2Euc3RhdCwgZXhwb3J0cy5zeW1saW5rID0gX2Euc3ltbGluaywgZXhwb3J0cy51bmxpbmsgPSBfYS51bmxpbms7XG4vLyBleHBvcnQgY29uc3Qge29wZW59ID0gJ2ZzJ1xuZXhwb3J0cy5JU19XSU5ET1dTID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9kMDE1M2FlZTM2NzQyMmQwODU4MTA1YWJlYzE4NmRhNGRmZjBhMGM1L2RlcHMvdXYvaW5jbHVkZS91di93aW4uaCNMNjkxXG5leHBvcnRzLlVWX0ZTX09fRVhMT0NLID0gMHgxMDAwMDAwMDtcbmV4cG9ydHMuUkVBRE9OTFkgPSBmcy5jb25zdGFudHMuT19SRE9OTFk7XG5mdW5jdGlvbiBleGlzdHMoZnNQYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIGV4cG9ydHMuc3RhdChmc1BhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG5leHBvcnRzLmV4aXN0cyA9IGV4aXN0cztcbmZ1bmN0aW9uIGlzRGlyZWN0b3J5KGZzUGF0aCwgdXNlU3RhdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSB1c2VTdGF0ID8geWllbGQgZXhwb3J0cy5zdGF0KGZzUGF0aCkgOiB5aWVsZCBleHBvcnRzLmxzdGF0KGZzUGF0aCk7XG4gICAgICAgIHJldHVybiBzdGF0cy5pc0RpcmVjdG9yeSgpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5pc0RpcmVjdG9yeSA9IGlzRGlyZWN0b3J5O1xuLyoqXG4gKiBPbiBPU1gvTGludXgsIHRydWUgaWYgcGF0aCBzdGFydHMgd2l0aCAnLycuIE9uIFdpbmRvd3MsIHRydWUgZm9yIHBhdGhzIGxpa2U6XG4gKiBcXCwgXFxoZWxsbywgXFxcXGhlbGxvXFxzaGFyZSwgQzosIGFuZCBDOlxcaGVsbG8gKGFuZCBjb3JyZXNwb25kaW5nIGFsdGVybmF0ZSBzZXBhcmF0b3IgY2FzZXMpLlxuICovXG5mdW5jdGlvbiBpc1Jvb3RlZChwKSB7XG4gICAgcCA9IG5vcm1hbGl6ZVNlcGFyYXRvcnMocCk7XG4gICAgaWYgKCFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaXNSb290ZWQoKSBwYXJhbWV0ZXIgXCJwXCIgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgcmV0dXJuIChwLnN0YXJ0c1dpdGgoJ1xcXFwnKSB8fCAvXltBLVpdOi9pLnRlc3QocCkgLy8gZS5nLiBcXCBvciBcXGhlbGxvIG9yIFxcXFxoZWxsb1xuICAgICAgICApOyAvLyBlLmcuIEM6IG9yIEM6XFxoZWxsb1xuICAgIH1cbiAgICByZXR1cm4gcC5zdGFydHNXaXRoKCcvJyk7XG59XG5leHBvcnRzLmlzUm9vdGVkID0gaXNSb290ZWQ7XG4vKipcbiAqIEJlc3QgZWZmb3J0IGF0dGVtcHQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaWxlIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZS5cbiAqIEBwYXJhbSBmaWxlUGF0aCAgICBmaWxlIHBhdGggdG8gY2hlY2tcbiAqIEBwYXJhbSBleHRlbnNpb25zICBhZGRpdGlvbmFsIGZpbGUgZXh0ZW5zaW9ucyB0byB0cnlcbiAqIEByZXR1cm4gaWYgZmlsZSBleGlzdHMgYW5kIGlzIGV4ZWN1dGFibGUsIHJldHVybnMgdGhlIGZpbGUgcGF0aC4gb3RoZXJ3aXNlIGVtcHR5IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gdHJ5R2V0RXhlY3V0YWJsZVBhdGgoZmlsZVBhdGgsIGV4dGVuc2lvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3RhdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyB0ZXN0IGZpbGUgZXhpc3RzXG4gICAgICAgICAgICBzdGF0cyA9IHlpZWxkIGV4cG9ydHMuc3RhdChmaWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgaWYgZXhlY3V0YWJsZSBmaWxlIGV4aXN0cyAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgICAgICAvLyBvbiBXaW5kb3dzLCB0ZXN0IGZvciB2YWxpZCBleHRlbnNpb25cbiAgICAgICAgICAgICAgICBjb25zdCB1cHBlckV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zb21lKHZhbGlkRXh0ID0+IHZhbGlkRXh0LnRvVXBwZXJDYXNlKCkgPT09IHVwcGVyRXh0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5peEV4ZWN1dGFibGUoc3RhdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJ5IGVhY2ggZXh0ZW5zaW9uXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgZmlsZVBhdGggPSBvcmlnaW5hbEZpbGVQYXRoICsgZXh0ZW5zaW9uO1xuICAgICAgICAgICAgc3RhdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN0YXRzID0geWllbGQgZXhwb3J0cy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBVbmV4cGVjdGVkIGVycm9yIGF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIGlmIGV4ZWN1dGFibGUgZmlsZSBleGlzdHMgJyR7ZmlsZVBhdGh9JzogJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgICAgICAvLyBwcmVzZXJ2ZSB0aGUgY2FzZSBvZiB0aGUgYWN0dWFsIGZpbGUgKHNpbmNlIGFuIGV4dGVuc2lvbiB3YXMgYXBwZW5kZWQpXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBwZXJOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYWN0dWFsTmFtZSBvZiB5aWVsZCBleHBvcnRzLnJlYWRkaXIoZGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cHBlck5hbWUgPT09IGFjdHVhbE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJlY3RvcnksIGFjdHVhbE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBVbmV4cGVjdGVkIGVycm9yIGF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgY2FzZSBvZiB0aGUgZmlsZSAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbml4RXhlY3V0YWJsZShzdGF0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG59XG5leHBvcnRzLnRyeUdldEV4ZWN1dGFibGVQYXRoID0gdHJ5R2V0RXhlY3V0YWJsZVBhdGg7XG5mdW5jdGlvbiBub3JtYWxpemVTZXBhcmF0b3JzKHApIHtcbiAgICBwID0gcCB8fCAnJztcbiAgICBpZiAoZXhwb3J0cy5JU19XSU5ET1dTKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgc2xhc2hlcyBvbiBXaW5kb3dzXG4gICAgICAgIHAgPSBwLnJlcGxhY2UoL1xcLy9nLCAnXFxcXCcpO1xuICAgICAgICAvLyByZW1vdmUgcmVkdW5kYW50IHNsYXNoZXNcbiAgICAgICAgcmV0dXJuIHAucmVwbGFjZSgvXFxcXFxcXFwrL2csICdcXFxcJyk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgc2xhc2hlc1xuICAgIHJldHVybiBwLnJlcGxhY2UoL1xcL1xcLysvZywgJy8nKTtcbn1cbi8vIG9uIE1hYy9MaW51eCwgdGVzdCB0aGUgZXhlY3V0ZSBiaXRcbi8vICAgICBSICAgVyAgWCAgUiAgVyBYIFIgVyBYXG4vLyAgIDI1NiAxMjggNjQgMzIgMTYgOCA0IDIgMVxuZnVuY3Rpb24gaXNVbml4RXhlY3V0YWJsZShzdGF0cykge1xuICAgIHJldHVybiAoKHN0YXRzLm1vZGUgJiAxKSA+IDAgfHxcbiAgICAgICAgKChzdGF0cy5tb2RlICYgOCkgPiAwICYmIHN0YXRzLmdpZCA9PT0gcHJvY2Vzcy5nZXRnaWQoKSkgfHxcbiAgICAgICAgKChzdGF0cy5tb2RlICYgNjQpID4gMCAmJiBzdGF0cy51aWQgPT09IHByb2Nlc3MuZ2V0dWlkKCkpKTtcbn1cbi8vIEdldCB0aGUgcGF0aCBvZiBjbWQuZXhlIGluIHdpbmRvd3NcbmZ1bmN0aW9uIGdldENtZFBhdGgoKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9jZXNzLmVudlsnQ09NU1BFQyddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgY21kLmV4ZWA7XG59XG5leHBvcnRzLmdldENtZFBhdGggPSBnZXRDbWRQYXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW8tdXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maW5kSW5QYXRoID0gZXhwb3J0cy53aGljaCA9IGV4cG9ydHMubWtkaXJQID0gZXhwb3J0cy5ybVJGID0gZXhwb3J0cy5tdiA9IGV4cG9ydHMuY3AgPSB2b2lkIDA7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCJhc3NlcnRcIik7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbmNvbnN0IGlvVXRpbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9pby11dGlsXCIpKTtcbi8qKlxuICogQ29waWVzIGEgZmlsZSBvciBmb2xkZXIuXG4gKiBCYXNlZCBvZmYgb2Ygc2hlbGxqcyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9zaGVsbGpzL3NoZWxsanMvYmxvYi85MjM3ZjY2YzUyZTVkYWE0MDQ1OGY5NGY5NTY1ZTE4ZTgxMzJmNWE2L3NyYy9jcC5qc1xuICpcbiAqIEBwYXJhbSAgICAgc291cmNlICAgIHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0gICAgIGRlc3QgICAgICBkZXN0aW5hdGlvbiBwYXRoXG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgICBvcHRpb25hbC4gU2VlIENvcHlPcHRpb25zLlxuICovXG5mdW5jdGlvbiBjcChzb3VyY2UsIGRlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHsgZm9yY2UsIHJlY3Vyc2l2ZSwgY29weVNvdXJjZURpcmVjdG9yeSB9ID0gcmVhZENvcHlPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBkZXN0U3RhdCA9ICh5aWVsZCBpb1V0aWwuZXhpc3RzKGRlc3QpKSA/IHlpZWxkIGlvVXRpbC5zdGF0KGRlc3QpIDogbnVsbDtcbiAgICAgICAgLy8gRGVzdCBpcyBhbiBleGlzdGluZyBmaWxlLCBidXQgbm90IGZvcmNpbmdcbiAgICAgICAgaWYgKGRlc3RTdGF0ICYmIGRlc3RTdGF0LmlzRmlsZSgpICYmICFmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGRlc3QgaXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBzaG91bGQgY29weSBpbnNpZGUuXG4gICAgICAgIGNvbnN0IG5ld0Rlc3QgPSBkZXN0U3RhdCAmJiBkZXN0U3RhdC5pc0RpcmVjdG9yeSgpICYmIGNvcHlTb3VyY2VEaXJlY3RvcnlcbiAgICAgICAgICAgID8gcGF0aC5qb2luKGRlc3QsIHBhdGguYmFzZW5hbWUoc291cmNlKSlcbiAgICAgICAgICAgIDogZGVzdDtcbiAgICAgICAgaWYgKCEoeWllbGQgaW9VdGlsLmV4aXN0cyhzb3VyY2UpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAke3NvdXJjZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VTdGF0ID0geWllbGQgaW9VdGlsLnN0YXQoc291cmNlKTtcbiAgICAgICAgaWYgKHNvdXJjZVN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgaWYgKCFyZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjb3B5LiAke3NvdXJjZX0gaXMgYSBkaXJlY3RvcnksIGJ1dCB0cmllZCB0byBjb3B5IHdpdGhvdXQgcmVjdXJzaXZlIGZsYWcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjcERpclJlY3Vyc2l2ZShzb3VyY2UsIG5ld0Rlc3QsIDAsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXRoLnJlbGF0aXZlKHNvdXJjZSwgbmV3RGVzdCkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgLy8gYSBmaWxlIGNhbm5vdCBiZSBjb3BpZWQgdG8gaXRzZWxmXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuZXdEZXN0fScgYW5kICcke3NvdXJjZX0nIGFyZSB0aGUgc2FtZSBmaWxlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCBjb3B5RmlsZShzb3VyY2UsIG5ld0Rlc3QsIGZvcmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5jcCA9IGNwO1xuLyoqXG4gKiBNb3ZlcyBhIHBhdGguXG4gKlxuICogQHBhcmFtICAgICBzb3VyY2UgICAgc291cmNlIHBhdGhcbiAqIEBwYXJhbSAgICAgZGVzdCAgICAgIGRlc3RpbmF0aW9uIHBhdGhcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgIG9wdGlvbmFsLiBTZWUgTW92ZU9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG12KHNvdXJjZSwgZGVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCkpIHtcbiAgICAgICAgICAgIGxldCBkZXN0RXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh5aWVsZCBpb1V0aWwuaXNEaXJlY3RvcnkoZGVzdCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBkZXN0IGlzIGRpcmVjdG9yeSBjb3B5IHNyYyBpbnRvIGRlc3RcbiAgICAgICAgICAgICAgICBkZXN0ID0gcGF0aC5qb2luKGRlc3QsIHBhdGguYmFzZW5hbWUoc291cmNlKSk7XG4gICAgICAgICAgICAgICAgZGVzdEV4aXN0cyA9IHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVzdEV4aXN0cykge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZvcmNlID09IG51bGwgfHwgb3B0aW9ucy5mb3JjZSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBybVJGKGRlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBta2RpclAocGF0aC5kaXJuYW1lKGRlc3QpKTtcbiAgICAgICAgeWllbGQgaW9VdGlsLnJlbmFtZShzb3VyY2UsIGRlc3QpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5tdiA9IG12O1xuLyoqXG4gKiBSZW1vdmUgYSBwYXRoIHJlY3Vyc2l2ZWx5IHdpdGggZm9yY2VcbiAqXG4gKiBAcGFyYW0gaW5wdXRQYXRoIHBhdGggdG8gcmVtb3ZlXG4gKi9cbmZ1bmN0aW9uIHJtUkYoaW5wdXRQYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKGlvVXRpbC5JU19XSU5ET1dTKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgaW52YWxpZCBjaGFyYWN0ZXJzXG4gICAgICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2ZpbGVpby9uYW1pbmctYS1maWxlXG4gICAgICAgICAgICBpZiAoL1sqXCI8PnxdLy50ZXN0KGlucHV0UGF0aCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgcGF0aCBtdXN0IG5vdCBjb250YWluIGAqYCwgYFwiYCwgYDxgLCBgPmAgb3IgYHxgIG9uIFdpbmRvd3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gbm90ZSBpZiBwYXRoIGRvZXMgbm90IGV4aXN0LCBlcnJvciBpcyBzaWxlbnRcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5ybShpbnB1dFBhdGgsIHtcbiAgICAgICAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtYXhSZXRyaWVzOiAzLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXRyeURlbGF5OiAzMDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSB3YXMgdW5hYmxlIHRvIGJlIHJlbW92ZWQgJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMucm1SRiA9IHJtUkY7XG4vKipcbiAqIE1ha2UgYSBkaXJlY3RvcnkuICBDcmVhdGVzIHRoZSBmdWxsIHBhdGggd2l0aCBmb2xkZXJzIGluIGJldHdlZW5cbiAqIFdpbGwgdGhyb3cgaWYgaXQgZmFpbHNcbiAqXG4gKiBAcGFyYW0gICBmc1BhdGggICAgICAgIHBhdGggdG8gY3JlYXRlXG4gKiBAcmV0dXJucyBQcm9taXNlPHZvaWQ+XG4gKi9cbmZ1bmN0aW9uIG1rZGlyUChmc1BhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBhc3NlcnRfMS5vayhmc1BhdGgsICdhIHBhdGggYXJndW1lbnQgbXVzdCBiZSBwcm92aWRlZCcpO1xuICAgICAgICB5aWVsZCBpb1V0aWwubWtkaXIoZnNQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubWtkaXJQID0gbWtkaXJQO1xuLyoqXG4gKiBSZXR1cm5zIHBhdGggb2YgYSB0b29sIGhhZCB0aGUgdG9vbCBhY3R1YWxseSBiZWVuIGludm9rZWQuICBSZXNvbHZlcyB2aWEgcGF0aHMuXG4gKiBJZiB5b3UgY2hlY2sgYW5kIHRoZSB0b29sIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIHRocm93LlxuICpcbiAqIEBwYXJhbSAgICAgdG9vbCAgICAgICAgICAgICAgbmFtZSBvZiB0aGUgdG9vbFxuICogQHBhcmFtICAgICBjaGVjayAgICAgICAgICAgICB3aGV0aGVyIHRvIGNoZWNrIGlmIHRvb2wgZXhpc3RzXG4gKiBAcmV0dXJucyAgIFByb21pc2U8c3RyaW5nPiAgIHBhdGggdG8gdG9vbFxuICovXG5mdW5jdGlvbiB3aGljaCh0b29sLCBjaGVjaykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghdG9vbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicGFyYW1ldGVyICd0b29sJyBpcyByZXF1aXJlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWN1cnNpdmUgd2hlbiBjaGVjaz10cnVlXG4gICAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgd2hpY2godG9vbCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGV4ZWN1dGFibGUgZmlsZTogJHt0b29sfS4gUGxlYXNlIHZlcmlmeSBlaXRoZXIgdGhlIGZpbGUgcGF0aCBleGlzdHMgb3IgdGhlIGZpbGUgY2FuIGJlIGZvdW5kIHdpdGhpbiBhIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuIEFsc28gdmVyaWZ5IHRoZSBmaWxlIGhhcyBhIHZhbGlkIGV4dGVuc2lvbiBmb3IgYW4gZXhlY3V0YWJsZSBmaWxlLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGV4ZWN1dGFibGUgZmlsZTogJHt0b29sfS4gUGxlYXNlIHZlcmlmeSBlaXRoZXIgdGhlIGZpbGUgcGF0aCBleGlzdHMgb3IgdGhlIGZpbGUgY2FuIGJlIGZvdW5kIHdpdGhpbiBhIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuIEFsc28gY2hlY2sgdGhlIGZpbGUgbW9kZSB0byB2ZXJpZnkgdGhlIGZpbGUgaXMgZXhlY3V0YWJsZS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSB5aWVsZCBmaW5kSW5QYXRoKHRvb2wpO1xuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbn1cbmV4cG9ydHMud2hpY2ggPSB3aGljaDtcbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIG9jY3VycmVuY2VzIG9mIHRoZSBnaXZlbiB0b29sIG9uIHRoZSBzeXN0ZW0gcGF0aC5cbiAqXG4gKiBAcmV0dXJucyAgIFByb21pc2U8c3RyaW5nW10+ICB0aGUgcGF0aHMgb2YgdGhlIHRvb2xcbiAqL1xuZnVuY3Rpb24gZmluZEluUGF0aCh0b29sKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCF0b29sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgJ3Rvb2wnIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJ1aWxkIHRoZSBsaXN0IG9mIGV4dGVuc2lvbnMgdG8gdHJ5XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbXTtcbiAgICAgICAgaWYgKGlvVXRpbC5JU19XSU5ET1dTICYmIHByb2Nlc3MuZW52WydQQVRIRVhUJ10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0ZW5zaW9uIG9mIHByb2Nlc3MuZW52WydQQVRIRVhUJ10uc3BsaXQocGF0aC5kZWxpbWl0ZXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnB1c2goZXh0ZW5zaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgaXQncyByb290ZWQsIHJldHVybiBpdCBpZiBleGlzdHMuIG90aGVyd2lzZSByZXR1cm4gZW1wdHkuXG4gICAgICAgIGlmIChpb1V0aWwuaXNSb290ZWQodG9vbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgaW9VdGlsLnRyeUdldEV4ZWN1dGFibGVQYXRoKHRvb2wsIGV4dGVuc2lvbnMpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtmaWxlUGF0aF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYW55IHBhdGggc2VwYXJhdG9ycywgcmV0dXJuIGVtcHR5XG4gICAgICAgIGlmICh0b29sLmluY2x1ZGVzKHBhdGguc2VwKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJ1aWxkIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5vdGUsIHRlY2huaWNhbGx5IFwid2hlcmVcIiBjaGVja3MgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIFdpbmRvd3MuIEZyb20gYSB0b29sa2l0IHBlcnNwZWN0aXZlLFxuICAgICAgICAvLyBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBub3QgZG8gdGhpcy4gQ2hlY2tpbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHNlZW1zIGxpa2UgbW9yZSBvZiBhIHVzZVxuICAgICAgICAvLyBjYXNlIG9mIGEgc2hlbGwsIGFuZCB0aGUgd2hpY2goKSBmdW5jdGlvbiBleHBvc2VkIGJ5IHRoZSB0b29sa2l0IHNob3VsZCBzdHJpdmUgZm9yIGNvbnNpc3RlbmN5XG4gICAgICAgIC8vIGFjcm9zcyBwbGF0Zm9ybXMuXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yaWVzID0gW107XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5QQVRIKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvY2Vzcy5lbnYuUEFUSC5zcGxpdChwYXRoLmRlbGltaXRlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy5wdXNoKHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5kIGFsbCBtYXRjaGVzXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgZGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgaW9VdGlsLnRyeUdldEV4ZWN1dGFibGVQYXRoKHBhdGguam9pbihkaXJlY3RvcnksIHRvb2wpLCBleHRlbnNpb25zKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgfSk7XG59XG5leHBvcnRzLmZpbmRJblBhdGggPSBmaW5kSW5QYXRoO1xuZnVuY3Rpb24gcmVhZENvcHlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCBmb3JjZSA9IG9wdGlvbnMuZm9yY2UgPT0gbnVsbCA/IHRydWUgOiBvcHRpb25zLmZvcmNlO1xuICAgIGNvbnN0IHJlY3Vyc2l2ZSA9IEJvb2xlYW4ob3B0aW9ucy5yZWN1cnNpdmUpO1xuICAgIGNvbnN0IGNvcHlTb3VyY2VEaXJlY3RvcnkgPSBvcHRpb25zLmNvcHlTb3VyY2VEaXJlY3RvcnkgPT0gbnVsbFxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMuY29weVNvdXJjZURpcmVjdG9yeSk7XG4gICAgcmV0dXJuIHsgZm9yY2UsIHJlY3Vyc2l2ZSwgY29weVNvdXJjZURpcmVjdG9yeSB9O1xufVxuZnVuY3Rpb24gY3BEaXJSZWN1cnNpdmUoc291cmNlRGlyLCBkZXN0RGlyLCBjdXJyZW50RGVwdGgsIGZvcmNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gRW5zdXJlIHRoZXJlIGlzIG5vdCBhIHJ1biBhd2F5IHJlY3Vyc2l2ZSBjb3B5XG4gICAgICAgIGlmIChjdXJyZW50RGVwdGggPj0gMjU1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjdXJyZW50RGVwdGgrKztcbiAgICAgICAgeWllbGQgbWtkaXJQKGRlc3REaXIpO1xuICAgICAgICBjb25zdCBmaWxlcyA9IHlpZWxkIGlvVXRpbC5yZWFkZGlyKHNvdXJjZURpcik7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyY0ZpbGUgPSBgJHtzb3VyY2VEaXJ9LyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RGaWxlID0gYCR7ZGVzdERpcn0vJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgY29uc3Qgc3JjRmlsZVN0YXQgPSB5aWVsZCBpb1V0aWwubHN0YXQoc3JjRmlsZSk7XG4gICAgICAgICAgICBpZiAoc3JjRmlsZVN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2VcbiAgICAgICAgICAgICAgICB5aWVsZCBjcERpclJlY3Vyc2l2ZShzcmNGaWxlLCBkZXN0RmlsZSwgY3VycmVudERlcHRoLCBmb3JjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjb3B5RmlsZShzcmNGaWxlLCBkZXN0RmlsZSwgZm9yY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoYW5nZSB0aGUgbW9kZSBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5XG4gICAgICAgIHlpZWxkIGlvVXRpbC5jaG1vZChkZXN0RGlyLCAoeWllbGQgaW9VdGlsLnN0YXQoc291cmNlRGlyKSkubW9kZSk7XG4gICAgfSk7XG59XG4vLyBCdWZmZXJlZCBmaWxlIGNvcHlcbmZ1bmN0aW9uIGNvcHlGaWxlKHNyY0ZpbGUsIGRlc3RGaWxlLCBmb3JjZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICgoeWllbGQgaW9VdGlsLmxzdGF0KHNyY0ZpbGUpKS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAvLyB1bmxpbmsvcmUtbGluayBpdFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBpb1V0aWwubHN0YXQoZGVzdEZpbGUpO1xuICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC51bmxpbmsoZGVzdEZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gb3ZlcnJpZGUgZmlsZSBwZXJtaXNzaW9uXG4gICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBpb1V0aWwuY2htb2QoZGVzdEZpbGUsICcwNjY2Jyk7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC51bmxpbmsoZGVzdEZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBvdGhlciBlcnJvcnMgPSBpdCBkb2Vzbid0IGV4aXN0LCBubyB3b3JrIHRvIGRvXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb3B5IG92ZXIgc3ltbGlua1xuICAgICAgICAgICAgY29uc3Qgc3ltbGlua0Z1bGwgPSB5aWVsZCBpb1V0aWwucmVhZGxpbmsoc3JjRmlsZSk7XG4gICAgICAgICAgICB5aWVsZCBpb1V0aWwuc3ltbGluayhzeW1saW5rRnVsbCwgZGVzdEZpbGUsIGlvVXRpbC5JU19XSU5ET1dTID8gJ2p1bmN0aW9uJyA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoeWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0RmlsZSkpIHx8IGZvcmNlKSB7XG4gICAgICAgICAgICB5aWVsZCBpb1V0aWwuY29weUZpbGUoc3JjRmlsZSwgZGVzdEZpbGUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pby5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hcmdTdHJpbmdUb0FycmF5ID0gZXhwb3J0cy5Ub29sUnVubmVyID0gdm9pZCAwO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IGV2ZW50cyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZXZlbnRzXCIpKTtcbmNvbnN0IGNoaWxkID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3QgaW8gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2lvXCIpKTtcbmNvbnN0IGlvVXRpbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaW8vbGliL2lvLXV0aWxcIikpO1xuY29uc3QgdGltZXJzXzEgPSByZXF1aXJlKFwidGltZXJzXCIpO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kICovXG5jb25zdCBJU19XSU5ET1dTID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbi8qXG4gKiBDbGFzcyBmb3IgcnVubmluZyBjb21tYW5kIGxpbmUgdG9vbHMuIEhhbmRsZXMgcXVvdGluZyBhbmQgYXJnIHBhcnNpbmcgaW4gYSBwbGF0Zm9ybSBhZ25vc3RpYyB3YXkuXG4gKi9cbmNsYXNzIFRvb2xSdW5uZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih0b29sUGF0aCwgYXJncywgb3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAoIXRvb2xQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgJ3Rvb2xQYXRoJyBjYW5ub3QgYmUgbnVsbCBvciBlbXB0eS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b29sUGF0aCA9IHRvb2xQYXRoO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzIHx8IFtdO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIH1cbiAgICBfZGVidWcobWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmRlYnVnKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmRlYnVnKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9nZXRDb21tYW5kU3RyaW5nKG9wdGlvbnMsIG5vUHJlZml4KSB7XG4gICAgICAgIGNvbnN0IHRvb2xQYXRoID0gdGhpcy5fZ2V0U3Bhd25GaWxlTmFtZSgpO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5fZ2V0U3Bhd25BcmdzKG9wdGlvbnMpO1xuICAgICAgICBsZXQgY21kID0gbm9QcmVmaXggPyAnJyA6ICdbY29tbWFuZF0nOyAvLyBvbWl0IHByZWZpeCB3aGVuIHBpcGVkIHRvIGEgc2Vjb25kIHRvb2xcbiAgICAgICAgaWYgKElTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIC8vIFdpbmRvd3MgKyBjbWQgZmlsZVxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ21kRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgY21kICs9IHRvb2xQYXRoO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNtZCArPSBgICR7YX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdpbmRvd3MgKyB2ZXJiYXRpbVxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMpIHtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYFwiJHt0b29sUGF0aH1cImA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2luZG93cyAocmVndWxhcilcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNtZCArPSB0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcodG9vbFBhdGgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNtZCArPSBgICR7dGhpcy5fd2luZG93c1F1b3RlQ21kQXJnKGEpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gT1NYL0xpbnV4IC0gdGhpcyBjYW4gbGlrZWx5IGJlIGltcHJvdmVkIHdpdGggc29tZSBmb3JtIG9mIHF1b3RpbmcuXG4gICAgICAgICAgICAvLyBjcmVhdGluZyBwcm9jZXNzZXMgb24gVW5peCBpcyBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCB0aGFuIFdpbmRvd3MuXG4gICAgICAgICAgICAvLyBvbiBVbml4LCBleGVjdnAoKSB0YWtlcyBhbiBhcmcgYXJyYXkuXG4gICAgICAgICAgICBjbWQgKz0gdG9vbFBhdGg7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGEgb2YgYXJncykge1xuICAgICAgICAgICAgICAgIGNtZCArPSBgICR7YX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuICAgIF9wcm9jZXNzTGluZUJ1ZmZlcihkYXRhLCBzdHJCdWZmZXIsIG9uTGluZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHMgPSBzdHJCdWZmZXIgKyBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBsZXQgbiA9IHMuaW5kZXhPZihvcy5FT0wpO1xuICAgICAgICAgICAgd2hpbGUgKG4gPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBzLnN1YnN0cmluZygwLCBuKTtcbiAgICAgICAgICAgICAgICBvbkxpbmUobGluZSk7XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAuLi5cbiAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcobiArIG9zLkVPTC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIG4gPSBzLmluZGV4T2Yob3MuRU9MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHN0cmVhbWluZyBsaW5lcyB0byBjb25zb2xlIGlzIGJlc3QgZWZmb3J0LiAgRG9uJ3QgZmFpbCBhIGJ1aWxkLlxuICAgICAgICAgICAgdGhpcy5fZGVidWcoYGVycm9yIHByb2Nlc3NpbmcgbGluZS4gRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YCk7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldFNwYXduRmlsZU5hbWUoKSB7XG4gICAgICAgIGlmIChJU19XSU5ET1dTKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0NPTVNQRUMnXSB8fCAnY21kLmV4ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbFBhdGg7XG4gICAgfVxuICAgIF9nZXRTcGF3bkFyZ3Mob3B0aW9ucykge1xuICAgICAgICBpZiAoSVNfV0lORE9XUykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ21kRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyZ2xpbmUgPSBgL0QgL1MgL0MgXCIke3RoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyh0aGlzLnRvb2xQYXRoKX1gO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnbGluZSArPSAnICc7XG4gICAgICAgICAgICAgICAgICAgIGFyZ2xpbmUgKz0gb3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcoYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFyZ2xpbmUgKz0gJ1wiJztcbiAgICAgICAgICAgICAgICByZXR1cm4gW2FyZ2xpbmVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gICAgfVxuICAgIF9lbmRzV2l0aChzdHIsIGVuZCkge1xuICAgICAgICByZXR1cm4gc3RyLmVuZHNXaXRoKGVuZCk7XG4gICAgfVxuICAgIF9pc0NtZEZpbGUoKSB7XG4gICAgICAgIGNvbnN0IHVwcGVyVG9vbFBhdGggPSB0aGlzLnRvb2xQYXRoLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiAodGhpcy5fZW5kc1dpdGgodXBwZXJUb29sUGF0aCwgJy5DTUQnKSB8fFxuICAgICAgICAgICAgdGhpcy5fZW5kc1dpdGgodXBwZXJUb29sUGF0aCwgJy5CQVQnKSk7XG4gICAgfVxuICAgIF93aW5kb3dzUXVvdGVDbWRBcmcoYXJnKSB7XG4gICAgICAgIC8vIGZvciAuZXhlLCBhcHBseSB0aGUgbm9ybWFsIHF1b3RpbmcgcnVsZXMgdGhhdCBsaWJ1diBhcHBsaWVzXG4gICAgICAgIGlmICghdGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91dlF1b3RlQ21kQXJnKGFyZyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFwcGx5IHF1b3RpbmcgcnVsZXMgc3BlY2lmaWMgdG8gdGhlIGNtZC5leGUgY29tbWFuZCBsaW5lIHBhcnNlci5cbiAgICAgICAgLy8gdGhlIGxpYnV2IHJ1bGVzIGFyZSBnZW5lcmljIGFuZCBhcmUgbm90IGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgY21kLmV4ZVxuICAgICAgICAvLyBjb21tYW5kIGxpbmUgcGFyc2VyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgY21kLmV4ZSBjb21tYW5kIGxpbmUgcGFyc2VyLCByZWZlciB0b1xuICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwOTQ2OTkvaG93LWRvZXMtdGhlLXdpbmRvd3MtY29tbWFuZC1pbnRlcnByZXRlci1jbWQtZXhlLXBhcnNlLXNjcmlwdHMvNzk3MDkxMiM3OTcwOTEyXG4gICAgICAgIC8vIG5lZWQgcXVvdGVzIGZvciBlbXB0eSBhcmdcbiAgICAgICAgaWYgKCFhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiAnXCJcIic7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFyZyBuZWVkcyB0byBiZSBxdW90ZWRcbiAgICAgICAgY29uc3QgY21kU3BlY2lhbENoYXJzID0gW1xuICAgICAgICAgICAgJyAnLFxuICAgICAgICAgICAgJ1xcdCcsXG4gICAgICAgICAgICAnJicsXG4gICAgICAgICAgICAnKCcsXG4gICAgICAgICAgICAnKScsXG4gICAgICAgICAgICAnWycsXG4gICAgICAgICAgICAnXScsXG4gICAgICAgICAgICAneycsXG4gICAgICAgICAgICAnfScsXG4gICAgICAgICAgICAnXicsXG4gICAgICAgICAgICAnPScsXG4gICAgICAgICAgICAnOycsXG4gICAgICAgICAgICAnIScsXG4gICAgICAgICAgICBcIidcIixcbiAgICAgICAgICAgICcrJyxcbiAgICAgICAgICAgICcsJyxcbiAgICAgICAgICAgICdgJyxcbiAgICAgICAgICAgICd+JyxcbiAgICAgICAgICAgICd8JyxcbiAgICAgICAgICAgICc8JyxcbiAgICAgICAgICAgICc+JyxcbiAgICAgICAgICAgICdcIidcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IG5lZWRzUXVvdGVzID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgY2hhciBvZiBhcmcpIHtcbiAgICAgICAgICAgIGlmIChjbWRTcGVjaWFsQ2hhcnMuc29tZSh4ID0+IHggPT09IGNoYXIpKSB7XG4gICAgICAgICAgICAgICAgbmVlZHNRdW90ZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNob3J0LWNpcmN1aXQgaWYgcXVvdGVzIG5vdCBuZWVkZWRcbiAgICAgICAgaWYgKCFuZWVkc1F1b3Rlcykge1xuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgZm9sbG93aW5nIHF1b3RpbmcgcnVsZXMgYXJlIHZlcnkgc2ltaWxhciB0byB0aGUgcnVsZXMgdGhhdCBieSBsaWJ1diBhcHBsaWVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyAxKSB3cmFwIHRoZSBzdHJpbmcgaW4gcXVvdGVzXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDIpIGRvdWJsZS11cCBxdW90ZXMgLSBpLmUuIFwiID0+IFwiXCJcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGlidXYgcXVvdGluZyBydWxlcy4gbGlidXYgcmVwbGFjZXMgXCIgd2l0aCBcXFwiLCB3aGljaCB1bmZvcnR1bmF0ZWx5XG4gICAgICAgIC8vICAgIGRvZXNuJ3Qgd29yayB3ZWxsIHdpdGggYSBjbWQuZXhlIGNvbW1hbmQgbGluZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgbm90ZSwgcmVwbGFjaW5nIFwiIHdpdGggXCJcIiBhbHNvIHdvcmtzIHdlbGwgaWYgdGhlIGFyZyBpcyBwYXNzZWQgdG8gYSBkb3duc3RyZWFtIC5ORVQgY29uc29sZSBhcHAuXG4gICAgICAgIC8vICAgIGZvciBleGFtcGxlLCB0aGUgY29tbWFuZCBsaW5lOlxuICAgICAgICAvLyAgICAgICAgICBmb28uZXhlIFwibXlhcmc6XCJcIm15IHZhbFwiXCJcIlxuICAgICAgICAvLyAgICBpcyBwYXJzZWQgYnkgYSAuTkVUIGNvbnNvbGUgYXBwIGludG8gYW4gYXJnIGFycmF5OlxuICAgICAgICAvLyAgICAgICAgICBbIFwibXlhcmc6XFxcIm15IHZhbFxcXCJcIiBdXG4gICAgICAgIC8vICAgIHdoaWNoIGlzIHRoZSBzYW1lIGVuZCByZXN1bHQgd2hlbiBhcHBseWluZyBsaWJ1diBxdW90aW5nIHJ1bGVzLiBhbHRob3VnaCB0aGUgYWN0dWFsXG4gICAgICAgIC8vICAgIGNvbW1hbmQgbGluZSBmcm9tIGxpYnV2IHF1b3RpbmcgcnVsZXMgd291bGQgbG9vayBsaWtlOlxuICAgICAgICAvLyAgICAgICAgICBmb28uZXhlIFwibXlhcmc6XFxcIm15IHZhbFxcXCJcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAzKSBkb3VibGUtdXAgc2xhc2hlcyB0aGF0IHByZWNlZGUgYSBxdW90ZSxcbiAgICAgICAgLy8gICAgZS5nLiAgaGVsbG8gXFx3b3JsZCAgICA9PiBcImhlbGxvIFxcd29ybGRcIlxuICAgICAgICAvLyAgICAgICAgICBoZWxsb1xcXCJ3b3JsZCAgICA9PiBcImhlbGxvXFxcXFwiXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvXFxcXFwid29ybGQgICA9PiBcImhlbGxvXFxcXFxcXFxcIlwid29ybGRcIlxuICAgICAgICAvLyAgICAgICAgICBoZWxsbyB3b3JsZFxcICAgID0+IFwiaGVsbG8gd29ybGRcXFxcXCJcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgdGVjaG5pY2FsbHkgdGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIGEgY21kLmV4ZSBjb21tYW5kIGxpbmUsIG9yIHRoZSBiYXRjaCBhcmd1bWVudCBwYXJzZXIuXG4gICAgICAgIC8vICAgIHRoZSByZWFzb25zIGZvciBpbmNsdWRpbmcgdGhpcyBhcyBhIC5jbWQgcXVvdGluZyBydWxlIGFyZTpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgYSkgdGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgYXJndW1lbnQgaXMgcGFzc2VkIGZyb20gdGhlIC5jbWQgZmlsZSB0byBhblxuICAgICAgICAvLyAgICAgICBleHRlcm5hbCBwcm9ncmFtLiBtYW55IHByb2dyYW1zIChlLmcuIC5ORVQgY29uc29sZSBhcHBzKSByZWx5IG9uIHRoZSBzbGFzaC1kb3VibGluZyBydWxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBiKSBpdCdzIHdoYXQgd2UndmUgYmVlbiBkb2luZyBwcmV2aW91c2x5IChieSBkZWZlcnJpbmcgdG8gbm9kZSBkZWZhdWx0IGJlaGF2aW9yKSBhbmQgd2VcbiAgICAgICAgLy8gICAgICAgaGF2ZW4ndCBoZWFyZCBhbnkgY29tcGxhaW50cyBhYm91dCB0aGF0IGFzcGVjdC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gbm90ZSwgYSB3ZWFrbmVzcyBvZiB0aGUgcXVvdGluZyBydWxlcyBjaG9zZW4gaGVyZSwgaXMgdGhhdCAlIGlzIG5vdCBlc2NhcGVkLiBpbiBmYWN0LCAlIGNhbm5vdCBiZVxuICAgICAgICAvLyBlc2NhcGVkIHdoZW4gdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lIGRpcmVjdGx5IC0gZXZlbiB0aG91Z2ggd2l0aGluIGEgLmNtZCBmaWxlICUgY2FuIGJlIGVzY2FwZWRcbiAgICAgICAgLy8gYnkgdXNpbmcgJSUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIHRoZSBzYXZpbmcgZ3JhY2UgaXMsIG9uIHRoZSBjb21tYW5kIGxpbmUsICV2YXIlIGlzIGxlZnQgYXMtaXMgaWYgdmFyIGlzIG5vdCBkZWZpbmVkLiB0aGlzIGNvbnRyYXN0c1xuICAgICAgICAvLyB0aGUgbGluZSBwYXJzaW5nIHJ1bGVzIHdpdGhpbiBhIC5jbWQgZmlsZSwgd2hlcmUgaWYgdmFyIGlzIG5vdCBkZWZpbmVkIGl0IGlzIHJlcGxhY2VkIHdpdGggbm90aGluZy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gb25lIG9wdGlvbiB0aGF0IHdhcyBleHBsb3JlZCB3YXMgcmVwbGFjaW5nICUgd2l0aCBeJSAtIGkuZS4gJXZhciUgPT4gXiV2YXJeJS4gdGhpcyBoYWNrIHdvdWxkXG4gICAgICAgIC8vIG9mdGVuIHdvcmssIHNpbmNlIGl0IGlzIHVubGlrZWx5IHRoYXQgdmFyXiB3b3VsZCBleGlzdCwgYW5kIHRoZSBeIGNoYXJhY3RlciBpcyByZW1vdmVkIHdoZW4gdGhlXG4gICAgICAgIC8vIHZhcmlhYmxlIGlzIHVzZWQuIHRoZSBwcm9ibGVtLCBob3dldmVyLCBpcyB0aGF0IF4gaXMgbm90IHJlbW92ZWQgd2hlbiAlKiBpcyB1c2VkIHRvIHBhc3MgdGhlIGFyZ3NcbiAgICAgICAgLy8gdG8gYW4gZXh0ZXJuYWwgcHJvZ3JhbS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYW4gdW5leHBsb3JlZCBwb3RlbnRpYWwgc29sdXRpb24gZm9yIHRoZSAlIGVzY2FwaW5nIHByb2JsZW0sIGlzIHRvIGNyZWF0ZSBhIHdyYXBwZXIgLmNtZCBmaWxlLlxuICAgICAgICAvLyAlIGNhbiBiZSBlc2NhcGVkIHdpdGhpbiBhIC5jbWQgZmlsZS5cbiAgICAgICAgbGV0IHJldmVyc2UgPSAnXCInO1xuICAgICAgICBsZXQgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gYXJnLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgLy8gd2FsayB0aGUgc3RyaW5nIGluIHJldmVyc2VcbiAgICAgICAgICAgIHJldmVyc2UgKz0gYXJnW2kgLSAxXTtcbiAgICAgICAgICAgIGlmIChxdW90ZUhpdCAmJiBhcmdbaSAtIDFdID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcXFxcJzsgLy8gZG91YmxlIHRoZSBzbGFzaFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnW2kgLSAxXSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgICAgIHF1b3RlSGl0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcIic7IC8vIGRvdWJsZSB0aGUgcXVvdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1b3RlSGl0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV2ZXJzZSArPSAnXCInO1xuICAgICAgICByZXR1cm4gcmV2ZXJzZVxuICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgIH1cbiAgICBfdXZRdW90ZUNtZEFyZyhhcmcpIHtcbiAgICAgICAgLy8gVG9vbCBydW5uZXIgd3JhcHMgY2hpbGRfcHJvY2Vzcy5zcGF3bigpIGFuZCBuZWVkcyB0byBhcHBseSB0aGUgc2FtZSBxdW90aW5nIGFzXG4gICAgICAgIC8vIE5vZGUgaW4gY2VydGFpbiBjYXNlcyB3aGVyZSB0aGUgdW5kb2N1bWVudGVkIHNwYXduIG9wdGlvbiB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHNcbiAgICAgICAgLy8gaXMgdXNlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBhIHBvcnQgb2YgcXVvdGVfY21kX2FyZyBmcm9tIE5vZGUgNC54ICh0ZWNobmljYWxseSwgbGliIFVWLFxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvdjQueC9kZXBzL3V2L3NyYy93aW4vcHJvY2Vzcy5jIGZvciBkZXRhaWxzKSxcbiAgICAgICAgLy8gcGFzdGluZyBjb3B5cmlnaHQgbm90aWNlIGZyb20gTm9kZSB3aXRoaW4gdGhpcyBmdW5jdGlvbjpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gICAgICAgIC8vICAgICAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAgICAgICAgLy8gICAgICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuICAgICAgICAvLyAgICAgIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuICAgICAgICAvLyAgICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gICAgICAgIC8vICAgICAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICAgICAgICAvLyAgICAgIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAgICAgICAgLy8gICAgICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAgICAgICAgLy8gICAgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAgICAgICAgLy8gICAgICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gICAgICAgIC8vICAgICAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAgICAgICAgLy8gICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTXG4gICAgICAgIC8vICAgICAgSU4gVEhFIFNPRlRXQVJFLlxuICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgLy8gTmVlZCBkb3VibGUgcXVvdGF0aW9uIGZvciBlbXB0eSBhcmd1bWVudFxuICAgICAgICAgICAgcmV0dXJuICdcIlwiJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZy5pbmNsdWRlcygnICcpICYmICFhcmcuaW5jbHVkZXMoJ1xcdCcpICYmICFhcmcuaW5jbHVkZXMoJ1wiJykpIHtcbiAgICAgICAgICAgIC8vIE5vIHF1b3RhdGlvbiBuZWVkZWRcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcmcuaW5jbHVkZXMoJ1wiJykgJiYgIWFyZy5pbmNsdWRlcygnXFxcXCcpKSB7XG4gICAgICAgICAgICAvLyBObyBlbWJlZGRlZCBkb3VibGUgcXVvdGVzIG9yIGJhY2tzbGFzaGVzLCBzbyBJIGNhbiBqdXN0IHdyYXBcbiAgICAgICAgICAgIC8vIHF1b3RlIG1hcmtzIGFyb3VuZCB0aGUgd2hvbGUgdGhpbmcuXG4gICAgICAgICAgICByZXR1cm4gYFwiJHthcmd9XCJgO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4cGVjdGVkIGlucHV0L291dHB1dDpcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1wiXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXCJcXFwid29ybGRcIlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXHdvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBoZWxsb1xcd29ybGRcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXFxcXHdvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBoZWxsb1xcXFx3b3JsZFxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFwid29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG9cXFxcXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXFxcXFwid29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG9cXFxcXFxcXFxcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsbyB3b3JsZFxcXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvIHdvcmxkXFxcXFwiIC0gbm90ZSB0aGUgY29tbWVudCBpbiBsaWJ1diBhY3R1YWxseSByZWFkcyBcImhlbGxvIHdvcmxkXFxcIlxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGl0IGFwcGVhcnMgdGhlIGNvbW1lbnQgaXMgd3JvbmcsIGl0IHNob3VsZCBiZSBcImhlbGxvIHdvcmxkXFxcXFwiXG4gICAgICAgIGxldCByZXZlcnNlID0gJ1wiJztcbiAgICAgICAgbGV0IHF1b3RlSGl0ID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGFyZy5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgIC8vIHdhbGsgdGhlIHN0cmluZyBpbiByZXZlcnNlXG4gICAgICAgICAgICByZXZlcnNlICs9IGFyZ1tpIC0gMV07XG4gICAgICAgICAgICBpZiAocXVvdGVIaXQgJiYgYXJnW2kgLSAxXSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgcmV2ZXJzZSArPSAnXFxcXCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmdbaSAtIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1xcXFwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXZlcnNlICs9ICdcIic7XG4gICAgICAgIHJldHVybiByZXZlcnNlXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuICAgIF9jbG9uZUV4ZWNPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgIGVudjogb3B0aW9ucy5lbnYgfHwgcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgICBzaWxlbnQ6IG9wdGlvbnMuc2lsZW50IHx8IGZhbHNlLFxuICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyB8fCBmYWxzZSxcbiAgICAgICAgICAgIGZhaWxPblN0ZEVycjogb3B0aW9ucy5mYWlsT25TdGRFcnIgfHwgZmFsc2UsXG4gICAgICAgICAgICBpZ25vcmVSZXR1cm5Db2RlOiBvcHRpb25zLmlnbm9yZVJldHVybkNvZGUgfHwgZmFsc2UsXG4gICAgICAgICAgICBkZWxheTogb3B0aW9ucy5kZWxheSB8fCAxMDAwMFxuICAgICAgICB9O1xuICAgICAgICByZXN1bHQub3V0U3RyZWFtID0gb3B0aW9ucy5vdXRTdHJlYW0gfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgICAgIHJlc3VsdC5lcnJTdHJlYW0gPSBvcHRpb25zLmVyclN0cmVhbSB8fCBwcm9jZXNzLnN0ZGVycjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX2dldFNwYXduT3B0aW9ucyhvcHRpb25zLCB0b29sUGF0aCkge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIHJlc3VsdC5jd2QgPSBvcHRpb25zLmN3ZDtcbiAgICAgICAgcmVzdWx0LmVudiA9IG9wdGlvbnMuZW52O1xuICAgICAgICByZXN1bHRbJ3dpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyddID1cbiAgICAgICAgICAgIG9wdGlvbnMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzIHx8IHRoaXMuX2lzQ21kRmlsZSgpO1xuICAgICAgICBpZiAob3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcmd2MCA9IGBcIiR7dG9vbFBhdGh9XCJgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWMgYSB0b29sLlxuICAgICAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gICAgICogUmV0dXJucyBwcm9taXNlIHdpdGggcmV0dXJuIGNvZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgICAgdG9vbCAgICAgcGF0aCB0byB0b29sIHRvIGV4ZWNcbiAgICAgKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsIGV4ZWMgb3B0aW9ucy4gIFNlZSBFeGVjT3B0aW9uc1xuICAgICAqIEByZXR1cm5zICAgbnVtYmVyXG4gICAgICovXG4gICAgZXhlYygpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIC8vIHJvb3QgdGhlIHRvb2wgcGF0aCBpZiBpdCBpcyB1bnJvb3RlZCBhbmQgY29udGFpbnMgcmVsYXRpdmUgcGF0aGluZ1xuICAgICAgICAgICAgaWYgKCFpb1V0aWwuaXNSb290ZWQodGhpcy50b29sUGF0aCkgJiZcbiAgICAgICAgICAgICAgICAodGhpcy50b29sUGF0aC5pbmNsdWRlcygnLycpIHx8XG4gICAgICAgICAgICAgICAgICAgIChJU19XSU5ET1dTICYmIHRoaXMudG9vbFBhdGguaW5jbHVkZXMoJ1xcXFwnKSkpKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJlZmVyIG9wdGlvbnMuY3dkIGlmIGl0IGlzIHNwZWNpZmllZCwgaG93ZXZlciBvcHRpb25zLmN3ZCBtYXkgYWxzbyBuZWVkIHRvIGJlIHJvb3RlZFxuICAgICAgICAgICAgICAgIHRoaXMudG9vbFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgdGhpcy5vcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpLCB0aGlzLnRvb2xQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIHRoZSB0b29sIGlzIG9ubHkgYSBmaWxlIG5hbWUsIHRoZW4gcmVzb2x2ZSBpdCBmcm9tIHRoZSBQQVRIXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgdmVyaWZ5IGl0IGV4aXN0cyAoYWRkIGV4dGVuc2lvbiBvbiBXaW5kb3dzIGlmIG5lY2Vzc2FyeSlcbiAgICAgICAgICAgIHRoaXMudG9vbFBhdGggPSB5aWVsZCBpby53aGljaCh0aGlzLnRvb2xQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYGV4ZWMgdG9vbDogJHt0aGlzLnRvb2xQYXRofWApO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCdhcmd1bWVudHM6Jyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5hcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKGAgICAke2FyZ31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uc05vbk51bGwgPSB0aGlzLl9jbG9uZUV4ZWNPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zTm9uTnVsbC5zaWxlbnQgJiYgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbS53cml0ZSh0aGlzLl9nZXRDb21tYW5kU3RyaW5nKG9wdGlvbnNOb25OdWxsKSArIG9zLkVPTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gbmV3IEV4ZWNTdGF0ZShvcHRpb25zTm9uTnVsbCwgdGhpcy50b29sUGF0aCk7XG4gICAgICAgICAgICAgICAgc3RhdGUub24oJ2RlYnVnJywgKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jd2QgJiYgISh5aWVsZCBpb1V0aWwuZXhpc3RzKHRoaXMub3B0aW9ucy5jd2QpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgVGhlIGN3ZDogJHt0aGlzLm9wdGlvbnMuY3dkfSBkb2VzIG5vdCBleGlzdCFgKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5fZ2V0U3Bhd25GaWxlTmFtZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNwID0gY2hpbGQuc3Bhd24oZmlsZU5hbWUsIHRoaXMuX2dldFNwYXduQXJncyhvcHRpb25zTm9uTnVsbCksIHRoaXMuX2dldFNwYXduT3B0aW9ucyh0aGlzLm9wdGlvbnMsIGZpbGVOYW1lKSk7XG4gICAgICAgICAgICAgICAgbGV0IHN0ZGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjcC5zdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3Auc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuc3Rkb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRvdXQoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0ud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGRidWZmZXIgPSB0aGlzLl9wcm9jZXNzTGluZUJ1ZmZlcihkYXRhLCBzdGRidWZmZXIsIChsaW5lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuc3RkbGluZShsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBlcnJidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoY3Auc3RkZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNwLnN0ZGVyci5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzU3RkZXJyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuc3RkZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRlcnIoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLmVyclN0cmVhbSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBvcHRpb25zTm9uTnVsbC5mYWlsT25TdGRFcnJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zTm9uTnVsbC5lcnJTdHJlYW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycmJ1ZmZlciA9IHRoaXMuX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIGVycmJ1ZmZlciwgKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmVycmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5lcnJsaW5lKGxpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3Aub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5DaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3Aub24oJ2V4aXQnLCAoY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdENvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYEV4aXQgY29kZSAke2NvZGV9IHJlY2VpdmVkIGZyb20gdG9vbCAnJHt0aGlzLnRvb2xQYXRofSdgKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuQ2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNwLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0Q29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYFNURElPIHN0cmVhbXMgaGF2ZSBjbG9zZWQgZm9yIHRvb2wgJyR7dGhpcy50b29sUGF0aH0nYCk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLkNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5vbignZG9uZScsIChlcnJvciwgZXhpdENvZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0ZGxpbmUnLCBzdGRidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJidWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJsaW5lJywgZXJyYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjcC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShleGl0Q29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3Auc3RkaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2hpbGQgcHJvY2VzcyBtaXNzaW5nIHN0ZGluJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3Auc3RkaW4uZW5kKHRoaXMub3B0aW9ucy5pbnB1dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlRvb2xSdW5uZXIgPSBUb29sUnVubmVyO1xuLyoqXG4gKiBDb252ZXJ0IGFuIGFyZyBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgYXJncy4gSGFuZGxlcyBlc2NhcGluZ1xuICpcbiAqIEBwYXJhbSAgICBhcmdTdHJpbmcgICBzdHJpbmcgb2YgYXJndW1lbnRzXG4gKiBAcmV0dXJucyAgc3RyaW5nW10gICAgYXJyYXkgb2YgYXJndW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGFyZ1N0cmluZ1RvQXJyYXkoYXJnU3RyaW5nKSB7XG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIGxldCBpblF1b3RlcyA9IGZhbHNlO1xuICAgIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gICAgbGV0IGFyZyA9ICcnO1xuICAgIGZ1bmN0aW9uIGFwcGVuZChjKSB7XG4gICAgICAgIC8vIHdlIG9ubHkgZXNjYXBlIGRvdWJsZSBxdW90ZXMuXG4gICAgICAgIGlmIChlc2NhcGVkICYmIGMgIT09ICdcIicpIHtcbiAgICAgICAgICAgIGFyZyArPSAnXFxcXCc7XG4gICAgICAgIH1cbiAgICAgICAgYXJnICs9IGM7XG4gICAgICAgIGVzY2FwZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IGFyZ1N0cmluZy5jaGFyQXQoaSk7XG4gICAgICAgIGlmIChjID09PSAnXCInKSB7XG4gICAgICAgICAgICBpZiAoIWVzY2FwZWQpIHtcbiAgICAgICAgICAgICAgICBpblF1b3RlcyA9ICFpblF1b3RlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwcGVuZChjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcgJiYgZXNjYXBlZCkge1xuICAgICAgICAgICAgYXBwZW5kKGMpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJyAmJiBpblF1b3Rlcykge1xuICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJyAnICYmICFpblF1b3Rlcykge1xuICAgICAgICAgICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgYXJnID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhcHBlbmQoYyk7XG4gICAgfVxuICAgIGlmIChhcmcubGVuZ3RoID4gMCkge1xuICAgICAgICBhcmdzLnB1c2goYXJnLnRyaW0oKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5hcmdTdHJpbmdUb0FycmF5ID0gYXJnU3RyaW5nVG9BcnJheTtcbmNsYXNzIEV4ZWNTdGF0ZSBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIHRvb2xQYXRoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0Nsb3NlZCA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciB0aGUgcHJvY2VzcyBoYXMgZXhpdGVkIGFuZCBzdGRpbyBpcyBjbG9zZWRcbiAgICAgICAgdGhpcy5wcm9jZXNzRXJyb3IgPSAnJztcbiAgICAgICAgdGhpcy5wcm9jZXNzRXhpdENvZGUgPSAwO1xuICAgICAgICB0aGlzLnByb2Nlc3NFeGl0ZWQgPSBmYWxzZTsgLy8gdHJhY2tzIHdoZXRoZXIgdGhlIHByb2Nlc3MgaGFzIGV4aXRlZFxuICAgICAgICB0aGlzLnByb2Nlc3NTdGRlcnIgPSBmYWxzZTsgLy8gdHJhY2tzIHdoZXRoZXIgc3RkZXJyIHdhcyB3cml0dGVuIHRvXG4gICAgICAgIHRoaXMuZGVsYXkgPSAxMDAwMDsgLy8gMTAgc2Vjb25kc1xuICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCF0b29sUGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b29sUGF0aCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMudG9vbFBhdGggPSB0b29sUGF0aDtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGVsYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBvcHRpb25zLmRlbGF5O1xuICAgICAgICB9XG4gICAgfVxuICAgIENoZWNrQ29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9jZXNzQ2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSZXN1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVyc18xLnNldFRpbWVvdXQoRXhlY1N0YXRlLkhhbmRsZVRpbWVvdXQsIHRoaXMuZGVsYXksIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9kZWJ1ZyhtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnZGVidWcnLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgX3NldFJlc3VsdCgpIHtcbiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUgaXMgYW4gZXJyb3JcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBpZiAodGhpcy5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9jZXNzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihgVGhlcmUgd2FzIGFuIGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBleGVjdXRlIHRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9Jy4gVGhpcyBtYXkgaW5kaWNhdGUgdGhlIHByb2Nlc3MgZmFpbGVkIHRvIHN0YXJ0LiBFcnJvcjogJHt0aGlzLnByb2Nlc3NFcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc0V4aXRDb2RlICE9PSAwICYmICF0aGlzLm9wdGlvbnMuaWdub3JlUmV0dXJuQ29kZSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGUgcHJvY2VzcyAnJHt0aGlzLnRvb2xQYXRofScgZmFpbGVkIHdpdGggZXhpdCBjb2RlICR7dGhpcy5wcm9jZXNzRXhpdENvZGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnByb2Nlc3NTdGRlcnIgJiYgdGhpcy5vcHRpb25zLmZhaWxPblN0ZEVycikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGUgcHJvY2VzcyAnJHt0aGlzLnRvb2xQYXRofScgZmFpbGVkIGJlY2F1c2Ugb25lIG9yIG1vcmUgbGluZXMgd2VyZSB3cml0dGVuIHRvIHRoZSBTVERFUlIgc3RyZWFtYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRpbWVvdXRcbiAgICAgICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgnZG9uZScsIGVycm9yLCB0aGlzLnByb2Nlc3NFeGl0Q29kZSk7XG4gICAgfVxuICAgIHN0YXRpYyBIYW5kbGVUaW1lb3V0KHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZS5wcm9jZXNzQ2xvc2VkICYmIHN0YXRlLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgVGhlIFNURElPIHN0cmVhbXMgZGlkIG5vdCBjbG9zZSB3aXRoaW4gJHtzdGF0ZS5kZWxheSAvXG4gICAgICAgICAgICAgICAgMTAwMH0gc2Vjb25kcyBvZiB0aGUgZXhpdCBldmVudCBmcm9tIHByb2Nlc3MgJyR7c3RhdGUudG9vbFBhdGh9Jy4gVGhpcyBtYXkgaW5kaWNhdGUgYSBjaGlsZCBwcm9jZXNzIGluaGVyaXRlZCB0aGUgU1RESU8gc3RyZWFtcyBhbmQgaGFzIG5vdCB5ZXQgZXhpdGVkLmA7XG4gICAgICAgICAgICBzdGF0ZS5fZGVidWcobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuX3NldFJlc3VsdCgpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvb2xydW5uZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RXhlY091dHB1dCA9IGV4cG9ydHMuZXhlYyA9IHZvaWQgMDtcbmNvbnN0IHN0cmluZ19kZWNvZGVyXzEgPSByZXF1aXJlKFwic3RyaW5nX2RlY29kZXJcIik7XG5jb25zdCB0ciA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi90b29scnVubmVyXCIpKTtcbi8qKlxuICogRXhlYyBhIGNvbW1hbmQuXG4gKiBPdXRwdXQgd2lsbCBiZSBzdHJlYW1lZCB0byB0aGUgbGl2ZSBjb25zb2xlLlxuICogUmV0dXJucyBwcm9taXNlIHdpdGggcmV0dXJuIGNvZGVcbiAqXG4gKiBAcGFyYW0gICAgIGNvbW1hbmRMaW5lICAgICAgICBjb21tYW5kIHRvIGV4ZWN1dGUgKGNhbiBpbmNsdWRlIGFkZGl0aW9uYWwgYXJncykuIE11c3QgYmUgY29ycmVjdGx5IGVzY2FwZWQuXG4gKiBAcGFyYW0gICAgIGFyZ3MgICAgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHMgZm9yIHRvb2wuIEVzY2FwaW5nIGlzIGhhbmRsZWQgYnkgdGhlIGxpYi5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgICAgICAgICAgIG9wdGlvbmFsIGV4ZWMgb3B0aW9ucy4gIFNlZSBFeGVjT3B0aW9uc1xuICogQHJldHVybnMgICBQcm9taXNlPG51bWJlcj4gICAgZXhpdCBjb2RlXG4gKi9cbmZ1bmN0aW9uIGV4ZWMoY29tbWFuZExpbmUsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBjb21tYW5kQXJncyA9IHRyLmFyZ1N0cmluZ1RvQXJyYXkoY29tbWFuZExpbmUpO1xuICAgICAgICBpZiAoY29tbWFuZEFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcmFtZXRlciAnY29tbWFuZExpbmUnIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LmApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBhdGggdG8gdG9vbCB0byBleGVjdXRlIHNob3VsZCBiZSBmaXJzdCBhcmdcbiAgICAgICAgY29uc3QgdG9vbFBhdGggPSBjb21tYW5kQXJnc1swXTtcbiAgICAgICAgYXJncyA9IGNvbW1hbmRBcmdzLnNsaWNlKDEpLmNvbmNhdChhcmdzIHx8IFtdKTtcbiAgICAgICAgY29uc3QgcnVubmVyID0gbmV3IHRyLlRvb2xSdW5uZXIodG9vbFBhdGgsIGFyZ3MsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcnVubmVyLmV4ZWMoKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhlYyA9IGV4ZWM7XG4vKipcbiAqIEV4ZWMgYSBjb21tYW5kIGFuZCBnZXQgdGhlIG91dHB1dC5cbiAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gKiBSZXR1cm5zIHByb21pc2Ugd2l0aCB0aGUgZXhpdCBjb2RlIGFuZCBjb2xsZWN0ZWQgc3Rkb3V0IGFuZCBzdGRlcnJcbiAqXG4gKiBAcGFyYW0gICAgIGNvbW1hbmRMaW5lICAgICAgICAgICBjb21tYW5kIHRvIGV4ZWN1dGUgKGNhbiBpbmNsdWRlIGFkZGl0aW9uYWwgYXJncykuIE11c3QgYmUgY29ycmVjdGx5IGVzY2FwZWQuXG4gKiBAcGFyYW0gICAgIGFyZ3MgICAgICAgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHMgZm9yIHRvb2wuIEVzY2FwaW5nIGlzIGhhbmRsZWQgYnkgdGhlIGxpYi5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgICAgICAgICAgICAgIG9wdGlvbmFsIGV4ZWMgb3B0aW9ucy4gIFNlZSBFeGVjT3B0aW9uc1xuICogQHJldHVybnMgICBQcm9taXNlPEV4ZWNPdXRwdXQ+ICAgZXhpdCBjb2RlLCBzdGRvdXQsIGFuZCBzdGRlcnJcbiAqL1xuZnVuY3Rpb24gZ2V0RXhlY091dHB1dChjb21tYW5kTGluZSwgYXJncywgb3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHN0ZG91dCA9ICcnO1xuICAgICAgICBsZXQgc3RkZXJyID0gJyc7XG4gICAgICAgIC8vVXNpbmcgc3RyaW5nIGRlY29kZXIgY292ZXJzIHRoZSBjYXNlIHdoZXJlIGEgbXVsdC1ieXRlIGNoYXJhY3RlciBpcyBzcGxpdFxuICAgICAgICBjb25zdCBzdGRvdXREZWNvZGVyID0gbmV3IHN0cmluZ19kZWNvZGVyXzEuU3RyaW5nRGVjb2RlcigndXRmOCcpO1xuICAgICAgICBjb25zdCBzdGRlcnJEZWNvZGVyID0gbmV3IHN0cmluZ19kZWNvZGVyXzEuU3RyaW5nRGVjb2RlcigndXRmOCcpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFN0ZG91dExpc3RlbmVyID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxpc3RlbmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0ZG91dDtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxTdGRFcnJMaXN0ZW5lciA9IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5saXN0ZW5lcnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zdGRlcnI7XG4gICAgICAgIGNvbnN0IHN0ZEVyckxpc3RlbmVyID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHN0ZGVyciArPSBzdGRlcnJEZWNvZGVyLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3RkRXJyTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFN0ZEVyckxpc3RlbmVyKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdGRPdXRMaXN0ZW5lciA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBzdGRvdXQgKz0gc3Rkb3V0RGVjb2Rlci53cml0ZShkYXRhKTtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFN0ZG91dExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxTdGRvdXRMaXN0ZW5lcihkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGlzdGVuZXJzKSwgeyBzdGRvdXQ6IHN0ZE91dExpc3RlbmVyLCBzdGRlcnI6IHN0ZEVyckxpc3RlbmVyIH0pO1xuICAgICAgICBjb25zdCBleGl0Q29kZSA9IHlpZWxkIGV4ZWMoY29tbWFuZExpbmUsIGFyZ3MsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgbGlzdGVuZXJzIH0pKTtcbiAgICAgICAgLy9mbHVzaCBhbnkgcmVtYWluaW5nIGNoYXJhY3RlcnNcbiAgICAgICAgc3Rkb3V0ICs9IHN0ZG91dERlY29kZXIuZW5kKCk7XG4gICAgICAgIHN0ZGVyciArPSBzdGRlcnJEZWNvZGVyLmVuZCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXhpdENvZGUsXG4gICAgICAgICAgICBzdGRvdXQsXG4gICAgICAgICAgICBzdGRlcnJcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0RXhlY091dHB1dCA9IGdldEV4ZWNPdXRwdXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGVjLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBXZSB1c2UgYW55IGFzIGEgdmFsaWQgaW5wdXQgdHlwZVxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0NvbW1hbmRQcm9wZXJ0aWVzID0gZXhwb3J0cy50b0NvbW1hbmRWYWx1ZSA9IHZvaWQgMDtcbi8qKlxuICogU2FuaXRpemVzIGFuIGlucHV0IGludG8gYSBzdHJpbmcgc28gaXQgY2FuIGJlIHBhc3NlZCBpbnRvIGlzc3VlQ29tbWFuZCBzYWZlbHlcbiAqIEBwYXJhbSBpbnB1dCBpbnB1dCB0byBzYW5pdGl6ZSBpbnRvIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZFZhbHVlKGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0KTtcbn1cbmV4cG9ydHMudG9Db21tYW5kVmFsdWUgPSB0b0NvbW1hbmRWYWx1ZTtcbi8qKlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcHJvcGVydGllcyB0byBzZW5kIHdpdGggdGhlIGFjdHVhbCBhbm5vdGF0aW9uIGNvbW1hbmRcbiAqIFNlZSBJc3N1ZUNvbW1hbmRQcm9wZXJ0aWVzOiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9ydW5uZXIvYmxvYi9tYWluL3NyYy9SdW5uZXIuV29ya2VyL0FjdGlvbkNvbW1hbmRNYW5hZ2VyLmNzI0w2NDZcbiAqL1xuZnVuY3Rpb24gdG9Db21tYW5kUHJvcGVydGllcyhhbm5vdGF0aW9uUHJvcGVydGllcykge1xuICAgIGlmICghT2JqZWN0LmtleXMoYW5ub3RhdGlvblByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBhbm5vdGF0aW9uUHJvcGVydGllcy50aXRsZSxcbiAgICAgICAgZmlsZTogYW5ub3RhdGlvblByb3BlcnRpZXMuZmlsZSxcbiAgICAgICAgbGluZTogYW5ub3RhdGlvblByb3BlcnRpZXMuc3RhcnRMaW5lLFxuICAgICAgICBlbmRMaW5lOiBhbm5vdGF0aW9uUHJvcGVydGllcy5lbmRMaW5lLFxuICAgICAgICBjb2w6IGFubm90YXRpb25Qcm9wZXJ0aWVzLnN0YXJ0Q29sdW1uLFxuICAgICAgICBlbmRDb2x1bW46IGFubm90YXRpb25Qcm9wZXJ0aWVzLmVuZENvbHVtblxuICAgIH07XG59XG5leHBvcnRzLnRvQ29tbWFuZFByb3BlcnRpZXMgPSB0b0NvbW1hbmRQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc3N1ZSA9IGV4cG9ydHMuaXNzdWVDb21tYW5kID0gdm9pZCAwO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKlxuICogQ29tbWFuZHNcbiAqXG4gKiBDb21tYW5kIEZvcm1hdDpcbiAqICAgOjpuYW1lIGtleT12YWx1ZSxrZXk9dmFsdWU6Om1lc3NhZ2VcbiAqXG4gKiBFeGFtcGxlczpcbiAqICAgOjp3YXJuaW5nOjpUaGlzIGlzIHRoZSBtZXNzYWdlXG4gKiAgIDo6c2V0LWVudiBuYW1lPU1ZX1ZBUjo6c29tZSB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc3N1ZUNvbW1hbmQoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kKGNvbW1hbmQsIHByb3BlcnRpZXMsIG1lc3NhZ2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNtZC50b1N0cmluZygpICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaXNzdWVDb21tYW5kID0gaXNzdWVDb21tYW5kO1xuZnVuY3Rpb24gaXNzdWUobmFtZSwgbWVzc2FnZSA9ICcnKSB7XG4gICAgaXNzdWVDb21tYW5kKG5hbWUsIHt9LCBtZXNzYWdlKTtcbn1cbmV4cG9ydHMuaXNzdWUgPSBpc3N1ZTtcbmNvbnN0IENNRF9TVFJJTkcgPSAnOjonO1xuY2xhc3MgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgICAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSAnbWlzc2luZy5jb21tYW5kJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IGNtZFN0ciA9IENNRF9TVFJJTkcgKyB0aGlzLmNvbW1hbmQ7XG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbWRTdHIgKz0gJyAnO1xuICAgICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZFN0ciArPSAnLCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWRTdHIgKz0gYCR7a2V5fT0ke2VzY2FwZVByb3BlcnR5KHZhbCl9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbWRTdHIgKz0gYCR7Q01EX1NUUklOR30ke2VzY2FwZURhdGEodGhpcy5tZXNzYWdlKX1gO1xuICAgICAgICByZXR1cm4gY21kU3RyO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVzY2FwZURhdGEocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpO1xufVxuZnVuY3Rpb24gZXNjYXBlUHJvcGVydHkocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpXG4gICAgICAgIC5yZXBsYWNlKC86L2csICclM0EnKVxuICAgICAgICAucmVwbGFjZSgvLC9nLCAnJTJDJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21tYW5kLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBGb3IgaW50ZXJuYWwgdXNlLCBzdWJqZWN0IHRvIGNoYW5nZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlID0gZXhwb3J0cy5pc3N1ZUZpbGVDb21tYW5kID0gdm9pZCAwO1xuLy8gV2UgdXNlIGFueSBhcyBhIHZhbGlkIGlucHV0IHR5cGVcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmNvbnN0IGNyeXB0byA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3J5cHRvXCIpKTtcbmNvbnN0IGZzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJmc1wiKSk7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZnVuY3Rpb24gaXNzdWVGaWxlQ29tbWFuZChjb21tYW5kLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudltgR0lUSFVCXyR7Y29tbWFuZH1gXTtcbiAgICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGZpbGUgY29tbWFuZCAke2NvbW1hbmR9YCk7XG4gICAgfVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGZpbGUgYXQgcGF0aDogJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoZmlsZVBhdGgsIGAkeygwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKShtZXNzYWdlKX0ke29zLkVPTH1gLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmOCdcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNzdWVGaWxlQ29tbWFuZCA9IGlzc3VlRmlsZUNvbW1hbmQ7XG5mdW5jdGlvbiBwcmVwYXJlS2V5VmFsdWVNZXNzYWdlKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBgZ2hhZGVsaW1pdGVyXyR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKTtcbiAgICAvLyBUaGVzZSBzaG91bGQgcmVhbGlzdGljYWxseSBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2Ugc29tZW9uZSBmaW5kcyBhXG4gICAgLy8gd2F5IHRvIGV4cGxvaXQgdXVpZCBnZW5lcmF0aW9uIGxldCdzIG5vdCBhbGxvdyBrZXlzIG9yIHZhbHVlcyB0aGF0IGNvbnRhaW5cbiAgICAvLyB0aGUgZGVsaW1pdGVyLlxuICAgIGlmIChrZXkuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IG5hbWUgc2hvdWxkIG5vdCBjb250YWluIHRoZSBkZWxpbWl0ZXIgXCIke2RlbGltaXRlcn1cImApO1xuICAgIH1cbiAgICBpZiAoY29udmVydGVkVmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IHZhbHVlIHNob3VsZCBub3QgY29udGFpbiB0aGUgZGVsaW1pdGVyIFwiJHtkZWxpbWl0ZXJ9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2tleX08PCR7ZGVsaW1pdGVyfSR7b3MuRU9MfSR7Y29udmVydGVkVmFsdWV9JHtvcy5FT0x9JHtkZWxpbWl0ZXJ9YDtcbn1cbmV4cG9ydHMucHJlcGFyZUtleVZhbHVlTWVzc2FnZSA9IHByZXBhcmVLZXlWYWx1ZU1lc3NhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLWNvbW1hbmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tCeXBhc3MgPSBleHBvcnRzLmdldFByb3h5VXJsID0gdm9pZCAwO1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwocmVxVXJsKSB7XG4gICAgY29uc3QgdXNpbmdTc2wgPSByZXFVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIGlmIChjaGVja0J5cGFzcyhyZXFVcmwpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHByb3h5VmFyID0gKCgpID0+IHtcbiAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBzX3Byb3h5J10gfHwgcHJvY2Vzcy5lbnZbJ0hUVFBTX1BST1hZJ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBfcHJveHknXSB8fCBwcm9jZXNzLmVudlsnSFRUUF9QUk9YWSddO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBpZiAocHJveHlWYXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjb2RlZFVSTChwcm94eVZhcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICBpZiAoIXByb3h5VmFyLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhcHJveHlWYXIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERlY29kZWRVUkwoYGh0dHA6Ly8ke3Byb3h5VmFyfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmZ1bmN0aW9uIGNoZWNrQnlwYXNzKHJlcVVybCkge1xuICAgIGlmICghcmVxVXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVxSG9zdCA9IHJlcVVybC5ob3N0bmFtZTtcbiAgICBpZiAoaXNMb29wYmFja0FkZHJlc3MocmVxSG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG5vUHJveHkgPSBwcm9jZXNzLmVudlsnbm9fcHJveHknXSB8fCBwcm9jZXNzLmVudlsnTk9fUFJPWFknXSB8fCAnJztcbiAgICBpZiAoIW5vUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHJlcXVlc3QgcG9ydFxuICAgIGxldCByZXFQb3J0O1xuICAgIGlmIChyZXFVcmwucG9ydCkge1xuICAgICAgICByZXFQb3J0ID0gTnVtYmVyKHJlcVVybC5wb3J0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICAgIHJlcVBvcnQgPSA4MDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgICByZXFQb3J0ID0gNDQzO1xuICAgIH1cbiAgICAvLyBGb3JtYXQgdGhlIHJlcXVlc3QgaG9zdG5hbWUgYW5kIGhvc3RuYW1lIHdpdGggcG9ydFxuICAgIGNvbnN0IHVwcGVyUmVxSG9zdHMgPSBbcmVxVXJsLmhvc3RuYW1lLnRvVXBwZXJDYXNlKCldO1xuICAgIGlmICh0eXBlb2YgcmVxUG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdXBwZXJSZXFIb3N0cy5wdXNoKGAke3VwcGVyUmVxSG9zdHNbMF19OiR7cmVxUG9ydH1gKTtcbiAgICB9XG4gICAgLy8gQ29tcGFyZSByZXF1ZXN0IGhvc3QgYWdhaW5zdCBub3Byb3h5XG4gICAgZm9yIChjb25zdCB1cHBlck5vUHJveHlJdGVtIG9mIG5vUHJveHlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCh4ID0+IHgudHJpbSgpLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4KSkge1xuICAgICAgICBpZiAodXBwZXJOb1Byb3h5SXRlbSA9PT0gJyonIHx8XG4gICAgICAgICAgICB1cHBlclJlcUhvc3RzLnNvbWUoeCA9PiB4ID09PSB1cHBlck5vUHJveHlJdGVtIHx8XG4gICAgICAgICAgICAgICAgeC5lbmRzV2l0aChgLiR7dXBwZXJOb1Byb3h5SXRlbX1gKSB8fFxuICAgICAgICAgICAgICAgICh1cHBlck5vUHJveHlJdGVtLnN0YXJ0c1dpdGgoJy4nKSAmJlxuICAgICAgICAgICAgICAgICAgICB4LmVuZHNXaXRoKGAke3VwcGVyTm9Qcm94eUl0ZW19YCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5jaGVja0J5cGFzcyA9IGNoZWNrQnlwYXNzO1xuZnVuY3Rpb24gaXNMb29wYmFja0FkZHJlc3MoaG9zdCkge1xuICAgIGNvbnN0IGhvc3RMb3dlciA9IGhvc3QudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGhvc3RMb3dlciA9PT0gJ2xvY2FsaG9zdCcgfHxcbiAgICAgICAgaG9zdExvd2VyLnN0YXJ0c1dpdGgoJzEyNy4nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzo6MV0nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzA6MDowOjA6MDowOjA6MV0nKSk7XG59XG5jbGFzcyBEZWNvZGVkVVJMIGV4dGVuZHMgVVJMIHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGJhc2UpIHtcbiAgICAgICAgc3VwZXIodXJsLCBiYXNlKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFVzZXJuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnVzZXJuYW1lKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFBhc3N3b3JkID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnBhc3N3b3JkKTtcbiAgICB9XG4gICAgZ2V0IHVzZXJuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2RlZFVzZXJuYW1lO1xuICAgIH1cbiAgICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvZGVkUGFzc3dvcmQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJveHkuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrRGVzdHJveTogU3ltYm9sKCdkZXN0cm95JyksXG4gIGtEaXNwYXRjaDogU3ltYm9sKCdkaXNwYXRjaCcpLFxuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrV3JpdGluZzogU3ltYm9sKCd3cml0aW5nJyksXG4gIGtSZXN1bWluZzogU3ltYm9sKCdyZXN1bWluZycpLFxuICBrUXVldWU6IFN5bWJvbCgncXVldWUnKSxcbiAga0Nvbm5lY3Q6IFN5bWJvbCgnY29ubmVjdCcpLFxuICBrQ29ubmVjdGluZzogU3ltYm9sKCdjb25uZWN0aW5nJyksXG4gIGtIZWFkZXJzTGlzdDogU3ltYm9sKCdoZWFkZXJzIGxpc3QnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMiBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMSBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMkNvcHlIZWFkZXJzOiBTeW1ib2woJ2h0dHAyIGNvcHkgaGVhZGVycycpLFxuICBrSFRUUENvbm5WZXJzaW9uOiBTeW1ib2woJ2h0dHAgY29ubmVjdGlvbiB2ZXJzaW9uJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY2xhc3MgVW5kaWNpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnVW5kaWNpRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlInXG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENvbm5lY3RUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc1RpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc1RpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNPdmVyZmxvd0Vycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc092ZXJmbG93RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNPdmVyZmxvd0Vycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgT3ZlcmZsb3cgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19PVkVSRkxPVydcbiAgfVxufVxuXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQm9keVRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQm9keVRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdCb2R5IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQk9EWV9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgYm9keSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIFN0YXR1cyBDb2RlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFX1NUQVRVU19DT0RFJ1xuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZEFyZ3VtZW50RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFJldHVyblZhbHVlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJldHVyblZhbHVlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBSZXR1cm4gVmFsdWUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEFib3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RBYm9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBhYm9ydGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0FCT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgSW5mb3JtYXRpb25hbEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW5mb3JtYXRpb25hbEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudERlc3Ryb3llZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50RGVzdHJveWVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudERlc3Ryb3llZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgZGVzdHJveWVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0RFU1RST1lFRCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnRDbG9zZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudENsb3NlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnRDbG9zZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGNsb3NlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DTE9TRUQnXG4gIH1cbn1cblxuY2xhc3MgU29ja2V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzb2NrZXQpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNvY2tldEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdTb2NrZXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdTb2NrZXQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfU09DS0VUJ1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gIH1cbn1cblxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01pc3NpbmdVcHN0cmVhbUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vIHVwc3RyZWFtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBCYWxhbmNlZFBvb2wnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nXG4gIH1cbn1cblxuY2xhc3MgSFRUUFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgZGF0YSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSFRUUFBhcnNlckVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdFJldHJ5RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCB7IGhlYWRlcnMsIGRhdGEgfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdFJldHJ5RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RSZXRyeUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgcmV0cnkgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX1JFVFJZJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFVuZGljaUVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBDb25uZWN0VGltZW91dEVycm9yLFxuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgUmVxdWVzdFJldHJ5RXJyb3Jcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKEJsb2IgJiYgb2JqZWN0IGluc3RhbmNlb2YgQmxvYikgfHwgKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddKVxuICApXG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiAhTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHVybC5wb3J0KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IHBvcnQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aCAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aDogdGhlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGhuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRobmFtZTogdGhlIHBhdGhuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5ob3N0bmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgaG9zdG5hbWU6IHRoZSBob3N0bmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5vcmlnaW4gIT0gbnVsbCAmJiB0eXBlb2YgdXJsLm9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgb3JpZ2luOiB0aGUgb3JpZ2luIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgIT0gbnVsbFxuICAgICAgPyB1cmwucG9ydFxuICAgICAgOiAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKVxuICAgIGxldCBvcmlnaW4gPSB1cmwub3JpZ2luICE9IG51bGxcbiAgICAgID8gdXJsLm9yaWdpblxuICAgICAgOiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX06JHtwb3J0fWBcbiAgICBsZXQgcGF0aCA9IHVybC5wYXRoICE9IG51bGxcbiAgICAgID8gdXJsLnBhdGhcbiAgICAgIDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gXG5cbiAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zdWJzdHJpbmcoMCwgb3JpZ2luLmxlbmd0aCAtIDEpXG4gICAgfVxuXG4gICAgaWYgKHBhdGggJiYgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgIH1cbiAgICAvLyBuZXcgVVJMKHBhdGgsIG9yaWdpbikgaXMgdW5zYWZlIHdoZW4gYHBhdGhgIGNvbnRhaW5zIGFuIGFic29sdXRlIFVSTFxuICAgIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkw6XG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmVsYXRpdmUgVVJMLCBzZWNvbmQgcGFyYW0gaXMgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2UgVVJMLlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkwsIGEgZ2l2ZW4gc2Vjb25kIHBhcmFtIHdpbGwgYmUgaWdub3JlZC5cbiAgICB1cmwgPSBuZXcgVVJMKG9yaWdpbiArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlT3JpZ2luICh1cmwpIHtcbiAgdXJsID0gcGFyc2VVUkwodXJsKVxuXG4gIGlmICh1cmwucGF0aG5hbWUgIT09ICcvJyB8fCB1cmwuc2VhcmNoIHx8IHVybC5oYXNoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGdldEhvc3RuYW1lIChob3N0KSB7XG4gIGlmIChob3N0WzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDEsIGlkeClcbiAgfVxuXG4gIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignOicpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaG9zdFxuXG4gIHJldHVybiBob3N0LnN1YnN0cmluZygwLCBpZHgpXG59XG5cbi8vIElQIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkIHNlcnZlciBuYW1lcyBwZXIgUkZDNjA2NlxuLy8gPiBDdXJyZW50bHksIHRoZSBvbmx5IHNlcnZlciBuYW1lcyBzdXBwb3J0ZWQgYXJlIEROUyBob3N0bmFtZXNcbmZ1bmN0aW9uIGdldFNlcnZlck5hbWUgKGhvc3QpIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaG9zdCwgJ3N0cmluZycpXG5cbiAgY29uc3Qgc2VydmVybmFtZSA9IGdldEhvc3RuYW1lKGhvc3QpXG4gIGlmIChuZXQuaXNJUChzZXJ2ZXJuYW1lKSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgcmV0dXJuIHNlcnZlcm5hbWVcbn1cblxuZnVuY3Rpb24gZGVlcENsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKVxufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmICh0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpKVxufVxuXG5mdW5jdGlvbiBib2R5TGVuZ3RoIChib2R5KSB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2UgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLm9iamVjdE1vZGUgPT09IGZhbHNlICYmIHN0YXRlLmVuZGVkID09PSB0cnVlICYmIE51bWJlci5pc0Zpbml0ZShzdGF0ZS5sZW5ndGgpXG4gICAgICA/IHN0YXRlLmxlbmd0aFxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemUgIT0gbnVsbCA/IGJvZHkuc2l6ZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVzdHJveWVkIChzdHJlYW0pIHtcbiAgcmV0dXJuICFzdHJlYW0gfHwgISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0Rlc3Ryb3llZF0pXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVBYm9ydGVkIChzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0gJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBpc0Rlc3Ryb3llZChzdHJlYW0pICYmIHN0YXRlICYmICFzdGF0ZS5lbmRFbWl0dGVkXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soKHN0cmVhbSwgZXJyKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSwgc3RyZWFtLCBlcnIpXG4gIH1cblxuICBpZiAoc3RyZWFtLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgIHN0cmVhbVtrRGVzdHJveWVkXSA9IHRydWVcbiAgfVxufVxuXG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9FWFBSID0gL3RpbWVvdXQ9KFxcZCspL1xuZnVuY3Rpb24gcGFyc2VLZWVwQWxpdmVUaW1lb3V0ICh2YWwpIHtcbiAgY29uc3QgbSA9IHZhbC50b1N0cmluZygpLm1hdGNoKEtFRVBBTElWRV9USU1FT1VUX0VYUFIpXG4gIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSwgMTApICogMTAwMCA6IG51bGxcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBoZWFkZXIgbmFtZSBhbmQgcmV0dXJucyBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoZWFkZXJOYW1lVG9TdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt2YWx1ZV0gfHwgdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaiA9IHt9KSB7XG4gIC8vIEZvciBIMiBzdXBwb3J0XG4gIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgcmV0dXJuIGhlYWRlcnNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXVxuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgICAgdmFsLnB1c2goaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGxldCBoYXNDb250ZW50TGVuZ3RoID0gZmFsc2VcbiAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IC0xXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tuICsgMF0udG9TdHJpbmcoKVxuICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNbbiArIDFdLnRvU3RyaW5nKCd1dGY4JylcblxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiAoa2V5ID09PSAnY29udGVudC1sZW5ndGgnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTkgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSByZXQucHVzaChrZXksIHZhbCkgLSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRGlzdHVyYmVkXG4gICAgICA/IHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0gLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gICAgICA6IGJvZHlba0JvZHlVc2VkXSB8fFxuICAgICAgICBib2R5LnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgICAgICAoYm9keS5fcmVhZGFibGVTdGF0ZSAmJiBib2R5Ll9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkKSB8fFxuICAgICAgICBpc1JlYWRhYmxlQWJvcnRlZChib2R5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Vycm9yZWRcbiAgICAgID8gc3RyZWFtLmlzRXJyb3JlZChib2R5KVxuICAgICAgOiAvc3RhdGU6ICdlcnJvcmVkJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzUmVhZGFibGVcbiAgICAgID8gc3RyZWFtLmlzUmVhZGFibGUoYm9keSlcbiAgICAgIDogL3N0YXRlOiAncmVhZGFibGUnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvIChzb2NrZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2NhbEFkZHJlc3M6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgbG9jYWxQb3J0OiBzb2NrZXQubG9jYWxQb3J0LFxuICAgIHJlbW90ZUFkZHJlc3M6IHNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgIHJlbW90ZVBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgIHJlbW90ZUZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICB0aW1lb3V0OiBzb2NrZXQudGltZW91dCxcbiAgICBieXRlc1dyaXR0ZW46IHNvY2tldC5ieXRlc1dyaXR0ZW4sXG4gICAgYnl0ZXNSZWFkOiBzb2NrZXQuYnl0ZXNSZWFkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb252ZXJ0SXRlcmFibGVUb0J1ZmZlciAoaXRlcmFibGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkIEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuayA6IEJ1ZmZlci5mcm9tKGNodW5rKVxuICB9XG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Gcm9tIChpdGVyYWJsZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGlmIChSZWFkYWJsZVN0cmVhbS5mcm9tKSB7XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtLmZyb20oY29udmVydEl0ZXJhYmxlVG9CdWZmZXIoaXRlcmFibGUpKVxuICB9XG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9XG4gICAgfSxcbiAgICAwXG4gIClcbn1cblxuLy8gVGhlIGNodW5rIHNob3VsZCBiZSBhIEZvcm1EYXRhIGluc3RhbmNlIGFuZCBjb250YWluc1xuLy8gYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLlxuZnVuY3Rpb24gaXNGb3JtRGF0YUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5hcHBlbmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXRBbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmhhcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YSdcbiAgKVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSB7IHJldHVybiB9XG4gIGlmICh0eXBlb2Ygc2lnbmFsLnRocm93SWZBYm9ydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKClcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIERPTUV4Y2VwdGlvbiBub3QgYXZhaWxhYmxlIDwgdjE3LjAuMFxuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJylcbiAgICAgIGVyci5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSAhIVN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG5mdW5jdGlvbiB0b1VTVlN0cmluZyAodmFsKSB7XG4gIGlmIChoYXNUb1dlbGxGb3JtZWQpIHtcbiAgICByZXR1cm4gYCR7dmFsfWAudG9XZWxsRm9ybWVkKClcbiAgfSBlbHNlIGlmIChub2RlVXRpbC50b1VTVlN0cmluZykge1xuICAgIHJldHVybiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG4gIH1cblxuICByZXR1cm4gYCR7dmFsfWBcbn1cblxuLy8gUGFyc2VkIGFjY29yZGluZ2x5IHRvIFJGQyA5MTEwXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMCNmaWVsZC5jb250ZW50LXJhbmdlXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyIChyYW5nZSkge1xuICBpZiAocmFuZ2UgPT0gbnVsbCB8fCByYW5nZSA9PT0gJycpIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IG51bGwsIHNpemU6IG51bGwgfVxuXG4gIGNvbnN0IG0gPSByYW5nZSA/IHJhbmdlLm1hdGNoKC9eYnl0ZXMgKFxcZCspLShcXGQrKVxcLyhcXGQrKT8kLykgOiBudWxsXG4gIHJldHVybiBtXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiBwYXJzZUludChtWzFdKSxcbiAgICAgICAgZW5kOiBtWzJdID8gcGFyc2VJbnQobVsyXSkgOiBudWxsLFxuICAgICAgICBzaXplOiBtWzNdID8gcGFyc2VJbnQobVszXSkgOiBudWxsXG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1JlYWRhYmxlQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICB0aHJvd0lmQWJvcnRlZCxcbiAgYWRkQWJvcnRMaXN0ZW5lcixcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIG5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5OiBub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMTMpLFxuICBzYWZlSFRUUE1ldGhvZHM6IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5sZXQgZmFzdE5vdyA9IERhdGUubm93KClcbmxldCBmYXN0Tm93VGltZW91dFxuXG5jb25zdCBmYXN0VGltZXJzID0gW11cblxuZnVuY3Rpb24gb25UaW1lb3V0ICgpIHtcbiAgZmFzdE5vdyA9IERhdGUubm93KClcblxuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcbiAgbGV0IGlkeCA9IDBcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGNvbnN0IHRpbWVyID0gZmFzdFRpbWVyc1tpZHhdXG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IDApIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gZmFzdE5vdyArIHRpbWVyLmRlbGF5XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGF0ZSA+IDAgJiYgZmFzdE5vdyA+PSB0aW1lci5zdGF0ZSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMVxuICAgICAgdGltZXIuY2FsbGJhY2sodGltZXIub3BhcXVlKVxuICAgIH1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gLTEpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTJcbiAgICAgIGlmIChpZHggIT09IGxlbiAtIDEpIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfVxuICAgICAgbGVuIC09IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4ICs9IDFcbiAgICB9XG4gIH1cblxuICBpZiAoZmFzdFRpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgcmVmcmVzaFRpbWVvdXQoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hUaW1lb3V0ICgpIHtcbiAgaWYgKGZhc3ROb3dUaW1lb3V0ICYmIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2gpIHtcbiAgICBmYXN0Tm93VGltZW91dC5yZWZyZXNoKClcbiAgfSBlbHNlIHtcbiAgICBjbGVhclRpbWVvdXQoZmFzdE5vd1RpbWVvdXQpXG4gICAgZmFzdE5vd1RpbWVvdXQgPSBzZXRUaW1lb3V0KG9uVGltZW91dCwgMWUzKVxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5XG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWVcblxuICAgIC8vICAtMiBub3QgaW4gdGltZXIgbGlzdFxuICAgIC8vICAtMSBpbiB0aW1lciBsaXN0IGJ1dCBpbmFjdGl2ZVxuICAgIC8vICAgMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWVcbiAgICAvLyA+IDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lIHRvIGV4cGlyZVxuICAgIHRoaXMuc3RhdGUgPSAtMlxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIHJlZnJlc2ggKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAtMikge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgICBpZiAoIWZhc3ROb3dUaW1lb3V0IHx8IGZhc3RUaW1lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gMFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMuc3RhdGUgPSAtMVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRUaW1lb3V0IChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHJldHVybiBkZWxheSA8IDFlM1xuICAgICAgPyBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICAgICAgOiBuZXcgVGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgfSxcbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgaWYgKHRpbWVvdXQgaW5zdGFuY2VvZiBUaW1lb3V0KSB7XG4gICAgICB0aW1lb3V0LmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENvcHlyaWdodCBCcmlhbiBXaGl0ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2NkZXgvc3RyZWFtc2VhcmNoXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3JcbiAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAqIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBCYXNlZCBoZWF2aWx5IG9uIHRoZSBTdHJlYW1pbmcgQm95ZXItTW9vcmUtSG9yc3Bvb2wgQysrIGltcGxlbWVudGF0aW9uXG4gKiBieSBIb25nbGkgTGFpIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRm9vQmFyV2lkZ2V0L2JveWVyLW1vb3JlLWhvcnNwb29sXG4gKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmZ1bmN0aW9uIFNCTUggKG5lZWRsZSkge1xuICBpZiAodHlwZW9mIG5lZWRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBuZWVkbGUgPSBCdWZmZXIuZnJvbShuZWVkbGUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihuZWVkbGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG5lZWRsZSBoYXMgdG8gYmUgYSBTdHJpbmcgb3IgYSBCdWZmZXIuJylcbiAgfVxuXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcblxuICBpZiAobmVlZGxlTGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBiZSBhbiBlbXB0eSBTdHJpbmcvQnVmZmVyLicpXG4gIH1cblxuICBpZiAobmVlZGxlTGVuZ3RoID4gMjU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGJpZ2dlciB0aGFuIDI1Ni4nKVxuICB9XG5cbiAgdGhpcy5tYXhNYXRjaGVzID0gSW5maW5pdHlcbiAgdGhpcy5tYXRjaGVzID0gMFxuXG4gIHRoaXMuX29jYyA9IG5ldyBBcnJheSgyNTYpXG4gICAgLmZpbGwobmVlZGxlTGVuZ3RoKSAvLyBJbml0aWFsaXplIG9jY3VycmVuY2UgdGFibGUuXG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5fbmVlZGxlID0gbmVlZGxlXG4gIHRoaXMuX2J1ZnBvcyA9IDBcblxuICB0aGlzLl9sb29rYmVoaW5kID0gQnVmZmVyLmFsbG9jKG5lZWRsZUxlbmd0aClcblxuICAvLyBQb3B1bGF0ZSBvY2N1cnJlbmNlIHRhYmxlIHdpdGggYW5hbHlzaXMgb2YgdGhlIG5lZWRsZSxcbiAgLy8gaWdub3JpbmcgbGFzdCBsZXR0ZXIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmVlZGxlTGVuZ3RoIC0gMTsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgdGhpcy5fb2NjW25lZWRsZVtpXV0gPSBuZWVkbGVMZW5ndGggLSAxIC0gaVxuICB9XG59XG5pbmhlcml0cyhTQk1ILCBFdmVudEVtaXR0ZXIpXG5cblNCTUgucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMubWF0Y2hlcyA9IDBcbiAgdGhpcy5fYnVmcG9zID0gMFxufVxuXG5TQk1ILnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBwb3MpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgJ2JpbmFyeScpXG4gIH1cbiAgY29uc3QgY2hsZW4gPSBjaHVuay5sZW5ndGhcbiAgdGhpcy5fYnVmcG9zID0gcG9zIHx8IDBcbiAgbGV0IHJcbiAgd2hpbGUgKHIgIT09IGNobGVuICYmIHRoaXMubWF0Y2hlcyA8IHRoaXMubWF4TWF0Y2hlcykgeyByID0gdGhpcy5fc2JtaF9mZWVkKGNodW5rKSB9XG4gIHJldHVybiByXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2ZlZWQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuICBjb25zdCBuZWVkbGUgPSB0aGlzLl9uZWVkbGVcbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuICBjb25zdCBsYXN0TmVlZGxlQ2hhciA9IG5lZWRsZVtuZWVkbGVMZW5ndGggLSAxXVxuXG4gIC8vIFBvc2l0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiBgZGF0YWBcbiAgLy8gICAgICAgICAgIHBvcyA9PSAzIHBvaW50cyB0byBkYXRhWzNdXG4gIC8vIE5lZ2F0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiB0aGUgbG9va2JlaGluZCBidWZmZXJcbiAgLy8gICAgICAgICAgIHBvcyA9PSAtMiBwb2ludHMgdG8gbG9va2JlaGluZFtsb29rYmVoaW5kX3NpemUgLSAyXVxuICBsZXQgcG9zID0gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZVxuICBsZXQgY2hcblxuICBpZiAocG9zIDwgMCkge1xuICAgIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gUGVyZm9ybSBCb3llci1Nb29yZS1Ib3JzcG9vbFxuICAgIC8vIHNlYXJjaCB3aXRoIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IGNvbnNpZGVycyBib3RoIHRoZVxuICAgIC8vIGxvb2tiZWhpbmQgYnVmZmVyIGFuZCB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gICAgLy9cbiAgICAvLyBMb29wIHVudGlsXG4gICAgLy8gICB0aGVyZSBpcyBhIG1hdGNoLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB3ZSd2ZSBtb3ZlZCBwYXN0IHRoZSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIHRoZVxuICAgIC8vICAgbG9va2JlaGluZCBidWZmZXIuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gICBvcHRpbWl6ZWQgbG9vcC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgdGhlIGNoYXJhY3RlciB0byBsb29rIGF0IGxpZXMgb3V0c2lkZSB0aGUgaGF5c3RhY2suXG4gICAgd2hpbGUgKHBvcyA8IDAgJiYgcG9zIDw9IGxlbiAtIG5lZWRsZUxlbmd0aCkge1xuICAgICAgY2ggPSB0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIG5lZWRsZUxlbmd0aCAtIDEpXG5cbiAgICAgIGlmIChcbiAgICAgICAgY2ggPT09IGxhc3ROZWVkbGVDaGFyICYmXG4gICAgICAgIHRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlTGVuZ3RoIC0gMSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgICAgICsrdGhpcy5tYXRjaGVzXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUpXG5cbiAgICAgICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gICAgICB9XG4gICAgICBwb3MgKz0gdGhpcy5fb2NjW2NoXVxuICAgIH1cblxuICAgIC8vIE5vIG1hdGNoLlxuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIC8vIFRoZXJlJ3MgdG9vIGZldyBkYXRhIGZvciBCb3llci1Nb29yZS1Ib3JzcG9vbCB0byBydW4sXG4gICAgICAvLyBzbyBsZXQncyB1c2UgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIHRvIHNraXAgYXMgbXVjaCBhc1xuICAgICAgLy8gd2UgY2FuLlxuICAgICAgLy8gRm9yd2FyZCBwb3MgdW50aWxcbiAgICAgIC8vICAgdGhlIHRyYWlsaW5nIHBhcnQgb2YgbG9va2JlaGluZCArIGRhdGFcbiAgICAgIC8vICAgbG9va3MgbGlrZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZWVkbGVcbiAgICAgIC8vIG9yIHVudGlsXG4gICAgICAvLyAgIHBvcyA9PSAwXG4gICAgICB3aGlsZSAocG9zIDwgMCAmJiAhdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBsZW4gLSBwb3MpKSB7ICsrcG9zIH1cbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIERpc2NhcmQgbG9va2JlaGluZCBidWZmZXIuXG4gICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXQgb2ZmIHBhcnQgb2YgdGhlIGxvb2tiZWhpbmQgYnVmZmVyIHRoYXQgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgYXBwZW5kIHRoZSBlbnRpcmUgaGF5c3RhY2tcbiAgICAgIC8vIGludG8gaXQuXG4gICAgICBjb25zdCBieXRlc1RvQ3V0T2ZmID0gdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXG4gICAgICBpZiAoYnl0ZXNUb0N1dE9mZiA+IDApIHtcbiAgICAgICAgLy8gVGhlIGN1dCBvZmYgZGF0YSBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIHRoZSBuZWVkbGUuXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb29rYmVoaW5kLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZixcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC0gYnl0ZXNUb0N1dE9mZilcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtPSBieXRlc1RvQ3V0T2ZmXG5cbiAgICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgKz0gbGVuXG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IGxlblxuICAgICAgcmV0dXJuIGxlblxuICAgIH1cbiAgfVxuXG4gIHBvcyArPSAocG9zID49IDApICogdGhpcy5fYnVmcG9zXG5cbiAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm93IGVtcHR5LiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gIC8vIG5lZWRsZSBpcyBpbiB0aGUgaGF5c3RhY2suXG4gIGlmIChkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpICE9PSAtMSkge1xuICAgIHBvcyA9IGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcylcbiAgICArK3RoaXMubWF0Y2hlc1xuICAgIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zKSB9IGVsc2UgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKSB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICBwb3MgPSBsZW4gLSBuZWVkbGVMZW5ndGhcbiAgfVxuXG4gIC8vIFRoZXJlIHdhcyBubyBtYXRjaC4gSWYgdGhlcmUncyB0cmFpbGluZyBoYXlzdGFjayBkYXRhIHRoYXQgd2UgY2Fubm90XG4gIC8vIG1hdGNoIHlldCB1c2luZyB0aGUgQm95ZXItTW9vcmUtSG9yc3Bvb2wgYWxnb3JpdGhtIChiZWNhdXNlIHRoZSB0cmFpbGluZ1xuICAvLyBkYXRhIGlzIGxlc3MgdGhhbiB0aGUgbmVlZGxlIHNpemUpIHRoZW4gbWF0Y2ggdXNpbmcgYSBtb2RpZmllZFxuICAvLyBhbGdvcml0aG0gdGhhdCBzdGFydHMgbWF0Y2hpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIGluc3RlYWQgb2YgdGhlIGVuZC5cbiAgLy8gV2hhdGV2ZXIgdHJhaWxpbmcgZGF0YSBpcyBsZWZ0IGFmdGVyIHJ1bm5pbmcgdGhpcyBhbGdvcml0aG0gaXMgYWRkZWQgdG9cbiAgLy8gdGhlIGxvb2tiZWhpbmQgYnVmZmVyLlxuICB3aGlsZSAoXG4gICAgcG9zIDwgbGVuICYmXG4gICAgKFxuICAgICAgZGF0YVtwb3NdICE9PSBuZWVkbGVbMF0gfHxcbiAgICAgIChcbiAgICAgICAgKEJ1ZmZlci5jb21wYXJlKFxuICAgICAgICAgIGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyBsZW4gLSBwb3MpLFxuICAgICAgICAgIG5lZWRsZS5zdWJhcnJheSgwLCBsZW4gLSBwb3MpXG4gICAgICAgICkgIT09IDApXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICArK3Bvc1xuICB9XG4gIGlmIChwb3MgPCBsZW4pIHtcbiAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgcG9zLCBwb3MgKyAobGVuIC0gcG9zKSlcbiAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSBsZW4gLSBwb3NcbiAgfVxuXG4gIC8vIEV2ZXJ5dGhpbmcgdW50aWwgcG9zIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gbmVlZGxlIGRhdGEuXG4gIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcyA8IGxlbiA/IHBvcyA6IGxlbikgfVxuXG4gIHRoaXMuX2J1ZnBvcyA9IGxlblxuICByZXR1cm4gbGVuXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2xvb2t1cF9jaGFyID0gZnVuY3Rpb24gKGRhdGEsIHBvcykge1xuICByZXR1cm4gKHBvcyA8IDApXG4gICAgPyB0aGlzLl9sb29rYmVoaW5kW3RoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc11cbiAgICA6IGRhdGFbcG9zXVxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9tZW1jbXAgPSBmdW5jdGlvbiAoZGF0YSwgcG9zLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmICh0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIGkpICE9PSB0aGlzLl9uZWVkbGVbaV0pIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNCTUhcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5SZWFkYWJsZVxuXG5mdW5jdGlvbiBQYXJ0U3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0cylcbn1cbmluaGVyaXRzKFBhcnRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKVxuXG5QYXJ0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRTdHJlYW1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TGltaXQgKGxpbWl0cywgbmFtZSwgZGVmYXVsdExpbWl0KSB7XG4gIGlmIChcbiAgICAhbGltaXRzIHx8XG4gICAgbGltaXRzW25hbWVdID09PSB1bmRlZmluZWQgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IG51bGxcbiAgKSB7IHJldHVybiBkZWZhdWx0TGltaXQgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgbGltaXRzW25hbWVdICE9PSAnbnVtYmVyJyB8fFxuICAgIGlzTmFOKGxpbWl0c1tuYW1lXSlcbiAgKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbWl0ICcgKyBuYW1lICsgJyBpcyBub3QgYSB2YWxpZCBudW1iZXInKSB9XG5cbiAgcmV0dXJuIGxpbWl0c1tuYW1lXVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBCX0RDUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcblxcclxcbicpXG5jb25zdCBSRV9DUkxGID0gL1xcclxcbi9nXG5jb25zdCBSRV9IRFIgPSAvXihbXjpdKyk6WyBcXHRdPyhbXFx4MDAtXFx4RkZdKyk/JC8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cbmZ1bmN0aW9uIEhlYWRlclBhcnNlciAoY2ZnKSB7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG5cbiAgY2ZnID0gY2ZnIHx8IHt9XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMubnJlYWQgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhIZWFkZXJQYWlycyA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclBhaXJzJywgMjAwMClcbiAgdGhpcy5tYXhIZWFkZXJTaXplID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyU2l6ZScsIDgwICogMTAyNClcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLnNzID0gbmV3IFN0cmVhbVNlYXJjaChCX0RDUkxGKVxuICB0aGlzLnNzLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZGF0YSAmJiAhc2VsZi5tYXhlZCkge1xuICAgICAgaWYgKHNlbGYubnJlYWQgKyBlbmQgLSBzdGFydCA+PSBzZWxmLm1heEhlYWRlclNpemUpIHtcbiAgICAgICAgZW5kID0gc2VsZi5tYXhIZWFkZXJTaXplIC0gc2VsZi5ucmVhZCArIHN0YXJ0XG4gICAgICAgIHNlbGYubnJlYWQgPSBzZWxmLm1heEhlYWRlclNpemVcbiAgICAgICAgc2VsZi5tYXhlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7IHNlbGYubnJlYWQgKz0gKGVuZCAtIHN0YXJ0KSB9XG5cbiAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHN0YXJ0LCBlbmQpXG4gICAgfVxuICAgIGlmIChpc01hdGNoKSB7IHNlbGYuX2ZpbmlzaCgpIH1cbiAgfSlcbn1cbmluaGVyaXRzKEhlYWRlclBhcnNlciwgRXZlbnRFbWl0dGVyKVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCByID0gdGhpcy5zcy5wdXNoKGRhdGEpXG4gIGlmICh0aGlzLmZpbmlzaGVkKSB7IHJldHVybiByIH1cbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLnNzLnJlc2V0KClcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5idWZmZXIpIHsgdGhpcy5fcGFyc2VIZWFkZXIoKSB9XG4gIHRoaXMuc3MubWF0Y2hlcyA9IHRoaXMuc3MubWF4TWF0Y2hlc1xuICBjb25zdCBoZWFkZXIgPSB0aGlzLmhlYWRlclxuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5maW5pc2hlZCA9IHRydWVcbiAgdGhpcy5ucmVhZCA9IHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX3BhcnNlSGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgcmV0dXJuIH1cblxuICBjb25zdCBsaW5lcyA9IHRoaXMuYnVmZmVyLnNwbGl0KFJFX0NSTEYpXG4gIGNvbnN0IGxlbiA9IGxpbmVzLmxlbmd0aFxuICBsZXQgbSwgaFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAobGluZXNbaV0ubGVuZ3RoID09PSAwKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAobGluZXNbaV1bMF0gPT09ICdcXHQnIHx8IGxpbmVzW2ldWzBdID09PSAnICcpIHtcbiAgICAgIC8vIGZvbGRlZCBoZWFkZXIgY29udGVudFxuICAgICAgLy8gUkZDMjgyMiBzYXlzIHRvIGp1c3QgcmVtb3ZlIHRoZSBDUkxGIGFuZCBub3QgdGhlIHdoaXRlc3BhY2UgZm9sbG93aW5nXG4gICAgICAvLyBpdCwgc28gd2UgZm9sbG93IHRoZSBSRkMgYW5kIGluY2x1ZGUgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSAuLi5cbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyW2hdW3RoaXMuaGVhZGVyW2hdLmxlbmd0aCAtIDFdICs9IGxpbmVzW2ldXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG9zQ29sb24gPSBsaW5lc1tpXS5pbmRleE9mKCc6JylcbiAgICBpZiAoXG4gICAgICBwb3NDb2xvbiA9PT0gLTEgfHxcbiAgICAgIHBvc0NvbG9uID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbSA9IFJFX0hEUi5leGVjKGxpbmVzW2ldKVxuICAgIGggPSBtWzFdLnRvTG93ZXJDYXNlKClcbiAgICB0aGlzLmhlYWRlcltoXSA9IHRoaXMuaGVhZGVyW2hdIHx8IFtdXG4gICAgdGhpcy5oZWFkZXJbaF0ucHVzaCgobVsyXSB8fCAnJykpXG4gICAgaWYgKCsrdGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgYnJlYWsgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGVhZGVyUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBQYXJ0U3RyZWFtID0gcmVxdWlyZSgnLi9QYXJ0U3RyZWFtJylcbmNvbnN0IEhlYWRlclBhcnNlciA9IHJlcXVpcmUoJy4vSGVhZGVyUGFyc2VyJylcblxuY29uc3QgREFTSCA9IDQ1XG5jb25zdCBCX09ORURBU0ggPSBCdWZmZXIuZnJvbSgnLScpXG5jb25zdCBCX0NSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuJylcbmNvbnN0IEVNUFRZX0ZOID0gZnVuY3Rpb24gKCkge31cblxuZnVuY3Rpb24gRGljZXIgKGNmZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGljZXIpKSB7IHJldHVybiBuZXcgRGljZXIoY2ZnKSB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgY2ZnKVxuXG4gIGlmICghY2ZnIHx8ICghY2ZnLmhlYWRlckZpcnN0ICYmIHR5cGVvZiBjZmcuYm91bmRhcnkgIT09ICdzdHJpbmcnKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb3VuZGFyeSByZXF1aXJlZCcpIH1cblxuICBpZiAodHlwZW9mIGNmZy5ib3VuZGFyeSA9PT0gJ3N0cmluZycpIHsgdGhpcy5zZXRCb3VuZGFyeShjZmcuYm91bmRhcnkpIH0gZWxzZSB7IHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWQgfVxuXG4gIHRoaXMuX2hlYWRlckZpcnN0ID0gY2ZnLmhlYWRlckZpcnN0XG5cbiAgdGhpcy5fZGFzaGVzID0gMFxuICB0aGlzLl9wYXJ0cyA9IDBcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgdGhpcy5faXNQcmVhbWJsZSA9IHRydWVcbiAgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZVxuICB0aGlzLl9maXJzdFdyaXRlID0gdHJ1ZVxuICB0aGlzLl9pbkhlYWRlciA9IHRydWVcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgdGhpcy5fcGFydE9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5wYXJ0SHdtIH1cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2hwYXJzZXIgPSBuZXcgSGVhZGVyUGFyc2VyKGNmZylcbiAgdGhpcy5faHBhcnNlci5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIHNlbGYuX2luSGVhZGVyID0gZmFsc2VcbiAgICBzZWxmLl9wYXJ0LmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbiAgfSlcbn1cbmluaGVyaXRzKERpY2VyLCBXcml0YWJsZVN0cmVhbSlcblxuRGljZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJyAmJiAhdGhpcy5fcmVhbEZpbmlzaCkge1xuICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgaWYgKHNlbGYuX3BhcnQgJiYgIXNlbGYuX2lnbm9yZURhdGEpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gKHNlbGYuX2lzUHJlYW1ibGUgPyAnUHJlYW1ibGUnIDogJ1BhcnQnKVxuICAgICAgICAgIHNlbGYuX3BhcnQuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IodHlwZSArICcgdGVybWluYXRlZCBlYXJseSBkdWUgdG8gdW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgICBzZWxmLl9wYXJ0LnB1c2gobnVsbClcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIHsgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG4gIC8vIGlnbm9yZSB1bmV4cGVjdGVkIGRhdGEgKGUuZy4gZXh0cmEgdHJhaWxlciBkYXRhIGFmdGVyIGZpbmlzaGVkKVxuICBpZiAoIXRoaXMuX2hwYXJzZXIgJiYgIXRoaXMuX2JwYXJzZXIpIHsgcmV0dXJuIGNiKCkgfVxuXG4gIGlmICh0aGlzLl9oZWFkZXJGaXJzdCAmJiB0aGlzLl9pc1ByZWFtYmxlKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7IHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KSB9IGVsc2UgeyB0aGlzLl9pZ25vcmUoKSB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YSlcbiAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZGF0YS5sZW5ndGgpIHsgZGF0YSA9IGRhdGEuc2xpY2UocikgfSBlbHNlIHsgcmV0dXJuIGNiKCkgfVxuICB9XG5cbiAgLy8gYWxsb3dzIGZvciBcImVhc2llclwiIHRlc3RpbmdcbiAgaWYgKHRoaXMuX2ZpcnN0V3JpdGUpIHtcbiAgICB0aGlzLl9icGFyc2VyLnB1c2goQl9DUkxGKVxuICAgIHRoaXMuX2ZpcnN0V3JpdGUgPSBmYWxzZVxuICB9XG5cbiAgdGhpcy5fYnBhcnNlci5wdXNoKGRhdGEpXG5cbiAgaWYgKHRoaXMuX3BhdXNlKSB7IHRoaXMuX2NiID0gY2IgfSBlbHNlIHsgY2IoKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkXG4gIHRoaXMuX2hwYXJzZXIgPSB1bmRlZmluZWRcbn1cblxuRGljZXIucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JwYXJzZXIgPSBuZXcgU3RyZWFtU2VhcmNoKCdcXHJcXG4tLScgKyBib3VuZGFyeSlcbiAgdGhpcy5fYnBhcnNlci5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgc2VsZi5fb25pbmZvKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpXG4gIH0pXG59XG5cbkRpY2VyLnByb3RvdHlwZS5faWdub3JlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fcGFydCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIHRoaXMuX2lnbm9yZURhdGEgPSB0cnVlXG4gICAgdGhpcy5fcGFydC5vbignZXJyb3InLCBFTVBUWV9GTilcbiAgICAvLyB3ZSBtdXN0IHBlcmZvcm0gc29tZSBraW5kIG9mIHJlYWQgb24gdGhlIHN0cmVhbSBldmVuIHRob3VnaCB3ZSBhcmVcbiAgICAvLyBpZ25vcmluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIG5vZGUncyBSZWFkYWJsZSBzdHJlYW0gd2lsbCBub3QgZW1pdCAnZW5kJ1xuICAgIC8vIGFmdGVyIHB1c2hpbmcgbnVsbCB0byB0aGUgc3RyZWFtXG4gICAgdGhpcy5fcGFydC5yZXN1bWUoKVxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fb25pbmZvID0gZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGJ1ZjsgY29uc3Qgc2VsZiA9IHRoaXM7IGxldCBpID0gMDsgbGV0IHI7IGxldCBzaG91bGRXcml0ZU1vcmUgPSB0cnVlXG5cbiAgaWYgKCF0aGlzLl9wYXJ0ICYmIHRoaXMuX2p1c3RNYXRjaGVkICYmIGRhdGEpIHtcbiAgICB3aGlsZSAodGhpcy5fZGFzaGVzIDwgMiAmJiAoc3RhcnQgKyBpKSA8IGVuZCkge1xuICAgICAgaWYgKGRhdGFbc3RhcnQgKyBpXSA9PT0gREFTSCkge1xuICAgICAgICArK2lcbiAgICAgICAgKyt0aGlzLl9kYXNoZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgYnVmID0gQl9PTkVEQVNIIH1cbiAgICAgICAgdGhpcy5fZGFzaGVzID0gMFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzID09PSAyKSB7XG4gICAgICBpZiAoKHN0YXJ0ICsgaSkgPCBlbmQgJiYgdGhpcy5saXN0ZW5lckNvdW50KCd0cmFpbGVyJykgIT09IDApIHsgdGhpcy5lbWl0KCd0cmFpbGVyJywgZGF0YS5zbGljZShzdGFydCArIGksIGVuZCkpIH1cbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gICAgICAvLyBubyBtb3JlIHBhcnRzIHdpbGwgYmUgYWRkZWRcbiAgICAgIGlmIChzZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzKSB7IHJldHVybiB9XG4gIH1cbiAgaWYgKHRoaXMuX2p1c3RNYXRjaGVkKSB7IHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2UgfVxuICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgdGhpcy5fcGFydC5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICBzZWxmLl91bnBhdXNlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJlYW1ibGUgIT09IHRydWUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwYXJ0JykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncGFydCcsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lnbm9yZSgpXG4gICAgfVxuICAgIGlmICghdGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pbkhlYWRlciA9IHRydWUgfVxuICB9XG4gIGlmIChkYXRhICYmIHN0YXJ0IDwgZW5kICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgfHwgIXRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChidWYpIH1cbiAgICAgIHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCFzaG91bGRXcml0ZU1vcmUpIHsgdGhpcy5fcGF1c2UgPSB0cnVlIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHRoaXMuX2hwYXJzZXIucHVzaChidWYpIH1cbiAgICAgIHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBlbmQpIHsgdGhpcy5fb25pbmZvKGZhbHNlLCBkYXRhLCBzdGFydCArIHIsIGVuZCkgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNYXRjaCkge1xuICAgIHRoaXMuX2hwYXJzZXIucmVzZXQoKVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2lzUHJlYW1ibGUgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgKyt0aGlzLl9wYXJ0c1xuICAgICAgICB0aGlzLl9wYXJ0Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKC0tc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9maW5pc2hlZCkge1xuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9wYXJ0LnB1c2gobnVsbClcbiAgICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gICAgdGhpcy5fanVzdE1hdGNoZWQgPSB0cnVlXG4gICAgdGhpcy5fZGFzaGVzID0gMFxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fdW5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wYXVzZSkgeyByZXR1cm4gfVxuXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgaWYgKHRoaXMuX2NiKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gICAgY2IoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIE5vZGUgaGFzIGFsd2F5cyB1dGYtOFxuY29uc3QgdXRmOERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbmNvbnN0IHRleHREZWNvZGVycyA9IG5ldyBNYXAoW1xuICBbJ3V0Zi04JywgdXRmOERlY29kZXJdLFxuICBbJ3V0ZjgnLCB1dGY4RGVjb2Rlcl1cbl0pXG5cbmZ1bmN0aW9uIGdldERlY29kZXIgKGNoYXJzZXQpIHtcbiAgbGV0IGxjXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjhcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdhc2NpaSc6IC8vIFRPRE86IE1ha2UgdGhlc2UgYSBzZXBhcmF0ZSwgc3RyaWN0IGRlY29kZXI/XG4gICAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5MSc6XG4gICAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgICAgY2FzZSAnY3AxMjUyJzpcbiAgICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmxhdGluMVxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjE2bGVcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5iYXNlNjRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGMgPSB0cnVlXG4gICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLm90aGVyLmJpbmQoY2hhcnNldClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVjb2RlcnMgPSB7XG4gIHV0Zjg6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudXRmOFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGxhdGluMTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubGF0aW4xU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgdXRmMTZsZTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51Y3MyU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgYmFzZTY0OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJhc2U2NFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIG90aGVyOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuXG4gICAgaWYgKHRleHREZWNvZGVycy5oYXModGhpcy50b1N0cmluZygpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVycy5nZXQodGhpcykuZGVjb2RlKGRhdGEpXG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVUZXh0ICh0ZXh0LCBzb3VyY2VFbmNvZGluZywgZGVzdEVuY29kaW5nKSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgcmV0dXJuIGdldERlY29kZXIoZGVzdEVuY29kaW5nKSh0ZXh0LCBzb3VyY2VFbmNvZGluZylcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZVRleHRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgb2JqZWN0LXByb3BlcnR5LW5ld2xpbmUgKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi9kZWNvZGVUZXh0JylcblxuY29uc3QgUkVfRU5DT0RFRCA9IC8lW2EtZkEtRjAtOV1bYS1mQS1GMC05XS9nXG5cbmNvbnN0IEVuY29kZWRMb29rdXAgPSB7XG4gICclMDAnOiAnXFx4MDAnLCAnJTAxJzogJ1xceDAxJywgJyUwMic6ICdcXHgwMicsICclMDMnOiAnXFx4MDMnLCAnJTA0JzogJ1xceDA0JyxcbiAgJyUwNSc6ICdcXHgwNScsICclMDYnOiAnXFx4MDYnLCAnJTA3JzogJ1xceDA3JywgJyUwOCc6ICdcXHgwOCcsICclMDknOiAnXFx4MDknLFxuICAnJTBhJzogJ1xceDBhJywgJyUwQSc6ICdcXHgwYScsICclMGInOiAnXFx4MGInLCAnJTBCJzogJ1xceDBiJywgJyUwYyc6ICdcXHgwYycsXG4gICclMEMnOiAnXFx4MGMnLCAnJTBkJzogJ1xceDBkJywgJyUwRCc6ICdcXHgwZCcsICclMGUnOiAnXFx4MGUnLCAnJTBFJzogJ1xceDBlJyxcbiAgJyUwZic6ICdcXHgwZicsICclMEYnOiAnXFx4MGYnLCAnJTEwJzogJ1xceDEwJywgJyUxMSc6ICdcXHgxMScsICclMTInOiAnXFx4MTInLFxuICAnJTEzJzogJ1xceDEzJywgJyUxNCc6ICdcXHgxNCcsICclMTUnOiAnXFx4MTUnLCAnJTE2JzogJ1xceDE2JywgJyUxNyc6ICdcXHgxNycsXG4gICclMTgnOiAnXFx4MTgnLCAnJTE5JzogJ1xceDE5JywgJyUxYSc6ICdcXHgxYScsICclMUEnOiAnXFx4MWEnLCAnJTFiJzogJ1xceDFiJyxcbiAgJyUxQic6ICdcXHgxYicsICclMWMnOiAnXFx4MWMnLCAnJTFDJzogJ1xceDFjJywgJyUxZCc6ICdcXHgxZCcsICclMUQnOiAnXFx4MWQnLFxuICAnJTFlJzogJ1xceDFlJywgJyUxRSc6ICdcXHgxZScsICclMWYnOiAnXFx4MWYnLCAnJTFGJzogJ1xceDFmJywgJyUyMCc6ICdcXHgyMCcsXG4gICclMjEnOiAnXFx4MjEnLCAnJTIyJzogJ1xceDIyJywgJyUyMyc6ICdcXHgyMycsICclMjQnOiAnXFx4MjQnLCAnJTI1JzogJ1xceDI1JyxcbiAgJyUyNic6ICdcXHgyNicsICclMjcnOiAnXFx4MjcnLCAnJTI4JzogJ1xceDI4JywgJyUyOSc6ICdcXHgyOScsICclMmEnOiAnXFx4MmEnLFxuICAnJTJBJzogJ1xceDJhJywgJyUyYic6ICdcXHgyYicsICclMkInOiAnXFx4MmInLCAnJTJjJzogJ1xceDJjJywgJyUyQyc6ICdcXHgyYycsXG4gICclMmQnOiAnXFx4MmQnLCAnJTJEJzogJ1xceDJkJywgJyUyZSc6ICdcXHgyZScsICclMkUnOiAnXFx4MmUnLCAnJTJmJzogJ1xceDJmJyxcbiAgJyUyRic6ICdcXHgyZicsICclMzAnOiAnXFx4MzAnLCAnJTMxJzogJ1xceDMxJywgJyUzMic6ICdcXHgzMicsICclMzMnOiAnXFx4MzMnLFxuICAnJTM0JzogJ1xceDM0JywgJyUzNSc6ICdcXHgzNScsICclMzYnOiAnXFx4MzYnLCAnJTM3JzogJ1xceDM3JywgJyUzOCc6ICdcXHgzOCcsXG4gICclMzknOiAnXFx4MzknLCAnJTNhJzogJ1xceDNhJywgJyUzQSc6ICdcXHgzYScsICclM2InOiAnXFx4M2InLCAnJTNCJzogJ1xceDNiJyxcbiAgJyUzYyc6ICdcXHgzYycsICclM0MnOiAnXFx4M2MnLCAnJTNkJzogJ1xceDNkJywgJyUzRCc6ICdcXHgzZCcsICclM2UnOiAnXFx4M2UnLFxuICAnJTNFJzogJ1xceDNlJywgJyUzZic6ICdcXHgzZicsICclM0YnOiAnXFx4M2YnLCAnJTQwJzogJ1xceDQwJywgJyU0MSc6ICdcXHg0MScsXG4gICclNDInOiAnXFx4NDInLCAnJTQzJzogJ1xceDQzJywgJyU0NCc6ICdcXHg0NCcsICclNDUnOiAnXFx4NDUnLCAnJTQ2JzogJ1xceDQ2JyxcbiAgJyU0Nyc6ICdcXHg0NycsICclNDgnOiAnXFx4NDgnLCAnJTQ5JzogJ1xceDQ5JywgJyU0YSc6ICdcXHg0YScsICclNEEnOiAnXFx4NGEnLFxuICAnJTRiJzogJ1xceDRiJywgJyU0Qic6ICdcXHg0YicsICclNGMnOiAnXFx4NGMnLCAnJTRDJzogJ1xceDRjJywgJyU0ZCc6ICdcXHg0ZCcsXG4gICclNEQnOiAnXFx4NGQnLCAnJTRlJzogJ1xceDRlJywgJyU0RSc6ICdcXHg0ZScsICclNGYnOiAnXFx4NGYnLCAnJTRGJzogJ1xceDRmJyxcbiAgJyU1MCc6ICdcXHg1MCcsICclNTEnOiAnXFx4NTEnLCAnJTUyJzogJ1xceDUyJywgJyU1Myc6ICdcXHg1MycsICclNTQnOiAnXFx4NTQnLFxuICAnJTU1JzogJ1xceDU1JywgJyU1Nic6ICdcXHg1NicsICclNTcnOiAnXFx4NTcnLCAnJTU4JzogJ1xceDU4JywgJyU1OSc6ICdcXHg1OScsXG4gICclNWEnOiAnXFx4NWEnLCAnJTVBJzogJ1xceDVhJywgJyU1Yic6ICdcXHg1YicsICclNUInOiAnXFx4NWInLCAnJTVjJzogJ1xceDVjJyxcbiAgJyU1Qyc6ICdcXHg1YycsICclNWQnOiAnXFx4NWQnLCAnJTVEJzogJ1xceDVkJywgJyU1ZSc6ICdcXHg1ZScsICclNUUnOiAnXFx4NWUnLFxuICAnJTVmJzogJ1xceDVmJywgJyU1Ric6ICdcXHg1ZicsICclNjAnOiAnXFx4NjAnLCAnJTYxJzogJ1xceDYxJywgJyU2Mic6ICdcXHg2MicsXG4gICclNjMnOiAnXFx4NjMnLCAnJTY0JzogJ1xceDY0JywgJyU2NSc6ICdcXHg2NScsICclNjYnOiAnXFx4NjYnLCAnJTY3JzogJ1xceDY3JyxcbiAgJyU2OCc6ICdcXHg2OCcsICclNjknOiAnXFx4NjknLCAnJTZhJzogJ1xceDZhJywgJyU2QSc6ICdcXHg2YScsICclNmInOiAnXFx4NmInLFxuICAnJTZCJzogJ1xceDZiJywgJyU2Yyc6ICdcXHg2YycsICclNkMnOiAnXFx4NmMnLCAnJTZkJzogJ1xceDZkJywgJyU2RCc6ICdcXHg2ZCcsXG4gICclNmUnOiAnXFx4NmUnLCAnJTZFJzogJ1xceDZlJywgJyU2Zic6ICdcXHg2ZicsICclNkYnOiAnXFx4NmYnLCAnJTcwJzogJ1xceDcwJyxcbiAgJyU3MSc6ICdcXHg3MScsICclNzInOiAnXFx4NzInLCAnJTczJzogJ1xceDczJywgJyU3NCc6ICdcXHg3NCcsICclNzUnOiAnXFx4NzUnLFxuICAnJTc2JzogJ1xceDc2JywgJyU3Nyc6ICdcXHg3NycsICclNzgnOiAnXFx4NzgnLCAnJTc5JzogJ1xceDc5JywgJyU3YSc6ICdcXHg3YScsXG4gICclN0EnOiAnXFx4N2EnLCAnJTdiJzogJ1xceDdiJywgJyU3Qic6ICdcXHg3YicsICclN2MnOiAnXFx4N2MnLCAnJTdDJzogJ1xceDdjJyxcbiAgJyU3ZCc6ICdcXHg3ZCcsICclN0QnOiAnXFx4N2QnLCAnJTdlJzogJ1xceDdlJywgJyU3RSc6ICdcXHg3ZScsICclN2YnOiAnXFx4N2YnLFxuICAnJTdGJzogJ1xceDdmJywgJyU4MCc6ICdcXHg4MCcsICclODEnOiAnXFx4ODEnLCAnJTgyJzogJ1xceDgyJywgJyU4Myc6ICdcXHg4MycsXG4gICclODQnOiAnXFx4ODQnLCAnJTg1JzogJ1xceDg1JywgJyU4Nic6ICdcXHg4NicsICclODcnOiAnXFx4ODcnLCAnJTg4JzogJ1xceDg4JyxcbiAgJyU4OSc6ICdcXHg4OScsICclOGEnOiAnXFx4OGEnLCAnJThBJzogJ1xceDhhJywgJyU4Yic6ICdcXHg4YicsICclOEInOiAnXFx4OGInLFxuICAnJThjJzogJ1xceDhjJywgJyU4Qyc6ICdcXHg4YycsICclOGQnOiAnXFx4OGQnLCAnJThEJzogJ1xceDhkJywgJyU4ZSc6ICdcXHg4ZScsXG4gICclOEUnOiAnXFx4OGUnLCAnJThmJzogJ1xceDhmJywgJyU4Ric6ICdcXHg4ZicsICclOTAnOiAnXFx4OTAnLCAnJTkxJzogJ1xceDkxJyxcbiAgJyU5Mic6ICdcXHg5MicsICclOTMnOiAnXFx4OTMnLCAnJTk0JzogJ1xceDk0JywgJyU5NSc6ICdcXHg5NScsICclOTYnOiAnXFx4OTYnLFxuICAnJTk3JzogJ1xceDk3JywgJyU5OCc6ICdcXHg5OCcsICclOTknOiAnXFx4OTknLCAnJTlhJzogJ1xceDlhJywgJyU5QSc6ICdcXHg5YScsXG4gICclOWInOiAnXFx4OWInLCAnJTlCJzogJ1xceDliJywgJyU5Yyc6ICdcXHg5YycsICclOUMnOiAnXFx4OWMnLCAnJTlkJzogJ1xceDlkJyxcbiAgJyU5RCc6ICdcXHg5ZCcsICclOWUnOiAnXFx4OWUnLCAnJTlFJzogJ1xceDllJywgJyU5Zic6ICdcXHg5ZicsICclOUYnOiAnXFx4OWYnLFxuICAnJWEwJzogJ1xceGEwJywgJyVBMCc6ICdcXHhhMCcsICclYTEnOiAnXFx4YTEnLCAnJUExJzogJ1xceGExJywgJyVhMic6ICdcXHhhMicsXG4gICclQTInOiAnXFx4YTInLCAnJWEzJzogJ1xceGEzJywgJyVBMyc6ICdcXHhhMycsICclYTQnOiAnXFx4YTQnLCAnJUE0JzogJ1xceGE0JyxcbiAgJyVhNSc6ICdcXHhhNScsICclQTUnOiAnXFx4YTUnLCAnJWE2JzogJ1xceGE2JywgJyVBNic6ICdcXHhhNicsICclYTcnOiAnXFx4YTcnLFxuICAnJUE3JzogJ1xceGE3JywgJyVhOCc6ICdcXHhhOCcsICclQTgnOiAnXFx4YTgnLCAnJWE5JzogJ1xceGE5JywgJyVBOSc6ICdcXHhhOScsXG4gICclYWEnOiAnXFx4YWEnLCAnJUFhJzogJ1xceGFhJywgJyVhQSc6ICdcXHhhYScsICclQUEnOiAnXFx4YWEnLCAnJWFiJzogJ1xceGFiJyxcbiAgJyVBYic6ICdcXHhhYicsICclYUInOiAnXFx4YWInLCAnJUFCJzogJ1xceGFiJywgJyVhYyc6ICdcXHhhYycsICclQWMnOiAnXFx4YWMnLFxuICAnJWFDJzogJ1xceGFjJywgJyVBQyc6ICdcXHhhYycsICclYWQnOiAnXFx4YWQnLCAnJUFkJzogJ1xceGFkJywgJyVhRCc6ICdcXHhhZCcsXG4gICclQUQnOiAnXFx4YWQnLCAnJWFlJzogJ1xceGFlJywgJyVBZSc6ICdcXHhhZScsICclYUUnOiAnXFx4YWUnLCAnJUFFJzogJ1xceGFlJyxcbiAgJyVhZic6ICdcXHhhZicsICclQWYnOiAnXFx4YWYnLCAnJWFGJzogJ1xceGFmJywgJyVBRic6ICdcXHhhZicsICclYjAnOiAnXFx4YjAnLFxuICAnJUIwJzogJ1xceGIwJywgJyViMSc6ICdcXHhiMScsICclQjEnOiAnXFx4YjEnLCAnJWIyJzogJ1xceGIyJywgJyVCMic6ICdcXHhiMicsXG4gICclYjMnOiAnXFx4YjMnLCAnJUIzJzogJ1xceGIzJywgJyViNCc6ICdcXHhiNCcsICclQjQnOiAnXFx4YjQnLCAnJWI1JzogJ1xceGI1JyxcbiAgJyVCNSc6ICdcXHhiNScsICclYjYnOiAnXFx4YjYnLCAnJUI2JzogJ1xceGI2JywgJyViNyc6ICdcXHhiNycsICclQjcnOiAnXFx4YjcnLFxuICAnJWI4JzogJ1xceGI4JywgJyVCOCc6ICdcXHhiOCcsICclYjknOiAnXFx4YjknLCAnJUI5JzogJ1xceGI5JywgJyViYSc6ICdcXHhiYScsXG4gICclQmEnOiAnXFx4YmEnLCAnJWJBJzogJ1xceGJhJywgJyVCQSc6ICdcXHhiYScsICclYmInOiAnXFx4YmInLCAnJUJiJzogJ1xceGJiJyxcbiAgJyViQic6ICdcXHhiYicsICclQkInOiAnXFx4YmInLCAnJWJjJzogJ1xceGJjJywgJyVCYyc6ICdcXHhiYycsICclYkMnOiAnXFx4YmMnLFxuICAnJUJDJzogJ1xceGJjJywgJyViZCc6ICdcXHhiZCcsICclQmQnOiAnXFx4YmQnLCAnJWJEJzogJ1xceGJkJywgJyVCRCc6ICdcXHhiZCcsXG4gICclYmUnOiAnXFx4YmUnLCAnJUJlJzogJ1xceGJlJywgJyViRSc6ICdcXHhiZScsICclQkUnOiAnXFx4YmUnLCAnJWJmJzogJ1xceGJmJyxcbiAgJyVCZic6ICdcXHhiZicsICclYkYnOiAnXFx4YmYnLCAnJUJGJzogJ1xceGJmJywgJyVjMCc6ICdcXHhjMCcsICclQzAnOiAnXFx4YzAnLFxuICAnJWMxJzogJ1xceGMxJywgJyVDMSc6ICdcXHhjMScsICclYzInOiAnXFx4YzInLCAnJUMyJzogJ1xceGMyJywgJyVjMyc6ICdcXHhjMycsXG4gICclQzMnOiAnXFx4YzMnLCAnJWM0JzogJ1xceGM0JywgJyVDNCc6ICdcXHhjNCcsICclYzUnOiAnXFx4YzUnLCAnJUM1JzogJ1xceGM1JyxcbiAgJyVjNic6ICdcXHhjNicsICclQzYnOiAnXFx4YzYnLCAnJWM3JzogJ1xceGM3JywgJyVDNyc6ICdcXHhjNycsICclYzgnOiAnXFx4YzgnLFxuICAnJUM4JzogJ1xceGM4JywgJyVjOSc6ICdcXHhjOScsICclQzknOiAnXFx4YzknLCAnJWNhJzogJ1xceGNhJywgJyVDYSc6ICdcXHhjYScsXG4gICclY0EnOiAnXFx4Y2EnLCAnJUNBJzogJ1xceGNhJywgJyVjYic6ICdcXHhjYicsICclQ2InOiAnXFx4Y2InLCAnJWNCJzogJ1xceGNiJyxcbiAgJyVDQic6ICdcXHhjYicsICclY2MnOiAnXFx4Y2MnLCAnJUNjJzogJ1xceGNjJywgJyVjQyc6ICdcXHhjYycsICclQ0MnOiAnXFx4Y2MnLFxuICAnJWNkJzogJ1xceGNkJywgJyVDZCc6ICdcXHhjZCcsICclY0QnOiAnXFx4Y2QnLCAnJUNEJzogJ1xceGNkJywgJyVjZSc6ICdcXHhjZScsXG4gICclQ2UnOiAnXFx4Y2UnLCAnJWNFJzogJ1xceGNlJywgJyVDRSc6ICdcXHhjZScsICclY2YnOiAnXFx4Y2YnLCAnJUNmJzogJ1xceGNmJyxcbiAgJyVjRic6ICdcXHhjZicsICclQ0YnOiAnXFx4Y2YnLCAnJWQwJzogJ1xceGQwJywgJyVEMCc6ICdcXHhkMCcsICclZDEnOiAnXFx4ZDEnLFxuICAnJUQxJzogJ1xceGQxJywgJyVkMic6ICdcXHhkMicsICclRDInOiAnXFx4ZDInLCAnJWQzJzogJ1xceGQzJywgJyVEMyc6ICdcXHhkMycsXG4gICclZDQnOiAnXFx4ZDQnLCAnJUQ0JzogJ1xceGQ0JywgJyVkNSc6ICdcXHhkNScsICclRDUnOiAnXFx4ZDUnLCAnJWQ2JzogJ1xceGQ2JyxcbiAgJyVENic6ICdcXHhkNicsICclZDcnOiAnXFx4ZDcnLCAnJUQ3JzogJ1xceGQ3JywgJyVkOCc6ICdcXHhkOCcsICclRDgnOiAnXFx4ZDgnLFxuICAnJWQ5JzogJ1xceGQ5JywgJyVEOSc6ICdcXHhkOScsICclZGEnOiAnXFx4ZGEnLCAnJURhJzogJ1xceGRhJywgJyVkQSc6ICdcXHhkYScsXG4gICclREEnOiAnXFx4ZGEnLCAnJWRiJzogJ1xceGRiJywgJyVEYic6ICdcXHhkYicsICclZEInOiAnXFx4ZGInLCAnJURCJzogJ1xceGRiJyxcbiAgJyVkYyc6ICdcXHhkYycsICclRGMnOiAnXFx4ZGMnLCAnJWRDJzogJ1xceGRjJywgJyVEQyc6ICdcXHhkYycsICclZGQnOiAnXFx4ZGQnLFxuICAnJURkJzogJ1xceGRkJywgJyVkRCc6ICdcXHhkZCcsICclREQnOiAnXFx4ZGQnLCAnJWRlJzogJ1xceGRlJywgJyVEZSc6ICdcXHhkZScsXG4gICclZEUnOiAnXFx4ZGUnLCAnJURFJzogJ1xceGRlJywgJyVkZic6ICdcXHhkZicsICclRGYnOiAnXFx4ZGYnLCAnJWRGJzogJ1xceGRmJyxcbiAgJyVERic6ICdcXHhkZicsICclZTAnOiAnXFx4ZTAnLCAnJUUwJzogJ1xceGUwJywgJyVlMSc6ICdcXHhlMScsICclRTEnOiAnXFx4ZTEnLFxuICAnJWUyJzogJ1xceGUyJywgJyVFMic6ICdcXHhlMicsICclZTMnOiAnXFx4ZTMnLCAnJUUzJzogJ1xceGUzJywgJyVlNCc6ICdcXHhlNCcsXG4gICclRTQnOiAnXFx4ZTQnLCAnJWU1JzogJ1xceGU1JywgJyVFNSc6ICdcXHhlNScsICclZTYnOiAnXFx4ZTYnLCAnJUU2JzogJ1xceGU2JyxcbiAgJyVlNyc6ICdcXHhlNycsICclRTcnOiAnXFx4ZTcnLCAnJWU4JzogJ1xceGU4JywgJyVFOCc6ICdcXHhlOCcsICclZTknOiAnXFx4ZTknLFxuICAnJUU5JzogJ1xceGU5JywgJyVlYSc6ICdcXHhlYScsICclRWEnOiAnXFx4ZWEnLCAnJWVBJzogJ1xceGVhJywgJyVFQSc6ICdcXHhlYScsXG4gICclZWInOiAnXFx4ZWInLCAnJUViJzogJ1xceGViJywgJyVlQic6ICdcXHhlYicsICclRUInOiAnXFx4ZWInLCAnJWVjJzogJ1xceGVjJyxcbiAgJyVFYyc6ICdcXHhlYycsICclZUMnOiAnXFx4ZWMnLCAnJUVDJzogJ1xceGVjJywgJyVlZCc6ICdcXHhlZCcsICclRWQnOiAnXFx4ZWQnLFxuICAnJWVEJzogJ1xceGVkJywgJyVFRCc6ICdcXHhlZCcsICclZWUnOiAnXFx4ZWUnLCAnJUVlJzogJ1xceGVlJywgJyVlRSc6ICdcXHhlZScsXG4gICclRUUnOiAnXFx4ZWUnLCAnJWVmJzogJ1xceGVmJywgJyVFZic6ICdcXHhlZicsICclZUYnOiAnXFx4ZWYnLCAnJUVGJzogJ1xceGVmJyxcbiAgJyVmMCc6ICdcXHhmMCcsICclRjAnOiAnXFx4ZjAnLCAnJWYxJzogJ1xceGYxJywgJyVGMSc6ICdcXHhmMScsICclZjInOiAnXFx4ZjInLFxuICAnJUYyJzogJ1xceGYyJywgJyVmMyc6ICdcXHhmMycsICclRjMnOiAnXFx4ZjMnLCAnJWY0JzogJ1xceGY0JywgJyVGNCc6ICdcXHhmNCcsXG4gICclZjUnOiAnXFx4ZjUnLCAnJUY1JzogJ1xceGY1JywgJyVmNic6ICdcXHhmNicsICclRjYnOiAnXFx4ZjYnLCAnJWY3JzogJ1xceGY3JyxcbiAgJyVGNyc6ICdcXHhmNycsICclZjgnOiAnXFx4ZjgnLCAnJUY4JzogJ1xceGY4JywgJyVmOSc6ICdcXHhmOScsICclRjknOiAnXFx4ZjknLFxuICAnJWZhJzogJ1xceGZhJywgJyVGYSc6ICdcXHhmYScsICclZkEnOiAnXFx4ZmEnLCAnJUZBJzogJ1xceGZhJywgJyVmYic6ICdcXHhmYicsXG4gICclRmInOiAnXFx4ZmInLCAnJWZCJzogJ1xceGZiJywgJyVGQic6ICdcXHhmYicsICclZmMnOiAnXFx4ZmMnLCAnJUZjJzogJ1xceGZjJyxcbiAgJyVmQyc6ICdcXHhmYycsICclRkMnOiAnXFx4ZmMnLCAnJWZkJzogJ1xceGZkJywgJyVGZCc6ICdcXHhmZCcsICclZkQnOiAnXFx4ZmQnLFxuICAnJUZEJzogJ1xceGZkJywgJyVmZSc6ICdcXHhmZScsICclRmUnOiAnXFx4ZmUnLCAnJWZFJzogJ1xceGZlJywgJyVGRSc6ICdcXHhmZScsXG4gICclZmYnOiAnXFx4ZmYnLCAnJUZmJzogJ1xceGZmJywgJyVmRic6ICdcXHhmZicsICclRkYnOiAnXFx4ZmYnXG59XG5cbmZ1bmN0aW9uIGVuY29kZWRSZXBsYWNlciAobWF0Y2gpIHtcbiAgcmV0dXJuIEVuY29kZWRMb29rdXBbbWF0Y2hdXG59XG5cbmNvbnN0IFNUQVRFX0tFWSA9IDBcbmNvbnN0IFNUQVRFX1ZBTFVFID0gMVxuY29uc3QgU1RBVEVfQ0hBUlNFVCA9IDJcbmNvbnN0IFNUQVRFX0xBTkcgPSAzXG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zIChzdHIpIHtcbiAgY29uc3QgcmVzID0gW11cbiAgbGV0IHN0YXRlID0gU1RBVEVfS0VZXG4gIGxldCBjaGFyc2V0ID0gJydcbiAgbGV0IGlucXVvdGUgPSBmYWxzZVxuICBsZXQgZXNjYXBpbmcgPSBmYWxzZVxuICBsZXQgcCA9IDBcbiAgbGV0IHRtcCA9ICcnXG4gIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgY29uc3QgY2hhciA9IHN0cltpXVxuICAgIGlmIChjaGFyID09PSAnXFxcXCcgJiYgaW5xdW90ZSkge1xuICAgICAgaWYgKGVzY2FwaW5nKSB7IGVzY2FwaW5nID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgIGlmIChpbnF1b3RlKSB7XG4gICAgICAgICAgaW5xdW90ZSA9IGZhbHNlXG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgfSBlbHNlIHsgaW5xdW90ZSA9IHRydWUgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHsgZXNjYXBpbmcgPSBmYWxzZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlc2NhcGluZyAmJiBpbnF1b3RlKSB7IHRtcCArPSAnXFxcXCcgfVxuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgaWYgKChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCB8fCBzdGF0ZSA9PT0gU1RBVEVfTEFORykgJiYgY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBTVEFURV9DSEFSU0VUKSB7XG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9MQU5HXG4gICAgICAgICAgY2hhcnNldCA9IHRtcC5zdWJzdHJpbmcoMSlcbiAgICAgICAgfSBlbHNlIHsgc3RhdGUgPSBTVEFURV9WQUxVRSB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBTVEFURV9LRVkgJiZcbiAgICAgICAgKGNoYXIgPT09ICcqJyB8fCBjaGFyID09PSAnPScpICYmXG4gICAgICAgIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGUgPSBjaGFyID09PSAnKidcbiAgICAgICAgICA/IFNUQVRFX0NIQVJTRVRcbiAgICAgICAgICA6IFNUQVRFX1ZBTFVFXG4gICAgICAgIHJlc1twXSA9IFt0bXAsIHVuZGVmaW5lZF1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgY2hhciA9PT0gJzsnKSB7XG4gICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIGlmIChjaGFyc2V0KSB7XG4gICAgICAgICAgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICAgICAgICAgJ2JpbmFyeScsXG4gICAgICAgICAgICAgIGNoYXJzZXQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYXJzZXQgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHsgcmVzW3BdID0gdG1wIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgICsrcFxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSkgeyBjb250aW51ZSB9XG4gICAgfVxuICAgIHRtcCArPSBjaGFyXG4gIH1cbiAgaWYgKGNoYXJzZXQgJiYgdG1wLmxlbmd0aCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICdiaW5hcnknLFxuICAgICAgY2hhcnNldClcbiAgfSBlbHNlIGlmICh0bXApIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgfVxuXG4gIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0bXApIHsgcmVzW3BdID0gdG1wIH1cbiAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cblxuICByZXR1cm4gcmVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VQYXJhbXNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZW5hbWUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgeyByZXR1cm4gJycgfVxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHN3aXRjaCAocGF0aC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MkY6IC8vICcvJ1xuICAgICAgY2FzZSAweDVDOiAvLyAnXFwnXG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGkgKyAxKVxuICAgICAgICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gVE9ETzpcbi8vICAqIHN1cHBvcnQgMSBuZXN0ZWQgbXVsdGlwYXJ0IGxldmVsXG4vLyAgICAoc2VlIHNlY29uZCBtdWx0aXBhcnQgZXhhbXBsZSBoZXJlOlxuLy8gICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNkaWR4LW11bHRpcGFydGZvcm0tZGF0YSlcbi8vICAqIHN1cHBvcnQgbGltaXRzLmZpZWxkTmFtZVNpemVcbi8vICAgICAtLSB0aGlzIHdpbGwgcmVxdWlyZSBtb2RpZmljYXRpb25zIHRvIHV0aWxzLnBhcnNlUGFyYW1zXG5cbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4uL3V0aWxzL3BhcnNlUGFyYW1zJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGJhc2VuYW1lID0gcmVxdWlyZSgnLi4vdXRpbHMvYmFzZW5hbWUnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0JPVU5EQVJZID0gL15ib3VuZGFyeSQvaVxuY29uc3QgUkVfRklFTEQgPSAvXmZvcm0tZGF0YSQvaVxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuY29uc3QgUkVfRklMRU5BTUUgPSAvXmZpbGVuYW1lJC9pXG5jb25zdCBSRV9OQU1FID0gL15uYW1lJC9pXG5cbk11bHRpcGFydC5kZXRlY3QgPSAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pXG5mdW5jdGlvbiBNdWx0aXBhcnQgKGJveSwgY2ZnKSB7XG4gIGxldCBpXG4gIGxldCBsZW5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IGJvdW5kYXJ5XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgaXNQYXJ0QUZpbGUgPSBjZmcuaXNQYXJ0QUZpbGUgfHwgKChmaWVsZE5hbWUsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4gKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSlcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlIHx8IFtdXG4gIGNvbnN0IGRlZkNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCdcbiAgY29uc3QgcHJlc2VydmVQYXRoID0gY2ZnLnByZXNlcnZlUGF0aFxuICBjb25zdCBmaWxlT3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLmZpbGVId20gfVxuXG4gIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgUkVfQk9VTkRBUlkudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgYm91bmRhcnkgPSBwYXJzZWRDb25UeXBlW2ldWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRmluaXNoZWQgKCkge1xuICAgIGlmIChuZW5kcyA9PT0gMCAmJiBmaW5pc2hlZCAmJiAhYm95Ll9kb25lKSB7XG4gICAgICBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICBzZWxmLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBhcnQ6IEJvdW5kYXJ5IG5vdCBmb3VuZCcpIH1cblxuICBjb25zdCBmaWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgY29uc3QgZmlsZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVTaXplJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpbGVzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlcycsIEluZmluaXR5KVxuICBjb25zdCBmaWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuICBjb25zdCBwYXJ0c0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAncGFydHMnLCBJbmZpbml0eSlcbiAgY29uc3QgaGVhZGVyUGFpcnNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclBhaXJzJywgMjAwMClcbiAgY29uc3QgaGVhZGVyU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyU2l6ZScsIDgwICogMTAyNClcblxuICBsZXQgbmZpbGVzID0gMFxuICBsZXQgbmZpZWxkcyA9IDBcbiAgbGV0IG5lbmRzID0gMFxuICBsZXQgY3VyRmlsZVxuICBsZXQgY3VyRmllbGRcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICB0aGlzLl9uZWVkRHJhaW4gPSBmYWxzZVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX25wYXJ0cyA9IDBcbiAgdGhpcy5fYm95ID0gYm95XG5cbiAgY29uc3QgcGFyc2VyQ2ZnID0ge1xuICAgIGJvdW5kYXJ5LFxuICAgIG1heEhlYWRlclBhaXJzOiBoZWFkZXJQYWlyc0xpbWl0LFxuICAgIG1heEhlYWRlclNpemU6IGhlYWRlclNpemVMaW1pdCxcbiAgICBwYXJ0SHdtOiBmaWxlT3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGhpZ2hXYXRlck1hcms6IGNmZy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICB0aGlzLnBhcnNlciA9IG5ldyBEaWNlcihwYXJzZXJDZmcpXG4gIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9uZWVkRHJhaW4gPSBmYWxzZVxuICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fcGF1c2UpIHtcbiAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICBjYigpXG4gICAgfVxuICB9KS5vbigncGFydCcsIGZ1bmN0aW9uIG9uUGFydCAocGFydCkge1xuICAgIGlmICgrK3NlbGYuX25wYXJ0cyA+IHBhcnRzTGltaXQpIHtcbiAgICAgIHNlbGYucGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdwYXJ0Jywgb25QYXJ0KVxuICAgICAgc2VsZi5wYXJzZXIub24oJ3BhcnQnLCBza2lwUGFydClcbiAgICAgIGJveS5oaXRQYXJ0c0xpbWl0ID0gdHJ1ZVxuICAgICAgYm95LmVtaXQoJ3BhcnRzTGltaXQnKVxuICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgfVxuXG4gICAgLy8gaGFjayBiZWNhdXNlIHN0cmVhbXMyIF9hbHdheXNfIGRvZXNuJ3QgZW1pdCAnZW5kJyB1bnRpbCBuZXh0VGljaywgc28gbGV0XG4gICAgLy8gdXMgZW1pdCAnZW5kJyBlYXJseSBzaW5jZSB3ZSBrbm93IHRoZSBwYXJ0IGhhcyBlbmRlZCBpZiB3ZSBhcmUgYWxyZWFkeVxuICAgIC8vIHNlZWluZyB0aGUgbmV4dCBwYXJ0XG4gICAgaWYgKGN1ckZpZWxkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGN1ckZpZWxkXG4gICAgICBmaWVsZC5lbWl0KCdlbmQnKVxuICAgICAgZmllbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKVxuICAgIH1cblxuICAgIHBhcnQub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIGxldCBjb250eXBlXG4gICAgICBsZXQgZmllbGRuYW1lXG4gICAgICBsZXQgcGFyc2VkXG4gICAgICBsZXQgY2hhcnNldFxuICAgICAgbGV0IGVuY29kaW5nXG4gICAgICBsZXQgZmlsZW5hbWVcbiAgICAgIGxldCBuc2l6ZSA9IDBcblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LXR5cGUnXVswXSlcbiAgICAgICAgaWYgKHBhcnNlZFswXSkge1xuICAgICAgICAgIGNvbnR5cGUgPSBwYXJzZWRbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKFJFX0NIQVJTRVQudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnR5cGUgPSAndGV4dC9wbGFpbicgfVxuICAgICAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gZGVmQ2hhcnNldCB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXVswXSlcbiAgICAgICAgaWYgKCFSRV9GSUVMRC50ZXN0KHBhcnNlZFswXSkpIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKFJFX05BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWVsZG5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICB9IGVsc2UgaWYgKFJFX0ZJTEVOQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICAgIGlmICghcHJlc2VydmVQYXRoKSB7IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSkgeyBlbmNvZGluZyA9IGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddWzBdLnRvTG93ZXJDYXNlKCkgfSBlbHNlIHsgZW5jb2RpbmcgPSAnN2JpdCcgfVxuXG4gICAgICBsZXQgb25EYXRhLFxuICAgICAgICBvbkVuZFxuXG4gICAgICBpZiAoaXNQYXJ0QUZpbGUoZmllbGRuYW1lLCBjb250eXBlLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgLy8gZmlsZS9iaW5hcnkgZmllbGRcbiAgICAgICAgaWYgKG5maWxlcyA9PT0gZmlsZXNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpbGVzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWxlc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpbGVzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpbGVzXG5cbiAgICAgICAgaWYgKGJveS5saXN0ZW5lckNvdW50KCdmaWxlJykgPT09IDApIHtcbiAgICAgICAgICBzZWxmLnBhcnNlci5faWdub3JlKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3RyZWFtKGZpbGVPcHRzKVxuICAgICAgICBjdXJGaWxlID0gZmlsZVxuICAgICAgICBmaWxlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGZpbGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgIGlmICghc2VsZi5fcGF1c2UpIHsgcmV0dXJuIH1cbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJveS5lbWl0KCdmaWxlJywgZmllbGRuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIGNvbnR5cGUpXG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpbGVTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gZmlsZVNpemVMaW1pdCAtIG5zaXplICsgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChleHRyYWxlbiA+IDApIHsgZmlsZS5wdXNoKGRhdGEuc2xpY2UoMCwgZXh0cmFsZW4pKSB9XG4gICAgICAgICAgICBmaWxlLnRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gZmlsZVNpemVMaW1pdFxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgICAgZmlsZS5lbWl0KCdsaW1pdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWxlLnB1c2goZGF0YSkpIHsgc2VsZi5fcGF1c2UgPSB0cnVlIH1cblxuICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gbnNpemVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICBmaWxlLnB1c2gobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWZpbGUgZmllbGRcbiAgICAgICAgaWYgKG5maWVsZHMgPT09IGZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmllbGRzXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCB0cnVuY2F0ZWQgPSBmYWxzZVxuICAgICAgICBjdXJGaWVsZCA9IHBhcnRcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gKGZpZWxkU2l6ZUxpbWl0IC0gKG5zaXplIC0gZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIDAsIGV4dHJhbGVuKVxuICAgICAgICAgICAgdHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgIH0gZWxzZSB7IGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKSB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWVsZCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7IGJ1ZmZlciA9IGRlY29kZVRleHQoYnVmZmVyLCAnYmluYXJ5JywgY2hhcnNldCkgfVxuICAgICAgICAgIGJveS5lbWl0KCdmaWVsZCcsIGZpZWxkbmFtZSwgYnVmZmVyLCBmYWxzZSwgdHJ1bmNhdGVkLCBlbmNvZGluZywgY29udHlwZSlcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQXMgb2Ygbm9kZUAyZWZlNGFiNzYxNjY2ICh2MC4xMC4yOSsvdjAuMTEuMTQrKSwgYnVzYm95IGhhZCBiZWNvbWVcbiAgICAgICAgIGJyb2tlbi4gU3RyZWFtczIvc3RyZWFtczMgaXMgYSBodWdlIGJsYWNrIGJveCBvZiBjb25mdXNpb24sIGJ1dFxuICAgICAgICAgc29tZWhvdyBvdmVycmlkaW5nIHRoZSBzeW5jIHN0YXRlIHNlZW1zIHRvIGZpeCB0aGluZ3MgYWdhaW4gKGFuZCBzdGlsbFxuICAgICAgICAgc2VlbXMgdG8gd29yayBmb3IgcHJldmlvdXMgbm9kZSB2ZXJzaW9ucykuXG4gICAgICAqL1xuICAgICAgcGFydC5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcblxuICAgICAgcGFydC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAgIHBhcnQub24oJ2VuZCcsIG9uRW5kKVxuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjdXJGaWxlKSB7IGN1ckZpbGUuZW1pdCgnZXJyb3InLCBlcnIpIH1cbiAgICB9KVxuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYm95LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9KS5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNoZWNrRmluaXNoZWQoKVxuICB9KVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBjYikge1xuICBjb25zdCByID0gdGhpcy5wYXJzZXIud3JpdGUoY2h1bmspXG4gIGlmIChyICYmICF0aGlzLl9wYXVzZSkge1xuICAgIGNiKClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9uZWVkRHJhaW4gPSAhclxuICAgIHRoaXMuX2NiID0gY2JcbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi5wYXJzZXIud3JpdGFibGUpIHtcbiAgICBzZWxmLnBhcnNlci5lbmQoKVxuICB9IGVsc2UgaWYgKCFzZWxmLl9ib3kuX2RvbmUpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2JveS5fZG9uZSA9IHRydWVcbiAgICAgIHNlbGYuX2JveS5lbWl0KCdmaW5pc2gnKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2tpcFBhcnQgKHBhcnQpIHtcbiAgcGFydC5yZXN1bWUoKVxufVxuXG5mdW5jdGlvbiBGaWxlU3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0cylcblxuICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICB0aGlzLnRydW5jYXRlZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEZpbGVTdHJlYW0sIFJlYWRhYmxlKVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpcGFydFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgUkVfUExVUyA9IC9cXCsvZ1xuXG5jb25zdCBIRVggPSBbXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBcbl1cblxuZnVuY3Rpb24gRGVjb2RlciAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5EZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgLy8gUmVwbGFjZSAnKycgd2l0aCAnICcgYmVmb3JlIGRlY29kaW5nXG4gIHN0ciA9IHN0ci5yZXBsYWNlKFJFX1BMVVMsICcgJylcbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMDsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gIGZvciAoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFIRVhbc3RyLmNoYXJDb2RlQXQoaSldKSB7XG4gICAgICAgIHJlcyArPSAnJScgKyB0aGlzLmJ1ZmZlclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICAtLWkgLy8gcmV0cnkgY2hhcmFjdGVyXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1ZmZlciArPSBzdHJbaV1cbiAgICAgICAgKytwXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0aGlzLmJ1ZmZlciwgMTYpKVxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cltpXSA9PT0gJyUnKSB7XG4gICAgICBpZiAoaSA+IHApIHtcbiAgICAgICAgcmVzICs9IHN0ci5zdWJzdHJpbmcocCwgaSlcbiAgICAgICAgcCA9IGlcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyID0gJydcbiAgICAgICsrcFxuICAgIH1cbiAgfVxuICBpZiAocCA8IGxlbiAmJiB0aGlzLmJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7IHJlcyArPSBzdHIuc3Vic3RyaW5nKHApIH1cbiAgcmV0dXJuIHJlc1xufVxuRGVjb2Rlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb2RlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRGVjb2RlciA9IHJlcXVpcmUoJy4uL3V0aWxzL0RlY29kZXInKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcblxuVXJsRW5jb2RlZC5kZXRlY3QgPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2lcbmZ1bmN0aW9uIFVybEVuY29kZWQgKGJveSwgY2ZnKSB7XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlXG4gIHRoaXMuYm95ID0gYm95XG5cbiAgdGhpcy5maWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgdGhpcy5maWVsZE5hbWVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZE5hbWVTaXplJywgMTAwKVxuICB0aGlzLmZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG5cbiAgbGV0IGNoYXJzZXRcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgICBSRV9DSEFSU0VULnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGNoYXJzZXQgPSBwYXJzZWRDb25UeXBlW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnIH1cblxuICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHRoaXMuY2hhcnNldCA9IGNoYXJzZXRcbiAgdGhpcy5fZmllbGRzID0gMFxuICB0aGlzLl9zdGF0ZSA9ICdrZXknXG4gIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gIHRoaXMuX2J5dGVzS2V5ID0gMFxuICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgdGhpcy5fa2V5ID0gJydcbiAgdGhpcy5fdmFsID0gJydcbiAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX2hpdExpbWl0ID0gZmFsc2Vcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkge1xuICAgIGlmICghdGhpcy5ib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgIHRoaXMuYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgIH1cbiAgICByZXR1cm4gY2IoKVxuICB9XG5cbiAgbGV0IGlkeGVxOyBsZXQgaWR4YW1wOyBsZXQgaTsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuXG4gIHdoaWxlIChwIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5Jykge1xuICAgICAgaWR4ZXEgPSBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4M0QvKiA9ICovKSB7XG4gICAgICAgICAgaWR4ZXEgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzS2V5ID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzS2V5IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGVxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggYXNzaWdubWVudFxuICAgICAgICBpZiAoaWR4ZXEgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4ZXEpKSB9XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3ZhbCdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX3ZhbCA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzVmFsID0gMFxuICAgICAgICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGVxICsgMVxuICAgICAgfSBlbHNlIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBubyBhc3NpZ25tZW50XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGxldCBrZXk7IGNvbnN0IGtleVRydW5jID0gdGhpcy5fa2V5VHJ1bmNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsga2V5ID0gKHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkpIH0gZWxzZSB7IGtleSA9IHRoaXMuX2tleSB9XG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIGlmIChrZXkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KGtleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGtleVRydW5jLFxuICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fYnl0ZXNLZXkgPSB0aGlzLl9rZXkubGVuZ3RoKSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNWYWwgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc1ZhbCB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpIH1cbiAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdrZXknXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl92YWwgPT09ICcnICYmIHRoaXMuZmllbGRTaXplTGltaXQgPT09IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fYnl0ZXNWYWwgPSB0aGlzLl92YWwubGVuZ3RoKSA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNiKClcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3kuX2RvbmUpIHsgcmV0dXJuIH1cblxuICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknICYmIHRoaXMuX2tleS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgZmFsc2UpXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICd2YWwnKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICB9XG4gIHRoaXMuYm95Ll9kb25lID0gdHJ1ZVxuICB0aGlzLmJveS5lbWl0KCdmaW5pc2gnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVybEVuY29kZWRcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBNdWx0aXBhcnRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL211bHRpcGFydCcpXG5jb25zdCBVcmxlbmNvZGVkUGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy91cmxlbmNvZGVkJylcbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi91dGlscy9wYXJzZVBhcmFtcycpXG5cbmZ1bmN0aW9uIEJ1c2JveSAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVzYm95KSkgeyByZXR1cm4gbmV3IEJ1c2JveShvcHRzKSB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdC4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdCB3aXRoIGhlYWRlcnMtYXR0cmlidXRlLicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgQ29udGVudC1UeXBlLWhlYWRlci4nKVxuICB9XG5cbiAgY29uc3Qge1xuICAgIGhlYWRlcnMsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9ID0gb3B0c1xuXG4gIHRoaXMub3B0cyA9IHtcbiAgICBhdXRvRGVzdHJveTogZmFsc2UsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgdGhpcy5vcHRzKVxuXG4gIHRoaXMuX2RvbmUgPSBmYWxzZVxuICB0aGlzLl9wYXJzZXIgPSB0aGlzLmdldFBhcnNlckJ5SGVhZGVycyhoZWFkZXJzKVxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG59XG5pbmhlcml0cyhCdXNib3ksIFdyaXRhYmxlU3RyZWFtKVxuXG5CdXNib3kucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJykge1xuICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcGFyc2VyPy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICB9XG4gIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5nZXRQYXJzZXJCeUhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICBjb25zdCBjZmcgPSB7XG4gICAgZGVmQ2hhcnNldDogdGhpcy5vcHRzLmRlZkNoYXJzZXQsXG4gICAgZmlsZUh3bTogdGhpcy5vcHRzLmZpbGVId20sXG4gICAgaGVhZGVycyxcbiAgICBoaWdoV2F0ZXJNYXJrOiB0aGlzLm9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBpc1BhcnRBRmlsZTogdGhpcy5vcHRzLmlzUGFydEFGaWxlLFxuICAgIGxpbWl0czogdGhpcy5vcHRzLmxpbWl0cyxcbiAgICBwYXJzZWRDb25UeXBlOiBwYXJzZWQsXG4gICAgcHJlc2VydmVQYXRoOiB0aGlzLm9wdHMucHJlc2VydmVQYXRoXG4gIH1cblxuICBpZiAoTXVsdGlwYXJ0UGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpcGFydFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgaWYgKFVybGVuY29kZWRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgVXJsZW5jb2RlZFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBDb250ZW50LVR5cGUuJylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLl9wYXJzZXIud3JpdGUoY2h1bmssIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuQnVzYm95ID0gQnVzYm95XG5cbm1vZHVsZS5leHBvcnRzLkRpY2VyID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWVzc2FnZUNoYW5uZWwsIHJlY2VpdmVNZXNzYWdlT25Qb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnUE9TVCddXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQgPSBuZXcgU2V0KGNvcnNTYWZlTGlzdGVkTWV0aG9kcylcblxuY29uc3QgbnVsbEJvZHlTdGF0dXMgPSBbMTAxLCAyMDQsIDIwNSwgMzA0XVxuXG5jb25zdCByZWRpcmVjdFN0YXR1cyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Jsb2NrLWJhZC1wb3J0XG5jb25zdCBiYWRQb3J0cyA9IFtcbiAgJzEnLCAnNycsICc5JywgJzExJywgJzEzJywgJzE1JywgJzE3JywgJzE5JywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI1JywgJzM3JywgJzQyJywgJzQzJywgJzUzJywgJzY5JywgJzc3JywgJzc5JyxcbiAgJzg3JywgJzk1JywgJzEwMScsICcxMDInLCAnMTAzJywgJzEwNCcsICcxMDknLCAnMTEwJywgJzExMScsICcxMTMnLCAnMTE1JywgJzExNycsICcxMTknLCAnMTIzJywgJzEzNScsICcxMzcnLFxuICAnMTM5JywgJzE0MycsICcxNjEnLCAnMTc5JywgJzM4OScsICc0MjcnLCAnNDY1JywgJzUxMicsICc1MTMnLCAnNTE0JywgJzUxNScsICc1MjYnLCAnNTMwJywgJzUzMScsICc1MzInLFxuICAnNTQwJywgJzU0OCcsICc1NTQnLCAnNTU2JywgJzU2MycsICc1ODcnLCAnNjAxJywgJzYzNicsICc5ODknLCAnOTkwJywgJzk5MycsICc5OTUnLCAnMTcxOScsICcxNzIwJywgJzE3MjMnLFxuICAnMjA0OScsICczNjU5JywgJzQwNDUnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY5NycsXG4gICcxMDA4MCdcbl1cblxuY29uc3QgYmFkUG9ydHNTZXQgPSBuZXcgU2V0KGJhZFBvcnRzKVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWNpZXNcbmNvbnN0IHJlZmVycmVyUG9saWN5ID0gW1xuICAnJyxcbiAgJ25vLXJlZmVycmVyJyxcbiAgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJyxcbiAgJ3NhbWUtb3JpZ2luJyxcbiAgJ29yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luJyxcbiAgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3Vuc2FmZS11cmwnXG5dXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IFsnZm9sbG93JywgJ21hbnVhbCcsICdlcnJvciddXG5cbmNvbnN0IHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbmNvbnN0IHNhZmVNZXRob2RzU2V0ID0gbmV3IFNldChzYWZlTWV0aG9kcylcblxuY29uc3QgcmVxdWVzdE1vZGUgPSBbJ25hdmlnYXRlJywgJ3NhbWUtb3JpZ2luJywgJ25vLWNvcnMnLCAnY29ycyddXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IFsnb21pdCcsICdzYW1lLW9yaWdpbicsICdpbmNsdWRlJ11cblxuY29uc3QgcmVxdWVzdENhY2hlID0gW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWJvZHktaGVhZGVyLW5hbWVcbmNvbnN0IHJlcXVlc3RCb2R5SGVhZGVyID0gW1xuICAnY29udGVudC1lbmNvZGluZycsXG4gICdjb250ZW50LWxhbmd1YWdlJyxcbiAgJ2NvbnRlbnQtbG9jYXRpb24nLFxuICAnY29udGVudC10eXBlJyxcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDIxXG4gIC8vICdDb250ZW50LUxlbmd0aCcgaXMgYSBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHdoaWNoIGlzIHR5cGljYWxseVxuICAvLyByZW1vdmVkIGluIHRoZSBIZWFkZXJzIGltcGxlbWVudGF0aW9uLiBIb3dldmVyLCB1bmRpY2kgZG9lc24ndFxuICAvLyBmaWx0ZXIgb3V0IGhlYWRlcnMsIHNvIHdlIGFkZCBpdCBoZXJlLlxuICAnY29udGVudC1sZW5ndGgnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNlbnVtZGVmLXJlcXVlc3RkdXBsZXhcbmNvbnN0IHJlcXVlc3REdXBsZXggPSBbXG4gICdoYWxmJ1xuXVxuXG4vLyBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzID0gWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ11cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHNTZXQgPSBuZXcgU2V0KGZvcmJpZGRlbk1ldGhvZHMpXG5cbmNvbnN0IHN1YnJlc291cmNlID0gW1xuICAnYXVkaW8nLFxuICAnYXVkaW93b3JrbGV0JyxcbiAgJ2ZvbnQnLFxuICAnaW1hZ2UnLFxuICAnbWFuaWZlc3QnLFxuICAncGFpbnR3b3JrbGV0JyxcbiAgJ3NjcmlwdCcsXG4gICdzdHlsZScsXG4gICd0cmFjaycsXG4gICd2aWRlbycsXG4gICd4c2x0JyxcbiAgJydcbl1cbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydET01FeGNlcHRpb24nXX0gKi9cbmNvbnN0IERPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uID8/ICgoKSA9PiB7XG4gIC8vIERPTUV4Y2VwdGlvbiB3YXMgb25seSBtYWRlIGEgZ2xvYmFsIGluIE5vZGUgdjE3LjAuMCxcbiAgLy8gYnV0IGZldGNoIHN1cHBvcnRzID49IHYxNi44LlxuICB0cnkge1xuICAgIGF0b2IoJ34nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVycikuY29uc3RydWN0b3JcbiAgfVxufSkoKVxuXG5sZXQgY2hhbm5lbFxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ3N0cnVjdHVyZWRDbG9uZSddfSAqL1xuY29uc3Qgc3RydWN0dXJlZENsb25lID1cbiAgZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUgPz9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjI3YWUyNGRjYzQyNTFiYWQ3MjZkOWQ4NGJhZjY3OGQxZjcwN2ZlZC9saWIvaW50ZXJuYWwvc3RydWN0dXJlZF9jbG9uZS5qc1xuICAvLyBzdHJ1Y3R1cmVkQ2xvbmUgd2FzIGFkZGVkIGluIHYxNy4wLjAsIGJ1dCBmZXRjaCBzdXBwb3J0cyB2MTYuOFxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUgKHZhbHVlLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgYXJndW1lbnQnKVxuICAgIH1cblxuICAgIGlmICghY2hhbm5lbCkge1xuICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpXG4gICAgfVxuICAgIGNoYW5uZWwucG9ydDEudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDIudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodmFsdWUsIG9wdGlvbnM/LnRyYW5zZmVyKVxuICAgIHJldHVybiByZWNlaXZlTWVzc2FnZU9uUG9ydChjaGFubmVsLnBvcnQyKS5tZXNzYWdlXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERPTUV4Y2VwdGlvbixcbiAgc3RydWN0dXJlZENsb25lLFxuICBzdWJyZXNvdXJjZSxcbiAgZm9yYmlkZGVuTWV0aG9kcyxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVkaXJlY3RTdGF0dXMsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kcyxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzLFxuICBiYWRQb3J0cyxcbiAgcmVxdWVzdER1cGxleCxcbiAgc3VicmVzb3VyY2VTZXQsXG4gIGJhZFBvcnRzU2V0LFxuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICBzYWZlTWV0aG9kc1NldCxcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3lTZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcywgaW5jcmVhc2UgdGhlIHZlcnNpb25cbi8vIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxPcmlnaW4gPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsT3JpZ2luLjEnKVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxPcmlnaW4gKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxPcmlnaW5dXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbE9yaWdpbiAobmV3T3JpZ2luKSB7XG4gIGlmIChuZXdPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwobmV3T3JpZ2luKVxuXG4gIGlmIChwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9ubHkgaHR0cCAmIGh0dHBzIHVybHMgYXJlIGFsbG93ZWQsIHJlY2VpdmVkICR7cGFyc2VkVVJMLnByb3RvY29sfWApXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgdmFsdWU6IHBhcnNlZFVSTCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRHbG9iYWxPcmlnaW4sXG4gIHNldEdsb2JhbE9yaWdpblxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyByZWRpcmVjdFN0YXR1c1NldCwgcmVmZXJyZXJQb2xpY3lTZXQ6IHJlZmVycmVyUG9saWN5VG9rZW5zLCBiYWRQb3J0c1NldCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHJlcXVpcmUoJ3BlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKXx1bmRlZmluZWR9ICovXG5sZXQgY3J5cHRvXG5cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gIGNvbnN0IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMgPSBbJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJ11cbiAgc3VwcG9ydGVkSGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpLmZpbHRlcigoaGFzaCkgPT4gcG9zc2libGVSZWxldmFudEhhc2hlcy5pbmNsdWRlcyhoYXNoKSlcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xufVxuXG5mdW5jdGlvbiByZXNwb25zZVVSTCAocmVzcG9uc2UpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlc1xuICAvLyBBIHJlc3BvbnNlIGhhcyBhbiBhc3NvY2lhdGVkIFVSTC4gSXQgaXMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IFVSTFxuICAvLyBpbiByZXNwb25zZeKAmXMgVVJMIGxpc3QgYW5kIG51bGwgaWYgcmVzcG9uc2XigJlzIFVSTCBsaXN0IGlzIGVtcHR5LlxuICBjb25zdCB1cmxMaXN0ID0gcmVzcG9uc2UudXJsTGlzdFxuICBjb25zdCBsZW5ndGggPSB1cmxMaXN0Lmxlbmd0aFxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gbnVsbCA6IHVybExpc3RbbGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1sb2NhdGlvbi11cmxcbmZ1bmN0aW9uIHJlc3BvbnNlTG9jYXRpb25VUkwgKHJlc3BvbnNlLCByZXF1ZXN0RnJhZ21lbnQpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2XigJlzIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gMi4gTGV0IGxvY2F0aW9uIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW5cbiAgLy8gYExvY2F0aW9uYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICBsZXQgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJylcblxuICAvLyAzLiBJZiBsb2NhdGlvbiBpcyBhIGhlYWRlciB2YWx1ZSwgdGhlbiBzZXQgbG9jYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBwYXJzaW5nIGxvY2F0aW9uIHdpdGggcmVzcG9uc2XigJlzIFVSTC5cbiAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIGlzVmFsaWRIZWFkZXJWYWx1ZShsb2NhdGlvbikpIHtcbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9u4oCZc1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmzigJlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJs4oCZcyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyQ29kZSAoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIDB4MjI6XG4gICAgY2FzZSAweDI4OlxuICAgIGNhc2UgMHgyOTpcbiAgICBjYXNlIDB4MmM6XG4gICAgY2FzZSAweDJmOlxuICAgIGNhc2UgMHgzYTpcbiAgICBjYXNlIDB4M2I6XG4gICAgY2FzZSAweDNjOlxuICAgIGNhc2UgMHgzZDpcbiAgICBjYXNlIDB4M2U6XG4gICAgY2FzZSAweDNmOlxuICAgIGNhc2UgMHg0MDpcbiAgICBjYXNlIDB4NWI6XG4gICAgY2FzZSAweDVjOlxuICAgIGNhc2UgMHg1ZDpcbiAgICBjYXNlIDB4N2I6XG4gICAgY2FzZSAweDdkOlxuICAgICAgLy8gRFFVT1RFIGFuZCBcIigpLC86Ozw9Pj9AW1xcXXt9XCJcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWQ0hBUiAleDIxLTdFXG4gICAgICByZXR1cm4gYyA+PSAweDIxICYmIGMgPD0gMHg3ZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhUVFBUb2tlbiAoY2hhcmFjdGVycykge1xuICBpZiAoY2hhcmFjdGVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWlzVG9rZW5DaGFyQ29kZShjaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lIChwb3RlbnRpYWxWYWx1ZSkge1xuICByZXR1cm4gaXNWYWxpZEhUVFBUb2tlbihwb3RlbnRpYWxWYWx1ZSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vIC0gSGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMuXG4gIC8vIC0gQ29udGFpbnMgbm8gMHgwMCAoTlVMKSBvciBIVFRQIG5ld2xpbmUgYnl0ZXMuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJyAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCcgJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcMCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xccicpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3NldC1yZXF1ZXN0cy1yZWZlcnJlci1wb2xpY3ktb24tcmVkaXJlY3RcbmZ1bmN0aW9uIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QgKHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKSB7XG4gIC8vICBHaXZlbiBhIHJlcXVlc3QgcmVxdWVzdCBhbmQgYSByZXNwb25zZSBhY3R1YWxSZXNwb25zZSwgdGhpcyBhbGdvcml0aG1cbiAgLy8gIHVwZGF0ZXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IGFjY29yZGluZyB0byB0aGUgUmVmZXJyZXItUG9saWN5XG4gIC8vICBoZWFkZXIgKGlmIGFueSkgaW4gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gMS4gTGV0IHBvbGljeSBiZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyDCpyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JykgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHLigJlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXLigJlzIHZhbHVlIHRvIHLigJlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiBy4oCZcyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlcilcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luIHdpdGggcmVxdWVzdC5cbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIDIuIElmIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIG9yIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJ3ZWJzb2NrZXRcIiwgdGhlbiBhcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIC8vIDIuIEFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIChjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICAvLyBUT0RPXG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLW9wYXF1ZS10aW1pbmctaW5mb1xuZnVuY3Rpb24gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyAodGltaW5nSW5mbykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICByZWRpcmVjdFN0YXJ0VGltZTogMCxcbiAgICByZWRpcmVjdEVuZFRpbWU6IDAsXG4gICAgcG9zdFJlZGlyZWN0U3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIGZpbmFsU2VydmljZVdvcmtlclN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lOiAwLFxuICAgIGVuZFRpbWU6IDAsXG4gICAgZW5jb2RlZEJvZHlTaXplOiAwLFxuICAgIGRlY29kZWRCb2R5U2l6ZTogMCxcbiAgICBmaW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvOiBudWxsXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gbWFrZVBvbGljeUNvbnRhaW5lciAoKSB7XG4gIC8vIE5vdGU6IHRoZSBmZXRjaCBzcGVjIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgZW1iZWRkZXIgcG9saWN5IG9yIENTUCBsaXN0XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ1xuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nsb25lLWEtcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gY2xvbmVQb2xpY3lDb250YWluZXIgKHBvbGljeUNvbnRhaW5lcikge1xuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiBwb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jZGV0ZXJtaW5lLXJlcXVlc3RzLXJlZmVycmVyXG5mdW5jdGlvbiBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBwb2xpY3kgYmUgcmVxdWVzdCdzIHJlZmVycmVyIHBvbGljeS5cbiAgY29uc3QgcG9saWN5ID0gcmVxdWVzdC5yZWZlcnJlclBvbGljeVxuXG4gIC8vIE5vdGU6IHBvbGljeSBjYW5ub3QgKHNob3VsZG4ndCkgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gIGFzc2VydChwb2xpY3kpXG5cbiAgLy8gMi4gTGV0IGVudmlyb25tZW50IGJlIHJlcXVlc3TigJlzIGNsaWVudC5cblxuICBsZXQgcmVmZXJyZXJTb3VyY2UgPSBudWxsXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIHJlZmVycmVyOlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBOb3RlOiBub2RlIGlzbid0IGEgYnJvd3NlciBhbmQgZG9lc24ndCBpbXBsZW1lbnQgZG9jdW1lbnQvaWZyYW1lcyxcbiAgICAvLyBzbyB3ZSBieXBhc3MgdGhpcyBzdGVwIGFuZCByZXBsYWNlIGl0IHdpdGggb3VyIG93bi5cblxuICAgIGNvbnN0IGdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICBpZiAoIWdsb2JhbE9yaWdpbiB8fCBnbG9iYWxPcmlnaW4ub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gbm90ZTogd2UgbmVlZCB0byBjbG9uZSBpdCBhcyBpdCdzIG11dGF0ZWRcbiAgICByZWZlcnJlclNvdXJjZSA9IG5ldyBVUkwoZ2xvYmFsT3JpZ2luKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAvLyBMZXQgcmVmZXJyZXJTb3VyY2UgYmUgcmVxdWVzdOKAmXMgcmVmZXJyZXIuXG4gICAgcmVmZXJyZXJTb3VyY2UgPSByZXF1ZXN0LnJlZmVycmVyXG4gIH1cblxuICAvLyA0LiBMZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXJVUkwgYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yXG4gIC8vICAgIHVzZSBhcyBhIHJlZmVycmVyLlxuICBsZXQgcmVmZXJyZXJVUkwgPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlKVxuXG4gIC8vIDUuIExldCByZWZlcnJlck9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3IgdXNlIGFzXG4gIC8vICAgIGEgcmVmZXJyZXIsIHdpdGggdGhlIG9yaWdpbi1vbmx5IGZsYWcgc2V0IHRvIHRydWUuXG4gIGNvbnN0IHJlZmVycmVyT3JpZ2luID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcblxuICAvLyA2LiBJZiB0aGUgcmVzdWx0IG9mIHNlcmlhbGl6aW5nIHJlZmVycmVyVVJMIGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpc1xuICAvLyAgICBncmVhdGVyIHRoYW4gNDA5Niwgc2V0IHJlZmVycmVyVVJMIHRvIHJlZmVycmVyT3JpZ2luLlxuICBpZiAocmVmZXJyZXJVUkwudG9TdHJpbmcoKS5sZW5ndGggPiA0MDk2KSB7XG4gICAgcmVmZXJyZXJVUkwgPSByZWZlcnJlck9yaWdpblxuICB9XG5cbiAgY29uc3QgYXJlU2FtZU9yaWdpbiA9IHNhbWVPcmlnaW4ocmVxdWVzdCwgcmVmZXJyZXJVUkwpXG4gIGNvbnN0IGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA9IGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiZcbiAgICAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlcXVlc3QudXJsKVxuXG4gIC8vIDguIEV4ZWN1dGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHBvbGljeTpcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlICdvcmlnaW4nOiByZXR1cm4gcmVmZXJyZXJPcmlnaW4gIT0gbnVsbCA/IHJlZmVycmVyT3JpZ2luIDogc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcbiAgICBjYXNlICd1bnNhZmUtdXJsJzogcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlck9yaWdpbiA6ICduby1yZWZlcnJlcidcbiAgICBjYXNlICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlclVSTCA6IHJlZmVycmVyT3JpZ2luXG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyAxLiBJZiB0aGUgb3JpZ2luIG9mIHJlZmVycmVyVVJMIGFuZCB0aGUgb3JpZ2luIG9mIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgICAgIC8vICAgIFVSTCBhcmUgdGhlIHNhbWUsIHRoZW4gcmV0dXJuIHJlZmVycmVyVVJMLlxuICAgICAgaWYgKHNhbWVPcmlnaW4ocmVmZXJyZXJVUkwsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiByZWZlcnJlclVSTFxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmQgcmVxdWVzdOKAmXNcbiAgICAgIC8vICAgIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgdGhlbiByZXR1cm4gbm9cbiAgICAgIC8vICAgIHJlZmVycmVyLlxuICAgICAgaWYgKGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiYgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW4uXG4gICAgICByZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICB9XG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAgICovXG4gICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICovXG5cbiAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID8gJ25vLXJlZmVycmVyJyA6IHJlZmVycmVyT3JpZ2luXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzdHJpcC11cmxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IG9yaWdpbk9ubHlcbiAqL1xuZnVuY3Rpb24gc3RyaXBVUkxGb3JSZWZlcnJlciAodXJsLCBvcmlnaW5Pbmx5KSB7XG4gIC8vIDEuIEFzc2VydDogdXJsIGlzIGEgVVJMLlxuICBhc3NlcnQodXJsIGluc3RhbmNlb2YgVVJMKVxuXG4gIC8vIDIuIElmIHVybOKAmXMgc2NoZW1lIGlzIGEgbG9jYWwgc2NoZW1lLCB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2JsYW5rOicpIHtcbiAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICB9XG5cbiAgLy8gMy4gU2V0IHVybOKAmXMgdXNlcm5hbWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnVzZXJuYW1lID0gJydcblxuICAvLyA0LiBTZXQgdXJs4oCZcyBwYXNzd29yZCB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwucGFzc3dvcmQgPSAnJ1xuXG4gIC8vIDUuIFNldCB1cmzigJlzIGZyYWdtZW50IHRvIG51bGwuXG4gIHVybC5oYXNoID0gJydcblxuICAvLyA2LiBJZiB0aGUgb3JpZ2luLW9ubHkgZmxhZyBpcyB0cnVlLCB0aGVuOlxuICBpZiAob3JpZ2luT25seSkge1xuICAgIC8vIDEuIFNldCB1cmzigJlzIHBhdGggdG8gwqsgdGhlIGVtcHR5IHN0cmluZyDCuy5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybOKAmXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuY29uc3Qgbm9ybWFsaXplTWV0aG9kUmVjb3JkID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZU1ldGhvZFJlY29yZCwgbnVsbClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCDCqyB2YWx1ZSDCuykuXG4gIGNvbnN0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuXG4gIC8vIDIuIElmIHJlc3VsdCBpcyB1bmRlZmluZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZScpXG4gIH1cblxuICAvLyAzLiBBc3NlcnQ6IHJlc3VsdCBpcyBhIHN0cmluZy5cbiAgYXNzZXJ0KHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuXG4gIC8vIDQuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lMjVpdGVyYXRvcnByb3RvdHlwZSUyNS1vYmplY3RcbmNvbnN0IGVzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Rmbi1pdGVyYXRvci1wcm90b3R5cGUtb2JqZWN0XG4gKiBAcGFyYW0geygpID0+IHVua25vd25bXX0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0geydrZXknfCd2YWx1ZSd8J2tleSt2YWx1ZSd9IGtpbmRcbiAqL1xuZnVuY3Rpb24gbWFrZUl0ZXJhdG9yIChpdGVyYXRvciwgbmFtZSwga2luZCkge1xuICBjb25zdCBvYmplY3QgPSB7XG4gICAgaW5kZXg6IDAsXG4gICAga2luZCxcbiAgICB0YXJnZXQ6IGl0ZXJhdG9yXG4gIH1cblxuICBjb25zdCBpID0ge1xuICAgIG5leHQgKCkge1xuICAgICAgLy8gMS4gTGV0IGludGVyZmFjZSBiZSB0aGUgaW50ZXJmYWNlIGZvciB3aGljaCB0aGUgaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBleGlzdHMuXG5cbiAgICAgIC8vIDIuIExldCB0aGlzVmFsdWUgYmUgdGhlIHRoaXMgdmFsdWUuXG5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuXG4gICAgICAvLyA0LiBJZiBvYmplY3QgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW4gcGVyZm9ybSBhIHNlY3VyaXR5XG4gICAgICAvLyAgICBjaGVjaywgcGFzc2luZzpcblxuICAgICAgLy8gNS4gSWYgb2JqZWN0IGlzIG5vdCBhIGRlZmF1bHQgaXRlcmF0b3Igb2JqZWN0IGZvciBpbnRlcmZhY2UsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gaSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnbmV4dCcgY2FsbGVkIG9uIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBpbnRlcmZhY2UgJHtuYW1lfSBJdGVyYXRvci5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNi4gTGV0IGluZGV4IGJlIG9iamVjdOKAmXMgaW5kZXguXG4gICAgICAvLyA3LiBMZXQga2luZCBiZSBvYmplY3TigJlzIGtpbmQuXG4gICAgICAvLyA4LiBMZXQgdmFsdWVzIGJlIG9iamVjdOKAmXMgdGFyZ2V0J3MgdmFsdWUgcGFpcnMgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgY29uc3QgeyBpbmRleCwga2luZCwgdGFyZ2V0IH0gPSBvYmplY3RcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRhcmdldCgpXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIDExLiBMZXQgcGFpciBiZSB0aGUgZW50cnkgaW4gdmFsdWVzIGF0IGluZGV4IGluZGV4LlxuICAgICAgY29uc3QgcGFpciA9IHZhbHVlc1tpbmRleF1cblxuICAgICAgLy8gMTIuIFNldCBvYmplY3TigJlzIGluZGV4IHRvIGluZGV4ICsgMS5cbiAgICAgIG9iamVjdC5pbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG4gICAgICByZXR1cm4gaXRlcmF0b3JSZXN1bHQocGFpciwga2luZClcbiAgICB9LFxuICAgIC8vIFRoZSBjbGFzcyBzdHJpbmcgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgdGhlXG4gICAgLy8gcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIHN0cmluZyBcIiBJdGVyYXRvclwiLlxuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgfVxuXG4gIC8vIFRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHNsb3Qgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBtdXN0IGJlICVJdGVyYXRvclByb3RvdHlwZSUuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuICAvLyBlc0l0ZXJhdG9yUHJvdG90eXBlIG5lZWRzIHRvIGJlIHRoZSBwcm90b3R5cGUgb2YgaVxuICAvLyB3aGljaCBpcyB0aGUgcHJvdG90eXBlIG9mIGFuIGVtcHR5IG9iamVjdC4gWWVzLCBpdCdzIGNvbmZ1c2luZy5cbiAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih7fSwgaSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpdGVyYXRvci1yZXN1bHRcbmZ1bmN0aW9uIGl0ZXJhdG9yUmVzdWx0IChwYWlyLCBraW5kKSB7XG4gIGxldCByZXN1bHRcblxuICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgdmFsdWUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2Yga2luZDpcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAna2V5Jzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgcmVzdWx0ID0gcGFpclswXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgcmVzdWx0ID0gcGFpclsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAna2V5K3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAzLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNS4gTGV0IGFycmF5IGJlICEgQXJyYXlDcmVhdGUoMikuXG4gICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgIC8vIDcuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMVwiLCB2YWx1ZSkuXG4gICAgICAvLyA4LiByZXN1bHQgaXMgYXJyYXkuXG4gICAgICByZXN1bHQgPSBwYWlyXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDIuIFJldHVybiBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHJlc3VsdCwgZmFsc2UpLlxuICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS1mdWxseS1yZWFkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZ1bGx5UmVhZEJvZHkgKGJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKSB7XG4gIC8vIDEuIElmIHRhc2tEZXN0aW5hdGlvbiBpcyBudWxsLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG9cbiAgLy8gICAgdGhlIHJlc3VsdCBvZiBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cblxuICAvLyAyLiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlcyBiZSB0byBxdWV1ZSBhXG4gIC8vICAgIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzLCB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gcHJvY2Vzc0JvZHlcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBiZSB0byBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5RXJyb3IsXG4gIC8vICAgIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBlcnJvclN0ZXBzID0gcHJvY2Vzc0JvZHlFcnJvclxuXG4gIC8vIDQuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZvciBib2R54oCZcyBzdHJlYW0uXG4gIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzIHdpdGggdGhhdFxuICAvLyAgICBleGNlcHRpb24gYW5kIHJldHVybi5cbiAgbGV0IHJlYWRlclxuXG4gIHRyeSB7XG4gICAgcmVhZGVyID0gYm9keS5zdHJlYW0uZ2V0UmVhZGVyKClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDUuIFJlYWQgYWxsIGJ5dGVzIGZyb20gcmVhZGVyLCBnaXZlbiBzdWNjZXNzU3RlcHMgYW5kIGVycm9yU3RlcHMuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZEFsbEJ5dGVzKHJlYWRlcilcbiAgICBzdWNjZXNzU3RlcHMocmVzdWx0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmVhZGFibGVTdHJlYW19ICovXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlIChzdHJlYW0pIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICByZXR1cm4gc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gfHwgKFxuICAgIHN0cmVhbVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnUmVhZGFibGVTdHJlYW0nICYmXG4gICAgdHlwZW9mIHN0cmVhbS50ZWUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5jb25zdCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCA9IDY1NTM1XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyW118VWludDhBcnJheX0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0RlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gVG8gaXNvbW9ycGhpYyBkZWNvZGUgYSBieXRlIHNlcXVlbmNlIGlucHV0LCByZXR1cm4gYSBzdHJpbmcgd2hvc2UgY29kZSBwb2ludFxuICAvLyAgICBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXTigJlzIGxlbmd0aCBhbmQgd2hvc2UgY29kZSBwb2ludHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXNcbiAgLy8gICAgYXMgdGhlIHZhbHVlcyBvZiBpbnB1dOKAmXMgYnl0ZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuXG4gIGlmIChpbnB1dC5sZW5ndGggPCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmlucHV0KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0LnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzICsgU3RyaW5nLmZyb21DaGFyQ29kZShjdXJyZW50KSwgJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUT0RPOiBhZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGlzIGVycm9yIG9jY3Vycy5cbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb250cm9sbGVyIGlzIGFscmVhZHkgY2xvc2VkJykpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgYXNzZXJ0KGlucHV0LmNoYXJDb2RlQXQoaSkgPD0gMHhGRilcbiAgfVxuXG4gIC8vIDIuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV04oCZcyBjb2RlXG4gIC8vICAgIHBvaW50IGxlbmd0aCBhbmQgd2hvc2UgYnl0ZXMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gIC8vICAgIHZhbHVlcyBvZiBpbnB1dOKAmXMgY29kZSBwb2ludHMsIGluIHRoZSBzYW1lIG9yZGVyXG4gIHJldHVybiBpbnB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW1kZWZhdWx0cmVhZGVyLXJlYWQtYWxsLWJ5dGVzXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWQtbG9vcFxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJ9IHJlYWRlclxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsQnl0ZXMgKHJlYWRlcikge1xuICBjb25zdCBieXRlcyA9IFtdXG4gIGxldCBieXRlTGVuZ3RoID0gMFxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZTogY2h1bmsgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyAxLiBDYWxsIHN1Y2Nlc3NTdGVwcyB3aXRoIGJ5dGVzLlxuICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnl0ZXMsIGJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY2h1bmsgaXMgbm90IGEgVWludDhBcnJheSBvYmplY3QsIGNhbGwgZmFpbHVyZVN0ZXBzXG4gICAgLy8gICAgd2l0aCBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWNlaXZlZCBub24tVWludDhBcnJheSBjaHVuaycpXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIHRoZSBieXRlcyByZXByZXNlbnRlZCBieSBjaHVuayB0byBieXRlcy5cbiAgICBieXRlcy5wdXNoKGNodW5rKVxuICAgIGJ5dGVMZW5ndGggKz0gY2h1bmsubGVuZ3RoXG5cbiAgICAvLyAzLiBSZWFkLWxvb3AgZ2l2ZW4gcmVhZGVyLCBieXRlcywgc3VjY2Vzc1N0ZXBzLCBhbmQgZmFpbHVyZVN0ZXBzLlxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaXMtbG9jYWxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNMb2NhbCAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHByb3RvY29sID09PSAnYmxvYjonIHx8IHByb3RvY29sID09PSAnZGF0YTonXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOicpXG4gIH1cblxuICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBGZXRjaCBzdXBwb3J0cyBub2RlID49IDE2LjguMCwgYnV0IE9iamVjdC5oYXNPd24gd2FzIGFkZGVkIGluIHYxNi45LjAuXG4gKi9cbmNvbnN0IGhhc093biA9IE9iamVjdC5oYXNPd24gfHwgKChkaWN0LCBrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaWN0LCBrZXkpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIHRvVVNWU3RyaW5nLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgVEFPQ2hlY2ssXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHJlc3BvbnNlVVJMLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICBpc0Jsb2JMaWtlLFxuICBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHksXG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGhhc093bixcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGJ5dGVzTWF0Y2gsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICBpc29tb3JwaGljRGVjb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHJlYWRBbGxCeXRlcyxcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkLFxuICBwYXJzZU1ldGFkYXRhXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga0hlYWRlcnM6IFN5bWJvbCgnaGVhZGVycycpLFxuICBrU2lnbmFsOiBTeW1ib2woJ3NpZ25hbCcpLFxuICBrU3RhdGU6IFN5bWJvbCgnc3RhdGUnKSxcbiAga0d1YXJkOiBTeW1ib2woJ2d1YXJkJyksXG4gIGtSZWFsbTogU3ltYm9sKCdyZWFsbScpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgaGFzT3duLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYmlkbCcpLldlYmlkbH0gKi9cbmNvbnN0IHdlYmlkbCA9IHt9XG53ZWJpZGwuY29udmVydGVycyA9IHt9XG53ZWJpZGwudXRpbCA9IHt9XG53ZWJpZGwuZXJyb3JzID0ge31cblxud2ViaWRsLmVycm9ycy5leGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgJHttZXNzYWdlLmhlYWRlcn06ICR7bWVzc2FnZS5tZXNzYWdlfWApXG59XG5cbndlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHBsdXJhbCA9IGNvbnRleHQudHlwZXMubGVuZ3RoID09PSAxID8gJycgOiAnIG9uZSBvZidcbiAgY29uc3QgbWVzc2FnZSA9XG4gICAgYCR7Y29udGV4dC5hcmd1bWVudH0gY291bGQgbm90IGJlIGNvbnZlcnRlZCB0b2AgK1xuICAgIGAke3BsdXJhbH06ICR7Y29udGV4dC50eXBlcy5qb2luKCcsICcpfS5gXG5cbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxud2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZTogYFwiJHtjb250ZXh0LnZhbHVlfVwiIGlzIGFuIGludmFsaWQgJHtjb250ZXh0LnR5cGV9LmBcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpbXBsZW1lbnRzXG53ZWJpZGwuYnJhbmRDaGVjayA9IGZ1bmN0aW9uIChWLCBJLCBvcHRzID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIEkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVj8uW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IEkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ11cbiAgfVxufVxuXG53ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayA9IGZ1bmN0aW9uICh7IGxlbmd0aCB9LCBtaW4sIGN0eCkge1xuICBpZiAobGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgbWVzc2FnZTogYCR7bWlufSBhcmd1bWVudCR7bWluICE9PSAxID8gJ3MnIDogJyd9IHJlcXVpcmVkLCBgICtcbiAgICAgICAgICAgICAgIGBidXQke2xlbmd0aCA/ICcgb25seScgOiAnJ30gJHtsZW5ndGh9IGZvdW5kLmAsXG4gICAgICAuLi5jdHhcbiAgICB9KVxuICB9XG59XG5cbndlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6ICdUeXBlRXJyb3InLFxuICAgIG1lc3NhZ2U6ICdJbGxlZ2FsIGNvbnN0cnVjdG9yJ1xuICB9KVxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG53ZWJpZGwudXRpbC5UeXBlID0gZnVuY3Rpb24gKFYpIHtcbiAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiAnVW5kZWZpbmVkJ1xuICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ0Jvb2xlYW4nXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuICdTdHJpbmcnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuICdTeW1ib2wnXG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdOdW1iZXInXG4gICAgY2FzZSAnYmlnaW50JzogcmV0dXJuICdCaWdJbnQnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdPYmplY3QnXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzID0ge30pIHtcbiAgbGV0IHVwcGVyQm91bmRcbiAgbGV0IGxvd2VyQm91bmRcblxuICAvLyAxLiBJZiBiaXRMZW5ndGggaXMgNjQsIHRoZW46XG4gIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgLy8gMS4gTGV0IHVwcGVyQm91bmQgYmUgMl41MyDiiJIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgNTMpIC0gMVxuXG4gICAgLy8gMi4gSWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW4gbGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgbG93ZXJCb3VuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlIGxldCBsb3dlckJvdW5kIGJlIOKIkjJeNTMgKyAxLlxuICAgICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCA1MykgKyAxXG4gICAgfVxuICB9IGVsc2UgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBsb3dlckJvdW5kID0gMFxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGgg4oiSIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgLTJeYml0TGVuZ3RoIOKIkiAxLlxuICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgYml0TGVuZ3RoKSAtIDFcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIOKIkiAxIOKIkiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKSAtIDFcbiAgfVxuXG4gIC8vIDQuIExldCB4IGJlID8gVG9OdW1iZXIoVikuXG4gIGxldCB4ID0gTnVtYmVyKFYpXG5cbiAgLy8gNS4gSWYgeCBpcyDiiJIwLCB0aGVuIHNldCB4IHRvICswLlxuICBpZiAoeCA9PT0gMCkge1xuICAgIHggPSAwXG4gIH1cblxuICAvLyA2LiBJZiB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtFbmZvcmNlUmFuZ2VdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlID09PSB0cnVlKSB7XG4gICAgLy8gMS4gSWYgeCBpcyBOYU4sICviiJ4sIG9yIOKIkuKIniwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGFuIGludGVnZXIuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAgIC8vIDMuIElmIHggPCBsb3dlckJvdW5kIG9yIHggPiB1cHBlckJvdW5kLCB0aGVuXG4gICAgLy8gICAgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlckJvdW5kfS0ke3VwcGVyQm91bmR9LCBnb3QgJHt4fS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA3LiBJZiB4IGlzIG5vdCBOYU4gYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETFxuICAvLyAgICB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0NsYW1wXSBleHRlbmRlZFxuICAvLyAgICBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXAgPT09IHRydWUpIHtcbiAgICAvLyAxLiBTZXQgeCB0byBtaW4obWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKS5cbiAgICB4ID0gTWF0aC5taW4oTWF0aC5tYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpXG5cbiAgICAvLyAyLiBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZVxuICAgIC8vICAgIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28sXG4gICAgLy8gICAgYW5kIGNob29zaW5nICswIHJhdGhlciB0aGFuIOKIkjAuXG4gICAgaWYgKE1hdGguZmxvb3IoeCkgJSAyID09PSAwKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gTWF0aC5jZWlsKHgpXG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDguIElmIHggaXMgTmFOLCArMCwgK+KIniwgb3Ig4oiS4oieLCB0aGVuIHJldHVybiArMC5cbiAgaWYgKFxuICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICh4ID09PSAwICYmIE9iamVjdC5pcygwLCB4KSkgfHxcbiAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIDkuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAvLyAxMC4gU2V0IHggdG8geCBtb2R1bG8gMl5iaXRMZW5ndGguXG4gIHggPSB4ICUgTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuXG4gIC8vIDExLiBJZiBzaWduZWRuZXNzIGlzIFwic2lnbmVkXCIgYW5kIHgg4omlIDJeYml0TGVuZ3RoIOKIkiAxLFxuICAvLyAgICB0aGVuIHJldHVybiB4IOKIkiAyXmJpdExlbmd0aC5cbiAgaWYgKHNpZ25lZG5lc3MgPT09ICdzaWduZWQnICYmIHggPj0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDEpIHtcbiAgICByZXR1cm4geCAtIE1hdGgucG93KDIsIGJpdExlbmd0aClcbiAgfVxuXG4gIC8vIDEyLiBPdGhlcndpc2UsIHJldHVybiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWludGVnZXJwYXJ0XG53ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCA9IGZ1bmN0aW9uIChuKSB7XG4gIC8vIDEuIExldCByIGJlIGZsb29yKGFicyhuKSkuXG4gIGNvbnN0IHIgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKVxuXG4gIC8vIDIuIElmIG4gPCAwLCB0aGVuIHJldHVybiAtMSDDlyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXNlcXVlbmNlXG53ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKFYpfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSBWPy5bU3ltYm9sLml0ZXJhdG9yXT8uKClcbiAgICBjb25zdCBzZXEgPSBbXVxuXG4gICAgLy8gMy4gSWYgbWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgbWV0aG9kID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBtZXRob2QubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGFuIGl0ZXJhdG9yLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdG8tcmVjb3JkXG53ZWJpZGwucmVjb3JkQ29udmVydGVyID0gZnVuY3Rpb24gKGtleUNvbnZlcnRlciwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChPKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVjb3JkJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKE8pfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGlmICghdHlwZXMuaXNQcm94eShPKSkge1xuICAgICAgLy8gT2JqZWN0LmtleXMgb25seSByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE8pXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgb3B0cyA9IHt9KSA9PiB7XG4gICAgaWYgKG9wdHMuc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBpKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IGkubmFtZSxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7Vn0gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtpLm5hbWV9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFZcbiAgfVxufVxuXG53ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJzKSB7XG4gIHJldHVybiAoZGljdGlvbmFyeSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSB3ZWJpZGwudXRpbC5UeXBlKGRpY3Rpb25hcnkpXG4gICAgY29uc3QgZGljdCA9IHt9XG5cbiAgICBpZiAodHlwZSA9PT0gJ051bGwnIHx8IHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGljdFxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke2RpY3Rpb25hcnl9IHRvIGJlIG9uZSBvZjogTnVsbCwgVW5kZWZpbmVkLCBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbnMgb2YgY29udmVydGVycykge1xuICAgICAgY29uc3QgeyBrZXksIGRlZmF1bHRWYWx1ZSwgcmVxdWlyZWQsIGNvbnZlcnRlciB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd24oZGljdGlvbmFyeSwga2V5KSkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQga2V5IFwiJHtrZXl9XCIuYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHZhbHVlID0gZGljdGlvbmFyeVtrZXldXG4gICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8/IGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBBIGtleSBjYW4gYmUgb3B0aW9uYWwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZS5cbiAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBkbyBub3QgcGVyZm9ybSBhIGNvbnZlcnNpb24sXG4gICAgICAvLyBhbmQgZG8gbm90IGFzc2lnbiB0aGUga2V5IGEgdmFsdWUuXG4gICAgICBpZiAocmVxdWlyZWQgfHwgaGFzRGVmYXVsdCB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gY29udmVydGVyKHZhbHVlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmFsbG93ZWRWYWx1ZXMgJiZcbiAgICAgICAgICAhb3B0aW9ucy5hbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3ZhbHVlfSBpcyBub3QgYW4gYWNjZXB0ZWQgdHlwZS4gRXhwZWN0ZWQgb25lIG9mICR7b3B0aW9ucy5hbGxvd2VkVmFsdWVzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGljdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGljdFxuICB9XG59XG5cbndlYmlkbC5udWxsYWJsZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBWXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRlcihWKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFYgaXMgbnVsbCBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGVcbiAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBbTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmddXG4gIC8vICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdGhlIERPTVN0cmluZyB2YWx1ZVxuICAvLyAgICB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHN0cmluZy5cbiAgaWYgKFYgPT09IG51bGwgJiYgb3B0cy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgc3ltYm9sIHRvIHN0cmluZy4nKVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyA9IHRvVVNWU3RyaW5nXG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYm9vbGVhblxud2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlIHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIFRvQm9vbGVhbihWKS5cbiAgY29uc3QgeCA9IEJvb2xlYW4oVilcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBib29sZWFuIHZhbHVlIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgdHJ1dGggdmFsdWUgYXMgdGhlIEVDTUFTY3JpcHQgQm9vbGVhbiB2YWx1ZSB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWFueVxud2ViaWRsLmNvbnZlcnRlcnMuYW55ID0gZnVuY3Rpb24gKFYpIHtcbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3NpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgbG9uZyBsb25nIHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLXNob3J0XG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDE2LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDE2LCAndW5zaWduZWQnLCBvcHRzKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIHNob3J0IHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaWRsLUFycmF5QnVmZmVyXG53ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7Vn1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsLlxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBU4oCZcyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7VC5uYW1lfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gNC4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgYXJyYXkgYnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA1LiBSZXR1cm4gdGhlIElETCB2YWx1ZSBvZiB0eXBlIFQgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tEYXRhVmlld11dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fCAhdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0RhdGFWaWV3JyxcbiAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGEgRGF0YVZpZXcuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzIHRydWUsXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBEYXRhVmlldyB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI0J1ZmZlclNvdXJjZVxud2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlcihWLCBvcHRzKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5KFYsIFYuY29uc3RydWN0b3IpXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBvcHRzKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhIEJ1ZmZlclNvdXJjZS5gKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBhdG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpc29tb3JwaGljRGVjb2RlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorLS5eX3x+QS1aYS16MC05XSskL1xuY29uc3QgSFRUUF9XSElURVNQQUNFX1JFR0VYID0gLyhcXHUwMDBBfFxcdTAwMER8XFx1MDAwOXxcXHUwMDIwKS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1xdW90ZWQtc3RyaW5nLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyA9IC9bXFx1MDAwOXxcXHUwMDIwLVxcdTAwN0V8XFx1MDA4MC1cXHUwMEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtcHJvY2Vzc29yXG4vKiogQHBhcmFtIHtVUkx9IGRhdGFVUkwgKi9cbmZ1bmN0aW9uIGRhdGFVUkxQcm9jZXNzb3IgKGRhdGFVUkwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBkYXRhVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCIuXG4gIGFzc2VydChkYXRhVVJMLnByb3RvY29sID09PSAnZGF0YTonKVxuXG4gIC8vIDIuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIFVSTFxuICAvLyBzZXJpYWxpemVyIG9uIGRhdGFVUkwgd2l0aCBleGNsdWRlIGZyYWdtZW50XG4gIC8vIHNldCB0byB0cnVlLlxuICBsZXQgaW5wdXQgPSBVUkxTZXJpYWxpemVyKGRhdGFVUkwsIHRydWUpXG5cbiAgLy8gMy4gUmVtb3ZlIHRoZSBsZWFkaW5nIFwiZGF0YTpcIiBzdHJpbmcgZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSBpbnB1dC5zbGljZSg1KVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBwb2ludCBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gNS4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBlcXVhbFxuICAvLyB0byBVKzAwMkMgKCwpLCBnaXZlbiBwb3NpdGlvbi5cbiAgbGV0IG1pbWVUeXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJywnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA2LiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gbWltZVR5cGUuXG4gIC8vIFVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAvLyBsZW5ndGggYmVjYXVzZSBpZiB0aGUgbWltZXR5cGUgaGFzIHNwYWNlcyByZW1vdmVkLFxuICAvLyB0aGUgd3JvbmcgYW1vdW50IHdpbGwgYmUgc2xpY2VkIGZyb20gdGhlIGlucHV0IGluXG4gIC8vIHN0ZXAgIzlcbiAgY29uc3QgbWltZVR5cGVMZW5ndGggPSBtaW1lVHlwZS5sZW5ndGhcbiAgbWltZVR5cGUgPSByZW1vdmVBU0NJSVdoaXRlc3BhY2UobWltZVR5cGUsIHRydWUsIHRydWUpXG5cbiAgLy8gNy4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuXG4gIC8vIHJldHVybiBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA4LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA5LiBMZXQgZW5jb2RlZEJvZHkgYmUgdGhlIHJlbWFpbmRlciBvZiBpbnB1dC5cbiAgY29uc3QgZW5jb2RlZEJvZHkgPSBpbnB1dC5zbGljZShtaW1lVHlwZUxlbmd0aCArIDEpXG5cbiAgLy8gMTAuIExldCBib2R5IGJlIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGVuY29kZWRCb2R5LlxuICBsZXQgYm9keSA9IHN0cmluZ1BlcmNlbnREZWNvZGUoZW5jb2RlZEJvZHkpXG5cbiAgLy8gMTEuIElmIG1pbWVUeXBlIGVuZHMgd2l0aCBVKzAwM0IgKDspLCBmb2xsb3dlZCBieVxuICAvLyB6ZXJvIG9yIG1vcmUgVSswMDIwIFNQQUNFLCBmb2xsb3dlZCBieSBhbiBBU0NJSVxuICAvLyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBcImJhc2U2NFwiLCB0aGVuOlxuICBpZiAoLzsoXFx1MDAyMCl7MCx9YmFzZTY0JC9pLnRlc3QobWltZVR5cGUpKSB7XG4gICAgLy8gMS4gTGV0IHN0cmluZ0JvZHkgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2RlIG9mIGJvZHkuXG4gICAgY29uc3Qgc3RyaW5nQm9keSA9IGlzb21vcnBoaWNEZWNvZGUoYm9keSlcblxuICAgIC8vIDIuIFNldCBib2R5IHRvIHRoZSBmb3JnaXZpbmctYmFzZTY0IGRlY29kZSBvZlxuICAgIC8vIHN0cmluZ0JvZHkuXG4gICAgYm9keSA9IGZvcmdpdmluZ0Jhc2U2NChzdHJpbmdCb2R5KVxuXG4gICAgLy8gMy4gSWYgYm9keSBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAgIGlmIChib2R5ID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9XG5cbiAgICAvLyA0LiBSZW1vdmUgdGhlIGxhc3QgNiBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTYpXG5cbiAgICAvLyA1LiBSZW1vdmUgdHJhaWxpbmcgVSswMDIwIFNQQUNFIGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUsXG4gICAgLy8gaWYgYW55LlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvKFxcdTAwMjApKyQvLCAnJylcblxuICAgIC8vIDYuIFJlbW92ZSB0aGUgbGFzdCBVKzAwM0IgKDspIGNvZGUgcG9pbnQgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgLy8gMTIuIElmIG1pbWVUeXBlIHN0YXJ0cyB3aXRoIFUrMDAzQiAoOyksIHRoZW4gcHJlcGVuZFxuICAvLyBcInRleHQvcGxhaW5cIiB0byBtaW1lVHlwZS5cbiAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoJzsnKSkge1xuICAgIG1pbWVUeXBlID0gJ3RleHQvcGxhaW4nICsgbWltZVR5cGVcbiAgfVxuXG4gIC8vIDEzLiBMZXQgbWltZVR5cGVSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nXG4gIC8vIG1pbWVUeXBlLlxuICBsZXQgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gIC8vIDE0LiBJZiBtaW1lVHlwZVJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHNldFxuICAvLyBtaW1lVHlwZVJlY29yZCB0byB0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkuXG4gIGlmIChtaW1lVHlwZVJlY29yZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKCd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknKVxuICB9XG5cbiAgLy8gMTUuIFJldHVybiBhIG5ldyBkYXRhOiBVUkwgc3RydWN0IHdob3NlIE1JTUVcbiAgLy8gdHlwZSBpcyBtaW1lVHlwZVJlY29yZCBhbmQgYm9keSBpcyBib2R5LlxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtc3RydWN0XG4gIHJldHVybiB7IG1pbWVUeXBlOiBtaW1lVHlwZVJlY29yZCwgYm9keSB9XG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuLyoqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVGcmFnbWVudFxuICovXG5mdW5jdGlvbiBVUkxTZXJpYWxpemVyICh1cmwsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGlmICghZXhjbHVkZUZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHVybC5ocmVmXG4gIH1cblxuICBjb25zdCBocmVmID0gdXJsLmhyZWZcbiAgY29uc3QgaGFzaExlbmd0aCA9IHVybC5oYXNoLmxlbmd0aFxuXG4gIHJldHVybiBoYXNoTGVuZ3RoID09PSAwID8gaHJlZiA6IGhyZWYuc3Vic3RyaW5nKDAsIGhyZWYubGVuZ3RoIC0gaGFzaExlbmd0aClcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYS1zZXF1ZW5jZS1vZi1jb2RlLXBvaW50c1xuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBzdHJpbmcpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIChjb25kaXRpb24sIGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIC8vIDIuIFdoaWxlIHBvc2l0aW9uIGRvZXNu4oCZdCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYW5kIHRoZVxuICAvLyBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBtZWV0cyB0aGUgY29uZGl0aW9uIGNvbmRpdGlvbjpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGNvbmRpdGlvbihpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0pKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoYXQgY29kZSBwb2ludCB0byB0aGUgZW5kIG9mIHJlc3VsdC5cbiAgICByZXN1bHQgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEEgZmFzdGVyIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgdGhhdCBvbmx5IHdvcmtzIHdoZW4gY29tcGFyaW5nIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IChjaGFyLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgY29uc3QgaWR4ID0gaW5wdXQuaW5kZXhPZihjaGFyLCBwb3NpdGlvbi5wb3NpdGlvbilcbiAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbnB1dC5sZW5ndGhcbiAgICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQpXG4gIH1cblxuICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlkeFxuICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0cmluZy1wZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gc3RyaW5nUGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBpbnB1dC5cbiAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShpbnB1dClcblxuICAvLyAyLiBSZXR1cm4gdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgYnl0ZXMuXG4gIHJldHVybiBwZXJjZW50RGVjb2RlKGJ5dGVzKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGJ5dGUgYnl0ZSBpbiBpbnB1dDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXVxuXG4gICAgLy8gMS4gSWYgYnl0ZSBpcyBub3QgMHgyNSAoJSksIHRoZW4gYXBwZW5kIGJ5dGUgdG8gb3V0cHV0LlxuICAgIGlmIChieXRlICE9PSAweDI1KSB7XG4gICAgICBvdXRwdXQucHVzaChieXRlKVxuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBieXRlIGlzIDB4MjUgKCUpIGFuZCB0aGUgbmV4dCB0d28gYnl0ZXNcbiAgICAvLyBhZnRlciBieXRlIGluIGlucHV0IGFyZSBub3QgaW4gdGhlIHJhbmdlc1xuICAgIC8vIDB4MzAgKDApIHRvIDB4MzkgKDkpLCAweDQxIChBKSB0byAweDQ2IChGKSxcbiAgICAvLyBhbmQgMHg2MSAoYSkgdG8gMHg2NiAoZiksIGFsbCBpbmNsdXNpdmUsIGFwcGVuZCBieXRlXG4gICAgLy8gdG8gb3V0cHV0LlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBieXRlID09PSAweDI1ICYmXG4gICAgICAhL15bMC05QS1GYS1mXXsyfSQvaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pKVxuICAgICkge1xuICAgICAgb3V0cHV0LnB1c2goMHgyNSlcblxuICAgIC8vIDMuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gTGV0IGJ5dGVQb2ludCBiZSB0aGUgdHdvIGJ5dGVzIGFmdGVyIGJ5dGUgaW4gaW5wdXQsXG4gICAgICAvLyBkZWNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRlZCBhcyBoZXhhZGVjaW1hbCBudW1iZXIuXG4gICAgICBjb25zdCBuZXh0VHdvQnl0ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKVxuICAgICAgY29uc3QgYnl0ZVBvaW50ID0gTnVtYmVyLnBhcnNlSW50KG5leHRUd29CeXRlcywgMTYpXG5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dC5wdXNoKGJ5dGVQb2ludClcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKG91dHB1dClcbn1cblxuLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1hLW1pbWUtdHlwZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gcGFyc2VNSU1FVHlwZSAoaW5wdXQpIHtcbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShpbnB1dCwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsXG4gIC8vIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2VcbiAgLy8gb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAyRiAoLykgZnJvbVxuICAvLyBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gIGNvbnN0IHR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDQuIElmIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICBpZiAodHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIHJldHVyblxuICAvLyBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDYuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwMkYgKC8pLilcbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDcuIExldCBzdWJ0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mXG4gIC8vIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuXG4gIC8vIHBvc2l0aW9uLlxuICBsZXQgc3VidHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICc7JyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOC4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBzdWJ0eXBlLlxuICBzdWJ0eXBlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2Uoc3VidHlwZSwgZmFsc2UsIHRydWUpXG5cbiAgLy8gOS4gSWYgc3VidHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChzdWJ0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3Qoc3VidHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCB0eXBlTG93ZXJjYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHN1YnR5cGVMb3dlcmNhc2UgPSBzdWJ0eXBlLnRvTG93ZXJDYXNlKClcblxuICAvLyAxMC4gTGV0IG1pbWVUeXBlIGJlIGEgbmV3IE1JTUUgdHlwZSByZWNvcmQgd2hvc2UgdHlwZVxuICAvLyBpcyB0eXBlLCBpbiBBU0NJSSBsb3dlcmNhc2UsIGFuZCBzdWJ0eXBlIGlzIHN1YnR5cGUsXG4gIC8vIGluIEFTQ0lJIGxvd2VyY2FzZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGVcbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogdHlwZUxvd2VyY2FzZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlTG93ZXJjYXNlLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXG4gICAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGUtZXNzZW5jZVxuICAgIGVzc2VuY2U6IGAke3R5cGVMb3dlcmNhc2V9LyR7c3VidHlwZUxvd2VyY2FzZX1gXG4gIH1cblxuICAvLyAxMS4gV2hpbGUgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dDpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzQiAoOykuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQXG4gICAgLy8gd2hpdGVzcGFjZSBmcm9tIGlucHV0IGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gICAgICBjaGFyID0+IEhUVFBfV0hJVEVTUEFDRV9SRUdFWC50ZXN0KGNoYXIpLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDMuIExldCBwYXJhbWV0ZXJOYW1lIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gICAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAvLyBvciBVKzAwM0QgKD0pIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnOycgJiYgY2hhciAhPT0gJz0nLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDQuIFNldCBwYXJhbWV0ZXJOYW1lIHRvIHBhcmFtZXRlck5hbWUsIGluIEFTQ0lJXG4gICAgLy8gbG93ZXJjYXNlLlxuICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAgIC8vIFUrMDAzQiAoOyksIHRoZW4gY29udGludWUuXG4gICAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnOycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzRCAoPSkuKVxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICAgIH1cblxuICAgIC8vIDYuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IHBhcmFtZXRlclZhbHVlIGJlIG51bGwuXG4gICAgbGV0IHBhcmFtZXRlclZhbHVlID0gbnVsbFxuXG4gICAgLy8gOC4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgLy8gVSswMDIyIChcIiksIHRoZW46XG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJykge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uXG4gICAgICAvLyBhbmQgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZy5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhpbnB1dCwgcG9zaXRpb24sIHRydWUpXG5cbiAgICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgICAgLy8gZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgICAvLyAyLiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHBhcmFtZXRlclZhbHVlLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShwYXJhbWV0ZXJWYWx1ZSwgZmFsc2UsIHRydWUpXG5cbiAgICAgIC8vIDMuIElmIHBhcmFtZXRlclZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gY29udGludWUuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIHNvbGVseSBjb250YWlucyBIVFRQIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBwYXJhbWV0ZXJWYWx1ZSBzb2xlbHkgY29udGFpbnMgSFRUUCBxdW90ZWQtc3RyaW5nIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSBkb2VzIG5vdCBleGlzdFxuICAgIC8vIHRoZW4gc2V0IG1pbWVUeXBl4oCZcyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIHRvIHBhcmFtZXRlclZhbHVlLlxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlck5hbWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChwYXJhbWV0ZXJOYW1lKSAmJlxuICAgICAgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCB8fCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TLnRlc3QocGFyYW1ldGVyVmFsdWUpKSAmJlxuICAgICAgIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlck5hbWUpXG4gICAgKSB7XG4gICAgICBtaW1lVHlwZS5wYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2ZvcmdpdmluZy1iYXNlNjQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGRhdGEgKi9cbmZ1bmN0aW9uIGZvcmdpdmluZ0Jhc2U2NCAoZGF0YSkge1xuICAvLyAxLiBSZW1vdmUgYWxsIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBkYXRhLlxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9bXFx1MDAwOVxcdTAwMEFcXHUwMDBDXFx1MDAwRFxcdTAwMjBdL2csICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8vIDIuIElmIGRhdGHigJlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIG5vIHJlbWFpbmRlciwgdGhlbjpcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgIC8vIDEuIElmIGRhdGEgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEICg9KSBjb2RlIHBvaW50cyxcbiAgICAvLyB0aGVuIHJlbW92ZSB0aGVtIGZyb20gZGF0YS5cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC89Pz0kLywgJycpXG4gIH1cblxuICAvLyAzLiBJZiBkYXRh4oCZcyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBhIHJlbWFpbmRlciBvZiAxLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNC4gSWYgZGF0YSBjb250YWlucyBhIGNvZGUgcG9pbnQgdGhhdCBpcyBub3Qgb25lIG9mXG4gIC8vICBVKzAwMkIgKCspXG4gIC8vICBVKzAwMkYgKC8pXG4gIC8vICBBU0NJSSBhbHBoYW51bWVyaWNcbiAgLy8gdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKC9bXisvMC05QS1aYS16XS8udGVzdChkYXRhKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YSlcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKVxuXG4gIGZvciAobGV0IGJ5dGUgPSAwOyBieXRlIDwgYmluYXJ5Lmxlbmd0aDsgYnl0ZSsrKSB7XG4gICAgYnl0ZXNbYnl0ZV0gPSBiaW5hcnkuY2hhckNvZGVBdChieXRlKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZeKAmXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBl4oCZcyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIOKGkiB2YWx1ZSBvZiBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VyZW5jZSBvZiBVKzAwMjIgKFwiKSBvclxuICAgICAgLy8gICAgVSswMDVDIChcXCkgaW4gdmFsdWUgd2l0aCBVKzAwNUMgKFxcKS5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFxcXFx8XCIpL2csICdcXFxcJDEnKVxuXG4gICAgICAvLyAyLiBQcmVwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWVcblxuICAgICAgLy8gMy4gQXBwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gJ1wiJ1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCB2YWx1ZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gdmFsdWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBzZXJpYWxpemF0aW9uLlxuICByZXR1cm4gc2VyaWFsaXphdGlvblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxmJyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGF0YVVSTFByb2Nlc3NvcixcbiAgVVJMU2VyaWFsaXplcixcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyxcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsXG4gIHN0cmluZ1BlcmNlbnREZWNvZGUsXG4gIHBhcnNlTUlNRVR5cGUsXG4gIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcsXG4gIHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG5jbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gIGNvbnN0cnVjdG9yIChmaWxlQml0cywgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRmlsZSBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGZpbGVCaXRzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddKGZpbGVCaXRzKVxuICAgIGZpbGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVOYW1lKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcob3B0aW9ucylcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuICAgIC8vIE5vdGU6IEJsb2IgaGFuZGxlcyB0aGlzIGZvciB1c1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICBsZXQgdCA9IG9wdGlvbnMudHlwZVxuICAgIGxldCBkXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgc3Vic3RlcDoge1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdCA9IHBhcnNlTUlNRVR5cGUodClcblxuICAgICAgICBpZiAodCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgdCA9ICcnXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgICAgIGJyZWFrIHN1YnN0ZXBcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBzZXJpYWxpemVBTWltZVR5cGUodCkudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICAgIGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZFxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHN1cGVyKHByb2Nlc3NCbG9iUGFydHMoZmlsZUJpdHMsIG9wdGlvbnMpLCB7IHR5cGU6IHQgfSlcbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBuYW1lOiBuLFxuICAgICAgbGFzdE1vZGlmaWVkOiBkLFxuICAgICAgdHlwZTogdFxuICAgIH1cbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cbn1cblxuY2xhc3MgRmlsZUxpa2Uge1xuICBjb25zdHJ1Y3RvciAoYmxvYkxpa2UsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUT0RPOiBhcmd1bWVudCBpZGwgdHlwZSBjaGVja1xuXG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIFRPRE9cbiAgICBjb25zdCB0ID0gb3B0aW9ucy50eXBlXG5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICAvLyAgICBUT0RPXG5cbiAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICBjb25zdCBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgYmxvYkxpa2UsXG4gICAgICBuYW1lOiBuLFxuICAgICAgdHlwZTogdCxcbiAgICAgIGxhc3RNb2RpZmllZDogZFxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zdHJlYW0oLi4uYXJncylcbiAgfVxuXG4gIGFycmF5QnVmZmVyICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLmFycmF5QnVmZmVyKC4uLmFyZ3MpXG4gIH1cblxuICBzbGljZSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zbGljZSguLi5hcmdzKVxuICB9XG5cbiAgdGV4dCAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50ZXh0KC4uLmFyZ3MpXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNpemVcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudHlwZVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10gKCkge1xuICAgIHJldHVybiAnRmlsZSdcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RNb2RpZmllZDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYiA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoQmxvYilcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnQgPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8XG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICAgKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYsIG9wdHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBvcHRzKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0XG4pXG5cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNkZm4tRmlsZVByb3BlcnR5QmFnXG53ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsYXN0TW9kaWZpZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlbmRpbmdzJyxcbiAgICBjb252ZXJ0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodmFsdWUpXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgICAgaWYgKHZhbHVlICE9PSAnbmF0aXZlJykge1xuICAgICAgICB2YWx1ZSA9ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cmFuc3BhcmVudCdcbiAgfVxuXSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNwcm9jZXNzLWJsb2ItcGFydHNcbiAqIEBwYXJhbSB7KE5vZGVKUy5UeXBlZEFycmF5fEJsb2J8c3RyaW5nKVtdfSBwYXJ0c1xuICogQHBhcmFtIHt7IHR5cGU6IHN0cmluZywgZW5kaW5nczogc3RyaW5nIH19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0Jsb2JQYXJ0cyAocGFydHMsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIGJ5dGVzLlxuICAvKiogQHR5cGUge05vZGVKUy5UeXBlZEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBlbGVtZW50IGluIHBhcnRzOlxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGFydHMpIHtcbiAgICAvLyAxLiBJZiBlbGVtZW50IGlzIGEgVVNWU3RyaW5nLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczpcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcyBiZSBlbGVtZW50LlxuICAgICAgbGV0IHMgPSBlbGVtZW50XG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmRpbmdzIG1lbWJlciBvZiBvcHRpb25zIGlzIFwibmF0aXZlXCIsIHNldCBzXG4gICAgICAvLyAgICB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbGluZSBlbmRpbmdzIHRvIG5hdGl2ZVxuICAgICAgLy8gICAgb2YgZWxlbWVudC5cbiAgICAgIGlmIChvcHRpb25zLmVuZGluZ3MgPT09ICduYXRpdmUnKSB7XG4gICAgICAgIHMgPSBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUocylcbiAgICAgIH1cblxuICAgICAgLy8gMy4gQXBwZW5kIHRoZSByZXN1bHQgb2YgVVRGLTggZW5jb2RpbmcgcyB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZW5jb2Rlci5lbmNvZGUocykpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoZWxlbWVudCkgfHxcbiAgICAgIHR5cGVzLmlzVHlwZWRBcnJheShlbGVtZW50KVxuICAgICkge1xuICAgICAgLy8gMi4gSWYgZWxlbWVudCBpcyBhIEJ1ZmZlclNvdXJjZSwgZ2V0IGEgY29weSBvZiB0aGVcbiAgICAgIC8vICAgIGJ5dGVzIGhlbGQgYnkgdGhlIGJ1ZmZlciBzb3VyY2UsIGFuZCBhcHBlbmQgdGhvc2VcbiAgICAgIC8vICAgIGJ5dGVzIHRvIGJ5dGVzLlxuICAgICAgaWYgKCFlbGVtZW50LmJ1ZmZlcikgeyAvLyBBcnJheUJ1ZmZlclxuICAgICAgICBieXRlcy5wdXNoKG5ldyBVaW50OEFycmF5KGVsZW1lbnQpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgICBuZXcgVWludDhBcnJheShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZWxlbWVudCkpIHtcbiAgICAgIC8vIDMuIElmIGVsZW1lbnQgaXMgYSBCbG9iLCBhcHBlbmQgdGhlIGJ5dGVzIGl0IHJlcHJlc2VudHNcbiAgICAgIC8vICAgIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBieXRlcy5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jY29udmVydC1saW5lLWVuZGluZ3MtdG8tbmF0aXZlXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUgKHMpIHtcbiAgLy8gMS4gTGV0IG5hdGl2ZSBsaW5lIGVuZGluZyBiZSBiZSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGxldCBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcbidcblxuICAvLyAyLiBJZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybeKAmXMgY29udmVudGlvbnMgYXJlIHRvXG4gIC8vICAgIHJlcHJlc2VudCBuZXdsaW5lcyBhcyBhIGNhcnJpYWdlIHJldHVybiBhbmQgbGluZSBmZWVkXG4gIC8vICAgIHNlcXVlbmNlLCBzZXQgbmF0aXZlIGxpbmUgZW5kaW5nIHRvIHRoZSBjb2RlIHBvaW50XG4gIC8vICAgIFUrMDAwRCBDUiBmb2xsb3dlZCBieSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgbmF0aXZlTGluZUVuZGluZyA9ICdcXHJcXG4nXG4gIH1cblxuICByZXR1cm4gcy5yZXBsYWNlKC9cXHI/XFxuL2csIG5hdGl2ZUxpbmVFbmRpbmcpXG59XG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAoTmF0aXZlRmlsZSAmJiBvYmplY3QgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIEZpbGUgfHwgKFxuICAgICAgb2JqZWN0ICYmXG4gICAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0ZpbGUnXG4gICAgKVxuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBtYWtlSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcblxuLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNmb3JtZGF0YVxuY2xhc3MgRm9ybURhdGEge1xuICBjb25zdHJ1Y3RvciAoZm9ybSkge1xuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuYXBwZW5kJyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGhcbiAgICAvLyBuYW1lLCB2YWx1ZSwgYW5kIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIEFwcGVuZCBlbnRyeSB0byB0aGlz4oCZcyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICB9XG5cbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGRlbGV0ZShuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcyB3aG9zZSBuYW1lXG4gICAgLy8gaXMgbmFtZSBmcm9tIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdID0gdGhpc1trU3RhdGVdLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICB9XG5cbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXPigJlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXRBbGwnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc+KAmXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiB0aGUgZW1wdHkgbGlzdC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgZW50cmllcyB3aG9zZSBuYW1lIGlzIG5hbWUsIGluIG9yZGVyLFxuICAgIC8vIGZyb20gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSlcbiAgfVxuXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBoYXMobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbnRyeVxuICAgIC8vIHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTFcbiAgfVxuXG4gIHNldCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuc2V0JyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVGhlIHNldChuYW1lLCB2YWx1ZSkgYW5kIHNldChuYW1lLCBibG9iVmFsdWUsIGZpbGVuYW1lKSBtZXRob2Qgc3RlcHNcbiAgICAvLyBhcmU6XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB0b1VTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoIG5hbWUsIHZhbHVlLCBhbmRcbiAgICAvLyBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0IHdob3NlIG5hbWUgaXMgbmFtZSwgdGhlblxuICAgIC8vIHJlcGxhY2UgdGhlIGZpcnN0IHN1Y2ggZW50cnkgd2l0aCBlbnRyeSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9IFtcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKDAsIGlkeCksXG4gICAgICAgIGVudHJ5LFxuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoaWR4ICsgMSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhcHBlbmQgZW50cnkgdG8gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEZvcm1EYXRhKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG59XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gRm9ybURhdGEucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm9ybURhdGEucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGb3JtRGF0YScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjcmVhdGUtYW4tZW50cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xCbG9ifSB2YWx1ZVxuICogQHBhcmFtIHs/c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWFrZUVudHJ5IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgLy8gMS4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIG5hbWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIC8vIFwiVG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZywgcmVwbGFjZSBhbnkgc3Vycm9nYXRlc1xuICAvLyAgd2l0aCBVK0ZGRkQuXCJcbiAgLy8gc2VlOiBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmRcbiAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpLnRvU3RyaW5nKCd1dGY4JylcblxuICAvLyAyLiBJZiB2YWx1ZSBpcyBhIHN0cmluZywgdGhlbiBzZXQgdmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nXG4gIC8vICAgIHZhbHVlIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCd1dGY4JylcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBJZiB2YWx1ZSBpcyBub3QgYSBGaWxlIG9iamVjdCwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBcImJsb2JcIlxuICAgIGlmICghaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgaXMgZmlsZW5hbWUuXG4gICAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qKiBAdHlwZSB7RmlsZVByb3BlcnR5QmFnfSAqL1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSAoTmF0aXZlRmlsZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVW5kaWNpRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhIH1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJ1c2JveSA9IHJlcXVpcmUoJ0BmYXN0aWZ5L2J1c2JveScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0Jsb2JMaWtlLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBmdWxseVJlYWRCb2R5XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24sIHN0cnVjdHVyZWRDbG9uZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc0Vycm9yZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGlzVWludDhBcnJheSwgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcblxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyAxLiBMZXQgc3RyZWFtIGJlIG51bGwuXG4gIGxldCBzdHJlYW0gPSBudWxsXG5cbiAgLy8gMi4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuIHNldCBzdHJlYW0gdG8gb2JqZWN0LlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICBzdHJlYW0gPSBvYmplY3RcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIG9iamVjdCBpcyBhIEJsb2Igb2JqZWN0LCBzZXQgc3RyZWFtIHRvIHRoZVxuICAgIC8vICAgIHJlc3VsdCBvZiBydW5uaW5nIG9iamVjdOKAmXMgZ2V0IHN0cmVhbS5cbiAgICBzdHJlYW0gPSBvYmplY3Quc3RyZWFtKClcbiAgfSBlbHNlIHtcbiAgICAvLyA0LiBPdGhlcndpc2UsIHNldCBzdHJlYW0gdG8gYSBuZXcgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCBhbmQgc2V0XG4gICAgLy8gICAgdXAgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcbiAgICAgICAgICB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHRleHRFbmNvZGVyLmVuY29kZShzb3VyY2UpIDogc291cmNlXG4gICAgICAgIClcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBBc3NlcnQ6IHN0cmVhbSBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdC5cbiAgYXNzZXJ0KGlzUmVhZGFibGVTdHJlYW1MaWtlKHN0cmVhbSkpXG5cbiAgLy8gNi4gTGV0IGFjdGlvbiBiZSBudWxsLlxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIC8vIDcuIExldCBzb3VyY2UgYmUgbnVsbC5cbiAgbGV0IHNvdXJjZSA9IG51bGxcblxuICAvLyA4LiBMZXQgbGVuZ3RoIGJlIG51bGwuXG4gIGxldCBsZW5ndGggPSBudWxsXG5cbiAgLy8gOS4gTGV0IHR5cGUgYmUgbnVsbC5cbiAgbGV0IHR5cGUgPSBudWxsXG5cbiAgLy8gMTAuIFN3aXRjaCBvbiBvYmplY3Q6XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIG9iamVjdC5cbiAgICAvLyBOb3RlOiBzZXR0aW5nIHNvdXJjZSB0byBhIFVpbnQ4QXJyYXkgaGVyZSBicmVha3Mgc29tZSBtb2NraW5nIGFzc3VtcHRpb25zLlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYHRleHQvcGxhaW47Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gVVJMU2VhcmNoUGFyYW1zXG5cbiAgICAvLyBzcGVjIHNheXMgdG8gcnVuIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvbiBib2R5Lmxpc3RcbiAgICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGluIE5vZGUuanMgYXMgYXBhcnQgb2YgYW4gVVJMU2VhcmNoUGFyYW1zIGluc3RhbmNlIHRvU3RyaW5nIG1ldGhvZFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0w0OTBcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMTAwXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHNlcmlhbGl6ZXIgd2l0aCBvYmplY3TigJlzIGxpc3QuXG4gICAgc291cmNlID0gb2JqZWN0LnRvU3RyaW5nKClcblxuICAgIC8vIFNldCB0eXBlIHRvIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3Quc2xpY2UoKSlcbiAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclZpZXdcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3QuYnVmZmVyLnNsaWNlKG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QuYnl0ZU9mZnNldCArIG9iamVjdC5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKG9iamVjdCkpIHtcbiAgICBjb25zdCBib3VuZGFyeSA9IGAtLS0tZm9ybWRhdGEtdW5kaWNpLTAke2Ake01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMTEpfWAucGFkU3RhcnQoMTEsICcwJyl9YFxuICAgIGNvbnN0IHByZWZpeCA9IGAtLSR7Ym91bmRhcnl9XFxyXFxuQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhYFxuXG4gICAgLyohIGZvcm1kYXRhLXBvbHlmaWxsLiBNSVQgTGljZW5zZS4gSmltbXkgV8OkcnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdOKAmXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgYm91bmRhcnlcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN04oCZcyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3TigJlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZeKAmXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gMTMuIExldCBib2R5IGJlIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLCBzb3VyY2UgaXMgc291cmNlLFxuICAvLyBhbmQgbGVuZ3RoIGlzIGxlbmd0aC5cbiAgY29uc3QgYm9keSA9IHsgc3RyZWFtLCBzb3VyY2UsIGxlbmd0aCB9XG5cbiAgLy8gMTQuIFJldHVybiAoYm9keSwgdHlwZSkuXG4gIHJldHVybiBbYm9keSwgdHlwZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0LXNhZmVseS1leHRyYWN0XG5mdW5jdGlvbiBzYWZlbHlFeHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChib2R5KSB7XG4gIC8vIFRvIGNsb25lIGEgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jbG9uZVxuXG4gIC8vIDEuIExldCDCqyBvdXQxLCBvdXQyIMK7IGJlIHRoZSByZXN1bHQgb2YgdGVlaW5nIGJvZHnigJlzIHN0cmVhbS5cbiAgY29uc3QgW291dDEsIG91dDJdID0gYm9keS5zdHJlYW0udGVlKClcbiAgY29uc3Qgb3V0MkNsb25lID0gc3RydWN0dXJlZENsb25lKG91dDIsIHsgdHJhbnNmZXI6IFtvdXQyXSB9KVxuICAvLyBUaGlzLCBmb3Igd2hhdGV2ZXIgcmVhc29ucywgdW5yZWZzIG91dDJDbG9uZSB3aGljaCBhbGxvd3NcbiAgLy8gdGhlIHByb2Nlc3MgdG8gZXhpdCBieSBpdHNlbGYuXG4gIGNvbnN0IFssIGZpbmFsQ2xvbmVdID0gb3V0MkNsb25lLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHnigJlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogZmluYWxDbG9uZSxcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnN1bWVCb2R5IChib2R5KSB7XG4gIGlmIChib2R5KSB7XG4gICAgaWYgKGlzVWludDhBcnJheShib2R5KSkge1xuICAgICAgeWllbGQgYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBib2R5LnN0cmVhbVxuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcGF0LlxuICAgICAgc3RyZWFtW2tCb2R5VXNlZF0gPSB0cnVlXG5cbiAgICAgIHlpZWxkICogc3RyZWFtXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzdGF0ZSkge1xuICBpZiAoc3RhdGUuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlNaXhpbk1ldGhvZHMgKGluc3RhbmNlKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYmxvYiAoKSB7XG4gICAgICAvLyBUaGUgYmxvYigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIEJsb2Igd2hvc2VcbiAgICAgIC8vIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgd2hvc2UgdHlwZSBhdHRyaWJ1dGUgaXMgdGhpc+KAmXNcbiAgICAgIC8vIE1JTUUgdHlwZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUobWltZVR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gYSBCbG9iIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgdHlwZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gaXMgbWltZVR5cGUuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IG1pbWVUeXBlIH0pXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXJyYXlCdWZmZXIgKCkge1xuICAgICAgLy8gVGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgLy8gb2YgcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyXG4gICAgICAvLyB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgdXRmOERlY29kZUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAganNvbiAoKSB7XG4gICAgICAvLyBUaGUganNvbigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgcGFyc2UgSlNPTiBmcm9tIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCBwYXJzZUpTT05Gcm9tQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBpbnN0YW5jZSlcblxuICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpXG5cbiAgICAgIC8vIElmIG1pbWVUeXBl4oCZcyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLCB0aGVuOlxuICAgICAgaWYgKC9tdWx0aXBhcnRcXC9mb3JtLWRhdGEvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmhlYWRlcnMpIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWVcblxuICAgICAgICBjb25zdCByZXNwb25zZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICBsZXQgYnVzYm95XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBidXNib3kgPSBuZXcgQnVzYm95KHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBwcmVzZXJ2ZVBhdGg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGAke2Vycn1gLCAnQWJvcnRFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICBidXNib3kub24oJ2ZpZWxkJywgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGJ1c2JveS5vbignZmlsZScsIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG5cbiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnIHx8IGVuY29kaW5nLnRvTG93ZXJDYXNlKCkgPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICBsZXQgYmFzZTY0Y2h1bmsgPSAnJ1xuXG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBiYXNlNjRjaHVuayArPSBjaHVuay50b1N0cmluZygpLnJlcGxhY2UoL1tcXHJcXG5dL2dtLCAnJylcblxuICAgICAgICAgICAgICBjb25zdCBlbmQgPSBiYXNlNjRjaHVuay5sZW5ndGggLSBiYXNlNjRjaHVuay5sZW5ndGggJSA0XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLnNsaWNlKDAsIGVuZCksICdiYXNlNjQnKSlcblxuICAgICAgICAgICAgICBiYXNlNjRjaHVuayA9IGJhc2U2NGNodW5rLnNsaWNlKGVuZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuaywgJ2Jhc2U2NCcpKVxuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGJ1c2JveVJlc29sdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgYnVzYm95Lm9uKCdmaW5pc2gnLCByZXNvbHZlKVxuICAgICAgICAgIGJ1c2JveS5vbignZXJyb3InLCAoZXJyKSA9PiByZWplY3QobmV3IFR5cGVFcnJvcihlcnIpKSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGhpcy5ib2R5ICE9PSBudWxsKSBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkgYnVzYm95LndyaXRlKGNodW5rKVxuICAgICAgICBidXNib3kuZW5kKClcbiAgICAgICAgYXdhaXQgYnVzYm95UmVzb2x2ZVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZUZvcm1EYXRhXG4gICAgICB9IGVsc2UgaWYgKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBtaW1lVHlwZeKAmXMgZXNzZW5jZSBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLCB0aGVuOlxuXG4gICAgICAgIC8vIDEuIExldCBlbnRyaWVzIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBieXRlcy5cbiAgICAgICAgbGV0IGVudHJpZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgdGV4dCA9ICcnXG4gICAgICAgICAgLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHBhcnNlciB3aWxsIGtlZXAgdGhlIEJPTS5cbiAgICAgICAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsZW5jb2RlZC1wYXJzZXJcbiAgICAgICAgICAvLyBOb3RlIHRoYXQgc3RyZWFtaW5nIGRlY29kZXIgaXMgc3RhdGVmdWwgYW5kIGNhbm5vdCBiZSByZXVzZWRcbiAgICAgICAgICBjb25zdCBzdHJlYW1pbmdEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgaWdub3JlQk9NOiB0cnVlIH0pXG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkge1xuICAgICAgICAgICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZSgpXG4gICAgICAgICAgZW50cmllcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGV4dClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHQ6IFVuY2xlYXIgd2hlbiBuZXcgVVJMU2VhcmNoUGFyYW1zIGNhbiBmYWlsIG9uIGEgc3RyaW5nLlxuICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoKSwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJpZXMgYXJlIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXYWl0IGEgdGljayBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhIFR5cGVFcnJvciBjYW4gYmUgdGhyb3duIHdoZW4gYW4gQWJvcnRFcnJvciBzaG91bGQuXG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG5cbiAgICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6IGAke2luc3RhbmNlLm5hbWV9LmZvcm1EYXRhYCxcbiAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHBhcnNlIGNvbnRlbnQgYXMgRm9ybURhdGEuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRob2RzXG59XG5cbmZ1bmN0aW9uIG1peGluQm9keSAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLnByb3RvdHlwZSwgYm9keU1peGluTWV0aG9kcyhwcm90b3R5cGUpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gb2JqZWN0XG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwZWNDb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3Rba1N0YXRlXS5ib2R5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgaXMgdW51c2FibGUnKVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN04oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMobmV3IFVpbnQ4QXJyYXkoKSlcbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgb2JqZWN04oCZcyBib2R5IGdpdmVuIHN1Y2Nlc3NTdGVwcyxcbiAgLy8gICAgZXJyb3JTdGVwcywgYW5kIG9iamVjdOKAmXMgcmVsZXZhbnQgZ2xvYmFsIG9iamVjdC5cbiAgYXdhaXQgZnVsbHlSZWFkQm9keShvYmplY3Rba1N0YXRlXS5ib2R5LCBzdWNjZXNzU3RlcHMsIGVycm9yU3RlcHMpXG5cbiAgLy8gNy4gUmV0dXJuIHByb21pc2UuXG4gIHJldHVybiBwcm9taXNlLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGJvZHlVbnVzYWJsZSAoYm9keSkge1xuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keeKAmXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gdXRmOERlY29kZUJ5dGVzIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDEuIExldCBidWZmZXIgYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIHRocmVlIGJ5dGVzIGZyb21cbiAgLy8gICAgaW9RdWV1ZSwgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cblxuICAvLyAyLiBJZiBidWZmZXIgaXMgMHhFRiAweEJCIDB4QkYsIHRoZW4gcmVhZCB0aHJlZVxuICAvLyAgICBieXRlcyBmcm9tIGlvUXVldWUuIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICBpZiAoYnVmZmVyWzBdID09PSAweEVGICYmIGJ1ZmZlclsxXSA9PT0gMHhCQiAmJiBidWZmZXJbMl0gPT09IDB4QkYpIHtcbiAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkoMylcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIFVURi044oCZc1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG4gIGNvbnN0IG91dHB1dCA9IHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWpzb24tYnl0ZXMtdG8tYS1qYXZhc2NyaXB0LXZhbHVlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTkZyb21CeXRlcyAoYnl0ZXMpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodXRmOERlY29kZUJ5dGVzKGJ5dGVzKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9yZXNwb25zZScpLlJlc3BvbnNlfGltcG9ydCgnLi9yZXF1ZXN0JykuUmVxdWVzdH0gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAob2JqZWN0KSB7XG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IG9iamVjdFtrU3RhdGVdXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LXR5cGUnKVxuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXh0cmFjdEJvZHksXG4gIHNhZmVseUV4dHJhY3RCb2R5LFxuICBjbG9uZUJvZHksXG4gIG1peGluQm9keVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSFRUUDJCdWlsZFJlcXVlc3QsIGtIVFRQMkNvcHlIZWFkZXJzLCBrSFRUUDFCdWlsZFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuLy8gdG9rZW5SZWdFeHAgYW5kIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHZhbCBpcyBhIHZhbGlkIEhUVFAgdG9rZW5cbiAqIHBlciB0aGUgcnVsZXMgZGVmaW5lZCBpbiBSRkMgNzIzMFxuICogU2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqL1xuY29uc3QgdG9rZW5SZWdFeHAgPSAvXltcXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XSskL1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vLyBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBkb2VzIG5vdCBjb250YWluIGNvbnRyb2wgY2hhcnMgXFx4MDAgdG8gXFx4MjBcbmNvbnN0IGludmFsaWRQYXRoUmVnZXggPSAvW15cXHUwMDIxLVxcdTAwZmZdL1xuXG5jb25zdCBrSGFuZGxlciA9IFN5bWJvbCgnaGFuZGxlcicpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxubGV0IGV4dHJhY3RCb2R5XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5jcmVhdGUgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJylcbiAgY2hhbm5lbHMuYm9keVNlbnQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Ym9keVNlbnQnKVxuICBjaGFubmVscy5oZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnKVxuICBjaGFubmVscy50cmFpbGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDp0cmFpbGVycycpXG4gIGNoYW5uZWxzLmVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5jcmVhdGUgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJvZHlTZW50ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5oZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy50cmFpbGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuZXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5LFxuICAgIGlkZW1wb3RlbnQsXG4gICAgYmxvY2tpbmcsXG4gICAgdXBncmFkZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICByZXNldCxcbiAgICB0aHJvd09uRXJyb3IsXG4gICAgZXhwZWN0Q29udGludWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXguZXhlYyhwYXRoKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMobWV0aG9kKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlcnNUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGJvZHlUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAocmVzZXQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlc2V0JylcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0Q29udGludWUgIT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0Q29udGludWUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGV4cGVjdENvbnRpbnVlJylcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnNUaW1lb3V0ID0gaGVhZGVyc1RpbWVvdXRcblxuICAgIHRoaXMuYm9keVRpbWVvdXQgPSBib2R5VGltZW91dFxuXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgPT09IHRydWVcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG5cbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveSh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5vbignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVyciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBib2R5IDogbnVsbFxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ1ZmZlci5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkubGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IHV0aWwuaXNJdGVyYWJsZShib2R5KSB8fCB1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFJlYWRhYmxlIHN0cmVhbSwgYW4gaXRlcmFibGUsIG9yIGFuIGFzeW5jIGl0ZXJhYmxlJylcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGdyYWRlID0gdXBncmFkZSB8fCBudWxsXG5cbiAgICB0aGlzLnBhdGggPSBxdWVyeSA/IHV0aWwuYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSAnJ1xuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKHRoaXMuYm9keSkpIHtcbiAgICAgIGlmICh1dGlsLm5vZGVNYWpvciA8IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPCA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0Zvcm0tRGF0YSBib2RpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIG5vZGUgdjE2LjggYW5kIG5ld2VyLicpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgICAgZXh0cmFjdEJvZHkgPSByZXF1aXJlKCcuLi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuICAgICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtjb250ZW50VHlwZX1cXHJcXG5gXG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiB0aGlzLmNvbnRlbnRUeXBlID09IG51bGwgJiYgYm9keS50eXBlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYm9keS50eXBlXG4gICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtib2R5LnR5cGV9XFxyXFxuYFxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSlcblxuICAgIHRoaXMuc2VydmVybmFtZSA9IHV0aWwuZ2V0U2VydmVyTmFtZSh0aGlzLmhvc3QpXG5cbiAgICB0aGlzW2tIYW5kbGVyXSA9IGhhbmRsZXJcblxuICAgIGlmIChjaGFubmVscy5jcmVhdGUuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNyZWF0ZS5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmIChjaGFubmVscy5ib2R5U2VudC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuYm9keVNlbnQucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIGFib3J0KHRoaXMuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29ubmVjdChhYm9ydClcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAoY2hhbm5lbHMuaGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuaGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSwgaGVhZGVycywgc3RhdHVzVGV4dCB9IH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRGF0YShjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlXG4gICAgaWYgKGNoYW5uZWxzLnRyYWlsZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy50cmFpbGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgdHJhaWxlcnMgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBUaGlzIG1pZ2h0IGJlIGEgYmFkIGlkZWE/XG4gICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgaWYgKGNoYW5uZWxzLmVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5lcnJvci5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgZXJyb3IgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkZpbmFsbHkgKCkge1xuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIHRoaXMuZW5kSGFuZGxlciA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBhZGp1c3QgdG8gc3VwcG9ydCBIMlxuICBhZGRIZWFkZXIgKGtleSwgdmFsdWUpIHtcbiAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAxQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gVE9ETzogTWlncmF0ZSBoZWFkZXIgcGFyc2luZyBoZXJlLCB0byBtYWtlIFJlcXVlc3RzXG4gICAgLy8gSFRUUCBhZ25vc3RpY1xuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnNcbiAgICBvcHRzID0geyAuLi5vcHRzLCBoZWFkZXJzOiBudWxsIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwga2V5LCBoZWFkZXJzW2tleV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQ29weUhlYWRlcnNdIChyYXcpIHtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmF3LnNwbGl0KCdcXHJcXG4nKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgcmF3SGVhZGVycykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KCc6ICcpXG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgaWYgKGhlYWRlcnNba2V5XSkgaGVhZGVyc1trZXldICs9IGAsJHt2YWx1ZX1gXG4gICAgICBlbHNlIGhlYWRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyVmFsdWUgKGtleSwgdmFsLCBza2lwQXBwZW5kKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICB2YWwgPSB2YWwgIT0gbnVsbCA/IGAke3ZhbH1gIDogJydcblxuICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHJldHVybiBza2lwQXBwZW5kID8gdmFsIDogYCR7a2V5fTogJHt2YWx9XFxyXFxuYFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyIChyZXF1ZXN0LCBrZXksIHZhbCwgc2tpcEFwcGVuZCA9IGZhbHNlKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWVzdC5ob3N0ID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnaG9zdCdcbiAgKSB7XG4gICAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPSBwYXJzZUludCh2YWwsIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlcXVlc3QuY29udGVudExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb250ZW50LWxlbmd0aCBoZWFkZXInKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTIgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZSdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9IHZhbFxuICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbidcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICAgIGlmICh2YWx1ZSAhPT0gJ2Nsb3NlJyAmJiB2YWx1ZSAhPT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbiBoZWFkZXInKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcC1hbGl2ZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZ3JhZGUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cGdyYWRlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnZXhwZWN0J1xuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoJ2V4cGVjdCBoZWFkZXIgbm90IHN1cHBvcnRlZCcpXG4gIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhrZXkpID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlciBrZXknKVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwQXBwZW5kKSB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1trZXldKSByZXF1ZXN0LmhlYWRlcnNba2V5XSArPSBgLCR7cHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKX1gXG4gICAgICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyJylcbmNvbnN0IHtcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrRGVzdHJveSwga0Nsb3NlLCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga0Rlc3Ryb3llZCA9IFN5bWJvbCgnZGVzdHJveWVkJylcbmNvbnN0IGtDbG9zZWQgPSBTeW1ib2woJ2Nsb3NlZCcpXG5jb25zdCBrT25EZXN0cm95ZWQgPSBTeW1ib2woJ29uRGVzdHJveWVkJylcbmNvbnN0IGtPbkNsb3NlZCA9IFN5bWJvbCgnb25DbG9zZWQnKVxuY29uc3Qga0ludGVyY2VwdGVkRGlzcGF0Y2ggPSBTeW1ib2woJ0ludGVyY2VwdGVkIERpc3BhdGNoJylcblxuY2xhc3MgRGlzcGF0Y2hlckJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSBmYWxzZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICB0aGlzW2tDbG9zZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkNsb3NlZF0gPSBbXVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgQ29ubmVjdFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuXG5sZXQgdGxzIC8vIGluY2x1ZGUgdGxzIGNvbmRpdGlvbmFsbHkgc2luY2UgaXQgaXMgbm90IGFsd2F5cyBhdmFpbGFibGVcblxuLy8gVE9ETzogc2Vzc2lvbiByZS11c2UgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGZpcnN0XG4vLyBjb25uZWN0aW9uIHRvIHJlc29sdmUgdGhlIHNlc3Npb24gYW5kIG1pZ2h0IHRoZXJlZm9yZVxuLy8gcmVzb2x2ZSB0aGUgc2FtZSBzZXJ2ZXJuYW1lIG11bHRpcGxlIHRpbWVzIGV2ZW4gd2hlblxuLy8gcmUtdXNlIGlzIGVuYWJsZWQuXG5cbmxldCBTZXNzaW9uQ2FjaGVcbi8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuaWYgKGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSAmJiAhcHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBXZWFrU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA8IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KGtleSlcbiAgICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICAgIHJldHVybiByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBuZXcgV2Vha1JlZihzZXNzaW9uKSlcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeS5yZWdpc3RlcihzZXNzaW9uLCBzZXNzaW9uS2V5KVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgU2ltcGxlU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplID49IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb2xkZXN0IHNlc3Npb25cbiAgICAgICAgY29uc3QgeyB2YWx1ZTogb2xkZXN0S2V5IH0gPSB0aGlzLl9zZXNzaW9uQ2FjaGUua2V5cygpLm5leHQoKVxuICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKG9sZGVzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbm5lY3RvciAoeyBhbGxvd0gyLCBtYXhDYWNoZWRTZXNzaW9ucywgc29ja2V0UGF0aCwgdGltZW91dCwgLi4ub3B0cyB9KSB7XG4gIGlmIChtYXhDYWNoZWRTZXNzaW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhDYWNoZWRTZXNzaW9ucykgfHwgbWF4Q2FjaGVkU2Vzc2lvbnMgPCAwKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q2FjaGVkU2Vzc2lvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBzb2NrZXRQYXRoLCAuLi5vcHRzIH1cbiAgY29uc3Qgc2Vzc2lvbkNhY2hlID0gbmV3IFNlc3Npb25DYWNoZShtYXhDYWNoZWRTZXNzaW9ucyA9PSBudWxsID8gMTAwIDogbWF4Q2FjaGVkU2Vzc2lvbnMpXG4gIHRpbWVvdXQgPSB0aW1lb3V0ID09IG51bGwgPyAxMGUzIDogdGltZW91dFxuICBhbGxvd0gyID0gYWxsb3dIMiAhPSBudWxsID8gYWxsb3dIMiA6IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0ICh7IGhvc3RuYW1lLCBob3N0LCBwcm90b2NvbCwgcG9ydCwgc2VydmVybmFtZSwgbG9jYWxBZGRyZXNzLCBodHRwU29ja2V0IH0sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNvY2tldFxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGlmICghdGxzKSB7XG4gICAgICAgIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgYXNzZXJ0KHNlc3Npb25LZXkpXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgNDQzLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcblxuICAgICAgc29ja2V0XG4gICAgICAgIC5vbignc2Vzc2lvbicsIGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogQ2FuIGEgc2Vzc2lvbiBiZWNvbWUgaW52YWxpZCBvbmNlIGVzdGFibGlzaGVkPyBEb24ndCB0aGluayBzbz9cbiAgICAgICAgICBzZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCghaHR0cFNvY2tldCwgJ2h0dHBTb2NrZXQgY2FuIG9ubHkgYmUgc2VudCBvbiBUTFMgdXBkYXRlJylcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0LCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgODAsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBUQ1Aga2VlcCBhbGl2ZSBvcHRpb25zIG9uIHRoZSBzb2NrZXQgaGVyZSBpbnN0ZWFkIG9mIGluIGNvbm5lY3QoKSBmb3IgdGhlIGNhc2Ugb2YgYXNzaWduaW5nIHRoZSBzb2NrZXRcbiAgICBpZiAob3B0aW9ucy5rZWVwQWxpdmUgPT0gbnVsbCB8fCBvcHRpb25zLmtlZXBBbGl2ZSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlSW5pdGlhbERlbGF5ID0gb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXkgPT09IHVuZGVmaW5lZCA/IDYwZTMgOiBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBrZWVwQWxpdmVJbml0aWFsRGVsYXkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsVGltZW91dCA9IHNldHVwVGltZW91dCgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldCksIHRpbWVvdXQpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5zZXROb0RlbGF5KHRydWUpXG4gICAgICAub25jZShwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnc2VjdXJlQ29ubmVjdCcgOiAnY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwVGltZW91dCAob25Db25uZWN0VGltZW91dCwgdGltZW91dCkge1xuICBpZiAoIXRpbWVvdXQpIHtcbiAgICByZXR1cm4gKCkgPT4ge31cbiAgfVxuXG4gIGxldCBzMSA9IG51bGxcbiAgbGV0IHMyID0gbnVsbFxuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3RvcmlzZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICBzMSA9IHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICAvLyBXaW5kb3dzIG5lZWRzIGFuIGV4dHJhIHNldEltbWVkaWF0ZSBwcm9iYWJseSBkdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgaW4gdGhlIHNvY2tldCBsb2dpY1xuICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNvbm5lY3RUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9KVxuICB9LCB0aW1lb3V0KVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgY2xlYXJJbW1lZGlhdGUoczEpXG4gICAgY2xlYXJJbW1lZGlhdGUoczIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Db25uZWN0VGltZW91dCAoc29ja2V0KSB7XG4gIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBDb25uZWN0VGltZW91dEVycm9yKCkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVudW1Ub01hcCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGVudW1Ub01hcChvYmopIHtcbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG59XG5leHBvcnRzLmVudW1Ub01hcCA9IGVudW1Ub01hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNQRUNJQUxfSEVBREVSUyA9IGV4cG9ydHMuSEVBREVSX1NUQVRFID0gZXhwb3J0cy5NSU5PUiA9IGV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUyA9IGV4cG9ydHMuVE9LRU4gPSBleHBvcnRzLlNUUklDVF9UT0tFTiA9IGV4cG9ydHMuSEVYID0gZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gZXhwb3J0cy5VU0VSSU5GT19DSEFSUyA9IGV4cG9ydHMuTUFSSyA9IGV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLk5VTSA9IGV4cG9ydHMuSEVYX01BUCA9IGV4cG9ydHMuTlVNX01BUCA9IGV4cG9ydHMuQUxQSEEgPSBleHBvcnRzLkZJTklTSCA9IGV4cG9ydHMuSF9NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBleHBvcnRzLk1FVEhPRFNfSUNFID0gZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBleHBvcnRzLk1FVEhPRFMgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgPSBleHBvcnRzLkZMQUdTID0gZXhwb3J0cy5UWVBFID0gZXhwb3J0cy5FUlJPUiA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8vIEMgaGVhZGVyc1xudmFyIEVSUk9SO1xuKGZ1bmN0aW9uIChFUlJPUikge1xuICAgIEVSUk9SW0VSUk9SW1wiT0tcIl0gPSAwXSA9IFwiT0tcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVEVSTkFMXCJdID0gMV0gPSBcIklOVEVSTkFMXCI7XG4gICAgRVJST1JbRVJST1JbXCJTVFJJQ1RcIl0gPSAyXSA9IFwiU1RSSUNUXCI7XG4gICAgRVJST1JbRVJST1JbXCJMRl9FWFBFQ1RFRFwiXSA9IDNdID0gXCJMRl9FWFBFQ1RFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiXSA9IDRdID0gXCJVTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIXCI7XG4gICAgRVJST1JbRVJST1JbXCJDTE9TRURfQ09OTkVDVElPTlwiXSA9IDVdID0gXCJDTE9TRURfQ09OTkVDVElPTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9NRVRIT0RcIl0gPSA2XSA9IFwiSU5WQUxJRF9NRVRIT0RcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVVJMXCJdID0gN10gPSBcIklOVkFMSURfVVJMXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0NPTlNUQU5UXCJdID0gOF0gPSBcIklOVkFMSURfQ09OU1RBTlRcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVkVSU0lPTlwiXSA9IDldID0gXCJJTlZBTElEX1ZFUlNJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfSEVBREVSX1RPS0VOXCJdID0gMTBdID0gXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiXSA9IDExXSA9IFwiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DSFVOS19TSVpFXCJdID0gMTJdID0gXCJJTlZBTElEX0NIVU5LX1NJWkVcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfU1RBVFVTXCJdID0gMTNdID0gXCJJTlZBTElEX1NUQVRVU1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9FT0ZfU1RBVEVcIl0gPSAxNF0gPSBcIklOVkFMSURfRU9GX1NUQVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCJdID0gMTVdID0gXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0JFR0lOXCJdID0gMTZdID0gXCJDQl9NRVNTQUdFX0JFR0lOXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9IRUFERVJTX0NPTVBMRVRFXCJdID0gMTddID0gXCJDQl9IRUFERVJTX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCJdID0gMThdID0gXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9DSFVOS19IRUFERVJcIl0gPSAxOV0gPSBcIkNCX0NIVU5LX0hFQURFUlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfQ09NUExFVEVcIl0gPSAyMF0gPSBcIkNCX0NIVU5LX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURcIl0gPSAyMV0gPSBcIlBBVVNFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX1VQR1JBREVcIl0gPSAyMl0gPSBcIlBBVVNFRF9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURfSDJfVVBHUkFERVwiXSA9IDIzXSA9IFwiUEFVU0VEX0gyX1VQR1JBREVcIjtcbiAgICBFUlJPUltFUlJPUltcIlVTRVJcIl0gPSAyNF0gPSBcIlVTRVJcIjtcbn0pKEVSUk9SID0gZXhwb3J0cy5FUlJPUiB8fCAoZXhwb3J0cy5FUlJPUiA9IHt9KSk7XG52YXIgVFlQRTtcbihmdW5jdGlvbiAoVFlQRSkge1xuICAgIFRZUEVbVFlQRVtcIkJPVEhcIl0gPSAwXSA9IFwiQk9USFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFUVVFU1RcIl0gPSAxXSA9IFwiUkVRVUVTVFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFU1BPTlNFXCJdID0gMl0gPSBcIlJFU1BPTlNFXCI7XG59KShUWVBFID0gZXhwb3J0cy5UWVBFIHx8IChleHBvcnRzLlRZUEUgPSB7fSkpO1xudmFyIEZMQUdTO1xuKGZ1bmN0aW9uIChGTEFHUykge1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDJdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA0XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDSFVOS0VEXCJdID0gOF0gPSBcIkNIVU5LRURcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlVQR1JBREVcIl0gPSAxNl0gPSBcIlVQR1JBREVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTlRFTlRfTEVOR1RIXCJdID0gMzJdID0gXCJDT05URU5UX0xFTkdUSFwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiU0tJUEJPRFlcIl0gPSA2NF0gPSBcIlNLSVBCT0RZXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJUUkFJTElOR1wiXSA9IDEyOF0gPSBcIlRSQUlMSU5HXCI7XG4gICAgLy8gMSA8PCA4IGlzIHVudXNlZFxuICAgIEZMQUdTW0ZMQUdTW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSA1MTJdID0gXCJUUkFOU0ZFUl9FTkNPRElOR1wiO1xufSkoRkxBR1MgPSBleHBvcnRzLkZMQUdTIHx8IChleHBvcnRzLkZMQUdTID0ge30pKTtcbnZhciBMRU5JRU5UX0ZMQUdTO1xuKGZ1bmN0aW9uIChMRU5JRU5UX0ZMQUdTKSB7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiSEVBREVSU1wiXSA9IDFdID0gXCJIRUFERVJTXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiQ0hVTktFRF9MRU5HVEhcIl0gPSAyXSA9IFwiQ0hVTktFRF9MRU5HVEhcIjtcbiAgICBMRU5JRU5UX0ZMQUdTW0xFTklFTlRfRkxBR1NbXCJLRUVQX0FMSVZFXCJdID0gNF0gPSBcIktFRVBfQUxJVkVcIjtcbn0pKExFTklFTlRfRkxBR1MgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgfHwgKGV4cG9ydHMuTEVOSUVOVF9GTEFHUyA9IHt9KSk7XG52YXIgTUVUSE9EUztcbihmdW5jdGlvbiAoTUVUSE9EUykge1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkRFTEVURVwiXSA9IDBdID0gXCJERUxFVEVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJHRVRcIl0gPSAxXSA9IFwiR0VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiSEVBRFwiXSA9IDJdID0gXCJIRUFEXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUE9TVFwiXSA9IDNdID0gXCJQT1NUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFVUXCJdID0gNF0gPSBcIlBVVFwiO1xuICAgIC8qIHBhdGhvbG9naWNhbCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPTk5FQ1RcIl0gPSA1XSA9IFwiQ09OTkVDVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk9QVElPTlNcIl0gPSA2XSA9IFwiT1BUSU9OU1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRSQUNFXCJdID0gN10gPSBcIlRSQUNFXCI7XG4gICAgLyogV2ViREFWICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ09QWVwiXSA9IDhdID0gXCJDT1BZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTE9DS1wiXSA9IDldID0gXCJMT0NLXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtDT0xcIl0gPSAxMF0gPSBcIk1LQ09MXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTU9WRVwiXSA9IDExXSA9IFwiTU9WRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BGSU5EXCJdID0gMTJdID0gXCJQUk9QRklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BQQVRDSFwiXSA9IDEzXSA9IFwiUFJPUFBBVENIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VBUkNIXCJdID0gMTRdID0gXCJTRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxPQ0tcIl0gPSAxNV0gPSBcIlVOTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkJJTkRcIl0gPSAxNl0gPSBcIkJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUJJTkRcIl0gPSAxN10gPSBcIlJFQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlVOQklORFwiXSA9IDE4XSA9IFwiVU5CSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQUNMXCJdID0gMTldID0gXCJBQ0xcIjtcbiAgICAvKiBzdWJ2ZXJzaW9uICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVQT1JUXCJdID0gMjBdID0gXCJSRVBPUlRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0FDVElWSVRZXCJdID0gMjFdID0gXCJNS0FDVElWSVRZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ0hFQ0tPVVRcIl0gPSAyMl0gPSBcIkNIRUNLT1VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUVSR0VcIl0gPSAyM10gPSBcIk1FUkdFXCI7XG4gICAgLyogdXBucCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk0tU0VBUkNIXCJdID0gMjRdID0gXCJNLVNFQVJDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk5PVElGWVwiXSA9IDI1XSA9IFwiTk9USUZZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU1VCU0NSSUJFXCJdID0gMjZdID0gXCJTVUJTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTlNVQlNDUklCRVwiXSA9IDI3XSA9IFwiVU5TVUJTQ1JJQkVcIjtcbiAgICAvKiBSRkMtNTc4OSAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVENIXCJdID0gMjhdID0gXCJQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVUkdFXCJdID0gMjldID0gXCJQVVJHRVwiO1xuICAgIC8qIENhbERBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ0FMRU5EQVJcIl0gPSAzMF0gPSBcIk1LQ0FMRU5EQVJcIjtcbiAgICAvKiBSRkMtMjA2OCwgc2VjdGlvbiAxOS42LjEuMiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxJTktcIl0gPSAzMV0gPSBcIkxJTktcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxJTktcIl0gPSAzMl0gPSBcIlVOTElOS1wiO1xuICAgIC8qIGljZWNhc3QgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTT1VSQ0VcIl0gPSAzM10gPSBcIlNPVVJDRVwiO1xuICAgIC8qIFJGQy03NTQwLCBzZWN0aW9uIDExLjYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUklcIl0gPSAzNF0gPSBcIlBSSVwiO1xuICAgIC8qIFJGQy0yMzI2IFJUU1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERVNDUklCRVwiXSA9IDM1XSA9IFwiREVTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJBTk5PVU5DRVwiXSA9IDM2XSA9IFwiQU5OT1VOQ0VcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRVUFwiXSA9IDM3XSA9IFwiU0VUVVBcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQTEFZXCJdID0gMzhdID0gXCJQTEFZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUEFVU0VcIl0gPSAzOV0gPSBcIlBBVVNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVEVBUkRPV05cIl0gPSA0MF0gPSBcIlRFQVJET1dOXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUX1BBUkFNRVRFUlwiXSA9IDQxXSA9IFwiR0VUX1BBUkFNRVRFUlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFVF9QQVJBTUVURVJcIl0gPSA0Ml0gPSBcIlNFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRURJUkVDVFwiXSA9IDQzXSA9IFwiUkVESVJFQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUNPUkRcIl0gPSA0NF0gPSBcIlJFQ09SRFwiO1xuICAgIC8qIFJBT1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJGTFVTSFwiXSA9IDQ1XSA9IFwiRkxVU0hcIjtcbn0pKE1FVEhPRFMgPSBleHBvcnRzLk1FVEhPRFMgfHwgKGV4cG9ydHMuTUVUSE9EUyA9IHt9KSk7XG5leHBvcnRzLk1FVEhPRFNfSFRUUCA9IFtcbiAgICBNRVRIT0RTLkRFTEVURSxcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLkhFQUQsXG4gICAgTUVUSE9EUy5QT1NULFxuICAgIE1FVEhPRFMuUFVULFxuICAgIE1FVEhPRFMuQ09OTkVDVCxcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5UUkFDRSxcbiAgICBNRVRIT0RTLkNPUFksXG4gICAgTUVUSE9EUy5MT0NLLFxuICAgIE1FVEhPRFMuTUtDT0wsXG4gICAgTUVUSE9EUy5NT1ZFLFxuICAgIE1FVEhPRFMuUFJPUEZJTkQsXG4gICAgTUVUSE9EUy5QUk9QUEFUQ0gsXG4gICAgTUVUSE9EUy5TRUFSQ0gsXG4gICAgTUVUSE9EUy5VTkxPQ0ssXG4gICAgTUVUSE9EUy5CSU5ELFxuICAgIE1FVEhPRFMuUkVCSU5ELFxuICAgIE1FVEhPRFMuVU5CSU5ELFxuICAgIE1FVEhPRFMuQUNMLFxuICAgIE1FVEhPRFMuUkVQT1JULFxuICAgIE1FVEhPRFMuTUtBQ1RJVklUWSxcbiAgICBNRVRIT0RTLkNIRUNLT1VULFxuICAgIE1FVEhPRFMuTUVSR0UsXG4gICAgTUVUSE9EU1snTS1TRUFSQ0gnXSxcbiAgICBNRVRIT0RTLk5PVElGWSxcbiAgICBNRVRIT0RTLlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlVOU1VCU0NSSUJFLFxuICAgIE1FVEhPRFMuUEFUQ0gsXG4gICAgTUVUSE9EUy5QVVJHRSxcbiAgICBNRVRIT0RTLk1LQ0FMRU5EQVIsXG4gICAgTUVUSE9EUy5MSU5LLFxuICAgIE1FVEhPRFMuVU5MSU5LLFxuICAgIE1FVEhPRFMuUFJJLFxuICAgIC8vIFRPRE8oaW5kdXRueSk6IHNob3VsZCB3ZSBhbGxvdyBpdCB3aXRoIEhUVFA/XG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX0lDRSA9IFtcbiAgICBNRVRIT0RTLlNPVVJDRSxcbl07XG5leHBvcnRzLk1FVEhPRFNfUlRTUCA9IFtcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5ERVNDUklCRSxcbiAgICBNRVRIT0RTLkFOTk9VTkNFLFxuICAgIE1FVEhPRFMuU0VUVVAsXG4gICAgTUVUSE9EUy5QTEFZLFxuICAgIE1FVEhPRFMuUEFVU0UsXG4gICAgTUVUSE9EUy5URUFSRE9XTixcbiAgICBNRVRIT0RTLkdFVF9QQVJBTUVURVIsXG4gICAgTUVUSE9EUy5TRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuUkVESVJFQ1QsXG4gICAgTUVUSE9EUy5SRUNPUkQsXG4gICAgTUVUSE9EUy5GTFVTSCxcbiAgICAvLyBGb3IgQWlyUGxheVxuICAgIE1FVEhPRFMuR0VULFxuICAgIE1FVEhPRFMuUE9TVCxcbl07XG5leHBvcnRzLk1FVEhPRF9NQVAgPSB1dGlsc18xLmVudW1Ub01hcChNRVRIT0RTKTtcbmV4cG9ydHMuSF9NRVRIT0RfTUFQID0ge307XG5PYmplY3Qua2V5cyhleHBvcnRzLk1FVEhPRF9NQVApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICgvXkgvLnRlc3Qoa2V5KSkge1xuICAgICAgICBleHBvcnRzLkhfTUVUSE9EX01BUFtrZXldID0gZXhwb3J0cy5NRVRIT0RfTUFQW2tleV07XG4gICAgfVxufSk7XG52YXIgRklOSVNIO1xuKGZ1bmN0aW9uIChGSU5JU0gpIHtcbiAgICBGSU5JU0hbRklOSVNIW1wiU0FGRVwiXSA9IDBdID0gXCJTQUZFXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVfV0lUSF9DQlwiXSA9IDFdID0gXCJTQUZFX1dJVEhfQ0JcIjtcbiAgICBGSU5JU0hbRklOSVNIW1wiVU5TQUZFXCJdID0gMl0gPSBcIlVOU0FGRVwiO1xufSkoRklOSVNIID0gZXhwb3J0cy5GSU5JU0ggfHwgKGV4cG9ydHMuRklOSVNIID0ge30pKTtcbmV4cG9ydHMuQUxQSEEgPSBbXTtcbmZvciAobGV0IGkgPSAnQScuY2hhckNvZGVBdCgwKTsgaSA8PSAnWicuY2hhckNvZGVBdCgwKTsgaSsrKSB7XG4gICAgLy8gVXBwZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcbiAgICAvLyBMb3dlciBjYXNlXG4gICAgZXhwb3J0cy5BTFBIQS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSArIDB4MjApKTtcbn1cbmV4cG9ydHMuTlVNX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG59O1xuZXhwb3J0cy5IRVhfTUFQID0ge1xuICAgIDA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsXG4gICAgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOSxcbiAgICBBOiAwWEEsIEI6IDBYQiwgQzogMFhDLCBEOiAwWEQsIEU6IDBYRSwgRjogMFhGLFxuICAgIGE6IDB4YSwgYjogMHhiLCBjOiAweGMsIGQ6IDB4ZCwgZTogMHhlLCBmOiAweGYsXG59O1xuZXhwb3J0cy5OVU0gPSBbXG4gICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxuXTtcbmV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLkFMUEhBLmNvbmNhdChleHBvcnRzLk5VTSk7XG5leHBvcnRzLk1BUksgPSBbJy0nLCAnXycsICcuJywgJyEnLCAnficsICcqJywgJ1xcJycsICcoJywgJyknXTtcbmV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLkFMUEhBTlVNXG4gICAgLmNvbmNhdChleHBvcnRzLk1BUkspXG4gICAgLmNvbmNhdChbJyUnLCAnOycsICc6JywgJyYnLCAnPScsICcrJywgJyQnLCAnLCddKTtcbi8vIFRPRE8oaW5kdXRueSk6IHVzZSBSRkNcbmV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gW1xuICAgICchJywgJ1wiJywgJyQnLCAnJScsICcmJywgJ1xcJycsXG4gICAgJygnLCAnKScsICcqJywgJysnLCAnLCcsICctJywgJy4nLCAnLycsXG4gICAgJzonLCAnOycsICc8JywgJz0nLCAnPicsXG4gICAgJ0AnLCAnWycsICdcXFxcJywgJ10nLCAnXicsICdfJyxcbiAgICAnYCcsXG4gICAgJ3snLCAnfCcsICd9JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlVSTF9DSEFSID0gZXhwb3J0cy5TVFJJQ1RfVVJMX0NIQVJcbiAgICAuY29uY2F0KFsnXFx0JywgJ1xcZiddKTtcbi8vIEFsbCBjaGFyYWN0ZXJzIHdpdGggMHg4MCBiaXQgc2V0IHRvIDFcbmZvciAobGV0IGkgPSAweDgwOyBpIDw9IDB4ZmY7IGkrKykge1xuICAgIGV4cG9ydHMuVVJMX0NIQVIucHVzaChpKTtcbn1cbmV4cG9ydHMuSEVYID0gZXhwb3J0cy5OVU0uY29uY2F0KFsnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnXSk7XG4vKiBUb2tlbnMgYXMgZGVmaW5lZCBieSByZmMgMjYxNi4gQWxzbyBsb3dlcmNhc2VzIHRoZW0uXG4gKiAgICAgICAgdG9rZW4gICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuICogICAgIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqL1xuZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBbXG4gICAgJyEnLCAnIycsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcqJywgJysnLCAnLScsICcuJyxcbiAgICAnXicsICdfJywgJ2AnLFxuICAgICd8JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4uY29uY2F0KFsnICddKTtcbi8qXG4gKiBWZXJpZnkgdGhhdCBhIGNoYXIgaXMgYSB2YWxpZCB2aXNpYmxlIChwcmludGFibGUpIFVTLUFTQ0lJXG4gKiBjaGFyYWN0ZXIgb3IgJXg4MC1GRlxuICovXG5leHBvcnRzLkhFQURFUl9DSEFSUyA9IFsnXFx0J107XG5mb3IgKGxldCBpID0gMzI7IGkgPD0gMjU1OyBpKyspIHtcbiAgICBpZiAoaSAhPT0gMTI3KSB7XG4gICAgICAgIGV4cG9ydHMuSEVBREVSX0NIQVJTLnB1c2goaSk7XG4gICAgfVxufVxuLy8gJywnID0gXFx4NDRcbmV4cG9ydHMuQ09OTkVDVElPTl9UT0tFTl9DSEFSUyA9IGV4cG9ydHMuSEVBREVSX0NIQVJTLmZpbHRlcigoYykgPT4gYyAhPT0gNDQpO1xuZXhwb3J0cy5NQUpPUiA9IGV4cG9ydHMuTlVNX01BUDtcbmV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SO1xudmFyIEhFQURFUl9TVEFURTtcbihmdW5jdGlvbiAoSEVBREVSX1NUQVRFKSB7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkdFTkVSQUxcIl0gPSAwXSA9IFwiR0VORVJBTFwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05cIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OVEVOVF9MRU5HVEhcIl0gPSAyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSAzXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVVBHUkFERVwiXSA9IDRdID0gXCJVUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDVdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDZdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fVVBHUkFERVwiXSA9IDddID0gXCJDT05ORUNUSU9OX1VQR1JBREVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiXSA9IDhdID0gXCJUUkFOU0ZFUl9FTkNPRElOR19DSFVOS0VEXCI7XG59KShIRUFERVJfU1RBVEUgPSBleHBvcnRzLkhFQURFUl9TVEFURSB8fCAoZXhwb3J0cy5IRUFERVJfU1RBVEUgPSB7fSkpO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSB7XG4gICAgJ2Nvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAnY29udGVudC1sZW5ndGgnOiBIRUFERVJfU1RBVEUuQ09OVEVOVF9MRU5HVEgsXG4gICAgJ3Byb3h5LWNvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAndHJhbnNmZXItZW5jb2RpbmcnOiBIRUFERVJfU1RBVEUuVFJBTlNGRVJfRU5DT0RJTkcsXG4gICAgJ3VwZ3JhZGUnOiBIRUFERVJfU1RBVEUuVVBHUkFERSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGlseSBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgZm9ybWF0IGZvciBzdWNoIGJvZHkgYW5kIGxlYXZlIGl0IHRvXG4gICAgICAgIHNlcnZlcnMgYW5kIGJyb3dzZXJzIGltcGxlbWVudG9ycywgd2UgaWdub3JlIHRoZSBib2R5IGFzIHRoZXJlIGlzIG5vIHNwZWNpZmllZCB3YXkgdG8gZXZlbnR1YWxseSBwYXJzZSBpdC5cbiAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSB0cmFpbGVycyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgaW4gY2FzZSBvZiByZWRpcmVjdGlvbnNcbiAgICAgICAgYW5kIG5laXRoZXIgYXJlIHVzZWZ1bCBpZiBwcmVzZW50LlxuXG4gICAgICAgIFNlZSBjb21tZW50IG9uIG9uRGF0YSBtZXRob2QgYWJvdmUgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zLlxuICAgICAgKi9cblxuICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYXRpb24gKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHtcbiAgaWYgKHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzLmluZGV4T2Yoc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUhlYWRlciAoaGVhZGVyLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGlmIChoZWFkZXIubGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikgPT09ICdob3N0J1xuICB9XG4gIGlmIChyZW1vdmVDb250ZW50ICYmIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikuc3RhcnRzV2l0aCgnY29udGVudC0nKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHVua25vd25PcmlnaW4gJiYgKGhlYWRlci5sZW5ndGggPT09IDEzIHx8IGhlYWRlci5sZW5ndGggPT09IDYgfHwgaGVhZGVyLmxlbmd0aCA9PT0gMTkpKSB7XG4gICAgY29uc3QgbmFtZSA9IHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcilcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2F1dGhvcml6YXRpb24nIHx8IG5hbWUgPT09ICdjb29raWUnIHx8IG5hbWUgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJ1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuZnVuY3Rpb24gY2xlYW5SZXF1ZXN0SGVhZGVycyAoaGVhZGVycywgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBjb25zdCByZXQgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGtleSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChoZWFkZXJzID09IG51bGwsICdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RIYW5kbGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgKHsgbWF4UmVkaXJlY3Rpb25zOiBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBJbnRlcmNlcHQgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgb3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gU3RvcCBzdWIgZGlzcGF0Y2hlciBmcm9tIGFsc28gcmVkaXJlY3RpbmcuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3NMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzFrQUlBQkJHR3BDQURjREFDQUFRZ0EzQXdBZ0FFRTRha0lBTndNQUlBQkJNR3BDQURjREFDQUFRU2hxUWdBM0F3QWdBRUVnYWtJQU53TUFJQUJCRUdwQ0FEY0RBQ0FBUVFocVFnQTNBd0FnQUVIZEFUWUNIRUVBQzNzQkFYOENRQ0FBS0FJTUlnTU5BQUpBSUFBb0FnUkZEUUFnQUNBQk5nSUVDd0pBSUFBZ0FTQUNFTVNBZ0lBQUlnTU5BQ0FBS0FJTUR3c2dBQ0FETmdJY1FRQWhBeUFBS0FJRUlnRkZEUUFnQUNBQklBSWdBQ2dDQ0JHQmdJQ0FBQUFpQVVVTkFDQUFJQUkyQWhRZ0FDQUJOZ0lNSUFFaEF3c2dBd3ZrOHdFRERuOERmZ1IvSTRDQWdJQUFRUkJySWdNa2dJQ0FnQUFnQVNFRUlBRWhCU0FCSVFZZ0FTRUhJQUVoQ0NBQklRa2dBU0VLSUFFaEN5QUJJUXdnQVNFTklBRWhEaUFCSVE4Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NIQ0lRUVg5cUR0MEIyZ0VCMlFFQ0F3UUZCZ2NJQ1FvTERBME8yQUVQRU5jQkVSTFdBUk1VRlJZWEdCa2FHK0FCM3dFY0hSN1ZBUjhnSVNJakpDWFVBU1luS0NrcUt5elRBZElCTFM3UkFkQUJMekF4TWpNME5UWTNPRGs2T3p3OVBqOUFRVUpEUkVWRzJ3RkhTRWxLendIT0FVdk5BVXpNQVUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNEFCZ1FHQ0FZTUJoQUdGQVlZQmh3R0lBWWtCaWdHTEFZd0JqUUdPQVk4QmtBR1JBWklCa3dHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdITEFjb0J1QUhKQWJrQnlBRzZBYnNCdkFHOUFiNEJ2d0hBQWNFQndnSERBY1FCeFFIR0FRRGNBUXRCQUNFUURNWUJDMEVPSVJBTXhRRUxRUTBoRUF6RUFRdEJEeUVRRE1NQkMwRVFJUkFNd2dFTFFSTWhFQXpCQVF0QkZDRVFETUFCQzBFVklSQU12d0VMUVJZaEVBeStBUXRCRnlFUURMMEJDMEVZSVJBTXZBRUxRUmtoRUF5N0FRdEJHaUVRRExvQkMwRWJJUkFNdVFFTFFSd2hFQXk0QVF0QkNDRVFETGNCQzBFZElSQU10Z0VMUVNBaEVBeTFBUXRCSHlFUURMUUJDMEVISVJBTXN3RUxRU0VoRUF5eUFRdEJJaUVRRExFQkMwRWVJUkFNc0FFTFFTTWhFQXl2QVF0QkVpRVFESzRCQzBFUklSQU1yUUVMUVNRaEVBeXNBUXRCSlNFUURLc0JDMEVtSVJBTXFnRUxRU2NoRUF5cEFRdEJ3d0VoRUF5b0FRdEJLU0VRREtjQkMwRXJJUkFNcGdFTFFTd2hFQXlsQVF0QkxTRVFES1FCQzBFdUlSQU1vd0VMUVM4aEVBeWlBUXRCeEFFaEVBeWhBUXRCTUNFUURLQUJDMEUwSVJBTW53RUxRUXdoRUF5ZUFRdEJNU0VRREowQkMwRXlJUkFNbkFFTFFUTWhFQXliQVF0Qk9TRVFESm9CQzBFMUlSQU1tUUVMUWNVQklSQU1tQUVMUVFzaEVBeVhBUXRCT2lFUURKWUJDMEUySVJBTWxRRUxRUW9oRUF5VUFRdEJOeUVRREpNQkMwRTRJUkFNa2dFTFFUd2hFQXlSQVF0Qk95RVFESkFCQzBFOUlSQU1qd0VMUVFraEVBeU9BUXRCS0NFUURJMEJDMEUrSVJBTWpBRUxRVDhoRUF5TEFRdEJ3QUFoRUF5S0FRdEJ3UUFoRUF5SkFRdEJ3Z0FoRUF5SUFRdEJ3d0FoRUF5SEFRdEJ4QUFoRUF5R0FRdEJ4UUFoRUF5RkFRdEJ4Z0FoRUF5RUFRdEJLaUVRRElNQkMwSEhBQ0VRRElJQkMwSElBQ0VRRElFQkMwSEpBQ0VRRElBQkMwSEtBQ0VRREg4TFFjc0FJUkFNZmd0QnpRQWhFQXg5QzBITUFDRVFESHdMUWM0QUlSQU1ld3RCendBaEVBeDZDMEhRQUNFUURIa0xRZEVBSVJBTWVBdEIwZ0FoRUF4M0MwSFRBQ0VRREhZTFFkUUFJUkFNZFF0QjFnQWhFQXgwQzBIVkFDRVFESE1MUVFZaEVBeHlDMEhYQUNFUURIRUxRUVVoRUF4d0MwSFlBQ0VRREc4TFFRUWhFQXh1QzBIWkFDRVFERzBMUWRvQUlSQU1iQXRCMndBaEVBeHJDMEhjQUNFUURHb0xRUU1oRUF4cEMwSGRBQ0VRREdnTFFkNEFJUkFNWnd0QjN3QWhFQXhtQzBIaEFDRVFER1VMUWVBQUlSQU1aQXRCNGdBaEVBeGpDMEhqQUNFUURHSUxRUUloRUF4aEMwSGtBQ0VRREdBTFFlVUFJUkFNWHd0QjVnQWhFQXhlQzBIbkFDRVFERjBMUWVnQUlSQU1YQXRCNlFBaEVBeGJDMEhxQUNFUURGb0xRZXNBSVJBTVdRdEI3QUFoRUF4WUMwSHRBQ0VRREZjTFFlNEFJUkFNVmd0Qjd3QWhFQXhWQzBId0FDRVFERlFMUWZFQUlSQU1Vd3RCOGdBaEVBeFNDMEh6QUNFUURGRUxRZlFBSVJBTVVBdEI5UUFoRUF4UEMwSDJBQ0VRREU0TFFmY0FJUkFNVFF0QitBQWhFQXhNQzBINUFDRVFERXNMUWZvQUlSQU1TZ3RCK3dBaEVBeEpDMEg4QUNFUURFZ0xRZjBBSVJBTVJ3dEIvZ0FoRUF4R0MwSC9BQ0VRREVVTFFZQUJJUkFNUkF0QmdRRWhFQXhEQzBHQ0FTRVFERUlMUVlNQklSQU1RUXRCaEFFaEVBeEFDMEdGQVNFUUREOExRWVlCSVJBTVBndEJod0VoRUF3OUMwR0lBU0VRRER3TFFZa0JJUkFNT3d0QmlnRWhFQXc2QzBHTEFTRVFERGtMUVl3QklSQU1PQXRCalFFaEVBdzNDMEdPQVNFUUREWUxRWThCSVJBTU5RdEJrQUVoRUF3MEMwR1JBU0VRRERNTFFaSUJJUkFNTWd0Qmt3RWhFQXd4QzBHVUFTRVFEREFMUVpVQklSQU1Md3RCbGdFaEVBd3VDMEdYQVNFUURDMExRWmdCSVJBTUxBdEJtUUVoRUF3ckMwR2FBU0VRRENvTFFac0JJUkFNS1F0Qm5BRWhFQXdvQzBHZEFTRVFEQ2NMUVo0QklSQU1KZ3RCbndFaEVBd2xDMEdnQVNFUURDUUxRYUVCSVJBTUl3dEJvZ0VoRUF3aUMwR2pBU0VRRENFTFFhUUJJUkFNSUF0QnBRRWhFQXdmQzBHbUFTRVFEQjRMUWFjQklSQU1IUXRCcUFFaEVBd2NDMEdwQVNFUURCc0xRYW9CSVJBTUdndEJxd0VoRUF3WkMwR3NBU0VRREJnTFFhMEJJUkFNRnd0QnJnRWhFQXdXQzBFQklSQU1GUXRCcndFaEVBd1VDMEd3QVNFUURCTUxRYkVCSVJBTUVndEJzd0VoRUF3UkMwR3lBU0VRREJBTFFiUUJJUkFNRHd0QnRRRWhFQXdPQzBHMkFTRVFEQTBMUWJjQklSQU1EQXRCdUFFaEVBd0xDMEc1QVNFUURBb0xRYm9CSVJBTUNRdEJ1d0VoRUF3SUMwSEdBU0VRREFjTFFid0JJUkFNQmd0QnZRRWhFQXdGQzBHK0FTRVFEQVFMUWI4QklSQU1Bd3RCd0FFaEVBd0NDMEhDQVNFUURBRUxRY0VCSVJBTEEwQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRRHNjQkFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2VIeUFoSXlVb1AwQkJSRVZHUjBoSlNrdE1UVTlRVVZKVDNnTlhXVnRjWFdCaVpXWm5hR2xxYTJ4dGIzQnhjbk4wZFhaM2VIbDZlM3g5Zm9BQmdnR0ZBWVlCaHdHSkFZc0JqQUdOQVk0Qmp3R1FBWkVCbEFHVkFaWUJsd0dZQVprQm1nR2JBWndCblFHZUFaOEJvQUdoQWFJQm93R2tBYVVCcGdHbkFhZ0JxUUdxQWFzQnJBR3RBYTRCcndHd0FiRUJzZ0d6QWJRQnRRRzJBYmNCdUFHNUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQnh3SElBY2tCeWdITEFjd0J6UUhPQWM4QjBBSFJBZElCMHdIVUFkVUIxZ0hYQWRnQjJRSGFBZHNCM0FIZEFkNEI0QUhoQWVJQjR3SGtBZVVCNWdIbkFlZ0I2UUhxQWVzQjdBSHRBZTRCN3dId0FmRUI4Z0h6QVprQ3BBS3dBdjRDL2dJTElBRWlCQ0FDUnczekFVSGRBU0VRRFA4REN5QUJJaEFnQWtjTjNRRkJ3d0VoRUF6K0F3c2dBU0lCSUFKSERaQUJRZmNBSVJBTS9RTUxJQUVpQVNBQ1J3MkdBVUh2QUNFUURQd0RDeUFCSWdFZ0FrY05mMEhxQUNFUURQc0RDeUFCSWdFZ0FrY05lMEhvQUNFUURQb0RDeUFCSWdFZ0FrY05lRUhtQUNFUURQa0RDeUFCSWdFZ0FrY05Ha0VZSVJBTStBTUxJQUVpQVNBQ1J3MFVRUkloRUF6M0F3c2dBU0lCSUFKSERWbEJ4UUFoRUF6MkF3c2dBU0lCSUFKSERVcEJQeUVRRFBVREN5QUJJZ0VnQWtjTlNFRThJUkFNOUFNTElBRWlBU0FDUncxQlFURWhFQXp6QXdzZ0FDMEFMa0VCUmczckF3eUhBZ3NnQUNBQklnRWdBaERBZ0lDQUFFRUJSdzNtQVNBQVFnQTNBeUFNNXdFTElBQWdBU0lCSUFJUXRJQ0FnQUFpRUEzbkFTQUJJUUVNOVFJTEFrQWdBU0lCSUFKSERRQkJCaUVRRFBBREN5QUFJQUZCQVdvaUFTQUNFTHVBZ0lBQUloQU42QUVnQVNFQkRERUxJQUJDQURjRElFRVNJUkFNMVFNTElBRWlFQ0FDUncwclFSMGhFQXp0QXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFGQkVDRVFETlFEQzBFSElSQU03QU1MSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU41UUZCQ0NFUURPc0RDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRVVJUkFNMGdNTFFRa2hFQXpxQXdzZ0FTRUJJQUFwQXlCUURlUUJJQUVoQVF6eUFnc0NRQ0FCSWdFZ0FrY05BRUVMSVJBTTZRTUxJQUFnQVVFQmFpSUJJQUlRdG9DQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNtQVNBQklRRU1EUXNnQUNBQklnRWdBaEM2Z0lDQUFDSVFEZWNCSUFFaEFRendBZ3NDUUNBQklnRWdBa2NOQUVFUElSQU01UU1MSUFFdEFBQWlFRUU3UmcwSUlCQkJEVWNONkFFZ0FVRUJhaUVCRE84Q0N5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZBRWdBU0VCRFBJQ0N3TkFBa0FnQVMwQUFFSHd0WUNBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa2NONndFZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0FVRUJhaUlCRUxtQWdJQUFJaEFONmdFZ0FTRUJEUFFDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJFaUVRRE9JREN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZRRWdBU0VCREFvTElBRWlBU0FDUncwR1FSc2hFQXpnQXdzQ1FDQUJJZ0VnQWtjTkFFRVdJUkFNNEFNTElBQkJpb0NBZ0FBMkFnZ2dBQ0FCTmdJRUlBQWdBU0FDRUxpQWdJQUFJaEFONmdFZ0FTRUJRU0FoRUF6R0F3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUh3dDRDQUFHb3RBQUFpRUVFQ1JnMEFBa0FnRUVGL2FnNEU1UUhzQVFEckFld0JDeUFCUVFGcUlRRkJDQ0VRRE1nREN5QUJRUUZxSWdFZ0FrY05BQXRCRlNFUUROOERDMEVWSVJBTTNnTUxBMEFDUUNBQkxRQUFRZkM1Z0lBQWFpMEFBQ0lRUVFKR0RRQWdFRUYvYWc0RTNnSHNBZUFCNndIc0FRc2dBVUVCYWlJQklBSkhEUUFMUVJnaEVBemRBd3NDUUNBQklnRWdBa1lOQUNBQVFZdUFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJCeUVRRE1RREMwRVpJUkFNM0FNTElBRkJBV29oQVF3Q0N3SkFJQUVpRkNBQ1J3MEFRUm9oRUF6YkF3c2dGQ0VCQWtBZ0ZDMEFBRUZ6YWc0VTNRTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnSUE3Z0lMUVFBaEVDQUFRUUEyQWh3Z0FFR3ZpNENBQURZQ0VDQUFRUUkyQWd3Z0FDQVVRUUZxTmdJVUROb0RDd0pBSUFFdEFBQWlFRUU3UmcwQUlCQkJEVWNONkFFZ0FVRUJhaUVCRE9VQ0N5QUJRUUZxSVFFTFFTSWhFQXkvQXdzQ1FDQUJJaEFnQWtjTkFFRWNJUkFNMkFNTFFnQWhFU0FRSVFFZ0VDMEFBRUZRYWc0MzV3SG1BUUVDQXdRRkJnY0lBQUFBQUFBQUFBa0tDd3dORGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHhBUkVoTVVBQXRCSGlFUURMMERDMElDSVJFTTVRRUxRZ01oRVF6a0FRdENCQ0VSRE9NQkMwSUZJUkVNNGdFTFFnWWhFUXpoQVF0Q0J5RVJET0FCQzBJSUlSRU0zd0VMUWdraEVRemVBUXRDQ2lFUkROMEJDMElMSVJFTTNBRUxRZ3doRVF6YkFRdENEU0VSRE5vQkMwSU9JUkVNMlFFTFFnOGhFUXpZQVF0Q0NpRVJETmNCQzBJTElSRU0xZ0VMUWd3aEVRelZBUXRDRFNFUkROUUJDMElPSVJFTTB3RUxRZzhoRVF6U0FRdENBQ0VSQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFMUUFBUVZCcURqZmxBZVFCQUFFQ0F3UUZCZ2ZtQWVZQjVnSG1BZVlCNWdIbUFRZ0pDZ3NNRGVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0VPRHhBUkVoUG1BUXRDQWlFUkRPUUJDMElESVJFTTR3RUxRZ1FoRVF6aUFRdENCU0VSRE9FQkMwSUdJUkVNNEFFTFFnY2hFUXpmQVF0Q0NDRVJETjRCQzBJSklSRU0zUUVMUWdvaEVRemNBUXRDQ3lFUkROc0JDMElNSVJFTTJnRUxRZzBoRVF6WkFRdENEaUVSRE5nQkMwSVBJUkVNMXdFTFFnb2hFUXpXQVF0Q0N5RVJETlVCQzBJTUlSRU0xQUVMUWcwaEVRelRBUXRDRGlFUkROSUJDMElQSVJFTTBRRUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjBnRkJIeUVRRE1BREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFa0lSQU1wd01MUVNBaEVBeS9Bd3NnQUNBQkloQWdBaEMrZ0lDQUFFRi9hZzRGdGdFQXhRSUIwUUhTQVF0QkVTRVFES1FEQ3lBQVFRRTZBQzhnRUNFQkRMc0RDeUFCSWdFZ0FrY04wZ0ZCSkNFUURMc0RDeUFCSWcwZ0FrY05Ia0hHQUNFUURMb0RDeUFBSUFFaUFTQUNFTEtBZ0lBQUloQU4xQUVnQVNFQkRMVUJDeUFCSWhBZ0FrY05Ka0hRQUNFUURMZ0RDd0pBSUFFaUFTQUNSdzBBUVNnaEVBeTRBd3NnQUVFQU5nSUVJQUJCaklDQWdBQTJBZ2dnQUNBQklBRVFzWUNBZ0FBaUVBM1RBU0FCSVFFTTJBRUxBa0FnQVNJUUlBSkhEUUJCS1NFUURMY0RDeUFRTFFBQUlnRkJJRVlORkNBQlFRbEhEZE1CSUJCQkFXb2hBUXdWQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3WEMwRXFJUkFNdFFNTEFrQWdBU0lRSUFKSERRQkJLeUVRRExVREN3SkFJQkF0QUFBaUFVRUpSZzBBSUFGQklFY04xUUVMSUFBdEFDeEJDRVlOMHdFZ0VDRUJESkVEQ3dKQUlBRWlBU0FDUncwQVFTd2hFQXkwQXdzZ0FTMEFBRUVLUnczVkFTQUJRUUZxSVFFTXlRSUxJQUVpRGlBQ1J3M1ZBVUV2SVJBTXNnTUxBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFJQkJCZG1vT0JBRGNBZHdCQU5vQkN5QUJJUUVNNEFFTElBRkJBV29pQVNBQ1J3MEFDMEV4SVJBTXNRTUxRVEloRUNBQkloUWdBa1lOc0FNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRURhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZDN2dJQUFhaTBBQUVjTkFRSkFJQUZCQTBjTkFFRUdJUUVNbGdNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMRURDeUFBUVFBMkFnQWdGQ0VCRE5rQkMwRXpJUkFnQVNJVUlBSkdEYThESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkNHb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUgwdTRDQUFHb3RBQUJIRFFFQ1FDQUJRUWhIRFFCQkJTRUJESlVEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5d0F3c2dBRUVBTmdJQUlCUWhBUXpZQVF0Qk5DRVFJQUVpRkNBQ1JnMnVBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFWcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzBCQWtBZ0FVRUZSdzBBUVFjaEFReVVBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNcndNTElBQkJBRFlDQUNBVUlRRU0xd0VMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMNkFnQUJxTFFBQUloQkJBVVlOQUNBUVFRSkdEUW9nQVNFQkROMEJDeUFCUVFGcUlnRWdBa2NOQUF0Qk1DRVFESzREQzBFd0lSQU1yUU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQmRtb09CTmtCMmdIYUFka0IyZ0VMSUFGQkFXb2lBU0FDUncwQUMwRTRJUkFNclFNTFFUZ2hFQXlzQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQkNVY05Bd3NnQVVFQmFpSUJJQUpIRFFBTFFUd2hFQXlyQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FDQVFRWFpxRGdUYUFRRUIyZ0VBQ3lBUVFTeEdEZHNCQ3lBQklRRU1CQXNnQVVFQmFpSUJJQUpIRFFBTFFUOGhFQXlxQXdzZ0FTRUJETnNCQzBIQUFDRVFJQUVpRkNBQ1JnMm9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFacUlSY0NRQU5BSUJRdEFBQkJJSElnQVVHQXdJQ0FBR290QUFCSERRRWdBVUVHUmcyT0F5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeXBBd3NnQUVFQU5nSUFJQlFoQVF0Qk5pRVFESTREQ3dKQUlBRWlEeUFDUncwQVFjRUFJUkFNcHdNTElBQkJqSUNBZ0FBMkFnZ2dBQ0FQTmdJRUlBOGhBU0FBTFFBc1FYOXFEZ1ROQWRVQjF3SFpBWWNEQ3lBQlFRRnFJUUVNekFFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnY2lBUUlCQkJ2MzlxUWY4QmNVRWFTUnRCL3dGeEloQkJDVVlOQUNBUVFTQkdEUUFDUUFKQUFrQUNRQ0FRUVoxL2FnNFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVJBTWtRTUxJQUZCQVdvaEFVRXlJUkFNa0FNTElBRkJBV29oQVVFeklSQU1qd01MSUFFaEFRelFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUVWhFQXlsQXd0Qk5TRVFES1FEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFZQzhnSUFBYWkwQUFFRUJSZzBBSUFFaEFRelRBUXNnQVVFQmFpSUJJQUpIRFFBTFFUMGhFQXlrQXd0QlBTRVFES01EQ3lBQUlBRWlBU0FDRUxDQWdJQUFJaEFOMWdFZ0FTRUJEQUVMSUJCQkFXb2hBUXRCUENFUURJY0RDd0pBSUFFaUFTQUNSdzBBUWNJQUlSQU1vQU1MQWtBRFFBSkFJQUV0QUFCQmQyb09HQUFDL2dMK0FvUUQvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NENBUDRDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ3Z0FoRUF5Z0F3c2dBVUVCYWlFQklBQXRBQzFCQVhGRkRiMEJJQUVoQVF0QkxDRVFESVVEQ3lBQklnRWdBa2NOMHdGQnhBQWhFQXlkQXdzRFFBSkFJQUV0QUFCQmtNQ0FnQUJxTFFBQVFRRkdEUUFnQVNFQkRMY0NDeUFCUVFGcUlnRWdBa2NOQUF0QnhRQWhFQXljQXdzZ0RTMEFBQ0lRUVNCR0RiTUJJQkJCT2tjTmdRTWdBQ2dDQkNFQklBQkJBRFlDQkNBQUlBRWdEUkN2Z0lDQUFDSUJEZEFCSUExQkFXb2hBUXl6QWd0Qnh3QWhFQ0FCSWcwZ0FrWU5tZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFRmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1F3b0NBQUdvdEFBQkhEWUFESUFGQkJVWU45QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbWdNTFFjZ0FJUkFnQVNJTklBSkdEWmtESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkNXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJsc0tBZ0FCcUxRQUFSdzMvQWdKQUlBRkJDVWNOQUVFQ0lRRU05UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREprREN3SkFJQUVpRFNBQ1J3MEFRY2tBSVJBTW1RTUxBa0FDUUNBTkxRQUFJZ0ZCSUhJZ0FTQUJRYjkvYWtIL0FYRkJHa2tiUWY4QmNVR1NmMm9PQndDQUE0QURnQU9BQTRBREFZQURDeUFOUVFGcUlRRkJQaUVRRElBREN5QU5RUUZxSVFGQlB5RVFEUDhDQzBIS0FDRVFJQUVpRFNBQ1JnMlhBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFGcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhRENnSUFBYWkwQUFFY04vUUlnQVVFQlJnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlYQXd0Qnl3QWhFQ0FCSWcwZ0FrWU5sZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFT2FpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR2l3b0NBQUdvdEFBQkhEZndDSUFGQkRrWU44QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbGdNTFFjd0FJUkFnQVNJTklBSkdEWlVESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkQyb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJ3TUtBZ0FCcUxRQUFSdzM3QWdKQUlBRkJEMGNOQUVFRElRRU04UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpVREMwSE5BQ0VRSUFFaURTQUNSZzJVQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZERDZ0lBQWFpMEFBRWNOK2dJQ1FDQUJRUVZIRFFCQkJDRUJEUEFDQ3lBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5VUF3c0NRQ0FCSWcwZ0FrY05BRUhPQUNFUURKUURDd0pBQWtBQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVoxL2FnNFRBUDBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUFnSDlBdjBDL1FJQ0EvMENDeUFOUVFGcUlRRkJ3UUFoRUF6OUFnc2dEVUVCYWlFQlFjSUFJUkFNL0FJTElBMUJBV29oQVVIREFDRVFEUHNDQ3lBTlFRRnFJUUZCeEFBaEVBejZBZ3NDUUNBQklnRWdBa1lOQUNBQVFZMkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJ4UUFoRUF6NkFndEJ6d0FoRUF5U0F3c2dFQ0VCQWtBQ1FDQVFMUUFBUVhacURnUUJxQUtvQWdDb0Fnc2dFRUVCYWlFQkMwRW5JUkFNK0FJTEFrQWdBU0lCSUFKSERRQkIwUUFoRUF5UkF3c0NRQ0FCTFFBQVFTQkdEUUFnQVNFQkRJMEJDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU54d0VnQVNFQkRJd0JDeUFCSWhjZ0FrY055QUZCMGdBaEVBeVBBd3RCMHdBaEVDQUJJaFFnQWtZTmpnTWdBaUFVYXlBQUtBSUFJZ0ZxSVJZZ0ZDQUJhMEVCYWlFWEEwQWdGQzBBQUNBQlFkYkNnSUFBYWkwQUFFY056QUVnQVVFQlJnM0hBU0FCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlPQXdzQ1FDQUJJZ0VnQWtjTkFFSFZBQ0VRREk0REN5QUJMUUFBUVFwSERjd0JJQUZCQVdvaEFRekhBUXNDUUNBQklnRWdBa2NOQUVIV0FDRVFESTBEQ3dKQUFrQWdBUzBBQUVGMmFnNEVBTTBCelFFQnpRRUxJQUZCQVdvaEFRekhBUXNnQVVFQmFpRUJRY29BSVJBTTh3SUxJQUFnQVNJQklBSVFyb0NBZ0FBaUVBM0xBU0FCSVFGQnpRQWhFQXp5QWdzZ0FDMEFLVUVpUmcyRkF3eW1BZ3NDUUNBQklnRWdBa2NOQUVIYkFDRVFESW9EQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQVMwQUFFRlFhZzRLMUFIVEFRQUJBZ01FQlFZSTFRRUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTXpBRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZnekxBUXNDUUNBQklnRWdBa2NOQUVIZEFDRVFESWtEQ3lBQkxRQUFRUzVIRGN3QklBRkJBV29oQVF5bUFnc2dBU0lCSUFKSERjd0JRZDhBSVJBTWh3TUxBa0FnQVNJQklBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFkQUFJUkFNN2dJTFFlQUFJUkFNaGdNTFFlRUFJUkFnQVNJQklBSkdEWVVESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhpd29DQUFHb3RBQUJIRGMwQklCUkJBMFlOekFFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhRTUxRZUlBSVJBZ0FTSUJJQUpHRFlRRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBbW9oRndOQUlBRXRBQUFnRkVIbXdvQ0FBR290QUFCSERjd0JJQlJCQWtZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oQU1MUWVNQUlSQWdBU0lCSUFKR0RZTURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSHB3b0NBQUdvdEFBQkhEY3NCSUJSQkEwWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNZ3dNTEFrQWdBU0lCSUFKSERRQkI1UUFoRUF5REF3c2dBQ0FCUVFGcUlnRWdBaENvZ0lDQUFDSVFEYzBCSUFFaEFVSFdBQ0VRRE9rQ0N3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFBa0FDUUNBUVFiaC9hZzRMQUFIUEFjOEJ6d0hQQWM4Qnp3SFBBYzhCQXM4QkN5QUJRUUZxSVFGQjBnQWhFQXp0QWdzZ0FVRUJhaUVCUWRNQUlSQU03QUlMSUFGQkFXb2hBVUhVQUNFUURPc0NDeUFCUVFGcUlnRWdBa2NOQUF0QjVBQWhFQXlDQXd0QjVBQWhFQXlCQXdzRFFBSkFJQUV0QUFCQjhNS0FnQUJxTFFBQUloQkJBVVlOQUNBUVFYNXFEZ1BQQWRBQjBRSFNBUXNnQVVFQmFpSUJJQUpIRFFBTFFlWUFJUkFNZ0FNTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZWNBSVJBTS93SUxBMEFDUUNBQkxRQUFRZkRFZ0lBQWFpMEFBQ0lRUVFGR0RRQUNRQ0FRUVg1cURnVFNBZE1CMUFFQTFRRUxJQUVoQVVIWEFDRVFET2NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI2QUFoRUF6K0Fnc0NRQ0FCSWdFZ0FrY05BRUhwQUNFUURQNENDd0pBSUFFdEFBQWlFRUYyYWc0YXVnSFZBZFVCdkFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIS0FkVUIxUUVBMHdFTElBRkJBV29oQVF0QkJpRVFET01DQ3dOQUFrQWdBUzBBQUVId3hvQ0FBR290QUFCQkFVWU5BQ0FCSVFFTW5nSUxJQUZCQVdvaUFTQUNSdzBBQzBIcUFDRVFEUHNDQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3REMwSHJBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1J3MEFRZXdBSVJBTStnSUxJQUZCQVdvaEFRd0JDd0pBSUFFaUFTQUNSdzBBUWUwQUlSQU0rUUlMSUFGQkFXb2hBUXRCQkNFUURONENDd0pBSUFFaUZDQUNSdzBBUWU0QUlSQU05d0lMSUJRaEFRSkFBa0FDUUNBVUxRQUFRZkRJZ0lBQWFpMEFBRUYvYWc0SDFBSFZBZFlCQUp3Q0FRTFhBUXNnRkVFQmFpRUJEQW9MSUJSQkFXb2hBUXpOQVF0QkFDRVFJQUJCQURZQ0hDQUFRWnVTZ0lBQU5nSVFJQUJCQnpZQ0RDQUFJQlJCQVdvMkFoUU05Z0lMQWtBRFFBSkFJQUV0QUFCQjhNaUFnQUJxTFFBQUloQkJCRVlOQUFKQUFrQWdFRUYvYWc0SDBnSFRBZFFCMlFFQUJBSFpBUXNnQVNFQlFkb0FJUkFNNEFJTElBRkJBV29oQVVIY0FDRVFETjhDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI3d0FoRUF6MkFnc2dBVUVCYWlFQkRNc0JDd0pBSUFFaUZDQUNSdzBBUWZBQUlSQU05UUlMSUJRdEFBQkJMMGNOMUFFZ0ZFRUJhaUVCREFZTEFrQWdBU0lVSUFKSERRQkI4UUFoRUF6MEFnc0NRQ0FVTFFBQUlnRkJMMGNOQUNBVVFRRnFJUUZCM1FBaEVBemJBZ3NnQVVGMmFpSUVRUlpMRGRNQlFRRWdCSFJCaVlDQUFuRkZEZE1CRE1vQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVSGVBQ0VRRE5vQ0MwSHlBQ0VRRFBJQ0N3SkFJQUVpRkNBQ1J3MEFRZlFBSVJBTThnSUxJQlFoQVFKQUlCUXRBQUJCOE15QWdBQnFMUUFBUVg5cURnUEpBcFFDQU5RQkMwSGhBQ0VRRE5nQ0N3SkFJQUVpRkNBQ1JnMEFBMEFDUUNBVUxRQUFRZkRLZ0lBQWFpMEFBQ0lCUVFOR0RRQUNRQ0FCUVg5cURnTExBZ0RWQVFzZ0ZDRUJRZDhBSVJBTTJnSUxJQlJCQVdvaUZDQUNSdzBBQzBIekFDRVFEUEVDQzBIekFDRVFEUEFDQ3dKQUlBRWlBU0FDUmcwQUlBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhnQUNFUUROY0NDMEgxQUNFUURPOENDd0pBSUFFaUFTQUNSdzBBUWZZQUlSQU03d0lMSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFRdEJBeUVRRE5RQ0N3TkFJQUV0QUFCQklFY053d0lnQVVFQmFpSUJJQUpIRFFBTFFmY0FJUkFNN0FJTEFrQWdBU0lCSUFKSERRQkIrQUFoRUF6c0Fnc2dBUzBBQUVFZ1J3M09BU0FCUVFGcUlRRU03d0VMSUFBZ0FTSUJJQUlRcklDQWdBQWlFQTNPQVNBQklRRU1qZ0lMQWtBZ0FTSUVJQUpIRFFCQitnQWhFQXpxQWdzZ0JDMEFBRUhNQUVjTjBRRWdCRUVCYWlFQlFSTWhFQXpQQVFzQ1FDQUJJZ1FnQWtjTkFFSDdBQ0VRRE9rQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBRFFDQUVMUUFBSUFGQjhNNkFnQUJxTFFBQVJ3M1FBU0FCUVFWR0RjNEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZnNBSVJBTTZBSUxBa0FnQVNJRUlBSkhEUUJCL0FBaEVBem9BZ3NDUUFKQUlBUXRBQUJCdlg5cURnd0EwUUhSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUVCMFFFTElBUkJBV29oQVVIbUFDRVFETThDQ3lBRVFRRnFJUUZCNXdBaEVBek9BZ3NDUUNBQklnUWdBa2NOQUVIOUFDRVFET2NDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERjOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSDlBQ0VRRE9jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJBaEVBek1BUXNDUUNBQklnUWdBa2NOQUVIK0FDRVFET1lDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIMnpvQ0FBR290QUFCSERjNEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSCtBQ0VRRE9ZQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJZaEVBekxBUXNDUUNBQklnUWdBa2NOQUVIL0FDRVFET1VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVIOHpvQ0FBR290QUFCSERjMEJJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSC9BQ0VRRE9VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFVaEVBektBUXNDUUNBQklnUWdBa2NOQUVHQUFTRVFET1FDQ3lBRUxRQUFRZGtBUnczTEFTQUVRUUZxSVFGQkNDRVFETWtCQ3dKQUlBRWlCQ0FDUncwQVFZRUJJUkFNNHdJTEFrQUNRQ0FFTFFBQVFiSi9hZzREQU13QkFjd0JDeUFFUVFGcUlRRkI2d0FoRUF6S0Fnc2dCRUVCYWlFQlFld0FJUkFNeVFJTEFrQWdBU0lFSUFKSERRQkJnZ0VoRUF6aUFnc0NRQUpBSUFRdEFBQkJ1SDlxRGdnQXl3SExBY3NCeXdITEFjc0JBY3NCQ3lBRVFRRnFJUUZCNmdBaEVBekpBZ3NnQkVFQmFpRUJRZTBBSVJBTXlBSUxBa0FnQVNJRUlBSkhEUUJCZ3dFaEVBemhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSQWdCQ0FCYTBFQ2FpRVVBa0FEUUNBRUxRQUFJQUZCZ00rQWdBQnFMUUFBUnczSkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQkEyQWdCQmd3RWhFQXpoQWd0QkFDRVFJQUJCQURZQ0FDQVVRUUZxSVFFTXhnRUxBa0FnQVNJRUlBSkhEUUJCaEFFaEVBemdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCZzgrQWdBQnFMUUFBUnczSUFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmhBRWhFQXpnQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVqSVJBTXhRRUxBa0FnQVNJRUlBSkhEUUJCaFFFaEVBemZBZ3NDUUFKQUlBUXRBQUJCdEg5cURnZ0F5QUhJQWNnQnlBSElBY2dCQWNnQkN5QUVRUUZxSVFGQjd3QWhFQXpHQWdzZ0JFRUJhaUVCUWZBQUlSQU14UUlMQWtBZ0FTSUVJQUpIRFFCQmhnRWhFQXplQWdzZ0JDMEFBRUhGQUVjTnhRRWdCRUVCYWlFQkRJTUNDd0pBSUFFaUJDQUNSdzBBUVljQklSQU0zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUVlqUGdJQUFhaTBBQUVjTnhRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZY0JJUkFNM1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCTFNFUURNSUJDd0pBSUFFaUJDQUNSdzBBUVlnQklSQU0zQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTnhBRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZZ0JJUkFNM0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCS1NFUURNRUJDd0pBSUFFaUFTQUNSdzBBUVlrQklSQU0yd0lMUVFFaEVDQUJMUUFBUWQ4QVJ3M0FBU0FCUVFGcUlRRU1nUUlMQWtBZ0FTSUVJQUpIRFFCQmlnRWhFQXphQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQTBBZ0JDMEFBQ0FCUVl6UGdJQUFhaTBBQUVjTndRRWdBVUVCUmcydkFpQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0tBU0VRRE5rQ0N3SkFJQUVpQkNBQ1J3MEFRWXNCSVJBTTJRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWTdQZ0lBQWFpMEFBRWNOd1FFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlzQklSQU0yUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBaUVRREw0QkN3SkFJQUVpQkNBQ1J3MEFRWXdCSVJBTTJBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOd0FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVl3QklSQU0yQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIeUVRREwwQkN3SkFJQUVpQkNBQ1J3MEFRWTBCSVJBTTF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOdndFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVkwQklSQU0xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDU0VRREx3QkN3SkFJQUVpQkNBQ1J3MEFRWTRCSVJBTTFnSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFMOEJ2d0cvQWI4QnZ3RUJ2d0VMSUFSQkFXb2hBVUg0QUNFUURMMENDeUFFUVFGcUlRRkIrUUFoRUF5OEFnc0NRQ0FCSWdRZ0FrY05BRUdQQVNFUUROVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdSejRDQUFHb3RBQUJIRGIwQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUEFTRVFETlVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmdoRUF5NkFRc0NRQ0FCSWdRZ0FrY05BRUdRQVNFUUROUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUdYejRDQUFHb3RBQUJIRGJ3QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUUFTRVFETlFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmNoRUF5NUFRc0NRQ0FCSWdRZ0FrY05BRUdSQVNFUUROTUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUdhejRDQUFHb3RBQUJIRGJzQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUkFTRVFETk1DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlVoRUF5NEFRc0NRQ0FCSWdRZ0FrY05BRUdTQVNFUUROSUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdoejRDQUFHb3RBQUJIRGJvQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHU0FTRVFETklDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjRoRUF5M0FRc0NRQ0FCSWdRZ0FrY05BRUdUQVNFUURORUNDeUFFTFFBQVFjd0FSdzI0QVNBRVFRRnFJUUZCQ2lFUURMWUJDd0pBSUFRZ0FrY05BRUdVQVNFUUROQUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0R3QzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFRRzVBUXNnQkVFQmFpRUJRZjRBSVJBTXR3SUxJQVJCQVdvaEFVSC9BQ0VRRExZQ0N3SkFJQVFnQWtjTkFFR1ZBU0VRRE04Q0N3SkFBa0FnQkMwQUFFRy9mMm9PQXdDNEFRRzRBUXNnQkVFQmFpRUJRZjBBSVJBTXRnSUxJQVJCQVdvaEJFR0FBU0VRRExVQ0N3SkFJQVFnQWtjTkFFR1dBU0VRRE00Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVR256NENBQUdvdEFBQkhEYllCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdXQVNFUURNNENDeUFBUVFBMkFnQWdFRUVCYWlFQlFRc2hFQXl6QVFzQ1FDQUVJQUpIRFFCQmx3RWhFQXpOQWdzQ1FBSkFBa0FDUUNBRUxRQUFRVk5xRGlNQXVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFRRzRBYmdCdUFHNEFiZ0JBcmdCdUFHNEFRTzRBUXNnQkVFQmFpRUJRZnNBSVJBTXRnSUxJQVJCQVdvaEFVSDhBQ0VRRExVQ0N5QUVRUUZxSVFSQmdRRWhFQXkwQWdzZ0JFRUJhaUVFUVlJQklSQU1zd0lMQWtBZ0JDQUNSdzBBUVpnQklSQU16QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWFuUGdJQUFhaTBBQUVjTnRBRWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaZ0JJUkFNekFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR1NFUURMRUJDd0pBSUFRZ0FrY05BRUdaQVNFUURNc0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUd1ejRDQUFHb3RBQUJIRGJNQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHWkFTRVFETXNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVloRUF5d0FRc0NRQ0FFSUFKSERRQkJtZ0VoRUF6S0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0TStBZ0FCcUxRQUFSdzJ5QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbWdFaEVBektBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWNJUkFNcndFTEFrQWdCQ0FDUncwQVFac0JJUkFNeVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiYlBnSUFBYWkwQUFFY05zUUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWnNCSVJBTXlRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkp5RVFESzRCQ3dKQUlBUWdBa2NOQUVHY0FTRVFETWdDQ3dKQUFrQWdCQzBBQUVHc2Yyb09BZ0FCc1FFTElBUkJBV29oQkVHR0FTRVFESzhDQ3lBRVFRRnFJUVJCaHdFaEVBeXVBZ3NDUUNBRUlBSkhEUUJCblFFaEVBekhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdU0rQWdBQnFMUUFBUncydkFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5RRWhFQXpIQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVtSVJBTXJBRUxBa0FnQkNBQ1J3MEFRWjRCSVJBTXhnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYnJQZ0lBQWFpMEFBRWNOcmdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo0QklSQU14Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBeUVRREtzQkN3SkFJQVFnQWtjTkFFR2ZBU0VRRE1VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYTBCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdmQVNFUURNVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRd2hFQXlxQVFzQ1FDQUVJQUpIRFFCQm9BRWhFQXpFQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQnZNK0FnQUJxTFFBQVJ3MnNBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJvQUVoRUF6RUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFTklSQU1xUUVMQWtBZ0JDQUNSdzBBUWFFQklSQU13d0lMQWtBQ1FDQUVMUUFBUWJwL2FnNExBS3dCckFHc0Fhd0JyQUdzQWF3QnJBR3NBUUdzQVFzZ0JFRUJhaUVFUVlzQklSQU1xZ0lMSUFSQkFXb2hCRUdNQVNFUURLa0NDd0pBSUFRZ0FrY05BRUdpQVNFUURNSUNDeUFFTFFBQVFkQUFSdzJwQVNBRVFRRnFJUVFNNlFFTEFrQWdCQ0FDUncwQVFhTUJJUkFNd1FJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQWFvQnFnR3FBYW9CcWdFQXFnRUxJQVJCQVdvaEJFR09BU0VRREtnQ0N5QUVRUUZxSVFGQklpRVFES1lCQ3dKQUlBUWdBa2NOQUVHa0FTRVFETUFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIQXo0Q0FBR290QUFCSERhZ0JJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2tBU0VRRE1BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVIwaEVBeWxBUXNDUUNBRUlBSkhEUUJCcFFFaEVBeS9BZ3NDUUFKQUlBUXRBQUJCcm45cURnTUFxQUVCcUFFTElBUkJBV29oQkVHUUFTRVFES1lDQ3lBRVFRRnFJUUZCQkNFUURLUUJDd0pBSUFRZ0FrY05BRUdtQVNFUURMNENDd0pBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFDcUFhb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFRR3FBYW9CQXFvQnFnRURxZ0dxQVFTcUFRc2dCRUVCYWlFRVFZZ0JJUkFNcUFJTElBUkJBV29oQkVHSkFTRVFES2NDQ3lBRVFRRnFJUVJCaWdFaEVBeW1BZ3NnQkVFQmFpRUVRWThCSVJBTXBRSUxJQVJCQVdvaEJFR1JBU0VRREtRQ0N3SkFJQVFnQWtjTkFFR25BU0VRREwwQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYVVCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUduQVNFUURMMENDeUFBUVFBMkFnQWdFRUVCYWlFQlFSRWhFQXlpQVFzQ1FDQUVJQUpIRFFCQnFBRWhFQXk4QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQndzK0FnQUJxTFFBQVJ3MmtBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxQUVoRUF5OEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFc0lSQU1vUUVMQWtBZ0JDQUNSdzBBUWFrQklSQU11d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWNYUGdJQUFhaTBBQUVjTm93RWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFha0JJUkFNdXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCS3lFUURLQUJDd0pBSUFRZ0FrY05BRUdxQVNFUURMb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhLejRDQUFHb3RBQUJIRGFJQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHcUFTRVFETG9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlFoRUF5ZkFRc0NRQ0FFSUFKSERRQkJxd0VoRUF5NUFnc0NRQUpBQWtBQ1FDQUVMUUFBUWI1L2FnNFBBQUVDcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FRT2tBUXNnQkVFQmFpRUVRWk1CSVJBTW9nSUxJQVJCQVdvaEJFR1VBU0VRREtFQ0N5QUVRUUZxSVFSQmxRRWhFQXlnQWdzZ0JFRUJhaUVFUVpZQklSQU1ud0lMQWtBZ0JDQUNSdzBBUWF3QklSQU11QUlMSUFRdEFBQkJ4UUJIRFo4QklBUkJBV29oQkF6Z0FRc0NRQ0FFSUFKSERRQkJyUUVoRUF5M0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ6YytBZ0FCcUxRQUFSdzJmQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCclFFaEVBeTNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU9JUkFNbkFFTEFrQWdCQ0FDUncwQVFhNEJJUkFNdGdJTElBUXRBQUJCMEFCSERaMEJJQVJCQVdvaEFVRWxJUkFNbXdFTEFrQWdCQ0FDUncwQVFhOEJJUkFNdFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY05uUUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYThCSVJBTXRRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktpRVFESm9CQ3dKQUlBUWdBa2NOQUVHd0FTRVFETFFDQ3dKQUFrQWdCQzBBQUVHcmYyb09Dd0NkQVowQm5RR2RBWjBCblFHZEFaMEJuUUVCblFFTElBUkJBV29oQkVHYUFTRVFESnNDQ3lBRVFRRnFJUVJCbXdFaEVBeWFBZ3NDUUNBRUlBSkhEUUJCc1FFaEVBeXpBZ3NDUUFKQUlBUXRBQUJCdjM5cURoUUFuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JBWndCQ3lBRVFRRnFJUVJCbVFFaEVBeWFBZ3NnQkVFQmFpRUVRWndCSVJBTW1RSUxBa0FnQkNBQ1J3MEFRYklCSVJBTXNnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZG5QZ0lBQWFpMEFBRWNObWdFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJJQklSQU1zZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJU0VRREpjQkN3SkFJQVFnQWtjTkFFR3pBU0VRRExFQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVSGR6NENBQUdvdEFBQkhEWmtCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd6QVNFUURMRUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSb2hFQXlXQVFzQ1FDQUVJQUpIRFFCQnRBRWhFQXl3QWdzQ1FBSkFBa0FnQkMwQUFFRzdmMm9PRVFDYUFab0JtZ0dhQVpvQm1nR2FBWm9CbWdFQm1nR2FBWm9CbWdHYUFRS2FBUXNnQkVFQmFpRUVRWjBCSVJBTW1BSUxJQVJCQVdvaEJFR2VBU0VRREpjQ0N5QUVRUUZxSVFSQm53RWhFQXlXQWdzQ1FDQUVJQUpIRFFCQnRRRWhFQXl2QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUZhaUVRQWtBRFFDQUVMUUFBSUFGQjVNK0FnQUJxTFFBQVJ3MlhBU0FCUVFWR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0UUVoRUF5dkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFb0lSQU1sQUVMQWtBZ0JDQUNSdzBBUWJZQklSQU1yZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWVyUGdJQUFhaTBBQUVjTmxnRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiWUJJUkFNcmdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQnlFUURKTUJDd0pBSUFRZ0FrY05BRUczQVNFUURLMENDd0pBQWtBZ0JDMEFBRUc3ZjJvT0RnQ1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdFQmxnRUxJQVJCQVdvaEJFR2hBU0VRREpRQ0N5QUVRUUZxSVFSQm9nRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQnVBRWhFQXlzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjdjK0FnQUJxTFFBQVJ3MlVBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1QUVoRUF5c0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFU0lSQU1rUUVMQWtBZ0JDQUNSdzBBUWJrQklSQU1xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTmt3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFia0JJUkFNcXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSUNFUURKQUJDd0pBSUFRZ0FrY05BRUc2QVNFUURLb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUh5ejRDQUFHb3RBQUJIRFpJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNkFTRVFES29DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUThoRUF5UEFRc0NRQ0FFSUFKSERRQkJ1d0VoRUF5cEFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQWtnR1NBWklCa2dHU0FRR1NBUXNnQkVFQmFpRUVRYVVCSVJBTWtBSUxJQVJCQVdvaEJFR21BU0VRREk4Q0N3SkFJQVFnQWtjTkFFRzhBU0VRREtnQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUWRxSVJBQ1FBTkFJQVF0QUFBZ0FVSDB6NENBQUdvdEFBQkhEWkFCSUFGQkIwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc4QVNFUURLZ0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSc2hFQXlOQVFzQ1FDQUVJQUpIRFFCQnZRRWhFQXluQWdzQ1FBSkFBa0FnQkMwQUFFRytmMm9PRWdDUkFaRUJrUUdSQVpFQmtRR1JBWkVCa1FFQmtRR1JBWkVCa1FHUkFaRUJBcEVCQ3lBRVFRRnFJUVJCcEFFaEVBeVBBZ3NnQkVFQmFpRUVRYWNCSVJBTWpnSUxJQVJCQVdvaEJFR29BU0VRREkwQ0N3SkFJQVFnQWtjTkFFRytBU0VRREtZQ0N5QUVMUUFBUWM0QVJ3Mk5BU0FFUVFGcUlRUU16d0VMQWtBZ0JDQUNSdzBBUWI4QklSQU1wUUlMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUFCQWdPY0FRUUZCcHdCbkFHY0FRY0lDUW9MbkFFTURRNFBuQUVMSUFSQkFXb2hBVUhvQUNFUURKb0NDeUFFUVFGcUlRRkI2UUFoRUF5WkFnc2dCRUVCYWlFQlFlNEFJUkFNbUFJTElBUkJBV29oQVVIeUFDRVFESmNDQ3lBRVFRRnFJUUZCOHdBaEVBeVdBZ3NnQkVFQmFpRUJRZllBSVJBTWxRSUxJQVJCQVdvaEFVSDNBQ0VRREpRQ0N5QUVRUUZxSVFGQitnQWhFQXlUQWdzZ0JFRUJhaUVFUVlNQklSQU1rZ0lMSUFSQkFXb2hCRUdFQVNFUURKRUNDeUFFUVFGcUlRUkJoUUVoRUF5UUFnc2dCRUVCYWlFRVFaSUJJUkFNandJTElBUkJBV29oQkVHWUFTRVFESTRDQ3lBRVFRRnFJUVJCb0FFaEVBeU5BZ3NnQkVFQmFpRUVRYU1CSVJBTWpBSUxJQVJCQVdvaEJFR3FBU0VRRElzQ0N3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFR3JBU0VRRElzQ0MwSEFBU0VRREtNQ0N5QUFJQVVnQWhDcWdJQ0FBQ0lCRFlzQklBVWhBUXhjQ3dKQUlBWWdBa1lOQUNBR1FRRnFJUVVNalFFTFFjSUJJUkFNb1FJTEEwQUNRQ0FRTFFBQVFYWnFEZ1NNQVFBQWp3RUFDeUFRUVFGcUloQWdBa2NOQUF0Qnd3RWhFQXlnQWdzQ1FDQUhJQUpHRFFBZ0FFR1JnSUNBQURZQ0NDQUFJQWMyQWdRZ0J5RUJRUUVoRUF5SEFndEJ4QUVoRUF5ZkFnc0NRQ0FISUFKSERRQkJ4UUVoRUF5ZkFnc0NRQUpBSUFjdEFBQkJkbW9PQkFIT0FjNEJBTTRCQ3lBSFFRRnFJUVlNalFFTElBZEJBV29oQlF5SkFRc0NRQ0FISUFKSERRQkJ4Z0VoRUF5ZUFnc0NRQUpBSUFjdEFBQkJkbW9PRndHUEFZOEJBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBUUNQQVFzZ0IwRUJhaUVIQzBHd0FTRVFESVFDQ3dKQUlBZ2dBa2NOQUVISUFTRVFESjBDQ3lBSUxRQUFRU0JIRFkwQklBQkJBRHNCTWlBSVFRRnFJUUZCc3dFaEVBeURBZ3NnQVNFWEFrQURRQ0FYSWdjZ0FrWU5BU0FITFFBQVFWQnFRZjhCY1NJUVFRcFBEY3dCQWtBZ0FDOEJNaUlVUVprelN3MEFJQUFnRkVFS2JDSVVPd0V5SUJCQi8vOERjeUFVUWY3L0EzRkpEUUFnQjBFQmFpRVhJQUFnRkNBUWFpSVFPd0V5SUJCQi8vOERjVUhvQjBrTkFRc0xRUUFoRUNBQVFRQTJBaHdnQUVIQmlZQ0FBRFlDRUNBQVFRMDJBZ3dnQUNBSFFRRnFOZ0lVREp3Q0MwSEhBU0VRREpzQ0N5QUFJQWdnQWhDdWdJQ0FBQ0lRUlEzS0FTQVFRUlZIRFl3QklBQkJ5QUUyQWh3Z0FDQUlOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeWFBZ3NDUUNBSklBSkhEUUJCekFFaEVBeWFBZ3RCQUNFVVFRRWhGMEVCSVJaQkFDRVFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQWt0QUFCQlVHb09DcFlCbFFFQUFRSURCQVVHQ0pjQkMwRUNJUkFNQmd0QkF5RVFEQVVMUVFRaEVBd0VDMEVGSVJBTUF3dEJCaUVRREFJTFFRY2hFQXdCQzBFSUlSQUxRUUFoRjBFQUlSWkJBQ0VVREk0QkMwRUpJUkJCQVNFVVFRQWhGMEVBSVJZTWpRRUxBa0FnQ2lBQ1J3MEFRYzRCSVJBTW1RSUxJQW90QUFCQkxrY05qZ0VnQ2tFQmFpRUpETW9CQ3lBTElBSkhEWTRCUWRBQklSQU1sd0lMQWtBZ0N5QUNSZzBBSUFCQmpvQ0FnQUEyQWdnZ0FDQUxOZ0lFUWJjQklSQU0vZ0VMUWRFQklSQU1sZ0lMQWtBZ0JDQUNSdzBBUWRJQklSQU1sZ0lMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkJHb2hDd05BSUFRdEFBQWdFRUg4ejRDQUFHb3RBQUJIRFk0QklCQkJCRVlONlFFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjBnRWhFQXlWQWdzZ0FDQU1JQUlRcklDQWdBQWlBUTJOQVNBTUlRRU11QUVMQWtBZ0JDQUNSdzBBUWRRQklSQU1sQUlMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkFXb2hEQU5BSUFRdEFBQWdFRUdCMElDQUFHb3RBQUJIRFk4QklCQkJBVVlOamdFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjFBRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQjFnRWhFQXlUQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUNhaUVMQTBBZ0JDMEFBQ0FRUVlQUWdJQUFhaTBBQUVjTmpnRWdFRUVDUmcyUUFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFdBU0VRREpJQ0N3SkFJQVFnQWtjTkFFSFhBU0VRREpJQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRUFDUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFZOEJDeUFFUVFGcUlRUkJ1d0VoRUF6NUFRc2dCRUVCYWlFRVFid0JJUkFNK0FFTEFrQWdCQ0FDUncwQVFkZ0JJUkFNa1FJTElBUXRBQUJCeUFCSERZd0JJQVJCQVdvaEJBekVBUXNDUUNBRUlBSkdEUUFnQUVHUWdJQ0FBRFlDQ0NBQUlBUTJBZ1JCdmdFaEVBejNBUXRCMlFFaEVBeVBBZ3NDUUNBRUlBSkhEUUJCMmdFaEVBeVBBZ3NnQkMwQUFFSElBRVlOd3dFZ0FFRUJPZ0FvRExrQkN5QUFRUUk2QUM4Z0FDQUVJQUlRcG9DQWdBQWlFQTJOQVVIQ0FTRVFEUFFCQ3lBQUxRQW9RWDlxRGdLM0Fia0J1QUVMQTBBQ1FDQUVMUUFBUVhacURnUUFqZ0dPQVFDT0FRc2dCRUVCYWlJRUlBSkhEUUFMUWQwQklSQU1pd0lMSUFCQkFEb0FMeUFBTFFBdFFRUnhSUTJFQWdzZ0FFRUFPZ0F2SUFCQkFUb0FOQ0FCSVFFTWpBRUxJQkJCRlVZTjJnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1pQUlMQWtBZ0FDQVFJQUlRdElDQWdBQWlCQTBBSUJBaEFReUJBZ3NDUUNBRVFSVkhEUUFnQUVFRE5nSWNJQUFnRURZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNaUFJTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHbmpvQ0FBRFlDRUNBQVFSSTJBZ3hCQUNFUURJY0NDeUFRUVJWR0RkWUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSGFqWUNBQURZQ0VDQUFRUlEyQWd4QkFDRVFESVlDQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmpRRWdBRUVITmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURJVUNDeUFBSUFBdkFUQkJnQUZ5T3dFd0lBRWhBUXRCS2lFUURPb0JDeUFRUVJWR0RkRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0RqSUNBQURZQ0VDQUFRUk0yQWd4QkFDRVFESUlDQ3lBUVFSVkdEYzhCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRElFQ0N5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlOQVFzZ0FFRU1OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURJQUNDeUFRUVJWR0Rjd0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUDhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU1BUXNnQUVFTk5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFA0QkN5QVFRUlZHRGNrQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5TEFRc2dBRUVPTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUHdCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pXQWdBQTJBaEFnQUVFQ05nSU1RUUFoRUF6N0FRc2dFRUVWUmczRkFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhveUFnQUEyQWhBZ0FFRWpOZ0lNUVFBaEVBejZBUXNnQUVFUU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFEUGtCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenhBUXNnQUVFUk5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBnQkN5QVFRUlZHRGNFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQY0JDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5SUFRc2dBRUVUTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFlCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenRBUXNnQUVFVU5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBVQkN5QVFRUlZHRGIwQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5R0FRc2dBRUVXTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUE1CQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF0NENBZ0FBaUJBMEFJQUZCQVdvaEFRenBBUXNnQUVFWE5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBJQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenhBUXRDQVNFUkN5QVFRUUZxSVFFQ1FDQUFLUU1nSWhKQy8vLy8vLy8vLy84UFZnMEFJQUFnRWtJRWhpQVJoRGNESUNBQklRRU1oQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd0aVlDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE84QkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenVBUXNnQUNnQ0JDRVhJQUJCQURZQ0JDQVFJQkduYWlJV0lRRWdBQ0FYSUJBZ0ZpQVVHeUlRRUxXQWdJQUFJaFJGRFhNZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRE8wQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnFweUFnQUEyQWhBZ0FFRVBOZ0lNUVFBaEVBenNBUXNnQUNBUUlBSVF0SUNBZ0FBaUFRMEJJQkFoQVF0QkRpRVFETkVCQ3dKQUlBRkJGVWNOQUNBQVFRSTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cUFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU02UUVMSUFGQkFXb2hFQUpBSUFBdkFUQWlBVUdBQVhGRkRRQUNRQ0FBSUJBZ0FoQzdnSUNBQUNJQkRRQWdFQ0VCREhBTElBRkJGVWNOdWdFZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxBa0FnQVVHZ0JIRkJvQVJIRFFBZ0FDMEFMVUVDY1EwQUlBQkJBRFlDSENBQUlCQTJBaFFnQUVHV2s0Q0FBRFlDRUNBQVFRUTJBZ3hCQUNFUURPa0JDeUFBSUJBZ0FoQzlnSUNBQUJvZ0VDRUJBa0FDUUFKQUFrQUNRQ0FBSUJBZ0FoQ3pnSUNBQUE0V0FnRUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBd1FMSUFCQkFUb0FMZ3NnQUNBQUx3RXdRY0FBY2pzQk1DQVFJUUVMUVNZaEVBelJBUXNnQUVFak5nSWNJQUFnRURZQ0ZDQUFRYVdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVIVmk0Q0FBRFlDRUNBQVFSRTJBZ3hCQUNFUURPZ0JDeUFBTFFBdFFRRnhSUTBCUWNNQklSQU16Z0VMQWtBZ0RTQUNSZzBBQTBBQ1FDQU5MUUFBUVNCR0RRQWdEU0VCRE1RQkN5QU5RUUZxSWcwZ0FrY05BQXRCSlNFUURPY0JDMEVsSVJBTTVnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQTBRcjRDQWdBQWlCRVVOclFFZ0FFRW1OZ0ljSUFBZ0JEWUNEQ0FBSUExQkFXbzJBaFJCQUNFUURPVUJDeUFRUVJWR0Rhc0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlqWUNBQURZQ0VDQUFRUjAyQWd4QkFDRVFET1FCQ3lBQVFTYzJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNNHdFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBTFFBc1FYNXFEZ2NHQlFVREFRSUFCUXNnQUNBQUx3RXdRUWh5T3dFd0RBTUxRUUloRkF3QkMwRUVJUlFMSUFCQkFUb0FMQ0FBSUFBdkFUQWdGSEk3QVRBTElCQWhBUXRCS3lFUURNb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxNUtBZ0FBMkFoQWdBRUVMTmdJTVFRQWhFQXppQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTTRRRUxJQUJCQURvQUxDQVFJUUVNdlFFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcElSQU14UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUh3bElDQUFEWUNFQ0FBUVFNMkFneEJBQ0VRRE4wQkN3SkFJQTR0QUFCQkRVY05BQ0FBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNUJBV29oQVF4MUN5QUFRU3cyQWh3Z0FDQUJOZ0lNSUFBZ0RrRUJhallDRkVFQUlSQU0zUUVMSUFBdEFDMUJBWEZGRFFGQnhBRWhFQXpEQVFzQ1FDQU9JQUpIRFFCQkxTRVFETndCQ3dKQUFrQURRQUpBSUE0dEFBQkJkbW9PQkFJQUFBTUFDeUFPUVFGcUlnNGdBa2NOQUF0QkxTRVFETjBCQ3lBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTRoQVF4MEN5QUFRU3cyQWh3Z0FDQU9OZ0lVSUFBZ0FUWUNERUVBSVJBTTNBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhNTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemJBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRGhDeGdJQ0FBQ0lFRGFBQklBNGhBUXpPQVFzZ0VFRXNSdzBCSUFGQkFXb2hFRUVCSVFFQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ1FBQ3lBUUlRRU1CQXRCQWlFQkRBRUxRUVFoQVFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FCY2pzQk1DQVFJUUVNQVFzZ0FDQUFMd0V3UVFoeU93RXdJQkFoQVF0Qk9TRVFETDhCQ3lBQVFRQTZBQ3dnQVNFQkMwRTBJUkFNdlFFTElBQWdBQzhCTUVFZ2Nqc0JNQ0FCSVFFTUFnc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUxHQWdJQUFJZ1FOQUNBQklRRU14d0VMSUFCQk56WUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXpVQVFzZ0FFRUlPZ0FzSUFFaEFRdEJNQ0VRRExrQkN3SkFJQUF0QUNoQkFVWU5BQ0FCSVFFTUJBc2dBQzBBTFVFSWNVVU5rd0VnQVNFQkRBTUxJQUF0QURCQklIRU5sQUZCeFFFaEVBeTNBUXNDUUNBUElBSkdEUUFDUUFOQUFrQWdEeTBBQUVGUWFpSUJRZjhCY1VFS1NRMEFJQThoQVVFMUlSQU11Z0VMSUFBcEF5QWlFVUtacytiTW1iUG16QmxXRFFFZ0FDQVJRZ3ArSWhFM0F5QWdFU0FCclVML0FZTWlFa0ovaFZZTkFTQUFJQkVnRW53M0F5QWdEMEVCYWlJUElBSkhEUUFMUVRraEVBelJBUXNnQUNnQ0JDRUNJQUJCQURZQ0JDQUFJQUlnRDBFQmFpSUVFTEdBZ0lBQUlnSU5sUUVnQkNFQkRNTUJDMEU1SVJBTXp3RUxBa0FnQUM4Qk1DSUJRUWh4UlEwQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFoeFJRMlFBUXNnQUNBQlFmZjdBM0ZCZ0FSeU93RXdJQThoQVF0Qk55RVFETFFCQ3lBQUlBQXZBVEJCRUhJN0FUQU1xd0VMSUJCQkZVWU5pd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNPZ0lBQU5nSVFJQUJCSERZQ0RFRUFJUkFNeXdFTElBQkJ3d0EyQWh3Z0FDQUJOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU15Z0VMQWtBZ0FTMEFBRUU2UncwQUlBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkN2Z0lDQUFDSVFEUUFnQVVFQmFpRUJER01MSUFCQnd3QTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTXlnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3hrWUNBQURZQ0VDQUFRUW8yQWd4QkFDRVFETWtCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCb0ptQWdBQTJBaEFnQUVFZU5nSU1RUUFoRUF6SUFRc2dBRUVBTmdJQUN5QUFRWUFTT3dFcUlBQWdGMEVCYWlJQklBSVFxSUNBZ0FBaUVBMEJJQUVoQVF0Qnh3QWhFQXlzQVFzZ0VFRVZSdzJEQVNBQVFkRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTXhBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERjRMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNd3dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIQnFJQ0FBRFlDRUNBQVFRYzJBZ3dnQUVFQU5nSUFRUUFoRUF6Q0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpCQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0FrWUNBQURZQ0VDQUFRUWsyQWd3TXdBRUxJQkJCRlVZTmZTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeS9BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dBVUVCYWlFQkFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSzJBZ0lBQUloQU5BQ0FCSVFFTVhBc2dBRUhZQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeStBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNclFFTElBQkIyUUEyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES3NCQ3lBQVFkb0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRREx3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXBBUXNnQUVIY0FEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk3QVFzQ1FDQUJMUUFBUVZCcUloQkIvd0Z4UVFwUERRQWdBQ0FRT2dBcUlBRkJBV29oQVVIUEFDRVFES0lCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5bkFRc2dBRUhlQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTZBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQkkwOE5BQ0FCSVFFTVdRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkT0pnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU11UUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dNdHdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBRU0ZIRFFBZ0FTRUJERllMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdiaW9DQUFEWUNFQ0FBUVFnMkFneEJBQ0VRRExZQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLU0lRUVYxcVFRdFBEUUFnQVNFQkRGVUxBa0FnRUVFR1N3MEFRUUVnRUhSQnlnQnhSUTBBSUFFaEFReFZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZlSmdJQUFOZ0lRSUFCQkNEWUNEQXkxQVFzZ0VFRVZSZzF4SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUc1allDQUFEWUNFQ0FBUVJvMkFneEJBQ0VRRExRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFVDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETE1CQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExFQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFJDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEFCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG9xQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5dkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl1QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXRBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNVFFzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5c0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkeUlnSUFBTmdJUUlBQkJCellDREVFQUlSQU1xd0VMSUJCQlAwY05BU0FCUVFGcUlRRUxRUVVoRUF5UUFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5a29DQUFEWUNFQ0FBUVFjMkFnd01xQUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXB3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcGdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFWUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwZ0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTXBBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjB3QTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb3dFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkRFTUxJQUJCNVFBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtFQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnc0K0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWdBUXRCQUNFUUlBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3dNbndFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKNEJDeUFBUVFBMkFod2dBQ0FVTmdJVUlBQkIvcEdBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlkQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVk2YmdJQUFOZ0lRSUFCQkJqWUNERUVBSVJBTW5BRUxJQkJCRlVZTlZ5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpJNkFnQUEyQWhBZ0FFRWdOZ0lNUVFBaEVBeWJBUXNnQUVFQU5nSUFJQkJCQVdvaEFVRWtJUkFMSUFBZ0VEb0FLU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCRUt1QWdJQUFJaEFOVkNBQklRRU1QZ3NnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWZHYmdJQUFOZ0lRSUFCQkJqWUNEQXlYQVFzZ0FVRVZSZzFRSUFCQkFEWUNIQ0FBSUFVMkFoUWdBRUh3aklDQUFEWUNFQ0FBUVJzMkFneEJBQ0VRREpZQkN5QUFLQUlFSVFVZ0FFRUFOZ0lFSUFBZ0JTQVFFS21BZ0lBQUlnVU5BU0FRUVFGcUlRVUxRYTBCSVJBTWV3c2dBRUhCQVRZQ0hDQUFJQVUyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlUQVFzZ0FDZ0NCQ0VHSUFCQkFEWUNCQ0FBSUFZZ0VCQ3BnSUNBQUNJR0RRRWdFRUVCYWlFR0MwR3VBU0VRREhnTElBQkJ3Z0UyQWh3Z0FDQUdOZ0lNSUFBZ0VFRUJhallDRkVFQUlSQU1rQUVMSUFCQkFEWUNIQ0FBSUFjMkFoUWdBRUdYaTRDQUFEWUNFQ0FBUVEwMkFneEJBQ0VRREk4QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQjQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBeU9BUXNnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWlNOZ0lBQU5nSVFJQUJCSVRZQ0RFRUFJUkFNalFFTFFRRWhGa0VBSVJkQkFDRVVRUUVoRUFzZ0FDQVFPZ0FySUFsQkFXb2hDQUpBQWtBZ0FDMEFMVUVRY1EwQUFrQUNRQUpBSUFBdEFDb09Bd0VBQWdRTElCWkZEUU1NQWdzZ0ZBMEJEQUlMSUJkRkRRRUxJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQWdRcllDQWdBQWlFRVVOUFNBQVFja0JOZ0ljSUFBZ0NEWUNGQ0FBSUJBMkFneEJBQ0VRREl3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUlFSzJBZ0lBQUlnUkZEWFlnQUVIS0FUWUNIQ0FBSUFnMkFoUWdBQ0FFTmdJTVFRQWhFQXlMQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NSQ3RnSUNBQUNJRVJRMTBJQUJCeXdFMkFod2dBQ0FKTmdJVUlBQWdCRFlDREVFQUlSQU1pZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFvUXJZQ0FnQUFpQkVVTmNpQUFRYzBCTmdJY0lBQWdDallDRkNBQUlBUTJBZ3hCQUNFUURJa0JDd0pBSUFzdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQzBFQmFpRUtRYllCSVJBTWNBc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDeEN0Z0lDQUFDSUVSUTF3SUFCQnp3RTJBaHdnQUNBTE5nSVVJQUFnQkRZQ0RFRUFJUkFNaUFFTElBQkJBRFlDSENBQUlBUTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dnQUVFQU5nSUFRUUFoRUF5SEFRc2dBVUVWUmcwL0lBQkJBRFlDSENBQUlBdzJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURJWUJDeUFBUVlFRU93RW9JQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXhCQVdvaURCQ3JnSUNBQUNJUVJRMDRJQUJCMHdFMkFod2dBQ0FNTmdJVUlBQWdFRFlDREVFQUlSQU1oUUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBUTJBaFFnQUVIWW00Q0FBRFlDRUNBQVFRZzJBZ3dNZ3dFTElBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBdEJBV29pQ3hDcmdJQ0FBQ0lRRFFGQnhnRWhFQXhwQ3lBQVFRSTZBQ2dNVlFzZ0FFSFZBVFlDSENBQUlBczJBaFFnQUNBUU5nSU1RUUFoRUF5QUFRc2dFRUVWUmcwM0lBQkJBRFlDSENBQUlBUTJBaFFnQUVHa2pJQ0FBRFlDRUNBQVFSQTJBZ3hCQUNFUURIOExJQUF0QURSQkFVY05OQ0FBSUFRZ0FoQzhnSUNBQUNJUVJRMDBJQkJCRlVjTk5TQUFRZHdCTmdJY0lBQWdCRFlDRkNBQVFkV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1mZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTWZRdEJBQ0VRREdNTFFRSWhFQXhpQzBFTklSQU1ZUXRCRHlFUURHQUxRU1VoRUF4ZkMwRVRJUkFNWGd0QkZTRVFERjBMUVJZaEVBeGNDMEVYSVJBTVd3dEJHQ0VRREZvTFFSa2hFQXhaQzBFYUlSQU1XQXRCR3lFUURGY0xRUndoRUF4V0MwRWRJUkFNVlF0Qkh5RVFERlFMUVNFaEVBeFRDMEVqSVJBTVVndEJ4Z0FoRUF4UkMwRXVJUkFNVUF0Qkx5RVFERThMUVRzaEVBeE9DMEU5SVJBTVRRdEJ5QUFoRUF4TUMwSEpBQ0VRREVzTFFjc0FJUkFNU2d0QnpBQWhFQXhKQzBIT0FDRVFERWdMUWRFQUlSQU1Sd3RCMVFBaEVBeEdDMEhZQUNFUURFVUxRZGtBSVJBTVJBdEIyd0FoRUF4REMwSGtBQ0VRREVJTFFlVUFJUkFNUVF0QjhRQWhFQXhBQzBIMEFDRVFERDhMUVkwQklSQU1QZ3RCbHdFaEVBdzlDMEdwQVNFUUREd0xRYXdCSVJBTU93dEJ3QUVoRUF3NkMwRzVBU0VRRERrTFFhOEJJUkFNT0F0QnNRRWhFQXczQzBHeUFTRVFERFlMUWJRQklSQU1OUXRCdFFFaEVBdzBDMEc2QVNFUURETUxRYjBCSVJBTU1ndEJ2d0VoRUF3eEMwSEJBU0VRRERBTElBQkJBRFlDSENBQUlBUTJBaFFnQUVIcGk0Q0FBRFlDRUNBQVFSODJBZ3hCQUNFUURFZ0xJQUJCMndFMkFod2dBQ0FFTmdJVUlBQkIrcGFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhIQ3lBQVFmZ0FOZ0ljSUFBZ0REWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJnc2dBRUhSQURZQ0hDQUFJQVUyQWhRZ0FFR3dsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERVVMSUFCQitRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNUkFzZ0FFSDRBRFlDSENBQUlBRTJBaFFnQUVIS21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFTUxJQUJCNUFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhDQ3lBQVFkY0FOZ0ljSUFBZ0FUWUNGQ0FBUWNtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU1RQXNnQUVIQ0FEWUNIQ0FBSUFFMkFoUWdBRUhqbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREQ4TElBQkJBRFlDQkNBQUlBOGdEeEN4Z0lDQUFDSUVSUTBCSUFCQk9qWUNIQ0FBSUFRMkFnd2dBQ0FQUVFGcU5nSVVRUUFoRUF3K0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCRVVOQUNBQVFUczJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTVBnc2dBVUVCYWlFQkRDMExJQTlCQVdvaEFRd3RDeUFBUVFBMkFod2dBQ0FQTmdJVUlBQkI1SktBZ0FBMkFoQWdBRUVFTmdJTVFRQWhFQXc3Q3lBQVFUWTJBaHdnQUNBRU5nSVVJQUFnQWpZQ0RFRUFJUkFNT2dzZ0FFRXVOZ0ljSUFBZ0RqWUNGQ0FBSUFRMkFneEJBQ0VRRERrTElBQkIwQUEyQWh3Z0FDQUJOZ0lVSUFCQmtaaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzRDeUFOUVFGcUlRRU1MQXNnQUVFVk5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTmdzZ0FFRWJOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Rc2dBRUVQTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OQXNnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTXdzZ0FFRWFOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1nc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NUXNnQUVFS05nSWNJQUFnQVRZQ0ZDQUFRZVNXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTUFzZ0FFRWVOZ0ljSUFBZ0FUWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUx3c2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1MZ3NnQUVFRU5nSWNJQUFnQVRZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTFFzZ0FFRUFOZ0lBSUF0QkFXb2hDd3RCdUFFaEVBd1NDeUFBUVFBMkFnQWdFRUVCYWlFQlFmVUFJUkFNRVFzZ0FTRUJBa0FnQUMwQUtVRUZSdzBBUWVNQUlSQU1FUXRCNGdBaEVBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFCQjVKR0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF3b0N5QUFRUUEyQWdBZ0YwRUJhaUVCUWNBQUlSQU1EZ3RCQVNFQkN5QUFJQUU2QUN3Z0FFRUFOZ0lBSUJkQkFXb2hBUXRCS0NFUURBc0xJQUVoQVF0Qk9DRVFEQWtMQWtBZ0FTSVBJQUpHRFFBRFFBSkFJQTh0QUFCQmdMNkFnQUJxTFFBQUlnRkJBVVlOQUNBQlFRSkhEUU1nRDBFQmFpRUJEQVFMSUE5QkFXb2lEeUFDUncwQUMwRStJUkFNSWd0QlBpRVFEQ0VMSUFCQkFEb0FMQ0FQSVFFTUFRdEJDeUVRREFZTFFUb2hFQXdGQ3lBQlFRRnFJUUZCTFNFUURBUUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0ZrRUJhaUVCUVF3aEVBd0RDeUFBUVFBMkFnQWdGMEVCYWlFQlFRb2hFQXdDQ3lBQVFRQTJBZ0FMSUFCQkFEb0FMQ0FOSVFGQkNTRVFEQUFMQzBFQUlSQWdBRUVBTmdJY0lBQWdDellDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3WEMwRUFJUkFnQUVFQU5nSWNJQUFnQ2pZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1dDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdWQzBFQUlSQWdBRUVBTmdJY0lBQWdDRFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3VUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1RDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdTQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3UkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdQQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3T0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY0NTZ0lBQU5nSVFJQUJCQ3pZQ0RBd05DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpXSmdJQUFOZ0lRSUFCQkN6WUNEQXdNQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREF3TEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZnVQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0tDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZHWmdJQUFOZ0lRSUFCQkFqWUNEQXdKQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjU1VnSUFBTmdJUUlBQkJBallDREF3SUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZktWZ0lBQU5nSVFJQUJCQWpZQ0RBd0hDeUFBUVFJMkFod2dBQ0FCTmdJVUlBQkJuSnFBZ0FBMkFoQWdBRUVXTmdJTVFRQWhFQXdHQzBFQklSQU1CUXRCMUFBaEVDQUJJZ1FnQWtZTkJDQURRUWhxSUFBZ0JDQUNRZGpDZ0lBQVFRb1F4WUNBZ0FBZ0F5Z0NEQ0VFSUFNb0FnZ09Bd0VFQWdBTEVNcUFnSUFBQUFzZ0FFRUFOZ0ljSUFCQnRacUFnQUEyQWhBZ0FFRVhOZ0lNSUFBZ0JFRUJhallDRkVFQUlSQU1BZ3NnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRY3FhZ0lBQU5nSVFJQUJCQ1RZQ0RFRUFJUkFNQVFzQ1FDQUJJZ1FnQWtjTkFFRWlJUkFNQVFzZ0FFR0pnSUNBQURZQ0NDQUFJQVEyQWdSQklTRVFDeUFEUVJCcUpJQ0FnSUFBSUJBTHJ3RUJBbjhnQVNnQ0FDRUdBa0FDUUNBQ0lBTkdEUUFnQkNBR2FpRUVJQVlnQTJvZ0Ftc2hCeUFDSUFaQmYzTWdCV29pQm1vaEJRTkFBa0FnQWkwQUFDQUVMUUFBUmcwQVFRSWhCQXdEQ3dKQUlBWU5BRUVBSVFRZ0JTRUNEQU1MSUFaQmYyb2hCaUFFUVFGcUlRUWdBa0VCYWlJQ0lBTkhEUUFMSUFjaEJpQURJUUlMSUFCQkFUWUNBQ0FCSUFZMkFnQWdBQ0FDTmdJRUR3c2dBVUVBTmdJQUlBQWdCRFlDQUNBQUlBSTJBZ1FMQ2dBZ0FCREhnSUNBQUF2eU5nRUxmeU9BZ0lDQUFFRVFheUlCSklDQWdJQUFBa0JCQUNnQ29OQ0FnQUFOQUVFQUVNdUFnSUFBUVlEVWhJQUFheUlDUWRrQVNRMEFRUUFoQXdKQVFRQW9BdURUZ0lBQUlnUU5BRUVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRUlha0Z3Y1VIWXF0V3FCWE1pQkRZQzROT0FnQUJCQUVFQU5nTDAwNENBQUVFQVFRQTJBc1RUZ0lBQUMwRUFJQUkyQXN6VGdJQUFRUUJCZ05TRWdBQTJBc2pUZ0lBQVFRQkJnTlNFZ0FBMkFwalFnSUFBUVFBZ0JEWUNyTkNBZ0FCQkFFRi9OZ0tvMElDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTFFZRFVoSUFBUVhoQmdOU0VnQUJyUVE5eFFRQkJnTlNFZ0FCQkNHcEJEM0ViSWdOcUlnUkJCR29nQWtGSWFpSUZJQU5ySWdOQkFYSTJBZ0JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQVFZRFVoSUFBSUFWcVFUZzJBZ1FMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCN0FGTERRQUNRRUVBS0FLSTBJQ0FBQ0lHUVJBZ0FFRVRha0Z3Y1NBQVFRdEpHeUlDUVFOMklnUjJJZ05CQTNGRkRRQUNRQUpBSUFOQkFYRWdCSEpCQVhNaUJVRURkQ0lFUWJEUWdJQUFhaUlESUFSQnVOQ0FnQUJxS0FJQUlnUW9BZ2dpQWtjTkFFRUFJQVpCZmlBRmQzRTJBb2pRZ0lBQURBRUxJQU1nQWpZQ0NDQUNJQU0yQWd3TElBUkJDR29oQXlBRUlBVkJBM1FpQlVFRGNqWUNCQ0FFSUFWcUlnUWdCQ2dDQkVFQmNqWUNCQXdNQ3lBQ1FRQW9BcERRZ0lBQUlnZE5EUUVDUUNBRFJRMEFBa0FDUUNBRElBUjBRUUlnQkhRaUEwRUFJQU5yY25FaUEwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacUlnUkJBM1FpQTBHdzBJQ0FBR29pQlNBRFFialFnSUFBYWlnQ0FDSURLQUlJSWdCSERRQkJBQ0FHUVg0Z0JIZHhJZ1kyQW9qUWdJQUFEQUVMSUFVZ0FEWUNDQ0FBSUFVMkFnd0xJQU1nQWtFRGNqWUNCQ0FESUFSQkEzUWlCR29nQkNBQ2F5SUZOZ0lBSUFNZ0Ftb2lBQ0FGUVFGeU5nSUVBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFRQ1FBSkFJQVpCQVNBSFFRTjJkQ0lJY1EwQVFRQWdCaUFJY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FFTmdJTUlBSWdCRFlDQ0NBRUlBSTJBZ3dnQkNBSU5nSUlDeUFEUVFocUlRTkJBQ0FBTmdLYzBJQ0FBRUVBSUFVMkFwRFFnSUFBREF3TFFRQW9Bb3pRZ0lBQUlnbEZEUUVnQ1VFQUlBbHJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxUVFKMFFialNnSUFBYWlnQ0FDSUFLQUlFUVhoeElBSnJJUVFnQUNFRkFrQURRQUpBSUFVb0FoQWlBdzBBSUFWQkZHb29BZ0FpQTBVTkFnc2dBeWdDQkVGNGNTQUNheUlGSUFRZ0JTQUVTU0lGR3lFRUlBTWdBQ0FGR3lFQUlBTWhCUXdBQ3dzZ0FDZ0NHQ0VLQWtBZ0FDZ0NEQ0lJSUFCR0RRQWdBQ2dDQ0NJRFFRQW9BcGpRZ0lBQVNSb2dDQ0FETmdJSUlBTWdDRFlDREF3TEN3SkFJQUJCRkdvaUJTZ0NBQ0lERFFBZ0FDZ0NFQ0lEUlEwRElBQkJFR29oQlFzRFFDQUZJUXNnQXlJSVFSUnFJZ1VvQWdBaUF3MEFJQWhCRUdvaEJTQUlLQUlRSWdNTkFBc2dDMEVBTmdJQURBb0xRWDhoQWlBQVFiOS9TdzBBSUFCQkUyb2lBMEZ3Y1NFQ1FRQW9Bb3pRZ0lBQUlnZEZEUUJCQUNFTEFrQWdBa0dBQWtrTkFFRWZJUXNnQWtILy8vOEhTdzBBSUFOQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCQ0FFUVlEZ0gycEJFSFpCQkhFaUJIUWlCU0FGUVlDQUQycEJFSFpCQW5FaUJYUkJEM1lnQXlBRWNpQUZjbXNpQTBFQmRDQUNJQU5CRldwMlFRRnhja0VjYWlFTEMwRUFJQUpySVFRQ1FBSkFBa0FDUUNBTFFRSjBRYmpTZ0lBQWFpZ0NBQ0lGRFFCQkFDRURRUUFoQ0F3QkMwRUFJUU1nQWtFQVFSa2dDMEVCZG1zZ0MwRWZSaHQwSVFCQkFDRUlBMEFDUUNBRktBSUVRWGh4SUFKcklnWWdCRThOQUNBR0lRUWdCU0VJSUFZTkFFRUFJUVFnQlNFSUlBVWhBd3dEQ3lBRElBVkJGR29vQWdBaUJpQUdJQVVnQUVFZGRrRUVjV3BCRUdvb0FnQWlCVVliSUFNZ0Joc2hBeUFBUVFGMElRQWdCUTBBQ3dzQ1FDQURJQWh5RFFCQkFDRUlRUUlnQzNRaUEwRUFJQU5yY2lBSGNTSURSUTBESUFOQkFDQURhM0ZCZjJvaUF5QURRUXgyUVJCeElnTjJJZ1ZCQlhaQkNIRWlBQ0FEY2lBRklBQjJJZ05CQW5aQkJIRWlCWElnQXlBRmRpSURRUUYyUVFKeElnVnlJQU1nQlhZaUEwRUJka0VCY1NJRmNpQURJQVYyYWtFQ2RFRzQwb0NBQUdvb0FnQWhBd3NnQTBVTkFRc0RRQ0FES0FJRVFYaHhJQUpySWdZZ0JFa2hBQUpBSUFNb0FoQWlCUTBBSUFOQkZHb29BZ0FoQlFzZ0JpQUVJQUFiSVFRZ0F5QUlJQUFiSVFnZ0JTRURJQVVOQUFzTElBaEZEUUFnQkVFQUtBS1EwSUNBQUNBQ2EwOE5BQ0FJS0FJWUlRc0NRQ0FJS0FJTUlnQWdDRVlOQUNBSUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBQUlBTTJBZ2dnQXlBQU5nSU1EQWtMQWtBZ0NFRVVhaUlGS0FJQUlnTU5BQ0FJS0FJUUlnTkZEUU1nQ0VFUWFpRUZDd05BSUFVaEJpQURJZ0JCRkdvaUJTZ0NBQ0lERFFBZ0FFRVFhaUVGSUFBb0FoQWlBdzBBQ3lBR1FRQTJBZ0FNQ0FzQ1FFRUFLQUtRMElDQUFDSURJQUpKRFFCQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQXlBQ2F5SUZRUkJKRFFBZ0JDQUNhaUlBSUFWQkFYSTJBZ1JCQUNBRk5nS1EwSUNBQUVFQUlBQTJBcHpRZ0lBQUlBUWdBMm9nQlRZQ0FDQUVJQUpCQTNJMkFnUU1BUXNnQkNBRFFRTnlOZ0lFSUFRZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFUVFCQkFEWUNuTkNBZ0FCQkFFRUFOZ0tRMElDQUFBc2dCRUVJYWlFRERBb0xBa0JCQUNnQ2xOQ0FnQUFpQUNBQ1RRMEFRUUFvQXFEUWdJQUFJZ01nQW1vaUJDQUFJQUpySWdWQkFYSTJBZ1JCQUNBRk5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBTWdBa0VEY2pZQ0JDQURRUWhxSVFNTUNnc0NRQUpBUVFBb0F1RFRnSUFBUlEwQVFRQW9BdWpUZ0lBQUlRUU1BUXRCQUVKL053THMwNENBQUVFQVFvQ0FoSUNBZ01BQU53TGswNENBQUVFQUlBRkJER3BCY0hGQjJLclZxZ1Z6TmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FCQmdJQUVJUVFMUVFBaEF3SkFJQVFnQWtISEFHb2lCMm9pQmtFQUlBUnJJZ3R4SWdnZ0Frc05BRUVBUVRBMkF2alRnSUFBREFvTEFrQkJBQ2dDd05PQWdBQWlBMFVOQUFKQVFRQW9BcmpUZ0lBQUlnUWdDR29pQlNBRVRRMEFJQVVnQTAwTkFRdEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUNndEJBQzBBeE5PQWdBQkJCSEVOQkFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFBSkFJQU1vQWdBaUJTQUVTdzBBSUFVZ0F5Z0NCR29nQkVzTkF3c2dBeWdDQ0NJRERRQUxDMEVBRU11QWdJQUFJZ0JCZjBZTkJTQUlJUVlDUUVFQUtBTGswNENBQUNJRFFYOXFJZ1FnQUhGRkRRQWdDQ0FBYXlBRUlBQnFRUUFnQTJ0eGFpRUdDeUFHSUFKTkRRVWdCa0grLy8vL0Iwc05CUUpBUVFBb0FzRFRnSUFBSWdORkRRQkJBQ2dDdU5PQWdBQWlCQ0FHYWlJRklBUk5EUVlnQlNBRFN3MEdDeUFHRU11QWdJQUFJZ01nQUVjTkFRd0hDeUFHSUFCcklBdHhJZ1pCL3YvLy93ZExEUVFnQmhETGdJQ0FBQ0lBSUFNb0FnQWdBeWdDQkdwR0RRTWdBQ0VEQ3dKQUlBTkJmMFlOQUNBQ1FjZ0FhaUFHVFEwQUFrQWdCeUFHYTBFQUtBTG8wNENBQUNJRWFrRUFJQVJyY1NJRVFmNy8vLzhIVFEwQUlBTWhBQXdIQ3dKQUlBUVF5NENBZ0FCQmYwWU5BQ0FFSUFacUlRWWdBeUVBREFjTFFRQWdCbXNReTRDQWdBQWFEQVFMSUFNaEFDQURRWDlIRFFVTUF3dEJBQ0VJREFjTFFRQWhBQXdGQ3lBQVFYOUhEUUlMUVFCQkFDZ0N4Tk9BZ0FCQkJISTJBc1RUZ0lBQUN5QUlRZjcvLy84SFN3MEJJQWdReTRDQWdBQWhBRUVBRU11QWdJQUFJUU1nQUVGL1JnMEJJQU5CZjBZTkFTQUFJQU5QRFFFZ0F5QUFheUlHSUFKQk9HcE5EUUVMUVFCQkFDZ0N1Tk9BZ0FBZ0Jtb2lBellDdU5PQWdBQUNRQ0FEUVFBb0FyelRnSUFBVFEwQVFRQWdBellDdk5PQWdBQUxBa0FDUUFKQUFrQkJBQ2dDb05DQWdBQWlCRVVOQUVISTA0Q0FBQ0VEQTBBZ0FDQURLQUlBSWdVZ0F5Z0NCQ0lJYWtZTkFpQURLQUlJSWdNTkFBd0RDd3NDUUFKQVFRQW9BcGpRZ0lBQUlnTkZEUUFnQUNBRFR3MEJDMEVBSUFBMkFwalFnSUFBQzBFQUlRTkJBQ0FHTmdMTTA0Q0FBRUVBSUFBMkFzalRnSUFBUVFCQmZ6WUNxTkNBZ0FCQkFFRUFLQUxnMDRDQUFEWUNyTkNBZ0FCQkFFRUFOZ0xVMDRDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdRZ0JrRklhaUlGSUFOcklnTkJBWEkyQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQUFnQldwQk9EWUNCQXdDQ3lBRExRQU1RUWh4RFFBZ0JDQUZTUTBBSUFRZ0FFOE5BQ0FFUVhnZ0JHdEJEM0ZCQUNBRVFRaHFRUTl4R3lJRmFpSUFRUUFvQXBUUWdJQUFJQVpxSWdzZ0JXc2lCVUVCY2pZQ0JDQURJQWdnQm1vMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FGTmdLVTBJQ0FBRUVBSUFBMkFxRFFnSUFBSUFRZ0MycEJPRFlDQkF3QkN3SkFJQUJCQUNnQ21OQ0FnQUFpQ0U4TkFFRUFJQUEyQXBqUWdJQUFJQUFoQ0FzZ0FDQUdhaUVGUWNqVGdJQUFJUU1DUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQU1vQWdBZ0JVWU5BU0FES0FJSUlnTU5BQXdDQ3dzZ0F5MEFERUVJY1VVTkFRdEJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlJRklBUkxEUU1MSUFNb0FnZ2hBd3dBQ3dzZ0F5QUFOZ0lBSUFNZ0F5Z0NCQ0FHYWpZQ0JDQUFRWGdnQUd0QkQzRkJBQ0FBUVFocVFROXhHMm9pQ3lBQ1FRTnlOZ0lFSUFWQmVDQUZhMEVQY1VFQUlBVkJDR3BCRDNFYmFpSUdJQXNnQW1vaUFtc2hBd0pBSUFZZ0JFY05BRUVBSUFJMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0Eyb2lBellDbE5DQWdBQWdBaUFEUVFGeU5nSUVEQU1MQWtBZ0JrRUFLQUtjMElDQUFFY05BRUVBSUFJMkFwelFnSUFBUVFCQkFDZ0NrTkNBZ0FBZ0Eyb2lBellDa05DQWdBQWdBaUFEUVFGeU5nSUVJQUlnQTJvZ0F6WUNBQXdEQ3dKQUlBWW9BZ1FpQkVFRGNVRUJSdzBBSUFSQmVIRWhCd0pBQWtBZ0JFSC9BVXNOQUNBR0tBSUlJZ1VnQkVFRGRpSUlRUU4wUWJEUWdJQUFhaUlBUmhvQ1FDQUdLQUlNSWdRZ0JVY05BRUVBUVFBb0FvalFnSUFBUVg0Z0NIZHhOZ0tJMElDQUFBd0NDeUFFSUFCR0dpQUVJQVUyQWdnZ0JTQUVOZ0lNREFFTElBWW9BaGdoQ1FKQUFrQWdCaWdDRENJQUlBWkdEUUFnQmlnQ0NDSUVJQWhKR2lBQUlBUTJBZ2dnQkNBQU5nSU1EQUVMQWtBZ0JrRVVhaUlFS0FJQUlnVU5BQ0FHUVJCcUlnUW9BZ0FpQlEwQVFRQWhBQXdCQ3dOQUlBUWhDQ0FGSWdCQkZHb2lCQ2dDQUNJRkRRQWdBRUVRYWlFRUlBQW9BaEFpQlEwQUN5QUlRUUEyQWdBTElBbEZEUUFDUUFKQUlBWWdCaWdDSENJRlFRSjBRYmpTZ0lBQWFpSUVLQUlBUncwQUlBUWdBRFlDQUNBQURRRkJBRUVBS0FLTTBJQ0FBRUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDVUVRUVJRZ0NTZ0NFQ0FHUmh0cUlBQTJBZ0FnQUVVTkFRc2dBQ0FKTmdJWUFrQWdCaWdDRUNJRVJRMEFJQUFnQkRZQ0VDQUVJQUEyQWhnTElBWW9BaFFpQkVVTkFDQUFRUlJxSUFRMkFnQWdCQ0FBTmdJWUN5QUhJQU5xSVFNZ0JpQUhhaUlHS0FJRUlRUUxJQVlnQkVGK2NUWUNCQ0FDSUFOcUlBTTJBZ0FnQWlBRFFRRnlOZ0lFQWtBZ0EwSC9BVXNOQUNBRFFYaHhRYkRRZ0lBQWFpRUVBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBMEVEZG5RaUEzRU5BRUVBSUFVZ0EzSTJBb2pRZ0lBQUlBUWhBd3dCQ3lBRUtBSUlJUU1MSUFNZ0FqWUNEQ0FFSUFJMkFnZ2dBaUFFTmdJTUlBSWdBellDQ0F3REMwRWZJUVFDUUNBRFFmLy8vd2RMRFFBZ0EwRUlkaUlFSUFSQmdQNC9ha0VRZGtFSWNTSUVkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBRUlBVnlJQUJ5YXlJRVFRRjBJQU1nQkVFVmFuWkJBWEZ5UVJ4cUlRUUxJQUlnQkRZQ0hDQUNRZ0EzQWhBZ0JFRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdCQkFTQUVkQ0lJY1EwQUlBVWdBallDQUVFQUlBQWdDSEkyQW96UWdJQUFJQUlnQlRZQ0dDQUNJQUkyQWdnZ0FpQUNOZ0lNREFNTElBTkJBRUVaSUFSQkFYWnJJQVJCSDBZYmRDRUVJQVVvQWdBaEFBTkFJQUFpQlNnQ0JFRjRjU0FEUmcwQ0lBUkJIWFloQUNBRVFRRjBJUVFnQlNBQVFRUnhha0VRYWlJSUtBSUFJZ0FOQUFzZ0NDQUNOZ0lBSUFJZ0JUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBSUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnc2dCa0ZJYWlJSUlBTnJJZ05CQVhJMkFnUWdBQ0FJYWtFNE5nSUVJQVFnQlVFM0lBVnJRUTl4UVFBZ0JVRkpha0VQY1J0cVFVRnFJZ2dnQ0NBRVFSQnFTUnNpQ0VFak5nSUVRUUJCQUNnQzhOT0FnQUEyQXFUUWdJQUFRUUFnQXpZQ2xOQ0FnQUJCQUNBTE5nS2cwSUNBQUNBSVFSQnFRUUFwQXREVGdJQUFOd0lBSUFoQkFDa0N5Tk9BZ0FBM0FnaEJBQ0FJUVFocU5nTFEwNENBQUVFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUVBTmdMVTA0Q0FBQ0FJUVNScUlRTURRQ0FEUVFjMkFnQWdBMEVFYWlJRElBVkpEUUFMSUFnZ0JFWU5BeUFJSUFnb0FnUkJmbkUyQWdRZ0NDQUlJQVJySWdBMkFnQWdCQ0FBUVFGeU5nSUVBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0FFRURkblFpQUhFTkFFRUFJQVVnQUhJMkFvalFnSUFBSUFNaEJRd0JDeUFES0FJSUlRVUxJQVVnQkRZQ0RDQURJQVEyQWdnZ0JDQUROZ0lNSUFRZ0JUWUNDQXdFQzBFZklRTUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUlJQWhCZ0lBUGFrRVFka0VDY1NJSWRFRVBkaUFESUFWeUlBaHlheUlEUVFGMElBQWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBUWdBellDSENBRVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ2hCQVNBRGRDSUdjUTBBSUFVZ0JEWUNBRUVBSUFnZ0JuSTJBb3pRZ0lBQUlBUWdCVFlDR0NBRUlBUTJBZ2dnQkNBRU5nSU1EQVFMSUFCQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQ0FOQUlBZ2lCU2dDQkVGNGNTQUFSZzBESUFOQkhYWWhDQ0FEUVFGMElRTWdCU0FJUVFSeGFrRVFhaUlHS0FJQUlnZ05BQXNnQmlBRU5nSUFJQVFnQlRZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFNTElBVW9BZ2dpQXlBQ05nSU1JQVVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUZOZ0lNSUFJZ0F6WUNDQXNnQzBFSWFpRUREQVVMSUFVb0FnZ2lBeUFFTmdJTUlBVWdCRFlDQ0NBRVFRQTJBaGdnQkNBRk5nSU1JQVFnQXpZQ0NBdEJBQ2dDbE5DQWdBQWlBeUFDVFEwQVFRQW9BcURRZ0lBQUlnUWdBbW9pQlNBRElBSnJJZ05CQVhJMkFnUkJBQ0FETmdLVTBJQ0FBRUVBSUFVMkFxRFFnSUFBSUFRZ0FrRURjallDQkNBRVFRaHFJUU1NQXd0QkFDRURRUUJCTURZQytOT0FnQUFNQWdzQ1FDQUxSUTBBQWtBQ1FDQUlJQWdvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQUEyQWdBZ0FBMEJRUUFnQjBGK0lBVjNjU0lITmdLTTBJQ0FBQXdDQ3lBTFFSQkJGQ0FMS0FJUUlBaEdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBczJBaGdDUUNBSUtBSVFJZ05GRFFBZ0FDQUROZ0lRSUFNZ0FEWUNHQXNnQ0VFVWFpZ0NBQ0lEUlEwQUlBQkJGR29nQXpZQ0FDQURJQUEyQWhnTEFrQUNRQ0FFUVE5TERRQWdDQ0FFSUFKcUlnTkJBM0kyQWdRZ0NDQURhaUlESUFNb0FnUkJBWEkyQWdRTUFRc2dDQ0FDYWlJQUlBUkJBWEkyQWdRZ0NDQUNRUU55TmdJRUlBQWdCR29nQkRZQ0FBSkFJQVJCL3dGTERRQWdCRUY0Y1VHdzBJQ0FBR29oQXdKQUFrQkJBQ2dDaU5DQWdBQWlCVUVCSUFSQkEzWjBJZ1J4RFFCQkFDQUZJQVJ5TmdLSTBJQ0FBQ0FESVFRTUFRc2dBeWdDQ0NFRUN5QUVJQUEyQWd3Z0F5QUFOZ0lJSUFBZ0F6WUNEQ0FBSUFRMkFnZ01BUXRCSHlFREFrQWdCRUgvLy84SFN3MEFJQVJCQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJTQUZRWURnSDJwQkVIWkJCSEVpQlhRaUFpQUNRWUNBRDJwQkVIWkJBbkVpQW5SQkQzWWdBeUFGY2lBQ2Ntc2lBMEVCZENBRUlBTkJGV3AyUVFGeGNrRWNhaUVEQ3lBQUlBTTJBaHdnQUVJQU53SVFJQU5CQW5SQnVOS0FnQUJxSVFVQ1FDQUhRUUVnQTNRaUFuRU5BQ0FGSUFBMkFnQkJBQ0FISUFKeU5nS00wSUNBQUNBQUlBVTJBaGdnQUNBQU5nSUlJQUFnQURZQ0RBd0JDeUFFUVFCQkdTQURRUUYyYXlBRFFSOUdHM1FoQXlBRktBSUFJUUlDUUFOQUlBSWlCU2dDQkVGNGNTQUVSZzBCSUFOQkhYWWhBaUFEUVFGMElRTWdCU0FDUVFSeGFrRVFhaUlHS0FJQUlnSU5BQXNnQmlBQU5nSUFJQUFnQlRZQ0dDQUFJQUEyQWd3Z0FDQUFOZ0lJREFFTElBVW9BZ2dpQXlBQU5nSU1JQVVnQURZQ0NDQUFRUUEyQWhnZ0FDQUZOZ0lNSUFBZ0F6WUNDQXNnQ0VFSWFpRUREQUVMQWtBZ0NrVU5BQUpBQWtBZ0FDQUFLQUljSWdWQkFuUkJ1TktBZ0FCcUlnTW9BZ0JIRFFBZ0F5QUlOZ0lBSUFnTkFVRUFJQWxCZmlBRmQzRTJBb3pRZ0lBQURBSUxJQXBCRUVFVUlBb29BaEFnQUVZYmFpQUlOZ0lBSUFoRkRRRUxJQWdnQ2pZQ0dBSkFJQUFvQWhBaUEwVU5BQ0FJSUFNMkFoQWdBeUFJTmdJWUN5QUFRUlJxS0FJQUlnTkZEUUFnQ0VFVWFpQUROZ0lBSUFNZ0NEWUNHQXNDUUFKQUlBUkJEMHNOQUNBQUlBUWdBbW9pQTBFRGNqWUNCQ0FBSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBQUlBSnFJZ1VnQkVFQmNqWUNCQ0FBSUFKQkEzSTJBZ1FnQlNBRWFpQUVOZ0lBQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRTUNRQUpBUVFFZ0IwRURkblFpQ0NBR2NRMEFRUUFnQ0NBR2NqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRE5nSU1JQUlnQXpZQ0NDQURJQUkyQWd3Z0F5QUlOZ0lJQzBFQUlBVTJBcHpRZ0lBQVFRQWdCRFlDa05DQWdBQUxJQUJCQ0dvaEF3c2dBVUVRYWlTQWdJQ0FBQ0FEQ3dvQUlBQVF5WUNBZ0FBTDRnMEJCMzhDUUNBQVJRMEFJQUJCZUdvaUFTQUFRWHhxS0FJQUlnSkJlSEVpQUdvaEF3SkFJQUpCQVhFTkFDQUNRUU54UlEwQklBRWdBU2dDQUNJQ2F5SUJRUUFvQXBqUWdJQUFJZ1JKRFFFZ0FpQUFhaUVBQWtBZ0FVRUFLQUtjMElDQUFFWU5BQUpBSUFKQi93RkxEUUFnQVNnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0FTZ0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUF3c2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdDQ3lBQktBSVlJUWNDUUFKQUlBRW9BZ3dpQmlBQlJnMEFJQUVvQWdnaUFpQUVTUm9nQmlBQ05nSUlJQUlnQmpZQ0RBd0JDd0pBSUFGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlJQ0tBSUFJZ1FOQUVFQUlRWU1BUXNEUUNBQ0lRVWdCQ0lHUVJScUlnSW9BZ0FpQkEwQUlBWkJFR29oQWlBR0tBSVFJZ1FOQUFzZ0JVRUFOZ0lBQ3lBSFJRMEJBa0FDUUNBQklBRW9BaHdpQkVFQ2RFRzQwb0NBQUdvaUFpZ0NBRWNOQUNBQ0lBWTJBZ0FnQmcwQlFRQkJBQ2dDak5DQWdBQkJmaUFFZDNFMkFvelFnSUFBREFNTElBZEJFRUVVSUFjb0FoQWdBVVliYWlBR05nSUFJQVpGRFFJTElBWWdCellDR0FKQUlBRW9BaEFpQWtVTkFDQUdJQUkyQWhBZ0FpQUdOZ0lZQ3lBQktBSVVJZ0pGRFFFZ0JrRVVhaUFDTmdJQUlBSWdCallDR0F3QkN5QURLQUlFSWdKQkEzRkJBMGNOQUNBRElBSkJmbkUyQWdSQkFDQUFOZ0tRMElDQUFDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVEd3NnQVNBRFR3MEFJQU1vQWdRaUFrRUJjVVVOQUFKQUFrQWdBa0VDY1EwQUFrQWdBMEVBS0FLZzBJQ0FBRWNOQUVFQUlBRTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBR29pQURZQ2xOQ0FnQUFnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRTkJBRUVBTmdLUTBJQ0FBRUVBUVFBMkFwelFnSUFBRHdzQ1FDQURRUUFvQXB6UWdJQUFSdzBBUVFBZ0FUWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQUFhaUlBTmdLUTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVNBQWFpQUFOZ0lBRHdzZ0FrRjRjU0FBYWlFQUFrQUNRQ0FDUWY4QlN3MEFJQU1vQWdnaUJDQUNRUU4ySWdWQkEzUkJzTkNBZ0FCcUlnWkdHZ0pBSUFNb0Fnd2lBaUFFUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFGZDNFMkFvalFnSUFBREFJTElBSWdCa1lhSUFJZ0JEWUNDQ0FFSUFJMkFnd01BUXNnQXlnQ0dDRUhBa0FDUUNBREtBSU1JZ1lnQTBZTkFDQURLQUlJSWdKQkFDZ0NtTkNBZ0FCSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBMEVVYWlJQ0tBSUFJZ1FOQUNBRFFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFBQ1FBSkFJQU1nQXlnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1BZ3NnQjBFUVFSUWdCeWdDRUNBRFJodHFJQVkyQWdBZ0JrVU5BUXNnQmlBSE5nSVlBa0FnQXlnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQU1vQWhRaUFrVU5BQ0FHUVJScUlBSTJBZ0FnQWlBR05nSVlDeUFCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRRkJBQ0FBTmdLUTBJQ0FBQThMSUFNZ0FrRitjVFlDQkNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUN3SkFJQUJCL3dGTERRQWdBRUY0Y1VHdzBJQ0FBR29oQWdKQUFrQkJBQ2dDaU5DQWdBQWlCRUVCSUFCQkEzWjBJZ0J4RFFCQkFDQUVJQUJ5TmdLSTBJQ0FBQ0FDSVFBTUFRc2dBaWdDQ0NFQUN5QUFJQUUyQWd3Z0FpQUJOZ0lJSUFFZ0FqWUNEQ0FCSUFBMkFnZ1BDMEVmSVFJQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJQ0lBSkJnUDQvYWtFUWRrRUljU0lDZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJR0lBWkJnSUFQYWtFUWRrRUNjU0lHZEVFUGRpQUNJQVJ5SUFaeWF5SUNRUUYwSUFBZ0FrRVZhblpCQVhGeVFSeHFJUUlMSUFFZ0FqWUNIQ0FCUWdBM0FoQWdBa0VDZEVHNDBvQ0FBR29oQkFKQUFrQkJBQ2dDak5DQWdBQWlCa0VCSUFKMElnTnhEUUFnQkNBQk5nSUFRUUFnQmlBRGNqWUNqTkNBZ0FBZ0FTQUVOZ0lZSUFFZ0FUWUNDQ0FCSUFFMkFnd01BUXNnQUVFQVFSa2dBa0VCZG1zZ0FrRWZSaHQwSVFJZ0JDZ0NBQ0VHQWtBRFFDQUdJZ1FvQWdSQmVIRWdBRVlOQVNBQ1FSMTJJUVlnQWtFQmRDRUNJQVFnQmtFRWNXcEJFR29pQXlnQ0FDSUdEUUFMSUFNZ0FUWUNBQ0FCSUFRMkFoZ2dBU0FCTmdJTUlBRWdBVFlDQ0F3QkN5QUVLQUlJSWdBZ0FUWUNEQ0FFSUFFMkFnZ2dBVUVBTmdJWUlBRWdCRFlDRENBQklBQTJBZ2dMUVFCQkFDZ0NxTkNBZ0FCQmYyb2lBVUYvSUFFYk5nS28wSUNBQUFzTEJBQUFBQXRPQUFKQUlBQU5BRDhBUVJCMER3c0NRQ0FBUWYvL0EzRU5BQ0FBUVg5TURRQUNRQ0FBUVJCMlFBQWlBRUYvUncwQVFRQkJNRFlDK05PQWdBQkJmdzhMSUFCQkVIUVBDeERLZ0lDQUFBQUw4Z0lDQTM4QmZnSkFJQUpGRFFBZ0FDQUJPZ0FBSUFJZ0FHb2lBMEYvYWlBQk9nQUFJQUpCQTBrTkFDQUFJQUU2QUFJZ0FDQUJPZ0FCSUFOQmZXb2dBVG9BQUNBRFFYNXFJQUU2QUFBZ0FrRUhTUTBBSUFBZ0FUb0FBeUFEUVh4cUlBRTZBQUFnQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCZkdvZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FYaHFJQUUyQWdBZ0FrRjBhaUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRndhaUFCTmdJQUlBSkJiR29nQVRZQ0FDQUNRV2hxSUFFMkFnQWdBa0ZrYWlBQk5nSUFJQVFnQTBFRWNVRVljaUlGYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFZZ0F5QUZhaUVCQTBBZ0FTQUdOd01ZSUFFZ0JqY0RFQ0FCSUFZM0F3Z2dBU0FHTndNQUlBRkJJR29oQVNBQ1FXQnFJZ0pCSDBzTkFBc0xJQUFMQzQ1SUFRQkJnQWdMaGtnQkFBQUFBZ0FBQUFNQUFBQUFBQUFBQUFBQUFBUUFBQUFGQUFBQUFBQUFBQUFBQUFBR0FBQUFCd0FBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2djWFZsY25rQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5aWIyUjVBRU52Ym5SbGJuUXRUR1Z1WjNSb0lHOTJaWEptYkc5M0FFTm9kVzVySUhOcGVtVWdiM1psY21ac2IzY0FVbVZ6Y0c5dWMyVWdiM1psY21ac2IzY0FTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRWhVVkZBdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRkpVVTFBdmVDNTRJSEpsY1hWbGMzUUFSWGh3WldOMFpXUWdVMDlWVWtORklHMWxkR2h2WkNCbWIzSWdTVU5GTDNndWVDQnlaWEYxWlhOMEFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2dabkpoWjIxbGJuUWdjM1JoY25RQVJYaHdaV04wWldRZ1pHOTBBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZjM1JoZEhWekFFbHVkbUZzYVdRZ2NtVnpjRzl1YzJVZ2MzUmhkSFZ6QUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NQVZYTmxjaUJqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmY21WelpYUmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOW9aV0ZrWlhKZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgySmxaMmx1WUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYzNSaGRIVnpYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDNWeWJGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxkR2h2WkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5sY25abGNnQkpiblpoYkdsa0lHaGxZV1JsY2lCMllXeDFaU0JqYUdGeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUdacFpXeGtJR05vWVhJQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MlpYSnphVzl1QUVsdWRtRnNhV1FnYldsdWIzSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMWhhbTl5SUhabGNuTnBiMjRBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCRFVreEdJR0ZtZEdWeUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCSVZGUlFJSFpsY25OcGIyNEFTVzUyWVd4cFpDQm9aV0ZrWlhJZ2RHOXJaVzRBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkxY213QVNXNTJZV3hwWkNCamFHRnlZV04wWlhKeklHbHVJSFZ5YkFCVmJtVjRjR1ZqZEdWa0lITjBZWEowSUdOb1lYSWdhVzRnZFhKc0FFUnZkV0pzWlNCQUlHbHVJSFZ5YkFCRmJYQjBlU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJEYjI1MFpXNTBMVXhsYm1kMGFBQkVkWEJzYVdOaGRHVWdRMjl1ZEdWdWRDMU1aVzVuZEdnQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQndZWFJvQUVOdmJuUmxiblF0VEdWdVozUm9JR05oYmlkMElHSmxJSEJ5WlhObGJuUWdkMmwwYUNCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WndCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCemFYcGxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgzWmhiSFZsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdkbUZzZFdVQVRXbHpjMmx1WnlCbGVIQmxZM1JsWkNCTVJpQmhablJsY2lCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsSUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVmtJSFpoYkhWbEFGQmhkWE5sWkNCaWVTQnZibDlvWldGa1pYSnpYMk52YlhCc1pYUmxBRWx1ZG1Gc2FXUWdSVTlHSUhOMFlYUmxBRzl1WDNKbGMyVjBJSEJoZFhObEFHOXVYMk5vZFc1clgyaGxZV1JsY2lCd1lYVnpaUUJ2Ymw5dFpYTnpZV2RsWDJKbFoybHVJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWlNCd1lYVnpaUUJ2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkxY214ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaU0J3WVhWelpRQlZibVY0Y0dWamRHVmtJSE53WVdObElHRm1kR1Z5SUhOMFlYSjBJR3hwYm1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJRzVoYldVQVVHRjFjMlVnYjI0Z1EwOU9Ua1ZEVkM5VmNHZHlZV1JsQUZCaGRYTmxJRzl1SUZCU1NTOVZjR2R5WVdSbEFFVjRjR1ZqZEdWa0lFaFVWRkF2TWlCRGIyNXVaV04wYVc5dUlGQnlaV1poWTJVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5dFpYUm9iMlFBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2JXVjBhRzlrQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYMlpwWld4a0FGQmhkWE5sWkFCSmJuWmhiR2xrSUhkdmNtUWdaVzVqYjNWdWRHVnlaV1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdaVzVqYjNWdWRHVnlaV1FBVlc1bGVIQmxZM1JsWkNCamFHRnlJR2x1SUhWeWJDQnpZMmhsYldFQVVtVnhkV1Z6ZENCb1lYTWdhVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdBRk5YU1ZSRFNGOVFVazlZV1FCVlUwVmZVRkpQV0ZrQVRVdEJRMVJKVmtsVVdRQlZUbEJTVDBORlUxTkJRa3hGWDBWT1ZFbFVXUUJEVDFCWkFFMVBWa1ZFWDFCRlVrMUJUa1ZPVkV4WkFGUlBUMTlGUVZKTVdRQk9UMVJKUmxrQVJrRkpURVZFWDBSRlVFVk9SRVZPUTFrQVFrRkVYMGRCVkVWWFFWa0FVRXhCV1FCUVZWUUFRMGhGUTB0UFZWUUFSMEZVUlZkQldWOVVTVTFGVDFWVUFGSkZVVlZGVTFSZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDBOUFRrNUZRMVJmVkVsTlJVOVZWQUJEVDA1T1JVTlVTVTlPWDFSSlRVVlBWVlFBVEU5SFNVNWZWRWxOUlU5VlZBQk9SVlJYVDFKTFgxSkZRVVJmVkVsTlJVOVZWQUJRVDFOVUFFMUpVMFJKVWtWRFZFVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZURTlCUkY5Q1FVeEJUa05GUkY5U1JWRlZSVk5VQUVKQlJGOVNSVkZWUlZOVUFFaFVWRkJmVWtWUlZVVlRWRjlUUlU1VVgxUlBYMGhVVkZCVFgxQlBVbFFBVWtWUVQxSlVBRWxOWDBGZlZFVkJVRTlVQUZKRlUwVlVYME5QVGxSRlRsUUFUazlmUTA5T1ZFVk9WQUJRUVZKVVNVRk1YME5QVGxSRlRsUUFTRkJGWDBsT1ZrRk1TVVJmUTA5T1UxUkJUbFFBU0ZCRlgwTkNYMUpGVTBWVUFFZEZWQUJJVUVWZlUxUlNTVU5VQUVOUFRrWk1TVU5VQUZSRlRWQlBVa0ZTV1Y5U1JVUkpVa1ZEVkFCUVJWSk5RVTVGVGxSZlVrVkVTVkpGUTFRQVEwOU9Ua1ZEVkFCTlZVeFVTVjlUVkVGVVZWTUFTRkJGWDBsT1ZrRk1TVVJmVTFSQlZGVlRBRlJQVDE5TlFVNVpYMUpGVVZWRlUxUlRBRVZCVWt4WlgwaEpUbFJUQUZWT1FWWkJTVXhCUWt4RlgwWlBVbDlNUlVkQlRGOVNSVUZUVDA1VEFFOVFWRWxQVGxNQVUxZEpWRU5JU1U1SFgxQlNUMVJQUTA5TVV3QldRVkpKUVU1VVgwRk1VMDlmVGtWSFQxUkpRVlJGVXdCTlZVeFVTVkJNUlY5RFNFOUpRMFZUQUVsT1ZFVlNUa0ZNWDFORlVsWkZVbDlGVWxKUFVnQlhSVUpmVTBWU1ZrVlNYMVZPUzA1UFYwNWZSVkpTVDFJQVVrRkpURWRWVGw5RlVsSlBVZ0JKUkVWT1ZFbFVXVjlRVWs5V1NVUkZVbDlCVlZSSVJVNVVTVU5CVkVsUFRsOUZVbEpQVWdCVFUweGZRMFZTVkVsR1NVTkJWRVZmUlZKU1QxSUFTVTVXUVV4SlJGOVlYMFpQVWxkQlVrUkZSRjlHVDFJQVUwVlVYMUJCVWtGTlJWUkZVZ0JIUlZSZlVFRlNRVTFGVkVWU0FFaFFSVjlWVTBWU0FGTkZSVjlQVkVoRlVnQklVRVZmUTBKZlEwaFZUa3RmU0VWQlJFVlNBRTFMUTBGTVJVNUVRVklBVTBWVVZWQUFWMFZDWDFORlVsWkZVbDlKVTE5RVQxZE9BRlJGUVZKRVQxZE9BRWhRUlY5RFRFOVRSVVJmUTA5T1RrVkRWRWxQVGdCSVJWVlNTVk5VU1VOZlJWaFFTVkpCVkVsUFRnQkVTVk5EVDA1T1JVTlVSVVJmVDFCRlVrRlVTVTlPQUU1UFRsOUJWVlJJVDFKSlZFRlVTVlpGWDBsT1JrOVNUVUZVU1U5T0FFaFFSVjlKVGxaQlRFbEVYMVpGVWxOSlQwNEFTRkJGWDBOQ1gwMUZVMU5CUjBWZlFrVkhTVTRBVTBsVVJWOUpVMTlHVWs5YVJVNEFTRkJGWDBsT1ZrRk1TVVJmU0VWQlJFVlNYMVJQUzBWT0FFbE9Wa0ZNU1VSZlZFOUxSVTRBUms5U1FrbEVSRVZPQUVWT1NFRk9RMFZmV1U5VlVsOURRVXhOQUVoUVJWOUpUbFpCVEVsRVgxVlNUQUJDVEU5RFMwVkVYMEpaWDFCQlVrVk9WRUZNWDBOUFRsUlNUMHdBVFV0RFQwd0FRVU5NQUVoUVJWOUpUbFJGVWs1QlRBQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGWDFWT1QwWkdTVU5KUVV3QVNGQkZYMDlMQUZWT1RFbE9Td0JWVGt4UFEwc0FVRkpKQUZKRlZGSlpYMWRKVkVnQVNGQkZYMGxPVmtGTVNVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVNGQkZYMVZPUlZoUVJVTlVSVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FSa3hWVTBnQVVGSlBVRkJCVkVOSUFFMHRVMFZCVWtOSUFGVlNTVjlVVDA5ZlRFOU9Sd0JRVWs5RFJWTlRTVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZVRVZTVTBsVFZFVk9WRjlYUVZKT1NVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlYwRlNUa2xPUndCSVVFVmZTVTVXUVV4SlJGOVVVa0ZPVTBaRlVsOUZUa05QUkVsT1J3QkZlSEJsWTNSbFpDQkRVa3hHQUVoUVJWOUpUbFpCVEVsRVgwTklWVTVMWDFOSldrVUFUVTlXUlFCRFQwNVVTVTVWUlFCSVVFVmZRMEpmVTFSQlZGVlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5V1JWSlRTVTlPWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlWVWt4ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlZrRk1WVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwVllWRVZPVTBsUFRsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMDVCVFVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlUxTkJSMFZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVkVoUFJGOURUMDFRVEVWVVJRQklVRVZmUTBKZlNFVkJSRVZTWDBaSlJVeEVYME5QVFZCTVJWUkZBRVJGVEVWVVJRQklVRVZmU1U1V1FVeEpSRjlGVDBaZlUxUkJWRVVBU1U1V1FVeEpSRjlUVTB4ZlEwVlNWRWxHU1VOQlZFVUFVRUZWVTBVQVRrOWZVa1ZUVUU5T1UwVUFWVTVUVlZCUVQxSlVSVVJmVFVWRVNVRmZWRmxRUlFCSFQwNUZBRTVQVkY5QlEwTkZVRlJCUWt4RkFGTkZVbFpKUTBWZlZVNUJWa0ZKVEVGQ1RFVUFVa0ZPUjBWZlRrOVVYMU5CVkVsVFJrbEJRa3hGQUU5U1NVZEpUbDlKVTE5VlRsSkZRVU5JUVVKTVJRQlNSVk5RVDA1VFJWOUpVMTlUVkVGTVJRQlFWVkpIUlFCTlJWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDFSUFQxOU1RVkpIUlFCUVFWbE1UMEZFWDFSUFQxOU1RVkpIUlFCSlRsTlZSa1pKUTBsRlRsUmZVMVJQVWtGSFJRQklVRVZmVUVGVlUwVkVYMVZRUjFKQlJFVUFTRkJGWDFCQlZWTkZSRjlJTWw5VlVFZFNRVVJGQUZOUFZWSkRSUUJCVGs1UFZVNURSUUJVVWtGRFJRQklVRVZmVlU1RldGQkZRMVJGUkY5VFVFRkRSUUJFUlZORFVrbENSUUJWVGxOVlFsTkRVa2xDUlFCU1JVTlBVa1FBU0ZCRlgwbE9Wa0ZNU1VSZlRVVlVTRTlFQUU1UFZGOUdUMVZPUkFCUVVrOVFSa2xPUkFCVlRrSkpUa1FBVWtWQ1NVNUVBRlZPUVZWVVNFOVNTVnBGUkFCTlJWUklUMFJmVGs5VVgwRk1URTlYUlVRQVNGUlVVRjlXUlZKVFNVOU9YMDVQVkY5VFZWQlFUMUpVUlVRQVFVeFNSVUZFV1Y5U1JWQlBVbFJGUkFCQlEwTkZVRlJGUkFCT1QxUmZTVTFRVEVWTlJVNVVSVVFBVEU5UFVGOUVSVlJGUTFSRlJBQklVRVZmUTFKZlJWaFFSVU5VUlVRQVNGQkZYMHhHWDBWWVVFVkRWRVZFQUVOU1JVRlVSVVFBU1UxZlZWTkZSQUJJVUVWZlVFRlZVMFZFQUZSSlRVVlBWVlJmVDBORFZWSkZSQUJRUVZsTlJVNVVYMUpGVVZWSlVrVkVBRkJTUlVOUFRrUkpWRWxQVGw5U1JWRlZTVkpGUkFCUVVrOVlXVjlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk9SVlJYVDFKTFgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUV4RlRrZFVTRjlTUlZGVlNWSkZSQUJUVTB4ZlEwVlNWRWxHU1VOQlZFVmZVa1ZSVlVsU1JVUUFWVkJIVWtGRVJWOVNSVkZWU1ZKRlJBQlFRVWRGWDBWWVVFbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gwWkJTVXhGUkFCRldGQkZRMVJCVkVsUFRsOUdRVWxNUlVRQVVrVldRVXhKUkVGVVNVOU9YMFpCU1V4RlJBQlRVMHhmU0VGT1JGTklRVXRGWDBaQlNVeEZSQUJNVDBOTFJVUUFWRkpCVGxOR1QxSk5RVlJKVDA1ZlFWQlFURWxGUkFCT1QxUmZUVTlFU1VaSlJVUUFUazlVWDBWWVZFVk9SRVZFQUVKQlRrUlhTVVJVU0Y5TVNVMUpWRjlGV0VORlJVUkZSQUJUU1ZSRlgwbFRYMDlXUlZKTVQwRkVSVVFBU0VWQlJBQkZlSEJsWTNSbFpDQklWRlJRTHdBQVhoTUFBQ1lUQUFBd0VBQUE4QmNBQUowVEFBQVZFZ0FBT1JjQUFQQVNBQUFLRUFBQWRSSUFBSzBTQUFDQ0V3QUFUeFFBQUg4UUFBQ2dGUUFBSXhRQUFJa1NBQUNMRkFBQVRSVUFBTlFSQUFEUEZBQUFFQmdBQU1rV0FBRGNGZ0FBd1JFQUFPQVhBQUM3RkFBQWRCUUFBSHdWQUFEbEZBQUFDQmNBQUI4UUFBQmxGUUFBb3hRQUFDZ1ZBQUFDRlFBQW1SVUFBQ3dRQUFDTEdRQUFUdzhBQU5RT0FBQnFFQUFBemhBQUFBSVhBQUNKRGdBQWJoTUFBQndUQUFCbUZBQUFWaGNBQU1FVEFBRE5Fd0FBYkJNQUFHZ1hBQUJtRndBQVh4Y0FBQ0lUQUFET0R3QUFhUTRBQU5nT0FBQmpGZ0FBeXhNQUFLb09BQUFvRndBQUpoY0FBTVVUQUFCZEZnQUE2QkVBQUdjVEFBQmxFd0FBOGhZQUFITVRBQUFkRndBQStSWUFBUE1SQUFEUERnQUF6aFVBQUF3U0FBQ3pFUUFBcFJFQUFHRVFBQUF5RndBQXV4TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlEQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFCQUFBQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUNBZ0lDQUFBQ0FnQUNBZ0FDQWdJQ0FnSUNBZ0lDQUFNQUJBQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFnQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkc5elpXVmxjQzFoYkdsMlpRQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQVFFQkFRRUJBUUVCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJZMmgxYm10bFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVBQUFFQkFBRUJBQUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJsWTNScGIyNWxiblF0YkdWdVozUm9iMjV5YjNoNUxXTnZibTVsWTNScGIyNEFBQUFBQUFBQUFBQUFBQUFBQUFCeVlXNXpabVZ5TFdWdVkyOWthVzVuY0dkeVlXUmxEUW9OQ2cwS1UwME5DZzBLVkZSUUwwTkZMMVJUVUM4QUFBQUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFJQUFRTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBUUVGQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFBQVFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUVBQUFFQkFRRUJBUUVCQVFFQkFVRUJBUUVCQVFFQkFRRUJBUUFCQUFHQndRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBSUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCT1QxVk9RMFZGUTB0UFZWUk9SVU5VUlZSRlExSkpRa1ZNVlZOSVJWUkZRVVJUUlVGU1EwaFNSMFZEVkVsV1NWUlpURVZPUkVGU1ZrVlBWRWxHV1ZCVVNVOU9VME5JVTBWQldWTlVRVlJEU0VkRlQxSkVTVkpGUTFSUFVsUlNRMGhRUVZKQlRVVlVSVkpWVWtORlFsTkRVa2xDUlVGU1JFOVhUa0ZEUlVsT1JFNUxRMHRWUWxORFVrbENSVWhVVkZBdlFVUlVVQzg9J1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDckxnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMGtCQVhzZ0FFRVFhdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0lCL1FzREFDQUFJQUg5Q3dNQUlBQkJNR29nQWYwTEF3QWdBRUVnYWlBQi9Rc0RBQ0FBUWQwQk5nSWNRUUFMZXdFQmZ3SkFJQUFvQWd3aUF3MEFBa0FnQUNnQ0JFVU5BQ0FBSUFFMkFnUUxBa0FnQUNBQklBSVF4SUNBZ0FBaUF3MEFJQUFvQWd3UEN5QUFJQU0yQWh4QkFDRURJQUFvQWdRaUFVVU5BQ0FBSUFFZ0FpQUFLQUlJRVlHQWdJQUFBQ0lCUlEwQUlBQWdBallDRkNBQUlBRTJBZ3dnQVNFREN5QURDK1R6QVFNT2Z3TitCSDhqZ0lDQWdBQkJFR3NpQXlTQWdJQ0FBQ0FCSVFRZ0FTRUZJQUVoQmlBQklRY2dBU0VJSUFFaENTQUJJUW9nQVNFTElBRWhEQ0FCSVEwZ0FTRU9JQUVoRHdKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSWNJaEJCZjJvTzNRSGFBUUhaQVFJREJBVUdCd2dKQ2dzTURRN1lBUThRMXdFUkV0WUJFeFFWRmhjWUdSb2I0QUhmQVJ3ZEh0VUJIeUFoSWlNa0pkUUJKaWNvS1NvckxOTUIwZ0V0THRFQjBBRXZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlViYkFVZElTVXJQQWM0QlM4MEJUTXdCVFU1UFVGRlNVMVJWVmxkWVdWcGJYRjFlWDJCaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZW50OGZYNS9nQUdCQVlJQmd3R0VBWVVCaGdHSEFZZ0JpUUdLQVlzQmpBR05BWTRCandHUUFaRUJrZ0dUQVpRQmxRR1dBWmNCbUFHWkFab0Jtd0djQVowQm5nR2ZBYUFCb1FHaUFhTUJwQUdsQWFZQnB3R29BYWtCcWdHckFhd0JyUUd1QWE4QnNBR3hBYklCc3dHMEFiVUJ0Z0czQWNzQnlnRzRBY2tCdVFISUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQkFOd0JDMEVBSVJBTXhnRUxRUTRoRUF6RkFRdEJEU0VRRE1RQkMwRVBJUkFNd3dFTFFSQWhFQXpDQVF0QkV5RVFETUVCQzBFVUlSQU13QUVMUVJVaEVBeS9BUXRCRmlFUURMNEJDMEVYSVJBTXZRRUxRUmdoRUF5OEFRdEJHU0VRRExzQkMwRWFJUkFNdWdFTFFSc2hFQXk1QVF0QkhDRVFETGdCQzBFSUlSQU10d0VMUVIwaEVBeTJBUXRCSUNFUURMVUJDMEVmSVJBTXRBRUxRUWNoRUF5ekFRdEJJU0VRRExJQkMwRWlJUkFNc1FFTFFSNGhFQXl3QVF0Qkl5RVFESzhCQzBFU0lSQU1yZ0VMUVJFaEVBeXRBUXRCSkNFUURLd0JDMEVsSVJBTXF3RUxRU1loRUF5cUFRdEJKeUVRREtrQkMwSERBU0VRREtnQkMwRXBJUkFNcHdFTFFTc2hFQXltQVF0QkxDRVFES1VCQzBFdElSQU1wQUVMUVM0aEVBeWpBUXRCTHlFUURLSUJDMEhFQVNFUURLRUJDMEV3SVJBTW9BRUxRVFFoRUF5ZkFRdEJEQ0VRREo0QkMwRXhJUkFNblFFTFFUSWhFQXljQVF0Qk15RVFESnNCQzBFNUlSQU1tZ0VMUVRVaEVBeVpBUXRCeFFFaEVBeVlBUXRCQ3lFUURKY0JDMEU2SVJBTWxnRUxRVFloRUF5VkFRdEJDaUVRREpRQkMwRTNJUkFNa3dFTFFUZ2hFQXlTQVF0QlBDRVFESkVCQzBFN0lSQU1rQUVMUVQwaEVBeVBBUXRCQ1NFUURJNEJDMEVvSVJBTWpRRUxRVDRoRUF5TUFRdEJQeUVRRElzQkMwSEFBQ0VRRElvQkMwSEJBQ0VRRElrQkMwSENBQ0VRRElnQkMwSERBQ0VRREljQkMwSEVBQ0VRRElZQkMwSEZBQ0VRRElVQkMwSEdBQ0VRRElRQkMwRXFJUkFNZ3dFTFFjY0FJUkFNZ2dFTFFjZ0FJUkFNZ1FFTFFja0FJUkFNZ0FFTFFjb0FJUkFNZnd0Qnl3QWhFQXgrQzBITkFDRVFESDBMUWN3QUlSQU1mQXRCemdBaEVBeDdDMEhQQUNFUURIb0xRZEFBSVJBTWVRdEIwUUFoRUF4NEMwSFNBQ0VRREhjTFFkTUFJUkFNZGd0QjFBQWhFQXgxQzBIV0FDRVFESFFMUWRVQUlSQU1jd3RCQmlFUURISUxRZGNBSVJBTWNRdEJCU0VRREhBTFFkZ0FJUkFNYnd0QkJDRVFERzRMUWRrQUlSQU1iUXRCMmdBaEVBeHNDMEhiQUNFUURHc0xRZHdBSVJBTWFndEJBeUVRREdrTFFkMEFJUkFNYUF0QjNnQWhFQXhuQzBIZkFDRVFER1lMUWVFQUlSQU1aUXRCNEFBaEVBeGtDMEhpQUNFUURHTUxRZU1BSVJBTVlndEJBaUVRREdFTFFlUUFJUkFNWUF0QjVRQWhFQXhmQzBIbUFDRVFERjRMUWVjQUlSQU1YUXRCNkFBaEVBeGNDMEhwQUNFUURGc0xRZW9BSVJBTVdndEI2d0FoRUF4WkMwSHNBQ0VRREZnTFFlMEFJUkFNVnd0QjdnQWhFQXhXQzBIdkFDRVFERlVMUWZBQUlSQU1WQXRCOFFBaEVBeFRDMEh5QUNFUURGSUxRZk1BSVJBTVVRdEI5QUFoRUF4UUMwSDFBQ0VRREU4TFFmWUFJUkFNVGd0Qjl3QWhFQXhOQzBINEFDRVFERXdMUWZrQUlSQU1Td3RCK2dBaEVBeEtDMEg3QUNFUURFa0xRZndBSVJBTVNBdEIvUUFoRUF4SEMwSCtBQ0VRREVZTFFmOEFJUkFNUlF0QmdBRWhFQXhFQzBHQkFTRVFERU1MUVlJQklSQU1RZ3RCZ3dFaEVBeEJDMEdFQVNFUURFQUxRWVVCSVJBTVB3dEJoZ0VoRUF3K0MwR0hBU0VRREQwTFFZZ0JJUkFNUEF0QmlRRWhFQXc3QzBHS0FTRVFERG9MUVlzQklSQU1PUXRCakFFaEVBdzRDMEdOQVNFUUREY0xRWTRCSVJBTU5ndEJqd0VoRUF3MUMwR1FBU0VRRERRTFFaRUJJUkFNTXd0QmtnRWhFQXd5QzBHVEFTRVFEREVMUVpRQklSQU1NQXRCbFFFaEVBd3ZDMEdXQVNFUURDNExRWmNCSVJBTUxRdEJtQUVoRUF3c0MwR1pBU0VRRENzTFFab0JJUkFNS2d0Qm13RWhFQXdwQzBHY0FTRVFEQ2dMUVowQklSQU1Kd3RCbmdFaEVBd21DMEdmQVNFUURDVUxRYUFCSVJBTUpBdEJvUUVoRUF3akMwR2lBU0VRRENJTFFhTUJJUkFNSVF0QnBBRWhFQXdnQzBHbEFTRVFEQjhMUWFZQklSQU1IZ3RCcHdFaEVBd2RDMEdvQVNFUURCd0xRYWtCSVJBTUd3dEJxZ0VoRUF3YUMwR3JBU0VRREJrTFFhd0JJUkFNR0F0QnJRRWhFQXdYQzBHdUFTRVFEQllMUVFFaEVBd1ZDMEd2QVNFUURCUUxRYkFCSVJBTUV3dEJzUUVoRUF3U0MwR3pBU0VRREJFTFFiSUJJUkFNRUF0QnRBRWhFQXdQQzBHMUFTRVFEQTRMUWJZQklSQU1EUXRCdHdFaEVBd01DMEc0QVNFUURBc0xRYmtCSVJBTUNndEJ1Z0VoRUF3SkMwRzdBU0VRREFnTFFjWUJJUkFNQnd0QnZBRWhFQXdHQzBHOUFTRVFEQVVMUWI0QklSQU1CQXRCdndFaEVBd0RDMEhBQVNFUURBSUxRY0lCSVJBTUFRdEJ3UUVoRUFzRFFBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkFPeHdFQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCNGZJQ0VqSlNnL1FFRkVSVVpIU0VsS1MweE5UMUJSVWxQZUExZFpXMXhkWUdKbFptZG9hV3ByYkcxdmNIRnljM1IxZG5kNGVYcDdmSDErZ0FHQ0FZVUJoZ0dIQVlrQml3R01BWTBCamdHUEFaQUJrUUdVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0c0QWJrQnVnRzdBYndCdlFHK0FiOEJ3QUhCQWNJQnd3SEVBY1VCeGdISEFjZ0J5UUhLQWNzQnpBSE5BYzRCendIUUFkRUIwZ0hUQWRRQjFRSFdBZGNCMkFIWkFkb0Iyd0hjQWQwQjNnSGdBZUVCNGdIakFlUUI1UUhtQWVjQjZBSHBBZW9CNndIc0FlMEI3Z0h2QWZBQjhRSHlBZk1CbVFLa0FyQUMvZ0wrQWdzZ0FTSUVJQUpIRGZNQlFkMEJJUkFNL3dNTElBRWlFQ0FDUnczZEFVSERBU0VRRFA0REN5QUJJZ0VnQWtjTmtBRkI5d0FoRUF6OUF3c2dBU0lCSUFKSERZWUJRZThBSVJBTS9BTUxJQUVpQVNBQ1J3MS9RZW9BSVJBTSt3TUxJQUVpQVNBQ1J3MTdRZWdBSVJBTStnTUxJQUVpQVNBQ1J3MTRRZVlBSVJBTStRTUxJQUVpQVNBQ1J3MGFRUmdoRUF6NEF3c2dBU0lCSUFKSERSUkJFaUVRRFBjREN5QUJJZ0VnQWtjTldVSEZBQ0VRRFBZREN5QUJJZ0VnQWtjTlNrRS9JUkFNOVFNTElBRWlBU0FDUncxSVFUd2hFQXowQXdzZ0FTSUJJQUpIRFVGQk1TRVFEUE1EQ3lBQUxRQXVRUUZHRGVzRERJY0NDeUFBSUFFaUFTQUNFTUNBZ0lBQVFRRkhEZVlCSUFCQ0FEY0RJQXpuQVFzZ0FDQUJJZ0VnQWhDMGdJQ0FBQ0lRRGVjQklBRWhBUXoxQWdzQ1FDQUJJZ0VnQWtjTkFFRUdJUkFNOEFNTElBQWdBVUVCYWlJQklBSVF1NENBZ0FBaUVBM29BU0FCSVFFTU1Rc2dBRUlBTndNZ1FSSWhFQXpWQXdzZ0FTSVFJQUpIRFN0QkhTRVFETzBEQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVFUUlSQU0xQU1MUVFjaEVBenNBd3NnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM2xBVUVJSVJBTTZ3TUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFSUWhFQXpTQXd0QkNTRVFET29EQ3lBQklRRWdBQ2tESUZBTjVBRWdBU0VCRFBJQ0N3SkFJQUVpQVNBQ1J3MEFRUXNoRUF6cEF3c2dBQ0FCUVFGcUlnRWdBaEMyZ0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVlCSUFFaEFRd05DeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU41d0VnQVNFQkRQQUNDd0pBSUFFaUFTQUNSdzBBUVE4aEVBemxBd3NnQVMwQUFDSVFRVHRHRFFnZ0VFRU5SdzNvQVNBQlFRRnFJUUVNN3dJTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzb0FTQUJJUUVNOGdJTEEwQUNRQ0FCTFFBQVFmQzFnSUFBYWkwQUFDSVFRUUZHRFFBZ0VFRUNSdzNyQVNBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQlFRRnFJZ0VRdVlDQWdBQWlFQTNxQVNBQklRRU05QUlMSUFGQkFXb2lBU0FDUncwQUMwRVNJUkFNNGdNTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzcEFTQUJJUUVNQ2dzZ0FTSUJJQUpIRFFaQkd5RVFET0FEQ3dKQUlBRWlBU0FDUncwQVFSWWhFQXpnQXdzZ0FFR0tnSUNBQURZQ0NDQUFJQUUyQWdRZ0FDQUJJQUlRdUlDQWdBQWlFQTNxQVNBQklRRkJJQ0VRRE1ZREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRZkMzZ0lBQWFpMEFBQ0lRUVFKR0RRQUNRQ0FRUVg5cURnVGxBZXdCQU9zQjdBRUxJQUZCQVdvaEFVRUlJUkFNeUFNTElBRkJBV29pQVNBQ1J3MEFDMEVWSVJBTTN3TUxRUlVoRUF6ZUF3c0RRQUpBSUFFdEFBQkI4TG1BZ0FCcUxRQUFJaEJCQWtZTkFDQVFRWDlxRGdUZUFld0I0QUhyQWV3QkN5QUJRUUZxSWdFZ0FrY05BQXRCR0NFUUROMERDd0pBSUFFaUFTQUNSZzBBSUFCQmk0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRUhJUkFNeEFNTFFSa2hFQXpjQXdzZ0FVRUJhaUVCREFJTEFrQWdBU0lVSUFKSERRQkJHaUVRRE5zREN5QVVJUUVDUUNBVUxRQUFRWE5xRGhUZEF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUFnRHVBZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTTJnTUxBa0FnQVMwQUFDSVFRVHRHRFFBZ0VFRU5SdzNvQVNBQlFRRnFJUUVNNVFJTElBRkJBV29oQVF0QklpRVFETDhEQ3dKQUlBRWlFQ0FDUncwQVFSd2hFQXpZQXd0Q0FDRVJJQkFoQVNBUUxRQUFRVkJxRGpmbkFlWUJBUUlEQkFVR0J3Z0FBQUFBQUFBQUNRb0xEQTBPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQRUJFU0V4UUFDMEVlSVJBTXZRTUxRZ0loRVF6bEFRdENBeUVSRE9RQkMwSUVJUkVNNHdFTFFnVWhFUXppQVF0Q0JpRVJET0VCQzBJSElSRU00QUVMUWdnaEVRemZBUXRDQ1NFUkRONEJDMElLSVJFTTNRRUxRZ3NoRVF6Y0FRdENEQ0VSRE5zQkMwSU5JUkVNMmdFTFFnNGhFUXpaQVF0Q0R5RVJETmdCQzBJS0lSRU0xd0VMUWdzaEVReldBUXRDRENFUkROVUJDMElOSVJFTTFBRUxRZzRoRVF6VEFRdENEeUVSRE5JQkMwSUFJUkVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQXRBQUJCVUdvT04rVUI1QUVBQVFJREJBVUdCK1lCNWdIbUFlWUI1Z0htQWVZQkNBa0tDd3dONWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BUTRQRUJFU0UrWUJDMElDSVJFTTVBRUxRZ01oRVF6akFRdENCQ0VSRE9JQkMwSUZJUkVNNFFFTFFnWWhFUXpnQVF0Q0J5RVJETjhCQzBJSUlSRU0zZ0VMUWdraEVRemRBUXRDQ2lFUkROd0JDMElMSVJFTTJ3RUxRZ3doRVF6YUFRdENEU0VSRE5rQkMwSU9JUkVNMkFFTFFnOGhFUXpYQVF0Q0NpRVJETllCQzBJTElSRU0xUUVMUWd3aEVRelVBUXRDRFNFUkROTUJDMElPSVJFTTBnRUxRZzhoRVF6UkFRc2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzU0FVRWZJUkFNd0FNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVNRaEVBeW5Bd3RCSUNFUURMOERDeUFBSUFFaUVDQUNFTDZBZ0lBQVFYOXFEZ1cyQVFERkFnSFJBZElCQzBFUklSQU1wQU1MSUFCQkFUb0FMeUFRSVFFTXV3TUxJQUVpQVNBQ1J3M1NBVUVrSVJBTXV3TUxJQUVpRFNBQ1J3MGVRY1lBSVJBTXVnTUxJQUFnQVNJQklBSVFzb0NBZ0FBaUVBM1VBU0FCSVFFTXRRRUxJQUVpRUNBQ1J3MG1RZEFBSVJBTXVBTUxBa0FnQVNJQklBSkhEUUJCS0NFUURMZ0RDeUFBUVFBMkFnUWdBRUdNZ0lDQUFEWUNDQ0FBSUFFZ0FSQ3hnSUNBQUNJUURkTUJJQUVoQVF6WUFRc0NRQ0FCSWhBZ0FrY05BRUVwSVJBTXR3TUxJQkF0QUFBaUFVRWdSZzBVSUFGQkNVY04wd0VnRUVFQmFpRUJEQlVMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREJjTFFTb2hFQXkxQXdzQ1FDQUJJaEFnQWtjTkFFRXJJUkFNdFFNTEFrQWdFQzBBQUNJQlFRbEdEUUFnQVVFZ1J3M1ZBUXNnQUMwQUxFRUlSZzNUQVNBUUlRRU1rUU1MQWtBZ0FTSUJJQUpIRFFCQkxDRVFETFFEQ3lBQkxRQUFRUXBIRGRVQklBRkJBV29oQVF6SkFnc2dBU0lPSUFKSERkVUJRUzhoRUF5eUF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQWdFRUYyYWc0RUFOd0IzQUVBMmdFTElBRWhBUXpnQVFzZ0FVRUJhaUlCSUFKSERRQUxRVEVoRUF5eEF3dEJNaUVRSUFFaUZDQUNSZzJ3QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRTnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCOEx1QWdBQnFMUUFBUncwQkFrQWdBVUVEUncwQVFRWWhBUXlXQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXNRTUxJQUJCQURZQ0FDQVVJUUVNMlFFTFFUTWhFQ0FCSWhRZ0FrWU5yd01nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFSWFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZlM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJDRWNOQUVFRklRRU1sUU1MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExBREN5QUFRUUEyQWdBZ0ZDRUJETmdCQzBFMElSQWdBU0lVSUFKR0RhNERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQldvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSFF3b0NBQUdvdEFBQkhEUUVDUUNBQlFRVkhEUUJCQnlFQkRKUURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl2QXdzZ0FFRUFOZ0lBSUJRaEFRelhBUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVHQXZvQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrWU5DaUFCSVFFTTNRRUxJQUZCQVdvaUFTQUNSdzBBQzBFd0lSQU1yZ01MUVRBaEVBeXRBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVGMmFnNEUyUUhhQWRvQjJRSGFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUZ2hFQXl0QXd0Qk9DRVFES3dEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVFSlJ3MERDeUFCUVFGcUlnRWdBa2NOQUF0QlBDRVFES3NEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFDUUFKQUlCQkJkbW9PQk5vQkFRSGFBUUFMSUJCQkxFWU4yd0VMSUFFaEFRd0VDeUFCUVFGcUlnRWdBa2NOQUF0QlB5RVFES29EQ3lBQklRRU0yd0VMUWNBQUlSQWdBU0lVSUFKR0RhZ0RJQUlnRkdzZ0FDZ0NBQ0lCYWlFV0lCUWdBV3RCQm1vaEZ3SkFBMEFnRkMwQUFFRWdjaUFCUVlEQWdJQUFhaTBBQUVjTkFTQUJRUVpHRFk0RElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURLa0RDeUFBUVFBMkFnQWdGQ0VCQzBFMklSQU1qZ01MQWtBZ0FTSVBJQUpIRFFCQndRQWhFQXluQXdzZ0FFR01nSUNBQURZQ0NDQUFJQTgyQWdRZ0R5RUJJQUF0QUN4QmYyb09CTTBCMVFIWEFka0Jod01MSUFGQkFXb2hBUXpNQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0J5SUJBZ0VFRy9mMnBCL3dGeFFScEpHMEgvQVhFaUVFRUpSZzBBSUJCQklFWU5BQUpBQWtBQ1FBSkFJQkJCblg5cURoTUFBd01EQXdNREF3RURBd01EQXdNREF3TUNBd3NnQVVFQmFpRUJRVEVoRUF5UkF3c2dBVUVCYWlFQlFUSWhFQXlRQXdzZ0FVRUJhaUVCUVRNaEVBeVBBd3NnQVNFQkROQUJDeUFCUVFGcUlnRWdBa2NOQUF0Qk5TRVFES1VEQzBFMUlSQU1wQU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMeUFnQUJxTFFBQVFRRkdEUUFnQVNFQkROTUJDeUFCUVFGcUlnRWdBa2NOQUF0QlBTRVFES1FEQzBFOUlSQU1vd01MSUFBZ0FTSUJJQUlRc0lDQWdBQWlFQTNXQVNBQklRRU1BUXNnRUVFQmFpRUJDMEU4SVJBTWh3TUxBa0FnQVNJQklBSkhEUUJCd2dBaEVBeWdBd3NDUUFOQUFrQWdBUzBBQUVGM2FnNFlBQUwrQXY0Q2hBUCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nSUEvZ0lMSUFGQkFXb2lBU0FDUncwQUMwSENBQ0VRREtBREN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnZRRWdBU0VCQzBFc0lSQU1oUU1MSUFFaUFTQUNSdzNUQVVIRUFDRVFESjBEQ3dOQUFrQWdBUzBBQUVHUXdJQ0FBR290QUFCQkFVWU5BQ0FCSVFFTXR3SUxJQUZCQVdvaUFTQUNSdzBBQzBIRkFDRVFESndEQ3lBTkxRQUFJaEJCSUVZTnN3RWdFRUU2UncyQkF5QUFLQUlFSVFFZ0FFRUFOZ0lFSUFBZ0FTQU5FSytBZ0lBQUlnRU4wQUVnRFVFQmFpRUJETE1DQzBISEFDRVFJQUVpRFNBQ1JnMmFBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFaRENnSUFBYWkwQUFFY05nQU1nQVVFRlJnMzBBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlhQXd0QnlBQWhFQ0FCSWcwZ0FrWU5tUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFSmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1d3b0NBQUdvdEFBQkhEZjhDQWtBZ0FVRUpSdzBBUVFJaEFRejFBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbVFNTEFrQWdBU0lOSUFKSERRQkJ5UUFoRUF5WkF3c0NRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaSi9hZzRIQUlBRGdBT0FBNEFEZ0FNQmdBTUxJQTFCQVdvaEFVRStJUkFNZ0FNTElBMUJBV29oQVVFL0lSQU0vd0lMUWNvQUlSQWdBU0lOSUFKR0RaY0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQVdvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQm9NS0FnQUJxTFFBQVJ3MzlBaUFCUVFGR0RmQUNJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmNEQzBITEFDRVFJQUVpRFNBQ1JnMldBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVE1cUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhTENnSUFBYWkwQUFFY04vQUlnQVVFT1JnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlXQXd0QnpBQWhFQ0FCSWcwZ0FrWU5sUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFUGFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSEF3b0NBQUdvdEFBQkhEZnNDQWtBZ0FVRVBSdzBBUVFNaEFRenhBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbFFNTFFjMEFJUkFnQVNJTklBSkdEWlFESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkJXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzM2QWdKQUlBRkJCVWNOQUVFRUlRRU04QUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpRREN3SkFJQUVpRFNBQ1J3MEFRYzRBSVJBTWxBTUxBa0FDUUFKQUFrQWdEUzBBQUNJQlFTQnlJQUVnQVVHL2YycEIvd0Z4UVJwSkcwSC9BWEZCblg5cURoTUEvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQ0FmMEMvUUw5QWdJRC9RSUxJQTFCQVdvaEFVSEJBQ0VRRFAwQ0N5QU5RUUZxSVFGQndnQWhFQXo4QWdzZ0RVRUJhaUVCUWNNQUlSQU0rd0lMSUExQkFXb2hBVUhFQUNFUURQb0NDd0pBSUFFaUFTQUNSZzBBSUFCQmpZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSEZBQ0VRRFBvQ0MwSFBBQ0VRREpJREN5QVFJUUVDUUFKQUlCQXRBQUJCZG1vT0JBR29BcWdDQUtnQ0N5QVFRUUZxSVFFTFFTY2hFQXo0QWdzQ1FDQUJJZ0VnQWtjTkFFSFJBQ0VRREpFREN3SkFJQUV0QUFCQklFWU5BQ0FCSVFFTWpRRUxJQUZCQVdvaEFTQUFMUUF0UVFGeFJRM0hBU0FCSVFFTWpBRUxJQUVpRnlBQ1J3M0lBVUhTQUNFUURJOERDMEhUQUNFUUlBRWlGQ0FDUmcyT0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUUZxSVJjRFFDQVVMUUFBSUFGQjFzS0FnQUJxTFFBQVJ3M01BU0FCUVFGR0RjY0JJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFESTREQ3dKQUlBRWlBU0FDUncwQVFkVUFJUkFNamdNTElBRXRBQUJCQ2tjTnpBRWdBVUVCYWlFQkRNY0JDd0pBSUFFaUFTQUNSdzBBUWRZQUlSQU1qUU1MQWtBQ1FDQUJMUUFBUVhacURnUUF6UUhOQVFITkFRc2dBVUVCYWlFQkRNY0JDeUFCUVFGcUlRRkJ5Z0FoRUF6ekFnc2dBQ0FCSWdFZ0FoQ3VnSUNBQUNJUURjc0JJQUVoQVVITkFDRVFEUElDQ3lBQUxRQXBRU0pHRFlVRERLWUNDd0pBSUFFaUFTQUNSdzBBUWRzQUlSQU1pZ01MUVFBaEZFRUJJUmRCQVNFV1FRQWhFQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FCTFFBQVFWQnFEZ3JVQWRNQkFBRUNBd1FGQmdqVkFRdEJBaUVRREFZTFFRTWhFQXdGQzBFRUlSQU1CQXRCQlNFUURBTUxRUVloRUF3Q0MwRUhJUkFNQVF0QkNDRVFDMEVBSVJkQkFDRVdRUUFoRkF6TUFRdEJDU0VRUVFFaEZFRUFJUmRCQUNFV0RNc0JDd0pBSUFFaUFTQUNSdzBBUWQwQUlSQU1pUU1MSUFFdEFBQkJMa2NOekFFZ0FVRUJhaUVCREtZQ0N5QUJJZ0VnQWtjTnpBRkIzd0FoRUF5SEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVk2QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQjBBQWhFQXp1QWd0QjRBQWhFQXlHQXd0QjRRQWhFQ0FCSWdFZ0FrWU5oUU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZUxDZ0lBQWFpMEFBRWNOelFFZ0ZFRURSZzNNQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RkF3dEI0Z0FoRUNBQklnRWdBa1lOaEFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRUNhaUVYQTBBZ0FTMEFBQ0FVUWViQ2dJQUFhaTBBQUVjTnpBRWdGRUVDUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUVBd3RCNHdBaEVDQUJJZ0VnQWtZTmd3TWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlbkNnSUFBYWkwQUFFY055d0VnRkVFRFJnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlEQXdzQ1FDQUJJZ0VnQWtjTkFFSGxBQ0VRRElNREN5QUFJQUZCQVdvaUFTQUNFS2lBZ0lBQUloQU56UUVnQVNFQlFkWUFJUkFNNlFJTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQUpBSUJCQnVIOXFEZ3NBQWM4Qnp3SFBBYzhCendIUEFjOEJ6d0VDendFTElBRkJBV29oQVVIU0FDRVFETzBDQ3lBQlFRRnFJUUZCMHdBaEVBenNBZ3NnQVVFQmFpRUJRZFFBSVJBTTZ3SUxJQUZCQVdvaUFTQUNSdzBBQzBIa0FDRVFESUlEQzBIa0FDRVFESUVEQ3dOQUFrQWdBUzBBQUVId3dvQ0FBR290QUFBaUVFRUJSZzBBSUJCQmZtb09BODhCMEFIUkFkSUJDeUFCUVFGcUlnRWdBa2NOQUF0QjVnQWhFQXlBQXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFFTUF3dEI1d0FoRUF6L0Fnc0RRQUpBSUFFdEFBQkI4TVNBZ0FCcUxRQUFJaEJCQVVZTkFBSkFJQkJCZm1vT0JOSUIwd0hVQVFEVkFRc2dBU0VCUWRjQUlSQU01d0lMSUFGQkFXb2lBU0FDUncwQUMwSG9BQ0VRRFA0Q0N3SkFJQUVpQVNBQ1J3MEFRZWtBSVJBTS9nSUxBa0FnQVMwQUFDSVFRWFpxRGhxNkFkVUIxUUc4QWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWNvQjFRSFZBUURUQVFzZ0FVRUJhaUVCQzBFR0lSQU00d0lMQTBBQ1FDQUJMUUFBUWZER2dJQUFhaTBBQUVFQlJnMEFJQUVoQVF5ZUFnc2dBVUVCYWlJQklBSkhEUUFMUWVvQUlSQU0rd0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlc0FJUkFNK2dJTEFrQWdBU0lCSUFKSERRQkI3QUFoRUF6NkFnc2dBVUVCYWlFQkRBRUxBa0FnQVNJQklBSkhEUUJCN1FBaEVBejVBZ3NnQVVFQmFpRUJDMEVFSVJBTTNnSUxBa0FnQVNJVUlBSkhEUUJCN2dBaEVBejNBZ3NnRkNFQkFrQUNRQUpBSUJRdEFBQkI4TWlBZ0FCcUxRQUFRWDlxRGdmVUFkVUIxZ0VBbkFJQkF0Y0JDeUFVUVFGcUlRRU1DZ3NnRkVFQmFpRUJETTBCQzBFQUlSQWdBRUVBTmdJY0lBQkJtNUtBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBejJBZ3NDUUFOQUFrQWdBUzBBQUVId3lJQ0FBR290QUFBaUVFRUVSZzBBQWtBQ1FDQVFRWDlxRGdmU0FkTUIxQUhaQVFBRUFka0JDeUFCSVFGQjJnQWhFQXpnQWdzZ0FVRUJhaUVCUWR3QUlSQU0zd0lMSUFGQkFXb2lBU0FDUncwQUMwSHZBQ0VRRFBZQ0N5QUJRUUZxSVFFTXl3RUxBa0FnQVNJVUlBSkhEUUJCOEFBaEVBejFBZ3NnRkMwQUFFRXZSdzNVQVNBVVFRRnFJUUVNQmdzQ1FDQUJJaFFnQWtjTkFFSHhBQ0VRRFBRQ0N3SkFJQlF0QUFBaUFVRXZSdzBBSUJSQkFXb2hBVUhkQUNFUUROc0NDeUFCUVhacUlnUkJGa3NOMHdGQkFTQUVkRUdKZ0lBQ2NVVU4wd0VNeWdJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQlFkNEFJUkFNMmdJTFFmSUFJUkFNOGdJTEFrQWdBU0lVSUFKSERRQkI5QUFoRUF6eUFnc2dGQ0VCQWtBZ0ZDMEFBRUh3eklDQUFHb3RBQUJCZjJvT0E4a0NsQUlBMUFFTFFlRUFJUkFNMkFJTEFrQWdBU0lVSUFKR0RRQURRQUpBSUJRdEFBQkI4TXFBZ0FCcUxRQUFJZ0ZCQTBZTkFBSkFJQUZCZjJvT0Fzc0NBTlVCQ3lBVUlRRkIzd0FoRUF6YUFnc2dGRUVCYWlJVUlBSkhEUUFMUWZNQUlSQU04UUlMUWZNQUlSQU04QUlMQWtBZ0FTSUJJQUpHRFFBZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZUFBSVJBTTF3SUxRZlVBSVJBTTd3SUxBa0FnQVNJQklBSkhEUUJCOWdBaEVBenZBZ3NnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQkMwRURJUkFNMUFJTEEwQWdBUzBBQUVFZ1J3M0RBaUFCUVFGcUlnRWdBa2NOQUF0Qjl3QWhFQXpzQWdzQ1FDQUJJZ0VnQWtjTkFFSDRBQ0VRRE93Q0N5QUJMUUFBUVNCSERjNEJJQUZCQVdvaEFRenZBUXNnQUNBQklnRWdBaENzZ0lDQUFDSVFEYzRCSUFFaEFReU9BZ3NDUUNBQklnUWdBa2NOQUVINkFDRVFET29DQ3lBRUxRQUFRY3dBUnczUkFTQUVRUUZxSVFGQkV5RVFETThCQ3dKQUlBRWlCQ0FDUncwQVFmc0FJUkFNNlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFOQUlBUXRBQUFnQVVId3pvQ0FBR290QUFCSERkQUJJQUZCQlVZTnpnRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIrd0FoRUF6b0Fnc0NRQ0FCSWdRZ0FrY05BRUg4QUNFUURPZ0NDd0pBQWtBZ0JDMEFBRUc5ZjJvT0RBRFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRSFJBUUhSQVFzZ0JFRUJhaUVCUWVZQUlSQU16d0lMSUFSQkFXb2hBVUhuQUNFUURNNENDd0pBSUFFaUJDQUNSdzBBUWYwQUlSQU01d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnp3RWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmMEFJUkFNNXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRUNFUURNd0JDd0pBSUFFaUJDQUNSdzBBUWY0QUlSQU01Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZiT2dJQUFhaTBBQUVjTnpnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmNEFJUkFNNWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRmlFUURNc0JDd0pBSUFFaUJDQUNSdzBBUWY4QUlSQU01UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZ6T2dJQUFhaTBBQUVjTnpRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmOEFJUkFNNVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQlNFUURNb0JDd0pBSUFFaUJDQUNSdzBBUVlBQklSQU01QUlMSUFRdEFBQkIyUUJIRGNzQklBUkJBV29oQVVFSUlSQU15UUVMQWtBZ0FTSUVJQUpIRFFCQmdRRWhFQXpqQWdzQ1FBSkFJQVF0QUFCQnNuOXFEZ01BekFFQnpBRUxJQVJCQVdvaEFVSHJBQ0VRRE1vQ0N5QUVRUUZxSVFGQjdBQWhFQXpKQWdzQ1FDQUJJZ1FnQWtjTkFFR0NBU0VRRE9JQ0N3SkFBa0FnQkMwQUFFRzRmMm9PQ0FETEFjc0J5d0hMQWNzQnl3RUJ5d0VMSUFSQkFXb2hBVUhxQUNFUURNa0NDeUFFUVFGcUlRRkI3UUFoRUF6SUFnc0NRQ0FCSWdRZ0FrY05BRUdEQVNFUURPRUNDeUFDSUFScklBQW9BZ0FpQVdvaEVDQUVJQUZyUVFKcUlSUUNRQU5BSUFRdEFBQWdBVUdBejRDQUFHb3RBQUJIRGNrQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdFRFlDQUVHREFTRVFET0VDQzBFQUlSQWdBRUVBTmdJQUlCUkJBV29oQVF6R0FRc0NRQ0FCSWdRZ0FrY05BRUdFQVNFUURPQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFScUlSQUNRQU5BSUFRdEFBQWdBVUdEejRDQUFHb3RBQUJIRGNnQklBRkJCRVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHRUFTRVFET0FDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU01oRUF6RkFRc0NRQ0FCSWdRZ0FrY05BRUdGQVNFUUROOENDd0pBQWtBZ0JDMEFBRUcwZjJvT0NBRElBY2dCeUFISUFjZ0J5QUVCeUFFTElBUkJBV29oQVVIdkFDRVFETVlDQ3lBRVFRRnFJUUZCOEFBaEVBekZBZ3NDUUNBQklnUWdBa2NOQUVHR0FTRVFETjRDQ3lBRUxRQUFRY1VBUnczRkFTQUVRUUZxSVFFTWd3SUxBa0FnQVNJRUlBSkhEUUJCaHdFaEVBemRBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCaU0rQWdBQnFMUUFBUnczRkFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmh3RWhFQXpkQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUV0SVJBTXdnRUxBa0FnQVNJRUlBSkhEUUJCaUFFaEVBemNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUnczRUFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmlBRWhFQXpjQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVwSVJBTXdRRUxBa0FnQVNJQklBSkhEUUJCaVFFaEVBemJBZ3RCQVNFUUlBRXRBQUJCM3dCSERjQUJJQUZCQVdvaEFReUJBZ3NDUUNBQklnUWdBa2NOQUVHS0FTRVFETm9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFEUUNBRUxRQUFJQUZCak0rQWdBQnFMUUFBUnczQkFTQUJRUUZHRGE4Q0lBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZb0JJUkFNMlFJTEFrQWdBU0lFSUFKSERRQkJpd0VoRUF6WkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJqcytBZ0FCcUxRQUFSdzNCQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaXdFaEVBelpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUNJUkFNdmdFTEFrQWdBU0lFSUFKSERRQkJqQUVoRUF6WUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzNBQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCakFFaEVBellBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWZJUkFNdlFFTEFrQWdBU0lFSUFKSERRQkJqUUVoRUF6WEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4cytBZ0FCcUxRQUFSdzIvQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCalFFaEVBelhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUpJUkFNdkFFTEFrQWdBU0lFSUFKSERRQkJqZ0VoRUF6V0Fnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQXZ3Ry9BYjhCdndHL0FRRy9BUXNnQkVFQmFpRUJRZmdBSVJBTXZRSUxJQVJCQVdvaEFVSDVBQ0VRREx3Q0N3SkFJQUVpQkNBQ1J3MEFRWThCSVJBTTFRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRWkhQZ0lBQWFpMEFBRWNOdlFFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVk4QklSQU0xUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHQ0VRRExvQkN3SkFJQUVpQkNBQ1J3MEFRWkFCSVJBTTFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWmZQZ0lBQWFpMEFBRWNOdkFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpBQklSQU0xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGeUVRRExrQkN3SkFJQUVpQkNBQ1J3MEFRWkVCSVJBTTB3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRWnJQZ0lBQWFpMEFBRWNOdXdFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpFQklSQU0wd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGU0VRRExnQkN3SkFJQUVpQkNBQ1J3MEFRWklCSVJBTTBnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYUhQZ0lBQWFpMEFBRWNOdWdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpJQklSQU0wZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIaUVRRExjQkN3SkFJQUVpQkNBQ1J3MEFRWk1CSVJBTTBRSUxJQVF0QUFCQnpBQkhEYmdCSUFSQkFXb2hBVUVLSVJBTXRnRUxBa0FnQkNBQ1J3MEFRWlFCSVJBTTBBSUxBa0FDUUNBRUxRQUFRYjkvYWc0UEFMa0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQkFia0JDeUFFUVFGcUlRRkIvZ0FoRUF5M0Fnc2dCRUVCYWlFQlFmOEFJUkFNdGdJTEFrQWdCQ0FDUncwQVFaVUJJUkFNendJTEFrQUNRQ0FFTFFBQVFiOS9hZzREQUxnQkFiZ0JDeUFFUVFGcUlRRkIvUUFoRUF5MkFnc2dCRUVCYWlFRVFZQUJJUkFNdFFJTEFrQWdCQ0FDUncwQVFaWUJJUkFNemdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFhZlBnSUFBYWkwQUFFY050Z0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWllCSVJBTXpnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkN5RVFETE1CQ3dKQUlBUWdBa2NOQUVHWEFTRVFETTBDQ3dKQUFrQUNRQUpBSUFRdEFBQkJVMm9PSXdDNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQkFiZ0J1QUc0QWJnQnVBRUN1QUc0QWJnQkE3Z0JDeUFFUVFGcUlRRkIrd0FoRUF5MkFnc2dCRUVCYWlFQlFmd0FJUkFNdFFJTElBUkJBV29oQkVHQkFTRVFETFFDQ3lBRVFRRnFJUVJCZ2dFaEVBeXpBZ3NDUUNBRUlBSkhEUUJCbUFFaEVBek1BZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCcWMrQWdBQnFMUUFBUncyMEFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1BRWhFQXpNQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVaSVJBTXNRRUxBa0FnQkNBQ1J3MEFRWmtCSVJBTXl3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYTdQZ0lBQWFpMEFBRWNOc3dFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVprQklSQU15d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCaUVRRExBQkN3SkFJQVFnQWtjTkFFR2FBU0VRRE1vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzB6NENBQUdvdEFBQkhEYklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdhQVNFUURNb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSd2hFQXl2QVFzQ1FDQUVJQUpIRFFCQm13RWhFQXpKQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRzK0FnQUJxTFFBQVJ3MnhBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtd0VoRUF6SkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbklSQU1yZ0VMQWtBZ0JDQUNSdzBBUVp3QklSQU15QUlMQWtBQ1FDQUVMUUFBUWF4L2FnNENBQUd4QVFzZ0JFRUJhaUVFUVlZQklSQU1yd0lMSUFSQkFXb2hCRUdIQVNFUURLNENDd0pBSUFRZ0FrY05BRUdkQVNFUURNY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUc0ejRDQUFHb3RBQUJIRGE4QklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZEFTRVFETWNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1loRUF5c0FRc0NRQ0FFSUFKSERRQkJuZ0VoRUF6R0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1cytBZ0FCcUxRQUFSdzJ1QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbmdFaEVBekdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRURJUkFNcXdFTEFrQWdCQ0FDUncwQVFaOEJJUkFNeFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05yUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjhCSVJBTXhRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkRDRVFES29CQ3dKQUlBUWdBa2NOQUVHZ0FTRVFETVFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVHOHo0Q0FBR290QUFCSERhd0JJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2dBU0VRRE1RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVEwaEVBeXBBUXNDUUNBRUlBSkhEUUJCb1FFaEVBekRBZ3NDUUFKQUlBUXRBQUJCdW45cURnc0FyQUdzQWF3QnJBR3NBYXdCckFHc0Fhd0JBYXdCQ3lBRVFRRnFJUVJCaXdFaEVBeXFBZ3NnQkVFQmFpRUVRWXdCSVJBTXFRSUxBa0FnQkNBQ1J3MEFRYUlCSVJBTXdnSUxJQVF0QUFCQjBBQkhEYWtCSUFSQkFXb2hCQXpwQVFzQ1FDQUVJQUpIRFFCQm93RWhFQXpCQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NCcWdHcUFhb0JxZ0dxQVFDcUFRc2dCRUVCYWlFRVFZNEJJUkFNcUFJTElBUkJBV29oQVVFaUlSQU1wZ0VMQWtBZ0JDQUNSdzBBUWFRQklSQU13QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWNEUGdJQUFhaTBBQUVjTnFBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhUUJJUkFNd0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCSFNFUURLVUJDd0pBSUFRZ0FrY05BRUdsQVNFUURMOENDd0pBQWtBZ0JDMEFBRUd1ZjJvT0F3Q29BUUdvQVFzZ0JFRUJhaUVFUVpBQklSQU1wZ0lMSUFSQkFXb2hBVUVFSVJBTXBBRUxBa0FnQkNBQ1J3MEFRYVlCSVJBTXZnSUxBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUtvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQWFvQkFhb0JxZ0VDcWdHcUFRT3FBYW9CQktvQkN5QUVRUUZxSVFSQmlBRWhFQXlvQWdzZ0JFRUJhaUVFUVlrQklSQU1wd0lMSUFSQkFXb2hCRUdLQVNFUURLWUNDeUFFUVFGcUlRUkJqd0VoRUF5bEFnc2dCRUVCYWlFRVFaRUJJUkFNcEFJTEFrQWdCQ0FDUncwQVFhY0JJUkFNdlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05wUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWNCSVJBTXZRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVTRVFES0lCQ3dKQUlBUWdBa2NOQUVHb0FTRVFETHdDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIQ3o0Q0FBR290QUFCSERhUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR29BU0VRREx3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVN3aEVBeWhBUXNDUUNBRUlBSkhEUUJCcVFFaEVBeTdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCeGMrQWdBQnFMUUFBUncyakFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFRRWhFQXk3QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVySVJBTW9BRUxBa0FnQkNBQ1J3MEFRYW9CSVJBTXVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRY3JQZ0lBQWFpMEFBRWNOb2dFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFvQklSQU11Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGQ0VRREo4QkN3SkFJQVFnQWtjTkFFR3JBU0VRRExrQ0N3SkFBa0FDUUFKQUlBUXRBQUJCdm45cURnOEFBUUtrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQkE2UUJDeUFFUVFGcUlRUkJrd0VoRUF5aUFnc2dCRUVCYWlFRVFaUUJJUkFNb1FJTElBUkJBV29oQkVHVkFTRVFES0FDQ3lBRVFRRnFJUVJCbGdFaEVBeWZBZ3NDUUNBRUlBSkhEUUJCckFFaEVBeTRBZ3NnQkMwQUFFSEZBRWNObndFZ0JFRUJhaUVFRE9BQkN3SkFJQVFnQWtjTkFFR3RBU0VRRExjQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSE56NENBQUdvdEFBQkhEWjhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd0QVNFUURMY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRNGhFQXljQVFzQ1FDQUVJQUpIRFFCQnJnRWhFQXkyQWdzZ0JDMEFBRUhRQUVjTm5RRWdCRUVCYWlFQlFTVWhFQXliQVFzQ1FDQUVJQUpIRFFCQnJ3RWhFQXkxQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3MmRBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyd0VoRUF5MUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFcUlSQU1tZ0VMQWtBZ0JDQUNSdzBBUWJBQklSQU10QUlMQWtBQ1FDQUVMUUFBUWF0L2FnNExBSjBCblFHZEFaMEJuUUdkQVowQm5RR2RBUUdkQVFzZ0JFRUJhaUVFUVpvQklSQU1td0lMSUFSQkFXb2hCRUdiQVNFUURKb0NDd0pBSUFRZ0FrY05BRUd4QVNFUURMTUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0ZBQ2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BRUJuQUVMSUFSQkFXb2hCRUdaQVNFUURKb0NDeUFFUVFGcUlRUkJuQUVoRUF5WkFnc0NRQ0FFSUFKSERRQkJzZ0VoRUF5eUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkIyYytBZ0FCcUxRQUFSdzJhQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCc2dFaEVBeXlBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWhJUkFNbHdFTEFrQWdCQ0FDUncwQVFiTUJJUkFNc1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFkM1BnSUFBYWkwQUFFY05tUUVnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYk1CSVJBTXNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdpRVFESllCQ3dKQUlBUWdBa2NOQUVHMEFTRVFETEFDQ3dKQUFrQUNRQ0FFTFFBQVFidC9hZzRSQUpvQm1nR2FBWm9CbWdHYUFab0JtZ0dhQVFHYUFab0JtZ0dhQVpvQkFwb0JDeUFFUVFGcUlRUkJuUUVoRUF5WUFnc2dCRUVCYWlFRVFaNEJJUkFNbHdJTElBUkJBV29oQkVHZkFTRVFESllDQ3dKQUlBUWdBa2NOQUVHMUFTRVFESzhDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIa3o0Q0FBR290QUFCSERaY0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzFBU0VRREs4Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNnaEVBeVVBUXNDUUNBRUlBSkhEUUJCdGdFaEVBeXVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCNnMrQWdBQnFMUUFBUncyV0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRnRWhFQXl1QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVISVJBTWt3RUxBa0FnQkNBQ1J3MEFRYmNCSVJBTXJRSUxBa0FDUUNBRUxRQUFRYnQvYWc0T0FKWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVFHV0FRc2dCRUVCYWlFRVFhRUJJUkFNbEFJTElBUkJBV29oQkVHaUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVHNEFTRVFES3dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERaUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzRBU0VRREt3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJJaEVBeVJBUXNDUUNBRUlBSkhEUUJCdVFFaEVBeXJBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUncyVEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVRRWhFQXlyQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVnSVJBTWtBRUxBa0FnQkNBQ1J3MEFRYm9CSVJBTXFnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOa2dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJvQklSQU1xZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEeUVRREk4QkN3SkFJQVFnQWtjTkFFRzdBU0VRREtrQ0N3SkFBa0FnQkMwQUFFRzNmMm9PQndDU0FaSUJrZ0dTQVpJQkFaSUJDeUFFUVFGcUlRUkJwUUVoRUF5UUFnc2dCRUVCYWlFRVFhWUJJUkFNandJTEFrQWdCQ0FDUncwQVFid0JJUkFNcUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCMm9oRUFKQUEwQWdCQzBBQUNBQlFmVFBnSUFBYWkwQUFFY05rQUVnQVVFSFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYndCSVJBTXFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkd5RVFESTBCQ3dKQUlBUWdBa2NOQUVHOUFTRVFES2NDQ3dKQUFrQUNRQ0FFTFFBQVFiNS9hZzRTQUpFQmtRR1JBWkVCa1FHUkFaRUJrUUdSQVFHUkFaRUJrUUdSQVpFQmtRRUNrUUVMSUFSQkFXb2hCRUdrQVNFUURJOENDeUFFUVFGcUlRUkJwd0VoRUF5T0Fnc2dCRUVCYWlFRVFhZ0JJUkFNalFJTEFrQWdCQ0FDUncwQVFiNEJJUkFNcGdJTElBUXRBQUJCemdCSERZMEJJQVJCQVdvaEJBelBBUXNDUUNBRUlBSkhEUUJCdndFaEVBeWxBZ3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBQUVDQTV3QkJBVUduQUdjQVp3QkJ3Z0pDZ3VjQVF3TkRnK2NBUXNnQkVFQmFpRUJRZWdBSVJBTW1nSUxJQVJCQVdvaEFVSHBBQ0VRREprQ0N5QUVRUUZxSVFGQjdnQWhFQXlZQWdzZ0JFRUJhaUVCUWZJQUlSQU1sd0lMSUFSQkFXb2hBVUh6QUNFUURKWUNDeUFFUVFGcUlRRkI5Z0FoRUF5VkFnc2dCRUVCYWlFQlFmY0FJUkFNbEFJTElBUkJBV29oQVVINkFDRVFESk1DQ3lBRVFRRnFJUVJCZ3dFaEVBeVNBZ3NnQkVFQmFpRUVRWVFCSVJBTWtRSUxJQVJCQVdvaEJFR0ZBU0VRREpBQ0N5QUVRUUZxSVFSQmtnRWhFQXlQQWdzZ0JFRUJhaUVFUVpnQklSQU1qZ0lMSUFSQkFXb2hCRUdnQVNFUURJMENDeUFFUVFGcUlRUkJvd0VoRUF5TUFnc2dCRUVCYWlFRVFhb0JJUkFNaXdJTEFrQWdCQ0FDUmcwQUlBQkJrSUNBZ0FBMkFnZ2dBQ0FFTmdJRVFhc0JJUkFNaXdJTFFjQUJJUkFNb3dJTElBQWdCU0FDRUtxQWdJQUFJZ0VOaXdFZ0JTRUJERndMQWtBZ0JpQUNSZzBBSUFaQkFXb2hCUXlOQVF0QndnRWhFQXloQWdzRFFBSkFJQkF0QUFCQmRtb09CSXdCQUFDUEFRQUxJQkJCQVdvaUVDQUNSdzBBQzBIREFTRVFES0FDQ3dKQUlBY2dBa1lOQUNBQVFaR0FnSUFBTmdJSUlBQWdCellDQkNBSElRRkJBU0VRREljQ0MwSEVBU0VRREo4Q0N3SkFJQWNnQWtjTkFFSEZBU0VRREo4Q0N3SkFBa0FnQnkwQUFFRjJhZzRFQWM0QnpnRUF6Z0VMSUFkQkFXb2hCZ3lOQVFzZ0IwRUJhaUVGRElrQkN3SkFJQWNnQWtjTkFFSEdBU0VRREo0Q0N3SkFBa0FnQnkwQUFFRjJhZzRYQVk4Qmp3RUJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBSThCQ3lBSFFRRnFJUWNMUWJBQklSQU1oQUlMQWtBZ0NDQUNSdzBBUWNnQklSQU1uUUlMSUFndEFBQkJJRWNOalFFZ0FFRUFPd0V5SUFoQkFXb2hBVUd6QVNFUURJTUNDeUFCSVJjQ1FBTkFJQmNpQnlBQ1JnMEJJQWN0QUFCQlVHcEIvd0Z4SWhCQkNrOE56QUVDUUNBQUx3RXlJaFJCbVROTERRQWdBQ0FVUVFwc0loUTdBVElnRUVILy93TnpJQlJCL3Y4RGNVa05BQ0FIUVFGcUlSY2dBQ0FVSUJCcUloQTdBVElnRUVILy93TnhRZWdIU1EwQkN3dEJBQ0VRSUFCQkFEWUNIQ0FBUWNHSmdJQUFOZ0lRSUFCQkRUWUNEQ0FBSUFkQkFXbzJBaFFNbkFJTFFjY0JJUkFNbXdJTElBQWdDQ0FDRUs2QWdJQUFJaEJGRGNvQklCQkJGVWNOakFFZ0FFSElBVFlDSENBQUlBZzJBaFFnQUVISmw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURKb0NDd0pBSUFrZ0FrY05BRUhNQVNFUURKb0NDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdDUzBBQUVGUWFnNEtsZ0dWQVFBQkFnTUVCUVlJbHdFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNamdFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd5TkFRc0NRQ0FLSUFKSERRQkJ6Z0VoRUF5WkFnc2dDaTBBQUVFdVJ3Mk9BU0FLUVFGcUlRa015Z0VMSUFzZ0FrY05qZ0ZCMEFFaEVBeVhBZ3NDUUNBTElBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBczJBZ1JCdHdFaEVBeitBUXRCMFFFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCMGdFaEVBeVdBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFRWFpRUxBMEFnQkMwQUFDQVFRZnpQZ0lBQWFpMEFBRWNOamdFZ0VFRUVSZzNwQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIU0FTRVFESlVDQ3lBQUlBd2dBaENzZ0lDQUFDSUJEWTBCSUF3aEFReTRBUXNDUUNBRUlBSkhEUUJCMUFFaEVBeVVBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQmFpRU1BMEFnQkMwQUFDQVFRWUhRZ0lBQWFpMEFBRWNOandFZ0VFRUJSZzJPQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIVUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVIV0FTRVFESk1DQ3lBQ0lBUnJJQUFvQWdBaUVHb2hGQ0FFSUJCclFRSnFJUXNEUUNBRUxRQUFJQkJCZzlDQWdBQnFMUUFBUncyT0FTQVFRUUpHRFpBQklCQkJBV29oRUNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFkWUJJUkFNa2dJTEFrQWdCQ0FDUncwQVFkY0JJUkFNa2dJTEFrQUNRQ0FFTFFBQVFidC9hZzRRQUk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandFQmp3RUxJQVJCQVdvaEJFRzdBU0VRRFBrQkN5QUVRUUZxSVFSQnZBRWhFQXo0QVFzQ1FDQUVJQUpIRFFCQjJBRWhFQXlSQWdzZ0JDMEFBRUhJQUVjTmpBRWdCRUVCYWlFRURNUUJDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUcrQVNFUURQY0JDMEhaQVNFUURJOENDd0pBSUFRZ0FrY05BRUhhQVNFUURJOENDeUFFTFFBQVFjZ0FSZzNEQVNBQVFRRTZBQ2dNdVFFTElBQkJBam9BTHlBQUlBUWdBaENtZ0lDQUFDSVFEWTBCUWNJQklSQU05QUVMSUFBdEFDaEJmMm9PQXJjQnVRRzRBUXNEUUFKQUlBUXRBQUJCZG1vT0JBQ09BWTRCQUk0QkN5QUVRUUZxSWdRZ0FrY05BQXRCM1FFaEVBeUxBZ3NnQUVFQU9nQXZJQUF0QUMxQkJIRkZEWVFDQ3lBQVFRQTZBQzhnQUVFQk9nQTBJQUVoQVF5TUFRc2dFRUVWUmczYUFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBeUlBZ3NDUUNBQUlCQWdBaEMwZ0lDQUFDSUVEUUFnRUNFQkRJRUNDd0pBSUFSQkZVY05BQ0FBUVFNMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlJQWdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWh3SUxJQkJCRlVZTjFnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1oZ0lMSUFBb0FnUWhGeUFBUVFBMkFnUWdFQ0FScDJvaUZpRUJJQUFnRnlBUUlCWWdGQnNpRUJDMWdJQ0FBQ0lVUlEyTkFTQUFRUWMyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTWhRSUxJQUFnQUM4Qk1FR0FBWEk3QVRBZ0FTRUJDMEVxSVJBTTZnRUxJQkJCRlVZTjBRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZT01nSUFBTmdJUUlBQkJFellDREVFQUlSQU1nZ0lMSUJCQkZVWU56d0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNZ1FJTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESTBCQ3lBQVFRdzJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTWdBSUxJQkJCRlVZTnpBRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU0vd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJd0JDeUFBUVEwMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL2dFTElCQkJGVVlOeVFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTS9RRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElzQkN5QUFRUTQyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhBbFlDQUFEWUNFQ0FBUVFJMkFneEJBQ0VRRFBzQkN5QVFRUlZHRGNVQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQb0JDeUFBUVJBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU0rUUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRQRUJDeUFBUVJFMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNK0FFTElCQkJGVVlOd1FFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTTl3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElnQkN5QUFRUk0yQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRPMEJDeUFBUVJRMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOVFFTElCQkJGVVlOdlFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTTlBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElZQkN5QUFRUlkyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04d0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzNnSUNBQUNJRURRQWdBVUVCYWlFQkRPa0JDeUFBUVJjMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOGdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURQRUJDMElCSVJFTElCQkJBV29oQVFKQUlBQXBBeUFpRWtMLy8vLy8vLy8vL3c5V0RRQWdBQ0FTUWdTR0lCR0VOd01nSUFFaEFReUVBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYTJKZ0lBQU5nSVFJQUJCRERZQ0RFRUFJUkFNN3dFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPNEJDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOY3lBQVFRVTJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNN1FFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcW5JQ0FBRFlDRUNBQVFRODJBZ3hCQUNFUURPd0JDeUFBSUJBZ0FoQzBnSUNBQUNJQkRRRWdFQ0VCQzBFT0lSQU0wUUVMQWtBZ0FVRVZSdzBBSUFCQkFqWUNIQ0FBSUJBMkFoUWdBRUd3bUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRE9vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBenBBUXNnQVVFQmFpRVFBa0FnQUM4Qk1DSUJRWUFCY1VVTkFBSkFJQUFnRUNBQ0VMdUFnSUFBSWdFTkFDQVFJUUVNY0FzZ0FVRVZSdzI2QVNBQVFRVTJBaHdnQUNBUU5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc0NRQ0FCUWFBRWNVR2dCRWNOQUNBQUxRQXRRUUp4RFFBZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUVphVGdJQUFOZ0lRSUFCQkJEWUNERUVBSVJBTTZRRUxJQUFnRUNBQ0VMMkFnSUFBR2lBUUlRRUNRQUpBQWtBQ1FBSkFJQUFnRUNBQ0VMT0FnSUFBRGhZQ0FRQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURCQXNnQUVFQk9nQXVDeUFBSUFBdkFUQkJ3QUJ5T3dFd0lCQWhBUXRCSmlFUURORUJDeUFBUVNNMkFod2dBQ0FRTmdJVUlBQkJwWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRXTGdJQUFOZ0lRSUFCQkVUWUNERUVBSVJBTTZBRUxJQUF0QUMxQkFYRkZEUUZCd3dFaEVBek9BUXNDUUNBTklBSkdEUUFEUUFKQUlBMHRBQUJCSUVZTkFDQU5JUUVNeEFFTElBMUJBV29pRFNBQ1J3MEFDMEVsSVJBTTV3RUxRU1VoRUF6bUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEUkN2Z0lDQUFDSUVSUTJ0QVNBQVFTWTJBaHdnQUNBRU5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTTVRRUxJQkJCRlVZTnF3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMk5nSUFBTmdJUUlBQkJIVFlDREVFQUlSQU01QUVMSUFCQkp6WUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpqQVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmZtb09Cd1lGQlFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVySVJBTXlnRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3Jrb0NBQURZQ0VDQUFRUXMyQWd4QkFDRVFET0lCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1RUUFoRUF6aEFRc2dBRUVBT2dBc0lCQWhBUXk5QVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNBQVVMSUFBZ0FDOEJNRUVJY2pzQk1Bd0RDMEVDSVJRTUFRdEJCQ0VVQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQlJ5T3dFd0N5QVFJUUVMUVNraEVBekZBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNVZ0lBQU5nSVFJQUJCQXpZQ0RFRUFJUkFNM1FFTEFrQWdEaTBBQUVFTlJ3MEFJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhVTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemRBUXNnQUMwQUxVRUJjVVVOQVVIRUFTRVFETU1CQ3dKQUlBNGdBa2NOQUVFdElSQU0zQUVMQWtBQ1FBTkFBa0FnRGkwQUFFRjJhZzRFQWdBQUF3QUxJQTVCQVdvaURpQUNSdzBBQzBFdElSQU0zUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEaUVCREhRTElBQkJMRFlDSENBQUlBNDJBaFFnQUNBQk5nSU1RUUFoRUF6Y0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FPRUxHQWdJQUFJZ0VOQUNBT1FRRnFJUUVNY3dzZ0FFRXNOZ0ljSUFBZ0FUWUNEQ0FBSUE1QkFXbzJBaFJCQUNFUUROc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FPRUxHQWdJQUFJZ1FOb0FFZ0RpRUJETTRCQ3lBUVFTeEhEUUVnQVVFQmFpRVFRUUVoQVFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNCQUFMSUJBaEFRd0VDMEVDSVFFTUFRdEJCQ0VCQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQUZ5T3dFd0lCQWhBUXdCQ3lBQUlBQXZBVEJCQ0hJN0FUQWdFQ0VCQzBFNUlSQU12d0VMSUFCQkFEb0FMQ0FCSVFFTFFUUWhFQXk5QVFzZ0FDQUFMd0V3UVNCeU93RXdJQUVoQVF3Q0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCQTBBSUFFaEFRekhBUXNnQUVFM05nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETlFCQ3lBQVFRZzZBQ3dnQVNFQkMwRXdJUkFNdVFFTEFrQWdBQzBBS0VFQlJnMEFJQUVoQVF3RUN5QUFMUUF0UVFoeFJRMlRBU0FCSVFFTUF3c2dBQzBBTUVFZ2NRMlVBVUhGQVNFUURMY0JDd0pBSUE4Z0FrWU5BQUpBQTBBQ1FDQVBMUUFBUVZCcUlnRkIvd0Z4UVFwSkRRQWdEeUVCUVRVaEVBeTZBUXNnQUNrRElDSVJRcG16NXN5WnMrYk1HVllOQVNBQUlCRkNDbjRpRVRjRElDQVJJQUd0UXY4Qmd5SVNRbitGVmcwQklBQWdFU0FTZkRjRElDQVBRUUZxSWc4Z0FrY05BQXRCT1NFUURORUJDeUFBS0FJRUlRSWdBRUVBTmdJRUlBQWdBaUFQUVFGcUlnUVFzWUNBZ0FBaUFnMlZBU0FFSVFFTXd3RUxRVGtoRUF6UEFRc0NRQ0FBTHdFd0lnRkJDSEZGRFFBZ0FDMEFLRUVCUncwQUlBQXRBQzFCQ0hGRkRaQUJDeUFBSUFGQjkvc0RjVUdBQkhJN0FUQWdEeUVCQzBFM0lSQU10QUVMSUFBZ0FDOEJNRUVRY2pzQk1BeXJBUXNnRUVFVlJnMkxBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4STZBZ0FBMkFoQWdBRUVjTmdJTVFRQWhFQXpMQVFzZ0FFSERBRFlDSENBQUlBRTJBZ3dnQUNBTlFRRnFOZ0lVUVFBaEVBektBUXNDUUNBQkxRQUFRVHBIRFFBZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSytBZ0lBQUloQU5BQ0FCUVFGcUlRRU1Zd3NnQUVIREFEWUNIQ0FBSUJBMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF6S0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFiR1JnSUFBTmdJUUlBQkJDallDREVFQUlSQU15UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdnbVlDQUFEWUNFQ0FBUVI0MkFneEJBQ0VRRE1nQkN5QUFRUUEyQWdBTElBQkJnQkk3QVNvZ0FDQVhRUUZxSWdFZ0FoQ29nSUNBQUNJUURRRWdBU0VCQzBISEFDRVFES3dCQ3lBUVFSVkhEWU1CSUFCQjBRQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6RUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpEQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNHb2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBUVFBMkFnQkJBQ0VRRE1JQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReGRDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETUVCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZQ1JnSUFBTmdJUUlBQkJDVFlDREF6QUFRc2dFRUVWUmcxOUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHVWpZQ0FBRFlDRUNBQVFTRTJBZ3hCQUNFUURMOEJDMEVCSVJaQkFDRVhRUUFoRkVFQklSQUxJQUFnRURvQUt5QUJRUUZxSVFFQ1FBSkFJQUF0QUMxQkVIRU5BQUpBQWtBQ1FDQUFMUUFxRGdNQkFBSUVDeUFXUlEwRERBSUxJQlFOQVF3Q0N5QVhSUTBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFyWUNBZ0FBaUVBMEFJQUVoQVF4Y0N5QUFRZGdBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMNEJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXl0QVFzZ0FFSFpBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5OUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1xd0VMSUFCQjJnQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdkFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLa0JDeUFBUWR3QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHNCQ3dKQUlBRXRBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0FVRUJhaUVCUWM4QUlSQU1vZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtjQkN5QUFRZDRBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMb0JDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1VFalR3MEFJQUVoQVF4WkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjA0bUFnQUEyQWhBZ0FFRUlOZ0lNUVFBaEVBeTVBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQXkzQVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJVWNOQUNBQklRRU1WZ3NnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnVLZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdGdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBJaEJCWFdwQkMwOE5BQ0FCSVFFTVZRc0NRQ0FRUVFaTERRQkJBU0FRZEVIS0FIRkZEUUFnQVNFQkRGVUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOTRtQWdBQTJBaEFnQUVFSU5nSU1ETFVCQ3lBUVFSVkdEWEVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNdEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGUUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGRUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaW9DQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREs4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzRCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREt3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjNJaUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXJBUXNnRUVFL1J3MEJJQUZCQVdvaEFRdEJCU0VRREpBQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJTZ0lBQU5nSVFJQUJCQnpZQ0RBeW9BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXltQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVJnc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeWxBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFNBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5a0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIVEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlqQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVF3c2dBRUhsQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWlBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY09QZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNb1FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNEQXlmQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW5nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSCtrWUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjBCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCanB1QWdBQTJBaEFnQUVFR05nSU1RUUFoRUF5Y0FRc2dFRUVWUmcxWElBQkJBRFlDSENBQUlBRTJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURKc0JDeUFBUVFBMkFnQWdFRUVCYWlFQlFTUWhFQXNnQUNBUU9nQXBJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQUVRcTRDQWdBQWlFQTFVSUFFaEFRdytDeUFBUVFBMkFnQUxRUUFoRUNBQVFRQTJBaHdnQUNBRU5nSVVJQUJCOFp1QWdBQTJBaEFnQUVFR05nSU1ESmNCQ3lBQlFSVkdEVkFnQUVFQU5nSWNJQUFnQlRZQ0ZDQUFRZkNNZ0lBQU5nSVFJQUJCR3pZQ0RFRUFJUkFNbGdFTElBQW9BZ1FoQlNBQVFRQTJBZ1FnQUNBRklCQVFxWUNBZ0FBaUJRMEJJQkJCQVdvaEJRdEJyUUVoRUF4N0N5QUFRY0VCTmdJY0lBQWdCVFlDRENBQUlCQkJBV28yQWhSQkFDRVFESk1CQ3lBQUtBSUVJUVlnQUVFQU5nSUVJQUFnQmlBUUVLbUFnSUFBSWdZTkFTQVFRUUZxSVFZTFFhNEJJUkFNZUFzZ0FFSENBVFlDSENBQUlBWTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVFBUXNnQUVFQU5nSWNJQUFnQnpZQ0ZDQUFRWmVMZ0lBQU5nSVFJQUJCRFRZQ0RFRUFJUkFNandFTElBQkJBRFlDSENBQUlBZzJBaFFnQUVIamtJQ0FBRFlDRUNBQVFRazJBZ3hCQUNFUURJNEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXlOQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQ1VFQmFpRUlBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdDQkN0Z0lDQUFDSVFSUTA5SUFCQnlRRTJBaHdnQUNBSU5nSVVJQUFnRURZQ0RFRUFJUkFNakFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBZ1FyWUNBZ0FBaUJFVU5kaUFBUWNvQk5nSWNJQUFnQ0RZQ0ZDQUFJQVEyQWd4QkFDRVFESXNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSkVLMkFnSUFBSWdSRkRYUWdBRUhMQVRZQ0hDQUFJQWsyQWhRZ0FDQUVOZ0lNUVFBaEVBeUtBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ2hDdGdJQ0FBQ0lFUlExeUlBQkJ6UUUyQWh3Z0FDQUtOZ0lVSUFBZ0JEWUNERUVBSVJBTWlRRUxBa0FnQ3kwQUFFRlFhaUlRUWY4QmNVRUtUdzBBSUFBZ0VEb0FLaUFMUVFGcUlRcEJ0Z0VoRUF4d0N5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUxFSzJBZ0lBQUlnUkZEWEFnQUVIUEFUWUNIQ0FBSUFzMkFoUWdBQ0FFTmdJTVFRQWhFQXlJQVFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQ0FBUVFBMkFnQkJBQ0VRREljQkN5QUJRUlZHRFQ4Z0FFRUFOZ0ljSUFBZ0REWUNGQ0FBUWN5T2dJQUFOZ0lRSUFCQklEWUNERUVBSVJBTWhnRUxJQUJCZ1FRN0FTZ2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdERUVCYWlJTUVLdUFnSUFBSWhCRkRUZ2dBRUhUQVRZQ0hDQUFJQXcyQWhRZ0FDQVFOZ0lNUVFBaEVBeUZBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWRpYmdJQUFOZ0lRSUFCQkNEWUNEQXlEQVFzZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0MwRUJhaUlMRUt1QWdJQUFJaEFOQVVIR0FTRVFER2tMSUFCQkFqb0FLQXhWQ3lBQVFkVUJOZ0ljSUFBZ0N6WUNGQ0FBSUJBMkFneEJBQ0VRRElBQkN5QVFRUlZHRFRjZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWFTTWdJQUFOZ0lRSUFCQkVEWUNERUVBSVJBTWZ3c2dBQzBBTkVFQlJ3MDBJQUFnQkNBQ0VMeUFnSUFBSWhCRkRUUWdFRUVWUncwMUlBQkIzQUUyQWh3Z0FDQUVOZ0lVSUFCQjFaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeCtDMEVBSVJBZ0FFRUFOZ0ljSUFCQnI0dUFnQUEyQWhBZ0FFRUNOZ0lNSUFBZ0ZFRUJhallDRkF4OUMwRUFJUkFNWXd0QkFpRVFER0lMUVEwaEVBeGhDMEVQSVJBTVlBdEJKU0VRREY4TFFSTWhFQXhlQzBFVklSQU1YUXRCRmlFUURGd0xRUmNoRUF4YkMwRVlJUkFNV2d0QkdTRVFERmtMUVJvaEVBeFlDMEViSVJBTVZ3dEJIQ0VRREZZTFFSMGhFQXhWQzBFZklSQU1WQXRCSVNFUURGTUxRU01oRUF4U0MwSEdBQ0VRREZFTFFTNGhFQXhRQzBFdklSQU1Ud3RCT3lFUURFNExRVDBoRUF4TkMwSElBQ0VRREV3TFFja0FJUkFNU3d0Qnl3QWhFQXhLQzBITUFDRVFERWtMUWM0QUlSQU1TQXRCMFFBaEVBeEhDMEhWQUNFUURFWUxRZGdBSVJBTVJRdEIyUUFoRUF4RUMwSGJBQ0VRREVNTFFlUUFJUkFNUWd0QjVRQWhFQXhCQzBIeEFDRVFERUFMUWZRQUlSQU1Qd3RCalFFaEVBdytDMEdYQVNFUUREMExRYWtCSVJBTVBBdEJyQUVoRUF3N0MwSEFBU0VRRERvTFFia0JJUkFNT1F0QnJ3RWhFQXc0QzBHeEFTRVFERGNMUWJJQklSQU1OZ3RCdEFFaEVBdzFDMEcxQVNFUUREUUxRYm9CSVJBTU13dEJ2UUVoRUF3eUMwRy9BU0VRRERFTFFjRUJJUkFNTUFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWVtTGdJQUFOZ0lRSUFCQkh6WUNERUVBSVJBTVNBc2dBRUhiQVRZQ0hDQUFJQVEyQWhRZ0FFSDZsb0NBQURZQ0VDQUFRUlUyQWd4QkFDRVFERWNMSUFCQitBQTJBaHdnQUNBTU5nSVVJQUJCeXBpQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4R0N5QUFRZEVBTmdJY0lBQWdCVFlDRkNBQVFiQ1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SUXNnQUVINUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXhFQ3lBQVFmZ0FOZ0ljSUFBZ0FUWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVF3c2dBRUhrQURZQ0hDQUFJQUUyQWhRZ0FFSGpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERUlMSUFCQjF3QTJBaHdnQUNBQk5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnVZMkFnQUEyQWhBZ0FFRWFOZ0lNUVFBaEVBeEFDeUFBUWNJQU5nSWNJQUFnQVRZQ0ZDQUFRZU9ZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUHdzZ0FFRUFOZ0lFSUFBZ0R5QVBFTEdBZ0lBQUlnUkZEUUVnQUVFNk5nSWNJQUFnQkRZQ0RDQUFJQTlCQVdvMkFoUkJBQ0VRREQ0TElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN4Z0lDQUFDSUVSUTBBSUFCQk96WUNIQ0FBSUFRMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF3K0N5QUJRUUZxSVFFTUxRc2dEMEVCYWlFQkRDMExJQUJCQURZQ0hDQUFJQTgyQWhRZ0FFSGtrb0NBQURZQ0VDQUFRUVEyQWd4QkFDRVFERHNMSUFCQk5qWUNIQ0FBSUFRMkFoUWdBQ0FDTmdJTVFRQWhFQXc2Q3lBQVFTNDJBaHdnQUNBT05nSVVJQUFnQkRZQ0RFRUFJUkFNT1FzZ0FFSFFBRFlDSENBQUlBRTJBaFFnQUVHUm1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREZ0xJQTFCQVdvaEFRd3NDeUFBUVJVMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcyQ3lBQVFSczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MUN5QUFRUTgyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzBDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd6Q3lBQVFSbzJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eUN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3hDeUFBUVFvMkFod2dBQ0FCTmdJVUlBQkI1SmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd3Q3lBQVFSNDJBaHdnQUNBQk5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQjJvMkFnQUEyQWhBZ0FFRVVOZ0lNUVFBaEVBd3VDeUFBUVFRMkFod2dBQ0FCTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd0Q3lBQVFRQTJBZ0FnQzBFQmFpRUxDMEc0QVNFUURCSUxJQUJCQURZQ0FDQVFRUUZxSVFGQjlRQWhFQXdSQ3lBQklRRUNRQ0FBTFFBcFFRVkhEUUJCNHdBaEVBd1JDMEhpQUNFUURCQUxRUUFoRUNBQVFRQTJBaHdnQUVIa2tZQ0FBRFlDRUNBQVFRYzJBZ3dnQUNBVVFRRnFOZ0lVRENnTElBQkJBRFlDQUNBWFFRRnFJUUZCd0FBaEVBd09DMEVCSVFFTElBQWdBVG9BTENBQVFRQTJBZ0FnRjBFQmFpRUJDMEVvSVJBTUN3c2dBU0VCQzBFNElSQU1DUXNDUUNBQklnOGdBa1lOQUFOQUFrQWdEeTBBQUVHQXZvQ0FBR290QUFBaUFVRUJSZzBBSUFGQkFrY05BeUFQUVFGcUlRRU1CQXNnRDBFQmFpSVBJQUpIRFFBTFFUNGhFQXdpQzBFK0lSQU1JUXNnQUVFQU9nQXNJQThoQVF3QkMwRUxJUkFNQmd0Qk9pRVFEQVVMSUFGQkFXb2hBVUV0SVJBTUJBc2dBQ0FCT2dBc0lBQkJBRFlDQUNBV1FRRnFJUUZCRENFUURBTUxJQUJCQURZQ0FDQVhRUUZxSVFGQkNpRVFEQUlMSUFCQkFEWUNBQXNnQUVFQU9nQXNJQTBoQVVFSklSQU1BQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUxOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJjTFFRQWhFQ0FBUVFBMkFod2dBQ0FLTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCWUxRUUFoRUNBQVFRQTJBaHdnQUNBSk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJRTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCTUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQklMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJFTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCQUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQThMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE0TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SktBZ0FBMkFoQWdBRUVMTmdJTURBMExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbFltQWdBQTJBaEFnQUVFTE5nSU1EQXdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNREFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkIrNCtBZ0FBMkFoQWdBRUVLTmdJTURBb0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOFptQWdBQTJBaEFnQUVFQ05nSU1EQWtMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhKU0FnQUEyQWhBZ0FFRUNOZ0lNREFnTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4cFdBZ0FBMkFoQWdBRUVDTmdJTURBY0xJQUJCQWpZQ0hDQUFJQUUyQWhRZ0FFR2Ntb0NBQURZQ0VDQUFRUlkyQWd4QkFDRVFEQVlMUVFFaEVBd0ZDMEhVQUNFUUlBRWlCQ0FDUmcwRUlBTkJDR29nQUNBRUlBSkIyTUtBZ0FCQkNoREZnSUNBQUNBREtBSU1JUVFnQXlnQ0NBNERBUVFDQUFzUXlvQ0FnQUFBQ3lBQVFRQTJBaHdnQUVHMW1vQ0FBRFlDRUNBQVFSYzJBZ3dnQUNBRVFRRnFOZ0lVUVFBaEVBd0NDeUFBUVFBMkFod2dBQ0FFTmdJVUlBQkJ5cHFBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXdCQ3dKQUlBRWlCQ0FDUncwQVFTSWhFQXdCQ3lBQVFZbUFnSUFBTmdJSUlBQWdCRFlDQkVFaElSQUxJQU5CRUdva2dJQ0FnQUFnRUF1dkFRRUNmeUFCS0FJQUlRWUNRQUpBSUFJZ0EwWU5BQ0FFSUFacUlRUWdCaUFEYWlBQ2F5RUhJQUlnQmtGL2N5QUZhaUlHYWlFRkEwQUNRQ0FDTFFBQUlBUXRBQUJHRFFCQkFpRUVEQU1MQWtBZ0JnMEFRUUFoQkNBRklRSU1Bd3NnQmtGL2FpRUdJQVJCQVdvaEJDQUNRUUZxSWdJZ0EwY05BQXNnQnlFR0lBTWhBZ3NnQUVFQk5nSUFJQUVnQmpZQ0FDQUFJQUkyQWdRUEN5QUJRUUEyQWdBZ0FDQUVOZ0lBSUFBZ0FqWUNCQXNLQUNBQUVNZUFnSUFBQy9JMkFRdC9JNENBZ0lBQVFSQnJJZ0VrZ0lDQWdBQUNRRUVBS0FLZzBJQ0FBQTBBUVFBUXk0Q0FnQUJCZ05TRWdBQnJJZ0pCMlFCSkRRQkJBQ0VEQWtCQkFDZ0M0Tk9BZ0FBaUJBMEFRUUJDZnpjQzdOT0FnQUJCQUVLQWdJU0FnSURBQURjQzVOT0FnQUJCQUNBQlFRaHFRWEJ4UWRpcTFhb0ZjeUlFTmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FBTFFRQWdBallDek5PQWdBQkJBRUdBMUlTQUFEWUN5Tk9BZ0FCQkFFR0ExSVNBQURZQ21OQ0FnQUJCQUNBRU5nS3MwSUNBQUVFQVFYODJBcWpRZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUF0QmdOU0VnQUJCZUVHQTFJU0FBR3RCRDNGQkFFR0ExSVNBQUVFSWFrRVBjUnNpQTJvaUJFRUVhaUFDUVVocUlnVWdBMnNpQTBFQmNqWUNBRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FCQmdOU0VnQUFnQldwQk9EWUNCQXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBRUhzQVVzTkFBSkFRUUFvQW9qUWdJQUFJZ1pCRUNBQVFSTnFRWEJ4SUFCQkMwa2JJZ0pCQTNZaUJIWWlBMEVEY1VVTkFBSkFBa0FnQTBFQmNTQUVja0VCY3lJRlFRTjBJZ1JCc05DQWdBQnFJZ01nQkVHNDBJQ0FBR29vQWdBaUJDZ0NDQ0lDUncwQVFRQWdCa0YrSUFWM2NUWUNpTkNBZ0FBTUFRc2dBeUFDTmdJSUlBSWdBellDREFzZ0JFRUlhaUVESUFRZ0JVRURkQ0lGUVFOeU5nSUVJQVFnQldvaUJDQUVLQUlFUVFGeU5nSUVEQXdMSUFKQkFDZ0NrTkNBZ0FBaUIwME5BUUpBSUFORkRRQUNRQUpBSUFNZ0JIUkJBaUFFZENJRFFRQWdBMnR5Y1NJRFFRQWdBMnR4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1vaUJFRURkQ0lEUWJEUWdJQUFhaUlGSUFOQnVOQ0FnQUJxS0FJQUlnTW9BZ2dpQUVjTkFFRUFJQVpCZmlBRWQzRWlCallDaU5DQWdBQU1BUXNnQlNBQU5nSUlJQUFnQlRZQ0RBc2dBeUFDUVFOeU5nSUVJQU1nQkVFRGRDSUVhaUFFSUFKcklnVTJBZ0FnQXlBQ2FpSUFJQVZCQVhJMkFnUUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQkFKQUFrQWdCa0VCSUFkQkEzWjBJZ2h4RFFCQkFDQUdJQWh5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQVEyQWd3Z0FpQUVOZ0lJSUFRZ0FqWUNEQ0FFSUFnMkFnZ0xJQU5CQ0dvaEEwRUFJQUEyQXB6UWdJQUFRUUFnQlRZQ2tOQ0FnQUFNREF0QkFDZ0NqTkNBZ0FBaUNVVU5BU0FKUVFBZ0NXdHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbXBCQW5SQnVOS0FnQUJxS0FJQUlnQW9BZ1JCZUhFZ0Ftc2hCQ0FBSVFVQ1FBTkFBa0FnQlNnQ0VDSUREUUFnQlVFVWFpZ0NBQ0lEUlEwQ0N5QURLQUlFUVhoeElBSnJJZ1VnQkNBRklBUkpJZ1ViSVFRZ0F5QUFJQVViSVFBZ0F5RUZEQUFMQ3lBQUtBSVlJUW9DUUNBQUtBSU1JZ2dnQUVZTkFDQUFLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUlJQU0yQWdnZ0F5QUlOZ0lNREFzTEFrQWdBRUVVYWlJRktBSUFJZ01OQUNBQUtBSVFJZ05GRFFNZ0FFRVFhaUVGQ3dOQUlBVWhDeUFESWdoQkZHb2lCU2dDQUNJRERRQWdDRUVRYWlFRklBZ29BaEFpQXcwQUN5QUxRUUEyQWdBTUNndEJmeUVDSUFCQnYzOUxEUUFnQUVFVGFpSURRWEJ4SVFKQkFDZ0NqTkNBZ0FBaUIwVU5BRUVBSVFzQ1FDQUNRWUFDU1EwQVFSOGhDeUFDUWYvLy93ZExEUUFnQTBFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUZJQVZCZ0lBUGFrRVFka0VDY1NJRmRFRVBkaUFESUFSeUlBVnlheUlEUVFGMElBSWdBMEVWYW5aQkFYRnlRUnhxSVFzTFFRQWdBbXNoQkFKQUFrQUNRQUpBSUF0QkFuUkJ1TktBZ0FCcUtBSUFJZ1VOQUVFQUlRTkJBQ0VJREFFTFFRQWhBeUFDUVFCQkdTQUxRUUYyYXlBTFFSOUdHM1FoQUVFQUlRZ0RRQUpBSUFVb0FnUkJlSEVnQW1zaUJpQUVUdzBBSUFZaEJDQUZJUWdnQmcwQVFRQWhCQ0FGSVFnZ0JTRUREQU1MSUFNZ0JVRVVhaWdDQUNJR0lBWWdCU0FBUVIxMlFRUnhha0VRYWlnQ0FDSUZSaHNnQXlBR0d5RURJQUJCQVhRaEFDQUZEUUFMQ3dKQUlBTWdDSElOQUVFQUlRaEJBaUFMZENJRFFRQWdBMnR5SUFkeElnTkZEUU1nQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCVUVGZGtFSWNTSUFJQU55SUFVZ0FIWWlBMEVDZGtFRWNTSUZjaUFESUFWMklnTkJBWFpCQW5FaUJYSWdBeUFGZGlJRFFRRjJRUUZ4SWdWeUlBTWdCWFpxUVFKMFFialNnSUFBYWlnQ0FDRURDeUFEUlEwQkN3TkFJQU1vQWdSQmVIRWdBbXNpQmlBRVNTRUFBa0FnQXlnQ0VDSUZEUUFnQTBFVWFpZ0NBQ0VGQ3lBR0lBUWdBQnNoQkNBRElBZ2dBQnNoQ0NBRklRTWdCUTBBQ3dzZ0NFVU5BQ0FFUVFBb0FwRFFnSUFBSUFKclR3MEFJQWdvQWhnaEN3SkFJQWdvQWd3aUFDQUlSZzBBSUFnb0FnZ2lBMEVBS0FLWTBJQ0FBRWthSUFBZ0F6WUNDQ0FESUFBMkFnd01DUXNDUUNBSVFSUnFJZ1VvQWdBaUF3MEFJQWdvQWhBaUEwVU5BeUFJUVJCcUlRVUxBMEFnQlNFR0lBTWlBRUVVYWlJRktBSUFJZ01OQUNBQVFSQnFJUVVnQUNnQ0VDSUREUUFMSUFaQkFEWUNBQXdJQ3dKQVFRQW9BcERRZ0lBQUlnTWdBa2tOQUVFQUtBS2MwSUNBQUNFRUFrQUNRQ0FESUFKcklnVkJFRWtOQUNBRUlBSnFJZ0FnQlVFQmNqWUNCRUVBSUFVMkFwRFFnSUFBUVFBZ0FEWUNuTkNBZ0FBZ0JDQURhaUFGTmdJQUlBUWdBa0VEY2pZQ0JBd0JDeUFFSUFOQkEzSTJBZ1FnQkNBRGFpSURJQU1vQWdSQkFYSTJBZ1JCQUVFQU5nS2MwSUNBQUVFQVFRQTJBcERRZ0lBQUN5QUVRUWhxSVFNTUNnc0NRRUVBS0FLVTBJQ0FBQ0lBSUFKTkRRQkJBQ2dDb05DQWdBQWlBeUFDYWlJRUlBQWdBbXNpQlVFQmNqWUNCRUVBSUFVMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0F5QUNRUU55TmdJRUlBTkJDR29oQXd3S0N3SkFBa0JCQUNnQzROT0FnQUJGRFFCQkFDZ0M2Tk9BZ0FBaEJBd0JDMEVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRU1ha0Z3Y1VIWXF0V3FCWE0yQXVEVGdJQUFRUUJCQURZQzlOT0FnQUJCQUVFQU5nTEUwNENBQUVHQWdBUWhCQXRCQUNFREFrQWdCQ0FDUWNjQWFpSUhhaUlHUVFBZ0JHc2lDM0VpQ0NBQ1N3MEFRUUJCTURZQytOT0FnQUFNQ2dzQ1FFRUFLQUxBMDRDQUFDSURSUTBBQWtCQkFDZ0N1Tk9BZ0FBaUJDQUlhaUlGSUFSTkRRQWdCU0FEVFEwQkMwRUFJUU5CQUVFd05nTDQwNENBQUF3S0MwRUFMUURFMDRDQUFFRUVjUTBFQWtBQ1FBSkFRUUFvQXFEUWdJQUFJZ1JGRFFCQnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUFFU3cwREN5QURLQUlJSWdNTkFBc0xRUUFReTRDQWdBQWlBRUYvUmcwRklBZ2hCZ0pBUVFBb0F1VFRnSUFBSWdOQmYyb2lCQ0FBY1VVTkFDQUlJQUJySUFRZ0FHcEJBQ0FEYTNGcUlRWUxJQVlnQWswTkJTQUdRZjcvLy84SFN3MEZBa0JCQUNnQ3dOT0FnQUFpQTBVTkFFRUFLQUs0MDRDQUFDSUVJQVpxSWdVZ0JFME5CaUFGSUFOTERRWUxJQVlReTRDQWdBQWlBeUFBUncwQkRBY0xJQVlnQUdzZ0MzRWlCa0grLy8vL0Iwc05CQ0FHRU11QWdJQUFJZ0FnQXlnQ0FDQURLQUlFYWtZTkF5QUFJUU1MQWtBZ0EwRi9SZzBBSUFKQnlBQnFJQVpORFFBQ1FDQUhJQVpyUVFBb0F1alRnSUFBSWdScVFRQWdCR3R4SWdSQi92Ly8vd2RORFFBZ0F5RUFEQWNMQWtBZ0JCRExnSUNBQUVGL1JnMEFJQVFnQm1vaEJpQURJUUFNQnd0QkFDQUdheERMZ0lDQUFCb01CQXNnQXlFQUlBTkJmMGNOQlF3REMwRUFJUWdNQnd0QkFDRUFEQVVMSUFCQmYwY05BZ3RCQUVFQUtBTEUwNENBQUVFRWNqWUN4Tk9BZ0FBTElBaEIvdi8vL3dkTERRRWdDQkRMZ0lDQUFDRUFRUUFReTRDQWdBQWhBeUFBUVg5R0RRRWdBMEYvUmcwQklBQWdBMDhOQVNBRElBQnJJZ1lnQWtFNGFrME5BUXRCQUVFQUtBSzQwNENBQUNBR2FpSUROZ0s0MDRDQUFBSkFJQU5CQUNnQ3ZOT0FnQUJORFFCQkFDQUROZ0s4MDRDQUFBc0NRQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUNBQUlBTW9BZ0FpQlNBREtBSUVJZ2hxUmcwQ0lBTW9BZ2dpQXcwQURBTUxDd0pBQWtCQkFDZ0NtTkNBZ0FBaUEwVU5BQ0FBSUFOUERRRUxRUUFnQURZQ21OQ0FnQUFMUVFBaEEwRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVGL05nS28wSUNBQUVFQVFRQW9BdURUZ0lBQU5nS3MwSUNBQUVFQVFRQTJBdFRUZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUFzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQkNBR1FVaHFJZ1VnQTJzaUEwRUJjallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBQ0FGYWtFNE5nSUVEQUlMSUFNdEFBeEJDSEVOQUNBRUlBVkpEUUFnQkNBQVR3MEFJQVJCZUNBRWEwRVBjVUVBSUFSQkNHcEJEM0ViSWdWcUlnQkJBQ2dDbE5DQWdBQWdCbW9pQ3lBRmF5SUZRUUZ5TmdJRUlBTWdDQ0FHYWpZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQVUyQXBUUWdJQUFRUUFnQURZQ29OQ0FnQUFnQkNBTGFrRTROZ0lFREFFTEFrQWdBRUVBS0FLWTBJQ0FBQ0lJVHcwQVFRQWdBRFlDbU5DQWdBQWdBQ0VJQ3lBQUlBWnFJUVZCeU5PQWdBQWhBd0pBQWtBQ1FBSkFBa0FDUUFKQUEwQWdBeWdDQUNBRlJnMEJJQU1vQWdnaUF3MEFEQUlMQ3lBRExRQU1RUWh4UlEwQkMwSEkwNENBQUNFREEwQUNRQ0FES0FJQUlnVWdCRXNOQUNBRklBTW9BZ1JxSWdVZ0JFc05Bd3NnQXlnQ0NDRUREQUFMQ3lBRElBQTJBZ0FnQXlBREtBSUVJQVpxTmdJRUlBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJhaUlMSUFKQkEzSTJBZ1FnQlVGNElBVnJRUTl4UVFBZ0JVRUlha0VQY1J0cUlnWWdDeUFDYWlJQ2F5RURBa0FnQmlBRVJ3MEFRUUFnQWpZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBRGFpSUROZ0tVMElDQUFDQUNJQU5CQVhJMkFnUU1Bd3NDUUNBR1FRQW9BcHpRZ0lBQVJ3MEFRUUFnQWpZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBRGFpSUROZ0tRMElDQUFDQUNJQU5CQVhJMkFnUWdBaUFEYWlBRE5nSUFEQU1MQWtBZ0JpZ0NCQ0lFUVFOeFFRRkhEUUFnQkVGNGNTRUhBa0FDUUNBRVFmOEJTdzBBSUFZb0FnZ2lCU0FFUVFOMklnaEJBM1JCc05DQWdBQnFJZ0JHR2dKQUlBWW9BZ3dpQkNBRlJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBSWQzRTJBb2pRZ0lBQURBSUxJQVFnQUVZYUlBUWdCVFlDQ0NBRklBUTJBZ3dNQVFzZ0JpZ0NHQ0VKQWtBQ1FDQUdLQUlNSWdBZ0JrWU5BQ0FHS0FJSUlnUWdDRWthSUFBZ0JEWUNDQ0FFSUFBMkFnd01BUXNDUUNBR1FSUnFJZ1FvQWdBaUJRMEFJQVpCRUdvaUJDZ0NBQ0lGRFFCQkFDRUFEQUVMQTBBZ0JDRUlJQVVpQUVFVWFpSUVLQUlBSWdVTkFDQUFRUkJxSVFRZ0FDZ0NFQ0lGRFFBTElBaEJBRFlDQUFzZ0NVVU5BQUpBQWtBZ0JpQUdLQUljSWdWQkFuUkJ1TktBZ0FCcUlnUW9BZ0JIRFFBZ0JDQUFOZ0lBSUFBTkFVRUFRUUFvQW96UWdJQUFRWDRnQlhkeE5nS00wSUNBQUF3Q0N5QUpRUkJCRkNBSktBSVFJQVpHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQWsyQWhnQ1FDQUdLQUlRSWdSRkRRQWdBQ0FFTmdJUUlBUWdBRFlDR0FzZ0JpZ0NGQ0lFUlEwQUlBQkJGR29nQkRZQ0FDQUVJQUEyQWhnTElBY2dBMm9oQXlBR0lBZHFJZ1lvQWdRaEJBc2dCaUFFUVg1eE5nSUVJQUlnQTJvZ0F6WUNBQ0FDSUFOQkFYSTJBZ1FDUUNBRFFmOEJTdzBBSUFOQmVIRkJzTkNBZ0FCcUlRUUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQURRUU4yZENJRGNRMEFRUUFnQlNBRGNqWUNpTkNBZ0FBZ0JDRUREQUVMSUFRb0FnZ2hBd3NnQXlBQ05nSU1JQVFnQWpZQ0NDQUNJQVEyQWd3Z0FpQUROZ0lJREFNTFFSOGhCQUpBSUFOQi8vLy9CMHNOQUNBRFFRaDJJZ1FnQkVHQS9qOXFRUkIyUVFoeElnUjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ0FnQUVHQWdBOXFRUkIyUVFKeElnQjBRUTkySUFRZ0JYSWdBSEpySWdSQkFYUWdBeUFFUVJWcWRrRUJjWEpCSEdvaEJBc2dBaUFFTmdJY0lBSkNBRGNDRUNBRVFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQUVFQklBUjBJZ2h4RFFBZ0JTQUNOZ0lBUVFBZ0FDQUljallDak5DQWdBQWdBaUFGTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQXdzZ0EwRUFRUmtnQkVFQmRtc2dCRUVmUmh0MElRUWdCU2dDQUNFQUEwQWdBQ0lGS0FJRVFYaHhJQU5HRFFJZ0JFRWRkaUVBSUFSQkFYUWhCQ0FGSUFCQkJIRnFRUkJxSWdnb0FnQWlBQTBBQ3lBSUlBSTJBZ0FnQWlBRk5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFnc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUN5QUdRVWhxSWdnZ0Eyc2lBMEVCY2pZQ0JDQUFJQWhxUVRnMkFnUWdCQ0FGUVRjZ0JXdEJEM0ZCQUNBRlFVbHFRUTl4RzJwQlFXb2lDQ0FJSUFSQkVHcEpHeUlJUVNNMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFzMkFxRFFnSUFBSUFoQkVHcEJBQ2tDME5PQWdBQTNBZ0FnQ0VFQUtRTEkwNENBQURjQ0NFRUFJQWhCQ0dvMkF0RFRnSUFBUVFBZ0JqWUN6Tk9BZ0FCQkFDQUFOZ0xJMDRDQUFFRUFRUUEyQXRUVGdJQUFJQWhCSkdvaEF3TkFJQU5CQnpZQ0FDQURRUVJxSWdNZ0JVa05BQXNnQ0NBRVJnMERJQWdnQ0NnQ0JFRitjVFlDQkNBSUlBZ2dCR3NpQURZQ0FDQUVJQUJCQVhJMkFnUUNRQ0FBUWY4QlN3MEFJQUJCZUhGQnNOQ0FnQUJxSVFNQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBQVFRTjJkQ0lBY1EwQVFRQWdCU0FBY2pZQ2lOQ0FnQUFnQXlFRkRBRUxJQU1vQWdnaEJRc2dCU0FFTmdJTUlBTWdCRFlDQ0NBRUlBTTJBZ3dnQkNBRk5nSUlEQVFMUVI4aEF3SkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnTWdBMEdBL2o5cVFSQjJRUWh4SWdOMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnZ2dDRUdBZ0E5cVFSQjJRUUp4SWdoMFFROTJJQU1nQlhJZ0NISnJJZ05CQVhRZ0FDQURRUlZxZGtFQmNYSkJIR29oQXdzZ0JDQUROZ0ljSUFSQ0FEY0NFQ0FEUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlDRUVCSUFOMElnWnhEUUFnQlNBRU5nSUFRUUFnQ0NBR2NqWUNqTkNBZ0FBZ0JDQUZOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01CQXNnQUVFQVFSa2dBMEVCZG1zZ0EwRWZSaHQwSVFNZ0JTZ0NBQ0VJQTBBZ0NDSUZLQUlFUVhoeElBQkdEUU1nQTBFZGRpRUlJQU5CQVhRaEF5QUZJQWhCQkhGcVFSQnFJZ1lvQWdBaUNBMEFDeUFHSUFRMkFnQWdCQ0FGTmdJWUlBUWdCRFlDRENBRUlBUTJBZ2dNQXdzZ0JTZ0NDQ0lESUFJMkFnd2dCU0FDTmdJSUlBSkJBRFlDR0NBQ0lBVTJBZ3dnQWlBRE5nSUlDeUFMUVFocUlRTU1CUXNnQlNnQ0NDSURJQVEyQWd3Z0JTQUVOZ0lJSUFSQkFEWUNHQ0FFSUFVMkFnd2dCQ0FETmdJSUMwRUFLQUtVMElDQUFDSURJQUpORFFCQkFDZ0NvTkNBZ0FBaUJDQUNhaUlGSUFNZ0Ftc2lBMEVCY2pZQ0JFRUFJQU0yQXBUUWdJQUFRUUFnQlRZQ29OQ0FnQUFnQkNBQ1FRTnlOZ0lFSUFSQkNHb2hBd3dEQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdDQ3dKQUlBdEZEUUFDUUFKQUlBZ2dDQ2dDSENJRlFRSjBRYmpTZ0lBQWFpSURLQUlBUncwQUlBTWdBRFlDQUNBQURRRkJBQ0FIUVg0Z0JYZHhJZ2MyQW96UWdJQUFEQUlMSUF0QkVFRVVJQXNvQWhBZ0NFWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0N6WUNHQUpBSUFnb0FoQWlBMFVOQUNBQUlBTTJBaEFnQXlBQU5nSVlDeUFJUVJScUtBSUFJZ05GRFFBZ0FFRVVhaUFETmdJQUlBTWdBRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUlJQVFnQW1vaUEwRURjallDQkNBSUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUlJQUpxSWdBZ0JFRUJjallDQkNBSUlBSkJBM0kyQWdRZ0FDQUVhaUFFTmdJQUFrQWdCRUgvQVVzTkFDQUVRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQkVFRGRuUWlCSEVOQUVFQUlBVWdCSEkyQW9qUWdJQUFJQU1oQkF3QkN5QURLQUlJSVFRTElBUWdBRFlDRENBRElBQTJBZ2dnQUNBRE5nSU1JQUFnQkRZQ0NBd0JDMEVmSVFNQ1FDQUVRZi8vL3dkTERRQWdCRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQ0lBSkJnSUFQYWtFUWRrRUNjU0lDZEVFUGRpQURJQVZ5SUFKeWF5SURRUUYwSUFRZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFBZ0F6WUNIQ0FBUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQUlBZEJBU0FEZENJQ2NRMEFJQVVnQURZQ0FFRUFJQWNnQW5JMkFvelFnSUFBSUFBZ0JUWUNHQ0FBSUFBMkFnZ2dBQ0FBTmdJTURBRUxJQVJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhBZ0pBQTBBZ0FpSUZLQUlFUVhoeElBUkdEUUVnQTBFZGRpRUNJQU5CQVhRaEF5QUZJQUpCQkhGcVFSQnFJZ1lvQWdBaUFnMEFDeUFHSUFBMkFnQWdBQ0FGTmdJWUlBQWdBRFlDRENBQUlBQTJBZ2dNQVFzZ0JTZ0NDQ0lESUFBMkFnd2dCU0FBTmdJSUlBQkJBRFlDR0NBQUlBVTJBZ3dnQUNBRE5nSUlDeUFJUVFocUlRTU1BUXNDUUNBS1JRMEFBa0FDUUNBQUlBQW9BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBZzJBZ0FnQ0EwQlFRQWdDVUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDa0VRUVJRZ0NpZ0NFQ0FBUmh0cUlBZzJBZ0FnQ0VVTkFRc2dDQ0FLTmdJWUFrQWdBQ2dDRUNJRFJRMEFJQWdnQXpZQ0VDQURJQWcyQWhnTElBQkJGR29vQWdBaUEwVU5BQ0FJUVJScUlBTTJBZ0FnQXlBSU5nSVlDd0pBQWtBZ0JFRVBTdzBBSUFBZ0JDQUNhaUlEUVFOeU5nSUVJQUFnQTJvaUF5QURLQUlFUVFGeU5nSUVEQUVMSUFBZ0Ftb2lCU0FFUVFGeU5nSUVJQUFnQWtFRGNqWUNCQ0FGSUFScUlBUTJBZ0FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEF3SkFBa0JCQVNBSFFRTjJkQ0lJSUFaeERRQkJBQ0FJSUFaeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFNMkFnd2dBaUFETmdJSUlBTWdBallDRENBRElBZzJBZ2dMUVFBZ0JUWUNuTkNBZ0FCQkFDQUVOZ0tRMElDQUFBc2dBRUVJYWlFREN5QUJRUkJxSklDQWdJQUFJQU1MQ2dBZ0FCREpnSUNBQUF2aURRRUhmd0pBSUFCRkRRQWdBRUY0YWlJQklBQkJmR29vQWdBaUFrRjRjU0lBYWlFREFrQWdBa0VCY1EwQUlBSkJBM0ZGRFFFZ0FTQUJLQUlBSWdKcklnRkJBQ2dDbU5DQWdBQWlCRWtOQVNBQ0lBQnFJUUFDUUNBQlFRQW9BcHpRZ0lBQVJnMEFBa0FnQWtIL0FVc05BQ0FCS0FJSUlnUWdBa0VEZGlJRlFRTjBRYkRRZ0lBQWFpSUdSaG9DUUNBQktBSU1JZ0lnQkVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQlhkeE5nS0kwSUNBQUF3REN5QUNJQVpHR2lBQ0lBUTJBZ2dnQkNBQ05nSU1EQUlMSUFFb0FoZ2hCd0pBQWtBZ0FTZ0NEQ0lHSUFGR0RRQWdBU2dDQ0NJQ0lBUkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQVVFVWFpSUNLQUlBSWdRTkFDQUJRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRRUNRQUpBSUFFZ0FTZ0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQXdzZ0IwRVFRUlFnQnlnQ0VDQUJSaHRxSUFZMkFnQWdCa1VOQWdzZ0JpQUhOZ0lZQWtBZ0FTZ0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFFb0FoUWlBa1VOQVNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZREFFTElBTW9BZ1FpQWtFRGNVRURSdzBBSUFNZ0FrRitjVFlDQkVFQUlBQTJBcERRZ0lBQUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUVBDeUFCSUFOUERRQWdBeWdDQkNJQ1FRRnhSUTBBQWtBQ1FDQUNRUUp4RFFBQ1FDQURRUUFvQXFEUWdJQUFSdzBBUVFBZ0FUWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQUFhaUlBTmdLVTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkEwRUFRUUEyQXBEUWdJQUFRUUJCQURZQ25OQ0FnQUFQQ3dKQUlBTkJBQ2dDbk5DQWdBQkhEUUJCQUNBQk5nS2MwSUNBQUVFQVFRQW9BcERRZ0lBQUlBQnFJZ0EyQXBEUWdJQUFJQUVnQUVFQmNqWUNCQ0FCSUFCcUlBQTJBZ0FQQ3lBQ1FYaHhJQUJxSVFBQ1FBSkFJQUpCL3dGTERRQWdBeWdDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQXlnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQWdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0JDeUFES0FJWUlRY0NRQUpBSUFNb0Fnd2lCaUFEUmcwQUlBTW9BZ2dpQWtFQUtBS1kwSUNBQUVrYUlBWWdBallDQ0NBQ0lBWTJBZ3dNQVFzQ1FDQURRUlJxSWdJb0FnQWlCQTBBSUFOQkVHb2lBaWdDQUNJRURRQkJBQ0VHREFFTEEwQWdBaUVGSUFRaUJrRVVhaUlDS0FJQUlnUU5BQ0FHUVJCcUlRSWdCaWdDRUNJRURRQUxJQVZCQURZQ0FBc2dCMFVOQUFKQUFrQWdBeUFES0FJY0lnUkJBblJCdU5LQWdBQnFJZ0lvQWdCSERRQWdBaUFHTmdJQUlBWU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JIZHhOZ0tNMElDQUFBd0NDeUFIUVJCQkZDQUhLQUlRSUFOR0cyb2dCallDQUNBR1JRMEJDeUFHSUFjMkFoZ0NRQ0FES0FJUUlnSkZEUUFnQmlBQ05nSVFJQUlnQmpZQ0dBc2dBeWdDRkNJQ1JRMEFJQVpCRkdvZ0FqWUNBQ0FDSUFZMkFoZ0xJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkFVRUFJQUEyQXBEUWdJQUFEd3NnQXlBQ1FYNXhOZ0lFSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRTEFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVDQWtBQ1FFRUFLQUtJMElDQUFDSUVRUUVnQUVFRGRuUWlBSEVOQUVFQUlBUWdBSEkyQW9qUWdJQUFJQUloQUF3QkN5QUNLQUlJSVFBTElBQWdBVFlDRENBQ0lBRTJBZ2dnQVNBQ05nSU1JQUVnQURZQ0NBOExRUjhoQWdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdJZ0FrR0EvajlxUVJCMlFRaHhJZ0owSWdRZ0JFR0E0QjlxUVJCMlFRUnhJZ1IwSWdZZ0JrR0FnQTlxUVJCMlFRSnhJZ1owUVE5MklBSWdCSElnQm5KcklnSkJBWFFnQUNBQ1FSVnFka0VCY1hKQkhHb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJqU2dJQUFhaUVFQWtBQ1FFRUFLQUtNMElDQUFDSUdRUUVnQW5RaUEzRU5BQ0FFSUFFMkFnQkJBQ0FHSUFOeU5nS00wSUNBQUNBQklBUTJBaGdnQVNBQk5nSUlJQUVnQVRZQ0RBd0JDeUFBUVFCQkdTQUNRUUYyYXlBQ1FSOUdHM1FoQWlBRUtBSUFJUVlDUUFOQUlBWWlCQ2dDQkVGNGNTQUFSZzBCSUFKQkhYWWhCaUFDUVFGMElRSWdCQ0FHUVFSeGFrRVFhaUlES0FJQUlnWU5BQXNnQXlBQk5nSUFJQUVnQkRZQ0dDQUJJQUUyQWd3Z0FTQUJOZ0lJREFFTElBUW9BZ2dpQUNBQk5nSU1JQVFnQVRZQ0NDQUJRUUEyQWhnZ0FTQUVOZ0lNSUFFZ0FEWUNDQXRCQUVFQUtBS28wSUNBQUVGL2FpSUJRWDhnQVJzMkFxalFnSUFBQ3dzRUFBQUFDMDRBQWtBZ0FBMEFQd0JCRUhRUEN3SkFJQUJCLy84RGNRMEFJQUJCZjB3TkFBSkFJQUJCRUhaQUFDSUFRWDlIRFFCQkFFRXdOZ0w0MDRDQUFFRi9Ed3NnQUVFUWRBOExFTXFBZ0lBQUFBdnlBZ0lEZndGK0FrQWdBa1VOQUNBQUlBRTZBQUFnQWlBQWFpSURRWDlxSUFFNkFBQWdBa0VEU1EwQUlBQWdBVG9BQWlBQUlBRTZBQUVnQTBGOWFpQUJPZ0FBSUFOQmZtb2dBVG9BQUNBQ1FRZEpEUUFnQUNBQk9nQURJQU5CZkdvZ0FUb0FBQ0FDUVFsSkRRQWdBRUVBSUFCclFRTnhJZ1JxSWdNZ0FVSC9BWEZCZ1lLRUNHd2lBVFlDQUNBRElBSWdCR3RCZkhFaUJHb2lBa0Y4YWlBQk5nSUFJQVJCQ1VrTkFDQURJQUUyQWdnZ0F5QUJOZ0lFSUFKQmVHb2dBVFlDQUNBQ1FYUnFJQUUyQWdBZ0JFRVpTUTBBSUFNZ0FUWUNHQ0FESUFFMkFoUWdBeUFCTmdJUUlBTWdBVFlDRENBQ1FYQnFJQUUyQWdBZ0FrRnNhaUFCTmdJQUlBSkJhR29nQVRZQ0FDQUNRV1JxSUFFMkFnQWdCQ0FEUVFSeFFSaHlJZ1ZySWdKQklFa05BQ0FCclVLQmdJQ0FFSDRoQmlBRElBVnFJUUVEUUNBQklBWTNBeGdnQVNBR053TVFJQUVnQmpjRENDQUJJQVkzQXdBZ0FVRWdhaUVCSUFKQllHb2lBa0VmU3cwQUN3c2dBQXNMamtnQkFFR0FDQXVHU0FFQUFBQUNBQUFBQXdBQUFBQUFBQUFBQUFBQUJBQUFBQVVBQUFBQUFBQUFBQUFBQUFZQUFBQUhBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQnhkV1Z5ZVFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJKdlpIa0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ2IzWmxjbVpzYjNjQVEyaDFibXNnYzJsNlpTQnZkbVZ5Wm14dmR3QlNaWE53YjI1elpTQnZkbVZ5Wm14dmR3QkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdTRlJVVUM5NExuZ2djbVZ4ZFdWemRBQkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdVbFJUVUM5NExuZ2djbVZ4ZFdWemRBQkZlSEJsWTNSbFpDQlRUMVZTUTBVZ2JXVjBhRzlrSUdadmNpQkpRMFV2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQm1jbUZuYldWdWRDQnpkR0Z5ZEFCRmVIQmxZM1JsWkNCa2IzUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXpkR0YwZFhNQVNXNTJZV3hwWkNCeVpYTndiMjV6WlNCemRHRjBkWE1BU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3dCVmMyVnlJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl5WlhObGRHQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyaGxZV1JsY21BZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxjM05oWjJWZlltVm5hVzVnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZFhKc1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUZWdVpYaHdaV04wWldRZ1kyaGhjaUJwYmlCMWNtd2djMlZ5ZG1WeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUhaaGJIVmxJR05vWVhJQVNXNTJZV3hwWkNCb1pXRmtaWElnWm1sbGJHUWdZMmhoY2dCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNabGNuTnBiMjRBU1c1MllXeHBaQ0J0YVc1dmNpQjJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXRnFiM0lnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCMlpYSnphVzl1QUVWNGNHVmpkR1ZrSUVOU1RFWWdZV1owWlhJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUVoVVZGQWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHaGxZV1JsY2lCMGIydGxiZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1Z5YkFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY25NZ2FXNGdkWEpzQUZWdVpYaHdaV04wWldRZ2MzUmhjblFnWTJoaGNpQnBiaUIxY213QVJHOTFZbXhsSUVBZ2FXNGdkWEpzQUVWdGNIUjVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFUjFjR3hwWTJGMFpTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSWdhVzRnZFhKc0lIQmhkR2dBUTI5dWRHVnVkQzFNWlc1bmRHZ2dZMkZ1SjNRZ1ltVWdjSEpsYzJWdWRDQjNhWFJvSUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUhOcGVtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZmRtRnNkV1VBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QjJZV3gxWlFCTmFYTnphVzVuSUdWNGNHVmpkR1ZrSUV4R0lHRm1kR1Z5SUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1VnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpXUWdkbUZzZFdVQVVHRjFjMlZrSUdKNUlHOXVYMmhsWVdSbGNuTmZZMjl0Y0d4bGRHVUFTVzUyWVd4cFpDQkZUMFlnYzNSaGRHVUFiMjVmY21WelpYUWdjR0YxYzJVQWIyNWZZMmgxYm10ZmFHVmhaR1Z5SUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWW1WbmFXNGdjR0YxYzJVQWIyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsSUhCaGRYTmxBRzl1WDNOMFlYUjFjMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYM1Z5YkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5dFpYUm9iMlJmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxJSEJoZFhObEFGVnVaWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYzNSaGNuUWdiR2x1WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdibUZ0WlFCUVlYVnpaU0J2YmlCRFQwNU9SVU5VTDFWd1ozSmhaR1VBVUdGMWMyVWdiMjRnVUZKSkwxVndaM0poWkdVQVJYaHdaV04wWldRZ1NGUlVVQzh5SUVOdmJtNWxZM1JwYjI0Z1VISmxabUZqWlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDIxbGRHaHZaQUJGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCdFpYUm9iMlFBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZabWxsYkdRQVVHRjFjMlZrQUVsdWRtRnNhV1FnZDI5eVpDQmxibU52ZFc1MFpYSmxaQUJKYm5aaGJHbGtJRzFsZEdodlpDQmxibU52ZFc1MFpYSmxaQUJWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmphR1Z0WVFCU1pYRjFaWE4wSUdoaGN5QnBiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQUFVMWRKVkVOSVgxQlNUMWhaQUZWVFJWOVFVazlZV1FCTlMwRkRWRWxXU1ZSWkFGVk9VRkpQUTBWVFUwRkNURVZmUlU1VVNWUlpBRU5QVUZrQVRVOVdSVVJmVUVWU1RVRk9SVTVVVEZrQVZFOVBYMFZCVWt4WkFFNVBWRWxHV1FCR1FVbE1SVVJmUkVWUVJVNUVSVTVEV1FCQ1FVUmZSMEZVUlZkQldRQlFURUZaQUZCVlZBQkRTRVZEUzA5VlZBQkhRVlJGVjBGWlgxUkpUVVZQVlZRQVVrVlJWVVZUVkY5VVNVMUZUMVZVQUU1RlZGZFBVa3RmUTA5T1RrVkRWRjlVU1UxRlQxVlVBRU5QVGs1RlExUkpUMDVmVkVsTlJVOVZWQUJNVDBkSlRsOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlVrVkJSRjlVU1UxRlQxVlVBRkJQVTFRQVRVbFRSRWxTUlVOVVJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOU1UMEZFWDBKQlRFRk9RMFZFWDFKRlVWVkZVMVFBUWtGRVgxSkZVVlZGVTFRQVNGUlVVRjlTUlZGVlJWTlVYMU5GVGxSZlZFOWZTRlJVVUZOZlVFOVNWQUJTUlZCUFVsUUFTVTFmUVY5VVJVRlFUMVFBVWtWVFJWUmZRMDlPVkVWT1ZBQk9UMTlEVDA1VVJVNVVBRkJCVWxSSlFVeGZRMDlPVkVWT1ZBQklVRVZmU1U1V1FVeEpSRjlEVDA1VFZFRk9WQUJJVUVWZlEwSmZVa1ZUUlZRQVIwVlVBRWhRUlY5VFZGSkpRMVFBUTA5T1JreEpRMVFBVkVWTlVFOVNRVkpaWDFKRlJFbFNSVU5VQUZCRlVrMUJUa1ZPVkY5U1JVUkpVa1ZEVkFCRFQwNU9SVU5VQUUxVlRGUkpYMU5VUVZSVlV3QklVRVZmU1U1V1FVeEpSRjlUVkVGVVZWTUFWRTlQWDAxQlRsbGZVa1ZSVlVWVFZGTUFSVUZTVEZsZlNFbE9WRk1BVlU1QlZrRkpURUZDVEVWZlJrOVNYMHhGUjBGTVgxSkZRVk5QVGxNQVQxQlVTVTlPVXdCVFYwbFVRMGhKVGtkZlVGSlBWRTlEVDB4VEFGWkJVa2xCVGxSZlFVeFRUMTlPUlVkUFZFbEJWRVZUQUUxVlRGUkpVRXhGWDBOSVQwbERSVk1BU1U1VVJWSk9RVXhmVTBWU1ZrVlNYMFZTVWs5U0FGZEZRbDlUUlZKV1JWSmZWVTVMVGs5WFRsOUZVbEpQVWdCU1FVbE1SMVZPWDBWU1VrOVNBRWxFUlU1VVNWUlpYMUJTVDFaSlJFVlNYMEZWVkVoRlRsUkpRMEZVU1U5T1gwVlNVazlTQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlGVWxKUFVnQkpUbFpCVEVsRVgxaGZSazlTVjBGU1JFVkVYMFpQVWdCVFJWUmZVRUZTUVUxRlZFVlNBRWRGVkY5UVFWSkJUVVZVUlZJQVNGQkZYMVZUUlZJQVUwVkZYMDlVU0VWU0FFaFFSVjlEUWw5RFNGVk9TMTlJUlVGRVJWSUFUVXREUVV4RlRrUkJVZ0JUUlZSVlVBQlhSVUpmVTBWU1ZrVlNYMGxUWDBSUFYwNEFWRVZCVWtSUFYwNEFTRkJGWDBOTVQxTkZSRjlEVDA1T1JVTlVTVTlPQUVoRlZWSkpVMVJKUTE5RldGQkpVa0ZVU1U5T0FFUkpVME5QVGs1RlExUkZSRjlQVUVWU1FWUkpUMDRBVGs5T1gwRlZWRWhQVWtsVVFWUkpWa1ZmU1U1R1QxSk5RVlJKVDA0QVNGQkZYMGxPVmtGTVNVUmZWa1ZTVTBsUFRnQklVRVZmUTBKZlRVVlRVMEZIUlY5Q1JVZEpUZ0JUU1ZSRlgwbFRYMFpTVDFwRlRnQklVRVZmU1U1V1FVeEpSRjlJUlVGRVJWSmZWRTlMUlU0QVNVNVdRVXhKUkY5VVQwdEZUZ0JHVDFKQ1NVUkVSVTRBUlU1SVFVNURSVjlaVDFWU1gwTkJURTBBU0ZCRlgwbE9Wa0ZNU1VSZlZWSk1BRUpNVDBOTFJVUmZRbGxmVUVGU1JVNVVRVXhmUTA5T1ZGSlBUQUJOUzBOUFRBQkJRMHdBU0ZCRlgwbE9WRVZTVGtGTUFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFZmVlU1UFJrWkpRMGxCVEFCSVVFVmZUMHNBVlU1TVNVNUxBRlZPVEU5RFN3QlFVa2tBVWtWVVVsbGZWMGxVU0FCSVVFVmZTVTVXUVV4SlJGOURUMDVVUlU1VVgweEZUa2RVU0FCSVVFVmZWVTVGV0ZCRlExUkZSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQkdURlZUU0FCUVVrOVFVRUZVUTBnQVRTMVRSVUZTUTBnQVZWSkpYMVJQVDE5TVQwNUhBRkJTVDBORlUxTkpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVFSVkpUU1ZOVVJVNVVYMWRCVWs1SlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5WFFWSk9TVTVIQUVoUVJWOUpUbFpCVEVsRVgxUlNRVTVUUmtWU1gwVk9RMDlFU1U1SEFFVjRjR1ZqZEdWa0lFTlNURVlBU0ZCRlgwbE9Wa0ZNU1VSZlEwaFZUa3RmVTBsYVJRQk5UMVpGQUVOUFRsUkpUbFZGQUVoUVJWOURRbDlUVkVGVVZWTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWxOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFaRlVsTkpUMDVmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVZTVEY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gxWkJURlZGWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlEU0ZWT1MxOUZXRlJGVGxOSlQwNWZUa0ZOUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVFUwRkhSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZVU0U5RVgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmUmtsRlRFUmZRMDlOVUV4RlZFVUFSRVZNUlZSRkFFaFFSVjlKVGxaQlRFbEVYMFZQUmw5VFZFRlVSUUJKVGxaQlRFbEVYMU5UVEY5RFJWSlVTVVpKUTBGVVJRQlFRVlZUUlFCT1QxOVNSVk5RVDA1VFJRQlZUbE5WVUZCUFVsUkZSRjlOUlVSSlFWOVVXVkJGQUVkUFRrVUFUazlVWDBGRFEwVlFWRUZDVEVVQVUwVlNWa2xEUlY5VlRrRldRVWxNUVVKTVJRQlNRVTVIUlY5T1QxUmZVMEZVU1ZOR1NVRkNURVVBVDFKSlIwbE9YMGxUWDFWT1VrVkJRMGhCUWt4RkFGSkZVMUJQVGxORlgwbFRYMU5VUVV4RkFGQlZVa2RGQUUxRlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmVkU5UFgweEJVa2RGQUZCQldVeFBRVVJmVkU5UFgweEJVa2RGQUVsT1UxVkdSa2xEU1VWT1ZGOVRWRTlTUVVkRkFFaFFSVjlRUVZWVFJVUmZWVkJIVWtGRVJRQklVRVZmVUVGVlUwVkVYMGd5WDFWUVIxSkJSRVVBVTA5VlVrTkZBRUZPVGs5VlRrTkZBRlJTUVVORkFFaFFSVjlWVGtWWVVFVkRWRVZFWDFOUVFVTkZBRVJGVTBOU1NVSkZBRlZPVTFWQ1UwTlNTVUpGQUZKRlEwOVNSQUJJVUVWZlNVNVdRVXhKUkY5TlJWUklUMFFBVGs5VVgwWlBWVTVFQUZCU1QxQkdTVTVFQUZWT1FrbE9SQUJTUlVKSlRrUUFWVTVCVlZSSVQxSkpXa1ZFQUUxRlZFaFBSRjlPVDFSZlFVeE1UMWRGUkFCSVZGUlFYMVpGVWxOSlQwNWZUazlVWDFOVlVGQlBVbFJGUkFCQlRGSkZRVVJaWDFKRlVFOVNWRVZFQUVGRFEwVlFWRVZFQUU1UFZGOUpUVkJNUlUxRlRsUkZSQUJNVDA5UVgwUkZWRVZEVkVWRUFFaFFSVjlEVWw5RldGQkZRMVJGUkFCSVVFVmZURVpmUlZoUVJVTlVSVVFBUTFKRlFWUkZSQUJKVFY5VlUwVkVBRWhRUlY5UVFWVlRSVVFBVkVsTlJVOVZWRjlQUTBOVlVrVkVBRkJCV1UxRlRsUmZVa1ZSVlVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDFKRlVWVkpVa1ZFQUZCU1QxaFpYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFNUZWRmRQVWt0ZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVEVWT1IxUklYMUpGVVZWSlVrVkVBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOVNSVkZWU1ZKRlJBQlZVRWRTUVVSRlgxSkZVVlZKVWtWRUFGQkJSMFZmUlZoUVNWSkZSQUJRVWtWRFQwNUVTVlJKVDA1ZlJrRkpURVZFQUVWWVVFVkRWRUZVU1U5T1gwWkJTVXhGUkFCU1JWWkJURWxFUVZSSlQwNWZSa0ZKVEVWRUFGTlRURjlJUVU1RVUwaEJTMFZmUmtGSlRFVkVBRXhQUTB0RlJBQlVVa0ZPVTBaUFVrMUJWRWxQVGw5QlVGQk1TVVZFQUU1UFZGOU5UMFJKUmtsRlJBQk9UMVJmUlZoVVJVNUVSVVFBUWtGT1JGZEpSRlJJWDB4SlRVbFVYMFZZUTBWRlJFVkVBRk5KVkVWZlNWTmZUMVpGVWt4UFFVUkZSQUJJUlVGRUFFVjRjR1ZqZEdWa0lFaFVWRkF2QUFCZUV3QUFKaE1BQURBUUFBRHdGd0FBblJNQUFCVVNBQUE1RndBQThCSUFBQW9RQUFCMUVnQUFyUklBQUlJVEFBQlBGQUFBZnhBQUFLQVZBQUFqRkFBQWlSSUFBSXNVQUFCTkZRQUExQkVBQU04VUFBQVFHQUFBeVJZQUFOd1dBQURCRVFBQTRCY0FBTHNVQUFCMEZBQUFmQlVBQU9VVUFBQUlGd0FBSHhBQUFHVVZBQUNqRkFBQUtCVUFBQUlWQUFDWkZRQUFMQkFBQUlzWkFBQlBEd0FBMUE0QUFHb1FBQURPRUFBQUFoY0FBSWtPQUFCdUV3QUFIQk1BQUdZVUFBQldGd0FBd1JNQUFNMFRBQUJzRXdBQWFCY0FBR1lYQUFCZkZ3QUFJaE1BQU00UEFBQnBEZ0FBMkE0QUFHTVdBQURMRXdBQXFnNEFBQ2dYQUFBbUZ3QUF4Uk1BQUYwV0FBRG9FUUFBWnhNQUFHVVRBQUR5RmdBQWN4TUFBQjBYQUFENUZnQUE4eEVBQU04T0FBRE9GUUFBREJJQUFMTVJBQUNsRVFBQVlSQUFBRElYQUFDN0V3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ01DQWdJQ0FnQUFBZ0lBQWdJQUFnSUNBZ0lDQWdJQ0FnQUVBQUFBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUlBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQXdBRUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzYjNObFpXVndMV0ZzYVhabEFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRmphSFZ1YTJWa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1ZqZEdsdmJtVnVkQzFzWlc1bmRHaHZibkp2ZUhrdFkyOXVibVZqZEdsdmJnQUFBQUFBQUFBQUFBQUFBQUFBQUhKaGJuTm1aWEl0Wlc1amIyUnBibWR3WjNKaFpHVU5DZzBLRFFwVFRRMEtEUXBVVkZBdlEwVXZWRk5RTHdBQUFBQUFBQUFBQUFBQUFBRUNBQUVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUVVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFCQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUFBQVFFQkFRRUJBUUVCQVFFQlFRRUJBUUVCQVFFQkFRRUJBQUVBQVlIQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRQUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFnQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09J1xuIiwKICAgICIvLyBAdHMtY2hlY2tcblxuJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi90aW1lcnMnKVxuY29uc3QgUmVxdWVzdCA9IHJlcXVpcmUoJy4vY29yZS9yZXF1ZXN0JylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrUGFyc2VyLFxuICBrQ29ubmVjdCxcbiAga0Jsb2NraW5nLFxuICBrUmVzdW1pbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga0Nvbm5lY3RvcixcbiAga01heFJlZGlyZWN0aW9ucyxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga0Nsb3NlLFxuICBrRGVzdHJveSxcbiAga0Rpc3BhdGNoLFxuICBrSW50ZXJjZXB0b3JzLFxuICBrTG9jYWxBZGRyZXNzLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrSFRUUENvbm5WZXJzaW9uLFxuICAvLyBIVFRQMlxuICBrSG9zdCxcbiAga0hUVFAyU2Vzc2lvbixcbiAga0hUVFAyU2Vzc2lvblN0YXRlLFxuICBrSFRUUDJCdWlsZFJlcXVlc3QsXG4gIGtIVFRQMkNvcHlIZWFkZXJzLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Rcbn0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJylcbn0gY2F0Y2gge1xuICAvLyBAdHMtaWdub3JlXG4gIGh0dHAyID0geyBjb25zdGFudHM6IHt9IH1cbn1cblxuY29uc3Qge1xuICBjb25zdGFudHM6IHtcbiAgICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICAgIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gICAgSFRUUDJfSEVBREVSX1BBVEgsXG4gICAgSFRUUDJfSEVBREVSX1NDSEVNRSxcbiAgICBIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgsXG4gICAgSFRUUDJfSEVBREVSX0VYUEVDVCxcbiAgICBIVFRQMl9IRUFERVJfU1RBVFVTXG4gIH1cbn0gPSBodHRwMlxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5cbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdrQ2xvc2VkUmVzb2x2ZScpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpXG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpXG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdGVkID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLmRlZmF1bHR9XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5DbGllbnQuT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwge1xuICAgIGludGVyY2VwdG9ycyxcbiAgICBtYXhIZWFkZXJTaXplLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIHNvY2tldFRpbWVvdXQsXG4gICAgcmVxdWVzdFRpbWVvdXQsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQsXG4gICAgbWF4S2VlcEFsaXZlVGltZW91dCxcbiAgICBrZWVwQWxpdmVNYXhUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gICAgc29ja2V0UGF0aCxcbiAgICBwaXBlbGluaW5nLFxuICAgIHRscyxcbiAgICBzdHJpY3RDb250ZW50TGVuZ3RoLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICBjb25uZWN0LFxuICAgIG1heFJlcXVlc3RzUGVyQ2xpZW50LFxuICAgIGxvY2FsQWRkcmVzcyxcbiAgICBtYXhSZXNwb25zZVNpemUsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgLy8gaDJcbiAgICBhbGxvd0gyLFxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChrZWVwQWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBrZWVwQWxpdmUsIHVzZSBwaXBlbGluaW5nPTAgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBzb2NrZXRUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCByZXF1ZXN0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKGlkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgaWRsZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhLZWVwQWxpdmVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgbWF4S2VlcEFsaXZlVGltZW91dCwgdXNlIGtlZXBBbGl2ZU1heFRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEhlYWRlclNpemUgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKG1heEhlYWRlclNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWF4SGVhZGVyU2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFBhdGggIT0gbnVsbCAmJiB0eXBlb2Ygc29ja2V0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBzb2NrZXRQYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0VGltZW91dCkgfHwgY29ubmVjdFRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3RUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXQpIHx8IGtlZXBBbGl2ZVRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlTWF4VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZU1heFRpbWVvdXQpIHx8IGtlZXBBbGl2ZU1heFRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVNYXhUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVyc1RpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHlUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVxdWVzdHNQZXJDbGllbnQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVxdWVzdHNQZXJDbGllbnQpIHx8IG1heFJlcXVlc3RzUGVyQ2xpZW50IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVxdWVzdHNQZXJDbGllbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGxvY2FsQWRkcmVzcyAhPSBudWxsICYmICh0eXBlb2YgbG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJyB8fCBuZXQuaXNJUChsb2NhbEFkZHJlc3MpID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdsb2NhbEFkZHJlc3MgbXVzdCBiZSB2YWxpZCBzdHJpbmcgSVAgYWRkcmVzcycpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXNwb25zZVNpemUpIHx8IG1heFJlc3BvbnNlU2l6ZSA8IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXNwb25zZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0ICE9IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQpIHx8IGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCA8IC0xKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgLy8gaDJcbiAgICBpZiAoYWxsb3dIMiAhPSBudWxsICYmIHR5cGVvZiBhbGxvd0gyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYWxsb3dIMiBtdXN0IGJlIGEgdmFsaWQgYm9vbGVhbiB2YWx1ZScpXG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgJiYgKHR5cGVvZiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPT0gJ251bWJlcicgfHwgbWF4Q29uY3VycmVudFN0cmVhbXMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDb25jdXJyZW50U3RyZWFtcyBtdXN0IGJlIGEgcG9zc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMuQ2xpZW50ICYmIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3JzLkNsaWVudClcbiAgICAgID8gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tTb2NrZXRdID0gbnVsbFxuICAgIHRoaXNba1BpcGVsaW5pbmddID0gcGlwZWxpbmluZyAhPSBudWxsID8gcGlwZWxpbmluZyA6IDFcbiAgICB0aGlzW2tNYXhIZWFkZXJzU2l6ZV0gPSBtYXhIZWFkZXJTaXplIHx8IGh0dHAubWF4SGVhZGVyU2l6ZVxuICAgIHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XSA9IGtlZXBBbGl2ZVRpbWVvdXQgPT0gbnVsbCA/IDRlMyA6IGtlZXBBbGl2ZVRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVNYXhUaW1lb3V0XSA9IGtlZXBBbGl2ZU1heFRpbWVvdXQgPT0gbnVsbCA/IDYwMGUzIDoga2VlcEFsaXZlTWF4VGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdID0ga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCA9PSBudWxsID8gMWUzIDoga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICB0aGlzW2tTZXJ2ZXJOYW1lXSA9IG51bGxcbiAgICB0aGlzW2tMb2NhbEFkZHJlc3NdID0gbG9jYWxBZGRyZXNzICE9IG51bGwgPyBsb2NhbEFkZHJlc3MgOiBudWxsXG4gICAgdGhpc1trUmVzdW1pbmddID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tIb3N0SGVhZGVyXSA9IGBob3N0OiAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31cXHJcXG5gXG4gICAgdGhpc1trQm9keVRpbWVvdXRdID0gYm9keVRpbWVvdXQgIT0gbnVsbCA/IGJvZHlUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tIZWFkZXJzVGltZW91dF0gPSBoZWFkZXJzVGltZW91dCAhPSBudWxsID8gaGVhZGVyc1RpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba1N0cmljdENvbnRlbnRMZW5ndGhdID0gc3RyaWN0Q29udGVudExlbmd0aCA9PSBudWxsID8gdHJ1ZSA6IHN0cmljdENvbnRlbnRMZW5ndGhcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trTWF4UmVxdWVzdHNdID0gbWF4UmVxdWVzdHNQZXJDbGllbnRcbiAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICB0aGlzW2tNYXhSZXNwb25zZVNpemVdID0gbWF4UmVzcG9uc2VTaXplID4gLTEgPyBtYXhSZXNwb25zZVNpemUgOiAtMVxuICAgIHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPSAnaDEnXG5cbiAgICAvLyBIVFRQLzJcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9ICFhbGxvd0gyXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAvLyBzdHJlYW1zOiBudWxsLCAvLyBGaXhlZCBxdWV1ZSBvZiBzdHJlYW1zIC0gRm9yIGZ1dHVyZSBzdXBwb3J0IG9mIGBwdXNoYFxuICAgICAgICAgIG9wZW5TdHJlYW1zOiAwLCAvLyBLZWVwIHRyYWNrIG9mIHRoZW0gdG8gZGVjaWRlIHdldGhlciBvciBub3QgdW5yZWYgdGhlIHNlc3Npb25cbiAgICAgICAgICBtYXhDb25jdXJyZW50U3RyZWFtczogbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIHRoaXNba0hvc3RdID0gYCR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfWBcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1BlbmRpbmdJZHhdXG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BlbmRpbmdJZHhdIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gISF0aGlzW2tTb2NrZXRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trU29ja2V0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tTb2NrZXRdXG4gICAgcmV0dXJuIChcbiAgICAgIChzb2NrZXQgJiYgKHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tCbG9ja2luZ10pKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49ICh0aGlzW2tQaXBlbGluaW5nXSB8fCAxKSkgfHxcbiAgICAgIHRoaXNba1BlbmRpbmddID4gMFxuICAgIClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZTogb25seSB1c2VkIGZvciB0ZXN0ICovXG4gIFtrQ29ubmVjdF0gKGNiKSB7XG4gICAgY29ubmVjdCh0aGlzKVxuICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGNiKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvcmlnaW4gPSBvcHRzLm9yaWdpbiB8fCB0aGlzW2tVcmxdLm9yaWdpblxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgICAgID8gUmVxdWVzdFtrSFRUUDJCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgICAgIDogUmVxdWVzdFtrSFRUUDFCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSAmJiB0aGlzW2tOZWVkRHJhaW5dICE9PSAyICYmIHRoaXNba0J1c3ldKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gMlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dIDwgMlxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIC8vIFRPRE86IGZvciBIMiB3ZSBuZWVkIHRvIGdyYWNlZnVsbHkgZmx1c2ggdGhlIHJlbWFpbmluZyBlbnF1ZXVlZFxuICAgIC8vIHJlcXVlc3QgYW5kIGNsb3NlIGVhY2ggc3RyZWFtLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW2tTaXplXSkge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba0hUVFAyU2Vzc2lvbl0sIGVycilcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXNba1NvY2tldF0pIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XS5vbignY2xvc2UnLCBjYWxsYmFjayksIGVycilcbiAgICAgIH1cblxuICAgICAgcmVzdW1lKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJGcmFtZUVycm9yICh0eXBlLCBjb2RlLCBpZCkge1xuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuXG4gIGlmIChpZCA9PT0gMCkge1xuICAgIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuICAgIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbn1cblxuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRdXG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJHT0FXQVlcIiBmcmFtZSByZWNlaXZlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KHRoaXNba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JyxcbiAgICBjbGllbnRba1VybF0sXG4gICAgW2NsaWVudF0sXG4gICAgZXJyXG4gIClcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2xsaHR0cC9jb25zdGFudHMnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20ocmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2QsIHtcbiAgICBlbnY6IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gICAgICB3YXNtX29uX3VybDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX3N0YXR1czogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vblN0YXR1cyhuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfYmVnaW46IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQmVnaW4oKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfZmllbGQ6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJGaWVsZChuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl92YWx1ZTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlclZhbHVlKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyc19jb21wbGV0ZTogKHAsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyc0NvbXBsZXRlKHN0YXR1c0NvZGUsIEJvb2xlYW4odXBncmFkZSksIEJvb2xlYW4oc2hvdWxkS2VlcEFsaXZlKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fYm9keTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkJvZHkobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2NvbXBsZXRlOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKCkgfHwgMFxuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuICAgIH1cbiAgfSlcbn1cblxubGV0IGxsaHR0cEluc3RhbmNlID0gbnVsbFxubGV0IGxsaHR0cFByb21pc2UgPSBsYXp5bGxodHRwKClcbmxsaHR0cFByb21pc2UuY2F0Y2goKVxuXG5sZXQgY3VycmVudFBhcnNlciA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJTaXplID0gMFxubGV0IGN1cnJlbnRCdWZmZXJQdHIgPSBudWxsXG5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDFcbmNvbnN0IFRJTUVPVVRfQk9EWSA9IDJcbmNvbnN0IFRJTUVPVVRfSURMRSA9IDNcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0ICh2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSkge1xuICAgICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCB2YWx1ZSwgdGhpcylcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHRoaXMudGltZW91dC51bnJlZikge1xuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZW91dFZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICBvblN0YXR1cyAoYnVmKSB7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gYnVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIG9uTWVzc2FnZUJlZ2luICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJGaWVsZCAoYnVmKSB7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgb25IZWFkZXJWYWx1ZSAoYnVmKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICAgIGxlbiArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmhlYWRlcnNbbGVuIC0gMl1cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoc29ja2V0ID09PSBjbGllbnRba1NvY2tldF0pXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcbiAgICBhc3NlcnQocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IG51bGxcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBzb2NrZXQudW5zaGlmdChoZWFkKVxuXG4gICAgc29ja2V0W2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHNvY2tldFtrUGFyc2VyXSA9IG51bGxcblxuICAgIHNvY2tldFtrQ2xpZW50XSA9IG51bGxcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcbiAgICBzb2NrZXRcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmICh0aGlzLnNob3VsZEtlZXBBbGl2ZSAmJiBjbGllbnRba1BpcGVsaW5pbmddKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUaW1lb3V0ID0gdGhpcy5rZWVwQWxpdmUgPyB1dGlsLnBhcnNlS2VlcEFsaXZlVGltZW91dCh0aGlzLmtlZXBBbGl2ZSkgOiBudWxsXG5cbiAgICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWluKFxuICAgICAgICAgIGtlZXBBbGl2ZVRpbWVvdXQgLSBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdLFxuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlTWF4VGltZW91dF1cbiAgICAgICAgKVxuICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGltZW91dFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSBjbGllbnRba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9wIG1vcmUgcmVxdWVzdHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkLlxuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGF1c2UgPSByZXF1ZXN0Lm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCB0aGlzLnJlc3VtZSwgc3RhdHVzVGV4dCkgPT09IGZhbHNlXG5cbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdXNlID8gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCA6IDBcbiAgfVxuXG4gIG9uQm9keSAoYnVmKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgbWF4UmVzcG9uc2VTaXplIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDIwMClcblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgPiAtMSAmJiB0aGlzLmJ5dGVzUmVhZCArIGJ1Zi5sZW5ndGggPiBtYXhSZXNwb25zZVNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzUmVhZCArPSBidWYubGVuZ3RoXG5cbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoYnVmKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlQ29tcGxldGUgKCkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCwgc2hvdWxkS2VlcEFsaXZlIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCAmJiAoIXN0YXR1c0NvZGUgfHwgc2hvdWxkS2VlcEFsaXZlKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxsaHR0cD8gKi9cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoICYmIGJ5dGVzUmVhZCAhPT0gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKGhlYWRlcnMpXG5cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjbGllbnRba1J1bm5pbmddLCAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09PSAxKSB7XG4gICAgICAvLyBXZSBtdXN0IHdhaXQgYSBmdWxsIGV2ZW50IGxvb3AgY3ljbGUgdG8gcmV1c2UgdGhpcyBzb2NrZXQgdG8gbWFrZSBzdXJlXG4gICAgICAvLyB0aGF0IG5vbi1zcGVjIGNvbXBsaWFudCBzZXJ2ZXJzIGFyZSBub3QgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBldmVuIGlmIHRoZXlcbiAgICAgIC8vIHNhaWQgdGhleSB3b24ndC5cbiAgICAgIHNldEltbWVkaWF0ZShyZXN1bWUsIGNsaWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25QYXJzZXJUaW1lb3V0IChwYXJzZXIpIHtcbiAgY29uc3QgeyBzb2NrZXQsIHRpbWVvdXRUeXBlLCBjbGllbnQgfSA9IHBhcnNlclxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXJzZXIucGF1c2VkLCAnY2Fubm90IGJlIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBoZWFkZXJzJylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBIZWFkZXJzVGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpIHtcbiAgICBpZiAoIXBhcnNlci5wYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0lETEUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0UmVhZGFibGUgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG4gIGlmIChwYXJzZXIpIHtcbiAgICBwYXJzZXIucmVhZE1vcmUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycikge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICAvLyBPbiBNYWMgT1MsIHdlIGdldCBhbiBFQ09OTlJFU0VUIGV2ZW4gaWYgdGhlcmUgaXMgYSBmdWxsIGJvZHkgdG8gYmUgZm9yd2FyZGVkXG4gICAgLy8gdG8gdGhlIHVzZXIuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZvciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkVycm9yIChjbGllbnQsIGVycikge1xuICBpZiAoXG4gICAgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnXG4gICkge1xuICAgIC8vIEVycm9yIGlzIG5vdCBjYXVzZWQgYnkgcnVubmluZyByZXF1ZXN0IGFuZCBub3QgYSByZWNvdmVyYWJsZVxuICAgIC8vIHNvY2tldCBlcnJvci5cblxuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmdJZHhdID09PSBjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFbmQgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyLCBba0NsaWVudF06IGNsaWVudCB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gxJyAmJiBwYXJzZXIpIHtcbiAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgIH1cblxuICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrU29ja2V0XSlcblxuICBsZXQgeyBob3N0LCBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIC8vIFJlc29sdmUgaXB2NlxuICBpZiAoaG9zdG5hbWVbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3RuYW1lLmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgY29uc3QgaXAgPSBob3N0bmFtZS5zdWJzdHJpbmcoMSwgaWR4KVxuXG4gICAgYXNzZXJ0KG5ldC5pc0lQKGlwKSlcbiAgICBob3N0bmFtZSA9IGlwXG4gIH1cblxuICBjbGllbnRba0Nvbm5lY3RpbmddID0gdHJ1ZVxuXG4gIGlmIChjaGFubmVscy5iZWZvcmVDb25uZWN0Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5wdWJsaXNoKHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSksIG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgY29uc3QgaXNIMiA9IHNvY2tldC5hbHBuUHJvdG9jb2wgPT09ICdoMidcbiAgICBpZiAoaXNIMikge1xuICAgICAgaWYgKCFoMkV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgICBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgICAgY29kZTogJ1VORElDSS1IMidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoY2xpZW50W2tVcmxdLCB7XG4gICAgICAgIGNyZWF0ZUNvbm5lY3Rpb246ICgpID0+IHNvY2tldCxcbiAgICAgICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXS5tYXhDb25jdXJyZW50U3RyZWFtc1xuICAgICAgfSlcblxuICAgICAgY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID0gJ2gyJ1xuICAgICAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICAgICAgc2Vzc2lvbltrU29ja2V0XSA9IHNvY2tldFxuICAgICAgc2Vzc2lvbi5vbignZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZnJhbWVFcnJvcicsIG9uSHR0cDJGcmFtZUVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZW5kJywgb25IdHRwMlNlc3Npb25FbmQpXG4gICAgICBzZXNzaW9uLm9uKCdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgc2Vzc2lvbi51bnJlZigpXG5cbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICAgIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgICAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICAgICAgbGxodHRwUHJvbWlzZSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1BhcnNlcl0gPSBuZXcgUGFyc2VyKGNsaWVudCwgc29ja2V0LCBsbGh0dHBJbnN0YW5jZSlcbiAgICB9XG5cbiAgICBzb2NrZXRba0NvdW50ZXJdID0gMFxuICAgIHNvY2tldFtrTWF4UmVxdWVzdHNdID0gY2xpZW50W2tNYXhSZXF1ZXN0c11cbiAgICBzb2NrZXRba0NsaWVudF0gPSBjbGllbnRcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcblxuICAgIHNvY2tldFxuICAgICAgLm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAub24oJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5vbignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IoY2xpZW50LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcbiAgfVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmZ1bmN0aW9uIGVtaXREcmFpbiAoY2xpZW50KSB7XG4gIGNsaWVudFtrTmVlZERyYWluXSA9IDBcbiAgY2xpZW50LmVtaXQoJ2RyYWluJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbn1cblxuZnVuY3Rpb24gcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgaWYgKGNsaWVudFtrUmVzdW1pbmddID09PSAyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDJcblxuICBfcmVzdW1lKGNsaWVudCwgc3luYylcbiAgY2xpZW50W2tSZXN1bWluZ10gPSAwXG5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPiAyNTYpIHtcbiAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoMCwgY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBjbGllbnRba1BlbmRpbmdJZHhdIC09IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1J1bm5pbmdJZHhdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXN1bWUgKGNsaWVudCwgc3luYykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nsb3NlZFJlc29sdmVdICYmICFjbGllbnRba1NpemVdKSB7XG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICAgIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQgJiYgc29ja2V0LmFscG5Qcm90b2NvbCAhPT0gJ2gyJykge1xuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgICBzb2NrZXQudW5yZWYoKVxuICAgICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvY2tldFtrTm9SZWZdICYmIHNvY2tldC5yZWYpIHtcbiAgICAgICAgc29ja2V0LnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9JRExFKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdLCBUSU1FT1VUX0lETEUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICAgID8gcmVxdWVzdC5oZWFkZXJzVGltZW91dFxuICAgICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdERyYWluLCBjbGllbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGNsaWVudFtrUGlwZWxpbmluZ10gfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcblxuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQuc2VydmVybmFtZSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzb2NrZXQgJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgIXJlcXVlc3QuaWRlbXBvdGVudCkge1xuICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgLy8gRG9uJ3QgZGlzcGF0Y2ggYW4gdXBncmFkZSB1bnRpbCBhbGwgcHJlY2VkaW5nIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpKSB7XG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIGJ5IHdhaXRpbmcgZm9yIGluZmxpZ2h0XG4gICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiB3cml0ZShjbGllbnQsIHJlcXVlc3QpKSB7XG4gICAgICBjbGllbnRba1BlbmRpbmdJZHhdKytcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUGVuZGluZ0lkeF0sIDEpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIHdyaXRlSDIoY2xpZW50LCBjbGllbnRba0hUVFAyU2Vzc2lvbl0sIHJlcXVlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgaGVhZGVycywgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gYm9keUxlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignYWJvcnRlZCcpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvaXNzdWVzLzI1OFxuICAgIC8vIENsb3NlIGFmdGVyIGEgSEVBRCByZXF1ZXN0IHRvIGludGVyb3Agd2l0aCBtaXNiZWhhdmluZyBzZXJ2ZXJzXG4gICAgLy8gdGhhdCBtYXkgc2VuZCBhIGJvZHkgaW4gdGhlIHJlc3BvbnNlLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIC8vIE9uIENPTk5FQ1Qgb3IgdXBncmFkZSwgYmxvY2sgcGlwZWxpbmUgZnJvbSBkaXNwYXRjaGluZyBmdXJ0aGVyXG4gICAgLy8gcmVxdWVzdHMgb24gdGhpcyBjb25uZWN0aW9uLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAocmVzZXQgIT0gbnVsbCkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gcmVzZXRcbiAgfVxuXG4gIGlmIChjbGllbnRba01heFJlcXVlc3RzXSAmJiBzb2NrZXRba0NvdW50ZXJdKysgPj0gY2xpZW50W2tNYXhSZXF1ZXN0c10pIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChibG9ja2luZykge1xuICAgIHNvY2tldFtrQmxvY2tpbmddID0gdHJ1ZVxuICB9XG5cbiAgbGV0IGhlYWRlciA9IGAke21ldGhvZH0gJHtwYXRofSBIVFRQLzEuMVxcclxcbmBcblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgaGVhZGVyICs9IGBob3N0OiAke2hvc3R9XFxyXFxuYFxuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSBjbGllbnRba0hvc3RIZWFkZXJdXG4gIH1cblxuICBpZiAodXBncmFkZSkge1xuICAgIGhlYWRlciArPSBgY29ubmVjdGlvbjogdXBncmFkZVxcclxcbnVwZ3JhZGU6ICR7dXBncmFkZX1cXHJcXG5gXG4gIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSAmJiAhc29ja2V0W2tSZXNldF0pIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGtlZXAtYWxpdmVcXHJcXG4nXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBjbG9zZVxcclxcbidcbiAgfVxuXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgaGVhZGVyICs9IGhlYWRlcnNcbiAgfVxuXG4gIGlmIChjaGFubmVscy5zZW5kSGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNlbmRIZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0LCBoZWFkZXJzOiBoZWFkZXIsIHNvY2tldCB9KVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICBpZiAoIWJvZHkgfHwgYm9keUxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgc29ja2V0LmNvcmsoKVxuICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICBzb2NrZXQudW5jb3JrKClcbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keTogYm9keS5zdHJlYW0oKSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHNlc3Npb24sIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGV4cGVjdENvbnRpbnVlLCBzaWduYWwsIGhlYWRlcnM6IHJlcUhlYWRlcnMgfSA9IHJlcXVlc3RcblxuICBsZXQgaGVhZGVyc1xuICBpZiAodHlwZW9mIHJlcUhlYWRlcnMgPT09ICdzdHJpbmcnKSBoZWFkZXJzID0gUmVxdWVzdFtrSFRUUDJDb3B5SGVhZGVyc10ocmVxSGVhZGVycy50cmltKCkpXG4gIGVsc2UgaGVhZGVycyA9IHJlcUhlYWRlcnNcblxuICBpZiAodXBncmFkZSkge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUT0RPKEhUVFAvMik6IFNob3VsZCB3ZSBjYWxsIG9uQ29ubmVjdCBpbW1lZGlhdGVseSBvciBvbiBzdHJlYW0gcmVhZHkgZXZlbnQ/XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuICBjb25zdCBoMlN0YXRlID0gY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV1cblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9BVVRIT1JJVFldID0gaG9zdCB8fCBjbGllbnRba0hvc3RdXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBzZXNzaW9uLnJlZigpXG4gICAgLy8gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLCBzdHJlYW1zIGFyZSBwZW5kaW5nLCBmaXJzdCByZXF1ZXN0XG4gICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgc3RyZWFtLiBXZSB0cmlnZ2VyIGEgcmVxdWVzdCB0byBjcmVhdGUgdGhlIHN0cmVhbSBhbmQgd2FpdCB1bnRpbFxuICAgIC8vIGByZWFkeWAgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gICAgLy8gV2UgZGlzYWJsZWQgZW5kU3RyZWFtIHRvIGFsbG93IHRoZSB1c2VyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW1cbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IGZhbHNlLCBzaWduYWwgfSlcblxuICAgIGlmIChzdHJlYW0uaWQgJiYgIXN0cmVhbS5wZW5kaW5nKSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uY2UoJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHNlc3Npb24udW5yZWYoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04LjNcbiAgLy8gOnBhdGggYW5kIDpzY2hlbWUgaGVhZGVycyBtdXN0IGJlIG9taXRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwIHx8ICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGFzc2VydChib2R5LCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSF0gPSBgJHtjb250ZW50TGVuZ3RofWBcbiAgfVxuXG4gIHNlc3Npb24ucmVmKClcblxuICBjb25zdCBzaG91bGRFbmRTdHJlYW0gPSBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc2V2ZXJhbCBzdHJlYW1zIG9wZW5cbiAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCByZWFsSGVhZGVycywgc3RyZWFtLnJlc3VtZS5iaW5kKHN0cmVhbSksICcnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKFtdKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZnJhbWVFcnJvcicsICh0eXBlLCBjb2RlKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHN0cmVhbS5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgYWJvcnRlZFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndGltZW91dCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdGltZW91dFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigncHVzaCcsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9yIHB1c2hcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RyYWlsZXJzJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRyYWlsZXJzXG4gIC8vIH0pXG5cbiAgcmV0dXJuIHRydWVcblxuICBmdW5jdGlvbiB3cml0ZUJvZHlIMiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc3RyZWFtLmNvcmsoKVxuICAgICAgc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBzdHJlYW0udW5jb3JrKClcbiAgICAgIHN0cmVhbS5lbmQoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBib2R5OiBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICAgIGhlYWRlcjogJydcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYih7XG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgd3JpdGVTdHJlYW0oe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHBpcGUgPSBwaXBlbGluZShcbiAgICAgIGJvZHksXG4gICAgICBoMnN0cmVhbSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgICAgdXRpbC5kZXN0cm95KGgyc3RyZWFtLCBlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHBpcGUub24oJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgIHBpcGUub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgcGlwZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgICB1dGlsLmRlc3Ryb3kocGlwZSlcbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gb25QaXBlRGF0YSAoY2h1bmspIHtcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcblxuICBjb25zdCBvbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykgJiYgdGhpcy5wYXVzZSkge1xuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICAgIGJvZHkucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gb25GaW5pc2hlZChlcnIpKVxuICB9XG4gIGNvbnN0IG9uRmluaXNoZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmaW5pc2hlZCA9IHRydWVcblxuICAgIGFzc2VydChzb2NrZXQuZGVzdHJveWVkIHx8IChzb2NrZXRba1dyaXRpbmddICYmIGNsaWVudFtrUnVubmluZ10gPD0gMSkpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2Vycm9yJywgb25GaW5pc2hlZClcblxuICAgIGJvZHlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkFib3J0KVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIGNvbnN0IGlzSDIgPSBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggIT09IGJvZHkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpKVxuXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGgyc3RyZWFtLmNvcmsoKVxuICAgICAgaDJzdHJlYW0ud3JpdGUoYnVmZmVyKVxuICAgICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0LmNvcmsoKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZGVzdHJveShpc0gyID8gaDJzdHJlYW0gOiBzb2NrZXQsIGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgICB0cnkge1xuICAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gaDJzdHJlYW0ud3JpdGUoY2h1bmspXG4gICAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoMnN0cmVhbS5kZXN0cm95KGVycilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgIGgyc3RyZWFtLmVuZCgpXG4gICAgICBoMnN0cmVhbVxuICAgICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZW5kKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldFxuICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICB9XG59XG5cbmNsYXNzIEFzeW5jV3JpdGVyIHtcbiAgY29uc3RydWN0b3IgKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSkge1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMFxuICAgIHRoaXMuZXhwZWN0c1BheWxvYWQgPSBleHBlY3RzUGF5bG9hZFxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gdHJ1ZVxuICB9XG5cbiAgd3JpdGUgKGNodW5rKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rKVxuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFdlIHNob3VsZCBkZWZlciB3cml0aW5nIGNodW5rcy5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gKyBsZW4gPiBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgfVxuXG4gICAgc29ja2V0LmNvcmsoKVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn10cmFuc2Zlci1lbmNvZGluZzogY2h1bmtlZFxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYFxcclxcbiR7bGVuLnRvU3RyaW5nKDE2KX1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBsZW5cblxuICAgIGNvbnN0IHJldCA9IHNvY2tldC53cml0ZShjaHVuaylcblxuICAgIHNvY2tldC51bmNvcmsoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZW5kICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIsIHJlcXVlc3QgfSA9IHRoaXNcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmIChleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGluIGEgcmVxdWVzdCBtZXNzYWdlIHdoZW5cbiAgICAgICAgLy8gbm8gVHJhbnNmZXItRW5jb2RpbmcgaXMgc2VudCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGRlZmluZXMgYSBtZWFuaW5nXG4gICAgICAgIC8vIGZvciBhbiBlbmNsb3NlZCBwYXlsb2FkIGJvZHkuXG5cbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZSgnXFxyXFxuMFxcclxcblxcclxcbicsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiAhPT0gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8vIEV4dHJhY3RlZCBmcm9tIG5vZGUvbGliL2ludGVybmFsL2ZpeGVkX3F1ZXVlLmpzXG5cbi8vIEN1cnJlbnRseSBvcHRpbWFsIHF1ZXVlIHNpemUsIHRlc3RlZCBvbiBWOCA2LjAgLSA2LjYuIE11c3QgYmUgcG93ZXIgb2YgdHdvLlxuY29uc3Qga1NpemUgPSAyMDQ4O1xuY29uc3Qga01hc2sgPSBrU2l6ZSAtIDE7XG5cbi8vIFRoZSBGaXhlZFF1ZXVlIGlzIGltcGxlbWVudGVkIGFzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGZpeGVkLXNpemVcbi8vIGNpcmN1bGFyIGJ1ZmZlcnMuIEl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4vL1xuLy8gIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFxuLy8gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4vLyAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgPC0tLS0tXFwgICAgICAgKy0tLS0tLS0tLS0tKyA8LS0tLS0tXFwgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICBcXC0tLS0tIHwgICBuZXh0ICAgIHwgICAgICAgICBcXC0tLS0tLS0gfCAgIG5leHQgICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBPciwgaWYgdGhlcmUgaXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyLCBpdCBsb29rcyBzb21ldGhpbmdcbi8vIGxpa2UgZWl0aGVyIG9mIHRoZXNlOlxuLy9cbi8vICBoZWFkICAgdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgICB0YWlsXG4vLyAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHxcbi8vICAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtudWxsXSAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICAgICAgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gQWRkaW5nIGEgdmFsdWUgbWVhbnMgbW92aW5nIGB0b3BgIGZvcndhcmQgYnkgb25lLCByZW1vdmluZyBtZWFuc1xuLy8gbW92aW5nIGBib3R0b21gIGZvcndhcmQgYnkgb25lLiBBZnRlciByZWFjaGluZyB0aGUgZW5kLCB0aGUgcXVldWVcbi8vIHdyYXBzIGFyb3VuZC5cbi8vXG4vLyBXaGVuIGB0b3AgPT09IGJvdHRvbWAgdGhlIGN1cnJlbnQgcXVldWUgaXMgZW1wdHkgYW5kIHdoZW5cbi8vIGB0b3AgKyAxID09PSBib3R0b21gIGl0J3MgZnVsbC4gVGhpcyB3YXN0ZXMgYSBzaW5nbGUgc3BhY2Ugb2Ygc3RvcmFnZVxuLy8gYnV0IGFsbG93cyBtdWNoIHF1aWNrZXIgY2hlY2tzLlxuXG5jbGFzcyBGaXhlZENpcmN1bGFyQnVmZmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ib3R0b20gPSAwO1xuICAgIHRoaXMudG9wID0gMDtcbiAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXkoa1NpemUpO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnRvcCA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBpc0Z1bGwoKSB7XG4gICAgcmV0dXJuICgodGhpcy50b3AgKyAxKSAmIGtNYXNrKSA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICB0aGlzLmxpc3RbdGhpcy50b3BdID0gZGF0YTtcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYga01hc2s7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMubGlzdFt0aGlzLmJvdHRvbV07XG4gICAgaWYgKG5leHRJdGVtID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmxpc3RbdGhpcy5ib3R0b21dID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYm90dG9tID0gKHRoaXMuYm90dG9tICsgMSkgJiBrTWFzaztcbiAgICByZXR1cm4gbmV4dEl0ZW07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaXhlZFF1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5pc0VtcHR5KCk7XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICBpZiAodGhpcy5oZWFkLmlzRnVsbCgpKSB7XG4gICAgICAvLyBIZWFkIGlzIGZ1bGw6IENyZWF0ZXMgYSBuZXcgcXVldWUsIHNldHMgdGhlIG9sZCBxdWV1ZSdzIGAubmV4dGAgdG8gaXQsXG4gICAgICAvLyBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IG1haW4gcXVldWUuXG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaGVhZC5wdXNoKGRhdGEpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBjb25zdCBuZXh0ID0gdGFpbC5zaGlmdCgpO1xuICAgIGlmICh0YWlsLmlzRW1wdHkoKSAmJiB0YWlsLm5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgcXVldWUsIGl0IGZvcm1zIHRoZSBuZXcgdGFpbC5cbiAgICAgIHRoaXMudGFpbCA9IHRhaWwubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbn07XG4iLAogICAgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGtQb29sID0gU3ltYm9sKCdwb29sJylcblxuY2xhc3MgUG9vbFN0YXRzIHtcbiAgY29uc3RydWN0b3IgKHBvb2wpIHtcbiAgICB0aGlzW2tQb29sXSA9IHBvb2xcbiAgfVxuXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrQ29ubmVjdGVkXVxuICB9XG5cbiAgZ2V0IGZyZWUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrRnJlZV1cbiAgfVxuXG4gIGdldCBwZW5kaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1BlbmRpbmddXG4gIH1cblxuICBnZXQgcXVldWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1F1ZXVlZF1cbiAgfVxuXG4gIGdldCBydW5uaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1J1bm5pbmddXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tTaXplXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFN0YXRzXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL25vZGUvZml4ZWQtcXVldWUnKVxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSwga1J1bm5pbmcsIGtQZW5kaW5nLCBrUXVldWVkLCBrQnVzeSwga0ZyZWUsIGtVcmwsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpc1trUXVldWVdLnNoaWZ0KClcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaXRlbS5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgICAgdGhpc1trT25EcmFpbl0oY2xpZW50W2tVcmxdLCBbdGhpcywgY2xpZW50XSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgW2tSZW1vdmVDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnQuY2xvc2UoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZihjbGllbnQpXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gdGhpc1trQ2xpZW50c10uc29tZShkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0Nvbm5lY3Rpb25zID0gU3ltYm9sKCdjb25uZWN0aW9ucycpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgY29ubmVjdGlvbnMsXG4gICAgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LFxuICAgIGNvbm5lY3QsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgdGxzLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIHNvY2tldFBhdGgsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgYWxsb3dIMixcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChjb25uZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3Rpb25zKSB8fCBjb25uZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbnMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0Nvbm5lY3Rpb25zXSA9IGNvbm5lY3Rpb25zIHx8IG51bGxcbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbihvcmlnaW4pXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0LCBhbGxvd0gyIH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSlcblxuICAgIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgcGFyc2VPcmlnaW4gfSA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0dyZWF0ZXN0Q29tbW9uRGl2aXNvciA9IFN5bWJvbCgna0dyZWF0ZXN0Q29tbW9uRGl2aXNvcicpXG5jb25zdCBrQ3VycmVudFdlaWdodCA9IFN5bWJvbCgna0N1cnJlbnRXZWlnaHQnKVxuY29uc3Qga0luZGV4ID0gU3ltYm9sKCdrSW5kZXgnKVxuY29uc3Qga1dlaWdodCA9IFN5bWJvbCgna1dlaWdodCcpXG5jb25zdCBrTWF4V2VpZ2h0UGVyU2VydmVyID0gU3ltYm9sKCdrTWF4V2VpZ2h0UGVyU2VydmVyJylcbmNvbnN0IGtFcnJvclBlbmFsdHkgPSBTeW1ib2woJ2tFcnJvclBlbmFsdHknKVxuXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGIgPT09IDApIHJldHVybiBhXG4gIHJldHVybiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IoYiwgYSAlIGIpXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAodXBzdHJlYW1zID0gW10sIHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCAuLi5vcHRzIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba09wdGlvbnNdID0gb3B0c1xuICAgIHRoaXNba0luZGV4XSA9IC0xXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSAwXG5cbiAgICB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdID0gdGhpc1trT3B0aW9uc10ubWF4V2VpZ2h0UGVyU2VydmVyIHx8IDEwMFxuICAgIHRoaXNba0Vycm9yUGVuYWx0eV0gPSB0aGlzW2tPcHRpb25zXS5lcnJvclBlbmFsdHkgfHwgMTVcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cHN0cmVhbXMpKSB7XG4gICAgICB1cHN0cmVhbXMgPSBbdXBzdHJlYW1zXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl0gPSB0aGlzW2tDbGllbnRzXS5tYXAocCA9PiBwW2tXZWlnaHRdKS5yZWR1Y2UoZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yLCAwKVxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlOiBvbmx5IGZvciBOb2RlIDEyICovXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgV2Vha1JlZjogZ2xvYmFsLldlYWtSZWYgfHwgQ29tcGF0V2Vha1JlZixcbiAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5IHx8IENvbXBhdEZpbmFsaXplclxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga0ZpbmFsaXplciA9IFN5bWJvbCgnZmluYWxpemVyJylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gICAgdGhpc1trQ2xpZW50c10gPSBuZXcgTWFwKClcbiAgICB0aGlzW2tGaW5hbGl6ZXJdID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi8ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5kZWxldGUoa2V5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhZ2VudCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHJldCArPSBjbGllbnRba1J1bm5pbmddXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGtleVxuICAgIGlmIChvcHRzLm9yaWdpbiAmJiAodHlwZW9mIG9wdHMub3JpZ2luID09PSAnc3RyaW5nJyB8fCBvcHRzLm9yaWdpbiBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhvcHRzLm9yaWdpbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLm9yaWdpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBVUkwuJylcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuXG4gICAgbGV0IGRpc3BhdGNoZXIgPSByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcHRzLm9yaWdpbiwgdGhpc1trT3B0aW9uc10pXG4gICAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICAgIHRoaXNba0NsaWVudHNdLnNldChrZXksIG5ldyBXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICAgICAgdGhpc1trRmluYWxpemVyXS5yZWdpc3RlcihkaXNwYXRjaGVyLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGNsaWVudC5jbG9zZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGRlc3Ryb3lQcm9taXNlcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50XG4iLAogICAgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvOTA3XG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxubGV0IEJsb2JcblxuY29uc3Qga0NvbnN1bWUgPSBTeW1ib2woJ2tDb25zdW1lJylcbmNvbnN0IGtSZWFkaW5nID0gU3ltYm9sKCdrUmVhZGluZycpXG5jb25zdCBrQm9keSA9IFN5bWJvbCgna0JvZHknKVxuY29uc3Qga0Fib3J0ID0gU3ltYm9sKCdhYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJvZHlSZWFkYWJsZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICByZXN1bWUsXG4gICAgYWJvcnQsXG4gICAgY29udGVudFR5cGUgPSAnJyxcbiAgICBoaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0IC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6IHJlc3VtZSxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IGZhbHNlXG5cbiAgICB0aGlzW2tBYm9ydF0gPSBhYm9ydFxuICAgIHRoaXNba0NvbnN1bWVdID0gbnVsbFxuICAgIHRoaXNba0JvZHldID0gbnVsbFxuICAgIHRoaXNba0NvbnRlbnRUeXBlXSA9IGNvbnRlbnRUeXBlXG5cbiAgICAvLyBJcyBzdHJlYW0gYmVpbmcgY29uc3VtZWQgdGhyb3VnaCBSZWFkYWJsZSBBUEk/XG4gICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdCB3ZSBhdm9pZCBjaGVja2luZ1xuICAgIC8vIGZvciAnZGF0YScgYW5kICdyZWFkYWJsZScgbGlzdGVuZXJzIGluIHRoZSBob3QgcGF0aFxuICAgIC8vIGluc2lkZSBwdXNoKCkuXG4gICAgdGhpc1trUmVhZGluZ10gPSBmYWxzZVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXNba0Fib3J0XSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmRlc3Ryb3koZXJyKVxuICB9XG5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgLy8gTm9kZSA8IDE2LjdcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvbiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIGFkZExpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb2ZmIChldiwgLi4uYXJncykge1xuICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgLi4uYXJncylcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSAoXG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCB8fFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9mZihldiwgLi4uYXJncylcbiAgfVxuXG4gIHB1c2ggKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0NvbnN1bWVdICYmIGNodW5rICE9PSBudWxsICYmIHRoaXMucmVhZGFibGVMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gb3B0cyAmJiBOdW1iZXIuaXNGaW5pdGUob3B0cy5saW1pdCkgPyBvcHRzLmxpbWl0IDogMjYyMTQ0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cyAmJiBvcHRzLnNpZ25hbFxuXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICAgICAgfVxuICAgICAgICB1dGlsLnRocm93SWZBYm9ydGVkKHNpZ25hbClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzaWduYWxMaXN0ZW5lckNsZWFudXAgPSBzaWduYWxcbiAgICAgICAgPyB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgfSlcbiAgICAgICAgOiBub29wXG5cbiAgICAgIHRoaXNcbiAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaWduYWxMaXN0ZW5lckNsZWFudXAoKVxuICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uIHx8IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJyksIHsgbmFtZTogJ0Fib3J0RXJyb3InIH0pKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oJ2Vycm9yJywgbm9vcClcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgbGltaXQgLT0gY2h1bmsubGVuZ3RoXG4gICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVzdW1lKClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWxvY2tlZFxuZnVuY3Rpb24gaXNMb2NrZWQgKHNlbGYpIHtcbiAgLy8gQ29uc3VtZSBpcyBhbiBpbXBsaWNpdCBsb2NrLlxuICByZXR1cm4gKHNlbGZba0JvZHldICYmIHNlbGZba0JvZHldLmxvY2tlZCA9PT0gdHJ1ZSkgfHwgc2VsZltrQ29uc3VtZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGlzVW51c2FibGUgKHNlbGYpIHtcbiAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQoc2VsZikgfHwgaXNMb2NrZWQoc2VsZilcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uc3VtZSAoc3RyZWFtLCB0eXBlKSB7XG4gIGlmIChpc1VudXNhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gIH1cblxuICBhc3NlcnQoIXN0cmVhbVtrQ29uc3VtZV0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW1ba0NvbnN1bWVdID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHN0cmVhbSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3QsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgICBib2R5OiBbXVxuICAgIH1cblxuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY29uc3VtZVN0YXJ0LCBzdHJlYW1ba0NvbnN1bWVdKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBzdGF0ZS5idWZmZXIpIHtcbiAgICBjb25zdW1lUHVzaChjb25zdW1lLCBjaHVuaylcbiAgfVxuXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3VtZS5zdHJlYW0ucmVzdW1lKClcblxuICB3aGlsZSAoY29uc3VtZS5zdHJlYW0ucmVhZCgpICE9IG51bGwpIHtcbiAgICAvLyBMb29wXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZUVuZCAoY29uc3VtZSkge1xuICBjb25zdCB7IHR5cGUsIGJvZHksIHJlc29sdmUsIHN0cmVhbSwgbGVuZ3RoIH0gPSBjb25zdW1lXG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXNvbHZlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICByZXNvbHZlKEpTT04ucGFyc2UoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlCdWZmZXInKSB7XG4gICAgICBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG5cbiAgICAgIGxldCBwb3MgPSAwXG4gICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBib2R5KSB7XG4gICAgICAgIGRzdC5zZXQoYnVmLCBwb3MpXG4gICAgICAgIHBvcyArPSBidWYuYnl0ZUxlbmd0aFxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGRzdC5idWZmZXIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmxvYicpIHtcbiAgICAgIGlmICghQmxvYikge1xuICAgICAgICBCbG9iID0gcmVxdWlyZSgnYnVmZmVyJykuQmxvYlxuICAgICAgfVxuICAgICAgcmVzb2x2ZShuZXcgQmxvYihib2R5LCB7IHR5cGU6IHN0cmVhbVtrQ29udGVudFR5cGVdIH0pKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3Qge1xuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayAoeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfSkge1xuICBhc3NlcnQoYm9keSlcblxuICBsZXQgY2h1bmtzID0gW11cbiAgbGV0IGxpbWl0ID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIGxpbWl0ICs9IGNodW5rLmxlbmd0aFxuICAgIGlmIChsaW1pdCA+IDEyOCAqIDEwMjQpIHtcbiAgICAgIGNodW5rcyA9IG51bGxcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWNodW5rcykge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm9jZXNzIGluIGEgZmFsbGJhY2sgaWYgZXJyb3JcbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfVxuIiwKICAgICJjb25zdCB7IGFkZEFib3J0TGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga0xpc3RlbmVyID0gU3ltYm9sKCdrTGlzdGVuZXInKVxuY29uc3Qga1NpZ25hbCA9IFN5bWJvbCgna1NpZ25hbCcpXG5cbmZ1bmN0aW9uIGFib3J0IChzZWxmKSB7XG4gIGlmIChzZWxmLmFib3J0KSB7XG4gICAgc2VsZi5hYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5vbkVycm9yKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWRhYmxlID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnRyYWlsZXJzID0ge31cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFya1xuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVzdW1lLCBhYm9ydCwgY29udGVudFR5cGUsIGhpZ2hXYXRlck1hcmsgfSlcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgdGhpcy5yZXMgPSBib2R5XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgdHJhaWxlcnM6IHRoaXMudHJhaWxlcnMsXG4gICAgICAgICAgb3BhcXVlLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMsIHRoaXMudHJhaWxlcnMpXG5cbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBib2R5LCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCBxdWV1ZU1pY3JvdGFzaz9cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgLy8gRW5zdXJlIGFsbCBxdWV1ZWQgaGFuZGxlcnMgYXJlIGludm9rZWQgYmVmb3JlIGRlc3Ryb3lpbmcgcmVzLlxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFJlcXVlc3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlICYmIHJlcy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlLFxuICBEdXBsZXgsXG4gIFBhc3NUaHJvdWdoXG59ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtSZXN1bWUgPSBTeW1ib2woJ3Jlc3VtZScpXG5cbmNsYXNzIFBpcGVsaW5lUmVxdWVzdCBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcblxuICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgY29uc3QgeyBba1Jlc3VtZV06IHJlc3VtZSB9ID0gdGhpc1xuXG4gICAgaWYgKHJlc3VtZSkge1xuICAgICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgICAgIHJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9yZWFkKClcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZVJlc3BvbnNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAocmVzdW1lKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuICAgIHRoaXNba1Jlc3VtZV0gPSByZXN1bWVcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICB0aGlzW2tSZXN1bWVdKClcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGFuZGxlcicpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1BJUEVMSU5FJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcblxuICAgIHRoaXMucmVxID0gbmV3IFBpcGVsaW5lUmVxdWVzdCgpLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuXG4gICAgdGhpcy5yZXQgPSBuZXcgRHVwbGV4KHtcbiAgICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogb3B0cy5vYmplY3RNb2RlLFxuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChib2R5ICYmIGJvZHkucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KCFyZXMsICdwaXBlbGluZSBjYW5ub3QgYmUgcmV0cmllZCcpXG5cbiAgICBpZiAocmV0LmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY2xhc3MgVXBncmFkZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9VUEdSQURFJylcblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXR1c0NvZGUsIDEwMSlcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBncmFkZSAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBncmFkZS5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGdyYWRlSGFuZGxlciA9IG5ldyBVcGdyYWRlSGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgdXBncmFkZTogb3B0cy5wcm90b2NvbCB8fCAnV2Vic29ja2V0J1xuICAgIH0sIHVwZ3JhZGVIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IHJlcXVpcmUoJy4vYXBpLXJlcXVlc3QnKVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gcmVxdWlyZSgnLi9hcGktc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9hcGktcGlwZWxpbmUnKVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IHJlcXVpcmUoJy4vYXBpLXVwZ3JhZGUnKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IHJlcXVpcmUoJy4vYXBpLWNvbm5lY3QnKVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jbGFzcyBNb2NrTm90TWF0Y2hlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTW9ja05vdE1hdGNoZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTW9ja05vdE1hdGNoZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgcmVxdWVzdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBtb2NrIGRpc3BhdGNoZXMnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9NT0NLX0VSUl9NT0NLX05PVF9NQVRDSEVEJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNb2NrTm90TWF0Y2hlZEVycm9yXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTW9ja05vdE1hdGNoZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWVycm9ycycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga09yaWdpbixcbiAga0dldE5ldENvbm5lY3Rcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IGJ1aWxkVVJMLCBub3AgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7XG4gIHR5cGVzOiB7XG4gICAgaXNQcm9taXNlXG4gIH1cbn0gPSByZXF1aXJlKCd1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGhlYWRlcnNcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigobW9ja0Rpc3BhdGNoKSA9PiBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBrZXkuaGVhZGVycykpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7dHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzfSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChrZXlWYWx1ZVBhaXJzLCBba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAuLi5rZXlWYWx1ZVBhaXJzLFxuICAgIEJ1ZmZlci5mcm9tKGAke2tleX1gKSxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh4ID0+IEJ1ZmZlci5mcm9tKGAke3h9YCkpIDogQnVmZmVyLmZyb20oYCR7dmFsdWV9YClcbiAgXSwgW10pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL1N0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzVGV4dCAoc3RhdHVzQ29kZSkge1xuICByZXR1cm4gU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8ICd1bmtub3duJ1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZSAoYm9keSkge1xuICBjb25zdCBidWZmZXJzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBkYXRhIG9mIGJvZHkpIHtcbiAgICBidWZmZXJzLnB1c2goZGF0YSlcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKlxuICogTW9jayBkaXNwYXRjaCBmdW5jdGlvbiB1c2VkIHRvIHNpbXVsYXRlIHVuZGljaSBkaXNwYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG1vY2tEaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAvLyBHZXQgbW9jayBkaXNwYXRjaCBmcm9tIGJ1aWx0IGtleVxuICBjb25zdCBrZXkgPSBidWlsZEtleShvcHRzKVxuICBjb25zdCBtb2NrRGlzcGF0Y2ggPSBnZXRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcblxuICBtb2NrRGlzcGF0Y2gudGltZXNJbnZva2VkKytcblxuICAvLyBIZXJlJ3Mgd2hlcmUgd2UgcmVzb2x2ZSBhIGNhbGxiYWNrIGlmIGEgY2FsbGJhY2sgaXMgcHJlc2VudCBmb3IgdGhlIGRpc3BhdGNoIGRhdGEuXG4gIGlmIChtb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjaykge1xuICAgIG1vY2tEaXNwYXRjaC5kYXRhID0geyAuLi5tb2NrRGlzcGF0Y2guZGF0YSwgLi4ubW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2sob3B0cykgfVxuICB9XG5cbiAgLy8gUGFyc2UgbW9ja0Rpc3BhdGNoIGRhdGFcbiAgY29uc3QgeyBkYXRhOiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzLCBlcnJvciB9LCBkZWxheSwgcGVyc2lzdCB9ID0gbW9ja0Rpc3BhdGNoXG4gIGNvbnN0IHsgdGltZXNJbnZva2VkLCB0aW1lcyB9ID0gbW9ja0Rpc3BhdGNoXG5cbiAgLy8gSWYgaXQncyB1c2VkIHVwIGFuZCBub3QgcGVyc2lzdGVudCwgbWFyayBhcyBjb25zdW1lZFxuICBtb2NrRGlzcGF0Y2guY29uc3VtZWQgPSAhcGVyc2lzdCAmJiB0aW1lc0ludm9rZWQgPj0gdGltZXNcbiAgbW9ja0Rpc3BhdGNoLnBlbmRpbmcgPSB0aW1lc0ludm9rZWQgPCB0aW1lc1xuXG4gIC8vIElmIHNwZWNpZmllZCwgdHJpZ2dlciBkaXNwYXRjaCBlcnJvclxuICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcbiAgICBoYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCB3aXRoIGEgZGVsYXkgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gICAgfSwgZGVsYXkpXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSZXBseSAobW9ja0Rpc3BhdGNoZXMsIF9kYXRhID0gZGF0YSkge1xuICAgIC8vIGZldGNoJ3MgSGVhZGVyc0xpc3QgaXMgYSAxRCBzdHJpbmcgYXJyYXlcbiAgICBjb25zdCBvcHRzSGVhZGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgPyBidWlsZEhlYWRlcnNGcm9tQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgOiBvcHRzLmhlYWRlcnNcbiAgICBjb25zdCBib2R5ID0gdHlwZW9mIF9kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IF9kYXRhKHsgLi4ub3B0cywgaGVhZGVyczogb3B0c0hlYWRlcnMgfSlcbiAgICAgIDogX2RhdGFcblxuICAgIC8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIGxpa2VseSBuZWVkZWQgZm9yIGplc3QuXG4gICAgaWYgKGlzUHJvbWlzZShib2R5KSkge1xuICAgICAgLy8gSWYgaGFuZGxlUmVwbHkgaXMgYXN5bmNocm9ub3VzLCB0aHJvd2luZyBhbiBlcnJvclxuICAgICAgLy8gaW4gdGhlIGNhbGxiYWNrIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLCByYXRoZXIgdGhhblxuICAgICAgLy8gc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZXJyb3IsIHdoaWNoIGJyZWFrcyBzb21lIHRlc3RzLlxuICAgICAgLy8gUmF0aGVyLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpZiBpdCBpcyBhXG4gICAgICAvLyBwcm9taXNlLCBhbmQgdGhlbiByZS1ydW4gaGFuZGxlUmVwbHkgd2l0aCB0aGUgbmV3IGJvZHkuXG4gICAgICBib2R5LnRoZW4oKG5ld0RhdGEpID0+IGhhbmRsZVJlcGx5KG1vY2tEaXNwYXRjaGVzLCBuZXdEYXRhKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShib2R5KVxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKGhlYWRlcnMpXG4gICAgY29uc3QgcmVzcG9uc2VUcmFpbGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKHRyYWlsZXJzKVxuXG4gICAgaGFuZGxlci5hYm9ydCA9IG5vcFxuICAgIGhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhKEJ1ZmZlci5mcm9tKHJlc3BvbnNlRGF0YSkpXG4gICAgaGFuZGxlci5vbkNvbXBsZXRlKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZ2V0UmVzcG9uc2VEYXRhLCBidWlsZEtleSwgYWRkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga0Rpc3BhdGNoS2V5LFxuICBrRGVmYXVsdEhlYWRlcnMsXG4gIGtEZWZhdWx0VHJhaWxlcnMsXG4gIGtDb250ZW50TGVuZ3RoLFxuICBrTW9ja0Rpc3BhdGNoXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBidWlsZFVSTCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzY29wZSBBUEkgZm9yIGFuIGludGVyY2VwdG9yIHJlcGx5XG4gKi9cbmNsYXNzIE1vY2tTY29wZSB7XG4gIGNvbnN0cnVjdG9yIChtb2NrRGlzcGF0Y2gpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdID0gbW9ja0Rpc3BhdGNoXG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgYSByZXBseSBieSBhIHNldCBhbW91bnQgaW4gbXMuXG4gICAqL1xuICBkZWxheSAod2FpdEluTXMpIHtcbiAgICBpZiAodHlwZW9mIHdhaXRJbk1zICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih3YWl0SW5NcykgfHwgd2FpdEluTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd3YWl0SW5NcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0uZGVsYXkgPSB3YWl0SW5Nc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZGVmaW5lZCByZXBseSwgbmV2ZXIgbWFyayBhcyBjb25zdW1lZC5cbiAgICovXG4gIHBlcnNpc3QgKCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0ucGVyc2lzdCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG9uZSB0byBkZWZpbmUgYSByZXBseSBmb3IgYSBzZXQgYW1vdW50IG9mIG1hdGNoaW5nIHJlcXVlc3RzLlxuICAgKi9cbiAgdGltZXMgKHJlcGVhdFRpbWVzKSB7XG4gICAgaWYgKHR5cGVvZiByZXBlYXRUaW1lcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIocmVwZWF0VGltZXMpIHx8IHJlcGVhdFRpbWVzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwZWF0VGltZXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnRpbWVzID0gcmVwZWF0VGltZXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmNlcHRvciBmb3IgYSBNb2NrXG4gKi9cbmNsYXNzIE1vY2tJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBtb2NrRGlzcGF0Y2hlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLnBhdGggbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMjQ1XG4gICAgLy8gQXMgcGVyIFJGQyAzOTg2LCBjbGllbnRzIGFyZSBub3Qgc3VwcG9zZWQgdG8gc2VuZCBVUklcbiAgICAvLyBmcmFnbWVudHMgdG8gc2VydmVycyB3aGVuIHRoZXkgcmV0cmlldmUgYSBkb2N1bWVudCxcbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChvcHRzLnF1ZXJ5KSB7XG4gICAgICAgIG9wdHMucGF0aCA9IGJ1aWxkVVJMKG9wdHMucGF0aCwgb3B0cy5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hdGNoZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9tYWluL2xpYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoZGF0YSlcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpc1trQ29udGVudExlbmd0aF0gPyB7ICdjb250ZW50LWxlbmd0aCc6IHJlc3BvbnNlRGF0YS5sZW5ndGggfSA6IHt9XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpc1trRGVmYXVsdEhlYWRlcnNdLCAuLi5jb250ZW50TGVuZ3RoLCAuLi5yZXNwb25zZU9wdGlvbnMuaGVhZGVycyB9XG4gICAgY29uc3QgdHJhaWxlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRUcmFpbGVyc10sIC4uLnJlc3BvbnNlT3B0aW9ucy50cmFpbGVycyB9XG5cbiAgICByZXR1cm4geyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycyB9XG4gIH1cblxuICB2YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZGF0YSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVzcG9uc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCByZXBseS5cbiAgICovXG4gIHJlcGx5IChyZXBseURhdGEpIHtcbiAgICAvLyBWYWx1ZXMgb2YgcmVwbHkgYXJlbid0IGF2YWlsYWJsZSByaWdodCBub3cgYXMgdGhleVxuICAgIC8vIGNhbiBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSByZXBseSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICAgIGlmICh0eXBlb2YgcmVwbHlEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlEYXRhKG9wdHMpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgaW4gdGhlIHJpZ2h0IGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVkRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fSB9ID0gcmVzb2x2ZWREYXRhXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCBbc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fV0gPSBbLi4uYXJndW1lbnRzXVxuICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuXG4gICAgLy8gU2VuZCBpbi1hbHJlYWR5IHByb3ZpZGVkIGRhdGEgbGlrZSB1c3VhbFxuICAgIGNvbnN0IGRpc3BhdGNoRGF0YSA9IHRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgZGlzcGF0Y2hEYXRhKVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIGVycm9yLlxuICAgKi9cbiAgcmVwbHlXaXRoRXJyb3IgKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZXJyb3IgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgeyBlcnJvciB9KVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSBoZWFkZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlIZWFkZXJzIChoZWFkZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0gaGVhZGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgdHJhaWxlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseVRyYWlsZXJzICh0cmFpbGVycykge1xuICAgIGlmICh0eXBlb2YgdHJhaWxlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3RyYWlsZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHRyYWlsZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVwbHkgY29udGVudCBsZW5ndGggaGVhZGVyIGZvciByZXBsaWVzIG9uIHRoZSBpbnRlcmNlcHRvclxuICAgKi9cbiAgcmVwbHlDb250ZW50TGVuZ3RoICgpIHtcbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLk1vY2tJbnRlcmNlcHRvciA9IE1vY2tJbnRlcmNlcHRvclxubW9kdWxlLmV4cG9ydHMuTW9ja1Njb3BlID0gTW9ja1Njb3BlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9jbGllbnQnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrQ2xpZW50IHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIENsaWVudCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0NsaWVudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL3Bvb2wnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrUG9vbCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBQb29sIHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tQb29sIGV4dGVuZHMgUG9vbCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzaW5ndWxhcnMgPSB7XG4gIHByb25vdW46ICdpdCcsXG4gIGlzOiAnaXMnLFxuICB3YXM6ICd3YXMnLFxuICB0aGlzOiAndGhpcydcbn1cblxuY29uc3QgcGx1cmFscyA9IHtcbiAgcHJvbm91bjogJ3RoZXknLFxuICBpczogJ2FyZScsXG4gIHdhczogJ3dlcmUnLFxuICB0aGlzOiAndGhlc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGx1cmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChzaW5ndWxhciwgcGx1cmFsKSB7XG4gICAgdGhpcy5zaW5ndWxhciA9IHNpbmd1bGFyXG4gICAgdGhpcy5wbHVyYWwgPSBwbHVyYWxcbiAgfVxuXG4gIHBsdXJhbGl6ZSAoY291bnQpIHtcbiAgICBjb25zdCBvbmUgPSBjb3VudCA9PT0gMVxuICAgIGNvbnN0IGtleXMgPSBvbmUgPyBzaW5ndWxhcnMgOiBwbHVyYWxzXG4gICAgY29uc3Qgbm91biA9IG9uZSA/IHRoaXMuc2luZ3VsYXIgOiB0aGlzLnBsdXJhbFxuICAgIHJldHVybiB7IC4uLmtleXMsIGNvdW50LCBub3VuIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IENvbnNvbGUgfSA9IHJlcXVpcmUoJ2NvbnNvbGUnKVxuXG4vKipcbiAqIEdldHMgdGhlIG91dHB1dCBvZiBgY29uc29sZS50YWJsZSjigKYpYCBhcyBhIHN0cmluZy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IgKHsgZGlzYWJsZUNvbG9ycyB9ID0ge30pIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuICAgICAgdHJhbnNmb3JtIChjaHVuaywgX2VuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IENvbnNvbGUoe1xuICAgICAgc3Rkb3V0OiB0aGlzLnRyYW5zZm9ybSxcbiAgICAgIGluc3BlY3RPcHRpb25zOiB7XG4gICAgICAgIGNvbG9yczogIWRpc2FibGVDb2xvcnMgJiYgIXByb2Nlc3MuZW52LkNJXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvcm1hdCAocGVuZGluZ0ludGVyY2VwdG9ycykge1xuICAgIGNvbnN0IHdpdGhQcmV0dHlIZWFkZXJzID0gcGVuZGluZ0ludGVyY2VwdG9ycy5tYXAoXG4gICAgICAoeyBtZXRob2QsIHBhdGgsIGRhdGE6IHsgc3RhdHVzQ29kZSB9LCBwZXJzaXN0LCB0aW1lcywgdGltZXNJbnZva2VkLCBvcmlnaW4gfSkgPT4gKHtcbiAgICAgICAgTWV0aG9kOiBtZXRob2QsXG4gICAgICAgIE9yaWdpbjogb3JpZ2luLFxuICAgICAgICBQYXRoOiBwYXRoLFxuICAgICAgICAnU3RhdHVzIGNvZGUnOiBzdGF0dXNDb2RlLFxuICAgICAgICBQZXJzaXN0ZW50OiBwZXJzaXN0ID8gJ+KchScgOiAn4p2MJyxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vYWdlbnQnKVxuY29uc3Qge1xuICBrQWdlbnQsXG4gIGtNb2NrQWdlbnRTZXQsXG4gIGtNb2NrQWdlbnRHZXQsXG4gIGtEaXNwYXRjaGVzLFxuICBrSXNNb2NrQWN0aXZlLFxuICBrTmV0Q29ubmVjdCxcbiAga0dldE5ldENvbm5lY3QsXG4gIGtPcHRpb25zLFxuICBrRmFjdG9yeVxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9tb2NrLXBvb2wnKVxuY29uc3QgeyBtYXRjaFZhbHVlLCBidWlsZE1vY2tPcHRpb25zIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgRmFrZVdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzICYmIG9wdHMuYWdlbnQgJiYgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cbiAgICBjb25zdCBhZ2VudCA9IG9wdHMgJiYgb3B0cy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgbmV3IEZha2VXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICB9XG5cbiAgW2tGYWN0b3J5XSAob3JpZ2luKSB7XG4gICAgY29uc3QgbW9ja09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgYWdlbnQ6IHRoaXMgfSwgdGhpc1trT3B0aW9uc10pXG4gICAgcmV0dXJuIHRoaXNba09wdGlvbnNdICYmIHRoaXNba09wdGlvbnNdLmNvbm5lY3Rpb25zID09PSAxXG4gICAgICA/IG5ldyBNb2NrQ2xpZW50KG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gICAgICA6IG5ldyBNb2NrUG9vbChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICB9XG5cbiAgW2tNb2NrQWdlbnRHZXRdIChvcmlnaW4pIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgZmluZCBpdFxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChvcmlnaW4pXG4gICAgaWYgKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi5kZXJlZigpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXRSZWZdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBjb25zdCBub25FeHBsaWNpdERpc3BhdGNoZXIgPSBub25FeHBsaWNpdFJlZi5kZXJlZigpXG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlLmRlcmVmKClba0Rpc3BhdGNoZXNdLm1hcChkaXNwYXRjaCA9PiAoeyAuLi5kaXNwYXRjaCwgb3JpZ2luIH0pKSlcbiAgICAgIC5maWx0ZXIoKHsgcGVuZGluZyB9KSA9PiBwZW5kaW5nKVxuICB9XG5cbiAgYXNzZXJ0Tm9QZW5kaW5nSW50ZXJjZXB0b3JzICh7IHBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSBuZXcgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlcigpIH0gPSB7fSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdJbnRlcmNlcHRvcnMoKVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWxpemVyID0gbmV3IFBsdXJhbGl6ZXIoJ2ludGVyY2VwdG9yJywgJ2ludGVyY2VwdG9ycycpLnBsdXJhbGl6ZShwZW5kaW5nLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBVbmRpY2lFcnJvcihgXG4ke3BsdXJhbGl6ZXIuY291bnR9ICR7cGx1cmFsaXplci5ub3VufSAke3BsdXJhbGl6ZXIuaXN9IHBlbmRpbmc6XG5cbiR7cGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlci5mb3JtYXQocGVuZGluZyl9XG5gLnRyaW0oKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tBZ2VudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUHJveHksIGtDbG9zZSwga0Rlc3Ryb3ksIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrQWdlbnQgPSBTeW1ib2woJ3Byb3h5IGFnZW50JylcbmNvbnN0IGtDbGllbnQgPSBTeW1ib2woJ3Byb3h5IGNsaWVudCcpXG5jb25zdCBrUHJveHlIZWFkZXJzID0gU3ltYm9sKCdwcm94eSBoZWFkZXJzJylcbmNvbnN0IGtSZXF1ZXN0VGxzID0gU3ltYm9sKCdyZXF1ZXN0IHRscyBzZXR0aW5ncycpXG5jb25zdCBrUHJveHlUbHMgPSBTeW1ib2woJ3Byb3h5IHRscyBzZXR0aW5ncycpXG5jb25zdCBrQ29ubmVjdEVuZHBvaW50ID0gU3ltYm9sKCdjb25uZWN0IGVuZHBvaW50IGZ1bmN0aW9uJylcblxuZnVuY3Rpb24gZGVmYXVsdFByb3RvY29sUG9ydCAocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJveHlPcHRpb25zIChvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICB9XG5cbiAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJpOiBvcHRzLnVyaSxcbiAgICBwcm90b2NvbDogb3B0cy5wcm90b2NvbCB8fCAnaHR0cHMnXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpc1trUHJveHldID0gYnVpbGRQcm94eU9wdGlvbnMob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnRcbiAgICAgIDogW11cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG5cbiAgICBpZiAodHlwZW9mIGNsaWVudEZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy5jbGllbnRGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cblxuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gbmV3IFVSTChvcHRzLnVyaSlcbiAgICBjb25zdCB7IG9yaWdpbiwgcG9ydCwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXNvbHZlZFVybFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkocmVzb2x2ZWRVcmwsIHsgY29ubmVjdCB9KVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgY29ubmVjdDogYXN5bmMgKG9wdHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRIb3N0ID0gb3B0cy5ob3N0XG4gICAgICAgIGlmICghb3B0cy5wb3J0KSB7XG4gICAgICAgICAgcmVxdWVzdGVkSG9zdCArPSBgOiR7ZGVmYXVsdFByb3RvY29sUG9ydChvcHRzLnByb3RvY29sKX1gXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHNvY2tldCwgc3RhdHVzQ29kZSB9ID0gYXdhaXQgdGhpc1trQ2xpZW50XS5jb25uZWN0KHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBwYXRoOiByZXF1ZXN0ZWRIb3N0LFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgLi4udGhpc1trUHJveHlIZWFkZXJzXSxcbiAgICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KS5kZXN0cm95KClcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKGBQcm94eSByZXNwb25zZSAoJHtzdGF0dXNDb2RlfSkgIT09IDIwMCB3aGVuIEhUVFAgVHVubmVsaW5nYCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc29ja2V0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBzZXJ2ZXJuYW1lXG4gICAgICAgICAgaWYgKHRoaXNba1JlcXVlc3RUbHNdKSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gdGhpc1trUmVxdWVzdFRsc10uc2VydmVybmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0oeyAuLi5vcHRzLCBzZXJ2ZXJuYW1lLCBodHRwU29ja2V0OiBzb2NrZXQgfSwgY2FsbGJhY2spXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBoZWFkZXJzID0gYnVpbGRIZWFkZXJzKG9wdHMuaGVhZGVycylcbiAgICB0aHJvd0lmUHJveHlBdXRoSXNTZW50KGhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgaG9zdFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uY2xvc2UoKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmRlc3Ryb3koKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uZGVzdHJveSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyAoaGVhZGVycykge1xuICAvLyBXaGVuIHVzaW5nIHVuZGljaS5mZXRjaCwgdGhlIGhlYWRlcnMgbGlzdCBpcyBzdG9yZWRcbiAgLy8gYXMgYW4gYXJyYXkuXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGhlYWRlcnNQYWlyID0ge31cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaGVhZGVyc1BhaXJbaGVhZGVyc1tpXV0gPSBoZWFkZXJzW2kgKyAxXVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzUGFpclxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqXG4gKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBQcm94eUFnZW50IHN1Z2dlc3RzIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGluIHJlcXVlc3QgaGVhZGVyc1xuICogTmV2ZXJ0aGVsZXNzLCBpdCB3YXMgY2hhbmdlZCBhbmQgdG8gYXZvaWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGJ5IGVuZCB1c2Vyc1xuICogdGhpcyBjaGVjayB3YXMgY3JlYXRlZC5cbiAqIEl0IHNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZlByb3h5QXV0aElzU2VudCAoaGVhZGVycykge1xuICBjb25zdCBleGlzdFByb3h5QXV0aCA9IGhlYWRlcnMgJiYgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nKVxuICBpZiAoZXhpc3RQcm94eUF1dGgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIGJlIHNlbnQgaW4gUHJveHlBZ2VudCBjb25zdHJ1Y3RvcicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm94eUFnZW50XG4iLAogICAgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgaXNEaXN0dXJiZWQsIHBhcnNlSGVhZGVycywgcGFyc2VSYW5nZUhlYWRlciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICBjb25zdCBkaWZmID0gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxuXG4gIHJldHVybiBkaWZmXG59XG5cbmNsYXNzIFJldHJ5SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVycykge1xuICAgIGNvbnN0IHsgcmV0cnlPcHRpb25zLCAuLi5kaXNwYXRjaE9wdHMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICAvLyBSZXRyeSBzY29wZWRcbiAgICAgIHJldHJ5OiByZXRyeUZuLFxuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIC8vIFJlc3BvbnNlIHNjb3BlZFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICByZXRyeUFmdGVyLFxuICAgICAgc3RhdHVzQ29kZXNcbiAgICB9ID0gcmV0cnlPcHRpb25zID8/IHt9XG5cbiAgICB0aGlzLmRpc3BhdGNoID0gaGFuZGxlcnMuZGlzcGF0Y2hcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVycy5oYW5kbGVyXG4gICAgdGhpcy5vcHRzID0gZGlzcGF0Y2hPcHRzXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIHRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRSdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBsZXQgeyBjb3VudGVyLCBjdXJyZW50VGltZW91dCB9ID0gc3RhdGVcblxuICAgIGN1cnJlbnRUaW1lb3V0ID1cbiAgICAgIGN1cnJlbnRUaW1lb3V0ICE9IG51bGwgJiYgY3VycmVudFRpbWVvdXQgPiAwID8gY3VycmVudFRpbWVvdXQgOiB0aW1lb3V0XG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoXG4gICAgICBjb2RlICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnICYmXG4gICAgICAhZXJyb3JDb2Rlcy5pbmNsdWRlcyhjb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2YgbWV0aG9kIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZHMpICYmICFtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIHN0YXR1cyBjb2RlIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGNvZGUgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKFxuICAgICAgc3RhdHVzQ29kZSAhPSBudWxsICYmXG4gICAgICBBcnJheS5pc0FycmF5KHN0YXR1c0NvZGVzKSAmJlxuICAgICAgIXN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXNcbiAgICBpZiAoY291bnRlciA+IG1heFJldHJpZXMpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAhPSBudWxsICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IGlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4oY3VycmVudFRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIGNvdW50ZXIsIG1heFRpbWVvdXQpXG5cbiAgICBzdGF0ZS5jdXJyZW50VGltZW91dCA9IHJldHJ5VGltZW91dFxuXG4gICAgc2V0VGltZW91dCgoKSA9PiBjYihudWxsKSwgcmV0cnlUaW1lb3V0KVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICB0aGlzLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICB0aGlzLmFib3J0KFxuICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwNikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBMZXQncyBzdGFydCB3aXRoIGEgd2VhayBldGFnIGNoZWNrXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnICE9PSBoZWFkZXJzLmV0YWcpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0VUYWcgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSByYW5nZVxuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCkgJiYgdGhpcy5zdGFydCAhPT0gc3RhcnQsXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShzdGFydCkpXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBlbmQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoZW5kKSAmJiB0aGlzLmVuZCAhPT0gZW5kLFxuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCsrLCBjdXJyZW50VGltZW91dDogdGhpcy5yZXRyeUFmdGVyIH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IHtcbiAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLmhlYWRlcnMsXG4gICAgICAgICAgICByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuaWYgKGdldEdsb2JhbERpc3BhdGNoZXIoKSA9PT0gdW5kZWZpbmVkKSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIobmV3IEFnZW50KCkpXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbERpc3BhdGNoZXIgKGFnZW50KSB7XG4gIGlmICghYWdlbnQgfHwgdHlwZW9mIGFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBhZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbERpc3BhdGNoZXIsIHtcbiAgICB2YWx1ZTogYWdlbnQsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEaXNwYXRjaGVyICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsRGlzcGF0Y2hlcl1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIsXG4gIGdldEdsb2JhbERpc3BhdGNoZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGVjb3JhdG9ySGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoLi4uYXJncylcbiAgfVxuXG4gIG9uRXJyb3IgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoLi4uYXJncylcbiAgfVxuXG4gIG9uVXBncmFkZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25VcGdyYWRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUoLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoLi4uYXJncylcbiAgfVxufVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0d1YXJkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlcuKAmXMgZmlyc3QgaXRlbSwgaGVhZGVy4oCZcyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSDihpIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH0gZWxzZSBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnPigJlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChuYW1lLCB2YWx1ZSlcblxuICAvLyA4LiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5jbGFzcyBIZWFkZXJzTGlzdCB7XG4gIC8qKiBAdHlwZSB7W3N0cmluZywgc3RyaW5nXVtdfG51bGx9ICovXG4gIGNvb2tpZXMgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGluaXQpIHtcbiAgICBpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdFtrSGVhZGVyc01hcF0pXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IGluaXRba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICB0aGlzLmNvb2tpZXMgPSBpbml0LmNvb2tpZXMgPT09IG51bGwgPyBudWxsIDogWy4uLmluaXQuY29va2llc11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXQpXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLWxpc3QtY29udGFpbnNcbiAgY29udGFpbnMgKG5hbWUpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmhhcyhuYW1lKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVy4oCZcyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA/Pz0gW11cbiAgICAgIHRoaXMuY29va2llcy5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gW3ZhbHVlXVxuICAgIH1cblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgdGhlIHZhbHVlIG9mXG4gICAgLy8gICAgdGhlIGZpcnN0IHN1Y2ggaGVhZGVyIHRvIHZhbHVlIGFuZCByZW1vdmUgdGhlXG4gICAgLy8gICAgb3RoZXJzLlxuICAgIC8vIDIuIE90aGVyd2lzZSwgYXBwZW5kIGhlYWRlciAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUudmFsdWVcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyB2YWx1ZSB9XSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5pdCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXNba0hlYWRlcnNMaXN0XSA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXPigJlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXNba0d1YXJkXSA9ICdub25lJ1xuXG4gICAgLy8gMi4gSWYgaW5pdCBpcyBnaXZlbiwgdGhlbiBmaWxsIHRoaXMgd2l0aCBpbml0LlxuICAgIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdChpbml0KVxuICAgICAgZmlsbCh0aGlzLCBpbml0KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5hcHBlbmQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZGVsZXRlJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIG5hbWVcbiAgICAvLyAgICBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIgbmFtZSwgYW5kXG4gICAgLy8gICAgbmFtZSBpcyBub3QgYSBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXNcbiAgICAvLyAgICBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5nZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uZ2V0KG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuaGFzJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRydWUgaWYgdGhpc+KAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgbmFtZTtcbiAgICAvLyAgICBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLnNldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXPigJlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNy4gU2V0IChuYW1lLCB2YWx1ZSkgaW4gdGhpc+KAmXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpc1xuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5zZXQobmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0c2V0Y29va2llXG4gIGdldFNldENvb2tpZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIC8vIDEuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFNldC1Db29raWVgLCB0aGVuIHJldHVybiDCqyDCuy5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlz4oCZcyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSkge1xuICAgICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IFsuLi50aGlzW2tIZWFkZXJzTGlzdF1dLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gLTEgOiAxKVxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gbnVsbClcblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVyc1xuXG4gICAgLy8gNC4gUmV0dXJuIGhlYWRlcnMuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5JylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleSt2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogSGVhZGVycykgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdIZWFkZXJzJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB2YWx1ZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVudHJpZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZvckVhY2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiB7IGVudW1lcmFibGU6IGZhbHNlIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdIZWFkZXJzJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoVltTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWKVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3Rcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSGVhZGVycywgSGVhZGVyc0xpc3QsIGZpbGwgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBjbG9uZUJvZHksIG1peGluQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7XG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXNFcnJvckxpa2UsXG4gIGlzb21vcnBoaWNFbmNvZGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSB8fCByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jbGFzc1xuY2xhc3MgUmVzcG9uc2Uge1xuICAvLyBDcmVhdGVzIG5ldHdvcmsgZXJyb3IgUmVzcG9uc2UuXG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgLy8gVE9ET1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyBUaGUgc3RhdGljIGVycm9yKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhXG4gICAgLy8gUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyBuZXR3b3JrIGVycm9yLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc+KAmXNcbiAgICAvLyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UuanNvbicgfSlcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDQuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlT2JqZWN0LCBpbml0LCBhbmQgKGJvZHksIFwiYXBwbGljYXRpb24vanNvblwiKS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UocmVzcG9uc2VPYmplY3QsIGluaXQsIHsgYm9keTogYm9keVswXSwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBDcmVhdGVzIGEgcmVkaXJlY3QgUmVzcG9uc2UgdGhhdCByZWRpcmVjdHMgdG8gdXJsIHdpdGggc3RhdHVzIHN0YXR1cy5cbiAgc3RhdGljIHJlZGlyZWN0ICh1cmwsIHN0YXR1cyA9IDMwMikge1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UucmVkaXJlY3QnIH0pXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHN0YXR1cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKHN0YXR1cylcblxuICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHVybCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAvLyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyBUT0RPOiBiYXNlLVVSTD9cbiAgICBsZXQgcGFyc2VkVVJMXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCBnZXRHbG9iYWxPcmlnaW4oKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyB1cmwpLCB7XG4gICAgICAgIGNhdXNlOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUgJyArIHN0YXR1cylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiBhIG5ldyByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFNldCByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyB0byBzdGF0dXMuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5zdGF0dXMgPSBzdGF0dXNcblxuICAgIC8vIDYuIExldCB2YWx1ZSBiZSBwYXJzZWRVUkwsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICBjb25zdCB2YWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoVVJMU2VyaWFsaXplcihwYXJzZWRVUkwpKVxuXG4gICAgLy8gNy4gQXBwZW5kIGBMb2NhdGlvbmAvdmFsdWUgdG8gcmVzcG9uc2VPYmplY3TigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnbG9jYXRpb24nLCB2YWx1ZSlcblxuICAgIC8vIDguIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2VcbiAgY29uc3RydWN0b3IgKGJvZHkgPSBudWxsLCBpbml0ID0ge30pIHtcbiAgICBpZiAoYm9keSAhPT0gbnVsbCkge1xuICAgICAgYm9keSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0KGJvZHkpXG4gICAgfVxuXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuXG4gICAgLy8gVE9ET1xuICAgIHRoaXNba1JlYWxtXSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIDEuIFNldCB0aGlz4oCZcyByZXNwb25zZSB0byBhIG5ldyByZXNwb25zZS5cbiAgICB0aGlzW2tTdGF0ZV0gPSBtYWtlUmVzcG9uc2Uoe30pXG5cbiAgICAvLyAyLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmRcbiAgICAvLyBpcyBcInJlc3BvbnNlXCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc+KAmXNcbiAgICAvLyByZXNwb25zZeKAmXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZeKAmXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCAodGhpcy5ib2R5ICYmIHRoaXMuYm9keS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc+KAmXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVzcG9uc2VcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgcmV0dXJuIGNsb25lZFJlc3BvbnNlT2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlc3BvbnNlKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcbiAgdHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9rOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdGVkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXNwb25zZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLCB7XG4gIGpzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gIC8vIFRvIGNsb25lIGEgcmVzcG9uc2UgcmVzcG9uc2UsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlLCB0aGVuIHJldHVybiBhIG5ldyBpZGVudGljYWxcbiAgLy8gZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWwgcmVzcG9uc2UgaXMgYSBjbG9uZSBvZiByZXNwb25zZeKAmXNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UuXG4gIGlmIChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZpbHRlclJlc3BvbnNlKFxuICAgICAgY2xvbmVSZXNwb25zZShyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSxcbiAgICAgIHJlc3BvbnNlLnR5cGVcbiAgICApXG4gIH1cblxuICAvLyAyLiBMZXQgbmV3UmVzcG9uc2UgYmUgYSBjb3B5IG9mIHJlc3BvbnNlLCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IC4uLnJlc3BvbnNlLCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IG5ld1Jlc3BvbnNl4oCZcyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXNwb25zZeKAmXMgYm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1Jlc3BvbnNlLmJvZHkgPSBjbG9uZUJvZHkocmVzcG9uc2UuYm9keSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiBuZXdSZXNwb25zZS5cbiAgcmV0dXJuIG5ld1Jlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZSAoaW5pdCkge1xuICByZXR1cm4ge1xuICAgIGFib3J0ZWQ6IGZhbHNlLFxuICAgIHJhbmdlUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd1Bhc3NlZDogZmFsc2UsXG4gICAgcmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICBzdGF0dXM6IDIwMCxcbiAgICB0aW1pbmdJbmZvOiBudWxsLFxuICAgIGNhY2hlU3RhdGU6ICcnLFxuICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpLFxuICAgIHVybExpc3Q6IGluaXQudXJsTGlzdCA/IFsuLi5pbml0LnVybExpc3RdIDogW11cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTmV0d29ya0Vycm9yIChyZWFzb24pIHtcbiAgY29uc3QgaXNFcnJvciA9IGlzRXJyb3JMaWtlKHJlYXNvbilcbiAgcmV0dXJuIG1ha2VSZXNwb25zZSh7XG4gICAgdHlwZTogJ2Vycm9yJyxcbiAgICBzdGF0dXM6IDAsXG4gICAgZXJyb3I6IGlzRXJyb3JcbiAgICAgID8gcmVhc29uXG4gICAgICA6IG5ldyBFcnJvcihyZWFzb24gPyBTdHJpbmcocmVhc29uKSA6IHJlYXNvbiksXG4gICAgYWJvcnRlZDogcmVhc29uICYmIHJlYXNvbi5uYW1lID09PSAnQWJvcnRFcnJvcidcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFrZUZpbHRlcmVkUmVzcG9uc2UgKHJlc3BvbnNlLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAuLi5zdGF0ZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgIGdldCAodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gcCBpbiBzdGF0ZSA/IHN0YXRlW3BdIDogdGFyZ2V0W3BdXG4gICAgfSxcbiAgICBzZXQgKHRhcmdldCwgcCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydCghKHAgaW4gc3RhdGUpKVxuICAgICAgdGFyZ2V0W3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1maWx0ZXJlZC1yZXNwb25zZVxuZnVuY3Rpb24gZmlsdGVyUmVzcG9uc2UgKHJlc3BvbnNlLCB0eXBlKSB7XG4gIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gIGlmICh0eXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gQSBiYXNpYyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJiYXNpY1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdFxuICAgIC8vIHdob3NlIG5hbWUgaXMgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb3JzJykge1xuICAgIC8vIEEgQ09SUyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJjb3JzXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2XigJlzIGhlYWRlclxuICAgIC8vIGxpc3Qgd2hvc2UgbmFtZSBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWUsIGdpdmVuXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0LlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnY29ycycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWUnKSB7XG4gICAgLy8gQW4gb3BhcXVlIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpc1xuICAgIC8vIFwib3BhcXVlXCIsIFVSTCBsaXN0IGlzIHRoZSBlbXB0eSBsaXN0LCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2VcbiAgICAvLyBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWUnLFxuICAgICAgdXJsTGlzdDogT2JqZWN0LmZyZWV6ZShbXSksXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWVyZWRpcmVjdCcpIHtcbiAgICAvLyBBbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlXG4gICAgLy8gaXMgXCJvcGFxdWVyZWRpcmVjdFwiLCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2UgaXMgdGhlIGVtcHR5IGJ5dGVcbiAgICAvLyBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWVyZWRpcmVjdCcsXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGhlYWRlcnNMaXN0OiBbXSxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwcm9wcmlhdGUtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yIChmZXRjaFBhcmFtcywgZXJyID0gbnVsbCkge1xuICAvLyAxLiBBc3NlcnQ6IGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLlxuICBhc3NlcnQoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKVxuXG4gIC8vIDIuIFJldHVybiBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IgaWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZDtcbiAgLy8gb3RoZXJ3aXNlIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIHJldHVybiBpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpXG4gICAgPyBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpLCB7IGNhdXNlOiBlcnIgfSkpXG4gICAgOiBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignUmVxdWVzdCB3YXMgY2FuY2VsbGVkLicpLCB7IGNhdXNlOiBlcnIgfSkpXG59XG5cbi8vIGh0dHBzOi8vd2hhdHByLm9yZy9mZXRjaC8xMzkyLmh0bWwjaW5pdGlhbGl6ZS1hLXJlc3BvbnNlXG5mdW5jdGlvbiBpbml0aWFsaXplUmVzcG9uc2UgKHJlc3BvbnNlLCBpbml0LCBib2R5KSB7XG4gIC8vIDEuIElmIGluaXRbXCJzdGF0dXNcIl0gaXMgbm90IGluIHRoZSByYW5nZSAyMDAgdG8gNTk5LCBpbmNsdXNpdmUsIHRoZW5cbiAgLy8gICAgdGhyb3cgYSBSYW5nZUVycm9yLlxuICBpZiAoaW5pdC5zdGF0dXMgIT09IG51bGwgJiYgKGluaXQuc3RhdHVzIDwgMjAwIHx8IGluaXQuc3RhdHVzID4gNTk5KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbml0W1wic3RhdHVzXCJdIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDIwMCB0byA1OTksIGluY2x1c2l2ZS4nKVxuICB9XG5cbiAgLy8gMi4gSWYgaW5pdFtcInN0YXR1c1RleHRcIl0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlYXNvbi1waHJhc2UgdG9rZW4gcHJvZHVjdGlvbixcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgLy8gU2VlLCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjEuMjpcbiAgICAvLyAgIHJlYXNvbi1waHJhc2UgID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gICAgaWYgKCFpc1ZhbGlkUmVhc29uUGhyYXNlKFN0cmluZyhpbml0LnN0YXR1c1RleHQpKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdGF0dXNUZXh0JylcbiAgICB9XG4gIH1cblxuICAvLyAzLiBTZXQgcmVzcG9uc2XigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgdG8gaW5pdFtcInN0YXR1c1wiXS5cbiAgaWYgKCdzdGF0dXMnIGluIGluaXQgJiYgaW5pdC5zdGF0dXMgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzID0gaW5pdC5zdGF0dXNcbiAgfVxuXG4gIC8vIDQuIFNldCByZXNwb25zZeKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlIHRvIGluaXRbXCJzdGF0dXNUZXh0XCJdLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIDUuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBmaWxsIHJlc3BvbnNl4oCZcyBoZWFkZXJzIHdpdGggaW5pdFtcImhlYWRlcnNcIl0uXG4gIGlmICgnaGVhZGVycycgaW4gaW5pdCAmJiBpbml0LmhlYWRlcnMgIT0gbnVsbCkge1xuICAgIGZpbGwocmVzcG9uc2Vba0hlYWRlcnNdLCBpbml0LmhlYWRlcnMpXG4gIH1cblxuICAvLyA2LiBJZiBib2R5IHdhcyBnaXZlbiwgdGhlbjpcbiAgaWYgKGJvZHkpIHtcbiAgICAvLyAxLiBJZiByZXNwb25zZSdzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSdzIGJvZHkgdG8gYm9keSdzIGJvZHkuXG4gICAgcmVzcG9uc2Vba1N0YXRlXS5ib2R5ID0gYm9keS5ib2R5XG5cbiAgICAvLyAzLiBJZiBib2R5J3MgdHlwZSBpcyBub24tbnVsbCBhbmQgcmVzcG9uc2UncyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluXG4gICAgLy8gICAgYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIChgQ29udGVudC1UeXBlYCwgYm9keSdzIHR5cGUpIHRvIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QuXG4gICAgaWYgKGJvZHkudHlwZSAhPSBudWxsICYmICFyZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGJvZHkudHlwZSlcbiAgICB9XG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0gPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZWFkYWJsZVN0cmVhbVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEZvcm1EYXRhXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFVSTFNlYXJjaFBhcmFtc1xuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jdHlwZWRlZmRlZi14bWxodHRwcmVxdWVzdGJvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihWKSB8fCB0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHwgdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgfVxuXG4gIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAoViBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtKFYpXG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGluY2x1ZGUgYXN5bmMgaXRlcmFibGVzLFxuICAvLyB0aGlzIGlzIGFuIHVuZGljaSBleHRlbnNpb24uXG4gIGlmIChWPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIFZcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0KFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3N0YXR1cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDIwMFxuICB9LFxuICB7XG4gICAga2V5OiAnc3RhdHVzVGV4dCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2Vcbn1cbiIsCiAgICAiLyogZ2xvYmFscyBBYm9ydENvbnRyb2xsZXIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZXh0cmFjdEJvZHksIG1peGluQm9keSwgY2xvbmVCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5sZXQgVHJhbnNmb3JtU3RyZWFtID0gZ2xvYmFsVGhpcy5UcmFuc2Zvcm1TdHJlYW1cblxuY29uc3Qga0Fib3J0Q29udHJvbGxlciA9IFN5bWJvbCgnYWJvcnRDb250cm9sbGVyJylcblxuY29uc3QgcmVxdWVzdEZpbmFsaXplciA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoeyBzaWduYWwsIGFib3J0IH0pID0+IHtcbiAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIGlmIChpbnB1dCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InIH0pXG5cbiAgICBpbnB1dCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKGlucHV0KVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0KVxuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIHRoaXNba1JlYWxtXSA9IHtcbiAgICAgIHNldHRpbmdzT2JqZWN0OiB7XG4gICAgICAgIGJhc2VVcmw6IGdldEdsb2JhbE9yaWdpbigpLFxuICAgICAgICBnZXQgb3JpZ2luICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5Q29udGFpbmVyOiBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlz4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA2LiBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDcuIEFzc2VydDogaW5wdXQgaXMgYSBSZXF1ZXN0IG9iamVjdC5cbiAgICAgIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0IHRvIGlucHV04oCZcyByZXF1ZXN0LlxuICAgICAgcmVxdWVzdCA9IGlucHV0W2tTdGF0ZV1cblxuICAgICAgLy8gOS4gU2V0IHNpZ25hbCB0byBpbnB1dOKAmXMgc2lnbmFsLlxuICAgICAgc2lnbmFsID0gaW5wdXRba1NpZ25hbF1cbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgb3JpZ2luIGJlIHRoaXPigJlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdOKAmXMgb3JpZ2luLlxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3TigJlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3TigJlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdOKAmXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc+KAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdOKAmXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN04oCZcyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN04oCZcyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN04oCZcyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdOKAmXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdOKAmXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3TigJlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3TigJlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN04oCZcyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdOKAmXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN04oCZcyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN04oCZcyBVUkwgdG8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3TigJlzIFVSTCBsaXN0IHRvIMKrIHJlcXVlc3TigJlzIFVSTCDCuy5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3TigJlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3TigJlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN04oCZcyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAvLyB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0LmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgIG1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2RdID8/IG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gbWV0aG9kLlxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXPigJlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXPigJlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlz4oCZcyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG4gICAgdGhpc1trU2lnbmFsXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc+KAmXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWMgPSBhY1JlZi5kZXJlZigpXG4gICAgICAgICAgaWYgKGFjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgYWJvcnQpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdCdcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0LW5vLWNvcnMnXG4gICAgfVxuXG4gICAgLy8gMzIuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvKiogQHR5cGUge0hlYWRlcnNMaXN0fSAqL1xuICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc+KAmXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVy4oCZcyBuYW1lL2hlYWRlcuKAmXMgdmFsdWUgdG8gdGhpc+KAmXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXPigJlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dOKAmXMgcmVxdWVzdOKAmXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlz4oCZcyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICF0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHnigJlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXPigJlzIHJlcXVlc3TigJlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKGlucHV0Qm9keS5zdHJlYW0pIHx8IGlucHV0Qm9keS5zdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIGlmICghVHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5UcmFuc2Zvcm1TdHJlYW1cbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFs4oCZcyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3NlcuKAmXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZc1xuICAgIC8vIHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3dhcmQgbmF2aWdhdGlvbikuXG4gIGdldCBpc0hpc3RvcnlOYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzSGlzdG9yeU5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXF1ZXN04oCZc1xuICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaGlzdG9yeU5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHNpZ25hbCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYW4gQWJvcnRTaWduYWxcbiAgLy8gb2JqZWN0IGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLCBhbmQgaXRzXG4gIC8vIGFib3J0IGV2ZW50IGhhbmRsZXIuXG4gIGdldCBzaWduYWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgc2lnbmFsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHNpZ25hbC5cbiAgICByZXR1cm4gdGhpc1trU2lnbmFsXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIGdldCBkdXBsZXggKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gJ2hhbGYnXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8IHRoaXMuYm9keT8ubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXPigJlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc+KAmXMgaGVhZGVyc+KAmXMgZ3VhcmQsIGFuZCB0aGlz4oCZcyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3Qoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXF1ZXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN04oCZcyBzaWduYWwgZm9sbG93IHRoaXPigJlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5zaWduYWwsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU2lnbmFsXSA9IGFjLnNpZ25hbFxuXG4gICAgLy8gNC4gUmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3QuXG4gICAgcmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVxdWVzdClcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RzXG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBmYWxzZSxcbiAgICBib2R5OiBudWxsLFxuICAgIGNsaWVudDogbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogbnVsbCxcbiAgICByZXBsYWNlc0NsaWVudElkOiAnJyxcbiAgICB3aW5kb3c6ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6ICdhbGwnLFxuICAgIGluaXRpYXRvcjogJycsXG4gICAgZGVzdGluYXRpb246ICcnLFxuICAgIHByaW9yaXR5OiBudWxsLFxuICAgIG9yaWdpbjogJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXJQb2xpY3k6ICcnLFxuICAgIG1vZGU6ICduby1jb3JzJyxcbiAgICB1c2VDT1JTUHJlZmxpZ2h0RmxhZzogZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIGNhY2hlOiAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogJycsXG4gICAgcmVsb2FkTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGZhbHNlLFxuICAgIHVzZXJBY3RpdmF0aW9uOiBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBmYWxzZSxcbiAgICByZWRpcmVjdENvdW50OiAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGZhbHNlLFxuICAgIGRvbmU6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBmYWxzZSxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKVxuICB9XG4gIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0WzBdXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVxdWVzdCAocmVxdWVzdCkge1xuICAvLyBUbyBjbG9uZSBhIHJlcXVlc3QgcmVxdWVzdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIExldCBuZXdSZXF1ZXN0IGJlIGEgY29weSBvZiByZXF1ZXN0LCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyAuLi5yZXF1ZXN0LCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgc2V0IG5ld1JlcXVlc3TigJlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlcXVlc3TigJlzIGJvZHkuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1JlcXVlc3QuYm9keSA9IGNsb25lQm9keShyZXF1ZXN0LmJvZHkpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gbmV3UmVxdWVzdC5cbiAgcmV0dXJuIG5ld1JlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfVxuICAgICAgKVxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3dpbmRvdycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfSxcbiAge1xuICAgIGtleTogJ2R1cGxleCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdER1cGxleFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlc3BvbnNlLFxuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBtYWtlUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpXG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpXG5jb25zdCB7XG4gIGJ5dGVzTWF0Y2gsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgVEFPQ2hlY2ssXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBpc0Jsb2JMaWtlLFxuICBzYW1lT3JpZ2luLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHVybEhhc0h0dHBzU2NoZW1lXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kc1NldCxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHN1YnJlc291cmNlU2V0LFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgUmVhZGFibGUsIHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyLCBpc0Vycm9yZWQsIGlzUmVhZGFibGUsIG5vZGVNYWpvciwgbm9kZU1pbm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBkYXRhVVJMUHJvY2Vzc29yLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IFRyYW5zZm9ybVN0cmVhbSB9ID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgR0VUX09SX0hFQUQgPSBbJ0dFVCcsICdIRUFEJ11cblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkx9ICovXG5sZXQgcmVzb2x2ZU9iamVjdFVSTFxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5jbGFzcyBGZXRjaCBleHRlbmRzIEVFIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbFxuICAgIHRoaXMuZHVtcCA9IGZhbHNlXG4gICAgdGhpcy5zdGF0ZSA9ICdvbmdvaW5nJ1xuICAgIC8vIDIgdGVybWluYXRlZCBsaXN0ZW5lcnMgZ2V0IGFkZGVkIHBlciByZXF1ZXN0LFxuICAgIC8vIGJ1dCBvbmx5IDEgZ2V0cyByZW1vdmVkLiBJZiB0aGVyZSBhcmUgMjAgcmVkaXJlY3RzLFxuICAgIC8vIDIxIGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTcxMVxuICAgIC8vIFRPRE8gKGZpeCk6IEZpbmQgYW5kIGZpeCByb290IGNhdXNlIGZvciBsZWFrZWQgbGlzdGVuZXIuXG4gICAgdGhpcy5zZXRNYXhMaXN0ZW5lcnMoMjEpXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVy4oCZcyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnbG9iYWxUaGlzLmZldGNoJyB9KVxuXG4gIC8vIDEuIExldCBwIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHAgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDIuIExldCByZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2ZcbiAgLy8gUmVxdWVzdCBhcyBjb25zdHJ1Y3RvciB3aXRoIGlucHV0IGFuZCBpbml0IGFzIGFyZ3VtZW50cy4gSWYgdGhpcyB0aHJvd3NcbiAgLy8gYW4gZXhjZXB0aW9uLCByZWplY3QgcCB3aXRoIGl0IGFuZCByZXR1cm4gcC5cbiAgbGV0IHJlcXVlc3RPYmplY3RcblxuICB0cnkge1xuICAgIHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHAucmVqZWN0KGUpXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gMy4gTGV0IHJlcXVlc3QgYmUgcmVxdWVzdE9iamVjdOKAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDQuIElmIHJlcXVlc3RPYmplY3TigJlzIHNpZ25hbOKAmXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgaWYgKHJlcXVlc3RPYmplY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAvLyAxLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgbnVsbCwgYW5kXG4gICAgLy8gICAgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCBudWxsLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAvLyAyLiBSZXR1cm4gcC5cbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyA1LiBMZXQgZ2xvYmFsT2JqZWN0IGJlIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgLy8gNi4gSWYgZ2xvYmFsT2JqZWN0IGlzIGEgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCwgdGhlbiBzZXRcbiAgLy8gcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gIGlmIChnbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJykge1xuICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgfVxuXG4gIC8vIDcuIExldCByZXNwb25zZU9iamVjdCBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2VPYmplY3QgPSBudWxsXG5cbiAgLy8gOC4gTGV0IHJlbGV2YW50UmVhbG0gYmUgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gIGNvbnN0IHJlbGV2YW50UmVhbG0gPSBudWxsXG5cbiAgLy8gOS4gTGV0IGxvY2FsbHlBYm9ydGVkIGJlIGZhbHNlLlxuICBsZXQgbG9jYWxseUFib3J0ZWQgPSBmYWxzZVxuXG4gIC8vIDEwLiBMZXQgY29udHJvbGxlciBiZSBudWxsLlxuICBsZXQgY29udHJvbGxlciA9IG51bGxcblxuICAvLyAxMS4gQWRkIHRoZSBmb2xsb3dpbmcgYWJvcnQgc3RlcHMgdG8gcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFsOlxuICBhZGRBYm9ydExpc3RlbmVyKFxuICAgIHJlcXVlc3RPYmplY3Quc2lnbmFsLFxuICAgICgpID0+IHtcbiAgICAgIC8vIDEuIFNldCBsb2NhbGx5QWJvcnRlZCB0byB0cnVlLlxuICAgICAgbG9jYWxseUFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIEFzc2VydDogY29udHJvbGxlciBpcyBub24tbnVsbC5cbiAgICAgIGFzc2VydChjb250cm9sbGVyICE9IG51bGwpXG5cbiAgICAgIC8vIDMuIEFib3J0IGNvbnRyb2xsZXIgd2l0aCByZXF1ZXN0T2JqZWN04oCZcyBzaWduYWzigJlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQocmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgICAvLyA0LiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsXG4gICAgICAvLyAgICBhbmQgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICBjb25zdCBoYW5kbGVGZXRjaERvbmUgPSAocmVzcG9uc2UpID0+XG4gICAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KFxuICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcpLCB7IGNhdXNlOiByZXNwb25zZS5lcnJvciB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBSZXNvbHZlIHAgd2l0aCByZXNwb25zZU9iamVjdC5cbiAgICBwLnJlc29sdmUocmVzcG9uc2VPYmplY3QpXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IGluaXQuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG4gIH0pXG5cbiAgLy8gMTQuIFJldHVybiBwLlxuICByZXR1cm4gcC5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1hbmQtcmVwb3J0LXRpbWluZ1xuZnVuY3Rpb24gZmluYWxpemVBbmRSZXBvcnRUaW1pbmcgKHJlc3BvbnNlLCBpbml0aWF0b3JUeXBlID0gJ290aGVyJykge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJiByZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgbnVsbCBvciBlbXB0eSwgdGhlbiByZXR1cm4uXG4gIGlmICghcmVzcG9uc2UudXJsTGlzdD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAzLiBMZXQgb3JpZ2luYWxVUkwgYmUgcmVzcG9uc2XigJlzIFVSTCBsaXN0WzBdLlxuICBjb25zdCBvcmlnaW5hbFVSTCA9IHJlc3BvbnNlLnVybExpc3RbMF1cblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSByZXNwb25zZeKAmXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gcmVzcG9uc2UudGltaW5nSW5mb1xuXG4gIC8vIDUuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNl4oCZcyBjYWNoZSBzdGF0ZS5cbiAgbGV0IGNhY2hlU3RhdGUgPSByZXNwb25zZS5jYWNoZVN0YXRlXG5cbiAgLy8gNi4gSWYgb3JpZ2luYWxVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKG9yaWdpbmFsVVJMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNy4gSWYgdGltaW5nSW5mbyBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHRpbWluZ0luZm8gPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDguIElmIHJlc3BvbnNl4oCZcyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbjpcbiAgaWYgKCFyZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCkge1xuICAgIC8vICAxLiBTZXQgdGltaW5nSW5mbyB0byBhIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZyBpbmZvIGZvciB0aW1pbmdJbmZvLlxuICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuXG4gICAgLy8gIDIuIFNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgY2FjaGVTdGF0ZSA9ICcnXG4gIH1cblxuICAvLyA5LiBTZXQgdGltaW5nSW5mb+KAmXMgZW5kIHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lXG4gIC8vIGdpdmVuIGdsb2JhbOKAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN04oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgLy8gVE9ETzogZ2l2ZW4gZ2xvYmFs4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5P1xuICB0aW1pbmdJbmZvLmVuZFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSgpXG5cbiAgLy8gMTAuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMS4gTWFyayByZXNvdXJjZSB0aW1pbmcgZm9yIHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLFxuICAvLyBnbG9iYWwsIGFuZCBjYWNoZVN0YXRlLlxuICBtYXJrUmVzb3VyY2VUaW1pbmcoXG4gICAgdGltaW5nSW5mbyxcbiAgICBvcmlnaW5hbFVSTCxcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuZnVuY3Rpb24gbWFya1Jlc291cmNlVGltaW5nICh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSkge1xuICBpZiAobm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDIpKSB7XG4gICAgcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLmhyZWYsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0LWZldGNoXG5mdW5jdGlvbiBhYm9ydEZldGNoIChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgZXJyb3IpIHtcbiAgLy8gTm90ZTogQWJvcnRTaWduYWwucmVhc29uIHdhcyBhZGRlZCBpbiBub2RlIHYxNy4yLjBcbiAgLy8gd2hpY2ggd291bGQgZ2l2ZSB1cyBhbiB1bmRlZmluZWQgZXJyb3IgdG8gcmVqZWN0IHdpdGguXG4gIC8vIFJlbW92ZSB0aGlzIG9uY2Ugbm9kZSB2MTYgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAgaWYgKCFlcnJvcikge1xuICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cblxuICAvLyAxLiBSZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBwLnJlamVjdChlcnJvcilcblxuICAvLyAyLiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBjYW5jZWwgcmVxdWVzdOKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXF1ZXN0LmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXF1ZXN0LmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZU9iamVjdCBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlT2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2UuXG4gIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDUuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciByZXNwb25zZeKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVzcG9uc2UuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlc3BvbnNlLmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoaW5nXG5mdW5jdGlvbiBmZXRjaGluZyAoe1xuICByZXF1ZXN0LFxuICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZSxcbiAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgdXNlUGFyYWxsZWxRdWV1ZSA9IGZhbHNlLFxuICBkaXNwYXRjaGVyIC8vIHVuZGljaVxufSkge1xuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3TigJlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN04oCZcyBjbGllbnTigJlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVuVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICBjb25zdCB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgc3RhcnRUaW1lOiBjdXJyZW5UaW1lXG4gIH0pXG5cbiAgLy8gNi4gTGV0IGZldGNoUGFyYW1zIGJlIGEgbmV3IGZldGNoIHBhcmFtcyB3aG9zZVxuICAvLyByZXF1ZXN0IGlzIHJlcXVlc3QsXG4gIC8vIHRpbWluZyBpbmZvIGlzIHRpbWluZ0luZm8sXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBib2R5IGNodW5rIGxlbmd0aCBpcyBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGlzIHByb2Nlc3NSZXNwb25zZSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAvLyB0YXNrIGRlc3RpbmF0aW9uIGlzIHRhc2tEZXN0aW5hdGlvbixcbiAgLy8gYW5kIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5IGlzIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBmZXRjaFBhcmFtcyA9IHtcbiAgICBjb250cm9sbGVyOiBuZXcgRmV0Y2goZGlzcGF0Y2hlciksXG4gICAgcmVxdWVzdCxcbiAgICB0aW1pbmdJbmZvLFxuICAgIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAgIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gICAgdGFza0Rlc3RpbmF0aW9uLFxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0b1xuICAvLyAgICByZXF1ZXN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgLy8gTk9URTogU2luY2UgZmV0Y2hpbmcgaXMgb25seSBjYWxsZWQgZnJvbSBmZXRjaCwgYm9keSBzaG91bGQgYWxyZWFkeSBiZVxuICAvLyBleHRyYWN0ZWQuXG4gIGFzc2VydCghcmVxdWVzdC5ib2R5IHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pXG5cbiAgLy8gOC4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHdpbmRvdyB0byByZXF1ZXN04oCZc1xuICAvLyBjbGllbnQsIGlmIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdCBpcyBhIFdpbmRvdyBvYmplY3Q7IG90aGVyd2lzZVxuICAvLyBcIm5vLXdpbmRvd1wiLlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qud2luZG93ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50Py5nbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnV2luZG93J1xuICAgICAgICA/IHJlcXVlc3QuY2xpZW50XG4gICAgICAgIDogJ25vLXdpbmRvdydcbiAgfVxuXG4gIC8vIDkuIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN04oCZcyBvcmlnaW4gdG8gcmVxdWVzdOKAmXNcbiAgLy8gY2xpZW504oCZcyBvcmlnaW4uXG4gIGlmIChyZXF1ZXN0Lm9yaWdpbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC5vcmlnaW4gPSByZXF1ZXN0LmNsaWVudD8ub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN04oCZcyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN04oCZcyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN04oCZcyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdOKAmXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN04oCZc1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdOKAmXMgcG9saWN5IGNvbnRhaW5lcuKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3TigJlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3TigJlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3TigJlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdOKAmXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZeKAmXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNl4oCZcyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3TigJlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZeKAmXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNl4oCZcyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2XigJlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3TigJlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJylcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3TigJlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZeKAmXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZeKAmXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2XigJlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSDCuyxcbiAgICAgIC8vIGFuZCBib2R5IGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlIGFzIGEgYm9keS5cblxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdhYm91dCBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCcpKVxuICAgIH1cbiAgICBjYXNlICdibG9iOic6IHtcbiAgICAgIGlmICghcmVzb2x2ZU9iamVjdFVSTCkge1xuICAgICAgICByZXNvbHZlT2JqZWN0VVJMID0gcmVxdWlyZSgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5T2JqZWN0ID0gcmVzb2x2ZU9iamVjdFVSTChibG9iVVJMRW50cnkudG9TdHJpbmcoKSlcblxuICAgICAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5vdCBgR0VUYCwgYmxvYlVSTEVudHJ5IGlzIG51bGwsIG9yIGJsb2JVUkxFbnRyeeKAmXNcbiAgICAgIC8vICAgIG9iamVjdCBpcyBub3QgYSBCbG9iIG9iamVjdCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCAhaXNCbG9iTGlrZShibG9iVVJMRW50cnlPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSB0aGUgcmVzdWx0IG9mIHNhZmVseSBleHRyYWN0aW5nIGJsb2JVUkxFbnRyeeKAmXMgb2JqZWN0LlxuICAgICAgY29uc3QgYm9keVdpdGhUeXBlID0gc2FmZWx5RXh0cmFjdEJvZHkoYmxvYlVSTEVudHJ5T2JqZWN0KVxuXG4gICAgICAvLyA0LiBMZXQgYm9keSBiZSBib2R5V2l0aFR5cGXigJlzIGJvZHkuXG4gICAgICBjb25zdCBib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgIC8vIDUuIExldCBsZW5ndGggYmUgYm9keeKAmXMgbGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICBjb25zdCBsZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2JvZHkubGVuZ3RofWApXG5cbiAgICAgIC8vIDYuIExldCB0eXBlIGJlIGJvZHlXaXRoVHlwZeKAmXMgdHlwZSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAgICAgY29uc3QgdHlwZSA9IGJvZHlXaXRoVHlwZVsxXSA/PyAnJ1xuXG4gICAgICAvLyA3LiBSZXR1cm4gYSBuZXcgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXNcbiAgICAgIC8vICAgIMKrIChgQ29udGVudC1MZW5ndGhgLCBsZW5ndGgpLCAoYENvbnRlbnQtVHlwZWAsIHR5cGUpIMK7LCBhbmQgYm9keSBpcyBib2R5LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC1sZW5ndGgnLCB7IG5hbWU6ICdDb250ZW50LUxlbmd0aCcsIHZhbHVlOiBsZW5ndGggfV0sXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogdHlwZSB9XVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5ib2R5ID0gYm9keVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgIH1cbiAgICBjYXNlICdkYXRhOic6IHtcbiAgICAgIC8vIDEuIExldCBkYXRhVVJMU3RydWN0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGVcbiAgICAgIC8vICAgIGRhdGE6IFVSTCBwcm9jZXNzb3Igb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAgIGNvbnN0IGRhdGFVUkxTdHJ1Y3QgPSBkYXRhVVJMUHJvY2Vzc29yKGN1cnJlbnRVUkwpXG5cbiAgICAgIC8vIDIuIElmIGRhdGFVUkxTdHJ1Y3QgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYVxuICAgICAgLy8gICAgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChkYXRhVVJMU3RydWN0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBtaW1lVHlwZSBiZSBkYXRhVVJMU3RydWN04oCZcyBNSU1FIHR5cGUsIHNlcmlhbGl6ZWQuXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShkYXRhVVJMU3RydWN0Lm1pbWVUeXBlKVxuXG4gICAgICAvLyA0LiBSZXR1cm4gYSByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLFxuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgwrssXG4gICAgICAvLyAgICBhbmQgYm9keSBpcyBkYXRhVVJMU3RydWN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiBtaW1lVHlwZSB9XVxuICAgICAgICBdLFxuICAgICAgICBib2R5OiBzYWZlbHlFeHRyYWN0Qm9keShkYXRhVVJMU3RydWN0LmJvZHkpWzBdXG4gICAgICB9KSlcbiAgICB9XG4gICAgY2FzZSAnZmlsZTonOiB7XG4gICAgICAvLyBGb3Igbm93LCB1bmZvcnR1bmF0ZSBhcyBpdCBpcywgZmlsZSBVUkxzIGFyZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICAgICAgLy8gV2hlbiBpbiBkb3VidCwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignbm90IGltcGxlbWVudGVkLi4uIHlldC4uLicpKVxuICAgIH1cbiAgICBjYXNlICdodHRwOic6XG4gICAgY2FzZSAnaHR0cHM6Jzoge1xuICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuXG4gICAgICByZXR1cm4gaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3Vua25vd24gc2NoZW1lJykpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1yZXNwb25zZVxuZnVuY3Rpb24gZmluYWxpemVSZXNwb25zZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIFNldCBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdOKAmXMgZG9uZSBmbGFnLlxuICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgLy8gMiwgSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBpcyBub3QgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoXG4gIC8vIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgZ2l2ZW4gcmVzcG9uc2UsIHdpdGhcbiAgLy8gZmV0Y2hQYXJhbXPigJlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lKHJlc3BvbnNlKSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtZmluYWxlXG5mdW5jdGlvbiBmZXRjaEZpbmFsZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAvLyAxLiBTZXQgcmVzcG9uc2XigJlzIFVSTCBsaXN0IHRvIMKrIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBVUkwgbGlzdFswXSDCuy5cbiAgICByZXNwb25zZS51cmxMaXN0ID0gW2ZldGNoUGFyYW1zLnJlcXVlc3QudXJsTGlzdFswXV1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nXG4gICAgLy8gaW5mbyBmb3IgZmV0Y2hQYXJhbXPigJlzIHRpbWluZyBpbmZvLlxuICAgIHJlc3BvbnNlLnRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogZmV0Y2hQYXJhbXMudGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gU2V0IGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBkb25lIGZsYWcuXG4gICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgLy8gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlXG4gICAgLy8gZW5kLW9mLWJvZHkgZ2l2ZW4gcmVzcG9uc2Ugd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ICE9IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrXG4gIC8vIHRvIHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gIC8vIDUuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgYSBUcmFuc2Zvcm1TdHJlYW0uXG5cbiAgICAvLyAyLiBMZXQgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHdoaWNoLCBnaXZlbiBjaHVuayxcbiAgICAvLyBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuaylcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobVxuICAgIC8vIGFuZCBmbHVzaEFsZ29yaXRobSBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0cmFuc2Zvcm06IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtLFxuICAgICAgZmx1c2g6IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gdGhlIHJlc3VsdCBvZiBwaXBpbmcgcmVzcG9uc2XigJlzIGJvZHkgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtOiByZXNwb25zZS5ib2R5LnN0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pIH1cbiAgfVxuXG4gIC8vIDYuIElmIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5ICE9IG51bGwpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gbnVsbE9yQnl0ZXMgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXPigJlzXG4gICAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIG51bGxPckJ5dGVzLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKG51bGxPckJ5dGVzKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgbnVsbE9yQnl0ZXMpXG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2Vzc1xuICAgIC8vIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgZmFpbHVyZS5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGZhaWx1cmUpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBmYWlsdXJlKVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5XG4gICAgLy8gZ2l2ZW4gbnVsbCwgd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBwcm9jZXNzQm9keShudWxsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIHJlc3BvbnNl4oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yLFxuICAgICAgLy8gYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgICAgcmV0dXJuIGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdOKAmXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2XigJlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdOKAmXMgb3JpZ2luLCByZXF1ZXN04oCZcyBjbGllbnQsIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdOKAmXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNl4oCZcyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2XigJlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZeKAmXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgLy8gVVJM4oCZcyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTOKAmXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdOKAmXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTOKAmXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZeKAmXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN04oCZcyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3TigJlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkzigJlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJylcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJylcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3TigJlzIGJvZHnigJlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1z4oCZcyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb+KAmXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb+KAmXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAvLyAyLiBTZXQgaHR0cEZldGNoUGFyYW1zIHRvIGEgY29weSBvZiBmZXRjaFBhcmFtcy5cbiAgICBodHRwRmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIC8vIDMuIFNldCBodHRwRmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QgdG8gaHR0cFJlcXVlc3QuXG4gICAgaHR0cEZldGNoUGFyYW1zLnJlcXVlc3QgPSBodHRwUmVxdWVzdFxuICB9XG5cbiAgLy8gICAgMy4gTGV0IGluY2x1ZGVDcmVkZW50aWFscyBiZSB0cnVlIGlmIG9uZSBvZlxuICBjb25zdCBpbmNsdWRlQ3JlZGVudGlhbHMgPVxuICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJyB8fFxuICAgIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnc2FtZS1vcmlnaW4nICYmXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpXG5cbiAgLy8gICAgNC4gTGV0IGNvbnRlbnRMZW5ndGggYmUgaHR0cFJlcXVlc3TigJlzIGJvZHnigJlzIGxlbmd0aCwgaWYgaHR0cFJlcXVlc3TigJlzXG4gIC8vICAgIGJvZHkgaXMgbm9uLW51bGw7IG90aGVyd2lzZSBudWxsLlxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gaHR0cFJlcXVlc3QuYm9keSA/IGh0dHBSZXF1ZXN0LmJvZHkubGVuZ3RoIDogbnVsbFxuXG4gIC8vICAgIDUuIExldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgYmUgbnVsbC5cbiAgbGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IG51bGxcblxuICAvLyAgICA2LiBJZiBodHRwUmVxdWVzdOKAmXMgYm9keSBpcyBudWxsIGFuZCBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIGBQT1NUYCBvclxuICAvLyAgICBgUFVUYCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGAwYC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJlxuICAgIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhodHRwUmVxdWVzdC5tZXRob2QpXG4gICkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9ICcwJ1xuICB9XG5cbiAgLy8gICAgNy4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvXG4gIC8vICAgIGNvbnRlbnRMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Y29udGVudExlbmd0aH1gKVxuICB9XG5cbiAgLy8gICAgOC4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ29udGVudC1MZW5ndGhgL2NvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGlmIChjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgIT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpXG4gIH1cblxuICAvLyAgICA5LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kIChgQ29udGVudC1MZW5ndGhgLFxuICAvLyAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICAxMC4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCBhbmQgaHR0cFJlcXVlc3TigJlzIGtlZXBhbGl2ZSBpcyB0cnVlLFxuICAvLyAgICB0aGVuOlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGh0dHBSZXF1ZXN0LmtlZXBhbGl2ZSkge1xuICAgIC8vIE5PVEU6IGtlZXBhbGl2ZSBpcyBhIG5vb3Agb3V0c2lkZSBvZiBicm93c2VyIGNvbnRleHQuXG4gIH1cblxuICAvLyAgICAxMS4gSWYgaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyIGlzIGEgVVJMLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgUmVmZXJlcmAvaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQsXG4gIC8vICAgICB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncmVmZXJlcicsIGlzb21vcnBoaWNFbmNvZGUoaHR0cFJlcXVlc3QucmVmZXJyZXIuaHJlZikpXG4gIH1cblxuICAvLyAgICAxMi4gQXBwZW5kIGEgcmVxdWVzdCBgT3JpZ2luYCBoZWFkZXIgZm9yIGh0dHBSZXF1ZXN0LlxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDEzLiBBcHBlbmQgdGhlIEZldGNoIG1ldGFkYXRhIGhlYWRlcnMgZm9yIGh0dHBSZXF1ZXN0LiBbRkVUQ0gtTUVUQURBVEFdXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTQuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBVc2VyLUFnZW50YCwgdGhlblxuICAvLyAgICB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBVc2VyLUFnZW50YC9kZWZhdWx0IGBVc2VyLUFnZW50YCB2YWx1ZSB0b1xuICAvLyAgICBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3VzZXItYWdlbnQnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgndXNlci1hZ2VudCcsIHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uID09PSAndW5kZWZpbmVkJyA/ICd1bmRpY2knIDogJ25vZGUnKVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdOKAmXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJylcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JylcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlcuKAmXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJylcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZeKAmXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5tb2RlICE9PSAnbm8tc3RvcmUnICYmIGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNl4oCZcyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNl4oCZcyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN04oCZcyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2XigJlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZeKAmXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3TigJlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3TigJlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdOKAmXMgYm9keeKAmXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVycikge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNC4gTGV0IGh0dHBDYWNoZSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlIHBhcnRpdGlvbixcbiAgLy8gZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ETzogY2FjaGVcbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDUuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgcmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vIDYuIExldCBuZXR3b3JrUGFydGl0aW9uS2V5IGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIG5ldHdvcmtcbiAgLy8gcGFydGl0aW9uIGtleSBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNy4gTGV0IG5ld0Nvbm5lY3Rpb24gYmUgXCJ5ZXNcIiBpZiBmb3JjZU5ld0Nvbm5lY3Rpb24gaXMgdHJ1ZTsgb3RoZXJ3aXNlXG4gIC8vIFwibm9cIi5cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IGZvcmNlTmV3Q29ubmVjdGlvbiA/ICd5ZXMnIDogJ25vJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLy8gOC4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIG1vZGU6XG4gIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbixcbiAgICAvLyBnaXZlbiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgICAvLyBUT0RPXG4gIH0gZWxzZSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBjb25uZWN0aW9uLCBnaXZlblxuICAgIC8vIG5ldHdvcmtQYXJ0aXRpb25LZXksIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4sXG4gICAgLy8gaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgZm9yY2VOZXdDb25uZWN0aW9uLlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDkuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiBjb25uZWN0aW9uIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAyLiBTZXQgdGltaW5nSW5mb+KAmXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW4gY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB3aXRoIGNvbm5lY3Rpb27igJlzXG4gIC8vICAgIHRpbWluZyBpbmZvLCB0aW1pbmdJbmZv4oCZcyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUsIGFuZCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgMy4gSWYgY29ubmVjdGlvbiBpcyBub3QgYW4gSFRUUC8yIGNvbm5lY3Rpb24sIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vICAgIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiBhcHBlbmQgKGBUcmFuc2Zlci1FbmNvZGluZ2AsXG4gIC8vICAgIGBjaHVua2VkYCkgdG8gcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgNC4gU2V0IHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVxdWVzdCBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vICAgIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgbWFraW5nIGFuIEhUVFAgcmVxdWVzdCBvdmVyIGNvbm5lY3Rpb25cbiAgLy8gICAgdXNpbmcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcblxuICAvLyAgICAgICAgLSBGb2xsb3cgdGhlIHJlbGV2YW50IHJlcXVpcmVtZW50cyBmcm9tIEhUVFAuIFtIVFRQXSBbSFRUUC1TRU1BTlRJQ1NdXG4gIC8vICAgICAgICBbSFRUUC1DT05EXSBbSFRUUC1DQUNISU5HXSBbSFRUUC1BVVRIXVxuXG4gIC8vICAgICAgICAtIElmIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCxcbiAgLy8gICAgICAgIHRoZW4gdGhlIHVzZXIgYWdlbnQgbWF5IGhhdmUgYSBidWZmZXIgb2YgdXAgdG8gNjQga2liaWJ5dGVzIGFuZCBzdG9yZVxuICAvLyAgICAgICAgYSBwYXJ0IG9mIHJlcXVlc3TigJlzIGJvZHkgaW4gdGhhdCBidWZmZXIuIElmIHRoZSB1c2VyIGFnZW50IHJlYWRzIGZyb21cbiAgLy8gICAgICAgIHJlcXVlc3TigJlzIGJvZHkgYmV5b25kIHRoYXQgYnVmZmVy4oCZcyBzaXplIGFuZCB0aGUgdXNlciBhZ2VudCBuZWVkcyB0b1xuICAvLyAgICAgICAgcmVzZW5kIHJlcXVlc3QsIHRoZW4gaW5zdGVhZCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgICAgICAtIFNldCB0aW1pbmdJbmZv4oCZcyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICAgICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHksXG4gIC8vICAgICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgdXNlciBhZ2VudOKAmXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gICAgICAgIG9mIHRoZSByZXNwb25zZSAoZS5nLiwgZnJhbWUgaGVhZGVyIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzXG4gIC8vICAgICAgICBsaW5lIGZvciBIVFRQLzEueCkuXG5cbiAgLy8gICAgICAgIC0gV2FpdCB1bnRpbCBhbGwgdGhlIGhlYWRlcnMgYXJlIHRyYW5zbWl0dGVkLlxuXG4gIC8vICAgICAgICAtIEFueSByZXNwb25zZXMgd2hvc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAxMDAgdG8gMTk5LCBpbmNsdXNpdmUsXG4gIC8vICAgICAgICBhbmQgaXMgbm90IDEwMSwgYXJlIHRvIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHNldHRpbmdcbiAgLy8gICAgICAgIHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSBhYm92ZS5cblxuICAvLyAgICAtIElmIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBUcmFuc2Zlci1FbmNvZGluZ2AvYGNodW5rZWRgIGFuZFxuICAvLyAgICByZXNwb25zZSBpcyB0cmFuc2ZlcnJlZCB2aWEgSFRUUC8xLjAgb3Igb2xkZXIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyAgICBlcnJvci5cblxuICAvLyAgICAtIElmIHRoZSBIVFRQIHJlcXVlc3QgcmVzdWx0cyBpbiBhIFRMUyBjbGllbnQgY2VydGlmaWNhdGUgZGlhbG9nLCB0aGVuOlxuXG4gIC8vICAgICAgICAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0LCBtYWtlIHRoZVxuICAvLyAgICAgICAgZGlhbG9nIGF2YWlsYWJsZSBpbiByZXF1ZXN04oCZcyB3aW5kb3cuXG5cbiAgLy8gICAgICAgIDIuIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyBUbyB0cmFuc21pdCByZXF1ZXN04oCZcyBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcbiAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbFxuICAvLyAxLiBJZiBib2R5IGlzIG51bGwgYW5kIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXNcbiAgLy8gbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3RcbiAgLy8gZW5kLW9mLWJvZHkgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBib2R5IGlzIG5vbi1udWxsOlxuXG4gICAgLy8gICAgMS4gTGV0IHByb2Nlc3NCb2R5Q2h1bmsgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlDaHVuayA9IGFzeW5jIGZ1bmN0aW9uICogKGJ5dGVzKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDogdHJhbnNtaXQgYnl0ZXMuXG4gICAgICB5aWVsZCBieXRlc1xuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuXG4gICAgICAvLyBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgZ2l2ZW4gYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoPy4oYnl0ZXMuYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0VuZE9mQm9keSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIG5vbi1udWxsLFxuICAgICAgLy8gdGhlbiBydW4gZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgZ2l2ZW4gZSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGUpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZSBpcyBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24sIHRoZW4gYWJvcnQgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIEluY3JlbWVudGFsbHkgcmVhZCByZXF1ZXN04oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5Q2h1bmssIHByb2Nlc3NFbmRPZkJvZHksXG4gICAgLy8gcHJvY2Vzc0JvZHlFcnJvciwgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIHJlcXVlc3RCb2R5ID0gKGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBieXRlcyBvZiByZXF1ZXN0LmJvZHkuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwcm9jZXNzQm9keUNodW5rKGJ5dGVzKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NFbmRPZkJvZHkoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc29ja2V0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHdlYnNvY2tldHNcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9ID0gYXdhaXQgZGlzcGF0Y2goeyBib2R5OiByZXF1ZXN0Qm9keSB9KVxuXG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBib2R5W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQgPSAoKSA9PiBpdGVyYXRvci5uZXh0KClcblxuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0IH0pXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyAxMC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gMS4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgICAvLyAyLiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcywgZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKGVycilcbiAgfVxuXG4gIC8vIDExLiBMZXQgcHVsbEFsZ29yaXRobSBiZSBhbiBhY3Rpb24gdGhhdCByZXN1bWVzIHRoZSBvbmdvaW5nIGZldGNoXG4gIC8vIGlmIGl0IGlzIHN1c3BlbmRlZC5cbiAgY29uc3QgcHVsbEFsZ29yaXRobSA9ICgpID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSgpXG4gIH1cblxuICAvLyAxMi4gTGV0IGNhbmNlbEFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhYm9ydHMgZmV0Y2hQYXJhbXPigJlzXG4gIC8vIGNvbnRyb2xsZXIgd2l0aCByZWFzb24sIGdpdmVuIHJlYXNvbi5cbiAgY29uc3QgY2FuY2VsQWxnb3JpdGhtID0gKHJlYXNvbikgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICB9XG5cbiAgLy8gMTMuIExldCBoaWdoV2F0ZXJNYXJrIGJlIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOIG51bWJlciwgY2hvc2VuIGJ5XG4gIC8vIHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTQuIExldCBzaXplQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFjY2VwdHMgYSBjaHVuayBvYmplY3RcbiAgLy8gYW5kIHJldHVybnMgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4sIG5vbi1pbmZpbml0ZSBudW1iZXIsIGNob3NlbiBieSB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBMZXQgc3RyZWFtIGJlIGEgbmV3IFJlYWRhYmxlU3RyZWFtLlxuICAvLyAxNi4gU2V0IHVwIHN0cmVhbSB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vIGNhbmNlbEFsZ29yaXRobSBzZXQgdG8gY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrIHNldCB0b1xuICAvLyBoaWdoV2F0ZXJNYXJrLCBhbmQgc2l6ZUFsZ29yaXRobSBzZXQgdG8gc2l6ZUFsZ29yaXRobS5cbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXdhaXQgcHVsbEFsZ29yaXRobShjb250cm9sbGVyKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbEFsZ29yaXRobShyZWFzb24pXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAwLFxuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0gfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNl4oCZcyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb+KAmXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShieXRlcykpXG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc27igJl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmICghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDIuIElmIGFib3J0ZWQsIHRoZW46XG4gIGZ1bmN0aW9uIG9uQWJvcnRlZCAocmVhc29uKSB7XG4gICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcuXG4gICAgICByZXNwb25zZS5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gZXJyb3Igc3RyZWFtIHdpdGggdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gICAgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBnaXZlbiBmZXRjaFBhcmFtc+KAmXNcbiAgICAgIC8vICAgIGNvbnRyb2xsZXLigJlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZCBhblxuICAgICAgLy8gICAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCByZWFsbS5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBzdHJlYW0gaXMgcmVhZGFibGUsIGVycm9yIHN0cmVhbSB3aXRoIGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IobmV3IFR5cGVFcnJvcigndGVybWluYXRlZCcsIHtcbiAgICAgICAgICBjYXVzZTogaXNFcnJvckxpa2UocmVhc29uKSA/IHJlYXNvbiA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCB0aGUgdXNlciBhZ2VudCBzaG91bGQgY2xvc2UgY29ubmVjdGlvbiB1bmxlc3MgaXQgd291bGQgYmUgYmFkIGZvciBwZXJmb3JtYW5jZSB0byBkbyBzby5cbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gIH1cblxuICAvLyAyMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2VcblxuICBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaCAoeyBib2R5IH0pIHtcbiAgICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLicpLkFnZW50fSAqL1xuICAgIGNvbnN0IGFnZW50ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gYWdlbnQuZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXG4gICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyLmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgYWJvcnQobmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgYWJvcnQpXG4gICAgICAgICAgICB0aGlzLmFib3J0ID0gY29ubmVjdGlvbi5hYm9ydCA9IGFib3J0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA8IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgLy8gRm9yIEgyLCB0aGUgaGVhZGVycyBhcmUgYSBwbGFpbiBKUyBvYmplY3RcbiAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYW5kIGl0ZXJhdGUgYWNjb3JkaW5nbHlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzTGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzTGlzdClcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3Rba2V5XVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHkgPSBuZXcgUmVhZGFibGUoeyByZWFkOiByZXN1bWUgfSlcblxuICAgICAgICAgIGNvbnN0IGRlY29kZXJzID0gW11cblxuICAgICAgICAgIGNvbnN0IHdpbGxGb2xsb3cgPSByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93JyAmJlxuICAgICAgICAgICAgbG9jYXRpb24gJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kaW5nIG9mIGNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTIuaHRtbCNzZWN0aW9uLTcuMlxuICAgICAgICAgICAgICBpZiAoY29kaW5nID09PSAneC1nemlwJyB8fCBjb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVHdW56aXAoe1xuICAgICAgICAgICAgICAgICAgLy8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG4gICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUluZmxhdGUoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLmxlbmd0aCA9IDBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIGJvZHk6IGRlY29kZXJzLmxlbmd0aFxuICAgICAgICAgICAgICA/IHBpcGVsaW5lKHRoaXMuYm9keSwgLi4uZGVjb2RlcnMsICgpID0+IHsgfSlcbiAgICAgICAgICAgICAgOiB0aGlzLmJvZHkub24oJ2Vycm9yJywgKCkgPT4ge30pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNl4oCZc1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZv4oCZcyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc+KAmXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCA9IHRydWVcblxuICAgICAgICAgIHRoaXMuYm9keS5wdXNoKG51bGwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25FcnJvciAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keT8uZGVzdHJveShlcnJvcilcblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycm9yKVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uVXBncmFkZSAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuXG4gICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcblxuY29uc3Qga1N0YXRlID0gU3ltYm9sKCdQcm9ncmVzc0V2ZW50IHN0YXRlJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcHJvZ3Jlc3NldmVudFxuICovXG5jbGFzcyBQcm9ncmVzc0V2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbGFiZWxcbiAqL1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcgKGxhYmVsKSB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAvLyAgICBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGNvcnJlc3BvbmRpbmcgZW5jb2Rpbmc7IG90aGVyd2lzZSByZXR1cm4gZmFpbHVyZS5cbiAgc3dpdGNoIChsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3VuaWNvZGUtMS0xLXV0Zi04JzpcbiAgICBjYXNlICd1bmljb2RlMTF1dGY4JzpcbiAgICBjYXNlICd1bmljb2RlMjB1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAneC11bmljb2RlMjB1dGY4JzpcbiAgICAgIHJldHVybiAnVVRGLTgnXG4gICAgY2FzZSAnODY2JzpcbiAgICBjYXNlICdjcDg2Nic6XG4gICAgY2FzZSAnY3NpYm04NjYnOlxuICAgIGNhc2UgJ2libTg2Nic6XG4gICAgICByZXR1cm4gJ0lCTTg2NidcbiAgICBjYXNlICdjc2lzb2xhdGluMic6XG4gICAgY2FzZSAnaXNvLTg4NTktMic6XG4gICAgY2FzZSAnaXNvLWlyLTEwMSc6XG4gICAgY2FzZSAnaXNvODg1OS0yJzpcbiAgICBjYXNlICdpc284ODU5Mic6XG4gICAgY2FzZSAnaXNvXzg4NTktMic6XG4gICAgY2FzZSAnaXNvXzg4NTktMjoxOTg3JzpcbiAgICBjYXNlICdsMic6XG4gICAgY2FzZSAnbGF0aW4yJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMidcbiAgICBjYXNlICdjc2lzb2xhdGluMyc6XG4gICAgY2FzZSAnaXNvLTg4NTktMyc6XG4gICAgY2FzZSAnaXNvLWlyLTEwOSc6XG4gICAgY2FzZSAnaXNvODg1OS0zJzpcbiAgICBjYXNlICdpc284ODU5Myc6XG4gICAgY2FzZSAnaXNvXzg4NTktMyc6XG4gICAgY2FzZSAnaXNvXzg4NTktMzoxOTg4JzpcbiAgICBjYXNlICdsMyc6XG4gICAgY2FzZSAnbGF0aW4zJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMydcbiAgICBjYXNlICdjc2lzb2xhdGluNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNCc6XG4gICAgY2FzZSAnaXNvLWlyLTExMCc6XG4gICAgY2FzZSAnaXNvODg1OS00JzpcbiAgICBjYXNlICdpc284ODU5NCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNDoxOTg4JzpcbiAgICBjYXNlICdsNCc6XG4gICAgY2FzZSAnbGF0aW40JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNCdcbiAgICBjYXNlICdjc2lzb2xhdGluY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2N5cmlsbGljJzpcbiAgICBjYXNlICdpc28tODg1OS01JzpcbiAgICBjYXNlICdpc28taXItMTQ0JzpcbiAgICBjYXNlICdpc284ODU5LTUnOlxuICAgIGNhc2UgJ2lzbzg4NTk1JzpcbiAgICBjYXNlICdpc29fODg1OS01JzpcbiAgICBjYXNlICdpc29fODg1OS01OjE5ODgnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS01J1xuICAgIGNhc2UgJ2FyYWJpYyc6XG4gICAgY2FzZSAnYXNtby03MDgnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZlJzpcbiAgICBjYXNlICdjc2lzbzg4NTk2aSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6XG4gICAgY2FzZSAnZWNtYS0xMTQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtZSc6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1pJzpcbiAgICBjYXNlICdpc28taXItMTI3JzpcbiAgICBjYXNlICdpc284ODU5LTYnOlxuICAgIGNhc2UgJ2lzbzg4NTk2JzpcbiAgICBjYXNlICdpc29fODg1OS02JzpcbiAgICBjYXNlICdpc29fODg1OS02OjE5ODcnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS02J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5ncmVlayc6XG4gICAgY2FzZSAnZWNtYS0xMTgnOlxuICAgIGNhc2UgJ2Vsb3RfOTI4JzpcbiAgICBjYXNlICdncmVlayc6XG4gICAgY2FzZSAnZ3JlZWs4JzpcbiAgICBjYXNlICdpc28tODg1OS03JzpcbiAgICBjYXNlICdpc28taXItMTI2JzpcbiAgICBjYXNlICdpc284ODU5LTcnOlxuICAgIGNhc2UgJ2lzbzg4NTk3JzpcbiAgICBjYXNlICdpc29fODg1OS03JzpcbiAgICBjYXNlICdpc29fODg1OS03OjE5ODcnOlxuICAgIGNhc2UgJ3N1bl9ldV9ncmVlayc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTcnXG4gICAgY2FzZSAnY3Npc284ODU5OGUnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5oZWJyZXcnOlxuICAgIGNhc2UgJ2hlYnJldyc6XG4gICAgY2FzZSAnaXNvLTg4NTktOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1lJzpcbiAgICBjYXNlICdpc28taXItMTM4JzpcbiAgICBjYXNlICdpc284ODU5LTgnOlxuICAgIGNhc2UgJ2lzbzg4NTk4JzpcbiAgICBjYXNlICdpc29fODg1OS04JzpcbiAgICBjYXNlICdpc29fODg1OS04OjE5ODgnOlxuICAgIGNhc2UgJ3Zpc3VhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgnXG4gICAgY2FzZSAnY3Npc284ODU5OGknOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtaSc6XG4gICAgY2FzZSAnbG9naWNhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgtSSdcbiAgICBjYXNlICdjc2lzb2xhdGluNic6XG4gICAgY2FzZSAnaXNvLTg4NTktMTAnOlxuICAgIGNhc2UgJ2lzby1pci0xNTcnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMCc6XG4gICAgY2FzZSAnbDYnOlxuICAgIGNhc2UgJ2xhdGluNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEwJ1xuICAgIGNhc2UgJ2lzby04ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5MTMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMydcbiAgICBjYXNlICdpc28tODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OTE0JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbjknOlxuICAgIGNhc2UgJ2lzby04ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5MTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE1JzpcbiAgICBjYXNlICdsOSc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE1J1xuICAgIGNhc2UgJ2lzby04ODU5LTE2JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTYnXG4gICAgY2FzZSAnY3Nrb2k4cic6XG4gICAgY2FzZSAna29pJzpcbiAgICBjYXNlICdrb2k4JzpcbiAgICBjYXNlICdrb2k4LXInOlxuICAgIGNhc2UgJ2tvaThfcic6XG4gICAgICByZXR1cm4gJ0tPSTgtUidcbiAgICBjYXNlICdrb2k4LXJ1JzpcbiAgICBjYXNlICdrb2k4LXUnOlxuICAgICAgcmV0dXJuICdLT0k4LVUnXG4gICAgY2FzZSAnY3NtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ21hYyc6XG4gICAgY2FzZSAnbWFjaW50b3NoJzpcbiAgICBjYXNlICd4LW1hYy1yb21hbic6XG4gICAgICByZXR1cm4gJ21hY2ludG9zaCdcbiAgICBjYXNlICdpc28tODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OTExJzpcbiAgICBjYXNlICd0aXMtNjIwJzpcbiAgICBjYXNlICd3aW5kb3dzLTg3NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtODc0J1xuICAgIGNhc2UgJ2NwMTI1MCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUwJzpcbiAgICBjYXNlICd4LWNwMTI1MCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MCdcbiAgICBjYXNlICdjcDEyNTEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MSc6XG4gICAgY2FzZSAneC1jcDEyNTEnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTEnXG4gICAgY2FzZSAnYW5zaV94My40LTE5NjgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdjcDEyNTInOlxuICAgIGNhc2UgJ2NwODE5JzpcbiAgICBjYXNlICdjc2lzb2xhdGluMSc6XG4gICAgY2FzZSAnaWJtODE5JzpcbiAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICBjYXNlICdpc28taXItMTAwJzpcbiAgICBjYXNlICdpc284ODU5LTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgIGNhc2UgJ2wxJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUyJ1xuICAgIGNhc2UgJ2NwMTI1Myc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUzJzpcbiAgICBjYXNlICd4LWNwMTI1Myc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MydcbiAgICBjYXNlICdjcDEyNTQnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW41JzpcbiAgICBjYXNlICdpc28tODg1OS05JzpcbiAgICBjYXNlICdpc28taXItMTQ4JzpcbiAgICBjYXNlICdpc284ODU5LTknOlxuICAgIGNhc2UgJ2lzbzg4NTk5JzpcbiAgICBjYXNlICdpc29fODg1OS05JzpcbiAgICBjYXNlICdpc29fODg1OS05OjE5ODknOlxuICAgIGNhc2UgJ2w1JzpcbiAgICBjYXNlICdsYXRpbjUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NCc6XG4gICAgY2FzZSAneC1jcDEyNTQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTQnXG4gICAgY2FzZSAnY3AxMjU1JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTUnOlxuICAgIGNhc2UgJ3gtY3AxMjU1JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU1J1xuICAgIGNhc2UgJ2NwMTI1Nic6XG4gICAgY2FzZSAnd2luZG93cy0xMjU2JzpcbiAgICBjYXNlICd4LWNwMTI1Nic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NidcbiAgICBjYXNlICdjcDEyNTcnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nyc6XG4gICAgY2FzZSAneC1jcDEyNTcnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTcnXG4gICAgY2FzZSAnY3AxMjU4JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTgnOlxuICAgIGNhc2UgJ3gtY3AxMjU4JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU4J1xuICAgIGNhc2UgJ3gtbWFjLWN5cmlsbGljJzpcbiAgICBjYXNlICd4LW1hYy11a3JhaW5pYW4nOlxuICAgICAgcmV0dXJuICd4LW1hYy1jeXJpbGxpYydcbiAgICBjYXNlICdjaGluZXNlJzpcbiAgICBjYXNlICdjc2diMjMxMic6XG4gICAgY2FzZSAnY3Npc281OGdiMjMxMjgwJzpcbiAgICBjYXNlICdnYjIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTItODAnOlxuICAgIGNhc2UgJ2diayc6XG4gICAgY2FzZSAnaXNvLWlyLTU4JzpcbiAgICBjYXNlICd4LWdiayc6XG4gICAgICByZXR1cm4gJ0dCSydcbiAgICBjYXNlICdnYjE4MDMwJzpcbiAgICAgIHJldHVybiAnZ2IxODAzMCdcbiAgICBjYXNlICdiaWc1JzpcbiAgICBjYXNlICdiaWc1LWhrc2NzJzpcbiAgICBjYXNlICdjbi1iaWc1JzpcbiAgICBjYXNlICdjc2JpZzUnOlxuICAgIGNhc2UgJ3gteC1iaWc1JzpcbiAgICAgIHJldHVybiAnQmlnNSdcbiAgICBjYXNlICdjc2V1Y3BrZGZtdGphcGFuZXNlJzpcbiAgICBjYXNlICdldWMtanAnOlxuICAgIGNhc2UgJ3gtZXVjLWpwJzpcbiAgICAgIHJldHVybiAnRVVDLUpQJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmpwJzpcbiAgICBjYXNlICdpc28tMjAyMi1qcCc6XG4gICAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJ1xuICAgIGNhc2UgJ2Nzc2hpZnRqaXMnOlxuICAgIGNhc2UgJ21zOTMyJzpcbiAgICBjYXNlICdtc19rYW5qaSc6XG4gICAgY2FzZSAnc2hpZnQtamlzJzpcbiAgICBjYXNlICdzaGlmdF9qaXMnOlxuICAgIGNhc2UgJ3NqaXMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMzFqJzpcbiAgICBjYXNlICd4LXNqaXMnOlxuICAgICAgcmV0dXJuICdTaGlmdF9KSVMnXG4gICAgY2FzZSAnY3NldWNrcic6XG4gICAgY2FzZSAnY3Nrc2M1NjAxMTk4Nyc6XG4gICAgY2FzZSAnZXVjLWtyJzpcbiAgICBjYXNlICdpc28taXItMTQ5JzpcbiAgICBjYXNlICdrb3JlYW4nOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg3JzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4OSc6XG4gICAgY2FzZSAna3NjNTYwMSc6XG4gICAgY2FzZSAna3NjXzU2MDEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtOTQ5JzpcbiAgICAgIHJldHVybiAnRVVDLUtSJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmtyJzpcbiAgICBjYXNlICdoei1nYi0yMzEyJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24tZXh0JzpcbiAgICBjYXNlICdpc28tMjAyMi1rcic6XG4gICAgY2FzZSAncmVwbGFjZW1lbnQnOlxuICAgICAgcmV0dXJuICdyZXBsYWNlbWVudCdcbiAgICBjYXNlICd1bmljb2RlZmZmZSc6XG4gICAgY2FzZSAndXRmLTE2YmUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgICBjYXNlICdjc3VuaWNvZGUnOlxuICAgIGNhc2UgJ2lzby0xMDY0Ni11Y3MtMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3VuaWNvZGUnOlxuICAgIGNhc2UgJ3VuaWNvZGVmZWZmJzpcbiAgICBjYXNlICd1dGYtMTYnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2TEUnXG4gICAgY2FzZSAneC11c2VyLWRlZmluZWQnOlxuICAgICAgcmV0dXJuICd4LXVzZXItZGVmaW5lZCdcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEVuY29kaW5nXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlLCBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCB7IGJ0b2EgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnLigJlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmcuKAmXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnLigJlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnLigJlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2LigJlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnLigJlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmcuKAmXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnLigJlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnLigJlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmcuKAmXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZeKAmXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ+KAmXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcicgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzVGV4dCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nKVxuICAgIH1cblxuICAgIC8vIFRoZSByZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBUZXh0IGFuZCBlbmNvZGluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdUZXh0JywgZW5jb2RpbmcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0RhdGFVUkxcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0RhdGFVUkwgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0RhdGFVUkwoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsIG11c3RcbiAgICAvLyBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggRGF0YVVSTC5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdEYXRhVVJMJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tYWJvcnRcbiAgICovXG4gIGFib3J0ICgpIHtcbiAgICAvLyAxLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJlbXB0eVwiIG9yIGlmIHRoaXMncyBzdGF0ZSBpc1xuICAgIC8vICAgIFwiZG9uZVwiIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwgYW5kIHRlcm1pbmF0ZVxuICAgIC8vICAgIHRoaXMgYWxnb3JpdGhtLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdlbXB0eScgfHwgdGhpc1trU3RhdGVdID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJsb2FkaW5nXCIgc2V0IHRoaXMncyBzdGF0ZSB0b1xuICAgIC8vICAgIFwiZG9uZVwiIGFuZCBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgICAgdGhpc1trU3RhdGVdID0gJ2RvbmUnXG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBhbnkgdGFza3MgZnJvbSB0aGlzIG9uIHRoZSBmaWxlIHJlYWRpbmdcbiAgICAvLyAgICB0YXNrIHNvdXJjZSBpbiBhbiBhZmZpbGlhdGVkIHRhc2sgcXVldWUsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgdGhvc2UgdGFza3MgZnJvbSB0aGF0IHRhc2sgcXVldWUuXG4gICAgdGhpc1trQWJvcnRlZF0gPSB0cnVlXG5cbiAgICAvLyA0LiBUZXJtaW5hdGUgdGhlIGFsZ29yaXRobSBmb3IgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAvLyBUT0RPXG5cbiAgICAvLyA1LiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoaXMuXG4gICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdhYm9ydCcsIHRoaXMpXG5cbiAgICAvLyA2LiBJZiB0aGlzJ3Mgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGlzLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgdGhpcylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVhZHlzdGF0ZVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBzd2l0Y2ggKHRoaXNba1N0YXRlXSkge1xuICAgICAgY2FzZSAnZW1wdHknOiByZXR1cm4gdGhpcy5FTVBUWVxuICAgICAgY2FzZSAnbG9hZGluZyc6IHJldHVybiB0aGlzLkxPQURJTkdcbiAgICAgIGNhc2UgJ2RvbmUnOiByZXR1cm4gdGhpcy5ET05FXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlc3VsdFxuICAgKi9cbiAgZ2V0IHJlc3VsdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSByZXN1bHQgYXR0cmlidXRl4oCZcyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgcmVzdWx0LlxuICAgIHJldHVybiB0aGlzW2tSZXN1bHRdXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZXJyb3JcbiAgICovXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSBlcnJvciBhdHRyaWJ1dGXigJlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyBlcnJvci5cbiAgICByZXR1cm4gdGhpc1trRXJyb3JdXG4gIH1cblxuICBnZXQgb25sb2FkZW5kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZGVuZFxuICB9XG5cbiAgc2V0IG9ubG9hZGVuZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZGVuZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgdGhpc1trRXZlbnRzXS5sb2FkZW5kKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXNba0V2ZW50c10uZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZHN0YXJ0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0XG4gIH1cblxuICBzZXQgb25sb2Fkc3RhcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRzdGFydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCB0aGlzW2tFdmVudHNdLmxvYWRzdGFydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25wcm9ncmVzcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLnByb2dyZXNzXG4gIH1cblxuICBzZXQgb25wcm9ncmVzcyAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzW2tFdmVudHNdLnByb2dyZXNzKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkXG4gIH1cblxuICBzZXQgb25sb2FkIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzW2tFdmVudHNdLmxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uYWJvcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5hYm9ydFxuICB9XG5cbiAgc2V0IG9uYWJvcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmFib3J0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgdGhpc1trRXZlbnRzXS5hYm9ydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVtcHR5XG5GaWxlUmVhZGVyLkVNUFRZID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRU1QVFkgPSAwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItbG9hZGluZ1xuRmlsZVJlYWRlci5MT0FESU5HID0gRmlsZVJlYWRlci5wcm90b3R5cGUuTE9BRElORyA9IDFcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1kb25lXG5GaWxlUmVhZGVyLkRPTkUgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5ET05FID0gMlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLnByb3RvdHlwZSwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZEFzQXJyYXlCdWZmZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0JpbmFyeVN0cmluZzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzRGF0YVVSTDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlc3VsdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZHN0YXJ0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbnByb2dyZXNzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGVSZWFkZXInLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlciwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZpbGVSZWFkZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgaXNWYWxpZEhlYWRlck5hbWUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1lcXVhbHNcbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBleGNsdWRlRnJhZ21lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1cmxFcXVhbHMgKEEsIEIsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRBID0gVVJMU2VyaWFsaXplcihBLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgY29uc3Qgc2VyaWFsaXplZEIgPSBVUkxTZXJpYWxpemVyKEIsIGV4Y2x1ZGVGcmFnbWVudClcblxuICByZXR1cm4gc2VyaWFsaXplZEEgPT09IHNlcmlhbGl6ZWRCXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi82OTRkMjBkMTM0Y2I1NTNkOGQ4OWU1NTAwYjkxNDgwMTJiMWJhMjk5L2NvbnRlbnQvYnJvd3Nlci9jYWNoZV9zdG9yYWdlL2NhY2hlX3N0b3JhZ2VfY2FjaGUuY2MjTDI2MC1MMjYyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVmFsdWVzIChoZWFkZXIpIHtcbiAgYXNzZXJ0KGhlYWRlciAhPT0gbnVsbClcblxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIGZvciAobGV0IHZhbHVlIG9mIGhlYWRlci5zcGxpdCgnLCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVybEVxdWFscyxcbiAgZmllbGRWYWx1ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgdXJsRXF1YWxzLCBmaWVsZFZhbHVlczogZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgUmVzcG9uc2UsIGNsb25lUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3Jlc3BvbnNlJylcbmNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLWNhY2hlLWJhdGNoLW9wZXJhdGlvblxuICogQHR5cGVkZWYge09iamVjdH0gQ2FjaGVCYXRjaE9wZXJhdGlvblxuICogQHByb3BlcnR5IHsnZGVsZXRlJyB8ICdwdXQnfSB0eXBlXG4gKiBAcHJvcGVydHkge2FueX0gcmVxdWVzdFxuICogQHByb3BlcnR5IHthbnl9IHJlc3BvbnNlXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICogQHR5cGVkZWYge1thbnksIGFueV1bXX0gcmVxdWVzdFJlc3BvbnNlTGlzdFxuICovXG5cbmNsYXNzIENhY2hlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAgICogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGFyZ3VtZW50c1sxXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hBbGwocmVxdWVzdCwgb3B0aW9ucylcblxuICAgIGlmIChwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIHBbMF1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoQWxsIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAyLjIuMVxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVzcG9uc2VzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICAvLyBXZSBkb24ndCBpbXBsZW1lbnQgQ09ScyBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGUgcmVzcG9uc2VzLCB5YXkhXG5cbiAgICAvLyA1LjUuMVxuICAgIGNvbnN0IHJlc3BvbnNlTGlzdCA9IFtdXG5cbiAgICAvLyA1LjUuMlxuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA1LjUuMi4xXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5Py5zb3VyY2UgPz8gbnVsbClcbiAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5ID0gYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuXG4gICAgICByZXNwb25zZUxpc3QucHVzaChyZXNwb25zZU9iamVjdClcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHJlc3BvbnNlTGlzdClcbiAgfVxuXG4gIGFzeW5jIGFkZCAocmVxdWVzdCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbcmVxdWVzdF1cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVzcG9uc2VBcnJheVByb21pc2UgPSB0aGlzLmFkZEFsbChyZXF1ZXN0cylcblxuICAgIC8vIDMuXG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlQXJyYXlQcm9taXNlXG4gIH1cblxuICBhc3luYyBhZGRBbGwgKHJlcXVlc3RzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcgfSlcblxuICAgIHJlcXVlc3RzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddKHJlcXVlc3RzKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXNwb25zZVByb21pc2VzID0gW11cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgLy8gMy5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMy4xXG4gICAgICBjb25zdCByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIC8vIDMuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkgfHwgci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUuJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjRcbiAgICAgIHIuaW5pdGlhdG9yID0gJ2ZldGNoJ1xuICAgICAgci5kZXN0aW5hdGlvbiA9ICdzdWJyZXNvdXJjZSdcblxuICAgICAgLy8gNS41XG4gICAgICByZXF1ZXN0TGlzdC5wdXNoKHIpXG5cbiAgICAgIC8vIDUuNlxuICAgICAgY29uc3QgcmVzcG9uc2VQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgICAgLy8gNS43XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnB1c2goZmV0Y2hpbmcoe1xuICAgICAgICByZXF1ZXN0OiByLFxuICAgICAgICBkaXNwYXRjaGVyOiBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2IHx8IHJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPiAyOTkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVjZWl2ZWQgYW4gaW52YWxpZCBzdGF0dXMgY29kZSBvciB0aGUgcmVxdWVzdCBmYWlsZWQuJ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7IC8vIDIuXG4gICAgICAgICAgICAvLyAyLjFcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgICAgICAgIC8vIDIuMlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIC8vIDIuMi4xXG4gICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGZldGNoQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuXG4gICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICAvLyA1LjhcbiAgICAgIHJlc3BvbnNlUHJvbWlzZXMucHVzaChyZXNwb25zZVByb21pc2UucHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIGNvbnN0IHAgPSBQcm9taXNlLmFsbChyZXNwb25zZVByb21pc2VzKVxuXG4gICAgLy8gNy5cbiAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBwXG5cbiAgICAvLyA3LjFcbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDcuMlxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIC8vIDcuM1xuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA3LjMuMVxuICAgICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgICB0eXBlOiAncHV0JywgLy8gNy4zLjJcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdExpc3RbaW5kZXhdLCAvLyA3LjMuM1xuICAgICAgICByZXNwb25zZSAvLyA3LjMuNFxuICAgICAgfVxuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKSAvLyA3LjMuNVxuXG4gICAgICBpbmRleCsrIC8vIDcuMy42XG4gICAgfVxuXG4gICAgLy8gNy41XG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDcuNi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDcuNi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDcuNi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNy42LjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA3LjYuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA3LjdcbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIHB1dCAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnQ2FjaGUucHV0JyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgcmVzcG9uc2UgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZShyZXNwb25zZSlcblxuICAgIC8vIDEuXG4gICAgbGV0IGlubmVyUmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpbm5lclJlcXVlc3QgPSByZXF1ZXN0W2tTdGF0ZV1cbiAgICB9IGVsc2UgeyAvLyAzLlxuICAgICAgaW5uZXJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShpbm5lclJlcXVlc3QudXJsKSB8fCBpbm5lclJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgYW4gaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VUJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIGNvbnN0IGlubmVyUmVzcG9uc2UgPSByZXNwb25zZVtrU3RhdGVdXG5cbiAgICAvLyA2LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdHb3QgKiB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgJiYgKGlzRGlzdHVyYmVkKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pIHx8IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0ubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzcG9uc2UgYm9keSBpcyBsb2NrZWQgb3IgZGlzdHVyYmVkJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA5LlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZShpbm5lclJlc3BvbnNlKVxuXG4gICAgLy8gMTAuXG4gICAgY29uc3QgYm9keVJlYWRQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDExLlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMTEuMVxuICAgICAgY29uc3Qgc3RyZWFtID0gaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbVxuXG4gICAgICAvLyAxMS4yXG4gICAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAgICAgLy8gMTEuM1xuICAgICAgcmVhZEFsbEJ5dGVzKHJlYWRlcikudGhlbihib2R5UmVhZFByb21pc2UucmVzb2x2ZSwgYm9keVJlYWRQcm9taXNlLnJlamVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keVJlYWRQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8vIDEyLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gMTMuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdwdXQnLCAvLyAxNC5cbiAgICAgIHJlcXVlc3Q6IGlubmVyUmVxdWVzdCwgLy8gMTUuXG4gICAgICByZXNwb25zZTogY2xvbmVkUmVzcG9uc2UgLy8gMTYuXG4gICAgfVxuXG4gICAgLy8gMTcuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIC8vIDE5LlxuICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgYm9keVJlYWRQcm9taXNlLnByb21pc2VcblxuICAgIGlmIChjbG9uZWRSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIGNsb25lZFJlc3BvbnNlLmJvZHkuc291cmNlID0gYnl0ZXNcbiAgICB9XG5cbiAgICAvLyAxOS4xXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDE5LjIuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyAxOS4yLjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gMTkuMi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gMTkuMi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfSBlbHNlIHsgLy8gMTkuMi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuZGVsZXRlJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3JlYWRvbmx5IFJlcXVlc3RbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAyLjFcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHsgLy8gMi4yXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICAvLyA1LjIuMS4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIC8vIDUuMy4yLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNS40LjFcbiAgICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgICAgLy8gNS40LjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoJ2h0dHBzOi8vYScpXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHJlcXVlc3QuY2xpZW50XG5cbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1hdGNoQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHV0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbmNvbnN0IGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzID0gW1xuICB7XG4gICAga2V5OiAnaWdub3JlU2VhcmNoJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlTWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlVmFyeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzKVxuXG53ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5jYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyxcbiAge1xuICAgIGtleTogJ2NhY2hlTmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFJlc3BvbnNlKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgaWYgKG9wdGlvbnMuY2FjaGVOYW1lICE9IG51bGwpIHtcbiAgICAgIC8vIDEuMS4xLjFcbiAgICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKG9wdGlvbnMuY2FjaGVOYW1lKSkge1xuICAgICAgICAvLyAxLjEuMS4xLjFcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gdGhpcy4jY2FjaGVzLmdldChvcHRpb25zLmNhY2hlTmFtZSlcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDIuXG4gICAgICAvLyAyLjJcbiAgICAgIGZvciAoY29uc3QgY2FjaGVMaXN0IG9mIHRoaXMuI2NhY2hlcy52YWx1ZXMoKSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgLy8gMi4yLjEuMlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWhhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5oYXMnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2Uub3BlbicgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5kZWxldGUnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5kZWxldGUoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2Uta2V5c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBhc3luYyBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICAvLyAyLjFcbiAgICBjb25zdCBrZXlzID0gdGhpcy4jY2FjaGVzLmtleXMoKVxuXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIFsuLi5rZXlzXVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlU3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlU3RvcmFnZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlU3RvcmFnZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gMHgwMCB8fCBjb2RlIDw9IDB4MDgpIHx8XG4gICAgICAoY29kZSA+PSAweDBBIHx8IGNvZGUgPD0gMHgxRikgfHxcbiAgICAgIGNvZGUgPT09IDB4N0ZcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBDSEFSICAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY2hhcmFjdGVyIChvY3RldHMgMCAtIDEyNyk+XG4gdG9rZW4gICAgICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTmFtZSAobmFtZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbmFtZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlIDw9IDB4MjAgfHwgY29kZSA+IDB4N0YpIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfSdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbmFtZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIGNvb2tpZS12YWx1ZSAgICAgID0gKmNvb2tpZS1vY3RldCAvICggRFFVT1RFICpjb29raWUtb2N0ZXQgRFFVT1RFIClcbiBjb29raWUtb2N0ZXQgICAgICA9ICV4MjEgLyAleDIzLTJCIC8gJXgyRC0zQSAvICV4M0MtNUIgLyAleDVELTdFXG4gICAgICAgICAgICAgICAgICAgICAgIDsgVVMtQVNDSUkgY2hhcmFjdGVycyBleGNsdWRpbmcgQ1RMcyxcbiAgICAgICAgICAgICAgICAgICAgICAgOyB3aGl0ZXNwYWNlIERRVU9URSwgY29tbWEsIHNlbWljb2xvbixcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgYmFja3NsYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVWYWx1ZSAodmFsdWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA9PT0gMHgyMiB8fFxuICAgICAgY29kZSA9PT0gMHgyQyB8fFxuICAgICAgY29kZSA9PT0gMHgzQiB8fFxuICAgICAgY29kZSA9PT0gMHg1QyB8fFxuICAgICAgY29kZSA+IDB4N0UgLy8gbm9uLWFzY2lpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgcGF0aCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChjb2RlIDwgMHgyMSB8fCBjaGFyID09PSAnOycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoZXNlIHZhbHVlcyBhcmVuJ3QgYWxsb3dlZCB0byBiZSBob25lc3QsXG4gKiBidXQgRGVubyB0ZXN0cyB0aGVzZS4gLSBLaGFmcmFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVEb21haW4gKGRvbWFpbikge1xuICBpZiAoXG4gICAgZG9tYWluLnN0YXJ0c1dpdGgoJy0nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLicpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCctJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTcuMS4xLjFcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGRhdGVcbiAgSU1GLWZpeGRhdGUgID0gZGF5LW5hbWUgXCIsXCIgU1AgZGF0ZTEgU1AgdGltZS1vZi1kYXkgU1AgR01UXG4gIDsgZml4ZWQgbGVuZ3RoL3pvbmUvY2FwaXRhbGl6YXRpb24gc3Vic2V0IG9mIHRoZSBmb3JtYXRcbiAgOyBzZWUgU2VjdGlvbiAzLjMgb2YgW1JGQzUzMjJdXG5cbiAgZGF5LW5hbWUgICAgID0gJXg0RC42Ri42RSA7IFwiTW9uXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC43NS42NSA7IFwiVHVlXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1Ny42NS42NCA7IFwiV2VkXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC42OC43NSA7IFwiVGh1XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni43Mi42OSA7IFwiRnJpXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42MS43NCA7IFwiU2F0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My43NS42RSA7IFwiU3VuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIGRhdGUxICAgICAgICA9IGRheSBTUCBtb250aCBTUCB5ZWFyXG4gICAgICAgICAgICAgICAgICA7IGUuZy4sIDAyIEp1biAxOTgyXG5cbiAgZGF5ICAgICAgICAgID0gMkRJR0lUXG4gIG1vbnRoICAgICAgICA9ICV4NEEuNjEuNkUgOyBcIkphblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNjUuNjIgOyBcIkZlYlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzIgOyBcIk1hclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzAuNzIgOyBcIkFwclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzkgOyBcIk1heVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkUgOyBcIkp1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkMgOyBcIkp1bFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzUuNjcgOyBcIkF1Z1wiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjUuNzAgOyBcIlNlcFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEYuNjMuNzQgOyBcIk9jdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEUuNkYuNzYgOyBcIk5vdlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDQuNjUuNjMgOyBcIkRlY1wiLCBjYXNlLXNlbnNpdGl2ZVxuICB5ZWFyICAgICAgICAgPSA0RElHSVRcblxuICBHTVQgICAgICAgICAgPSAleDQ3LjRELjU0IDsgXCJHTVRcIiwgY2FzZS1zZW5zaXRpdmVcblxuICB0aW1lLW9mLWRheSAgPSBob3VyIFwiOlwiIG1pbnV0ZSBcIjpcIiBzZWNvbmRcbiAgICAgICAgICAgICAgOyAwMDowMDowMCAtIDIzOjU5OjYwIChsZWFwIHNlY29uZClcblxuICBob3VyICAgICAgICAgPSAyRElHSVRcbiAgbWludXRlICAgICAgID0gMkRJR0lUXG4gIHNlY29uZCAgICAgICA9IDJESUdJVFxuICovXG5mdW5jdGlvbiB0b0lNRkRhdGUgKGRhdGUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuICB9XG5cbiAgY29uc3QgZGF5cyA9IFtcbiAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJyxcbiAgICAnVGh1JywgJ0ZyaScsICdTYXQnXG4gIF1cblxuICBjb25zdCBtb250aHMgPSBbXG4gICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgICAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXG4gIF1cblxuICBjb25zdCBkYXlOYW1lID0gZGF5c1tkYXRlLmdldFVUQ0RheSgpXVxuICBjb25zdCBkYXkgPSBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbW9udGggPSBtb250aHNbZGF0ZS5nZXRVVENNb250aCgpXVxuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gIGNvbnN0IGhvdXIgPSBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBzZWNvbmQgPSBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuICByZXR1cm4gYCR7ZGF5TmFtZX0sICR7ZGF5fSAke21vbnRofSAke3llYXJ9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfSBHTVRgXG59XG5cbi8qKlxuIG1heC1hZ2UtYXYgICAgICAgID0gXCJNYXgtQWdlPVwiIG5vbi16ZXJvLWRpZ2l0ICpESUdJVFxuICAgICAgICAgICAgICAgICAgICAgICA7IEluIHByYWN0aWNlLCBib3RoIGV4cGlyZXMtYXYgYW5kIG1heC1hZ2UtYXZcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhcmUgbGltaXRlZCB0byBkYXRlcyByZXByZXNlbnRhYmxlIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICA7IHVzZXIgYWdlbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4QWdlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTWF4QWdlIChtYXhBZ2UpIHtcbiAgaWYgKG1heEFnZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG1heC1hZ2UnKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjI2NSNzZWN0aW9uLTQuMS4xXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkNvb2tpZX0gY29va2llXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeSAoY29va2llKSB7XG4gIGlmIChjb29raWUubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFsaWRhdGVDb29raWVOYW1lKGNvb2tpZS5uYW1lKVxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGNvb2tpZS52YWx1ZSlcblxuICBjb25zdCBvdXQgPSBbYCR7Y29va2llLm5hbWV9PSR7Y29va2llLnZhbHVlfWBdXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4xXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMlxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19TZWN1cmUtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gICAgY29va2llLmRvbWFpbiA9IG51bGxcbiAgICBjb29raWUucGF0aCA9ICcvJ1xuICB9XG5cbiAgaWYgKGNvb2tpZS5zZWN1cmUpIHtcbiAgICBvdXQucHVzaCgnU2VjdXJlJylcbiAgfVxuXG4gIGlmIChjb29raWUuaHR0cE9ubHkpIHtcbiAgICBvdXQucHVzaCgnSHR0cE9ubHknKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb29raWUubWF4QWdlID09PSAnbnVtYmVyJykge1xuICAgIHZhbGlkYXRlQ29va2llTWF4QWdlKGNvb2tpZS5tYXhBZ2UpXG4gICAgb3V0LnB1c2goYE1heC1BZ2U9JHtjb29raWUubWF4QWdlfWApXG4gIH1cblxuICBpZiAoY29va2llLmRvbWFpbikge1xuICAgIHZhbGlkYXRlQ29va2llRG9tYWluKGNvb2tpZS5kb21haW4pXG4gICAgb3V0LnB1c2goYERvbWFpbj0ke2Nvb2tpZS5kb21haW59YClcbiAgfVxuXG4gIGlmIChjb29raWUucGF0aCkge1xuICAgIHZhbGlkYXRlQ29va2llUGF0aChjb29raWUucGF0aClcbiAgICBvdXQucHVzaChgUGF0aD0ke2Nvb2tpZS5wYXRofWApXG4gIH1cblxuICBpZiAoY29va2llLmV4cGlyZXMgJiYgY29va2llLmV4cGlyZXMudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICBvdXQucHVzaChgRXhwaXJlcz0ke3RvSU1GRGF0ZShjb29raWUuZXhwaXJlcyl9YClcbiAgfVxuXG4gIGlmIChjb29raWUuc2FtZVNpdGUpIHtcbiAgICBvdXQucHVzaChgU2FtZVNpdGU9JHtjb29raWUuc2FtZVNpdGV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBjb29raWUudW5wYXJzZWQpIHtcbiAgICBpZiAoIXBhcnQuaW5jbHVkZXMoJz0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVucGFyc2VkJylcbiAgICB9XG5cbiAgICBjb25zdCBba2V5LCAuLi52YWx1ZV0gPSBwYXJ0LnNwbGl0KCc9JylcblxuICAgIG91dC5wdXNoKGAke2tleS50cmltKCl9PSR7dmFsdWUuam9pbignPScpfWApXG4gIH1cblxuICByZXR1cm4gb3V0LmpvaW4oJzsgJylcbn1cblxubGV0IGtIZWFkZXJzTGlzdE5vZGVcblxuZnVuY3Rpb24gZ2V0SGVhZGVyc0xpc3QgKGhlYWRlcnMpIHtcbiAgaWYgKGhlYWRlcnNba0hlYWRlcnNMaXN0XSkge1xuICAgIHJldHVybiBoZWFkZXJzW2tIZWFkZXJzTGlzdF1cbiAgfVxuXG4gIGlmICgha0hlYWRlcnNMaXN0Tm9kZSkge1xuICAgIGtIZWFkZXJzTGlzdE5vZGUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGhlYWRlcnMpLmZpbmQoXG4gICAgICAoc3ltYm9sKSA9PiBzeW1ib2wuZGVzY3JpcHRpb24gPT09ICdoZWFkZXJzIGxpc3QnXG4gICAgKVxuXG4gICAgYXNzZXJ0KGtIZWFkZXJzTGlzdE5vZGUsICdIZWFkZXJzIGNhbm5vdCBiZSBwYXJzZWQnKVxuICB9XG5cbiAgY29uc3QgaGVhZGVyc0xpc3QgPSBoZWFkZXJzW2tIZWFkZXJzTGlzdE5vZGVdXG4gIGFzc2VydChoZWFkZXJzTGlzdClcblxuICByZXR1cm4gaGVhZGVyc0xpc3Rcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ1RMRXhjbHVkaW5nSHRhYixcbiAgc3RyaW5naWZ5LFxuICBnZXRIZWFkZXJzTGlzdFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhOYW1lVmFsdWVQYWlyU2l6ZSwgbWF4QXR0cmlidXRlVmFsdWVTaXplIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGlzQ1RMRXhjbHVkaW5nSHRhYiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIHRoZSBmaWVsZC12YWx1ZSBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXIgc3RyaW5nLlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKiBAcmV0dXJucyBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZFxuICovXG5mdW5jdGlvbiBwYXJzZVNldENvb2tpZSAoaGVhZGVyKSB7XG4gIC8vIDEuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4MDAtMDggLyAleDBBLTFGIC8gJXg3RlxuICAvLyAgICBjaGFyYWN0ZXIgKENUTCBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBIVEFCKTogQWJvcnQgdGhlc2Ugc3RlcHMgYW5kXG4gIC8vICAgIGlnbm9yZSB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChpc0NUTEV4Y2x1ZGluZ0h0YWIoaGVhZGVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgbmFtZVZhbHVlUGFpciA9ICcnXG4gIGxldCB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICBsZXQgbmFtZSA9ICcnXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMi4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGhlYWRlci5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sXG4gICAgLy8gICAgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIiksIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gICAgLy8gICAgKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgbmFtZVZhbHVlUGFpciA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KCc7JywgaGVhZGVyLCBwb3NpdGlvbilcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSBoZWFkZXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgY29udGFpbmVkIGluIHRoZSBzZXQtY29va2llLXN0cmluZywgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgbmFtZVZhbHVlUGFpciA9IGhlYWRlclxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgbGFja3MgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyLCB0aGVuXG4gIC8vICAgIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSwgYW5kIHRoZSB2YWx1ZSBzdHJpbmcgaXMgdGhlIHZhbHVlIG9mXG4gIC8vICAgIG5hbWUtdmFsdWUtcGFpci5cbiAgaWYgKCFuYW1lVmFsdWVQYWlyLmluY2x1ZGVzKCc9JykpIHtcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXJcbiAgfSBlbHNlIHtcbiAgICAvLyAgICBPdGhlcndpc2UsIHRoZSBuYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5XG4gICAgLy8gICAgZW1wdHkpIHZhbHVlIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3RcbiAgICAvLyAgICAleDNEIChcIj1cIikgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gICAgbmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgbmFtZVZhbHVlUGFpcixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH1cblxuICAvLyA0LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgbmFtZVxuICAvLyAgICBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmcuXG4gIG5hbWUgPSBuYW1lLnRyaW0oKVxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gIC8vIDUuIElmIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIG5hbWUgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nXG4gIC8vICAgIGlzIG1vcmUgdGhhbiA0MDk2IG9jdGV0cywgYWJvcnQgdGhlc2Ugc3RlcHMgYW5kIGlnbm9yZSB0aGUgc2V0LVxuICAvLyAgICBjb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAobmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGggPiBtYXhOYW1lVmFsdWVQYWlyU2l6ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyA2LiBUaGUgY29va2llLW5hbWUgaXMgdGhlIG5hbWUgc3RyaW5nLCBhbmQgdGhlIGNvb2tpZS12YWx1ZSBpcyB0aGVcbiAgLy8gICAgdmFsdWUgc3RyaW5nLlxuICByZXR1cm4ge1xuICAgIG5hbWUsIHZhbHVlLCAuLi5wYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXJcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IHVucGFyc2VkQXR0cmlidXRlc1xuICogQHBhcmFtIHtbT2JqZWN0LjxzdHJpbmcsIHVua25vd24+XT17fX0gY29va2llQXR0cmlidXRlTGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyAodW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0ID0ge30pIHtcbiAgLy8gMS4gSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mXG4gIC8vICAgIHRoZXNlIHN0ZXBzLlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb29raWVBdHRyaWJ1dGVMaXN0XG4gIH1cblxuICAvLyAyLiBEaXNjYXJkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgKHdoaWNoXG4gIC8vICAgIHdpbGwgYmUgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyKS5cbiAgYXNzZXJ0KHVucGFyc2VkQXR0cmlidXRlc1swXSA9PT0gJzsnKVxuICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoMSlcblxuICBsZXQgY29va2llQXYgPSAnJ1xuXG4gIC8vIDMuIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAvLyAgICBjaGFyYWN0ZXI6XG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgIGNvb2tpZUF2ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnOycsXG4gICAgICB1bnBhcnNlZEF0dHJpYnV0ZXMsXG4gICAgICB7IHBvc2l0aW9uOiAwIH1cbiAgICApXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKGNvb2tpZUF2Lmxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBDb25zdW1lIHRoZSByZW1haW5kZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMuXG4gICAgY29va2llQXYgPSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICB9XG5cbiAgLy8gTGV0IHRoZSBjb29raWUtYXYgc3RyaW5nIGJlIHRoZSBjaGFyYWN0ZXJzIGNvbnN1bWVkIGluIHRoaXMgc3RlcC5cblxuICBsZXQgYXR0cmlidXRlTmFtZSA9ICcnXG4gIGxldCBhdHRyaWJ1dGVWYWx1ZSA9ICcnXG5cbiAgLy8gNC4gSWYgdGhlIGNvb2tpZS1hdiBzdHJpbmcgY29udGFpbnMgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyOlxuICBpZiAoY29va2llQXYuaW5jbHVkZXMoJz0nKSkge1xuICAgIC8vIDEuIFRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGVcbiAgICAvLyAgICBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmdcbiAgICAvLyAgICBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBjb29raWVBdixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIGF0dHJpYnV0ZVZhbHVlID0gY29va2llQXYuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGVudGlyZSBjb29raWUtYXZcbiAgICAvLyAgICBzdHJpbmcsIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZyBpcyBlbXB0eS5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29va2llQXZcbiAgfVxuXG4gIC8vIDUuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBhdHRyaWJ1dGUtXG4gIC8vICAgIG5hbWUgc3RyaW5nIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZy5cbiAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudHJpbSgpXG4gIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG5cbiAgLy8gNi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBsb25nZXIgdGhhbiAxMDI0IG9jdGV0cywgaWdub3JlIHRoZVxuICAvLyAgICBjb29raWUtYXYgc3RyaW5nIGFuZCByZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID4gbWF4QXR0cmlidXRlVmFsdWVTaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgfVxuXG4gIC8vIDcuIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZVxuICAvLyAgICByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gIChOb3RpY2UgdGhhdFxuICAvLyAgICBhdHRyaWJ1dGVzIHdpdGggdW5yZWNvZ25pemVkIGF0dHJpYnV0ZS1uYW1lcyBhcmUgaWdub3JlZC4pXG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjFcbiAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgLy8gXCJFeHBpcmVzXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG4gIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZXhwaXJlcycpIHtcbiAgICAvLyAxLiBMZXQgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYXR0cmlidXRlLXZhbHVlXG4gICAgLy8gICAgYXMgY29va2llLWRhdGUgKHNlZSBTZWN0aW9uIDUuMS4xKS5cbiAgICBjb25zdCBleHBpcnlUaW1lID0gbmV3IERhdGUoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyAyLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGZhaWxlZCB0byBwYXJzZSBhcyBhIGNvb2tpZSBkYXRlLCBpZ25vcmVcbiAgICAvLyAgICB0aGUgY29va2llLWF2LlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5leHBpcmVzID0gZXhwaXJ5VGltZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdtYXgtYWdlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiTWF4LVxuICAgIC8vIEFnZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGFcbiAgICAvLyAgICBcIi1cIiBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGNvbnN0IGNoYXJDb2RlID0gYXR0cmlidXRlVmFsdWUuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpICYmIGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYSBub24tRElHSVRcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGlmICghL15cXGQrJC8udGVzdChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlbHRhLXNlY29uZHMgYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBOdW1iZXIoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyA0LiBMZXQgY29va2llLWFnZS1saW1pdCBiZSB0aGUgbWF4aW11bSBhZ2Ugb2YgdGhlIGNvb2tpZSAod2hpY2hcbiAgICAvLyAgICBTSE9VTEQgYmUgNDAwIGRheXMgb3IgbGVzcywgc2VlIFNlY3Rpb24gNC4xLjIuMikuXG5cbiAgICAvLyA1LiBTZXQgZGVsdGEtc2Vjb25kcyB0byB0aGUgc21hbGxlciBvZiBpdHMgcHJlc2VudCB2YWx1ZSBhbmQgY29va2llLVxuICAgIC8vICAgIGFnZS1saW1pdC5cbiAgICAvLyBkZWx0YVNlY29uZHMgPSBNYXRoLm1pbihkZWx0YVNlY29uZHMgKiAxMDAwLCBtYXhFeHBpcmVzTXMpXG5cbiAgICAvLyA2LiBJZiBkZWx0YS1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvICgwKSwgbGV0IGV4cGlyeS1cbiAgICAvLyAgICB0aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuICBPdGhlcndpc2UsIGxldFxuICAgIC8vICAgIHRoZSBleHBpcnktdGltZSBiZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHBsdXMgZGVsdGEtc2Vjb25kc1xuICAgIC8vICAgIHNlY29uZHMuXG4gICAgLy8gY29uc3QgZXhwaXJ5VGltZSA9IGRlbHRhU2Vjb25kcyA8PSAwID8gRGF0ZS5ub3coKSA6IERhdGUubm93KCkgKyBkZWx0YVNlY29uZHNcblxuICAgIC8vIDcuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgTWF4LUFnZSBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGV4cGlyeS10aW1lLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QubWF4QWdlID0gZGVsdGFTZWNvbmRzXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjNcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIkRvbWFpblwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBMZXQgY29va2llLWRvbWFpbiBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgIGxldCBjb29raWVEb21haW4gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gMi4gSWYgY29va2llLWRvbWFpbiBzdGFydHMgd2l0aCAleDJFIChcIi5cIiksIGxldCBjb29raWUtZG9tYWluIGJlXG4gICAgLy8gICAgY29va2llLWRvbWFpbiB3aXRob3V0IGl0cyBsZWFkaW5nICV4MkUgKFwiLlwiKS5cbiAgICBpZiAoY29va2llRG9tYWluWzBdID09PSAnLicpIHtcbiAgICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi5zbGljZSgxKVxuICAgIH1cblxuICAgIC8vIDMuIENvbnZlcnQgdGhlIGNvb2tpZS1kb21haW4gdG8gbG93ZXIgY2FzZS5cbiAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNC4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBEb21haW4gYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtZG9tYWluLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZG9tYWluID0gY29va2llRG9tYWluXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3BhdGgnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC40XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJQYXRoXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAvLyAgICBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICBsZXQgY29va2llUGF0aCA9ICcnXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA9PT0gMCB8fCBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy8nKSB7XG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgIGNvb2tpZVBhdGggPSAnLydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICAgIGNvb2tpZVBhdGggPSBhdHRyaWJ1dGVWYWx1ZVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgUGF0aCBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QucGF0aCA9IGNvb2tpZVBhdGhcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2VjdXJlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNVxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3RcbiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zZWN1cmUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2h0dHBvbmx5Jykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJIdHRwT25seVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1cbiAgICAvLyBhdHRyaWJ1dGUtbGlzdCB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIEh0dHBPbmx5IGFuZCBhbiBlbXB0eVxuICAgIC8vIGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuaHR0cE9ubHkgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NhbWVzaXRlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuN1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJTYW1lU2l0ZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzOlxuXG4gICAgLy8gMS4gTGV0IGVuZm9yY2VtZW50IGJlIFwiRGVmYXVsdFwiLlxuICAgIGxldCBlbmZvcmNlbWVudCA9ICdEZWZhdWx0J1xuXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIk5vbmVcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTm9uZVwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdOb25lJ1xuICAgIH1cblxuICAgIC8vIDMuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJTdHJpY3RcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiU3RyaWN0XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdzdHJpY3QnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnU3RyaWN0J1xuICAgIH1cblxuICAgIC8vIDQuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJMYXhcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTGF4XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdsYXgnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTGF4J1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2ZcbiAgICAvLyAgICBlbmZvcmNlbWVudC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gZW5mb3JjZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkID8/PSBbXVxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZC5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7YXR0cmlidXRlVmFsdWV9YClcbiAgfVxuXG4gIC8vIDguIFJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNldENvb2tpZSxcbiAgcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnksIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnZGVsZXRlQ29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSlcbiAgYXR0cmlidXRlcyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlcylcblxuICAvLyBNYXRjaGVzIGJlaGF2aW9yIG9mXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vX3N0ZC9ibG9iLzYzODI3YjE2MzMwYjgyNDg5YTA0NjE0MDI3YzMzYjc5MDRlMDhiZTUvaHR0cC9jb29raWUudHMjTDI3OFxuICBzZXRDb29raWUoaGVhZGVycywge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6ICcnLFxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKDApLFxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtDb29raWVbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0U2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWVzID0gZ2V0SGVhZGVyc0xpc3QoaGVhZGVycykuY29va2llc1xuXG4gIGlmICghY29va2llcykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgLy8gSW4gb2xkZXIgdmVyc2lvbnMgb2YgdW5kaWNpLCBjb29raWVzIGlzIGEgbGlzdCBvZiBuYW1lOnZhbHVlLlxuICByZXR1cm4gY29va2llcy5tYXAoKHBhaXIpID0+IHBhcnNlU2V0Q29va2llKEFycmF5LmlzQXJyYXkocGFpcikgPyBwYWlyWzFdIDogcGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ3NldENvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyaW5naWZ5KGNvb2tpZSkpXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZSA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ25hbWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICd2YWx1ZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKVxuICAgIH0pLFxuICAgIGtleTogJ2V4cGlyZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddKSxcbiAgICBrZXk6ICdtYXhBZ2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ3NlY3VyZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdodHRwT25seScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBrZXk6ICdzYW1lU2l0ZScsXG4gICAgYWxsb3dlZFZhbHVlczogWydTdHJpY3QnLCAnTGF4JywgJ05vbmUnXVxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICd1bnBhcnNlZCcsXG4gICAgZGVmYXVsdFZhbHVlOiBbXVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRoaXMgaXMgYSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllciB1bmlxdWUgdXNlZFxuLy8gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZW5kcG9pbnQgYWNjZXB0cyB3ZWJzb2NrZXRcbi8vIGNvbm5lY3Rpb25zLlxuLy8gU2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi0xLjNcbmNvbnN0IHVpZCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEnXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgQ09OTkVDVElORzogMCxcbiAgT1BFTjogMSxcbiAgQ0xPU0lORzogMixcbiAgQ0xPU0VEOiAzXG59XG5cbmNvbnN0IG9wY29kZXMgPSB7XG4gIENPTlRJTlVBVElPTjogMHgwLFxuICBURVhUOiAweDEsXG4gIEJJTkFSWTogMHgyLFxuICBDTE9TRTogMHg4LFxuICBQSU5HOiAweDksXG4gIFBPTkc6IDB4QVxufVxuXG5jb25zdCBtYXhVbnNpZ25lZDE2Qml0ID0gMiAqKiAxNiAtIDEgLy8gNjU1MzVcblxuY29uc3QgcGFyc2VyU3RhdGVzID0ge1xuICBJTkZPOiAwLFxuICBQQVlMT0FETEVOR1RIXzE2OiAyLFxuICBQQVlMT0FETEVOR1RIXzY0OiAzLFxuICBSRUFEX0RBVEE6IDRcbn1cblxuY29uc3QgZW1wdHlCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVpZCxcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgc3RhdGVzLFxuICBvcGNvZGVzLFxuICBtYXhVbnNpZ25lZDE2Qml0LFxuICBwYXJzZXJTdGF0ZXMsXG4gIGVtcHR5QnVmZmVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBNZXNzYWdlUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50JyB9KVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtDb250cm9sbGVyLCBrUmVzcG9uc2UsIGtCaW5hcnlUeXBlLCBrV2ViU29ja2V0VVJMIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBzdGF0ZXMsIG9wY29kZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgTWVzc2FnZUV2ZW50LCBFcnJvckV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5cbi8qIGdsb2JhbHMgQmxvYiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNFc3RhYmxpc2hlZCAod3MpIHtcbiAgLy8gSWYgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBhcyBwcm92aWRlZCBmb3IgYWJvdmUsIGl0IGlzXG4gIC8vIHNhaWQgdGhhdCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIEVzdGFibGlzaGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgaW4gdGhlIE9QRU4gc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5PUEVOXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2VkICh3cykge1xuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0VEXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGVcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50Q29uc3RydWN0b3IgPSBFdmVudCwgZXZlbnRJbml0RGljdCkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW504oCZcyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IG5ldyBldmVudENvbnN0cnVjdG9yKGUsIGV2ZW50SW5pdERpY3QpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUoZGF0YSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgaW52YWxpZCBVVEYtOCBpbiB0ZXh0IGZyYW1lLicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5CSU5BUlkpIHtcbiAgICBpZiAod3Nba0JpbmFyeVR5cGVdID09PSAnYmxvYicpIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImJsb2JcIlxuICAgICAgLy8gICAgICBhIG5ldyBCbG9iIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgICBvYmplY3QsIHRoYXQgcmVwcmVzZW50cyBkYXRhIGFzIGl0cyByYXcgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IEJsb2IoW2RhdGFdKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJhcnJheWJ1ZmZlclwiXG4gICAgICAvLyAgICAgIGEgbmV3IEFycmF5QnVmZmVyIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlXG4gICAgICAvLyAgICAgIFdlYlNvY2tldCBvYmplY3QsIHdob3NlIGNvbnRlbnRzIGFyZSBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVWludDhBcnJheShkYXRhKS5idWZmZXJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIG1lc3NhZ2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsIHVzaW5nIE1lc3NhZ2VFdmVudCxcbiAgLy8gICAgd2l0aCB0aGUgb3JpZ2luIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgV2ViU29ja2V0XG4gIC8vICAgIG9iamVjdOKAmXMgdXJsJ3Mgb3JpZ2luLCBhbmQgdGhlIGRhdGEgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGRhdGFGb3JFdmVudC5cbiAgZmlyZUV2ZW50KCdtZXNzYWdlJywgd3MsIE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHByb3RvY29sKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHxcbiAgICAgIGNvZGUgPiAweDdFIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfScgfHxcbiAgICAgIGNvZGUgPT09IDMyIHx8IC8vIFNQXG4gICAgICBjb2RlID09PSA5IC8vIEhUXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy00XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3RhdHVzQ29kZSAoY29kZSkge1xuICBpZiAoY29kZSA+PSAxMDAwICYmIGNvZGUgPCAxMDE1KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvZGUgIT09IDEwMDQgJiYgLy8gcmVzZXJ2ZWRcbiAgICAgIGNvZGUgIT09IDEwMDUgJiYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgICBjb2RlICE9PSAxMDA2IC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb2RlID49IDMwMDAgJiYgY29kZSA8PSA0OTk5XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAqL1xuZnVuY3Rpb24gZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gKHdzLCByZWFzb24pIHtcbiAgY29uc3QgeyBba0NvbnRyb2xsZXJdOiBjb250cm9sbGVyLCBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgY29udHJvbGxlci5hYm9ydCgpXG5cbiAgaWYgKHJlc3BvbnNlPy5zb2NrZXQgJiYgIXJlc3BvbnNlLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICByZXNwb25zZS5zb2NrZXQuZGVzdHJveSgpXG4gIH1cblxuICBpZiAocmVhc29uKSB7XG4gICAgZmlyZUV2ZW50KCdlcnJvcicsIHdzLCBFcnJvckV2ZW50LCB7XG4gICAgICBlcnJvcjogbmV3IEVycm9yKHJlYXNvbilcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0VzdGFibGlzaGVkLFxuICBpc0Nsb3NpbmcsXG4gIGlzQ2xvc2VkLFxuICBmaXJlRXZlbnQsXG4gIGlzVmFsaWRTdWJwcm90b2NvbCxcbiAgaXNWYWxpZFN0YXR1c0NvZGUsXG4gIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLFxuICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyB1aWQsIHN0YXRlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrUmVhZHlTdGF0ZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXIsXG4gIGtSZWNlaXZlZENsb3NlXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgZmlyZUV2ZW50LCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLm9wZW4gPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJylcbmNoYW5uZWxzLmNsb3NlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKVxuY2hhbm5lbHMuc29ja2V0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtd2Vic29ja2V0LWVzdGFibGlzaFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHsocmVzcG9uc2U6IGFueSkgPT4gdm9pZH0gb25Fc3RhYmxpc2hcbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYnNvY2tldCcpLldlYlNvY2tldEluaXQ+fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gKHVybCwgcHJvdG9jb2xzLCB3cywgb25Fc3RhYmxpc2gsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3RVUkwgYmUgYSBjb3B5IG9mIHVybCwgd2l0aCBpdHMgc2NoZW1lIHNldCB0byBcImh0dHBcIiwgaWYgdXJs4oCZc1xuICAvLyAgICBzY2hlbWUgaXMgXCJ3c1wiLCBhbmQgdG8gXCJodHRwc1wiIG90aGVyd2lzZS5cbiAgY29uc3QgcmVxdWVzdFVSTCA9IHVybFxuXG4gIHJlcXVlc3RVUkwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09ICd3czonID8gJ2h0dHA6JyA6ICdodHRwczonXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgYSBuZXcgcmVxdWVzdCwgd2hvc2UgVVJMIGlzIHJlcXVlc3RVUkwsIGNsaWVudCBpcyBjbGllbnQsXG4gIC8vICAgIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwibm9uZVwiLCByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIG1vZGUgaXNcbiAgLy8gICAgXCJ3ZWJzb2NrZXRcIiwgY3JlZGVudGlhbHMgbW9kZSBpcyBcImluY2x1ZGVcIiwgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgLFxuICAvLyAgICBhbmQgcmVkaXJlY3QgbW9kZSBpcyBcImVycm9yXCIuXG4gIGNvbnN0IHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgdXJsTGlzdDogW3JlcXVlc3RVUkxdLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnbm9uZScsXG4gICAgcmVmZXJyZXI6ICduby1yZWZlcnJlcicsXG4gICAgbW9kZTogJ3dlYnNvY2tldCcsXG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICByZWRpcmVjdDogJ2Vycm9yJ1xuICB9KVxuXG4gIC8vIE5vdGU6IHVuZGljaSBleHRlbnNpb24sIGFsbG93IHNldHRpbmcgY3VzdG9tIGhlYWRlcnMuXG4gIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylba0hlYWRlcnNMaXN0XVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdCA9IGhlYWRlcnNMaXN0XG4gIH1cblxuICAvLyAzLiBBcHBlbmQgKGBVcGdyYWRlYCwgYHdlYnNvY2tldGApIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyA0LiBBcHBlbmQgKGBDb25uZWN0aW9uYCwgYFVwZ3JhZGVgKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgLy8gTm90ZTogYm90aCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBieSB1bmRpY2kgY3VycmVudGx5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iLzY4YzI2OWM0MTQ0YzQ0NmYzZjEyMjA5NTEzMzhkYWVmNGE2YjVlYzQvbGliL2NsaWVudC5qcyNMMTM5N1xuXG4gIC8vIDUuIExldCBrZXlWYWx1ZSBiZSBhIG5vbmNlIGNvbnNpc3Rpbmcgb2YgYSByYW5kb21seSBzZWxlY3RlZFxuICAvLyAgICAxNi1ieXRlIHZhbHVlIHRoYXQgaGFzIGJlZW4gZm9yZ2l2aW5nLWJhc2U2NC1lbmNvZGVkIGFuZFxuICAvLyAgICBpc29tb3JwaGljIGVuY29kZWQuXG4gIGNvbnN0IGtleVZhbHVlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0JylcblxuICAvLyA2LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUtleWAsIGtleVZhbHVlKSB0byByZXF1ZXN04oCZc1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQta2V5Jywga2V5VmFsdWUpXG5cbiAgLy8gNy4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1WZXJzaW9uYCwgYDEzYCkgdG8gcmVxdWVzdOKAmXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXZlcnNpb24nLCAnMTMnKVxuXG4gIC8vIDguIEZvciBlYWNoIHByb3RvY29sIGluIHByb3RvY29scywgY29tYmluZVxuICAvLyAgICAoYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgLCBwcm90b2NvbCkgaW4gcmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnLCBwcm90b2NvbClcbiAgfVxuXG4gIC8vIDkuIExldCBwZXJtZXNzYWdlRGVmbGF0ZSBiZSBhIHVzZXItYWdlbnQgZGVmaW5lZFxuICAvLyAgICBcInBlcm1lc3NhZ2UtZGVmbGF0ZVwiIGV4dGVuc2lvbiBoZWFkZXIgdmFsdWUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iL2NlNzgyMzRmNWU2NTNhNWQzOTE2ODEzZmY5OTBmMDUzNTEwMjI3YmMvbmV0d2Vyay9wcm90b2NvbC93ZWJzb2NrZXQvV2ViU29ja2V0Q2hhbm5lbC5jcHAjTDI2NzNcbiAgLy8gVE9ETzogZW5hYmxlIG9uY2UgcGVybWVzc2FnZS1kZWZsYXRlIGlzIHN1cHBvcnRlZFxuICBjb25zdCBwZXJtZXNzYWdlRGVmbGF0ZSA9ICcnIC8vICdwZXJtZXNzYWdlLWRlZmxhdGU7IDE1J1xuXG4gIC8vIDEwLiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnNgLCBwZXJtZXNzYWdlRGVmbGF0ZSkgdG9cbiAgLy8gICAgIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJywgcGVybWVzc2FnZURlZmxhdGUpXG5cbiAgLy8gMTEuIEZldGNoIHJlcXVlc3Qgd2l0aCB1c2VQYXJhbGxlbFF1ZXVlIHNldCB0byB0cnVlLCBhbmRcbiAgLy8gICAgIHByb2Nlc3NSZXNwb25zZSBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdGVwczpcbiAgY29uc3QgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHVzZVBhcmFsbGVsUXVldWU6IHRydWUsXG4gICAgZGlzcGF0Y2hlcjogb3B0aW9ucy5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2XigJlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcblxuICAgICAgaWYgKHNlY0V4dGVuc2lvbiAhPT0gbnVsbCAmJiBzZWNFeHRlbnNpb24gIT09IHBlcm1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgZGlmZmVyZW50IHBlcm1lc3NhZ2UtZGVmbGF0ZSB0aGFuIHRoZSBvbmUgc2V0LicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsICYmIHNlY1Byb3RvY29sICE9PSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUHJvdG9jb2wgd2FzIG5vdCBzZXQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXREYXRhIChjaHVuaykge1xuICBpZiAoIXRoaXMud3Nba0J5dGVQYXJzZXJdLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNFxuICovXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIC8vIElmIHRoZSBUQ1AgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGFmdGVyIHRoZVxuICAvLyBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gIC8vIGlzIHNhaWQgdG8gaGF2ZSBiZWVuIGNsb3NlZCBfY2xlYW5seV8uXG4gIGNvbnN0IHdhc0NsZWFuID0gd3Nba1NlbnRDbG9zZV0gJiYgd3Nba1JlY2VpdmVkQ2xvc2VdXG5cbiAgbGV0IGNvZGUgPSAxMDA1XG4gIGxldCByZWFzb24gPSAnJ1xuXG4gIGNvbnN0IHJlc3VsdCA9IHdzW2tCeXRlUGFyc2VyXS5jbG9zaW5nSW5mb1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1NlbnRDbG9zZV0pIHtcbiAgICAvLyBJZiBfVGhlIFdlYlNvY2tldFxuICAgIC8vIENvbm5lY3Rpb24gaXMgQ2xvc2VkXyBhbmQgbm8gQ2xvc2UgY29udHJvbCBmcmFtZSB3YXMgcmVjZWl2ZWQgYnkgdGhlXG4gICAgLy8gZW5kcG9pbnQgKHN1Y2ggYXMgY291bGQgb2NjdXIgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25cbiAgICAvLyBpcyBsb3N0KSwgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpcyBjb25zaWRlcmVkIHRvIGJlXG4gICAgLy8gMTAwNi5cbiAgICBjb2RlID0gMTAwNlxuICB9XG5cbiAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBDTE9TRUQgKDMpLlxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0VEXG5cbiAgLy8gMi4gSWYgdGhlIHVzZXIgYWdlbnQgd2FzIHJlcXVpcmVkIHRvIGZhaWwgdGhlIFdlYlNvY2tldFxuICAvLyAgICBjb25uZWN0aW9uLCBvciBpZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzIGNsb3NlZFxuICAvLyAgICBhZnRlciBiZWluZyBmbGFnZ2VkIGFzIGZ1bGwsIGZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3JcbiAgLy8gICAgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gIC8vIFRPRE9cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGNsb3NlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LFxuICAvLyAgICB1c2luZyBDbG9zZUV2ZW50LCB3aXRoIHRoZSB3YXNDbGVhbiBhdHRyaWJ1dGVcbiAgLy8gICAgaW5pdGlhbGl6ZWQgdG8gdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgY2xlYW5seVxuICAvLyAgICBhbmQgZmFsc2Ugb3RoZXJ3aXNlLCB0aGUgY29kZSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG9cbiAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlIGNvZGUsIGFuZCB0aGUgcmVhc29uXG4gIC8vICAgIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFVURi04XG4gIC8vICAgIGRlY29kZSB3aXRob3V0IEJPTSB0byB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VcbiAgLy8gICAgcmVhc29uLlxuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsIENsb3NlRXZlbnQsIHtcbiAgICB3YXNDbGVhbiwgY29kZSwgcmVhc29uXG4gIH0pXG5cbiAgaWYgKGNoYW5uZWxzLmNsb3NlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuY2xvc2UucHVibGlzaCh7XG4gICAgICB3ZWJzb2NrZXQ6IHdzLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyb3IpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG5cbiAgaWYgKGNoYW5uZWxzLnNvY2tldEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc29ja2V0RXJyb3IucHVibGlzaChlcnJvcilcbiAgfVxuXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heFVuc2lnbmVkMTZCaXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gICAgdGhpcy5tYXNrS2V5ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgYm9keUxlbmd0aCA9IHRoaXMuZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gdGhpcy5tYXNrS2V5WzBdXG4gICAgYnVmZmVyW29mZnNldCAtIDNdID0gdGhpcy5tYXNrS2V5WzFdXG4gICAgYnVmZmVyW29mZnNldCAtIDJdID0gdGhpcy5tYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gdGhpcy5tYXNrS2V5WzNdXG5cbiAgICBidWZmZXJbMV0gPSBwYXlsb2FkTGVuZ3RoXG5cbiAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZCRShib2R5TGVuZ3RoLCAyKVxuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAvLyBDbGVhciBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aFxuICAgICAgYnVmZmVyWzJdID0gYnVmZmVyWzNdID0gMFxuICAgICAgYnVmZmVyLndyaXRlVUludEJFKGJvZHlMZW5ndGgsIDQsIDYpXG4gICAgfVxuXG4gICAgYnVmZmVyWzFdIHw9IDB4ODAgLy8gTUFTS1xuXG4gICAgLy8gbWFzayBib2R5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHRoaXMuZnJhbWVEYXRhW2ldIF4gdGhpcy5tYXNrS2V5W2kgJSA0XVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFdyaXRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHBhcnNlclN0YXRlcywgb3Bjb2Rlcywgc3RhdGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga1NlbnRDbG9zZSwga1Jlc3BvbnNlLCBrUmVjZWl2ZWRDbG9zZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNWYWxpZFN0YXR1c0NvZGUsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8vIFRoaXMgY29kZSB3YXMgaW5mbHVlbmNlZCBieSB3cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTEgRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXJub3V0IEthemVtaWVyIGFuZCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNiBMdWlnaSBQaW5jYSBhbmQgY29udHJpYnV0b3JzXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLnBpbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJylcbmNoYW5uZWxzLnBvbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcblxuY2xhc3MgQnl0ZVBhcnNlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgI2J1ZmZlcnMgPSBbXVxuICAjYnl0ZU9mZnNldCA9IDBcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgY29uc3RydWN0b3IgKHdzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy53cyA9IHdzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIF93cml0ZSAoY2h1bmssIF8sIGNhbGxiYWNrKSB7XG4gICAgdGhpcy4jYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIHRoaXMuI2J5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZW5ldmVyIGEgbmV3IGNodW5rIGlzIHJlY2VpdmVkLlxuICAgKiBDYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgYXJlIG5vIG1vcmUgY2h1bmtzIGJ1ZmZlcmluZyxcbiAgICogb3Igbm90IGVub3VnaCBieXRlcyBhcmUgYnVmZmVyZWQgdG8gcGFyc2UuXG4gICAqL1xuICBydW4gKGNhbGxiYWNrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLklORk8pIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlbid0IGVub3VnaCBieXRlcyB0byBwYXJzZSB0aGUgcGF5bG9hZCBsZW5ndGgsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8uZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID0gYnVmZmVyWzBdICYgMHgwRlxuXG4gICAgICAgIC8vIElmIHdlIHJlY2VpdmUgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIHdlIHVzZSB0aGUgdHlwZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gZnJhbWUgdG8gcGFyc2UgdGhlIGZ1bGwgbWVzc2FnZSBhcyBiaW5hcnkvdGV4dCwgd2hlbiBpdCdzIHRlcm1pbmF0ZWRcbiAgICAgICAgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSA/Pz0gdGhpcy4jaW5mby5vcGNvZGVcblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSAhdGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5CSU5BUlkgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuVEVYVCkge1xuICAgICAgICAgIC8vIE9ubHkgdGV4dCBhbmQgYmluYXJ5IGZyYW1lcyBjYW4gYmUgZnJhZ21lbnRlZFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdJbnZhbGlkIGZyYW1lIHR5cGUgd2FzIGZyYWdtZW50ZWQuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRMZW5ndGggPSBidWZmZXJbMV0gJiAweDdGXG5cbiAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPD0gMTI1KSB7XG4gICAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gcGF5bG9hZExlbmd0aFxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTZcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHBheWxvYWRMZW5ndGggPiAxMjUpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpICYmXG4gICAgICAgICAgcGF5bG9hZExlbmd0aCA+IDEyNVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBDb250cm9sIGZyYW1lcyBjYW4gaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBNQVhcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUGF5bG9hZCBsZW5ndGggZm9yIGNvbnRyb2wgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIGNsb3NlIGZyYW1lIHdpdGggYSAxLWJ5dGUgYm9keS4nKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jaW5mby5jbG9zZUluZm8gPSB0aGlzLnBhcnNlQ2xvc2VCb2R5KGZhbHNlLCBib2R5KVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tTZW50Q2xvc2VdKSB7XG4gICAgICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgICAgICAvLyBDbG9zZSBmcmFtZSwgdGhlIGVuZHBvaW50IE1VU1Qgc2VuZCBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLiAgKFdoZW5cbiAgICAgICAgICAgIC8vIHNlbmRpbmcgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZSwgdGhlIGVuZHBvaW50IHR5cGljYWxseSBlY2hvcyB0aGVcbiAgICAgICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICAgIGJvZHkud3JpdGVVSW50MTZCRSh0aGlzLiNpbmZvLmNsb3NlSW5mby5jb2RlLCAwKVxuICAgICAgICAgICAgY29uc3QgY2xvc2VGcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShcbiAgICAgICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgICAgIHRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5lbmQoKVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORykge1xuICAgICAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgICAgICAvLyByZXNwb25zZSwgdW5sZXNzIGl0IGFscmVhZHkgcmVjZWl2ZWQgYSBDbG9zZSBmcmFtZS5cbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgc2VudCBpbiByZXNwb25zZSB0byBhIFBpbmcgZnJhbWUgbXVzdCBoYXZlIGlkZW50aWNhbFxuICAgICAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgICAgICBpZiAoY2hhbm5lbHMucGluZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICBjaGFubmVscy5waW5nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HKSB7XG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgICAgIC8vIHVuaWRpcmVjdGlvbmFsIGhlYXJ0YmVhdC4gIEEgcmVzcG9uc2UgdG8gYW4gdW5zb2xpY2l0ZWQgUG9uZyBmcmFtZSBpc1xuICAgICAgICAgIC8vIG5vdCBleHBlY3RlZC5cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICBjaGFubmVscy5wb25nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG5cbiAgICAgICAgLy8gMl4zMSBpcyB0aGUgbWF4aW5pbXVtIGJ5dGVzIGFuIGFycmF5YnVmZmVyIGNhbiBjb250YWluXG4gICAgICAgIC8vIG9uIDMyLWJpdCBzeXN0ZW1zLiBBbHRob3VnaCwgb24gNjQtYml0IHN5c3RlbXMsIHRoaXMgaXNcbiAgICAgICAgLy8gMl41My0xIGJ5dGVzLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9FcnJvcnMvSW52YWxpZF9hcnJheV9sZW5ndGhcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL2NvbW1vbi9nbG9iYWxzLmg7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWU7YnB2PTE7YnB0PTE7bD0xMjc1XG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9vYmplY3RzL2pzLWFycmF5LWJ1ZmZlci5oO2w9MzQ7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWVcbiAgICAgICAgaWYgKHVwcGVyID4gMiAqKiAzMSAtIDEpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgcGF5bG9hZCBsZW5ndGggPiAyXjMxIGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNClcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSAodXBwZXIgPDwgOCkgKyBsb3dlclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5SRUFEX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBtb3JlIGRhdGEgaW4gdGhpcyBjaHVuayB0aGF0IG5lZWRzIHRvIGJlIHJlYWRcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPj0gdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNlcnZlciBzZW50IG11bHRpcGxlIGZyYW1lcyBpbiBhIHNpbmdsZSBjaHVua1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZSh0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNmcmFnbWVudHMucHVzaChib2R5KVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIHVuZnJhZ21lbnRlZCwgb3IgYSBmcmFnbWVudGVkIGZyYW1lIHdhcyB0ZXJtaW5hdGVkLFxuICAgICAgICAgIC8vIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWRcbiAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCB8fCAodGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OKSkge1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2ZyYWdtZW50cylcblxuICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUsIGZ1bGxNZXNzYWdlKVxuXG4gICAgICAgICAgICB0aGlzLiNpbmZvID0ge31cbiAgICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPSAwXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG4gYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgQnVmZmVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QnVmZmVyfG51bGx9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5QnVmZmVyXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoID09PSBuKSB7XG4gICAgICB0aGlzLiNieXRlT2Zmc2V0IC09IHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy4jYnVmZmVycy5zaGlmdCgpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHdoaWxlIChvZmZzZXQgIT09IG4pIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLiNidWZmZXJzWzBdXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbmV4dFxuXG4gICAgICBpZiAobGVuZ3RoICsgb2Zmc2V0ID09PSBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCArIG9mZnNldCA+IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldChuZXh0LnN1YmFycmF5KDAsIG4gLSBvZmZzZXQpLCBvZmZzZXQpXG4gICAgICAgIHRoaXMuI2J1ZmZlcnNbMF0gPSBuZXh0LnN1YmFycmF5KG4gLSBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBvZmZzZXQgKz0gbmV4dC5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNieXRlT2Zmc2V0IC09IG5cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHBhcnNlQ2xvc2VCb2R5IChvbmx5Q29kZSwgZGF0YSkge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS41XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICAgIGxldCBjb2RlXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPj0gMikge1xuICAgICAgLy8gX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpc1xuICAgICAgLy8gZGVmaW5lZCBhcyB0aGUgc3RhdHVzIGNvZGUgKFNlY3Rpb24gNy40KSBjb250YWluZWQgaW4gdGhlIGZpcnN0IENsb3NlXG4gICAgICAvLyBjb250cm9sIGZyYW1lIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICAgICAgY29kZSA9IGRhdGEucmVhZFVJbnQxNkJFKDApXG4gICAgfVxuXG4gICAgaWYgKG9ubHlDb2RlKSB7XG4gICAgICBpZiAoIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGNvZGUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzXG4gICAgICByZWFzb24gPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUocmVhc29uKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RlLCByZWFzb24gfVxuICB9XG5cbiAgZ2V0IGNsb3NpbmdJbmZvICgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5mby5jbG9zZUluZm9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQnl0ZVBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZ2xvYmFsJylcbmNvbnN0IHsgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycywgc3RhdGVzLCBvcGNvZGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNFc3RhYmxpc2hlZCwgaXNDbG9zaW5nLCBpc1ZhbGlkU3VicHJvdG9jb2wsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCBmaXJlRXZlbnQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZGVmaW5pdGlvblxuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgY2xvc2U6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI2J1ZmZlcmVkQW1vdW50ID0gMFxuICAjcHJvdG9jb2wgPSAnJ1xuICAjZXh0ZW5zaW9ucyA9ICcnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1dlYlNvY2tldHMgYXJlIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1XUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10ocHJvdG9jb2xzKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZOKAmXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmTigJlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmTigJlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3Jk4oCZcyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG5cbiAgICAvLyAxMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDpcblxuICAgIC8vICAgIDEuIEVzdGFibGlzaCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGdpdmVuIHVybFJlY29yZCwgcHJvdG9jb2xzLFxuICAgIC8vICAgICAgIGFuZCBjbGllbnQuXG4gICAgdGhpc1trQ29udHJvbGxlcl0gPSBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFxuICAgICAgdXJsUmVjb3JkLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgdGhpcyxcbiAgICAgIChyZXNwb25zZSkgPT4gdGhpcy4jb25Db25uZWN0aW9uRXN0YWJsaXNoZWQocmVzcG9uc2UpLFxuICAgICAgb3B0aW9uc1xuICAgIClcblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCByZWFkeSBzdGF0ZSwgd2hpY2ggaXMgYVxuICAgIC8vIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiBJbml0aWFsbHkgaXQgbXVzdFxuICAgIC8vIGJlIENPTk5FQ1RJTkcgKDApLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNPTk5FQ1RJTkdcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgeyBjbGFtcDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVhc29uID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHJlYXNvbilcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjb2RlIGlzIHByZXNlbnQsIGJ1dCBpcyBuZWl0aGVyIGFuIGludGVnZXIgZXF1YWwgdG8gMTAwMCBub3IgYW5cbiAgICAvLyAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAzMDAwIHRvIDQ5OTksIGluY2x1c2l2ZSwgdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRBY2Nlc3NFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29kZSAhPT0gMTAwMCAmJiAoY29kZSA8IDMwMDAgfHwgY29kZSA+IDQ5OTkpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ2ludmFsaWQgY29kZScsICdJbnZhbGlkQWNjZXNzRXJyb3InKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWFzb25CeXRlTGVuZ3RoID0gMFxuXG4gICAgLy8gMi4gSWYgcmVhc29uIGlzIHByZXNlbnQsIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlYXNvbkJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcgcmVhc29uLlxuICAgICAgLy8gMi4gSWYgcmVhc29uQnl0ZXMgaXMgbG9uZ2VyIHRoYW4gMTIzIGJ5dGVzLCB0aGVuIHRocm93IGFcbiAgICAgIC8vICAgIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICByZWFzb25CeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVhc29uKVxuXG4gICAgICBpZiAocmVhc29uQnl0ZUxlbmd0aCA+IDEyMykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICAgIGBSZWFzb24gbXVzdCBiZSBsZXNzIHRoYW4gMTIzIGJ5dGVzOyByZWNlaXZlZCAke3JlYXNvbkJ5dGVMZW5ndGh9YCxcbiAgICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSdW4gdGhlIGZpcnN0IG1hdGNoaW5nIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TRUQpIHtcbiAgICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkXG4gICAgICAvLyBGYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgc2V0IHRoaXMncyByZWFkeSBzdGF0ZVxuICAgICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLCAnQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBpdCB3YXMgZXN0YWJsaXNoZWQuJylcbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9IGVsc2UgaWYgKCFpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkXG4gICAgICAvLyBTdGFydCB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGFuZCBzZXQgdGhpcydzIHJlYWR5XG4gICAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIC8vIC0gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gICBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vICAgV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgLy8gLSBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuXG4gICAgICAvLyBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMiArIHJlYXNvbkJ5dGVMZW5ndGgpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZShyZWFzb24sIDIsICd1dGYtOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgICBzb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksIChlcnIpID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICB0aGlzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyBTZXQgdGhpcydzIHJlYWR5IHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldC5zZW5kJyB9KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIC8vIElmIGRhdGEgaXMgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnRcbiAgICAgIC8vIG11c3Qgc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiB0aGUgZGF0YSBhcmd1bWVudFxuICAgICAgLy8gdXNpbmcgYSB0ZXh0IGZyYW1lIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy5cbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZVxuICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlXG4gICAgICAvLyB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvXG4gICAgICAvLyBleHByZXNzIHRoZSBhcmd1bWVudCBhcyBVVEYtOC5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5URVhUKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YeKAmXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBhYiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYWIpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gYWIuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBhYi5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3TigJlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgZGF0YS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oYWIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IHZhbHVlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2XigJlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC5yZXN1bWUoKVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5zb2NrZXQud3MgPSB0aGlzXG4gICAgdGhpc1trQnl0ZVBhcnNlcl0gPSBwYXJzZXJcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZeKAmXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGXigJlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcHNhbCBtYWRlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvd2Vic29ja2V0cy9pc3N1ZXMvNDJcbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdwcm90b2NvbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IChWKSA9PiBWLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2NsaWVudCcpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlcicpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9iYWxhbmNlZC1wb29sJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vbGliL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSBlcnJvcnNcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vbGliL2FwaScpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vbGliL2NvcmUvY29ubmVjdCcpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stYWdlbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stcG9vbCcpXG5jb25zdCBtb2NrRXJyb3JzID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWVycm9ycycpXG5jb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvcHJveHktYWdlbnQnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyLCBzZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL2xpYi9nbG9iYWwnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5cbmxldCBoYXNDcnlwdG9cbnRyeSB7XG4gIHJlcXVpcmUoJ2NyeXB0bycpXG4gIGhhc0NyeXB0byA9IHRydWVcbn0gY2F0Y2gge1xuICBoYXNDcnlwdG8gPSBmYWxzZVxufVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUhhbmRsZXIgPSBSZXRyeUhhbmRsZXJcblxubW9kdWxlLmV4cG9ydHMuRGVjb3JhdG9ySGFuZGxlciA9IERlY29yYXRvckhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLlJlZGlyZWN0SGFuZGxlciA9IFJlZGlyZWN0SGFuZGxlclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRDb25uZWN0b3IgPSBidWlsZENvbm5lY3RvclxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gZXJyb3JzXG5cbmZ1bmN0aW9uIG1ha2VEaXNwYXRjaGVyIChmbikge1xuICByZXR1cm4gKHVybCwgb3B0cywgaGFuZGxlcikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlciA9IG9wdHNcbiAgICAgIG9wdHMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF1cmwgfHwgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmwgIT09ICdvYmplY3QnICYmICEodXJsIGluc3RhbmNlb2YgVVJMKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICE9IG51bGwgJiYgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wYXRoICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cy5wYXRoJylcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSBvcHRzLnBhdGhcbiAgICAgIGlmICghb3B0cy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgICAgfVxuXG4gICAgICB1cmwgPSBuZXcgVVJMKHV0aWwucGFyc2VPcmlnaW4odXJsKS5vcmlnaW4gKyBwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgb3B0cyA9IHR5cGVvZiB1cmwgPT09ICdvYmplY3QnID8gdXJsIDoge31cbiAgICAgIH1cblxuICAgICAgdXJsID0gdXRpbC5wYXJzZVVSTCh1cmwpXG4gICAgfVxuXG4gICAgY29uc3QgeyBhZ2VudCwgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSB9ID0gb3B0c1xuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG9wdHMuYWdlbnQuIERpZCB5b3UgbWVhbiBvcHRzLmNsaWVudD8nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5jYWxsKGRpc3BhdGNoZXIsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICBwYXRoOiB1cmwuc2VhcmNoID8gYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gIDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAob3B0cy5ib2R5ID8gJ1BVVCcgOiAnR0VUJylcbiAgICB9LCBoYW5kbGVyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbERpc3BhdGNoZXIgPSBzZXRHbG9iYWxEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxEaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlclxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPiAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yID49IDgpKSB7XG4gIGxldCBmZXRjaEltcGwgPSBudWxsXG4gIG1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKHJlc291cmNlKSB7XG4gICAgaWYgKCFmZXRjaEltcGwpIHtcbiAgICAgIGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoJykuZmV0Y2hcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbCguLi5hcmd1bWVudHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2hlYWRlcnMnKS5IZWFkZXJzXG4gIG1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxuICBtb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3RcbiAgbW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9mb3JtZGF0YScpLkZvcm1EYXRhXG4gIG1vZHVsZS5leHBvcnRzLkZpbGUgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9maWxlJykuRmlsZVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG4gIGNvbnN0IHsgc2V0R2xvYmFsT3JpZ2luLCBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2dsb2JhbCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG4gIG1vZHVsZS5leHBvcnRzLmdldEdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpblxuXG4gIGNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuICBjb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL3N5bWJvbHMnKVxuXG4gIC8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4gIC8vIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgTm9kZSwgaXQgZG9lc24ndCBoYXZlIGFueSB1c2Ugd2l0aG91dCBmZXRjaC5cbiAgbW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTYpIHtcbiAgY29uc3QgeyBkZWxldGVDb29raWUsIGdldENvb2tpZXMsIGdldFNldENvb2tpZXMsIHNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG5cbiAgbW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG4gIG1vZHVsZS5leHBvcnRzLmdldENvb2tpZXMgPSBnZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG4gIGNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9kYXRhVVJMJylcblxuICBtb2R1bGUuZXhwb3J0cy5wYXJzZU1JTUVUeXBlID0gcGFyc2VNSU1FVHlwZVxuICBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE4ICYmIGhhc0NyeXB0bykge1xuICBjb25zdCB7IFdlYlNvY2tldCB9ID0gcmVxdWlyZSgnLi9saWIvd2Vic29ja2V0L3dlYnNvY2tldCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gV2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwQ2xpZW50ID0gZXhwb3J0cy5pc0h0dHBzID0gZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBleHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IGV4cG9ydHMuZ2V0UHJveHlVcmwgPSBleHBvcnRzLk1lZGlhVHlwZXMgPSBleHBvcnRzLkhlYWRlcnMgPSBleHBvcnRzLkh0dHBDb2RlcyA9IHZvaWQgMDtcbmNvbnN0IGh0dHAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBcIikpO1xuY29uc3QgaHR0cHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBzXCIpKTtcbmNvbnN0IHBtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb3h5XCIpKTtcbmNvbnN0IHR1bm5lbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidHVubmVsXCIpKTtcbmNvbnN0IHVuZGljaV8xID0gcmVxdWlyZShcInVuZGljaVwiKTtcbnZhciBIdHRwQ29kZXM7XG4oZnVuY3Rpb24gKEh0dHBDb2Rlcykge1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJPS1wiXSA9IDIwMF0gPSBcIk9LXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk11bHRpcGxlQ2hvaWNlc1wiXSA9IDMwMF0gPSBcIk11bHRpcGxlQ2hvaWNlc1wiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJNb3ZlZFBlcm1hbmVudGx5XCJdID0gMzAxXSA9IFwiTW92ZWRQZXJtYW5lbnRseVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXNvdXJjZU1vdmVkXCJdID0gMzAyXSA9IFwiUmVzb3VyY2VNb3ZlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTZWVPdGhlclwiXSA9IDMwM10gPSBcIlNlZU90aGVyXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdE1vZGlmaWVkXCJdID0gMzA0XSA9IFwiTm90TW9kaWZpZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVXNlUHJveHlcIl0gPSAzMDVdID0gXCJVc2VQcm94eVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTd2l0Y2hQcm94eVwiXSA9IDMwNl0gPSBcIlN3aXRjaFByb3h5XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlRlbXBvcmFyeVJlZGlyZWN0XCJdID0gMzA3XSA9IFwiVGVtcG9yYXJ5UmVkaXJlY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGVybWFuZW50UmVkaXJlY3RcIl0gPSAzMDhdID0gXCJQZXJtYW5lbnRSZWRpcmVjdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJCYWRSZXF1ZXN0XCJdID0gNDAwXSA9IFwiQmFkUmVxdWVzdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJVbmF1dGhvcml6ZWRcIl0gPSA0MDFdID0gXCJVbmF1dGhvcml6ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGF5bWVudFJlcXVpcmVkXCJdID0gNDAyXSA9IFwiUGF5bWVudFJlcXVpcmVkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkZvcmJpZGRlblwiXSA9IDQwM10gPSBcIkZvcmJpZGRlblwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJOb3RGb3VuZFwiXSA9IDQwNF0gPSBcIk5vdEZvdW5kXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk1ldGhvZE5vdEFsbG93ZWRcIl0gPSA0MDVdID0gXCJNZXRob2ROb3RBbGxvd2VkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEFjY2VwdGFibGVcIl0gPSA0MDZdID0gXCJOb3RBY2NlcHRhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiXSA9IDQwN10gPSBcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXF1ZXN0VGltZW91dFwiXSA9IDQwOF0gPSBcIlJlcXVlc3RUaW1lb3V0XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkNvbmZsaWN0XCJdID0gNDA5XSA9IFwiQ29uZmxpY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiR29uZVwiXSA9IDQxMF0gPSBcIkdvbmVcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVG9vTWFueVJlcXVlc3RzXCJdID0gNDI5XSA9IFwiVG9vTWFueVJlcXVlc3RzXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkludGVybmFsU2VydmVyRXJyb3JcIl0gPSA1MDBdID0gXCJJbnRlcm5hbFNlcnZlckVycm9yXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEltcGxlbWVudGVkXCJdID0gNTAxXSA9IFwiTm90SW1wbGVtZW50ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiQmFkR2F0ZXdheVwiXSA9IDUwMl0gPSBcIkJhZEdhdGV3YXlcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiU2VydmljZVVuYXZhaWxhYmxlXCJdID0gNTAzXSA9IFwiU2VydmljZVVuYXZhaWxhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkdhdGV3YXlUaW1lb3V0XCJdID0gNTA0XSA9IFwiR2F0ZXdheVRpbWVvdXRcIjtcbn0pKEh0dHBDb2RlcyB8fCAoZXhwb3J0cy5IdHRwQ29kZXMgPSBIdHRwQ29kZXMgPSB7fSkpO1xudmFyIEhlYWRlcnM7XG4oZnVuY3Rpb24gKEhlYWRlcnMpIHtcbiAgICBIZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhY2NlcHRcIjtcbiAgICBIZWFkZXJzW1wiQ29udGVudFR5cGVcIl0gPSBcImNvbnRlbnQtdHlwZVwiO1xufSkoSGVhZGVycyB8fCAoZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycyA9IHt9KSk7XG52YXIgTWVkaWFUeXBlcztcbihmdW5jdGlvbiAoTWVkaWFUeXBlcykge1xuICAgIE1lZGlhVHlwZXNbXCJBcHBsaWNhdGlvbkpzb25cIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbn0pKE1lZGlhVHlwZXMgfHwgKGV4cG9ydHMuTWVkaWFUeXBlcyA9IE1lZGlhVHlwZXMgPSB7fSkpO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm94eSBVUkwsIGRlcGVuZGluZyB1cG9uIHRoZSBzdXBwbGllZCB1cmwgYW5kIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIEBwYXJhbSBzZXJ2ZXJVcmwgIFRoZSBzZXJ2ZXIgVVJMIHdoZXJlIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudC4gRm9yIGV4YW1wbGUsIGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cbiAqL1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwoc2VydmVyVXJsKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChuZXcgVVJMKHNlcnZlclVybCkpO1xuICAgIHJldHVybiBwcm94eVVybCA/IHByb3h5VXJsLmhyZWYgOiAnJztcbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmNvbnN0IEh0dHBSZWRpcmVjdENvZGVzID0gW1xuICAgIEh0dHBDb2Rlcy5Nb3ZlZFBlcm1hbmVudGx5LFxuICAgIEh0dHBDb2Rlcy5SZXNvdXJjZU1vdmVkLFxuICAgIEh0dHBDb2Rlcy5TZWVPdGhlcixcbiAgICBIdHRwQ29kZXMuVGVtcG9yYXJ5UmVkaXJlY3QsXG4gICAgSHR0cENvZGVzLlBlcm1hbmVudFJlZGlyZWN0XG5dO1xuY29uc3QgSHR0cFJlc3BvbnNlUmV0cnlDb2RlcyA9IFtcbiAgICBIdHRwQ29kZXMuQmFkR2F0ZXdheSxcbiAgICBIdHRwQ29kZXMuU2VydmljZVVuYXZhaWxhYmxlLFxuICAgIEh0dHBDb2Rlcy5HYXRld2F5VGltZW91dFxuXTtcbmNvbnN0IFJldHJ5YWJsZUh0dHBWZXJicyA9IFsnT1BUSU9OUycsICdHRVQnLCAnREVMRVRFJywgJ0hFQUQnXTtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcgPSAxMDtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSA9IDU7XG5jbGFzcyBIdHRwQ2xpZW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0h0dHBDbGllbnRFcnJvcic7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBIdHRwQ2xpZW50RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IEh0dHBDbGllbnRFcnJvcjtcbmNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICByZWFkQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoW291dHB1dCwgY2h1bmtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvdXRwdXQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWFkQm9keUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBIdHRwQ2xpZW50UmVzcG9uc2U7XG5mdW5jdGlvbiBpc0h0dHBzKHJlcXVlc3RVcmwpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHJlcXVlc3RVcmwpO1xuICAgIHJldHVybiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xufVxuZXhwb3J0cy5pc0h0dHBzID0gaXNIdHRwcztcbmNsYXNzIEh0dHBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVzZXJBZ2VudCwgaGFuZGxlcnMsIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2lnbm9yZVNzbEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3RzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYWxsb3dSZWRpcmVjdERvd25ncmFkZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXhSZWRpcmVjdHMgPSA1MDtcbiAgICAgICAgdGhpcy5fYWxsb3dSZXRyaWVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21heFJldHJpZXMgPSAxO1xuICAgICAgICB0aGlzLl9rZWVwQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycyB8fCBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xuICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faWdub3JlU3NsRXJyb3IgPSByZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NvY2tldFRpbWVvdXQgPSByZXF1ZXN0T3B0aW9ucy5zb2NrZXRUaW1lb3V0O1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3REb3duZ3JhZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3REb3duZ3JhZGUgPSByZXF1ZXN0T3B0aW9ucy5hbGxvd1JlZGlyZWN0RG93bmdyYWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm1heFJlZGlyZWN0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4UmVkaXJlY3RzID0gTWF0aC5tYXgocmVxdWVzdE9wdGlvbnMubWF4UmVkaXJlY3RzLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5rZWVwQWxpdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tlZXBBbGl2ZSA9IHJlcXVlc3RPcHRpb25zLmtlZXBBbGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5hbGxvd1JldHJpZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmV0cmllcyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5tYXhSZXRyaWVzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhSZXRyaWVzID0gcmVxdWVzdE9wdGlvbnMubWF4UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25zKHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdPUFRJT05TJywgcmVxdWVzdFVybCwgbnVsbCwgYWRkaXRpb25hbEhlYWRlcnMgfHwge30pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0KHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdHRVQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWwocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIHJlcXVlc3RVcmwsIG51bGwsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BPU1QnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdXQocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BVVCcsIHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhlYWQocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0hFQUQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU3RyZWFtKHZlcmIsIHJlcXVlc3RVcmwsIHN0cmVhbSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QodmVyYiwgcmVxdWVzdFVybCwgc3RyZWFtLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgdHlwZWQgb2JqZWN0IGZyb20gYW4gZW5kcG9pbnRcbiAgICAgKiBCZSBhd2FyZSB0aGF0IG5vdCBmb3VuZCByZXR1cm5zIGEgbnVsbC4gIE90aGVyIGVycm9ycyAoNHh4LCA1eHgpIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAqL1xuICAgIGdldEpzb24ocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLmdldChyZXF1ZXN0VXJsLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3N0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NSZXNwb25zZShyZXMsIHRoaXMucmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHV0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnB1dChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaEpzb24ocmVxdWVzdFVybCwgb2JqLCBhZGRpdGlvbmFsSGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxIZWFkZXJzW0hlYWRlcnMuQWNjZXB0XSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkFjY2VwdCwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5Db250ZW50VHlwZV0gPSB0aGlzLl9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgSGVhZGVycy5Db250ZW50VHlwZSwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgdGhpcy5wYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJhdyBodHRwIHJlcXVlc3QuXG4gICAgICogQWxsIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBnZXQsIHBvc3QsIHBhdGNoLCBhbmQgcmVxdWVzdCB1bHRpbWF0ZWx5IGNhbGwgdGhpcy5cbiAgICAgKiBQcmVmZXIgZ2V0LCBkZWwsIHBvc3QgYW5kIHBhdGNoXG4gICAgICovXG4gICAgcmVxdWVzdCh2ZXJiLCByZXF1ZXN0VXJsLCBkYXRhLCBoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChyZXF1ZXN0VXJsKTtcbiAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5fcHJlcGFyZVJlcXVlc3QodmVyYiwgcGFyc2VkVXJsLCBoZWFkZXJzKTtcbiAgICAgICAgICAgIC8vIE9ubHkgcGVyZm9ybSByZXRyaWVzIG9uIHJlYWRzIHNpbmNlIHdyaXRlcyBtYXkgbm90IGJlIGlkZW1wb3RlbnQuXG4gICAgICAgICAgICBjb25zdCBtYXhUcmllcyA9IHRoaXMuX2FsbG93UmV0cmllcyAmJiBSZXRyeWFibGVIdHRwVmVyYnMuaW5jbHVkZXModmVyYilcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21heFJldHJpZXMgKyAxXG4gICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICAgICAgbGV0IG51bVRyaWVzID0gMDtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdFJhdyhpbmZvLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJlxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLlVuYXV0aG9yaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0aGVudGljYXRpb25IYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuY2FuSGFuZGxlQXV0aGVudGljYXRpb24ocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25IYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRpb25IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25IYW5kbGVyLmhhbmRsZUF1dGhlbnRpY2F0aW9uKHRoaXMsIGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSByZWNlaXZlZCBhbiB1bmF1dGhvcml6ZWQgcmVzcG9uc2UgYnV0IGhhdmUgbm8gaGFuZGxlcnMgdG8gaGFuZGxlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSByZXNwb25zZSByZXR1cm4gdG8gdGhlIGNhbGxlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcmVkaXJlY3RzUmVtYWluaW5nID0gdGhpcy5fbWF4UmVkaXJlY3RzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgSHR0cFJlZGlyZWN0Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyAmJlxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gcmVzcG9uc2UubWVzc2FnZS5oZWFkZXJzWydsb2NhdGlvbiddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIGxvY2F0aW9uIHRvIHJlZGlyZWN0IHRvLCB3ZSB3b24ndFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVkaXJlY3RVcmwgPSBuZXcgVVJMKHJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFVybC5wcm90b2NvbCAhPT0gcGFyc2VkUmVkaXJlY3RVcmwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9hbGxvd1JlZGlyZWN0RG93bmdyYWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZGlyZWN0IGZyb20gSFRUUFMgdG8gSFRUUCBwcm90b2NvbC4gVGhpcyBkb3duZ3JhZGUgaXMgbm90IGFsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIElmIHlvdSB3YW50IHRvIGFsbG93IHRoaXMgYmVoYXZpb3IsIHNldCB0aGUgYWxsb3dSZWRpcmVjdERvd25ncmFkZSBvcHRpb24gdG8gdHJ1ZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGZpbmlzaCByZWFkaW5nIHRoZSByZXNwb25zZSBiZWZvcmUgcmVhc3NpZ25pbmcgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCBsZWFrIHRoZSBvcGVuIHNvY2tldC5cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RyaXAgYXV0aG9yaXphdGlvbiBoZWFkZXIgaWYgcmVkaXJlY3RlZCB0byBhIGRpZmZlcmVudCBob3N0bmFtZVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVkaXJlY3RVcmwuaG9zdG5hbWUgIT09IHBhcnNlZFVybC5ob3N0bmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWRlciBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dGhvcml6YXRpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIG1ha2UgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgbmV3IHJlZGlyZWN0VXJsXG4gICAgICAgICAgICAgICAgICAgIGluZm8gPSB0aGlzLl9wcmVwYXJlUmVxdWVzdCh2ZXJiLCBwYXJzZWRSZWRpcmVjdFVybCwgaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0UmF3KGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmctLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgIUh0dHBSZXNwb25zZVJldHJ5Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QgYSByZXRyeSBjb2RlLCByZXR1cm4gaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG51bVRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKG51bVRyaWVzIDwgbWF4VHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5fcGVyZm9ybUV4cG9uZW50aWFsQmFja29mZihudW1Ucmllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAobnVtVHJpZXMgPCBtYXhUcmllcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOZWVkcyB0byBiZSBjYWxsZWQgaWYga2VlcEFsaXZlIGlzIHNldCB0byB0cnVlIGluIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5fYWdlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJhdyByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBpbmZvXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICByZXF1ZXN0UmF3KGluZm8sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tGb3JSZXN1bHQoZXJyLCByZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYGVycmAgaXMgbm90IHBhc3NlZCwgdGhlbiBgcmVzYCBtdXN0IGJlIHBhc3NlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UmF3V2l0aENhbGxiYWNrKGluZm8sIGRhdGEsIGNhbGxiYWNrRm9yUmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmF3IHJlcXVlc3Qgd2l0aCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0gaW5mb1xuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIG9uUmVzdWx0XG4gICAgICovXG4gICAgcmVxdWVzdFJhd1dpdGhDYWxsYmFjayhpbmZvLCBkYXRhLCBvblJlc3VsdCkge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIWluZm8ub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgaW5mby5vcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gQnVmZmVyLmJ5dGVMZW5ndGgoZGF0YSwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0KGVyciwgcmVzKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG9uUmVzdWx0KGVyciwgcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXEgPSBpbmZvLmh0dHBNb2R1bGUucmVxdWVzdChpbmZvLm9wdGlvbnMsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBIdHRwQ2xpZW50UmVzcG9uc2UobXNnKTtcbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdCh1bmRlZmluZWQsIHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICByZXEub24oJ3NvY2tldCcsIHNvY2sgPT4ge1xuICAgICAgICAgICAgc29ja2V0ID0gc29jaztcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHdlIGV2ZXIgZ2V0IGRpc2Nvbm5lY3RlZCwgd2Ugd2FudCB0aGUgc29ja2V0IHRvIHRpbWVvdXQgZXZlbnR1YWxseVxuICAgICAgICByZXEuc2V0VGltZW91dCh0aGlzLl9zb2NrZXRUaW1lb3V0IHx8IDMgKiA2MDAwMCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdChuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dDogJHtpbmZvLm9wdGlvbnMucGF0aH1gKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgLy8gZXJyIGhhcyBzdGF0dXNDb2RlIHByb3BlcnR5XG4gICAgICAgICAgICAvLyByZXMgc2hvdWxkIGhhdmUgaGVhZGVyc1xuICAgICAgICAgICAgaGFuZGxlUmVzdWx0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcS53cml0ZShkYXRhLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0YS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhLnBpcGUocmVxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGh0dHAgYWdlbnQuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgYW4gaHR0cCBhZ2VudCB0aGF0IGhhbmRsZXNcbiAgICAgKiByb3V0aW5nIHRocm91Z2ggYSBwcm94eSBzZXJ2ZXIgLSBkZXBlbmRpbmcgdXBvbiB0aGUgdXJsIGFuZCBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgICogQHBhcmFtIHNlcnZlclVybCAgVGhlIHNlcnZlciBVUkwgd2hlcmUgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZW50LiBGb3IgZXhhbXBsZSwgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVxuICAgICAqL1xuICAgIGdldEFnZW50KHNlcnZlclVybCkge1xuICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHNlcnZlclVybCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBZ2VudChwYXJzZWRVcmwpO1xuICAgIH1cbiAgICBnZXRBZ2VudERpc3BhdGNoZXIoc2VydmVyVXJsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoc2VydmVyVXJsKTtcbiAgICAgICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChwYXJzZWRVcmwpO1xuICAgICAgICBjb25zdCB1c2VQcm94eSA9IHByb3h5VXJsICYmIHByb3h5VXJsLmhvc3RuYW1lO1xuICAgICAgICBpZiAoIXVzZVByb3h5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3h5QWdlbnREaXNwYXRjaGVyKHBhcnNlZFVybCwgcHJveHlVcmwpO1xuICAgIH1cbiAgICBfcHJlcGFyZVJlcXVlc3QobWV0aG9kLCByZXF1ZXN0VXJsLCBoZWFkZXJzKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSB7fTtcbiAgICAgICAgaW5mby5wYXJzZWRVcmwgPSByZXF1ZXN0VXJsO1xuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IGluZm8ucGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICAgICAgaW5mby5odHRwTW9kdWxlID0gdXNpbmdTc2wgPyBodHRwcyA6IGh0dHA7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gdXNpbmdTc2wgPyA0NDMgOiA4MDtcbiAgICAgICAgaW5mby5vcHRpb25zID0ge307XG4gICAgICAgIGluZm8ub3B0aW9ucy5ob3N0ID0gaW5mby5wYXJzZWRVcmwuaG9zdG5hbWU7XG4gICAgICAgIGluZm8ub3B0aW9ucy5wb3J0ID0gaW5mby5wYXJzZWRVcmwucG9ydFxuICAgICAgICAgICAgPyBwYXJzZUludChpbmZvLnBhcnNlZFVybC5wb3J0KVxuICAgICAgICAgICAgOiBkZWZhdWx0UG9ydDtcbiAgICAgICAgaW5mby5vcHRpb25zLnBhdGggPVxuICAgICAgICAgICAgKGluZm8ucGFyc2VkVXJsLnBhdGhuYW1lIHx8ICcnKSArIChpbmZvLnBhcnNlZFVybC5zZWFyY2ggfHwgJycpO1xuICAgICAgICBpbmZvLm9wdGlvbnMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICBpbmZvLm9wdGlvbnMuaGVhZGVycyA9IHRoaXMuX21lcmdlSGVhZGVycyhoZWFkZXJzKTtcbiAgICAgICAgaWYgKHRoaXMudXNlckFnZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWyd1c2VyLWFnZW50J10gPSB0aGlzLnVzZXJBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLm9wdGlvbnMuYWdlbnQgPSB0aGlzLl9nZXRBZ2VudChpbmZvLnBhcnNlZFVybCk7XG4gICAgICAgIC8vIGdpdmVzIGhhbmRsZXJzIGFuIG9wcG9ydHVuaXR5IHRvIHBhcnRpY2lwYXRlXG4gICAgICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIucHJlcGFyZVJlcXVlc3QoaW5mby5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgX21lcmdlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zICYmIHRoaXMucmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKSwgbG93ZXJjYXNlS2V5cyhoZWFkZXJzIHx8IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvd2VyY2FzZUtleXMoaGVhZGVycyB8fCB7fSk7XG4gICAgfVxuICAgIF9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgaGVhZGVyLCBfZGVmYXVsdCkge1xuICAgICAgICBsZXQgY2xpZW50SGVhZGVyO1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucyAmJiB0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNsaWVudEhlYWRlciA9IGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKVtoZWFkZXJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGRpdGlvbmFsSGVhZGVyc1toZWFkZXJdIHx8IGNsaWVudEhlYWRlciB8fCBfZGVmYXVsdDtcbiAgICB9XG4gICAgX2dldEFnZW50KHBhcnNlZFVybCkge1xuICAgICAgICBsZXQgYWdlbnQ7XG4gICAgICAgIGNvbnN0IHByb3h5VXJsID0gcG0uZ2V0UHJveHlVcmwocGFyc2VkVXJsKTtcbiAgICAgICAgY29uc3QgdXNlUHJveHkgPSBwcm94eVVybCAmJiBwcm94eVVybC5ob3N0bmFtZTtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSAmJiB1c2VQcm94eSkge1xuICAgICAgICAgICAgYWdlbnQgPSB0aGlzLl9wcm94eUFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlUHJveHkpIHtcbiAgICAgICAgICAgIGFnZW50ID0gdGhpcy5fYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYWdlbnQgaXMgYWxyZWFkeSBhc3NpZ25lZCB1c2UgdGhhdCBhZ2VudC5cbiAgICAgICAgaWYgKGFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNpbmdTc2wgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICBsZXQgbWF4U29ja2V0cyA9IDEwMDtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIG1heFNvY2tldHMgPSB0aGlzLnJlcXVlc3RPcHRpb25zLm1heFNvY2tldHMgfHwgaHR0cC5nbG9iYWxBZ2VudC5tYXhTb2NrZXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgaXMgYHVzZVByb3h5YCBhZ2FpbiwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYHByb3h5VVJsYCBkaXJlY3RseSBmb3IgVHlwZVNjcmlwdHMncyBmbG93IGFuYWx5c2lzLlxuICAgICAgICBpZiAocHJveHlVcmwgJiYgcHJveHlVcmwuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtYXhTb2NrZXRzLFxuICAgICAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5fa2VlcEFsaXZlLFxuICAgICAgICAgICAgICAgIHByb3h5OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICgocHJveHlVcmwudXNlcm5hbWUgfHwgcHJveHlVcmwucGFzc3dvcmQpICYmIHtcbiAgICAgICAgICAgICAgICAgICAgcHJveHlBdXRoOiBgJHtwcm94eVVybC51c2VybmFtZX06JHtwcm94eVVybC5wYXNzd29yZH1gXG4gICAgICAgICAgICAgICAgfSkpLCB7IGhvc3Q6IHByb3h5VXJsLmhvc3RuYW1lLCBwb3J0OiBwcm94eVVybC5wb3J0IH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHR1bm5lbEFnZW50O1xuICAgICAgICAgICAgY29uc3Qgb3Zlckh0dHBzID0gcHJveHlVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICAgICAgdHVubmVsQWdlbnQgPSBvdmVySHR0cHMgPyB0dW5uZWwuaHR0cHNPdmVySHR0cHMgOiB0dW5uZWwuaHR0cHNPdmVySHR0cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHR1bm5lbEFnZW50ID0gb3Zlckh0dHBzID8gdHVubmVsLmh0dHBPdmVySHR0cHMgOiB0dW5uZWwuaHR0cE92ZXJIdHRwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWdlbnQgPSB0dW5uZWxBZ2VudChhZ2VudE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fcHJveHlBZ2VudCA9IGFnZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHR1bm5lbGluZyBhZ2VudCBpc24ndCBhc3NpZ25lZCBjcmVhdGUgYSBuZXcgYWdlbnRcbiAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsga2VlcEFsaXZlOiB0aGlzLl9rZWVwQWxpdmUsIG1heFNvY2tldHMgfTtcbiAgICAgICAgICAgIGFnZW50ID0gdXNpbmdTc2wgPyBuZXcgaHR0cHMuQWdlbnQob3B0aW9ucykgOiBuZXcgaHR0cC5BZ2VudChvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50ID0gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBhZ2VudC5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihhZ2VudC5vcHRpb25zIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFnZW50O1xuICAgIH1cbiAgICBfZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIocGFyc2VkVXJsLCBwcm94eVVybCkge1xuICAgICAgICBsZXQgcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSkge1xuICAgICAgICAgICAgcHJveHlBZ2VudCA9IHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGFnZW50IGlzIGFscmVhZHkgYXNzaWduZWQgdXNlIHRoYXQgYWdlbnQuXG4gICAgICAgIGlmIChwcm94eUFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcHJveHlBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgIHByb3h5QWdlbnQgPSBuZXcgdW5kaWNpXzEuUHJveHlBZ2VudChPYmplY3QuYXNzaWduKHsgdXJpOiBwcm94eVVybC5ocmVmLCBwaXBlbGluaW5nOiAhdGhpcy5fa2VlcEFsaXZlID8gMCA6IDEgfSwgKChwcm94eVVybC51c2VybmFtZSB8fCBwcm94eVVybC5wYXNzd29yZCkgJiYge1xuICAgICAgICAgICAgdG9rZW46IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke3Byb3h5VXJsLnVzZXJuYW1lfToke3Byb3h5VXJsLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgICAgIH0pKSk7XG4gICAgICAgIHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyID0gcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBwcm94eUFnZW50Lm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHByb3h5QWdlbnQub3B0aW9ucy5yZXF1ZXN0VGxzIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3h5QWdlbnQ7XG4gICAgfVxuICAgIF9wZXJmb3JtRXhwb25lbnRpYWxCYWNrb2ZmKHJldHJ5TnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXRyeU51bWJlciA9IE1hdGgubWluKEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcsIHJldHJ5TnVtYmVyKTtcbiAgICAgICAgICAgIGNvbnN0IG1zID0gRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlICogTWF0aC5wb3coMiwgcmV0cnlOdW1iZXIpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIG1zKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc1Jlc3BvbnNlKHJlcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLm1lc3NhZ2Uuc3RhdHVzQ29kZSB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBub3QgZm91bmQgbGVhZHMgdG8gbnVsbCBvYmogcmV0dXJuZWRcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLk5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHJlc3VsdCBmcm9tIHRoZSBib2R5XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGF0ZVRpbWVEZXNlcmlhbGl6ZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oYS52YWx1ZU9mKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgb2JqO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZW50cztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IHlpZWxkIHJlcy5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudHMgJiYgY29udGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZXNlcmlhbGl6ZURhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cywgZGF0ZVRpbWVEZXNlcmlhbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXN1bHQgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHJlcy5tZXNzYWdlLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCByZXNvdXJjZSAoY29udGVudHMgbm90IGpzb24pOyAgbGVhdmluZyByZXN1bHQgb2JqIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm90ZSB0aGF0IDN4eCByZWRpcmVjdHMgYXJlIGhhbmRsZWQgYnkgdGhlIGh0dHAgbGF5ZXIuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPiAyOTkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZXhjZXB0aW9uL2Vycm9yIGluIGJvZHksIGF0dGVtcHQgdG8gZ2V0IGJldHRlciBlcnJvclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqICYmIG9iai5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBvYmoubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250ZW50cyAmJiBjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIGluIHRoZSBib2R5IG1lc3NhZ2UgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGBGYWlsZWQgcmVxdWVzdDogKCR7c3RhdHVzQ29kZX0pYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgSHR0cENsaWVudEVycm9yKG1zZywgc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGVyci5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnQgPSBIdHRwQ2xpZW50O1xuY29uc3QgbG93ZXJjYXNlS2V5cyA9IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChjLCBrKSA9PiAoKGNbay50b0xvd2VyQ2FzZSgpXSA9IG9ialtrXSksIGMpLCB7fSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBlcnNvbmFsQWNjZXNzVG9rZW5DcmVkZW50aWFsSGFuZGxlciA9IGV4cG9ydHMuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIgPSBleHBvcnRzLkJhc2ljQ3JlZGVudGlhbEhhbmRsZXIgPSB2b2lkIDA7XG5jbGFzcyBCYXNpY0NyZWRlbnRpYWxIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VybmFtZSwgcGFzc3dvcmQpIHtcbiAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgfVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7dGhpcy51c2VybmFtZX06JHt0aGlzLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzaWNDcmVkZW50aWFsSGFuZGxlciA9IEJhc2ljQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBCZWFyZXJDcmVkZW50aWFsSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICAvLyBjdXJyZW50bHkgaW1wbGVtZW50cyBwcmUtYXV0aG9yaXphdGlvblxuICAgIC8vIFRPRE86IHN1cHBvcnQgcHJlQXV0aCA9IGZhbHNlIHdoZXJlIGl0IGhvb2tzIG9uIDQwMVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3RoaXMudG9rZW59YDtcbiAgICB9XG4gICAgLy8gVGhpcyBoYW5kbGVyIGNhbm5vdCBoYW5kbGUgNDAxXG4gICAgY2FuSGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkJlYXJlckNyZWRlbnRpYWxIYW5kbGVyID0gQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBQZXJzb25hbEFjY2Vzc1Rva2VuQ3JlZGVudGlhbEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgLy8gY3VycmVudGx5IGltcGxlbWVudHMgcHJlLWF1dGhvcml6YXRpb25cbiAgICAvLyBUT0RPOiBzdXBwb3J0IHByZUF1dGggPSBmYWxzZSB3aGVyZSBpdCBob29rcyBvbiA0MDFcbiAgICBwcmVwYXJlUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIG5vIGhlYWRlcnMnKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGBQQVQ6JHt0aGlzLnRva2VufWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyID0gUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9pZGNDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpO1xuY29uc3QgYXV0aF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9hdXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNsYXNzIE9pZGNDbGllbnQge1xuICAgIHN0YXRpYyBjcmVhdGVIdHRwQ2xpZW50KGFsbG93UmV0cnkgPSB0cnVlLCBtYXhSZXRyeSA9IDEwKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dSZXRyaWVzOiBhbGxvd1JldHJ5LFxuICAgICAgICAgICAgbWF4UmV0cmllczogbWF4UmV0cnlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwX2NsaWVudF8xLkh0dHBDbGllbnQoJ2FjdGlvbnMvb2lkYy1jbGllbnQnLCBbbmV3IGF1dGhfMS5CZWFyZXJDcmVkZW50aWFsSGFuZGxlcihPaWRjQ2xpZW50LmdldFJlcXVlc3RUb2tlbigpKV0sIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFJlcXVlc3RUb2tlbigpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1RPS0VOJ107XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCBBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVE9LRU4gZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlblVybCgpIHtcbiAgICAgICAgY29uc3QgcnVudGltZVVybCA9IHByb2Nlc3MuZW52WydBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVVJMJ107XG4gICAgICAgIGlmICghcnVudGltZVVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwgZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1bnRpbWVVcmw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDYWxsKGlkX3Rva2VuX3VybCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBodHRwY2xpZW50ID0gT2lkY0NsaWVudC5jcmVhdGVIdHRwQ2xpZW50KCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBodHRwY2xpZW50XG4gICAgICAgICAgICAgICAgLmdldEpzb24oaWRfdG9rZW5fdXJsKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IElEIFRva2VuLiBcXG4gXG4gICAgICAgIEVycm9yIENvZGUgOiAke2Vycm9yLnN0YXR1c0NvZGV9XFxuIFxuICAgICAgICBFcnJvciBNZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGlkX3Rva2VuID0gKF9hID0gcmVzLnJlc3VsdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCFpZF90b2tlbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzcG9uc2UganNvbiBib2R5IGRvIG5vdCBoYXZlIElEIFRva2VuIGZpZWxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRfdG9rZW47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlbihhdWRpZW5jZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBOZXcgSUQgVG9rZW4gaXMgcmVxdWVzdGVkIGZyb20gYWN0aW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICBsZXQgaWRfdG9rZW5fdXJsID0gT2lkY0NsaWVudC5nZXRJRFRva2VuVXJsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGF1ZGllbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZWRBdWRpZW5jZSA9IGVuY29kZVVSSUNvbXBvbmVudChhdWRpZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuX3VybCA9IGAke2lkX3Rva2VuX3VybH0mYXVkaWVuY2U9JHtlbmNvZGVkQXVkaWVuY2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYElEIHRva2VuIHVybCBpcyAke2lkX3Rva2VuX3VybH1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZF90b2tlbiA9IHlpZWxkIE9pZGNDbGllbnQuZ2V0Q2FsbChpZF90b2tlbl91cmwpO1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuc2V0U2VjcmV0KShpZF90b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkX3Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBtZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuT2lkY0NsaWVudCA9IE9pZGNDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vaWRjLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3VtbWFyeSA9IGV4cG9ydHMubWFya2Rvd25TdW1tYXJ5ID0gZXhwb3J0cy5TVU1NQVJZX0RPQ1NfVVJMID0gZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVIgPSB2b2lkIDA7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHsgYWNjZXNzLCBhcHBlbmRGaWxlLCB3cml0ZUZpbGUgfSA9IGZzXzEucHJvbWlzZXM7XG5leHBvcnRzLlNVTU1BUllfRU5WX1ZBUiA9ICdHSVRIVUJfU1RFUF9TVU1NQVJZJztcbmV4cG9ydHMuU1VNTUFSWV9ET0NTX1VSTCA9ICdodHRwczovL2RvY3MuZ2l0aHViLmNvbS9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy93b3JrZmxvdy1jb21tYW5kcy1mb3ItZ2l0aHViLWFjdGlvbnMjYWRkaW5nLWEtam9iLXN1bW1hcnknO1xuY2xhc3MgU3VtbWFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgc3VtbWFyeSBmaWxlIHBhdGggZnJvbSB0aGUgZW52aXJvbm1lbnQsIHJlamVjdHMgaWYgZW52IHZhciBpcyBub3QgZm91bmQgb3IgZmlsZSBkb2VzIG5vdCBleGlzdFxuICAgICAqIEFsc28gY2hlY2tzIHIvdyBwZXJtaXNzaW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHN0ZXAgc3VtbWFyeSBmaWxlIHBhdGhcbiAgICAgKi9cbiAgICBmaWxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlUGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhdGhGcm9tRW52ID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVJdO1xuICAgICAgICAgICAgaWYgKCFwYXRoRnJvbUVudikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yICQke2V4cG9ydHMuU1VNTUFSWV9FTlZfVkFSfS4gQ2hlY2sgaWYgeW91ciBydW50aW1lIGVudmlyb25tZW50IHN1cHBvcnRzIGpvYiBzdW1tYXJpZXMuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGFjY2VzcyhwYXRoRnJvbUVudiwgZnNfMS5jb25zdGFudHMuUl9PSyB8IGZzXzEuY29uc3RhbnRzLldfT0spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHN1bW1hcnkgZmlsZTogJyR7cGF0aEZyb21FbnZ9Jy4gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGNvcnJlY3QgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZpbGVQYXRoID0gcGF0aEZyb21FbnY7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZVBhdGg7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcmFwcyBjb250ZW50IGluIGFuIEhUTUwgdGFnLCBhZGRpbmcgYW55IEhUTUwgYXR0cmlidXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBIVE1MIHRhZyB0byB3cmFwXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBjb250ZW50IGNvbnRlbnQgd2l0aGluIHRoZSB0YWdcbiAgICAgKiBAcGFyYW0ge1thdHRyaWJ1dGU6IHN0cmluZ106IHN0cmluZ30gYXR0cnMga2V5LXZhbHVlIGxpc3Qgb2YgSFRNTCBhdHRyaWJ1dGVzIHRvIGFkZFxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB3cmFwcGVkIGluIEhUTUwgZWxlbWVudFxuICAgICAqL1xuICAgIHdyYXAodGFnLCBjb250ZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGh0bWxBdHRycyA9IE9iamVjdC5lbnRyaWVzKGF0dHJzKVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgICR7a2V5fT1cIiR7dmFsdWV9XCJgKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT4ke2NvbnRlbnR9PC8ke3RhZ30+YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIHRleHQgaW4gdGhlIGJ1ZmZlciB0byB0aGUgc3VtbWFyeSBidWZmZXIgZmlsZSBhbmQgZW1wdGllcyBidWZmZXIuIFdpbGwgYXBwZW5kIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlXcml0ZU9wdGlvbnN9IFtvcHRpb25zXSAob3B0aW9uYWwpIG9wdGlvbnMgZm9yIHdyaXRlIG9wZXJhdGlvblxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8U3VtbWFyeT59IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB3cml0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGUgPSAhIShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub3ZlcndyaXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgdGhpcy5maWxlUGF0aCgpO1xuICAgICAgICAgICAgY29uc3Qgd3JpdGVGdW5jID0gb3ZlcndyaXRlID8gd3JpdGVGaWxlIDogYXBwZW5kRmlsZTtcbiAgICAgICAgICAgIHlpZWxkIHdyaXRlRnVuYyhmaWxlUGF0aCwgdGhpcy5fYnVmZmVyLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eUJ1ZmZlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBzdW1tYXJ5IGJ1ZmZlciBhbmQgd2lwZXMgdGhlIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5QnVmZmVyKCkud3JpdGUoeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN1bW1hcnkgYnVmZmVyIGFzIGEgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJpbmcgb2Ygc3VtbWFyeSBidWZmZXJcbiAgICAgKi9cbiAgICBzdHJpbmdpZnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzdW1tYXJ5IGJ1ZmZlciBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlbn0gdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5XG4gICAgICovXG4gICAgaXNFbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgc3VtbWFyeSBidWZmZXIgd2l0aG91dCB3cml0aW5nIHRvIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBlbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gJyc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHJhdyB0ZXh0IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgY29udGVudCB0byBhZGRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRFT0w9ZmFsc2VdIChvcHRpb25hbCkgYXBwZW5kIGFuIEVPTCB0byB0aGUgcmF3IHRleHQgKGRlZmF1bHQ6IGZhbHNlKVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRSYXcodGV4dCwgYWRkRU9MID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyICs9IHRleHQ7XG4gICAgICAgIHJldHVybiBhZGRFT0wgPyB0aGlzLmFkZEVPTCgpIDogdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgb3BlcmF0aW5nIHN5c3RlbS1zcGVjaWZpYyBlbmQtb2YtbGluZSBtYXJrZXIgdG8gdGhlIGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRFT0woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhvc18xLkVPTCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBjb2RlYmxvY2sgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBjb250ZW50IHRvIHJlbmRlciB3aXRoaW4gZmVuY2VkIGNvZGUgYmxvY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZyAob3B0aW9uYWwpIGxhbmd1YWdlIHRvIHN5bnRheCBoaWdobGlnaHQgY29kZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRDb2RlQmxvY2soY29kZSwgbGFuZykge1xuICAgICAgICBjb25zdCBhdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIChsYW5nICYmIHsgbGFuZyB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ3ByZScsIHRoaXMud3JhcCgnY29kZScsIGNvZGUpLCBhdHRycyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpc3QgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtcyBsaXN0IG9mIGl0ZW1zIHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29yZGVyZWQ9ZmFsc2VdIChvcHRpb25hbCkgaWYgdGhlIHJlbmRlcmVkIGxpc3Qgc2hvdWxkIGJlIG9yZGVyZWQgb3Igbm90IChkZWZhdWx0OiBmYWxzZSlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkTGlzdChpdGVtcywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJztcbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gdGhpcy53cmFwKCdsaScsIGl0ZW0pKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCh0YWcsIGxpc3RJdGVtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIHRhYmxlIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdW1tYXJ5VGFibGVDZWxsW119IHJvd3MgdGFibGUgcm93c1xuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRUYWJsZShyb3dzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHJvd3NcbiAgICAgICAgICAgIC5tYXAocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gcm93XG4gICAgICAgICAgICAgICAgLm1hcChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNlbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RkJywgY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVyLCBkYXRhLCBjb2xzcGFuLCByb3dzcGFuIH0gPSBjZWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IGhlYWRlciA/ICd0aCcgOiAndGQnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoY29sc3BhbiAmJiB7IGNvbHNwYW4gfSkpLCAocm93c3BhbiAmJiB7IHJvd3NwYW4gfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAodGFnLCBkYXRhLCBhdHRycyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RyJywgY2VsbHMpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCd0YWJsZScsIHRhYmxlQm9keSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbGxhcHNhYmxlIEhUTUwgZGV0YWlscyBlbGVtZW50IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHRleHQgZm9yIHRoZSBjbG9zZWQgc3RhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBjb2xsYXBzYWJsZSBjb250ZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZERldGFpbHMobGFiZWwsIGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnZGV0YWlscycsIHRoaXMud3JhcCgnc3VtbWFyeScsIGxhYmVsKSArIGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBpbWFnZSB0YWcgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIHBhdGggdG8gdGhlIGltYWdlIHlvdSB0byBlbWJlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhbHQgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGUgaW1hZ2VcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlJbWFnZU9wdGlvbnN9IG9wdGlvbnMgKG9wdGlvbmFsKSBhZGRpdGlvbiBpbWFnZSBhdHRyaWJ1dGVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEltYWdlKHNyYywgYWx0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh3aWR0aCAmJiB7IHdpZHRoIH0pKSwgKGhlaWdodCAmJiB7IGhlaWdodCB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2ltZycsIG51bGwsIE9iamVjdC5hc3NpZ24oeyBzcmMsIGFsdCB9LCBhdHRycykpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBzZWN0aW9uIGhlYWRpbmcgZWxlbWVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgaGVhZGluZyB0ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtsZXZlbD0xXSAob3B0aW9uYWwpIHRoZSBoZWFkaW5nIGxldmVsLCBkZWZhdWx0OiAxXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEhlYWRpbmcodGV4dCwgbGV2ZWwpIHtcbiAgICAgICAgY29uc3QgdGFnID0gYGgke2xldmVsfWA7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRUYWcgPSBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2J10uaW5jbHVkZXModGFnKVxuICAgICAgICAgICAgPyB0YWdcbiAgICAgICAgICAgIDogJ2gxJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcChhbGxvd2VkVGFnLCB0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgdGhlbWF0aWMgYnJlYWsgKDxocj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRTZXBhcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2hyJywgbnVsbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpbmUgYnJlYWsgKDxicj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRCcmVhaygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYnInLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYmxvY2txdW90ZSB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IHF1b3RlIHRleHRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2l0ZSAob3B0aW9uYWwpIGNpdGF0aW9uIHVybFxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRRdW90ZSh0ZXh0LCBjaXRlKSB7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgKGNpdGUgJiYgeyBjaXRlIH0pKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYmxvY2txdW90ZScsIHRleHQsIGF0dHJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYW5jaG9yIHRhZyB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IGxpbmsgdGV4dC9jb250ZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgaHlwZXJsaW5rXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZExpbmsodGV4dCwgaHJlZikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCdhJywgdGV4dCwgeyBocmVmIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxufVxuY29uc3QgX3N1bW1hcnkgPSBuZXcgU3VtbWFyeSgpO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgYGNvcmUuc3VtbWFyeWBcbiAqL1xuZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBfc3VtbWFyeTtcbmV4cG9ydHMuc3VtbWFyeSA9IF9zdW1tYXJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VtbWFyeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gZXhwb3J0cy50b1dpbjMyUGF0aCA9IGV4cG9ydHMudG9Qb3NpeFBhdGggPSB2b2lkIDA7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbi8qKlxuICogdG9Qb3NpeFBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHBvc2l4IGZvcm0uIE9uIFdpbmRvd3MsIFxcXFwgd2lsbCBiZVxuICogcmVwbGFjZWQgd2l0aCAvLlxuICpcbiAqIEBwYXJhbSBwdGguIFBhdGggdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiBzdHJpbmcgUG9zaXggcGF0aC5cbiAqL1xuZnVuY3Rpb24gdG9Qb3NpeFBhdGgocHRoKSB7XG4gICAgcmV0dXJuIHB0aC5yZXBsYWNlKC9bXFxcXF0vZywgJy8nKTtcbn1cbmV4cG9ydHMudG9Qb3NpeFBhdGggPSB0b1Bvc2l4UGF0aDtcbi8qKlxuICogdG9XaW4zMlBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHdpbjMyIGZvcm0uIE9uIExpbnV4LCAvIHdpbGwgYmVcbiAqIHJlcGxhY2VkIHdpdGggXFxcXC5cbiAqXG4gKiBAcGFyYW0gcHRoLiBQYXRoIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4gc3RyaW5nIFdpbjMyIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvV2luMzJQYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9dL2csICdcXFxcJyk7XG59XG5leHBvcnRzLnRvV2luMzJQYXRoID0gdG9XaW4zMlBhdGg7XG4vKipcbiAqIHRvUGxhdGZvcm1QYXRoIGNvbnZlcnRzIHRoZSBnaXZlbiBwYXRoIHRvIGEgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aC4gSXQgZG9lc1xuICogdGhpcyBieSByZXBsYWNpbmcgaW5zdGFuY2VzIG9mIC8gYW5kIFxcIHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGhcbiAqIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gcHRoIFRoZSBwYXRoIHRvIHBsYXRmb3JtaXplLlxuICogQHJldHVybiBzdHJpbmcgVGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvUGxhdGZvcm1QYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9cXFxcXS9nLCBwYXRoLnNlcCk7XG59XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gdG9QbGF0Zm9ybVBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXREZXRhaWxzID0gZXhwb3J0cy5pc0xpbnV4ID0gZXhwb3J0cy5pc01hY09TID0gZXhwb3J0cy5pc1dpbmRvd3MgPSBleHBvcnRzLmFyY2ggPSBleHBvcnRzLnBsYXRmb3JtID0gdm9pZCAwO1xuY29uc3Qgb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgZXhlYyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvZXhlY1wiKSk7XG5jb25zdCBnZXRXaW5kb3dzSW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHsgc3Rkb3V0OiB2ZXJzaW9uIH0gPSB5aWVsZCBleGVjLmdldEV4ZWNPdXRwdXQoJ3Bvd2Vyc2hlbGwgLWNvbW1hbmQgXCIoR2V0LUNpbUluc3RhbmNlIC1DbGFzc05hbWUgV2luMzJfT3BlcmF0aW5nU3lzdGVtKS5WZXJzaW9uXCInLCB1bmRlZmluZWQsIHtcbiAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgeyBzdGRvdXQ6IG5hbWUgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgncG93ZXJzaGVsbCAtY29tbWFuZCBcIihHZXQtQ2ltSW5zdGFuY2UgLUNsYXNzTmFtZSBXaW4zMl9PcGVyYXRpbmdTeXN0ZW0pLkNhcHRpb25cIicsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBuYW1lLnRyaW0oKSxcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbi50cmltKClcbiAgICB9O1xufSk7XG5jb25zdCBnZXRNYWNPc0luZm8gPSAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgnc3dfdmVycycsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCB2ZXJzaW9uID0gKF9iID0gKF9hID0gc3Rkb3V0Lm1hdGNoKC9Qcm9kdWN0VmVyc2lvbjpcXHMqKC4rKS8pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgIGNvbnN0IG5hbWUgPSAoX2QgPSAoX2MgPSBzdGRvdXQubWF0Y2goL1Byb2R1Y3ROYW1lOlxccyooLispLykpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY1sxXSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogJyc7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvblxuICAgIH07XG59KTtcbmNvbnN0IGdldExpbnV4SW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSB5aWVsZCBleGVjLmdldEV4ZWNPdXRwdXQoJ2xzYl9yZWxlYXNlJywgWyctaScsICctcicsICctcyddLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSA9IHN0ZG91dC50cmltKCkuc3BsaXQoJ1xcbicpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHZlcnNpb25cbiAgICB9O1xufSk7XG5leHBvcnRzLnBsYXRmb3JtID0gb3NfMS5kZWZhdWx0LnBsYXRmb3JtKCk7XG5leHBvcnRzLmFyY2ggPSBvc18xLmRlZmF1bHQuYXJjaCgpO1xuZXhwb3J0cy5pc1dpbmRvd3MgPSBleHBvcnRzLnBsYXRmb3JtID09PSAnd2luMzInO1xuZXhwb3J0cy5pc01hY09TID0gZXhwb3J0cy5wbGF0Zm9ybSA9PT0gJ2Rhcndpbic7XG5leHBvcnRzLmlzTGludXggPSBleHBvcnRzLnBsYXRmb3JtID09PSAnbGludXgnO1xuZnVuY3Rpb24gZ2V0RGV0YWlscygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoeWllbGQgKGV4cG9ydHMuaXNXaW5kb3dzXG4gICAgICAgICAgICA/IGdldFdpbmRvd3NJbmZvKClcbiAgICAgICAgICAgIDogZXhwb3J0cy5pc01hY09TXG4gICAgICAgICAgICAgICAgPyBnZXRNYWNPc0luZm8oKVxuICAgICAgICAgICAgICAgIDogZ2V0TGludXhJbmZvKCkpKSksIHsgcGxhdGZvcm06IGV4cG9ydHMucGxhdGZvcm0sXG4gICAgICAgICAgICBhcmNoOiBleHBvcnRzLmFyY2gsXG4gICAgICAgICAgICBpc1dpbmRvd3M6IGV4cG9ydHMuaXNXaW5kb3dzLFxuICAgICAgICAgICAgaXNNYWNPUzogZXhwb3J0cy5pc01hY09TLFxuICAgICAgICAgICAgaXNMaW51eDogZXhwb3J0cy5pc0xpbnV4IH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXREZXRhaWxzID0gZ2V0RGV0YWlscztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsYXRmb3JtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wbGF0Zm9ybSA9IGV4cG9ydHMudG9QbGF0Zm9ybVBhdGggPSBleHBvcnRzLnRvV2luMzJQYXRoID0gZXhwb3J0cy50b1Bvc2l4UGF0aCA9IGV4cG9ydHMubWFya2Rvd25TdW1tYXJ5ID0gZXhwb3J0cy5zdW1tYXJ5ID0gZXhwb3J0cy5nZXRJRFRva2VuID0gZXhwb3J0cy5nZXRTdGF0ZSA9IGV4cG9ydHMuc2F2ZVN0YXRlID0gZXhwb3J0cy5ncm91cCA9IGV4cG9ydHMuZW5kR3JvdXAgPSBleHBvcnRzLnN0YXJ0R3JvdXAgPSBleHBvcnRzLmluZm8gPSBleHBvcnRzLm5vdGljZSA9IGV4cG9ydHMud2FybmluZyA9IGV4cG9ydHMuZXJyb3IgPSBleHBvcnRzLmRlYnVnID0gZXhwb3J0cy5pc0RlYnVnID0gZXhwb3J0cy5zZXRGYWlsZWQgPSBleHBvcnRzLnNldENvbW1hbmRFY2hvID0gZXhwb3J0cy5zZXRPdXRwdXQgPSBleHBvcnRzLmdldEJvb2xlYW5JbnB1dCA9IGV4cG9ydHMuZ2V0TXVsdGlsaW5lSW5wdXQgPSBleHBvcnRzLmdldElucHV0ID0gZXhwb3J0cy5hZGRQYXRoID0gZXhwb3J0cy5zZXRTZWNyZXQgPSBleHBvcnRzLmV4cG9ydFZhcmlhYmxlID0gZXhwb3J0cy5FeGl0Q29kZSA9IHZvaWQgMDtcbmNvbnN0IGNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRcIik7XG5jb25zdCBmaWxlX2NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2ZpbGUtY29tbWFuZFwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IG9zID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJvc1wiKSk7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbmNvbnN0IG9pZGNfdXRpbHNfMSA9IHJlcXVpcmUoXCIuL29pZGMtdXRpbHNcIik7XG4vKipcbiAqIFRoZSBjb2RlIHRvIGV4aXQgYW4gYWN0aW9uXG4gKi9cbnZhciBFeGl0Q29kZTtcbihmdW5jdGlvbiAoRXhpdENvZGUpIHtcbiAgICAvKipcbiAgICAgKiBBIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSBhY3Rpb24gd2FzIHN1Y2Nlc3NmdWxcbiAgICAgKi9cbiAgICBFeGl0Q29kZVtFeGl0Q29kZVtcIlN1Y2Nlc3NcIl0gPSAwXSA9IFwiU3VjY2Vzc1wiO1xuICAgIC8qKlxuICAgICAqIEEgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGFjdGlvbiB3YXMgYSBmYWlsdXJlXG4gICAgICovXG4gICAgRXhpdENvZGVbRXhpdENvZGVbXCJGYWlsdXJlXCJdID0gMV0gPSBcIkZhaWx1cmVcIjtcbn0pKEV4aXRDb2RlIHx8IChleHBvcnRzLkV4aXRDb2RlID0gRXhpdENvZGUgPSB7fSkpO1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVmFyaWFibGVzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNldHMgZW52IHZhcmlhYmxlIGZvciB0aGlzIGFjdGlvbiBhbmQgZnV0dXJlIGFjdGlvbnMgaW4gdGhlIGpvYlxuICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIHNldFxuICogQHBhcmFtIHZhbCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGV4cG9ydFZhcmlhYmxlKG5hbWUsIHZhbCkge1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbCA9ICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKSh2YWwpO1xuICAgIHByb2Nlc3MuZW52W25hbWVdID0gY29udmVydGVkVmFsO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9FTlYnXSB8fCAnJztcbiAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnRU5WJywgKDAsIGZpbGVfY29tbWFuZF8xLnByZXBhcmVLZXlWYWx1ZU1lc3NhZ2UpKG5hbWUsIHZhbCkpO1xuICAgIH1cbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NldC1lbnYnLCB7IG5hbWUgfSwgY29udmVydGVkVmFsKTtcbn1cbmV4cG9ydHMuZXhwb3J0VmFyaWFibGUgPSBleHBvcnRWYXJpYWJsZTtcbi8qKlxuICogUmVnaXN0ZXJzIGEgc2VjcmV0IHdoaWNoIHdpbGwgZ2V0IG1hc2tlZCBmcm9tIGxvZ3NcbiAqIEBwYXJhbSBzZWNyZXQgdmFsdWUgb2YgdGhlIHNlY3JldFxuICovXG5mdW5jdGlvbiBzZXRTZWNyZXQoc2VjcmV0KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdhZGQtbWFzaycsIHt9LCBzZWNyZXQpO1xufVxuZXhwb3J0cy5zZXRTZWNyZXQgPSBzZXRTZWNyZXQ7XG4vKipcbiAqIFByZXBlbmRzIGlucHV0UGF0aCB0byB0aGUgUEFUSCAoZm9yIHRoaXMgYWN0aW9uIGFuZCBmdXR1cmUgYWN0aW9ucylcbiAqIEBwYXJhbSBpbnB1dFBhdGhcbiAqL1xuZnVuY3Rpb24gYWRkUGF0aChpbnB1dFBhdGgpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHByb2Nlc3MuZW52WydHSVRIVUJfUEFUSCddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICAoMCwgZmlsZV9jb21tYW5kXzEuaXNzdWVGaWxlQ29tbWFuZCkoJ1BBVEgnLCBpbnB1dFBhdGgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdhZGQtcGF0aCcsIHt9LCBpbnB1dFBhdGgpO1xuICAgIH1cbiAgICBwcm9jZXNzLmVudlsnUEFUSCddID0gYCR7aW5wdXRQYXRofSR7cGF0aC5kZWxpbWl0ZXJ9JHtwcm9jZXNzLmVudlsnUEFUSCddfWA7XG59XG5leHBvcnRzLmFkZFBhdGggPSBhZGRQYXRoO1xuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBvZiBhbiBpbnB1dC5cbiAqIFVubGVzcyB0cmltV2hpdGVzcGFjZSBpcyBzZXQgdG8gZmFsc2UgaW4gSW5wdXRPcHRpb25zLCB0aGUgdmFsdWUgaXMgYWxzbyB0cmltbWVkLlxuICogUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIHZhbHVlIGlzIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbCA9IHByb2Nlc3MuZW52W2BJTlBVVF8ke25hbWUucmVwbGFjZSgvIC9nLCAnXycpLnRvVXBwZXJDYXNlKCl9YF0gfHwgJyc7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXF1aXJlZCAmJiAhdmFsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgcmVxdWlyZWQgYW5kIG5vdCBzdXBwbGllZDogJHtuYW1lfWApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyaW1XaGl0ZXNwYWNlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsLnRyaW0oKTtcbn1cbmV4cG9ydHMuZ2V0SW5wdXQgPSBnZXRJbnB1dDtcbi8qKlxuICogR2V0cyB0aGUgdmFsdWVzIG9mIGFuIG11bHRpbGluZSBpbnB1dC4gIEVhY2ggdmFsdWUgaXMgYWxzbyB0cmltbWVkLlxuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBzdHJpbmdbXVxuICpcbiAqL1xuZnVuY3Rpb24gZ2V0TXVsdGlsaW5lSW5wdXQobmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGlucHV0cyA9IGdldElucHV0KG5hbWUsIG9wdGlvbnMpXG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLmZpbHRlcih4ID0+IHggIT09ICcnKTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyaW1XaGl0ZXNwYWNlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gaW5wdXRzO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiBpbnB1dC50cmltKCkpO1xufVxuZXhwb3J0cy5nZXRNdWx0aWxpbmVJbnB1dCA9IGdldE11bHRpbGluZUlucHV0O1xuLyoqXG4gKiBHZXRzIHRoZSBpbnB1dCB2YWx1ZSBvZiB0aGUgYm9vbGVhbiB0eXBlIGluIHRoZSBZQU1MIDEuMiBcImNvcmUgc2NoZW1hXCIgc3BlY2lmaWNhdGlvbi5cbiAqIFN1cHBvcnQgYm9vbGVhbiBpbnB1dCBsaXN0OiBgdHJ1ZSB8IFRydWUgfCBUUlVFIHwgZmFsc2UgfCBGYWxzZSB8IEZBTFNFYCAuXG4gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFsc28gaW4gYm9vbGVhbiB0eXBlLlxuICogcmVmOiBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDQ5MjNcbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIGlucHV0IHRvIGdldFxuICogQHBhcmFtICAgICBvcHRpb25zICBvcHRpb25hbC4gU2VlIElucHV0T3B0aW9ucy5cbiAqIEByZXR1cm5zICAgYm9vbGVhblxuICovXG5mdW5jdGlvbiBnZXRCb29sZWFuSW5wdXQobmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHRydWVWYWx1ZSA9IFsndHJ1ZScsICdUcnVlJywgJ1RSVUUnXTtcbiAgICBjb25zdCBmYWxzZVZhbHVlID0gWydmYWxzZScsICdGYWxzZScsICdGQUxTRSddO1xuICAgIGNvbnN0IHZhbCA9IGdldElucHV0KG5hbWUsIG9wdGlvbnMpO1xuICAgIGlmICh0cnVlVmFsdWUuaW5jbHVkZXModmFsKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKGZhbHNlVmFsdWUuaW5jbHVkZXModmFsKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYElucHV0IGRvZXMgbm90IG1lZXQgWUFNTCAxLjIgXCJDb3JlIFNjaGVtYVwiIHNwZWNpZmljYXRpb246ICR7bmFtZX1cXG5gICtcbiAgICAgICAgYFN1cHBvcnQgYm9vbGVhbiBpbnB1dCBsaXN0OiBcXGB0cnVlIHwgVHJ1ZSB8IFRSVUUgfCBmYWxzZSB8IEZhbHNlIHwgRkFMU0VcXGBgKTtcbn1cbmV4cG9ydHMuZ2V0Qm9vbGVhbklucHV0ID0gZ2V0Qm9vbGVhbklucHV0O1xuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBvZiBhbiBvdXRwdXQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBvdXRwdXQgdG8gc2V0XG4gKiBAcGFyYW0gICAgIHZhbHVlICAgIHZhbHVlIHRvIHN0b3JlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHNldE91dHB1dChuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9PVVRQVVQnXSB8fCAnJztcbiAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnT1VUUFVUJywgKDAsIGZpbGVfY29tbWFuZF8xLnByZXBhcmVLZXlWYWx1ZU1lc3NhZ2UpKG5hbWUsIHZhbHVlKSk7XG4gICAgfVxuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG9zLkVPTCk7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdzZXQtb3V0cHV0JywgeyBuYW1lIH0sICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKSh2YWx1ZSkpO1xufVxuZXhwb3J0cy5zZXRPdXRwdXQgPSBzZXRPdXRwdXQ7XG4vKipcbiAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGVjaG9pbmcgb2YgY29tbWFuZHMgaW50byBzdGRvdXQgZm9yIHRoZSByZXN0IG9mIHRoZSBzdGVwLlxuICogRWNob2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGlmIEFDVElPTlNfU1RFUF9ERUJVRyBpcyBub3Qgc2V0LlxuICpcbiAqL1xuZnVuY3Rpb24gc2V0Q29tbWFuZEVjaG8oZW5hYmxlZCkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdlY2hvJywgZW5hYmxlZCA/ICdvbicgOiAnb2ZmJyk7XG59XG5leHBvcnRzLnNldENvbW1hbmRFY2hvID0gc2V0Q29tbWFuZEVjaG87XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXN1bHRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNldHMgdGhlIGFjdGlvbiBzdGF0dXMgdG8gZmFpbGVkLlxuICogV2hlbiB0aGUgYWN0aW9uIGV4aXRzIGl0IHdpbGwgYmUgd2l0aCBhbiBleGl0IGNvZGUgb2YgMVxuICogQHBhcmFtIG1lc3NhZ2UgYWRkIGVycm9yIGlzc3VlIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gc2V0RmFpbGVkKG1lc3NhZ2UpIHtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gRXhpdENvZGUuRmFpbHVyZTtcbiAgICBlcnJvcihtZXNzYWdlKTtcbn1cbmV4cG9ydHMuc2V0RmFpbGVkID0gc2V0RmFpbGVkO1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9nZ2luZyBDb21tYW5kc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLyoqXG4gKiBHZXRzIHdoZXRoZXIgQWN0aW9ucyBTdGVwIERlYnVnIGlzIG9uIG9yIG5vdFxuICovXG5mdW5jdGlvbiBpc0RlYnVnKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnUlVOTkVSX0RFQlVHJ10gPT09ICcxJztcbn1cbmV4cG9ydHMuaXNEZWJ1ZyA9IGlzRGVidWc7XG4vKipcbiAqIFdyaXRlcyBkZWJ1ZyBtZXNzYWdlIHRvIHVzZXIgbG9nXG4gKiBAcGFyYW0gbWVzc2FnZSBkZWJ1ZyBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGRlYnVnKG1lc3NhZ2UpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2RlYnVnJywge30sIG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5kZWJ1ZyA9IGRlYnVnO1xuLyoqXG4gKiBBZGRzIGFuIGVycm9yIGlzc3VlXG4gKiBAcGFyYW0gbWVzc2FnZSBlcnJvciBpc3N1ZSBtZXNzYWdlLiBFcnJvcnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHZpYSB0b1N0cmluZygpXG4gKiBAcGFyYW0gcHJvcGVydGllcyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGFkZCB0byB0aGUgYW5ub3RhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZXJyb3IobWVzc2FnZSwgcHJvcGVydGllcyA9IHt9KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdlcnJvcicsICgwLCB1dGlsc18xLnRvQ29tbWFuZFByb3BlcnRpZXMpKHByb3BlcnRpZXMpLCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IgPyBtZXNzYWdlLnRvU3RyaW5nKCkgOiBtZXNzYWdlKTtcbn1cbmV4cG9ydHMuZXJyb3IgPSBlcnJvcjtcbi8qKlxuICogQWRkcyBhIHdhcm5pbmcgaXNzdWVcbiAqIEBwYXJhbSBtZXNzYWdlIHdhcm5pbmcgaXNzdWUgbWVzc2FnZS4gRXJyb3JzIHdpbGwgYmUgY29udmVydGVkIHRvIHN0cmluZyB2aWEgdG9TdHJpbmcoKVxuICogQHBhcmFtIHByb3BlcnRpZXMgb3B0aW9uYWwgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIGFubm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSwgcHJvcGVydGllcyA9IHt9KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCd3YXJuaW5nJywgKDAsIHV0aWxzXzEudG9Db21tYW5kUHJvcGVydGllcykocHJvcGVydGllcyksIG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciA/IG1lc3NhZ2UudG9TdHJpbmcoKSA6IG1lc3NhZ2UpO1xufVxuZXhwb3J0cy53YXJuaW5nID0gd2FybmluZztcbi8qKlxuICogQWRkcyBhIG5vdGljZSBpc3N1ZVxuICogQHBhcmFtIG1lc3NhZ2Ugbm90aWNlIGlzc3VlIG1lc3NhZ2UuIEVycm9ycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgdmlhIHRvU3RyaW5nKClcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBub3RpY2UobWVzc2FnZSwgcHJvcGVydGllcyA9IHt9KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdub3RpY2UnLCAoMCwgdXRpbHNfMS50b0NvbW1hbmRQcm9wZXJ0aWVzKShwcm9wZXJ0aWVzKSwgbWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yID8gbWVzc2FnZS50b1N0cmluZygpIDogbWVzc2FnZSk7XG59XG5leHBvcnRzLm5vdGljZSA9IG5vdGljZTtcbi8qKlxuICogV3JpdGVzIGluZm8gdG8gbG9nIHdpdGggY29uc29sZS5sb2cuXG4gKiBAcGFyYW0gbWVzc2FnZSBpbmZvIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gaW5mbyhtZXNzYWdlKSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUobWVzc2FnZSArIG9zLkVPTCk7XG59XG5leHBvcnRzLmluZm8gPSBpbmZvO1xuLyoqXG4gKiBCZWdpbiBhbiBvdXRwdXQgZ3JvdXAuXG4gKlxuICogT3V0cHV0IHVudGlsIHRoZSBuZXh0IGBncm91cEVuZGAgd2lsbCBiZSBmb2xkYWJsZSBpbiB0aGlzIGdyb3VwXG4gKlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBncm91cFxuICovXG5mdW5jdGlvbiBzdGFydEdyb3VwKG5hbWUpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlKSgnZ3JvdXAnLCBuYW1lKTtcbn1cbmV4cG9ydHMuc3RhcnRHcm91cCA9IHN0YXJ0R3JvdXA7XG4vKipcbiAqIEVuZCBhbiBvdXRwdXQgZ3JvdXAuXG4gKi9cbmZ1bmN0aW9uIGVuZEdyb3VwKCkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdlbmRncm91cCcpO1xufVxuZXhwb3J0cy5lbmRHcm91cCA9IGVuZEdyb3VwO1xuLyoqXG4gKiBXcmFwIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjYWxsIGluIGEgZ3JvdXAuXG4gKlxuICogUmV0dXJucyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBmdW5jdGlvbiBpdHNlbGYuXG4gKlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGdyb3VwXG4gKiBAcGFyYW0gZm4gVGhlIGZ1bmN0aW9uIHRvIHdyYXAgaW4gdGhlIGdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdyb3VwKG5hbWUsIGZuKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgc3RhcnRHcm91cChuYW1lKTtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBlbmRHcm91cCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG59XG5leHBvcnRzLmdyb3VwID0gZ3JvdXA7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBXcmFwcGVyIGFjdGlvbiBzdGF0ZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLyoqXG4gKiBTYXZlcyBzdGF0ZSBmb3IgY3VycmVudCBhY3Rpb24sIHRoZSBzdGF0ZSBjYW4gb25seSBiZSByZXRyaWV2ZWQgYnkgdGhpcyBhY3Rpb24ncyBwb3N0IGpvYiBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBzdGF0ZSB0byBzdG9yZVxuICogQHBhcmFtICAgICB2YWx1ZSAgICB2YWx1ZSB0byBzdG9yZS4gTm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdmlhIEpTT04uc3RyaW5naWZ5XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBzYXZlU3RhdGUobmFtZSwgdmFsdWUpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHByb2Nlc3MuZW52WydHSVRIVUJfU1RBVEUnXSB8fCAnJztcbiAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnU1RBVEUnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdzYXZlLXN0YXRlJywgeyBuYW1lIH0sICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKSh2YWx1ZSkpO1xufVxuZXhwb3J0cy5zYXZlU3RhdGUgPSBzYXZlU3RhdGU7XG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGFuIHN0YXRlIHNldCBieSB0aGlzIGFjdGlvbidzIG1haW4gZXhlY3V0aW9uLlxuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgc3RhdGUgdG8gZ2V0XG4gKiBAcmV0dXJucyAgIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRTdGF0ZShuYW1lKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W2BTVEFURV8ke25hbWV9YF0gfHwgJyc7XG59XG5leHBvcnRzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG5mdW5jdGlvbiBnZXRJRFRva2VuKGF1ZCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBvaWRjX3V0aWxzXzEuT2lkY0NsaWVudC5nZXRJRFRva2VuKGF1ZCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldElEVG9rZW4gPSBnZXRJRFRva2VuO1xuLyoqXG4gKiBTdW1tYXJ5IGV4cG9ydHNcbiAqL1xudmFyIHN1bW1hcnlfMSA9IHJlcXVpcmUoXCIuL3N1bW1hcnlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdW1tYXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdW1tYXJ5XzEuc3VtbWFyeTsgfSB9KTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIGNvcmUuc3VtbWFyeVxuICovXG52YXIgc3VtbWFyeV8yID0gcmVxdWlyZShcIi4vc3VtbWFyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcmtkb3duU3VtbWFyeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3VtbWFyeV8yLm1hcmtkb3duU3VtbWFyeTsgfSB9KTtcbi8qKlxuICogUGF0aCBleHBvcnRzXG4gKi9cbnZhciBwYXRoX3V0aWxzXzEgPSByZXF1aXJlKFwiLi9wYXRoLXV0aWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9Qb3NpeFBhdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhdGhfdXRpbHNfMS50b1Bvc2l4UGF0aDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRvV2luMzJQYXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXRoX3V0aWxzXzEudG9XaW4zMlBhdGg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b1BsYXRmb3JtUGF0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGF0aF91dGlsc18xLnRvUGxhdGZvcm1QYXRoOyB9IH0pO1xuLyoqXG4gKiBQbGF0Zm9ybSB1dGlsaXRpZXMgZXhwb3J0c1xuICovXG5leHBvcnRzLnBsYXRmb3JtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtUaW1lb3V0ID0gZXhwb3J0cy5nZXRDb25jdXJyZW5jeSA9IGV4cG9ydHMuZ2V0R2l0SHViV29ya3NwYWNlRGlyID0gZXhwb3J0cy5pc0doZXMgPSBleHBvcnRzLmdldFJlc3VsdHNTZXJ2aWNlVXJsID0gZXhwb3J0cy5nZXRSdW50aW1lVG9rZW4gPSBleHBvcnRzLmdldFVwbG9hZENodW5rU2l6ZSA9IHZvaWQgMDtcbmNvbnN0IG9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm9zXCIpKTtcbi8vIFVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSBoaWdoV2F0ZXJNYXJrIHZhbHVlIG9mIHRoZSB6aXAgdGhhdCBpcyBiZWluZyBzdHJlYW1lZFxuLy8gVGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBhcyB0aGUgY2h1bmsgc2l6ZSB0aGF0IGlzIHVzZSBkdXJpbmcgdXBsb2FkIHRvIGJsb2Igc3RvcmFnZVxuZnVuY3Rpb24gZ2V0VXBsb2FkQ2h1bmtTaXplKCkge1xuICAgIHJldHVybiA4ICogMTAyNCAqIDEwMjQ7IC8vIDggTUIgQ2h1bmtzXG59XG5leHBvcnRzLmdldFVwbG9hZENodW5rU2l6ZSA9IGdldFVwbG9hZENodW5rU2l6ZTtcbmZ1bmN0aW9uIGdldFJ1bnRpbWVUb2tlbigpIHtcbiAgICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52WydBQ1RJT05TX1JVTlRJTUVfVE9LRU4nXTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCB0aGUgQUNUSU9OU19SVU5USU1FX1RPS0VOIGVudiB2YXJpYWJsZScpO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW47XG59XG5leHBvcnRzLmdldFJ1bnRpbWVUb2tlbiA9IGdldFJ1bnRpbWVUb2tlbjtcbmZ1bmN0aW9uIGdldFJlc3VsdHNTZXJ2aWNlVXJsKCkge1xuICAgIGNvbnN0IHJlc3VsdHNVcmwgPSBwcm9jZXNzLmVudlsnQUNUSU9OU19SRVNVTFRTX1VSTCddO1xuICAgIGlmICghcmVzdWx0c1VybCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBnZXQgdGhlIEFDVElPTlNfUkVTVUxUU19VUkwgZW52IHZhcmlhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVVJMKHJlc3VsdHNVcmwpLm9yaWdpbjtcbn1cbmV4cG9ydHMuZ2V0UmVzdWx0c1NlcnZpY2VVcmwgPSBnZXRSZXN1bHRzU2VydmljZVVybDtcbmZ1bmN0aW9uIGlzR2hlcygpIHtcbiAgICBjb25zdCBnaFVybCA9IG5ldyBVUkwocHJvY2Vzcy5lbnZbJ0dJVEhVQl9TRVJWRVJfVVJMJ10gfHwgJ2h0dHBzOi8vZ2l0aHViLmNvbScpO1xuICAgIGNvbnN0IGhvc3RuYW1lID0gZ2hVcmwuaG9zdG5hbWUudHJpbUVuZCgpLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgaXNHaXRIdWJIb3N0ID0gaG9zdG5hbWUgPT09ICdHSVRIVUIuQ09NJztcbiAgICBjb25zdCBpc0doZUhvc3QgPSBob3N0bmFtZS5lbmRzV2l0aCgnLkdIRS5DT00nKTtcbiAgICBjb25zdCBpc0xvY2FsSG9zdCA9IGhvc3RuYW1lLmVuZHNXaXRoKCcuTE9DQUxIT1NUJyk7XG4gICAgcmV0dXJuICFpc0dpdEh1Ykhvc3QgJiYgIWlzR2hlSG9zdCAmJiAhaXNMb2NhbEhvc3Q7XG59XG5leHBvcnRzLmlzR2hlcyA9IGlzR2hlcztcbmZ1bmN0aW9uIGdldEdpdEh1YldvcmtzcGFjZURpcigpIHtcbiAgICBjb25zdCBnaFdvcmtzcGFjZURpciA9IHByb2Nlc3MuZW52WydHSVRIVUJfV09SS1NQQUNFJ107XG4gICAgaWYgKCFnaFdvcmtzcGFjZURpcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBnZXQgdGhlIEdJVEhVQl9XT1JLU1BBQ0UgZW52IHZhcmlhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiBnaFdvcmtzcGFjZURpcjtcbn1cbmV4cG9ydHMuZ2V0R2l0SHViV29ya3NwYWNlRGlyID0gZ2V0R2l0SHViV29ya3NwYWNlRGlyO1xuLy8gTWltaWNzIGJlaGF2aW9yIG9mIGF6Y29weTogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3N0b3JhZ2UvY29tbW9uL3N0b3JhZ2UtdXNlLWF6Y29weS1vcHRpbWl6ZVxuLy8gSWYgeW91ciBtYWNoaW5lIGhhcyBmZXdlciB0aGFuIDUgQ1BVcywgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gMzIuXG4vLyBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGVxdWFsIHRvIDE2IG11bHRpcGxpZWQgYnkgdGhlIG51bWJlciBvZiBDUFVzLiBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIDMwMC5cbmZ1bmN0aW9uIGdldENvbmN1cnJlbmN5KCkge1xuICAgIGNvbnN0IG51bUNQVXMgPSBvc18xLmRlZmF1bHQuY3B1cygpLmxlbmd0aDtcbiAgICBpZiAobnVtQ1BVcyA8PSA0KSB7XG4gICAgICAgIHJldHVybiAzMjtcbiAgICB9XG4gICAgY29uc3QgY29uY3VycmVuY3kgPSAxNiAqIG51bUNQVXM7XG4gICAgcmV0dXJuIGNvbmN1cnJlbmN5ID4gMzAwID8gMzAwIDogY29uY3VycmVuY3k7XG59XG5leHBvcnRzLmdldENvbmN1cnJlbmN5ID0gZ2V0Q29uY3VycmVuY3k7XG5mdW5jdGlvbiBnZXRVcGxvYWRDaHVua1RpbWVvdXQoKSB7XG4gICAgcmV0dXJuIDMwMDAwMDsgLy8gNSBtaW51dGVzXG59XG5leHBvcnRzLmdldFVwbG9hZENodW5rVGltZW91dCA9IGdldFVwbG9hZENodW5rVGltZW91dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0pzb25PYmplY3QgPSBleHBvcnRzLnR5cGVvZkpzb25WYWx1ZSA9IHZvaWQgMDtcbi8qKlxuICogR2V0IHRoZSB0eXBlIG9mIGEgSlNPTiB2YWx1ZS5cbiAqIERpc3Rpbmd1aXNoZXMgYmV0d2VlbiBhcnJheSwgbnVsbCBhbmQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiB0eXBlb2ZKc29uVmFsdWUodmFsdWUpIHtcbiAgICBsZXQgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICBpZiAodCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59XG5leHBvcnRzLnR5cGVvZkpzb25WYWx1ZSA9IHR5cGVvZkpzb25WYWx1ZTtcbi8qKlxuICogSXMgdGhpcyBhIEpTT04gb2JqZWN0IChpbnN0ZWFkIG9mIGFuIGFycmF5IG9yIG51bGwpP1xuICovXG5mdW5jdGlvbiBpc0pzb25PYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0cy5pc0pzb25PYmplY3QgPSBpc0pzb25PYmplY3Q7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iYXNlNjRlbmNvZGUgPSBleHBvcnRzLmJhc2U2NGRlY29kZSA9IHZvaWQgMDtcbi8vIGxvb2t1cCB0YWJsZSBmcm9tIGJhc2U2NCBjaGFyYWN0ZXIgdG8gYnl0ZVxubGV0IGVuY1RhYmxlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcbi8vIGxvb2t1cCB0YWJsZSBmcm9tIGJhc2U2NCBjaGFyYWN0ZXIgKmNvZGUqIHRvIGJ5dGUgYmVjYXVzZSBsb29rdXAgYnkgbnVtYmVyIGlzIGZhc3RcbmxldCBkZWNUYWJsZSA9IFtdO1xuZm9yIChsZXQgaSA9IDA7IGkgPCBlbmNUYWJsZS5sZW5ndGg7IGkrKylcbiAgICBkZWNUYWJsZVtlbmNUYWJsZVtpXS5jaGFyQ29kZUF0KDApXSA9IGk7XG4vLyBzdXBwb3J0IGJhc2U2NHVybCB2YXJpYW50c1xuZGVjVGFibGVbXCItXCIuY2hhckNvZGVBdCgwKV0gPSBlbmNUYWJsZS5pbmRleE9mKFwiK1wiKTtcbmRlY1RhYmxlW1wiX1wiLmNoYXJDb2RlQXQoMCldID0gZW5jVGFibGUuaW5kZXhPZihcIi9cIik7XG4vKipcbiAqIERlY29kZXMgYSBiYXNlNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheS5cbiAqXG4gKiAtIGlnbm9yZXMgd2hpdGUtc3BhY2UsIGluY2x1ZGluZyBsaW5lIGJyZWFrcyBhbmQgdGFic1xuICogLSBhbGxvd3MgaW5uZXIgcGFkZGluZyAoY2FuIGRlY29kZSBjb25jYXRlbmF0ZWQgYmFzZTY0IHN0cmluZ3MpXG4gKiAtIGRvZXMgbm90IHJlcXVpcmUgcGFkZGluZ1xuICogLSB1bmRlcnN0YW5kcyBiYXNlNjR1cmwgZW5jb2Rpbmc6XG4gKiAgIFwiLVwiIGluc3RlYWQgb2YgXCIrXCIsXG4gKiAgIFwiX1wiIGluc3RlYWQgb2YgXCIvXCIsXG4gKiAgIG5vIHBhZGRpbmdcbiAqL1xuZnVuY3Rpb24gYmFzZTY0ZGVjb2RlKGJhc2U2NFN0cikge1xuICAgIC8vIGVzdGltYXRlIGJ5dGUgc2l6ZSwgbm90IGFjY291bnRpbmcgZm9yIGlubmVyIHBhZGRpbmcgYW5kIHdoaXRlc3BhY2VcbiAgICBsZXQgZXMgPSBiYXNlNjRTdHIubGVuZ3RoICogMyAvIDQ7XG4gICAgLy8gaWYgKGVzICUgMyAhPT0gMClcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTY0IHN0cmluZycpO1xuICAgIGlmIChiYXNlNjRTdHJbYmFzZTY0U3RyLmxlbmd0aCAtIDJdID09ICc9JylcbiAgICAgICAgZXMgLT0gMjtcbiAgICBlbHNlIGlmIChiYXNlNjRTdHJbYmFzZTY0U3RyLmxlbmd0aCAtIDFdID09ICc9JylcbiAgICAgICAgZXMgLT0gMTtcbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheShlcyksIGJ5dGVQb3MgPSAwLCAvLyBwb3NpdGlvbiBpbiBieXRlIGFycmF5XG4gICAgZ3JvdXBQb3MgPSAwLCAvLyBwb3NpdGlvbiBpbiBiYXNlNjQgZ3JvdXBcbiAgICBiLCAvLyBjdXJyZW50IGJ5dGVcbiAgICBwID0gMCAvLyBwcmV2aW91cyBieXRlXG4gICAgO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFzZTY0U3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGIgPSBkZWNUYWJsZVtiYXNlNjRTdHIuY2hhckNvZGVBdChpKV07XG4gICAgICAgIGlmIChiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgICAgIHN3aXRjaCAoYmFzZTY0U3RyW2ldKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnPSc6XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMDsgLy8gcmVzZXQgc3RhdGUgd2hlbiBwYWRkaW5nIGZvdW5kXG4gICAgICAgICAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgICAgICAgICBjYXNlICdcXHInOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1xcdCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIHdoaXRlLXNwYWNlLCBhbmQgcGFkZGluZ1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBpbnZhbGlkIGJhc2U2NCBzdHJpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChncm91cFBvcykge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHAgPSBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBieXRlc1tieXRlUG9zKytdID0gcCA8PCAyIHwgKGIgJiA0OCkgPj4gNDtcbiAgICAgICAgICAgICAgICBwID0gYjtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgYnl0ZXNbYnl0ZVBvcysrXSA9IChwICYgMTUpIDw8IDQgfCAoYiAmIDYwKSA+PiAyO1xuICAgICAgICAgICAgICAgIHAgPSBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBieXRlc1tieXRlUG9zKytdID0gKHAgJiAzKSA8PCA2IHwgYjtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGdyb3VwUG9zID09IDEpXG4gICAgICAgIHRocm93IEVycm9yKGBpbnZhbGlkIGJhc2U2NCBzdHJpbmcuYCk7XG4gICAgcmV0dXJuIGJ5dGVzLnN1YmFycmF5KDAsIGJ5dGVQb3MpO1xufVxuZXhwb3J0cy5iYXNlNjRkZWNvZGUgPSBiYXNlNjRkZWNvZGU7XG4vKipcbiAqIEVuY29kZXMgYSBieXRlIGFycmF5IHRvIGEgYmFzZTY0IHN0cmluZy5cbiAqIEFkZHMgcGFkZGluZyBhdCB0aGUgZW5kLlxuICogRG9lcyBub3QgaW5zZXJ0IG5ld2xpbmVzLlxuICovXG5mdW5jdGlvbiBiYXNlNjRlbmNvZGUoYnl0ZXMpIHtcbiAgICBsZXQgYmFzZTY0ID0gJycsIGdyb3VwUG9zID0gMCwgLy8gcG9zaXRpb24gaW4gYmFzZTY0IGdyb3VwXG4gICAgYiwgLy8gY3VycmVudCBieXRlXG4gICAgcCA9IDA7IC8vIGNhcnJ5IG92ZXIgZnJvbSBwcmV2aW91cyBieXRlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBiID0gYnl0ZXNbaV07XG4gICAgICAgIHN3aXRjaCAoZ3JvdXBQb3MpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbYiA+PiAyXTtcbiAgICAgICAgICAgICAgICBwID0gKGIgJiAzKSA8PCA0O1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbcCB8IGIgPj4gNF07XG4gICAgICAgICAgICAgICAgcCA9IChiICYgMTUpIDw8IDI7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtwIHwgYiA+PiA2XTtcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbYiAmIDYzXTtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gcGFkZGluZyByZXF1aXJlZD9cbiAgICBpZiAoZ3JvdXBQb3MpIHtcbiAgICAgICAgYmFzZTY0ICs9IGVuY1RhYmxlW3BdO1xuICAgICAgICBiYXNlNjQgKz0gJz0nO1xuICAgICAgICBpZiAoZ3JvdXBQb3MgPT0gMSlcbiAgICAgICAgICAgIGJhc2U2NCArPSAnPSc7XG4gICAgfVxuICAgIHJldHVybiBiYXNlNjQ7XG59XG5leHBvcnRzLmJhc2U2NGVuY29kZSA9IGJhc2U2NGVuY29kZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIERhbmllbCBXaXJ0eiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4vLyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbi8vICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuLy8gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuLy8gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIGl0cyBhdXRob3IsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9yc1xuLy8gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmVcbi8vICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51dGY4cmVhZCA9IHZvaWQgMDtcbmNvbnN0IGZyb21DaGFyQ29kZXMgPSAoY2h1bmspID0+IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuayk7XG4vKipcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gd2lsbCBubyBsb25nZXIgYmUgZXhwb3J0ZWQgd2l0aCB0aGUgbmV4dCBtYWpvclxuICogcmVsZWFzZSwgc2luY2UgcHJvdG9idWYtdHMgaGFzIHN3aXRjaCB0byBUZXh0RGVjb2RlciBBUEkuIElmIHlvdSBuZWVkIHRoaXNcbiAqIGZ1bmN0aW9uLCBwbGVhc2UgbWlncmF0ZSB0byBAcHJvdG9idWZqcy91dGY4LiBGb3IgY29udGV4dCwgc2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGltb3N0YW1tL3Byb3RvYnVmLXRzL2lzc3Vlcy8xODRcbiAqXG4gKiBSZWFkcyBVVEY4IGJ5dGVzIGFzIGEgc3RyaW5nLlxuICpcbiAqIFNlZSBbcHJvdG9idWZqcyAvIHV0ZjhdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2J1ZmpzL3Byb3RvYnVmLmpzL2Jsb2IvOTg5M2UzNWI4NTQ2MjFjY2U2NGFmNGJmNmJlMmNmZjRmYjg5Mjc5Ni9saWIvdXRmOC9pbmRleC5qcyNMNDApXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LCBEYW5pZWwgV2lydHpcbiAqL1xuZnVuY3Rpb24gdXRmOHJlYWQoYnl0ZXMpIHtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoIDwgMSlcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgbGV0IHBvcyA9IDAsIC8vIHBvc2l0aW9uIGluIGJ5dGVzXG4gICAgcGFydHMgPSBbXSwgY2h1bmsgPSBbXSwgaSA9IDAsIC8vIGNoYXIgb2Zmc2V0XG4gICAgdDsgLy8gdGVtcG9yYXJ5XG4gICAgbGV0IGxlbiA9IGJ5dGVzLmxlbmd0aDtcbiAgICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgICAgIHQgPSBieXRlc1twb3MrK107XG4gICAgICAgIGlmICh0IDwgMTI4KVxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IHQ7XG4gICAgICAgIGVsc2UgaWYgKHQgPiAxOTEgJiYgdCA8IDIyNClcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAodCAmIDMxKSA8PCA2IHwgYnl0ZXNbcG9zKytdICYgNjM7XG4gICAgICAgIGVsc2UgaWYgKHQgPiAyMzkgJiYgdCA8IDM2NSkge1xuICAgICAgICAgICAgdCA9ICgodCAmIDcpIDw8IDE4IHwgKGJ5dGVzW3BvcysrXSAmIDYzKSA8PCAxMiB8IChieXRlc1twb3MrK10gJiA2MykgPDwgNiB8IGJ5dGVzW3BvcysrXSAmIDYzKSAtIDB4MTAwMDA7XG4gICAgICAgICAgICBjaHVua1tpKytdID0gMHhEODAwICsgKHQgPj4gMTApO1xuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IDB4REMwMCArICh0ICYgMTAyMyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMTUpIDw8IDEyIHwgKGJ5dGVzW3BvcysrXSAmIDYzKSA8PCA2IHwgYnl0ZXNbcG9zKytdICYgNjM7XG4gICAgICAgIGlmIChpID4gODE5MSkge1xuICAgICAgICAgICAgcGFydHMucHVzaChmcm9tQ2hhckNvZGVzKGNodW5rKSk7XG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFydHMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChpKVxuICAgICAgICAgICAgcGFydHMucHVzaChmcm9tQ2hhckNvZGVzKGNodW5rLnNsaWNlKDAsIGkpKSk7XG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbUNoYXJDb2RlcyhjaHVuay5zbGljZSgwLCBpKSk7XG59XG5leHBvcnRzLnV0ZjhyZWFkID0gdXRmOHJlYWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5XaXJlVHlwZSA9IGV4cG9ydHMubWVyZ2VCaW5hcnlPcHRpb25zID0gZXhwb3J0cy5Vbmtub3duRmllbGRIYW5kbGVyID0gdm9pZCAwO1xuLyoqXG4gKiBUaGlzIGhhbmRsZXIgaW1wbGVtZW50cyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIHVua25vd24gZmllbGRzLlxuICogV2hlbiByZWFkaW5nIGRhdGEsIHVua25vd24gZmllbGRzIGFyZSBzdG9yZWQgb24gdGhlIG1lc3NhZ2UsIGluIGFcbiAqIHN5bWJvbCBwcm9wZXJ0eS5cbiAqIFdoZW4gd3JpdGluZyBkYXRhLCB0aGUgc3ltYm9sIHByb3BlcnR5IGlzIHF1ZXJpZWQgYW5kIHVua25vd24gZmllbGRzXG4gKiBhcmUgc2VyaWFsaXplZCBpbnRvIHRoZSBvdXRwdXQgYWdhaW4uXG4gKi9cbnZhciBVbmtub3duRmllbGRIYW5kbGVyO1xuKGZ1bmN0aW9uIChVbmtub3duRmllbGRIYW5kbGVyKSB7XG4gICAgLyoqXG4gICAgICogVGhlIHN5bWJvbCB1c2VkIHRvIHN0b3JlIHVua25vd24gZmllbGRzIGZvciBhIG1lc3NhZ2UuXG4gICAgICogVGhlIHByb3BlcnR5IG11c3QgY29uZm9ybSB0byBgVW5rbm93bkZpZWxkQ29udGFpbmVyYC5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbCA9IFN5bWJvbC5mb3IoXCJwcm90b2J1Zi10cy91bmtub3duXCIpO1xuICAgIC8qKlxuICAgICAqIFN0b3JlIGFuIHVua25vd24gZmllbGQgZHVyaW5nIGJpbmFyeSByZWFkIGRpcmVjdGx5IG9uIHRoZSBtZXNzYWdlLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNvbXBhdGlibGUgd2l0aCBgQmluYXJ5UmVhZE9wdGlvbnMucmVhZFVua25vd25GaWVsZGAuXG4gICAgICovXG4gICAgVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgPSAodHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkYXRhKSA9PiB7XG4gICAgICAgIGxldCBjb250YWluZXIgPSBpcyhtZXNzYWdlKSA/IG1lc3NhZ2VbVW5rbm93bkZpZWxkSGFuZGxlci5zeW1ib2xdIDogbWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF0gPSBbXTtcbiAgICAgICAgY29udGFpbmVyLnB1c2goeyBubzogZmllbGRObywgd2lyZVR5cGUsIGRhdGEgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBXcml0ZSB1bmtub3duIGZpZWxkcyBzdG9yZWQgZm9yIHRoZSBtZXNzYWdlIHRvIHRoZSB3cml0ZXIuXG4gICAgICogVGhpcyBtZXRob2QgaXMgY29tcGF0aWJsZSB3aXRoIGBCaW5hcnlXcml0ZU9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzYC5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgPSAodHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcikgPT4ge1xuICAgICAgICBmb3IgKGxldCB7IG5vLCB3aXJlVHlwZSwgZGF0YSB9IG9mIFVua25vd25GaWVsZEhhbmRsZXIubGlzdChtZXNzYWdlKSlcbiAgICAgICAgICAgIHdyaXRlci50YWcobm8sIHdpcmVUeXBlKS5yYXcoZGF0YSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBMaXN0IHVua25vd24gZmllbGRzIHN0b3JlZCBmb3IgdGhlIG1lc3NhZ2UuXG4gICAgICogTm90ZSB0aGF0IHRoZXJlIG1heSBiZSBtdWx0aXBsZXMgZmllbGRzIHdpdGggdGhlIHNhbWUgbnVtYmVyLlxuICAgICAqL1xuICAgIFVua25vd25GaWVsZEhhbmRsZXIubGlzdCA9IChtZXNzYWdlLCBmaWVsZE5vKSA9PiB7XG4gICAgICAgIGlmIChpcyhtZXNzYWdlKSkge1xuICAgICAgICAgICAgbGV0IGFsbCA9IG1lc3NhZ2VbVW5rbm93bkZpZWxkSGFuZGxlci5zeW1ib2xdO1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkTm8gPyBhbGwuZmlsdGVyKHVmID0+IHVmLm5vID09IGZpZWxkTm8pIDogYWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxhc3QgdW5rbm93biBmaWVsZCBieSBmaWVsZCBudW1iZXIuXG4gICAgICovXG4gICAgVW5rbm93bkZpZWxkSGFuZGxlci5sYXN0ID0gKG1lc3NhZ2UsIGZpZWxkTm8pID0+IFVua25vd25GaWVsZEhhbmRsZXIubGlzdChtZXNzYWdlLCBmaWVsZE5vKS5zbGljZSgtMSlbMF07XG4gICAgY29uc3QgaXMgPSAobWVzc2FnZSkgPT4gbWVzc2FnZSAmJiBBcnJheS5pc0FycmF5KG1lc3NhZ2VbVW5rbm93bkZpZWxkSGFuZGxlci5zeW1ib2xdKTtcbn0pKFVua25vd25GaWVsZEhhbmRsZXIgPSBleHBvcnRzLlVua25vd25GaWVsZEhhbmRsZXIgfHwgKGV4cG9ydHMuVW5rbm93bkZpZWxkSGFuZGxlciA9IHt9KSk7XG4vKipcbiAqIE1lcmdlcyBiaW5hcnkgd3JpdGUgb3IgcmVhZCBvcHRpb25zLiBMYXRlciB2YWx1ZXMgb3ZlcnJpZGUgZWFybGllciB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQmluYXJ5T3B0aW9ucyhhLCBiKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpO1xufVxuZXhwb3J0cy5tZXJnZUJpbmFyeU9wdGlvbnMgPSBtZXJnZUJpbmFyeU9wdGlvbnM7XG4vKipcbiAqIFByb3RvYnVmIGJpbmFyeSBmb3JtYXQgd2lyZSB0eXBlcy5cbiAqXG4gKiBBIHdpcmUgdHlwZSBwcm92aWRlcyBqdXN0IGVub3VnaCBpbmZvcm1hdGlvbiB0byBmaW5kIHRoZSBsZW5ndGggb2YgdGhlXG4gKiBmb2xsb3dpbmcgdmFsdWUuXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9lbmNvZGluZyNzdHJ1Y3R1cmVcbiAqL1xudmFyIFdpcmVUeXBlO1xuKGZ1bmN0aW9uIChXaXJlVHlwZSkge1xuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGludDMyLCBpbnQ2NCwgdWludDMyLCB1aW50NjQsIHNpbnQzMiwgc2ludDY0LCBib29sLCBlbnVtXG4gICAgICovXG4gICAgV2lyZVR5cGVbV2lyZVR5cGVbXCJWYXJpbnRcIl0gPSAwXSA9IFwiVmFyaW50XCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgZml4ZWQ2NCwgc2ZpeGVkNjQsIGRvdWJsZS5cbiAgICAgKiBBbHdheXMgOCBieXRlcyB3aXRoIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlci5cbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIkJpdDY0XCJdID0gMV0gPSBcIkJpdDY0XCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3Igc3RyaW5nLCBieXRlcywgZW1iZWRkZWQgbWVzc2FnZXMsIHBhY2tlZCByZXBlYXRlZCBmaWVsZHNcbiAgICAgKlxuICAgICAqIE9ubHkgcmVwZWF0ZWQgbnVtZXJpYyB0eXBlcyAodHlwZXMgd2hpY2ggdXNlIHRoZSB2YXJpbnQsIDMyLWJpdCxcbiAgICAgKiBvciA2NC1iaXQgd2lyZSB0eXBlcykgY2FuIGJlIHBhY2tlZC4gSW4gcHJvdG8zLCBzdWNoIGZpZWxkcyBhcmVcbiAgICAgKiBwYWNrZWQgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIkxlbmd0aERlbGltaXRlZFwiXSA9IDJdID0gXCJMZW5ndGhEZWxpbWl0ZWRcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBncm91cHNcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiU3RhcnRHcm91cFwiXSA9IDNdID0gXCJTdGFydEdyb3VwXCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgZ3JvdXBzXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIkVuZEdyb3VwXCJdID0gNF0gPSBcIkVuZEdyb3VwXCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgZml4ZWQzMiwgc2ZpeGVkMzIsIGZsb2F0LlxuICAgICAqIEFsd2F5cyA0IGJ5dGVzIHdpdGggbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyLlxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiQml0MzJcIl0gPSA1XSA9IFwiQml0MzJcIjtcbn0pKFdpcmVUeXBlID0gZXhwb3J0cy5XaXJlVHlwZSB8fCAoZXhwb3J0cy5XaXJlVHlwZSA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4vLyBtZXQ6XG4vL1xuLy8gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyXG4vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlXG4vLyBkaXN0cmlidXRpb24uXG4vLyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbi8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy9cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbi8vIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Rcbi8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbi8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbi8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbi8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbi8vXG4vLyBDb2RlIGdlbmVyYXRlZCBieSB0aGUgUHJvdG9jb2wgQnVmZmVyIGNvbXBpbGVyIGlzIG93bmVkIGJ5IHRoZSBvd25lclxuLy8gb2YgdGhlIGlucHV0IGZpbGUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgaXQuICBUaGlzIGNvZGUgaXMgbm90XG4vLyBzdGFuZGFsb25lIGFuZCByZXF1aXJlcyBhIHN1cHBvcnQgbGlicmFyeSB0byBiZSBsaW5rZWQgd2l0aCBpdC4gIFRoaXNcbi8vIHN1cHBvcnQgbGlicmFyeSBpcyBpdHNlbGYgY292ZXJlZCBieSB0aGUgYWJvdmUgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFyaW50MzJyZWFkID0gZXhwb3J0cy52YXJpbnQzMndyaXRlID0gZXhwb3J0cy5pbnQ2NHRvU3RyaW5nID0gZXhwb3J0cy5pbnQ2NGZyb21TdHJpbmcgPSBleHBvcnRzLnZhcmludDY0d3JpdGUgPSBleHBvcnRzLnZhcmludDY0cmVhZCA9IHZvaWQgMDtcbi8qKlxuICogUmVhZCBhIDY0IGJpdCB2YXJpbnQgYXMgdHdvIEpTIG51bWJlcnMuXG4gKlxuICogUmV0dXJucyB0dXBsZTpcbiAqIFswXTogbG93IGJpdHNcbiAqIFswXTogaGlnaCBiaXRzXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi84YTcxOTI3ZDc0YTRjZTM0ZWZlMmQ4NzY5ZmRhMTk4ZjUyZDIwZDEyL2pzL2V4cGVyaW1lbnRhbC9ydW50aW1lL2tlcm5lbC9idWZmZXJfZGVjb2Rlci5qcyNMMTc1XG4gKi9cbmZ1bmN0aW9uIHZhcmludDY0cmVhZCgpIHtcbiAgICBsZXQgbG93Qml0cyA9IDA7XG4gICAgbGV0IGhpZ2hCaXRzID0gMDtcbiAgICBmb3IgKGxldCBzaGlmdCA9IDA7IHNoaWZ0IDwgMjg7IHNoaWZ0ICs9IDcpIHtcbiAgICAgICAgbGV0IGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICAgICAgbG93Qml0cyB8PSAoYiAmIDB4N0YpIDw8IHNoaWZ0O1xuICAgICAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICAgICAgcmV0dXJuIFtsb3dCaXRzLCBoaWdoQml0c107XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IG1pZGRsZUJ5dGUgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICAvLyBsYXN0IGZvdXIgYml0cyBvZiB0aGUgZmlyc3QgMzIgYml0IG51bWJlclxuICAgIGxvd0JpdHMgfD0gKG1pZGRsZUJ5dGUgJiAweDBGKSA8PCAyODtcbiAgICAvLyAzIHVwcGVyIGJpdHMgYXJlIHBhcnQgb2YgdGhlIG5leHQgMzIgYml0IG51bWJlclxuICAgIGhpZ2hCaXRzID0gKG1pZGRsZUJ5dGUgJiAweDcwKSA+PiA0O1xuICAgIGlmICgobWlkZGxlQnl0ZSAmIDB4ODApID09IDApIHtcbiAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgcmV0dXJuIFtsb3dCaXRzLCBoaWdoQml0c107XG4gICAgfVxuICAgIGZvciAobGV0IHNoaWZ0ID0gMzsgc2hpZnQgPD0gMzE7IHNoaWZ0ICs9IDcpIHtcbiAgICAgICAgbGV0IGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICAgICAgaGlnaEJpdHMgfD0gKGIgJiAweDdGKSA8PCBzaGlmdDtcbiAgICAgICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgICAgIHJldHVybiBbbG93Qml0cywgaGlnaEJpdHNdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB2YXJpbnQnKTtcbn1cbmV4cG9ydHMudmFyaW50NjRyZWFkID0gdmFyaW50NjRyZWFkO1xuLyoqXG4gKiBXcml0ZSBhIDY0IGJpdCB2YXJpbnQsIGdpdmVuIGFzIHR3byBKUyBudW1iZXJzLCB0byB0aGUgZ2l2ZW4gYnl0ZXMgYXJyYXkuXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi84YTcxOTI3ZDc0YTRjZTM0ZWZlMmQ4NzY5ZmRhMTk4ZjUyZDIwZDEyL2pzL2V4cGVyaW1lbnRhbC9ydW50aW1lL2tlcm5lbC93cml0ZXIuanMjTDM0NFxuICovXG5mdW5jdGlvbiB2YXJpbnQ2NHdyaXRlKGxvLCBoaSwgYnl0ZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI4OyBpID0gaSArIDcpIHtcbiAgICAgICAgY29uc3Qgc2hpZnQgPSBsbyA+Pj4gaTtcbiAgICAgICAgY29uc3QgaGFzTmV4dCA9ICEoKHNoaWZ0ID4+PiA3KSA9PSAwICYmIGhpID09IDApO1xuICAgICAgICBjb25zdCBieXRlID0gKGhhc05leHQgPyBzaGlmdCB8IDB4ODAgOiBzaGlmdCkgJiAweEZGO1xuICAgICAgICBieXRlcy5wdXNoKGJ5dGUpO1xuICAgICAgICBpZiAoIWhhc05leHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzcGxpdEJpdHMgPSAoKGxvID4+PiAyOCkgJiAweDBGKSB8ICgoaGkgJiAweDA3KSA8PCA0KTtcbiAgICBjb25zdCBoYXNNb3JlQml0cyA9ICEoKGhpID4+IDMpID09IDApO1xuICAgIGJ5dGVzLnB1c2goKGhhc01vcmVCaXRzID8gc3BsaXRCaXRzIHwgMHg4MCA6IHNwbGl0Qml0cykgJiAweEZGKTtcbiAgICBpZiAoIWhhc01vcmVCaXRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDM7IGkgPCAzMTsgaSA9IGkgKyA3KSB7XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gaGkgPj4+IGk7XG4gICAgICAgIGNvbnN0IGhhc05leHQgPSAhKChzaGlmdCA+Pj4gNykgPT0gMCk7XG4gICAgICAgIGNvbnN0IGJ5dGUgPSAoaGFzTmV4dCA/IHNoaWZ0IHwgMHg4MCA6IHNoaWZ0KSAmIDB4RkY7XG4gICAgICAgIGJ5dGVzLnB1c2goYnl0ZSk7XG4gICAgICAgIGlmICghaGFzTmV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJ5dGVzLnB1c2goKGhpID4+PiAzMSkgJiAweDAxKTtcbn1cbmV4cG9ydHMudmFyaW50NjR3cml0ZSA9IHZhcmludDY0d3JpdGU7XG4vLyBjb25zdGFudHMgZm9yIGJpbmFyeSBtYXRoXG5jb25zdCBUV09fUFdSXzMyX0RCTCA9ICgxIDw8IDE2KSAqICgxIDw8IDE2KTtcbi8qKlxuICogUGFyc2UgZGVjaW1hbCBzdHJpbmcgb2YgNjQgYml0IGludGVnZXIgdmFsdWUgYXMgdHdvIEpTIG51bWJlcnMuXG4gKlxuICogUmV0dXJucyB0dXBsZTpcbiAqIFswXTogbWludXMgc2lnbj9cbiAqIFsxXTogbG93IGJpdHNcbiAqIFsyXTogaGlnaCBiaXRzXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy5cbiAqL1xuZnVuY3Rpb24gaW50NjRmcm9tU3RyaW5nKGRlYykge1xuICAgIC8vIENoZWNrIGZvciBtaW51cyBzaWduLlxuICAgIGxldCBtaW51cyA9IGRlY1swXSA9PSAnLSc7XG4gICAgaWYgKG1pbnVzKVxuICAgICAgICBkZWMgPSBkZWMuc2xpY2UoMSk7XG4gICAgLy8gV29yayA2IGRlY2ltYWwgZGlnaXRzIGF0IGEgdGltZSwgYWN0aW5nIGxpa2Ugd2UncmUgY29udmVydGluZyBiYXNlIDFlNlxuICAgIC8vIGRpZ2l0cyB0byBiaW5hcnkuIFRoaXMgaXMgc2FmZSB0byBkbyB3aXRoIGZsb2F0aW5nIHBvaW50IG1hdGggYmVjYXVzZVxuICAgIC8vIE51bWJlci5pc1NhZmVJbnRlZ2VyKEFMTF8zMl9CSVRTICogMWU2KSA9PSB0cnVlLlxuICAgIGNvbnN0IGJhc2UgPSAxZTY7XG4gICAgbGV0IGxvd0JpdHMgPSAwO1xuICAgIGxldCBoaWdoQml0cyA9IDA7XG4gICAgZnVuY3Rpb24gYWRkMWU2ZGlnaXQoYmVnaW4sIGVuZCkge1xuICAgICAgICAvLyBOb3RlOiBOdW1iZXIoJycpIGlzIDAuXG4gICAgICAgIGNvbnN0IGRpZ2l0MWU2ID0gTnVtYmVyKGRlYy5zbGljZShiZWdpbiwgZW5kKSk7XG4gICAgICAgIGhpZ2hCaXRzICo9IGJhc2U7XG4gICAgICAgIGxvd0JpdHMgPSBsb3dCaXRzICogYmFzZSArIGRpZ2l0MWU2O1xuICAgICAgICAvLyBDYXJyeSBiaXRzIGZyb20gbG93Qml0cyB0byBoaWdoQml0c1xuICAgICAgICBpZiAobG93Qml0cyA+PSBUV09fUFdSXzMyX0RCTCkge1xuICAgICAgICAgICAgaGlnaEJpdHMgPSBoaWdoQml0cyArICgobG93Qml0cyAvIFRXT19QV1JfMzJfREJMKSB8IDApO1xuICAgICAgICAgICAgbG93Qml0cyA9IGxvd0JpdHMgJSBUV09fUFdSXzMyX0RCTDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGQxZTZkaWdpdCgtMjQsIC0xOCk7XG4gICAgYWRkMWU2ZGlnaXQoLTE4LCAtMTIpO1xuICAgIGFkZDFlNmRpZ2l0KC0xMiwgLTYpO1xuICAgIGFkZDFlNmRpZ2l0KC02KTtcbiAgICByZXR1cm4gW21pbnVzLCBsb3dCaXRzLCBoaWdoQml0c107XG59XG5leHBvcnRzLmludDY0ZnJvbVN0cmluZyA9IGludDY0ZnJvbVN0cmluZztcbi8qKlxuICogRm9ybWF0IDY0IGJpdCBpbnRlZ2VyIHZhbHVlIChhcyB0d28gSlMgbnVtYmVycykgdG8gZGVjaW1hbCBzdHJpbmcuXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy5cbiAqL1xuZnVuY3Rpb24gaW50NjR0b1N0cmluZyhiaXRzTG93LCBiaXRzSGlnaCkge1xuICAgIC8vIFNraXAgdGhlIGV4cGVuc2l2ZSBjb252ZXJzaW9uIGlmIHRoZSBudW1iZXIgaXMgc21hbGwgZW5vdWdoIHRvIHVzZSB0aGVcbiAgICAvLyBidWlsdC1pbiBjb252ZXJzaW9ucy5cbiAgICBpZiAoKGJpdHNIaWdoID4+PiAwKSA8PSAweDFGRkZGRikge1xuICAgICAgICByZXR1cm4gJycgKyAoVFdPX1BXUl8zMl9EQkwgKiBiaXRzSGlnaCArIChiaXRzTG93ID4+PiAwKSk7XG4gICAgfVxuICAgIC8vIFdoYXQgdGhpcyBjb2RlIGlzIGRvaW5nIGlzIGVzc2VudGlhbGx5IGNvbnZlcnRpbmcgdGhlIGlucHV0IG51bWJlciBmcm9tXG4gICAgLy8gYmFzZS0yIHRvIGJhc2UtMWU3LCB3aGljaCBhbGxvd3MgdXMgdG8gcmVwcmVzZW50IHRoZSA2NC1iaXQgcmFuZ2Ugd2l0aFxuICAgIC8vIG9ubHkgMyAodmVyeSBsYXJnZSkgZGlnaXRzLiBUaG9zZSBkaWdpdHMgYXJlIHRoZW4gdHJpdmlhbCB0byBjb252ZXJ0IHRvXG4gICAgLy8gYSBiYXNlLTEwIHN0cmluZy5cbiAgICAvLyBUaGUgbWFnaWMgbnVtYmVycyB1c2VkIGhlcmUgYXJlIC1cbiAgICAvLyAyXjI0ID0gMTY3NzcyMTYgPSAoMSw2Nzc3MjE2KSBpbiBiYXNlLTFlNy5cbiAgICAvLyAyXjQ4ID0gMjgxNDc0OTc2NzEwNjU2ID0gKDIsODE0NzQ5Nyw2NzEwNjU2KSBpbiBiYXNlLTFlNy5cbiAgICAvLyBTcGxpdCAzMjozMiByZXByZXNlbnRhdGlvbiBpbnRvIDE2OjI0OjI0IHJlcHJlc2VudGF0aW9uIHNvIG91clxuICAgIC8vIGludGVybWVkaWF0ZSBkaWdpdHMgZG9uJ3Qgb3ZlcmZsb3cuXG4gICAgbGV0IGxvdyA9IGJpdHNMb3cgJiAweEZGRkZGRjtcbiAgICBsZXQgbWlkID0gKCgoYml0c0xvdyA+Pj4gMjQpIHwgKGJpdHNIaWdoIDw8IDgpKSA+Pj4gMCkgJiAweEZGRkZGRjtcbiAgICBsZXQgaGlnaCA9IChiaXRzSGlnaCA+PiAxNikgJiAweEZGRkY7XG4gICAgLy8gQXNzZW1ibGUgb3VyIHRocmVlIGJhc2UtMWU3IGRpZ2l0cywgaWdub3JpbmcgY2Fycmllcy4gVGhlIG1heGltdW1cbiAgICAvLyB2YWx1ZSBpbiBhIGRpZ2l0IGF0IHRoaXMgc3RlcCBpcyByZXByZXNlbnRhYmxlIGFzIGEgNDgtYml0IGludGVnZXIsIHdoaWNoXG4gICAgLy8gY2FuIGJlIHN0b3JlZCBpbiBhIDY0LWJpdCBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gICAgbGV0IGRpZ2l0QSA9IGxvdyArIChtaWQgKiA2Nzc3MjE2KSArIChoaWdoICogNjcxMDY1Nik7XG4gICAgbGV0IGRpZ2l0QiA9IG1pZCArIChoaWdoICogODE0NzQ5Nyk7XG4gICAgbGV0IGRpZ2l0QyA9IChoaWdoICogMik7XG4gICAgLy8gQXBwbHkgY2FycmllcyBmcm9tIEEgdG8gQiBhbmQgZnJvbSBCIHRvIEMuXG4gICAgbGV0IGJhc2UgPSAxMDAwMDAwMDtcbiAgICBpZiAoZGlnaXRBID49IGJhc2UpIHtcbiAgICAgICAgZGlnaXRCICs9IE1hdGguZmxvb3IoZGlnaXRBIC8gYmFzZSk7XG4gICAgICAgIGRpZ2l0QSAlPSBiYXNlO1xuICAgIH1cbiAgICBpZiAoZGlnaXRCID49IGJhc2UpIHtcbiAgICAgICAgZGlnaXRDICs9IE1hdGguZmxvb3IoZGlnaXRCIC8gYmFzZSk7XG4gICAgICAgIGRpZ2l0QiAlPSBiYXNlO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IGJhc2UtMWU3IGRpZ2l0cyB0byBiYXNlLTEwLCB3aXRoIG9wdGlvbmFsIGxlYWRpbmcgemVyb2VzLlxuICAgIGZ1bmN0aW9uIGRlY2ltYWxGcm9tMWU3KGRpZ2l0MWU3LCBuZWVkTGVhZGluZ1plcm9zKSB7XG4gICAgICAgIGxldCBwYXJ0aWFsID0gZGlnaXQxZTcgPyBTdHJpbmcoZGlnaXQxZTcpIDogJyc7XG4gICAgICAgIGlmIChuZWVkTGVhZGluZ1plcm9zKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAwMDAwMDAnLnNsaWNlKHBhcnRpYWwubGVuZ3RoKSArIHBhcnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgfVxuICAgIHJldHVybiBkZWNpbWFsRnJvbTFlNyhkaWdpdEMsIC8qbmVlZExlYWRpbmdaZXJvcz0qLyAwKSArXG4gICAgICAgIGRlY2ltYWxGcm9tMWU3KGRpZ2l0QiwgLypuZWVkTGVhZGluZ1plcm9zPSovIGRpZ2l0QykgK1xuICAgICAgICAvLyBJZiB0aGUgZmluYWwgMWU3IGRpZ2l0IGRpZG4ndCBuZWVkIGxlYWRpbmcgemVyb3MsIHdlIHdvdWxkIGhhdmVcbiAgICAgICAgLy8gcmV0dXJuZWQgdmlhIHRoZSB0cml2aWFsIGNvZGUgcGF0aCBhdCB0aGUgdG9wLlxuICAgICAgICBkZWNpbWFsRnJvbTFlNyhkaWdpdEEsIC8qbmVlZExlYWRpbmdaZXJvcz0qLyAxKTtcbn1cbmV4cG9ydHMuaW50NjR0b1N0cmluZyA9IGludDY0dG9TdHJpbmc7XG4vKipcbiAqIFdyaXRlIGEgMzIgYml0IHZhcmludCwgc2lnbmVkIG9yIHVuc2lnbmVkLiBTYW1lIGFzIGB2YXJpbnQ2NHdyaXRlKDAsIHZhbHVlLCBieXRlcylgXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi8xYjE4ODMzZjRmMmEyZjY4MWY0ZTRhMjVjZGYzYjBhNDMxMTVlYzI2L2pzL2JpbmFyeS9lbmNvZGVyLmpzI0wxNDRcbiAqL1xuZnVuY3Rpb24gdmFyaW50MzJ3cml0ZSh2YWx1ZSwgYnl0ZXMpIHtcbiAgICBpZiAodmFsdWUgPj0gMCkge1xuICAgICAgICAvLyB3cml0ZSB2YWx1ZSBhcyB2YXJpbnQgMzJcbiAgICAgICAgd2hpbGUgKHZhbHVlID4gMHg3Zikge1xuICAgICAgICAgICAgYnl0ZXMucHVzaCgodmFsdWUgJiAweDdmKSB8IDB4ODApO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA+Pj4gNztcbiAgICAgICAgfVxuICAgICAgICBieXRlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlICYgMTI3IHwgMTI4KTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPj4gNztcbiAgICAgICAgfVxuICAgICAgICBieXRlcy5wdXNoKDEpO1xuICAgIH1cbn1cbmV4cG9ydHMudmFyaW50MzJ3cml0ZSA9IHZhcmludDMyd3JpdGU7XG4vKipcbiAqIFJlYWQgYW4gdW5zaWduZWQgMzIgYml0IHZhcmludC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzhhNzE5MjdkNzRhNGNlMzRlZmUyZDg3NjlmZGExOThmNTJkMjBkMTIvanMvZXhwZXJpbWVudGFsL3J1bnRpbWUva2VybmVsL2J1ZmZlcl9kZWNvZGVyLmpzI0wyMjBcbiAqL1xuZnVuY3Rpb24gdmFyaW50MzJyZWFkKCkge1xuICAgIGxldCBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgbGV0IHJlc3VsdCA9IGIgJiAweDdGO1xuICAgIGlmICgoYiAmIDB4ODApID09IDApIHtcbiAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgIHJlc3VsdCB8PSAoYiAmIDB4N0YpIDw8IDc7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHg3RikgPDwgMTQ7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHg3RikgPDwgMjE7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBFeHRyYWN0IG9ubHkgbGFzdCA0IGJpdHNcbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHgwRikgPDwgMjg7XG4gICAgZm9yIChsZXQgcmVhZEJ5dGVzID0gNTsgKChiICYgMHg4MCkgIT09IDApICYmIHJlYWRCeXRlcyA8IDEwOyByZWFkQnl0ZXMrKylcbiAgICAgICAgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgIGlmICgoYiAmIDB4ODApICE9IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB2YXJpbnQnKTtcbiAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgIC8vIFJlc3VsdCBjYW4gaGF2ZSAzMiBiaXRzLCBjb252ZXJ0IGl0IHRvIHVuc2lnbmVkXG4gICAgcmV0dXJuIHJlc3VsdCA+Pj4gMDtcbn1cbmV4cG9ydHMudmFyaW50MzJyZWFkID0gdmFyaW50MzJyZWFkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGJMb25nID0gZXhwb3J0cy5QYlVMb25nID0gZXhwb3J0cy5kZXRlY3RCaSA9IHZvaWQgMDtcbmNvbnN0IGdvb2dfdmFyaW50XzEgPSByZXF1aXJlKFwiLi9nb29nLXZhcmludFwiKTtcbmxldCBCSTtcbmZ1bmN0aW9uIGRldGVjdEJpKCkge1xuICAgIGNvbnN0IGR2ID0gbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSk7XG4gICAgY29uc3Qgb2sgPSBnbG9iYWxUaGlzLkJpZ0ludCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIHR5cGVvZiBkdi5nZXRCaWdJbnQ2NCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICYmIHR5cGVvZiBkdi5nZXRCaWdVaW50NjQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAmJiB0eXBlb2YgZHYuc2V0QmlnSW50NjQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAmJiB0eXBlb2YgZHYuc2V0QmlnVWludDY0ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgQkkgPSBvayA/IHtcbiAgICAgICAgTUlOOiBCaWdJbnQoXCItOTIyMzM3MjAzNjg1NDc3NTgwOFwiKSxcbiAgICAgICAgTUFYOiBCaWdJbnQoXCI5MjIzMzcyMDM2ODU0Nzc1ODA3XCIpLFxuICAgICAgICBVTUlOOiBCaWdJbnQoXCIwXCIpLFxuICAgICAgICBVTUFYOiBCaWdJbnQoXCIxODQ0Njc0NDA3MzcwOTU1MTYxNVwiKSxcbiAgICAgICAgQzogQmlnSW50LFxuICAgICAgICBWOiBkdixcbiAgICB9IDogdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5kZXRlY3RCaSA9IGRldGVjdEJpO1xuZGV0ZWN0QmkoKTtcbmZ1bmN0aW9uIGFzc2VydEJpKGJpKSB7XG4gICAgaWYgKCFiaSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IHVuYXZhaWxhYmxlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RpbW9zdGFtbS9wcm90b2J1Zi10cy9ibG9iL3YxLjAuOC9NQU5VQUwubWQjYmlnaW50LXN1cHBvcnRcIik7XG59XG4vLyB1c2VkIHRvIHZhbGlkYXRlIGZyb20oc3RyaW5nKSBpbnB1dCAod2hlbiBiaWdpbnQgaXMgdW5hdmFpbGFibGUpXG5jb25zdCBSRV9ERUNJTUFMX1NUUiA9IC9eLT9bMC05XSskLztcbi8vIGNvbnN0YW50cyBmb3IgYmluYXJ5IG1hdGhcbmNvbnN0IFRXT19QV1JfMzJfREJMID0gMHgxMDAwMDAwMDA7XG5jb25zdCBIQUxGXzJfUFdSXzMyID0gMHgwODAwMDAwMDA7XG4vLyBiYXNlIGNsYXNzIGZvciBQYkxvbmcgYW5kIFBiVUxvbmcgcHJvdmlkZXMgc2hhcmVkIGNvZGVcbmNsYXNzIFNoYXJlZFBiTG9uZyB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIGJpdHMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobG8sIGhpKSB7XG4gICAgICAgIHRoaXMubG8gPSBsbyB8IDA7XG4gICAgICAgIHRoaXMuaGkgPSBoaSB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgaW5zdGFuY2UgZXF1YWwgdG8gMD9cbiAgICAgKi9cbiAgICBpc1plcm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvID09IDAgJiYgdGhpcy5oaSA9PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRvIGEgbmF0aXZlIG51bWJlci5cbiAgICAgKi9cbiAgICB0b051bWJlcigpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuaGkgKiBUV09fUFdSXzMyX0RCTCArICh0aGlzLmxvID4+PiAwKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGNvbnZlcnQgdG8gc2FmZSBudW1iZXJcIik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLyoqXG4gKiA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBhcyB0d28gMzItYml0IHZhbHVlcy5cbiAqIENvbnZlcnRzIGJldHdlZW4gYHN0cmluZ2AsIGBudW1iZXJgIGFuZCBgYmlnaW50YCByZXByZXNlbnRhdGlvbnMuXG4gKi9cbmNsYXNzIFBiVUxvbmcgZXh0ZW5kcyBTaGFyZWRQYkxvbmcge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBpbnN0YW5jZSBmcm9tIGEgYHN0cmluZ2AsIGBudW1iZXJgIG9yIGBiaWdpbnRgLlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIGlmIChCSSlcbiAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBCSS5DKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQkkuQyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgQkkuVU1JTilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIHZhbHVlIGZvciB1bG9uZycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiBCSS5VTUFYKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bG9uZyB0b28gbGFyZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgQkkuVi5zZXRCaWdVaW50NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBiVUxvbmcoQkkuVi5nZXRJbnQzMigwLCB0cnVlKSwgQkkuVi5nZXRJbnQzMig0LCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFSRV9ERUNJTUFMX1NUUi50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IFttaW51cywgbG8sIGhpXSA9IGdvb2dfdmFyaW50XzEuaW50NjRmcm9tU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbnVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgdmFsdWUgZm9yIHVsb25nJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJVTG9uZyhsbywgaGkpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbnVtYmVyIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIHZhbHVlIGZvciB1bG9uZycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBiVUxvbmcodmFsdWUsIHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdmFsdWUgJyArIHR5cGVvZiB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gZGVjaW1hbCBzdHJpbmcuXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBCSSA/IHRoaXMudG9CaWdJbnQoKS50b1N0cmluZygpIDogZ29vZ192YXJpbnRfMS5pbnQ2NHRvU3RyaW5nKHRoaXMubG8sIHRoaXMuaGkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRvIG5hdGl2ZSBiaWdpbnQuXG4gICAgICovXG4gICAgdG9CaWdJbnQoKSB7XG4gICAgICAgIGFzc2VydEJpKEJJKTtcbiAgICAgICAgQkkuVi5zZXRJbnQzMigwLCB0aGlzLmxvLCB0cnVlKTtcbiAgICAgICAgQkkuVi5zZXRJbnQzMig0LCB0aGlzLmhpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIEJJLlYuZ2V0QmlnVWludDY0KDAsIHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGJVTG9uZyA9IFBiVUxvbmc7XG4vKipcbiAqIHVsb25nIDAgc2luZ2xldG9uLlxuICovXG5QYlVMb25nLlpFUk8gPSBuZXcgUGJVTG9uZygwLCAwKTtcbi8qKlxuICogNjQtYml0IHNpZ25lZCBpbnRlZ2VyIGFzIHR3byAzMi1iaXQgdmFsdWVzLlxuICogQ29udmVydHMgYmV0d2VlbiBgc3RyaW5nYCwgYG51bWJlcmAgYW5kIGBiaWdpbnRgIHJlcHJlc2VudGF0aW9ucy5cbiAqL1xuY2xhc3MgUGJMb25nIGV4dGVuZHMgU2hhcmVkUGJMb25nIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgaW5zdGFuY2UgZnJvbSBhIGBzdHJpbmdgLCBgbnVtYmVyYCBvciBgYmlnaW50YC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbSh2YWx1ZSkge1xuICAgICAgICBpZiAoQkkpXG4gICAgICAgICAgICAvLyBub2luc3BlY3Rpb24gRmFsbFRocm91Z2hJblN3aXRjaFN0YXRlbWVudEpTXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiMFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBpcyBubyBpbnRlZ2VyJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQkkuQyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEJJLkModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IEJJLk1JTilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIGxvbmcgdG9vIHNtYWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IEJJLk1BWClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIGxvbmcgdG9vIGxhcmdlJyk7XG4gICAgICAgICAgICAgICAgICAgIEJJLlYuc2V0QmlnSW50NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBiTG9uZyhCSS5WLmdldEludDMyKDAsIHRydWUpLCBCSS5WLmdldEludDMyKDQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIjBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVJFX0RFQ0lNQUxfU1RSLnRlc3QodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgW21pbnVzLCBsbywgaGldID0gZ29vZ192YXJpbnRfMS5pbnQ2NGZyb21TdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWludXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaSA+IEhBTEZfMl9QV1JfMzIgfHwgKGhpID09IEhBTEZfMl9QV1JfMzIgJiYgbG8gIT0gMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gc21hbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChoaSA+PSBIQUxGXzJfUFdSXzMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gbGFyZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBibCA9IG5ldyBQYkxvbmcobG8sIGhpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pbnVzID8gcGJsLm5lZ2F0ZSgpIDogcGJsO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbnVtYmVyIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgUGJMb25nKHZhbHVlLCB2YWx1ZSAvIFRXT19QV1JfMzJfREJMKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgUGJMb25nKC12YWx1ZSwgLXZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpLm5lZ2F0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdmFsdWUgJyArIHR5cGVvZiB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERvIHdlIGhhdmUgYSBtaW51cyBzaWduP1xuICAgICAqL1xuICAgIGlzTmVnYXRpdmUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5oaSAmIEhBTEZfMl9QV1JfMzIpICE9PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOZWdhdGUgdHdvJ3MgY29tcGxlbWVudC5cbiAgICAgKiBJbnZlcnQgYWxsIHRoZSBiaXRzIGFuZCBhZGQgb25lIHRvIHRoZSByZXN1bHQuXG4gICAgICovXG4gICAgbmVnYXRlKCkge1xuICAgICAgICBsZXQgaGkgPSB+dGhpcy5oaSwgbG8gPSB0aGlzLmxvO1xuICAgICAgICBpZiAobG8pXG4gICAgICAgICAgICBsbyA9IH5sbyArIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGhpICs9IDE7XG4gICAgICAgIHJldHVybiBuZXcgUGJMb25nKGxvLCBoaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gZGVjaW1hbCBzdHJpbmcuXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmIChCSSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvQmlnSW50KCkudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgICAgICBsZXQgbiA9IHRoaXMubmVnYXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gJy0nICsgZ29vZ192YXJpbnRfMS5pbnQ2NHRvU3RyaW5nKG4ubG8sIG4uaGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnb29nX3ZhcmludF8xLmludDY0dG9TdHJpbmcodGhpcy5sbywgdGhpcy5oaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gbmF0aXZlIGJpZ2ludC5cbiAgICAgKi9cbiAgICB0b0JpZ0ludCgpIHtcbiAgICAgICAgYXNzZXJ0QmkoQkkpO1xuICAgICAgICBCSS5WLnNldEludDMyKDAsIHRoaXMubG8sIHRydWUpO1xuICAgICAgICBCSS5WLnNldEludDMyKDQsIHRoaXMuaGksIHRydWUpO1xuICAgICAgICByZXR1cm4gQkkuVi5nZXRCaWdJbnQ2NCgwLCB0cnVlKTtcbiAgICB9XG59XG5leHBvcnRzLlBiTG9uZyA9IFBiTG9uZztcbi8qKlxuICogbG9uZyAwIHNpbmdsZXRvbi5cbiAqL1xuUGJMb25nLlpFUk8gPSBuZXcgUGJMb25nKDAsIDApO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmluYXJ5UmVhZGVyID0gZXhwb3J0cy5iaW5hcnlSZWFkT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuY29uc3QgZ29vZ192YXJpbnRfMSA9IHJlcXVpcmUoXCIuL2dvb2ctdmFyaW50XCIpO1xuY29uc3QgZGVmYXVsdHNSZWFkID0ge1xuICAgIHJlYWRVbmtub3duRmllbGQ6IHRydWUsXG4gICAgcmVhZGVyRmFjdG9yeTogYnl0ZXMgPT4gbmV3IEJpbmFyeVJlYWRlcihieXRlcyksXG59O1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHJlYWRpbmcgYmluYXJ5IGRhdGEgZm9ybSBwYXJ0aWFsIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGJpbmFyeVJlYWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNSZWFkKSwgb3B0aW9ucykgOiBkZWZhdWx0c1JlYWQ7XG59XG5leHBvcnRzLmJpbmFyeVJlYWRPcHRpb25zID0gYmluYXJ5UmVhZE9wdGlvbnM7XG5jbGFzcyBCaW5hcnlSZWFkZXIge1xuICAgIGNvbnN0cnVjdG9yKGJ1ZiwgdGV4dERlY29kZXIpIHtcbiAgICAgICAgdGhpcy52YXJpbnQ2NCA9IGdvb2dfdmFyaW50XzEudmFyaW50NjRyZWFkOyAvLyBkaXJ0eSBjYXN0IGZvciBgdGhpc2BcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlYWQgYSBgdWludDMyYCBmaWVsZCwgYW4gdW5zaWduZWQgMzIgYml0IHZhcmludC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudWludDMyID0gZ29vZ192YXJpbnRfMS52YXJpbnQzMnJlYWQ7IC8vIGRpcnR5IGNhc3QgZm9yIGB0aGlzYCBhbmQgYWNjZXNzIHRvIHByb3RlY3RlZCBgYnVmYFxuICAgICAgICB0aGlzLmJ1ZiA9IGJ1ZjtcbiAgICAgICAgdGhpcy5sZW4gPSBidWYubGVuZ3RoO1xuICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBEYXRhVmlldyhidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGgpO1xuICAgICAgICB0aGlzLnRleHREZWNvZGVyID0gdGV4dERlY29kZXIgIT09IG51bGwgJiYgdGV4dERlY29kZXIgIT09IHZvaWQgMCA/IHRleHREZWNvZGVyIDogbmV3IFRleHREZWNvZGVyKFwidXRmLThcIiwge1xuICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmVCT006IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIHRhZyAtIGZpZWxkIG51bWJlciBhbmQgd2lyZSB0eXBlLlxuICAgICAqL1xuICAgIHRhZygpIHtcbiAgICAgICAgbGV0IHRhZyA9IHRoaXMudWludDMyKCksIGZpZWxkTm8gPSB0YWcgPj4+IDMsIHdpcmVUeXBlID0gdGFnICYgNztcbiAgICAgICAgaWYgKGZpZWxkTm8gPD0gMCB8fCB3aXJlVHlwZSA8IDAgfHwgd2lyZVR5cGUgPiA1KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0YWc6IGZpZWxkIG5vIFwiICsgZmllbGRObyArIFwiIHdpcmUgdHlwZSBcIiArIHdpcmVUeXBlKTtcbiAgICAgICAgcmV0dXJuIFtmaWVsZE5vLCB3aXJlVHlwZV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNraXAgb25lIGVsZW1lbnQgb24gdGhlIHdpcmUgYW5kIHJldHVybiB0aGUgc2tpcHBlZCBkYXRhLlxuICAgICAqIFN1cHBvcnRzIFdpcmVUeXBlLlN0YXJ0R3JvdXAgc2luY2UgdjIuMC4wLWFscGhhLjIzLlxuICAgICAqL1xuICAgIHNraXAod2lyZVR5cGUpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgc3dpdGNoICh3aXJlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuVmFyaW50OlxuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDB4ODApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0NjQ6XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgICAgIGNhc2UgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyOlxuICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQ6XG4gICAgICAgICAgICAgICAgbGV0IGxlbiA9IHRoaXMudWludDMyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gbGVuO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuU3RhcnRHcm91cDpcbiAgICAgICAgICAgICAgICAvLyBGcm9tIGRlc2NyaXB0b3IucHJvdG86IEdyb3VwIHR5cGUgaXMgZGVwcmVjYXRlZCwgbm90IHN1cHBvcnRlZCBpbiBwcm90bzMuXG4gICAgICAgICAgICAgICAgLy8gQnV0IHdlIG11c3Qgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSBhbmQgdHJlYXQgYXMgdW5rbm93bi5cbiAgICAgICAgICAgICAgICBsZXQgdDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKHQgPSB0aGlzLnRhZygpWzFdKSAhPT0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkVuZEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2tpcCh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbnQgc2tpcCB3aXJlIHR5cGUgXCIgKyB3aXJlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmLnN1YmFycmF5KHN0YXJ0LCB0aGlzLnBvcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRocm93cyBlcnJvciBpZiBwb3NpdGlvbiBpbiBieXRlIGFycmF5IGlzIG91dCBvZiByYW5nZS5cbiAgICAgKi9cbiAgICBhc3NlcnRCb3VuZHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcyA+IHRoaXMubGVuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJwcmVtYXR1cmUgRU9GXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGludDMyYCBmaWVsZCwgYSBzaWduZWQgMzIgYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBpbnQzMigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWludDMyKCkgfCAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYHNpbnQzMmAgZmllbGQsIGEgc2lnbmVkLCB6aWd6YWctZW5jb2RlZCAzMi1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHNpbnQzMigpIHtcbiAgICAgICAgbGV0IHp6ZSA9IHRoaXMudWludDMyKCk7XG4gICAgICAgIC8vIGRlY29kZSB6aWd6YWdcbiAgICAgICAgcmV0dXJuICh6emUgPj4+IDEpIF4gLSh6emUgJiAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBpbnQ2NGAgZmllbGQsIGEgc2lnbmVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgaW50NjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiTG9uZyguLi50aGlzLnZhcmludDY0KCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYHVpbnQ2NGAgZmllbGQsIGFuIHVuc2lnbmVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgdWludDY0KCkge1xuICAgICAgICByZXR1cm4gbmV3IHBiX2xvbmdfMS5QYlVMb25nKC4uLnRoaXMudmFyaW50NjQoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgc2ludDY0YCBmaWVsZCwgYSBzaWduZWQsIHppZy16YWctZW5jb2RlZCA2NC1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHNpbnQ2NCgpIHtcbiAgICAgICAgbGV0IFtsbywgaGldID0gdGhpcy52YXJpbnQ2NCgpO1xuICAgICAgICAvLyBkZWNvZGUgemlnIHphZ1xuICAgICAgICBsZXQgcyA9IC0obG8gJiAxKTtcbiAgICAgICAgbG8gPSAoKGxvID4+PiAxIHwgKGhpICYgMSkgPDwgMzEpIF4gcyk7XG4gICAgICAgIGhpID0gKGhpID4+PiAxIF4gcyk7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiTG9uZyhsbywgaGkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGJvb2xgIGZpZWxkLCBhIHZhcmlhbnQuXG4gICAgICovXG4gICAgYm9vbCgpIHtcbiAgICAgICAgbGV0IFtsbywgaGldID0gdGhpcy52YXJpbnQ2NCgpO1xuICAgICAgICByZXR1cm4gbG8gIT09IDAgfHwgaGkgIT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZml4ZWQzMmAgZmllbGQsIGFuIHVuc2lnbmVkLCBmaXhlZC1sZW5ndGggMzItYml0IGludGVnZXIuXG4gICAgICovXG4gICAgZml4ZWQzMigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlldy5nZXRVaW50MzIoKHRoaXMucG9zICs9IDQpIC0gNCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgc2ZpeGVkMzJgIGZpZWxkLCBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIDMyLWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIHNmaXhlZDMyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3LmdldEludDMyKCh0aGlzLnBvcyArPSA0KSAtIDQsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGZpeGVkNjRgIGZpZWxkLCBhbiB1bnNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0IGJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIGZpeGVkNjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiVUxvbmcodGhpcy5zZml4ZWQzMigpLCB0aGlzLnNmaXhlZDMyKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGZpeGVkNjRgIGZpZWxkLCBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0LWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIHNmaXhlZDY0KCkge1xuICAgICAgICByZXR1cm4gbmV3IHBiX2xvbmdfMS5QYkxvbmcodGhpcy5zZml4ZWQzMigpLCB0aGlzLnNmaXhlZDMyKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGZsb2F0YCBmaWVsZCwgMzItYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICAgKi9cbiAgICBmbG9hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlldy5nZXRGbG9hdDMyKCh0aGlzLnBvcyArPSA0KSAtIDQsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGRvdWJsZWAgZmllbGQsIGEgNjQtYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICAgKi9cbiAgICBkb3VibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0RmxvYXQ2NCgodGhpcy5wb3MgKz0gOCkgLSA4LCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBieXRlc2AgZmllbGQsIGxlbmd0aC1kZWxpbWl0ZWQgYXJiaXRyYXJ5IGRhdGEuXG4gICAgICovXG4gICAgYnl0ZXMoKSB7XG4gICAgICAgIGxldCBsZW4gPSB0aGlzLnVpbnQzMigpO1xuICAgICAgICBsZXQgc3RhcnQgPSB0aGlzLnBvcztcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuO1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWYuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBzdHJpbmdgIGZpZWxkLCBsZW5ndGgtZGVsaW1pdGVkIGRhdGEgY29udmVydGVkIHRvIFVURi04IHRleHQuXG4gICAgICovXG4gICAgc3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0RGVjb2Rlci5kZWNvZGUodGhpcy5ieXRlcygpKTtcbiAgICB9XG59XG5leHBvcnRzLkJpbmFyeVJlYWRlciA9IEJpbmFyeVJlYWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2VydEZsb2F0MzIgPSBleHBvcnRzLmFzc2VydFVJbnQzMiA9IGV4cG9ydHMuYXNzZXJ0SW50MzIgPSBleHBvcnRzLmFzc2VydE5ldmVyID0gZXhwb3J0cy5hc3NlcnQgPSB2b2lkIDA7XG4vKipcbiAqIGFzc2VydCB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlIG9yIHRocm93IGVycm9yICh3aXRoIG1lc3NhZ2UpXG4gKi9cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1zZykge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIH1cbn1cbmV4cG9ydHMuYXNzZXJ0ID0gYXNzZXJ0O1xuLyoqXG4gKiBhc3NlcnQgdGhhdCB2YWx1ZSBjYW5ub3QgZXhpc3QgPSB0eXBlIGBuZXZlcmAuIHRocm93IHJ1bnRpbWUgZXJyb3IgaWYgaXQgZG9lcy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUsIG1zZykge1xuICAgIHRocm93IG5ldyBFcnJvcihtc2cgIT09IG51bGwgJiYgbXNnICE9PSB2b2lkIDAgPyBtc2cgOiAnVW5leHBlY3RlZCBvYmplY3Q6ICcgKyB2YWx1ZSk7XG59XG5leHBvcnRzLmFzc2VydE5ldmVyID0gYXNzZXJ0TmV2ZXI7XG5jb25zdCBGTE9BVDMyX01BWCA9IDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIEZMT0FUMzJfTUlOID0gLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIFVJTlQzMl9NQVggPSAweEZGRkZGRkZGLCBJTlQzMl9NQVggPSAwWDdGRkZGRkZGLCBJTlQzMl9NSU4gPSAtMFg4MDAwMDAwMDtcbmZ1bmN0aW9uIGFzc2VydEludDMyKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW50IDMyOiAnICsgdHlwZW9mIGFyZyk7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFyZykgfHwgYXJnID4gSU5UMzJfTUFYIHx8IGFyZyA8IElOVDMyX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGludCAzMjogJyArIGFyZyk7XG59XG5leHBvcnRzLmFzc2VydEludDMyID0gYXNzZXJ0SW50MzI7XG5mdW5jdGlvbiBhc3NlcnRVSW50MzIoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1aW50IDMyOiAnICsgdHlwZW9mIGFyZyk7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFyZykgfHwgYXJnID4gVUlOVDMyX01BWCB8fCBhcmcgPCAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdWludCAzMjogJyArIGFyZyk7XG59XG5leHBvcnRzLmFzc2VydFVJbnQzMiA9IGFzc2VydFVJbnQzMjtcbmZ1bmN0aW9uIGFzc2VydEZsb2F0MzIoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmbG9hdCAzMjogJyArIHR5cGVvZiBhcmcpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFyZykpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoYXJnID4gRkxPQVQzMl9NQVggfHwgYXJnIDwgRkxPQVQzMl9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmbG9hdCAzMjogJyArIGFyZyk7XG59XG5leHBvcnRzLmFzc2VydEZsb2F0MzIgPSBhc3NlcnRGbG9hdDMyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmluYXJ5V3JpdGVyID0gZXhwb3J0cy5iaW5hcnlXcml0ZU9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuY29uc3QgZ29vZ192YXJpbnRfMSA9IHJlcXVpcmUoXCIuL2dvb2ctdmFyaW50XCIpO1xuY29uc3QgYXNzZXJ0XzEgPSByZXF1aXJlKFwiLi9hc3NlcnRcIik7XG5jb25zdCBkZWZhdWx0c1dyaXRlID0ge1xuICAgIHdyaXRlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICB3cml0ZXJGYWN0b3J5OiAoKSA9PiBuZXcgQmluYXJ5V3JpdGVyKCksXG59O1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHdyaXRpbmcgYmluYXJ5IGRhdGEgZm9ybSBwYXJ0aWFsIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGJpbmFyeVdyaXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzV3JpdGUpLCBvcHRpb25zKSA6IGRlZmF1bHRzV3JpdGU7XG59XG5leHBvcnRzLmJpbmFyeVdyaXRlT3B0aW9ucyA9IGJpbmFyeVdyaXRlT3B0aW9ucztcbmNsYXNzIEJpbmFyeVdyaXRlciB7XG4gICAgY29uc3RydWN0b3IodGV4dEVuY29kZXIpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByZXZpb3VzIGZvcmsgc3RhdGVzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICB0aGlzLnRleHRFbmNvZGVyID0gdGV4dEVuY29kZXIgIT09IG51bGwgJiYgdGV4dEVuY29kZXIgIT09IHZvaWQgMCA/IHRleHRFbmNvZGVyIDogbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICAgIHRoaXMuY2h1bmtzID0gW107XG4gICAgICAgIHRoaXMuYnVmID0gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgYnl0ZXMgd3JpdHRlbiBhbmQgcmVzZXQgdGhpcyB3cml0ZXIuXG4gICAgICovXG4gICAgZmluaXNoKCkge1xuICAgICAgICB0aGlzLmNodW5rcy5wdXNoKG5ldyBVaW50OEFycmF5KHRoaXMuYnVmKSk7IC8vIGZsdXNoIHRoZSBidWZmZXJcbiAgICAgICAgbGV0IGxlbiA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaHVua3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBsZW4gKz0gdGhpcy5jaHVua3NbaV0ubGVuZ3RoO1xuICAgICAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNodW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYnl0ZXMuc2V0KHRoaXMuY2h1bmtzW2ldLCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuY2h1bmtzW2ldLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNodW5rcyA9IFtdO1xuICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGEgbmV3IGZvcmsgZm9yIGxlbmd0aC1kZWxpbWl0ZWQgZGF0YSBsaWtlIGEgbWVzc2FnZVxuICAgICAqIG9yIGEgcGFja2VkIHJlcGVhdGVkIGZpZWxkLlxuICAgICAqXG4gICAgICogTXVzdCBiZSBqb2luZWQgbGF0ZXIgd2l0aCBgam9pbigpYC5cbiAgICAgKi9cbiAgICBmb3JrKCkge1xuICAgICAgICB0aGlzLnN0YWNrLnB1c2goeyBjaHVua3M6IHRoaXMuY2h1bmtzLCBidWY6IHRoaXMuYnVmIH0pO1xuICAgICAgICB0aGlzLmNodW5rcyA9IFtdO1xuICAgICAgICB0aGlzLmJ1ZiA9IFtdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSm9pbiB0aGUgbGFzdCBmb3JrLiBXcml0ZSBpdHMgbGVuZ3RoIGFuZCBieXRlcywgdGhlblxuICAgICAqIHJldHVybiB0byB0aGUgcHJldmlvdXMgc3RhdGUuXG4gICAgICovXG4gICAgam9pbigpIHtcbiAgICAgICAgLy8gZ2V0IGNodW5rIG9mIGZvcmtcbiAgICAgICAgbGV0IGNodW5rID0gdGhpcy5maW5pc2goKTtcbiAgICAgICAgLy8gcmVzdG9yZSBwcmV2aW91cyBzdGF0ZVxuICAgICAgICBsZXQgcHJldiA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghcHJldilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzdGF0ZSwgZm9yayBzdGFjayBlbXB0eScpO1xuICAgICAgICB0aGlzLmNodW5rcyA9IHByZXYuY2h1bmtzO1xuICAgICAgICB0aGlzLmJ1ZiA9IHByZXYuYnVmO1xuICAgICAgICAvLyB3cml0ZSBsZW5ndGggb2YgY2h1bmsgYXMgdmFyaW50XG4gICAgICAgIHRoaXMudWludDMyKGNodW5rLmJ5dGVMZW5ndGgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgYSB0YWcgKGZpZWxkIG51bWJlciBhbmQgd2lyZSB0eXBlKS5cbiAgICAgKlxuICAgICAqIEVxdWl2YWxlbnQgdG8gYHVpbnQzMiggKGZpZWxkTm8gPDwgMyB8IHR5cGUpID4+PiAwIClgLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVkIGNvZGUgc2hvdWxkIGNvbXB1dGUgdGhlIHRhZyBhaGVhZCBvZiB0aW1lIGFuZCBjYWxsIGB1aW50MzIoKWAuXG4gICAgICovXG4gICAgdGFnKGZpZWxkTm8sIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWludDMyKChmaWVsZE5vIDw8IDMgfCB0eXBlKSA+Pj4gMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgY2h1bmsgb2YgcmF3IGJ5dGVzLlxuICAgICAqL1xuICAgIHJhdyhjaHVuaykge1xuICAgICAgICBpZiAodGhpcy5idWYubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNodW5rcy5wdXNoKG5ldyBVaW50OEFycmF5KHRoaXMuYnVmKSk7XG4gICAgICAgICAgICB0aGlzLmJ1ZiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgdWludDMyYCB2YWx1ZSwgYW4gdW5zaWduZWQgMzIgYml0IHZhcmludC5cbiAgICAgKi9cbiAgICB1aW50MzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0VUludDMyKHZhbHVlKTtcbiAgICAgICAgLy8gd3JpdGUgdmFsdWUgYXMgdmFyaW50IDMyLCBpbmxpbmVkIGZvciBzcGVlZFxuICAgICAgICB3aGlsZSAodmFsdWUgPiAweDdmKSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi5wdXNoKCh2YWx1ZSAmIDB4N2YpIHwgMHg4MCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4+PiA3O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmLnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgaW50MzJgIHZhbHVlLCBhIHNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAqL1xuICAgIGludDMyKHZhbHVlKSB7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydEludDMyKHZhbHVlKTtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQzMndyaXRlKHZhbHVlLCB0aGlzLmJ1Zik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBib29sYCB2YWx1ZSwgYSB2YXJpYW50LlxuICAgICAqL1xuICAgIGJvb2wodmFsdWUpIHtcbiAgICAgICAgdGhpcy5idWYucHVzaCh2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGJ5dGVzYCB2YWx1ZSwgbGVuZ3RoLWRlbGltaXRlZCBhcmJpdHJhcnkgZGF0YS5cbiAgICAgKi9cbiAgICBieXRlcyh2YWx1ZSkge1xuICAgICAgICB0aGlzLnVpbnQzMih2YWx1ZS5ieXRlTGVuZ3RoKTsgLy8gd3JpdGUgbGVuZ3RoIG9mIGNodW5rIGFzIHZhcmludFxuICAgICAgICByZXR1cm4gdGhpcy5yYXcodmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzdHJpbmdgIHZhbHVlLCBsZW5ndGgtZGVsaW1pdGVkIGRhdGEgY29udmVydGVkIHRvIFVURi04IHRleHQuXG4gICAgICovXG4gICAgc3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGxldCBjaHVuayA9IHRoaXMudGV4dEVuY29kZXIuZW5jb2RlKHZhbHVlKTtcbiAgICAgICAgdGhpcy51aW50MzIoY2h1bmsuYnl0ZUxlbmd0aCk7IC8vIHdyaXRlIGxlbmd0aCBvZiBjaHVuayBhcyB2YXJpbnRcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZmxvYXRgIHZhbHVlLCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZsb2F0KHZhbHVlKSB7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydEZsb2F0MzIodmFsdWUpO1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcikuc2V0RmxvYXQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGRvdWJsZWAgdmFsdWUsIGEgNjQtYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICAgKi9cbiAgICBkb3VibGUodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgICAgIG5ldyBEYXRhVmlldyhjaHVuay5idWZmZXIpLnNldEZsb2F0NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBmaXhlZDMyYCB2YWx1ZSwgYW4gdW5zaWduZWQsIGZpeGVkLWxlbmd0aCAzMi1iaXQgaW50ZWdlci5cbiAgICAgKi9cbiAgICBmaXhlZDMyKHZhbHVlKSB7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydFVJbnQzMih2YWx1ZSk7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKS5zZXRVaW50MzIoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzZml4ZWQzMmAgdmFsdWUsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggMzItYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkMzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0SW50MzIodmFsdWUpO1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcikuc2V0SW50MzIoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzaW50MzJgIHZhbHVlLCBhIHNpZ25lZCwgemlnemFnLWVuY29kZWQgMzItYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBzaW50MzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0SW50MzIodmFsdWUpO1xuICAgICAgICAvLyB6aWd6YWcgZW5jb2RlXG4gICAgICAgIHZhbHVlID0gKCh2YWx1ZSA8PCAxKSBeICh2YWx1ZSA+PiAzMSkpID4+PiAwO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDMyd3JpdGUodmFsdWUsIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGZpeGVkNjRgIHZhbHVlLCBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0LWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIHNmaXhlZDY0KHZhbHVlKSB7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDgpO1xuICAgICAgICBsZXQgdmlldyA9IG5ldyBEYXRhVmlldyhjaHVuay5idWZmZXIpO1xuICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoMCwgbG9uZy5sbywgdHJ1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoNCwgbG9uZy5oaSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGZpeGVkNjRgIHZhbHVlLCBhbiB1bnNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0IGJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIGZpeGVkNjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgICAgIGxldCB2aWV3ID0gbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcik7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiVUxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoMCwgbG9uZy5sbywgdHJ1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoNCwgbG9uZy5oaSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGludDY0YCB2YWx1ZSwgYSBzaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBpbnQ2NCh2YWx1ZSkge1xuICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgIGdvb2dfdmFyaW50XzEudmFyaW50NjR3cml0ZShsb25nLmxvLCBsb25nLmhpLCB0aGlzLmJ1Zik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzaW50NjRgIHZhbHVlLCBhIHNpZ25lZCwgemlnLXphZy1lbmNvZGVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgc2ludDY0KHZhbHVlKSB7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKSwgXG4gICAgICAgIC8vIHppZ3phZyBlbmNvZGVcbiAgICAgICAgc2lnbiA9IGxvbmcuaGkgPj4gMzEsIGxvID0gKGxvbmcubG8gPDwgMSkgXiBzaWduLCBoaSA9ICgobG9uZy5oaSA8PCAxKSB8IChsb25nLmxvID4+PiAzMSkpIF4gc2lnbjtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQ2NHdyaXRlKGxvLCBoaSwgdGhpcy5idWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgdWludDY0YCB2YWx1ZSwgYW4gdW5zaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICB1aW50NjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQ2NHdyaXRlKGxvbmcubG8sIGxvbmcuaGksIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuZXhwb3J0cy5CaW5hcnlXcml0ZXIgPSBCaW5hcnlXcml0ZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZUpzb25PcHRpb25zID0gZXhwb3J0cy5qc29uV3JpdGVPcHRpb25zID0gZXhwb3J0cy5qc29uUmVhZE9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBkZWZhdWx0c1dyaXRlID0ge1xuICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICBlbnVtQXNJbnRlZ2VyOiBmYWxzZSxcbiAgICB1c2VQcm90b0ZpZWxkTmFtZTogZmFsc2UsXG4gICAgcHJldHR5U3BhY2VzOiAwLFxufSwgZGVmYXVsdHNSZWFkID0ge1xuICAgIGlnbm9yZVVua25vd25GaWVsZHM6IGZhbHNlLFxufTtcbi8qKlxuICogTWFrZSBvcHRpb25zIGZvciByZWFkaW5nIEpTT04gZGF0YSBmcm9tIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24ganNvblJlYWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNSZWFkKSwgb3B0aW9ucykgOiBkZWZhdWx0c1JlYWQ7XG59XG5leHBvcnRzLmpzb25SZWFkT3B0aW9ucyA9IGpzb25SZWFkT3B0aW9ucztcbi8qKlxuICogTWFrZSBvcHRpb25zIGZvciB3cml0aW5nIEpTT04gZGF0YSBmcm9tIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24ganNvbldyaXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzV3JpdGUpLCBvcHRpb25zKSA6IGRlZmF1bHRzV3JpdGU7XG59XG5leHBvcnRzLmpzb25Xcml0ZU9wdGlvbnMgPSBqc29uV3JpdGVPcHRpb25zO1xuLyoqXG4gKiBNZXJnZXMgSlNPTiB3cml0ZSBvciByZWFkIG9wdGlvbnMuIExhdGVyIHZhbHVlcyBvdmVycmlkZSBlYXJsaWVyIHZhbHVlcy4gVHlwZSByZWdpc3RyaWVzIGFyZSBtZXJnZWQuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSnNvbk9wdGlvbnMoYSwgYikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgbGV0IGMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGEpLCBiKTtcbiAgICBjLnR5cGVSZWdpc3RyeSA9IFsuLi4oKF9hID0gYSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLnR5cGVSZWdpc3RyeSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLCAuLi4oKF9iID0gYiA9PT0gbnVsbCB8fCBiID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiLnR5cGVSZWdpc3RyeSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW10pXTtcbiAgICByZXR1cm4gYztcbn1cbmV4cG9ydHMubWVyZ2VKc29uT3B0aW9ucyA9IG1lcmdlSnNvbk9wdGlvbnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NRVNTQUdFX1RZUEUgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBzeW1ib2wgdXNlZCBhcyBhIGtleSBvbiBtZXNzYWdlIG9iamVjdHMgdG8gc3RvcmUgdGhlIG1lc3NhZ2UgdHlwZS5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSAtIGl0IGlzIGhlcmUgdG8gc3RheSwgYnV0XG4gKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuXG4gKi9cbmV4cG9ydHMuTUVTU0FHRV9UWVBFID0gU3ltYm9sLmZvcihcInByb3RvYnVmLXRzL21lc3NhZ2UtdHlwZVwiKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvd2VyQ2FtZWxDYXNlID0gdm9pZCAwO1xuLyoqXG4gKiBDb252ZXJ0cyBzbmFrZV9jYXNlIHRvIGxvd2VyQ2FtZWxDYXNlLlxuICpcbiAqIFNob3VsZCBiZWhhdmUgbGlrZSBwcm90b2M6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vcHJvdG9jb2xidWZmZXJzL3Byb3RvYnVmL2Jsb2IvZThhZTEzN2M5NjQ0NGVhMzEzNDg1ZWQxMTE4YzVlNDNiMjA5OWNmMS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9oZWxwZXJzLmNjI0wxMThcbiAqL1xuZnVuY3Rpb24gbG93ZXJDYW1lbENhc2Uoc25ha2VDYXNlKSB7XG4gICAgbGV0IGNhcE5leHQgPSBmYWxzZTtcbiAgICBjb25zdCBzYiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc25ha2VDYXNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBuZXh0ID0gc25ha2VDYXNlLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKG5leHQgPT0gJ18nKSB7XG4gICAgICAgICAgICBjYXBOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgvXFxkLy50ZXN0KG5leHQpKSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQpO1xuICAgICAgICAgICAgY2FwTmV4dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FwTmV4dCkge1xuICAgICAgICAgICAgc2IucHVzaChuZXh0LnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICAgICAgY2FwTmV4dCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGkgPT0gMCkge1xuICAgICAgICAgICAgc2IucHVzaChuZXh0LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2IucHVzaChuZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2Iuam9pbignJyk7XG59XG5leHBvcnRzLmxvd2VyQ2FtZWxDYXNlID0gbG93ZXJDYW1lbENhc2U7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWFkTWVzc2FnZU9wdGlvbiA9IGV4cG9ydHMucmVhZEZpZWxkT3B0aW9uID0gZXhwb3J0cy5yZWFkRmllbGRPcHRpb25zID0gZXhwb3J0cy5ub3JtYWxpemVGaWVsZEluZm8gPSBleHBvcnRzLlJlcGVhdFR5cGUgPSBleHBvcnRzLkxvbmdUeXBlID0gZXhwb3J0cy5TY2FsYXJUeXBlID0gdm9pZCAwO1xuY29uc3QgbG93ZXJfY2FtZWxfY2FzZV8xID0gcmVxdWlyZShcIi4vbG93ZXItY2FtZWwtY2FzZVwiKTtcbi8qKlxuICogU2NhbGFyIHZhbHVlIHR5cGVzLiBUaGlzIGlzIGEgc3Vic2V0IG9mIGZpZWxkIHR5cGVzIGRlY2xhcmVkIGJ5IHByb3RvYnVmXG4gKiBlbnVtIGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlIFRoZSB0eXBlcyBHUk9VUCBhbmQgTUVTU0FHRVxuICogYXJlIG9taXR0ZWQsIGJ1dCB0aGUgbnVtZXJpY2FsIHZhbHVlcyBhcmUgaWRlbnRpY2FsLlxuICovXG52YXIgU2NhbGFyVHlwZTtcbihmdW5jdGlvbiAoU2NhbGFyVHlwZSkge1xuICAgIC8vIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9ycy5cbiAgICAvLyBPcmRlciBpcyB3ZWlyZCBmb3IgaGlzdG9yaWNhbCByZWFzb25zLlxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIkRPVUJMRVwiXSA9IDFdID0gXCJET1VCTEVcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJGTE9BVFwiXSA9IDJdID0gXCJGTE9BVFwiO1xuICAgIC8vIE5vdCBaaWdaYWcgZW5jb2RlZC4gIE5lZ2F0aXZlIG51bWJlcnMgdGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQ2NCBpZlxuICAgIC8vIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LlxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIklOVDY0XCJdID0gM10gPSBcIklOVDY0XCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiVUlOVDY0XCJdID0gNF0gPSBcIlVJTlQ2NFwiO1xuICAgIC8vIE5vdCBaaWdaYWcgZW5jb2RlZC4gIE5lZ2F0aXZlIG51bWJlcnMgdGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQzMiBpZlxuICAgIC8vIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LlxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIklOVDMyXCJdID0gNV0gPSBcIklOVDMyXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiRklYRUQ2NFwiXSA9IDZdID0gXCJGSVhFRDY0XCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiRklYRUQzMlwiXSA9IDddID0gXCJGSVhFRDMyXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiQk9PTFwiXSA9IDhdID0gXCJCT09MXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiU1RSSU5HXCJdID0gOV0gPSBcIlNUUklOR1wiO1xuICAgIC8vIFRhZy1kZWxpbWl0ZWQgYWdncmVnYXRlLlxuICAgIC8vIEdyb3VwIHR5cGUgaXMgZGVwcmVjYXRlZCBhbmQgbm90IHN1cHBvcnRlZCBpbiBwcm90bzMuIEhvd2V2ZXIsIFByb3RvM1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSB0aGUgZ3JvdXAgd2lyZSBmb3JtYXQgYW5kXG4gICAgLy8gdHJlYXQgZ3JvdXAgZmllbGRzIGFzIHVua25vd24gZmllbGRzLlxuICAgIC8vIFRZUEVfR1JPVVAgPSAxMCxcbiAgICAvLyBUWVBFX01FU1NBR0UgPSAxMSwgIC8vIExlbmd0aC1kZWxpbWl0ZWQgYWdncmVnYXRlLlxuICAgIC8vIE5ldyBpbiB2ZXJzaW9uIDIuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiQllURVNcIl0gPSAxMl0gPSBcIkJZVEVTXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiVUlOVDMyXCJdID0gMTNdID0gXCJVSU5UMzJcIjtcbiAgICAvLyBUWVBFX0VOVU0gPSAxNCxcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTRklYRUQzMlwiXSA9IDE1XSA9IFwiU0ZJWEVEMzJcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTRklYRUQ2NFwiXSA9IDE2XSA9IFwiU0ZJWEVENjRcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTSU5UMzJcIl0gPSAxN10gPSBcIlNJTlQzMlwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNJTlQ2NFwiXSA9IDE4XSA9IFwiU0lOVDY0XCI7XG59KShTY2FsYXJUeXBlID0gZXhwb3J0cy5TY2FsYXJUeXBlIHx8IChleHBvcnRzLlNjYWxhclR5cGUgPSB7fSkpO1xuLyoqXG4gKiBKYXZhU2NyaXB0IHJlcHJlc2VudGF0aW9uIG9mIDY0IGJpdCBpbnRlZ3JhbCB0eXBlcy4gRXF1aXZhbGVudCB0byB0aGVcbiAqIGZpZWxkIG9wdGlvbiBcImpzdHlwZVwiLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHByb3RvYnVmLXRzIHJlcHJlc2VudHMgNjQgYml0IHR5cGVzIGFzIGBiaWdpbnRgLlxuICpcbiAqIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBieSBlbmFibGluZyB0aGUgcGx1Z2luIHBhcmFtZXRlclxuICogYGxvbmdfdHlwZV9zdHJpbmdgLCB3aGljaCB3aWxsIHJlcHJlc2VudCA2NCBiaXQgdHlwZXMgYXMgYHN0cmluZ2AuXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBjaGFuZ2UgdGhlIGJlaGF2aW91ciBmb3IgaW5kaXZpZHVhbCBmaWVsZHNcbiAqIHdpdGggdGhlIGZpZWxkIG9wdGlvbiBcImpzdHlwZVwiOlxuICpcbiAqIGBgYHByb3RvYnVmXG4gKiB1aW50NjQgbXlfZmllbGQgPSAxIFtqc3R5cGUgPSBKU19TVFJJTkddO1xuICogdWludDY0IG90aGVyX2ZpZWxkID0gMiBbanN0eXBlID0gSlNfTlVNQkVSXTtcbiAqIGBgYFxuICovXG52YXIgTG9uZ1R5cGU7XG4oZnVuY3Rpb24gKExvbmdUeXBlKSB7XG4gICAgLyoqXG4gICAgICogVXNlIEphdmFTY3JpcHQgYGJpZ2ludGAuXG4gICAgICpcbiAgICAgKiBGaWVsZCBvcHRpb24gYFtqc3R5cGUgPSBKU19OT1JNQUxdYC5cbiAgICAgKi9cbiAgICBMb25nVHlwZVtMb25nVHlwZVtcIkJJR0lOVFwiXSA9IDBdID0gXCJCSUdJTlRcIjtcbiAgICAvKipcbiAgICAgKiBVc2UgSmF2YVNjcmlwdCBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEZpZWxkIG9wdGlvbiBgW2pzdHlwZSA9IEpTX1NUUklOR11gLlxuICAgICAqL1xuICAgIExvbmdUeXBlW0xvbmdUeXBlW1wiU1RSSU5HXCJdID0gMV0gPSBcIlNUUklOR1wiO1xuICAgIC8qKlxuICAgICAqIFVzZSBKYXZhU2NyaXB0IGBudW1iZXJgLlxuICAgICAqXG4gICAgICogTGFyZ2UgdmFsdWVzIHdpbGwgbG9vc2UgcHJlY2lzaW9uLlxuICAgICAqXG4gICAgICogRmllbGQgb3B0aW9uIGBbanN0eXBlID0gSlNfTlVNQkVSXWAuXG4gICAgICovXG4gICAgTG9uZ1R5cGVbTG9uZ1R5cGVbXCJOVU1CRVJcIl0gPSAyXSA9IFwiTlVNQkVSXCI7XG59KShMb25nVHlwZSA9IGV4cG9ydHMuTG9uZ1R5cGUgfHwgKGV4cG9ydHMuTG9uZ1R5cGUgPSB7fSkpO1xuLyoqXG4gKiBQcm90b2J1ZiAyLjEuMCBpbnRyb2R1Y2VkIHBhY2tlZCByZXBlYXRlZCBmaWVsZHMuXG4gKiBTZXR0aW5nIHRoZSBmaWVsZCBvcHRpb24gYFtwYWNrZWQgPSB0cnVlXWAgZW5hYmxlcyBwYWNraW5nLlxuICpcbiAqIEluIHByb3RvMywgYWxsIHJlcGVhdGVkIGZpZWxkcyBhcmUgcGFja2VkIGJ5IGRlZmF1bHQuXG4gKiBTZXR0aW5nIHRoZSBmaWVsZCBvcHRpb24gYFtwYWNrZWQgPSBmYWxzZV1gIGRpc2FibGVzIHBhY2tpbmcuXG4gKlxuICogUGFja2VkIHJlcGVhdGVkIGZpZWxkcyBhcmUgZW5jb2RlZCB3aXRoIGEgc2luZ2xlIHRhZyxcbiAqIHRoZW4gYSBsZW5ndGgtZGVsaW1pdGVyLCB0aGVuIHRoZSBlbGVtZW50IHZhbHVlcy5cbiAqXG4gKiBVbnBhY2tlZCByZXBlYXRlZCBmaWVsZHMgYXJlIGVuY29kZWQgd2l0aCBhIHRhZyBhbmRcbiAqIHZhbHVlIGZvciBlYWNoIGVsZW1lbnQuXG4gKlxuICogYGJ5dGVzYCBhbmQgYHN0cmluZ2AgY2Fubm90IGJlIHBhY2tlZC5cbiAqL1xudmFyIFJlcGVhdFR5cGU7XG4oZnVuY3Rpb24gKFJlcGVhdFR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZmllbGQgaXMgbm90IHJlcGVhdGVkLlxuICAgICAqL1xuICAgIFJlcGVhdFR5cGVbUmVwZWF0VHlwZVtcIk5PXCJdID0gMF0gPSBcIk5PXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGZpZWxkIGlzIHJlcGVhdGVkIGFuZCBzaG91bGQgYmUgcGFja2VkLlxuICAgICAqIEludmFsaWQgZm9yIGBieXRlc2AgYW5kIGBzdHJpbmdgLCB0aGV5IGNhbm5vdCBiZSBwYWNrZWQuXG4gICAgICovXG4gICAgUmVwZWF0VHlwZVtSZXBlYXRUeXBlW1wiUEFDS0VEXCJdID0gMV0gPSBcIlBBQ0tFRFwiO1xuICAgIC8qKlxuICAgICAqIFRoZSBmaWVsZCBpcyByZXBlYXRlZCBidXQgc2hvdWxkIG5vdCBiZSBwYWNrZWQuXG4gICAgICogVGhlIG9ubHkgdmFsaWQgcmVwZWF0IHR5cGUgZm9yIHJlcGVhdGVkIGBieXRlc2AgYW5kIGBzdHJpbmdgLlxuICAgICAqL1xuICAgIFJlcGVhdFR5cGVbUmVwZWF0VHlwZVtcIlVOUEFDS0VEXCJdID0gMl0gPSBcIlVOUEFDS0VEXCI7XG59KShSZXBlYXRUeXBlID0gZXhwb3J0cy5SZXBlYXRUeXBlIHx8IChleHBvcnRzLlJlcGVhdFR5cGUgPSB7fSkpO1xuLyoqXG4gKiBUdXJucyBQYXJ0aWFsRmllbGRJbmZvIGludG8gRmllbGRJbmZvLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGaWVsZEluZm8oZmllbGQpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgZmllbGQubG9jYWxOYW1lID0gKF9hID0gZmllbGQubG9jYWxOYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBsb3dlcl9jYW1lbF9jYXNlXzEubG93ZXJDYW1lbENhc2UoZmllbGQubmFtZSk7XG4gICAgZmllbGQuanNvbk5hbWUgPSAoX2IgPSBmaWVsZC5qc29uTmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbG93ZXJfY2FtZWxfY2FzZV8xLmxvd2VyQ2FtZWxDYXNlKGZpZWxkLm5hbWUpO1xuICAgIGZpZWxkLnJlcGVhdCA9IChfYyA9IGZpZWxkLnJlcGVhdCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogUmVwZWF0VHlwZS5OTztcbiAgICBmaWVsZC5vcHQgPSAoX2QgPSBmaWVsZC5vcHQpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IChmaWVsZC5yZXBlYXQgPyBmYWxzZSA6IGZpZWxkLm9uZW9mID8gZmFsc2UgOiBmaWVsZC5raW5kID09IFwibWVzc2FnZVwiKTtcbiAgICByZXR1cm4gZmllbGQ7XG59XG5leHBvcnRzLm5vcm1hbGl6ZUZpZWxkSW5mbyA9IG5vcm1hbGl6ZUZpZWxkSW5mbztcbi8qKlxuICogUmVhZCBjdXN0b20gZmllbGQgb3B0aW9ucyBmcm9tIGEgZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2UgcmVhZEZpZWxkT3B0aW9uKClcbiAqL1xuZnVuY3Rpb24gcmVhZEZpZWxkT3B0aW9ucyhtZXNzYWdlVHlwZSwgZmllbGROYW1lLCBleHRlbnNpb25OYW1lLCBleHRlbnNpb25UeXBlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG9wdGlvbnMgPSAoX2EgPSBtZXNzYWdlVHlwZS5maWVsZHMuZmluZCgobSwgaSkgPT4gbS5sb2NhbE5hbWUgPT0gZmllbGROYW1lIHx8IGkgPT0gZmllbGROYW1lKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnM7XG4gICAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9uc1tleHRlbnNpb25OYW1lXSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uc1tleHRlbnNpb25OYW1lXSkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnJlYWRGaWVsZE9wdGlvbnMgPSByZWFkRmllbGRPcHRpb25zO1xuZnVuY3Rpb24gcmVhZEZpZWxkT3B0aW9uKG1lc3NhZ2VUeXBlLCBmaWVsZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IG1lc3NhZ2VUeXBlLmZpZWxkcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PSBmaWVsZE5hbWUgfHwgaSA9PSBmaWVsZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uVmFsID0gb3B0aW9uc1tleHRlbnNpb25OYW1lXTtcbiAgICBpZiAob3B0aW9uVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblR5cGUgPyBleHRlbnNpb25UeXBlLmZyb21Kc29uKG9wdGlvblZhbCkgOiBvcHRpb25WYWw7XG59XG5leHBvcnRzLnJlYWRGaWVsZE9wdGlvbiA9IHJlYWRGaWVsZE9wdGlvbjtcbmZ1bmN0aW9uIHJlYWRNZXNzYWdlT3B0aW9uKG1lc3NhZ2VUeXBlLCBleHRlbnNpb25OYW1lLCBleHRlbnNpb25UeXBlKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IG1lc3NhZ2VUeXBlLm9wdGlvbnM7XG4gICAgY29uc3Qgb3B0aW9uVmFsID0gb3B0aW9uc1tleHRlbnNpb25OYW1lXTtcbiAgICBpZiAob3B0aW9uVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblR5cGUgPyBleHRlbnNpb25UeXBlLmZyb21Kc29uKG9wdGlvblZhbCkgOiBvcHRpb25WYWw7XG59XG5leHBvcnRzLnJlYWRNZXNzYWdlT3B0aW9uID0gcmVhZE1lc3NhZ2VPcHRpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTZWxlY3RlZE9uZW9mVmFsdWUgPSBleHBvcnRzLmNsZWFyT25lb2ZWYWx1ZSA9IGV4cG9ydHMuc2V0VW5rbm93bk9uZW9mVmFsdWUgPSBleHBvcnRzLnNldE9uZW9mVmFsdWUgPSBleHBvcnRzLmdldE9uZW9mVmFsdWUgPSBleHBvcnRzLmlzT25lb2ZHcm91cCA9IHZvaWQgMDtcbi8qKlxuICogSXMgdGhlIGdpdmVuIHZhbHVlIGEgdmFsaWQgb25lb2YgZ3JvdXA/XG4gKlxuICogV2UgcmVwcmVzZW50IHByb3RvYnVmIGBvbmVvZmAgYXMgYWxnZWJyYWljIGRhdGEgdHlwZXMgKEFEVCkgaW4gZ2VuZXJhdGVkXG4gKiBjb2RlLiBCdXQgd2hlbiB3b3JraW5nIHdpdGggbWVzc2FnZXMgb2YgdW5rbm93biB0eXBlLCB0aGUgQURUIGRvZXMgbm90XG4gKiBoZWxwIHVzLlxuICpcbiAqIFRoaXMgdHlwZSBndWFyZCBjaGVja3MgaWYgdGhlIGdpdmVuIG9iamVjdCBhZGhlcmVzIHRvIHRoZSBBRFQgcnVsZXMsIHdoaWNoXG4gKiBhcmUgYXMgZm9sbG93czpcbiAqXG4gKiAxKSBNdXN0IGJlIGFuIG9iamVjdC5cbiAqXG4gKiAyKSBNdXN0IGhhdmUgYSBcIm9uZW9mS2luZFwiIGRpc2NyaW1pbmF0b3IgcHJvcGVydHkuXG4gKlxuICogMykgSWYgXCJvbmVvZktpbmRcIiBpcyBgdW5kZWZpbmVkYCwgbm8gbWVtYmVyIGZpZWxkIGlzIHNlbGVjdGVkLiBUaGUgb2JqZWN0XG4gKiBtdXN0IG5vdCBoYXZlIGFueSBvdGhlciBwcm9wZXJ0aWVzLlxuICpcbiAqIDQpIElmIFwib25lb2ZLaW5kXCIgaXMgYSBgc3RyaW5nYCwgdGhlIG1lbWJlciBmaWVsZCB3aXRoIHRoaXMgbmFtZSBpc1xuICogc2VsZWN0ZWQuXG4gKlxuICogNSkgSWYgYSBtZW1iZXIgZmllbGQgaXMgc2VsZWN0ZWQsIHRoZSBvYmplY3QgbXVzdCBoYXZlIGEgc2Vjb25kIHByb3BlcnR5XG4gKiB3aXRoIHRoaXMgbmFtZS4gVGhlIHByb3BlcnR5IG11c3Qgbm90IGJlIGB1bmRlZmluZWRgLlxuICpcbiAqIDYpIE5vIGV4dHJhIHByb3BlcnRpZXMgYXJlIGFsbG93ZWQuIFRoZSBvYmplY3QgaGFzIGVpdGhlciBvbmUgcHJvcGVydHlcbiAqIChubyBzZWxlY3Rpb24pIG9yIHR3byBwcm9wZXJ0aWVzIChzZWxlY3Rpb24pLlxuICpcbiAqL1xuZnVuY3Rpb24gaXNPbmVvZkdyb3VwKGFueSkge1xuICAgIGlmICh0eXBlb2YgYW55ICE9ICdvYmplY3QnIHx8IGFueSA9PT0gbnVsbCB8fCAhYW55Lmhhc093blByb3BlcnR5KCdvbmVvZktpbmQnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZW9mIGFueS5vbmVvZktpbmQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgaWYgKGFueVthbnkub25lb2ZLaW5kXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbnkpLmxlbmd0aCA9PSAyO1xuICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYW55KS5sZW5ndGggPT0gMTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLmlzT25lb2ZHcm91cCA9IGlzT25lb2ZHcm91cDtcbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGZpZWxkIGluIGEgb25lb2YgZ3JvdXAuXG4gKi9cbmZ1bmN0aW9uIGdldE9uZW9mVmFsdWUob25lb2YsIGtpbmQpIHtcbiAgICByZXR1cm4gb25lb2Zba2luZF07XG59XG5leHBvcnRzLmdldE9uZW9mVmFsdWUgPSBnZXRPbmVvZlZhbHVlO1xuZnVuY3Rpb24gc2V0T25lb2ZWYWx1ZShvbmVvZiwga2luZCwgdmFsdWUpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG4gICAgfVxuICAgIG9uZW9mLm9uZW9mS2luZCA9IGtpbmQ7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb25lb2Zba2luZF0gPSB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLnNldE9uZW9mVmFsdWUgPSBzZXRPbmVvZlZhbHVlO1xuZnVuY3Rpb24gc2V0VW5rbm93bk9uZW9mVmFsdWUob25lb2YsIGtpbmQsIHZhbHVlKSB7XG4gICAgaWYgKG9uZW9mLm9uZW9mS2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSBvbmVvZltvbmVvZi5vbmVvZktpbmRdO1xuICAgIH1cbiAgICBvbmVvZi5vbmVvZktpbmQgPSBraW5kO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGtpbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvbmVvZltraW5kXSA9IHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMuc2V0VW5rbm93bk9uZW9mVmFsdWUgPSBzZXRVbmtub3duT25lb2ZWYWx1ZTtcbi8qKlxuICogUmVtb3ZlcyB0aGUgc2VsZWN0ZWQgZmllbGQgaW4gYSBvbmVvZiBncm91cC5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlIHJlY29tbWVuZGVkIHdheSB0byBtb2RpZnkgYSBvbmVvZiBncm91cCBpcyB0byBzZXRcbiAqIGEgbmV3IG9iamVjdDpcbiAqXG4gKiBgYGB0c1xuICogbWVzc2FnZS5yZXN1bHQgPSB7IG9uZW9mS2luZDogdW5kZWZpbmVkIH07XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY2xlYXJPbmVvZlZhbHVlKG9uZW9mKSB7XG4gICAgaWYgKG9uZW9mLm9uZW9mS2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSBvbmVvZltvbmVvZi5vbmVvZktpbmRdO1xuICAgIH1cbiAgICBvbmVvZi5vbmVvZktpbmQgPSB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmNsZWFyT25lb2ZWYWx1ZSA9IGNsZWFyT25lb2ZWYWx1ZTtcbi8qKlxuICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgdmFsdWUgb2YgdGhlIGdpdmVuIG9uZW9mIGdyb3VwLlxuICpcbiAqIE5vdCB0aGF0IHRoZSByZWNvbW1lbmRlZCB3YXkgdG8gYWNjZXNzIGEgb25lb2YgZ3JvdXAgaXMgdG8gY2hlY2tcbiAqIHRoZSBcIm9uZW9mS2luZFwiIHByb3BlcnR5IGFuZCBsZXQgVHlwZVNjcmlwdCBuYXJyb3cgZG93biB0aGUgdW5pb25cbiAqIHR5cGUgZm9yIHlvdTpcbiAqXG4gKiBgYGB0c1xuICogaWYgKG1lc3NhZ2UucmVzdWx0Lm9uZW9mS2luZCA9PT0gXCJlcnJvclwiKSB7XG4gKiAgIG1lc3NhZ2UucmVzdWx0LmVycm9yOyAvLyBzdHJpbmdcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEluIHRoZSByYXJlIGNhc2UgeW91IGp1c3QgbmVlZCB0aGUgdmFsdWUsIGFuZCBkbyBub3QgY2FyZSBhYm91dFxuICogd2hpY2ggcHJvdG9idWYgZmllbGQgaXMgc2VsZWN0ZWQsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb25cbiAqIGZvciBjb252ZW5pZW5jZS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2VsZWN0ZWRPbmVvZlZhbHVlKG9uZW9mKSB7XG4gICAgaWYgKG9uZW9mLm9uZW9mS2luZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBvbmVvZltvbmVvZi5vbmVvZktpbmRdO1xufVxuZXhwb3J0cy5nZXRTZWxlY3RlZE9uZW9mVmFsdWUgPSBnZXRTZWxlY3RlZE9uZW9mVmFsdWU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uVHlwZUNoZWNrID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCBvbmVvZl8xID0gcmVxdWlyZShcIi4vb25lb2ZcIik7XG4vLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuY2xhc3MgUmVmbGVjdGlvblR5cGVDaGVjayB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZmllbGRzID0gKF9hID0gaW5mby5maWVsZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgIH1cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCByZXEgPSBbXSwga25vd24gPSBbXSwgb25lb2ZzID0gW107XG4gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9uZW9mcy5pbmNsdWRlcyhmaWVsZC5vbmVvZikpIHtcbiAgICAgICAgICAgICAgICAgICAgb25lb2ZzLnB1c2goZmllbGQub25lb2YpO1xuICAgICAgICAgICAgICAgICAgICByZXEucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgICAgIGtub3duLnB1c2goZmllbGQub25lb2YpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGtub3duLnB1c2goZmllbGQubG9jYWxOYW1lKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWVsZC5vcHQgfHwgZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5wdXNoKGZpZWxkLmxvY2FsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnB1c2goZmllbGQubG9jYWxOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXEucHVzaChmaWVsZC5sb2NhbE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YSA9IHsgcmVxLCBrbm93biwgb25lb2ZzOiBPYmplY3QudmFsdWVzKG9uZW9mcykgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGFyZ3VtZW50IGEgdmFsaWQgbWVzc2FnZSBhcyBzcGVjaWZpZWQgYnkgdGhlXG4gICAgICogcmVmbGVjdGlvbiBpbmZvcm1hdGlvbj9cbiAgICAgKlxuICAgICAqIENoZWNrcyBhbGwgZmllbGQgdHlwZXMgcmVjdXJzaXZlbHkuIFRoZSBgZGVwdGhgXG4gICAgICogc3BlY2lmaWVzIGhvdyBkZWVwIGludG8gdGhlIHN0cnVjdHVyZSB0aGUgY2hlY2sgd2lsbCBiZS5cbiAgICAgKlxuICAgICAqIFdpdGggYSBkZXB0aCBvZiAwLCBvbmx5IHRoZSBwcmVzZW5jZSBvZiBmaWVsZHNcbiAgICAgKiBpcyBjaGVja2VkLlxuICAgICAqXG4gICAgICogV2l0aCBhIGRlcHRoIG9mIDEgb3IgbW9yZSwgdGhlIGZpZWxkIHR5cGVzIGFyZSBjaGVja2VkLlxuICAgICAqXG4gICAgICogV2l0aCBhIGRlcHRoIG9mIDIgb3IgbW9yZSwgdGhlIG1lbWJlcnMgb2YgbWFwLCByZXBlYXRlZFxuICAgICAqIGFuZCBtZXNzYWdlIGZpZWxkcyBhcmUgY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIE1lc3NhZ2UgZmllbGRzIHdpbGwgYmUgY2hlY2tlZCByZWN1cnNpdmVseSB3aXRoIGRlcHRoIC0gMS5cbiAgICAgKlxuICAgICAqIFRoZSBudW1iZXIgb2YgbWFwIGVudHJpZXMgLyByZXBlYXRlZCB2YWx1ZXMgYmVpbmcgY2hlY2tlZFxuICAgICAqIGlzIDwgZGVwdGguXG4gICAgICovXG4gICAgaXMobWVzc2FnZSwgZGVwdGgsIGFsbG93RXhjZXNzUHJvcGVydGllcyA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChkZXB0aCA8IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBtZXNzYWdlICE9ICdvYmplY3QnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLnByZXBhcmUoKTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhtZXNzYWdlKSwgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgLy8gaWYgYSByZXF1aXJlZCBmaWVsZCBpcyBtaXNzaW5nIGluIGFyZywgdGhpcyBjYW5ub3QgYmUgYSBUXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA8IGRhdGEucmVxLmxlbmd0aCB8fCBkYXRhLnJlcS5zb21lKG4gPT4gIWtleXMuaW5jbHVkZXMobikpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWFsbG93RXhjZXNzUHJvcGVydGllcykge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGFyZyBjb250YWlucyBhIGtleSB3ZSBkb250IGtub3csIHRoaXMgaXMgbm90IGEgbGl0ZXJhbCBUXG4gICAgICAgICAgICBpZiAoa2V5cy5zb21lKGsgPT4gIWRhdGEua25vd24uaW5jbHVkZXMoaykpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBcIldpdGggYSBkZXB0aCBvZiAwLCBvbmx5IHRoZSBwcmVzZW5jZSBhbmQgYWJzZW5jZSBvZiBmaWVsZHMgaXMgY2hlY2tlZC5cIlxuICAgICAgICAvLyBcIldpdGggYSBkZXB0aCBvZiAxIG9yIG1vcmUsIHRoZSBmaWVsZCB0eXBlcyBhcmUgY2hlY2tlZC5cIlxuICAgICAgICBpZiAoZGVwdGggPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBvbmVvZiBncm91cFxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgZGF0YS5vbmVvZnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbWVzc2FnZVtuYW1lXTtcbiAgICAgICAgICAgIGlmICghb25lb2ZfMS5pc09uZW9mR3JvdXAoZ3JvdXApKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChncm91cC5vbmVvZktpbmQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZChmID0+IGYubG9jYWxOYW1lID09PSBncm91cC5vbmVvZktpbmQpO1xuICAgICAgICAgICAgaWYgKCFmaWVsZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIHdlIGZvdW5kIG5vIGZpZWxkLCBidXQgaGF2ZSBhIGtpbmQsIHNvbWV0aGluZyBpcyB3cm9uZ1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZpZWxkKGdyb3VwW2dyb3VwLm9uZW9mS2luZF0sIGZpZWxkLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgdHlwZXNcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQobWVzc2FnZVtmaWVsZC5sb2NhbE5hbWVdLCBmaWVsZCwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmaWVsZChhcmcsIGZpZWxkLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKSB7XG4gICAgICAgIGxldCByZXBlYXRlZCA9IGZpZWxkLnJlcGVhdDtcbiAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQub3B0O1xuICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhhcmcsIGZpZWxkLlQsIGRlcHRoLCBmaWVsZC5MKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXIoYXJnLCBmaWVsZC5ULCBmaWVsZC5MKTtcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQub3B0O1xuICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhhcmcsIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIsIGRlcHRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXIoYXJnLCByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyKTtcbiAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzKGFyZywgZmllbGQuVCgpLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlKGFyZywgZmllbGQuVCgpLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKTtcbiAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZyAhPSAnb2JqZWN0JyB8fCBhcmcgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoZGVwdGggPCAyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWFwS2V5cyhhcmcsIGZpZWxkLkssIGRlcHRoKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcnMoT2JqZWN0LnZhbHVlcyhhcmcpLCBmaWVsZC5WLlQsIGRlcHRoLCBmaWVsZC5WLkwpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhPYmplY3QudmFsdWVzKGFyZyksIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIsIGRlcHRoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzKE9iamVjdC52YWx1ZXMoYXJnKSwgZmllbGQuVi5UKCksIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbWVzc2FnZShhcmcsIHR5cGUsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpIHtcbiAgICAgICAgaWYgKGFsbG93RXhjZXNzUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGUuaXNBc3NpZ25hYmxlKGFyZywgZGVwdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlLmlzKGFyZywgZGVwdGgpO1xuICAgIH1cbiAgICBtZXNzYWdlcyhhcmcsIHR5cGUsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkZXB0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGFsbG93RXhjZXNzUHJvcGVydGllcykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmcubGVuZ3RoICYmIGkgPCBkZXB0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGlmICghdHlwZS5pc0Fzc2lnbmFibGUoYXJnW2ldLCBkZXB0aCAtIDEpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZy5sZW5ndGggJiYgaSA8IGRlcHRoOyBpKyspXG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmlzKGFyZ1tpXSwgZGVwdGggLSAxKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzY2FsYXIoYXJnLCB0eXBlLCBsb25nVHlwZSkge1xuICAgICAgICBsZXQgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxvbmdUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuQklHSU5UOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gXCJiaWdpbnRcIjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5OVU1CRVI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSBcIm51bWJlclwiICYmICFpc05hTihhcmcpO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSAnYm9vbGVhbic7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09ICdzdHJpbmcnO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmcgaW5zdGFuY2VvZiBVaW50OEFycmF5O1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkRPVUJMRTpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSAnbnVtYmVyJyAmJiAhaXNOYU4oYXJnKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gJ251bWJlcicgJiYgTnVtYmVyLmlzSW50ZWdlcihhcmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjYWxhcnMoYXJnLCB0eXBlLCBkZXB0aCwgbG9uZ1R5cGUpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkZXB0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aCAmJiBpIDwgZGVwdGg7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NhbGFyKGFyZ1tpXSwgdHlwZSwgbG9uZ1R5cGUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBtYXBLZXlzKG1hcCwgdHlwZSwgZGVwdGgpIHtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhtYXApO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhrZXlzLnNsaWNlKDAsIGRlcHRoKS5tYXAoayA9PiBwYXJzZUludChrKSksIHR5cGUsIGRlcHRoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcnMoa2V5cy5zbGljZSgwLCBkZXB0aCkubWFwKGsgPT4gayA9PSAndHJ1ZScgPyB0cnVlIDogayA9PSAnZmFsc2UnID8gZmFsc2UgOiBrKSwgdHlwZSwgZGVwdGgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGtleXMsIHR5cGUsIGRlcHRoLCByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5TVFJJTkcpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uVHlwZUNoZWNrID0gUmVmbGVjdGlvblR5cGVDaGVjaztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25Mb25nQ29udmVydCA9IHZvaWQgMDtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZCB0byBjb252ZXJ0IGEgUGJMb25nIG9yIFBiVWxvbmcgdG8gYSBKYXZhU2NyaXB0XG4gKiByZXByZXNlbnRhdGlvbiBkdXJpbmcgcnVudGltZS5cbiAqXG4gKiBXb3JrcyB3aXRoIGdlbmVyYXRlZCBmaWVsZCBpbmZvcm1hdGlvbiwgYHVuZGVmaW5lZGAgaXMgZXF1aXZhbGVudFxuICogdG8gYFNUUklOR2AuXG4gKi9cbmZ1bmN0aW9uIHJlZmxlY3Rpb25Mb25nQ29udmVydChsb25nLCB0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuQklHSU5UOlxuICAgICAgICAgICAgcmV0dXJuIGxvbmcudG9CaWdJbnQoKTtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5OVU1CRVI6XG4gICAgICAgICAgICByZXR1cm4gbG9uZy50b051bWJlcigpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAvLyBjYXNlIExvbmdUeXBlLlNUUklORzpcbiAgICAgICAgICAgIHJldHVybiBsb25nLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuZXhwb3J0cy5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQgPSByZWZsZWN0aW9uTG9uZ0NvbnZlcnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uSnNvblJlYWRlciA9IHZvaWQgMDtcbmNvbnN0IGpzb25fdHlwaW5nc18xID0gcmVxdWlyZShcIi4vanNvbi10eXBpbmdzXCIpO1xuY29uc3QgYmFzZTY0XzEgPSByZXF1aXJlKFwiLi9iYXNlNjRcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWxvbmctY29udmVydFwiKTtcbi8qKlxuICogUmVhZHMgcHJvdG8zIG1lc3NhZ2VzIGluIGNhbm9uaWNhbCBKU09OIGZvcm1hdCB1c2luZyByZWZsZWN0aW9uIGluZm9ybWF0aW9uLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICovXG5jbGFzcyBSZWZsZWN0aW9uSnNvblJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH1cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLmZNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5mTWFwID0ge307XG4gICAgICAgICAgICBjb25zdCBmaWVsZHNJbnB1dCA9IChfYSA9IHRoaXMuaW5mby5maWVsZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHNJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZk1hcFtmaWVsZC5uYW1lXSA9IGZpZWxkO1xuICAgICAgICAgICAgICAgIHRoaXMuZk1hcFtmaWVsZC5qc29uTmFtZV0gPSBmaWVsZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZNYXBbZmllbGQubG9jYWxOYW1lXSA9IGZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbm5vdCBwYXJzZSBKU09OIDx0eXBlIG9mIGpzb25WYWx1ZT4gZm9yIDx0eXBlIG5hbWU+IzxmaWVsZE5hbWU+LlxuICAgIGFzc2VydChjb25kaXRpb24sIGZpZWxkTmFtZSwganNvblZhbHVlKSB7XG4gICAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgICAgICBsZXQgd2hhdCA9IGpzb25fdHlwaW5nc18xLnR5cGVvZkpzb25WYWx1ZShqc29uVmFsdWUpO1xuICAgICAgICAgICAgaWYgKHdoYXQgPT0gXCJudW1iZXJcIiB8fCB3aGF0ID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgICAgIHdoYXQgPSBqc29uVmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIEpTT04gJHt3aGF0fSBmb3IgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgbWVzc2FnZSBmcm9tIGNhbm9uaWNhbCBKU09OIGZvcm1hdCBpbnRvIHRoZSB0YXJnZXQgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIFJlcGVhdGVkIGZpZWxkcyBhcmUgYXBwZW5kZWQuIE1hcCBlbnRyaWVzIGFyZSBhZGRlZCwgb3ZlcndyaXRpbmdcbiAgICAgKiBleGlzdGluZyBrZXlzLlxuICAgICAqXG4gICAgICogSWYgYSBtZXNzYWdlIGZpZWxkIGlzIGFscmVhZHkgcHJlc2VudCwgaXQgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGVcbiAgICAgKiBuZXcgZGF0YS5cbiAgICAgKi9cbiAgICByZWFkKGlucHV0LCBtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICBjb25zdCBvbmVvZnNIYW5kbGVkID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2pzb25LZXksIGpzb25WYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZk1hcFtqc29uS2V5XTtcbiAgICAgICAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3VuZCB1bmtub3duIGZpZWxkIHdoaWxlIHJlYWRpbmcgJHt0aGlzLmluZm8udHlwZU5hbWV9IGZyb20gSlNPTiBmb3JtYXQuIEpTT04ga2V5OiAke2pzb25LZXl9YCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsb2NhbE5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgICAgICAvLyBoYW5kbGUgb25lb2YgQURUXG4gICAgICAgICAgICBsZXQgdGFyZ2V0OyAvLyB0aGlzIHdpbGwgYmUgdGhlIHRhcmdldCBmb3IgdGhlIGZpZWxkIHZhbHVlLCB3aGV0aGVyIGl0IGlzIG1lbWJlciBvZiBhIG9uZW9mIG9yIG5vdFxuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSA9PT0gbnVsbCAmJiAoZmllbGQua2luZCAhPT0gJ2VudW0nIHx8IGZpZWxkLlQoKVswXSAhPT0gJ2dvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2luY2UganNvbiBvYmplY3RzIGFyZSB1bm9yZGVyZWQgYnkgc3BlY2lmaWNhdGlvbiwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHRha2UgdGhlIGxhc3Qgb2YgbXVsdGlwbGUgb25lb2ZzXG4gICAgICAgICAgICAgICAgaWYgKG9uZW9mc0hhbmRsZWQuaW5jbHVkZXMoZmllbGQub25lb2YpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGxlIG1lbWJlcnMgb2YgdGhlIG9uZW9mIGdyb3VwIFwiJHtmaWVsZC5vbmVvZn1cIiBvZiAke3RoaXMuaW5mby50eXBlTmFtZX0gYXJlIHByZXNlbnQgaW4gSlNPTi5gKTtcbiAgICAgICAgICAgICAgICBvbmVvZnNIYW5kbGVkLnB1c2goZmllbGQub25lb2YpO1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IG1lc3NhZ2VbZmllbGQub25lb2ZdID0ge1xuICAgICAgICAgICAgICAgICAgICBvbmVvZktpbmQ6IGxvY2FsTmFtZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2UgaGF2ZSBoYW5kbGVkIG9uZW9mIGFib3ZlLiB3ZSBqdXN0IGhhdmUgcmVhZCB0aGUgdmFsdWUgaW50byBgdGFyZ2V0YC5cbiAgICAgICAgICAgIGlmIChmaWVsZC5raW5kID09ICdtYXAnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaW5wdXRcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChqc29uX3R5cGluZ3NfMS5pc0pzb25PYmplY3QoanNvblZhbHVlKSwgZmllbGQubmFtZSwganNvblZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBvdXIgdGFyZ2V0IHRvIHB1dCBtYXAgZW50cmllcyBpbnRvXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRPYmogPSB0YXJnZXRbbG9jYWxOYW1lXTtcbiAgICAgICAgICAgICAgICAvLyByZWFkIGVudHJpZXNcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtqc29uT2JqS2V5LCBqc29uT2JqVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGpzb25WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoanNvbk9ialZhbHVlICE9PSBudWxsLCBmaWVsZC5uYW1lICsgXCIgbWFwIHZhbHVlXCIsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZWFkIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWw7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGZpZWxkLlYuVCgpLmludGVybmFsSnNvblJlYWQoanNvbk9ialZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5lbnVtKGZpZWxkLlYuVCgpLCBqc29uT2JqVmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuc2NhbGFyKGpzb25PYmpWYWx1ZSwgZmllbGQuVi5ULCBmaWVsZC5WLkwsIGZpZWxkLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkLCBmaWVsZC5uYW1lICsgXCIgbWFwIHZhbHVlXCIsIGpzb25PYmpWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWQga2V5XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBqc29uT2JqS2V5O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuSyA9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0wpXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkgPT0gXCJ0cnVlXCIgPyB0cnVlIDoga2V5ID09IFwiZmFsc2VcIiA/IGZhbHNlIDoga2V5O1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnNjYWxhcihrZXksIGZpZWxkLkssIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLlNUUklORywgZmllbGQubmFtZSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRPYmpba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWVsZC5yZXBlYXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpbnB1dFxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KEFycmF5LmlzQXJyYXkoanNvblZhbHVlKSwgZmllbGQubmFtZSwganNvblZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBvdXIgdGFyZ2V0IHRvIHB1dCBhcnJheSBlbnRyaWVzIGludG9cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEFyciA9IHRhcmdldFtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIC8vIHJlYWQgYXJyYXkgZW50cmllc1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QganNvbkl0ZW0gb2YganNvblZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KGpzb25JdGVtICE9PSBudWxsLCBmaWVsZC5uYW1lLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGZpZWxkLlQoKS5pbnRlcm5hbEpzb25SZWFkKGpzb25JdGVtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5lbnVtKGZpZWxkLlQoKSwganNvbkl0ZW0sIGZpZWxkLm5hbWUsIG9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuc2NhbGFyKGpzb25JdGVtLCBmaWVsZC5ULCBmaWVsZC5MLCBmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCwgZmllbGQubmFtZSwganNvblZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRBcnIucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSA9PT0gbnVsbCAmJiBmaWVsZC5UKCkudHlwZU5hbWUgIT0gJ2dvb2dsZS5wcm90b2J1Zi5WYWx1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChmaWVsZC5vbmVvZiA9PT0gdW5kZWZpbmVkLCBmaWVsZC5uYW1lICsgXCIgKG9uZW9mIG1lbWJlcilcIiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IGZpZWxkLlQoKS5pbnRlcm5hbEpzb25SZWFkKGpzb25WYWx1ZSwgb3B0aW9ucywgdGFyZ2V0W2xvY2FsTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gdGhpcy5lbnVtKGZpZWxkLlQoKSwganNvblZhbHVlLCBmaWVsZC5uYW1lLCBvcHRpb25zLmlnbm9yZVVua25vd25GaWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IHRoaXMuc2NhbGFyKGpzb25WYWx1ZSwgZmllbGQuVCwgZmllbGQuTCwgZmllbGQubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgZmFsc2VgIGZvciB1bnJlY29nbml6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy5cbiAgICAgKlxuICAgICAqIGdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUgYWNjZXB0cyBvbmx5IEpTT04gYG51bGxgIChvciB0aGUgb2xkIGBcIk5VTExfVkFMVUVcImApLlxuICAgICAqL1xuICAgIGVudW0odHlwZSwganNvbiwgZmllbGROYW1lLCBpZ25vcmVVbmtub3duRmllbGRzKSB7XG4gICAgICAgIGlmICh0eXBlWzBdID09ICdnb29nbGUucHJvdG9idWYuTnVsbFZhbHVlJylcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChqc29uID09PSBudWxsIHx8IGpzb24gPT09IFwiTlVMTF9WQUxVRVwiLCBgVW5hYmxlIHRvIHBhcnNlIGZpZWxkICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkTmFtZX0sIGVudW0gJHt0eXBlWzBdfSBvbmx5IGFjY2VwdHMgbnVsbC5gKTtcbiAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAvLyB3ZSByZXF1aXJlIDAgdG8gYmUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGVudW1zXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YganNvbikge1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGpzb24pLCBgVW5hYmxlIHRvIHBhcnNlIGZpZWxkICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkTmFtZX0sIGVudW0gY2FuIG9ubHkgYmUgaW50ZWdyYWwgbnVtYmVyLCBnb3QgJHtqc29ufS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxFbnVtTmFtZSA9IGpzb247XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVbMl0gJiYganNvbi5zdWJzdHJpbmcoMCwgdHlwZVsyXS5sZW5ndGgpID09PSB0eXBlWzJdKVxuICAgICAgICAgICAgICAgICAgICAvLyBsb29rdXAgd2l0aG91dCB0aGUgc2hhcmVkIHByZWZpeFxuICAgICAgICAgICAgICAgICAgICBsb2NhbEVudW1OYW1lID0ganNvbi5zdWJzdHJpbmcodHlwZVsyXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxldCBlbnVtTnVtYmVyID0gdHlwZVsxXVtsb2NhbEVudW1OYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVudW1OdW1iZXIgPT09ICd1bmRlZmluZWQnICYmIGlnbm9yZVVua25vd25GaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIGVudW1OdW1iZXIgPT0gXCJudW1iZXJcIiwgYFVuYWJsZSB0byBwYXJzZSBmaWVsZCAke3RoaXMuaW5mby50eXBlTmFtZX0jJHtmaWVsZE5hbWV9LCBlbnVtICR7dHlwZVswXX0gaGFzIG5vIHZhbHVlIGZvciBcIiR7anNvbn1cIi5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW51bU51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnRfMS5hc3NlcnQoZmFsc2UsIGBVbmFibGUgdG8gcGFyc2UgZmllbGQgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfSwgY2Fubm90IHBhcnNlIGVudW0gdmFsdWUgZnJvbSAke3R5cGVvZiBqc29ufVwiLmApO1xuICAgIH1cbiAgICBzY2FsYXIoanNvbiwgdHlwZSwgbG9uZ1R5cGUsIGZpZWxkTmFtZSkge1xuICAgICAgICBsZXQgZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGZsb2F0LCBkb3VibGU6IEpTT04gdmFsdWUgd2lsbCBiZSBhIG51bWJlciBvciBvbmUgb2YgdGhlIHNwZWNpYWwgc3RyaW5nIHZhbHVlcyBcIk5hTlwiLCBcIkluZmluaXR5XCIsIGFuZCBcIi1JbmZpbml0eVwiLlxuICAgICAgICAgICAgICAgIC8vIEVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3MgYXJlIGFjY2VwdGVkLiBFeHBvbmVudCBub3RhdGlvbiBpcyBhbHNvIGFjY2VwdGVkLlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZMT0FUOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAuMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiTmFOXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5hTjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiSW5maW5pdHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBcIi1JbmZpbml0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcImVtcHR5IHN0cmluZ1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uID09IFwic3RyaW5nXCIgJiYganNvbi50cmltKCkubGVuZ3RoICE9PSBqc29uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZXh0cmEgd2hpdGVzcGFjZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9IFwic3RyaW5nXCIgJiYgdHlwZW9mIGpzb24gIT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsb2F0ID0gTnVtYmVyKGpzb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGZsb2F0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwibm90IGEgbnVtYmVyXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShmbG9hdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZmluaXR5IGFuZCAtaW5maW5pdHkgYXJlIGhhbmRsZWQgYnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFib3ZlLCBzbyB0aGlzIGlzIGFuIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJ0b28gbGFyZ2Ugb3Igc21hbGxcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQpXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRGbG9hdDMyKGZsb2F0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0O1xuICAgICAgICAgICAgICAgIC8vIGludDMyLCBmaXhlZDMyLCB1aW50MzI6IEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgbnVtYmVyLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludDMyO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGludDMyID0ganNvbjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoanNvbiA9PT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcImVtcHR5IHN0cmluZ1wiO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YganNvbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi50cmltKCkubGVuZ3RoICE9PSBqc29uLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJleHRyYSB3aGl0ZXNwYWNlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgPSBOdW1iZXIoanNvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGludDMyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRVSW50MzIoaW50MzIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMihpbnQzMik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnQzMjtcbiAgICAgICAgICAgICAgICAvLyBpbnQ2NCwgZml4ZWQ2NCwgdWludDY0OiBKU09OIHZhbHVlIHdpbGwgYmUgYSBkZWNpbWFsIHN0cmluZy4gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJMb25nLlpFUk8sIGxvbmdUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIGpzb24gIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocGJfbG9uZ18xLlBiTG9uZy5mcm9tKGpzb24pLCBsb25nVHlwZSk7XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVENjQ6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocGJfbG9uZ18xLlBiVUxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT0gXCJudW1iZXJcIiAmJiB0eXBlb2YganNvbiAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJVTG9uZy5mcm9tKGpzb24pLCBsb25nVHlwZSk7XG4gICAgICAgICAgICAgICAgLy8gYm9vbDpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nOlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZXh0cmEgd2hpdGVzcGFjZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChqc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiaW52YWxpZCBVVEY4XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgICAgICAgICAgICAvLyBieXRlczogSlNPTiB2YWx1ZSB3aWxsIGJlIHRoZSBkYXRhIGVuY29kZWQgYXMgYSBzdHJpbmcgdXNpbmcgc3RhbmRhcmQgYmFzZTY0IGVuY29kaW5nIHdpdGggcGFkZGluZ3MuXG4gICAgICAgICAgICAgICAgLy8gRWl0aGVyIHN0YW5kYXJkIG9yIFVSTC1zYWZlIGJhc2U2NCBlbmNvZGluZyB3aXRoL3dpdGhvdXQgcGFkZGluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwgfHwganNvbiA9PT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZGVjb2RlKGpzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NlcnQoZmFsc2UsIGZpZWxkTmFtZSArIChlID8gXCIgLSBcIiArIGUgOiBcIlwiKSwganNvbik7XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uSnNvblJlYWRlciA9IFJlZmxlY3Rpb25Kc29uUmVhZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVmbGVjdGlvbkpzb25Xcml0ZXIgPSB2b2lkIDA7XG5jb25zdCBiYXNlNjRfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuLyoqXG4gKiBXcml0ZXMgcHJvdG8zIG1lc3NhZ2VzIGluIGNhbm9uaWNhbCBKU09OIGZvcm1hdCB1c2luZyByZWZsZWN0aW9uXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAqL1xuY2xhc3MgUmVmbGVjdGlvbkpzb25Xcml0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGluZm8pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmZpZWxkcyA9IChfYSA9IGluZm8uZmllbGRzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIG1lc3NhZ2UgdG8gYSBKU09OIG9iamVjdCwgYmFzZWQgb24gdGhlIGZpZWxkIGRlc2NyaXB0b3JzLlxuICAgICAqL1xuICAgIHdyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHt9LCBzb3VyY2UgPSBtZXNzYWdlO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICAvLyBmaWVsZCBpcyBub3QgcGFydCBvZiBhIG9uZW9mLCBzaW1wbHkgd3JpdGUgYXMgaXNcbiAgICAgICAgICAgIGlmICghZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICBsZXQganNvblZhbHVlID0gdGhpcy5maWVsZChmaWVsZCwgc291cmNlW2ZpZWxkLmxvY2FsTmFtZV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChqc29uVmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAganNvbltvcHRpb25zLnVzZVByb3RvRmllbGROYW1lID8gZmllbGQubmFtZSA6IGZpZWxkLmpzb25OYW1lXSA9IGpzb25WYWx1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpZWxkIGlzIHBhcnQgb2YgYSBvbmVvZlxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBzb3VyY2VbZmllbGQub25lb2ZdO1xuICAgICAgICAgICAgaWYgKGdyb3VwLm9uZW9mS2luZCAhPT0gZmllbGQubG9jYWxOYW1lKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBub3Qgc2VsZWN0ZWQsIHNraXBcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IGZpZWxkLmtpbmQgPT0gJ3NjYWxhcicgfHwgZmllbGQua2luZCA9PSAnZW51bSdcbiAgICAgICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgZW1pdERlZmF1bHRWYWx1ZXM6IHRydWUgfSkgOiBvcHRpb25zO1xuICAgICAgICAgICAgbGV0IGpzb25WYWx1ZSA9IHRoaXMuZmllbGQoZmllbGQsIGdyb3VwW2ZpZWxkLmxvY2FsTmFtZV0sIG9wdCk7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoanNvblZhbHVlICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAganNvbltvcHRpb25zLnVzZVByb3RvRmllbGROYW1lID8gZmllbGQubmFtZSA6IGZpZWxkLmpzb25OYW1lXSA9IGpzb25WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgZmllbGQoZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBqc29uVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChmaWVsZC5raW5kID09ICdtYXAnKSB7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpO1xuICAgICAgICAgICAgY29uc3QganNvbk9iaiA9IHt9O1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2VudHJ5S2V5LCBlbnRyeVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuc2NhbGFyKGZpZWxkLlYuVCwgZW50cnlWYWx1ZSwgZmllbGQubmFtZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25PYmpbZW50cnlLZXkudG9TdHJpbmcoKV0gPSB2YWw7IC8vIEpTT04gc3RhbmRhcmQgYWxsb3dzIG9ubHkgKGRvdWJsZSBxdW90ZWQpIHN0cmluZyBhcyBwcm9wZXJ0eSBrZXlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IGZpZWxkLlYuVCgpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtlbnRyeUtleSwgZW50cnlWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLm1lc3NhZ2UobWVzc2FnZVR5cGUsIGVudHJ5VmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25PYmpbZW50cnlLZXkudG9TdHJpbmcoKV0gPSB2YWw7IC8vIEpTT04gc3RhbmRhcmQgYWxsb3dzIG9ubHkgKGRvdWJsZSBxdW90ZWQpIHN0cmluZyBhcyBwcm9wZXJ0eSBrZXlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtSW5mbyA9IGZpZWxkLlYuVCgpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtlbnRyeUtleSwgZW50cnlWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoZW50cnlWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBlbnRyeVZhbHVlID09ICdudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZW51bShlbnVtSW5mbywgZW50cnlWYWx1ZSwgZmllbGQubmFtZSwgZmFsc2UsIHRydWUsIG9wdGlvbnMuZW51bUFzSW50ZWdlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbk9ialtlbnRyeUtleS50b1N0cmluZygpXSA9IHZhbDsgLy8gSlNPTiBzdGFuZGFyZCBhbGxvd3Mgb25seSAoZG91YmxlIHF1b3RlZCkgc3RyaW5nIGFzIHByb3BlcnR5IGtleVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMgfHwgT2JqZWN0LmtleXMoanNvbk9iaikubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBqc29uVmFsdWUgPSBqc29uT2JqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpZWxkLnJlcGVhdCkge1xuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KEFycmF5LmlzQXJyYXkodmFsdWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGpzb25BcnIgPSBbXTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5zY2FsYXIoZmllbGQuVCwgdmFsdWVbaV0sIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbkFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bUluZm8gPSBmaWVsZC5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWx1ZVtpXSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZVtpXSA9PSAnbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmVudW0oZW51bUluZm8sIHZhbHVlW2ldLCBmaWVsZC5uYW1lLCBmaWVsZC5vcHQsIHRydWUsIG9wdGlvbnMuZW51bUFzSW50ZWdlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbkFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZVR5cGUgPSBmaWVsZC5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMubWVzc2FnZShtZXNzYWdlVHlwZSwgdmFsdWVbaV0sIGZpZWxkLm5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25BcnIucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYWRkIGNvbnZlcnRlZCBhcnJheSB0byBqc29uIG91dHB1dFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMgfHwganNvbkFyci5sZW5ndGggPiAwIHx8IG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMpXG4gICAgICAgICAgICAgICAganNvblZhbHVlID0ganNvbkFycjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAganNvblZhbHVlID0gdGhpcy5zY2FsYXIoZmllbGQuVCwgdmFsdWUsIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIGpzb25WYWx1ZSA9IHRoaXMuZW51bShmaWVsZC5UKCksIHZhbHVlLCBmaWVsZC5uYW1lLCBmaWVsZC5vcHQsIG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMsIG9wdGlvbnMuZW51bUFzSW50ZWdlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgIGpzb25WYWx1ZSA9IHRoaXMubWVzc2FnZShmaWVsZC5UKCksIHZhbHVlLCBmaWVsZC5uYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb25WYWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgbnVsbGAgYXMgdGhlIGRlZmF1bHQgZm9yIGdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUuXG4gICAgICovXG4gICAgZW51bSh0eXBlLCB2YWx1ZSwgZmllbGROYW1lLCBvcHRpb25hbCwgZW1pdERlZmF1bHRWYWx1ZXMsIGVudW1Bc0ludGVnZXIpIHtcbiAgICAgICAgaWYgKHR5cGVbMF0gPT0gJ2dvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUnKVxuICAgICAgICAgICAgcmV0dXJuICFlbWl0RGVmYXVsdFZhbHVlcyAmJiAhb3B0aW9uYWwgPyB1bmRlZmluZWQgOiBudWxsO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KG9wdGlvbmFsKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSAwICYmICFlbWl0RGVmYXVsdFZhbHVlcyAmJiAhb3B0aW9uYWwpXG4gICAgICAgICAgICAvLyB3ZSByZXF1aXJlIDAgdG8gYmUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGVudW1zXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdudW1iZXInKTtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIodmFsdWUpKTtcbiAgICAgICAgaWYgKGVudW1Bc0ludGVnZXIgfHwgIXR5cGVbMV0uaGFzT3duUHJvcGVydHkodmFsdWUpKVxuICAgICAgICAgICAgLy8gaWYgd2UgZG9uJ3Qgbm93IHRoZSBlbnVtIHZhbHVlLCBqdXN0IHJldHVybiB0aGUgbnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlWzJdKVxuICAgICAgICAgICAgLy8gcmVzdG9yZSB0aGUgZHJvcHBlZCBwcmVmaXhcbiAgICAgICAgICAgIHJldHVybiB0eXBlWzJdICsgdHlwZVsxXVt2YWx1ZV07XG4gICAgICAgIHJldHVybiB0eXBlWzFdW3ZhbHVlXTtcbiAgICB9XG4gICAgbWVzc2FnZSh0eXBlLCB2YWx1ZSwgZmllbGROYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMgPyBudWxsIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdHlwZS5pbnRlcm5hbEpzb25Xcml0ZSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHNjYWxhcih0eXBlLCB2YWx1ZSwgZmllbGROYW1lLCBvcHRpb25hbCwgZW1pdERlZmF1bHRWYWx1ZXMpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChvcHRpb25hbCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVkID0gZW1pdERlZmF1bHRWYWx1ZXMgfHwgb3B0aW9uYWw7XG4gICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAvLyBpbnQzMiwgZml4ZWQzMiwgdWludDMyOiBKU09OIHZhbHVlIHdpbGwgYmUgYSBkZWNpbWFsIG51bWJlci4gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRVSW50MzIodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIGZsb2F0LCBkb3VibGU6IEpTT04gdmFsdWUgd2lsbCBiZSBhIG51bWJlciBvciBvbmUgb2YgdGhlIHNwZWNpYWwgc3RyaW5nIHZhbHVlcyBcIk5hTlwiLCBcIkluZmluaXR5XCIsIGFuZCBcIi1JbmZpbml0eVwiLlxuICAgICAgICAgICAgLy8gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuIEV4cG9uZW50IG5vdGF0aW9uIGlzIGFsc28gYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0RmxvYXQzMih2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdudW1iZXInKTtcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdOYU4nO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0luZmluaXR5JztcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctSW5maW5pdHknO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIHN0cmluZzpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAvLyBib29sOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gZmFsc2UgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PSAnYm9vbGVhbicpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgc3RyaW5nLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UNjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT0gJ2JpZ2ludCcpO1xuICAgICAgICAgICAgICAgIGxldCB1bG9uZyA9IHBiX2xvbmdfMS5QYlVMb25nLmZyb20odmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh1bG9uZy5pc1plcm8oKSAmJiAhZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVsb25nLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyBKU09OIHZhbHVlIHdpbGwgYmUgYSBkZWNpbWFsIHN0cmluZy4gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVENjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PSAnYmlnaW50Jyk7XG4gICAgICAgICAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJMb25nLmZyb20odmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChsb25nLmlzWmVybygpICYmICFlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9uZy50b1N0cmluZygpO1xuICAgICAgICAgICAgLy8gYnl0ZXM6IEpTT04gdmFsdWUgd2lsbCBiZSB0aGUgZGF0YSBlbmNvZGVkIGFzIGEgc3RyaW5nIHVzaW5nIHN0YW5kYXJkIGJhc2U2NCBlbmNvZGluZyB3aXRoIHBhZGRpbmdzLlxuICAgICAgICAgICAgLy8gRWl0aGVyIHN0YW5kYXJkIG9yIFVSTC1zYWZlIGJhc2U2NCBlbmNvZGluZyB3aXRoL3dpdGhvdXQgcGFkZGluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpO1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUuYnl0ZUxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gXCJcIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZW5jb2RlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuUmVmbGVjdGlvbkpzb25Xcml0ZXIgPSBSZWZsZWN0aW9uSnNvbldyaXRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0ID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1sb25nLWNvbnZlcnRcIik7XG5jb25zdCBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuLyoqXG4gKiBDcmVhdGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHNjYWxhciB0eXBlLlxuICovXG5mdW5jdGlvbiByZWZsZWN0aW9uU2NhbGFyRGVmYXVsdCh0eXBlLCBsb25nVHlwZSA9IHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLlNUUklORykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVENjQ6XG4gICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocGJfbG9uZ18xLlBiVUxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJMb25nLlpFUk8sIGxvbmdUeXBlKTtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkRPVUJMRTpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZMT0FUOlxuICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxufVxuZXhwb3J0cy5yZWZsZWN0aW9uU2NhbGFyRGVmYXVsdCA9IHJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVmbGVjdGlvbkJpbmFyeVJlYWRlciA9IHZvaWQgMDtcbmNvbnN0IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWxvbmctY29udmVydFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tc2NhbGFyLWRlZmF1bHRcIik7XG4vKipcbiAqIFJlYWRzIHByb3RvMyBtZXNzYWdlcyBpbiBiaW5hcnkgZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24uXG4gKlxuICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nXG4gKi9cbmNsYXNzIFJlZmxlY3Rpb25CaW5hcnlSZWFkZXIge1xuICAgIGNvbnN0cnVjdG9yKGluZm8pIHtcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9XG4gICAgcHJlcGFyZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuZmllbGROb1RvRmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0lucHV0ID0gKF9hID0gdGhpcy5pbmZvLmZpZWxkcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgICAgICB0aGlzLmZpZWxkTm9Ub0ZpZWxkID0gbmV3IE1hcChmaWVsZHNJbnB1dC5tYXAoZmllbGQgPT4gW2ZpZWxkLm5vLCBmaWVsZF0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIG1lc3NhZ2UgZnJvbSBiaW5hcnkgZm9ybWF0IGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICAgICAqXG4gICAgICogUmVwZWF0ZWQgZmllbGRzIGFyZSBhcHBlbmRlZC4gTWFwIGVudHJpZXMgYXJlIGFkZGVkLCBvdmVyd3JpdGluZ1xuICAgICAqIGV4aXN0aW5nIGtleXMuXG4gICAgICpcbiAgICAgKiBJZiBhIG1lc3NhZ2UgZmllbGQgaXMgYWxyZWFkeSBwcmVzZW50LCBpdCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZVxuICAgICAqIG5ldyBkYXRhLlxuICAgICAqL1xuICAgIHJlYWQocmVhZGVyLCBtZXNzYWdlLCBvcHRpb25zLCBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlKCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAvLyByZWFkIHRoZSB0YWcgYW5kIGZpbmQgdGhlIGZpZWxkXG4gICAgICAgICAgICBjb25zdCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpLCBmaWVsZCA9IHRoaXMuZmllbGROb1RvRmllbGQuZ2V0KGZpZWxkTm8pO1xuICAgICAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgIGlmICh1ID09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy5pbmZvLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLmluZm8udHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRhcmdldCBvYmplY3QgZm9yIHRoZSBmaWVsZCB3ZSBhcmUgcmVhZGluZ1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IG1lc3NhZ2UsIHJlcGVhdGVkID0gZmllbGQucmVwZWF0LCBsb2NhbE5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgICAgICAvLyBpZiBmaWVsZCBpcyBtZW1iZXIgb2Ygb25lb2YgQURULCB1c2UgQURUIGFzIHRhcmdldFxuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2ZpZWxkLm9uZW9mXTtcbiAgICAgICAgICAgICAgICAvLyBpZiBvdGhlciBvbmVvZiBtZW1iZXIgc2VsZWN0ZWQsIHNldCBuZXcgQURUXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5vbmVvZktpbmQgIT09IGxvY2FsTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbWVzc2FnZVtmaWVsZC5vbmVvZl0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbmVvZktpbmQ6IGxvY2FsTmFtZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2UgaGF2ZSBoYW5kbGVkIG9uZW9mIGFib3ZlLCB3ZSBqdXN0IGhhdmUgcmVhZCB0aGUgdmFsdWUgaW50byBgdGFyZ2V0W2xvY2FsTmFtZV1gXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgbGV0IFQgPSBmaWVsZC5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlQ7XG4gICAgICAgICAgICAgICAgICAgIGxldCBMID0gZmllbGQua2luZCA9PSBcInNjYWxhclwiID8gZmllbGQuTCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGFyZ2V0W2xvY2FsTmFtZV07IC8vIHNhZmUgdG8gYXNzdW1lIHByZXNlbmNlIG9mIGFycmF5LCBvbmVvZiBjYW5ub3QgY29udGFpbiByZXBlYXRlZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXJlVHlwZSA9PSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkICYmIFQgIT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkcgJiYgVCAhPSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5zY2FsYXIocmVhZGVyLCBULCBMKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5zY2FsYXIocmVhZGVyLCBULCBMKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2xvY2FsTmFtZV0gPSB0aGlzLnNjYWxhcihyZWFkZXIsIFQsIEwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSB0YXJnZXRbbG9jYWxOYW1lXTsgLy8gc2FmZSB0byBhc3N1bWUgcHJlc2VuY2Ugb2YgYXJyYXksIG9uZW9mIGNhbm5vdCBjb250YWluIHJlcGVhdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1zZyA9IGZpZWxkLlQoKS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IGZpZWxkLlQoKS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIHRhcmdldFtsb2NhbE5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgICAgICBsZXQgW21hcEtleSwgbWFwVmFsXSA9IHRoaXMubWFwRW50cnkoZmllbGQsIHJlYWRlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNhZmUgdG8gYXNzdW1lIHByZXNlbmNlIG9mIG1hcCBvYmplY3QsIG9uZW9mIGNhbm5vdCBjb250YWluIHJlcGVhdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXVttYXBLZXldID0gbWFwVmFsO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgbWFwIGZpZWxkLCBleHBlY3Rpbmcga2V5IGZpZWxkID0gMSwgdmFsdWUgZmllbGQgPSAyXG4gICAgICovXG4gICAgbWFwRW50cnkoZmllbGQsIHJlYWRlciwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbGVuZ3RoID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICBsZXQgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgbGV0IGtleSA9IHVuZGVmaW5lZDsgLy8gamF2YXNjcmlwdCBvbmx5IGFsbG93cyBudW1iZXIgb3Igc3RyaW5nIGZvciBvYmplY3QgcHJvcGVydGllc1xuICAgICAgICBsZXQgdmFsID0gdW5kZWZpbmVkO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5LID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTClcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHJlYWRlci5ib29sKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9uZyB0eXBlcyBhcmUgcmVhZCBhcyBzdHJpbmcsIG51bWJlciB0eXBlcyBhcmUgb2theSBhcyBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuc2NhbGFyKHJlYWRlciwgZmllbGQuSywgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuU1RSSU5HKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuc2NhbGFyKHJlYWRlciwgZmllbGQuVi5ULCBmaWVsZC5WLkwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVi5UKCkuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBpbiBtYXAgZW50cnkgZm9yICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkLm5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQga2V5UmF3ID0gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KGZpZWxkLkspO1xuICAgICAgICAgICAga2V5ID0gZmllbGQuSyA9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0wgPyBrZXlSYXcudG9TdHJpbmcoKSA6IGtleVJhdztcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KGZpZWxkLlYuVCwgZmllbGQuVi5MKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVi5UKCkuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2tleSwgdmFsXTtcbiAgICB9XG4gICAgc2NhbGFyKHJlYWRlciwgdHlwZSwgbG9uZ1R5cGUpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5mbG9hdCgpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIuaW50NjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLnVpbnQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLmZpeGVkNjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5maXhlZDMyKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIuc2ZpeGVkMzIoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLnNmaXhlZDY0KCksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5zaW50MzIoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHJlYWRlci5zaW50NjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uQmluYXJ5UmVhZGVyID0gUmVmbGVjdGlvbkJpbmFyeVJlYWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXIgPSB2b2lkIDA7XG5jb25zdCBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9iaW5hcnktZm9ybWF0LWNvbnRyYWN0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG4vKipcbiAqIFdyaXRlcyBwcm90bzMgbWVzc2FnZXMgaW4gYmluYXJ5IGZvcm1hdCB1c2luZyByZWZsZWN0aW9uIGluZm9ybWF0aW9uLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9lbmNvZGluZ1xuICovXG5jbGFzcyBSZWZsZWN0aW9uQmluYXJ5V3JpdGVyIHtcbiAgICBjb25zdHJ1Y3RvcihpbmZvKSB7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfVxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0lucHV0ID0gdGhpcy5pbmZvLmZpZWxkcyA/IHRoaXMuaW5mby5maWVsZHMuY29uY2F0KCkgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzSW5wdXQuc29ydCgoYSwgYikgPT4gYS5ubyAtIGIubm8pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0LlxuICAgICAqL1xuICAgIHdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLnByZXBhcmUoKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgbGV0IHZhbHVlLCAvLyB0aGlzIHdpbGwgYmUgb3VyIGZpZWxkIHZhbHVlLCB3aGV0aGVyIGl0IGlzIG1lbWJlciBvZiBhIG9uZW9mIG9yIG5vdFxuICAgICAgICAgICAgZW1pdERlZmF1bHQsIC8vIHdoZXRoZXIgd2UgZW1pdCB0aGUgZGVmYXVsdCB2YWx1ZSAob25seSB0cnVlIGZvciBvbmVvZiBtZW1iZXJzKVxuICAgICAgICAgICAgcmVwZWF0ZWQgPSBmaWVsZC5yZXBlYXQsIGxvY2FsTmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBvbmVvZiBBRFRcbiAgICAgICAgICAgIGlmIChmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbWVzc2FnZVtmaWVsZC5vbmVvZl07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwLm9uZW9mS2luZCAhPT0gbG9jYWxOYW1lKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gaWYgZmllbGQgaXMgbm90IHNlbGVjdGVkLCBza2lwXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBncm91cFtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIGVtaXREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbWVzc2FnZVtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIGVtaXREZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGhhbmRsZWQgb25lb2YgYWJvdmUuIHdlIGp1c3QgaGF2ZSB0byBob25vciBgZW1pdERlZmF1bHRgLlxuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQua2luZCA9PSBcImVudW1cIiA/IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIgOiBmaWVsZC5UO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQgPT0gcmVmbGVjdGlvbl9pbmZvXzEuUmVwZWF0VHlwZS5QQUNLRUQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWNrZWQod3JpdGVyLCBULCBmaWVsZC5ubywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FsYXIod3JpdGVyLCBULCBmaWVsZC5ubywgaXRlbSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChmaWVsZC5vcHQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIFQsIGZpZWxkLm5vLCB2YWx1ZSwgZW1pdERlZmF1bHQgfHwgZmllbGQub3B0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoQXJyYXkuaXNBcnJheSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSh3cml0ZXIsIG9wdGlvbnMsIGZpZWxkLlQoKSwgZmllbGQubm8sIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlKHdyaXRlciwgb3B0aW9ucywgZmllbGQuVCgpLCBmaWVsZC5ubywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEVudHJ5KHdyaXRlciwgb3B0aW9ucywgZmllbGQsIGtleSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT09IHRydWUgPyBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy5pbmZvLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgIH1cbiAgICBtYXBFbnRyeSh3cml0ZXIsIG9wdGlvbnMsIGZpZWxkLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHdyaXRlci50YWcoZmllbGQubm8sIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpO1xuICAgICAgICB3cml0ZXIuZm9yaygpO1xuICAgICAgICAvLyBqYXZhc2NyaXB0IG9ubHkgYWxsb3dzIG51bWJlciBvciBzdHJpbmcgZm9yIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICAgIC8vIHdlIGNvbnZlcnQgZnJvbSBvdXIgcmVwcmVzZW50YXRpb24gdG8gdGhlIHByb3RvYnVmIHR5cGVcbiAgICAgICAgbGV0IGtleVZhbHVlID0ga2V5O1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLkspIHtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAga2V5VmFsdWUgPSBOdW1iZXIucGFyc2VJbnQoa2V5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChrZXkgPT0gJ3RydWUnIHx8IGtleSA9PSAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBrZXlWYWx1ZSA9IGtleSA9PSAndHJ1ZSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd3JpdGUga2V5LCBleHBlY3Rpbmcga2V5IGZpZWxkIG51bWJlciA9IDFcbiAgICAgICAgdGhpcy5zY2FsYXIod3JpdGVyLCBmaWVsZC5LLCAxLCBrZXlWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgIC8vIHdyaXRlIHZhbHVlLCBleHBlY3RpbmcgdmFsdWUgZmllbGQgbnVtYmVyID0gMlxuICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgY2FzZSAnc2NhbGFyJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIGZpZWxkLlYuVCwgMiwgdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsYXIod3JpdGVyLCByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyLCAyLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uod3JpdGVyLCBvcHRpb25zLCBmaWVsZC5WLlQoKSwgMiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5qb2luKCk7XG4gICAgfVxuICAgIG1lc3NhZ2Uod3JpdGVyLCBvcHRpb25zLCBoYW5kbGVyLCBmaWVsZE5vLCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaGFuZGxlci5pbnRlcm5hbEJpbmFyeVdyaXRlKHZhbHVlLCB3cml0ZXIudGFnKGZpZWxkTm8sIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucyk7XG4gICAgICAgIHdyaXRlci5qb2luKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgc2luZ2xlIHNjYWxhciB2YWx1ZS5cbiAgICAgKi9cbiAgICBzY2FsYXIod3JpdGVyLCB0eXBlLCBmaWVsZE5vLCB2YWx1ZSwgZW1pdERlZmF1bHQpIHtcbiAgICAgICAgbGV0IFt3aXJlVHlwZSwgbWV0aG9kLCBpc0RlZmF1bHRdID0gdGhpcy5zY2FsYXJJbmZvKHR5cGUsIHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc0RlZmF1bHQgfHwgZW1pdERlZmF1bHQpIHtcbiAgICAgICAgICAgIHdyaXRlci50YWcoZmllbGRObywgd2lyZVR5cGUpO1xuICAgICAgICAgICAgd3JpdGVyW21ldGhvZF0odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGFuIGFycmF5IG9mIHNjYWxhciB2YWx1ZXMgaW4gcGFja2VkIGZvcm1hdC5cbiAgICAgKi9cbiAgICBwYWNrZWQod3JpdGVyLCB0eXBlLCBmaWVsZE5vLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGUgIT09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVMgJiYgdHlwZSAhPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkcpO1xuICAgICAgICAvLyB3cml0ZSB0YWdcbiAgICAgICAgd3JpdGVyLnRhZyhmaWVsZE5vLCBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTtcbiAgICAgICAgLy8gYmVnaW4gbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICB3cml0ZXIuZm9yaygpO1xuICAgICAgICAvLyB3cml0ZSB2YWx1ZXMgd2l0aG91dCB0YWdzXG4gICAgICAgIGxldCBbLCBtZXRob2QsXSA9IHRoaXMuc2NhbGFySW5mbyh0eXBlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlclttZXRob2RdKHZhbHVlW2ldKTtcbiAgICAgICAgLy8gZW5kIGxlbmd0aCBkZWxpbWl0ZWRcbiAgICAgICAgd3JpdGVyLmpvaW4oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGluZm9ybWF0aW9uIGZvciB3cml0aW5nIGEgc2NhbGFyIHZhbHVlLlxuICAgICAqXG4gICAgICogUmV0dXJucyB0dXBsZTpcbiAgICAgKiBbMF06IGFwcHJvcHJpYXRlIFdpcmVUeXBlXG4gICAgICogWzFdOiBuYW1lIG9mIHRoZSBhcHByb3ByaWF0ZSBtZXRob2Qgb2YgSUJpbmFyeVdyaXRlclxuICAgICAqIFsyXTogd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkZWZhdWx0IHZhbHVlXG4gICAgICpcbiAgICAgKiBJZiBhcmd1bWVudCBgdmFsdWVgIGlzIG9taXR0ZWQsIFsyXSBpcyBhbHdheXMgZmFsc2UuXG4gICAgICovXG4gICAgc2NhbGFySW5mbyh0eXBlLCB2YWx1ZSkge1xuICAgICAgICBsZXQgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5WYXJpbnQ7XG4gICAgICAgIGxldCBtO1xuICAgICAgICBsZXQgaSA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBkID0gdmFsdWUgPT09IDA7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyOlxuICAgICAgICAgICAgICAgIG0gPSBcImludDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8ICF2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQ7XG4gICAgICAgICAgICAgICAgbSA9IFwic3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICBkID0gdmFsdWUgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgIG0gPSBcImJvb2xcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAgICAgbSA9IFwidWludDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIHQgPSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0NjQ7XG4gICAgICAgICAgICAgICAgbSA9IFwiZG91YmxlXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQzMjtcbiAgICAgICAgICAgICAgICBtID0gXCJmbG9hdFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSkuaXNaZXJvKCk7XG4gICAgICAgICAgICAgICAgbSA9IFwiaW50NjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UNjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiVUxvbmcuZnJvbSh2YWx1ZSkuaXNaZXJvKCk7XG4gICAgICAgICAgICAgICAgbSA9IFwidWludDY0XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDY0O1xuICAgICAgICAgICAgICAgIG0gPSBcImZpeGVkNjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUzpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCAhdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZDtcbiAgICAgICAgICAgICAgICBtID0gXCJieXRlc1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQzMjtcbiAgICAgICAgICAgICAgICBtID0gXCJmaXhlZDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQzMjtcbiAgICAgICAgICAgICAgICBtID0gXCJzZml4ZWQzMlwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSkuaXNaZXJvKCk7XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQ2NDtcbiAgICAgICAgICAgICAgICBtID0gXCJzZml4ZWQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICBtID0gXCJzaW50MzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICBtID0gXCJzaW50NjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3QsIG0sIGkgfHwgZF07XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uQmluYXJ5V3JpdGVyID0gUmVmbGVjdGlvbkJpbmFyeVdyaXRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25DcmVhdGUgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0XCIpO1xuY29uc3QgbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9tZXNzYWdlLXR5cGUtY29udHJhY3RcIik7XG4vKipcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdlbmVyaWMgbWVzc2FnZSwgdXNpbmcgdGhlIGZpZWxkXG4gKiBpbmZvcm1hdGlvbi5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbkNyZWF0ZSh0eXBlKSB7XG4gICAgLyoqXG4gICAgICogVGhpcyB0ZXJuYXJ5IGNhbiBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAgICogVGhlIGBPYmplY3QuY3JlYXRlKClgIGNvZGUgcGF0aCB1dGlsaXplcyBhIG5ldyBgbWVzc2FnZVByb3RvdHlwZWBcbiAgICAgKiBwcm9wZXJ0eSBvbiB0aGUgYElNZXNzYWdlVHlwZWAgd2hpY2ggaGFzIHRoaXMgc2FtZSBgTUVTU0FHRV9UWVBFYFxuICAgICAqIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IG9uIGl0LiBEb2luZyBpdCB0aGlzIHdheSBtZWFucyB0aGF0IHdlIG9ubHlcbiAgICAgKiBwYXkgdGhlIGNvc3Qgb2YgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpYCBvbmNlIHBlciBgSU1lc3NhZ2VUeXBlYFxuICAgICAqIGNsYXNzIG9mIG9uY2UgcGVyIFwiaW5zdGFuY2VcIi4gVGhlIGZhbHN5IGNvZGUgcGF0aCBpcyBvbmx5IHByb3ZpZGVkXG4gICAgICogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGluIGNhc2VzIHdoZXJlIHRoZSBydW50aW1lIGxpYnJhcnkgaXNcbiAgICAgKiB1cGRhdGVkIHdpdGhvdXQgYWxzbyB1cGRhdGluZyB0aGUgZ2VuZXJhdGVkIGNvZGUuXG4gICAgICovXG4gICAgY29uc3QgbXNnID0gdHlwZS5tZXNzYWdlUHJvdG90eXBlXG4gICAgICAgID8gT2JqZWN0LmNyZWF0ZSh0eXBlLm1lc3NhZ2VQcm90b3R5cGUpXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCBtZXNzYWdlX3R5cGVfY29udHJhY3RfMS5NRVNTQUdFX1RZUEUsIHsgdmFsdWU6IHR5cGUgfSk7XG4gICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgIGlmIChmaWVsZC5vcHQpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGZpZWxkLm9uZW9mKVxuICAgICAgICAgICAgbXNnW2ZpZWxkLm9uZW9mXSA9IHsgb25lb2ZLaW5kOiB1bmRlZmluZWQgfTtcbiAgICAgICAgZWxzZSBpZiAoZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgbXNnW25hbWVdID0gW107XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgbXNnW25hbWVdID0gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KGZpZWxkLlQsIGZpZWxkLkwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXF1aXJlIDAgdG8gYmUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGVudW1zXG4gICAgICAgICAgICAgICAgICAgIG1zZ1tuYW1lXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAgICAgbXNnW25hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbXNnO1xufVxuZXhwb3J0cy5yZWZsZWN0aW9uQ3JlYXRlID0gcmVmbGVjdGlvbkNyZWF0ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwgPSB2b2lkIDA7XG4vKipcbiAqIENvcHkgcGFydGlhbCBkYXRhIGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICpcbiAqIElmIGEgc2luZ3VsYXIgc2NhbGFyIG9yIGVudW0gZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgc291cmNlLCBpdFxuICogcmVwbGFjZXMgdGhlIGZpZWxkIGluIHRoZSB0YXJnZXQuXG4gKlxuICogSWYgYSBzaW5ndWxhciBtZXNzYWdlIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSwgaXQgaXMgbWVyZ2VkXG4gKiB3aXRoIHRoZSB0YXJnZXQgZmllbGQgYnkgY2FsbGluZyBtZXJnZVBhcnRpYWwoKSBvZiB0aGUgcmVzcG9uc2libGVcbiAqIG1lc3NhZ2UgdHlwZS5cbiAqXG4gKiBJZiBhIHJlcGVhdGVkIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSwgaXRzIHZhbHVlcyByZXBsYWNlXG4gKiBhbGwgdmFsdWVzIGluIHRoZSB0YXJnZXQgYXJyYXksIHJlbW92aW5nIGV4dHJhbmVvdXMgdmFsdWVzLlxuICogUmVwZWF0ZWQgbWVzc2FnZSBmaWVsZHMgYXJlIGNvcGllZCwgbm90IG1lcmdlZC5cbiAqXG4gKiBJZiBhIG1hcCBmaWVsZCBpcyBwcmVzZW50IGluIHRoZSBzb3VyY2UsIGVudHJpZXMgYXJlIGFkZGVkIHRvIHRoZVxuICogdGFyZ2V0IG1hcCwgcmVwbGFjaW5nIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBrZXkuIEVudHJpZXMgdGhhdCBvbmx5XG4gKiBleGlzdCBpbiB0aGUgdGFyZ2V0IHJlbWFpbi4gRW50cmllcyB3aXRoIG1lc3NhZ2UgdmFsdWVzIGFyZSBjb3BpZWQsXG4gKiBub3QgbWVyZ2VkLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBwcm90b2J1ZiBtZXJnZSBzZW1hbnRpY3MsXG4gKiB3aGljaCBhcHBlbmRzIHJlcGVhdGVkIGZpZWxkcy5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbk1lcmdlUGFydGlhbChpbmZvLCB0YXJnZXQsIHNvdXJjZSkge1xuICAgIGxldCBmaWVsZFZhbHVlLCAvLyB0aGUgZmllbGQgdmFsdWUgd2UgYXJlIHdvcmtpbmcgd2l0aFxuICAgIGlucHV0ID0gc291cmNlLCBvdXRwdXQ7IC8vIHdoZXJlIHdlIHdhbnQgb3VyIGZpZWxkIHZhbHVlIHRvIGdvXG4gICAgZm9yIChsZXQgZmllbGQgb2YgaW5mby5maWVsZHMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgIGlmIChmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBpbnB1dFtmaWVsZC5vbmVvZl07IC8vIHRoaXMgaXMgdGhlIG9uZW9mYHMgZ3JvdXAgaW4gdGhlIHNvdXJjZVxuICAgICAgICAgICAgaWYgKChncm91cCA9PT0gbnVsbCB8fCBncm91cCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ3JvdXAub25lb2ZLaW5kKSA9PSB1bmRlZmluZWQpIHsgLy8gdGhlIHVzZXIgaXMgZnJlZSB0byBvbWl0XG4gICAgICAgICAgICAgICAgY29udGludWU7IC8vIHdlIHNraXAgdGhpcyBmaWVsZCwgYW5kIGFsbCBvdGhlciBtZW1iZXJzIHRvb1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGdyb3VwW25hbWVdOyAvLyBvdXIgdmFsdWUgY29tZXMgZnJvbSB0aGUgdGhlIG9uZW9mIGdyb3VwIG9mIHRoZSBzb3VyY2VcbiAgICAgICAgICAgIG91dHB1dCA9IHRhcmdldFtmaWVsZC5vbmVvZl07IC8vIGFuZCBvdXIgb3V0cHV0IGlzIHRoZSBvbmVvZiBncm91cCBvZiB0aGUgdGFyZ2V0XG4gICAgICAgICAgICBvdXRwdXQub25lb2ZLaW5kID0gZ3JvdXAub25lb2ZLaW5kOyAvLyBhbHdheXMgdXBkYXRlIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvdXRwdXRbbmFtZV07IC8vIHJlbW92ZSBhbnkgZXhpc3RpbmcgdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCBmdXJ0aGVyIHdvcmsgb24gZmllbGRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBpbnB1dFtuYW1lXTsgLy8gd2UgYXJlIHVzaW5nIHRoZSBzb3VyY2UgZGlyZWN0bHlcbiAgICAgICAgICAgIG91dHB1dCA9IHRhcmdldDsgLy8gd2Ugd2FudCBvdXIgZmllbGQgdmFsdWUgdG8gZ28gZGlyZWN0bHkgaW50byB0aGUgdGFyZ2V0XG4gICAgICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCBmdXJ0aGVyIHdvcmsgb24gZmllbGQsIGV4aXN0aW5nIHZhbHVlIGlzIHVzZWQgYXMgaXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgb3V0cHV0W25hbWVdLmxlbmd0aCA9IGZpZWxkVmFsdWUubGVuZ3RoOyAvLyByZXNpemUgdGFyZ2V0IGFycmF5IHRvIG1hdGNoIHNvdXJjZSBhcnJheVxuICAgICAgICAvLyBub3cgd2UganVzdCB3b3JrIHdpdGggYGZpZWxkVmFsdWVgIGFuZCBgb3V0cHV0YCB0byBtZXJnZSB0aGUgdmFsdWVcbiAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRWYWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXVtpXSA9IGZpZWxkVmFsdWVbaV07IC8vIG5vdCBhIHJlZmVyZW5jZSB0eXBlXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV0gPSBmaWVsZFZhbHVlOyAvLyBub3QgYSByZWZlcmVuY2UgdHlwZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkVmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV1baV0gPSBULmNyZWF0ZShmaWVsZFZhbHVlW2ldKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRwdXRbbmFtZV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W25hbWVdID0gVC5jcmVhdGUoZmllbGRWYWx1ZSk7IC8vIG5vdGhpbmcgdG8gbWVyZ2Ugd2l0aFxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgVC5tZXJnZVBhcnRpYWwob3V0cHV0W25hbWVdLCBmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAvLyBNYXAgYW5kIHJlcGVhdGVkIGZpZWxkcyBhcmUgc2ltcGx5IG92ZXJ3cml0dGVuLCBub3QgYXBwZW5kZWQgb3IgbWVyZ2VkXG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvdXRwdXRbbmFtZV0sIGZpZWxkVmFsdWUpOyAvLyBlbGVtZW50cyBhcmUgbm90IHJlZmVyZW5jZSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLlYuVCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayBvZiBPYmplY3Qua2V5cyhmaWVsZFZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV1ba10gPSBULmNyZWF0ZShmaWVsZFZhbHVlW2tdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCA9IHJlZmxlY3Rpb25NZXJnZVBhcnRpYWw7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWZsZWN0aW9uRXF1YWxzID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0d28gbWVzc2FnZSBvZiB0aGUgc2FtZSB0eXBlIGhhdmUgdGhlIHNhbWUgZmllbGQgdmFsdWVzLlxuICogQ2hlY2tzIGZvciBkZWVwIGVxdWFsaXR5LCB0cmF2ZXJzaW5nIHJlcGVhdGVkIGZpZWxkcywgb25lb2YgZ3JvdXBzLCBtYXBzXG4gKiBhbmQgbWVzc2FnZXMgcmVjdXJzaXZlbHkuXG4gKiBXaWxsIGFsc28gcmV0dXJuIHRydWUgaWYgYm90aCBtZXNzYWdlcyBhcmUgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIHJlZmxlY3Rpb25FcXVhbHMoaW5mbywgYSwgYikge1xuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWEgfHwgIWIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBpbmZvLmZpZWxkcykge1xuICAgICAgICBsZXQgbG9jYWxOYW1lID0gZmllbGQubG9jYWxOYW1lO1xuICAgICAgICBsZXQgdmFsX2EgPSBmaWVsZC5vbmVvZiA/IGFbZmllbGQub25lb2ZdW2xvY2FsTmFtZV0gOiBhW2xvY2FsTmFtZV07XG4gICAgICAgIGxldCB2YWxfYiA9IGZpZWxkLm9uZW9mID8gYltmaWVsZC5vbmVvZl1bbG9jYWxOYW1lXSA6IGJbbG9jYWxOYW1lXTtcbiAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgIGxldCB0ID0gZmllbGQua2luZCA9PSBcImVudW1cIiA/IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIgOiBmaWVsZC5UO1xuICAgICAgICAgICAgICAgIGlmICghKGZpZWxkLnJlcGVhdFxuICAgICAgICAgICAgICAgICAgICA/IHJlcGVhdGVkUHJpbWl0aXZlRXEodCwgdmFsX2EsIHZhbF9iKVxuICAgICAgICAgICAgICAgICAgICA6IHByaW1pdGl2ZUVxKHQsIHZhbF9hLCB2YWxfYikpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgICAgICAgaWYgKCEoZmllbGQuVi5raW5kID09IFwibWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgID8gcmVwZWF0ZWRNc2dFcShmaWVsZC5WLlQoKSwgb2JqZWN0VmFsdWVzKHZhbF9hKSwgb2JqZWN0VmFsdWVzKHZhbF9iKSlcbiAgICAgICAgICAgICAgICAgICAgOiByZXBlYXRlZFByaW1pdGl2ZUVxKGZpZWxkLlYua2luZCA9PSBcImVudW1cIiA/IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIgOiBmaWVsZC5WLlQsIG9iamVjdFZhbHVlcyh2YWxfYSksIG9iamVjdFZhbHVlcyh2YWxfYikpKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIShmaWVsZC5yZXBlYXRcbiAgICAgICAgICAgICAgICAgICAgPyByZXBlYXRlZE1zZ0VxKFQsIHZhbF9hLCB2YWxfYilcbiAgICAgICAgICAgICAgICAgICAgOiBULmVxdWFscyh2YWxfYSwgdmFsX2IpKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0cy5yZWZsZWN0aW9uRXF1YWxzID0gcmVmbGVjdGlvbkVxdWFscztcbmNvbnN0IG9iamVjdFZhbHVlcyA9IE9iamVjdC52YWx1ZXM7XG5mdW5jdGlvbiBwcmltaXRpdmVFcSh0eXBlLCBhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICh0eXBlICE9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0IGJhID0gYTtcbiAgICBsZXQgYmIgPSBiO1xuICAgIGlmIChiYS5sZW5ndGggIT09IGJiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmEubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmIChiYVtpXSAhPSBiYltpXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlcGVhdGVkUHJpbWl0aXZlRXEodHlwZSwgYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghcHJpbWl0aXZlRXEodHlwZSwgYVtpXSwgYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiByZXBlYXRlZE1zZ0VxKHR5cGUsIGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKVxuICAgICAgICBpZiAoIXR5cGUuZXF1YWxzKGFbaV0sIGJbaV0pKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWVzc2FnZVR5cGUgPSB2b2lkIDA7XG5jb25zdCBtZXNzYWdlX3R5cGVfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZS1jb250cmFjdFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgcmVmbGVjdGlvbl90eXBlX2NoZWNrXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXR5cGUtY2hlY2tcIik7XG5jb25zdCByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24tcmVhZGVyXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9qc29uX3dyaXRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1qc29uLXdyaXRlclwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fYmluYXJ5X3JlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1iaW5hcnktcmVhZGVyXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9iaW5hcnlfd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWJpbmFyeS13cml0ZXJcIik7XG5jb25zdCByZWZsZWN0aW9uX2NyZWF0ZV8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1jcmVhdGVcIik7XG5jb25zdCByZWZsZWN0aW9uX21lcmdlX3BhcnRpYWxfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbFwiKTtcbmNvbnN0IGpzb25fdHlwaW5nc18xID0gcmVxdWlyZShcIi4vanNvbi10eXBpbmdzXCIpO1xuY29uc3QganNvbl9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2pzb24tZm9ybWF0LWNvbnRyYWN0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9lcXVhbHNfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tZXF1YWxzXCIpO1xuY29uc3QgYmluYXJ5X3dyaXRlcl8xID0gcmVxdWlyZShcIi4vYmluYXJ5LXdyaXRlclwiKTtcbmNvbnN0IGJpbmFyeV9yZWFkZXJfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1yZWFkZXJcIik7XG5jb25zdCBiYXNlRGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pKTtcbi8qKlxuICogVGhpcyBzdGFuZGFyZCBtZXNzYWdlIHR5cGUgcHJvdmlkZXMgcmVmbGVjdGlvbi1iYXNlZFxuICogb3BlcmF0aW9ucyB0byB3b3JrIHdpdGggYSBtZXNzYWdlLlxuICovXG5jbGFzcyBNZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgZmllbGRzLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdENoZWNrRGVwdGggPSAxNjtcbiAgICAgICAgdGhpcy50eXBlTmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzLm1hcChyZWZsZWN0aW9uX2luZm9fMS5ub3JtYWxpemVGaWVsZEluZm8pO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICAgICAgdGhpcy5tZXNzYWdlUHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJhc2VEZXNjcmlwdG9ycyksIHsgW21lc3NhZ2VfdHlwZV9jb250cmFjdF8xLk1FU1NBR0VfVFlQRV06IHsgdmFsdWU6IHRoaXMgfSB9KSk7XG4gICAgICAgIHRoaXMucmVmVHlwZUNoZWNrID0gbmV3IHJlZmxlY3Rpb25fdHlwZV9jaGVja18xLlJlZmxlY3Rpb25UeXBlQ2hlY2sodGhpcyk7XG4gICAgICAgIHRoaXMucmVmSnNvblJlYWRlciA9IG5ldyByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEuUmVmbGVjdGlvbkpzb25SZWFkZXIodGhpcyk7XG4gICAgICAgIHRoaXMucmVmSnNvbldyaXRlciA9IG5ldyByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEuUmVmbGVjdGlvbkpzb25Xcml0ZXIodGhpcyk7XG4gICAgICAgIHRoaXMucmVmQmluUmVhZGVyID0gbmV3IHJlZmxlY3Rpb25fYmluYXJ5X3JlYWRlcl8xLlJlZmxlY3Rpb25CaW5hcnlSZWFkZXIodGhpcyk7XG4gICAgICAgIHRoaXMucmVmQmluV3JpdGVyID0gbmV3IHJlZmxlY3Rpb25fYmluYXJ5X3dyaXRlcl8xLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXIodGhpcyk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHJlZmxlY3Rpb25fY3JlYXRlXzEucmVmbGVjdGlvbkNyZWF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9uZSB0aGUgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIFVua25vd24gZmllbGRzIGFyZSBkaXNjYXJkZWQuXG4gICAgICovXG4gICAgY2xvbmUobWVzc2FnZSkge1xuICAgICAgICBsZXQgY29weSA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwodGhpcywgY29weSwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIG1lc3NhZ2Ugb2YgdGhlIHNhbWUgdHlwZSBoYXZlIHRoZSBzYW1lIGZpZWxkIHZhbHVlcy5cbiAgICAgKiBDaGVja3MgZm9yIGRlZXAgZXF1YWxpdHksIHRyYXZlcnNpbmcgcmVwZWF0ZWQgZmllbGRzLCBvbmVvZiBncm91cHMsIG1hcHNcbiAgICAgKiBhbmQgbWVzc2FnZXMgcmVjdXJzaXZlbHkuXG4gICAgICogV2lsbCBhbHNvIHJldHVybiB0cnVlIGlmIGJvdGggbWVzc2FnZXMgYXJlIGB1bmRlZmluZWRgLlxuICAgICAqL1xuICAgIGVxdWFscyhhLCBiKSB7XG4gICAgICAgIHJldHVybiByZWZsZWN0aW9uX2VxdWFsc18xLnJlZmxlY3Rpb25FcXVhbHModGhpcywgYSwgYik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBnaXZlbiB2YWx1ZSBhc3NpZ25hYmxlIHRvIG91ciBtZXNzYWdlIHR5cGVcbiAgICAgKiBhbmQgY29udGFpbnMgbm8gW2V4Y2VzcyBwcm9wZXJ0aWVzXShodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9pbnRlcmZhY2VzLmh0bWwjZXhjZXNzLXByb3BlcnR5LWNoZWNrcyk/XG4gICAgICovXG4gICAgaXMoYXJnLCBkZXB0aCA9IHRoaXMuZGVmYXVsdENoZWNrRGVwdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmVHlwZUNoZWNrLmlzKGFyZywgZGVwdGgsIGZhbHNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGdpdmVuIHZhbHVlIGFzc2lnbmFibGUgdG8gb3VyIG1lc3NhZ2UgdHlwZSxcbiAgICAgKiByZWdhcmRsZXNzIG9mIFtleGNlc3MgcHJvcGVydGllc10oaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svaW50ZXJmYWNlcy5odG1sI2V4Y2Vzcy1wcm9wZXJ0eS1jaGVja3MpP1xuICAgICAqL1xuICAgIGlzQXNzaWduYWJsZShhcmcsIGRlcHRoID0gdGhpcy5kZWZhdWx0Q2hlY2tEZXB0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZUeXBlQ2hlY2suaXMoYXJnLCBkZXB0aCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvcHkgcGFydGlhbCBkYXRhIGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICAgICAqL1xuICAgIG1lcmdlUGFydGlhbCh0YXJnZXQsIHNvdXJjZSkge1xuICAgICAgICByZWZsZWN0aW9uX21lcmdlX3BhcnRpYWxfMS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKHRoaXMsIHRhcmdldCwgc291cmNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UgZnJvbSBiaW5hcnkgZm9ybWF0LlxuICAgICAqL1xuICAgIGZyb21CaW5hcnkoZGF0YSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgb3B0ID0gYmluYXJ5X3JlYWRlcl8xLmJpbmFyeVJlYWRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEJpbmFyeVJlYWQob3B0LnJlYWRlckZhY3RvcnkoZGF0YSksIGRhdGEuYnl0ZUxlbmd0aCwgb3B0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIG5ldyBtZXNzYWdlIGZyb20gYSBKU09OIHZhbHVlLlxuICAgICAqL1xuICAgIGZyb21Kc29uKGpzb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxKc29uUmVhZChqc29uLCBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25SZWFkT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBuZXcgbWVzc2FnZSBmcm9tIGEgSlNPTiBzdHJpbmcuXG4gICAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBULmZyb21Kc29uKEpTT04ucGFyc2UoanNvbikpYC5cbiAgICAgKi9cbiAgICBmcm9tSnNvblN0cmluZyhqc29uLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IEpTT04ucGFyc2UoanNvbik7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb21Kc29uKHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgdGhlIG1lc3NhZ2UgdG8gY2Fub25pY2FsIEpTT04gdmFsdWUuXG4gICAgICovXG4gICAgdG9Kc29uKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwganNvbl9mb3JtYXRfY29udHJhY3RfMS5qc29uV3JpdGVPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0aGUgbWVzc2FnZSB0byBjYW5vbmljYWwgSlNPTiBzdHJpbmcuXG4gICAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBKU09OLnN0cmluZ2lmeShULnRvSnNvbih0KSlgXG4gICAgICovXG4gICAgdG9Kc29uU3RyaW5nKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnRvSnNvbihtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJldHR5U3BhY2VzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdC5cbiAgICAgKi9cbiAgICB0b0JpbmFyeShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBvcHQgPSBiaW5hcnlfd3JpdGVyXzEuYmluYXJ5V3JpdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIG9wdC53cml0ZXJGYWN0b3J5KCksIG9wdCkuZmluaXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kLiBJZiB5b3UganVzdCB3YW50IHRvIHJlYWQgYSBtZXNzYWdlIGZyb21cbiAgICAgKiBKU09OLCB1c2UgYGZyb21Kc29uKClgIG9yIGBmcm9tSnNvblN0cmluZygpYC5cbiAgICAgKlxuICAgICAqIFJlYWRzIEpTT04gdmFsdWUgYW5kIG1lcmdlcyB0aGUgZmllbGRzIGludG8gdGhlIHRhcmdldFxuICAgICAqIGFjY29yZGluZyB0byBwcm90b2J1ZiBydWxlcy4gSWYgdGhlIHRhcmdldCBpcyBvbWl0dGVkLFxuICAgICAqIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQgZmlyc3QuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKGpzb24gIT09IG51bGwgJiYgdHlwZW9mIGpzb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZWZKc29uUmVhZGVyLnJlYWQoanNvbiwgbWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBtZXNzYWdlICR7dGhpcy50eXBlTmFtZX0gZnJvbSBKU09OICR7anNvbl90eXBpbmdzXzEudHlwZW9mSnNvblZhbHVlKGpzb24pfS5gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QuIElmIHlvdSBqdXN0IHdhbnQgdG8gd3JpdGUgYSBtZXNzYWdlXG4gICAgICogdG8gSlNPTiwgdXNlIGB0b0pzb24oKWAgb3IgYHRvSnNvblN0cmluZygpLlxuICAgICAqXG4gICAgICogV3JpdGVzIEpTT04gdmFsdWUgYW5kIHJldHVybnMgaXQuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLndyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZC4gSWYgeW91IGp1c3Qgd2FudCB0byB3cml0ZSBhIG1lc3NhZ2VcbiAgICAgKiBpbiBiaW5hcnkgZm9ybWF0LCB1c2UgYHRvQmluYXJ5KClgLlxuICAgICAqXG4gICAgICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSBpbiBiaW5hcnkgZm9ybWF0IGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBnaXZlblxuICAgICAqIHdyaXRlci4gUmV0dXJucyBwYXNzZWQgd3JpdGVyLlxuICAgICAqL1xuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucmVmQmluV3JpdGVyLndyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kLiBJZiB5b3UganVzdCB3YW50IHRvIHJlYWQgYSBtZXNzYWdlIGZyb21cbiAgICAgKiBiaW5hcnkgZGF0YSwgdXNlIGBmcm9tQmluYXJ5KClgLlxuICAgICAqXG4gICAgICogUmVhZHMgZGF0YSBmcm9tIGJpbmFyeSBmb3JtYXQgYW5kIG1lcmdlcyB0aGUgZmllbGRzIGludG9cbiAgICAgKiB0aGUgdGFyZ2V0IGFjY29yZGluZyB0byBwcm90b2J1ZiBydWxlcy4gSWYgdGhlIHRhcmdldCBpc1xuICAgICAqIG9taXR0ZWQsIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQgZmlyc3QuXG4gICAgICovXG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0aGlzLnJlZkJpblJlYWRlci5yZWFkKHJlYWRlciwgbWVzc2FnZSwgb3B0aW9ucywgbGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxufVxuZXhwb3J0cy5NZXNzYWdlVHlwZSA9IE1lc3NhZ2VUeXBlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udGFpbnNNZXNzYWdlVHlwZSA9IHZvaWQgMDtcbmNvbnN0IG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vbWVzc2FnZS10eXBlLWNvbnRyYWN0XCIpO1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgb2JqZWN0IGlzIGEgcHJvdG8gbWVzc2FnZS5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSAtIGl0IGlzIGhlcmUgdG8gc3RheSwgYnV0XG4gKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zTWVzc2FnZVR5cGUobXNnKSB7XG4gICAgcmV0dXJuIG1zZ1ttZXNzYWdlX3R5cGVfY29udHJhY3RfMS5NRVNTQUdFX1RZUEVdICE9IG51bGw7XG59XG5leHBvcnRzLmNvbnRhaW5zTWVzc2FnZVR5cGUgPSBjb250YWluc01lc3NhZ2VUeXBlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubGlzdEVudW1OdW1iZXJzID0gZXhwb3J0cy5saXN0RW51bU5hbWVzID0gZXhwb3J0cy5saXN0RW51bVZhbHVlcyA9IGV4cG9ydHMuaXNFbnVtT2JqZWN0ID0gdm9pZCAwO1xuLyoqXG4gKiBJcyB0aGlzIGEgbG9va3VwIG9iamVjdCBnZW5lcmF0ZWQgYnkgVHlwZXNjcmlwdCwgZm9yIGEgVHlwZXNjcmlwdCBlbnVtXG4gKiBnZW5lcmF0ZWQgYnkgcHJvdG9idWYtdHM/XG4gKlxuICogLSBObyBgY29uc3QgZW51bWAgKGVudW0gbXVzdCBub3QgYmUgaW5saW5lZCwgd2UgbmVlZCByZXZlcnNlIG1hcHBpbmcpLlxuICogLSBObyBzdHJpbmcgZW51bSAod2UgbmVlZCBpbnQzMiBmb3IgcHJvdG9idWYpLlxuICogLSBNdXN0IGhhdmUgYSB2YWx1ZSBmb3IgMCAob3RoZXJ3aXNlLCB3ZSB3b3VsZCBuZWVkIHRvIHN1cHBvcnQgY3VzdG9tIGRlZmF1bHQgdmFsdWVzKS5cbiAqL1xuZnVuY3Rpb24gaXNFbnVtT2JqZWN0KGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9ICdvYmplY3QnIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghYXJnLmhhc093blByb3BlcnR5KDApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChsZXQgayBvZiBPYmplY3Qua2V5cyhhcmcpKSB7XG4gICAgICAgIGxldCBudW0gPSBwYXJzZUludChrKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgICAgICAgICAgLy8gaXMgdGhlcmUgYSBuYW1lIGZvciB0aGUgbnVtYmVyP1xuICAgICAgICAgICAgbGV0IG5hbSA9IGFyZ1tudW1dO1xuICAgICAgICAgICAgaWYgKG5hbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIGRvZXMgdGhlIG5hbWUgcmVzb2x2ZSBiYWNrIHRvIHRoZSBudW1iZXI/XG4gICAgICAgICAgICBpZiAoYXJnW25hbV0gIT09IG51bSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBpcyB0aGVyZSBhIG51bWJlciBmb3IgdGhlIG5hbWU/XG4gICAgICAgICAgICBsZXQgbnVtID0gYXJnW2tdO1xuICAgICAgICAgICAgaWYgKG51bSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIGlzIGl0IGEgc3RyaW5nIGVudW0/XG4gICAgICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gJ251bWJlcicpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gZG8gd2Uga25vdyB0aGUgbnVtYmVyP1xuICAgICAgICAgICAgaWYgKGFyZ1tudW1dID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0cy5pc0VudW1PYmplY3QgPSBpc0VudW1PYmplY3Q7XG4vKipcbiAqIExpc3RzIGFsbCB2YWx1ZXMgb2YgYSBUeXBlc2NyaXB0IGVudW0sIGFzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhIFwibmFtZVwiXG4gKiBwcm9wZXJ0eSBhbmQgYSBcIm51bWJlclwiIHByb3BlcnR5LlxuICpcbiAqIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0aGF0IGEgbnVtYmVyIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UsIGJlY2F1c2UgaXQgaXNcbiAqIHBvc3NpYmxlIHRvIGhhdmUgYWxpYXNlcyBpbiBhbiBlbnVtLlxuICpcbiAqIFRocm93cyBpZiB0aGUgZW51bSBkb2VzIG5vdCBhZGhlcmUgdG8gdGhlIHJ1bGVzIG9mIGVudW1zIGdlbmVyYXRlZCBieVxuICogcHJvdG9idWYtdHMuIFNlZSBgaXNFbnVtT2JqZWN0KClgLlxuICovXG5mdW5jdGlvbiBsaXN0RW51bVZhbHVlcyhlbnVtT2JqZWN0KSB7XG4gICAgaWYgKCFpc0VudW1PYmplY3QoZW51bU9iamVjdCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBhIHR5cGVzY3JpcHQgZW51bSBvYmplY3RcIik7XG4gICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgIGZvciAobGV0IFtuYW1lLCBudW1iZXJdIG9mIE9iamVjdC5lbnRyaWVzKGVudW1PYmplY3QpKVxuICAgICAgICBpZiAodHlwZW9mIG51bWJlciA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgdmFsdWVzLnB1c2goeyBuYW1lLCBudW1iZXIgfSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbn1cbmV4cG9ydHMubGlzdEVudW1WYWx1ZXMgPSBsaXN0RW51bVZhbHVlcztcbi8qKlxuICogTGlzdHMgdGhlIG5hbWVzIG9mIGEgVHlwZXNjcmlwdCBlbnVtLlxuICpcbiAqIFRocm93cyBpZiB0aGUgZW51bSBkb2VzIG5vdCBhZGhlcmUgdG8gdGhlIHJ1bGVzIG9mIGVudW1zIGdlbmVyYXRlZCBieVxuICogcHJvdG9idWYtdHMuIFNlZSBgaXNFbnVtT2JqZWN0KClgLlxuICovXG5mdW5jdGlvbiBsaXN0RW51bU5hbWVzKGVudW1PYmplY3QpIHtcbiAgICByZXR1cm4gbGlzdEVudW1WYWx1ZXMoZW51bU9iamVjdCkubWFwKHZhbCA9PiB2YWwubmFtZSk7XG59XG5leHBvcnRzLmxpc3RFbnVtTmFtZXMgPSBsaXN0RW51bU5hbWVzO1xuLyoqXG4gKiBMaXN0cyB0aGUgbnVtYmVycyBvZiBhIFR5cGVzY3JpcHQgZW51bS5cbiAqXG4gKiBUaHJvd3MgaWYgdGhlIGVudW0gZG9lcyBub3QgYWRoZXJlIHRvIHRoZSBydWxlcyBvZiBlbnVtcyBnZW5lcmF0ZWQgYnlcbiAqIHByb3RvYnVmLXRzLiBTZWUgYGlzRW51bU9iamVjdCgpYC5cbiAqL1xuZnVuY3Rpb24gbGlzdEVudW1OdW1iZXJzKGVudW1PYmplY3QpIHtcbiAgICByZXR1cm4gbGlzdEVudW1WYWx1ZXMoZW51bU9iamVjdClcbiAgICAgICAgLm1hcCh2YWwgPT4gdmFsLm51bWJlcilcbiAgICAgICAgLmZpbHRlcigobnVtLCBpbmRleCwgYXJyKSA9PiBhcnIuaW5kZXhPZihudW0pID09IGluZGV4KTtcbn1cbmV4cG9ydHMubGlzdEVudW1OdW1iZXJzID0gbGlzdEVudW1OdW1iZXJzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIFB1YmxpYyBBUEkgb2YgdGhlIHByb3RvYnVmLXRzIHJ1bnRpbWUuXG4vLyBOb3RlOiB3ZSBkbyBub3QgdXNlIGBleHBvcnQgKiBmcm9tIC4uLmAgdG8gaGVscCB0cmVlIHNoYWtlcnMsXG4vLyB3ZWJwYWNrIHZlcmJvc2Ugb3V0cHV0IGhpbnRzIHRoYXQgdGhpcyBzaG91bGQgYmUgdXNlZnVsXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBDb252ZW5pZW5jZSBKU09OIHR5cGluZ3MgYW5kIGNvcnJlc3BvbmRpbmcgdHlwZSBndWFyZHNcbnZhciBqc29uX3R5cGluZ3NfMSA9IHJlcXVpcmUoXCIuL2pzb24tdHlwaW5nc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInR5cGVvZkpzb25WYWx1ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ganNvbl90eXBpbmdzXzEudHlwZW9mSnNvblZhbHVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNKc29uT2JqZWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX3R5cGluZ3NfMS5pc0pzb25PYmplY3Q7IH0gfSk7XG4vLyBCYXNlIDY0IGVuY29kaW5nXG52YXIgYmFzZTY0XzEgPSByZXF1aXJlKFwiLi9iYXNlNjRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiYXNlNjRkZWNvZGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJhc2U2NF8xLmJhc2U2NGRlY29kZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJhc2U2NGVuY29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZW5jb2RlOyB9IH0pO1xuLy8gVVRGOCBlbmNvZGluZ1xudmFyIHByb3RvYnVmanNfdXRmOF8xID0gcmVxdWlyZShcIi4vcHJvdG9idWZqcy11dGY4XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXRmOHJlYWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3RvYnVmanNfdXRmOF8xLnV0ZjhyZWFkOyB9IH0pO1xuLy8gQmluYXJ5IGZvcm1hdCBjb250cmFjdHMsIG9wdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcsIGZvciBleGFtcGxlXG52YXIgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vYmluYXJ5LWZvcm1hdC1jb250cmFjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIldpcmVUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZUJpbmFyeU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5tZXJnZUJpbmFyeU9wdGlvbnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbmtub3duRmllbGRIYW5kbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuVW5rbm93bkZpZWxkSGFuZGxlcjsgfSB9KTtcbi8vIFN0YW5kYXJkIElCaW5hcnlSZWFkZXIgaW1wbGVtZW50YXRpb25cbnZhciBiaW5hcnlfcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9iaW5hcnktcmVhZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmluYXJ5UmVhZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfcmVhZGVyXzEuQmluYXJ5UmVhZGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluYXJ5UmVhZE9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9yZWFkZXJfMS5iaW5hcnlSZWFkT3B0aW9uczsgfSB9KTtcbi8vIFN0YW5kYXJkIElCaW5hcnlXcml0ZXIgaW1wbGVtZW50YXRpb25cbnZhciBiaW5hcnlfd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9iaW5hcnktd3JpdGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmluYXJ5V3JpdGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfd3JpdGVyXzEuQmluYXJ5V3JpdGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluYXJ5V3JpdGVPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfd3JpdGVyXzEuYmluYXJ5V3JpdGVPcHRpb25zOyB9IH0pO1xuLy8gSW50NjQgYW5kIFVJbnQ2NCBpbXBsZW1lbnRhdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBiaW5hcnkgZm9ybWF0XG52YXIgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBiTG9uZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGJfbG9uZ18xLlBiTG9uZzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBiVUxvbmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBiX2xvbmdfMS5QYlVMb25nOyB9IH0pO1xuLy8gSlNPTiBmb3JtYXQgY29udHJhY3RzLCBvcHRpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLCBmb3IgZXhhbXBsZVxudmFyIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9qc29uLWZvcm1hdC1jb250cmFjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImpzb25SZWFkT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ganNvbl9mb3JtYXRfY29udHJhY3RfMS5qc29uUmVhZE9wdGlvbnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJqc29uV3JpdGVPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25Xcml0ZU9wdGlvbnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZUpzb25PcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX2Zvcm1hdF9jb250cmFjdF8xLm1lcmdlSnNvbk9wdGlvbnM7IH0gfSk7XG4vLyBNZXNzYWdlIHR5cGUgY29udHJhY3RcbnZhciBtZXNzYWdlX3R5cGVfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZS1jb250cmFjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1FU1NBR0VfVFlQRVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEuTUVTU0FHRV9UWVBFOyB9IH0pO1xuLy8gTWVzc2FnZSB0eXBlIGltcGxlbWVudGF0aW9uIHZpYSByZWZsZWN0aW9uXG52YXIgbWVzc2FnZV90eXBlXzEgPSByZXF1aXJlKFwiLi9tZXNzYWdlLXR5cGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNZXNzYWdlVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVzc2FnZV90eXBlXzEuTWVzc2FnZVR5cGU7IH0gfSk7XG4vLyBSZWZsZWN0aW9uIGluZm8sIGdlbmVyYXRlZCBieSB0aGUgcGx1Z2luLCBleHBvc2VkIHRvIHRoZSB1c2VyLCB1c2VkIGJ5IHJlZmxlY3Rpb24gb3BzXG52YXIgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTY2FsYXJUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTG9uZ1R5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVwZWF0VHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEuUmVwZWF0VHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vcm1hbGl6ZUZpZWxkSW5mb1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEubm9ybWFsaXplRmllbGRJbmZvOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZEZpZWxkT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZEZpZWxkT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRGaWVsZE9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZEZpZWxkT3B0aW9uOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZE1lc3NhZ2VPcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLnJlYWRNZXNzYWdlT3B0aW9uOyB9IH0pO1xuLy8gTWVzc2FnZSBvcGVyYXRpb25zIHZpYSByZWZsZWN0aW9uXG52YXIgcmVmbGVjdGlvbl90eXBlX2NoZWNrXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXR5cGUtY2hlY2tcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWZsZWN0aW9uVHlwZUNoZWNrXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX3R5cGVfY2hlY2tfMS5SZWZsZWN0aW9uVHlwZUNoZWNrOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fY3JlYXRlXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWNyZWF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZmxlY3Rpb25DcmVhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fY3JlYXRlXzEucmVmbGVjdGlvbkNyZWF0ZTsgfSB9KTtcbnZhciByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvblNjYWxhckRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMS5yZWZsZWN0aW9uU2NhbGFyRGVmYXVsdDsgfSB9KTtcbnZhciByZWZsZWN0aW9uX21lcmdlX3BhcnRpYWxfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZmxlY3Rpb25NZXJnZVBhcnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWw7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9lcXVhbHNfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tZXF1YWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvbkVxdWFsc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9lcXVhbHNfMS5yZWZsZWN0aW9uRXF1YWxzOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fYmluYXJ5X3JlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1iaW5hcnktcmVhZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkJpbmFyeVJlYWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEuUmVmbGVjdGlvbkJpbmFyeVJlYWRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2JpbmFyeV93cml0ZXJfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25CaW5hcnlXcml0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fYmluYXJ5X3dyaXRlcl8xLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXI7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9qc29uX3JlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1qc29uLXJlYWRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25Kc29uUmVhZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEuUmVmbGVjdGlvbkpzb25SZWFkZXI7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9qc29uX3dyaXRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1qc29uLXdyaXRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25Kc29uV3JpdGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEuUmVmbGVjdGlvbkpzb25Xcml0ZXI7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9jb250YWluc19tZXNzYWdlX3R5cGVfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tY29udGFpbnMtbWVzc2FnZS10eXBlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29udGFpbnNNZXNzYWdlVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9jb250YWluc19tZXNzYWdlX3R5cGVfMS5jb250YWluc01lc3NhZ2VUeXBlOyB9IH0pO1xuLy8gT25lb2YgaGVscGVyc1xudmFyIG9uZW9mXzEgPSByZXF1aXJlKFwiLi9vbmVvZlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT25lb2ZHcm91cFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb25lb2ZfMS5pc09uZW9mR3JvdXA7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRPbmVvZlZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLnNldE9uZW9mVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRPbmVvZlZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLmdldE9uZW9mVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjbGVhck9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuY2xlYXJPbmVvZlZhbHVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U2VsZWN0ZWRPbmVvZlZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLmdldFNlbGVjdGVkT25lb2ZWYWx1ZTsgfSB9KTtcbi8vIEVudW0gb2JqZWN0IHR5cGUgZ3VhcmQgYW5kIHJlZmxlY3Rpb24gdXRpbCwgbWF5IGJlIGludGVyZXN0aW5nIHRvIHRoZSB1c2VyLlxudmFyIGVudW1fb2JqZWN0XzEgPSByZXF1aXJlKFwiLi9lbnVtLW9iamVjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxpc3RFbnVtVmFsdWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmxpc3RFbnVtVmFsdWVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGlzdEVudW1OYW1lc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW51bV9vYmplY3RfMS5saXN0RW51bU5hbWVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGlzdEVudW1OdW1iZXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmxpc3RFbnVtTnVtYmVyczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRW51bU9iamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW51bV9vYmplY3RfMS5pc0VudW1PYmplY3Q7IH0gfSk7XG4vLyBsb3dlckNhbWVsQ2FzZSgpIGlzIGV4cG9ydGVkIGZvciBwbHVnaW4sIHJwYy1ydW50aW1lIGFuZCBvdGhlciBycGMgcGFja2FnZXNcbnZhciBsb3dlcl9jYW1lbF9jYXNlXzEgPSByZXF1aXJlKFwiLi9sb3dlci1jYW1lbC1jYXNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG93ZXJDYW1lbENhc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvd2VyX2NhbWVsX2Nhc2VfMS5sb3dlckNhbWVsQ2FzZTsgfSB9KTtcbi8vIGFzc2VydGlvbiBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciBwbHVnaW4sIG1heSBhbHNvIGJlIHVzZWZ1bCB0byB1c2VyXG52YXIgYXNzZXJ0XzEgPSByZXF1aXJlKFwiLi9hc3NlcnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc3NlcnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc2VydF8xLmFzc2VydDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydE5ldmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnROZXZlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydEludDMyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnRJbnQzMjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydFVJbnQzMlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzZXJ0XzEuYXNzZXJ0VUludDMyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0RmxvYXQzMlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzZXJ0XzEuYXNzZXJ0RmxvYXQzMjsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRpbWVzdGFtcCA9IHZvaWQgMDtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNCA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFRpbWVzdGFtcCRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuVGltZXN0YW1wXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwic2Vjb25kc1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIm5hbm9zXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDUgLypTY2FsYXJUeXBlLklOVDMyKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBgVGltZXN0YW1wYCBmb3IgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgKi9cbiAgICBub3coKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIGNvbnN0IG1zID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbXNnLnNlY29uZHMgPSBydW50aW1lXzYuUGJMb25nLmZyb20oTWF0aC5mbG9vcihtcyAvIDEwMDApKS50b1N0cmluZygpO1xuICAgICAgICBtc2cubmFub3MgPSAobXMgJSAxMDAwKSAqIDEwMDAwMDA7XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgYFRpbWVzdGFtcGAgdG8gYSBKYXZhU2NyaXB0IERhdGUuXG4gICAgICovXG4gICAgdG9EYXRlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHJ1bnRpbWVfNi5QYkxvbmcuZnJvbShtZXNzYWdlLnNlY29uZHMpLnRvTnVtYmVyKCkgKiAxMDAwICsgTWF0aC5jZWlsKG1lc3NhZ2UubmFub3MgLyAxMDAwMDAwKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgSmF2YVNjcmlwdCBEYXRlIHRvIGEgYFRpbWVzdGFtcGAuXG4gICAgICovXG4gICAgZnJvbURhdGUoZGF0ZSkge1xuICAgICAgICBjb25zdCBtc2cgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICBjb25zdCBtcyA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgICBtc2cuc2Vjb25kcyA9IHJ1bnRpbWVfNi5QYkxvbmcuZnJvbShNYXRoLmZsb29yKG1zIC8gMTAwMCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIG1zZy5uYW5vcyA9IChtcyAlIDEwMDApICogMTAwMDAwMDtcbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW4gSlNPTiBmb3JtYXQsIHRoZSBgVGltZXN0YW1wYCB0eXBlIGlzIGVuY29kZWQgYXMgYSBzdHJpbmdcbiAgICAgKiBpbiB0aGUgUkZDIDMzMzkgZm9ybWF0LlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IG1zID0gcnVudGltZV82LlBiTG9uZy5mcm9tKG1lc3NhZ2Uuc2Vjb25kcykudG9OdW1iZXIoKSAqIDEwMDA7XG4gICAgICAgIGlmIChtcyA8IERhdGUucGFyc2UoXCIwMDAxLTAxLTAxVDAwOjAwOjAwWlwiKSB8fCBtcyA+IERhdGUucGFyc2UoXCI5OTk5LTEyLTMxVDIzOjU5OjU5WlwiKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBlbmNvZGUgVGltZXN0YW1wIHRvIEpTT04uIE11c3QgYmUgZnJvbSAwMDAxLTAxLTAxVDAwOjAwOjAwWiB0byA5OTk5LTEyLTMxVDIzOjU5OjU5WiBpbmNsdXNpdmUuXCIpO1xuICAgICAgICBpZiAobWVzc2FnZS5uYW5vcyA8IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZW5jb2RlIGludmFsaWQgVGltZXN0YW1wIHRvIEpTT04uIE5hbm9zIG11c3Qgbm90IGJlIG5lZ2F0aXZlLlwiKTtcbiAgICAgICAgbGV0IHogPSBcIlpcIjtcbiAgICAgICAgaWYgKG1lc3NhZ2UubmFub3MgPiAwKSB7XG4gICAgICAgICAgICBsZXQgbmFub3NTdHIgPSAobWVzc2FnZS5uYW5vcyArIDEwMDAwMDAwMDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgaWYgKG5hbm9zU3RyLnN1YnN0cmluZygzKSA9PT0gXCIwMDAwMDBcIilcbiAgICAgICAgICAgICAgICB6ID0gXCIuXCIgKyBuYW5vc1N0ci5zdWJzdHJpbmcoMCwgMykgKyBcIlpcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKG5hbm9zU3RyLnN1YnN0cmluZyg2KSA9PT0gXCIwMDBcIilcbiAgICAgICAgICAgICAgICB6ID0gXCIuXCIgKyBuYW5vc1N0ci5zdWJzdHJpbmcoMCwgNikgKyBcIlpcIjtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB6ID0gXCIuXCIgKyBuYW5vc1N0ciArIFwiWlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShtcykudG9JU09TdHJpbmcoKS5yZXBsYWNlKFwiLjAwMFpcIiwgeik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluIEpTT04gZm9ybWF0LCB0aGUgYFRpbWVzdGFtcGAgdHlwZSBpcyBlbmNvZGVkIGFzIGEgc3RyaW5nXG4gICAgICogaW4gdGhlIFJGQyAzMzM5IGZvcm1hdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAodHlwZW9mIGpzb24gIT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTiBcIiArICgwLCBydW50aW1lXzUudHlwZW9mSnNvblZhbHVlKShqc29uKSArIFwiLlwiKTtcbiAgICAgICAgbGV0IG1hdGNoZXMgPSBqc29uLm1hdGNoKC9eKFswLTldezR9KS0oWzAtOV17Mn0pLShbMC05XXsyfSlUKFswLTldezJ9KTooWzAtOV17Mn0pOihbMC05XXsyfSkoPzpafFxcLihbMC05XXszLDl9KVp8KFsrLV1bMC05XVswLTldOlswLTldWzAtOV0pKSQvKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIFRpbWVzdGFtcCBmcm9tIEpTT04uIEludmFsaWQgZm9ybWF0LlwiKTtcbiAgICAgICAgbGV0IG1zID0gRGF0ZS5wYXJzZShtYXRjaGVzWzFdICsgXCItXCIgKyBtYXRjaGVzWzJdICsgXCItXCIgKyBtYXRjaGVzWzNdICsgXCJUXCIgKyBtYXRjaGVzWzRdICsgXCI6XCIgKyBtYXRjaGVzWzVdICsgXCI6XCIgKyBtYXRjaGVzWzZdICsgKG1hdGNoZXNbOF0gPyBtYXRjaGVzWzhdIDogXCJaXCIpKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihtcykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTi4gSW52YWxpZCB2YWx1ZS5cIik7XG4gICAgICAgIGlmIChtcyA8IERhdGUucGFyc2UoXCIwMDAxLTAxLTAxVDAwOjAwOjAwWlwiKSB8fCBtcyA+IERhdGUucGFyc2UoXCI5OTk5LTEyLTMxVDIzOjU5OjU5WlwiKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIFRpbWVzdGFtcCBmcm9tIEpTT04uIE11c3QgYmUgZnJvbSAwMDAxLTAxLTAxVDAwOjAwOjAwWiB0byA5OTk5LTEyLTMxVDIzOjU5OjU5WiBpbmNsdXNpdmUuXCIpO1xuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRhcmdldC5zZWNvbmRzID0gcnVudGltZV82LlBiTG9uZy5mcm9tKG1zIC8gMTAwMCkudG9TdHJpbmcoKTtcbiAgICAgICAgdGFyZ2V0Lm5hbm9zID0gMDtcbiAgICAgICAgaWYgKG1hdGNoZXNbN10pXG4gICAgICAgICAgICB0YXJnZXQubmFub3MgPSAocGFyc2VJbnQoXCIxXCIgKyBtYXRjaGVzWzddICsgXCIwXCIucmVwZWF0KDkgLSBtYXRjaGVzWzddLmxlbmd0aCkpIC0gMTAwMDAwMDAwMCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBzZWNvbmRzOiBcIjBcIiwgbmFub3M6IDAgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgc2Vjb25kcyAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNlY29uZHMgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDMyIG5hbm9zICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFub3MgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaW50NjQgc2Vjb25kcyA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnNlY29uZHMgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQ2NChtZXNzYWdlLnNlY29uZHMpO1xuICAgICAgICAvKiBpbnQzMiBuYW5vcyA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbm9zICE9PSAwKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQzMihtZXNzYWdlLm5hbm9zKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wXG4gKi9cbmV4cG9ydHMuVGltZXN0YW1wID0gbmV3IFRpbWVzdGFtcCRUeXBlKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lc3RhbXAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQnl0ZXNWYWx1ZSA9IGV4cG9ydHMuU3RyaW5nVmFsdWUgPSBleHBvcnRzLkJvb2xWYWx1ZSA9IGV4cG9ydHMuVUludDMyVmFsdWUgPSBleHBvcnRzLkludDMyVmFsdWUgPSBleHBvcnRzLlVJbnQ2NFZhbHVlID0gZXhwb3J0cy5JbnQ2NFZhbHVlID0gZXhwb3J0cy5GbG9hdFZhbHVlID0gZXhwb3J0cy5Eb3VibGVWYWx1ZSA9IHZvaWQgMDtcbi8vIEBnZW5lcmF0ZWQgYnkgcHJvdG9idWYtdHMgMi45LjEgd2l0aCBwYXJhbWV0ZXIgbG9uZ190eXBlX3N0cmluZyxjbGllbnRfbm9uZSxnZW5lcmF0ZV9kZXBlbmRlbmNpZXNcbi8vIEBnZW5lcmF0ZWQgZnJvbSBwcm90b2J1ZiBmaWxlIFwiZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvXCIgKHBhY2thZ2UgXCJnb29nbGUucHJvdG9idWZcIiwgc3ludGF4IHByb3RvMylcbi8vIHRzbGludDpkaXNhYmxlXG4vL1xuLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0XG4vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvXG4vL1xuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4vLyBtZXQ6XG4vL1xuLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbi8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbi8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJcbi8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGVcbi8vIGRpc3RyaWJ1dGlvbi5cbi8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbi8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy9cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbi8vIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Rcbi8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbi8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbi8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbi8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbi8vXG4vL1xuLy8gV3JhcHBlcnMgZm9yIHByaW1pdGl2ZSAobm9uLW1lc3NhZ2UpIHR5cGVzLiBUaGVzZSB0eXBlcyBhcmUgdXNlZnVsXG4vLyBmb3IgZW1iZWRkaW5nIHByaW1pdGl2ZXMgaW4gdGhlIGBnb29nbGUucHJvdG9idWYuQW55YCB0eXBlIGFuZCBmb3IgcGxhY2VzXG4vLyB3aGVyZSB3ZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGFic2VuY2Ugb2YgYSBwcmltaXRpdmVcbi8vIHR5cGVkIGZpZWxkIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZS5cbi8vXG5jb25zdCBydW50aW1lXzEgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzIgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzMgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzQgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzUgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzYgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzcgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBEb3VibGVWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAxIC8qU2NhbGFyVHlwZS5ET1VCTEUqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYERvdWJsZVZhbHVlYCB0byBKU09OIG51bWJlci5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDIsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYERvdWJsZVZhbHVlYCBmcm9tIEpTT04gbnVtYmVyLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxLCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBkb3VibGUgdmFsdWUgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogZG91YmxlIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5CaXQ2NCkuZG91YmxlKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZVxuICovXG5leHBvcnRzLkRvdWJsZVZhbHVlID0gbmV3IERvdWJsZVZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEZsb2F0VmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAyIC8qU2NhbGFyVHlwZS5GTE9BVCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgRmxvYXRWYWx1ZWAgdG8gSlNPTiBudW1iZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLnNjYWxhcigxLCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBGbG9hdFZhbHVlYCBmcm9tIEpTT04gbnVtYmVyLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxLCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBmbG9hdCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmZsb2F0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGZsb2F0IHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5CaXQzMikuZmxvYXQobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWVcbiAqL1xuZXhwb3J0cy5GbG9hdFZhbHVlID0gbmV3IEZsb2F0VmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgSW50NjRWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBJbnQ2NFZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKHJ1bnRpbWVfMS5TY2FsYXJUeXBlLklOVDY0LCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBJbnQ2NFZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCBydW50aW1lXzEuU2NhbGFyVHlwZS5JTlQ2NCwgcnVudGltZV8yLkxvbmdUeXBlLlNUUklORywgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQ2NCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaW50NjQgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlXG4gKi9cbmV4cG9ydHMuSW50NjRWYWx1ZSA9IG5ldyBJbnQ2NFZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFVJbnQ2NFZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDQgLypTY2FsYXJUeXBlLlVJTlQ2NCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgVUludDY0VmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIocnVudGltZV8xLlNjYWxhclR5cGUuVUlOVDY0LCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBVSW50NjRWYWx1ZWAgZnJvbSBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHRoaXMucmVmSnNvblJlYWRlci5zY2FsYXIoanNvbiwgcnVudGltZV8xLlNjYWxhclR5cGUuVUlOVDY0LCBydW50aW1lXzIuTG9uZ1R5cGUuU1RSSU5HLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHVpbnQ2NCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLnVpbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHVpbnQ2NCB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkudWludDY0KG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZVxuICovXG5leHBvcnRzLlVJbnQ2NFZhbHVlID0gbmV3IFVJbnQ2NFZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEludDMyVmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA1IC8qU2NhbGFyVHlwZS5JTlQzMiovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgSW50MzJWYWx1ZWAgdG8gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLnNjYWxhcig1LCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBJbnQzMlZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCA1LCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQzMiB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGludDMyIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5WYXJpbnQpLmludDMyKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlXG4gKi9cbmV4cG9ydHMuSW50MzJWYWx1ZSA9IG5ldyBJbnQzMlZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFVJbnQzMlZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDEzIC8qU2NhbGFyVHlwZS5VSU5UMzIqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYFVJbnQzMlZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDEzLCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBVSW50MzJWYWx1ZWAgZnJvbSBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHRoaXMucmVmSnNvblJlYWRlci5zY2FsYXIoanNvbiwgMTMsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHVpbnQzMiB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiB1aW50MzIgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkudWludDMyKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZVxuICovXG5leHBvcnRzLlVJbnQzMlZhbHVlID0gbmV3IFVJbnQzMlZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEJvb2xWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuQm9vbFZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOCAvKlNjYWxhclR5cGUuQk9PTCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgQm9vbFZhbHVlYCB0byBKU09OIGJvb2wuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbWVzc2FnZS52YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBCb29sVmFsdWVgIGZyb20gSlNPTiBib29sLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCA4LCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogZmFsc2UgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogYm9vbCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuQm9vbFZhbHVlXG4gKi9cbmV4cG9ydHMuQm9vbFZhbHVlID0gbmV3IEJvb2xWYWx1ZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBTdHJpbmdWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYFN0cmluZ1ZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYFN0cmluZ1ZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCA5LCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgdmFsdWUgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVcbiAqL1xuZXhwb3J0cy5TdHJpbmdWYWx1ZSA9IG5ldyBTdHJpbmdWYWx1ZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBCeXRlc1ZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMTIgLypTY2FsYXJUeXBlLkJZVEVTKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBCeXRlc1ZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDEyLCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBCeXRlc1ZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxMiwgdW5kZWZpbmVkLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IG5ldyBVaW50OEFycmF5KDApIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJ5dGVzIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYnl0ZXMgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmJ5dGVzKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlXG4gKi9cbmV4cG9ydHMuQnl0ZXNWYWx1ZSA9IG5ldyBCeXRlc1ZhbHVlJFR5cGUoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlYWRTZXJ2aWNlT3B0aW9uID0gZXhwb3J0cy5yZWFkTWV0aG9kT3B0aW9uID0gZXhwb3J0cy5yZWFkTWV0aG9kT3B0aW9ucyA9IGV4cG9ydHMubm9ybWFsaXplTWV0aG9kSW5mbyA9IHZvaWQgMDtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8qKlxuICogVHVybnMgUGFydGlhbE1ldGhvZEluZm8gaW50byBNZXRob2RJbmZvLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2RJbmZvKG1ldGhvZCwgc2VydmljZSkge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGxldCBtID0gbWV0aG9kO1xuICAgIG0uc2VydmljZSA9IHNlcnZpY2U7XG4gICAgbS5sb2NhbE5hbWUgPSAoX2EgPSBtLmxvY2FsTmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcnVudGltZV8xLmxvd2VyQ2FtZWxDYXNlKG0ubmFtZSk7XG4gICAgLy8gbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uSlNcbiAgICBtLnNlcnZlclN0cmVhbWluZyA9ICEhbS5zZXJ2ZXJTdHJlYW1pbmc7XG4gICAgLy8gbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uSlNcbiAgICBtLmNsaWVudFN0cmVhbWluZyA9ICEhbS5jbGllbnRTdHJlYW1pbmc7XG4gICAgbS5vcHRpb25zID0gKF9iID0gbS5vcHRpb25zKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fTtcbiAgICBtLmlkZW1wb3RlbmN5ID0gKF9jID0gbS5pZGVtcG90ZW5jeSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBtO1xufVxuZXhwb3J0cy5ub3JtYWxpemVNZXRob2RJbmZvID0gbm9ybWFsaXplTWV0aG9kSW5mbztcbi8qKlxuICogUmVhZCBjdXN0b20gbWV0aG9kIG9wdGlvbnMgZnJvbSBhIGdlbmVyYXRlZCBzZXJ2aWNlIGNsaWVudC5cbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2UgcmVhZE1ldGhvZE9wdGlvbigpXG4gKi9cbmZ1bmN0aW9uIHJlYWRNZXRob2RPcHRpb25zKHNlcnZpY2UsIG1ldGhvZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IHNlcnZpY2UubWV0aG9kcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PT0gbWV0aG9kTmFtZSB8fCBpID09PSBtZXRob2ROYW1lKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnM7XG4gICAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9uc1tleHRlbnNpb25OYW1lXSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uc1tleHRlbnNpb25OYW1lXSkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnJlYWRNZXRob2RPcHRpb25zID0gcmVhZE1ldGhvZE9wdGlvbnM7XG5mdW5jdGlvbiByZWFkTWV0aG9kT3B0aW9uKHNlcnZpY2UsIG1ldGhvZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IHNlcnZpY2UubWV0aG9kcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PT0gbWV0aG9kTmFtZSB8fCBpID09PSBtZXRob2ROYW1lKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnM7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvblZhbCA9IG9wdGlvbnNbZXh0ZW5zaW9uTmFtZV07XG4gICAgaWYgKG9wdGlvblZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25UeXBlID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25WYWwpIDogb3B0aW9uVmFsO1xufVxuZXhwb3J0cy5yZWFkTWV0aG9kT3B0aW9uID0gcmVhZE1ldGhvZE9wdGlvbjtcbmZ1bmN0aW9uIHJlYWRTZXJ2aWNlT3B0aW9uKHNlcnZpY2UsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2VydmljZS5vcHRpb25zO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25WYWwgPSBvcHRpb25zW2V4dGVuc2lvbk5hbWVdO1xuICAgIGlmIChvcHRpb25WYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uVHlwZSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uVmFsKSA6IG9wdGlvblZhbDtcbn1cbmV4cG9ydHMucmVhZFNlcnZpY2VPcHRpb24gPSByZWFkU2VydmljZU9wdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNlcnZpY2VUeXBlID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jbGFzcyBTZXJ2aWNlVHlwZSB7XG4gICAgY29uc3RydWN0b3IodHlwZU5hbWUsIG1ldGhvZHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lO1xuICAgICAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzLm1hcChpID0+IHJlZmxlY3Rpb25faW5mb18xLm5vcm1hbGl6ZU1ldGhvZEluZm8oaSwgdGhpcykpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZpY2VUeXBlID0gU2VydmljZVR5cGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ScGNFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogQW4gZXJyb3IgdGhhdCBvY2N1cnJlZCB3aGlsZSBjYWxsaW5nIGEgUlBDIG1ldGhvZC5cbiAqL1xuY2xhc3MgUnBjRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgY29kZSA9ICdVTktOT1dOJywgbWV0YSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1JwY0Vycm9yJztcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL3JlbGVhc2Utbm90ZXMvdHlwZXNjcmlwdC0yLTIuaHRtbCNleGFtcGxlXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGEgIT09IG51bGwgJiYgbWV0YSAhPT0gdm9pZCAwID8gbWV0YSA6IHt9O1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgbCA9IFt0aGlzLm5hbWUgKyAnOiAnICsgdGhpcy5tZXNzYWdlXTtcbiAgICAgICAgaWYgKHRoaXMuY29kZSkge1xuICAgICAgICAgICAgbC5wdXNoKCcnKTtcbiAgICAgICAgICAgIGwucHVzaCgnQ29kZTogJyArIHRoaXMuY29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VydmljZU5hbWUgJiYgdGhpcy5tZXRob2ROYW1lKSB7XG4gICAgICAgICAgICBsLnB1c2goJ01ldGhvZDogJyArIHRoaXMuc2VydmljZU5hbWUgKyAnLycgKyB0aGlzLm1ldGhvZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtID0gT2JqZWN0LmVudHJpZXModGhpcy5tZXRhKTtcbiAgICAgICAgaWYgKG0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBsLnB1c2goJycpO1xuICAgICAgICAgICAgbC5wdXNoKCdNZXRhOicpO1xuICAgICAgICAgICAgZm9yIChsZXQgW2ssIHZdIG9mIG0pIHtcbiAgICAgICAgICAgICAgICBsLnB1c2goYCAgJHtrfTogJHt2fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsLmpvaW4oJ1xcbicpO1xuICAgIH1cbn1cbmV4cG9ydHMuUnBjRXJyb3IgPSBScGNFcnJvcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlUnBjT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8qKlxuICogTWVyZ2VzIGN1c3RvbSBSUEMgb3B0aW9ucyB3aXRoIGRlZmF1bHRzLiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIGFuZCBrZWVwc1xuICogdGhlIFwiZGVmYXVsdHNcIiBhbmQgdGhlIFwib3B0aW9uc1wiIHVubW9kaWZpZWQuXG4gKlxuICogTWVyZ2VzIGBScGNNZXRhZGF0YWAgXCJtZXRhXCIsIG92ZXJ3cml0aW5nIHZhbHVlcyBmcm9tIFwiZGVmYXVsdHNcIiB3aXRoXG4gKiB2YWx1ZXMgZnJvbSBcIm9wdGlvbnNcIi4gRG9lcyBub3QgYXBwZW5kIHZhbHVlcyB0byBleGlzdGluZyBlbnRyaWVzLlxuICpcbiAqIE1lcmdlcyBcImpzb25PcHRpb25zXCIsIGluY2x1ZGluZyBcImpzb25PcHRpb25zLnR5cGVSZWdpc3RyeVwiLCBieSBjcmVhdGluZ1xuICogYSBuZXcgYXJyYXkgdGhhdCBjb250YWlucyB0eXBlcyBmcm9tIFwib3B0aW9ucy5qc29uT3B0aW9ucy50eXBlUmVnaXN0cnlcIlxuICogZmlyc3QsIHRoZW4gdHlwZXMgZnJvbSBcImRlZmF1bHRzLmpzb25PcHRpb25zLnR5cGVSZWdpc3RyeVwiLlxuICpcbiAqIE1lcmdlcyBcImJpbmFyeU9wdGlvbnNcIi5cbiAqXG4gKiBNZXJnZXMgXCJpbnRlcmNlcHRvcnNcIiBieSBjcmVhdGluZyBhIG5ldyBhcnJheSB0aGF0IGNvbnRhaW5zIGludGVyY2VwdG9yc1xuICogZnJvbSBcImRlZmF1bHRzXCIgZmlyc3QsIHRoZW4gaW50ZXJjZXB0b3JzIGZyb20gXCJvcHRpb25zXCIuXG4gKlxuICogV29ya3Mgd2l0aCBvYmplY3RzIHRoYXQgZXh0ZW5kIGBScGNPcHRpb25zYCwgYnV0IG9ubHkgaWYgdGhlIGFkZGVkXG4gKiBwcm9wZXJ0aWVzIGFyZSBvZiB0eXBlIERhdGUsIHByaW1pdGl2ZSBsaWtlIHN0cmluZywgYm9vbGVhbiwgb3IgQXJyYXlcbiAqIG9mIHByaW1pdGl2ZXMuIElmIHlvdSBoYXZlIG90aGVyIHByb3BlcnR5IHR5cGVzLCB5b3UgaGF2ZSB0byBtZXJnZSB0aGVtXG4gKiB5b3Vyc2VsZi5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VScGNPcHRpb25zKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKVxuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgbGV0IG8gPSB7fTtcbiAgICBjb3B5KGRlZmF1bHRzLCBvKTtcbiAgICBjb3B5KG9wdGlvbnMsIG8pO1xuICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhvcHRpb25zKSkge1xuICAgICAgICBsZXQgdmFsID0gb3B0aW9uc1trZXldO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSBcImpzb25PcHRpb25zXCI6XG4gICAgICAgICAgICAgICAgby5qc29uT3B0aW9ucyA9IHJ1bnRpbWVfMS5tZXJnZUpzb25PcHRpb25zKGRlZmF1bHRzLmpzb25PcHRpb25zLCBvLmpzb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlPcHRpb25zXCI6XG4gICAgICAgICAgICAgICAgby5iaW5hcnlPcHRpb25zID0gcnVudGltZV8xLm1lcmdlQmluYXJ5T3B0aW9ucyhkZWZhdWx0cy5iaW5hcnlPcHRpb25zLCBvLmJpbmFyeU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgICAgICAgICBvLm1ldGEgPSB7fTtcbiAgICAgICAgICAgICAgICBjb3B5KGRlZmF1bHRzLm1ldGEsIG8ubWV0YSk7XG4gICAgICAgICAgICAgICAgY29weShvcHRpb25zLm1ldGEsIG8ubWV0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaW50ZXJjZXB0b3JzXCI6XG4gICAgICAgICAgICAgICAgby5pbnRlcmNlcHRvcnMgPSBkZWZhdWx0cy5pbnRlcmNlcHRvcnMgPyBkZWZhdWx0cy5pbnRlcmNlcHRvcnMuY29uY2F0KHZhbCkgOiB2YWwuY29uY2F0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG87XG59XG5leHBvcnRzLm1lcmdlUnBjT3B0aW9ucyA9IG1lcmdlUnBjT3B0aW9ucztcbmZ1bmN0aW9uIGNvcHkoYSwgaW50bykge1xuICAgIGlmICghYSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGxldCBjID0gaW50bztcbiAgICBmb3IgKGxldCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoYSkpIHtcbiAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgY1trXSA9IG5ldyBEYXRlKHYuZ2V0VGltZSgpKTtcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2KSlcbiAgICAgICAgICAgIGNba10gPSB2LmNvbmNhdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjW2tdID0gdjtcbiAgICB9XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZlcnJlZCA9IGV4cG9ydHMuRGVmZXJyZWRTdGF0ZSA9IHZvaWQgMDtcbnZhciBEZWZlcnJlZFN0YXRlO1xuKGZ1bmN0aW9uIChEZWZlcnJlZFN0YXRlKSB7XG4gICAgRGVmZXJyZWRTdGF0ZVtEZWZlcnJlZFN0YXRlW1wiUEVORElOR1wiXSA9IDBdID0gXCJQRU5ESU5HXCI7XG4gICAgRGVmZXJyZWRTdGF0ZVtEZWZlcnJlZFN0YXRlW1wiUkVKRUNURURcIl0gPSAxXSA9IFwiUkVKRUNURURcIjtcbiAgICBEZWZlcnJlZFN0YXRlW0RlZmVycmVkU3RhdGVbXCJSRVNPTFZFRFwiXSA9IDJdID0gXCJSRVNPTFZFRFwiO1xufSkoRGVmZXJyZWRTdGF0ZSA9IGV4cG9ydHMuRGVmZXJyZWRTdGF0ZSB8fCAoZXhwb3J0cy5EZWZlcnJlZFN0YXRlID0ge30pKTtcbi8qKlxuICogQSBkZWZlcnJlZCBwcm9taXNlLiBUaGlzIGlzIGEgXCJjb250cm9sbGVyXCIgZm9yIGEgcHJvbWlzZSwgd2hpY2ggbGV0cyB5b3VcbiAqIHBhc3MgYSBwcm9taXNlIGFyb3VuZCBhbmQgcmVqZWN0IG9yIHJlc29sdmUgaXQgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBXYXJuaW5nOiBUaGlzIGNsYXNzIGlzIHRvIGJlIHVzZWQgd2l0aCBjYXJlLiBVc2luZyBpdCBjYW4gbWFrZSBjb2RlIHZlcnlcbiAqIGRpZmZpY3VsdCB0byByZWFkLiBJdCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGxpYnJhcnkgY29kZSB0aGF0IGV4cG9zZXNcbiAqIHByb21pc2VzLCBub3QgZm9yIHJlZ3VsYXIgYnVzaW5lc3MgbG9naWMuXG4gKi9cbmNsYXNzIERlZmVycmVkIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcHJldmVudFVuaGFuZGxlZFJlamVjdGlvbldhcm5pbmcgLSBwcmV2ZW50cyB0aGUgd2FybmluZ1xuICAgICAqIFwiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uXCIgYnkgYWRkaW5nIGEgbm9vcCByZWplY3Rpb24gaGFuZGxlci5cbiAgICAgKiBXb3JraW5nIHdpdGggY2FsbHMgcmV0dXJuZWQgZnJvbSB0aGUgcnVudGltZS1ycGMgcGFja2FnZSBpbiBhblxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIHVzdWFsbHkgbWVhbnMgYXdhaXRpbmcgb25lIGNhbGwgcHJvcGVydHkgYWZ0ZXJcbiAgICAgKiB0aGUgb3RoZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGUgXCJzdGF0dXNcIiBpcyBub3QgYmVpbmcgYXdhaXRlZCB3aGVuXG4gICAgICogYW4gZWFybGllciBhd2FpdCBmb3IgdGhlIFwiaGVhZGVyc1wiIGlzIHJlamVjdGVkLiBUaGlzIGNhdXNlcyB0aGVcbiAgICAgKiBcInVuaGFuZGxlZCBwcm9taXNlIHJlamVjdFwiIHdhcm5pbmcuIEEgbW9yZSBjb3JyZWN0IGJlaGF2aW91ciBmb3JcbiAgICAgKiBjYWxscyBtaWdodCBiZSB0byBiZWNvbWUgYXdhcmUgd2hldGhlciBhdCBsZWFzdCBvbmUgb2YgdGhlXG4gICAgICogcHJvbWlzZXMgaXMgaGFuZGxlZCBhbmQgc3dhbGxvdyB0aGUgcmVqZWN0aW9uIHdhcm5pbmcgZm9yIHRoZVxuICAgICAqIG90aGVycy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwcmV2ZW50VW5oYW5kbGVkUmVqZWN0aW9uV2FybmluZyA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZFN0YXRlLlBFTkRJTkc7XG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcmV2ZW50VW5oYW5kbGVkUmVqZWN0aW9uV2FybmluZykge1xuICAgICAgICAgICAgdGhpcy5fcHJvbWlzZS5jYXRjaChfID0+IHsgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwcm9taXNlLlxuICAgICAqL1xuICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlZmVycmVkIHByb21pc2UuXG4gICAgICovXG4gICAgZ2V0IHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlLiBUaHJvd3MgaWYgdGhlIHByb21pc2UgaXMgYWxyZWFkeSByZXNvbHZlZCBvciByZWplY3RlZC5cbiAgICAgKi9cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBEZWZlcnJlZFN0YXRlLlBFTkRJTkcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCByZXNvbHZlICR7RGVmZXJyZWRTdGF0ZVt0aGlzLnN0YXRlXS50b0xvd2VyQ2FzZSgpfWApO1xuICAgICAgICB0aGlzLl9yZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZFN0YXRlLlJFU09MVkVEO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWplY3QgdGhlIHByb21pc2UuIFRocm93cyBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkIG9yIHJlamVjdGVkLlxuICAgICAqL1xuICAgIHJlamVjdChyZWFzb24pIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlamVjdCAke0RlZmVycmVkU3RhdGVbdGhpcy5zdGF0ZV0udG9Mb3dlckNhc2UoKX1gKTtcbiAgICAgICAgdGhpcy5fcmVqZWN0KHJlYXNvbik7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gRGVmZXJyZWRTdGF0ZS5SRUpFQ1RFRDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSB0aGUgcHJvbWlzZS4gSWdub3JlIGlmIG5vdCBwZW5kaW5nLlxuICAgICAqL1xuICAgIHJlc29sdmVQZW5kaW5nKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSh2YWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWplY3QgdGhlIHByb21pc2UuIElnbm9yZSBpZiBub3QgcGVuZGluZy5cbiAgICAgKi9cbiAgICByZWplY3RQZW5kaW5nKHJlYXNvbikge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRoaXMucmVqZWN0KHJlYXNvbik7XG4gICAgfVxufVxuZXhwb3J0cy5EZWZlcnJlZCA9IERlZmVycmVkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlciA9IHZvaWQgMDtcbmNvbnN0IGRlZmVycmVkXzEgPSByZXF1aXJlKFwiLi9kZWZlcnJlZFwiKTtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8qKlxuICogQSBgUnBjT3V0cHV0U3RyZWFtYCB0aGF0IHlvdSBjb250cm9sLlxuICovXG5jbGFzcyBScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fbGlzID0ge1xuICAgICAgICAgICAgbnh0OiBbXSxcbiAgICAgICAgICAgIG1zZzogW10sXG4gICAgICAgICAgICBlcnI6IFtdLFxuICAgICAgICAgICAgY21wOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fY2xvc2VkID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIC0tLSBScGNPdXRwdXRTdHJlYW0gY2FsbGJhY2sgQVBJXG4gICAgb25OZXh0KGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpcyhjYWxsYmFjaywgdGhpcy5fbGlzLm54dCk7XG4gICAgfVxuICAgIG9uTWVzc2FnZShjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXMoY2FsbGJhY2ssIHRoaXMuX2xpcy5tc2cpO1xuICAgIH1cbiAgICBvbkVycm9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpcyhjYWxsYmFjaywgdGhpcy5fbGlzLmVycik7XG4gICAgfVxuICAgIG9uQ29tcGxldGUoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzKGNhbGxiYWNrLCB0aGlzLl9saXMuY21wKTtcbiAgICB9XG4gICAgYWRkTGlzKGNhbGxiYWNrLCBsaXN0KSB7XG4gICAgICAgIGxpc3QucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgaSA9IGxpc3QuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyByZW1vdmUgYWxsIGxpc3RlbmVyc1xuICAgIGNsZWFyTGlzKCkge1xuICAgICAgICBmb3IgKGxldCBsIG9mIE9iamVjdC52YWx1ZXModGhpcy5fbGlzKSlcbiAgICAgICAgICAgIGwuc3BsaWNlKDAsIGwubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gLS0tIENvbnRyb2xsZXIgQVBJXG4gICAgLyoqXG4gICAgICogSXMgdGhpcyBzdHJlYW0gYWxyZWFkeSBjbG9zZWQgYnkgYSBjb21wbGV0aW9uIG9yIGVycm9yP1xuICAgICAqL1xuICAgIGdldCBjbG9zZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9zZWQgIT09IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0IG1lc3NhZ2UsIGNsb3NlIHdpdGggZXJyb3IsIG9yIGNsb3NlIHN1Y2Nlc3NmdWxseSwgYnV0IG9ubHkgb25lXG4gICAgICogYXQgYSB0aW1lLlxuICAgICAqIENhbiBiZSB1c2VkIHRvIHdyYXAgYSBzdHJlYW0gYnkgdXNpbmcgdGhlIG90aGVyIHN0cmVhbSdzIGBvbk5leHRgLlxuICAgICAqL1xuICAgIG5vdGlmeU5leHQobWVzc2FnZSwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQoKG1lc3NhZ2UgPyAxIDogMCkgKyAoZXJyb3IgPyAxIDogMCkgKyAoY29tcGxldGUgPyAxIDogMCkgPD0gMSwgJ29ubHkgb25lIGVtaXNzaW9uIGF0IGEgdGltZScpO1xuICAgICAgICBpZiAobWVzc2FnZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlFcnJvcihlcnJvcik7XG4gICAgICAgIGlmIChjb21wbGV0ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q29tcGxldGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1pdHMgYSBuZXcgbWVzc2FnZS4gVGhyb3dzIGlmIHN0cmVhbSBpcyBjbG9zZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyBvbk5leHQgYW5kIG9uTWVzc2FnZSBjYWxsYmFja3MuXG4gICAgICovXG4gICAgbm90aWZ5TWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQoIXRoaXMuY2xvc2VkLCAnc3RyZWFtIGlzIGNsb3NlZCcpO1xuICAgICAgICB0aGlzLnB1c2hJdCh7IHZhbHVlOiBtZXNzYWdlLCBkb25lOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5fbGlzLm1zZy5mb3JFYWNoKGwgPT4gbChtZXNzYWdlKSk7XG4gICAgICAgIHRoaXMuX2xpcy5ueHQuZm9yRWFjaChsID0+IGwobWVzc2FnZSwgdW5kZWZpbmVkLCBmYWxzZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIHN0cmVhbSB3aXRoIGFuIGVycm9yLiBUaHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIG9uTmV4dCBhbmQgb25FcnJvciBjYWxsYmFja3MuXG4gICAgICovXG4gICAgbm90aWZ5RXJyb3IoZXJyb3IpIHtcbiAgICAgICAgcnVudGltZV8xLmFzc2VydCghdGhpcy5jbG9zZWQsICdzdHJlYW0gaXMgY2xvc2VkJyk7XG4gICAgICAgIHRoaXMuX2Nsb3NlZCA9IGVycm9yO1xuICAgICAgICB0aGlzLnB1c2hJdChlcnJvcik7XG4gICAgICAgIHRoaXMuX2xpcy5lcnIuZm9yRWFjaChsID0+IGwoZXJyb3IpKTtcbiAgICAgICAgdGhpcy5fbGlzLm54dC5mb3JFYWNoKGwgPT4gbCh1bmRlZmluZWQsIGVycm9yLCBmYWxzZSkpO1xuICAgICAgICB0aGlzLmNsZWFyTGlzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgc3RyZWFtIHN1Y2Nlc3NmdWxseS4gVGhyb3dzIGlmIHN0cmVhbSBpcyBjbG9zZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyBvbk5leHQgYW5kIG9uQ29tcGxldGUgY2FsbGJhY2tzLlxuICAgICAqL1xuICAgIG5vdGlmeUNvbXBsZXRlKCkge1xuICAgICAgICBydW50aW1lXzEuYXNzZXJ0KCF0aGlzLmNsb3NlZCwgJ3N0cmVhbSBpcyBjbG9zZWQnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wdXNoSXQoeyB2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5fbGlzLmNtcC5mb3JFYWNoKGwgPT4gbCgpKTtcbiAgICAgICAgdGhpcy5fbGlzLm54dC5mb3JFYWNoKGwgPT4gbCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICB0aGlzLmNsZWFyTGlzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXN5bmMgaXRlcmF0b3IgKHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBgZm9yIGF3YWl0IHsuLi59YClcbiAgICAgKiB0byBjb25zdW1lIHRoZSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBTb21lIHRoaW5ncyB0byBub3RlOlxuICAgICAqIC0gSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgYGZvciBhd2FpdGAgd2lsbCB0aHJvdyBpdC5cbiAgICAgKiAtIElmIGFuIGVycm9yIG9jY3VycmVkIGJlZm9yZSB0aGUgYGZvciBhd2FpdGAgd2FzIHN0YXJ0ZWQsIGBmb3IgYXdhaXRgXG4gICAgICogICB3aWxsIHJlLXRocm93IGl0LlxuICAgICAqIC0gSWYgdGhlIHN0cmVhbSBpcyBhbHJlYWR5IGNvbXBsZXRlLCB0aGUgYGZvciBhd2FpdGAgd2lsbCBiZSBlbXB0eS5cbiAgICAgKiAtIElmIHlvdXIgYGZvciBhd2FpdGAgY29uc3VtZXMgc2xvd2VyIHRoYW4gdGhlIHN0cmVhbSBwcm9kdWNlcyxcbiAgICAgKiAgIGZvciBleGFtcGxlIGJlY2F1c2UgeW91IGFyZSByZWxheWluZyBtZXNzYWdlcyBpbiBhIHNsb3cgb3BlcmF0aW9uLFxuICAgICAqICAgbWVzc2FnZXMgYXJlIHF1ZXVlZC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAvLyBpbml0IHRoZSBpdGVyYXRvciBzdGF0ZSwgZW5hYmxpbmcgcHVzaEl0KClcbiAgICAgICAgaWYgKCF0aGlzLl9pdFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9pdFN0YXRlID0geyBxOiBbXSB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGFyZSBjbG9zZWQsIHdlIGFyZSBkZWZpbml0ZWx5IG5vdCByZWNlaXZpbmcgYW55IG1vcmUgbWVzc2FnZXMuXG4gICAgICAgIC8vIGJ1dCB3ZSBjYW4ndCBsZXQgdGhlIGl0ZXJhdG9yIGdldCBzdHVjay4gd2Ugd2FudCB0byBlaXRoZXI6XG4gICAgICAgIC8vIGEpIGZpbmlzaCB0aGUgbmV3IGl0ZXJhdG9yIGltbWVkaWF0ZWx5LCBiZWNhdXNlIHdlIGFyZSBjb21wbGV0ZWRcbiAgICAgICAgLy8gYikgcmVqZWN0IHRoZSBuZXcgaXRlcmF0b3IsIGJlY2F1c2Ugd2UgZXJyb3JlZFxuICAgICAgICBpZiAodGhpcy5fY2xvc2VkID09PSB0cnVlKVxuICAgICAgICAgICAgdGhpcy5wdXNoSXQoeyB2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY2xvc2VkICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVzaEl0KHRoaXMuX2Nsb3NlZCk7XG4gICAgICAgIC8vIHRoZSBhc3luYyBpdGVyYXRvclxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuX2l0U3RhdGU7XG4gICAgICAgICAgICAgICAgcnVudGltZV8xLmFzc2VydChzdGF0ZSwgXCJiYWQgc3RhdGVcIik7IC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzdGF0ZSBoZXJlLCBjb2RlIGlzIGJyb2tlblxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIHNob3VsZCBiZSBubyBwZW5kaW5nIHJlc3VsdC5cbiAgICAgICAgICAgICAgICAvLyBkaWQgdGhlIGNvbnN1bWVyIGNhbGwgbmV4dCgpIGJlZm9yZSB3ZSByZXNvbHZlZCBvdXIgcHJldmlvdXMgcmVzdWx0IHByb21pc2U/XG4gICAgICAgICAgICAgICAgcnVudGltZV8xLmFzc2VydCghc3RhdGUucCwgXCJpdGVyYXRvciBjb250cmFjdCBicm9rZW5cIik7XG4gICAgICAgICAgICAgICAgLy8gZGlkIHdlIHByb2R1Y2UgZmFzdGVyIHRoYW4gdGhlIGl0ZXJhdG9yIGNvbnN1bWVkP1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiB0aGUgb2xkZXN0IHJlc3VsdCBmcm9tIHRoZSBxdWV1ZS5cbiAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSBzdGF0ZS5xLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFwidmFsdWVcIiBpbiBmaXJzdCkgPyBQcm9taXNlLnJlc29sdmUoZmlyc3QpIDogUHJvbWlzZS5yZWplY3QoZmlyc3QpO1xuICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gcmVzdWx0IEFUTSwgYnV0IHdlIHByb21pc2Ugb25lLlxuICAgICAgICAgICAgICAgIC8vIGFzIHNvb24gYXMgd2UgaGF2ZSBhIHJlc3VsdCwgd2UgbXVzdCByZXNvbHZlIHByb21pc2UuXG4gICAgICAgICAgICAgICAgc3RhdGUucCA9IG5ldyBkZWZlcnJlZF8xLkRlZmVycmVkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnAucHJvbWlzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFwicHVzaFwiIGEgbmV3IGl0ZXJhdG9yIHJlc3VsdC5cbiAgICAvLyB0aGlzIGVpdGhlciByZXNvbHZlcyBhIHBlbmRpbmcgcHJvbWlzZSwgb3IgZW5xdWV1ZXMgdGhlIHJlc3VsdC5cbiAgICBwdXNoSXQocmVzdWx0KSB7XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuX2l0U3RhdGU7XG4gICAgICAgIGlmICghc3RhdGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIGlzIHRoZSBjb25zdW1lciB3YWl0aW5nIGZvciB1cz9cbiAgICAgICAgaWYgKHN0YXRlLnApIHtcbiAgICAgICAgICAgIC8vIHllcywgY29uc3VtZXIgaXMgd2FpdGluZyBmb3IgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgY29uc3QgcCA9IHN0YXRlLnA7XG4gICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KHAuc3RhdGUgPT0gZGVmZXJyZWRfMS5EZWZlcnJlZFN0YXRlLlBFTkRJTkcsIFwiaXRlcmF0b3IgY29udHJhY3QgYnJva2VuXCIpO1xuICAgICAgICAgICAgLy8gcmVzb2x2ZSB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgKFwidmFsdWVcIiBpbiByZXN1bHQpID8gcC5yZXNvbHZlKHJlc3VsdCkgOiBwLnJlamVjdChyZXN1bHQpO1xuICAgICAgICAgICAgLy8gbXVzdCBjbGVhbnVwLCBvdGhlcndpc2UgaXRlcmF0b3IubmV4dCgpIHdvdWxkIHBpY2sgaXQgdXAgYWdhaW4uXG4gICAgICAgICAgICBkZWxldGUgc3RhdGUucDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHdlIGFyZSBwcm9kdWNpbmcgZmFzdGVyIHRoYW4gdGhlIGl0ZXJhdG9yIGNvbnN1bWVzLlxuICAgICAgICAgICAgLy8gcHVzaCByZXN1bHQgb250byBxdWV1ZS5cbiAgICAgICAgICAgIHN0YXRlLnEucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5ScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyID0gUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVW5hcnlDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIHVuYXJ5IFJQQyBjYWxsLiBVbmFyeSBtZWFucyB0aGVyZSBpcyBleGFjdGx5IG9uZSBpbnB1dCBtZXNzYWdlIGFuZFxuICogZXhhY3RseSBvbmUgb3V0cHV0IG1lc3NhZ2UgdW5sZXNzIGFuIGVycm9yIG9jY3VycmVkLlxuICovXG5jbGFzcyBVbmFyeUNhbGwge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdEhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudHJhaWxlcnMgPSB0cmFpbGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpbmFsIG91dGNvbWUgb2YgdGhpcyBjYWxsLFxuICAgICAqIHlvdSBjYW4gYXdhaXQgaXQgdG8gcmVjZWl2ZSBhIGBGaW5pc2hlZFVuYXJ5Q2FsbGAuXG4gICAgICovXG4gICAgdGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlRmluaXNoZWQoKS50aGVuKHZhbHVlID0+IG9uZnVsZmlsbGVkID8gUHJvbWlzZS5yZXNvbHZlKG9uZnVsZmlsbGVkKHZhbHVlKSkgOiB2YWx1ZSwgcmVhc29uID0+IG9ucmVqZWN0ZWQgPyBQcm9taXNlLnJlc29sdmUob25yZWplY3RlZChyZWFzb24pKSA6IFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xuICAgIH1cbiAgICBwcm9taXNlRmluaXNoZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzXSA9IHlpZWxkIFByb21pc2UuYWxsKFt0aGlzLmhlYWRlcnMsIHRoaXMucmVzcG9uc2UsIHRoaXMuc3RhdHVzLCB0aGlzLnRyYWlsZXJzXSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnM6IHRoaXMucmVxdWVzdEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlVuYXJ5Q2FsbCA9IFVuYXJ5Q2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VydmVyU3RyZWFtaW5nQ2FsbCA9IHZvaWQgMDtcbi8qKlxuICogQSBzZXJ2ZXIgc3RyZWFtaW5nIFJQQyBjYWxsLiBUaGUgY2xpZW50IHByb3ZpZGVzIGV4YWN0bHkgb25lIGlucHV0IG1lc3NhZ2VcbiAqIGJ1dCB0aGUgc2VydmVyIG1heSByZXNwb25kIHdpdGggMCwgMSwgb3IgbW9yZSBtZXNzYWdlcy5cbiAqL1xuY2xhc3MgU2VydmVyU3RyZWFtaW5nQ2FsbCB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgcmVxdWVzdCwgaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnMpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0SGVhZGVycztcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZXMgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudHJhaWxlcnMgPSB0cmFpbGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5zdGVhZCBvZiBhd2FpdGluZyB0aGUgcmVzcG9uc2Ugc3RhdHVzIGFuZCB0cmFpbGVycywgeW91IGNhblxuICAgICAqIGp1c3QgYXMgd2VsbCBhd2FpdCB0aGlzIGNhbGwgaXRzZWxmIHRvIHJlY2VpdmUgdGhlIHNlcnZlciBvdXRjb21lLlxuICAgICAqIFlvdSBzaG91bGQgZmlyc3Qgc2V0dXAgc29tZSBsaXN0ZW5lcnMgdG8gdGhlIGByZXF1ZXN0YCB0b1xuICAgICAqIHNlZSB0aGUgYWN0dWFsIG1lc3NhZ2VzIHRoZSBzZXJ2ZXIgcmVwbGllZCB3aXRoLlxuICAgICAqL1xuICAgIHRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZUZpbmlzaGVkKCkudGhlbih2YWx1ZSA9PiBvbmZ1bGZpbGxlZCA/IFByb21pc2UucmVzb2x2ZShvbmZ1bGZpbGxlZCh2YWx1ZSkpIDogdmFsdWUsIHJlYXNvbiA9PiBvbnJlamVjdGVkID8gUHJvbWlzZS5yZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSkgOiBQcm9taXNlLnJlamVjdChyZWFzb24pKTtcbiAgICB9XG4gICAgcHJvbWlzZUZpbmlzaGVkKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgbGV0IFtoZWFkZXJzLCBzdGF0dXMsIHRyYWlsZXJzXSA9IHlpZWxkIFByb21pc2UuYWxsKFt0aGlzLmhlYWRlcnMsIHRoaXMuc3RhdHVzLCB0aGlzLnRyYWlsZXJzXSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnM6IHRoaXMucmVxdWVzdEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5TZXJ2ZXJTdHJlYW1pbmdDYWxsID0gU2VydmVyU3RyZWFtaW5nQ2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2xpZW50U3RyZWFtaW5nQ2FsbCA9IHZvaWQgMDtcbi8qKlxuICogQSBjbGllbnQgc3RyZWFtaW5nIFJQQyBjYWxsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNsaWVudHMgc2VuZHMgMCwgMSwgb3JcbiAqIG1vcmUgbWVzc2FnZXMgdG8gdGhlIHNlcnZlciwgYW5kIHRoZSBzZXJ2ZXIgcmVwbGllcyB3aXRoIGV4YWN0bHkgb25lXG4gKiBtZXNzYWdlLlxuICovXG5jbGFzcyBDbGllbnRTdHJlYW1pbmdDYWxsIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCByZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVycykge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzO1xuICAgICAgICB0aGlzLnJlcXVlc3RzID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnN0ZWFkIG9mIGF3YWl0aW5nIHRoZSByZXNwb25zZSBzdGF0dXMgYW5kIHRyYWlsZXJzLCB5b3UgY2FuXG4gICAgICoganVzdCBhcyB3ZWxsIGF3YWl0IHRoaXMgY2FsbCBpdHNlbGYgdG8gcmVjZWl2ZSB0aGUgc2VydmVyIG91dGNvbWUuXG4gICAgICogTm90ZSB0aGF0IGl0IG1heSBzdGlsbCBiZSB2YWxpZCB0byBzZW5kIG1vcmUgcmVxdWVzdCBtZXNzYWdlcy5cbiAgICAgKi9cbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2VGaW5pc2hlZCgpLnRoZW4odmFsdWUgPT4gb25mdWxmaWxsZWQgPyBQcm9taXNlLnJlc29sdmUob25mdWxmaWxsZWQodmFsdWUpKSA6IHZhbHVlLCByZWFzb24gPT4gb25yZWplY3RlZCA/IFByb21pc2UucmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpIDogUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG4gICAgfVxuICAgIHByb21pc2VGaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBbaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5yZXNwb25zZSwgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgICAgICB0cmFpbGVyc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5DbGllbnRTdHJlYW1pbmdDYWxsID0gQ2xpZW50U3RyZWFtaW5nQ2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRHVwbGV4U3RyZWFtaW5nQ2FsbCA9IHZvaWQgMDtcbi8qKlxuICogQSBkdXBsZXggc3RyZWFtaW5nIFJQQyBjYWxsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNsaWVudHMgc2VuZHMgYW5cbiAqIGFyYml0cmFyeSBhbW91bnQgb2YgbWVzc2FnZXMgdG8gdGhlIHNlcnZlciwgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSxcbiAqIHRoZSBzZXJ2ZXIgc2VuZHMgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiBtZXNzYWdlcyB0byB0aGUgY2xpZW50LlxuICovXG5jbGFzcyBEdXBsZXhTdHJlYW1pbmdDYWxsIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCByZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVycykge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzO1xuICAgICAgICB0aGlzLnJlcXVlc3RzID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZXMgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudHJhaWxlcnMgPSB0cmFpbGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5zdGVhZCBvZiBhd2FpdGluZyB0aGUgcmVzcG9uc2Ugc3RhdHVzIGFuZCB0cmFpbGVycywgeW91IGNhblxuICAgICAqIGp1c3QgYXMgd2VsbCBhd2FpdCB0aGlzIGNhbGwgaXRzZWxmIHRvIHJlY2VpdmUgdGhlIHNlcnZlciBvdXRjb21lLlxuICAgICAqIE5vdGUgdGhhdCBpdCBtYXkgc3RpbGwgYmUgdmFsaWQgdG8gc2VuZCBtb3JlIHJlcXVlc3QgbWVzc2FnZXMuXG4gICAgICovXG4gICAgdGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlRmluaXNoZWQoKS50aGVuKHZhbHVlID0+IG9uZnVsZmlsbGVkID8gUHJvbWlzZS5yZXNvbHZlKG9uZnVsZmlsbGVkKHZhbHVlKSkgOiB2YWx1ZSwgcmVhc29uID0+IG9ucmVqZWN0ZWQgPyBQcm9taXNlLnJlc29sdmUob25yZWplY3RlZChyZWFzb24pKSA6IFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xuICAgIH1cbiAgICBwcm9taXNlRmluaXNoZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWRlcnMsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgICAgICB0cmFpbGVycyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuRHVwbGV4U3RyZWFtaW5nQ2FsbCA9IER1cGxleFN0cmVhbWluZ0NhbGw7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRlc3RUcmFuc3BvcnQgPSB2b2lkIDA7XG5jb25zdCBycGNfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL3JwYy1lcnJvclwiKTtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJwY19vdXRwdXRfc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9ycGMtb3V0cHV0LXN0cmVhbVwiKTtcbmNvbnN0IHJwY19vcHRpb25zXzEgPSByZXF1aXJlKFwiLi9ycGMtb3B0aW9uc1wiKTtcbmNvbnN0IHVuYXJ5X2NhbGxfMSA9IHJlcXVpcmUoXCIuL3VuYXJ5LWNhbGxcIik7XG5jb25zdCBzZXJ2ZXJfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1zdHJlYW1pbmctY2FsbFwiKTtcbmNvbnN0IGNsaWVudF9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vY2xpZW50LXN0cmVhbWluZy1jYWxsXCIpO1xuY29uc3QgZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9kdXBsZXgtc3RyZWFtaW5nLWNhbGxcIik7XG4vKipcbiAqIFRyYW5zcG9ydCBmb3IgdGVzdGluZy5cbiAqL1xuY2xhc3MgVGVzdFRyYW5zcG9ydCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB3aXRoIG1vY2sgZGF0YS4gT21pdHRlZCBmaWVsZHMgaGF2ZSBkZWZhdWx0IHZhbHVlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1cHByZXNzIHdhcm5pbmcgLyBlcnJvciBhYm91dCB1bmNhdWdodCByZWplY3Rpb25zIG9mXG4gICAgICAgICAqIFwic3RhdHVzXCIgYW5kIFwidHJhaWxlcnNcIi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3VwcHJlc3NVbmNhdWdodFJlamVjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLmhlYWRlckRlbGF5ID0gMTA7XG4gICAgICAgIHRoaXMucmVzcG9uc2VEZWxheSA9IDUwO1xuICAgICAgICB0aGlzLmJldHdlZW5SZXNwb25zZURlbGF5ID0gMTA7XG4gICAgICAgIHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5ID0gMTA7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdm9pZCAwID8gZGF0YSA6IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW50IG1lc3NhZ2UocykgZHVyaW5nIHRoZSBsYXN0IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBnZXQgc2VudE1lc3NhZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5sYXN0SW5wdXQgaW5zdGFuY2VvZiBUZXN0SW5wdXRTdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3RJbnB1dC5zZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RJbnB1dCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMubGFzdElucHV0LnNpbmdsZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kaW5nIG1lc3NhZ2UocykgY29tcGxldGVkP1xuICAgICAqL1xuICAgIGdldCBzZW5kQ29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RJbnB1dCBpbnN0YW5jZW9mIFRlc3RJbnB1dFN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdElucHV0LmNvbXBsZXRlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy5sYXN0SW5wdXQgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDcmVhdGVzIGEgcHJvbWlzZSBmb3IgcmVzcG9uc2UgaGVhZGVycyBmcm9tIHRoZSBtb2NrIGRhdGEuXG4gICAgcHJvbWlzZUhlYWRlcnMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IChfYSA9IHRoaXMuZGF0YS5oZWFkZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBUZXN0VHJhbnNwb3J0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICByZXR1cm4gaGVhZGVycyBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yXG4gICAgICAgICAgICA/IFByb21pc2UucmVqZWN0KGhlYWRlcnMpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShoZWFkZXJzKTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlcyBhIHByb21pc2UgZm9yIGEgc2luZ2xlLCB2YWxpZCwgbWVzc2FnZSBmcm9tIHRoZSBtb2NrIGRhdGEuXG4gICAgcHJvbWlzZVNpbmdsZVJlc3BvbnNlKG1ldGhvZCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLnJlc3BvbnNlIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLmRhdGEucmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KHRoaXMuZGF0YS5yZXNwb25zZS5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgIHIgPSB0aGlzLmRhdGEucmVzcG9uc2VbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5kYXRhLnJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHIgPSB0aGlzLmRhdGEucmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByID0gbWV0aG9kLk8uY3JlYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcnVudGltZV8xLmFzc2VydChtZXRob2QuTy5pcyhyKSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyByZXNwb25zZSBtZXNzYWdlcyBmcm9tIHRoZSBtb2NrIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0uXG4gICAgICogSWYgYW4gZXJyb3IgcmVzcG9uc2UsIHN0YXR1cyBvciB0cmFpbGVycyBhcmUgbW9ja2VkLCB0aGUgc3RyZWFtIGlzXG4gICAgICogY2xvc2VkIHdpdGggdGhlIHJlc3BlY3RpdmUgZXJyb3IuXG4gICAgICogT3RoZXJ3aXNlLCBzdHJlYW0gaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm5lZCBwcm9taXNlIHJlc29sdmVzIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuIEl0IHNob3VsZFxuICAgICAqIG5vdCByZWplY3QuIElmIGl0IGRvZXMsIGNvZGUgaXMgYnJva2VuLlxuICAgICAqL1xuICAgIHN0cmVhbVJlc3BvbnNlcyhtZXRob2QsIHN0cmVhbSwgYWJvcnQpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSBcImRhdGEucmVzcG9uc2VcIiBpbnRvIGFuIGFycmF5IG9mIHZhbGlkIG91dHB1dCBtZXNzYWdlc1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEucmVzcG9uc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2gobWV0aG9kLk8uY3JlYXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbXNnIG9mIHRoaXMuZGF0YS5yZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KG1ldGhvZC5PLmlzKG1zZykpO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoISh0aGlzLmRhdGEucmVzcG9uc2UgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikpIHtcbiAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KG1ldGhvZC5PLmlzKHRoaXMuZGF0YS5yZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2godGhpcy5kYXRhLnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0YXJ0IHRoZSBzdHJlYW0gd2l0aCBhbiBpbml0aWFsIGRlbGF5LlxuICAgICAgICAgICAgLy8gaWYgdGhlIHJlcXVlc3QgaXMgY2FuY2VsbGVkLCBub3RpZnkoKSBlcnJvciBhbmQgZXhpdC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgeWllbGQgZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBhYm9ydCkodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5ub3RpZnlFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgZXJyb3IgcmVzcG9uc2Ugd2FzIG1vY2tlZCwgbm90aWZ5KCkgZXJyb3IgKHN0cmVhbSBpcyBub3cgY2xvc2VkIHdpdGggZXJyb3IpIGFuZCBleGl0LlxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5yZXNwb25zZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKHRoaXMuZGF0YS5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmVndWxhciByZXNwb25zZSBtZXNzYWdlcyB3ZXJlIG1vY2tlZC4gbm90aWZ5KCkgdGhlbS5cbiAgICAgICAgICAgIGZvciAobGV0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5ub3RpZnlNZXNzYWdlKG1zZyk7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGEgc2hvcnQgZGVsYXkgYmV0d2VlbiByZXNwb25zZXNcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcmVxdWVzdCBpcyBjYW5jZWxsZWQsIG5vdGlmeSgpIGVycm9yIGFuZCBleGl0LlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGRlbGF5KHRoaXMuYmV0d2VlblJlc3BvbnNlRGVsYXksIGFib3J0KSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVycm9yIHN0YXR1cyB3YXMgbW9ja2VkLCBub3RpZnkoKSBlcnJvciAoc3RyZWFtIGlzIG5vdyBjbG9zZWQgd2l0aCBlcnJvcikgYW5kIGV4aXQuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLnN0YXR1cyBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKHRoaXMuZGF0YS5zdGF0dXMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVycm9yIHRyYWlsZXJzIHdlcmUgbW9ja2VkLCBub3RpZnkoKSBlcnJvciAoc3RyZWFtIGlzIG5vdyBjbG9zZWQgd2l0aCBlcnJvcikgYW5kIGV4aXQuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLnRyYWlsZXJzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IodGhpcy5kYXRhLnRyYWlsZXJzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzdHJlYW0gY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBDcmVhdGVzIGEgcHJvbWlzZSBmb3IgcmVzcG9uc2Ugc3RhdHVzIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlU3RhdHVzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IChfYSA9IHRoaXMuZGF0YS5zdGF0dXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFRlc3RUcmFuc3BvcnQuZGVmYXVsdFN0YXR1cztcbiAgICAgICAgcmV0dXJuIHN0YXR1cyBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yXG4gICAgICAgICAgICA/IFByb21pc2UucmVqZWN0KHN0YXR1cylcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHN0YXR1cyk7XG4gICAgfVxuICAgIC8vIENyZWF0ZXMgYSBwcm9taXNlIGZvciByZXNwb25zZSB0cmFpbGVycyBmcm9tIHRoZSBtb2NrIGRhdGEuXG4gICAgcHJvbWlzZVRyYWlsZXJzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHRyYWlsZXJzID0gKF9hID0gdGhpcy5kYXRhLnRyYWlsZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBUZXN0VHJhbnNwb3J0LmRlZmF1bHRUcmFpbGVycztcbiAgICAgICAgcmV0dXJuIHRyYWlsZXJzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3JcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZWplY3QodHJhaWxlcnMpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh0cmFpbGVycyk7XG4gICAgfVxuICAgIG1heWJlU3VwcHJlc3NVbmNhdWdodCguLi5wcm9taXNlKSB7XG4gICAgICAgIGlmICh0aGlzLnN1cHByZXNzVW5jYXVnaHRSZWplY3Rpb25zKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwIG9mIHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBwLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBtZXJnZU9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcnBjX29wdGlvbnNfMS5tZXJnZVJwY09wdGlvbnMoe30sIG9wdGlvbnMpO1xuICAgIH1cbiAgICB1bmFyeShtZXRob2QsIGlucHV0LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSAoX2EgPSBvcHRpb25zLm1ldGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LCBoZWFkZXJzUHJvbWlzZSA9IHRoaXMucHJvbWlzZUhlYWRlcnMoKVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5oZWFkZXJEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCByZXNwb25zZVByb21pc2UgPSBoZWFkZXJzUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKF8gPT4gdGhpcy5wcm9taXNlU2luZ2xlUmVzcG9uc2UobWV0aG9kKSksIHN0YXR1c1Byb21pc2UgPSByZXNwb25zZVByb21pc2VcbiAgICAgICAgICAgIC5jYXRjaChfID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKF8gPT4gdGhpcy5wcm9taXNlU3RhdHVzKCkpLCB0cmFpbGVyc1Byb21pc2UgPSByZXNwb25zZVByb21pc2VcbiAgICAgICAgICAgIC5jYXRjaChfID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKF8gPT4gdGhpcy5wcm9taXNlVHJhaWxlcnMoKSk7XG4gICAgICAgIHRoaXMubWF5YmVTdXBwcmVzc1VuY2F1Z2h0KHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgICAgIHRoaXMubGFzdElucHV0ID0geyBzaW5nbGU6IGlucHV0IH07XG4gICAgICAgIHJldHVybiBuZXcgdW5hcnlfY2FsbF8xLlVuYXJ5Q2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCBpbnB1dCwgaGVhZGVyc1Byb21pc2UsIHJlc3BvbnNlUHJvbWlzZSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG4gICAgc2VydmVyU3RyZWFtaW5nKG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sIGhlYWRlcnNQcm9taXNlID0gdGhpcy5wcm9taXNlSGVhZGVycygpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmhlYWRlckRlbGF5LCBvcHRpb25zLmFib3J0KSksIG91dHB1dFN0cmVhbSA9IG5ldyBycGNfb3V0cHV0X3N0cmVhbV8xLlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXIoKSwgcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlID0gaGVhZGVyc1Byb21pc2VcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMucmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5zdHJlYW1SZXNwb25zZXMobWV0aG9kLCBvdXRwdXRTdHJlYW0sIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgc3RhdHVzUHJvbWlzZSA9IHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5wcm9taXNlU3RhdHVzKCkpLCB0cmFpbGVyc1Byb21pc2UgPSByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2VcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucHJvbWlzZVRyYWlsZXJzKCkpO1xuICAgICAgICB0aGlzLm1heWJlU3VwcHJlc3NVbmNhdWdodChzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgICAgICB0aGlzLmxhc3RJbnB1dCA9IHsgc2luZ2xlOiBpbnB1dCB9O1xuICAgICAgICByZXR1cm4gbmV3IHNlcnZlcl9zdHJlYW1pbmdfY2FsbF8xLlNlcnZlclN0cmVhbWluZ0NhbGwobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgaW5wdXQsIGhlYWRlcnNQcm9taXNlLCBvdXRwdXRTdHJlYW0sIHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgfVxuICAgIGNsaWVudFN0cmVhbWluZyhtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sIGhlYWRlcnNQcm9taXNlID0gdGhpcy5wcm9taXNlSGVhZGVycygpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmhlYWRlckRlbGF5LCBvcHRpb25zLmFib3J0KSksIHJlc3BvbnNlUHJvbWlzZSA9IGhlYWRlcnNQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTaW5nbGVSZXNwb25zZShtZXRob2QpKSwgc3RhdHVzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VUcmFpbGVycygpKTtcbiAgICAgICAgdGhpcy5tYXliZVN1cHByZXNzVW5jYXVnaHQoc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICAgICAgdGhpcy5sYXN0SW5wdXQgPSBuZXcgVGVzdElucHV0U3RyZWFtKHRoaXMuZGF0YSwgb3B0aW9ucy5hYm9ydCk7XG4gICAgICAgIHJldHVybiBuZXcgY2xpZW50X3N0cmVhbWluZ19jYWxsXzEuQ2xpZW50U3RyZWFtaW5nQ2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCB0aGlzLmxhc3RJbnB1dCwgaGVhZGVyc1Byb21pc2UsIHJlc3BvbnNlUHJvbWlzZSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG4gICAgZHVwbGV4KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gKF9hID0gb3B0aW9ucy5tZXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSwgaGVhZGVyc1Byb21pc2UgPSB0aGlzLnByb21pc2VIZWFkZXJzKClcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuaGVhZGVyRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgb3V0cHV0U3RyZWFtID0gbmV3IHJwY19vdXRwdXRfc3RyZWFtXzEuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcigpLCByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2UgPSBoZWFkZXJzUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnN0cmVhbVJlc3BvbnNlcyhtZXRob2QsIG91dHB1dFN0cmVhbSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCBzdGF0dXNQcm9taXNlID0gcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5wcm9taXNlVHJhaWxlcnMoKSk7XG4gICAgICAgIHRoaXMubWF5YmVTdXBwcmVzc1VuY2F1Z2h0KHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgICAgIHRoaXMubGFzdElucHV0ID0gbmV3IFRlc3RJbnB1dFN0cmVhbSh0aGlzLmRhdGEsIG9wdGlvbnMuYWJvcnQpO1xuICAgICAgICByZXR1cm4gbmV3IGR1cGxleF9zdHJlYW1pbmdfY2FsbF8xLkR1cGxleFN0cmVhbWluZ0NhbGwobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgdGhpcy5sYXN0SW5wdXQsIGhlYWRlcnNQcm9taXNlLCBvdXRwdXRTdHJlYW0sIHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgfVxufVxuZXhwb3J0cy5UZXN0VHJhbnNwb3J0ID0gVGVzdFRyYW5zcG9ydDtcblRlc3RUcmFuc3BvcnQuZGVmYXVsdEhlYWRlcnMgPSB7XG4gICAgcmVzcG9uc2VIZWFkZXI6IFwidGVzdFwiXG59O1xuVGVzdFRyYW5zcG9ydC5kZWZhdWx0U3RhdHVzID0ge1xuICAgIGNvZGU6IFwiT0tcIiwgZGV0YWlsOiBcImFsbCBnb29kXCJcbn07XG5UZXN0VHJhbnNwb3J0LmRlZmF1bHRUcmFpbGVycyA9IHtcbiAgICByZXNwb25zZVRyYWlsZXI6IFwidGVzdFwiXG59O1xuZnVuY3Rpb24gZGVsYXkobXMsIGFib3J0KSB7XG4gICAgcmV0dXJuICh2KSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChhYm9ydCA9PT0gbnVsbCB8fCBhYm9ydCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnQuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBycGNfZXJyb3JfMS5ScGNFcnJvcihcInVzZXIgY2FuY2VsXCIsIFwiQ0FOQ0VMTEVEXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHYpLCBtcyk7XG4gICAgICAgICAgICBpZiAoYWJvcnQpIHtcbiAgICAgICAgICAgICAgICBhYm9ydC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgZXYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IHJwY19lcnJvcl8xLlJwY0Vycm9yKFwidXNlciBjYW5jZWxcIiwgXCJDQU5DRUxMRURcIikpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5jbGFzcyBUZXN0SW5wdXRTdHJlYW0ge1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIGFib3J0KSB7XG4gICAgICAgIHRoaXMuX2NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZW50ID0gW107XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydDtcbiAgICB9XG4gICAgZ2V0IHNlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW50O1xuICAgIH1cbiAgICBnZXQgY29tcGxldGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tcGxldGVkO1xuICAgIH1cbiAgICBzZW5kKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5pbnB1dE1lc3NhZ2UgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuZGF0YS5pbnB1dE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlbGF5TXMgPSB0aGlzLmRhdGEuaW5wdXRNZXNzYWdlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMTBcbiAgICAgICAgICAgIDogdGhpcy5kYXRhLmlucHV0TWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZW50LnB1c2gobWVzc2FnZSk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheShkZWxheU1zLCB0aGlzLmFib3J0KSk7XG4gICAgfVxuICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmlucHV0Q29tcGxldGUgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuZGF0YS5pbnB1dENvbXBsZXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWxheU1zID0gdGhpcy5kYXRhLmlucHV0Q29tcGxldGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAxMFxuICAgICAgICAgICAgOiB0aGlzLmRhdGEuaW5wdXRDb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkoZGVsYXlNcywgdGhpcy5hYm9ydCkpO1xuICAgIH1cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gZXhwb3J0cy5zdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IGV4cG9ydHMuc3RhY2tTZXJ2ZXJTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBleHBvcnRzLnN0YWNrVW5hcnlJbnRlcmNlcHRvcnMgPSBleHBvcnRzLnN0YWNrSW50ZXJjZXB0ID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgXCJzdGFja1wiIG9mIG9mIGFsbCBpbnRlcmNlcHRvcnMgc3BlY2lmaWVkIGluIHRoZSBnaXZlbiBgUnBjT3B0aW9uc2AuXG4gKiBVc2VkIGJ5IGdlbmVyYXRlZCBjbGllbnQgaW1wbGVtZW50YXRpb25zLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSW50ZXJjZXB0KGtpbmQsIHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zLCBpbnB1dCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBpZiAoa2luZCA9PSBcInVuYXJ5XCIpIHtcbiAgICAgICAgbGV0IHRhaWwgPSAobXRkLCBpbnAsIG9wdCkgPT4gdHJhbnNwb3J0LnVuYXJ5KG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfYSA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRVbmFyeSkucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGFpbDtcbiAgICAgICAgICAgIHRhaWwgPSAobXRkLCBpbnAsIG9wdCkgPT4gY3Vyci5pbnRlcmNlcHRVbmFyeShuZXh0LCBtdGQsIGlucCwgb3B0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFpbChtZXRob2QsIGlucHV0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGtpbmQgPT0gXCJzZXJ2ZXJTdHJlYW1pbmdcIikge1xuICAgICAgICBsZXQgdGFpbCA9IChtdGQsIGlucCwgb3B0KSA9PiB0cmFuc3BvcnQuc2VydmVyU3RyZWFtaW5nKG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfYiA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRTZXJ2ZXJTdHJlYW1pbmcpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRhaWw7XG4gICAgICAgICAgICB0YWlsID0gKG10ZCwgaW5wLCBvcHQpID0+IGN1cnIuaW50ZXJjZXB0U2VydmVyU3RyZWFtaW5nKG5leHQsIG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWlsKG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoa2luZCA9PSBcImNsaWVudFN0cmVhbWluZ1wiKSB7XG4gICAgICAgIGxldCB0YWlsID0gKG10ZCwgb3B0KSA9PiB0cmFuc3BvcnQuY2xpZW50U3RyZWFtaW5nKG10ZCwgb3B0KTtcbiAgICAgICAgZm9yIChjb25zdCBjdXJyIG9mICgoX2MgPSBvcHRpb25zLmludGVyY2VwdG9ycykgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogW10pLmZpbHRlcihpID0+IGkuaW50ZXJjZXB0Q2xpZW50U3RyZWFtaW5nKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0YWlsO1xuICAgICAgICAgICAgdGFpbCA9IChtdGQsIG9wdCkgPT4gY3Vyci5pbnRlcmNlcHRDbGllbnRTdHJlYW1pbmcobmV4dCwgbXRkLCBvcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWlsKG1ldGhvZCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChraW5kID09IFwiZHVwbGV4XCIpIHtcbiAgICAgICAgbGV0IHRhaWwgPSAobXRkLCBvcHQpID0+IHRyYW5zcG9ydC5kdXBsZXgobXRkLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfZCA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHREdXBsZXgpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRhaWw7XG4gICAgICAgICAgICB0YWlsID0gKG10ZCwgb3B0KSA9PiBjdXJyLmludGVyY2VwdER1cGxleChuZXh0LCBtdGQsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhaWwobWV0aG9kLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcnVudGltZV8xLmFzc2VydE5ldmVyKGtpbmQpO1xufVxuZXhwb3J0cy5zdGFja0ludGVyY2VwdCA9IHN0YWNrSW50ZXJjZXB0O1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja1VuYXJ5SW50ZXJjZXB0b3JzKHRyYW5zcG9ydCwgbWV0aG9kLCBpbnB1dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcInVuYXJ5XCIsIHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zLCBpbnB1dCk7XG59XG5leHBvcnRzLnN0YWNrVW5hcnlJbnRlcmNlcHRvcnMgPSBzdGFja1VuYXJ5SW50ZXJjZXB0b3JzO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycyh0cmFuc3BvcnQsIG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gc3RhY2tJbnRlcmNlcHQoXCJzZXJ2ZXJTdHJlYW1pbmdcIiwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMsIGlucHV0KTtcbn1cbmV4cG9ydHMuc3RhY2tTZXJ2ZXJTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBzdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycztcbi8qKlxuICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkgYHN0YWNrSW50ZXJjZXB0KClgLCBzdGlsbCBoZXJlIHRvIHN1cHBvcnQgb2xkZXIgZ2VuZXJhdGVkIGNvZGVcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGllbnRTdHJlYW1pbmdJbnRlcmNlcHRvcnModHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gc3RhY2tJbnRlcmNlcHQoXCJjbGllbnRTdHJlYW1pbmdcIiwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5zdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IHN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9ycyh0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcImR1cGxleFwiLCB0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXIgPSB2b2lkIDA7XG5jbGFzcyBTZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgaGVhZGVycywgZGVhZGxpbmUsIHNlbmRSZXNwb25zZUhlYWRlcnNGbiwgZGVmYXVsdFN0YXR1cyA9IHsgY29kZTogJ09LJywgZGV0YWlsOiAnJyB9KSB7XG4gICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMuZGVhZGxpbmUgPSBkZWFkbGluZTtcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHt9O1xuICAgICAgICB0aGlzLl9zZW5kUkggPSBzZW5kUmVzcG9uc2VIZWFkZXJzRm47XG4gICAgICAgIHRoaXMuc3RhdHVzID0gZGVmYXVsdFN0YXR1cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjYWxsIGNhbmNlbGxlZC5cbiAgICAgKlxuICAgICAqIEludm9rZXMgYWxsIGNhbGxiYWNrcyByZWdpc3RlcmVkIHdpdGggb25DYW5jZWwoKSBhbmRcbiAgICAgKiBzZXRzIGBjYW5jZWxsZWQgPSB0cnVlYC5cbiAgICAgKi9cbiAgICBub3RpZnlDYW5jZWxsZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgbCBvZiB0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICBsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCByZXNwb25zZSBoZWFkZXJzLlxuICAgICAqL1xuICAgIHNlbmRSZXNwb25zZUhlYWRlcnMoZGF0YSkge1xuICAgICAgICB0aGlzLl9zZW5kUkgoZGF0YSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBjYWxsIGNhbmNlbGxlZD9cbiAgICAgKlxuICAgICAqIFdoZW4gdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIHRoZSBzZXJ2ZXJcbiAgICAgKiBpcyBkb25lLCB0aGUgY2FsbCBpcyBjYW5jZWxsZWQuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBjYW5jZWwgYSByZXF1ZXN0IG9uIHRoZSBzZXJ2ZXIsIHRocm93IGFcbiAgICAgKiBScGNFcnJvciB3aXRoIHRoZSBDQU5DRUxMRUQgc3RhdHVzIGNvZGUuXG4gICAgICovXG4gICAgZ2V0IGNhbmNlbGxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbmNlbGxlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgY2FsbGJhY2sgZm9yIGNhbmNlbGxhdGlvbi5cbiAgICAgKi9cbiAgICBvbkNhbmNlbChjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsID0gdGhpcy5fbGlzdGVuZXJzO1xuICAgICAgICBsLnB1c2goY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGkgPSBsLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgICAgICAgICBsLnNwbGljZShpLCAxKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlciA9IFNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBQdWJsaWMgQVBJIG9mIHRoZSBycGMgcnVudGltZS5cbi8vIE5vdGU6IHdlIGRvIG5vdCB1c2UgYGV4cG9ydCAqIGZyb20gLi4uYCB0byBoZWxwIHRyZWUgc2hha2Vycyxcbi8vIHdlYnBhY2sgdmVyYm9zZSBvdXRwdXQgaGludHMgdGhhdCB0aGlzIHNob3VsZCBiZSB1c2VmdWxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXJ2aWNlX3R5cGVfMSA9IHJlcXVpcmUoXCIuL3NlcnZpY2UtdHlwZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZpY2VUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2aWNlX3R5cGVfMS5TZXJ2aWNlVHlwZTsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRNZXRob2RPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkTWV0aG9kT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRNZXRob2RPcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLnJlYWRNZXRob2RPcHRpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWFkU2VydmljZU9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZFNlcnZpY2VPcHRpb247IH0gfSk7XG52YXIgcnBjX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ycGMtZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJScGNFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2Vycm9yXzEuUnBjRXJyb3I7IH0gfSk7XG52YXIgcnBjX29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3JwYy1vcHRpb25zXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VScGNPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfb3B0aW9uc18xLm1lcmdlUnBjT3B0aW9uczsgfSB9KTtcbnZhciBycGNfb3V0cHV0X3N0cmVhbV8xID0gcmVxdWlyZShcIi4vcnBjLW91dHB1dC1zdHJlYW1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfb3V0cHV0X3N0cmVhbV8xLlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXI7IH0gfSk7XG52YXIgdGVzdF90cmFuc3BvcnRfMSA9IHJlcXVpcmUoXCIuL3Rlc3QtdHJhbnNwb3J0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGVzdFRyYW5zcG9ydFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGVzdF90cmFuc3BvcnRfMS5UZXN0VHJhbnNwb3J0OyB9IH0pO1xudmFyIGRlZmVycmVkXzEgPSByZXF1aXJlKFwiLi9kZWZlcnJlZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRlZmVycmVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZlcnJlZF8xLkRlZmVycmVkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVmZXJyZWRTdGF0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVmZXJyZWRfMS5EZWZlcnJlZFN0YXRlOyB9IH0pO1xudmFyIGR1cGxleF9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vZHVwbGV4LXN0cmVhbWluZy1jYWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRHVwbGV4U3RyZWFtaW5nQ2FsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEuRHVwbGV4U3RyZWFtaW5nQ2FsbDsgfSB9KTtcbnZhciBjbGllbnRfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC1zdHJlYW1pbmctY2FsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNsaWVudFN0cmVhbWluZ0NhbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsaWVudF9zdHJlYW1pbmdfY2FsbF8xLkNsaWVudFN0cmVhbWluZ0NhbGw7IH0gfSk7XG52YXIgc2VydmVyX3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9zZXJ2ZXItc3RyZWFtaW5nLWNhbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXJ2ZXJTdHJlYW1pbmdDYWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2ZXJfc3RyZWFtaW5nX2NhbGxfMS5TZXJ2ZXJTdHJlYW1pbmdDYWxsOyB9IH0pO1xudmFyIHVuYXJ5X2NhbGxfMSA9IHJlcXVpcmUoXCIuL3VuYXJ5LWNhbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbmFyeUNhbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuYXJ5X2NhbGxfMS5VbmFyeUNhbGw7IH0gfSk7XG52YXIgcnBjX2ludGVyY2VwdG9yXzEgPSByZXF1aXJlKFwiLi9ycGMtaW50ZXJjZXB0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja0ludGVyY2VwdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tJbnRlcmNlcHQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tDbGllbnRTdHJlYW1pbmdJbnRlcmNlcHRvcnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tTZXJ2ZXJTdHJlYW1pbmdJbnRlcmNlcHRvcnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja1VuYXJ5SW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja1VuYXJ5SW50ZXJjZXB0b3JzOyB9IH0pO1xudmFyIHNlcnZlcl9jYWxsX2NvbnRleHRfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1jYWxsLWNvbnRleHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZlcl9jYWxsX2NvbnRleHRfMS5TZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXI7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2UgPSBleHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UgPSBleHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVxdWVzdCA9IGV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZSA9IGV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0ID0gZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCA9IGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlID0gZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVxdWVzdCA9IGV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlID0gZXhwb3J0cy5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdCA9IGV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSA9IGV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0ID0gdm9pZCAwO1xuLy8gQGdlbmVyYXRlZCBieSBwcm90b2J1Zi10cyAyLjkuMSB3aXRoIHBhcmFtZXRlciBsb25nX3R5cGVfc3RyaW5nLGNsaWVudF9ub25lLGdlbmVyYXRlX2RlcGVuZGVuY2llc1xuLy8gQGdlbmVyYXRlZCBmcm9tIHByb3RvYnVmIGZpbGUgXCJyZXN1bHRzL2FwaS92MS9hcnRpZmFjdC5wcm90b1wiIChwYWNrYWdlIFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjFcIiwgc3ludGF4IHByb3RvMylcbi8vIHRzbGludDpkaXNhYmxlXG5jb25zdCBydW50aW1lX3JwY18xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lLXJwY1wiKTtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNCA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHdyYXBwZXJzXzEgPSByZXF1aXJlKFwiLi4vLi4vLi4vZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzXCIpO1xuY29uc3Qgd3JhcHBlcnNfMiA9IHJlcXVpcmUoXCIuLi8uLi8uLi9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnNcIik7XG5jb25zdCB0aW1lc3RhbXBfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wXCIpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcImV4cGlyZXNfYXRcIiwga2luZDogXCJtZXNzYWdlXCIsIFQ6ICgpID0+IHRpbWVzdGFtcF8xLlRpbWVzdGFtcCB9LFxuICAgICAgICAgICAgeyBubzogNSwgbmFtZTogXCJ2ZXJzaW9uXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDUgLypTY2FsYXJUeXBlLklOVDMyKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHdvcmtmbG93UnVuQmFja2VuZElkOiBcIlwiLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogXCJcIiwgbmFtZTogXCJcIiwgdmVyc2lvbjogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgZXhwaXJlc19hdCAqLyA0OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4cGlyZXNBdCA9IHRpbWVzdGFtcF8xLlRpbWVzdGFtcC5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UuZXhwaXJlc0F0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQzMiB2ZXJzaW9uICovIDU6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmVyc2lvbiA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBleHBpcmVzX2F0ID0gNDsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZXhwaXJlc0F0KVxuICAgICAgICAgICAgdGltZXN0YW1wXzEuVGltZXN0YW1wLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5leHBpcmVzQXQsIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIC8qIGludDMyIHZlcnNpb24gPSA1OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52ZXJzaW9uICE9PSAwKVxuICAgICAgICAgICAgd3JpdGVyLnRhZyg1LCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQzMihtZXNzYWdlLnZlcnNpb24pO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVxdWVzdFxuICovXG5leHBvcnRzLkNyZWF0ZUFydGlmYWN0UmVxdWVzdCA9IG5ldyBDcmVhdGVBcnRpZmFjdFJlcXVlc3QkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwib2tcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOCAvKlNjYWxhclR5cGUuQk9PTCovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcInNpZ25lZF91cGxvYWRfdXJsXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBvazogZmFsc2UsIHNpZ25lZFVwbG9hZFVybDogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIG9rICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2sgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyBzaWduZWRfdXBsb2FkX3VybCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpZ25lZFVwbG9hZFVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCBvayA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm9rICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLm9rKTtcbiAgICAgICAgLyogc3RyaW5nIHNpZ25lZF91cGxvYWRfdXJsID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2lnbmVkVXBsb2FkVXJsICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5zaWduZWRVcGxvYWRVcmwpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlID0gbmV3IENyZWF0ZUFydGlmYWN0UmVzcG9uc2UkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRmluYWxpemVBcnRpZmFjdFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3RcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ3b3JrZmxvd19ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMiwgbmFtZTogXCJ3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDMsIG5hbWU6IFwibmFtZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogNCwgbmFtZTogXCJzaXplXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDUsIG5hbWU6IFwiaGFzaFwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZSB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiLCBuYW1lOiBcIlwiLCBzaXplOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IHNpemUgKi8gNDpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zaXplID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgaGFzaCAqLyA1OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmhhc2ggPSB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgbWVzc2FnZS5oYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIC8qIGludDY0IHNpemUgPSA0OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaXplICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5zaXplKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlIGhhc2ggPSA1OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5oYXNoKVxuICAgICAgICAgICAgd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZS5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UuaGFzaCwgd3JpdGVyLnRhZyg1LCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdFxuICovXG5leHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0ID0gbmV3IEZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZSRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJva1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwiYXJ0aWZhY3RfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgb2s6IGZhbHNlLCBhcnRpZmFjdElkOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIG9rICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2sgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IGFydGlmYWN0X2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXJ0aWZhY3RJZCA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGJvb2wgb2sgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5vayAhPT0gZmFsc2UpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmJvb2wobWVzc2FnZS5vayk7XG4gICAgICAgIC8qIGludDY0IGFydGlmYWN0X2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuYXJ0aWZhY3RJZCAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UuYXJ0aWZhY3RJZCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlXG4gKi9cbmV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlID0gbmV3IEZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBMaXN0QXJ0aWZhY3RzUmVxdWVzdCRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lX2ZpbHRlclwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZSB9LFxuICAgICAgICAgICAgeyBubzogNCwgbmFtZTogXCJpZF9maWx0ZXJcIiwga2luZDogXCJtZXNzYWdlXCIsIFQ6ICgpID0+IHdyYXBwZXJzXzEuSW50NjRWYWx1ZSB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgbmFtZV9maWx0ZXIgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lRmlsdGVyID0gd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UubmFtZUZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUgaWRfZmlsdGVyICovIDQ6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaWRGaWx0ZXIgPSB3cmFwcGVyc18xLkludDY0VmFsdWUuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zLCBtZXNzYWdlLmlkRmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBuYW1lX2ZpbHRlciA9IDM7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbWVGaWx0ZXIpXG4gICAgICAgICAgICB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5uYW1lRmlsdGVyLCB3cml0ZXIudGFnKDMsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucykuam9pbigpO1xuICAgICAgICAvKiBnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSBpZF9maWx0ZXIgPSA0OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5pZEZpbHRlcilcbiAgICAgICAgICAgIHdyYXBwZXJzXzEuSW50NjRWYWx1ZS5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UuaWRGaWx0ZXIsIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1JlcXVlc3RcbiAqL1xuZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVxdWVzdCA9IG5ldyBMaXN0QXJ0aWZhY3RzUmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBMaXN0QXJ0aWZhY3RzUmVzcG9uc2UkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwiYXJ0aWZhY3RzXCIsIGtpbmQ6IFwibWVzc2FnZVwiLCByZXBlYXQ6IDEgLypSZXBlYXRUeXBlLlBBQ0tFRCovLCBUOiAoKSA9PiBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0IH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBhcnRpZmFjdHM6IFtdIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHJlcGVhdGVkIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0IGFydGlmYWN0cyAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFydGlmYWN0cy5wdXNoKGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHJlcGVhdGVkIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0IGFydGlmYWN0cyA9IDE7ICovXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZS5hcnRpZmFjdHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0LmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5hcnRpZmFjdHNbaV0sIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlXG4gKi9cbmV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlID0gbmV3IExpc3RBcnRpZmFjdHNSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBMaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UuTW9ub2xpdGhBcnRpZmFjdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJkYXRhYmFzZV9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDUsIG5hbWU6IFwic2l6ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH0sXG4gICAgICAgICAgICB7IG5vOiA2LCBuYW1lOiBcImNyZWF0ZWRfYXRcIiwga2luZDogXCJtZXNzYWdlXCIsIFQ6ICgpID0+IHRpbWVzdGFtcF8xLlRpbWVzdGFtcCB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiLCBkYXRhYmFzZUlkOiBcIjBcIiwgbmFtZTogXCJcIiwgc2l6ZTogXCIwXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IGRhdGFiYXNlX2lkICovIDM6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YWJhc2VJZCA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gNDpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IHNpemUgKi8gNTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zaXplID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIGNyZWF0ZWRfYXQgKi8gNjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jcmVhdGVkQXQgPSB0aW1lc3RhbXBfMS5UaW1lc3RhbXAuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zLCBtZXNzYWdlLmNyZWF0ZWRBdCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBpbnQ2NCBkYXRhYmFzZV9pZCA9IDM7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmRhdGFiYXNlSWQgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQ2NChtZXNzYWdlLmRhdGFiYXNlSWQpO1xuICAgICAgICAvKiBzdHJpbmcgbmFtZSA9IDQ7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDQsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgICAgICAvKiBpbnQ2NCBzaXplID0gNTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2l6ZSAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDUsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2Uuc2l6ZSk7XG4gICAgICAgIC8qIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgY3JlYXRlZF9hdCA9IDY7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmNyZWF0ZWRBdClcbiAgICAgICAgICAgIHRpbWVzdGFtcF8xLlRpbWVzdGFtcC5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UuY3JlYXRlZEF0LCB3cml0ZXIudGFnKDYsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucykuam9pbigpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0XG4gKi9cbmV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QgPSBuZXcgTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyBuYW1lICovIDM6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0ID0gbmV3IEdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBHZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJzaWduZWRfdXJsXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBzaWduZWRVcmw6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHNpZ25lZF91cmwgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zaWduZWRVcmwgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHN0cmluZyBzaWduZWRfdXJsID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2lnbmVkVXJsICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5zaWduZWRVcmwpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlID0gbmV3IEdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkRlbGV0ZUFydGlmYWN0UmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyBuYW1lICovIDM6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0ID0gbmV3IERlbGV0ZUFydGlmYWN0UmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBEZWxldGVBcnRpZmFjdFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJva1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwiYXJ0aWZhY3RfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgb2s6IGZhbHNlLCBhcnRpZmFjdElkOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIG9rICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2sgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IGFydGlmYWN0X2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXJ0aWZhY3RJZCA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGJvb2wgb2sgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5vayAhPT0gZmFsc2UpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmJvb2wobWVzc2FnZS5vayk7XG4gICAgICAgIC8qIGludDY0IGFydGlmYWN0X2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuYXJ0aWZhY3RJZCAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UuYXJ0aWZhY3RJZCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZVxuICovXG5leHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UgPSBuZXcgRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSRUeXBlKCk7XG4vKipcbiAqIEBnZW5lcmF0ZWQgU2VydmljZVR5cGUgZm9yIHByb3RvYnVmIHNlcnZpY2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXG4gKi9cbmV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlID0gbmV3IHJ1bnRpbWVfcnBjXzEuU2VydmljZVR5cGUoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgW1xuICAgIHsgbmFtZTogXCJDcmVhdGVBcnRpZmFjdFwiLCBvcHRpb25zOiB7fSwgSTogZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlcXVlc3QsIE86IGV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJGaW5hbGl6ZUFydGlmYWN0XCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0LCBPOiBleHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJMaXN0QXJ0aWZhY3RzXCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LCBPOiBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiLCBvcHRpb25zOiB7fSwgSTogZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QsIE86IGV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJEZWxldGVBcnRpZmFjdFwiLCBvcHRpb25zOiB7fSwgSTogZXhwb3J0cy5EZWxldGVBcnRpZmFjdFJlcXVlc3QsIE86IGV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSB9XG5dKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFydGlmYWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzSG9vayA9IGV4cG9ydHMuY2hhaW5Ib29rcyA9IHZvaWQgMDtcbi8vIENoYWluSG9va3MgY3JlYXRlcyBhIG5ldyBTZXJ2ZXJIb29rIHdoaWNoIGNoYWlucyB0aGUgY2FsbGJhY2tzIGluXG4vLyBlYWNoIG9mIHRoZSBjb25zdGl0dWVudCBob29rcyBwYXNzZWQgaW4uIEVhY2ggaG9vayBmdW5jdGlvbiB3aWxsIGJlXG4vLyBjYWxsZWQgaW4gdGhlIG9yZGVyIG9mIHRoZSBTZXJ2ZXJIb29rcyB2YWx1ZXMgcGFzc2VkIGluLlxuLy9cbi8vIEZvciB0aGUgZXJyb3JpbmcgaG9va3MsIFJlcXVlc3RSZWNlaXZlZCBhbmQgUmVxdWVzdFJvdXRlZCwgYW55IHJldHVybmVkXG4vLyBlcnJvcnMgcHJldmVudCBwcm9jZXNzaW5nIGJ5IGxhdGVyIGhvb2tzLlxuZnVuY3Rpb24gY2hhaW5Ib29rcyguLi5ob29rcykge1xuICAgIGlmIChob29rcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChob29rcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tzWzBdO1xuICAgIH1cbiAgICBjb25zdCBzZXJ2ZXJIb29rID0ge1xuICAgICAgICByZXF1ZXN0UmVjZWl2ZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFJlY2VpdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlcXVlc3RSZWNlaXZlZChjdHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0UHJlcGFyZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFByZXBhcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJob29rIHJlcXVlc3RQcmVwYXJlZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJQbGVhc2UgdXNlIHJlc3BvbnNlUHJlcGFyZWQgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVxdWVzdFByZXBhcmVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc3BvbnNlUHJlcGFyZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVzcG9uc2VQcmVwYXJlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXNwb25zZVByZXBhcmVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3RTZW50KGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhvb2sgb2YgaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFob29rLnJlcXVlc3RTZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJob29rIHJlcXVlc3RTZW50IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlBsZWFzZSB1c2UgcmVzcG9uc2VTZW50IGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlcXVlc3RTZW50KGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc3BvbnNlU2VudChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXNwb25zZVNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVzcG9uc2VTZW50KGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3RSb3V0ZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFJvdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXF1ZXN0Um91dGVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yKGN0eCwgZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2suZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2suZXJyb3IoY3R4LCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHNlcnZlckhvb2s7XG59XG5leHBvcnRzLmNoYWluSG9va3MgPSBjaGFpbkhvb2tzO1xuZnVuY3Rpb24gaXNIb29rKG9iamVjdCkge1xuICAgIHJldHVybiAoXCJyZXF1ZXN0UmVjZWl2ZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXF1ZXN0UHJlcGFyZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXF1ZXN0U2VudFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlcXVlc3RSb3V0ZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXNwb25zZVByZXBhcmVkXCIgaW4gb2JqZWN0IHx8XG4gICAgICAgIFwicmVzcG9uc2VTZW50XCIgaW4gb2JqZWN0IHx8XG4gICAgICAgIFwiZXJyb3JcIiBpbiBvYmplY3QpO1xufVxuZXhwb3J0cy5pc0hvb2sgPSBpc0hvb2s7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1ZhbGlkRXJyb3JDb2RlID0gZXhwb3J0cy5odHRwU3RhdHVzRnJvbUVycm9yQ29kZSA9IGV4cG9ydHMuVHdpcnBFcnJvckNvZGUgPSBleHBvcnRzLkJhZFJvdXRlRXJyb3IgPSBleHBvcnRzLkludGVybmFsU2VydmVyRXJyb3JXaXRoID0gZXhwb3J0cy5JbnRlcm5hbFNlcnZlckVycm9yID0gZXhwb3J0cy5SZXF1aXJlZEFyZ3VtZW50RXJyb3IgPSBleHBvcnRzLkludmFsaWRBcmd1bWVudEVycm9yID0gZXhwb3J0cy5Ob3RGb3VuZEVycm9yID0gZXhwb3J0cy5Ud2lycEVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBSZXByZXNlbnRzIGEgdHdpcnAgZXJyb3JcbiAqL1xuY2xhc3MgVHdpcnBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlLCBtc2cpIHtcbiAgICAgICAgc3VwZXIobXNnKTtcbiAgICAgICAgdGhpcy5jb2RlID0gVHdpcnBFcnJvckNvZGUuSW50ZXJuYWw7XG4gICAgICAgIHRoaXMubWV0YSA9IHt9O1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLm1zZyA9IG1zZztcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFR3aXJwRXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIG1ldGFkYXRhIGt2IHRvIHRoZSBlcnJvclxuICAgICAqIEBwYXJhbSBrZXlcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICB3aXRoTWV0YShrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXMubWV0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc2luZ2xlIG1ldGFkYXRhIHZhbHVlXG4gICAgICogcmV0dXJuIFwiXCIgaWYgbm90IGZvdW5kXG4gICAgICogQHBhcmFtIGtleVxuICAgICAqL1xuICAgIGdldE1ldGEoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFba2V5XSB8fCBcIlwiO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgdGhlIG9yaWdpbmFsIGVycm9yIGNhdXNlXG4gICAgICogQHBhcmFtIGVyclxuICAgICAqIEBwYXJhbSBhZGRNZXRhXG4gICAgICovXG4gICAgd2l0aENhdXNlKGVyciwgYWRkTWV0YSA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX29yaWdpbmFsQ2F1c2UgPSBlcnI7XG4gICAgICAgIGlmIChhZGRNZXRhKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhNZXRhKFwiY2F1c2VcIiwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjYXVzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsQ2F1c2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGVycm9yIHJlcHJlc2VudGF0aW9uIHRvIEpTT05cbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgICAgICAgICAgICBtc2c6IHRoaXMubXNnLFxuICAgICAgICAgICAgICAgIG1ldGE6IHRoaXMubWV0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gYHtcImNvZGVcIjogXCJpbnRlcm5hbFwiLCBcIm1zZ1wiOiBcIlRoZXJlIHdhcyBhbiBlcnJvciBidXQgaXQgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgaW50byBKU09OXCJ9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0d2lycCBlcnJvciBmcm9tIGFuIG9iamVjdFxuICAgICAqIEBwYXJhbSBvYmpcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbU9iamVjdChvYmopIHtcbiAgICAgICAgY29uc3QgY29kZSA9IG9ialtcImNvZGVcIl0gfHwgVHdpcnBFcnJvckNvZGUuVW5rbm93bjtcbiAgICAgICAgY29uc3QgbXNnID0gb2JqW1wibXNnXCJdIHx8IFwidW5rbm93blwiO1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUd2lycEVycm9yKGNvZGUsIG1zZyk7XG4gICAgICAgIGlmIChvYmpbXCJtZXRhXCJdKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvYmpbXCJtZXRhXCJdKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBlcnJvci53aXRoTWV0YShrZXksIG9ialtcIm1ldGFcIl1ba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxufVxuZXhwb3J0cy5Ud2lycEVycm9yID0gVHdpcnBFcnJvcjtcbi8qKlxuICogTm90Rm91bmRFcnJvciBjb25zdHJ1Y3RvciBmb3IgdGhlIGNvbW1vbiBOb3RGb3VuZCBlcnJvci5cbiAqL1xuY2xhc3MgTm90Rm91bmRFcnJvciBleHRlbmRzIFR3aXJwRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1zZykge1xuICAgICAgICBzdXBlcihUd2lycEVycm9yQ29kZS5Ob3RGb3VuZCwgbXNnKTtcbiAgICB9XG59XG5leHBvcnRzLk5vdEZvdW5kRXJyb3IgPSBOb3RGb3VuZEVycm9yO1xuLyoqXG4gKiBJbnZhbGlkQXJndW1lbnRFcnJvciBjb25zdHJ1Y3RvciBmb3IgdGhlIGNvbW1vbiBJbnZhbGlkQXJndW1lbnQgZXJyb3IuIENhbiBiZVxuICogdXNlZCB3aGVuIGFuIGFyZ3VtZW50IGhhcyBpbnZhbGlkIGZvcm1hdCwgaXMgYSBudW1iZXIgb3V0IG9mIHJhbmdlLCBpcyBhIGJhZFxuICogb3B0aW9uLCBldGMpLlxuICovXG5jbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIFR3aXJwRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGFyZ3VtZW50LCB2YWxpZGF0aW9uTXNnKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLkludmFsaWRBcmd1bWVudCwgYXJndW1lbnQgKyBcIiBcIiArIHZhbGlkYXRpb25Nc2cpO1xuICAgICAgICB0aGlzLndpdGhNZXRhKFwiYXJndW1lbnRcIiwgYXJndW1lbnQpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjtcbi8qKlxuICogUmVxdWlyZWRBcmd1bWVudEVycm9yIGlzIGEgbW9yZSBzcGVjaWZpYyBjb25zdHJ1Y3RvciBmb3IgSW52YWxpZEFyZ3VtZW50XG4gKiBlcnJvci4gU2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgYXJndW1lbnQgaXMgcmVxdWlyZWQgKGV4cGVjdGVkIHRvIGhhdmUgYVxuICogbm9uLXplcm8gdmFsdWUpLlxuICovXG5jbGFzcyBSZXF1aXJlZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBJbnZhbGlkQXJndW1lbnRFcnJvciB7XG4gICAgY29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgICAgICAgc3VwZXIoYXJndW1lbnQsIFwiaXMgcmVxdWlyZWRcIik7XG4gICAgfVxufVxuZXhwb3J0cy5SZXF1aXJlZEFyZ3VtZW50RXJyb3IgPSBSZXF1aXJlZEFyZ3VtZW50RXJyb3I7XG4vKipcbiAqIEludGVybmFsRXJyb3IgY29uc3RydWN0b3IgZm9yIHRoZSBjb21tb24gSW50ZXJuYWwgZXJyb3IuIFNob3VsZCBiZSB1c2VkIHRvXG4gKiBzcGVjaWZ5IHRoYXQgc29tZXRoaW5nIGJhZCBvciB1bmV4cGVjdGVkIGhhcHBlbmVkLlxuICovXG5jbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLkludGVybmFsLCBtc2cpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW50ZXJuYWxTZXJ2ZXJFcnJvciA9IEludGVybmFsU2VydmVyRXJyb3I7XG4vKipcbiAqIEludGVybmFsRXJyb3JXaXRoIG1ha2VzIGFuIGludGVybmFsIGVycm9yLCB3cmFwcGluZyB0aGUgb3JpZ2luYWwgZXJyb3IgYW5kIHVzaW5nIGl0XG4gKiBmb3IgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCB3aXRoIG1ldGFkYXRhIFwiY2F1c2VcIiB3aXRoIHRoZSBvcmlnaW5hbCBlcnJvciB0eXBlLlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IFR3aXJwIHNlcnZpY2VzIHRvIHdyYXAgbm9uLVR3aXJwIGVycm9ycyBhcyBpbnRlcm5hbCBlcnJvcnMuXG4gKiBUaGUgd3JhcHBlZCBlcnJvciBjYW4gYmUgZXh0cmFjdGVkIGxhdGVyIHdpdGggZXJyLmNhdXNlKClcbiAqL1xuY2xhc3MgSW50ZXJuYWxTZXJ2ZXJFcnJvcldpdGggZXh0ZW5kcyBJbnRlcm5hbFNlcnZlckVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICAgICAgc3VwZXIoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLndpdGhNZXRhKFwiY2F1c2VcIiwgZXJyLm5hbWUpO1xuICAgICAgICB0aGlzLndpdGhDYXVzZShlcnIpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW50ZXJuYWxTZXJ2ZXJFcnJvcldpdGggPSBJbnRlcm5hbFNlcnZlckVycm9yV2l0aDtcbi8qKlxuICogQSBzdGFuZGFyZCBCYWRSb3V0ZSBFcnJvclxuICovXG5jbGFzcyBCYWRSb3V0ZUVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnLCBtZXRob2QsIHVybCkge1xuICAgICAgICBzdXBlcihUd2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICAgICAgdGhpcy53aXRoTWV0YShcInR3aXJwX2ludmFsaWRfcm91dGVcIiwgbWV0aG9kICsgXCIgXCIgKyB1cmwpO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFkUm91dGVFcnJvciA9IEJhZFJvdXRlRXJyb3I7XG52YXIgVHdpcnBFcnJvckNvZGU7XG4oZnVuY3Rpb24gKFR3aXJwRXJyb3JDb2RlKSB7XG4gICAgLy8gQ2FuY2VsZWQgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24gd2FzIGNhbmNlbGxlZCAodHlwaWNhbGx5IGJ5IHRoZSBjYWxsZXIpLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiQ2FuY2VsZWRcIl0gPSBcImNhbmNlbGVkXCI7XG4gICAgLy8gVW5rbm93biBlcnJvci4gRm9yIGV4YW1wbGUgd2hlbiBoYW5kbGluZyBlcnJvcnMgcmFpc2VkIGJ5IEFQSXMgdGhhdCBkbyBub3RcbiAgICAvLyByZXR1cm4gZW5vdWdoIGVycm9yIGluZm9ybWF0aW9uLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiVW5rbm93blwiXSA9IFwidW5rbm93blwiO1xuICAgIC8vIEludmFsaWRBcmd1bWVudCBpbmRpY2F0ZXMgY2xpZW50IHNwZWNpZmllZCBhbiBpbnZhbGlkIGFyZ3VtZW50LiBJdFxuICAgIC8vIGluZGljYXRlcyBhcmd1bWVudHMgdGhhdCBhcmUgcHJvYmxlbWF0aWMgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdGUgb2YgdGhlXG4gICAgLy8gc3lzdGVtIChpLmUuIGEgbWFsZm9ybWVkIGZpbGUgbmFtZSwgcmVxdWlyZWQgYXJndW1lbnQsIG51bWJlciBvdXQgb2YgcmFuZ2UsXG4gICAgLy8gZXRjLikuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJJbnZhbGlkQXJndW1lbnRcIl0gPSBcImludmFsaWRfYXJndW1lbnRcIjtcbiAgICAvLyBNYWxmb3JtZWQgaW5kaWNhdGVzIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGRlY29kaW5nIHRoZSBjbGllbnQncyByZXF1ZXN0LlxuICAgIC8vIFRoaXMgbWF5IG1lYW4gdGhhdCB0aGUgbWVzc2FnZSB3YXMgZW5jb2RlZCBpbXByb3Blcmx5LCBvciB0aGF0IHRoZXJlIGlzIGFcbiAgICAvLyBkaXNhZ3JlZW1lbnQgaW4gbWVzc2FnZSBmb3JtYXQgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJNYWxmb3JtZWRcIl0gPSBcIm1hbGZvcm1lZFwiO1xuICAgIC8vIERlYWRsaW5lRXhjZWVkZWQgbWVhbnMgb3BlcmF0aW9uIGV4cGlyZWQgYmVmb3JlIGNvbXBsZXRpb24uIEZvciBvcGVyYXRpb25zXG4gICAgLy8gdGhhdCBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0sIHRoaXMgZXJyb3IgbWF5IGJlIHJldHVybmVkIGV2ZW4gaWYgdGhlXG4gICAgLy8gb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICh0aW1lb3V0KS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkRlYWRsaW5lRXhjZWVkZWRcIl0gPSBcImRlYWRsaW5lX2V4Y2VlZGVkXCI7XG4gICAgLy8gTm90Rm91bmQgbWVhbnMgc29tZSByZXF1ZXN0ZWQgZW50aXR5IHdhcyBub3QgZm91bmQuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJOb3RGb3VuZFwiXSA9IFwibm90X2ZvdW5kXCI7XG4gICAgLy8gQmFkUm91dGUgbWVhbnMgdGhhdCB0aGUgcmVxdWVzdGVkIFVSTCBwYXRoIHdhc24ndCByb3V0YWJsZSB0byBhIFR3aXJwXG4gICAgLy8gc2VydmljZSBhbmQgbWV0aG9kLiBUaGlzIGlzIHJldHVybmVkIGJ5IHRoZSBnZW5lcmF0ZWQgc2VydmVyLCBhbmQgdXN1YWxseVxuICAgIC8vIHNob3VsZG4ndCBiZSByZXR1cm5lZCBieSBhcHBsaWNhdGlvbnMuIEluc3RlYWQsIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlXG4gICAgLy8gTm90Rm91bmQgb3IgVW5pbXBsZW1lbnRlZC5cbiAgICBUd2lycEVycm9yQ29kZVtcIkJhZFJvdXRlXCJdID0gXCJiYWRfcm91dGVcIjtcbiAgICAvLyBBbHJlYWR5RXhpc3RzIG1lYW5zIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGFuIGVudGl0eSBmYWlsZWQgYmVjYXVzZSBvbmVcbiAgICAvLyBhbHJlYWR5IGV4aXN0cy5cbiAgICBUd2lycEVycm9yQ29kZVtcIkFscmVhZHlFeGlzdHNcIl0gPSBcImFscmVhZHlfZXhpc3RzXCI7XG4gICAgLy8gUGVybWlzc2lvbkRlbmllZCBpbmRpY2F0ZXMgdGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gZXhlY3V0ZVxuICAgIC8vIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uLiBJdCBtdXN0IG5vdCBiZSB1c2VkIGlmIHRoZSBjYWxsZXIgY2Fubm90IGJlXG4gICAgLy8gaWRlbnRpZmllZCAoVW5hdXRoZW50aWNhdGVkKS5cbiAgICBUd2lycEVycm9yQ29kZVtcIlBlcm1pc3Npb25EZW5pZWRcIl0gPSBcInBlcm1pc3Npb25fZGVuaWVkXCI7XG4gICAgLy8gVW5hdXRoZW50aWNhdGVkIGluZGljYXRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBoYXZlIHZhbGlkIGF1dGhlbnRpY2F0aW9uXG4gICAgLy8gY3JlZGVudGlhbHMgZm9yIHRoZSBvcGVyYXRpb24uXG4gICAgVHdpcnBFcnJvckNvZGVbXCJVbmF1dGhlbnRpY2F0ZWRcIl0gPSBcInVuYXV0aGVudGljYXRlZFwiO1xuICAgIC8vIFJlc291cmNlRXhoYXVzdGVkIGluZGljYXRlcyBzb21lIHJlc291cmNlIGhhcyBiZWVuIGV4aGF1c3RlZCwgcGVyaGFwcyBhXG4gICAgLy8gcGVyLXVzZXIgcXVvdGEsIG9yIHBlcmhhcHMgdGhlIGVudGlyZSBmaWxlIHN5c3RlbSBpcyBvdXQgb2Ygc3BhY2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJSZXNvdXJjZUV4aGF1c3RlZFwiXSA9IFwicmVzb3VyY2VfZXhoYXVzdGVkXCI7XG4gICAgLy8gRmFpbGVkUHJlY29uZGl0aW9uIGluZGljYXRlcyBvcGVyYXRpb24gd2FzIHJlamVjdGVkIGJlY2F1c2UgdGhlIHN5c3RlbSBpc1xuICAgIC8vIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3MgZXhlY3V0aW9uLiBGb3IgZXhhbXBsZSwgZG9pbmdcbiAgICAvLyBhbiBybWRpciBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnkgdGhhdCBpcyBub24tZW1wdHksIG9yIG9uIGEgbm9uLWRpcmVjdG9yeVxuICAgIC8vIG9iamVjdCwgb3Igd2hlbiBoYXZpbmcgY29uZmxpY3RpbmcgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHNhbWUgcmVzb3VyY2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJGYWlsZWRQcmVjb25kaXRpb25cIl0gPSBcImZhaWxlZF9wcmVjb25kaXRpb25cIjtcbiAgICAvLyBBYm9ydGVkIGluZGljYXRlcyB0aGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLCB0eXBpY2FsbHkgZHVlIHRvIGEgY29uY3VycmVuY3lcbiAgICAvLyBpc3N1ZSBsaWtlIHNlcXVlbmNlciBjaGVjayBmYWlsdXJlcywgdHJhbnNhY3Rpb24gYWJvcnRzLCBldGMuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJBYm9ydGVkXCJdID0gXCJhYm9ydGVkXCI7XG4gICAgLy8gT3V0T2ZSYW5nZSBtZWFucyBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBwYXN0IHRoZSB2YWxpZCByYW5nZS4gRm9yIGV4YW1wbGUsXG4gICAgLy8gc2Vla2luZyBvciByZWFkaW5nIHBhc3QgZW5kIG9mIGEgcGFnaW5hdGVkIGNvbGxlY3Rpb24uXG4gICAgLy9cbiAgICAvLyBVbmxpa2UgSW52YWxpZEFyZ3VtZW50LCB0aGlzIGVycm9yIGluZGljYXRlcyBhIHByb2JsZW0gdGhhdCBtYXkgYmUgZml4ZWQgaWZcbiAgICAvLyB0aGUgc3lzdGVtIHN0YXRlIGNoYW5nZXMgKGkuZS4gYWRkaW5nIG1vcmUgaXRlbXMgdG8gdGhlIGNvbGxlY3Rpb24pLlxuICAgIC8vXG4gICAgLy8gVGhlcmUgaXMgYSBmYWlyIGJpdCBvZiBvdmVybGFwIGJldHdlZW4gRmFpbGVkUHJlY29uZGl0aW9uIGFuZCBPdXRPZlJhbmdlLlxuICAgIC8vIFdlIHJlY29tbWVuZCB1c2luZyBPdXRPZlJhbmdlICh0aGUgbW9yZSBzcGVjaWZpYyBlcnJvcikgd2hlbiBpdCBhcHBsaWVzIHNvXG4gICAgLy8gdGhhdCBjYWxsZXJzIHdobyBhcmUgaXRlcmF0aW5nIHRocm91Z2ggYSBzcGFjZSBjYW4gZWFzaWx5IGxvb2sgZm9yIGFuXG4gICAgLy8gT3V0T2ZSYW5nZSBlcnJvciB0byBkZXRlY3Qgd2hlbiB0aGV5IGFyZSBkb25lLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiT3V0T2ZSYW5nZVwiXSA9IFwib3V0X29mX3JhbmdlXCI7XG4gICAgLy8gVW5pbXBsZW1lbnRlZCBpbmRpY2F0ZXMgb3BlcmF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBvciBub3RcbiAgICAvLyBzdXBwb3J0ZWQvZW5hYmxlZCBpbiB0aGlzIHNlcnZpY2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJVbmltcGxlbWVudGVkXCJdID0gXCJ1bmltcGxlbWVudGVkXCI7XG4gICAgLy8gSW50ZXJuYWwgZXJyb3JzLiBXaGVuIHNvbWUgaW52YXJpYW50cyBleHBlY3RlZCBieSB0aGUgdW5kZXJseWluZyBzeXN0ZW1cbiAgICAvLyBoYXZlIGJlZW4gYnJva2VuLiBJbiBvdGhlciB3b3Jkcywgc29tZXRoaW5nIGJhZCBoYXBwZW5lZCBpbiB0aGUgbGlicmFyeSBvclxuICAgIC8vIGJhY2tlbmQgc2VydmljZS4gRG8gbm90IGNvbmZ1c2Ugd2l0aCBIVFRQIEludGVybmFsIFNlcnZlciBFcnJvcjsgYW5cbiAgICAvLyBJbnRlcm5hbCBlcnJvciBjb3VsZCBhbHNvIGhhcHBlbiBvbiB0aGUgY2xpZW50IGNvZGUsIGkuZS4gd2hlbiBwYXJzaW5nIGFcbiAgICAvLyBzZXJ2ZXIgcmVzcG9uc2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJJbnRlcm5hbFwiXSA9IFwiaW50ZXJuYWxcIjtcbiAgICAvLyBVbmF2YWlsYWJsZSBpbmRpY2F0ZXMgdGhlIHNlcnZpY2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlLiBUaGlzIGlzIGEgbW9zdFxuICAgIC8vIGxpa2VseSBhIHRyYW5zaWVudCBjb25kaXRpb24gYW5kIG1heSBiZSBjb3JyZWN0ZWQgYnkgcmV0cnlpbmcgd2l0aCBhXG4gICAgLy8gYmFja29mZi5cbiAgICBUd2lycEVycm9yQ29kZVtcIlVuYXZhaWxhYmxlXCJdID0gXCJ1bmF2YWlsYWJsZVwiO1xuICAgIC8vIERhdGFMb3NzIGluZGljYXRlcyB1bnJlY292ZXJhYmxlIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiRGF0YUxvc3NcIl0gPSBcImRhdGFfbG9zc1wiO1xufSkoVHdpcnBFcnJvckNvZGUgPSBleHBvcnRzLlR3aXJwRXJyb3JDb2RlIHx8IChleHBvcnRzLlR3aXJwRXJyb3JDb2RlID0ge30pKTtcbi8vIFNlcnZlckhUVFBTdGF0dXNGcm9tRXJyb3JDb2RlIG1hcHMgYSBUd2lycCBlcnJvciB0eXBlIGludG8gYSBzaW1pbGFyIEhUVFBcbi8vIHJlc3BvbnNlIHN0YXR1cy4gSXQgaXMgdXNlZCBieSB0aGUgVHdpcnAgc2VydmVyIGhhbmRsZXIgdG8gc2V0IHRoZSBIVFRQXG4vLyByZXNwb25zZSBzdGF0dXMgY29kZS4gUmV0dXJucyAwIGlmIHRoZSBFcnJvckNvZGUgaXMgaW52YWxpZC5cbmZ1bmN0aW9uIGh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlKGNvZGUpIHtcbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5DYW5jZWxlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDg7IC8vIFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuVW5rbm93bjpcbiAgICAgICAgICAgIHJldHVybiA1MDA7IC8vIEludGVybmFsIFNlcnZlciBFcnJvclxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkludmFsaWRBcmd1bWVudDpcbiAgICAgICAgICAgIHJldHVybiA0MDA7IC8vIEJhZFJlcXVlc3RcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5NYWxmb3JtZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDAwOyAvLyBCYWRSZXF1ZXN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuRGVhZGxpbmVFeGNlZWRlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDg7IC8vIFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuTm90Rm91bmQ6XG4gICAgICAgICAgICByZXR1cm4gNDA0OyAvLyBOb3QgRm91bmRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5CYWRSb3V0ZTpcbiAgICAgICAgICAgIHJldHVybiA0MDQ7IC8vIE5vdCBGb3VuZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkFscmVhZHlFeGlzdHM6XG4gICAgICAgICAgICByZXR1cm4gNDA5OyAvLyBDb25mbGljdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlBlcm1pc3Npb25EZW5pZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDAzOyAvLyBGb3JiaWRkZW5cbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5VbmF1dGhlbnRpY2F0ZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDAxOyAvLyBVbmF1dGhvcml6ZWRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5SZXNvdXJjZUV4aGF1c3RlZDpcbiAgICAgICAgICAgIHJldHVybiA0Mjk7IC8vIFRvbyBNYW55IFJlcXVlc3RzXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuRmFpbGVkUHJlY29uZGl0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIDQxMjsgLy8gUHJlY29uZGl0aW9uIEZhaWxlZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkFib3J0ZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDA5OyAvLyBDb25mbGljdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLk91dE9mUmFuZ2U6XG4gICAgICAgICAgICByZXR1cm4gNDAwOyAvLyBCYWQgUmVxdWVzdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlVuaW1wbGVtZW50ZWQ6XG4gICAgICAgICAgICByZXR1cm4gNTAxOyAvLyBOb3QgSW1wbGVtZW50ZWRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5JbnRlcm5hbDpcbiAgICAgICAgICAgIHJldHVybiA1MDA7IC8vIEludGVybmFsIFNlcnZlciBFcnJvclxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlVuYXZhaWxhYmxlOlxuICAgICAgICAgICAgcmV0dXJuIDUwMzsgLy8gU2VydmljZSBVbmF2YWlsYWJsZVxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkRhdGFMb3NzOlxuICAgICAgICAgICAgcmV0dXJuIDUwMDsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gMDsgLy8gSW52YWxpZCFcbiAgICB9XG59XG5leHBvcnRzLmh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlID0gaHR0cFN0YXR1c0Zyb21FcnJvckNvZGU7XG4vLyBJc1ZhbGlkRXJyb3JDb2RlIHJldHVybnMgdHJ1ZSBpZiBpcyBvbmUgb2YgdGhlIHZhbGlkIHByZWRlZmluZWQgY29uc3RhbnRzLlxuZnVuY3Rpb24gaXNWYWxpZEVycm9yQ29kZShjb2RlKSB7XG4gICAgcmV0dXJuIGh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlKGNvZGUpICE9IDA7XG59XG5leHBvcnRzLmlzVmFsaWRFcnJvckNvZGUgPSBpc1ZhbGlkRXJyb3JDb2RlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZVR3aXJwUGF0aCA9IGV4cG9ydHMuZ2V0UmVxdWVzdERhdGEgPSBleHBvcnRzLnZhbGlkYXRlUmVxdWVzdCA9IGV4cG9ydHMuZ2V0Q29udGVudFR5cGUgPSBleHBvcnRzLlR3aXJwQ29udGVudFR5cGUgPSB2b2lkIDA7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbi8qKlxuICogU3VwcG9ydGVkIFR3aXJwIENvbnRlbnQtVHlwZVxuICovXG52YXIgVHdpcnBDb250ZW50VHlwZTtcbihmdW5jdGlvbiAoVHdpcnBDb250ZW50VHlwZSkge1xuICAgIFR3aXJwQ29udGVudFR5cGVbVHdpcnBDb250ZW50VHlwZVtcIlByb3RvYnVmXCJdID0gMF0gPSBcIlByb3RvYnVmXCI7XG4gICAgVHdpcnBDb250ZW50VHlwZVtUd2lycENvbnRlbnRUeXBlW1wiSlNPTlwiXSA9IDFdID0gXCJKU09OXCI7XG4gICAgVHdpcnBDb250ZW50VHlwZVtUd2lycENvbnRlbnRUeXBlW1wiVW5rbm93blwiXSA9IDJdID0gXCJVbmtub3duXCI7XG59KShUd2lycENvbnRlbnRUeXBlID0gZXhwb3J0cy5Ud2lycENvbnRlbnRUeXBlIHx8IChleHBvcnRzLlR3aXJwQ29udGVudFR5cGUgPSB7fSkpO1xuLyoqXG4gKiBHZXQgc3VwcG9ydGVkIGNvbnRlbnQtdHlwZVxuICogQHBhcmFtIG1pbWVUeXBlXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRlbnRUeXBlKG1pbWVUeXBlKSB7XG4gICAgc3dpdGNoIChtaW1lVHlwZSkge1xuICAgICAgICBjYXNlIFwiYXBwbGljYXRpb24vcHJvdG9idWZcIjpcbiAgICAgICAgICAgIHJldHVybiBUd2lycENvbnRlbnRUeXBlLlByb3RvYnVmO1xuICAgICAgICBjYXNlIFwiYXBwbGljYXRpb24vanNvblwiOlxuICAgICAgICAgICAgcmV0dXJuIFR3aXJwQ29udGVudFR5cGUuSlNPTjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBUd2lycENvbnRlbnRUeXBlLlVua25vd247XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb250ZW50VHlwZSA9IGdldENvbnRlbnRUeXBlO1xuLyoqXG4gKiBWYWxpZGF0ZSBhIHR3aXJwIHJlcXVlc3RcbiAqIEBwYXJhbSBjdHhcbiAqIEBwYXJhbSByZXF1ZXN0XG4gKiBAcGFyYW0gcGF0aFByZWZpeFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlcXVlc3QoY3R4LCByZXF1ZXN0LCBwYXRoUHJlZml4KSB7XG4gICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSBcIlBPU1RcIikge1xuICAgICAgICBjb25zdCBtc2cgPSBgdW5zdXBwb3J0ZWQgbWV0aG9kICR7cmVxdWVzdC5tZXRob2R9IChvbmx5IFBPU1QgaXMgYWxsb3dlZClgO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gcGFyc2VUd2lycFBhdGgocmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgaWYgKHBhdGgucGtnU2VydmljZSAhPT1cbiAgICAgICAgKGN0eC5wYWNrYWdlTmFtZSA/IGN0eC5wYWNrYWdlTmFtZSArIFwiLlwiIDogXCJcIikgKyBjdHguc2VydmljZU5hbWUpIHtcbiAgICAgICAgY29uc3QgbXNnID0gYG5vIGhhbmRsZXIgZm9yIHBhdGggJHtyZXF1ZXN0LnVybH1gO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICBpZiAocGF0aC5wcmVmaXggIT09IHBhdGhQcmVmaXgpIHtcbiAgICAgICAgY29uc3QgbXNnID0gYGludmFsaWQgcGF0aCBwcmVmaXggJHtwYXRoLnByZWZpeH0sIGV4cGVjdGVkICR7cGF0aFByZWZpeH0sIG9uIHBhdGggJHtyZXF1ZXN0LnVybH1gO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICBjb25zdCBtaW1lQ29udGVudFR5cGUgPSByZXF1ZXN0LmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gfHwgXCJcIjtcbiAgICBpZiAoY3R4LmNvbnRlbnRUeXBlID09PSBUd2lycENvbnRlbnRUeXBlLlVua25vd24pIHtcbiAgICAgICAgY29uc3QgbXNnID0gYHVuZXhwZWN0ZWQgQ29udGVudC1UeXBlOiAke3JlcXVlc3QuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXX1gO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXRoKSwgeyBtaW1lQ29udGVudFR5cGUsIGNvbnRlbnRUeXBlOiBjdHguY29udGVudFR5cGUgfSk7XG59XG5leHBvcnRzLnZhbGlkYXRlUmVxdWVzdCA9IHZhbGlkYXRlUmVxdWVzdDtcbi8qKlxuICogR2V0IHJlcXVlc3QgZGF0YSBmcm9tIHRoZSBib2R5XG4gKiBAcGFyYW0gcmVxXG4gKi9cbmZ1bmN0aW9uIGdldFJlcXVlc3REYXRhKHJlcSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcVdpdGhSYXdCb2R5ID0gcmVxO1xuICAgICAgICBpZiAocmVxV2l0aFJhd0JvZHkucmF3Qm9keSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXFXaXRoUmF3Qm9keS5yYXdCb2R5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgcmVxLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IGNodW5rcy5wdXNoKGNodW5rKSk7XG4gICAgICAgIHJlcS5vbihcImVuZFwiLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IGVycm9yc18xLlR3aXJwRXJyb3IoZXJyb3JzXzEuVHdpcnBFcnJvckNvZGUuRGVhZGxpbmVFeGNlZWRlZCwgXCJmYWlsZWQgdG8gcmVhZCByZXF1ZXN0OiBkZWFkbGluZSBleGNlZWRlZFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IGVycm9yc18xLlR3aXJwRXJyb3IoZXJyb3JzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBlcnIubWVzc2FnZSkud2l0aENhdXNlKGVycikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVxLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBlcnJvcnNfMS5Ud2lycEVycm9yKGVycm9yc18xLlR3aXJwRXJyb3JDb2RlLkNhbmNlbGVkLCBcImZhaWxlZCB0byByZWFkIHJlcXVlc3Q6IGNvbnRleHQgY2FuY2VsZWRcIikpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0UmVxdWVzdERhdGEgPSBnZXRSZXF1ZXN0RGF0YTtcbi8qKlxuICogUGFyc2VzIHR3aXJwIHVybCBwYXRoXG4gKiBAcGFyYW0gcGF0aFxuICovXG5mdW5jdGlvbiBwYXJzZVR3aXJwUGF0aChwYXRoKSB7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBpZiAocGFydHMubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGtnU2VydmljZTogXCJcIixcbiAgICAgICAgICAgIG1ldGhvZDogXCJcIixcbiAgICAgICAgICAgIHByZWZpeDogXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSxcbiAgICAgICAgcGtnU2VydmljZTogcGFydHNbcGFydHMubGVuZ3RoIC0gMl0sXG4gICAgICAgIHByZWZpeDogcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMikuam9pbihcIi9cIiksXG4gICAgfTtcbn1cbmV4cG9ydHMucGFyc2VUd2lycFBhdGggPSBwYXJzZVR3aXJwUGF0aDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud3JpdGVFcnJvciA9IGV4cG9ydHMuVHdpcnBTZXJ2ZXIgPSB2b2lkIDA7XG5jb25zdCBob29rc18xID0gcmVxdWlyZShcIi4vaG9va3NcIik7XG5jb25zdCByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG4vKipcbiAqIFJ1bnRpbWUgc2VydmVyIGltcGxlbWVudGF0aW9uIG9mIGEgVHdpcnBTZXJ2ZXJcbiAqL1xuY2xhc3MgVHdpcnBTZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5wYXRoUHJlZml4ID0gXCIvdHdpcnBcIjtcbiAgICAgICAgdGhpcy5ob29rcyA9IFtdO1xuICAgICAgICB0aGlzLmludGVyY2VwdG9ycyA9IFtdO1xuICAgICAgICB0aGlzLnBhY2thZ2VOYW1lID0gb3B0aW9ucy5wYWNrYWdlTmFtZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlTmFtZSA9IG9wdGlvbnMuc2VydmljZU5hbWU7XG4gICAgICAgIHRoaXMubWV0aG9kTGlzdCA9IG9wdGlvbnMubWV0aG9kTGlzdDtcbiAgICAgICAgdGhpcy5tYXRjaFJvdXRlID0gb3B0aW9ucy5tYXRjaFJvdXRlO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBvcHRpb25zLnNlcnZpY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHByZWZpeCBmb3IgdGhpcyBzZXJ2ZXJcbiAgICAgKi9cbiAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoUHJlZml4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgaHR0cCBoYW5kbGVyIGZvciB0d2lycCBjb21wbGFpbnQgZW5kcG9pbnRzXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBodHRwSGFuZGxlcihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAocmVxLCByZXNwKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXR1cCBwcmVmaXhcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnByZWZpeCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMud2l0aFByZWZpeChvcHRpb25zLnByZWZpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faHR0cEhhbmRsZXIocmVxLCByZXNwKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBpbnRlcmNlcHRvcnMgb3IgaG9va3MgdG8gdGhlIHJlcXVlc3Qgc3RhY2tcbiAgICAgKiBAcGFyYW0gbWlkZGxld2FyZXNcbiAgICAgKi9cbiAgICB1c2UoLi4ubWlkZGxld2FyZXMpIHtcbiAgICAgICAgbWlkZGxld2FyZXMuZm9yRWFjaCgobWlkZGxld2FyZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGhvb2tzXzEuaXNIb29rKG1pZGRsZXdhcmUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy5wdXNoKG1pZGRsZXdhcmUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbnRlcmNlcHRvcnMucHVzaChtaWRkbGV3YXJlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcHJlZml4IHRvIHRoZSBzZXJ2aWNlIHVybCBwYXRoXG4gICAgICogQHBhcmFtIHByZWZpeFxuICAgICAqL1xuICAgIHdpdGhQcmVmaXgocHJlZml4KSB7XG4gICAgICAgIGlmIChwcmVmaXggPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGhQcmVmaXggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXRoUHJlZml4ID0gcHJlZml4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByZWdleCBtYXRjaGluZyBwYXRoIGZvciB0aGlzIHR3aXJwIHNlcnZlclxuICAgICAqL1xuICAgIG1hdGNoaW5nUGF0aCgpIHtcbiAgICAgICAgY29uc3QgYmFzZVJlZ2V4ID0gdGhpcy5iYXNlVVJJKCkucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAke2Jhc2VSZWdleH1cXC8oJHt0aGlzLm1ldGhvZExpc3Quam9pbihcInxcIil9KWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiYXNlIFVSSSBmb3IgdGhpcyB0d2lycCBzZXJ2ZXJcbiAgICAgKi9cbiAgICBiYXNlVVJJKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wYXRoUHJlZml4fS8ke3RoaXMucGFja2FnZU5hbWUgPyB0aGlzLnBhY2thZ2VOYW1lICsgXCIuXCIgOiBcIlwifSR7dGhpcy5zZXJ2aWNlTmFtZX1gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0d2lycCBjb250ZXh0XG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSByZXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNyZWF0ZUNvbnRleHQocmVxLCByZXMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lOiB0aGlzLnBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgc2VydmljZU5hbWU6IHRoaXMuc2VydmljZU5hbWUsXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBcIlwiLFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHJlcXVlc3RfMS5nZXRDb250ZW50VHlwZShyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSksXG4gICAgICAgICAgICByZXE6IHJlcSxcbiAgICAgICAgICAgIHJlczogcmVzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUd3JpcCBzZXJ2ZXIgaHR0cCBoYW5kbGVyIGltcGxlbWVudGF0aW9uXG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSByZXNwXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfaHR0cEhhbmRsZXIocmVxLCByZXNwKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLmNyZWF0ZUNvbnRleHQocmVxLCByZXNwKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5pbnZva2VIb29rKFwicmVxdWVzdFJlY2VpdmVkXCIsIGN0eCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBtZXRob2QsIG1pbWVDb250ZW50VHlwZSB9ID0gcmVxdWVzdF8xLnZhbGlkYXRlUmVxdWVzdChjdHgsIHJlcSwgdGhpcy5wYXRoUHJlZml4IHx8IFwiXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLm1hdGNoUm91dGUobWV0aG9kLCB7XG4gICAgICAgICAgICAgICAgICAgIG9uTWF0Y2g6IChjdHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUhvb2soXCJyZXF1ZXN0Um91dGVkXCIsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uTm90Rm91bmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBubyBoYW5kbGVyIGZvciBwYXRoICR7cmVxLnVybH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkJhZFJvdXRlRXJyb3IobXNnLCByZXEubWV0aG9kIHx8IFwiXCIsIHJlcS51cmwgfHwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHlpZWxkIHJlcXVlc3RfMS5nZXRSZXF1ZXN0RGF0YShyZXEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgaGFuZGxlcihjdHgsIHRoaXMuc2VydmljZSwgYm9keSwgdGhpcy5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgICAgIHlpZWxkIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVzcG9uc2VQcmVwYXJlZFwiLCBjdHgpLFxuICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRpbGwgbmV4dCByZWxlYXNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlSG9vayhcInJlcXVlc3RQcmVwYXJlZFwiLCBjdHgpLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIHJlc3Auc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgICAgICAgICByZXNwLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBtaW1lQ29udGVudFR5cGUpO1xuICAgICAgICAgICAgICAgIHJlc3AuZW5kKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5pbnZva2VIb29rKFwiZXJyb3JcIiwgY3R4LCBtdXN0QmVUd2lycEVycm9yKGUpKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3AuaGVhZGVyc1NlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVFcnJvcihyZXNwLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlSG9vayhcInJlc3BvbnNlU2VudFwiLCBjdHgpLFxuICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRpbGwgbmV4dCByZWxlYXNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlSG9vayhcInJlcXVlc3RTZW50XCIsIGN0eCksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZva2UgYSBob29rXG4gICAgICogQHBhcmFtIGhvb2tOYW1lXG4gICAgICogQHBhcmFtIGN0eFxuICAgICAqIEBwYXJhbSBlcnJcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgaW52b2tlSG9vayhob29rTmFtZSwgY3R4LCBlcnIpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhvb2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoYWluZWRIb29rcyA9IGhvb2tzXzEuY2hhaW5Ib29rcyguLi50aGlzLmhvb2tzKTtcbiAgICAgICAgICAgIGNvbnN0IGhvb2sgPSBjaGFpbmVkSG9va3MgPT09IG51bGwgfHwgY2hhaW5lZEhvb2tzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFpbmVkSG9va3NbaG9va05hbWVdO1xuICAgICAgICAgICAgaWYgKGhvb2spIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBob29rKGN0eCwgZXJyIHx8IG5ldyBlcnJvcnNfMS5JbnRlcm5hbFNlcnZlckVycm9yKFwiaW50ZXJuYWwgc2VydmVyIGVycm9yXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5Ud2lycFNlcnZlciA9IFR3aXJwU2VydmVyO1xuLyoqXG4gKiBXcml0ZSBodHRwIGVycm9yIHJlc3BvbnNlXG4gKiBAcGFyYW0gcmVzXG4gKiBAcGFyYW0gZXJyb3JcbiAqL1xuZnVuY3Rpb24gd3JpdGVFcnJvcihyZXMsIGVycm9yKSB7XG4gICAgY29uc3QgdHdpcnBFcnJvciA9IG11c3RCZVR3aXJwRXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgIHJlcy5zdGF0dXNDb2RlID0gZXJyb3JzXzEuaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUodHdpcnBFcnJvci5jb2RlKTtcbiAgICByZXMuZW5kKHR3aXJwRXJyb3IudG9KU09OKCkpO1xufVxuZXhwb3J0cy53cml0ZUVycm9yID0gd3JpdGVFcnJvcjtcbi8qKlxuICogTWFrZSBzdXJlIHRoYXQgdGhlIGVycm9yIHBhc3NlZCBpcyBhIFR3aXJwRXJyb3JcbiAqIG90aGVyd2lzZSBpdCB3aWxsIHdyYXAgaXQgaW50byBhbiBJbnRlcm5hbEVycm9yXG4gKiBAcGFyYW0gZXJyXG4gKi9cbmZ1bmN0aW9uIG11c3RCZVR3aXJwRXJyb3IoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIGVycm9yc18xLlR3aXJwRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBlcnJvcnNfMS5JbnRlcm5hbFNlcnZlckVycm9yV2l0aChlcnIpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jaGFpbkludGVyY2VwdG9ycyA9IHZvaWQgMDtcbi8vIGNoYWlucyBtdWx0aXBsZSBJbnRlcmNlcHRvcnMgaW50byBhIHNpbmdsZSBJbnRlcmNlcHRvci5cbi8vIFRoZSBmaXJzdCBpbnRlcmNlcHRvciB3cmFwcyB0aGUgc2Vjb25kIG9uZSwgYW5kIHNvIG9uLlxuLy8gUmV0dXJucyBudWxsIGlmIGludGVyY2VwdG9ycyBpcyBlbXB0eS5cbmZ1bmN0aW9uIGNoYWluSW50ZXJjZXB0b3JzKC4uLmludGVyY2VwdG9ycykge1xuICAgIGlmIChpbnRlcmNlcHRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGludGVyY2VwdG9yc1swXTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBpbnRlcmNlcHRvcnNbMF07XG4gICAgcmV0dXJuIChjdHgsIHJlcXVlc3QsIGhhbmRsZXIpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IG5leHQgPSBoYW5kbGVyO1xuICAgICAgICBmb3IgKGxldCBpID0gaW50ZXJjZXB0b3JzLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgIG5leHQgPSAoKG5leHQpID0+IChjdHgsIHR5cGVkUmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcmNlcHRvcnNbaV0oY3R4LCB0eXBlZFJlcXVlc3QsIG5leHQpO1xuICAgICAgICAgICAgfSkobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0KGN0eCwgcmVxdWVzdCwgbmV4dCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmNoYWluSW50ZXJjZXB0b3JzID0gY2hhaW5JbnRlcmNlcHRvcnM7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiBfcHJvY2VzcyAodiwgbW9kKSB7XG4gIHZhciBpXG4gIHZhciByXG5cbiAgaWYgKHR5cGVvZiBtb2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICByID0gbW9kKHYpXG4gICAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdiA9IHJcbiAgICB9XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtb2QpKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG1vZC5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IG1vZFtpXSh2KVxuICAgICAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2ID0gclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2XG59XG5cbmZ1bmN0aW9uIHBhcnNlS2V5IChrZXksIHZhbCkge1xuICAvLyBkZXRlY3QgbmVnYXRpdmUgaW5kZXggbm90YXRpb25cbiAgaWYgKGtleVswXSA9PT0gJy0nICYmIEFycmF5LmlzQXJyYXkodmFsKSAmJiAvXi1cXGQrJC8udGVzdChrZXkpKSB7XG4gICAgcmV0dXJuIHZhbC5sZW5ndGggKyBwYXJzZUludChrZXksIDEwKVxuICB9XG4gIHJldHVybiBrZXlcbn1cblxuZnVuY3Rpb24gaXNJbmRleCAoaykge1xuICByZXR1cm4gL15cXGQrJC8udGVzdChrKVxufVxuXG5mdW5jdGlvbiBpc09iamVjdCAodmFsKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVuY3Rpb24gaXNBcnJheU9yT2JqZWN0ICh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdCh2YWwpID09PSB2YWxcbn1cblxuZnVuY3Rpb24gaXNFbXB0eU9iamVjdCAodmFsKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMFxufVxuXG52YXIgYmxhY2tsaXN0ID0gWydfX3Byb3RvX18nLCAncHJvdG90eXBlJywgJ2NvbnN0cnVjdG9yJ11cbnZhciBibGFja2xpc3RGaWx0ZXIgPSBmdW5jdGlvbiAocGFydCkgeyByZXR1cm4gYmxhY2tsaXN0LmluZGV4T2YocGFydCkgPT09IC0xIH1cblxuZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoLCBzZXApIHtcbiAgaWYgKHBhdGguaW5kZXhPZignWycpID49IDApIHtcbiAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXFsvZywgc2VwKS5yZXBsYWNlKC9dL2csICcnKVxuICB9XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdChzZXApXG5cbiAgdmFyIGNoZWNrID0gcGFydHMuZmlsdGVyKGJsYWNrbGlzdEZpbHRlcilcblxuICBpZiAoY2hlY2subGVuZ3RoICE9PSBwYXJ0cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBFcnJvcignUmVmdXNpbmcgdG8gdXBkYXRlIGJsYWNrbGlzdGVkIHByb3BlcnR5ICcgKyBwYXRoKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzXG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcblxuZnVuY3Rpb24gRG90T2JqZWN0IChzZXBhcmF0b3IsIG92ZXJyaWRlLCB1c2VBcnJheSwgdXNlQnJhY2tldHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERvdE9iamVjdCkpIHtcbiAgICByZXR1cm4gbmV3IERvdE9iamVjdChzZXBhcmF0b3IsIG92ZXJyaWRlLCB1c2VBcnJheSwgdXNlQnJhY2tldHMpXG4gIH1cblxuICBpZiAodHlwZW9mIG92ZXJyaWRlID09PSAndW5kZWZpbmVkJykgb3ZlcnJpZGUgPSBmYWxzZVxuICBpZiAodHlwZW9mIHVzZUFycmF5ID09PSAndW5kZWZpbmVkJykgdXNlQXJyYXkgPSB0cnVlXG4gIGlmICh0eXBlb2YgdXNlQnJhY2tldHMgPT09ICd1bmRlZmluZWQnKSB1c2VCcmFja2V0cyA9IHRydWVcbiAgdGhpcy5zZXBhcmF0b3IgPSBzZXBhcmF0b3IgfHwgJy4nXG4gIHRoaXMub3ZlcnJpZGUgPSBvdmVycmlkZVxuICB0aGlzLnVzZUFycmF5ID0gdXNlQXJyYXlcbiAgdGhpcy51c2VCcmFja2V0cyA9IHVzZUJyYWNrZXRzXG4gIHRoaXMua2VlcEFycmF5ID0gZmFsc2VcblxuICAvLyBjb250YWlucyB0b3VjaGVkIGFycmF5c1xuICB0aGlzLmNsZWFudXAgPSBbXVxufVxuXG52YXIgZG90RGVmYXVsdCA9IG5ldyBEb3RPYmplY3QoJy4nLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSlcbmZ1bmN0aW9uIHdyYXAgKG1ldGhvZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkb3REZWZhdWx0W21ldGhvZF0uYXBwbHkoZG90RGVmYXVsdCwgYXJndW1lbnRzKVxuICB9XG59XG5cbkRvdE9iamVjdC5wcm90b3R5cGUuX2ZpbGwgPSBmdW5jdGlvbiAoYSwgb2JqLCB2LCBtb2QpIHtcbiAgdmFyIGsgPSBhLnNoaWZ0KClcblxuICBpZiAoYS5sZW5ndGggPiAwKSB7XG4gICAgb2JqW2tdID0gb2JqW2tdIHx8ICh0aGlzLnVzZUFycmF5ICYmIGlzSW5kZXgoYVswXSkgPyBbXSA6IHt9KVxuXG4gICAgaWYgKCFpc0FycmF5T3JPYmplY3Qob2JqW2tdKSkge1xuICAgICAgaWYgKHRoaXMub3ZlcnJpZGUpIHtcbiAgICAgICAgb2JqW2tdID0ge31cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghKGlzQXJyYXlPck9iamVjdCh2KSAmJiBpc0VtcHR5T2JqZWN0KHYpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdUcnlpbmcgdG8gcmVkZWZpbmUgYCcgKyBrICsgJ2Agd2hpY2ggaXMgYSAnICsgdHlwZW9mIG9ialtrXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ZpbGwoYSwgb2JqW2tdLCB2LCBtb2QpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCF0aGlzLm92ZXJyaWRlICYmIGlzQXJyYXlPck9iamVjdChvYmpba10pICYmICFpc0VtcHR5T2JqZWN0KG9ialtrXSkpIHtcbiAgICAgIGlmICghKGlzQXJyYXlPck9iamVjdCh2KSAmJiBpc0VtcHR5T2JqZWN0KHYpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gcmVkZWZpbmUgbm9uLWVtcHR5IG9ialsnXCIgKyBrICsgXCInXVwiKVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBvYmpba10gPSBfcHJvY2Vzcyh2LCBtb2QpXG4gIH1cbn1cblxuLyoqXG4gKlxuICogQ29udmVydHMgYW4gb2JqZWN0IHdpdGggZG90dGVkLWtleS92YWx1ZSBwYWlycyB0byBpdCdzIGV4cGFuZGVkIHZlcnNpb25cbiAqXG4gKiBPcHRpb25hbGx5IHRyYW5zZm9ybWVkIGJ5IGEgc2V0IG9mIG1vZGlmaWVycy5cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIHZhciByb3cgPSB7XG4gKiAgICAgJ25yJzogMjAwLFxuICogICAgICdkb2MubmFtZSc6ICcgIE15IERvY3VtZW50ICAnXG4gKiAgIH1cbiAqXG4gKiAgIHZhciBtb2RzID0ge1xuICogICAgICdkb2MubmFtZSc6IFtfcy50cmltLCBfcy51bmRlcnNjb3JlZF1cbiAqICAgfVxuICpcbiAqICAgZG90Lm9iamVjdChyb3csIG1vZHMpXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtPYmplY3R9IG1vZHNcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5vYmplY3QgPSBmdW5jdGlvbiAob2JqLCBtb2RzKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIHZhciBtb2QgPSBtb2RzID09PSB1bmRlZmluZWQgPyBudWxsIDogbW9kc1trXVxuICAgIC8vIG5vcm1hbGl6ZSBhcnJheSBub3RhdGlvbi5cbiAgICB2YXIgb2sgPSBwYXJzZVBhdGgoaywgc2VsZi5zZXBhcmF0b3IpLmpvaW4oc2VsZi5zZXBhcmF0b3IpXG5cbiAgICBpZiAob2suaW5kZXhPZihzZWxmLnNlcGFyYXRvcikgIT09IC0xKSB7XG4gICAgICBzZWxmLl9maWxsKG9rLnNwbGl0KHNlbGYuc2VwYXJhdG9yKSwgb2JqLCBvYmpba10sIG1vZClcbiAgICAgIGRlbGV0ZSBvYmpba11cbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gX3Byb2Nlc3Mob2JqW2tdLCBtb2QpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBvYmpcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBkb3R0ZWQgcGF0aFxuICogQHBhcmFtIHtTdHJpbmd9IHYgdmFsdWUgdG8gYmUgc2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIG9iamVjdCB0byBiZSBtb2RpZmllZFxuICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gbW9kIG9wdGlvbmFsIG1vZGlmaWVyXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuc3RyID0gZnVuY3Rpb24gKHBhdGgsIHYsIG9iaiwgbW9kKSB7XG4gIHZhciBvayA9IHBhcnNlUGF0aChwYXRoLCB0aGlzLnNlcGFyYXRvcikuam9pbih0aGlzLnNlcGFyYXRvcilcblxuICBpZiAocGF0aC5pbmRleE9mKHRoaXMuc2VwYXJhdG9yKSAhPT0gLTEpIHtcbiAgICB0aGlzLl9maWxsKG9rLnNwbGl0KHRoaXMuc2VwYXJhdG9yKSwgb2JqLCB2LCBtb2QpXG4gIH0gZWxzZSB7XG4gICAgb2JqW3BhdGhdID0gX3Byb2Nlc3ModiwgbW9kKVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqXG4gKiBQaWNrIGEgdmFsdWUgZnJvbSBhbiBvYmplY3QgdXNpbmcgZG90IG5vdGF0aW9uLlxuICpcbiAqIE9wdGlvbmFsbHkgcmVtb3ZlIHRoZSB2YWx1ZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHJlbW92ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnBpY2sgPSBmdW5jdGlvbiAocGF0aCwgb2JqLCByZW1vdmUsIHJlaW5kZXhBcnJheSkge1xuICB2YXIgaVxuICB2YXIga2V5c1xuICB2YXIgdmFsXG4gIHZhciBrZXlcbiAgdmFyIGNwXG5cbiAga2V5cyA9IHBhcnNlUGF0aChwYXRoLCB0aGlzLnNlcGFyYXRvcilcbiAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBwYXJzZUtleShrZXlzW2ldLCBvYmopXG4gICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoaSA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICB2YWwgPSBvYmpba2V5XVxuICAgICAgICAgIGlmIChyZWluZGV4QXJyYXkgJiYgQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICBvYmouc3BsaWNlKGtleSwgMSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIG9ialtrZXldXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIGNwID0ga2V5cy5zbGljZSgwLCAtMSkuam9pbignLicpXG4gICAgICAgICAgICBpZiAodGhpcy5jbGVhbnVwLmluZGV4T2YoY3ApID09PSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLmNsZWFudXAucHVzaChjcClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvYmpba2V5XVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmogPSBvYmpba2V5XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG4gIGlmIChyZW1vdmUgJiYgQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgb2JqID0gb2JqLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4gIT09IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIG9ialxufVxuLyoqXG4gKlxuICogRGVsZXRlIHZhbHVlIGZyb20gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7YW55fSBUaGUgcmVtb3ZlZCB2YWx1ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChwYXRoLCBvYmopIHtcbiAgcmV0dXJuIHRoaXMucmVtb3ZlKHBhdGgsIG9iaiwgdHJ1ZSlcbn1cblxuLyoqXG4gKlxuICogUmVtb3ZlIHZhbHVlIGZyb20gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbi5cbiAqXG4gKiBXaWxsIHJlbW92ZSBtdWx0aXBsZSBpdGVtcyBpZiBwYXRoIGlzIGFuIGFycmF5LlxuICogSW4gdGhpcyBjYXNlIGFycmF5IGluZGV4ZXMgd2lsbCBiZSByZXRhaW5lZCB1bnRpbCBhbGxcbiAqIHJlbW92YWxzIGhhdmUgYmVlbiBwcm9jZXNzZWQuXG4gKlxuICogVXNlIGRvdC5kZWxldGUoKSB0byBhdXRvbWF0aWNhbGx5ICByZS1pbmRleCBhcnJheXMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8U3RyaW5nPn0gcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtCb29sZWFufSByZWluZGV4QXJyYXlcbiAqIEByZXR1cm4ge2FueX0gVGhlIHJlbW92ZWQgdmFsdWVcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAocGF0aCwgb2JqLCByZWluZGV4QXJyYXkpIHtcbiAgdmFyIGlcblxuICB0aGlzLmNsZWFudXAgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBpY2socGF0aFtpXSwgb2JqLCB0cnVlLCByZWluZGV4QXJyYXkpXG4gICAgfVxuICAgIGlmICghcmVpbmRleEFycmF5KSB7XG4gICAgICB0aGlzLl9jbGVhbnVwKG9iailcbiAgICB9XG4gICAgcmV0dXJuIG9ialxuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLnBpY2socGF0aCwgb2JqLCB0cnVlLCByZWluZGV4QXJyYXkpXG4gIH1cbn1cblxuRG90T2JqZWN0LnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJldFxuICB2YXIgaVxuICB2YXIga2V5c1xuICB2YXIgcm9vdFxuICBpZiAodGhpcy5jbGVhbnVwLmxlbmd0aCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNsZWFudXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleXMgPSB0aGlzLmNsZWFudXBbaV0uc3BsaXQoJy4nKVxuICAgICAgcm9vdCA9IGtleXMuc3BsaWNlKDAsIC0xKS5qb2luKCcuJylcbiAgICAgIHJldCA9IHJvb3QgPyB0aGlzLnBpY2socm9vdCwgb2JqKSA6IG9ialxuICAgICAgcmV0ID0gcmV0W2tleXNbMF1dLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkXG4gICAgICB9KVxuICAgICAgdGhpcy5zZXQodGhpcy5jbGVhbnVwW2ldLCByZXQsIG9iailcbiAgICB9XG4gICAgdGhpcy5jbGVhbnVwID0gW11cbiAgfVxufVxuXG4vKipcbiAqIEFsaWFzIG1ldGhvZCAgZm9yIGBkb3QucmVtb3ZlYFxuICpcbiAqIE5vdGU6IHRoaXMgaXMgbm90IGFuIGFsaWFzIGZvciBkb3QuZGVsZXRlKClcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxTdHJpbmc+fSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHJlaW5kZXhBcnJheVxuICogQHJldHVybiB7YW55fSBUaGUgcmVtb3ZlZCB2YWx1ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLmRlbCA9IERvdE9iamVjdC5wcm90b3R5cGUucmVtb3ZlXG5cbi8qKlxuICpcbiAqIE1vdmUgYSBwcm9wZXJ0eSBmcm9tIG9uZSBwbGFjZSB0byB0aGUgb3RoZXIuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBwYXRoIGRvZXMgbm90IGV4aXN0ICh1bmRlZmluZWQpXG4gKiB0aGUgdGFyZ2V0IHByb3BlcnR5IHdpbGwgbm90IGJlIHNldC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBtb2RzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1lcmdlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUubW92ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHRhcmdldCwgb2JqLCBtb2RzLCBtZXJnZSkge1xuICBpZiAodHlwZW9mIG1vZHMgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShtb2RzKSkge1xuICAgIHRoaXMuc2V0KHRhcmdldCwgX3Byb2Nlc3ModGhpcy5waWNrKHNvdXJjZSwgb2JqLCB0cnVlKSwgbW9kcyksIG9iaiwgbWVyZ2UpXG4gIH0gZWxzZSB7XG4gICAgbWVyZ2UgPSBtb2RzXG4gICAgdGhpcy5zZXQodGFyZ2V0LCB0aGlzLnBpY2soc291cmNlLCBvYmosIHRydWUpLCBvYmosIG1lcmdlKVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqXG4gKiBUcmFuc2ZlciBhIHByb3BlcnR5IGZyb20gb25lIG9iamVjdCB0byBhbm90aGVyIG9iamVjdC5cbiAqXG4gKiBJZiB0aGUgc291cmNlIHBhdGggZG9lcyBub3QgZXhpc3QgKHVuZGVmaW5lZClcbiAqIHRoZSBwcm9wZXJ0eSBvbiB0aGUgb3RoZXIgb2JqZWN0IHdpbGwgbm90IGJlIHNldC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMVxuICogQHBhcmFtIHtPYmplY3R9IG9iajJcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IG1vZHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS50cmFuc2ZlciA9IGZ1bmN0aW9uIChcbiAgc291cmNlLFxuICB0YXJnZXQsXG4gIG9iajEsXG4gIG9iajIsXG4gIG1vZHMsXG4gIG1lcmdlXG4pIHtcbiAgaWYgKHR5cGVvZiBtb2RzID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkobW9kcykpIHtcbiAgICB0aGlzLnNldChcbiAgICAgIHRhcmdldCxcbiAgICAgIF9wcm9jZXNzKHRoaXMucGljayhzb3VyY2UsIG9iajEsIHRydWUpLCBtb2RzKSxcbiAgICAgIG9iajIsXG4gICAgICBtZXJnZVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICBtZXJnZSA9IG1vZHNcbiAgICB0aGlzLnNldCh0YXJnZXQsIHRoaXMucGljayhzb3VyY2UsIG9iajEsIHRydWUpLCBvYmoyLCBtZXJnZSlcbiAgfVxuXG4gIHJldHVybiBvYmoyXG59XG5cbi8qKlxuICpcbiAqIENvcHkgYSBwcm9wZXJ0eSBmcm9tIG9uZSBvYmplY3QgdG8gYW5vdGhlciBvYmplY3QuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBwYXRoIGRvZXMgbm90IGV4aXN0ICh1bmRlZmluZWQpXG4gKiB0aGUgcHJvcGVydHkgb24gdGhlIG90aGVyIG9iamVjdCB3aWxsIG5vdCBiZSBzZXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZVxuICogQHBhcmFtIHtTdHJpbmd9IHRhcmdldFxuICogQHBhcmFtIHtPYmplY3R9IG9iajFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBtb2RzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1lcmdlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChzb3VyY2UsIHRhcmdldCwgb2JqMSwgb2JqMiwgbW9kcywgbWVyZ2UpIHtcbiAgaWYgKHR5cGVvZiBtb2RzID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkobW9kcykpIHtcbiAgICB0aGlzLnNldChcbiAgICAgIHRhcmdldCxcbiAgICAgIF9wcm9jZXNzKFxuICAgICAgICAvLyBjbG9uZSB3aGF0IGlzIHBpY2tlZFxuICAgICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucGljayhzb3VyY2UsIG9iajEsIGZhbHNlKSkpLFxuICAgICAgICBtb2RzXG4gICAgICApLFxuICAgICAgb2JqMixcbiAgICAgIG1lcmdlXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIG1lcmdlID0gbW9kc1xuICAgIHRoaXMuc2V0KHRhcmdldCwgdGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgZmFsc2UpLCBvYmoyLCBtZXJnZSlcbiAgfVxuXG4gIHJldHVybiBvYmoyXG59XG5cbi8qKlxuICpcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7YW55fSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGF0aCwgdmFsLCBvYmosIG1lcmdlKSB7XG4gIHZhciBpXG4gIHZhciBrXG4gIHZhciBrZXlzXG4gIHZhciBrZXlcblxuICAvLyBEbyBub3Qgb3BlcmF0ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gb2JqXG4gIH1cbiAga2V5cyA9IHBhcnNlUGF0aChwYXRoLCB0aGlzLnNlcGFyYXRvcilcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV1cbiAgICBpZiAoaSA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICBpZiAobWVyZ2UgJiYgaXNPYmplY3QodmFsKSAmJiBpc09iamVjdChvYmpba2V5XSkpIHtcbiAgICAgICAgZm9yIChrIGluIHZhbCkge1xuICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbCwgaykpIHtcbiAgICAgICAgICAgIG9ialtrZXldW2tdID0gdmFsW2tdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG1lcmdlICYmIEFycmF5LmlzQXJyYXkob2JqW2tleV0pICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbC5sZW5ndGg7IGorKykge1xuICAgICAgICAgIG9ialtrZXlzW2ldXS5wdXNoKHZhbFtqXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gZm9yY2UgdGhlIHZhbHVlIHRvIGJlIGFuIG9iamVjdFxuICAgICAgIWhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpIHx8XG4gICAgICAoIWlzT2JqZWN0KG9ialtrZXldKSAmJiAhQXJyYXkuaXNBcnJheShvYmpba2V5XSkpXG4gICAgKSB7XG4gICAgICAvLyBpbml0aWFsaXplIGFzIGFycmF5IGlmIG5leHQga2V5IGlzIG51bWVyaWNcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KGtleXNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IFtdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IHt9XG4gICAgICB9XG4gICAgfVxuICAgIG9iaiA9IG9ialtrZXldXG4gIH1cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqXG4gKiBUcmFuc2Zvcm0gYW4gb2JqZWN0XG4gKlxuICogVXNhZ2U6XG4gKlxuICogICB2YXIgb2JqID0ge1xuICogICAgIFwiaWRcIjogMSxcbiAqICAgIFwic29tZVwiOiB7XG4gKiAgICAgIFwidGhpbmdcIjogXCJlbHNlXCJcbiAqICAgIH1cbiAqICAgfVxuICpcbiAqICAgdmFyIHRyYW5zZm9ybSA9IHtcbiAqICAgICBcImlkXCI6IFwibnJcIixcbiAqICAgIFwic29tZS50aGluZ1wiOiBcIm5hbWVcIlxuICogICB9XG4gKlxuICogICB2YXIgdGd0ID0gZG90LnRyYW5zZm9ybSh0cmFuc2Zvcm0sIG9iailcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjaXBlIFRyYW5zZm9ybSByZWNpcGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBtb2RzIG1vZGlmaWVycyBmb3IgdGhlIHRhcmdldFxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChyZWNpcGUsIG9iaiwgdGd0KSB7XG4gIG9iaiA9IG9iaiB8fCB7fVxuICB0Z3QgPSB0Z3QgfHwge31cbiAgT2JqZWN0LmtleXMocmVjaXBlKS5mb3JFYWNoKFxuICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHRoaXMuc2V0KHJlY2lwZVtrZXldLCB0aGlzLnBpY2soa2V5LCBvYmopLCB0Z3QpXG4gICAgfS5iaW5kKHRoaXMpXG4gIClcbiAgcmV0dXJuIHRndFxufVxuXG4vKipcbiAqXG4gKiBDb252ZXJ0IG9iamVjdCB0byBkb3R0ZWQta2V5L3ZhbHVlIHBhaXJcbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIHZhciB0Z3QgPSBkb3QuZG90KG9iailcbiAqXG4gKiAgIG9yXG4gKlxuICogICB2YXIgdGd0ID0ge31cbiAqICAgZG90LmRvdChvYmosIHRndClcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSB0Z3QgdGFyZ2V0IG9iamVjdFxuICogQHBhcmFtIHtBcnJheX0gcGF0aCBwYXRoIGFycmF5IChpbnRlcm5hbClcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5kb3QgPSBmdW5jdGlvbiAob2JqLCB0Z3QsIHBhdGgpIHtcbiAgdGd0ID0gdGd0IHx8IHt9XG4gIHBhdGggPSBwYXRoIHx8IFtdXG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShvYmopXG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKFxuICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBpbmRleCA9IGlzQXJyYXkgJiYgdGhpcy51c2VCcmFja2V0cyA/ICdbJyArIGtleSArICddJyA6IGtleVxuICAgICAgaWYgKFxuICAgICAgICBpc0FycmF5T3JPYmplY3Qob2JqW2tleV0pICYmXG4gICAgICAgICgoaXNPYmplY3Qob2JqW2tleV0pICYmICFpc0VtcHR5T2JqZWN0KG9ialtrZXldKSkgfHxcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShvYmpba2V5XSkgJiYgIXRoaXMua2VlcEFycmF5ICYmIG9ialtrZXldLmxlbmd0aCAhPT0gMCkpXG4gICAgICApIHtcbiAgICAgICAgaWYgKGlzQXJyYXkgJiYgdGhpcy51c2VCcmFja2V0cykge1xuICAgICAgICAgIHZhciBwcmV2aW91c0tleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXSB8fCAnJ1xuICAgICAgICAgIHJldHVybiB0aGlzLmRvdChcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAgdGd0LFxuICAgICAgICAgICAgcGF0aC5zbGljZSgwLCAtMSkuY29uY2F0KHByZXZpb3VzS2V5ICsgaW5kZXgpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmRvdChvYmpba2V5XSwgdGd0LCBwYXRoLmNvbmNhdChpbmRleCkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0FycmF5ICYmIHRoaXMudXNlQnJhY2tldHMpIHtcbiAgICAgICAgICB0Z3RbcGF0aC5qb2luKHRoaXMuc2VwYXJhdG9yKS5jb25jYXQoJ1snICsga2V5ICsgJ10nKV0gPSBvYmpba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRndFtwYXRoLmNvbmNhdChpbmRleCkuam9pbih0aGlzLnNlcGFyYXRvcildID0gb2JqW2tleV1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKVxuICApXG4gIHJldHVybiB0Z3Rcbn1cblxuRG90T2JqZWN0LnBpY2sgPSB3cmFwKCdwaWNrJylcbkRvdE9iamVjdC5tb3ZlID0gd3JhcCgnbW92ZScpXG5Eb3RPYmplY3QudHJhbnNmZXIgPSB3cmFwKCd0cmFuc2ZlcicpXG5Eb3RPYmplY3QudHJhbnNmb3JtID0gd3JhcCgndHJhbnNmb3JtJylcbkRvdE9iamVjdC5jb3B5ID0gd3JhcCgnY29weScpXG5Eb3RPYmplY3Qub2JqZWN0ID0gd3JhcCgnb2JqZWN0JylcbkRvdE9iamVjdC5zdHIgPSB3cmFwKCdzdHInKVxuRG90T2JqZWN0LnNldCA9IHdyYXAoJ3NldCcpXG5Eb3RPYmplY3QuZGVsZXRlID0gd3JhcCgnZGVsZXRlJylcbkRvdE9iamVjdC5kZWwgPSBEb3RPYmplY3QucmVtb3ZlID0gd3JhcCgncmVtb3ZlJylcbkRvdE9iamVjdC5kb3QgPSB3cmFwKCdkb3QnKTtcblsnb3ZlcnJpZGUnLCAnb3ZlcndyaXRlJ10uZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRG90T2JqZWN0LCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZG90RGVmYXVsdC5vdmVycmlkZVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBkb3REZWZhdWx0Lm92ZXJyaWRlID0gISF2YWxcbiAgICB9XG4gIH0pXG59KTtcblsndXNlQXJyYXknLCAna2VlcEFycmF5JywgJ3VzZUJyYWNrZXRzJ10uZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRG90T2JqZWN0LCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZG90RGVmYXVsdFtwcm9wXVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBkb3REZWZhdWx0W3Byb3BdID0gdmFsXG4gICAgfVxuICB9KVxufSlcblxuRG90T2JqZWN0Ll9wcm9jZXNzID0gX3Byb2Nlc3NcblxubW9kdWxlLmV4cG9ydHMgPSBEb3RPYmplY3RcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5GZXRjaFJQQyA9IGV4cG9ydHMud3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IgPSBleHBvcnRzLk5vZGVIdHRwUlBDID0gdm9pZCAwO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cHNcIikpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG4vKipcbiAqIGEgbm9kZSBIVFRQIFJQQyBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5jb25zdCBOb2RlSHR0cFJQQyA9IChvcHRpb25zKSA9PiAoe1xuICAgIHJlcXVlc3Qoc2VydmljZSwgbWV0aG9kLCBjb250ZW50VHlwZSwgZGF0YSkge1xuICAgICAgICBsZXQgY2xpZW50O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdGVkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUNodW5rcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdERhdGEgPSBjb250ZW50VHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiXG4gICAgICAgICAgICAgICAgPyBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgdXJsXzEuVVJMKG9wdGlvbnMuYmFzZVVybCk7XG4gICAgICAgICAgICBjb25zdCBpc0h0dHBzID0gdXJsLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xuICAgICAgICAgICAgaWYgKGlzSHR0cHMpIHtcbiAgICAgICAgICAgICAgICBjbGllbnQgPSBodHRwcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsaWVudCA9IGh0dHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSB1cmwucGF0aG5hbWUgIT09IFwiL1wiID8gdXJsLnBhdGhuYW1lIDogXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGNsaWVudFxuICAgICAgICAgICAgICAgIC5yZXF1ZXN0KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKG9wdGlvbnMgPyBvcHRpb25zIDoge30pKSwgeyBtZXRob2Q6IFwiUE9TVFwiLCBwcm90b2NvbDogdXJsLnByb3RvY29sLCBob3N0OiB1cmwuaG9zdG5hbWUsIHBvcnQ6IHVybC5wb3J0ID8gdXJsLnBvcnQgOiBpc0h0dHBzID8gNDQzIDogODAsIHBhdGg6IGAke3ByZWZpeH0vJHtzZXJ2aWNlfS8ke21ldGhvZH1gLCBoZWFkZXJzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIChvcHRpb25zLmhlYWRlcnMgPyBvcHRpb25zLmhlYWRlcnMgOiB7fSkpLCB7IFwiQ29udGVudC1UeXBlXCI6IGNvbnRlbnRUeXBlLCBcIkNvbnRlbnQtTGVuZ3RoXCI6IGNvbnRlbnRUeXBlID09PSBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gQnVmZmVyLmJ5dGVMZW5ndGgocmVxdWVzdERhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5mcm9tKHJlcXVlc3REYXRhKS5ieXRlTGVuZ3RoIH0pIH0pLCAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHJlc3BvbnNlQ2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICAgICAgICAgICAgICByZXMub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChyZXNwb25zZUNodW5rcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdGVkKHdyYXBFcnJvclJlc3BvbnNlVG9Ud2lycEVycm9yKGRhdGEudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlID09PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXMub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdGVkKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3RlZChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXEuZW5kKHJlcXVlc3REYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuZXhwb3J0cy5Ob2RlSHR0cFJQQyA9IE5vZGVIdHRwUlBDO1xuZnVuY3Rpb24gd3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IoZXJyb3JSZXNwb25zZSkge1xuICAgIHJldHVybiBlcnJvcnNfMS5Ud2lycEVycm9yLmZyb21PYmplY3QoSlNPTi5wYXJzZShlcnJvclJlc3BvbnNlKSk7XG59XG5leHBvcnRzLndyYXBFcnJvclJlc3BvbnNlVG9Ud2lycEVycm9yID0gd3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3I7XG4vKipcbiAqIGEgYnJvd3NlciBmZXRjaCBSUEMgaW1wbGVtZW50YXRpb25cbiAqL1xuY29uc3QgRmV0Y2hSUEMgPSAob3B0aW9ucykgPT4gKHtcbiAgICByZXF1ZXN0KHNlcnZpY2UsIG1ldGhvZCwgY29udGVudFR5cGUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgICAgICAgICAgaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIiwgY29udGVudFR5cGUpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBmZXRjaChgJHtvcHRpb25zLmJhc2VVcmx9LyR7c2VydmljZX0vJHttZXRob2R9YCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBtZXRob2Q6IFwiUE9TVFwiLCBoZWFkZXJzLCBib2R5OiBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGRhdGEgOiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh5aWVsZCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yc18xLlR3aXJwRXJyb3IuZnJvbU9iamVjdCh5aWVsZCByZXNwb25zZS5qc29uKCkpO1xuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG5leHBvcnRzLkZldGNoUlBDID0gRmV0Y2hSUEM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2F0ZXdheSA9IGV4cG9ydHMuUGF0dGVybiA9IHZvaWQgMDtcbmNvbnN0IHF1ZXJ5c3RyaW5nXzEgPSByZXF1aXJlKFwicXVlcnlzdHJpbmdcIik7XG5jb25zdCBkb3RPYmplY3QgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImRvdC1vYmplY3RcIikpO1xuY29uc3QgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4vcmVxdWVzdFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuY29uc3QgaHR0cF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuL2h0dHAuY2xpZW50XCIpO1xuY29uc3Qgc2VydmVyXzEgPSByZXF1aXJlKFwiLi9zZXJ2ZXJcIik7XG52YXIgUGF0dGVybjtcbihmdW5jdGlvbiAoUGF0dGVybikge1xuICAgIFBhdHRlcm5bXCJQT1NUXCJdID0gXCJwb3N0XCI7XG4gICAgUGF0dGVybltcIkdFVFwiXSA9IFwiZ2V0XCI7XG4gICAgUGF0dGVybltcIlBBVENIXCJdID0gXCJwYXRjaFwiO1xuICAgIFBhdHRlcm5bXCJQVVRcIl0gPSBcInB1dFwiO1xuICAgIFBhdHRlcm5bXCJERUxFVEVcIl0gPSBcImRlbGV0ZVwiO1xufSkoUGF0dGVybiA9IGV4cG9ydHMuUGF0dGVybiB8fCAoZXhwb3J0cy5QYXR0ZXJuID0ge30pKTtcbi8qKlxuICogVGhlIEdhdGV3YXkgcHJveGllcyBodHRwIHJlcXVlc3RzIHRvIFR3aXJwIENvbXBsaWFudFxuICogaGFuZGxlcnNcbiAqL1xuY2xhc3MgR2F0ZXdheSB7XG4gICAgY29uc3RydWN0b3Iocm91dGVzKSB7XG4gICAgICAgIHRoaXMucm91dGVzID0gcm91dGVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgcmV3cml0ZSB0aGUgY3VycmVudCByZXF1ZXN0XG4gICAgICogdG8gYSBUd2lycCBjb21wbGlhbnQgcmVxdWVzdFxuICAgICAqL1xuICAgIHR3aXJwUmV3cml0ZShwcmVmaXggPSBcIi90d2lycFwiKSB7XG4gICAgICAgIHJldHVybiAocmVxLCByZXNwLCBuZXh0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJld3JpdGUocmVxLCByZXNwLCBwcmVmaXgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gbmV4dCgpKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgZXJyb3JzXzEuVHdpcnBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlICE9PSBlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5Ob3RGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyXzEud3JpdGVFcnJvcihyZXNwLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXdyaXRlIGFuIGluY29taW5nIHJlcXVlc3QgdG8gYSBUd2lycCBjb21wbGlhbnQgcmVxdWVzdFxuICAgICAqIEBwYXJhbSByZXFcbiAgICAgKiBAcGFyYW0gcmVzcFxuICAgICAqIEBwYXJhbSBwcmVmaXhcbiAgICAgKi9cbiAgICByZXdyaXRlKHJlcSwgcmVzcCwgcHJlZml4ID0gXCIvdHdpcnBcIikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgW21hdGNoLCByb3V0ZV0gPSB0aGlzLm1hdGNoUm91dGUocmVxKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB5aWVsZCB0aGlzLnByZXBhcmVUd2lycEJvZHkocmVxLCBtYXRjaCwgcm91dGUpO1xuICAgICAgICAgICAgY29uc3QgdHdpcnBVcmwgPSBgJHtwcmVmaXh9LyR7cm91dGUucGFja2FnZU5hbWV9LiR7cm91dGUuc2VydmljZU5hbWV9LyR7cm91dGUubWV0aG9kTmFtZX1gO1xuICAgICAgICAgICAgcmVxLnVybCA9IHR3aXJwVXJsO1xuICAgICAgICAgICAgcmVxLm9yaWdpbmFsVXJsID0gdHdpcnBVcmw7XG4gICAgICAgICAgICByZXEubWV0aG9kID0gXCJQT1NUXCI7XG4gICAgICAgICAgICByZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgICAgICAgcmVxLnJhd0JvZHkgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShib2R5KSk7XG4gICAgICAgICAgICBpZiAocm91dGUucmVzcG9uc2VCb2R5S2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kRm4gPSByZXNwLmVuZC5iaW5kKHJlc3ApO1xuICAgICAgICAgICAgICAgIHJlc3AuZW5kID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRm4oYHsgXCIke3JvdXRlLnJlc3BvbnNlQm9keUtleX1cIjogJHtjaHVua30gfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRm4oY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHJldmVyc2UgcHJveHkgaGFuZGxlciB0b1xuICAgICAqIHByb3h5IGh0dHAgcmVxdWVzdHMgdG8gVHdpcnAgQ29tcGxpYW50IGhhbmRsZXJzXG4gICAgICogQHBhcmFtIGh0dHBDbGllbnRPcHRpb25cbiAgICAgKi9cbiAgICByZXZlcnNlUHJveHkoaHR0cENsaWVudE9wdGlvbikge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBodHRwX2NsaWVudF8xLk5vZGVIdHRwUlBDKGh0dHBDbGllbnRPcHRpb24pO1xuICAgICAgICByZXR1cm4gKHJlcSwgcmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFttYXRjaCwgcm91dGVdID0gdGhpcy5tYXRjaFJvdXRlKHJlcSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHlpZWxkIHRoaXMucHJlcGFyZVR3aXJwQm9keShyZXEsIG1hdGNoLCByb3V0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBjbGllbnQucmVxdWVzdChgJHtyb3V0ZS5wYWNrYWdlTmFtZX0uJHtyb3V0ZS5zZXJ2aWNlTmFtZX1gLCByb3V0ZS5tZXRob2ROYW1lLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgYm9keSk7XG4gICAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSAyMDA7XG4gICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgbGV0IGpzb25SZXNwb25zZTtcbiAgICAgICAgICAgICAgICBpZiAocm91dGUucmVzcG9uc2VCb2R5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHsgW3JvdXRlLnJlc3BvbnNlQm9keUtleV06IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAganNvblJlc3BvbnNlID0gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMuZW5kKGpzb25SZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHNlcnZlcl8xLndyaXRlRXJyb3IocmVzLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIHR3aXJwIGJvZHkgcmVxdWVzdHMgdXNpbmcgaHR0cC5nb29nbGUuYW5ub3Rpb25zXG4gICAgICogY29tcGxpYW50IHNwZWNcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXFcbiAgICAgKiBAcGFyYW0gbWF0Y2hcbiAgICAgKiBAcGFyYW0gcm91dGVcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJlcGFyZVR3aXJwQm9keShyZXEsIG1hdGNoLCByb3V0ZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgX2EgPSBtYXRjaC5wYXJhbXMsIHsgcXVlcnlfc3RyaW5nIH0gPSBfYSwgcGFyYW1zID0gX19yZXN0KF9hLCBbXCJxdWVyeV9zdHJpbmdcIl0pO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGlmIChxdWVyeV9zdHJpbmcgJiYgcm91dGUuYm9keUtleSAhPT0gXCIqXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyhxdWVyeV9zdHJpbmcpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3RCb2R5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBxdWVyeVBhcmFtcyksIHJlcXVlc3RCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBib2R5ID0ge307XG4gICAgICAgICAgICBpZiAocm91dGUuYm9keUtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCByZXF1ZXN0XzEuZ2V0UmVxdWVzdERhdGEocmVxKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uQm9keSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpIHx8IFwie31cIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZS5ib2R5S2V5ID09PSBcIipcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGpzb25Cb2R5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVtyb3V0ZS5ib2R5S2V5XSA9IGpzb25Cb2R5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIGpzb24gcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuVHdpcnBFcnJvcihlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJvZHkpLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXRjaGVzIGEgcm91dGVcbiAgICAgKiBAcGFyYW0gcmVxXG4gICAgICovXG4gICAgbWF0Y2hSb3V0ZShyZXEpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBodHRwTWV0aG9kID0gKF9hID0gcmVxLm1ldGhvZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghaHR0cE1ldGhvZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkJhZFJvdXRlRXJyb3IoYG1ldGhvZCBub3QgYWxsb3dlZGAsIHJlcS5tZXRob2QgfHwgXCJcIiwgcmVxLnVybCB8fCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3V0ZXMgPSB0aGlzLnJvdXRlc1todHRwTWV0aG9kXTtcbiAgICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gcm91dGUubWF0Y2hlcihyZXEudXJsIHx8IFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbWF0Y2gsIHJvdXRlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuTm90Rm91bmRFcnJvcihgdXJsICR7cmVxLnVybH0gbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlIHF1ZXJ5IHN0cmluZ1xuICAgICAqIEBwYXJhbSBxdWVyeVN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlUXVlcnlTdHJpbmcocXVlcnlTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBxdWVyeXN0cmluZ18xLnBhcnNlKHF1ZXJ5U3RyaW5nLnJlcGxhY2UoXCI/XCIsIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIGRvdE9iamVjdC5vYmplY3QocXVlcnlQYXJhbXMpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2F0ZXdheSA9IEdhdGV3YXk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlR3aXJwQ29udGVudFR5cGUgPSB2b2lkIDA7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29udGV4dFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2VydmVyXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcmNlcHRvcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2hvb2tzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lcnJvcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2dhdGV3YXlcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHAuY2xpZW50XCIpLCBleHBvcnRzKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVHdpcnBDb250ZW50VHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdF8xLlR3aXJwQ29udGVudFR5cGU7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlciA9IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kTGlzdCA9IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRQcm90b2J1ZiA9IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50SlNPTiA9IHZvaWQgMDtcbmNvbnN0IHR3aXJwX3RzXzEgPSByZXF1aXJlKFwidHdpcnAtdHNcIik7XG5jb25zdCBhcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vYXJ0aWZhY3RcIik7XG5jbGFzcyBBcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OIHtcbiAgICBjb25zdHJ1Y3RvcihycGMpIHtcbiAgICAgICAgdGhpcy5ycGMgPSBycGM7XG4gICAgICAgIHRoaXMuQ3JlYXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5GaW5hbGl6ZUFydGlmYWN0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuTGlzdEFydGlmYWN0cy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkdldFNpZ25lZEFydGlmYWN0VVJMLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuRGVsZXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICB9XG4gICAgQ3JlYXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QudG9Kc29uKHJlcXVlc3QsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJDcmVhdGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIEZpbmFsaXplQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkZpbmFsaXplQXJ0aWZhY3RcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIExpc3RBcnRpZmFjdHMocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkxpc3RBcnRpZmFjdHNcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7IGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUgfSkpO1xuICAgIH1cbiAgICBHZXRTaWduZWRBcnRpZmFjdFVSTChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIsIFwiYXBwbGljYXRpb24vanNvblwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgRGVsZXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlcXVlc3QudG9Kc29uKHJlcXVlc3QsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJEZWxldGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxufVxuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OID0gQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50SlNPTjtcbmNsYXNzIEFydGlmYWN0U2VydmljZUNsaWVudFByb3RvYnVmIHtcbiAgICBjb25zdHJ1Y3RvcihycGMpIHtcbiAgICAgICAgdGhpcy5ycGMgPSBycGM7XG4gICAgICAgIHRoaXMuQ3JlYXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5GaW5hbGl6ZUFydGlmYWN0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuTGlzdEFydGlmYWN0cy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkdldFNpZ25lZEFydGlmYWN0VVJMLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuRGVsZXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICB9XG4gICAgQ3JlYXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiQ3JlYXRlQXJ0aWZhY3RcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbiAgICBGaW5hbGl6ZUFydGlmYWN0KHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiRmluYWxpemVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS5mcm9tQmluYXJ5KGRhdGEpKTtcbiAgICB9XG4gICAgTGlzdEFydGlmYWN0cyhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LnRvQmluYXJ5KHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkxpc3RBcnRpZmFjdHNcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UuZnJvbUJpbmFyeShkYXRhKSk7XG4gICAgfVxuICAgIEdldFNpZ25lZEFydGlmYWN0VVJMKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0LnRvQmluYXJ5KHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIsIFwiYXBwbGljYXRpb24vcHJvdG9idWZcIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZS5mcm9tQmluYXJ5KGRhdGEpKTtcbiAgICB9XG4gICAgRGVsZXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiRGVsZXRlQXJ0aWZhY3RcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50UHJvdG9idWYgPSBBcnRpZmFjdFNlcnZpY2VDbGllbnRQcm90b2J1ZjtcbnZhciBBcnRpZmFjdFNlcnZpY2VNZXRob2Q7XG4oZnVuY3Rpb24gKEFydGlmYWN0U2VydmljZU1ldGhvZCkge1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZFtcIkNyZWF0ZUFydGlmYWN0XCJdID0gXCJDcmVhdGVBcnRpZmFjdFwiO1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZFtcIkZpbmFsaXplQXJ0aWZhY3RcIl0gPSBcIkZpbmFsaXplQXJ0aWZhY3RcIjtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2RbXCJMaXN0QXJ0aWZhY3RzXCJdID0gXCJMaXN0QXJ0aWZhY3RzXCI7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIl0gPSBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCI7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiRGVsZXRlQXJ0aWZhY3RcIl0gPSBcIkRlbGV0ZUFydGlmYWN0XCI7XG59KShBcnRpZmFjdFNlcnZpY2VNZXRob2QgfHwgKGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kID0gQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kID0ge30pKTtcbmV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kTGlzdCA9IFtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuQ3JlYXRlQXJ0aWZhY3QsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkZpbmFsaXplQXJ0aWZhY3QsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkxpc3RBcnRpZmFjdHMsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkdldFNpZ25lZEFydGlmYWN0VVJMLFxuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZC5EZWxldGVBcnRpZmFjdCxcbl07XG5mdW5jdGlvbiBjcmVhdGVBcnRpZmFjdFNlcnZpY2VTZXJ2ZXIoc2VydmljZSkge1xuICAgIHJldHVybiBuZXcgdHdpcnBfdHNfMS5Ud2lycFNlcnZlcih7XG4gICAgICAgIHNlcnZpY2UsXG4gICAgICAgIHBhY2thZ2VOYW1lOiBcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxXCIsXG4gICAgICAgIHNlcnZpY2VOYW1lOiBcIkFydGlmYWN0U2VydmljZVwiLFxuICAgICAgICBtZXRob2RMaXN0OiBleHBvcnRzLkFydGlmYWN0U2VydmljZU1ldGhvZExpc3QsXG4gICAgICAgIG1hdGNoUm91dGU6IG1hdGNoQXJ0aWZhY3RTZXJ2aWNlUm91dGUsXG4gICAgfSk7XG59XG5leHBvcnRzLmNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlciA9IGNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlcjtcbmZ1bmN0aW9uIG1hdGNoQXJ0aWZhY3RTZXJ2aWNlUm91dGUobWV0aG9kLCBldmVudHMpIHtcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICBjYXNlIFwiQ3JlYXRlQXJ0aWZhY3RcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJDcmVhdGVBcnRpZmFjdFwiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkZpbmFsaXplQXJ0aWZhY3RcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJGaW5hbGl6ZUFydGlmYWN0XCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJMaXN0QXJ0aWZhY3RzXCI6XG4gICAgICAgICAgICByZXR1cm4gKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgY3R4ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjdHgpLCB7IG1ldGhvZE5hbWU6IFwiTGlzdEFydGlmYWN0c1wiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkRlbGV0ZUFydGlmYWN0XCI6XG4gICAgICAgICAgICByZXR1cm4gKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgY3R4ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjdHgpLCB7IG1ldGhvZE5hbWU6IFwiRGVsZXRlQXJ0aWZhY3RcIiB9KTtcbiAgICAgICAgICAgICAgICB5aWVsZCBldmVudHMub25NYXRjaChjdHgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBldmVudHMub25Ob3RGb3VuZCgpO1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYG5vIGhhbmRsZXIgZm91bmRgO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY6XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBcInVuZXhwZWN0ZWQgQ29udGVudC1UeXBlXCI7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICBzd2l0Y2ggKGN0eC5jb250ZW50VHlwZSkge1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUZpbmFsaXplQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY6XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzUmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c0pTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzUHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ1bmV4cGVjdGVkIENvbnRlbnQtVHlwZVwiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY6XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBcInVuZXhwZWN0ZWQgQ29udGVudC1UeXBlXCI7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VDcmVhdGVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpIHx8IFwie31cIik7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QuZnJvbUpzb24oYm9keSwge1xuICAgICAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIGpzb24gcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5DcmVhdGVBcnRpZmFjdChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkNyZWF0ZUFydGlmYWN0KGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFydGlmYWN0XzEuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZS50b0pzb24ocmVzcG9uc2UsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkZpbmFsaXplQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c0pTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpIHx8IFwie31cIik7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkxpc3RBcnRpZmFjdHMoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5MaXN0QXJ0aWZhY3RzKGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUdldFNpZ25lZEFydGlmYWN0VVJMSlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkdldFNpZ25lZEFydGlmYWN0VVJMKGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkRlbGV0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0LmZyb21CaW5hcnkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBwcm90b2J1ZiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkNyZWF0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuQ3JlYXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLnRvQmluYXJ5KHJlc3BvbnNlKSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkZpbmFsaXplQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVxdWVzdC5mcm9tQmluYXJ5KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUgcHJvdG9idWYgcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5MaXN0QXJ0aWZhY3RzKGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuTGlzdEFydGlmYWN0cyhjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXNwb25zZS50b0JpbmFyeShyZXNwb25zZSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5HZXRTaWduZWRBcnRpZmFjdFVSTChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0LmZyb21CaW5hcnkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBwcm90b2J1ZiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkRlbGV0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLnRvQmluYXJ5KHJlc3BvbnNlKSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnRpZmFjdC50d2lycC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVzdWx0cy9hcGkvdjEvYXJ0aWZhY3QudHdpcnBcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFeHBpcmF0aW9uID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5mdW5jdGlvbiBnZXRFeHBpcmF0aW9uKHJldGVudGlvbkRheXMpIHtcbiAgICBpZiAoIXJldGVudGlvbkRheXMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbWF4UmV0ZW50aW9uRGF5cyA9IGdldFJldGVudGlvbkRheXMoKTtcbiAgICBpZiAobWF4UmV0ZW50aW9uRGF5cyAmJiBtYXhSZXRlbnRpb25EYXlzIDwgcmV0ZW50aW9uRGF5cykge1xuICAgICAgICBjb3JlLndhcm5pbmcoYFJldGVudGlvbiBkYXlzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCByZXRlbnRpb24gc2V0IHdpdGhpbiB0aGUgcmVwb3NpdG9yeS4gVXNpbmcgJHttYXhSZXRlbnRpb25EYXlzfSBpbnN0ZWFkLmApO1xuICAgICAgICByZXRlbnRpb25EYXlzID0gbWF4UmV0ZW50aW9uRGF5cztcbiAgICB9XG4gICAgY29uc3QgZXhwaXJhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGV4cGlyYXRpb25EYXRlLnNldERhdGUoZXhwaXJhdGlvbkRhdGUuZ2V0RGF0ZSgpICsgcmV0ZW50aW9uRGF5cyk7XG4gICAgcmV0dXJuIGdlbmVyYXRlZF8xLlRpbWVzdGFtcC5mcm9tRGF0ZShleHBpcmF0aW9uRGF0ZSk7XG59XG5leHBvcnRzLmdldEV4cGlyYXRpb24gPSBnZXRFeHBpcmF0aW9uO1xuZnVuY3Rpb24gZ2V0UmV0ZW50aW9uRGF5cygpIHtcbiAgICBjb25zdCByZXRlbnRpb25EYXlzID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9SRVRFTlRJT05fREFZUyddO1xuICAgIGlmICghcmV0ZW50aW9uRGF5cykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBkYXlzID0gcGFyc2VJbnQocmV0ZW50aW9uRGF5cyk7XG4gICAgaWYgKGlzTmFOKGRheXMpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBkYXlzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV0ZW50aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlRmlsZVBhdGggPSBleHBvcnRzLnZhbGlkYXRlQXJ0aWZhY3ROYW1lID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG4vKipcbiAqIEludmFsaWQgY2hhcmFjdGVycyB0aGF0IGNhbm5vdCBiZSBpbiB0aGUgYXJ0aWZhY3QgbmFtZSBvciBhbiB1cGxvYWRlZCBmaWxlLiBXaWxsIGJlIHJlamVjdGVkXG4gKiBmcm9tIHRoZSBzZXJ2ZXIgaWYgYXR0ZW1wdGVkIHRvIGJlIHNlbnQgb3Zlci4gVGhlc2UgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgZHVlIHRvIGxpbWl0YXRpb25zIHdpdGggY2VydGFpblxuICogZmlsZSBzeXN0ZW1zIHN1Y2ggYXMgTlRGUy4gVG8gbWFpbnRhaW4gcGxhdGZvcm0tYWdub3N0aWMgYmVoYXZpb3IsIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYW5cbiAqIGluZGl2aWR1YWwgZmlsZXN5c3RlbS9wbGF0Zm9ybSB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gYWxsIGZpbGVTeXN0ZW1zL3BsYXRmb3Jtc1xuICpcbiAqIEZpbGVQYXRocyBjYW4gaW5jbHVkZSBjaGFyYWN0ZXJzIHN1Y2ggYXMgXFwgYW5kIC8gd2hpY2ggYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdGhlIGFydGlmYWN0IG5hbWUgYWxvbmVcbiAqL1xuY29uc3QgaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzID0gbmV3IE1hcChbXG4gICAgWydcIicsICcgRG91YmxlIHF1b3RlIFwiJ10sXG4gICAgWyc6JywgJyBDb2xvbiA6J10sXG4gICAgWyc8JywgJyBMZXNzIHRoYW4gPCddLFxuICAgIFsnPicsICcgR3JlYXRlciB0aGFuID4nXSxcbiAgICBbJ3wnLCAnIFZlcnRpY2FsIGJhciB8J10sXG4gICAgWycqJywgJyBBc3RlcmlzayAqJ10sXG4gICAgWyc/JywgJyBRdWVzdGlvbiBtYXJrID8nXSxcbiAgICBbJ1xccicsICcgQ2FycmlhZ2UgcmV0dXJuIFxcXFxyJ10sXG4gICAgWydcXG4nLCAnIExpbmUgZmVlZCBcXFxcbiddXG5dKTtcbmNvbnN0IGludmFsaWRBcnRpZmFjdE5hbWVDaGFyYWN0ZXJzID0gbmV3IE1hcChbXG4gICAgLi4uaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzLFxuICAgIFsnXFxcXCcsICcgQmFja3NsYXNoIFxcXFwnXSxcbiAgICBbJy8nLCAnIEZvcndhcmQgc2xhc2ggLyddXG5dKTtcbi8qKlxuICogVmFsaWRhdGVzIHRoZSBuYW1lIG9mIHRoZSBhcnRpZmFjdCB0byBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGlsbGVnYWwgY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFydGlmYWN0TmFtZShuYW1lKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZWQgYXJ0aWZhY3QgbmFtZSBpbnB1dCBkdXJpbmcgdmFsaWRhdGlvbiBpcyBlbXB0eWApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtpbnZhbGlkQ2hhcmFjdGVyS2V5LCBlcnJvck1lc3NhZ2VGb3JDaGFyYWN0ZXJdIG9mIGludmFsaWRBcnRpZmFjdE5hbWVDaGFyYWN0ZXJzKSB7XG4gICAgICAgIGlmIChuYW1lLmluY2x1ZGVzKGludmFsaWRDaGFyYWN0ZXJLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBhcnRpZmFjdCBuYW1lIGlzIG5vdCB2YWxpZDogJHtuYW1lfS4gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXI6ICR7ZXJyb3JNZXNzYWdlRm9yQ2hhcmFjdGVyfVxuICAgICAgICAgIFxuSW52YWxpZCBjaGFyYWN0ZXJzIGluY2x1ZGU6ICR7QXJyYXkuZnJvbShpbnZhbGlkQXJ0aWZhY3ROYW1lQ2hhcmFjdGVycy52YWx1ZXMoKSkudG9TdHJpbmcoKX1cbiAgICAgICAgICBcblRoZXNlIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBhcnRpZmFjdCBuYW1lIGR1ZSB0byBsaW1pdGF0aW9ucyB3aXRoIGNlcnRhaW4gZmlsZSBzeXN0ZW1zIHN1Y2ggYXMgTlRGUy4gVG8gbWFpbnRhaW4gZmlsZSBzeXN0ZW0gYWdub3N0aWMgYmVoYXZpb3IsIHRoZXNlIGNoYXJhY3RlcnMgYXJlIGludGVudGlvbmFsbHkgbm90IGFsbG93ZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aCBkb3dubG9hZHMgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtcy5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAoMCwgY29yZV8xLmluZm8pKGBBcnRpZmFjdCBuYW1lIGlzIHZhbGlkIWApO1xufVxuZXhwb3J0cy52YWxpZGF0ZUFydGlmYWN0TmFtZSA9IHZhbGlkYXRlQXJ0aWZhY3ROYW1lO1xuLyoqXG4gKiBWYWxpZGF0ZXMgZmlsZSBwYXRocyB0byBjaGVjayBmb3IgYW55IGlsbGVnYWwgY2hhcmFjdGVycyB0aGF0IGNhbiBjYXVzZSBwcm9ibGVtcyBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRmlsZVBhdGgocGF0aCkge1xuICAgIGlmICghcGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVkIGZpbGUgcGF0aCBpbnB1dCBkdXJpbmcgdmFsaWRhdGlvbiBpcyBlbXB0eWApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtpbnZhbGlkQ2hhcmFjdGVyS2V5LCBlcnJvck1lc3NhZ2VGb3JDaGFyYWN0ZXJdIG9mIGludmFsaWRBcnRpZmFjdEZpbGVQYXRoQ2hhcmFjdGVycykge1xuICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhpbnZhbGlkQ2hhcmFjdGVyS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGF0aCBmb3Igb25lIG9mIHRoZSBmaWxlcyBpbiBhcnRpZmFjdCBpcyBub3QgdmFsaWQ6ICR7cGF0aH0uIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyOiAke2Vycm9yTWVzc2FnZUZvckNoYXJhY3Rlcn1cbiAgICAgICAgICBcbkludmFsaWQgY2hhcmFjdGVycyBpbmNsdWRlOiAke0FycmF5LmZyb20oaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzLnZhbHVlcygpKS50b1N0cmluZygpfVxuICAgICAgICAgIFxuVGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCBpbiBmaWxlcyB0aGF0IGFyZSB1cGxvYWRlZCBkdWUgdG8gbGltaXRhdGlvbnMgd2l0aCBjZXJ0YWluIGZpbGUgc3lzdGVtcyBzdWNoIGFzIE5URlMuIFRvIG1haW50YWluIGZpbGUgc3lzdGVtIGFnbm9zdGljIGJlaGF2aW9yLCB0aGVzZSBjaGFyYWN0ZXJzIGFyZSBpbnRlbnRpb25hbGx5IG5vdCBhbGxvd2VkIHRvIHByZXZlbnQgcG90ZW50aWFsIHByb2JsZW1zIHdpdGggZG93bmxvYWRzIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMuXG4gICAgICAgICAgYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlRmlsZVBhdGggPSB2YWxpZGF0ZUZpbGVQYXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFVzZXJBZ2VudFN0cmluZyA9IHZvaWQgMDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBwYWNrYWdlSnNvbiA9IHJlcXVpcmUoJy4uLy4uLy4uL3BhY2thZ2UuanNvbicpO1xuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGlzIFVzZXIgQWdlbnQgU3RyaW5nIGlzIHVzZWQgaW4gYWxsIEhUVFAgY2FsbHMgc28gdGhhdCB3ZSBjYW4gbW9uaXRvciB0ZWxlbWV0cnkgYmV0d2VlbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhpcyBwYWNrYWdlXG4gKi9cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudFN0cmluZygpIHtcbiAgICByZXR1cm4gYEBhY3Rpb25zL2FydGlmYWN0LSR7cGFja2FnZUpzb24udmVyc2lvbn1gO1xufVxuZXhwb3J0cy5nZXRVc2VyQWdlbnRTdHJpbmcgPSBnZXRVc2VyQWdlbnRTdHJpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VyLWFnZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVzYWdlRXJyb3IgPSBleHBvcnRzLk5ldHdvcmtFcnJvciA9IGV4cG9ydHMuR0hFU05vdFN1cHBvcnRlZEVycm9yID0gZXhwb3J0cy5BcnRpZmFjdE5vdEZvdW5kRXJyb3IgPSBleHBvcnRzLkludmFsaWRSZXNwb25zZUVycm9yID0gZXhwb3J0cy5GaWxlc05vdEZvdW5kRXJyb3IgPSB2b2lkIDA7XG5jbGFzcyBGaWxlc05vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZmlsZXMgPSBbXSkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9ICdObyBmaWxlcyB3ZXJlIGZvdW5kIHRvIHVwbG9hZCc7XG4gICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtZXNzYWdlICs9IGA6ICR7ZmlsZXMuam9pbignLCAnKX1gO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmZpbGVzID0gZmlsZXM7XG4gICAgICAgIHRoaXMubmFtZSA9ICdGaWxlc05vdEZvdW5kRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuRmlsZXNOb3RGb3VuZEVycm9yID0gRmlsZXNOb3RGb3VuZEVycm9yO1xuY2xhc3MgSW52YWxpZFJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0ludmFsaWRSZXNwb25zZUVycm9yJztcbiAgICB9XG59XG5leHBvcnRzLkludmFsaWRSZXNwb25zZUVycm9yID0gSW52YWxpZFJlc3BvbnNlRXJyb3I7XG5jbGFzcyBBcnRpZmFjdE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdBcnRpZmFjdCBub3QgZm91bmQnKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnQXJ0aWZhY3ROb3RGb3VuZEVycm9yJztcbiAgICB9XG59XG5leHBvcnRzLkFydGlmYWN0Tm90Rm91bmRFcnJvciA9IEFydGlmYWN0Tm90Rm91bmRFcnJvcjtcbmNsYXNzIEdIRVNOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0BhY3Rpb25zL2FydGlmYWN0IHYyLjAuMCssIHVwbG9hZC1hcnRpZmFjdEB2NCsgYW5kIGRvd25sb2FkLWFydGlmYWN0QHY0KyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgb24gR0hFUy4nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnR0hFU05vdFN1cHBvcnRlZEVycm9yJztcbiAgICB9XG59XG5leHBvcnRzLkdIRVNOb3RTdXBwb3J0ZWRFcnJvciA9IEdIRVNOb3RTdXBwb3J0ZWRFcnJvcjtcbmNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgVW5hYmxlIHRvIG1ha2UgcmVxdWVzdDogJHtjb2RlfVxcbklmIHlvdSBhcmUgdXNpbmcgc2VsZi1ob3N0ZWQgcnVubmVycywgcGxlYXNlIG1ha2Ugc3VyZSB5b3VyIHJ1bm5lciBoYXMgYWNjZXNzIHRvIGFsbCBHaXRIdWIgZW5kcG9pbnRzOiBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2hvc3RpbmcteW91ci1vd24tcnVubmVycy9tYW5hZ2luZy1zZWxmLWhvc3RlZC1ydW5uZXJzL2Fib3V0LXNlbGYtaG9zdGVkLXJ1bm5lcnMjY29tbXVuaWNhdGlvbi1iZXR3ZWVuLXNlbGYtaG9zdGVkLXJ1bm5lcnMtYW5kLWdpdGh1YmA7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLm5hbWUgPSAnTmV0d29ya0Vycm9yJztcbiAgICB9XG59XG5leHBvcnRzLk5ldHdvcmtFcnJvciA9IE5ldHdvcmtFcnJvcjtcbk5ldHdvcmtFcnJvci5pc05ldHdvcmtFcnJvckNvZGUgPSAoY29kZSkgPT4ge1xuICAgIGlmICghY29kZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VOT1RGT1VORCcsXG4gICAgICAgICdFVElNRURPVVQnLFxuICAgICAgICAnRUNPTk5SRUZVU0VEJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCdcbiAgICBdLmluY2x1ZGVzKGNvZGUpO1xufTtcbmNsYXNzIFVzYWdlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQXJ0aWZhY3Qgc3RvcmFnZSBxdW90YSBoYXMgYmVlbiBoaXQuIFVuYWJsZSB0byB1cGxvYWQgYW55IG5ldyBhcnRpZmFjdHMuIFVzYWdlIGlzIHJlY2FsY3VsYXRlZCBldmVyeSA2LTEyIGhvdXJzLlxcbk1vcmUgaW5mbyBvbiBzdG9yYWdlIGxpbWl0czogaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYmlsbGluZy9tYW5hZ2luZy1iaWxsaW5nLWZvci1naXRodWItYWN0aW9ucy9hYm91dC1iaWxsaW5nLWZvci1naXRodWItYWN0aW9ucyNjYWxjdWxhdGluZy1taW51dGUtYW5kLXN0b3JhZ2Utc3BlbmRpbmdgO1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1VzYWdlRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuVXNhZ2VFcnJvciA9IFVzYWdlRXJyb3I7XG5Vc2FnZUVycm9yLmlzVXNhZ2VFcnJvck1lc3NhZ2UgPSAobXNnKSA9PiB7XG4gICAgaWYgKCFtc2cpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbXNnLmluY2x1ZGVzKCdpbnN1ZmZpY2llbnQgdXNhZ2UnKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpO1xuY29uc3QgYXV0aF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9hdXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuL3VzZXItYWdlbnRcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbmNsYXNzIEFydGlmYWN0SHR0cENsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXNlckFnZW50LCBtYXhBdHRlbXB0cywgYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMsIHJldHJ5TXVsdGlwbGllcikge1xuICAgICAgICB0aGlzLm1heEF0dGVtcHRzID0gNTtcbiAgICAgICAgdGhpcy5iYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcyA9IDMwMDA7XG4gICAgICAgIHRoaXMucmV0cnlNdWx0aXBsaWVyID0gMS41O1xuICAgICAgICBjb25zdCB0b2tlbiA9ICgwLCBjb25maWdfMS5nZXRSdW50aW1lVG9rZW4pKCk7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9ICgwLCBjb25maWdfMS5nZXRSZXN1bHRzU2VydmljZVVybCkoKTtcbiAgICAgICAgaWYgKG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICB0aGlzLm1heEF0dGVtcHRzID0gbWF4QXR0ZW1wdHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJhc2VSZXRyeUludGVydmFsTWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICB0aGlzLmJhc2VSZXRyeUludGVydmFsTWlsbGlzZWNvbmRzID0gYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldHJ5TXVsdGlwbGllcikge1xuICAgICAgICAgICAgdGhpcy5yZXRyeU11bHRpcGxpZXIgPSByZXRyeU11bHRpcGxpZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IGh0dHBfY2xpZW50XzEuSHR0cENsaWVudCh1c2VyQWdlbnQsIFtcbiAgICAgICAgICAgIG5ldyBhdXRoXzEuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIodG9rZW4pXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHNhdGlzZmllcyB0aGUgUnBjIGludGVyZmFjZS4gSXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBKU09OXG4gICAgLy8gSlNPTiBnZW5lcmF0ZWQgY2xpZW50LlxuICAgIHJlcXVlc3Qoc2VydmljZSwgbWV0aG9kLCBjb250ZW50VHlwZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgL3R3aXJwLyR7c2VydmljZX0vJHttZXRob2R9YCwgdGhpcy5iYXNlVXJsKS5ocmVmO1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYFtSZXF1ZXN0XSAke21ldGhvZH0gJHt1cmx9YCk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBjb250ZW50VHlwZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBib2R5IH0gPSB5aWVsZCB0aGlzLnJldHJ5YWJsZVJlcXVlc3QoKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCBKU09OLnN0cmluZ2lmeShkYXRhKSwgaGVhZGVycyk7IH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvICR7bWV0aG9kfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0cnlhYmxlUmVxdWVzdChvcGVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIGxldCByYXdCb2R5ID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAoYXR0ZW1wdCA8IHRoaXMubWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgaXNSZXRyeWFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIG9wZXJhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlO1xuICAgICAgICAgICAgICAgICAgICByYXdCb2R5ID0geWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYFtSZXNwb25zZV0gLSAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYEhlYWRlcnM6ICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UubWVzc2FnZS5oZWFkZXJzLCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmF3Qm9keSk7XG4gICAgICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuZGVidWcpKGBCb2R5OiAke0pTT04uc3RyaW5naWZ5KGJvZHksIG51bGwsIDIpfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N1Y2Nlc3NTdGF0dXNDb2RlKHN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByZXNwb25zZSwgYm9keSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlzUmV0cnlhYmxlID0gdGhpcy5pc1JldHJ5YWJsZUh0dHBTdGF0dXNDb2RlKHN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRmFpbGVkIHJlcXVlc3Q6ICgke3N0YXR1c0NvZGV9KSAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzTWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5tc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnNfMS5Vc2FnZUVycm9yLmlzVXNhZ2VFcnJvck1lc3NhZ2UoYm9keS5tc2cpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLlVzYWdlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2Vycm9yTWVzc2FnZX06ICR7Ym9keS5tc2d9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuZGVidWcpKGBSYXcgQm9keTogJHtyYXdCb2R5fWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGVycm9yc18xLlVzYWdlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnNfMS5OZXR3b3JrRXJyb3IuaXNOZXR3b3JrRXJyb3JDb2RlKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLk5ldHdvcmtFcnJvcihlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNSZXRyeWFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWlzUmV0cnlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjZWl2ZWQgbm9uLXJldHJ5YWJsZSBlcnJvcjogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhdHRlbXB0ICsgMSA9PT0gdGhpcy5tYXhBdHRlbXB0cykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBtYWtlIHJlcXVlc3QgYWZ0ZXIgJHt0aGlzLm1heEF0dGVtcHRzfSBhdHRlbXB0czogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5VGltZU1pbGxpc2Vjb25kcyA9IHRoaXMuZ2V0RXhwb25lbnRpYWxSZXRyeVRpbWVNaWxsaXNlY29uZHMoYXR0ZW1wdCk7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgQXR0ZW1wdCAke2F0dGVtcHQgKyAxfSBvZiAke3RoaXMubWF4QXR0ZW1wdHN9IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yTWVzc2FnZX0uIFJldHJ5aW5nIHJlcXVlc3QgaW4gJHtyZXRyeVRpbWVNaWxsaXNlY29uZHN9IG1zLi4uYCk7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5zbGVlcChyZXRyeVRpbWVNaWxsaXNlY29uZHMpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWVzdCBmYWlsZWRgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlzU3VjY2Vzc1N0YXR1c0NvZGUoc3RhdHVzQ29kZSkge1xuICAgICAgICBpZiAoIXN0YXR1c0NvZGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdGF0dXNDb2RlID49IDIwMCAmJiBzdGF0dXNDb2RlIDwgMzAwO1xuICAgIH1cbiAgICBpc1JldHJ5YWJsZUh0dHBTdGF0dXNDb2RlKHN0YXR1c0NvZGUpIHtcbiAgICAgICAgaWYgKCFzdGF0dXNDb2RlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCByZXRyeWFibGVTdGF0dXNDb2RlcyA9IFtcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLkJhZEdhdGV3YXksXG4gICAgICAgICAgICBodHRwX2NsaWVudF8xLkh0dHBDb2Rlcy5HYXRld2F5VGltZW91dCxcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLkludGVybmFsU2VydmVyRXJyb3IsXG4gICAgICAgICAgICBodHRwX2NsaWVudF8xLkh0dHBDb2Rlcy5TZXJ2aWNlVW5hdmFpbGFibGUsXG4gICAgICAgICAgICBodHRwX2NsaWVudF8xLkh0dHBDb2Rlcy5Ub29NYW55UmVxdWVzdHNcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHJldHJ5YWJsZVN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgICBzbGVlcChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRFeHBvbmVudGlhbFJldHJ5VGltZU1pbGxpc2Vjb25kcyhhdHRlbXB0KSB7XG4gICAgICAgIGlmIChhdHRlbXB0IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRlbXB0IHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXR0ZW1wdCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWluVGltZSA9IHRoaXMuYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMgKiBNYXRoLnBvdyh0aGlzLnJldHJ5TXVsdGlwbGllciwgYXR0ZW1wdCk7XG4gICAgICAgIGNvbnN0IG1heFRpbWUgPSBtaW5UaW1lICogdGhpcy5yZXRyeU11bHRpcGxpZXI7XG4gICAgICAgIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gbWluVGltZSBhbmQgbWF4VGltZSAoZXhjbHVzaXZlKVxuICAgICAgICByZXR1cm4gTWF0aC50cnVuYyhNYXRoLnJhbmRvbSgpICogKG1heFRpbWUgLSBtaW5UaW1lKSArIG1pblRpbWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGludGVybmFsQXJ0aWZhY3RUd2lycENsaWVudChvcHRpb25zKSB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEFydGlmYWN0SHR0cENsaWVudCgoMCwgdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFN0cmluZykoKSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1heEF0dGVtcHRzLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0cnlJbnRlcnZhbE1zLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0cnlNdWx0aXBsaWVyKTtcbiAgICByZXR1cm4gbmV3IGdlbmVyYXRlZF8xLkFydGlmYWN0U2VydmljZUNsaWVudEpTT04oY2xpZW50KTtcbn1cbmV4cG9ydHMuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50ID0gaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3QtdHdpcnAtY2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXBsb2FkWmlwU3BlY2lmaWNhdGlvbiA9IGV4cG9ydHMudmFsaWRhdGVSb290RGlyZWN0b3J5ID0gdm9pZCAwO1xuY29uc3QgZnMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImZzXCIpKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpO1xuY29uc3QgcGF0aF8xID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBwYXRoX2FuZF9hcnRpZmFjdF9uYW1lX3ZhbGlkYXRpb25fMSA9IHJlcXVpcmUoXCIuL3BhdGgtYW5kLWFydGlmYWN0LW5hbWUtdmFsaWRhdGlvblwiKTtcbi8qKlxuICogQ2hlY2tzIGlmIGEgcm9vdCBkaXJlY3RvcnkgZXhpc3RzIGFuZCBpcyB2YWxpZFxuICogQHBhcmFtIHJvb3REaXJlY3RvcnkgYW4gYWJzb2x1dGUgcm9vdCBkaXJlY3RvcnkgcGF0aCBjb21tb24gdG8gYWxsIGlucHV0IGZpbGVzIHRoYXQgdGhhdCB3aWxsIGJlIHRyaW1tZWQgZnJvbSB0aGUgZmluYWwgemlwIHN0cnVjdHVyZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJvb3REaXJlY3Rvcnkocm9vdERpcmVjdG9yeSkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhyb290RGlyZWN0b3J5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCByb290RGlyZWN0b3J5ICR7cm9vdERpcmVjdG9yeX0gZG9lcyBub3QgZXhpc3RgKTtcbiAgICB9XG4gICAgaWYgKCFmcy5zdGF0U3luYyhyb290RGlyZWN0b3J5KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIHJvb3REaXJlY3RvcnkgJHtyb290RGlyZWN0b3J5fSBpcyBub3QgYSB2YWxpZCBkaXJlY3RvcnlgKTtcbiAgICB9XG4gICAgKDAsIGNvcmVfMS5pbmZvKShgUm9vdCBkaXJlY3RvcnkgaW5wdXQgaXMgdmFsaWQhYCk7XG59XG5leHBvcnRzLnZhbGlkYXRlUm9vdERpcmVjdG9yeSA9IHZhbGlkYXRlUm9vdERpcmVjdG9yeTtcbi8qKlxuICogQ3JlYXRlcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgaG93IGEgemlwIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGZvciBhIHNldCBvZiBpbnB1dCBmaWxlc1xuICogQHBhcmFtIGZpbGVzVG9aaXAgYSBsaXN0IG9mIGZpbGUgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHppcFxuICogQHBhcmFtIHJvb3REaXJlY3RvcnkgYW4gYWJzb2x1dGUgcm9vdCBkaXJlY3RvcnkgcGF0aCBjb21tb24gdG8gYWxsIGlucHV0IGZpbGVzIHRoYXQgdGhhdCB3aWxsIGJlIHRyaW1tZWQgZnJvbSB0aGUgZmluYWwgemlwIHN0cnVjdHVyZVxuICovXG5mdW5jdGlvbiBnZXRVcGxvYWRaaXBTcGVjaWZpY2F0aW9uKGZpbGVzVG9aaXAsIHJvb3REaXJlY3RvcnkpIHtcbiAgICBjb25zdCBzcGVjaWZpY2F0aW9uID0gW107XG4gICAgLy8gTm9ybWFsaXplIGFuZCByZXNvbHZlLCB0aGlzIGFsbG93cyBmb3IgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHVzZWRcbiAgICByb290RGlyZWN0b3J5ID0gKDAsIHBhdGhfMS5ub3JtYWxpemUpKHJvb3REaXJlY3RvcnkpO1xuICAgIHJvb3REaXJlY3RvcnkgPSAoMCwgcGF0aF8xLnJlc29sdmUpKHJvb3REaXJlY3RvcnkpO1xuICAgIC8qXG4gICAgICAgRXhhbXBsZVxuICAgICAgIFxuICAgICAgIElucHV0OlxuICAgICAgICAgcm9vdERpcmVjdG9yeTogJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZCdcbiAgICAgICAgIGFydGlmYWN0RmlsZXM6IFtcbiAgICAgICAgICAgJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLFxuICAgICAgICAgICAnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUyLnR4dCcsXG4gICAgICAgICAgICcvaG9tZS91c2VyL2ZpbGVzL3Bsei11cGxvYWQvZGlyL2ZpbGUzLnR4dCdcbiAgICAgICAgIF1cbiAgICAgICBcbiAgICAgICBPdXRwdXQ6XG4gICAgICAgICBzcGVjaWZpY2F0aW9uczogW1xuICAgICAgICAgICBbJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLCAnL2ZpbGUxLnR4dCddLFxuICAgICAgICAgICBbJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLCAnL2ZpbGUyLnR4dCddLFxuICAgICAgICAgICBbJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLCAnL2Rpci9maWxlMy50eHQnXVxuICAgICAgICAgXVxuICBcbiAgICAgICAgVGhlIGZpbmFsIHppcCB0aGF0IGlzIGxhdGVyIHVwbG9hZGVkIHdpbGwgbG9vayBsaWtlIHRoaXM6XG4gIFxuICAgICAgICBteS1hcnRpZmFjdC56aXBcbiAgICAgICAgICAtIGZpbGUudHh0XG4gICAgICAgICAgLSBmaWxlMi50eHRcbiAgICAgICAgICAtIGRpci9cbiAgICAgICAgICAgIC0gZmlsZTMudHh0XG4gICAgKi9cbiAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzVG9aaXApIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5sc3RhdFN5bmMoZmlsZSwgeyB0aHJvd0lmTm9FbnRyeTogZmFsc2UgfSk7XG4gICAgICAgIGlmICghc3RhdHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2ZpbGV9IGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAvLyBOb3JtYWxpemUgYW5kIHJlc29sdmUsIHRoaXMgYWxsb3dzIGZvciBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aHMgdG8gYmUgdXNlZFxuICAgICAgICAgICAgZmlsZSA9ICgwLCBwYXRoXzEubm9ybWFsaXplKShmaWxlKTtcbiAgICAgICAgICAgIGZpbGUgPSAoMCwgcGF0aF8xLnJlc29sdmUpKGZpbGUpO1xuICAgICAgICAgICAgaWYgKCFmaWxlLnN0YXJ0c1dpdGgocm9vdERpcmVjdG9yeSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSByb290RGlyZWN0b3J5OiAke3Jvb3REaXJlY3Rvcnl9IGlzIG5vdCBhIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGU6ICR7ZmlsZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBmb3JiaWRkZW4gY2hhcmFjdGVycyBpbiBmaWxlIHBhdGhzIHRoYXQgbWF5IGNhdXNlIGFtYmlndW91cyBiZWhhdmlvciBpZiBkb3dubG9hZGVkIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXNcbiAgICAgICAgICAgIGNvbnN0IHVwbG9hZFBhdGggPSBmaWxlLnJlcGxhY2Uocm9vdERpcmVjdG9yeSwgJycpO1xuICAgICAgICAgICAgKDAsIHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xLnZhbGlkYXRlRmlsZVBhdGgpKHVwbG9hZFBhdGgpO1xuICAgICAgICAgICAgc3BlY2lmaWNhdGlvbi5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VQYXRoOiBmaWxlLFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUGF0aDogdXBsb2FkUGF0aCxcbiAgICAgICAgICAgICAgICBzdGF0c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFbXB0eSBkaXJlY3RvcnlcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBmaWxlLnJlcGxhY2Uocm9vdERpcmVjdG9yeSwgJycpO1xuICAgICAgICAgICAgKDAsIHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xLnZhbGlkYXRlRmlsZVBhdGgpKGRpcmVjdG9yeVBhdGgpO1xuICAgICAgICAgICAgc3BlY2lmaWNhdGlvbi5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VQYXRoOiBudWxsLFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUGF0aDogZGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICBzdGF0c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNwZWNpZmljYXRpb247XG59XG5leHBvcnRzLmdldFVwbG9hZFppcFNwZWNpZmljYXRpb24gPSBnZXRVcGxvYWRaaXBTcGVjaWZpY2F0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXBsb2FkLXppcC1zcGVjaWZpY2F0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9ZX1lLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5wcm90b3R5cGUubmFtZT1cIkludmFsaWRDaGFyYWN0ZXJFcnJvclwiO3ZhciByPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5iaW5kKHdpbmRvdyl8fGZ1bmN0aW9uKHIpe3ZhciB0PVN0cmluZyhyKS5yZXBsYWNlKC89KyQvLFwiXCIpO2lmKHQubGVuZ3RoJTQ9PTEpdGhyb3cgbmV3IGUoXCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLlwiKTtmb3IodmFyIG4sbyxhPTAsaT0wLGM9XCJcIjtvPXQuY2hhckF0KGkrKyk7fm8mJihuPWElND82NCpuK286byxhKyslNCk/Yys9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmbj4+KC0yKmEmNikpOjApbz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIuaW5kZXhPZihvKTtyZXR1cm4gY307ZnVuY3Rpb24gdChlKXt2YXIgdD1lLnJlcGxhY2UoLy0vZyxcIitcIikucmVwbGFjZSgvXy9nLFwiL1wiKTtzd2l0Y2godC5sZW5ndGglNCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjp0Kz1cIj09XCI7YnJlYWs7Y2FzZSAzOnQrPVwiPVwiO2JyZWFrO2RlZmF1bHQ6dGhyb3dcIklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyFcIn10cnl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQocihlKS5yZXBsYWNlKC8oLikvZywoZnVuY3Rpb24oZSxyKXt2YXIgdD1yLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHQubGVuZ3RoPDImJih0PVwiMFwiK3QpLFwiJVwiK3R9KSkpfSh0KX1jYXRjaChlKXtyZXR1cm4gcih0KX19ZnVuY3Rpb24gbihlKXt0aGlzLm1lc3NhZ2U9ZX1mdW5jdGlvbiBvKGUscil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IG4oXCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZFwiKTt2YXIgbz0hMD09PShyPXJ8fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KGUuc3BsaXQoXCIuXCIpW29dKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IG4oXCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogXCIrZS5tZXNzYWdlKX19bi5wcm90b3R5cGU9bmV3IEVycm9yLG4ucHJvdG90eXBlLm5hbWU9XCJJbnZhbGlkVG9rZW5FcnJvclwiO2NvbnN0IGE9bzthLmRlZmF1bHQ9byxhLkludmFsaWRUb2tlbkVycm9yPW4sbW9kdWxlLmV4cG9ydHM9YTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWp3dC1kZWNvZGUuY2pzLmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRCYWNrZW5kSWRzRnJvbVRva2VuID0gdm9pZCAwO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbmNvbnN0IGp3dF9kZWNvZGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiand0LWRlY29kZVwiKSk7XG5jb25zdCBJbnZhbGlkSnd0RXJyb3IgPSBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgYmFja2VuZCBJRHM6IFRoZSBwcm92aWRlZCBKV1QgdG9rZW4gaXMgaW52YWxpZCBhbmQvb3IgbWlzc2luZyBjbGFpbXMnKTtcbi8vIHVzZXMgdGhlIEpXVCB0b2tlbiBjbGFpbXMgdG8gZ2V0IHRoZVxuLy8gd29ya2Zsb3cgcnVuIGFuZCB3b3JrZmxvdyBqb2IgcnVuIGJhY2tlbmQgaWRzXG5mdW5jdGlvbiBnZXRCYWNrZW5kSWRzRnJvbVRva2VuKCkge1xuICAgIGNvbnN0IHRva2VuID0gKDAsIGNvbmZpZ18xLmdldFJ1bnRpbWVUb2tlbikoKTtcbiAgICBjb25zdCBkZWNvZGVkID0gKDAsIGp3dF9kZWNvZGVfMS5kZWZhdWx0KSh0b2tlbik7XG4gICAgaWYgKCFkZWNvZGVkLnNjcCkge1xuICAgICAgICB0aHJvdyBJbnZhbGlkSnd0RXJyb3I7XG4gICAgfVxuICAgIC8qXG4gICAgICogZXhhbXBsZSBkZWNvZGVkOlxuICAgICAqIHtcbiAgICAgKiAgIHNjcDogXCJBY3Rpb25zLkV4YW1wbGVTY29wZSBBY3Rpb25zLlJlc3VsdHM6Y2U3ZjU0YzctNjFjNy00YWFlLTg4N2YtMzBkYTQ3NWY1ZjFhOmNhMzk1MDg1LTA0MGEtNTI2Yi0yY2U4LWJkYzg1ZjY5Mjc3NFwiXG4gICAgICogfVxuICAgICAqL1xuICAgIGNvbnN0IHNjcFBhcnRzID0gZGVjb2RlZC5zY3Auc3BsaXQoJyAnKTtcbiAgICBpZiAoc2NwUGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IEludmFsaWRKd3RFcnJvcjtcbiAgICB9XG4gICAgLypcbiAgICAgKiBleGFtcGxlIHNjcFBhcnRzOlxuICAgICAqIFtcIkFjdGlvbnMuRXhhbXBsZVNjb3BlXCIsIFwiQWN0aW9ucy5SZXN1bHRzOmNlN2Y1NGM3LTYxYzctNGFhZS04ODdmLTMwZGE0NzVmNWYxYTpjYTM5NTA4NS0wNDBhLTUyNmItMmNlOC1iZGM4NWY2OTI3NzRcIl1cbiAgICAgKi9cbiAgICBmb3IgKGNvbnN0IHNjb3BlcyBvZiBzY3BQYXJ0cykge1xuICAgICAgICBjb25zdCBzY29wZVBhcnRzID0gc2NvcGVzLnNwbGl0KCc6Jyk7XG4gICAgICAgIGlmICgoc2NvcGVQYXJ0cyA9PT0gbnVsbCB8fCBzY29wZVBhcnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY29wZVBhcnRzWzBdKSAhPT0gJ0FjdGlvbnMuUmVzdWx0cycpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgQWN0aW9ucy5SZXN1bHRzIHNjb3BlXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKlxuICAgICAgICAgKiBleGFtcGxlIHNjb3BlUGFydHM6XG4gICAgICAgICAqIFtcIkFjdGlvbnMuUmVzdWx0c1wiLCBcImNlN2Y1NGM3LTYxYzctNGFhZS04ODdmLTMwZGE0NzVmNWYxYVwiLCBcImNhMzk1MDg1LTA0MGEtNTI2Yi0yY2U4LWJkYzg1ZjY5Mjc3NFwiXVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHNjb3BlUGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICAvLyBtaXNzaW5nIGV4cGVjdGVkIG51bWJlciBvZiBjbGFpbXNcbiAgICAgICAgICAgIHRocm93IEludmFsaWRKd3RFcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHMgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZDogc2NvcGVQYXJ0c1sxXSxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBzY29wZVBhcnRzWzJdXG4gICAgICAgIH07XG4gICAgICAgIGNvcmUuZGVidWcoYFdvcmtmbG93IFJ1biBCYWNrZW5kIElEOiAke2lkcy53b3JrZmxvd1J1bkJhY2tlbmRJZH1gKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgV29ya2Zsb3cgSm9iIFJ1biBCYWNrZW5kIElEOiAke2lkcy53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZH1gKTtcbiAgICAgICAgcmV0dXJuIGlkcztcbiAgICB9XG4gICAgdGhyb3cgSW52YWxpZEp3dEVycm9yO1xufVxuZXhwb3J0cy5nZXRCYWNrZW5kSWRzRnJvbVRva2VuID0gZ2V0QmFja2VuZElkc0Zyb21Ub2tlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVFbXB0eVBpcGVsaW5lID0gY3JlYXRlRW1wdHlQaXBlbGluZTtcbmNvbnN0IFZhbGlkUGhhc2VOYW1lcyA9IG5ldyBTZXQoW1wiRGVzZXJpYWxpemVcIiwgXCJTZXJpYWxpemVcIiwgXCJSZXRyeVwiLCBcIlNpZ25cIl0pO1xuLyoqXG4gKiBBIHByaXZhdGUgaW1wbGVtZW50YXRpb24gb2YgUGlwZWxpbmUuXG4gKiBEbyBub3QgZXhwb3J0IHRoaXMgY2xhc3MgZnJvbSB0aGUgcGFja2FnZS5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBIdHRwUGlwZWxpbmUge1xuICAgIGNvbnN0cnVjdG9yKHBvbGljaWVzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5fcG9saWNpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fcG9saWNpZXMgPSAoX2EgPSBwb2xpY2llcyA9PT0gbnVsbCB8fCBwb2xpY2llcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcG9saWNpZXMuc2xpY2UoMCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGFkZFBvbGljeShwb2xpY3ksIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucy5waGFzZSAmJiBvcHRpb25zLmFmdGVyUGhhc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvbGljaWVzIGluc2lkZSBhIHBoYXNlIGNhbm5vdCBzcGVjaWZ5IGFmdGVyUGhhc2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBoYXNlICYmICFWYWxpZFBoYXNlTmFtZXMuaGFzKG9wdGlvbnMucGhhc2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGhhc2UgbmFtZTogJHtvcHRpb25zLnBoYXNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmFmdGVyUGhhc2UgJiYgIVZhbGlkUGhhc2VOYW1lcy5oYXMob3B0aW9ucy5hZnRlclBoYXNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFmdGVyUGhhc2UgbmFtZTogJHtvcHRpb25zLmFmdGVyUGhhc2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcG9saWNpZXMucHVzaCh7XG4gICAgICAgICAgICBwb2xpY3ksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb3JkZXJlZFBvbGljaWVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZW1vdmVQb2xpY3kob3B0aW9ucykge1xuICAgICAgICBjb25zdCByZW1vdmVkUG9saWNpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fcG9saWNpZXMgPSB0aGlzLl9wb2xpY2llcy5maWx0ZXIoKHBvbGljeURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucy5uYW1lICYmIHBvbGljeURlc2NyaXB0b3IucG9saWN5Lm5hbWUgPT09IG9wdGlvbnMubmFtZSkgfHxcbiAgICAgICAgICAgICAgICAob3B0aW9ucy5waGFzZSAmJiBwb2xpY3lEZXNjcmlwdG9yLm9wdGlvbnMucGhhc2UgPT09IG9wdGlvbnMucGhhc2UpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZFBvbGljaWVzLnB1c2gocG9saWN5RGVzY3JpcHRvci5wb2xpY3kpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb3JkZXJlZFBvbGljaWVzID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gcmVtb3ZlZFBvbGljaWVzO1xuICAgIH1cbiAgICBzZW5kUmVxdWVzdChodHRwQ2xpZW50LCByZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHBvbGljaWVzID0gdGhpcy5nZXRPcmRlcmVkUG9saWNpZXMoKTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBwb2xpY2llcy5yZWR1Y2VSaWdodCgobmV4dCwgcG9saWN5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb2xpY3kuc2VuZFJlcXVlc3QocmVxLCBuZXh0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIChyZXEpID0+IGh0dHBDbGllbnQuc2VuZFJlcXVlc3QocmVxKSk7XG4gICAgICAgIHJldHVybiBwaXBlbGluZShyZXF1ZXN0KTtcbiAgICB9XG4gICAgZ2V0T3JkZXJlZFBvbGljaWVzKCkge1xuICAgICAgICBpZiAoIXRoaXMuX29yZGVyZWRQb2xpY2llcykge1xuICAgICAgICAgICAgdGhpcy5fb3JkZXJlZFBvbGljaWVzID0gdGhpcy5vcmRlclBvbGljaWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGVyZWRQb2xpY2llcztcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSHR0cFBpcGVsaW5lKHRoaXMuX3BvbGljaWVzKTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwUGlwZWxpbmUoKTtcbiAgICB9XG4gICAgb3JkZXJQb2xpY2llcygpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBnb2FsIG9mIHRoaXMgbWV0aG9kIGlzIHRvIHJlbGlhYmx5IG9yZGVyIHBpcGVsaW5lIHBvbGljaWVzXG4gICAgICAgICAqIGJhc2VkIG9uIHRoZWlyIGRlY2xhcmVkIHJlcXVpcmVtZW50cyB3aGVuIHRoZXkgd2VyZSBhZGRlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogT3JkZXIgaXMgZmlyc3QgZGV0ZXJtaW5lZCBieSBwaGFzZTpcbiAgICAgICAgICpcbiAgICAgICAgICogMS4gU2VyaWFsaXplIFBoYXNlXG4gICAgICAgICAqIDIuIFBvbGljaWVzIG5vdCBpbiBhIHBoYXNlXG4gICAgICAgICAqIDMuIERlc2VyaWFsaXplIFBoYXNlXG4gICAgICAgICAqIDQuIFJldHJ5IFBoYXNlXG4gICAgICAgICAqIDUuIFNpZ24gUGhhc2VcbiAgICAgICAgICpcbiAgICAgICAgICogV2l0aGluIGVhY2ggcGhhc2UsIHBvbGljaWVzIGFyZSBleGVjdXRlZCBpbiB0aGUgb3JkZXJcbiAgICAgICAgICogdGhleSB3ZXJlIGFkZGVkIHVubGVzcyB0aGV5IHdlcmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGVcbiAgICAgICAgICogYmVmb3JlL2FmdGVyIG90aGVyIHBvbGljaWVzIG9yIGFmdGVyIGEgcGFydGljdWxhciBwaGFzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogVG8gZGV0ZXJtaW5lIHRoZSBmaW5hbCBvcmRlciwgd2Ugd2lsbCB3YWxrIHRoZSBwb2xpY3kgbGlzdFxuICAgICAgICAgKiBpbiBwaGFzZSBvcmRlciBtdWx0aXBsZSB0aW1lcyB1bnRpbCBhbGwgZGVwZW5kZW5jaWVzIGFyZVxuICAgICAgICAgKiBzYXRpc2ZpZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBhZnRlclBvbGljaWVzYCBhcmUgdGhlIHNldCBvZiBwb2xpY2llcyB0aGF0IG11c3QgYmVcbiAgICAgICAgICogZXhlY3V0ZWQgYmVmb3JlIGEgZ2l2ZW4gcG9saWN5LiBUaGlzIHJlcXVpcmVtZW50IGlzXG4gICAgICAgICAqIGNvbnNpZGVyZWQgc2F0aXNmaWVkIHdoZW4gZWFjaCBvZiB0aGUgbGlzdGVkIHBvbGljaWVzXG4gICAgICAgICAqIGhhdmUgYmVlbiBzY2hlZHVsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBiZWZvcmVQb2xpY2llc2AgYXJlIHRoZSBzZXQgb2YgcG9saWNpZXMgdGhhdCBtdXN0IGJlXG4gICAgICAgICAqIGV4ZWN1dGVkIGFmdGVyIGEgZ2l2ZW4gcG9saWN5LiBTaW5jZSB0aGlzIGRlcGVuZGVuY3lcbiAgICAgICAgICogY2FuIGJlIGV4cHJlc3NlZCBieSBjb252ZXJ0aW5nIGl0IGludG8gYSBlcXVpdmFsZW50XG4gICAgICAgICAqIGBhZnRlclBvbGljaWVzYCBkZWNsYXJhdGlvbnMsIHRoZXkgYXJlIG5vcm1hbGl6ZWRcbiAgICAgICAgICogaW50byB0aGF0IGZvcm0gZm9yIHNpbXBsaWNpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEFuIGBhZnRlclBoYXNlYCBkZXBlbmRlbmN5IGlzIGNvbnNpZGVyZWQgc2F0aXNmaWVkIHdoZW4gYWxsXG4gICAgICAgICAqIHBvbGljaWVzIGluIHRoYXQgcGhhc2UgaGF2ZSBzY2hlZHVsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgLy8gVHJhY2sgYWxsIHBvbGljaWVzIHdlIGtub3cgYWJvdXQuXG4gICAgICAgIGNvbnN0IHBvbGljeU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlUGhhc2UobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHBvbGljaWVzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICAgICAgaGFzUnVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoYXNBZnRlclBvbGljaWVzOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhY2sgcG9saWNpZXMgZm9yIGVhY2ggcGhhc2UuXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZVBoYXNlID0gY3JlYXRlUGhhc2UoXCJTZXJpYWxpemVcIik7XG4gICAgICAgIGNvbnN0IG5vUGhhc2UgPSBjcmVhdGVQaGFzZShcIk5vbmVcIik7XG4gICAgICAgIGNvbnN0IGRlc2VyaWFsaXplUGhhc2UgPSBjcmVhdGVQaGFzZShcIkRlc2VyaWFsaXplXCIpO1xuICAgICAgICBjb25zdCByZXRyeVBoYXNlID0gY3JlYXRlUGhhc2UoXCJSZXRyeVwiKTtcbiAgICAgICAgY29uc3Qgc2lnblBoYXNlID0gY3JlYXRlUGhhc2UoXCJTaWduXCIpO1xuICAgICAgICAvLyBhIGxpc3Qgb2YgcGhhc2VzIGluIG9yZGVyXG4gICAgICAgIGNvbnN0IG9yZGVyZWRQaGFzZXMgPSBbc2VyaWFsaXplUGhhc2UsIG5vUGhhc2UsIGRlc2VyaWFsaXplUGhhc2UsIHJldHJ5UGhhc2UsIHNpZ25QaGFzZV07XG4gICAgICAgIC8vIFNtYWxsIGhlbHBlciBmdW5jdGlvbiB0byBtYXAgcGhhc2UgbmFtZSB0byBlYWNoIFBoYXNlXG4gICAgICAgIGZ1bmN0aW9uIGdldFBoYXNlKHBoYXNlKSB7XG4gICAgICAgICAgICBpZiAocGhhc2UgPT09IFwiUmV0cnlcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRyeVBoYXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocGhhc2UgPT09IFwiU2VyaWFsaXplXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwaGFzZSA9PT0gXCJEZXNlcmlhbGl6ZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwaGFzZSA9PT0gXCJTaWduXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnblBoYXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlyc3Qgd2FsayBlYWNoIHBvbGljeSBhbmQgY3JlYXRlIGEgbm9kZSB0byB0cmFjayBtZXRhZGF0YS5cbiAgICAgICAgZm9yIChjb25zdCBkZXNjcmlwdG9yIG9mIHRoaXMuX3BvbGljaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwb2xpY3kgPSBkZXNjcmlwdG9yLnBvbGljeTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkZXNjcmlwdG9yLm9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBwb2xpY3lOYW1lID0gcG9saWN5Lm5hbWU7XG4gICAgICAgICAgICBpZiAocG9saWN5TWFwLmhhcyhwb2xpY3lOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkR1cGxpY2F0ZSBwb2xpY3kgbmFtZXMgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBub2RlID0ge1xuICAgICAgICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICAgICAgICBkZXBlbmRzT246IG5ldyBTZXQoKSxcbiAgICAgICAgICAgICAgICBkZXBlbmRhbnRzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJQaGFzZSkge1xuICAgICAgICAgICAgICAgIG5vZGUuYWZ0ZXJQaGFzZSA9IGdldFBoYXNlKG9wdGlvbnMuYWZ0ZXJQaGFzZSk7XG4gICAgICAgICAgICAgICAgbm9kZS5hZnRlclBoYXNlLmhhc0FmdGVyUG9saWNpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9saWN5TWFwLnNldChwb2xpY3lOYW1lLCBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHBoYXNlID0gZ2V0UGhhc2Uob3B0aW9ucy5waGFzZSk7XG4gICAgICAgICAgICBwaGFzZS5wb2xpY2llcy5hZGQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm93IHRoYXQgZWFjaCBwb2xpY3kgaGFzIGEgbm9kZSwgY29ubmVjdCBkZXBlbmRlbmN5IHJlZmVyZW5jZXMuXG4gICAgICAgIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiB0aGlzLl9wb2xpY2llcykge1xuICAgICAgICAgICAgY29uc3QgeyBwb2xpY3ksIG9wdGlvbnMgfSA9IGRlc2NyaXB0b3I7XG4gICAgICAgICAgICBjb25zdCBwb2xpY3lOYW1lID0gcG9saWN5Lm5hbWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcG9saWN5TWFwLmdldChwb2xpY3lOYW1lKTtcbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBub2RlIGZvciBwb2xpY3kgJHtwb2xpY3lOYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJQb2xpY2llcykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYWZ0ZXJQb2xpY3lOYW1lIG9mIG9wdGlvbnMuYWZ0ZXJQb2xpY2llcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZnRlck5vZGUgPSBwb2xpY3lNYXAuZ2V0KGFmdGVyUG9saWN5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZnRlck5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpbmtpbmcgaW4gYm90aCBkaXJlY3Rpb25zIGhlbHBzIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIHdhbnQgdG8gbm90aWZ5IGRlcGVuZGFudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRlcGVuZHNPbi5hZGQoYWZ0ZXJOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZS5kZXBlbmRhbnRzLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZVBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBiZWZvcmVQb2xpY3lOYW1lIG9mIG9wdGlvbnMuYmVmb3JlUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlTm9kZSA9IHBvbGljeU1hcC5nZXQoYmVmb3JlUG9saWN5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUbyBleGVjdXRlIGJlZm9yZSBhbm90aGVyIG5vZGUsIG1ha2UgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlcGVuZCBvbiB0aGUgY3VycmVudCBub2RlLlxuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlTm9kZS5kZXBlbmRzT24uYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXBlbmRhbnRzLmFkZChiZWZvcmVOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3YWxrUGhhc2UocGhhc2UpIHtcbiAgICAgICAgICAgIHBoYXNlLmhhc1J1biA9IHRydWU7XG4gICAgICAgICAgICAvLyBTZXRzIGl0ZXJhdGUgaW4gaW5zZXJ0aW9uIG9yZGVyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcGhhc2UucG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5hZnRlclBoYXNlICYmICghbm9kZS5hZnRlclBoYXNlLmhhc1J1biB8fCBub2RlLmFmdGVyUGhhc2UucG9saWNpZXMuc2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBub2RlIGlzIHdhaXRpbmcgb24gYSBwaGFzZSB0byBjb21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBza2lwIGl0IGZvciBub3cuXG4gICAgICAgICAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIHBoYXNlIGlzIGVtcHR5LCB3ZSBzaG91bGQgd2FpdCBmb3IgaXRcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgd2Fsa2VkIHRvIGF2b2lkIHJlLW9yZGVyaW5nIHBvbGljaWVzLlxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZGVwZW5kc09uLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBub3RoaW5nIGVsc2Ugd2UncmUgd2FpdGluZyBmb3IsIHdlIGNhblxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhpcyBwb2xpY3kgdG8gdGhlIHJlc3VsdCBsaXN0LlxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub2RlLnBvbGljeSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdGlmeSBhbnl0aGluZyB0aGF0IGRlcGVuZHMgb24gdGhpcyBwb2xpY3kgdGhhdFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcG9saWN5IGhhcyBiZWVuIHNjaGVkdWxlZC5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBlbmRhbnQgb2Ygbm9kZS5kZXBlbmRhbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRhbnQuZGVwZW5kc09uLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwb2xpY3lNYXAuZGVsZXRlKG5vZGUucG9saWN5Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBwaGFzZS5wb2xpY2llcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdhbGtQaGFzZXMoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBoYXNlIG9mIG9yZGVyZWRQaGFzZXMpIHtcbiAgICAgICAgICAgICAgICB3YWxrUGhhc2UocGhhc2UpO1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwaGFzZSBpc24ndCBjb21wbGV0ZVxuICAgICAgICAgICAgICAgIGlmIChwaGFzZS5wb2xpY2llcy5zaXplID4gMCAmJiBwaGFzZSAhPT0gbm9QaGFzZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vUGhhc2UuaGFzUnVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgcnVubmluZyBub1BoYXNlIHRvIHNlZSBpZiB0aGF0IHVuYmxvY2tzIHRoaXMgcGhhc2UgbmV4dCB0aWNrLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIGEgcGhhc2UgdGhhdCBoYXBwZW5zIGJlZm9yZSBub1BoYXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyB3YWl0aW5nIG9uIGEgbm9QaGFzZSBwb2xpY3kgdG8gY29tcGxldGUuXG4gICAgICAgICAgICAgICAgICAgICAgICB3YWxrUGhhc2Uobm9QaGFzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2VlZCB0byB0aGUgbmV4dCBwaGFzZSB1bnRpbCB0aGlzIHBoYXNlIGZpbmlzaGVzLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwaGFzZS5oYXNBZnRlclBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJ1biBhbnkgcG9saWNpZXMgdW5ibG9ja2VkIGJ5IHRoaXMgcGhhc2VcbiAgICAgICAgICAgICAgICAgICAgd2Fsa1BoYXNlKG5vUGhhc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIHdlJ3ZlIHB1dCBldmVyeSBub2RlIGluIHRoZSByZXN1bHQgbGlzdC5cbiAgICAgICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgICAgIHdoaWxlIChwb2xpY3lNYXAuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGl0ZXJhdGlvbisrO1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbFJlc3VsdExlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG4gICAgICAgICAgICAvLyBLZWVwIHdhbGtpbmcgZWFjaCBwaGFzZSBpbiBvcmRlciB1bnRpbCB3ZSBjYW4gb3JkZXIgZXZlcnkgbm9kZS5cbiAgICAgICAgICAgIHdhbGtQaGFzZXMoKTtcbiAgICAgICAgICAgIC8vIFRoZSByZXN1bHQgbGlzdCAqc2hvdWxkKiBnZXQgYXQgbGVhc3Qgb25lIGxhcmdlciBlYWNoIHRpbWVcbiAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBmdWxsIHBhc3MuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGdvaW5nIHRvIGxvb3AgZm9yZXZlci5cbiAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoIDw9IGluaXRpYWxSZXN1bHRMZW5ndGggJiYgaXRlcmF0aW9uID4gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzYXRpc2Z5IHBvbGljeSBkZXBlbmRlbmNpZXMgZHVlIHRvIHJlcXVpcmVtZW50cyBjeWNsZS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSB0b3RhbGx5IGVtcHR5IHBpcGVsaW5lLlxuICogVXNlZnVsIGZvciB0ZXN0aW5nIG9yIGNyZWF0aW5nIGEgY3VzdG9tIG9uZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRW1wdHlQaXBlbGluZSgpIHtcbiAgICByZXR1cm4gSHR0cFBpcGVsaW5lLmNyZWF0ZSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZWxpbmUuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIGdsb2JhbCwgZGVmaW5lLCBTeW1ib2wsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgSXRlcmF0b3IgKi9cclxudmFyIF9fZXh0ZW5kcztcclxudmFyIF9fYXNzaWduO1xyXG52YXIgX19yZXN0O1xyXG52YXIgX19kZWNvcmF0ZTtcclxudmFyIF9fcGFyYW07XHJcbnZhciBfX2VzRGVjb3JhdGU7XHJcbnZhciBfX3J1bkluaXRpYWxpemVycztcclxudmFyIF9fcHJvcEtleTtcclxudmFyIF9fc2V0RnVuY3Rpb25OYW1lO1xyXG52YXIgX19tZXRhZGF0YTtcclxudmFyIF9fYXdhaXRlcjtcclxudmFyIF9fZ2VuZXJhdG9yO1xyXG52YXIgX19leHBvcnRTdGFyO1xyXG52YXIgX192YWx1ZXM7XHJcbnZhciBfX3JlYWQ7XHJcbnZhciBfX3NwcmVhZDtcclxudmFyIF9fc3ByZWFkQXJyYXlzO1xyXG52YXIgX19zcHJlYWRBcnJheTtcclxudmFyIF9fYXdhaXQ7XHJcbnZhciBfX2FzeW5jR2VuZXJhdG9yO1xyXG52YXIgX19hc3luY0RlbGVnYXRvcjtcclxudmFyIF9fYXN5bmNWYWx1ZXM7XHJcbnZhciBfX21ha2VUZW1wbGF0ZU9iamVjdDtcclxudmFyIF9faW1wb3J0U3RhcjtcclxudmFyIF9faW1wb3J0RGVmYXVsdDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEluO1xyXG52YXIgX19jcmVhdGVCaW5kaW5nO1xyXG52YXIgX19hZGREaXNwb3NhYmxlUmVzb3VyY2U7XHJcbnZhciBfX2Rpc3Bvc2VSZXNvdXJjZXM7XHJcbnZhciBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbjtcclxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2YgdGhpcyA9PT0gXCJvYmplY3RcIiA/IHRoaXMgOiB7fTtcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIGRlZmluZShcInRzbGliXCIsIFtcImV4cG9ydHNcIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7IGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cykpKTsgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIobW9kdWxlLmV4cG9ydHMpKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QpKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4cG9ydGVyKGV4cG9ydHMsIHByZXZpb3VzKSB7XHJcbiAgICAgICAgaWYgKGV4cG9ydHMgIT09IHJvb3QpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpZCwgdikgeyByZXR1cm4gZXhwb3J0c1tpZF0gPSBwcmV2aW91cyA/IHByZXZpb3VzKGlkLCB2KSA6IHY7IH07XHJcbiAgICB9XHJcbn0pXHJcbihmdW5jdGlvbiAoZXhwb3J0ZXIpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG4gICAgX19leHRlbmRzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcblxyXG4gICAgX19yZXN0ID0gZnVuY3Rpb24gKHMsIGUpIHtcclxuICAgICAgICB2YXIgdCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcclxuICAgICAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2RlY29yYXRlID0gZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICAgICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICAgICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxuICAgIH07XHJcblxyXG4gICAgX19wYXJhbSA9IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19lc0RlY29yYXRlID0gZnVuY3Rpb24gKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcclxuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgICAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcclxuICAgICAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xyXG4gICAgICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcnVuSW5pdGlhbGl6ZXJzID0gZnVuY3Rpb24gKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Byb3BLZXkgPSBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcclxuICAgIH07XHJcblxyXG4gICAgX19zZXRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiAoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX21ldGFkYXRhID0gZnVuY3Rpb24gKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hd2FpdGVyID0gZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZ2VuZXJhdG9yID0gZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgICAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcclxuICAgICAgICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgX19leHBvcnRTdGFyID0gZnVuY3Rpb24obSwgbykge1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxuICAgIH07XHJcblxyXG4gICAgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbiAgICB9KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgb1trMl0gPSBtW2tdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgX192YWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICAgICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmVhZCA9IGZ1bmN0aW9uIChvLCBuKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICAgICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIEBkZXByZWNhdGVkICovXHJcbiAgICBfX3NwcmVhZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIEBkZXByZWNhdGVkICovXHJcbiAgICBfX3NwcmVhZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fc3ByZWFkQXJyYXkgPSBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcclxuICAgICAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0dlbmVyYXRvciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICAgICAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0RlbGVnYXRvciA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIGksIHA7XHJcbiAgICAgICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jVmFsdWVzID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgICAgICByZXR1cm4gY29va2VkO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG4gICAgfSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydFN0YXIgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgX19pbXBvcnREZWZhdWx0ID0gZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgICAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICAgICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbiA9IGZ1bmN0aW9uIChzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgICAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSA9IGZ1bmN0aW9uIChlbnYsIHZhbHVlLCBhc3luYykge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xyXG4gICAgICAgICAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XHJcbiAgICAgICAgICAgIGlmIChhc3luYykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XHJcbiAgICAgICAgICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xyXG4gICAgICAgICAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhc3luYykge1xyXG4gICAgICAgICAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxuICAgIH07XHJcblxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzID0gZnVuY3Rpb24gKGVudikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZhaWwoZSkge1xyXG4gICAgICAgICAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XHJcbiAgICAgICAgICAgIGVudi5oYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByLCBzID0gMDtcclxuICAgICAgICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgICAgICAgICB3aGlsZSAociA9IGVudi5zdGFjay5wb3AoKSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoci5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuYXN5bmMpIHJldHVybiBzIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBzIHw9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhaWwoZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcclxuICAgIH07XHJcblxyXG4gICAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24gPSBmdW5jdGlvbiAocGF0aCwgcHJlc2VydmVKc3gpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgJiYgL15cXC5cXC4/XFwvLy50ZXN0KHBhdGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHN4ID8gcHJlc2VydmVKc3ggPyBcIi5qc3hcIiA6IFwiLmpzXCIgOiBkICYmICghZXh0IHx8ICFjbSkgPyBtIDogKGQgKyBleHQgKyBcIi5cIiArIGNtLnRvTG93ZXJDYXNlKCkgKyBcImpzXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICB9O1xyXG5cclxuICAgIGV4cG9ydGVyKFwiX19leHRlbmRzXCIsIF9fZXh0ZW5kcyk7XHJcbiAgICBleHBvcnRlcihcIl9fYXNzaWduXCIsIF9fYXNzaWduKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZXN0XCIsIF9fcmVzdCk7XHJcbiAgICBleHBvcnRlcihcIl9fZGVjb3JhdGVcIiwgX19kZWNvcmF0ZSk7XHJcbiAgICBleHBvcnRlcihcIl9fcGFyYW1cIiwgX19wYXJhbSk7XHJcbiAgICBleHBvcnRlcihcIl9fZXNEZWNvcmF0ZVwiLCBfX2VzRGVjb3JhdGUpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3J1bkluaXRpYWxpemVyc1wiLCBfX3J1bkluaXRpYWxpemVycyk7XHJcbiAgICBleHBvcnRlcihcIl9fcHJvcEtleVwiLCBfX3Byb3BLZXkpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NldEZ1bmN0aW9uTmFtZVwiLCBfX3NldEZ1bmN0aW9uTmFtZSk7XHJcbiAgICBleHBvcnRlcihcIl9fbWV0YWRhdGFcIiwgX19tZXRhZGF0YSk7XHJcbiAgICBleHBvcnRlcihcIl9fYXdhaXRlclwiLCBfX2F3YWl0ZXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2dlbmVyYXRvclwiLCBfX2dlbmVyYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fZXhwb3J0U3RhclwiLCBfX2V4cG9ydFN0YXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NyZWF0ZUJpbmRpbmdcIiwgX19jcmVhdGVCaW5kaW5nKTtcclxuICAgIGV4cG9ydGVyKFwiX192YWx1ZXNcIiwgX192YWx1ZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3JlYWRcIiwgX19yZWFkKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRcIiwgX19zcHJlYWQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZEFycmF5c1wiLCBfX3NwcmVhZEFycmF5cyk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkQXJyYXlcIiwgX19zcHJlYWRBcnJheSk7XHJcbiAgICBleHBvcnRlcihcIl9fYXdhaXRcIiwgX19hd2FpdCk7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNHZW5lcmF0b3JcIiwgX19hc3luY0dlbmVyYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNEZWxlZ2F0b3JcIiwgX19hc3luY0RlbGVnYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNWYWx1ZXNcIiwgX19hc3luY1ZhbHVlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fbWFrZVRlbXBsYXRlT2JqZWN0XCIsIF9fbWFrZVRlbXBsYXRlT2JqZWN0KTtcclxuICAgIGV4cG9ydGVyKFwiX19pbXBvcnRTdGFyXCIsIF9faW1wb3J0U3Rhcik7XHJcbiAgICBleHBvcnRlcihcIl9faW1wb3J0RGVmYXVsdFwiLCBfX2ltcG9ydERlZmF1bHQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0XCIsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0XCIsIF9fY2xhc3NQcml2YXRlRmllbGRTZXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkSW5cIiwgX19jbGFzc1ByaXZhdGVGaWVsZEluKTtcclxuICAgIGV4cG9ydGVyKFwiX19hZGREaXNwb3NhYmxlUmVzb3VyY2VcIiwgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2Rpc3Bvc2VSZXNvdXJjZXNcIiwgX19kaXNwb3NlUmVzb3VyY2VzKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb25cIiwgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24pO1xyXG59KTtcclxuXHJcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgX19leHRlbmRzLFxyXG4gICAgX19hc3NpZ24sXHJcbiAgICBfX3Jlc3QsXHJcbiAgICBfX2RlY29yYXRlLFxyXG4gICAgX19wYXJhbSxcclxuICAgIF9fZXNEZWNvcmF0ZSxcclxuICAgIF9fcnVuSW5pdGlhbGl6ZXJzLFxyXG4gICAgX19wcm9wS2V5LFxyXG4gICAgX19zZXRGdW5jdGlvbk5hbWUsXHJcbiAgICBfX21ldGFkYXRhLFxyXG4gICAgX19hd2FpdGVyLFxyXG4gICAgX19nZW5lcmF0b3IsXHJcbiAgICBfX2V4cG9ydFN0YXIsXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmcsXHJcbiAgICBfX3ZhbHVlcyxcclxuICAgIF9fcmVhZCxcclxuICAgIF9fc3ByZWFkLFxyXG4gICAgX19zcHJlYWRBcnJheXMsXHJcbiAgICBfX3NwcmVhZEFycmF5LFxyXG4gICAgX19hd2FpdCxcclxuICAgIF9fYXN5bmNHZW5lcmF0b3IsXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yLFxyXG4gICAgX19hc3luY1ZhbHVlcyxcclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxyXG4gICAgX19pbXBvcnRTdGFyLFxyXG4gICAgX19pbXBvcnREZWZhdWx0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXHJcbiAgICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcclxuICAgIF9fZGlzcG9zZVJlc291cmNlcyxcclxuICAgIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxyXG59KTtcclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3Qgbm9kZV9vc18xID0gcmVxdWlyZShcIm5vZGU6b3NcIik7XG5jb25zdCBub2RlX3V0aWxfMSA9IHRzbGliXzEuX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJub2RlOnV0aWxcIikpO1xuY29uc3QgcHJvY2VzcyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOnByb2Nlc3NcIikpO1xuZnVuY3Rpb24gbG9nKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgJHtub2RlX3V0aWxfMS5kZWZhdWx0LmZvcm1hdChtZXNzYWdlLCAuLi5hcmdzKX0ke25vZGVfb3NfMS5FT0x9YCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2cuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG5jb25zdCBkZWJ1Z0VudlZhcmlhYmxlID0gKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LkRFQlVHKSB8fCB1bmRlZmluZWQ7XG5sZXQgZW5hYmxlZFN0cmluZztcbmxldCBlbmFibGVkTmFtZXNwYWNlcyA9IFtdO1xubGV0IHNraXBwZWROYW1lc3BhY2VzID0gW107XG5jb25zdCBkZWJ1Z2dlcnMgPSBbXTtcbmlmIChkZWJ1Z0VudlZhcmlhYmxlKSB7XG4gICAgZW5hYmxlKGRlYnVnRW52VmFyaWFibGUpO1xufVxuY29uc3QgZGVidWdPYmogPSBPYmplY3QuYXNzaWduKChuYW1lc3BhY2UpID0+IHtcbiAgICByZXR1cm4gY3JlYXRlRGVidWdnZXIobmFtZXNwYWNlKTtcbn0sIHtcbiAgICBlbmFibGUsXG4gICAgZW5hYmxlZCxcbiAgICBkaXNhYmxlLFxuICAgIGxvZzogbG9nX2pzXzEubG9nLFxufSk7XG5mdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuICAgIGVuYWJsZWRTdHJpbmcgPSBuYW1lc3BhY2VzO1xuICAgIGVuYWJsZWROYW1lc3BhY2VzID0gW107XG4gICAgc2tpcHBlZE5hbWVzcGFjZXMgPSBbXTtcbiAgICBjb25zdCB3aWxkY2FyZCA9IC9cXCovZztcbiAgICBjb25zdCBuYW1lc3BhY2VMaXN0ID0gbmFtZXNwYWNlcy5zcGxpdChcIixcIikubWFwKChucykgPT4gbnMudHJpbSgpLnJlcGxhY2Uod2lsZGNhcmQsIFwiLio/XCIpKTtcbiAgICBmb3IgKGNvbnN0IG5zIG9mIG5hbWVzcGFjZUxpc3QpIHtcbiAgICAgICAgaWYgKG5zLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgICBza2lwcGVkTmFtZXNwYWNlcy5wdXNoKG5ldyBSZWdFeHAoYF4ke25zLnN1YnN0cigxKX0kYCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZW5hYmxlZE5hbWVzcGFjZXMucHVzaChuZXcgUmVnRXhwKGBeJHtuc30kYCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgZGVidWdnZXJzKSB7XG4gICAgICAgIGluc3RhbmNlLmVuYWJsZWQgPSBlbmFibGVkKGluc3RhbmNlLm5hbWVzcGFjZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5hYmxlZChuYW1lc3BhY2UpIHtcbiAgICBpZiAobmFtZXNwYWNlLmVuZHNXaXRoKFwiKlwiKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBza2lwcGVkIG9mIHNraXBwZWROYW1lc3BhY2VzKSB7XG4gICAgICAgIGlmIChza2lwcGVkLnRlc3QobmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgZW5hYmxlZE5hbWVzcGFjZSBvZiBlbmFibGVkTmFtZXNwYWNlcykge1xuICAgICAgICBpZiAoZW5hYmxlZE5hbWVzcGFjZS50ZXN0KG5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZW5hYmxlZFN0cmluZyB8fCBcIlwiO1xuICAgIGVuYWJsZShcIlwiKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY3JlYXRlRGVidWdnZXIobmFtZXNwYWNlKSB7XG4gICAgY29uc3QgbmV3RGVidWdnZXIgPSBPYmplY3QuYXNzaWduKGRlYnVnLCB7XG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQobmFtZXNwYWNlKSxcbiAgICAgICAgZGVzdHJveSxcbiAgICAgICAgbG9nOiBkZWJ1Z09iai5sb2csXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgZXh0ZW5kLFxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKCFuZXdEZWJ1Z2dlci5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXJnc1swXSA9IGAke25hbWVzcGFjZX0gJHthcmdzWzBdfWA7XG4gICAgICAgIH1cbiAgICAgICAgbmV3RGVidWdnZXIubG9nKC4uLmFyZ3MpO1xuICAgIH1cbiAgICBkZWJ1Z2dlcnMucHVzaChuZXdEZWJ1Z2dlcik7XG4gICAgcmV0dXJuIG5ld0RlYnVnZ2VyO1xufVxuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBjb25zdCBpbmRleCA9IGRlYnVnZ2Vycy5pbmRleE9mKHRoaXMpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGRlYnVnZ2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSkge1xuICAgIGNvbnN0IG5ld0RlYnVnZ2VyID0gY3JlYXRlRGVidWdnZXIoYCR7dGhpcy5uYW1lc3BhY2V9OiR7bmFtZXNwYWNlfWApO1xuICAgIG5ld0RlYnVnZ2VyLmxvZyA9IHRoaXMubG9nO1xuICAgIHJldHVybiBuZXdEZWJ1Z2dlcjtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGRlYnVnT2JqO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVidWcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZUxvZ2dlciA9IHZvaWQgMDtcbmV4cG9ydHMuc2V0TG9nTGV2ZWwgPSBzZXRMb2dMZXZlbDtcbmV4cG9ydHMuZ2V0TG9nTGV2ZWwgPSBnZXRMb2dMZXZlbDtcbmV4cG9ydHMuY3JlYXRlQ2xpZW50TG9nZ2VyID0gY3JlYXRlQ2xpZW50TG9nZ2VyO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGRlYnVnX2pzXzEgPSB0c2xpYl8xLl9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9kZWJ1Zy5qc1wiKSk7XG5jb25zdCByZWdpc3RlcmVkTG9nZ2VycyA9IG5ldyBTZXQoKTtcbmNvbnN0IGxvZ0xldmVsRnJvbUVudiA9ICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5BWlVSRV9MT0dfTEVWRUwpIHx8IHVuZGVmaW5lZDtcbmxldCBhenVyZUxvZ0xldmVsO1xuLyoqXG4gKiBUaGUgQXp1cmVMb2dnZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIG92ZXJyaWRpbmcgd2hlcmUgbG9ncyBhcmUgb3V0cHV0IHRvLlxuICogQnkgZGVmYXVsdCwgbG9ncyBhcmUgc2VudCB0byBzdGRlcnIuXG4gKiBPdmVycmlkZSB0aGUgYGxvZ2AgbWV0aG9kIHRvIHJlZGlyZWN0IGxvZ3MgdG8gYW5vdGhlciBsb2NhdGlvbi5cbiAqL1xuZXhwb3J0cy5BenVyZUxvZ2dlciA9ICgwLCBkZWJ1Z19qc18xLmRlZmF1bHQpKFwiYXp1cmVcIik7XG5leHBvcnRzLkF6dXJlTG9nZ2VyLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgZGVidWdfanNfMS5kZWZhdWx0LmxvZyguLi5hcmdzKTtcbn07XG5jb25zdCBBWlVSRV9MT0dfTEVWRUxTID0gW1widmVyYm9zZVwiLCBcImluZm9cIiwgXCJ3YXJuaW5nXCIsIFwiZXJyb3JcIl07XG5pZiAobG9nTGV2ZWxGcm9tRW52KSB7XG4gICAgLy8gYXZvaWQgY2FsbGluZyBzZXRMb2dMZXZlbCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYSBtaXMtc2V0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGNyYXNoXG4gICAgaWYgKGlzQXp1cmVMb2dMZXZlbChsb2dMZXZlbEZyb21FbnYpKSB7XG4gICAgICAgIHNldExvZ0xldmVsKGxvZ0xldmVsRnJvbUVudik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBBWlVSRV9MT0dfTEVWRUwgc2V0IHRvIHVua25vd24gbG9nIGxldmVsICcke2xvZ0xldmVsRnJvbUVudn0nOyBsb2dnaW5nIGlzIG5vdCBlbmFibGVkLiBBY2NlcHRhYmxlIHZhbHVlczogJHtBWlVSRV9MT0dfTEVWRUxTLmpvaW4oXCIsIFwiKX0uYCk7XG4gICAgfVxufVxuLyoqXG4gKiBJbW1lZGlhdGVseSBlbmFibGVzIGxvZ2dpbmcgYXQgdGhlIHNwZWNpZmllZCBsb2cgbGV2ZWwuIElmIG5vIGxldmVsIGlzIHNwZWNpZmllZCwgbG9nZ2luZyBpcyBkaXNhYmxlZC5cbiAqIEBwYXJhbSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgdG8gZW5hYmxlIGZvciBsb2dnaW5nLlxuICogT3B0aW9ucyBmcm9tIG1vc3QgdmVyYm9zZSB0byBsZWFzdCB2ZXJib3NlIGFyZTpcbiAqIC0gdmVyYm9zZVxuICogLSBpbmZvXG4gKiAtIHdhcm5pbmdcbiAqIC0gZXJyb3JcbiAqL1xuZnVuY3Rpb24gc2V0TG9nTGV2ZWwobGV2ZWwpIHtcbiAgICBpZiAobGV2ZWwgJiYgIWlzQXp1cmVMb2dMZXZlbChsZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvZyBsZXZlbCAnJHtsZXZlbH0nLiBBY2NlcHRhYmxlIHZhbHVlczogJHtBWlVSRV9MT0dfTEVWRUxTLmpvaW4oXCIsXCIpfWApO1xuICAgIH1cbiAgICBhenVyZUxvZ0xldmVsID0gbGV2ZWw7XG4gICAgY29uc3QgZW5hYmxlZE5hbWVzcGFjZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxvZ2dlciBvZiByZWdpc3RlcmVkTG9nZ2Vycykge1xuICAgICAgICBpZiAoc2hvdWxkRW5hYmxlKGxvZ2dlcikpIHtcbiAgICAgICAgICAgIGVuYWJsZWROYW1lc3BhY2VzLnB1c2gobG9nZ2VyLm5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVidWdfanNfMS5kZWZhdWx0LmVuYWJsZShlbmFibGVkTmFtZXNwYWNlcy5qb2luKFwiLFwiKSk7XG59XG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IHNwZWNpZmllZCBsb2cgbGV2ZWwuXG4gKi9cbmZ1bmN0aW9uIGdldExvZ0xldmVsKCkge1xuICAgIHJldHVybiBhenVyZUxvZ0xldmVsO1xufVxuY29uc3QgbGV2ZWxNYXAgPSB7XG4gICAgdmVyYm9zZTogNDAwLFxuICAgIGluZm86IDMwMCxcbiAgICB3YXJuaW5nOiAyMDAsXG4gICAgZXJyb3I6IDEwMCxcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBsb2dnZXIgZm9yIHVzZSBieSB0aGUgQXp1cmUgU0RLcyB0aGF0IGluaGVyaXRzIGZyb20gYEF6dXJlTG9nZ2VyYC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZSBvZiB0aGUgU0RLIHBhY2thZ2UuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudExvZ2dlcihuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBjbGllbnRSb290TG9nZ2VyID0gZXhwb3J0cy5BenVyZUxvZ2dlci5leHRlbmQobmFtZXNwYWNlKTtcbiAgICBwYXRjaExvZ01ldGhvZChleHBvcnRzLkF6dXJlTG9nZ2VyLCBjbGllbnRSb290TG9nZ2VyKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwiZXJyb3JcIiksXG4gICAgICAgIHdhcm5pbmc6IGNyZWF0ZUxvZ2dlcihjbGllbnRSb290TG9nZ2VyLCBcIndhcm5pbmdcIiksXG4gICAgICAgIGluZm86IGNyZWF0ZUxvZ2dlcihjbGllbnRSb290TG9nZ2VyLCBcImluZm9cIiksXG4gICAgICAgIHZlcmJvc2U6IGNyZWF0ZUxvZ2dlcihjbGllbnRSb290TG9nZ2VyLCBcInZlcmJvc2VcIiksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhdGNoTG9nTWV0aG9kKHBhcmVudCwgY2hpbGQpIHtcbiAgICBjaGlsZC5sb2cgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBwYXJlbnQubG9nKC4uLmFyZ3MpO1xuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVMb2dnZXIocGFyZW50LCBsZXZlbCkge1xuICAgIGNvbnN0IGxvZ2dlciA9IE9iamVjdC5hc3NpZ24ocGFyZW50LmV4dGVuZChsZXZlbCksIHtcbiAgICAgICAgbGV2ZWwsXG4gICAgfSk7XG4gICAgcGF0Y2hMb2dNZXRob2QocGFyZW50LCBsb2dnZXIpO1xuICAgIGlmIChzaG91bGRFbmFibGUobG9nZ2VyKSkge1xuICAgICAgICBjb25zdCBlbmFibGVkTmFtZXNwYWNlcyA9IGRlYnVnX2pzXzEuZGVmYXVsdC5kaXNhYmxlKCk7XG4gICAgICAgIGRlYnVnX2pzXzEuZGVmYXVsdC5lbmFibGUoZW5hYmxlZE5hbWVzcGFjZXMgKyBcIixcIiArIGxvZ2dlci5uYW1lc3BhY2UpO1xuICAgIH1cbiAgICByZWdpc3RlcmVkTG9nZ2Vycy5hZGQobG9nZ2VyKTtcbiAgICByZXR1cm4gbG9nZ2VyO1xufVxuZnVuY3Rpb24gc2hvdWxkRW5hYmxlKGxvZ2dlcikge1xuICAgIHJldHVybiBCb29sZWFuKGF6dXJlTG9nTGV2ZWwgJiYgbGV2ZWxNYXBbbG9nZ2VyLmxldmVsXSA8PSBsZXZlbE1hcFthenVyZUxvZ0xldmVsXSk7XG59XG5mdW5jdGlvbiBpc0F6dXJlTG9nTGV2ZWwobG9nTGV2ZWwpIHtcbiAgICByZXR1cm4gQVpVUkVfTE9HX0xFVkVMUy5pbmNsdWRlcyhsb2dMZXZlbCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZ2dlciA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG5leHBvcnRzLmxvZ2dlciA9ICgwLCBsb2dnZXJfMS5jcmVhdGVDbGllbnRMb2dnZXIpKFwiY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWJvcnRFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogVGhpcyBlcnJvciBpcyB0aHJvd24gd2hlbiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGhhcyBiZWVuIGFib3J0ZWQuXG4gKiBDaGVjayBmb3IgdGhpcyBlcnJvciBieSB0ZXN0aW5nIHRoZSBgbmFtZWAgdGhhdCB0aGUgbmFtZSBwcm9wZXJ0eSBvZiB0aGVcbiAqIGVycm9yIG1hdGNoZXMgYFwiQWJvcnRFcnJvclwiYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gKiBjb250cm9sbGVyLmFib3J0KCk7XG4gKiB0cnkge1xuICogICBkb0FzeW5jV29yayhjb250cm9sbGVyLnNpZ25hbClcbiAqIH0gY2F0Y2ggKGUpIHtcbiAqICAgaWYgKGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gKiAgICAgLy8gaGFuZGxlIGFib3J0IGVycm9yIGhlcmUuXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5jbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICAgIH1cbn1cbmV4cG9ydHMuQWJvcnRFcnJvciA9IEFib3J0RXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYm9ydEVycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWJvcnRFcnJvciA9IHZvaWQgMDtcbnZhciBBYm9ydEVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi9BYm9ydEVycm9yLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWJvcnRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQWJvcnRFcnJvcl9qc18xLkFib3J0RXJyb3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUFib3J0YWJsZVByb21pc2UgPSBjcmVhdGVBYm9ydGFibGVQcm9taXNlO1xuY29uc3QgYWJvcnRfY29udHJvbGxlcl8xID0gcmVxdWlyZShcIkBhenVyZS9hYm9ydC1jb250cm9sbGVyXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGFuIGFib3J0YWJsZSBwcm9taXNlLlxuICogQHBhcmFtIGJ1aWxkUHJvbWlzZSAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1bmN0aW9ucyBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGFib3J0YWJsZSBwcm9taXNlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgY2FuIGJlIGFib3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFib3J0YWJsZVByb21pc2UoYnVpbGRQcm9taXNlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgeyBjbGVhbnVwQmVmb3JlQWJvcnQsIGFib3J0U2lnbmFsLCBhYm9ydEVycm9yTXNnIH0gPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBmdW5jdGlvbiByZWplY3RPbkFib3J0KCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBhYm9ydF9jb250cm9sbGVyXzEuQWJvcnRFcnJvcihhYm9ydEVycm9yTXNnICE9PSBudWxsICYmIGFib3J0RXJyb3JNc2cgIT09IHZvaWQgMCA/IGFib3J0RXJyb3JNc2cgOiBcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBhYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uQWJvcnQoKSB7XG4gICAgICAgICAgICBjbGVhbnVwQmVmb3JlQWJvcnQgPT09IG51bGwgfHwgY2xlYW51cEJlZm9yZUFib3J0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGVhbnVwQmVmb3JlQWJvcnQoKTtcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgICAgICAgcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBhYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdE9uQWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYnVpbGRQcm9taXNlKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh4KTtcbiAgICAgICAgICAgIH0sICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgYWJvcnRTaWduYWwgPT09IG51bGwgfHwgYWJvcnRTaWduYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZUFib3J0YWJsZVByb21pc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlID0gZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZTtcbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIHZhbHVlIGJldHdlZW4gYSBsb3dlciBhbmQgdXBwZXIgYm91bmQsXG4gKiBpbmNsdXNpdmUgb2YgYm90aCBib3VuZHMuXG4gKiBOb3RlIHRoYXQgdGhpcyB1c2VzIE1hdGgucmFuZG9tIGFuZCBpc24ndCBzZWN1cmUuIElmIHlvdSBuZWVkIHRvIHVzZVxuICogdGhpcyBmb3IgYW55IGtpbmQgb2Ygc2VjdXJpdHkgcHVycG9zZSwgZmluZCBhIGJldHRlciBzb3VyY2Ugb2YgcmFuZG9tLlxuICogQHBhcmFtIG1pbiAtIFRoZSBzbWFsbGVzdCBpbnRlZ2VyIHZhbHVlIGFsbG93ZWQuXG4gKiBAcGFyYW0gbWF4IC0gVGhlIGxhcmdlc3QgaW50ZWdlciB2YWx1ZSBhbGxvd2VkLlxuICovXG5mdW5jdGlvbiBnZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlKG1pbiwgbWF4KSB7XG4gICAgLy8gTWFrZSBzdXJlIGlucHV0cyBhcmUgaW50ZWdlcnMuXG4gICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgIC8vIFBpY2sgYSByYW5kb20gb2Zmc2V0IGZyb20gemVybyB0byB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UuXG4gICAgLy8gU2luY2UgTWF0aC5yYW5kb20oKSBjYW4gbmV2ZXIgcmV0dXJuIDEsIHdlIGhhdmUgdG8gbWFrZSB0aGUgcmFuZ2Ugb25lIGxhcmdlclxuICAgIC8vIGluIG9yZGVyIHRvIGJlIGluY2x1c2l2ZSBvZiB0aGUgbWF4aW11bSB2YWx1ZSBhZnRlciB3ZSB0YWtlIHRoZSBmbG9vci5cbiAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICAgIHJldHVybiBvZmZzZXQgKyBtaW47XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYW5kb20uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWxheSA9IGRlbGF5O1xuZXhwb3J0cy5jYWxjdWxhdGVSZXRyeURlbGF5ID0gY2FsY3VsYXRlUmV0cnlEZWxheTtcbmNvbnN0IGNyZWF0ZUFib3J0YWJsZVByb21pc2VfanNfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanNcIik7XG5jb25zdCByYW5kb21fanNfMSA9IHJlcXVpcmUoXCIuL3JhbmRvbS5qc1wiKTtcbmNvbnN0IFN0YW5kYXJkQWJvcnRNZXNzYWdlID0gXCJUaGUgZGVsYXkgd2FzIGFib3J0ZWQuXCI7XG4vKipcbiAqIEEgd3JhcHBlciBmb3Igc2V0VGltZW91dCB0aGF0IHJlc29sdmVzIGEgcHJvbWlzZSBhZnRlciB0aW1lSW5NcyBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gdGltZUluTXMgLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBiZSBkZWxheWVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGVsYXkgLSBjdXJyZW50bHkgYWJvcnQgb3B0aW9uc1xuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGFmdGVyIHRpbWVJbk1zXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KHRpbWVJbk1zLCBvcHRpb25zKSB7XG4gICAgbGV0IHRva2VuO1xuICAgIGNvbnN0IHsgYWJvcnRTaWduYWwsIGFib3J0RXJyb3JNc2cgfSA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgIHJldHVybiAoMCwgY3JlYXRlQWJvcnRhYmxlUHJvbWlzZV9qc18xLmNyZWF0ZUFib3J0YWJsZVByb21pc2UpKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRva2VuID0gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lSW5Ncyk7XG4gICAgfSwge1xuICAgICAgICBjbGVhbnVwQmVmb3JlQWJvcnQ6ICgpID0+IGNsZWFyVGltZW91dCh0b2tlbiksXG4gICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICBhYm9ydEVycm9yTXNnOiBhYm9ydEVycm9yTXNnICE9PSBudWxsICYmIGFib3J0RXJyb3JNc2cgIT09IHZvaWQgMCA/IGFib3J0RXJyb3JNc2cgOiBTdGFuZGFyZEFib3J0TWVzc2FnZSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZGVsYXkgaW50ZXJ2YWwgZm9yIHJldHJ5IGF0dGVtcHRzIHVzaW5nIGV4cG9uZW50aWFsIGRlbGF5IHdpdGggaml0dGVyLlxuICogQHBhcmFtIHJldHJ5QXR0ZW1wdCAtIFRoZSBjdXJyZW50IHJldHJ5IGF0dGVtcHQgbnVtYmVyLlxuICogQHBhcmFtIGNvbmZpZyAtIFRoZSBleHBvbmVudGlhbCByZXRyeSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNhbGN1bGF0ZWQgcmV0cnkgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZVJldHJ5RGVsYXkocmV0cnlBdHRlbXB0LCBjb25maWcpIHtcbiAgICAvLyBFeHBvbmVudGlhbGx5IGluY3JlYXNlIHRoZSBkZWxheSBlYWNoIHRpbWVcbiAgICBjb25zdCBleHBvbmVudGlhbERlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXlJbk1zICogTWF0aC5wb3coMiwgcmV0cnlBdHRlbXB0KTtcbiAgICAvLyBEb24ndCBsZXQgdGhlIGRlbGF5IGV4Y2VlZCB0aGUgbWF4aW11bVxuICAgIGNvbnN0IGNsYW1wZWREZWxheSA9IE1hdGgubWluKGNvbmZpZy5tYXhSZXRyeURlbGF5SW5NcywgZXhwb25lbnRpYWxEZWxheSk7XG4gICAgLy8gQWxsb3cgdGhlIGZpbmFsIHZhbHVlIHRvIGhhdmUgc29tZSBcImppdHRlclwiICh3aXRoaW4gNTAlIG9mIHRoZSBkZWxheSBzaXplKSBzb1xuICAgIC8vIHRoYXQgcmV0cmllcyBhY3Jvc3MgbXVsdGlwbGUgY2xpZW50cyBkb24ndCBvY2N1ciBzaW11bHRhbmVvdXNseS5cbiAgICBjb25zdCByZXRyeUFmdGVySW5NcyA9IGNsYW1wZWREZWxheSAvIDIgKyAoMCwgcmFuZG9tX2pzXzEuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZSkoMCwgY2xhbXBlZERlbGF5IC8gMik7XG4gICAgcmV0dXJuIHsgcmV0cnlBZnRlckluTXMgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2FuY2VsYWJsZVByb21pc2VSYWNlID0gY2FuY2VsYWJsZVByb21pc2VSYWNlO1xuLyoqXG4gKiBwcm9taXNlLnJhY2UoKSB3cmFwcGVyIHRoYXQgYWJvcnRzIHJlc3Qgb2YgcHJvbWlzZXMgYXMgc29vbiBhcyB0aGUgZmlyc3QgcHJvbWlzZSBzZXR0bGVzLlxuICovXG5hc3luYyBmdW5jdGlvbiBjYW5jZWxhYmxlUHJvbWlzZVJhY2UoYWJvcnRhYmxlUHJvbWlzZUJ1aWxkZXJzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBhYm9ydGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGZ1bmN0aW9uIGFib3J0SGFuZGxlcigpIHtcbiAgICAgICAgYWJvcnRlci5hYm9ydCgpO1xuICAgIH1cbiAgICAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKGFib3J0YWJsZVByb21pc2VCdWlsZGVycy5tYXAoKHApID0+IHAoeyBhYm9ydFNpZ25hbDogYWJvcnRlci5zaWduYWwgfSkpKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIGFib3J0ZXIuYWJvcnQoKTtcbiAgICAgICAgKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJvcnRlclV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcbi8qKlxuICogSGVscGVyIHRvIGRldGVybWluZSB3aGVuIGFuIGlucHV0IGlzIGEgZ2VuZXJpYyBKUyBvYmplY3QuXG4gKiBAcmV0dXJucyB0cnVlIHdoZW4gaW5wdXQgaXMgYW4gb2JqZWN0IHR5cGUgdGhhdCBpcyBub3QgbnVsbCwgQXJyYXksIFJlZ0V4cCwgb3IgRGF0ZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBpbnB1dCAhPT0gbnVsbCAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShpbnB1dCkgJiZcbiAgICAgICAgIShpbnB1dCBpbnN0YW5jZW9mIFJlZ0V4cCkgJiZcbiAgICAgICAgIShpbnB1dCBpbnN0YW5jZW9mIERhdGUpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuZXhwb3J0cy5nZXRFcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2U7XG5jb25zdCBvYmplY3RfanNfMSA9IHJlcXVpcmUoXCIuL29iamVjdC5qc1wiKTtcbi8qKlxuICogVHlwZWd1YXJkIGZvciBhbiBlcnJvciBvYmplY3Qgc2hhcGUgKGhhcyBuYW1lIGFuZCBtZXNzYWdlKVxuICogQHBhcmFtIGUgLSBTb21ldGhpbmcgY2F1Z2h0IGJ5IGEgY2F0Y2ggY2xhdXNlLlxuICovXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgICBpZiAoKDAsIG9iamVjdF9qc18xLmlzT2JqZWN0KShlKSkge1xuICAgICAgICBjb25zdCBoYXNOYW1lID0gdHlwZW9mIGUubmFtZSA9PT0gXCJzdHJpbmdcIjtcbiAgICAgICAgY29uc3QgaGFzTWVzc2FnZSA9IHR5cGVvZiBlLm1lc3NhZ2UgPT09IFwic3RyaW5nXCI7XG4gICAgICAgIHJldHVybiBoYXNOYW1lICYmIGhhc01lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogR2l2ZW4gd2hhdCBpcyB0aG91Z2h0IHRvIGJlIGFuIGVycm9yIG9iamVjdCwgcmV0dXJuIHRoZSBtZXNzYWdlIGlmIHBvc3NpYmxlLlxuICogSWYgdGhlIG1lc3NhZ2UgaXMgbWlzc2luZywgcmV0dXJucyBhIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIGlucHV0LlxuICogQHBhcmFtIGUgLSBTb21ldGhpbmcgdGhyb3duIGZyb20gYSB0cnkgYmxvY2tcbiAqIEByZXR1cm5zIFRoZSBlcnJvciBtZXNzYWdlIG9yIGEgc3RyaW5nIG9mIHRoZSBpbnB1dFxuICovXG5mdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoZSkge1xuICAgIGlmIChpc0Vycm9yKGUpKSB7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgc3RyaW5naWZpZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIgJiYgZSkge1xuICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdpZmllZCA9IFN0cmluZyhlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzdHJpbmdpZmllZCA9IFwiW3VuYWJsZSB0byBzdHJpbmdpZnkgaW5wdXRdXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBVbmtub3duIGVycm9yICR7c3RyaW5naWZpZWR9YDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbXB1dGVTaGEyNTZIbWFjID0gY29tcHV0ZVNoYTI1NkhtYWM7XG5leHBvcnRzLmNvbXB1dGVTaGEyNTZIYXNoID0gY29tcHV0ZVNoYTI1Nkhhc2g7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCJjcnlwdG9cIik7XG4vKipcbiAqIEdlbmVyYXRlcyBhIFNIQS0yNTYgSE1BQyBzaWduYXR1cmUuXG4gKiBAcGFyYW0ga2V5IC0gVGhlIEhNQUMga2V5IHJlcHJlc2VudGVkIGFzIGEgYmFzZTY0IHN0cmluZywgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY3J5cHRvZ3JhcGhpYyBITUFDIGhhc2guXG4gKiBAcGFyYW0gc3RyaW5nVG9TaWduIC0gVGhlIGRhdGEgdG8gYmUgc2lnbmVkLlxuICogQHBhcmFtIGVuY29kaW5nIC0gVGhlIHRleHR1YWwgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgcmV0dXJuZWQgSE1BQyBkaWdlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVTaGEyNTZIbWFjKGtleSwgc3RyaW5nVG9TaWduLCBlbmNvZGluZykge1xuICAgIGNvbnN0IGRlY29kZWRLZXkgPSBCdWZmZXIuZnJvbShrZXksIFwiYmFzZTY0XCIpO1xuICAgIHJldHVybiAoMCwgY3J5cHRvXzEuY3JlYXRlSG1hYykoXCJzaGEyNTZcIiwgZGVjb2RlZEtleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KGVuY29kaW5nKTtcbn1cbi8qKlxuICogR2VuZXJhdGVzIGEgU0hBLTI1NiBoYXNoLlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgZGF0YSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgaGFzaC5cbiAqIEBwYXJhbSBlbmNvZGluZyAtIFRoZSB0ZXh0dWFsIGVuY29kaW5nIHRvIHVzZSBmb3IgdGhlIHJldHVybmVkIGhhc2guXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVTaGEyNTZIYXNoKGNvbnRlbnQsIGVuY29kaW5nKSB7XG4gICAgcmV0dXJuICgwLCBjcnlwdG9fMS5jcmVhdGVIYXNoKShcInNoYTI1NlwiKS51cGRhdGUoY29udGVudCkuZGlnZXN0KGVuY29kaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNoYTI1Ni5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRGVmaW5lZCA9IGlzRGVmaW5lZDtcbmV4cG9ydHMuaXNPYmplY3RXaXRoUHJvcGVydGllcyA9IGlzT2JqZWN0V2l0aFByb3BlcnRpZXM7XG5leHBvcnRzLm9iamVjdEhhc1Byb3BlcnR5ID0gb2JqZWN0SGFzUHJvcGVydHk7XG4vKipcbiAqIEhlbHBlciBUeXBlR3VhcmQgdGhhdCBjaGVja3MgaWYgc29tZXRoaW5nIGlzIGRlZmluZWQgb3Igbm90LlxuICogQHBhcmFtIHRoaW5nIC0gQW55dGhpbmdcbiAqL1xuZnVuY3Rpb24gaXNEZWZpbmVkKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0aGluZyAhPT0gbnVsbDtcbn1cbi8qKlxuICogSGVscGVyIFR5cGVHdWFyZCB0aGF0IGNoZWNrcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHRoaW5nIC0gQW55dGhpbmcuXG4gKiBAcGFyYW0gcHJvcGVydGllcyAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGFwcGVhciBpbiB0aGUgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc09iamVjdFdpdGhQcm9wZXJ0aWVzKHRoaW5nLCBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKCFpc0RlZmluZWQodGhpbmcpIHx8IHR5cGVvZiB0aGluZyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICBpZiAoIW9iamVjdEhhc1Byb3BlcnR5KHRoaW5nLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogSGVscGVyIFR5cGVHdWFyZCB0aGF0IGNoZWNrcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB0aGluZyAtIEFueSBvYmplY3QuXG4gKiBAcGFyYW0gcHJvcGVydHkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYXBwZWFyIGluIHRoZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdEhhc1Byb3BlcnR5KHRoaW5nLCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiAoaXNEZWZpbmVkKHRoaW5nKSAmJiB0eXBlb2YgdGhpbmcgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydHkgaW4gdGhpbmcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZUd1YXJkcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJhbmRvbVVVSUQgPSByYW5kb21VVUlEO1xuY29uc3QgY3J5cHRvXzEgPSByZXF1aXJlKFwiY3J5cHRvXCIpO1xuLy8gTk9URTogVGhpcyBpcyBhIHdvcmthcm91bmQgdW50aWwgd2UgY2FuIHVzZSBgZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tVVVJRGAgaW4gTm9kZS5qcyAxOSsuXG5jb25zdCB1dWlkRnVuY3Rpb24gPSB0eXBlb2YgKChfYSA9IGdsb2JhbFRoaXMgPT09IG51bGwgfHwgZ2xvYmFsVGhpcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2xvYmFsVGhpcy5jcnlwdG8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yYW5kb21VVUlEKSA9PT0gXCJmdW5jdGlvblwiXG4gICAgPyBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlELmJpbmQoZ2xvYmFsVGhpcy5jcnlwdG8pXG4gICAgOiBjcnlwdG9fMS5yYW5kb21VVUlEO1xuLyoqXG4gKiBHZW5lcmF0ZWQgVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXJcbiAqXG4gKiBAcmV0dXJucyBSRkM0MTIyIHY0IFVVSUQuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbVVVSUQoKSB7XG4gICAgcmV0dXJuIHV1aWRGdW5jdGlvbigpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXVpZFV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbnZhciBfYSwgX2IsIF9jLCBfZDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNSZWFjdE5hdGl2ZSA9IGV4cG9ydHMuaXNOb2RlUnVudGltZSA9IGV4cG9ydHMuaXNOb2RlID0gZXhwb3J0cy5pc05vZGVMaWtlID0gZXhwb3J0cy5pc0J1biA9IGV4cG9ydHMuaXNEZW5vID0gZXhwb3J0cy5pc1dlYldvcmtlciA9IGV4cG9ydHMuaXNCcm93c2VyID0gdm9pZCAwO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBXZWIgQnJvd3Nlci5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbm8td2luZG93XG5leHBvcnRzLmlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIGEgV2ViIFdvcmtlci5cbiAqL1xuZXhwb3J0cy5pc1dlYldvcmtlciA9IHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiICYmXG4gICAgdHlwZW9mIChzZWxmID09PSBudWxsIHx8IHNlbGYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGYuaW1wb3J0U2NyaXB0cykgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICgoKF9hID0gc2VsZi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSBcIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXCIgfHxcbiAgICAgICAgKChfYiA9IHNlbGYuY29uc3RydWN0b3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5uYW1lKSA9PT0gXCJTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVcIiB8fFxuICAgICAgICAoKF9jID0gc2VsZi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLm5hbWUpID09PSBcIlNoYXJlZFdvcmtlckdsb2JhbFNjb3BlXCIpO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgRGVuby5cbiAqL1xuZXhwb3J0cy5pc0Rlbm8gPSB0eXBlb2YgRGVubyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBEZW5vLnZlcnNpb24gIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2YgRGVuby52ZXJzaW9uLmRlbm8gIT09IFwidW5kZWZpbmVkXCI7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBCdW4uc2guXG4gKi9cbmV4cG9ydHMuaXNCdW4gPSB0eXBlb2YgQnVuICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBCdW4udmVyc2lvbiAhPT0gXCJ1bmRlZmluZWRcIjtcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIGEgTm9kZS5qcyBjb21wYXRpYmxlIGVudmlyb25tZW50LlxuICovXG5leHBvcnRzLmlzTm9kZUxpa2UgPSB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgQm9vbGVhbihnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbikgJiZcbiAgICBCb29sZWFuKChfZCA9IGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLm5vZGUpO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBOb2RlLmpzIGNvbXBhdGlibGUgZW52aXJvbm1lbnQuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGlzTm9kZUxpa2VgIGluc3RlYWQuXG4gKi9cbmV4cG9ydHMuaXNOb2RlID0gZXhwb3J0cy5pc05vZGVMaWtlO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgTm9kZS5KUy5cbiAqL1xuZXhwb3J0cy5pc05vZGVSdW50aW1lID0gZXhwb3J0cy5pc05vZGVMaWtlICYmICFleHBvcnRzLmlzQnVuICYmICFleHBvcnRzLmlzRGVubztcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIGluIFJlYWN0LU5hdGl2ZS5cbiAqL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9ibG9iL21haW4vcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL3NldFVwTmF2aWdhdG9yLmpzXG5leHBvcnRzLmlzUmVhY3ROYXRpdmUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIChuYXZpZ2F0b3IgPT09IG51bGwgfHwgbmF2aWdhdG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuYXZpZ2F0b3IucHJvZHVjdCkgPT09IFwiUmVhY3ROYXRpdmVcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoZWNrRW52aXJvbm1lbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51aW50OEFycmF5VG9TdHJpbmcgPSB1aW50OEFycmF5VG9TdHJpbmc7XG5leHBvcnRzLnN0cmluZ1RvVWludDhBcnJheSA9IHN0cmluZ1RvVWludDhBcnJheTtcbi8qKlxuICogVGhlIGhlbHBlciB0aGF0IHRyYW5zZm9ybXMgYnl0ZXMgd2l0aCBzcGVjaWZpYyBjaGFyYWN0ZXIgZW5jb2RpbmcgaW50byBzdHJpbmdcbiAqIEBwYXJhbSBieXRlcyAtIHRoZSB1aW50OGFycmF5IGJ5dGVzXG4gKiBAcGFyYW0gZm9ybWF0IC0gdGhlIGZvcm1hdCB3ZSB1c2UgdG8gZW5jb2RlIHRoZSBieXRlXG4gKiBAcmV0dXJucyBhIHN0cmluZyBvZiB0aGUgZW5jb2RlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdWludDhBcnJheVRvU3RyaW5nKGJ5dGVzLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKGZvcm1hdCk7XG59XG4vKipcbiAqIFRoZSBoZWxwZXIgdGhhdCB0cmFuc2Zvcm1zIHN0cmluZyB0byBzcGVjaWZpYyBjaGFyYWN0ZXIgZW5jb2RlZCBieXRlcyBhcnJheS5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSBzdHJpbmcgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0gZm9ybWF0IC0gdGhlIGZvcm1hdCB3ZSB1c2UgdG8gZGVjb2RlIHRoZSB2YWx1ZVxuICogQHJldHVybnMgYSB1aW50OGFycmF5XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvVWludDhBcnJheSh2YWx1ZSwgZm9ybWF0KSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlLCBmb3JtYXQpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ynl0ZXNFbmNvZGluZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0cmluZ1RvVWludDhBcnJheSA9IGV4cG9ydHMudWludDhBcnJheVRvU3RyaW5nID0gZXhwb3J0cy5pc1dlYldvcmtlciA9IGV4cG9ydHMuaXNSZWFjdE5hdGl2ZSA9IGV4cG9ydHMuaXNEZW5vID0gZXhwb3J0cy5pc05vZGVSdW50aW1lID0gZXhwb3J0cy5pc05vZGVMaWtlID0gZXhwb3J0cy5pc05vZGUgPSBleHBvcnRzLmlzQnVuID0gZXhwb3J0cy5pc0Jyb3dzZXIgPSBleHBvcnRzLnJhbmRvbVVVSUQgPSBleHBvcnRzLm9iamVjdEhhc1Byb3BlcnR5ID0gZXhwb3J0cy5pc09iamVjdFdpdGhQcm9wZXJ0aWVzID0gZXhwb3J0cy5pc0RlZmluZWQgPSBleHBvcnRzLmNvbXB1dGVTaGEyNTZIbWFjID0gZXhwb3J0cy5jb21wdXRlU2hhMjU2SGFzaCA9IGV4cG9ydHMuZ2V0RXJyb3JNZXNzYWdlID0gZXhwb3J0cy5pc0Vycm9yID0gZXhwb3J0cy5pc09iamVjdCA9IGV4cG9ydHMuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZSA9IGV4cG9ydHMuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZSA9IGV4cG9ydHMuY2FuY2VsYWJsZVByb21pc2VSYWNlID0gZXhwb3J0cy5jYWxjdWxhdGVSZXRyeURlbGF5ID0gZXhwb3J0cy5kZWxheSA9IHZvaWQgMDtcbnZhciBkZWxheV9qc18xID0gcmVxdWlyZShcIi4vZGVsYXkuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVsYXlfanNfMS5kZWxheTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhbGN1bGF0ZVJldHJ5RGVsYXlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbGF5X2pzXzEuY2FsY3VsYXRlUmV0cnlEZWxheTsgfSB9KTtcbnZhciBhYm9ydGVyVXRpbHNfanNfMSA9IHJlcXVpcmUoXCIuL2Fib3J0ZXJVdGlscy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhbmNlbGFibGVQcm9taXNlUmFjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYWJvcnRlclV0aWxzX2pzXzEuY2FuY2VsYWJsZVByb21pc2VSYWNlOyB9IH0pO1xudmFyIGNyZWF0ZUFib3J0YWJsZVByb21pc2VfanNfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBYm9ydGFibGVQcm9taXNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVBYm9ydGFibGVQcm9taXNlX2pzXzEuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZTsgfSB9KTtcbnZhciByYW5kb21fanNfMSA9IHJlcXVpcmUoXCIuL3JhbmRvbS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFJhbmRvbUludGVnZXJJbmNsdXNpdmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJhbmRvbV9qc18xLmdldFJhbmRvbUludGVnZXJJbmNsdXNpdmU7IH0gfSk7XG52YXIgb2JqZWN0X2pzXzEgPSByZXF1aXJlKFwiLi9vYmplY3QuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JqZWN0X2pzXzEuaXNPYmplY3Q7IH0gfSk7XG52YXIgZXJyb3JfanNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JfanNfMS5pc0Vycm9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0RXJyb3JNZXNzYWdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvcl9qc18xLmdldEVycm9yTWVzc2FnZTsgfSB9KTtcbnZhciBzaGEyNTZfanNfMSA9IHJlcXVpcmUoXCIuL3NoYTI1Ni5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXB1dGVTaGEyNTZIYXNoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGEyNTZfanNfMS5jb21wdXRlU2hhMjU2SGFzaDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXB1dGVTaGEyNTZIbWFjXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGEyNTZfanNfMS5jb21wdXRlU2hhMjU2SG1hYzsgfSB9KTtcbnZhciB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi90eXBlR3VhcmRzLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNEZWZpbmVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlR3VhcmRzX2pzXzEuaXNEZWZpbmVkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPYmplY3RXaXRoUHJvcGVydGllc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZUd1YXJkc19qc18xLmlzT2JqZWN0V2l0aFByb3BlcnRpZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvYmplY3RIYXNQcm9wZXJ0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZUd1YXJkc19qc18xLm9iamVjdEhhc1Byb3BlcnR5OyB9IH0pO1xudmFyIHV1aWRVdGlsc19qc18xID0gcmVxdWlyZShcIi4vdXVpZFV0aWxzLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmFuZG9tVVVJRFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXVpZFV0aWxzX2pzXzEucmFuZG9tVVVJRDsgfSB9KTtcbnZhciBjaGVja0Vudmlyb25tZW50X2pzXzEgPSByZXF1aXJlKFwiLi9jaGVja0Vudmlyb25tZW50LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCcm93c2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNCcm93c2VyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCdW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc0J1bjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzTm9kZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZUxpa2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc05vZGVMaWtlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOb2RlUnVudGltZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzTm9kZVJ1bnRpbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Rlbm9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc0Rlbm87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1JlYWN0TmF0aXZlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNSZWFjdE5hdGl2ZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzV2ViV29ya2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNXZWJXb3JrZXI7IH0gfSk7XG52YXIgYnl0ZXNFbmNvZGluZ19qc18xID0gcmVxdWlyZShcIi4vYnl0ZXNFbmNvZGluZy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVpbnQ4QXJyYXlUb1N0cmluZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnl0ZXNFbmNvZGluZ19qc18xLnVpbnQ4QXJyYXlUb1N0cmluZzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ1RvVWludDhBcnJheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnl0ZXNFbmNvZGluZ19qc18xLnN0cmluZ1RvVWludDhBcnJheTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2FuaXRpemVyID0gdm9pZCAwO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IFJlZGFjdGVkU3RyaW5nID0gXCJSRURBQ1RFRFwiO1xuLy8gTWFrZSBzdXJlIHRoaXMgbGlzdCBpcyB1cC10by1kYXRlIHdpdGggdGhlIG9uZSB1bmRlciBjb3JlL2xvZ2dlci9SZWFkbWUjS2V5Y29uY2VwdHNcbmNvbnN0IGRlZmF1bHRBbGxvd2VkSGVhZGVyTmFtZXMgPSBbXG4gICAgXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXJldHVybi1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy11c2VyYWdlbnRcIixcbiAgICBcIngtbXMtY29ycmVsYXRpb24tcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgXCJjbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwibXMtY3ZcIixcbiAgICBcInJldHVybi1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwidHJhY2VwYXJlbnRcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1NYXgtQWdlXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kXCIsXG4gICAgXCJPcmlnaW5cIixcbiAgICBcIkFjY2VwdFwiLFxuICAgIFwiQWNjZXB0LUVuY29kaW5nXCIsXG4gICAgXCJDYWNoZS1Db250cm9sXCIsXG4gICAgXCJDb25uZWN0aW9uXCIsXG4gICAgXCJDb250ZW50LUxlbmd0aFwiLFxuICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgXCJEYXRlXCIsXG4gICAgXCJFVGFnXCIsXG4gICAgXCJFeHBpcmVzXCIsXG4gICAgXCJJZi1NYXRjaFwiLFxuICAgIFwiSWYtTW9kaWZpZWQtU2luY2VcIixcbiAgICBcIklmLU5vbmUtTWF0Y2hcIixcbiAgICBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICBcIlByYWdtYVwiLFxuICAgIFwiUmVxdWVzdC1JZFwiLFxuICAgIFwiUmV0cnktQWZ0ZXJcIixcbiAgICBcIlNlcnZlclwiLFxuICAgIFwiVHJhbnNmZXItRW5jb2RpbmdcIixcbiAgICBcIlVzZXItQWdlbnRcIixcbiAgICBcIldXVy1BdXRoZW50aWNhdGVcIixcbl07XG5jb25zdCBkZWZhdWx0QWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IFtcImFwaS12ZXJzaW9uXCJdO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgU2FuaXRpemVyIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGFkZGl0aW9uYWxBbGxvd2VkSGVhZGVyTmFtZXM6IGFsbG93ZWRIZWFkZXJOYW1lcyA9IFtdLCBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IFtdLCB9ID0ge30pIHtcbiAgICAgICAgYWxsb3dlZEhlYWRlck5hbWVzID0gZGVmYXVsdEFsbG93ZWRIZWFkZXJOYW1lcy5jb25jYXQoYWxsb3dlZEhlYWRlck5hbWVzKTtcbiAgICAgICAgYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IGRlZmF1bHRBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLmNvbmNhdChhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzKTtcbiAgICAgICAgdGhpcy5hbGxvd2VkSGVhZGVyTmFtZXMgPSBuZXcgU2V0KGFsbG93ZWRIZWFkZXJOYW1lcy5tYXAoKG4pID0+IG4udG9Mb3dlckNhc2UoKSkpO1xuICAgICAgICB0aGlzLmFsbG93ZWRRdWVyeVBhcmFtZXRlcnMgPSBuZXcgU2V0KGFsbG93ZWRRdWVyeVBhcmFtZXRlcnMubWFwKChwKSA9PiBwLnRvTG93ZXJDYXNlKCkpKTtcbiAgICB9XG4gICAgc2FuaXRpemUob2JqKSB7XG4gICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBFbnN1cmUgRXJyb3JzIGluY2x1ZGUgdGhlaXIgaW50ZXJlc3Rpbmcgbm9uLWVudW1lcmFibGUgbWVtYmVyc1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB2YWx1ZSksIHsgbmFtZTogdmFsdWUubmFtZSwgbWVzc2FnZTogdmFsdWUubWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkgPT09IFwiaGVhZGVyc1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIZWFkZXJzKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJ1cmxcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNhbml0aXplVXJsKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJxdWVyeVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVRdWVyeSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiYm9keVwiKSB7XG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgbG9nIHRoZSByZXF1ZXN0IGJvZHlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInJlc3BvbnNlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBsb2cgcmVzcG9uc2UgYWdhaW5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIm9wZXJhdGlvblNwZWNcIikge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdXNpbmcgc2VuZE9wZXJhdGlvblJlcXVlc3QsIHRoZSByZXF1ZXN0IGNhcnJpZXMgYSBtYXNzaXZlXG4gICAgICAgICAgICAgICAgLy8gZmllbGQgd2l0aCB0aGUgYXV0b3Jlc3Qgc3BlYy4gTm8gbmVlZCB0byBsb2cgaXQuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8ICgwLCBjb3JlX3V0aWxfMS5pc09iamVjdCkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXJdXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSwgMik7XG4gICAgfVxuICAgIHNhbml0aXplVXJsKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHZhbHVlKTtcbiAgICAgICAgaWYgKCF1cmwuc2VhcmNoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBba2V5XSBvZiB1cmwuc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycy5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBSZWRhY3RlZFN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICAgIH1cbiAgICBzYW5pdGl6ZUhlYWRlcnMob2JqKSB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd2VkSGVhZGVyTmFtZXMuaGFzKGtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IFJlZGFjdGVkU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gICAgfVxuICAgIHNhbml0aXplUXVlcnkodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNhbml0aXplZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLmhhcyhrLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgc2FuaXRpemVkW2tdID0gdmFsdWVba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRba10gPSBSZWRhY3RlZFN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2FuaXRpemVkO1xuICAgIH1cbn1cbmV4cG9ydHMuU2FuaXRpemVyID0gU2FuaXRpemVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FuaXRpemVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMubG9nUG9saWN5ID0gbG9nUG9saWN5O1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuY29uc3Qgc2FuaXRpemVyX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9zYW5pdGl6ZXIuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgbG9nUG9saWN5LlxuICovXG5leHBvcnRzLmxvZ1BvbGljeU5hbWUgPSBcImxvZ1BvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGxvZ3MgYWxsIHJlcXVlc3RzIGFuZCByZXNwb25zZXMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIGxvZ1BvbGljeS5cbiAqL1xuZnVuY3Rpb24gbG9nUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBsb2dnZXIgPSAoX2EgPSBvcHRpb25zLmxvZ2dlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbG9nX2pzXzEubG9nZ2VyLmluZm87XG4gICAgY29uc3Qgc2FuaXRpemVyID0gbmV3IHNhbml0aXplcl9qc18xLlNhbml0aXplcih7XG4gICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkSGVhZGVyTmFtZXM6IG9wdGlvbnMuYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lcyxcbiAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnM6IG9wdGlvbnMuYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5sb2dQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIWxvZ2dlci5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2dnZXIoYFJlcXVlc3Q6ICR7c2FuaXRpemVyLnNhbml0aXplKHJlcXVlc3QpfWApO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgbG9nZ2VyKGBSZXNwb25zZSBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICAgICAgICBsb2dnZXIoYEhlYWRlcnM6ICR7c2FuaXRpemVyLnNhbml0aXplKHJlc3BvbnNlLmhlYWRlcnMpfWApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnJlZGlyZWN0UG9saWN5ID0gcmVkaXJlY3RQb2xpY3k7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgcmVkaXJlY3RQb2xpY3kuXG4gKi9cbmV4cG9ydHMucmVkaXJlY3RQb2xpY3lOYW1lID0gXCJyZWRpcmVjdFBvbGljeVwiO1xuLyoqXG4gKiBNZXRob2RzIHRoYXQgYXJlIGFsbG93ZWQgdG8gZm9sbG93IHJlZGlyZWN0cyAzMDEgYW5kIDMwMlxuICovXG5jb25zdCBhbGxvd2VkUmVkaXJlY3QgPSBbXCJHRVRcIiwgXCJIRUFEXCJdO1xuLyoqXG4gKiBBIHBvbGljeSB0byBmb2xsb3cgTG9jYXRpb24gaGVhZGVycyBmcm9tIHRoZSBzZXJ2ZXIgaW4gb3JkZXJcbiAqIHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgcmVkaXJlY3Rpb24uXG4gKiBJbiB0aGUgYnJvd3NlciwgdGhpcyBwb2xpY3kgaXMgbm90IHVzZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29udHJvbCBwb2xpY3kgYmVoYXZpb3IuXG4gKi9cbmZ1bmN0aW9uIHJlZGlyZWN0UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbWF4UmV0cmllcyA9IDIwIH0gPSBvcHRpb25zO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMucmVkaXJlY3RQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlUmVkaXJlY3QobmV4dCwgcmVzcG9uc2UsIG1heFJldHJpZXMpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVSZWRpcmVjdChuZXh0LCByZXNwb25zZSwgbWF4UmV0cmllcywgY3VycmVudFJldHJpZXMgPSAwKSB7XG4gICAgY29uc3QgeyByZXF1ZXN0LCBzdGF0dXMsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgIGNvbnN0IGxvY2F0aW9uSGVhZGVyID0gaGVhZGVycy5nZXQoXCJsb2NhdGlvblwiKTtcbiAgICBpZiAobG9jYXRpb25IZWFkZXIgJiZcbiAgICAgICAgKHN0YXR1cyA9PT0gMzAwIHx8XG4gICAgICAgICAgICAoc3RhdHVzID09PSAzMDEgJiYgYWxsb3dlZFJlZGlyZWN0LmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSkgfHxcbiAgICAgICAgICAgIChzdGF0dXMgPT09IDMwMiAmJiBhbGxvd2VkUmVkaXJlY3QuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKSB8fFxuICAgICAgICAgICAgKHN0YXR1cyA9PT0gMzAzICYmIHJlcXVlc3QubWV0aG9kID09PSBcIlBPU1RcIikgfHxcbiAgICAgICAgICAgIHN0YXR1cyA9PT0gMzA3KSAmJlxuICAgICAgICBjdXJyZW50UmV0cmllcyA8IG1heFJldHJpZXMpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChsb2NhdGlvbkhlYWRlciwgcmVxdWVzdC51cmwpO1xuICAgICAgICByZXF1ZXN0LnVybCA9IHVybC50b1N0cmluZygpO1xuICAgICAgICAvLyBQT1NUIHJlcXVlc3Qgd2l0aCBTdGF0dXMgY29kZSAzMDMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGFcbiAgICAgICAgLy8gcmVkaXJlY3RlZCBHRVQgcmVxdWVzdCBpZiB0aGUgcmVkaXJlY3QgdXJsIGlzIHByZXNlbnQgaW4gdGhlIGxvY2F0aW9uIGhlYWRlclxuICAgICAgICBpZiAoc3RhdHVzID09PSAzMDMpIHtcbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJHRVRcIjtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoXCJDb250ZW50LUxlbmd0aFwiKTtcbiAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShcIkF1dGhvcml6YXRpb25cIik7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZWRpcmVjdChuZXh0LCByZXMsIG1heFJldHJpZXMsIGN1cnJlbnRSZXRyaWVzICsgMSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZGlyZWN0UG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0SGVhZGVyTmFtZSA9IGdldEhlYWRlck5hbWU7XG5leHBvcnRzLnNldFBsYXRmb3JtU3BlY2lmaWNEYXRhID0gc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGE7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3Qgb3MgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpvc1wiKSk7XG5jb25zdCBwcm9jZXNzID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6cHJvY2Vzc1wiKSk7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJOYW1lKCkge1xuICAgIHJldHVybiBcIlVzZXItQWdlbnRcIjtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFBsYXRmb3JtU3BlY2lmaWNEYXRhKG1hcCkge1xuICAgIGlmIChwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbnMgPSBwcm9jZXNzLnZlcnNpb25zO1xuICAgICAgICBpZiAodmVyc2lvbnMuYnVuKSB7XG4gICAgICAgICAgICBtYXAuc2V0KFwiQnVuXCIsIHZlcnNpb25zLmJ1bik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmVyc2lvbnMuZGVubykge1xuICAgICAgICAgICAgbWFwLnNldChcIkRlbm9cIiwgdmVyc2lvbnMuZGVubyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmVyc2lvbnMubm9kZSkge1xuICAgICAgICAgICAgbWFwLnNldChcIk5vZGVcIiwgdmVyc2lvbnMubm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWFwLnNldChcIk9TXCIsIGAoJHtvcy5hcmNoKCl9LSR7b3MudHlwZSgpfS0ke29zLnJlbGVhc2UoKX0pYCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VyQWdlbnRQbGF0Zm9ybS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5UID0gZXhwb3J0cy5TREtfVkVSU0lPTiA9IHZvaWQgMDtcbmV4cG9ydHMuU0RLX1ZFUlNJT04gPSBcIjEuMTcuMFwiO1xuZXhwb3J0cy5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCA9IDM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRIZWFkZXJOYW1lID0gZ2V0VXNlckFnZW50SGVhZGVyTmFtZTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50VmFsdWUgPSBnZXRVc2VyQWdlbnRWYWx1ZTtcbmNvbnN0IHVzZXJBZ2VudFBsYXRmb3JtX2pzXzEgPSByZXF1aXJlKFwiLi91c2VyQWdlbnRQbGF0Zm9ybS5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmZ1bmN0aW9uIGdldFVzZXJBZ2VudFN0cmluZyh0ZWxlbWV0cnlJbmZvKSB7XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0ZWxlbWV0cnlJbmZvKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdmFsdWUgPyBgJHtrZXl9LyR7dmFsdWV9YCA6IGtleTtcbiAgICAgICAgcGFydHMucHVzaCh0b2tlbik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiIFwiKTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudEhlYWRlck5hbWUoKSB7XG4gICAgcmV0dXJuICgwLCB1c2VyQWdlbnRQbGF0Zm9ybV9qc18xLmdldEhlYWRlck5hbWUpKCk7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRVc2VyQWdlbnRWYWx1ZShwcmVmaXgpIHtcbiAgICBjb25zdCBydW50aW1lSW5mbyA9IG5ldyBNYXAoKTtcbiAgICBydW50aW1lSW5mby5zZXQoXCJjb3JlLXJlc3QtcGlwZWxpbmVcIiwgY29uc3RhbnRzX2pzXzEuU0RLX1ZFUlNJT04pO1xuICAgIGF3YWl0ICgwLCB1c2VyQWdlbnRQbGF0Zm9ybV9qc18xLnNldFBsYXRmb3JtU3BlY2lmaWNEYXRhKShydW50aW1lSW5mbyk7XG4gICAgY29uc3QgZGVmYXVsdEFnZW50ID0gZ2V0VXNlckFnZW50U3RyaW5nKHJ1bnRpbWVJbmZvKTtcbiAgICBjb25zdCB1c2VyQWdlbnRWYWx1ZSA9IHByZWZpeCA/IGAke3ByZWZpeH0gJHtkZWZhdWx0QWdlbnR9YCA6IGRlZmF1bHRBZ2VudDtcbiAgICByZXR1cm4gdXNlckFnZW50VmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VyQWdlbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51c2VyQWdlbnRQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy51c2VyQWdlbnRQb2xpY3kgPSB1c2VyQWdlbnRQb2xpY3k7XG5jb25zdCB1c2VyQWdlbnRfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3VzZXJBZ2VudC5qc1wiKTtcbmNvbnN0IFVzZXJBZ2VudEhlYWRlck5hbWUgPSAoMCwgdXNlckFnZW50X2pzXzEuZ2V0VXNlckFnZW50SGVhZGVyTmFtZSkoKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSB1c2VyQWdlbnRQb2xpY3kuXG4gKi9cbmV4cG9ydHMudXNlckFnZW50UG9saWN5TmFtZSA9IFwidXNlckFnZW50UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgc2V0cyB0aGUgVXNlci1BZ2VudCBoZWFkZXIgKG9yIGVxdWl2YWxlbnQpIHRvIHJlZmxlY3RcbiAqIHRoZSBsaWJyYXJ5IHZlcnNpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSB1c2VyIGFnZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiB1c2VyQWdlbnRQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdXNlckFnZW50VmFsdWUgPSAoMCwgdXNlckFnZW50X2pzXzEuZ2V0VXNlckFnZW50VmFsdWUpKG9wdGlvbnMudXNlckFnZW50UHJlZml4KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnVzZXJBZ2VudFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5oZWFkZXJzLmhhcyhVc2VyQWdlbnRIZWFkZXJOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoVXNlckFnZW50SGVhZGVyTmFtZSwgYXdhaXQgdXNlckFnZW50VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXJBZ2VudFBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzTm9kZVJlYWRhYmxlU3RyZWFtID0gaXNOb2RlUmVhZGFibGVTdHJlYW07XG5leHBvcnRzLmlzV2ViUmVhZGFibGVTdHJlYW0gPSBpc1dlYlJlYWRhYmxlU3RyZWFtO1xuZXhwb3J0cy5pc1JlYWRhYmxlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbTtcbmV4cG9ydHMuaXNCbG9iID0gaXNCbG9iO1xuZnVuY3Rpb24gaXNOb2RlUmVhZGFibGVTdHJlYW0oeCkge1xuICAgIHJldHVybiBCb29sZWFuKHggJiYgdHlwZW9mIHhbXCJwaXBlXCJdID09PSBcImZ1bmN0aW9uXCIpO1xufVxuZnVuY3Rpb24gaXNXZWJSZWFkYWJsZVN0cmVhbSh4KSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oeCAmJlxuICAgICAgICB0eXBlb2YgeC5nZXRSZWFkZXIgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgeC50ZWUgPT09IFwiZnVuY3Rpb25cIik7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtKHgpIHtcbiAgICByZXR1cm4gaXNOb2RlUmVhZGFibGVTdHJlYW0oeCkgfHwgaXNXZWJSZWFkYWJsZVN0cmVhbSh4KTtcbn1cbmZ1bmN0aW9uIGlzQmxvYih4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4LnN0cmVhbSA9PT0gXCJmdW5jdGlvblwiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZUd1YXJkcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJhd0NvbnRlbnQgPSBnZXRSYXdDb250ZW50O1xuZXhwb3J0cy5jcmVhdGVGaWxlRnJvbVN0cmVhbSA9IGNyZWF0ZUZpbGVGcm9tU3RyZWFtO1xuZXhwb3J0cy5jcmVhdGVGaWxlID0gY3JlYXRlRmlsZTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi90eXBlR3VhcmRzLmpzXCIpO1xuY29uc3QgdW5pbXBsZW1lbnRlZE1ldGhvZHMgPSB7XG4gICAgYXJyYXlCdWZmZXI6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgc2xpY2U6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgdGV4dDogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbn07XG4vKipcbiAqIFByaXZhdGUgc3ltYm9sIHVzZWQgYXMga2V5IG9uIG9iamVjdHMgY3JlYXRlZCB1c2luZyBjcmVhdGVGaWxlIGNvbnRhaW5pbmcgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2Ugb2YgdGhlIGZpbGUgb2JqZWN0LlxuICpcbiAqIFRoaXMgaXMgdXNlZCBpbiBOb2RlIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgTm9kZSBzdHJlYW0gd2l0aG91dCB1c2luZyBCbG9iI3N0cmVhbSwgd2hpY2hcbiAqIHJldHVybnMgYSB3ZWIgc3RyZWFtLiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgYSBjb3VwbGUgb2YgYnVncyB0byBkbyB3aXRoIEJsb2Ijc3RyZWFtIGFuZFxuICogUmVhZGFibGUjdG8vZnJvbVdlYiBpbiBOb2RlIHZlcnNpb25zIHdlIHN1cHBvcnQ6XG4gKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDI2OTQgKGZpeGVkIGluIE5vZGUgMTguMTQpXG4gKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDg5MTYgKGZpeGVkIGluIE5vZGUgMjAuNilcbiAqXG4gKiBPbmNlIHRoZXNlIHZlcnNpb25zIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLCB3ZSBtYXkgYmUgYWJsZSB0byBzdG9wIGRvaW5nIHRoaXMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IHJhd0NvbnRlbnQgPSBTeW1ib2woXCJyYXdDb250ZW50XCIpO1xuZnVuY3Rpb24gaGFzUmF3Q29udGVudCh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4W3Jhd0NvbnRlbnRdID09PSBcImZ1bmN0aW9uXCI7XG59XG4vKipcbiAqIEV4dHJhY3QgdGhlIHJhdyBjb250ZW50IGZyb20gYSBnaXZlbiBibG9iLWxpa2Ugb2JqZWN0LiBJZiB0aGUgaW5wdXQgd2FzIGNyZWF0ZWQgdXNpbmcgY3JlYXRlRmlsZVxuICogb3IgY3JlYXRlRmlsZUZyb21TdHJlYW0sIHRoZSBleGFjdCBjb250ZW50IHBhc3NlZCBpbnRvIGNyZWF0ZUZpbGUvY3JlYXRlRmlsZUZyb21TdHJlYW0gd2lsbCBiZSB1c2VkLlxuICogRm9yIHRydWUgaW5zdGFuY2VzIG9mIEJsb2IgYW5kIEZpbGUsIHJldHVybnMgdGhlIGJsb2IncyBjb250ZW50IGFzIGEgV2ViIFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRSYXdDb250ZW50KGJsb2IpIHtcbiAgICBpZiAoaGFzUmF3Q29udGVudChibG9iKSkge1xuICAgICAgICByZXR1cm4gYmxvYltyYXdDb250ZW50XSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJsb2Iuc3RyZWFtKCk7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgRmlsZSBpbnRlcmZhY2UuIFRoaXMgb2JqZWN0IGlzIGludGVuZGVkIHRvIGJlXG4gKiBwYXNzZWQgaW50byBSZXF1ZXN0Qm9keVR5cGUuZm9ybURhdGEsIGFuZCBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrIGFzIGV4cGVjdGVkIGluXG4gKiBvdGhlciBzaXR1YXRpb25zLlxuICpcbiAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvOlxuICogLSBDcmVhdGUgYSBGaWxlIG9iamVjdCBmb3IgdXNlIGluIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlXG4gKiAgIGdsb2JhbCBGaWxlIG9iamVjdCBpcyB1bmF2YWlsYWJsZS5cbiAqIC0gQ3JlYXRlIGEgRmlsZS1saWtlIG9iamVjdCBmcm9tIGEgcmVhZGFibGUgc3RyZWFtIHdpdGhvdXQgcmVhZGluZyB0aGUgc3RyZWFtIGludG8gbWVtb3J5LlxuICpcbiAqIEBwYXJhbSBzdHJlYW0gLSB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBhcyBhIGNhbGxiYWNrIHJldHVybmluZyBhIHN0cmVhbS4gV2hlbiBhIEZpbGUgb2JqZWN0IG1hZGUgdXNpbmcgY3JlYXRlRmlsZSBpc1xuICogICAgICAgICAgICAgICAgICBwYXNzZWQgaW4gYSByZXF1ZXN0J3MgZm9ybSBkYXRhIG1hcCwgdGhlIHN0cmVhbSB3aWxsIG5vdCBiZSByZWFkIGludG8gbWVtb3J5XG4gKiAgICAgICAgICAgICAgICAgIGFuZCBpbnN0ZWFkIHdpbGwgYmUgc3RyZWFtZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBtYWRlLiBJbiB0aGUgZXZlbnQgb2YgYSByZXRyeSwgdGhlXG4gKiAgICAgICAgICAgICAgICAgIHN0cmVhbSBuZWVkcyB0byBiZSByZWFkIGFnYWluLCBzbyB0aGlzIGNhbGxiYWNrIFNIT1VMRCByZXR1cm4gYSBmcmVzaCBzdHJlYW0gaWYgcG9zc2libGUuXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLlxuICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25hbCBtZXRhZGF0YSBhYm91dCB0aGUgZmlsZSwgZS5nLiBmaWxlIG5hbWUsIGZpbGUgc2l6ZSwgTUlNRSB0eXBlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWxlRnJvbVN0cmVhbShzdHJlYW0sIG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1bmltcGxlbWVudGVkTWV0aG9kcyksIHsgdHlwZTogKF9hID0gb3B0aW9ucy50eXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLCBsYXN0TW9kaWZpZWQ6IChfYiA9IG9wdGlvbnMubGFzdE1vZGlmaWVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgd2Via2l0UmVsYXRpdmVQYXRoOiAoX2MgPSBvcHRpb25zLndlYmtpdFJlbGF0aXZlUGF0aCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogXCJcIiwgc2l6ZTogKF9kID0gb3B0aW9ucy5zaXplKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAtMSwgbmFtZSwgc3RyZWFtOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc3RyZWFtKCk7XG4gICAgICAgICAgICBpZiAoKDAsIHR5cGVHdWFyZHNfanNfMS5pc05vZGVSZWFkYWJsZVN0cmVhbSkocykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkOiBhIE5vZGUgc3RyZWFtIHdhcyBwcm92aWRlZCBhcyBpbnB1dCB0byBjcmVhdGVGaWxlRnJvbVN0cmVhbS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgfSwgW3Jhd0NvbnRlbnRdOiBzdHJlYW0gfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBGaWxlIGludGVyZmFjZS4gVGhpcyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVcbiAqIHBhc3NlZCBpbnRvIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSwgYW5kIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgYXMgZXhwZWN0ZWQgaW5cbiAqIG90aGVyIHNpdHVhdGlvbnMuXG4gKlxuICogVXNlIHRoaXMgZnVuY3Rpb24gY3JlYXRlIGEgRmlsZSBvYmplY3QgZm9yIHVzZSBpbiBSZXF1ZXN0Qm9keVR5cGUuZm9ybURhdGEgaW4gZW52aXJvbm1lbnRzIHdoZXJlIHRoZSBnbG9iYWwgRmlsZSBvYmplY3QgaXMgdW5hdmFpbGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLSB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBhcyBhIFVpbnQ4QXJyYXkgaW4gbWVtb3J5LlxuICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9uYWwgbWV0YWRhdGEgYWJvdXQgdGhlIGZpbGUsIGUuZy4gZmlsZSBuYW1lLCBmaWxlIHNpemUsIE1JTUUgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsZShjb250ZW50LCBuYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICBpZiAoY29yZV91dGlsXzEuaXNOb2RlTGlrZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1bmltcGxlbWVudGVkTWV0aG9kcyksIHsgdHlwZTogKF9hID0gb3B0aW9ucy50eXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLCBsYXN0TW9kaWZpZWQ6IChfYiA9IG9wdGlvbnMubGFzdE1vZGlmaWVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgd2Via2l0UmVsYXRpdmVQYXRoOiAoX2MgPSBvcHRpb25zLndlYmtpdFJlbGF0aXZlUGF0aCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogXCJcIiwgc2l6ZTogY29udGVudC5ieXRlTGVuZ3RoLCBuYW1lLCBhcnJheUJ1ZmZlcjogYXN5bmMgKCkgPT4gY29udGVudC5idWZmZXIsIHN0cmVhbTogKCkgPT4gbmV3IEJsb2IoW2NvbnRlbnRdKS5zdHJlYW0oKSwgW3Jhd0NvbnRlbnRdOiAoKSA9PiBjb250ZW50IH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxlKFtjb250ZW50XSwgbmFtZSwgb3B0aW9ucyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdCA9IGNvbmNhdDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBub2RlX3N0cmVhbV8xID0gcmVxdWlyZShcIm5vZGU6c3RyZWFtXCIpO1xuY29uc3QgdHlwZUd1YXJkc19qc18xID0gcmVxdWlyZShcIi4vdHlwZUd1YXJkcy5qc1wiKTtcbmNvbnN0IGZpbGVfanNfMSA9IHJlcXVpcmUoXCIuL2ZpbGUuanNcIik7XG5mdW5jdGlvbiBzdHJlYW1Bc3luY0l0ZXJhdG9yKCkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogc3RyZWFtQXN5bmNJdGVyYXRvcl8xKCkge1xuICAgICAgICBjb25zdCByZWFkZXIgPSB0aGlzLmdldFJlYWRlcigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSB5aWVsZCB0c2xpYl8xLl9fYXdhaXQocmVhZGVyLnJlYWQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIHRzbGliXzEuX19hd2FpdCh2b2lkIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYl8xLl9fYXdhaXQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG1ha2VBc3luY0l0ZXJhYmxlKHdlYlN0cmVhbSkge1xuICAgIGlmICghd2ViU3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgICAgICB3ZWJTdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gc3RyZWFtQXN5bmNJdGVyYXRvci5iaW5kKHdlYlN0cmVhbSk7XG4gICAgfVxuICAgIGlmICghd2ViU3RyZWFtLnZhbHVlcykge1xuICAgICAgICB3ZWJTdHJlYW0udmFsdWVzID0gc3RyZWFtQXN5bmNJdGVyYXRvci5iaW5kKHdlYlN0cmVhbSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5zdXJlTm9kZVN0cmVhbShzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgICAgbWFrZUFzeW5jSXRlcmFibGUoc3RyZWFtKTtcbiAgICAgICAgcmV0dXJuIG5vZGVfc3RyZWFtXzEuUmVhZGFibGUuZnJvbVdlYihzdHJlYW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9XG59XG5mdW5jdGlvbiB0b1N0cmVhbShzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gbm9kZV9zdHJlYW1fMS5SZWFkYWJsZS5mcm9tKEJ1ZmZlci5mcm9tKHNvdXJjZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmICgoMCwgdHlwZUd1YXJkc19qc18xLmlzQmxvYikoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gdG9TdHJlYW0oKDAsIGZpbGVfanNfMS5nZXRSYXdDb250ZW50KShzb3VyY2UpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBlbnN1cmVOb2RlU3RyZWFtKHNvdXJjZSk7XG4gICAgfVxufVxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgY29uY2F0ZW5hdGVzIGEgc2V0IG9mIGJpbmFyeSBpbnB1dHMgaW50byBvbmUgY29tYmluZWQgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSBzb3VyY2VzIC0gYXJyYXkgb2Ygc291cmNlcyBmb3IgdGhlIGNvbmNhdGVuYXRpb25cbiAqIEByZXR1cm5zIC0gaW4gTm9kZSwgYSAoKCkgPVxcPiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pIHdoaWNoLCB3aGVuIHJlYWQsIHByb2R1Y2VzIGEgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIGlucHV0cy5cbiAqICAgICAgICAgICBJbiBicm93c2VyLCByZXR1cm5zIGEgYEJsb2JgIHJlcHJlc2VudGluZyBhbGwgdGhlIGNvbmNhdGVuYXRlZCBpbnB1dHMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmNhdChzb3VyY2VzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtcyA9IHNvdXJjZXMubWFwKCh4KSA9PiAodHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHgoKSA6IHgpKS5tYXAodG9TdHJlYW0pO1xuICAgICAgICByZXR1cm4gbm9kZV9zdHJlYW1fMS5SZWFkYWJsZS5mcm9tKChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIGVfMSwgX2IsIF9jO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RyZWFtIG9mIHN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gdHJ1ZSwgc3RyZWFtXzEgPSAoZV8xID0gdm9pZCAwLCB0c2xpYl8xLl9fYXN5bmNWYWx1ZXMoc3RyZWFtKSksIHN0cmVhbV8xXzE7IHN0cmVhbV8xXzEgPSB5aWVsZCB0c2xpYl8xLl9fYXdhaXQoc3RyZWFtXzEubmV4dCgpKSwgX2EgPSBzdHJlYW1fMV8xLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MgPSBzdHJlYW1fMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYl8xLl9fYXdhaXQoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBzdHJlYW1fMS5yZXR1cm4pKSB5aWVsZCB0c2xpYl8xLl9fYXdhaXQoX2IuY2FsbChzdHJlYW1fMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pKCkpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3kgPSBtdWx0aXBhcnRQb2xpY3k7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgY29uY2F0X2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9jb25jYXQuanNcIik7XG5jb25zdCB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC90eXBlR3VhcmRzLmpzXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdGVCb3VuZGFyeSgpIHtcbiAgICByZXR1cm4gYC0tLS1BelNES0Zvcm1Cb3VuZGFyeSR7KDAsIGNvcmVfdXRpbF8xLnJhbmRvbVVVSUQpKCl9YDtcbn1cbmZ1bmN0aW9uIGVuY29kZUhlYWRlcnMoaGVhZGVycykge1xuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgcmVzdWx0ICs9IGAke2tleX06ICR7dmFsdWV9XFxyXFxuYDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldExlbmd0aChzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCB0eXBlR3VhcmRzX2pzXzEuaXNCbG9iKShzb3VyY2UpKSB7XG4gICAgICAgIC8vIGlmIHdhcyBjcmVhdGVkIHVzaW5nIGNyZWF0ZUZpbGUgdGhlbiAtMSBtZWFucyB3ZSBoYXZlIGFuIHVua25vd24gc2l6ZVxuICAgICAgICByZXR1cm4gc291cmNlLnNpemUgPT09IC0xID8gdW5kZWZpbmVkIDogc291cmNlLnNpemU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFRvdGFsTGVuZ3RoKHNvdXJjZXMpIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgY29uc3QgcGFydExlbmd0aCA9IGdldExlbmd0aChzb3VyY2UpO1xuICAgICAgICBpZiAocGFydExlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdG90YWwgKz0gcGFydExlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG90YWw7XG59XG5hc3luYyBmdW5jdGlvbiBidWlsZFJlcXVlc3RCb2R5KHJlcXVlc3QsIHBhcnRzLCBib3VuZGFyeSkge1xuICAgIGNvbnN0IHNvdXJjZXMgPSBbXG4gICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKGAtLSR7Ym91bmRhcnl9YCwgXCJ1dGYtOFwiKSxcbiAgICAgICAgLi4ucGFydHMuZmxhdE1hcCgocGFydCkgPT4gW1xuICAgICAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoXCJcXHJcXG5cIiwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKGVuY29kZUhlYWRlcnMocGFydC5oZWFkZXJzKSwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKFwiXFxyXFxuXCIsIFwidXRmLThcIiksXG4gICAgICAgICAgICBwYXJ0LmJvZHksXG4gICAgICAgICAgICAoMCwgY29yZV91dGlsXzEuc3RyaW5nVG9VaW50OEFycmF5KShgXFxyXFxuLS0ke2JvdW5kYXJ5fWAsIFwidXRmLThcIiksXG4gICAgICAgIF0pLFxuICAgICAgICAoMCwgY29yZV91dGlsXzEuc3RyaW5nVG9VaW50OEFycmF5KShcIi0tXFxyXFxuXFxyXFxuXCIsIFwidXRmLThcIiksXG4gICAgXTtcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gZ2V0VG90YWxMZW5ndGgoc291cmNlcyk7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtTGVuZ3RoXCIsIGNvbnRlbnRMZW5ndGgpO1xuICAgIH1cbiAgICByZXF1ZXN0LmJvZHkgPSBhd2FpdCAoMCwgY29uY2F0X2pzXzEuY29uY2F0KShzb3VyY2VzKTtcbn1cbi8qKlxuICogTmFtZSBvZiBtdWx0aXBhcnQgcG9saWN5XG4gKi9cbmV4cG9ydHMubXVsdGlwYXJ0UG9saWN5TmFtZSA9IFwibXVsdGlwYXJ0UG9saWN5XCI7XG5jb25zdCBtYXhCb3VuZGFyeUxlbmd0aCA9IDcwO1xuY29uc3QgdmFsaWRCb3VuZGFyeUNoYXJhY3RlcnMgPSBuZXcgU2V0KGBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OScoKSssLS4vOj0/YCk7XG5mdW5jdGlvbiBhc3NlcnRWYWxpZEJvdW5kYXJ5KGJvdW5kYXJ5KSB7XG4gICAgaWYgKGJvdW5kYXJ5Lmxlbmd0aCA+IG1heEJvdW5kYXJ5TGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwYXJ0IGJvdW5kYXJ5IFwiJHtib3VuZGFyeX1cIiBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mIDcwIGNoYXJhY3RlcnNgKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmZyb20oYm91bmRhcnkpLnNvbWUoKHgpID0+ICF2YWxpZEJvdW5kYXJ5Q2hhcmFjdGVycy5oYXMoeCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwYXJ0IGJvdW5kYXJ5IFwiJHtib3VuZGFyeX1cIiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnNgKTtcbiAgICB9XG59XG4vKipcbiAqIFBpcGVsaW5lIHBvbGljeSBmb3IgbXVsdGlwYXJ0IHJlcXVlc3RzXG4gKi9cbmZ1bmN0aW9uIG11bHRpcGFydFBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLm11bHRpcGFydFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5tdWx0aXBhcnRCb2R5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5ib2R5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibXVsdGlwYXJ0Qm9keSBhbmQgcmVndWxhciBib2R5IGNhbm5vdCBiZSBzZXQgYXQgdGhlIHNhbWUgdGltZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBib3VuZGFyeSA9IHJlcXVlc3QubXVsdGlwYXJ0Qm9keS5ib3VuZGFyeTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyID0gKF9hID0gcmVxdWVzdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJtdWx0aXBhcnQvbWl4ZWRcIjtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEhlYWRlciA9IGNvbnRlbnRUeXBlSGVhZGVyLm1hdGNoKC9eKG11bHRpcGFydFxcL1teIDtdKykoPzo7ICpib3VuZGFyeT0oLispKT8kLyk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZEhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR290IG11bHRpcGFydCByZXF1ZXN0IGJvZHksIGJ1dCBjb250ZW50LXR5cGUgaGVhZGVyIHdhcyBub3QgbXVsdGlwYXJ0OiAke2NvbnRlbnRUeXBlSGVhZGVyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgWywgY29udGVudFR5cGUsIHBhcnNlZEJvdW5kYXJ5XSA9IHBhcnNlZEhlYWRlcjtcbiAgICAgICAgICAgIGlmIChwYXJzZWRCb3VuZGFyeSAmJiBib3VuZGFyeSAmJiBwYXJzZWRCb3VuZGFyeSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGFydCBib3VuZGFyeSB3YXMgc3BlY2lmaWVkIGFzICR7cGFyc2VkQm91bmRhcnl9IGluIHRoZSBoZWFkZXIsIGJ1dCBnb3QgJHtib3VuZGFyeX0gaW4gdGhlIHJlcXVlc3QgYm9keWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm91bmRhcnkgIT09IG51bGwgJiYgYm91bmRhcnkgIT09IHZvaWQgMCA/IGJvdW5kYXJ5IDogKGJvdW5kYXJ5ID0gcGFyc2VkQm91bmRhcnkpO1xuICAgICAgICAgICAgaWYgKGJvdW5kYXJ5KSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0VmFsaWRCb3VuZGFyeShib3VuZGFyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBib3VuZGFyeSA9IGdlbmVyYXRlQm91bmRhcnkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgYCR7Y29udGVudFR5cGV9OyBib3VuZGFyeT0ke2JvdW5kYXJ5fWApO1xuICAgICAgICAgICAgYXdhaXQgYnVpbGRSZXF1ZXN0Qm9keShyZXF1ZXN0LCByZXF1ZXN0Lm11bHRpcGFydEJvZHkucGFydHMsIGJvdW5kYXJ5KTtcbiAgICAgICAgICAgIHJlcXVlc3QubXVsdGlwYXJ0Qm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aXBhcnRQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kgPSBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3k7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5LlxuICovXG5leHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgPSBcImRlY29tcHJlc3NSZXNwb25zZVBvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0byBlbmFibGUgcmVzcG9uc2UgZGVjb21wcmVzc2lvbiBhY2NvcmRpbmcgdG8gQWNjZXB0LUVuY29kaW5nIGhlYWRlclxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2VwdC1FbmNvZGluZ1xuICovXG5mdW5jdGlvbiBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICAvLyBIRUFEIHJlcXVlc3RzIGhhdmUgbm8gYm9keVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJBY2NlcHQtRW5jb2RpbmdcIiwgXCJnemlwLGRlZmxhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVsYXkgPSBkZWxheTtcbmV4cG9ydHMucGFyc2VIZWFkZXJWYWx1ZUFzTnVtYmVyID0gcGFyc2VIZWFkZXJWYWx1ZUFzTnVtYmVyO1xuY29uc3QgYWJvcnRfY29udHJvbGxlcl8xID0gcmVxdWlyZShcIkBhenVyZS9hYm9ydC1jb250cm9sbGVyXCIpO1xuY29uc3QgU3RhbmRhcmRBYm9ydE1lc3NhZ2UgPSBcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCI7XG4vKipcbiAqIEEgd3JhcHBlciBmb3Igc2V0VGltZW91dCB0aGF0IHJlc29sdmVzIGEgcHJvbWlzZSBhZnRlciBkZWxheUluTXMgbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIGRlbGF5SW5NcyAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGRlbGF5ZWQuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBhZnRlciBhIHRpbWVvdXQgb2YgdCBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBkZWxheSAtIGN1cnJlbnRseSBhYm9ydCBvcHRpb25zXG4gKiAgICAgICAgICAgICAgICAgIC0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnRTaWduYWwgYXNzb2NpYXRlZCB3aXRoIGNvbnRhaW5pbmcgb3BlcmF0aW9uLlxuICogICAgICAgICAgICAgICAgICAtIGFib3J0RXJyb3JNc2cgLSBUaGUgYWJvcnQgZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggY29udGFpbmluZyBvcGVyYXRpb24uXG4gKiBAcmV0dXJucyBSZXNvbHZlZCBwcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KGRlbGF5SW5NcywgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgdGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBvbkFib3J0ZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlamVjdE9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBhYm9ydF9jb250cm9sbGVyXzEuQWJvcnRFcnJvcigob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0RXJyb3JNc2cpID8gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0RXJyb3JNc2cgOiBTdGFuZGFyZEFib3J0TWVzc2FnZSkpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZW1vdmVMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkgJiYgb25BYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgb25BYm9ydGVkID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdE9uQWJvcnQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRTaWduYWwpICYmIG9wdGlvbnMuYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdE9uQWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZGVsYXlJbk1zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkge1xuICAgICAgICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydGVkKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEByZXR1cm5zIHRoZSBwYXJzZWQgdmFsdWUgb3IgdW5kZWZpbmVkIGlmIHRoZSBwYXJzZWQgdmFsdWUgaXMgaW52YWxpZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJWYWx1ZUFzTnVtYmVyKHJlc3BvbnNlLCBoZWFkZXJOYW1lKSB7XG4gICAgY29uc3QgdmFsdWUgPSByZXNwb25zZS5oZWFkZXJzLmdldChoZWFkZXJOYW1lKTtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgdmFsdWVBc051bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZUFzTnVtKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiB2YWx1ZUFzTnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVGhyb3R0bGluZ1JldHJ5UmVzcG9uc2UgPSBpc1Rocm90dGxpbmdSZXRyeVJlc3BvbnNlO1xuZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlTdHJhdGVneSA9IHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5O1xuY29uc3QgaGVscGVyc19qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvaGVscGVycy5qc1wiKTtcbi8qKlxuICogVGhlIGhlYWRlciB0aGF0IGNvbWVzIGJhY2sgZnJvbSBBenVyZSBzZXJ2aWNlcyByZXByZXNlbnRpbmdcbiAqIHRoZSBhbW91bnQgb2YgdGltZSAobWluaW11bSkgdG8gd2FpdCB0byByZXRyeSAoaW4gc2Vjb25kcyBvciB0aW1lc3RhbXAgYWZ0ZXIgd2hpY2ggd2UgY2FuIHJldHJ5KS5cbiAqL1xuY29uc3QgUmV0cnlBZnRlckhlYWRlciA9IFwiUmV0cnktQWZ0ZXJcIjtcbi8qKlxuICogVGhlIGhlYWRlcnMgdGhhdCBjb21lIGJhY2sgZnJvbSBBenVyZSBzZXJ2aWNlcyByZXByZXNlbnRpbmdcbiAqIHRoZSBhbW91bnQgb2YgdGltZSAobWluaW11bSkgdG8gd2FpdCB0byByZXRyeS5cbiAqXG4gKiBcInJldHJ5LWFmdGVyLW1zXCIsIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIDogbWlsbGlzZWNvbmRzXG4gKiBcIlJldHJ5LUFmdGVyXCIgOiBzZWNvbmRzIG9yIHRpbWVzdGFtcFxuICovXG5jb25zdCBBbGxSZXRyeUFmdGVySGVhZGVycyA9IFtcInJldHJ5LWFmdGVyLW1zXCIsIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiLCBSZXRyeUFmdGVySGVhZGVyXTtcbi8qKlxuICogQSByZXNwb25zZSBpcyBhIHRocm90dGxpbmcgcmV0cnkgcmVzcG9uc2UgaWYgaXQgaGFzIGEgdGhyb3R0bGluZyBzdGF0dXMgY29kZSAoNDI5IG9yIDUwMyksXG4gKiBhcyBsb25nIGFzIG9uZSBvZiB0aGUgWyBcIlJldHJ5LUFmdGVyXCIgb3IgXCJyZXRyeS1hZnRlci1tc1wiIG9yIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIF0gaGVhZGVycyBoYXMgYSB2YWxpZCB2YWx1ZS5cbiAqXG4gKiBSZXR1cm5zIHRoZSBgcmV0cnlBZnRlckluTXNgIHZhbHVlIGlmIHRoZSByZXNwb25zZSBpcyBhIHRocm90dGxpbmcgcmV0cnkgcmVzcG9uc2UuXG4gKiBJZiBub3QgdGhyb3R0bGluZyByZXRyeSByZXNwb25zZSwgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlckluTXMocmVzcG9uc2UpIHtcbiAgICBpZiAoIShyZXNwb25zZSAmJiBbNDI5LCA1MDNdLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIEhlYWRlcnM6IFwicmV0cnktYWZ0ZXItbXNcIiwgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIsIFwiUmV0cnktQWZ0ZXJcIlxuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBBbGxSZXRyeUFmdGVySGVhZGVycykge1xuICAgICAgICAgICAgY29uc3QgcmV0cnlBZnRlclZhbHVlID0gKDAsIGhlbHBlcnNfanNfMS5wYXJzZUhlYWRlclZhbHVlQXNOdW1iZXIpKHJlc3BvbnNlLCBoZWFkZXIpO1xuICAgICAgICAgICAgaWYgKHJldHJ5QWZ0ZXJWYWx1ZSA9PT0gMCB8fCByZXRyeUFmdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBcIlJldHJ5LUFmdGVyXCIgaGVhZGVyID09PiBzZWNvbmRzXG4gICAgICAgICAgICAgICAgLy8gXCJyZXRyeS1hZnRlci1tc1wiLCBcIngtbXMtcmV0cnktYWZ0ZXItbXNcIiBoZWFkZXJzID09PiBtaWxsaS1zZWNvbmRzXG4gICAgICAgICAgICAgICAgY29uc3QgbXVsdGlwbHlpbmdGYWN0b3IgPSBoZWFkZXIgPT09IFJldHJ5QWZ0ZXJIZWFkZXIgPyAxMDAwIDogMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0cnlBZnRlclZhbHVlICogbXVsdGlwbHlpbmdGYWN0b3I7IC8vIGluIG1pbGxpLXNlY29uZHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZXRyeUFmdGVySGVhZGVyIChcIlJldHJ5LUFmdGVyXCIpIGhhcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSBpdCBtaWdodCBiZSBmb3JtYXR0ZWQgYXMgYSBkYXRlIGluc3RlYWQgb2YgYSBudW1iZXIgb2Ygc2Vjb25kc1xuICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoUmV0cnlBZnRlckhlYWRlcik7XG4gICAgICAgIGlmICghcmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZGF0ZSA9IERhdGUucGFyc2UocmV0cnlBZnRlckhlYWRlcik7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBkYXRlIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gbmVnYXRpdmUgZGlmZiB3b3VsZCBtZWFuIGEgZGF0ZSBpbiB0aGUgcGFzdCwgc28gcmV0cnkgYXNhcCB3aXRoIDAgbWlsbGlzZWNvbmRzXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoZGlmZikgPyBNYXRoLm1heCgwLCBkaWZmKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBBIHJlc3BvbnNlIGlzIGEgcmV0cnkgcmVzcG9uc2UgaWYgaXQgaGFzIGEgdGhyb3R0bGluZyBzdGF0dXMgY29kZSAoNDI5IG9yIDUwMyksXG4gKiBhcyBsb25nIGFzIG9uZSBvZiB0aGUgWyBcIlJldHJ5LUFmdGVyXCIgb3IgXCJyZXRyeS1hZnRlci1tc1wiIG9yIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIF0gaGVhZGVycyBoYXMgYSB2YWxpZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaXNUaHJvdHRsaW5nUmV0cnlSZXNwb25zZShyZXNwb25zZSkge1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoZ2V0UmV0cnlBZnRlckluTXMocmVzcG9uc2UpKTtcbn1cbmZ1bmN0aW9uIHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwidGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lcIixcbiAgICAgICAgcmV0cnkoeyByZXNwb25zZSB9KSB7XG4gICAgICAgICAgICBjb25zdCByZXRyeUFmdGVySW5NcyA9IGdldFJldHJ5QWZ0ZXJJbk1zKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJldHJ5QWZ0ZXJJbk1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNraXBTdHJhdGVneTogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXRyeUFmdGVySW5NcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxpbmdSZXRyeVN0cmF0ZWd5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5ID0gZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5O1xuZXhwb3J0cy5pc0V4cG9uZW50aWFsUmV0cnlSZXNwb25zZSA9IGlzRXhwb25lbnRpYWxSZXRyeVJlc3BvbnNlO1xuZXhwb3J0cy5pc1N5c3RlbUVycm9yID0gaXNTeXN0ZW1FcnJvcjtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4vdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanNcIik7XG4vLyBpbnRlcnZhbHMgYXJlIGluIG1pbGxpc2Vjb25kc1xuY29uc3QgREVGQVVMVF9DTElFTlRfUkVUUllfSU5URVJWQUwgPSAxMDAwO1xuY29uc3QgREVGQVVMVF9DTElFTlRfTUFYX1JFVFJZX0lOVEVSVkFMID0gMTAwMCAqIDY0O1xuLyoqXG4gKiBBIHJldHJ5IHN0cmF0ZWd5IHRoYXQgcmV0cmllcyB3aXRoIGFuIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZyBkZWxheSBpbiB0aGVzZSB0d28gY2FzZXM6XG4gKiAtIFdoZW4gdGhlcmUgYXJlIGVycm9ycyBpbiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gRE5TIGxvb2t1cCBmYWlsdXJlcykuXG4gKiAtIE9yIG90aGVyd2lzZSBpZiB0aGUgb3V0Z29pbmcgcmVxdWVzdCBmYWlscyAoNDA4LCBncmVhdGVyIG9yIGVxdWFsIHRoYW4gNTAwLCBleGNlcHQgZm9yIDUwMSBhbmQgNTA1KS5cbiAqL1xuZnVuY3Rpb24gZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgcmV0cnlJbnRlcnZhbCA9IChfYSA9IG9wdGlvbnMucmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IERFRkFVTFRfQ0xJRU5UX1JFVFJZX0lOVEVSVkFMO1xuICAgIGNvbnN0IG1heFJldHJ5SW50ZXJ2YWwgPSAoX2IgPSBvcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBERUZBVUxUX0NMSUVOVF9NQVhfUkVUUllfSU5URVJWQUw7XG4gICAgbGV0IHJldHJ5QWZ0ZXJJbk1zID0gcmV0cnlJbnRlcnZhbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcImV4cG9uZW50aWFsUmV0cnlTdHJhdGVneVwiLFxuICAgICAgICByZXRyeSh7IHJldHJ5Q291bnQsIHJlc3BvbnNlLCByZXNwb25zZUVycm9yIH0pIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRTeXN0ZW1FcnJvciA9IGlzU3lzdGVtRXJyb3IocmVzcG9uc2VFcnJvcik7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVTeXN0ZW1FcnJvcnMgPSBtYXRjaGVkU3lzdGVtRXJyb3IgJiYgb3B0aW9ucy5pZ25vcmVTeXN0ZW1FcnJvcnM7XG4gICAgICAgICAgICBjb25zdCBpc0V4cG9uZW50aWFsID0gaXNFeHBvbmVudGlhbFJldHJ5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgY29uc3QgaWdub3JlRXhwb25lbnRpYWxSZXNwb25zZSA9IGlzRXhwb25lbnRpYWwgJiYgb3B0aW9ucy5pZ25vcmVIdHRwU3RhdHVzQ29kZXM7XG4gICAgICAgICAgICBjb25zdCB1bmtub3duUmVzcG9uc2UgPSByZXNwb25zZSAmJiAoKDAsIHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEuaXNUaHJvdHRsaW5nUmV0cnlSZXNwb25zZSkocmVzcG9uc2UpIHx8ICFpc0V4cG9uZW50aWFsKTtcbiAgICAgICAgICAgIGlmICh1bmtub3duUmVzcG9uc2UgfHwgaWdub3JlRXhwb25lbnRpYWxSZXNwb25zZSB8fCBpZ25vcmVTeXN0ZW1FcnJvcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBza2lwU3RyYXRlZ3k6IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZUVycm9yICYmICFtYXRjaGVkU3lzdGVtRXJyb3IgJiYgIWlzRXhwb25lbnRpYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvclRvVGhyb3c6IHJlc3BvbnNlRXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV4cG9uZW50aWFsbHkgaW5jcmVhc2UgdGhlIGRlbGF5IGVhY2ggdGltZVxuICAgICAgICAgICAgY29uc3QgZXhwb25lbnRpYWxEZWxheSA9IHJldHJ5QWZ0ZXJJbk1zICogTWF0aC5wb3coMiwgcmV0cnlDb3VudCk7XG4gICAgICAgICAgICAvLyBEb24ndCBsZXQgdGhlIGRlbGF5IGV4Y2VlZCB0aGUgbWF4aW11bVxuICAgICAgICAgICAgY29uc3QgY2xhbXBlZEV4cG9uZW50aWFsRGVsYXkgPSBNYXRoLm1pbihtYXhSZXRyeUludGVydmFsLCBleHBvbmVudGlhbERlbGF5KTtcbiAgICAgICAgICAgIC8vIEFsbG93IHRoZSBmaW5hbCB2YWx1ZSB0byBoYXZlIHNvbWUgXCJqaXR0ZXJcIiAod2l0aGluIDUwJSBvZiB0aGUgZGVsYXkgc2l6ZSkgc29cbiAgICAgICAgICAgIC8vIHRoYXQgcmV0cmllcyBhY3Jvc3MgbXVsdGlwbGUgY2xpZW50cyBkb24ndCBvY2N1ciBzaW11bHRhbmVvdXNseS5cbiAgICAgICAgICAgIHJldHJ5QWZ0ZXJJbk1zID1cbiAgICAgICAgICAgICAgICBjbGFtcGVkRXhwb25lbnRpYWxEZWxheSAvIDIgKyAoMCwgY29yZV91dGlsXzEuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZSkoMCwgY2xhbXBlZEV4cG9uZW50aWFsRGVsYXkgLyAyKTtcbiAgICAgICAgICAgIHJldHVybiB7IHJldHJ5QWZ0ZXJJbk1zIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogQSByZXNwb25zZSBpcyBhIHJldHJ5IHJlc3BvbnNlIGlmIGl0IGhhcyBzdGF0dXMgY29kZXM6XG4gKiAtIDQwOCwgb3JcbiAqIC0gR3JlYXRlciBvciBlcXVhbCB0aGFuIDUwMCwgZXhjZXB0IGZvciA1MDEgYW5kIDUwNS5cbiAqL1xuZnVuY3Rpb24gaXNFeHBvbmVudGlhbFJldHJ5UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICByZXR1cm4gQm9vbGVhbihyZXNwb25zZSAmJlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAocmVzcG9uc2Uuc3RhdHVzID49IDUwMCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwOCkgJiZcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzICE9PSA1MDEgJiZcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzICE9PSA1MDUpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gZXJyb3IgZnJvbSBhIHBpcGVsaW5lIHJlc3BvbnNlIHdhcyB0cmlnZ2VyZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIuXG4gKi9cbmZ1bmN0aW9uIGlzU3lzdGVtRXJyb3IoZXJyKSB7XG4gICAgaWYgKCFlcnIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKGVyci5jb2RlID09PSBcIkVUSU1FRE9VVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVTT0NLRVRUSU1FRE9VVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVDT05OUkVGVVNFRFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVDT05OUkVTRVRcIiB8fFxuICAgICAgICBlcnIuY29kZSA9PT0gXCJFTk9FTlRcIiB8fFxuICAgICAgICBlcnIuY29kZSA9PT0gXCJFTk9URk9VTkRcIik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXRyeVBvbGljeSA9IHJldHJ5UG9saWN5O1xuY29uc3QgaGVscGVyc19qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvaGVscGVycy5qc1wiKTtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG5jb25zdCByZXRyeVBvbGljeUxvZ2dlciA9ICgwLCBsb2dnZXJfMS5jcmVhdGVDbGllbnRMb2dnZXIpKFwiY29yZS1yZXN0LXBpcGVsaW5lIHJldHJ5UG9saWN5XCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHJldHJ5UG9saWN5LlxuICovXG5jb25zdCByZXRyeVBvbGljeU5hbWUgPSBcInJldHJ5UG9saWN5XCI7XG4vKipcbiAqIHJldHJ5UG9saWN5IGlzIGEgZ2VuZXJpYyBwb2xpY3kgdG8gZW5hYmxlIHJldHJ5aW5nIHJlcXVlc3RzIHdoZW4gY2VydGFpbiBjb25kaXRpb25zIGFyZSBtZXRcbiAqL1xuZnVuY3Rpb24gcmV0cnlQb2xpY3koc3RyYXRlZ2llcywgb3B0aW9ucyA9IHsgbWF4UmV0cmllczogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQgfSkge1xuICAgIGNvbnN0IGxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyIHx8IHJldHJ5UG9saWN5TG9nZ2VyO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGxldCByZXNwb25zZUVycm9yO1xuICAgICAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAtMTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgICAgICAgIHJldHJ5UmVxdWVzdDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50ICs9IDE7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogQXR0ZW1wdGluZyB0byBzZW5kIHJlcXVlc3RgLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFJlY2VpdmVkIGEgcmVzcG9uc2UgZnJvbSByZXF1ZXN0YCwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5ICR7cmV0cnlDb3VudH06IFJlY2VpdmVkIGFuIGVycm9yIGZyb20gcmVxdWVzdGAsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVzdEVycm9ycyBhcmUgdmFsaWQgdGFyZ2V0cyBmb3IgdGhlIHJldHJ5IHN0cmF0ZWdpZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIHJldHJ5IHN0cmF0ZWdpZXMgY2FuIHdvcmsgd2l0aCB0aGVtLCB0aGV5IHdpbGwgYmUgdGhyb3duIGxhdGVyIGluIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVjZWl2ZWQgZXJyb3IgaXMgbm90IGEgUmVzdEVycm9yLCBpdCBpcyBpbW1lZGlhdGVseSB0aHJvd24uXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3IgPSBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUgfHwgcmVzcG9uc2VFcnJvci5uYW1lICE9PSBcIlJlc3RFcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2VFcnJvci5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChfYSA9IHJlcXVlc3QuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnkgJHtyZXRyeUNvdW50fTogUmVxdWVzdCBhYm9ydGVkLmApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGFib3J0RXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID49ICgoX2IgPSBvcHRpb25zLm1heFJldHJpZXMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNvbnN0YW50c19qc18xLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5UKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogTWF4aW11bSByZXRyaWVzIHJlYWNoZWQuIFJldHVybmluZyB0aGUgbGFzdCByZWNlaXZlZCByZXNwb25zZSwgb3IgdGhyb3dpbmcgdGhlIGxhc3QgcmVjZWl2ZWQgZXJyb3IuYCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZUVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYXhpbXVtIHJldHJpZXMgcmVhY2hlZCB3aXRoIG5vIHJlc3BvbnNlIG9yIGVycm9yIHRvIHRocm93XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBQcm9jZXNzaW5nICR7c3RyYXRlZ2llcy5sZW5ndGh9IHJldHJ5IHN0cmF0ZWdpZXMuYCk7XG4gICAgICAgICAgICAgICAgc3RyYXRlZ2llc0xvb3A6IGZvciAoY29uc3Qgc3RyYXRlZ3kgb2Ygc3RyYXRlZ2llcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJhdGVneUxvZ2dlciA9IHN0cmF0ZWd5LmxvZ2dlciB8fCByZXRyeVBvbGljeUxvZ2dlcjtcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogUHJvY2Vzc2luZyByZXRyeSBzdHJhdGVneSAke3N0cmF0ZWd5Lm5hbWV9LmApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2RpZmllcnMgPSBzdHJhdGVneS5yZXRyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUVycm9yLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVycy5za2lwU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFNraXBwZWQuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBzdHJhdGVnaWVzTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yVG9UaHJvdywgcmV0cnlBZnRlckluTXMsIHJlZGlyZWN0VG8gfSA9IG1vZGlmaWVycztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yVG9UaHJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuZXJyb3IoYFJldHJ5ICR7cmV0cnlDb3VudH06IFJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0gdGhyb3dzIGVycm9yOmAsIGVycm9yVG9UaHJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclRvVGhyb3c7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5QWZ0ZXJJbk1zIHx8IHJldHJ5QWZ0ZXJJbk1zID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJhdGVneUxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBSZXRyeSBzdHJhdGVneSAke3N0cmF0ZWd5Lm5hbWV9IHJldHJpZXMgYWZ0ZXIgJHtyZXRyeUFmdGVySW5Nc31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBoZWxwZXJzX2pzXzEuZGVsYXkpKHJldHJ5QWZ0ZXJJbk1zLCB1bmRlZmluZWQsIHsgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSByZXRyeVJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0VG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0gcmVkaXJlY3RzIHRvICR7cmVkaXJlY3RUb31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsID0gcmVkaXJlY3RUbztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHJldHJ5UmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgTm9uZSBvZiB0aGUgcmV0cnkgc3RyYXRlZ2llcyBjb3VsZCB3b3JrIHdpdGggdGhlIHJlY2VpdmVkIGVycm9yLiBUaHJvd2luZyBpdC5gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBOb25lIG9mIHRoZSByZXRyeSBzdHJhdGVnaWVzIGNvdWxkIHdvcmsgd2l0aCB0aGUgcmVjZWl2ZWQgcmVzcG9uc2UuIFJldHVybmluZyBpdC5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiBhbGwgdGhlIHJldHJpZXMgc2tpcCBhbmQgdGhlcmUncyBubyByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAvLyB3ZSdyZSBzdGlsbCBpbiB0aGUgcmV0cnkgbG9vcCwgc28gYSBuZXcgcmVxdWVzdCB3aWxsIGJlIHNlbnRcbiAgICAgICAgICAgICAgICAvLyB1bnRpbCBgbWF4UmV0cmllc2AgaXMgcmVhY2hlZC5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0UmV0cnlQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0UmV0cnlQb2xpY3kgPSBkZWZhdWx0UmV0cnlQb2xpY3k7XG5jb25zdCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayBkZWZhdWx0UmV0cnlQb2xpY3l9XG4gKi9cbmV4cG9ydHMuZGVmYXVsdFJldHJ5UG9saWN5TmFtZSA9IFwiZGVmYXVsdFJldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgcmV0cmllcyBhY2NvcmRpbmcgdG8gdGhyZWUgc3RyYXRlZ2llczpcbiAqIC0gV2hlbiB0aGUgc2VydmVyIHNlbmRzIGEgNDI5IHJlc3BvbnNlIHdpdGggYSBSZXRyeS1BZnRlciBoZWFkZXIuXG4gKiAtIFdoZW4gdGhlcmUgYXJlIGVycm9ycyBpbiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gRE5TIGxvb2t1cCBmYWlsdXJlcykuXG4gKiAtIE9yIG90aGVyd2lzZSBpZiB0aGUgb3V0Z29pbmcgcmVxdWVzdCBmYWlscywgaXQgd2lsbCByZXRyeSB3aXRoIGFuIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZyBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFJldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIHNlbmRSZXF1ZXN0OiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoWygwLCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xLnRocm90dGxpbmdSZXRyeVN0cmF0ZWd5KSgpLCAoMCwgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KShvcHRpb25zKV0sIHtcbiAgICAgICAgICAgIG1heFJldHJpZXM6IChfYSA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQsXG4gICAgICAgIH0pLnNlbmRSZXF1ZXN0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0UmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVIdHRwSGVhZGVycyA9IGNyZWF0ZUh0dHBIZWFkZXJzO1xuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbmZ1bmN0aW9uKiBoZWFkZXJJdGVyYXRvcihtYXApIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG1hcC52YWx1ZXMoKSkge1xuICAgICAgICB5aWVsZCBbZW50cnkubmFtZSwgZW50cnkudmFsdWVdO1xuICAgIH1cbn1cbmNsYXNzIEh0dHBIZWFkZXJzSW1wbCB7XG4gICAgY29uc3RydWN0b3IocmF3SGVhZGVycykge1xuICAgICAgICB0aGlzLl9oZWFkZXJzTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAocmF3SGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKHJhd0hlYWRlcnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoaGVhZGVyTmFtZSwgcmF3SGVhZGVyc1toZWFkZXJOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGEgaGVhZGVyIGluIHRoaXMgY29sbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFuZCB2YWx1ZS4gVGhlIG5hbWUgaXNcbiAgICAgKiBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byBzZXQuIFRoaXMgdmFsdWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGhlYWRlciB0byBzZXQuXG4gICAgICovXG4gICAgc2V0KG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlcnNNYXAuc2V0KG5vcm1hbGl6ZU5hbWUobmFtZSksIHsgbmFtZSwgdmFsdWU6IFN0cmluZyh2YWx1ZSkudHJpbSgpIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIGhlYWRlciBuYW1lLCBvciB1bmRlZmluZWQgaWYgbm8gaGVhZGVyIGV4aXN0cyBpbiB0aGlzXG4gICAgICogY29sbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlci4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqL1xuICAgIGdldChuYW1lKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2hlYWRlcnNNYXAuZ2V0KG5vcm1hbGl6ZU5hbWUobmFtZSkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCB0aGlzIGhlYWRlciBjb2xsZWN0aW9uIGNvbnRhaW5zIGEgaGVhZGVyIGVudHJ5IGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHNldC4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqL1xuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJzTWFwLmhhcyhub3JtYWxpemVOYW1lKG5hbWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHRoZSBoZWFkZXIgd2l0aCB0aGUgcHJvdmlkZWQgaGVhZGVyTmFtZS5cbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gcmVtb3ZlLlxuICAgICAqL1xuICAgIGRlbGV0ZShuYW1lKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlcnNNYXAuZGVsZXRlKG5vcm1hbGl6ZU5hbWUobmFtZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEpTT04gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b0pTT04ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucy5wcmVzZXJ2ZUNhc2UpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5faGVhZGVyc01hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtlbnRyeS5uYW1lXSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbm9ybWFsaXplZE5hbWUsIGVudHJ5XSBvZiB0aGlzLl9oZWFkZXJzTWFwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W25vcm1hbGl6ZWROYW1lXSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlcmF0ZSBvdmVyIHR1cGxlcyBvZiBoZWFkZXIgW25hbWUsIHZhbHVlXSBwYWlycy5cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlckl0ZXJhdG9yKHRoaXMuX2hlYWRlcnNNYXApO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBzYXRpc2ZpZXMgdGhlIGBIdHRwSGVhZGVyc2AgaW50ZXJmYWNlLlxuICogQHBhcmFtIHJhd0hlYWRlcnMgLSBBIHNpbXBsZSBvYmplY3QgcmVwcmVzZW50aW5nIGluaXRpYWwgaGVhZGVyc1xuICovXG5mdW5jdGlvbiBjcmVhdGVIdHRwSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVyc0ltcGwocmF3SGVhZGVycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1odHRwSGVhZGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZvcm1EYXRhUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuZm9ybURhdGFQb2xpY3kgPSBmb3JtRGF0YVBvbGljeTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4uL2h0dHBIZWFkZXJzLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGZvcm1EYXRhUG9saWN5LlxuICovXG5leHBvcnRzLmZvcm1EYXRhUG9saWN5TmFtZSA9IFwiZm9ybURhdGFQb2xpY3lcIjtcbmZ1bmN0aW9uIGZvcm1EYXRhVG9Gb3JtRGF0YU1hcChmb3JtRGF0YSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBmb3JtRGF0YU1hcCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGZvcm1EYXRhLmVudHJpZXMoKSkge1xuICAgICAgICAoX2EgPSBmb3JtRGF0YU1hcFtrZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoZm9ybURhdGFNYXBba2V5XSA9IFtdKTtcbiAgICAgICAgZm9ybURhdGFNYXBba2V5XS5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1EYXRhTWFwO1xufVxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGVuY29kZXMgRm9ybURhdGEgb24gdGhlIHJlcXVlc3QgaW50byB0aGUgYm9keS5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFQb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5mb3JtRGF0YVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjb3JlX3V0aWxfMS5pc05vZGVMaWtlICYmIHR5cGVvZiBGb3JtRGF0YSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuZm9ybURhdGEgPSBmb3JtRGF0YVRvRm9ybURhdGFNYXAocmVxdWVzdC5ib2R5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5mb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gd3d3Rm9ybVVybEVuY29kZShyZXF1ZXN0LmZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHByZXBhcmVGb3JtRGF0YShyZXF1ZXN0LmZvcm1EYXRhLCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5mb3JtRGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiB3d3dGb3JtVXJsRW5jb2RlKGZvcm1EYXRhKSB7XG4gICAgY29uc3QgdXJsU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZvcm1EYXRhKSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViVmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB1cmxTZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgc3ViVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1cmxTZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybFNlYXJjaFBhcmFtcy50b1N0cmluZygpO1xufVxuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUZvcm1EYXRhKGZvcm1EYXRhLCByZXF1ZXN0KSB7XG4gICAgLy8gdmFsaWRhdGUgY29udGVudCB0eXBlIChtdWx0aXBhcnQvZm9ybS1kYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICBpZiAoY29udGVudFR5cGUgJiYgIWNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIpKSB7XG4gICAgICAgIC8vIGNvbnRlbnQgdHlwZSBpcyBzcGVjaWZpZWQgYW5kIGlzIG5vdCBtdWx0aXBhcnQvZm9ybS1kYXRhLiBFeGl0LlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgY29udGVudFR5cGUgIT09IG51bGwgJiYgY29udGVudFR5cGUgIT09IHZvaWQgMCA/IGNvbnRlbnRUeXBlIDogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIpO1xuICAgIC8vIHNldCBib2R5IHRvIE11bHRpcGFydFJlcXVlc3RCb2R5IHVzaW5nIGNvbnRlbnQgZnJvbSBGb3JtRGF0YU1hcFxuICAgIGNvbnN0IHBhcnRzID0gW107XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKGZvcm1EYXRhKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHZhbHVlcyA6IFt2YWx1ZXNdKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6ICgwLCBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzKSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIjogYGZvcm0tZGF0YTsgbmFtZT1cIiR7ZmllbGROYW1lfVwiYCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6ICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKHZhbHVlLCBcInV0Zi04XCIpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgZm9yIGtleSAke2ZpZWxkTmFtZX06ICR7dmFsdWV9LiBWYWx1ZSBzaG91bGQgYmUgc2VyaWFsaXplZCB0byBzdHJpbmcgZmlyc3QuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB1c2luZyB8fCBpbnN0ZWFkIG9mID8/IGhlcmUgc2luY2UgaWYgdmFsdWUubmFtZSBpcyBlbXB0eSB3ZSBzaG91bGQgY3JlYXRlIGEgZmlsZSBuYW1lXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB2YWx1ZS5uYW1lIHx8IFwiYmxvYlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVycykoKTtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldChcIkNvbnRlbnQtRGlzcG9zaXRpb25cIiwgYGZvcm0tZGF0YTsgbmFtZT1cIiR7ZmllbGROYW1lfVwiOyBmaWxlbmFtZT1cIiR7ZmlsZU5hbWV9XCJgKTtcbiAgICAgICAgICAgICAgICAvLyBhZ2FpbiwgfHwgaXMgdXNlZCBzaW5jZSBhbiBlbXB0eSB2YWx1ZS50eXBlIG1lYW5zIHRoZSBjb250ZW50IHR5cGUgaXMgdW5zZXRcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCB2YWx1ZS50eXBlIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpO1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0Lm11bHRpcGFydEJvZHkgPSB7IHBhcnRzIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtRGF0YVBvbGljeS5qcy5tYXAiLAogICAgIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICd3ZWVrcyc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgY2FzZSAndyc6XG4gICAgICByZXR1cm4gbiAqIHc7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBoLCAnaG91cicpO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gIH1cbiAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBtc0FicywgbiwgbmFtZSkge1xuICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsCiAgICAiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBkZWJ1ZyBpbnN0YW5jZSB0byBiZSBjb2xvcmVkXG5cdCogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuXHRcdGxldCBoYXNoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcblx0XHRcdGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuXHR9XG5cdGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG5cblx0LyoqXG5cdCogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQHJldHVybiB7RnVuY3Rpb259XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cdFx0bGV0IHByZXZUaW1lO1xuXHRcdGxldCBlbmFibGVPdmVycmlkZSA9IG51bGw7XG5cdFx0bGV0IG5hbWVzcGFjZXNDYWNoZTtcblx0XHRsZXQgZW5hYmxlZENhY2hlO1xuXG5cdFx0ZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuXHRcdFx0Ly8gRGlzYWJsZWQ/XG5cdFx0XHRpZiAoIWRlYnVnLmVuYWJsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZWxmID0gZGVidWc7XG5cblx0XHRcdC8vIFNldCBgZGlmZmAgdGltZXN0YW1wXG5cdFx0XHRjb25zdCBjdXJyID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXHRcdFx0Y29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuXHRcdFx0c2VsZi5kaWZmID0gbXM7XG5cdFx0XHRzZWxmLnByZXYgPSBwcmV2VGltZTtcblx0XHRcdHNlbGYuY3VyciA9IGN1cnI7XG5cdFx0XHRwcmV2VGltZSA9IGN1cnI7XG5cblx0XHRcdGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cblx0XHRcdFx0YXJncy51bnNoaWZ0KCclTycpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuXHRcdFx0bGV0IGluZGV4ID0gMDtcblx0XHRcdGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCAobWF0Y2gsIGZvcm1hdCkgPT4ge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG5cdFx0XHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0XHRcdHJldHVybiAnJSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGNvbnN0IHZhbCA9IGFyZ3NbaW5kZXhdO1xuXHRcdFx0XHRcdG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuXHRcdFx0XHRcdC8vIE5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcblx0XHRcdGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcblxuXHRcdFx0Y29uc3QgbG9nRm4gPSBzZWxmLmxvZyB8fCBjcmVhdGVEZWJ1Zy5sb2c7XG5cdFx0XHRsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcblx0XHR9XG5cblx0XHRkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG5cdFx0ZGVidWcudXNlQ29sb3JzID0gY3JlYXRlRGVidWcudXNlQ29sb3JzKCk7XG5cdFx0ZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuXHRcdGRlYnVnLmV4dGVuZCA9IGV4dGVuZDtcblx0XHRkZWJ1Zy5kZXN0cm95ID0gY3JlYXRlRGVidWcuZGVzdHJveTsgLy8gWFhYIFRlbXBvcmFyeS4gV2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVidWcsICdlbmFibGVkJywge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGVuYWJsZU92ZXJyaWRlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcblx0XHRcdFx0XHRuYW1lc3BhY2VzQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzO1xuXHRcdFx0XHRcdGVuYWJsZWRDYWNoZSA9IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbmFibGVkQ2FjaGU7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXHRcdGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0bGV0IGk7XG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuXHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCFzcGxpdFtpXSkge1xuXHRcdFx0XHQvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cblx0XHRcdGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc2xpY2UoMSkgKyAnJCcpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG5cdCpcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBkaXNhYmxlKCkge1xuXHRcdGNvbnN0IG5hbWVzcGFjZXMgPSBbXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5uYW1lcy5tYXAodG9OYW1lc3BhY2UpLFxuXHRcdFx0Li4uY3JlYXRlRGVidWcuc2tpcHMubWFwKHRvTmFtZXNwYWNlKS5tYXAobmFtZXNwYWNlID0+ICctJyArIG5hbWVzcGFjZSlcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuXHRcdHJldHVybiBuYW1lc3BhY2VzO1xuXHR9XG5cblx0LyoqXG5cdCogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0KiBAcmV0dXJuIHtCb29sZWFufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuXHRcdGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGk7XG5cdFx0bGV0IGxlbjtcblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQqIENvbnZlcnQgcmVnZXhwIHRvIG5hbWVzcGFjZVxuXHQqXG5cdCogQHBhcmFtIHtSZWdFeHB9IHJlZ3hlcFxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHRvTmFtZXNwYWNlKHJlZ2V4cCkge1xuXHRcdHJldHVybiByZWdleHAudG9TdHJpbmcoKVxuXHRcdFx0LnN1YnN0cmluZygyLCByZWdleHAudG9TdHJpbmcoKS5sZW5ndGggLSAyKVxuXHRcdFx0LnJlcGxhY2UoL1xcLlxcKlxcPyQvLCAnKicpO1xuXHR9XG5cblx0LyoqXG5cdCogQ29lcmNlIGB2YWxgLlxuXHQqXG5cdCogQHBhcmFtIHtNaXhlZH0gdmFsXG5cdCogQHJldHVybiB7TWl4ZWR9XG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcblx0XHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvKipcblx0KiBYWFggRE8gTk9UIFVTRS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdHViIGZ1bmN0aW9uLlxuXHQqIFhYWCBJdCBXSUxMIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblx0Ki9cblx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0fVxuXG5cdGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuXG5cdHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcbiIsCiAgICAiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGxldCBtO1xuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIChtID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykpICYmIHBhcnNlSW50KG1bMV0sIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLAogICAgIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdFdpdGhPcHRpb25zKClgIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMgYW5kIHdyaXRlcyB0byBzdGRlcnIuXG4gKi9cblxuZnVuY3Rpb24gbG9nKC4uLmFyZ3MpIHtcblx0cmV0dXJuIHByb2Nlc3Muc3RkZXJyLndyaXRlKHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoZXhwb3J0cy5pbnNwZWN0T3B0cywgLi4uYXJncykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG5cdFx0Ly8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cblx0XHRkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRyZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdChkZWJ1Zykge1xuXHRkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChzdHIgPT4gc3RyLnRyaW0oKSlcblx0XHQuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJU8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuIiwKICAgICIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVxID0gZXhwb3J0cy5qc29uID0gZXhwb3J0cy50b0J1ZmZlciA9IHZvaWQgMDtcbmNvbnN0IGh0dHAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBcIikpO1xuY29uc3QgaHR0cHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBzXCIpKTtcbmFzeW5jIGZ1bmN0aW9uIHRvQnVmZmVyKHN0cmVhbSkge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzLCBsZW5ndGgpO1xufVxuZXhwb3J0cy50b0J1ZmZlciA9IHRvQnVmZmVyO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmFzeW5jIGZ1bmN0aW9uIGpzb24oc3RyZWFtKSB7XG4gICAgY29uc3QgYnVmID0gYXdhaXQgdG9CdWZmZXIoc3RyZWFtKTtcbiAgICBjb25zdCBzdHIgPSBidWYudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpO1xuICAgIH1cbiAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICBjb25zdCBlcnIgPSBfZXJyO1xuICAgICAgICBlcnIubWVzc2FnZSArPSBgIChpbnB1dDogJHtzdHJ9KWA7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG59XG5leHBvcnRzLmpzb24gPSBqc29uO1xuZnVuY3Rpb24gcmVxKHVybCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgaHJlZiA9IHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnID8gdXJsIDogdXJsLmhyZWY7XG4gICAgY29uc3QgcmVxID0gKGhyZWYuc3RhcnRzV2l0aCgnaHR0cHM6JykgPyBodHRwcyA6IGh0dHApLnJlcXVlc3QodXJsLCBvcHRzKTtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXFcbiAgICAgICAgICAgIC5vbmNlKCdyZXNwb25zZScsIHJlc29sdmUpXG4gICAgICAgICAgICAub25jZSgnZXJyb3InLCByZWplY3QpXG4gICAgICAgICAgICAuZW5kKCk7XG4gICAgfSk7XG4gICAgcmVxLnRoZW4gPSBwcm9taXNlLnRoZW4uYmluZChwcm9taXNlKTtcbiAgICByZXR1cm4gcmVxO1xufVxuZXhwb3J0cy5yZXEgPSByZXE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFnZW50ID0gdm9pZCAwO1xuY29uc3QgbmV0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJuZXRcIikpO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwc18xID0gcmVxdWlyZShcImh0dHBzXCIpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2hlbHBlcnNcIiksIGV4cG9ydHMpO1xuY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ0FnZW50QmFzZUludGVybmFsU3RhdGUnKTtcbmNsYXNzIEFnZW50IGV4dGVuZHMgaHR0cC5BZ2VudCB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpc1tJTlRFUk5BTF0gPSB7fTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBgaHR0cGAgb3IgYGh0dHBzYCByZXF1ZXN0LlxuICAgICAqL1xuICAgIGlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgLy8gRmlyc3QgY2hlY2sgdGhlIGBzZWN1cmVFbmRwb2ludGAgcHJvcGVydHkgZXhwbGljaXRseSwgc2luY2UgdGhpc1xuICAgICAgICAgICAgLy8gbWVhbnMgdGhhdCBhIHBhcmVudCBgQWdlbnRgIGlzIFwicGFzc2luZyB0aHJvdWdoXCIgdG8gdGhpcyBpbnN0YW5jZS5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnNlY3VyZUVuZHBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgbm8gZXhwbGljaXQgYHNlY3VyZWAgZW5kcG9pbnQsIGNoZWNrIGlmIGBwcm90b2NvbGAgcHJvcGVydHkgaXNcbiAgICAgICAgICAgIC8vIHNldC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIGNhc2Ugc2luY2UgdXNpbmcgYSBmdWxsIHN0cmluZyBVUkxcbiAgICAgICAgICAgIC8vIG9yIGBVUkxgIGluc3RhbmNlIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNhZ2UuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJvdG9jb2wgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEZpbmFsbHksIGlmIG5vIGBwcm90b2NvbGAgcHJvcGVydHkgd2FzIHNldCwgdGhlbiBmYWxsIGJhY2sgdG9cbiAgICAgICAgLy8gY2hlY2tpbmcgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBjdXJyZW50IGNhbGwgc3RhY2ssIGFuZCB0cnkgdG9cbiAgICAgICAgLy8gZGV0ZWN0IHRoZSBcImh0dHBzXCIgbW9kdWxlLlxuICAgICAgICBjb25zdCB7IHN0YWNrIH0gPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFjayAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdGFja1xuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLnNvbWUoKGwpID0+IGwuaW5kZXhPZignKGh0dHBzLmpzOicpICE9PSAtMSB8fFxuICAgICAgICAgICAgbC5pbmRleE9mKCdub2RlOmh0dHBzOicpICE9PSAtMSk7XG4gICAgfVxuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgYXN5bmMgc2lnbmF0dXJlcyBpbiBgY29ubmVjdCgpYCBhbmQgTm9kZSdzIG5hdGl2ZVxuICAgIC8vIGNvbm5lY3Rpb24gcG9vbGluZyBpbiBgaHR0cC5BZ2VudGAsIHRoZSBhcnJheSBvZiBzb2NrZXRzIGZvciBlYWNoIG9yaWdpblxuICAgIC8vIGhhcyB0byBiZSB1cGRhdGVkIHN5bmNocm9ub3VzbHkuIFRoaXMgaXMgc28gdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgaXNcbiAgICAvLyBhY2N1cmF0ZSB3aGVuIGBhZGRSZXF1ZXN0KClgIGlzIG5leHQgY2FsbGVkLiBXZSBhY2hpZXZlIHRoaXMgYnkgY3JlYXRpbmcgYVxuICAgIC8vIGZha2Ugc29ja2V0IGFuZCBhZGRpbmcgaXQgdG8gYHNvY2tldHNbb3JpZ2luXWAgYW5kIGluY3JlbWVudGluZ1xuICAgIC8vIGB0b3RhbFNvY2tldENvdW50YC5cbiAgICBpbmNyZW1lbnRTb2NrZXRzKG5hbWUpIHtcbiAgICAgICAgLy8gSWYgYG1heFNvY2tldHNgIGFuZCBgbWF4VG90YWxTb2NrZXRzYCBhcmUgYm90aCBJbmZpbml0eSB0aGVuIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIG5lZWQgdG8gY3JlYXRlIGEgZmFrZSBzb2NrZXQgYmVjYXVzZSBOb2RlLmpzIG5hdGl2ZSBjb25uZWN0aW9uIHBvb2xpbmdcbiAgICAgICAgLy8gd2lsbCBuZXZlciBiZSBpbnZva2VkLlxuICAgICAgICBpZiAodGhpcy5tYXhTb2NrZXRzID09PSBJbmZpbml0eSAmJiB0aGlzLm1heFRvdGFsU29ja2V0cyA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsbCBpbnN0YW5jZXMgb2YgYHNvY2tldHNgIGFyZSBleHBlY3RlZCBUeXBlU2NyaXB0IGVycm9ycy4gVGhlXG4gICAgICAgIC8vIGFsdGVybmF0aXZlIGlzIHRvIGFkZCBpdCBhcyBhIHByaXZhdGUgcHJvcGVydHkgb2YgdGhpcyBjbGFzcyBidXQgdGhhdFxuICAgICAgICAvLyB3aWxsIGJyZWFrIFR5cGVTY3JpcHQgc3ViY2xhc3NpbmcuXG4gICAgICAgIGlmICghdGhpcy5zb2NrZXRzW25hbWVdKSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBzb2NrZXRzYCBpcyByZWFkb25seSBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICB0aGlzLnNvY2tldHNbbmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gbmV3IG5ldC5Tb2NrZXQoeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMuc29ja2V0c1tuYW1lXS5wdXNoKGZha2VTb2NrZXQpO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGB0b3RhbFNvY2tldENvdW50YCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgdGhpcy50b3RhbFNvY2tldENvdW50Kys7XG4gICAgICAgIHJldHVybiBmYWtlU29ja2V0O1xuICAgIH1cbiAgICBkZWNyZW1lbnRTb2NrZXRzKG5hbWUsIHNvY2tldCkge1xuICAgICAgICBpZiAoIXRoaXMuc29ja2V0c1tuYW1lXSB8fCBzb2NrZXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb2NrZXRzID0gdGhpcy5zb2NrZXRzW25hbWVdO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNvY2tldHMuaW5kZXhPZihzb2NrZXQpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBzb2NrZXRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yICBgdG90YWxTb2NrZXRDb3VudGAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICB0aGlzLnRvdGFsU29ja2V0Q291bnQtLTtcbiAgICAgICAgICAgIGlmIChzb2NrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHNvY2tldHNgIGlzIHJlYWRvbmx5IGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zb2NrZXRzW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEluIG9yZGVyIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc29ja2V0IHBvb2wsIHdlIG5lZWQgdG8gY2FsbCBgZ2V0TmFtZSgpYCBvblxuICAgIC8vIHRoZSBjb3JlIGBodHRwcy5BZ2VudGAgaWYgaXQgaXMgYSBzZWN1cmVFbmRwb2ludC5cbiAgICBnZXROYW1lKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc2VjdXJlRW5kcG9pbnQgPSB0eXBlb2Ygb3B0aW9ucy5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICA/IG9wdGlvbnMuc2VjdXJlRW5kcG9pbnRcbiAgICAgICAgICAgIDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpO1xuICAgICAgICBpZiAoc2VjdXJlRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGdldE5hbWUoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICByZXR1cm4gaHR0cHNfMS5BZ2VudC5wcm90b3R5cGUuZ2V0TmFtZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGdldE5hbWUoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgIHJldHVybiBzdXBlci5nZXROYW1lKG9wdGlvbnMpO1xuICAgIH1cbiAgICBjcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYikge1xuICAgICAgICBjb25zdCBjb25uZWN0T3B0cyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBzZWN1cmVFbmRwb2ludDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKGNvbm5lY3RPcHRzKTtcbiAgICAgICAgY29uc3QgZmFrZVNvY2tldCA9IHRoaXMuaW5jcmVtZW50U29ja2V0cyhuYW1lKTtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuY29ubmVjdChyZXEsIGNvbm5lY3RPcHRzKSlcbiAgICAgICAgICAgIC50aGVuKChzb2NrZXQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50U29ja2V0cyhuYW1lLCBmYWtlU29ja2V0KTtcbiAgICAgICAgICAgIGlmIChzb2NrZXQgaW5zdGFuY2VvZiBodHRwLkFnZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmFkZFJlcXVlc3QocmVxLCBjb25uZWN0T3B0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gc29ja2V0O1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgY3JlYXRlU29ja2V0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpO1xuICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlY3JlbWVudFNvY2tldHMobmFtZSwgZmFrZVNvY2tldCk7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3JlYXRlQ29ubmVjdGlvbigpIHtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldDtcbiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFzb2NrZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc29ja2V0IHdhcyByZXR1cm5lZCBpbiB0aGUgYGNvbm5lY3QoKWAgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgIH1cbiAgICBnZXQgZGVmYXVsdFBvcnQoKSB7XG4gICAgICAgIHJldHVybiAodGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPz9cbiAgICAgICAgICAgICh0aGlzLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSk7XG4gICAgfVxuICAgIHNldCBkZWZhdWx0UG9ydCh2KSB7XG4gICAgICAgIGlmICh0aGlzW0lOVEVSTkFMXSkge1xuICAgICAgICAgICAgdGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPSB2O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBwcm90b2NvbCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCA/P1xuICAgICAgICAgICAgKHRoaXMuaXNTZWN1cmVFbmRwb2ludCgpID8gJ2h0dHBzOicgOiAnaHR0cDonKSk7XG4gICAgfVxuICAgIHNldCBwcm90b2NvbCh2KSB7XG4gICAgICAgIGlmICh0aGlzW0lOVEVSTkFMXSkge1xuICAgICAgICAgICAgdGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wgPSB2O1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5BZ2VudCA9IEFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VQcm94eVJlc3BvbnNlID0gdm9pZCAwO1xuY29uc3QgZGVidWdfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZGVidWdcIikpO1xuY29uc3QgZGVidWcgPSAoMCwgZGVidWdfMS5kZWZhdWx0KSgnaHR0cHMtcHJveHktYWdlbnQ6cGFyc2UtcHJveHktcmVzcG9uc2UnKTtcbmZ1bmN0aW9uIHBhcnNlUHJveHlSZXNwb25zZShzb2NrZXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGJ1ZmZlciBhbnkgSFRUUCB0cmFmZmljIHRoYXQgaGFwcGVucyB3aXRoIHRoZSBwcm94eSBiZWZvcmUgd2UgZ2V0XG4gICAgICAgIC8vIHRoZSBDT05ORUNUIHJlc3BvbnNlLCBzbyB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuIFwiMjAwXCJcbiAgICAgICAgLy8gcmVzcG9uc2UgY29kZSwgdGhlbiB3ZSBjYW4gcmUtcGxheSB0aGUgXCJkYXRhXCIgZXZlbnRzIG9uIHRoZSBzb2NrZXQgb25jZSB0aGVcbiAgICAgICAgLy8gSFRUUCBwYXJzZXIgaXMgaG9va2VkIHVwLi4uXG4gICAgICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDtcbiAgICAgICAgY29uc3QgYnVmZmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgYiA9IHNvY2tldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoYilcbiAgICAgICAgICAgICAgICBvbmRhdGEoYik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc29ja2V0Lm9uY2UoJ3JlYWRhYmxlJywgcmVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIHJlYWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgZGVidWcoJ29uZW5kJyk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQcm94eSBjb25uZWN0aW9uIGVuZGVkIGJlZm9yZSByZWNlaXZpbmcgQ09OTkVDVCByZXNwb25zZScpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbmVycm9yKGVycikge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgZGVidWcoJ29uZXJyb3IgJW8nLCBlcnIpO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25kYXRhKGIpIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChiKTtcbiAgICAgICAgICAgIGJ1ZmZlcnNMZW5ndGggKz0gYi5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBidWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgYnVmZmVyc0xlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBlbmRPZkhlYWRlcnMgPSBidWZmZXJlZC5pbmRleE9mKCdcXHJcXG5cXHJcXG4nKTtcbiAgICAgICAgICAgIGlmIChlbmRPZkhlYWRlcnMgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8ga2VlcCBidWZmZXJpbmdcbiAgICAgICAgICAgICAgICBkZWJ1ZygnaGF2ZSBub3QgcmVjZWl2ZWQgZW5kIG9mIEhUVFAgaGVhZGVycyB5ZXQuLi4nKTtcbiAgICAgICAgICAgICAgICByZWFkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZFxuICAgICAgICAgICAgICAgIC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCdhc2NpaScpXG4gICAgICAgICAgICAgICAgLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoIWZpcnN0TGluZSkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ05vIGhlYWRlciByZWNlaXZlZCBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdExpbmVQYXJ0cyA9IGZpcnN0TGluZS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9ICtmaXJzdExpbmVQYXJ0c1sxXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBmaXJzdExpbmVQYXJ0cy5zbGljZSgyKS5qb2luKCcgJyk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJQYXJ0cykge1xuICAgICAgICAgICAgICAgIGlmICghaGVhZGVyKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbG9uID0gaGVhZGVyLmluZGV4T2YoJzonKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDb2xvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgaGVhZGVyIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZTogXCIke2hlYWRlcn1cImApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyLnNsaWNlKDAsIGZpcnN0Q29sb24pLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXIuc2xpY2UoZmlyc3RDb2xvbiArIDEpLnRyaW1TdGFydCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBoZWFkZXJzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSBbY3VycmVudCwgdmFsdWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1ZygnZ290IHByb3h5IHNlcnZlciByZXNwb25zZTogJW8gJW8nLCBmaXJzdExpbmUsIGhlYWRlcnMpO1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgY29ubmVjdDoge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYnVmZmVyZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzb2NrZXQub24oJ2Vycm9yJywgb25lcnJvcik7XG4gICAgICAgIHNvY2tldC5vbignZW5kJywgb25lbmQpO1xuICAgICAgICByZWFkKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLnBhcnNlUHJveHlSZXNwb25zZSA9IHBhcnNlUHJveHlSZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlLXByb3h5LXJlc3BvbnNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cHNQcm94eUFnZW50ID0gdm9pZCAwO1xuY29uc3QgbmV0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJuZXRcIikpO1xuY29uc3QgdGxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJ0bHNcIikpO1xuY29uc3QgYXNzZXJ0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImFzc2VydFwiKSk7XG5jb25zdCBkZWJ1Z18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJkZWJ1Z1wiKSk7XG5jb25zdCBhZ2VudF9iYXNlXzEgPSByZXF1aXJlKFwiYWdlbnQtYmFzZVwiKTtcbmNvbnN0IHVybF8xID0gcmVxdWlyZShcInVybFwiKTtcbmNvbnN0IHBhcnNlX3Byb3h5X3Jlc3BvbnNlXzEgPSByZXF1aXJlKFwiLi9wYXJzZS1wcm94eS1yZXNwb25zZVwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIGRlYnVnXzEuZGVmYXVsdCkoJ2h0dHBzLXByb3h5LWFnZW50Jyk7XG4vKipcbiAqIFRoZSBgSHR0cHNQcm94eUFnZW50YCBpbXBsZW1lbnRzIGFuIEhUVFAgQWdlbnQgc3ViY2xhc3MgdGhhdCBjb25uZWN0cyB0b1xuICogdGhlIHNwZWNpZmllZCBcIkhUVFAocykgcHJveHkgc2VydmVyXCIgaW4gb3JkZXIgdG8gcHJveHkgSFRUUFMgcmVxdWVzdHMuXG4gKlxuICogT3V0Z29pbmcgSFRUUCByZXF1ZXN0cyBhcmUgZmlyc3QgdHVubmVsZWQgdGhyb3VnaCB0aGUgcHJveHkgc2VydmVyIHVzaW5nIHRoZVxuICogYENPTk5FQ1RgIEhUVFAgcmVxdWVzdCBtZXRob2QgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLFxuICogYW5kIHRoZW4gdGhlIHByb3h5IHNlcnZlciBjb25uZWN0cyB0byB0aGUgZGVzdGluYXRpb24gdGFyZ2V0IGFuZCBpc3N1ZXMgdGhlXG4gKiBIVFRQIHJlcXVlc3QgZnJvbSB0aGUgcHJveHkgc2VydmVyLlxuICpcbiAqIGBodHRwczpgIHJlcXVlc3RzIGhhdmUgdGhlaXIgc29ja2V0IGNvbm5lY3Rpb24gdXBncmFkZWQgdG8gVExTIG9uY2VcbiAqIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuXG4gKi9cbmNsYXNzIEh0dHBzUHJveHlBZ2VudCBleHRlbmRzIGFnZW50X2Jhc2VfMS5BZ2VudCB7XG4gICAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgcGF0aDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMucHJveHkgPSB0eXBlb2YgcHJveHkgPT09ICdzdHJpbmcnID8gbmV3IHVybF8xLlVSTChwcm94eSkgOiBwcm94eTtcbiAgICAgICAgdGhpcy5wcm94eUhlYWRlcnMgPSBvcHRzPy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBzUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpO1xuICAgICAgICAvLyBUcmltIG9mZiB0aGUgYnJhY2tldHMgZnJvbSBJUHY2IGFkZHJlc3Nlc1xuICAgICAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5wcm94eS5wb3J0XG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApXG4gICAgICAgICAgICA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonXG4gICAgICAgICAgICAgICAgPyA0NDNcbiAgICAgICAgICAgICAgICA6IDgwO1xuICAgICAgICB0aGlzLmNvbm5lY3RPcHRzID0ge1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBuZWdvdGlhdGUgaHR0cC8xLjEgZm9yIHByb3h5IHNlcnZlcnMgdGhhdCBzdXBwb3J0IGh0dHAvMlxuICAgICAgICAgICAgQUxQTlByb3RvY29sczogWydodHRwLzEuMSddLFxuICAgICAgICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSxcbiAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICBwb3J0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgbm9kZS1jb3JlIEhUVFAgY2xpZW50IGxpYnJhcnkgaXMgY3JlYXRpbmcgYVxuICAgICAqIG5ldyBIVFRQIHJlcXVlc3QuXG4gICAgICovXG4gICAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHtcbiAgICAgICAgY29uc3QgeyBwcm94eSB9ID0gdGhpcztcbiAgICAgICAgaWYgKCFvcHRzLmhvc3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIFwiaG9zdFwiIHByb3ZpZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci5cbiAgICAgICAgbGV0IHNvY2tldDtcbiAgICAgICAgaWYgKHByb3h5LnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgZGVidWcoJ0NyZWF0aW5nIGB0bHMuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSB0aGlzLmNvbm5lY3RPcHRzLnNlcnZlcm5hbWUgfHwgdGhpcy5jb25uZWN0T3B0cy5ob3N0O1xuICAgICAgICAgICAgc29ja2V0ID0gdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY29ubmVjdE9wdHMsXG4gICAgICAgICAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVidWcoJ0NyZWF0aW5nIGBuZXQuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gdGhpcy5wcm94eUhlYWRlcnMoKVxuICAgICAgICAgICAgOiB7IC4uLnRoaXMucHJveHlIZWFkZXJzIH07XG4gICAgICAgIGNvbnN0IGhvc3QgPSBuZXQuaXNJUHY2KG9wdHMuaG9zdCkgPyBgWyR7b3B0cy5ob3N0fV1gIDogb3B0cy5ob3N0O1xuICAgICAgICBsZXQgcGF5bG9hZCA9IGBDT05ORUNUICR7aG9zdH06JHtvcHRzLnBvcnR9IEhUVFAvMS4xXFxyXFxuYDtcbiAgICAgICAgLy8gSW5qZWN0IHRoZSBgUHJveHktQXV0aG9yaXphdGlvbmAgaGVhZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICAgICAgaWYgKHByb3h5LnVzZXJuYW1lIHx8IHByb3h5LnBhc3N3b3JkKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRoID0gYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocHJveHkucGFzc3dvcmQpfWA7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDtcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gO1xuICAgICAgICBpZiAoIWhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSkge1xuICAgICAgICAgICAgaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddID0gdGhpcy5rZWVwQWxpdmVcbiAgICAgICAgICAgICAgICA/ICdLZWVwLUFsaXZlJ1xuICAgICAgICAgICAgICAgIDogJ2Nsb3NlJztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgICAgICAgIHBheWxvYWQgKz0gYCR7bmFtZX06ICR7aGVhZGVyc1tuYW1lXX1cXHJcXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3h5UmVzcG9uc2VQcm9taXNlID0gKDAsIHBhcnNlX3Byb3h5X3Jlc3BvbnNlXzEucGFyc2VQcm94eVJlc3BvbnNlKShzb2NrZXQpO1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7cGF5bG9hZH1cXHJcXG5gKTtcbiAgICAgICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7XG4gICAgICAgIHJlcS5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0KTtcbiAgICAgICAgdGhpcy5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0LCByZXEpO1xuICAgICAgICBpZiAoY29ubmVjdC5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHJlcS5vbmNlKCdzb2NrZXQnLCByZXN1bWUpO1xuICAgICAgICAgICAgaWYgKG9wdHMuc2VjdXJlRW5kcG9pbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJveHkgaXMgY29ubmVjdGluZyB0byBhIFRMUyBzZXJ2ZXIsIHNvIHVwZ3JhZGVcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHNvY2tldCBjb25uZWN0aW9uIHRvIGEgVExTIGNvbm5lY3Rpb24uXG4gICAgICAgICAgICAgICAgZGVidWcoJ1VwZ3JhZGluZyBzb2NrZXQgY29ubmVjdGlvbiB0byBUTFMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lIHx8IG9wdHMuaG9zdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgICAgICAgICAgICAuLi5vbWl0KG9wdHMsICdob3N0JywgJ3BhdGgnLCAncG9ydCcpLFxuICAgICAgICAgICAgICAgICAgICBzb2NrZXQsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlcm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb3RoZXIgc3RhdHVzIGNvZGUgdGhhdCdzIG5vdCAyMDAuLi4gbmVlZCB0byByZS1wbGF5IHRoZSBIVFRQXG4gICAgICAgIC8vIGhlYWRlciBcImRhdGFcIiBldmVudHMgb250byB0aGUgc29ja2V0IG9uY2UgdGhlIEhUVFAgbWFjaGluZXJ5IGlzXG4gICAgICAgIC8vIGF0dGFjaGVkIHNvIHRoYXQgdGhlIG5vZGUgY29yZSBgaHR0cGAgY2FuIHBhcnNlIGFuZCBoYW5kbGUgdGhlXG4gICAgICAgIC8vIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgICAgICAvLyBDbG9zZSB0aGUgb3JpZ2luYWwgc29ja2V0LCBhbmQgYSBuZXcgXCJmYWtlXCIgc29ja2V0IGlzIHJldHVybmVkXG4gICAgICAgIC8vIGluc3RlYWQsIHNvIHRoYXQgdGhlIHByb3h5IGRvZXNuJ3QgZ2V0IHRoZSBIVFRQIHJlcXVlc3RcbiAgICAgICAgLy8gd3JpdHRlbiB0byBpdCAod2hpY2ggbWF5IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gIGhlYWRlcnMgb3Igb3RoZXJcbiAgICAgICAgLy8gc2Vuc2l0aXZlIGRhdGEpLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vaGFja2Vyb25lLmNvbS9yZXBvcnRzLzU0MTUwMlxuICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gbmV3IG5ldC5Tb2NrZXQoeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlO1xuICAgICAgICAvLyBOZWVkIHRvIHdhaXQgZm9yIHRoZSBcInNvY2tldFwiIGV2ZW50IHRvIHJlLXBsYXkgdGhlIFwiZGF0YVwiIGV2ZW50cy5cbiAgICAgICAgcmVxLm9uY2UoJ3NvY2tldCcsIChzKSA9PiB7XG4gICAgICAgICAgICBkZWJ1ZygnUmVwbGF5aW5nIHByb3h5IGJ1ZmZlciBmb3IgZmFpbGVkIHJlcXVlc3QnKTtcbiAgICAgICAgICAgICgwLCBhc3NlcnRfMS5kZWZhdWx0KShzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDApO1xuICAgICAgICAgICAgLy8gUmVwbGF5IHRoZSBcImJ1ZmZlcmVkXCIgQnVmZmVyIG9udG8gdGhlIGZha2UgYHNvY2tldGAsIHNpbmNlIGF0XG4gICAgICAgICAgICAvLyB0aGlzIHBvaW50IHRoZSBIVFRQIG1vZHVsZSBtYWNoaW5lcnkgaGFzIGJlZW4gaG9va2VkIHVwIGZvclxuICAgICAgICAgICAgLy8gdGhlIHVzZXIuXG4gICAgICAgICAgICBzLnB1c2goYnVmZmVyZWQpO1xuICAgICAgICAgICAgcy5wdXNoKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZha2VTb2NrZXQ7XG4gICAgfVxufVxuSHR0cHNQcm94eUFnZW50LnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddO1xuZXhwb3J0cy5IdHRwc1Byb3h5QWdlbnQgPSBIdHRwc1Byb3h5QWdlbnQ7XG5mdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7XG4gICAgc29ja2V0LnJlc3VtZSgpO1xufVxuZnVuY3Rpb24gb21pdChvYmosIC4uLmtleXMpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcbiAgICBsZXQga2V5O1xuICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwUHJveHlBZ2VudCA9IHZvaWQgMDtcbmNvbnN0IG5ldCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwibmV0XCIpKTtcbmNvbnN0IHRscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidGxzXCIpKTtcbmNvbnN0IGRlYnVnXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImRlYnVnXCIpKTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IGFnZW50X2Jhc2VfMSA9IHJlcXVpcmUoXCJhZ2VudC1iYXNlXCIpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgZGVidWdfMS5kZWZhdWx0KSgnaHR0cC1wcm94eS1hZ2VudCcpO1xuLyoqXG4gKiBUaGUgYEh0dHBQcm94eUFnZW50YCBpbXBsZW1lbnRzIGFuIEhUVFAgQWdlbnQgc3ViY2xhc3MgdGhhdCBjb25uZWN0c1xuICogdG8gdGhlIHNwZWNpZmllZCBcIkhUVFAgcHJveHkgc2VydmVyXCIgaW4gb3JkZXIgdG8gcHJveHkgSFRUUCByZXF1ZXN0cy5cbiAqL1xuY2xhc3MgSHR0cFByb3h5QWdlbnQgZXh0ZW5kcyBhZ2VudF9iYXNlXzEuQWdlbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3h5LCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzLnByb3h5ID0gdHlwZW9mIHByb3h5ID09PSAnc3RyaW5nJyA/IG5ldyB1cmxfMS5VUkwocHJveHkpIDogcHJveHk7XG4gICAgICAgIHRoaXMucHJveHlIZWFkZXJzID0gb3B0cz8uaGVhZGVycyA/PyB7fTtcbiAgICAgICAgZGVidWcoJ0NyZWF0aW5nIG5ldyBIdHRwUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpO1xuICAgICAgICAvLyBUcmltIG9mZiB0aGUgYnJhY2tldHMgZnJvbSBJUHY2IGFkZHJlc3Nlc1xuICAgICAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5wcm94eS5wb3J0XG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApXG4gICAgICAgICAgICA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonXG4gICAgICAgICAgICAgICAgPyA0NDNcbiAgICAgICAgICAgICAgICA6IDgwO1xuICAgICAgICB0aGlzLmNvbm5lY3RPcHRzID0ge1xuICAgICAgICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSxcbiAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICBwb3J0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhZGRSZXF1ZXN0KHJlcSwgb3B0cykge1xuICAgICAgICByZXEuX2hlYWRlciA9IG51bGw7XG4gICAgICAgIHRoaXMuc2V0UmVxdWVzdFByb3BzKHJlcSwgb3B0cyk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGFkZFJlcXVlc3QoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgIHN1cGVyLmFkZFJlcXVlc3QocmVxLCBvcHRzKTtcbiAgICB9XG4gICAgc2V0UmVxdWVzdFByb3BzKHJlcSwgb3B0cykge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBwcm90b2NvbCA9IG9wdHMuc2VjdXJlRW5kcG9pbnQgPyAnaHR0cHM6JyA6ICdodHRwOic7XG4gICAgICAgIGNvbnN0IGhvc3RuYW1lID0gcmVxLmdldEhlYWRlcignaG9zdCcpIHx8ICdsb2NhbGhvc3QnO1xuICAgICAgICBjb25zdCBiYXNlID0gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfWA7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyB1cmxfMS5VUkwocmVxLnBhdGgsIGJhc2UpO1xuICAgICAgICBpZiAob3B0cy5wb3J0ICE9PSA4MCkge1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBTdHJpbmcob3B0cy5wb3J0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGFuZ2UgdGhlIGBodHRwLkNsaWVudFJlcXVlc3RgIGluc3RhbmNlJ3MgXCJwYXRoXCIgZmllbGRcbiAgICAgICAgLy8gdG8gdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkLlxuICAgICAgICByZXEucGF0aCA9IFN0cmluZyh1cmwpO1xuICAgICAgICAvLyBJbmplY3QgdGhlIGBQcm94eS1BdXRob3JpemF0aW9uYCBoZWFkZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBjb25zdCBoZWFkZXJzID0gdHlwZW9mIHRoaXMucHJveHlIZWFkZXJzID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHRoaXMucHJveHlIZWFkZXJzKClcbiAgICAgICAgICAgIDogeyAuLi50aGlzLnByb3h5SGVhZGVycyB9O1xuICAgICAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSBgJHtkZWNvZGVVUklDb21wb25lbnQocHJveHkudXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS5wYXNzd29yZCl9YDtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10gPSB0aGlzLmtlZXBBbGl2ZVxuICAgICAgICAgICAgICAgID8gJ0tlZXAtQWxpdmUnXG4gICAgICAgICAgICAgICAgOiAnY2xvc2UnO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXJzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVxLnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHtcbiAgICAgICAgcmVxLl9oZWFkZXIgPSBudWxsO1xuICAgICAgICBpZiAoIXJlcS5wYXRoLmluY2x1ZGVzKCc6Ly8nKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSZXF1ZXN0UHJvcHMocmVxLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgaHR0cCBDbGllbnRSZXF1ZXN0J3MgaW50ZXJuYWwgYF9oZWFkZXJgIGZpZWxkXG4gICAgICAgIC8vIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHNldC4gSWYgdGhpcyBpcyB0aGUgY2FzZSB0aGVuIHdlJ2xsIG5lZWRcbiAgICAgICAgLy8gdG8gcmUtZ2VuZXJhdGUgdGhlIHN0cmluZyBzaW5jZSB3ZSBqdXN0IGNoYW5nZWQgdGhlIGByZXEucGF0aGAuXG4gICAgICAgIGxldCBmaXJzdDtcbiAgICAgICAgbGV0IGVuZE9mSGVhZGVycztcbiAgICAgICAgZGVidWcoJ1JlZ2VuZXJhdGluZyBzdG9yZWQgSFRUUCBoZWFkZXIgc3RyaW5nIGZvciByZXF1ZXN0Jyk7XG4gICAgICAgIHJlcS5faW1wbGljaXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHJlcS5vdXRwdXREYXRhICYmIHJlcS5vdXRwdXREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRlYnVnKCdQYXRjaGluZyBjb25uZWN0aW9uIHdyaXRlKCkgb3V0cHV0IGJ1ZmZlciB3aXRoIHVwZGF0ZWQgaGVhZGVyJyk7XG4gICAgICAgICAgICBmaXJzdCA9IHJlcS5vdXRwdXREYXRhWzBdLmRhdGE7XG4gICAgICAgICAgICBlbmRPZkhlYWRlcnMgPSBmaXJzdC5pbmRleE9mKCdcXHJcXG5cXHJcXG4nKSArIDQ7XG4gICAgICAgICAgICByZXEub3V0cHV0RGF0YVswXS5kYXRhID1cbiAgICAgICAgICAgICAgICByZXEuX2hlYWRlciArIGZpcnN0LnN1YnN0cmluZyhlbmRPZkhlYWRlcnMpO1xuICAgICAgICAgICAgZGVidWcoJ091dHB1dCBidWZmZXI6ICVvJywgcmVxLm91dHB1dERhdGFbMF0uZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci5cbiAgICAgICAgbGV0IHNvY2tldDtcbiAgICAgICAgaWYgKHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYHRscy5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gdGxzLmNvbm5lY3QodGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHNvY2tldCdzIGBjb25uZWN0YCBldmVudCwgc28gdGhhdCB0aGlzIGBjYWxsYmFjaygpYFxuICAgICAgICAvLyBmdW5jdGlvbiB0aHJvd3MgaW5zdGVhZCBvZiB0aGUgYGh0dHBgIHJlcXVlc3QgbWFjaGluZXJ5LiBUaGlzIGlzXG4gICAgICAgIC8vIGltcG9ydGFudCBmb3IgaS5lLiBgUGFjUHJveHlBZ2VudGAgd2hpY2ggZGV0ZXJtaW5lcyBhIGZhaWxlZCBwcm94eVxuICAgICAgICAvLyBjb25uZWN0aW9uIHZpYSB0aGUgYGNhbGxiYWNrKClgIGZ1bmN0aW9uIHRocm93aW5nLlxuICAgICAgICBhd2FpdCAoMCwgZXZlbnRzXzEub25jZSkoc29ja2V0LCAnY29ubmVjdCcpO1xuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgIH1cbn1cbkh0dHBQcm94eUFnZW50LnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddO1xuZXhwb3J0cy5IdHRwUHJveHlBZ2VudCA9IEh0dHBQcm94eUFnZW50O1xuZnVuY3Rpb24gb21pdChvYmosIC4uLmtleXMpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcbiAgICBsZXQga2V5O1xuICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nbG9iYWxOb1Byb3h5TGlzdCA9IGV4cG9ydHMucHJveHlQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5sb2FkTm9Qcm94eSA9IGxvYWROb1Byb3h5O1xuZXhwb3J0cy5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyA9IGdldERlZmF1bHRQcm94eVNldHRpbmdzO1xuZXhwb3J0cy5wcm94eVBvbGljeSA9IHByb3h5UG9saWN5O1xuY29uc3QgaHR0cHNfcHJveHlfYWdlbnRfMSA9IHJlcXVpcmUoXCJodHRwcy1wcm94eS1hZ2VudFwiKTtcbmNvbnN0IGh0dHBfcHJveHlfYWdlbnRfMSA9IHJlcXVpcmUoXCJodHRwLXByb3h5LWFnZW50XCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuY29uc3QgSFRUUFNfUFJPWFkgPSBcIkhUVFBTX1BST1hZXCI7XG5jb25zdCBIVFRQX1BST1hZID0gXCJIVFRQX1BST1hZXCI7XG5jb25zdCBBTExfUFJPWFkgPSBcIkFMTF9QUk9YWVwiO1xuY29uc3QgTk9fUFJPWFkgPSBcIk5PX1BST1hZXCI7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgcHJveHlQb2xpY3kuXG4gKi9cbmV4cG9ydHMucHJveHlQb2xpY3lOYW1lID0gXCJwcm94eVBvbGljeVwiO1xuLyoqXG4gKiBTdG9yZXMgdGhlIHBhdHRlcm5zIHNwZWNpZmllZCBpbiBOT19QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnRzLmdsb2JhbE5vUHJveHlMaXN0ID0gW107XG5sZXQgbm9Qcm94eUxpc3RMb2FkZWQgPSBmYWxzZTtcbi8qKiBBIGNhY2hlIG9mIHdoZXRoZXIgYSBob3N0IHNob3VsZCBieXBhc3MgdGhlIHByb3h5LiAqL1xuY29uc3QgZ2xvYmFsQnlwYXNzZWRNYXAgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRFbnZpcm9ubWVudFZhbHVlKG5hbWUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnZbbmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W25hbWVdO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudltuYW1lLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudltuYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gbG9hZEVudmlyb25tZW50UHJveHlWYWx1ZSgpIHtcbiAgICBpZiAoIXByb2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgaHR0cHNQcm94eSA9IGdldEVudmlyb25tZW50VmFsdWUoSFRUUFNfUFJPWFkpO1xuICAgIGNvbnN0IGFsbFByb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShBTExfUFJPWFkpO1xuICAgIGNvbnN0IGh0dHBQcm94eSA9IGdldEVudmlyb25tZW50VmFsdWUoSFRUUF9QUk9YWSk7XG4gICAgcmV0dXJuIGh0dHBzUHJveHkgfHwgYWxsUHJveHkgfHwgaHR0cFByb3h5O1xufVxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBob3N0IG9mIGEgZ2l2ZW4gYHVyaWAgbWF0Y2hlcyBhbnkgcGF0dGVybiBpbiB0aGUgbm8gcHJveHkgbGlzdC5cbiAqIElmIHRoZXJlJ3MgYSBtYXRjaCwgYW55IHJlcXVlc3Qgc2VudCB0byB0aGUgc2FtZSBob3N0IHNob3VsZG4ndCBoYXZlIHRoZSBwcm94eSBzZXR0aW5ncyBzZXQuXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGEgcG9ydCBvZiBodHRwczovL2dpdGh1Yi5jb20vQXp1cmUvYXp1cmUtc2RrLWZvci1uZXQvYmxvYi84Y2NhODExMzcxMTU5ZTUyNzE1OWM3ZWI2NTYwMjQ3Nzg5ODY4M2UyL3Nkay9jb3JlL0F6dXJlLkNvcmUvc3JjL1BpcGVsaW5lL0ludGVybmFsL0h0dHBFbnZpcm9ubWVudFByb3h5LmNzI0wyMTBcbiAqL1xuZnVuY3Rpb24gaXNCeXBhc3NlZCh1cmksIG5vUHJveHlMaXN0LCBieXBhc3NlZE1hcCkge1xuICAgIGlmIChub1Byb3h5TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBob3N0ID0gbmV3IFVSTCh1cmkpLmhvc3RuYW1lO1xuICAgIGlmIChieXBhc3NlZE1hcCA9PT0gbnVsbCB8fCBieXBhc3NlZE1hcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYnlwYXNzZWRNYXAuaGFzKGhvc3QpKSB7XG4gICAgICAgIHJldHVybiBieXBhc3NlZE1hcC5nZXQoaG9zdCk7XG4gICAgfVxuICAgIGxldCBpc0J5cGFzc2VkRmxhZyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBub1Byb3h5TGlzdCkge1xuICAgICAgICBpZiAocGF0dGVyblswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIGVpdGhlciBkb21haW4gaXQgc2VsZiBvciBhbnkgc3ViZG9tYWluIG9yIGhvc3RcbiAgICAgICAgICAgIC8vIC5mb28uY29tIHdpbGwgbWF0Y2ggZm9vLmNvbSBpdCBzZWxmIG9yICouZm9vLmNvbVxuICAgICAgICAgICAgaWYgKGhvc3QuZW5kc1dpdGgocGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICBpc0J5cGFzc2VkRmxhZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaG9zdC5sZW5ndGggPT09IHBhdHRlcm4ubGVuZ3RoIC0gMSAmJiBob3N0ID09PSBwYXR0ZXJuLnNsaWNlKDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQnlwYXNzZWRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG9zdCA9PT0gcGF0dGVybikge1xuICAgICAgICAgICAgICAgIGlzQnlwYXNzZWRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBieXBhc3NlZE1hcCA9PT0gbnVsbCB8fCBieXBhc3NlZE1hcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYnlwYXNzZWRNYXAuc2V0KGhvc3QsIGlzQnlwYXNzZWRGbGFnKTtcbiAgICByZXR1cm4gaXNCeXBhc3NlZEZsYWc7XG59XG5mdW5jdGlvbiBsb2FkTm9Qcm94eSgpIHtcbiAgICBjb25zdCBub1Byb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShOT19QUk9YWSk7XG4gICAgbm9Qcm94eUxpc3RMb2FkZWQgPSB0cnVlO1xuICAgIGlmIChub1Byb3h5KSB7XG4gICAgICAgIHJldHVybiBub1Byb3h5XG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBhIHByb3h5IHVybCBpbnRvIGBQcm94eVNldHRpbmdzYCBmb3IgdXNlIHdpdGggUHJveHlQb2xpY3kuXG4gKiBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgaXQgYXR0ZW1wdHMgdG8gcGFyc2UgYSBwcm94eSBVUkwgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcyBgSFRUUFNfUFJPWFlgIG9yIGBIVFRQX1BST1hZYC5cbiAqIEBwYXJhbSBwcm94eVVybCAtIFRoZSB1cmwgb2YgdGhlIHByb3h5IHRvIHVzZS4gTWF5IGNvbnRhaW4gYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uXG4gKiBAZGVwcmVjYXRlZCAtIEludGVybmFsbHkgdGhpcyBtZXRob2QgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB3aGVuIHNldHRpbmcgcHJveHkgaW5mb3JtYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRQcm94eVNldHRpbmdzKHByb3h5VXJsKSB7XG4gICAgaWYgKCFwcm94eVVybCkge1xuICAgICAgICBwcm94eVVybCA9IGxvYWRFbnZpcm9ubWVudFByb3h5VmFsdWUoKTtcbiAgICAgICAgaWYgKCFwcm94eVVybCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHByb3h5VXJsKTtcbiAgICBjb25zdCBzY2hlbWEgPSBwYXJzZWRVcmwucHJvdG9jb2wgPyBwYXJzZWRVcmwucHJvdG9jb2wgKyBcIi8vXCIgOiBcIlwiO1xuICAgIHJldHVybiB7XG4gICAgICAgIGhvc3Q6IHNjaGVtYSArIHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogTnVtYmVyLnBhcnNlSW50KHBhcnNlZFVybC5wb3J0IHx8IFwiODBcIiksXG4gICAgICAgIHVzZXJuYW1lOiBwYXJzZWRVcmwudXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBwYXJzZWRVcmwucGFzc3dvcmQsXG4gICAgfTtcbn1cbi8qKlxuICogVGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcGFyc2UgYSBwcm94eSBVUkwgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcyBgSFRUUFNfUFJPWFlgIG9yIGBIVFRQX1BST1hZYC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3NJbnRlcm5hbCgpIHtcbiAgICBjb25zdCBlbnZQcm94eSA9IGxvYWRFbnZpcm9ubWVudFByb3h5VmFsdWUoKTtcbiAgICByZXR1cm4gZW52UHJveHkgPyBuZXcgVVJMKGVudlByb3h5KSA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFVybEZyb21Qcm94eVNldHRpbmdzKHNldHRpbmdzKSB7XG4gICAgbGV0IHBhcnNlZFByb3h5VXJsO1xuICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFByb3h5VXJsID0gbmV3IFVSTChzZXR0aW5ncy5ob3N0KTtcbiAgICB9XG4gICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0aW5nIGEgdmFsaWQgaG9zdCBzdHJpbmcgaW4gcHJveHkgc2V0dGluZ3MsIGJ1dCBmb3VuZCBcIiR7c2V0dGluZ3MuaG9zdH1cIi5gKTtcbiAgICB9XG4gICAgcGFyc2VkUHJveHlVcmwucG9ydCA9IFN0cmluZyhzZXR0aW5ncy5wb3J0KTtcbiAgICBpZiAoc2V0dGluZ3MudXNlcm5hbWUpIHtcbiAgICAgICAgcGFyc2VkUHJveHlVcmwudXNlcm5hbWUgPSBzZXR0aW5ncy51c2VybmFtZTtcbiAgICB9XG4gICAgaWYgKHNldHRpbmdzLnBhc3N3b3JkKSB7XG4gICAgICAgIHBhcnNlZFByb3h5VXJsLnBhc3N3b3JkID0gc2V0dGluZ3MucGFzc3dvcmQ7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRQcm94eVVybDtcbn1cbmZ1bmN0aW9uIHNldFByb3h5QWdlbnRPblJlcXVlc3QocmVxdWVzdCwgY2FjaGVkQWdlbnRzLCBwcm94eVVybCkge1xuICAgIC8vIEN1c3RvbSBBZ2VudCBzaG91bGQgdGFrZSBwcmVjZWRlbmNlIHNvIGlmIG9uZSBpcyBwcmVzZW50XG4gICAgLy8gd2Ugc2hvdWxkIHNraXAgdG8gYXZvaWQgb3ZlcndyaXRpbmcgaXQuXG4gICAgaWYgKHJlcXVlc3QuYWdlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKTtcbiAgICBjb25zdCBpc0luc2VjdXJlID0gdXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiO1xuICAgIGlmIChyZXF1ZXN0LnRsc1NldHRpbmdzKSB7XG4gICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKFwiVExTIHNldHRpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGNvbWJpbmF0aW9uIHdpdGggY3VzdG9tIFByb3h5LCBjZXJ0aWZpY2F0ZXMgcHJvdmlkZWQgdG8gdGhlIGNsaWVudCB3aWxsIGJlIGlnbm9yZWQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzLnRvSlNPTigpO1xuICAgIGlmIChpc0luc2VjdXJlKSB7XG4gICAgICAgIGlmICghY2FjaGVkQWdlbnRzLmh0dHBQcm94eUFnZW50KSB7XG4gICAgICAgICAgICBjYWNoZWRBZ2VudHMuaHR0cFByb3h5QWdlbnQgPSBuZXcgaHR0cF9wcm94eV9hZ2VudF8xLkh0dHBQcm94eUFnZW50KHByb3h5VXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5hZ2VudCA9IGNhY2hlZEFnZW50cy5odHRwUHJveHlBZ2VudDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghY2FjaGVkQWdlbnRzLmh0dHBzUHJveHlBZ2VudCkge1xuICAgICAgICAgICAgY2FjaGVkQWdlbnRzLmh0dHBzUHJveHlBZ2VudCA9IG5ldyBodHRwc19wcm94eV9hZ2VudF8xLkh0dHBzUHJveHlBZ2VudChwcm94eVVybCwgeyBoZWFkZXJzIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3QuYWdlbnQgPSBjYWNoZWRBZ2VudHMuaHR0cHNQcm94eUFnZW50O1xuICAgIH1cbn1cbi8qKlxuICogQSBwb2xpY3kgdGhhdCBhbGxvd3Mgb25lIHRvIGFwcGx5IHByb3h5IHNldHRpbmdzIHRvIGFsbCByZXF1ZXN0cy5cbiAqIElmIG5vdCBwYXNzZWQgc3RhdGljIHNldHRpbmdzLCB0aGV5IHdpbGwgYmUgcmV0cmlldmVkIGZyb20gdGhlIEhUVFBTX1BST1hZXG4gKiBvciBIVFRQX1BST1hZIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIEBwYXJhbSBwcm94eVNldHRpbmdzIC0gUHJveHlTZXR0aW5ncyB0byB1c2Ugb24gZWFjaCByZXF1ZXN0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBhZGRpdGlvbmFsIHNldHRpbmdzLCBmb3IgZXhhbXBsZSwgY3VzdG9tIE5PX1BST1hZIHBhdHRlcm5zXG4gKi9cbmZ1bmN0aW9uIHByb3h5UG9saWN5KHByb3h5U2V0dGluZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW5vUHJveHlMaXN0TG9hZGVkKSB7XG4gICAgICAgIGV4cG9ydHMuZ2xvYmFsTm9Qcm94eUxpc3QucHVzaCguLi5sb2FkTm9Qcm94eSgpKTtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFByb3h5ID0gcHJveHlTZXR0aW5nc1xuICAgICAgICA/IGdldFVybEZyb21Qcm94eVNldHRpbmdzKHByb3h5U2V0dGluZ3MpXG4gICAgICAgIDogZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3NJbnRlcm5hbCgpO1xuICAgIGNvbnN0IGNhY2hlZEFnZW50cyA9IHt9O1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMucHJveHlQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QucHJveHlTZXR0aW5ncyAmJlxuICAgICAgICAgICAgICAgIGRlZmF1bHRQcm94eSAmJlxuICAgICAgICAgICAgICAgICFpc0J5cGFzc2VkKHJlcXVlc3QudXJsLCAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3VzdG9tTm9Qcm94eUxpc3QpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGV4cG9ydHMuZ2xvYmFsTm9Qcm94eUxpc3QsIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3VzdG9tTm9Qcm94eUxpc3QpID8gdW5kZWZpbmVkIDogZ2xvYmFsQnlwYXNzZWRNYXApKSB7XG4gICAgICAgICAgICAgICAgc2V0UHJveHlBZ2VudE9uUmVxdWVzdChyZXF1ZXN0LCBjYWNoZWRBZ2VudHMsIGRlZmF1bHRQcm94eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXF1ZXN0LnByb3h5U2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICBzZXRQcm94eUFnZW50T25SZXF1ZXN0KHJlcXVlc3QsIGNhY2hlZEFnZW50cywgZ2V0VXJsRnJvbVByb3h5U2V0dGluZ3MocmVxdWVzdC5wcm94eVNldHRpbmdzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJveHlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kgPSBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3k7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LlxuICovXG5leHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUgPSBcInNldENsaWVudFJlcXVlc3RJZFBvbGljeVwiO1xuLyoqXG4gKiBFYWNoIFBpcGVsaW5lUmVxdWVzdCBnZXRzIGEgdW5pcXVlIGlkIHVwb24gY3JlYXRpb24uXG4gKiBUaGlzIHBvbGljeSBwYXNzZXMgdGhhdCB1bmlxdWUgaWQgYWxvbmcgdmlhIGFuIEhUVFAgaGVhZGVyIHRvIGVuYWJsZSBiZXR0ZXJcbiAqIHRlbGVtZXRyeSBhbmQgdHJhY2luZy5cbiAqIEBwYXJhbSByZXF1ZXN0SWRIZWFkZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byBwYXNzIHRoZSByZXF1ZXN0IElEIHRvLlxuICovXG5mdW5jdGlvbiBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kocmVxdWVzdElkSGVhZGVyTmFtZSA9IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QuaGVhZGVycy5oYXMocmVxdWVzdElkSGVhZGVyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KHJlcXVlc3RJZEhlYWRlck5hbWUsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50bHNQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy50bHNQb2xpY3kgPSB0bHNQb2xpY3k7XG4vKipcbiAqIE5hbWUgb2YgdGhlIFRMUyBQb2xpY3lcbiAqL1xuZXhwb3J0cy50bHNQb2xpY3lOYW1lID0gXCJ0bHNQb2xpY3lcIjtcbi8qKlxuICogR2V0cyBhIHBpcGVsaW5lIHBvbGljeSB0aGF0IGFkZHMgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSB0byB0aGUgSHR0cENsaWVudCBhZ2VudCBmb3IgYXV0aGVudGljYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHRsc1BvbGljeSh0bHNTZXR0aW5ncykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMudGxzUG9saWN5TmFtZSxcbiAgICAgICAgc2VuZFJlcXVlc3Q6IGFzeW5jIChyZXEsIG5leHQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZXJzIG1heSBkZWZpbmUgYSByZXF1ZXN0IHRsc1NldHRpbmdzLCBob25vciB0aG9zZSBvdmVyIHRoZSBjbGllbnQgbGV2ZWwgb25lXG4gICAgICAgICAgICBpZiAoIXJlcS50bHNTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHJlcS50bHNTZXR0aW5ncyA9IHRsc1NldHRpbmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGxzUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHJhY2luZ0NvbnRleHRJbXBsID0gZXhwb3J0cy5rbm93bkNvbnRleHRLZXlzID0gdm9pZCAwO1xuZXhwb3J0cy5jcmVhdGVUcmFjaW5nQ29udGV4dCA9IGNyZWF0ZVRyYWNpbmdDb250ZXh0O1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0cy5rbm93bkNvbnRleHRLZXlzID0ge1xuICAgIHNwYW46IFN5bWJvbC5mb3IoXCJAYXp1cmUvY29yZS10cmFjaW5nIHNwYW5cIiksXG4gICAgbmFtZXNwYWNlOiBTeW1ib2wuZm9yKFwiQGF6dXJlL2NvcmUtdHJhY2luZyBuYW1lc3BhY2VcIiksXG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHtAbGluayBUcmFjaW5nQ29udGV4dH0gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQSBzZXQgb2Yga25vd24ga2V5cyB0aGF0IG1heSBiZSBzZXQgb24gdGhlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgVHJhY2luZ0NvbnRleHR9IHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRyYWNpbmdDb250ZXh0KG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBjb250ZXh0ID0gbmV3IFRyYWNpbmdDb250ZXh0SW1wbChvcHRpb25zLnBhcmVudENvbnRleHQpO1xuICAgIGlmIChvcHRpb25zLnNwYW4pIHtcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQuc2V0VmFsdWUoZXhwb3J0cy5rbm93bkNvbnRleHRLZXlzLnNwYW4sIG9wdGlvbnMuc3Bhbik7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm5hbWVzcGFjZSkge1xuICAgICAgICBjb250ZXh0ID0gY29udGV4dC5zZXRWYWx1ZShleHBvcnRzLmtub3duQ29udGV4dEtleXMubmFtZXNwYWNlLCBvcHRpb25zLm5hbWVzcGFjZSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuY2xhc3MgVHJhY2luZ0NvbnRleHRJbXBsIHtcbiAgICBjb25zdHJ1Y3Rvcihpbml0aWFsQ29udGV4dCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0TWFwID1cbiAgICAgICAgICAgIGluaXRpYWxDb250ZXh0IGluc3RhbmNlb2YgVHJhY2luZ0NvbnRleHRJbXBsXG4gICAgICAgICAgICAgICAgPyBuZXcgTWFwKGluaXRpYWxDb250ZXh0Ll9jb250ZXh0TWFwKVxuICAgICAgICAgICAgICAgIDogbmV3IE1hcCgpO1xuICAgIH1cbiAgICBzZXRWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBuZXcgVHJhY2luZ0NvbnRleHRJbXBsKHRoaXMpO1xuICAgICAgICBuZXdDb250ZXh0Ll9jb250ZXh0TWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ld0NvbnRleHQ7XG4gICAgfVxuICAgIGdldFZhbHVlKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dE1hcC5nZXQoa2V5KTtcbiAgICB9XG4gICAgZGVsZXRlVmFsdWUoa2V5KSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBuZXcgVHJhY2luZ0NvbnRleHRJbXBsKHRoaXMpO1xuICAgICAgICBuZXdDb250ZXh0Ll9jb250ZXh0TWFwLmRlbGV0ZShrZXkpO1xuICAgICAgICByZXR1cm4gbmV3Q29udGV4dDtcbiAgICB9XG59XG5leHBvcnRzLlRyYWNpbmdDb250ZXh0SW1wbCA9IFRyYWNpbmdDb250ZXh0SW1wbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNpbmdDb250ZXh0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhdGUgPSB2b2lkIDA7XG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIEhvbGRzIHRoZSBzaW5nbGV0b24gaW5zdHJ1bWVudGVyLCB0byBiZSBzaGFyZWQgYWNyb3NzIENKUyBhbmQgRVNNIGltcG9ydHMuXG4gKi9cbmV4cG9ydHMuc3RhdGUgPSB7XG4gICAgaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb246IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGF0ZS1janMuY2pzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRGVmYXVsdFRyYWNpbmdTcGFuID0gY3JlYXRlRGVmYXVsdFRyYWNpbmdTcGFuO1xuZXhwb3J0cy5jcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyID0gY3JlYXRlRGVmYXVsdEluc3RydW1lbnRlcjtcbmV4cG9ydHMudXNlSW5zdHJ1bWVudGVyID0gdXNlSW5zdHJ1bWVudGVyO1xuZXhwb3J0cy5nZXRJbnN0cnVtZW50ZXIgPSBnZXRJbnN0cnVtZW50ZXI7XG5jb25zdCB0cmFjaW5nQ29udGV4dF9qc18xID0gcmVxdWlyZShcIi4vdHJhY2luZ0NvbnRleHQuanNcIik7XG5jb25zdCBzdGF0ZV9qc18xID0gcmVxdWlyZShcIi4vc3RhdGUuanNcIik7XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW4oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBub29wXG4gICAgICAgIH0sXG4gICAgICAgIGlzUmVjb3JkaW5nOiAoKSA9PiBmYWxzZSxcbiAgICAgICAgcmVjb3JkRXhjZXB0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBub29wXG4gICAgICAgIH0sXG4gICAgICAgIHNldEF0dHJpYnV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9LFxuICAgICAgICBzZXRTdGF0dXM6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgYWRkRXZlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEluc3RydW1lbnRlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjcmVhdGVSZXF1ZXN0SGVhZGVyczogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9LFxuICAgICAgICBwYXJzZVRyYWNlcGFyZW50SGVhZGVyOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBzdGFydFNwYW46IChfbmFtZSwgc3Bhbk9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3BhbjogY3JlYXRlRGVmYXVsdFRyYWNpbmdTcGFuKCksXG4gICAgICAgICAgICAgICAgdHJhY2luZ0NvbnRleHQ6ICgwLCB0cmFjaW5nQ29udGV4dF9qc18xLmNyZWF0ZVRyYWNpbmdDb250ZXh0KSh7IHBhcmVudENvbnRleHQ6IHNwYW5PcHRpb25zLnRyYWNpbmdDb250ZXh0IH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgd2l0aENvbnRleHQoX2NvbnRleHQsIGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3MpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vKipcbiAqIEV4dGVuZHMgdGhlIEF6dXJlIFNESyB3aXRoIHN1cHBvcnQgZm9yIGEgZ2l2ZW4gaW5zdHJ1bWVudGVyIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBpbnN0cnVtZW50ZXIgLSBUaGUgaW5zdHJ1bWVudGVyIGltcGxlbWVudGF0aW9uIHRvIHVzZS5cbiAqL1xuZnVuY3Rpb24gdXNlSW5zdHJ1bWVudGVyKGluc3RydW1lbnRlcikge1xuICAgIHN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb24gPSBpbnN0cnVtZW50ZXI7XG59XG4vKipcbiAqIEdldHMgdGhlIGN1cnJlbnRseSBzZXQgaW5zdHJ1bWVudGVyLCBhIE5vLU9wIGluc3RydW1lbnRlciBieSBkZWZhdWx0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50bHkgc2V0IGluc3RydW1lbnRlclxuICovXG5mdW5jdGlvbiBnZXRJbnN0cnVtZW50ZXIoKSB7XG4gICAgaWYgKCFzdGF0ZV9qc18xLnN0YXRlLmluc3RydW1lbnRlckltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb24gPSBjcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyKCk7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZV9qc18xLnN0YXRlLmluc3RydW1lbnRlckltcGxlbWVudGF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlVHJhY2luZ0NsaWVudCA9IGNyZWF0ZVRyYWNpbmdDbGllbnQ7XG5jb25zdCBpbnN0cnVtZW50ZXJfanNfMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRlci5qc1wiKTtcbmNvbnN0IHRyYWNpbmdDb250ZXh0X2pzXzEgPSByZXF1aXJlKFwiLi90cmFjaW5nQ29udGV4dC5qc1wiKTtcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0cmFjaW5nIGNsaWVudC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdXNlZCB0byBjb25maWd1cmUgdGhlIHRyYWNpbmcgY2xpZW50LlxuICogQHJldHVybnMgLSBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgVHJhY2luZ0NsaWVudH0uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRyYWNpbmdDbGllbnQob3B0aW9ucykge1xuICAgIGNvbnN0IHsgbmFtZXNwYWNlLCBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfSA9IG9wdGlvbnM7XG4gICAgZnVuY3Rpb24gc3RhcnRTcGFuKG5hbWUsIG9wZXJhdGlvbk9wdGlvbnMsIHNwYW5PcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc3RhcnRTcGFuUmVzdWx0ID0gKDAsIGluc3RydW1lbnRlcl9qc18xLmdldEluc3RydW1lbnRlcikoKS5zdGFydFNwYW4obmFtZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzcGFuT3B0aW9ucyksIHsgcGFja2FnZU5hbWU6IHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbjogcGFja2FnZVZlcnNpb24sIHRyYWNpbmdDb250ZXh0OiAoX2EgPSBvcGVyYXRpb25PcHRpb25zID09PSBudWxsIHx8IG9wZXJhdGlvbk9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbk9wdGlvbnMudHJhY2luZ09wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50cmFjaW5nQ29udGV4dCB9KSk7XG4gICAgICAgIGxldCB0cmFjaW5nQ29udGV4dCA9IHN0YXJ0U3BhblJlc3VsdC50cmFjaW5nQ29udGV4dDtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHN0YXJ0U3BhblJlc3VsdC5zcGFuO1xuICAgICAgICBpZiAoIXRyYWNpbmdDb250ZXh0LmdldFZhbHVlKHRyYWNpbmdDb250ZXh0X2pzXzEua25vd25Db250ZXh0S2V5cy5uYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICB0cmFjaW5nQ29udGV4dCA9IHRyYWNpbmdDb250ZXh0LnNldFZhbHVlKHRyYWNpbmdDb250ZXh0X2pzXzEua25vd25Db250ZXh0S2V5cy5uYW1lc3BhY2UsIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoXCJhei5uYW1lc3BhY2VcIiwgdHJhY2luZ0NvbnRleHQuZ2V0VmFsdWUodHJhY2luZ0NvbnRleHRfanNfMS5rbm93bkNvbnRleHRLZXlzLm5hbWVzcGFjZSkpO1xuICAgICAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvbk9wdGlvbnMsIHtcbiAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvbk9wdGlvbnMgPT09IG51bGwgfHwgb3BlcmF0aW9uT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uT3B0aW9ucy50cmFjaW5nT3B0aW9ucyksIHsgdHJhY2luZ0NvbnRleHQgfSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgIHVwZGF0ZWRPcHRpb25zLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBmdW5jdGlvbiB3aXRoU3BhbihuYW1lLCBvcGVyYXRpb25PcHRpb25zLCBjYWxsYmFjaywgc3Bhbk9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBzcGFuLCB1cGRhdGVkT3B0aW9ucyB9ID0gc3RhcnRTcGFuKG5hbWUsIG9wZXJhdGlvbk9wdGlvbnMsIHNwYW5PcHRpb25zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhDb250ZXh0KHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNpbmdDb250ZXh0LCAoKSA9PiBQcm9taXNlLnJlc29sdmUoY2FsbGJhY2sodXBkYXRlZE9wdGlvbnMsIHNwYW4pKSk7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IHN0YXR1czogXCJzdWNjZXNzXCIgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgc3RhdHVzOiBcImVycm9yXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdpdGhDb250ZXh0KGNvbnRleHQsIGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3MpIHtcbiAgICAgICAgcmV0dXJuICgwLCBpbnN0cnVtZW50ZXJfanNfMS5nZXRJbnN0cnVtZW50ZXIpKCkud2l0aENvbnRleHQoY29udGV4dCwgY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHRyYWNlcGFyZW50IGhlYWRlciB2YWx1ZSBpbnRvIGEgc3BhbiBpZGVudGlmaWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRyYWNlcGFyZW50SGVhZGVyIC0gVGhlIHRyYWNlcGFyZW50IGhlYWRlciB0byBwYXJzZS5cbiAgICAgKiBAcmV0dXJucyBBbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBpZGVudGlmaWVyIGZvciB0aGUgc3Bhbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZVRyYWNlcGFyZW50SGVhZGVyKHRyYWNlcGFyZW50SGVhZGVyKSB7XG4gICAgICAgIHJldHVybiAoMCwgaW5zdHJ1bWVudGVyX2pzXzEuZ2V0SW5zdHJ1bWVudGVyKSgpLnBhcnNlVHJhY2VwYXJlbnRIZWFkZXIodHJhY2VwYXJlbnRIZWFkZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2V0IG9mIHJlcXVlc3QgaGVhZGVycyB0byBwcm9wYWdhdGUgdHJhY2luZyBpbmZvcm1hdGlvbiB0byBhIGJhY2tlbmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHJhY2luZ0NvbnRleHQgLSBUaGUgY29udGV4dCBjb250YWluaW5nIHRoZSBzcGFuIHRvIHNlcmlhbGl6ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGhlYWRlcnMgdG8gYWRkIHRvIGEgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0SGVhZGVycyh0cmFjaW5nQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIGluc3RydW1lbnRlcl9qc18xLmdldEluc3RydW1lbnRlcikoKS5jcmVhdGVSZXF1ZXN0SGVhZGVycyh0cmFjaW5nQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0U3BhbixcbiAgICAgICAgd2l0aFNwYW4sXG4gICAgICAgIHdpdGhDb250ZXh0LFxuICAgICAgICBwYXJzZVRyYWNlcGFyZW50SGVhZGVyLFxuICAgICAgICBjcmVhdGVSZXF1ZXN0SGVhZGVycyxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2luZ0NsaWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVRyYWNpbmdDbGllbnQgPSBleHBvcnRzLnVzZUluc3RydW1lbnRlciA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50ZXJfanNfMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRlci5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZUluc3RydW1lbnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGVyX2pzXzEudXNlSW5zdHJ1bWVudGVyOyB9IH0pO1xudmFyIHRyYWNpbmdDbGllbnRfanNfMSA9IHJlcXVpcmUoXCIuL3RyYWNpbmdDbGllbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUcmFjaW5nQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjaW5nQ2xpZW50X2pzXzEuY3JlYXRlVHJhY2luZ0NsaWVudDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3VzdG9tID0gdm9pZCAwO1xuY29uc3Qgbm9kZV91dGlsXzEgPSByZXF1aXJlKFwibm9kZTp1dGlsXCIpO1xuZXhwb3J0cy5jdXN0b20gPSBub2RlX3V0aWxfMS5pbnNwZWN0LmN1c3RvbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3BlY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZXN0RXJyb3IgPSB2b2lkIDA7XG5leHBvcnRzLmlzUmVzdEVycm9yID0gaXNSZXN0RXJyb3I7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgaW5zcGVjdF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC9pbnNwZWN0LmpzXCIpO1xuY29uc3Qgc2FuaXRpemVyX2pzXzEgPSByZXF1aXJlKFwiLi91dGlsL3Nhbml0aXplci5qc1wiKTtcbmNvbnN0IGVycm9yU2FuaXRpemVyID0gbmV3IHNhbml0aXplcl9qc18xLlNhbml0aXplcigpO1xuLyoqXG4gKiBBIGN1c3RvbSBlcnJvciB0eXBlIGZvciBmYWlsZWQgcGlwZWxpbmUgcmVxdWVzdHMuXG4gKi9cbmNsYXNzIFJlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUmVzdEVycm9yXCI7XG4gICAgICAgIHRoaXMuY29kZSA9IG9wdGlvbnMuY29kZTtcbiAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gb3B0aW9ucy5zdGF0dXNDb2RlO1xuICAgICAgICAvLyBUaGUgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWF5IGNvbnRhaW4gc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIHRoZSBoZWFkZXJzIG9yIGJvZHkuXG4gICAgICAgIC8vIFRvIGhlbHAgcHJldmVudCB0aGlzIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBiZWluZyBhY2NpZGVudGFsbHkgbG9nZ2VkLCB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2VcbiAgICAgICAgLy8gcHJvcGVydGllcyBhcmUgbWFya2VkIGFzIG5vbi1lbnVtZXJhYmxlIGhlcmUuIFRoaXMgcHJldmVudHMgdGhlbSBzaG93aW5nIHVwIGluIHRoZSBvdXRwdXQgb2ZcbiAgICAgICAgLy8gSlNPTi5zdHJpbmdpZnkgYW5kIGNvbnNvbGUubG9nLlxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJyZXF1ZXN0XCIsIHsgdmFsdWU6IG9wdGlvbnMucmVxdWVzdCwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlc3BvbnNlXCIsIHsgdmFsdWU6IG9wdGlvbnMucmVzcG9uc2UsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUmVzdEVycm9yLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvZ2dpbmcgbWV0aG9kIGZvciB1dGlsLmluc3BlY3QgaW4gTm9kZVxuICAgICAqL1xuICAgIFtpbnNwZWN0X2pzXzEuY3VzdG9tXSgpIHtcbiAgICAgICAgLy8gRXh0cmFjdCBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGFuZCBhZGQgdGhlbSBiYWNrLiBUaGlzIGlzIE9LIHNpbmNlIGluIHRoaXMgb3V0cHV0IHRoZSByZXF1ZXN0IGFuZFxuICAgICAgICAvLyByZXNwb25zZSBnZXQgc2FuaXRpemVkLlxuICAgICAgICByZXR1cm4gYFJlc3RFcnJvcjogJHt0aGlzLm1lc3NhZ2V9IFxcbiAke2Vycm9yU2FuaXRpemVyLnNhbml0aXplKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcyksIHsgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LCByZXNwb25zZTogdGhpcy5yZXNwb25zZSB9KSl9YDtcbiAgICB9XG59XG5leHBvcnRzLlJlc3RFcnJvciA9IFJlc3RFcnJvcjtcbi8qKlxuICogU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hlbiBtYWtpbmcgdGhlIHJlcXVlc3QuXG4gKiBUaGlzIG1lYW5zIHRoZSBhY3R1YWwgcmVxdWVzdCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLFxuICogc3VjaCBhcyBhIEROUyBpc3N1ZSBvciB0aGUgY29ubmVjdGlvbiBiZWluZyBsb3N0LlxuICovXG5SZXN0RXJyb3IuUkVRVUVTVF9TRU5EX0VSUk9SID0gXCJSRVFVRVNUX1NFTkRfRVJST1JcIjtcbi8qKlxuICogVGhpcyBtZWFucyB0aGF0IHBhcnNpbmcgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuXG4gKiBJdCBtYXkgaGF2ZSBiZWVuIG1hbGZvcm1lZC5cbiAqL1xuUmVzdEVycm9yLlBBUlNFX0VSUk9SID0gXCJQQVJTRV9FUlJPUlwiO1xuLyoqXG4gKiBUeXBlZ3VhcmQgZm9yIFJlc3RFcnJvclxuICogQHBhcmFtIGUgLSBTb21ldGhpbmcgY2F1Z2h0IGJ5IGEgY2F0Y2ggY2xhdXNlLlxuICovXG5mdW5jdGlvbiBpc1Jlc3RFcnJvcihlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBSZXN0RXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAoMCwgY29yZV91dGlsXzEuaXNFcnJvcikoZSkgJiYgZS5uYW1lID09PSBcIlJlc3RFcnJvclwiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzdEVycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnRyYWNpbmdQb2xpY3kgPSB0cmFjaW5nUG9saWN5O1xuY29uc3QgY29yZV90cmFjaW5nXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdHJhY2luZ1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHVzZXJBZ2VudF9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvdXNlckFnZW50LmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IHJlc3RFcnJvcl9qc18xID0gcmVxdWlyZShcIi4uL3Jlc3RFcnJvci5qc1wiKTtcbmNvbnN0IHNhbml0aXplcl9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvc2FuaXRpemVyLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHRyYWNpbmdQb2xpY3kuXG4gKi9cbmV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUgPSBcInRyYWNpbmdQb2xpY3lcIjtcbi8qKlxuICogQSBzaW1wbGUgcG9saWN5IHRvIGNyZWF0ZSBPcGVuVGVsZW1ldHJ5IFNwYW5zIGZvciBlYWNoIHJlcXVlc3QgbWFkZSBieSB0aGUgcGlwZWxpbmVcbiAqIHRoYXQgaGFzIFNwYW5PcHRpb25zIHdpdGggYSBwYXJlbnQuXG4gKiBSZXF1ZXN0cyBtYWRlIHdpdGhvdXQgYSBwYXJlbnQgU3BhbiB3aWxsIG5vdCBiZSByZWNvcmRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIHRlbGVtZXRyeSBsb2dnZWQgYnkgdGhlIHRyYWNpbmcgcG9saWN5LlxuICovXG5mdW5jdGlvbiB0cmFjaW5nUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHVzZXJBZ2VudFByb21pc2UgPSAoMCwgdXNlckFnZW50X2pzXzEuZ2V0VXNlckFnZW50VmFsdWUpKG9wdGlvbnMudXNlckFnZW50UHJlZml4KTtcbiAgICBjb25zdCBzYW5pdGl6ZXIgPSBuZXcgc2FuaXRpemVyX2pzXzEuU2FuaXRpemVyKHtcbiAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnM6IG9wdGlvbnMuYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnMsXG4gICAgfSk7XG4gICAgY29uc3QgdHJhY2luZ0NsaWVudCA9IHRyeUNyZWF0ZVRyYWNpbmdDbGllbnQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnRyYWNpbmdQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoIXRyYWNpbmdDbGllbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHVzZXJBZ2VudFByb21pc2U7XG4gICAgICAgICAgICBjb25zdCBzcGFuQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICBcImh0dHAudXJsXCI6IHNhbml0aXplci5zYW5pdGl6ZVVybChyZXF1ZXN0LnVybCksXG4gICAgICAgICAgICAgICAgXCJodHRwLm1ldGhvZFwiOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICBcImh0dHAudXNlcl9hZ2VudFwiOiB1c2VyQWdlbnQsXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodXNlckFnZW50KSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbXCJodHRwLnVzZXJfYWdlbnRcIl0gPSB1c2VyQWdlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IHNwYW4sIHRyYWNpbmdDb250ZXh0IH0gPSAoX2EgPSB0cnlDcmVhdGVTcGFuKHRyYWNpbmdDbGllbnQsIHJlcXVlc3QsIHNwYW5BdHRyaWJ1dGVzKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICAgICAgICBpZiAoIXNwYW4gfHwgIXRyYWNpbmdDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHJhY2luZ0NsaWVudC53aXRoQ29udGV4dCh0cmFjaW5nQ29udGV4dCwgbmV4dCwgcmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgdHJ5UHJvY2Vzc1Jlc3BvbnNlKHNwYW4sIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5UHJvY2Vzc0Vycm9yKHNwYW4sIGVycik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiB0cnlDcmVhdGVUcmFjaW5nQ2xpZW50KCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoMCwgY29yZV90cmFjaW5nXzEuY3JlYXRlVHJhY2luZ0NsaWVudCkoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiBcIlwiLFxuICAgICAgICAgICAgcGFja2FnZU5hbWU6IFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiLFxuICAgICAgICAgICAgcGFja2FnZVZlcnNpb246IGNvbnN0YW50c19qc18xLlNES19WRVJTSU9OLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoYEVycm9yIHdoZW4gY3JlYXRpbmcgdGhlIFRyYWNpbmdDbGllbnQ6ICR7KDAsIGNvcmVfdXRpbF8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gdHJ5Q3JlYXRlU3Bhbih0cmFjaW5nQ2xpZW50LCByZXF1ZXN0LCBzcGFuQXR0cmlidXRlcykge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIEFzIHBlciBzcGVjLCB3ZSBkbyBub3QgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSFRUUCBhbmQgSFRUUFMgaW4gc3BhbiBuYW1lLlxuICAgICAgICBjb25zdCB7IHNwYW4sIHVwZGF0ZWRPcHRpb25zIH0gPSB0cmFjaW5nQ2xpZW50LnN0YXJ0U3BhbihgSFRUUCAke3JlcXVlc3QubWV0aG9kfWAsIHsgdHJhY2luZ09wdGlvbnM6IHJlcXVlc3QudHJhY2luZ09wdGlvbnMgfSwge1xuICAgICAgICAgICAgc3BhbktpbmQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlcyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHRoZSBzcGFuIGlzIG5vdCByZWNvcmRpbmcsIGRvbid0IGRvIGFueSBtb3JlIHdvcmsuXG4gICAgICAgIGlmICghc3Bhbi5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgaGVhZGVyc1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdHJhY2luZ0NsaWVudC5jcmVhdGVSZXF1ZXN0SGVhZGVycyh1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucy50cmFjaW5nQ29udGV4dCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHNwYW4sIHRyYWNpbmdDb250ZXh0OiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucy50cmFjaW5nQ29udGV4dCB9O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgU2tpcHBpbmcgY3JlYXRpbmcgYSB0cmFjaW5nIHNwYW4gZHVlIHRvIGFuIGVycm9yOiAkeygwLCBjb3JlX3V0aWxfMS5nZXRFcnJvck1lc3NhZ2UpKGUpfWApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRyeVByb2Nlc3NFcnJvcihzcGFuLCBlcnJvcikge1xuICAgIHRyeSB7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIHN0YXR1czogXCJlcnJvclwiLFxuICAgICAgICAgICAgZXJyb3I6ICgwLCBjb3JlX3V0aWxfMS5pc0Vycm9yKShlcnJvcikgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICgoMCwgcmVzdEVycm9yX2pzXzEuaXNSZXN0RXJyb3IpKGVycm9yKSAmJiBlcnJvci5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImh0dHAuc3RhdHVzX2NvZGVcIiwgZXJyb3Iuc3RhdHVzQ29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoYFNraXBwaW5nIHRyYWNpbmcgc3BhbiBwcm9jZXNzaW5nIGR1ZSB0byBhbiBlcnJvcjogJHsoMCwgY29yZV91dGlsXzEuZ2V0RXJyb3JNZXNzYWdlKShlKX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0cnlQcm9jZXNzUmVzcG9uc2Uoc3BhbiwgcmVzcG9uc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImh0dHAuc3RhdHVzX2NvZGVcIiwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgY29uc3Qgc2VydmljZVJlcXVlc3RJZCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwieC1tcy1yZXF1ZXN0LWlkXCIpO1xuICAgICAgICBpZiAoc2VydmljZVJlcXVlc3RJZCkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoXCJzZXJ2aWNlUmVxdWVzdElkXCIsIHNlcnZpY2VSZXF1ZXN0SWQpO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIHN0YXR1czogXCJzdWNjZXNzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgU2tpcHBpbmcgdHJhY2luZyBzcGFuIHByb2Nlc3NpbmcgZHVlIHRvIGFuIGVycm9yOiAkeygwLCBjb3JlX3V0aWxfMS5nZXRFcnJvck1lc3NhZ2UpKGUpfWApO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNpbmdQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zID0gY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucztcbmNvbnN0IGxvZ1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbG9nUG9saWN5LmpzXCIpO1xuY29uc3QgcGlwZWxpbmVfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lLmpzXCIpO1xuY29uc3QgcmVkaXJlY3RQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3JlZGlyZWN0UG9saWN5LmpzXCIpO1xuY29uc3QgdXNlckFnZW50UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy91c2VyQWdlbnRQb2xpY3kuanNcIik7XG5jb25zdCBtdWx0aXBhcnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL211bHRpcGFydFBvbGljeS5qc1wiKTtcbmNvbnN0IGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5LmpzXCIpO1xuY29uc3QgZGVmYXVsdFJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBmb3JtRGF0YVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZm9ybURhdGFQb2xpY3kuanNcIik7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgcHJveHlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Byb3h5UG9saWN5LmpzXCIpO1xuY29uc3Qgc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kuanNcIik7XG5jb25zdCB0bHNQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Rsc1BvbGljeS5qc1wiKTtcbmNvbnN0IHRyYWNpbmdQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanNcIik7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBwaXBlbGluZSB3aXRoIGEgZGVmYXVsdCBzZXQgb2YgY3VzdG9taXphYmxlIHBvbGljaWVzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSBhIGN1c3RvbSBwaXBlbGluZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHBpcGVsaW5lID0gKDAsIHBpcGVsaW5lX2pzXzEuY3JlYXRlRW1wdHlQaXBlbGluZSkoKTtcbiAgICBpZiAoY29yZV91dGlsXzEuaXNOb2RlTGlrZSkge1xuICAgICAgICBpZiAob3B0aW9ucy50bHNPcHRpb25zKSB7XG4gICAgICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHRsc1BvbGljeV9qc18xLnRsc1BvbGljeSkob3B0aW9ucy50bHNPcHRpb25zKSk7XG4gICAgICAgIH1cbiAgICAgICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBwcm94eVBvbGljeV9qc18xLnByb3h5UG9saWN5KShvcHRpb25zLnByb3h5T3B0aW9ucykpO1xuICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeSkoKSk7XG4gICAgfVxuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZm9ybURhdGFQb2xpY3lfanNfMS5mb3JtRGF0YVBvbGljeSkoKSwgeyBiZWZvcmVQb2xpY2llczogW211bHRpcGFydFBvbGljeV9qc18xLm11bHRpcGFydFBvbGljeU5hbWVdIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgdXNlckFnZW50UG9saWN5X2pzXzEudXNlckFnZW50UG9saWN5KShvcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMpKTtcbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHNldENsaWVudFJlcXVlc3RJZFBvbGljeV9qc18xLnNldENsaWVudFJlcXVlc3RJZFBvbGljeSkoKF9hID0gb3B0aW9ucy50ZWxlbWV0cnlPcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xpZW50UmVxdWVzdElkSGVhZGVyTmFtZSkpO1xuICAgIC8vIFRoZSBtdWx0aXBhcnQgcG9saWN5IGlzIGFkZGVkIGFmdGVyIHBvbGljaWVzIHdpdGggbm8gcGhhc2UsIHNvIHRoYXRcbiAgICAvLyBwb2xpY2llcyBjYW4gYmUgYWRkZWQgYmV0d2VlbiBpdCBhbmQgZm9ybURhdGFQb2xpY3kgdG8gbW9kaWZ5XG4gICAgLy8gcHJvcGVydGllcyAoZS5nLiwgbWFraW5nIHRoZSBib3VuZGFyeSBjb25zdGFudCBpbiByZWNvcmRlZCB0ZXN0cykuXG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBtdWx0aXBhcnRQb2xpY3lfanNfMS5tdWx0aXBhcnRQb2xpY3kpKCksIHsgYWZ0ZXJQaGFzZTogXCJEZXNlcmlhbGl6ZVwiIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGVmYXVsdFJldHJ5UG9saWN5X2pzXzEuZGVmYXVsdFJldHJ5UG9saWN5KShvcHRpb25zLnJldHJ5T3B0aW9ucyksIHsgcGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHRyYWNpbmdQb2xpY3lfanNfMS50cmFjaW5nUG9saWN5KShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMudXNlckFnZW50T3B0aW9ucyksIG9wdGlvbnMubG9nZ2luZ09wdGlvbnMpKSwge1xuICAgICAgICBhZnRlclBoYXNlOiBcIlJldHJ5XCIsXG4gICAgfSk7XG4gICAgaWYgKGNvcmVfdXRpbF8xLmlzTm9kZUxpa2UpIHtcbiAgICAgICAgLy8gQm90aCBYSFIgYW5kIEZldGNoIGV4cGVjdCB0byBoYW5kbGUgcmVkaXJlY3RzIGF1dG9tYXRpY2FsbHksXG4gICAgICAgIC8vIHNvIG9ubHkgaW5jbHVkZSB0aGlzIHBvbGljeSB3aGVuIHdlJ3JlIGluIE5vZGUuXG4gICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgcmVkaXJlY3RQb2xpY3lfanNfMS5yZWRpcmVjdFBvbGljeSkob3B0aW9ucy5yZWRpcmVjdE9wdGlvbnMpLCB7IGFmdGVyUGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICB9XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBsb2dQb2xpY3lfanNfMS5sb2dQb2xpY3kpKG9wdGlvbnMubG9nZ2luZ09wdGlvbnMpLCB7IGFmdGVyUGhhc2U6IFwiU2lnblwiIH0pO1xuICAgIHJldHVybiBwaXBlbGluZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRCb2R5TGVuZ3RoID0gZ2V0Qm9keUxlbmd0aDtcbmV4cG9ydHMuY3JlYXRlTm9kZUh0dHBDbGllbnQgPSBjcmVhdGVOb2RlSHR0cENsaWVudDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBodHRwID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6aHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOmh0dHBzXCIpKTtcbmNvbnN0IHpsaWIgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTp6bGliXCIpKTtcbmNvbnN0IG5vZGVfc3RyZWFtXzEgPSByZXF1aXJlKFwibm9kZTpzdHJlYW1cIik7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG5jb25zdCBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4vaHR0cEhlYWRlcnMuanNcIik7XG5jb25zdCByZXN0RXJyb3JfanNfMSA9IHJlcXVpcmUoXCIuL3Jlc3RFcnJvci5qc1wiKTtcbmNvbnN0IGxvZ19qc18xID0gcmVxdWlyZShcIi4vbG9nLmpzXCIpO1xuY29uc3QgREVGQVVMVF9UTFNfU0VUVElOR1MgPSB7fTtcbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0oYm9keSkge1xuICAgIHJldHVybiBib2R5ICYmIHR5cGVvZiBib2R5LnBpcGUgPT09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIGlzU3RyZWFtQ29tcGxldGUoc3RyZWFtKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIGhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgICAgICBzdHJlYW0ub24oXCJjbG9zZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsIGhhbmRsZXIpO1xuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCBoYW5kbGVyKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIoYm9keSkge1xuICAgIHJldHVybiBib2R5ICYmIHR5cGVvZiBib2R5LmJ5dGVMZW5ndGggPT09IFwibnVtYmVyXCI7XG59XG5jbGFzcyBSZXBvcnRUcmFuc2Zvcm0gZXh0ZW5kcyBub2RlX3N0cmVhbV8xLlRyYW5zZm9ybSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZVxuICAgIF90cmFuc2Zvcm0oY2h1bmssIF9lbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5wdXNoKGNodW5rKTtcbiAgICAgICAgdGhpcy5sb2FkZWRCeXRlcyArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQ2FsbGJhY2soeyBsb2FkZWRCeXRlczogdGhpcy5sb2FkZWRCeXRlcyB9KTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHByb2dyZXNzQ2FsbGJhY2spIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb2FkZWRCeXRlcyA9IDA7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NDYWxsYmFjayA9IHByb2dyZXNzQ2FsbGJhY2s7XG4gICAgfVxufVxuLyoqXG4gKiBBIEh0dHBDbGllbnQgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIE5vZGUncyBcImh0dHBzXCIgbW9kdWxlIHRvIHNlbmQgSFRUUFMgcmVxdWVzdHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgTm9kZUh0dHBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNhY2hlZEh0dHBzQWdlbnRzID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZXMgYSByZXF1ZXN0IG92ZXIgYW4gdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC0gVGhlIHJlcXVlc3QgdG8gYmUgbWFkZS5cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGxldCBhYm9ydExpc3RlbmVyO1xuICAgICAgICBpZiAocmVxdWVzdC5hYm9ydFNpZ25hbCkge1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBhYm9ydF9jb250cm9sbGVyXzEuQWJvcnRFcnJvcihcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWJvcnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBcImFib3J0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcXVlc3QuYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1ZXN0LnRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgIH0sIHJlcXVlc3QudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWNjZXB0RW5jb2RpbmcgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQWNjZXB0LUVuY29kaW5nXCIpO1xuICAgICAgICBjb25zdCBzaG91bGREZWNvbXByZXNzID0gKGFjY2VwdEVuY29kaW5nID09PSBudWxsIHx8IGFjY2VwdEVuY29kaW5nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhY2NlcHRFbmNvZGluZy5pbmNsdWRlcyhcImd6aXBcIikpIHx8IChhY2NlcHRFbmNvZGluZyA9PT0gbnVsbCB8fCBhY2NlcHRFbmNvZGluZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWNjZXB0RW5jb2RpbmcuaW5jbHVkZXMoXCJkZWZsYXRlXCIpKTtcbiAgICAgICAgbGV0IGJvZHkgPSB0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcImZ1bmN0aW9uXCIgPyByZXF1ZXN0LmJvZHkoKSA6IHJlcXVlc3QuYm9keTtcbiAgICAgICAgaWYgKGJvZHkgJiYgIXJlcXVlc3QuaGVhZGVycy5oYXMoXCJDb250ZW50LUxlbmd0aFwiKSkge1xuICAgICAgICAgICAgY29uc3QgYm9keUxlbmd0aCA9IGdldEJvZHlMZW5ndGgoYm9keSk7XG4gICAgICAgICAgICBpZiAoYm9keUxlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LUxlbmd0aFwiLCBib2R5TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2VTdHJlYW07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYm9keSAmJiByZXF1ZXN0Lm9uVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvblVwbG9hZFByb2dyZXNzID0gcmVxdWVzdC5vblVwbG9hZFByb2dyZXNzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZFJlcG9ydFN0cmVhbSA9IG5ldyBSZXBvcnRUcmFuc2Zvcm0ob25VcGxvYWRQcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgdXBsb2FkUmVwb3J0U3RyZWFtLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLmVycm9yKFwiRXJyb3IgaW4gdXBsb2FkIHByb2dyZXNzXCIsIGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkucGlwZSh1cGxvYWRSZXBvcnRTdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkUmVwb3J0U3RyZWFtLmVuZChib2R5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYm9keSA9IHVwbG9hZFJlcG9ydFN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgYWJvcnRDb250cm9sbGVyLCBib2R5KTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBnZXRSZXNwb25zZUhlYWRlcnMocmVzKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IChfYSA9IHJlcy5zdGF0dXNDb2RlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBSZXNwb25zZXMgdG8gSEVBRCBtdXN0IG5vdCBoYXZlIGEgYm9keS5cbiAgICAgICAgICAgIC8vIElmIHRoZXkgZG8gcmV0dXJuIGEgYm9keSwgdGhhdCBib2R5IG11c3QgYmUgaWdub3JlZC5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIHJlc3VtZSgpIGFuZCBub3QgZGVzdHJveSgpIHRvIGF2b2lkIGNsb3NpbmcgdGhlIHNvY2tldFxuICAgICAgICAgICAgICAgIC8vIGFuZCBsb3Npbmcga2VlcCBhbGl2ZVxuICAgICAgICAgICAgICAgIHJlcy5yZXN1bWUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZVN0cmVhbSA9IHNob3VsZERlY29tcHJlc3MgPyBnZXREZWNvZGVkUmVzcG9uc2VTdHJlYW0ocmVzLCBoZWFkZXJzKSA6IHJlcztcbiAgICAgICAgICAgIGNvbnN0IG9uRG93bmxvYWRQcm9ncmVzcyA9IHJlcXVlc3Qub25Eb3dubG9hZFByb2dyZXNzO1xuICAgICAgICAgICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkUmVwb3J0U3RyZWFtID0gbmV3IFJlcG9ydFRyYW5zZm9ybShvbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgIGRvd25sb2FkUmVwb3J0U3RyZWFtLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLmVycm9yKFwiRXJyb3IgaW4gZG93bmxvYWQgcHJvZ3Jlc3NcIiwgZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW0ucGlwZShkb3dubG9hZFJlcG9ydFN0cmVhbSk7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW0gPSBkb3dubG9hZFJlcG9ydFN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIFZhbHVlIG9mIFBPU0lUSVZFX0lORklOSVRZIGluIHN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMgaXMgY29uc2lkZXJlZCBhcyBhbnkgc3RhdHVzIGNvZGVcbiAgICAgICAgICAgICgoX2IgPSByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5oYXMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSkgfHxcbiAgICAgICAgICAgICAgICAoKF9jID0gcmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaGFzKHJlc3BvbnNlLnN0YXR1cykpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5ID0gcmVzcG9uc2VTdHJlYW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5ib2R5QXNUZXh0ID0gYXdhaXQgc3RyZWFtVG9UZXh0KHJlc3BvbnNlU3RyZWFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIGNsZWFuIHVwIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5hYm9ydFNpZ25hbCAmJiBhYm9ydExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IHVwbG9hZFN0cmVhbURvbmUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbShib2R5KSkge1xuICAgICAgICAgICAgICAgICAgICB1cGxvYWRTdHJlYW1Eb25lID0gaXNTdHJlYW1Db21wbGV0ZShib2R5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGRvd25sb2FkU3RyZWFtRG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtKHJlc3BvbnNlU3RyZWFtKSkge1xuICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFN0cmVhbURvbmUgPSBpc1N0cmVhbUNvbXBsZXRlKHJlc3BvbnNlU3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoW3VwbG9hZFN0cmVhbURvbmUsIGRvd25sb2FkU3RyZWFtRG9uZV0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9hbHdheXMtcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhYm9ydExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSByZXF1ZXN0LmFib3J0U2lnbmFsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKFwiRXJyb3Igd2hlbiBjbGVhbmluZyB1cCBhYm9ydExpc3RlbmVyIG9uIGh0dHBSZXF1ZXN0XCIsIGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG1ha2VSZXF1ZXN0KHJlcXVlc3QsIGFib3J0Q29udHJvbGxlciwgYm9keSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBpc0luc2VjdXJlID0gdXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiO1xuICAgICAgICBpZiAoaXNJbnNlY3VyZSAmJiAhcmVxdWVzdC5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29ubmVjdCB0byAke3JlcXVlc3QudXJsfSB3aGlsZSBhbGxvd0luc2VjdXJlQ29ubmVjdGlvbiBpcyBmYWxzZS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZ2VudCA9IChfYSA9IHJlcXVlc3QuYWdlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMuZ2V0T3JDcmVhdGVBZ2VudChyZXF1ZXN0LCBpc0luc2VjdXJlKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBhdGg6IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCxcbiAgICAgICAgICAgIHBvcnQ6IHVybC5wb3J0LFxuICAgICAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycy50b0pTT04oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBpc0luc2VjdXJlID8gaHR0cC5yZXF1ZXN0KG9wdGlvbnMsIHJlc29sdmUpIDogaHR0cHMucmVxdWVzdChvcHRpb25zLCByZXNvbHZlKTtcbiAgICAgICAgICAgIHJlcS5vbmNlKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcihlcnIubWVzc2FnZSwgeyBjb2RlOiAoX2EgPSBlcnIuY29kZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVzdEVycm9yX2pzXzEuUmVzdEVycm9yLlJFUVVFU1RfU0VORF9FUlJPUiwgcmVxdWVzdCB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4gICAgICAgICAgICAgICAgcmVxLmRlc3Ryb3koYWJvcnRFcnJvcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYm9keSAmJiBpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgYm9keS5waXBlKHJlcSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChib2R5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXEuZW5kKGJvZHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5lbmQoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIpIDogQnVmZmVyLmZyb20oYm9keSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLmVycm9yKFwiVW5yZWNvZ25pemVkIGJvZHkgdHlwZVwiLCBib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IoXCJVbnJlY29nbml6ZWQgYm9keSB0eXBlXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJlYW1zIGRvbid0IGxpa2UgXCJ1bmRlZmluZWRcIiBiZWluZyBwYXNzZWQgYXMgZGF0YVxuICAgICAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldE9yQ3JlYXRlQWdlbnQocmVxdWVzdCwgaXNJbnNlY3VyZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGRpc2FibGVLZWVwQWxpdmUgPSByZXF1ZXN0LmRpc2FibGVLZWVwQWxpdmU7XG4gICAgICAgIC8vIEhhbmRsZSBJbnNlY3VyZSByZXF1ZXN0cyBmaXJzdFxuICAgICAgICBpZiAoaXNJbnNlY3VyZSkge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVLZWVwQWxpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyBrZWVwQWxpdmU6ZmFsc2UgaXMgdGhlIGRlZmF1bHQgc28gd2UgZG9uJ3QgbmVlZCBhIGN1c3RvbSBBZ2VudFxuICAgICAgICAgICAgICAgIHJldHVybiBodHRwLmdsb2JhbEFnZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlZEh0dHBBZ2VudCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNhY2hlZCBhZ2VudCBjcmVhdGUgYSBuZXcgb25lIGFuZCBjYWNoZSBpdC5cbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZEh0dHBBZ2VudCA9IG5ldyBodHRwLkFnZW50KHsga2VlcEFsaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSHR0cEFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVLZWVwQWxpdmUgJiYgIXJlcXVlc3QudGxzU2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZXJlIGFyZSBubyB0bHNTZXR0aW5ncyBhbmQga2VlcEFsaXZlIGlzIGZhbHNlXG4gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCBhIGN1c3RvbSBhZ2VudFxuICAgICAgICAgICAgICAgIHJldHVybiBodHRwcy5nbG9iYWxBZ2VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIHVzZSB0aGUgdGxzU2V0dGluZ3MgdG8gaW5kZXggY2FjaGVkIGNsaWVudHNcbiAgICAgICAgICAgIGNvbnN0IHRsc1NldHRpbmdzID0gKF9hID0gcmVxdWVzdC50bHNTZXR0aW5ncykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9UTFNfU0VUVElOR1M7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGNhY2hlZCBhZ2VudCBvciBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlXG4gICAgICAgICAgICAvLyBwcm92aWRlZCB2YWx1ZXMgZm9yIGtlZXBBbGl2ZSBhbmQgdGxzU2V0dGluZ3NcbiAgICAgICAgICAgIGxldCBhZ2VudCA9IHRoaXMuY2FjaGVkSHR0cHNBZ2VudHMuZ2V0KHRsc1NldHRpbmdzKTtcbiAgICAgICAgICAgIGlmIChhZ2VudCAmJiBhZ2VudC5vcHRpb25zLmtlZXBBbGl2ZSA9PT0gIWRpc2FibGVLZWVwQWxpdmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuaW5mbyhcIk5vIGNhY2hlZCBUTFMgQWdlbnQgZXhpc3QsIGNyZWF0aW5nIGEgbmV3IEFnZW50XCIpO1xuICAgICAgICAgICAgYWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoT2JqZWN0LmFzc2lnbih7IFxuICAgICAgICAgICAgICAgIC8vIGtlZXBBbGl2ZSBpcyB0cnVlIGlmIGRpc2FibGVLZWVwQWxpdmUgaXMgZmFsc2UuXG4gICAgICAgICAgICAgICAga2VlcEFsaXZlOiAhZGlzYWJsZUtlZXBBbGl2ZSB9LCB0bHNTZXR0aW5ncykpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRIdHRwc0FnZW50cy5zZXQodGxzU2V0dGluZ3MsIGFnZW50KTtcbiAgICAgICAgICAgIHJldHVybiBhZ2VudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVycyhyZXMpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIGh0dHBIZWFkZXJzX2pzXzEuY3JlYXRlSHR0cEhlYWRlcnMpKCk7XG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgT2JqZWN0LmtleXMocmVzLmhlYWRlcnMpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVzLmhlYWRlcnNbaGVhZGVyXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KGhlYWRlciwgdmFsdWVbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBoZWFkZXJzLnNldChoZWFkZXIsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGVhZGVycztcbn1cbmZ1bmN0aW9uIGdldERlY29kZWRSZXNwb25zZVN0cmVhbShzdHJlYW0sIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50RW5jb2RpbmcgPSBoZWFkZXJzLmdldChcIkNvbnRlbnQtRW5jb2RpbmdcIik7XG4gICAgaWYgKGNvbnRlbnRFbmNvZGluZyA9PT0gXCJnemlwXCIpIHtcbiAgICAgICAgY29uc3QgdW56aXAgPSB6bGliLmNyZWF0ZUd1bnppcCgpO1xuICAgICAgICBzdHJlYW0ucGlwZSh1bnppcCk7XG4gICAgICAgIHJldHVybiB1bnppcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29udGVudEVuY29kaW5nID09PSBcImRlZmxhdGVcIikge1xuICAgICAgICBjb25zdCBpbmZsYXRlID0gemxpYi5jcmVhdGVJbmZsYXRlKCk7XG4gICAgICAgIHN0cmVhbS5waXBlKGluZmxhdGUpO1xuICAgICAgICByZXR1cm4gaW5mbGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbTtcbn1cbmZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW0pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBidWZmZXIgPSBbXTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2goQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoYnVmZmVyKS50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlICYmIChlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUubmFtZSkgPT09IFwiQWJvcnRFcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IoYEVycm9yIHJlYWRpbmcgcmVzcG9uc2UgYXMgdGV4dDogJHtlLm1lc3NhZ2V9YCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IuUEFSU0VfRVJST1IsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGdldEJvZHlMZW5ndGgoYm9keSkge1xuICAgIGlmICghYm9keSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBib2R5Lmxlbmd0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSZWFkYWJsZVN0cmVhbShib2R5KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihib2R5KSkge1xuICAgICAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYm9keSkubGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgSHR0cENsaWVudCBpbnN0YW5jZSBmb3IgdGhlIE5vZGVKUyBlbnZpcm9ubWVudC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBjcmVhdGVOb2RlSHR0cENsaWVudCgpIHtcbiAgICByZXR1cm4gbmV3IE5vZGVIdHRwQ2xpZW50KCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub2RlSHR0cENsaWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50ID0gY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQ7XG5jb25zdCBub2RlSHR0cENsaWVudF9qc18xID0gcmVxdWlyZShcIi4vbm9kZUh0dHBDbGllbnQuanNcIik7XG4vKipcbiAqIENyZWF0ZSB0aGUgY29ycmVjdCBIdHRwQ2xpZW50IGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQoKSB7XG4gICAgcmV0dXJuICgwLCBub2RlSHR0cENsaWVudF9qc18xLmNyZWF0ZU5vZGVIdHRwQ2xpZW50KSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVmYXVsdEh0dHBDbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVQaXBlbGluZVJlcXVlc3QgPSBjcmVhdGVQaXBlbGluZVJlcXVlc3Q7XG5jb25zdCBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4vaHR0cEhlYWRlcnMuanNcIik7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0SW1wbCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmw7XG4gICAgICAgIHRoaXMuYm9keSA9IG9wdGlvbnMuYm9keTtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gKF9hID0gb3B0aW9ucy5oZWFkZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoMCwgaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVycykoKTtcbiAgICAgICAgdGhpcy5tZXRob2QgPSAoX2IgPSBvcHRpb25zLm1ldGhvZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJHRVRcIjtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gKF9jID0gb3B0aW9ucy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwO1xuICAgICAgICB0aGlzLm11bHRpcGFydEJvZHkgPSBvcHRpb25zLm11bHRpcGFydEJvZHk7XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgICB0aGlzLmRpc2FibGVLZWVwQWxpdmUgPSAoX2QgPSBvcHRpb25zLmRpc2FibGVLZWVwQWxpdmUpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGZhbHNlO1xuICAgICAgICB0aGlzLnByb3h5U2V0dGluZ3MgPSBvcHRpb25zLnByb3h5U2V0dGluZ3M7XG4gICAgICAgIHRoaXMuc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyA9IG9wdGlvbnMuc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcztcbiAgICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSAoX2UgPSBvcHRpb25zLndpdGhDcmVkZW50aWFscykgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogZmFsc2U7XG4gICAgICAgIHRoaXMuYWJvcnRTaWduYWwgPSBvcHRpb25zLmFib3J0U2lnbmFsO1xuICAgICAgICB0aGlzLnRyYWNpbmdPcHRpb25zID0gb3B0aW9ucy50cmFjaW5nT3B0aW9ucztcbiAgICAgICAgdGhpcy5vblVwbG9hZFByb2dyZXNzID0gb3B0aW9ucy5vblVwbG9hZFByb2dyZXNzO1xuICAgICAgICB0aGlzLm9uRG93bmxvYWRQcm9ncmVzcyA9IG9wdGlvbnMub25Eb3dubG9hZFByb2dyZXNzO1xuICAgICAgICB0aGlzLnJlcXVlc3RJZCA9IG9wdGlvbnMucmVxdWVzdElkIHx8ICgwLCBjb3JlX3V0aWxfMS5yYW5kb21VVUlEKSgpO1xuICAgICAgICB0aGlzLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uID0gKF9mID0gb3B0aW9ucy5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbikgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogZmFsc2U7XG4gICAgICAgIHRoaXMuZW5hYmxlQnJvd3NlclN0cmVhbXMgPSAoX2cgPSBvcHRpb25zLmVuYWJsZUJyb3dzZXJTdHJlYW1zKSAhPT0gbnVsbCAmJiBfZyAhPT0gdm9pZCAwID8gX2cgOiBmYWxzZTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcGlwZWxpbmUgcmVxdWVzdCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogVGhpcyBtZXRob2QgaXMgdG8gYWxsb3cgZm9yIHRoZSBlYXN5IHNldHRpbmcgb2YgZGVmYXVsdCB2YWx1ZXMgYW5kIG5vdCByZXF1aXJlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gY3JlYXRlIHRoZSByZXF1ZXN0IHdpdGguXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBpcGVsaW5lUmVxdWVzdChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBQaXBlbGluZVJlcXVlc3RJbXBsKG9wdGlvbnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZWxpbmVSZXF1ZXN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmV4cG9uZW50aWFsUmV0cnlQb2xpY3kgPSBleHBvbmVudGlhbFJldHJ5UG9saWN5O1xuY29uc3QgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEgPSByZXF1aXJlKFwiLi4vcmV0cnlTdHJhdGVnaWVzL2V4cG9uZW50aWFsUmV0cnlTdHJhdGVneS5qc1wiKTtcbmNvbnN0IHJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9yZXRyeVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBleHBvbmVudGlhbFJldHJ5UG9saWN5LlxuICovXG5leHBvcnRzLmV4cG9uZW50aWFsUmV0cnlQb2xpY3lOYW1lID0gXCJleHBvbmVudGlhbFJldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgYXR0ZW1wdHMgdG8gcmV0cnkgcmVxdWVzdHMgd2hpbGUgaW50cm9kdWNpbmcgYW4gZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nIGRlbGF5LlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRoYXQgY29uZmlndXJlIHJldHJ5IGxvZ2ljLlxuICovXG5mdW5jdGlvbiBleHBvbmVudGlhbFJldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKDAsIHJldHJ5UG9saWN5X2pzXzEucmV0cnlQb2xpY3kpKFtcbiAgICAgICAgKDAsIGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xLmV4cG9uZW50aWFsUmV0cnlTdHJhdGVneSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBpZ25vcmVTeXN0ZW1FcnJvcnM6IHRydWUgfSkpLFxuICAgIF0sIHtcbiAgICAgICAgbWF4UmV0cmllczogKF9hID0gb3B0aW9ucy5tYXhSZXRyaWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cG9uZW50aWFsUmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuc3lzdGVtRXJyb3JSZXRyeVBvbGljeSA9IHN5c3RlbUVycm9yUmV0cnlQb2xpY3k7XG5jb25zdCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgcmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5UG9saWN5LmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSB7QGxpbmsgc3lzdGVtRXJyb3JSZXRyeVBvbGljeX1cbiAqL1xuZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZSA9IFwic3lzdGVtRXJyb3JSZXRyeVBvbGljeVwiO1xuLyoqXG4gKiBBIHJldHJ5IHBvbGljeSB0aGF0IHNwZWNpZmljYWxseSBzZWVrcyB0byBoYW5kbGUgZXJyb3JzIGluIHRoZVxuICogdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gRE5TIGxvb2t1cCBmYWlsdXJlcykgcmF0aGVyIHRoYW5cbiAqIHJldHJ5YWJsZSBlcnJvciBjb2RlcyBmcm9tIHRoZSBzZXJ2ZXIgaXRzZWxmLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRoYXQgY3VzdG9taXplIHRoZSBwb2xpY3kuXG4gKi9cbmZ1bmN0aW9uIHN5c3RlbUVycm9yUmV0cnlQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuc3lzdGVtRXJyb3JSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIHNlbmRSZXF1ZXN0OiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoW1xuICAgICAgICAgICAgKDAsIGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xLmV4cG9uZW50aWFsUmV0cnlTdHJhdGVneSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBpZ25vcmVIdHRwU3RhdHVzQ29kZXM6IHRydWUgfSkpLFxuICAgICAgICBdLCB7XG4gICAgICAgICAgICBtYXhSZXRyaWVzOiAoX2EgPSBvcHRpb25zLm1heFJldHJpZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbnN0YW50c19qc18xLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5ULFxuICAgICAgICB9KS5zZW5kUmVxdWVzdCxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3lzdGVtRXJyb3JSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeSA9IHRocm90dGxpbmdSZXRyeVBvbGljeTtcbmNvbnN0IHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEgPSByZXF1aXJlKFwiLi4vcmV0cnlTdHJhdGVnaWVzL3Rocm90dGxpbmdSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgcmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5UG9saWN5LmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSB7QGxpbmsgdGhyb3R0bGluZ1JldHJ5UG9saWN5fVxuICovXG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUgPSBcInRocm90dGxpbmdSZXRyeVBvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0aGF0IHJldHJpZXMgd2hlbiB0aGUgc2VydmVyIHNlbmRzIGEgNDI5IHJlc3BvbnNlIHdpdGggYSBSZXRyeS1BZnRlciBoZWFkZXIuXG4gKlxuICogVG8gbGVhcm4gbW9yZSwgcGxlYXNlIHJlZmVyIHRvXG4gKiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9henVyZS1yZXNvdXJjZS1tYW5hZ2VyL3Jlc291cmNlLW1hbmFnZXItcmVxdWVzdC1saW1pdHMsXG4gKiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9henVyZS1zdWJzY3JpcHRpb24tc2VydmljZS1saW1pdHMgYW5kXG4gKiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmVzL3Ryb3VibGVzaG9vdGluZy90cm91Ymxlc2hvb3RpbmctdGhyb3R0bGluZy1lcnJvcnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCBjb25maWd1cmUgcmV0cnkgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIHRocm90dGxpbmdSZXRyeVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lLFxuICAgICAgICBzZW5kUmVxdWVzdDogKDAsIHJldHJ5UG9saWN5X2pzXzEucmV0cnlQb2xpY3kpKFsoMCwgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMS50aHJvdHRsaW5nUmV0cnlTdHJhdGVneSkoKV0sIHtcbiAgICAgICAgICAgIG1heFJldHJpZXM6IChfYSA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQsXG4gICAgICAgIH0pLnNlbmRSZXF1ZXN0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvdHRsaW5nUmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ERUZBVUxUX0NZQ0xFUl9PUFRJT05TID0gdm9pZCAwO1xuZXhwb3J0cy5jcmVhdGVUb2tlbkN5Y2xlciA9IGNyZWF0ZVRva2VuQ3ljbGVyO1xuY29uc3QgaGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vaGVscGVycy5qc1wiKTtcbi8vIERlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGN5Y2xlciBpZiBub25lIGFyZSBwcm92aWRlZFxuZXhwb3J0cy5ERUZBVUxUX0NZQ0xFUl9PUFRJT05TID0ge1xuICAgIGZvcmNlZFJlZnJlc2hXaW5kb3dJbk1zOiAxMDAwLCAvLyBGb3JjZSB3YWl0aW5nIGZvciBhIHJlZnJlc2ggMXMgYmVmb3JlIHRoZSB0b2tlbiBleHBpcmVzXG4gICAgcmV0cnlJbnRlcnZhbEluTXM6IDMwMDAsIC8vIEFsbG93IHJlZnJlc2ggYXR0ZW1wdHMgZXZlcnkgM3NcbiAgICByZWZyZXNoV2luZG93SW5NczogMTAwMCAqIDYwICogMiwgLy8gU3RhcnQgcmVmcmVzaGluZyAybSBiZWZvcmUgZXhwaXJ5XG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhbiBhbiB1bnJlbGlhYmxlIGFjY2VzcyB0b2tlbiBnZXR0ZXIgKHdoaWNoIG1heSByZXNvbHZlIHdpdGggbnVsbClcbiAqIGludG8gYW4gQWNjZXNzVG9rZW5HZXR0ZXIgYnkgcmV0cnlpbmcgdGhlIHVucmVsaWFibGUgZ2V0dGVyIGluIGEgcmVndWxhclxuICogaW50ZXJ2YWwuXG4gKlxuICogQHBhcmFtIGdldEFjY2Vzc1Rva2VuIC0gQSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGEgcHJvbWlzZSBvZiBhbiBhY2Nlc3MgdG9rZW4gdGhhdCBtYXkgZmFpbCBieSByZXR1cm5pbmcgbnVsbC5cbiAqIEBwYXJhbSByZXRyeUludGVydmFsSW5NcyAtIFRoZSB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRvIHdhaXQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy5cbiAqIEBwYXJhbSByZWZyZXNoVGltZW91dCAtIFRoZSB0aW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIHJlZnJlc2ggYXR0ZW1wdCB3aWxsIGZhaWwsIHRocm93aW5nIGFuIGV4Y2VwdGlvbi5cbiAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQsIGlmIGl0IHJlc29sdmVzLCB3aWxsIHJlc29sdmUgd2l0aCBhbiBhY2Nlc3MgdG9rZW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJlZ2luUmVmcmVzaChnZXRBY2Nlc3NUb2tlbiwgcmV0cnlJbnRlcnZhbEluTXMsIHJlZnJlc2hUaW1lb3V0KSB7XG4gICAgLy8gVGhpcyB3cmFwcGVyIGhhbmRsZXMgZXhjZXB0aW9ucyBncmFjZWZ1bGx5IGFzIGxvbmcgYXMgd2UgaGF2ZW4ndCBleGNlZWRlZFxuICAgIC8vIHRoZSB0aW1lb3V0LlxuICAgIGFzeW5jIGZ1bmN0aW9uIHRyeUdldEFjY2Vzc1Rva2VuKCkge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSA8IHJlZnJlc2hUaW1lb3V0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBmaW5hbFRva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgIC8vIFRpbWVvdXQgaXMgdXAsIHNvIHRocm93IGlmIGl0J3Mgc3RpbGwgbnVsbFxuICAgICAgICAgICAgaWYgKGZpbmFsVG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVmcmVzaCBhY2Nlc3MgdG9rZW4uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsVG9rZW47XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHRva2VuID0gYXdhaXQgdHJ5R2V0QWNjZXNzVG9rZW4oKTtcbiAgICB3aGlsZSAodG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgYXdhaXQgKDAsIGhlbHBlcnNfanNfMS5kZWxheSkocmV0cnlJbnRlcnZhbEluTXMpO1xuICAgICAgICB0b2tlbiA9IGF3YWl0IHRyeUdldEFjY2Vzc1Rva2VuKCk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHRva2VuIGN5Y2xlciBmcm9tIGEgY3JlZGVudGlhbCwgc2NvcGVzLCBhbmQgb3B0aW9uYWwgc2V0dGluZ3MuXG4gKlxuICogQSB0b2tlbiBjeWNsZXIgcmVwcmVzZW50cyBhIHdheSB0byByZWxpYWJseSByZXRyaWV2ZSBhIHZhbGlkIGFjY2VzcyB0b2tlblxuICogZnJvbSBhIFRva2VuQ3JlZGVudGlhbC4gSXQgd2lsbCBoYW5kbGUgaW5pdGlhbGl6aW5nIHRoZSB0b2tlbiwgcmVmcmVzaGluZyBpdFxuICogd2hlbiBpdCBuZWFycyBleHBpcmF0aW9uLCBhbmQgc3luY2hyb25pemVzIHJlZnJlc2ggYXR0ZW1wdHMgdG8gYXZvaWRcbiAqIGNvbmN1cnJlbmN5IGhhemFyZHMuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSB0aGUgdW5kZXJseWluZyBUb2tlbkNyZWRlbnRpYWwgdGhhdCBwcm92aWRlcyB0aGUgYWNjZXNzXG4gKiB0b2tlblxuICogQHBhcmFtIHRva2VuQ3ljbGVyT3B0aW9ucyAtIG9wdGlvbmFsbHkgb3ZlcnJpZGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGN5Y2xlclxuICpcbiAqIEByZXR1cm5zIC0gYSBmdW5jdGlvbiB0aGF0IHJlbGlhYmx5IHByb2R1Y2VzIGEgdmFsaWQgYWNjZXNzIHRva2VuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRva2VuQ3ljbGVyKGNyZWRlbnRpYWwsIHRva2VuQ3ljbGVyT3B0aW9ucykge1xuICAgIGxldCByZWZyZXNoV29ya2VyID0gbnVsbDtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuICAgIGxldCB0ZW5hbnRJZDtcbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBleHBvcnRzLkRFRkFVTFRfQ1lDTEVSX09QVElPTlMpLCB0b2tlbkN5Y2xlck9wdGlvbnMpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgbGl0dGxlIGhvbGRlciBkZWZpbmVzIHNldmVyYWwgcHJlZGljYXRlcyB0aGF0IHdlIHVzZSB0byBjb25zdHJ1Y3RcbiAgICAgKiB0aGUgcnVsZXMgb2YgcmVmcmVzaGluZyB0aGUgdG9rZW4uXG4gICAgICovXG4gICAgY29uc3QgY3ljbGVyID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvZHVjZXMgdHJ1ZSBpZiBhIHJlZnJlc2ggam9iIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldCBpc1JlZnJlc2hpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmcmVzaFdvcmtlciAhPT0gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb2R1Y2VzIHRydWUgaWYgdGhlIGN5Y2xlciBTSE9VTEQgcmVmcmVzaCAod2UgYXJlIHdpdGhpbiB0aGUgcmVmcmVzaFxuICAgICAgICAgKiB3aW5kb3cgYW5kIG5vdCBhbHJlYWR5IHJlZnJlc2hpbmcpXG4gICAgICAgICAqL1xuICAgICAgICBnZXQgc2hvdWxkUmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChjeWNsZXIuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0b2tlbiA9PT0gbnVsbCB8fCB0b2tlbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdG9rZW4ucmVmcmVzaEFmdGVyVGltZXN0YW1wKSAmJiB0b2tlbi5yZWZyZXNoQWZ0ZXJUaW1lc3RhbXAgPCBEYXRlLm5vdygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5leHBpcmVzT25UaW1lc3RhbXApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApIC0gb3B0aW9ucy5yZWZyZXNoV2luZG93SW5NcyA8IERhdGUubm93KCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcm9kdWNlcyB0cnVlIGlmIHRoZSBjeWNsZXIgTVVTVCByZWZyZXNoIChudWxsIG9yIG5lYXJseS1leHBpcmVkXG4gICAgICAgICAqIHRva2VuKS5cbiAgICAgICAgICovXG4gICAgICAgIGdldCBtdXN0UmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHJldHVybiAodG9rZW4gPT09IG51bGwgfHwgdG9rZW4uZXhwaXJlc09uVGltZXN0YW1wIC0gb3B0aW9ucy5mb3JjZWRSZWZyZXNoV2luZG93SW5NcyA8IERhdGUubm93KCkpO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgLyoqXG4gICAgICogU3RhcnRzIGEgcmVmcmVzaCBqb2Igb3IgcmV0dXJucyB0aGUgZXhpc3Rpbmcgam9iIGlmIG9uZSBpcyBhbHJlYWR5XG4gICAgICogcnVubmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWZyZXNoKHNjb3BlcywgZ2V0VG9rZW5PcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCFjeWNsZXIuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgICAvLyBXZSBiaW5kIGBzY29wZXNgIGhlcmUgdG8gYXZvaWQgcGFzc2luZyBpdCBhcm91bmQgYSBsb3RcbiAgICAgICAgICAgIGNvbnN0IHRyeUdldEFjY2Vzc1Rva2VuID0gKCkgPT4gY3JlZGVudGlhbC5nZXRUb2tlbihzY29wZXMsIGdldFRva2VuT3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBwcm9taXNlIGNoYWluaW5nIHRvIGluc2VydCBhbiBhc3NpZ25tZW50IHRvIGB0b2tlbmBcbiAgICAgICAgICAgIC8vIGJlZm9yZSB0aGUgcmVmcmVzaCBjYW4gYmUgY29uc2lkZXJlZCBkb25lLlxuICAgICAgICAgICAgcmVmcmVzaFdvcmtlciA9IGJlZ2luUmVmcmVzaCh0cnlHZXRBY2Nlc3NUb2tlbiwgb3B0aW9ucy5yZXRyeUludGVydmFsSW5NcywgXG4gICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgdG9rZW4sIHRoZW4gd2Ugc2hvdWxkIHRpbWVvdXQgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIChfYSA9IHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5leHBpcmVzT25UaW1lc3RhbXApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IERhdGUubm93KCkpXG4gICAgICAgICAgICAgICAgLnRoZW4oKF90b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHJlZnJlc2hXb3JrZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRva2VuID0gX3Rva2VuO1xuICAgICAgICAgICAgICAgIHRlbmFudElkID0gZ2V0VG9rZW5PcHRpb25zLnRlbmFudElkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChyZWFzb24pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhbHNvIHNob3VsZCByZXNldCB0aGUgcmVmcmVzaGVyIGlmIHdlIGVudGVyIGEgZmFpbGVkIHN0YXRlLiAgQWxsXG4gICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgYXdhaXRlcnMgd2lsbCB0aHJvdywgYnV0IHN1YnNlcXVlbnQgcmVxdWVzdHMgd2lsbCBzdGFydCBhXG4gICAgICAgICAgICAgICAgLy8gbmV3IHJldHJ5IGNoYWluLlxuICAgICAgICAgICAgICAgIHJlZnJlc2hXb3JrZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRva2VuID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmcmVzaFdvcmtlcjtcbiAgICB9XG4gICAgcmV0dXJuIGFzeW5jIChzY29wZXMsIHRva2VuT3B0aW9ucykgPT4ge1xuICAgICAgICAvL1xuICAgICAgICAvLyBTaW1wbGUgcnVsZXM6XG4gICAgICAgIC8vIC0gSWYgd2UgTVVTVCByZWZyZXNoLCB0aGVuIHJldHVybiB0aGUgcmVmcmVzaCB0YXNrLCBibG9ja2luZ1xuICAgICAgICAvLyAgIHRoZSBwaXBlbGluZSB1bnRpbCBhIHRva2VuIGlzIGF2YWlsYWJsZS5cbiAgICAgICAgLy8gLSBJZiB3ZSBTSE9VTEQgcmVmcmVzaCwgdGhlbiBydW4gcmVmcmVzaCBidXQgZG9uJ3QgcmV0dXJuIGl0XG4gICAgICAgIC8vICAgKHdlIGNhbiBzdGlsbCB1c2UgdGhlIGNhY2hlZCB0b2tlbikuXG4gICAgICAgIC8vIC0gUmV0dXJuIHRoZSB0b2tlbiwgc2luY2UgaXQncyBmaW5lIGlmIHdlIGRpZG4ndCByZXR1cm4gaW5cbiAgICAgICAgLy8gICBzdGVwIDEuXG4gICAgICAgIC8vXG4gICAgICAgIGNvbnN0IGhhc0NsYWltQ2hhbGxlbmdlID0gQm9vbGVhbih0b2tlbk9wdGlvbnMuY2xhaW1zKTtcbiAgICAgICAgY29uc3QgdGVuYW50SWRDaGFuZ2VkID0gdGVuYW50SWQgIT09IHRva2VuT3B0aW9ucy50ZW5hbnRJZDtcbiAgICAgICAgaWYgKGhhc0NsYWltQ2hhbGxlbmdlKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSByZWNlaXZlZCBhIGNsYWltLCB3ZSBrbm93IHRoZSBleGlzdGluZyB0b2tlbiBpc24ndCB2YWxpZFxuICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVhciBpdCBzbyB0aGF0IHRoYXQgcmVmcmVzaCB3b3JrZXIgd29uJ3QgdXNlIHRoZSBvbGQgZXhwaXJhdGlvbiB0aW1lIGFzIGEgdGltZW91dFxuICAgICAgICAgICAgdG9rZW4gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSB0ZW5hbnRJZCBwYXNzZWQgaW4gdG9rZW4gb3B0aW9ucyBpcyBkaWZmZXJlbnQgdG8gdGhlIG9uZSB3ZSBoYXZlXG4gICAgICAgIC8vIE9yIGlmIHdlIGFyZSBpbiBjbGFpbSBjaGFsbGVuZ2UgYW5kIHRoZSB0b2tlbiB3YXMgcmVqZWN0ZWQgYW5kIGEgbmV3IGFjY2VzcyB0b2tlbiBuZWVkIHRvIGJlIGlzc3VlZCwgd2UgbmVlZCB0b1xuICAgICAgICAvLyByZWZyZXNoIHRoZSB0b2tlbiB3aXRoIHRoZSBuZXcgdGVuYW50SWQgb3IgdG9rZW4uXG4gICAgICAgIGNvbnN0IG11c3RSZWZyZXNoID0gdGVuYW50SWRDaGFuZ2VkIHx8IGhhc0NsYWltQ2hhbGxlbmdlIHx8IGN5Y2xlci5tdXN0UmVmcmVzaDtcbiAgICAgICAgaWYgKG11c3RSZWZyZXNoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmcmVzaChzY29wZXMsIHRva2VuT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN5Y2xlci5zaG91bGRSZWZyZXNoKSB7XG4gICAgICAgICAgICByZWZyZXNoKHNjb3BlcywgdG9rZW5PcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2VuQ3ljbGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgPSBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5O1xuY29uc3QgdG9rZW5DeWNsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3Rva2VuQ3ljbGVyLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWUgPSBcImJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lcIjtcbi8qKlxuICogRGVmYXVsdCBhdXRob3JpemUgcmVxdWVzdCBoYW5kbGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRBdXRob3JpemVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHNjb3BlcywgZ2V0QWNjZXNzVG9rZW4sIHJlcXVlc3QgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZ2V0VG9rZW5PcHRpb25zID0ge1xuICAgICAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICAgICAgdHJhY2luZ09wdGlvbnM6IHJlcXVlc3QudHJhY2luZ09wdGlvbnMsXG4gICAgfTtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKHNjb3BlcywgZ2V0VG9rZW5PcHRpb25zKTtcbiAgICBpZiAoYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBgQmVhcmVyICR7YWNjZXNzVG9rZW4udG9rZW59YCk7XG4gICAgfVxufVxuLyoqXG4gKiBXZSB3aWxsIHJldHJpZXZlIHRoZSBjaGFsbGVuZ2Ugb25seSBpZiB0aGUgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgd2FzIDQwMSxcbiAqIGFuZCBpZiB0aGUgcmVzcG9uc2UgY29udGFpbmVkIHRoZSBoZWFkZXIgXCJXV1ctQXV0aGVudGljYXRlXCIgd2l0aCBhIG5vbi1lbXB0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2hhbGxlbmdlKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgY2hhbGxlbmdlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJXV1ctQXV0aGVudGljYXRlXCIpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSAmJiBjaGFsbGVuZ2UpIHtcbiAgICAgICAgcmV0dXJuIGNoYWxsZW5nZTtcbiAgICB9XG4gICAgcmV0dXJuO1xufVxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGNhbiByZXF1ZXN0IGEgdG9rZW4gZnJvbSBhIFRva2VuQ3JlZGVudGlhbCBpbXBsZW1lbnRhdGlvbiBhbmRcbiAqIHRoZW4gYXBwbHkgaXQgdG8gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIG9mIGEgcmVxdWVzdCBhcyBhIEJlYXJlciB0b2tlbi5cbiAqL1xuZnVuY3Rpb24gYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeShvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgY3JlZGVudGlhbCwgc2NvcGVzLCBjaGFsbGVuZ2VDYWxsYmFja3MgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbG9nZ2VyID0gb3B0aW9ucy5sb2dnZXIgfHwgbG9nX2pzXzEubG9nZ2VyO1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9IE9iamVjdC5hc3NpZ24oeyBhdXRob3JpemVSZXF1ZXN0OiAoX2EgPSBjaGFsbGVuZ2VDYWxsYmFja3MgPT09IG51bGwgfHwgY2hhbGxlbmdlQ2FsbGJhY2tzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFsbGVuZ2VDYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdEF1dGhvcml6ZVJlcXVlc3QsIGF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZTogY2hhbGxlbmdlQ2FsbGJhY2tzID09PSBudWxsIHx8IGNoYWxsZW5nZUNhbGxiYWNrcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2hhbGxlbmdlQ2FsbGJhY2tzLmF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZSB9LCBjaGFsbGVuZ2VDYWxsYmFja3MpO1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gZW5jYXBzdWxhdGVzIHRoZSBlbnRpcmUgcHJvY2VzcyBvZiByZWxpYWJseSByZXRyaWV2aW5nIHRoZSB0b2tlblxuICAgIC8vIFRoZSBvcHRpb25zIGFyZSBsZWZ0IG91dCBvZiB0aGUgcHVibGljIEFQSSB1bnRpbCB0aGVyZSdzIGRlbWFuZCB0byBjb25maWd1cmUgdGhpcy5cbiAgICAvLyBSZW1lbWJlciB0byBleHRlbmQgYEJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lPcHRpb25zYCB3aXRoIGBUb2tlbkN5Y2xlck9wdGlvbnNgXG4gICAgLy8gaW4gb3JkZXIgdG8gcGFzcyB0aHJvdWdoIHRoZSBgb3B0aW9uc2Agb2JqZWN0LlxuICAgIGNvbnN0IGdldEFjY2Vzc1Rva2VuID0gY3JlZGVudGlhbFxuICAgICAgICA/ICgwLCB0b2tlbkN5Y2xlcl9qc18xLmNyZWF0ZVRva2VuQ3ljbGVyKShjcmVkZW50aWFsIC8qICwgb3B0aW9ucyAqLylcbiAgICAgICAgOiAoKSA9PiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRoZXJlJ3Mgbm8gY2hhbGxlbmdlIHBhcmFtZXRlcjpcbiAgICAgICAgICogLSBJdCB3aWxsIHRyeSB0byByZXRyaWV2ZSB0aGUgdG9rZW4gdXNpbmcgdGhlIGNhY2hlLCBvciB0aGUgY3JlZGVudGlhbCdzIGdldFRva2VuLlxuICAgICAgICAgKiAtIFRoZW4gaXQgd2lsbCB0cnkgdGhlIG5leHQgcG9saWN5IHdpdGggb3Igd2l0aG91dCB0aGUgcmV0cmlldmVkIHRva2VuLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJdCB1c2VzIHRoZSBjaGFsbGVuZ2UgcGFyYW1ldGVycyB0bzpcbiAgICAgICAgICogLSBTa2lwIGEgZmlyc3QgYXR0ZW1wdCB0byBnZXQgdGhlIHRva2VuIGZyb20gdGhlIGNyZWRlbnRpYWwgaWYgdGhlcmUncyBubyBjYWNoZWQgdG9rZW4sXG4gICAgICAgICAqICAgc2luY2UgaXQgZXhwZWN0cyB0aGUgdG9rZW4gdG8gYmUgcmV0cmlldmFibGUgb25seSBhZnRlciB0aGUgY2hhbGxlbmdlLlxuICAgICAgICAgKiAtIFByZXBhcmUgdGhlIG91dGdvaW5nIHJlcXVlc3QgaWYgdGhlIGBwcmVwYXJlUmVxdWVzdGAgbWV0aG9kIGhhcyBiZWVuIHByb3ZpZGVkLlxuICAgICAgICAgKiAtIFNlbmQgYW4gaW5pdGlhbCByZXF1ZXN0IHRvIHJlY2VpdmUgdGhlIGNoYWxsZW5nZSBpZiBpdCBmYWlscy5cbiAgICAgICAgICogLSBQcm9jZXNzIGEgY2hhbGxlbmdlIGlmIHRoZSByZXNwb25zZSBjb250YWlucyBpdC5cbiAgICAgICAgICogLSBSZXRyaWV2ZSBhIHRva2VuIHdpdGggdGhlIGNoYWxsZW5nZSBpbmZvcm1hdGlvbiwgdGhlbiByZS1zZW5kIHRoZSByZXF1ZXN0LlxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnVybC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJlYXJlciB0b2tlbiBhdXRoZW50aWNhdGlvbiBpcyBub3QgcGVybWl0dGVkIGZvciBub24tVExTIHByb3RlY3RlZCAobm9uLWh0dHBzKSBVUkxzLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrcy5hdXRob3JpemVSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICBzY29wZXM6IEFycmF5LmlzQXJyYXkoc2NvcGVzKSA/IHNjb3BlcyA6IFtzY29wZXNdLFxuICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgZ2V0QWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGVyci5yZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlICYmXG4gICAgICAgICAgICAgICAgKHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5zdGF0dXMpID09PSA0MDEgJiZcbiAgICAgICAgICAgICAgICBnZXRDaGFsbGVuZ2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2VzIGNoYWxsZW5nZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFNlbmRSZXF1ZXN0ID0gYXdhaXQgY2FsbGJhY2tzLmF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZSh7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlczogQXJyYXkuaXNBcnJheShzY29wZXMpID8gc2NvcGVzIDogW3Njb3Blc10sXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTZW5kUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5kSnNvblBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLm5kSnNvblBvbGljeSA9IG5kSnNvblBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBuZEpzb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMubmRKc29uUG9saWN5TmFtZSA9IFwibmRKc29uUG9saWN5XCI7XG4vKipcbiAqIG5kSnNvblBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIGNvbnRyb2wga2VlcCBhbGl2ZSBzZXR0aW5ncyBmb3IgZXZlcnkgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gbmRKc29uUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMubmRKc29uUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgLy8gVGhlcmUgY3VycmVudGx5IGlzbid0IGEgZ29vZCB3YXkgdG8gYnlwYXNzIHRoZSBzZXJpYWxpemVyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3QuYm9keSA9PT0gXCJzdHJpbmdcIiAmJiByZXF1ZXN0LmJvZHkuc3RhcnRzV2l0aChcIltcIikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXF1ZXN0LmJvZHkpO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IGJvZHkubWFwKChpdGVtKSA9PiBKU09OLnN0cmluZ2lmeShpdGVtKSArIFwiXFxuXCIpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5kSnNvblBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kgPSBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeTtcbmNvbnN0IHRva2VuQ3ljbGVyX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC90b2tlbkN5Y2xlci5qc1wiKTtcbmNvbnN0IGxvZ19qc18xID0gcmVxdWlyZShcIi4uL2xvZy5qc1wiKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5cbiAqL1xuZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWUgPSBcImF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5XCI7XG5jb25zdCBBVVRIT1JJWkFUSU9OX0FVWElMSUFSWV9IRUFERVIgPSBcIngtbXMtYXV0aG9yaXphdGlvbi1hdXhpbGlhcnlcIjtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRBdXRob3JpemVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgc2NvcGVzLCBnZXRBY2Nlc3NUb2tlbiwgcmVxdWVzdCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBnZXRUb2tlbk9wdGlvbnMgPSB7XG4gICAgICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgICAgICB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyxcbiAgICB9O1xuICAgIHJldHVybiAoX2IgPSAoX2EgPSAoYXdhaXQgZ2V0QWNjZXNzVG9rZW4oc2NvcGVzLCBnZXRUb2tlbk9wdGlvbnMpKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRva2VuKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIlwiO1xufVxuLyoqXG4gKiBBIHBvbGljeSBmb3IgZXh0ZXJuYWwgdG9rZW5zIHRvIGB4LW1zLWF1dGhvcml6YXRpb24tYXV4aWxpYXJ5YCBoZWFkZXIuXG4gKiBUaGlzIGhlYWRlciB3aWxsIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIGNyb3NzLXRlbmFudCBhcHBsaWNhdGlvbiB3ZSBtYXkgbmVlZCB0byBoYW5kbGUgYXV0aGVudGljYXRpb24gcmVxdWVzdHNcbiAqIGZvciByZXNvdXJjZXMgdGhhdCBhcmUgaW4gZGlmZmVyZW50IHRlbmFudHMuXG4gKiBZb3UgY291bGQgc2VlIFtBUk0gZG9jc10oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2F6dXJlLXJlc291cmNlLW1hbmFnZXIvbWFuYWdlbWVudC9hdXRoZW50aWNhdGUtbXVsdGktdGVuYW50KSBmb3IgYSBydW5kb3duIG9mIGhvdyB0aGlzIGZlYXR1cmUgd29ya3NcbiAqL1xuZnVuY3Rpb24gYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kob3B0aW9ucykge1xuICAgIGNvbnN0IHsgY3JlZGVudGlhbHMsIHNjb3BlcyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBsb2dnZXIgPSBvcHRpb25zLmxvZ2dlciB8fCBsb2dfanNfMS5sb2dnZXI7XG4gICAgY29uc3QgdG9rZW5DeWNsZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QudXJsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uIGZvciBhdXhpbGlhcnkgaGVhZGVyIGlzIG5vdCBwZXJtaXR0ZWQgZm9yIG5vbi1UTFMgcHJvdGVjdGVkIChub24taHR0cHMpIFVSTHMuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgJHtleHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZX0gaGVhZGVyIHdpbGwgbm90IGJlIHNldCBkdWUgdG8gZW1wdHkgY3JlZGVudGlhbHMuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0b2tlblByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNyZWRlbnRpYWwgb2YgY3JlZGVudGlhbHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ2V0QWNjZXNzVG9rZW4gPSB0b2tlbkN5Y2xlck1hcC5nZXQoY3JlZGVudGlhbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFnZXRBY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbiA9ICgwLCB0b2tlbkN5Y2xlcl9qc18xLmNyZWF0ZVRva2VuQ3ljbGVyKShjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5DeWNsZXJNYXAuc2V0KGNyZWRlbnRpYWwsIGdldEFjY2Vzc1Rva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG9rZW5Qcm9taXNlcy5wdXNoKHNlbmRBdXRob3JpemVSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzOiBBcnJheS5pc0FycmF5KHNjb3BlcykgPyBzY29wZXMgOiBbc2NvcGVzXSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0QWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhdXhpbGlhcnlUb2tlbnMgPSAoYXdhaXQgUHJvbWlzZS5hbGwodG9rZW5Qcm9taXNlcykpLmZpbHRlcigodG9rZW4pID0+IEJvb2xlYW4odG9rZW4pKTtcbiAgICAgICAgICAgIGlmIChhdXhpbGlhcnlUb2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoYE5vbmUgb2YgdGhlIGF1eGlsaWFyeSB0b2tlbnMgYXJlIHZhbGlkLiAke0FVVEhPUklaQVRJT05fQVVYSUxJQVJZX0hFQURFUn0gaGVhZGVyIHdpbGwgbm90IGJlIHNldC5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoQVVUSE9SSVpBVElPTl9BVVhJTElBUllfSEVBREVSLCBhdXhpbGlhcnlUb2tlbnMubWFwKCh0b2tlbikgPT4gYEJlYXJlciAke3Rva2VufWApLmpvaW4oXCIsIFwiKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVGaWxlRnJvbVN0cmVhbSA9IGV4cG9ydHMuY3JlYXRlRmlsZSA9IGV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lID0gZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeSA9IGV4cG9ydHMubmRKc29uUG9saWN5TmFtZSA9IGV4cG9ydHMubmRKc29uUG9saWN5ID0gZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSA9IGV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSA9IGV4cG9ydHMuZm9ybURhdGFQb2xpY3lOYW1lID0gZXhwb3J0cy5mb3JtRGF0YVBvbGljeSA9IGV4cG9ydHMudGxzUG9saWN5TmFtZSA9IGV4cG9ydHMudGxzUG9saWN5ID0gZXhwb3J0cy51c2VyQWdlbnRQb2xpY3lOYW1lID0gZXhwb3J0cy51c2VyQWdlbnRQb2xpY3kgPSBleHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeSA9IGV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUgPSBleHBvcnRzLnRyYWNpbmdQb2xpY3kgPSBleHBvcnRzLnJldHJ5UG9saWN5ID0gZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lID0gZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlQb2xpY3kgPSBleHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lID0gZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5ID0gZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUgPSBleHBvcnRzLnJlZGlyZWN0UG9saWN5ID0gZXhwb3J0cy5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyA9IGV4cG9ydHMucHJveHlQb2xpY3lOYW1lID0gZXhwb3J0cy5wcm94eVBvbGljeSA9IGV4cG9ydHMubXVsdGlwYXJ0UG9saWN5TmFtZSA9IGV4cG9ydHMubXVsdGlwYXJ0UG9saWN5ID0gZXhwb3J0cy5sb2dQb2xpY3lOYW1lID0gZXhwb3J0cy5sb2dQb2xpY3kgPSBleHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUgPSBleHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeSA9IGV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWUgPSBleHBvcnRzLmV4cG9uZW50aWFsUmV0cnlQb2xpY3kgPSBleHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgPSBleHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeSA9IGV4cG9ydHMuaXNSZXN0RXJyb3IgPSBleHBvcnRzLlJlc3RFcnJvciA9IGV4cG9ydHMuY3JlYXRlUGlwZWxpbmVSZXF1ZXN0ID0gZXhwb3J0cy5jcmVhdGVIdHRwSGVhZGVycyA9IGV4cG9ydHMuY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQgPSBleHBvcnRzLmNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMgPSBleHBvcnRzLmNyZWF0ZUVtcHR5UGlwZWxpbmUgPSB2b2lkIDA7XG52YXIgcGlwZWxpbmVfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRW1wdHlQaXBlbGluZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGlwZWxpbmVfanNfMS5jcmVhdGVFbXB0eVBpcGVsaW5lOyB9IH0pO1xudmFyIGNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnNfanNfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zX2pzXzEuY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9uczsgfSB9KTtcbnZhciBkZWZhdWx0SHR0cENsaWVudF9qc18xID0gcmVxdWlyZShcIi4vZGVmYXVsdEh0dHBDbGllbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZWZhdWx0SHR0cENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVmYXVsdEh0dHBDbGllbnRfanNfMS5jcmVhdGVEZWZhdWx0SHR0cENsaWVudDsgfSB9KTtcbnZhciBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4vaHR0cEhlYWRlcnMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIdHRwSGVhZGVyc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVyczsgfSB9KTtcbnZhciBwaXBlbGluZVJlcXVlc3RfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lUmVxdWVzdC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBpcGVsaW5lUmVxdWVzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGlwZWxpbmVSZXF1ZXN0X2pzXzEuY3JlYXRlUGlwZWxpbmVSZXF1ZXN0OyB9IH0pO1xudmFyIHJlc3RFcnJvcl9qc18xID0gcmVxdWlyZShcIi4vcmVzdEVycm9yLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVzdEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1Jlc3RFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzdEVycm9yX2pzXzEuaXNSZXN0RXJyb3I7IH0gfSk7XG52YXIgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWU7IH0gfSk7XG52YXIgZXhwb25lbnRpYWxSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZXhwb25lbnRpYWxSZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cG9uZW50aWFsUmV0cnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4cG9uZW50aWFsUmV0cnlQb2xpY3lfanNfMS5leHBvbmVudGlhbFJldHJ5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4cG9uZW50aWFsUmV0cnlQb2xpY3lfanNfMS5leHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZTsgfSB9KTtcbnZhciBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3NldENsaWVudFJlcXVlc3RJZFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldENsaWVudFJlcXVlc3RJZFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZTsgfSB9KTtcbnZhciBsb2dQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2xvZ1BvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZ1BvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9nUG9saWN5X2pzXzEubG9nUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9nUG9saWN5X2pzXzEubG9nUG9saWN5TmFtZTsgfSB9KTtcbnZhciBtdWx0aXBhcnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL211bHRpcGFydFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpcGFydFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbXVsdGlwYXJ0UG9saWN5X2pzXzEubXVsdGlwYXJ0UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwYXJ0UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbXVsdGlwYXJ0UG9saWN5X2pzXzEubXVsdGlwYXJ0UG9saWN5TmFtZTsgfSB9KTtcbnZhciBwcm94eVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcHJveHlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcm94eVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJveHlQb2xpY3lfanNfMS5wcm94eVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb3h5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJveHlQb2xpY3lfanNfMS5wcm94eVBvbGljeU5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXREZWZhdWx0UHJveHlTZXR0aW5nc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJveHlQb2xpY3lfanNfMS5nZXREZWZhdWx0UHJveHlTZXR0aW5nczsgfSB9KTtcbnZhciByZWRpcmVjdFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmVkaXJlY3RQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWRpcmVjdFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVkaXJlY3RQb2xpY3lfanNfMS5yZWRpcmVjdFBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZGlyZWN0UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVkaXJlY3RQb2xpY3lfanNfMS5yZWRpcmVjdFBvbGljeU5hbWU7IH0gfSk7XG52YXIgc3lzdGVtRXJyb3JSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvc3lzdGVtRXJyb3JSZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN5c3RlbUVycm9yUmV0cnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN5c3RlbUVycm9yUmV0cnlQb2xpY3lfanNfMS5zeXN0ZW1FcnJvclJldHJ5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3lzdGVtRXJyb3JSZXRyeVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN5c3RlbUVycm9yUmV0cnlQb2xpY3lfanNfMS5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZTsgfSB9KTtcbnZhciB0aHJvdHRsaW5nUmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Rocm90dGxpbmdSZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRocm90dGxpbmdSZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhyb3R0bGluZ1JldHJ5UG9saWN5X2pzXzEudGhyb3R0bGluZ1JldHJ5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhyb3R0bGluZ1JldHJ5UG9saWN5X2pzXzEudGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZTsgfSB9KTtcbnZhciByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmV0cnlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeTsgfSB9KTtcbnZhciB0cmFjaW5nUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy90cmFjaW5nUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhY2luZ1BvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhY2luZ1BvbGljeV9qc18xLnRyYWNpbmdQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjaW5nUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhY2luZ1BvbGljeV9qc18xLnRyYWNpbmdQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGRlZmF1bHRSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZGVmYXVsdFJldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFJldHJ5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZhdWx0UmV0cnlQb2xpY3lfanNfMS5kZWZhdWx0UmV0cnlQb2xpY3k7IH0gfSk7XG52YXIgdXNlckFnZW50UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy91c2VyQWdlbnRQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1c2VyQWdlbnRQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZXJBZ2VudFBvbGljeV9qc18xLnVzZXJBZ2VudFBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZXJBZ2VudFBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZXJBZ2VudFBvbGljeV9qc18xLnVzZXJBZ2VudFBvbGljeU5hbWU7IH0gfSk7XG52YXIgdGxzUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy90bHNQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0bHNQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRsc1BvbGljeV9qc18xLnRsc1BvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRsc1BvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRsc1BvbGljeV9qc18xLnRsc1BvbGljeU5hbWU7IH0gfSk7XG52YXIgZm9ybURhdGFQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2Zvcm1EYXRhUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9ybURhdGFQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvcm1EYXRhUG9saWN5X2pzXzEuZm9ybURhdGFQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JtRGF0YVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvcm1EYXRhUG9saWN5X2pzXzEuZm9ybURhdGFQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2JlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5X2pzXzEuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5X2pzXzEuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWU7IH0gfSk7XG52YXIgbmRKc29uUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9uZEpzb25Qb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuZEpzb25Qb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5kSnNvblBvbGljeV9qc18xLm5kSnNvblBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5kSnNvblBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5kSnNvblBvbGljeV9qc18xLm5kSnNvblBvbGljeU5hbWU7IH0gfSk7XG52YXIgYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2F1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5X2pzXzEuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5X2pzXzEuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGZpbGVfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwvZmlsZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbGVfanNfMS5jcmVhdGVGaWxlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlsZUZyb21TdHJlYW1cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbGVfanNfMS5jcmVhdGVGaWxlRnJvbVN0cmVhbTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXp1cmVLZXlDcmVkZW50aWFsID0gdm9pZCAwO1xuLyoqXG4gKiBBIHN0YXRpYy1rZXktYmFzZWQgY3JlZGVudGlhbCB0aGF0IHN1cHBvcnRzIHVwZGF0aW5nXG4gKiB0aGUgdW5kZXJseWluZyBrZXkgdmFsdWUuXG4gKi9cbmNsYXNzIEF6dXJlS2V5Q3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBrZXkgdG8gYmUgdXNlZCBpbiBhdXRoZW50aWNhdGlvblxuICAgICAqL1xuICAgIGdldCBrZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBBenVyZUtleUNyZWRlbnRpYWwgZm9yIHVzZVxuICAgICAqIHdpdGggYSBzZXJ2aWNlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUga2V5IHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGtleSkge1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUga2V5LlxuICAgICAqXG4gICAgICogVXBkYXRlcyB3aWxsIHRha2UgZWZmZWN0IHVwb24gdGhlIG5leHQgcmVxdWVzdCBhZnRlclxuICAgICAqIHVwZGF0aW5nIHRoZSBrZXkgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3S2V5IC0gVGhlIG5ldyBrZXkgdmFsdWUgdG8gYmUgdXNlZFxuICAgICAqL1xuICAgIHVwZGF0ZShuZXdLZXkpIHtcbiAgICAgICAgdGhpcy5fa2V5ID0gbmV3S2V5O1xuICAgIH1cbn1cbmV4cG9ydHMuQXp1cmVLZXlDcmVkZW50aWFsID0gQXp1cmVLZXlDcmVkZW50aWFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXp1cmVLZXlDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNLZXlDcmVkZW50aWFsID0gaXNLZXlDcmVkZW50aWFsO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbi8qKlxuICogVGVzdHMgYW4gb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGltcGxlbWVudHMgS2V5Q3JlZGVudGlhbC5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtIFRoZSBhc3N1bWVkIEtleUNyZWRlbnRpYWwgdG8gYmUgdGVzdGVkLlxuICovXG5mdW5jdGlvbiBpc0tleUNyZWRlbnRpYWwoY3JlZGVudGlhbCkge1xuICAgIHJldHVybiAoMCwgY29yZV91dGlsXzEuaXNPYmplY3RXaXRoUHJvcGVydGllcykoY3JlZGVudGlhbCwgW1wia2V5XCJdKSAmJiB0eXBlb2YgY3JlZGVudGlhbC5rZXkgPT09IFwic3RyaW5nXCI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1rZXlDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgPSB2b2lkIDA7XG5leHBvcnRzLmlzTmFtZWRLZXlDcmVkZW50aWFsID0gaXNOYW1lZEtleUNyZWRlbnRpYWw7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuLyoqXG4gKiBBIHN0YXRpYyBuYW1lL2tleS1iYXNlZCBjcmVkZW50aWFsIHRoYXQgc3VwcG9ydHMgdXBkYXRpbmdcbiAqIHRoZSB1bmRlcmx5aW5nIG5hbWUgYW5kIGtleSB2YWx1ZXMuXG4gKi9cbmNsYXNzIEF6dXJlTmFtZWRLZXlDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGtleSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqL1xuICAgIGdldCBrZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgbmFtZSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqL1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIEF6dXJlTmFtZWRLZXlDcmVkZW50aWFsIGZvciB1c2VcbiAgICAgKiB3aXRoIGEgc2VydmljZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBuYW1lIHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0ga2V5IC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGtleSB0byB1c2UgaW4gYXV0aGVudGljYXRpb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwga2V5KSB7XG4gICAgICAgIGlmICghbmFtZSB8fCAha2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibmFtZSBhbmQga2V5IG11c3QgYmUgbm9uLWVtcHR5IHN0cmluZ3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUga2V5LlxuICAgICAqXG4gICAgICogVXBkYXRlcyB3aWxsIHRha2UgZWZmZWN0IHVwb24gdGhlIG5leHQgcmVxdWVzdCBhZnRlclxuICAgICAqIHVwZGF0aW5nIHRoZSBrZXkgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3TmFtZSAtIFRoZSBuZXcgbmFtZSB2YWx1ZSB0byBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSBuZXdLZXkgLSBUaGUgbmV3IGtleSB2YWx1ZSB0byBiZSB1c2VkLlxuICAgICAqL1xuICAgIHVwZGF0ZShuZXdOYW1lLCBuZXdLZXkpIHtcbiAgICAgICAgaWYgKCFuZXdOYW1lIHx8ICFuZXdLZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJuZXdOYW1lIGFuZCBuZXdLZXkgbXVzdCBiZSBub24tZW1wdHkgc3RyaW5nc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9uYW1lID0gbmV3TmFtZTtcbiAgICAgICAgdGhpcy5fa2V5ID0gbmV3S2V5O1xuICAgIH1cbn1cbmV4cG9ydHMuQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgPSBBenVyZU5hbWVkS2V5Q3JlZGVudGlhbDtcbi8qKlxuICogVGVzdHMgYW4gb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGltcGxlbWVudHMgTmFtZWRLZXlDcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgTmFtZWRLZXlDcmVkZW50aWFsIHRvIGJlIHRlc3RlZC5cbiAqL1xuZnVuY3Rpb24gaXNOYW1lZEtleUNyZWRlbnRpYWwoY3JlZGVudGlhbCkge1xuICAgIHJldHVybiAoKDAsIGNvcmVfdXRpbF8xLmlzT2JqZWN0V2l0aFByb3BlcnRpZXMpKGNyZWRlbnRpYWwsIFtcIm5hbWVcIiwgXCJrZXlcIl0pICYmXG4gICAgICAgIHR5cGVvZiBjcmVkZW50aWFsLmtleSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICB0eXBlb2YgY3JlZGVudGlhbC5uYW1lID09PSBcInN0cmluZ1wiKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF6dXJlTmFtZWRLZXlDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXp1cmVTQVNDcmVkZW50aWFsID0gdm9pZCAwO1xuZXhwb3J0cy5pc1NBU0NyZWRlbnRpYWwgPSBpc1NBU0NyZWRlbnRpYWw7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuLyoqXG4gKiBBIHN0YXRpYy1zaWduYXR1cmUtYmFzZWQgY3JlZGVudGlhbCB0aGF0IHN1cHBvcnRzIHVwZGF0aW5nXG4gKiB0aGUgdW5kZXJseWluZyBzaWduYXR1cmUgdmFsdWUuXG4gKi9cbmNsYXNzIEF6dXJlU0FTQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uXG4gICAgICovXG4gICAgZ2V0IHNpZ25hdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIEF6dXJlU0FTQ3JlZGVudGlhbCBmb3IgdXNlXG4gICAgICogd2l0aCBhIHNlcnZpY2UgY2xpZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNpZ25hdHVyZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB0byB1c2UgaW4gYXV0aGVudGljYXRpb25cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihzaWduYXR1cmUpIHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgc2lnbmF0dXJlLlxuICAgICAqXG4gICAgICogVXBkYXRlcyB3aWxsIHRha2UgZWZmZWN0IHVwb24gdGhlIG5leHQgcmVxdWVzdCBhZnRlclxuICAgICAqIHVwZGF0aW5nIHRoZSBzaWduYXR1cmUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3U2lnbmF0dXJlIC0gVGhlIG5ldyBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB2YWx1ZSB0byBiZSB1c2VkXG4gICAgICovXG4gICAgdXBkYXRlKG5ld1NpZ25hdHVyZSkge1xuICAgICAgICBpZiAoIW5ld1NpZ25hdHVyZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2hhcmVkIGFjY2VzcyBzaWduYXR1cmUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlID0gbmV3U2lnbmF0dXJlO1xuICAgIH1cbn1cbmV4cG9ydHMuQXp1cmVTQVNDcmVkZW50aWFsID0gQXp1cmVTQVNDcmVkZW50aWFsO1xuLyoqXG4gKiBUZXN0cyBhbiBvYmplY3QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaW1wbGVtZW50cyBTQVNDcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgU0FTQ3JlZGVudGlhbCB0byBiZSB0ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzU0FTQ3JlZGVudGlhbChjcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuICgoMCwgY29yZV91dGlsXzEuaXNPYmplY3RXaXRoUHJvcGVydGllcykoY3JlZGVudGlhbCwgW1wic2lnbmF0dXJlXCJdKSAmJiB0eXBlb2YgY3JlZGVudGlhbC5zaWduYXR1cmUgPT09IFwic3RyaW5nXCIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXp1cmVTQVNDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNCZWFyZXJUb2tlbiA9IGlzQmVhcmVyVG9rZW47XG5leHBvcnRzLmlzUG9wVG9rZW4gPSBpc1BvcFRva2VuO1xuZXhwb3J0cy5pc1Rva2VuQ3JlZGVudGlhbCA9IGlzVG9rZW5DcmVkZW50aWFsO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBhY2Nlc3NUb2tlbiAtIEFjY2VzcyB0b2tlblxuICogQHJldHVybnMgV2hldGhlciBhIHRva2VuIGlzIGJlYXJlciB0eXBlIG9yIG5vdFxuICovXG5mdW5jdGlvbiBpc0JlYXJlclRva2VuKGFjY2Vzc1Rva2VuKSB7XG4gICAgcmV0dXJuICFhY2Nlc3NUb2tlbi50b2tlblR5cGUgfHwgYWNjZXNzVG9rZW4udG9rZW5UeXBlID09PSBcIkJlYXJlclwiO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBhY2Nlc3NUb2tlbiAtIEFjY2VzcyB0b2tlblxuICogQHJldHVybnMgV2hldGhlciBhIHRva2VuIGlzIFBvcCB0b2tlbiBvciBub3RcbiAqL1xuZnVuY3Rpb24gaXNQb3BUb2tlbihhY2Nlc3NUb2tlbikge1xuICAgIHJldHVybiBhY2Nlc3NUb2tlbi50b2tlblR5cGUgPT09IFwicG9wXCI7XG59XG4vKipcbiAqIFRlc3RzIGFuIG9iamVjdCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpbXBsZW1lbnRzIFRva2VuQ3JlZGVudGlhbC5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtIFRoZSBhc3N1bWVkIFRva2VuQ3JlZGVudGlhbCB0byBiZSB0ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWwpIHtcbiAgICAvLyBDaGVjayBmb3IgYW4gb2JqZWN0IHdpdGggYSAnZ2V0VG9rZW4nIGZ1bmN0aW9uIGFuZCBwb3NzaWJseSB3aXRoXG4gICAgLy8gYSAnc2lnblJlcXVlc3QnIGZ1bmN0aW9uLiAgV2UgZG8gdGhpcyBjaGVjayB0byBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIGEgU2VydmljZUNsaWVudENyZWRlbnRpYWxzIGltcGxlbWVudG9yIChsaWtlIFRva2VuQ2xpZW50Q3JlZGVudGlhbHNcbiAgICAvLyBpbiBtcy1yZXN0LW5vZGVhdXRoKSBkb2Vzbid0IGdldCBtaXN0YWtlbiBmb3IgYSBUb2tlbkNyZWRlbnRpYWwgaWZcbiAgICAvLyBpdCBkb2Vzbid0IGFjdHVhbGx5IGltcGxlbWVudCBUb2tlbkNyZWRlbnRpYWwgYWxzby5cbiAgICBjb25zdCBjYXN0Q3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7XG4gICAgcmV0dXJuIChjYXN0Q3JlZGVudGlhbCAmJlxuICAgICAgICB0eXBlb2YgY2FzdENyZWRlbnRpYWwuZ2V0VG9rZW4gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAoY2FzdENyZWRlbnRpYWwuc2lnblJlcXVlc3QgPT09IHVuZGVmaW5lZCB8fCBjYXN0Q3JlZGVudGlhbC5nZXRUb2tlbi5sZW5ndGggPiAwKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b2tlbkNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNUb2tlbkNyZWRlbnRpYWwgPSBleHBvcnRzLmlzU0FTQ3JlZGVudGlhbCA9IGV4cG9ydHMuQXp1cmVTQVNDcmVkZW50aWFsID0gZXhwb3J0cy5pc05hbWVkS2V5Q3JlZGVudGlhbCA9IGV4cG9ydHMuQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgPSBleHBvcnRzLmlzS2V5Q3JlZGVudGlhbCA9IGV4cG9ydHMuQXp1cmVLZXlDcmVkZW50aWFsID0gdm9pZCAwO1xudmFyIGF6dXJlS2V5Q3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vYXp1cmVLZXlDcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXp1cmVLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZUtleUNyZWRlbnRpYWxfanNfMS5BenVyZUtleUNyZWRlbnRpYWw7IH0gfSk7XG52YXIga2V5Q3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4va2V5Q3JlZGVudGlhbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzS2V5Q3JlZGVudGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ga2V5Q3JlZGVudGlhbF9qc18xLmlzS2V5Q3JlZGVudGlhbDsgfSB9KTtcbnZhciBhenVyZU5hbWVkS2V5Q3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vYXp1cmVOYW1lZEtleUNyZWRlbnRpYWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBenVyZU5hbWVkS2V5Q3JlZGVudGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXp1cmVOYW1lZEtleUNyZWRlbnRpYWxfanNfMS5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTmFtZWRLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZU5hbWVkS2V5Q3JlZGVudGlhbF9qc18xLmlzTmFtZWRLZXlDcmVkZW50aWFsOyB9IH0pO1xudmFyIGF6dXJlU0FTQ3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vYXp1cmVTQVNDcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXp1cmVTQVNDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZVNBU0NyZWRlbnRpYWxfanNfMS5BenVyZVNBU0NyZWRlbnRpYWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1NBU0NyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlU0FTQ3JlZGVudGlhbF9qc18xLmlzU0FTQ3JlZGVudGlhbDsgfSB9KTtcbnZhciB0b2tlbkNyZWRlbnRpYWxfanNfMSA9IHJlcXVpcmUoXCIuL3Rva2VuQ3JlZGVudGlhbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVG9rZW5DcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0b2tlbkNyZWRlbnRpYWxfanNfMS5pc1Rva2VuQ3JlZGVudGlhbDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGlwZWxpbmVDb250YWluc0Rpc2FibGVLZWVwQWxpdmVQb2xpY3kgPSBleHBvcnRzLmNyZWF0ZURpc2FibGVLZWVwQWxpdmVQb2xpY3kgPSBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5kaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZSA9IFwiRGlzYWJsZUtlZXBBbGl2ZVBvbGljeVwiO1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICByZXF1ZXN0LmRpc2FibGVLZWVwQWxpdmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IGNyZWF0ZURpc2FibGVLZWVwQWxpdmVQb2xpY3k7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBwaXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeShwaXBlbGluZSkge1xuICAgIHJldHVybiBwaXBlbGluZS5nZXRPcmRlcmVkUG9saWNpZXMoKS5zb21lKChwb2xpY3kpID0+IHBvbGljeS5uYW1lID09PSBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lKTtcbn1cbmV4cG9ydHMucGlwZWxpbmVDb250YWluc0Rpc2FibGVLZWVwQWxpdmVQb2xpY3kgPSBwaXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc2FibGVLZWVwQWxpdmVQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWNvZGVTdHJpbmdUb1N0cmluZyA9IGV4cG9ydHMuZGVjb2RlU3RyaW5nID0gZXhwb3J0cy5lbmNvZGVCeXRlQXJyYXkgPSBleHBvcnRzLmVuY29kZVN0cmluZyA9IHZvaWQgMDtcbi8qKlxuICogRW5jb2RlcyBhIHN0cmluZyBpbiBiYXNlNjQgZm9ybWF0LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHN0cmluZyB0byBlbmNvZGVcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBlbmNvZGVTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufVxuZXhwb3J0cy5lbmNvZGVTdHJpbmcgPSBlbmNvZGVTdHJpbmc7XG4vKipcbiAqIEVuY29kZXMgYSBieXRlIGFycmF5IGluIGJhc2U2NCBmb3JtYXQuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgVWludDhBcmF5IHRvIGVuY29kZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGVuY29kZUJ5dGVBcnJheSh2YWx1ZSkge1xuICAgIGNvbnN0IGJ1ZmZlclZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCdWZmZXIgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlLmJ1ZmZlcik7XG4gICAgcmV0dXJuIGJ1ZmZlclZhbHVlLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufVxuZXhwb3J0cy5lbmNvZGVCeXRlQXJyYXkgPSBlbmNvZGVCeXRlQXJyYXk7XG4vKipcbiAqIERlY29kZXMgYSBiYXNlNjQgc3RyaW5nIGludG8gYSBieXRlIGFycmF5LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIGJhc2U2NCBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlLCBcImJhc2U2NFwiKTtcbn1cbmV4cG9ydHMuZGVjb2RlU3RyaW5nID0gZGVjb2RlU3RyaW5nO1xuLyoqXG4gKiBEZWNvZGVzIGEgYmFzZTY0IHN0cmluZyBpbnRvIGEgc3RyaW5nLlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIGJhc2U2NCBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nVG9TdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG59XG5leHBvcnRzLmRlY29kZVN0cmluZ1RvU3RyaW5nID0gZGVjb2RlU3RyaW5nVG9TdHJpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYXNlNjQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IGV4cG9ydHMuWE1MX0FUVFJLRVkgPSB2b2lkIDA7XG4vKipcbiAqIERlZmF1bHQga2V5IHVzZWQgdG8gYWNjZXNzIHRoZSBYTUwgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0cy5YTUxfQVRUUktFWSA9IFwiJFwiO1xuLyoqXG4gKiBEZWZhdWx0IGtleSB1c2VkIHRvIGFjY2VzcyB0aGUgWE1MIHZhbHVlIGNvbnRlbnQuXG4gKi9cbmV4cG9ydHMuWE1MX0NIQVJLRVkgPSBcIl9cIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyZmFjZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mbGF0dGVuUmVzcG9uc2UgPSBleHBvcnRzLmlzVmFsaWRVdWlkID0gZXhwb3J0cy5pc0R1cmF0aW9uID0gZXhwb3J0cy5pc1ByaW1pdGl2ZUJvZHkgPSB2b2lkIDA7XG4vKipcbiAqIEEgdHlwZSBndWFyZCBmb3IgYSBwcmltaXRpdmUgcmVzcG9uc2UgYm9keS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmVCb2R5KHZhbHVlLCBtYXBwZXJUeXBlTmFtZSkge1xuICAgIHJldHVybiAobWFwcGVyVHlwZU5hbWUgIT09IFwiQ29tcG9zaXRlXCIgJiZcbiAgICAgICAgbWFwcGVyVHlwZU5hbWUgIT09IFwiRGljdGlvbmFyeVwiICYmXG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIiB8fFxuICAgICAgICAgICAgKG1hcHBlclR5cGVOYW1lID09PSBudWxsIHx8IG1hcHBlclR5cGVOYW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXBwZXJUeXBlTmFtZS5tYXRjaCgvXihEYXRlfERhdGVUaW1lfERhdGVUaW1lUmZjMTEyM3xVbml4VGltZXxCeXRlQXJyYXl8QmFzZTY0VXJsKSQvaSkpICE9PVxuICAgICAgICAgICAgICAgIG51bGwgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsKSk7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlQm9keSA9IGlzUHJpbWl0aXZlQm9keTtcbmNvbnN0IHZhbGlkYXRlSVNPRHVyYXRpb24gPSAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBpbiBJU08gODYwMSBmb3JtYXQuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgdmFsaWRhdGVkIGZvciBJU08gODYwMSBkdXJhdGlvbiBmb3JtYXQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNEdXJhdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWxpZGF0ZUlTT0R1cmF0aW9uLnRlc3QodmFsdWUpO1xufVxuZXhwb3J0cy5pc0R1cmF0aW9uID0gaXNEdXJhdGlvbjtcbmNvbnN0IHZhbGlkVXVpZFJlZ2V4ID0gL15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kL2k7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgdXVpZCBpcyB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gdXVpZCAtIFRoZSB1dWlkIHRoYXQgbmVlZHMgdG8gYmUgdmFsaWRhdGVkLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkVXVpZCh1dWlkKSB7XG4gICAgcmV0dXJuIHZhbGlkVXVpZFJlZ2V4LnRlc3QodXVpZCk7XG59XG5leHBvcnRzLmlzVmFsaWRVdWlkID0gaXNWYWxpZFV1aWQ7XG4vKipcbiAqIE1hcHMgdGhlIHJlc3BvbnNlIGFzIGZvbGxvd3M6XG4gKiAtIHdyYXBzIHRoZSByZXNwb25zZSBib2R5IGlmIG5lZWRlZCAodHlwaWNhbGx5IGlmIGl0cyB0eXBlIGlzIHByaW1pdGl2ZSkuXG4gKiAtIHJldHVybnMgbnVsbCBpZiB0aGUgY29tYmluYXRpb24gb2YgdGhlIGhlYWRlcnMgYW5kIHRoZSBib2R5IGlzIGVtcHR5LlxuICogLSBvdGhlcndpc2UsIHJldHVybnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBoZWFkZXJzIGFuZCB0aGUgYm9keS5cbiAqXG4gKiBAcGFyYW0gcmVzcG9uc2VPYmplY3QgLSBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXJzZWQgcmVzcG9uc2VcbiAqIEByZXR1cm5zIHRoZSByZXNwb25zZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHVzZXIgd2hpY2ggY2FuIGJlIG51bGwgYW5kL29yIHdyYXBwZWRcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaGFuZGxlTnVsbGFibGVSZXNwb25zZUFuZFdyYXBwYWJsZUJvZHkocmVzcG9uc2VPYmplY3QpIHtcbiAgICBjb25zdCBjb21iaW5lZEhlYWRlcnNBbmRCb2R5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZU9iamVjdC5oZWFkZXJzKSwgcmVzcG9uc2VPYmplY3QuYm9keSk7XG4gICAgaWYgKHJlc3BvbnNlT2JqZWN0Lmhhc051bGxhYmxlVHlwZSAmJlxuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjb21iaW5lZEhlYWRlcnNBbmRCb2R5KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0LnNob3VsZFdyYXBCb2R5ID8geyBib2R5OiBudWxsIH0gOiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0LnNob3VsZFdyYXBCb2R5XG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2VPYmplY3QuaGVhZGVycyksIHsgYm9keTogcmVzcG9uc2VPYmplY3QuYm9keSB9KSA6IGNvbWJpbmVkSGVhZGVyc0FuZEJvZHk7XG4gICAgfVxufVxuLyoqXG4gKiBUYWtlIGEgYEZ1bGxPcGVyYXRpb25SZXNwb25zZWAgYW5kIHR1cm4gaXQgaW50byBhIGZsYXRcbiAqIHJlc3BvbnNlIG9iamVjdCB0byBoYW5kIGJhY2sgdG8gdGhlIGNvbnN1bWVyLlxuICogQHBhcmFtIGZ1bGxSZXNwb25zZSAtIFRoZSBwcm9jZXNzZWQgcmVzcG9uc2UgZnJvbSB0aGUgb3BlcmF0aW9uIHJlcXVlc3RcbiAqIEBwYXJhbSByZXNwb25zZVNwZWMgLSBUaGUgcmVzcG9uc2UgbWFwIGZyb20gdGhlIE9wZXJhdGlvblNwZWNcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblJlc3BvbnNlKGZ1bGxSZXNwb25zZSwgcmVzcG9uc2VTcGVjKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gZnVsbFJlc3BvbnNlLnBhcnNlZEhlYWRlcnM7XG4gICAgLy8gaGVhZCBtZXRob2RzIG5ldmVyIGhhdmUgYSBib2R5LCBidXQgd2UgcmV0dXJuIGEgYm9vbGVhbiBzZXQgdG8gYm9keSBwcm9wZXJ0eVxuICAgIC8vIHRvIGluZGljYXRlIHByZXNlbmNlL2Fic2VuY2Ugb2YgdGhlIHJlc291cmNlXG4gICAgaWYgKGZ1bGxSZXNwb25zZS5yZXF1ZXN0Lm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkSGVhZGVycyksIHsgYm9keTogZnVsbFJlc3BvbnNlLnBhcnNlZEJvZHkgfSk7XG4gICAgfVxuICAgIGNvbnN0IGJvZHlNYXBwZXIgPSByZXNwb25zZVNwZWMgJiYgcmVzcG9uc2VTcGVjLmJvZHlNYXBwZXI7XG4gICAgY29uc3QgaXNOdWxsYWJsZSA9IEJvb2xlYW4oYm9keU1hcHBlciA9PT0gbnVsbCB8fCBib2R5TWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBib2R5TWFwcGVyLm51bGxhYmxlKTtcbiAgICBjb25zdCBleHBlY3RlZEJvZHlUeXBlTmFtZSA9IGJvZHlNYXBwZXIgPT09IG51bGwgfHwgYm9keU1hcHBlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogYm9keU1hcHBlci50eXBlLm5hbWU7XG4gICAgLyoqIElmIHRoZSBib2R5IGlzIGFza2VkIGZvciwgd2UgbG9vayBhdCB0aGUgZXhwZWN0ZWQgYm9keSB0eXBlIHRvIGhhbmRsZSBpdCAqL1xuICAgIGlmIChleHBlY3RlZEJvZHlUeXBlTmFtZSA9PT0gXCJTdHJlYW1cIikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRIZWFkZXJzKSwgeyBibG9iQm9keTogZnVsbFJlc3BvbnNlLmJsb2JCb2R5LCByZWFkYWJsZVN0cmVhbUJvZHk6IGZ1bGxSZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHkgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsUHJvcGVydGllcyA9IChleHBlY3RlZEJvZHlUeXBlTmFtZSA9PT0gXCJDb21wb3NpdGVcIiAmJlxuICAgICAgICBib2R5TWFwcGVyLnR5cGUubW9kZWxQcm9wZXJ0aWVzKSB8fFxuICAgICAgICB7fTtcbiAgICBjb25zdCBpc1BhZ2VhYmxlUmVzcG9uc2UgPSBPYmplY3Qua2V5cyhtb2RlbFByb3BlcnRpZXMpLnNvbWUoKGspID0+IG1vZGVsUHJvcGVydGllc1trXS5zZXJpYWxpemVkTmFtZSA9PT0gXCJcIik7XG4gICAgaWYgKGV4cGVjdGVkQm9keVR5cGVOYW1lID09PSBcIlNlcXVlbmNlXCIgfHwgaXNQYWdlYWJsZVJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGFycmF5UmVzcG9uc2UgPSAoX2EgPSBmdWxsUmVzcG9uc2UucGFyc2VkQm9keSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsUHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIGlmIChtb2RlbFByb3BlcnRpZXNba2V5XS5zZXJpYWxpemVkTmFtZSkge1xuICAgICAgICAgICAgICAgIGFycmF5UmVzcG9uc2Vba2V5XSA9IChfYiA9IGZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Jba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkSGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyc2VkSGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBhcnJheVJlc3BvbnNlW2tleV0gPSBwYXJzZWRIZWFkZXJzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTnVsbGFibGUgJiZcbiAgICAgICAgICAgICFmdWxsUmVzcG9uc2UucGFyc2VkQm9keSAmJlxuICAgICAgICAgICAgIXBhcnNlZEhlYWRlcnMgJiZcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1vZGVsUHJvcGVydGllcykubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogYXJyYXlSZXNwb25zZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZU51bGxhYmxlUmVzcG9uc2VBbmRXcmFwcGFibGVCb2R5KHtcbiAgICAgICAgYm9keTogZnVsbFJlc3BvbnNlLnBhcnNlZEJvZHksXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlZEhlYWRlcnMsXG4gICAgICAgIGhhc051bGxhYmxlVHlwZTogaXNOdWxsYWJsZSxcbiAgICAgICAgc2hvdWxkV3JhcEJvZHk6IGlzUHJpbWl0aXZlQm9keShmdWxsUmVzcG9uc2UucGFyc2VkQm9keSwgZXhwZWN0ZWRCb2R5VHlwZU5hbWUpLFxuICAgIH0pO1xufVxuZXhwb3J0cy5mbGF0dGVuUmVzcG9uc2UgPSBmbGF0dGVuUmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1hcHBlclR5cGVOYW1lcyA9IGV4cG9ydHMuY3JlYXRlU2VyaWFsaXplciA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBiYXNlNjQgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9iYXNlNjQuanNcIikpO1xuY29uc3QgaW50ZXJmYWNlc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlcy5qc1wiKTtcbmNvbnN0IHV0aWxzX2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNsYXNzIFNlcmlhbGl6ZXJJbXBsIHtcbiAgICBjb25zdHJ1Y3Rvcihtb2RlbE1hcHBlcnMgPSB7fSwgaXNYTUwgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1vZGVsTWFwcGVycyA9IG1vZGVsTWFwcGVycztcbiAgICAgICAgdGhpcy5pc1hNTCA9IGlzWE1MO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBSZW1vdmluZyB0aGUgY29uc3RyYWludHMgdmFsaWRhdGlvbiBvbiBjbGllbnQgc2lkZS5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZUNvbnN0cmFpbnRzKG1hcHBlciwgdmFsdWUsIG9iamVjdE5hbWUpIHtcbiAgICAgICAgY29uc3QgZmFpbFZhbGlkYXRpb24gPSAoY29uc3RyYWludE5hbWUsIGNvbnN0cmFpbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcIiR7b2JqZWN0TmFtZX1cIiB3aXRoIHZhbHVlIFwiJHt2YWx1ZX1cIiBzaG91bGQgc2F0aXNmeSB0aGUgY29uc3RyYWludCBcIiR7Y29uc3RyYWludE5hbWV9XCI6ICR7Y29uc3RyYWludFZhbHVlfS5gKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG1hcHBlci5jb25zdHJhaW50cyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB7IEV4Y2x1c2l2ZU1heGltdW0sIEV4Y2x1c2l2ZU1pbmltdW0sIEluY2x1c2l2ZU1heGltdW0sIEluY2x1c2l2ZU1pbmltdW0sIE1heEl0ZW1zLCBNYXhMZW5ndGgsIE1pbkl0ZW1zLCBNaW5MZW5ndGgsIE11bHRpcGxlT2YsIFBhdHRlcm4sIFVuaXF1ZUl0ZW1zLCB9ID0gbWFwcGVyLmNvbnN0cmFpbnRzO1xuICAgICAgICAgICAgaWYgKEV4Y2x1c2l2ZU1heGltdW0gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+PSBFeGNsdXNpdmVNYXhpbXVtKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJFeGNsdXNpdmVNYXhpbXVtXCIsIEV4Y2x1c2l2ZU1heGltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEV4Y2x1c2l2ZU1pbmltdW0gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA8PSBFeGNsdXNpdmVNaW5pbXVtKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJFeGNsdXNpdmVNaW5pbXVtXCIsIEV4Y2x1c2l2ZU1pbmltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEluY2x1c2l2ZU1heGltdW0gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+IEluY2x1c2l2ZU1heGltdW0pIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIkluY2x1c2l2ZU1heGltdW1cIiwgSW5jbHVzaXZlTWF4aW11bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoSW5jbHVzaXZlTWluaW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDwgSW5jbHVzaXZlTWluaW11bSkge1xuICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiSW5jbHVzaXZlTWluaW11bVwiLCBJbmNsdXNpdmVNaW5pbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXhJdGVtcyAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA+IE1heEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNYXhJdGVtc1wiLCBNYXhJdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF4TGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gTWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNYXhMZW5ndGhcIiwgTWF4TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNaW5JdGVtcyAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA8IE1pbkl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNaW5JdGVtc1wiLCBNaW5JdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWluTGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoIDwgTWluTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNaW5MZW5ndGhcIiwgTWluTGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNdWx0aXBsZU9mICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgJSBNdWx0aXBsZU9mICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNdWx0aXBsZU9mXCIsIE11bHRpcGxlT2YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdHlwZW9mIFBhdHRlcm4gPT09IFwic3RyaW5nXCIgPyBuZXcgUmVnRXhwKFBhdHRlcm4pIDogUGF0dGVybjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLm1hdGNoKHBhdHRlcm4pID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiUGF0dGVyblwiLCBQYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoVW5pcXVlSXRlbXMgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5zb21lKChpdGVtLCBpLCBhcikgPT4gYXIuaW5kZXhPZihpdGVtKSAhPT0gaSkpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIlVuaXF1ZUl0ZW1zXCIsIFVuaXF1ZUl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgdGhlIGdpdmVuIG9iamVjdCBiYXNlZCBvbiBpdHMgbWV0YWRhdGEgZGVmaW5lZCBpbiB0aGUgbWFwcGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFwcGVyIC0gVGhlIG1hcHBlciB3aGljaCBkZWZpbmVzIHRoZSBtZXRhZGF0YSBvZiB0aGUgc2VyaWFsaXphYmxlIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCAtIEEgdmFsaWQgSmF2YXNjcmlwdCBvYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdE5hbWUgLSBOYW1lIG9mIHRoZSBzZXJpYWxpemVkIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gc2VyaWFsaXphdGlvblxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2YWxpZCBzZXJpYWxpemVkIEphdmFzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgc2VyaWFsaXplKG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBvcHRpb25zID0geyB4bWw6IHt9IH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0ge1xuICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgcm9vdE5hbWU6IChfYSA9IG9wdGlvbnMueG1sLnJvb3ROYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2IgPSBvcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgeG1sQ2hhcktleTogKF9jID0gb3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgbWFwcGVyVHlwZSA9IG1hcHBlci50eXBlLm5hbWU7XG4gICAgICAgIGlmICghb2JqZWN0TmFtZSkge1xuICAgICAgICAgICAgb2JqZWN0TmFtZSA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXlNlcXVlbmNlJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZXIuaXNDb25zdGFudCkge1xuICAgICAgICAgICAgb2JqZWN0ID0gbWFwcGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIHRhYmxlIG9mIGFsbG93ZWQgdmFsdWVzIHNob3VsZCBoZWxwIGV4cGxhaW5cbiAgICAgICAgLy8gdGhlIG1hcHBlci5yZXF1aXJlZCBhbmQgbWFwcGVyLm51bGxhYmxlIHByb3BlcnRpZXMuXG4gICAgICAgIC8vIFggbWVhbnMgXCJuZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsIGFyZSBhbGxvd2VkXCIuXG4gICAgICAgIC8vICAgICAgICAgICB8fCByZXF1aXJlZFxuICAgICAgICAvLyAgICAgICAgICAgfHwgdHJ1ZSAgICAgIHwgZmFsc2VcbiAgICAgICAgLy8gIG51bGxhYmxlIHx8ID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vICAgICAgdHJ1ZSB8fCBudWxsICAgICAgfCB1bmRlZmluZWQvbnVsbFxuICAgICAgICAvLyAgICAgZmFsc2UgfHwgWCAgICAgICAgIHwgdW5kZWZpbmVkXG4gICAgICAgIC8vIHVuZGVmaW5lZCB8fCBYICAgICAgICAgfCB1bmRlZmluZWQvbnVsbFxuICAgICAgICBjb25zdCB7IHJlcXVpcmVkLCBudWxsYWJsZSB9ID0gbWFwcGVyO1xuICAgICAgICBpZiAocmVxdWlyZWQgJiYgbnVsbGFibGUgJiYgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBjYW5ub3QgYmUgdW5kZWZpbmVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1aXJlZCAmJiAhbnVsbGFibGUgJiYgKG9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IG9iamVjdCA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXF1aXJlZCAmJiBudWxsYWJsZSA9PT0gZmFsc2UgJiYgb2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gY2Fubm90IGJlIG51bGwuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IG9iamVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IG9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eYW55JC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBvYmplY3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eKE51bWJlcnxTdHJpbmd8Qm9vbGVhbnxPYmplY3R8U3RyZWFtfFV1aWQpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVCYXNpY1R5cGVzKG1hcHBlclR5cGUsIG9iamVjdE5hbWUsIG9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eRW51bSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnVtTWFwcGVyID0gbWFwcGVyO1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVFbnVtVHlwZShvYmplY3ROYW1lLCBlbnVtTWFwcGVyLnR5cGUuYWxsb3dlZFZhbHVlcywgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL14oRGF0ZXxEYXRlVGltZXxUaW1lU3BhbnxEYXRlVGltZVJmYzExMjN8VW5peFRpbWUpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVEYXRlVHlwZXMobWFwcGVyVHlwZSwgb2JqZWN0LCBvYmplY3ROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CeXRlQXJyYXkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUJ5dGVBcnJheVR5cGUob2JqZWN0TmFtZSwgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CYXNlNjRVcmwkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUJhc2U2NFVybFR5cGUob2JqZWN0TmFtZSwgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15TZXF1ZW5jZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplU2VxdWVuY2VUeXBlKHRoaXMsIG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBCb29sZWFuKHRoaXMuaXNYTUwpLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eRGljdGlvbmFyeSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplRGljdGlvbmFyeVR5cGUodGhpcywgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIEJvb2xlYW4odGhpcy5pc1hNTCksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15Db21wb3NpdGUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUNvbXBvc2l0ZVR5cGUodGhpcywgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIEJvb2xlYW4odGhpcy5pc1hNTCksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgdGhlIGdpdmVuIG9iamVjdCBiYXNlZCBvbiBpdHMgbWV0YWRhdGEgZGVmaW5lZCBpbiB0aGUgbWFwcGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFwcGVyIC0gVGhlIG1hcHBlciB3aGljaCBkZWZpbmVzIHRoZSBtZXRhZGF0YSBvZiB0aGUgc2VyaWFsaXphYmxlIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3BvbnNlQm9keSAtIEEgdmFsaWQgSmF2YXNjcmlwdCBlbnRpdHkgdG8gYmUgZGVzZXJpYWxpemVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0TmFtZSAtIE5hbWUgb2YgdGhlIGRlc2VyaWFsaXplZCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gQ29udHJvbHMgYmVoYXZpb3Igb2YgWE1MIHBhcnNlciBhbmQgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgdmFsaWQgZGVzZXJpYWxpemVkIEphdmFzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgZGVzZXJpYWxpemUobWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIG9wdGlvbnMgPSB7IHhtbDoge30gfSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0ge1xuICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgcm9vdE5hbWU6IChfYSA9IG9wdGlvbnMueG1sLnJvb3ROYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2IgPSBvcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgeG1sQ2hhcktleTogKF9jID0gb3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25Qcm9wZXJ0aWVzOiAoX2QgPSBvcHRpb25zLmlnbm9yZVVua25vd25Qcm9wZXJ0aWVzKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlc3BvbnNlQm9keSA9PT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlQm9keSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNYTUwgJiYgbWFwcGVyLnR5cGUubmFtZSA9PT0gXCJTZXF1ZW5jZVwiICYmICFtYXBwZXIueG1sSXNXcmFwcGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gRWRnZSBjYXNlIGZvciBlbXB0eSBYTUwgbm9uLXdyYXBwZWQgbGlzdHMuIHhtbDJqcyBjYW4ndCBkaXN0aW5ndWlzaFxuICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhlIGxpc3QgYmVpbmcgZW1wdHkgdmVyc3VzIGJlaW5nIG1pc3NpbmcsXG4gICAgICAgICAgICAgICAgLy8gc28gbGV0J3MgZG8gdGhlIG1vcmUgdXNlci1mcmllbmRseSB0aGluZyBhbmQgcmV0dXJuIGFuIGVtcHR5IGxpc3QuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzcGVjaWZpY2FsbHkgY2hlY2sgZm9yIHVuZGVmaW5lZCBhcyBkZWZhdWx0IHZhbHVlIGNhbiBiZSBhIGZhbHNleSB2YWx1ZSBgMCwgXCJcIiwgZmFsc2UsIG51bGxgXG4gICAgICAgICAgICBpZiAobWFwcGVyLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gbWFwcGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZUJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBheWxvYWQ7XG4gICAgICAgIGNvbnN0IG1hcHBlclR5cGUgPSBtYXBwZXIudHlwZS5uYW1lO1xuICAgICAgICBpZiAoIW9iamVjdE5hbWUpIHtcbiAgICAgICAgICAgIG9iamVjdE5hbWUgPSBtYXBwZXIuc2VyaWFsaXplZE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcHBlclR5cGUubWF0Y2goL15Db21wb3NpdGUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gZGVzZXJpYWxpemVDb21wb3NpdGVUeXBlKHRoaXMsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1hNTCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXJLZXkgPSB1cGRhdGVkT3B0aW9ucy54bWwueG1sQ2hhcktleTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgbWFwcGVyIHNwZWNpZmllcyB0aGlzIGFzIGEgbm9uLWNvbXBvc2l0ZSB0eXBlIHZhbHVlIGJ1dCB0aGUgcmVzcG9uc2VCb2R5IGNvbnRhaW5zXG4gICAgICAgICAgICAgICAgICogYm90aCBoZWFkZXIgKFwiJFwiIGkuZS4sIFhNTF9BVFRSS0VZKSBhbmQgYm9keSAoXCIjXCIgaS5lLiwgWE1MX0NIQVJLRVkpIHByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgICogdGhlbiBqdXN0IHJlZHVjZSB0aGUgcmVzcG9uc2VCb2R5IHZhbHVlIHRvIHRoZSBib2R5IChcIiNcIiBpLmUuLCBYTUxfQ0hBUktFWSkgcHJvcGVydHkuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldICE9PSB1bmRlZmluZWQgJiYgcmVzcG9uc2VCb2R5W3htbENoYXJLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gcmVzcG9uc2VCb2R5W3htbENoYXJLZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eTnVtYmVyJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBwYXJzZUZsb2F0KHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBheWxvYWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkJvb2xlYW4kL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlQm9keSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXihTdHJpbmd8RW51bXxPYmplY3R8U3RyZWFtfFV1aWR8VGltZVNwYW58YW55KSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gcmVzcG9uc2VCb2R5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXihEYXRlfERhdGVUaW1lfERhdGVUaW1lUmZjMTEyMykkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IG5ldyBEYXRlKHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eVW5peFRpbWUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHVuaXhUaW1lVG9EYXRlKHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eQnl0ZUFycmF5JC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBiYXNlNjQuZGVjb2RlU3RyaW5nKHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eQmFzZTY0VXJsJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBiYXNlNjRVcmxUb0J5dGVBcnJheShyZXNwb25zZUJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXlNlcXVlbmNlJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBkZXNlcmlhbGl6ZVNlcXVlbmNlVHlwZSh0aGlzLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkRpY3Rpb25hcnkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGRlc2VyaWFsaXplRGljdGlvbmFyeVR5cGUodGhpcywgbWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVyLmlzQ29uc3RhbnQpIHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBtYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cbn1cbi8qKlxuICogTWV0aG9kIHRoYXQgY3JlYXRlcyBhbmQgcmV0dXJucyBhIFNlcmlhbGl6ZXIuXG4gKiBAcGFyYW0gbW9kZWxNYXBwZXJzIC0gS25vd24gbW9kZWxzIHRvIG1hcFxuICogQHBhcmFtIGlzWE1MIC0gSWYgWE1MIHNob3VsZCBiZSBzdXBwb3J0ZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXplcihtb2RlbE1hcHBlcnMgPSB7fSwgaXNYTUwgPSBmYWxzZSkge1xuICAgIHJldHVybiBuZXcgU2VyaWFsaXplckltcGwobW9kZWxNYXBwZXJzLCBpc1hNTCk7XG59XG5leHBvcnRzLmNyZWF0ZVNlcmlhbGl6ZXIgPSBjcmVhdGVTZXJpYWxpemVyO1xuZnVuY3Rpb24gdHJpbUVuZChzdHIsIGNoKSB7XG4gICAgbGV0IGxlbiA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbiAtIDEgPj0gMCAmJiBzdHJbbGVuIC0gMV0gPT09IGNoKSB7XG4gICAgICAgIC0tbGVuO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnN1YnN0cigwLCBsZW4pO1xufVxuZnVuY3Rpb24gYnVmZmVyVG9CYXNlNjRVcmwoYnVmZmVyKSB7XG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCEoYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgcHJvdmlkZSBhbiBpbnB1dCBvZiB0eXBlIFVpbnQ4QXJyYXkgZm9yIGNvbnZlcnRpbmcgdG8gQmFzZTY0VXJsLmApO1xuICAgIH1cbiAgICAvLyBVaW50OEFycmF5IHRvIEJhc2U2NC5cbiAgICBjb25zdCBzdHIgPSBiYXNlNjQuZW5jb2RlQnl0ZUFycmF5KGJ1ZmZlcik7XG4gICAgLy8gQmFzZTY0IHRvIEJhc2U2NFVybC5cbiAgICByZXR1cm4gdHJpbUVuZChzdHIsIFwiPVwiKS5yZXBsYWNlKC9cXCsvZywgXCItXCIpLnJlcGxhY2UoL1xcLy9nLCBcIl9cIik7XG59XG5mdW5jdGlvbiBiYXNlNjRVcmxUb0J5dGVBcnJheShzdHIpIHtcbiAgICBpZiAoIXN0cikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoc3RyICYmIHR5cGVvZiBzdHIudmFsdWVPZigpICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBwcm92aWRlIGFuIGlucHV0IG9mIHR5cGUgc3RyaW5nIGZvciBjb252ZXJ0aW5nIHRvIFVpbnQ4QXJyYXlcIik7XG4gICAgfVxuICAgIC8vIEJhc2U2NFVybCB0byBCYXNlNjQuXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpO1xuICAgIC8vIEJhc2U2NCB0byBVaW50OEFycmF5LlxuICAgIHJldHVybiBiYXNlNjQuZGVjb2RlU3RyaW5nKHN0cik7XG59XG5mdW5jdGlvbiBzcGxpdFNlcmlhbGl6ZU5hbWUocHJvcCkge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbXTtcbiAgICBsZXQgcGFydGlhbGNsYXNzID0gXCJcIjtcbiAgICBpZiAocHJvcCkge1xuICAgICAgICBjb25zdCBzdWJ3b3JkcyA9IHByb3Auc3BsaXQoXCIuXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc3Vid29yZHMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmNoYXJBdChpdGVtLmxlbmd0aCAtIDEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxjbGFzcyArPSBpdGVtLnN1YnN0cigwLCBpdGVtLmxlbmd0aCAtIDEpICsgXCIuXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsY2xhc3MgKz0gaXRlbTtcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2gocGFydGlhbGNsYXNzKTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsY2xhc3MgPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xufVxuZnVuY3Rpb24gZGF0ZVRvVW5peFRpbWUoZCkge1xuICAgIGlmICghZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGQudmFsdWVPZigpID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGQgPSBuZXcgRGF0ZShkKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoZC5nZXRUaW1lKCkgLyAxMDAwKTtcbn1cbmZ1bmN0aW9uIHVuaXhUaW1lVG9EYXRlKG4pIHtcbiAgICBpZiAoIW4pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKG4gKiAxMDAwKTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUJhc2ljVHlwZXModHlwZU5hbWUsIG9iamVjdE5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVOYW1lLm1hdGNoKC9eTnVtYmVyJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSB3aXRoIHZhbHVlICR7dmFsdWV9IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15TdHJpbmckL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSB3aXRoIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eVXVpZCQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIgJiYgKDAsIHV0aWxzX2pzXzEuaXNWYWxpZFV1aWQpKHZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gd2l0aCB2YWx1ZSBcIiR7dmFsdWV9XCIgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBhbmQgYSB2YWxpZCB1dWlkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eQm9vbGVhbiQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IHdpdGggdmFsdWUgJHt2YWx1ZX0gbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15TdHJlYW0kL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBvYmplY3RUeXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgICAgICAgaWYgKG9iamVjdFR5cGUgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUucGlwZSAhPT0gXCJmdW5jdGlvblwiICYmIC8vIE5vZGVKUy5SZWFkYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50ZWUgIT09IFwiZnVuY3Rpb25cIiAmJiAvLyBicm93c2VyIFJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSAmJlxuICAgICAgICAgICAgICAgICFBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgLy8gRmlsZSBvYmplY3RzIGNvdW50IGFzIGEgdHlwZSBvZiBCbG9iLCBzbyB3ZSB3YW50IHRvIHVzZSBpbnN0YW5jZW9mIGV4cGxpY2l0bHlcbiAgICAgICAgICAgICAgICAhKCh0eXBlb2YgQmxvYiA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBCbG9iID09PSBcIm9iamVjdFwiKSAmJiB2YWx1ZSBpbnN0YW5jZW9mIEJsb2IpICYmXG4gICAgICAgICAgICAgICAgb2JqZWN0VHlwZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYSBzdHJpbmcsIEJsb2IsIEFycmF5QnVmZmVyLCBBcnJheUJ1ZmZlclZpZXcsIFJlYWRhYmxlU3RyZWFtLCBvciAoKSA9PiBSZWFkYWJsZVN0cmVhbS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVFbnVtVHlwZShvYmplY3ROYW1lLCBhbGxvd2VkVmFsdWVzLCB2YWx1ZSkge1xuICAgIGlmICghYWxsb3dlZFZhbHVlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBwcm92aWRlIGEgc2V0IG9mIGFsbG93ZWRWYWx1ZXMgdG8gdmFsaWRhdGUgJHtvYmplY3ROYW1lfSBhcyBhbiBFbnVtIFR5cGUuYCk7XG4gICAgfVxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGFsbG93ZWRWYWx1ZXMuc29tZSgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0udmFsdWVPZigpID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtID09PSB2YWx1ZTtcbiAgICB9KTtcbiAgICBpZiAoIWlzUHJlc2VudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWV9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciAke29iamVjdE5hbWV9LiBUaGUgdmFsaWQgdmFsdWVzIGFyZTogJHtKU09OLnN0cmluZ2lmeShhbGxvd2VkVmFsdWVzKX0uYCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUJ5dGVBcnJheVR5cGUob2JqZWN0TmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBvZiB0eXBlIFVpbnQ4QXJyYXkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBiYXNlNjQuZW5jb2RlQnl0ZUFycmF5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQmFzZTY0VXJsVHlwZShvYmplY3ROYW1lLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIG9mIHR5cGUgVWludDhBcnJheS5gKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGJ1ZmZlclRvQmFzZTY0VXJsKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplRGF0ZVR5cGVzKHR5cGVOYW1lLCB2YWx1ZSwgb2JqZWN0TmFtZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlTmFtZS5tYXRjaCgvXkRhdGUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhbiBpbnN0YW5jZW9mIERhdGUgb3IgYSBzdHJpbmcgaW4gSVNPODYwMSBmb3JtYXQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9XG4gICAgICAgICAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWUudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApXG4gICAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXkRhdGVUaW1lJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIgJiYgIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYW4gaW5zdGFuY2VvZiBEYXRlIG9yIGEgc3RyaW5nIGluIElTTzg2MDEgZm9ybWF0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15EYXRlVGltZVJmYzExMjMkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhbiBpbnN0YW5jZW9mIERhdGUgb3IgYSBzdHJpbmcgaW4gUkZDLTExMjMgZm9ybWF0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZS50b1VUQ1N0cmluZygpIDogbmV3IERhdGUodmFsdWUpLnRvVVRDU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15Vbml4VGltZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgdmFsdWUudmFsdWVPZigpID09PSBcInN0cmluZ1wiICYmICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGFuIGluc3RhbmNlb2YgRGF0ZSBvciBhIHN0cmluZyBpbiBSRkMtMTEyMy9JU084NjAxIGZvcm1hdCBgICtcbiAgICAgICAgICAgICAgICAgICAgYGZvciBpdCB0byBiZSBzZXJpYWxpemVkIGluIFVuaXhUaW1lL0Vwb2NoIGZvcm1hdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlID0gZGF0ZVRvVW5peFRpbWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eVGltZVNwYW4kL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISgwLCB1dGlsc19qc18xLmlzRHVyYXRpb24pKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGEgc3RyaW5nIGluIElTTyA4NjAxIGZvcm1hdC4gSW5zdGVhZCB3YXMgXCIke3ZhbHVlfVwiLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZVNlcXVlbmNlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgaXNYbWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgb2YgdHlwZSBBcnJheS5gKTtcbiAgICB9XG4gICAgbGV0IGVsZW1lbnRUeXBlID0gbWFwcGVyLnR5cGUuZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnRUeXBlIHx8IHR5cGVvZiBlbGVtZW50VHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGVsZW1lbnRcIiBtZXRhZGF0YSBmb3IgYW4gQXJyYXkgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBgICtcbiAgICAgICAgICAgIGBtYXBwZXIgYW5kIGl0IG11c3Qgb2YgdHlwZSBcIm9iamVjdFwiIGluICR7b2JqZWN0TmFtZX0uYCk7XG4gICAgfVxuICAgIC8vIFF1aXJrOiBDb21wb3NpdGUgbWFwcGVycyByZWZlcmVuY2VkIGJ5IGBlbGVtZW50YCBtaWdodFxuICAgIC8vIG5vdCBoYXZlICphbGwqIHByb3BlcnRpZXMgZGVjbGFyZWQgKGxpa2UgdWJlclBhcmVudCksXG4gICAgLy8gc28gbGV0J3MgdHJ5IHRvIGxvb2sgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiBieSBuYW1lLlxuICAgIGlmIChlbGVtZW50VHlwZS50eXBlLm5hbWUgPT09IFwiQ29tcG9zaXRlXCIgJiYgZWxlbWVudFR5cGUudHlwZS5jbGFzc05hbWUpIHtcbiAgICAgICAgZWxlbWVudFR5cGUgPSAoX2EgPSBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1tlbGVtZW50VHlwZS50eXBlLmNsYXNzTmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGVsZW1lbnRUeXBlO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wQXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShlbGVtZW50VHlwZSwgb2JqZWN0W2ldLCBvYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKGlzWG1sICYmIGVsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZSkge1xuICAgICAgICAgICAgY29uc3QgeG1sbnNLZXkgPSBlbGVtZW50VHlwZS54bWxOYW1lc3BhY2VQcmVmaXhcbiAgICAgICAgICAgICAgICA/IGB4bWxuczoke2VsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZVByZWZpeH1gXG4gICAgICAgICAgICAgICAgOiBcInhtbG5zXCI7XG4gICAgICAgICAgICBpZiAoZWxlbWVudFR5cGUudHlwZS5uYW1lID09PSBcIkNvbXBvc2l0ZVwiKSB7XG4gICAgICAgICAgICAgICAgdGVtcEFycmF5W2ldID0gT2JqZWN0LmFzc2lnbih7fSwgc2VyaWFsaXplZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV1baW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbG5zS2V5XTogZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV0gPSB7fTtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV1bb3B0aW9ucy54bWwueG1sQ2hhcktleV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgICAgICAgICAgdGVtcEFycmF5W2ldW2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSB7IFt4bWxuc0tleV06IGVsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGVtcEFycmF5W2ldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wQXJyYXk7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgaXNYbWwsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBvZiB0eXBlIG9iamVjdC5gKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVUeXBlID0gbWFwcGVyLnR5cGUudmFsdWU7XG4gICAgaWYgKCF2YWx1ZVR5cGUgfHwgdHlwZW9mIHZhbHVlVHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwidmFsdWVcIiBtZXRhZGF0YSBmb3IgYSBEaWN0aW9uYXJ5IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICBgbWFwcGVyIGFuZCBpdCBtdXN0IG9mIHR5cGUgXCJvYmplY3RcIiBpbiAke29iamVjdE5hbWV9LmApO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wRGljdGlvbmFyeSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFZhbHVlID0gc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWVUeXBlLCBvYmplY3Rba2V5XSwgb2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IG5lZWRzIGFuIFhNTCBuYW1lc3BhY2Ugd2UgbmVlZCB0byBhZGQgaXQgd2l0aGluIHRoZSAkIHByb3BlcnR5XG4gICAgICAgIHRlbXBEaWN0aW9uYXJ5W2tleV0gPSBnZXRYbWxPYmplY3RWYWx1ZSh2YWx1ZVR5cGUsIHNlcmlhbGl6ZWRWYWx1ZSwgaXNYbWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvLyBBZGQgdGhlIG5hbWVzcGFjZSB0byB0aGUgcm9vdCBlbGVtZW50IGlmIG5lZWRlZFxuICAgIGlmIChpc1htbCAmJiBtYXBwZXIueG1sTmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnN0IHhtbG5zS2V5ID0gbWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeCA/IGB4bWxuczoke21hcHBlci54bWxOYW1lc3BhY2VQcmVmaXh9YCA6IFwieG1sbnNcIjtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGVtcERpY3Rpb25hcnk7XG4gICAgICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sbnNLZXldOiBtYXBwZXIueG1sTmFtZXNwYWNlIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wRGljdGlvbmFyeTtcbn1cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIHByb3BlcnR5IGZyb20gYSByZWZlcmVuY2VkIG1hcHBlclxuICogQHBhcmFtIHNlcmlhbGl6ZXIgLSB0aGUgc2VyaWFsaXplciBjb250YWluaW5nIHRoZSBlbnRpcmUgc2V0IG9mIG1hcHBlcnNcbiAqIEBwYXJhbSBtYXBwZXIgLSB0aGUgY29tcG9zaXRlIG1hcHBlciB0byByZXNvbHZlXG4gKiBAcGFyYW0gb2JqZWN0TmFtZSAtIG5hbWUgb2YgdGhlIG9iamVjdCBiZWluZyBzZXJpYWxpemVkXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBZGRpdGlvbmFsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpIHtcbiAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllcyA9IG1hcHBlci50eXBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIGlmICghYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgbWFwcGVyLnR5cGUuY2xhc3NOYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsTWFwcGVyID0gcmVzb2x2ZVJlZmVyZW5jZWRNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsTWFwcGVyID09PSBudWxsIHx8IG1vZGVsTWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2RlbE1hcHBlci50eXBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICByZXR1cm4gYWRkaXRpb25hbFByb3BlcnRpZXM7XG59XG4vKipcbiAqIEZpbmRzIHRoZSBtYXBwZXIgcmVmZXJlbmNlZCBieSBjbGFzc05hbWVcbiAqIEBwYXJhbSBzZXJpYWxpemVyIC0gdGhlIHNlcmlhbGl6ZXIgY29udGFpbmluZyB0aGUgZW50aXJlIHNldCBvZiBtYXBwZXJzXG4gKiBAcGFyYW0gbWFwcGVyIC0gdGhlIGNvbXBvc2l0ZSBtYXBwZXIgdG8gcmVzb2x2ZVxuICogQHBhcmFtIG9iamVjdE5hbWUgLSBuYW1lIG9mIHRoZSBvYmplY3QgYmVpbmcgc2VyaWFsaXplZFxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVmZXJlbmNlZE1hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBtYXBwZXIudHlwZS5jbGFzc05hbWU7XG4gICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbGFzcyBuYW1lIGZvciBtb2RlbCBcIiR7b2JqZWN0TmFtZX1cIiBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIG1hcHBlciBcIiR7SlNPTi5zdHJpbmdpZnkobWFwcGVyLCB1bmRlZmluZWQsIDIpfVwiLmApO1xuICAgIH1cbiAgICByZXR1cm4gc2VyaWFsaXplci5tb2RlbE1hcHBlcnNbY2xhc3NOYW1lXTtcbn1cbi8qKlxuICogUmVzb2x2ZXMgYSBjb21wb3NpdGUgbWFwcGVyJ3MgbW9kZWxQcm9wZXJ0aWVzLlxuICogQHBhcmFtIHNlcmlhbGl6ZXIgLSB0aGUgc2VyaWFsaXplciBjb250YWluaW5nIHRoZSBlbnRpcmUgc2V0IG9mIG1hcHBlcnNcbiAqIEBwYXJhbSBtYXBwZXIgLSB0aGUgY29tcG9zaXRlIG1hcHBlciB0byByZXNvbHZlXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNb2RlbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKSB7XG4gICAgbGV0IG1vZGVsUHJvcHMgPSBtYXBwZXIudHlwZS5tb2RlbFByb3BlcnRpZXM7XG4gICAgaWYgKCFtb2RlbFByb3BzKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsTWFwcGVyID0gcmVzb2x2ZVJlZmVyZW5jZWRNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgaWYgKCFtb2RlbE1hcHBlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXBwZXIoKSBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQgZm9yIG1vZGVsIFwiJHttYXBwZXIudHlwZS5jbGFzc05hbWV9XCIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgbW9kZWxQcm9wcyA9IG1vZGVsTWFwcGVyID09PSBudWxsIHx8IG1vZGVsTWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2RlbE1hcHBlci50eXBlLm1vZGVsUHJvcGVydGllcztcbiAgICAgICAgaWYgKCFtb2RlbFByb3BzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1vZGVsUHJvcGVydGllcyBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQgaW4gdGhlIGAgK1xuICAgICAgICAgICAgICAgIGBtYXBwZXIgXCIke0pTT04uc3RyaW5naWZ5KG1vZGVsTWFwcGVyKX1cIiBvZiB0eXBlIFwiJHttYXBwZXIudHlwZS5jbGFzc05hbWV9XCIgZm9yIG9iamVjdCBcIiR7b2JqZWN0TmFtZX1cIi5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWxQcm9wcztcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUNvbXBvc2l0ZVR5cGUoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIGlzWG1sLCBvcHRpb25zKSB7XG4gICAgaWYgKGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclJlY3Vyc2l2ZWx5KHNlcmlhbGl6ZXIsIG1hcHBlcikpIHtcbiAgICAgICAgbWFwcGVyID0gZ2V0UG9seW1vcnBoaWNNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3QsIFwiY2xpZW50TmFtZVwiKTtcbiAgICB9XG4gICAgaWYgKG9iamVjdCAhPT0gdW5kZWZpbmVkICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0ge307XG4gICAgICAgIGNvbnN0IG1vZGVsUHJvcHMgPSByZXNvbHZlTW9kZWxQcm9wZXJ0aWVzKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0TmFtZSk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsUHJvcHMpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU1hcHBlciA9IG1vZGVsUHJvcHNba2V5XTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcHBlci5yZWFkT25seSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHByb3BOYW1lO1xuICAgICAgICAgICAgbGV0IHBhcmVudE9iamVjdCA9IHBheWxvYWQ7XG4gICAgICAgICAgICBpZiAoc2VyaWFsaXplci5pc1hNTCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcHBlci54bWxJc1dyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgPSBwcm9wZXJ0eU1hcHBlci54bWxOYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgPSBwcm9wZXJ0eU1hcHBlci54bWxFbGVtZW50TmFtZSB8fCBwcm9wZXJ0eU1hcHBlci54bWxOYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gc3BsaXRTZXJpYWxpemVOYW1lKHByb3BlcnR5TWFwcGVyLnNlcmlhbGl6ZWROYW1lKTtcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IHBhdGhzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGF0aE5hbWUgb2YgcGF0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRPYmplY3QgPSBwYXJlbnRPYmplY3RbcGF0aE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNoaWxkT2JqZWN0ID09PSB1bmRlZmluZWQgfHwgY2hpbGRPYmplY3QgPT09IG51bGwpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKG9iamVjdFtrZXldICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0W2tleV0gIT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBwZXIuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3RbcGF0aE5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0ID0gcGFyZW50T2JqZWN0W3BhdGhOYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50T2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgcGFyZW50T2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzWG1sICYmIG1hcHBlci54bWxOYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sbnNLZXkgPSBtYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICA/IGB4bWxuczoke21hcHBlci54bWxOYW1lc3BhY2VQcmVmaXh9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcInhtbG5zXCI7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRPYmplY3RbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSksIHsgW3htbG5zS2V5XTogbWFwcGVyLnhtbE5hbWVzcGFjZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlPYmplY3ROYW1lID0gcHJvcGVydHlNYXBwZXIuc2VyaWFsaXplZE5hbWUgIT09IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgPyBvYmplY3ROYW1lICsgXCIuXCIgKyBwcm9wZXJ0eU1hcHBlci5zZXJpYWxpemVkTmFtZVxuICAgICAgICAgICAgICAgICAgICA6IG9iamVjdE5hbWU7XG4gICAgICAgICAgICAgICAgbGV0IHRvU2VyaWFsaXplID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yID0gZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yUmVjdXJzaXZlbHkoc2VyaWFsaXplciwgbWFwcGVyKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNEaXNjcmltaW5hdG9yICYmXG4gICAgICAgICAgICAgICAgICAgIHBvbHltb3JwaGljRGlzY3JpbWluYXRvci5jbGllbnROYW1lID09PSBrZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHRvU2VyaWFsaXplID09PSB1bmRlZmluZWQgfHwgdG9TZXJpYWxpemUgPT09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvU2VyaWFsaXplID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlciwgdG9TZXJpYWxpemUsIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BOYW1lICE9PSB1bmRlZmluZWQgJiYgcHJvcE5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRYbWxPYmplY3RWYWx1ZShwcm9wZXJ0eU1hcHBlciwgc2VyaWFsaXplZFZhbHVlLCBpc1htbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1htbCAmJiBwcm9wZXJ0eU1hcHBlci54bWxJc0F0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MX0FUVFJLRVksIGkuZS4sICQgaXMgdGhlIGtleSBhdHRyaWJ1dGVzIGFyZSBrZXB0IHVuZGVyIGluIHhtbDJqcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMga2VlcHMgdGhpbmdzIHNpbXBsZSB3aGlsZSBwcmV2ZW50aW5nIG5hbWUgY29sbGlzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIG5hbWVzIGluIHVzZXIgZG9jdW1lbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSBwYXJlbnRPYmplY3RbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldW3Byb3BOYW1lXSA9IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1htbCAmJiBwcm9wZXJ0eU1hcHBlci54bWxJc1dyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtwcm9wTmFtZV0gPSB7IFtwcm9wZXJ0eU1hcHBlci54bWxFbGVtZW50TmFtZV06IHZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3RbcHJvcE5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIgPSByZXNvbHZlQWRkaXRpb25hbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhtb2RlbFByb3BzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2xpZW50UHJvcE5hbWUgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNBZGRpdGlvbmFsUHJvcGVydHkgPSBwcm9wTmFtZXMuZXZlcnkoKHBuKSA9PiBwbiAhPT0gY2xpZW50UHJvcE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc0FkZGl0aW9uYWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkW2NsaWVudFByb3BOYW1lXSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyLCBvYmplY3RbY2xpZW50UHJvcE5hbWVdLCBvYmplY3ROYW1lICsgJ1tcIicgKyBjbGllbnRQcm9wTmFtZSArICdcIl0nLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG5mdW5jdGlvbiBnZXRYbWxPYmplY3RWYWx1ZShwcm9wZXJ0eU1hcHBlciwgc2VyaWFsaXplZFZhbHVlLCBpc1htbCwgb3B0aW9ucykge1xuICAgIGlmICghaXNYbWwgfHwgIXByb3BlcnR5TWFwcGVyLnhtbE5hbWVzcGFjZSkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCB4bWxuc0tleSA9IHByb3BlcnR5TWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeFxuICAgICAgICA/IGB4bWxuczoke3Byb3BlcnR5TWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeH1gXG4gICAgICAgIDogXCJ4bWxuc1wiO1xuICAgIGNvbnN0IHhtbE5hbWVzcGFjZSA9IHsgW3htbG5zS2V5XTogcHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlIH07XG4gICAgaWYgKFtcIkNvbXBvc2l0ZVwiXS5pbmNsdWRlcyhwcm9wZXJ0eU1hcHBlci50eXBlLm5hbWUpKSB7XG4gICAgICAgIGlmIChzZXJpYWxpemVkVmFsdWVbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIHNlcmlhbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICByZXN1bHRbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHhtbE5hbWVzcGFjZTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgcmVzdWx0W29wdGlvbnMueG1sLnhtbENoYXJLZXldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geG1sTmFtZXNwYWNlO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBpc1NwZWNpYWxYbWxQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gW2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWSwgb3B0aW9ucy54bWwueG1sQ2hhcktleV0uaW5jbHVkZXMocHJvcGVydHlOYW1lKTtcbn1cbmZ1bmN0aW9uIGRlc2VyaWFsaXplQ29tcG9zaXRlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgeG1sQ2hhcktleSA9IChfYSA9IG9wdGlvbnMueG1sLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWTtcbiAgICBpZiAoZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yUmVjdXJzaXZlbHkoc2VyaWFsaXplciwgbWFwcGVyKSkge1xuICAgICAgICBtYXBwZXIgPSBnZXRQb2x5bW9ycGhpY01hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgXCJzZXJpYWxpemVkTmFtZVwiKTtcbiAgICB9XG4gICAgY29uc3QgbW9kZWxQcm9wcyA9IHJlc29sdmVNb2RlbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICBsZXQgaW5zdGFuY2UgPSB7fTtcbiAgICBjb25zdCBoYW5kbGVkUHJvcGVydHlOYW1lcyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsUHJvcHMpKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5TWFwcGVyID0gbW9kZWxQcm9wc1trZXldO1xuICAgICAgICBjb25zdCBwYXRocyA9IHNwbGl0U2VyaWFsaXplTmFtZShtb2RlbFByb3BzW2tleV0uc2VyaWFsaXplZE5hbWUpO1xuICAgICAgICBoYW5kbGVkUHJvcGVydHlOYW1lcy5wdXNoKHBhdGhzWzBdKTtcbiAgICAgICAgY29uc3QgeyBzZXJpYWxpemVkTmFtZSwgeG1sTmFtZSwgeG1sRWxlbWVudE5hbWUgfSA9IHByb3BlcnR5TWFwcGVyO1xuICAgICAgICBsZXQgcHJvcGVydHlPYmplY3ROYW1lID0gb2JqZWN0TmFtZTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZWROYW1lICE9PSBcIlwiICYmIHNlcmlhbGl6ZWROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb3BlcnR5T2JqZWN0TmFtZSA9IG9iamVjdE5hbWUgKyBcIi5cIiArIHNlcmlhbGl6ZWROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlckNvbGxlY3Rpb25QcmVmaXggPSBwcm9wZXJ0eU1hcHBlci5oZWFkZXJDb2xsZWN0aW9uUHJlZml4O1xuICAgICAgICBpZiAoaGVhZGVyQ29sbGVjdGlvblByZWZpeCkge1xuICAgICAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2VCb2R5KSkge1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXJLZXkuc3RhcnRzV2l0aChoZWFkZXJDb2xsZWN0aW9uUHJlZml4KSkge1xuICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W2hlYWRlcktleS5zdWJzdHJpbmcoaGVhZGVyQ29sbGVjdGlvblByZWZpeC5sZW5ndGgpXSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIudHlwZS52YWx1ZSwgcmVzcG9uc2VCb2R5W2hlYWRlcktleV0sIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhhbmRsZWRQcm9wZXJ0eU5hbWVzLnB1c2goaGVhZGVyS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBkaWN0aW9uYXJ5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlcmlhbGl6ZXIuaXNYTUwpIHtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcHBlci54bWxJc0F0dHJpYnV0ZSAmJiByZXNwb25zZUJvZHlbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSkge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCByZXNwb25zZUJvZHlbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXVt4bWxOYW1lXSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzTXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keVt4bWxDaGFyS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSByZXNwb25zZUJvZHlbeG1sQ2hhcktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiByZXNwb25zZUJvZHkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB4bWwgcGFyc2VyIHBhcnNlcyBcIjxOYW1lPmNvbnRlbnQ8L05hbWU+XCIgaW50byBKU09OIG9mXG4gICAgICAgICAgICAgICAgICAgIC8vICAgYHsgbmFtZTogXCJjb250ZW50XCJ9YCBpbnN0ZWFkIG9mIGB7IG5hbWU6IHsgXCJfXCI6IFwiY29udGVudFwiIH19YFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gcmVzcG9uc2VCb2R5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IHhtbEVsZW1lbnROYW1lIHx8IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzV3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAvKiBhIGxpc3Qgb2YgPHhtbEVsZW1lbnROYW1lPiB3cmFwcGVkIGJ5IDx4bWxOYW1lPlxuICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgeG1sIGV4YW1wbGUgYmVsb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb3JzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29yc1J1bGU+Li4uPC9Db3JzUnVsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPENvcnNSdWxlPi4uLjwvQ29yc1J1bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NvcnM+XG4gICAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3BvbnNlQm9keSBoYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcnNSdWxlOiBbey4uLn0sIHsuLi59XVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgeG1sTmFtZSBpcyBcIkNvcnNcIiBhbmQgeG1sRWxlbWVudE5hbWUgaXNcIkNvcnNSdWxlXCIuXG4gICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWQgPSByZXNwb25zZUJvZHlbeG1sTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRMaXN0ID0gKF9iID0gd3JhcHBlZCA9PT0gbnVsbCB8fCB3cmFwcGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cmFwcGVkW3htbEVsZW1lbnROYW1lXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW107XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCBlbGVtZW50TGlzdCwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlZFByb3BlcnR5TmFtZXMucHVzaCh4bWxOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcmVzcG9uc2VCb2R5W3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCBwcm9wZXJ0eSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlZFByb3BlcnR5TmFtZXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRlc2VyaWFsaXplIHRoZSBwcm9wZXJ0eSBpZiBpdCBpcyBwcmVzZW50IGluIHRoZSBwcm92aWRlZCByZXNwb25zZUJvZHkgaW5zdGFuY2VcbiAgICAgICAgICAgIGxldCBwcm9wZXJ0eUluc3RhbmNlO1xuICAgICAgICAgICAgbGV0IHJlcyA9IHJlc3BvbnNlQm9keTtcbiAgICAgICAgICAgIC8vIHRyYXZlcnNpbmcgdGhlIG9iamVjdCBzdGVwIGJ5IHN0ZXAuXG4gICAgICAgICAgICBsZXQgc3RlcHMgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXMpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIHN0ZXBzKys7XG4gICAgICAgICAgICAgICAgcmVzID0gcmVzW2l0ZW1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb25seSBhY2NlcHQgbnVsbCB3aGVuIHJlYWNoaW5nIHRoZSBsYXN0IHBvc2l0aW9uIG9mIG9iamVjdCBvdGhlcndpc2UgaXQgd291bGQgYmUgdW5kZWZpbmVkXG4gICAgICAgICAgICBpZiAocmVzID09PSBudWxsICYmIHN0ZXBzIDwgcGF0aHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvcGVydHlJbnN0YW5jZSA9IHJlcztcbiAgICAgICAgICAgIGNvbnN0IHBvbHltb3JwaGljRGlzY3JpbWluYXRvciA9IG1hcHBlci50eXBlLnBvbHltb3JwaGljRGlzY3JpbWluYXRvcjtcbiAgICAgICAgICAgIC8vIGNoZWNraW5nIHRoYXQgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUgKGtleSkoZXg6IFwiZmlzaHR5cGVcIikgYW5kIHRoZVxuICAgICAgICAgICAgLy8gY2xpZW50TmFtZSBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIHttZXRhZGF0YX0gKGV4OiBcImZpc2h0eXBlXCIpXG4gICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBzZXJpYWxpemVkTmFtZSBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIChleDogXCJmaXNoLnR5cGVcIilcbiAgICAgICAgICAgIC8vIGlzIGEgYmV0dGVyIGFwcHJvYWNoLiBUaGUgZ2VuZXJhdG9yIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggZXNjYXBpbmcgJ1xcLicgaW4gdGhlXG4gICAgICAgICAgICAvLyBzZXJpYWxpemVkTmFtZSBvZiB0aGUgcHJvcGVydHkgKGV4OiBcImZpc2hcXC50eXBlXCIpIHRoYXQgaXMgbWFya2VkIGFzIHBvbHltb3JwaGljIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgc2VyaWFsaXplZE5hbWUgb2YgdGhlIG1ldGFkYXRhIHBvbHltb3JwaGljRGlzY3JpbWluYXRvciAoZXg6IFwiZmlzaC50eXBlXCIpLiBIb3dldmVyLFxuICAgICAgICAgICAgLy8gdGhlIGNsaWVudE5hbWUgdHJhbnNmb3JtYXRpb24gb2YgdGhlIHBvbHltb3JwaGljRGlzY3JpbWluYXRvciAoZXg6IFwiZmlzaHR5cGVcIikgYW5kXG4gICAgICAgICAgICAvLyB0aGUgdHJhbnNmb3JtYXRpb24gb2YgbW9kZWwgcHJvcGVydHkgbmFtZSAoZXg6IFwiZmlzaHR5cGVcIikgaXMgZG9uZSBjb25zaXN0ZW50bHkuXG4gICAgICAgICAgICAvLyBIZW5jZSwgaXQgaXMgYSBzYWZlciBiZXQgdG8gcmVseSBvbiB0aGUgY2xpZW50TmFtZSBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yLlxuICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljRGlzY3JpbWluYXRvciAmJlxuICAgICAgICAgICAgICAgIGtleSA9PT0gcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yLmNsaWVudE5hbWUgJiZcbiAgICAgICAgICAgICAgICAocHJvcGVydHlJbnN0YW5jZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BlcnR5SW5zdGFuY2UgPT09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlJbnN0YW5jZSA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgICAgICAvLyBwYWdpbmdcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlQm9keVtrZXldKSAmJiBtb2RlbFByb3BzW2tleV0uc2VyaWFsaXplZE5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUluc3RhbmNlID0gcmVzcG9uc2VCb2R5W2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlJbnN0YW5jZSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHByb3BlcnR5SW5zdGFuY2UsIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gQ29weSBvdmVyIGFueSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgaW50byB0aGUgaW5zdGFuY2UsIHdoZXJlIHRoZXkgZG9cbiAgICAgICAgICAgICAgICAvLyBub3QgZXhpc3Qgb24gdGhlIG5ld2x5IGRlLXNlcmlhbGl6ZWQgYXJyYXlcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJyYXlJbnN0YW5jZSwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5SW5zdGFuY2Vba10gPSB2O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gYXJyYXlJbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5SW5zdGFuY2UgIT09IHVuZGVmaW5lZCB8fCBwcm9wZXJ0eU1hcHBlci5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRWYWx1ZSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHByb3BlcnR5SW5zdGFuY2UsIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc01hcHBlciA9IG1hcHBlci50eXBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIGlmIChhZGRpdGlvbmFsUHJvcGVydGllc01hcHBlcikge1xuICAgICAgICBjb25zdCBpc0FkZGl0aW9uYWxQcm9wZXJ0eSA9IChyZXNwb25zZVByb3BOYW1lKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNsaWVudFByb3BOYW1lIGluIG1vZGVsUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IHNwbGl0U2VyaWFsaXplTmFtZShtb2RlbFByb3BzW2NsaWVudFByb3BOYW1lXS5zZXJpYWxpemVkTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHBhdGhzWzBdID09PSByZXNwb25zZVByb3BOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCByZXNwb25zZVByb3BOYW1lIGluIHJlc3BvbnNlQm9keSkge1xuICAgICAgICAgICAgaWYgKGlzQWRkaXRpb25hbFByb3BlcnR5KHJlc3BvbnNlUHJvcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VbcmVzcG9uc2VQcm9wTmFtZV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyLCByZXNwb25zZUJvZHlbcmVzcG9uc2VQcm9wTmFtZV0sIG9iamVjdE5hbWUgKyAnW1wiJyArIHJlc3BvbnNlUHJvcE5hbWUgKyAnXCJdJywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAocmVzcG9uc2VCb2R5ICYmICFvcHRpb25zLmlnbm9yZVVua25vd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlQm9keSkpIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhaGFuZGxlZFByb3BlcnR5TmFtZXMuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAgICAgICAgICFpc1NwZWNpYWxYbWxQcm9wZXJ0eShrZXksIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHJlc3BvbnNlQm9keVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGRlc2VyaWFsaXplRGljdGlvbmFyeVR5cGUoc2VyaWFsaXplciwgbWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIG9wdGlvbnMpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgY29uc3QgdmFsdWUgPSBtYXBwZXIudHlwZS52YWx1ZTtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwidmFsdWVcIiBtZXRhZGF0YSBmb3IgYSBEaWN0aW9uYXJ5IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICBgbWFwcGVyIGFuZCBpdCBtdXN0IG9mIHR5cGUgXCJvYmplY3RcIiBpbiAke29iamVjdE5hbWV9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZUJvZHkpIHtcbiAgICAgICAgY29uc3QgdGVtcERpY3Rpb25hcnkgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2VCb2R5KSkge1xuICAgICAgICAgICAgdGVtcERpY3Rpb25hcnlba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodmFsdWUsIHJlc3BvbnNlQm9keVtrZXldLCBvYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVtcERpY3Rpb25hcnk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZUJvZHk7XG59XG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVNlcXVlbmNlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBsZXQgZWxlbWVudCA9IG1hcHBlci50eXBlLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8IHR5cGVvZiBlbGVtZW50ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZWxlbWVudFwiIG1ldGFkYXRhIGZvciBhbiBBcnJheSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGAgK1xuICAgICAgICAgICAgYG1hcHBlciBhbmQgaXQgbXVzdCBvZiB0eXBlIFwib2JqZWN0XCIgaW4gJHtvYmplY3ROYW1lfWApO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2VCb2R5KSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZUJvZHkpKSB7XG4gICAgICAgICAgICAvLyB4bWwyanMgd2lsbCBpbnRlcnByZXQgYSBzaW5nbGUgZWxlbWVudCBhcnJheSBhcyBqdXN0IHRoZSBlbGVtZW50LCBzbyBmb3JjZSBpdCB0byBiZSBhbiBhcnJheVxuICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gW3Jlc3BvbnNlQm9keV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUXVpcms6IENvbXBvc2l0ZSBtYXBwZXJzIHJlZmVyZW5jZWQgYnkgYGVsZW1lbnRgIG1pZ2h0XG4gICAgICAgIC8vIG5vdCBoYXZlICphbGwqIHByb3BlcnRpZXMgZGVjbGFyZWQgKGxpa2UgdWJlclBhcmVudCksXG4gICAgICAgIC8vIHNvIGxldCdzIHRyeSB0byBsb29rIHVwIHRoZSBmdWxsIGRlZmluaXRpb24gYnkgbmFtZS5cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZS5uYW1lID09PSBcIkNvbXBvc2l0ZVwiICYmIGVsZW1lbnQudHlwZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSAoX2EgPSBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1tlbGVtZW50LnR5cGUuY2xhc3NOYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZW1wQXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZUJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRlbXBBcnJheVtpXSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZWxlbWVudCwgcmVzcG9uc2VCb2R5W2ldLCBgJHtvYmplY3ROYW1lfVske2l9XWAsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wQXJyYXk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZUJvZHk7XG59XG5mdW5jdGlvbiBnZXRJbmRleERpc2NyaW1pbmF0b3IoZGlzY3JpbWluYXRvcnMsIGRpc2NyaW1pbmF0b3JWYWx1ZSwgdHlwZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlTmFtZXNUb0NoZWNrID0gW3R5cGVOYW1lXTtcbiAgICB3aGlsZSAodHlwZU5hbWVzVG9DaGVjay5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSB0eXBlTmFtZXNUb0NoZWNrLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IGluZGV4RGlzY3JpbWluYXRvciA9IGRpc2NyaW1pbmF0b3JWYWx1ZSA9PT0gY3VycmVudE5hbWVcbiAgICAgICAgICAgID8gZGlzY3JpbWluYXRvclZhbHVlXG4gICAgICAgICAgICA6IGN1cnJlbnROYW1lICsgXCIuXCIgKyBkaXNjcmltaW5hdG9yVmFsdWU7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGlzY3JpbWluYXRvcnMsIGluZGV4RGlzY3JpbWluYXRvcikpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yc1tpbmRleERpc2NyaW1pbmF0b3JdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgbWFwcGVyXSBvZiBPYmplY3QuZW50cmllcyhkaXNjcmltaW5hdG9ycykpIHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKGN1cnJlbnROYW1lICsgXCIuXCIpICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcHBlci50eXBlLnViZXJQYXJlbnQgPT09IGN1cnJlbnROYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcHBlci50eXBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZXNUb0NoZWNrLnB1c2gobWFwcGVyLnR5cGUuY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFBvbHltb3JwaGljTWFwcGVyKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0LCBwb2x5bW9ycGhpY1Byb3BlcnR5TmFtZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgPSBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpO1xuICAgIGlmIChwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IpIHtcbiAgICAgICAgbGV0IGRpc2NyaW1pbmF0b3JOYW1lID0gcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yW3BvbHltb3JwaGljUHJvcGVydHlOYW1lXTtcbiAgICAgICAgaWYgKGRpc2NyaW1pbmF0b3JOYW1lKSB7XG4gICAgICAgICAgICAvLyBUaGUgc2VyaWFsaXplZE5hbWUgbWlnaHQgaGF2ZSBcXFxcLCB3aGljaCB3ZSBqdXN0IHdhbnQgdG8gaWdub3JlXG4gICAgICAgICAgICBpZiAocG9seW1vcnBoaWNQcm9wZXJ0eU5hbWUgPT09IFwic2VyaWFsaXplZE5hbWVcIikge1xuICAgICAgICAgICAgICAgIGRpc2NyaW1pbmF0b3JOYW1lID0gZGlzY3JpbWluYXRvck5hbWUucmVwbGFjZSgvXFxcXC9naSwgXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWUgPSBvYmplY3RbZGlzY3JpbWluYXRvck5hbWVdO1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSAoX2EgPSBtYXBwZXIudHlwZS51YmVyUGFyZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBtYXBwZXIudHlwZS5jbGFzc05hbWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRpc2NyaW1pbmF0b3JWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbHltb3JwaGljTWFwcGVyID0gZ2V0SW5kZXhEaXNjcmltaW5hdG9yKHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzLmRpc2NyaW1pbmF0b3JzLCBkaXNjcmltaW5hdG9yVmFsdWUsIHR5cGVOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNNYXBwZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVyID0gcG9seW1vcnBoaWNNYXBwZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXBwZXI7XG59XG5mdW5jdGlvbiBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpIHtcbiAgICByZXR1cm4gKG1hcHBlci50eXBlLnBvbHltb3JwaGljRGlzY3JpbWluYXRvciB8fFxuICAgICAgICBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JTYWZlbHkoc2VyaWFsaXplciwgbWFwcGVyLnR5cGUudWJlclBhcmVudCkgfHxcbiAgICAgICAgZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yU2FmZWx5KHNlcmlhbGl6ZXIsIG1hcHBlci50eXBlLmNsYXNzTmFtZSkpO1xufVxuZnVuY3Rpb24gZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yU2FmZWx5KHNlcmlhbGl6ZXIsIHR5cGVOYW1lKSB7XG4gICAgcmV0dXJuICh0eXBlTmFtZSAmJlxuICAgICAgICBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1t0eXBlTmFtZV0gJiZcbiAgICAgICAgc2VyaWFsaXplci5tb2RlbE1hcHBlcnNbdHlwZU5hbWVdLnR5cGUucG9seW1vcnBoaWNEaXNjcmltaW5hdG9yKTtcbn1cbi8qKlxuICogS25vd24gdHlwZXMgb2YgTWFwcGVyc1xuICovXG5leHBvcnRzLk1hcHBlclR5cGVOYW1lcyA9IHtcbiAgICBCYXNlNjRVcmw6IFwiQmFzZTY0VXJsXCIsXG4gICAgQm9vbGVhbjogXCJCb29sZWFuXCIsXG4gICAgQnl0ZUFycmF5OiBcIkJ5dGVBcnJheVwiLFxuICAgIENvbXBvc2l0ZTogXCJDb21wb3NpdGVcIixcbiAgICBEYXRlOiBcIkRhdGVcIixcbiAgICBEYXRlVGltZTogXCJEYXRlVGltZVwiLFxuICAgIERhdGVUaW1lUmZjMTEyMzogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICBEaWN0aW9uYXJ5OiBcIkRpY3Rpb25hcnlcIixcbiAgICBFbnVtOiBcIkVudW1cIixcbiAgICBOdW1iZXI6IFwiTnVtYmVyXCIsXG4gICAgT2JqZWN0OiBcIk9iamVjdFwiLFxuICAgIFNlcXVlbmNlOiBcIlNlcXVlbmNlXCIsXG4gICAgU3RyaW5nOiBcIlN0cmluZ1wiLFxuICAgIFN0cmVhbTogXCJTdHJlYW1cIixcbiAgICBUaW1lU3BhbjogXCJUaW1lU3BhblwiLFxuICAgIFVuaXhUaW1lOiBcIlVuaXhUaW1lXCIsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VyaWFsaXplci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0YXRlID0gdm9pZCAwO1xuLyoqXG4gKiBIb2xkcyB0aGUgc2luZ2xldG9uIG9wZXJhdGlvblJlcXVlc3RNYXAsIHRvIGJlIHNoYXJlZCBhY3Jvc3MgQ0pTIGFuZCBFU00gaW1wb3J0cy5cbiAqL1xuZXhwb3J0cy5zdGF0ZSA9IHtcbiAgICBvcGVyYXRpb25SZXF1ZXN0TWFwOiBuZXcgV2Vha01hcCgpLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YXRlLWNqcy5janMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyA9IGV4cG9ydHMuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIgPSB2b2lkIDA7XG5jb25zdCBzdGF0ZV9qc18xID0gcmVxdWlyZShcIi4vc3RhdGUuanNcIik7XG4vKipcbiAqIEBpbnRlcm5hbFxuICogUmV0cmlldmVzIHRoZSB2YWx1ZSB0byB1c2UgZm9yIGEgZ2l2ZW4gb3BlcmF0aW9uIGFyZ3VtZW50XG4gKiBAcGFyYW0gb3BlcmF0aW9uQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyBwYXNzZWQgZnJvbSB0aGUgZ2VuZXJhdGVkIGNsaWVudFxuICogQHBhcmFtIHBhcmFtZXRlciAtIFRoZSBwYXJhbWV0ZXIgZGVzY3JpcHRpb25cbiAqIEBwYXJhbSBmYWxsYmFja09iamVjdCAtIElmIHNvbWV0aGluZyBpc24ndCBmb3VuZCBpbiB0aGUgYXJndW1lbnRzIGJhZywgbG9vayBoZXJlLlxuICogIEdlbmVyYWxseSB1c2VkIHRvIGxvb2sgYXQgdGhlIHNlcnZpY2UgY2xpZW50IHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKG9wZXJhdGlvbkFyZ3VtZW50cywgcGFyYW1ldGVyLCBmYWxsYmFja09iamVjdCkge1xuICAgIGxldCBwYXJhbWV0ZXJQYXRoID0gcGFyYW1ldGVyLnBhcmFtZXRlclBhdGg7XG4gICAgY29uc3QgcGFyYW1ldGVyTWFwcGVyID0gcGFyYW1ldGVyLm1hcHBlcjtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHBhcmFtZXRlclBhdGggPSBbcGFyYW1ldGVyUGF0aF07XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtZXRlclBhdGgpKSB7XG4gICAgICAgIGlmIChwYXJhbWV0ZXJQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJNYXBwZXIuaXNDb25zdGFudCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1ldGVyTWFwcGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eVNlYXJjaFJlc3VsdCA9IGdldFByb3BlcnR5RnJvbVBhcmFtZXRlclBhdGgob3BlcmF0aW9uQXJndW1lbnRzLCBwYXJhbWV0ZXJQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5U2VhcmNoUmVzdWx0LnByb3BlcnR5Rm91bmQgJiYgZmFsbGJhY2tPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTZWFyY2hSZXN1bHQgPSBnZXRQcm9wZXJ0eUZyb21QYXJhbWV0ZXJQYXRoKGZhbGxiYWNrT2JqZWN0LCBwYXJhbWV0ZXJQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHVzZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlTZWFyY2hSZXN1bHQucHJvcGVydHlGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2VEZWZhdWx0VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyTWFwcGVyLnJlcXVpcmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmFtZXRlclBhdGhbMF0gPT09IFwib3B0aW9uc1wiICYmIHBhcmFtZXRlclBhdGgubGVuZ3RoID09PSAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1c2VEZWZhdWx0VmFsdWUgPyBwYXJhbWV0ZXJNYXBwZXIuZGVmYXVsdFZhbHVlIDogcHJvcGVydHlTZWFyY2hSZXN1bHQucHJvcGVydHlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHBhcmFtZXRlck1hcHBlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBwYXJhbWV0ZXJQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU1hcHBlciA9IHBhcmFtZXRlck1hcHBlci50eXBlLm1vZGVsUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlQYXRoID0gcGFyYW1ldGVyUGF0aFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKG9wZXJhdGlvbkFyZ3VtZW50cywge1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlclBhdGg6IHByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICBtYXBwZXI6IHByb3BlcnR5TWFwcGVyLFxuICAgICAgICAgICAgfSwgZmFsbGJhY2tPYmplY3QpO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlciA9IGdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyO1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlGcm9tUGFyYW1ldGVyUGF0aChwYXJlbnQsIHBhcmFtZXRlclBhdGgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7IHByb3BlcnR5Rm91bmQ6IGZhbHNlIH07XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoOyBpIDwgcGFyYW1ldGVyUGF0aC5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJQYXRoUGFydCA9IHBhcmFtZXRlclBhdGhbaV07XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0byBjaGVjayBpbmhlcml0ZWQgcHJvcGVydGllcyB0b28sIHNvIGRvbid0IHVzZSBoYXNPd25Qcm9wZXJ0eSgpLlxuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmFtZXRlclBhdGhQYXJ0IGluIHBhcmVudCkge1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W3BhcmFtZXRlclBhdGhQYXJ0XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpID09PSBwYXJhbWV0ZXJQYXRoLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHJvcGVydHlWYWx1ZSA9IHBhcmVudDtcbiAgICAgICAgcmVzdWx0LnByb3BlcnR5Rm91bmQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuY29uc3Qgb3JpZ2luYWxSZXF1ZXN0U3ltYm9sID0gU3ltYm9sLmZvcihcIkBhenVyZS9jb3JlLWNsaWVudCBvcmlnaW5hbCByZXF1ZXN0XCIpO1xuZnVuY3Rpb24gaGFzT3JpZ2luYWxSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICByZXR1cm4gb3JpZ2luYWxSZXF1ZXN0U3ltYm9sIGluIHJlcXVlc3Q7XG59XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyhyZXF1ZXN0KSB7XG4gICAgaWYgKGhhc09yaWdpbmFsUmVxdWVzdChyZXF1ZXN0KSkge1xuICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8ocmVxdWVzdFtvcmlnaW5hbFJlcXVlc3RTeW1ib2xdKTtcbiAgICB9XG4gICAgbGV0IGluZm8gPSBzdGF0ZV9qc18xLnN0YXRlLm9wZXJhdGlvblJlcXVlc3RNYXAuZ2V0KHJlcXVlc3QpO1xuICAgIGlmICghaW5mbykge1xuICAgICAgICBpbmZvID0ge307XG4gICAgICAgIHN0YXRlX2pzXzEuc3RhdGUub3BlcmF0aW9uUmVxdWVzdE1hcC5zZXQocmVxdWVzdCwgaW5mbyk7XG4gICAgfVxuICAgIHJldHVybiBpbmZvO1xufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyA9IGdldE9wZXJhdGlvblJlcXVlc3RJbmZvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uSGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeSA9IGV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmNvbnN0IGludGVyZmFjZXNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZXMuanNcIik7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuY29uc3Qgc2VyaWFsaXplcl9qc18xID0gcmVxdWlyZShcIi4vc2VyaWFsaXplci5qc1wiKTtcbmNvbnN0IG9wZXJhdGlvbkhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbkhlbHBlcnMuanNcIik7XG5jb25zdCBkZWZhdWx0SnNvbkNvbnRlbnRUeXBlcyA9IFtcImFwcGxpY2F0aW9uL2pzb25cIiwgXCJ0ZXh0L2pzb25cIl07XG5jb25zdCBkZWZhdWx0WG1sQ29udGVudFR5cGVzID0gW1wiYXBwbGljYXRpb24veG1sXCIsIFwiYXBwbGljYXRpb24vYXRvbSt4bWxcIl07XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgZGVzZXJpYWxpemF0aW9uUG9saWN5LlxuICovXG5leHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBcImRlc2VyaWFsaXphdGlvblBvbGljeVwiO1xuLyoqXG4gKiBUaGlzIHBvbGljeSBoYW5kbGVzIHBhcnNpbmcgb3V0IHJlc3BvbnNlcyBhY2NvcmRpbmcgdG8gT3BlcmF0aW9uU3BlY3Mgb24gdGhlIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGRlc2VyaWFsaXphdGlvblBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgY29uc3QganNvbkNvbnRlbnRUeXBlcyA9IChfYiA9IChfYSA9IG9wdGlvbnMuZXhwZWN0ZWRDb250ZW50VHlwZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5qc29uKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkZWZhdWx0SnNvbkNvbnRlbnRUeXBlcztcbiAgICBjb25zdCB4bWxDb250ZW50VHlwZXMgPSAoX2QgPSAoX2MgPSBvcHRpb25zLmV4cGVjdGVkQ29udGVudFR5cGVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MueG1sKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBkZWZhdWx0WG1sQ29udGVudFR5cGVzO1xuICAgIGNvbnN0IHBhcnNlWE1MID0gb3B0aW9ucy5wYXJzZVhNTDtcbiAgICBjb25zdCBzZXJpYWxpemVyT3B0aW9ucyA9IG9wdGlvbnMuc2VyaWFsaXplck9wdGlvbnM7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgIHhtbDoge1xuICAgICAgICAgICAgcm9vdE5hbWU6IChfZSA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IFwiXCIsXG4gICAgICAgICAgICBpbmNsdWRlUm9vdDogKF9mID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogZmFsc2UsXG4gICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2cgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplUmVzcG9uc2VCb2R5KGpzb25Db250ZW50VHlwZXMsIHhtbENvbnRlbnRUeXBlcywgcmVzcG9uc2UsIHVwZGF0ZWRPcHRpb25zLCBwYXJzZVhNTCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5ID0gZGVzZXJpYWxpemF0aW9uUG9saWN5O1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uUmVzcG9uc2VNYXAocGFyc2VkUmVzcG9uc2UpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IHJlcXVlc3QgPSBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbkluZm8gPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvKShyZXF1ZXN0KTtcbiAgICBjb25zdCBvcGVyYXRpb25TcGVjID0gb3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblNwZWM7XG4gICAgaWYgKG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgaWYgKCEob3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblJlc3BvbnNlR2V0dGVyKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uU3BlYy5yZXNwb25zZXNbcGFyc2VkUmVzcG9uc2Uuc3RhdHVzXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5vcGVyYXRpb25SZXNwb25zZUdldHRlcihvcGVyYXRpb25TcGVjLCBwYXJzZWRSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHNob3VsZERlc2VyaWFsaXplUmVzcG9uc2UocGFyc2VkUmVzcG9uc2UpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gcGFyc2VkUmVzcG9uc2UucmVxdWVzdDtcbiAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocmVxdWVzdCk7XG4gICAgY29uc3Qgc2hvdWxkRGVzZXJpYWxpemUgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8uc2hvdWxkRGVzZXJpYWxpemU7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoc2hvdWxkRGVzZXJpYWxpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2hvdWxkRGVzZXJpYWxpemUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJlc3VsdCA9IHNob3VsZERlc2VyaWFsaXplO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gc2hvdWxkRGVzZXJpYWxpemUocGFyc2VkUmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuYXN5bmMgZnVuY3Rpb24gZGVzZXJpYWxpemVSZXNwb25zZUJvZHkoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCByZXNwb25zZSwgb3B0aW9ucywgcGFyc2VYTUwpIHtcbiAgICBjb25zdCBwYXJzZWRSZXNwb25zZSA9IGF3YWl0IHBhcnNlKGpzb25Db250ZW50VHlwZXMsIHhtbENvbnRlbnRUeXBlcywgcmVzcG9uc2UsIG9wdGlvbnMsIHBhcnNlWE1MKTtcbiAgICBpZiAoIXNob3VsZERlc2VyaWFsaXplUmVzcG9uc2UocGFyc2VkUmVzcG9uc2UpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWRSZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uSW5mbyA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8pKHBhcnNlZFJlc3BvbnNlLnJlcXVlc3QpO1xuICAgIGNvbnN0IG9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYztcbiAgICBpZiAoIW9wZXJhdGlvblNwZWMgfHwgIW9wZXJhdGlvblNwZWMucmVzcG9uc2VzKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWRSZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2VTcGVjID0gZ2V0T3BlcmF0aW9uUmVzcG9uc2VNYXAocGFyc2VkUmVzcG9uc2UpO1xuICAgIGNvbnN0IHsgZXJyb3IsIHNob3VsZFJldHVyblJlc3BvbnNlIH0gPSBoYW5kbGVFcnJvclJlc3BvbnNlKHBhcnNlZFJlc3BvbnNlLCBvcGVyYXRpb25TcGVjLCByZXNwb25zZVNwZWMsIG9wdGlvbnMpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2hvdWxkUmV0dXJuUmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICAgIH1cbiAgICAvLyBBbiBvcGVyYXRpb24gcmVzcG9uc2Ugc3BlYyBkb2VzIGV4aXN0IGZvciBjdXJyZW50IHN0YXR1cyBjb2RlLCBzb1xuICAgIC8vIHVzZSBpdCB0byBkZXNlcmlhbGl6ZSB0aGUgcmVzcG9uc2UuXG4gICAgaWYgKHJlc3BvbnNlU3BlYykge1xuICAgICAgICBpZiAocmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZVRvRGVzZXJpYWxpemUgPSBwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5O1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMuaXNYTUwgJiYgcmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIudHlwZS5uYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVUb0Rlc2VyaWFsaXplID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlVG9EZXNlcmlhbGl6ZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVRvRGVzZXJpYWxpemVbcmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIueG1sRWxlbWVudE5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5ID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc3BvbnNlU3BlYy5ib2R5TWFwcGVyLCB2YWx1ZVRvRGVzZXJpYWxpemUsIFwib3BlcmF0aW9uUmVzLnBhcnNlZEJvZHlcIiwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZGVzZXJpYWxpemVFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RFcnJvciA9IG5ldyBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5SZXN0RXJyb3IoYEVycm9yICR7ZGVzZXJpYWxpemVFcnJvcn0gb2NjdXJyZWQgaW4gZGVzZXJpYWxpemluZyB0aGUgcmVzcG9uc2VCb2R5IC0gJHtwYXJzZWRSZXNwb25zZS5ib2R5QXNUZXh0fWAsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcGFyc2VkUmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogcGFyc2VkUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzdEVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wZXJhdGlvblNwZWMuaHR0cE1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgICAgICAgIC8vIGhlYWQgbWV0aG9kcyBuZXZlciBoYXZlIGEgYm9keSwgYnV0IHdlIHJldHVybiBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgcHJlc2VuY2UvYWJzZW5jZSBvZiB0aGUgcmVzb3VyY2VcbiAgICAgICAgICAgIHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHkgPSByZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2VTcGVjLmhlYWRlcnNNYXBwZXIpIHtcbiAgICAgICAgICAgIHBhcnNlZFJlc3BvbnNlLnBhcnNlZEhlYWRlcnMgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzcG9uc2VTcGVjLmhlYWRlcnNNYXBwZXIsIHBhcnNlZFJlc3BvbnNlLmhlYWRlcnMudG9KU09OKCksIFwib3BlcmF0aW9uUmVzLnBhcnNlZEhlYWRlcnNcIiwgeyB4bWw6IHt9LCBpZ25vcmVVbmtub3duUHJvcGVydGllczogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkUmVzcG9uc2U7XG59XG5mdW5jdGlvbiBpc09wZXJhdGlvblNwZWNFbXB0eShvcGVyYXRpb25TcGVjKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRTdGF0dXNDb2RlcyA9IE9iamVjdC5rZXlzKG9wZXJhdGlvblNwZWMucmVzcG9uc2VzKTtcbiAgICByZXR1cm4gKGV4cGVjdGVkU3RhdHVzQ29kZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIChleHBlY3RlZFN0YXR1c0NvZGVzLmxlbmd0aCA9PT0gMSAmJiBleHBlY3RlZFN0YXR1c0NvZGVzWzBdID09PSBcImRlZmF1bHRcIikpO1xufVxuZnVuY3Rpb24gaGFuZGxlRXJyb3JSZXNwb25zZShwYXJzZWRSZXNwb25zZSwgb3BlcmF0aW9uU3BlYywgcmVzcG9uc2VTcGVjLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGlzU3VjY2Vzc0J5U3RhdHVzID0gMjAwIDw9IHBhcnNlZFJlc3BvbnNlLnN0YXR1cyAmJiBwYXJzZWRSZXNwb25zZS5zdGF0dXMgPCAzMDA7XG4gICAgY29uc3QgaXNFeHBlY3RlZFN0YXR1c0NvZGUgPSBpc09wZXJhdGlvblNwZWNFbXB0eShvcGVyYXRpb25TcGVjKVxuICAgICAgICA/IGlzU3VjY2Vzc0J5U3RhdHVzXG4gICAgICAgIDogISFyZXNwb25zZVNwZWM7XG4gICAgaWYgKGlzRXhwZWN0ZWRTdGF0dXNDb2RlKSB7XG4gICAgICAgIGlmIChyZXNwb25zZVNwZWMpIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VTcGVjLmlzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCwgc2hvdWxkUmV0dXJuUmVzcG9uc2U6IGZhbHNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCwgc2hvdWxkUmV0dXJuUmVzcG9uc2U6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZXJyb3JSZXNwb25zZVNwZWMgPSByZXNwb25zZVNwZWMgIT09IG51bGwgJiYgcmVzcG9uc2VTcGVjICE9PSB2b2lkIDAgPyByZXNwb25zZVNwZWMgOiBvcGVyYXRpb25TcGVjLnJlc3BvbnNlcy5kZWZhdWx0O1xuICAgIGNvbnN0IGluaXRpYWxFcnJvck1lc3NhZ2UgPSAoKF9hID0gcGFyc2VkUmVzcG9uc2UucmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGFzKHBhcnNlZFJlc3BvbnNlLnN0YXR1cykpXG4gICAgICAgID8gYFVuZXhwZWN0ZWQgc3RhdHVzIGNvZGU6ICR7cGFyc2VkUmVzcG9uc2Uuc3RhdHVzfWBcbiAgICAgICAgOiBwYXJzZWRSZXNwb25zZS5ib2R5QXNUZXh0O1xuICAgIGNvbnN0IGVycm9yID0gbmV3IGNvcmVfcmVzdF9waXBlbGluZV8xLlJlc3RFcnJvcihpbml0aWFsRXJyb3JNZXNzYWdlLCB7XG4gICAgICAgIHN0YXR1c0NvZGU6IHBhcnNlZFJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgcmVxdWVzdDogcGFyc2VkUmVzcG9uc2UucmVxdWVzdCxcbiAgICAgICAgcmVzcG9uc2U6IHBhcnNlZFJlc3BvbnNlLFxuICAgIH0pO1xuICAgIC8vIElmIHRoZSBpdGVtIGZhaWxlZCBidXQgdGhlcmUncyBubyBlcnJvciBzcGVjIG9yIGRlZmF1bHQgc3BlYyB0byBkZXNlcmlhbGl6ZSB0aGUgZXJyb3IsXG4gICAgLy8gd2Ugc2hvdWxkIGZhaWwgc28gd2UganVzdCB0aHJvdyB0aGUgcGFyc2VkIHJlc3BvbnNlXG4gICAgaWYgKCFlcnJvclJlc3BvbnNlU3BlYykge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdEJvZHlNYXBwZXIgPSBlcnJvclJlc3BvbnNlU3BlYy5ib2R5TWFwcGVyO1xuICAgIGNvbnN0IGRlZmF1bHRIZWFkZXJzTWFwcGVyID0gZXJyb3JSZXNwb25zZVNwZWMuaGVhZGVyc01hcHBlcjtcbiAgICB0cnkge1xuICAgICAgICAvLyBJZiBlcnJvciByZXNwb25zZSBoYXMgYSBib2R5LCB0cnkgdG8gZGVzZXJpYWxpemUgaXQgdXNpbmcgZGVmYXVsdCBib2R5IG1hcHBlci5cbiAgICAgICAgLy8gVGhlbiB0cnkgdG8gZXh0cmFjdCBlcnJvciBjb2RlICYgbWVzc2FnZSBmcm9tIGl0XG4gICAgICAgIGlmIChwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkUmVzcG9uc2UucGFyc2VkQm9keTtcbiAgICAgICAgICAgIGxldCBkZXNlcmlhbGl6ZWRFcnJvcjtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0Qm9keU1hcHBlcikge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZVRvRGVzZXJpYWxpemUgPSBwYXJzZWRCb2R5O1xuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb25TcGVjLmlzWE1MICYmIGRlZmF1bHRCb2R5TWFwcGVyLnR5cGUubmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvRGVzZXJpYWxpemUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudE5hbWUgPSBkZWZhdWx0Qm9keU1hcHBlci54bWxFbGVtZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZWRCb2R5ID09PSBcIm9iamVjdFwiICYmIGVsZW1lbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvRGVzZXJpYWxpemUgPSBwYXJzZWRCb2R5W2VsZW1lbnROYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRFcnJvciA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShkZWZhdWx0Qm9keU1hcHBlciwgdmFsdWVUb0Rlc2VyaWFsaXplLCBcImVycm9yLnJlc3BvbnNlLnBhcnNlZEJvZHlcIiwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5hbEVycm9yID0gcGFyc2VkQm9keS5lcnJvciB8fCBkZXNlcmlhbGl6ZWRFcnJvciB8fCBwYXJzZWRCb2R5O1xuICAgICAgICAgICAgZXJyb3IuY29kZSA9IGludGVybmFsRXJyb3IuY29kZTtcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbEVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gaW50ZXJuYWxFcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlZmF1bHRCb2R5TWFwcGVyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UucGFyc2VkQm9keSA9IGRlc2VyaWFsaXplZEVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIGVycm9yIHJlc3BvbnNlIGhhcyBoZWFkZXJzLCB0cnkgdG8gZGVzZXJpYWxpemUgaXQgdXNpbmcgZGVmYXVsdCBoZWFkZXIgbWFwcGVyXG4gICAgICAgIGlmIChwYXJzZWRSZXNwb25zZS5oZWFkZXJzICYmIGRlZmF1bHRIZWFkZXJzTWFwcGVyKSB7XG4gICAgICAgICAgICBlcnJvci5yZXNwb25zZS5wYXJzZWRIZWFkZXJzID1cbiAgICAgICAgICAgICAgICBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZGVmYXVsdEhlYWRlcnNNYXBwZXIsIHBhcnNlZFJlc3BvbnNlLmhlYWRlcnMudG9KU09OKCksIFwib3BlcmF0aW9uUmVzLnBhcnNlZEhlYWRlcnNcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGRlZmF1bHRFcnJvcikge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gYEVycm9yIFwiJHtkZWZhdWx0RXJyb3IubWVzc2FnZX1cIiBvY2N1cnJlZCBpbiBkZXNlcmlhbGl6aW5nIHRoZSByZXNwb25zZUJvZHkgLSBcIiR7cGFyc2VkUmVzcG9uc2UuYm9keUFzVGV4dH1cIiBmb3IgdGhlIGRlZmF1bHQgcmVzcG9uc2UuYDtcbiAgICB9XG4gICAgcmV0dXJuIHsgZXJyb3IsIHNob3VsZFJldHVyblJlc3BvbnNlOiBmYWxzZSB9O1xufVxuYXN5bmMgZnVuY3Rpb24gcGFyc2UoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCBvcGVyYXRpb25SZXNwb25zZSwgb3B0cywgcGFyc2VYTUwpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCEoKF9hID0gb3BlcmF0aW9uUmVzcG9uc2UucmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGFzKG9wZXJhdGlvblJlc3BvbnNlLnN0YXR1cykpICYmXG4gICAgICAgIG9wZXJhdGlvblJlc3BvbnNlLmJvZHlBc1RleHQpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IG9wZXJhdGlvblJlc3BvbnNlLmJvZHlBc1RleHQ7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gb3BlcmF0aW9uUmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikgfHwgXCJcIjtcbiAgICAgICAgY29uc3QgY29udGVudENvbXBvbmVudHMgPSAhY29udGVudFR5cGVcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogY29udGVudFR5cGUuc3BsaXQoXCI7XCIpLm1hcCgoY29tcG9uZW50KSA9PiBjb21wb25lbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoY29udGVudENvbXBvbmVudHMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgICAgY29udGVudENvbXBvbmVudHMuc29tZSgoY29tcG9uZW50KSA9PiBqc29uQ29udGVudFR5cGVzLmluZGV4T2YoY29tcG9uZW50KSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UucGFyc2VkQm9keSA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29udGVudENvbXBvbmVudHMuc29tZSgoY29tcG9uZW50KSA9PiB4bWxDb250ZW50VHlwZXMuaW5kZXhPZihjb21wb25lbnQpICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlWE1MKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNpbmcgWE1MIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgcGFyc2VYTUwodGV4dCwgb3B0cy54bWwpO1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlc3BvbnNlLnBhcnNlZEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25SZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgRXJyb3IgXCIke2Vycn1cIiBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSByZXNwb25zZSBib2R5IC0gJHtvcGVyYXRpb25SZXNwb25zZS5ib2R5QXNUZXh0fS5gO1xuICAgICAgICAgICAgY29uc3QgZXJyQ29kZSA9IGVyci5jb2RlIHx8IGNvcmVfcmVzdF9waXBlbGluZV8xLlJlc3RFcnJvci5QQVJTRV9FUlJPUjtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgY29yZV9yZXN0X3BpcGVsaW5lXzEuUmVzdEVycm9yKG1zZywge1xuICAgICAgICAgICAgICAgIGNvZGU6IGVyckNvZGUsXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogb3BlcmF0aW9uUmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IG9wZXJhdGlvblJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IG9wZXJhdGlvblJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRpb25SZXNwb25zZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlc2VyaWFsaXphdGlvblBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyID0gZXhwb3J0cy5nZXRTdHJlYW1pbmdSZXNwb25zZVN0YXR1c0NvZGVzID0gdm9pZCAwO1xuY29uc3Qgc2VyaWFsaXplcl9qc18xID0gcmVxdWlyZShcIi4vc2VyaWFsaXplci5qc1wiKTtcbi8qKlxuICogR2V0cyB0aGUgbGlzdCBvZiBzdGF0dXMgY29kZXMgZm9yIHN0cmVhbWluZyByZXNwb25zZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2RlcyhvcGVyYXRpb25TcGVjKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3Qgc3RhdHVzQ29kZSBpbiBvcGVyYXRpb25TcGVjLnJlc3BvbnNlcykge1xuICAgICAgICBjb25zdCBvcGVyYXRpb25SZXNwb25zZSA9IG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW3N0YXR1c0NvZGVdO1xuICAgICAgICBpZiAob3BlcmF0aW9uUmVzcG9uc2UuYm9keU1hcHBlciAmJlxuICAgICAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UuYm9keU1hcHBlci50eXBlLm5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU3RyZWFtKSB7XG4gICAgICAgICAgICByZXN1bHQuYWRkKE51bWJlcihzdGF0dXNDb2RlKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2RlcyA9IGdldFN0cmVhbWluZ1Jlc3BvbnNlU3RhdHVzQ29kZXM7XG4vKipcbiAqIEdldCB0aGUgcGF0aCB0byB0aGlzIHBhcmFtZXRlcidzIHZhbHVlIGFzIGEgZG90dGVkIHN0cmluZyAoYS5iLmMpLlxuICogQHBhcmFtIHBhcmFtZXRlciAtIFRoZSBwYXJhbWV0ZXIgdG8gZ2V0IHRoZSBwYXRoIHN0cmluZyBmb3IuXG4gKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGlzIHBhcmFtZXRlcidzIHZhbHVlIGFzIGEgZG90dGVkIHN0cmluZy5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcihwYXJhbWV0ZXIpIHtcbiAgICBjb25zdCB7IHBhcmFtZXRlclBhdGgsIG1hcHBlciB9ID0gcGFyYW1ldGVyO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJlc3VsdCA9IHBhcmFtZXRlclBhdGg7XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVyUGF0aCkpIHtcbiAgICAgICAgcmVzdWx0ID0gcGFyYW1ldGVyUGF0aC5qb2luKFwiLlwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIgPSBnZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyZmFjZUhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXJpYWxpemVSZXF1ZXN0Qm9keSA9IGV4cG9ydHMuc2VyaWFsaXplSGVhZGVycyA9IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeSA9IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSB2b2lkIDA7XG5jb25zdCBpbnRlcmZhY2VzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VzLmpzXCIpO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IHNlcmlhbGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6ZXIuanNcIik7XG5jb25zdCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VIZWxwZXJzLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHNlcmlhbGl6YXRpb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBcInNlcmlhbGl6YXRpb25Qb2xpY3lcIjtcbi8qKlxuICogVGhpcyBwb2xpY3kgaGFuZGxlcyBhc3NlbWJsaW5nIHRoZSByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMgdXNpbmdcbiAqIGFuIE9wZXJhdGlvblNwZWMgYW5kIE9wZXJhdGlvbkFyZ3VtZW50cyBvbiB0aGUgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXphdGlvblBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdHJpbmdpZnlYTUwgPSBvcHRpb25zLnN0cmluZ2lmeVhNTDtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocmVxdWVzdCk7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25TcGVjID0gb3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblNwZWM7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25Bcmd1bWVudHMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uQXJndW1lbnRzO1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMgJiYgb3BlcmF0aW9uQXJndW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplSGVhZGVycyhyZXF1ZXN0LCBvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpO1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZVJlcXVlc3RCb2R5KHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYywgc3RyaW5naWZ5WE1MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3kgPSBzZXJpYWxpemF0aW9uUG9saWN5O1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplSGVhZGVycyhyZXF1ZXN0LCBvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmIChvcGVyYXRpb25TcGVjLmhlYWRlclBhcmFtZXRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXJQYXJhbWV0ZXIgb2Ygb3BlcmF0aW9uU3BlYy5oZWFkZXJQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBsZXQgaGVhZGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIGhlYWRlclBhcmFtZXRlcik7XG4gICAgICAgICAgICBpZiAoKGhlYWRlclZhbHVlICE9PSBudWxsICYmIGhlYWRlclZhbHVlICE9PSB1bmRlZmluZWQpIHx8IGhlYWRlclBhcmFtZXRlci5tYXBwZXIucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJWYWx1ZSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUoaGVhZGVyUGFyYW1ldGVyLm1hcHBlciwgaGVhZGVyVmFsdWUsICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGhlYWRlclBhcmFtZXRlcikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlckNvbGxlY3Rpb25QcmVmaXggPSBoZWFkZXJQYXJhbWV0ZXIubWFwcGVyXG4gICAgICAgICAgICAgICAgICAgIC5oZWFkZXJDb2xsZWN0aW9uUHJlZml4O1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXJDb2xsZWN0aW9uUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChoZWFkZXJDb2xsZWN0aW9uUHJlZml4ICsga2V5LCBoZWFkZXJWYWx1ZVtrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChoZWFkZXJQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lIHx8ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGhlYWRlclBhcmFtZXRlciksIGhlYWRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY3VzdG9tSGVhZGVycyA9IChfYiA9IChfYSA9IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVxdWVzdE9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jdXN0b21IZWFkZXJzO1xuICAgIGlmIChjdXN0b21IZWFkZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY3VzdG9tSGVhZGVyTmFtZSBvZiBPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJzKSkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChjdXN0b21IZWFkZXJOYW1lLCBjdXN0b21IZWFkZXJzW2N1c3RvbUhlYWRlck5hbWVdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuc2VyaWFsaXplSGVhZGVycyA9IHNlcmlhbGl6ZUhlYWRlcnM7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVSZXF1ZXN0Qm9keShyZXF1ZXN0LCBvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMsIHN0cmluZ2lmeVhNTCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJYTUwgc2VyaWFsaXphdGlvbiB1bnN1cHBvcnRlZCFcIik7XG59KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICBjb25zdCBzZXJpYWxpemVyT3B0aW9ucyA9IChfYSA9IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VyaWFsaXplck9wdGlvbnM7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgIHhtbDoge1xuICAgICAgICAgICAgcm9vdE5hbWU6IChfYiA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiXCIsXG4gICAgICAgICAgICBpbmNsdWRlUm9vdDogKF9jID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZmFsc2UsXG4gICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2QgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHhtbENoYXJLZXkgPSB1cGRhdGVkT3B0aW9ucy54bWwueG1sQ2hhcktleTtcbiAgICBpZiAob3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keSAmJiBvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5Lm1hcHBlcikge1xuICAgICAgICByZXF1ZXN0LmJvZHkgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkpO1xuICAgICAgICBjb25zdCBib2R5TWFwcGVyID0gb3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keS5tYXBwZXI7XG4gICAgICAgIGNvbnN0IHsgcmVxdWlyZWQsIHNlcmlhbGl6ZWROYW1lLCB4bWxOYW1lLCB4bWxFbGVtZW50TmFtZSwgeG1sTmFtZXNwYWNlLCB4bWxOYW1lc3BhY2VQcmVmaXgsIG51bGxhYmxlLCB9ID0gYm9keU1hcHBlcjtcbiAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBib2R5TWFwcGVyLnR5cGUubmFtZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICgocmVxdWVzdC5ib2R5ICE9PSB1bmRlZmluZWQgJiYgcmVxdWVzdC5ib2R5ICE9PSBudWxsKSB8fFxuICAgICAgICAgICAgICAgIChudWxsYWJsZSAmJiByZXF1ZXN0LmJvZHkgPT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keVBhcmFtZXRlclBhdGhTdHJpbmcgPSAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGJvZHlNYXBwZXIsIHJlcXVlc3QuYm9keSwgcmVxdWVzdEJvZHlQYXJhbWV0ZXJQYXRoU3RyaW5nLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTdHJlYW0gPSB0eXBlTmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TdHJlYW07XG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMuaXNYTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sbnNLZXkgPSB4bWxOYW1lc3BhY2VQcmVmaXggPyBgeG1sbnM6JHt4bWxOYW1lc3BhY2VQcmVmaXh9YCA6IFwieG1sbnNcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRYbWxWYWx1ZVdpdGhOYW1lc3BhY2UoeG1sTmFtZXNwYWNlLCB4bWxuc0tleSwgdHlwZU5hbWUsIHJlcXVlc3QuYm9keSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZU5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IHN0cmluZ2lmeVhNTChwcmVwYXJlWE1MUm9vdExpc3QodmFsdWUsIHhtbEVsZW1lbnROYW1lIHx8IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWUsIHhtbG5zS2V5LCB4bWxOYW1lc3BhY2UpLCB7IHJvb3ROYW1lOiB4bWxOYW1lIHx8IHNlcmlhbGl6ZWROYW1lLCB4bWxDaGFyS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc1N0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gc3RyaW5naWZ5WE1MKHZhbHVlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdE5hbWU6IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlN0cmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAoKChfZSA9IG9wZXJhdGlvblNwZWMuY29udGVudFR5cGUpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5tYXRjaChcInRleHQvcGxhaW5cIikpIHx8IG9wZXJhdGlvblNwZWMubWVkaWFUeXBlID09PSBcInRleHRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFN0cmluZyBzZXJpYWxpemVyIGhhcyB2YWxpZGF0ZWQgdGhhdCByZXF1ZXN0IGJvZHkgaXMgYSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gc28ganVzdCBzZW5kIHRoZSBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3QuYm9keSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBcIiR7ZXJyb3IubWVzc2FnZX1cIiBvY2N1cnJlZCBpbiBzZXJpYWxpemluZyB0aGUgcGF5bG9hZCAtICR7SlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZE5hbWUsIHVuZGVmaW5lZCwgXCIgIFwiKX0uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAob3BlcmF0aW9uU3BlYy5mb3JtRGF0YVBhcmFtZXRlcnMgJiYgb3BlcmF0aW9uU3BlYy5mb3JtRGF0YVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXF1ZXN0LmZvcm1EYXRhID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZm9ybURhdGFQYXJhbWV0ZXIgb2Ygb3BlcmF0aW9uU3BlYy5mb3JtRGF0YVBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhUGFyYW1ldGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIGZvcm1EYXRhUGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGlmIChmb3JtRGF0YVBhcmFtZXRlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgZm9ybURhdGFQYXJhbWV0ZXJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhUGFyYW1ldGVyUHJvcGVydHlOYW1lID0gZm9ybURhdGFQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lIHx8ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGZvcm1EYXRhUGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmZvcm1EYXRhW2Zvcm1EYXRhUGFyYW1ldGVyUHJvcGVydHlOYW1lXSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUoZm9ybURhdGFQYXJhbWV0ZXIubWFwcGVyLCBmb3JtRGF0YVBhcmFtZXRlclZhbHVlLCAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKShmb3JtRGF0YVBhcmFtZXRlciksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuc2VyaWFsaXplUmVxdWVzdEJvZHkgPSBzZXJpYWxpemVSZXF1ZXN0Qm9keTtcbi8qKlxuICogQWRkcyBhbiB4bWwgbmFtZXNwYWNlIHRvIHRoZSB4bWwgc2VyaWFsaXplZCBvYmplY3QgaWYgbmVlZGVkLCBvdGhlcndpc2UgaXQganVzdCByZXR1cm5zIHRoZSB2YWx1ZSBpdHNlbGZcbiAqL1xuZnVuY3Rpb24gZ2V0WG1sVmFsdWVXaXRoTmFtZXNwYWNlKHhtbE5hbWVzcGFjZSwgeG1sbnNLZXksIHR5cGVOYW1lLCBzZXJpYWxpemVkVmFsdWUsIG9wdGlvbnMpIHtcbiAgICAvLyBDb21wb3NpdGUgYW5kIFNlcXVlbmNlIHNjaGVtYXMgYWxyZWFkeSBnb3QgdGhlaXIgcm9vdCBuYW1lc3BhY2Ugc2V0IGR1cmluZyBzZXJpYWxpemF0aW9uXG4gICAgLy8gV2UganVzdCBuZWVkIHRvIGFkZCB4bWxucyB0byB0aGUgb3RoZXIgc2NoZW1hIHR5cGVzXG4gICAgaWYgKHhtbE5hbWVzcGFjZSAmJiAhW1wiQ29tcG9zaXRlXCIsIFwiU2VxdWVuY2VcIiwgXCJEaWN0aW9uYXJ5XCJdLmluY2x1ZGVzKHR5cGVOYW1lKSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgcmVzdWx0W29wdGlvbnMueG1sLnhtbENoYXJLZXldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICByZXN1bHRbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbG5zS2V5XTogeG1sTmFtZXNwYWNlIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWU7XG59XG5mdW5jdGlvbiBwcmVwYXJlWE1MUm9vdExpc3Qob2JqLCBlbGVtZW50TmFtZSwgeG1sTmFtZXNwYWNlS2V5LCB4bWxOYW1lc3BhY2UpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmogPSBbb2JqXTtcbiAgICB9XG4gICAgaWYgKCF4bWxOYW1lc3BhY2VLZXkgfHwgIXhtbE5hbWVzcGFjZSkge1xuICAgICAgICByZXR1cm4geyBbZWxlbWVudE5hbWVdOiBvYmogfTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0geyBbZWxlbWVudE5hbWVdOiBvYmogfTtcbiAgICByZXN1bHRbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbE5hbWVzcGFjZUtleV06IHhtbE5hbWVzcGFjZSB9O1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJpYWxpemF0aW9uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQ2xpZW50UGlwZWxpbmUgPSB2b2lkIDA7XG5jb25zdCBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qc1wiKTtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFBpcGVsaW5lIGZvciB1c2Ugd2l0aCBhIFNlcnZpY2UgQ2xpZW50LlxuICogQWRkcyBpbiBkZXNlcmlhbGl6YXRpb25Qb2xpY3kgYnkgZGVmYXVsdC5cbiAqIEFsc28gYWRkcyBpbiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5IGlmIHBhc3NlZCBhIFRva2VuQ3JlZGVudGlhbC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjdXN0b21pemUgdGhlIGNyZWF0ZWQgcGlwZWxpbmUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudFBpcGVsaW5lKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHBpcGVsaW5lID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMpKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9KTtcbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsT3B0aW9ucykge1xuICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kpKHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWw6IG9wdGlvbnMuY3JlZGVudGlhbE9wdGlvbnMuY3JlZGVudGlhbCxcbiAgICAgICAgICAgIHNjb3Blczogb3B0aW9ucy5jcmVkZW50aWFsT3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgc2VyaWFsaXphdGlvblBvbGljeV9qc18xLnNlcmlhbGl6YXRpb25Qb2xpY3kpKG9wdGlvbnMuc2VyaWFsaXphdGlvbk9wdGlvbnMpLCB7IHBoYXNlOiBcIlNlcmlhbGl6ZVwiIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGVzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuZGVzZXJpYWxpemF0aW9uUG9saWN5KShvcHRpb25zLmRlc2VyaWFsaXphdGlvbk9wdGlvbnMpLCB7XG4gICAgICAgIHBoYXNlOiBcIkRlc2VyaWFsaXplXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHBpcGVsaW5lO1xufVxuZXhwb3J0cy5jcmVhdGVDbGllbnRQaXBlbGluZSA9IGNyZWF0ZUNsaWVudFBpcGVsaW5lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZWxpbmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5sZXQgY2FjaGVkSHR0cENsaWVudDtcbmZ1bmN0aW9uIGdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50KCkge1xuICAgIGlmICghY2FjaGVkSHR0cENsaWVudCkge1xuICAgICAgICBjYWNoZWRIdHRwQ2xpZW50ID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50KSgpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkSHR0cENsaWVudDtcbn1cbmV4cG9ydHMuZ2V0Q2FjaGVkRGVmYXVsdEh0dHBDbGllbnQgPSBnZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBDbGllbnRDYWNoZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFwcGVuZFF1ZXJ5UGFyYW1zID0gZXhwb3J0cy5nZXRSZXF1ZXN0VXJsID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IGludGVyZmFjZUhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZUhlbHBlcnMuanNcIik7XG5jb25zdCBDb2xsZWN0aW9uRm9ybWF0VG9EZWxpbWl0ZXJNYXAgPSB7XG4gICAgQ1NWOiBcIixcIixcbiAgICBTU1Y6IFwiIFwiLFxuICAgIE11bHRpOiBcIk11bHRpXCIsXG4gICAgVFNWOiBcIlxcdFwiLFxuICAgIFBpcGVzOiBcInxcIixcbn07XG5mdW5jdGlvbiBnZXRSZXF1ZXN0VXJsKGJhc2VVcmksIG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpIHtcbiAgICBjb25zdCB1cmxSZXBsYWNlbWVudHMgPSBjYWxjdWxhdGVVcmxSZXBsYWNlbWVudHMob3BlcmF0aW9uU3BlYywgb3BlcmF0aW9uQXJndW1lbnRzLCBmYWxsYmFja09iamVjdCk7XG4gICAgbGV0IGlzQWJzb2x1dGVQYXRoID0gZmFsc2U7XG4gICAgbGV0IHJlcXVlc3RVcmwgPSByZXBsYWNlQWxsKGJhc2VVcmksIHVybFJlcGxhY2VtZW50cyk7XG4gICAgaWYgKG9wZXJhdGlvblNwZWMucGF0aCkge1xuICAgICAgICBsZXQgcGF0aCA9IHJlcGxhY2VBbGwob3BlcmF0aW9uU3BlYy5wYXRoLCB1cmxSZXBsYWNlbWVudHMpO1xuICAgICAgICAvLyBRVUlSSzogc29tZXRpbWVzIHdlIGdldCBhIHBhdGggY29tcG9uZW50IGxpa2UgL3tuZXh0TGlua31cbiAgICAgICAgLy8gd2hpY2ggbWF5IGJlIGEgZnVsbHkgZm9ybWVkIFVSTCB3aXRoIGEgbGVhZGluZyAvLiBJbiB0aGF0IGNhc2UsIHdlIHNob3VsZFxuICAgICAgICAvLyByZW1vdmUgdGhlIGxlYWRpbmcgL1xuICAgICAgICBpZiAob3BlcmF0aW9uU3BlYy5wYXRoID09PSBcIi97bmV4dExpbmt9XCIgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFFVSVJLOiBzb21ldGltZXMgd2UgZ2V0IGEgcGF0aCBjb21wb25lbnQgbGlrZSB7bmV4dExpbmt9XG4gICAgICAgIC8vIHdoaWNoIG1heSBiZSBhIGZ1bGx5IGZvcm1lZCBVUkwuIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkXG4gICAgICAgIC8vIGlnbm9yZSB0aGUgYmFzZVVyaS5cbiAgICAgICAgaWYgKGlzQWJzb2x1dGVVcmwocGF0aCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3RVcmwgPSBwYXRoO1xuICAgICAgICAgICAgaXNBYnNvbHV0ZVBhdGggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdFVybCA9IGFwcGVuZFBhdGgocmVxdWVzdFVybCwgcGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeyBxdWVyeVBhcmFtcywgc2VxdWVuY2VQYXJhbXMgfSA9IGNhbGN1bGF0ZVF1ZXJ5UGFyYW1ldGVycyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KTtcbiAgICAvKipcbiAgICAgKiBOb3RpY2UgdGhhdCB0aGlzIGNhbGwgc2V0cyB0aGUgYG5vT3ZlcndyaXRlYCBwYXJhbWV0ZXIgdG8gdHJ1ZSBpZiB0aGUgYHJlcXVlc3RVcmxgXG4gICAgICogaXMgYW4gYWJzb2x1dGUgcGF0aC4gVGhpcyBlbnN1cmVzIHRoYXQgZXhpc3RpbmcgcXVlcnkgcGFyYW1ldGVyIHZhbHVlcyBpbiBgcmVxdWVzdFVybGBcbiAgICAgKiBkbyBub3QgZ2V0IG92ZXJ3cml0dGVuLiBPbiB0aGUgb3RoZXIgaGFuZCB3aGVuIGByZXF1ZXN0VXJsYCBpcyBub3QgYWJzb2x1dGUgcGF0aCwgaXRcbiAgICAgKiBpcyBzdGlsbCBiZWluZyBidWlsdCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIG92ZXJ3cml0ZS5cbiAgICAgKi9cbiAgICByZXF1ZXN0VXJsID0gYXBwZW5kUXVlcnlQYXJhbXMocmVxdWVzdFVybCwgcXVlcnlQYXJhbXMsIHNlcXVlbmNlUGFyYW1zLCBpc0Fic29sdXRlUGF0aCk7XG4gICAgcmV0dXJuIHJlcXVlc3RVcmw7XG59XG5leHBvcnRzLmdldFJlcXVlc3RVcmwgPSBnZXRSZXF1ZXN0VXJsO1xuZnVuY3Rpb24gcmVwbGFjZUFsbChpbnB1dCwgcmVwbGFjZW1lbnRzKSB7XG4gICAgbGV0IHJlc3VsdCA9IGlucHV0O1xuICAgIGZvciAoY29uc3QgW3NlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWVdIG9mIHJlcGxhY2VtZW50cykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuc3BsaXQoc2VhcmNoVmFsdWUpLmpvaW4ocmVwbGFjZVZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZVVybFJlcGxhY2VtZW50cyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBpZiAoKF9hID0gb3BlcmF0aW9uU3BlYy51cmxQYXJhbWV0ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgdXJsUGFyYW1ldGVyIG9mIG9wZXJhdGlvblNwZWMudXJsUGFyYW1ldGVycykge1xuICAgICAgICAgICAgbGV0IHVybFBhcmFtZXRlclZhbHVlID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlcikob3BlcmF0aW9uQXJndW1lbnRzLCB1cmxQYXJhbWV0ZXIsIGZhbGxiYWNrT2JqZWN0KTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGhTdHJpbmcgPSAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKSh1cmxQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgdXJsUGFyYW1ldGVyVmFsdWUgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuc2VyaWFsaXplKHVybFBhcmFtZXRlci5tYXBwZXIsIHVybFBhcmFtZXRlclZhbHVlLCBwYXJhbWV0ZXJQYXRoU3RyaW5nKTtcbiAgICAgICAgICAgIGlmICghdXJsUGFyYW1ldGVyLnNraXBFbmNvZGluZykge1xuICAgICAgICAgICAgICAgIHVybFBhcmFtZXRlclZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHVybFBhcmFtZXRlclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zZXQoYHske3VybFBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgcGFyYW1ldGVyUGF0aFN0cmluZ319YCwgdXJsUGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBpc0Fic29sdXRlVXJsKHVybCkge1xuICAgIHJldHVybiB1cmwuaW5jbHVkZXMoXCI6Ly9cIik7XG59XG5mdW5jdGlvbiBhcHBlbmRQYXRoKHVybCwgcGF0aFRvQXBwZW5kKSB7XG4gICAgaWYgKCFwYXRoVG9BcHBlbmQpIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBuZXdQYXRoID0gcGFyc2VkVXJsLnBhdGhuYW1lO1xuICAgIGlmICghbmV3UGF0aC5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgbmV3UGF0aCA9IGAke25ld1BhdGh9L2A7XG4gICAgfVxuICAgIGlmIChwYXRoVG9BcHBlbmQuc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcGF0aFRvQXBwZW5kID0gcGF0aFRvQXBwZW5kLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoU3RhcnQgPSBwYXRoVG9BcHBlbmQuaW5kZXhPZihcIj9cIik7XG4gICAgaWYgKHNlYXJjaFN0YXJ0ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBwYXRoID0gcGF0aFRvQXBwZW5kLnN1YnN0cmluZygwLCBzZWFyY2hTdGFydCk7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IHBhdGhUb0FwcGVuZC5zdWJzdHJpbmcoc2VhcmNoU3RhcnQgKyAxKTtcbiAgICAgICAgbmV3UGF0aCA9IG5ld1BhdGggKyBwYXRoO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgICBwYXJzZWRVcmwuc2VhcmNoID0gcGFyc2VkVXJsLnNlYXJjaCA/IGAke3BhcnNlZFVybC5zZWFyY2h9JiR7c2VhcmNofWAgOiBzZWFyY2g7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG5ld1BhdGggPSBuZXdQYXRoICsgcGF0aFRvQXBwZW5kO1xuICAgIH1cbiAgICBwYXJzZWRVcmwucGF0aG5hbWUgPSBuZXdQYXRoO1xuICAgIHJldHVybiBwYXJzZWRVcmwudG9TdHJpbmcoKTtcbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZVF1ZXJ5UGFyYW1ldGVycyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBzZXF1ZW5jZVBhcmFtcyA9IG5ldyBTZXQoKTtcbiAgICBpZiAoKF9hID0gb3BlcmF0aW9uU3BlYy5xdWVyeVBhcmFtZXRlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBxdWVyeVBhcmFtZXRlciBvZiBvcGVyYXRpb25TcGVjLnF1ZXJ5UGFyYW1ldGVycykge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1ldGVyLm1hcHBlci50eXBlLm5hbWUgPT09IFwiU2VxdWVuY2VcIiAmJiBxdWVyeVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUpIHtcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZVBhcmFtcy5hZGQocXVlcnlQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBxdWVyeVBhcmFtZXRlclZhbHVlID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlcikob3BlcmF0aW9uQXJndW1lbnRzLCBxdWVyeVBhcmFtZXRlciwgZmFsbGJhY2tPYmplY3QpO1xuICAgICAgICAgICAgaWYgKChxdWVyeVBhcmFtZXRlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgcXVlcnlQYXJhbWV0ZXJWYWx1ZSAhPT0gbnVsbCkgfHxcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlci5tYXBwZXIucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLnNlcmlhbGl6ZShxdWVyeVBhcmFtZXRlci5tYXBwZXIsIHF1ZXJ5UGFyYW1ldGVyVmFsdWUsICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKHF1ZXJ5UGFyYW1ldGVyKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsaW1pdGVyID0gcXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdFxuICAgICAgICAgICAgICAgICAgICA/IENvbGxlY3Rpb25Gb3JtYXRUb0RlbGltaXRlck1hcFtxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0XVxuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBudWxsIGFuZCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJWYWx1ZSA9IHF1ZXJ5UGFyYW1ldGVyVmFsdWUubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXQgPT09IFwiTXVsdGlcIiAmJiBxdWVyeVBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShxdWVyeVBhcmFtZXRlclZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAocXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJTU1ZcIiB8fCBxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0ID09PSBcIlRTVlwiKSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5qb2luKGRlbGltaXRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcXVlcnlQYXJhbWV0ZXIuc2tpcEVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5UGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5UGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEpvaW4gcGlwZXMgYW5kIENTViAqYWZ0ZXIqIGVuY29kaW5nLCBvciB0aGUgc2VydmVyIHdpbGwgYmUgdXBzZXQuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbWV0ZXJWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHF1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXQgPT09IFwiQ1NWXCIgfHwgcXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJQaXBlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5qb2luKGRlbGltaXRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQocXVlcnlQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lIHx8ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKHF1ZXJ5UGFyYW1ldGVyKSwgcXVlcnlQYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgc2VxdWVuY2VQYXJhbXMsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHNpbXBsZVBhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgaWYgKCFxdWVyeVN0cmluZyB8fCBxdWVyeVN0cmluZ1swXSAhPT0gXCI/XCIpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHRoZSBsZWFkaW5nID9cbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnNsaWNlKDEpO1xuICAgIGNvbnN0IHBhaXJzID0gcXVlcnlTdHJpbmcuc3BsaXQoXCImXCIpO1xuICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gcGFpci5zcGxpdChcIj1cIiwgMik7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSByZXN1bHQuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1ZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChuYW1lLCBbZXhpc3RpbmdWYWx1ZSwgdmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBhcHBlbmRRdWVyeVBhcmFtcyh1cmwsIHF1ZXJ5UGFyYW1zLCBzZXF1ZW5jZVBhcmFtcywgbm9PdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgIGlmIChxdWVyeVBhcmFtcy5zaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKTtcbiAgICAvLyBRVUlSSzogcGFyc2VkVXJsLnNlYXJjaFBhcmFtcyB3aWxsIGhhdmUgdGhlaXIgbmFtZS92YWx1ZSBwYWlycyBkZWNvZGVkLCB3aGljaFxuICAgIC8vIGNhbiBjaGFuZ2UgdGhlaXIgbWVhbmluZyB0byB0aGUgc2VydmVyLCBzdWNoIGFzIGluIHRoZSBjYXNlIG9mIGEgU0FTIHNpZ25hdHVyZS5cbiAgICAvLyBUbyBhdm9pZCBhY2NpZGVudGFsbHkgdW4tZW5jb2RpbmcgYSBxdWVyeSBwYXJhbSwgd2UgcGFyc2UgdGhlIGtleS92YWx1ZXMgb3Vyc2VsdmVzXG4gICAgY29uc3QgY29tYmluZWRQYXJhbXMgPSBzaW1wbGVQYXJzZVF1ZXJ5UGFyYW1zKHBhcnNlZFVybC5zZWFyY2gpO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBxdWVyeVBhcmFtcykge1xuICAgICAgICBjb25zdCBleGlzdGluZ1ZhbHVlID0gY29tYmluZWRQYXJhbXMuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdWYWx1ZS5wdXNoKC4uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVNldCA9IG5ldyBTZXQoZXhpc3RpbmdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgY29tYmluZWRQYXJhbXMuc2V0KG5hbWUsIEFycmF5LmZyb20odmFsdWVTZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nVmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhpc3RpbmdWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUudW5zaGlmdChleGlzdGluZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlcXVlbmNlUGFyYW1zLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIGNvbWJpbmVkUGFyYW1zLnNldChuYW1lLCBbZXhpc3RpbmdWYWx1ZSwgdmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbm9PdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFBhcmFtcy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29tYmluZWRQYXJhbXMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzZWFyY2hQaWVjZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgY29tYmluZWRQYXJhbXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7bmFtZX09JHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgLy8gUVVJUks6IElmIHdlIGdldCBhbiBhcnJheSBvZiB2YWx1ZXMsIGluY2x1ZGUgbXVsdGlwbGUga2V5L3ZhbHVlIHBhaXJzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YlZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7bmFtZX09JHtzdWJWYWx1ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlYXJjaFBpZWNlcy5wdXNoKGAke25hbWV9PSR7dmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUVVJUks6IHdlIGhhdmUgdG8gc2V0IHNlYXJjaCBtYW51YWxseSBhcyBzZWFyY2hQYXJhbXMgd2lsbCBlbmNvZGUgY29tbWEgd2hlbiBpdCBzaG91bGRuJ3QuXG4gICAgcGFyc2VkVXJsLnNlYXJjaCA9IHNlYXJjaFBpZWNlcy5sZW5ndGggPyBgPyR7c2VhcmNoUGllY2VzLmpvaW4oXCImXCIpfWAgOiBcIlwiO1xuICAgIHJldHVybiBwYXJzZWRVcmwudG9TdHJpbmcoKTtcbn1cbmV4cG9ydHMuYXBwZW5kUXVlcnlQYXJhbXMgPSBhcHBlbmRRdWVyeVBhcmFtcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVybEhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2dnZXIgPSB2b2lkIDA7XG5jb25zdCBsb2dnZXJfMSA9IHJlcXVpcmUoXCJAYXp1cmUvbG9nZ2VyXCIpO1xuZXhwb3J0cy5sb2dnZXIgPSAoMCwgbG9nZ2VyXzEuY3JlYXRlQ2xpZW50TG9nZ2VyKShcImNvcmUtY2xpZW50XCIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VydmljZUNsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBwaXBlbGluZV9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmUuanNcIik7XG5jb25zdCB1dGlsc19qc18xID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBodHRwQ2xpZW50Q2FjaGVfanNfMSA9IHJlcXVpcmUoXCIuL2h0dHBDbGllbnRDYWNoZS5qc1wiKTtcbmNvbnN0IG9wZXJhdGlvbkhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbkhlbHBlcnMuanNcIik7XG5jb25zdCB1cmxIZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi91cmxIZWxwZXJzLmpzXCIpO1xuY29uc3QgaW50ZXJmYWNlSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlSGVscGVycy5qc1wiKTtcbmNvbnN0IGxvZ19qc18xID0gcmVxdWlyZShcIi4vbG9nLmpzXCIpO1xuLyoqXG4gKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU2VydmljZUNsaWVudC5cbiAqL1xuY2xhc3MgU2VydmljZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIFNlcnZpY2VDbGllbnQgY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbCAtIFRoZSBjcmVkZW50aWFscyB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHNlcnZpY2UgY2xpZW50IG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RDb250ZW50VHlwZSA9IG9wdGlvbnMucmVxdWVzdENvbnRlbnRUeXBlO1xuICAgICAgICB0aGlzLl9lbmRwb2ludCA9IChfYSA9IG9wdGlvbnMuZW5kcG9pbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG9wdGlvbnMuYmFzZVVyaTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYmFzZVVyaSkge1xuICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoXCJUaGUgYmFzZVVyaSBvcHRpb24gZm9yIFNESyBDbGllbnRzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgZW5kcG9pbnQgaW5zdGVhZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24gPSBvcHRpb25zLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uO1xuICAgICAgICB0aGlzLl9odHRwQ2xpZW50ID0gb3B0aW9ucy5odHRwQ2xpZW50IHx8ICgwLCBodHRwQ2xpZW50Q2FjaGVfanNfMS5nZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCkoKTtcbiAgICAgICAgdGhpcy5waXBlbGluZSA9IG9wdGlvbnMucGlwZWxpbmUgfHwgY3JlYXRlRGVmYXVsdFBpcGVsaW5lKG9wdGlvbnMpO1xuICAgICAgICBpZiAoKF9iID0gb3B0aW9ucy5hZGRpdGlvbmFsUG9saWNpZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBwb2xpY3ksIHBvc2l0aW9uIH0gb2Ygb3B0aW9ucy5hZGRpdGlvbmFsUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBTaWduIGhhcHBlbnMgYWZ0ZXIgUmV0cnkgYW5kIGlzIGNvbW1vbmx5IG5lZWRlZCB0byBvY2N1clxuICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBwb2xpY2llcyB0aGF0IGludGVyY2VwdCBwb3N0LXJldHJ5LlxuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUGhhc2UgPSBwb3NpdGlvbiA9PT0gXCJwZXJSZXRyeVwiID8gXCJTaWduXCIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5waXBlbGluZS5hZGRQb2xpY3kocG9saWN5LCB7XG4gICAgICAgICAgICAgICAgICAgIGFmdGVyUGhhc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCB0aGUgcHJvdmlkZWQgaHR0cFJlcXVlc3QuXG4gICAgICovXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZS5zZW5kUmVxdWVzdCh0aGlzLl9odHRwQ2xpZW50LCByZXF1ZXN0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCBhbiBIVFRQIHJlcXVlc3QgdGhhdCBpcyBwb3B1bGF0ZWQgdXNpbmcgdGhlIHByb3ZpZGVkIE9wZXJhdGlvblNwZWMuXG4gICAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGVkIHJlc3VsdCBvZiB0aGUgcmVxdWVzdCwgYmFzZWQgb24gdGhlIE9wZXJhdGlvblNwZWMuXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMgdGhhdCB0aGUgSFRUUCByZXF1ZXN0J3MgdGVtcGxhdGVkIHZhbHVlcyB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25TcGVjIC0gVGhlIE9wZXJhdGlvblNwZWMgdG8gdXNlIHRvIHBvcHVsYXRlIHRoZSBodHRwUmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBvcGVyYXRpb25TcGVjLmJhc2VVcmwgfHwgdGhpcy5fZW5kcG9pbnQ7XG4gICAgICAgIGlmICghZW5kcG9pbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIklmIG9wZXJhdGlvblNwZWMuYmFzZVVybCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBTZXJ2aWNlQ2xpZW50IG11c3QgaGF2ZSBhIGVuZHBvaW50IHN0cmluZyBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBiYXNlIFVSTCB0byB1c2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRlbXBsYXRpemVkIFVSTHMgc29tZXRpbWVzIHJlZmVyZW5jZSBwcm9wZXJ0aWVzIG9uIHRoZSBTZXJ2aWNlQ2xpZW50IGNoaWxkIGNsYXNzLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHBhc3MgYHRoaXNgIGJlbG93IGluIG9yZGVyIHRvIHNlYXJjaCB0aGVzZSBwcm9wZXJ0aWVzIGlmIHRoZXkncmVcbiAgICAgICAgLy8gbm90IHBhcnQgb2YgT3BlcmF0aW9uQXJndW1lbnRzXG4gICAgICAgIGNvbnN0IHVybCA9ICgwLCB1cmxIZWxwZXJzX2pzXzEuZ2V0UmVxdWVzdFVybCkoZW5kcG9pbnQsIG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgdGhpcyk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlUGlwZWxpbmVSZXF1ZXN0KSh7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXF1ZXN0Lm1ldGhvZCA9IG9wZXJhdGlvblNwZWMuaHR0cE1ldGhvZDtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uSW5mbyA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8pKHJlcXVlc3QpO1xuICAgICAgICBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25TcGVjO1xuICAgICAgICBvcGVyYXRpb25JbmZvLm9wZXJhdGlvbkFyZ3VtZW50cyA9IG9wZXJhdGlvbkFyZ3VtZW50cztcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBvcGVyYXRpb25TcGVjLmNvbnRlbnRUeXBlIHx8IHRoaXMuX3JlcXVlc3RDb250ZW50VHlwZTtcbiAgICAgICAgaWYgKGNvbnRlbnRUeXBlICYmIG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkpIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgY29udGVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcGVyYXRpb25Bcmd1bWVudHMub3B0aW9ucztcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb3B0aW9ucy5yZXF1ZXN0T3B0aW9ucztcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy50aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudGltZW91dCA9IHJlcXVlc3RPcHRpb25zLnRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5vblVwbG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25VcGxvYWRQcm9ncmVzcyA9IHJlcXVlc3RPcHRpb25zLm9uVXBsb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vbkRvd25sb2FkUHJvZ3Jlc3MgPSByZXF1ZXN0T3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5zaG91bGREZXNlcmlhbGl6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluZm8uc2hvdWxkRGVzZXJpYWxpemUgPSByZXF1ZXN0T3B0aW9ucy5zaG91bGREZXNlcmlhbGl6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5hYm9ydFNpZ25hbCA9IG9wdGlvbnMuYWJvcnRTaWduYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50cmFjaW5nT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudHJhY2luZ09wdGlvbnMgPSBvcHRpb25zLnRyYWNpbmdPcHRpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9hbGxvd0luc2VjdXJlQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgcmVxdWVzdC5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMgPSAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFN0cmVhbWluZ1Jlc3BvbnNlU3RhdHVzQ29kZXMpKG9wZXJhdGlvblNwZWMpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByYXdSZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdCk7XG4gICAgICAgICAgICBjb25zdCBmbGF0UmVzcG9uc2UgPSAoMCwgdXRpbHNfanNfMS5mbGF0dGVuUmVzcG9uc2UpKHJhd1Jlc3BvbnNlLCBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1tyYXdSZXNwb25zZS5zdGF0dXNdKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub25SZXNwb25zZShyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbGF0UmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3UmVzcG9uc2UgPSBlcnJvci5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGF0UmVzcG9uc2UgPSAoMCwgdXRpbHNfanNfMS5mbGF0dGVuUmVzcG9uc2UpKHJhd1Jlc3BvbnNlLCBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1tlcnJvci5zdGF0dXNDb2RlXSB8fCBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1tcImRlZmF1bHRcIl0pO1xuICAgICAgICAgICAgICAgIGVycm9yLmRldGFpbHMgPSBmbGF0UmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25SZXNwb25zZShyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlNlcnZpY2VDbGllbnQgPSBTZXJ2aWNlQ2xpZW50O1xuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFBpcGVsaW5lKG9wdGlvbnMpIHtcbiAgICBjb25zdCBjcmVkZW50aWFsU2NvcGVzID0gZ2V0Q3JlZGVudGlhbFNjb3BlcyhvcHRpb25zKTtcbiAgICBjb25zdCBjcmVkZW50aWFsT3B0aW9ucyA9IG9wdGlvbnMuY3JlZGVudGlhbCAmJiBjcmVkZW50aWFsU2NvcGVzXG4gICAgICAgID8geyBjcmVkZW50aWFsU2NvcGVzLCBjcmVkZW50aWFsOiBvcHRpb25zLmNyZWRlbnRpYWwgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKDAsIHBpcGVsaW5lX2pzXzEuY3JlYXRlQ2xpZW50UGlwZWxpbmUpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgY3JlZGVudGlhbE9wdGlvbnMgfSkpO1xufVxuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbFNjb3BlcyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuY3JlZGVudGlhbFNjb3Blcykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmRwb2ludCkge1xuICAgICAgICByZXR1cm4gYCR7b3B0aW9ucy5lbmRwb2ludH0vLmRlZmF1bHRgO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5iYXNlVXJpKSB7XG4gICAgICAgIHJldHVybiBgJHtvcHRpb25zLmJhc2VVcml9Ly5kZWZhdWx0YDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY3JlZGVudGlhbCAmJiAhb3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV2hlbiB1c2luZyBjcmVkZW50aWFscywgdGhlIFNlcnZpY2VDbGllbnRPcHRpb25zIG11c3QgY29udGFpbiBlaXRoZXIgYSBlbmRwb2ludCBvciBhIGNyZWRlbnRpYWxTY29wZXMuIFVuYWJsZSB0byBjcmVhdGUgYSBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5YCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJ2aWNlQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgPSBleHBvcnRzLnBhcnNlQ0FFQ2hhbGxlbmdlID0gdm9pZCAwO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG5jb25zdCBiYXNlNjRfanNfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NC5qc1wiKTtcbi8qKlxuICogQ29udmVydHM6IGBCZWFyZXIgYT1cImJcIiwgYz1cImRcIiwgQmVhcmVyIGQ9XCJlXCIsIGY9XCJnXCJgLlxuICogSW50bzogYFsgeyBhOiAnYicsIGM6ICdkJyB9LCB7IGQ6ICdlJywgZjogJ2cnIH0gXWAuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ0FFQ2hhbGxlbmdlKGNoYWxsZW5nZXMpIHtcbiAgICBjb25zdCBiZWFyZXJDaGFsbGVuZ2VzID0gYCwgJHtjaGFsbGVuZ2VzLnRyaW0oKX1gLnNwbGl0KFwiLCBCZWFyZXIgXCIpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgcmV0dXJuIGJlYXJlckNoYWxsZW5nZXMubWFwKChjaGFsbGVuZ2UpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbGxlbmdlUGFydHMgPSBgJHtjaGFsbGVuZ2UudHJpbSgpfSwgYC5zcGxpdCgnXCIsICcpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgICAgIGNvbnN0IGtleVZhbHVlUGFpcnMgPSBjaGFsbGVuZ2VQYXJ0cy5tYXAoKGtleVZhbHVlKSA9PiAoKFtrZXksIHZhbHVlXSkgPT4gKHsgW2tleV06IHZhbHVlIH0pKShrZXlWYWx1ZS50cmltKCkuc3BsaXQoJz1cIicpKSk7XG4gICAgICAgIC8vIEtleS12YWx1ZSBwYWlycyB0byBwbGFpbiBvYmplY3Q6XG4gICAgICAgIHJldHVybiBrZXlWYWx1ZVBhaXJzLnJlZHVjZSgoYSwgYikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpKSwge30pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5wYXJzZUNBRUNoYWxsZW5nZSA9IHBhcnNlQ0FFQ2hhbGxlbmdlO1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgY2FsbGJhY2sgZm9yIHRoZSBgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeWAgb2YgYEBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVgLCB0byBzdXBwb3J0IENBRSBjaGFsbGVuZ2VzOlxuICogW0NvbnRpbnVvdXMgQWNjZXNzIEV2YWx1YXRpb25dKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2F6dXJlL2FjdGl2ZS1kaXJlY3RvcnkvY29uZGl0aW9uYWwtYWNjZXNzL2NvbmNlcHQtY29udGludW91cy1hY2Nlc3MtZXZhbHVhdGlvbikuXG4gKlxuICogQ2FsbCB0aGUgYGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lgIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5IH0gZnJvbSBcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIjtcbiAqIGltcG9ydCB7IGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlIH0gZnJvbSBcIkBhenVyZS9jb3JlLWNsaWVudFwiO1xuICpcbiAqIGNvbnN0IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgPSBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KHtcbiAqICAgYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlOiBhdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZVxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBPbmNlIHByb3ZpZGVkLCB0aGUgYGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lgIHBvbGljeSB3aWxsIGludGVybmFsbHkgaGFuZGxlIENvbnRpbnVvdXMgQWNjZXNzIEV2YWx1YXRpb24gKENBRSkgY2hhbGxlbmdlcy5cbiAqIFdoZW4gaXQgY2FuJ3QgY29tcGxldGUgYSBjaGFsbGVuZ2UgaXQgd2lsbCByZXR1cm4gdGhlIDQwMSAodW5hdXRob3JpemVkKSByZXNwb25zZSBmcm9tIEFSTS5cbiAqXG4gKiBFeGFtcGxlIGNoYWxsZW5nZSB3aXRoIGNsYWltczpcbiAqXG4gKiBgYGBcbiAqIEJlYXJlciBhdXRob3JpemF0aW9uX3VyaT1cImh0dHBzOi8vbG9naW4ud2luZG93cy1wcGUubmV0L1wiLCBlcnJvcj1cImludmFsaWRfdG9rZW5cIixcbiAqIGVycm9yX2Rlc2NyaXB0aW9uPVwiVXNlciBzZXNzaW9uIGhhcyBiZWVuIHJldm9rZWRcIixcbiAqIGNsYWltcz1cImV5SmhZMk5sYzNOZmRHOXJaVzRpT25zaWJtSm1JanA3SW1WemMyVnVkR2xoYkNJNmRISjFaU3dnSW5aaGJIVmxJam9pTVRZd016YzBNamd3TUNKOWZYMD1cIlxuICogYGBgXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlKG9uQ2hhbGxlbmdlT3B0aW9ucykge1xuICAgIGNvbnN0IHsgc2NvcGVzLCByZXNwb25zZSB9ID0gb25DaGFsbGVuZ2VPcHRpb25zO1xuICAgIGNvbnN0IGxvZ2dlciA9IG9uQ2hhbGxlbmdlT3B0aW9ucy5sb2dnZXIgfHwgbG9nX2pzXzEubG9nZ2VyO1xuICAgIGNvbnN0IGNoYWxsZW5nZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiV1dXLUF1dGhlbnRpY2F0ZVwiKTtcbiAgICBpZiAoIWNoYWxsZW5nZSkge1xuICAgICAgICBsb2dnZXIuaW5mbyhgVGhlIFdXVy1BdXRoZW50aWNhdGUgaGVhZGVyIHdhcyBtaXNzaW5nLiBGYWlsZWQgdG8gcGVyZm9ybSB0aGUgQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbiBhdXRoZW50aWNhdGlvbiBmbG93LmApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNoYWxsZW5nZXMgPSBwYXJzZUNBRUNoYWxsZW5nZShjaGFsbGVuZ2UpIHx8IFtdO1xuICAgIGNvbnN0IHBhcnNlZENoYWxsZW5nZSA9IGNoYWxsZW5nZXMuZmluZCgoeCkgPT4geC5jbGFpbXMpO1xuICAgIGlmICghcGFyc2VkQ2hhbGxlbmdlKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgV1dXLUF1dGhlbnRpY2F0ZSBoZWFkZXIgd2FzIG1pc3NpbmcgdGhlIG5lY2Vzc2FyeSBcImNsYWltc1wiIHRvIHBlcmZvcm0gdGhlIENvbnRpbnVvdXMgQWNjZXNzIEV2YWx1YXRpb24gYXV0aGVudGljYXRpb24gZmxvdy5gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IG9uQ2hhbGxlbmdlT3B0aW9ucy5nZXRBY2Nlc3NUb2tlbihwYXJzZWRDaGFsbGVuZ2Uuc2NvcGUgPyBbcGFyc2VkQ2hhbGxlbmdlLnNjb3BlXSA6IHNjb3Blcywge1xuICAgICAgICBjbGFpbXM6ICgwLCBiYXNlNjRfanNfMS5kZWNvZGVTdHJpbmdUb1N0cmluZykocGFyc2VkQ2hhbGxlbmdlLmNsYWltcyksXG4gICAgfSk7XG4gICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9uQ2hhbGxlbmdlT3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBgQmVhcmVyICR7YWNjZXNzVG9rZW4udG9rZW59YCk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlID0gYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IHZvaWQgMDtcbi8qKlxuICogQSBzZXQgb2YgY29uc3RhbnRzIHVzZWQgaW50ZXJuYWxseSB3aGVuIHByb2Nlc3NpbmcgcmVxdWVzdHMuXG4gKi9cbmNvbnN0IENvbnN0YW50cyA9IHtcbiAgICBEZWZhdWx0U2NvcGU6IFwiLy5kZWZhdWx0XCIsXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBjb25zdGFudHMgZm9yIHVzZSB3aXRoIEhUVFAgaGVhZGVycy5cbiAgICAgKi9cbiAgICBIZWFkZXJDb25zdGFudHM6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICAgICAgICovXG4gICAgICAgIEFVVEhPUklaQVRJT046IFwiYXV0aG9yaXphdGlvblwiLFxuICAgIH0sXG59O1xuZnVuY3Rpb24gaXNVdWlkKHRleHQpIHtcbiAgICByZXR1cm4gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kLy50ZXN0KHRleHQpO1xufVxuLyoqXG4gKiBEZWZpbmVzIGEgY2FsbGJhY2sgdG8gaGFuZGxlIGF1dGggY2hhbGxlbmdlIGZvciBTdG9yYWdlIEFQSXMuXG4gKiBUaGlzIGltcGxlbWVudHMgdGhlIGJlYXJlciBjaGFsbGVuZ2UgcHJvY2VzcyBkZXNjcmliZWQgaGVyZTogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhvcml6ZS13aXRoLWF6dXJlLWFjdGl2ZS1kaXJlY3RvcnkjYmVhcmVyLWNoYWxsZW5nZVxuICogSGFuZGxpbmcgaGFzIHNwZWNpZmljIGZlYXR1cmVzIGZvciBzdG9yYWdlIHRoYXQgZGVwYXJ0cyB0byB0aGUgZ2VuZXJhbCBBQUQgY2hhbGxlbmdlIGRvY3MuXG4gKiovXG5jb25zdCBhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UgPSBhc3luYyAoY2hhbGxlbmdlT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gcmVxdWVzdFRvT3B0aW9ucyhjaGFsbGVuZ2VPcHRpb25zLnJlcXVlc3QpO1xuICAgIGNvbnN0IGNoYWxsZW5nZSA9IGdldENoYWxsZW5nZShjaGFsbGVuZ2VPcHRpb25zLnJlc3BvbnNlKTtcbiAgICBpZiAoY2hhbGxlbmdlKSB7XG4gICAgICAgIGNvbnN0IGNoYWxsZW5nZUluZm8gPSBwYXJzZUNoYWxsZW5nZShjaGFsbGVuZ2UpO1xuICAgICAgICBjb25zdCBjaGFsbGVuZ2VTY29wZXMgPSBidWlsZFNjb3BlcyhjaGFsbGVuZ2VPcHRpb25zLCBjaGFsbGVuZ2VJbmZvKTtcbiAgICAgICAgY29uc3QgdGVuYW50SWQgPSBleHRyYWN0VGVuYW50SWQoY2hhbGxlbmdlSW5mbyk7XG4gICAgICAgIGlmICghdGVuYW50SWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGNoYWxsZW5nZU9wdGlvbnMuZ2V0QWNjZXNzVG9rZW4oY2hhbGxlbmdlU2NvcGVzLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcXVlc3RPcHRpb25zKSwgeyB0ZW5hbnRJZCB9KSk7XG4gICAgICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjaGFsbGVuZ2VPcHRpb25zLnJlcXVlc3QuaGVhZGVycy5zZXQoQ29uc3RhbnRzLkhlYWRlckNvbnN0YW50cy5BVVRIT1JJWkFUSU9OLCBgQmVhcmVyICR7YWNjZXNzVG9rZW4udG9rZW59YCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0cy5hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UgPSBhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2U7XG4vKipcbiAqIEV4dHJhY3RzIHRoZSB0ZW5hbnQgaWQgZnJvbSB0aGUgY2hhbGxlbmdlIGluZm9ybWF0aW9uXG4gKiBUaGUgdGVuYW50IGlkIGlzIGNvbnRhaW5lZCBpbiB0aGUgYXV0aG9yaXphdGlvbl91cmkgYXMgdGhlIGZpcnN0XG4gKiBwYXRoIHBhcnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUZW5hbnRJZChjaGFsbGVuZ2VJbmZvKSB7XG4gICAgY29uc3QgcGFyc2VkQXV0aFVyaSA9IG5ldyBVUkwoY2hhbGxlbmdlSW5mby5hdXRob3JpemF0aW9uX3VyaSk7XG4gICAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGFyc2VkQXV0aFVyaS5wYXRobmFtZS5zcGxpdChcIi9cIik7XG4gICAgY29uc3QgdGVuYW50SWQgPSBwYXRoU2VnbWVudHNbMV07XG4gICAgaWYgKHRlbmFudElkICYmIGlzVXVpZCh0ZW5hbnRJZCkpIHtcbiAgICAgICAgcmV0dXJuIHRlbmFudElkO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBCdWlsZHMgdGhlIGF1dGhlbnRpY2F0aW9uIHNjb3BlcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gdGhhdCBjb21lcyBpbiB0aGVcbiAqIGNoYWxsZW5nZSBpbmZvcm1hdGlvbi4gU2NvcGVzIHVybCBpcyBwcmVzZW50IGluIHRoZSByZXNvdXJjZV9pZCwgaWYgaXQgaXMgZW1wdHlcbiAqIHdlIGtlZXAgdXNpbmcgdGhlIG9yaWdpbmFsIHNjb3Blcy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTY29wZXMoY2hhbGxlbmdlT3B0aW9ucywgY2hhbGxlbmdlSW5mbykge1xuICAgIGlmICghY2hhbGxlbmdlSW5mby5yZXNvdXJjZV9pZCkge1xuICAgICAgICByZXR1cm4gY2hhbGxlbmdlT3B0aW9ucy5zY29wZXM7XG4gICAgfVxuICAgIGNvbnN0IGNoYWxsZW5nZVNjb3BlcyA9IG5ldyBVUkwoY2hhbGxlbmdlSW5mby5yZXNvdXJjZV9pZCk7XG4gICAgY2hhbGxlbmdlU2NvcGVzLnBhdGhuYW1lID0gQ29uc3RhbnRzLkRlZmF1bHRTY29wZTtcbiAgICBsZXQgc2NvcGUgPSBjaGFsbGVuZ2VTY29wZXMudG9TdHJpbmcoKTtcbiAgICBpZiAoc2NvcGUgPT09IFwiaHR0cHM6Ly9kaXNrLmF6dXJlLmNvbS8uZGVmYXVsdFwiKSB7XG4gICAgICAgIC8vIHRoZSBleHRyYSBzbGFzaCBpcyByZXF1aXJlZCBieSB0aGUgc2VydmljZVxuICAgICAgICBzY29wZSA9IFwiaHR0cHM6Ly9kaXNrLmF6dXJlLmNvbS8vLmRlZmF1bHRcIjtcbiAgICB9XG4gICAgcmV0dXJuIFtzY29wZV07XG59XG4vKipcbiAqIFdlIHdpbGwgcmV0cmlldmUgdGhlIGNoYWxsZW5nZSBvbmx5IGlmIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZSB3YXMgNDAxLFxuICogYW5kIGlmIHRoZSByZXNwb25zZSBjb250YWluZWQgdGhlIGhlYWRlciBcIldXVy1BdXRoZW50aWNhdGVcIiB3aXRoIGEgbm9uLWVtcHR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRDaGFsbGVuZ2UocmVzcG9uc2UpIHtcbiAgICBjb25zdCBjaGFsbGVuZ2UgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIldXVy1BdXRoZW50aWNhdGVcIik7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIGNoYWxsZW5nZSkge1xuICAgICAgICByZXR1cm4gY2hhbGxlbmdlO1xuICAgIH1cbiAgICByZXR1cm47XG59XG4vKipcbiAqIENvbnZlcnRzOiBgQmVhcmVyIGE9XCJiXCIgYz1cImRcImAuXG4gKiBJbnRvOiBgWyB7IGE6ICdiJywgYzogJ2QnIH1dYC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gcGFyc2VDaGFsbGVuZ2UoY2hhbGxlbmdlKSB7XG4gICAgY29uc3QgYmVhcmVyQ2hhbGxlbmdlID0gY2hhbGxlbmdlLnNsaWNlKFwiQmVhcmVyIFwiLmxlbmd0aCk7XG4gICAgY29uc3QgY2hhbGxlbmdlUGFydHMgPSBgJHtiZWFyZXJDaGFsbGVuZ2UudHJpbSgpfSBgLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHgpID0+IHgpO1xuICAgIGNvbnN0IGtleVZhbHVlUGFpcnMgPSBjaGFsbGVuZ2VQYXJ0cy5tYXAoKGtleVZhbHVlKSA9PiAoKFtrZXksIHZhbHVlXSkgPT4gKHsgW2tleV06IHZhbHVlIH0pKShrZXlWYWx1ZS50cmltKCkuc3BsaXQoXCI9XCIpKSk7XG4gICAgLy8gS2V5LXZhbHVlIHBhaXJzIHRvIHBsYWluIG9iamVjdDpcbiAgICByZXR1cm4ga2V5VmFsdWVQYWlycy5yZWR1Y2UoKGEsIGIpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGEpLCBiKSksIHt9KTtcbn1cbi8qKlxuICogRXh0cmFjdHMgdGhlIG9wdGlvbnMgZm9ybSBhIFBpcGVsaW5lIFJlcXVlc3QgZm9yIGxhdGVyIHJlLXVzZVxuICovXG5mdW5jdGlvbiByZXF1ZXN0VG9PcHRpb25zKHJlcXVlc3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICAgICAgcmVxdWVzdE9wdGlvbnM6IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhY2luZ09wdGlvbnM6IHJlcXVlc3QudHJhY2luZ09wdGlvbnMsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IGV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgPSBleHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5ID0gZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3kgPSBleHBvcnRzLlhNTF9DSEFSS0VZID0gZXhwb3J0cy5YTUxfQVRUUktFWSA9IGV4cG9ydHMuY3JlYXRlQ2xpZW50UGlwZWxpbmUgPSBleHBvcnRzLlNlcnZpY2VDbGllbnQgPSBleHBvcnRzLk1hcHBlclR5cGVOYW1lcyA9IGV4cG9ydHMuY3JlYXRlU2VyaWFsaXplciA9IHZvaWQgMDtcbnZhciBzZXJpYWxpemVyX2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemVyLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXplcl9qc18xLmNyZWF0ZVNlcmlhbGl6ZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNYXBwZXJUeXBlTmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXM7IH0gfSk7XG52YXIgc2VydmljZUNsaWVudF9qc18xID0gcmVxdWlyZShcIi4vc2VydmljZUNsaWVudC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZpY2VDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZpY2VDbGllbnRfanNfMS5TZXJ2aWNlQ2xpZW50OyB9IH0pO1xudmFyIHBpcGVsaW5lX2pzXzEgPSByZXF1aXJlKFwiLi9waXBlbGluZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNsaWVudFBpcGVsaW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwaXBlbGluZV9qc18xLmNyZWF0ZUNsaWVudFBpcGVsaW5lOyB9IH0pO1xudmFyIGludGVyZmFjZXNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZXMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYTUxfQVRUUktFWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWE1MX0NIQVJLRVlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWTsgfSB9KTtcbnZhciBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlc2VyaWFsaXphdGlvblBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuZGVzZXJpYWxpemF0aW9uUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZTsgfSB9KTtcbnZhciBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VyaWFsaXphdGlvblBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXphdGlvblBvbGljeV9qc18xLnNlcmlhbGl6YXRpb25Qb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJpYWxpemF0aW9uUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXphdGlvblBvbGljeV9qc18xLnNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lOyB9IH0pO1xudmFyIGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlX2pzXzEgPSByZXF1aXJlKFwiLi9hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZV9qc18xLmF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlOyB9IH0pO1xudmFyIGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZV9qc18xID0gcmVxdWlyZShcIi4vYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2VfanNfMS5hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2U7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBIZWFkZXJzID0gZXhwb3J0cy50b0h0dHBIZWFkZXJzTGlrZSA9IGV4cG9ydHMudG9XZWJSZXNvdXJjZUxpa2UgPSBleHBvcnRzLnRvUGlwZWxpbmVSZXF1ZXN0ID0gdm9pZCAwO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbi8vIFdlIHVzZSBhIGN1c3RvbSBzeW1ib2wgdG8gY2FjaGUgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIHJlcXVlc3Qgd2l0aG91dFxuLy8gZXhwb3NpbmcgaXQgb24gdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG5jb25zdCBvcmlnaW5hbFJlcXVlc3RTeW1ib2wgPSBTeW1ib2woXCJPcmlnaW5hbCBQaXBlbGluZVJlcXVlc3RcIik7XG4vLyBTeW1ib2wuZm9yKCkgd2lsbCByZXR1cm4gdGhlIHNhbWUgc3ltYm9sIGlmIGl0J3MgYWxyZWFkeSBiZWVuIGNyZWF0ZWRcbi8vIFRoaXMgcGFydGljdWxhciBvbmUgaXMgdXNlZCBpbiBjb3JlLWNsaWVudCB0byBoYW5kbGUgdGhlIGNhc2Ugb2Ygd2hlbiBhIHJlcXVlc3QgaXNcbi8vIGNsb25lZCBidXQgd2UgbmVlZCB0byByZXRyaWV2ZSB0aGUgT3BlcmF0aW9uU3BlYyBhbmQgT3BlcmF0aW9uQXJndW1lbnRzIGZyb20gdGhlXG4vLyBvcmlnaW5hbCByZXF1ZXN0LlxuY29uc3Qgb3JpZ2luYWxDbGllbnRSZXF1ZXN0U3ltYm9sID0gU3ltYm9sLmZvcihcIkBhenVyZS9jb3JlLWNsaWVudCBvcmlnaW5hbCByZXF1ZXN0XCIpO1xuZnVuY3Rpb24gdG9QaXBlbGluZVJlcXVlc3Qod2ViUmVzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGNvbXBhdFdlYlJlc291cmNlID0gd2ViUmVzb3VyY2U7XG4gICAgY29uc3QgcmVxdWVzdCA9IGNvbXBhdFdlYlJlc291cmNlW29yaWdpbmFsUmVxdWVzdFN5bWJvbF07XG4gICAgY29uc3QgaGVhZGVycyA9ICgwLCBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5jcmVhdGVIdHRwSGVhZGVycykod2ViUmVzb3VyY2UuaGVhZGVycy50b0pzb24oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSkpO1xuICAgIGlmIChyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3UmVxdWVzdCA9ICgwLCBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5jcmVhdGVQaXBlbGluZVJlcXVlc3QpKHtcbiAgICAgICAgICAgIHVybDogd2ViUmVzb3VyY2UudXJsLFxuICAgICAgICAgICAgbWV0aG9kOiB3ZWJSZXNvdXJjZS5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB3ZWJSZXNvdXJjZS53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICB0aW1lb3V0OiB3ZWJSZXNvdXJjZS50aW1lb3V0LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB3ZWJSZXNvdXJjZS5yZXF1ZXN0SWQsXG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogd2ViUmVzb3VyY2UuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICBib2R5OiB3ZWJSZXNvdXJjZS5ib2R5LFxuICAgICAgICAgICAgZm9ybURhdGE6IHdlYlJlc291cmNlLmZvcm1EYXRhLFxuICAgICAgICAgICAgZGlzYWJsZUtlZXBBbGl2ZTogISF3ZWJSZXNvdXJjZS5rZWVwQWxpdmUsXG4gICAgICAgICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IHdlYlJlc291cmNlLm9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHdlYlJlc291cmNlLm9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgICAgICAgICBwcm94eVNldHRpbmdzOiB3ZWJSZXNvdXJjZS5wcm94eVNldHRpbmdzLFxuICAgICAgICAgICAgc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2Rlczogd2ViUmVzb3VyY2Uuc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcHRpb25zLm9yaWdpbmFsUmVxdWVzdCkge1xuICAgICAgICAgICAgbmV3UmVxdWVzdFtvcmlnaW5hbENsaWVudFJlcXVlc3RTeW1ib2xdID1cbiAgICAgICAgICAgICAgICBvcHRpb25zLm9yaWdpbmFsUmVxdWVzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UmVxdWVzdDtcbiAgICB9XG59XG5leHBvcnRzLnRvUGlwZWxpbmVSZXF1ZXN0ID0gdG9QaXBlbGluZVJlcXVlc3Q7XG5mdW5jdGlvbiB0b1dlYlJlc291cmNlTGlrZShyZXF1ZXN0LCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG9yaWdpbmFsUmVxdWVzdCA9IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vcmlnaW5hbFJlcXVlc3QpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHJlcXVlc3Q7XG4gICAgY29uc3Qgd2ViUmVzb3VyY2UgPSB7XG4gICAgICAgIHVybDogcmVxdWVzdC51cmwsXG4gICAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IHRvSHR0cEhlYWRlcnNMaWtlKHJlcXVlc3QuaGVhZGVycyksXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcbiAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiKSB8fCByZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwsXG4gICAgICAgIGJvZHk6IHJlcXVlc3QuYm9keSxcbiAgICAgICAgZm9ybURhdGE6IHJlcXVlc3QuZm9ybURhdGEsXG4gICAgICAgIGtlZXBBbGl2ZTogISFyZXF1ZXN0LmRpc2FibGVLZWVwQWxpdmUsXG4gICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogcmVxdWVzdC5vbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHJlcXVlc3Qub25VcGxvYWRQcm9ncmVzcyxcbiAgICAgICAgcHJveHlTZXR0aW5nczogcmVxdWVzdC5wcm94eVNldHRpbmdzLFxuICAgICAgICBzdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzOiByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMsXG4gICAgICAgIGNsb25lKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNsb25lIGEgbm9uLXByb3hpZWQgV2ViUmVzb3VyY2VMaWtlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJlKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV2ViUmVzb3VyY2VMaWtlLnByZXBhcmUoKSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEBhenVyZS9jb3JlLWh0dHAtY29tcGF0XCIpO1xuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZVJlcXVlc3RQcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgLyoqIGRvIG5vdGhpbmcgKi9cbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3JlYXRlUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh3ZWJSZXNvdXJjZSwge1xuICAgICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gb3JpZ2luYWxSZXF1ZXN0U3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcImNsb25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1dlYlJlc291cmNlTGlrZSh0b1BpcGVsaW5lUmVxdWVzdCh3ZWJSZXNvdXJjZSwgeyBvcmlnaW5hbFJlcXVlc3QgfSksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQcm94eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImtlZXBBbGl2ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZSA9ICF2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGFzc1Rocm91Z2hQcm9wcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJtZXRob2RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ3aXRoQ3JlZGVudGlhbHNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0aW1lb3V0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwicmVxdWVzdElkXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYWJvcnRTaWduYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJib2R5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9ybURhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJvbkRvd25sb2FkUHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgXCJvblVwbG9hZFByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicHJveHlTZXR0aW5nc1wiLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXNcIixcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzdHJpbmdcIiAmJiBwYXNzVGhyb3VnaFByb3BzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHdlYlJlc291cmNlO1xuICAgIH1cbn1cbmV4cG9ydHMudG9XZWJSZXNvdXJjZUxpa2UgPSB0b1dlYlJlc291cmNlTGlrZTtcbi8qKlxuICogQ29udmVydHMgSHR0cEhlYWRlcnMgZnJvbSBjb3JlLXJlc3QtcGlwZWxpbmUgdG8gbG9vayBsaWtlXG4gKiBIdHRwSGVhZGVycyBmcm9tIGNvcmUtaHR0cC5cbiAqIEBwYXJhbSBoZWFkZXJzIC0gSHR0cEhlYWRlcnMgZnJvbSBjb3JlLXJlc3QtcGlwZWxpbmVcbiAqIEByZXR1cm5zIEh0dHBIZWFkZXJzIGFzIHRoZXkgbG9va2VkIGluIGNvcmUtaHR0cFxuICovXG5mdW5jdGlvbiB0b0h0dHBIZWFkZXJzTGlrZShoZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyhoZWFkZXJzLnRvSlNPTih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSk7XG59XG5leHBvcnRzLnRvSHR0cEhlYWRlcnNMaWtlID0gdG9IdHRwSGVhZGVyc0xpa2U7XG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBIdHRwSGVhZGVycyB0aGF0IGNhbiBiZSBzZW50IHdpdGggYSBIVFRQIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlcktleShoZWFkZXJOYW1lKSB7XG4gICAgcmV0dXJuIGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIEhUVFAgaGVhZGVyIGtleS92YWx1ZSBwYWlycy5cbiAqL1xuY2xhc3MgSHR0cEhlYWRlcnMge1xuICAgIGNvbnN0cnVjdG9yKHJhd0hlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcCA9IHt9O1xuICAgICAgICBpZiAocmF3SGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIGluIHJhd0hlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldChoZWFkZXJOYW1lLCByYXdIZWFkZXJzW2hlYWRlck5hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgYSBoZWFkZXIgaW4gdGhpcyBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYW5kIHZhbHVlLiBUaGUgbmFtZSBpc1xuICAgICAqIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICogQHBhcmFtIGhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHNldC4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqIEBwYXJhbSBoZWFkZXJWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQoaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcFtnZXRIZWFkZXJLZXkoaGVhZGVyTmFtZSldID0ge1xuICAgICAgICAgICAgbmFtZTogaGVhZGVyTmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBoZWFkZXJWYWx1ZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIGhlYWRlciBuYW1lLCBvciB1bmRlZmluZWQgaWYgbm8gaGVhZGVyIGV4aXN0cyBpbiB0aGlzXG4gICAgICogY29sbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLlxuICAgICAqIEBwYXJhbSBoZWFkZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICAgKi9cbiAgICBnZXQoaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2dldEhlYWRlcktleShoZWFkZXJOYW1lKV07XG4gICAgICAgIHJldHVybiAhaGVhZGVyID8gdW5kZWZpbmVkIDogaGVhZGVyLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBoZWFkZXIgY29sbGVjdGlvbiBjb250YWlucyBhIGhlYWRlciBlbnRyeSBmb3IgdGhlIHByb3ZpZGVkIGhlYWRlciBuYW1lLlxuICAgICAqL1xuICAgIGNvbnRhaW5zKGhlYWRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5faGVhZGVyc01hcFtnZXRIZWFkZXJLZXkoaGVhZGVyTmFtZSldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBoZWFkZXJOYW1lLiBSZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGhlYWRlciBleGlzdGVkIGFuZFxuICAgICAqIHdhcyByZW1vdmVkLlxuICAgICAqIEBwYXJhbSBoZWFkZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byByZW1vdmUuXG4gICAgICovXG4gICAgcmVtb3ZlKGhlYWRlck5hbWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb250YWlucyhoZWFkZXJOYW1lKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2hlYWRlcnNNYXBbZ2V0SGVhZGVyS2V5KGhlYWRlck5hbWUpXTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBoZWFkZXJzIHRoYXQgYXJlIGNvbnRhaW5lZCB0aGlzIGNvbGxlY3Rpb24gYXMgYW4gb2JqZWN0LlxuICAgICAqL1xuICAgIHJhd0hlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSnNvbih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBoZWFkZXJzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGNvbGxlY3Rpb24gYXMgYW4gYXJyYXkuXG4gICAgICovXG4gICAgaGVhZGVyc0FycmF5KCkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaCh0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciBuYW1lcyB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhpcyBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGhlYWRlck5hbWVzKCkge1xuICAgICAgICBjb25zdCBoZWFkZXJOYW1lcyA9IFtdO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzQXJyYXkoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBoZWFkZXJOYW1lcy5wdXNoKGhlYWRlcnNbaV0ubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlck5hbWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciB2YWx1ZXMgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoaXMgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBoZWFkZXJWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlclZhbHVlcyA9IFtdO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzQXJyYXkoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBoZWFkZXJWYWx1ZXMucHVzaChoZWFkZXJzW2ldLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGVhZGVyVmFsdWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEpTT04gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b0pzb24ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucy5wcmVzZXJ2ZUNhc2UpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV07XG4gICAgICAgICAgICAgICAgcmVzdWx0W2hlYWRlci5uYW1lXSA9IGhlYWRlci52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV07XG4gICAgICAgICAgICAgICAgcmVzdWx0W2dldEhlYWRlcktleShoZWFkZXIubmFtZSldID0gaGVhZGVyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9Kc29uKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgZGVlcCBjbG9uZS9jb3B5IG9mIHRoaXMgSHR0cEhlYWRlcnMgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0UHJlc2VydmluZ0Nhc2luZyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlcktleSBpbiB0aGlzLl9oZWFkZXJzTWFwKSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV07XG4gICAgICAgICAgICByZXN1bHRQcmVzZXJ2aW5nQ2FzaW5nW2hlYWRlci5uYW1lXSA9IGhlYWRlci52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKHJlc3VsdFByZXNlcnZpbmdDYXNpbmcpO1xuICAgIH1cbn1cbmV4cG9ydHMuSHR0cEhlYWRlcnMgPSBIdHRwSGVhZGVycztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b1BpcGVsaW5lUmVzcG9uc2UgPSBleHBvcnRzLnRvQ29tcGF0UmVzcG9uc2UgPSB2b2lkIDA7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuY29uc3QgdXRpbF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC5qc1wiKTtcbmNvbnN0IG9yaWdpbmFsUmVzcG9uc2UgPSBTeW1ib2woXCJPcmlnaW5hbCBGdWxsT3BlcmF0aW9uUmVzcG9uc2VcIik7XG4vKipcbiAqIEEgaGVscGVyIHRvIGNvbnZlcnQgcmVzcG9uc2Ugb2JqZWN0cyBmcm9tIHRoZSBuZXcgcGlwZWxpbmUgYmFjayB0byB0aGUgb2xkIG9uZS5cbiAqIEBwYXJhbSByZXNwb25zZSAtIEEgcmVzcG9uc2Ugb2JqZWN0IGZyb20gY29yZS1jbGllbnQuXG4gKiBAcmV0dXJucyBBIHJlc3BvbnNlIGNvbXBhdGlibGUgd2l0aCBgSHR0cE9wZXJhdGlvblJlc3BvbnNlYCBmcm9tIGNvcmUtaHR0cC5cbiAqL1xuZnVuY3Rpb24gdG9Db21wYXRSZXNwb25zZShyZXNwb25zZSwgb3B0aW9ucykge1xuICAgIGxldCByZXF1ZXN0ID0gKDAsIHV0aWxfanNfMS50b1dlYlJlc291cmNlTGlrZSkocmVzcG9uc2UucmVxdWVzdCk7XG4gICAgbGV0IGhlYWRlcnMgPSAoMCwgdXRpbF9qc18xLnRvSHR0cEhlYWRlcnNMaWtlKShyZXNwb25zZS5oZWFkZXJzKTtcbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNyZWF0ZVByb3h5KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkocmVzcG9uc2UsIHtcbiAgICAgICAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiaGVhZGVyc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcInJlcXVlc3RcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcCA9PT0gb3JpZ2luYWxSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJoZWFkZXJzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcInJlcXVlc3RcIikge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyByZXF1ZXN0LFxuICAgICAgICAgICAgaGVhZGVycyB9KTtcbiAgICB9XG59XG5leHBvcnRzLnRvQ29tcGF0UmVzcG9uc2UgPSB0b0NvbXBhdFJlc3BvbnNlO1xuLyoqXG4gKiBBIGhlbHBlciB0byBjb252ZXJ0IGJhY2sgdG8gYSBQaXBlbGluZVJlc3BvbnNlXG4gKiBAcGFyYW0gY29tcGF0UmVzcG9uc2UgLSBBIHJlc3BvbnNlIGNvbXBhdGlibGUgd2l0aCBgSHR0cE9wZXJhdGlvblJlc3BvbnNlYCBmcm9tIGNvcmUtaHR0cC5cbiAqL1xuZnVuY3Rpb24gdG9QaXBlbGluZVJlc3BvbnNlKGNvbXBhdFJlc3BvbnNlKSB7XG4gICAgY29uc3QgZXh0ZW5kZWRDb21wYXRSZXNwb25zZSA9IGNvbXBhdFJlc3BvbnNlO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gZXh0ZW5kZWRDb21wYXRSZXNwb25zZVtvcmlnaW5hbFJlc3BvbnNlXTtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZUh0dHBIZWFkZXJzKShjb21wYXRSZXNwb25zZS5oZWFkZXJzLnRvSnNvbih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb21wYXRSZXNwb25zZSksIHsgaGVhZGVycywgcmVxdWVzdDogKDAsIHV0aWxfanNfMS50b1BpcGVsaW5lUmVxdWVzdCkoY29tcGF0UmVzcG9uc2UucmVxdWVzdCkgfSk7XG4gICAgfVxufVxuZXhwb3J0cy50b1BpcGVsaW5lUmVzcG9uc2UgPSB0b1BpcGVsaW5lUmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNwb25zZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV4dGVuZGVkU2VydmljZUNsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2Rpc2FibGVLZWVwQWxpdmVQb2xpY3kuanNcIik7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuY29uc3QgY29yZV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1jbGllbnRcIik7XG5jb25zdCByZXNwb25zZV9qc18xID0gcmVxdWlyZShcIi4vcmVzcG9uc2UuanNcIik7XG4vKipcbiAqIENsaWVudCB0byBwcm92aWRlIGNvbXBhdGFiaWxpdHkgYmV0d2VlbiBjb3JlIFYxICYgVjIuXG4gKi9cbmNsYXNzIEV4dGVuZGVkU2VydmljZUNsaWVudCBleHRlbmRzIGNvcmVfY2xpZW50XzEuU2VydmljZUNsaWVudCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgaWYgKCgoX2EgPSBvcHRpb25zLmtlZXBBbGl2ZU9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lbmFibGUpID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgISgwLCBkaXNhYmxlS2VlcEFsaXZlUG9saWN5X2pzXzEucGlwZWxpbmVDb250YWluc0Rpc2FibGVLZWVwQWxpdmVQb2xpY3kpKHRoaXMucGlwZWxpbmUpKSB7XG4gICAgICAgICAgICB0aGlzLnBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGlzYWJsZUtlZXBBbGl2ZVBvbGljeV9qc18xLmNyZWF0ZURpc2FibGVLZWVwQWxpdmVQb2xpY3kpKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoKF9iID0gb3B0aW9ucy5yZWRpcmVjdE9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5oYW5kbGVSZWRpcmVjdHMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5waXBlbGluZS5yZW1vdmVQb2xpY3koe1xuICAgICAgICAgICAgICAgIG5hbWU6IGNvcmVfcmVzdF9waXBlbGluZV8xLnJlZGlyZWN0UG9saWN5TmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbXBhdGlibGUgc2VuZCBvcGVyYXRpb24gcmVxdWVzdCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25Bcmd1bWVudHMgLSBPcGVyYXRpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblNwZWMgLSBPcGVyYXRpb24gU3BlY1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgc2VuZE9wZXJhdGlvblJlcXVlc3Qob3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdXNlclByb3ZpZGVkQ2FsbEJhY2sgPSAoX2EgPSBvcGVyYXRpb25Bcmd1bWVudHMgPT09IG51bGwgfHwgb3BlcmF0aW9uQXJndW1lbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25Bcmd1bWVudHMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uUmVzcG9uc2U7XG4gICAgICAgIGxldCBsYXN0UmVzcG9uc2U7XG4gICAgICAgIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmF3UmVzcG9uc2UsIGZsYXRSZXNwb25zZSwgZXJyb3IpIHtcbiAgICAgICAgICAgIGxhc3RSZXNwb25zZSA9IHJhd1Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHVzZXJQcm92aWRlZENhbGxCYWNrKSB7XG4gICAgICAgICAgICAgICAgdXNlclByb3ZpZGVkQ2FsbEJhY2socmF3UmVzcG9uc2UsIGZsYXRSZXNwb25zZSwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcGVyYXRpb25Bcmd1bWVudHMub3B0aW9ucyksIHsgb25SZXNwb25zZSB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3VwZXIuc2VuZE9wZXJhdGlvblJlcXVlc3Qob3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjKTtcbiAgICAgICAgaWYgKGxhc3RSZXNwb25zZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgXCJfcmVzcG9uc2VcIiwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAoMCwgcmVzcG9uc2VfanNfMS50b0NvbXBhdFJlc3BvbnNlKShsYXN0UmVzcG9uc2UpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5leHBvcnRzLkV4dGVuZGVkU2VydmljZUNsaWVudCA9IEV4dGVuZGVkU2VydmljZUNsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4dGVuZGVkQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kgPSBleHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSA9IGV4cG9ydHMuSHR0cFBpcGVsaW5lTG9nTGV2ZWwgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC5qc1wiKTtcbmNvbnN0IHJlc3BvbnNlX2pzXzEgPSByZXF1aXJlKFwiLi4vcmVzcG9uc2UuanNcIik7XG4vKipcbiAqIEFuIGVudW0gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBSZXF1ZXN0UG9saWN5XG4gKi9cbnZhciBIdHRwUGlwZWxpbmVMb2dMZXZlbDtcbihmdW5jdGlvbiAoSHR0cFBpcGVsaW5lTG9nTGV2ZWwpIHtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIkVSUk9SXCJdID0gMV0gPSBcIkVSUk9SXCI7XG4gICAgSHR0cFBpcGVsaW5lTG9nTGV2ZWxbSHR0cFBpcGVsaW5lTG9nTGV2ZWxbXCJJTkZPXCJdID0gM10gPSBcIklORk9cIjtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIk9GRlwiXSA9IDBdID0gXCJPRkZcIjtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIldBUk5JTkdcIl0gPSAyXSA9IFwiV0FSTklOR1wiO1xufSkoSHR0cFBpcGVsaW5lTG9nTGV2ZWwgfHwgKGV4cG9ydHMuSHR0cFBpcGVsaW5lTG9nTGV2ZWwgPSBIdHRwUGlwZWxpbmVMb2dMZXZlbCA9IHt9KSk7XG5jb25zdCBtb2NrUmVxdWVzdFBvbGljeU9wdGlvbnMgPSB7XG4gICAgbG9nKF9sb2dMZXZlbCwgX21lc3NhZ2UpIHtcbiAgICAgICAgLyogZG8gbm90aGluZyAqL1xuICAgIH0sXG4gICAgc2hvdWxkTG9nKF9sb2dMZXZlbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbn07XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeVxuICovXG5leHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSA9IFwiUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCB3cmFwcyBwb2xpY2llcyB3cml0dGVuIGZvciBjb3JlLWh0dHAuXG4gKiBAcGFyYW0gZmFjdG9yaWVzIC0gQW4gYXJyYXkgb2YgYFJlcXVlc3RQb2xpY3lGYWN0b3J5YCBvYmplY3RzIGZyb20gYSBjb3JlLWh0dHAgcGlwZWxpbmVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3koZmFjdG9yaWVzKSB7XG4gICAgY29uc3Qgb3JkZXJlZEZhY3RvcmllcyA9IGZhY3Rvcmllcy5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgbGV0IGh0dHBQaXBlbGluZSA9IHtcbiAgICAgICAgICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChodHRwUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQoKDAsIHV0aWxfanNfMS50b1BpcGVsaW5lUmVxdWVzdCkoaHR0cFJlcXVlc3QpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCByZXNwb25zZV9qc18xLnRvQ29tcGF0UmVzcG9uc2UpKHJlc3BvbnNlLCB7IGNyZWF0ZVByb3h5OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBmYWN0b3J5IG9mIG9yZGVyZWRGYWN0b3JpZXMpIHtcbiAgICAgICAgICAgICAgICBodHRwUGlwZWxpbmUgPSBmYWN0b3J5LmNyZWF0ZShodHRwUGlwZWxpbmUsIG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3ZWJSZXNvdXJjZUxpa2UgPSAoMCwgdXRpbF9qc18xLnRvV2ViUmVzb3VyY2VMaWtlKShyZXF1ZXN0LCB7IGNyZWF0ZVByb3h5OiB0cnVlIH0pO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBodHRwUGlwZWxpbmUuc2VuZFJlcXVlc3Qod2ViUmVzb3VyY2VMaWtlKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgcmVzcG9uc2VfanNfMS50b1BpcGVsaW5lUmVzcG9uc2UpKHJlc3BvbnNlKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeSA9IGNyZWF0ZVJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb252ZXJ0SHR0cENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IHJlc3BvbnNlX2pzXzEgPSByZXF1aXJlKFwiLi9yZXNwb25zZS5qc1wiKTtcbmNvbnN0IHV0aWxfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwuanNcIik7XG4vKipcbiAqIENvbnZlcnRzIGEgUmVxdWVzdFBvbGljeSBiYXNlZCBIdHRwQ2xpZW50IHRvIGEgUGlwZWxpbmVSZXF1ZXN0IGJhc2VkIEh0dHBDbGllbnQuXG4gKiBAcGFyYW0gcmVxdWVzdFBvbGljeUNsaWVudCAtIEEgSHR0cENsaWVudCBjb21wYXRpYmxlIHdpdGggY29yZS1odHRwXG4gKiBAcmV0dXJucyBBIEh0dHBDbGllbnQgY29tcGF0aWJsZSB3aXRoIGNvcmUtcmVzdC1waXBlbGluZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0SHR0cENsaWVudChyZXF1ZXN0UG9saWN5Q2xpZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZFJlcXVlc3Q6IGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RQb2xpY3lDbGllbnQuc2VuZFJlcXVlc3QoKDAsIHV0aWxfanNfMS50b1dlYlJlc291cmNlTGlrZSkocmVxdWVzdCwgeyBjcmVhdGVQcm94eTogdHJ1ZSB9KSk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHJlc3BvbnNlX2pzXzEudG9QaXBlbGluZVJlc3BvbnNlKShyZXNwb25zZSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuY29udmVydEh0dHBDbGllbnQgPSBjb252ZXJ0SHR0cENsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBDbGllbnRBZGFwdGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9IdHRwSGVhZGVyc0xpa2UgPSBleHBvcnRzLmNvbnZlcnRIdHRwQ2xpZW50ID0gZXhwb3J0cy5kaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZSA9IGV4cG9ydHMuSHR0cFBpcGVsaW5lTG9nTGV2ZWwgPSBleHBvcnRzLmNyZWF0ZVJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5ID0gZXhwb3J0cy5yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeU5hbWUgPSBleHBvcnRzLkV4dGVuZGVkU2VydmljZUNsaWVudCA9IHZvaWQgMDtcbi8qKlxuICogQSBTaGltIExpYnJhcnkgdGhhdCBwcm92aWRlcyBjb21wYXRpYmlsaXR5IGJldHdlZW4gQ29yZSBWMSAmIFYyIFBhY2thZ2VzLlxuICpcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG52YXIgZXh0ZW5kZWRDbGllbnRfanNfMSA9IHJlcXVpcmUoXCIuL2V4dGVuZGVkQ2xpZW50LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleHRlbmRlZENsaWVudF9qc18xLkV4dGVuZGVkU2VydmljZUNsaWVudDsgfSB9KTtcbnZhciByZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5X2pzXzEucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5X2pzXzEuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJIdHRwUGlwZWxpbmVMb2dMZXZlbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lfanNfMS5IdHRwUGlwZWxpbmVMb2dMZXZlbDsgfSB9KTtcbnZhciBkaXNhYmxlS2VlcEFsaXZlUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kaXNhYmxlS2VlcEFsaXZlUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMS5kaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZTsgfSB9KTtcbnZhciBodHRwQ2xpZW50QWRhcHRlcl9qc18xID0gcmVxdWlyZShcIi4vaHR0cENsaWVudEFkYXB0ZXIuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb252ZXJ0SHR0cENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaHR0cENsaWVudEFkYXB0ZXJfanNfMS5jb252ZXJ0SHR0cENsaWVudDsgfSB9KTtcbnZhciB1dGlsX2pzXzEgPSByZXF1aXJlKFwiLi91dGlsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9IdHRwSGVhZGVyc0xpa2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxfanNfMS50b0h0dHBIZWFkZXJzTGlrZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBuYW1lU3RhcnRDaGFyID0gJzpBLVphLXpfXFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkQnO1xuY29uc3QgbmFtZUNoYXIgPSBuYW1lU3RhcnRDaGFyICsgJ1xcXFwtLlxcXFxkXFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDAnO1xuY29uc3QgbmFtZVJlZ2V4cCA9ICdbJyArIG5hbWVTdGFydENoYXIgKyAnXVsnICsgbmFtZUNoYXIgKyAnXSonXG5jb25zdCByZWdleE5hbWUgPSBuZXcgUmVnRXhwKCdeJyArIG5hbWVSZWdleHAgKyAnJCcpO1xuXG5jb25zdCBnZXRBbGxNYXRjaGVzID0gZnVuY3Rpb24oc3RyaW5nLCByZWdleCkge1xuICBjb25zdCBtYXRjaGVzID0gW107XG4gIGxldCBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgd2hpbGUgKG1hdGNoKSB7XG4gICAgY29uc3QgYWxsbWF0Y2hlcyA9IFtdO1xuICAgIGFsbG1hdGNoZXMuc3RhcnRJbmRleCA9IHJlZ2V4Lmxhc3RJbmRleCAtIG1hdGNoWzBdLmxlbmd0aDtcbiAgICBjb25zdCBsZW4gPSBtYXRjaC5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgYWxsbWF0Y2hlcy5wdXNoKG1hdGNoW2luZGV4XSk7XG4gICAgfVxuICAgIG1hdGNoZXMucHVzaChhbGxtYXRjaGVzKTtcbiAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn07XG5cbmNvbnN0IGlzTmFtZSA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBjb25zdCBtYXRjaCA9IHJlZ2V4TmFtZS5leGVjKHN0cmluZyk7XG4gIHJldHVybiAhKG1hdGNoID09PSBudWxsIHx8IHR5cGVvZiBtYXRjaCA9PT0gJ3VuZGVmaW5lZCcpO1xufTtcblxuZXhwb3J0cy5pc0V4aXN0ID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gdHlwZW9mIHYgIT09ICd1bmRlZmluZWQnO1xufTtcblxuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogQ29weSBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBpbnRvIGIuXG4gKiBAcGFyYW0geyp9IHRhcmdldFxuICogQHBhcmFtIHsqfSBhXG4gKi9cbmV4cG9ydHMubWVyZ2UgPSBmdW5jdGlvbih0YXJnZXQsIGEsIGFycmF5TW9kZSkge1xuICBpZiAoYSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTsgLy8gd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Ygb3duIHByb3BlcnRpZXNcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChhcnJheU1vZGUgPT09ICdzdHJpY3QnKSB7XG4gICAgICAgIHRhcmdldFtrZXlzW2ldXSA9IFsgYVtrZXlzW2ldXSBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gYVtrZXlzW2ldXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4vKiBleHBvcnRzLm1lcmdlID1mdW5jdGlvbiAoYixhKXtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYixhKTtcbn0gKi9cblxuZXhwb3J0cy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgaWYgKGV4cG9ydHMuaXNFeGlzdCh2KSkge1xuICAgIHJldHVybiB2O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcblxuLy8gY29uc3QgZmFrZUNhbGwgPSBmdW5jdGlvbihhKSB7cmV0dXJuIGE7fTtcbi8vIGNvbnN0IGZha2VDYWxsTm9SZXR1cm4gPSBmdW5jdGlvbigpIHt9O1xuXG5leHBvcnRzLmlzTmFtZSA9IGlzTmFtZTtcbmV4cG9ydHMuZ2V0QWxsTWF0Y2hlcyA9IGdldEFsbE1hdGNoZXM7XG5leHBvcnRzLm5hbWVSZWdleHAgPSBuYW1lUmVnZXhwO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGFsbG93Qm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLCAvL0EgdGFnIGNhbiBoYXZlIGF0dHJpYnV0ZXMgd2l0aG91dCBhbnkgdmFsdWVcbiAgdW5wYWlyZWRUYWdzOiBbXVxufTtcblxuLy9jb25zdCB0YWdzUGF0dGVybiA9IG5ldyBSZWdFeHAoXCI8XFxcXC8/KFtcXFxcdzpcXFxcLV9cXC5dKylcXFxccypcXC8/PlwiLFwiZ1wiKTtcbmV4cG9ydHMudmFsaWRhdGUgPSBmdW5jdGlvbiAoeG1sRGF0YSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSxcIlwiKTsvL21ha2UgaXQgc2luZ2xlIGxpbmVcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXlxccyo8XFw/eG1sLio/XFw/PikvZyxcIlwiKTsvL1JlbW92ZSBYTUwgc3RhcnRpbmcgdGFnXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKDwhRE9DVFlQRVtcXHNcXHdcXFwiXFwuXFwvXFwtXFw6XSsoXFxbLipcXF0pKlxccyo+KS9nLFwiXCIpOy8vUmVtb3ZlIERPQ1RZUEVcbiAgY29uc3QgdGFncyA9IFtdO1xuICBsZXQgdGFnRm91bmQgPSBmYWxzZTtcblxuICAvL2luZGljYXRlcyB0aGF0IHRoZSByb290IHRhZyBoYXMgYmVlbiBjbG9zZWQgKGFrYS4gZGVwdGggMCBoYXMgYmVlbiByZWFjaGVkKVxuICBsZXQgcmVhY2hlZFJvb3QgPSBmYWxzZTtcblxuICBpZiAoeG1sRGF0YVswXSA9PT0gJ1xcdWZlZmYnKSB7XG4gICAgLy8gY2hlY2sgZm9yIGJ5dGUgb3JkZXIgbWFyayAoQk9NKVxuICAgIHhtbERhdGEgPSB4bWxEYXRhLnN1YnN0cigxKTtcbiAgfVxuICBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnICYmIHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7XG4gICAgICBpKz0yO1xuICAgICAgaSA9IHJlYWRQSSh4bWxEYXRhLGkpO1xuICAgICAgaWYgKGkuZXJyKSByZXR1cm4gaTtcbiAgICB9ZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAvL3N0YXJ0aW5nIG9mIHRhZ1xuICAgICAgLy9yZWFkIHVudGlsIHlvdSByZWFjaCB0byAnPicgYXZvaWRpbmcgYW55ICc+JyBpbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIGxldCB0YWdTdGFydFBvcyA9IGk7XG4gICAgICBpKys7XG4gICAgICBcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnIScpIHtcbiAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNsb3NpbmdUYWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICcvJykge1xuICAgICAgICAgIC8vY2xvc2luZyB0YWdcbiAgICAgICAgICBjbG9zaW5nVGFnID0gdHJ1ZTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZWFkIHRhZ25hbWVcbiAgICAgICAgbGV0IHRhZ05hbWUgPSAnJztcbiAgICAgICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICc+JyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICcgJyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXHQnICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xcbicgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFxyJzsgaSsrXG4gICAgICAgICkge1xuICAgICAgICAgIHRhZ05hbWUgKz0geG1sRGF0YVtpXTtcbiAgICAgICAgfVxuICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS50cmltKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGFnTmFtZSk7XG5cbiAgICAgICAgaWYgKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnIHdpdGhvdXQgYXR0cmlidXRlc1xuICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygwLCB0YWdOYW1lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIC8vY29udGludWU7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsaWRhdGVUYWdOYW1lKHRhZ05hbWUpKSB7XG4gICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICBpZiAodGFnTmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBtc2cgPSBcIkludmFsaWQgc3BhY2UgYWZ0ZXIgJzwnLlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtc2cgPSBcIlRhZyAnXCIrdGFnTmFtZStcIicgaXMgYW4gaW52YWxpZCBuYW1lLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBtc2csIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkQXR0cmlidXRlU3RyKHhtbERhdGEsIGkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZXMgZm9yICdcIit0YWdOYW1lK1wiJyBoYXZlIG9wZW4gcXVvdGUuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGF0dHJTdHIgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG5cbiAgICAgICAgaWYgKGF0dHJTdHJbYXR0clN0ci5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgY29uc3QgYXR0clN0clN0YXJ0ID0gaSAtIGF0dHJTdHIubGVuZ3RoO1xuICAgICAgICAgIGF0dHJTdHIgPSBhdHRyU3RyLnN1YnN0cmluZygwLCBhdHRyU3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGFnRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgLy9jb250aW51ZTsgLy90ZXh0IG1heSBwcmVzZW50cyBhZnRlciBzZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vdGhlIHJlc3VsdCBmcm9tIHRoZSBuZXN0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL2luIG9yZGVyIHRvIGdldCB0aGUgJ3RydWUnIGVycm9yIGxpbmUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgYXR0cmlidXRlIGJlZ2lucyAoaSAtIGF0dHJTdHIubGVuZ3RoKSBhbmQgdGhlbiBhZGQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL3RoaXMgZ2l2ZXMgdXMgdGhlIGFic29sdXRlIGluZGV4IGluIHRoZSBlbnRpcmUgeG1sLCB3aGljaCB3ZSBjYW4gdXNlIHRvIGZpbmQgdGhlIGxpbmUgYXQgbGFzdFxuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KGlzVmFsaWQuZXJyLmNvZGUsIGlzVmFsaWQuZXJyLm1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGF0dHJTdHJTdGFydCArIGlzVmFsaWQuZXJyLmxpbmUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2xvc2luZ1RhZykge1xuICAgICAgICAgIGlmICghcmVzdWx0LnRhZ0Nsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgZG9lc24ndCBoYXZlIHByb3BlciBjbG9zaW5nLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXR0clN0ci50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgY2FuJ3QgaGF2ZSBhdHRyaWJ1dGVzIG9yIGludmFsaWQgc3RhcnRpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdTdGFydFBvcykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsIFwiQ2xvc2luZyB0YWcgJ1wiK3RhZ05hbWUrXCInIGhhcyBub3QgYmVlbiBvcGVuZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdTdGFydFBvcykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvdGcgPSB0YWdzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKHRhZ05hbWUgIT09IG90Zy50YWdOYW1lKSB7XG4gICAgICAgICAgICAgIGxldCBvcGVuUG9zID0gZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIG90Zy50YWdTdGFydFBvcyk7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBjbG9zaW5nIHRhZyAnXCIrb3RnLnRhZ05hbWUrXCInIChvcGVuZWQgaW4gbGluZSBcIitvcGVuUG9zLmxpbmUrXCIsIGNvbCBcIitvcGVuUG9zLmNvbCtcIikgaW5zdGVhZCBvZiBjbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicuXCIsXG4gICAgICAgICAgICAgICAgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB0YWdzLCB3ZSByZWFjaGVkIHRoZSByb290IGxldmVsLlxuICAgICAgICAgICAgaWYgKHRhZ3MubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgcmVhY2hlZFJvb3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucyk7XG4gICAgICAgICAgaWYgKGlzVmFsaWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vdGhlIHJlc3VsdCBmcm9tIHRoZSBuZXN0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL2luIG9yZGVyIHRvIGdldCB0aGUgJ3RydWUnIGVycm9yIGxpbmUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgYXR0cmlidXRlIGJlZ2lucyAoaSAtIGF0dHJTdHIubGVuZ3RoKSBhbmQgdGhlbiBhZGQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL3RoaXMgZ2l2ZXMgdXMgdGhlIGFic29sdXRlIGluZGV4IGluIHRoZSBlbnRpcmUgeG1sLCB3aGljaCB3ZSBjYW4gdXNlIHRvIGZpbmQgdGhlIGxpbmUgYXQgbGFzdFxuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KGlzVmFsaWQuZXJyLmNvZGUsIGlzVmFsaWQuZXJyLm1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkgLSBhdHRyU3RyLmxlbmd0aCArIGlzVmFsaWQuZXJyLmxpbmUpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL2lmIHRoZSByb290IGxldmVsIGhhcyBiZWVuIHJlYWNoZWQgYmVmb3JlIC4uLlxuICAgICAgICAgIGlmIChyZWFjaGVkUm9vdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgJ011bHRpcGxlIHBvc3NpYmxlIHJvb3Qgbm9kZXMgZm91bmQuJywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYob3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpe1xuICAgICAgICAgICAgLy9kb24ndCBwdXNoIGludG8gc3RhY2tcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFncy5wdXNoKHt0YWdOYW1lLCB0YWdTdGFydFBvc30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL3NraXAgdGFnIHRleHQgdmFsdWVcbiAgICAgICAgLy9JdCBtYXkgaW5jbHVkZSBjb21tZW50cyBhbmQgQ0RBVEEgdmFsdWVcbiAgICAgICAgZm9yIChpKys7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8Jykge1xuICAgICAgICAgICAgaWYgKHhtbERhdGFbaSArIDFdID09PSAnIScpIHtcbiAgICAgICAgICAgICAgLy9jb21tZW50IG9yIENBREFUQVxuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIGkgPSByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpKzFdID09PSAnPycpIHtcbiAgICAgICAgICAgICAgaSA9IHJlYWRQSSh4bWxEYXRhLCArK2kpO1xuICAgICAgICAgICAgICBpZiAoaS5lcnIpIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICcmJykge1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJBbXAgPSB2YWxpZGF0ZUFtcGVyc2FuZCh4bWxEYXRhLCBpKTtcbiAgICAgICAgICAgIGlmIChhZnRlckFtcCA9PSAtMSlcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQ2hhcicsIFwiY2hhciAnJicgaXMgbm90IGV4cGVjdGVkLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgICAgaSA9IGFmdGVyQW1wO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlICYmICFpc1doaXRlU3BhY2UoeG1sRGF0YVtpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJFeHRyYSB0ZXh0IGF0IHRoZSBlbmRcIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy9lbmQgb2YgcmVhZGluZyB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggaXNXaGl0ZVNwYWNlKHhtbERhdGFbaV0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQ2hhcicsIFwiY2hhciAnXCIreG1sRGF0YVtpXStcIicgaXMgbm90IGV4cGVjdGVkLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGFnRm91bmQpIHtcbiAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnU3RhcnQgdGFnIGV4cGVjdGVkLicsIDEpO1xuICB9ZWxzZSBpZiAodGFncy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJVbmNsb3NlZCB0YWcgJ1wiK3RhZ3NbMF0udGFnTmFtZStcIicuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdzWzBdLnRhZ1N0YXJ0UG9zKSk7XG4gIH1lbHNlIGlmICh0YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsIFwiSW52YWxpZCAnXCIrXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGFncy5tYXAodCA9PiB0LnRhZ05hbWUpLCBudWxsLCA0KS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKStcbiAgICAgICAgICBcIicgZm91bmQuXCIsIHtsaW5lOiAxLCBjb2w6IDF9KTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoYXIpe1xuICByZXR1cm4gY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICdcXG4nICB8fCBjaGFyID09PSAnXFxyJztcbn1cbi8qKlxuICogUmVhZCBQcm9jZXNzaW5nIGluc3N0cnVjdGlvbnMgYW5kIHNraXBcbiAqIEBwYXJhbSB7Kn0geG1sRGF0YVxuICogQHBhcmFtIHsqfSBpXG4gKi9cbmZ1bmN0aW9uIHJlYWRQSSh4bWxEYXRhLCBpKSB7XG4gIGNvbnN0IHN0YXJ0ID0gaTtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT0gJz8nIHx8IHhtbERhdGFbaV0gPT0gJyAnKSB7XG4gICAgICAvL3RhZ25hbWVcbiAgICAgIGNvbnN0IHRhZ25hbWUgPSB4bWxEYXRhLnN1YnN0cihzdGFydCwgaSAtIHN0YXJ0KTtcbiAgICAgIGlmIChpID4gNSAmJiB0YWduYW1lID09PSAneG1sJykge1xuICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnWE1MIGRlY2xhcmF0aW9uIGFsbG93ZWQgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LicsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT0gJz8nICYmIHhtbERhdGFbaSArIDFdID09ICc+Jykge1xuICAgICAgICAvL2NoZWNrIGlmIHZhbGlkIGF0dHJpYnV0IHN0cmluZ1xuICAgICAgICBpKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpIHtcbiAgaWYgKHhtbERhdGEubGVuZ3RoID4gaSArIDUgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJy0nKSB7XG4gICAgLy9jb21tZW50XG4gICAgZm9yIChpICs9IDM7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDFdID09PSAnLScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICB4bWxEYXRhLmxlbmd0aCA+IGkgKyA4ICYmXG4gICAgeG1sRGF0YVtpICsgMV0gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDJdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2kgKyAzXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDVdID09PSAnWScgJiZcbiAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1AnICYmXG4gICAgeG1sRGF0YVtpICsgN10gPT09ICdFJ1xuICApIHtcbiAgICBsZXQgYW5nbGVCcmFja2V0c0NvdW50ID0gMTtcbiAgICBmb3IgKGkgKz0gODsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDkgJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ1snICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdDJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnRCcgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1snXG4gICkge1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICddJyAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDJdID09PSAnPicpIHtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaTtcbn1cblxuY29uc3QgZG91YmxlUXVvdGUgPSAnXCInO1xuY29uc3Qgc2luZ2xlUXVvdGUgPSBcIidcIjtcblxuLyoqXG4gKiBLZWVwIHJlYWRpbmcgeG1sRGF0YSB1bnRpbCAnPCcgaXMgZm91bmQgb3V0c2lkZSB0aGUgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBpXG4gKi9cbmZ1bmN0aW9uIHJlYWRBdHRyaWJ1dGVTdHIoeG1sRGF0YSwgaSkge1xuICBsZXQgYXR0clN0ciA9ICcnO1xuICBsZXQgc3RhcnRDaGFyID0gJyc7XG4gIGxldCB0YWdDbG9zZWQgPSBmYWxzZTtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09IGRvdWJsZVF1b3RlIHx8IHhtbERhdGFbaV0gPT09IHNpbmdsZVF1b3RlKSB7XG4gICAgICBpZiAoc3RhcnRDaGFyID09PSAnJykge1xuICAgICAgICBzdGFydENoYXIgPSB4bWxEYXRhW2ldO1xuICAgICAgfSBlbHNlIGlmIChzdGFydENoYXIgIT09IHhtbERhdGFbaV0pIHtcbiAgICAgICAgLy9pZiB2YXVlIGlzIGVuY2xvc2VkIHdpdGggZG91YmxlIHF1b3RlIHRoZW4gc2luZ2xlIHF1b3RlcyBhcmUgYWxsb3dlZCBpbnNpZGUgdGhlIHZhbHVlIGFuZCB2aWNlIHZlcnNhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXIgPSAnJztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgaWYgKHN0YXJ0Q2hhciA9PT0gJycpIHtcbiAgICAgICAgdGFnQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGF0dHJTdHIgKz0geG1sRGF0YVtpXTtcbiAgfVxuICBpZiAoc3RhcnRDaGFyICE9PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGF0dHJTdHIsXG4gICAgaW5kZXg6IGksXG4gICAgdGFnQ2xvc2VkOiB0YWdDbG9zZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBTZWxlY3QgYWxsIHRoZSBhdHRyaWJ1dGVzIHdoZXRoZXIgdmFsaWQgb3IgaW52YWxpZC5cbiAqL1xuY29uc3QgdmFsaWRBdHRyU3RyUmVneHAgPSBuZXcgUmVnRXhwKCcoXFxcXHMqKShbXlxcXFxzPV0rKShcXFxccyo9KT8oXFxcXHMqKFtcXCdcIl0pKChbXFxcXHNcXFxcU10pKj8pXFxcXDUpPycsICdnJyk7XG5cbi8vYXR0ciwgPVwic2RcIiwgYT1cImFtaXQnc1wiLCBhPVwic2RcImI9XCJzYWZcIiwgYWIgIGNkPVwiXCJcblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucykge1xuICAvL2NvbnNvbGUubG9nKFwic3RhcnQ6XCIrYXR0clN0citcIjplbmRcIik7XG5cbiAgLy9pZihhdHRyU3RyLnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiB0cnVlOyAvL2VtcHR5IHN0cmluZ1xuXG4gIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgdmFsaWRBdHRyU3RyUmVneHApO1xuICBjb25zdCBhdHRyTmFtZXMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWF0Y2hlc1tpXVsxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vbm9zcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWU6IGE9XCJzZFwiYj1cInNhZlwiXG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGhhcyBubyBzcGFjZSBpbiBzdGFydGluZy5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpXG4gICAgfSBlbHNlIGlmIChtYXRjaGVzW2ldWzNdICE9PSB1bmRlZmluZWQgJiYgbWF0Y2hlc1tpXVs0XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGlzIHdpdGhvdXQgdmFsdWUuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXNbaV1bM10gPT09IHVuZGVmaW5lZCAmJiAhb3B0aW9ucy5hbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzKSB7XG4gICAgICAvL2luZGVwZW5kZW50IGF0dHJpYnV0ZTogYWJcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcImJvb2xlYW4gYXR0cmlidXRlICdcIittYXRjaGVzW2ldWzJdK1wiJyBpcyBub3QgYWxsb3dlZC5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH1cbiAgICAvKiBlbHNlIGlmKG1hdGNoZXNbaV1bNl0gPT09IHVuZGVmaW5lZCl7Ly9hdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZTogYWI9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVycjogeyBjb2RlOlwiSW52YWxpZEF0dHJcIixtc2c6XCJhdHRyaWJ1dGUgXCIgKyBtYXRjaGVzW2ldWzJdICsgXCIgaGFzIG5vIHZhbHVlIGFzc2lnbmVkLlwifX07XG4gICAgICAgICAgICAgICAgfSAqL1xuICAgIGNvbnN0IGF0dHJOYW1lID0gbWF0Y2hlc1tpXVsyXTtcbiAgICBpZiAoIXZhbGlkYXRlQXR0ck5hbWUoYXR0ck5hbWUpKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK2F0dHJOYW1lK1wiJyBpcyBhbiBpbnZhbGlkIG5hbWUuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9XG4gICAgaWYgKCFhdHRyTmFtZXMuaGFzT3duUHJvcGVydHkoYXR0ck5hbWUpKSB7XG4gICAgICAvL2NoZWNrIGZvciBkdXBsaWNhdGUgYXR0cmlidXRlLlxuICAgICAgYXR0ck5hbWVzW2F0dHJOYW1lXSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrYXR0ck5hbWUrXCInIGlzIHJlcGVhdGVkLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyQW1wZXJzYW5kKHhtbERhdGEsIGkpIHtcbiAgbGV0IHJlID0gL1xcZC87XG4gIGlmICh4bWxEYXRhW2ldID09PSAneCcpIHtcbiAgICBpKys7XG4gICAgcmUgPSAvW1xcZGEtZkEtRl0vO1xuICB9XG4gIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgICByZXR1cm4gaTtcbiAgICBpZiAoIXhtbERhdGFbaV0ubWF0Y2gocmUpKVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUFtcGVyc2FuZCh4bWxEYXRhLCBpKSB7XG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwvI2R0LWNoYXJyZWZcbiAgaSsrO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgIHJldHVybiAtMTtcbiAgaWYgKHhtbERhdGFbaV0gPT09ICcjJykge1xuICAgIGkrKztcbiAgICByZXR1cm4gdmFsaWRhdGVOdW1iZXJBbXBlcnNhbmQoeG1sRGF0YSwgaSk7XG4gIH1cbiAgbGV0IGNvdW50ID0gMDtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrLCBjb3VudCsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0ubWF0Y2goL1xcdy8pICYmIGNvdW50IDwgMjApXG4gICAgICBjb250aW51ZTtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgICAgYnJlYWs7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvck9iamVjdChjb2RlLCBtZXNzYWdlLCBsaW5lTnVtYmVyKSB7XG4gIHJldHVybiB7XG4gICAgZXJyOiB7XG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgbXNnOiBtZXNzYWdlLFxuICAgICAgbGluZTogbGluZU51bWJlci5saW5lIHx8IGxpbmVOdW1iZXIsXG4gICAgICBjb2w6IGxpbmVOdW1iZXIuY29sLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXR0ck5hbWUoYXR0ck5hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKGF0dHJOYW1lKTtcbn1cblxuLy8gY29uc3Qgc3RhcnRzV2l0aFhNTCA9IC9eeG1sL2k7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFnTmFtZSh0YWduYW1lKSB7XG4gIHJldHVybiB1dGlsLmlzTmFtZSh0YWduYW1lKSAvKiAmJiAhdGFnbmFtZS5tYXRjaChzdGFydHNXaXRoWE1MKSAqLztcbn1cblxuLy90aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBpbmRleFxuZnVuY3Rpb24gZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGluZGV4KSB7XG4gIGNvbnN0IGxpbmVzID0geG1sRGF0YS5zdWJzdHJpbmcoMCwgaW5kZXgpLnNwbGl0KC9cXHI/XFxuLyk7XG4gIHJldHVybiB7XG4gICAgbGluZTogbGluZXMubGVuZ3RoLFxuXG4gICAgLy8gY29sdW1uIG51bWJlciBpcyBsYXN0IGxpbmUncyBsZW5ndGggKyAxLCBiZWNhdXNlIGNvbHVtbiBudW1iZXJpbmcgc3RhcnRzIGF0IDE6XG4gICAgY29sOiBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggKyAxXG4gIH07XG59XG5cbi8vdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIG1hdGNoIHdpdGhpbiBhdHRyU3RyXG5mdW5jdGlvbiBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaCkge1xuICByZXR1cm4gbWF0Y2guc3RhcnRJbmRleCArIG1hdGNoWzFdLmxlbmd0aDtcbn1cbiIsCiAgICAiXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBwcmVzZXJ2ZU9yZGVyOiBmYWxzZSxcbiAgICBhdHRyaWJ1dGVOYW1lUHJlZml4OiAnQF8nLFxuICAgIGF0dHJpYnV0ZXNHcm91cE5hbWU6IGZhbHNlLFxuICAgIHRleHROb2RlTmFtZTogJyN0ZXh0JyxcbiAgICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICAgIHJlbW92ZU5TUHJlZml4OiBmYWxzZSwgLy8gcmVtb3ZlIE5TIGZyb20gdGFnIG5hbWUgb3IgYXR0cmlidXRlIG5hbWUgaWYgdHJ1ZVxuICAgIGFsbG93Qm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLCAvL2EgdGFnIGNhbiBoYXZlIGF0dHJpYnV0ZXMgd2l0aG91dCBhbnkgdmFsdWVcbiAgICAvL2lnbm9yZVJvb3RFbGVtZW50IDogZmFsc2UsXG4gICAgcGFyc2VUYWdWYWx1ZTogdHJ1ZSxcbiAgICBwYXJzZUF0dHJpYnV0ZVZhbHVlOiBmYWxzZSxcbiAgICB0cmltVmFsdWVzOiB0cnVlLCAvL1RyaW0gc3RyaW5nIHZhbHVlcyBvZiB0YWcgYW5kIGF0dHJpYnV0ZXNcbiAgICBjZGF0YVByb3BOYW1lOiBmYWxzZSxcbiAgICBudW1iZXJQYXJzZU9wdGlvbnM6IHtcbiAgICAgIGhleDogdHJ1ZSxcbiAgICAgIGxlYWRpbmdaZXJvczogdHJ1ZSxcbiAgICAgIGVOb3RhdGlvbjogdHJ1ZVxuICAgIH0sXG4gICAgdGFnVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKHRhZ05hbWUsIHZhbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuICAgIGF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihhdHRyTmFtZSwgdmFsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgc3RvcE5vZGVzOiBbXSwgLy9uZXN0ZWQgdGFncyB3aWxsIG5vdCBiZSBwYXJzZWQgZXZlbiBmb3IgZXJyb3JzXG4gICAgYWx3YXlzQ3JlYXRlVGV4dE5vZGU6IGZhbHNlLFxuICAgIGlzQXJyYXk6ICgpID0+IGZhbHNlLFxuICAgIGNvbW1lbnRQcm9wTmFtZTogZmFsc2UsXG4gICAgdW5wYWlyZWRUYWdzOiBbXSxcbiAgICBwcm9jZXNzRW50aXRpZXM6IHRydWUsXG4gICAgaHRtbEVudGl0aWVzOiBmYWxzZSxcbiAgICBpZ25vcmVEZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgaWdub3JlUGlUYWdzOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1UYWdOYW1lOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lOiBmYWxzZSxcbiAgICB1cGRhdGVUYWc6IGZ1bmN0aW9uKHRhZ05hbWUsIGpQYXRoLCBhdHRycyl7XG4gICAgICByZXR1cm4gdGFnTmFtZVxuICAgIH0sXG4gICAgLy8gc2tpcEVtcHR5TGlzdEl0ZW06IGZhbHNlXG59O1xuICAgXG5jb25zdCBidWlsZE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydHMuYnVpbGRPcHRpb25zID0gYnVpbGRPcHRpb25zO1xuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zOyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBYbWxOb2Rle1xuICBjb25zdHJ1Y3Rvcih0YWduYW1lKSB7XG4gICAgdGhpcy50YWduYW1lID0gdGFnbmFtZTtcbiAgICB0aGlzLmNoaWxkID0gW107IC8vbmVzdGVkIHRhZ3MsIHRleHQsIGNkYXRhLCBjb21tZW50cyBpbiBvcmRlclxuICAgIHRoaXNbXCI6QFwiXSA9IHt9OyAvL2F0dHJpYnV0ZXMgbWFwXG4gIH1cbiAgYWRkKGtleSx2YWwpe1xuICAgIC8vIHRoaXMuY2hpbGQucHVzaCgge25hbWUgOiBrZXksIHZhbDogdmFsLCBpc0NkYXRhOiBpc0NkYXRhIH0pO1xuICAgIGlmKGtleSA9PT0gXCJfX3Byb3RvX19cIikga2V5ID0gXCIjX19wcm90b19fXCI7XG4gICAgdGhpcy5jaGlsZC5wdXNoKCB7W2tleV06IHZhbCB9KTtcbiAgfVxuICBhZGRDaGlsZChub2RlKSB7XG4gICAgaWYobm9kZS50YWduYW1lID09PSBcIl9fcHJvdG9fX1wiKSBub2RlLnRhZ25hbWUgPSBcIiNfX3Byb3RvX19cIjtcbiAgICBpZihub2RlW1wiOkBcIl0gJiYgT2JqZWN0LmtleXMobm9kZVtcIjpAXCJdKS5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuY2hpbGQucHVzaCggeyBbbm9kZS50YWduYW1lXTogbm9kZS5jaGlsZCwgW1wiOkBcIl06IG5vZGVbXCI6QFwiXSB9KTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuY2hpbGQucHVzaCggeyBbbm9kZS50YWduYW1lXTogbm9kZS5jaGlsZCB9KTtcbiAgICB9XG4gIH07XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gWG1sTm9kZTsiLAogICAgImNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbi8vVE9ETzogaGFuZGxlIGNvbW1lbnRzXG5mdW5jdGlvbiByZWFkRG9jVHlwZSh4bWxEYXRhLCBpKXtcbiAgICBcbiAgICBjb25zdCBlbnRpdGllcyA9IHt9O1xuICAgIGlmKCB4bWxEYXRhW2kgKyAzXSA9PT0gJ08nICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0MnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA1XSA9PT0gJ1QnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1knICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1AnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA4XSA9PT0gJ0UnKVxuICAgIHsgICAgXG4gICAgICAgIGkgPSBpKzk7XG4gICAgICAgIGxldCBhbmdsZUJyYWNrZXRzQ291bnQgPSAxO1xuICAgICAgICBsZXQgaGFzQm9keSA9IGZhbHNlLCBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGxldCBleHAgPSBcIlwiO1xuICAgICAgICBmb3IoO2k8eG1sRGF0YS5sZW5ndGg7aSsrKXtcbiAgICAgICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcgJiYgIWNvbW1lbnQpIHsgLy9EZXRlcm1pbmUgdGhlIHRhZyB0eXBlXG4gICAgICAgICAgICAgICAgaWYoIGhhc0JvZHkgJiYgaXNFbnRpdHkoeG1sRGF0YSwgaSkpe1xuICAgICAgICAgICAgICAgICAgICBpICs9IDc7IFxuICAgICAgICAgICAgICAgICAgICBbZW50aXR5TmFtZSwgdmFsLGldID0gcmVhZEVudGl0eUV4cCh4bWxEYXRhLGkrMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHZhbC5pbmRleE9mKFwiJlwiKSA9PT0gLTEpIC8vUGFyYW1ldGVyIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdGllc1sgdmFsaWRhdGVFbnRpdHlOYW1lKGVudGl0eU5hbWUpIF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVneCA6IFJlZ0V4cCggYCYke2VudGl0eU5hbWV9O2AsXCJnXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbDogdmFsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzRWxlbWVudCh4bWxEYXRhLCBpKSkgIGkgKz0gODsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzQXR0bGlzdCh4bWxEYXRhLCBpKSkgIGkgKz0gODsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzTm90YXRpb24oeG1sRGF0YSwgaSkpIGkgKz0gOTsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBpc0NvbW1lbnQpICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBET0NUWVBFXCIpO1xuXG4gICAgICAgICAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICAgICAgICAgICAgZXhwID0gXCJcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7IC8vUmVhZCB0YWcgY29udGVudFxuICAgICAgICAgICAgICAgIGlmKGNvbW1lbnQpe1xuICAgICAgICAgICAgICAgICAgICBpZiggeG1sRGF0YVtpIC0gMV0gPT09IFwiLVwiICYmIHhtbERhdGFbaSAtIDJdID09PSBcIi1cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYoIHhtbERhdGFbaV0gPT09ICdbJyl7XG4gICAgICAgICAgICAgICAgaGFzQm9keSA9IHRydWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBleHAgKz0geG1sRGF0YVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihhbmdsZUJyYWNrZXRzQ291bnQgIT09IDApe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmNsb3NlZCBET0NUWVBFYCk7XG4gICAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFRhZyBpbnN0ZWFkIG9mIERPQ1RZUEVgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtlbnRpdGllcywgaX07XG59XG5cbmZ1bmN0aW9uIHJlYWRFbnRpdHlFeHAoeG1sRGF0YSxpKXtcbiAgICAvL0V4dGVybmFsIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgLy8gICAgPCFFTlRJVFkgZXh0IFNZU1RFTSBcImh0dHA6Ly9ub3JtYWwtd2Vic2l0ZS5jb21cIiA+XG5cbiAgICAvL1BhcmFtZXRlciBlbnRpdGllcyBhcmUgbm90IHN1cHBvcnRlZFxuICAgIC8vICAgIDwhRU5USVRZIGVudGl0eW5hbWUgXCImYW5vdGhlckVsZW1lbnQ7XCI+XG5cbiAgICAvL0ludGVybmFsIGVudGl0aWVzIGFyZSBzdXBwb3J0ZWRcbiAgICAvLyAgICA8IUVOVElUWSBlbnRpdHluYW1lIFwicmVwbGFjZW1lbnQgdGV4dFwiPlxuICAgIFxuICAgIC8vcmVhZCBFbnRpdHlOYW1lXG4gICAgbGV0IGVudGl0eU5hbWUgPSBcIlwiO1xuICAgIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGggJiYgKHhtbERhdGFbaV0gIT09IFwiJ1wiICYmIHhtbERhdGFbaV0gIT09ICdcIicgKTsgaSsrKSB7XG4gICAgICAgIC8vIGlmKHhtbERhdGFbaV0gPT09IFwiIFwiKSBjb250aW51ZTtcbiAgICAgICAgLy8gZWxzZSBcbiAgICAgICAgZW50aXR5TmFtZSArPSB4bWxEYXRhW2ldO1xuICAgIH1cbiAgICBlbnRpdHlOYW1lID0gZW50aXR5TmFtZS50cmltKCk7XG4gICAgaWYoZW50aXR5TmFtZS5pbmRleE9mKFwiIFwiKSAhPT0gLTEpIHRocm93IG5ldyBFcnJvcihcIkV4dGVybmFsIGVudGl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG5cbiAgICAvL3JlYWQgRW50aXR5IFZhbHVlXG4gICAgY29uc3Qgc3RhcnRDaGFyID0geG1sRGF0YVtpKytdO1xuICAgIGxldCB2YWwgPSBcIlwiXG4gICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJiB4bWxEYXRhW2ldICE9PSBzdGFydENoYXIgOyBpKyspIHtcbiAgICAgICAgdmFsICs9IHhtbERhdGFbaV07XG4gICAgfVxuICAgIHJldHVybiBbZW50aXR5TmFtZSwgdmFsLCBpXTtcbn1cblxuZnVuY3Rpb24gaXNDb21tZW50KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnLScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICctJykgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2Vcbn1cbmZ1bmN0aW9uIGlzRW50aXR5KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdOJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnSScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ1knKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNFbGVtZW50KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdMJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ0UnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnTScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdFJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzhdID09PSAnVCcpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGlzQXR0bGlzdCh4bWxEYXRhLCBpKXtcbiAgICBpZih4bWxEYXRhW2krMV0gPT09ICchJyAmJlxuICAgIHhtbERhdGFbaSsyXSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpKzNdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs1XSA9PT0gJ0wnICYmXG4gICAgeG1sRGF0YVtpKzZdID09PSAnSScgJiZcbiAgICB4bWxEYXRhW2krN10gPT09ICdTJyAmJlxuICAgIHhtbERhdGFbaSs4XSA9PT0gJ1QnKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNOb3RhdGlvbih4bWxEYXRhLCBpKXtcbiAgICBpZih4bWxEYXRhW2krMV0gPT09ICchJyAmJlxuICAgIHhtbERhdGFbaSsyXSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzNdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2krNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs1XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpKzZdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krN10gPT09ICdJJyAmJlxuICAgIHhtbERhdGFbaSs4XSA9PT0gJ08nICYmXG4gICAgeG1sRGF0YVtpKzldID09PSAnTicpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRW50aXR5TmFtZShuYW1lKXtcbiAgICBpZiAodXRpbC5pc05hbWUobmFtZSkpXG5cdHJldHVybiBuYW1lO1xuICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVudGl0eSBuYW1lICR7bmFtZX1gKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWFkRG9jVHlwZTtcbiIsCiAgICAiY29uc3QgaGV4UmVnZXggPSAvXlstK10/MHhbYS1mQS1GMC05XSskLztcbmNvbnN0IG51bVJlZ2V4ID0gL14oW1xcLVxcK10pPygwKikoXFwuWzAtOV0rKFtlRV1cXC0/WzAtOV0rKT98WzAtOV0rKFxcLlswLTldKyhbZUVdXFwtP1swLTldKyk/KT8pJC87XG4vLyBjb25zdCBvY3RSZWdleCA9IC8weFthLXowLTldKy87XG4vLyBjb25zdCBiaW5SZWdleCA9IC8weFthLXowLTldKy87XG5cblxuLy9wb2x5ZmlsbFxuaWYgKCFOdW1iZXIucGFyc2VJbnQgJiYgd2luZG93LnBhcnNlSW50KSB7XG4gICAgTnVtYmVyLnBhcnNlSW50ID0gd2luZG93LnBhcnNlSW50O1xufVxuaWYgKCFOdW1iZXIucGFyc2VGbG9hdCAmJiB3aW5kb3cucGFyc2VGbG9hdCkge1xuICAgIE51bWJlci5wYXJzZUZsb2F0ID0gd2luZG93LnBhcnNlRmxvYXQ7XG59XG5cbiAgXG5jb25zdCBjb25zaWRlciA9IHtcbiAgICBoZXggOiAgdHJ1ZSxcbiAgICBsZWFkaW5nWmVyb3M6IHRydWUsXG4gICAgZGVjaW1hbFBvaW50OiBcIlxcLlwiLFxuICAgIGVOb3RhdGlvbjogdHJ1ZVxuICAgIC8vc2tpcExpa2U6IC9yZWdleC9cbn07XG5cbmZ1bmN0aW9uIHRvTnVtYmVyKHN0ciwgb3B0aW9ucyA9IHt9KXtcbiAgICAvLyBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgY29uc2lkZXIpO1xuICAgIC8vIGlmKG9wdC5sZWFkaW5nWmVyb3MgPT09IGZhbHNlKXtcbiAgICAvLyAgICAgb3B0aW9ucy5sZWFkaW5nWmVyb3MgPSBmYWxzZTtcbiAgICAvLyB9ZWxzZSBpZihvcHQuaGV4ID09PSBmYWxzZSl7XG4gICAgLy8gICAgIG9wdGlvbnMuaGV4ID0gZmFsc2U7XG4gICAgLy8gfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnNpZGVyLCBvcHRpb25zICk7XG4gICAgaWYoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiICkgcmV0dXJuIHN0cjtcbiAgICBcbiAgICBsZXQgdHJpbW1lZFN0ciAgPSBzdHIudHJpbSgpO1xuICAgIC8vIGlmKHRyaW1tZWRTdHIgPT09IFwiMC4wXCIpIHJldHVybiAwO1xuICAgIC8vIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gXCIrMC4wXCIpIHJldHVybiAwO1xuICAgIC8vIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gXCItMC4wXCIpIHJldHVybiAtMDtcblxuICAgIGlmKG9wdGlvbnMuc2tpcExpa2UgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnNraXBMaWtlLnRlc3QodHJpbW1lZFN0cikpIHJldHVybiBzdHI7XG4gICAgZWxzZSBpZiAob3B0aW9ucy5oZXggJiYgaGV4UmVnZXgudGVzdCh0cmltbWVkU3RyKSkge1xuICAgICAgICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHRyaW1tZWRTdHIsIDE2KTtcbiAgICAvLyB9IGVsc2UgaWYgKG9wdGlvbnMucGFyc2VPY3QgJiYgb2N0UmVnZXgudGVzdChzdHIpKSB7XG4gICAgLy8gICAgIHJldHVybiBOdW1iZXIucGFyc2VJbnQodmFsLCA4KTtcbiAgICAvLyB9ZWxzZSBpZiAob3B0aW9ucy5wYXJzZUJpbiAmJiBiaW5SZWdleC50ZXN0KHN0cikpIHtcbiAgICAvLyAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludCh2YWwsIDIpO1xuICAgIH1lbHNle1xuICAgICAgICAvL3NlcGFyYXRlIG5lZ2F0aXZlIHNpZ24sIGxlYWRpbmcgemVyb3MsIGFuZCByZXN0IG51bWJlclxuICAgICAgICBjb25zdCBtYXRjaCA9IG51bVJlZ2V4LmV4ZWModHJpbW1lZFN0cik7XG4gICAgICAgIGlmKG1hdGNoKXtcbiAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIGNvbnN0IGxlYWRpbmdaZXJvcyA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgbGV0IG51bVRyaW1tZWRCeVplcm9zID0gdHJpbVplcm9zKG1hdGNoWzNdKTsgLy9jb21wbGV0ZSBudW0gd2l0aG91dCBsZWFkaW5nIHplcm9zXG4gICAgICAgICAgICAvL3RyaW0gZW5kaW5nIHplcm9zIGZvciBmbG9hdGluZyBudW1iZXJcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZU5vdGF0aW9uID0gbWF0Y2hbNF0gfHwgbWF0Y2hbNl07XG4gICAgICAgICAgICBpZighb3B0aW9ucy5sZWFkaW5nWmVyb3MgJiYgbGVhZGluZ1plcm9zLmxlbmd0aCA+IDAgJiYgc2lnbiAmJiB0cmltbWVkU3RyWzJdICE9PSBcIi5cIikgcmV0dXJuIHN0cjsgLy8tMDEyM1xuICAgICAgICAgICAgZWxzZSBpZighb3B0aW9ucy5sZWFkaW5nWmVyb3MgJiYgbGVhZGluZ1plcm9zLmxlbmd0aCA+IDAgJiYgIXNpZ24gJiYgdHJpbW1lZFN0clsxXSAhPT0gXCIuXCIpIHJldHVybiBzdHI7IC8vMDEyM1xuICAgICAgICAgICAgZWxzZXsvL25vIGxlYWRpbmcgemVyb3Mgb3IgbGVhZGluZyB6ZXJvcyBhcmUgYWxsb3dlZFxuICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih0cmltbWVkU3RyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1TdHIgPSBcIlwiICsgbnVtO1xuICAgICAgICAgICAgICAgIGlmKG51bVN0ci5zZWFyY2goL1tlRV0vKSAhPT0gLTEpeyAvL2dpdmVuIG51bWJlciBpcyBsb25nIGFuZCBwYXJzZWQgdG8gZU5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuZU5vdGF0aW9uKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZU5vdGF0aW9uKXsgLy9naXZlbiBudW1iZXIgaGFzIGVub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZihvcHRpb25zLmVOb3RhdGlvbikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHRyaW1tZWRTdHIuaW5kZXhPZihcIi5cIikgIT09IC0xKXsgLy9mbG9hdGluZyBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgZGVjaW1hbFBhcnQgPSBtYXRjaFs1XS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGludFBhcnQgPSB0cmltbWVkU3RyLnN1YnN0cigwLHRyaW1tZWRTdHIuaW5kZXhPZihcIi5cIikpO1xuXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBwID0gbnVtU3RyLmluZGV4T2YoXCIuXCIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBnaXZlbkludFBhcnQgPSBudW1TdHIuc3Vic3RyKDAscCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGdpdmVuRGVjUGFydCA9IG51bVN0ci5zdWJzdHIocCsxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYobnVtU3RyID09PSBcIjBcIiAmJiAobnVtVHJpbW1lZEJ5WmVyb3MgPT09IFwiXCIpICkgcmV0dXJuIG51bTsgLy8wLjBcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihudW1TdHIgPT09IG51bVRyaW1tZWRCeVplcm9zKSByZXR1cm4gbnVtOyAvLzAuNDU2LiAwLjc5MDAwXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIHNpZ24gJiYgbnVtU3RyID09PSBcIi1cIitudW1UcmltbWVkQnlaZXJvcykgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZihsZWFkaW5nWmVyb3Mpe1xuICAgICAgICAgICAgICAgICAgICAvLyBpZihudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGlmKG9wdGlvbnMubGVhZGluZ1plcm9zKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICBpZihudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHNpZ24rbnVtVHJpbW1lZEJ5WmVyb3MgPT09IG51bVN0cikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRyaW1tZWRTdHIgPT09IG51bVN0cikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHRyaW1tZWRTdHIgPT09IHNpZ24rbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgIC8vIGVsc2V7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vbnVtYmVyIHdpdGggKy8tIHNpZ25cbiAgICAgICAgICAgICAgICAvLyAgICAgdHJpbW1lZFN0ci50ZXN0KC9bLStdWzAtOV0pO1xuXG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbHNlIGlmKCFlTm90YXRpb24gJiYgdHJpbW1lZFN0ciAmJiB0cmltbWVkU3RyICE9PSBOdW1iZXIodHJpbW1lZFN0cikgKSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNleyAvL25vbi1udW1lcmljIHN0cmluZ1xuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBudW1TdHIgd2l0aG91dCBsZWFkaW5nIHplcm9zXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdHJpbVplcm9zKG51bVN0cil7XG4gICAgaWYobnVtU3RyICYmIG51bVN0ci5pbmRleE9mKFwiLlwiKSAhPT0gLTEpey8vZmxvYXRcbiAgICAgICAgbnVtU3RyID0gbnVtU3RyLnJlcGxhY2UoLzArJC8sIFwiXCIpOyAvL3JlbW92ZSBlbmRpbmcgemVyb3NcbiAgICAgICAgaWYobnVtU3RyID09PSBcIi5cIikgIG51bVN0ciA9IFwiMFwiO1xuICAgICAgICBlbHNlIGlmKG51bVN0clswXSA9PT0gXCIuXCIpICBudW1TdHIgPSBcIjBcIitudW1TdHI7XG4gICAgICAgIGVsc2UgaWYobnVtU3RyW251bVN0ci5sZW5ndGgtMV0gPT09IFwiLlwiKSAgbnVtU3RyID0gbnVtU3RyLnN1YnN0cigwLG51bVN0ci5sZW5ndGgtMSk7XG4gICAgICAgIHJldHVybiBudW1TdHI7XG4gICAgfVxuICAgIHJldHVybiBudW1TdHI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvTnVtYmVyXG4iLAogICAgImZ1bmN0aW9uIGdldElnbm9yZUF0dHJpYnV0ZXNGbihpZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHR5cGVvZiBpZ25vcmVBdHRyaWJ1dGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBpZ25vcmVBdHRyaWJ1dGVzXG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGlnbm9yZUF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIHJldHVybiAoYXR0ck5hbWUpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBpZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJyAmJiBhdHRyTmFtZSA9PT0gcGF0dGVybikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBwYXR0ZXJuLnRlc3QoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiBmYWxzZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldElnbm9yZUF0dHJpYnV0ZXNGbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuLy8vQHRzLWNoZWNrXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB4bWxOb2RlID0gcmVxdWlyZSgnLi94bWxOb2RlJyk7XG5jb25zdCByZWFkRG9jVHlwZSA9IHJlcXVpcmUoXCIuL0RvY1R5cGVSZWFkZXJcIik7XG5jb25zdCB0b051bWJlciA9IHJlcXVpcmUoXCJzdHJudW1cIik7XG5jb25zdCBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4gPSByZXF1aXJlKCcuLi9pZ25vcmVBdHRyaWJ1dGVzJylcblxuLy8gY29uc3QgcmVneCA9XG4vLyAgICc8KCghXFxcXFtDREFUQVxcXFxbKFtcXFxcc1xcXFxTXSo/KShdXT4pKXwoKE5BTUU6KT8oTkFNRSkpKFtePl0qKT58KChcXFxcLykoTkFNRSlcXFxccyo+KSkoW148XSopJ1xuLy8gICAucmVwbGFjZSgvTkFNRS9nLCB1dGlsLm5hbWVSZWdleHApO1xuXG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/W1xcXFx3OlxcXFwtXFwuX10rKShbXj5dKik+KFxcXFxzKlwiK2NkYXRhUmVneCtcIikqKFtePF0rKT9cIixcImdcIik7XG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/KSgoXFxcXHcqOik/KFtcXFxcdzpcXFxcLVxcLl9dKykpKFtePl0qKT4oW148XSopKFwiK2NkYXRhUmVneCtcIihbXjxdKikpKihbXjxdKyk/XCIsXCJnXCIpO1xuXG5jbGFzcyBPcmRlcmVkT2JqUGFyc2Vye1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKXtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuY3VycmVudE5vZGUgPSBudWxsO1xuICAgIHRoaXMudGFnc05vZGVTdGFjayA9IFtdO1xuICAgIHRoaXMuZG9jVHlwZUVudGl0aWVzID0ge307XG4gICAgdGhpcy5sYXN0RW50aXRpZXMgPSB7XG4gICAgICBcImFwb3NcIiA6IHsgcmVnZXg6IC8mKGFwb3N8IzM5fCN4MjcpOy9nLCB2YWwgOiBcIidcIn0sXG4gICAgICBcImd0XCIgOiB7IHJlZ2V4OiAvJihndHwjNjJ8I3gzRSk7L2csIHZhbCA6IFwiPlwifSxcbiAgICAgIFwibHRcIiA6IHsgcmVnZXg6IC8mKGx0fCM2MHwjeDNDKTsvZywgdmFsIDogXCI8XCJ9LFxuICAgICAgXCJxdW90XCIgOiB7IHJlZ2V4OiAvJihxdW90fCMzNHwjeDIyKTsvZywgdmFsIDogXCJcXFwiXCJ9LFxuICAgIH07XG4gICAgdGhpcy5hbXBFbnRpdHkgPSB7IHJlZ2V4OiAvJihhbXB8IzM4fCN4MjYpOy9nLCB2YWwgOiBcIiZcIn07XG4gICAgdGhpcy5odG1sRW50aXRpZXMgPSB7XG4gICAgICBcInNwYWNlXCI6IHsgcmVnZXg6IC8mKG5ic3B8IzE2MCk7L2csIHZhbDogXCIgXCIgfSxcbiAgICAgIC8vIFwibHRcIiA6IHsgcmVnZXg6IC8mKGx0fCM2MCk7L2csIHZhbDogXCI8XCIgfSxcbiAgICAgIC8vIFwiZ3RcIiA6IHsgcmVnZXg6IC8mKGd0fCM2Mik7L2csIHZhbDogXCI+XCIgfSxcbiAgICAgIC8vIFwiYW1wXCIgOiB7IHJlZ2V4OiAvJihhbXB8IzM4KTsvZywgdmFsOiBcIiZcIiB9LFxuICAgICAgLy8gXCJxdW90XCIgOiB7IHJlZ2V4OiAvJihxdW90fCMzNCk7L2csIHZhbDogXCJcXFwiXCIgfSxcbiAgICAgIC8vIFwiYXBvc1wiIDogeyByZWdleDogLyYoYXBvc3wjMzkpOy9nLCB2YWw6IFwiJ1wiIH0sXG4gICAgICBcImNlbnRcIiA6IHsgcmVnZXg6IC8mKGNlbnR8IzE2Mik7L2csIHZhbDogXCLColwiIH0sXG4gICAgICBcInBvdW5kXCIgOiB7IHJlZ2V4OiAvJihwb3VuZHwjMTYzKTsvZywgdmFsOiBcIsKjXCIgfSxcbiAgICAgIFwieWVuXCIgOiB7IHJlZ2V4OiAvJih5ZW58IzE2NSk7L2csIHZhbDogXCLCpVwiIH0sXG4gICAgICBcImV1cm9cIiA6IHsgcmVnZXg6IC8mKGV1cm98IzgzNjQpOy9nLCB2YWw6IFwi4oKsXCIgfSxcbiAgICAgIFwiY29weXJpZ2h0XCIgOiB7IHJlZ2V4OiAvJihjb3B5fCMxNjkpOy9nLCB2YWw6IFwiwqlcIiB9LFxuICAgICAgXCJyZWdcIiA6IHsgcmVnZXg6IC8mKHJlZ3wjMTc0KTsvZywgdmFsOiBcIsKuXCIgfSxcbiAgICAgIFwiaW5yXCIgOiB7IHJlZ2V4OiAvJihpbnJ8IzgzNzcpOy9nLCB2YWw6IFwi4oK5XCIgfSxcbiAgICAgIFwibnVtX2RlY1wiOiB7IHJlZ2V4OiAvJiMoWzAtOV17MSw3fSk7L2csIHZhbCA6IChfLCBzdHIpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KHN0ciwgMTApKSB9LFxuICAgICAgXCJudW1faGV4XCI6IHsgcmVnZXg6IC8mI3goWzAtOWEtZkEtRl17MSw2fSk7L2csIHZhbCA6IChfLCBzdHIpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KHN0ciwgMTYpKSB9LFxuICAgIH07XG4gICAgdGhpcy5hZGRFeHRlcm5hbEVudGl0aWVzID0gYWRkRXh0ZXJuYWxFbnRpdGllcztcbiAgICB0aGlzLnBhcnNlWG1sID0gcGFyc2VYbWw7XG4gICAgdGhpcy5wYXJzZVRleHREYXRhID0gcGFyc2VUZXh0RGF0YTtcbiAgICB0aGlzLnJlc29sdmVOYW1lU3BhY2UgPSByZXNvbHZlTmFtZVNwYWNlO1xuICAgIHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwID0gYnVpbGRBdHRyaWJ1dGVzTWFwO1xuICAgIHRoaXMuaXNJdFN0b3BOb2RlID0gaXNJdFN0b3BOb2RlO1xuICAgIHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUgPSByZXBsYWNlRW50aXRpZXNWYWx1ZTtcbiAgICB0aGlzLnJlYWRTdG9wTm9kZURhdGEgPSByZWFkU3RvcE5vZGVEYXRhO1xuICAgIHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyA9IHNhdmVUZXh0VG9QYXJlbnRUYWc7XG4gICAgdGhpcy5hZGRDaGlsZCA9IGFkZENoaWxkO1xuICAgIHRoaXMuaWdub3JlQXR0cmlidXRlc0ZuID0gZ2V0SWdub3JlQXR0cmlidXRlc0ZuKHRoaXMub3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzKVxuICB9XG5cbn1cblxuZnVuY3Rpb24gYWRkRXh0ZXJuYWxFbnRpdGllcyhleHRlcm5hbEVudGl0aWVzKXtcbiAgY29uc3QgZW50S2V5cyA9IE9iamVjdC5rZXlzKGV4dGVybmFsRW50aXRpZXMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVudEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBlbnQgPSBlbnRLZXlzW2ldO1xuICAgIHRoaXMubGFzdEVudGl0aWVzW2VudF0gPSB7XG4gICAgICAgcmVnZXg6IG5ldyBSZWdFeHAoXCImXCIrZW50K1wiO1wiLFwiZ1wiKSxcbiAgICAgICB2YWwgOiBleHRlcm5hbEVudGl0aWVzW2VudF1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGpQYXRoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGRvbnRUcmltXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0F0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMZWFmTm9kZVxuICogQHBhcmFtIHtib29sZWFufSBlc2NhcGVFbnRpdGllc1xuICovXG5mdW5jdGlvbiBwYXJzZVRleHREYXRhKHZhbCwgdGFnTmFtZSwgalBhdGgsIGRvbnRUcmltLCBoYXNBdHRyaWJ1dGVzLCBpc0xlYWZOb2RlLCBlc2NhcGVFbnRpdGllcykge1xuICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnRyaW1WYWx1ZXMgJiYgIWRvbnRUcmltKSB7XG4gICAgICB2YWwgPSB2YWwudHJpbSgpO1xuICAgIH1cbiAgICBpZih2YWwubGVuZ3RoID4gMCl7XG4gICAgICBpZighZXNjYXBlRW50aXRpZXMpIHZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodmFsKTtcbiAgICAgIFxuICAgICAgY29uc3QgbmV3dmFsID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKHRhZ05hbWUsIHZhbCwgalBhdGgsIGhhc0F0dHJpYnV0ZXMsIGlzTGVhZk5vZGUpO1xuICAgICAgaWYobmV3dmFsID09PSBudWxsIHx8IG5ld3ZhbCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgLy9kb24ndCBwYXJzZVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfWVsc2UgaWYodHlwZW9mIG5ld3ZhbCAhPT0gdHlwZW9mIHZhbCB8fCBuZXd2YWwgIT09IHZhbCl7XG4gICAgICAgIC8vb3ZlcndyaXRlXG4gICAgICAgIHJldHVybiBuZXd2YWw7XG4gICAgICB9ZWxzZSBpZih0aGlzLm9wdGlvbnMudHJpbVZhbHVlcyl7XG4gICAgICAgIHJldHVybiBwYXJzZVZhbHVlKHZhbCwgdGhpcy5vcHRpb25zLnBhcnNlVGFnVmFsdWUsIHRoaXMub3B0aW9ucy5udW1iZXJQYXJzZU9wdGlvbnMpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRWYWwgPSB2YWwudHJpbSgpO1xuICAgICAgICBpZih0cmltbWVkVmFsID09PSB2YWwpe1xuICAgICAgICAgIHJldHVybiBwYXJzZVZhbHVlKHZhbCwgdGhpcy5vcHRpb25zLnBhcnNlVGFnVmFsdWUsIHRoaXMub3B0aW9ucy5udW1iZXJQYXJzZU9wdGlvbnMpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOYW1lU3BhY2UodGFnbmFtZSkge1xuICBpZiAodGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KSB7XG4gICAgY29uc3QgdGFncyA9IHRhZ25hbWUuc3BsaXQoJzonKTtcbiAgICBjb25zdCBwcmVmaXggPSB0YWduYW1lLmNoYXJBdCgwKSA9PT0gJy8nID8gJy8nIDogJyc7XG4gICAgaWYgKHRhZ3NbMF0gPT09ICd4bWxucycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHRhZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB0YWduYW1lID0gcHJlZml4ICsgdGFnc1sxXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhZ25hbWU7XG59XG5cbi8vVE9ETzogY2hhbmdlIHJlZ2V4IHRvIGNhcHR1cmUgTlNcbi8vY29uc3QgYXR0cnNSZWd4ID0gbmV3IFJlZ0V4cChcIihbXFxcXHdcXFxcLVxcXFwuXFxcXDpdKylcXFxccyo9XFxcXHMqKFsnXFxcIl0pKCgufFxcbikqPylcXFxcMlwiLFwiZ21cIik7XG5jb25zdCBhdHRyc1JlZ3ggPSBuZXcgUmVnRXhwKCcoW15cXFxccz1dKylcXFxccyooPVxcXFxzKihbXFwnXCJdKShbXFxcXHNcXFxcU10qPylcXFxcMyk/JywgJ2dtJyk7XG5cbmZ1bmN0aW9uIGJ1aWxkQXR0cmlidXRlc01hcChhdHRyU3RyLCBqUGF0aCwgdGFnTmFtZSkge1xuICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMgIT09IHRydWUgJiYgdHlwZW9mIGF0dHJTdHIgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gYXR0clN0ciA9IGF0dHJTdHIucmVwbGFjZSgvXFxyP1xcbi9nLCAnICcpO1xuICAgIC8vYXR0clN0ciA9IGF0dHJTdHIgfHwgYXR0clN0ci50cmltKCk7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gdXRpbC5nZXRBbGxNYXRjaGVzKGF0dHJTdHIsIGF0dHJzUmVneCk7XG4gICAgY29uc3QgbGVuID0gbWF0Y2hlcy5sZW5ndGg7IC8vZG9uJ3QgbWFrZSBpdCBpbmxpbmVcbiAgICBjb25zdCBhdHRycyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gdGhpcy5yZXNvbHZlTmFtZVNwYWNlKG1hdGNoZXNbaV1bMV0pO1xuICAgICAgaWYgKHRoaXMuaWdub3JlQXR0cmlidXRlc0ZuKGF0dHJOYW1lLCBqUGF0aCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGxldCBvbGRWYWwgPSBtYXRjaGVzW2ldWzRdO1xuICAgICAgbGV0IGFOYW1lID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXggKyBhdHRyTmFtZTtcbiAgICAgIGlmIChhdHRyTmFtZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgICAgYU5hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtQXR0cmlidXRlTmFtZShhTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoYU5hbWUgPT09IFwiX19wcm90b19fXCIpIGFOYW1lICA9IFwiI19fcHJvdG9fX1wiO1xuICAgICAgICBpZiAob2xkVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyaW1WYWx1ZXMpIHtcbiAgICAgICAgICAgIG9sZFZhbCA9IG9sZFZhbC50cmltKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9sZFZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUob2xkVmFsKTtcbiAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVmFsdWVQcm9jZXNzb3IoYXR0ck5hbWUsIG9sZFZhbCwgalBhdGgpO1xuICAgICAgICAgIGlmKG5ld1ZhbCA9PT0gbnVsbCB8fCBuZXdWYWwgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAvL2Rvbid0IHBhcnNlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBvbGRWYWw7XG4gICAgICAgICAgfWVsc2UgaWYodHlwZW9mIG5ld1ZhbCAhPT0gdHlwZW9mIG9sZFZhbCB8fCBuZXdWYWwgIT09IG9sZFZhbCl7XG4gICAgICAgICAgICAvL292ZXJ3cml0ZVxuICAgICAgICAgICAgYXR0cnNbYU5hbWVdID0gbmV3VmFsO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgLy9wYXJzZVxuICAgICAgICAgICAgYXR0cnNbYU5hbWVdID0gcGFyc2VWYWx1ZShcbiAgICAgICAgICAgICAgb2xkVmFsLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucGFyc2VBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBhdHRyc1thTmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoYXR0cnMpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUpIHtcbiAgICAgIGNvbnN0IGF0dHJDb2xsZWN0aW9uID0ge307XG4gICAgICBhdHRyQ29sbGVjdGlvblt0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZV0gPSBhdHRycztcbiAgICAgIHJldHVybiBhdHRyQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGF0dHJzXG4gIH1cbn1cblxuY29uc3QgcGFyc2VYbWwgPSBmdW5jdGlvbih4bWxEYXRhKSB7XG4gIHhtbERhdGEgPSB4bWxEYXRhLnJlcGxhY2UoL1xcclxcbj8vZywgXCJcXG5cIik7IC8vVE9ETzogcmVtb3ZlIHRoaXMgbGluZVxuICBjb25zdCB4bWxPYmogPSBuZXcgeG1sTm9kZSgnIXhtbCcpO1xuICBsZXQgY3VycmVudE5vZGUgPSB4bWxPYmo7XG4gIGxldCB0ZXh0RGF0YSA9IFwiXCI7XG4gIGxldCBqUGF0aCA9IFwiXCI7XG4gIGZvcihsZXQgaT0wOyBpPCB4bWxEYXRhLmxlbmd0aDsgaSsrKXsvL2ZvciBlYWNoIGNoYXIgaW4gWE1MIGRhdGFcbiAgICBjb25zdCBjaCA9IHhtbERhdGFbaV07XG4gICAgaWYoY2ggPT09ICc8Jyl7XG4gICAgICAvLyBjb25zdCBuZXh0SW5kZXggPSBpKzE7XG4gICAgICAvLyBjb25zdCBfMm5kQ2hhciA9IHhtbERhdGFbbmV4dEluZGV4XTtcbiAgICAgIGlmKCB4bWxEYXRhW2krMV0gPT09ICcvJykgey8vQ2xvc2luZyBUYWdcbiAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI+XCIsIGksIFwiQ2xvc2luZyBUYWcgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgbGV0IHRhZ05hbWUgPSB4bWxEYXRhLnN1YnN0cmluZyhpKzIsY2xvc2VJbmRleCkudHJpbSgpO1xuXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5yZW1vdmVOU1ByZWZpeCl7XG4gICAgICAgICAgY29uc3QgY29sb25JbmRleCA9IHRhZ05hbWUuaW5kZXhPZihcIjpcIik7XG4gICAgICAgICAgaWYoY29sb25JbmRleCAhPT0gLTEpe1xuICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKGNvbG9uSW5kZXgrMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUpIHtcbiAgICAgICAgICB0YWdOYW1lID0gdGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUodGFnTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihjdXJyZW50Tm9kZSl7XG4gICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGlmIGxhc3QgdGFnIG9mIG5lc3RlZCB0YWcgd2FzIHVucGFpcmVkIHRhZ1xuICAgICAgICBjb25zdCBsYXN0VGFnTmFtZSA9IGpQYXRoLnN1YnN0cmluZyhqUGF0aC5sYXN0SW5kZXhPZihcIi5cIikrMSk7XG4gICAgICAgIGlmKHRhZ05hbWUgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSApe1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5wYWlyZWQgdGFnIGNhbiBub3QgYmUgdXNlZCBhcyBjbG9zaW5nIHRhZzogPC8ke3RhZ05hbWV9PmApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwcm9wSW5kZXggPSAwXG4gICAgICAgIGlmKGxhc3RUYWdOYW1lICYmIHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihsYXN0VGFnTmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgcHJvcEluZGV4ID0galBhdGgubGFzdEluZGV4T2YoJy4nLCBqUGF0aC5sYXN0SW5kZXhPZignLicpLTEpXG4gICAgICAgICAgdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBwcm9wSW5kZXggPSBqUGF0aC5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHJpbmcoMCwgcHJvcEluZGV4KTtcblxuICAgICAgICBjdXJyZW50Tm9kZSA9IHRoaXMudGFnc05vZGVTdGFjay5wb3AoKTsvL2F2b2lkIHJlY3Vyc2lvbiwgc2V0IHRoZSBwYXJlbnQgdGFnIHNjb3BlXG4gICAgICAgIHRleHREYXRhID0gXCJcIjtcbiAgICAgICAgaSA9IGNsb3NlSW5kZXg7XG4gICAgICB9IGVsc2UgaWYoIHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7XG5cbiAgICAgICAgbGV0IHRhZ0RhdGEgPSByZWFkVGFnRXhwKHhtbERhdGEsaSwgZmFsc2UsIFwiPz5cIik7XG4gICAgICAgIGlmKCF0YWdEYXRhKSB0aHJvdyBuZXcgRXJyb3IoXCJQaSBUYWcgaXMgbm90IGNsb3NlZC5cIik7XG5cbiAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG4gICAgICAgIGlmKCAodGhpcy5vcHRpb25zLmlnbm9yZURlY2xhcmF0aW9uICYmIHRhZ0RhdGEudGFnTmFtZSA9PT0gXCI/eG1sXCIpIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVQaVRhZ3Mpe1xuXG4gICAgICAgIH1lbHNle1xuICBcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSh0YWdEYXRhLnRhZ05hbWUpO1xuICAgICAgICAgIGNoaWxkTm9kZS5hZGQodGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSwgXCJcIik7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYodGFnRGF0YS50YWdOYW1lICE9PSB0YWdEYXRhLnRhZ0V4cCAmJiB0YWdEYXRhLmF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRGF0YS50YWdFeHAsIGpQYXRoLCB0YWdEYXRhLnRhZ05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuXG4gICAgICAgIH1cblxuXG4gICAgICAgIGkgPSB0YWdEYXRhLmNsb3NlSW5kZXggKyAxO1xuICAgICAgfSBlbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAzKSA9PT0gJyEtLScpIHtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiLS0+XCIsIGkrNCwgXCJDb21tZW50IGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUpe1xuICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSB4bWxEYXRhLnN1YnN0cmluZyhpICsgNCwgZW5kSW5kZXggLSAyKTtcblxuICAgICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgpO1xuXG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUsIFsgeyBbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gOiBjb21tZW50IH0gXSk7XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGVuZEluZGV4O1xuICAgICAgfSBlbHNlIGlmKCB4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchRCcpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVhZERvY1R5cGUoeG1sRGF0YSwgaSk7XG4gICAgICAgIHRoaXMuZG9jVHlwZUVudGl0aWVzID0gcmVzdWx0LmVudGl0aWVzO1xuICAgICAgICBpID0gcmVzdWx0Lmk7XG4gICAgICB9ZWxzZSBpZih4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchWycpIHtcbiAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCJdXT5cIiwgaSwgXCJDREFUQSBpcyBub3QgY2xvc2VkLlwiKSAtIDI7XG4gICAgICAgIGNvbnN0IHRhZ0V4cCA9IHhtbERhdGEuc3Vic3RyaW5nKGkgKyA5LGNsb3NlSW5kZXgpO1xuXG4gICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgpO1xuXG4gICAgICAgIGxldCB2YWwgPSB0aGlzLnBhcnNlVGV4dERhdGEodGFnRXhwLCBjdXJyZW50Tm9kZS50YWduYW1lLCBqUGF0aCwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUpO1xuICAgICAgICBpZih2YWwgPT0gdW5kZWZpbmVkKSB2YWwgPSBcIlwiO1xuXG4gICAgICAgIC8vY2RhdGEgc2hvdWxkIGJlIHNldCBldmVuIGlmIGl0IGlzIDAgbGVuZ3RoIHN0cmluZ1xuICAgICAgICBpZih0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSl7XG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lLCBbIHsgW3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdIDogdGFnRXhwIH0gXSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGN1cnJlbnROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpID0gY2xvc2VJbmRleCArIDI7XG4gICAgICB9ZWxzZSB7Ly9PcGVuaW5nIHRhZ1xuICAgICAgICBsZXQgcmVzdWx0ID0gcmVhZFRhZ0V4cCh4bWxEYXRhLGksIHRoaXMub3B0aW9ucy5yZW1vdmVOU1ByZWZpeCk7XG4gICAgICAgIGxldCB0YWdOYW1lPSByZXN1bHQudGFnTmFtZTtcbiAgICAgICAgY29uc3QgcmF3VGFnTmFtZSA9IHJlc3VsdC5yYXdUYWdOYW1lO1xuICAgICAgICBsZXQgdGFnRXhwID0gcmVzdWx0LnRhZ0V4cDtcbiAgICAgICAgbGV0IGF0dHJFeHBQcmVzZW50ID0gcmVzdWx0LmF0dHJFeHBQcmVzZW50O1xuICAgICAgICBsZXQgY2xvc2VJbmRleCA9IHJlc3VsdC5jbG9zZUluZGV4O1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgIHRhZ05hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSh0YWdOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy9zYXZlIHRleHQgYXMgY2hpbGQgbm9kZVxuICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgdGV4dERhdGEpIHtcbiAgICAgICAgICBpZihjdXJyZW50Tm9kZS50YWduYW1lICE9PSAnIXhtbCcpe1xuICAgICAgICAgICAgLy93aGVuIG5lc3RlZCB0YWcgaXMgZm91bmRcbiAgICAgICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGlmIGxhc3QgdGFnIHdhcyB1bnBhaXJlZCB0YWdcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IGN1cnJlbnROb2RlO1xuICAgICAgICBpZihsYXN0VGFnICYmIHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihsYXN0VGFnLnRhZ25hbWUpICE9PSAtMSApe1xuICAgICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyaW5nKDAsIGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGFnTmFtZSAhPT0geG1sT2JqLnRhZ25hbWUpe1xuICAgICAgICAgIGpQYXRoICs9IGpQYXRoID8gXCIuXCIgKyB0YWdOYW1lIDogdGFnTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0l0U3RvcE5vZGUodGhpcy5vcHRpb25zLnN0b3BOb2RlcywgalBhdGgsIHRhZ05hbWUpKSB7XG4gICAgICAgICAgbGV0IHRhZ0NvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgIC8vc2VsZi1jbG9zaW5nIHRhZ1xuICAgICAgICAgIGlmKHRhZ0V4cC5sZW5ndGggPiAwICYmIHRhZ0V4cC5sYXN0SW5kZXhPZihcIi9cIikgPT09IHRhZ0V4cC5sZW5ndGggLSAxKXtcbiAgICAgICAgICAgIGlmKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gXCIvXCIpeyAvL3JlbW92ZSB0cmFpbGluZyAnLydcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICB0YWdFeHAgPSB0YWdOYW1lO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoMCwgdGFnRXhwLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSA9IHJlc3VsdC5jbG9zZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL3VucGFpcmVkIHRhZ1xuICAgICAgICAgIGVsc2UgaWYodGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSl7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGkgPSByZXN1bHQuY2xvc2VJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9ub3JtYWwgdGFnXG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIC8vcmVhZCB1bnRpbCBjbG9zaW5nIHRhZyBpcyBmb3VuZFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZWFkU3RvcE5vZGVEYXRhKHhtbERhdGEsIHJhd1RhZ05hbWUsIGNsb3NlSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGlmKCFyZXN1bHQpIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBlbmQgb2YgJHtyYXdUYWdOYW1lfWApO1xuICAgICAgICAgICAgaSA9IHJlc3VsdC5pO1xuICAgICAgICAgICAgdGFnQ29udGVudCA9IHJlc3VsdC50YWdDb250ZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ05hbWUpO1xuICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICBjaGlsZE5vZGVbXCI6QFwiXSA9IHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwKHRhZ0V4cCwgalBhdGgsIHRhZ05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZih0YWdDb250ZW50KSB7XG4gICAgICAgICAgICB0YWdDb250ZW50ID0gdGhpcy5wYXJzZVRleHREYXRhKHRhZ0NvbnRlbnQsIHRhZ05hbWUsIGpQYXRoLCB0cnVlLCBhdHRyRXhwUHJlc2VudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSk7XG4gICAgICAgICAgY2hpbGROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB0YWdDb250ZW50KTtcbiAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuICAgICAgICB9ZWxzZXtcbiAgLy9zZWxmQ2xvc2luZyB0YWdcbiAgICAgICAgICBpZih0YWdFeHAubGVuZ3RoID4gMCAmJiB0YWdFeHAubGFzdEluZGV4T2YoXCIvXCIpID09PSB0YWdFeHAubGVuZ3RoIC0gMSl7XG4gICAgICAgICAgICBpZih0YWdOYW1lW3RhZ05hbWUubGVuZ3RoIC0gMV0gPT09IFwiL1wiKXsgLy9yZW1vdmUgdHJhaWxpbmcgJy8nXG4gICAgICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cigwLCB0YWdOYW1lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cigwLCBqUGF0aC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgdGFnRXhwID0gdGFnTmFtZTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICB0YWdFeHAgPSB0YWdFeHAuc3Vic3RyKDAsIHRhZ0V4cC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSh0YWdOYW1lKTtcbiAgICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCwgdGFnTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuICAgICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgICB9XG4gICAgLy9vcGVuaW5nIHRhZ1xuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSggdGFnTmFtZSk7XG4gICAgICAgICAgICB0aGlzLnRhZ3NOb2RlU3RhY2sucHVzaChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCwgdGFnTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjaGlsZE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHREYXRhID0gXCJcIjtcbiAgICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgdGV4dERhdGEgKz0geG1sRGF0YVtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHhtbE9iai5jaGlsZDtcbn1cblxuZnVuY3Rpb24gYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpe1xuICBjb25zdCByZXN1bHQgPSB0aGlzLm9wdGlvbnMudXBkYXRlVGFnKGNoaWxkTm9kZS50YWduYW1lLCBqUGF0aCwgY2hpbGROb2RlW1wiOkBcIl0pXG4gIGlmKHJlc3VsdCA9PT0gZmFsc2Upe1xuICB9ZWxzZSBpZih0eXBlb2YgcmVzdWx0ID09PSBcInN0cmluZ1wiKXtcbiAgICBjaGlsZE5vZGUudGFnbmFtZSA9IHJlc3VsdFxuICAgIGN1cnJlbnROb2RlLmFkZENoaWxkKGNoaWxkTm9kZSk7XG4gIH1lbHNle1xuICAgIGN1cnJlbnROb2RlLmFkZENoaWxkKGNoaWxkTm9kZSk7XG4gIH1cbn1cblxuY29uc3QgcmVwbGFjZUVudGl0aWVzVmFsdWUgPSBmdW5jdGlvbih2YWwpe1xuXG4gIGlmKHRoaXMub3B0aW9ucy5wcm9jZXNzRW50aXRpZXMpe1xuICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmRvY1R5cGVFbnRpdGllcyl7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmRvY1R5cGVFbnRpdGllc1tlbnRpdHlOYW1lXTtcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVneCwgZW50aXR5LnZhbCk7XG4gICAgfVxuICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmxhc3RFbnRpdGllcyl7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmxhc3RFbnRpdGllc1tlbnRpdHlOYW1lXTtcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgIH1cbiAgICBpZih0aGlzLm9wdGlvbnMuaHRtbEVudGl0aWVzKXtcbiAgICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmh0bWxFbnRpdGllcyl7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuaHRtbEVudGl0aWVzW2VudGl0eU5hbWVdO1xuICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSggZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsID0gdmFsLnJlcGxhY2UoIHRoaXMuYW1wRW50aXR5LnJlZ2V4LCB0aGlzLmFtcEVudGl0eS52YWwpO1xuICB9XG4gIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBzYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgsIGlzTGVhZk5vZGUpIHtcbiAgaWYgKHRleHREYXRhKSB7IC8vc3RvcmUgcHJldmlvdXNseSBjb2xsZWN0ZWQgZGF0YSBhcyB0ZXh0Tm9kZVxuICAgIGlmKGlzTGVhZk5vZGUgPT09IHVuZGVmaW5lZCkgaXNMZWFmTm9kZSA9IE9iamVjdC5rZXlzKGN1cnJlbnROb2RlLmNoaWxkKS5sZW5ndGggPT09IDBcbiAgICBcbiAgICB0ZXh0RGF0YSA9IHRoaXMucGFyc2VUZXh0RGF0YSh0ZXh0RGF0YSxcbiAgICAgIGN1cnJlbnROb2RlLnRhZ25hbWUsXG4gICAgICBqUGF0aCxcbiAgICAgIGZhbHNlLFxuICAgICAgY3VycmVudE5vZGVbXCI6QFwiXSA/IE9iamVjdC5rZXlzKGN1cnJlbnROb2RlW1wiOkBcIl0pLmxlbmd0aCAhPT0gMCA6IGZhbHNlLFxuICAgICAgaXNMZWFmTm9kZSk7XG5cbiAgICBpZiAodGV4dERhdGEgIT09IHVuZGVmaW5lZCAmJiB0ZXh0RGF0YSAhPT0gXCJcIilcbiAgICAgIGN1cnJlbnROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB0ZXh0RGF0YSk7XG4gICAgdGV4dERhdGEgPSBcIlwiO1xuICB9XG4gIHJldHVybiB0ZXh0RGF0YTtcbn1cblxuLy9UT0RPOiB1c2UgalBhdGggdG8gc2ltcGxpZnkgdGhlIGxvZ2ljXG4vKipcbiAqIFxuICogQHBhcmFtIHtzdHJpbmdbXX0gc3RvcE5vZGVzIFxuICogQHBhcmFtIHtzdHJpbmd9IGpQYXRoXG4gKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFRhZ05hbWUgXG4gKi9cbmZ1bmN0aW9uIGlzSXRTdG9wTm9kZShzdG9wTm9kZXMsIGpQYXRoLCBjdXJyZW50VGFnTmFtZSl7XG4gIGNvbnN0IGFsbE5vZGVzRXhwID0gXCIqLlwiICsgY3VycmVudFRhZ05hbWU7XG4gIGZvciAoY29uc3Qgc3RvcE5vZGVQYXRoIGluIHN0b3BOb2Rlcykge1xuICAgIGNvbnN0IHN0b3BOb2RlRXhwID0gc3RvcE5vZGVzW3N0b3BOb2RlUGF0aF07XG4gICAgaWYoIGFsbE5vZGVzRXhwID09PSBzdG9wTm9kZUV4cCB8fCBqUGF0aCA9PT0gc3RvcE5vZGVFeHAgICkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRhZyBFeHByZXNzaW9uIGFuZCB3aGVyZSBpdCBpcyBlbmRpbmcgaGFuZGxpbmcgc2luZ2xlLWRvdWJsZSBxdW90ZXMgc2l0dWF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YSBcbiAqIEBwYXJhbSB7bnVtYmVyfSBpIHN0YXJ0aW5nIGluZGV4XG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdGFnRXhwV2l0aENsb3NpbmdJbmRleCh4bWxEYXRhLCBpLCBjbG9zaW5nQ2hhciA9IFwiPlwiKXtcbiAgbGV0IGF0dHJCb3VuZGFyeTtcbiAgbGV0IHRhZ0V4cCA9IFwiXCI7XG4gIGZvciAobGV0IGluZGV4ID0gaTsgaW5kZXggPCB4bWxEYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGxldCBjaCA9IHhtbERhdGFbaW5kZXhdO1xuICAgIGlmIChhdHRyQm91bmRhcnkpIHtcbiAgICAgICAgaWYgKGNoID09PSBhdHRyQm91bmRhcnkpIGF0dHJCb3VuZGFyeSA9IFwiXCI7Ly9yZXNldFxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcIicgfHwgY2ggPT09IFwiJ1wiKSB7XG4gICAgICAgIGF0dHJCb3VuZGFyeSA9IGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IGNsb3NpbmdDaGFyWzBdKSB7XG4gICAgICBpZihjbG9zaW5nQ2hhclsxXSl7XG4gICAgICAgIGlmKHhtbERhdGFbaW5kZXggKyAxXSA9PT0gY2xvc2luZ0NoYXJbMV0pe1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB0YWdFeHAsXG4gICAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHRhZ0V4cCxcbiAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXHQnKSB7XG4gICAgICBjaCA9IFwiIFwiXG4gICAgfVxuICAgIHRhZ0V4cCArPSBjaDtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIHN0ciwgaSwgZXJyTXNnKXtcbiAgY29uc3QgY2xvc2luZ0luZGV4ID0geG1sRGF0YS5pbmRleE9mKHN0ciwgaSk7XG4gIGlmKGNsb3NpbmdJbmRleCA9PT0gLTEpe1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpXG4gIH1lbHNle1xuICAgIHJldHVybiBjbG9zaW5nSW5kZXggKyBzdHIubGVuZ3RoIC0gMTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVGFnRXhwKHhtbERhdGEsaSwgcmVtb3ZlTlNQcmVmaXgsIGNsb3NpbmdDaGFyID0gXCI+XCIpe1xuICBjb25zdCByZXN1bHQgPSB0YWdFeHBXaXRoQ2xvc2luZ0luZGV4KHhtbERhdGEsIGkrMSwgY2xvc2luZ0NoYXIpO1xuICBpZighcmVzdWx0KSByZXR1cm47XG4gIGxldCB0YWdFeHAgPSByZXN1bHQuZGF0YTtcbiAgY29uc3QgY2xvc2VJbmRleCA9IHJlc3VsdC5pbmRleDtcbiAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSB0YWdFeHAuc2VhcmNoKC9cXHMvKTtcbiAgbGV0IHRhZ05hbWUgPSB0YWdFeHA7XG4gIGxldCBhdHRyRXhwUHJlc2VudCA9IHRydWU7XG4gIGlmKHNlcGFyYXRvckluZGV4ICE9PSAtMSl7Ly9zZXBhcmF0ZSB0YWcgbmFtZSBhbmQgYXR0cmlidXRlcyBleHByZXNzaW9uXG4gICAgdGFnTmFtZSA9IHRhZ0V4cC5zdWJzdHJpbmcoMCwgc2VwYXJhdG9ySW5kZXgpO1xuICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHJpbmcoc2VwYXJhdG9ySW5kZXggKyAxKS50cmltU3RhcnQoKTtcbiAgfVxuXG4gIGNvbnN0IHJhd1RhZ05hbWUgPSB0YWdOYW1lO1xuICBpZihyZW1vdmVOU1ByZWZpeCl7XG4gICAgY29uc3QgY29sb25JbmRleCA9IHRhZ05hbWUuaW5kZXhPZihcIjpcIik7XG4gICAgaWYoY29sb25JbmRleCAhPT0gLTEpe1xuICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKGNvbG9uSW5kZXgrMSk7XG4gICAgICBhdHRyRXhwUHJlc2VudCA9IHRhZ05hbWUgIT09IHJlc3VsdC5kYXRhLnN1YnN0cihjb2xvbkluZGV4ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgIHRhZ0V4cDogdGFnRXhwLFxuICAgIGNsb3NlSW5kZXg6IGNsb3NlSW5kZXgsXG4gICAgYXR0ckV4cFByZXNlbnQ6IGF0dHJFeHBQcmVzZW50LFxuICAgIHJhd1RhZ05hbWU6IHJhd1RhZ05hbWUsXG4gIH1cbn1cbi8qKlxuICogZmluZCBwYWlyZWQgdGFnIGZvciBhIHN0b3Agbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGEgXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBcbiAqIEBwYXJhbSB7bnVtYmVyfSBpIFxuICovXG5mdW5jdGlvbiByZWFkU3RvcE5vZGVEYXRhKHhtbERhdGEsIHRhZ05hbWUsIGkpe1xuICBjb25zdCBzdGFydEluZGV4ID0gaTtcbiAgLy8gU3RhcnRpbmcgYXQgMSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYW4gb3BlbiB0YWdcbiAgbGV0IG9wZW5UYWdDb3VudCA9IDE7XG5cbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYoIHhtbERhdGFbaV0gPT09IFwiPFwiKXsgXG4gICAgICBpZiAoeG1sRGF0YVtpKzFdID09PSBcIi9cIikgey8vY2xvc2UgdGFnXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI+XCIsIGksIGAke3RhZ05hbWV9IGlzIG5vdCBjbG9zZWRgKTtcbiAgICAgICAgICBsZXQgY2xvc2VUYWdOYW1lID0geG1sRGF0YS5zdWJzdHJpbmcoaSsyLGNsb3NlSW5kZXgpLnRyaW0oKTtcbiAgICAgICAgICBpZihjbG9zZVRhZ05hbWUgPT09IHRhZ05hbWUpe1xuICAgICAgICAgICAgb3BlblRhZ0NvdW50LS07XG4gICAgICAgICAgICBpZiAob3BlblRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGFnQ29udGVudDogeG1sRGF0YS5zdWJzdHJpbmcoc3RhcnRJbmRleCwgaSksXG4gICAgICAgICAgICAgICAgaSA6IGNsb3NlSW5kZXhcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZih4bWxEYXRhW2krMV0gPT09ICc/JykgeyBcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj8+XCIsIGkrMSwgXCJTdG9wTm9kZSBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAzKSA9PT0gJyEtLScpIHsgXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCItLT5cIiwgaSszLCBcIlN0b3BOb2RlIGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDIpID09PSAnIVsnKSB7IFxuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiXV0+XCIsIGksIFwiU3RvcE5vZGUgaXMgbm90IGNsb3NlZC5cIikgLSAyO1xuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YWdEYXRhID0gcmVhZFRhZ0V4cCh4bWxEYXRhLCBpLCAnPicpXG5cbiAgICAgICAgICBpZiAodGFnRGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgb3BlblRhZ05hbWUgPSB0YWdEYXRhICYmIHRhZ0RhdGEudGFnTmFtZTtcbiAgICAgICAgICAgIGlmIChvcGVuVGFnTmFtZSA9PT0gdGFnTmFtZSAmJiB0YWdEYXRhLnRhZ0V4cFt0YWdEYXRhLnRhZ0V4cC5sZW5ndGgtMV0gIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgIG9wZW5UYWdDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaT10YWdEYXRhLmNsb3NlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gIH0vL2VuZCBmb3IgbG9vcFxufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKHZhbCwgc2hvdWxkUGFyc2UsIG9wdGlvbnMpIHtcbiAgaWYgKHNob3VsZFBhcnNlICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgLy9jb25zb2xlLmxvZyhvcHRpb25zKVxuICAgIGNvbnN0IG5ld3ZhbCA9IHZhbC50cmltKCk7XG4gICAgaWYobmV3dmFsID09PSAndHJ1ZScgKSByZXR1cm4gdHJ1ZTtcbiAgICBlbHNlIGlmKG5ld3ZhbCA9PT0gJ2ZhbHNlJyApIHJldHVybiBmYWxzZTtcbiAgICBlbHNlIHJldHVybiB0b051bWJlcih2YWwsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGlmICh1dGlsLmlzRXhpc3QodmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gT3JkZXJlZE9ialBhcnNlcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gbm9kZSBcbiAqIEBwYXJhbSB7YW55fSBvcHRpb25zIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIHByZXR0aWZ5KG5vZGUsIG9wdGlvbnMpe1xuICByZXR1cm4gY29tcHJlc3MoIG5vZGUsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gYXJyIFxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGggXG4gKiBAcmV0dXJucyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gY29tcHJlc3MoYXJyLCBvcHRpb25zLCBqUGF0aCl7XG4gIGxldCB0ZXh0O1xuICBjb25zdCBjb21wcmVzc2VkT2JqID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdGFnT2JqID0gYXJyW2ldO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcE5hbWUodGFnT2JqKTtcbiAgICBsZXQgbmV3SnBhdGggPSBcIlwiO1xuICAgIGlmKGpQYXRoID09PSB1bmRlZmluZWQpIG5ld0pwYXRoID0gcHJvcGVydHk7XG4gICAgZWxzZSBuZXdKcGF0aCA9IGpQYXRoICsgXCIuXCIgKyBwcm9wZXJ0eTtcblxuICAgIGlmKHByb3BlcnR5ID09PSBvcHRpb25zLnRleHROb2RlTmFtZSl7XG4gICAgICBpZih0ZXh0ID09PSB1bmRlZmluZWQpIHRleHQgPSB0YWdPYmpbcHJvcGVydHldO1xuICAgICAgZWxzZSB0ZXh0ICs9IFwiXCIgKyB0YWdPYmpbcHJvcGVydHldO1xuICAgIH1lbHNlIGlmKHByb3BlcnR5ID09PSB1bmRlZmluZWQpe1xuICAgICAgY29udGludWU7XG4gICAgfWVsc2UgaWYodGFnT2JqW3Byb3BlcnR5XSl7XG4gICAgICBcbiAgICAgIGxldCB2YWwgPSBjb21wcmVzcyh0YWdPYmpbcHJvcGVydHldLCBvcHRpb25zLCBuZXdKcGF0aCk7XG4gICAgICBjb25zdCBpc0xlYWYgPSBpc0xlYWZUYWcodmFsLCBvcHRpb25zKTtcblxuICAgICAgaWYodGFnT2JqW1wiOkBcIl0pe1xuICAgICAgICBhc3NpZ25BdHRyaWJ1dGVzKCB2YWwsIHRhZ09ialtcIjpAXCJdLCBuZXdKcGF0aCwgb3B0aW9ucyk7XG4gICAgICB9ZWxzZSBpZihPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMSAmJiB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdICE9PSB1bmRlZmluZWQgJiYgIW9wdGlvbnMuYWx3YXlzQ3JlYXRlVGV4dE5vZGUpe1xuICAgICAgICB2YWwgPSB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdO1xuICAgICAgfWVsc2UgaWYoT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDApe1xuICAgICAgICBpZihvcHRpb25zLmFsd2F5c0NyZWF0ZVRleHROb2RlKSB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gXCJcIjtcbiAgICAgICAgZWxzZSB2YWwgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZihjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkICYmIGNvbXByZXNzZWRPYmouaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGNvbXByZXNzZWRPYmpbcHJvcGVydHldKSkge1xuICAgICAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gPSBbIGNvbXByZXNzZWRPYmpbcHJvcGVydHldIF07XG4gICAgICAgIH1cbiAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIC8vVE9ETzogaWYgYSBub2RlIGlzIG5vdCBhbiBhcnJheSwgdGhlbiBjaGVjayBpZiBpdCBzaG91bGQgYmUgYW4gYXJyYXlcbiAgICAgICAgLy9hbHNvIGRldGVybWluZSBpZiBpdCBpcyBhIGxlYWYgbm9kZVxuICAgICAgICBpZiAob3B0aW9ucy5pc0FycmF5KHByb3BlcnR5LCBuZXdKcGF0aCwgaXNMZWFmICkpIHtcbiAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IFt2YWxdO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgfVxuICAvLyBpZih0ZXh0ICYmIHRleHQubGVuZ3RoID4gMCkgY29tcHJlc3NlZE9ialtvcHRpb25zLnRleHROb2RlTmFtZV0gPSB0ZXh0O1xuICBpZih0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIil7XG4gICAgaWYodGV4dC5sZW5ndGggPiAwKSBjb21wcmVzc2VkT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IHRleHQ7XG4gIH1lbHNlIGlmKHRleHQgIT09IHVuZGVmaW5lZCkgY29tcHJlc3NlZE9ialtvcHRpb25zLnRleHROb2RlTmFtZV0gPSB0ZXh0O1xuICByZXR1cm4gY29tcHJlc3NlZE9iajtcbn1cblxuZnVuY3Rpb24gcHJvcE5hbWUob2JqKXtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgaWYoa2V5ICE9PSBcIjpAXCIpIHJldHVybiBrZXk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzaWduQXR0cmlidXRlcyhvYmosIGF0dHJNYXAsIGpwYXRoLCBvcHRpb25zKXtcbiAgaWYgKGF0dHJNYXApIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXR0ck1hcCk7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7IC8vZG9uJ3QgbWFrZSBpdCBpbmxpbmVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBhdHJyTmFtZSA9IGtleXNbaV07XG4gICAgICBpZiAob3B0aW9ucy5pc0FycmF5KGF0cnJOYW1lLCBqcGF0aCArIFwiLlwiICsgYXRyck5hbWUsIHRydWUsIHRydWUpKSB7XG4gICAgICAgIG9ialthdHJyTmFtZV0gPSBbIGF0dHJNYXBbYXRyck5hbWVdIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpbYXRyck5hbWVdID0gYXR0ck1hcFthdHJyTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTGVhZlRhZyhvYmosIG9wdGlvbnMpe1xuICBjb25zdCB7IHRleHROb2RlTmFtZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcHJvcENvdW50ID0gT2JqZWN0LmtleXMob2JqKS5sZW5ndGg7XG4gIFxuICBpZiAocHJvcENvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgcHJvcENvdW50ID09PSAxICYmXG4gICAgKG9ialt0ZXh0Tm9kZU5hbWVdIHx8IHR5cGVvZiBvYmpbdGV4dE5vZGVOYW1lXSA9PT0gXCJib29sZWFuXCIgfHwgb2JqW3RleHROb2RlTmFtZV0gPT09IDApXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5wcmV0dGlmeSA9IHByZXR0aWZ5O1xuIiwKICAgICJjb25zdCB7IGJ1aWxkT3B0aW9uc30gPSByZXF1aXJlKFwiLi9PcHRpb25zQnVpbGRlclwiKTtcbmNvbnN0IE9yZGVyZWRPYmpQYXJzZXIgPSByZXF1aXJlKFwiLi9PcmRlcmVkT2JqUGFyc2VyXCIpO1xuY29uc3QgeyBwcmV0dGlmeX0gPSByZXF1aXJlKFwiLi9ub2RlMmpzb25cIik7XG5jb25zdCB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi92YWxpZGF0b3InKTtcblxuY2xhc3MgWE1MUGFyc2Vye1xuICAgIFxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xuICAgICAgICB0aGlzLmV4dGVybmFsRW50aXRpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gYnVpbGRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgWE1MIGRhdHMgdG8gSlMgb2JqZWN0IFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcn0geG1sRGF0YSBcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSB2YWxpZGF0aW9uT3B0aW9uIFxuICAgICAqL1xuICAgIHBhcnNlKHhtbERhdGEsdmFsaWRhdGlvbk9wdGlvbil7XG4gICAgICAgIGlmKHR5cGVvZiB4bWxEYXRhID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgfWVsc2UgaWYoIHhtbERhdGEudG9TdHJpbmcpe1xuICAgICAgICAgICAgeG1sRGF0YSA9IHhtbERhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJYTUwgZGF0YSBpcyBhY2NlcHRlZCBpbiBTdHJpbmcgb3IgQnl0ZXNbXSBmb3JtLlwiKVxuICAgICAgICB9XG4gICAgICAgIGlmKCB2YWxpZGF0aW9uT3B0aW9uKXtcbiAgICAgICAgICAgIGlmKHZhbGlkYXRpb25PcHRpb24gPT09IHRydWUpIHZhbGlkYXRpb25PcHRpb24gPSB7fTsgLy92YWxpZGF0ZSB3aXRoIGRlZmF1bHQgb3B0aW9uc1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUoeG1sRGF0YSwgdmFsaWRhdGlvbk9wdGlvbik7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBgJHtyZXN1bHQuZXJyLm1zZ306JHtyZXN1bHQuZXJyLmxpbmV9OiR7cmVzdWx0LmVyci5jb2x9YCApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmRlcmVkT2JqUGFyc2VyID0gbmV3IE9yZGVyZWRPYmpQYXJzZXIodGhpcy5vcHRpb25zKTtcbiAgICAgICAgb3JkZXJlZE9ialBhcnNlci5hZGRFeHRlcm5hbEVudGl0aWVzKHRoaXMuZXh0ZXJuYWxFbnRpdGllcyk7XG4gICAgICAgIGNvbnN0IG9yZGVyZWRSZXN1bHQgPSBvcmRlcmVkT2JqUGFyc2VyLnBhcnNlWG1sKHhtbERhdGEpO1xuICAgICAgICBpZih0aGlzLm9wdGlvbnMucHJlc2VydmVPcmRlciB8fCBvcmRlcmVkUmVzdWx0ID09PSB1bmRlZmluZWQpIHJldHVybiBvcmRlcmVkUmVzdWx0O1xuICAgICAgICBlbHNlIHJldHVybiBwcmV0dGlmeShvcmRlcmVkUmVzdWx0LCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBFbnRpdHkgd2hpY2ggaXMgbm90IGJ5IGRlZmF1bHQgc3VwcG9ydGVkIGJ5IHRoaXMgbGlicmFyeVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFxuICAgICAqL1xuICAgIGFkZEVudGl0eShrZXksIHZhbHVlKXtcbiAgICAgICAgaWYodmFsdWUuaW5kZXhPZihcIiZcIikgIT09IC0xKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVudGl0eSB2YWx1ZSBjYW4ndCBoYXZlICcmJ1wiKVxuICAgICAgICB9ZWxzZSBpZihrZXkuaW5kZXhPZihcIiZcIikgIT09IC0xIHx8IGtleS5pbmRleE9mKFwiO1wiKSAhPT0gLTEpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gZW50aXR5IG11c3QgYmUgc2V0IHdpdGhvdXQgJyYnIGFuZCAnOycuIEVnLiB1c2UgJyN4RCcgZm9yICcmI3hEOydcIilcbiAgICAgICAgfWVsc2UgaWYodmFsdWUgPT09IFwiJlwiKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIGVudGl0eSB3aXRoIHZhbHVlICcmJyBpcyBub3QgcGVybWl0dGVkXCIpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxFbnRpdGllc1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWE1MUGFyc2VyOyIsCiAgICAiY29uc3QgRU9MID0gXCJcXG5cIjtcblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7YXJyYXl9IGpBcnJheSBcbiAqIEBwYXJhbSB7YW55fSBvcHRpb25zIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIHRvWG1sKGpBcnJheSwgb3B0aW9ucykge1xuICAgIGxldCBpbmRlbnRhdGlvbiA9IFwiXCI7XG4gICAgaWYgKG9wdGlvbnMuZm9ybWF0ICYmIG9wdGlvbnMuaW5kZW50QnkubGVuZ3RoID4gMCkge1xuICAgICAgICBpbmRlbnRhdGlvbiA9IEVPTDtcbiAgICB9XG4gICAgcmV0dXJuIGFyclRvU3RyKGpBcnJheSwgb3B0aW9ucywgXCJcIiwgaW5kZW50YXRpb24pO1xufVxuXG5mdW5jdGlvbiBhcnJUb1N0cihhcnIsIG9wdGlvbnMsIGpQYXRoLCBpbmRlbnRhdGlvbikge1xuICAgIGxldCB4bWxTdHIgPSBcIlwiO1xuICAgIGxldCBpc1ByZXZpb3VzRWxlbWVudFRhZyA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdGFnT2JqID0gYXJyW2ldO1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gcHJvcE5hbWUodGFnT2JqKTtcbiAgICAgICAgaWYodGFnTmFtZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICBsZXQgbmV3SlBhdGggPSBcIlwiO1xuICAgICAgICBpZiAoalBhdGgubGVuZ3RoID09PSAwKSBuZXdKUGF0aCA9IHRhZ05hbWVcbiAgICAgICAgZWxzZSBuZXdKUGF0aCA9IGAke2pQYXRofS4ke3RhZ05hbWV9YDtcblxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICAgICAgICAgIGxldCB0YWdUZXh0ID0gdGFnT2JqW3RhZ05hbWVdO1xuICAgICAgICAgICAgaWYgKCFpc1N0b3BOb2RlKG5ld0pQYXRoLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRhZ1RleHQgPSBvcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKHRhZ05hbWUsIHRhZ1RleHQpO1xuICAgICAgICAgICAgICAgIHRhZ1RleHQgPSByZXBsYWNlRW50aXRpZXNWYWx1ZSh0YWdUZXh0LCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1ByZXZpb3VzRWxlbWVudFRhZykge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhtbFN0ciArPSB0YWdUZXh0O1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09IG9wdGlvbnMuY2RhdGFQcm9wTmFtZSkge1xuICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNFbGVtZW50VGFnKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeG1sU3RyICs9IGA8IVtDREFUQVske3RhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV19XV0+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gZmFsc2U7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09PSBvcHRpb25zLmNvbW1lbnRQcm9wTmFtZSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uICsgYDwhLS0ke3RhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV19LS0+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0gPT09IFwiP1wiKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRTdHIgPSBhdHRyX3RvX3N0cih0YWdPYmpbXCI6QFwiXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wSW5kID0gdGFnTmFtZSA9PT0gXCI/eG1sXCIgPyBcIlwiIDogaW5kZW50YXRpb247XG4gICAgICAgICAgICBsZXQgcGlUZXh0Tm9kZU5hbWUgPSB0YWdPYmpbdGFnTmFtZV1bMF1bb3B0aW9ucy50ZXh0Tm9kZU5hbWVdO1xuICAgICAgICAgICAgcGlUZXh0Tm9kZU5hbWUgPSBwaVRleHROb2RlTmFtZS5sZW5ndGggIT09IDAgPyBcIiBcIiArIHBpVGV4dE5vZGVOYW1lIDogXCJcIjsgLy9yZW1vdmUgZXh0cmEgc3BhY2luZ1xuICAgICAgICAgICAgeG1sU3RyICs9IHRlbXBJbmQgKyBgPCR7dGFnTmFtZX0ke3BpVGV4dE5vZGVOYW1lfSR7YXR0U3RyfT8+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdJZGVudGF0aW9uID0gaW5kZW50YXRpb247XG4gICAgICAgIGlmIChuZXdJZGVudGF0aW9uICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBuZXdJZGVudGF0aW9uICs9IG9wdGlvbnMuaW5kZW50Qnk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXR0U3RyID0gYXR0cl90b19zdHIodGFnT2JqW1wiOkBcIl0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB0YWdTdGFydCA9IGluZGVudGF0aW9uICsgYDwke3RhZ05hbWV9JHthdHRTdHJ9YDtcbiAgICAgICAgY29uc3QgdGFnVmFsdWUgPSBhcnJUb1N0cih0YWdPYmpbdGFnTmFtZV0sIG9wdGlvbnMsIG5ld0pQYXRoLCBuZXdJZGVudGF0aW9uKTtcbiAgICAgICAgaWYgKG9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdXBwcmVzc1VucGFpcmVkTm9kZSkgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCI+XCI7XG4gICAgICAgICAgICBlbHNlIHhtbFN0ciArPSB0YWdTdGFydCArIFwiLz5cIjtcbiAgICAgICAgfSBlbHNlIGlmICgoIXRhZ1ZhbHVlIHx8IHRhZ1ZhbHVlLmxlbmd0aCA9PT0gMCkgJiYgb3B0aW9ucy5zdXBwcmVzc0VtcHR5Tm9kZSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCIvPlwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ1ZhbHVlICYmIHRhZ1ZhbHVlLmVuZHNXaXRoKFwiPlwiKSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgYD4ke3RhZ1ZhbHVlfSR7aW5kZW50YXRpb259PC8ke3RhZ05hbWV9PmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIj5cIjtcbiAgICAgICAgICAgIGlmICh0YWdWYWx1ZSAmJiBpbmRlbnRhdGlvbiAhPT0gXCJcIiAmJiAodGFnVmFsdWUuaW5jbHVkZXMoXCIvPlwiKSB8fCB0YWdWYWx1ZS5pbmNsdWRlcyhcIjwvXCIpKSkge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSBpbmRlbnRhdGlvbiArIG9wdGlvbnMuaW5kZW50QnkgKyB0YWdWYWx1ZSArIGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB4bWxTdHIgKz0gdGFnVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4bWxTdHIgKz0gYDwvJHt0YWdOYW1lfT5gO1xuICAgICAgICB9XG4gICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4geG1sU3RyO1xufVxuXG5mdW5jdGlvbiBwcm9wTmFtZShvYmopIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGtleSAhPT0gXCI6QFwiKSByZXR1cm4ga2V5O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYXR0cl90b19zdHIoYXR0ck1hcCwgb3B0aW9ucykge1xuICAgIGxldCBhdHRyU3RyID0gXCJcIjtcbiAgICBpZiAoYXR0ck1hcCAmJiAhb3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGZvciAobGV0IGF0dHIgaW4gYXR0ck1hcCkge1xuICAgICAgICAgICAgaWYoIWF0dHJNYXAuaGFzT3duUHJvcGVydHkoYXR0cikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IGF0dHJWYWwgPSBvcHRpb25zLmF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yKGF0dHIsIGF0dHJNYXBbYXR0cl0pO1xuICAgICAgICAgICAgYXR0clZhbCA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlKGF0dHJWYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGF0dHJWYWwgPT09IHRydWUgJiYgb3B0aW9ucy5zdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgYXR0clN0ciArPSBgICR7YXR0ci5zdWJzdHIob3B0aW9ucy5hdHRyaWJ1dGVOYW1lUHJlZml4Lmxlbmd0aCl9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXR0clN0ciArPSBgICR7YXR0ci5zdWJzdHIob3B0aW9ucy5hdHRyaWJ1dGVOYW1lUHJlZml4Lmxlbmd0aCl9PVwiJHthdHRyVmFsfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXR0clN0cjtcbn1cblxuZnVuY3Rpb24gaXNTdG9wTm9kZShqUGF0aCwgb3B0aW9ucykge1xuICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxlbmd0aCAtIG9wdGlvbnMudGV4dE5vZGVOYW1lLmxlbmd0aCAtIDEpO1xuICAgIGxldCB0YWdOYW1lID0galBhdGguc3Vic3RyKGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xuICAgIGZvciAobGV0IGluZGV4IGluIG9wdGlvbnMuc3RvcE5vZGVzKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnN0b3BOb2Rlc1tpbmRleF0gPT09IGpQYXRoIHx8IG9wdGlvbnMuc3RvcE5vZGVzW2luZGV4XSA9PT0gXCIqLlwiICsgdGFnTmFtZSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKHRleHRWYWx1ZSAmJiB0ZXh0VmFsdWUubGVuZ3RoID4gMCAmJiBvcHRpb25zLnByb2Nlc3NFbnRpdGllcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZW50aXRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IG9wdGlvbnMuZW50aXRpZXNbaV07XG4gICAgICAgICAgICB0ZXh0VmFsdWUgPSB0ZXh0VmFsdWUucmVwbGFjZShlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0VmFsdWU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvWG1sO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG4vL3BhcnNlIEVtcHR5IE5vZGUgYXMgc2VsZiBjbG9zaW5nIG5vZGVcbmNvbnN0IGJ1aWxkRnJvbU9yZGVyZWRKcyA9IHJlcXVpcmUoJy4vb3JkZXJlZEpzMlhtbCcpO1xuY29uc3QgZ2V0SWdub3JlQXR0cmlidXRlc0ZuID0gcmVxdWlyZSgnLi4vaWdub3JlQXR0cmlidXRlcycpXG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBhdHRyaWJ1dGVOYW1lUHJlZml4OiAnQF8nLFxuICBhdHRyaWJ1dGVzR3JvdXBOYW1lOiBmYWxzZSxcbiAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICBjZGF0YVByb3BOYW1lOiBmYWxzZSxcbiAgZm9ybWF0OiBmYWxzZSxcbiAgaW5kZW50Qnk6ICcgICcsXG4gIHN1cHByZXNzRW1wdHlOb2RlOiBmYWxzZSxcbiAgc3VwcHJlc3NVbnBhaXJlZE5vZGU6IHRydWUsXG4gIHN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXM6IHRydWUsXG4gIHRhZ1ZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihrZXksIGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgYXR0cmlidXRlVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGF0dHJOYW1lLCBhKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHByZXNlcnZlT3JkZXI6IGZhbHNlLFxuICBjb21tZW50UHJvcE5hbWU6IGZhbHNlLFxuICB1bnBhaXJlZFRhZ3M6IFtdLFxuICBlbnRpdGllczogW1xuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCImXCIsIFwiZ1wiKSwgdmFsOiBcIiZhbXA7XCIgfSwvL2l0IG11c3QgYmUgb24gdG9wXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIj5cIiwgXCJnXCIpLCB2YWw6IFwiJmd0O1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIjxcIiwgXCJnXCIpLCB2YWw6IFwiJmx0O1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIlxcJ1wiLCBcImdcIiksIHZhbDogXCImYXBvcztcIiB9LFxuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCJcXFwiXCIsIFwiZ1wiKSwgdmFsOiBcIiZxdW90O1wiIH1cbiAgXSxcbiAgcHJvY2Vzc0VudGl0aWVzOiB0cnVlLFxuICBzdG9wTm9kZXM6IFtdLFxuICAvLyB0cmFuc2Zvcm1UYWdOYW1lOiBmYWxzZSxcbiAgLy8gdHJhbnNmb3JtQXR0cmlidXRlTmFtZTogZmFsc2UsXG4gIG9uZUxpc3RHcm91cDogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIEJ1aWxkZXIob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQXR0cmlidXRlcyA9PT0gdHJ1ZSB8fCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgIHRoaXMuaXNBdHRyaWJ1dGUgPSBmdW5jdGlvbigvKmEqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pZ25vcmVBdHRyaWJ1dGVzRm4gPSBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4odGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpXG4gICAgdGhpcy5hdHRyUHJlZml4TGVuID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoO1xuICAgIHRoaXMuaXNBdHRyaWJ1dGUgPSBpc0F0dHJpYnV0ZTtcbiAgfVxuXG4gIHRoaXMucHJvY2Vzc1RleHRPck9iak5vZGUgPSBwcm9jZXNzVGV4dE9yT2JqTm9kZVxuXG4gIGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KSB7XG4gICAgdGhpcy5pbmRlbnRhdGUgPSBpbmRlbnRhdGU7XG4gICAgdGhpcy50YWdFbmRDaGFyID0gJz5cXG4nO1xuICAgIHRoaXMubmV3TGluZSA9ICdcXG4nO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaW5kZW50YXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcbiAgICB0aGlzLnRhZ0VuZENoYXIgPSAnPic7XG4gICAgdGhpcy5uZXdMaW5lID0gJyc7XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihqT2JqKSB7XG4gIGlmKHRoaXMub3B0aW9ucy5wcmVzZXJ2ZU9yZGVyKXtcbiAgICByZXR1cm4gYnVpbGRGcm9tT3JkZXJlZEpzKGpPYmosIHRoaXMub3B0aW9ucyk7XG4gIH1lbHNlIHtcbiAgICBpZihBcnJheS5pc0FycmF5KGpPYmopICYmIHRoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lICYmIHRoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lLmxlbmd0aCA+IDEpe1xuICAgICAgak9iaiA9IHtcbiAgICAgICAgW3RoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lXSA6IGpPYmpcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuajJ4KGpPYmosIDAsIFtdKS52YWw7XG4gIH1cbn07XG5cbkJ1aWxkZXIucHJvdG90eXBlLmoyeCA9IGZ1bmN0aW9uKGpPYmosIGxldmVsLCBhalBhdGgpIHtcbiAgbGV0IGF0dHJTdHIgPSAnJztcbiAgbGV0IHZhbCA9ICcnO1xuICBjb25zdCBqUGF0aCA9IGFqUGF0aC5qb2luKCcuJylcbiAgZm9yIChsZXQga2V5IGluIGpPYmopIHtcbiAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGpPYmosIGtleSkpIGNvbnRpbnVlO1xuICAgIGlmICh0eXBlb2Ygak9ialtrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gc3VwcmVzcyB1bmRlZmluZWQgbm9kZSBvbmx5IGlmIGl0IGlzIG5vdCBhbiBhdHRyaWJ1dGVcbiAgICAgIGlmICh0aGlzLmlzQXR0cmlidXRlKGtleSkpIHtcbiAgICAgICAgdmFsICs9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoak9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAvLyBudWxsIGF0dHJpYnV0ZSBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgYXR0cmlidXRlIGxpc3QsIGJ1dCBzaG91bGQgbm90IGNhdXNlIHRoZSB0YWcgY2xvc2luZ1xuICAgICAgaWYgKHRoaXMuaXNBdHRyaWJ1dGUoa2V5KSkge1xuICAgICAgICB2YWwgKz0gJyc7XG4gICAgICB9IGVsc2UgaWYgKGtleVswXSA9PT0gJz8nKSB7XG4gICAgICAgIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgfVxuICAgICAgLy8gdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9IGVsc2UgaWYgKGpPYmpba2V5XSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoak9ialtrZXldLCBrZXksICcnLCBsZXZlbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygak9ialtrZXldICE9PSAnb2JqZWN0Jykge1xuICAgICAgLy9wcmVtaXRpdmUgdHlwZVxuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuaXNBdHRyaWJ1dGUoa2V5KTtcbiAgICAgIGlmIChhdHRyICYmICF0aGlzLmlnbm9yZUF0dHJpYnV0ZXNGbihhdHRyLCBqUGF0aCkpIHtcbiAgICAgICAgYXR0clN0ciArPSB0aGlzLmJ1aWxkQXR0clBhaXJTdHIoYXR0ciwgJycgKyBqT2JqW2tleV0pO1xuICAgICAgfSBlbHNlIGlmICghYXR0cikge1xuICAgICAgICAvL3RhZyB2YWx1ZVxuICAgICAgICBpZiAoa2V5ID09PSB0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lKSB7XG4gICAgICAgICAgbGV0IG5ld3ZhbCA9IHRoaXMub3B0aW9ucy50YWdWYWx1ZVByb2Nlc3NvcihrZXksICcnICsgak9ialtrZXldKTtcbiAgICAgICAgICB2YWwgKz0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZShuZXd2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoak9ialtrZXldLCBrZXksICcnLCBsZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoak9ialtrZXldKSkge1xuICAgICAgLy9yZXBlYXRlZCBub2Rlc1xuICAgICAgY29uc3QgYXJyTGVuID0gak9ialtrZXldLmxlbmd0aDtcbiAgICAgIGxldCBsaXN0VGFnVmFsID0gXCJcIjtcbiAgICAgIGxldCBsaXN0VGFnQXR0ciA9IFwiXCI7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFyckxlbjsgaisrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBqT2JqW2tleV1bal07XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBzdXByZXNzIHVuZGVmaW5lZCBub2RlXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmKGtleVswXSA9PT0gXCI/XCIpIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgICAgZWxzZSB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgICAgIC8vIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYodGhpcy5vcHRpb25zLm9uZUxpc3RHcm91cCl7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmoyeChpdGVtLCBsZXZlbCArIDEsIGFqUGF0aC5jb25jYXQoa2V5KSk7XG4gICAgICAgICAgICBsaXN0VGFnVmFsICs9IHJlc3VsdC52YWw7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkpIHtcbiAgICAgICAgICAgICAgbGlzdFRhZ0F0dHIgKz0gcmVzdWx0LmF0dHJTdHJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGxpc3RUYWdWYWwgKz0gdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZShpdGVtLCBrZXksIGxldmVsLCBhalBhdGgpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMub25lTGlzdEdyb3VwKSB7XG4gICAgICAgICAgICBsZXQgdGV4dFZhbHVlID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgaXRlbSk7XG4gICAgICAgICAgICB0ZXh0VmFsdWUgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHRleHRWYWx1ZSk7XG4gICAgICAgICAgICBsaXN0VGFnVmFsICs9IHRleHRWYWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlzdFRhZ1ZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoaXRlbSwga2V5LCAnJywgbGV2ZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodGhpcy5vcHRpb25zLm9uZUxpc3RHcm91cCl7XG4gICAgICAgIGxpc3RUYWdWYWwgPSB0aGlzLmJ1aWxkT2JqZWN0Tm9kZShsaXN0VGFnVmFsLCBrZXksIGxpc3RUYWdBdHRyLCBsZXZlbCk7XG4gICAgICB9XG4gICAgICB2YWwgKz0gbGlzdFRhZ1ZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9uZXN0ZWQgbm9kZVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUpIHtcbiAgICAgICAgY29uc3QgS3MgPSBPYmplY3Qua2V5cyhqT2JqW2tleV0pO1xuICAgICAgICBjb25zdCBMID0gS3MubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IEw7IGorKykge1xuICAgICAgICAgIGF0dHJTdHIgKz0gdGhpcy5idWlsZEF0dHJQYWlyU3RyKEtzW2pdLCAnJyArIGpPYmpba2V5XVtLc1tqXV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgKz0gdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZShqT2JqW2tleV0sIGtleSwgbGV2ZWwsIGFqUGF0aClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHthdHRyU3RyOiBhdHRyU3RyLCB2YWw6IHZhbH07XG59O1xuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZEF0dHJQYWlyU3RyID0gZnVuY3Rpb24oYXR0ck5hbWUsIHZhbCl7XG4gIHZhbCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcihhdHRyTmFtZSwgJycgKyB2YWwpO1xuICB2YWwgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHZhbCk7XG4gIGlmICh0aGlzLm9wdGlvbnMuc3VwcHJlc3NCb29sZWFuQXR0cmlidXRlcyAmJiB2YWwgPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuICcgJyArIGF0dHJOYW1lO1xuICB9IGVsc2UgcmV0dXJuICcgJyArIGF0dHJOYW1lICsgJz1cIicgKyB2YWwgKyAnXCInO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzVGV4dE9yT2JqTm9kZSAob2JqZWN0LCBrZXksIGxldmVsLCBhalBhdGgpIHtcbiAgY29uc3QgcmVzdWx0ID0gdGhpcy5qMngob2JqZWN0LCBsZXZlbCArIDEsIGFqUGF0aC5jb25jYXQoa2V5KSk7XG4gIGlmIChvYmplY3RbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUob2JqZWN0W3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdLCBrZXksIHJlc3VsdC5hdHRyU3RyLCBsZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRPYmplY3ROb2RlKHJlc3VsdC52YWwsIGtleSwgcmVzdWx0LmF0dHJTdHIsIGxldmVsKTtcbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZE9iamVjdE5vZGUgPSBmdW5jdGlvbih2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYodmFsID09PSBcIlwiKXtcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgdGhpcy5jbG9zZVRhZyhrZXkpICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1cbiAgfWVsc2V7XG5cbiAgICBsZXQgdGFnRW5kRXhwID0gJzwvJyArIGtleSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBsZXQgcGlDbG9zaW5nQ2hhciA9IFwiXCI7XG4gICAgXG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikge1xuICAgICAgcGlDbG9zaW5nQ2hhciA9IFwiP1wiO1xuICAgICAgdGFnRW5kRXhwID0gXCJcIjtcbiAgICB9XG4gIFxuICAgIC8vIGF0dHJTdHIgaXMgYW4gZW1wdHkgc3RyaW5nIGluIGNhc2UgdGhlIGF0dHJpYnV0ZSBjYW1lIGFzIHVuZGVmaW5lZCBvciBudWxsXG4gICAgaWYgKChhdHRyU3RyIHx8IGF0dHJTdHIgPT09ICcnKSAmJiB2YWwuaW5kZXhPZignPCcpID09PSAtMSkge1xuICAgICAgcmV0dXJuICggdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsgIGtleSArIGF0dHJTdHIgKyBwaUNsb3NpbmdDaGFyICsgJz4nICsgdmFsICsgdGFnRW5kRXhwICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgJiYgcGlDbG9zaW5nQ2hhci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCEtLSR7dmFsfS0tPmAgKyB0aGlzLm5ld0xpbmU7XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArIHBpQ2xvc2luZ0NoYXIgKyB0aGlzLnRhZ0VuZENoYXIgK1xuICAgICAgICB2YWwgK1xuICAgICAgICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyB0YWdFbmRFeHAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuY2xvc2VUYWcgPSBmdW5jdGlvbihrZXkpe1xuICBsZXQgY2xvc2VUYWcgPSBcIlwiO1xuICBpZih0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2Yoa2V5KSAhPT0gLTEpeyAvL3VucGFpcmVkXG4gICAgaWYoIXRoaXMub3B0aW9ucy5zdXBwcmVzc1VucGFpcmVkTm9kZSkgY2xvc2VUYWcgPSBcIi9cIlxuICB9ZWxzZSBpZih0aGlzLm9wdGlvbnMuc3VwcHJlc3NFbXB0eU5vZGUpeyAvL2VtcHR5XG4gICAgY2xvc2VUYWcgPSBcIi9cIjtcbiAgfWVsc2V7XG4gICAgY2xvc2VUYWcgPSBgPjwvJHtrZXl9YFxuICB9XG4gIHJldHVybiBjbG9zZVRhZztcbn1cblxuZnVuY3Rpb24gYnVpbGRFbXB0eU9iak5vZGUodmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmICh2YWwgIT09ICcnKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRPYmplY3ROb2RlKHZhbCwga2V5LCBhdHRyU3RyLCBsZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAvLyByZXR1cm4gdGhpcy5idWlsZFRhZ1N0cihsZXZlbCxrZXksIGF0dHJTdHIpO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZFRleHRWYWxOb2RlID0gZnVuY3Rpb24odmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSAhPT0gZmFsc2UgJiYga2V5ID09PSB0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCFbQ0RBVEFbJHt2YWx9XV0+YCArICB0aGlzLm5ld0xpbmU7XG4gIH1lbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgYDwhLS0ke3ZhbH0tLT5gICsgIHRoaXMubmV3TGluZTtcbiAgfWVsc2UgaWYoa2V5WzBdID09PSBcIj9cIikgey8vUEkgdGFnXG4gICAgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7IFxuICB9ZWxzZXtcbiAgICBsZXQgdGV4dFZhbHVlID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgdmFsKTtcbiAgICB0ZXh0VmFsdWUgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHRleHRWYWx1ZSk7XG4gIFxuICAgIGlmKCB0ZXh0VmFsdWUgPT09ICcnKXtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgdGhpcy5jbG9zZVRhZyhrZXkpICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyAnPicgK1xuICAgICAgICAgdGV4dFZhbHVlICtcbiAgICAgICAgJzwvJyArIGtleSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUucmVwbGFjZUVudGl0aWVzVmFsdWUgPSBmdW5jdGlvbih0ZXh0VmFsdWUpe1xuICBpZih0ZXh0VmFsdWUgJiYgdGV4dFZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy5vcHRpb25zLnByb2Nlc3NFbnRpdGllcyl7XG4gICAgZm9yIChsZXQgaT0wOyBpPHRoaXMub3B0aW9ucy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5vcHRpb25zLmVudGl0aWVzW2ldO1xuICAgICAgdGV4dFZhbHVlID0gdGV4dFZhbHVlLnJlcGxhY2UoZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRleHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gaW5kZW50YXRlKGxldmVsKSB7XG4gIHJldHVybiB0aGlzLm9wdGlvbnMuaW5kZW50QnkucmVwZWF0KGxldmVsKTtcbn1cblxuZnVuY3Rpb24gaXNBdHRyaWJ1dGUobmFtZSAvKiwgb3B0aW9ucyovKSB7XG4gIGlmIChuYW1lLnN0YXJ0c1dpdGgodGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgpICYmIG5hbWUgIT09IHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHIodGhpcy5hdHRyUHJlZml4TGVuKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCdWlsZGVyO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHZhbGlkYXRvciA9IHJlcXVpcmUoJy4vdmFsaWRhdG9yJyk7XG5jb25zdCBYTUxQYXJzZXIgPSByZXF1aXJlKCcuL3htbHBhcnNlci9YTUxQYXJzZXInKTtcbmNvbnN0IFhNTEJ1aWxkZXIgPSByZXF1aXJlKCcuL3htbGJ1aWxkZXIvanNvbjJ4bWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFhNTFBhcnNlcjogWE1MUGFyc2VyLFxuICBYTUxWYWxpZGF0b3I6IHZhbGlkYXRvcixcbiAgWE1MQnVpbGRlcjogWE1MQnVpbGRlclxufSIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuWE1MX0NIQVJLRVkgPSBleHBvcnRzLlhNTF9BVFRSS0VZID0gdm9pZCAwO1xuLyoqXG4gKiBEZWZhdWx0IGtleSB1c2VkIHRvIGFjY2VzcyB0aGUgWE1MIGF0dHJpYnV0ZXMuXG4gKi9cbmV4cG9ydHMuWE1MX0FUVFJLRVkgPSBcIiRcIjtcbi8qKlxuICogRGVmYXVsdCBrZXkgdXNlZCB0byBhY2Nlc3MgdGhlIFhNTCB2YWx1ZSBjb250ZW50LlxuICovXG5leHBvcnRzLlhNTF9DSEFSS0VZID0gXCJfXCI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD14bWwuY29tbW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5naWZ5WE1MID0gc3RyaW5naWZ5WE1MO1xuZXhwb3J0cy5wYXJzZVhNTCA9IHBhcnNlWE1MO1xuY29uc3QgZmFzdF94bWxfcGFyc2VyXzEgPSByZXF1aXJlKFwiZmFzdC14bWwtcGFyc2VyXCIpO1xuY29uc3QgeG1sX2NvbW1vbl9qc18xID0gcmVxdWlyZShcIi4veG1sLmNvbW1vbi5qc1wiKTtcbmZ1bmN0aW9uIGdldENvbW1vbk9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhdHRyaWJ1dGVzR3JvdXBOYW1lOiB4bWxfY29tbW9uX2pzXzEuWE1MX0FUVFJLRVksXG4gICAgICAgIHRleHROb2RlTmFtZTogKF9hID0gb3B0aW9ucy54bWxDaGFyS2V5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB4bWxfY29tbW9uX2pzXzEuWE1MX0NIQVJLRVksXG4gICAgICAgIGlnbm9yZUF0dHJpYnV0ZXM6IGZhbHNlLFxuICAgICAgICBzdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzOiBmYWxzZSxcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0U2VyaWFsaXplck9wdGlvbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBnZXRDb21tb25PcHRpb25zKG9wdGlvbnMpKSwgeyBhdHRyaWJ1dGVOYW1lUHJlZml4OiBcIkBfXCIsIGZvcm1hdDogdHJ1ZSwgc3VwcHJlc3NFbXB0eU5vZGU6IHRydWUsIGluZGVudEJ5OiBcIlwiLCByb290Tm9kZU5hbWU6IChfYSA9IG9wdGlvbnMucm9vdE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwicm9vdFwiLCBjZGF0YVByb3BOYW1lOiAoX2IgPSBvcHRpb25zLmNkYXRhUHJvcE5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiX19jZGF0YVwiIH0pO1xufVxuZnVuY3Rpb24gZ2V0UGFyc2VyT3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBnZXRDb21tb25PcHRpb25zKG9wdGlvbnMpKSwgeyBwYXJzZUF0dHJpYnV0ZVZhbHVlOiBmYWxzZSwgcGFyc2VUYWdWYWx1ZTogZmFsc2UsIGF0dHJpYnV0ZU5hbWVQcmVmaXg6IFwiXCIsIHN0b3BOb2Rlczogb3B0aW9ucy5zdG9wTm9kZXMsIHByb2Nlc3NFbnRpdGllczogdHJ1ZSB9KTtcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gSlNPTiBvYmplY3QgdG8gWE1MIHN0cmluZ1xuICogQHBhcmFtIG9iaiAtIEpTT04gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCBpbnRvIFhNTCBzdHJpbmdcbiAqIEBwYXJhbSBvcHRzIC0gT3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgWE1MIGJ1aWxkaW5nIG9mIGdpdmVuIEpTT04gb2JqZWN0XG4gKiBgcm9vdE5hbWVgIGluZGljYXRlcyB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHRoZSByZXN1bHRpbmcgWE1MXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVhNTChvYmosIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHBhcnNlck9wdGlvbnMgPSBnZXRTZXJpYWxpemVyT3B0aW9ucyhvcHRzKTtcbiAgICBjb25zdCBqMnggPSBuZXcgZmFzdF94bWxfcGFyc2VyXzEuWE1MQnVpbGRlcihwYXJzZXJPcHRpb25zKTtcbiAgICBjb25zdCBub2RlID0geyBbcGFyc2VyT3B0aW9ucy5yb290Tm9kZU5hbWVdOiBvYmogfTtcbiAgICBjb25zdCB4bWxEYXRhID0gajJ4LmJ1aWxkKG5vZGUpO1xuICAgIHJldHVybiBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiBzdGFuZGFsb25lPVwieWVzXCI/PiR7eG1sRGF0YX1gLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gWE1MIHN0cmluZyBpbnRvIEpTT05cbiAqIEBwYXJhbSBzdHIgLSBTdHJpbmcgY29udGFpbmluZyB0aGUgWE1MIGNvbnRlbnQgdG8gYmUgcGFyc2VkIGludG8gSlNPTlxuICogQHBhcmFtIG9wdHMgLSBPcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBwYXJzaW5nIG9mIGdpdmVuIHhtbCBzdHJpbmdcbiAqIGBpbmNsdWRlUm9vdGAgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvb3QgZWxlbWVudCBpcyB0byBiZSBpbmNsdWRlZCBvciBub3QgaW4gdGhlIG91dHB1dFxuICovXG5hc3luYyBmdW5jdGlvbiBwYXJzZVhNTChzdHIsIG9wdHMgPSB7fSkge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvY3VtZW50IGlzIGVtcHR5XCIpO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0aW9uID0gZmFzdF94bWxfcGFyc2VyXzEuWE1MVmFsaWRhdG9yLnZhbGlkYXRlKHN0cik7XG4gICAgaWYgKHZhbGlkYXRpb24gIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgdmFsaWRhdGlvbjtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IGZhc3RfeG1sX3BhcnNlcl8xLlhNTFBhcnNlcihnZXRQYXJzZXJPcHRpb25zKG9wdHMpKTtcbiAgICBjb25zdCBwYXJzZWRYbWwgPSBwYXJzZXIucGFyc2Uoc3RyKTtcbiAgICAvLyBSZW1vdmUgdGhlIDw/eG1sIHZlcnNpb249XCIuLi5cIiA/PiBub2RlLlxuICAgIC8vIFRoaXMgaXMgYSBjaGFuZ2UgaW4gYmVoYXZpb3Igb24gZnhwIHY0LiBJc3N1ZSAjNDI0XG4gICAgaWYgKHBhcnNlZFhtbFtcIj94bWxcIl0pIHtcbiAgICAgICAgZGVsZXRlIHBhcnNlZFhtbFtcIj94bWxcIl07XG4gICAgfVxuICAgIGlmICghb3B0cy5pbmNsdWRlUm9vdCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJzZWRYbWwpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlZFhtbFtrZXldO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiA/IE9iamVjdC5hc3NpZ24oe30sIHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRYbWw7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD14bWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IGV4cG9ydHMuWE1MX0FUVFJLRVkgPSBleHBvcnRzLnBhcnNlWE1MID0gZXhwb3J0cy5zdHJpbmdpZnlYTUwgPSB2b2lkIDA7XG52YXIgeG1sX2pzXzEgPSByZXF1aXJlKFwiLi94bWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlYTUxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9qc18xLnN0cmluZ2lmeVhNTDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlWE1MXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB4bWxfanNfMS5wYXJzZVhNTDsgfSB9KTtcbnZhciB4bWxfY29tbW9uX2pzXzEgPSByZXF1aXJlKFwiLi94bWwuY29tbW9uLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWE1MX0FUVFJLRVlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9jb21tb25fanNfMS5YTUxfQVRUUktFWTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlhNTF9DSEFSS0VZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB4bWxfY29tbW9uX2pzXzEuWE1MX0NIQVJLRVk7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZ2dlciA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG4vKipcbiAqIFRoZSBgQGF6dXJlL2xvZ2dlcmAgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYWNrYWdlLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydHMubG9nZ2VyID0gKDAsIGxvZ2dlcl8xLmNyZWF0ZUNsaWVudExvZ2dlcikoXCJjb3JlLWxyb1wiKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ2dlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRlcm1pbmFsU3RhdGVzID0gZXhwb3J0cy5QT0xMX0lOVEVSVkFMX0lOX01TID0gdm9pZCAwO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCB0aW1lIGludGVydmFsIHRvIHdhaXQgYmVmb3JlIHNlbmRpbmcgdGhlIG5leHQgcG9sbGluZyByZXF1ZXN0LlxuICovXG5leHBvcnRzLlBPTExfSU5URVJWQUxfSU5fTVMgPSAyMDAwO1xuLyoqXG4gKiBUaGUgY2xvc2VkIHNldCBvZiB0ZXJtaW5hbCBzdGF0ZXMuXG4gKi9cbmV4cG9ydHMudGVybWluYWxTdGF0ZXMgPSBbXCJzdWNjZWVkZWRcIiwgXCJjYW5jZWxlZFwiLCBcImZhaWxlZFwiXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBvbGxPcGVyYXRpb24gPSBleHBvcnRzLmluaXRPcGVyYXRpb24gPSBleHBvcnRzLmRlc2VyaWFsaXplU3RhdGUgPSB2b2lkIDA7XG5jb25zdCBsb2dnZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2dnZXIuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy5qc1wiKTtcbi8qKlxuICogRGVzZXJpYWxpemVzIHRoZSBzdGF0ZVxuICovXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVN0YXRlKHNlcmlhbGl6ZWRTdGF0ZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHNlcmlhbGl6ZWRTdGF0ZSkuc3RhdGU7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRlc2VyaWFsaXplIGlucHV0IHN0YXRlOiAke3NlcmlhbGl6ZWRTdGF0ZX1gKTtcbiAgICB9XG59XG5leHBvcnRzLmRlc2VyaWFsaXplU3RhdGUgPSBkZXNlcmlhbGl6ZVN0YXRlO1xuZnVuY3Rpb24gc2V0U3RhdGVFcnJvcihpbnB1dHMpIHtcbiAgICBjb25zdCB7IHN0YXRlLCBzdGF0ZVByb3h5LCBpc09wZXJhdGlvbkVycm9yIH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoaXNPcGVyYXRpb25FcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RXJyb3Ioc3RhdGUsIGVycm9yKTtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RmFpbGVkKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9O1xufVxuZnVuY3Rpb24gYXBwZW5kUmVhZGFibGVFcnJvck1lc3NhZ2UoY3VycmVudE1lc3NhZ2UsIGlubmVyTWVzc2FnZSkge1xuICAgIGxldCBtZXNzYWdlID0gY3VycmVudE1lc3NhZ2U7XG4gICAgaWYgKG1lc3NhZ2Uuc2xpY2UoLTEpICE9PSBcIi5cIikge1xuICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSArIFwiLlwiO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZSArIFwiIFwiICsgaW5uZXJNZXNzYWdlO1xufVxuZnVuY3Rpb24gc2ltcGxpZnlFcnJvcihlcnIpIHtcbiAgICBsZXQgbWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgIGxldCBjb2RlID0gZXJyLmNvZGU7XG4gICAgbGV0IGN1ckVyciA9IGVycjtcbiAgICB3aGlsZSAoY3VyRXJyLmlubmVyZXJyb3IpIHtcbiAgICAgICAgY3VyRXJyID0gY3VyRXJyLmlubmVyZXJyb3I7XG4gICAgICAgIGNvZGUgPSBjdXJFcnIuY29kZTtcbiAgICAgICAgbWVzc2FnZSA9IGFwcGVuZFJlYWRhYmxlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIGN1ckVyci5tZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgbWVzc2FnZSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcHJvY2Vzc09wZXJhdGlvblN0YXR1cyhyZXN1bHQpIHtcbiAgICBjb25zdCB7IHN0YXRlLCBzdGF0ZVByb3h5LCBzdGF0dXMsIGlzRG9uZSwgcHJvY2Vzc1Jlc3VsdCwgZ2V0RXJyb3IsIHJlc3BvbnNlLCBzZXRFcnJvckFzUmVzdWx0IH0gPSByZXN1bHQ7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcInN1Y2NlZWRlZFwiOiB7XG4gICAgICAgICAgICBzdGF0ZVByb3h5LnNldFN1Y2NlZWRlZChzdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZmFpbGVkXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGdldEVycm9yID09PSBudWxsIHx8IGdldEVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRFcnJvcihyZXNwb25zZSk7XG4gICAgICAgICAgICBsZXQgcG9zdGZpeCA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBtZXNzYWdlIH0gPSBzaW1wbGlmeUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcG9zdGZpeCA9IGAuICR7Y29kZX0uICR7bWVzc2FnZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXJyU3RyID0gYFRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uIGhhcyBmYWlsZWQke3Bvc3RmaXh9YDtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RXJyb3Ioc3RhdGUsIG5ldyBFcnJvcihlcnJTdHIpKTtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RmFpbGVkKHN0YXRlKTtcbiAgICAgICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci53YXJuaW5nKGVyclN0cik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiY2FuY2VsZWRcIjoge1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRDYW5jZWxlZChzdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoKGlzRG9uZSA9PT0gbnVsbCB8fCBpc0RvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlzRG9uZShyZXNwb25zZSwgc3RhdGUpKSB8fFxuICAgICAgICAoaXNEb25lID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIFtcInN1Y2NlZWRlZFwiLCBcImNhbmNlbGVkXCJdLmNvbmNhdChzZXRFcnJvckFzUmVzdWx0ID8gW10gOiBbXCJmYWlsZWRcIl0pLmluY2x1ZGVzKHN0YXR1cykpKSB7XG4gICAgICAgIHN0YXRlUHJveHkuc2V0UmVzdWx0KHN0YXRlLCBidWlsZFJlc3VsdCh7XG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJ1aWxkUmVzdWx0KGlucHV0cykge1xuICAgIGNvbnN0IHsgcHJvY2Vzc1Jlc3VsdCwgcmVzcG9uc2UsIHN0YXRlIH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuIHByb2Nlc3NSZXN1bHQgPyBwcm9jZXNzUmVzdWx0KHJlc3BvbnNlLCBzdGF0ZSkgOiByZXNwb25zZTtcbn1cbi8qKlxuICogSW5pdGlhdGVzIHRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0T3BlcmF0aW9uKGlucHV0cykge1xuICAgIGNvbnN0IHsgaW5pdCwgc3RhdGVQcm94eSwgcHJvY2Vzc1Jlc3VsdCwgZ2V0T3BlcmF0aW9uU3RhdHVzLCB3aXRoT3BlcmF0aW9uTG9jYXRpb24sIHNldEVycm9yQXNSZXN1bHQsIH0gPSBpbnB1dHM7XG4gICAgY29uc3QgeyBvcGVyYXRpb25Mb2NhdGlvbiwgcmVzb3VyY2VMb2NhdGlvbiwgbWV0YWRhdGEsIHJlc3BvbnNlIH0gPSBhd2FpdCBpbml0KCk7XG4gICAgaWYgKG9wZXJhdGlvbkxvY2F0aW9uKVxuICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IG51bGwgfHwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aXRoT3BlcmF0aW9uTG9jYXRpb24ob3BlcmF0aW9uTG9jYXRpb24sIGZhbHNlKTtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgcmVzb3VyY2VMb2NhdGlvbixcbiAgICB9O1xuICAgIGxvZ2dlcl9qc18xLmxvZ2dlci52ZXJib3NlKGBMUk86IE9wZXJhdGlvbiBkZXNjcmlwdGlvbjpgLCBjb25maWcpO1xuICAgIGNvbnN0IHN0YXRlID0gc3RhdGVQcm94eS5pbml0U3RhdGUoY29uZmlnKTtcbiAgICBjb25zdCBzdGF0dXMgPSBnZXRPcGVyYXRpb25TdGF0dXMoeyByZXNwb25zZSwgc3RhdGUsIG9wZXJhdGlvbkxvY2F0aW9uIH0pO1xuICAgIHByb2Nlc3NPcGVyYXRpb25TdGF0dXMoeyBzdGF0ZSwgc3RhdHVzLCBzdGF0ZVByb3h5LCByZXNwb25zZSwgc2V0RXJyb3JBc1Jlc3VsdCwgcHJvY2Vzc1Jlc3VsdCB9KTtcbiAgICByZXR1cm4gc3RhdGU7XG59XG5leHBvcnRzLmluaXRPcGVyYXRpb24gPSBpbml0T3BlcmF0aW9uO1xuYXN5bmMgZnVuY3Rpb24gcG9sbE9wZXJhdGlvbkhlbHBlcihpbnB1dHMpIHtcbiAgICBjb25zdCB7IHBvbGwsIHN0YXRlLCBzdGF0ZVByb3h5LCBvcGVyYXRpb25Mb2NhdGlvbiwgZ2V0T3BlcmF0aW9uU3RhdHVzLCBnZXRSZXNvdXJjZUxvY2F0aW9uLCBpc09wZXJhdGlvbkVycm9yLCBvcHRpb25zLCB9ID0gaW5wdXRzO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9sbChvcGVyYXRpb25Mb2NhdGlvbiwgb3B0aW9ucykuY2F0Y2goc2V0U3RhdGVFcnJvcih7XG4gICAgICAgIHN0YXRlLFxuICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICBpc09wZXJhdGlvbkVycm9yLFxuICAgIH0pKTtcbiAgICBjb25zdCBzdGF0dXMgPSBnZXRPcGVyYXRpb25TdGF0dXMocmVzcG9uc2UsIHN0YXRlKTtcbiAgICBsb2dnZXJfanNfMS5sb2dnZXIudmVyYm9zZShgTFJPOiBTdGF0dXM6XFxuXFx0UG9sbGluZyBmcm9tOiAke3N0YXRlLmNvbmZpZy5vcGVyYXRpb25Mb2NhdGlvbn1cXG5cXHRPcGVyYXRpb24gc3RhdHVzOiAke3N0YXR1c31cXG5cXHRQb2xsaW5nIHN0YXR1czogJHtjb25zdGFudHNfanNfMS50ZXJtaW5hbFN0YXRlcy5pbmNsdWRlcyhzdGF0dXMpID8gXCJTdG9wcGVkXCIgOiBcIlJ1bm5pbmdcIn1gKTtcbiAgICBpZiAoc3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlTG9jYXRpb24gPSBnZXRSZXNvdXJjZUxvY2F0aW9uKHJlc3BvbnNlLCBzdGF0ZSk7XG4gICAgICAgIGlmIChyZXNvdXJjZUxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IGF3YWl0IHBvbGwocmVzb3VyY2VMb2NhdGlvbikuY2F0Y2goc2V0U3RhdGVFcnJvcih7IHN0YXRlLCBzdGF0ZVByb3h5LCBpc09wZXJhdGlvbkVycm9yIH0pKSxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJlc3BvbnNlLCBzdGF0dXMgfTtcbn1cbi8qKiBQb2xscyB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvbGxPcGVyYXRpb24oaW5wdXRzKSB7XG4gICAgY29uc3QgeyBwb2xsLCBzdGF0ZSwgc3RhdGVQcm94eSwgb3B0aW9ucywgZ2V0T3BlcmF0aW9uU3RhdHVzLCBnZXRSZXNvdXJjZUxvY2F0aW9uLCBnZXRPcGVyYXRpb25Mb2NhdGlvbiwgaXNPcGVyYXRpb25FcnJvciwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLCBnZXRQb2xsaW5nSW50ZXJ2YWwsIHByb2Nlc3NSZXN1bHQsIGdldEVycm9yLCB1cGRhdGVTdGF0ZSwgc2V0RGVsYXksIGlzRG9uZSwgc2V0RXJyb3JBc1Jlc3VsdCwgfSA9IGlucHV0cztcbiAgICBjb25zdCB7IG9wZXJhdGlvbkxvY2F0aW9uIH0gPSBzdGF0ZS5jb25maWc7XG4gICAgaWYgKG9wZXJhdGlvbkxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZSwgc3RhdHVzIH0gPSBhd2FpdCBwb2xsT3BlcmF0aW9uSGVscGVyKHtcbiAgICAgICAgICAgIHBvbGwsXG4gICAgICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXMsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICAgIGdldFJlc291cmNlTG9jYXRpb24sXG4gICAgICAgICAgICBpc09wZXJhdGlvbkVycm9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHByb2Nlc3NPcGVyYXRpb25TdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICBpc0RvbmUsXG4gICAgICAgICAgICBwcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgZ2V0RXJyb3IsXG4gICAgICAgICAgICBzZXRFcnJvckFzUmVzdWx0LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjb25zdGFudHNfanNfMS50ZXJtaW5hbFN0YXRlcy5pbmNsdWRlcyhzdGF0dXMpKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbEluTXMgPSBnZXRQb2xsaW5nSW50ZXJ2YWwgPT09IG51bGwgfHwgZ2V0UG9sbGluZ0ludGVydmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRQb2xsaW5nSW50ZXJ2YWwocmVzcG9uc2UpO1xuICAgICAgICAgICAgaWYgKGludGVydmFsSW5NcylcbiAgICAgICAgICAgICAgICBzZXREZWxheShpbnRlcnZhbEluTXMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBnZXRPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCBnZXRPcGVyYXRpb25Mb2NhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2V0T3BlcmF0aW9uTG9jYXRpb24ocmVzcG9uc2UsIHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNVcGRhdGVkID0gb3BlcmF0aW9uTG9jYXRpb24gIT09IGxvY2F0aW9uO1xuICAgICAgICAgICAgICAgIHN0YXRlLmNvbmZpZy5vcGVyYXRpb25Mb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICAgICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpdGhPcGVyYXRpb25Mb2NhdGlvbihsb2NhdGlvbiwgaXNVcGRhdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IG51bGwgfHwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aXRoT3BlcmF0aW9uTG9jYXRpb24ob3BlcmF0aW9uTG9jYXRpb24sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTdGF0ZSA9PT0gbnVsbCB8fCB1cGRhdGVTdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdXBkYXRlU3RhdGUoc3RhdGUsIHJlc3BvbnNlKTtcbiAgICB9XG59XG5leHBvcnRzLnBvbGxPcGVyYXRpb24gPSBwb2xsT3BlcmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucG9sbEh0dHBPcGVyYXRpb24gPSBleHBvcnRzLmlzT3BlcmF0aW9uRXJyb3IgPSBleHBvcnRzLmdldFJlc291cmNlTG9jYXRpb24gPSBleHBvcnRzLmdldE9wZXJhdGlvblN0YXR1cyA9IGV4cG9ydHMuZ2V0T3BlcmF0aW9uTG9jYXRpb24gPSBleHBvcnRzLmluaXRIdHRwT3BlcmF0aW9uID0gZXhwb3J0cy5nZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlID0gZXhwb3J0cy5nZXRFcnJvckZyb21SZXNwb25zZSA9IGV4cG9ydHMucGFyc2VSZXRyeUFmdGVyID0gZXhwb3J0cy5pbmZlckxyb01vZGUgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuLi9wb2xsZXIvb3BlcmF0aW9uLmpzXCIpO1xuY29uc3QgbG9nZ2VyX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nZ2VyLmpzXCIpO1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTG9jYXRpb25Qb2xsaW5nVXJsKGlucHV0cykge1xuICAgIGNvbnN0IHsgYXp1cmVBc3luY09wZXJhdGlvbiwgb3BlcmF0aW9uTG9jYXRpb24gfSA9IGlucHV0cztcbiAgICByZXR1cm4gb3BlcmF0aW9uTG9jYXRpb24gIT09IG51bGwgJiYgb3BlcmF0aW9uTG9jYXRpb24gIT09IHZvaWQgMCA/IG9wZXJhdGlvbkxvY2F0aW9uIDogYXp1cmVBc3luY09wZXJhdGlvbjtcbn1cbmZ1bmN0aW9uIGdldExvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJsb2NhdGlvblwiXTtcbn1cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkxvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJvcGVyYXRpb24tbG9jYXRpb25cIl07XG59XG5mdW5jdGlvbiBnZXRBenVyZUFzeW5jT3BlcmF0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJhenVyZS1hc3luY29wZXJhdGlvblwiXTtcbn1cbmZ1bmN0aW9uIGZpbmRSZXNvdXJjZUxvY2F0aW9uKGlucHV0cykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IGxvY2F0aW9uLCByZXF1ZXN0TWV0aG9kLCByZXF1ZXN0UGF0aCwgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZyB9ID0gaW5wdXRzO1xuICAgIHN3aXRjaCAocmVxdWVzdE1ldGhvZCkge1xuICAgICAgICBjYXNlIFwiUFVUXCI6IHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UGF0aDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiREVMRVRFXCI6IHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIlBBVENIXCI6IHtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSBnZXREZWZhdWx0KCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHJlcXVlc3RQYXRoO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHtcbiAgICAgICAgc3dpdGNoIChyZXNvdXJjZUxvY2F0aW9uQ29uZmlnKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXp1cmUtYXN5bmMtb3BlcmF0aW9uXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm9yaWdpbmFsLXVyaVwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImxvY2F0aW9uXCI6XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaW5mZXJMcm9Nb2RlKGlucHV0cykge1xuICAgIGNvbnN0IHsgcmF3UmVzcG9uc2UsIHJlcXVlc3RNZXRob2QsIHJlcXVlc3RQYXRoLCByZXNvdXJjZUxvY2F0aW9uQ29uZmlnIH0gPSBpbnB1dHM7XG4gICAgY29uc3Qgb3BlcmF0aW9uTG9jYXRpb24gPSBnZXRPcGVyYXRpb25Mb2NhdGlvbkhlYWRlcihyYXdSZXNwb25zZSk7XG4gICAgY29uc3QgYXp1cmVBc3luY09wZXJhdGlvbiA9IGdldEF6dXJlQXN5bmNPcGVyYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpO1xuICAgIGNvbnN0IHBvbGxpbmdVcmwgPSBnZXRPcGVyYXRpb25Mb2NhdGlvblBvbGxpbmdVcmwoeyBvcGVyYXRpb25Mb2NhdGlvbiwgYXp1cmVBc3luY09wZXJhdGlvbiB9KTtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGdldExvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBub3JtYWxpemVkUmVxdWVzdE1ldGhvZCA9IHJlcXVlc3RNZXRob2QgPT09IG51bGwgfHwgcmVxdWVzdE1ldGhvZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVxdWVzdE1ldGhvZC50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgIGlmIChwb2xsaW5nVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZGU6IFwiT3BlcmF0aW9uTG9jYXRpb25cIixcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uOiBwb2xsaW5nVXJsLFxuICAgICAgICAgICAgcmVzb3VyY2VMb2NhdGlvbjogZmluZFJlc291cmNlTG9jYXRpb24oe1xuICAgICAgICAgICAgICAgIHJlcXVlc3RNZXRob2Q6IG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RQYXRoLFxuICAgICAgICAgICAgICAgIHJlc291cmNlTG9jYXRpb25Db25maWcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kZTogXCJSZXNvdXJjZUxvY2F0aW9uXCIsXG4gICAgICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kID09PSBcIlBVVFwiICYmIHJlcXVlc3RQYXRoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcIkJvZHlcIixcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uOiByZXF1ZXN0UGF0aCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZXhwb3J0cy5pbmZlckxyb01vZGUgPSBpbmZlckxyb01vZGU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1TdGF0dXMoaW5wdXRzKSB7XG4gICAgY29uc3QgeyBzdGF0dXMsIHN0YXR1c0NvZGUgfSA9IGlucHV0cztcbiAgICBpZiAodHlwZW9mIHN0YXR1cyAhPT0gXCJzdHJpbmdcIiAmJiBzdGF0dXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvbGxpbmcgd2FzIHVuc3VjY2Vzc2Z1bC4gRXhwZWN0ZWQgc3RhdHVzIHRvIGhhdmUgYSBzdHJpbmcgdmFsdWUgb3Igbm8gdmFsdWUgYnV0IGl0IGhhcyBpbnN0ZWFkOiAke3N0YXR1c30uIFRoaXMgZG9lc24ndCBuZWNlc3NhcmlseSBpbmRpY2F0ZSB0aGUgb3BlcmF0aW9uIGhhcyBmYWlsZWQuIENoZWNrIHlvdXIgQXp1cmUgc3Vic2NyaXB0aW9uIG9yIHJlc291cmNlIHN0YXR1cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gKTtcbiAgICB9XG4gICAgc3dpdGNoIChzdGF0dXMgPT09IG51bGwgfHwgc3RhdHVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0dXMudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgIHJldHVybiB0b09wZXJhdGlvblN0YXR1cyhzdGF0dXNDb2RlKTtcbiAgICAgICAgY2FzZSBcInN1Y2NlZWRlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwic3VjY2VlZGVkXCI7XG4gICAgICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBcImZhaWxlZFwiO1xuICAgICAgICBjYXNlIFwicnVubmluZ1wiOlxuICAgICAgICBjYXNlIFwiYWNjZXB0ZWRcIjpcbiAgICAgICAgY2FzZSBcInN0YXJ0ZWRcIjpcbiAgICAgICAgY2FzZSBcImNhbmNlbGluZ1wiOlxuICAgICAgICBjYXNlIFwiY2FuY2VsbGluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICAgICAgICBjYXNlIFwiY2FuY2VsZWRcIjpcbiAgICAgICAgY2FzZSBcImNhbmNlbGxlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiY2FuY2VsZWRcIjtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLnZlcmJvc2UoYExSTzogdW5yZWNvZ25pemVkIG9wZXJhdGlvbiBzdGF0dXM6ICR7c3RhdHVzfWApO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFN0YXR1cyhyYXdSZXNwb25zZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IHN0YXR1cyB9ID0gKF9hID0gcmF3UmVzcG9uc2UuYm9keSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgcmV0dXJuIHRyYW5zZm9ybVN0YXR1cyh7IHN0YXR1cywgc3RhdHVzQ29kZTogcmF3UmVzcG9uc2Uuc3RhdHVzQ29kZSB9KTtcbn1cbmZ1bmN0aW9uIGdldFByb3Zpc2lvbmluZ1N0YXRlKHJhd1Jlc3BvbnNlKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB7IHByb3BlcnRpZXMsIHByb3Zpc2lvbmluZ1N0YXRlIH0gPSAoX2EgPSByYXdSZXNwb25zZS5ib2R5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICBjb25zdCBzdGF0dXMgPSAoX2IgPSBwcm9wZXJ0aWVzID09PSBudWxsIHx8IHByb3BlcnRpZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BlcnRpZXMucHJvdmlzaW9uaW5nU3RhdGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHByb3Zpc2lvbmluZ1N0YXRlO1xuICAgIHJldHVybiB0cmFuc2Zvcm1TdGF0dXMoeyBzdGF0dXMsIHN0YXR1c0NvZGU6IHJhd1Jlc3BvbnNlLnN0YXR1c0NvZGUgfSk7XG59XG5mdW5jdGlvbiB0b09wZXJhdGlvblN0YXR1cyhzdGF0dXNDb2RlKSB7XG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IDIwMikge1xuICAgICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0YXR1c0NvZGUgPCAzMDApIHtcbiAgICAgICAgcmV0dXJuIFwic3VjY2VlZGVkXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXIoeyByYXdSZXNwb25zZSB9KSB7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9IHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJyZXRyeS1hZnRlclwiXTtcbiAgICBpZiAocmV0cnlBZnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFJldHJ5LUFmdGVyIGhlYWRlciB2YWx1ZSBpcyBlaXRoZXIgaW4gSFRUUCBkYXRlIGZvcm1hdCwgb3IgaW4gc2Vjb25kc1xuICAgICAgICBjb25zdCByZXRyeUFmdGVySW5TZWNvbmRzID0gcGFyc2VJbnQocmV0cnlBZnRlcik7XG4gICAgICAgIHJldHVybiBpc05hTihyZXRyeUFmdGVySW5TZWNvbmRzKVxuICAgICAgICAgICAgPyBjYWxjdWxhdGVQb2xsaW5nSW50ZXJ2YWxGcm9tRGF0ZShuZXcgRGF0ZShyZXRyeUFmdGVyKSlcbiAgICAgICAgICAgIDogcmV0cnlBZnRlckluU2Vjb25kcyAqIDEwMDA7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnBhcnNlUmV0cnlBZnRlciA9IHBhcnNlUmV0cnlBZnRlcjtcbmZ1bmN0aW9uIGdldEVycm9yRnJvbVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhY2Nlc3NCb2R5UHJvcGVydHkocmVzcG9uc2UsIFwiZXJyb3JcIik7XG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgICBsb2dnZXJfanNfMS5sb2dnZXIud2FybmluZyhgVGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24gZmFpbGVkIGJ1dCB0aGVyZSBpcyBubyBlcnJvciBwcm9wZXJ0eSBpbiB0aGUgcmVzcG9uc2UncyBib2R5YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFlcnJvci5jb2RlIHx8ICFlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci53YXJuaW5nKGBUaGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbiBmYWlsZWQgYnV0IHRoZSBlcnJvciBwcm9wZXJ0eSBpbiB0aGUgcmVzcG9uc2UncyBib2R5IGRvZXNuJ3QgY29udGFpbiBjb2RlIG9yIG1lc3NhZ2VgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG59XG5leHBvcnRzLmdldEVycm9yRnJvbVJlc3BvbnNlID0gZ2V0RXJyb3JGcm9tUmVzcG9uc2U7XG5mdW5jdGlvbiBjYWxjdWxhdGVQb2xsaW5nSW50ZXJ2YWxGcm9tRGF0ZShyZXRyeUFmdGVyRGF0ZSkge1xuICAgIGNvbnN0IHRpbWVOb3cgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcbiAgICBjb25zdCByZXRyeUFmdGVyVGltZSA9IHJldHJ5QWZ0ZXJEYXRlLmdldFRpbWUoKTtcbiAgICBpZiAodGltZU5vdyA8IHJldHJ5QWZ0ZXJUaW1lKSB7XG4gICAgICAgIHJldHVybiByZXRyeUFmdGVyVGltZSAtIHRpbWVOb3c7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlKGlucHV0cykge1xuICAgIGNvbnN0IHsgcmVzcG9uc2UsIHN0YXRlLCBvcGVyYXRpb25Mb2NhdGlvbiB9ID0gaW5wdXRzO1xuICAgIGZ1bmN0aW9uIGhlbHBlcigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtb2RlID0gKF9hID0gc3RhdGUuY29uZmlnLm1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbXCJtb2RlXCJdO1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICAgIHJldHVybiB0b09wZXJhdGlvblN0YXR1cyhyZXNwb25zZS5yYXdSZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgICAgICAgIGNhc2UgXCJCb2R5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGlvblN0YXR1cyhyZXNwb25zZSwgc3RhdGUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhdHVzID0gaGVscGVyKCk7XG4gICAgcmV0dXJuIHN0YXR1cyA9PT0gXCJydW5uaW5nXCIgJiYgb3BlcmF0aW9uTG9jYXRpb24gPT09IHVuZGVmaW5lZCA/IFwic3VjY2VlZGVkXCIgOiBzdGF0dXM7XG59XG5leHBvcnRzLmdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UgPSBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlO1xuLyoqXG4gKiBJbml0aWF0ZXMgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRIdHRwT3BlcmF0aW9uKGlucHV0cykge1xuICAgIGNvbnN0IHsgc3RhdGVQcm94eSwgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgbHJvLCBzZXRFcnJvckFzUmVzdWx0IH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuICgwLCBvcGVyYXRpb25fanNfMS5pbml0T3BlcmF0aW9uKSh7XG4gICAgICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbHJvLnNlbmRJbml0aWFsUmVxdWVzdCgpO1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaW5mZXJMcm9Nb2RlKHtcbiAgICAgICAgICAgICAgICByYXdSZXNwb25zZTogcmVzcG9uc2UucmF3UmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBhdGg6IGxyby5yZXF1ZXN0UGF0aCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0TWV0aG9kOiBscm8ucmVxdWVzdE1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IHJlc3BvbnNlLCBvcGVyYXRpb25Mb2NhdGlvbjogY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9uLCByZXNvdXJjZUxvY2F0aW9uOiBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcucmVzb3VyY2VMb2NhdGlvbiB9LCAoKGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5tb2RlKSA/IHsgbWV0YWRhdGE6IHsgbW9kZTogY29uZmlnLm1vZGUgfSB9IDoge30pKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgcHJvY2Vzc1Jlc3VsdDogcHJvY2Vzc1Jlc3VsdFxuICAgICAgICAgICAgPyAoeyBmbGF0UmVzcG9uc2UgfSwgc3RhdGUpID0+IHByb2Nlc3NSZXN1bHQoZmxhdFJlc3BvbnNlLCBzdGF0ZSlcbiAgICAgICAgICAgIDogKHsgZmxhdFJlc3BvbnNlIH0pID0+IGZsYXRSZXNwb25zZSxcbiAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdHVzOiBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLFxuICAgICAgICBzZXRFcnJvckFzUmVzdWx0LFxuICAgIH0pO1xufVxuZXhwb3J0cy5pbml0SHR0cE9wZXJhdGlvbiA9IGluaXRIdHRwT3BlcmF0aW9uO1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTG9jYXRpb24oeyByYXdSZXNwb25zZSB9LCBzdGF0ZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBtb2RlID0gKF9hID0gc3RhdGUuY29uZmlnLm1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbXCJtb2RlXCJdO1xuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIFwiT3BlcmF0aW9uTG9jYXRpb25cIjoge1xuICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGlvbkxvY2F0aW9uUG9sbGluZ1VybCh7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uTG9jYXRpb246IGdldE9wZXJhdGlvbkxvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSxcbiAgICAgICAgICAgICAgICBhenVyZUFzeW5jT3BlcmF0aW9uOiBnZXRBenVyZUFzeW5jT3BlcmF0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUxvY2F0aW9uXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRMb2NhdGlvbkhlYWRlcihyYXdSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIkJvZHlcIjpcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZ2V0T3BlcmF0aW9uTG9jYXRpb24gPSBnZXRPcGVyYXRpb25Mb2NhdGlvbjtcbmZ1bmN0aW9uIGdldE9wZXJhdGlvblN0YXR1cyh7IHJhd1Jlc3BvbnNlIH0sIHN0YXRlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG1vZGUgPSAoX2EgPSBzdGF0ZS5jb25maWcubWV0YWRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtcIm1vZGVcIl07XG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgXCJPcGVyYXRpb25Mb2NhdGlvblwiOiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0U3RhdHVzKHJhd1Jlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiUmVzb3VyY2VMb2NhdGlvblwiOiB7XG4gICAgICAgICAgICByZXR1cm4gdG9PcGVyYXRpb25TdGF0dXMocmF3UmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIkJvZHlcIjoge1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3Zpc2lvbmluZ1N0YXRlKHJhd1Jlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBlcnJvcjogVW5leHBlY3RlZCBvcGVyYXRpb24gbW9kZTogJHttb2RlfWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0T3BlcmF0aW9uU3RhdHVzID0gZ2V0T3BlcmF0aW9uU3RhdHVzO1xuZnVuY3Rpb24gYWNjZXNzQm9keVByb3BlcnR5KHsgZmxhdFJlc3BvbnNlLCByYXdSZXNwb25zZSB9LCBwcm9wKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gKF9hID0gZmxhdFJlc3BvbnNlID09PSBudWxsIHx8IGZsYXRSZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmxhdFJlc3BvbnNlW3Byb3BdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoX2IgPSByYXdSZXNwb25zZS5ib2R5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbcHJvcF07XG59XG5mdW5jdGlvbiBnZXRSZXNvdXJjZUxvY2F0aW9uKHJlcywgc3RhdGUpIHtcbiAgICBjb25zdCBsb2MgPSBhY2Nlc3NCb2R5UHJvcGVydHkocmVzLCBcInJlc291cmNlTG9jYXRpb25cIik7XG4gICAgaWYgKGxvYyAmJiB0eXBlb2YgbG9jID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHN0YXRlLmNvbmZpZy5yZXNvdXJjZUxvY2F0aW9uID0gbG9jO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUuY29uZmlnLnJlc291cmNlTG9jYXRpb247XG59XG5leHBvcnRzLmdldFJlc291cmNlTG9jYXRpb24gPSBnZXRSZXNvdXJjZUxvY2F0aW9uO1xuZnVuY3Rpb24gaXNPcGVyYXRpb25FcnJvcihlKSB7XG4gICAgcmV0dXJuIGUubmFtZSA9PT0gXCJSZXN0RXJyb3JcIjtcbn1cbmV4cG9ydHMuaXNPcGVyYXRpb25FcnJvciA9IGlzT3BlcmF0aW9uRXJyb3I7XG4vKiogUG9sbHMgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24uICovXG5hc3luYyBmdW5jdGlvbiBwb2xsSHR0cE9wZXJhdGlvbihpbnB1dHMpIHtcbiAgICBjb25zdCB7IGxybywgc3RhdGVQcm94eSwgb3B0aW9ucywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIHNldERlbGF5LCBzdGF0ZSwgc2V0RXJyb3JBc1Jlc3VsdCwgfSA9IGlucHV0cztcbiAgICByZXR1cm4gKDAsIG9wZXJhdGlvbl9qc18xLnBvbGxPcGVyYXRpb24pKHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgIHNldERlbGF5LFxuICAgICAgICBwcm9jZXNzUmVzdWx0OiBwcm9jZXNzUmVzdWx0XG4gICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBpbnB1dFN0YXRlKSA9PiBwcm9jZXNzUmVzdWx0KGZsYXRSZXNwb25zZSwgaW5wdXRTdGF0ZSlcbiAgICAgICAgICAgIDogKHsgZmxhdFJlc3BvbnNlIH0pID0+IGZsYXRSZXNwb25zZSxcbiAgICAgICAgZ2V0RXJyb3I6IGdldEVycm9yRnJvbVJlc3BvbnNlLFxuICAgICAgICB1cGRhdGVTdGF0ZSxcbiAgICAgICAgZ2V0UG9sbGluZ0ludGVydmFsOiBwYXJzZVJldHJ5QWZ0ZXIsXG4gICAgICAgIGdldE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXMsXG4gICAgICAgIGlzT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgIGdldFJlc291cmNlTG9jYXRpb24sXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZXhwYW5zaW9uIGhlcmUgaXMgaW50ZW50aW9uYWwgYmVjYXVzZSBgbHJvYCBjb3VsZCBiZSBhbiBvYmplY3QgdGhhdFxuICAgICAgICAgKiByZWZlcmVuY2VzIGFuIGlubmVyIHRoaXMsIHNvIHdlIG5lZWQgdG8gcHJlc2VydmUgYSByZWZlcmVuY2UgdG8gaXQuXG4gICAgICAgICAqL1xuICAgICAgICBwb2xsOiBhc3luYyAobG9jYXRpb24sIGlucHV0T3B0aW9ucykgPT4gbHJvLnNlbmRQb2xsUmVxdWVzdChsb2NhdGlvbiwgaW5wdXRPcHRpb25zKSxcbiAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdCxcbiAgICB9KTtcbn1cbmV4cG9ydHMucG9sbEh0dHBPcGVyYXRpb24gPSBwb2xsSHR0cE9wZXJhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJ1aWxkQ3JlYXRlUG9sbGVyID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb24uanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBjcmVhdGVTdGF0ZVByb3h5ID0gKCkgPT4gKHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RhdGUgYXQgdGhpcyBwb2ludCBpcyBjcmVhdGVkIHRvIGJlIG9mIHR5cGUgT3BlcmF0aW9uU3RhdGU8VFJlc3VsdD4uXG4gICAgICogSXQgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIHRvIGJlIG9mIHR5cGUgVFN0YXRlIHdoZW4gdGhlXG4gICAgICogY3VzdG9tZXItcHJvdmlkZWQgY2FsbGJhY2ssIGB1cGRhdGVTdGF0ZWAsIGlzIGNhbGxlZCBkdXJpbmcgcG9sbGluZy5cbiAgICAgKi9cbiAgICBpbml0U3RhdGU6IChjb25maWcpID0+ICh7IHN0YXR1czogXCJydW5uaW5nXCIsIGNvbmZpZyB9KSxcbiAgICBzZXRDYW5jZWxlZDogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJjYW5jZWxlZFwiKSxcbiAgICBzZXRFcnJvcjogKHN0YXRlLCBlcnJvcikgPT4gKHN0YXRlLmVycm9yID0gZXJyb3IpLFxuICAgIHNldFJlc3VsdDogKHN0YXRlLCByZXN1bHQpID0+IChzdGF0ZS5yZXN1bHQgPSByZXN1bHQpLFxuICAgIHNldFJ1bm5pbmc6IChzdGF0ZSkgPT4gKHN0YXRlLnN0YXR1cyA9IFwicnVubmluZ1wiKSxcbiAgICBzZXRTdWNjZWVkZWQ6IChzdGF0ZSkgPT4gKHN0YXRlLnN0YXR1cyA9IFwic3VjY2VlZGVkXCIpLFxuICAgIHNldEZhaWxlZDogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJmYWlsZWRcIiksXG4gICAgZ2V0RXJyb3I6IChzdGF0ZSkgPT4gc3RhdGUuZXJyb3IsXG4gICAgZ2V0UmVzdWx0OiAoc3RhdGUpID0+IHN0YXRlLnJlc3VsdCxcbiAgICBpc0NhbmNlbGVkOiAoc3RhdGUpID0+IHN0YXRlLnN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiLFxuICAgIGlzRmFpbGVkOiAoc3RhdGUpID0+IHN0YXRlLnN0YXR1cyA9PT0gXCJmYWlsZWRcIixcbiAgICBpc1J1bm5pbmc6IChzdGF0ZSkgPT4gc3RhdGUuc3RhdHVzID09PSBcInJ1bm5pbmdcIixcbiAgICBpc1N1Y2NlZWRlZDogKHN0YXRlKSA9PiBzdGF0ZS5zdGF0dXMgPT09IFwic3VjY2VlZGVkXCIsXG59KTtcbi8qKlxuICogUmV0dXJucyBhIHBvbGxlciBmYWN0b3J5LlxuICovXG5mdW5jdGlvbiBidWlsZENyZWF0ZVBvbGxlcihpbnB1dHMpIHtcbiAgICBjb25zdCB7IGdldE9wZXJhdGlvbkxvY2F0aW9uLCBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLCBnZXRTdGF0dXNGcm9tUG9sbFJlc3BvbnNlLCBpc09wZXJhdGlvbkVycm9yLCBnZXRSZXNvdXJjZUxvY2F0aW9uLCBnZXRQb2xsaW5nSW50ZXJ2YWwsIGdldEVycm9yLCByZXNvbHZlT25VbnN1Y2Nlc3NmdWwsIH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuIGFzeW5jICh7IGluaXQsIHBvbGwgfSwgb3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB7IHByb2Nlc3NSZXN1bHQsIHVwZGF0ZVN0YXRlLCB3aXRoT3BlcmF0aW9uTG9jYXRpb246IHdpdGhPcGVyYXRpb25Mb2NhdGlvbkNhbGxiYWNrLCBpbnRlcnZhbEluTXMgPSBjb25zdGFudHNfanNfMS5QT0xMX0lOVEVSVkFMX0lOX01TLCByZXN0b3JlRnJvbSwgfSA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHN0YXRlUHJveHkgPSBjcmVhdGVTdGF0ZVByb3h5KCk7XG4gICAgICAgIGNvbnN0IHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9IHdpdGhPcGVyYXRpb25Mb2NhdGlvbkNhbGxiYWNrXG4gICAgICAgICAgICA/ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiAob3BlcmF0aW9uTG9jYXRpb24sIGlzVXBkYXRlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVcGRhdGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2sob3BlcmF0aW9uTG9jYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghY2FsbGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2sob3BlcmF0aW9uTG9jYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSByZXN0b3JlRnJvbVxuICAgICAgICAgICAgPyAoMCwgb3BlcmF0aW9uX2pzXzEuZGVzZXJpYWxpemVTdGF0ZSkocmVzdG9yZUZyb20pXG4gICAgICAgICAgICA6IGF3YWl0ICgwLCBvcGVyYXRpb25fanNfMS5pbml0T3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgaW5pdCxcbiAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgIHByb2Nlc3NSZXN1bHQsXG4gICAgICAgICAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdHVzOiBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICAgICAgICBzZXRFcnJvckFzUmVzdWx0OiAhcmVzb2x2ZU9uVW5zdWNjZXNzZnVsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGxldCByZXN1bHRQcm9taXNlO1xuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBoYW5kbGVQcm9ncmVzc0V2ZW50cyA9IGFzeW5jICgpID0+IGhhbmRsZXJzLmZvckVhY2goKGgpID0+IGgoc3RhdGUpKTtcbiAgICAgICAgY29uc3QgY2FuY2VsRXJyTXNnID0gXCJPcGVyYXRpb24gd2FzIGNhbmNlbGVkXCI7XG4gICAgICAgIGxldCBjdXJyZW50UG9sbEludGVydmFsSW5NcyA9IGludGVydmFsSW5NcztcbiAgICAgICAgY29uc3QgcG9sbGVyID0ge1xuICAgICAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdGU6ICgpID0+IHN0YXRlLFxuICAgICAgICAgICAgZ2V0UmVzdWx0OiAoKSA9PiBzdGF0ZS5yZXN1bHQsXG4gICAgICAgICAgICBpc0RvbmU6ICgpID0+IFtcInN1Y2NlZWRlZFwiLCBcImZhaWxlZFwiLCBcImNhbmNlbGVkXCJdLmluY2x1ZGVzKHN0YXRlLnN0YXR1cyksXG4gICAgICAgICAgICBpc1N0b3BwZWQ6ICgpID0+IHJlc3VsdFByb21pc2UgPT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0b3BQb2xsaW5nOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgb25Qcm9ncmVzczogKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IFN5bWJvbCgpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGhhbmRsZXJzLmRlbGV0ZShzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwb2xsVW50aWxEb25lOiAocG9sbE9wdGlvbnMpID0+IChyZXN1bHRQcm9taXNlICE9PSBudWxsICYmIHJlc3VsdFByb21pc2UgIT09IHZvaWQgMCA/IHJlc3VsdFByb21pc2UgOiAocmVzdWx0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBhYm9ydFNpZ25hbDogaW5wdXRBYm9ydFNpZ25hbCB9ID0gcG9sbE9wdGlvbnMgfHwge307XG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGZ1dHVyZSB3ZSBjYW4gdXNlIEFib3J0U2lnbmFsLmFueSgpIGluc3RlYWRcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhYm9ydExpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dEFib3J0U2lnbmFsID09PSBudWxsIHx8IGlucHV0QWJvcnRTaWduYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0QWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRBYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBpbnB1dEFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dEFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydExpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcG9sbGVyLmlzRG9uZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwb2xsZXIucG9sbCh7IGFib3J0U2lnbmFsIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFwb2xsZXIuaXNEb25lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCAoMCwgY29yZV91dGlsXzEuZGVsYXkpKGN1cnJlbnRQb2xsSW50ZXJ2YWxJbk1zLCB7IGFib3J0U2lnbmFsIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBvbGxlci5wb2xsKHsgYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0QWJvcnRTaWduYWwgPT09IG51bGwgfHwgaW5wdXRBYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRBYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlT25VbnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvbGxlci5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvbGxlci5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihjYW5jZWxFcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0YXRlLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm5vdFN0YXJ0ZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2xsaW5nIGNvbXBsZXRlZCB3aXRob3V0IHN1Y2NlZWRpbmcgb3IgZmFpbGluZ2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSkpKSxcbiAgICAgICAgICAgIGFzeW5jIHBvbGwocG9sbE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZU9uVW5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb2xsZXIuaXNEb25lKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN1Y2NlZWRlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihjYW5jZWxFcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0YXRlLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBvcGVyYXRpb25fanNfMS5wb2xsT3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgICAgIHBvbGwsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgICAgICBnZXRPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXNPcGVyYXRpb25FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICBnZXRQb2xsaW5nSW50ZXJ2YWwsXG4gICAgICAgICAgICAgICAgICAgIGdldE9wZXJhdGlvblN0YXR1czogZ2V0U3RhdHVzRnJvbVBvbGxSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBwb2xsT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgc2V0RGVsYXk6IChwb2xsSW50ZXJ2YWxJbk1zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9sbEludGVydmFsSW5NcyA9IHBvbGxJbnRlcnZhbEluTXM7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQ6ICFyZXNvbHZlT25VbnN1Y2Nlc3NmdWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlUHJvZ3Jlc3NFdmVudHMoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNhbmNlbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbmNlbEVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcG9sbGVyO1xuICAgIH07XG59XG5leHBvcnRzLmJ1aWxkQ3JlYXRlUG9sbGVyID0gYnVpbGRDcmVhdGVQb2xsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb2xsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVIdHRwUG9sbGVyID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb24uanNcIik7XG5jb25zdCBwb2xsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9wb2xsZXIvcG9sbGVyLmpzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgcG9sbGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gcG9sbCBhIGxvbmctcnVubmluZyBvcGVyYXRpb24uXG4gKiBAcGFyYW0gbHJvIC0gRGVzY3JpcHRpb24gb2YgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIHBvbGxlclxuICogQHJldHVybnMgYW4gaW5pdGlhbGl6ZWQgcG9sbGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUh0dHBQb2xsZXIobHJvLCBvcHRpb25zKSB7XG4gICAgY29uc3QgeyByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBpbnRlcnZhbEluTXMsIHByb2Nlc3NSZXN1bHQsIHJlc3RvcmVGcm9tLCB1cGRhdGVTdGF0ZSwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLCByZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSBmYWxzZSwgfSA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuICgwLCBwb2xsZXJfanNfMS5idWlsZENyZWF0ZVBvbGxlcikoe1xuICAgICAgICBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlOiBvcGVyYXRpb25fanNfMS5nZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLFxuICAgICAgICBnZXRTdGF0dXNGcm9tUG9sbFJlc3BvbnNlOiBvcGVyYXRpb25fanNfMS5nZXRPcGVyYXRpb25TdGF0dXMsXG4gICAgICAgIGlzT3BlcmF0aW9uRXJyb3I6IG9wZXJhdGlvbl9qc18xLmlzT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgIGdldE9wZXJhdGlvbkxvY2F0aW9uOiBvcGVyYXRpb25fanNfMS5nZXRPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbjogb3BlcmF0aW9uX2pzXzEuZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgZ2V0UG9sbGluZ0ludGVydmFsOiBvcGVyYXRpb25fanNfMS5wYXJzZVJldHJ5QWZ0ZXIsXG4gICAgICAgIGdldEVycm9yOiBvcGVyYXRpb25fanNfMS5nZXRFcnJvckZyb21SZXNwb25zZSxcbiAgICAgICAgcmVzb2x2ZU9uVW5zdWNjZXNzZnVsLFxuICAgIH0pKHtcbiAgICAgICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBscm8uc2VuZEluaXRpYWxSZXF1ZXN0KCk7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSAoMCwgb3BlcmF0aW9uX2pzXzEuaW5mZXJMcm9Nb2RlKSh7XG4gICAgICAgICAgICAgICAgcmF3UmVzcG9uc2U6IHJlc3BvbnNlLnJhd1Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RQYXRoOiBscm8ucmVxdWVzdFBhdGgsXG4gICAgICAgICAgICAgICAgcmVxdWVzdE1ldGhvZDogbHJvLnJlcXVlc3RNZXRob2QsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oeyByZXNwb25zZSwgb3BlcmF0aW9uTG9jYXRpb246IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5vcGVyYXRpb25Mb2NhdGlvbiwgcmVzb3VyY2VMb2NhdGlvbjogY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLnJlc291cmNlTG9jYXRpb24gfSwgKChjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcubW9kZSkgPyB7IG1ldGFkYXRhOiB7IG1vZGU6IGNvbmZpZy5tb2RlIH0gfSA6IHt9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvbGw6IGxyby5zZW5kUG9sbFJlcXVlc3QsXG4gICAgfSwge1xuICAgICAgICBpbnRlcnZhbEluTXMsXG4gICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgcmVzdG9yZUZyb20sXG4gICAgICAgIHVwZGF0ZVN0YXRlLFxuICAgICAgICBwcm9jZXNzUmVzdWx0OiBwcm9jZXNzUmVzdWx0XG4gICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBzdGF0ZSkgPT4gcHJvY2Vzc1Jlc3VsdChmbGF0UmVzcG9uc2UsIHN0YXRlKVxuICAgICAgICAgICAgOiAoeyBmbGF0UmVzcG9uc2UgfSkgPT4gZmxhdFJlc3BvbnNlLFxuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGVIdHRwUG9sbGVyID0gY3JlYXRlSHR0cFBvbGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdlbmVyaWNQb2xsT3BlcmF0aW9uID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uX2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vaHR0cC9vcGVyYXRpb24uanNcIik7XG5jb25zdCBsb2dnZXJfanNfMSA9IHJlcXVpcmUoXCIuLi8uLi9sb2dnZXIuanNcIik7XG5jb25zdCBjcmVhdGVTdGF0ZVByb3h5ID0gKCkgPT4gKHtcbiAgICBpbml0U3RhdGU6IChjb25maWcpID0+ICh7IGNvbmZpZywgaXNTdGFydGVkOiB0cnVlIH0pLFxuICAgIHNldENhbmNlbGVkOiAoc3RhdGUpID0+IChzdGF0ZS5pc0NhbmNlbGxlZCA9IHRydWUpLFxuICAgIHNldEVycm9yOiAoc3RhdGUsIGVycm9yKSA9PiAoc3RhdGUuZXJyb3IgPSBlcnJvciksXG4gICAgc2V0UmVzdWx0OiAoc3RhdGUsIHJlc3VsdCkgPT4gKHN0YXRlLnJlc3VsdCA9IHJlc3VsdCksXG4gICAgc2V0UnVubmluZzogKHN0YXRlKSA9PiAoc3RhdGUuaXNTdGFydGVkID0gdHJ1ZSksXG4gICAgc2V0U3VjY2VlZGVkOiAoc3RhdGUpID0+IChzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWUpLFxuICAgIHNldEZhaWxlZDogKCkgPT4ge1xuICAgICAgICAvKiogZW1wdHkgYm9keSAqL1xuICAgIH0sXG4gICAgZ2V0RXJyb3I6IChzdGF0ZSkgPT4gc3RhdGUuZXJyb3IsXG4gICAgZ2V0UmVzdWx0OiAoc3RhdGUpID0+IHN0YXRlLnJlc3VsdCxcbiAgICBpc0NhbmNlbGVkOiAoc3RhdGUpID0+ICEhc3RhdGUuaXNDYW5jZWxsZWQsXG4gICAgaXNGYWlsZWQ6IChzdGF0ZSkgPT4gISFzdGF0ZS5lcnJvcixcbiAgICBpc1J1bm5pbmc6IChzdGF0ZSkgPT4gISFzdGF0ZS5pc1N0YXJ0ZWQsXG4gICAgaXNTdWNjZWVkZWQ6IChzdGF0ZSkgPT4gQm9vbGVhbihzdGF0ZS5pc0NvbXBsZXRlZCAmJiAhc3RhdGUuaXNDYW5jZWxsZWQgJiYgIXN0YXRlLmVycm9yKSxcbn0pO1xuY2xhc3MgR2VuZXJpY1BvbGxPcGVyYXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHN0YXRlLCBscm8sIHNldEVycm9yQXNSZXN1bHQsIGxyb1Jlc291cmNlTG9jYXRpb25Db25maWcsIHByb2Nlc3NSZXN1bHQsIHVwZGF0ZVN0YXRlLCBpc0RvbmUpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmxybyA9IGxybztcbiAgICAgICAgdGhpcy5zZXRFcnJvckFzUmVzdWx0ID0gc2V0RXJyb3JBc1Jlc3VsdDtcbiAgICAgICAgdGhpcy5scm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnID0gbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZztcbiAgICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0ID0gcHJvY2Vzc1Jlc3VsdDtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlO1xuICAgICAgICB0aGlzLmlzRG9uZSA9IGlzRG9uZTtcbiAgICB9XG4gICAgc2V0UG9sbGVyQ29uZmlnKHBvbGxlckNvbmZpZykge1xuICAgICAgICB0aGlzLnBvbGxlckNvbmZpZyA9IHBvbGxlckNvbmZpZztcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBzdGF0ZVByb3h5ID0gY3JlYXRlU3RhdGVQcm94eSgpO1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaXNTdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0YXRlKSwgKGF3YWl0ICgwLCBvcGVyYXRpb25fanNfMS5pbml0SHR0cE9wZXJhdGlvbikoe1xuICAgICAgICAgICAgICAgIGxybzogdGhpcy5scm8sXG4gICAgICAgICAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uQ29uZmlnOiB0aGlzLmxyb1Jlc291cmNlTG9jYXRpb25Db25maWcsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdDogdGhpcy5wcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQ6IHRoaXMuc2V0RXJyb3JBc1Jlc3VsdCxcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSB0aGlzLnVwZGF0ZVN0YXRlO1xuICAgICAgICBjb25zdCBpc0RvbmUgPSB0aGlzLmlzRG9uZTtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmlzQ29tcGxldGVkICYmIHRoaXMuc3RhdGUuZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLnBvbGxIdHRwT3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgbHJvOiB0aGlzLmxybyxcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgIHByb2Nlc3NSZXN1bHQ6IHRoaXMucHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZTogdXBkYXRlU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgPyAoc3RhdGUsIHsgcmF3UmVzcG9uc2UgfSkgPT4gdXBkYXRlU3RhdGUoc3RhdGUsIHJhd1Jlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBpc0RvbmU6IGlzRG9uZVxuICAgICAgICAgICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBzdGF0ZSkgPT4gaXNEb25lKGZsYXRSZXNwb25zZSwgc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2V0RGVsYXk6IChpbnRlcnZhbEluTXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb2xsZXJDb25maWcuaW50ZXJ2YWxJbk1zID0gaW50ZXJ2YWxJbk1zO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdDogdGhpcy5zZXRFcnJvckFzUmVzdWx0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcmVQcm9ncmVzcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgdGhpcy5zdGF0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci5lcnJvcihcImBjYW5jZWxPcGVyYXRpb25gIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBpdCB3YXNuJ3QgaW1wbGVtZW50ZWRcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIHRoZSBQb2xsZXIgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuR2VuZXJpY1BvbGxPcGVyYXRpb24gPSBHZW5lcmljUG9sbE9wZXJhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBvbGxlciA9IGV4cG9ydHMuUG9sbGVyQ2FuY2VsbGVkRXJyb3IgPSBleHBvcnRzLlBvbGxlclN0b3BwZWRFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogV2hlbiBhIHBvbGxlciBpcyBtYW51YWxseSBzdG9wcGVkIHRocm91Z2ggdGhlIGBzdG9wUG9sbGluZ2AgbWV0aG9kLFxuICogdGhlIHBvbGxlciB3aWxsIGJlIHJlamVjdGVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgdGhlIFBvbGxlclN0b3BwZWRFcnJvci5cbiAqL1xuY2xhc3MgUG9sbGVyU3RvcHBlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUG9sbGVyU3RvcHBlZEVycm9yXCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBQb2xsZXJTdG9wcGVkRXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlBvbGxlclN0b3BwZWRFcnJvciA9IFBvbGxlclN0b3BwZWRFcnJvcjtcbi8qKlxuICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNhbmNlbGxlZCwgdGhlIHBvbGxlciB3aWxsIGJlIHJlamVjdGVkIHdpdGggYW4gaW5zdGFuY2VcbiAqIG9mIHRoZSBQb2xsZXJDYW5jZWxsZWRFcnJvci5cbiAqL1xuY2xhc3MgUG9sbGVyQ2FuY2VsbGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJQb2xsZXJDYW5jZWxsZWRFcnJvclwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUG9sbGVyQ2FuY2VsbGVkRXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlBvbGxlckNhbmNlbGxlZEVycm9yID0gUG9sbGVyQ2FuY2VsbGVkRXJyb3I7XG4vKipcbiAqIEEgY2xhc3MgdGhhdCByZXByZXNlbnRzIHRoZSBkZWZpbml0aW9uIG9mIGEgcHJvZ3JhbSB0aGF0IHBvbGxzIHRocm91Z2ggY29uc2VjdXRpdmUgcmVxdWVzdHNcbiAqIHVudGlsIGl0IHJlYWNoZXMgYSBzdGF0ZSBvZiBjb21wbGV0aW9uLlxuICpcbiAqIEEgcG9sbGVyIGNhbiBiZSBleGVjdXRlZCBtYW51YWxseSwgYnkgcG9sbGluZyByZXF1ZXN0IGJ5IHJlcXVlc3QgYnkgY2FsbGluZyB0byB0aGUgYHBvbGwoKWAgbWV0aG9kIHJlcGVhdGVkbHksIHVudGlsIGl0cyBvcGVyYXRpb24gaXMgY29tcGxldGVkLlxuICogSXQgYWxzbyBwcm92aWRlcyBhIHdheSB0byB3YWl0IHVudGlsIHRoZSBvcGVyYXRpb24gY29tcGxldGVzLCBieSBjYWxsaW5nIGBwb2xsVW50aWxEb25lKClgIGFuZCB3YWl0aW5nIHVudGlsIHRoZSBvcGVyYXRpb24gZmluaXNoZXMuXG4gKiBQb2xsZXJzIGNhbiBhbHNvIHJlcXVlc3QgdGhlIGNhbmNlbGxhdGlvbiBvZiB0aGUgb25nb2luZyBwcm9jZXNzIHRvIHdob20gaXMgcHJvdmlkaW5nIHRoZSB1bmRlcmx5aW5nIGxvbmcgcnVubmluZyBvcGVyYXRpb24uXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHBvbGxlciA9IG5ldyBNeVBvbGxlcigpO1xuICpcbiAqIC8vIFBvbGxpbmcganVzdCBvbmNlOlxuICogYXdhaXQgcG9sbGVyLnBvbGwoKTtcbiAqXG4gKiAvLyBXZSBjYW4gdHJ5IHRvIGNhbmNlbCB0aGUgcmVxdWVzdCBoZXJlLCBieSBjYWxsaW5nOlxuICogLy9cbiAqIC8vICAgICBhd2FpdCBwb2xsZXIuY2FuY2VsT3BlcmF0aW9uKCk7XG4gKiAvL1xuICpcbiAqIC8vIEdldHRpbmcgdGhlIGZpbmFsIHJlc3VsdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgUG9sbGVyIGlzIGRlZmluZWQgYnkgdHdvIHR5cGVzLCBhIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgcG9sbGVyLCB3aGljaFxuICogbXVzdCBpbmNsdWRlIGEgYmFzaWMgc2V0IG9mIHByb3BlcnRpZXMgZnJvbSBgUG9sbE9wZXJhdGlvblN0YXRlPFRSZXN1bHQ+YCxcbiAqIGFuZCBhIHJldHVybiB0eXBlIGRlZmluZWQgYnkgYFRSZXN1bHRgLCB3aGljaCBjYW4gYmUgYW55dGhpbmcuXG4gKlxuICogVGhlIFBvbGxlciBjbGFzcyBpbXBsZW1lbnRzIHRoZSBgUG9sbGVyTGlrZWAgaW50ZXJmYWNlLCB3aGljaCBhbGxvd3MgcG9sbGVyIGltcGxlbWVudGF0aW9ucyB0byBhdm9pZCBoYXZpbmdcbiAqIHRvIGV4cG9ydCB0aGUgUG9sbGVyJ3MgY2xhc3MgZGlyZWN0bHksIGFuZCBpbnN0ZWFkIG9ubHkgZXhwb3J0IHRoZSBhbHJlYWR5IGluc3RhbnRpYXRlZCBwb2xsZXIgd2l0aCB0aGUgUG9sbGVyTGlrZSB0eXBlLlxuICpcbiAqIGBgYHRzXG4gKiBjbGFzcyBDbGllbnQge1xuICogICBwdWJsaWMgYXN5bmMgbWFrZVBvbGxlcjogUG9sbGVyTGlrZTxNeU9wZXJhdGlvblN0YXRlLCBNeVJlc3VsdD4ge1xuICogICAgIGNvbnN0IHBvbGxlciA9IG5ldyBNeVBvbGxlcih7fSk7XG4gKiAgICAgLy8gSXQgbWlnaHQgYmUgcHJlZmVycmVkIHRvIHJldHVybiB0aGUgcG9sbGVyIGFmdGVyIHRoZSBmaXJzdCByZXF1ZXN0IGlzIG1hZGUsXG4gKiAgICAgLy8gc28gdGhhdCBzb21lIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCByaWdodCBhd2F5LlxuICogICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG4gKiAgICAgcmV0dXJuIHBvbGxlcjtcbiAqICAgfVxuICogfVxuICpcbiAqIGNvbnN0IHBvbGxlcjogUG9sbGVyTGlrZTxNeU9wZXJhdGlvblN0YXRlLCBNeVJlc3VsdD4gPSBteUNsaWVudC5tYWtlUG9sbGVyKCk7XG4gKiBgYGBcbiAqXG4gKiBBIHBvbGxlciBjYW4gYmUgY3JlYXRlZCB0aHJvdWdoIGl0cyBjb25zdHJ1Y3RvciwgdGhlbiBpdCBjYW4gYmUgcG9sbGVkIHVudGlsIGl0J3MgY29tcGxldGVkLlxuICogQXQgYW55IHBvaW50IGluIHRpbWUsIHRoZSBzdGF0ZSBvZiB0aGUgcG9sbGVyIGNhbiBiZSBvYnRhaW5lZCB3aXRob3V0IGRlbGF5IHRocm91Z2ggdGhlIGdldE9wZXJhdGlvblN0YXRlIG1ldGhvZC5cbiAqIEF0IGFueSBwb2ludCBpbiB0aW1lLCB0aGUgaW50ZXJtZWRpYXRlIGZvcm1zIG9mIHRoZSByZXN1bHQgdHlwZSBjYW4gYmUgcmVxdWVzdGVkIHdpdGhvdXQgZGVsYXkuXG4gKiBPbmNlIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBpcyBtYXJrZWQgYXMgY29tcGxldGVkLCB0aGUgcG9sbGVyIHdpbGwgc3RvcCBhbmQgdGhlIGZpbmFsIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHBvbGxlciA9IG15Q2xpZW50Lm1ha2VQb2xsZXIoKTtcbiAqIGNvbnN0IHN0YXRlOiBNeU9wZXJhdGlvblN0YXRlID0gcG9sbGVyLmdldE9wZXJhdGlvblN0YXRlKCk7XG4gKlxuICogLy8gVGhlIGludGVybWVkaWF0ZSByZXN1bHQgY2FuIGJlIG9idGFpbmVkIGF0IGFueSB0aW1lLlxuICogY29uc3QgcmVzdWx0OiBNeVJlc3VsdCB8IHVuZGVmaW5lZCA9IHBvbGxlci5nZXRSZXN1bHQoKTtcbiAqXG4gKiAvLyBUaGUgZmluYWwgcmVzdWx0IGNhbiBvbmx5IGJlIG9idGFpbmVkIGFmdGVyIHRoZSBwb2xsZXIgZmluaXNoZXMuXG4gKiBjb25zdCByZXN1bHQ6IE15UmVzdWx0ID0gYXdhaXQgcG9sbGVyLnBvbGxVbnRpbERvbmUoKTtcbiAqIGBgYFxuICpcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG5jbGFzcyBQb2xsZXIge1xuICAgIC8qKlxuICAgICAqIEEgcG9sbGVyIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGJ5IHBhc3NpbmcgaW4gYXQgbGVhc3QgdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgdGhlIGBQb2xsT3BlcmF0aW9uPFRTdGF0ZSwgVFJlc3VsdD5gLlxuICAgICAqXG4gICAgICogV2hlbiB3cml0aW5nIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgUG9sbGVyLCB0aGlzIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb25cbiAgICAgKiBvZiBhbnkgY3VzdG9tIHN0YXRlIGJleW9uZCB0aGUgYmFzaWMgZGVmaW5pdGlvbiBvZiB0aGUgcG9sbGVyLiBUaGUgYmFzaWMgcG9sbGVyIGFzc3VtZXMgdGhhdCB0aGUgcG9sbGVyJ3NcbiAgICAgKiBvcGVyYXRpb24gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLCBhdCBsZWFzdCBpdHMgYmFzaWMgcHJvcGVydGllcy4gVGhlIGNvZGUgYmVsb3cgc2hvd3MgaG93IHRvIGFwcHJvYWNoXG4gICAgICogdGhlIGRlZmluaXRpb24gb2YgdGhlIGNvbnN0cnVjdG9yIG9mIGEgbmV3IGN1c3RvbSBwb2xsZXIuXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGV4cG9ydCBjbGFzcyBNeVBvbGxlciBleHRlbmRzIFBvbGxlcjxNeU9wZXJhdGlvblN0YXRlLCBzdHJpbmc+IHtcbiAgICAgKiAgIGNvbnN0cnVjdG9yKHtcbiAgICAgKiAgICAgLy8gQW55dGhpbmcgeW91IG1pZ2h0IG5lZWQgb3V0c2lkZSBvZiB0aGUgYmFzaWNzXG4gICAgICogICB9KSB7XG4gICAgICogICAgIGxldCBzdGF0ZTogTXlPcGVyYXRpb25TdGF0ZSA9IHtcbiAgICAgKiAgICAgICBwcml2YXRlUHJvcGVydHk6IHByaXZhdGUsXG4gICAgICogICAgICAgcHVibGljUHJvcGVydHk6IHB1YmxpYyxcbiAgICAgKiAgICAgfTtcbiAgICAgKlxuICAgICAqICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICogICAgICAgc3RhdGUsXG4gICAgICogICAgICAgdXBkYXRlLFxuICAgICAqICAgICAgIGNhbmNlbCxcbiAgICAgKiAgICAgICB0b1N0cmluZ1xuICAgICAqICAgICB9XG4gICAgICpcbiAgICAgKiAgICAgLy8gU2VuZGluZyB0aGUgb3BlcmF0aW9uIHRvIHRoZSBwYXJlbnQncyBjb25zdHJ1Y3Rvci5cbiAgICAgKiAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgKlxuICAgICAqICAgICAvLyBZb3UgY2FuIGFzc2lnbiBtb3JlIGxvY2FsIHByb3BlcnRpZXMgaGVyZS5cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJbnNpZGUgb2YgdGhpcyBjb25zdHJ1Y3RvciwgYSBuZXcgcHJvbWlzZSBpcyBjcmVhdGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB0b1xuICAgICAqIHRlbGwgdGhlIHVzZXIgd2hlbiB0aGUgcG9sbGVyIGZpbmlzaGVzIChzZWUgYHBvbGxVbnRpbERvbmUoKWApLiBUaGUgcHJvbWlzZSdzXG4gICAgICogcmVzb2x2ZSBhbmQgcmVqZWN0IG1ldGhvZHMgYXJlIGFsc28gdXNlZCBpbnRlcm5hbGx5IHRvIGNvbnRyb2wgd2hlbiB0byByZXNvbHZlXG4gICAgICogb3IgcmVqZWN0IGFueW9uZSB3YWl0aW5nIGZvciB0aGUgcG9sbGVyIHRvIGZpbmlzaC5cbiAgICAgKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBvZiBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiBhIHBvbGxlciBpcyB3aGVyZSBhbnkgc2VyaWFsaXplZCB2ZXJzaW9uIG9mXG4gICAgICogYSBwcmV2aW91cyBwb2xsZXIncyBvcGVyYXRpb24gc2hvdWxkIGJlIGRlc2VyaWFsaXplZCBpbnRvIHRoZSBvcGVyYXRpb24gc2VudCB0byB0aGVcbiAgICAgKiBiYXNlIGNvbnN0cnVjdG9yLiBGb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZXhwb3J0IGNsYXNzIE15UG9sbGVyIGV4dGVuZHMgUG9sbGVyPE15T3BlcmF0aW9uU3RhdGUsIHN0cmluZz4ge1xuICAgICAqICAgY29uc3RydWN0b3IoXG4gICAgICogICAgIGJhc2VPcGVyYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICAqICAgKSB7XG4gICAgICogICAgIGxldCBzdGF0ZTogTXlPcGVyYXRpb25TdGF0ZSA9IHt9O1xuICAgICAqICAgICBpZiAoYmFzZU9wZXJhdGlvbikge1xuICAgICAqICAgICAgIHN0YXRlID0ge1xuICAgICAqICAgICAgICAgLi4uSlNPTi5wYXJzZShiYXNlT3BlcmF0aW9uKS5zdGF0ZSxcbiAgICAgKiAgICAgICAgIC4uLnN0YXRlXG4gICAgICogICAgICAgfTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICogICAgICAgc3RhdGUsXG4gICAgICogICAgICAgLy8gLi4uXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gTXVzdCBjb250YWluIHRoZSBiYXNpYyBwcm9wZXJ0aWVzIG9mIGBQb2xsT3BlcmF0aW9uPFN0YXRlLCBUUmVzdWx0PmAuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3BlcmF0aW9uKSB7XG4gICAgICAgIC8qKiBjb250cm9scyB3aGV0aGVyIHRvIHRocm93IGFuIGVycm9yIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkIG9yIHdhcyBjYW5jZWxlZC4gKi9cbiAgICAgICAgdGhpcy5yZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MgPSBbXTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIFVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25XYXJuaW5nIGluIG5vZGUuanMgZnJvbSBiZWluZyB0aHJvd24uXG4gICAgICAgIC8vIFRoZSBhYm92ZSB3YXJuaW5nIHdvdWxkIGdldCB0aHJvd24gaWYgYHBvbGxlci5wb2xsYCBpcyBjYWxsZWQsIGl0IHJldHVybnMgYW4gZXJyb3IsXG4gICAgICAgIC8vIGFuZCBwdWxsVW50aWxEb25lIGRpZCBub3QgaGF2ZSBhIC5jYXRjaCBvciBhd2FpdCB0cnkvY2F0Y2ggb24gaXQncyByZXR1cm4gdmFsdWUuXG4gICAgICAgIHRoaXMucHJvbWlzZS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAvKiBpbnRlbnRpb25hbGx5IGJsYW5rICovXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydHMgYSBsb29wIHRoYXQgd2lsbCBicmVhayBvbmx5IGlmIHRoZSBwb2xsZXIgaXMgZG9uZVxuICAgICAqIG9yIGlmIHRoZSBwb2xsZXIgaXMgc3RvcHBlZC5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFydFBvbGxpbmcocG9sbE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodGhpcy5zdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoIXRoaXMuaXNTdG9wcGVkKCkgJiYgIXRoaXMuaXNEb25lKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucG9sbChwb2xsT3B0aW9ucyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogcG9sbE9uY2UgZG9lcyBvbmUgcG9sbGluZywgYnkgY2FsbGluZyB0byB0aGUgdXBkYXRlIG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZ1xuICAgICAqIHBvbGwgb3BlcmF0aW9uIHRvIG1ha2UgYW55IHJlbGV2YW50IGNoYW5nZSBlZmZlY3RpdmUuXG4gICAgICpcbiAgICAgKiBJdCBvbmx5IG9wdGlvbmFsbHkgcmVjZWl2ZXMgYW4gb2JqZWN0IHdpdGggYW4gYWJvcnRTaWduYWwgcHJvcGVydHksIGZyb20gXFxAYXp1cmUvYWJvcnQtY29udHJvbGxlcidzIEFib3J0U2lnbmFsTGlrZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcHJvcGVydGllcyBwYXNzZWQgdG8gdGhlIG9wZXJhdGlvbidzIHVwZGF0ZSBtZXRob2QuXG4gICAgICovXG4gICAgYXN5bmMgcG9sbE9uY2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0RvbmUoKSkge1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBhd2FpdCB0aGlzLm9wZXJhdGlvbi51cGRhdGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGZpcmVQcm9ncmVzczogdGhpcy5maXJlUHJvZ3Jlc3MuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1VwZGF0ZWRTdGF0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaXJlUHJvZ3Jlc3MgY2FsbHMgdGhlIGZ1bmN0aW9ucyBwYXNzZWQgaW4gdmlhIG9uUHJvZ3Jlc3MgdGhlIG1ldGhvZCBvZiB0aGUgcG9sbGVyLlxuICAgICAqXG4gICAgICogSXQgbG9vcHMgb3ZlciBhbGwgb2YgdGhlIGNhbGxiYWNrcyByZWNlaXZlZCBmcm9tIG9uUHJvZ3Jlc3MsIGFuZCBleGVjdXRlcyB0aGVtLCBzZW5kaW5nIHRoZW1cbiAgICAgKiB0aGUgY3VycmVudCBvcGVyYXRpb24gc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUgY3VycmVudCBvcGVyYXRpb24gc3RhdGUuXG4gICAgICovXG4gICAgZmlyZVByb2dyZXNzKHN0YXRlKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbidzIGNhbmNlbCBtZXRob2QuXG4gICAgICovXG4gICAgYXN5bmMgY2FuY2VsT25jZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBhd2FpdCB0aGlzLm9wZXJhdGlvbi5jYW5jZWwob3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgYSBzaW5nbGUgcG9sbGluZyByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAqIEl0IGRvZXMgdGhpcyBieSBjYWxsaW5nIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBQb2xsZXIncyBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBJdCBvbmx5IG9wdGlvbmFsbHkgcmVjZWl2ZXMgYW4gb2JqZWN0IHdpdGggYW4gYWJvcnRTaWduYWwgcHJvcGVydHksIGZyb20gXFxAYXp1cmUvYWJvcnQtY29udHJvbGxlcidzIEFib3J0U2lnbmFsTGlrZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcHJvcGVydGllcyBwYXNzZWQgdG8gdGhlIG9wZXJhdGlvbidzIHVwZGF0ZSBtZXRob2QuXG4gICAgICovXG4gICAgcG9sbChvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvbGxPbmNlUHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5wb2xsT25jZVByb21pc2UgPSB0aGlzLnBvbGxPbmNlKG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgY2xlYXJQb2xsT25jZVByb21pc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb2xsT25jZVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5wb2xsT25jZVByb21pc2UudGhlbihjbGVhclBvbGxPbmNlUHJvbWlzZSwgY2xlYXJQb2xsT25jZVByb21pc2UpLmNhdGNoKHRoaXMucmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wb2xsT25jZVByb21pc2U7XG4gICAgfVxuICAgIHByb2Nlc3NVcGRhdGVkU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbi5zdGF0ZS5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZXNvbHZlT25VbnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdCh0aGlzLm9wZXJhdGlvbi5zdGF0ZS5lcnJvcik7XG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5vcGVyYXRpb24uc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uLnN0YXRlLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFBvbGxlckNhbmNlbGxlZEVycm9yKFwiT3BlcmF0aW9uIHdhcyBjYW5jZWxlZFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNEb25lKCkgJiYgdGhpcy5yZXNvbHZlKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgcG9sbGVyIGhhcyBmaW5pc2hlZCBwb2xsaW5nLCB0aGlzIG1lYW5zIHdlIG5vdyBoYXZlIGEgcmVzdWx0LlxuICAgICAgICAgICAgLy8gSG93ZXZlciwgaXQgY2FuIGJlIHRoZSBjYXNlIHRoYXQgVFJlc3VsdCBpcyBpbnN0YW50aWF0ZWQgdG8gdm9pZCwgc29cbiAgICAgICAgICAgIC8vIHdlIGFyZSBub3QgZXhwZWN0aW5nIGEgcmVzdWx0IGFueXdheS4gVG8gYXNzZXJ0IHRoYXQgd2UgbWlnaHQgbm90XG4gICAgICAgICAgICAvLyBoYXZlIGEgcmVzdWx0IGV2ZW50dWFsbHkgYWZ0ZXIgZmluaXNoaW5nIHBvbGxpbmcsIHdlIGNhc3QgdGhlIHJlc3VsdFxuICAgICAgICAgICAgLy8gdG8gVFJlc3VsdC5cbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmdldFJlc3VsdCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcG9sbFVudGlsRG9uZShwb2xsT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQb2xsaW5nKHBvbGxPcHRpb25zKS5jYXRjaCh0aGlzLnJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgc3RhdGUgY291bGQgaGF2ZSBiZWVuIHVwZGF0ZWQgYnlcbiAgICAgICAgLy8gYGNhbmNlbE9wZXJhdGlvbmAsIGUuZy4gdGhlIG9wZXJhdGlvbiBpcyBjYW5jZWxlZCBvciBhbiBlcnJvciBvY2N1cnJlZC5cbiAgICAgICAgdGhpcy5wcm9jZXNzVXBkYXRlZFN0YXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGFmdGVyIGVhY2ggcG9sbGluZyBpcyBjb21wbGV0ZWQsXG4gICAgICogc2VuZGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcG9sbGVyJ3Mgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogSXQgcmV0dXJucyBhIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0b3AgcmVjZWl2aW5nIHVwZGF0ZXMgb24gdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG9uUHJvZ3Jlc3MoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcyA9IHRoaXMucG9sbFByb2dyZXNzQ2FsbGJhY2tzLmZpbHRlcigoYykgPT4gYyAhPT0gY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvbGxlciBoYXMgZmluaXNoZWQgcG9sbGluZy5cbiAgICAgKi9cbiAgICBpc0RvbmUoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5vcGVyYXRpb24uc3RhdGU7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHN0YXRlLmlzQ29tcGxldGVkIHx8IHN0YXRlLmlzQ2FuY2VsbGVkIHx8IHN0YXRlLmVycm9yKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RvcHMgdGhlIHBvbGxlciBmcm9tIGNvbnRpbnVpbmcgdG8gcG9sbC5cbiAgICAgKi9cbiAgICBzdG9wUG9sbGluZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdChuZXcgUG9sbGVyU3RvcHBlZEVycm9yKFwiVGhpcyBwb2xsZXIgaXMgYWxyZWFkeSBzdG9wcGVkXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvbGxlciBpcyBzdG9wcGVkLlxuICAgICAqL1xuICAgIGlzU3RvcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcHBlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gY2FuY2VsIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEl0IG9ubHkgb3B0aW9uYWxseSByZWNlaXZlcyBhbiBvYmplY3Qgd2l0aCBhbiBhYm9ydFNpZ25hbCBwcm9wZXJ0eSwgZnJvbSBcXEBhenVyZS9hYm9ydC1jb250cm9sbGVyJ3MgQWJvcnRTaWduYWxMaWtlLlxuICAgICAqXG4gICAgICogSWYgaXQncyBjYWxsZWQgYWdhaW4gYmVmb3JlIGl0IGZpbmlzaGVzLCBpdCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW9uJ3MgdXBkYXRlIG1ldGhvZC5cbiAgICAgKi9cbiAgICBjYW5jZWxPcGVyYXRpb24ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFByb21pc2UgPSB0aGlzLmNhbmNlbE9uY2Uob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5hYm9ydFNpZ25hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjYW5jZWwgcmVxdWVzdCBpcyBjdXJyZW50bHkgcGVuZGluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jYW5jZWxQcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogRXZlbiB0aG91Z2ggVFN0YXRlIHdpbGwgYmUgdGhlIHNhbWUgdHlwZSBpbnNpZGUgYW55IG9mIHRoZSBtZXRob2RzIG9mIGFueSBleHRlbnNpb24gb2YgdGhlIFBvbGxlciBjbGFzcyxcbiAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIHBvbGxlcnMgY2FuIGN1c3RvbWl6ZSB3aGF0J3Mgc2hhcmVkIHdpdGggdGhlIHB1YmxpYyBieSB3cml0aW5nIHRoZWlyIG93blxuICAgICAqIHZlcnNpb24gb2YgdGhlIGBnZXRPcGVyYXRpb25TdGF0ZWAgbWV0aG9kLCBhbmQgYnkgZGVmaW5pbmcgdHdvIHR5cGVzLCBvbmUgcmVwcmVzZW50aW5nIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcG9sbGVyXG4gICAgICogYW5kIGEgcHVibGljIHR5cGUgcmVwcmVzZW50aW5nIGEgc2FmZSB0byBzaGFyZSBzdWJzZXQgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGludGVybmFsIHN0YXRlLlxuICAgICAqIFRoZWlyIGRlZmluaXRpb24gb2YgZ2V0T3BlcmF0aW9uU3RhdGUgY2FuIHRoZW4gcmV0dXJuIHRoZWlyIHB1YmxpYyB0eXBlLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogLy8gTGV0J3Mgc2F5IHdlIGhhdmUgb3VyIHBvbGxlcidzIG9wZXJhdGlvbiBzdGF0ZSBkZWZpbmVkIGFzOlxuICAgICAqIGludGVyZmFjZSBNeU9wZXJhdGlvblN0YXRlIGV4dGVuZHMgUG9sbE9wZXJhdGlvblN0YXRlPFJlc3VsdFR5cGU+IHtcbiAgICAgKiAgIHByaXZhdGVQcm9wZXJ0eT86IHN0cmluZztcbiAgICAgKiAgIHB1YmxpY1Byb3BlcnR5Pzogc3RyaW5nO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFRvIGFsbG93IHVzIHRvIGhhdmUgYSB0cnVlIHNlcGFyYXRpb24gb2YgcHVibGljIGFuZCBwcml2YXRlIHN0YXRlLCB3ZSBoYXZlIHRvIGRlZmluZSBhbm90aGVyIGludGVyZmFjZTpcbiAgICAgKiBpbnRlcmZhY2UgUHVibGljU3RhdGUgZXh0ZW5kcyBQb2xsT3BlcmF0aW9uU3RhdGU8UmVzdWx0VHlwZT4ge1xuICAgICAqICAgcHVibGljUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVGhlbiwgd2UgZGVmaW5lIG91ciBQb2xsZXIgYXMgZm9sbG93czpcbiAgICAgKiBleHBvcnQgY2xhc3MgTXlQb2xsZXIgZXh0ZW5kcyBQb2xsZXI8TXlPcGVyYXRpb25TdGF0ZSwgUmVzdWx0VHlwZT4ge1xuICAgICAqICAgLy8gLi4uIE1vcmUgY29udGVudCBpcyBuZWVkZWQgaGVyZSAuLi5cbiAgICAgKlxuICAgICAqICAgcHVibGljIGdldE9wZXJhdGlvblN0YXRlKCk6IFB1YmxpY1N0YXRlIHtcbiAgICAgKiAgICAgY29uc3Qgc3RhdGU6IFB1YmxpY1N0YXRlID0gdGhpcy5vcGVyYXRpb24uc3RhdGU7XG4gICAgICogICAgIHJldHVybiB7XG4gICAgICogICAgICAgLy8gUHJvcGVydGllcyBmcm9tIFBvbGxPcGVyYXRpb25TdGF0ZTxUUmVzdWx0PlxuICAgICAqICAgICAgIGlzU3RhcnRlZDogc3RhdGUuaXNTdGFydGVkLFxuICAgICAqICAgICAgIGlzQ29tcGxldGVkOiBzdGF0ZS5pc0NvbXBsZXRlZCxcbiAgICAgKiAgICAgICBpc0NhbmNlbGxlZDogc3RhdGUuaXNDYW5jZWxsZWQsXG4gICAgICogICAgICAgZXJyb3I6IHN0YXRlLmVycm9yLFxuICAgICAqICAgICAgIHJlc3VsdDogc3RhdGUucmVzdWx0LFxuICAgICAqXG4gICAgICogICAgICAgLy8gVGhlIG9ubHkgb3RoZXIgcHJvcGVydHkgbmVlZGVkIGJ5IFB1YmxpY1N0YXRlLlxuICAgICAqICAgICAgIHB1YmxpY1Byb3BlcnR5OiBzdGF0ZS5wdWJsaWNQcm9wZXJ0eVxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogWW91IGNhbiBzZWUgdGhpcyBpbiB0aGUgdGVzdHMgb2YgdGhpcyByZXBvc2l0b3J5LCBnbyB0byB0aGUgZmlsZTpcbiAgICAgKiBgLi4vdGVzdC91dGlscy90ZXN0UG9sbGVyLnRzYFxuICAgICAqIGFuZCBsb29rIGZvciB0aGUgZ2V0T3BlcmF0aW9uU3RhdGUgaW1wbGVtZW50YXRpb24uXG4gICAgICovXG4gICAgZ2V0T3BlcmF0aW9uU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVzdWx0IHZhbHVlIG9mIHRoZSBvcGVyYXRpb24sXG4gICAgICogcmVnYXJkbGVzcyBvZiB0aGUgc3RhdGUgb2YgdGhlIHBvbGxlci5cbiAgICAgKiBJdCBjYW4gcmV0dXJuIHVuZGVmaW5lZCBvciBhbiBpbmNvbXBsZXRlIGZvcm0gb2YgdGhlIGZpbmFsIFRSZXN1bHQgdmFsdWVcbiAgICAgKiBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLlxuICAgICAqL1xuICAgIGdldFJlc3VsdCgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHNlcmlhbGl6ZWQgdmVyc2lvbiBvZiB0aGUgcG9sbGVyJ3Mgb3BlcmF0aW9uXG4gICAgICogYnkgaW52b2tpbmcgdGhlIG9wZXJhdGlvbidzIHRvU3RyaW5nIG1ldGhvZC5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuZXhwb3J0cy5Qb2xsZXIgPSBQb2xsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb2xsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mcm9FbmdpbmUgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uLy4uL3BvbGxlci9jb25zdGFudHMuanNcIik7XG5jb25zdCBwb2xsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9wb2xsZXIuanNcIik7XG5jb25zdCBvcGVyYXRpb25fanNfMiA9IHJlcXVpcmUoXCIuLi8uLi9wb2xsZXIvb3BlcmF0aW9uLmpzXCIpO1xuLyoqXG4gKiBUaGUgTFJPIEVuZ2luZSwgYSBjbGFzcyB0aGF0IHBlcmZvcm1zIHBvbGxpbmcuXG4gKi9cbmNsYXNzIExyb0VuZ2luZSBleHRlbmRzIHBvbGxlcl9qc18xLlBvbGxlciB7XG4gICAgY29uc3RydWN0b3IobHJvLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgaW50ZXJ2YWxJbk1zID0gY29uc3RhbnRzX2pzXzEuUE9MTF9JTlRFUlZBTF9JTl9NUywgcmVzdW1lRnJvbSwgcmVzb2x2ZU9uVW5zdWNjZXNzZnVsID0gZmFsc2UsIGlzRG9uZSwgbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIH0gPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHJlc3VtZUZyb21cbiAgICAgICAgICAgID8gKDAsIG9wZXJhdGlvbl9qc18yLmRlc2VyaWFsaXplU3RhdGUpKHJlc3VtZUZyb20pXG4gICAgICAgICAgICA6IHt9O1xuICAgICAgICBjb25zdCBvcGVyYXRpb24gPSBuZXcgb3BlcmF0aW9uX2pzXzEuR2VuZXJpY1BvbGxPcGVyYXRpb24oc3RhdGUsIGxybywgIXJlc29sdmVPblVuc3VjY2Vzc2Z1bCwgbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIGlzRG9uZSk7XG4gICAgICAgIHN1cGVyKG9wZXJhdGlvbik7XG4gICAgICAgIHRoaXMucmVzb2x2ZU9uVW5zdWNjZXNzZnVsID0gcmVzb2x2ZU9uVW5zdWNjZXNzZnVsO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHsgaW50ZXJ2YWxJbk1zOiBpbnRlcnZhbEluTXMgfTtcbiAgICAgICAgb3BlcmF0aW9uLnNldFBvbGxlckNvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBtZXRob2QgdXNlZCBieSB0aGUgcG9sbGVyIHRvIHdhaXQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXBkYXRlIGl0cyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgZGVsYXkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIHRoaXMuY29uZmlnLmludGVydmFsSW5NcykpO1xuICAgIH1cbn1cbmV4cG9ydHMuTHJvRW5naW5lID0gTHJvRW5naW5lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bHJvRW5naW5lLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTHJvRW5naW5lID0gdm9pZCAwO1xudmFyIGxyb0VuZ2luZV9qc18xID0gcmVxdWlyZShcIi4vbHJvRW5naW5lLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTHJvRW5naW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBscm9FbmdpbmVfanNfMS5Mcm9FbmdpbmU7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb2xsT3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlSHR0cFBvbGxlciA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG52YXIgcG9sbGVyX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwL3BvbGxlci5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUh0dHBQb2xsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBvbGxlcl9qc18xLmNyZWF0ZUh0dHBQb2xsZXI7IH0gfSk7XG4vKipcbiAqIFRoaXMgY2FuIGJlIHVuY29tbWVudGVkIHRvIGV4cG9zZSB0aGUgcHJvdG9jb2wtYWdub3N0aWMgcG9sbGVyXG4gKi9cbi8vIGV4cG9ydCB7XG4vLyAgIEJ1aWxkQ3JlYXRlUG9sbGVyT3B0aW9ucyxcbi8vICAgT3BlcmF0aW9uLFxuLy8gICBDcmVhdGVQb2xsZXJPcHRpb25zLFxuLy8gICBPcGVyYXRpb25Db25maWcsXG4vLyAgIFJlc3RvcmFibGVPcGVyYXRpb25TdGF0ZSxcbi8vIH0gZnJvbSBcIi4vcG9sbGVyL21vZGVsc1wiO1xuLy8gZXhwb3J0IHsgYnVpbGRDcmVhdGVQb2xsZXIgfSBmcm9tIFwiLi9wb2xsZXIvcG9sbGVyXCI7XG4vKiogbGVnYWN5ICovXG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9sZWdhY3kvbHJvRW5naW5lL2luZGV4LmpzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xlZ2FjeS9wb2xsZXIuanNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGVnYWN5L3BvbGxPcGVyYXRpb24uanNcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBjb3JlUmVzdFBpcGVsaW5lID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZScpO1xudmFyIHRzbGliID0gcmVxdWlyZSgndHNsaWInKTtcbnZhciBjb3JlQXV0aCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWF1dGgnKTtcbnZhciBjb3JlVXRpbCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLXV0aWwnKTtcbnZhciBjb3JlSHR0cENvbXBhdCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWh0dHAtY29tcGF0Jyk7XG52YXIgY29yZUNsaWVudCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWNsaWVudCcpO1xudmFyIGNvcmVYbWwgPSByZXF1aXJlKCdAYXp1cmUvY29yZS14bWwnKTtcbnZhciBsb2dnZXIkMSA9IHJlcXVpcmUoJ0BhenVyZS9sb2dnZXInKTtcbnZhciBhYm9ydENvbnRyb2xsZXIgPSByZXF1aXJlKCdAYXp1cmUvYWJvcnQtY29udHJvbGxlcicpO1xudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xudmFyIGNvcmVUcmFjaW5nID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtdHJhY2luZycpO1xudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIGNvcmVMcm8gPSByZXF1aXJlKCdAYXp1cmUvY29yZS1scm8nKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKTtcblxuZnVuY3Rpb24gX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGUpIHtcbiAgICB2YXIgbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgaWYgKGUpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKGsgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgIHZhciBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCBrKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgaywgZC5nZXQgPyBkIDoge1xuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVba107IH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG4uZGVmYXVsdCA9IGU7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUobik7XG59XG5cbnZhciBjb3JlSHR0cENvbXBhdF9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChjb3JlSHR0cENvbXBhdCk7XG52YXIgY29yZUNsaWVudF9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChjb3JlQ2xpZW50KTtcbnZhciBmc19fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChmcyk7XG52YXIgdXRpbF9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdCh1dGlsKTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoZSBgQGF6dXJlL2xvZ2dlcmAgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYWNrYWdlLlxuICovXG5jb25zdCBsb2dnZXIgPSBsb2dnZXIkMS5jcmVhdGVDbGllbnRMb2dnZXIoXCJzdG9yYWdlLWJsb2JcIik7XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmcm9tIHdoaWNoIGFsbCByZXF1ZXN0IHBvbGljaWVzIGRlcml2ZS5cbiAqL1xuY2xhc3MgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIG1ldGhvZCB0byBpbXBsZW1lbnQgdGhhdCBtYW5pcHVsYXRlcyBhIHJlcXVlc3QvcmVzcG9uc2UuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgICogVGhlIG5leHQgcG9saWN5IGluIHRoZSBwaXBlbGluZS4gRWFjaCBwb2xpY3kgaXMgcmVzcG9uc2libGUgZm9yIGV4ZWN1dGluZyB0aGUgbmV4dCBvbmUgaWYgdGhlIHJlcXVlc3QgaXMgdG8gY29udGludWUgdGhyb3VnaCB0aGUgcGlwZWxpbmUuXG4gICAgICovXG4gICAgX25leHRQb2xpY3ksIFxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBhIGdpdmVuIHJlcXVlc3QgcG9saWN5LlxuICAgICAqL1xuICAgIF9vcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX25leHRQb2xpY3kgPSBfbmV4dFBvbGljeTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgYSBsb2cgd2l0aCB0aGUgcHJvdmlkZWQgbG9nIGxldmVsIHNob3VsZCBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIGxvZ0xldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGUgbG9nIHRoYXQgd2lsbCBiZSBsb2dnZWQuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgYSBsb2cgd2l0aCB0aGUgcHJvdmlkZWQgbG9nIGxldmVsIHNob3VsZCBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgc2hvdWxkTG9nKGxvZ0xldmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zLnNob3VsZExvZyhsb2dMZXZlbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF0dGVtcHQgdG8gbG9nIHRoZSBwcm92aWRlZCBtZXNzYWdlIHRvIHRoZSBwcm92aWRlZCBsb2dnZXIuIElmIG5vIGxvZ2dlciB3YXMgcHJvdmlkZWQgb3IgaWZcbiAgICAgKiB0aGUgbG9nIGxldmVsIGRvZXMgbm90IG1lYXQgdGhlIGxvZ2dlcidzIHRocmVzaG9sZCwgdGhlbiBub3RoaW5nIHdpbGwgYmUgbG9nZ2VkLlxuICAgICAqIEBwYXJhbSBsb2dMZXZlbCAtIFRoZSBsb2cgbGV2ZWwgb2YgdGhpcyBsb2cuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGlzIGxvZy5cbiAgICAgKi9cbiAgICBsb2cobG9nTGV2ZWwsIG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5sb2cobG9nTGV2ZWwsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBTREtfVkVSU0lPTiA9IFwiMTIuMjUuMFwiO1xuY29uc3QgU0VSVklDRV9WRVJTSU9OID0gXCIyMDI0LTExLTA0XCI7XG5jb25zdCBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFUyA9IDI1NiAqIDEwMjQgKiAxMDI0OyAvLyAyNTZNQlxuY29uc3QgQkxPQ0tfQkxPQl9NQVhfU1RBR0VfQkxPQ0tfQllURVMgPSA0MDAwICogMTAyNCAqIDEwMjQ7IC8vIDQwMDBNQlxuY29uc3QgQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTID0gNTAwMDA7XG5jb25zdCBERUZBVUxUX0JMT0NLX0JVRkZFUl9TSVpFX0JZVEVTID0gOCAqIDEwMjQgKiAxMDI0OyAvLyA4TUJcbmNvbnN0IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUyA9IDQgKiAxMDI0ICogMTAyNDsgLy8gNE1CXG5jb25zdCBERUZBVUxUX01BWF9ET1dOTE9BRF9SRVRSWV9SRVFVRVNUUyA9IDU7XG5jb25zdCBSRVFVRVNUX1RJTUVPVVQgPSAxMDAgKiAxMDAwOyAvLyBJbiBtc1xuLyoqXG4gKiBUaGUgT0F1dGggc2NvcGUgdG8gdXNlIHdpdGggQXp1cmUgU3RvcmFnZS5cbiAqL1xuY29uc3QgU3RvcmFnZU9BdXRoU2NvcGVzID0gXCJodHRwczovL3N0b3JhZ2UuYXp1cmUuY29tLy5kZWZhdWx0XCI7XG5jb25zdCBVUkxDb25zdGFudHMgPSB7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgICBGT1JDRV9CUk9XU0VSX05PX0NBQ0hFOiBcIl9cIixcbiAgICAgICAgU0lHTkFUVVJFOiBcInNpZ1wiLFxuICAgICAgICBTTkFQU0hPVDogXCJzbmFwc2hvdFwiLFxuICAgICAgICBWRVJTSU9OSUQ6IFwidmVyc2lvbmlkXCIsXG4gICAgICAgIFRJTUVPVVQ6IFwidGltZW91dFwiLFxuICAgIH0sXG59O1xuY29uc3QgSFRUUFVSTENvbm5lY3Rpb24gPSB7XG4gICAgSFRUUF9BQ0NFUFRFRDogMjAyLFxuICAgIEhUVFBfQ09ORkxJQ1Q6IDQwOSxcbiAgICBIVFRQX05PVF9GT1VORDogNDA0LFxuICAgIEhUVFBfUFJFQ09OX0ZBSUxFRDogNDEyLFxuICAgIEhUVFBfUkFOR0VfTk9UX1NBVElTRklBQkxFOiA0MTYsXG59O1xuY29uc3QgSGVhZGVyQ29uc3RhbnRzID0ge1xuICAgIEFVVEhPUklaQVRJT046IFwiQXV0aG9yaXphdGlvblwiLFxuICAgIEFVVEhPUklaQVRJT05fU0NIRU1FOiBcIkJlYXJlclwiLFxuICAgIENPTlRFTlRfRU5DT0RJTkc6IFwiQ29udGVudC1FbmNvZGluZ1wiLFxuICAgIENPTlRFTlRfSUQ6IFwiQ29udGVudC1JRFwiLFxuICAgIENPTlRFTlRfTEFOR1VBR0U6IFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgIENPTlRFTlRfTEVOR1RIOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgQ09OVEVOVF9NRDU6IFwiQ29udGVudC1NZDVcIixcbiAgICBDT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HOiBcIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdcIixcbiAgICBDT05URU5UX1RZUEU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgQ09PS0lFOiBcIkNvb2tpZVwiLFxuICAgIERBVEU6IFwiZGF0ZVwiLFxuICAgIElGX01BVENIOiBcImlmLW1hdGNoXCIsXG4gICAgSUZfTU9ESUZJRURfU0lOQ0U6IFwiaWYtbW9kaWZpZWQtc2luY2VcIixcbiAgICBJRl9OT05FX01BVENIOiBcImlmLW5vbmUtbWF0Y2hcIixcbiAgICBJRl9VTk1PRElGSUVEX1NJTkNFOiBcImlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICBQUkVGSVhfRk9SX1NUT1JBR0U6IFwieC1tcy1cIixcbiAgICBSQU5HRTogXCJSYW5nZVwiLFxuICAgIFVTRVJfQUdFTlQ6IFwiVXNlci1BZ2VudFwiLFxuICAgIFhfTVNfQ0xJRU5UX1JFUVVFU1RfSUQ6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFhfTVNfQ09QWV9TT1VSQ0U6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgIFhfTVNfREFURTogXCJ4LW1zLWRhdGVcIixcbiAgICBYX01TX0VSUk9SX0NPREU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgWF9NU19WRVJTSU9OOiBcIngtbXMtdmVyc2lvblwiLFxuICAgIFhfTVNfQ29weVNvdXJjZUVycm9yQ29kZTogXCJ4LW1zLWNvcHktc291cmNlLWVycm9yLWNvZGVcIixcbn07XG5jb25zdCBFVGFnTm9uZSA9IFwiXCI7XG5jb25zdCBFVGFnQW55ID0gXCIqXCI7XG5jb25zdCBTSVpFXzFfTUIgPSAxICogMTAyNCAqIDEwMjQ7XG5jb25zdCBCQVRDSF9NQVhfUkVRVUVTVCA9IDI1NjtcbmNvbnN0IEJBVENIX01BWF9QQVlMT0FEX0lOX0JZVEVTID0gNCAqIFNJWkVfMV9NQjtcbmNvbnN0IEhUVFBfTElORV9FTkRJTkcgPSBcIlxcclxcblwiO1xuY29uc3QgSFRUUF9WRVJTSU9OXzFfMSA9IFwiSFRUUC8xLjFcIjtcbmNvbnN0IEVuY3J5cHRpb25BbGdvcml0aG1BRVMyNSA9IFwiQUVTMjU2XCI7XG5jb25zdCBEZXZlbG9wbWVudENvbm5lY3Rpb25TdHJpbmcgPSBgRGVmYXVsdEVuZHBvaW50c1Byb3RvY29sPWh0dHA7QWNjb3VudE5hbWU9ZGV2c3RvcmVhY2NvdW50MTtBY2NvdW50S2V5PUVieTh2ZE0wMnhOT2NxRmxxVXdKUExsbUV0bENEWEoxT1V6RlQ1MHVTUlo2SUZzdUZxMlVWRXJDejRJNnRxL0sxU1pGUFRPdHIvS0JIQmVrc29HTUd3PT07QmxvYkVuZHBvaW50PWh0dHA6Ly8xMjcuMC4wLjE6MTAwMDAvZGV2c3RvcmVhY2NvdW50MTtgO1xuY29uc3QgU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZEhlYWRlck5hbWVzID0gW1xuICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIsXG4gICAgXCJDYWNoZS1Db250cm9sXCIsXG4gICAgXCJDb250ZW50LUxlbmd0aFwiLFxuICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgXCJEYXRlXCIsXG4gICAgXCJSZXF1ZXN0LUlkXCIsXG4gICAgXCJ0cmFjZXBhcmVudFwiLFxuICAgIFwiVHJhbnNmZXItRW5jb2RpbmdcIixcbiAgICBcIlVzZXItQWdlbnRcIixcbiAgICBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtZGF0ZVwiLFxuICAgIFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtcmV0dXJuLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXZlcnNpb25cIixcbiAgICBcIkFjY2VwdC1SYW5nZXNcIixcbiAgICBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIixcbiAgICBcIkNvbnRlbnQtRW5jb2RpbmdcIixcbiAgICBcIkNvbnRlbnQtTGFuZ3VhZ2VcIixcbiAgICBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgXCJDb250ZW50LVJhbmdlXCIsXG4gICAgXCJFVGFnXCIsXG4gICAgXCJMYXN0LU1vZGlmaWVkXCIsXG4gICAgXCJTZXJ2ZXJcIixcbiAgICBcIlZhcnlcIixcbiAgICBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgIFwieC1tcy1jb3B5LWFjdGlvblwiLFxuICAgIFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgIFwieC1tcy1jb3B5LWlkXCIsXG4gICAgXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICBcIngtbXMtaGFzLWltbXV0YWJpbGl0eS1wb2xpY3lcIixcbiAgICBcIngtbXMtaGFzLWxlZ2FsLWhvbGRcIixcbiAgICBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgXCJ4LW1zLXJhbmdlXCIsXG4gICAgXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgIFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgXCJ4LW1zLXNuYXBzaG90XCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgIFwiSWYtTWF0Y2hcIixcbiAgICBcIklmLU1vZGlmaWVkLVNpbmNlXCIsXG4gICAgXCJJZi1Ob25lLU1hdGNoXCIsXG4gICAgXCJJZi1Vbm1vZGlmaWVkLVNpbmNlXCIsXG4gICAgXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgXCJ4LW1zLWFjY2Vzcy10aWVyLWNoYW5nZS10aW1lXCIsXG4gICAgXCJ4LW1zLWFjY2Vzcy10aWVyLWluZmVycmVkXCIsXG4gICAgXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgIFwieC1tcy1hcmNoaXZlLXN0YXR1c1wiLFxuICAgIFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICBcIngtbXMtYmxvYi1jYWNoZS1jb250cm9sXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgXCJ4LW1zLWJsb2ItY29uZGl0aW9uLWFwcGVuZHBvc1wiLFxuICAgIFwieC1tcy1ibG9iLWNvbmRpdGlvbi1tYXhzaXplXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LWxhbmd1YWdlXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtdHlwZVwiLFxuICAgIFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgXCJ4LW1zLWNvcHktZGVzdGluYXRpb24tc25hcHNob3RcIixcbiAgICBcIngtbXMtY3JlYXRpb24tdGltZVwiLFxuICAgIFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICBcIngtbXMtZGVsZXRlLXNuYXBzaG90c1wiLFxuICAgIFwieC1tcy1kZWxldGUtdHlwZS1wZXJtYW5lbnRcIixcbiAgICBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgXCJ4LW1zLWVuY3J5cHRpb24tYWxnb3JpdGhtXCIsXG4gICAgXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1lcVwiLFxuICAgIFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbGVcIixcbiAgICBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWx0XCIsXG4gICAgXCJ4LW1zLWluY3JlbWVudGFsLWNvcHlcIixcbiAgICBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgXCJ4LW1zLWxlYXNlLWJyZWFrLXBlcmlvZFwiLFxuICAgIFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgIFwieC1tcy1sZWFzZS1pZFwiLFxuICAgIFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgXCJ4LW1zLXBhZ2Utd3JpdGVcIixcbiAgICBcIngtbXMtcHJvcG9zZWQtbGVhc2UtaWRcIixcbiAgICBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1XCIsXG4gICAgXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgIFwieC1tcy1zZXF1ZW5jZS1udW1iZXItYWN0aW9uXCIsXG4gICAgXCJ4LW1zLXNrdS1uYW1lXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1jb250ZW50LW1kNVwiLFxuICAgIFwieC1tcy1zb3VyY2UtaWYtbWF0Y2hcIixcbiAgICBcIngtbXMtc291cmNlLWlmLW1vZGlmaWVkLXNpbmNlXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi1ub25lLW1hdGNoXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi11bm1vZGlmaWVkLXNpbmNlXCIsXG4gICAgXCJ4LW1zLXRhZy1jb3VudFwiLFxuICAgIFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICBcIngtbXMtY29weS1zb3VyY2UtZXJyb3ItY29kZVwiLFxuICAgIFwieC1tcy1jb3B5LXNvdXJjZS1zdGF0dXMtY29kZVwiLFxuICAgIFwieC1tcy1pZi10YWdzXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi10YWdzXCIsXG5dO1xuY29uc3QgU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IFtcbiAgICBcImNvbXBcIixcbiAgICBcIm1heHJlc3VsdHNcIixcbiAgICBcInJzY2NcIixcbiAgICBcInJzY2RcIixcbiAgICBcInJzY2VcIixcbiAgICBcInJzY2xcIixcbiAgICBcInJzY3RcIixcbiAgICBcInNlXCIsXG4gICAgXCJzaVwiLFxuICAgIFwic2lwXCIsXG4gICAgXCJzcFwiLFxuICAgIFwic3ByXCIsXG4gICAgXCJzclwiLFxuICAgIFwic3J0XCIsXG4gICAgXCJzc1wiLFxuICAgIFwic3RcIixcbiAgICBcInN2XCIsXG4gICAgXCJpbmNsdWRlXCIsXG4gICAgXCJtYXJrZXJcIixcbiAgICBcInByZWZpeFwiLFxuICAgIFwiY29weWlkXCIsXG4gICAgXCJyZXN0eXBlXCIsXG4gICAgXCJibG9ja2lkXCIsXG4gICAgXCJibG9ja2xpc3R0eXBlXCIsXG4gICAgXCJkZWxpbWl0ZXJcIixcbiAgICBcInByZXZzbmFwc2hvdFwiLFxuICAgIFwic2tlXCIsXG4gICAgXCJza29pZFwiLFxuICAgIFwic2tzXCIsXG4gICAgXCJza3RcIixcbiAgICBcInNrdGlkXCIsXG4gICAgXCJza3ZcIixcbiAgICBcInNuYXBzaG90XCIsXG5dO1xuY29uc3QgQmxvYlVzZXNDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25Nc2cgPSBcIkJsb2JVc2VzQ3VzdG9tZXJTcGVjaWZpZWRFbmNyeXB0aW9uXCI7XG5jb25zdCBCbG9iRG9lc05vdFVzZUN1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvbiA9IFwiQmxvYkRvZXNOb3RVc2VDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25cIjtcbi8vLyBMaXN0IG9mIHBvcnRzIHVzZWQgZm9yIHBhdGggc3R5bGUgYWRkcmVzc2luZy5cbi8vLyBQYXRoIHN0eWxlIGFkZHJlc3NpbmcgbWVhbnMgdGhhdCBzdG9yYWdlIGFjY291bnQgaXMgcHV0IGluIFVSSSdzIFBhdGggc2VnbWVudCBpbiBpbnN0ZWFkIG9mIGluIGhvc3QuXG5jb25zdCBQYXRoU3R5bGVQb3J0cyA9IFtcbiAgICBcIjEwMDAwXCIsXG4gICAgXCIxMDAwMVwiLFxuICAgIFwiMTAwMDJcIixcbiAgICBcIjEwMDAzXCIsXG4gICAgXCIxMDAwNFwiLFxuICAgIFwiMTAxMDBcIixcbiAgICBcIjEwMTAxXCIsXG4gICAgXCIxMDEwMlwiLFxuICAgIFwiMTAxMDNcIixcbiAgICBcIjEwMTA0XCIsXG4gICAgXCIxMTAwMFwiLFxuICAgIFwiMTEwMDFcIixcbiAgICBcIjExMDAyXCIsXG4gICAgXCIxMTAwM1wiLFxuICAgIFwiMTEwMDRcIixcbiAgICBcIjExMTAwXCIsXG4gICAgXCIxMTEwMVwiLFxuICAgIFwiMTExMDJcIixcbiAgICBcIjExMTAzXCIsXG4gICAgXCIxMTEwNFwiLFxuXTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFJlc2VydmVkIFVSTCBjaGFyYWN0ZXJzIG11c3QgYmUgcHJvcGVybHkgZXNjYXBlZCBmb3IgU3RvcmFnZSBzZXJ2aWNlcyBsaWtlIEJsb2Igb3IgRmlsZS5cbiAqXG4gKiAjIyBVUkwgZW5jb2RlIGFuZCBlc2NhcGUgc3RyYXRlZ3kgZm9yIEpTIFNES3NcbiAqXG4gKiBXaGVuIGN1c3RvbWVycyBwYXNzIGEgVVJMIHN0cmluZyBpbnRvIFh4eENsaWVudCBjbGFzc2VzIGNvbnN0cnVjdG9yLCB0aGUgVVJMIHN0cmluZyBtYXkgYWxyZWFkeSBiZSBVUkwgZW5jb2RlZCBvciBub3QuXG4gKiBCdXQgYmVmb3JlIHNlbmRpbmcgdG8gQXp1cmUgU3RvcmFnZSBzZXJ2ZXIsIHRoZSBVUkwgbXVzdCBiZSBlbmNvZGVkLiBIb3dldmVyLCBpdCdzIGhhcmQgZm9yIGEgU0RLIHRvIGd1ZXNzIHdoZXRoZXIgdGhlIFVSTFxuICogc3RyaW5nIGhhcyBiZWVuIGVuY29kZWQgb3Igbm90LiBXZSBoYXZlIDIgcG90ZW50aWFsIHN0cmF0ZWdpZXMsIGFuZCBjaG9zZSBzdHJhdGVneSB0d28gZm9yIHRoZSBYeHhDbGllbnQgY29uc3RydWN0b3JzLlxuICpcbiAqICMjIyBTdHJhdGVneSBPbmU6IEFzc3VtZSB0aGUgY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBub3QgZW5jb2RlZCwgYW5kIGFsd2F5cyBlbmNvZGUgVVJMIHN0cmluZyBpbiBTREsuXG4gKlxuICogVGhpcyBpcyB3aGF0IGxlZ2FjeSBWMiBTREsgZG9lcywgc2ltcGxlIGFuZCB3b3JrcyBmb3IgbW9zdCBvZiB0aGUgY2FzZXMuXG4gKiAtIFdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYjpcIixcbiAqICAgU0RLIHdpbGwgZW5jb2RlIGl0IHRvIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTNBXCIgYW5kIHNlbmQgdG8gc2VydmVyLiBBIGJsb2IgbmFtZWQgXCJiOlwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTNBXCIsXG4gKiAgIFNESyB3aWxsIGVuY29kZSBpdCB0byBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUyNTNBXCIgYW5kIHNlbmQgdG8gc2VydmVyLiBBIGJsb2IgbmFtZWQgXCJiJTNBXCIgd2lsbCBiZSBjcmVhdGVkLlxuICpcbiAqIEJ1dCB0aGlzIHN0cmF0ZWd5IHdpbGwgbWFrZSBpdCBub3QgcG9zc2libGUgdG8gY3JlYXRlIGEgYmxvYiB3aXRoIFwiP1wiIGluIGl0J3MgbmFtZS4gQmVjYXVzZSB3aGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXNcbiAqIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9ibG9iP25hbWVcIiwgdGhlIFwiP25hbWVcIiB3aWxsIGJlIHRyZWF0ZWQgYXMgVVJMIHBhcmFtdGVyIGluc3RlYWQgb2YgYmxvYiBuYW1lLlxuICogSWYgY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYmxvYiUzRm5hbWVcIiwgYSBibG9iIG5hbWVkIFwiYmxvYiUzRm5hbWVcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBWMiBTREsgZG9lc24ndCBoYXZlIHRoaXMgaXNzdWUgYmVjYXVzZSBpdCBkb2Vzbid0IGFsbG93IGN1c3RvbWVyIHBhc3MgaW4gYSBmdWxsIFVSTCwgaXQgYWNjZXB0cyBhIHNlcGFyYXRlIGJsb2IgbmFtZSBhbmQgZW5jb2RlVVJJQ29tcG9uZW50IGZvciBpdC5cbiAqIFdlIGNhbm5vdCBhY2NlcHQgYSBTREsgY2Fubm90IGNyZWF0ZSBhIGJsb2IgbmFtZSB3aXRoIFwiP1wiLiBTbyB3ZSBpbXBsZW1lbnQgc3RyYXRlZ3kgdHdvOlxuICpcbiAqICMjIyBTdHJhdGVneSBUd286IFNESyBkb2Vzbid0IGFzc3VtZSB0aGUgVVJMIGhhcyBiZWVuIGVuY29kZWQgb3Igbm90LiBJdCB3aWxsIGp1c3QgZXNjYXBlIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMuXG4gKlxuICogVGhpcyBpcyB3aGF0IFYxMCBCbG9iIEdvIFNESyBkb2VzLiBJdCBhY2NlcHRzIGEgVVJMIHR5cGUgaW4gR28sIGFuZCBjYWxsIHVybC5Fc2NhcGVkUGF0aCgpIHRvIGVzY2FwZSB0aGUgc3BlY2lhbCBjaGFycyB1bmVzY2FwZWQuXG4gKiAtIFdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYjpcIixcbiAqICAgU0RLIHdpbGwgZXNjYXBlIFwiOlwiIGxpa2UgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIiBhbmQgc2VuZCB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImI6XCIgd2lsbCBiZSBjcmVhdGVkLlxuICogLSBXaGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXMgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIixcbiAqICAgVGhlcmUgaXMgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzLCBzbyBzZW5kIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTNBXCIgdG8gc2VydmVyLiBBIGJsb2IgbmFtZWQgXCJiOlwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTI1M0FcIixcbiAqICAgVGhlcmUgaXMgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzLCBzbyBzZW5kIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTI1M0FcIiB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImIlM0FcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKlxuICogVGhpcyBzdHJhdGVneSBnaXZlcyB1cyBmbGV4aWJpbGl0eSB0byBjcmVhdGUgd2l0aCBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzLiBCdXQgXCIlXCIgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXJzLCBpZiB0aGUgVVJMIHN0cmluZ1xuICogaXMgbm90IGVuY29kZWQsIHRoZXJlIHNob3VsZG4ndCBhIFwiJVwiIGluIHRoZSBVUkwgc3RyaW5nLCBvdGhlcndpc2UgdGhlIFVSTCBpcyBub3QgYSB2YWxpZCBVUkwuXG4gKiBJZiBjdXN0b21lciBuZWVkcyB0byBjcmVhdGUgYSBibG9iIHdpdGggXCIlXCIgaW4gaXQncyBibG9iIG5hbWUsIHVzZSBcIiUyNVwiIGluc3RlYWQgb2YgXCIlXCIuIEp1c3QgbGlrZSBhYm92ZSAzcmQgc2FtcGxlLlxuICogQW5kIGZvbGxvd2luZyBVUkwgc3RyaW5ncyBhcmUgaW52YWxpZDpcbiAqIC0gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlXCJcbiAqIC0gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlMlwiXG4gKiAtIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJUdcIlxuICpcbiAqIEFub3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXIgaXMgXCI/XCIsIHVzZSBcIiUyRlwiIHRvIHJlcHJlc2VudCBhIGJsb2IgbmFtZSB3aXRoIFwiP1wiIGluIGEgVVJMIHN0cmluZy5cbiAqXG4gKiAjIyMgU3RyYXRlZ3kgZm9yIGNvbnRhaW5lck5hbWUsIGJsb2JOYW1lIG9yIG90aGVyIHNwZWNpZmljIFhYWE5hbWUgcGFyYW1ldGVycyBpbiBtZXRob2RzIHN1Y2ggYXMgYGNvbnRhaW5lckNsaWVudC5nZXRCbG9iQ2xpZW50KGJsb2JOYW1lKWBcbiAqXG4gKiBXZSB3aWxsIGFwcGx5IHN0cmF0ZWd5IG9uZSwgYW5kIGNhbGwgZW5jb2RlVVJJQ29tcG9uZW50IGZvciB0aGVzZSBwYXJhbWV0ZXJzIGxpa2UgYmxvYk5hbWUuIEJlY2F1c2Ugd2hhdCBjdXN0b21lcnMgcGFzc2VzIGluIGlzIGEgcGxhaW4gbmFtZSBpbnN0ZWFkIG9mIGEgVVJMLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL25hbWluZy1hbmQtcmVmZXJlbmNpbmctY29udGFpbmVycy0tYmxvYnMtLWFuZC1tZXRhZGF0YVxuICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1zaGFyZXMtLWRpcmVjdG9yaWVzLS1maWxlcy0tYW5kLW1ldGFkYXRhXG4gKlxuICogQHBhcmFtIHVybCAtXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVVSTFBhdGgodXJsKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBwYXRoID0gdXJsUGFyc2VkLnBhdGhuYW1lO1xuICAgIHBhdGggPSBwYXRoIHx8IFwiL1wiO1xuICAgIHBhdGggPSBlc2NhcGUocGF0aCk7XG4gICAgdXJsUGFyc2VkLnBhdGhuYW1lID0gcGF0aDtcbiAgICByZXR1cm4gdXJsUGFyc2VkLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiBnZXRQcm94eVVyaUZyb21EZXZDb25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcpIHtcbiAgICAvLyBEZXZlbG9wbWVudCBDb25uZWN0aW9uIFN0cmluZ1xuICAgIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3N0b3JhZ2UvY29tbW9uL3N0b3JhZ2UtY29uZmlndXJlLWNvbm5lY3Rpb24tc3RyaW5nI2Nvbm5lY3QtdG8tdGhlLWVtdWxhdG9yLWFjY291bnQtdXNpbmctdGhlLXdlbGwta25vd24tYWNjb3VudC1uYW1lLWFuZC1rZXlcbiAgICBsZXQgcHJveHlVcmkgPSBcIlwiO1xuICAgIGlmIChjb25uZWN0aW9uU3RyaW5nLnNlYXJjaChcIkRldmVsb3BtZW50U3RvcmFnZVByb3h5VXJpPVwiKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gQ09OTkVDVElPTl9TVFJJTkc9VXNlRGV2ZWxvcG1lbnRTdG9yYWdlPXRydWU7RGV2ZWxvcG1lbnRTdG9yYWdlUHJveHlVcmk9aHR0cDovL215UHJveHlVcmlcbiAgICAgICAgY29uc3QgbWF0Y2hDcmVkZW50aWFscyA9IGNvbm5lY3Rpb25TdHJpbmcuc3BsaXQoXCI7XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbWF0Y2hDcmVkZW50aWFscykge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQudHJpbSgpLnN0YXJ0c1dpdGgoXCJEZXZlbG9wbWVudFN0b3JhZ2VQcm94eVVyaT1cIikpIHtcbiAgICAgICAgICAgICAgICBwcm94eVVyaSA9IGVsZW1lbnQudHJpbSgpLm1hdGNoKFwiRGV2ZWxvcG1lbnRTdG9yYWdlUHJveHlVcmk9KC4qKVwiKVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJveHlVcmk7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBhcmd1bWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gY29ubmVjdGlvblN0cmluZy5zcGxpdChcIjtcIik7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChlbGVtZW50LnRyaW0oKS5zdGFydHNXaXRoKGFyZ3VtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudHJpbSgpLm1hdGNoKGFyZ3VtZW50ICsgXCI9KC4qKVwiKVsxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cbi8qKlxuICogRXh0cmFjdHMgdGhlIHBhcnRzIG9mIGFuIEF6dXJlIFN0b3JhZ2UgYWNjb3VudCBjb25uZWN0aW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gY29ubmVjdGlvblN0cmluZyAtIENvbm5lY3Rpb24gc3RyaW5nLlxuICogQHJldHVybnMgU3RyaW5nIGtleSB2YWx1ZSBwYWlycyBvZiB0aGUgc3RvcmFnZSBhY2NvdW50J3MgdXJsIGFuZCBjcmVkZW50aWFscy5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyhjb25uZWN0aW9uU3RyaW5nKSB7XG4gICAgbGV0IHByb3h5VXJpID0gXCJcIjtcbiAgICBpZiAoY29ubmVjdGlvblN0cmluZy5zdGFydHNXaXRoKFwiVXNlRGV2ZWxvcG1lbnRTdG9yYWdlPXRydWVcIikpIHtcbiAgICAgICAgLy8gRGV2ZWxvcG1lbnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgcHJveHlVcmkgPSBnZXRQcm94eVVyaUZyb21EZXZDb25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICBjb25uZWN0aW9uU3RyaW5nID0gRGV2ZWxvcG1lbnRDb25uZWN0aW9uU3RyaW5nO1xuICAgIH1cbiAgICAvLyBNYXRjaGluZyBCbG9iRW5kcG9pbnQgaW4gdGhlIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICBsZXQgYmxvYkVuZHBvaW50ID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJCbG9iRW5kcG9pbnRcIik7XG4gICAgLy8gU2xpY2luZyBvZmYgJy8nIGF0IHRoZSBlbmQgaWYgZXhpc3RzXG4gICAgLy8gKFRoZSBtZXRob2RzIHRoYXQgdXNlIGBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzYCBleHBlY3QgdGhlIHVybCB0byBub3QgaGF2ZSBgL2AgYXQgdGhlIGVuZClcbiAgICBibG9iRW5kcG9pbnQgPSBibG9iRW5kcG9pbnQuZW5kc1dpdGgoXCIvXCIpID8gYmxvYkVuZHBvaW50LnNsaWNlKDAsIC0xKSA6IGJsb2JFbmRwb2ludDtcbiAgICBpZiAoY29ubmVjdGlvblN0cmluZy5zZWFyY2goXCJEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2w9XCIpICE9PSAtMSAmJlxuICAgICAgICBjb25uZWN0aW9uU3RyaW5nLnNlYXJjaChcIkFjY291bnRLZXk9XCIpICE9PSAtMSkge1xuICAgICAgICAvLyBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nXG4gICAgICAgIGxldCBkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2wgPSBcIlwiO1xuICAgICAgICBsZXQgYWNjb3VudE5hbWUgPSBcIlwiO1xuICAgICAgICBsZXQgYWNjb3VudEtleSA9IEJ1ZmZlci5mcm9tKFwiYWNjb3VudEtleVwiLCBcImJhc2U2NFwiKTtcbiAgICAgICAgbGV0IGVuZHBvaW50U3VmZml4ID0gXCJcIjtcbiAgICAgICAgLy8gR2V0IGFjY291bnQgbmFtZSBhbmQga2V5XG4gICAgICAgIGFjY291bnROYW1lID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJBY2NvdW50TmFtZVwiKTtcbiAgICAgICAgYWNjb3VudEtleSA9IEJ1ZmZlci5mcm9tKGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFwiQWNjb3VudEtleVwiKSwgXCJiYXNlNjRcIik7XG4gICAgICAgIGlmICghYmxvYkVuZHBvaW50KSB7XG4gICAgICAgICAgICAvLyBCbG9iRW5kcG9pbnQgaXMgbm90IHByZXNlbnQgaW4gdGhlIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgICAgIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGAke2RlZmF1bHRFbmRwb2ludHNQcm90b2NvbH06Ly8ke2FjY291bnROYW1lfS5ibG9iLiR7ZW5kcG9pbnRTdWZmaXh9YFxuICAgICAgICAgICAgZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2xcIik7XG4gICAgICAgICAgICBjb25zdCBwcm90b2NvbCA9IGRlZmF1bHRFbmRwb2ludHNQcm90b2NvbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHByb3RvY29sICE9PSBcImh0dHBzXCIgJiYgcHJvdG9jb2wgIT09IFwiaHR0cFwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2wgaW4gdGhlIHByb3ZpZGVkIENvbm5lY3Rpb24gU3RyaW5nLiBFeHBlY3RpbmcgJ2h0dHBzJyBvciAnaHR0cCdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRwb2ludFN1ZmZpeCA9IGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFwiRW5kcG9pbnRTdWZmaXhcIik7XG4gICAgICAgICAgICBpZiAoIWVuZHBvaW50U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBFbmRwb2ludFN1ZmZpeCBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBibG9iRW5kcG9pbnQgPSBgJHtkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2x9Oi8vJHthY2NvdW50TmFtZX0uYmxvYi4ke2VuZHBvaW50U3VmZml4fWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhY2NvdW50TmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBBY2NvdW50TmFtZSBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWNjb3VudEtleS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQWNjb3VudEtleSBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6IFwiQWNjb3VudENvbm5TdHJpbmdcIixcbiAgICAgICAgICAgIHVybDogYmxvYkVuZHBvaW50LFxuICAgICAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgICAgICBhY2NvdW50S2V5LFxuICAgICAgICAgICAgcHJveHlVcmksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBTQVMgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgbGV0IGFjY291bnRTYXMgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIlNoYXJlZEFjY2Vzc1NpZ25hdHVyZVwiKTtcbiAgICAgICAgbGV0IGFjY291bnROYW1lID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJBY2NvdW50TmFtZVwiKTtcbiAgICAgICAgLy8gaWYgYWNjb3VudE5hbWUgaXMgZW1wdHksIHRyeSB0byByZWFkIGl0IGZyb20gQmxvYkVuZHBvaW50XG4gICAgICAgIGlmICghYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICAgIGFjY291bnROYW1lID0gZ2V0QWNjb3VudE5hbWVGcm9tVXJsKGJsb2JFbmRwb2ludCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFibG9iRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQmxvYkVuZHBvaW50IGluIHRoZSBwcm92aWRlZCBTQVMgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWFjY291bnRTYXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgU2hhcmVkQWNjZXNzU2lnbmF0dXJlIGluIHRoZSBwcm92aWRlZCBTQVMgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xpZW50IGNvbnN0cnVjdG9ycyBhc3N1bWUgYWNjb3VudFNhcyBkb2VzICpub3QqIHN0YXJ0IHdpdGggP1xuICAgICAgICBpZiAoYWNjb3VudFNhcy5zdGFydHNXaXRoKFwiP1wiKSkge1xuICAgICAgICAgICAgYWNjb3VudFNhcyA9IGFjY291bnRTYXMuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtpbmQ6IFwiU0FTQ29ublN0cmluZ1wiLCB1cmw6IGJsb2JFbmRwb2ludCwgYWNjb3VudE5hbWUsIGFjY291bnRTYXMgfTtcbiAgICB9XG59XG4vKipcbiAqIEludGVybmFsIGVzY2FwZSBtZXRob2QgaW1wbGVtZW50ZWQgU3RyYXRlZ3kgVHdvIG1lbnRpb25lZCBpbiBlc2NhcGVVUkwoKSBkZXNjcmlwdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZSh0ZXh0KSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KVxuICAgICAgICAucmVwbGFjZSgvJTJGL2csIFwiL1wiKSAvLyBEb24ndCBlc2NhcGUgZm9yIFwiL1wiXG4gICAgICAgIC5yZXBsYWNlKC8nL2csIFwiJTI3XCIpIC8vIEVzY2FwZSBmb3IgXCInXCJcbiAgICAgICAgLnJlcGxhY2UoL1xcKy9nLCBcIiUyMFwiKVxuICAgICAgICAucmVwbGFjZSgvJTI1L2csIFwiJVwiKTsgLy8gUmV2ZXJ0IGVuY29kZWQgXCIlXCJcbn1cbi8qKlxuICogQXBwZW5kIGEgc3RyaW5nIHRvIFVSTCBwYXRoLiBXaWxsIHJlbW92ZSBkdXBsaWNhdGVkIFwiL1wiIGluIGZyb250IG9mIHRoZSBzdHJpbmdcbiAqIHdoZW4gVVJMIHBhdGggZW5kcyB3aXRoIGEgXCIvXCIuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKiBAcGFyYW0gbmFtZSAtIFN0cmluZyB0byBiZSBhcHBlbmRlZCB0byBVUkxcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBhcHBlbmRUb1VSTFBhdGgodXJsLCBuYW1lKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBwYXRoID0gdXJsUGFyc2VkLnBhdGhuYW1lO1xuICAgIHBhdGggPSBwYXRoID8gKHBhdGguZW5kc1dpdGgoXCIvXCIpID8gYCR7cGF0aH0ke25hbWV9YCA6IGAke3BhdGh9LyR7bmFtZX1gKSA6IG5hbWU7XG4gICAgdXJsUGFyc2VkLnBhdGhuYW1lID0gcGF0aDtcbiAgICByZXR1cm4gdXJsUGFyc2VkLnRvU3RyaW5nKCk7XG59XG4vKipcbiAqIFNldCBVUkwgcGFyYW1ldGVyIG5hbWUgYW5kIHZhbHVlLiBJZiBuYW1lIGV4aXN0cyBpbiBVUkwgcGFyYW1ldGVycywgb2xkIHZhbHVlXG4gKiB3aWxsIGJlIHJlcGxhY2VkIGJ5IG5hbWUga2V5LiBJZiBub3QgcHJvdmlkZSB2YWx1ZSwgdGhlIHBhcmFtZXRlciB3aWxsIGJlIGRlbGV0ZWQuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKiBAcGFyYW0gbmFtZSAtIFBhcmFtZXRlciBuYW1lXG4gKiBAcGFyYW0gdmFsdWUgLSBQYXJhbWV0ZXIgdmFsdWVcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzZXRVUkxQYXJhbWV0ZXIodXJsLCBuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICBjb25zdCBlbmNvZGVkTmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcbiAgICBjb25zdCBlbmNvZGVkVmFsdWUgPSB2YWx1ZSA/IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgLy8gbXV0YXRpbmcgc2VhcmNoUGFyYW1zIHdpbGwgY2hhbmdlIHRoZSBlbmNvZGluZywgc28gd2UgaGF2ZSB0byBkbyB0aGlzIG91cnNlbHZlc1xuICAgIGNvbnN0IHNlYXJjaFN0cmluZyA9IHVybFBhcnNlZC5zZWFyY2ggPT09IFwiXCIgPyBcIj9cIiA6IHVybFBhcnNlZC5zZWFyY2g7XG4gICAgY29uc3Qgc2VhcmNoUGllY2VzID0gW107XG4gICAgZm9yIChjb25zdCBwYWlyIG9mIHNlYXJjaFN0cmluZy5zbGljZSgxKS5zcGxpdChcIiZcIikpIHtcbiAgICAgICAgaWYgKHBhaXIpIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXldID0gcGFpci5zcGxpdChcIj1cIiwgMik7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSBlbmNvZGVkTmFtZSkge1xuICAgICAgICAgICAgICAgIHNlYXJjaFBpZWNlcy5wdXNoKHBhaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGVkVmFsdWUpIHtcbiAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7ZW5jb2RlZE5hbWV9PSR7ZW5jb2RlZFZhbHVlfWApO1xuICAgIH1cbiAgICB1cmxQYXJzZWQuc2VhcmNoID0gc2VhcmNoUGllY2VzLmxlbmd0aCA/IGA/JHtzZWFyY2hQaWVjZXMuam9pbihcIiZcIil9YCA6IFwiXCI7XG4gICAgcmV0dXJuIHVybFBhcnNlZC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBHZXQgVVJMIHBhcmFtZXRlciBieSBuYW1lLlxuICpcbiAqIEBwYXJhbSB1cmwgLVxuICogQHBhcmFtIG5hbWUgLVxuICovXG5mdW5jdGlvbiBnZXRVUkxQYXJhbWV0ZXIodXJsLCBuYW1lKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICByZXR1cm4gKF9hID0gdXJsUGFyc2VkLnNlYXJjaFBhcmFtcy5nZXQobmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogU2V0IFVSTCBob3N0LlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZ1xuICogQHBhcmFtIGhvc3QgLSBOZXcgaG9zdCBzdHJpbmdcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzZXRVUkxIb3N0KHVybCwgaG9zdCkge1xuICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICB1cmxQYXJzZWQuaG9zdG5hbWUgPSBob3N0O1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogR2V0IFVSTCBwYXRoIGZyb20gYW4gVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0VVJMUGF0aCh1cmwpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIHJldHVybiB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBHZXQgVVJMIHNjaGVtZSBmcm9tIGFuIFVSTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFVSTFNjaGVtZSh1cmwpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIHJldHVybiB1cmxQYXJzZWQucHJvdG9jb2wuZW5kc1dpdGgoXCI6XCIpID8gdXJsUGFyc2VkLnByb3RvY29sLnNsaWNlKDAsIC0xKSA6IHVybFBhcnNlZC5wcm90b2NvbDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIEdldCBVUkwgcGF0aCBhbmQgcXVlcnkgZnJvbSBhbiBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRVUkxQYXRoQW5kUXVlcnkodXJsKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGNvbnN0IHBhdGhTdHJpbmcgPSB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgaWYgKCFwYXRoU3RyaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB1cmwgd2l0aG91dCB2YWxpZCBwYXRoLlwiKTtcbiAgICB9XG4gICAgbGV0IHF1ZXJ5U3RyaW5nID0gdXJsUGFyc2VkLnNlYXJjaCB8fCBcIlwiO1xuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcudHJpbSgpO1xuICAgIGlmIChxdWVyeVN0cmluZyAhPT0gXCJcIikge1xuICAgICAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnN0YXJ0c1dpdGgoXCI/XCIpID8gcXVlcnlTdHJpbmcgOiBgPyR7cXVlcnlTdHJpbmd9YDsgLy8gRW5zdXJlIHF1ZXJ5IHN0cmluZyBzdGFydCB3aXRoICc/J1xuICAgIH1cbiAgICByZXR1cm4gYCR7cGF0aFN0cmluZ30ke3F1ZXJ5U3RyaW5nfWA7XG59XG4vKipcbiAqIEdldCBVUkwgcXVlcnkga2V5IHZhbHVlIHBhaXJzIGZyb20gYW4gVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdXJsIC1cbiAqL1xuZnVuY3Rpb24gZ2V0VVJMUXVlcmllcyh1cmwpIHtcbiAgICBsZXQgcXVlcnlTdHJpbmcgPSBuZXcgVVJMKHVybCkuc2VhcmNoO1xuICAgIGlmICghcXVlcnlTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnRyaW0oKTtcbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnN0YXJ0c1dpdGgoXCI/XCIpID8gcXVlcnlTdHJpbmcuc3Vic3RyaW5nKDEpIDogcXVlcnlTdHJpbmc7XG4gICAgbGV0IHF1ZXJ5U3ViU3RyaW5ncyA9IHF1ZXJ5U3RyaW5nLnNwbGl0KFwiJlwiKTtcbiAgICBxdWVyeVN1YlN0cmluZ3MgPSBxdWVyeVN1YlN0cmluZ3MuZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleE9mRXF1YWwgPSB2YWx1ZS5pbmRleE9mKFwiPVwiKTtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4T2ZFcXVhbCA9IHZhbHVlLmxhc3RJbmRleE9mKFwiPVwiKTtcbiAgICAgICAgcmV0dXJuIChpbmRleE9mRXF1YWwgPiAwICYmIGluZGV4T2ZFcXVhbCA9PT0gbGFzdEluZGV4T2ZFcXVhbCAmJiBsYXN0SW5kZXhPZkVxdWFsIDwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgfSk7XG4gICAgY29uc3QgcXVlcmllcyA9IHt9O1xuICAgIGZvciAoY29uc3QgcXVlcnlTdWJTdHJpbmcgb2YgcXVlcnlTdWJTdHJpbmdzKSB7XG4gICAgICAgIGNvbnN0IHNwbGl0UmVzdWx0cyA9IHF1ZXJ5U3ViU3RyaW5nLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgY29uc3Qga2V5ID0gc3BsaXRSZXN1bHRzWzBdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNwbGl0UmVzdWx0c1sxXTtcbiAgICAgICAgcXVlcmllc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBxdWVyaWVzO1xufVxuLyoqXG4gKiBBcHBlbmQgYSBzdHJpbmcgdG8gVVJMIHF1ZXJ5LlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZy5cbiAqIEBwYXJhbSBxdWVyeVBhcnRzIC0gU3RyaW5nIHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBVUkwgcXVlcnkuXG4gKiBAcmV0dXJucyBBbiB1cGRhdGVkIFVSTCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFRvVVJMUXVlcnkodXJsLCBxdWVyeVBhcnRzKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBxdWVyeSA9IHVybFBhcnNlZC5zZWFyY2g7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5ICs9IFwiJlwiICsgcXVlcnlQYXJ0cztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlQYXJ0cztcbiAgICB9XG4gICAgdXJsUGFyc2VkLnNlYXJjaCA9IHF1ZXJ5O1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogUm91bmRzIGEgZGF0ZSBvZmYgdG8gc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtXG4gKiBAcGFyYW0gd2l0aE1pbGxpc2Vjb25kcyAtIElmIHRydWUsIFlZWVktTU0tRERUaGg6bW06c3MuZmZmZmZmZlogd2lsbCBiZSByZXR1cm5lZDtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIFlZWVktTU0tRERUaGg6bW06c3NaIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBAcmV0dXJucyBEYXRlIHN0cmluZyBpbiBJU084MDYxIGZvcm1hdCwgd2l0aCBvciB3aXRob3V0IDcgbWlsbGlzZWNvbmRzIGNvbXBvbmVudFxuICovXG5mdW5jdGlvbiB0cnVuY2F0ZWRJU084MDYxRGF0ZShkYXRlLCB3aXRoTWlsbGlzZWNvbmRzID0gdHJ1ZSkge1xuICAgIC8vIERhdGUudG9JU09TdHJpbmcoKSB3aWxsIHJldHVybiBsaWtlIFwiMjAxOC0xMC0yOVQwNjozNDozNi4xMzlaXCJcbiAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgIHJldHVybiB3aXRoTWlsbGlzZWNvbmRzXG4gICAgICAgID8gZGF0ZVN0cmluZy5zdWJzdHJpbmcoMCwgZGF0ZVN0cmluZy5sZW5ndGggLSAxKSArIFwiMDAwMFwiICsgXCJaXCJcbiAgICAgICAgOiBkYXRlU3RyaW5nLnN1YnN0cmluZygwLCBkYXRlU3RyaW5nLmxlbmd0aCAtIDUpICsgXCJaXCI7XG59XG4vKipcbiAqIEJhc2U2NCBlbmNvZGUuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLVxuICovXG5mdW5jdGlvbiBiYXNlNjRlbmNvZGUoY29udGVudCkge1xuICAgIHJldHVybiAhY29yZVV0aWwuaXNOb2RlID8gYnRvYShjb250ZW50KSA6IEJ1ZmZlci5mcm9tKGNvbnRlbnQpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIDY0IGJ5dGVzIGJhc2U2NCBibG9jayBJRCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGJsb2NrSW5kZXggLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2NrSUQoYmxvY2tJRFByZWZpeCwgYmxvY2tJbmRleCkge1xuICAgIC8vIFRvIGdlbmVyYXRlIGEgNjQgYnl0ZXMgYmFzZTY0IHN0cmluZywgc291cmNlIHN0cmluZyBzaG91bGQgYmUgNDhcbiAgICBjb25zdCBtYXhTb3VyY2VTdHJpbmdMZW5ndGggPSA0ODtcbiAgICAvLyBBIGJsb2IgY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDEwMCwwMDAgdW5jb21taXR0ZWQgYmxvY2tzIGF0IGFueSBnaXZlbiB0aW1lXG4gICAgY29uc3QgbWF4QmxvY2tJbmRleExlbmd0aCA9IDY7XG4gICAgY29uc3QgbWF4QWxsb3dlZEJsb2NrSURQcmVmaXhMZW5ndGggPSBtYXhTb3VyY2VTdHJpbmdMZW5ndGggLSBtYXhCbG9ja0luZGV4TGVuZ3RoO1xuICAgIGlmIChibG9ja0lEUHJlZml4Lmxlbmd0aCA+IG1heEFsbG93ZWRCbG9ja0lEUHJlZml4TGVuZ3RoKSB7XG4gICAgICAgIGJsb2NrSURQcmVmaXggPSBibG9ja0lEUHJlZml4LnNsaWNlKDAsIG1heEFsbG93ZWRCbG9ja0lEUHJlZml4TGVuZ3RoKTtcbiAgICB9XG4gICAgY29uc3QgcmVzID0gYmxvY2tJRFByZWZpeCArXG4gICAgICAgIHBhZFN0YXJ0KGJsb2NrSW5kZXgudG9TdHJpbmcoKSwgbWF4U291cmNlU3RyaW5nTGVuZ3RoIC0gYmxvY2tJRFByZWZpeC5sZW5ndGgsIFwiMFwiKTtcbiAgICByZXR1cm4gYmFzZTY0ZW5jb2RlKHJlcyk7XG59XG4vKipcbiAqIERlbGF5IHNwZWNpZmllZCB0aW1lIGludGVydmFsLlxuICpcbiAqIEBwYXJhbSB0aW1lSW5NcyAtXG4gKiBAcGFyYW0gYWJvcnRlciAtXG4gKiBAcGFyYW0gYWJvcnRFcnJvciAtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlbGF5KHRpbWVJbk1zLCBhYm9ydGVyLCBhYm9ydEVycm9yKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCAqL1xuICAgICAgICBsZXQgdGltZW91dDtcbiAgICAgICAgY29uc3QgYWJvcnRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlamVjdChhYm9ydEVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWJvcnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYWJvcnRlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQocmVzb2x2ZUhhbmRsZXIsIHRpbWVJbk1zKTtcbiAgICAgICAgaWYgKGFib3J0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWJvcnRlci5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KClcbiAqXG4gKiBAcGFyYW0gY3VycmVudFN0cmluZyAtXG4gKiBAcGFyYW0gdGFyZ2V0TGVuZ3RoIC1cbiAqIEBwYXJhbSBwYWRTdHJpbmcgLVxuICovXG5mdW5jdGlvbiBwYWRTdGFydChjdXJyZW50U3RyaW5nLCB0YXJnZXRMZW5ndGgsIHBhZFN0cmluZyA9IFwiIFwiKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgZG9lc24ndCBrbm93IHRoaXMgY29kZSBuZWVkcyB0byBydW4gZG93bmxldmVsIHNvbWV0aW1lc1xuICAgIGlmIChTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyaW5nLnBhZFN0YXJ0KHRhcmdldExlbmd0aCwgcGFkU3RyaW5nKTtcbiAgICB9XG4gICAgcGFkU3RyaW5nID0gcGFkU3RyaW5nIHx8IFwiIFwiO1xuICAgIGlmIChjdXJyZW50U3RyaW5nLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgICByZXR1cm4gY3VycmVudFN0cmluZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGN1cnJlbnRTdHJpbmcubGVuZ3RoO1xuICAgICAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgY3VycmVudFN0cmluZztcbiAgICB9XG59XG4vKipcbiAqIElmIHR3byBzdHJpbmdzIGFyZSBlcXVhbCB3aGVuIGNvbXBhcmVkIGNhc2UgaW5zZW5zaXRpdmUuXG4gKlxuICogQHBhcmFtIHN0cjEgLVxuICogQHBhcmFtIHN0cjIgLVxuICovXG5mdW5jdGlvbiBpRXF1YWwoc3RyMSwgc3RyMikge1xuICAgIHJldHVybiBzdHIxLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHN0cjIudG9Mb2NhbGVMb3dlckNhc2UoKTtcbn1cbi8qKlxuICogRXh0cmFjdHMgYWNjb3VudCBuYW1lIGZyb20gdGhlIHVybFxuICogQHBhcmFtIHVybCAtIHVybCB0byBleHRyYWN0IHRoZSBhY2NvdW50IG5hbWUgZnJvbVxuICogQHJldHVybnMgd2l0aCB0aGUgYWNjb3VudCBuYW1lXG4gKi9cbmZ1bmN0aW9uIGdldEFjY291bnROYW1lRnJvbVVybCh1cmwpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IGFjY291bnROYW1lO1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChwYXJzZWRVcmwuaG9zdG5hbWUuc3BsaXQoXCIuXCIpWzFdID09PSBcImJsb2JcIikge1xuICAgICAgICAgICAgLy8gYCR7ZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sfTovLyR7YWNjb3VudE5hbWV9LmJsb2IuJHtlbmRwb2ludFN1ZmZpeH1gO1xuICAgICAgICAgICAgYWNjb3VudE5hbWUgPSBwYXJzZWRVcmwuaG9zdG5hbWUuc3BsaXQoXCIuXCIpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkpIHtcbiAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLi4uIEV4YW1wbGUgLSBodHRwOi8vMTkyLjAuMC4xMDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL1xuICAgICAgICAgICAgLy8gU2luZ2xlIHdvcmQgZG9tYWluIHdpdGhvdXQgYSBbZG90XSBpbiB0aGUgZW5kcG9pbnQuLi4gRXhhbXBsZSAtIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9cbiAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2RldnN0b3JlYWNjb3VudDEvXG4gICAgICAgICAgICBhY2NvdW50TmFtZSA9IHBhcnNlZFVybC5wYXRobmFtZS5zcGxpdChcIi9cIilbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBDdXN0b20gZG9tYWluIGNhc2U6IFwiaHR0cHM6Ly9jdXN0b21kb21haW4uY29tL2NvbnRhaW5lcm5hbWUvYmxvYlwiLlxuICAgICAgICAgICAgYWNjb3VudE5hbWUgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50TmFtZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBleHRyYWN0IGFjY291bnROYW1lIHdpdGggcHJvdmlkZWQgaW5mb3JtYXRpb24uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkge1xuICAgIGNvbnN0IGhvc3QgPSBwYXJzZWRVcmwuaG9zdDtcbiAgICAvLyBDYXNlIDE6IElwdjYsIHVzZSBhIGJyb2FkIHJlZ2V4IHRvIGZpbmQgb3V0IGNhbmRpZGF0ZXMgd2hvc2UgaG9zdCBjb250YWlucyB0d28gJzonLlxuICAgIC8vIENhc2UgMjogbG9jYWxob3N0KDpwb3J0KSBvciBob3N0LmRvY2tlci5pbnRlcm5hbCwgdXNlIGJyb2FkIHJlZ2V4IHRvIG1hdGNoIHBvcnQgcGFydC5cbiAgICAvLyBDYXNlIDM6IElwdjQsIHVzZSBicm9hZCByZWdleCB3aGljaCBqdXN0IGNoZWNrIGlmIGhvc3QgY29udGFpbnMgSXB2NC5cbiAgICAvLyBGb3IgdmFsaWQgaG9zdCBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9tYW43Lm9yZy9saW51eC9tYW4tcGFnZXMvbWFuNy9ob3N0bmFtZS43Lmh0bWwuXG4gICAgcmV0dXJuICgvXi4qOi4qOi4qJHxeKGxvY2FsaG9zdHxob3N0LmRvY2tlci5pbnRlcm5hbCkoOlswLTldKyk/JHxeKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKShcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKXszfSg6WzAtOV0rKT8kLy50ZXN0KGhvc3QpIHx8XG4gICAgICAgIChCb29sZWFuKHBhcnNlZFVybC5wb3J0KSAmJiBQYXRoU3R5bGVQb3J0cy5pbmNsdWRlcyhwYXJzZWRVcmwucG9ydCkpKTtcbn1cbi8qKlxuICogQ29udmVydCBUYWdzIHRvIGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB0YWdzIC1cbiAqL1xuZnVuY3Rpb24gdG9CbG9iVGFnc1N0cmluZyh0YWdzKSB7XG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB0YWdQYWlycyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRhZ3MpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YWdzLCBrZXkpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhZ3Nba2V5XTtcbiAgICAgICAgICAgIHRhZ1BhaXJzLnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFnUGFpcnMuam9pbihcIiZcIik7XG59XG4vKipcbiAqIENvbnZlcnQgVGFncyB0eXBlIHRvIEJsb2JUYWdzLlxuICpcbiAqIEBwYXJhbSB0YWdzIC1cbiAqL1xuZnVuY3Rpb24gdG9CbG9iVGFncyh0YWdzKSB7XG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSB7XG4gICAgICAgIGJsb2JUYWdTZXQ6IFtdLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGFncykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhZ3MsIGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFnc1trZXldO1xuICAgICAgICAgICAgcmVzLmJsb2JUYWdTZXQucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbi8qKlxuICogQ292ZXJ0IEJsb2JUYWdzIHRvIFRhZ3MgdHlwZS5cbiAqXG4gKiBAcGFyYW0gdGFncyAtXG4gKi9cbmZ1bmN0aW9uIHRvVGFncyh0YWdzKSB7XG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGJsb2JUYWcgb2YgdGFncy5ibG9iVGFnU2V0KSB7XG4gICAgICAgIHJlc1tibG9iVGFnLmtleV0gPSBibG9iVGFnLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLyoqXG4gKiBDb252ZXJ0IEJsb2JRdWVyeVRleHRDb25maWd1cmF0aW9uIHRvIFF1ZXJ5U2VyaWFsaXphdGlvbiB0eXBlLlxuICpcbiAqIEBwYXJhbSB0ZXh0Q29uZmlndXJhdGlvbiAtXG4gKi9cbmZ1bmN0aW9uIHRvUXVlcnlTZXJpYWxpemF0aW9uKHRleHRDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKHRleHRDb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3dpdGNoICh0ZXh0Q29uZmlndXJhdGlvbi5raW5kKSB7XG4gICAgICAgIGNhc2UgXCJjc3ZcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGVsaW1pdGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5TZXBhcmF0b3I6IHRleHRDb25maWd1cmF0aW9uLmNvbHVtblNlcGFyYXRvciB8fCBcIixcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkUXVvdGU6IHRleHRDb25maWd1cmF0aW9uLmZpZWxkUXVvdGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZFNlcGFyYXRvcjogdGV4dENvbmZpZ3VyYXRpb24ucmVjb3JkU2VwYXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlQ2hhcjogdGV4dENvbmZpZ3VyYXRpb24uZXNjYXBlQ2hhcmFjdGVyIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzUHJlc2VudDogdGV4dENvbmZpZ3VyYXRpb24uaGFzSGVhZGVycyB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwianNvblwiLFxuICAgICAgICAgICAgICAgICAgICBqc29uVGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZFNlcGFyYXRvcjogdGV4dENvbmZpZ3VyYXRpb24ucmVjb3JkU2VwYXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwiYXJyb3dcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHRleHRDb25maWd1cmF0aW9uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcInBhcnF1ZXRcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGFycXVldFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIEJsb2JRdWVyeVRleHRDb25maWd1cmF0aW9uLlwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZU9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKG9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgaWYgKCFvYmplY3RSZXBsaWNhdGlvblJlY29yZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoXCJwb2xpY3ktaWRcIiBpbiBvYmplY3RSZXBsaWNhdGlvblJlY29yZCkge1xuICAgICAgICAvLyBJZiB0aGUgZGljdGlvbmFyeSBjb250YWlucyBhIGtleSB3aXRoIHBvbGljeSBpZCwgd2UgYXJlIG5vdCByZXF1aXJlZCB0byBkbyBhbnkgcGFyc2luZyBzaW5jZVxuICAgICAgICAvLyB0aGUgcG9saWN5IGlkIHNob3VsZCBhbHJlYWR5IGJlIHN0b3JlZCBpbiB0aGUgT2JqZWN0UmVwbGljYXRpb25EZXN0aW5hdGlvblBvbGljeUlkLlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBvclByb3BlcnRpZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3RSZXBsaWNhdGlvblJlY29yZCkge1xuICAgICAgICBjb25zdCBpZHMgPSBrZXkuc3BsaXQoXCJfXCIpO1xuICAgICAgICBjb25zdCBwb2xpY3lQcmVmaXggPSBcIm9yLVwiO1xuICAgICAgICBpZiAoaWRzWzBdLnN0YXJ0c1dpdGgocG9saWN5UHJlZml4KSkge1xuICAgICAgICAgICAgaWRzWzBdID0gaWRzWzBdLnN1YnN0cmluZyhwb2xpY3lQcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICAgICAgcnVsZUlkOiBpZHNbMV0sXG4gICAgICAgICAgICByZXBsaWNhdGlvblN0YXR1czogb2JqZWN0UmVwbGljYXRpb25SZWNvcmRba2V5XSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcG9saWN5SW5kZXggPSBvclByb3BlcnRpZXMuZmluZEluZGV4KChwb2xpY3kpID0+IHBvbGljeS5wb2xpY3lJZCA9PT0gaWRzWzBdKTtcbiAgICAgICAgaWYgKHBvbGljeUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG9yUHJvcGVydGllc1twb2xpY3lJbmRleF0ucnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9yUHJvcGVydGllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwb2xpY3lJZDogaWRzWzBdLFxuICAgICAgICAgICAgICAgIHJ1bGVzOiBbcnVsZV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3JQcm9wZXJ0aWVzO1xufVxuZnVuY3Rpb24gaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhodHRwQXV0aG9yaXphdGlvbikge1xuICAgIHJldHVybiBodHRwQXV0aG9yaXphdGlvbiA/IGh0dHBBdXRob3JpemF0aW9uLnNjaGVtZSArIFwiIFwiICsgaHR0cEF1dGhvcml6YXRpb24udmFsdWUgOiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBCbG9iTmFtZVRvU3RyaW5nKG5hbWUpIHtcbiAgICBpZiAobmFtZS5lbmNvZGVkKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQobmFtZS5jb250ZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuYW1lLmNvbnRlbnQ7XG4gICAgfVxufVxuZnVuY3Rpb24gQ29udmVydEludGVybmFsUmVzcG9uc2VPZkxpc3RCbG9iRmxhdChpbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgaW50ZXJuYWxSZXNwb25zZSksIHsgc2VnbWVudDoge1xuICAgICAgICAgICAgYmxvYkl0ZW1zOiBpbnRlcm5hbFJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zLm1hcCgoYmxvYkl0ZW1JbnRlcmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYkl0ZW0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JJdGVtSW50ZXJhbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVyYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0gfSk7XG59XG5mdW5jdGlvbiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JIaWVyYXJjaHkoaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbnRlcm5hbFJlc3BvbnNlKSwgeyBzZWdtZW50OiB7XG4gICAgICAgICAgICBibG9iUHJlZml4ZXM6IChfYSA9IGludGVybmFsUmVzcG9uc2Uuc2VnbWVudC5ibG9iUHJlZml4ZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoKGJsb2JQcmVmaXhJbnRlcm5hbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JQcmVmaXggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JQcmVmaXhJbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iUHJlZml4SW50ZXJuYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JQcmVmaXg7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGJsb2JJdGVtczogaW50ZXJuYWxSZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcy5tYXAoKGJsb2JJdGVtSW50ZXJhbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JJdGVtID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iSXRlbUludGVyYWwpLCB7IG5hbWU6IEJsb2JOYW1lVG9TdHJpbmcoYmxvYkl0ZW1JbnRlcmFsLm5hbWUpIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBibG9iSXRlbTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9IH0pO1xufVxuZnVuY3Rpb24qIEV4dHJhY3RQYWdlUmFuZ2VJbmZvSXRlbXMoZ2V0UGFnZVJhbmdlc1NlZ21lbnQpIHtcbiAgICBsZXQgcGFnZVJhbmdlID0gW107XG4gICAgbGV0IGNsZWFyUmFuZ2UgPSBbXTtcbiAgICBpZiAoZ2V0UGFnZVJhbmdlc1NlZ21lbnQucGFnZVJhbmdlKVxuICAgICAgICBwYWdlUmFuZ2UgPSBnZXRQYWdlUmFuZ2VzU2VnbWVudC5wYWdlUmFuZ2U7XG4gICAgaWYgKGdldFBhZ2VSYW5nZXNTZWdtZW50LmNsZWFyUmFuZ2UpXG4gICAgICAgIGNsZWFyUmFuZ2UgPSBnZXRQYWdlUmFuZ2VzU2VnbWVudC5jbGVhclJhbmdlO1xuICAgIGxldCBwYWdlUmFuZ2VJbmRleCA9IDA7XG4gICAgbGV0IGNsZWFyUmFuZ2VJbmRleCA9IDA7XG4gICAgd2hpbGUgKHBhZ2VSYW5nZUluZGV4IDwgcGFnZVJhbmdlLmxlbmd0aCAmJiBjbGVhclJhbmdlSW5kZXggPCBjbGVhclJhbmdlLmxlbmd0aCkge1xuICAgICAgICBpZiAocGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5zdGFydCA8IGNsZWFyUmFuZ2VbY2xlYXJSYW5nZUluZGV4XS5zdGFydCkge1xuICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBwYWdlUmFuZ2VbcGFnZVJhbmdlSW5kZXhdLnN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZDogcGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5lbmQsXG4gICAgICAgICAgICAgICAgaXNDbGVhcjogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgKytwYWdlUmFuZ2VJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgICBzdGFydDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLnN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLmVuZCxcbiAgICAgICAgICAgICAgICBpc0NsZWFyOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICsrY2xlYXJSYW5nZUluZGV4O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoOyBwYWdlUmFuZ2VJbmRleCA8IHBhZ2VSYW5nZS5sZW5ndGg7ICsrcGFnZVJhbmdlSW5kZXgpIHtcbiAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgc3RhcnQ6IHBhZ2VSYW5nZVtwYWdlUmFuZ2VJbmRleF0uc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHBhZ2VSYW5nZVtwYWdlUmFuZ2VJbmRleF0uZW5kLFxuICAgICAgICAgICAgaXNDbGVhcjogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZvciAoOyBjbGVhclJhbmdlSW5kZXggPCBjbGVhclJhbmdlLmxlbmd0aDsgKytjbGVhclJhbmdlSW5kZXgpIHtcbiAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgc3RhcnQ6IGNsZWFyUmFuZ2VbY2xlYXJSYW5nZUluZGV4XS5zdGFydCxcbiAgICAgICAgICAgIGVuZDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLmVuZCxcbiAgICAgICAgICAgIGlzQ2xlYXI6IHRydWUsXG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqXG4gKiBFc2NhcGUgdGhlIGJsb2JOYW1lIGJ1dCBrZWVwIHBhdGggc2VwYXJhdG9yICgnLycpLlxuICovXG5mdW5jdGlvbiBFc2NhcGVQYXRoKGJsb2JOYW1lKSB7XG4gICAgY29uc3Qgc3BsaXQgPSBibG9iTmFtZS5zcGxpdChcIi9cIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBzcGxpdFtpXSA9IGVuY29kZVVSSUNvbXBvbmVudChzcGxpdFtpXSk7XG4gICAgfVxuICAgIHJldHVybiBzcGxpdC5qb2luKFwiL1wiKTtcbn1cbi8qKlxuICogQSB0eXBlc2FmZSBoZWxwZXIgZm9yIGVuc3VyaW5nIHRoYXQgYSBnaXZlbiByZXNwb25zZSBvYmplY3QgaGFzXG4gKiB0aGUgb3JpZ2luYWwgX3Jlc3BvbnNlIGF0dGFjaGVkLlxuICogQHBhcmFtIHJlc3BvbnNlIC0gQSByZXNwb25zZSBvYmplY3QgZnJvbSBjYWxsaW5nIGEgY2xpZW50IG9wZXJhdGlvblxuICogQHJldHVybnMgVGhlIHNhbWUgb2JqZWN0LCBidXQgd2l0aCBrbm93biBfcmVzcG9uc2UgcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICBpZiAoYF9yZXNwb25zZWAgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIHJlc3BvbnNlIG9iamVjdCAke3Jlc3BvbnNlfWApO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmV0cnlQb2xpY3kgdHlwZXMuXG4gKi9cbmV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZSA9IHZvaWQgMDtcbihmdW5jdGlvbiAoU3RvcmFnZVJldHJ5UG9saWN5VHlwZSkge1xuICAgIC8qKlxuICAgICAqIEV4cG9uZW50aWFsIHJldHJ5LiBSZXRyeSB0aW1lIGRlbGF5IGdyb3dzIGV4cG9uZW50aWFsbHkuXG4gICAgICovXG4gICAgU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1wiRVhQT05FTlRJQUxcIl0gPSAwXSA9IFwiRVhQT05FTlRJQUxcIjtcbiAgICAvKipcbiAgICAgKiBMaW5lYXIgcmV0cnkuIFJldHJ5IHRpbWUgZGVsYXkgZ3Jvd3MgbGluZWFybHkuXG4gICAgICovXG4gICAgU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1wiRklYRURcIl0gPSAxXSA9IFwiRklYRURcIjtcbn0pKGV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZSB8fCAoZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlID0ge30pKTtcbi8vIERlZmF1bHQgdmFsdWVzIG9mIFN0b3JhZ2VSZXRyeU9wdGlvbnNcbmNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxID0ge1xuICAgIG1heFJldHJ5RGVsYXlJbk1zOiAxMjAgKiAxMDAwLFxuICAgIG1heFRyaWVzOiA0LFxuICAgIHJldHJ5RGVsYXlJbk1zOiA0ICogMTAwMCxcbiAgICByZXRyeVBvbGljeVR5cGU6IGV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5FWFBPTkVOVElBTCxcbiAgICBzZWNvbmRhcnlIb3N0OiBcIlwiLFxuICAgIHRyeVRpbWVvdXRJbk1zOiB1bmRlZmluZWQsIC8vIFVzZSBzZXJ2ZXIgc2lkZSBkZWZhdWx0IHRpbWVvdXQgc3RyYXRlZ3lcbn07XG5jb25zdCBSRVRSWV9BQk9SVF9FUlJPUiQxID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4vKipcbiAqIFJldHJ5IHBvbGljeSB3aXRoIGV4cG9uZW50aWFsIHJldHJ5IGFuZCBsaW5lYXIgcmV0cnkgaW1wbGVtZW50ZWQuXG4gKi9cbmNsYXNzIFN0b3JhZ2VSZXRyeVBvbGljeSBleHRlbmRzIEJhc2VSZXF1ZXN0UG9saWN5IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJldHJ5UG9saWN5LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKiBAcGFyYW0gcmV0cnlPcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuZXh0UG9saWN5LCBvcHRpb25zLCByZXRyeU9wdGlvbnMgPSBERUZBVUxUX1JFVFJZX09QVElPTlMkMSkge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSByZXRyeSBvcHRpb25zXG4gICAgICAgIHRoaXMucmV0cnlPcHRpb25zID0ge1xuICAgICAgICAgICAgcmV0cnlQb2xpY3lUeXBlOiByZXRyeU9wdGlvbnMucmV0cnlQb2xpY3lUeXBlXG4gICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMucmV0cnlQb2xpY3lUeXBlXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5yZXRyeVBvbGljeVR5cGUsXG4gICAgICAgICAgICBtYXhUcmllczogcmV0cnlPcHRpb25zLm1heFRyaWVzICYmIHJldHJ5T3B0aW9ucy5tYXhUcmllcyA+PSAxXG4gICAgICAgICAgICAgICAgPyBNYXRoLmZsb29yKHJldHJ5T3B0aW9ucy5tYXhUcmllcylcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLm1heFRyaWVzLFxuICAgICAgICAgICAgdHJ5VGltZW91dEluTXM6IHJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5NcyAmJiByZXRyeU9wdGlvbnMudHJ5VGltZW91dEluTXMgPj0gMFxuICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLnRyeVRpbWVvdXRJbk1zXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS50cnlUaW1lb3V0SW5NcyxcbiAgICAgICAgICAgIHJldHJ5RGVsYXlJbk1zOiByZXRyeU9wdGlvbnMucmV0cnlEZWxheUluTXMgJiYgcmV0cnlPcHRpb25zLnJldHJ5RGVsYXlJbk1zID49IDBcbiAgICAgICAgICAgICAgICA/IE1hdGgubWluKHJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcywgcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zXG4gICAgICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zXG4gICAgICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEubWF4UmV0cnlEZWxheUluTXMpXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5yZXRyeURlbGF5SW5NcyxcbiAgICAgICAgICAgIG1heFJldHJ5RGVsYXlJbk1zOiByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMgJiYgcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zID49IDBcbiAgICAgICAgICAgICAgICA/IHJldHJ5T3B0aW9ucy5tYXhSZXRyeURlbGF5SW5Nc1xuICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEubWF4UmV0cnlEZWxheUluTXMsXG4gICAgICAgICAgICBzZWNvbmRhcnlIb3N0OiByZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdFxuICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLnNlY29uZGFyeUhvc3RcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnNlY29uZGFyeUhvc3QsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRlbXB0U2VuZFJlcXVlc3QocmVxdWVzdCwgZmFsc2UsIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNpZGUgYW5kIHBlcmZvcm0gbmV4dCByZXRyeS4gV29uJ3QgbXV0YXRlIHJlcXVlc3QgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqIEBwYXJhbSBzZWNvbmRhcnlIYXM0MDQgLSAgSWYgYXR0ZW1wdCB3YXMgYWdhaW5zdCB0aGUgc2Vjb25kYXJ5ICYgaXQgcmV0dXJuZWQgYSBTdGF0dXNOb3RGb3VuZCAoNDA0KSwgdGhlblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzb3VyY2Ugd2FzIG5vdCBmb3VuZC4gVGhpcyBtYXkgYmUgZHVlIHRvIHJlcGxpY2F0aW9uIGRlbGF5LiBTbywgaW4gdGhpc1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlLCB3ZSdsbCBuZXZlciB0cnkgdGhlIHNlY29uZGFyeSBhZ2FpbiBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIGF0dGVtcHQgLSAgICAgICAgICAgSG93IG1hbnkgcmV0cmllcyBoYXMgYmVlbiBhdHRlbXB0ZWQgdG8gcGVyZm9ybWVkLCBzdGFydGluZyBmcm9tIDEsIHdoaWNoIGluY2x1ZGVzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdHRlbXB0IHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHRoaXMgbWV0aG9kIGNhbGwuXG4gICAgICovXG4gICAgYXN5bmMgYXR0ZW1wdFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHNlY29uZGFyeUhhczQwNCwgYXR0ZW1wdCkge1xuICAgICAgICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSgpO1xuICAgICAgICBjb25zdCBpc1ByaW1hcnlSZXRyeSA9IHNlY29uZGFyeUhhczQwNCB8fFxuICAgICAgICAgICAgIXRoaXMucmV0cnlPcHRpb25zLnNlY29uZGFyeUhvc3QgfHxcbiAgICAgICAgICAgICEocmVxdWVzdC5tZXRob2QgPT09IFwiR0VUXCIgfHwgcmVxdWVzdC5tZXRob2QgPT09IFwiSEVBRFwiIHx8IHJlcXVlc3QubWV0aG9kID09PSBcIk9QVElPTlNcIikgfHxcbiAgICAgICAgICAgIGF0dGVtcHQgJSAyID09PSAxO1xuICAgICAgICBpZiAoIWlzUHJpbWFyeVJldHJ5KSB7XG4gICAgICAgICAgICBuZXdSZXF1ZXN0LnVybCA9IHNldFVSTEhvc3QobmV3UmVxdWVzdC51cmwsIHRoaXMucmV0cnlPcHRpb25zLnNlY29uZGFyeUhvc3QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgc2VydmVyLXNpZGUgdGltZW91dCBxdWVyeSBwYXJhbWV0ZXIgXCJ0aW1lb3V0PVtzZWNvbmRzXVwiXG4gICAgICAgIGlmICh0aGlzLnJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5Ncykge1xuICAgICAgICAgICAgbmV3UmVxdWVzdC51cmwgPSBzZXRVUkxQYXJhbWV0ZXIobmV3UmVxdWVzdC51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlRJTUVPVVQsIE1hdGguZmxvb3IodGhpcy5yZXRyeU9wdGlvbnMudHJ5VGltZW91dEluTXMgLyAxMDAwKS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6ID09PT09PiBUcnk9JHthdHRlbXB0fSAke2lzUHJpbWFyeVJldHJ5ID8gXCJQcmltYXJ5XCIgOiBcIlNlY29uZGFyeVwifWApO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9uZXh0UG9saWN5LnNlbmRSZXF1ZXN0KG5ld1JlcXVlc3QpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3VsZFJldHJ5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWNvbmRhcnlIYXM0MDQgPSBzZWNvbmRhcnlIYXM0MDQgfHwgKCFpc1ByaW1hcnlSZXRyeSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDQwNCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBSZXRyeVBvbGljeTogQ2F1Z2h0IGVycm9yLCBtZXNzYWdlOiAke2Vyci5tZXNzYWdlfSwgY29kZTogJHtlcnIuY29kZX1gKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRSZXRyeShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVzcG9uc2UsIGVycikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5kZWxheShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVxdWVzdC5hYm9ydFNpZ25hbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dGVtcHRTZW5kUmVxdWVzdChyZXF1ZXN0LCBzZWNvbmRhcnlIYXM0MDQsICsrYXR0ZW1wdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY2lkZSB3aGV0aGVyIHRvIHJldHJ5IGFjY29yZGluZyB0byBsYXN0IEhUVFAgcmVzcG9uc2UgYW5kIHJldHJ5IGNvdW50ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlzUHJpbWFyeVJldHJ5IC1cbiAgICAgKiBAcGFyYW0gYXR0ZW1wdCAtXG4gICAgICogQHBhcmFtIHJlc3BvbnNlIC1cbiAgICAgKiBAcGFyYW0gZXJyIC1cbiAgICAgKi9cbiAgICBzaG91bGRSZXRyeShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVzcG9uc2UsIGVycikge1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSB0aGlzLnJldHJ5T3B0aW9ucy5tYXhUcmllcykge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBBdHRlbXB0KHMpICR7YXR0ZW1wdH0gPj0gbWF4VHJpZXMgJHt0aGlzLnJldHJ5T3B0aW9uc1xuICAgICAgICAgICAgICAgIC5tYXhUcmllc30sIG5vIGZ1cnRoZXIgdHJ5LmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBuZXR3b3JrIGZhaWx1cmVzLCB5b3UgbWF5IG5lZWQgdG8gY3VzdG9taXplIHRoZSBsaXN0IHdoZW4geW91IGltcGxlbWVudFxuICAgICAgICAvLyB5b3VyIG93biBodHRwIGNsaWVudFxuICAgICAgICBjb25zdCByZXRyaWFibGVFcnJvcnMgPSBbXG4gICAgICAgICAgICBcIkVUSU1FRE9VVFwiLFxuICAgICAgICAgICAgXCJFU09DS0VUVElNRURPVVRcIixcbiAgICAgICAgICAgIFwiRUNPTk5SRUZVU0VEXCIsXG4gICAgICAgICAgICBcIkVDT05OUkVTRVRcIixcbiAgICAgICAgICAgIFwiRU5PRU5UXCIsXG4gICAgICAgICAgICBcIkVOT1RGT1VORFwiLFxuICAgICAgICAgICAgXCJUSU1FT1VUXCIsXG4gICAgICAgICAgICBcIkVQSVBFXCIsXG4gICAgICAgICAgICBcIlJFUVVFU1RfU0VORF9FUlJPUlwiLCAvLyBGb3IgZGVmYXVsdCB4aHIgYmFzZWQgaHR0cCBjbGllbnQgcHJvdmlkZWQgaW4gbXMtcmVzdC1qc1xuICAgICAgICBdO1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldHJpYWJsZUVycm9yIG9mIHJldHJpYWJsZUVycm9ycykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIubmFtZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZXJyLmNvZGUgJiYgZXJyLmNvZGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpID09PSByZXRyaWFibGVFcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBOZXR3b3JrIGVycm9yICR7cmV0cmlhYmxlRXJyb3J9IGZvdW5kLCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYXR0ZW1wdCB3YXMgYWdhaW5zdCB0aGUgc2Vjb25kYXJ5ICYgaXQgcmV0dXJuZWQgYSBTdGF0dXNOb3RGb3VuZCAoNDA0KSwgdGhlblxuICAgICAgICAvLyB0aGUgcmVzb3VyY2Ugd2FzIG5vdCBmb3VuZC4gVGhpcyBtYXkgYmUgZHVlIHRvIHJlcGxpY2F0aW9uIGRlbGF5LiBTbywgaW4gdGhpc1xuICAgICAgICAvLyBjYXNlLCB3ZSdsbCBuZXZlciB0cnkgdGhlIHNlY29uZGFyeSBhZ2FpbiBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICAgIGlmIChyZXNwb25zZSB8fCBlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IGVyciA/IGVyci5zdGF0dXNDb2RlIDogMDtcbiAgICAgICAgICAgIGlmICghaXNQcmltYXJ5UmV0cnkgJiYgc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBTZWNvbmRhcnkgYWNjZXNzIHdpdGggNDA0LCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2VydmVyIGludGVybmFsIGVycm9yIG9yIHNlcnZlciB0aW1lb3V0XG4gICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gNTAzIHx8IHN0YXR1c0NvZGUgPT09IDUwMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogV2lsbCByZXRyeSBmb3Igc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBbQ29weSBzb3VyY2UgZXJyb3IgY29kZV0gRmVhdHVyZSBpcyBwZW5kaW5nIG9uIHNlcnZpY2Ugc2lkZSwgc2tpcCByZXRyeSBvbiBjb3B5IHNvdXJjZSBlcnJvciBmb3Igbm93LlxuICAgICAgICAvLyBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy8gICAvLyBSZXRyeSBzZWxlY3QgQ29weSBTb3VyY2UgRXJyb3IgQ29kZXMuXG4gICAgICAgIC8vICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIC8vICAgICBjb25zdCBjb3B5U291cmNlRXJyb3IgPSByZXNwb25zZS5oZWFkZXJzLmdldChIZWFkZXJDb25zdGFudHMuWF9NU19Db3B5U291cmNlRXJyb3JDb2RlKTtcbiAgICAgICAgLy8gICAgIGlmIChjb3B5U291cmNlRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAgICAgICBzd2l0Y2ggKGNvcHlTb3VyY2VFcnJvcikge1xuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yXCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIk9wZXJhdGlvblRpbWVkT3V0XCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIlNlcnZlckJ1c3lcIjpcbiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIGlmICgoZXJyID09PSBudWxsIHx8IGVyciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyLmNvZGUpID09PSBcIlBBUlNFX0VSUk9SXCIgJiYgKGVyciA9PT0gbnVsbCB8fCBlcnIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoYEVycm9yIFwiRXJyb3I6IFVuY2xvc2VkIHJvb3QgdGFnYCkpKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhcIlJldHJ5UG9saWN5OiBJbmNvbXBsZXRlIFhNTCByZXNwb25zZSBsaWtlbHkgZHVlIHRvIHNlcnZpY2UgdGltZW91dCwgd2lsbCByZXRyeS5cIik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGF5IGEgY2FsY3VsYXRlZCB0aW1lIGJldHdlZW4gcmV0cmllcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc1ByaW1hcnlSZXRyeSAtXG4gICAgICogQHBhcmFtIGF0dGVtcHQgLVxuICAgICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtXG4gICAgICovXG4gICAgYXN5bmMgZGVsYXkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQsIGFib3J0U2lnbmFsKSB7XG4gICAgICAgIGxldCBkZWxheVRpbWVJbk1zID0gMDtcbiAgICAgICAgaWYgKGlzUHJpbWFyeVJldHJ5KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMucmV0cnlPcHRpb25zLnJldHJ5UG9saWN5VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMOlxuICAgICAgICAgICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gTWF0aC5taW4oKE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKSAtIDEpICogdGhpcy5yZXRyeU9wdGlvbnMucmV0cnlEZWxheUluTXMsIHRoaXMucmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBleHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeVR5cGUuRklYRUQ6XG4gICAgICAgICAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSB0aGlzLnJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gTWF0aC5yYW5kb20oKSAqIDEwMDA7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBEZWxheSBmb3IgJHtkZWxheVRpbWVJbk1zfW1zYCk7XG4gICAgICAgIHJldHVybiBkZWxheShkZWxheVRpbWVJbk1zLCBhYm9ydFNpZ25hbCwgUkVUUllfQUJPUlRfRVJST1IkMSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeSBpcyBhIGZhY3RvcnkgY2xhc3MgaGVscGluZyBnZW5lcmF0aW5nIHtAbGluayBTdG9yYWdlUmV0cnlQb2xpY3l9IG9iamVjdHMuXG4gKi9cbmNsYXNzIFN0b3JhZ2VSZXRyeVBvbGljeUZhY3Rvcnkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeS5cbiAgICAgKiBAcGFyYW0gcmV0cnlPcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihyZXRyeU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5yZXRyeU9wdGlvbnMgPSByZXRyeU9wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBTdG9yYWdlUmV0cnlQb2xpY3kgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjcmVhdGUobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VSZXRyeVBvbGljeShuZXh0UG9saWN5LCBvcHRpb25zLCB0aGlzLnJldHJ5T3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQ3JlZGVudGlhbCBwb2xpY3kgdXNlZCB0byBzaWduIEhUVFAoUykgcmVxdWVzdHMgYmVmb3JlIHNlbmRpbmcuIFRoaXMgaXMgYW5cbiAqIGFic3RyYWN0IGNsYXNzLlxuICovXG5jbGFzcyBDcmVkZW50aWFsUG9saWN5IGV4dGVuZHMgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIFNlbmRzIG91dCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25leHRQb2xpY3kuc2VuZFJlcXVlc3QodGhpcy5zaWduUmVxdWVzdChyZXF1ZXN0KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoaWxkIGNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2Qgd2l0aCByZXF1ZXN0IHNpZ25pbmcuIFRoaXMgbWV0aG9kXG4gICAgICogd2lsbCBiZSBleGVjdXRlZCBpbiB7QGxpbmsgc2VuZFJlcXVlc3R9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIHNpZ25SZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgLy8gQ2hpbGQgY2xhc3NlcyBtdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggcmVxdWVzdCBzaWduaW5nLiBUaGlzIG1ldGhvZFxuICAgICAgICAvLyB3aWxsIGJlIGV4ZWN1dGVkIGluIHNlbmRSZXF1ZXN0KCkuXG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKlxuICogV2UgbmVlZCB0byBpbWl0YXRlIC5OZXQgY3VsdHVyZS1hd2FyZSBzb3J0aW5nLCB3aGljaCBpcyB1c2VkIGluIHN0b3JhZ2Ugc2VydmljZS5cbiAqIEJlbG93IHRhYmxlcyBjb250YWluIHNvcnQta2V5cyBmb3IgZW4tVVMgY3VsdHVyZS5cbiAqL1xuY29uc3QgdGFibGVfbHYwID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4NzFjLCAweDAsIDB4NzFmLCAweDcyMSxcbiAgICAweDcyMywgMHg3MjUsIDB4MCwgMHgwLCAweDAsIDB4NzJkLCAweDgwMywgMHgwLCAweDAsIDB4NzMzLCAweDAsIDB4ZDAzLCAweGQxYSwgMHhkMWMsIDB4ZDFlLFxuICAgIDB4ZDIwLCAweGQyMiwgMHhkMjQsIDB4ZDI2LCAweGQyOCwgMHhkMmEsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHhlMDIsIDB4ZTA5LCAweGUwYSxcbiAgICAweGUxYSwgMHhlMjEsIDB4ZTIzLCAweGUyNSwgMHhlMmMsIDB4ZTMyLCAweGUzNSwgMHhlMzYsIDB4ZTQ4LCAweGU1MSwgMHhlNzAsIDB4ZTdjLCAweGU3ZSwgMHhlODksXG4gICAgMHhlOGEsIDB4ZTkxLCAweGU5OSwgMHhlOWYsIDB4ZWEyLCAweGVhNCwgMHhlYTYsIDB4ZWE3LCAweGVhOSwgMHgwLCAweDAsIDB4MCwgMHg3NDMsIDB4NzQ0LCAweDc0OCxcbiAgICAweGUwMiwgMHhlMDksIDB4ZTBhLCAweGUxYSwgMHhlMjEsIDB4ZTIzLCAweGUyNSwgMHhlMmMsIDB4ZTMyLCAweGUzNSwgMHhlMzYsIDB4ZTQ4LCAweGU1MSwgMHhlNzAsXG4gICAgMHhlN2MsIDB4ZTdlLCAweGU4OSwgMHhlOGEsIDB4ZTkxLCAweGU5OSwgMHhlOWYsIDB4ZWEyLCAweGVhNCwgMHhlYTYsIDB4ZWE3LCAweGVhOSwgMHgwLCAweDc0YyxcbiAgICAweDAsIDB4NzUwLCAweDAsXG5dKTtcbmNvbnN0IHRhYmxlX2x2MiA9IG5ldyBVaW50MzJBcnJheShbXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsXG4gICAgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMixcbiAgICAweDEyLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbl0pO1xuY29uc3QgdGFibGVfbHY0ID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHg4MDEyLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHg4MjEyLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbl0pO1xuZnVuY3Rpb24gY29tcGFyZUhlYWRlcihsaHMsIHJocykge1xuICAgIGlmIChpc0xlc3NUaGFuKGxocywgcmhzKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIHJldHVybiAxO1xufVxuZnVuY3Rpb24gaXNMZXNzVGhhbihsaHMsIHJocykge1xuICAgIGNvbnN0IHRhYmxlcyA9IFt0YWJsZV9sdjAsIHRhYmxlX2x2MiwgdGFibGVfbHY0XTtcbiAgICBsZXQgY3Vycl9sZXZlbCA9IDA7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBqID0gMDtcbiAgICB3aGlsZSAoY3Vycl9sZXZlbCA8IHRhYmxlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGN1cnJfbGV2ZWwgPT09IHRhYmxlcy5sZW5ndGggLSAxICYmIGkgIT09IGopIHtcbiAgICAgICAgICAgIHJldHVybiBpID4gajtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3ZWlnaHQxID0gaSA8IGxocy5sZW5ndGggPyB0YWJsZXNbY3Vycl9sZXZlbF1bbGhzW2ldLmNoYXJDb2RlQXQoMCldIDogMHgxO1xuICAgICAgICBjb25zdCB3ZWlnaHQyID0gaiA8IHJocy5sZW5ndGggPyB0YWJsZXNbY3Vycl9sZXZlbF1bcmhzW2pdLmNoYXJDb2RlQXQoMCldIDogMHgxO1xuICAgICAgICBpZiAod2VpZ2h0MSA9PT0gMHgxICYmIHdlaWdodDIgPT09IDB4MSkge1xuICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICsrY3Vycl9sZXZlbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWlnaHQxID09PSB3ZWlnaHQyKSB7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgICAgICArK2o7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2VpZ2h0MSA9PT0gMCkge1xuICAgICAgICAgICAgKytpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdlaWdodDIgPT09IDApIHtcbiAgICAgICAgICAgICsrajtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWlnaHQxIDwgd2VpZ2h0MjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIHNpZ24gSFRUUCByZXF1ZXN0IHdpdGggYSBzaGFyZWQga2V5LlxuICovXG5jbGFzcyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSBleHRlbmRzIENyZWRlbnRpYWxQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kuXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKiBAcGFyYW0gZmFjdG9yeSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmV4dFBvbGljeSwgb3B0aW9ucywgZmFjdG9yeSkge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2lnbnMgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBzaWduUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLlhfTVNfREFURSwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKTtcbiAgICAgICAgaWYgKHJlcXVlc3QuYm9keSAmJlxuICAgICAgICAgICAgKHR5cGVvZiByZXF1ZXN0LmJvZHkgPT09IFwic3RyaW5nXCIgfHwgcmVxdWVzdC5ib2R5ICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICByZXF1ZXN0LmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgsIEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcXVlc3QuYm9keSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xBTkdVQUdFKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfRU5DT0RJTkcpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9NRDUpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UWVBFKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkRBVEUpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTU9ESUZJRURfU0lOQ0UpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTUFUQ0gpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTk9ORV9NQVRDSCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9VTk1PRElGSUVEX1NJTkNFKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLlJBTkdFKSxcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpICtcbiAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgdGhpcy5nZXRDYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZyhyZXF1ZXN0KSArXG4gICAgICAgICAgICB0aGlzLmdldENhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyhyZXF1ZXN0KTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5mYWN0b3J5LmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04sIGBTaGFyZWRLZXkgJHt0aGlzLmZhY3RvcnkuYWNjb3VudE5hbWV9OiR7c2lnbmF0dXJlfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW1VSTF06JHtyZXF1ZXN0LnVybH1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtIRUFERVJTXToke3JlcXVlc3QuaGVhZGVycy50b1N0cmluZygpfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW1NUUklORyBUTyBTSUdOXToke0pTT04uc3RyaW5naWZ5KHN0cmluZ1RvU2lnbil9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbS0VZXTogJHtyZXF1ZXN0LmhlYWRlcnMuZ2V0KEhlYWRlckNvbnN0YW50cy5BVVRIT1JJWkFUSU9OKX1gKTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGhlYWRlciB2YWx1ZSBhY2NvcmRpbmcgdG8gc2hhcmVkIGtleSBzaWduIHJ1bGVzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKiBAcGFyYW0gaGVhZGVyTmFtZSAtXG4gICAgICovXG4gICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlcXVlc3QuaGVhZGVycy5nZXQoaGVhZGVyTmFtZSk7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gdXNpbmcgdmVyc2lvbiAyMDE1LTAyLTIxIG9yIGxhdGVyLCBpZiBDb250ZW50LUxlbmd0aCBpcyB6ZXJvLCB0aGVuXG4gICAgICAgIC8vIHNldCB0aGUgQ29udGVudC1MZW5ndGggcGFydCBvZiB0aGUgU3RyaW5nVG9TaWduIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgICAgaWYgKGhlYWRlck5hbWUgPT09IEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCAmJiB2YWx1ZSA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gY29uc3RydWN0IHRoZSBDYW5vbmljYWxpemVkSGVhZGVycyBwb3J0aW9uIG9mIHRoZSBzaWduYXR1cmUgc3RyaW5nLCBmb2xsb3cgdGhlc2Ugc3RlcHM6XG4gICAgICogMS4gUmV0cmlldmUgYWxsIGhlYWRlcnMgZm9yIHRoZSByZXNvdXJjZSB0aGF0IGJlZ2luIHdpdGggeC1tcy0sIGluY2x1ZGluZyB0aGUgeC1tcy1kYXRlIGhlYWRlci5cbiAgICAgKiAyLiBDb252ZXJ0IGVhY2ggSFRUUCBoZWFkZXIgbmFtZSB0byBsb3dlcmNhc2UuXG4gICAgICogMy4gU29ydCB0aGUgaGVhZGVycyBsZXhpY29ncmFwaGljYWxseSBieSBoZWFkZXIgbmFtZSwgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAqICAgIEVhY2ggaGVhZGVyIG1heSBhcHBlYXIgb25seSBvbmNlIGluIHRoZSBzdHJpbmcuXG4gICAgICogNC4gUmVwbGFjZSBhbnkgbGluZWFyIHdoaXRlc3BhY2UgaW4gdGhlIGhlYWRlciB2YWx1ZSB3aXRoIGEgc2luZ2xlIHNwYWNlLlxuICAgICAqIDUuIFRyaW0gYW55IHdoaXRlc3BhY2UgYXJvdW5kIHRoZSBjb2xvbiBpbiB0aGUgaGVhZGVyLlxuICAgICAqIDYuIEZpbmFsbHksIGFwcGVuZCBhIG5ldy1saW5lIGNoYXJhY3RlciB0byBlYWNoIGNhbm9uaWNhbGl6ZWQgaGVhZGVyIGluIHRoZSByZXN1bHRpbmcgbGlzdC5cbiAgICAgKiAgICBDb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHN0cmluZyBieSBjb25jYXRlbmF0aW5nIGFsbCBoZWFkZXJzIGluIHRoaXMgbGlzdCBpbnRvIGEgc2luZ2xlIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBnZXRDYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZyhyZXF1ZXN0KSB7XG4gICAgICAgIGxldCBoZWFkZXJzQXJyYXkgPSByZXF1ZXN0LmhlYWRlcnMuaGVhZGVyc0FycmF5KCkuZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKEhlYWRlckNvbnN0YW50cy5QUkVGSVhfRk9SX1NUT1JBR0UpO1xuICAgICAgICB9KTtcbiAgICAgICAgaGVhZGVyc0FycmF5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb21wYXJlSGVhZGVyKGEubmFtZS50b0xvd2VyQ2FzZSgpLCBiLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZW1vdmUgZHVwbGljYXRlIGhlYWRlcnNcbiAgICAgICAgaGVhZGVyc0FycmF5ID0gaGVhZGVyc0FycmF5LmZpbHRlcigodmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCAmJiB2YWx1ZS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFycmF5W2luZGV4IC0gMV0ubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ24gPSBcIlwiO1xuICAgICAgICBoZWFkZXJzQXJyYXkuZm9yRWFjaCgoaGVhZGVyKSA9PiB7XG4gICAgICAgICAgICBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbiArPSBgJHtoZWFkZXIubmFtZVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLnRyaW1SaWdodCgpfToke2hlYWRlci52YWx1ZS50cmltTGVmdCgpfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgd2ViUmVzb3VyY2UgY2Fub25pY2FsaXplZCByZXNvdXJjZSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgZ2V0Q2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFVSTFBhdGgocmVxdWVzdC51cmwpIHx8IFwiL1wiO1xuICAgICAgICBsZXQgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nID0gXCJcIjtcbiAgICAgICAgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nICs9IGAvJHt0aGlzLmZhY3RvcnkuYWNjb3VudE5hbWV9JHtwYXRofWA7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBnZXRVUkxRdWVyaWVzKHJlcXVlc3QudXJsKTtcbiAgICAgICAgY29uc3QgbG93ZXJjYXNlUXVlcmllcyA9IHt9O1xuICAgICAgICBpZiAocXVlcmllcykge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlLZXlzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBxdWVyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyaWVzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvd2VyY2FzZUtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBsb3dlcmNhc2VRdWVyaWVzW2xvd2VyY2FzZUtleV0gPSBxdWVyaWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5S2V5cy5wdXNoKGxvd2VyY2FzZUtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlLZXlzLnNvcnQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHF1ZXJ5S2V5cykge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyArPSBgXFxuJHtrZXl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KGxvd2VyY2FzZVF1ZXJpZXNba2V5XSl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIENyZWRlbnRpYWwgaXMgYW4gYWJzdHJhY3QgY2xhc3MgZm9yIEF6dXJlIFN0b3JhZ2UgSFRUUCByZXF1ZXN0cyBzaWduaW5nLiBUaGlzXG4gKiBjbGFzcyB3aWxsIGhvc3QgYW4gY3JlZGVudGlhbFBvbGljeUNyZWF0b3IgZmFjdG9yeSB3aGljaCBnZW5lcmF0ZXMgQ3JlZGVudGlhbFBvbGljeS5cbiAqL1xuY2xhc3MgQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFJlcXVlc3RQb2xpY3kgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIF9uZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gX29wdGlvbnMgLVxuICAgICAqL1xuICAgIGNyZWF0ZShfbmV4dFBvbGljeSwgX29wdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBjaGlsZHJlbiBjbGFzc2VzLlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgZm9yIGFjY291bnQga2V5IGF1dGhvcml6YXRpb24gb2YgQXp1cmUgU3RvcmFnZSBzZXJ2aWNlLlxuICovXG5jbGFzcyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCBleHRlbmRzIENyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwuXG4gICAgICogQHBhcmFtIGFjY291bnROYW1lIC1cbiAgICAgKiBAcGFyYW0gYWNjb3VudEtleSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYWNjb3VudE5hbWUsIGFjY291bnRLZXkpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnROYW1lO1xuICAgICAgICB0aGlzLmFjY291bnRLZXkgPSBCdWZmZXIuZnJvbShhY2NvdW50S2V5LCBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeShuZXh0UG9saWN5LCBvcHRpb25zLCB0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgaGFzaCBzaWduYXR1cmUgZm9yIGFuIEhUVFAgcmVxdWVzdCBvciBmb3IgYSBTQVMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyaW5nVG9TaWduIC1cbiAgICAgKi9cbiAgICBjb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIbWFjKFwic2hhMjU2XCIsIHRoaXMuYWNjb3VudEtleSkudXBkYXRlKHN0cmluZ1RvU2lnbiwgXCJ1dGY4XCIpLmRpZ2VzdChcImJhc2U2NFwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IGlzIHVzZWQgd2l0aCBIVFRQKFMpIHJlcXVlc3RzIHRoYXQgcmVhZCBwdWJsaWMgcmVzb3VyY2VzXG4gKiBvciBmb3IgdXNlIHdpdGggU2hhcmVkIEFjY2VzcyBTaWduYXR1cmVzIChTQVMpLlxuICovXG5jbGFzcyBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IGV4dGVuZHMgQ3JlZGVudGlhbFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5LlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgLy8gVGhlIGJhc2UgY2xhc3MgaGFzIGEgcHJvdGVjdGVkIGNvbnN0cnVjdG9yLiBBZGRpbmcgYSBwdWJsaWMgb25lIHRvIGVuYWJsZSBjb25zdHJ1Y3Rpbmcgb2YgdGhpcyBjbGFzcy5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZWxlc3MtY29uc3RydWN0b3IqL1xuICAgIGNvbnN0cnVjdG9yKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIobmV4dFBvbGljeSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQW5vbnltb3VzQ3JlZGVudGlhbCBwcm92aWRlcyBhIGNyZWRlbnRpYWxQb2xpY3lDcmVhdG9yIG1lbWJlciB1c2VkIHRvIGNyZWF0ZVxuICogQW5vbnltb3VzQ3JlZGVudGlhbFBvbGljeSBvYmplY3RzLiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IGlzIHVzZWQgd2l0aFxuICogSFRUUChTKSByZXF1ZXN0cyB0aGF0IHJlYWQgcHVibGljIHJlc291cmNlcyBvciBmb3IgdXNlIHdpdGggU2hhcmVkIEFjY2Vzc1xuICogU2lnbmF0dXJlcyAoU0FTKS5cbiAqL1xuY2xhc3MgQW5vbnltb3VzQ3JlZGVudGlhbCBleHRlbmRzIENyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3l9IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5KG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5sZXQgX2RlZmF1bHRIdHRwQ2xpZW50O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkRGVmYXVsdEh0dHBDbGllbnQoKSB7XG4gICAgaWYgKCFfZGVmYXVsdEh0dHBDbGllbnQpIHtcbiAgICAgICAgX2RlZmF1bHRIdHRwQ2xpZW50ID0gY29yZVJlc3RQaXBlbGluZS5jcmVhdGVEZWZhdWx0SHR0cENsaWVudCgpO1xuICAgIH1cbiAgICByZXR1cm4gX2RlZmF1bHRIdHRwQ2xpZW50O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBTdG9yYWdlQnJvd3NlclBvbGljeS5cbiAqL1xuY29uc3Qgc3RvcmFnZUJyb3dzZXJQb2xpY3lOYW1lID0gXCJzdG9yYWdlQnJvd3NlclBvbGljeVwiO1xuLyoqXG4gKiBzdG9yYWdlQnJvd3NlclBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIHByZXZlbnQgYnJvd3NlcnMgZnJvbSBjYWNoaW5nIHJlcXVlc3RzXG4gKiBhbmQgdG8gcmVtb3ZlIGNvb2tpZXMgYW5kIGV4cGxpY2l0IGNvbnRlbnQtbGVuZ3RoIGhlYWRlcnMuXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VCcm93c2VyUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHN0b3JhZ2VCcm93c2VyUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSBcIkdFVFwiIHx8IHJlcXVlc3QubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsID0gc2V0VVJMUGFyYW1ldGVyKHJlcXVlc3QudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5GT1JDRV9CUk9XU0VSX05PX0NBQ0hFLCBuZXcgRGF0ZSgpLmdldFRpbWUoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoSGVhZGVyQ29uc3RhbnRzLkNPT0tJRSk7XG4gICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gWEhSIHN0YW5kYXJkcywgY29udGVudC1sZW5ndGggc2hvdWxkIGJlIGZ1bGx5IGNvbnRyb2xsZWQgYnkgYnJvd3NlcnNcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIKTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBOYW1lIG9mIHRoZSB7QGxpbmsgc3RvcmFnZVJldHJ5UG9saWN5fVxuICovXG5jb25zdCBzdG9yYWdlUmV0cnlQb2xpY3lOYW1lID0gXCJzdG9yYWdlUmV0cnlQb2xpY3lcIjtcbi8qKlxuICogUmV0cnlQb2xpY3kgdHlwZXMuXG4gKi9cbnZhciBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlO1xuKGZ1bmN0aW9uIChTdG9yYWdlUmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgLyoqXG4gICAgICogRXhwb25lbnRpYWwgcmV0cnkuIFJldHJ5IHRpbWUgZGVsYXkgZ3Jvd3MgZXhwb25lbnRpYWxseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJFWFBPTkVOVElBTFwiXSA9IDBdID0gXCJFWFBPTkVOVElBTFwiO1xuICAgIC8qKlxuICAgICAqIExpbmVhciByZXRyeS4gUmV0cnkgdGltZSBkZWxheSBncm93cyBsaW5lYXJseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJGSVhFRFwiXSA9IDFdID0gXCJGSVhFRFwiO1xufSkoU3RvcmFnZVJldHJ5UG9saWN5VHlwZSB8fCAoU3RvcmFnZVJldHJ5UG9saWN5VHlwZSA9IHt9KSk7XG4vLyBEZWZhdWx0IHZhbHVlcyBvZiBTdG9yYWdlUmV0cnlPcHRpb25zXG5jb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgbWF4UmV0cnlEZWxheUluTXM6IDEyMCAqIDEwMDAsXG4gICAgbWF4VHJpZXM6IDQsXG4gICAgcmV0cnlEZWxheUluTXM6IDQgKiAxMDAwLFxuICAgIHJldHJ5UG9saWN5VHlwZTogU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5FWFBPTkVOVElBTCxcbiAgICBzZWNvbmRhcnlIb3N0OiBcIlwiLFxuICAgIHRyeVRpbWVvdXRJbk1zOiB1bmRlZmluZWQsIC8vIFVzZSBzZXJ2ZXIgc2lkZSBkZWZhdWx0IHRpbWVvdXQgc3RyYXRlZ3lcbn07XG5jb25zdCByZXRyaWFibGVFcnJvcnMgPSBbXG4gICAgXCJFVElNRURPVVRcIixcbiAgICBcIkVTT0NLRVRUSU1FRE9VVFwiLFxuICAgIFwiRUNPTk5SRUZVU0VEXCIsXG4gICAgXCJFQ09OTlJFU0VUXCIsXG4gICAgXCJFTk9FTlRcIixcbiAgICBcIkVOT1RGT1VORFwiLFxuICAgIFwiVElNRU9VVFwiLFxuICAgIFwiRVBJUEVcIixcbiAgICBcIlJFUVVFU1RfU0VORF9FUlJPUlwiLFxuXTtcbmNvbnN0IFJFVFJZX0FCT1JUX0VSUk9SID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4vKipcbiAqIFJldHJ5IHBvbGljeSB3aXRoIGV4cG9uZW50aWFsIHJldHJ5IGFuZCBsaW5lYXIgcmV0cnkgaW1wbGVtZW50ZWQuXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VSZXRyeVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICBjb25zdCByZXRyeVBvbGljeVR5cGUgPSAoX2EgPSBvcHRpb25zLnJldHJ5UG9saWN5VHlwZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLnJldHJ5UG9saWN5VHlwZTtcbiAgICBjb25zdCBtYXhUcmllcyA9IChfYiA9IG9wdGlvbnMubWF4VHJpZXMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5tYXhUcmllcztcbiAgICBjb25zdCByZXRyeURlbGF5SW5NcyA9IChfYyA9IG9wdGlvbnMucmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5yZXRyeURlbGF5SW5NcztcbiAgICBjb25zdCBtYXhSZXRyeURlbGF5SW5NcyA9IChfZCA9IG9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5tYXhSZXRyeURlbGF5SW5NcztcbiAgICBjb25zdCBzZWNvbmRhcnlIb3N0ID0gKF9lID0gb3B0aW9ucy5zZWNvbmRhcnlIb3N0KSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBERUZBVUxUX1JFVFJZX09QVElPTlMuc2Vjb25kYXJ5SG9zdDtcbiAgICBjb25zdCB0cnlUaW1lb3V0SW5NcyA9IChfZiA9IG9wdGlvbnMudHJ5VGltZW91dEluTXMpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy50cnlUaW1lb3V0SW5NcztcbiAgICBmdW5jdGlvbiBzaG91bGRSZXRyeSh7IGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyb3IsIH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4VHJpZXMpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogQXR0ZW1wdChzKSAke2F0dGVtcHR9ID49IG1heFRyaWVzICR7bWF4VHJpZXN9LCBubyBmdXJ0aGVyIHRyeS5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV0cmlhYmxlRXJyb3Igb2YgcmV0cmlhYmxlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLm5hbWUudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhyZXRyaWFibGVFcnJvcikgfHxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IuY29kZSAmJiBlcnJvci5jb2RlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSA9PT0gcmV0cmlhYmxlRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogTmV0d29yayBlcnJvciAke3JldHJpYWJsZUVycm9yfSBmb3VuZCwgd2lsbCByZXRyeS5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSkgPT09IFwiUEFSU0VfRVJST1JcIiAmJlxuICAgICAgICAgICAgICAgIChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKGBFcnJvciBcIkVycm9yOiBVbmNsb3NlZCByb290IHRhZ2ApKSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiUmV0cnlQb2xpY3k6IEluY29tcGxldGUgWE1MIHJlc3BvbnNlIGxpa2VseSBkdWUgdG8gc2VydmljZSB0aW1lb3V0LCB3aWxsIHJldHJ5LlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBhdHRlbXB0IHdhcyBhZ2FpbnN0IHRoZSBzZWNvbmRhcnkgJiBpdCByZXR1cm5lZCBhIFN0YXR1c05vdEZvdW5kICg0MDQpLCB0aGVuXG4gICAgICAgIC8vIHRoZSByZXNvdXJjZSB3YXMgbm90IGZvdW5kLiBUaGlzIG1heSBiZSBkdWUgdG8gcmVwbGljYXRpb24gZGVsYXkuIFNvLCBpbiB0aGlzXG4gICAgICAgIC8vIGNhc2UsIHdlJ2xsIG5ldmVyIHRyeSB0aGUgc2Vjb25kYXJ5IGFnYWluIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgICAgaWYgKHJlc3BvbnNlIHx8IGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gKF9iID0gKF9hID0gcmVzcG9uc2UgPT09IG51bGwgfHwgcmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3BvbnNlLnN0YXR1cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLnN0YXR1c0NvZGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDA7XG4gICAgICAgICAgICBpZiAoIWlzUHJpbWFyeVJldHJ5ICYmIHN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogU2Vjb25kYXJ5IGFjY2VzcyB3aXRoIDQwNCwgd2lsbCByZXRyeS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNlcnZlciBpbnRlcm5hbCBlcnJvciBvciBzZXJ2ZXIgdGltZW91dFxuICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDUwMyB8fCBzdGF0dXNDb2RlID09PSA1MDApIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IFdpbGwgcmV0cnkgZm9yIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0uYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gW0NvcHkgc291cmNlIGVycm9yIGNvZGVdIEZlYXR1cmUgaXMgcGVuZGluZyBvbiBzZXJ2aWNlIHNpZGUsIHNraXAgcmV0cnkgb24gY29weSBzb3VyY2UgZXJyb3IgZm9yIG5vdy5cbiAgICAgICAgLy8gaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIC8vICAgLy8gUmV0cnkgc2VsZWN0IENvcHkgU291cmNlIEVycm9yIENvZGVzLlxuICAgICAgICAvLyAgIGlmIChyZXNwb25zZT8uc3RhdHVzID49IDQwMCkge1xuICAgICAgICAvLyAgICAgY29uc3QgY29weVNvdXJjZUVycm9yID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoSGVhZGVyQ29uc3RhbnRzLlhfTVNfQ29weVNvdXJjZUVycm9yQ29kZSk7XG4gICAgICAgIC8vICAgICBpZiAoY29weVNvdXJjZUVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gICAgICAgc3dpdGNoIChjb3B5U291cmNlRXJyb3IpIHtcbiAgICAgICAgLy8gICAgICAgICBjYXNlIFwiSW50ZXJuYWxFcnJvclwiOlxuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJPcGVyYXRpb25UaW1lZE91dFwiOlxuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJTZXJ2ZXJCdXN5XCI6XG4gICAgICAgIC8vICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZURlbGF5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0KSB7XG4gICAgICAgIGxldCBkZWxheVRpbWVJbk1zID0gMDtcbiAgICAgICAgaWYgKGlzUHJpbWFyeVJldHJ5KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJldHJ5UG9saWN5VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5FWFBPTkVOVElBTDpcbiAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IE1hdGgubWluKChNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSkgLSAxKSAqIHJldHJ5RGVsYXlJbk1zLCBtYXhSZXRyeURlbGF5SW5Ncyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5GSVhFRDpcbiAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IHJldHJ5RGVsYXlJbk1zO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSBNYXRoLnJhbmRvbSgpICogMTAwMDtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IERlbGF5IGZvciAke2RlbGF5VGltZUluTXN9bXNgKTtcbiAgICAgICAgcmV0dXJuIGRlbGF5VGltZUluTXM7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHN0b3JhZ2VSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgc2VydmVyLXNpZGUgdGltZW91dCBxdWVyeSBwYXJhbWV0ZXIgXCJ0aW1lb3V0PVtzZWNvbmRzXVwiXG4gICAgICAgICAgICBpZiAodHJ5VGltZW91dEluTXMpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LnVybCA9IHNldFVSTFBhcmFtZXRlcihyZXF1ZXN0LnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuVElNRU9VVCwgU3RyaW5nKE1hdGguZmxvb3IodHJ5VGltZW91dEluTXMgLyAxMDAwKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJpbWFyeVVybCA9IHJlcXVlc3QudXJsO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kYXJ5VXJsID0gc2Vjb25kYXJ5SG9zdCA/IHNldFVSTEhvc3QocmVxdWVzdC51cmwsIHNlY29uZGFyeUhvc3QpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHNlY29uZGFyeUhhczQwNCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGF0dGVtcHQgPSAxO1xuICAgICAgICAgICAgbGV0IHJldHJ5QWdhaW4gPSB0cnVlO1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAgICAgd2hpbGUgKHJldHJ5QWdhaW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1ByaW1hcnlSZXRyeSA9IHNlY29uZGFyeUhhczQwNCB8fFxuICAgICAgICAgICAgICAgICAgICAhc2Vjb25kYXJ5VXJsIHx8XG4gICAgICAgICAgICAgICAgICAgICFbXCJHRVRcIiwgXCJIRUFEXCIsIFwiT1BUSU9OU1wiXS5pbmNsdWRlcyhyZXF1ZXN0Lm1ldGhvZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdCAlIDIgPT09IDE7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC51cmwgPSBpc1ByaW1hcnlSZXRyeSA/IHByaW1hcnlVcmwgOiBzZWNvbmRhcnlVcmw7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiA9PT09PT4gVHJ5PSR7YXR0ZW1wdH0gJHtpc1ByaW1hcnlSZXRyeSA/IFwiUHJpbWFyeVwiIDogXCJTZWNvbmRhcnlcIn1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlIYXM0MDQgPSBzZWNvbmRhcnlIYXM0MDQgfHwgKCFpc1ByaW1hcnlSZXRyeSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDQwNCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3JlUmVzdFBpcGVsaW5lLmlzUmVzdEVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5UG9saWN5OiBDYXVnaHQgZXJyb3IsIG1lc3NhZ2U6ICR7ZS5tZXNzYWdlfSwgY29kZTogJHtlLmNvZGV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5UG9saWN5OiBDYXVnaHQgZXJyb3IsIG1lc3NhZ2U6ICR7Y29yZVV0aWwuZ2V0RXJyb3JNZXNzYWdlKGUpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXRyeUFnYWluID0gc2hvdWxkUmV0cnkoeyBpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVzcG9uc2UsIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXRyeUFnYWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KGNhbGN1bGF0ZURlbGF5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0KSwgcmVxdWVzdC5hYm9ydFNpZ25hbCwgUkVUUllfQUJPUlRfRVJST1IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiBuZXcgY29yZVJlc3RQaXBlbGluZS5SZXN0RXJyb3IoXCJSZXRyeVBvbGljeSBmYWlsZWQgd2l0aG91dCBrbm93biBlcnJvci5cIik7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kuXG4gKi9cbmNvbnN0IHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5TmFtZSA9IFwic3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3lcIjtcbi8qKlxuICogc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kgaGFuZGxlcyBzaWduaW5nIHJlcXVlc3RzIHVzaW5nIHN0b3JhZ2UgYWNjb3VudCBrZXlzLlxuICovXG5mdW5jdGlvbiBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeShvcHRpb25zKSB7XG4gICAgZnVuY3Rpb24gc2lnblJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5YX01TX0RBVEUsIG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSk7XG4gICAgICAgIGlmIChyZXF1ZXN0LmJvZHkgJiZcbiAgICAgICAgICAgICh0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihyZXF1ZXN0LmJvZHkpKSAmJlxuICAgICAgICAgICAgcmVxdWVzdC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RILCBCdWZmZXIuYnl0ZUxlbmd0aChyZXF1ZXN0LmJvZHkpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgICAgICByZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEFOR1VBR0UpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfRU5DT0RJTkcpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX01ENSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UWVBFKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5EQVRFKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NT0RJRklFRF9TSU5DRSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTUFUQ0gpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX05PTkVfTUFUQ0gpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX1VOTU9ESUZJRURfU0lOQ0UpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLlJBTkdFKSxcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpICtcbiAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgZ2V0Q2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmcocmVxdWVzdCkgK1xuICAgICAgICAgICAgZ2V0Q2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nKHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYyhcInNoYTI1NlwiLCBvcHRpb25zLmFjY291bnRLZXkpXG4gICAgICAgICAgICAudXBkYXRlKHN0cmluZ1RvU2lnbiwgXCJ1dGY4XCIpXG4gICAgICAgICAgICAuZGlnZXN0KFwiYmFzZTY0XCIpO1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5BVVRIT1JJWkFUSU9OLCBgU2hhcmVkS2V5ICR7b3B0aW9ucy5hY2NvdW50TmFtZX06JHtzaWduYXR1cmV9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbVVJMXToke3JlcXVlc3QudXJsfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW0hFQURFUlNdOiR7cmVxdWVzdC5oZWFkZXJzLnRvU3RyaW5nKCl9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbU1RSSU5HIFRPIFNJR05dOiR7SlNPTi5zdHJpbmdpZnkoc3RyaW5nVG9TaWduKX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtLRVldOiAke3JlcXVlc3QuaGVhZGVycy5nZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04pfWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBoZWFkZXIgdmFsdWUgYWNjb3JkaW5nIHRvIHNoYXJlZCBrZXkgc2lnbiBydWxlcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hdXRoZW50aWNhdGUtd2l0aC1zaGFyZWQta2V5XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlcXVlc3QuaGVhZGVycy5nZXQoaGVhZGVyTmFtZSk7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gdXNpbmcgdmVyc2lvbiAyMDE1LTAyLTIxIG9yIGxhdGVyLCBpZiBDb250ZW50LUxlbmd0aCBpcyB6ZXJvLCB0aGVuXG4gICAgICAgIC8vIHNldCB0aGUgQ29udGVudC1MZW5ndGggcGFydCBvZiB0aGUgU3RyaW5nVG9TaWduIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgICAgaWYgKGhlYWRlck5hbWUgPT09IEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCAmJiB2YWx1ZSA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gY29uc3RydWN0IHRoZSBDYW5vbmljYWxpemVkSGVhZGVycyBwb3J0aW9uIG9mIHRoZSBzaWduYXR1cmUgc3RyaW5nLCBmb2xsb3cgdGhlc2Ugc3RlcHM6XG4gICAgICogMS4gUmV0cmlldmUgYWxsIGhlYWRlcnMgZm9yIHRoZSByZXNvdXJjZSB0aGF0IGJlZ2luIHdpdGggeC1tcy0sIGluY2x1ZGluZyB0aGUgeC1tcy1kYXRlIGhlYWRlci5cbiAgICAgKiAyLiBDb252ZXJ0IGVhY2ggSFRUUCBoZWFkZXIgbmFtZSB0byBsb3dlcmNhc2UuXG4gICAgICogMy4gU29ydCB0aGUgaGVhZGVycyBsZXhpY29ncmFwaGljYWxseSBieSBoZWFkZXIgbmFtZSwgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAqICAgIEVhY2ggaGVhZGVyIG1heSBhcHBlYXIgb25seSBvbmNlIGluIHRoZSBzdHJpbmcuXG4gICAgICogNC4gUmVwbGFjZSBhbnkgbGluZWFyIHdoaXRlc3BhY2UgaW4gdGhlIGhlYWRlciB2YWx1ZSB3aXRoIGEgc2luZ2xlIHNwYWNlLlxuICAgICAqIDUuIFRyaW0gYW55IHdoaXRlc3BhY2UgYXJvdW5kIHRoZSBjb2xvbiBpbiB0aGUgaGVhZGVyLlxuICAgICAqIDYuIEZpbmFsbHksIGFwcGVuZCBhIG5ldy1saW5lIGNoYXJhY3RlciB0byBlYWNoIGNhbm9uaWNhbGl6ZWQgaGVhZGVyIGluIHRoZSByZXN1bHRpbmcgbGlzdC5cbiAgICAgKiAgICBDb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHN0cmluZyBieSBjb25jYXRlbmF0aW5nIGFsbCBoZWFkZXJzIGluIHRoaXMgbGlzdCBpbnRvIGEgc2luZ2xlIHN0cmluZy5cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldENhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nKHJlcXVlc3QpIHtcbiAgICAgICAgbGV0IGhlYWRlcnNBcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgcmVxdWVzdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoSGVhZGVyQ29uc3RhbnRzLlBSRUZJWF9GT1JfU1RPUkFHRSkpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzQXJyYXkucHVzaCh7IG5hbWUsIHZhbHVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnNBcnJheS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29tcGFyZUhlYWRlcihhLm5hbWUudG9Mb3dlckNhc2UoKSwgYi5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBoZWFkZXJzXG4gICAgICAgIGhlYWRlcnNBcnJheSA9IGhlYWRlcnNBcnJheS5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDAgJiYgdmFsdWUubmFtZS50b0xvd2VyQ2FzZSgpID09PSBhcnJheVtpbmRleCAtIDFdLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGNhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nVG9TaWduID0gXCJcIjtcbiAgICAgICAgaGVhZGVyc0FycmF5LmZvckVhY2goKGhlYWRlcikgPT4ge1xuICAgICAgICAgICAgY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ24gKz0gYCR7aGVhZGVyLm5hbWVcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgIC50cmltUmlnaHQoKX06JHtoZWFkZXIudmFsdWUudHJpbUxlZnQoKX1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nVG9TaWduO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0VVJMUGF0aChyZXF1ZXN0LnVybCkgfHwgXCIvXCI7XG4gICAgICAgIGxldCBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgPSBcIlwiO1xuICAgICAgICBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgKz0gYC8ke29wdGlvbnMuYWNjb3VudE5hbWV9JHtwYXRofWA7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBnZXRVUkxRdWVyaWVzKHJlcXVlc3QudXJsKTtcbiAgICAgICAgY29uc3QgbG93ZXJjYXNlUXVlcmllcyA9IHt9O1xuICAgICAgICBpZiAocXVlcmllcykge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlLZXlzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBxdWVyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyaWVzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvd2VyY2FzZUtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBsb3dlcmNhc2VRdWVyaWVzW2xvd2VyY2FzZUtleV0gPSBxdWVyaWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5S2V5cy5wdXNoKGxvd2VyY2FzZUtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlLZXlzLnNvcnQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHF1ZXJ5S2V5cykge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyArPSBgXFxuJHtrZXl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KGxvd2VyY2FzZVF1ZXJpZXNba2V5XSl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHNpZ25SZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFN0b3JhZ2VCcm93c2VyUG9saWN5IHdpbGwgaGFuZGxlIGRpZmZlcmVuY2VzIGJldHdlZW4gTm9kZS5qcyBhbmQgYnJvd3NlciBydW50aW1lLCBpbmNsdWRpbmc6XG4gKlxuICogMS4gQnJvd3NlcnMgY2FjaGUgR0VUL0hFQUQgcmVxdWVzdHMgYnkgYWRkaW5nIGNvbmRpdGlvbmFsIGhlYWRlcnMgc3VjaCBhcyAnSUZfTU9ESUZJRURfU0lOQ0UnLlxuICogU3RvcmFnZUJyb3dzZXJQb2xpY3kgaXMgYSBwb2xpY3kgdXNlZCB0byBhZGQgYSB0aW1lc3RhbXAgcXVlcnkgdG8gR0VUL0hFQUQgcmVxdWVzdCBVUkxcbiAqIHRodXMgYXZvaWQgdGhlIGJyb3dzZXIgY2FjaGUuXG4gKlxuICogMi4gUmVtb3ZlIGNvb2tpZSBoZWFkZXIgZm9yIHNlY3VyaXR5XG4gKlxuICogMy4gUmVtb3ZlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlciB0byBhdm9pZCBicm93c2VycyB3YXJuaW5nXG4gKi9cbmNsYXNzIFN0b3JhZ2VCcm93c2VyUG9saWN5IGV4dGVuZHMgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZUJyb3dzZXJQb2xpY3kuXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICAvLyBUaGUgYmFzZSBjbGFzcyBoYXMgYSBwcm90ZWN0ZWQgY29uc3RydWN0b3IuIEFkZGluZyBhIHB1YmxpYyBvbmUgdG8gZW5hYmxlIGNvbnN0cnVjdGluZyBvZiB0aGlzIGNsYXNzLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlbGVzcy1jb25zdHJ1Y3RvciovXG4gICAgY29uc3RydWN0b3IobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgb3V0IHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmV4dFBvbGljeS5zZW5kUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QudG9VcHBlckNhc2UoKSA9PT0gXCJHRVRcIiB8fCByZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgcmVxdWVzdC51cmwgPSBzZXRVUkxQYXJhbWV0ZXIocmVxdWVzdC51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLkZPUkNFX0JST1dTRVJfTk9fQ0FDSEUsIG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5yZW1vdmUoSGVhZGVyQ29uc3RhbnRzLkNPT0tJRSk7XG4gICAgICAgIC8vIEFjY29yZGluZyB0byBYSFIgc3RhbmRhcmRzLCBjb250ZW50LWxlbmd0aCBzaG91bGQgYmUgZnVsbHkgY29udHJvbGxlZCBieSBicm93c2Vyc1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMucmVtb3ZlKEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9uZXh0UG9saWN5LnNlbmRSZXF1ZXN0KHJlcXVlc3QpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSBpcyBhIGZhY3RvcnkgY2xhc3MgaGVscGluZyBnZW5lcmF0aW5nIFN0b3JhZ2VCcm93c2VyUG9saWN5IG9iamVjdHMuXG4gKi9cbmNsYXNzIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNyZWF0ZShuZXh0UG9saWN5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUJyb3dzZXJQb2xpY3kobmV4dFBvbGljeSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3kuXG4gKi9cbmNvbnN0IHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeU5hbWUgPSBcIlN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeVwiO1xuLyoqXG4gKiBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3kgdG8gY29ycmVjdGx5IHNldCBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCByZXF1ZXN0IGJvZHkgbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3koKSB7XG4gICAgZnVuY3Rpb24gY29ycmVjdENvbnRlbnRMZW5ndGgocmVxdWVzdCkge1xuICAgICAgICBpZiAocmVxdWVzdC5ib2R5ICYmXG4gICAgICAgICAgICAodHlwZW9mIHJlcXVlc3QuYm9keSA9PT0gXCJzdHJpbmdcIiB8fCBCdWZmZXIuaXNCdWZmZXIocmVxdWVzdC5ib2R5KSkgJiZcbiAgICAgICAgICAgIHJlcXVlc3QuYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCwgQnVmZmVyLmJ5dGVMZW5ndGgocmVxdWVzdC5ib2R5KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogc3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgY29ycmVjdENvbnRlbnRMZW5ndGgocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBoZWxwZXIgdG8gZGVjaWRlIGlmIGEgZ2l2ZW4gYXJndW1lbnQgc2F0aXNmaWVzIHRoZSBQaXBlbGluZSBjb250cmFjdFxuICogQHBhcmFtIHBpcGVsaW5lIC0gQW4gYXJndW1lbnQgdGhhdCBtYXkgYmUgYSBQaXBlbGluZVxuICogQHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBzYXRpc2ZpZXMgdGhlIFBpcGVsaW5lIGNvbnRyYWN0XG4gKi9cbmZ1bmN0aW9uIGlzUGlwZWxpbmVMaWtlKHBpcGVsaW5lKSB7XG4gICAgaWYgKCFwaXBlbGluZSB8fCB0eXBlb2YgcGlwZWxpbmUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjYXN0UGlwZWxpbmUgPSBwaXBlbGluZTtcbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkoY2FzdFBpcGVsaW5lLmZhY3RvcmllcykgJiZcbiAgICAgICAgdHlwZW9mIGNhc3RQaXBlbGluZS5vcHRpb25zID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHR5cGVvZiBjYXN0UGlwZWxpbmUudG9TZXJ2aWNlQ2xpZW50T3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKTtcbn1cbi8qKlxuICogQSBQaXBlbGluZSBjbGFzcyBjb250YWluaW5nIEhUVFAgcmVxdWVzdCBwb2xpY2llcy5cbiAqIFlvdSBjYW4gY3JlYXRlIGEgZGVmYXVsdCBQaXBlbGluZSBieSBjYWxsaW5nIHtAbGluayBuZXdQaXBlbGluZX0uXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSBhIFBpcGVsaW5lIHdpdGggeW91ciBvd24gcG9saWNpZXMgYnkgdGhlIGNvbnN0cnVjdG9yIG9mIFBpcGVsaW5lLlxuICpcbiAqIFJlZmVyIHRvIHtAbGluayBuZXdQaXBlbGluZX0gYW5kIHByb3ZpZGVkIHBvbGljaWVzIGJlZm9yZSBpbXBsZW1lbnRpbmcgeW91clxuICogY3VzdG9taXplZCBQaXBlbGluZS5cbiAqL1xuY2xhc3MgUGlwZWxpbmUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUGlwZWxpbmUuIEN1c3RvbWl6ZSBIVFRQQ2xpZW50IGJ5IGltcGxlbWVudGluZyBJSHR0cENsaWVudCBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmFjdG9yaWVzIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZmFjdG9yaWVzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5mYWN0b3JpZXMgPSBmYWN0b3JpZXM7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyYW5zZmVyIFBpcGVsaW5lIG9iamVjdCB0byBTZXJ2aWNlQ2xpZW50T3B0aW9ucyBvYmplY3Qgd2hpY2ggaXMgcmVxdWlyZWQgYnlcbiAgICAgKiBTZXJ2aWNlQ2xpZW50IGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIFNlcnZpY2VDbGllbnRPcHRpb25zIG9iamVjdCBmcm9tIHRoaXMgUGlwZWxpbmUuXG4gICAgICovXG4gICAgdG9TZXJ2aWNlQ2xpZW50T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGh0dHBDbGllbnQ6IHRoaXMub3B0aW9ucy5odHRwQ2xpZW50LFxuICAgICAgICAgICAgcmVxdWVzdFBvbGljeUZhY3RvcmllczogdGhpcy5mYWN0b3JpZXMsXG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFBpcGVsaW5lIG9iamVjdCB3aXRoIENyZWRlbnRpYWwgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSAgU3VjaCBhcyBBbm9ueW1vdXNDcmVkZW50aWFsLCBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCBvciBhbnkgY3JlZGVudGlhbCBmcm9tIHRoZSBgQGF6dXJlL2lkZW50aXR5YCBwYWNrYWdlIHRvIGF1dGhlbnRpY2F0ZSByZXF1ZXN0cyB0byB0aGUgc2VydmljZS4gWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgVG9rZW5DcmVkZW50aWFsIGludGVyZmFjZS4gSWYgbm90IHNwZWNpZmllZCwgQW5vbnltb3VzQ3JlZGVudGlhbCBpcyB1c2VkLlxuICogQHBhcmFtIHBpcGVsaW5lT3B0aW9ucyAtIE9wdGlvbmFsLiBPcHRpb25zLlxuICogQHJldHVybnMgQSBuZXcgUGlwZWxpbmUgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBuZXdQaXBlbGluZShjcmVkZW50aWFsLCBwaXBlbGluZU9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghY3JlZGVudGlhbCkge1xuICAgICAgICBjcmVkZW50aWFsID0gbmV3IEFub255bW91c0NyZWRlbnRpYWwoKTtcbiAgICB9XG4gICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUoW10sIHBpcGVsaW5lT3B0aW9ucyk7XG4gICAgcGlwZWxpbmUuX2NyZWRlbnRpYWwgPSBjcmVkZW50aWFsO1xuICAgIHJldHVybiBwaXBlbGluZTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NEb3dubGV2ZWxQaXBlbGluZShwaXBlbGluZSkge1xuICAgIGNvbnN0IGtub3duRmFjdG9yeUZ1bmN0aW9ucyA9IFtcbiAgICAgICAgaXNBbm9ueW1vdXNDcmVkZW50aWFsLFxuICAgICAgICBpc1N0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsLFxuICAgICAgICBpc0NvcmVIdHRwQmVhcmVyVG9rZW5GYWN0b3J5LFxuICAgICAgICBpc1N0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSxcbiAgICAgICAgaXNTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5LFxuICAgICAgICBpc1N0b3JhZ2VUZWxlbWV0cnlQb2xpY3lGYWN0b3J5LFxuICAgICAgICBpc0NvcmVIdHRwUG9saWN5RmFjdG9yeSxcbiAgICBdO1xuICAgIGlmIChwaXBlbGluZS5mYWN0b3JpZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5vdmVsRmFjdG9yaWVzID0gcGlwZWxpbmUuZmFjdG9yaWVzLmZpbHRlcigoZmFjdG9yeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFrbm93bkZhY3RvcnlGdW5jdGlvbnMuc29tZSgoa25vd25GYWN0b3J5KSA9PiBrbm93bkZhY3RvcnkoZmFjdG9yeSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vdmVsRmFjdG9yaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaGFzSW5qZWN0b3IgPSBub3ZlbEZhY3Rvcmllcy5zb21lKChmYWN0b3J5KSA9PiBpc0luamVjdG9yUG9saWN5RmFjdG9yeShmYWN0b3J5KSk7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgYW55IGxlZnQgb3Zlciwgd3JhcCBpbiBhIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdyYXBwZWRQb2xpY2llczogY29yZUh0dHBDb21wYXQuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kobm92ZWxGYWN0b3JpZXMpLFxuICAgICAgICAgICAgICAgIGFmdGVyUmV0cnk6IGhhc0luamVjdG9yLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0Q29yZUNsaWVudE9wdGlvbnMocGlwZWxpbmUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgX2IgPSBwaXBlbGluZS5vcHRpb25zLCB7IGh0dHBDbGllbnQ6IHYxQ2xpZW50IH0gPSBfYiwgcmVzdE9wdGlvbnMgPSB0c2xpYi5fX3Jlc3QoX2IsIFtcImh0dHBDbGllbnRcIl0pO1xuICAgIGxldCBodHRwQ2xpZW50ID0gcGlwZWxpbmUuX2NvcmVIdHRwQ2xpZW50O1xuICAgIGlmICghaHR0cENsaWVudCkge1xuICAgICAgICBodHRwQ2xpZW50ID0gdjFDbGllbnQgPyBjb3JlSHR0cENvbXBhdC5jb252ZXJ0SHR0cENsaWVudCh2MUNsaWVudCkgOiBnZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCgpO1xuICAgICAgICBwaXBlbGluZS5fY29yZUh0dHBDbGllbnQgPSBodHRwQ2xpZW50O1xuICAgIH1cbiAgICBsZXQgY29yZVBpcGVsaW5lID0gcGlwZWxpbmUuX2NvcmVQaXBlbGluZTtcbiAgICBpZiAoIWNvcmVQaXBlbGluZSkge1xuICAgICAgICBjb25zdCBwYWNrYWdlRGV0YWlscyA9IGBhenNkay1qcy1henVyZS1zdG9yYWdlLWJsb2IvJHtTREtfVkVSU0lPTn1gO1xuICAgICAgICBjb25zdCB1c2VyQWdlbnRQcmVmaXggPSByZXN0T3B0aW9ucy51c2VyQWdlbnRPcHRpb25zICYmIHJlc3RPcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMudXNlckFnZW50UHJlZml4XG4gICAgICAgICAgICA/IGAke3Jlc3RPcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMudXNlckFnZW50UHJlZml4fSAke3BhY2thZ2VEZXRhaWxzfWBcbiAgICAgICAgICAgIDogYCR7cGFja2FnZURldGFpbHN9YDtcbiAgICAgICAgY29yZVBpcGVsaW5lID0gY29yZUNsaWVudC5jcmVhdGVDbGllbnRQaXBlbGluZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3RPcHRpb25zKSwgeyBsb2dnaW5nT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkSGVhZGVyTmFtZXM6IFN0b3JhZ2VCbG9iTG9nZ2luZ0FsbG93ZWRIZWFkZXJOYW1lcyxcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICBsb2dnZXI6IGxvZ2dlci5pbmZvLFxuICAgICAgICAgICAgfSwgdXNlckFnZW50T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHVzZXJBZ2VudFByZWZpeCxcbiAgICAgICAgICAgIH0sIHNlcmlhbGl6YXRpb25PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5WE1MOiBjb3JlWG1sLnN0cmluZ2lmeVhNTCxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVyT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBjdXN0b21pemVkIFhNTCBjaGFyIGtleSBvZiBcIiNcIiBzbyB3ZSBjYW4gZGVzZXJpYWxpemUgbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggXCJfXCIga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyS2V5OiBcIiNcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgZGVzZXJpYWxpemF0aW9uT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHBhcnNlWE1MOiBjb3JlWG1sLnBhcnNlWE1MLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHhtbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGN1c3RvbWl6ZWQgWE1MIGNoYXIga2V5IG9mIFwiI1wiIHNvIHdlIGNhbiBkZXNlcmlhbGl6ZSBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBcIl9cIiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbENoYXJLZXk6IFwiI1wiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9IH0pKTtcbiAgICAgICAgY29yZVBpcGVsaW5lLnJlbW92ZVBvbGljeSh7IHBoYXNlOiBcIlJldHJ5XCIgfSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5yZW1vdmVQb2xpY3koeyBuYW1lOiBjb3JlUmVzdFBpcGVsaW5lLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgfSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5KCkpO1xuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KHN0b3JhZ2VSZXRyeVBvbGljeShyZXN0T3B0aW9ucy5yZXRyeU9wdGlvbnMpLCB7IHBoYXNlOiBcIlJldHJ5XCIgfSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZUJyb3dzZXJQb2xpY3koKSk7XG4gICAgICAgIGNvbnN0IGRvd25sZXZlbFJlc3VsdHMgPSBwcm9jZXNzRG93bmxldmVsUGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICBpZiAoZG93bmxldmVsUmVzdWx0cykge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShkb3dubGV2ZWxSZXN1bHRzLndyYXBwZWRQb2xpY2llcywgZG93bmxldmVsUmVzdWx0cy5hZnRlclJldHJ5ID8geyBhZnRlclBoYXNlOiBcIlJldHJ5XCIgfSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWxGcm9tUGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICBpZiAoY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koY29yZVJlc3RQaXBlbGluZS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KHtcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsLFxuICAgICAgICAgICAgICAgIHNjb3BlczogKF9hID0gcmVzdE9wdGlvbnMuYXVkaWVuY2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFN0b3JhZ2VPQXV0aFNjb3BlcyxcbiAgICAgICAgICAgICAgICBjaGFsbGVuZ2VDYWxsYmFja3M6IHsgYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlOiBjb3JlQ2xpZW50LmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSB9LFxuICAgICAgICAgICAgfSksIHsgcGhhc2U6IFwiU2lnblwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSh7XG4gICAgICAgICAgICAgICAgYWNjb3VudE5hbWU6IGNyZWRlbnRpYWwuYWNjb3VudE5hbWUsXG4gICAgICAgICAgICAgICAgYWNjb3VudEtleTogY3JlZGVudGlhbC5hY2NvdW50S2V5LFxuICAgICAgICAgICAgfSksIHsgcGhhc2U6IFwiU2lnblwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBpcGVsaW5lLl9jb3JlUGlwZWxpbmUgPSBjb3JlUGlwZWxpbmU7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3RPcHRpb25zKSwgeyBhbGxvd0luc2VjdXJlQ29ubmVjdGlvbjogdHJ1ZSwgaHR0cENsaWVudCwgcGlwZWxpbmU6IGNvcmVQaXBlbGluZSB9KTtcbn1cbmZ1bmN0aW9uIGdldENyZWRlbnRpYWxGcm9tUGlwZWxpbmUocGlwZWxpbmUpIHtcbiAgICAvLyBzZWUgaWYgd2Ugc3F1aXJyZWxlZCBvbmUgYXdheSBvbiB0aGUgdHlwZSBpdHNlbGZcbiAgICBpZiAocGlwZWxpbmUuX2NyZWRlbnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lLl9jcmVkZW50aWFsO1xuICAgIH1cbiAgICAvLyBpZiBpdCBjYW1lIGZyb20gYW5vdGhlciBwYWNrYWdlLCBsb29wIG92ZXIgdGhlIGZhY3RvcmllcyBhbmQgbG9vayBmb3Igb25lIGxpa2UgYmVmb3JlXG4gICAgbGV0IGNyZWRlbnRpYWwgPSBuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpO1xuICAgIGZvciAoY29uc3QgZmFjdG9yeSBvZiBwaXBlbGluZS5mYWN0b3JpZXMpIHtcbiAgICAgICAgaWYgKGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGZhY3RvcnkuY3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgd29ya3MgaWYgdGhlIGZhY3RvcnkgaGFzIGJlZW4gYXR0YWNoZWQgYSBcImNyZWRlbnRpYWxcIiBwcm9wZXJ0eS5cbiAgICAgICAgICAgIC8vIFdlIGRvIHRoYXQgaW4gbmV3UGlwZWxpbmUoKSB3aGVuIHVzaW5nIFRva2VuQ3JlZGVudGlhbC5cbiAgICAgICAgICAgIGNyZWRlbnRpYWwgPSBmYWN0b3J5LmNyZWRlbnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChmYWN0b3J5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhY3Rvcnk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWw7XG59XG5mdW5jdGlvbiBpc1N0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGZhY3RvcnkpIHtcbiAgICBpZiAoZmFjdG9yeSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsXCI7XG59XG5mdW5jdGlvbiBpc0Fub255bW91c0NyZWRlbnRpYWwoZmFjdG9yeSkge1xuICAgIGlmIChmYWN0b3J5IGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJBbm9ueW1vdXNDcmVkZW50aWFsXCI7XG59XG5mdW5jdGlvbiBpc0NvcmVIdHRwQmVhcmVyVG9rZW5GYWN0b3J5KGZhY3RvcnkpIHtcbiAgICByZXR1cm4gY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoZmFjdG9yeS5jcmVkZW50aWFsKTtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICBpZiAoZmFjdG9yeSBpbnN0YW5jZW9mIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdG9yYWdlQnJvd3NlclBvbGljeUZhY3RvcnlcIjtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgaWYgKGZhY3RvcnkgaW5zdGFuY2VvZiBTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlN0b3JhZ2VSZXRyeVBvbGljeUZhY3RvcnlcIjtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZVRlbGVtZXRyeVBvbGljeUZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiVGVsZW1ldHJ5UG9saWN5RmFjdG9yeVwiO1xufVxuZnVuY3Rpb24gaXNJbmplY3RvclBvbGljeUZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiSW5qZWN0b3JQb2xpY3lGYWN0b3J5XCI7XG59XG5mdW5jdGlvbiBpc0NvcmVIdHRwUG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgY29uc3Qga25vd25Qb2xpY2llcyA9IFtcbiAgICAgICAgXCJHZW5lcmF0ZUNsaWVudFJlcXVlc3RJZFBvbGljeVwiLFxuICAgICAgICBcIlRyYWNpbmdQb2xpY3lcIixcbiAgICAgICAgXCJMb2dQb2xpY3lcIixcbiAgICAgICAgXCJQcm94eVBvbGljeVwiLFxuICAgICAgICBcIkRpc2FibGVSZXNwb25zZURlY29tcHJlc3Npb25Qb2xpY3lcIixcbiAgICAgICAgXCJLZWVwQWxpdmVQb2xpY3lcIixcbiAgICAgICAgXCJEZXNlcmlhbGl6YXRpb25Qb2xpY3lcIixcbiAgICBdO1xuICAgIGNvbnN0IG1vY2tIdHRwQ2xpZW50ID0ge1xuICAgICAgICBzZW5kUmVxdWVzdDogYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMuY2xvbmUoKSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBtb2NrUmVxdWVzdFBvbGljeU9wdGlvbnMgPSB7XG4gICAgICAgIGxvZyhfbG9nTGV2ZWwsIF9tZXNzYWdlKSB7XG4gICAgICAgICAgICAvKiBkbyBub3RoaW5nICovXG4gICAgICAgIH0sXG4gICAgICAgIHNob3VsZExvZyhfbG9nTGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHBvbGljeUluc3RhbmNlID0gZmFjdG9yeS5jcmVhdGUobW9ja0h0dHBDbGllbnQsIG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyk7XG4gICAgY29uc3QgcG9saWN5TmFtZSA9IHBvbGljeUluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgLy8gYnVuZGxlcnMgc29tZXRpbWVzIGFkZCBhIGN1c3RvbSBzdWZmaXggdG8gdGhlIGNsYXNzIG5hbWUgdG8gbWFrZSBpdCB1bmlxdWVcbiAgICByZXR1cm4ga25vd25Qb2xpY2llcy5zb21lKChrbm93blBvbGljeU5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHBvbGljeU5hbWUuc3RhcnRzV2l0aChrbm93blBvbGljeU5hbWUpO1xuICAgIH0pO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG5jb25zdCBCbG9iU2VydmljZVByb3BlcnRpZXMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlNlcnZpY2VQcm9wZXJ0aWVzXCIsXG4gICAgeG1sTmFtZTogXCJTdG9yYWdlU2VydmljZVByb3BlcnRpZXNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2VydmljZVByb3BlcnRpZXNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBibG9iQW5hbHl0aWNzTG9nZ2luZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJMb2dnaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob3VyTWV0cmljczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkhvdXJNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIb3VyTWV0cmljc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIk1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1pbnV0ZU1ldHJpY3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNaW51dGVNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNaW51dGVNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiTWV0cmljc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29yczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcnNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ29yc1J1bGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkNvcnNSdWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdFNlcnZpY2VWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVmYXVsdFNlcnZpY2VWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWZhdWx0U2VydmljZVZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVSZXRlbnRpb25Qb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbGV0ZVJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdGljV2Vic2l0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJTdGF0aWNXZWJzaXRlXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBMb2dnaW5nID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxvZ2dpbmdcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJMb2dnaW5nXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVQcm9wZXJ0eToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZWFkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWFkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiV3JpdGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIldyaXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJldGVudGlvblBvbGljeToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBSZXRlbnRpb25Qb2xpY3kgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF5czoge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgIEluY2x1c2l2ZU1pbmltdW06IDEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEYXlzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEYXlzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTWV0cmljcyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJNZXRyaWNzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiTWV0cmljc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5jbHVkZUFQSXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbmNsdWRlQVBJc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW5jbHVkZUFQSXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV0ZW50aW9uUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvcnNSdWxlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcnNSdWxlXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29yc1J1bGVcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhbGxvd2VkT3JpZ2luczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFsbG93ZWRPcmlnaW5zXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBbGxvd2VkT3JpZ2luc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWxsb3dlZE1ldGhvZHNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFsbG93ZWRNZXRob2RzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsb3dlZEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBbGxvd2VkSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQWxsb3dlZEhlYWRlcnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBvc2VkSGVhZGVyczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV4cG9zZWRIZWFkZXJzXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHBvc2VkSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heEFnZUluU2Vjb25kczoge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgIEluY2x1c2l2ZU1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXhBZ2VJblNlY29uZHNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1heEFnZUluU2Vjb25kc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFN0YXRpY1dlYnNpdGUgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmRleERvY3VtZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW5kZXhEb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW5kZXhEb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yRG9jdW1lbnQ0MDRQYXRoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXJyb3JEb2N1bWVudDQwNFBhdGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVycm9yRG9jdW1lbnQ0MDRQYXRoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdEluZGV4RG9jdW1lbnRQYXRoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVmYXVsdEluZGV4RG9jdW1lbnRQYXRoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWZhdWx0SW5kZXhEb2N1bWVudFBhdGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTdG9yYWdlRXJyb3IgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU3RvcmFnZUVycm9yXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU3RvcmFnZUVycm9yXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uRXJyb3JEZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBdXRoZW50aWNhdGlvbkVycm9yRGV0YWlsXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBdXRoZW50aWNhdGlvbkVycm9yRGV0YWlsXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNlcnZpY2VTdGF0aXN0aWNzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JTZXJ2aWNlU3RhdGlzdGljc1wiLFxuICAgIHhtbE5hbWU6IFwiU3RvcmFnZVNlcnZpY2VTdGF0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXJ2aWNlU3RhdGlzdGljc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGdlb1JlcGxpY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkdlb1JlcGxpY2F0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEdlb1JlcGxpY2F0aW9uID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkdlb1JlcGxpY2F0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTdGF0dXNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxpdmVcIiwgXCJib290c3RyYXBcIiwgXCJ1bmF2YWlsYWJsZVwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RTeW5jT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXN0U3luY1RpbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhc3RTeW5jVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlXCIsXG4gICAgeG1sTmFtZTogXCJFbnVtZXJhdGlvblJlc3VsdHNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNlcnZpY2VFbmRwb2ludDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJlZml4OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXJrZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heFBhZ2VTaXplOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRhaW5lckl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVySXRlbXNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRhaW5lcnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGludWF0aW9uVG9rZW46IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVySXRlbSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJJdGVtXCIsXG4gICAgeG1sTmFtZTogXCJDb250YWluZXJcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJJdGVtXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNZXRhZGF0YVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUHJvcGVydGllcyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJQcm9wZXJ0aWVzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUHJvcGVydGllc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXRhZ1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHVibGljQWNjZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHVibGljQWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQdWJsaWNBY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzSW1tdXRhYmlsaXR5UG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGFzSW1tdXRhYmlsaXR5UG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIYXNJbW11dGFiaWxpdHlQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzTGVnYWxIb2xkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGFzTGVnYWxIb2xkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIYXNMZWdhbEhvbGRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdEVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlZmF1bHRFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlZmF1bHRFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZW55RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbnlFbmNyeXB0aW9uU2NvcGVPdmVycmlkZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1haW5pbmdSZXRlbnRpb25EYXlzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkltbXV0YWJsZVN0b3JhZ2VXaXRoVmVyc2lvbmluZ0VuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkltbXV0YWJsZVN0b3JhZ2VXaXRoVmVyc2lvbmluZ0VuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgS2V5SW5mbyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJLZXlJbmZvXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiS2V5SW5mb1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0c09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHBpcnlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBVc2VyRGVsZWdhdGlvbktleSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJVc2VyRGVsZWdhdGlvbktleVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlVzZXJEZWxlZ2F0aW9uS2V5XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2lnbmVkT2JqZWN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRPaWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZE9pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZFRlbmFudElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkVGlkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRUaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduZWRTdGFydHNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZFN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRTdGFydFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZEV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZEV4cGlyeVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmVkU2VydmljZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZFNlcnZpY2VcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZFNlcnZpY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduZWRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZhbHVlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgRmlsdGVyQmxvYlNlZ21lbnQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiRmlsdGVyQmxvYlNlZ21lbnRcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkZpbHRlckJsb2JTZWdtZW50XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIldoZXJlXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJXaGVyZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JzXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkZpbHRlckJsb2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGludWF0aW9uVG9rZW46IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgRmlsdGVyQmxvYkl0ZW0gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiRmlsdGVyQmxvYkl0ZW1cIixcbiAgICB4bWxOYW1lOiBcIkJsb2JcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJGaWx0ZXJCbG9iSXRlbVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbmVyTmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVGFnc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVGFnc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVGFncyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iVGFnc1wiLFxuICAgIHhtbE5hbWU6IFwiVGFnc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYlRhZ1NldDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdTZXRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlRhZ1NldFwiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJUYWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVGFnID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdcIixcbiAgICB4bWxOYW1lOiBcIlRhZ1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJLZXlcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIktleVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZhbHVlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2lnbmVkSWRlbnRpZmllciA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgeG1sTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIklkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXNzUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFjY2Vzc1BvbGljeSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzdGFydHNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV4cGlyeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQZXJtaXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQZXJtaXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlXCIsXG4gICAgeG1sTmFtZTogXCJFbnVtZXJhdGlvblJlc3VsdHNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluZXJOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWZpeDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFya2VyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhQYWdlU2l6ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWdtZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VnbWVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRmxhdExpc3RTZWdtZW50XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRmxhdExpc3RTZWdtZW50ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JGbGF0TGlzdFNlZ21lbnRcIixcbiAgICB4bWxOYW1lOiBcIkJsb2JzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkZsYXRMaXN0U2VnbWVudFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGJsb2JJdGVtczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JJdGVtc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYkl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvYlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkl0ZW1JbnRlcm5hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JJdGVtSW50ZXJuYWwgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkl0ZW1JbnRlcm5hbFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYlwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JJdGVtSW50ZXJuYWxcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JOYW1lXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlZlcnNpb25JZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmVyc2lvbklkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDdXJyZW50VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklzQ3VycmVudFZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIklzQ3VycmVudFZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUHJvcGVydGllc0ludGVybmFsXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNZXRhZGF0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iVGFnczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJUYWdzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJPYmplY3RSZXBsaWNhdGlvbk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJPck1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc1ZlcnNpb25zT25seToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkhhc1ZlcnNpb25zT25seVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSGFzVmVyc2lvbnNPbmx5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JOYW1lID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JOYW1lXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYk5hbWVcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlbmNvZGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5jb2RlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5jb2RlZFwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudFwiLFxuICAgICAgICAgICAgICAgIHhtbElzTXNUZXh0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JQcm9wZXJ0aWVzSW50ZXJuYWwgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlByb3BlcnRpZXNJbnRlcm5hbFwiLFxuICAgIHhtbE5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JQcm9wZXJ0aWVzSW50ZXJuYWxcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjcmVhdGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDcmVhdGlvbi1UaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDcmVhdGlvbi1UaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LUxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LUVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LUVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LU1ENVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1NRDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LURpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LURpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ2FjaGUtQ29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ2FjaGUtQ29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iVHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUeXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iVHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkJsb2NrQmxvYlwiLCBcIlBhZ2VCbG9iXCIsIFwiQXBwZW5kQmxvYlwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weUlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5SWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29weVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTb3VyY2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5U291cmNlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5U291cmNlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVByb2dyZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weVByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5UHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5Q29tcGxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5Q29tcGxldGlvblRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlDb21wbGV0aW9uVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcHlTdGF0dXNEZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29weVN0YXR1c0Rlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmVyRW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2ZXJFbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5jcmVtZW50YWxDb3B5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW5jcmVtZW50YWxDb3B5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbmNyZW1lbnRhbENvcHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdGluYXRpb25TbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlc3RpbmF0aW9uU25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlc3RpbmF0aW9uU25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1haW5pbmdSZXRlbnRpb25EYXlzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBY2Nlc3NUaWVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NUaWVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQMTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDE1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlAyMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQMzBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDQwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA1MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDcwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA4MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJIb3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29vbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmNoaXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbGRcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXJJbmZlcnJlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1RpZXJJbmZlcnJlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQWNjZXNzVGllckluZmVycmVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFyY2hpdmVTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBcmNoaXZlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBcmNoaXZlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWh5ZHJhdGUtcGVuZGluZy10by1ob3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVoeWRyYXRlLXBlbmRpbmctdG8tY29vbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWh5ZHJhdGUtcGVuZGluZy10by1jb2xkXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ3VzdG9tZXJQcm92aWRlZEtleVNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ3VzdG9tZXJQcm92aWRlZEtleVNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5jcnlwdGlvblNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllckNoYW5nZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1RpZXJDaGFuZ2VUaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NUaWVyQ2hhbmdlVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVGFnQ291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlRhZ0NvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwaXJ5LVRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cGlyeS1UaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZWFsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZWFsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWh5ZHJhdGVQcmlvcml0eToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlJlaHlkcmF0ZVByaW9yaXR5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWh5ZHJhdGVQcmlvcml0eVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkhpZ2hcIiwgXCJTdGFuZGFyZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RBY2Nlc3NlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGFzdEFjY2Vzc1RpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhc3RBY2Nlc3NUaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW1tdXRhYmlsaXR5UG9saWN5VW50aWxEYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lVbnRpbERhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW1tdXRhYmlsaXR5UG9saWN5TW9kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW1tdXRhYmlsaXR5UG9saWN5TW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxlZ2FsSG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVnYWxIb2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IExpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJMaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2VcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNlcnZpY2VFbmRwb2ludDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbmVyTmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmaXg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hcmtlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4UGFnZVNpemU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVsaW1pdGVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsaW1pdGVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxpbWl0ZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWdtZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VnbWVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRpbnVhdGlvblRva2VuOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnRcIixcbiAgICB4bWxOYW1lOiBcIkJsb2JzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkhpZXJhcmNoeUxpc3RTZWdtZW50XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYlByZWZpeGVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlByZWZpeGVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iUHJlZml4ZXNcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iSXRlbXNcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJCbG9iXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSXRlbUludGVybmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlByZWZpeCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlByZWZpeFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYk5hbWVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrTG9va3VwTGlzdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0xvb2t1cExpc3RcIixcbiAgICB4bWxOYW1lOiBcIkJsb2NrTGlzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrTG9va3VwTGlzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbW1pdHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbW1pdHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuY29tbWl0dGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVW5jb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlVuY29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiVW5jb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGF0ZXN0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGF0ZXN0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMYXRlc3RcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJMYXRlc3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tMaXN0ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrTGlzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrTGlzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbW1pdHRlZEJsb2Nrczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbW1pdHRlZEJsb2Nrc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29tbWl0dGVkQmxvY2tzXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuY29tbWl0dGVkQmxvY2tzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVW5jb21taXR0ZWRCbG9ja3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlVuY29tbWl0dGVkQmxvY2tzXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpemU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaXplXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaXplXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUxpc3QgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUxpc3RcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlTGlzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHBhZ2VSYW5nZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhclJhbmdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlUmFuZ2UgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgeG1sTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ2xlYXJSYW5nZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgeG1sTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5kXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBRdWVyeVJlcXVlc3QgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUXVlcnlSZXF1ZXN0XCIsXG4gICAgeG1sTmFtZTogXCJRdWVyeVJlcXVlc3RcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVJlcXVlc3RcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBxdWVyeVR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeVR5cGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlF1ZXJ5VHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFeHByZXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHByZXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5wdXRTZXJpYWxpemF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW5wdXRTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbnB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG91dHB1dFNlcmlhbGl6YXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJPdXRwdXRTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJPdXRwdXRTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUXVlcnlTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBRdWVyeVNlcmlhbGl6YXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUXVlcnlTZXJpYWxpemF0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUXVlcnlTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJGb3JtYXRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeUZvcm1hdFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUXVlcnlGb3JtYXQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUXVlcnlGb3JtYXRcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeUZvcm1hdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJUeXBlXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJUeXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiZGVsaW1pdGVkXCIsIFwianNvblwiLCBcImFycm93XCIsIFwicGFycXVldFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGpzb25UZXh0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkpzb25UZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcnJvd0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFycXVldFRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUGFycXVldFRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQYXJxdWV0VGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiYW55XCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICB4bWxOYW1lOiBcIkRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb2x1bW5TZXBhcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb2x1bW5TZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbHVtblNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpZWxkUXVvdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJGaWVsZFF1b3RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJGaWVsZFF1b3RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVjb3JkU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlc2NhcGVDaGFyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXNjYXBlQ2hhclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXNjYXBlQ2hhclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNQcmVzZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGVhZGVyc1ByZXNlbnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhhc0hlYWRlcnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgSnNvblRleHRDb25maWd1cmF0aW9uID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkpzb25UZXh0Q29uZmlndXJhdGlvblwiLFxuICAgIHhtbE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVjb3JkU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcnJvd0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXJyb3dDb25maWd1cmF0aW9uXCIsXG4gICAgeG1sTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTY2hlbWFcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNjaGVtYVwiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJGaWVsZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQXJyb3dGaWVsZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFycm93RmllbGQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXJyb3dGaWVsZFwiLFxuICAgIHhtbE5hbWU6IFwiRmllbGRcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcnJvd0ZpZWxkXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWNpc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByZWNpc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJlY2lzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTY2FsZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2NhbGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9zZXRQcm9wZXJ0aWVzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTZXRQcm9wZXJ0aWVzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZVNldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2Vfc2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VHZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFN0YXRpc3RpY3NIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0U3RhdGlzdGljc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFN0YXRpc3RpY3NFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfbGlzdENvbnRhaW5lcnNTZWdtZW50SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2xpc3RDb250YWluZXJzU2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRBY2NvdW50SW5mb0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBza3VOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0dSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9SQUdSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9aUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlbWl1bV9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJGaWxlU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9ja0Jsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0hpZXJhcmNoaWNhbE5hbWVzcGFjZUVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9zdWJtaXRCYXRjaEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX3N1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VGaWx0ZXJCbG9ic0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9maWx0ZXJCbG9ic0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9maWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDcmVhdGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jcmVhdGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyQ3JlYXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyQ3JlYXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlRHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5maW5pdGVcIiwgXCJmaXhlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxvY2tlZFwiLCBcInVubG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iUHVibGljQWNjZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1wdWJsaWMtYWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiY29udGFpbmVyXCIsIFwiYmxvYlwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc0ltbXV0YWJpbGl0eVBvbGljeToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaGFzLWltbXV0YWJpbGl0eS1wb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaGFzLWltbXV0YWJpbGl0eS1wb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzTGVnYWxIb2xkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1oYXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1oYXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0RW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVmYXVsdC1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVueUVuY3J5cHRpb25TY29wZU92ZXJyaWRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmxlLXN0b3JhZ2Utd2l0aC12ZXJzaW9uaW5nLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmxlLXN0b3JhZ2Utd2l0aC12ZXJzaW9uaW5nLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyRGVsZXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZGVsZXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckRlbGV0ZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldE1ldGFkYXRhSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc2V0TWV0YWRhdGFIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9nZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGJsb2JQdWJsaWNBY2Nlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVzdG9yZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3Jlc3RvcmVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVzdG9yZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3Jlc3RvcmVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmFtZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmFtZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZW5hbWVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmFtZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZW5hbWVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJTdWJtaXRCYXRjaEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3N1Ym1pdEJhdGNoSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJGaWx0ZXJCbG9ic0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2ZpbHRlckJsb2JzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9maWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2FjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2FjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVsZWFzZUxlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZW5ld0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJCcmVha0xlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYnJlYWtMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJCcmVha0xlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlVGltZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQ2hhbmdlTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9saXN0QmxvYkZsYXRTZWdtZW50SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfbGlzdEJsb2JGbGF0U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2xpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2t1TmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0xSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9HUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfUkFHUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfWlJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlByZW1pdW1fTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NvdW50S2luZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlVjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRmlsZVN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQmxvY2tCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNIaWVyYXJjaGljYWxOYW1lc3BhY2VFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkRvd25sb2FkSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Rvd25sb2FkSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEb3dubG9hZEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNyZWF0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW9yLXBvbGljeS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1vci1wb2xpY3ktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3RSZXBsaWNhdGlvblJ1bGVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1vclwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1vci1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtb3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50UmFuZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXJhbmdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudEVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iVHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkJsb2NrQmxvYlwiLCBcIlBhZ2VCbG9iXCIsIFwiQXBwZW5kQmxvYlwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlDb21wbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1jb21wbGV0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1jb21wbGV0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzLWRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzLWRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5UHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTb3VyY2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJwZW5kaW5nXCIsIFwic3VjY2Vzc1wiLCBcImFib3J0ZWRcIiwgXCJmYWlsZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDdXJyZW50VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWN1cnJlbnQtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NlcHRSYW5nZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWdDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXRhZy1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VhbGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0QWNjZXNzZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxhc3QtYWNjZXNzLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJNdXRhYmxlXCIsIFwiVW5sb2NrZWRcIiwgXCJMb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkRvd25sb2FkRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Rvd25sb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyZWF0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY3JlYXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtbWV0YS1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3RSZXBsaWNhdGlvblBvbGljeUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1vci1wb2xpY3ktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtb3ItcG9saWN5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0UmVwbGljYXRpb25SdWxlczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtb3JcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtb3ItXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW9yXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUNvbXBsZXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSW5jcmVtZW50YWxDb3B5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbmNyZW1lbnRhbC1jb3B5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWluY3JlbWVudGFsLWNvcHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdGluYXRpb25TbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1kZXN0aW5hdGlvbi1zbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWRlc3RpbmF0aW9uLXNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsZWFzZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwaXJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicmVha2luZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicm9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NlcHRSYW5nZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NUaWVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXJJbmZlcnJlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjZXNzLXRpZXItaW5mZXJyZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjZXNzLXRpZXItaW5mZXJyZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXJjaGl2ZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYXJjaGl2ZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYXJjaGl2ZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NUaWVyQ2hhbmdlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1jaGFuZ2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1jaGFuZ2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDdXJyZW50VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWN1cnJlbnQtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWdDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXRhZy1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXhwaXJ5LXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXhwaXJ5LXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlYWxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZWFsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZWFsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZWh5ZHJhdGUtcHJpb3JpdHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJIaWdoXCIsIFwiU3RhbmRhcmRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0QWNjZXNzZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxhc3QtYWNjZXNzLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJNdXRhYmxlXCIsIFwiVW5sb2NrZWRcIiwgXCJMb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlVuZGVsZXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3VuZGVsZXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JVbmRlbGV0ZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3VuZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JVbmRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRFeHBpcnlIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0RXhwaXJ5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRFeHBpcnlIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEV4cGlyeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEh0dHBIZWFkZXJzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEh0dHBIZWFkZXJzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0SHR0cEhlYWRlcnNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0SW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9kZWxldGVJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TGVnYWxIb2xkSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldE1ldGFkYXRhSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldE1ldGFkYXRhSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRNZXRhZGF0YUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hY3F1aXJlTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JSZWxlYXNlTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVsZWFzZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3JlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlJlbmV3TGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVuZXdMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUmVuZXdMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDaGFuZ2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQnJlYWtMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9icmVha0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JCcmVha0xlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlVGltZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9icmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNyZWF0ZVNuYXBzaG90SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NyZWF0ZVNuYXBzaG90SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfY3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlN0YXJ0Q29weUZyb21VUkxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc3RhcnRDb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlN0YXJ0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDb3B5RnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ29weUZyb21VUkxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1czoge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWJvcnRDb3B5RnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hYm9ydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWJvcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRpZXJIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGllckhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGllckhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRUaWVyRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldFRpZXJFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0QWNjb3VudEluZm9IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2t1TmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0xSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9HUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfUkFHUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfWlJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlByZW1pdW1fTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NvdW50S2luZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlVjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRmlsZVN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQmxvY2tCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNIaWVyYXJjaGljYWxOYW1lc3BhY2VFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlF1ZXJ5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3F1ZXJ5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JRdWVyeUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtbWV0YS1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRSYW5nZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUNvbXBsZXRpb25UaW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlRHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5maW5pdGVcIiwgXCJmaXhlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxvY2tlZFwiLCBcInVubG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXB0UmFuZ2VzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYWNjZXB0LXJhbmdlc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiYWNjZXB0LXJhbmdlc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9xdWVyeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUXVlcnlFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0VGFnc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRUYWdzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JHZXRUYWdzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRhZ3NIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGFnc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGFnc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRhZ3NFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ3JlYXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jcmVhdGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDcmVhdGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl91cGxvYWRQYWdlc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBsb2FkUGFnZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfY2xlYXJQYWdlc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNsZWFyUGFnZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2dldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0RpZmZIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2dldFBhZ2VSYW5nZXNEaWZmRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlJlc2l6ZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfcmVzaXplSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iUmVzaXplSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JSZXNpemVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3Jlc2l6ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl91cGRhdGVTZXF1ZW5jZU51bWJlckV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NvcHlJbmNyZW1lbnRhbEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJwZW5kaW5nXCIsIFwic3VjY2Vzc1wiLCBcImFib3J0ZWRcIiwgXCJmYWlsZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ29weUluY3JlbWVudGFsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2NyZWF0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQ3JlYXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2NyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXBwZW5kQmxvYkFwcGVuZEJsb2NrSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JBcHBlbmRPZmZzZXQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXBwZW5kQmxvYl9hcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQXBwZW5kQmxvY2tFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrRnJvbVVybEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQXBwZW5kT2Zmc2V0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1hcHBlbmQtb2Zmc2V0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXBwZW5kQmxvYlNlYWxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2Jfc2VhbEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iU2VhbEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VhbGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iU2VhbEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXBwZW5kQmxvYl9zZWFsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iVXBsb2FkSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfdXBsb2FkSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlVwbG9hZEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfdXBsb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlVwbG9hZEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfcHV0QmxvYkZyb21VcmxIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfcHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2Jfc3RhZ2VCbG9ja0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2Jfc3RhZ2VCbG9ja0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX2NvbW1pdEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfY29tbWl0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX2dldEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfZ2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkdldEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxudmFyIE1hcHBlcnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIEFjY2Vzc1BvbGljeTogQWNjZXNzUG9saWN5LFxuICAgIEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzOiBBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVyczogQXBwZW5kQmxvYkNyZWF0ZUhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYlNlYWxFeGNlcHRpb25IZWFkZXJzOiBBcHBlbmRCbG9iU2VhbEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYlNlYWxIZWFkZXJzOiBBcHBlbmRCbG9iU2VhbEhlYWRlcnMsXG4gICAgQXJyb3dDb25maWd1cmF0aW9uOiBBcnJvd0NvbmZpZ3VyYXRpb24sXG4gICAgQXJyb3dGaWVsZDogQXJyb3dGaWVsZCxcbiAgICBCbG9iQWJvcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQWJvcnRDb3B5RnJvbVVSTEhlYWRlcnM6IEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnM6IEJsb2JBY3F1aXJlTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JCcmVha0xlYXNlSGVhZGVyczogQmxvYkJyZWFrTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkNoYW5nZUxlYXNlSGVhZGVyczogQmxvYkNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICBCbG9iQ29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzOiBCbG9iQ29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JDb3B5RnJvbVVSTEhlYWRlcnM6IEJsb2JDb3B5RnJvbVVSTEhlYWRlcnMsXG4gICAgQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVyczogQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQ3JlYXRlU25hcHNob3RIZWFkZXJzOiBCbG9iQ3JlYXRlU25hcHNob3RIZWFkZXJzLFxuICAgIEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzOiBCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iRGVsZXRlSGVhZGVyczogQmxvYkRlbGV0ZUhlYWRlcnMsXG4gICAgQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzOiBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyxcbiAgICBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzOiBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JEb3dubG9hZEhlYWRlcnM6IEJsb2JEb3dubG9hZEhlYWRlcnMsXG4gICAgQmxvYkZsYXRMaXN0U2VnbWVudDogQmxvYkZsYXRMaXN0U2VnbWVudCxcbiAgICBCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzOiBCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnM6IEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzOiBCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzOiBCbG9iR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgQmxvYkdldFRhZ3NFeGNlcHRpb25IZWFkZXJzOiBCbG9iR2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkdldFRhZ3NIZWFkZXJzOiBCbG9iR2V0VGFnc0hlYWRlcnMsXG4gICAgQmxvYkhpZXJhcmNoeUxpc3RTZWdtZW50OiBCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnQsXG4gICAgQmxvYkl0ZW1JbnRlcm5hbDogQmxvYkl0ZW1JbnRlcm5hbCxcbiAgICBCbG9iTmFtZTogQmxvYk5hbWUsXG4gICAgQmxvYlByZWZpeDogQmxvYlByZWZpeCxcbiAgICBCbG9iUHJvcGVydGllc0ludGVybmFsOiBCbG9iUHJvcGVydGllc0ludGVybmFsLFxuICAgIEJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlF1ZXJ5SGVhZGVyczogQmxvYlF1ZXJ5SGVhZGVycyxcbiAgICBCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYlJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnM6IEJsb2JSZWxlYXNlTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYlJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JSZW5ld0xlYXNlSGVhZGVyczogQmxvYlJlbmV3TGVhc2VIZWFkZXJzLFxuICAgIEJsb2JTZXJ2aWNlUHJvcGVydGllczogQmxvYlNlcnZpY2VQcm9wZXJ0aWVzLFxuICAgIEJsb2JTZXJ2aWNlU3RhdGlzdGljczogQmxvYlNlcnZpY2VTdGF0aXN0aWNzLFxuICAgIEJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0RXhwaXJ5SGVhZGVyczogQmxvYlNldEV4cGlyeUhlYWRlcnMsXG4gICAgQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVyczogQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0SHR0cEhlYWRlcnNIZWFkZXJzOiBCbG9iU2V0SHR0cEhlYWRlcnNIZWFkZXJzLFxuICAgIEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyczogQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnMsXG4gICAgQmxvYlNldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzOiBCbG9iU2V0TGVnYWxIb2xkSGVhZGVycyxcbiAgICBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRNZXRhZGF0YUhlYWRlcnM6IEJsb2JTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgQmxvYlNldFRhZ3NFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldFRhZ3NIZWFkZXJzOiBCbG9iU2V0VGFnc0hlYWRlcnMsXG4gICAgQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0VGllckV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldFRpZXJIZWFkZXJzOiBCbG9iU2V0VGllckhlYWRlcnMsXG4gICAgQmxvYlN0YXJ0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzOiBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlN0YXJ0Q29weUZyb21VUkxIZWFkZXJzOiBCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnMsXG4gICAgQmxvYlRhZzogQmxvYlRhZyxcbiAgICBCbG9iVGFnczogQmxvYlRhZ3MsXG4gICAgQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVyczogQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iVW5kZWxldGVIZWFkZXJzOiBCbG9iVW5kZWxldGVIZWFkZXJzLFxuICAgIEJsb2NrOiBCbG9jayxcbiAgICBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnM6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnMsXG4gICAgQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzLFxuICAgIEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsRXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsSGVhZGVyczogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JTdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnM6IEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVyczogQmxvY2tCbG9iU3RhZ2VCbG9ja0hlYWRlcnMsXG4gICAgQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzOiBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzLFxuICAgIEJsb2NrTGlzdDogQmxvY2tMaXN0LFxuICAgIEJsb2NrTG9va3VwTGlzdDogQmxvY2tMb29rdXBMaXN0LFxuICAgIENsZWFyUmFuZ2U6IENsZWFyUmFuZ2UsXG4gICAgQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzOiBDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzLFxuICAgIENvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJCcmVha0xlYXNlSGVhZGVyczogQ29udGFpbmVyQnJlYWtMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyQ2hhbmdlTGVhc2VIZWFkZXJzOiBDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyQ3JlYXRlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJDcmVhdGVIZWFkZXJzOiBDb250YWluZXJDcmVhdGVIZWFkZXJzLFxuICAgIENvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyRGVsZXRlSGVhZGVyczogQ29udGFpbmVyRGVsZXRlSGVhZGVycyxcbiAgICBDb250YWluZXJGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJGaWx0ZXJCbG9ic0hlYWRlcnM6IENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVycyxcbiAgICBDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnM6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0QWNjb3VudEluZm9IZWFkZXJzOiBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckdldFByb3BlcnRpZXNIZWFkZXJzOiBDb250YWluZXJHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBDb250YWluZXJJdGVtOiBDb250YWluZXJJdGVtLFxuICAgIENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50SGVhZGVyczogQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnMsXG4gICAgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzLFxuICAgIENvbnRhaW5lclByb3BlcnRpZXM6IENvbnRhaW5lclByb3BlcnRpZXMsXG4gICAgQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzOiBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzLFxuICAgIENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVuYW1lSGVhZGVyczogQ29udGFpbmVyUmVuYW1lSGVhZGVycyxcbiAgICBDb250YWluZXJSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnM6IENvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzLFxuICAgIENvbnRhaW5lclJlc3RvcmVFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZXN0b3JlSGVhZGVyczogQ29udGFpbmVyUmVzdG9yZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzOiBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzLFxuICAgIENvbnRhaW5lclNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclNldE1ldGFkYXRhSGVhZGVyczogQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzLFxuICAgIENvbnRhaW5lclN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVyczogQ29udGFpbmVyU3VibWl0QmF0Y2hIZWFkZXJzLFxuICAgIENvcnNSdWxlOiBDb3JzUnVsZSxcbiAgICBEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvbjogRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb24sXG4gICAgRmlsdGVyQmxvYkl0ZW06IEZpbHRlckJsb2JJdGVtLFxuICAgIEZpbHRlckJsb2JTZWdtZW50OiBGaWx0ZXJCbG9iU2VnbWVudCxcbiAgICBHZW9SZXBsaWNhdGlvbjogR2VvUmVwbGljYXRpb24sXG4gICAgSnNvblRleHRDb25maWd1cmF0aW9uOiBKc29uVGV4dENvbmZpZ3VyYXRpb24sXG4gICAgS2V5SW5mbzogS2V5SW5mbyxcbiAgICBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlOiBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlLFxuICAgIExpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZTogTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlLFxuICAgIExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlOiBMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZSxcbiAgICBMb2dnaW5nOiBMb2dnaW5nLFxuICAgIE1ldHJpY3M6IE1ldHJpY3MsXG4gICAgUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYkNsZWFyUGFnZXNIZWFkZXJzOiBQYWdlQmxvYkNsZWFyUGFnZXNIZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ29weUluY3JlbWVudGFsRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ29weUluY3JlbWVudGFsSGVhZGVyczogUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxIZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ3JlYXRlSGVhZGVyczogUGFnZUJsb2JDcmVhdGVIZWFkZXJzLFxuICAgIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVyczogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnMsXG4gICAgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzLFxuICAgIFBhZ2VCbG9iUmVzaXplRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JSZXNpemVFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iUmVzaXplSGVhZGVyczogUGFnZUJsb2JSZXNpemVIZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVyczogUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnM6IFBhZ2VCbG9iVXBsb2FkUGFnZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVyczogUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxIZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzOiBQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVycyxcbiAgICBQYWdlTGlzdDogUGFnZUxpc3QsXG4gICAgUGFnZVJhbmdlOiBQYWdlUmFuZ2UsXG4gICAgUXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0LFxuICAgIFF1ZXJ5UmVxdWVzdDogUXVlcnlSZXF1ZXN0LFxuICAgIFF1ZXJ5U2VyaWFsaXphdGlvbjogUXVlcnlTZXJpYWxpemF0aW9uLFxuICAgIFJldGVudGlvblBvbGljeTogUmV0ZW50aW9uUG9saWN5LFxuICAgIFNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUZpbHRlckJsb2JzSGVhZGVyczogU2VydmljZUZpbHRlckJsb2JzSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnM6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgU2VydmljZUdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUdldFByb3BlcnRpZXNIZWFkZXJzOiBTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgU2VydmljZUdldFN0YXRpc3RpY3NFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUdldFN0YXRpc3RpY3NIZWFkZXJzOiBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnMsXG4gICAgU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVyczogU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzLFxuICAgIFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50SGVhZGVyczogU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnMsXG4gICAgU2VydmljZVNldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZVNldFByb3BlcnRpZXNIZWFkZXJzOiBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyczogU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzOiBTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzLFxuICAgIFNpZ25lZElkZW50aWZpZXI6IFNpZ25lZElkZW50aWZpZXIsXG4gICAgU3RhdGljV2Vic2l0ZTogU3RhdGljV2Vic2l0ZSxcbiAgICBTdG9yYWdlRXJyb3I6IFN0b3JhZ2VFcnJvcixcbiAgICBVc2VyRGVsZWdhdGlvbktleTogVXNlckRlbGVnYXRpb25LZXlcbn0pO1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG5jb25zdCBjb250ZW50VHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29udGVudFR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iU2VydmljZVByb3BlcnRpZXMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJibG9iU2VydmljZVByb3BlcnRpZXNcIixcbiAgICBtYXBwZXI6IEJsb2JTZXJ2aWNlUHJvcGVydGllcyxcbn07XG5jb25zdCBhY2NlcHQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY2NlcHRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFwcGxpY2F0aW9uL3htbFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBY2NlcHRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHVybCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInVybFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ1cmxcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwidXJsXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBza2lwRW5jb2Rpbmc6IHRydWUsXG59O1xuY29uc3QgcmVzdHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInJlc3R5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInNlcnZpY2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicmVzdHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInByb3BlcnRpZXNcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdGltZW91dEluU2Vjb25kcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwidGltZW91dEluU2Vjb25kc1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgIEluY2x1c2l2ZU1pbmltdW06IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInRpbWVvdXRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ0aW1lb3V0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB2ZXJzaW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwidmVyc2lvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiMjAyNC0xMS0wNFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJlcXVlc3RJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmVxdWVzdElkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWNjZXB0MSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjY2VwdFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24veG1sXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2VwdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzdGF0c1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImxpc3RcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcHJlZml4ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJwcmVmaXhcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInByZWZpeFwiLFxuICAgICAgICB4bWxOYW1lOiBcInByZWZpeFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbWFya2VyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtYXJrZXJcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIm1hcmtlclwiLFxuICAgICAgICB4bWxOYW1lOiBcIm1hcmtlclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbWF4UGFnZVNpemUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1heFBhZ2VTaXplXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibWF4cmVzdWx0c1wiLFxuICAgICAgICB4bWxOYW1lOiBcIm1heHJlc3VsdHNcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGluY2x1ZGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImluY2x1ZGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImluY2x1ZGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJpbmNsdWRlXCIsXG4gICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkxpc3RDb250YWluZXJzSW5jbHVkZVR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIm1ldGFkYXRhXCIsIFwiZGVsZXRlZFwiLCBcInN5c3RlbVwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIGNvbGxlY3Rpb25Gb3JtYXQ6IFwiQ1NWXCIsXG59O1xuY29uc3Qga2V5SW5mbyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImtleUluZm9cIixcbiAgICBtYXBwZXI6IEtleUluZm8sXG59O1xuY29uc3QgY29tcDMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJ1c2VyZGVsZWdhdGlvbmtleVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByZXN0eXBlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInJlc3R5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFjY291bnRcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicmVzdHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYm9keSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJvZHlcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYm9keVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJib2R5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyZWFtXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wNCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImJhdGNoXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbnRlbnRMZW5ndGggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb250ZW50TGVuZ3RoXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtdWx0aXBhcnRDb250ZW50VHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcIm11bHRpcGFydENvbnRlbnRUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYmxvYnNcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgd2hlcmUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIndoZXJlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ3aGVyZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIndoZXJlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByZXN0eXBlMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInJlc3R5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNvbnRhaW5lclwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJyZXN0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtZXRhZGF0YSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibWV0YWRhdGFcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtbWV0YS1cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWNjZXNzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJhY2Nlc3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1wdWJsaWMtYWNjZXNzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVmYXVsdEVuY3J5cHRpb25TY29wZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcImNvbnRhaW5lckVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICBcImRlZmF1bHRFbmNyeXB0aW9uU2NvcGVcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlZmF1bHQtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVmYXVsdC1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJjb250YWluZXJFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgXCJwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGVcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbnktZW5jcnlwdGlvbi1zY29wZS1vdmVycmlkZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVhc2VJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibGVhc2VBY2Nlc3NDb25kaXRpb25zXCIsIFwibGVhc2VJZFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmTW9kaWZpZWRTaW5jZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZNb2RpZmllZFNpbmNlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZi1Nb2RpZmllZC1TaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIklmLU1vZGlmaWVkLVNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZlVubW9kaWZpZWRTaW5jZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZVbm1vZGlmaWVkU2luY2VcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJJZi1Vbm1vZGlmaWVkLVNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wNiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIm1ldGFkYXRhXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA3ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYWNsXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbnRhaW5lckFjbCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29udGFpbmVyQWNsXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250YWluZXJBY2xcIixcbiAgICAgICAgeG1sTmFtZTogXCJTaWduZWRJZGVudGlmaWVyc1wiLFxuICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA4ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidW5kZWxldGVcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVsZXRlZENvbnRhaW5lck5hbWUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImRlbGV0ZWRDb250YWluZXJOYW1lXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLW5hbWVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLW5hbWVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGRlbGV0ZWRDb250YWluZXJWZXJzaW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJkZWxldGVkQ29udGFpbmVyVmVyc2lvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZWxldGVkLWNvbnRhaW5lci12ZXJzaW9uXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWxldGVkLWNvbnRhaW5lci12ZXJzaW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wOSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInJlbmFtZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VDb250YWluZXJOYW1lID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwic291cmNlQ29udGFpbmVyTmFtZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250YWluZXItbmFtZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250YWluZXItbmFtZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlTGVhc2VJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlTGVhc2VJZFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtbGVhc2UtaWRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDEwID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwibGVhc2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWN0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhY3F1aXJlXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkdXJhdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZHVyYXRpb25cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcm9wb3NlZExlYXNlSWQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByb3Bvc2VkTGVhc2VJZFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcHJvcG9zZWQtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInJlbGVhc2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGxlYXNlSWQxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwibGVhc2VJZFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInJlbmV3XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY3Rpb24zID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJicmVha1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYnJlYWtQZXJpb2QgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImJyZWFrUGVyaW9kXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWJyZWFrLXBlcmlvZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtYnJlYWstcGVyaW9kXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY3Rpb240ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJjaGFuZ2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByb3Bvc2VkTGVhc2VJZDEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJwcm9wb3NlZExlYXNlSWRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXByb3Bvc2VkLWxlYXNlLWlkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpbmNsdWRlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiaW5jbHVkZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiaW5jbHVkZVwiLFxuICAgICAgICB4bWxOYW1lOiBcImluY2x1ZGVcIixcbiAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiTGlzdEJsb2JzSW5jbHVkZUl0ZW1cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29weVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNuYXBzaG90c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmNvbW1pdHRlZGJsb2JzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZlcnNpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRhZ3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaW1tdXRhYmlsaXR5cG9saWN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlZ2FsaG9sZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWxldGVkd2l0aHZlcnNpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBjb2xsZWN0aW9uRm9ybWF0OiBcIkNTVlwiLFxufTtcbmNvbnN0IGRlbGltaXRlciA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImRlbGltaXRlclwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkZWxpbWl0ZXJcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiZGVsaW1pdGVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzbmFwc2hvdCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic25hcHNob3RcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInNuYXBzaG90XCIsXG4gICAgICAgIHhtbE5hbWU6IFwic25hcHNob3RcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHZlcnNpb25JZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwidmVyc2lvbklkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ2ZXJzaW9uaWRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ2ZXJzaW9uaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJhbmdlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJyYW5nZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yYW5nZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJhbmdlR2V0Q29udGVudE1ENSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmFuZ2VHZXRDb250ZW50TUQ1XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlLWdldC1jb250ZW50LW1kNVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2VHZXRDb250ZW50Q1JDNjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInJhbmdlR2V0Q29udGVudENSQzY0XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yYW5nZS1nZXQtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGVuY3J5cHRpb25LZXkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNwa0luZm9cIiwgXCJlbmNyeXB0aW9uS2V5XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZW5jcnlwdGlvbktleVNoYTI1NiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY3BrSW5mb1wiLCBcImVuY3J5cHRpb25LZXlTaGEyNTZcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGVuY3J5cHRpb25BbGdvcml0aG0gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNwa0luZm9cIiwgXCJlbmNyeXB0aW9uQWxnb3JpdGhtXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tYWxnb3JpdGhtXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWFsZ29yaXRobVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZNYXRjaCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZNYXRjaFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSWYtTWF0Y2hcIixcbiAgICAgICAgeG1sTmFtZTogXCJJZi1NYXRjaFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZOb25lTWF0Y2ggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLCBcImlmTm9uZU1hdGNoXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZi1Ob25lLU1hdGNoXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiSWYtTm9uZS1NYXRjaFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZUYWdzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZlRhZ3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtdGFnc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtaWYtdGFnc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVsZXRlU25hcHNob3RzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJkZWxldGVTbmFwc2hvdHNcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVsZXRlLXNuYXBzaG90c1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVsZXRlLXNuYXBzaG90c1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluY2x1ZGVcIiwgXCJvbmx5XCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkRlbGV0ZVR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImJsb2JEZWxldGVUeXBlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkZWxldGV0eXBlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiZGVsZXRldHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDExID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiZXhwaXJ5XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGV4cGlyeU9wdGlvbnMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJleHBpcnlPcHRpb25zXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXhwaXJ5LW9wdGlvblwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWV4cGlyeS1vcHRpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGV4cGlyZXNPbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZXhwaXJlc09uXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWV4cGlyeS10aW1lXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1leHBpcnktdGltZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNhY2hlQ29udHJvbCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNhY2hlQ29udHJvbFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY2FjaGUtY29udHJvbFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnRUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudFR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LXR5cGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC10eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudE1ENSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnRFbmNvZGluZyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnRFbmNvZGluZ1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnRMYW5ndWFnZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnRMYW5ndWFnZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnREaXNwb3NpdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnREaXNwb3NpdGlvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDEyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiaW1tdXRhYmlsaXR5UG9saWNpZXNcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnlcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGltbXV0YWJpbGl0eVBvbGljeU1vZGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImltbXV0YWJpbGl0eVBvbGljeU1vZGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJNdXRhYmxlXCIsIFwiVW5sb2NrZWRcIiwgXCJMb2NrZWRcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJsZWdhbGhvbGRcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVnYWxIb2xkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwibGVnYWxIb2xkXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBlbmNyeXB0aW9uU2NvcGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImVuY3J5cHRpb25TY29wZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzbmFwc2hvdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0aWVyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0aWVyXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICBcIlA0XCIsXG4gICAgICAgICAgICAgICAgXCJQNlwiLFxuICAgICAgICAgICAgICAgIFwiUDEwXCIsXG4gICAgICAgICAgICAgICAgXCJQMTVcIixcbiAgICAgICAgICAgICAgICBcIlAyMFwiLFxuICAgICAgICAgICAgICAgIFwiUDMwXCIsXG4gICAgICAgICAgICAgICAgXCJQNDBcIixcbiAgICAgICAgICAgICAgICBcIlA1MFwiLFxuICAgICAgICAgICAgICAgIFwiUDYwXCIsXG4gICAgICAgICAgICAgICAgXCJQNzBcIixcbiAgICAgICAgICAgICAgICBcIlA4MFwiLFxuICAgICAgICAgICAgICAgIFwiSG90XCIsXG4gICAgICAgICAgICAgICAgXCJDb29sXCIsXG4gICAgICAgICAgICAgICAgXCJBcmNoaXZlXCIsXG4gICAgICAgICAgICAgICAgXCJDb2xkXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmVoeWRyYXRlUHJpb3JpdHkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInJlaHlkcmF0ZVByaW9yaXR5XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiSGlnaFwiLCBcIlN0YW5kYXJkXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlSWZNb2RpZmllZFNpbmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwic291cmNlSWZNb2RpZmllZFNpbmNlXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbW9kaWZpZWQtc2luY2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1tb2RpZmllZC1zaW5jZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlSWZVbm1vZGlmaWVkU2luY2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VJZlVubW9kaWZpZWRTaW5jZVwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi11bm1vZGlmaWVkLXNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZk1hdGNoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJzb3VyY2VJZk1hdGNoXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1tYXRjaFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLW1hdGNoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZk5vbmVNYXRjaCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZUlmTm9uZU1hdGNoXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbm9uZS1tYXRjaFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLW5vbmUtbWF0Y2hcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUlmVGFncyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwic291cmNlSWZUYWdzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi10YWdzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtdGFnc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weVNvdXJjZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvcHlTb3VyY2VcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iVGFnc1N0cmluZyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYlRhZ3NTdHJpbmdcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdGFnc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtdGFnc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc2VhbEJsb2IgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNlYWxCbG9iXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlYWwtYmxvYlwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2VhbC1ibG9iXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVnYWxIb2xkMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibGVnYWxIb2xkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB4TXNSZXF1aXJlc1N5bmMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJ4TXNSZXF1aXJlc1N5bmNcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInRydWVcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1aXJlcy1zeW5jXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VDb250ZW50TUQ1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VDb250ZW50TUQ1XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250ZW50LW1kNVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5U291cmNlQXV0aG9yaXphdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29weVNvdXJjZUF1dGhvcml6YXRpb25cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYXV0aG9yaXphdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYXV0aG9yaXphdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weVNvdXJjZVRhZ3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNvcHlTb3VyY2VUYWdzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlLXRhZy1vcHRpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc291cmNlLXRhZy1vcHRpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJSRVBMQUNFXCIsIFwiQ09QWVwiXSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxNSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNvcHlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weUFjdGlvbkFib3J0Q29uc3RhbnQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb3B5QWN0aW9uQWJvcnRDb25zdGFudFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYWJvcnRcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weUlkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29weUlkXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvcHlpZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJjb3B5aWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxNiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInRpZXJcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdGllcjEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJ0aWVyXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjZXNzLXRpZXJcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICBcIlA0XCIsXG4gICAgICAgICAgICAgICAgXCJQNlwiLFxuICAgICAgICAgICAgICAgIFwiUDEwXCIsXG4gICAgICAgICAgICAgICAgXCJQMTVcIixcbiAgICAgICAgICAgICAgICBcIlAyMFwiLFxuICAgICAgICAgICAgICAgIFwiUDMwXCIsXG4gICAgICAgICAgICAgICAgXCJQNDBcIixcbiAgICAgICAgICAgICAgICBcIlA1MFwiLFxuICAgICAgICAgICAgICAgIFwiUDYwXCIsXG4gICAgICAgICAgICAgICAgXCJQNzBcIixcbiAgICAgICAgICAgICAgICBcIlA4MFwiLFxuICAgICAgICAgICAgICAgIFwiSG90XCIsXG4gICAgICAgICAgICAgICAgXCJDb29sXCIsXG4gICAgICAgICAgICAgICAgXCJBcmNoaXZlXCIsXG4gICAgICAgICAgICAgICAgXCJDb2xkXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcXVlcnlSZXF1ZXN0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJxdWVyeVJlcXVlc3RcIl0sXG4gICAgbWFwcGVyOiBRdWVyeVJlcXVlc3QsXG59O1xuY29uc3QgY29tcDE3ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicXVlcnlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE4ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidGFnc1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0YWdzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0YWdzXCJdLFxuICAgIG1hcHBlcjogQmxvYlRhZ3MsXG59O1xuY29uc3QgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRyYW5zYWN0aW9uYWxDb250ZW50TUQ1XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LU1ENVwiLFxuICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYlR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIlBhZ2VCbG9iXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudExlbmd0aCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JDb250ZW50TGVuZ3RoXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JTZXF1ZW5jZU51bWJlciA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYlNlcXVlbmNlTnVtYmVyXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb250ZW50VHlwZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNvbnRlbnRUeXBlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYm9keTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJib2R5XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImJvZHlcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiYm9keVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmVhbVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWNjZXB0MiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjY2VwdFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24veG1sXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2VwdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicGFnZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwYWdlV3JpdGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJwYWdlV3JpdGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInVwZGF0ZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXBhZ2Utd3JpdGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcImlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUb1wiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWxlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcImlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhblwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWx0XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbHRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmU2VxdWVuY2VOdW1iZXJFcXVhbFRvID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiaWZTZXF1ZW5jZU51bWJlckVxdWFsVG9cIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1lcVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWVxXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwYWdlV3JpdGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicGFnZVdyaXRlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJjbGVhclwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXBhZ2Utd3JpdGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZVVybCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInNvdXJjZVVybFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZVJhbmdlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwic291cmNlUmFuZ2VcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtcmFuZ2VcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUNvbnRlbnRDcmM2NCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlQ29udGVudENyYzY0XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2UxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmFuZ2VcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yYW5nZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJhbmdlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjAgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJwYWdlbGlzdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmV2c25hcHNob3QgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByZXZzbmFwc2hvdFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicHJldnNuYXBzaG90XCIsXG4gICAgICAgIHhtbE5hbWU6IFwicHJldnNuYXBzaG90XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmV2U25hcHNob3RVcmwgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByZXZTbmFwc2hvdFVybFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1wcmV2aW91cy1zbmFwc2hvdC11cmxcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXByZXZpb3VzLXNuYXBzaG90LXVybFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc2VxdWVuY2VOdW1iZXJBY3Rpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJzZXF1ZW5jZU51bWJlckFjdGlvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlcXVlbmNlLW51bWJlci1hY3Rpb25cIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXF1ZW5jZS1udW1iZXItYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibWF4XCIsIFwidXBkYXRlXCIsIFwiaW5jcmVtZW50XCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDIxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiaW5jcmVtZW50YWxjb3B5XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUeXBlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJBcHBlbmRCbG9iXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBlbmRibG9ja1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtYXhTaXplID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJtYXhTaXplXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29uZGl0aW9uLW1heHNpemVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29uZGl0aW9uLW1heHNpemVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFwcGVuZFBvc2l0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwiYXBwZW5kUG9zaXRpb25BY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiYXBwZW5kUG9zaXRpb25cIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29uZGl0aW9uLWFwcGVuZHBvc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tYXBwZW5kcG9zXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VSYW5nZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNvdXJjZVJhbmdlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLXJhbmdlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzZWFsXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUeXBlMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJCbG9ja0Jsb2JcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvcHlTb3VyY2VCbG9iUHJvcGVydGllcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29weVNvdXJjZUJsb2JQcm9wZXJ0aWVzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlLWJsb2ItcHJvcGVydGllc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYmxvYi1wcm9wZXJ0aWVzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDI0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYmxvY2tcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvY2tJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2NrSWRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYmxvY2tpZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJibG9ja2lkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9ja3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJibG9ja3NcIixcbiAgICBtYXBwZXI6IEJsb2NrTG9va3VwTGlzdCxcbn07XG5jb25zdCBjb21wMjUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJibG9ja2xpc3RcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGlzdFR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJsaXN0VHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiY29tbWl0dGVkXCIsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImJsb2NrbGlzdHR5cGVcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiYmxvY2tsaXN0dHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbW1pdHRlZFwiLCBcInVuY29tbWl0dGVkXCIsIFwiYWxsXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBTZXJ2aWNlIG9wZXJhdGlvbnMuICovXG5jbGFzcyBTZXJ2aWNlSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgU2VydmljZSBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgcHJvcGVydGllcyBmb3IgYSBzdG9yYWdlIGFjY291bnQncyBCbG9iIHNlcnZpY2UgZW5kcG9pbnQsIGluY2x1ZGluZyBwcm9wZXJ0aWVzIGZvciBTdG9yYWdlXG4gICAgICogQW5hbHl0aWNzIGFuZCBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgcnVsZXNcbiAgICAgKiBAcGFyYW0gYmxvYlNlcnZpY2VQcm9wZXJ0aWVzIFRoZSBTdG9yYWdlU2VydmljZSBwcm9wZXJ0aWVzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0UHJvcGVydGllcyhibG9iU2VydmljZVByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvYlNlcnZpY2VQcm9wZXJ0aWVzLCBvcHRpb25zIH0sIHNldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0cyB0aGUgcHJvcGVydGllcyBvZiBhIHN0b3JhZ2UgYWNjb3VudCdzIEJsb2Igc2VydmljZSwgaW5jbHVkaW5nIHByb3BlcnRpZXMgZm9yIFN0b3JhZ2UgQW5hbHl0aWNzXG4gICAgICogYW5kIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFByb3BlcnRpZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjJDIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgc3RhdGlzdGljcyByZWxhdGVkIHRvIHJlcGxpY2F0aW9uIGZvciB0aGUgQmxvYiBzZXJ2aWNlLiBJdCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGVcbiAgICAgKiBzZWNvbmRhcnkgbG9jYXRpb24gZW5kcG9pbnQgd2hlbiByZWFkLWFjY2VzcyBnZW8tcmVkdW5kYW50IHJlcGxpY2F0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBzdG9yYWdlXG4gICAgICogYWNjb3VudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFN0YXRpc3RpY3Mob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFN0YXRpc3RpY3NPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIExpc3QgQ29udGFpbmVycyBTZWdtZW50IG9wZXJhdGlvbiByZXR1cm5zIGEgbGlzdCBvZiB0aGUgY29udGFpbmVycyB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGxpc3RDb250YWluZXJzU2VnbWVudChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgbGlzdENvbnRhaW5lcnNTZWdtZW50T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIHVzZXIgZGVsZWdhdGlvbiBrZXkgZm9yIHRoZSBCbG9iIHNlcnZpY2UuIFRoaXMgaXMgb25seSBhIHZhbGlkIG9wZXJhdGlvbiB3aGVuIHVzaW5nXG4gICAgICogYmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBrZXlJbmZvIEtleSBpbmZvcm1hdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0VXNlckRlbGVnYXRpb25LZXkoa2V5SW5mbywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBrZXlJbmZvLCBvcHRpb25zIH0sIGdldFVzZXJEZWxlZ2F0aW9uS2V5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY291bnRJbmZvKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBCYXRjaCBvcGVyYXRpb24gYWxsb3dzIG11bHRpcGxlIEFQSSBjYWxscyB0byBiZSBlbWJlZGRlZCBpbnRvIGEgc2luZ2xlIEhUVFAgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBtdWx0aXBhcnRDb250ZW50VHlwZSBSZXF1aXJlZC4gVGhlIHZhbHVlIG9mIHRoaXMgaGVhZGVyIG11c3QgYmUgbXVsdGlwYXJ0L21peGVkIHdpdGggYSBiYXRjaFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeS4gRXhhbXBsZSBoZWFkZXIgdmFsdWU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9YmF0Y2hfPEdVSUQ+XG4gICAgICogQHBhcmFtIGJvZHkgSW5pdGlhbCBkYXRhXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzdWJtaXRCYXRjaChjb250ZW50TGVuZ3RoLCBtdWx0aXBhcnRDb250ZW50VHlwZSwgYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBtdWx0aXBhcnRDb250ZW50VHlwZSwgYm9keSwgb3B0aW9ucyB9LCBzdWJtaXRCYXRjaE9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBGaWx0ZXIgQmxvYnMgb3BlcmF0aW9uIGVuYWJsZXMgY2FsbGVycyB0byBsaXN0IGJsb2JzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aG9zZSB0YWdzIG1hdGNoIGFcbiAgICAgKiBnaXZlbiBzZWFyY2ggZXhwcmVzc2lvbi4gIEZpbHRlciBibG9icyBzZWFyY2hlcyBhY3Jvc3MgYWxsIGNvbnRhaW5lcnMgd2l0aGluIGEgc3RvcmFnZSBhY2NvdW50IGJ1dFxuICAgICAqIGNhbiBiZSBzY29wZWQgd2l0aGluIHRoZSBleHByZXNzaW9uIHRvIGEgc2luZ2xlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGZpbHRlckJsb2JzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBmaWx0ZXJCbG9ic09wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxufVxuLy8gT3BlcmF0aW9uIFNwZWNpZmljYXRpb25zXG5jb25zdCB4bWxTZXJpYWxpemVyJDUgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IHNldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZVNldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYmxvYlNlcnZpY2VQcm9wZXJ0aWVzLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjJDIgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9iU2VydmljZVByb3BlcnRpZXMsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgZ2V0U3RhdGlzdGljc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9iU2VydmljZVN0YXRpc3RpY3MsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGxpc3RDb250YWluZXJzU2VnbWVudE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMixcbiAgICAgICAgcHJlZml4LFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIG1heFBhZ2VTaXplLFxuICAgICAgICBpbmNsdWRlLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgZ2V0VXNlckRlbGVnYXRpb25LZXlPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFVzZXJEZWxlZ2F0aW9uS2V5LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBrZXlJbmZvLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMyxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMiA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29tcCxcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTEsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBzdWJtaXRCYXRjaE9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHksXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDRdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG11bHRpcGFydENvbnRlbnRUeXBlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBmaWx0ZXJCbG9ic09wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IEZpbHRlckJsb2JTZWdtZW50LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUZpbHRlckJsb2JzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIG1heFBhZ2VTaXplLFxuICAgICAgICBjb21wNSxcbiAgICAgICAgd2hlcmUsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIENvbnRhaW5lciBvcGVyYXRpb25zLiAqL1xuY2xhc3MgQ29udGFpbmVySW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQ29udGFpbmVyIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBhIG5ldyBjb250YWluZXIgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LiBJZiB0aGUgY29udGFpbmVyIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5XG4gICAgICogZXhpc3RzLCB0aGUgb3BlcmF0aW9uIGZhaWxzXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjcmVhdGUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGNyZWF0ZU9wZXJhdGlvblNwZWMkMik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSBhbmQgc3lzdGVtIHByb3BlcnRpZXMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgZGF0YVxuICAgICAqIHJldHVybmVkIGRvZXMgbm90IGluY2x1ZGUgdGhlIGNvbnRhaW5lcidzIGxpc3Qgb2YgYmxvYnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFByb3BlcnRpZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBvcGVyYXRpb24gbWFya3MgdGhlIHNwZWNpZmllZCBjb250YWluZXIgZm9yIGRlbGV0aW9uLiBUaGUgY29udGFpbmVyIGFuZCBhbnkgYmxvYnMgY29udGFpbmVkIHdpdGhpblxuICAgICAqIGl0IGFyZSBsYXRlciBkZWxldGVkIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGRlbGV0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZGVsZXRlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogb3BlcmF0aW9uIHNldHMgb25lIG9yIG1vcmUgdXNlci1kZWZpbmVkIG5hbWUtdmFsdWUgcGFpcnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0TWV0YWRhdGEob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNldE1ldGFkYXRhT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGUgd2hldGhlciBjb250YWluZXIgZGF0YVxuICAgICAqIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY2Vzc1BvbGljeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHNldHMgdGhlIHBlcm1pc3Npb25zIGZvciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lci4gVGhlIHBlcm1pc3Npb25zIGluZGljYXRlIHdoZXRoZXIgYmxvYnMgaW4gYVxuICAgICAqIGNvbnRhaW5lciBtYXkgYmUgYWNjZXNzZWQgcHVibGljbHkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRBY2Nlc3NQb2xpY3kob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNldEFjY2Vzc1BvbGljeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyBhIHByZXZpb3VzbHktZGVsZXRlZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZXN0b3JlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCByZXN0b3JlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbmFtZXMgYW4gZXhpc3RpbmcgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb250YWluZXJOYW1lIFJlcXVpcmVkLiAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdG8gcmVuYW1lLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVuYW1lKHNvdXJjZUNvbnRhaW5lck5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgc291cmNlQ29udGFpbmVyTmFtZSwgb3B0aW9ucyB9LCByZW5hbWVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEJhdGNoIG9wZXJhdGlvbiBhbGxvd3MgbXVsdGlwbGUgQVBJIGNhbGxzIHRvIGJlIGVtYmVkZGVkIGludG8gYSBzaW5nbGUgSFRUUCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIG11bHRpcGFydENvbnRlbnRUeXBlIFJlcXVpcmVkLiBUaGUgdmFsdWUgb2YgdGhpcyBoZWFkZXIgbXVzdCBiZSBtdWx0aXBhcnQvbWl4ZWQgd2l0aCBhIGJhdGNoXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LiBFeGFtcGxlIGhlYWRlciB2YWx1ZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF88R1VJRD5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHN1Ym1pdEJhdGNoKGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zIH0sIHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBGaWx0ZXIgQmxvYnMgb3BlcmF0aW9uIGVuYWJsZXMgY2FsbGVycyB0byBsaXN0IGJsb2JzIGluIGEgY29udGFpbmVyIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlblxuICAgICAqIHNlYXJjaCBleHByZXNzaW9uLiAgRmlsdGVyIGJsb2JzIHNlYXJjaGVzIHdpdGhpbiB0aGUgZ2l2ZW4gY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZmlsdGVyQmxvYnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGZpbHRlckJsb2JzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYWNxdWlyZUxlYXNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBhY3F1aXJlTGVhc2VPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBjb250YWluZXIgZm9yIGRlbGV0ZSBvcGVyYXRpb25zLiBUaGUgbG9jayBkdXJhdGlvbiBjYW5cbiAgICAgKiBiZSAxNSB0byA2MCBzZWNvbmRzLCBvciBjYW4gYmUgaW5maW5pdGVcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVsZWFzZUxlYXNlKGxlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgb3B0aW9ucyB9LCByZWxlYXNlTGVhc2VPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBjb250YWluZXIgZm9yIGRlbGV0ZSBvcGVyYXRpb25zLiBUaGUgbG9jayBkdXJhdGlvbiBjYW5cbiAgICAgKiBiZSAxNSB0byA2MCBzZWNvbmRzLCBvciBjYW4gYmUgaW5maW5pdGVcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVuZXdMZWFzZShsZWFzZUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxlYXNlSWQsIG9wdGlvbnMgfSwgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYnJlYWtMZWFzZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIHByb3Bvc2VkTGVhc2VJZCBQcm9wb3NlZCBsZWFzZSBJRCwgaW4gYSBHVUlEIHN0cmluZyBmb3JtYXQuIFRoZSBCbG9iIHNlcnZpY2UgcmV0dXJucyA0MDBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIChJbnZhbGlkIHJlcXVlc3QpIGlmIHRoZSBwcm9wb3NlZCBsZWFzZSBJRCBpcyBub3QgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LiBTZWUgR3VpZCBDb25zdHJ1Y3RvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKFN0cmluZykgZm9yIGEgbGlzdCBvZiB2YWxpZCBHVUlEIHN0cmluZyBmb3JtYXRzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY2hhbmdlTGVhc2UobGVhc2VJZCwgcHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxlYXNlSWQsIHByb3Bvc2VkTGVhc2VJZCwgb3B0aW9ucyB9LCBjaGFuZ2VMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIFRoZSBMaXN0IEJsb2JzIG9wZXJhdGlvbiByZXR1cm5zIGEgbGlzdCBvZiB0aGUgYmxvYnMgdW5kZXIgdGhlIHNwZWNpZmllZCBjb250YWluZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGxpc3RCbG9iRmxhdFNlZ21lbnQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGxpc3RCbG9iRmxhdFNlZ21lbnRPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExpc3QgQmxvYnMgb3BlcmF0aW9uIHJldHVybnMgYSBsaXN0IG9mIHRoZSBibG9icyB1bmRlciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgV2hlbiB0aGUgcmVxdWVzdCBpbmNsdWRlcyB0aGlzIHBhcmFtZXRlciwgdGhlIG9wZXJhdGlvbiByZXR1cm5zIGEgQmxvYlByZWZpeFxuICAgICAqICAgICAgICAgICAgICAgICAgZWxlbWVudCBpbiB0aGUgcmVzcG9uc2UgYm9keSB0aGF0IGFjdHMgYXMgYSBwbGFjZWhvbGRlciBmb3IgYWxsIGJsb2JzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggdGhlXG4gICAgICogICAgICAgICAgICAgICAgICBzYW1lIHN1YnN0cmluZyB1cCB0byB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgZGVsaW1pdGVyIGNoYXJhY3Rlci4gVGhlIGRlbGltaXRlciBtYXkgYmUgYSBzaW5nbGVcbiAgICAgKiAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBvciBhIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudChkZWxpbWl0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgZGVsaW1pdGVyLCBvcHRpb25zIH0sIGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRBY2NvdW50SW5mbyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQ0ID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBjcmVhdGVPcGVyYXRpb25TcGVjJDIgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJDcmVhdGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgcmVzdHlwZTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgYWNjZXNzLFxuICAgICAgICBkZWZhdWx0RW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIHJlc3R5cGUyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBkZWxldGVPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJERUxFVEVcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJEZWxldGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJEZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgcmVzdHlwZTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHNldE1ldGFkYXRhT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXA2LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZ2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIkNvbXBvc2l0ZVwiLCBjbGFzc05hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRJZGVudGlmaWVyc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkSWRlbnRpZmllcnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXA3LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3Qgc2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogY29udGFpbmVyQWNsLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDcsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXNzLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCByZXN0b3JlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlc3RvcmVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDgsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgZGVsZXRlZENvbnRhaW5lck5hbWUsXG4gICAgICAgIGRlbGV0ZWRDb250YWluZXJWZXJzaW9uLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHJlbmFtZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZW5hbWVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZW5hbWVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wOSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBzb3VyY2VDb250YWluZXJOYW1lLFxuICAgICAgICBzb3VyY2VMZWFzZUlkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBib2R5LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wNCxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBtdWx0aXBhcnRDb250ZW50VHlwZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZmlsdGVyQmxvYnNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogRmlsdGVyQmxvYlNlZ21lbnQsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJGaWx0ZXJCbG9ic0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIG1heFBhZ2VTaXplLFxuICAgICAgICBjb21wNSxcbiAgICAgICAgd2hlcmUsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgYWNxdWlyZUxlYXNlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQWNxdWlyZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDEwLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIHByb3Bvc2VkTGVhc2VJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCByZWxlYXNlTGVhc2VPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uMSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDEwLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGxlYXNlSWQxLFxuICAgICAgICBhY3Rpb24yLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGJyZWFrTGVhc2VPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJCcmVha0xlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXAxMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24zLFxuICAgICAgICBicmVha1BlcmlvZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBjaGFuZ2VMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGFjdGlvbjQsXG4gICAgICAgIHByb3Bvc2VkTGVhc2VJZDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgbGlzdEJsb2JGbGF0U2VnbWVudE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBpbmNsdWRlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBMaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBpbmNsdWRlMSxcbiAgICAgICAgZGVsaW1pdGVyLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgQmxvYiBvcGVyYXRpb25zLiAqL1xuY2xhc3MgQmxvYkltcGwge1xuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIEJsb2IgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgRG93bmxvYWQgb3BlcmF0aW9uIHJlYWRzIG9yIGRvd25sb2FkcyBhIGJsb2IgZnJvbSB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgaXRzIG1ldGFkYXRhIGFuZFxuICAgICAqIHByb3BlcnRpZXMuIFlvdSBjYW4gYWxzbyBjYWxsIERvd25sb2FkIHRvIHJlYWQgYSBzbmFwc2hvdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGRvd25sb2FkKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkb3dubG9hZE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uIHJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSwgc3RhbmRhcmQgSFRUUCBwcm9wZXJ0aWVzLCBhbmQgc3lzdGVtXG4gICAgICogcHJvcGVydGllcyBmb3IgdGhlIGJsb2IuIEl0IGRvZXMgbm90IHJldHVybiB0aGUgY29udGVudCBvZiB0aGUgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFByb3BlcnRpZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHN0b3JhZ2UgYWNjb3VudCdzIHNvZnQgZGVsZXRlIGZlYXR1cmUgaXMgZGlzYWJsZWQgdGhlbiwgd2hlbiBhIGJsb2IgaXMgZGVsZXRlZCwgaXQgaXNcbiAgICAgKiBwZXJtYW5lbnRseSByZW1vdmVkIGZyb20gdGhlIHN0b3JhZ2UgYWNjb3VudC4gSWYgdGhlIHN0b3JhZ2UgYWNjb3VudCdzIHNvZnQgZGVsZXRlIGZlYXR1cmUgaXNcbiAgICAgKiBlbmFibGVkLCB0aGVuLCB3aGVuIGEgYmxvYiBpcyBkZWxldGVkLCBpdCBpcyBtYXJrZWQgZm9yIGRlbGV0aW9uIGFuZCBiZWNvbWVzIGluYWNjZXNzaWJsZVxuICAgICAqIGltbWVkaWF0ZWx5LiBIb3dldmVyLCB0aGUgYmxvYiBzZXJ2aWNlIHJldGFpbnMgdGhlIGJsb2Igb3Igc25hcHNob3QgZm9yIHRoZSBudW1iZXIgb2YgZGF5cyBzcGVjaWZpZWRcbiAgICAgKiBieSB0aGUgRGVsZXRlUmV0ZW50aW9uUG9saWN5IHNlY3Rpb24gb2YgW1N0b3JhZ2Ugc2VydmljZSBwcm9wZXJ0aWVzXVxuICAgICAqIChTZXQtQmxvYi1TZXJ2aWNlLVByb3BlcnRpZXMubWQpLiBBZnRlciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIGhhcyBwYXNzZWQsIHRoZSBibG9iJ3MgZGF0YSBpc1xuICAgICAqIHBlcm1hbmVudGx5IHJlbW92ZWQgZnJvbSB0aGUgc3RvcmFnZSBhY2NvdW50LiBOb3RlIHRoYXQgeW91IGNvbnRpbnVlIHRvIGJlIGNoYXJnZWQgZm9yIHRoZVxuICAgICAqIHNvZnQtZGVsZXRlZCBibG9iJ3Mgc3RvcmFnZSB1bnRpbCBpdCBpcyBwZXJtYW5lbnRseSByZW1vdmVkLiBVc2UgdGhlIExpc3QgQmxvYnMgQVBJIGFuZCBzcGVjaWZ5IHRoZVxuICAgICAqIFwiaW5jbHVkZT1kZWxldGVkXCIgcXVlcnkgcGFyYW1ldGVyIHRvIGRpc2NvdmVyIHdoaWNoIGJsb2JzIGFuZCBzbmFwc2hvdHMgaGF2ZSBiZWVuIHNvZnQgZGVsZXRlZC4gWW91XG4gICAgICogY2FuIHRoZW4gdXNlIHRoZSBVbmRlbGV0ZSBCbG9iIEFQSSB0byByZXN0b3JlIGEgc29mdC1kZWxldGVkIGJsb2IuIEFsbCBvdGhlciBvcGVyYXRpb25zIG9uIGFcbiAgICAgKiBzb2Z0LWRlbGV0ZWQgYmxvYiBvciBzbmFwc2hvdCBjYXVzZXMgdGhlIHNlcnZpY2UgdG8gcmV0dXJuIGFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDA0XG4gICAgICogKFJlc291cmNlTm90Rm91bmQpLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZGVsZXRlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkZWxldGVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5kZWxldGUgYSBibG9iIHRoYXQgd2FzIHByZXZpb3VzbHkgc29mdCBkZWxldGVkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICB1bmRlbGV0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgdW5kZWxldGVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGltZSBhIGJsb2Igd2lsbCBleHBpcmUgYW5kIGJlIGRlbGV0ZWQuXG4gICAgICogQHBhcmFtIGV4cGlyeU9wdGlvbnMgUmVxdWlyZWQuIEluZGljYXRlcyBtb2RlIG9mIHRoZSBleHBpcnkgdGltZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0RXhwaXJ5KGV4cGlyeU9wdGlvbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgZXhwaXJ5T3B0aW9ucywgb3B0aW9ucyB9LCBzZXRFeHBpcnlPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNldCBIVFRQIEhlYWRlcnMgb3BlcmF0aW9uIHNldHMgc3lzdGVtIHByb3BlcnRpZXMgb24gdGhlIGJsb2JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldEh0dHBIZWFkZXJzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRIdHRwSGVhZGVyc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IEltbXV0YWJpbGl0eSBQb2xpY3kgb3BlcmF0aW9uIHNldHMgdGhlIGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldEltbXV0YWJpbGl0eVBvbGljeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0SW1tdXRhYmlsaXR5UG9saWN5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBEZWxldGUgSW1tdXRhYmlsaXR5IFBvbGljeSBvcGVyYXRpb24gZGVsZXRlcyB0aGUgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkZWxldGVJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNldCBMZWdhbCBIb2xkIG9wZXJhdGlvbiBzZXRzIGEgbGVnYWwgaG9sZCBvbiB0aGUgYmxvYi5cbiAgICAgKiBAcGFyYW0gbGVnYWxIb2xkIFNwZWNpZmllZCBpZiBhIGxlZ2FsIGhvbGQgc2hvdWxkIGJlIHNldCBvbiB0aGUgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldExlZ2FsSG9sZChsZWdhbEhvbGQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVnYWxIb2xkLCBvcHRpb25zIH0sIHNldExlZ2FsSG9sZE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IEJsb2IgTWV0YWRhdGEgb3BlcmF0aW9uIHNldHMgdXNlci1kZWZpbmVkIG1ldGFkYXRhIGZvciB0aGUgc3BlY2lmaWVkIGJsb2IgYXMgb25lIG9yIG1vcmVcbiAgICAgKiBuYW1lLXZhbHVlIHBhaXJzXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRNZXRhZGF0YShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhY3F1aXJlTGVhc2Uob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGFjcXVpcmVMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVsZWFzZUxlYXNlKGxlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgb3B0aW9ucyB9LCByZWxlYXNlTGVhc2VPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIGxlYXNlSWQgU3BlY2lmaWVzIHRoZSBjdXJyZW50IGxlYXNlIElEIG9uIHRoZSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHJlbmV3TGVhc2UobGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBvcHRpb25zIH0sIHJlbmV3TGVhc2VPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIGxlYXNlSWQgU3BlY2lmaWVzIHRoZSBjdXJyZW50IGxlYXNlIElEIG9uIHRoZSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gcHJvcG9zZWRMZWFzZUlkIFByb3Bvc2VkIGxlYXNlIElELCBpbiBhIEdVSUQgc3RyaW5nIGZvcm1hdC4gVGhlIEJsb2Igc2VydmljZSByZXR1cm5zIDQwMFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKEludmFsaWQgcmVxdWVzdCkgaWYgdGhlIHByb3Bvc2VkIGxlYXNlIElEIGlzIG5vdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQuIFNlZSBHdWlkIENvbnN0cnVjdG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBmb3IgYSBsaXN0IG9mIHZhbGlkIEdVSUQgc3RyaW5nIGZvcm1hdHMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjaGFuZ2VMZWFzZShsZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgcHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zIH0sIGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIFRoZSBMZWFzZSBCbG9iIG9wZXJhdGlvbiBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBibG9iIGZvciB3cml0ZSBhbmQgZGVsZXRlXG4gICAgICogb3BlcmF0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYnJlYWtMZWFzZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ3JlYXRlIFNuYXBzaG90IG9wZXJhdGlvbiBjcmVhdGVzIGEgcmVhZC1vbmx5IHNuYXBzaG90IG9mIGEgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY3JlYXRlU25hcHNob3Qob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGNyZWF0ZVNuYXBzaG90T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTdGFydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbiBjb3BpZXMgYSBibG9iIG9yIGFuIGludGVybmV0IHJlc291cmNlIHRvIGEgbmV3IGJsb2IuXG4gICAgICogQHBhcmFtIGNvcHlTb3VyY2UgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgcGFnZSBibG9iIHNuYXBzaG90LiBUaGlzIHZhbHVlIGlzIGEgVVJMIG9mIHVwIHRvXG4gICAgICogICAgICAgICAgICAgICAgICAgMiBLQiBpbiBsZW5ndGggdGhhdCBzcGVjaWZpZXMgYSBwYWdlIGJsb2Igc25hcHNob3QuIFRoZSB2YWx1ZSBzaG91bGQgYmUgVVJMLWVuY29kZWQgYXMgaXQgd291bGRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhcHBlYXIgaW4gYSByZXF1ZXN0IFVSSS4gVGhlIHNvdXJjZSBibG9iIG11c3QgZWl0aGVyIGJlIHB1YmxpYyBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkXG4gICAgICogICAgICAgICAgICAgICAgICAgYWNjZXNzIHNpZ25hdHVyZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHN0YXJ0Q29weUZyb21VUkwoY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb3B5U291cmNlLCBvcHRpb25zIH0sIHN0YXJ0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGNvcGllcyBhIGJsb2Igb3IgYW4gaW50ZXJuZXQgcmVzb3VyY2UgdG8gYSBuZXcgYmxvYi4gSXQgd2lsbCBub3QgcmV0dXJuXG4gICAgICogYSByZXNwb25zZSB1bnRpbCB0aGUgY29weSBpcyBjb21wbGV0ZS5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY29weUZyb21VUkwoY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb3B5U291cmNlLCBvcHRpb25zIH0sIGNvcHlGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBBYm9ydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbiBhYm9ydHMgYSBwZW5kaW5nIENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uLCBhbmQgbGVhdmVzIGEgZGVzdGluYXRpb25cbiAgICAgKiBibG9iIHdpdGggemVybyBsZW5ndGggYW5kIGZ1bGwgbWV0YWRhdGEuXG4gICAgICogQHBhcmFtIGNvcHlJZCBUaGUgY29weSBpZGVudGlmaWVyIHByb3ZpZGVkIGluIHRoZSB4LW1zLWNvcHktaWQgaGVhZGVyIG9mIHRoZSBvcmlnaW5hbCBDb3B5IEJsb2JcbiAgICAgKiAgICAgICAgICAgICAgIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGFib3J0Q29weUZyb21VUkwoY29weUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvcHlJZCwgb3B0aW9ucyB9LCBhYm9ydENvcHlGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgVGllciBvcGVyYXRpb24gc2V0cyB0aGUgdGllciBvbiBhIGJsb2IuIFRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZCBvbiBhIHBhZ2UgYmxvYiBpbiBhIHByZW1pdW1cbiAgICAgKiBzdG9yYWdlIGFjY291bnQgYW5kIG9uIGEgYmxvY2sgYmxvYiBpbiBhIGJsb2Igc3RvcmFnZSBhY2NvdW50IChsb2NhbGx5IHJlZHVuZGFudCBzdG9yYWdlIG9ubHkpLiBBXG4gICAgICogcHJlbWl1bSBwYWdlIGJsb2IncyB0aWVyIGRldGVybWluZXMgdGhlIGFsbG93ZWQgc2l6ZSwgSU9QUywgYW5kIGJhbmR3aWR0aCBvZiB0aGUgYmxvYi4gQSBibG9ja1xuICAgICAqIGJsb2IncyB0aWVyIGRldGVybWluZXMgSG90L0Nvb2wvQXJjaGl2ZSBzdG9yYWdlIHR5cGUuIFRoaXMgb3BlcmF0aW9uIGRvZXMgbm90IHVwZGF0ZSB0aGUgYmxvYidzXG4gICAgICogRVRhZy5cbiAgICAgKiBAcGFyYW0gdGllciBJbmRpY2F0ZXMgdGhlIHRpZXIgdG8gYmUgc2V0IG9uIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0VGllcih0aWVyLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IHRpZXIsIG9wdGlvbnMgfSwgc2V0VGllck9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRBY2NvdW50SW5mbyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFF1ZXJ5IG9wZXJhdGlvbiBlbmFibGVzIHVzZXJzIHRvIHNlbGVjdC9wcm9qZWN0IG9uIGJsb2IgZGF0YSBieSBwcm92aWRpbmcgc2ltcGxlIHF1ZXJ5XG4gICAgICogZXhwcmVzc2lvbnMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBxdWVyeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgcXVlcnlPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBUYWdzIG9wZXJhdGlvbiBlbmFibGVzIHVzZXJzIHRvIGdldCB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggYSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0VGFncyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0VGFnc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IFRhZ3Mgb3BlcmF0aW9uIGVuYWJsZXMgdXNlcnMgdG8gc2V0IHRhZ3Mgb24gYSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0VGFncyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0VGFnc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQzID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBkb3dubG9hZE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHsgbmFtZTogXCJTdHJlYW1cIiB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInBhcnNlZFJlc3BvbnNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkRvd25sb2FkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgMjA2OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRG93bmxvYWRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIHJhbmdlR2V0Q29udGVudE1ENSxcbiAgICAgICAgcmFuZ2VHZXRDb250ZW50Q1JDNjQsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiSEVBRFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBkZWxldGVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEZWxldGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBibG9iRGVsZXRlVHlwZSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBkZWxldGVTbmFwc2hvdHMsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgdW5kZWxldGVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JVbmRlbGV0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JVbmRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wOF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0RXhwaXJ5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0RXhwaXJ5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEV4cGlyeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTFdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBleHBpcnlPcHRpb25zLFxuICAgICAgICBleHBpcmVzT24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0SHR0cEhlYWRlcnNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtjb21wLCB0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBzZXRJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJERUxFVEVcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldExlZ2FsSG9sZE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldExlZ2FsSG9sZEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVnYWxIb2xkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldE1ldGFkYXRhT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0TWV0YWRhdGFIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDZdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGFjcXVpcmVMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgcHJvcG9zZWRMZWFzZUlkLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uMSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlJlbmV3TGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICAgICAgYWN0aW9uMixcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBjaGFuZ2VMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGxlYXNlSWQxLFxuICAgICAgICBhY3Rpb240LFxuICAgICAgICBwcm9wb3NlZExlYXNlSWQxLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGJyZWFrTGVhc2VPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JCcmVha0xlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uMyxcbiAgICAgICAgYnJlYWtQZXJpb2QsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgY3JlYXRlU25hcHNob3RPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDcmVhdGVTbmFwc2hvdEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTRdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHN0YXJ0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTdGFydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlN0YXJ0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgc291cmNlSWZUYWdzLFxuICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgc2VhbEJsb2IsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgY29weUZyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDb3B5RnJvbVVSTEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0aWVyLFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgICAgIHhNc1JlcXVpcmVzU3luYyxcbiAgICAgICAgc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb24sXG4gICAgICAgIGNvcHlTb3VyY2VUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGFib3J0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDQ6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAxNSxcbiAgICAgICAgY29weUlkLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGNvcHlBY3Rpb25BYm9ydENvbnN0YW50LFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldFRpZXJPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUaWVySGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0VGllckhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUaWVyRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBjb21wMTYsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICByZWh5ZHJhdGVQcmlvcml0eSxcbiAgICAgICAgdGllcjEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29tcCxcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTEsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBxdWVyeU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JRdWVyeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIDIwNjoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHsgbmFtZTogXCJTdHJlYW1cIiB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInBhcnNlZFJlc3BvbnNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlF1ZXJ5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBxdWVyeVJlcXVlc3QsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMTcsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZ2V0VGFnc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogQmxvYlRhZ3MsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iR2V0VGFnc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBjb21wMTgsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldFRhZ3NPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDQ6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUYWdzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRhZ3NFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IHRhZ3MsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHZlcnNpb25JZCxcbiAgICAgICAgY29tcDE4LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgUGFnZUJsb2Igb3BlcmF0aW9ucy4gKi9cbmNsYXNzIFBhZ2VCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgUGFnZUJsb2IgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ3JlYXRlIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IHBhZ2UgYmxvYi5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBibG9iQ29udGVudExlbmd0aCBUaGlzIGhlYWRlciBzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIHBhZ2UgYmxvYiwgdXAgdG8gMSBUQi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgYmxvYiBzaXplIG11c3QgYmUgYWxpZ25lZCB0byBhIDUxMi1ieXRlIGJvdW5kYXJ5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY3JlYXRlKGNvbnRlbnRMZW5ndGgsIGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zIH0sIGNyZWF0ZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uIHdyaXRlcyBhIHJhbmdlIG9mIHBhZ2VzIHRvIGEgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwbG9hZFBhZ2VzKGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCB1cGxvYWRQYWdlc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ2xlYXIgUGFnZXMgb3BlcmF0aW9uIGNsZWFycyBhIHNldCBvZiBwYWdlcyBmcm9tIGEgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNsZWFyUGFnZXMoY29udGVudExlbmd0aCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBvcHRpb25zIH0sIGNsZWFyUGFnZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFVwbG9hZCBQYWdlcyBvcGVyYXRpb24gd3JpdGVzIGEgcmFuZ2Ugb2YgcGFnZXMgdG8gYSBwYWdlIGJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIGFyZSByZWFkIGZyb20gYVxuICAgICAqIFVSTFxuICAgICAqIEBwYXJhbSBzb3VyY2VVcmwgU3BlY2lmeSBhIFVSTCB0byB0aGUgY29weSBzb3VyY2UuXG4gICAgICogQHBhcmFtIHNvdXJjZVJhbmdlIEJ5dGVzIG9mIHNvdXJjZSBkYXRhIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UuIFRoZSBsZW5ndGggb2YgdGhpcyByYW5nZSBzaG91bGRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIENvbnRlbnRMZW5ndGggaGVhZGVyIGFuZCB4LW1zLXJhbmdlL1JhbmdlIGRlc3RpbmF0aW9uIHJhbmdlIGhlYWRlci5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgcmFuZ2Ugb2YgYnl0ZXMgdG8gd2hpY2ggdGhlIHNvdXJjZSByYW5nZSB3b3VsZCBiZSB3cml0dGVuLiBUaGUgcmFuZ2Ugc2hvdWxkIGJlIDUxMlxuICAgICAqICAgICAgICAgICAgICBhbGlnbmVkIGFuZCByYW5nZS1lbmQgaXMgcmVxdWlyZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICB1cGxvYWRQYWdlc0Zyb21VUkwoc291cmNlVXJsLCBzb3VyY2VSYW5nZSwgY29udGVudExlbmd0aCwgcmFuZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgc291cmNlVXJsLCBzb3VyY2VSYW5nZSwgY29udGVudExlbmd0aCwgcmFuZ2UsIG9wdGlvbnMgfSwgdXBsb2FkUGFnZXNGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgUGFnZSBSYW5nZXMgb3BlcmF0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YgdmFsaWQgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iIG9yIHNuYXBzaG90IG9mIGFcbiAgICAgKiBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFBhZ2VSYW5nZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFBhZ2VSYW5nZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mIHZhbGlkIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYiB0aGF0IHdlcmVcbiAgICAgKiBjaGFuZ2VkIGJldHdlZW4gdGFyZ2V0IGJsb2IgYW5kIHByZXZpb3VzIHNuYXBzaG90LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UGFnZVJhbmdlc0RpZmYob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFBhZ2VSYW5nZXNEaWZmT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2l6ZSB0aGUgQmxvYlxuICAgICAqIEBwYXJhbSBibG9iQ29udGVudExlbmd0aCBUaGlzIGhlYWRlciBzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIHBhZ2UgYmxvYiwgdXAgdG8gMSBUQi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgYmxvYiBzaXplIG11c3QgYmUgYWxpZ25lZCB0byBhIDUxMi1ieXRlIGJvdW5kYXJ5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVzaXplKGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zIH0sIHJlc2l6ZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlckFjdGlvbiBSZXF1aXJlZCBpZiB0aGUgeC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlciBoZWFkZXIgaXMgc2V0IGZvciB0aGUgcmVxdWVzdC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9wZXJ0eSBhcHBsaWVzIHRvIHBhZ2UgYmxvYnMgb25seS4gVGhpcyBwcm9wZXJ0eSBpbmRpY2F0ZXMgaG93IHRoZSBzZXJ2aWNlIHNob3VsZCBtb2RpZnkgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2IncyBzZXF1ZW5jZSBudW1iZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwZGF0ZVNlcXVlbmNlTnVtYmVyKHNlcXVlbmNlTnVtYmVyQWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IHNlcXVlbmNlTnVtYmVyQWN0aW9uLCBvcHRpb25zIH0sIHVwZGF0ZVNlcXVlbmNlTnVtYmVyT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDb3B5IEluY3JlbWVudGFsIG9wZXJhdGlvbiBjb3BpZXMgYSBzbmFwc2hvdCBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiB0byBhIGRlc3RpbmF0aW9uIHBhZ2UgYmxvYi5cbiAgICAgKiBUaGUgc25hcHNob3QgaXMgY29waWVkIHN1Y2ggdGhhdCBvbmx5IHRoZSBkaWZmZXJlbnRpYWwgY2hhbmdlcyBiZXR3ZWVuIHRoZSBwcmV2aW91c2x5IGNvcGllZFxuICAgICAqIHNuYXBzaG90IGFyZSB0cmFuc2ZlcnJlZCB0byB0aGUgZGVzdGluYXRpb24uIFRoZSBjb3BpZWQgc25hcHNob3RzIGFyZSBjb21wbGV0ZSBjb3BpZXMgb2YgdGhlXG4gICAgICogb3JpZ2luYWwgc25hcHNob3QgYW5kIGNhbiBiZSByZWFkIG9yIGNvcGllZCBmcm9tIGFzIHVzdWFsLiBUaGlzIEFQSSBpcyBzdXBwb3J0ZWQgc2luY2UgUkVTVCB2ZXJzaW9uXG4gICAgICogMjAxNi0wNS0zMS5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY29weUluY3JlbWVudGFsKGNvcHlTb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29weVNvdXJjZSwgb3B0aW9ucyB9LCBjb3B5SW5jcmVtZW50YWxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIkMiA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3QgY3JlYXRlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ3JlYXRlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgICAgIGJsb2JUeXBlLFxuICAgICAgICBibG9iQ29udGVudExlbmd0aCxcbiAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IHVwbG9hZFBhZ2VzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keTEsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDE5XSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgIGNvbnRlbnRUeXBlMSxcbiAgICAgICAgYWNjZXB0MixcbiAgICAgICAgcGFnZVdyaXRlLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyTGVzc1RoYW5PckVxdWFsVG8sXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbixcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckVxdWFsVG8sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IGNsZWFyUGFnZXNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ2xlYXJQYWdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTldLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyTGVzc1RoYW5PckVxdWFsVG8sXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbixcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckVxdWFsVG8sXG4gICAgICAgIHBhZ2VXcml0ZTEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgdXBsb2FkUGFnZXNGcm9tVVJMT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxOV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZNYXRjaCxcbiAgICAgICAgc291cmNlSWZOb25lTWF0Y2gsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uLFxuICAgICAgICBwYWdlV3JpdGUsXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyRXF1YWxUbyxcbiAgICAgICAgc291cmNlVXJsLFxuICAgICAgICBzb3VyY2VSYW5nZSxcbiAgICAgICAgc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICByYW5nZTEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgZ2V0UGFnZVJhbmdlc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogUGFnZUxpc3QsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMjAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgZ2V0UGFnZVJhbmdlc0RpZmZPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFBhZ2VMaXN0LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMjAsXG4gICAgICAgIHByZXZzbmFwc2hvdCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgcHJldlNuYXBzaG90VXJsLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IHJlc2l6ZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JSZXNpemVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtjb21wLCB0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBibG9iQ29udGVudExlbmd0aCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCB1cGRhdGVTZXF1ZW5jZU51bWJlck9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbY29tcCwgdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgc2VxdWVuY2VOdW1iZXJBY3Rpb24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgY29weUluY3JlbWVudGFsT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ29weUluY3JlbWVudGFsRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyMV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGNvcHlTb3VyY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBBcHBlbmRCbG9iIG9wZXJhdGlvbnMuICovXG5jbGFzcyBBcHBlbmRCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQXBwZW5kQmxvYiBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDcmVhdGUgQXBwZW5kIEJsb2Igb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgYXBwZW5kIGJsb2IuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNyZWF0ZShjb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgY3JlYXRlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBBcHBlbmQgQmxvY2sgb3BlcmF0aW9uIGNvbW1pdHMgYSBuZXcgYmxvY2sgb2YgZGF0YSB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGFwcGVuZCBibG9iLiBUaGVcbiAgICAgKiBBcHBlbmQgQmxvY2sgb3BlcmF0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGlmIHRoZSBibG9iIHdhcyBjcmVhdGVkIHdpdGggeC1tcy1ibG9iLXR5cGUgc2V0IHRvXG4gICAgICogQXBwZW5kQmxvYi4gQXBwZW5kIEJsb2NrIGlzIHN1cHBvcnRlZCBvbmx5IG9uIHZlcnNpb24gMjAxNS0wMi0yMSB2ZXJzaW9uIG9yIGxhdGVyLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGJvZHkgSW5pdGlhbCBkYXRhXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhcHBlbmRCbG9jayhjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMgfSwgYXBwZW5kQmxvY2tPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gY29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2Igd2hlcmVcbiAgICAgKiB0aGUgY29udGVudHMgYXJlIHJlYWQgZnJvbSBhIHNvdXJjZSB1cmwuIFRoZSBBcHBlbmQgQmxvY2sgb3BlcmF0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGlmIHRoZSBibG9iXG4gICAgICogd2FzIGNyZWF0ZWQgd2l0aCB4LW1zLWJsb2ItdHlwZSBzZXQgdG8gQXBwZW5kQmxvYi4gQXBwZW5kIEJsb2NrIGlzIHN1cHBvcnRlZCBvbmx5IG9uIHZlcnNpb25cbiAgICAgKiAyMDE1LTAyLTIxIHZlcnNpb24gb3IgbGF0ZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZVVybCBTcGVjaWZ5IGEgVVJMIHRvIHRoZSBjb3B5IHNvdXJjZS5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYXBwZW5kQmxvY2tGcm9tVXJsKHNvdXJjZVVybCwgY29udGVudExlbmd0aCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBzb3VyY2VVcmwsIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgYXBwZW5kQmxvY2tGcm9tVXJsT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZWFsIG9wZXJhdGlvbiBzZWFscyB0aGUgQXBwZW5kIEJsb2IgdG8gbWFrZSBpdCByZWFkLW9ubHkuIFNlYWwgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvblxuICAgICAqIDIwMTktMTItMTIgdmVyc2lvbiBvciBsYXRlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNlYWwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNlYWxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIkMSA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3QgY3JlYXRlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgYmxvYlR5cGUxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcbmNvbnN0IGFwcGVuZEJsb2NrT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHkxLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgIGNvbnRlbnRUeXBlMSxcbiAgICAgICAgYWNjZXB0MixcbiAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgYXBwZW5kUG9zaXRpb24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcbmNvbnN0IGFwcGVuZEJsb2NrRnJvbVVybE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb24sXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICBzb3VyY2VVcmwsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgYXBwZW5kUG9zaXRpb24sXG4gICAgICAgIHNvdXJjZVJhbmdlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMSxcbn07XG5jb25zdCBzZWFsT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iU2VhbEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyM10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBhcHBlbmRQb3NpdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIEJsb2NrQmxvYiBvcGVyYXRpb25zLiAqL1xuY2xhc3MgQmxvY2tCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQmxvY2tCbG9iIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFVwbG9hZCBCbG9jayBCbG9iIG9wZXJhdGlvbiB1cGRhdGVzIHRoZSBjb250ZW50IG9mIGFuIGV4aXN0aW5nIGJsb2NrIGJsb2IuIFVwZGF0aW5nIGFuIGV4aXN0aW5nXG4gICAgICogYmxvY2sgYmxvYiBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBtZXRhZGF0YSBvbiB0aGUgYmxvYi4gUGFydGlhbCB1cGRhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggUHV0XG4gICAgICogQmxvYjsgdGhlIGNvbnRlbnQgb2YgdGhlIGV4aXN0aW5nIGJsb2IgaXMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgY29udGVudCBvZiB0aGUgbmV3IGJsb2IuIFRvIHBlcmZvcm0gYVxuICAgICAqIHBhcnRpYWwgdXBkYXRlIG9mIHRoZSBjb250ZW50IG9mIGEgYmxvY2sgYmxvYiwgdXNlIHRoZSBQdXQgQmxvY2sgTGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwbG9hZChjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMgfSwgdXBsb2FkT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBQdXQgQmxvYiBmcm9tIFVSTCBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBCbG9jayBCbG9iIHdoZXJlIHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiBhcmUgcmVhZFxuICAgICAqIGZyb20gYSBnaXZlbiBVUkwuICBUaGlzIEFQSSBpcyBzdXBwb3J0ZWQgYmVnaW5uaW5nIHdpdGggdGhlIDIwMjAtMDQtMDggdmVyc2lvbi4gUGFydGlhbCB1cGRhdGVzIGFyZVxuICAgICAqIG5vdCBzdXBwb3J0ZWQgd2l0aCBQdXQgQmxvYiBmcm9tIFVSTDsgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvYiBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZVxuICAgICAqIGNvbnRlbnQgb2YgdGhlIG5ldyBibG9iLiAgVG8gcGVyZm9ybSBwYXJ0aWFsIHVwZGF0ZXMgdG8gYSBibG9jayBibG9i4oCZcyBjb250ZW50cyB1c2luZyBhIHNvdXJjZSBVUkwsXG4gICAgICogdXNlIHRoZSBQdXQgQmxvY2sgZnJvbSBVUkwgQVBJIGluIGNvbmp1bmN0aW9uIHdpdGggUHV0IEJsb2NrIExpc3QuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcHV0QmxvYkZyb21VcmwoY29udGVudExlbmd0aCwgY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBjb3B5U291cmNlLCBvcHRpb25zIH0sIHB1dEJsb2JGcm9tVXJsT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTdGFnZSBCbG9jayBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBibG9jayB0byBiZSBjb21taXR0ZWQgYXMgcGFydCBvZiBhIGJsb2JcbiAgICAgKiBAcGFyYW0gYmxvY2tJZCBBIHZhbGlkIEJhc2U2NCBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBibG9jay4gUHJpb3IgdG8gZW5jb2RpbmcsIHRoZSBzdHJpbmdcbiAgICAgKiAgICAgICAgICAgICAgICBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2NCBieXRlcyBpbiBzaXplLiBGb3IgYSBnaXZlbiBibG9iLCB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBzcGVjaWZpZWRcbiAgICAgKiAgICAgICAgICAgICAgICBmb3IgdGhlIGJsb2NraWQgcGFyYW1ldGVyIG11c3QgYmUgdGhlIHNhbWUgc2l6ZSBmb3IgZWFjaCBibG9jay5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3RhZ2VCbG9jayhibG9ja0lkLCBjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMgfSwgc3RhZ2VCbG9ja09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU3RhZ2UgQmxvY2sgb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgYmxvY2sgdG8gYmUgY29tbWl0dGVkIGFzIHBhcnQgb2YgYSBibG9iIHdoZXJlIHRoZSBjb250ZW50c1xuICAgICAqIGFyZSByZWFkIGZyb20gYSBVUkwuXG4gICAgICogQHBhcmFtIGJsb2NrSWQgQSB2YWxpZCBCYXNlNjQgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgYmxvY2suIFByaW9yIHRvIGVuY29kaW5nLCB0aGUgc3RyaW5nXG4gICAgICogICAgICAgICAgICAgICAgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNjQgYnl0ZXMgaW4gc2l6ZS4gRm9yIGEgZ2l2ZW4gYmxvYiwgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgc3BlY2lmaWVkXG4gICAgICogICAgICAgICAgICAgICAgZm9yIHRoZSBibG9ja2lkIHBhcmFtZXRlciBtdXN0IGJlIHRoZSBzYW1lIHNpemUgZm9yIGVhY2ggYmxvY2suXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc291cmNlVXJsIFNwZWNpZnkgYSBVUkwgdG8gdGhlIGNvcHkgc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3RhZ2VCbG9ja0Zyb21VUkwoYmxvY2tJZCwgY29udGVudExlbmd0aCwgc291cmNlVXJsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIHNvdXJjZVVybCwgb3B0aW9ucyB9LCBzdGFnZUJsb2NrRnJvbVVSTE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ29tbWl0IEJsb2NrIExpc3Qgb3BlcmF0aW9uIHdyaXRlcyBhIGJsb2IgYnkgc3BlY2lmeWluZyB0aGUgbGlzdCBvZiBibG9jayBJRHMgdGhhdCBtYWtlIHVwIHRoZVxuICAgICAqIGJsb2IuIEluIG9yZGVyIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBhIGJsb2IsIGEgYmxvY2sgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlXG4gICAgICogc2VydmVyIGluIGEgcHJpb3IgUHV0IEJsb2NrIG9wZXJhdGlvbi4gWW91IGNhbiBjYWxsIFB1dCBCbG9jayBMaXN0IHRvIHVwZGF0ZSBhIGJsb2IgYnkgdXBsb2FkaW5nXG4gICAgICogb25seSB0aG9zZSBibG9ja3MgdGhhdCBoYXZlIGNoYW5nZWQsIHRoZW4gY29tbWl0dGluZyB0aGUgbmV3IGFuZCBleGlzdGluZyBibG9ja3MgdG9nZXRoZXIuIFlvdSBjYW5cbiAgICAgKiBkbyB0aGlzIGJ5IHNwZWNpZnlpbmcgd2hldGhlciB0byBjb21taXQgYSBibG9jayBmcm9tIHRoZSBjb21taXR0ZWQgYmxvY2sgbGlzdCBvciBmcm9tIHRoZVxuICAgICAqIHVuY29tbWl0dGVkIGJsb2NrIGxpc3QsIG9yIHRvIGNvbW1pdCB0aGUgbW9zdCByZWNlbnRseSB1cGxvYWRlZCB2ZXJzaW9uIG9mIHRoZSBibG9jaywgd2hpY2hldmVyIGxpc3RcbiAgICAgKiBpdCBtYXkgYmVsb25nIHRvLlxuICAgICAqIEBwYXJhbSBibG9ja3MgQmxvYiBCbG9ja3MuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjb21taXRCbG9ja0xpc3QoYmxvY2tzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2Nrcywgb3B0aW9ucyB9LCBjb21taXRCbG9ja0xpc3RPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBCbG9jayBMaXN0IG9wZXJhdGlvbiByZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgYmxvY2tzIHRoYXQgaGF2ZSBiZWVuIHVwbG9hZGVkIGFzIHBhcnQgb2YgYSBibG9ja1xuICAgICAqIGJsb2JcbiAgICAgKiBAcGFyYW0gbGlzdFR5cGUgU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZSBsaXN0IG9mIGNvbW1pdHRlZCBibG9ja3MsIHRoZSBsaXN0IG9mIHVuY29tbWl0dGVkXG4gICAgICogICAgICAgICAgICAgICAgIGJsb2Nrcywgb3IgYm90aCBsaXN0cyB0b2dldGhlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEJsb2NrTGlzdChsaXN0VHlwZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsaXN0VHlwZSwgb3B0aW9ucyB9LCBnZXRCbG9ja0xpc3RPcGVyYXRpb25TcGVjKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IHVwbG9hZE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iVXBsb2FkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBib2R5MSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0aWVyLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgIGNvbnRlbnRUeXBlMSxcbiAgICAgICAgYWNjZXB0MixcbiAgICAgICAgYmxvYlR5cGUyLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcImJpbmFyeVwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3QgcHV0QmxvYkZyb21VcmxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VJZlRhZ3MsXG4gICAgICAgIGNvcHlTb3VyY2UsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgY29weVNvdXJjZVRhZ3MsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICBibG9iVHlwZTIsXG4gICAgICAgIGNvcHlTb3VyY2VCbG9iUHJvcGVydGllcyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3Qgc3RhZ2VCbG9ja09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHkxLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMjQsXG4gICAgICAgIGJsb2NrSWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcImJpbmFyeVwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3Qgc3RhZ2VCbG9ja0Zyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyNCxcbiAgICAgICAgYmxvY2tJZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgc291cmNlVXJsLFxuICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgIHNvdXJjZVJhbmdlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3QgY29tbWl0QmxvY2tMaXN0T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJsb2NrcyxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMjVdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBsZWdhbEhvbGQxLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyLFxufTtcbmNvbnN0IGdldEJsb2NrTGlzdE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogQmxvY2tMaXN0LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iR2V0QmxvY2tMaXN0SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgY29tcDI1LFxuICAgICAgICBsaXN0VHlwZSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyLFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xubGV0IFN0b3JhZ2VDbGllbnQkMSA9IGNsYXNzIFN0b3JhZ2VDbGllbnQgZXh0ZW5kcyBjb3JlSHR0cENvbXBhdF9fbmFtZXNwYWNlLkV4dGVuZGVkU2VydmljZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFN0b3JhZ2VDbGllbnQgY2xhc3MuXG4gICAgICogQHBhcmFtIHVybCBUaGUgVVJMIG9mIHRoZSBzZXJ2aWNlIGFjY291bnQsIGNvbnRhaW5lciwgb3IgYmxvYiB0aGF0IGlzIHRoZSB0YXJnZXQgb2YgdGhlIGRlc2lyZWRcbiAgICAgKiAgICAgICAgICAgIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgcGFyYW1ldGVyIG9wdGlvbnNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIndXJsJyBjYW5ub3QgYmUgbnVsbFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbml0aWFsaXppbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIG9wdGlvbnNcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICByZXF1ZXN0Q29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYWNrYWdlRGV0YWlscyA9IGBhenNkay1qcy1henVyZS1zdG9yYWdlLWJsb2IvMTIuMjUuMGA7XG4gICAgICAgIGNvbnN0IHVzZXJBZ2VudFByZWZpeCA9IG9wdGlvbnMudXNlckFnZW50T3B0aW9ucyAmJiBvcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMudXNlckFnZW50UHJlZml4XG4gICAgICAgICAgICA/IGAke29wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXh9ICR7cGFja2FnZURldGFpbHN9YFxuICAgICAgICAgICAgOiBgJHtwYWNrYWdlRGV0YWlsc31gO1xuICAgICAgICBjb25zdCBvcHRpb25zV2l0aERlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKSwgb3B0aW9ucyksIHsgdXNlckFnZW50T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHVzZXJBZ2VudFByZWZpeCxcbiAgICAgICAgICAgIH0sIGVuZHBvaW50OiAoX2IgPSAoX2EgPSBvcHRpb25zLmVuZHBvaW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBvcHRpb25zLmJhc2VVcmkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwie3VybH1cIiB9KTtcbiAgICAgICAgc3VwZXIob3B0aW9uc1dpdGhEZWZhdWx0cyk7XG4gICAgICAgIC8vIFBhcmFtZXRlciBhc3NpZ25tZW50c1xuICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICAgICAgLy8gQXNzaWduaW5nIHZhbHVlcyB0byBDb25zdGFudCBwYXJhbWV0ZXJzXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvbiB8fCBcIjIwMjQtMTEtMDRcIjtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gbmV3IFNlcnZpY2VJbXBsKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IG5ldyBDb250YWluZXJJbXBsKHRoaXMpO1xuICAgICAgICB0aGlzLmJsb2IgPSBuZXcgQmxvYkltcGwodGhpcyk7XG4gICAgICAgIHRoaXMucGFnZUJsb2IgPSBuZXcgUGFnZUJsb2JJbXBsKHRoaXMpO1xuICAgICAgICB0aGlzLmFwcGVuZEJsb2IgPSBuZXcgQXBwZW5kQmxvYkltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuYmxvY2tCbG9iID0gbmV3IEJsb2NrQmxvYkltcGwodGhpcyk7XG4gICAgfVxufTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBTdG9yYWdlQ29udGV4dENsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQkMSB7XG4gICAgYXN5bmMgc2VuZE9wZXJhdGlvblJlcXVlc3Qob3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvblNwZWNUb1NlbmQgPSBPYmplY3QuYXNzaWduKHt9LCBvcGVyYXRpb25TcGVjKTtcbiAgICAgICAgaWYgKG9wZXJhdGlvblNwZWNUb1NlbmQucGF0aCA9PT0gXCIve2NvbnRhaW5lck5hbWV9XCIgfHxcbiAgICAgICAgICAgIG9wZXJhdGlvblNwZWNUb1NlbmQucGF0aCA9PT0gXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25TcGVjVG9TZW5kLnBhdGggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5zZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWNUb1NlbmQpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgU3RvcmFnZUNsaWVudCByZXByZXNlbnRzIGEgYmFzZWQgVVJMIGNsYXNzIGZvciB7QGxpbmsgQmxvYlNlcnZpY2VDbGllbnR9LCB7QGxpbmsgQ29udGFpbmVyQ2xpZW50fVxuICogYW5kIGV0Yy5cbiAqL1xuY2xhc3MgU3RvcmFnZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlQ2xpZW50LlxuICAgICAqIEBwYXJhbSB1cmwgLSB1cmwgdG8gcmVzb3VyY2VcbiAgICAgKiBAcGFyYW0gcGlwZWxpbmUgLSByZXF1ZXN0IHBvbGljeSBwaXBlbGluZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmwsIHBpcGVsaW5lKSB7XG4gICAgICAgIC8vIFVSTCBzaG91bGQgYmUgZW5jb2RlZCBhbmQgb25seSBvbmNlLCBwcm90b2NvbCBsYXllciBzaG91bGRuJ3QgZW5jb2RlIFVSTCBhZ2FpblxuICAgICAgICB0aGlzLnVybCA9IGVzY2FwZVVSTFBhdGgodXJsKTtcbiAgICAgICAgdGhpcy5hY2NvdW50TmFtZSA9IGdldEFjY291bnROYW1lRnJvbVVybCh1cmwpO1xuICAgICAgICB0aGlzLnBpcGVsaW5lID0gcGlwZWxpbmU7XG4gICAgICAgIHRoaXMuc3RvcmFnZUNsaWVudENvbnRleHQgPSBuZXcgU3RvcmFnZUNvbnRleHRDbGllbnQodGhpcy51cmwsIGdldENvcmVDbGllbnRPcHRpb25zKHBpcGVsaW5lKSk7XG4gICAgICAgIHRoaXMuaXNIdHRwcyA9IGlFcXVhbChnZXRVUkxTY2hlbWUodGhpcy51cmwpIHx8IFwiXCIsIFwiaHR0cHNcIik7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWxGcm9tUGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICAvLyBPdmVycmlkZSBwcm90b2NvbCBsYXllcidzIGRlZmF1bHQgY29udGVudC10eXBlXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VDbGllbnRDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dDtcbiAgICAgICAgc3RvcmFnZUNsaWVudENvbnRleHQucmVxdWVzdENvbnRlbnRUeXBlID0gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIENyZWF0ZXMgYSBzcGFuIHVzaW5nIHRoZSBnbG9iYWwgdHJhY2VyLlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IHRyYWNpbmdDbGllbnQgPSBjb3JlVHJhY2luZy5jcmVhdGVUcmFjaW5nQ2xpZW50KHtcbiAgICBwYWNrYWdlTmFtZTogXCJAYXp1cmUvc3RvcmFnZS1ibG9iXCIsXG4gICAgcGFja2FnZVZlcnNpb246IFNES19WRVJTSU9OLFxuICAgIG5hbWVzcGFjZTogXCJNaWNyb3NvZnQuU3RvcmFnZVwiLFxufSk7XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IGEgU2VydmljZVNBUyB0byBhIGJsb2IuIFNldHRpbmdcbiAqIGEgdmFsdWUgdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IHBlcm1pc3Npb25zIGZvciB0aGF0IG9wZXJhdGlvbi4gT25jZSBhbGxcbiAqIHRoZSB2YWx1ZXMgYXJlIHNldCwgdGhpcyBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIHRvU3RyaW5nIGFuZCBzZXQgYXMgdGhlIHBlcm1pc3Npb25zIGZpZWxkIG9uIGFcbiAqIHtAbGluayBCbG9iU0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgcGVybWlzc2lvbnMgc3RyaW5nIHdpdGhvdXQgdGhpcyBjbGFzcywgYnV0XG4gKiB0aGUgb3JkZXIgb2YgdGhlIHBlcm1pc3Npb25zIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQmxvYlNBU1Blcm1pc3Npb25zIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBSZWFkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgQWRkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBDcmVhdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNyZWF0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFdyaXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cml0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIERlbGV0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIHZlcnNpb24gYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlbGV0ZVZlcnNpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNmaWVzIFRhZyBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFnID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgTW92ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubW92ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIEV4ZWN1dGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4ZWN1dGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBTZXRJbW11dGFiaWxpdHlQb2xpY3kgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgUGVybWFuZW50IERlbGV0ZSBpcyBwZXJtaXR0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBlcm1hbmVudERlbGV0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2JTQVNQZXJtaXNzaW9uc30gZnJvbSB0aGUgc3BlY2lmaWVkIHBlcm1pc3Npb25zIHN0cmluZy4gVGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhblxuICAgICAqIEVycm9yIGlmIGl0IGVuY291bnRlcnMgYSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKHBlcm1pc3Npb25zKSB7XG4gICAgICAgIGNvbnN0IGJsb2JTQVNQZXJtaXNzaW9ucyA9IG5ldyBCbG9iU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXIpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiclwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLndyaXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmRlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5tb3ZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHBlcm1pc3Npb246ICR7Y2hhcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmxvYlNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2JTQVNQZXJtaXNzaW9uc30gZnJvbSBhIHJhdyBvYmplY3Qgd2hpY2ggY29udGFpbnMgc2FtZSBrZXlzIGFzIGl0XG4gICAgICogYW5kIGJvb2xlYW4gdmFsdWVzIGZvciB0aGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25MaWtlIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbShwZXJtaXNzaW9uTGlrZSkge1xuICAgICAgICBjb25zdCBibG9iU0FTUGVybWlzc2lvbnMgPSBuZXcgQmxvYlNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5yZWFkKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmFkZCkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmNyZWF0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmNyZWF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLndyaXRlKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnRhZykge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLm1vdmUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5tb3ZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZXhlY3V0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibG9iU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBwZXJtaXNzaW9ucyB0byBhIHN0cmluZy4gVXNpbmcgdGhpcyBtZXRob2Qgd2lsbCBndWFyYW50ZWUgdGhlIHBlcm1pc3Npb25zIGFyZSBpbiBhblxuICAgICAqIG9yZGVyIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBzdHJpbmcgd2hpY2ggcmVwcmVzZW50cyB0aGUgQmxvYlNBU1Blcm1pc3Npb25zXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG4gICAgICAgIGlmICh0aGlzLnJlYWQpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFkZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cml0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIndcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJtXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4ZWN1dGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgYSBTZXJ2aWNlU0FTIHRvIGEgY29udGFpbmVyLlxuICogU2V0dGluZyBhIHZhbHVlIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBwZXJtaXNzaW9ucyBmb3IgdGhhdCBvcGVyYXRpb24uXG4gKiBPbmNlIGFsbCB0aGUgdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSBwZXJtaXNzaW9ucyBmaWVsZCBvbiBhXG4gKiB7QGxpbmsgQmxvYlNBU1NpZ25hdHVyZVZhbHVlc30gb2JqZWN0LiBJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlIHBlcm1pc3Npb25zIHN0cmluZyB3aXRob3V0IHRoaXMgY2xhc3MsIGJ1dFxuICogdGhlIG9yZGVyIG9mIHRoZSBwZXJtaXNzaW9ucyBpcyBwYXJ0aWN1bGFyIGFuZCB0aGlzIGNsYXNzIGd1YXJhbnRlZXMgY29ycmVjdG5lc3MuXG4gKi9cbmNsYXNzIENvbnRhaW5lclNBU1Blcm1pc3Npb25zIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBSZWFkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgQWRkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBDcmVhdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNyZWF0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFdyaXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cml0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIERlbGV0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIHZlcnNpb24gYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlbGV0ZVZlcnNpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBMaXN0IGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5saXN0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjZmllcyBUYWcgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhZyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIE1vdmUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1vdmUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBFeGVjdXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leGVjdXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgU2V0SW1tdXRhYmlsaXR5UG9saWN5IGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IFBlcm1hbmVudCBEZWxldGUgaXMgcGVybWl0dGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZXJtYW5lbnREZWxldGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IEZpbHRlciBCbG9icyBieSBUYWdzIGlzIHBlcm1pdHRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyQnlUYWdzID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIENvbnRhaW5lclNBU1Blcm1pc3Npb25zfSBmcm9tIHRoZSBzcGVjaWZpZWQgcGVybWlzc2lvbnMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UocGVybWlzc2lvbnMpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyU0FTUGVybWlzc2lvbnMgPSBuZXcgQ29udGFpbmVyU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXIpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiclwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuYWRkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5leGVjdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZmlsdGVyQnlUYWdzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcGVybWlzc2lvbiAke2NoYXJ9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIENvbnRhaW5lclNBU1Blcm1pc3Npb25zfSBmcm9tIGEgcmF3IG9iamVjdCB3aGljaCBjb250YWlucyBzYW1lIGtleXMgYXMgaXRcbiAgICAgKiBhbmQgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbkxpa2UgLVxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHBlcm1pc3Npb25MaWtlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclNBU1Blcm1pc3Npb25zID0gbmV3IENvbnRhaW5lclNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5yZWFkKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuYWRkKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5jcmVhdGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmNyZWF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLndyaXRlKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UubGlzdCkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMubGlzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZVZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS50YWcpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLm1vdmUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5leGVjdXRlKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5leGVjdXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmZpbHRlckJ5VGFncykge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZmlsdGVyQnlUYWdzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGFpbmVyU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBwZXJtaXNzaW9ucyB0byBhIHN0cmluZy4gVXNpbmcgdGhpcyBtZXRob2Qgd2lsbCBndWFyYW50ZWUgdGhlIHBlcm1pc3Npb25zIGFyZSBpbiBhblxuICAgICAqIG9yZGVyIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogVGhlIG9yZGVyIG9mIHRoZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBhcyBzcGVjaWZpZWQgaGVyZSB0byBlbnN1cmUgY29ycmVjdG5lc3MuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5yZWFkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hZGQpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNyZWF0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JpdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ3XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInhcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwidFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwibVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGVjdXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBlcm1hbmVudERlbGV0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyQnlUYWdzKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsIGlzIG9ubHkgdXNlZCBmb3IgZ2VuZXJhdGlvbiBvZiB1c2VyIGRlbGVnYXRpb24gU0FTLlxuICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY3JlYXRlLXVzZXItZGVsZWdhdGlvbi1zYXNcbiAqL1xuY2xhc3MgVXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5cbiAgICAgKiBAcGFyYW0gYWNjb3VudE5hbWUgLVxuICAgICAqIEBwYXJhbSB1c2VyRGVsZWdhdGlvbktleSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYWNjb3VudE5hbWUsIHVzZXJEZWxlZ2F0aW9uS2V5KSB7XG4gICAgICAgIHRoaXMuYWNjb3VudE5hbWUgPSBhY2NvdW50TmFtZTtcbiAgICAgICAgdGhpcy51c2VyRGVsZWdhdGlvbktleSA9IHVzZXJEZWxlZ2F0aW9uS2V5O1xuICAgICAgICB0aGlzLmtleSA9IEJ1ZmZlci5mcm9tKHVzZXJEZWxlZ2F0aW9uS2V5LnZhbHVlLCBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgaGFzaCBzaWduYXR1cmUgZm9yIGFuIEhUVFAgcmVxdWVzdCBvciBmb3IgYSBTQVMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyaW5nVG9TaWduIC1cbiAgICAgKi9cbiAgICBjb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHN0cmluZ1RvU2lnbjogJHtKU09OLnN0cmluZ2lmeShzdHJpbmdUb1NpZ24pfWApO1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoXCJzaGEyNTZcIiwgdGhpcy5rZXkpLnVwZGF0ZShzdHJpbmdUb1NpZ24sIFwidXRmOFwiKS5kaWdlc3QoXCJiYXNlNjRcIik7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogR2VuZXJhdGUgU2FzSVBSYW5nZSBmb3JtYXQgc3RyaW5nLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBcIjguOC44LjhcIiBvciBcIjEuMS4xLjEtMjU1LjI1NS4yNTUuMjU1XCJcbiAqXG4gKiBAcGFyYW0gaXBSYW5nZSAtXG4gKi9cbmZ1bmN0aW9uIGlwUmFuZ2VUb1N0cmluZyhpcFJhbmdlKSB7XG4gICAgcmV0dXJuIGlwUmFuZ2UuZW5kID8gYCR7aXBSYW5nZS5zdGFydH0tJHtpcFJhbmdlLmVuZH1gIDogaXBSYW5nZS5zdGFydDtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFByb3RvY29scyBmb3IgZ2VuZXJhdGVkIFNBUy5cbiAqL1xuZXhwb3J0cy5TQVNQcm90b2NvbCA9IHZvaWQgMDtcbihmdW5jdGlvbiAoU0FTUHJvdG9jb2wpIHtcbiAgICAvKipcbiAgICAgKiBQcm90b2NvbCB0aGF0IGFsbG93cyBIVFRQUyBvbmx5XG4gICAgICovXG4gICAgU0FTUHJvdG9jb2xbXCJIdHRwc1wiXSA9IFwiaHR0cHNcIjtcbiAgICAvKipcbiAgICAgKiBQcm90b2NvbCB0aGF0IGFsbG93cyBib3RoIEhUVFBTIGFuZCBIVFRQXG4gICAgICovXG4gICAgU0FTUHJvdG9jb2xbXCJIdHRwc0FuZEh0dHBcIl0gPSBcImh0dHBzLGh0dHBcIjtcbn0pKGV4cG9ydHMuU0FTUHJvdG9jb2wgfHwgKGV4cG9ydHMuU0FTUHJvdG9jb2wgPSB7fSkpO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb21wb25lbnRzIHRoYXQgbWFrZSB1cCBhbiBBenVyZSBTdG9yYWdlIFNBUycgcXVlcnkgcGFyYW1ldGVycy4gVGhpcyB0eXBlIGlzIG5vdCBjb25zdHJ1Y3RlZCBkaXJlY3RseVxuICogYnkgdGhlIHVzZXI7IGl0IGlzIG9ubHkgZ2VuZXJhdGVkIGJ5IHRoZSB7QGxpbmsgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlc30gYW5kIHtAbGluayBCbG9iU0FTU2lnbmF0dXJlVmFsdWVzfVxuICogdHlwZXMuIE9uY2UgZ2VuZXJhdGVkLCBpdCBjYW4gYmUgZW5jb2RlZCBpbnRvIGEge0BsaW5rIFN0cmluZ30gYW5kIGFwcGVuZGVkIHRvIGEgVVJMIGRpcmVjdGx5ICh0aG91Z2ggY2F1dGlvbiBzaG91bGRcbiAqIGJlIHRha2VuIGhlcmUgaW4gY2FzZSB0aGVyZSBhcmUgZXhpc3RpbmcgcXVlcnkgcGFyYW1ldGVycywgd2hpY2ggbWlnaHQgYWZmZWN0IHRoZSBhcHByb3ByaWF0ZSBtZWFucyBvZiBhcHBlbmRpbmdcbiAqIHRoZXNlIHF1ZXJ5IHBhcmFtZXRlcnMpLlxuICpcbiAqIE5PVEU6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBpbW11dGFibGUuXG4gKi9cbmNsYXNzIFNBU1F1ZXJ5UGFyYW1ldGVycyB7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwuIElQIHJhbmdlIGFsbG93ZWQgZm9yIHRoaXMgU0FTLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlwUmFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmlwUmFuZ2VJbm5lcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaXBSYW5nZUlubmVyLmVuZCxcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5pcFJhbmdlSW5uZXIuc3RhcnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHZlcnNpb24sIHNpZ25hdHVyZSwgcGVybWlzc2lvbnNPck9wdGlvbnMsIHNlcnZpY2VzLCByZXNvdXJjZVR5cGVzLCBwcm90b2NvbCwgc3RhcnRzT24sIGV4cGlyZXNPbiwgaXBSYW5nZSwgaWRlbnRpZmllciwgcmVzb3VyY2UsIGNhY2hlQ29udHJvbCwgY29udGVudERpc3Bvc2l0aW9uLCBjb250ZW50RW5jb2RpbmcsIGNvbnRlbnRMYW5ndWFnZSwgY29udGVudFR5cGUsIHVzZXJEZWxlZ2F0aW9uS2V5LCBwcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCwgY29ycmVsYXRpb25JZCwgZW5jcnlwdGlvblNjb3BlKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgICAgICBpZiAocGVybWlzc2lvbnNPck9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGVybWlzc2lvbnNPck9wdGlvbnMgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIFNBU1F1ZXJ5UGFyYW1ldGVyc09wdGlvbnNcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5zZXJ2aWNlcztcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VUeXBlcyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnJlc291cmNlVHlwZXM7XG4gICAgICAgICAgICB0aGlzLnByb3RvY29sID0gcGVybWlzc2lvbnNPck9wdGlvbnMucHJvdG9jb2w7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0c09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMuc3RhcnRzT247XG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNPbiA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmV4cGlyZXNPbjtcbiAgICAgICAgICAgIHRoaXMuaXBSYW5nZUlubmVyID0gcGVybWlzc2lvbnNPck9wdGlvbnMuaXBSYW5nZTtcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmlkZW50aWZpZXI7XG4gICAgICAgICAgICB0aGlzLmVuY3J5cHRpb25TY29wZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmVuY3J5cHRpb25TY29wZTtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5yZXNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVDb250cm9sID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50RGlzcG9zaXRpb24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jb250ZW50RGlzcG9zaXRpb247XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRFbmNvZGluZyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmNvbnRlbnRFbmNvZGluZztcbiAgICAgICAgICAgIHRoaXMuY29udGVudExhbmd1YWdlID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29udGVudExhbmd1YWdlO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmNvbnRlbnRUeXBlO1xuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRPaWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFRlbmFudElkID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTdGFydHNPbiA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkRXhwaXJlc09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkU2VydmljZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFNlcnZpY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRWZXJzaW9uID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkID0gcGVybWlzc2lvbnNPck9wdGlvbnMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3JyZWxhdGlvbklkID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29ycmVsYXRpb25JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VUeXBlcyA9IHJlc291cmNlVHlwZXM7XG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNPbiA9IGV4cGlyZXNPbjtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uc09yT3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRzT24gPSBzdGFydHNPbjtcbiAgICAgICAgICAgIHRoaXMuaXBSYW5nZUlubmVyID0gaXBSYW5nZTtcbiAgICAgICAgICAgIHRoaXMuZW5jcnlwdGlvblNjb3BlID0gZW5jcnlwdGlvblNjb3BlO1xuICAgICAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVDb250cm9sID0gY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50RGlzcG9zaXRpb24gPSBjb250ZW50RGlzcG9zaXRpb247XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRFbmNvZGluZyA9IGNvbnRlbnRFbmNvZGluZztcbiAgICAgICAgICAgIHRoaXMuY29udGVudExhbmd1YWdlID0gY29udGVudExhbmd1YWdlO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xuICAgICAgICAgICAgaWYgKHVzZXJEZWxlZ2F0aW9uS2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRPaWQgPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFRlbmFudElkID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTdGFydHNPbiA9IHVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkRXhwaXJlc09uID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkU2VydmljZSA9IHVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFNlcnZpY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRWZXJzaW9uID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkID0gcHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3JyZWxhdGlvbklkID0gY29ycmVsYXRpb25JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGVzIGFsbCBTQVMgcXVlcnkgcGFyYW1ldGVycyBpbnRvIGEgc3RyaW5nIHRoYXQgY2FuIGJlIGFwcGVuZGVkIHRvIGEgVVJMLlxuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgICAgICAgIFwic3ZcIixcbiAgICAgICAgICAgIFwic3NcIixcbiAgICAgICAgICAgIFwic3J0XCIsXG4gICAgICAgICAgICBcInNwclwiLFxuICAgICAgICAgICAgXCJzdFwiLFxuICAgICAgICAgICAgXCJzZVwiLFxuICAgICAgICAgICAgXCJzaXBcIixcbiAgICAgICAgICAgIFwic2lcIixcbiAgICAgICAgICAgIFwic2VzXCIsXG4gICAgICAgICAgICBcInNrb2lkXCIsIC8vIFNpZ25lZCBvYmplY3QgSURcbiAgICAgICAgICAgIFwic2t0aWRcIiwgLy8gU2lnbmVkIHRlbmFudCBJRFxuICAgICAgICAgICAgXCJza3RcIiwgLy8gU2lnbmVkIGtleSBzdGFydCB0aW1lXG4gICAgICAgICAgICBcInNrZVwiLCAvLyBTaWduZWQga2V5IGV4cGlyeSB0aW1lXG4gICAgICAgICAgICBcInNrc1wiLCAvLyBTaWduZWQga2V5IHNlcnZpY2VcbiAgICAgICAgICAgIFwic2t2XCIsIC8vIFNpZ25lZCBrZXkgdmVyc2lvblxuICAgICAgICAgICAgXCJzclwiLFxuICAgICAgICAgICAgXCJzcFwiLFxuICAgICAgICAgICAgXCJzaWdcIixcbiAgICAgICAgICAgIFwicnNjY1wiLFxuICAgICAgICAgICAgXCJyc2NkXCIsXG4gICAgICAgICAgICBcInJzY2VcIixcbiAgICAgICAgICAgIFwicnNjbFwiLFxuICAgICAgICAgICAgXCJyc2N0XCIsXG4gICAgICAgICAgICBcInNhb2lkXCIsXG4gICAgICAgICAgICBcInNjaWRcIixcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuICAgICAgICAgICAgc3dpdGNoIChwYXJhbSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdlwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3NcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zZXJ2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5yZXNvdXJjZVR5cGVzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNwclwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnByb3RvY29sKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0XCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc3RhcnRzT24gPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh0aGlzLnN0YXJ0c09uLCBmYWxzZSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5leHBpcmVzT24gPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh0aGlzLmV4cGlyZXNPbiwgZmFsc2UpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpcFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcodGhpcy5pcFJhbmdlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzaVwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VzXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuZW5jcnlwdGlvblNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrb2lkXCI6IC8vIFNpZ25lZCBvYmplY3QgSURcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zaWduZWRPaWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2t0aWRcIjogLy8gU2lnbmVkIHRlbmFudCBJRFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFRlbmFudElkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrdFwiOiAvLyBTaWduZWQga2V5IHN0YXJ0IHRpbWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zaWduZWRTdGFydHNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuc2lnbmVkU3RhcnRzT24sIGZhbHNlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza2VcIjogLy8gU2lnbmVkIGtleSBleHBpcnkgdGltZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZEV4cGlyZXNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuc2lnbmVkRXhwaXJlc09uLCBmYWxzZSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2tzXCI6IC8vIFNpZ25lZCBrZXkgc2VydmljZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFNlcnZpY2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2t2XCI6IC8vIFNpZ25lZCBrZXkgdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3JcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5yZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzcFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpZ1wiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25hdHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyc2NjXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuY2FjaGVDb250cm9sKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY2RcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb250ZW50RGlzcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicnNjZVwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvbnRlbnRFbmNvZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyc2NsXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuY29udGVudExhbmd1YWdlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY3RcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzYW9pZFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjaWRcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJpZXMuam9pbihcIiZcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgcHJpdmF0ZSBoZWxwZXIgbWV0aG9kIHVzZWQgdG8gZmlsdGVyIGFuZCBhcHBlbmQgcXVlcnkga2V5L3ZhbHVlIHBhaXJzIGludG8gYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcXVlcmllcyAtXG4gICAgICogQHBhcmFtIGtleSAtXG4gICAgICogQHBhcmFtIHZhbHVlIC1cbiAgICAgKi9cbiAgICB0cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBrZXkgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KTtcbiAgICAgICAgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgICAgICBpZiAoa2V5Lmxlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcXVlcmllcy5wdXNoKGAke2tleX09JHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXksIGFjY291bnROYW1lKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWxPclVzZXJEZWxlZ2F0aW9uS2V5LCBhY2NvdW50TmFtZSkuc2FzUXVlcnlQYXJhbWV0ZXJzO1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXksIGFjY291bnROYW1lKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA6IFNFUlZJQ0VfVkVSU0lPTjtcbiAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXkgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFxuICAgICAgICA/IHNoYXJlZEtleUNyZWRlbnRpYWxPclVzZXJEZWxlZ2F0aW9uS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGxldCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWw7XG4gICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgPT09IHVuZGVmaW5lZCAmJiBhY2NvdW50TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCA9IG5ldyBVc2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwoYWNjb3VudE5hbWUsIHNoYXJlZEtleUNyZWRlbnRpYWxPclVzZXJEZWxlZ2F0aW9uS2V5KTtcbiAgICB9XG4gICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgPT09IHVuZGVmaW5lZCAmJiB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIHNoYXJlZEtleUNyZWRlbnRpYWwsIHVzZXJEZWxlZ2F0aW9uS2V5IG9yIGFjY291bnROYW1lLlwiKTtcbiAgICB9XG4gICAgLy8gVmVyc2lvbiAyMDIwLTEyLTA2IGFkZHMgc3VwcG9ydCBmb3IgZW5jcnlwdGlvbnNjb3BlIGluIFNBUy5cbiAgICBpZiAodmVyc2lvbiA+PSBcIjIwMjAtMTItMDZcIikge1xuICAgICAgICBpZiAoc2hhcmVkS2V5Q3JlZGVudGlhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzMjAyMDEyMDYoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzVURLMjAyMDEyMDYoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBWZXJzaW9uIDIwMTktMTItMTIgYWRkcyBzdXBwb3J0IGZvciB0aGUgYmxvYiB0YWdzIHBlcm1pc3Npb24uXG4gICAgLy8gVmVyc2lvbiAyMDE4LTExLTA5IGFkZHMgc3VwcG9ydCBmb3IgdGhlIHNpZ25lZCByZXNvdXJjZSBhbmQgc2lnbmVkIGJsb2Igc25hcHNob3QgdGltZSBmaWVsZHMuXG4gICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzI2NvbnN0cnVjdGluZy10aGUtc2lnbmF0dXJlLXN0cmluZ1xuICAgIGlmICh2ZXJzaW9uID49IFwiMjAxOC0xMS0wOVwiKSB7XG4gICAgICAgIGlmIChzaGFyZWRLZXlDcmVkZW50aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFZlcnNpb24gMjAyMC0wMi0xMCBkZWxlZ2F0aW9uIFNBUyBzaWduYXR1cmUgY29uc3RydWN0aW9uIGluY2x1ZGVzIHByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBhZ2VudE9iamVjdElkLCBjb3JyZWxhdGlvbklkLlxuICAgICAgICAgICAgaWYgKHZlcnNpb24gPj0gXCIyMDIwLTAyLTEwXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzVURLMjAyMDAyMTAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uID49IFwiMjAxNS0wNC0wNVwiKSB7XG4gICAgICAgIGlmIChzaGFyZWRLZXlDcmVkZW50aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDE1MDQwNShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTgtMTEtMDknIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTIHVzaW5nIHVzZXIgZGVsZWdhdGlvbiBrZXkuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTUtMDQtMDUnLlwiKTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAxNS0wNC0wNSBBTkQgQkVGT1JFIDIwMTgtMTEtMDkuXG4gKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTQVNRdWVyeVBhcmFtZXRlcnMuXG4gKlxuICogT25seSBhY2NlcHRzIHJlcXVpcmVkIHNldHRpbmdzIG5lZWRlZCB0byBjcmVhdGUgYSBTQVMuIEZvciBvcHRpb25hbCBzZXR0aW5ncyBwbGVhc2VcbiAqIHNldCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgZGlyZWN0bHksIHN1Y2ggYXMgcGVybWlzc2lvbnMsIHN0YXJ0c09uIGFuZCBpZGVudGlmaWVyLlxuICpcbiAqIFdBUk5JTkc6IFdoZW4gaWRlbnRpZmllciBpcyBub3QgcHJvdmlkZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICogWW91IE1VU1QgYXNzaWduIHZhbHVlIHRvIGlkZW50aWZpZXIgb3IgZXhwaXJlc09uICYgcGVybWlzc2lvbnMgbWFudWFsbHkgaWYgeW91IGluaXRpYWwgd2l0aFxuICogdGhpcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gc2hhcmVkS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMTUwNDA1KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciAmJlxuICAgICAgICAhKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24pKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gJ2lkZW50aWZpZXInIGlzIG5vdCBwcm92aWRlZC5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGFpbmVyTmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSksXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllcixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlIDogXCJcIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gc2hhcmVkS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAxOC0xMS0wOS5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24gYW5kIGlkZW50aWZpZXIuXG4gKlxuICogV0FSTklORzogV2hlbiBpZGVudGlmaWVyIGlzIG5vdCBwcm92aWRlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKiBZb3UgTVVTVCBhc3NpZ24gdmFsdWUgdG8gaWRlbnRpZmllciBvciBleHBpcmVzT24gJiBwZXJtaXNzaW9ucyBtYW51YWxseSBpZiB5b3UgaW5pdGlhbCB3aXRoXG4gKiB0aGlzIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSBzaGFyZWRLZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzMjAxODExMDkoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIGlmICghYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyICYmXG4gICAgICAgICEoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ3Blcm1pc3Npb25zJyBhbmQgJ2V4cGlyZXNPbicgZm9yIEJsb2IgU0FTIGdlbmVyYXRpb24gd2hlbiAnaWRlbnRpZmllcicgaXMgbm90IHByb3ZpZGVkLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUoc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgOiBcIlwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaGFyZWRLZXlDcmVkZW50aWFsLmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2FzUXVlcnlQYXJhbWV0ZXJzOiBuZXcgU0FTUXVlcnlQYXJhbWV0ZXJzKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiwgc2lnbmF0dXJlLCB2ZXJpZmllZFBlcm1pc3Npb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLCByZXNvdXJjZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZywgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDIwLTEyLTA2LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbiBhbmQgaWRlbnRpZmllci5cbiAqXG4gKiBXQVJOSU5HOiBXaGVuIGlkZW50aWZpZXIgaXMgbm90IHByb3ZpZGVkLCBwZXJtaXNzaW9ucyBhbmQgZXhwaXJlc09uIGFyZSByZXF1aXJlZC5cbiAqIFlvdSBNVVNUIGFzc2lnbiB2YWx1ZSB0byBpZGVudGlmaWVyIG9yIGV4cGlyZXNPbiAmIHBlcm1pc3Npb25zIG1hbnVhbGx5IGlmIHlvdSBpbml0aWFsIHdpdGhcbiAqIHRoaXMgY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHNoYXJlZEtleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDIwMTIwNihibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyA9IFNBU1NpZ25hdHVyZVZhbHVlc1Nhbml0eUNoZWNrQW5kQXV0b2ZpbGwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyk7XG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIgJiZcbiAgICAgICAgIShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuICdpZGVudGlmaWVyJyBpcyBub3QgcHJvdmlkZWQuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVzb3VyY2UgPSBcImNcIjtcbiAgICBsZXQgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWU7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJ2XCI7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHBhcnNlIGFuZCB0b1N0cmluZyBndWFyYW50ZWVzIHRoZSBwcm9wZXIgb3JkZXJpbmcgYW5kIHRocm93cyBvbiBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgbGV0IHZlcmlmaWVkUGVybWlzc2lvbnM7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTaWduYXR1cmUgaXMgZ2VuZXJhdGVkIG9uIHRoZSB1bi11cmwtZW5jb2RlZCB2YWx1ZXMuXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID8gdmVyaWZpZWRQZXJtaXNzaW9ucyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgZ2V0Q2Fub25pY2FsTmFtZShzaGFyZWRLZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgOiBcIlwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaGFyZWRLZXlDcmVkZW50aWFsLmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2FzUXVlcnlQYXJhbWV0ZXJzOiBuZXcgU0FTUXVlcnlQYXJhbWV0ZXJzKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiwgc2lnbmF0dXJlLCB2ZXJpZmllZFBlcm1pc3Npb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLCByZXNvdXJjZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZywgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAxOC0xMS0wOS5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24uXG4gKlxuICogV0FSTklORzogaWRlbnRpZmllciB3aWxsIGJlIGlnbm9yZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICAvLyBTdG9yZWQgYWNjZXNzIHBvbGljaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBhIHVzZXIgZGVsZWdhdGlvbiBTQVMuXG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zIHx8ICFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuIGdlbmVyYXRpbmcgdXNlciBkZWxlZ2F0aW9uIFNBUy5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGxldCB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZTtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICByZXNvdXJjZSA9IFwiYlwiO1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJic1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnZcIjtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFZlcnNpb24sXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5KSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAyMC0wMi0xMC5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24uXG4gKlxuICogV0FSTklORzogaWRlbnRpZmllciB3aWxsIGJlIGlnbm9yZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDIwMDIxMChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICAvLyBTdG9yZWQgYWNjZXNzIHBvbGljaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBhIHVzZXIgZGVsZWdhdGlvbiBTQVMuXG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zIHx8ICFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuIGdlbmVyYXRpbmcgdXNlciBkZWxlZ2F0aW9uIFNBUy5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGxldCB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZTtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICByZXNvdXJjZSA9IFwiYlwiO1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJic1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnZcIjtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFZlcnNpb24sXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsXG4gICAgICAgIHVuZGVmaW5lZCwgLy8gYWdlbnRPYmplY3RJZFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDIwLTEyLTA2LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbi5cbiAqXG4gKiBXQVJOSU5HOiBpZGVudGlmaWVyIHdpbGwgYmUgaWdub3JlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMjAxMjA2KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIC8vIFN0b3JlZCBhY2Nlc3MgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGEgdXNlciBkZWxlZ2F0aW9uIFNBUy5cbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgfHwgIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkT2JqZWN0SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCxcbiAgICAgICAgdW5kZWZpbmVkLCAvLyBhZ2VudE9iamVjdElkXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldENhbm9uaWNhbE5hbWUoYWNjb3VudE5hbWUsIGNvbnRhaW5lck5hbWUsIGJsb2JOYW1lKSB7XG4gICAgLy8gQ29udGFpbmVyOiBcIi9ibG9iL2FjY291bnQvY29udGFpbmVyTmFtZVwiXG4gICAgLy8gQmxvYjogICAgICBcIi9ibG9iL2FjY291bnQvY29udGFpbmVyTmFtZS9ibG9iTmFtZVwiXG4gICAgY29uc3QgZWxlbWVudHMgPSBbYC9ibG9iLyR7YWNjb3VudE5hbWV9LyR7Y29udGFpbmVyTmFtZX1gXTtcbiAgICBpZiAoYmxvYk5hbWUpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChgLyR7YmxvYk5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50cy5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA6IFNFUlZJQ0VfVkVSU0lPTjtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUgJiYgdmVyc2lvbiA8IFwiMjAxOC0xMS0wOVwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOC0xMS0wOScgd2hlbiBwcm92aWRpbmcgJ3NuYXBzaG90VGltZScuXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSA9PT0gdW5kZWZpbmVkICYmIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ2Jsb2JOYW1lJyB3aGVuIHByb3ZpZGluZyAnc25hcHNob3RUaW1lJy5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCAmJiB2ZXJzaW9uIDwgXCIyMDE5LTEwLTEwXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEwLTEwJyB3aGVuIHByb3ZpZGluZyAndmVyc2lvbklkJy5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lID09PSB1bmRlZmluZWQgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAnYmxvYk5hbWUnIHdoZW4gcHJvdmlkaW5nICd2ZXJzaW9uSWQnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAyMC0wOC0wNFwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0wOC0wNCcgd2hlbiBwcm92aWRlZCAnaScgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEwLTEwXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEwLTEwJyB3aGVuIHByb3ZpZGluZyAneCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkaW5nICd5JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50YWcgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMi0xMlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMi0xMicgd2hlbiBwcm92aWRpbmcgJ3QnIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAodmVyc2lvbiA8IFwiMjAyMC0wMi0xMFwiICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMubW92ZSB8fCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLmV4ZWN1dGUpKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0wMi0xMCcgd2hlbiBwcm92aWRpbmcgdGhlICdtJyBvciAnZScgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uIDwgXCIyMDIxLTA0LTEwXCIgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLmZpbHRlckJ5VGFncykge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjEtMDQtMTAnIHdoZW4gcHJvdmlkaW5nIHRoZSAnZicgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uIDwgXCIyMDIwLTAyLTEwXCIgJiZcbiAgICAgICAgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQgfHwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb3JyZWxhdGlvbklkKSkge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjAtMDItMTAnIHdoZW4gcHJvdmlkaW5nICdwcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCcgb3IgJ2NvcnJlbGF0aW9uSWQnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlICYmIHZlcnNpb24gPCBcIjIwMjAtMTItMDZcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjAtMTItMDYnIHdoZW4gcHJvdmlkZWQgJ2VuY3J5cHRpb25TY29wZScgaW4gU0FTLlwiKTtcbiAgICB9XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICByZXR1cm4gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcztcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgY2xpZW50IHRoYXQgbWFuYWdlcyBsZWFzZXMgZm9yIGEge0BsaW5rIENvbnRhaW5lckNsaWVudH0gb3IgYSB7QGxpbmsgQmxvYkNsaWVudH0uXG4gKi9cbmNsYXNzIEJsb2JMZWFzZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbGVhc2UgSWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYXNlSWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHVybC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB1cmwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cmw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYkxlYXNlQ2xpZW50LlxuICAgICAqIEBwYXJhbSBjbGllbnQgLSBUaGUgY2xpZW50IHRvIG1ha2UgdGhlIGxlYXNlIG9wZXJhdGlvbiByZXF1ZXN0cy5cbiAgICAgKiBAcGFyYW0gbGVhc2VJZCAtIEluaXRpYWwgcHJvcG9zZWQgbGVhc2UgaWQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50LCBsZWFzZUlkKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudENvbnRleHQgPSBjbGllbnQuc3RvcmFnZUNsaWVudENvbnRleHQ7XG4gICAgICAgIHRoaXMuX3VybCA9IGNsaWVudC51cmw7XG4gICAgICAgIGlmIChjbGllbnQubmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24gPSBjbGllbnRDb250ZXh0LmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24gPSBjbGllbnRDb250ZXh0LmJsb2I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsZWFzZUlkKSB7XG4gICAgICAgICAgICBsZWFzZUlkID0gY29yZVV0aWwucmFuZG9tVVVJRCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xlYXNlSWQgPSBsZWFzZUlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBjb250YWluZXIgZm9yIGRlbGV0ZSBvcGVyYXRpb25zLCBvciBvbiBhIGJsb2JcbiAgICAgKiBmb3Igd3JpdGUgYW5kIGRlbGV0ZSBvcGVyYXRpb25zLlxuICAgICAqIFRoZSBsb2NrIGR1cmF0aW9uIGNhbiBiZSAxNSB0byA2MCBzZWNvbmRzLCBvciBjYW4gYmUgaW5maW5pdGUuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGR1cmF0aW9uIC0gTXVzdCBiZSBiZXR3ZWVuIDE1IHRvIDYwIHNlY29uZHMsIG9yIGluZmluaXRlICgtMSlcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbiB0byBjb25maWd1cmUgbGVhc2UgbWFuYWdlbWVudCBvcGVyYXRpb25zLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIGFjcXVpcmUgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGFjcXVpcmVMZWFzZShkdXJhdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtYWNxdWlyZUxlYXNlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5hY3F1aXJlTGVhc2Uoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcm9wb3NlZExlYXNlSWQ6IHRoaXMuX2xlYXNlSWQsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gY2hhbmdlIHRoZSBJRCBvZiB0aGUgbGVhc2UuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bvc2VkTGVhc2VJZCAtIHRoZSBwcm9wb3NlZCBuZXcgbGVhc2UgSWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb24gdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciBjaGFuZ2UgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNoYW5nZUxlYXNlKHByb3Bvc2VkTGVhc2VJZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtY2hhbmdlTGVhc2VcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5jaGFuZ2VMZWFzZSh0aGlzLl9sZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdGhpcy5fbGVhc2VJZCA9IHByb3Bvc2VkTGVhc2VJZDtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvIGZyZWUgdGhlIGxlYXNlIGlmIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgc28gdGhhdCBhbm90aGVyIGNsaWVudCBtYXlcbiAgICAgKiBpbW1lZGlhdGVseSBhY3F1aXJlIGEgbGVhc2UgYWdhaW5zdCB0aGUgY29udGFpbmVyIG9yIHRoZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWNvbnRhaW5lclxuICAgICAqIGFuZFxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9uIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgcmVsZWFzZSBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgcmVsZWFzZUxlYXNlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICBpZiAodGhpcy5faXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICgoKChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlmTWF0Y2gpICYmICgoX2IgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKCgoX2MgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk5vbmVNYXRjaCkgJiYgKChfZCA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKChfZSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLnRhZ0NvbmRpdGlvbnMpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgSWZNYXRjaCwgSWZOb25lTWF0Y2ggYW5kIHRhZ3MgYWNjZXNzIGNvbmRpdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIHNlcnZpY2UuIFZhbHVlcyBvdGhlciB0aGFuIHVuZGVmaW5lZCBvciB0aGVpciBkZWZhdWx0IHZhbHVlcyBhcmUgbm90IGFjY2VwdGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkxlYXNlQ2xpZW50LXJlbGVhc2VMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24ucmVsZWFzZUxlYXNlKHRoaXMuX2xlYXNlSWQsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gcmVuZXcgdGhlIGxlYXNlLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWNvbnRhaW5lclxuICAgICAqIGFuZFxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9uIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgcmVuZXcgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHJlbmV3TGVhc2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtcmVuZXdMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24ucmVuZXdMZWFzZSh0aGlzLl9sZWFzZUlkLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gZW5kIHRoZSBsZWFzZSBidXQgZW5zdXJlIHRoYXQgYW5vdGhlciBjbGllbnQgY2Fubm90IGFjcXVpcmUgYSBuZXcgbGVhc2VcbiAgICAgKiB1bnRpbCB0aGUgY3VycmVudCBsZWFzZSBwZXJpb2QgaGFzIGV4cGlyZWQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJyZWFrUGVyaW9kIC0gQnJlYWsgcGVyaW9kXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgYnJlYWsgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGJyZWFrTGVhc2UoYnJlYWtQZXJpb2QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICBpZiAodGhpcy5faXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICgoKChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlmTWF0Y2gpICYmICgoX2IgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKCgoX2MgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk5vbmVNYXRjaCkgJiYgKChfZCA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKChfZSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLnRhZ0NvbmRpdGlvbnMpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgSWZNYXRjaCwgSWZOb25lTWF0Y2ggYW5kIHRhZ3MgYWNjZXNzIGNvbmRpdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIHNlcnZpY2UuIFZhbHVlcyBvdGhlciB0aGFuIHVuZGVmaW5lZCBvciB0aGVpciBkZWZhdWx0IHZhbHVlcyBhcmUgbm90IGFjY2VwdGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkxlYXNlQ2xpZW50LWJyZWFrTGVhc2VcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25PcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJyZWFrUGVyaW9kLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5icmVha0xlYXNlKG9wZXJhdGlvbk9wdGlvbnMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIEEgTm9kZS5qcyBSZWFkYWJsZVN0cmVhbSB3aWxsIGludGVybmFsbHkgcmV0cnkgd2hlbiBpbnRlcm5hbCBSZWFkYWJsZVN0cmVhbSB1bmV4cGVjdGVkIGVuZHMuXG4gKi9cbmNsYXNzIFJldHJpYWJsZVJlYWRhYmxlU3RyZWFtIGV4dGVuZHMgc3RyZWFtLlJlYWRhYmxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJldHJpYWJsZVJlYWRhYmxlU3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBjdXJyZW50IFJlYWRhYmxlU3RyZWFtIHJldHVybmVkIGZyb20gZ2V0dGVyXG4gICAgICogQHBhcmFtIGdldHRlciAtIEEgbWV0aG9kIGNhbGxpbmcgZG93bmxvYWRpbmcgcmVxdWVzdCByZXR1cm5pbmdcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBuZXcgUmVhZGFibGVTdHJlYW0gZnJvbSBzcGVjaWZpZWQgb2Zmc2V0XG4gICAgICogQHBhcmFtIG9mZnNldCAtIE9mZnNldCBwb3NpdGlvbiBpbiBvcmlnaW5hbCBkYXRhIHNvdXJjZSB0byByZWFkXG4gICAgICogQHBhcmFtIGNvdW50IC0gSG93IG11Y2ggZGF0YSBpbiBvcmlnaW5hbCBkYXRhIHNvdXJjZSB0byByZWFkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNvdXJjZSwgZ2V0dGVyLCBvZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIoeyBoaWdoV2F0ZXJNYXJrOiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgfSk7XG4gICAgICAgIHRoaXMucmV0cmllcyA9IDA7XG4gICAgICAgIHRoaXMuc291cmNlRGF0YUhhbmRsZXIgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kb0luamVjdEVycm9yT25jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kb0luamVjdEVycm9yT25jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgICAgICAvLyAgIGBPZmZzZXQ6ICR7dGhpcy5vZmZzZXR9LCBSZWNlaXZlZCAke2RhdGEubGVuZ3RofSBmcm9tIGludGVybmFsIHN0cmVhbWBcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogdGhpcy5vZmZzZXQgLSB0aGlzLnN0YXJ0IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnB1c2goZGF0YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNvdXJjZUFib3J0ZWRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBhYm9ydENvbnRyb2xsZXIuQWJvcnRFcnJvcihcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCIpO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KGFib3J0RXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyID0gKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIC8vICAgYFNvdXJjZSBzdHJlYW0gZW1pdHMgZW5kIG9yIGVycm9yLCBvZmZzZXQ6ICR7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5vZmZzZXRcbiAgICAgICAgICAgIC8vICAgfSwgZGVzdCBlbmQgOiAke3RoaXMuZW5kfWBcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNvdXJjZUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9mZnNldCAtIDEgPT09IHRoaXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vZmZzZXQgPD0gdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAvLyAgIGByZXRyaWVzOiAke3RoaXMucmV0cmllc30sIG1heCByZXRyaWVzOiAke3RoaXMubWF4UmV0cmllc31gXG4gICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXRyaWVzIDwgdGhpcy5tYXhSZXRyeVJlcXVlc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV0cmllcyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldHRlcih0aGlzLm9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChuZXdTb3VyY2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlID0gbmV3U291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTb3VyY2VFdmVudEhhbmRsZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShuZXcgRXJyb3IoYERhdGEgY29ycnVwdGlvbiBmYWlsdXJlOiByZWNlaXZlZCBsZXNzIGRhdGEgdGhhbiByZXF1aXJlZCBhbmQgcmVhY2hlZCBtYXhSZXRpcmVzIGxpbWl0YXRpb24uIFJlY2VpdmVkIGRhdGEgb2Zmc2V0OiAke3RoaXMub2Zmc2V0IC0gMX0sIGRhdGEgbmVlZGVkIG9mZnNldDogJHt0aGlzLmVuZH0sIHJldHJpZXM6ICR7dGhpcy5yZXRyaWVzfSwgbWF4IHJldHJpZXM6ICR7dGhpcy5tYXhSZXRyeVJlcXVlc3RzfWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kobmV3IEVycm9yKGBEYXRhIGNvcnJ1cHRpb24gZmFpbHVyZTogUmVjZWl2ZWQgbW9yZSBkYXRhIHRoYW4gb3JpZ2luYWwgcmVxdWVzdCwgZGF0YSBuZWVkZWQgb2Zmc2V0IGlzICR7dGhpcy5lbmR9LCByZWNlaXZlZCBvZmZzZXQ6ICR7dGhpcy5vZmZzZXQgLSAxfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXR0ZXIgPSBnZXR0ZXI7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLnN0YXJ0ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgdGhpcy5lbmQgPSBvZmZzZXQgKyBjb3VudCAtIDE7XG4gICAgICAgIHRoaXMubWF4UmV0cnlSZXF1ZXN0cyA9XG4gICAgICAgICAgICBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgJiYgb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzID49IDAgPyBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgOiAwO1xuICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBvcHRpb25zLm9uUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuc2V0U291cmNlRXZlbnRIYW5kbGVycygpO1xuICAgIH1cbiAgICBfcmVhZCgpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG4gICAgfVxuICAgIHNldFNvdXJjZUV2ZW50SGFuZGxlcnMoKSB7XG4gICAgICAgIHRoaXMuc291cmNlLm9uKFwiZGF0YVwiLCB0aGlzLnNvdXJjZURhdGFIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJlbmRcIiwgdGhpcy5zb3VyY2VFcnJvck9yRW5kSGFuZGxlcik7XG4gICAgICAgIHRoaXMuc291cmNlLm9uKFwiZXJyb3JcIiwgdGhpcy5zb3VyY2VFcnJvck9yRW5kSGFuZGxlcik7XG4gICAgICAgIC8vIG5lZWRlZCBmb3IgTm9kZTE0XG4gICAgICAgIHRoaXMuc291cmNlLm9uKFwiYWJvcnRlZFwiLCB0aGlzLnNvdXJjZUFib3J0ZWRIYW5kbGVyKTtcbiAgICB9XG4gICAgcmVtb3ZlU291cmNlRXZlbnRIYW5kbGVycygpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsIHRoaXMuc291cmNlRGF0YUhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydGVkXCIsIHRoaXMuc291cmNlQWJvcnRlZEhhbmRsZXIpO1xuICAgIH1cbiAgICBfZGVzdHJveShlcnJvciwgY2FsbGJhY2spIHtcbiAgICAgICAgLy8gcmVtb3ZlIGxpc3RlbmVyIGZyb20gc291cmNlIGFuZCByZWxlYXNlIHNvdXJjZVxuICAgICAgICB0aGlzLnJlbW92ZVNvdXJjZUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgdGhpcy5zb3VyY2UuZGVzdHJveSgpO1xuICAgICAgICBjYWxsYmFjayhlcnJvciA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGVycm9yKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogQmxvYkRvd25sb2FkUmVzcG9uc2UgaW1wbGVtZW50cyBCbG9iRG93bmxvYWRSZXNwb25zZVBhcnNlZCBpbnRlcmZhY2UsIGFuZCBpbiBOb2RlLmpzIHJ1bnRpbWUgaXQgd2lsbFxuICogYXV0b21hdGljYWxseSByZXRyeSB3aGVuIGludGVybmFsIHJlYWQgc3RyZWFtIHVuZXhwZWN0ZWQgZW5kcy4gKFRoaXMga2luZCBvZiB1bmV4cGVjdGVkIGVuZHMgY2Fubm90XG4gKiB0cmlnZ2VyIHJldHJpZXMgZGVmaW5lZCBpbiBwaXBlbGluZSByZXRyeSBwb2xpY3kuKVxuICpcbiAqIFRoZSB7QGxpbmsgcmVhZGFibGVTdHJlYW1Cb2R5fSBzdHJlYW0gd2lsbCByZXRyeSB1bmRlcmxheWVyLCB5b3UgY2FuIGp1c3QgdXNlIGl0IGFzIGEgbm9ybWFsIE5vZGUuanNcbiAqIFJlYWRhYmxlIHN0cmVhbS5cbiAqL1xuY2xhc3MgQmxvYkRvd25sb2FkUmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzZXJ2aWNlIHN1cHBvcnRzXG4gICAgICogcmVxdWVzdHMgZm9yIHBhcnRpYWwgZmlsZSBjb250ZW50LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGFjY2VwdFJhbmdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5hY2NlcHRSYW5nZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgaXQgd2FzIHByZXZpb3VzbHkgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNhY2hlQ29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jYWNoZUNvbnRyb2w7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgJ3gtbXMtY29udGVudC1kaXNwb3NpdGlvbicgaGVhZGVyIGFuZCBzcGVjaWZpZXMgaG93IHRvIHByb2Nlc3MgdGhlXG4gICAgICogcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudERpc3Bvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnREaXNwb3NpdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBDb250ZW50LUVuY29kaW5nIHJlcXVlc3QgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRFbmNvZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50RW5jb2Rpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgQ29udGVudC1MYW5ndWFnZSByZXF1ZXN0IGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TGFuZ3VhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudExhbmd1YWdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIgZm9yIGFcbiAgICAgKiBwYWdlIGJsb2IuIFRoaXMgaGVhZGVyIGlzIG5vdCByZXR1cm5lZCBmb3IgYmxvY2sgYmxvYnMgb3IgYXBwZW5kIGJsb2JzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JTZXF1ZW5jZU51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iU2VxdWVuY2VOdW1iZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBibG9iJ3MgdHlwZS4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6XG4gICAgICogJ0Jsb2NrQmxvYicsICdQYWdlQmxvYicsICdBcHBlbmRCbG9iJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iVHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBieXRlcyBwcmVzZW50IGluIHRoZVxuICAgICAqIHJlc3BvbnNlIGJvZHkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZmlsZSBoYXMgYW4gTUQ1IGhhc2ggYW5kIHRoZVxuICAgICAqIHJlcXVlc3QgaXMgdG8gcmVhZCB0aGUgZnVsbCBmaWxlLCB0aGlzIHJlc3BvbnNlIGhlYWRlciBpcyByZXR1cm5lZCBzbyB0aGF0XG4gICAgICogdGhlIGNsaWVudCBjYW4gY2hlY2sgZm9yIG1lc3NhZ2UgY29udGVudCBpbnRlZ3JpdHkuIElmIHRoZSByZXF1ZXN0IGlzIHRvXG4gICAgICogcmVhZCBhIHNwZWNpZmllZCByYW5nZSBhbmQgdGhlICd4LW1zLXJhbmdlLWdldC1jb250ZW50LW1kNScgaXMgc2V0IHRvXG4gICAgICogdHJ1ZSwgdGhlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGFuIE1ENSBoYXNoIGZvciB0aGUgcmFuZ2UsIGFzIGxvbmcgYXMgdGhlXG4gICAgICogcmFuZ2Ugc2l6ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNCBNQi4gSWYgbmVpdGhlciBvZiB0aGVzZSBzZXRzIG9mXG4gICAgICogY29uZGl0aW9ucyBpcyB0cnVlLCB0aGVuIG5vIHZhbHVlIGlzIHJldHVybmVkIGZvciB0aGUgJ0NvbnRlbnQtTUQ1J1xuICAgICAqIGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TUQ1KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRNRDU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgYnl0ZXMgcmV0dXJuZWQgaWZcbiAgICAgKiB0aGUgY2xpZW50IHJlcXVlc3RlZCBhIHN1YnNldCBvZiB0aGUgZmlsZSBieSBzZXR0aW5nIHRoZSBSYW5nZSByZXF1ZXN0XG4gICAgICogaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRSYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50UmFuZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgc3BlY2lmaWVkIGZvciB0aGUgZmlsZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBjb250ZW50IHR5cGUgaXMgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50VHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uY2x1c2lvbiB0aW1lIG9mIHRoZSBsYXN0IGF0dGVtcHRlZFxuICAgICAqIENvcHkgRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS4gVGhpcyB2YWx1ZVxuICAgICAqIGNhbiBzcGVjaWZ5IHRoZSB0aW1lIG9mIGEgY29tcGxldGVkLCBhYm9ydGVkLCBvciBmYWlsZWQgY29weSBhdHRlbXB0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlDb21wbGV0ZWRPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5Q29tcGxldGVkT247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0cmluZyBpZGVudGlmaWVyIGZvciB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weVxuICAgICAqIEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgYW5kXG4gICAgICogdGhlIHRvdGFsIGJ5dGVzIGluIHRoZSBzb3VyY2UgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb25cbiAgICAgKiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBDYW4gc2hvdyBiZXR3ZWVuIDAgYW5kXG4gICAgICogQ29udGVudC1MZW5ndGggYnl0ZXMgY29waWVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlQcm9ncmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5UHJvZ3Jlc3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVSTCB1cCB0byAyS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIHRoZVxuICAgICAqIHNvdXJjZSBmaWxlIHVzZWQgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlXG4gICAgICogd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVNvdXJjZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGUgb2YgdGhlIGNvcHkgb3BlcmF0aW9uXG4gICAgICogaWRlbnRpZmllZCBieSAneC1tcy1jb3B5LWlkJy4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdwZW5kaW5nJyxcbiAgICAgKiAnc3VjY2VzcycsICdhYm9ydGVkJywgJ2ZhaWxlZCdcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwZWFycyB3aGVuXG4gICAgICogeC1tcy1jb3B5LXN0YXR1cyBpcyBmYWlsZWQgb3IgcGVuZGluZy4gRGVzY3JpYmVzIGNhdXNlIG9mIGZhdGFsIG9yXG4gICAgICogbm9uLWZhdGFsIGNvcHkgb3BlcmF0aW9uIGZhaWx1cmUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVN0YXR1c0Rlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXNEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiBhIGJsb2IgaXMgbGVhc2VkLFxuICAgICAqIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBsZWFzZSBpcyBvZiBpbmZpbml0ZSBvciBmaXhlZCBkdXJhdGlvbi4gUG9zc2libGVcbiAgICAgKiB2YWx1ZXMgaW5jbHVkZTogJ2luZmluaXRlJywgJ2ZpeGVkJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZUR1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlRHVyYXRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExlYXNlIHN0YXRlIG9mIHRoZSBibG9iLiBQb3NzaWJsZVxuICAgICAqIHZhbHVlcyBpbmNsdWRlOiAnYXZhaWxhYmxlJywgJ2xlYXNlZCcsICdleHBpcmVkJywgJ2JyZWFraW5nJywgJ2Jyb2tlbicuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZVN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBsZWFzZSBzdGF0dXMgb2YgdGhlXG4gICAgICogYmxvYi4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdsb2NrZWQnLCAndW5sb2NrZWQnLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlU3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlU3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFVUQyBkYXRlL3RpbWUgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXRcbiAgICAgKiBpbmRpY2F0ZXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHJlc3BvbnNlIHdhcyBpbml0aWF0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5kYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGNvbW1pdHRlZCBibG9ja3NcbiAgICAgKiBwcmVzZW50IGluIHRoZSBibG9iLiBUaGlzIGhlYWRlciBpcyByZXR1cm5lZCBvbmx5IGZvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBFVGFnIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0b1xuICAgICAqIHBlcmZvcm0gb3BlcmF0aW9ucyBjb25kaXRpb25hbGx5LCBpbiBxdW90ZXMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXRhZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ldGFnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBibG9iXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgdGFnQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudGFnQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciBjb2RlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGVycm9yQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5lcnJvckNvZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGlzIGhlYWRlciBpcyBzZXQgdG9cbiAgICAgKiB0cnVlIGlmIHRoZSBmaWxlIGRhdGEgYW5kIGFwcGxpY2F0aW9uIG1ldGFkYXRhIGFyZSBjb21wbGV0ZWx5IGVuY3J5cHRlZFxuICAgICAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBpcyBzZXQgdG8gZmFsc2UgKHdoZW5cbiAgICAgKiB0aGUgZmlsZSBpcyB1bmVuY3J5cHRlZCwgb3IgaWYgb25seSBwYXJ0cyBvZiB0aGUgZmlsZS9hcHBsaWNhdGlvbiBtZXRhZGF0YVxuICAgICAqIGFyZSBlbmNyeXB0ZWQpLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlzU2VydmVyRW5jcnlwdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmlzU2VydmVyRW5jcnlwdGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgYmxvYiBoYXMgYSBNRDUgaGFzaCwgYW5kIGlmXG4gICAgICogcmVxdWVzdCBjb250YWlucyByYW5nZSBoZWFkZXIgKFJhbmdlIG9yIHgtbXMtcmFuZ2UpLCB0aGlzIHJlc3BvbnNlIGhlYWRlclxuICAgICAqIGlzIHJldHVybmVkIHdpdGggdGhlIHZhbHVlIG9mIHRoZSB3aG9sZSBibG9iJ3MgTUQ1IHZhbHVlLiBUaGlzIHZhbHVlIG1heVxuICAgICAqIG9yIG1heSBub3QgYmUgZXF1YWwgdG8gdGhlIHZhbHVlIHJldHVybmVkIGluIENvbnRlbnQtTUQ1IGhlYWRlciwgd2l0aCB0aGVcbiAgICAgKiBsYXR0ZXIgY2FsY3VsYXRlZCBmcm9tIHRoZSByZXF1ZXN0ZWQgcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkNvbnRlbnRNRDUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkNvbnRlbnRNRDU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRhdGUgYW5kIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3RcbiAgICAgKiBtb2RpZmllZC4gQW55IG9wZXJhdGlvbiB0aGF0IG1vZGlmaWVzIHRoZSBmaWxlIG9yIGl0cyBwcm9wZXJ0aWVzIHVwZGF0ZXNcbiAgICAgKiB0aGUgbGFzdCBtb2RpZmllZCB0aW1lLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxhc3RNb2RpZmllZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sYXN0TW9kaWZpZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIFVUQyBkYXRlIGFuZCB0aW1lIGdlbmVyYXRlZCBieSB0aGUgc2VydmljZSB0aGF0IGluZGljYXRlcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgYmxvYiB3YXNcbiAgICAgKiBsYXN0IHJlYWQgb3Igd3JpdHRlbiB0by5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsYXN0QWNjZXNzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGFzdEFjY2Vzc2VkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkYXRlIGFuZCB0aW1lIHRoZSBibG9iIHdhcyBjcmVhdGVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNyZWF0ZWRPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jcmVhdGVkT247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgbmFtZS12YWx1ZSBwYWlyXG4gICAgICogdG8gYXNzb2NpYXRlIHdpdGggYSBmaWxlIHN0b3JhZ2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IG1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLm1ldGFkYXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlYWRlciB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSByZXF1ZXN0XG4gICAgICogdGhhdCB3YXMgbWFkZSBhbmQgY2FuIGJlIHVzZWQgZm9yIHRyb3VibGVzaG9vdGluZyB0aGUgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCByZXF1ZXN0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UucmVxdWVzdElkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiBhIGNsaWVudCByZXF1ZXN0IGlkIGhlYWRlciBpcyBzZW50IGluIHRoZSByZXF1ZXN0LCB0aGlzIGhlYWRlciB3aWxsIGJlIHByZXNlbnQgaW4gdGhlXG4gICAgICogcmVzcG9uc2Ugd2l0aCB0aGUgc2FtZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjbGllbnRSZXF1ZXN0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY2xpZW50UmVxdWVzdElkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIHZlcnNpb24gb2YgdGhlIEJsb2Igc2VydmljZSB1c2VkXG4gICAgICogdG8gZXhlY3V0ZSB0aGUgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB2ZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLnZlcnNpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgdmVyc2lvbklkIG9mIHRoZSBkb3dubG9hZGVkIGJsb2IgdmVyc2lvbi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB2ZXJzaW9uSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudmVyc2lvbklkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB2ZXJzaW9uIG9mIHRoaXMgYmxvYiBpcyBhIGN1cnJlbnQgdmVyc2lvbi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBpc0N1cnJlbnRWZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmlzQ3VycmVudFZlcnNpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGVuY3J5cHRpb24ga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgYmxvYi4gVGhpcyB2YWx1ZSBpcyBvbmx5IHJldHVybmVkXG4gICAgICogd2hlbiB0aGUgYmxvYiB3YXMgZW5jcnlwdGVkIHdpdGggYSBjdXN0b21lci1wcm92aWRlZCBrZXkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZW5jcnlwdGlvbktleVNoYTI1NigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5lbmNyeXB0aW9uS2V5U2hhMjU2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgcmVxdWVzdCBpcyB0byByZWFkIGEgc3BlY2lmaWVkIHJhbmdlIGFuZCB0aGUgeC1tcy1yYW5nZS1nZXQtY29udGVudC1jcmM2NCBpcyBzZXQgdG9cbiAgICAgKiB0cnVlLCB0aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBjcmM2NCBmb3IgdGhlIHJhbmdlLCBhcyBsb25nIGFzIHRoZSByYW5nZSBzaXplIGlzIGxlc3MgdGhhblxuICAgICAqIG9yIGVxdWFsIHRvIDQgTUIuIElmIGJvdGggeC1tcy1yYW5nZS1nZXQtY29udGVudC1jcmM2NCAmIHgtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1IGlzXG4gICAgICogc3BlY2lmaWVkIGluIHRoZSBzYW1lIHJlcXVlc3QsIGl0IHdpbGwgZmFpbCB3aXRoIDQwMChCYWQgUmVxdWVzdClcbiAgICAgKi9cbiAgICBnZXQgY29udGVudENyYzY0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRDcmM2NDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT2JqZWN0IFJlcGxpY2F0aW9uIFBvbGljeSBJZCBvZiB0aGUgZGVzdGluYXRpb24gYmxvYi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBvYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2Uub2JqZWN0UmVwbGljYXRpb25EZXN0aW5hdGlvblBvbGljeUlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZWQgT2JqZWN0IFJlcGxpY2F0aW9uIFBvbGljeSBJZCwgUnVsZSBJZChzKSBhbmQgc3RhdHVzIG9mIHRoZSBzb3VyY2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2Uub2JqZWN0UmVwbGljYXRpb25Tb3VyY2VQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGJsb2IgaGFzIGJlZW4gc2VhbGVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlzU2VhbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmlzU2VhbGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVVEMgZGF0ZS90aW1lIHZhbHVlIGdlbmVyYXRlZCBieSB0aGUgc2VydmljZSB0aGF0IGluZGljYXRlcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgYmxvYiBpbW11dGFiaWxpdHkgcG9saWN5IHdpbGwgZXhwaXJlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5pbW11dGFiaWxpdHlQb2xpY3lFeHBpcmVzT247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpbW11dGFiaWxpdHkgcG9saWN5IG1vZGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5pbW11dGFiaWxpdHlQb2xpY3lNb2RlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgYSBsZWdhbCBob2xkIGlzIHByZXNlbnQgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVnYWxIb2xkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlZ2FsSG9sZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBicm93c2VyIEJsb2IuXG4gICAgICogQWx3YXlzIHVuZGVmaW5lZCBpbiBub2RlLmpzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRBc0Jsb2IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkJvZHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXNwb25zZSBib2R5IGFzIGEgbm9kZS5qcyBSZWFkYWJsZSBzdHJlYW0uXG4gICAgICogQWx3YXlzIHVuZGVmaW5lZCBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKlxuICAgICAqIEl0IHdpbGwgYXV0b21hdGljYWxseSByZXRyeSB3aGVuIGludGVybmFsIHJlYWQgc3RyZWFtIHVuZXhwZWN0ZWQgZW5kcy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCByZWFkYWJsZVN0cmVhbUJvZHkoKSB7XG4gICAgICAgIHJldHVybiBjb3JlVXRpbC5pc05vZGUgPyB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEhUVFAgcmVzcG9uc2UuXG4gICAgICovXG4gICAgZ2V0IF9yZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5fcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYkRvd25sb2FkUmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3JpZ2luYWxSZXNwb25zZSAtXG4gICAgICogQHBhcmFtIGdldHRlciAtXG4gICAgICogQHBhcmFtIG9mZnNldCAtXG4gICAgICogQHBhcmFtIGNvdW50IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3JpZ2luYWxSZXNwb25zZSwgZ2V0dGVyLCBvZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlc3BvbnNlID0gb3JpZ2luYWxSZXNwb25zZTtcbiAgICAgICAgdGhpcy5ibG9iRG93bmxvYWRTdHJlYW0gPSBuZXcgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW0odGhpcy5vcmlnaW5hbFJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSwgZ2V0dGVyLCBvZmZzZXQsIGNvdW50LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY29uc3QgQVZST19TWU5DX01BUktFUl9TSVpFID0gMTY7XG5jb25zdCBBVlJPX0lOSVRfQllURVMgPSBuZXcgVWludDhBcnJheShbNzksIDk4LCAxMDYsIDFdKTtcbmNvbnN0IEFWUk9fQ09ERUNfS0VZID0gXCJhdnJvLmNvZGVjXCI7XG5jb25zdCBBVlJPX1NDSEVNQV9LRVkgPSBcImF2cm8uc2NoZW1hXCI7XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY2xhc3MgQXZyb1BhcnNlciB7XG4gICAgLyoqXG4gICAgICogUmVhZHMgYSBmaXhlZCBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmVhbSAtXG4gICAgICogQHBhcmFtIGxlbmd0aCAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyByZWFkRml4ZWRCeXRlcyhzdHJlYW0sIGxlbmd0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgc3RyZWFtLnJlYWQobGVuZ3RoLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgICAgICBpZiAoYnl0ZXMubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhpdCBzdHJlYW0gZW5kLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgc2luZ2xlIGJ5dGUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmVhbSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyByZWFkQnl0ZShzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgMSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBidWZbMF07XG4gICAgfVxuICAgIC8vIGludCBhbmQgbG9uZyBhcmUgc3RvcmVkIGluIHZhcmlhYmxlLWxlbmd0aCB6aWctemFnIGNvZGluZy5cbiAgICAvLyB2YXJpYWJsZS1sZW5ndGg6IGh0dHBzOi8vbHVjZW5lLmFwYWNoZS5vcmcvY29yZS8zXzVfMC9maWxlZm9ybWF0cy5odG1sI1ZJbnRcbiAgICAvLyB6aWctemFnOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvZW5jb2Rpbmc/Y3N3PTEjdHlwZXNcbiAgICBzdGF0aWMgYXN5bmMgcmVhZFppZ1phZ0xvbmcoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgbGV0IHppZ1phZ0VuY29kZWQgPSAwO1xuICAgICAgICBsZXQgc2lnbmlmaWNhbmNlSW5CaXQgPSAwO1xuICAgICAgICBsZXQgYnl0ZSwgaGF2ZU1vcmVCeXRlLCBzaWduaWZpY2FuY2VJbkZsb2F0O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBieXRlID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQnl0ZShzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgaGF2ZU1vcmVCeXRlID0gYnl0ZSAmIDB4ODA7XG4gICAgICAgICAgICB6aWdaYWdFbmNvZGVkIHw9IChieXRlICYgMHg3ZikgPDwgc2lnbmlmaWNhbmNlSW5CaXQ7XG4gICAgICAgICAgICBzaWduaWZpY2FuY2VJbkJpdCArPSA3O1xuICAgICAgICB9IHdoaWxlIChoYXZlTW9yZUJ5dGUgJiYgc2lnbmlmaWNhbmNlSW5CaXQgPCAyOCk7IC8vIGJpdHdpc2Ugb3BlcmF0aW9uIG9ubHkgd29ya3MgZm9yIDMyLWJpdCBpbnRlZ2Vyc1xuICAgICAgICBpZiAoaGF2ZU1vcmVCeXRlKSB7XG4gICAgICAgICAgICAvLyBTd2l0Y2ggdG8gZmxvYXQgYXJpdGhtZXRpY1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduXG4gICAgICAgICAgICB6aWdaYWdFbmNvZGVkID0gemlnWmFnRW5jb2RlZDtcbiAgICAgICAgICAgIHNpZ25pZmljYW5jZUluRmxvYXQgPSAyNjg0MzU0NTY7IC8vIDIgKiogMjguXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgYnl0ZSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEJ5dGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB6aWdaYWdFbmNvZGVkICs9IChieXRlICYgMHg3ZikgKiBzaWduaWZpY2FuY2VJbkZsb2F0O1xuICAgICAgICAgICAgICAgIHNpZ25pZmljYW5jZUluRmxvYXQgKj0gMTI4OyAvLyAyICoqIDdcbiAgICAgICAgICAgIH0gd2hpbGUgKGJ5dGUgJiAweDgwKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9ICh6aWdaYWdFbmNvZGVkICUgMiA/IC0oemlnWmFnRW5jb2RlZCArIDEpIDogemlnWmFnRW5jb2RlZCkgLyAyO1xuICAgICAgICAgICAgaWYgKHJlcyA8IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSIHx8IHJlcyA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW50ZWdlciBvdmVyZmxvdy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoemlnWmFnRW5jb2RlZCA+PiAxKSBeIC0oemlnWmFnRW5jb2RlZCAmIDEpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZExvbmcoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZFppZ1phZ0xvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWRJbnQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZFppZ1phZ0xvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWROdWxsKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWRCb29sZWFuKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRCeXRlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChiID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCeXRlIHdhcyBub3QgYSBib29sZWFuLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEZsb2F0KHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHU4YXJyID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkRml4ZWRCeXRlcyhzdHJlYW0sIDQsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KHU4YXJyLmJ1ZmZlciwgdThhcnIuYnl0ZU9mZnNldCwgdThhcnIuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIoMCwgdHJ1ZSk7IC8vIGxpdHRsZUVuZGlhbiA9IHRydWVcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWREb3VibGUoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdThhcnIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgOCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcodThhcnIuYnVmZmVyLCB1OGFyci5ieXRlT2Zmc2V0LCB1OGFyci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQ2NCgwLCB0cnVlKTsgLy8gbGl0dGxlRW5kaWFuID0gdHJ1ZVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEJ5dGVzKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChzaXplIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQnl0ZXMgc2l6ZSB3YXMgbmVnYXRpdmUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJlYW0ucmVhZChzaXplLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZFN0cmluZyhzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB1OGFyciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEJ5dGVzKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHV0ZjhkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gICAgICAgIHJldHVybiB1dGY4ZGVjb2Rlci5kZWNvZGUodThhcnIpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZE1hcFBhaXIoc3RyZWFtLCByZWFkSXRlbU1ldGhvZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZFN0cmluZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAvLyBGVVRVUkU6IHRoaXMgd29uJ3Qgd29yayB3aXRoIHJlYWRGaXhlZCAoY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQpIHdoaWNoIG5lZWRzIGEgbGVuZ3RoIGFzIHRoZSBwYXJhbWV0ZXIuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcmVhZEl0ZW1NZXRob2Qoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZSB9O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZE1hcChzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVhZFBhaXJNZXRob2QgPSAocywgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkTWFwUGFpcihzLCByZWFkSXRlbU1ldGhvZCwgb3B0cyk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhaXJzID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQXJyYXkoc3RyZWFtLCByZWFkUGFpck1ldGhvZCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRpY3QgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICBkaWN0W3BhaXIua2V5XSA9IHBhaXIudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkQXJyYXkoc3RyZWFtLCByZWFkSXRlbU1ldGhvZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGNvdW50ID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkTG9uZyhzdHJlYW0sIG9wdGlvbnMpOyBjb3VudCAhPT0gMDsgY291bnQgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucykpIHtcbiAgICAgICAgICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgYmxvY2sgc2l6ZXNcbiAgICAgICAgICAgICAgICBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY291bnQgPSAtY291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY291bnQtLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBhd2FpdCByZWFkSXRlbU1ldGhvZChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbn1cbnZhciBBdnJvQ29tcGxleDtcbihmdW5jdGlvbiAoQXZyb0NvbXBsZXgpIHtcbiAgICBBdnJvQ29tcGxleFtcIlJFQ09SRFwiXSA9IFwicmVjb3JkXCI7XG4gICAgQXZyb0NvbXBsZXhbXCJFTlVNXCJdID0gXCJlbnVtXCI7XG4gICAgQXZyb0NvbXBsZXhbXCJBUlJBWVwiXSA9IFwiYXJyYXlcIjtcbiAgICBBdnJvQ29tcGxleFtcIk1BUFwiXSA9IFwibWFwXCI7XG4gICAgQXZyb0NvbXBsZXhbXCJVTklPTlwiXSA9IFwidW5pb25cIjtcbiAgICBBdnJvQ29tcGxleFtcIkZJWEVEXCJdID0gXCJmaXhlZFwiO1xufSkoQXZyb0NvbXBsZXggfHwgKEF2cm9Db21wbGV4ID0ge30pKTtcbnZhciBBdnJvUHJpbWl0aXZlO1xuKGZ1bmN0aW9uIChBdnJvUHJpbWl0aXZlKSB7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIk5VTExcIl0gPSBcIm51bGxcIjtcbiAgICBBdnJvUHJpbWl0aXZlW1wiQk9PTEVBTlwiXSA9IFwiYm9vbGVhblwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJJTlRcIl0gPSBcImludFwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJMT05HXCJdID0gXCJsb25nXCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkZMT0FUXCJdID0gXCJmbG9hdFwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJET1VCTEVcIl0gPSBcImRvdWJsZVwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJCWVRFU1wiXSA9IFwiYnl0ZXNcIjtcbiAgICBBdnJvUHJpbWl0aXZlW1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcbn0pKEF2cm9QcmltaXRpdmUgfHwgKEF2cm9QcmltaXRpdmUgPSB7fSkpO1xuY2xhc3MgQXZyb1R5cGUge1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgdGhlIEF2cm9UeXBlIGZyb20gdGhlIEF2cm8gU2NoZW1hLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICBzdGF0aWMgZnJvbVNjaGVtYShzY2hlbWEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tU3RyaW5nU2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1R5cGUuZnJvbUFycmF5U2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1R5cGUuZnJvbU9iamVjdFNjaGVtYShzY2hlbWEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tU3RyaW5nU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICBzd2l0Y2ggKHNjaGVtYSkge1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLk5VTEw6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQk9PTEVBTjpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5JTlQ6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuTE9ORzpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5GTE9BVDpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5ET1VCTEU6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQllURVM6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb1ByaW1pdGl2ZVR5cGUoc2NoZW1hKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEF2cm8gdHlwZSAke3NjaGVtYX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZnJvbUFycmF5U2NoZW1hKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gbmV3IEF2cm9VbmlvblR5cGUoc2NoZW1hLm1hcChBdnJvVHlwZS5mcm9tU2NoZW1hKSk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tT2JqZWN0U2NoZW1hKHNjaGVtYSkge1xuICAgICAgICBjb25zdCB0eXBlID0gc2NoZW1hLnR5cGU7XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgY2FuIGJlIGRlZmluZWQgYXMgc3RyaW5ncyBvciBvYmplY3RzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1R5cGUuZnJvbVN0cmluZ1NjaGVtYSh0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguUkVDT1JEOlxuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYWxpYXNlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGFsaWFzZXMgY3VycmVudGx5IGlzIG5vdCBzdXBwb3J0ZWQsIHNjaGVtYTogJHtzY2hlbWF9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc2NoZW1hLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhdHRyaWJ1dGUgJ25hbWUnIGRvZXNuJ3QgZXhpc3Qgb24gc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0ge307XG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYXR0cmlidXRlICdmaWVsZHMnIGRvZXNuJ3QgZXhpc3Qgb24gc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBzY2hlbWEuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkc1tmaWVsZC5uYW1lXSA9IEF2cm9UeXBlLmZyb21TY2hlbWEoZmllbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb1JlY29yZFR5cGUoZmllbGRzLCBzY2hlbWEubmFtZSk7XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4LkVOVU06XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5hbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYWxpYXNlcyBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRlZCwgc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuc3ltYm9scykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGF0dHJpYnV0ZSAnc3ltYm9scycgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF2cm9FbnVtVHlwZShzY2hlbWEuc3ltYm9scyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4Lk1BUDpcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhdHRyaWJ1dGUgJ3ZhbHVlcycgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF2cm9NYXBUeXBlKEF2cm9UeXBlLmZyb21TY2hlbWEoc2NoZW1hLnZhbHVlcykpO1xuICAgICAgICAgICAgY2FzZSBBdnJvQ29tcGxleC5BUlJBWTogLy8gVW51c2VkIHRvZGF5XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4LkZJWEVEOiAvLyBVbnVzZWQgdG9kYXlcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEF2cm8gdHlwZSAke3R5cGV9IGluICR7c2NoZW1hfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQXZyb1ByaW1pdGl2ZVR5cGUgZXh0ZW5kcyBBdnJvVHlwZSB7XG4gICAgY29uc3RydWN0b3IocHJpbWl0aXZlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3ByaW1pdGl2ZSA9IHByaW1pdGl2ZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9wcmltaXRpdmUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5OVUxMOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWROdWxsKCk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQk9PTEVBTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkQm9vbGVhbihzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLklOVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkSW50KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuTE9ORzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkTG9uZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkZMT0FUOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRGbG9hdChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkRPVUJMRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkRG91YmxlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQllURVM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZEJ5dGVzKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRTdHJpbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBBdnJvIFByaW1pdGl2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNsYXNzIEF2cm9FbnVtVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihzeW1ib2xzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3N5bWJvbHMgPSBzeW1ib2xzO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXdyYXBwZXItb2JqZWN0LXR5cGVzXG4gICAgYXN5bmMgcmVhZChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEludChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ltYm9sc1t2YWx1ZV07XG4gICAgfVxufVxuY2xhc3MgQXZyb1VuaW9uVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlcykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl90eXBlcyA9IHR5cGVzO1xuICAgIH1cbiAgICBhc3luYyByZWFkKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHR5cGVJbmRleCA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEludChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZXNbdHlwZUluZGV4XS5yZWFkKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgfVxufVxuY2xhc3MgQXZyb01hcFR5cGUgZXh0ZW5kcyBBdnJvVHlwZSB7XG4gICAgY29uc3RydWN0b3IoaXRlbVR5cGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5faXRlbVR5cGUgPSBpdGVtVHlwZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVhZEl0ZW1NZXRob2QgPSAocywgb3B0cykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1UeXBlLnJlYWQocywgb3B0cyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRNYXAoc3RyZWFtLCByZWFkSXRlbU1ldGhvZCwgb3B0aW9ucyk7XG4gICAgfVxufVxuY2xhc3MgQXZyb1JlY29yZFR5cGUgZXh0ZW5kcyBBdnJvVHlwZSB7XG4gICAgY29uc3RydWN0b3IoZmllbGRzLCBuYW1lKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2ZpZWxkcyA9IGZpZWxkcztcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICBhc3luYyByZWFkKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICAgICAgY29uc3QgcmVjb3JkID0ge307XG4gICAgICAgIHJlY29yZFtcIiRzY2hlbWFcIl0gPSB0aGlzLl9uYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9maWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fZmllbGRzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkW2tleV0gPSBhd2FpdCB0aGlzLl9maWVsZHNba2V5XS5yZWFkKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuZnVuY3Rpb24gYXJyYXlzRXF1YWwoYSwgYikge1xuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhW2ldICE9PSBiW2ldKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jbGFzcyBBdnJvUmVhZGVyIHtcbiAgICBnZXQgYmxvY2tPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ibG9ja09mZnNldDtcbiAgICB9XG4gICAgZ2V0IG9iamVjdEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0SW5kZXg7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRhdGFTdHJlYW0sIGhlYWRlclN0cmVhbSwgY3VycmVudEJsb2NrT2Zmc2V0LCBpbmRleFdpdGhpbkN1cnJlbnRCbG9jaykge1xuICAgICAgICB0aGlzLl9kYXRhU3RyZWFtID0gZGF0YVN0cmVhbTtcbiAgICAgICAgdGhpcy5faGVhZGVyU3RyZWFtID0gaGVhZGVyU3RyZWFtIHx8IGRhdGFTdHJlYW07XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gY3VycmVudEJsb2NrT2Zmc2V0IHx8IDA7XG4gICAgICAgIHRoaXMuX29iamVjdEluZGV4ID0gaW5kZXhXaXRoaW5DdXJyZW50QmxvY2sgfHwgMDtcbiAgICAgICAgdGhpcy5faW5pdGlhbEJsb2NrT2Zmc2V0ID0gY3VycmVudEJsb2NrT2Zmc2V0IHx8IDA7XG4gICAgfVxuICAgIGFzeW5jIGluaXRpYWxpemUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXModGhpcy5faGVhZGVyU3RyZWFtLCBBVlJPX0lOSVRfQllURVMubGVuZ3RoLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghYXJyYXlzRXF1YWwoaGVhZGVyLCBBVlJPX0lOSVRfQllURVMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJlYW0gaXMgbm90IGFuIEF2cm8gZmlsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlsZSBtZXRhZGF0YSBpcyB3cml0dGVuIGFzIGlmIGRlZmluZWQgYnkgdGhlIGZvbGxvd2luZyBtYXAgc2NoZW1hOlxuICAgICAgICAvLyB7IFwidHlwZVwiOiBcIm1hcFwiLCBcInZhbHVlc1wiOiBcImJ5dGVzXCJ9XG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkTWFwKHRoaXMuX2hlYWRlclN0cmVhbSwgQXZyb1BhcnNlci5yZWFkU3RyaW5nLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFZhbGlkYXRlIGNvZGVjXG4gICAgICAgIGNvbnN0IGNvZGVjID0gdGhpcy5fbWV0YWRhdGFbQVZST19DT0RFQ19LRVldO1xuICAgICAgICBpZiAoIShjb2RlYyA9PT0gdW5kZWZpbmVkIHx8IGNvZGVjID09PSBudWxsIHx8IGNvZGVjID09PSBcIm51bGxcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVjcyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgMTYtYnl0ZSwgcmFuZG9tbHktZ2VuZXJhdGVkIHN5bmMgbWFya2VyIGZvciB0aGlzIGZpbGUuXG4gICAgICAgIHRoaXMuX3N5bmNNYXJrZXIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHRoaXMuX2hlYWRlclN0cmVhbSwgQVZST19TWU5DX01BUktFUl9TSVpFLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFBhcnNlIHRoZSBzY2hlbWFcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gSlNPTi5wYXJzZSh0aGlzLl9tZXRhZGF0YVtBVlJPX1NDSEVNQV9LRVldKTtcbiAgICAgICAgdGhpcy5faXRlbVR5cGUgPSBBdnJvVHlwZS5mcm9tU2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIGlmICh0aGlzLl9ibG9ja09mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fYmxvY2tPZmZzZXQgPSB0aGlzLl9pbml0aWFsQmxvY2tPZmZzZXQgKyB0aGlzLl9kYXRhU3RyZWFtLnBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwge1xuICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBza2lwIGJsb2NrIGxlbmd0aFxuICAgICAgICBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHRoaXMuX2RhdGFTdHJlYW0sIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuX29iamVjdEluZGV4ICYmIHRoaXMuX29iamVjdEluZGV4ID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9vYmplY3RJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faXRlbVR5cGUucmVhZCh0aGlzLl9kYXRhU3RyZWFtLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jay0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGhhc05leHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5faW5pdGlhbGl6ZWQgfHwgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID4gMDtcbiAgICB9XG4gICAgcGFyc2VPYmplY3RzKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBwYXJzZU9iamVjdHNfMShvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMuaW5pdGlhbGl6ZShvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5oYXNOZXh0KCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMuX2l0ZW1UeXBlLnJlYWQodGhpcy5fZGF0YVN0cmVhbSwge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrLS07XG4gICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0SW5kZXgrKztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IHlpZWxkIHRzbGliLl9fYXdhaXQoQXZyb1BhcnNlci5yZWFkRml4ZWRCeXRlcyh0aGlzLl9kYXRhU3RyZWFtLCBBVlJPX1NZTkNfTUFSS0VSX1NJWkUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gdGhpcy5faW5pdGlhbEJsb2NrT2Zmc2V0ICsgdGhpcy5fZGF0YVN0cmVhbS5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFycmF5c0VxdWFsKHRoaXMuX3N5bmNNYXJrZXIsIG1hcmtlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmVhbSBpcyBub3QgYSB2YWxpZCBBdnJvIGZpbGUuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2sgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBibG9jayBzaXplXG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwgeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY2xhc3MgQXZyb1JlYWRhYmxlIHtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBBQk9SVF9FUlJPUiA9IG5ldyBhYm9ydENvbnRyb2xsZXIuQWJvcnRFcnJvcihcIlJlYWRpbmcgZnJvbSB0aGUgYXZybyBzdHJlYW0gd2FzIGFib3J0ZWQuXCIpO1xuY2xhc3MgQXZyb1JlYWRhYmxlRnJvbVN0cmVhbSBleHRlbmRzIEF2cm9SZWFkYWJsZSB7XG4gICAgdG9VaW50OEFycmF5KGRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHJlYWRhYmxlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlID0gcmVhZGFibGU7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gMDtcbiAgICB9XG4gICAgZ2V0IHBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XG4gICAgfVxuICAgIGFzeW5jIHJlYWQoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKChfYSA9IG9wdGlvbnMuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hYm9ydGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBBQk9SVF9FUlJPUjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZSA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2l6ZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHBvc2l0aXZlOiAke3NpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fcmVhZGFibGUucmVhZGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmVhbSBubyBsb25nZXIgcmVhZGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGVub3VnaCBkYXRhLlxuICAgICAgICBjb25zdCBjaHVuayA9IHRoaXMuX3JlYWRhYmxlLnJlYWQoc2l6ZSk7XG4gICAgICAgIGlmIChjaHVuaykge1xuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgLy8gY2h1bmsubGVuZ3RoIG1heWJlIGxlc3MgdGhhbiBkZXNpcmVkIHNpemUgaWYgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9VaW50OEFycmF5KGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGNhbGxiYWNrIHRvIHdhaXQgZm9yIGVub3VnaCBkYXRhIHRvIHJlYWRcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYW5VcCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJyZWFkYWJsZVwiLCByZWFkYWJsZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3RDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLCByZWplY3RDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkYWJsZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFja0NodW5rID0gdGhpcy5fcmVhZGFibGUucmVhZChzaXplKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrQ2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uICs9IGNhbGxiYWNrQ2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5VcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2tDaHVuay5sZW5ndGggbWF5YmUgbGVzcyB0aGFuIGRlc2lyZWQgc2l6ZSBpZiB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMudG9VaW50OEFycmF5KGNhbGxiYWNrQ2h1bmspKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVqZWN0Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEFCT1JUX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLm9uKFwicmVhZGFibGVcIiwgcmVhZGFibGVDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUub25jZShcImVycm9yXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5vbmNlKFwiZW5kXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5vbmNlKFwiY2xvc2VcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBBIE5vZGUuanMgQmxvYlF1aWNrUXVlcnlTdHJlYW0gd2lsbCBpbnRlcm5hbGx5IHBhcnNlIGF2cm8gZGF0YSBzdHJlYW0gZm9yIGJsb2IgcXVlcnkuXG4gKi9cbmNsYXNzIEJsb2JRdWlja1F1ZXJ5U3RyZWFtIGV4dGVuZHMgc3RyZWFtLlJlYWRhYmxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJsb2JRdWlja1F1ZXJ5U3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBjdXJyZW50IFJlYWRhYmxlU3RyZWFtIHJldHVybmVkIGZyb20gZ2V0dGVyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYXZyb1BhdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBvcHRpb25zLm9uUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMub25FcnJvciA9IG9wdGlvbnMub25FcnJvcjtcbiAgICAgICAgdGhpcy5hdnJvUmVhZGVyID0gbmV3IEF2cm9SZWFkZXIobmV3IEF2cm9SZWFkYWJsZUZyb21TdHJlYW0odGhpcy5zb3VyY2UpKTtcbiAgICAgICAgdGhpcy5hdnJvSXRlciA9IHRoaXMuYXZyb1JlYWRlci5wYXJzZU9iamVjdHMoeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KTtcbiAgICB9XG4gICAgX3JlYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmF2cm9QYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZEludGVybmFsKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyByZWFkSW50ZXJuYWwoKSB7XG4gICAgICAgIHRoaXMuYXZyb1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgYXZyb05leHQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGF2cm9OZXh0ID0gYXdhaXQgdGhpcy5hdnJvSXRlci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoYXZyb05leHQuZG9uZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2JqID0gYXZyb05leHQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBvYmouJHNjaGVtYTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIHNjaGVtYSBpbiBhdnJvIHJlY29yZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKHNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb20ubWljcm9zb2Z0LmF6dXJlLnN0b3JhZ2UucXVlcnlCbG9iQ29udGVudHMucmVzdWx0RGF0YVwiOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gb2JqLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGRhdGEgaW4gYXZybyByZXN1bHQgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5wdXNoKEJ1ZmZlci5mcm9tKGRhdGEpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXZyb1BhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5wcm9ncmVzc1wiOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlc1NjYW5uZWQgPSBvYmouYnl0ZXNTY2FubmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBieXRlc1NjYW5uZWQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgYnl0ZXNTY2FubmVkIGluIGF2cm8gcHJvZ3Jlc3MgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogYnl0ZXNTY2FubmVkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb20ubWljcm9zb2Z0LmF6dXJlLnN0b3JhZ2UucXVlcnlCbG9iQ29udGVudHMuZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsQnl0ZXMgPSBvYmoudG90YWxCeXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdG90YWxCeXRlcyAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCB0b3RhbEJ5dGVzIGluIGF2cm8gZW5kIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogdG90YWxCeXRlcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb20ubWljcm9zb2Z0LmF6dXJlLnN0b3JhZ2UucXVlcnlCbG9iQ29udGVudHMuZXJyb3JcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmF0YWwgPSBvYmouZmF0YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZhdGFsICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBmYXRhbCBpbiBhdnJvIGVycm9yIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gb2JqLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgbmFtZSBpbiBhdnJvIGVycm9yIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IG9iai5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRpb24gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgZGVzY3JpcHRpb24gaW4gYXZybyBlcnJvciByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBvYmoucG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBvc2l0aW9uICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHBvc2l0aW9uIGluIGF2cm8gZXJyb3IgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZhdGFsOiBmYXRhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBVbmtub3duIHNjaGVtYSAke3NjaGVtYX0gaW4gYXZybyBwcm9ncmVzcyByZWNvcmQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKCFhdnJvTmV4dC5kb25lICYmICF0aGlzLmF2cm9QYXVzZWQpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBCbG9iUXVlcnlSZXNwb25zZSBpbXBsZW1lbnRzIEJsb2JEb3dubG9hZFJlc3BvbnNlTW9kZWwgaW50ZXJmYWNlLCBhbmQgaW4gTm9kZS5qcyBydW50aW1lIGl0IHdpbGxcbiAqIHBhcnNlIGF2b3IgZGF0YSByZXR1cm5lZCBieSBibG9iIHF1ZXJ5LlxuICovXG5jbGFzcyBCbG9iUXVlcnlSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNlcnZpY2Ugc3VwcG9ydHNcbiAgICAgKiByZXF1ZXN0cyBmb3IgcGFydGlhbCBmaWxlIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYWNjZXB0UmFuZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmFjY2VwdFJhbmdlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiBpdCB3YXMgcHJldmlvdXNseSBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY2FjaGVDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNhY2hlQ29udHJvbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSAneC1tcy1jb250ZW50LWRpc3Bvc2l0aW9uJyBoZWFkZXIgYW5kIHNwZWNpZmllcyBob3cgdG8gcHJvY2VzcyB0aGVcbiAgICAgKiByZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50RGlzcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudERpc3Bvc2l0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIENvbnRlbnQtRW5jb2RpbmcgcmVxdWVzdCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudEVuY29kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRFbmNvZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBDb250ZW50LUxhbmd1YWdlIHJlcXVlc3QgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TGFuZ3VhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlciBmb3IgYVxuICAgICAqIHBhZ2UgYmxvYi4gVGhpcyBoZWFkZXIgaXMgbm90IHJldHVybmVkIGZvciBibG9jayBibG9icyBvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYlNlcXVlbmNlTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JTZXF1ZW5jZU51bWJlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGJsb2IncyB0eXBlLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTpcbiAgICAgKiAnQmxvY2tCbG9iJywgJ1BhZ2VCbG9iJywgJ0FwcGVuZEJsb2InLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHByZXNlbnQgaW4gdGhlXG4gICAgICogcmVzcG9uc2UgYm9keS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRMZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBmaWxlIGhhcyBhbiBNRDUgaGFzaCBhbmQgdGhlXG4gICAgICogcmVxdWVzdCBpcyB0byByZWFkIHRoZSBmdWxsIGZpbGUsIHRoaXMgcmVzcG9uc2UgaGVhZGVyIGlzIHJldHVybmVkIHNvIHRoYXRcbiAgICAgKiB0aGUgY2xpZW50IGNhbiBjaGVjayBmb3IgbWVzc2FnZSBjb250ZW50IGludGVncml0eS4gSWYgdGhlIHJlcXVlc3QgaXMgdG9cbiAgICAgKiByZWFkIGEgc3BlY2lmaWVkIHJhbmdlIGFuZCB0aGUgJ3gtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1JyBpcyBzZXQgdG9cbiAgICAgKiB0cnVlLCB0aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYW4gTUQ1IGhhc2ggZm9yIHRoZSByYW5nZSwgYXMgbG9uZyBhcyB0aGVcbiAgICAgKiByYW5nZSBzaXplIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA0IE1CLiBJZiBuZWl0aGVyIG9mIHRoZXNlIHNldHMgb2ZcbiAgICAgKiBjb25kaXRpb25zIGlzIHRydWUsIHRoZW4gbm8gdmFsdWUgaXMgcmV0dXJuZWQgZm9yIHRoZSAnQ29udGVudC1NRDUnXG4gICAgICogaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRNRDUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSByYW5nZSBvZiBieXRlcyByZXR1cm5lZCBpZlxuICAgICAqIHRoZSBjbGllbnQgcmVxdWVzdGVkIGEgc3Vic2V0IG9mIHRoZSBmaWxlIGJ5IHNldHRpbmcgdGhlIFJhbmdlIHJlcXVlc3RcbiAgICAgKiBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudFJhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRSYW5nZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgdHlwZSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlLlxuICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpcyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25jbHVzaW9uIHRpbWUgb2YgdGhlIGxhc3QgYXR0ZW1wdGVkXG4gICAgICogQ29weSBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBUaGlzIHZhbHVlXG4gICAgICogY2FuIHNwZWNpZnkgdGhlIHRpbWUgb2YgYSBjb21wbGV0ZWQsIGFib3J0ZWQsIG9yIGZhaWxlZCBjb3B5IGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUNvbXBsZXRlZE9uKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdHJpbmcgaWRlbnRpZmllciBmb3IgdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHlcbiAgICAgKiBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGFuZFxuICAgICAqIHRoZSB0b3RhbCBieXRlcyBpbiB0aGUgc291cmNlIGluIHRoZSBsYXN0IGF0dGVtcHRlZCBDb3B5IEZpbGUgb3BlcmF0aW9uXG4gICAgICogd2hlcmUgdGhpcyBmaWxlIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS4gQ2FuIHNob3cgYmV0d2VlbiAwIGFuZFxuICAgICAqIENvbnRlbnQtTGVuZ3RoIGJ5dGVzIGNvcGllZC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5UHJvZ3Jlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVByb2dyZXNzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVUkwgdXAgdG8gMktCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyB0aGVcbiAgICAgKiBzb3VyY2UgZmlsZSB1c2VkIGluIHRoZSBsYXN0IGF0dGVtcHRlZCBDb3B5IEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZVxuICAgICAqIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTb3VyY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXRlIG9mIHRoZSBjb3B5IG9wZXJhdGlvblxuICAgICAqIGlkZW50aWZpZWQgYnkgJ3gtbXMtY29weS1pZCcuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOiAncGVuZGluZycsXG4gICAgICogJ3N1Y2Nlc3MnLCAnYWJvcnRlZCcsICdmYWlsZWQnXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVN0YXR1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5U3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGFwcGVhcnMgd2hlblxuICAgICAqIHgtbXMtY29weS1zdGF0dXMgaXMgZmFpbGVkIG9yIHBlbmRpbmcuIERlc2NyaWJlcyBjYXVzZSBvZiBmYXRhbCBvclxuICAgICAqIG5vbi1mYXRhbCBjb3B5IG9wZXJhdGlvbiBmYWlsdXJlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTdGF0dXNEZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5U3RhdHVzRGVzY3JpcHRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZW4gYSBibG9iIGlzIGxlYXNlZCxcbiAgICAgKiBzcGVjaWZpZXMgd2hldGhlciB0aGUgbGVhc2UgaXMgb2YgaW5maW5pdGUgb3IgZml4ZWQgZHVyYXRpb24uIFBvc3NpYmxlXG4gICAgICogdmFsdWVzIGluY2x1ZGU6ICdpbmZpbml0ZScsICdmaXhlZCcuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VEdXJhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZUR1cmF0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMZWFzZSBzdGF0ZSBvZiB0aGUgYmxvYi4gUG9zc2libGVcbiAgICAgKiB2YWx1ZXMgaW5jbHVkZTogJ2F2YWlsYWJsZScsICdsZWFzZWQnLCAnZXhwaXJlZCcsICdicmVha2luZycsICdicm9rZW4nLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVhc2VTdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgbGVhc2Ugc3RhdHVzIG9mIHRoZVxuICAgICAqIGJsb2IuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOiAnbG9ja2VkJywgJ3VubG9ja2VkJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZVN0YXR1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZVN0YXR1cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBVVEMgZGF0ZS90aW1lIHZhbHVlIGdlbmVyYXRlZCBieSB0aGUgc2VydmljZSB0aGF0XG4gICAgICogaW5kaWNhdGVzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSByZXNwb25zZSB3YXMgaW5pdGlhdGVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBjb21taXR0ZWQgYmxvY2tzXG4gICAgICogcHJlc2VudCBpbiB0aGUgYmxvYi4gVGhpcyBoZWFkZXIgaXMgcmV0dXJuZWQgb25seSBmb3IgYXBwZW5kIGJsb2JzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JDb21taXR0ZWRCbG9ja0NvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JDb21taXR0ZWRCbG9ja0NvdW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgRVRhZyBjb250YWlucyBhIHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgdG9cbiAgICAgKiBwZXJmb3JtIG9wZXJhdGlvbnMgY29uZGl0aW9uYWxseSwgaW4gcXVvdGVzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGV0YWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZXRhZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIGNvZGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXJyb3JDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVycm9yQ29kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgaGVhZGVyIGlzIHNldCB0b1xuICAgICAqIHRydWUgaWYgdGhlIGZpbGUgZGF0YSBhbmQgYXBwbGljYXRpb24gbWV0YWRhdGEgYXJlIGNvbXBsZXRlbHkgZW5jcnlwdGVkXG4gICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0uIE90aGVyd2lzZSwgdGhlIHZhbHVlIGlzIHNldCB0byBmYWxzZSAod2hlblxuICAgICAqIHRoZSBmaWxlIGlzIHVuZW5jcnlwdGVkLCBvciBpZiBvbmx5IHBhcnRzIG9mIHRoZSBmaWxlL2FwcGxpY2F0aW9uIG1ldGFkYXRhXG4gICAgICogYXJlIGVuY3J5cHRlZCkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXNTZXJ2ZXJFbmNyeXB0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNTZXJ2ZXJFbmNyeXB0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBibG9iIGhhcyBhIE1ENSBoYXNoLCBhbmQgaWZcbiAgICAgKiByZXF1ZXN0IGNvbnRhaW5zIHJhbmdlIGhlYWRlciAoUmFuZ2Ugb3IgeC1tcy1yYW5nZSksIHRoaXMgcmVzcG9uc2UgaGVhZGVyXG4gICAgICogaXMgcmV0dXJuZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHdob2xlIGJsb2IncyBNRDUgdmFsdWUuIFRoaXMgdmFsdWUgbWF5XG4gICAgICogb3IgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgdmFsdWUgcmV0dXJuZWQgaW4gQ29udGVudC1NRDUgaGVhZGVyLCB3aXRoIHRoZVxuICAgICAqIGxhdHRlciBjYWxjdWxhdGVkIGZyb20gdGhlIHJlcXVlc3RlZCByYW5nZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQ29udGVudE1ENSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQ29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0ZSBhbmQgdGltZSB0aGUgZmlsZSB3YXMgbGFzdFxuICAgICAqIG1vZGlmaWVkLiBBbnkgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGZpbGUgb3IgaXRzIHByb3BlcnRpZXMgdXBkYXRlc1xuICAgICAqIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGFzdE1vZGlmaWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxhc3RNb2RpZmllZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBuYW1lLXZhbHVlIHBhaXJcbiAgICAgKiB0byBhc3NvY2lhdGUgd2l0aCBhIGZpbGUgc3RvcmFnZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubWV0YWRhdGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVhZGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHJlcXVlc3RcbiAgICAgKiB0aGF0IHdhcyBtYWRlIGFuZCBjYW4gYmUgdXNlZCBmb3IgdHJvdWJsZXNob290aW5nIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5yZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIGEgY2xpZW50IHJlcXVlc3QgaWQgaGVhZGVyIGlzIHNlbnQgaW4gdGhlIHJlcXVlc3QsIHRoaXMgaGVhZGVyIHdpbGwgYmUgcHJlc2VudCBpbiB0aGVcbiAgICAgKiByZXNwb25zZSB3aXRoIHRoZSBzYW1lIHZhbHVlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNsaWVudFJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jbGllbnRSZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgdmVyc2lvbiBvZiB0aGUgRmlsZSBzZXJ2aWNlIHVzZWRcbiAgICAgKiB0byBleGVjdXRlIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudmVyc2lvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgZW5jcnlwdGlvbiBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBibG9iLiBUaGlzIHZhbHVlIGlzIG9ubHkgcmV0dXJuZWRcbiAgICAgKiB3aGVuIHRoZSBibG9iIHdhcyBlbmNyeXB0ZWQgd2l0aCBhIGN1c3RvbWVyLXByb3ZpZGVkIGtleS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBlbmNyeXB0aW9uS2V5U2hhMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVuY3J5cHRpb25LZXlTaGEyNTY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSByZXF1ZXN0IGlzIHRvIHJlYWQgYSBzcGVjaWZpZWQgcmFuZ2UgYW5kIHRoZSB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0IGlzIHNldCB0b1xuICAgICAqIHRydWUsIHRoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIGNyYzY0IGZvciB0aGUgcmFuZ2UsIGFzIGxvbmcgYXMgdGhlIHJhbmdlIHNpemUgaXMgbGVzcyB0aGFuXG4gICAgICogb3IgZXF1YWwgdG8gNCBNQi4gSWYgYm90aCB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0ICYgeC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDUgaXNcbiAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgcmVxdWVzdCwgaXQgd2lsbCBmYWlsIHdpdGggNDAwKEJhZCBSZXF1ZXN0KVxuICAgICAqL1xuICAgIGdldCBjb250ZW50Q3JjNjQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudENyYzY0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzcG9uc2UgYm9keSBhcyBhIGJyb3dzZXIgQmxvYi5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIG5vZGUuanMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkJvZHkoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXNwb25zZSBib2R5IGFzIGEgbm9kZS5qcyBSZWFkYWJsZSBzdHJlYW0uXG4gICAgICogQWx3YXlzIHVuZGVmaW5lZCBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKlxuICAgICAqIEl0IHdpbGwgcGFyc2UgYXZvciBkYXRhIHJldHVybmVkIGJ5IGJsb2IgcXVlcnkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgcmVhZGFibGVTdHJlYW1Cb2R5KCkge1xuICAgICAgICByZXR1cm4gY29yZVV0aWwuaXNOb2RlID8gdGhpcy5ibG9iRG93bmxvYWRTdHJlYW0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBIVFRQIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGdldCBfcmVzcG9uc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuX3Jlc3BvbnNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJsb2JRdWVyeVJlc3BvbnNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9yaWdpbmFsUmVzcG9uc2UgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcmlnaW5hbFJlc3BvbnNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlc3BvbnNlID0gb3JpZ2luYWxSZXNwb25zZTtcbiAgICAgICAgdGhpcy5ibG9iRG93bmxvYWRTdHJlYW0gPSBuZXcgQmxvYlF1aWNrUXVlcnlTdHJlYW0odGhpcy5vcmlnaW5hbFJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYWNjZXNzIHRpZXIgb24gYSBibG9iLlxuICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGJsb2NrIGJsb2IgbGV2ZWwgdGllcmluZyBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2F6dXJlL3N0b3JhZ2UvYmxvYnMvc3RvcmFnZS1ibG9iLXN0b3JhZ2UtdGllcnN8SG90LCBjb29sIGFuZCBhcmNoaXZlIHN0b3JhZ2UgdGllcnMufVxuICovXG5leHBvcnRzLkJsb2NrQmxvYlRpZXIgPSB2b2lkIDA7XG4oZnVuY3Rpb24gKEJsb2NrQmxvYlRpZXIpIHtcbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgZm9yIHN0b3JpbmcgZGF0YSB0aGF0IGlzIGFjY2Vzc2VkIGZyZXF1ZW50bHkuXG4gICAgICovXG4gICAgQmxvY2tCbG9iVGllcltcIkhvdFwiXSA9IFwiSG90XCI7XG4gICAgLyoqXG4gICAgICogT3B0aW1pemVkIGZvciBzdG9yaW5nIGRhdGEgdGhhdCBpcyBpbmZyZXF1ZW50bHkgYWNjZXNzZWQgYW5kIHN0b3JlZCBmb3IgYXQgbGVhc3QgMzAgZGF5cy5cbiAgICAgKi9cbiAgICBCbG9ja0Jsb2JUaWVyW1wiQ29vbFwiXSA9IFwiQ29vbFwiO1xuICAgIC8qKlxuICAgICAqIE9wdGltaXplZCBmb3Igc3RvcmluZyBkYXRhIHRoYXQgaXMgcmFyZWx5IGFjY2Vzc2VkLlxuICAgICAqL1xuICAgIEJsb2NrQmxvYlRpZXJbXCJDb2xkXCJdID0gXCJDb2xkXCI7XG4gICAgLyoqXG4gICAgICogT3B0aW1pemVkIGZvciBzdG9yaW5nIGRhdGEgdGhhdCBpcyByYXJlbHkgYWNjZXNzZWQgYW5kIHN0b3JlZCBmb3IgYXQgbGVhc3QgMTgwIGRheXNcbiAgICAgKiB3aXRoIGZsZXhpYmxlIGxhdGVuY3kgcmVxdWlyZW1lbnRzIChvbiB0aGUgb3JkZXIgb2YgaG91cnMpLlxuICAgICAqL1xuICAgIEJsb2NrQmxvYlRpZXJbXCJBcmNoaXZlXCJdID0gXCJBcmNoaXZlXCI7XG59KShleHBvcnRzLkJsb2NrQmxvYlRpZXIgfHwgKGV4cG9ydHMuQmxvY2tCbG9iVGllciA9IHt9KSk7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgcGFnZSBibG9iIHRpZXIgdG8gc2V0IHRoZSBibG9iIHRvLiBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSB0byBwYWdlIGJsb2JzIG9uIHByZW1pdW0gc3RvcmFnZSBhY2NvdW50cy5cbiAqIFBsZWFzZSBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2F6dXJlL3N0b3JhZ2Uvc3RvcmFnZS1wcmVtaXVtLXN0b3JhZ2Ujc2NhbGFiaWxpdHktYW5kLXBlcmZvcm1hbmNlLXRhcmdldHN8aGVyZX1cbiAqIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgY29ycmVzcG9uZGluZyBJT1BTIGFuZCB0aHJvdWdocHV0IHBlciBQYWdlQmxvYlRpZXIuXG4gKi9cbmV4cG9ydHMuUHJlbWl1bVBhZ2VCbG9iVGllciA9IHZvaWQgMDtcbihmdW5jdGlvbiAoUHJlbWl1bVBhZ2VCbG9iVGllcikge1xuICAgIC8qKlxuICAgICAqIFA0IFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA0XCJdID0gXCJQNFwiO1xuICAgIC8qKlxuICAgICAqIFA2IFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA2XCJdID0gXCJQNlwiO1xuICAgIC8qKlxuICAgICAqIFAxMCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMTBcIl0gPSBcIlAxMFwiO1xuICAgIC8qKlxuICAgICAqIFAxNSBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMTVcIl0gPSBcIlAxNVwiO1xuICAgIC8qKlxuICAgICAqIFAyMCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMjBcIl0gPSBcIlAyMFwiO1xuICAgIC8qKlxuICAgICAqIFAzMCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMzBcIl0gPSBcIlAzMFwiO1xuICAgIC8qKlxuICAgICAqIFA0MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNDBcIl0gPSBcIlA0MFwiO1xuICAgIC8qKlxuICAgICAqIFA1MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNTBcIl0gPSBcIlA1MFwiO1xuICAgIC8qKlxuICAgICAqIFA2MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNjBcIl0gPSBcIlA2MFwiO1xuICAgIC8qKlxuICAgICAqIFA3MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNzBcIl0gPSBcIlA3MFwiO1xuICAgIC8qKlxuICAgICAqIFA4MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQODBcIl0gPSBcIlA4MFwiO1xufSkoZXhwb3J0cy5QcmVtaXVtUGFnZUJsb2JUaWVyIHx8IChleHBvcnRzLlByZW1pdW1QYWdlQmxvYlRpZXIgPSB7fSkpO1xuZnVuY3Rpb24gdG9BY2Nlc3NUaWVyKHRpZXIpIHtcbiAgICBpZiAodGllciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aWVyOyAvLyBObyBtb3JlIGNoZWNrIGlmIHN0cmluZyBpcyBhIHZhbGlkIEFjY2Vzc1RpZXIsIGFuZCBsZWZ0IHRoaXMgdG8gdW5kZXJsYXkgbG9naWMgdG8gZGVjaWRlKHNlcnZpY2UpLlxufVxuZnVuY3Rpb24gZW5zdXJlQ3BrSWZTcGVjaWZpZWQoY3BrLCBpc0h0dHBzKSB7XG4gICAgaWYgKGNwayAmJiAhaXNIdHRwcykge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkN1c3RvbWVyLXByb3ZpZGVkIGVuY3J5cHRpb24ga2V5IG11c3QgYmUgdXNlZCBvdmVyIEhUVFBTLlwiKTtcbiAgICB9XG4gICAgaWYgKGNwayAmJiAhY3BrLmVuY3J5cHRpb25BbGdvcml0aG0pIHtcbiAgICAgICAgY3BrLmVuY3J5cHRpb25BbGdvcml0aG0gPSBFbmNyeXB0aW9uQWxnb3JpdGhtQUVTMjU7XG4gICAgfVxufVxuLyoqXG4gKiBEZWZpbmVzIHRoZSBrbm93biBjbG91ZCBhdWRpZW5jZXMgZm9yIFN0b3JhZ2UuXG4gKi9cbmV4cG9ydHMuU3RvcmFnZUJsb2JBdWRpZW5jZSA9IHZvaWQgMDtcbihmdW5jdGlvbiAoU3RvcmFnZUJsb2JBdWRpZW5jZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBPQXV0aCBzY29wZSB0byB1c2UgdG8gcmV0cmlldmUgYW4gQUFEIHRva2VuIGZvciBBenVyZSBTdG9yYWdlLlxuICAgICAqL1xuICAgIFN0b3JhZ2VCbG9iQXVkaWVuY2VbXCJTdG9yYWdlT0F1dGhTY29wZXNcIl0gPSBcImh0dHBzOi8vc3RvcmFnZS5henVyZS5jb20vLmRlZmF1bHRcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgT0F1dGggc2NvcGUgdG8gdXNlIHRvIHJldHJpZXZlIGFuIEFBRCB0b2tlbiBmb3IgQXp1cmUgRGlzay5cbiAgICAgKi9cbiAgICBTdG9yYWdlQmxvYkF1ZGllbmNlW1wiRGlza0NvbXB1dGVPQXV0aFNjb3Blc1wiXSA9IFwiaHR0cHM6Ly9kaXNrLmNvbXB1dGUuYXp1cmUuY29tLy5kZWZhdWx0XCI7XG59KShleHBvcnRzLlN0b3JhZ2VCbG9iQXVkaWVuY2UgfHwgKGV4cG9ydHMuU3RvcmFnZUJsb2JBdWRpZW5jZSA9IHt9KSk7XG4vKipcbiAqXG4gKiBUbyBnZXQgT0F1dGggYXVkaWVuY2UgZm9yIGEgc3RvcmFnZSBhY2NvdW50IGZvciBibG9iIHNlcnZpY2UuXG4gKi9cbmZ1bmN0aW9uIGdldEJsb2JTZXJ2aWNlQWNjb3VudEF1ZGllbmNlKHN0b3JhZ2VBY2NvdW50TmFtZSkge1xuICAgIHJldHVybiBgaHR0cHM6Ly8ke3N0b3JhZ2VBY2NvdW50TmFtZX0uYmxvYi5jb3JlLndpbmRvd3MubmV0Ly5kZWZhdWx0YDtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgY29udmVydHMgUGFnZVJhbmdlIGFuZCBDbGVhclJhbmdlIHRvIGEgY29tbW9uIFJhbmdlIG9iamVjdC5cbiAqIFBhZ2VSYW5nZSBhbmQgQ2xlYXJSYW5nZSBoYXZlIHN0YXJ0IGFuZCBlbmQgd2hpbGUgUmFuZ2Ugb2Zmc2V0IGFuZCBjb3VudFxuICogdGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIHRvIFJhbmdlLlxuICogQHBhcmFtIHJlc3BvbnNlIC0gTW9kZWwgUGFnZUJsb2IgUmFuZ2UgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gcmFuZ2VSZXNwb25zZUZyb21Nb2RlbChyZXNwb25zZSkge1xuICAgIGNvbnN0IHBhZ2VSYW5nZSA9IChyZXNwb25zZS5fcmVzcG9uc2UucGFyc2VkQm9keS5wYWdlUmFuZ2UgfHwgW10pLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgb2Zmc2V0OiB4LnN0YXJ0LFxuICAgICAgICBjb3VudDogeC5lbmQgLSB4LnN0YXJ0LFxuICAgIH0pKTtcbiAgICBjb25zdCBjbGVhclJhbmdlID0gKHJlc3BvbnNlLl9yZXNwb25zZS5wYXJzZWRCb2R5LmNsZWFyUmFuZ2UgfHwgW10pLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgb2Zmc2V0OiB4LnN0YXJ0LFxuICAgICAgICBjb3VudDogeC5lbmQgLSB4LnN0YXJ0LFxuICAgIH0pKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgcGFnZVJhbmdlLFxuICAgICAgICBjbGVhclJhbmdlLCBfcmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UuX3Jlc3BvbnNlKSwgeyBwYXJzZWRCb2R5OiB7XG4gICAgICAgICAgICAgICAgcGFnZVJhbmdlLFxuICAgICAgICAgICAgICAgIGNsZWFyUmFuZ2UsXG4gICAgICAgICAgICB9IH0pIH0pO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhpcyBpcyB0aGUgcG9sbGVyIHJldHVybmVkIGJ5IHtAbGluayBCbG9iQ2xpZW50LmJlZ2luQ29weUZyb21VUkx9LlxuICogVGhpcyBjYW4gbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSBvdXRzaWRlIG9mIHRoaXMgcGFja2FnZS5cbiAqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEJsb2JCZWdpbkNvcHlGcm9tVXJsUG9sbGVyIGV4dGVuZHMgY29yZUxyby5Qb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBibG9iQ2xpZW50LCBjb3B5U291cmNlLCBpbnRlcnZhbEluTXMgPSAxNTAwMCwgb25Qcm9ncmVzcywgcmVzdW1lRnJvbSwgc3RhcnRDb3B5RnJvbVVSTE9wdGlvbnMsIH0gPSBvcHRpb25zO1xuICAgICAgICBsZXQgc3RhdGU7XG4gICAgICAgIGlmIChyZXN1bWVGcm9tKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEpTT04ucGFyc2UocmVzdW1lRnJvbSkuc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uID0gbWFrZUJsb2JCZWdpbkNvcHlGcm9tVVJMUG9sbE9wZXJhdGlvbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBibG9iQ2xpZW50LFxuICAgICAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgICAgIHN0YXJ0Q29weUZyb21VUkxPcHRpb25zIH0pKTtcbiAgICAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyhvblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludGVydmFsSW5NcyA9IGludGVydmFsSW5NcztcbiAgICB9XG4gICAgZGVsYXkoKSB7XG4gICAgICAgIHJldHVybiBjb3JlVXRpbC5kZWxheSh0aGlzLmludGVydmFsSW5Ncyk7XG4gICAgfVxufVxuLyoqXG4gKiBOb3RlOiBJbnRlbnRpb25hbGx5IHVzaW5nIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3ZlciBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uXG4gKiBzbyB0aGF0IHRoZSBmdW5jdGlvbiBjYW4gYmUgaW52b2tlZCB3aXRoIGEgZGlmZmVyZW50IGNvbnRleHQuXG4gKiBUaGlzIGFmZmVjdHMgd2hhdCBgdGhpc2AgcmVmZXJzIHRvLlxuICogQGhpZGRlblxuICovXG5jb25zdCBjYW5jZWwgPSBhc3luYyBmdW5jdGlvbiBjYW5jZWwob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgY29weUlkIH0gPSBzdGF0ZTtcbiAgICBpZiAoc3RhdGUuaXNDb21wbGV0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoIWNvcHlJZCkge1xuICAgICAgICBzdGF0ZS5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKTtcbiAgICB9XG4gICAgLy8gaWYgYWJvcnRDb3B5RnJvbVVSTCB0aHJvd3MsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHVzZXIncyBwb2xsZXIuY2FuY2VsT3BlcmF0aW9uIGNhbGxcbiAgICBhd2FpdCBzdGF0ZS5ibG9iQ2xpZW50LmFib3J0Q29weUZyb21VUkwoY29weUlkLCB7XG4gICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgIH0pO1xuICAgIHN0YXRlLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gbWFrZUJsb2JCZWdpbkNvcHlGcm9tVVJMUG9sbE9wZXJhdGlvbihzdGF0ZSk7XG59O1xuLyoqXG4gKiBOb3RlOiBJbnRlbnRpb25hbGx5IHVzaW5nIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3ZlciBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uXG4gKiBzbyB0aGF0IHRoZSBmdW5jdGlvbiBjYW4gYmUgaW52b2tlZCB3aXRoIGEgZGlmZmVyZW50IGNvbnRleHQuXG4gKiBUaGlzIGFmZmVjdHMgd2hhdCBgdGhpc2AgcmVmZXJzIHRvLlxuICogQGhpZGRlblxuICovXG5jb25zdCB1cGRhdGUgPSBhc3luYyBmdW5jdGlvbiB1cGRhdGUob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgYmxvYkNsaWVudCwgY29weVNvdXJjZSwgc3RhcnRDb3B5RnJvbVVSTE9wdGlvbnMgfSA9IHN0YXRlO1xuICAgIGlmICghc3RhdGUuaXNTdGFydGVkKSB7XG4gICAgICAgIHN0YXRlLmlzU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJsb2JDbGllbnQuc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCBzdGFydENvcHlGcm9tVVJMT3B0aW9ucyk7XG4gICAgICAgIC8vIGNvcHlJZCBpcyBuZWVkZWQgdG8gYWJvcnRcbiAgICAgICAgc3RhdGUuY29weUlkID0gcmVzdWx0LmNvcHlJZDtcbiAgICAgICAgaWYgKHJlc3VsdC5jb3B5U3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgc3RhdGUucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgc3RhdGUuaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzdGF0ZS5pc0NvbXBsZXRlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhdGUuYmxvYkNsaWVudC5nZXRQcm9wZXJ0aWVzKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICBjb25zdCB7IGNvcHlTdGF0dXMsIGNvcHlQcm9ncmVzcyB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgcHJldkNvcHlQcm9ncmVzcyA9IHN0YXRlLmNvcHlQcm9ncmVzcztcbiAgICAgICAgICAgIGlmIChjb3B5UHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jb3B5UHJvZ3Jlc3MgPSBjb3B5UHJvZ3Jlc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29weVN0YXR1cyA9PT0gXCJwZW5kaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBjb3B5UHJvZ3Jlc3MgIT09IHByZXZDb3B5UHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5maXJlUHJvZ3Jlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgaW4gc2V0VGltZW91dCwgb3Igc3dhbGxvdyBlcnJvcj9cbiAgICAgICAgICAgICAgICBvcHRpb25zLmZpcmVQcm9ncmVzcyhzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb3B5U3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgIHN0YXRlLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb3B5U3RhdHVzID09PSBcImZhaWxlZFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IgPSBuZXcgRXJyb3IoYEJsb2IgY29weSBmYWlsZWQgd2l0aCByZWFzb246IFwiJHtyZXN1bHQuY29weVN0YXR1c0Rlc2NyaXB0aW9uIHx8IFwidW5rbm93blwifVwiYCk7XG4gICAgICAgICAgICAgICAgc3RhdGUuaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN0YXRlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgc3RhdGUuaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKTtcbn07XG4vKipcbiAqIE5vdGU6IEludGVudGlvbmFsbHkgdXNpbmcgZnVuY3Rpb24gZXhwcmVzc2lvbiBvdmVyIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAqIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGggYSBkaWZmZXJlbnQgY29udGV4dC5cbiAqIFRoaXMgYWZmZWN0cyB3aGF0IGB0aGlzYCByZWZlcnMgdG8uXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgc3RhdGU6IHRoaXMuc3RhdGUgfSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgLy8gcmVtb3ZlIGJsb2JDbGllbnQgZnJvbSBzZXJpYWxpemVkIHN0YXRlIHNpbmNlIGEgY2xpZW50IGNhbid0IGJlIGh5ZHJhdGVkIGZyb20gdGhpcyBpbmZvLlxuICAgICAgICBpZiAoa2V5ID09PSBcImJsb2JDbGllbnRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgcG9sbCBvcGVyYXRpb24gZ2l2ZW4gdGhlIHByb3ZpZGVkIHN0YXRlLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGU6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSxcbiAgICAgICAgY2FuY2VsLFxuICAgICAgICB0b1N0cmluZyxcbiAgICAgICAgdXBkYXRlLFxuICAgIH07XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmdlIHN0cmluZy4gRm9yIGV4YW1wbGU6XG4gKlxuICogXCJieXRlcz0yNTUtXCIgb3IgXCJieXRlcz0wLTUxMVwiXG4gKlxuICogQHBhcmFtIGlSYW5nZSAtXG4gKi9cbmZ1bmN0aW9uIHJhbmdlVG9TdHJpbmcoaVJhbmdlKSB7XG4gICAgaWYgKGlSYW5nZS5vZmZzZXQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSYW5nZS5vZmZzZXQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAwLmApO1xuICAgIH1cbiAgICBpZiAoaVJhbmdlLmNvdW50ICYmIGlSYW5nZS5jb3VudCA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSYW5nZS5jb3VudCBtdXN0IGJlIGxhcmdlciB0aGFuIDAuIExlYXZlIGl0IHVuZGVmaW5lZCBpZiB5b3Ugd2FudCBhIHJhbmdlIGZyb20gb2Zmc2V0IHRvIHRoZSBlbmQuYCk7XG4gICAgfVxuICAgIHJldHVybiBpUmFuZ2UuY291bnRcbiAgICAgICAgPyBgYnl0ZXM9JHtpUmFuZ2Uub2Zmc2V0fS0ke2lSYW5nZS5vZmZzZXQgKyBpUmFuZ2UuY291bnQgLSAxfWBcbiAgICAgICAgOiBgYnl0ZXM9JHtpUmFuZ2Uub2Zmc2V0fS1gO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8vIEluIGJyb3dzZXIsIGR1cmluZyB3ZWJwYWNrIG9yIGJyb3dzZXJpZnkgYnVuZGxpbmcsIHRoaXMgbW9kdWxlIHdpbGwgYmUgcmVwbGFjZWQgYnkgJ2V2ZW50cydcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb3phbGEvZXZlbnRzXG4vKipcbiAqIFN0YXRlcyBmb3IgQmF0Y2guXG4gKi9cbnZhciBCYXRjaFN0YXRlcztcbihmdW5jdGlvbiAoQmF0Y2hTdGF0ZXMpIHtcbiAgICBCYXRjaFN0YXRlc1tCYXRjaFN0YXRlc1tcIkdvb2RcIl0gPSAwXSA9IFwiR29vZFwiO1xuICAgIEJhdGNoU3RhdGVzW0JhdGNoU3RhdGVzW1wiRXJyb3JcIl0gPSAxXSA9IFwiRXJyb3JcIjtcbn0pKEJhdGNoU3RhdGVzIHx8IChCYXRjaFN0YXRlcyA9IHt9KSk7XG4vKipcbiAqIEJhdGNoIHByb3ZpZGVzIGJhc2ljIHBhcmFsbGVsIGV4ZWN1dGlvbiB3aXRoIGNvbmN1cnJlbmN5IGxpbWl0cy5cbiAqIFdpbGwgc3RvcCBleGVjdXRlIGxlZnQgb3BlcmF0aW9ucyB3aGVuIG9uZSBvZiB0aGUgZXhlY3V0ZWQgb3BlcmF0aW9uIHRocm93cyBhbiBlcnJvci5cbiAqIEJ1dCBCYXRjaCBjYW5ub3QgY2FuY2VsIG9uZ29pbmcgb3BlcmF0aW9ucywgeW91IG5lZWQgdG8gY2FuY2VsIHRoZW0gYnkgeW91cnNlbGYuXG4gKi9cbmNsYXNzIEJhdGNoIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJhdGNoLlxuICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29uY3VycmVuY3kgPSA1KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOdW1iZXIgb2YgYWN0aXZlIG9wZXJhdGlvbnMgdW5kZXIgZXhlY3V0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVzID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE51bWJlciBvZiBjb21wbGV0ZWQgb3BlcmF0aW9ucyB1bmRlciBleGVjdXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPZmZzZXQgb2YgbmV4dCBvcGVyYXRpb24gdG8gYmUgZXhlY3V0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcGVyYXRpb24gYXJyYXkgdG8gYmUgZXhlY3V0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0YXRlcyBvZiBCYXRjaC4gV2hlbiBhbiBlcnJvciBoYXBwZW5zLCBzdGF0ZSB3aWxsIHR1cm4gaW50byBlcnJvci5cbiAgICAgICAgICogQmF0Y2ggd2lsbCBzdG9wIGV4ZWN1dGUgbGVmdCBvcGVyYXRpb25zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJhdGNoU3RhdGVzLkdvb2Q7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiY29uY3VycmVuY3kgbXVzdCBiZSBsYXJnZXIgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgb3BlcmF0aW9uIGludG8gcXVldWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIC1cbiAgICAgKi9cbiAgICBhZGRPcGVyYXRpb24ob3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVzKys7XG4gICAgICAgICAgICAgICAgYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVzLS07XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWQrKztcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFsbGVsRXhlY3V0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydCBleGVjdXRlIG9wZXJhdGlvbnMgaW4gdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICovXG4gICAgYXN5bmMgZG8oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJhbGxlbEV4ZWN1dGUoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImZpbmlzaFwiLCByZXNvbHZlKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCYXRjaFN0YXRlcy5FcnJvcjtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgbmV4dCBvcGVyYXRpb24gdG8gYmUgZXhlY3V0ZWQuIFJldHVybiBudWxsIHdoZW4gcmVhY2hpbmcgZW5kcy5cbiAgICAgKlxuICAgICAqL1xuICAgIG5leHRPcGVyYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9mZnNldCA8IHRoaXMub3BlcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbnNbdGhpcy5vZmZzZXQrK107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGV4ZWN1dGUgb3BlcmF0aW9ucy4gT25lIG9uZSB0aGUgbW9zdCBpbXBvcnRhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuXG4gICAgICogdGhpcyBtZXRob2Qgd2l0aCBkbygpIGlzIHRoYXQgZG8oKSB3cmFwcyBhcyBhbiBzeW5jIG1ldGhvZC5cbiAgICAgKlxuICAgICAqL1xuICAgIHBhcmFsbGVsRXhlY3V0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IEJhdGNoU3RhdGVzLkVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGVkID49IHRoaXMub3BlcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KFwiZmluaXNoXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLmFjdGl2ZXMgPCB0aGlzLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLm5leHRPcGVyYXRpb24oKTtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoaXMgY2xhc3MgZ2VuZXJhdGVzIGEgcmVhZGFibGUgc3RyZWFtIGZyb20gdGhlIGRhdGEgaW4gYW4gYXJyYXkgb2YgYnVmZmVycy5cbiAqL1xuY2xhc3MgQnVmZmVyc1N0cmVhbSBleHRlbmRzIHN0cmVhbS5SZWFkYWJsZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCdWZmZXJzU3RyZWFtIHRoYXQgd2lsbCBlbWl0IHRoZSBkYXRhXG4gICAgICogY29udGFpbmVkIGluIHRoZSBhcnJheSBvZiBidWZmZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlcnMgLSBBcnJheSBvZiBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIGRhdGFcbiAgICAgKiBAcGFyYW0gYnl0ZUxlbmd0aCAtIFRoZSB0b3RhbCBsZW5ndGggb2YgZGF0YSBjb250YWluZWQgaW4gdGhlIGJ1ZmZlcnNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihidWZmZXJzLCBieXRlTGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmJ1ZmZlcnMgPSBidWZmZXJzO1xuICAgICAgICB0aGlzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoO1xuICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSAwO1xuICAgICAgICB0aGlzLmJ1ZmZlckluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5wdXNoZWRCeXRlc0xlbmd0aCA9IDA7XG4gICAgICAgIC8vIGNoZWNrIGJ5dGVMZW5ndGggaXMgbm8gbGFyZ2VyIHRoYW4gYnVmZmVyc1tdIHRvdGFsIGxlbmd0aFxuICAgICAgICBsZXQgYnVmZmVyc0xlbmd0aCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgYnVmIG9mIHRoaXMuYnVmZmVycykge1xuICAgICAgICAgICAgYnVmZmVyc0xlbmd0aCArPSBidWYuYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVmZmVyc0xlbmd0aCA8IHRoaXMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSBzaXplIHNob3VsZG4ndCBiZSBsYXJnZXIgdGhhbiB0aGUgdG90YWwgbGVuZ3RoIG9mIGJ1ZmZlcnMuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludGVybmFsIF9yZWFkKCkgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gd2FudHMgdG8gcHVsbCBtb3JlIGRhdGEgaW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2l6ZSAtIE9wdGlvbmFsLiBUaGUgc2l6ZSBvZiBkYXRhIHRvIGJlIHJlYWRcbiAgICAgKi9cbiAgICBfcmVhZChzaXplKSB7XG4gICAgICAgIGlmICh0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoID49IHRoaXMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2l6ZSkge1xuICAgICAgICAgICAgc2l6ZSA9IHRoaXMucmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG91dEJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHNpemUgJiYgdGhpcy5wdXNoZWRCeXRlc0xlbmd0aCA8IHRoaXMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgLy8gVGhlIGxhc3QgYnVmZmVyIG1heSBiZSBsb25nZXIgdGhhbiB0aGUgZGF0YSBpdCBjb250YWlucy5cbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0RhdGFJbkFsbEJ1ZmZlcnMgPSB0aGlzLmJ5dGVMZW5ndGggLSB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nQ2FwYWNpdHlJblRoaXNCdWZmZXIgPSB0aGlzLmJ1ZmZlcnNbdGhpcy5idWZmZXJJbmRleF0uYnl0ZUxlbmd0aCAtIHRoaXMuYnl0ZU9mZnNldEluQ3VycmVudEJ1ZmZlcjtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IE1hdGgubWluKHJlbWFpbmluZ0NhcGFjaXR5SW5UaGlzQnVmZmVyLCByZW1haW5pbmdEYXRhSW5BbGxCdWZmZXJzKTtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPiBzaXplIC0gaSkge1xuICAgICAgICAgICAgICAgIC8vIGNodW5rU2l6ZSA9IHNpemUgLSBpXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyICsgc2l6ZSAtIGk7XG4gICAgICAgICAgICAgICAgb3V0QnVmZmVycy5wdXNoKHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XS5zbGljZSh0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIsIGVuZCkpO1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaGVkQnl0ZXNMZW5ndGggKz0gc2l6ZSAtIGk7XG4gICAgICAgICAgICAgICAgdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyID0gZW5kO1xuICAgICAgICAgICAgICAgIGkgPSBzaXplO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY2h1bmtTaXplID0gcmVtYWluaW5nXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyICsgcmVtYWluaW5nO1xuICAgICAgICAgICAgICAgIG91dEJ1ZmZlcnMucHVzaCh0aGlzLmJ1ZmZlcnNbdGhpcy5idWZmZXJJbmRleF0uc2xpY2UodGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyLCBlbmQpKTtcbiAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nID09PSByZW1haW5pbmdDYXBhY2l0eUluVGhpc0J1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmJ1ZmZlcnNbdGhpcy5idWZmZXJJbmRleF0gdXNlZCB1cCwgc2hpZnQgdG8gbmV4dCBvbmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyID0gZW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoICs9IHJlbWFpbmluZztcbiAgICAgICAgICAgICAgICBpICs9IHJlbWFpbmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3V0QnVmZmVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnB1c2goQnVmZmVyLmNvbmNhdChvdXRCdWZmZXJzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3V0QnVmZmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMucHVzaChvdXRCdWZmZXJzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBtYXhCdWZmZXJMZW5ndGggPSBidWZmZXIuY29uc3RhbnRzLk1BWF9MRU5HVEg7XG4vKipcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBidWZmZXIgY29udGFpbmVyIHdoaWNoIGNvbmNlcHR1YWxseSBoYXMgbm8gaGFyZCBzaXplIGxpbWl0LlxuICogSXQgYWNjZXB0cyBhIGNhcGFjaXR5LCBhbiBhcnJheSBvZiBpbnB1dCBidWZmZXJzIGFuZCB0aGUgdG90YWwgbGVuZ3RoIG9mIGlucHV0IGRhdGEuXG4gKiBJdCB3aWxsIGFsbG9jYXRlIGFuIGludGVybmFsIFwiYnVmZmVyXCIgb2YgdGhlIGNhcGFjaXR5IGFuZCBmaWxsIHRoZSBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXJzXG4gKiBpbnRvIHRoZSBpbnRlcm5hbCBcImJ1ZmZlclwiIHNlcmlhbGx5IHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbGVuZ3RoLlxuICogVGhlbiBieSBjYWxsaW5nIFBvb2xlZEJ1ZmZlci5nZXRSZWFkYWJsZVN0cmVhbSgpLCB5b3UgY2FuIGdldCBhIHJlYWRhYmxlIHN0cmVhbVxuICogYXNzZW1ibGVkIGZyb20gYWxsIHRoZSBkYXRhIGluIHRoZSBpbnRlcm5hbCBcImJ1ZmZlclwiLlxuICovXG5jbGFzcyBQb29sZWRCdWZmZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgcG9vbGVkIGJ1ZmZlcnMuXG4gICAgICovXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihjYXBhY2l0eSwgYnVmZmVycywgdG90YWxMZW5ndGgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEludGVybmFsIGJ1ZmZlcnMgdXNlZCB0byBrZWVwIHRoZSBkYXRhLlxuICAgICAgICAgKiBFYWNoIGJ1ZmZlciBoYXMgYSBsZW5ndGggb2YgdGhlIG1heEJ1ZmZlckxlbmd0aCBleGNlcHQgbGFzdCBvbmUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5jYXBhY2l0eSA9IGNhcGFjaXR5O1xuICAgICAgICB0aGlzLl9zaXplID0gMDtcbiAgICAgICAgLy8gYWxsb2NhdGVcbiAgICAgICAgY29uc3QgYnVmZmVyTnVtID0gTWF0aC5jZWlsKGNhcGFjaXR5IC8gbWF4QnVmZmVyTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJOdW07IGkrKykge1xuICAgICAgICAgICAgbGV0IGxlbiA9IGkgPT09IGJ1ZmZlck51bSAtIDEgPyBjYXBhY2l0eSAlIG1heEJ1ZmZlckxlbmd0aCA6IG1heEJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZW4gPSBtYXhCdWZmZXJMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcnMucHVzaChCdWZmZXIuYWxsb2NVbnNhZmUobGVuKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsbChidWZmZXJzLCB0b3RhbExlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRmlsbCB0aGUgaW50ZXJuYWwgYnVmZmVycyB3aXRoIGRhdGEgaW4gdGhlIGlucHV0IGJ1ZmZlcnMgc2VyaWFsbHlcbiAgICAgKiB3aXRoIHJlc3BlY3QgdG8gdGhlIHRvdGFsIGxlbmd0aCBhbmQgdGhlIHRvdGFsIGNhcGFjaXR5IG9mIHRoZSBpbnRlcm5hbCBidWZmZXJzLlxuICAgICAqIERhdGEgY29waWVkIHdpbGwgYmUgc2hpZnQgb3V0IG9mIHRoZSBpbnB1dCBidWZmZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlcnMgLSBJbnB1dCBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUgZmlsbGVkIGluIHRoZSBwb29sZWQgYnVmZmVyXG4gICAgICogQHBhcmFtIHRvdGFsTGVuZ3RoIC0gVG90YWwgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGZpbGxlZCBpbi5cbiAgICAgKlxuICAgICAqL1xuICAgIGZpbGwoYnVmZmVycywgdG90YWxMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IE1hdGgubWluKHRoaXMuY2FwYWNpdHksIHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgbGV0IGkgPSAwLCBqID0gMCwgdGFyZ2V0T2Zmc2V0ID0gMCwgc291cmNlT2Zmc2V0ID0gMCwgdG90YWxDb3BpZWROdW0gPSAwO1xuICAgICAgICB3aGlsZSAodG90YWxDb3BpZWROdW0gPCB0aGlzLl9zaXplKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBidWZmZXJzW2ldO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5idWZmZXJzW2pdO1xuICAgICAgICAgICAgY29uc3QgY29waWVkTnVtID0gc291cmNlLmNvcHkodGFyZ2V0LCB0YXJnZXRPZmZzZXQsIHNvdXJjZU9mZnNldCk7XG4gICAgICAgICAgICB0b3RhbENvcGllZE51bSArPSBjb3BpZWROdW07XG4gICAgICAgICAgICBzb3VyY2VPZmZzZXQgKz0gY29waWVkTnVtO1xuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0ICs9IGNvcGllZE51bTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VPZmZzZXQgPT09IHNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YXJnZXRPZmZzZXQgPT09IHRhcmdldC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciBjb3BpZWQgZnJvbSBzb3VyY2UgYnVmZmVyc1xuICAgICAgICBidWZmZXJzLnNwbGljZSgwLCBpKTtcbiAgICAgICAgaWYgKGJ1ZmZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYnVmZmVyc1swXSA9IGJ1ZmZlcnNbMF0uc2xpY2Uoc291cmNlT2Zmc2V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHJlYWRhYmxlIHN0cmVhbSBhc3NlbWJsZWQgZnJvbSBhbGwgdGhlIGRhdGEgaW4gdGhlIGludGVybmFsIGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRSZWFkYWJsZVN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXJzU3RyZWFtKHRoaXMuYnVmZmVycywgdGhpcy5zaXplKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGlzIGNsYXNzIGFjY2VwdHMgYSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbSBhcyBpbnB1dCwgYW5kIGtlZXBzIHJlYWRpbmcgZGF0YVxuICogZnJvbSB0aGUgc3RyZWFtIGludG8gdGhlIGludGVybmFsIGJ1ZmZlciBzdHJ1Y3R1cmUsIHVudGlsIGl0IHJlYWNoZXMgbWF4QnVmZmVycy5cbiAqIEV2ZXJ5IGF2YWlsYWJsZSBidWZmZXIgd2lsbCB0cnkgdG8gdHJpZ2dlciBvdXRnb2luZ0hhbmRsZXIuXG4gKlxuICogVGhlIGludGVybmFsIGJ1ZmZlciBzdHJ1Y3R1cmUgaW5jbHVkZXMgYW4gaW5jb21pbmcgYnVmZmVyIGFycmF5LCBhbmQgYSBvdXRnb2luZ1xuICogYnVmZmVyIGFycmF5LiBUaGUgaW5jb21pbmcgYnVmZmVyIGFycmF5IGluY2x1ZGVzIHRoZSBcImVtcHR5XCIgYnVmZmVycyBjYW4gYmUgZmlsbGVkXG4gKiB3aXRoIG5ldyBpbmNvbWluZyBkYXRhLiBUaGUgb3V0Z29pbmcgYXJyYXkgaW5jbHVkZXMgdGhlIGZpbGxlZCBidWZmZXJzIHRvIGJlXG4gKiBoYW5kbGVkIGJ5IG91dGdvaW5nSGFuZGxlci4gRXZlcnkgYWJvdmUgYnVmZmVyIHNpemUgaXMgZGVmaW5lZCBieSBwYXJhbWV0ZXIgYnVmZmVyU2l6ZS5cbiAqXG4gKiBOVU1fT0ZfQUxMX0JVRkZFUlMgPSBCVUZGRVJTX0lOX0lOQ09NSU5HICsgQlVGRkVSU19JTl9PVVRHT0lORyArIEJVRkZFUlNfVU5ERVJfSEFORExJTkdcbiAqXG4gKiBOVU1fT0ZfQUxMX0JVRkZFUlMgbGVzc2VyIHRoYW4gb3IgZXF1YWwgdG8gbWF4QnVmZmVyc1xuICpcbiAqIFBFUkZPUk1BTkNFIElNUFJPVkVNRU5UIFRJUFM6XG4gKiAxLiBJbnB1dCBzdHJlYW0gaGlnaFdhdGVyTWFyayBpcyBiZXR0ZXIgdG8gc2V0IGEgc2FtZSB2YWx1ZSB3aXRoIGJ1ZmZlclNpemVcbiAqICAgIHBhcmFtZXRlciwgd2hpY2ggd2lsbCBhdm9pZCBCdWZmZXIuY29uY2F0KCkgb3BlcmF0aW9ucy5cbiAqIDIuIGNvbmN1cnJlbmN5IHNob3VsZCBzZXQgYSBzbWFsbGVyIHZhbHVlIHRoYW4gbWF4QnVmZmVycywgd2hpY2ggaXMgaGVscGZ1bCB0b1xuICogICAgcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSB3aGVuIGEgb3V0Z29pbmcgaGFuZGxlciB3YWl0cyBmb3IgdGhlIHN0cmVhbSBkYXRhLlxuICogICAgaW4gdGhpcyBzaXR1YXRpb24sIG91dGdvaW5nIGhhbmRsZXJzIGFyZSBibG9ja2VkLlxuICogICAgT3V0Z29pbmcgcXVldWUgc2hvdWxkbid0IGJlIGVtcHR5LlxuICovXG5jbGFzcyBCdWZmZXJTY2hlZHVsZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyU2NoZWR1bGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlYWRhYmxlIC0gQSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbVxuICAgICAqIEBwYXJhbSBidWZmZXJTaXplIC0gQnVmZmVyIHNpemUgb2YgZXZlcnkgbWFpbnRhaW5lZCBidWZmZXJcbiAgICAgKiBAcGFyYW0gbWF4QnVmZmVycyAtIEhvdyBtYW55IGJ1ZmZlcnMgY2FuIGJlIGFsbG9jYXRlZFxuICAgICAqIEBwYXJhbSBvdXRnb2luZ0hhbmRsZXIgLSBBbiBhc3luYyBmdW5jdGlvbiBzY2hlZHVsZWQgdG8gYmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJlZCB3aGVuIGEgYnVmZmVyIGZ1bGx5IGZpbGxlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzdHJlYW0gZGF0YVxuICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeSAtIENvbmN1cnJlbmN5IG9mIGV4ZWN1dGluZyBvdXRnb2luZ0hhbmRsZXJzICg+MClcbiAgICAgKiBAcGFyYW0gZW5jb2RpbmcgLSBbT3B0aW9uYWxdIEVuY29kaW5nIG9mIFJlYWRhYmxlIHN0cmVhbSB3aGVuIGl0J3MgYSBzdHJpbmcgc3RyZWFtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocmVhZGFibGUsIGJ1ZmZlclNpemUsIG1heEJ1ZmZlcnMsIG91dGdvaW5nSGFuZGxlciwgY29uY3VycmVuY3ksIGVuY29kaW5nKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBldmVudCBlbWl0dGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGludGVybmFsIG9mZnNldCBtYXJrZXIgdG8gdHJhY2sgZGF0YSBvZmZzZXQgaW4gYnl0ZXMgb2YgbmV4dCBvdXRnb2luZ0hhbmRsZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBtYXJrZXIgdG8gdHJhY2sgd2hldGhlciBzdHJlYW0gaXMgZW5kLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc1N0cmVhbUVuZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gaW50ZXJuYWwgbWFya2VyIHRvIHRyYWNrIHdoZXRoZXIgc3RyZWFtIG9yIG91dGdvaW5nSGFuZGxlciByZXR1cm5zIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIb3cgbWFueSBoYW5kbGVycyBhcmUgZXhlY3V0aW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhvdyBtYW55IGJ1ZmZlcnMgaGF2ZSBiZWVuIGFsbG9jYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubnVtQnVmZmVycyA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCZWNhdXNlIHRoaXMgY2xhc3MgZG9lc24ndCBrbm93IGhvdyBtdWNoIGRhdGEgZXZlcnkgdGltZSBzdHJlYW0gcG9wcywgd2hpY2hcbiAgICAgICAgICogaXMgZGVmaW5lZCBieSBoaWdoV2F0ZXJNYXJrZXIgb2YgdGhlIHN0cmVhbS4gU28gQnVmZmVyU2NoZWR1bGVyIHdpbGwgY2FjaGVcbiAgICAgICAgICogZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBzdHJlYW0sIHdoZW4gZGF0YSBpbiB1bnJlc29sdmVkRGF0YUFycmF5IGV4Y2VlZHMgdGhlXG4gICAgICAgICAqIGJsb2NrU2l6ZSBkZWZpbmVkLCBpdCB3aWxsIHRyeSB0byBjb25jYXQgYSBibG9ja1NpemUgb2YgYnVmZmVyLCBmaWxsIGludG8gYXZhaWxhYmxlXG4gICAgICAgICAqIGJ1ZmZlcnMgZnJvbSBpbmNvbWluZyBhbmQgcHVzaCB0byBvdXRnb2luZyBhcnJheS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudW5yZXNvbHZlZERhdGFBcnJheSA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogSG93IG11Y2ggZGF0YSBjb25zaXN0ZWQgaW4gdW5yZXNvbHZlZERhdGFBcnJheS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudW5yZXNvbHZlZExlbmd0aCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgYXJyYXkgaW5jbHVkZXMgYWxsIHRoZSBhdmFpbGFibGUgYnVmZmVycyBjYW4gYmUgdXNlZCB0byBmaWxsIGRhdGEgZnJvbSBzdHJlYW0uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmluY29taW5nID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgYXJyYXkgKHF1ZXVlKSBpbmNsdWRlcyBhbGwgdGhlIGJ1ZmZlcnMgZmlsbGVkIGZyb20gc3RyZWFtIGRhdGEuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm91dGdvaW5nID0gW107XG4gICAgICAgIGlmIChidWZmZXJTaXplIDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBidWZmZXJTaXplIG11c3QgYmUgbGFyZ2VyIHRoYW4gMCwgY3VycmVudCBpcyAke2J1ZmZlclNpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heEJ1ZmZlcnMgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYG1heEJ1ZmZlcnMgbXVzdCBiZSBsYXJnZXIgdGhhbiAwLCBjdXJyZW50IGlzICR7bWF4QnVmZmVyc31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uY3VycmVuY3kgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGNvbmN1cnJlbmN5IG11c3QgYmUgbGFyZ2VyIHRoYW4gMCwgY3VycmVudCBpcyAke2NvbmN1cnJlbmN5fWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7XG4gICAgICAgIHRoaXMubWF4QnVmZmVycyA9IG1heEJ1ZmZlcnM7XG4gICAgICAgIHRoaXMucmVhZGFibGUgPSByZWFkYWJsZTtcbiAgICAgICAgdGhpcy5vdXRnb2luZ0hhbmRsZXIgPSBvdXRnb2luZ0hhbmRsZXI7XG4gICAgICAgIHRoaXMuY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydCB0aGUgc2NoZWR1bGVyLCB3aWxsIHJldHVybiBlcnJvciB3aGVuIHN0cmVhbSBvZiBhbnkgb2YgdGhlIG91dGdvaW5nSGFuZGxlcnNcbiAgICAgKiByZXR1cm5zIGVycm9yLlxuICAgICAqXG4gICAgICovXG4gICAgYXN5bmMgZG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlYWRhYmxlLm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiA/IEJ1ZmZlci5mcm9tKGRhdGEsIHRoaXMuZW5jb2RpbmcpIDogZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFVucmVzb2x2ZWREYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZXNvbHZlRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZGFibGUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlYWRhYmxlLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3RyZWFtRW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImNoZWNrRW5kXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWRhYmxlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImNoZWNrRW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vdXRnb2luZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlck91dGdvaW5nSGFuZGxlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N0cmVhbUVuZCAmJiB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5yZXNvbHZlZExlbmd0aCA+IDAgJiYgdGhpcy51bnJlc29sdmVkTGVuZ3RoIDwgdGhpcy5idWZmZXJTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLnNoaWZ0QnVmZmVyRnJvbVVucmVzb2x2ZWREYXRhQXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0Z29pbmdIYW5kbGVyKCgpID0+IGJ1ZmZlci5nZXRSZWFkYWJsZVN0cmVhbSgpLCBidWZmZXIuc2l6ZSwgdGhpcy5vZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnVucmVzb2x2ZWRMZW5ndGggPj0gdGhpcy5idWZmZXJTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluc2VydCBhIG5ldyBkYXRhIGludG8gdW5yZXNvbHZlZCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIC1cbiAgICAgKi9cbiAgICBhcHBlbmRVbnJlc29sdmVkRGF0YShkYXRhKSB7XG4gICAgICAgIHRoaXMudW5yZXNvbHZlZERhdGFBcnJheS5wdXNoKGRhdGEpO1xuICAgICAgICB0aGlzLnVucmVzb2x2ZWRMZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyeSB0byBzaGlmdCBhIGJ1ZmZlciB3aXRoIHNpemUgaW4gYmxvY2tTaXplLiBUaGUgYnVmZmVyIHJldHVybmVkIG1heSBiZSBsZXNzXG4gICAgICogdGhhbiBibG9ja1NpemUgd2hlbiBkYXRhIGluIHVucmVzb2x2ZWREYXRhQXJyYXkgaXMgbGVzcyB0aGFuIGJ1ZmZlclNpemUuXG4gICAgICpcbiAgICAgKi9cbiAgICBzaGlmdEJ1ZmZlckZyb21VbnJlc29sdmVkRGF0YUFycmF5KGJ1ZmZlcikge1xuICAgICAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICAgICAgYnVmZmVyID0gbmV3IFBvb2xlZEJ1ZmZlcih0aGlzLmJ1ZmZlclNpemUsIHRoaXMudW5yZXNvbHZlZERhdGFBcnJheSwgdGhpcy51bnJlc29sdmVkTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlci5maWxsKHRoaXMudW5yZXNvbHZlZERhdGFBcnJheSwgdGhpcy51bnJlc29sdmVkTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVucmVzb2x2ZWRMZW5ndGggLT0gYnVmZmVyLnNpemU7XG4gICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgZGF0YSBpbiB1bnJlc29sdmVkRGF0YUFycmF5LiBGb3IgZXZlcnkgYnVmZmVyIHdpdGggc2l6ZSBpbiBibG9ja1NpemVcbiAgICAgKiBzaGlmdGVkLCBpdCB3aWxsIHRyeSB0byBnZXQgKG9yIGFsbG9jYXRlIGEgYnVmZmVyKSBmcm9tIGluY29taW5nLCBhbmQgZmlsbCBpdCxcbiAgICAgKiB0aGVuIHB1c2ggaXQgaW50byBvdXRnb2luZyB0byBiZSBoYW5kbGVkIGJ5IG91dGdvaW5nIGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBSZXR1cm4gZmFsc2Ugd2hlbiBhdmFpbGFibGUgYnVmZmVycyBpbiBpbmNvbWluZyBhcmUgbm90IGVub3VnaCwgZWxzZSB0cnVlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgUmV0dXJuIGZhbHNlIHdoZW4gYnVmZmVycyBpbiBpbmNvbWluZyBhcmUgbm90IGVub3VnaCwgZWxzZSB0cnVlLlxuICAgICAqL1xuICAgIHJlc29sdmVEYXRhKCkge1xuICAgICAgICB3aGlsZSAodGhpcy51bnJlc29sdmVkTGVuZ3RoID49IHRoaXMuYnVmZmVyU2l6ZSkge1xuICAgICAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgICAgIGlmICh0aGlzLmluY29taW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSB0aGlzLmluY29taW5nLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGlmdEJ1ZmZlckZyb21VbnJlc29sdmVkRGF0YUFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1CdWZmZXJzIDwgdGhpcy5tYXhCdWZmZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuc2hpZnRCdWZmZXJGcm9tVW5yZXNvbHZlZERhdGFBcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bUJ1ZmZlcnMrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vIGF2YWlsYWJsZSBidWZmZXIsIHdhaXQgZm9yIGJ1ZmZlciByZXR1cm5lZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vdXRnb2luZy5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJPdXRnb2luZ0hhbmRsZXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyeSB0byB0cmlnZ2VyIGEgb3V0Z29pbmcgaGFuZGxlciBmb3IgZXZlcnkgYnVmZmVyIGluIG91dGdvaW5nLiBTdG9wIHdoZW5cbiAgICAgKiBjb25jdXJyZW5jeSByZWFjaGVzLlxuICAgICAqL1xuICAgIGFzeW5jIHRyaWdnZXJPdXRnb2luZ0hhbmRsZXJzKCkge1xuICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAodGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzID49IHRoaXMuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSB0aGlzLm91dGdvaW5nLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyT3V0Z29pbmdIYW5kbGVyKGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGJ1ZmZlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgYSBvdXRnb2luZyBoYW5kbGVyIGZvciBhIGJ1ZmZlciBzaGlmdGVkIGZyb20gb3V0Z29pbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVmZmVyIC1cbiAgICAgKi9cbiAgICBhc3luYyB0cmlnZ2VyT3V0Z29pbmdIYW5kbGVyKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWZmZXJMZW5ndGggPSBidWZmZXIuc2l6ZTtcbiAgICAgICAgdGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzKys7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub3V0Z29pbmdIYW5kbGVyKCgpID0+IGJ1ZmZlci5nZXRSZWFkYWJsZVN0cmVhbSgpLCBidWZmZXJMZW5ndGgsIHRoaXMub2Zmc2V0IC0gYnVmZmVyTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzLS07XG4gICAgICAgIHRoaXMucmV1c2VCdWZmZXIoYnVmZmVyKTtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJjaGVja0VuZFwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGJ1ZmZlciB1c2VkIGJ5IG91dGdvaW5nIGhhbmRsZXIgaW50byBpbmNvbWluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBidWZmZXIgLVxuICAgICAqL1xuICAgIHJldXNlQnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICB0aGlzLmluY29taW5nLnB1c2goYnVmZmVyKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRXJyb3IgJiYgdGhpcy5yZXNvbHZlRGF0YSgpICYmICF0aGlzLmlzU3RyZWFtRW5kKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWRhYmxlLnJlc3VtZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmVhZHMgYSByZWFkYWJsZSBzdHJlYW0gaW50byBidWZmZXIuIEZpbGwgdGhlIGJ1ZmZlciBmcm9tIG9mZnNldCB0byBlbmQuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAtIEEgTm9kZS5qcyBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSBidWZmZXIgLSBCdWZmZXIgdG8gYmUgZmlsbGVkLCBsZW5ndGggbXVzdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb2Zmc2V0XG4gKiBAcGFyYW0gb2Zmc2V0IC0gRnJvbSB3aGljaCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyIHRvIGJlIGZpbGxlZCwgaW5jbHVzaXZlXG4gKiBAcGFyYW0gZW5kIC0gVG8gd2hpY2ggcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciB0byBiZSBmaWxsZWQsIGV4Y2x1c2l2ZVxuICogQHBhcmFtIGVuY29kaW5nIC0gRW5jb2Rpbmcgb2YgdGhlIFJlYWRhYmxlIHN0cmVhbVxuICovXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub0J1ZmZlcihzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKSB7XG4gICAgbGV0IHBvcyA9IDA7IC8vIFBvc2l0aW9uIGluIHN0cmVhbVxuICAgIGNvbnN0IGNvdW50ID0gZW5kIC0gb2Zmc2V0OyAvLyBUb3RhbCBhbW91bnQgb2YgZGF0YSBuZWVkZWQgaW4gc3RyZWFtXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgVGhlIG9wZXJhdGlvbiBjYW5ub3QgYmUgY29tcGxldGVkIGluIHRpbWVvdXQuYCkpLCBSRVFVRVNUX1RJTUVPVVQpO1xuICAgICAgICBzdHJlYW0ub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocG9zID49IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY2h1bmsgPSBzdHJlYW0ucmVhZCgpO1xuICAgICAgICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIb3cgbXVjaCBkYXRhIG5lZWRlZCBpbiB0aGlzIGNodW5rXG4gICAgICAgICAgICBjb25zdCBjaHVua0xlbmd0aCA9IHBvcyArIGNodW5rLmxlbmd0aCA+IGNvdW50ID8gY291bnQgLSBwb3MgOiBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICBidWZmZXIuZmlsbChjaHVuay5zbGljZSgwLCBjaHVua0xlbmd0aCksIG9mZnNldCArIHBvcywgb2Zmc2V0ICsgcG9zICsgY2h1bmtMZW5ndGgpO1xuICAgICAgICAgICAgcG9zICs9IGNodW5rTGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIGlmIChwb3MgPCBjb3VudCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0cmVhbSBkcmFpbnMgYmVmb3JlIGdldHRpbmcgZW5vdWdoIGRhdGEgbmVlZGVkLiBEYXRhIHJlYWQ6ICR7cG9zfSwgZGF0YSBuZWVkOiAke2NvdW50fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHJlamVjdChtc2cpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8qKlxuICogUmVhZHMgYSByZWFkYWJsZSBzdHJlYW0gaW50byBidWZmZXIgZW50aXJlbHkuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAtIEEgTm9kZS5qcyBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSBidWZmZXIgLSBCdWZmZXIgdG8gYmUgZmlsbGVkLCBsZW5ndGggbXVzdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb2Zmc2V0XG4gKiBAcGFyYW0gZW5jb2RpbmcgLSBFbmNvZGluZyBvZiB0aGUgUmVhZGFibGUgc3RyZWFtXG4gKiBAcmV0dXJucyB3aXRoIHRoZSBjb3VudCBvZiBieXRlcyByZWFkLlxuICogQHRocm93cyBgUmFuZ2VFcnJvcmAgSWYgYnVmZmVyIHNpemUgaXMgbm90IGJpZyBlbm91Z2guXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyMihzdHJlYW0sIGJ1ZmZlciwgZW5jb2RpbmcpIHtcbiAgICBsZXQgcG9zID0gMDsgLy8gUG9zaXRpb24gaW4gc3RyZWFtXG4gICAgY29uc3QgYnVmZmVyU2l6ZSA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc3RyZWFtLm9uKFwicmVhZGFibGVcIiwgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNodW5rID0gc3RyZWFtLnJlYWQoKTtcbiAgICAgICAgICAgIGlmICghY2h1bmspIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvcyArIGNodW5rLmxlbmd0aCA+IGJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBTdHJlYW0gZXhjZWVkcyBidWZmZXIgc2l6ZS4gQnVmZmVyIHNpemU6ICR7YnVmZmVyU2l6ZX1gKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyLmZpbGwoY2h1bmssIHBvcywgcG9zICsgY2h1bmsubGVuZ3RoKTtcbiAgICAgICAgICAgIHBvcyArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShwb3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIFdyaXRlcyB0aGUgY29udGVudCBvZiBhIHJlYWRzdHJlYW0gdG8gYSBsb2NhbCBmaWxlLiBSZXR1cm5zIGEgUHJvbWlzZSB3aGljaCBpcyBjb21wbGV0ZWQgYWZ0ZXIgdGhlIGZpbGUgaGFuZGxlIGlzIGNsb3NlZC5cbiAqXG4gKiBAcGFyYW0gcnMgLSBUaGUgcmVhZCBzdHJlYW0uXG4gKiBAcGFyYW0gZmlsZSAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZFN0cmVhbVRvTG9jYWxGaWxlKHJzLCBmaWxlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgd3MgPSBmc19fbmFtZXNwYWNlLmNyZWF0ZVdyaXRlU3RyZWFtKGZpbGUpO1xuICAgICAgICBycy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICAgICAgd3Mub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdzLm9uKFwiY2xvc2VcIiwgcmVzb2x2ZSk7XG4gICAgICAgIHJzLnBpcGUod3MpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogUHJvbWlzaWZpZWQgdmVyc2lvbiBvZiBmcy5zdGF0KCkuXG4gKi9cbmNvbnN0IGZzU3RhdCA9IHV0aWxfX25hbWVzcGFjZS5wcm9taXNpZnkoZnNfX25hbWVzcGFjZS5zdGF0KTtcbmNvbnN0IGZzQ3JlYXRlUmVhZFN0cmVhbSA9IGZzX19uYW1lc3BhY2UuY3JlYXRlUmVhZFN0cmVhbTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgQmxvYkNsaWVudCByZXByZXNlbnRzIGEgVVJMIHRvIGFuIEF6dXJlIFN0b3JhZ2UgYmxvYjsgdGhlIGJsb2IgbWF5IGJlIGEgYmxvY2sgYmxvYixcbiAqIGFwcGVuZCBibG9iLCBvciBwYWdlIGJsb2IuXG4gKi9cbmNsYXNzIEJsb2JDbGllbnQgZXh0ZW5kcyBTdG9yYWdlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYmxvYi5cbiAgICAgKi9cbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBzdG9yYWdlIGNvbnRhaW5lciB0aGUgYmxvYiBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAgICovXG4gICAgZ2V0IGNvbnRhaW5lck5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJOYW1lO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBibG9iTmFtZU9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgaWYgKGJsb2JOYW1lT3JPcHRpb25zICYmIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgYmxvYk5hbWVPck9wdGlvbnMgJiZcbiAgICAgICAgICAgIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKGNvbm5lY3Rpb25TdHJpbmc6IHN0cmluZywgY29udGFpbmVyTmFtZTogc3RyaW5nLCBibG9iTmFtZTogc3RyaW5nLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2JOYW1lID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHModXJsT3JDb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm94eU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJveHlPcHRpb25zID0gY29yZVJlc3RQaXBlbGluZS5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyhleHRyYWN0ZWRDcmVkcy5wcm94eVVyaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShzaGFyZWRLZXlDcmVkZW50aWFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gTm9kZS5qcyBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIlNBU0Nvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHVybCA9XG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzO1xuICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0aW5nIG5vbi1lbXB0eSBzdHJpbmdzIGZvciBjb250YWluZXJOYW1lIGFuZCBibG9iTmFtZSBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICAoeyBibG9iTmFtZTogdGhpcy5fbmFtZSwgY29udGFpbmVyTmFtZTogdGhpcy5fY29udGFpbmVyTmFtZSB9ID1cbiAgICAgICAgICAgIHRoaXMuZ2V0QmxvYkFuZENvbnRhaW5lck5hbWVzRnJvbVVybCgpKTtcbiAgICAgICAgdGhpcy5ibG9iQ29udGV4dCA9IHRoaXMuc3RvcmFnZUNsaWVudENvbnRleHQuYmxvYjtcbiAgICAgICAgdGhpcy5fc25hcHNob3QgPSBnZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9UKTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbklkID0gZ2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5WRVJTSU9OSUQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcFxuICAgICAqL1xuICAgIHdpdGhTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5TTkFQU0hPVCwgc25hcHNob3QubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogc25hcHNob3QpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBCbG9iQ2xpZW50IG9iamVjdCBwb2ludGluZyB0byBhIHZlcnNpb24gb2YgdGhpcyBibG9iLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgdmVyc2lvbklkIGFuZCByZXR1cm4gYSBDbGllbnQgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2ZXJzaW9uSWQgLSBUaGUgdmVyc2lvbklkLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IHBvaW50aW5nIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgYmxvYi5cbiAgICAgKi9cbiAgICB3aXRoVmVyc2lvbih2ZXJzaW9uSWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iQ2xpZW50KHNldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuVkVSU0lPTklELCB2ZXJzaW9uSWQubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdmVyc2lvbklkKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBBcHBlbmRCbG9iQ2xpZW50IG9iamVjdC5cbiAgICAgKlxuICAgICAqL1xuICAgIGdldEFwcGVuZEJsb2JDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXBwZW5kQmxvYkNsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBCbG9ja0Jsb2JDbGllbnQgb2JqZWN0LlxuICAgICAqXG4gICAgICovXG4gICAgZ2V0QmxvY2tCbG9iQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrQmxvYkNsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBQYWdlQmxvYkNsaWVudCBvYmplY3QuXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRQYWdlQmxvYkNsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQmxvYkNsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIG9yIGRvd25sb2FkcyBhIGJsb2IgZnJvbSB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgaXRzIG1ldGFkYXRhIGFuZCBwcm9wZXJ0aWVzLlxuICAgICAqIFlvdSBjYW4gYWxzbyBjYWxsIEdldCBCbG9iIHRvIHJlYWQgYSBzbmFwc2hvdC5cbiAgICAgKlxuICAgICAqICogSW4gTm9kZS5qcywgZGF0YSByZXR1cm5zIGluIGEgUmVhZGFibGUgc3RyZWFtIHJlYWRhYmxlU3RyZWFtQm9keVxuICAgICAqICogSW4gYnJvd3NlcnMsIGRhdGEgcmV0dXJucyBpbiBhIHByb21pc2UgYmxvYkJvZHlcbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gRnJvbSB3aGljaCBwb3NpdGlvbiBvZiB0aGUgYmxvYiB0byBkb3dubG9hZCwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDBcbiAgICAgKiBAcGFyYW0gY291bnQgLSBIb3cgbXVjaCBkYXRhIHRvIGJlIGRvd25sb2FkZWQsIGdyZWF0ZXIgdGhhbiAwLiBXaWxsIGRvd25sb2FkIHRvIHRoZSBlbmQgd2hlbiB1bmRlZmluZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBEb3dubG9hZCBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2UgKE5vZGUuanMpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBEb3dubG9hZCBhbmQgY29udmVydCBhIGJsb2IgdG8gYSBzdHJpbmdcbiAgICAgKiBjb25zdCBkb3dubG9hZEJsb2NrQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvYkNsaWVudC5kb3dubG9hZCgpO1xuICAgICAqIGNvbnN0IGRvd25sb2FkZWQgPSBhd2FpdCBzdHJlYW1Ub0J1ZmZlcihkb3dubG9hZEJsb2NrQmxvYlJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSk7XG4gICAgICogY29uc29sZS5sb2coXCJEb3dubG9hZGVkIGJsb2IgY29udGVudDpcIiwgZG93bmxvYWRlZC50b1N0cmluZygpKTtcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgICogcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgKiBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgKiByZWFkYWJsZVN0cmVhbS5vbihcImRhdGFcIiwgKGRhdGEpID0+IHtcbiAgICAgKiBjaHVua3MucHVzaChkYXRhIGluc3RhbmNlb2YgQnVmZmVyID8gZGF0YSA6IEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgKiB9KTtcbiAgICAgKiByZWFkYWJsZVN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICogcmVzb2x2ZShCdWZmZXIuY29uY2F0KGNodW5rcykpO1xuICAgICAqIH0pO1xuICAgICAqIHJlYWRhYmxlU3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgKiB9KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlIChicm93c2VyKTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gRG93bmxvYWQgYW5kIGNvbnZlcnQgYSBibG9iIHRvIGEgc3RyaW5nXG4gICAgICogY29uc3QgZG93bmxvYWRCbG9ja0Jsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2JDbGllbnQuZG93bmxvYWQoKTtcbiAgICAgKiBjb25zdCBkb3dubG9hZGVkID0gYXdhaXQgYmxvYlRvU3RyaW5nKGF3YWl0IGRvd25sb2FkQmxvY2tCbG9iUmVzcG9uc2UuYmxvYkJvZHkpO1xuICAgICAqIGNvbnNvbGUubG9nKFxuICAgICAqICAgXCJEb3dubG9hZGVkIGJsb2IgY29udGVudFwiLFxuICAgICAqICAgZG93bmxvYWRlZFxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBibG9iVG9TdHJpbmcoYmxvYjogQmxvYik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICogICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgKiAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgKiAgICAgZmlsZVJlYWRlci5vbmxvYWRlbmQgPSAoZXY6IGFueSkgPT4ge1xuICAgICAqICAgICAgIHJlc29sdmUoZXYudGFyZ2V0IS5yZXN1bHQpO1xuICAgICAqICAgICB9O1xuICAgICAqICAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICogICAgIGZpbGVSZWFkZXIucmVhZEFzVGV4dChibG9iKTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBkb3dubG9hZChvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kb3dubG9hZFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZG93bmxvYWQoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGNvcmVVdGlsLmlzTm9kZSA/IHVuZGVmaW5lZCA6IG9wdGlvbnMub25Qcm9ncmVzcywgLy8gZm9yIE5vZGUuanMsIHByb2dyZXNzIGlzIHJlcG9ydGVkIGJ5IFJldHJpYWJsZVJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByYW5nZTogb2Zmc2V0ID09PSAwICYmICFjb3VudCA/IHVuZGVmaW5lZCA6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHJhbmdlR2V0Q29udGVudE1ENTogb3B0aW9ucy5yYW5nZUdldENvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50Q1JDNjQ6IG9wdGlvbnMucmFuZ2VHZXRDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgc25hcHNob3Q6IG9wdGlvbnMuc25hcHNob3QsXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlLCBvYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQ6IHJlcy5vYmplY3RSZXBsaWNhdGlvblBvbGljeUlkLCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM6IHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQocmVzLm9iamVjdFJlcGxpY2F0aW9uUnVsZXMpIH0pO1xuICAgICAgICAgICAgLy8gUmV0dXJuIGJyb3dzZXIgcmVzcG9uc2UgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIGlmICghY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRSZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXZSBzdXBwb3J0IHJldHJ5aW5nIHdoZW4gZG93bmxvYWQgc3RyZWFtIHVuZXhwZWN0ZWQgZW5kcyBpbiBOb2RlLmpzIHJ1bnRpbWVcbiAgICAgICAgICAgIC8vIEZvbGxvd2luZyBjb2RlIHNob3VsZG4ndCBiZSBidW5kbGVkIGludG8gYnJvd3NlciBidWlsZCwgaG93ZXZlciBzb21lXG4gICAgICAgICAgICAvLyBidW5kbGVycyBtYXkgdHJ5IHRvIGJ1bmRsZSBmb2xsb3dpbmcgY29kZSBhbmQgXCJGaWxlUmVhZFJlc3BvbnNlLnRzXCIuXG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIFwiRmlsZURvd25sb2FkUmVzcG9uc2UuYnJvd3Nlci50c1wiIHdpbGwgYmUgdXNlZCBhcyBhIHNoaW0gb2YgXCJGaWxlRG93bmxvYWRSZXNwb25zZS50c1wiXG4gICAgICAgICAgICAvLyBUaGUgY29uZmlnIGlzIGluIHBhY2thZ2UuanNvbiBcImJyb3dzZXJcIiBmaWVsZFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWZhdWx0IHZhbHVlIG9yIG1ha2UgaXQgYSByZXF1aXJlZCBwYXJhbWV0ZXI/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzID0gREVGQVVMVF9NQVhfRE9XTkxPQURfUkVUUllfUkVRVUVTVFM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLmNvbnRlbnRMZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBGaWxlIGRvd25sb2FkIHJlc3BvbnNlIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBjb250ZW50IGxlbmd0aCBoZWFkZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzLmV0YWcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmlsZSBkb3dubG9hZCByZXNwb25zZSBkb2Vzbid0IGNvbnRhaW4gdmFsaWQgZXRhZyBoZWFkZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYkRvd25sb2FkUmVzcG9uc2Uod3JhcHBlZFJlcywgYXN5bmMgKHN0YXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWREb3dubG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmTWF0Y2g6IG9wdGlvbnMuY29uZGl0aW9ucy5pZk1hdGNoIHx8IHJlcy5ldGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWZNb2RpZmllZFNpbmNlOiBvcHRpb25zLmNvbmRpdGlvbnMuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWZOb25lTWF0Y2g6IG9wdGlvbnMuY29uZGl0aW9ucy5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmVW5tb2RpZmllZFNpbmNlOiBvcHRpb25zLmNvbmRpdGlvbnMuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBvZmZzZXQgKyByZXMuY29udGVudExlbmd0aCAtIHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlR2V0Q29udGVudE1ENTogb3B0aW9ucy5yYW5nZUdldENvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlR2V0Q29udGVudENSQzY0OiBvcHRpb25zLnJhbmdlR2V0Q29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdDogb3B0aW9ucy5zbmFwc2hvdCxcbiAgICAgICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gRGVidWcgcHVycG9zZSBvbmx5XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgLy8gICBgUmVhZCBmcm9tIGludGVybmFsIHN0cmVhbSwgcmFuZ2U6ICR7XG4gICAgICAgICAgICAgICAgLy8gICAgIHVwZGF0ZWRPcHRpb25zLnJhbmdlXG4gICAgICAgICAgICAgICAgLy8gICB9LCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KHVwZGF0ZWRPcHRpb25zKX1gXG4gICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZG93bmxvYWQoT2JqZWN0LmFzc2lnbih7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0sIHVwZGF0ZWREb3dubG9hZE9wdGlvbnMpKSkucmVhZGFibGVTdHJlYW1Cb2R5O1xuICAgICAgICAgICAgfSwgb2Zmc2V0LCByZXMuY29udGVudExlbmd0aCwge1xuICAgICAgICAgICAgICAgIG1heFJldHJ5UmVxdWVzdHM6IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyxcbiAgICAgICAgICAgICAgICBvblByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgQXp1cmUgYmxvYiByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCBleGlzdHM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGggY2FyZSBzaW5jZSBhbiBleGlzdGluZyBibG9iIG1pZ2h0IGJlIGRlbGV0ZWQgYnkgb3RoZXIgY2xpZW50cyBvclxuICAgICAqIGFwcGxpY2F0aW9ucy4gVmljZSB2ZXJzYSBuZXcgYmxvYnMgbWlnaHQgYmUgYWRkZWQgYnkgb3RoZXIgY2xpZW50cyBvciBhcHBsaWNhdGlvbnMgYWZ0ZXIgdGhpc1xuICAgICAqIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9ucyB0byBFeGlzdHMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyh7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5OiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gY2hlY2tpbmcgYmxvYiBleGlzdGVuY2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlLnN0YXR1c0NvZGUgPT09IDQwOSAmJlxuICAgICAgICAgICAgICAgICAgICAoZS5kZXRhaWxzLmVycm9yQ29kZSA9PT0gQmxvYlVzZXNDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25Nc2cgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGV0YWlscy5lcnJvckNvZGUgPT09IEJsb2JEb2VzTm90VXNlQ3VzdG9tZXJTcGVjaWZpZWRFbmNyeXB0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBjaGVja2luZyBibG9iIGV4aXN0ZW5jZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSwgc3RhbmRhcmQgSFRUUCBwcm9wZXJ0aWVzLCBhbmQgc3lzdGVtIHByb3BlcnRpZXNcbiAgICAgKiBmb3IgdGhlIGJsb2IuIEl0IGRvZXMgbm90IHJldHVybiB0aGUgY29udGVudCBvZiB0aGUgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvYi1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBXQVJOSU5HOiBUaGUgYG1ldGFkYXRhYCBvYmplY3QgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlIHdpbGwgaGF2ZSBpdHMga2V5cyBpbiBsb3dlcmNhc2UsIGV2ZW4gaWZcbiAgICAgKiB0aGV5IG9yaWdpbmFsbHkgY29udGFpbmVkIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgbWV0YWRhdGEga2V5cyByZXR1cm5lZCBieVxuICAgICAqIHRoZSBtZXRob2RzIG9mIHtAbGluayBDb250YWluZXJDbGllbnR9IHRoYXQgbGlzdCBibG9icyB1c2luZyB0aGUgYGluY2x1ZGVNZXRhZGF0YWAgb3B0aW9uLCB3aGljaFxuICAgICAqIHdpbGwgcmV0YWluIHRoZWlyIG9yaWdpbmFsIGNhc2luZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UHJvcGVydGllcyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1nZXRQcm9wZXJ0aWVzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlLCBvYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQ6IHJlcy5vYmplY3RSZXBsaWNhdGlvblBvbGljeUlkLCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM6IHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQocmVzLm9iamVjdFJlcGxpY2F0aW9uUnVsZXMpIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFya3MgdGhlIHNwZWNpZmllZCBibG9iIG9yIHNuYXBzaG90IGZvciBkZWxldGlvbi4gVGhlIGJsb2IgaXMgbGF0ZXIgZGVsZXRlZFxuICAgICAqIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uIE5vdGUgdGhhdCBpbiBvcmRlciB0byBkZWxldGUgYSBibG9iLCB5b3UgbXVzdCBkZWxldGVcbiAgICAgKiBhbGwgb2YgaXRzIHNuYXBzaG90cy4gWW91IGNhbiBkZWxldGUgYm90aCBhdCB0aGUgc2FtZSB0aW1lIHdpdGggdGhlIERlbGV0ZVxuICAgICAqIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZGVsZXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZGVsZXRlKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBkZWxldGVTbmFwc2hvdHM6IG9wdGlvbnMuZGVsZXRlU25hcHNob3RzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIGJsb2Igb3Igc25hcHNob3QgZm9yIGRlbGV0aW9uIGlmIGl0IGV4aXN0cy4gVGhlIGJsb2IgaXMgbGF0ZXIgZGVsZXRlZFxuICAgICAqIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uIE5vdGUgdGhhdCBpbiBvcmRlciB0byBkZWxldGUgYSBibG9iLCB5b3UgbXVzdCBkZWxldGVcbiAgICAgKiBhbGwgb2YgaXRzIHNuYXBzaG90cy4gWW91IGNhbiBkZWxldGUgYm90aCBhdCB0aGUgc2FtZSB0aW1lIHdpdGggdGhlIERlbGV0ZVxuICAgICAqIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUlmRXhpc3RzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZGVsZXRlSWZFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmRlbGV0ZSh1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IHRydWUgfSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gZS5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3JDb2RlKSA9PT0gXCJCbG9iTm90Rm91bmRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzdG9yZXMgdGhlIGNvbnRlbnRzIGFuZCBtZXRhZGF0YSBvZiBzb2Z0IGRlbGV0ZWQgYmxvYiBhbmQgYW55IGFzc29jaWF0ZWRcbiAgICAgKiBzb2Z0IGRlbGV0ZWQgc25hcHNob3RzLiBVbmRlbGV0ZSBCbG9iIGlzIHN1cHBvcnRlZCBvbmx5IG9uIHZlcnNpb24gMjAxNy0wNy0yOVxuICAgICAqIG9yIGxhdGVyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3VuZGVsZXRlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIFVuZGVsZXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1bmRlbGV0ZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXVuZGVsZXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQudW5kZWxldGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgc3lzdGVtIHByb3BlcnRpZXMgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBJZiBubyB2YWx1ZSBwcm92aWRlZCwgb3Igbm8gdmFsdWUgcHJvdmlkZWQgZm9yIHRoZSBzcGVjaWZpZWQgYmxvYiBIVFRQIGhlYWRlcnMsXG4gICAgICogdGhlc2UgYmxvYiBIVFRQIGhlYWRlcnMgd2l0aG91dCBhIHZhbHVlIHdpbGwgYmUgY2xlYXJlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9zZXQtYmxvYi1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYkhUVFBIZWFkZXJzIC0gSWYgbm8gdmFsdWUgcHJvdmlkZWQsIG9yIG5vIHZhbHVlIHByb3ZpZGVkIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNwZWNpZmllZCBibG9iIEhUVFAgaGVhZGVycywgdGhlc2UgYmxvYiBIVFRQXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzIHdpdGhvdXQgYSB2YWx1ZSB3aWxsIGJlIGNsZWFyZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGNvbW1vbiBoZWFkZXIgdG8gc2V0IGlzIGBibG9iQ29udGVudFR5cGVgXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGluZyB0aGUgYnJvd3NlciB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHlcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGZpbGUgdHlwZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBTZXQgSFRUUCBIZWFkZXJzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRIVFRQSGVhZGVycyhibG9iSFRUUEhlYWRlcnMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldEhUVFBIZWFkZXJzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0SHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JIdHRwSGVhZGVyczogYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICAvLyBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIC8vIENQSyBpcyBub3QgaW5jbHVkZWQgaW4gU3dhZ2dlciwgc2hvdWxkIGNoYW5nZSB0aGlzIGJhY2sgd2hlbiB0aGlzIGlzc3VlIGlzIGZpeGVkIGluIFN3YWdnZXIuXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB1c2VyLWRlZmluZWQgbWV0YWRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgYmxvYiBhcyBvbmUgb3IgbW9yZSBuYW1lLXZhbHVlIHBhaXJzLlxuICAgICAqXG4gICAgICogSWYgbm8gb3B0aW9uIHByb3ZpZGVkLCBvciBubyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBwYXJhbWV0ZXIsIHRoZSBibG9iXG4gICAgICogbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWV0YWRhdGEgLSBSZXBsYWNlIGV4aXN0aW5nIG1ldGFkYXRhIHdpdGggdGhpcyB2YWx1ZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyB2YWx1ZSBwcm92aWRlZCB0aGUgZXhpc3RpbmcgbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBTZXQgTWV0YWRhdGEgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldE1ldGFkYXRhKG1ldGFkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRNZXRhZGF0YVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnNldE1ldGFkYXRhKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0YWdzIG9uIHRoZSB1bmRlcmx5aW5nIGJsb2IuXG4gICAgICogQSBibG9iIGNhbiBoYXZlIHVwIHRvIDEwIHRhZ3MuIFRhZyBrZXlzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjggY2hhcmFjdGVycy4gIFRhZyB2YWx1ZXMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NiBjaGFyYWN0ZXJzLlxuICAgICAqIFZhbGlkIHRhZyBrZXkgYW5kIHZhbHVlIGNoYXJhY3RlcnMgaW5jbHVkZSBsb3dlciBhbmQgdXBwZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMgKDAtOSksXG4gICAgICogc3BhY2UgKCcgJyksIHBsdXMgKCcrJyksIG1pbnVzICgnLScpLCBwZXJpb2QgKCcuJyksIGZvd2FyZCBzbGFzaCAoJy8nKSwgY29sb24gKCc6JyksIGVxdWFscyAoJz0nKSwgYW5kIHVuZGVyc2NvcmUgKCdfJykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFncyAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHNldFRhZ3ModGFncywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRUYWdzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0VGFncyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB0YWdzOiB0b0Jsb2JUYWdzKHRhZ3MpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRUYWdzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZ2V0VGFnc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5nZXRUYWdzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlc3BvbnNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIHRhZ3M6IHRvVGFncyh7IGJsb2JUYWdTZXQ6IHJlc3BvbnNlLmJsb2JUYWdTZXQgfSkgfHwge30gfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEge0BsaW5rIEJsb2JMZWFzZUNsaWVudH0gdGhhdCBtYW5hZ2VzIGxlYXNlcyBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wb3NlTGVhc2VJZCAtIEluaXRpYWwgcHJvcG9zZWQgbGVhc2UgSWQuXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkxlYXNlQ2xpZW50IG9iamVjdCBmb3IgbWFuYWdpbmcgbGVhc2VzIG9uIHRoZSBibG9iLlxuICAgICAqL1xuICAgIGdldEJsb2JMZWFzZUNsaWVudChwcm9wb3NlTGVhc2VJZCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JMZWFzZUNsaWVudCh0aGlzLCBwcm9wb3NlTGVhc2VJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSByZWFkLW9ubHkgc25hcHNob3Qgb2YgYSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NuYXBzaG90LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byB0aGUgQmxvYiBDcmVhdGUgU25hcHNob3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZVNuYXBzaG90KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWNyZWF0ZVNuYXBzaG90XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuY3JlYXRlU25hcHNob3Qoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXNseSBjb3BpZXMgYSBibG9iIHRvIGEgZGVzdGluYXRpb24gd2l0aGluIHRoZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGxvbmcgcnVubmluZyBvcGVyYXRpb24gcG9sbGVyIHRoYXQgYWxsb3dzIHlvdSB0byB3YWl0XG4gICAgICogaW5kZWZpbml0ZWx5IHVudGlsIHRoZSBjb3B5IGlzIGNvbXBsZXRlZC5cbiAgICAgKiBZb3UgY2FuIGFsc28gY2FuY2VsIGEgY29weSBiZWZvcmUgaXQgaXMgY29tcGxldGVkIGJ5IGNhbGxpbmcgYGNhbmNlbE9wZXJhdGlvbmAgb24gdGhlIHBvbGxlci5cbiAgICAgKiBOb3RlIHRoYXQgdGhlIG9uUHJvZ3Jlc3MgY2FsbGJhY2sgd2lsbCBub3QgYmUgaW52b2tlZCBpZiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcyBpbiB0aGUgZmlyc3RcbiAgICAgKiByZXF1ZXN0LCBhbmQgYXR0ZW1wdGluZyB0byBjYW5jZWwgYSBjb21wbGV0ZWQgY29weSB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciBiZWluZyB0aHJvd24uXG4gICAgICpcbiAgICAgKiBJbiB2ZXJzaW9uIDIwMTItMDItMTIgYW5kIGxhdGVyLCB0aGUgc291cmNlIGZvciBhIENvcHkgQmxvYiBvcGVyYXRpb24gY2FuIGJlXG4gICAgICogYSBjb21taXR0ZWQgYmxvYiBpbiBhbnkgQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEJlZ2lubmluZyB3aXRoIHZlcnNpb24gMjAxNS0wMi0yMSwgdGhlIHNvdXJjZSBmb3IgYSBDb3B5IEJsb2Igb3BlcmF0aW9uIGNhbiBiZVxuICAgICAqIGFuIEF6dXJlIGZpbGUgaW4gYW55IEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBPbmx5IHN0b3JhZ2UgYWNjb3VudHMgY3JlYXRlZCBvbiBvciBhZnRlciBKdW5lIDd0aCwgMjAxMiBhbGxvdyB0aGUgQ29weSBCbG9iXG4gICAgICogb3BlcmF0aW9uIHRvIGNvcHkgZnJvbSBhbm90aGVyIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb3B5LWJsb2JcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYXV0b21hdGljIHBvbGxpbmc6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvcHlQb2xsZXIgPSBhd2FpdCBibG9iQ2xpZW50LmJlZ2luQ29weUZyb21VUkwoJ3VybCcpO1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvcHlQb2xsZXIucG9sbFVudGlsRG9uZSgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBtYW51YWwgcG9sbGluZzpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJyk7XG4gICAgICogd2hpbGUgKCFwb2xsZXIuaXNEb25lKCkpIHtcbiAgICAgKiAgICBhd2FpdCBwb2xsZXIucG9sbCgpO1xuICAgICAqIH1cbiAgICAgKiBjb25zdCByZXN1bHQgPSBjb3B5UG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwcm9ncmVzcyB1cGRhdGVzOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnLCB7XG4gICAgICogICBvblByb2dyZXNzKHN0YXRlKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBQcm9ncmVzczogJHtzdGF0ZS5jb3B5UHJvZ3Jlc3N9YCk7XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY29weVBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGEgY2hhbmdpbmcgcG9sbGluZyBpbnRlcnZhbCAoZGVmYXVsdCAxNSBzZWNvbmRzKTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJywge1xuICAgICAqICAgaW50ZXJ2YWxJbk1zOiAxMDAwIC8vIHBvbGwgYmxvYiBldmVyeSAxIHNlY29uZCBmb3IgY29weSBwcm9ncmVzc1xuICAgICAqIH0pO1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvcHlQb2xsZXIucG9sbFVudGlsRG9uZSgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBjb3B5IGNhbmNlbGxhdGlvbjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJyk7XG4gICAgICogLy8gY2FuY2VsIG9wZXJhdGlvbiBhZnRlciBzdGFydGluZyBpdC5cbiAgICAgKiB0cnkge1xuICAgICAqICAgYXdhaXQgY29weVBvbGxlci5jYW5jZWxPcGVyYXRpb24oKTtcbiAgICAgKiAgIC8vIGNhbGxzIHRvIGdldCB0aGUgcmVzdWx0IG5vdyB0aHJvdyBQb2xsZXJDYW5jZWxsZWRFcnJvclxuICAgICAqICAgYXdhaXQgY29weVBvbGxlci5nZXRSZXN1bHQoKTtcbiAgICAgKiB9IGNhdGNoIChlcnIpIHtcbiAgICAgKiAgIGlmIChlcnIubmFtZSA9PT0gJ1BvbGxlckNhbmNlbGxlZEVycm9yJykge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnVGhlIGNvcHkgd2FzIGNhbmNlbGxlZC4nKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSAtIHVybCB0byB0aGUgc291cmNlIEF6dXJlIEJsb2IvRmlsZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgU3RhcnQgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYmVnaW5Db3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0ge1xuICAgICAgICAgICAgYWJvcnRDb3B5RnJvbVVSTDogKC4uLmFyZ3MpID0+IHRoaXMuYWJvcnRDb3B5RnJvbVVSTCguLi5hcmdzKSxcbiAgICAgICAgICAgIGdldFByb3BlcnRpZXM6ICguLi5hcmdzKSA9PiB0aGlzLmdldFByb3BlcnRpZXMoLi4uYXJncyksXG4gICAgICAgICAgICBzdGFydENvcHlGcm9tVVJMOiAoLi4uYXJncykgPT4gdGhpcy5zdGFydENvcHlGcm9tVVJMKC4uLmFyZ3MpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwb2xsZXIgPSBuZXcgQmxvYkJlZ2luQ29weUZyb21VcmxQb2xsZXIoe1xuICAgICAgICAgICAgYmxvYkNsaWVudDogY2xpZW50LFxuICAgICAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgICAgIGludGVydmFsSW5Nczogb3B0aW9ucy5pbnRlcnZhbEluTXMsXG4gICAgICAgICAgICBvblByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZXN1bWVGcm9tOiBvcHRpb25zLnJlc3VtZUZyb20sXG4gICAgICAgICAgICBzdGFydENvcHlGcm9tVVJMT3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRyaWdnZXIgdGhlIHN0YXJ0Q29weUZyb21VUkwgY2FsbCBieSBjYWxsaW5nIHBvbGwuXG4gICAgICAgIC8vIEFueSBlcnJvcnMgZnJvbSB0aGlzIG1ldGhvZCBzaG91bGQgYmUgc3VyZmFjZWQgdG8gdGhlIHVzZXIuXG4gICAgICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG4gICAgICAgIHJldHVybiBwb2xsZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFib3J0cyBhIHBlbmRpbmcgYXN5bmNocm9ub3VzIENvcHkgQmxvYiBvcGVyYXRpb24sIGFuZCBsZWF2ZXMgYSBkZXN0aW5hdGlvbiBibG9iIHdpdGggemVyb1xuICAgICAqIGxlbmd0aCBhbmQgZnVsbCBtZXRhZGF0YS4gVmVyc2lvbiAyMDEyLTAyLTEyIGFuZCBuZXdlci5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hYm9ydC1jb3B5LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5SWQgLSBJZCBvZiB0aGUgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIHRoZSBCbG9iIEFib3J0IENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGFib3J0Q29weUZyb21VUkwoY29weUlkLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWFib3J0Q29weUZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5hYm9ydENvcHlGcm9tVVJMKGNvcHlJZCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBzeW5jaHJvbm91cyBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbiBjb3BpZXMgYSBibG9iIG9yIGFuIGludGVybmV0IHJlc291cmNlIHRvIGEgbmV3IGJsb2IuIEl0IHdpbGwgbm90XG4gICAgICogcmV0dXJuIGEgcmVzcG9uc2UgdW50aWwgdGhlIGNvcHkgaXMgY29tcGxldGUuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29weS1ibG9iLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSAtIFRoZSBzb3VyY2UgVVJMIHRvIGNvcHkgZnJvbSwgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUoU0FTKSBtYXliZSBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHN5bmNDb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zeW5jQ29weUZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5jb3B5RnJvbVVSTChjb3B5U291cmNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiAoX2IgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2U6IChfYyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IChfZCA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogKF9lID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50TUQ1OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb246IGh0dHBBdXRob3JpemF0aW9uVG9TdHJpbmcob3B0aW9ucy5zb3VyY2VBdXRob3JpemF0aW9uKSxcbiAgICAgICAgICAgICAgICB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9mID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfZyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2cucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZVRhZ3M6IG9wdGlvbnMuY29weVNvdXJjZVRhZ3MsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGllciBvbiBhIGJsb2IuIFRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZCBvbiBhIHBhZ2UgYmxvYiBpbiBhIHByZW1pdW1cbiAgICAgKiBzdG9yYWdlIGFjY291bnQgYW5kIG9uIGEgYmxvY2sgYmxvYiBpbiBhIGJsb2Igc3RvcmFnZSBhY2NvdW50IChsb2NhbGx5IHJlZHVuZGFudFxuICAgICAqIHN0b3JhZ2Ugb25seSkuIEEgcHJlbWl1bSBwYWdlIGJsb2IncyB0aWVyIGRldGVybWluZXMgdGhlIGFsbG93ZWQgc2l6ZSwgSU9QUyxcbiAgICAgKiBhbmQgYmFuZHdpZHRoIG9mIHRoZSBibG9iLiBBIGJsb2NrIGJsb2IncyB0aWVyIGRldGVybWluZXMgSG90L0Nvb2wvQXJjaGl2ZVxuICAgICAqIHN0b3JhZ2UgdHlwZS4gVGhpcyBvcGVyYXRpb24gZG9lcyBub3QgdXBkYXRlIHRoZSBibG9iJ3MgRVRhZy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9zZXQtYmxvYi10aWVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGllciAtIFRoZSB0aWVyIHRvIGJlIHNldCBvbiB0aGUgYmxvYi4gVmFsaWQgdmFsdWVzIGFyZSBIb3QsIENvb2wsIG9yIEFyY2hpdmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIHRoZSBCbG9iIFNldCBUaWVyIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRBY2Nlc3NUaWVyKHRpZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc2V0QWNjZXNzVGllclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnNldFRpZXIodG9BY2Nlc3NUaWVyKHRpZXIpLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5OiBvcHRpb25zLnJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGRvd25sb2FkVG9CdWZmZXIocGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00ID0ge30pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBwYXJhbTQ7XG4gICAgICAgIGlmIChwYXJhbTEgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHBhcmFtMTtcbiAgICAgICAgICAgIG9mZnNldCA9IHBhcmFtMiB8fCAwO1xuICAgICAgICAgICAgY291bnQgPSB0eXBlb2YgcGFyYW0zID09PSBcIm51bWJlclwiID8gcGFyYW0zIDogMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9mZnNldCA9IHR5cGVvZiBwYXJhbTEgPT09IFwibnVtYmVyXCIgPyBwYXJhbTEgOiAwO1xuICAgICAgICAgICAgY291bnQgPSB0eXBlb2YgcGFyYW0yID09PSBcIm51bWJlclwiID8gcGFyYW0yIDogMDtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBwYXJhbTMgfHwge307XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJsb2NrU2l6ZSA9IChfYSA9IG9wdGlvbnMuYmxvY2tTaXplKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICBpZiAoYmxvY2tTaXplIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJibG9ja1NpemUgb3B0aW9uIG11c3QgYmUgPj0gMFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2tTaXplID09PSAwKSB7XG4gICAgICAgICAgICBibG9ja1NpemUgPSBERUZBVUxUX0JMT0JfRE9XTkxPQURfQkxPQ0tfQllURVM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IG9wdGlvbiBtdXN0IGJlID49IDBcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50ICYmIGNvdW50IDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiY291bnQgb3B0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kb3dubG9hZFRvQnVmZmVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgLy8gQ3VzdG9tZXIgZG9lc24ndCBzcGVjaWZ5IGxlbmd0aCwgZ2V0IGl0XG4gICAgICAgICAgICBpZiAoIWNvdW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpO1xuICAgICAgICAgICAgICAgIGNvdW50ID0gcmVzcG9uc2UuY29udGVudExlbmd0aCAtIG9mZnNldDtcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBvZmZzZXQgJHtvZmZzZXR9IHNob3VsZG4ndCBiZSBsYXJnZXIgdGhhbiBibG9iIHNpemUgJHtyZXNwb25zZS5jb250ZW50TGVuZ3RofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFsbG9jYXRlIHRoZSBidWZmZXIgb2Ygc2l6ZSA9IGNvdW50IGlmIHRoZSBidWZmZXIgaXMgbm90IHByb3ZpZGVkXG4gICAgICAgICAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhjb3VudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIG9mIHNpemU6ICR7Y291bnR9KGluIGJ5dGVzKS4gUGxlYXNlIHRyeSBwYXNzaW5nIHlvdXIgb3duIGJ1ZmZlciB0byB0aGUgXCJkb3dubG9hZFRvQnVmZmVyXCIgbWV0aG9kIG9yIHRyeSB1c2luZyBvdGhlciBtZXRob2RzIGxpa2UgXCJkb3dubG9hZFwiIG9yIFwiZG93bmxvYWRUb0ZpbGVcIi5cXHQgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIGJ1ZmZlcidzIHNpemUgc2hvdWxkIGJlIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0IGNvdW50IG9mIGJ5dGVzOiAke2NvdW50fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHRyYW5zZmVyUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgY29uc3QgYmF0Y2ggPSBuZXcgQmF0Y2gob3B0aW9ucy5jb25jdXJyZW5jeSk7XG4gICAgICAgICAgICBmb3IgKGxldCBvZmYgPSBvZmZzZXQ7IG9mZiA8IG9mZnNldCArIGNvdW50OyBvZmYgPSBvZmYgKyBibG9ja1NpemUpIHtcbiAgICAgICAgICAgICAgICBiYXRjaC5hZGRPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeGNsdXNpdmUgY2h1bmsgZW5kIHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaHVua0VuZCA9IG9mZnNldCArIGNvdW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAob2ZmICsgYmxvY2tTaXplIDwgY2h1bmtFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rRW5kID0gb2ZmICsgYmxvY2tTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5kb3dubG9hZChvZmYsIGNodW5rRW5kIC0gb2ZmLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFJldHJ5UmVxdWVzdHM6IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0c1BlckJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJQcm92aWRlZEtleTogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gcmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5O1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzdHJlYW1Ub0J1ZmZlcihzdHJlYW0sIGJ1ZmZlciwgb2ZmIC0gb2Zmc2V0LCBjaHVua0VuZCAtIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcm9ncmVzcyBhZnRlciBibG9jayBpcyBkb3dubG9hZGVkLCBpbiBjYXNlIG9mIGJsb2NrIHRyeWluZ1xuICAgICAgICAgICAgICAgICAgICAvLyBDb3VsZCBwcm92aWRlIGZpbmVyIGdyYWluZWQgcHJvZ3Jlc3MgdXBkYXRpbmcgaW5zaWRlIEhUVFAgcmVxdWVzdHMsXG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaWYgY29udmVuaWVuY2UgbGF5ZXIgZG93bmxvYWQgdHJ5IGlzIGVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJQcm9ncmVzcyArPSBjaHVua0VuZCAtIG9mZjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHsgbG9hZGVkQnl0ZXM6IHRyYW5zZmVyUHJvZ3Jlc3MgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGJhdGNoLmRvKCk7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogRG93bmxvYWRzIGFuIEF6dXJlIEJsb2IgdG8gYSBsb2NhbCBmaWxlLlxuICAgICAqIEZhaWxzIGlmIHRoZSB0aGUgZ2l2ZW4gZmlsZSBwYXRoIGFscmVhZHkgZXhpdHMuXG4gICAgICogT2Zmc2V0IGFuZCBjb3VudCBhcmUgb3B0aW9uYWwsIHBhc3MgMCBhbmQgdW5kZWZpbmVkIHJlc3BlY3RpdmVseSB0byBkb3dubG9hZCB0aGUgZW50aXJlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZVBhdGggLVxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBGcm9tIHdoaWNoIHBvc2l0aW9uIG9mIHRoZSBibG9jayBibG9iIHRvIGRvd25sb2FkLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIEhvdyBtdWNoIGRhdGEgdG8gYmUgZG93bmxvYWRlZC4gV2lsbCBkb3dubG9hZCB0byB0aGUgZW5kIHdoZW4gcGFzc2luZyB1bmRlZmluZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIEJsb2IgZG93bmxvYWQgb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzcG9uc2UgZGF0YSBmb3IgYmxvYiBkb3dubG9hZCBvcGVyYXRpb24sXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHdpdGggcmVhZGFibGVTdHJlYW1Cb2R5IHNldCB0byB1bmRlZmluZWQgc2luY2UgaXRzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCBpcyBhbHJlYWR5IHJlYWQgYW5kIHdyaXR0ZW4gaW50byBhIGxvY2FsIGZpbGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgc3BlY2lmaWVkIHBhdGguXG4gICAgICovXG4gICAgYXN5bmMgZG93bmxvYWRUb0ZpbGUoZmlsZVBhdGgsIG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRvd25sb2FkVG9GaWxlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvd25sb2FkKG9mZnNldCwgY291bnQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZWFkU3RyZWFtVG9Mb2NhbEZpbGUocmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgc3RyZWFtIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlIHNvIHNldHRpbmcgaXQgdG8gdW5kZWZpbmVkLlxuICAgICAgICAgICAgcmVzcG9uc2UuYmxvYkRvd25sb2FkU3RyZWFtID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0QmxvYkFuZENvbnRhaW5lck5hbWVzRnJvbVVybCgpIHtcbiAgICAgICAgbGV0IGNvbnRhaW5lck5hbWU7XG4gICAgICAgIGxldCBibG9iTmFtZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vICBVUkwgbWF5IGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nXG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9ibG9iP3Nhc1N0cmluZ1wiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvYmxvYlwiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvYmxvYi9hLnR4dD9zYXNTdHJpbmdcIjtcbiAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL2Jsb2IvYS50eHRcIjtcbiAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLCBFbmRwb2ludHMgLSBgaHR0cDovLzEyNy4wLjAuMToxMDAwMC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYmBcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodGhpcy51cmwpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZFVybC5ob3N0LnNwbGl0KFwiLlwiKVsxXSA9PT0gXCJibG9iXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb250YWluZXJuYW1lL2Jsb2JcIi5cbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoQ29tcG9uZW50cyA9IHBhcnNlZFVybC5wYXRobmFtZS5tYXRjaChcIi8oW14vXSopKC8oLiopKT9cIik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhdGhDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGJsb2JOYW1lID0gcGF0aENvbXBvbmVudHNbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0lwRW5kcG9pbnRTdHlsZShwYXJzZWRVcmwpKSB7XG4gICAgICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMuLi4gRXhhbXBsZSAtIGh0dHA6Ly8xOTIuMC4wLjEwOjEwMDAxL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZS9ibG9iXG4gICAgICAgICAgICAgICAgLy8gU2luZ2xlIHdvcmQgZG9tYWluIHdpdGhvdXQgYSBbZG90XSBpbiB0aGUgZW5kcG9pbnQuLi4gRXhhbXBsZSAtIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhDb21wb25lbnRzID0gcGFyc2VkVXJsLnBhdGhuYW1lLm1hdGNoKFwiLyhbXi9dKikvKFteL10qKSgvKC4qKSk/XCIpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXRoQ29tcG9uZW50c1syXTtcbiAgICAgICAgICAgICAgICBibG9iTmFtZSA9IHBhdGhDb21wb25lbnRzWzRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gXCJodHRwczovL2N1c3RvbWRvbWFpbi5jb20vY29udGFpbmVybmFtZS9ibG9iXCIuXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvY29udGFpbmVybmFtZS9ibG9iXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aENvbXBvbmVudHMgPSBwYXJzZWRVcmwucGF0aG5hbWUubWF0Y2goXCIvKFteL10qKSgvKC4qKSk/XCIpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXRoQ29tcG9uZW50c1sxXTtcbiAgICAgICAgICAgICAgICBibG9iTmFtZSA9IHBhdGhDb21wb25lbnRzWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZGVjb2RlIHRoZSBlbmNvZGVkIGJsb2JOYW1lLCBjb250YWluZXJOYW1lIC0gdG8gZ2V0IGFsbCB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGVtXG4gICAgICAgICAgICBjb250YWluZXJOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgYmxvYk5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpO1xuICAgICAgICAgICAgLy8gQXp1cmUgU3RvcmFnZSBTZXJ2ZXIgd2lsbCByZXBsYWNlIFwiXFxcIiB3aXRoIFwiL1wiIGluIHRoZSBibG9iIG5hbWVzXG4gICAgICAgICAgICAvLyAgIGRvaW5nIHRoZSBzYW1lIGluIHRoZSBTREsgc2lkZSBzbyB0aGF0IHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSB0byByZXBsYWNlIFwiXFxcIiBpbnN0YW5jZXMgaW4gdGhlIGJsb2JOYW1lXG4gICAgICAgICAgICBibG9iTmFtZSA9IGJsb2JOYW1lLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXJOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgY29udGFpbmVyTmFtZSBpcyBpbnZhbGlkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGJsb2JOYW1lLCBjb250YWluZXJOYW1lIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZXh0cmFjdCBibG9iTmFtZSBhbmQgY29udGFpbmVyTmFtZSB3aXRoIHByb3ZpZGVkIGluZm9ybWF0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXNseSBjb3BpZXMgYSBibG9iIHRvIGEgZGVzdGluYXRpb24gd2l0aGluIHRoZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogSW4gdmVyc2lvbiAyMDEyLTAyLTEyIGFuZCBsYXRlciwgdGhlIHNvdXJjZSBmb3IgYSBDb3B5IEJsb2Igb3BlcmF0aW9uIGNhbiBiZVxuICAgICAqIGEgY29tbWl0dGVkIGJsb2IgaW4gYW55IEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBCZWdpbm5pbmcgd2l0aCB2ZXJzaW9uIDIwMTUtMDItMjEsIHRoZSBzb3VyY2UgZm9yIGEgQ29weSBCbG9iIG9wZXJhdGlvbiBjYW4gYmVcbiAgICAgKiBhbiBBenVyZSBmaWxlIGluIGFueSBBenVyZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogT25seSBzdG9yYWdlIGFjY291bnRzIGNyZWF0ZWQgb24gb3IgYWZ0ZXIgSnVuZSA3dGgsIDIwMTIgYWxsb3cgdGhlIENvcHkgQmxvYlxuICAgICAqIG9wZXJhdGlvbiB0byBjb3B5IGZyb20gYW5vdGhlciBzdG9yYWdlIGFjY291bnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29weS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSAtIHVybCB0byB0aGUgc291cmNlIEF6dXJlIEJsb2IvRmlsZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgU3RhcnQgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXN0YXJ0Q29weUZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnN0YXJ0Q29weUZyb21VUkwoY29weVNvdXJjZSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNYXRjaDogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucy5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2U6IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucy5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZUYWdzOiBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMudGFnQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5OiBvcHRpb25zLnJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgc2VhbEJsb2I6IG9wdGlvbnMuc2VhbEJsb2IsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIEJsb2JDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBhIEJsb2IgU2VydmljZSBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZSAoU0FTKSBVUkkgYmFzZWQgb24gdGhlIGNsaWVudCBwcm9wZXJ0aWVzXG4gICAgICogYW5kIHBhcmFtZXRlcnMgcGFzc2VkIGluLiBUaGUgU0FTIGlzIHNpZ25lZCBieSB0aGUgc2hhcmVkIGtleSBjcmVkZW50aWFsIG9mIHRoZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYS1zZXJ2aWNlLXNhc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAqIEByZXR1cm5zIFRoZSBTQVMgVVJJIGNvbnNpc3Rpbmcgb2YgdGhlIFVSSSB0byB0aGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbGllbnQsIGZvbGxvd2VkIGJ5IHRoZSBnZW5lcmF0ZWQgU0FTIHRva2VuLlxuICAgICAqL1xuICAgIGdlbmVyYXRlU2FzVXJsKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzYXMgPSBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMoT2JqZWN0LmFzc2lnbih7IGNvbnRhaW5lck5hbWU6IHRoaXMuX2NvbnRhaW5lck5hbWUsIGJsb2JOYW1lOiB0aGlzLl9uYW1lLCBzbmFwc2hvdFRpbWU6IHRoaXMuX3NuYXBzaG90LCB2ZXJzaW9uSWQ6IHRoaXMuX3ZlcnNpb25JZCB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS50b1N0cmluZygpO1xuICAgICAgICAgICAgcmVzb2x2ZShhcHBlbmRUb1VSTFF1ZXJ5KHRoaXMudXJsLCBzYXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBCbG9iQ2xpZW50IGNvbnN0cnVjdGVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWwuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZXMgc3RyaW5nIHRvIHNpZ24gZm9yIGEgQmxvYiBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSSBiYXNlZCBvblxuICAgICAqIHRoZSBjbGllbnQgcHJvcGVydGllcyBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIGdlbmVyYXRlU2FzU3RyaW5nVG9TaWduKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKE9iamVjdC5hc3NpZ24oeyBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lLCBibG9iTmFtZTogdGhpcy5fbmFtZSwgc25hcHNob3RUaW1lOiB0aGlzLl9zbmFwc2hvdCwgdmVyc2lvbklkOiB0aGlzLl92ZXJzaW9uSWQgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkuc3RyaW5nVG9TaWduO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGUgdGhlIGltbXV0YWJsaWxpdHkgcG9saWN5IG9uIHRoZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIGRlbGV0ZSBpbW11dGFiaWxpdHkgcG9saWN5IG9uIHRoZSBibG9iLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeSh7XG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gc2V0IGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgYXN5bmMgc2V0SW1tdXRhYmlsaXR5UG9saWN5KGltbXV0YWJpbGl0eVBvbGljeSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRJbW11dGFiaWxpdHlQb2xpY3lcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRJbW11dGFiaWxpdHlQb2xpY3koe1xuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogaW1tdXRhYmlsaXR5UG9saWN5LmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogaW1tdXRhYmlsaXR5UG9saWN5LnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGxlZ2FsIGhvbGQgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gc2V0IGxlZ2FsIGhvbGQgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgYXN5bmMgc2V0TGVnYWxIb2xkKGxlZ2FsSG9sZEVuYWJsZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc2V0TGVnYWxIb2xkXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0TGVnYWxIb2xkKGxlZ2FsSG9sZEVuYWJsZWQsIHtcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIHJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBmb3IgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gaXMgYXZhaWxhYmxlIG9uIHNlcnZpY2UgdmVyc2lvbnMgYmVnaW5uaW5nXG4gICAgICogd2l0aCB2ZXJzaW9uIDIwMTgtMDMtMjguXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWFjY291bnQtaW5mb3JtYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY2NvdW50SW5mbyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWdldEFjY291bnRJbmZvXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZ2V0QWNjb3VudEluZm8oe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBBcHBlbmRCbG9iQ2xpZW50IGRlZmluZXMgYSBzZXQgb2Ygb3BlcmF0aW9ucyBhcHBsaWNhYmxlIHRvIGFwcGVuZCBibG9icy5cbiAqL1xuY2xhc3MgQXBwZW5kQmxvYkNsaWVudCBleHRlbmRzIEJsb2JDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVybE9yQ29ubmVjdGlvblN0cmluZywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIGJsb2JOYW1lT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIC8vIEluIFR5cGVTY3JpcHQgd2UgY2Fubm90IHNpbXBseSBwYXNzIGFsbCBwYXJhbWV0ZXJzIHRvIHN1cGVyKCkgbGlrZSBiZWxvdyBzbyBoYXZlIHRvIGR1cGxpY2F0ZSB0aGUgY29kZSBpbnN0ZWFkLlxuICAgICAgICAvLyAgIHN1cGVyKHMsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lT3JPcHRpb25zLCBibG9iTmFtZU9yT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucykgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBibG9iTmFtZU9yT3B0aW9ucyAmJlxuICAgICAgICAgICAgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgYmxvYk5hbWUgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyh1cmxPckNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkS2V5Q3JlZGVudGlhbCA9IG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChleHRyYWN0ZWRDcmVkcy5hY2NvdW50TmFtZSwgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgYW5kIGJsb2JOYW1lIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kQmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmFwcGVuZEJsb2I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQXBwZW5kQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlXG4gICAgICogc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBQcm92aWRlIFwiXCIgd2lsbCByZW1vdmUgdGhlIHNuYXBzaG90IGFuZCByZXR1cm4gYSBDbGllbnQgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbmFwc2hvdCAtIFRoZSBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgQSBuZXcgQXBwZW5kQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICovXG4gICAgd2l0aFNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBuZXcgQXBwZW5kQmxvYkNsaWVudChzZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9ULCBzbmFwc2hvdC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBzbmFwc2hvdCksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgMC1sZW5ndGggYXBwZW5kIGJsb2IuIENhbGwgQXBwZW5kQmxvY2sgdG8gYXBwZW5kIGRhdGEgdG8gYW4gYXBwZW5kIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQXBwZW5kIEJsb2NrIENyZWF0ZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGFwcGVuZEJsb2JDbGllbnQgPSBjb250YWluZXJDbGllbnQuZ2V0QXBwZW5kQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGF3YWl0IGFwcGVuZEJsb2JDbGllbnQuY3JlYXRlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJBcHBlbmRCbG9iQ2xpZW50LWNyZWF0ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuY3JlYXRlKDAsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IChfYiA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiAoX2MgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgbGVnYWxIb2xkOiBvcHRpb25zLmxlZ2FsSG9sZCxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSAwLWxlbmd0aCBhcHBlbmQgYmxvYi4gQ2FsbCBBcHBlbmRCbG9jayB0byBhcHBlbmQgZGF0YSB0byBhbiBhcHBlbmQgYmxvYi5cbiAgICAgKiBJZiB0aGUgYmxvYiB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZSBjb250ZW50IG9mIHRoZSBleGlzdGluZyBibG9iIHdpbGwgcmVtYWluIHVuY2hhbmdlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZUlmTm90RXhpc3RzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBjb25kaXRpb25zID0geyBpZk5vbmVNYXRjaDogRVRhZ0FueSB9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtY3JlYXRlSWZOb3RFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNyZWF0ZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVwZGF0ZWRPcHRpb25zKSwgeyBjb25kaXRpb25zIH0pKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkJsb2JBbHJlYWR5RXhpc3RzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlYWxzIHRoZSBhcHBlbmQgYmxvYiwgbWFraW5nIGl0IHJlYWQgb25seS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBzZWFsKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQXBwZW5kQmxvYkNsaWVudC1zZWFsXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuc2VhbCh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYXBwZW5kUG9zaXRpb25BY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbW1pdHMgYSBuZXcgYmxvY2sgb2YgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBhcHBlbmQgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hcHBlbmQtYmxvY2tcbiAgICAgKlxuICAgICAqIEBwYXJhbSBib2R5IC0gRGF0YSB0byBiZSBhcHBlbmRlZC5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIExlbmd0aCBvZiB0aGUgYm9keSBpbiBieXRlcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRlbnQgPSBcIkhlbGxvIFdvcmxkIVwiO1xuICAgICAqXG4gICAgICogLy8gQ3JlYXRlIGEgbmV3IGFwcGVuZCBibG9iIGFuZCBhcHBlbmQgZGF0YSB0byB0aGUgYmxvYi5cbiAgICAgKiBjb25zdCBuZXdBcHBlbmRCbG9iQ2xpZW50ID0gY29udGFpbmVyQ2xpZW50LmdldEFwcGVuZEJsb2JDbGllbnQoXCI8YmxvYiBuYW1lPlwiKTtcbiAgICAgKiBhd2FpdCBuZXdBcHBlbmRCbG9iQ2xpZW50LmNyZWF0ZSgpO1xuICAgICAqIGF3YWl0IG5ld0FwcGVuZEJsb2JDbGllbnQuYXBwZW5kQmxvY2soY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqXG4gICAgICogLy8gQXBwZW5kIGRhdGEgdG8gYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2IuXG4gICAgICogY29uc3QgZXhpc3RpbmdBcHBlbmRCbG9iQ2xpZW50ID0gY29udGFpbmVyQ2xpZW50LmdldEFwcGVuZEJsb2JDbGllbnQoXCI8YmxvYiBuYW1lPlwiKTtcbiAgICAgKiBhd2FpdCBleGlzdGluZ0FwcGVuZEJsb2JDbGllbnQuYXBwZW5kQmxvY2soY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGFwcGVuZEJsb2NrKGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJBcHBlbmRCbG9iQ2xpZW50LWFwcGVuZEJsb2NrXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuYXBwZW5kQmxvY2soY29udGVudExlbmd0aCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGFwcGVuZFBvc2l0aW9uQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENTogb3B0aW9ucy50cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gY29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2JcbiAgICAgKiB3aGVyZSB0aGUgY29udGVudHMgYXJlIHJlYWQgZnJvbSBhIHNvdXJjZSB1cmwuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXBwZW5kLWJsb2NrLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC1cbiAgICAgKiAgICAgICAgICAgICAgICAgVGhlIHVybCB0byB0aGUgYmxvYiB0aGF0IHdpbGwgYmUgdGhlIHNvdXJjZSBvZiB0aGUgY29weS4gQSBzb3VyY2UgYmxvYiBpbiB0aGUgc2FtZSBzdG9yYWdlIGFjY291bnQgY2FuXG4gICAgICogICAgICAgICAgICAgICAgIGJlIGF1dGhlbnRpY2F0ZWQgdmlhIFNoYXJlZCBLZXkuIEhvd2V2ZXIsIGlmIHRoZSBzb3VyY2UgaXMgYSBibG9iIGluIGFub3RoZXIgYWNjb3VudCwgdGhlIHNvdXJjZSBibG9iXG4gICAgICogICAgICAgICAgICAgICAgIG11c3QgZWl0aGVyIGJlIHB1YmxpYyBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuIElmIHRoZSBzb3VyY2UgYmxvYiBpc1xuICAgICAqICAgICAgICAgICAgICAgICBwdWJsaWMsIG5vIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gc291cmNlT2Zmc2V0IC0gT2Zmc2V0IGluIHNvdXJjZSB0byBiZSBhcHBlbmRlZFxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBiZSBhcHBlbmRlZCBhcyBhIGJsb2NrXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGFwcGVuZEJsb2NrRnJvbVVSTChzb3VyY2VVUkwsIHNvdXJjZU9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtYXBwZW5kQmxvY2tGcm9tVVJMXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmFwcGVuZEJsb2JDb250ZXh0LmFwcGVuZEJsb2NrRnJvbVVybChzb3VyY2VVUkwsIDAsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldDogc291cmNlT2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50TUQ1OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudENyYzY0OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgc291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTWF0Y2g6IChfYiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogKF9jID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogKF9kID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlOiAoX2UgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uOiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKG9wdGlvbnMuc291cmNlQXV0aG9yaXphdGlvbiksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vKipcbiAqIEJsb2NrQmxvYkNsaWVudCBkZWZpbmVzIGEgc2V0IG9mIG9wZXJhdGlvbnMgYXBwbGljYWJsZSB0byBibG9jayBibG9icy5cbiAqL1xuY2xhc3MgQmxvY2tCbG9iQ2xpZW50IGV4dGVuZHMgQmxvYkNsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXJsT3JDb25uZWN0aW9uU3RyaW5nLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgYmxvYk5hbWVPck9wdGlvbnMsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gSW4gVHlwZVNjcmlwdCB3ZSBjYW5ub3Qgc2ltcGx5IHBhc3MgYWxsIHBhcmFtZXRlcnMgdG8gc3VwZXIoKSBsaWtlIGJlbG93IHNvIGhhdmUgdG8gZHVwbGljYXRlIHRoZSBjb2RlIGluc3RlYWQuXG4gICAgICAgIC8vICAgc3VwZXIocywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWVPck9wdGlvbnMsIGJsb2JOYW1lT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKGlzUGlwZWxpbmVMaWtlKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBwaXBlbGluZTogUGlwZWxpbmUpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgb3B0aW9ucyA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICAvLyBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB1bmRlZmluZWQuIFVzZSBhbm9ueW1vdXMgY3JlZGVudGlhbC5cbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIGlmIChibG9iTmFtZU9yT3B0aW9ucyAmJiB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGJsb2JOYW1lT3JPcHRpb25zICYmXG4gICAgICAgICAgICB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBibG9iTmFtZSA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudFNhcztcbiAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBzdHJpbmcgbXVzdCBiZSBlaXRoZXIgYW4gQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBvciBhIFNBUyBjb25uZWN0aW9uIHN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGluZyBub24tZW1wdHkgc3RyaW5ncyBmb3IgY29udGFpbmVyTmFtZSBhbmQgYmxvYk5hbWUgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5ibG9ja0Jsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5ibG9ja0Jsb2I7XG4gICAgICAgIHRoaXMuX2Jsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5ibG9iO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2NrQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlXG4gICAgICogc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBQcm92aWRlIFwiXCIgd2lsbCByZW1vdmUgdGhlIHNuYXBzaG90IGFuZCByZXR1cm4gYSBVUkwgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbmFwc2hvdCAtIFRoZSBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvY2tCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKi9cbiAgICB3aXRoU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0Jsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5TTkFQU0hPVCwgc25hcHNob3QubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogc25hcHNob3QpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogUXVpY2sgcXVlcnkgZm9yIGEgSlNPTiBvciBDU1YgZm9ybWF0dGVkIGJsb2IuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlIChOb2RlLmpzKTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gUXVlcnkgYW5kIGNvbnZlcnQgYSBibG9iIHRvIGEgc3RyaW5nXG4gICAgICogY29uc3QgcXVlcnlCbG9ja0Jsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC5xdWVyeShcInNlbGVjdCAqIGZyb20gQmxvYlN0b3JhZ2VcIik7XG4gICAgICogY29uc3QgZG93bmxvYWRlZCA9IChhd2FpdCBzdHJlYW1Ub0J1ZmZlcihxdWVyeUJsb2NrQmxvYlJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSkpLnRvU3RyaW5nKCk7XG4gICAgICogY29uc29sZS5sb2coXCJRdWVyeSBibG9iIGNvbnRlbnQ6XCIsIGRvd25sb2FkZWQpO1xuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIocmVhZGFibGVTdHJlYW0pIHtcbiAgICAgKiAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICogICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAqICAgICByZWFkYWJsZVN0cmVhbS5vbihcImRhdGFcIiwgKGRhdGEpID0+IHtcbiAgICAgKiAgICAgICBjaHVua3MucHVzaChkYXRhIGluc3RhbmNlb2YgQnVmZmVyID8gZGF0YSA6IEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgKiAgICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgICogICAgIH0pO1xuICAgICAqICAgICByZWFkYWJsZVN0cmVhbS5vbihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICogICB9KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcXVlcnkgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBxdWVyeShxdWVyeSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgaWYgKCFjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgb3BlcmF0aW9uIGN1cnJlbnRseSBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1xdWVyeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fYmxvYkNvbnRleHQucXVlcnkoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHF1ZXJ5UmVxdWVzdDoge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVR5cGU6IFwiU1FMXCIsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBpbnB1dFNlcmlhbGl6YXRpb246IHRvUXVlcnlTZXJpYWxpemF0aW9uKG9wdGlvbnMuaW5wdXRUZXh0Q29uZmlndXJhdGlvbiksXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFNlcmlhbGl6YXRpb246IHRvUXVlcnlTZXJpYWxpemF0aW9uKG9wdGlvbnMub3V0cHV0VGV4dENvbmZpZ3VyYXRpb24pLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJsb2JRdWVyeVJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgb25Qcm9ncmVzczogb3B0aW9ucy5vblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIG9uRXJyb3I6IG9wdGlvbnMub25FcnJvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBibG9jayBibG9iLCBvciB1cGRhdGVzIHRoZSBjb250ZW50IG9mIGFuIGV4aXN0aW5nIGJsb2NrIGJsb2IuXG4gICAgICogVXBkYXRpbmcgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYiBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBtZXRhZGF0YSBvbiB0aGUgYmxvYi5cbiAgICAgKiBQYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHRoZSBjb250ZW50IG9mIHRoZSBleGlzdGluZyBibG9iIGlzXG4gICAgICogb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV3IGNvbnRlbnQuIFRvIHBlcmZvcm0gYSBwYXJ0aWFsIHVwZGF0ZSBvZiBhIGJsb2NrIGJsb2IncyxcbiAgICAgKiB1c2Uge0BsaW5rIHN0YWdlQmxvY2t9IGFuZCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBub24tcGFyYWxsZWwgdXBsb2FkaW5nIG1ldGhvZCwgcGxlYXNlIHVzZSB7QGxpbmsgdXBsb2FkRmlsZX0sXG4gICAgICoge0BsaW5rIHVwbG9hZFN0cmVhbX0gb3Ige0BsaW5rIHVwbG9hZEJyb3dzZXJEYXRhfSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgICogd2l0aCBjb25jdXJyZW5jeSB1cGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHkgLSBCbG9iLCBzdHJpbmcsIEFycmF5QnVmZmVyLCBBcnJheUJ1ZmZlclZpZXcgb3IgYSBmdW5jdGlvblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHJldHVybnMgYSBuZXcgUmVhZGFibGUgc3RyZWFtIHdob3NlIG9mZnNldCBpcyBmcm9tIGRhdGEgc291cmNlIGJlZ2lubmluZy5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIExlbmd0aCBvZiBib2R5IGluIGJ5dGVzLiBVc2UgQnVmZmVyLmJ5dGVMZW5ndGgoKSB0byBjYWxjdWxhdGUgYm9keSBsZW5ndGggZm9yIGFcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgaW5jbHVkaW5nIG5vbiBub24tQmFzZTY0L0hleC1lbmNvZGVkIGNoYXJhY3RlcnMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBCbG9jayBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2NrIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRlbnQgPSBcIkhlbGxvIHdvcmxkIVwiO1xuICAgICAqIGNvbnN0IHVwbG9hZEJsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC51cGxvYWQoY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZChib2R5LCBjb250ZW50TGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC51cGxvYWQoY29udGVudExlbmd0aCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JIdHRwSGVhZGVyczogb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBCbG9jayBCbG9iIHdoZXJlIHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiBhcmUgcmVhZCBmcm9tIGEgZ2l2ZW4gVVJMLlxuICAgICAqIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBiZWdpbm5pbmcgd2l0aCB0aGUgMjAyMC0wNC0wOCB2ZXJzaW9uLiBQYXJ0aWFsIHVwZGF0ZXNcbiAgICAgKiBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIFB1dCBCbG9iIGZyb20gVVJMOyB0aGUgY29udGVudCBvZiBhbiBleGlzdGluZyBibG9iIGlzIG92ZXJ3cml0dGVuIHdpdGhcbiAgICAgKiB0aGUgY29udGVudCBvZiB0aGUgbmV3IGJsb2IuICBUbyBwZXJmb3JtIHBhcnRpYWwgdXBkYXRlcyB0byBhIGJsb2NrIGJsb2LigJlzIGNvbnRlbnRzIHVzaW5nIGFcbiAgICAgKiBzb3VyY2UgVVJMLCB1c2Uge0BsaW5rIHN0YWdlQmxvY2tGcm9tVVJMfSBhbmQge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC0gU3BlY2lmaWVzIHRoZSBVUkwgb2YgdGhlIGJsb2IuIFRoZSB2YWx1ZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIGEgVVJMIG9mIHVwIHRvIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgYmxvYi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgVVJMLWVuY29kZWQgYXMgaXQgd291bGQgYXBwZWFyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc291cmNlIGJsb2IgaXMgcHVibGljLCBubyBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHNvdXJjZSBvYmplY3QgVVJMczpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL215YmxvYlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iP3NuYXBzaG90PTxEYXRlVGltZT5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYXN5bmMgc3luY1VwbG9hZEZyb21VUkwoc291cmNlVVJMLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXN5bmNVcGxvYWRGcm9tVVJMXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnB1dEJsb2JGcm9tVXJsKDAsIHNvdXJjZVVSTCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLCBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucywgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLCBzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNYXRjaDogKF9iID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlOiAoX2MgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoOiAoX2QgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2U6IChfZSA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlRhZ3M6IChfZiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLnRhZ0NvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgfSwgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLCB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSwgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSwgY29weVNvdXJjZVRhZ3M6IG9wdGlvbnMuY29weVNvdXJjZVRhZ3MsIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyB9KSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBsb2FkcyB0aGUgc3BlY2lmaWVkIGJsb2NrIHRvIHRoZSBibG9jayBibG9iJ3MgXCJzdGFnaW5nIGFyZWFcIiB0byBiZSBsYXRlclxuICAgICAqIGNvbW1pdHRlZCBieSBhIGNhbGwgdG8gY29tbWl0QmxvY2tMaXN0LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9ja1xuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2NrSWQgLSBBIDY0LWJ5dGUgdmFsdWUgdGhhdCBpcyBiYXNlNjQtZW5jb2RlZFxuICAgICAqIEBwYXJhbSBib2R5IC0gRGF0YSB0byB1cGxvYWQgdG8gdGhlIHN0YWdpbmcgYXJlYS5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIE51bWJlciBvZiBieXRlcyB0byB1cGxvYWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvY2sgQmxvYiBTdGFnZSBCbG9jayBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhZ2VCbG9jayhibG9ja0lkLCBib2R5LCBjb250ZW50TGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1zdGFnZUJsb2NrXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC5zdGFnZUJsb2NrKGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIGJvZHksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENTogb3B0aW9ucy50cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFN0YWdlIEJsb2NrIEZyb20gVVJMIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IGJsb2NrIHRvIGJlIGNvbW1pdHRlZCBhcyBwYXJ0XG4gICAgICogb2YgYSBibG9iIHdoZXJlIHRoZSBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgVVJMLlxuICAgICAqIFRoaXMgQVBJIGlzIGF2YWlsYWJsZSBzdGFydGluZyBpbiB2ZXJzaW9uIDIwMTgtMDMtMjguXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2NrLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvY2tJZCAtIEEgNjQtYnl0ZSB2YWx1ZSB0aGF0IGlzIGJhc2U2NC1lbmNvZGVkXG4gICAgICogQHBhcmFtIHNvdXJjZVVSTCAtIFNwZWNpZmllcyB0aGUgVVJMIG9mIHRoZSBibG9iLiBUaGUgdmFsdWVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBhIFVSTCBvZiB1cCB0byAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIGJsb2IuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkIGFwcGVhclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSByZXF1ZXN0IFVSSS4gVGhlIHNvdXJjZSBibG9iIG11c3QgZWl0aGVyIGJlIHB1YmxpY1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHNvdXJjZSBibG9iIGlzIHB1YmxpYywgbm8gYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBzb3VyY2Ugb2JqZWN0IFVSTHM6XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAtIGh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9teWJsb2JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL215YmxvYj9zbmFwc2hvdD08RGF0ZVRpbWU+XG4gICAgICogQHBhcmFtIG9mZnNldCAtIEZyb20gd2hpY2ggcG9zaXRpb24gb2YgdGhlIGJsb2IgdG8gZG93bmxvYWQsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwXG4gICAgICogQHBhcmFtIGNvdW50IC0gSG93IG11Y2ggZGF0YSB0byBiZSBkb3dubG9hZGVkLCBncmVhdGVyIHRoYW4gMC4gV2lsbCBkb3dubG9hZCB0byB0aGUgZW5kIHdoZW4gdW5kZWZpbmVkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvY2sgQmxvYiBTdGFnZSBCbG9jayBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhZ2VCbG9ja0Zyb21VUkwoYmxvY2tJZCwgc291cmNlVVJMLCBvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtc3RhZ2VCbG9ja0Zyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnN0YWdlQmxvY2tGcm9tVVJMKGJsb2NrSWQsIDAsIHNvdXJjZVVSTCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRNRDU6IG9wdGlvbnMuc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQ6IG9wdGlvbnMuc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgIHNvdXJjZVJhbmdlOiBvZmZzZXQgPT09IDAgJiYgIWNvdW50ID8gdW5kZWZpbmVkIDogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb246IGh0dHBBdXRob3JpemF0aW9uVG9TdHJpbmcob3B0aW9ucy5zb3VyY2VBdXRob3JpemF0aW9uKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgYSBibG9iIGJ5IHNwZWNpZnlpbmcgdGhlIGxpc3Qgb2YgYmxvY2sgSURzIHRoYXQgbWFrZSB1cCB0aGUgYmxvYi5cbiAgICAgKiBJbiBvcmRlciB0byBiZSB3cml0dGVuIGFzIHBhcnQgb2YgYSBibG9iLCBhIGJsb2NrIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuXG4gICAgICogdG8gdGhlIHNlcnZlciBpbiBhIHByaW9yIHtAbGluayBzdGFnZUJsb2NrfSBvcGVyYXRpb24uIFlvdSBjYW4gY2FsbCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fSB0b1xuICAgICAqIHVwZGF0ZSBhIGJsb2IgYnkgdXBsb2FkaW5nIG9ubHkgdGhvc2UgYmxvY2tzIHRoYXQgaGF2ZSBjaGFuZ2VkLCB0aGVuIGNvbW1pdHRpbmcgdGhlIG5ldyBhbmQgZXhpc3RpbmdcbiAgICAgKiBibG9ja3MgdG9nZXRoZXIuIEFueSBibG9ja3Mgbm90IHNwZWNpZmllZCBpbiB0aGUgYmxvY2sgbGlzdCBhbmQgcGVybWFuZW50bHkgZGVsZXRlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvY2stbGlzdFxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2NrcyAtICBBcnJheSBvZiA2NC1ieXRlIHZhbHVlIHRoYXQgaXMgYmFzZTY0LWVuY29kZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgQ29tbWl0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIENvbW1pdCBCbG9jayBMaXN0IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBjb21taXRCbG9ja0xpc3QoYmxvY2tzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LWNvbW1pdEJsb2NrTGlzdFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC5jb21taXRCbG9ja0xpc3QoeyBsYXRlc3Q6IGJsb2NrcyB9LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBvcHRpb25zLmJsb2JIVFRQSGVhZGVycyxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2IgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9jID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgdGllcjogdG9BY2Nlc3NUaWVyKG9wdGlvbnMudGllciksXG4gICAgICAgICAgICAgICAgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGJsb2NrcyB0aGF0IGhhdmUgYmVlbiB1cGxvYWRlZCBhcyBwYXJ0IG9mIGEgYmxvY2sgYmxvYlxuICAgICAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgYmxvY2sgbGlzdCBmaWx0ZXIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2NrLWxpc3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBsaXN0VHlwZSAtIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGUgbGlzdCBvZiBjb21taXR0ZWQgYmxvY2tzLFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIHVuY29tbWl0dGVkIGJsb2Nrcywgb3IgYm90aCBsaXN0cyB0b2dldGhlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgR2V0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIEdldCBCbG9jayBMaXN0IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRCbG9ja0xpc3QobGlzdFR5cGUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1nZXRCbG9ja0xpc3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2NrQmxvYkNvbnRleHQuZ2V0QmxvY2tMaXN0KGxpc3RUeXBlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmICghcmVzLmNvbW1pdHRlZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgIHJlcy5jb21taXR0ZWRCbG9ja3MgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzLnVuY29tbWl0dGVkQmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgcmVzLnVuY29tbWl0dGVkQmxvY2tzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gSGlnaCBsZXZlbCBmdW5jdGlvbnNcbiAgICAvKipcbiAgICAgKiBVcGxvYWRzIGEgQnVmZmVyKE5vZGUuanMpL0Jsb2IoYnJvd3NlcnMpL0FycmF5QnVmZmVyL0FycmF5QnVmZmVyVmlldyBvYmplY3QgdG8gYSBCbG9ja0Jsb2IuXG4gICAgICpcbiAgICAgKiBXaGVuIGRhdGEgbGVuZ3RoIGlzIG5vIG1vcmUgdGhhbiB0aGUgc3BlY2lmaWxlZCB7QGxpbmsgQmxvY2tCbG9iUGFyYWxsZWxVcGxvYWRPcHRpb25zLm1heFNpbmdsZVNob3RTaXplfSAoZGVmYXVsdCBpc1xuICAgICAqIHtAbGluayBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFU30pLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHtAbGluayB1cGxvYWR9IGNhbGwgdG8gZmluaXNoIHRoZSB1cGxvYWQuXG4gICAgICogT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCB3aWxsIGNhbGwge0BsaW5rIHN0YWdlQmxvY2t9IHRvIHVwbG9hZCBibG9ja3MsIGFuZCBmaW5hbGx5IGNhbGwge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH1cbiAgICAgKiB0byBjb21taXQgdGhlIGJsb2NrIGxpc3QuXG4gICAgICpcbiAgICAgKiBBIGNvbW1vbiB7QGxpbmsgQmxvY2tCbG9iUGFyYWxsZWxVcGxvYWRPcHRpb25zLmJsb2JIVFRQSGVhZGVyc30gb3B0aW9uIHRvIHNldCBpc1xuICAgICAqIGBibG9iQ29udGVudFR5cGVgLCBlbmFibGluZyB0aGUgYnJvd3NlciB0byBwcm92aWRlXG4gICAgICogZnVuY3Rpb25hbGl0eSBiYXNlZCBvbiBmaWxlIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSAtIEJ1ZmZlcihOb2RlLmpzKSwgQmxvYiwgQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZERhdGEoZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZERhdGFcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkU2Vla2FibGVJbnRlcm5hbCgob2Zmc2V0LCBzaXplKSA9PiBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSwgYnVmZmVyLmJ5dGVMZW5ndGgsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyb3dzZXJCbG9iID0gbmV3IEJsb2IoW2RhdGFdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIHNpemUpID0+IGJyb3dzZXJCbG9iLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2l6ZSksIGJyb3dzZXJCbG9iLnNpemUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIElOIEJST1dTRVJTLlxuICAgICAqXG4gICAgICogVXBsb2FkcyBhIGJyb3dzZXIgQmxvYi9GaWxlL0FycmF5QnVmZmVyL0FycmF5QnVmZmVyVmlldyBvYmplY3QgdG8gYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFdoZW4gYnVmZmVyIGxlbmd0aCBsZXNzZXIgdGhhbiBvciBlcXVhbCB0byAyNTZNQiwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgMSB1cGxvYWQgY2FsbCB0byBmaW5pc2ggdGhlIHVwbG9hZC5cbiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCB7QGxpbmsgc3RhZ2VCbG9ja30gdG8gdXBsb2FkIGJsb2NrcywgYW5kIGZpbmFsbHkgY2FsbFxuICAgICAqIHtAbGluayBjb21taXRCbG9ja0xpc3R9IHRvIGNvbW1pdCB0aGUgYmxvY2sgbGlzdC5cbiAgICAgKlxuICAgICAqIEEgY29tbW9uIHtAbGluayBCbG9ja0Jsb2JQYXJhbGxlbFVwbG9hZE9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzfSBvcHRpb24gdG8gc2V0IGlzXG4gICAgICogYGJsb2JDb250ZW50VHlwZWAsIGVuYWJsaW5nIHRoZSBicm93c2VyIHRvIHByb3ZpZGVcbiAgICAgKiBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIGZpbGUgdHlwZS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgdXBsb2FkRGF0YX0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBicm93c2VyRGF0YSAtIEJsb2IsIEZpbGUsIEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlld1xuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB1cGxvYWQgYnJvd3NlciBkYXRhLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkQnJvd3NlckRhdGEoYnJvd3NlckRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC11cGxvYWRCcm93c2VyRGF0YVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXJCbG9iID0gbmV3IEJsb2IoW2Jyb3dzZXJEYXRhXSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIHNpemUpID0+IGJyb3dzZXJCbG9iLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2l6ZSksIGJyb3dzZXJCbG9iLnNpemUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqXG4gICAgICogVXBsb2FkcyBkYXRhIHRvIGJsb2NrIGJsb2IuIFJlcXVpcmVzIGEgYm9keUZhY3RvcnkgYXMgdGhlIGRhdGEgc291cmNlLFxuICAgICAqIHdoaWNoIG5lZWQgdG8gcmV0dXJuIGEge0BsaW5rIEh0dHBSZXF1ZXN0Qm9keX0gb2JqZWN0IHdpdGggdGhlIG9mZnNldCBhbmQgc2l6ZSBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIFdoZW4gZGF0YSBsZW5ndGggaXMgbm8gbW9yZSB0aGFuIHRoZSBzcGVjaWZpZWQge0BsaW5rIEJsb2NrQmxvYlBhcmFsbGVsVXBsb2FkT3B0aW9ucy5tYXhTaW5nbGVTaG90U2l6ZX0gKGRlZmF1bHQgaXNcbiAgICAgKiB7QGxpbmsgQkxPQ0tfQkxPQl9NQVhfVVBMT0FEX0JMT0JfQllURVN9KSwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgMSB7QGxpbmsgdXBsb2FkfSBjYWxsIHRvIGZpbmlzaCB0aGUgdXBsb2FkLlxuICAgICAqIE90aGVyd2lzZSwgdGhpcyBtZXRob2Qgd2lsbCBjYWxsIHtAbGluayBzdGFnZUJsb2NrfSB0byB1cGxvYWQgYmxvY2tzLCBhbmQgZmluYWxseSBjYWxsIHtAbGluayBjb21taXRCbG9ja0xpc3R9XG4gICAgICogdG8gY29tbWl0IHRoZSBibG9jayBsaXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHlGYWN0b3J5IC1cbiAgICAgKiBAcGFyYW0gc2l6ZSAtIHNpemUgb2YgdGhlIGRhdGEgdG8gdXBsb2FkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBVcGxvYWQgdG8gQmxvY2sgQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRTZWVrYWJsZUludGVybmFsKGJvZHlGYWN0b3J5LCBzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgbGV0IGJsb2NrU2l6ZSA9IChfYSA9IG9wdGlvbnMuYmxvY2tTaXplKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICBpZiAoYmxvY2tTaXplIDwgMCB8fCBibG9ja1NpemUgPiBCTE9DS19CTE9CX01BWF9TVEFHRV9CTE9DS19CWVRFUykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGJsb2NrU2l6ZSBvcHRpb24gbXVzdCBiZSA+PSAwIGFuZCA8PSAke0JMT0NLX0JMT0JfTUFYX1NUQUdFX0JMT0NLX0JZVEVTfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heFNpbmdsZVNob3RTaXplID0gKF9iID0gb3B0aW9ucy5tYXhTaW5nbGVTaG90U2l6ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogQkxPQ0tfQkxPQl9NQVhfVVBMT0FEX0JMT0JfQllURVM7XG4gICAgICAgIGlmIChtYXhTaW5nbGVTaG90U2l6ZSA8IDAgfHwgbWF4U2luZ2xlU2hvdFNpemUgPiBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFUykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYG1heFNpbmdsZVNob3RTaXplIG9wdGlvbiBtdXN0IGJlID49IDAgYW5kIDw9ICR7QkxPQ0tfQkxPQl9NQVhfVVBMT0FEX0JMT0JfQllURVN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHNpemUgPiBCTE9DS19CTE9CX01BWF9TVEFHRV9CTE9DS19CWVRFUyAqIEJMT0NLX0JMT0JfTUFYX0JMT0NLUykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGAke3NpemV9IGlzIHRvbyBsYXJnZXIgdG8gdXBsb2FkIHRvIGEgYmxvY2sgYmxvYi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaXplID4gbWF4U2luZ2xlU2hvdFNpemUpIHtcbiAgICAgICAgICAgICAgICBibG9ja1NpemUgPSBNYXRoLmNlaWwoc2l6ZSAvIEJMT0NLX0JMT0JfTUFYX0JMT0NLUyk7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrU2l6ZSA8IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUykge1xuICAgICAgICAgICAgICAgICAgICBibG9ja1NpemUgPSBERUZBVUxUX0JMT0JfRE9XTkxPQURfQkxPQ0tfQllURVM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZFNlZWthYmxlSW50ZXJuYWxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2l6ZSA8PSBtYXhTaW5nbGVTaG90U2l6ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnVwbG9hZChib2R5RmFjdG9yeSgwLCBzaXplKSwgc2l6ZSwgdXBkYXRlZE9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG51bUJsb2NrcyA9IE1hdGguZmxvb3IoKHNpemUgLSAxKSAvIGJsb2NrU2l6ZSkgKyAxO1xuICAgICAgICAgICAgaWYgKG51bUJsb2NrcyA+IEJMT0NLX0JMT0JfTUFYX0JMT0NLUykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBUaGUgYnVmZmVyJ3Mgc2l6ZSBpcyB0b28gYmlnIG9yIHRoZSBCbG9ja1NpemUgaXMgdG9vIHNtYWxsO2AgK1xuICAgICAgICAgICAgICAgICAgICBgdGhlIG51bWJlciBvZiBibG9ja3MgbXVzdCBiZSA8PSAke0JMT0NLX0JMT0JfTUFYX0JMT0NLU31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJsb2NrTGlzdCA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJRFByZWZpeCA9IGNvcmVVdGlsLnJhbmRvbVVVSUQoKTtcbiAgICAgICAgICAgIGxldCB0cmFuc2ZlclByb2dyZXNzID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGJhdGNoID0gbmV3IEJhdGNoKG9wdGlvbnMuY29uY3VycmVuY3kpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1CbG9ja3M7IGkrKykge1xuICAgICAgICAgICAgICAgIGJhdGNoLmFkZE9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrSUQgPSBnZW5lcmF0ZUJsb2NrSUQoYmxvY2tJRFByZWZpeCwgaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gYmxvY2tTaXplICogaTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gaSA9PT0gbnVtQmxvY2tzIC0gMSA/IHNpemUgOiBzdGFydCArIGJsb2NrU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGVuZCAtIHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBibG9ja0xpc3QucHVzaChibG9ja0lEKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFnZUJsb2NrKGJsb2NrSUQsIGJvZHlGYWN0b3J5KHN0YXJ0LCBjb250ZW50TGVuZ3RoKSwgY29udGVudExlbmd0aCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHByb2dyZXNzIGFmdGVyIGJsb2NrIGlzIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZCB0byBzZXJ2ZXIsIGluIGNhc2Ugb2YgYmxvY2sgdHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IEhvb2sgd2l0aCBjb252ZW5pZW5jZSBsYXllciBwcm9ncmVzcyBldmVudCBpbiBmaW5lciBsZXZlbFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlclByb2dyZXNzICs9IGNvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkQnl0ZXM6IHRyYW5zZmVyUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgYmF0Y2guZG8oKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1pdEJsb2NrTGlzdChibG9ja0xpc3QsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAgICAgKlxuICAgICAqIFVwbG9hZHMgYSBsb2NhbCBmaWxlIGluIGJsb2NrcyB0byBhIGJsb2NrIGJsb2IuXG4gICAgICpcbiAgICAgKiBXaGVuIGZpbGUgc2l6ZSBsZXNzZXIgdGhhbiBvciBlcXVhbCB0byAyNTZNQiwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgMSB1cGxvYWQgY2FsbCB0byBmaW5pc2ggdGhlIHVwbG9hZC5cbiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCBzdGFnZUJsb2NrIHRvIHVwbG9hZCBibG9ja3MsIGFuZCBmaW5hbGx5IGNhbGwgY29tbWl0QmxvY2tMaXN0XG4gICAgICogdG8gY29tbWl0IHRoZSBibG9jayBsaXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbGVQYXRoIC0gRnVsbCBwYXRoIG9mIGxvY2FsIGZpbGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gVXBsb2FkIHRvIEJsb2NrIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkRmlsZShmaWxlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZEZpbGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaXplID0gKGF3YWl0IGZzU3RhdChmaWxlUGF0aCkpLnNpemU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIGNvdW50KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGZzQ3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBhdXRvQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogY291bnQgPyBvZmZzZXQgKyBjb3VudCAtIDEgOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG9mZnNldCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHNpemUsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAgICAgKlxuICAgICAqIFVwbG9hZHMgYSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbSBpbnRvIGJsb2NrIGJsb2IuXG4gICAgICpcbiAgICAgKiBQRVJGT1JNQU5DRSBJTVBST1ZFTUVOVCBUSVBTOlxuICAgICAqICogSW5wdXQgc3RyZWFtIGhpZ2hXYXRlck1hcmsgaXMgYmV0dGVyIHRvIHNldCBhIHNhbWUgdmFsdWUgd2l0aCBidWZmZXJTaXplXG4gICAgICogICAgcGFyYW1ldGVyLCB3aGljaCB3aWxsIGF2b2lkIEJ1ZmZlci5jb25jYXQoKSBvcGVyYXRpb25zLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmVhbSAtIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtXG4gICAgICogQHBhcmFtIGJ1ZmZlclNpemUgLSBTaXplIG9mIGV2ZXJ5IGJ1ZmZlciBhbGxvY2F0ZWQsIGFsc28gdGhlIGJsb2NrIHNpemUgaW4gdGhlIHVwbG9hZGVkIGJsb2NrIGJsb2IuIERlZmF1bHQgdmFsdWUgaXMgOE1CXG4gICAgICogQHBhcmFtIG1heENvbmN1cnJlbmN5IC0gIE1heCBjb25jdXJyZW5jeSBpbmRpY2F0ZXMgdGhlIG1heCBudW1iZXIgb2YgYnVmZmVycyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZSBjb3JyZWxhdGlvbiB3aXRoIG1heCB1cGxvYWRpbmcgY29uY3VycmVuY3kuIERlZmF1bHQgdmFsdWUgaXMgNVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBVcGxvYWQgU3RyZWFtIHRvIEJsb2NrIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkU3RyZWFtKHN0cmVhbSwgYnVmZmVyU2l6ZSA9IERFRkFVTFRfQkxPQ0tfQlVGRkVSX1NJWkVfQllURVMsIG1heENvbmN1cnJlbmN5ID0gNSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZFN0cmVhbVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCBibG9ja051bSA9IDA7XG4gICAgICAgICAgICBjb25zdCBibG9ja0lEUHJlZml4ID0gY29yZVV0aWwucmFuZG9tVVVJRCgpO1xuICAgICAgICAgICAgbGV0IHRyYW5zZmVyUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tMaXN0ID0gW107XG4gICAgICAgICAgICBjb25zdCBzY2hlZHVsZXIgPSBuZXcgQnVmZmVyU2NoZWR1bGVyKHN0cmVhbSwgYnVmZmVyU2l6ZSwgbWF4Q29uY3VycmVuY3ksIGFzeW5jIChib2R5LCBsZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0lEID0gZ2VuZXJhdGVCbG9ja0lEKGJsb2NrSURQcmVmaXgsIGJsb2NrTnVtKTtcbiAgICAgICAgICAgICAgICBibG9ja0xpc3QucHVzaChibG9ja0lEKTtcbiAgICAgICAgICAgICAgICBibG9ja051bSsrO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhZ2VCbG9jayhibG9ja0lELCBib2R5LCBsZW5ndGgsIHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJQcm92aWRlZEtleTogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJvZ3Jlc3MgYWZ0ZXIgYmxvY2sgaXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkIHRvIHNlcnZlciwgaW4gY2FzZSBvZiBibG9jayB0cnlpbmdcbiAgICAgICAgICAgICAgICB0cmFuc2ZlclByb2dyZXNzICs9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiB0cmFuc2ZlclByb2dyZXNzIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgc2hvdWxkIHNldCBhIHNtYWxsZXIgdmFsdWUgdGhhbiBtYXhDb25jdXJyZW5jeSwgd2hpY2ggaXMgaGVscGZ1bCB0b1xuICAgICAgICAgICAgLy8gcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSB3aGVuIGEgb3V0Z29pbmcgaGFuZGxlciB3YWl0cyBmb3Igc3RyZWFtIGRhdGEsIGluXG4gICAgICAgICAgICAvLyB0aGlzIHNpdHVhdGlvbiwgb3V0Z29pbmcgaGFuZGxlcnMgYXJlIGJsb2NrZWQuXG4gICAgICAgICAgICAvLyBPdXRnb2luZyBxdWV1ZSBzaG91bGRuJ3QgYmUgZW1wdHkuXG4gICAgICAgICAgICBNYXRoLmNlaWwoKG1heENvbmN1cnJlbmN5IC8gNCkgKiAzKSk7XG4gICAgICAgICAgICBhd2FpdCBzY2hlZHVsZXIuZG8oKTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbW1pdEJsb2NrTGlzdChibG9ja0xpc3QsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogUGFnZUJsb2JDbGllbnQgZGVmaW5lcyBhIHNldCBvZiBvcGVyYXRpb25zIGFwcGxpY2FibGUgdG8gcGFnZSBibG9icy5cbiAqL1xuY2xhc3MgUGFnZUJsb2JDbGllbnQgZXh0ZW5kcyBCbG9iQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBibG9iTmFtZU9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICAvLyBJbiBUeXBlU2NyaXB0IHdlIGNhbm5vdCBzaW1wbHkgcGFzcyBhbGwgcGFyYW1ldGVycyB0byBzdXBlcigpIGxpa2UgYmVsb3cgc28gaGF2ZSB0byBkdXBsaWNhdGUgdGhlIGNvZGUgaW5zdGVhZC5cbiAgICAgICAgLy8gICBzdXBlcihzLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZU9yT3B0aW9ucywgYmxvYk5hbWVPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBibG9iTmFtZU9yT3B0aW9ucyAmJlxuICAgICAgICAgICAgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgYmxvYk5hbWUgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyh1cmxPckNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkS2V5Q3JlZGVudGlhbCA9IG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChleHRyYWN0ZWRDcmVkcy5hY2NvdW50TmFtZSwgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgYW5kIGJsb2JOYW1lIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgIHRoaXMucGFnZUJsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5wYWdlQmxvYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBQYWdlQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlXG4gICAgICogc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBQcm92aWRlIFwiXCIgd2lsbCByZW1vdmUgdGhlIHNuYXBzaG90IGFuZCByZXR1cm4gYSBDbGllbnQgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbmFwc2hvdCAtIFRoZSBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgQSBuZXcgUGFnZUJsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqL1xuICAgIHdpdGhTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gbmV3IFBhZ2VCbG9iQ2xpZW50KHNldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuU05BUFNIT1QsIHNuYXBzaG90Lmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHNuYXBzaG90KSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBwYWdlIGJsb2Igb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguIENhbGwgdXBsb2FkUGFnZXMgdG8gdXBsb2FkIGRhdGFcbiAgICAgKiBkYXRhIHRvIGEgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2l6ZSAtIHNpemUgb2YgdGhlIHBhZ2UgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBDcmVhdGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWNyZWF0ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmNyZWF0ZSgwLCBzaXplLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBvcHRpb25zLmJsb2JIVFRQSGVhZGVycyxcbiAgICAgICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IG9wdGlvbnMuYmxvYlNlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IChfYiA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiAoX2MgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgbGVnYWxIb2xkOiBvcHRpb25zLmxlZ2FsSG9sZCxcbiAgICAgICAgICAgICAgICB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBwYWdlIGJsb2Igb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguIENhbGwgdXBsb2FkUGFnZXMgdG8gdXBsb2FkIGRhdGFcbiAgICAgKiBkYXRhIHRvIGEgcGFnZSBibG9iLiBJZiB0aGUgYmxvYiB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZSBjb250ZW50XG4gICAgICogb2YgdGhlIGV4aXN0aW5nIGJsb2Igd2lsbCByZW1haW4gdW5jaGFuZ2VkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2l6ZSAtIHNpemUgb2YgdGhlIHBhZ2UgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSWZOb3RFeGlzdHMoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtY3JlYXRlSWZOb3RFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0geyBpZk5vbmVNYXRjaDogRVRhZ0FueSB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY3JlYXRlKHNpemUsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgY29uZGl0aW9ucywgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkJsb2JBbHJlYWR5RXhpc3RzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyAxIG9yIG1vcmUgcGFnZXMgdG8gdGhlIHBhZ2UgYmxvYi4gVGhlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNTEyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1wYWdlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIERhdGEgdG8gdXBsb2FkXG4gICAgICogQHBhcmFtIG9mZnNldCAtIE9mZnNldCBvZiBkZXN0aW5hdGlvbiBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBDb250ZW50IGxlbmd0aCBvZiB0aGUgYm9keSwgYWxzbyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdXBsb2FkZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgVXBsb2FkIFBhZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRQYWdlcyhib2R5LCBvZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtdXBsb2FkUGFnZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQudXBsb2FkUGFnZXMoY291bnQsIGJvZHksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogb3B0aW9ucy5vblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQ6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgVXBsb2FkIFBhZ2VzIG9wZXJhdGlvbiB3cml0ZXMgYSByYW5nZSBvZiBwYWdlcyB0byBhIHBhZ2UgYmxvYiB3aGVyZSB0aGVcbiAgICAgKiBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgVVJMLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1wYWdlLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC0gU3BlY2lmeSBhIFVSTCB0byB0aGUgY29weSBzb3VyY2UsIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlKFNBUykgbWF5YmUgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvblxuICAgICAqIEBwYXJhbSBzb3VyY2VPZmZzZXQgLSBUaGUgc291cmNlIG9mZnNldCB0byBjb3B5IGZyb20uIFBhc3MgMCB0byBjb3B5IGZyb20gdGhlIGJlZ2lubmluZyBvZiBzb3VyY2UgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGRlc3RPZmZzZXQgLSBPZmZzZXQgb2YgZGVzdGluYXRpb24gcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHVwbG9hZGVkIGZyb20gc291cmNlIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRQYWdlc0Zyb21VUkwoc291cmNlVVJMLCBzb3VyY2VPZmZzZXQsIGRlc3RPZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC11cGxvYWRQYWdlc0Zyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LnVwbG9hZFBhZ2VzRnJvbVVSTChzb3VyY2VVUkwsIHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQ6IHNvdXJjZU9mZnNldCwgY291bnQgfSksIDAsIHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQ6IGRlc3RPZmZzZXQsIGNvdW50IH0pLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudE1ENTogb3B0aW9ucy5zb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NDogb3B0aW9ucy5zb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiAoX2IgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2U6IChfYyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IChfZCA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogKF9lID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZyZWVzIHRoZSBzcGVjaWZpZWQgcGFnZXMgZnJvbSB0aGUgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1wYWdlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZXMgdG8gY2xlYXIuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGNsZWFyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIENsZWFyIFBhZ2VzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIENsZWFyIFBhZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBjbGVhclBhZ2VzKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWNsZWFyUGFnZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuY2xlYXJQYWdlcygwLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZU51bWJlckFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHZhbGlkIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYiBvciBzbmFwc2hvdCBvZiBhIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBSYW5nZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UGFnZVJhbmdlcyhvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1nZXRQYWdlUmFuZ2VzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZVJlc3BvbnNlRnJvbU1vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGdldFBhZ2VSYW5nZXNTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBwYWdlIHJhbmdlcyBzdGFydGluZyBmcm9tIHRoZVxuICAgICAqIHNwZWNpZmllZCBNYXJrZXIuIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGdldFBhZ2VSYW5nZXNTZWdtZW50IGFnYWluXG4gICAgICogKHBhc3NpbmcgdGhlIHRoZSBwcmV2aW91c2x5LXJldHVybmVkIE1hcmtlcikgdG8gZ2V0IHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBsaXN0IHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIFBhZ2VCbG9iIEdldCBQYWdlIFJhbmdlcyBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0UGFnZVJhbmdlc1NlZ21lbnQob2Zmc2V0ID0gMCwgY291bnQsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtZ2V0UGFnZVJhbmdlc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuZ2V0UGFnZVJhbmdlcyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1hcmtlcixcbiAgICAgICAgICAgICAgICBtYXhQYWdlU2l6ZTogb3B0aW9ucy5tYXhQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3Ige0BsaW5rIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc1Jlc3BvbnNlTW9kZWx9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBnZXQgb2YgcGFnZSByYW5nZXMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBnZXR0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBwYWdlIHJhbmdlcyByZW1haW5pbmcgd2l0aGluIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBnZXRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIExpc3QgUGFnZSBSYW5nZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHNfMShvZmZzZXQgPSAwLCBjb3VudCwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGxldCBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZTtcbiAgICAgICAgICAgIGlmICghIW1hcmtlciB8fCBtYXJrZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2UgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMubGlzdFBhZ2VSYW5nZXNTZWdtZW50KG9mZnNldCwgY291bnQsIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIG9mIHtAbGluayBQYWdlUmFuZ2VJbmZvfSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gTGlzdCBQYWdlIFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZUl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0UGFnZVJhbmdlSXRlbXNfMShvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMSwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5saXN0UGFnZVJhbmdlSXRlbVNlZ21lbnRzKG9mZnNldCwgY291bnQsIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0UGFnZVJhbmdlc1NlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKEV4dHJhY3RQYWdlUmFuZ2VJbmZvSXRlbXMoZ2V0UGFnZVJhbmdlc1NlZ21lbnQpKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBfZS5yZXR1cm4pKSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9iLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IG9mIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqICAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IG9mIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBHZXQgdGhlIHBhZ2VCbG9iQ2xpZW50IGJlZm9yZSB5b3UgcnVuIHRoZXNlIHNuaXBwZXRzLFxuICAgICAqIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8eW91ci1jb250YWluZXItbmFtZT5cIikuZ2V0UGFnZUJsb2JDbGllbnQoXCI8eW91ci1ibG9iLW5hbWU+XCIpO2BcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBwYWdlUmFuZ2Ugb2YgcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXMoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXIgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpO1xuICAgICAqIGxldCBwYWdlUmFuZ2VJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFwYWdlUmFuZ2VJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLnN0YXJ0fSAtICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5lbmR9LCBJc0NsZWFyOiAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuaXNDbGVhcn1gKTtcbiAgICAgKiAgIHBhZ2VSYW5nZUl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgZm9yIChjb25zdCBwYWdlUmFuZ2Ugb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBwYWdlIHJhbmdlc1xuICAgICAqIGZvciAoY29uc3QgcGFnZVJhbmdlIG9mIHJlc3BvbnNlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqXG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqXG4gICAgICogaXRlcmF0b3IgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpLmJ5UGFnZSh7IGNvbnRpbnVhdGlvblRva2VuOiBtYXJrZXIsIG1heFBhZ2VTaXplOiAxMCB9KTtcbiAgICAgKiByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDEwIHBhZ2UgcmFuZ2VzXG4gICAgICogZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RQYWdlUmFuZ2VzKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGl0ZXIgPSB0aGlzLmxpc3RQYWdlUmFuZ2VJdGVtcyhvZmZzZXQsIGNvdW50LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHMob2Zmc2V0LCBjb3VudCwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0IHJhbmdlcyBkaWZmLlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3QgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2UgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UGFnZVJhbmdlc0RpZmYob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWdldFBhZ2VSYW5nZXNEaWZmXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuZ2V0UGFnZVJhbmdlc0RpZmYoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcmV2c25hcHNob3Q6IHByZXZTbmFwc2hvdCxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVzcG9uc2VGcm9tTW9kZWwocmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGdldFBhZ2VSYW5nZXNEaWZmU2VnbWVudCByZXR1cm5zIGEgc2luZ2xlIHNlZ21lbnQgb2YgcGFnZSByYW5nZXMgc3RhcnRpbmcgZnJvbSB0aGVcbiAgICAgKiBzcGVjaWZpZWQgTWFya2VyIGZvciBkaWZmZXJlbmNlIGJldHdlZW4gcHJldmlvdXMgc25hcHNob3QgYW5kIHRoZSB0YXJnZXQgcGFnZSBibG9iLlxuICAgICAqIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGdldFBhZ2VSYW5nZXNEaWZmU2VnbWVudCBhZ2FpblxuICAgICAqIChwYXNzaW5nIHRoZSB0aGUgcHJldmlvdXNseS1yZXR1cm5lZCBNYXJrZXIpIHRvIGdldCB0aGUgbmV4dCBzZWdtZW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIHByZXZTbmFwc2hvdE9yVXJsIC0gVGltZXN0YW1wIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlIG9yIFVSTCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBnZXQgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBnZXQgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0UGFnZVJhbmdlc0RpZmZTZWdtZW50KG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWdldFBhZ2VSYW5nZXNEaWZmU2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzRGlmZih7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcHJldnNuYXBzaG90OiBwcmV2U25hcHNob3RPclVybCxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBjb3VudDogY291bnQsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFya2VyOiBtYXJrZXIsXG4gICAgICAgICAgICAgICAgbWF4UGFnZVNpemU6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tYXhQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3Ige0BsaW5rIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZSZXNwb25zZU1vZGVsfVxuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90T3JVcmwgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2Ugb3IgVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdldCBvZiBwYWdlIHJhbmdlcyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGdldHRpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIHBhZ2UgcmFuZ2VzIHJlbWFpbmluZyB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGdldFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZXMgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZURpZmZJdGVtU2VnbWVudHMob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90T3JVcmwsIG1hcmtlciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50c18xKCkge1xuICAgICAgICAgICAgbGV0IGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0UGFnZVJhbmdlc0RpZmZTZWdtZW50KG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliLl9fYXdhaXQoeWllbGQgdHNsaWIuX19hd2FpdChnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBvZiB7QGxpbmsgUGFnZVJhbmdlSW5mb30gb2JqZWN0c1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIHByZXZTbmFwc2hvdE9yVXJsIC0gVGltZXN0YW1wIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlIG9yIFVSTCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZXMgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZURpZmZJdGVtcyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3RPclVybCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1zXzEoKSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMiwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5saXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3RPclVybCwgbWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRQYWdlUmFuZ2VzU2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoRXh0cmFjdFBhZ2VSYW5nZUluZm9JdGVtcyhnZXRQYWdlUmFuZ2VzU2VnbWVudCkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcGFnZSByYW5nZXMgdGhhdCBkaWZmZXIgYmV0d2VlbiBhIHNwZWNpZmllZCBzbmFwc2hvdCBhbmQgdGhpcyBwYWdlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiAgLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBHZXQgdGhlIHBhZ2VCbG9iQ2xpZW50IGJlZm9yZSB5b3UgcnVuIHRoZXNlIHNuaXBwZXRzLFxuICAgICAqIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8eW91ci1jb250YWluZXItbmFtZT5cIikuZ2V0UGFnZUJsb2JDbGllbnQoXCI8eW91ci1ibG9iLW5hbWU+XCIpO2BcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBwYWdlUmFuZ2Ugb2YgcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCk7XG4gICAgICogbGV0IHBhZ2VSYW5nZUl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIXBhZ2VSYW5nZUl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuc3RhcnR9IC0gJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLmVuZH0sIElzQ2xlYXI6ICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5pc0NsZWFyfWApO1xuICAgICAqICAgcGFnZVJhbmdlSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzRGlmZigpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgZm9yIChjb25zdCBwYWdlUmFuZ2Ugb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzRGlmZigpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgcGFnZSByYW5nZXNcbiAgICAgKiBmb3IgKGNvbnN0IHBhZ2VSYW5nZSBvZiByZXNwb25zZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gR2V0cyBuZXh0IG1hcmtlclxuICAgICAqIGxldCBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgKlxuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKlxuICAgICAqIGl0ZXJhdG9yID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMTAgcGFnZSByYW5nZXNcbiAgICAgKiBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90IC0gVGltZXN0YW1wIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBSYW5nZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIEFuIGFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHN1cHBvcnRzIHBhZ2luZy5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlc0RpZmYob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGl0ZXIgPSB0aGlzLmxpc3RQYWdlUmFuZ2VEaWZmSXRlbXMob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90LCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBuZXh0IG1ldGhvZCwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIubmV4dCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIGNvbm5lY3Rpb24gdG8gdGhlIGFzeW5jIGl0ZXJhdG9yLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybiBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCB3b3JrcyBhIHBhZ2UgYXQgYSB0aW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJ5UGFnZTogKHNldHRpbmdzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbGxlY3Rpb24gb2YgcGFnZSByYW5nZXMgdGhhdCBkaWZmZXIgYmV0d2VlbiBhIHNwZWNpZmllZCBzbmFwc2hvdCBhbmQgdGhpcyBwYWdlIGJsb2IgZm9yIG1hbmFnZWQgZGlza3MuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldCByYW5nZXMgZGlmZi5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90VXJsIC0gVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlIERpZmYgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFBhZ2VSYW5nZXNEaWZmRm9yTWFuYWdlZERpc2tzKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdFVybCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1HZXRQYWdlUmFuZ2VzRGlmZkZvck1hbmFnZWREaXNrc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuZ2V0UGFnZVJhbmdlc0RpZmYoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcmV2U25hcHNob3RVcmwsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZVJlc3BvbnNlRnJvbU1vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2l6ZXMgdGhlIHBhZ2UgYmxvYiB0byB0aGUgc3BlY2lmaWVkIHNpemUgKHdoaWNoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA1MTIpLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gVGFyZ2V0IHNpemVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBSZXNpemUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgUmVzaXplIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyByZXNpemUoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1yZXNpemVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQucmVzaXplKHNpemUsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgcGFnZSBibG9iJ3Mgc2VxdWVuY2UgbnVtYmVyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlckFjdGlvbiAtIEluZGljYXRlcyBob3cgdGhlIHNlcnZpY2Ugc2hvdWxkIG1vZGlmeSB0aGUgYmxvYidzIHNlcXVlbmNlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gc2VxdWVuY2VOdW1iZXIgLSBSZXF1aXJlZCBpZiBzZXF1ZW5jZU51bWJlckFjdGlvbiBpcyBtYXggb3IgdXBkYXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgVXBkYXRlIFNlcXVlbmNlIE51bWJlciBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBVcGRhdGUgU2VxdWVuY2UgTnVtYmVyIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVTZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlckFjdGlvbiwgc2VxdWVuY2VOdW1iZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtdXBkYXRlU2VxdWVuY2VOdW1iZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQudXBkYXRlU2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1iZXJBY3Rpb24sIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHNlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCZWdpbnMgYW4gb3BlcmF0aW9uIHRvIHN0YXJ0IGFuIGluY3JlbWVudGFsIGNvcHkgZnJvbSBvbmUgcGFnZSBibG9iJ3Mgc25hcHNob3QgdG8gdGhpcyBwYWdlIGJsb2IuXG4gICAgICogVGhlIHNuYXBzaG90IGlzIGNvcGllZCBzdWNoIHRoYXQgb25seSB0aGUgZGlmZmVyZW50aWFsIGNoYW5nZXMgYmV0d2VlbiB0aGUgcHJldmlvdXNseVxuICAgICAqIGNvcGllZCBzbmFwc2hvdCBhcmUgdHJhbnNmZXJyZWQgdG8gdGhlIGRlc3RpbmF0aW9uLlxuICAgICAqIFRoZSBjb3BpZWQgc25hcHNob3RzIGFyZSBjb21wbGV0ZSBjb3BpZXMgb2YgdGhlIG9yaWdpbmFsIHNuYXBzaG90IGFuZCBjYW4gYmUgcmVhZCBvciBjb3BpZWQgZnJvbSBhcyB1c3VhbC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9pbmNyZW1lbnRhbC1jb3B5LWJsb2JcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZXMvd2luZG93cy9pbmNyZW1lbnRhbC1zbmFwc2hvdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgcGFnZSBibG9iIHNuYXBzaG90LiBGb3IgZXhhbXBsZSxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iP3NuYXBzaG90PTxEYXRlVGltZT5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBDb3B5IEluY3JlbWVudGFsIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIENvcHkgSW5jcmVtZW50YWwgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0Q29weUluY3JlbWVudGFsKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LXN0YXJ0Q29weUluY3JlbWVudGFsXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmNvcHlJbmNyZW1lbnRhbChjb3B5U291cmNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmFzeW5jIGZ1bmN0aW9uIGdldEJvZHlBc1RleHQoYmF0Y2hSZXNwb25zZSkge1xuICAgIGxldCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoQkFUQ0hfTUFYX1BBWUxPQURfSU5fQllURVMpO1xuICAgIGNvbnN0IHJlc3BvbnNlTGVuZ3RoID0gYXdhaXQgc3RyZWFtVG9CdWZmZXIyKGJhdGNoUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBidWZmZXIpO1xuICAgIC8vIFNsaWNlIHRoZSBidWZmZXIgdG8gdHJpbSB0aGUgZW1wdHkgZW5kaW5nLlxuICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgwLCByZXNwb25zZUxlbmd0aCk7XG4gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gdXRmOEJ5dGVMZW5ndGgoc3RyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKHN0cik7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY29uc3QgSFRUUF9IRUFERVJfREVMSU1JVEVSID0gXCI6IFwiO1xuY29uc3QgU1BBQ0VfREVMSU1JVEVSID0gXCIgXCI7XG5jb25zdCBOT1RfRk9VTkQgPSAtMTtcbi8qKlxuICogVXRpbCBjbGFzcyBmb3IgcGFyc2luZyBiYXRjaCByZXNwb25zZS5cbiAqL1xuY2xhc3MgQmF0Y2hSZXNwb25zZVBhcnNlciB7XG4gICAgY29uc3RydWN0b3IoYmF0Y2hSZXNwb25zZSwgc3ViUmVxdWVzdHMpIHtcbiAgICAgICAgaWYgKCFiYXRjaFJlc3BvbnNlIHx8ICFiYXRjaFJlc3BvbnNlLmNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAvLyBJbiBzcGVjaWFsIGNhc2UocmVwb3J0ZWQpLCBzZXJ2ZXIgbWF5IHJldHVybiBpbnZhbGlkIGNvbnRlbnQtdHlwZSB3aGljaCBjb3VsZCBub3QgYmUgcGFyc2VkLlxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJiYXRjaFJlc3BvbnNlIGlzIG1hbGZvcm1lZCBvciBkb2Vzbid0IGNvbnRhaW4gdmFsaWQgY29udGVudC10eXBlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN1YlJlcXVlc3RzIHx8IHN1YlJlcXVlc3RzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHByZXZlbnQgZHVyaW5nIGNvZGluZy5cbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBzdGF0ZTogc3ViUmVxdWVzdHMgaXMgbm90IHByb3ZpZGVkIG9yIHNpemUgaXMgMC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iYXRjaFJlc3BvbnNlID0gYmF0Y2hSZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdWJSZXF1ZXN0cyA9IHN1YlJlcXVlc3RzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlQmF0Y2hCb3VuZGFyeSA9IHRoaXMuYmF0Y2hSZXNwb25zZS5jb250ZW50VHlwZS5zcGxpdChcIj1cIilbMV07XG4gICAgICAgIHRoaXMucGVyUmVzcG9uc2VQcmVmaXggPSBgLS0ke3RoaXMucmVzcG9uc2VCYXRjaEJvdW5kYXJ5fSR7SFRUUF9MSU5FX0VORElOR31gO1xuICAgICAgICB0aGlzLmJhdGNoUmVzcG9uc2VFbmRpbmcgPSBgLS0ke3RoaXMucmVzcG9uc2VCYXRjaEJvdW5kYXJ5fS0tYDtcbiAgICB9XG4gICAgLy8gRm9yIGV4YW1wbGUgb2YgcmVzcG9uc2UsIHBsZWFzZSByZWZlciB0byBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaCNyZXNwb25zZVxuICAgIGFzeW5jIHBhcnNlQmF0Y2hSZXNwb25zZSgpIHtcbiAgICAgICAgLy8gV2hlbiBsb2dpYyByZWFjaCBoZXJlLCBzdXBwb3NlIGJhdGNoIHJlcXVlc3QgaGFzIGFscmVhZHkgc3VjY2VlZGVkIHdpdGggMjAyLCBzbyB3ZSBjYW4gZnVydGhlciBwYXJzZVxuICAgICAgICAvLyBzdWIgcmVxdWVzdCdzIHJlc3BvbnNlLlxuICAgICAgICBpZiAodGhpcy5iYXRjaFJlc3BvbnNlLl9yZXNwb25zZS5zdGF0dXMgIT09IEhUVFBVUkxDb25uZWN0aW9uLkhUVFBfQUNDRVBURUQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZTogYmF0Y2ggcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXM6ICcke3RoaXMuYmF0Y2hSZXNwb25zZS5fcmVzcG9uc2Uuc3RhdHVzfScuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5QXNUZXh0ID0gYXdhaXQgZ2V0Qm9keUFzVGV4dCh0aGlzLmJhdGNoUmVzcG9uc2UpO1xuICAgICAgICBjb25zdCBzdWJSZXNwb25zZXMgPSByZXNwb25zZUJvZHlBc1RleHRcbiAgICAgICAgICAgIC5zcGxpdCh0aGlzLmJhdGNoUmVzcG9uc2VFbmRpbmcpWzBdIC8vIHN0cmluZyBhZnRlciBlbmRpbmcgaXMgdXNlbGVzc1xuICAgICAgICAgICAgLnNwbGl0KHRoaXMucGVyUmVzcG9uc2VQcmVmaXgpXG4gICAgICAgICAgICAuc2xpY2UoMSk7IC8vIHN0cmluZyBiZWZvcmUgZmlyc3QgcmVzcG9uc2UgYm91bmRhcnkgaXMgdXNlbGVzc1xuICAgICAgICBjb25zdCBzdWJSZXNwb25zZUNvdW50ID0gc3ViUmVzcG9uc2VzLmxlbmd0aDtcbiAgICAgICAgLy8gRGVmZW5zaXZlIGNvZGluZyBpbiBjYXNlIG9mIHBvdGVudGlhbCBlcnJvciBwYXJzaW5nLlxuICAgICAgICAvLyBOb3RlOiBzdWJSZXNwb25zZUNvdW50ID09IDEgaXMgc3BlY2lhbCBjYXNlIHdoZXJlIHN1YiByZXF1ZXN0IGlzIGludmFsaWQuXG4gICAgICAgIC8vIFdlIHRyeSB0byBwcmV2ZW50IHN1Y2ggY2FzZXMgdGhyb3VnaCBlYXJseSB2YWxpZGF0aW9uLCBlLmcuIHZhbGlkYXRlIHN1YiByZXF1ZXN0IGNvdW50ID49IDEuXG4gICAgICAgIC8vIFdoaWxlIGluIHVuZXhwZWN0ZWQgc3ViIHJlcXVlc3QgaW52YWxpZCBjYXNlLCB3ZSBhbGxvdyBzdWIgcmVzcG9uc2UgdG8gYmUgcGFyc2VkIGFuZCByZXR1cm4gdG8gdXNlci5cbiAgICAgICAgaWYgKHN1YlJlc3BvbnNlQ291bnQgIT09IHRoaXMuc3ViUmVxdWVzdHMuc2l6ZSAmJiBzdWJSZXNwb25zZUNvdW50ICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzdWIgcmVzcG9uc2VzJyBjb3VudCBpcyBub3QgZXF1YWwgdG8gc3ViIHJlcXVlc3RzJyBjb3VudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2VzID0gbmV3IEFycmF5KHN1YlJlc3BvbnNlQ291bnQpO1xuICAgICAgICBsZXQgc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQgPSAwO1xuICAgICAgICBsZXQgc3ViUmVzcG9uc2VzRmFpbGVkQ291bnQgPSAwO1xuICAgICAgICAvLyBQYXJzZSBzdWIgc3ViUmVzcG9uc2VzLlxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3ViUmVzcG9uc2VDb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ViUmVzcG9uc2UgPSBzdWJSZXNwb25zZXNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLmhlYWRlcnMgPSBjb3JlSHR0cENvbXBhdC50b0h0dHBIZWFkZXJzTGlrZShjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZUh0dHBIZWFkZXJzKCkpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VMaW5lcyA9IHN1YlJlc3BvbnNlLnNwbGl0KGAke0hUVFBfTElORV9FTkRJTkd9YCk7XG4gICAgICAgICAgICBsZXQgc3ViUmVzcEhlYWRlclN0YXJ0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBzdWJSZXNwSGVhZGVyRW5kRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBzdWJSZXNwRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgY29udGVudElkID0gTk9UX0ZPVU5EO1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXNwb25zZUxpbmUgb2YgcmVzcG9uc2VMaW5lcykge1xuICAgICAgICAgICAgICAgIGlmICghc3ViUmVzcEhlYWRlclN0YXJ0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVudGlvbiBsaW5lIHRvIGluZGljYXRlIGNvbnRlbnQgSURcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS5zdGFydHNXaXRoKEhlYWRlckNvbnN0YW50cy5DT05URU5UX0lEKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudElkID0gcGFyc2VJbnQocmVzcG9uc2VMaW5lLnNwbGl0KEhUVFBfSEVBREVSX0RFTElNSVRFUilbMV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEh0dHAgdmVyc2lvbiBsaW5lIHdpdGggc3RhdHVzIGNvZGUgaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBzdWIgcmVxdWVzdCdzIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAvLyBFeGFtcGxlOiBIVFRQLzEuMSAyMDIgQWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS5zdGFydHNXaXRoKEhUVFBfVkVSU0lPTl8xXzEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbnMgPSByZXNwb25zZUxpbmUuc3BsaXQoU1BBQ0VfREVMSU1JVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLnN0YXR1cyA9IHBhcnNlSW50KHRva2Vuc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5zdGF0dXNNZXNzYWdlID0gdG9rZW5zLnNsaWNlKDIpLmpvaW4oU1BBQ0VfREVMSU1JVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCBjb252ZW50aW9uIGhlYWRlcnMgbm90IHNwZWNpZmljYWxseSBmb3Igc3ViIHJlcXVlc3QgaS5lLiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2h0dHAgYW5kIENvbnRlbnQtSUQ6ICpcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3ViIHJlc3BvbnNlJ3MgaGVhZGVyIHN0YXJ0IGxpbmUgYWxyZWFkeSBmb3VuZCwgYW5kIHRoZSBmaXJzdCBlbXB0eSBsaW5lIGluZGljYXRlcyBoZWFkZXIgZW5kIGxpbmUgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgIGlmICghc3ViUmVzcEhlYWRlckVuZEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJSZXNwSGVhZGVyRW5kRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIGVtcHR5IGxpbmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm90ZTogd2hlbiBjb2RlIHJlYWNoIGhlcmUsIGl0IGluZGljYXRlcyBzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCA9PSB0cnVlXG4gICAgICAgICAgICAgICAgaWYgKCFzdWJSZXNwSGVhZGVyRW5kRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS5pbmRleE9mKEhUVFBfSEVBREVSX0RFTElNSVRFUikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlbnNpdmUgY29kaW5nIHRvIHByZXZlbnQgZnJvbSBtaXNzaW5nIHZhbHVhYmxlIGxpbmVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBmaW5kIG5vbi1lbXB0eSBsaW5lICcke3Jlc3BvbnNlTGluZX0nIHdpdGhvdXQgSFRUUCBoZWFkZXIgZGVsaW1pdGVyICcke0hUVFBfSEVBREVSX0RFTElNSVRFUn0nLmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIGhlYWRlcnMgb2Ygc3ViIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbnMgPSByZXNwb25zZUxpbmUuc3BsaXQoSFRUUF9IRUFERVJfREVMSU1JVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuaGVhZGVycy5zZXQodG9rZW5zWzBdLCB0b2tlbnNbMV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzBdID09PSBIZWFkZXJDb25zdGFudHMuWF9NU19FUlJPUl9DT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5lcnJvckNvZGUgPSB0b2tlbnNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJSZXNwRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXNzZW1ibGUgYm9keSBvZiBzdWIgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuYm9keUFzVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuYm9keUFzVGV4dCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuYm9keUFzVGV4dCArPSByZXNwb25zZUxpbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBJbm5lciBmb3IgZW5kXG4gICAgICAgICAgICAvLyBUaGUgcmVzcG9uc2Ugd2lsbCBjb250YWluIHRoZSBDb250ZW50LUlEIGhlYWRlciBmb3IgZWFjaCBjb3JyZXNwb25kaW5nIHN1YnJlcXVlc3QgcmVzcG9uc2UgdG8gdXNlIGZvciB0cmFja2luZy5cbiAgICAgICAgICAgIC8vIFRoZSBDb250ZW50LUlEcyBhcmUgc2V0IHRvIGEgdmFsaWQgaW5kZXggaW4gdGhlIHN1YnJlcXVlc3RzIHdlIHNlbnQuIEluIHRoZSBzdGF0dXMgY29kZSAyMDIgcGF0aCwgd2UgY291bGQgZXhwZWN0IGl0XG4gICAgICAgICAgICAvLyB0byBiZSAxLTEgbWFwcGluZyBmcm9tIHRoZSBbMCwgc3ViUmVxdWVzdHMuc2l6ZSkgdG8gdGhlIENvbnRlbnQtSURzIHJldHVybmVkLiBJZiBub3QsIHdlIHNpbXBseSBkb24ndCByZXR1cm4gdGhhdFxuICAgICAgICAgICAgLy8gdW5leHBlY3RlZCBzdWJSZXNwb25zZSBpbiB0aGUgcGFyc2VkIHJlcG9uc2UgYW5kIHdlIGNhbiBhbHdheXMgbG9vayBpdCB1cCBpbiB0aGUgcmF3IHJlc3BvbnNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbiAgICAgICAgICAgIGlmIChjb250ZW50SWQgIT09IE5PVF9GT1VORCAmJlxuICAgICAgICAgICAgICAgIE51bWJlci5pc0ludGVnZXIoY29udGVudElkKSAmJlxuICAgICAgICAgICAgICAgIGNvbnRlbnRJZCA+PSAwICYmXG4gICAgICAgICAgICAgICAgY29udGVudElkIDwgdGhpcy5zdWJSZXF1ZXN0cy5zaXplICYmXG4gICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2VzW2NvbnRlbnRJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLl9yZXF1ZXN0ID0gdGhpcy5zdWJSZXF1ZXN0cy5nZXQoY29udGVudElkKTtcbiAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXNbY29udGVudElkXSA9IGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBzdWJSZXNwb25zZXNbJHtpbmRleH1dIGlzIGRyb3BwZWQgYXMgdGhlIENvbnRlbnQtSUQgaXMgbm90IGZvdW5kIG9yIGludmFsaWQsIENvbnRlbnQtSUQ6ICR7Y29udGVudElkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN1YlJlc3BGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXNGYWlsZWRDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3ViUmVzcG9uc2VzOiBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXMsXG4gICAgICAgICAgICBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudDogc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQsXG4gICAgICAgICAgICBzdWJSZXNwb25zZXNGYWlsZWRDb3VudDogc3ViUmVzcG9uc2VzRmFpbGVkQ291bnQsXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbnZhciBNdXRleExvY2tTdGF0dXM7XG4oZnVuY3Rpb24gKE11dGV4TG9ja1N0YXR1cykge1xuICAgIE11dGV4TG9ja1N0YXR1c1tNdXRleExvY2tTdGF0dXNbXCJMT0NLRURcIl0gPSAwXSA9IFwiTE9DS0VEXCI7XG4gICAgTXV0ZXhMb2NrU3RhdHVzW011dGV4TG9ja1N0YXR1c1tcIlVOTE9DS0VEXCJdID0gMV0gPSBcIlVOTE9DS0VEXCI7XG59KShNdXRleExvY2tTdGF0dXMgfHwgKE11dGV4TG9ja1N0YXR1cyA9IHt9KSk7XG4vKipcbiAqIEFuIGFzeW5jIG11dGV4IGxvY2suXG4gKi9cbmNsYXNzIE11dGV4IHtcbiAgICAvKipcbiAgICAgKiBMb2NrIGZvciBhIHNwZWNpZmljIGtleS4gSWYgdGhlIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQgYnkgYW5vdGhlciBjdXN0b21lciwgdGhlblxuICAgICAqIHdpbGwgd2FpdCB1bnRpbCBnZXR0aW5nIHRoZSBsb2NrLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSAtIGxvY2sga2V5XG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIGxvY2soa2V5KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMua2V5c1trZXldID09PSB1bmRlZmluZWQgfHwgdGhpcy5rZXlzW2tleV0gPT09IE11dGV4TG9ja1N0YXR1cy5VTkxPQ0tFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMua2V5c1trZXldID0gTXV0ZXhMb2NrU3RhdHVzLkxPQ0tFRDtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVW5sb2NrRXZlbnQoa2V5LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMua2V5c1trZXldID0gTXV0ZXhMb2NrU3RhdHVzLkxPQ0tFRDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5sb2NrIGEga2V5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSAtXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHVubG9jayhrZXkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXlzW2tleV0gPT09IE11dGV4TG9ja1N0YXR1cy5MT0NLRUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRVbmxvY2tFdmVudChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5c1trZXldO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhdGljIG9uVW5sb2NrRXZlbnQoa2V5LCBoYW5kbGVyKSB7XG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW2tleV0gPSBbaGFuZGxlcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1trZXldLnB1c2goaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGVtaXRVbmxvY2tFdmVudChrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2tleV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxpc3RlbmVyc1trZXldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmxpc3RlbmVyc1trZXldLnNoaWZ0KCk7XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuTXV0ZXgua2V5cyA9IHt9O1xuTXV0ZXgubGlzdGVuZXJzID0ge307XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBIEJsb2JCYXRjaCByZXByZXNlbnRzIGFuIGFnZ3JlZ2F0ZWQgc2V0IG9mIG9wZXJhdGlvbnMgb24gYmxvYnMuXG4gKiBDdXJyZW50bHksIG9ubHkgYGRlbGV0ZWAgYW5kIGBzZXRBY2Nlc3NUaWVyYCBhcmUgc3VwcG9ydGVkLlxuICovXG5jbGFzcyBCbG9iQmF0Y2gge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJhdGNoID0gXCJiYXRjaFwiO1xuICAgICAgICB0aGlzLmJhdGNoUmVxdWVzdCA9IG5ldyBJbm5lckJhdGNoUmVxdWVzdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIENvbnRlbnQtVHlwZSBmb3IgYSBiYXRjaCByZXF1ZXN0LlxuICAgICAqIFRoZSB2YWx1ZSBtdXN0IGJlIG11bHRpcGFydC9taXhlZCB3aXRoIGEgYmF0Y2ggYm91bmRhcnkuXG4gICAgICogRXhhbXBsZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF9hODE3ODZjOC1lMzAxLTRlNDItYTcyOS1hMzJjYTI0YWUyNTJcbiAgICAgKi9cbiAgICBnZXRNdWx0aVBhcnRDb250ZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hSZXF1ZXN0LmdldE11bHRpcGFydENvbnRlbnRUeXBlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhc3NlbWJsZWQgSFRUUCByZXF1ZXN0IGJvZHkgZm9yIHN1YiByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBnZXRIdHRwUmVxdWVzdEJvZHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoUmVxdWVzdC5nZXRIdHRwUmVxdWVzdEJvZHkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHN1YiByZXF1ZXN0cyB0aGF0IGFyZSBhZGRlZCBpbnRvIHRoZSBiYXRjaCByZXF1ZXN0LlxuICAgICAqL1xuICAgIGdldFN1YlJlcXVlc3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaFJlcXVlc3QuZ2V0U3ViUmVxdWVzdHMoKTtcbiAgICB9XG4gICAgYXN5bmMgYWRkU3ViUmVxdWVzdEludGVybmFsKHN1YlJlcXVlc3QsIGFzc2VtYmxlU3ViUmVxdWVzdEZ1bmMpIHtcbiAgICAgICAgYXdhaXQgTXV0ZXgubG9jayh0aGlzLmJhdGNoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0LnByZUFkZFN1YlJlcXVlc3Qoc3ViUmVxdWVzdCk7XG4gICAgICAgICAgICBhd2FpdCBhc3NlbWJsZVN1YlJlcXVlc3RGdW5jKCk7XG4gICAgICAgICAgICB0aGlzLmJhdGNoUmVxdWVzdC5wb3N0QWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IE11dGV4LnVubG9jayh0aGlzLmJhdGNoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRCYXRjaFR5cGUoYmF0Y2hUeXBlKSB7XG4gICAgICAgIGlmICghdGhpcy5iYXRjaFR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hUeXBlID0gYmF0Y2hUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJhdGNoVHlwZSAhPT0gYmF0Y2hUeXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQmxvYkJhdGNoIG9ubHkgc3VwcG9ydHMgb25lIG9wZXJhdGlvbiB0eXBlIHBlciBiYXRjaCBhbmQgaXQgYWxyZWFkeSBpcyBiZWluZyB1c2VkIGZvciAke3RoaXMuYmF0Y2hUeXBlfSBvcGVyYXRpb25zLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZUJsb2IodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JPcHRpb25zLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIGxldCBjcmVkZW50aWFsO1xuICAgICAgICBpZiAodHlwZW9mIHVybE9yQmxvYkNsaWVudCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yT3B0aW9ucyBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxPck9wdGlvbnMgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yT3B0aW9ucykpKSB7XG4gICAgICAgICAgICAvLyBGaXJzdCBvdmVybG9hZFxuICAgICAgICAgICAgdXJsID0gdXJsT3JCbG9iQ2xpZW50O1xuICAgICAgICAgICAgY3JlZGVudGlhbCA9IGNyZWRlbnRpYWxPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsT3JCbG9iQ2xpZW50IGluc3RhbmNlb2YgQmxvYkNsaWVudCkge1xuICAgICAgICAgICAgLy8gU2Vjb25kIG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQudXJsO1xuICAgICAgICAgICAgY3JlZGVudGlhbCA9IHVybE9yQmxvYkNsaWVudC5jcmVkZW50aWFsO1xuICAgICAgICAgICAgb3B0aW9ucyA9IGNyZWRlbnRpYWxPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgYXJndW1lbnRzLiBFaXRoZXIgdXJsIGFuZCBjcmVkZW50aWFsLCBvciBCbG9iQ2xpZW50IG5lZWQgYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmF0Y2hEZWxldGVSZXF1ZXN0LWFkZFN1YlJlcXVlc3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEJhdGNoVHlwZShcImRlbGV0ZVwiKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkU3ViUmVxdWVzdEludGVybmFsKHtcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsOiBjcmVkZW50aWFsLFxuICAgICAgICAgICAgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBCbG9iQ2xpZW50KHVybCwgdGhpcy5iYXRjaFJlcXVlc3QuY3JlYXRlUGlwZWxpbmUoY3JlZGVudGlhbCkpLmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHNldEJsb2JBY2Nlc3NUaWVyKHVybE9yQmxvYkNsaWVudCwgY3JlZGVudGlhbE9yVGllciwgdGllck9yT3B0aW9ucywgb3B0aW9ucykge1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBsZXQgY3JlZGVudGlhbDtcbiAgICAgICAgbGV0IHRpZXI7XG4gICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JUaWVyIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbE9yVGllciBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JUaWVyKSkpIHtcbiAgICAgICAgICAgIC8vIEZpcnN0IG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQ7XG4gICAgICAgICAgICBjcmVkZW50aWFsID0gY3JlZGVudGlhbE9yVGllcjtcbiAgICAgICAgICAgIHRpZXIgPSB0aWVyT3JPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybE9yQmxvYkNsaWVudCBpbnN0YW5jZW9mIEJsb2JDbGllbnQpIHtcbiAgICAgICAgICAgIC8vIFNlY29uZCBvdmVybG9hZFxuICAgICAgICAgICAgdXJsID0gdXJsT3JCbG9iQ2xpZW50LnVybDtcbiAgICAgICAgICAgIGNyZWRlbnRpYWwgPSB1cmxPckJsb2JDbGllbnQuY3JlZGVudGlhbDtcbiAgICAgICAgICAgIHRpZXIgPSBjcmVkZW50aWFsT3JUaWVyO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHRpZXJPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgYXJndW1lbnRzLiBFaXRoZXIgdXJsIGFuZCBjcmVkZW50aWFsLCBvciBCbG9iQ2xpZW50IG5lZWQgYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmF0Y2hTZXRUaWVyUmVxdWVzdC1hZGRTdWJSZXF1ZXN0XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRCYXRjaFR5cGUoXCJzZXRBY2Nlc3NUaWVyXCIpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRTdWJSZXF1ZXN0SW50ZXJuYWwoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWwsXG4gICAgICAgICAgICB9LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IEJsb2JDbGllbnQodXJsLCB0aGlzLmJhdGNoUmVxdWVzdC5jcmVhdGVQaXBlbGluZShjcmVkZW50aWFsKSkuc2V0QWNjZXNzVGllcih0aWVyLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBJbm5lciBiYXRjaCByZXF1ZXN0IGNsYXNzIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBhc3NlbWJsaW5nIGFuZCBzZXJpYWxpemluZyBzdWIgcmVxdWVzdHMuXG4gKiBTZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2gjcmVxdWVzdC1ib2R5IGZvciBob3cgcmVxdWVzdHMgYXJlIGFzc2VtYmxlZC5cbiAqL1xuY2xhc3MgSW5uZXJCYXRjaFJlcXVlc3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9wZXJhdGlvbkNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5ib2R5ID0gXCJcIjtcbiAgICAgICAgY29uc3QgdGVtcEd1aWQgPSBjb3JlVXRpbC5yYW5kb21VVUlEKCk7XG4gICAgICAgIC8vIGJhdGNoX3tiYXRjaGlkfVxuICAgICAgICB0aGlzLmJvdW5kYXJ5ID0gYGJhdGNoXyR7dGVtcEd1aWR9YDtcbiAgICAgICAgLy8gLS1iYXRjaF97YmF0Y2hpZH1cbiAgICAgICAgLy8gQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9odHRwXG4gICAgICAgIC8vIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeVxuICAgICAgICB0aGlzLnN1YlJlcXVlc3RQcmVmaXggPSBgLS0ke3RoaXMuYm91bmRhcnl9JHtIVFRQX0xJTkVfRU5ESU5HfSR7SGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfVFlQRX06IGFwcGxpY2F0aW9uL2h0dHAke0hUVFBfTElORV9FTkRJTkd9JHtIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElOR306IGJpbmFyeWA7XG4gICAgICAgIC8vIG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9YmF0Y2hfe2JhdGNoaWR9XG4gICAgICAgIHRoaXMubXVsdGlwYXJ0Q29udGVudFR5cGUgPSBgbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0ke3RoaXMuYm91bmRhcnl9YDtcbiAgICAgICAgLy8gLS1iYXRjaF97YmF0Y2hpZH0tLVxuICAgICAgICB0aGlzLmJhdGNoUmVxdWVzdEVuZGluZyA9IGAtLSR7dGhpcy5ib3VuZGFyeX0tLWA7XG4gICAgICAgIHRoaXMuc3ViUmVxdWVzdHMgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBwaXBlbGluZSB0byBhc3NlbWJsZSBzdWIgcmVxdWVzdHMuIFRoZSBpZGVhIGhlcmUgaXMgdG8gdXNlIGV4aXN0aW5nXG4gICAgICogY3JlZGVudGlhbCBhbmQgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gY29tcG9uZW50cywgd2l0aCBhZGRpdGlvbmFsIHBvbGljaWVzIHRvXG4gICAgICogZmlsdGVyIHVubmVjZXNzYXJ5IGhlYWRlcnMsIGFzc2VtYmxlIHN1YiByZXF1ZXN0cyBpbnRvIHJlcXVlc3QncyBib2R5XG4gICAgICogYW5kIGludGVyY2VwdCByZXF1ZXN0IGZyb20gZ29pbmcgdG8gd2lyZS5cbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbCAtICBTdWNoIGFzIEFub255bW91c0NyZWRlbnRpYWwsIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIG9yIGFueSBjcmVkZW50aWFsIGZyb20gdGhlIGBAYXp1cmUvaWRlbnRpdHlgIHBhY2thZ2UgdG8gYXV0aGVudGljYXRlIHJlcXVlc3RzIHRvIHRoZSBzZXJ2aWNlLiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBUb2tlbkNyZWRlbnRpYWwgaW50ZXJmYWNlLiBJZiBub3Qgc3BlY2lmaWVkLCBBbm9ueW1vdXNDcmVkZW50aWFsIGlzIHVzZWQuXG4gICAgICovXG4gICAgY3JlYXRlUGlwZWxpbmUoY3JlZGVudGlhbCkge1xuICAgICAgICBjb25zdCBjb3JlUGlwZWxpbmUgPSBjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZUVtcHR5UGlwZWxpbmUoKTtcbiAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShjb3JlQ2xpZW50LnNlcmlhbGl6YXRpb25Qb2xpY3koe1xuICAgICAgICAgICAgc3RyaW5naWZ5WE1MOiBjb3JlWG1sLnN0cmluZ2lmeVhNTCxcbiAgICAgICAgICAgIHNlcmlhbGl6ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgICAgIHhtbENoYXJLZXk6IFwiI1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSwgeyBwaGFzZTogXCJTZXJpYWxpemVcIiB9KTtcbiAgICAgICAgLy8gVXNlIGJhdGNoIGhlYWRlciBmaWx0ZXIgcG9saWN5IHRvIGV4Y2x1ZGUgdW5uZWNlc3NhcnkgaGVhZGVyc1xuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGJhdGNoSGVhZGVyRmlsdGVyUG9saWN5KCkpO1xuICAgICAgICAvLyBVc2UgYmF0Y2ggYXNzZW1ibGUgcG9saWN5IHRvIGFzc2VtYmxlIHJlcXVlc3QgYW5kIGludGVyY2VwdCByZXF1ZXN0IGZyb20gZ29pbmcgdG8gd2lyZVxuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGJhdGNoUmVxdWVzdEFzc2VtYmxlUG9saWN5KHRoaXMpLCB7IGFmdGVyUGhhc2U6IFwiU2lnblwiIH0pO1xuICAgICAgICBpZiAoY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koY29yZVJlc3RQaXBlbGluZS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KHtcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsLFxuICAgICAgICAgICAgICAgIHNjb3BlczogU3RvcmFnZU9BdXRoU2NvcGVzLFxuICAgICAgICAgICAgICAgIGNoYWxsZW5nZUNhbGxiYWNrczogeyBhdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2U6IGNvcmVDbGllbnQuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlIH0sXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhY2NvdW50TmFtZTogY3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgICAgICBhY2NvdW50S2V5OiBjcmVkZW50aWFsLmFjY291bnRLZXksXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUoW10pO1xuICAgICAgICAvLyBhdHRhY2ggdGhlIHYyIHBpcGVsaW5lIHRvIHRoaXMgb25lXG4gICAgICAgIHBpcGVsaW5lLl9jcmVkZW50aWFsID0gY3JlZGVudGlhbDtcbiAgICAgICAgcGlwZWxpbmUuX2NvcmVQaXBlbGluZSA9IGNvcmVQaXBlbGluZTtcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lO1xuICAgIH1cbiAgICBhcHBlbmRTdWJSZXF1ZXN0VG9Cb2R5KHJlcXVlc3QpIHtcbiAgICAgICAgLy8gU3RhcnQgdG8gYXNzZW1ibGUgc3ViIHJlcXVlc3RcbiAgICAgICAgdGhpcy5ib2R5ICs9IFtcbiAgICAgICAgICAgIHRoaXMuc3ViUmVxdWVzdFByZWZpeCwgLy8gc3ViIHJlcXVlc3QgY29uc3RhbnQgcHJlZml4XG4gICAgICAgICAgICBgJHtIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9JRH06ICR7dGhpcy5vcGVyYXRpb25Db3VudH1gLCAvLyBzdWIgcmVxdWVzdCdzIGNvbnRlbnQgSURcbiAgICAgICAgICAgIFwiXCIsIC8vIGVtcHR5IGxpbmUgYWZ0ZXIgc3ViIHJlcXVlc3QncyBjb250ZW50IElEXG4gICAgICAgICAgICBgJHtyZXF1ZXN0Lm1ldGhvZC50b1N0cmluZygpfSAke2dldFVSTFBhdGhBbmRRdWVyeShyZXF1ZXN0LnVybCl9ICR7SFRUUF9WRVJTSU9OXzFfMX0ke0hUVFBfTElORV9FTkRJTkd9YCwgLy8gc3ViIHJlcXVlc3Qgc3RhcnQgbGluZSB3aXRoIG1ldGhvZFxuICAgICAgICBdLmpvaW4oSFRUUF9MSU5FX0VORElORyk7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiByZXF1ZXN0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keSArPSBgJHtuYW1lfTogJHt2YWx1ZX0ke0hUVFBfTElORV9FTkRJTkd9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkgKz0gSFRUUF9MSU5FX0VORElORzsgLy8gc3ViIHJlcXVlc3QncyBoZWFkZXJzIG5lZWQgYmUgZW5kaW5nIHdpdGggYW4gZW1wdHkgbGluZVxuICAgICAgICAvLyBObyBib2R5IHRvIGFzc2VtYmxlIGZvciBjdXJyZW50IGJhdGNoIHJlcXVlc3Qgc3VwcG9ydFxuICAgICAgICAvLyBFbmQgdG8gYXNzZW1ibGUgc3ViIHJlcXVlc3RcbiAgICB9XG4gICAgcHJlQWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbkNvdW50ID49IEJBVENIX01BWF9SRVFVRVNUKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IGV4Y2VlZCAke0JBVENIX01BWF9SRVFVRVNUfSBzdWIgcmVxdWVzdHMgaW4gYSBzaW5nbGUgYmF0Y2hgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGYXN0IGZhaWwgaWYgdXJsIGZvciBzdWIgcmVxdWVzdCBpcyBpbnZhbGlkXG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRVUkxQYXRoKHN1YlJlcXVlc3QudXJsKTtcbiAgICAgICAgaWYgKCFwYXRoIHx8IHBhdGggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHVybCBmb3Igc3ViIHJlcXVlc3Q6ICcke3N1YlJlcXVlc3QudXJsfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwb3N0QWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuc3ViUmVxdWVzdHMuc2V0KHRoaXMub3BlcmF0aW9uQ291bnQsIHN1YlJlcXVlc3QpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbkNvdW50Kys7XG4gICAgfVxuICAgIC8vIFJldHVybiB0aGUgaHR0cCByZXF1ZXN0IGJvZHkgd2l0aCBhc3NlbWJsaW5nIHRoZSBlbmRpbmcgbGluZSB0byB0aGUgc3ViIHJlcXVlc3QgYm9keS5cbiAgICBnZXRIdHRwUmVxdWVzdEJvZHkoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmJvZHl9JHt0aGlzLmJhdGNoUmVxdWVzdEVuZGluZ30ke0hUVFBfTElORV9FTkRJTkd9YDtcbiAgICB9XG4gICAgZ2V0TXVsdGlwYXJ0Q29udGVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGFydENvbnRlbnRUeXBlO1xuICAgIH1cbiAgICBnZXRTdWJSZXF1ZXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViUmVxdWVzdHM7XG4gICAgfVxufVxuZnVuY3Rpb24gYmF0Y2hSZXF1ZXN0QXNzZW1ibGVQb2xpY3koYmF0Y2hSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogXCJiYXRjaFJlcXVlc3RBc3NlbWJsZVBvbGljeVwiLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgICAgICBiYXRjaFJlcXVlc3QuYXBwZW5kU3ViUmVxdWVzdFRvQm9keShyZXF1ZXN0KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZUh0dHBIZWFkZXJzKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiBiYXRjaEhlYWRlckZpbHRlclBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcImJhdGNoSGVhZGVyRmlsdGVyUG9saWN5XCIsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGxldCB4TXNIZWFkZXJOYW1lID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWVdIG9mIHJlcXVlc3QuaGVhZGVycykge1xuICAgICAgICAgICAgICAgIGlmIChpRXF1YWwobmFtZSwgSGVhZGVyQ29uc3RhbnRzLlhfTVNfVkVSU0lPTikpIHtcbiAgICAgICAgICAgICAgICAgICAgeE1zSGVhZGVyTmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHhNc0hlYWRlck5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZGVsZXRlKHhNc0hlYWRlck5hbWUpOyAvLyBUaGUgc3VicmVxdWVzdHMgc2hvdWxkIG5vdCBoYXZlIHRoZSB4LW1zLXZlcnNpb24gaGVhZGVyLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgQmxvYkJhdGNoQ2xpZW50IGFsbG93cyB5b3UgdG8gbWFrZSBiYXRjaGVkIHJlcXVlc3RzIHRvIHRoZSBBenVyZSBTdG9yYWdlIEJsb2Igc2VydmljZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoXG4gKi9cbmNsYXNzIEJsb2JCYXRjaENsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXJsLCBjcmVkZW50aWFsT3JQaXBlbGluZSwgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZSkpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWNyZWRlbnRpYWxPclBpcGVsaW5lKSB7XG4gICAgICAgICAgICAvLyBubyBjcmVkZW50aWFsIHByb3ZpZGVkXG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShjcmVkZW50aWFsT3JQaXBlbGluZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcmFnZUNsaWVudENvbnRleHQgPSBuZXcgU3RvcmFnZUNvbnRleHRDbGllbnQodXJsLCBnZXRDb3JlQ2xpZW50T3B0aW9ucyhwaXBlbGluZSkpO1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0VVJMUGF0aCh1cmwpO1xuICAgICAgICBpZiAocGF0aCAmJiBwYXRoICE9PSBcIi9cIikge1xuICAgICAgICAgICAgLy8gQ29udGFpbmVyIHNjb3BlZC5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZU9yQ29udGFpbmVyQ29udGV4dCA9IHN0b3JhZ2VDbGllbnRDb250ZXh0LmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZU9yQ29udGFpbmVyQ29udGV4dCA9IHN0b3JhZ2VDbGllbnRDb250ZXh0LnNlcnZpY2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBCbG9iQmF0Y2h9LlxuICAgICAqIEEgQmxvYkJhdGNoIHJlcHJlc2VudHMgYW4gYWdncmVnYXRlZCBzZXQgb2Ygb3BlcmF0aW9ucyBvbiBibG9icy5cbiAgICAgKi9cbiAgICBjcmVhdGVCYXRjaCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iQmF0Y2goKTtcbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlQmxvYnModXJsc09yQmxvYkNsaWVudHMsIGNyZWRlbnRpYWxPck9wdGlvbnMsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYmF0Y2ggPSBuZXcgQmxvYkJhdGNoKCk7XG4gICAgICAgIGZvciAoY29uc3QgdXJsT3JCbG9iQ2xpZW50IG9mIHVybHNPckJsb2JDbGllbnRzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybE9yQmxvYkNsaWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGF3YWl0IGJhdGNoLmRlbGV0ZUJsb2IodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGJhdGNoLmRlbGV0ZUJsb2IodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRCYXRjaChiYXRjaCk7XG4gICAgfVxuICAgIGFzeW5jIHNldEJsb2JzQWNjZXNzVGllcih1cmxzT3JCbG9iQ2xpZW50cywgY3JlZGVudGlhbE9yVGllciwgdGllck9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBiYXRjaCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgICAgZm9yIChjb25zdCB1cmxPckJsb2JDbGllbnQgb2YgdXJsc09yQmxvYkNsaWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guc2V0QmxvYkFjY2Vzc1RpZXIodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGJhdGNoLnNldEJsb2JBY2Nlc3NUaWVyKHVybE9yQmxvYkNsaWVudCwgY3JlZGVudGlhbE9yVGllciwgdGllck9yT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0QmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdWJtaXQgYmF0Y2ggcmVxdWVzdCB3aGljaCBjb25zaXN0cyBvZiBtdWx0aXBsZSBzdWJyZXF1ZXN0cy5cbiAgICAgKlxuICAgICAqIEdldCBgYmxvYkJhdGNoQ2xpZW50YCBhbmQgb3RoZXIgZGV0YWlscyBiZWZvcmUgcnVubmluZyB0aGUgc25pcHBldHMuXG4gICAgICogYGJsb2JTZXJ2aWNlQ2xpZW50LmdldEJsb2JCYXRjaENsaWVudCgpYCBnaXZlcyB0aGUgYGJsb2JCYXRjaENsaWVudGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBiYXRjaFJlcXVlc3QgPSBuZXcgQmxvYkJhdGNoKCk7XG4gICAgICogYXdhaXQgYmF0Y2hSZXF1ZXN0LmRlbGV0ZUJsb2IodXJsSW5TdHJpbmcwLCBjcmVkZW50aWFsMCk7XG4gICAgICogYXdhaXQgYmF0Y2hSZXF1ZXN0LmRlbGV0ZUJsb2IodXJsSW5TdHJpbmcxLCBjcmVkZW50aWFsMSwge1xuICAgICAqICBkZWxldGVTbmFwc2hvdHM6IFwiaW5jbHVkZVwiXG4gICAgICogfSk7XG4gICAgICogY29uc3QgYmF0Y2hSZXNwID0gYXdhaXQgYmxvYkJhdGNoQ2xpZW50LnN1Ym1pdEJhdGNoKGJhdGNoUmVxdWVzdCk7XG4gICAgICogY29uc29sZS5sb2coYmF0Y2hSZXNwLnN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYSBsZWFzZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGJhdGNoUmVxdWVzdCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgKiBhd2FpdCBiYXRjaFJlcXVlc3Quc2V0QmxvYkFjY2Vzc1RpZXIoYmxvY2tCbG9iQ2xpZW50MCwgXCJDb29sXCIpO1xuICAgICAqIGF3YWl0IGJhdGNoUmVxdWVzdC5zZXRCbG9iQWNjZXNzVGllcihibG9ja0Jsb2JDbGllbnQxLCBcIkNvb2xcIiwge1xuICAgICAqICBjb25kaXRpb25zOiB7IGxlYXNlSWQ6IGxlYXNlSWQgfVxuICAgICAqIH0pO1xuICAgICAqIGNvbnN0IGJhdGNoUmVzcCA9IGF3YWl0IGJsb2JCYXRjaENsaWVudC5zdWJtaXRCYXRjaChiYXRjaFJlcXVlc3QpO1xuICAgICAqIGNvbnNvbGUubG9nKGJhdGNoUmVzcC5zdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmF0Y2hSZXF1ZXN0IC0gQSBzZXQgb2YgRGVsZXRlIG9yIFNldFRpZXIgb3BlcmF0aW9ucy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgc3VibWl0QmF0Y2goYmF0Y2hSZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFiYXRjaFJlcXVlc3QgfHwgYmF0Y2hSZXF1ZXN0LmdldFN1YlJlcXVlc3RzKCkuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCYXRjaCByZXF1ZXN0IHNob3VsZCBjb250YWluIG9uZSBvciBtb3JlIHN1YiByZXF1ZXN0cy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQmF0Y2hDbGllbnQtc3VibWl0QmF0Y2hcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXRjaFJlcXVlc3RCb2R5ID0gYmF0Y2hSZXF1ZXN0LmdldEh0dHBSZXF1ZXN0Qm9keSgpO1xuICAgICAgICAgICAgLy8gU2VydmljZVN1Ym1pdEJhdGNoUmVzcG9uc2VNb2RlbCBhbmQgQ29udGFpbmVyU3VibWl0QmF0Y2hSZXNwb25zZSBhcmUgY29tcGF0aWJsZSBmb3Igbm93LlxuICAgICAgICAgICAgY29uc3QgcmF3QmF0Y2hSZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZU9yQ29udGFpbmVyQ29udGV4dC5zdWJtaXRCYXRjaCh1dGY4Qnl0ZUxlbmd0aChiYXRjaFJlcXVlc3RCb2R5KSwgYmF0Y2hSZXF1ZXN0LmdldE11bHRpUGFydENvbnRlbnRUeXBlKCksIGJhdGNoUmVxdWVzdEJvZHksIE9iamVjdC5hc3NpZ24oe30sIHVwZGF0ZWRPcHRpb25zKSkpO1xuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHN1YiByZXNwb25zZXMgcmVzdWx0LCBpZiBsb2dpYyByZWFjaGVzIGhlcmUoaS5lLiB0aGUgYmF0Y2ggcmVxdWVzdCBzdWNjZWVkZWQgd2l0aCBzdGF0dXMgY29kZSAyMDIpLlxuICAgICAgICAgICAgY29uc3QgYmF0Y2hSZXNwb25zZVBhcnNlciA9IG5ldyBCYXRjaFJlc3BvbnNlUGFyc2VyKHJhd0JhdGNoUmVzcG9uc2UsIGJhdGNoUmVxdWVzdC5nZXRTdWJSZXF1ZXN0cygpKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlU3VtbWFyeSA9IGF3YWl0IGJhdGNoUmVzcG9uc2VQYXJzZXIucGFyc2VCYXRjaFJlc3BvbnNlKCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgX3Jlc3BvbnNlOiByYXdCYXRjaFJlc3BvbnNlLl9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogcmF3QmF0Y2hSZXNwb25zZS5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IHJhd0JhdGNoUmVzcG9uc2UuZXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmF3QmF0Y2hSZXNwb25zZS5yZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiByYXdCYXRjaFJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiByYXdCYXRjaFJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzOiByZXNwb25zZVN1bW1hcnkuc3ViUmVzcG9uc2VzLFxuICAgICAgICAgICAgICAgIHN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50OiByZXNwb25zZVN1bW1hcnkuc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQsXG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzRmFpbGVkQ291bnQ6IHJlc3BvbnNlU3VtbWFyeS5zdWJSZXNwb25zZXNGYWlsZWRDb3VudCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBDb250YWluZXJDbGllbnQgcmVwcmVzZW50cyBhIFVSTCB0byB0aGUgQXp1cmUgU3RvcmFnZSBjb250YWluZXIgYWxsb3dpbmcgeW91IHRvIG1hbmlwdWxhdGUgaXRzIGJsb2JzLlxuICovXG5jbGFzcyBDb250YWluZXJDbGllbnQgZXh0ZW5kcyBTdG9yYWdlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyLlxuICAgICAqL1xuICAgIGdldCBjb250YWluZXJOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyTmFtZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IodXJsT3JDb25uZWN0aW9uU3RyaW5nLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzO1xuICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0aW5nIG5vbi1lbXB0eSBzdHJpbmdzIGZvciBjb250YWluZXJOYW1lIHBhcmFtZXRlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyTmFtZSA9IHRoaXMuZ2V0Q29udGFpbmVyTmFtZUZyb21VcmwoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5jb250YWluZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgY29udGFpbmVyIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC4gSWYgdGhlIGNvbnRhaW5lciB3aXRoXG4gICAgICogdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlIG9wZXJhdGlvbiBmYWlscy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtY29udGFpbmVyXG4gICAgICogTmFtaW5nIHJ1bGVzOiBAc2VlIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1jb250YWluZXJzLS1ibG9icy0tYW5kLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIENyZWF0ZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjxjb250YWluZXIgbmFtZT5cIik7XG4gICAgICogY29uc3QgY3JlYXRlQ29udGFpbmVyUmVzcG9uc2UgPSBhd2FpdCBjb250YWluZXJDbGllbnQuY3JlYXRlKCk7XG4gICAgICogY29uc29sZS5sb2coXCJDb250YWluZXIgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5XCIsIGNyZWF0ZUNvbnRhaW5lclJlc3BvbnNlLnJlcXVlc3RJZCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1jcmVhdGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmNyZWF0ZSh1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb250YWluZXIgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LiBJZiB0aGUgY29udGFpbmVyIHdpdGhcbiAgICAgKiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCBpdCBpcyBub3QgY2hhbmdlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtY29udGFpbmVyXG4gICAgICogTmFtaW5nIHJ1bGVzOiBAc2VlIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1jb250YWluZXJzLS1ibG9icy0tYW5kLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSWZOb3RFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWNyZWF0ZUlmTm90RXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jcmVhdGUodXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IHRydWUgfSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gZS5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3JDb2RlKSA9PT0gXCJDb250YWluZXJBbHJlYWR5RXhpc3RzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBBenVyZSBjb250YWluZXIgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbGllbnQgZXhpc3RzOyBmYWxzZSBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBOT1RFOiB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoIGNhcmUgc2luY2UgYW4gZXhpc3RpbmcgY29udGFpbmVyIG1pZ2h0IGJlIGRlbGV0ZWQgYnkgb3RoZXIgY2xpZW50cyBvclxuICAgICAqIGFwcGxpY2F0aW9ucy4gVmljZSB2ZXJzYSBuZXcgY29udGFpbmVycyB3aXRoIHRoZSBzYW1lIG5hbWUgbWlnaHQgYmUgYWRkZWQgYnkgb3RoZXIgY2xpZW50cyBvclxuICAgICAqIGFwcGxpY2F0aW9ucyBhZnRlciB0aGlzIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBleGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmxvYkNsaWVudH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iTmFtZSAtIEEgYmxvYiBuYW1lXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkNsaWVudCBvYmplY3QgZm9yIHRoZSBnaXZlbiBibG9iIG5hbWUuXG4gICAgICovXG4gICAgZ2V0QmxvYkNsaWVudChibG9iTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIHtAbGluayBBcHBlbmRCbG9iQ2xpZW50fVxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gQW4gYXBwZW5kIGJsb2IgbmFtZVxuICAgICAqL1xuICAgIGdldEFwcGVuZEJsb2JDbGllbnQoYmxvYk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcHBlbmRCbG9iQ2xpZW50KGFwcGVuZFRvVVJMUGF0aCh0aGlzLnVybCwgRXNjYXBlUGF0aChibG9iTmFtZSkpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBCbG9ja0Jsb2JDbGllbnR9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBBIGJsb2NrIGJsb2IgbmFtZVxuICAgICAqXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb250ZW50ID0gXCJIZWxsbyB3b3JsZCFcIjtcbiAgICAgKlxuICAgICAqIGNvbnN0IGJsb2NrQmxvYkNsaWVudCA9IGNvbnRhaW5lckNsaWVudC5nZXRCbG9ja0Jsb2JDbGllbnQoXCI8YmxvYiBuYW1lPlwiKTtcbiAgICAgKiBjb25zdCB1cGxvYWRCbG9iUmVzcG9uc2UgPSBhd2FpdCBibG9ja0Jsb2JDbGllbnQudXBsb2FkKGNvbnRlbnQsIGNvbnRlbnQubGVuZ3RoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZXRCbG9ja0Jsb2JDbGllbnQoYmxvYk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0Jsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIFBhZ2VCbG9iQ2xpZW50fVxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gQSBwYWdlIGJsb2IgbmFtZVxuICAgICAqL1xuICAgIGdldFBhZ2VCbG9iQ2xpZW50KGJsb2JOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGFnZUJsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCB1c2VyLWRlZmluZWQgbWV0YWRhdGEgYW5kIHN5c3RlbSBwcm9wZXJ0aWVzIGZvciB0aGUgc3BlY2lmaWVkXG4gICAgICogY29udGFpbmVyLiBUaGUgZGF0YSByZXR1cm5lZCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBjb250YWluZXIncyBsaXN0IG9mIGJsb2JzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1jb250YWluZXItcHJvcGVydGllc1xuICAgICAqXG4gICAgICogV0FSTklORzogVGhlIGBtZXRhZGF0YWAgb2JqZWN0IHJldHVybmVkIGluIHRoZSByZXNwb25zZSB3aWxsIGhhdmUgaXRzIGtleXMgaW4gbG93ZXJjYXNlLCBldmVuIGlmXG4gICAgICogdGhleSBvcmlnaW5hbGx5IGNvbnRhaW5lZCB1cHBlcmNhc2UgY2hhcmFjdGVycy4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIG1ldGFkYXRhIGtleXMgcmV0dXJuZWQgYnlcbiAgICAgKiB0aGUgYGxpc3RDb250YWluZXJzYCBtZXRob2Qgb2Yge0BsaW5rIEJsb2JTZXJ2aWNlQ2xpZW50fSB1c2luZyB0aGUgYGluY2x1ZGVNZXRhZGF0YWAgb3B0aW9uLCB3aGljaFxuICAgICAqIHdpbGwgcmV0YWluIHRoZWlyIG9yaWdpbmFsIGNhc2luZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFByb3BlcnRpZXMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1nZXRQcm9wZXJ0aWVzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5nZXRQcm9wZXJ0aWVzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBmb3IgZGVsZXRpb24uIFRoZSBjb250YWluZXIgYW5kIGFueSBibG9ic1xuICAgICAqIGNvbnRhaW5lZCB3aXRoaW4gaXQgYXJlIGxhdGVyIGRlbGV0ZWQgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9kZWxldGUtY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZGVsZXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5kZWxldGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGZvciBkZWxldGlvbiBpZiBpdCBleGlzdHMuIFRoZSBjb250YWluZXIgYW5kIGFueSBibG9ic1xuICAgICAqIGNvbnRhaW5lZCB3aXRoaW4gaXQgYXJlIGxhdGVyIGRlbGV0ZWQgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9kZWxldGUtY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlSWZFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWRlbGV0ZUlmRXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWxldGUodXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IHRydWUgfSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gZS5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3JDb2RlKSA9PT0gXCJDb250YWluZXJOb3RGb3VuZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IGZhbHNlIH0sIChfYiA9IGUucmVzcG9uc2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wYXJzZWRIZWFkZXJzKSwgeyBfcmVzcG9uc2U6IGUucmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9uZSBvciBtb3JlIHVzZXItZGVmaW5lZCBuYW1lLXZhbHVlIHBhaXJzIGZvciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIElmIG5vIG9wdGlvbiBwcm92aWRlZCwgb3Igbm8gbWV0YWRhdGEgZGVmaW5lZCBpbiB0aGUgcGFyYW1ldGVyLCB0aGUgY29udGFpbmVyXG4gICAgICogbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWNvbnRhaW5lci1tZXRhZGF0YVxuICAgICAqXG4gICAgICogQHBhcmFtIG1ldGFkYXRhIC0gUmVwbGFjZSBleGlzdGluZyBtZXRhZGF0YSB3aXRoIHRoaXMgdmFsdWUuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gdmFsdWUgcHJvdmlkZWQgdGhlIGV4aXN0aW5nIG1ldGFkYXRhIHdpbGwgYmUgcmVtb3ZlZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIFNldCBNZXRhZGF0YSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc2V0TWV0YWRhdGEobWV0YWRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uZGl0aW9ucy5pZlVubW9kaWZpZWRTaW5jZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0aGUgSWZVbm1vZGlmaWVkU2luY2UgbXVzdCBoYXZlIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGJlY2F1c2UgdGhleSBhcmUgaWdub3JlZCBieSB0aGUgYmxvYiBzZXJ2aWNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LXNldE1ldGFkYXRhXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5zZXRNZXRhZGF0YSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGVcbiAgICAgKiB3aGV0aGVyIGNvbnRhaW5lciBkYXRhIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKlxuICAgICAqIFdBUk5JTkc6IEphdmFTY3JpcHQgRGF0ZSB3aWxsIHBvdGVudGlhbGx5IGxvc2UgcHJlY2lzaW9uIHdoZW4gcGFyc2luZyBzdGFydHNPbiBhbmQgZXhwaXJlc09uIHN0cmluZ3MuXG4gICAgICogRm9yIGV4YW1wbGUsIG5ldyBEYXRlKFwiMjAxOC0xMi0zMVQwMzo0NDoyMy44ODI3ODkxWlwiKS50b0lTT1N0cmluZygpIHdpbGwgZ2V0IFwiMjAxOC0xMi0zMVQwMzo0NDoyMy44ODJaXCIuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtY29udGFpbmVyLWFjbFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBHZXQgQWNjZXNzIFBvbGljeSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjZXNzUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZ2V0QWNjZXNzUG9saWN5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQuZ2V0QWNjZXNzUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgYmxvYlB1YmxpY0FjY2VzczogcmVzcG9uc2UuYmxvYlB1YmxpY0FjY2VzcyxcbiAgICAgICAgICAgICAgICBkYXRlOiByZXNwb25zZS5kYXRlLFxuICAgICAgICAgICAgICAgIGV0YWc6IHJlc3BvbnNlLmV0YWcsXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlOiByZXNwb25zZS5lcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiByZXNwb25zZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXNwb25zZS5yZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiByZXNwb25zZS5jbGllbnRSZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgc2lnbmVkSWRlbnRpZmllcnM6IFtdLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZGVudGlmaWVyIG9mIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFjY2Vzc1BvbGljeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NQb2xpY3kuZXhwaXJlc09uID0gbmV3IERhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuc3RhcnRzT24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc1BvbGljeS5zdGFydHNPbiA9IG5ldyBEYXRlKGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnN0YXJ0c09uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMuc2lnbmVkSWRlbnRpZmllcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc1BvbGljeSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlkZW50aWZpZXIuaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGVcbiAgICAgKiB3aGV0aGVyIGJsb2JzIGluIGEgY29udGFpbmVyIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKlxuICAgICAqIFdoZW4geW91IHNldCBwZXJtaXNzaW9ucyBmb3IgYSBjb250YWluZXIsIHRoZSBleGlzdGluZyBwZXJtaXNzaW9ucyBhcmUgcmVwbGFjZWQuXG4gICAgICogSWYgbm8gYWNjZXNzIG9yIGNvbnRhaW5lckFjbCBwcm92aWRlZCwgdGhlIGV4aXN0aW5nIGNvbnRhaW5lciBBQ0wgd2lsbCBiZVxuICAgICAqIHJlbW92ZWQuXG4gICAgICpcbiAgICAgKiBXaGVuIHlvdSBlc3RhYmxpc2ggYSBzdG9yZWQgYWNjZXNzIHBvbGljeSBvbiBhIGNvbnRhaW5lciwgaXQgbWF5IHRha2UgdXAgdG8gMzAgc2Vjb25kcyB0byB0YWtlIGVmZmVjdC5cbiAgICAgKiBEdXJpbmcgdGhpcyBpbnRlcnZhbCwgYSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RvcmVkIGFjY2VzcyBwb2xpY3kgd2lsbFxuICAgICAqIGZhaWwgd2l0aCBzdGF0dXMgY29kZSA0MDMgKEZvcmJpZGRlbiksIHVudGlsIHRoZSBhY2Nlc3MgcG9saWN5IGJlY29tZXMgYWN0aXZlLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1jb250YWluZXItYWNsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWNjZXNzIC0gVGhlIGxldmVsIG9mIHB1YmxpYyBhY2Nlc3MgdG8gZGF0YSBpbiB0aGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBjb250YWluZXJBY2wgLSBBcnJheSBvZiBlbGVtZW50cyBlYWNoIGhhdmluZyBhIHVuaXF1ZSBJZCBhbmQgZGV0YWlscyBvZiB0aGUgYWNjZXNzIHBvbGljeS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIFNldCBBY2Nlc3MgUG9saWN5IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRBY2Nlc3NQb2xpY3koYWNjZXNzLCBjb250YWluZXJBY2wsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LXNldEFjY2Vzc1BvbGljeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjbCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZGVudGlmaWVyIG9mIGNvbnRhaW5lckFjbCB8fCBbXSkge1xuICAgICAgICAgICAgICAgIGFjbC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBpcmVzT246IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LmV4cGlyZXNPblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOiBpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5wZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0c09uOiBpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5zdGFydHNPblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuc3RhcnRzT24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpZDogaWRlbnRpZmllci5pZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQuc2V0QWNjZXNzUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBhY2Nlc3MsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyQWNsOiBhY2wsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEge0BsaW5rIEJsb2JMZWFzZUNsaWVudH0gdGhhdCBtYW5hZ2VzIGxlYXNlcyBvbiB0aGUgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bvc2VMZWFzZUlkIC0gSW5pdGlhbCBwcm9wb3NlZCBsZWFzZSBJZC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iTGVhc2VDbGllbnQgb2JqZWN0IGZvciBtYW5hZ2luZyBsZWFzZXMgb24gdGhlIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBnZXRCbG9iTGVhc2VDbGllbnQocHJvcG9zZUxlYXNlSWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iTGVhc2VDbGllbnQodGhpcywgcHJvcG9zZUxlYXNlSWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGJsb2NrIGJsb2IsIG9yIHVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFVwZGF0aW5nIGFuIGV4aXN0aW5nIGJsb2NrIGJsb2Igb3ZlcndyaXRlcyBhbnkgZXhpc3RpbmcgbWV0YWRhdGEgb24gdGhlIGJsb2IuXG4gICAgICogUGFydGlhbCB1cGRhdGVzIGFyZSBub3Qgc3VwcG9ydGVkOyB0aGUgY29udGVudCBvZiB0aGUgZXhpc3RpbmcgYmxvYiBpc1xuICAgICAqIG92ZXJ3cml0dGVuIHdpdGggdGhlIG5ldyBjb250ZW50LiBUbyBwZXJmb3JtIGEgcGFydGlhbCB1cGRhdGUgb2YgYSBibG9jayBibG9iJ3MsXG4gICAgICogdXNlIHtAbGluayBCbG9ja0Jsb2JDbGllbnQuc3RhZ2VCbG9ja30gYW5kIHtAbGluayBCbG9ja0Jsb2JDbGllbnQuY29tbWl0QmxvY2tMaXN0fS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBub24tcGFyYWxsZWwgdXBsb2FkaW5nIG1ldGhvZCwgcGxlYXNlIHVzZSB7QGxpbmsgQmxvY2tCbG9iQ2xpZW50LnVwbG9hZEZpbGV9LFxuICAgICAqIHtAbGluayBCbG9ja0Jsb2JDbGllbnQudXBsb2FkU3RyZWFtfSBvciB7QGxpbmsgQmxvY2tCbG9iQ2xpZW50LnVwbG9hZEJyb3dzZXJEYXRhfSBmb3IgYmV0dGVyXG4gICAgICogcGVyZm9ybWFuY2Ugd2l0aCBjb25jdXJyZW5jeSB1cGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gTmFtZSBvZiB0aGUgYmxvY2sgYmxvYiB0byBjcmVhdGUgb3IgdXBkYXRlLlxuICAgICAqIEBwYXJhbSBib2R5IC0gQmxvYiwgc3RyaW5nLCBBcnJheUJ1ZmZlciwgQXJyYXlCdWZmZXJWaWV3IG9yIGEgZnVuY3Rpb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCByZXR1cm5zIGEgbmV3IFJlYWRhYmxlIHN0cmVhbSB3aG9zZSBvZmZzZXQgaXMgZnJvbSBkYXRhIHNvdXJjZSBiZWdpbm5pbmcuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggLSBMZW5ndGggb2YgYm9keSBpbiBieXRlcy4gVXNlIEJ1ZmZlci5ieXRlTGVuZ3RoKCkgdG8gY2FsY3VsYXRlIGJvZHkgbGVuZ3RoIGZvciBhXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGluY2x1ZGluZyBub24gbm9uLUJhc2U2NC9IZXgtZW5jb2RlZCBjaGFyYWN0ZXJzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIEJsb2NrIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBCbG9jayBCbG9iIHVwbG9hZCByZXNwb25zZSBkYXRhIGFuZCB0aGUgY29ycmVzcG9uZGluZyBCbG9ja0Jsb2JDbGllbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkQmxvY2tCbG9iKGJsb2JOYW1lLCBib2R5LCBjb250ZW50TGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtdXBsb2FkQmxvY2tCbG9iXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tCbG9iQ2xpZW50ID0gdGhpcy5nZXRCbG9ja0Jsb2JDbGllbnQoYmxvYk5hbWUpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBibG9ja0Jsb2JDbGllbnQudXBsb2FkKGJvZHksIGNvbnRlbnRMZW5ndGgsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmxvY2tCbG9iQ2xpZW50LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgYmxvYiBvciBzbmFwc2hvdCBmb3IgZGVsZXRpb24uIFRoZSBibG9iIGlzIGxhdGVyIGRlbGV0ZWRcbiAgICAgKiBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLiBOb3RlIHRoYXQgaW4gb3JkZXIgdG8gZGVsZXRlIGEgYmxvYiwgeW91IG11c3QgZGVsZXRlXG4gICAgICogYWxsIG9mIGl0cyBzbmFwc2hvdHMuIFlvdSBjYW4gZGVsZXRlIGJvdGggYXQgdGhlIHNhbWUgdGltZSB3aXRoIHRoZSBEZWxldGVcbiAgICAgKiBCbG9iIG9wZXJhdGlvbi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9kZWxldGUtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQmxvYiBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIEJsb2NrIGJsb2IgZGVsZXRpb24gcmVzcG9uc2UgZGF0YS5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVCbG9iKGJsb2JOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZGVsZXRlQmxvYlwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCBibG9iQ2xpZW50ID0gdGhpcy5nZXRCbG9iQ2xpZW50KGJsb2JOYW1lKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgICAgIGJsb2JDbGllbnQgPSBibG9iQ2xpZW50LndpdGhWZXJzaW9uKG9wdGlvbnMudmVyc2lvbklkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBibG9iQ2xpZW50LmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBsaXN0QmxvYkZsYXRTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBibG9icyBzdGFydGluZyBmcm9tIHRoZVxuICAgICAqIHNwZWNpZmllZCBNYXJrZXIuIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGxpc3RCbG9ic0ZsYXRTZWdtZW50IGFnYWluXG4gICAgICogKHBhc3NpbmcgdGhlIHRoZSBwcmV2aW91c2x5LXJldHVybmVkIE1hcmtlcikgdG8gZ2V0IHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGlzdC1ibG9ic1xuICAgICAqXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZiB0aGUgbGlzdCB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgTGlzdCBCbG9iIEZsYXQgU2VnbWVudCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgbGlzdEJsb2JGbGF0U2VnbWVudChtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1saXN0QmxvYkZsYXRTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQubGlzdEJsb2JGbGF0U2VnbWVudChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBtYXJrZXIgfSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UuX3Jlc3BvbnNlKSwgeyBwYXJzZWRCb2R5OiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JGbGF0KHJlc3BvbnNlLl9yZXNwb25zZS5wYXJzZWRCb2R5KSB9KSwgc2VnbWVudDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5zZWdtZW50KSwgeyBibG9iSXRlbXM6IHJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zLm1hcCgoYmxvYkl0ZW1JbnRlcm5hbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYkl0ZW0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JJdGVtSW50ZXJuYWwpLCB7IG5hbWU6IEJsb2JOYW1lVG9TdHJpbmcoYmxvYkl0ZW1JbnRlcm5hbC5uYW1lKSwgdGFnczogdG9UYWdzKGJsb2JJdGVtSW50ZXJuYWwuYmxvYlRhZ3MpLCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM6IHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQoYmxvYkl0ZW1JbnRlcm5hbC5vYmplY3RSZXBsaWNhdGlvbk1ldGFkYXRhKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9iSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgfSkgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBibG9icyBzdGFydGluZyBmcm9tXG4gICAgICogdGhlIHNwZWNpZmllZCBNYXJrZXIuIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGVcbiAgICAgKiBiZWdpbm5pbmcuIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGxpc3RCbG9ic0hpZXJhcmNoaWNhbFNlZ21lbnRcbiAgICAgKiBhZ2FpbiAocGFzc2luZyB0aGUgdGhlIHByZXZpb3VzbHktcmV0dXJuZWQgTWFya2VyKSB0byBnZXQgdGhlIG5leHQgc2VnbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9saXN0LWJsb2JzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZiB0aGUgbGlzdCB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgTGlzdCBCbG9iIEhpZXJhcmNoeSBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQoZGVsaW1pdGVyLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQoZGVsaW1pdGVyLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBtYXJrZXIgfSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UuX3Jlc3BvbnNlKSwgeyBwYXJzZWRCb2R5OiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JIaWVyYXJjaHkocmVzcG9uc2UuX3Jlc3BvbnNlLnBhcnNlZEJvZHkpIH0pLCBzZWdtZW50OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlLnNlZ21lbnQpLCB7IGJsb2JJdGVtczogcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMubWFwKChibG9iSXRlbUludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iSXRlbSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYkl0ZW1JbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVybmFsLm5hbWUpLCB0YWdzOiB0b1RhZ3MoYmxvYkl0ZW1JbnRlcm5hbC5ibG9iVGFncyksIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChibG9iSXRlbUludGVybmFsLm9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGEpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgICAgICAgICB9KSwgYmxvYlByZWZpeGVzOiAoX2EgPSByZXNwb25zZS5zZWdtZW50LmJsb2JQcmVmaXhlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgoYmxvYlByZWZpeEludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iUHJlZml4ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iUHJlZml4SW50ZXJuYWwpLCB7IG5hbWU6IEJsb2JOYW1lVG9TdHJpbmcoYmxvYlByZWZpeEludGVybmFsLm5hbWUpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JQcmVmaXg7XG4gICAgICAgICAgICAgICAgICAgIH0pIH0pIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRSZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50UmVzcG9uc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgYmxvYnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBibG9icyByZW1haW5pbmcgdG8gYmUgbGlzdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGN1cnJlbnQgcGFnZS4gVGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RTZWdtZW50cyhtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0U2VnbWVudHNfMShtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMubGlzdEJsb2JGbGF0U2VnbWVudChtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3Igb2Yge0BsaW5rIEJsb2JJdGVtfSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0SXRlbXNfMShvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RTZWdtZW50cyhtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgYWxsIHRoZSBibG9ic1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGJsb2JzIGluIHBhZ2VzLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgZm9yIGF3YWl0YCBzeW50YXg6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIEdldCB0aGUgY29udGFpbmVyQ2xpZW50IGJlZm9yZSB5b3UgcnVuIHRoZXNlIHNuaXBwZXRzLFxuICAgICAqIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8eW91ci1jb250YWluZXItbmFtZT5cIik7YFxuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IGJsb2Igb2YgY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0ZsYXQoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNGbGF0KCk7XG4gICAgICogbGV0IGJsb2JJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFibG9iSXRlbS5kb25lKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYkl0ZW0udmFsdWUubmFtZX1gKTtcbiAgICAgKiAgIGJsb2JJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgYnlQYWdlKClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBwYXNzaW5nIG9wdGlvbmFsIG1heFBhZ2VTaXplIGluIHRoZSBwYWdlIHNldHRpbmdzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2YgY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0ZsYXQoKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMjAgfSkpIHtcbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgcGFnaW5nIHdpdGggYSBtYXJrZXI6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlcmF0b3IgPSBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgYmxvYiBuYW1lc1xuICAgICAqIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqXG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqXG4gICAgICogaXRlcmF0b3IgPSBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpLmJ5UGFnZSh7IGNvbnRpbnVhdGlvblRva2VuOiBtYXJrZXIsIG1heFBhZ2VTaXplOiAxMCB9KTtcbiAgICAgKiByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDEwIGJsb2IgbmFtZXNcbiAgICAgKiBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMuXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RCbG9ic0ZsYXQob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUNvcHkpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImNvcHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJtZXRhZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlU25hcHNob3RzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJzbmFwc2hvdHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ2ZXJzaW9uc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVW5jb21taXRlZEJsb2JzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ1bmNvbW1pdHRlZGJsb2JzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVUYWdzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ0YWdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVEZWxldGVkV2l0aFZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJkZWxldGVkd2l0aHZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImltbXV0YWJpbGl0eXBvbGljeVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTGVnYWxIb2xkKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJsZWdhbGhvbGRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnByZWZpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIChpbmNsdWRlLmxlbmd0aCA+IDAgPyB7IGluY2x1ZGU6IGluY2x1ZGUgfSA6IHt9KSk7XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdEl0ZW1zKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RTZWdtZW50cyhzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCB1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEhpZXJhcmNoeVNlZ21lbnRzKGRlbGltaXRlcl8xLCBtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0SGllcmFyY2h5U2VnbWVudHNfMShkZWxpbWl0ZXIsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgbGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMubGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50KGRlbGltaXRlciwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3Ige0BsaW5rIEJsb2JQcmVmaXh9IGFuZCB7QGxpbmsgQmxvYkl0ZW19IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RJdGVtc0J5SGllcmFyY2h5KGRlbGltaXRlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RJdGVtc0J5SGllcmFyY2h5XzEoZGVsaW1pdGVyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8yLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RIaWVyYXJjaHlTZWdtZW50cyhkZWxpbWl0ZXIsIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlID0gX2M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2Uuc2VnbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliLl9fYXdhaXQoT2JqZWN0LmFzc2lnbih7IGtpbmQ6IFwicHJlZml4XCIgfSwgcHJlZml4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBibG9iIG9mIHNlZ21lbnQuYmxvYkl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KE9iamVjdC5hc3NpZ24oeyBraW5kOiBcImJsb2JcIiB9LCBibG9iKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBhbGwgdGhlIGJsb2JzIGJ5IGhpZXJhcmNoeS5cbiAgICAgKiB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnQuXG4gICAgICpcbiAgICAgKiAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IHRoZSBibG9icyBieSBoaWVyYXJjaHkgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIikpIHtcbiAgICAgKiAgIGlmIChpdGVtLmtpbmQgPT09IFwicHJlZml4XCIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JQcmVmaXg6ICR7aXRlbS5uYW1lfWApO1xuICAgICAqICAgfSBlbHNlIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtpdGVtLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaXRlciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIiwgeyBwcmVmaXg6IFwicHJlZml4MS9cIiB9KTtcbiAgICAgKiBsZXQgZW50aXR5ID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFlbnRpdHkuZG9uZSkge1xuICAgICAqICAgbGV0IGl0ZW0gPSBlbnRpdHkudmFsdWU7XG4gICAgICogICBpZiAoaXRlbS5raW5kID09PSBcInByZWZpeFwiKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iUHJlZml4OiAke2l0ZW0ubmFtZX1gKTtcbiAgICAgKiAgIH0gZWxzZSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iSXRlbTogbmFtZSAtICR7aXRlbS5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqICAgZW50aXR5ID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgYnlQYWdlKClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zb2xlLmxvZyhcIkxpc3RpbmcgYmxvYnMgYnkgaGllcmFyY2h5IGJ5IHBhZ2VcIik7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnQubGlzdEJsb2JzQnlIaWVyYXJjaHkoXCIvXCIpLmJ5UGFnZSgpKSB7XG4gICAgICogICBjb25zdCBzZWdtZW50ID0gcmVzcG9uc2Uuc2VnbWVudDtcbiAgICAgKiAgIGlmIChzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iUHJlZml4OiAke3ByZWZpeC5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1heCBwYWdlIHNpemU6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnNvbGUubG9nKFwiTGlzdGluZyBibG9icyBieSBoaWVyYXJjaHkgYnkgcGFnZSwgc3BlY2lmeWluZyBhIHByZWZpeCBhbmQgYSBtYXggcGFnZSBzaXplXCIpO1xuICAgICAqXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2YgY29udGFpbmVyQ2xpZW50XG4gICAgICogICAubGlzdEJsb2JzQnlIaWVyYXJjaHkoXCIvXCIsIHsgcHJlZml4OiBcInByZWZpeDIvc3ViMS9cIiB9KVxuICAgICAqICAgLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSAke2krK31gKTtcbiAgICAgKiAgIGNvbnN0IHNlZ21lbnQgPSByZXNwb25zZS5zZWdtZW50O1xuICAgICAqXG4gICAgICogICBpZiAoc2VnbWVudC5ibG9iUHJlZml4ZXMpIHtcbiAgICAgKiAgICAgZm9yIChjb25zdCBwcmVmaXggb2Ygc2VnbWVudC5ibG9iUHJlZml4ZXMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYlByZWZpeDogJHtwcmVmaXgubmFtZX1gKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbGltaXRlciAtIFRoZSBjaGFyYWN0ZXIgb3Igc3RyaW5nIHVzZWQgdG8gZGVmaW5lIHRoZSB2aXJ0dWFsIGhpZXJhcmNoeVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGJsb2JzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0QmxvYnNCeUhpZXJhcmNoeShkZWxpbWl0ZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoZGVsaW1pdGVyID09PSBcIlwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImRlbGltaXRlciBzaG91bGQgY29udGFpbiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUNvcHkpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImNvcHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJtZXRhZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlU25hcHNob3RzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJzbmFwc2hvdHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ2ZXJzaW9uc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVW5jb21taXRlZEJsb2JzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ1bmNvbW1pdHRlZGJsb2JzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVUYWdzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ0YWdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVEZWxldGVkV2l0aFZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJkZWxldGVkd2l0aHZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImltbXV0YWJpbGl0eXBvbGljeVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTGVnYWxIb2xkKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJsZWdhbGhvbGRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnByZWZpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIChpbmNsdWRlLmxlbmd0aCA+IDAgPyB7IGluY2x1ZGU6IGluY2x1ZGUgfSA6IHt9KSk7XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYiBwcmVmaXhlcyBhbmQgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdEl0ZW1zQnlIaWVyYXJjaHkoZGVsaW1pdGVyLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBuZXh0IG1ldGhvZCwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIubmV4dCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIGNvbm5lY3Rpb24gdG8gdGhlIGFzeW5jIGl0ZXJhdG9yLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybiBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCB3b3JrcyBhIHBhZ2UgYXQgYSB0aW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJ5UGFnZTogKHNldHRpbmdzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0SGllcmFyY2h5U2VnbWVudHMoZGVsaW1pdGVyLCBzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCB1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgaW4gdGhlIGNvbnRhaW5lciB3aG9zZSB0YWdzXG4gICAgICogbWF0Y2ggYSBnaXZlbiBzZWFyY2ggZXhwcmVzc2lvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byB0cnVlIGZvciBhIGJsb2IgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdHMuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgYmxvYnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBibG9icyByZW1haW5pbmcgdG8gYmUgbGlzdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGN1cnJlbnQgcGFnZS4gVGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGZpbmQgYmxvYnMgYnkgdGFncy5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5kQmxvYnNCeVRhZ3NTZWdtZW50KHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWZpbmRCbG9ic0J5VGFnc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5maWx0ZXJCbG9icyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgd2hlcmU6IHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgICAgIG1heFBhZ2VTaXplOiBvcHRpb25zLm1heFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXNwb25zZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IF9yZXNwb25zZTogcmVzcG9uc2UuX3Jlc3BvbnNlLCBibG9iczogcmVzcG9uc2UuYmxvYnMubWFwKChibG9iKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRhZ1ZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBibG9iLnRhZ3MpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ibG9iVGFnU2V0Lmxlbmd0aCkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1ZhbHVlID0gYmxvYi50YWdzLmJsb2JUYWdTZXRbMF0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYiksIHsgdGFnczogdG9UYWdzKGJsb2IudGFncyksIHRhZ1ZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRSZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBDb250YWluZXJGaW5kQmxvYnNCeVRhZ3NTZWdtZW50UmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnRmlsdGVyU3FsRXhwcmVzc2lvbiAtICBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byB0cnVlIGZvciBhIGJsb2IgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdHMuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZVtPRGF0YSAtIEFCTkZdIGZpbHRlciBzeW50YXggcnVsZSBkZWZpbmVzIHRoZSBmb3JtYWwgZ3JhbW1hciBmb3IgdGhlIHZhbHVlIG9mIHRoZSB3aGVyZSBxdWVyeSBwYXJhbWV0ZXI7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb25fMSwgbWFya2VyXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzU2VnbWVudHNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50KHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5ibG9icyA9IHJlc3BvbnNlLmJsb2JzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBibG9icy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZEJsb2JzQnlUYWdzSXRlbXMuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGZpbmRCbG9ic0J5VGFnc0l0ZW1zXzEodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMywgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50cyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKHNlZ21lbnQuYmxvYnMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfM18xKSB7IGVfMyA9IHsgZXJyb3I6IGVfM18xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGZpbmQgYWxsIGJsb2JzIHdpdGggc3BlY2lmaWVkIHRhZ1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgYmxvYnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgYmxvYiBvZiBjb250YWluZXJDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogY29uc3QgaXRlciA9IGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKTtcbiAgICAgKiBsZXQgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWJsb2JJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iSXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBpZiAocmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgcGFnaW5nIHdpdGggYSBtYXJrZXI6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlcmF0b3IgPSBjb250YWluZXJDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKiBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudFxuICAgICAqICAgLmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpXG4gICAgICogICAuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgYmxvYiBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFncyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9ic1xuICAgICAgICBjb25zdCBsaXN0U2VnbWVudE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMuZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbGlzdFNlZ21lbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIGxpc3RTZWdtZW50T3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogZm9yIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIGlzIGF2YWlsYWJsZSBvbiBzZXJ2aWNlIHZlcnNpb25zIGJlZ2lubmluZ1xuICAgICAqIHdpdGggdmVyc2lvbiAyMDE4LTAzLTI4LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1hY2NvdW50LWluZm9ybWF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjb3VudEluZm8ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWdldEFjY291bnRJbmZvXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5nZXRBY2NvdW50SW5mbyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0Q29udGFpbmVyTmFtZUZyb21VcmwoKSB7XG4gICAgICAgIGxldCBjb250YWluZXJOYW1lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gIFVSTCBtYXkgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyP3Nhc1N0cmluZ1wiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXJcIjtcbiAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLCBFbmRwb2ludHMgLSBgaHR0cDovLzEyNy4wLjAuMToxMDAwMC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVgXG4gICAgICAgICAgICAvLyBodHRwOi8vbG9jYWxob3N0OjEwMDAxL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh0aGlzLnVybCk7XG4gICAgICAgICAgICBpZiAocGFyc2VkVXJsLmhvc3RuYW1lLnNwbGl0KFwiLlwiKVsxXSA9PT0gXCJibG9iXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb250YWluZXJuYW1lXCIuXG4gICAgICAgICAgICAgICAgLy8gXCJodHRwczovL2N1c3RvbWRvbWFpbi5jb20vY29udGFpbmVybmFtZVwiLlxuICAgICAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICBjb250YWluZXJOYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJUHY0L0lQdjYgYWRkcmVzcyBob3N0cy4uLiBFeGFtcGxlIC0gaHR0cDovLzE5Mi4wLjAuMTA6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgLy8gU2luZ2xlIHdvcmQgZG9tYWluIHdpdGhvdXQgYSBbZG90XSBpbiB0aGUgZW5kcG9pbnQuLi4gRXhhbXBsZSAtIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhcnNlZFVybC5wYXRobmFtZS5zcGxpdChcIi9cIilbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vY3VzdG9tZG9tYWluLmNvbS9jb250YWluZXJuYW1lXCIuXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvY29udGFpbmVybmFtZVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXJzZWRVcmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZGVjb2RlIHRoZSBlbmNvZGVkIGNvbnRhaW5lck5hbWUgLSB0byBnZXQgYWxsIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIGl0XG4gICAgICAgICAgICBjb250YWluZXJOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXJOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgY29udGFpbmVyTmFtZSBpcyBpbnZhbGlkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXJOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGV4dHJhY3QgY29udGFpbmVyTmFtZSB3aXRoIHByb3ZpZGVkIGluZm9ybWF0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQ29udGFpbmVyQ2xpZW50IGNvbnN0cnVjdGVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWwuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZXMgYSBCbG9iIENvbnRhaW5lciBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSSBiYXNlZCBvbiB0aGUgY2xpZW50IHByb3BlcnRpZXNcbiAgICAgKiBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVTYXNVcmwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHRoaXMuY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNhcyA9IGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVycyhPYmplY3QuYXNzaWduKHsgY29udGFpbmVyTmFtZTogdGhpcy5fY29udGFpbmVyTmFtZSB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS50b1N0cmluZygpO1xuICAgICAgICAgICAgcmVzb2x2ZShhcHBlbmRUb1VSTFF1ZXJ5KHRoaXMudXJsLCBzYXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBDb250YWluZXJDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBzdHJpbmcgdG8gc2lnbiBmb3IgYSBCbG9iIENvbnRhaW5lciBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSVxuICAgICAqIGJhc2VkIG9uIHRoZSBjbGllbnQgcHJvcGVydGllcyBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIGdlbmVyYXRlU2FzU3RyaW5nVG9TaWduKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKE9iamVjdC5hc3NpZ24oeyBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnN0cmluZ1RvU2lnbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEJsb2JCYXRjaENsaWVudCBvYmplY3QgdG8gY29uZHVjdCBiYXRjaCBvcGVyYXRpb25zLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaFxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkJhdGNoQ2xpZW50IG9iamVjdCBmb3IgdGhpcyBjb250YWluZXIuXG4gICAgICovXG4gICAgZ2V0QmxvYkJhdGNoQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JCYXRjaENsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSBhbiBBY2NvdW50U0FTLiBTZXR0aW5nIGEgdmFsdWVcbiAqIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBwZXJtaXNzaW9ucyBmb3IgdGhhdCBvcGVyYXRpb24uIE9uY2UgYWxsIHRoZVxuICogdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSBwZXJtaXNzaW9ucyBmaWVsZCBvbiBhblxuICoge0BsaW5rIEFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXN9IG9iamVjdC4gSXQgaXMgcG9zc2libGUgdG8gY29uc3RydWN0IHRoZSBwZXJtaXNzaW9ucyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgcGVybWlzc2lvbnMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBBY2NvdW50U0FTUGVybWlzc2lvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byByZWFkIHJlc291cmNlcyBhbmQgbGlzdCBxdWV1ZXMgYW5kIHRhYmxlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIHdyaXRlIHJlc291cmNlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cml0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBkZWxldGUgYmxvYnMgYW5kIGZpbGVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlbGV0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBkZWxldGUgdmVyc2lvbnMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBsaXN0IGJsb2IgY29udGFpbmVycywgYmxvYnMsIHNoYXJlcywgZGlyZWN0b3JpZXMsIGFuZCBmaWxlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5saXN0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFkZCBtZXNzYWdlcywgdGFibGUgZW50aXRpZXMsIGFuZCBhcHBlbmQgdG8gYmxvYnMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWRkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGNyZWF0ZSBibG9icyBhbmQgZmlsZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9ucyB0byB1cGRhdGUgbWVzc2FnZXMgYW5kIHRhYmxlIGVudGl0aWVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBnZXQgYW5kIGRlbGV0ZSBtZXNzYWdlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wcm9jZXNzID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjZmllcyBUYWcgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhZyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBmaWx0ZXIgYmxvYnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlciA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBzZXQgaW1tdXRhYmlsaXR5IHBvbGljeS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCBQZXJtYW5lbnQgRGVsZXRlIGlzIHBlcm1pdHRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGVybWFuZW50RGVsZXRlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlIGluaXRpYWxpemVzIHRoZSBBY2NvdW50U0FTUGVybWlzc2lvbnMgZmllbGRzIGZyb20gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShwZXJtaXNzaW9ucykge1xuICAgICAgICBjb25zdCBhY2NvdW50U0FTUGVybWlzc2lvbnMgPSBuZXcgQWNjb3VudFNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBwZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMubGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJwXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHBlcm1pc3Npb24gY2hhcmFjdGVyOiAke2N9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY291bnRTQVNQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBBY2NvdW50U0FTUGVybWlzc2lvbnN9IGZyb20gYSByYXcgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHNhbWUga2V5cyBhcyBpdFxuICAgICAqIGFuZCBib29sZWFuIHZhbHVlcyBmb3IgdGhlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9uTGlrZSAtXG4gICAgICovXG4gICAgc3RhdGljIGZyb20ocGVybWlzc2lvbkxpa2UpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudFNBU1Blcm1pc3Npb25zID0gbmV3IEFjY291bnRTQVNQZXJtaXNzaW9ucygpO1xuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UucmVhZCkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS53cml0ZSkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLndyaXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5maWx0ZXIpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS50YWcpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy50YWcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5saXN0KSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMubGlzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmFkZCkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmNyZWF0ZSkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmNyZWF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnVwZGF0ZSkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnVwZGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnByb2Nlc3MpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm9kdWNlcyB0aGUgU0FTIHBlcm1pc3Npb25zIHN0cmluZyBmb3IgYW4gQXp1cmUgU3RvcmFnZSBhY2NvdW50LlxuICAgICAqIENhbGwgdGhpcyBtZXRob2QgdG8gc2V0IEFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMgUGVybWlzc2lvbnMgZmllbGQuXG4gICAgICpcbiAgICAgKiBVc2luZyB0aGlzIG1ldGhvZCB3aWxsIGd1YXJhbnRlZSB0aGUgcmVzb3VyY2UgdHlwZXMgYXJlIGluXG4gICAgICogYW4gb3JkZXIgYWNjZXB0ZWQgYnkgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYW4tYWNjb3VudC1zYXNcbiAgICAgKlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGFzIHNwZWNpZmllZCBoZXJlIHRvIGVuc3VyZSBjb3JyZWN0bmVzczpcbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICAgICAgICAvLyBVc2UgYSBzdHJpbmcgYXJyYXkgaW5zdGVhZCBvZiBzdHJpbmcgY29uY2F0ZW5hdGluZyArPSBvcGVyYXRvciBmb3IgcGVyZm9ybWFuY2VcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucmVhZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JpdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ3XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInhcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFkZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51cGRhdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ1XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3MpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJwXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZXMgYWNjZXNzaWJsZSBieSBhbiBBY2NvdW50U0FTLiBTZXR0aW5nIGEgdmFsdWVcbiAqIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBhY2Nlc3MgdG8gdGhhdCByZXNvdXJjZSB0eXBlLiBPbmNlIGFsbCB0aGVcbiAqIHZhbHVlcyBhcmUgc2V0LCB0aGlzIHNob3VsZCBiZSBzZXJpYWxpemVkIHdpdGggdG9TdHJpbmcgYW5kIHNldCBhcyB0aGUgcmVzb3VyY2VzIGZpZWxkIG9uIGFuXG4gKiB7QGxpbmsgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlc30gb2JqZWN0LiBJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlIHJlc291cmNlcyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgcmVzb3VyY2VzIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQWNjb3VudFNBU1Jlc291cmNlVHlwZXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3Mgc2VydmljZSBsZXZlbCBBUElzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIGNvbnRhaW5lciBsZXZlbCBBUElzIChCbG9iIENvbnRhaW5lcnMsIFRhYmxlcywgUXVldWVzLCBGaWxlIFNoYXJlcykgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFjY2VzcyBvYmplY3QgbGV2ZWwgQVBJcyAoQmxvYnMsIFRhYmxlIEVudGl0aWVzLCBRdWV1ZSBNZXNzYWdlcywgRmlsZXMpIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9iamVjdCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIHtAbGluayBBY2NvdW50U0FTUmVzb3VyY2VUeXBlc30gZnJvbSB0aGUgc3BlY2lmaWVkIHJlc291cmNlIHR5cGVzIHN0cmluZy4gVGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhblxuICAgICAqIEVycm9yIGlmIGl0IGVuY291bnRlcnMgYSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgcmVzb3VyY2UgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGVzIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UocmVzb3VyY2VUeXBlcykge1xuICAgICAgICBjb25zdCBhY2NvdW50U0FTUmVzb3VyY2VUeXBlcyA9IG5ldyBBY2NvdW50U0FTUmVzb3VyY2VUeXBlcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgcmVzb3VyY2VUeXBlcykge1xuICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Jlc291cmNlVHlwZXMuc2VydmljZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNSZXNvdXJjZVR5cGVzLmNvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNSZXNvdXJjZVR5cGVzLm9iamVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHJlc291cmNlIHR5cGU6ICR7Y31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1Jlc291cmNlVHlwZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiByZXNvdXJjZSB0eXBlcyB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlVHlwZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZSkge1xuICAgICAgICAgICAgcmVzb3VyY2VUeXBlcy5wdXNoKFwic1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMucHVzaChcImNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub2JqZWN0KSB7XG4gICAgICAgICAgICByZXNvdXJjZVR5cGVzLnB1c2goXCJvXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvdXJjZVR5cGVzLmpvaW4oXCJcIik7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2VydmljZXMgYWNjZXNzaWJsZSBieSBhbiBBY2NvdW50U0FTLiBTZXR0aW5nIGEgdmFsdWVcbiAqIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBhY2Nlc3MgdG8gdGhhdCBzZXJ2aWNlLiBPbmNlIGFsbCB0aGVcbiAqIHZhbHVlcyBhcmUgc2V0LCB0aGlzIHNob3VsZCBiZSBzZXJpYWxpemVkIHdpdGggdG9TdHJpbmcgYW5kIHNldCBhcyB0aGUgc2VydmljZXMgZmllbGQgb24gYW5cbiAqIHtAbGluayBBY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgc2VydmljZXMgc3RyaW5nIHdpdGhvdXQgdGhpcyBjbGFzcywgYnV0XG4gKiB0aGUgb3JkZXIgb2YgdGhlIHNlcnZpY2VzIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQWNjb3VudFNBU1NlcnZpY2VzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIGJsb2IgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJsb2IgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIGZpbGUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIHF1ZXVlIHJlc291cmNlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5xdWV1ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgdGFibGUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFjY291bnRTQVNTZXJ2aWNlc30gZnJvbSB0aGUgc3BlY2lmaWVkIHNlcnZpY2VzIHN0cmluZy4gVGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhblxuICAgICAqIEVycm9yIGlmIGl0IGVuY291bnRlcnMgYSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgc2VydmljZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXJ2aWNlcyAtXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKHNlcnZpY2VzKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRTQVNTZXJ2aWNlcyA9IG5ldyBBY2NvdW50U0FTU2VydmljZXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHNlcnZpY2VzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYlwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTU2VydmljZXMuYmxvYiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNTZXJ2aWNlcy5maWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1NlcnZpY2VzLnF1ZXVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1NlcnZpY2VzLnRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgc2VydmljZSBjaGFyYWN0ZXI6ICR7Y31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1NlcnZpY2VzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gc2VydmljZXMgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuYmxvYikge1xuICAgICAgICAgICAgc2VydmljZXMucHVzaChcImJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnF1ZXVlKSB7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKFwicVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VydmljZXMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogR2VuZXJhdGVzIGEge0BsaW5rIFNBU1F1ZXJ5UGFyYW1ldGVyc30gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGFsbCBTQVMgcXVlcnkgcGFyYW1ldGVycyBuZWVkZWQgdG8gbWFrZSBhbiBhY3R1YWxcbiAqIFJFU1QgcmVxdWVzdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYW4tYWNjb3VudC1zYXNcbiAqXG4gKiBAcGFyYW0gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gc2hhcmVkS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycyhhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpXG4gICAgICAgIC5zYXNRdWVyeVBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZUFjY291bnRTQVNRdWVyeVBhcmFtZXRlcnNJbnRlcm5hbChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvblxuICAgICAgICA/IGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvblxuICAgICAgICA6IFNFUlZJQ0VfVkVSU0lPTjtcbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDIwLTA4LTA0XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTA4LTA0JyB3aGVuIHByb3ZpZGVkICdpJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkZWQgJ3gnIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEwLTEwXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEwLTEwJyB3aGVuIHByb3ZpZGVkICd5JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50YWcgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMi0xMlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMi0xMicgd2hlbiBwcm92aWRlZCAndCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZmlsdGVyICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTItMTJcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTItMTInIHdoZW4gcHJvdmlkZWQgJ2YnIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUgJiYgdmVyc2lvbiA8IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0xMi0wNicgd2hlbiBwcm92aWRlZCAnZW5jcnlwdGlvblNjb3BlJyBpbiBTQVMuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWRQZXJtaXNzaW9ucyA9IEFjY291bnRTQVNQZXJtaXNzaW9ucy5wYXJzZShhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHBhcnNlZFNlcnZpY2VzID0gQWNjb3VudFNBU1NlcnZpY2VzLnBhcnNlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc2VydmljZXMpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcGFyc2VkUmVzb3VyY2VUeXBlcyA9IEFjY291bnRTQVNSZXNvdXJjZVR5cGVzLnBhcnNlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucmVzb3VyY2VUeXBlcykudG9TdHJpbmcoKTtcbiAgICBsZXQgc3RyaW5nVG9TaWduO1xuICAgIGlmICh2ZXJzaW9uID49IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsXG4gICAgICAgICAgICBwYXJzZWRQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIHBhcnNlZFNlcnZpY2VzLFxuICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2VUeXBlcyxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgIHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSksXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUgPyBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSA6IFwiXCIsXG4gICAgICAgICAgICBcIlwiLCAvLyBBY2NvdW50IFNBUyByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIG5ld2xpbmUgY2hhcmFjdGVyXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsXG4gICAgICAgICAgICBwYXJzZWRQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIHBhcnNlZFNlcnZpY2VzLFxuICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2VUeXBlcyxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgIHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSksXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgXCJcIiwgLy8gQWNjb3VudCBTQVMgcmVxdWlyZXMgYW4gYWRkaXRpb25hbCBuZXdsaW5lIGNoYXJhY3RlclxuICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNoYXJlZEtleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnModmVyc2lvbiwgc2lnbmF0dXJlLCBwYXJzZWRQZXJtaXNzaW9ucy50b1N0cmluZygpLCBwYXJzZWRTZXJ2aWNlcywgcGFyc2VkUmVzb3VyY2VUeXBlcywgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSksXG4gICAgICAgIHN0cmluZ1RvU2lnbjogc3RyaW5nVG9TaWduLFxuICAgIH07XG59XG5cbi8qKlxuICogQSBCbG9iU2VydmljZUNsaWVudCByZXByZXNlbnRzIGEgQ2xpZW50IHRvIHRoZSBBenVyZSBTdG9yYWdlIEJsb2Igc2VydmljZSBhbGxvd2luZyB5b3VcbiAqIHRvIG1hbmlwdWxhdGUgYmxvYiBjb250YWluZXJzLlxuICovXG5jbGFzcyBCbG9iU2VydmljZUNsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCbG9iU2VydmljZUNsaWVudCBmcm9tIGNvbm5lY3Rpb24gc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbm5lY3Rpb25TdHJpbmcgLSBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nIG9mIGFuIEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIE5vdGUgLSBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGNhbiBvbmx5IGJlIHVzZWQgaW4gTk9ERS5KUyBydW50aW1lLiBdXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBleGFtcGxlIC1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRGVmYXVsdEVuZHBvaW50c1Byb3RvY29sPWh0dHBzO0FjY291bnROYW1lPW15YWNjb3VudDtBY2NvdW50S2V5PWFjY291bnRLZXk7RW5kcG9pbnRTdWZmaXg9Y29yZS53aW5kb3dzLm5ldGBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQVMgY29ubmVjdGlvbiBzdHJpbmcgZXhhbXBsZSAtXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYEJsb2JFbmRwb2ludD1odHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvO1F1ZXVlRW5kcG9pbnQ9aHR0cHM6Ly9teWFjY291bnQucXVldWUuY29yZS53aW5kb3dzLm5ldC87RmlsZUVuZHBvaW50PWh0dHBzOi8vbXlhY2NvdW50LmZpbGUuY29yZS53aW5kb3dzLm5ldC87VGFibGVFbmRwb2ludD1odHRwczovL215YWNjb3VudC50YWJsZS5jb3JlLndpbmRvd3MubmV0LztTaGFyZWRBY2Nlc3NTaWduYXR1cmU9c2FzU3RyaW5nYFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIE9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBIVFRQIHBpcGVsaW5lLlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tQ29ubmVjdGlvblN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHMoY29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJveHlPcHRpb25zID0gY29yZVJlc3RQaXBlbGluZS5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyhleHRyYWN0ZWRDcmVkcy5wcm94eVVyaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iU2VydmljZUNsaWVudChleHRyYWN0ZWRDcmVkcy51cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gTm9kZS5qcyBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIlNBU0Nvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYlNlcnZpY2VDbGllbnQoZXh0cmFjdGVkQ3JlZHMudXJsICsgXCI/XCIgKyBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzLCBwaXBlbGluZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHVybCwgY3JlZGVudGlhbE9yUGlwZWxpbmUsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmUpKSB7XG4gICAgICAgICAgICBwaXBlbGluZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yUGlwZWxpbmUgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxPclBpcGVsaW5lIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yUGlwZWxpbmUpKSB7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsXG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICB0aGlzLnNlcnZpY2VDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5zZXJ2aWNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIENvbnRhaW5lckNsaWVudH0gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyTmFtZSAtIEEgY29udGFpbmVyIG5hbWVcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBDb250YWluZXJDbGllbnQgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gY29udGFpbmVyIG5hbWUuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb250YWluZXJDbGllbnQgPSBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8Y29udGFpbmVyIG5hbWU+XCIpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldENvbnRhaW5lckNsaWVudChjb250YWluZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGFpbmVyQ2xpZW50KGFwcGVuZFRvVVJMUGF0aCh0aGlzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIEJsb2IgY29udGFpbmVyLiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyTmFtZSAtIE5hbWUgb2YgdGhlIGNvbnRhaW5lciB0byBjcmVhdGUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSBDb250YWluZXIgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBDb250YWluZXIgY3JlYXRpb24gcmVzcG9uc2UgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRhaW5lciBjbGllbnQuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lck5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWNyZWF0ZUNvbnRhaW5lclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IHRoaXMuZ2V0Q29udGFpbmVyQ2xpZW50KGNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ3JlYXRlUmVzcG9uc2UgPSBhd2FpdCBjb250YWluZXJDbGllbnQuY3JlYXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyQ2xpZW50LFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckNyZWF0ZVJlc3BvbnNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBCbG9iIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXJOYW1lIC0gTmFtZSBvZiB0aGUgY29udGFpbmVyIHRvIGRlbGV0ZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIENvbnRhaW5lciBkZWxldGlvbiByZXNwb25zZS5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVDb250YWluZXIoY29udGFpbmVyTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZGVsZXRlQ29udGFpbmVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ2xpZW50ID0gdGhpcy5nZXRDb250YWluZXJDbGllbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyQ2xpZW50LmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlIGEgcHJldmlvdXNseSBkZWxldGVkIEJsb2IgY29udGFpbmVyLlxuICAgICAqIFRoaXMgQVBJIGlzIG9ubHkgZnVuY3Rpb25hbCBpZiBDb250YWluZXIgU29mdCBEZWxldGUgaXMgZW5hYmxlZCBmb3IgdGhlIHN0b3JhZ2UgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxldGVkQ29udGFpbmVyTmFtZSAtIE5hbWUgb2YgdGhlIHByZXZpb3VzbHkgZGVsZXRlZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIGRlbGV0ZWRDb250YWluZXJWZXJzaW9uIC0gVmVyc2lvbiBvZiB0aGUgcHJldmlvdXNseSBkZWxldGVkIGNvbnRhaW5lciwgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgZGVsZXRlZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSBDb250YWluZXIgUmVzdG9yZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQ29udGFpbmVyIGRlbGV0aW9uIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIHVuZGVsZXRlQ29udGFpbmVyKGRlbGV0ZWRDb250YWluZXJOYW1lLCBkZWxldGVkQ29udGFpbmVyVmVyc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtdW5kZWxldGVDb250YWluZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDbGllbnQgPSB0aGlzLmdldENvbnRhaW5lckNsaWVudChvcHRpb25zLmRlc3RpbmF0aW9uQ29udGFpbmVyTmFtZSB8fCBkZWxldGVkQ29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICAvLyBIYWNrIHRvIGFjY2VzcyBhIHByb3RlY3RlZCBtZW1iZXIuXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDb250ZXh0ID0gY29udGFpbmVyQ2xpZW50W1wic3RvcmFnZUNsaWVudENvbnRleHRcIl0uY29udGFpbmVyO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyVW5kZWxldGVSZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IGNvbnRhaW5lckNvbnRleHQucmVzdG9yZSh7XG4gICAgICAgICAgICAgICAgZGVsZXRlZENvbnRhaW5lck5hbWUsXG4gICAgICAgICAgICAgICAgZGVsZXRlZENvbnRhaW5lclZlcnNpb24sXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHsgY29udGFpbmVyQ2xpZW50LCBjb250YWluZXJVbmRlbGV0ZVJlc3BvbnNlIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW5hbWUgYW4gZXhpc3RpbmcgQmxvYiBDb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlQ29udGFpbmVyTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBkZXN0aW5hdGlvbkNvbnRhaW5lck5hbWUgLSBUaGUgbmV3IG5hbWUgb2YgdGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBSZW5hbWUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbiAgICAvLyBAdHMtaWdub3JlIE5lZWQgdG8gaGlkZSB0aGlzIGludGVyZmFjZSBmb3Igbm93LiBNYWtlIGl0IHB1YmxpYyBhbmQgdHVybiBvbiB0aGUgbGl2ZSB0ZXN0cyBmb3IgaXQgd2hlbiB0aGUgc2VydmljZSBpcyByZWFkeS5cbiAgICBhc3luYyByZW5hbWVDb250YWluZXIoc291cmNlQ29udGFpbmVyTmFtZSwgZGVzdGluYXRpb25Db250YWluZXJOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1yZW5hbWVDb250YWluZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDbGllbnQgPSB0aGlzLmdldENvbnRhaW5lckNsaWVudChkZXN0aW5hdGlvbkNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgLy8gSGFjayB0byBhY2Nlc3MgYSBwcm90ZWN0ZWQgbWVtYmVyLlxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ29udGV4dCA9IGNvbnRhaW5lckNsaWVudFtcInN0b3JhZ2VDbGllbnRDb250ZXh0XCJdLmNvbnRhaW5lcjtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlbmFtZVJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgY29udGFpbmVyQ29udGV4dC5yZW5hbWUoc291cmNlQ29udGFpbmVyTmFtZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1cGRhdGVkT3B0aW9ucyksIHsgc291cmNlTGVhc2VJZDogKF9hID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZWFzZUlkIH0pKSk7XG4gICAgICAgICAgICByZXR1cm4geyBjb250YWluZXJDbGllbnQsIGNvbnRhaW5lclJlbmFtZVJlc3BvbnNlIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgc3RvcmFnZSBhY2NvdW504oCZcyBCbG9iIHNlcnZpY2UsIGluY2x1ZGluZyBwcm9wZXJ0aWVzXG4gICAgICogZm9yIFN0b3JhZ2UgQW5hbHl0aWNzIGFuZCBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgcnVsZXMuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2Itc2VydmljZS1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBTZXJ2aWNlIEdldCBQcm9wZXJ0aWVzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQcm9wZXJ0aWVzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWdldFByb3BlcnRpZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlQ29udGV4dC5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHByb3BlcnRpZXMgZm9yIGEgc3RvcmFnZSBhY2NvdW504oCZcyBCbG9iIHNlcnZpY2UgZW5kcG9pbnQsIGluY2x1ZGluZyBwcm9wZXJ0aWVzXG4gICAgICogZm9yIFN0b3JhZ2UgQW5hbHl0aWNzLCBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgcnVsZXMgYW5kIHNvZnQgZGVsZXRlIHNldHRpbmdzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXNlcnZpY2UtcHJvcGVydGllc1xuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBTZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgU2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldFByb3BlcnRpZXMocHJvcGVydGllcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtc2V0UHJvcGVydGllc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LnNldFByb3BlcnRpZXMocHJvcGVydGllcywge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gcmVwbGljYXRpb24gZm9yIHRoZSBCbG9iIHNlcnZpY2UuIEl0IGlzIG9ubHlcbiAgICAgKiBhdmFpbGFibGUgb24gdGhlIHNlY29uZGFyeSBsb2NhdGlvbiBlbmRwb2ludCB3aGVuIHJlYWQtYWNjZXNzIGdlby1yZWR1bmRhbnRcbiAgICAgKiByZXBsaWNhdGlvbiBpcyBlbmFibGVkIGZvciB0aGUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1ibG9iLXNlcnZpY2Utc3RhdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgU3RhdGlzdGljcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IFN0YXRpc3RpY3Mgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFN0YXRpc3RpY3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0U3RhdGlzdGljc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmdldFN0YXRpc3RpY3Moe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gcmV0dXJucyB0aGUgc2t1IG5hbWUgYW5kIGFjY291bnQga2luZFxuICAgICAqIGZvciB0aGUgc3BlY2lmaWVkIGFjY291bnQuXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiBpcyBhdmFpbGFibGUgb24gc2VydmljZSB2ZXJzaW9ucyBiZWdpbm5pbmdcbiAgICAgKiB3aXRoIHZlcnNpb24gMjAxOC0wMy0yOC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYWNjb3VudC1pbmZvcm1hdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEFjY291bnRJbmZvKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWdldEFjY291bnRJbmZvXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZ2V0QWNjb3VudEluZm8oe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBsaXN0IG9mIHRoZSBjb250YWluZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9saXN0LWNvbnRhaW5lcnMyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBjb250YWluZXJzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBjb250YWluZXJzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGN1cnJlbnQgcGFnZS4gVGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgTGlzdCBDb250YWluZXIgU2VnbWVudCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgTGlzdCBDb250YWluZXIgU2VnbWVudCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgbGlzdENvbnRhaW5lcnNTZWdtZW50KG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtbGlzdENvbnRhaW5lcnNTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQubGlzdENvbnRhaW5lcnNTZWdtZW50KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLCBtYXJrZXIgfSwgb3B0aW9ucyksIHsgaW5jbHVkZTogdHlwZW9mIG9wdGlvbnMuaW5jbHVkZSA9PT0gXCJzdHJpbmdcIiA/IFtvcHRpb25zLmluY2x1ZGVdIDogb3B0aW9ucy5pbmNsdWRlLCB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBGaWx0ZXIgQmxvYnMgb3BlcmF0aW9uIGVuYWJsZXMgY2FsbGVycyB0byBsaXN0IGJsb2JzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aG9zZSB0YWdzXG4gICAgICogbWF0Y2ggYSBnaXZlbiBzZWFyY2ggZXhwcmVzc2lvbi4gRmlsdGVyIGJsb2JzIHNlYXJjaGVzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aXRoaW4gYVxuICAgICAqIHN0b3JhZ2UgYWNjb3VudCBidXQgY2FuIGJlIHNjb3BlZCB3aXRoaW4gdGhlIGV4cHJlc3Npb24gdG8gYSBzaW5nbGUgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1maW5kQmxvYnNCeVRhZ3NTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmZpbHRlckJsb2JzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB3aGVyZTogdGFnRmlsdGVyU3FsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgbWF4UGFnZVNpemU6IG9wdGlvbnMubWF4UGFnZVNpemUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlc3BvbnNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIGJsb2JzOiByZXNwb25zZS5ibG9icy5tYXAoKGJsb2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFnVmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGJsb2IudGFncykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJsb2JUYWdTZXQubGVuZ3RoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnVmFsdWUgPSBibG9iLnRhZ3MuYmxvYlRhZ1NldFswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iKSwgeyB0YWdzOiB0b1RhZ3MoYmxvYi50YWdzKSwgdGFnVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIFNlcnZpY2VGaW5kQmxvYnNCeVRhZ3NTZWdtZW50UmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnRmlsdGVyU3FsRXhwcmVzc2lvbiAtICBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byB0cnVlIGZvciBhIGJsb2IgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdHMuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZVtPRGF0YSAtIEFCTkZdIGZpbHRlciBzeW50YXggcnVsZSBkZWZpbmVzIHRoZSBmb3JtYWwgZ3JhbW1hciBmb3IgdGhlIHZhbHVlIG9mIHRoZSB3aGVyZSBxdWVyeSBwYXJhbWV0ZXI7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb25fMSwgbWFya2VyXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzU2VnbWVudHNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50KHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5ibG9icyA9IHJlc3BvbnNlLmJsb2JzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBibG9icy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZEJsb2JzQnlUYWdzSXRlbXMuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGZpbmRCbG9ic0J5VGFnc0l0ZW1zXzEodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMSwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50cyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKHNlZ21lbnQuYmxvYnMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGZpbmQgYWxsIGJsb2JzIHdpdGggc3BlY2lmaWVkIHRhZ1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGJsb2JzIGluIHBhZ2VzLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2Itc2VydmljZS1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgYmxvYiBvZiBibG9iU2VydmljZUNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2NvbnRhaW5lci5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGNvbnN0IGl0ZXIgPSBibG9iU2VydmljZUNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKTtcbiAgICAgKiBsZXQgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWJsb2JJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iSXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBibG9iU2VydmljZUNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMjAgfSkpIHtcbiAgICAgKiAgIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgYmxvYiBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gR2V0cyBuZXh0IG1hcmtlclxuICAgICAqIGxldCBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICogaXRlcmF0b3IgPSBibG9iU2VydmljZUNsaWVudFxuICAgICAqICAgLmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpXG4gICAgICogICAuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgYmxvYiBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFncyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9ic1xuICAgICAgICBjb25zdCBsaXN0U2VnbWVudE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMuZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbGlzdFNlZ21lbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIGxpc3RTZWdtZW50T3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvbnRhaW5lcnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGNvbnRhaW5lcnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGNvbnRhaW5lcnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RTZWdtZW50cyhtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0U2VnbWVudHNfMShtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBsaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0Q29udGFpbmVyc1NlZ21lbnQobWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBDb250YWluZXIgSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGNvbnRhaW5lcnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogbGlzdEl0ZW1zXzEob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMiwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5saXN0U2VnbWVudHMobWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50ID0gX2M7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQoeWllbGQqIHRzbGliLl9fYXN5bmNEZWxlZ2F0b3IodHNsaWIuX19hc3luY1ZhbHVlcyhzZWdtZW50LmNvbnRhaW5lckl0ZW1zKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBfZS5yZXR1cm4pKSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9iLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IGFsbCB0aGUgY29udGFpbmVyc1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGNvbnRhaW5lcnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgY29udGFpbmVyIG9mIGJsb2JTZXJ2aWNlQ2xpZW50Lmxpc3RDb250YWluZXJzKCkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBDb250YWluZXIgJHtpKyt9OiAke2NvbnRhaW5lci5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGNvbnN0IGl0ZXIgPSBibG9iU2VydmljZUNsaWVudC5saXN0Q29udGFpbmVycygpO1xuICAgICAqIGxldCBjb250YWluZXJJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFjb250YWluZXJJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBDb250YWluZXIgJHtpKyt9OiAke2NvbnRhaW5lckl0ZW0udmFsdWUubmFtZX1gKTtcbiAgICAgKiAgIGNvbnRhaW5lckl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBibG9iU2VydmljZUNsaWVudC5saXN0Q29udGFpbmVycygpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgaWYgKHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICAgICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gYmxvYlNlcnZpY2VDbGllbnQubGlzdENvbnRhaW5lcnMoKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMiB9KTtcbiAgICAgKiBsZXQgcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAyIGNvbnRhaW5lciBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5jb250YWluZXJJdGVtcykge1xuICAgICAqICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgcmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gR2V0cyBuZXh0IG1hcmtlclxuICAgICAqIGxldCBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICogaXRlcmF0b3IgPSBibG9iU2VydmljZUNsaWVudFxuICAgICAqICAgLmxpc3RDb250YWluZXJzKClcbiAgICAgKiAgIC5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAxMCBjb250YWluZXIgbmFtZXNcbiAgICAgKiBpZiAocmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhgQ29udGFpbmVyICR7aSsrfTogJHtjb250YWluZXIubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBjb250YWluZXJzLlxuICAgICAqIEByZXR1cm5zIEFuIGFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHN1cHBvcnRzIHBhZ2luZy5cbiAgICAgKi9cbiAgICBsaXN0Q29udGFpbmVycyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnByZWZpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmNsdWRlID0gW107XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVEZWxldGVkKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJkZWxldGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVNZXRhZGF0YSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwibWV0YWRhdGFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVN5c3RlbSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwic3lzdGVtXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgY29udGFpbmVyc1xuICAgICAgICBjb25zdCBsaXN0U2VnbWVudE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCAoaW5jbHVkZS5sZW5ndGggPiAwID8geyBpbmNsdWRlIH0gOiB7fSkpO1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5saXN0SXRlbXMobGlzdFNlZ21lbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RTZWdtZW50cyhzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCBsaXN0U2VnbWVudE9wdGlvbnMpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIFdIRU4gVVNJTkcgQkVBUkVSIFRPS0VOIEFVVEhFTlRJQ0FUSU9OIChUb2tlbkNyZWRlbnRpYWwpLlxuICAgICAqXG4gICAgICogUmV0cmlldmVzIGEgdXNlciBkZWxlZ2F0aW9uIGtleSBmb3IgdGhlIEJsb2Igc2VydmljZS4gVGhpcyBpcyBvbmx5IGEgdmFsaWQgb3BlcmF0aW9uIHdoZW4gdXNpbmdcbiAgICAgKiBiZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24uXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtdXNlci1kZWxlZ2F0aW9uLWtleVxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXJ0c09uIC0gICAgICBUaGUgc3RhcnQgdGltZSBmb3IgdGhlIHVzZXIgZGVsZWdhdGlvbiBTQVMuIE11c3QgYmUgd2l0aGluIDcgZGF5cyBvZiB0aGUgY3VycmVudCB0aW1lXG4gICAgICogQHBhcmFtIGV4cGlyZXNPbiAtICAgICBUaGUgZW5kIHRpbWUgZm9yIHRoZSB1c2VyIGRlbGVnYXRpb24gU0FTLiBNdXN0IGJlIHdpdGhpbiA3IGRheXMgb2YgdGhlIGN1cnJlbnQgdGltZVxuICAgICAqL1xuICAgIGFzeW5jIGdldFVzZXJEZWxlZ2F0aW9uS2V5KHN0YXJ0c09uLCBleHBpcmVzT24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWdldFVzZXJEZWxlZ2F0aW9uS2V5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmdldFVzZXJEZWxlZ2F0aW9uS2V5KHtcbiAgICAgICAgICAgICAgICBzdGFydHNPbjogdHJ1bmNhdGVkSVNPODA2MURhdGUoc3RhcnRzT24sIGZhbHNlKSxcbiAgICAgICAgICAgICAgICBleHBpcmVzT246IHRydW5jYXRlZElTTzgwNjFEYXRlKGV4cGlyZXNPbiwgZmFsc2UpLFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJEZWxlZ2F0aW9uS2V5ID0ge1xuICAgICAgICAgICAgICAgIHNpZ25lZE9iamVjdElkOiByZXNwb25zZS5zaWduZWRPYmplY3RJZCxcbiAgICAgICAgICAgICAgICBzaWduZWRUZW5hbnRJZDogcmVzcG9uc2Uuc2lnbmVkVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgc2lnbmVkU3RhcnRzT246IG5ldyBEYXRlKHJlc3BvbnNlLnNpZ25lZFN0YXJ0c09uKSxcbiAgICAgICAgICAgICAgICBzaWduZWRFeHBpcmVzT246IG5ldyBEYXRlKHJlc3BvbnNlLnNpZ25lZEV4cGlyZXNPbiksXG4gICAgICAgICAgICAgICAgc2lnbmVkU2VydmljZTogcmVzcG9uc2Uuc2lnbmVkU2VydmljZSxcbiAgICAgICAgICAgICAgICBzaWduZWRWZXJzaW9uOiByZXNwb25zZS5zaWduZWRWZXJzaW9uLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNwb25zZS52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCByZXMgPSBPYmplY3QuYXNzaWduKHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIHJlcXVlc3RJZDogcmVzcG9uc2UucmVxdWVzdElkLCBjbGllbnRSZXF1ZXN0SWQ6IHJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZCwgdmVyc2lvbjogcmVzcG9uc2UudmVyc2lvbiwgZGF0ZTogcmVzcG9uc2UuZGF0ZSwgZXJyb3JDb2RlOiByZXNwb25zZS5lcnJvckNvZGUgfSwgdXNlckRlbGVnYXRpb25LZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBCbG9iQmF0Y2hDbGllbnQgb2JqZWN0IHRvIGNvbmR1Y3QgYmF0Y2ggb3BlcmF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2hcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JCYXRjaENsaWVudCBvYmplY3QgZm9yIHRoaXMgc2VydmljZS5cbiAgICAgKi9cbiAgICBnZXRCbG9iQmF0Y2hDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkJhdGNoQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIEJsb2JTZXJ2aWNlQ2xpZW50IGNvbnN0cnVjdGVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWwuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZXMgYSBCbG9iIGFjY291bnQgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uIHRoZSBjbGllbnQgcHJvcGVydGllc1xuICAgICAqIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY3JlYXRlLWFjY291bnQtc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXhwaXJlc09uIC0gT3B0aW9uYWwuIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSBiZWNvbWVzIGludmFsaWQuIERlZmF1bHQgdG8gYW4gaG91ciBsYXRlciBpZiBub3QgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC0gU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgU0FTLlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGVzIC0gU3BlY2lmaWVzIHRoZSByZXNvdXJjZSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBBbiBhY2NvdW50IFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVBY2NvdW50U2FzVXJsKGV4cGlyZXNPbiwgcGVybWlzc2lvbnMgPSBBY2NvdW50U0FTUGVybWlzc2lvbnMucGFyc2UoXCJyXCIpLCByZXNvdXJjZVR5cGVzID0gXCJzY29cIiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghKHRoaXMuY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBhY2NvdW50IFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwaXJlc09uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBleHBpcmVzT24gPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgMzYwMCAqIDEwMDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNhcyA9IGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycyhPYmplY3QuYXNzaWduKHsgcGVybWlzc2lvbnMsXG4gICAgICAgICAgICBleHBpcmVzT24sXG4gICAgICAgICAgICByZXNvdXJjZVR5cGVzLCBzZXJ2aWNlczogQWNjb3VudFNBU1NlcnZpY2VzLnBhcnNlKFwiYlwiKS50b1N0cmluZygpIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiBhcHBlbmRUb1VSTFF1ZXJ5KHRoaXMudXJsLCBzYXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQmxvYlNlcnZpY2VDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBzdHJpbmcgdG8gc2lnbiBmb3IgYSBCbG9iIGFjY291bnQgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uXG4gICAgICogdGhlIGNsaWVudCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY3JlYXRlLWFjY291bnQtc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXhwaXJlc09uIC0gT3B0aW9uYWwuIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSBiZWNvbWVzIGludmFsaWQuIERlZmF1bHQgdG8gYW4gaG91ciBsYXRlciBpZiBub3QgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC0gU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgU0FTLlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGVzIC0gU3BlY2lmaWVzIHRoZSByZXNvdXJjZSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBBbiBhY2NvdW50IFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVTYXNTdHJpbmdUb1NpZ24oZXhwaXJlc09uLCBwZXJtaXNzaW9ucyA9IEFjY291bnRTQVNQZXJtaXNzaW9ucy5wYXJzZShcInJcIiksIHJlc291cmNlVHlwZXMgPSBcInNjb1wiLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIGFjY291bnQgU0FTIHdoZW4gdGhlIGNsaWVudCBpcyBpbml0aWFsaXplZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBpcmVzT24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGV4cGlyZXNPbiA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyAzNjAwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKE9iamVjdC5hc3NpZ24oeyBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGV4cGlyZXNPbixcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMsIHNlcnZpY2VzOiBBY2NvdW50U0FTU2VydmljZXMucGFyc2UoXCJiXCIpLnRvU3RyaW5nKCkgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkuc3RyaW5nVG9TaWduO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKiogS25vd24gdmFsdWVzIG9mIHtAbGluayBFbmNyeXB0aW9uQWxnb3JpdGhtVHlwZX0gdGhhdCB0aGUgc2VydmljZSBhY2NlcHRzLiAqL1xuZXhwb3J0cy5Lbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChLbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlKSB7XG4gICAgS25vd25FbmNyeXB0aW9uQWxnb3JpdGhtVHlwZVtcIkFFUzI1NlwiXSA9IFwiQUVTMjU2XCI7XG59KShleHBvcnRzLktub3duRW5jcnlwdGlvbkFsZ29yaXRobVR5cGUgfHwgKGV4cG9ydHMuS25vd25FbmNyeXB0aW9uQWxnb3JpdGhtVHlwZSA9IHt9KSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlc3RFcnJvclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvcmVSZXN0UGlwZWxpbmUuUmVzdEVycm9yOyB9XG59KTtcbmV4cG9ydHMuQWNjb3VudFNBU1Blcm1pc3Npb25zID0gQWNjb3VudFNBU1Blcm1pc3Npb25zO1xuZXhwb3J0cy5BY2NvdW50U0FTUmVzb3VyY2VUeXBlcyA9IEFjY291bnRTQVNSZXNvdXJjZVR5cGVzO1xuZXhwb3J0cy5BY2NvdW50U0FTU2VydmljZXMgPSBBY2NvdW50U0FTU2VydmljZXM7XG5leHBvcnRzLkFub255bW91c0NyZWRlbnRpYWwgPSBBbm9ueW1vdXNDcmVkZW50aWFsO1xuZXhwb3J0cy5Bbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5ID0gQW5vbnltb3VzQ3JlZGVudGlhbFBvbGljeTtcbmV4cG9ydHMuQXBwZW5kQmxvYkNsaWVudCA9IEFwcGVuZEJsb2JDbGllbnQ7XG5leHBvcnRzLkJhc2VSZXF1ZXN0UG9saWN5ID0gQmFzZVJlcXVlc3RQb2xpY3k7XG5leHBvcnRzLkJsb2JCYXRjaCA9IEJsb2JCYXRjaDtcbmV4cG9ydHMuQmxvYkJhdGNoQ2xpZW50ID0gQmxvYkJhdGNoQ2xpZW50O1xuZXhwb3J0cy5CbG9iQ2xpZW50ID0gQmxvYkNsaWVudDtcbmV4cG9ydHMuQmxvYkxlYXNlQ2xpZW50ID0gQmxvYkxlYXNlQ2xpZW50O1xuZXhwb3J0cy5CbG9iU0FTUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnM7XG5leHBvcnRzLkJsb2JTZXJ2aWNlQ2xpZW50ID0gQmxvYlNlcnZpY2VDbGllbnQ7XG5leHBvcnRzLkJsb2NrQmxvYkNsaWVudCA9IEJsb2NrQmxvYkNsaWVudDtcbmV4cG9ydHMuQ29udGFpbmVyQ2xpZW50ID0gQ29udGFpbmVyQ2xpZW50O1xuZXhwb3J0cy5Db250YWluZXJTQVNQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zO1xuZXhwb3J0cy5DcmVkZW50aWFsID0gQ3JlZGVudGlhbDtcbmV4cG9ydHMuQ3JlZGVudGlhbFBvbGljeSA9IENyZWRlbnRpYWxQb2xpY3k7XG5leHBvcnRzLlBhZ2VCbG9iQ2xpZW50ID0gUGFnZUJsb2JDbGllbnQ7XG5leHBvcnRzLlBpcGVsaW5lID0gUGlwZWxpbmU7XG5leHBvcnRzLlNBU1F1ZXJ5UGFyYW1ldGVycyA9IFNBU1F1ZXJ5UGFyYW1ldGVycztcbmV4cG9ydHMuU3RvcmFnZUJyb3dzZXJQb2xpY3kgPSBTdG9yYWdlQnJvd3NlclBvbGljeTtcbmV4cG9ydHMuU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5ID0gU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5O1xuZXhwb3J0cy5TdG9yYWdlT0F1dGhTY29wZXMgPSBTdG9yYWdlT0F1dGhTY29wZXM7XG5leHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeSA9IFN0b3JhZ2VSZXRyeVBvbGljeTtcbmV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeSA9IFN0b3JhZ2VSZXRyeVBvbGljeUZhY3Rvcnk7XG5leHBvcnRzLlN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsID0gU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWw7XG5leHBvcnRzLlN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5ID0gU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3k7XG5leHBvcnRzLmdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycyA9IGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycztcbmV4cG9ydHMuZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzID0gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzO1xuZXhwb3J0cy5nZXRCbG9iU2VydmljZUFjY291bnRBdWRpZW5jZSA9IGdldEJsb2JTZXJ2aWNlQWNjb3VudEF1ZGllbmNlO1xuZXhwb3J0cy5pc1BpcGVsaW5lTGlrZSA9IGlzUGlwZWxpbmVMaWtlO1xuZXhwb3J0cy5sb2dnZXIgPSBsb2dnZXI7XG5leHBvcnRzLm5ld1BpcGVsaW5lID0gbmV3UGlwZWxpbmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51cGxvYWRaaXBUb0Jsb2JTdG9yYWdlID0gdm9pZCAwO1xuY29uc3Qgc3RvcmFnZV9ibG9iXzEgPSByZXF1aXJlKFwiQGF6dXJlL3N0b3JhZ2UtYmxvYlwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9jb25maWdcIik7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmNvbnN0IGNyeXB0byA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3J5cHRvXCIpKTtcbmNvbnN0IHN0cmVhbSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwic3RyZWFtXCIpKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5mdW5jdGlvbiB1cGxvYWRaaXBUb0Jsb2JTdG9yYWdlKGF1dGhlbnRpY2F0ZWRVcGxvYWRVUkwsIHppcFVwbG9hZFN0cmVhbSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCB1cGxvYWRCeXRlQ291bnQgPSAwO1xuICAgICAgICBsZXQgbGFzdFByb2dyZXNzVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgY2h1bmtUaW1lciA9IChpbnRlcnZhbCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKERhdGUubm93KCkgLSBsYXN0UHJvZ3Jlc3NUaW1lID4gaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VwbG9hZCBwcm9ncmVzcyBzdGFsbGVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYXhDb25jdXJyZW5jeSA9ICgwLCBjb25maWdfMS5nZXRDb25jdXJyZW5jeSkoKTtcbiAgICAgICAgY29uc3QgYnVmZmVyU2l6ZSA9ICgwLCBjb25maWdfMS5nZXRVcGxvYWRDaHVua1NpemUpKCk7XG4gICAgICAgIGNvbnN0IGJsb2JDbGllbnQgPSBuZXcgc3RvcmFnZV9ibG9iXzEuQmxvYkNsaWVudChhdXRoZW50aWNhdGVkVXBsb2FkVVJMKTtcbiAgICAgICAgY29uc3QgYmxvY2tCbG9iQ2xpZW50ID0gYmxvYkNsaWVudC5nZXRCbG9ja0Jsb2JDbGllbnQoKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgVXBsb2FkaW5nIGFydGlmYWN0IHppcCB0byBibG9iIHN0b3JhZ2Ugd2l0aCBtYXhDb25jdXJyZW5jeTogJHttYXhDb25jdXJyZW5jeX0sIGJ1ZmZlclNpemU6ICR7YnVmZmVyU2l6ZX1gKTtcbiAgICAgICAgY29uc3QgdXBsb2FkQ2FsbGJhY2sgPSAocHJvZ3Jlc3MpID0+IHtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgVXBsb2FkZWQgYnl0ZXMgJHtwcm9ncmVzcy5sb2FkZWRCeXRlc31gKTtcbiAgICAgICAgICAgIHVwbG9hZEJ5dGVDb3VudCA9IHByb2dyZXNzLmxvYWRlZEJ5dGVzO1xuICAgICAgICAgICAgbGFzdFByb2dyZXNzVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBibG9iSFRUUEhlYWRlcnM6IHsgYmxvYkNvbnRlbnRUeXBlOiAnemlwJyB9LFxuICAgICAgICAgICAgb25Qcm9ncmVzczogdXBsb2FkQ2FsbGJhY2ssXG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2hhMjU2SGFzaCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdXBsb2FkU3RyZWFtID0gbmV3IHN0cmVhbS5QYXNzVGhyb3VnaCgpO1xuICAgICAgICBjb25zdCBoYXNoU3RyZWFtID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICAgICAgICB6aXBVcGxvYWRTdHJlYW0ucGlwZSh1cGxvYWRTdHJlYW0pOyAvLyBUaGlzIHN0cmVhbSBpcyB1c2VkIGZvciB0aGUgdXBsb2FkXG4gICAgICAgIHppcFVwbG9hZFN0cmVhbS5waXBlKGhhc2hTdHJlYW0pLnNldEVuY29kaW5nKCdoZXgnKTsgLy8gVGhpcyBzdHJlYW0gaXMgdXNlZCB0byBjb21wdXRlIGEgaGFzaCBvZiB0aGUgemlwIGNvbnRlbnQgdGhhdCBnZXRzIHVzZWQuIEludGVncml0eSBjaGVja1xuICAgICAgICBjb3JlLmluZm8oJ0JlZ2lubmluZyB1cGxvYWQgb2YgYXJ0aWZhY3QgY29udGVudCB0byBibG9iIHN0b3JhZ2UnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIFByb21pc2UucmFjZShbXG4gICAgICAgICAgICAgICAgYmxvY2tCbG9iQ2xpZW50LnVwbG9hZFN0cmVhbSh1cGxvYWRTdHJlYW0sIGJ1ZmZlclNpemUsIG1heENvbmN1cnJlbmN5LCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBjaHVua1RpbWVyKCgwLCBjb25maWdfMS5nZXRVcGxvYWRDaHVua1RpbWVvdXQpKCkpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvcnNfMS5OZXR3b3JrRXJyb3IuaXNOZXR3b3JrRXJyb3JDb2RlKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5OZXR3b3JrRXJyb3IoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb3JlLmluZm8oJ0ZpbmlzaGVkIHVwbG9hZGluZyBhcnRpZmFjdCBjb250ZW50IHRvIGJsb2Igc3RvcmFnZSEnKTtcbiAgICAgICAgaGFzaFN0cmVhbS5lbmQoKTtcbiAgICAgICAgc2hhMjU2SGFzaCA9IGhhc2hTdHJlYW0ucmVhZCgpO1xuICAgICAgICBjb3JlLmluZm8oYFNIQTI1NiBoYXNoIG9mIHVwbG9hZGVkIGFydGlmYWN0IHppcCBpcyAke3NoYTI1Nkhhc2h9YCk7XG4gICAgICAgIGlmICh1cGxvYWRCeXRlQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIGNvcmUud2FybmluZyhgTm8gZGF0YSB3YXMgdXBsb2FkZWQgdG8gYmxvYiBzdG9yYWdlLiBSZXBvcnRlZCB1cGxvYWQgYnl0ZSBjb3VudCBpcyAwLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cGxvYWRTaXplOiB1cGxvYWRCeXRlQ291bnQsXG4gICAgICAgICAgICBzaGEyNTZIYXNoXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLnVwbG9hZFppcFRvQmxvYlN0b3JhZ2UgPSB1cGxvYWRaaXBUb0Jsb2JTdG9yYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmxvYi11cGxvYWQuanMubWFwIiwKICAgICJjb25zdCBpc1dpbmRvd3MgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgcHJvY2VzcyAmJlxuICBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInXG5tb2R1bGUuZXhwb3J0cyA9IGlzV2luZG93cyA/IHsgc2VwOiAnXFxcXCcgfSA6IHsgc2VwOiAnLycgfVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGJhbGFuY2VkO1xuZnVuY3Rpb24gYmFsYW5jZWQoYSwgYiwgc3RyKSB7XG4gIGlmIChhIGluc3RhbmNlb2YgUmVnRXhwKSBhID0gbWF5YmVNYXRjaChhLCBzdHIpO1xuICBpZiAoYiBpbnN0YW5jZW9mIFJlZ0V4cCkgYiA9IG1heWJlTWF0Y2goYiwgc3RyKTtcblxuICB2YXIgciA9IHJhbmdlKGEsIGIsIHN0cik7XG5cbiAgcmV0dXJuIHIgJiYge1xuICAgIHN0YXJ0OiByWzBdLFxuICAgIGVuZDogclsxXSxcbiAgICBwcmU6IHN0ci5zbGljZSgwLCByWzBdKSxcbiAgICBib2R5OiBzdHIuc2xpY2UoclswXSArIGEubGVuZ3RoLCByWzFdKSxcbiAgICBwb3N0OiBzdHIuc2xpY2UoclsxXSArIGIubGVuZ3RoKVxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXliZU1hdGNoKHJlZywgc3RyKSB7XG4gIHZhciBtID0gc3RyLm1hdGNoKHJlZyk7XG4gIHJldHVybiBtID8gbVswXSA6IG51bGw7XG59XG5cbmJhbGFuY2VkLnJhbmdlID0gcmFuZ2U7XG5mdW5jdGlvbiByYW5nZShhLCBiLCBzdHIpIHtcbiAgdmFyIGJlZ3MsIGJlZywgbGVmdCwgcmlnaHQsIHJlc3VsdDtcbiAgdmFyIGFpID0gc3RyLmluZGV4T2YoYSk7XG4gIHZhciBiaSA9IHN0ci5pbmRleE9mKGIsIGFpICsgMSk7XG4gIHZhciBpID0gYWk7XG5cbiAgaWYgKGFpID49IDAgJiYgYmkgPiAwKSB7XG4gICAgaWYoYT09PWIpIHtcbiAgICAgIHJldHVybiBbYWksIGJpXTtcbiAgICB9XG4gICAgYmVncyA9IFtdO1xuICAgIGxlZnQgPSBzdHIubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPj0gMCAmJiAhcmVzdWx0KSB7XG4gICAgICBpZiAoaSA9PSBhaSkge1xuICAgICAgICBiZWdzLnB1c2goaSk7XG4gICAgICAgIGFpID0gc3RyLmluZGV4T2YoYSwgaSArIDEpO1xuICAgICAgfSBlbHNlIGlmIChiZWdzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHJlc3VsdCA9IFsgYmVncy5wb3AoKSwgYmkgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlZyA9IGJlZ3MucG9wKCk7XG4gICAgICAgIGlmIChiZWcgPCBsZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IGJlZztcbiAgICAgICAgICByaWdodCA9IGJpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmkgPSBzdHIuaW5kZXhPZihiLCBpICsgMSk7XG4gICAgICB9XG5cbiAgICAgIGkgPSBhaSA8IGJpICYmIGFpID49IDAgPyBhaSA6IGJpO1xuICAgIH1cblxuICAgIGlmIChiZWdzLmxlbmd0aCkge1xuICAgICAgcmVzdWx0ID0gWyBsZWZ0LCByaWdodCBdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLAogICAgInZhciBiYWxhbmNlZCA9IHJlcXVpcmUoJ2JhbGFuY2VkLW1hdGNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwYW5kVG9wO1xuXG52YXIgZXNjU2xhc2ggPSAnXFwwU0xBU0gnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjT3BlbiA9ICdcXDBPUEVOJytNYXRoLnJhbmRvbSgpKydcXDAnO1xudmFyIGVzY0Nsb3NlID0gJ1xcMENMT1NFJytNYXRoLnJhbmRvbSgpKydcXDAnO1xudmFyIGVzY0NvbW1hID0gJ1xcMENPTU1BJytNYXRoLnJhbmRvbSgpKydcXDAnO1xudmFyIGVzY1BlcmlvZCA9ICdcXDBQRVJJT0QnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG5cbmZ1bmN0aW9uIG51bWVyaWMoc3RyKSB7XG4gIHJldHVybiBwYXJzZUludChzdHIsIDEwKSA9PSBzdHJcbiAgICA/IHBhcnNlSW50KHN0ciwgMTApXG4gICAgOiBzdHIuY2hhckNvZGVBdCgwKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlQnJhY2VzKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KCdcXFxcXFxcXCcpLmpvaW4oZXNjU2xhc2gpXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFx7Jykuam9pbihlc2NPcGVuKVxuICAgICAgICAgICAgLnNwbGl0KCdcXFxcfScpLmpvaW4oZXNjQ2xvc2UpXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFwsJykuam9pbihlc2NDb21tYSlcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXC4nKS5qb2luKGVzY1BlcmlvZCk7XG59XG5cbmZ1bmN0aW9uIHVuZXNjYXBlQnJhY2VzKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KGVzY1NsYXNoKS5qb2luKCdcXFxcJylcbiAgICAgICAgICAgIC5zcGxpdChlc2NPcGVuKS5qb2luKCd7JylcbiAgICAgICAgICAgIC5zcGxpdChlc2NDbG9zZSkuam9pbignfScpXG4gICAgICAgICAgICAuc3BsaXQoZXNjQ29tbWEpLmpvaW4oJywnKVxuICAgICAgICAgICAgLnNwbGl0KGVzY1BlcmlvZCkuam9pbignLicpO1xufVxuXG5cbi8vIEJhc2ljYWxseSBqdXN0IHN0ci5zcGxpdChcIixcIiksIGJ1dCBoYW5kbGluZyBjYXNlc1xuLy8gd2hlcmUgd2UgaGF2ZSBuZXN0ZWQgYnJhY2VkIHNlY3Rpb25zLCB3aGljaCBzaG91bGQgYmVcbi8vIHRyZWF0ZWQgYXMgaW5kaXZpZHVhbCBtZW1iZXJzLCBsaWtlIHthLHtiLGN9LGR9XG5mdW5jdGlvbiBwYXJzZUNvbW1hUGFydHMoc3RyKSB7XG4gIGlmICghc3RyKVxuICAgIHJldHVybiBbJyddO1xuXG4gIHZhciBwYXJ0cyA9IFtdO1xuICB2YXIgbSA9IGJhbGFuY2VkKCd7JywgJ30nLCBzdHIpO1xuXG4gIGlmICghbSlcbiAgICByZXR1cm4gc3RyLnNwbGl0KCcsJyk7XG5cbiAgdmFyIHByZSA9IG0ucHJlO1xuICB2YXIgYm9keSA9IG0uYm9keTtcbiAgdmFyIHBvc3QgPSBtLnBvc3Q7XG4gIHZhciBwID0gcHJlLnNwbGl0KCcsJyk7XG5cbiAgcFtwLmxlbmd0aC0xXSArPSAneycgKyBib2R5ICsgJ30nO1xuICB2YXIgcG9zdFBhcnRzID0gcGFyc2VDb21tYVBhcnRzKHBvc3QpO1xuICBpZiAocG9zdC5sZW5ndGgpIHtcbiAgICBwW3AubGVuZ3RoLTFdICs9IHBvc3RQYXJ0cy5zaGlmdCgpO1xuICAgIHAucHVzaC5hcHBseShwLCBwb3N0UGFydHMpO1xuICB9XG5cbiAgcGFydHMucHVzaC5hcHBseShwYXJ0cywgcCk7XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG5mdW5jdGlvbiBleHBhbmRUb3Aoc3RyKSB7XG4gIGlmICghc3RyKVxuICAgIHJldHVybiBbXTtcblxuICAvLyBJIGRvbid0IGtub3cgd2h5IEJhc2ggNC4zIGRvZXMgdGhpcywgYnV0IGl0IGRvZXMuXG4gIC8vIEFueXRoaW5nIHN0YXJ0aW5nIHdpdGgge30gd2lsbCBoYXZlIHRoZSBmaXJzdCB0d28gYnl0ZXMgcHJlc2VydmVkXG4gIC8vIGJ1dCAqb25seSogYXQgdGhlIHRvcCBsZXZlbCwgc28ge30sYX1iIHdpbGwgbm90IGV4cGFuZCB0byBhbnl0aGluZyxcbiAgLy8gYnV0IGF7fSxifWMgd2lsbCBiZSBleHBhbmRlZCB0byBbYX1jLGFiY10uXG4gIC8vIE9uZSBjb3VsZCBhcmd1ZSB0aGF0IHRoaXMgaXMgYSBidWcgaW4gQmFzaCwgYnV0IHNpbmNlIHRoZSBnb2FsIG9mXG4gIC8vIHRoaXMgbW9kdWxlIGlzIHRvIG1hdGNoIEJhc2gncyBydWxlcywgd2UgZXNjYXBlIGEgbGVhZGluZyB7fVxuICBpZiAoc3RyLnN1YnN0cigwLCAyKSA9PT0gJ3t9Jykge1xuICAgIHN0ciA9ICdcXFxce1xcXFx9JyArIHN0ci5zdWJzdHIoMik7XG4gIH1cblxuICByZXR1cm4gZXhwYW5kKGVzY2FwZUJyYWNlcyhzdHIpLCB0cnVlKS5tYXAodW5lc2NhcGVCcmFjZXMpO1xufVxuXG5mdW5jdGlvbiBlbWJyYWNlKHN0cikge1xuICByZXR1cm4gJ3snICsgc3RyICsgJ30nO1xufVxuZnVuY3Rpb24gaXNQYWRkZWQoZWwpIHtcbiAgcmV0dXJuIC9eLT8wXFxkLy50ZXN0KGVsKTtcbn1cblxuZnVuY3Rpb24gbHRlKGksIHkpIHtcbiAgcmV0dXJuIGkgPD0geTtcbn1cbmZ1bmN0aW9uIGd0ZShpLCB5KSB7XG4gIHJldHVybiBpID49IHk7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZChzdHIsIGlzVG9wKSB7XG4gIHZhciBleHBhbnNpb25zID0gW107XG5cbiAgdmFyIG0gPSBiYWxhbmNlZCgneycsICd9Jywgc3RyKTtcbiAgaWYgKCFtKSByZXR1cm4gW3N0cl07XG5cbiAgLy8gbm8gbmVlZCB0byBleHBhbmQgcHJlLCBzaW5jZSBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIGZyZWUgb2YgYnJhY2Utc2V0c1xuICB2YXIgcHJlID0gbS5wcmU7XG4gIHZhciBwb3N0ID0gbS5wb3N0Lmxlbmd0aFxuICAgID8gZXhwYW5kKG0ucG9zdCwgZmFsc2UpXG4gICAgOiBbJyddO1xuXG4gIGlmICgvXFwkJC8udGVzdChtLnByZSkpIHsgICAgXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBwb3N0Lmxlbmd0aDsgaysrKSB7XG4gICAgICB2YXIgZXhwYW5zaW9uID0gcHJlKyAneycgKyBtLmJvZHkgKyAnfScgKyBwb3N0W2tdO1xuICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpc051bWVyaWNTZXF1ZW5jZSA9IC9eLT9cXGQrXFwuXFwuLT9cXGQrKD86XFwuXFwuLT9cXGQrKT8kLy50ZXN0KG0uYm9keSk7XG4gICAgdmFyIGlzQWxwaGFTZXF1ZW5jZSA9IC9eW2EtekEtWl1cXC5cXC5bYS16QS1aXSg/OlxcLlxcLi0/XFxkKyk/JC8udGVzdChtLmJvZHkpO1xuICAgIHZhciBpc1NlcXVlbmNlID0gaXNOdW1lcmljU2VxdWVuY2UgfHwgaXNBbHBoYVNlcXVlbmNlO1xuICAgIHZhciBpc09wdGlvbnMgPSBtLmJvZHkuaW5kZXhPZignLCcpID49IDA7XG4gICAgaWYgKCFpc1NlcXVlbmNlICYmICFpc09wdGlvbnMpIHtcbiAgICAgIC8vIHthfSxifVxuICAgICAgaWYgKG0ucG9zdC5tYXRjaCgvLC4qXFx9LykpIHtcbiAgICAgICAgc3RyID0gbS5wcmUgKyAneycgKyBtLmJvZHkgKyBlc2NDbG9zZSArIG0ucG9zdDtcbiAgICAgICAgcmV0dXJuIGV4cGFuZChzdHIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtzdHJdO1xuICAgIH1cblxuICAgIHZhciBuO1xuICAgIGlmIChpc1NlcXVlbmNlKSB7XG4gICAgICBuID0gbS5ib2R5LnNwbGl0KC9cXC5cXC4vKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IHBhcnNlQ29tbWFQYXJ0cyhtLmJvZHkpO1xuICAgICAgaWYgKG4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIHh7e2EsYn19eSA9PT4geHthfXkgeHtifXlcbiAgICAgICAgbiA9IGV4cGFuZChuWzBdLCBmYWxzZSkubWFwKGVtYnJhY2UpO1xuICAgICAgICBpZiAobi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gcG9zdC5tYXAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIG0ucHJlICsgblswXSArIHA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBuIGlzIHRoZSBwYXJ0cywgYW5kIHdlIGtub3cgaXQncyBub3QgYSBjb21tYSBzZXRcbiAgICAvLyB3aXRoIGEgc2luZ2xlIGVudHJ5LlxuICAgIHZhciBOO1xuXG4gICAgaWYgKGlzU2VxdWVuY2UpIHtcbiAgICAgIHZhciB4ID0gbnVtZXJpYyhuWzBdKTtcbiAgICAgIHZhciB5ID0gbnVtZXJpYyhuWzFdKTtcbiAgICAgIHZhciB3aWR0aCA9IE1hdGgubWF4KG5bMF0ubGVuZ3RoLCBuWzFdLmxlbmd0aClcbiAgICAgIHZhciBpbmNyID0gbi5sZW5ndGggPT0gM1xuICAgICAgICA/IE1hdGguYWJzKG51bWVyaWMoblsyXSkpXG4gICAgICAgIDogMTtcbiAgICAgIHZhciB0ZXN0ID0gbHRlO1xuICAgICAgdmFyIHJldmVyc2UgPSB5IDwgeDtcbiAgICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgIGluY3IgKj0gLTE7XG4gICAgICAgIHRlc3QgPSBndGU7XG4gICAgICB9XG4gICAgICB2YXIgcGFkID0gbi5zb21lKGlzUGFkZGVkKTtcblxuICAgICAgTiA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0geDsgdGVzdChpLCB5KTsgaSArPSBpbmNyKSB7XG4gICAgICAgIHZhciBjO1xuICAgICAgICBpZiAoaXNBbHBoYVNlcXVlbmNlKSB7XG4gICAgICAgICAgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgICAgaWYgKGMgPT09ICdcXFxcJylcbiAgICAgICAgICAgIGMgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjID0gU3RyaW5nKGkpO1xuICAgICAgICAgIGlmIChwYWQpIHtcbiAgICAgICAgICAgIHZhciBuZWVkID0gd2lkdGggLSBjLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChuZWVkID4gMCkge1xuICAgICAgICAgICAgICB2YXIgeiA9IG5ldyBBcnJheShuZWVkICsgMSkuam9pbignMCcpO1xuICAgICAgICAgICAgICBpZiAoaSA8IDApXG4gICAgICAgICAgICAgICAgYyA9ICctJyArIHogKyBjLnNsaWNlKDEpO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYyA9IHogKyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBOLnB1c2goYyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIE4gPSBbXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIE4ucHVzaC5hcHBseShOLCBleHBhbmQobltqXSwgZmFsc2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IE4ubGVuZ3RoOyBqKyspIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcG9zdC5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgZXhwYW5zaW9uID0gcHJlICsgTltqXSArIHBvc3Rba107XG4gICAgICAgIGlmICghaXNUb3AgfHwgaXNTZXF1ZW5jZSB8fCBleHBhbnNpb24pXG4gICAgICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuc2lvbnM7XG59XG5cbiIsCiAgICAiY29uc3QgbWluaW1hdGNoID0gbW9kdWxlLmV4cG9ydHMgPSAocCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKVxuXG4gIC8vIHNob3J0Y3V0OiBjb21tZW50cyBtYXRjaCBub3RoaW5nLlxuICBpZiAoIW9wdGlvbnMubm9jb21tZW50ICYmIHBhdHRlcm4uY2hhckF0KDApID09PSAnIycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1hdGNoKHApXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWluaW1hdGNoXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCcuL2xpYi9wYXRoLmpzJylcbm1pbmltYXRjaC5zZXAgPSBwYXRoLnNlcFxuXG5jb25zdCBHTE9CU1RBUiA9IFN5bWJvbCgnZ2xvYnN0YXIgKionKVxubWluaW1hdGNoLkdMT0JTVEFSID0gR0xPQlNUQVJcbmNvbnN0IGV4cGFuZCA9IHJlcXVpcmUoJ2JyYWNlLWV4cGFuc2lvbicpXG5cbmNvbnN0IHBsVHlwZXMgPSB7XG4gICchJzogeyBvcGVuOiAnKD86KD8hKD86JywgY2xvc2U6ICcpKVteL10qPyknfSxcbiAgJz8nOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJyk/JyB9LFxuICAnKyc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKSsnIH0sXG4gICcqJzogeyBvcGVuOiAnKD86JywgY2xvc2U6ICcpKicgfSxcbiAgJ0AnOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJyknIH1cbn1cblxuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbi8vIGRvbid0IG5lZWQgdG8gZXNjYXBlIC8gd2hlbiB1c2luZyBuZXcgUmVnRXhwKClcbmNvbnN0IHFtYXJrID0gJ1teL10nXG5cbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG5jb25zdCBzdGFyID0gcW1hcmsgKyAnKj8nXG5cbi8vICoqIHdoZW4gZG90cyBhcmUgYWxsb3dlZC4gIEFueXRoaW5nIGdvZXMsIGV4Y2VwdCAuLiBhbmQgLlxuLy8gbm90ICheIG9yIC8gZm9sbG93ZWQgYnkgb25lIG9yIHR3byBkb3RzIGZvbGxvd2VkIGJ5ICQgb3IgLyksXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJEb3QgPSAnKD86KD8hKD86XFxcXFxcL3xeKSg/OlxcXFwuezEsMn0pKCR8XFxcXFxcLykpLikqPydcblxuLy8gbm90IGEgXiBvciAvIGZvbGxvd2VkIGJ5IGEgZG90LFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyTm9Eb3QgPSAnKD86KD8hKD86XFxcXFxcL3xeKVxcXFwuKS4pKj8nXG5cbi8vIFwiYWJjXCIgLT4geyBhOnRydWUsIGI6dHJ1ZSwgYzp0cnVlIH1cbmNvbnN0IGNoYXJTZXQgPSBzID0+IHMuc3BsaXQoJycpLnJlZHVjZSgoc2V0LCBjKSA9PiB7XG4gIHNldFtjXSA9IHRydWVcbiAgcmV0dXJuIHNldFxufSwge30pXG5cbi8vIGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIGVzY2FwZWQgaW4gUmVnRXhwLlxuY29uc3QgcmVTcGVjaWFscyA9IGNoYXJTZXQoJygpLip7fSs/W11eJFxcXFwhJylcblxuLy8gY2hhcmFjdGVycyB0aGF0IGluZGljYXRlIHdlIGhhdmUgdG8gYWRkIHRoZSBwYXR0ZXJuIHN0YXJ0XG5jb25zdCBhZGRQYXR0ZXJuU3RhcnRTZXQgPSBjaGFyU2V0KCdbLignKVxuXG4vLyBub3JtYWxpemVzIHNsYXNoZXMuXG5jb25zdCBzbGFzaFNwbGl0ID0gL1xcLysvXG5cbm1pbmltYXRjaC5maWx0ZXIgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PlxuICAocCwgaSwgbGlzdCkgPT4gbWluaW1hdGNoKHAsIHBhdHRlcm4sIG9wdGlvbnMpXG5cbmNvbnN0IGV4dCA9IChhLCBiID0ge30pID0+IHtcbiAgY29uc3QgdCA9IHt9XG4gIE9iamVjdC5rZXlzKGEpLmZvckVhY2goayA9PiB0W2tdID0gYVtrXSlcbiAgT2JqZWN0LmtleXMoYikuZm9yRWFjaChrID0+IHRba10gPSBiW2tdKVxuICByZXR1cm4gdFxufVxuXG5taW5pbWF0Y2guZGVmYXVsdHMgPSBkZWYgPT4ge1xuICBpZiAoIWRlZiB8fCB0eXBlb2YgZGVmICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LmtleXMoZGVmKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gbWluaW1hdGNoXG4gIH1cblxuICBjb25zdCBvcmlnID0gbWluaW1hdGNoXG5cbiAgY29uc3QgbSA9IChwLCBwYXR0ZXJuLCBvcHRpb25zKSA9PiBvcmlnKHAsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuICBtLk1pbmltYXRjaCA9IGNsYXNzIE1pbmltYXRjaCBleHRlbmRzIG9yaWcuTWluaW1hdGNoIHtcbiAgICBjb25zdHJ1Y3RvciAocGF0dGVybiwgb3B0aW9ucykge1xuICAgICAgc3VwZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gICAgfVxuICB9XG4gIG0uTWluaW1hdGNoLmRlZmF1bHRzID0gb3B0aW9ucyA9PiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKS5NaW5pbWF0Y2hcbiAgbS5maWx0ZXIgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5maWx0ZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0uZGVmYXVsdHMgPSBvcHRpb25zID0+IG9yaWcuZGVmYXVsdHMoZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0ubWFrZVJlID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IG9yaWcubWFrZVJlKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuICBtLmJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IG9yaWcuYnJhY2VFeHBhbmQocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0ubWF0Y2ggPSAobGlzdCwgcGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5tYXRjaChsaXN0LCBwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcblxuICByZXR1cm4gbVxufVxuXG5cblxuXG5cbi8vIEJyYWNlIGV4cGFuc2lvbjpcbi8vIGF7YixjfWQgLT4gYWJkIGFjZFxuLy8gYXtiLH1jIC0+IGFiYyBhY1xuLy8gYXswLi4zfWQgLT4gYTBkIGExZCBhMmQgYTNkXG4vLyBhe2IsY3tkLGV9Zn1nIC0+IGFiZyBhY2RmZyBhY2VmZ1xuLy8gYXtiLGN9ZHtlLGZ9ZyAtPiBhYmRlZyBhY2RlZyBhYmRlZyBhYmRmZ1xuLy9cbi8vIEludmFsaWQgc2V0cyBhcmUgbm90IGV4cGFuZGVkLlxuLy8gYXsyLi59YiAtPiBhezIuLn1iXG4vLyBhe2J9YyAtPiBhe2J9Y1xubWluaW1hdGNoLmJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IGJyYWNlRXhwYW5kKHBhdHRlcm4sIG9wdGlvbnMpXG5cbmNvbnN0IGJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybilcblxuICAvLyBUaGFua3MgdG8gWWV0aW5nIExpIDxodHRwczovL2dpdGh1Yi5jb20veWV0aW5nbGk+IGZvclxuICAvLyBpbXByb3ZpbmcgdGhpcyByZWdleHAgdG8gYXZvaWQgYSBSZURPUyB2dWxuZXJhYmlsaXR5LlxuICBpZiAob3B0aW9ucy5ub2JyYWNlIHx8ICEvXFx7KD86KD8hXFx7KS4pKlxcfS8udGVzdChwYXR0ZXJuKSkge1xuICAgIC8vIHNob3J0Y3V0LiBubyBuZWVkIHRvIGV4cGFuZC5cbiAgICByZXR1cm4gW3BhdHRlcm5dXG4gIH1cblxuICByZXR1cm4gZXhwYW5kKHBhdHRlcm4pXG59XG5cbmNvbnN0IE1BWF9QQVRURVJOX0xFTkdUSCA9IDEwMjQgKiA2NFxuY29uc3QgYXNzZXJ0VmFsaWRQYXR0ZXJuID0gcGF0dGVybiA9PiB7XG4gIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhdHRlcm4nKVxuICB9XG5cbiAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gTUFYX1BBVFRFUk5fTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGF0dGVybiBpcyB0b28gbG9uZycpXG4gIH1cbn1cblxuLy8gcGFyc2UgYSBjb21wb25lbnQgb2YgdGhlIGV4cGFuZGVkIHNldC5cbi8vIEF0IHRoaXMgcG9pbnQsIG5vIHBhdHRlcm4gbWF5IGNvbnRhaW4gXCIvXCIgaW4gaXRcbi8vIHNvIHdlJ3JlIGdvaW5nIHRvIHJldHVybiBhIDJkIGFycmF5LCB3aGVyZSBlYWNoIGVudHJ5IGlzIHRoZSBmdWxsXG4vLyBwYXR0ZXJuLCBzcGxpdCBvbiAnLycsIGFuZCB0aGVuIHR1cm5lZCBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uLlxuLy8gQSByZWdleHAgaXMgbWFkZSBhdCB0aGUgZW5kIHdoaWNoIGpvaW5zIGVhY2ggYXJyYXkgd2l0aCBhblxuLy8gZXNjYXBlZCAvLCBhbmQgYW5vdGhlciBmdWxsIG9uZSB3aGljaCBqb2lucyBlYWNoIHJlZ2V4cCB3aXRoIHwuXG4vL1xuLy8gRm9sbG93aW5nIHRoZSBsZWFkIG9mIEJhc2ggNC4xLCBub3RlIHRoYXQgXCIqKlwiIG9ubHkgaGFzIHNwZWNpYWwgbWVhbmluZ1xuLy8gd2hlbiBpdCBpcyB0aGUgKm9ubHkqIHRoaW5nIGluIGEgcGF0aCBwb3J0aW9uLiAgT3RoZXJ3aXNlLCBhbnkgc2VyaWVzXG4vLyBvZiAqIGlzIGVxdWl2YWxlbnQgdG8gYSBzaW5nbGUgKi4gIEdsb2JzdGFyIGJlaGF2aW9yIGlzIGVuYWJsZWQgYnlcbi8vIGRlZmF1bHQsIGFuZCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBvcHRpb25zLm5vZ2xvYnN0YXIuXG5jb25zdCBTVUJQQVJTRSA9IFN5bWJvbCgnc3VicGFyc2UnKVxuXG5taW5pbWF0Y2gubWFrZVJlID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+XG4gIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucyB8fCB7fSkubWFrZVJlKClcblxubWluaW1hdGNoLm1hdGNoID0gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucylcbiAgbGlzdCA9IGxpc3QuZmlsdGVyKGYgPT4gbW0ubWF0Y2goZikpXG4gIGlmIChtbS5vcHRpb25zLm5vbnVsbCAmJiAhbGlzdC5sZW5ndGgpIHtcbiAgICBsaXN0LnB1c2gocGF0dGVybilcbiAgfVxuICByZXR1cm4gbGlzdFxufVxuXG4vLyByZXBsYWNlIHN0dWZmIGxpa2UgXFwqIHdpdGggKlxuY29uc3QgZ2xvYlVuZXNjYXBlID0gcyA9PiBzLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJylcbmNvbnN0IGNoYXJVbmVzY2FwZSA9IHMgPT4gcy5yZXBsYWNlKC9cXFxcKFteLVxcXV0pL2csICckMScpXG5jb25zdCByZWdFeHBFc2NhcGUgPSBzID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKVxuY29uc3QgYnJhRXhwRXNjYXBlID0gcyA9PiBzLnJlcGxhY2UoL1tbXFxdXFxcXF0vZywgJ1xcXFwkJicpXG5cbmNsYXNzIE1pbmltYXRjaCB7XG4gIGNvbnN0cnVjdG9yIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuc2V0ID0gW11cbiAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuXG4gICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9ICEhb3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZSB8fFxuICAgICAgb3B0aW9ucy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09IGZhbHNlXG4gICAgaWYgKHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUpIHtcbiAgICAgIHRoaXMucGF0dGVybiA9IHRoaXMucGF0dGVybi5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICB9XG4gICAgdGhpcy5yZWdleHAgPSBudWxsXG4gICAgdGhpcy5uZWdhdGUgPSBmYWxzZVxuICAgIHRoaXMuY29tbWVudCA9IGZhbHNlXG4gICAgdGhpcy5lbXB0eSA9IGZhbHNlXG4gICAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWxcblxuICAgIC8vIG1ha2UgdGhlIHNldCBvZiByZWdleHBzIGV0Yy5cbiAgICB0aGlzLm1ha2UoKVxuICB9XG5cbiAgZGVidWcgKCkge31cblxuICBtYWtlICgpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgLy8gZW1wdHkgcGF0dGVybnMgYW5kIGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICB0aGlzLmNvbW1lbnQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFwYXR0ZXJuKSB7XG4gICAgICB0aGlzLmVtcHR5ID0gdHJ1ZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gc3RlcCAxOiBmaWd1cmUgb3V0IG5lZ2F0aW9uLCBldGMuXG4gICAgdGhpcy5wYXJzZU5lZ2F0ZSgpXG5cbiAgICAvLyBzdGVwIDI6IGV4cGFuZCBicmFjZXNcbiAgICBsZXQgc2V0ID0gdGhpcy5nbG9iU2V0ID0gdGhpcy5icmFjZUV4cGFuZCgpXG5cbiAgICBpZiAob3B0aW9ucy5kZWJ1ZykgdGhpcy5kZWJ1ZyA9ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKC4uLmFyZ3MpXG5cbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gICAgLy8gc3RlcCAzOiBub3cgd2UgaGF2ZSBhIHNldCwgc28gdHVybiBlYWNoIG9uZSBpbnRvIGEgc2VyaWVzIG9mIHBhdGgtcG9ydGlvblxuICAgIC8vIG1hdGNoaW5nIHBhdHRlcm5zLlxuICAgIC8vIFRoZXNlIHdpbGwgYmUgcmVnZXhwcywgZXhjZXB0IGluIHRoZSBjYXNlIG9mIFwiKipcIiwgd2hpY2ggaXNcbiAgICAvLyBzZXQgdG8gdGhlIEdMT0JTVEFSIG9iamVjdCBmb3IgZ2xvYnN0YXIgYmVoYXZpb3IsXG4gICAgLy8gYW5kIHdpbGwgbm90IGNvbnRhaW4gYW55IC8gY2hhcmFjdGVyc1xuICAgIHNldCA9IHRoaXMuZ2xvYlBhcnRzID0gc2V0Lm1hcChzID0+IHMuc3BsaXQoc2xhc2hTcGxpdCkpXG5cbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gICAgLy8gZ2xvYiAtLT4gcmVnZXhwc1xuICAgIHNldCA9IHNldC5tYXAoKHMsIHNpLCBzZXQpID0+IHMubWFwKHRoaXMucGFyc2UsIHRoaXMpKVxuXG4gICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHNldClcblxuICAgIC8vIGZpbHRlciBvdXQgZXZlcnl0aGluZyB0aGF0IGRpZG4ndCBjb21waWxlIHByb3Blcmx5LlxuICAgIHNldCA9IHNldC5maWx0ZXIocyA9PiBzLmluZGV4T2YoZmFsc2UpID09PSAtMSlcblxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgICB0aGlzLnNldCA9IHNldFxuICB9XG5cbiAgcGFyc2VOZWdhdGUgKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubm9uZWdhdGUpIHJldHVyblxuXG4gICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVyblxuICAgIGxldCBuZWdhdGUgPSBmYWxzZVxuICAgIGxldCBuZWdhdGVPZmZzZXQgPSAwXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoICYmIHBhdHRlcm4uY2hhckF0KGkpID09PSAnISc7IGkrKykge1xuICAgICAgbmVnYXRlID0gIW5lZ2F0ZVxuICAgICAgbmVnYXRlT2Zmc2V0KytcbiAgICB9XG5cbiAgICBpZiAobmVnYXRlT2Zmc2V0KSB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKG5lZ2F0ZU9mZnNldClcbiAgICB0aGlzLm5lZ2F0ZSA9IG5lZ2F0ZVxuICB9XG5cbiAgLy8gc2V0IHBhcnRpYWwgdG8gdHJ1ZSB0byB0ZXN0IGlmLCBmb3IgZXhhbXBsZSxcbiAgLy8gXCIvYS9iXCIgbWF0Y2hlcyB0aGUgc3RhcnQgb2YgXCIvKi9iLyovZFwiXG4gIC8vIFBhcnRpYWwgbWVhbnMsIGlmIHlvdSBydW4gb3V0IG9mIGZpbGUgYmVmb3JlIHlvdSBydW5cbiAgLy8gb3V0IG9mIHBhdHRlcm4sIHRoZW4gdGhhdCdzIGZpbmUsIGFzIGxvbmcgYXMgYWxsXG4gIC8vIHRoZSBwYXJ0cyBtYXRjaC5cbiAgbWF0Y2hPbmUgKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUnLFxuICAgICAgeyAndGhpcyc6IHRoaXMsIGZpbGU6IGZpbGUsIHBhdHRlcm46IHBhdHRlcm4gfSlcblxuICAgIHRoaXMuZGVidWcoJ21hdGNoT25lJywgZmlsZS5sZW5ndGgsIHBhdHRlcm4ubGVuZ3RoKVxuXG4gICAgZm9yICh2YXIgZmkgPSAwLFxuICAgICAgICBwaSA9IDAsXG4gICAgICAgIGZsID0gZmlsZS5sZW5ndGgsXG4gICAgICAgIHBsID0gcGF0dGVybi5sZW5ndGhcbiAgICAgICAgOyAoZmkgPCBmbCkgJiYgKHBpIDwgcGwpXG4gICAgICAgIDsgZmkrKywgcGkrKykge1xuICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUgbG9vcCcpXG4gICAgICB2YXIgcCA9IHBhdHRlcm5bcGldXG4gICAgICB2YXIgZiA9IGZpbGVbZmldXG5cbiAgICAgIHRoaXMuZGVidWcocGF0dGVybiwgcCwgZilcblxuICAgICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUuXG4gICAgICAvLyBzb21lIGludmFsaWQgcmVnZXhwIHN0dWZmIGluIHRoZSBzZXQuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChwID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGlmIChwID09PSBHTE9CU1RBUikge1xuICAgICAgICB0aGlzLmRlYnVnKCdHTE9CU1RBUicsIFtwYXR0ZXJuLCBwLCBmXSlcblxuICAgICAgICAvLyBcIioqXCJcbiAgICAgICAgLy8gYS8qKi9iLyoqL2Mgd291bGQgbWF0Y2ggdGhlIGZvbGxvd2luZzpcbiAgICAgICAgLy8gYS9iL3gveS96L2NcbiAgICAgICAgLy8gYS94L3kvei9iL2NcbiAgICAgICAgLy8gYS9iL3gvYi94L2NcbiAgICAgICAgLy8gYS9iL2NcbiAgICAgICAgLy8gVG8gZG8gdGhpcywgdGFrZSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlclxuICAgICAgICAvLyB0aGUgKiosIGFuZCBzZWUgaWYgaXQgd291bGQgbWF0Y2ggdGhlIGZpbGUgcmVtYWluZGVyLlxuICAgICAgICAvLyBJZiBzbywgcmV0dXJuIHN1Y2Nlc3MuXG4gICAgICAgIC8vIElmIG5vdCwgdGhlICoqIFwic3dhbGxvd3NcIiBhIHNlZ21lbnQsIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgIC8vIFRoaXMgaXMgcmVjdXJzaXZlbHkgYXdmdWwuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGEvKiovYi8qKi9jIG1hdGNoaW5nIGEvYi94L3kvei9jXG4gICAgICAgIC8vIC0gYSBtYXRjaGVzIGFcbiAgICAgICAgLy8gLSBkb3VibGVzdGFyXG4gICAgICAgIC8vICAgLSBtYXRjaE9uZShiL3gveS96L2MsIGIvKiovYylcbiAgICAgICAgLy8gICAgIC0gYiBtYXRjaGVzIGJcbiAgICAgICAgLy8gICAgIC0gZG91Ymxlc3RhclxuICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKHgveS96L2MsIGMpIC0+IG5vXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoeS96L2MsIGMpIC0+IG5vXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoei9jLCBjKSAtPiBub1xuICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKGMsIGMpIHllcywgaGl0XG4gICAgICAgIHZhciBmciA9IGZpXG4gICAgICAgIHZhciBwciA9IHBpICsgMVxuICAgICAgICBpZiAocHIgPT09IHBsKSB7XG4gICAgICAgICAgdGhpcy5kZWJ1ZygnKiogYXQgdGhlIGVuZCcpXG4gICAgICAgICAgLy8gYSAqKiBhdCB0aGUgZW5kIHdpbGwganVzdCBzd2FsbG93IHRoZSByZXN0LlxuICAgICAgICAgIC8vIFdlIGhhdmUgZm91bmQgYSBtYXRjaC5cbiAgICAgICAgICAvLyBob3dldmVyLCBpdCB3aWxsIG5vdCBzd2FsbG93IC8ueCwgdW5sZXNzXG4gICAgICAgICAgLy8gb3B0aW9ucy5kb3QgaXMgc2V0LlxuICAgICAgICAgIC8vIC4gYW5kIC4uIGFyZSAqbmV2ZXIqIG1hdGNoZWQgYnkgKiosIGZvciBleHBsb3NpdmVseVxuICAgICAgICAgIC8vIGV4cG9uZW50aWFsIHJlYXNvbnMuXG4gICAgICAgICAgZm9yICg7IGZpIDwgZmw7IGZpKyspIHtcbiAgICAgICAgICAgIGlmIChmaWxlW2ZpXSA9PT0gJy4nIHx8IGZpbGVbZmldID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgZmlsZVtmaV0uY2hhckF0KDApID09PSAnLicpKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9rLCBsZXQncyBzZWUgaWYgd2UgY2FuIHN3YWxsb3cgd2hhdGV2ZXIgd2UgY2FuLlxuICAgICAgICB3aGlsZSAoZnIgPCBmbCkge1xuICAgICAgICAgIHZhciBzd2FsbG93ZWUgPSBmaWxlW2ZyXVxuXG4gICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuZ2xvYnN0YXIgd2hpbGUnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIsIHN3YWxsb3dlZSlcblxuICAgICAgICAgIC8vIFhYWCByZW1vdmUgdGhpcyBzbGljZS4gIEp1c3QgcGFzcyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICAgICAgaWYgKHRoaXMubWF0Y2hPbmUoZmlsZS5zbGljZShmciksIHBhdHRlcm4uc2xpY2UocHIpLCBwYXJ0aWFsKSkge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZ2xvYnN0YXIgZm91bmQgbWF0Y2ghJywgZnIsIGZsLCBzd2FsbG93ZWUpXG4gICAgICAgICAgICAvLyBmb3VuZCBhIG1hdGNoLlxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY2FuJ3Qgc3dhbGxvdyBcIi5cIiBvciBcIi4uXCIgZXZlci5cbiAgICAgICAgICAgIC8vIGNhbiBvbmx5IHN3YWxsb3cgXCIuZm9vXCIgd2hlbiBleHBsaWNpdGx5IGFza2VkLlxuICAgICAgICAgICAgaWYgKHN3YWxsb3dlZSA9PT0gJy4nIHx8IHN3YWxsb3dlZSA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIHN3YWxsb3dlZS5jaGFyQXQoMCkgPT09ICcuJykpIHtcbiAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZG90IGRldGVjdGVkIScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcilcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gKiogc3dhbGxvd3MgYSBzZWdtZW50LCBhbmQgY29udGludWUuXG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBzd2FsbG93IGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlJylcbiAgICAgICAgICAgIGZyKytcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBubyBtYXRjaCB3YXMgZm91bmQuXG4gICAgICAgIC8vIEhvd2V2ZXIsIGluIHBhcnRpYWwgbW9kZSwgd2UgY2FuJ3Qgc2F5IHRoaXMgaXMgbmVjZXNzYXJpbHkgb3Zlci5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBtb3JlICpwYXR0ZXJuKiBsZWZ0LCB0aGVuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocGFydGlhbCkge1xuICAgICAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZVxuICAgICAgICAgIHRoaXMuZGVidWcoJ1xcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8nLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpXG4gICAgICAgICAgaWYgKGZyID09PSBmbCkgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gKipcbiAgICAgIC8vIG5vbi1tYWdpYyBwYXR0ZXJucyBqdXN0IGhhdmUgdG8gbWF0Y2ggZXhhY3RseVxuICAgICAgLy8gcGF0dGVybnMgd2l0aCBtYWdpYyBoYXZlIGJlZW4gdHVybmVkIGludG8gcmVnZXhwcy5cbiAgICAgIHZhciBoaXRcbiAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGl0ID0gZiA9PT0gcFxuICAgICAgICB0aGlzLmRlYnVnKCdzdHJpbmcgbWF0Y2gnLCBwLCBmLCBoaXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaXQgPSBmLm1hdGNoKHApXG4gICAgICAgIHRoaXMuZGVidWcoJ3BhdHRlcm4gbWF0Y2gnLCBwLCBmLCBoaXQpXG4gICAgICB9XG5cbiAgICAgIGlmICghaGl0KSByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgVGhpcyBjYW4gb25seSBtYXRjaCBhXG4gICAgLy8gY29ycmVzcG9uZGluZyBcIlwiIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgICAvLyBhIHBhdHRlcm4gdGhhdCBlbmRzIGluIC8sIHVubGVzcyB0aGUgcGF0dGVybiBqdXN0XG4gICAgLy8gZG9lc24ndCBoYXZlIGFueSBtb3JlIGZvciBpdC4gQnV0LCBhL2IvIHNob3VsZCAqbm90KlxuICAgIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gICAgLy8gW14vXSo/IHBhdHRlcm4sIGV4Y2VwdCBpbiBwYXJ0aWFsIG1vZGUsIHdoZXJlIGl0IG1pZ2h0XG4gICAgLy8gc2ltcGx5IG5vdCBiZSByZWFjaGVkIHlldC5cbiAgICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuXG4gICAgLy8gbm93IGVpdGhlciB3ZSBmZWxsIG9mZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBvciB3ZSdyZSBkb25lLlxuICAgIGlmIChmaSA9PT0gZmwgJiYgcGkgPT09IHBsKSB7XG4gICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICAvLyBhbiBleGFjdCBoaXQhXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoZmkgPT09IGZsKSB7XG4gICAgICAvLyByYW4gb3V0IG9mIGZpbGUsIGJ1dCBzdGlsbCBoYWQgcGF0dGVybiBsZWZ0LlxuICAgICAgLy8gdGhpcyBpcyBvayBpZiB3ZSdyZSBkb2luZyB0aGUgbWF0Y2ggYXMgcGFydCBvZlxuICAgICAgLy8gYSBnbG9iIGZzIHRyYXZlcnNhbC5cbiAgICAgIHJldHVybiBwYXJ0aWFsXG4gICAgfSBlbHNlIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovIGlmIChwaSA9PT0gcGwpIHtcbiAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiwgc3RpbGwgaGF2ZSBmaWxlIGxlZnQuXG4gICAgICAvLyB0aGlzIGlzIG9ubHkgYWNjZXB0YWJsZSBpZiB3ZSdyZSBvbiB0aGUgdmVyeSBsYXN0XG4gICAgICAvLyBlbXB0eSBzZWdtZW50IG9mIGEgZmlsZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAgICAvLyBhLyogc2hvdWxkIG1hdGNoIGEvYi9cbiAgICAgIHJldHVybiAoZmkgPT09IGZsIC0gMSkgJiYgKGZpbGVbZmldID09PSAnJylcbiAgICB9XG5cbiAgICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGUuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3d0Zj8nKVxuICB9XG5cbiAgYnJhY2VFeHBhbmQgKCkge1xuICAgIHJldHVybiBicmFjZUV4cGFuZCh0aGlzLnBhdHRlcm4sIHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIHBhcnNlIChwYXR0ZXJuLCBpc1N1Yikge1xuICAgIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgLy8gc2hvcnRjdXRzXG4gICAgaWYgKHBhdHRlcm4gPT09ICcqKicpIHtcbiAgICAgIGlmICghb3B0aW9ucy5ub2dsb2JzdGFyKVxuICAgICAgICByZXR1cm4gR0xPQlNUQVJcbiAgICAgIGVsc2VcbiAgICAgICAgcGF0dGVybiA9ICcqJ1xuICAgIH1cbiAgICBpZiAocGF0dGVybiA9PT0gJycpIHJldHVybiAnJ1xuXG4gICAgbGV0IHJlID0gJydcbiAgICBsZXQgaGFzTWFnaWMgPSBmYWxzZVxuICAgIGxldCBlc2NhcGluZyA9IGZhbHNlXG4gICAgLy8gPyA9PiBvbmUgc2luZ2xlIGNoYXJhY3RlclxuICAgIGNvbnN0IHBhdHRlcm5MaXN0U3RhY2sgPSBbXVxuICAgIGNvbnN0IG5lZ2F0aXZlTGlzdHMgPSBbXVxuICAgIGxldCBzdGF0ZUNoYXJcbiAgICBsZXQgaW5DbGFzcyA9IGZhbHNlXG4gICAgbGV0IHJlQ2xhc3NTdGFydCA9IC0xXG4gICAgbGV0IGNsYXNzU3RhcnQgPSAtMVxuICAgIGxldCBjc1xuICAgIGxldCBwbFxuICAgIGxldCBzcFxuICAgIC8vIC4gYW5kIC4uIG5ldmVyIG1hdGNoIGFueXRoaW5nIHRoYXQgZG9lc24ndCBzdGFydCB3aXRoIC4sXG4gICAgLy8gZXZlbiB3aGVuIG9wdGlvbnMuZG90IGlzIHNldC4gIEhvd2V2ZXIsIGlmIHRoZSBwYXR0ZXJuXG4gICAgLy8gc3RhcnRzIHdpdGggLiwgdGhlbiB0cmF2ZXJzYWwgcGF0dGVybnMgY2FuIG1hdGNoLlxuICAgIGxldCBkb3RUcmF2QWxsb3dlZCA9IHBhdHRlcm4uY2hhckF0KDApID09PSAnLidcbiAgICBsZXQgZG90RmlsZUFsbG93ZWQgPSBvcHRpb25zLmRvdCB8fCBkb3RUcmF2QWxsb3dlZFxuICAgIGNvbnN0IHBhdHRlcm5TdGFydCA9ICgpID0+XG4gICAgICBkb3RUcmF2QWxsb3dlZFxuICAgICAgICA/ICcnXG4gICAgICAgIDogZG90RmlsZUFsbG93ZWRcbiAgICAgICAgPyAnKD8hKD86XnxcXFxcLylcXFxcLnsxLDJ9KD86JHxcXFxcLykpJ1xuICAgICAgICA6ICcoPyFcXFxcLiknXG4gICAgY29uc3Qgc3ViUGF0dGVyblN0YXJ0ID0gKHApID0+XG4gICAgICBwLmNoYXJBdCgwKSA9PT0gJy4nXG4gICAgICAgID8gJydcbiAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICA/ICcoPyEoPzpefFxcXFwvKVxcXFwuezEsMn0oPzokfFxcXFwvKSknXG4gICAgICAgIDogJyg/IVxcXFwuKSdcblxuXG4gICAgY29uc3QgY2xlYXJTdGF0ZUNoYXIgPSAoKSA9PiB7XG4gICAgICBpZiAoc3RhdGVDaGFyKSB7XG4gICAgICAgIC8vIHdlIGhhZCBzb21lIHN0YXRlLXRyYWNraW5nIGNoYXJhY3RlclxuICAgICAgICAvLyB0aGF0IHdhc24ndCBjb25zdW1lZCBieSB0aGlzIHBhc3MuXG4gICAgICAgIHN3aXRjaCAoc3RhdGVDaGFyKSB7XG4gICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICByZSArPSBzdGFyXG4gICAgICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJz8nOlxuICAgICAgICAgICAgcmUgKz0gcW1hcmtcbiAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJyArIHN0YXRlQ2hhclxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1ZygnY2xlYXJTdGF0ZUNoYXIgJWogJWonLCBzdGF0ZUNoYXIsIHJlKVxuICAgICAgICBzdGF0ZUNoYXIgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBjOyAoaSA8IHBhdHRlcm4ubGVuZ3RoKSAmJiAoYyA9IHBhdHRlcm4uY2hhckF0KGkpKTsgaSsrKSB7XG4gICAgICB0aGlzLmRlYnVnKCclc1xcdCVzICVzICVqJywgcGF0dGVybiwgaSwgcmUsIGMpXG5cbiAgICAgIC8vIHNraXAgb3ZlciBhbnkgdGhhdCBhcmUgZXNjYXBlZC5cbiAgICAgIGlmIChlc2NhcGluZykge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGNvbXBsZXRlbHkgbm90IGFsbG93ZWQsIGV2ZW4gZXNjYXBlZC4gKi9cbiAgICAgICAgaWYgKGMgPT09ICcvJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlU3BlY2lhbHNbY10pIHtcbiAgICAgICAgICByZSArPSAnXFxcXCdcbiAgICAgICAgfVxuICAgICAgICByZSArPSBjXG4gICAgICAgIGVzY2FwaW5nID0gZmFsc2VcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgJy8nOiB7XG4gICAgICAgICAgLy8gU2hvdWxkIGFscmVhZHkgYmUgcGF0aC1zcGxpdCBieSBub3cuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdcXFxcJzpcbiAgICAgICAgICBpZiAoaW5DbGFzcyAmJiBwYXR0ZXJuLmNoYXJBdChpICsgMSkgPT09ICctJykge1xuICAgICAgICAgICAgcmUgKz0gY1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gdGhlIHZhcmlvdXMgc3RhdGVDaGFyIHZhbHVlc1xuICAgICAgICAvLyBmb3IgdGhlIFwiZXh0Z2xvYlwiIHN0dWZmLlxuICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgY2FzZSAnKic6XG4gICAgICAgIGNhc2UgJysnOlxuICAgICAgICBjYXNlICdAJzpcbiAgICAgICAgY2FzZSAnISc6XG4gICAgICAgICAgdGhpcy5kZWJ1ZygnJXNcXHQlcyAlcyAlaiA8LS0gc3RhdGVDaGFyJywgcGF0dGVybiwgaSwgcmUsIGMpXG5cbiAgICAgICAgICAvLyBhbGwgb2YgdGhvc2UgYXJlIGxpdGVyYWxzIGluc2lkZSBhIGNsYXNzLCBleGNlcHQgdGhhdFxuICAgICAgICAgIC8vIHRoZSBnbG9iIFshYV0gbWVhbnMgW15hXSBpbiByZWdleHBcbiAgICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnICBpbiBjbGFzcycpXG4gICAgICAgICAgICBpZiAoYyA9PT0gJyEnICYmIGkgPT09IGNsYXNzU3RhcnQgKyAxKSBjID0gJ14nXG4gICAgICAgICAgICByZSArPSBjXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHN0YXRlQ2hhciwgdGhlbiBpdCBtZWFuc1xuICAgICAgICAgIC8vIHRoYXQgdGhlcmUgd2FzIHNvbWV0aGluZyBsaWtlICoqIG9yICs/IGluIHRoZXJlLlxuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3RhdGVDaGFyLCB0aGVuIHByb2NlZWQgd2l0aCB0aGlzIG9uZS5cbiAgICAgICAgICB0aGlzLmRlYnVnKCdjYWxsIGNsZWFyU3RhdGVDaGFyICVqJywgc3RhdGVDaGFyKVxuICAgICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgICBzdGF0ZUNoYXIgPSBjXG4gICAgICAgICAgLy8gaWYgZXh0Z2xvYiBpcyBkaXNhYmxlZCwgdGhlbiArKGFzZGZ8Zm9vKSBpc24ndCBhIHRoaW5nLlxuICAgICAgICAgIC8vIGp1c3QgY2xlYXIgdGhlIHN0YXRlY2hhciAqbm93KiwgcmF0aGVyIHRoYW4gZXZlbiBkaXZpbmcgaW50b1xuICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuTGlzdCBzdHVmZi5cbiAgICAgICAgICBpZiAob3B0aW9ucy5ub2V4dCkgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgJygnOiB7XG4gICAgICAgICAgaWYgKGluQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlICs9ICcoJ1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0YXRlQ2hhcikge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwoJ1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwbEVudHJ5ID0ge1xuICAgICAgICAgICAgdHlwZTogc3RhdGVDaGFyLFxuICAgICAgICAgICAgc3RhcnQ6IGkgLSAxLFxuICAgICAgICAgICAgcmVTdGFydDogcmUubGVuZ3RoLFxuICAgICAgICAgICAgb3BlbjogcGxUeXBlc1tzdGF0ZUNoYXJdLm9wZW4sXG4gICAgICAgICAgICBjbG9zZTogcGxUeXBlc1tzdGF0ZUNoYXJdLmNsb3NlLFxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ1xcdCcsIHBsRW50cnkpXG4gICAgICAgICAgcGF0dGVybkxpc3RTdGFjay5wdXNoKHBsRW50cnkpXG4gICAgICAgICAgLy8gbmVnYXRpb24gaXMgKD86KD8hKD86anMpKD86PHJlc3Q+KSlbXi9dKilcbiAgICAgICAgICByZSArPSBwbEVudHJ5Lm9wZW5cbiAgICAgICAgICAvLyBuZXh0IGVudHJ5IHN0YXJ0cyB3aXRoIGEgZG90IG1heWJlP1xuICAgICAgICAgIGlmIChwbEVudHJ5LnN0YXJ0ID09PSAwICYmIHBsRW50cnkudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICBkb3RUcmF2QWxsb3dlZCA9IHRydWVcbiAgICAgICAgICAgIHJlICs9IHN1YlBhdHRlcm5TdGFydChwYXR0ZXJuLnNsaWNlKGkgKyAxKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kZWJ1ZygncGxUeXBlICVqICVqJywgc3RhdGVDaGFyLCByZSlcbiAgICAgICAgICBzdGF0ZUNoYXIgPSBmYWxzZVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICcpJzoge1xuICAgICAgICAgIGNvbnN0IHBsRW50cnkgPSBwYXR0ZXJuTGlzdFN0YWNrW3BhdHRlcm5MaXN0U3RhY2subGVuZ3RoIC0gMV1cbiAgICAgICAgICBpZiAoaW5DbGFzcyB8fCAhcGxFbnRyeSkge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwpJ1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcGF0dGVybkxpc3RTdGFjay5wb3AoKVxuXG4gICAgICAgICAgLy8gY2xvc2luZyBhbiBleHRnbG9iXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgICAgICAgIHBsID0gcGxFbnRyeVxuICAgICAgICAgIC8vIG5lZ2F0aW9uIGlzICg/Oig/IWpzKVteL10qKVxuICAgICAgICAgIC8vIFRoZSBvdGhlcnMgYXJlICg/OjxwYXR0ZXJuPik8dHlwZT5cbiAgICAgICAgICByZSArPSBwbC5jbG9zZVxuICAgICAgICAgIGlmIChwbC50eXBlID09PSAnIScpIHtcbiAgICAgICAgICAgIG5lZ2F0aXZlTGlzdHMucHVzaChPYmplY3QuYXNzaWduKHBsLCB7IHJlRW5kOiByZS5sZW5ndGggfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICd8Jzoge1xuICAgICAgICAgIGNvbnN0IHBsRW50cnkgPSBwYXR0ZXJuTGlzdFN0YWNrW3BhdHRlcm5MaXN0U3RhY2subGVuZ3RoIC0gMV1cbiAgICAgICAgICBpZiAoaW5DbGFzcyB8fCAhcGxFbnRyeSkge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFx8J1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgICAgcmUgKz0gJ3wnXG4gICAgICAgICAgLy8gbmV4dCBzdWJwYXR0ZXJuIGNhbiBzdGFydCB3aXRoIGEgZG90P1xuICAgICAgICAgIGlmIChwbEVudHJ5LnN0YXJ0ID09PSAwICYmIHBsRW50cnkudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICBkb3RUcmF2QWxsb3dlZCA9IHRydWVcbiAgICAgICAgICAgIHJlICs9IHN1YlBhdHRlcm5TdGFydChwYXR0ZXJuLnNsaWNlKGkgKyAxKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoZXNlIGFyZSBtb3N0bHkgdGhlIHNhbWUgaW4gcmVnZXhwIGFuZCBnbG9iXG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgIC8vIHN3YWxsb3cgYW55IHN0YXRlLXRyYWNraW5nIGNoYXIgYmVmb3JlIHRoZSBbXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuXG4gICAgICAgICAgaWYgKGluQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJyArIGNcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5DbGFzcyA9IHRydWVcbiAgICAgICAgICBjbGFzc1N0YXJ0ID0gaVxuICAgICAgICAgIHJlQ2xhc3NTdGFydCA9IHJlLmxlbmd0aFxuICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAvLyAgYSByaWdodCBicmFja2V0IHNoYWxsIGxvc2UgaXRzIHNwZWNpYWxcbiAgICAgICAgICAvLyAgbWVhbmluZyBhbmQgcmVwcmVzZW50IGl0c2VsZiBpblxuICAgICAgICAgIC8vICBhIGJyYWNrZXQgZXhwcmVzc2lvbiBpZiBpdCBvY2N1cnNcbiAgICAgICAgICAvLyAgZmlyc3QgaW4gdGhlIGxpc3QuICAtLSBQT1NJWC4yIDIuOC4zLjJcbiAgICAgICAgICBpZiAoaSA9PT0gY2xhc3NTdGFydCArIDEgfHwgIWluQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJyArIGNcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc3BsaXQgd2hlcmUgdGhlIGxhc3QgWyB3YXMsIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlXG4gICAgICAgICAgLy8gYW4gaW52YWxpZCByZS4gaWYgc28sIHJlLXdhbGsgdGhlIGNvbnRlbnRzIG9mIHRoZVxuICAgICAgICAgIC8vIHdvdWxkLWJlIGNsYXNzIHRvIHJlLXRyYW5zbGF0ZSBhbnkgY2hhcmFjdGVycyB0aGF0XG4gICAgICAgICAgLy8gd2VyZSBwYXNzZWQgdGhyb3VnaCBhcy1pc1xuICAgICAgICAgIC8vIFRPRE86IEl0IHdvdWxkIHByb2JhYmx5IGJlIGZhc3RlciB0byBkZXRlcm1pbmUgdGhpc1xuICAgICAgICAgIC8vIHdpdGhvdXQgYSB0cnkvY2F0Y2ggYW5kIGEgbmV3IFJlZ0V4cCwgYnV0IGl0J3MgdHJpY2t5XG4gICAgICAgICAgLy8gdG8gZG8gc2FmZWx5LiAgRm9yIG5vdywgdGhpcyBpcyBzYWZlIGFuZCB3b3Jrcy5cbiAgICAgICAgICBjcyA9IHBhdHRlcm4uc3Vic3RyaW5nKGNsYXNzU3RhcnQgKyAxLCBpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBSZWdFeHAoJ1snICsgYnJhRXhwRXNjYXBlKGNoYXJVbmVzY2FwZShjcykpICsgJ10nKVxuICAgICAgICAgICAgLy8gbG9va3MgZ29vZCwgZmluaXNoIHVwIHRoZSBjbGFzcy5cbiAgICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICAgICAgLy8gb3V0IG9mIG9yZGVyIHJhbmdlcyBpbiBKUyBhcmUgZXJyb3JzLCBidXQgaW4gZ2xvYiBzeW50YXgsXG4gICAgICAgICAgICAvLyB0aGV5J3JlIGp1c3QgYSByYW5nZSB0aGF0IG1hdGNoZXMgbm90aGluZy5cbiAgICAgICAgICAgIHJlID0gcmUuc3Vic3RyaW5nKDAsIHJlQ2xhc3NTdGFydCkgKyAnKD86JC4pJyAvLyBtYXRjaCBub3RoaW5nIGV2ZXJcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgICAgaW5DbGFzcyA9IGZhbHNlXG4gICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBzd2FsbG93IGFueSBzdGF0ZSBjaGFyIHRoYXQgd2Fzbid0IGNvbnN1bWVkXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuXG4gICAgICAgICAgaWYgKHJlU3BlY2lhbHNbY10gJiYgIShjID09PSAnXicgJiYgaW5DbGFzcykpIHtcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgICBicmVha1xuXG4gICAgICB9IC8vIHN3aXRjaFxuICAgIH0gLy8gZm9yXG5cbiAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbGVmdCBhIGNsYXNzIG9wZW4uXG4gICAgLy8gXCJbYWJjXCIgaXMgdmFsaWQsIGVxdWl2YWxlbnQgdG8gXCJcXFthYmNcIlxuICAgIGlmIChpbkNsYXNzKSB7XG4gICAgICAvLyBzcGxpdCB3aGVyZSB0aGUgbGFzdCBbIHdhcywgYW5kIGVzY2FwZSBpdFxuICAgICAgLy8gdGhpcyBpcyBhIGh1Z2UgcGl0YS4gIFdlIG5vdyBoYXZlIHRvIHJlLXdhbGtcbiAgICAgIC8vIHRoZSBjb250ZW50cyBvZiB0aGUgd291bGQtYmUgY2xhc3MgdG8gcmUtdHJhbnNsYXRlXG4gICAgICAvLyBhbnkgY2hhcmFjdGVycyB0aGF0IHdlcmUgcGFzc2VkIHRocm91Z2ggYXMtaXNcbiAgICAgIGNzID0gcGF0dGVybi5zbGljZShjbGFzc1N0YXJ0ICsgMSlcbiAgICAgIHNwID0gdGhpcy5wYXJzZShjcywgU1VCUEFSU0UpXG4gICAgICByZSA9IHJlLnN1YnN0cmluZygwLCByZUNsYXNzU3RhcnQpICsgJ1xcXFxbJyArIHNwWzBdXG4gICAgICBoYXNNYWdpYyA9IGhhc01hZ2ljIHx8IHNwWzFdXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGhhZCBhICsoIHRoaW5nIGF0IHRoZSAqZW5kKlxuICAgIC8vIG9mIHRoZSBwYXR0ZXJuLlxuICAgIC8vIGVhY2ggcGF0dGVybiBsaXN0IHN0YWNrIGFkZHMgMyBjaGFycywgYW5kIHdlIG5lZWQgdG8gZ28gdGhyb3VnaFxuICAgIC8vIGFuZCBlc2NhcGUgYW55IHwgY2hhcnMgdGhhdCB3ZXJlIHBhc3NlZCB0aHJvdWdoIGFzLWlzIGZvciB0aGUgcmVnZXhwLlxuICAgIC8vIEdvIHRocm91Z2ggYW5kIGVzY2FwZSB0aGVtLCB0YWtpbmcgY2FyZSBub3QgdG8gZG91YmxlLWVzY2FwZSBhbnlcbiAgICAvLyB8IGNoYXJzIHRoYXQgd2VyZSBhbHJlYWR5IGVzY2FwZWQuXG4gICAgZm9yIChwbCA9IHBhdHRlcm5MaXN0U3RhY2sucG9wKCk7IHBsOyBwbCA9IHBhdHRlcm5MaXN0U3RhY2sucG9wKCkpIHtcbiAgICAgIGxldCB0YWlsXG4gICAgICB0YWlsID0gcmUuc2xpY2UocGwucmVTdGFydCArIHBsLm9wZW4ubGVuZ3RoKVxuICAgICAgdGhpcy5kZWJ1Zygnc2V0dGluZyB0YWlsJywgcmUsIHBsKVxuICAgICAgLy8gbWF5YmUgc29tZSBldmVuIG51bWJlciBvZiBcXCwgdGhlbiBtYXliZSAxIFxcLCBmb2xsb3dlZCBieSBhIHxcbiAgICAgIHRhaWwgPSB0YWlsLnJlcGxhY2UoLygoPzpcXFxcezJ9KXswLDY0fSkoXFxcXD8pXFx8L2csIChfLCAkMSwgJDIpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBzaG91bGQgYWxyZWFkeSBiZSBkb25lICovXG4gICAgICAgIGlmICghJDIpIHtcbiAgICAgICAgICAvLyB0aGUgfCBpc24ndCBhbHJlYWR5IGVzY2FwZWQsIHNvIGVzY2FwZSBpdC5cbiAgICAgICAgICAkMiA9ICdcXFxcJ1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmVlZCB0byBlc2NhcGUgYWxsIHRob3NlIHNsYXNoZXMgKmFnYWluKiwgd2l0aG91dCBlc2NhcGluZyB0aGVcbiAgICAgICAgLy8gb25lIHRoYXQgd2UgbmVlZCBmb3IgZXNjYXBpbmcgdGhlIHwgY2hhcmFjdGVyLiAgQXMgaXQgd29ya3Mgb3V0LFxuICAgICAgICAvLyBlc2NhcGluZyBhbiBldmVuIG51bWJlciBvZiBzbGFzaGVzIGNhbiBiZSBkb25lIGJ5IHNpbXBseSByZXBlYXRpbmdcbiAgICAgICAgLy8gaXQgZXhhY3RseSBhZnRlciBpdHNlbGYuICBUaGF0J3Mgd2h5IHRoaXMgdHJpY2sgd29ya3MuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEkgYW0gc29ycnkgdGhhdCB5b3UgaGF2ZSB0byBzZWUgdGhpcy5cbiAgICAgICAgcmV0dXJuICQxICsgJDEgKyAkMiArICd8J1xuICAgICAgfSlcblxuICAgICAgdGhpcy5kZWJ1ZygndGFpbD0lalxcbiAgICVzJywgdGFpbCwgdGFpbCwgcGwsIHJlKVxuICAgICAgY29uc3QgdCA9IHBsLnR5cGUgPT09ICcqJyA/IHN0YXJcbiAgICAgICAgOiBwbC50eXBlID09PSAnPycgPyBxbWFya1xuICAgICAgICA6ICdcXFxcJyArIHBsLnR5cGVcblxuICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICByZSA9IHJlLnNsaWNlKDAsIHBsLnJlU3RhcnQpICsgdCArICdcXFxcKCcgKyB0YWlsXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRyYWlsaW5nIHRoaW5ncyB0aGF0IG9ubHkgbWF0dGVyIGF0IHRoZSB2ZXJ5IGVuZC5cbiAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgaWYgKGVzY2FwaW5nKSB7XG4gICAgICAvLyB0cmFpbGluZyBcXFxcXG4gICAgICByZSArPSAnXFxcXFxcXFwnXG4gICAgfVxuXG4gICAgLy8gb25seSBuZWVkIHRvIGFwcGx5IHRoZSBub2RvdCBzdGFydCBpZiB0aGUgcmUgc3RhcnRzIHdpdGhcbiAgICAvLyBzb21ldGhpbmcgdGhhdCBjb3VsZCBjb25jZWl2YWJseSBjYXB0dXJlIGEgZG90XG4gICAgY29uc3QgYWRkUGF0dGVyblN0YXJ0ID0gYWRkUGF0dGVyblN0YXJ0U2V0W3JlLmNoYXJBdCgwKV1cblxuICAgIC8vIEhhY2sgdG8gd29yayBhcm91bmQgbGFjayBvZiBuZWdhdGl2ZSBsb29rYmVoaW5kIGluIEpTXG4gICAgLy8gQSBwYXR0ZXJuIGxpa2U6ICouISh4KS4hKHl8eikgbmVlZHMgdG8gZW5zdXJlIHRoYXQgYSBuYW1lXG4gICAgLy8gbGlrZSAnYS54eXoueXonIGRvZXNuJ3QgbWF0Y2guICBTbywgdGhlIGZpcnN0IG5lZ2F0aXZlXG4gICAgLy8gbG9va2FoZWFkLCBoYXMgdG8gbG9vayBBTEwgdGhlIHdheSBhaGVhZCwgdG8gdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAobGV0IG4gPSBuZWdhdGl2ZUxpc3RzLmxlbmd0aCAtIDE7IG4gPiAtMTsgbi0tKSB7XG4gICAgICBjb25zdCBubCA9IG5lZ2F0aXZlTGlzdHNbbl1cblxuICAgICAgY29uc3QgbmxCZWZvcmUgPSByZS5zbGljZSgwLCBubC5yZVN0YXJ0KVxuICAgICAgY29uc3QgbmxGaXJzdCA9IHJlLnNsaWNlKG5sLnJlU3RhcnQsIG5sLnJlRW5kIC0gOClcbiAgICAgIGxldCBubEFmdGVyID0gcmUuc2xpY2UobmwucmVFbmQpXG4gICAgICBjb25zdCBubExhc3QgPSByZS5zbGljZShubC5yZUVuZCAtIDgsIG5sLnJlRW5kKSArIG5sQWZ0ZXJcblxuICAgICAgLy8gSGFuZGxlIG5lc3RlZCBzdHVmZiBsaWtlICooKi5qc3whKCouanNvbikpLCB3aGVyZSBvcGVuIHBhcmVuc1xuICAgICAgLy8gbWVhbiB0aGF0IHdlIHNob3VsZCAqbm90KiBpbmNsdWRlIHRoZSApIGluIHRoZSBiaXQgdGhhdCBpcyBjb25zaWRlcmVkXG4gICAgICAvLyBcImFmdGVyXCIgdGhlIG5lZ2F0ZWQgc2VjdGlvbi5cbiAgICAgIGNvbnN0IGNsb3NlUGFyZW5zQmVmb3JlID0gbmxCZWZvcmUuc3BsaXQoJyknKS5sZW5ndGhcbiAgICAgIGNvbnN0IG9wZW5QYXJlbnNCZWZvcmUgPSBubEJlZm9yZS5zcGxpdCgnKCcpLmxlbmd0aCAtIGNsb3NlUGFyZW5zQmVmb3JlXG4gICAgICBsZXQgY2xlYW5BZnRlciA9IG5sQWZ0ZXJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BlblBhcmVuc0JlZm9yZTsgaSsrKSB7XG4gICAgICAgIGNsZWFuQWZ0ZXIgPSBjbGVhbkFmdGVyLnJlcGxhY2UoL1xcKVsrKj9dPy8sICcnKVxuICAgICAgfVxuICAgICAgbmxBZnRlciA9IGNsZWFuQWZ0ZXJcblxuICAgICAgY29uc3QgZG9sbGFyID0gbmxBZnRlciA9PT0gJycgJiYgaXNTdWIgIT09IFNVQlBBUlNFID8gJyg/OiR8XFxcXC8pJyA6ICcnXG5cbiAgICAgIHJlID0gbmxCZWZvcmUgKyBubEZpcnN0ICsgbmxBZnRlciArIGRvbGxhciArIG5sTGFzdFxuICAgIH1cblxuICAgIC8vIGlmIHRoZSByZSBpcyBub3QgXCJcIiBhdCB0aGlzIHBvaW50LCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlXG4gICAgLy8gaXQgZG9lc24ndCBtYXRjaCBhZ2FpbnN0IGFuIGVtcHR5IHBhdGggcGFydC5cbiAgICAvLyBPdGhlcndpc2UgYS8qIHdpbGwgbWF0Y2ggYS8sIHdoaWNoIGl0IHNob3VsZCBub3QuXG4gICAgaWYgKHJlICE9PSAnJyAmJiBoYXNNYWdpYykge1xuICAgICAgcmUgPSAnKD89LiknICsgcmVcbiAgICB9XG5cbiAgICBpZiAoYWRkUGF0dGVyblN0YXJ0KSB7XG4gICAgICByZSA9IHBhdHRlcm5TdGFydCgpICsgcmVcbiAgICB9XG5cbiAgICAvLyBwYXJzaW5nIGp1c3QgYSBwaWVjZSBvZiBhIGxhcmdlciBwYXR0ZXJuLlxuICAgIGlmIChpc1N1YiA9PT0gU1VCUEFSU0UpIHtcbiAgICAgIHJldHVybiBbcmUsIGhhc01hZ2ljXVxuICAgIH1cblxuICAgIC8vIGlmIGl0J3Mgbm9jYXNlLCBhbmQgdGhlIGxjYXNlL3VwcGVyY2FzZSBkb24ndCBtYXRjaCwgaXQncyBtYWdpY1xuICAgIGlmIChvcHRpb25zLm5vY2FzZSAmJiAhaGFzTWFnaWMpIHtcbiAgICAgIGhhc01hZ2ljID0gcGF0dGVybi50b1VwcGVyQ2FzZSgpICE9PSBwYXR0ZXJuLnRvTG93ZXJDYXNlKClcbiAgICB9XG5cbiAgICAvLyBza2lwIHRoZSByZWdleHAgZm9yIG5vbi1tYWdpY2FsIHBhdHRlcm5zXG4gICAgLy8gdW5lc2NhcGUgYW55dGhpbmcgaW4gaXQsIHRob3VnaCwgc28gdGhhdCBpdCdsbCBiZVxuICAgIC8vIGFuIGV4YWN0IG1hdGNoIGFnYWluc3QgYSBmaWxlIGV0Yy5cbiAgICBpZiAoIWhhc01hZ2ljKSB7XG4gICAgICByZXR1cm4gZ2xvYlVuZXNjYXBlKHBhdHRlcm4pXG4gICAgfVxuXG4gICAgY29uc3QgZmxhZ3MgPSBvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBSZWdFeHAoJ14nICsgcmUgKyAnJCcsIGZsYWdzKSwge1xuICAgICAgICBfZ2xvYjogcGF0dGVybixcbiAgICAgICAgX3NyYzogcmUsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVyKSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIHNob3VsZCBiZSBpbXBvc3NpYmxlICovIHtcbiAgICAgIC8vIElmIGl0IHdhcyBhbiBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiwgdGhlbiBpdCBjYW4ndCBtYXRjaFxuICAgICAgLy8gYW55dGhpbmcuICBUaGlzIHRyaWNrIGxvb2tzIGZvciBhIGNoYXJhY3RlciBhZnRlciB0aGUgZW5kIG9mXG4gICAgICAvLyB0aGUgc3RyaW5nLCB3aGljaCBpcyBvZiBjb3Vyc2UgaW1wb3NzaWJsZSwgZXhjZXB0IGluIG11bHRpLWxpbmVcbiAgICAgIC8vIG1vZGUsIGJ1dCBpdCdzIG5vdCBhIC9tIHJlZ2V4LlxuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJyQuJylcbiAgICB9XG4gIH1cblxuICBtYWtlUmUgKCkge1xuICAgIGlmICh0aGlzLnJlZ2V4cCB8fCB0aGlzLnJlZ2V4cCA9PT0gZmFsc2UpIHJldHVybiB0aGlzLnJlZ2V4cFxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gICAgLy8gcGF0dGVybiBzdHJpbmdzLCBvciBcIioqXCIuXG4gICAgLy9cbiAgICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAgIC8vIGJlIHVzZWQsIHJlYWxseSwgYnV0IGl0J3MgcHJldHR5IGNvbnZlbmllbnQgc29tZXRpbWVzLFxuICAgIC8vIHdoZW4geW91IGp1c3Qgd2FudCB0byB3b3JrIHdpdGggYSByZWdleC5cbiAgICBjb25zdCBzZXQgPSB0aGlzLnNldFxuXG4gICAgaWYgKCFzZXQubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlXG4gICAgICByZXR1cm4gdGhpcy5yZWdleHBcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgY29uc3QgdHdvU3RhciA9IG9wdGlvbnMubm9nbG9ic3RhciA/IHN0YXJcbiAgICAgIDogb3B0aW9ucy5kb3QgPyB0d29TdGFyRG90XG4gICAgICA6IHR3b1N0YXJOb0RvdFxuICAgIGNvbnN0IGZsYWdzID0gb3B0aW9ucy5ub2Nhc2UgPyAnaScgOiAnJ1xuXG4gICAgLy8gY29hbGVzY2UgZ2xvYnN0YXJzIGFuZCByZWdleHBpZnkgbm9uLWdsb2JzdGFyIHBhdHRlcm5zXG4gICAgLy8gaWYgaXQncyB0aGUgb25seSBpdGVtLCB0aGVuIHdlIGp1c3QgZG8gb25lIHR3b1N0YXJcbiAgICAvLyBpZiBpdCdzIHRoZSBmaXJzdCwgYW5kIHRoZXJlIGFyZSBtb3JlLCBwcmVwZW5kIChcXC98dHdvU3RhclxcLyk/IHRvIG5leHRcbiAgICAvLyBpZiBpdCdzIHRoZSBsYXN0LCBhcHBlbmQgKFxcL3R3b1N0YXJ8KSB0byBwcmV2aW91c1xuICAgIC8vIGlmIGl0J3MgaW4gdGhlIG1pZGRsZSwgYXBwZW5kIChcXC98XFwvdHdvU3RhclxcLykgdG8gcHJldmlvdXNcbiAgICAvLyB0aGVuIGZpbHRlciBvdXQgR0xPQlNUQVIgc3ltYm9sc1xuICAgIGxldCByZSA9IHNldC5tYXAocGF0dGVybiA9PiB7XG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi5tYXAocCA9PlxuICAgICAgICB0eXBlb2YgcCA9PT0gJ3N0cmluZycgPyByZWdFeHBFc2NhcGUocClcbiAgICAgICAgOiBwID09PSBHTE9CU1RBUiA/IEdMT0JTVEFSXG4gICAgICAgIDogcC5fc3JjXG4gICAgICApLnJlZHVjZSgoc2V0LCBwKSA9PiB7XG4gICAgICAgIGlmICghKHNldFtzZXQubGVuZ3RoIC0gMV0gPT09IEdMT0JTVEFSICYmIHAgPT09IEdMT0JTVEFSKSkge1xuICAgICAgICAgIHNldC5wdXNoKHApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFxuICAgICAgfSwgW10pXG4gICAgICBwYXR0ZXJuLmZvckVhY2goKHAsIGkpID0+IHtcbiAgICAgICAgaWYgKHAgIT09IEdMT0JTVEFSIHx8IHBhdHRlcm5baS0xXSA9PT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHBhdHRlcm5baSsxXSA9ICcoPzpcXFxcXFwvfCcgKyB0d29TdGFyICsgJ1xcXFxcXC8pPycgKyBwYXR0ZXJuW2krMV1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0dGVybltpXSA9IHR3b1N0YXJcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gcGF0dGVybi5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcGF0dGVybltpLTFdICs9ICcoPzpcXFxcXFwvfCcgKyB0d29TdGFyICsgJyk/J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdHRlcm5baS0xXSArPSAnKD86XFxcXFxcL3xcXFxcXFwvJyArIHR3b1N0YXIgKyAnXFxcXFxcLyknICsgcGF0dGVybltpKzFdXG4gICAgICAgICAgcGF0dGVybltpKzFdID0gR0xPQlNUQVJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBwYXR0ZXJuLmZpbHRlcihwID0+IHAgIT09IEdMT0JTVEFSKS5qb2luKCcvJylcbiAgICB9KS5qb2luKCd8JylcblxuICAgIC8vIG11c3QgbWF0Y2ggZW50aXJlIHBhdHRlcm5cbiAgICAvLyBlbmRpbmcgaW4gYSAqIG9yICoqIHdpbGwgbWFrZSBpdCBsZXNzIHN0cmljdC5cbiAgICByZSA9ICdeKD86JyArIHJlICsgJykkJ1xuXG4gICAgLy8gY2FuIG1hdGNoIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3Mgbm90IHRoaXMuXG4gICAgaWYgKHRoaXMubmVnYXRlKSByZSA9ICdeKD8hJyArIHJlICsgJykuKiQnXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBmbGFncylcbiAgICB9IGNhdGNoIChleCkgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBzaG91bGQgYmUgaW1wb3NzaWJsZSAqLyB7XG4gICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlZ2V4cFxuICB9XG5cbiAgbWF0Y2ggKGYsIHBhcnRpYWwgPSB0aGlzLnBhcnRpYWwpIHtcbiAgICB0aGlzLmRlYnVnKCdtYXRjaCcsIGYsIHRoaXMucGF0dGVybilcbiAgICAvLyBzaG9ydC1jaXJjdWl0IGluIHRoZSBjYXNlIG9mIGJ1c3RlZCB0aGluZ3MuXG4gICAgLy8gY29tbWVudHMsIGV0Yy5cbiAgICBpZiAodGhpcy5jb21tZW50KSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5lbXB0eSkgcmV0dXJuIGYgPT09ICcnXG5cbiAgICBpZiAoZiA9PT0gJy8nICYmIHBhcnRpYWwpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICAvLyB3aW5kb3dzOiBuZWVkIHRvIHVzZSAvLCBub3QgXFxcbiAgICBpZiAocGF0aC5zZXAgIT09ICcvJykge1xuICAgICAgZiA9IGYuc3BsaXQocGF0aC5zZXApLmpvaW4oJy8nKVxuICAgIH1cblxuICAgIC8vIHRyZWF0IHRoZSB0ZXN0IHBhdGggYXMgYSBzZXQgb2YgcGF0aHBhcnRzLlxuICAgIGYgPSBmLnNwbGl0KHNsYXNoU3BsaXQpXG4gICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzcGxpdCcsIGYpXG5cbiAgICAvLyBqdXN0IE9ORSBvZiB0aGUgcGF0dGVybiBzZXRzIGluIHRoaXMuc2V0IG5lZWRzIHRvIG1hdGNoXG4gICAgLy8gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHZhbGlkLiAgSWYgbmVnYXRpbmcsIHRoZW4ganVzdCBvbmVcbiAgICAvLyBtYXRjaCBtZWFucyB0aGF0IHdlIGhhdmUgZmFpbGVkLlxuICAgIC8vIEVpdGhlciB3YXksIHJldHVybiBvbiB0aGUgZmlyc3QgaGl0LlxuXG4gICAgY29uc3Qgc2V0ID0gdGhpcy5zZXRcbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NldCcsIHNldClcblxuICAgIC8vIEZpbmQgdGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoIGJ5IGxvb2tpbmcgZm9yIHRoZSBsYXN0IG5vbi1lbXB0eSBzZWdtZW50XG4gICAgbGV0IGZpbGVuYW1lXG4gICAgZm9yIChsZXQgaSA9IGYubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGZpbGVuYW1lID0gZltpXVxuICAgICAgaWYgKGZpbGVuYW1lKSBicmVha1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwYXR0ZXJuID0gc2V0W2ldXG4gICAgICBsZXQgZmlsZSA9IGZcbiAgICAgIGlmIChvcHRpb25zLm1hdGNoQmFzZSAmJiBwYXR0ZXJuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmaWxlID0gW2ZpbGVuYW1lXVxuICAgICAgfVxuICAgICAgY29uc3QgaGl0ID0gdGhpcy5tYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsKVxuICAgICAgaWYgKGhpdCkge1xuICAgICAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSByZXR1cm4gdHJ1ZVxuICAgICAgICByZXR1cm4gIXRoaXMubmVnYXRlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGlkbid0IGdldCBhbnkgaGl0cy4gIHRoaXMgaXMgc3VjY2VzcyBpZiBpdCdzIGEgbmVnYXRpdmVcbiAgICAvLyBwYXR0ZXJuLCBmYWlsdXJlIG90aGVyd2lzZS5cbiAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gdGhpcy5uZWdhdGVcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0cyAoZGVmKSB7XG4gICAgcmV0dXJuIG1pbmltYXRjaC5kZWZhdWx0cyhkZWYpLk1pbmltYXRjaFxuICB9XG59XG5cbm1pbmltYXRjaC5NaW5pbWF0Y2ggPSBNaW5pbWF0Y2hcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZWFkZGlyR2xvYjtcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuY29uc3QgeyBNaW5pbWF0Y2ggfSA9IHJlcXVpcmUoJ21pbmltYXRjaCcpO1xuY29uc3QgeyByZXNvbHZlIH0gPSByZXF1aXJlKCdwYXRoJyk7XG5cbmZ1bmN0aW9uIHJlYWRkaXIoZGlyLCBzdHJpY3QpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy5yZWFkZGlyKGRpciwge3dpdGhGaWxlVHlwZXM6IHRydWV9ICwoZXJyLCBmaWxlcykgPT4ge1xuICAgICAgaWYoZXJyKSB7XG4gICAgICAgIHN3aXRjaCAoZXJyLmNvZGUpIHtcbiAgICAgICAgICBjYXNlICdFTk9URElSJzogICAgICAvLyBOb3QgYSBkaXJlY3RvcnlcbiAgICAgICAgICAgIGlmKHN0cmljdCkge1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnRU5PVFNVUCc6ICAgICAgLy8gT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICBjYXNlICdFTk9FTlQnOiAgICAgICAvLyBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4gICAgICAgICAgY2FzZSAnRU5BTUVUT09MT05HJzogLy8gRmlsZW5hbWUgdG9vIGxvbmdcbiAgICAgICAgICBjYXNlICdVTktOT1dOJzpcbiAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnRUxPT1AnOiAgICAgICAgLy8gVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoZmlsZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHN0YXQoZmlsZSwgZm9sbG93U3ltbGlua3MpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdGF0RnVuYyA9IGZvbGxvd1N5bWxpbmtzID8gZnMuc3RhdCA6IGZzLmxzdGF0O1xuICAgIHN0YXRGdW5jKGZpbGUsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgICAgIGNhc2UgJ0VOT0VOVCc6XG4gICAgICAgICAgICBpZihmb2xsb3dTeW1saW5rcykge1xuICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBsc3RhdCB0byBoYW5kbGUgYnJva2VuIGxpbmtzIGFzIGZpbGVzXG4gICAgICAgICAgICAgIHJlc29sdmUoc3RhdChmaWxlLCBmYWxzZSkpOyBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHN0YXRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiBleHBsb3JlV2Fsa0FzeW5jKGRpciwgcGF0aCwgZm9sbG93U3ltbGlua3MsIHVzZVN0YXQsIHNob3VsZFNraXAsIHN0cmljdCkge1xuICBsZXQgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHBhdGggKyBkaXIsIHN0cmljdCk7XG4gIGZvcihjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgbGV0IG5hbWUgPSBmaWxlLm5hbWU7XG4gICAgaWYobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB1bmRlZmluZWQgZmlsZS5uYW1lIG1lYW5zIHRoZSBgd2l0aEZpbGVUeXBlc2Agb3B0aW9ucyBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5vZGVcbiAgICAgIC8vIHdlIGhhdmUgdG8gY2FsbCB0aGUgc3RhdCBmdW5jdGlvbiB0byBrbm93IGlmIGZpbGUgaXMgZGlyZWN0b3J5IG9yIG5vdC5cbiAgICAgIG5hbWUgPSBmaWxlO1xuICAgICAgdXNlU3RhdCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVuYW1lID0gZGlyICsgJy8nICsgbmFtZTtcbiAgICBjb25zdCByZWxhdGl2ZSA9IGZpbGVuYW1lLnNsaWNlKDEpOyAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgL1xuICAgIGNvbnN0IGFic29sdXRlID0gcGF0aCArICcvJyArIHJlbGF0aXZlO1xuICAgIGxldCBzdGF0cyA9IG51bGw7XG4gICAgaWYodXNlU3RhdCB8fCBmb2xsb3dTeW1saW5rcykge1xuICAgICAgc3RhdHMgPSBhd2FpdCBzdGF0KGFic29sdXRlLCBmb2xsb3dTeW1saW5rcyk7XG4gICAgfVxuICAgIGlmKCFzdGF0cyAmJiBmaWxlLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3RhdHMgPSBmaWxlO1xuICAgIH1cbiAgICBpZihzdGF0cyA9PT0gbnVsbCkge1xuICAgICAgc3RhdHMgPSB7IGlzRGlyZWN0b3J5OiAoKSA9PiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGlmKCFzaG91bGRTa2lwKHJlbGF0aXZlKSkge1xuICAgICAgICB5aWVsZCB7cmVsYXRpdmUsIGFic29sdXRlLCBzdGF0c307XG4gICAgICAgIHlpZWxkKiBleHBsb3JlV2Fsa0FzeW5jKGZpbGVuYW1lLCBwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB5aWVsZCB7cmVsYXRpdmUsIGFic29sdXRlLCBzdGF0c307XG4gICAgfVxuICB9XG59XG5hc3luYyBmdW5jdGlvbiogZXhwbG9yZShwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCkge1xuICB5aWVsZCogZXhwbG9yZVdhbGtBc3luYygnJywgcGF0aCwgZm9sbG93U3ltbGlua3MsIHVzZVN0YXQsIHNob3VsZFNraXAsIHRydWUpO1xufVxuXG5cbmZ1bmN0aW9uIHJlYWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICBwYXR0ZXJuOiBvcHRpb25zLnBhdHRlcm4sXG4gICAgZG90OiAhIW9wdGlvbnMuZG90LFxuICAgIG5vZ2xvYnN0YXI6ICEhb3B0aW9ucy5ub2dsb2JzdGFyLFxuICAgIG1hdGNoQmFzZTogISFvcHRpb25zLm1hdGNoQmFzZSxcbiAgICBub2Nhc2U6ICEhb3B0aW9ucy5ub2Nhc2UsXG4gICAgaWdub3JlOiBvcHRpb25zLmlnbm9yZSxcbiAgICBza2lwOiBvcHRpb25zLnNraXAsXG5cbiAgICBmb2xsb3c6ICEhb3B0aW9ucy5mb2xsb3csXG4gICAgc3RhdDogISFvcHRpb25zLnN0YXQsXG4gICAgbm9kaXI6ICEhb3B0aW9ucy5ub2RpcixcbiAgICBtYXJrOiAhIW9wdGlvbnMubWFyayxcbiAgICBzaWxlbnQ6ICEhb3B0aW9ucy5zaWxlbnQsXG4gICAgYWJzb2x1dGU6ICEhb3B0aW9ucy5hYnNvbHV0ZVxuICB9O1xufVxuXG5jbGFzcyBSZWFkZGlyR2xvYiBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKGN3ZCwgb3B0aW9ucywgY2IpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICBvcHRpb25zID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSByZWFkT3B0aW9ucyhvcHRpb25zIHx8wqB7fSk7XG4gIFxuICAgIHRoaXMubWF0Y2hlcnMgPSBbXTtcbiAgICBpZih0aGlzLm9wdGlvbnMucGF0dGVybikge1xuICAgICAgY29uc3QgbWF0Y2hlcnMgPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5wYXR0ZXJuKSA/IHRoaXMub3B0aW9ucy5wYXR0ZXJuIDogW3RoaXMub3B0aW9ucy5wYXR0ZXJuXTtcbiAgICAgIHRoaXMubWF0Y2hlcnMgPSBtYXRjaGVycy5tYXAoIG0gPT5cbiAgICAgICAgbmV3IE1pbmltYXRjaChtLCB7XG4gICAgICAgICAgZG90OiB0aGlzLm9wdGlvbnMuZG90LFxuICAgICAgICAgIG5vZ2xvYnN0YXI6dGhpcy5vcHRpb25zLm5vZ2xvYnN0YXIsXG4gICAgICAgICAgbWF0Y2hCYXNlOnRoaXMub3B0aW9ucy5tYXRjaEJhc2UsXG4gICAgICAgICAgbm9jYXNlOnRoaXMub3B0aW9ucy5ub2Nhc2VcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICBcbiAgICB0aGlzLmlnbm9yZU1hdGNoZXJzID0gW107XG4gICAgaWYodGhpcy5vcHRpb25zLmlnbm9yZSkge1xuICAgICAgY29uc3QgaWdub3JlUGF0dGVybnMgPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5pZ25vcmUpID8gdGhpcy5vcHRpb25zLmlnbm9yZSA6IFt0aGlzLm9wdGlvbnMuaWdub3JlXTtcbiAgICAgIHRoaXMuaWdub3JlTWF0Y2hlcnMgPSBpZ25vcmVQYXR0ZXJucy5tYXAoIGlnbm9yZSA9PlxuICAgICAgICBuZXcgTWluaW1hdGNoKGlnbm9yZSwge2RvdDogdHJ1ZX0pXG4gICAgICApO1xuICAgIH1cbiAgXG4gICAgdGhpcy5za2lwTWF0Y2hlcnMgPSBbXTtcbiAgICBpZih0aGlzLm9wdGlvbnMuc2tpcCkge1xuICAgICAgY29uc3Qgc2tpcFBhdHRlcm5zID0gQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuc2tpcCkgPyB0aGlzLm9wdGlvbnMuc2tpcCA6IFt0aGlzLm9wdGlvbnMuc2tpcF07XG4gICAgICB0aGlzLnNraXBNYXRjaGVycyA9IHNraXBQYXR0ZXJucy5tYXAoIHNraXAgPT5cbiAgICAgICAgbmV3IE1pbmltYXRjaChza2lwLCB7ZG90OiB0cnVlfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVyYXRvciA9IGV4cGxvcmUocmVzb2x2ZShjd2QgfHwgJy4nKSwgdGhpcy5vcHRpb25zLmZvbGxvdywgdGhpcy5vcHRpb25zLnN0YXQsIHRoaXMuX3Nob3VsZFNraXBEaXJlY3RvcnkuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmluYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gIFxuICAgIGlmKGNiKSB7XG4gICAgICB0aGlzLl9tYXRjaGVzID0gW107IFxuICAgICAgdGhpcy5vbignbWF0Y2gnLCBtYXRjaCA9PiB0aGlzLl9tYXRjaGVzLnB1c2godGhpcy5vcHRpb25zLmFic29sdXRlID8gbWF0Y2guYWJzb2x1dGUgOiBtYXRjaC5yZWxhdGl2ZSkpO1xuICAgICAgdGhpcy5vbignZXJyb3InLCBlcnIgPT4gY2IoZXJyKSk7XG4gICAgICB0aGlzLm9uKCdlbmQnLCAoKSA9PiBjYihudWxsLCB0aGlzLl9tYXRjaGVzKSk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCggKCkgPT4gdGhpcy5fbmV4dCgpLCAwKTtcbiAgfVxuXG4gIF9zaG91bGRTa2lwRGlyZWN0b3J5KHJlbGF0aXZlKSB7XG4gICAgLy9jb25zb2xlLmxvZyhyZWxhdGl2ZSwgdGhpcy5za2lwTWF0Y2hlcnMuc29tZShtID0+IG0ubWF0Y2gocmVsYXRpdmUpKSk7XG4gICAgcmV0dXJuIHRoaXMuc2tpcE1hdGNoZXJzLnNvbWUobSA9PiBtLm1hdGNoKHJlbGF0aXZlKSk7XG4gIH1cblxuICBfZmlsZU1hdGNoZXMocmVsYXRpdmUsIGlzRGlyZWN0b3J5KSB7XG4gICAgY29uc3QgZmlsZSA9IHJlbGF0aXZlICsgKGlzRGlyZWN0b3J5ID8gJy8nIDogJycpO1xuICAgIHJldHVybiAodGhpcy5tYXRjaGVycy5sZW5ndGggPT09IDAgfHwgdGhpcy5tYXRjaGVycy5zb21lKG0gPT4gbS5tYXRjaChmaWxlKSkpXG4gICAgICAmJiAhdGhpcy5pZ25vcmVNYXRjaGVycy5zb21lKG0gPT4gbS5tYXRjaChmaWxlKSlcbiAgICAgICYmICghdGhpcy5vcHRpb25zLm5vZGlyIHx8ICFpc0RpcmVjdG9yeSk7XG4gIH1cblxuICBfbmV4dCgpIHtcbiAgICBpZighdGhpcy5wYXVzZWQgJiYgIXRoaXMuYWJvcnRlZCkge1xuICAgICAgdGhpcy5pdGVyYXRvci5uZXh0KClcbiAgICAgIC50aGVuKChvYmopPT4ge1xuICAgICAgICBpZighb2JqLmRvbmUpIHtcbiAgICAgICAgICBjb25zdCBpc0RpcmVjdG9yeSA9IG9iai52YWx1ZS5zdGF0cy5pc0RpcmVjdG9yeSgpO1xuICAgICAgICAgIGlmKHRoaXMuX2ZpbGVNYXRjaGVzKG9iai52YWx1ZS5yZWxhdGl2ZSwgaXNEaXJlY3RvcnkgKSkge1xuICAgICAgICAgICAgbGV0IHJlbGF0aXZlID0gb2JqLnZhbHVlLnJlbGF0aXZlO1xuICAgICAgICAgICAgbGV0IGFic29sdXRlID0gb2JqLnZhbHVlLmFic29sdXRlO1xuICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLm1hcmsgJiYgaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgICAgcmVsYXRpdmUgKz0gJy8nO1xuICAgICAgICAgICAgICBhYnNvbHV0ZSArPSAnLyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMuc3RhdCkge1xuICAgICAgICAgICAgICB0aGlzLmVtaXQoJ21hdGNoJywge3JlbGF0aXZlLCBhYnNvbHV0ZSwgc3RhdDpvYmoudmFsdWUuc3RhdHN9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1pdCgnbWF0Y2gnLCB7cmVsYXRpdmUsIGFic29sdXRlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX25leHQodGhpcy5pdGVyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuYWJvcnQoKTtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIGlmKCFlcnIuY29kZSAmJiAhdGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5hY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gIH1cblxuICByZXN1bWUoKSB7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICBpZih0aGlzLmluYWN0aXZlKSB7XG4gICAgICB0aGlzLmluYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLl9uZXh0KCk7XG4gICAgfVxuICB9XG59XG5cblxuZnVuY3Rpb24gcmVhZGRpckdsb2IocGF0dGVybiwgb3B0aW9ucywgY2IpIHtcbiAgcmV0dXJuIG5ldyBSZWFkZGlyR2xvYihwYXR0ZXJuLCBvcHRpb25zLCBjYik7XG59XG5yZWFkZGlyR2xvYi5SZWFkZGlyR2xvYiA9IFJlYWRkaXJHbG9iOyIsCiAgICAiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5hc3luYyA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvbnRpbnVhdGlvbiBmdW5jdGlvbiB3aXRoIHNvbWUgYXJndW1lbnRzIGFscmVhZHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFVzZWZ1bCBhcyBhIHNob3J0aGFuZCB3aGVuIGNvbWJpbmVkIHdpdGggb3RoZXIgY29udHJvbCBmbG93IGZ1bmN0aW9ucy4gQW55XG4gICAgICogYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gYXJlIGFkZGVkIHRvIHRoZSBhcmd1bWVudHNcbiAgICAgKiBvcmlnaW5hbGx5IHBhc3NlZCB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGFwcGx5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBldmVudHVhbGx5IGFwcGx5IGFsbFxuICAgICAqIGFyZ3VtZW50cyB0by4gSW52b2tlcyB3aXRoIChhcmd1bWVudHMuLi4pLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJndW1lbnRzLi4uIC0gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gYXV0b21hdGljYWxseSBhcHBseVxuICAgICAqIHdoZW4gdGhlIGNvbnRpbnVhdGlvbiBpcyBjYWxsZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSB0aGUgcGFydGlhbGx5LWFwcGxpZWQgZnVuY3Rpb25cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgYXBwbHlcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLndyaXRlRmlsZSwgJ3Rlc3RmaWxlMScsICd0ZXN0MScpLFxuICAgICAqICAgICBhc3luYy5hcHBseShmcy53cml0ZUZpbGUsICd0ZXN0ZmlsZTInLCAndGVzdDInKVxuICAgICAqIF0pO1xuICAgICAqXG4gICAgICpcbiAgICAgKiAvLyB0aGUgc2FtZSBwcm9jZXNzIHdpdGhvdXQgdXNpbmcgYXBwbHlcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBmcy53cml0ZUZpbGUoJ3Rlc3RmaWxlMScsICd0ZXN0MScsIGNhbGxiYWNrKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGZzLndyaXRlRmlsZSgndGVzdGZpbGUyJywgJ3Rlc3QyJywgY2FsbGJhY2spO1xuICAgICAqICAgICB9XG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKiAvLyBJdCdzIHBvc3NpYmxlIHRvIHBhc3MgYW55IG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aGVuIGNhbGxpbmcgdGhlXG4gICAgICogLy8gY29udGludWF0aW9uOlxuICAgICAqXG4gICAgICogbm9kZT4gdmFyIGZuID0gYXN5bmMuYXBwbHkoc3lzLnB1dHMsICdvbmUnKTtcbiAgICAgKiBub2RlPiBmbigndHdvJywgJ3RocmVlJyk7XG4gICAgICogb25lXG4gICAgICogdHdvXG4gICAgICogdGhyZWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcHBseShmbiwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKC4uLmNhbGxBcmdzKSA9PiBmbiguLi5hcmdzLC4uLmNhbGxBcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0aWFsUGFyYW1zIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MvKiwgY2FsbGJhY2sqLykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGFyZ3MsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuXG4gICAgdmFyIGhhc1F1ZXVlTWljcm90YXNrID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nICYmIHF1ZXVlTWljcm90YXNrO1xuICAgIHZhciBoYXNTZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcbiAgICB2YXIgaGFzTmV4dFRpY2sgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbic7XG5cbiAgICBmdW5jdGlvbiBmYWxsYmFjayhmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cmFwKGRlZmVyKSB7XG4gICAgICAgIHJldHVybiAoZm4sIC4uLmFyZ3MpID0+IGRlZmVyKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiAgICB9XG5cbiAgICB2YXIgX2RlZmVyJDE7XG5cbiAgICBpZiAoaGFzUXVldWVNaWNyb3Rhc2spIHtcbiAgICAgICAgX2RlZmVyJDEgPSBxdWV1ZU1pY3JvdGFzaztcbiAgICB9IGVsc2UgaWYgKGhhc1NldEltbWVkaWF0ZSkge1xuICAgICAgICBfZGVmZXIkMSA9IHNldEltbWVkaWF0ZTtcbiAgICB9IGVsc2UgaWYgKGhhc05leHRUaWNrKSB7XG4gICAgICAgIF9kZWZlciQxID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZGVmZXIkMSA9IGZhbGxiYWNrO1xuICAgIH1cblxuICAgIHZhciBzZXRJbW1lZGlhdGUkMSA9IHdyYXAoX2RlZmVyJDEpO1xuXG4gICAgLyoqXG4gICAgICogVGFrZSBhIHN5bmMgZnVuY3Rpb24gYW5kIG1ha2UgaXQgYXN5bmMsIHBhc3NpbmcgaXRzIHJldHVybiB2YWx1ZSB0byBhXG4gICAgICogY2FsbGJhY2suIFRoaXMgaXMgdXNlZnVsIGZvciBwbHVnZ2luZyBzeW5jIGZ1bmN0aW9ucyBpbnRvIGEgd2F0ZXJmYWxsLFxuICAgICAqIHNlcmllcywgb3Igb3RoZXIgYXN5bmMgZnVuY3Rpb25zLiBBbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZ2VuZXJhdGVkXG4gICAgICogZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gKGV4Y2VwdCBmb3IgdGhlIGZpbmFsXG4gICAgICogY2FsbGJhY2sgYXJndW1lbnQpLiBFcnJvcnMgdGhyb3duIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIElmIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gYGFzeW5jaWZ5YCByZXR1cm5zIGEgUHJvbWlzZSwgdGhhdCBwcm9taXNlcydzXG4gICAgICogcmVzb2x2ZWQvcmVqZWN0ZWQgc3RhdGUgd2lsbCBiZSB1c2VkIHRvIGNhbGwgdGhlIGNhbGxiYWNrLCByYXRoZXIgdGhhbiBzaW1wbHlcbiAgICAgKiB0aGUgc3luY2hyb25vdXMgcmV0dXJuIHZhbHVlLlxuICAgICAqXG4gICAgICogVGhpcyBhbHNvIG1lYW5zIHlvdSBjYW4gYXN5bmNpZnkgRVMyMDE3IGBhc3luY2AgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQG5hbWUgYXN5bmNpZnlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgd3JhcFN5bmNcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgLSBUaGUgc3luY2hyb25vdXMgZnVuY3Rpb24sIG9yIFByb21pc2UtcmV0dXJuaW5nXG4gICAgICogZnVuY3Rpb24gdG8gY29udmVydCB0byBhbiB7QGxpbmsgQXN5bmNGdW5jdGlvbn0uXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IEFuIGFzeW5jaHJvbm91cyB3cmFwcGVyIG9mIHRoZSBgZnVuY2AuIFRvIGJlXG4gICAgICogaW52b2tlZCB3aXRoIGAoYXJncy4uLiwgY2FsbGJhY2spYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gcGFzc2luZyBhIHJlZ3VsYXIgc3luY2hyb25vdXMgZnVuY3Rpb25cbiAgICAgKiBhc3luYy53YXRlcmZhbGwoW1xuICAgICAqICAgICBhc3luYy5hcHBseShmcy5yZWFkRmlsZSwgZmlsZW5hbWUsIFwidXRmOFwiKSxcbiAgICAgKiAgICAgYXN5bmMuYXN5bmNpZnkoSlNPTi5wYXJzZSksXG4gICAgICogICAgIGZ1bmN0aW9uIChkYXRhLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLyBkYXRhIGlzIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgdGV4dC5cbiAgICAgKiAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIHBhcnNpbmcgZXJyb3IsIGl0IHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQuXG4gICAgICogICAgIH1cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiAvLyBwYXNzaW5nIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcHJvbWlzZVxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLnJlYWRGaWxlLCBmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICAgICAqICAgICBhc3luYy5hc3luY2lmeShmdW5jdGlvbiAoY29udGVudHMpIHtcbiAgICAgKiAgICAgICAgIHJldHVybiBkYi5tb2RlbC5jcmVhdGUoY29udGVudHMpO1xuICAgICAqICAgICB9KSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKG1vZGVsLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLyBgbW9kZWxgIGlzIHRoZSBpbnN0YW50aWF0ZWQgbW9kZWwgb2JqZWN0LlxuICAgICAqICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIGFuIGVycm9yLCB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHNraXBwZWQuXG4gICAgICogICAgIH1cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiAvLyBlczIwMTcgZXhhbXBsZSwgdGhvdWdoIGBhc3luY2lmeWAgaXMgbm90IG5lZWRlZCBpZiB5b3VyIEpTIGVudmlyb25tZW50XG4gICAgICogLy8gc3VwcG9ydHMgYXN5bmMgZnVuY3Rpb25zIG91dCBvZiB0aGUgYm94XG4gICAgICogdmFyIHEgPSBhc3luYy5xdWV1ZShhc3luYy5hc3luY2lmeShhc3luYyBmdW5jdGlvbihmaWxlKSB7XG4gICAgICogICAgIHZhciBpbnRlcm1lZGlhdGVTdGVwID0gYXdhaXQgcHJvY2Vzc0ZpbGUoZmlsZSk7XG4gICAgICogICAgIHJldHVybiBhd2FpdCBzb21lUHJvbWlzZShpbnRlcm1lZGlhdGVTdGVwKVxuICAgICAqIH0pKTtcbiAgICAgKlxuICAgICAqIHEucHVzaChmaWxlcyk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICBpZiAoaXNBc3luYyhmdW5jKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzLyosIGNhbGxiYWNrKi8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVByb21pc2UocHJvbWlzZSwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5pdGlhbFBhcmFtcyhmdW5jdGlvbiAoYXJncywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVQcm9taXNlKHJlc3VsdCwgY2FsbGJhY2spXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVByb21pc2UocHJvbWlzZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayhjYWxsYmFjaywgbnVsbCwgdmFsdWUpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2soY2FsbGJhY2ssIGVyciAmJiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgfHwgZXJyLm1lc3NhZ2UpID8gZXJyIDogbmV3IEVycm9yKGVycikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZva2VDYWxsYmFjayhjYWxsYmFjaywgZXJyb3IsIHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvciwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSQxKGUgPT4geyB0aHJvdyBlIH0sIGVycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBmbltTeW1ib2wudG9TdHJpbmdUYWddID09PSAnQXN5bmNGdW5jdGlvbic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBc3luY0dlbmVyYXRvcihmbikge1xuICAgICAgICByZXR1cm4gZm5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0FzeW5jR2VuZXJhdG9yJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cmFwQXN5bmMoYXN5bmNGbikge1xuICAgICAgICBpZiAodHlwZW9mIGFzeW5jRm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgYSBmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiBpc0FzeW5jKGFzeW5jRm4pID8gYXN5bmNpZnkoYXN5bmNGbikgOiBhc3luY0ZuO1xuICAgIH1cblxuICAgIC8vIGNvbmRpdGlvbmFsbHkgcHJvbWlzaWZ5IGEgZnVuY3Rpb24uXG4gICAgLy8gb25seSByZXR1cm4gYSBwcm9taXNlIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgIGZ1bmN0aW9uIGF3YWl0aWZ5IChhc3luY0ZuLCBhcml0eSkge1xuICAgICAgICBpZiAoIWFyaXR5KSBhcml0eSA9IGFzeW5jRm4ubGVuZ3RoO1xuICAgICAgICBpZiAoIWFyaXR5KSB0aHJvdyBuZXcgRXJyb3IoJ2FyaXR5IGlzIHVuZGVmaW5lZCcpXG4gICAgICAgIGZ1bmN0aW9uIGF3YWl0YWJsZSAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyaXR5IC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNGbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGFyZ3NbYXJpdHkgLSAxXSA9IChlcnIsIC4uLmNiQXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjYkFyZ3MubGVuZ3RoID4gMSA/IGNiQXJncyA6IGNiQXJnc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhc3luY0ZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdGFibGVcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseUVhY2gkMSAoZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBhcHBseUVhY2goZm5zLCAuLi5jYWxsQXJncykge1xuICAgICAgICAgICAgY29uc3QgZ28gPSBhd2FpdGlmeShmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIChmbiwgY2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd3JhcEFzeW5jKGZuKS5hcHBseSh0aGF0LCBjYWxsQXJncy5jb25jYXQoY2IpKTtcbiAgICAgICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG5cbiAgICAgICAgcmV0dXJuIGVhY2hmbihhcnIsICh2YWx1ZSwgXywgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgICAgICBfaXRlcmF0ZWUodmFsdWUsIChlcnIsIHYpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+PSAwICYmXG4gICAgICAgICAgICB2YWx1ZS5sZW5ndGggJSAxID09PSAwO1xuICAgIH1cblxuICAgIC8vIEEgdGVtcG9yYXJ5IHZhbHVlIHVzZWQgdG8gaWRlbnRpZnkgaWYgdGhlIGxvb3Agc2hvdWxkIGJlIGJyb2tlbi5cbiAgICAvLyBTZWUgIzEwNjQsICMxMjkzXG4gICAgY29uc3QgYnJlYWtMb29wID0ge307XG5cbiAgICBmdW5jdGlvbiBvbmNlKGZuKSB7XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZXIgKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGNhbGxGbiA9IGZuO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICAgICAgY2FsbEZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24od3JhcHBlciwgZm4pO1xuICAgICAgICByZXR1cm4gd3JhcHBlclxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdG9yIChjb2xsKSB7XG4gICAgICAgIHJldHVybiBjb2xsW1N5bWJvbC5pdGVyYXRvcl0gJiYgY29sbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQXJyYXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICByZXR1cm4gKytpIDwgbGVuID8ge3ZhbHVlOiBjb2xsW2ldLCBrZXk6IGl9IDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUVTMjAxNUl0ZXJhdG9yKGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoaXRlbS5kb25lKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogaXRlbS52YWx1ZSwga2V5OiBpfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEl0ZXJhdG9yKG9iaikge1xuICAgICAgICB2YXIgb2tleXMgPSBvYmogPyBPYmplY3Qua2V5cyhvYmopIDogW107XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW4gPSBva2V5cy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgdmFyIGtleSA9IG9rZXlzWysraV07XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IHt2YWx1ZTogb2JqW2tleV0sIGtleX0gOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yKGNvbGwpIHtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlJdGVyYXRvcihjb2xsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGNvbGwpO1xuICAgICAgICByZXR1cm4gaXRlcmF0b3IgPyBjcmVhdGVFUzIwMTVJdGVyYXRvcihpdGVyYXRvcikgOiBjcmVhdGVPYmplY3RJdGVyYXRvcihjb2xsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmx5T25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIHZhciBjYWxsRm4gPSBmbjtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgICAgIGNhbGxGbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3IgYXN5bmMgZ2VuZXJhdG9yc1xuICAgIGZ1bmN0aW9uIGFzeW5jRWFjaE9mTGltaXQoZ2VuZXJhdG9yLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgYXdhaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJ1bm5pbmcgPSAwO1xuICAgICAgICBsZXQgaWR4ID0gMDtcblxuICAgICAgICBmdW5jdGlvbiByZXBsZW5pc2goKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdyZXBsZW5pc2gnKVxuICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPj0gbGltaXQgfHwgYXdhaXRpbmcgfHwgZG9uZSkgcmV0dXJuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdyZXBsZW5pc2ggYXdhaXRpbmcnKVxuICAgICAgICAgICAgYXdhaXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgZ2VuZXJhdG9yLm5leHQoKS50aGVuKCh7dmFsdWUsIGRvbmU6IGl0ZXJEb25lfSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2dvdCB2YWx1ZScsIHZhbHVlKVxuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxlZCB8fCBkb25lKSByZXR1cm5cbiAgICAgICAgICAgICAgICBhd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChpdGVyRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnZG9uZSBuZXh0Q2InKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBydW5uaW5nKys7XG4gICAgICAgICAgICAgICAgaXRlcmF0ZWUodmFsdWUsIGlkeCwgaXRlcmF0ZWVDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWR4Kys7XG4gICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChoYW5kbGVFcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZUNhbGxiYWNrKGVyciwgcmVzdWx0KSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpdGVyYXRlZUNhbGxiYWNrJylcbiAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaGFuZGxlRXJyb3IoZXJyKVxuXG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gYnJlYWtMb29wIHx8IChkb25lICYmIHJ1bm5pbmcgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdkb25lIGl0ZXJDYicpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIpIHtcbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICBhd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2hPZkxpbWl0JDIgPSAobGltaXQpID0+IHtcbiAgICAgICAgcmV0dXJuIChvYmosIGl0ZXJhdGVlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2NvbmN1cnJlbmN5IGxpbWl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gMScpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0FzeW5jR2VuZXJhdG9yKG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNFYWNoT2ZMaW1pdChvYmosIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNFYWNoT2ZMaW1pdChvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbmV4dEVsZW0gPSBjcmVhdGVJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGxvb3BpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWVDYWxsYmFjayhlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGVkKSByZXR1cm5cbiAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gYnJlYWtMb29wIHx8IChkb25lICYmIHJ1bm5pbmcgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWxvb3BpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGxvb3BpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdoaWxlIChydW5uaW5nIDwgbGltaXQgJiYgIWRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBuZXh0RWxlbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRlZShlbGVtLnZhbHVlLCBlbGVtLmtleSwgb25seU9uY2UoaXRlcmF0ZWVDYWxsYmFjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb29waW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGVhY2hPZmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNoT2Z9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoT2ZMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmVhY2hPZl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn1cbiAgICAgKiBAYWxpYXMgZm9yRWFjaE9mTGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICAgICAqIGl0ZW0gaW4gYGNvbGxgLiBUaGUgYGtleWAgaXMgdGhlIGl0ZW0ncyBrZXksIG9yIGluZGV4IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgICogYXJyYXkuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoT2ZMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQyKGxpbWl0KShjb2xsLCB3cmFwQXN5bmMoaXRlcmF0ZWUpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2hPZkxpbWl0JDEgPSBhd2FpdGlmeShlYWNoT2ZMaW1pdCwgNCk7XG5cbiAgICAvLyBlYWNoT2YgaW1wbGVtZW50YXRpb24gb3B0aW1pemVkIGZvciBhcnJheS1saWtlc1xuICAgIGZ1bmN0aW9uIGVhY2hPZkFycmF5TGlrZShjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICAgIGNvbXBsZXRlZCA9IDAsXG4gICAgICAgICAgICB7bGVuZ3RofSA9IGNvbGwsXG4gICAgICAgICAgICBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdG9yQ2FsbGJhY2soZXJyLCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FuY2VsZWQgPT09IHRydWUpIHJldHVyblxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgrK2NvbXBsZXRlZCA9PT0gbGVuZ3RoKSB8fCB2YWx1ZSA9PT0gYnJlYWtMb29wKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKGNvbGxbaW5kZXhdLCBpbmRleCwgb25seU9uY2UoaXRlcmF0b3JDYWxsYmFjaykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYSBnZW5lcmljIHZlcnNpb24gb2YgZWFjaE9mIHdoaWNoIGNhbiBoYW5kbGUgYXJyYXksIG9iamVjdCwgYW5kIGl0ZXJhdG9yIGNhc2VzLlxuICAgIGZ1bmN0aW9uIGVhY2hPZkdlbmVyaWMgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZWFjaE9mTGltaXQkMShjb2xsLCBJbmZpbml0eSwgaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaWtlIFtgZWFjaGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofSwgZXhjZXB0IHRoYXQgaXQgcGFzc2VzIHRoZSBrZXkgKG9yIGluZGV4KSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50XG4gICAgICogdG8gdGhlIGl0ZXJhdGVlLlxuICAgICAqXG4gICAgICogQG5hbWUgZWFjaE9mXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGZvckVhY2hPZlxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHNlZSBbYXN5bmMuZWFjaF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICAgICAqIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBga2V5YCBpcyB0aGUgaXRlbSdzIGtleSwgb3IgaW5kZXggaW4gdGhlIGNhc2Ugb2YgYW4gYXJyYXkuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGV2Lmpzb24gaXMgYSBmaWxlIGNvbnRhaW5pbmcgYSB2YWxpZCBqc29uIG9iamVjdCBjb25maWcgZm9yIGRldiBlbnZpcm9ubWVudFxuICAgICAqIC8vIGRldi5qc29uIGlzIGEgZmlsZSBjb250YWluaW5nIGEgdmFsaWQganNvbiBvYmplY3QgY29uZmlnIGZvciB0ZXN0IGVudmlyb25tZW50XG4gICAgICogLy8gcHJvZC5qc29uIGlzIGEgZmlsZSBjb250YWluaW5nIGEgdmFsaWQganNvbiBvYmplY3QgY29uZmlnIGZvciBwcm9kIGVudmlyb25tZW50XG4gICAgICogLy8gaW52YWxpZC5qc29uIGlzIGEgZmlsZSB3aXRoIGEgbWFsZm9ybWVkIGpzb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBsZXQgY29uZmlncyA9IHt9OyAvL2dsb2JhbCB2YXJpYWJsZVxuICAgICAqIGxldCB2YWxpZENvbmZpZ0ZpbGVNYXAgPSB7ZGV2OiAnZGV2Lmpzb24nLCB0ZXN0OiAndGVzdC5qc29uJywgcHJvZDogJ3Byb2QuanNvbid9O1xuICAgICAqIGxldCBpbnZhbGlkQ29uZmlnRmlsZU1hcCA9IHtkZXY6ICdkZXYuanNvbicsIHRlc3Q6ICd0ZXN0Lmpzb24nLCBpbnZhbGlkOiAnaW52YWxpZC5qc29uJ307XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCByZWFkcyBhIGpzb24gZmlsZSBhbmQgcGFyc2VzIHRoZSBjb250ZW50cyBhcyBqc29uIG9iamVjdFxuICAgICAqIGZ1bmN0aW9uIHBhcnNlRmlsZShmaWxlLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnJlYWRGaWxlKGZpbGUsIFwidXRmOFwiLCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxiYWNrKGVycik7XG4gICAgICogICAgICAgICB0cnkge1xuICAgICAqICAgICAgICAgICAgIGNvbmZpZ3Nba2V5XSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICogICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuZm9yRWFjaE9mKHZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICAgICAgLy8gY29uZmlncyBpcyBub3cgYSBtYXAgb2YgSlNPTiBkYXRhLCBlLmcuXG4gICAgICogICAgICAgICAvLyB7IGRldjogLy9wYXJzZWQgZGV2Lmpzb24sIHRlc3Q6IC8vcGFyc2VkIHRlc3QuanNvbiwgcHJvZDogLy9wYXJzZWQgcHJvZC5qc29ufVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL0Vycm9yIGhhbmRpbmdcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YoaW52YWxpZENvbmZpZ0ZpbGVNYXAsIHBhcnNlRmlsZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICogICAgICAgICAvLyBKU09OIHBhcnNlIGVycm9yIGV4Y2VwdGlvblxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZm9yRWFjaE9mKHZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlKVxuICAgICAqIC50aGVuKCAoKSA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICAvLyBjb25maWdzIGlzIG5vdyBhIG1hcCBvZiBKU09OIGRhdGEsIGUuZy5cbiAgICAgKiAgICAgLy8geyBkZXY6IC8vcGFyc2VkIGRldi5qc29uLCB0ZXN0OiAvL3BhcnNlZCB0ZXN0Lmpzb24sIHByb2Q6IC8vcGFyc2VkIHByb2QuanNvbn1cbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9FcnJvciBoYW5kaW5nXG4gICAgICogYXN5bmMuZm9yRWFjaE9mKGludmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgKiAgICAgLy8gSlNPTiBwYXJzZSBlcnJvciBleGNlcHRpb25cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLmZvckVhY2hPZih2YWxpZENvbmZpZ0ZpbGVNYXAsIHBhcnNlRmlsZSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhjb25maWdzKTtcbiAgICAgKiAgICAgICAgIC8vIGNvbmZpZ3MgaXMgbm93IGEgbWFwIG9mIEpTT04gZGF0YSwgZS5nLlxuICAgICAqICAgICAgICAgLy8geyBkZXY6IC8vcGFyc2VkIGRldi5qc29uLCB0ZXN0OiAvL3BhcnNlZCB0ZXN0Lmpzb24sIHByb2Q6IC8vcGFyc2VkIHByb2QuanNvbn1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy9FcnJvciBoYW5kaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLmZvckVhY2hPZihpbnZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBKU09OIHBhcnNlIGVycm9yIGV4Y2VwdGlvblxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZWFjaE9mKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZWFjaE9mSW1wbGVtZW50YXRpb24gPSBpc0FycmF5TGlrZShjb2xsKSA/IGVhY2hPZkFycmF5TGlrZSA6IGVhY2hPZkdlbmVyaWM7XG4gICAgICAgIHJldHVybiBlYWNoT2ZJbXBsZW1lbnRhdGlvbihjb2xsLCB3cmFwQXN5bmMoaXRlcmF0ZWUpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2hPZiQxID0gYXdhaXRpZnkoZWFjaE9mLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIGEgbmV3IGNvbGxlY3Rpb24gb2YgdmFsdWVzIGJ5IG1hcHBpbmcgZWFjaCB2YWx1ZSBpbiBgY29sbGAgdGhyb3VnaFxuICAgICAqIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uLiBUaGUgYGl0ZXJhdGVlYCBpcyBjYWxsZWQgd2l0aCBhbiBpdGVtIGZyb20gYGNvbGxgXG4gICAgICogYW5kIGEgY2FsbGJhY2sgZm9yIHdoZW4gaXQgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcuIEVhY2ggb2YgdGhlc2UgY2FsbGJhY2tzXG4gICAgICogdGFrZXMgMiBhcmd1bWVudHM6IGFuIGBlcnJvcmAsIGFuZCB0aGUgdHJhbnNmb3JtZWQgaXRlbSBmcm9tIGBjb2xsYC4gSWZcbiAgICAgKiBgaXRlcmF0ZWVgIHBhc3NlcyBhbiBlcnJvciB0byBpdHMgY2FsbGJhY2ssIHRoZSBtYWluIGBjYWxsYmFja2AgKGZvciB0aGVcbiAgICAgKiBgbWFwYCBmdW5jdGlvbikgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhhdCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluXG4gICAgICogcGFyYWxsZWwsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlXG4gICAgICogaW4gb3JkZXIuIEhvd2V2ZXIsIHRoZSByZXN1bHRzIGFycmF5IHdpbGwgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4gICAgICogb3JpZ2luYWwgYGNvbGxgLlxuICAgICAqXG4gICAgICogSWYgYG1hcGAgaXMgcGFzc2VkIGFuIE9iamVjdCwgdGhlIHJlc3VsdHMgd2lsbCBiZSBhbiBBcnJheS4gIFRoZSByZXN1bHRzXG4gICAgICogd2lsbCByb3VnaGx5IGJlIGluIHRoZSBvcmRlciBvZiB0aGUgb3JpZ2luYWwgT2JqZWN0cycga2V5cyAoYnV0IHRoaXMgY2FuXG4gICAgICogdmFyeSBhY3Jvc3MgSmF2YVNjcmlwdCBlbmdpbmVzKS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIGl0ZW0uXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIEFycmF5IG9mIHRoZVxuICAgICAqIHRyYW5zZm9ybWVkIGl0ZW1zIGZyb20gdGhlIGBjb2xsYC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlNC50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlNC50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdC5zaXplKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMubWFwKGZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIFsgMTAwMCwgMjAwMCwgMzAwMF1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5tYXAod2l0aE1pc3NpbmdGaWxlTGlzdCwgZ2V0RmlsZVNpemVJbkJ5dGVzLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5tYXAoZmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgLy8gWyAxMDAwLCAyMDAwLCAzMDAwXVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5tYXAod2l0aE1pc3NpbmdGaWxlTGlzdCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMubWFwKGZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIFsgMTAwMCwgMjAwMCwgMzAwMF1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLm1hcCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXAgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2FzeW5jTWFwKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBtYXAkMSA9IGF3YWl0aWZ5KG1hcCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgdG8gZWFjaCBmdW5jdGlvbiBpbiB0aGUgYXJyYXksIGNhbGxpbmdcbiAgICAgKiBgY2FsbGJhY2tgIGFmdGVyIGFsbCBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQuIElmIHlvdSBvbmx5IHByb3ZpZGUgdGhlIGZpcnN0XG4gICAgICogYXJndW1lbnQsIGBmbnNgLCB0aGVuIGl0IHdpbGwgcmV0dXJuIGEgZnVuY3Rpb24gd2hpY2ggbGV0cyB5b3UgcGFzcyBpbiB0aGVcbiAgICAgKiBhcmd1bWVudHMgYXMgaWYgaXQgd2VyZSBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsLiBJZiBtb3JlIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCwgYGNhbGxiYWNrYCBpcyByZXF1aXJlZCB3aGlsZSBgYXJnc2AgaXMgc3RpbGwgb3B0aW9uYWwuIFRoZSByZXN1bHRzXG4gICAgICogZm9yIGVhY2ggb2YgdGhlIGFwcGxpZWQgYXN5bmMgZnVuY3Rpb25zIGFyZSBwYXNzZWQgdG8gdGhlIGZpbmFsIGNhbGxiYWNrXG4gICAgICogYXMgYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhcHBseUVhY2hcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gZm5zIC0gQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBc3luY0Z1bmN0aW9ufXNcbiAgICAgKiB0byBhbGwgY2FsbCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gYW55IG51bWJlciBvZiBzZXBhcmF0ZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGVcbiAgICAgKiBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gdGhlIGZpbmFsIGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgY2FsbGJhY2ssXG4gICAgICogY2FsbGVkIHdoZW4gYWxsIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZCBwcm9jZXNzaW5nLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSAtIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIG5vIGFyZ3Mgb3RoZXIgdGhhblxuICAgICAqIGFuIG9wdGlvbmFsIGNhbGxiYWNrLCB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIGBhcmdzYCB0byBlYWNoXG4gICAgICogb2YgdGhlIGZ1bmN0aW9ucy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogY29uc3QgYXBwbGllZEZuID0gYXN5bmMuYXBwbHlFYWNoKFtlbmFibGVTZWFyY2gsIHVwZGF0ZVNjaGVtYV0sICdidWNrZXQnKVxuICAgICAqXG4gICAgICogYXBwbGllZEZuKChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgKiAgICAgLy8gcmVzdWx0c1swXSBpcyB0aGUgcmVzdWx0cyBmb3IgYGVuYWJsZVNlYXJjaGBcbiAgICAgKiAgICAgLy8gcmVzdWx0c1sxXSBpcyB0aGUgcmVzdWx0cyBmb3IgYHVwZGF0ZVNjaGVtYWBcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHBhcnRpYWwgYXBwbGljYXRpb24gZXhhbXBsZTpcbiAgICAgKiBhc3luYy5lYWNoKFxuICAgICAqICAgICBidWNrZXRzLFxuICAgICAqICAgICBhc3luYyAoYnVja2V0KSA9PiBhc3luYy5hcHBseUVhY2goW2VuYWJsZVNlYXJjaCwgdXBkYXRlU2NoZW1hXSwgYnVja2V0KSgpLFxuICAgICAqICAgICBjYWxsYmFja1xuICAgICAqICk7XG4gICAgICovXG4gICAgdmFyIGFwcGx5RWFjaCA9IGFwcGx5RWFjaCQxKG1hcCQxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZWFjaE9mYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZWFjaE9mU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZWFjaE9mXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaE9mfVxuICAgICAqIEBhbGlhcyBmb3JFYWNoT2ZTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoT2ZTZXJpZXMoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQxKGNvbGwsIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGVhY2hPZlNlcmllcyQxID0gYXdhaXRpZnkoZWFjaE9mU2VyaWVzLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgbWFwYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIGl0ZW0uXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5IG9mIHRoZVxuICAgICAqIHRyYW5zZm9ybWVkIGl0ZW1zIGZyb20gdGhlIGBjb2xsYC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFNlcmllcyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfYXN5bmNNYXAoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIG1hcFNlcmllcyQxID0gYXdhaXRpZnkobWFwU2VyaWVzLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgYXBwbHlFYWNoYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmFwcGx5RWFjaH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgYXBwbHlFYWNoU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuYXBwbHlFYWNoXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXBwbHlFYWNofVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBmbnMgLSBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFzeW5jRnVuY3Rpb259cyB0byBhbGxcbiAgICAgKiBjYWxsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBhbnkgbnVtYmVyIG9mIHNlcGFyYXRlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZVxuICAgICAqIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSB0aGUgZmluYWwgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBjYWxsYmFjayxcbiAgICAgKiBjYWxsZWQgd2hlbiBhbGwgZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHByb2Nlc3NpbmcuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IC0gQSBmdW5jdGlvbiwgdGhhdCB3aGVuIGNhbGxlZCwgaXMgdGhlIHJlc3VsdCBvZlxuICAgICAqIGFwcGxpbmcgdGhlIGBhcmdzYCB0byB0aGUgbGlzdCBvZiBmdW5jdGlvbnMuICBJdCB0YWtlcyBubyBhcmdzLCBvdGhlciB0aGFuXG4gICAgICogYSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICB2YXIgYXBwbHlFYWNoU2VyaWVzID0gYXBwbHlFYWNoJDEobWFwU2VyaWVzJDEpO1xuXG4gICAgY29uc3QgUFJPTUlTRV9TWU1CT0wgPSBTeW1ib2woJ3Byb21pc2VDYWxsYmFjaycpO1xuXG4gICAgZnVuY3Rpb24gcHJvbWlzZUNhbGxiYWNrICgpIHtcbiAgICAgICAgbGV0IHJlc29sdmUsIHJlamVjdDtcbiAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sgKGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MubGVuZ3RoID4gMSA/IGFyZ3MgOiBhcmdzWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrW1BST01JU0VfU1lNQk9MXSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSA9IHJlcyxcbiAgICAgICAgICAgIHJlamVjdCA9IHJlajtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgYmVzdCBvcmRlciBmb3IgcnVubmluZyB0aGUge0BsaW5rIEFzeW5jRnVuY3Rpb259cyBpbiBgdGFza3NgLCBiYXNlZCBvblxuICAgICAqIHRoZWlyIHJlcXVpcmVtZW50cy4gRWFjaCBmdW5jdGlvbiBjYW4gb3B0aW9uYWxseSBkZXBlbmQgb24gb3RoZXIgZnVuY3Rpb25zXG4gICAgICogYmVpbmcgY29tcGxldGVkIGZpcnN0LCBhbmQgZWFjaCBmdW5jdGlvbiBpcyBydW4gYXMgc29vbiBhcyBpdHMgcmVxdWlyZW1lbnRzXG4gICAgICogYXJlIHNhdGlzZmllZC5cbiAgICAgKlxuICAgICAqIElmIGFueSBvZiB0aGUge0BsaW5rIEFzeW5jRnVuY3Rpb259cyBwYXNzIGFuIGVycm9yIHRvIHRoZWlyIGNhbGxiYWNrLCB0aGUgYGF1dG9gIHNlcXVlbmNlXG4gICAgICogd2lsbCBzdG9wLiBGdXJ0aGVyIHRhc2tzIHdpbGwgbm90IGV4ZWN1dGUgKHNvIGFueSBvdGhlciBmdW5jdGlvbnMgZGVwZW5kaW5nXG4gICAgICogb24gaXQgd2lsbCBub3QgcnVuKSwgYW5kIHRoZSBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlXG4gICAgICogZXJyb3IuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIGFsc28gcmVjZWl2ZSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiBmdW5jdGlvbnMgd2hpY2hcbiAgICAgKiBoYXZlIGNvbXBsZXRlZCBzbyBmYXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCBpZiB0aGV5IGhhdmUgZGVwZW5kZW5jaWVzLiBJZiBhXG4gICAgICogdGFzayBmdW5jdGlvbiBoYXMgbm8gZGVwZW5kZW5jaWVzLCBpdCB3aWxsIG9ubHkgYmUgcGFzc2VkIGEgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAbmFtZSBhdXRvXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXNrcyAtIEFuIG9iamVjdC4gRWFjaCBvZiBpdHMgcHJvcGVydGllcyBpcyBlaXRoZXIgYVxuICAgICAqIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHJlcXVpcmVtZW50cywgd2l0aCB0aGUge0BsaW5rIEFzeW5jRnVuY3Rpb259IGl0c2VsZiB0aGUgbGFzdCBpdGVtXG4gICAgICogaW4gdGhlIGFycmF5LiBUaGUgb2JqZWN0J3Mga2V5IG9mIGEgcHJvcGVydHkgc2VydmVzIGFzIHRoZSBuYW1lIG9mIHRoZSB0YXNrXG4gICAgICogZGVmaW5lZCBieSB0aGF0IHByb3BlcnR5LCBpLmUuIGNhbiBiZSB1c2VkIHdoZW4gc3BlY2lmeWluZyByZXF1aXJlbWVudHMgZm9yXG4gICAgICogb3RoZXIgdGFza3MuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBvbmUgb3IgdHdvIGFyZ3VtZW50czpcbiAgICAgKiAqIGEgYHJlc3VsdHNgIG9iamVjdCwgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXNseSBleGVjdXRlZFxuICAgICAqICAgZnVuY3Rpb25zLCBvbmx5IHBhc3NlZCBpZiB0aGUgdGFzayBoYXMgYW55IGRlcGVuZGVuY2llcyxcbiAgICAgKiAqIGEgYGNhbGxiYWNrKGVyciwgcmVzdWx0KWAgZnVuY3Rpb24sIHdoaWNoIG11c3QgYmUgY2FsbGVkIHdoZW4gZmluaXNoZWQsXG4gICAgICogICBwYXNzaW5nIGFuIGBlcnJvcmAgKHdoaWNoIGNhbiBiZSBgbnVsbGApIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbidzXG4gICAgICogICBleGVjdXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtjb25jdXJyZW5jeT1JbmZpbml0eV0gLSBBbiBvcHRpb25hbCBgaW50ZWdlcmAgZm9yXG4gICAgICogZGV0ZXJtaW5pbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIHRoYXQgY2FuIGJlIHJ1biBpbiBwYXJhbGxlbC4gQnlcbiAgICAgKiBkZWZhdWx0LCBhcyBtYW55IGFzIHBvc3NpYmxlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiB0aGUgdGFza3MgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgIGFyZ3VtZW50IGlmIGFueSBgdGFza3NgXG4gICAgICogcGFzcyBhbiBlcnJvciB0byB0aGVpciBjYWxsYmFjay4gUmVzdWx0cyBhcmUgYWx3YXlzIHJldHVybmVkOyBob3dldmVyLCBpZiBhblxuICAgICAqIGVycm9yIG9jY3Vycywgbm8gZnVydGhlciBgdGFza3NgIHdpbGwgYmUgcGVyZm9ybWVkLCBhbmQgdGhlIHJlc3VsdHMgb2JqZWN0XG4gICAgICogd2lsbCBvbmx5IGNvbnRhaW4gcGFydGlhbCByZXN1bHRzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBub3QgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vVXNpbmcgQ2FsbGJhY2tzXG4gICAgICogYXN5bmMuYXV0byh7XG4gICAgICogICAgIGdldF9kYXRhOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBnZXQgc29tZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgbWFrZV9mb2xkZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0byBzdG9yZSBhIGZpbGUgaW5cbiAgICAgKiAgICAgICAgIC8vIHRoaXMgaXMgcnVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgZ2V0dGluZyB0aGUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZvbGRlcicpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB3cml0ZV9maWxlOiBbJ2dldF9kYXRhJywgJ21ha2VfZm9sZGVyJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBvbmNlIHRoZSBmaWxlIGlzIHdyaXR0ZW4gbGV0J3MgZW1haWwgYSBsaW5rIHRvIGl0Li4uXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOnJlc3VsdHMud3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfV1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY29uc29sZS5sb2coJ3Jlc3VsdHMgPSAnLCByZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyA9IHtcbiAgICAgKiAgICAgLy8gICAgIGdldF9kYXRhOiBbJ2RhdGEnLCAnY29udmVydGVkIHRvIGFycmF5J11cbiAgICAgKiAgICAgLy8gICAgIG1ha2VfZm9sZGVyOyAnZm9sZGVyJyxcbiAgICAgKiAgICAgLy8gICAgIHdyaXRlX2ZpbGU6ICdmaWxlbmFtZSdcbiAgICAgKiAgICAgLy8gICAgIGVtYWlsX2xpbms6IHsgZmlsZTogJ2ZpbGVuYW1lJywgZW1haWw6ICd1c2VyQGV4YW1wbGUuY29tJyB9XG4gICAgICogICAgIC8vIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaW4gZ2V0X2RhdGEnKTtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gZ2V0IHNvbWUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2RhdGEnLCAnY29udmVydGVkIHRvIGFycmF5Jyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIG1ha2VfZm9sZGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ2luIG1ha2VfZm9sZGVyJyk7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0byBzdG9yZSBhIGZpbGUgaW5cbiAgICAgKiAgICAgICAgIC8vIHRoaXMgaXMgcnVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgZ2V0dGluZyB0aGUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZvbGRlcicpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB3cml0ZV9maWxlOiBbJ2dldF9kYXRhJywgJ21ha2VfZm9sZGVyJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBvbmNlIHRoZSBmaWxlIGlzIHdyaXR0ZW4gbGV0J3MgZW1haWwgYSBsaW5rIHRvIGl0Li4uXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOnJlc3VsdHMud3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfV1cbiAgICAgKiB9KS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZygncmVzdWx0cyA9ICcsIHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzID0ge1xuICAgICAqICAgICAvLyAgICAgZ2V0X2RhdGE6IFsnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknXVxuICAgICAqICAgICAvLyAgICAgbWFrZV9mb2xkZXI7ICdmb2xkZXInLFxuICAgICAqICAgICAvLyAgICAgd3JpdGVfZmlsZTogJ2ZpbGVuYW1lJ1xuICAgICAqICAgICAvLyAgICAgZW1haWxfbGluazogeyBmaWxlOiAnZmlsZW5hbWUnLCBlbWFpbDogJ3VzZXJAZXhhbXBsZS5jb20nIH1cbiAgICAgKiAgICAgLy8gfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlcnIgPSAnLCBlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuYXV0byh7XG4gICAgICogICAgICAgICAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gZ2V0IHNvbWUgZGF0YVxuICAgICAqICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIG1ha2VfZm9sZGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0byBzdG9yZSBhIGZpbGUgaW5cbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmb2xkZXInKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihyZXN1bHRzLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICAvLyBvbmNlIHRoZXJlIGlzIHNvbWUgZGF0YSBhbmQgdGhlIGRpcmVjdG9yeSBleGlzdHMsXG4gICAgICogICAgICAgICAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICAgICAgICAgIH1dLFxuICAgICAqICAgICAgICAgICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgeydmaWxlJzpyZXN1bHRzLndyaXRlX2ZpbGUsICdlbWFpbCc6J3VzZXJAZXhhbXBsZS5jb20nfSk7XG4gICAgICogICAgICAgICAgICAgfV1cbiAgICAgKiAgICAgICAgIH0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ3Jlc3VsdHMgPSAnLCByZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgPSB7XG4gICAgICogICAgICAgICAvLyAgICAgZ2V0X2RhdGE6IFsnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknXVxuICAgICAqICAgICAgICAgLy8gICAgIG1ha2VfZm9sZGVyOyAnZm9sZGVyJyxcbiAgICAgKiAgICAgICAgIC8vICAgICB3cml0ZV9maWxlOiAnZmlsZW5hbWUnXG4gICAgICogICAgICAgICAvLyAgICAgZW1haWxfbGluazogeyBmaWxlOiAnZmlsZW5hbWUnLCBlbWFpbDogJ3VzZXJAZXhhbXBsZS5jb20nIH1cbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXV0byh0YXNrcywgY29uY3VycmVuY3ksIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uY3VycmVuY3kgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayB8fCBwcm9taXNlQ2FsbGJhY2soKSk7XG4gICAgICAgIHZhciBudW1UYXNrcyA9IE9iamVjdC5rZXlzKHRhc2tzKS5sZW5ndGg7XG4gICAgICAgIGlmICghbnVtVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IG51bVRhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG4gICAgICAgIHZhciBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICB2YXIgcmVhZHlUYXNrcyA9IFtdO1xuXG4gICAgICAgIC8vIGZvciBjeWNsZSBkZXRlY3Rpb246XG4gICAgICAgIHZhciByZWFkeVRvQ2hlY2sgPSBbXTsgLy8gdGFza3MgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyByZWFjaGFibGVcbiAgICAgICAgLy8gd2l0aG91dCB0aGUgcG9zc2liaWxpdHkgb2YgcmV0dXJuaW5nIHRvIGFuIGFuY2VzdG9yIHRhc2tcbiAgICAgICAgdmFyIHVuY2hlY2tlZERlcGVuZGVuY2llcyA9IHt9O1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHRhc2tzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzW2tleV07XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFzaykpIHtcbiAgICAgICAgICAgICAgICAvLyBubyBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhrZXksIFt0YXNrXSk7XG4gICAgICAgICAgICAgICAgcmVhZHlUb0NoZWNrLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nRGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdEZXBlbmRlbmNpZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhrZXksIHRhc2spO1xuICAgICAgICAgICAgICAgIHJlYWR5VG9DaGVjay5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdW5jaGVja2VkRGVwZW5kZW5jaWVzW2tleV0gPSByZW1haW5pbmdEZXBlbmRlbmNpZXM7XG5cbiAgICAgICAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcGVuZGVuY3lOYW1lID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhc2tzW2RlcGVuZGVuY3lOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jLmF1dG8gdGFzayBgJyArIGtleSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYCBoYXMgYSBub24tZXhpc3RlbnQgZGVwZW5kZW5jeSBgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5TmFtZSArICdgIGluICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmpvaW4oJywgJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihkZXBlbmRlbmN5TmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdEZXBlbmRlbmNpZXMtLTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0RlcGVuZGVuY2llcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZVRhc2soa2V5LCB0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNoZWNrRm9yRGVhZGxvY2tzKCk7XG4gICAgICAgIHByb2Nlc3NRdWV1ZSgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGVucXVldWVUYXNrKGtleSwgdGFzaykge1xuICAgICAgICAgICAgcmVhZHlUYXNrcy5wdXNoKCgpID0+IHJ1blRhc2soa2V5LCB0YXNrKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUXVldWUoKSB7XG4gICAgICAgICAgICBpZiAoY2FuY2VsZWQpIHJldHVyblxuICAgICAgICAgICAgaWYgKHJlYWR5VGFza3MubGVuZ3RoID09PSAwICYmIHJ1bm5pbmdUYXNrcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlKHJlYWR5VGFza3MubGVuZ3RoICYmIHJ1bm5pbmdUYXNrcyA8IGNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1biA9IHJlYWR5VGFza3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBydW4oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkTGlzdGVuZXIodGFza05hbWUsIGZuKSB7XG4gICAgICAgICAgICB2YXIgdGFza0xpc3RlbmVycyA9IGxpc3RlbmVyc1t0YXNrTmFtZV07XG4gICAgICAgICAgICBpZiAoIXRhc2tMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICB0YXNrTGlzdGVuZXJzID0gbGlzdGVuZXJzW3Rhc2tOYW1lXSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YXNrTGlzdGVuZXJzLnB1c2goZm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdGFza0NvbXBsZXRlKHRhc2tOYW1lKSB7XG4gICAgICAgICAgICB2YXIgdGFza0xpc3RlbmVycyA9IGxpc3RlbmVyc1t0YXNrTmFtZV0gfHwgW107XG4gICAgICAgICAgICB0YXNrTGlzdGVuZXJzLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gICAgICAgICAgICBwcm9jZXNzUXVldWUoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZnVuY3Rpb24gcnVuVGFzayhrZXksIHRhc2spIHtcbiAgICAgICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuO1xuXG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gb25seU9uY2UoKGVyciwgLi4ucmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIFtyZXN1bHRdID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKHJrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSByZXN1bHRzW3JrZXldO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZWQpIHJldHVyblxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHNhZmVSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tDb21wbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgIHZhciB0YXNrRm4gPSB3cmFwQXN5bmModGFza1t0YXNrLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIGlmICh0YXNrLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0YXNrRm4ocmVzdWx0cywgdGFza0NhbGxiYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFza0ZuKHRhc2tDYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVja0ZvckRlYWRsb2NrcygpIHtcbiAgICAgICAgICAgIC8vIEthaG4ncyBhbGdvcml0aG1cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjS2Fobi4yN3NfYWxnb3JpdGhtXG4gICAgICAgICAgICAvLyBodHRwOi8vY29ubmFsbGUuYmxvZ3Nwb3QuY29tLzIwMTMvMTAvdG9wb2xvZ2ljYWwtc29ydGluZ2thaG4tYWxnb3JpdGhtLmh0bWxcbiAgICAgICAgICAgIHZhciBjdXJyZW50VGFzaztcbiAgICAgICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChyZWFkeVRvQ2hlY2subGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFRhc2sgPSByZWFkeVRvQ2hlY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgIGdldERlcGVuZGVudHMoY3VycmVudFRhc2spLmZvckVhY2goZGVwZW5kZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC0tdW5jaGVja2VkRGVwZW5kZW5jaWVzW2RlcGVuZGVudF0gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5VG9DaGVjay5wdXNoKGRlcGVuZGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvdW50ZXIgIT09IG51bVRhc2tzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnYXN5bmMuYXV0byBjYW5ub3QgZXhlY3V0ZSB0YXNrcyBkdWUgdG8gYSByZWN1cnNpdmUgZGVwZW5kZW5jeSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0RGVwZW5kZW50cyh0YXNrTmFtZSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGFza3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrID0gdGFza3Nba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXNrKSAmJiB0YXNrLmluZGV4T2YodGFza05hbWUpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FsbGJhY2tbUFJPTUlTRV9TWU1CT0xdXG4gICAgfVxuXG4gICAgdmFyIEZOX0FSR1MgPSAvXig/OmFzeW5jXFxzKT8oPzpmdW5jdGlvbik/XFxzKig/OlxcdytcXHMqKT9cXCgoW14pXSspXFwpKD86XFxzKnspLztcbiAgICB2YXIgQVJST1dfRk5fQVJHUyA9IC9eKD86YXN5bmNcXHMpP1xccyooPzpcXChcXHMqKT8oKD86W14pPVxcc11cXHMqKSopKD86XFwpXFxzKik/PT4vO1xuICAgIHZhciBGTl9BUkdfU1BMSVQgPSAvLC87XG4gICAgdmFyIEZOX0FSRyA9IC8oPS4rKT8oXFxzKikkLztcblxuICAgIGZ1bmN0aW9uIHN0cmlwQ29tbWVudHMoc3RyaW5nKSB7XG4gICAgICAgIGxldCBzdHJpcHBlZCA9ICcnO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgZW5kQmxvY2tDb21tZW50ID0gc3RyaW5nLmluZGV4T2YoJyovJyk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChzdHJpbmdbaW5kZXhdID09PSAnLycgJiYgc3RyaW5nW2luZGV4KzFdID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICAvLyBpbmxpbmUgY29tbWVudFxuICAgICAgICAgICAgICAgIGxldCBlbmRJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgaW5kZXggPSAoZW5kSW5kZXggPT09IC0xKSA/IHN0cmluZy5sZW5ndGggOiBlbmRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGVuZEJsb2NrQ29tbWVudCAhPT0gLTEpICYmIChzdHJpbmdbaW5kZXhdID09PSAnLycpICYmIChzdHJpbmdbaW5kZXgrMV0gPT09ICcqJykpIHtcbiAgICAgICAgICAgICAgICAvLyBibG9jayBjb21tZW50XG4gICAgICAgICAgICAgICAgbGV0IGVuZEluZGV4ID0gc3RyaW5nLmluZGV4T2YoJyovJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBlbmRJbmRleCArIDI7XG4gICAgICAgICAgICAgICAgICAgIGVuZEJsb2NrQ29tbWVudCA9IHN0cmluZy5pbmRleE9mKCcqLycsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZCArPSBzdHJpbmdbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyaXBwZWQgKz0gc3RyaW5nW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJpcHBlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtcyhmdW5jKSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IHN0cmlwQ29tbWVudHMoZnVuYy50b1N0cmluZygpKTtcbiAgICAgICAgbGV0IG1hdGNoID0gc3JjLm1hdGNoKEZOX0FSR1MpO1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHNyYy5tYXRjaChBUlJPV19GTl9BUkdTKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoKSB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBwYXJzZSBhcmdzIGluIGF1dG9JbmplY3RcXG5Tb3VyY2U6XFxuJyArIHNyYylcbiAgICAgICAgbGV0IFssIGFyZ3NdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBhcmdzXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzL2csICcnKVxuICAgICAgICAgICAgLnNwbGl0KEZOX0FSR19TUExJVClcbiAgICAgICAgICAgIC5tYXAoKGFyZykgPT4gYXJnLnJlcGxhY2UoRk5fQVJHLCAnJykudHJpbSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGRlcGVuZGVuY3ktaW5qZWN0ZWQgdmVyc2lvbiBvZiB0aGUgW2FzeW5jLmF1dG9de0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5hdXRvfSBmdW5jdGlvbi4gRGVwZW5kZW50XG4gICAgICogdGFza3MgYXJlIHNwZWNpZmllZCBhcyBwYXJhbWV0ZXJzIHRvIHRoZSBmdW5jdGlvbiwgYWZ0ZXIgdGhlIHVzdWFsIGNhbGxiYWNrXG4gICAgICogcGFyYW1ldGVyLCB3aXRoIHRoZSBwYXJhbWV0ZXIgbmFtZXMgbWF0Y2hpbmcgdGhlIG5hbWVzIG9mIHRoZSB0YXNrcyBpdFxuICAgICAqIGRlcGVuZHMgb24uIFRoaXMgY2FuIHByb3ZpZGUgZXZlbiBtb3JlIHJlYWRhYmxlIHRhc2sgZ3JhcGhzIHdoaWNoIGNhbiBiZVxuICAgICAqIGVhc2llciB0byBtYWludGFpbi5cbiAgICAgKlxuICAgICAqIElmIGEgZmluYWwgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGUgdGFzayByZXN1bHRzIGFyZSBzaW1pbGFybHkgaW5qZWN0ZWQsXG4gICAgICogc3BlY2lmaWVkIGFzIG5hbWVkIHBhcmFtZXRlcnMgYWZ0ZXIgdGhlIGluaXRpYWwgZXJyb3IgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogVGhlIGF1dG9JbmplY3QgZnVuY3Rpb24gaXMgcHVyZWx5IHN5bnRhY3RpYyBzdWdhciBhbmQgaXRzIHNlbWFudGljcyBhcmVcbiAgICAgKiBvdGhlcndpc2UgZXF1aXZhbGVudCB0byBbYXN5bmMuYXV0b117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99LlxuICAgICAqXG4gICAgICogQG5hbWUgYXV0b0luamVjdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmF1dG9de0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5hdXRvfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdGFza3MgLSBBbiBvYmplY3QsIGVhY2ggb2Ygd2hvc2UgcHJvcGVydGllcyBpcyBhbiB7QGxpbmsgQXN5bmNGdW5jdGlvbn0gb2ZcbiAgICAgKiB0aGUgZm9ybSAnZnVuYyhbZGVwZW5kZW5jaWVzLi4uXSwgY2FsbGJhY2spLiBUaGUgb2JqZWN0J3Mga2V5IG9mIGEgcHJvcGVydHlcbiAgICAgKiBzZXJ2ZXMgYXMgdGhlIG5hbWUgb2YgdGhlIHRhc2sgZGVmaW5lZCBieSB0aGF0IHByb3BlcnR5LCBpLmUuIGNhbiBiZSB1c2VkXG4gICAgICogd2hlbiBzcGVjaWZ5aW5nIHJlcXVpcmVtZW50cyBmb3Igb3RoZXIgdGFza3MuXG4gICAgICogKiBUaGUgYGNhbGxiYWNrYCBwYXJhbWV0ZXIgaXMgYSBgY2FsbGJhY2soZXJyLCByZXN1bHQpYCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqICAgd2hlbiBmaW5pc2hlZCwgcGFzc2luZyBhbiBgZXJyb3JgICh3aGljaCBjYW4gYmUgYG51bGxgKSBhbmQgdGhlIHJlc3VsdCBvZlxuICAgICAqICAgdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uLiBUaGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgbmFtZSBvdGhlciB0YXNrcyBvblxuICAgICAqICAgd2hpY2ggdGhlIHRhc2sgaXMgZGVwZW5kZW50LCBhbmQgdGhlIHJlc3VsdHMgZnJvbSB0aG9zZSB0YXNrcyBhcmUgdGhlXG4gICAgICogICBhcmd1bWVudHMgb2YgdGhvc2UgcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gICAgICogdGhlIHRhc2tzIGhhdmUgYmVlbiBjb21wbGV0ZWQuIEl0IHJlY2VpdmVzIHRoZSBgZXJyYCBhcmd1bWVudCBpZiBhbnkgYHRhc2tzYFxuICAgICAqIHBhc3MgYW4gZXJyb3IgdG8gdGhlaXIgY2FsbGJhY2ssIGFuZCBhIGByZXN1bHRzYCBvYmplY3Qgd2l0aCBhbnkgY29tcGxldGVkXG4gICAgICogdGFzayByZXN1bHRzLCBzaW1pbGFyIHRvIGBhdXRvYC5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gIFRoZSBleGFtcGxlIGZyb20gYGF1dG9gIGNhbiBiZSByZXdyaXR0ZW4gYXMgZm9sbG93czpcbiAgICAgKiBhc3luYy5hdXRvSW5qZWN0KHtcbiAgICAgKiAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGdldCBzb21lIGRhdGFcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBtYWtlX2ZvbGRlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZm9sZGVyJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IGZ1bmN0aW9uKGdldF9kYXRhLCBtYWtlX2ZvbGRlciwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZW1haWxfbGluazogZnVuY3Rpb24od3JpdGVfZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgIC8vIHdyaXRlX2ZpbGUgY29udGFpbnMgdGhlIGZpbGVuYW1lIHJldHVybmVkIGJ5IHdyaXRlX2ZpbGUuXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOndyaXRlX2ZpbGUsICdlbWFpbCc6J3VzZXJAZXhhbXBsZS5jb20nfSk7XG4gICAgICogICAgIH1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlbWFpbF9saW5rID0gJywgcmVzdWx0cy5lbWFpbF9saW5rKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIElmIHlvdSBhcmUgdXNpbmcgYSBKUyBtaW5pZmllciB0aGF0IG1hbmdsZXMgcGFyYW1ldGVyIG5hbWVzLCBgYXV0b0luamVjdGBcbiAgICAgKiAvLyB3aWxsIG5vdCB3b3JrIHdpdGggcGxhaW4gZnVuY3Rpb25zLCBzaW5jZSB0aGUgcGFyYW1ldGVyIG5hbWVzIHdpbGwgYmVcbiAgICAgKiAvLyBjb2xsYXBzZWQgdG8gYSBzaW5nbGUgbGV0dGVyIGlkZW50aWZpZXIuICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB5b3UgY2FuXG4gICAgICogLy8gZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBuYW1lcyBvZiB0aGUgcGFyYW1ldGVycyB5b3VyIHRhc2sgZnVuY3Rpb24gbmVlZHNcbiAgICAgKiAvLyBpbiBhbiBhcnJheSwgc2ltaWxhciB0byBBbmd1bGFyLmpzIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgICAqXG4gICAgICogLy8gVGhpcyBzdGlsbCBoYXMgYW4gYWR2YW50YWdlIG92ZXIgcGxhaW4gYGF1dG9gLCBzaW5jZSB0aGUgcmVzdWx0cyBhIHRhc2tcbiAgICAgKiAvLyBkZXBlbmRzIG9uIGFyZSBzdGlsbCBzcHJlYWQgaW50byBhcmd1bWVudHMuXG4gICAgICogYXN5bmMuYXV0b0luamVjdCh7XG4gICAgICogICAgIC8vLi4uXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihnZXRfZGF0YSwgbWFrZV9mb2xkZXIsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHdyaXRlX2ZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOndyaXRlX2ZpbGUsICdlbWFpbCc6J3VzZXJAZXhhbXBsZS5jb20nfSk7XG4gICAgICogICAgIH1dXG4gICAgICogICAgIC8vLi4uXG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlcnIgPSAnLCBlcnIpO1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZW1haWxfbGluayA9ICcsIHJlc3VsdHMuZW1haWxfbGluayk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gYXV0b0luamVjdCh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG5ld1Rhc2tzID0ge307XG5cbiAgICAgICAgT2JqZWN0LmtleXModGFza3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHZhciB0YXNrRm4gPSB0YXNrc1trZXldO1xuICAgICAgICAgICAgdmFyIHBhcmFtcztcbiAgICAgICAgICAgIHZhciBmbklzQXN5bmMgPSBpc0FzeW5jKHRhc2tGbik7XG4gICAgICAgICAgICB2YXIgaGFzTm9EZXBzID1cbiAgICAgICAgICAgICAgICAoIWZuSXNBc3luYyAmJiB0YXNrRm4ubGVuZ3RoID09PSAxKSB8fFxuICAgICAgICAgICAgICAgIChmbklzQXN5bmMgJiYgdGFza0ZuLmxlbmd0aCA9PT0gMCk7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhc2tGbikpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBbLi4udGFza0ZuXTtcbiAgICAgICAgICAgICAgICB0YXNrRm4gPSBwYXJhbXMucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBuZXdUYXNrc1trZXldID0gcGFyYW1zLmNvbmNhdChwYXJhbXMubGVuZ3RoID4gMCA/IG5ld1Rhc2sgOiB0YXNrRm4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNOb0RlcHMpIHtcbiAgICAgICAgICAgICAgICAvLyBubyBkZXBlbmRlbmNpZXMsIHVzZSB0aGUgZnVuY3Rpb24gYXMtaXNcbiAgICAgICAgICAgICAgICBuZXdUYXNrc1trZXldID0gdGFza0ZuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcyh0YXNrRm4pO1xuICAgICAgICAgICAgICAgIGlmICgodGFza0ZuLmxlbmd0aCA9PT0gMCAmJiAhZm5Jc0FzeW5jKSAmJiBwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImF1dG9JbmplY3QgdGFzayBmdW5jdGlvbnMgcmVxdWlyZSBleHBsaWNpdCBwYXJhbWV0ZXJzLlwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgY2FsbGJhY2sgcGFyYW1cbiAgICAgICAgICAgICAgICBpZiAoIWZuSXNBc3luYykgcGFyYW1zLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgbmV3VGFza3Nba2V5XSA9IHBhcmFtcy5jb25jYXQobmV3VGFzayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld1Rhc2socmVzdWx0cywgdGFza0NiKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5ld0FyZ3MgPSBwYXJhbXMubWFwKG5hbWUgPT4gcmVzdWx0c1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgbmV3QXJncy5wdXNoKHRhc2tDYik7XG4gICAgICAgICAgICAgICAgd3JhcEFzeW5jKHRhc2tGbikoLi4ubmV3QXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhdXRvKG5ld1Rhc2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlIGRvdWJseSBsaW5rZWQgbGlzdCAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRG91Ymx5X2xpbmtlZF9saXN0KSBpbXBsZW1lbnRhdGlvblxuICAgIC8vIHVzZWQgZm9yIHF1ZXVlcy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIG5vZGUgcHJvdmlkZWQgYnkgdGhlIHVzZXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgLy8gdG8gYWRqdXN0IHRoZSBuZXh0IGFuZCBsYXN0IHByb3BlcnRpZXMuIFdlIGltcGxlbWVudCBvbmx5IHRoZSBtaW5pbWFsIGZ1bmN0aW9uYWxpdHlcbiAgICAvLyBmb3IgcXVldWUgc3VwcG9ydC5cbiAgICBjbGFzcyBETEwge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVMaW5rKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnByZXYpIG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBpZiAobm9kZS5uZXh0KSBub2RlLm5leHQucHJldiA9IG5vZGUucHJldjtcbiAgICAgICAgICAgIGVsc2UgdGhpcy50YWlsID0gbm9kZS5wcmV2O1xuXG4gICAgICAgICAgICBub2RlLnByZXYgPSBub2RlLm5leHQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggLT0gMTtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgZW1wdHkgKCkge1xuICAgICAgICAgICAgd2hpbGUodGhpcy5oZWFkKSB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEFmdGVyKG5vZGUsIG5ld05vZGUpIHtcbiAgICAgICAgICAgIG5ld05vZGUucHJldiA9IG5vZGU7XG4gICAgICAgICAgICBuZXdOb2RlLm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBpZiAobm9kZS5uZXh0KSBub2RlLm5leHQucHJldiA9IG5ld05vZGU7XG4gICAgICAgICAgICBlbHNlIHRoaXMudGFpbCA9IG5ld05vZGU7XG4gICAgICAgICAgICBub2RlLm5leHQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEJlZm9yZShub2RlLCBuZXdOb2RlKSB7XG4gICAgICAgICAgICBuZXdOb2RlLnByZXYgPSBub2RlLnByZXY7XG4gICAgICAgICAgICBuZXdOb2RlLm5leHQgPSBub2RlO1xuICAgICAgICAgICAgaWYgKG5vZGUucHJldikgbm9kZS5wcmV2Lm5leHQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgbm9kZS5wcmV2ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICB1bnNoaWZ0KG5vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhlYWQpIHRoaXMuaW5zZXJ0QmVmb3JlKHRoaXMuaGVhZCwgbm9kZSk7XG4gICAgICAgICAgICBlbHNlIHNldEluaXRpYWwodGhpcywgbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRhaWwpIHRoaXMuaW5zZXJ0QWZ0ZXIodGhpcy50YWlsLCBub2RlKTtcbiAgICAgICAgICAgIGVsc2Ugc2V0SW5pdGlhbCh0aGlzLCBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNoaWZ0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhZCAmJiB0aGlzLnJlbW92ZUxpbmsodGhpcy5oZWFkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvcCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRhaWwgJiYgdGhpcy5yZW1vdmVMaW5rKHRoaXMudGFpbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0b0FycmF5KCkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi50aGlzXVxuICAgICAgICB9XG5cbiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAgICAgICAgIHZhciBjdXIgPSB0aGlzLmhlYWQ7XG4gICAgICAgICAgICB3aGlsZSAoY3VyKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgY3VyLmRhdGE7XG4gICAgICAgICAgICAgICAgY3VyID0gY3VyLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmUgKHRlc3RGbikge1xuICAgICAgICAgICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XG4gICAgICAgICAgICB3aGlsZShjdXJyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHtuZXh0fSA9IGN1cnI7XG4gICAgICAgICAgICAgICAgaWYgKHRlc3RGbihjdXJyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmsoY3Vycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnIgPSBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRJbml0aWFsKGRsbCwgbm9kZSkge1xuICAgICAgICBkbGwubGVuZ3RoID0gMTtcbiAgICAgICAgZGxsLmhlYWQgPSBkbGwudGFpbCA9IG5vZGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcXVldWUkMSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfd29ya2VyID0gd3JhcEFzeW5jKHdvcmtlcik7XG4gICAgICAgIHZhciBudW1SdW5uaW5nID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHtcbiAgICAgICAgICAgIGVycm9yOiBbXSxcbiAgICAgICAgICAgIGRyYWluOiBbXSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogW10sXG4gICAgICAgICAgICB1bnNhdHVyYXRlZDogW10sXG4gICAgICAgICAgICBlbXB0eTogW11cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBvbiAoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGV2ZW50c1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uY2UgKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBbmRSZW1vdmUgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIG9mZihldmVudCwgaGFuZGxlQW5kUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGV2ZW50c1tldmVudF0ucHVzaChoYW5kbGVBbmRSZW1vdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb2ZmIChldmVudCwgaGFuZGxlcikge1xuICAgICAgICAgICAgaWYgKCFldmVudCkgcmV0dXJuIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaChldiA9PiBldmVudHNbZXZdID0gW10pXG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHJldHVybiBldmVudHNbZXZlbnRdID0gW11cbiAgICAgICAgICAgIGV2ZW50c1tldmVudF0gPSBldmVudHNbZXZlbnRdLmZpbHRlcihldiA9PiBldiAhPT0gaGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyIChldmVudCwgLi4uYXJncykge1xuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XS5mb3JFYWNoKGhhbmRsZXIgPT4gaGFuZGxlciguLi5hcmdzKSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcHJvY2Vzc2luZ1NjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KGRhdGEsIGluc2VydEF0RnJvbnQsIHJlamVjdE9uRXJyb3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Rhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB2YXIgcmVzLCByZWo7XG4gICAgICAgICAgICBmdW5jdGlvbiBwcm9taXNlQ2FsbGJhY2sgKGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yLCBsZXQgdGhlIGdsb2JhbCBlcnJvciBoYW5kbGVyXG4gICAgICAgICAgICAgICAgLy8gZGVhbCB3aXRoIGl0XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdE9uRXJyb3IgPyByZWooZXJyKSA6IHJlcygpXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHJldHVybiByZXMoYXJnc1swXSlcbiAgICAgICAgICAgICAgICByZXMoYXJncyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpdGVtID0gcS5fY3JlYXRlVGFza0l0ZW0oXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICByZWplY3RPbkVycm9yID8gcHJvbWlzZUNhbGxiYWNrIDpcbiAgICAgICAgICAgICAgICAgICAgKGNhbGxiYWNrIHx8IHByb21pc2VDYWxsYmFjaylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChpbnNlcnRBdEZyb250KSB7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzaW5nU2NoZWR1bGVkKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVqZWN0T25FcnJvciB8fCAhY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICByZWogPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDQih0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBudW1SdW5uaW5nIC09IDE7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRhc2tzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHdvcmtlcnNMaXN0LmluZGV4T2YodGFzayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0YXNrLmNhbGxiYWNrKGVyciwgLi4uYXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdlcnJvcicsIGVyciwgdGFzay5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChudW1SdW5uaW5nIDw9IChxLmNvbmN1cnJlbmN5IC0gcS5idWZmZXIpICkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCd1bnNhdHVyYXRlZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdkcmFpbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBxLnByb2Nlc3MoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfbWF5YmVEcmFpbihkYXRhKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSQxKCgpID0+IHRyaWdnZXIoJ2RyYWluJykpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50TWV0aG9kID0gKG5hbWUpID0+IChoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvbmNlKG5hbWUsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZihuYW1lKTtcbiAgICAgICAgICAgIG9uKG5hbWUsIGhhbmRsZXIpO1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIF90YXNrczogbmV3IERMTCgpLFxuICAgICAgICAgICAgX2NyZWF0ZVRhc2tJdGVtIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBxLl90YXNrc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgYnVmZmVyOiBjb25jdXJyZW5jeSAvIDQsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfbWF5YmVEcmFpbihkYXRhKSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcChkYXR1bSA9PiBfaW5zZXJ0KGRhdHVtLCBmYWxzZSwgZmFsc2UsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnNlcnQoZGF0YSwgZmFsc2UsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHVzaEFzeW5jIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfbWF5YmVEcmFpbihkYXRhKSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcChkYXR1bSA9PiBfaW5zZXJ0KGRhdHVtLCBmYWxzZSwgdHJ1ZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCBmYWxzZSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGwgKCkge1xuICAgICAgICAgICAgICAgIG9mZigpO1xuICAgICAgICAgICAgICAgIHEuX3Rhc2tzLmVtcHR5KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdCAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX21heWJlRHJhaW4oZGF0YSkpIHJldHVyblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoZGF0dW0gPT4gX2luc2VydChkYXR1bSwgdHJ1ZSwgZmFsc2UsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnNlcnQoZGF0YSwgdHJ1ZSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0QXN5bmMgKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXliZURyYWluKGRhdGEpKSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGRhdHVtID0+IF9pbnNlcnQoZGF0dW0sIHRydWUsIHRydWUsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnNlcnQoZGF0YSwgdHJ1ZSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZSAodGVzdEZuKSB7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MucmVtb3ZlKHRlc3RGbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzcyAoKSB7XG4gICAgICAgICAgICAgICAgLy8gQXZvaWQgdHJ5aW5nIHRvIHN0YXJ0IHRvbyBtYW55IHByb2Nlc3Npbmcgb3BlcmF0aW9ucy4gVGhpcyBjYW4gb2NjdXJcbiAgICAgICAgICAgICAgICAvLyB3aGVuIGNhbGxiYWNrcyByZXNvbHZlIHN5bmNocm9ub3VzbHkgKCMxMjY3KS5cbiAgICAgICAgICAgICAgICBpZiAoaXNQcm9jZXNzaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXNQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB3aGlsZSghcS5wYXVzZWQgJiYgbnVtUnVubmluZyA8IHEuY29uY3VycmVuY3kgJiYgcS5fdGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2tzID0gW10sIGRhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBxLl90YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLnBheWxvYWQpIGwgPSBNYXRoLm1pbihsLCBxLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBxLl90YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gobm9kZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG51bVJ1bm5pbmcgKz0gMTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocS5fdGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdlbXB0eScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVJ1bm5pbmcgPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3NhdHVyYXRlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGNiID0gb25seU9uY2UoX2NyZWF0ZUNCKHRhc2tzKSk7XG4gICAgICAgICAgICAgICAgICAgIF93b3JrZXIoZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGggKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLl90YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZyAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bVJ1bm5pbmc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd29ya2Vyc0xpc3QgKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLl90YXNrcy5sZW5ndGggKyBudW1SdW5uaW5nID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEocS5wcm9jZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gZGVmaW5lIHRoZXNlIGFzIGZpeGVkIHByb3BlcnRpZXMsIHNvIHBlb3BsZSBnZXQgdXNlZnVsIGVycm9ycyB3aGVuIHVwZGF0aW5nXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHEsIHtcbiAgICAgICAgICAgIHNhdHVyYXRlZDoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ3NhdHVyYXRlZCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zYXR1cmF0ZWQ6IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCd1bnNhdHVyYXRlZCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW1wdHk6IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCdlbXB0eScpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZHJhaW46IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCdkcmFpbicpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCdlcnJvcicpXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBjYXJnb2Agb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwYXlsb2FkLiBUYXNrcyBhZGRlZCB0byB0aGVcbiAgICAgKiBjYXJnbyB3aWxsIGJlIHByb2Nlc3NlZCBhbHRvZ2V0aGVyICh1cCB0byB0aGUgYHBheWxvYWRgIGxpbWl0KS4gSWYgdGhlXG4gICAgICogYHdvcmtlcmAgaXMgaW4gcHJvZ3Jlc3MsIHRoZSB0YXNrIGlzIHF1ZXVlZCB1bnRpbCBpdCBiZWNvbWVzIGF2YWlsYWJsZS4gT25jZVxuICAgICAqIHRoZSBgd29ya2VyYCBoYXMgY29tcGxldGVkIHNvbWUgdGFza3MsIGVhY2ggY2FsbGJhY2sgb2YgdGhvc2UgdGFza3MgaXNcbiAgICAgKiBjYWxsZWQuIENoZWNrIG91dCBbdGhlc2VdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vNmJiZDM2ZjRjZjViMzVhMGYxMWE5NmRjZDJlOTc3MTFmZmMyZmIzNy82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDM4MmY2MjYyNjMzMDYzNjY2MjMwMmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM5MzczNDY2MmQzMzMzMzkzNzYzMzYzNDY0NjMzODM1MzgyZTY3Njk2NikgW2FuaW1hdGlvbnNdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vZjQ4MTBlMDBlMWM1ZjVmOGFkZGJlM2U5ZjQ5MDY0ZmQ1ZDEwMjY5OS82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDMxMmYzODM0NjMzOTMyMzAzNjM2MmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM4MzEzNDY2MmQzOTY0MzM2NDMwMzIzNDMxMzM2MjY2NjQyZTY3Njk2NilcbiAgICAgKiBmb3IgaG93IGBjYXJnb2AgYW5kIGBxdWV1ZWAgd29yay5cbiAgICAgKlxuICAgICAqIFdoaWxlIFtgcXVldWVgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9IHBhc3NlcyBvbmx5IG9uZSB0YXNrIHRvIG9uZSBvZiBhIGdyb3VwIG9mIHdvcmtlcnNcbiAgICAgKiBhdCBhIHRpbWUsIGNhcmdvIHBhc3NlcyBhbiBhcnJheSBvZiB0YXNrcyB0byBhIHNpbmdsZSB3b3JrZXIsIHJlcGVhdGluZ1xuICAgICAqIHdoZW4gdGhlIHdvcmtlciBpcyBmaW5pc2hlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhcmdvXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYW4gYXJyYXlcbiAgICAgKiBvZiBxdWV1ZWQgdGFza3MuIEludm9rZWQgd2l0aCBgKHRhc2tzLCBjYWxsYmFjaylgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcGF5bG9hZD1JbmZpbml0eV0gLSBBbiBvcHRpb25hbCBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nXG4gICAgICogaG93IG1hbnkgdGFza3Mgc2hvdWxkIGJlIHByb2Nlc3NlZCBwZXIgcm91bmQ7IGlmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IGlzXG4gICAgICogdW5saW1pdGVkLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgY2FyZ28gb2JqZWN0IHRvIG1hbmFnZSB0aGUgdGFza3MuIENhbGxiYWNrcyBjYW5cbiAgICAgKiBhdHRhY2hlZCBhcyBjZXJ0YWluIHByb3BlcnRpZXMgdG8gbGlzdGVuIGZvciBzcGVjaWZpYyBldmVudHMgZHVyaW5nIHRoZVxuICAgICAqIGxpZmVjeWNsZSBvZiB0aGUgY2FyZ28gYW5kIGlubmVyIHF1ZXVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBjcmVhdGUgYSBjYXJnbyBvYmplY3Qgd2l0aCBwYXlsb2FkIDJcbiAgICAgKiB2YXIgY2FyZ28gPSBhc3luYy5jYXJnbyhmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZm9yICh2YXIgaT0wOyBpPHRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaGVsbG8gJyArIHRhc2tzW2ldLm5hbWUpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhbGxiYWNrKCk7XG4gICAgICogfSwgMik7XG4gICAgICpcbiAgICAgKiAvLyBhZGQgc29tZSBpdGVtc1xuICAgICAqIGNhcmdvLnB1c2goe25hbWU6ICdmb28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGZvbycpO1xuICAgICAqIH0pO1xuICAgICAqIGNhcmdvLnB1c2goe25hbWU6ICdiYXInfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJhcicpO1xuICAgICAqIH0pO1xuICAgICAqIGF3YWl0IGNhcmdvLnB1c2goe25hbWU6ICdiYXonfSk7XG4gICAgICogY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYmF6Jyk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FyZ28kMSh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXVlJDEod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGNhcmdvUXVldWVgIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgcGF5bG9hZC4gVGFza3MgYWRkZWQgdG8gdGhlXG4gICAgICogY2FyZ29RdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCB0b2dldGhlciAodXAgdG8gdGhlIGBwYXlsb2FkYCBsaW1pdCkgaW4gYGNvbmN1cnJlbmN5YCBwYXJhbGxlbCB3b3JrZXJzLlxuICAgICAqIElmIHRoZSBhbGwgYHdvcmtlcnNgIGFyZSBpbiBwcm9ncmVzcywgdGhlIHRhc2sgaXMgcXVldWVkIHVudGlsIG9uZSBiZWNvbWVzIGF2YWlsYWJsZS4gT25jZVxuICAgICAqIGEgYHdvcmtlcmAgaGFzIGNvbXBsZXRlZCBzb21lIHRhc2tzLCBlYWNoIGNhbGxiYWNrIG9mIHRob3NlIHRhc2tzIGlzXG4gICAgICogY2FsbGVkLiBDaGVjayBvdXQgW3RoZXNlXShodHRwczovL2NhbW8uZ2l0aHVidXNlcmNvbnRlbnQuY29tLzZiYmQzNmY0Y2Y1YjM1YTBmMTFhOTZkY2QyZTk3NzExZmZjMmZiMzcvNjg3NDc0NzA3MzNhMmYyZjY2MmU2MzZjNmY3NTY0MmU2NzY5NzQ2ODc1NjIyZTYzNmY2ZDJmNjE3MzczNjU3NDczMmYzMTM2MzczNjM4MzczMTJmMzYzODMxMzAzODJmNjI2MjYzMzA2MzY2NjIzMDJkMzU2NjMyMzkyZDMxMzE2NTMyMmQzOTM3MzQ2NjJkMzMzMzM5Mzc2MzM2MzQ2NDYzMzgzNTM4MmU2NzY5NjYpIFthbmltYXRpb25zXShodHRwczovL2NhbW8uZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Y0ODEwZTAwZTFjNWY1ZjhhZGRiZTNlOWY0OTA2NGZkNWQxMDI2OTkvNjg3NDc0NzA3MzNhMmYyZjY2MmU2MzZjNmY3NTY0MmU2NzY5NzQ2ODc1NjIyZTYzNmY2ZDJmNjE3MzczNjU3NDczMmYzMTM2MzczNjM4MzczMTJmMzYzODMxMzAzMTJmMzgzNDYzMzkzMjMwMzYzNjJkMzU2NjMyMzkyZDMxMzE2NTMyMmQzODMxMzQ2NjJkMzk2NDMzNjQzMDMyMzQzMTMzNjI2NjY0MmU2NzY5NjYpXG4gICAgICogZm9yIGhvdyBgY2FyZ29gIGFuZCBgcXVldWVgIHdvcmsuXG4gICAgICpcbiAgICAgKiBXaGlsZSBbYHF1ZXVlYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfSBwYXNzZXMgb25seSBvbmUgdGFzayB0byBvbmUgb2YgYSBncm91cCBvZiB3b3JrZXJzXG4gICAgICogYXQgYSB0aW1lLCBhbmQgW2BjYXJnb2Bde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jYXJnb30gcGFzc2VzIGFuIGFycmF5IG9mIHRhc2tzIHRvIGEgc2luZ2xlIHdvcmtlcixcbiAgICAgKiB0aGUgY2FyZ29RdWV1ZSBwYXNzZXMgYW4gYXJyYXkgb2YgdGFza3MgdG8gbXVsdGlwbGUgcGFyYWxsZWwgd29ya2Vycy5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhcmdvUXVldWVcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5xdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfVxuICAgICAqIEBzZWUgW2FzeW5jLmNhcmdvXXtAbGluayBtb2R1bGU6Q29udHJvbEZMb3cuY2FyZ299XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gd29ya2VyIC0gQW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIGFuIGFycmF5XG4gICAgICogb2YgcXVldWVkIHRhc2tzLiBJbnZva2VkIHdpdGggYCh0YXNrcywgY2FsbGJhY2spYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbmN5PTFdIC0gQW4gYGludGVnZXJgIGZvciBkZXRlcm1pbmluZyBob3cgbWFueVxuICAgICAqIGB3b3JrZXJgIGZ1bmN0aW9ucyBzaG91bGQgYmUgcnVuIGluIHBhcmFsbGVsLiAgSWYgb21pdHRlZCwgdGhlIGNvbmN1cnJlbmN5XG4gICAgICogZGVmYXVsdHMgdG8gYDFgLiAgSWYgdGhlIGNvbmN1cnJlbmN5IGlzIGAwYCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcGF5bG9hZD1JbmZpbml0eV0gLSBBbiBvcHRpb25hbCBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nXG4gICAgICogaG93IG1hbnkgdGFza3Mgc2hvdWxkIGJlIHByb2Nlc3NlZCBwZXIgcm91bmQ7IGlmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IGlzXG4gICAgICogdW5saW1pdGVkLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgY2FyZ29RdWV1ZSBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gQ2FsbGJhY2tzIGNhblxuICAgICAqIGF0dGFjaGVkIGFzIGNlcnRhaW4gcHJvcGVydGllcyB0byBsaXN0ZW4gZm9yIHNwZWNpZmljIGV2ZW50cyBkdXJpbmcgdGhlXG4gICAgICogbGlmZWN5Y2xlIG9mIHRoZSBjYXJnb1F1ZXVlIGFuZCBpbm5lciBxdWV1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gY3JlYXRlIGEgY2FyZ29RdWV1ZSBvYmplY3Qgd2l0aCBwYXlsb2FkIDIgYW5kIGNvbmN1cnJlbmN5IDJcbiAgICAgKiB2YXIgY2FyZ29RdWV1ZSA9IGFzeW5jLmNhcmdvUXVldWUoZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZvciAodmFyIGk9MDsgaTx0YXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ2hlbGxvICcgKyB0YXNrc1tpXS5uYW1lKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYWxsYmFjaygpO1xuICAgICAqIH0sIDIsIDIpO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXNcbiAgICAgKiBjYXJnb1F1ZXVlLnB1c2goe25hbWU6ICdmb28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGZvbycpO1xuICAgICAqIH0pO1xuICAgICAqIGNhcmdvUXVldWUucHVzaCh7bmFtZTogJ2Jhcid9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYmFyJyk7XG4gICAgICogfSk7XG4gICAgICogY2FyZ29RdWV1ZS5wdXNoKHtuYW1lOiAnYmF6J30sIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXonKTtcbiAgICAgKiB9KTtcbiAgICAgKiBjYXJnb1F1ZXVlLnB1c2goe25hbWU6ICdib28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJvbycpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhcmdvKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXVlJDEod29ya2VyLCBjb25jdXJyZW5jeSwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVkdWNlcyBgY29sbGAgaW50byBhIHNpbmdsZSB2YWx1ZSB1c2luZyBhbiBhc3luYyBgaXRlcmF0ZWVgIHRvIHJldHVybiBlYWNoXG4gICAgICogc3VjY2Vzc2l2ZSBzdGVwLiBgbWVtb2AgaXMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi4gVGhpcyBmdW5jdGlvblxuICAgICAqIG9ubHkgb3BlcmF0ZXMgaW4gc2VyaWVzLlxuICAgICAqXG4gICAgICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGl0IG1heSBtYWtlIHNlbnNlIHRvIHNwbGl0IGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uXG4gICAgICogaW50byBhIHBhcmFsbGVsIG1hcCwgYW5kIHRoZW4gdXNlIHRoZSBub3JtYWwgYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG9uIHRoZVxuICAgICAqIHJlc3VsdHMuIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHNpdHVhdGlvbnMgd2hlcmUgZWFjaCBzdGVwIGluIHRoZSByZWR1Y3Rpb25cbiAgICAgKiBuZWVkcyB0byBiZSBhc3luYzsgaWYgeW91IGNhbiBnZXQgdGhlIGRhdGEgYmVmb3JlIHJlZHVjaW5nIGl0LCB0aGVuIGl0J3NcbiAgICAgKiBwcm9iYWJseSBhIGdvb2QgaWRlYSB0byBkbyBzby5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlZHVjZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBpbmplY3RcbiAgICAgKiBAYWxpYXMgZm9sZGxcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Kn0gbWVtbyAtIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSByZWR1Y3Rpb24uXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gYXBwbGllZCB0byBlYWNoIGl0ZW0gaW4gdGhlXG4gICAgICogYXJyYXkgdG8gcHJvZHVjZSB0aGUgbmV4dCBzdGVwIGluIHRoZSByZWR1Y3Rpb24uXG4gICAgICogVGhlIGBpdGVyYXRlZWAgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIG5leHQgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBJZiB0aGUgaXRlcmF0ZWUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsIHRoZSByZWR1Y3Rpb24gaXMgc3RvcHBlZCBhbmQgdGhlXG4gICAgICogbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAgICAgKiBJbnZva2VkIHdpdGggKG1lbW8sIGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCBpcyB0aGUgcmVkdWNlZCB2YWx1ZS4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZmlsZTEudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDEwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUyLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAyMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMy50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMzAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTQudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlTGlzdCA9IFsnZmlsZTEudHh0JywnZmlsZTIudHh0JywnZmlsZTMudHh0J107XG4gICAgICogY29uc3Qgd2l0aE1pc3NpbmdGaWxlTGlzdCA9IFsnZmlsZTEudHh0JywnZmlsZTIudHh0JywnZmlsZTMudHh0JywgJ2ZpbGU0LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlc1xuICAgICAqIC8vIGZpbGUgc2l6ZSBpcyBhZGRlZCB0byB0aGUgbWVtb2l6ZWQgdmFsdWUsIHRoZW4gcmV0dXJuZWRcbiAgICAgKiBmdW5jdGlvbiBnZXRGaWxlU2l6ZUluQnl0ZXMobWVtbywgZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdChmaWxlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIG1lbW8gKyBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5yZWR1Y2UoZmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyA2MDAwXG4gICAgICogICAgICAgICAvLyB3aGljaCBpcyB0aGUgc3VtIG9mIHRoZSBmaWxlIHNpemVzIG9mIHRoZSB0aHJlZSBmaWxlc1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLnJlZHVjZSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5yZWR1Y2UoZmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gNjAwMFxuICAgICAqICAgICAvLyB3aGljaCBpcyB0aGUgc3VtIG9mIHRoZSBmaWxlIHNpemVzIG9mIHRoZSB0aHJlZSBmaWxlc1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5yZWR1Y2Uod2l0aE1pc3NpbmdGaWxlTGlzdCwgMCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMucmVkdWNlKGZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIDYwMDBcbiAgICAgKiAgICAgICAgIC8vIHdoaWNoIGlzIHRoZSBzdW0gb2YgdGhlIGZpbGUgc2l6ZXMgb2YgdGhlIHRocmVlIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLnJlZHVjZSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZHVjZShjb2xsLCBtZW1vLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBlYWNoT2ZTZXJpZXMkMShjb2xsLCAoeCwgaSwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBfaXRlcmF0ZWUobWVtbywgeCwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVyciA9PiBjYWxsYmFjayhlcnIsIG1lbW8pKTtcbiAgICB9XG4gICAgdmFyIHJlZHVjZSQxID0gYXdhaXRpZnkocmVkdWNlLCA0KTtcblxuICAgIC8qKlxuICAgICAqIFZlcnNpb24gb2YgdGhlIGNvbXBvc2UgZnVuY3Rpb24gdGhhdCBpcyBtb3JlIG5hdHVyYWwgdG8gcmVhZC4gRWFjaCBmdW5jdGlvblxuICAgICAqIGNvbnN1bWVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzIGZ1bmN0aW9uLiBJdCBpcyB0aGUgZXF1aXZhbGVudCBvZlxuICAgICAqIFtjb21wb3NlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuY29tcG9zZX0gd2l0aCB0aGUgYXJndW1lbnRzIHJldmVyc2VkLlxuICAgICAqXG4gICAgICogRWFjaCBmdW5jdGlvbiBpcyBleGVjdXRlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY29tcG9zZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbmFtZSBzZXFcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5jb21wb3NlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuY29tcG9zZX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHsuLi5Bc3luY0Z1bmN0aW9ufSBmdW5jdGlvbnMgLSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9ucyB0byBjb21wb3NlXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHRoYXQgY29tcG9zZXMgdGhlIGBmdW5jdGlvbnNgIGluIG9yZGVyXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFJlcXVpcmVzIGxvZGFzaCAob3IgdW5kZXJzY29yZSksIGV4cHJlc3MzIGFuZCBkcmVzZW5kZSdzIG9ybTIuXG4gICAgICogLy8gUGFydCBvZiBhbiBhcHAsIHRoYXQgZmV0Y2hlcyBjYXRzIG9mIHRoZSBsb2dnZWQgdXNlci5cbiAgICAgKiAvLyBUaGlzIGV4YW1wbGUgdXNlcyBgc2VxYCBmdW5jdGlvbiB0byBhdm9pZCBvdmVybmVzdGluZyBhbmQgZXJyb3JcbiAgICAgKiAvLyBoYW5kbGluZyBjbHV0dGVyLlxuICAgICAqIGFwcC5nZXQoJy9jYXRzJywgZnVuY3Rpb24ocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICAgKiAgICAgdmFyIFVzZXIgPSByZXF1ZXN0Lm1vZGVscy5Vc2VyO1xuICAgICAqICAgICBhc3luYy5zZXEoXG4gICAgICogICAgICAgICBVc2VyLmdldC5iaW5kKFVzZXIpLCAgLy8gJ1VzZXIuZ2V0JyBoYXMgc2lnbmF0dXJlIChpZCwgY2FsbGJhY2soZXJyLCBkYXRhKSlcbiAgICAgKiAgICAgICAgIGZ1bmN0aW9uKHVzZXIsIGZuKSB7XG4gICAgICogICAgICAgICAgICAgdXNlci5nZXRDYXRzKGZuKTsgICAgICAvLyAnZ2V0Q2F0cycgaGFzIHNpZ25hdHVyZSAoY2FsbGJhY2soZXJyLCBkYXRhKSlcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgKShyZXEuc2Vzc2lvbi51c2VyX2lkLCBmdW5jdGlvbiAoZXJyLCBjYXRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqICAgICAgICAgICAgIHJlc3BvbnNlLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6IGVyci5tZXNzYWdlIH0pO1xuICAgICAqICAgICAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgICAgICByZXNwb25zZS5qc29uKHsgc3RhdHVzOiAnb2snLCBtZXNzYWdlOiAnQ2F0cyBmb3VuZCcsIGRhdGE6IGNhdHMgfSk7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH0pO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcSguLi5mdW5jdGlvbnMpIHtcbiAgICAgICAgdmFyIF9mdW5jdGlvbnMgPSBmdW5jdGlvbnMubWFwKHdyYXBBc3luYyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNiID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYiA9IHByb21pc2VDYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZWR1Y2UkMShfZnVuY3Rpb25zLCBhcmdzLCAobmV3YXJncywgZm4sIGl0ZXJDYikgPT4ge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KChlcnIsIC4uLm5leHRhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJDYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVyciwgcmVzdWx0cykgPT4gY2IoZXJyLCAuLi5yZXN1bHRzKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjYltQUk9NSVNFX1NZTUJPTF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gd2hpY2ggaXMgYSBjb21wb3NpdGlvbiBvZiB0aGUgcGFzc2VkIGFzeW5jaHJvbm91c1xuICAgICAqIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiBjb25zdW1lcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0XG4gICAgICogZm9sbG93cy4gQ29tcG9zaW5nIGZ1bmN0aW9ucyBgZigpYCwgYGcoKWAsIGFuZCBgaCgpYCB3b3VsZCBwcm9kdWNlIHRoZSByZXN1bHRcbiAgICAgKiBvZiBgZihnKGgoKSkpYCwgb25seSB0aGlzIHZlcnNpb24gdXNlcyBjYWxsYmFja3MgdG8gb2J0YWluIHRoZSByZXR1cm4gdmFsdWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIGxhc3QgYXJndW1lbnQgdG8gdGhlIGNvbXBvc2VkIGZ1bmN0aW9uIGlzIG5vdCBhIGZ1bmN0aW9uLCBhIHByb21pc2VcbiAgICAgKiBpcyByZXR1cm5lZCB3aGVuIHlvdSBjYWxsIGl0LlxuICAgICAqXG4gICAgICogRWFjaCBmdW5jdGlvbiBpcyBleGVjdXRlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY29tcG9zZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb21wb3NlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7Li4uQXN5bmNGdW5jdGlvbn0gZnVuY3Rpb25zIC0gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbnMgdG8gY29tcG9zZVxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2VkXG4gICAgICogYXN5bmNocm9ub3VzIGBmdW5jdGlvbnNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGFkZDEobiwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBuICsgMSk7XG4gICAgICogICAgIH0sIDEwKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBtdWwzKG4sIGNhbGxiYWNrKSB7XG4gICAgICogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgbiAqIDMpO1xuICAgICAqICAgICB9LCAxMCk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGFkZDFtdWwzID0gYXN5bmMuY29tcG9zZShtdWwzLCBhZGQxKTtcbiAgICAgKiBhZGQxbXVsMyg0LCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgMTVcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wb3NlKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHNlcSguLi5hcmdzLnJldmVyc2UoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcExpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB0cmFuc2Zvcm1lZCBpdGVtLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyBhbiBhcnJheSBvZiB0aGVcbiAgICAgKiB0cmFuc2Zvcm1lZCBpdGVtcyBmcm9tIHRoZSBgY29sbGAuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBMaW1pdCAoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2FzeW5jTWFwKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBtYXBMaW1pdCQxID0gYXdhaXRpZnkobWFwTGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2Bjb25jYXRgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuY29uY2F0fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbmNhdExpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuY29uY2F0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuY29uY2F0fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQGFsaWFzIGZsYXRNYXBMaW1pdFxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLFxuICAgICAqIHdoaWNoIHNob3VsZCB1c2UgYW4gYXJyYXkgYXMgaXRzIHJlc3VsdC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gYXJyYXlcbiAgICAgKiBjb250YWluaW5nIHRoZSBjb25jYXRlbmF0ZWQgcmVzdWx0cyBvZiB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbi4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMgQSBQcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25jYXRMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICByZXR1cm4gbWFwTGltaXQkMShjb2xsLCBsaW1pdCwgKHZhbCwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBfaXRlcmF0ZWUodmFsLCAoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyQ2IoZXJyLCBhcmdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAoZXJyLCBtYXBSZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcFJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwUmVzdWx0c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KC4uLm1hcFJlc3VsdHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBjb25jYXRMaW1pdCQxID0gYXdhaXRpZnkoY29uY2F0TGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyBgaXRlcmF0ZWVgIHRvIGVhY2ggaXRlbSBpbiBgY29sbGAsIGNvbmNhdGVuYXRpbmcgdGhlIHJlc3VsdHMuIFJldHVybnNcbiAgICAgKiB0aGUgY29uY2F0ZW5hdGVkIGxpc3QuIFRoZSBgaXRlcmF0ZWVgcyBhcmUgY2FsbGVkIGluIHBhcmFsbGVsLCBhbmQgdGhlXG4gICAgICogcmVzdWx0cyBhcmUgY29uY2F0ZW5hdGVkIGFzIHRoZXkgcmV0dXJuLiBUaGUgcmVzdWx0cyBhcnJheSB3aWxsIGJlIHJldHVybmVkIGluXG4gICAgICogdGhlIG9yaWdpbmFsIG9yZGVyIG9mIGBjb2xsYCBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb25jYXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBhbGlhcyBmbGF0TWFwXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYCxcbiAgICAgKiB3aGljaCBzaG91bGQgdXNlIGFuIGFycmF5IGFzIGl0cyByZXN1bHQuIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5XG4gICAgICogY29udGFpbmluZyB0aGUgY29uY2F0ZW5hdGVkIHJlc3VsdHMgb2YgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKiAvLyBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBsZXQgZGlyZWN0b3J5TGlzdCA9IFsnZGlyMScsJ2RpcjInLCdkaXIzJ107XG4gICAgICogbGV0IHdpdGhNaXNzaW5nRGlyZWN0b3J5TGlzdCA9IFsnZGlyMScsJ2RpcjInLCdkaXIzJywgJ2RpcjQnXTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmNvbmNhdChkaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgIC8vIFsgJ2ZpbGUxLnR4dCcsICdmaWxlMi50eHQnLCAnZmlsZTMudHh0JywgJ2ZpbGU0LnR4dCcsIGZpbGU1LnR4dCBdXG4gICAgICogICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5jb25jYXQod2l0aE1pc3NpbmdEaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgICAgIC8vIHNpbmNlIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmNvbmNhdChkaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyKVxuICAgICAqIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gWyAnZmlsZTEudHh0JywgJ2ZpbGUyLnR4dCcsICdmaWxlMy50eHQnLCAnZmlsZTQudHh0JywgZmlsZTUudHh0IF1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMuY29uY2F0KHdpdGhNaXNzaW5nRGlyZWN0b3J5TGlzdCwgZnMucmVhZGRpcilcbiAgICAgKiAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgLy8gc2luY2UgZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLmNvbmNhdChkaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gWyAnZmlsZTEudHh0JywgJ2ZpbGUyLnR4dCcsICdmaWxlMy50eHQnLCAnZmlsZTQudHh0JywgZmlsZTUudHh0IF1cbiAgICAgKiAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLmNvbmNhdCh3aXRoTWlzc2luZ0RpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgICAgICAvLyBzaW5jZSBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25jYXQoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBjb25jYXRMaW1pdCQxKGNvbGwsIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBjb25jYXQkMSA9IGF3YWl0aWZ5KGNvbmNhdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGNvbmNhdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5jb25jYXR9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbmNhdFNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmNvbmNhdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmNvbmNhdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBhbGlhcyBmbGF0TWFwU2VyaWVzXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYW4gYXJyYXkgYW4gYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyBhbiBhcnJheVxuICAgICAqIGNvbnRhaW5pbmcgdGhlIGNvbmNhdGVuYXRlZCByZXN1bHRzIG9mIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdFNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdExpbWl0JDEoY29sbCwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgY29uY2F0U2VyaWVzJDEgPSBhd2FpdGlmeShjb25jYXRTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2hlbiBjYWxsZWQsIGNhbGxzLWJhY2sgd2l0aCB0aGUgdmFsdWVzIHByb3ZpZGVkLlxuICAgICAqIFVzZWZ1bCBhcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gYSBbYHdhdGVyZmFsbGBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy53YXRlcmZhbGx9LCBvciBmb3IgcGx1Z2dpbmcgdmFsdWVzIGluIHRvXG4gICAgICogW2BhdXRvYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99LlxuICAgICAqXG4gICAgICogQG5hbWUgY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJndW1lbnRzLi4uIC0gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gYXV0b21hdGljYWxseSBpbnZva2VcbiAgICAgKiBjYWxsYmFjayB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aGVuIGludm9rZWQsIGF1dG9tYXRpY2FsbHlcbiAgICAgKiBpbnZva2VzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBwcmV2aW91cyBnaXZlbiBhcmd1bWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmNvbnN0YW50KDQyKSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKHZhbHVlLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLyB2YWx1ZSA9PT0gNDJcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiBhc3luYy53YXRlcmZhbGwoW1xuICAgICAqICAgICBhc3luYy5jb25zdGFudChmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICAgICAqICAgICBmcy5yZWFkRmlsZSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKGZpbGVEYXRhLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLy4uLlxuICAgICAqICAgICB9XG4gICAgICogICAgIC8vLi4uXG4gICAgICogXSwgY2FsbGJhY2spO1xuICAgICAqXG4gICAgICogYXN5bmMuYXV0byh7XG4gICAgICogICAgIGhvc3RuYW1lOiBhc3luYy5jb25zdGFudChcImh0dHBzOi8vc2VydmVyLm5ldC9cIiksXG4gICAgICogICAgIHBvcnQ6IGZpbmRGcmVlUG9ydCxcbiAgICAgKiAgICAgbGF1bmNoU2VydmVyOiBbXCJob3N0bmFtZVwiLCBcInBvcnRcIiwgZnVuY3Rpb24gKG9wdGlvbnMsIGNiKSB7XG4gICAgICogICAgICAgICBzdGFydFNlcnZlcihvcHRpb25zLCBjYik7XG4gICAgICogICAgIH1dLFxuICAgICAqICAgICAvLy4uLlxuICAgICAqIH0sIGNhbGxiYWNrKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25zdGFudCQxKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5pZ25vcmVkQXJncy8qLCBjYWxsYmFjayovKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBpZ25vcmVkQXJncy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCAuLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY3JlYXRlVGVzdGVyKGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIChlYWNoZm4sIGFyciwgX2l0ZXJhdGVlLCBjYikgPT4ge1xuICAgICAgICAgICAgdmFyIHRlc3RQYXNzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciB0ZXN0UmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgaXRlcmF0ZWUgPSB3cmFwQXN5bmMoX2l0ZXJhdGVlKTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsICh2YWx1ZSwgXywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgICBpdGVyYXRlZSh2YWx1ZSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgZXJyID09PSBmYWxzZSkgcmV0dXJuIGNhbGxiYWNrKGVycik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrKHJlc3VsdCkgJiYgIXRlc3RSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdCA9IGdldFJlc3VsdCh0cnVlLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgYnJlYWtMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgICAgICBjYihudWxsLCB0ZXN0UGFzc2VkID8gdGVzdFJlc3VsdCA6IGdldFJlc3VsdChmYWxzZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgdmFsdWUgaW4gYGNvbGxgIHRoYXQgcGFzc2VzIGFuIGFzeW5jIHRydXRoIHRlc3QuIFRoZVxuICAgICAqIGBpdGVyYXRlZWAgaXMgYXBwbGllZCBpbiBwYXJhbGxlbCwgbWVhbmluZyB0aGUgZmlyc3QgaXRlcmF0ZWUgdG8gcmV0dXJuXG4gICAgICogYHRydWVgIHdpbGwgZmlyZSB0aGUgZGV0ZWN0IGBjYWxsYmFja2Agd2l0aCB0aGF0IHJlc3VsdC4gVGhhdCBtZWFucyB0aGVcbiAgICAgKiByZXN1bHQgbWlnaHQgbm90IGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBvcmlnaW5hbCBgY29sbGAgKGluIHRlcm1zIG9mIG9yZGVyKVxuICAgICAqIHRoYXQgcGFzc2VzIHRoZSB0ZXN0LlxuXG4gICAgICogSWYgb3JkZXIgd2l0aGluIHRoZSBvcmlnaW5hbCBgY29sbGAgaXMgaW1wb3J0YW50LCB0aGVuIGxvb2sgYXRcbiAgICAgKiBbYGRldGVjdFNlcmllc2Bde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3RTZXJpZXN9LlxuICAgICAqXG4gICAgICogQG5hbWUgZGV0ZWN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGZpbmRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbnNcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSB0aGF0IHBhc3NlcyB0aGUgdHJ1dGggdGVzdFxuICAgICAqIChpdGVyYXRlZSkgb3IgdGhlIHZhbHVlIGB1bmRlZmluZWRgIGlmIG5vbmUgcGFzc2VkLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYSBmaWxlIGV4aXN0c1xuICAgICAqIGZ1bmN0aW9uIGZpbGVFeGlzdHMoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICBmcy5hY2Nlc3MoZmlsZSwgZnMuY29uc3RhbnRzLkZfT0ssIChlcnIpID0+IHtcbiAgICAgKiAgICAgICAgY2FsbGJhY2sobnVsbCwgIWVycik7XG4gICAgICogICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMuZGV0ZWN0KFsnZmlsZTMudHh0JywnZmlsZTIudHh0JywnZGlyMS9maWxlMS50eHQnXSwgZmlsZUV4aXN0cyxcbiAgICAgKiAgICBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAvLyBkaXIxL2ZpbGUxLnR4dFxuICAgICAqICAgICAgICAvLyByZXN1bHQgbm93IGVxdWFscyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgbGlzdCB0aGF0IGV4aXN0c1xuICAgICAqICAgIH1cbiAgICAgKik7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmRldGVjdChbJ2ZpbGUzLnR4dCcsJ2ZpbGUyLnR4dCcsJ2RpcjEvZmlsZTEudHh0J10sIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gZGlyMS9maWxlMS50eHRcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIGxpc3QgdGhhdCBleGlzdHNcbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZGV0ZWN0KFsnZmlsZTMudHh0JywnZmlsZTIudHh0JywnZGlyMS9maWxlMS50eHQnXSwgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gZGlyMS9maWxlMS50eHRcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBub3cgZXF1YWxzIHRoZSBmaWxlIGluIHRoZSBsaXN0IHRoYXQgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRldGVjdChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiBib29sLCAocmVzLCBpdGVtKSA9PiBpdGVtKShlYWNoT2YkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZGV0ZWN0JDEgPSBhd2FpdGlmeShkZXRlY3QsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BkZXRlY3RgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZGV0ZWN0fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZGV0ZWN0TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5kZXRlY3Rde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3R9XG4gICAgICogQGFsaWFzIGZpbmRMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uc1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSB0aGF0IHBhc3NlcyB0aGUgdHJ1dGggdGVzdFxuICAgICAqIChpdGVyYXRlZSkgb3IgdGhlIHZhbHVlIGB1bmRlZmluZWRgIGlmIG5vbmUgcGFzc2VkLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRldGVjdExpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiBib29sLCAocmVzLCBpdGVtKSA9PiBpdGVtKShlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZGV0ZWN0TGltaXQkMSA9IGF3YWl0aWZ5KGRldGVjdExpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZGV0ZWN0YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmRldGVjdH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZGV0ZWN0U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZGV0ZWN0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZGV0ZWN0fVxuICAgICAqIEBhbGlhcyBmaW5kU2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25zXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC5cbiAgICAgKiBSZXN1bHQgd2lsbCBiZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkgdGhhdCBwYXNzZXMgdGhlIHRydXRoIHRlc3RcbiAgICAgKiAoaXRlcmF0ZWUpIG9yIHRoZSB2YWx1ZSBgdW5kZWZpbmVkYCBpZiBub25lIHBhc3NlZC4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZXRlY3RTZXJpZXMoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKGJvb2wgPT4gYm9vbCwgKHJlcywgaXRlbSkgPT4gaXRlbSkoZWFjaE9mTGltaXQkMigxKSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIHZhciBkZXRlY3RTZXJpZXMkMSA9IGF3YWl0aWZ5KGRldGVjdFNlcmllcywgMyk7XG5cbiAgICBmdW5jdGlvbiBjb25zb2xlRnVuYyhuYW1lKSB7XG4gICAgICAgIHJldHVybiAoZm4sIC4uLmFyZ3MpID0+IHdyYXBBc3luYyhmbikoLi4uYXJncywgKGVyciwgLi4ucmVzdWx0QXJncykgPT4ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uc29sZVtuYW1lXSkgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRBcmdzLmZvckVhY2goeCA9PiBjb25zb2xlW25hbWVdKHgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9ncyB0aGUgcmVzdWx0IG9mIGFuIFtgYXN5bmNgIGZ1bmN0aW9uXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byB0aGVcbiAgICAgKiBgY29uc29sZWAgdXNpbmcgYGNvbnNvbGUuZGlyYCB0byBkaXNwbGF5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSByZXN1bHRpbmcgb2JqZWN0LlxuICAgICAqIE9ubHkgd29ya3MgaW4gTm9kZS5qcyBvciBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgYGNvbnNvbGUuZGlyYCBhbmRcbiAgICAgKiBgY29uc29sZS5lcnJvcmAgKHN1Y2ggYXMgRkYgYW5kIENocm9tZSkuXG4gICAgICogSWYgbXVsdGlwbGUgYXJndW1lbnRzIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBhc3luYyBmdW5jdGlvbixcbiAgICAgKiBgY29uc29sZS5kaXJgIGlzIGNhbGxlZCBvbiBlYWNoIGFyZ3VtZW50IGluIG9yZGVyLlxuICAgICAqXG4gICAgICogQG5hbWUgZGlyXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZ1bmN0aW9uIC0gVGhlIGZ1bmN0aW9uIHlvdSB3YW50IHRvIGV2ZW50dWFsbHkgYXBwbHlcbiAgICAgKiBhbGwgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJndW1lbnRzLi4uIC0gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gYXBwbHkgdG8gdGhlIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBpbiBhIG1vZHVsZVxuICAgICAqIHZhciBoZWxsbyA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7aGVsbG86IG5hbWV9KTtcbiAgICAgKiAgICAgfSwgMTAwMCk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGluIHRoZSBub2RlIHJlcGxcbiAgICAgKiBub2RlPiBhc3luYy5kaXIoaGVsbG8sICd3b3JsZCcpO1xuICAgICAqIHtoZWxsbzogJ3dvcmxkJ31cbiAgICAgKi9cbiAgICB2YXIgZGlyID0gY29uc29sZUZ1bmMoJ2RpcicpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc3QtY2hlY2sgdmVyc2lvbiBvZiBbYHdoaWxzdGBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy53aGlsc3R9LiBUbyByZWZsZWN0IHRoZSBkaWZmZXJlbmNlIGluXG4gICAgICogdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIHRoZSBhcmd1bWVudHMgYHRlc3RgIGFuZCBgaXRlcmF0ZWVgIGFyZSBzd2l0Y2hlZC5cbiAgICAgKlxuICAgICAqIGBkb1doaWxzdGAgaXMgdG8gYHdoaWxzdGAgYXMgYGRvIHdoaWxlYCBpcyB0byBgd2hpbGVgIGluIHBsYWluIEphdmFTY3JpcHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkb1doaWxzdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLndoaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZSBgdGVzdGBcbiAgICAgKiBwYXNzZXMuIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gdGVzdCAtIGFzeW5jaHJvbm91cyB0cnV0aCB0ZXN0IHRvIHBlcmZvcm0gYWZ0ZXIgZWFjaFxuICAgICAqIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgLiBJbnZva2VkIHdpdGggKC4uLmFyZ3MsIGNhbGxiYWNrKSwgd2hlcmUgYC4uLmFyZ3NgIGFyZSB0aGVcbiAgICAgKiBub24tZXJyb3IgYXJncyBmcm9tIHRoZSBwcmV2aW91cyBjYWxsYmFjayBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgdGVzdFxuICAgICAqIGZ1bmN0aW9uIGhhcyBmYWlsZWQgYW5kIHJlcGVhdGVkIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgIGhhcyBzdG9wcGVkLlxuICAgICAqIGBjYWxsYmFja2Agd2lsbCBiZSBwYXNzZWQgYW4gZXJyb3IgYW5kIGFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbFxuICAgICAqIGBpdGVyYXRlZWAncyBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSk7XG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9XaGlsc3QoaXRlcmF0ZWUsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25seU9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgdmFyIF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICB2YXIgcmVzdWx0cztcblxuICAgICAgICBmdW5jdGlvbiBuZXh0KGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgcmVzdWx0cyA9IGFyZ3M7XG4gICAgICAgICAgICBfdGVzdCguLi5hcmdzLCBjaGVjayk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVjayhlcnIsIHRydXRoKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRydXRoKSByZXR1cm4gY2FsbGJhY2sobnVsbCwgLi4ucmVzdWx0cyk7XG4gICAgICAgICAgICBfZm4obmV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hlY2sobnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdmFyIGRvV2hpbHN0JDEgPSBhd2FpdGlmeShkb1doaWxzdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBMaWtlIFsnZG9XaGlsc3QnXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuZG9XaGlsc3R9LCBleGNlcHQgdGhlIGB0ZXN0YCBpcyBpbnZlcnRlZC4gTm90ZSB0aGVcbiAgICAgKiBhcmd1bWVudCBvcmRlcmluZyBkaWZmZXJzIGZyb20gYHVudGlsYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGRvVW50aWxcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5kb1doaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmRvV2hpbHN0fVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZVxuICAgICAqIGB0ZXN0YCBmYWlscy4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBhZnRlciBlYWNoXG4gICAgICogZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAuIEludm9rZWQgd2l0aCAoLi4uYXJncywgY2FsbGJhY2spLCB3aGVyZSBgLi4uYXJnc2AgYXJlIHRoZVxuICAgICAqIG5vbi1lcnJvciBhcmdzIGZyb20gdGhlIHByZXZpb3VzIGNhbGxiYWNrIG9mIGBpdGVyYXRlZWBcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHRlc3RcbiAgICAgKiBmdW5jdGlvbiBoYXMgcGFzc2VkIGFuZCByZXBlYXRlZCBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYCBoYXMgc3RvcHBlZC4gYGNhbGxiYWNrYFxuICAgICAqIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzXG4gICAgICogY2FsbGJhY2suIEludm9rZWQgd2l0aCAoZXJyLCBbcmVzdWx0c10pO1xuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvVW50aWwoaXRlcmF0ZWUsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICByZXR1cm4gZG9XaGlsc3QkMShpdGVyYXRlZSwgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIF90ZXN0KC4uLmFyZ3MsIChlcnIsIHRydXRoKSA9PiBjYiAoZXJyLCAhdHJ1dGgpKTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0ZWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSA9PiBpdGVyYXRlZSh2YWx1ZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGZ1bmN0aW9uIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIGBjb2xsYCwgaW4gcGFyYWxsZWwuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgY2FsbGVkIHdpdGggYW4gaXRlbSBmcm9tIHRoZSBsaXN0LCBhbmQgYSBjYWxsYmFjayBmb3Igd2hlblxuICAgICAqIGl0IGhhcyBmaW5pc2hlZC4gSWYgdGhlIGBpdGVyYXRlZWAgcGFzc2VzIGFuIGVycm9yIHRvIGl0cyBgY2FsbGJhY2tgLCB0aGVcbiAgICAgKiBtYWluIGBjYWxsYmFja2AgKGZvciB0aGUgYGVhY2hgIGZ1bmN0aW9uKSBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGVcbiAgICAgKiBlcnJvci5cbiAgICAgKlxuICAgICAqIE5vdGUsIHRoYXQgc2luY2UgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIHBhcmFsbGVsLFxuICAgICAqIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBpdGVyYXRlZSBmdW5jdGlvbnMgd2lsbCBjb21wbGV0ZSBpbiBvcmRlci5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVhY2hcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgZm9yRWFjaFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvXG4gICAgICogZWFjaCBpdGVtIGluIGBjb2xsYC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogVGhlIGFycmF5IGluZGV4IGlzIG5vdCBwYXNzZWQgdG8gdGhlIGl0ZXJhdGVlLlxuICAgICAqIElmIHlvdSBuZWVkIHRoZSBpbmRleCwgdXNlIGBlYWNoT2ZgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbICdkaXIxL2ZpbGUyLnR4dCcsICdkaXIyL2ZpbGUzLnR4dCcsICdkaXIvZmlsZTUudHh0J107XG4gICAgICogY29uc3Qgd2l0aE1pc3NpbmdGaWxlTGlzdCA9IFsnZGlyMS9maWxlMS50eHQnLCAnZGlyNC9maWxlMi50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGRlbGV0ZXMgYSBmaWxlXG4gICAgICogY29uc3QgZGVsZXRlRmlsZSA9IGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnVubGluayhmaWxlLCBjYWxsYmFjayk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmVhY2goZmlsZUxpc3QsIGRlbGV0ZUZpbGUsIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBpZiggZXJyICkge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKCdBbGwgZmlsZXMgaGF2ZSBiZWVuIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMuZWFjaCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBkZWxldGVGaWxlLCBmdW5jdGlvbihlcnIpe1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAvLyBzaW5jZSBkaXI0L2ZpbGUyLnR4dCBkb2VzIG5vdCBleGlzdFxuICAgICAqICAgICAvLyBkaXIxL2ZpbGUxLnR4dCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5lYWNoKGZpbGVMaXN0LCBkZWxldGVGaWxlKVxuICAgICAqIC50aGVuKCAoKSA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdBbGwgZmlsZXMgaGF2ZSBiZWVuIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLmVhY2goZmlsZUxpc3QsIGRlbGV0ZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ0FsbCBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgLy8gc2luY2UgZGlyNC9maWxlMi50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICAgLy8gZGlyMS9maWxlMS50eHQgY291bGQgaGF2ZSBiZWVuIGRlbGV0ZWRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgYXdhaXQgYXN5bmMuZWFjaChmaWxlcywgZGVsZXRlRmlsZSk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgYXdhaXQgYXN5bmMuZWFjaCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBkZWxldGVGaWxlKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgICAgIC8vIHNpbmNlIGRpcjQvZmlsZTIudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICogICAgICAgICAvLyBkaXIxL2ZpbGUxLnR4dCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZWFjaExpbWl0JDIoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2YkMShjb2xsLCBfd2l0aG91dEluZGV4KHdyYXBBc3luYyhpdGVyYXRlZSkpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2ggPSBhd2FpdGlmeShlYWNoTGltaXQkMiwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGVhY2hgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAgICAgKiBAYWxpYXMgZm9yRWFjaExpbWl0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgYXJyYXkgaW5kZXggaXMgbm90IHBhc3NlZCB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZkxpbWl0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoTGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZWFjaE9mTGltaXQkMihsaW1pdCkoY29sbCwgX3dpdGhvdXRJbmRleCh3cmFwQXN5bmMoaXRlcmF0ZWUpKSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICB2YXIgZWFjaExpbWl0JDEgPSBhd2FpdGlmeShlYWNoTGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIE5vdGUsIHRoYXQgdW5saWtlIFtgZWFjaGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofSwgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIGl0ZXJhdGVlIHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHNlcmllcyBhbmQgdGhlcmVmb3JlIHRoZSBpdGVyYXRlZSBmdW5jdGlvbnMgd2lsbCBjb21wbGV0ZSBpbiBvcmRlci5cblxuICAgICAqIEBuYW1lIGVhY2hTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAgICAgKiBAYWxpYXMgZm9yRWFjaFNlcmllc1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2hcbiAgICAgKiBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgYXJyYXkgaW5kZXggaXMgbm90IHBhc3NlZCB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZlNlcmllc2AuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBJbnZva2VkIHdpdGggKGVycikuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZWFjaFNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hMaW1pdCQxKGNvbGwsIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGVhY2hTZXJpZXMkMSA9IGF3YWl0aWZ5KGVhY2hTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogV3JhcCBhbiBhc3luYyBmdW5jdGlvbiBhbmQgZW5zdXJlIGl0IGNhbGxzIGl0cyBjYWxsYmFjayBvbiBhIGxhdGVyIHRpY2sgb2ZcbiAgICAgKiB0aGUgZXZlbnQgbG9vcC4gIElmIHRoZSBmdW5jdGlvbiBhbHJlYWR5IGNhbGxzIGl0cyBjYWxsYmFjayBvbiBhIG5leHQgdGljayxcbiAgICAgKiBubyBleHRyYSBkZWZlcnJhbCBpcyBhZGRlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIHByZXZlbnRpbmcgc3RhY2sgb3ZlcmZsb3dzXG4gICAgICogKGBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZGApIGFuZCBnZW5lcmFsbHkga2VlcGluZ1xuICAgICAqIFtaYWxnb10oaHR0cDovL2Jsb2cuaXpzLm1lL3Bvc3QvNTkxNDI3NDIxNDMvZGVzaWduaW5nLWFwaXMtZm9yLWFzeW5jaHJvbnkpXG4gICAgICogY29udGFpbmVkLiBFUzIwMTcgYGFzeW5jYCBmdW5jdGlvbnMgYXJlIHJldHVybmVkIGFzLWlzIC0tIHRoZXkgYXJlIGltbXVuZVxuICAgICAqIHRvIFphbGdvJ3MgY29ycnVwdGluZyBpbmZsdWVuY2VzLCBhcyB0aGV5IGFsd2F5cyByZXNvbHZlIG9uIGEgbGF0ZXIgdGljay5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVuc3VyZUFzeW5jXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZuIC0gYW4gYXN5bmMgZnVuY3Rpb24sIG9uZSB0aGF0IGV4cGVjdHMgYSBub2RlLXN0eWxlXG4gICAgICogY2FsbGJhY2sgYXMgaXRzIGxhc3QgYXJndW1lbnQuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IFJldHVybnMgYSB3cmFwcGVkIGZ1bmN0aW9uIHdpdGggdGhlIGV4YWN0IHNhbWUgY2FsbFxuICAgICAqIHNpZ25hdHVyZSBhcyB0aGUgZnVuY3Rpb24gcGFzc2VkIGluLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzb21ldGltZXNBc3luYyhhcmcsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGlmIChjYWNoZVthcmddKSB7XG4gICAgICogICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgY2FjaGVbYXJnXSk7IC8vIHRoaXMgd291bGQgYmUgc3luY2hyb25vdXMhIVxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgZG9Tb21lSU8oYXJnLCBjYWxsYmFjayk7IC8vIHRoaXMgSU8gd291bGQgYmUgYXN5bmNocm9ub3VzXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyB0aGlzIGhhcyBhIHJpc2sgb2Ygc3RhY2sgb3ZlcmZsb3dzIGlmIG1hbnkgcmVzdWx0cyBhcmUgY2FjaGVkIGluIGEgcm93XG4gICAgICogYXN5bmMubWFwU2VyaWVzKGFyZ3MsIHNvbWV0aW1lc0FzeW5jLCBkb25lKTtcbiAgICAgKlxuICAgICAqIC8vIHRoaXMgd2lsbCBkZWZlciBzb21ldGltZXNBc3luYydzIGNhbGxiYWNrIGlmIG5lY2Vzc2FyeSxcbiAgICAgKiAvLyBwcmV2ZW50aW5nIHN0YWNrIG92ZXJmbG93c1xuICAgICAqIGFzeW5jLm1hcFNlcmllcyhhcmdzLCBhc3luYy5lbnN1cmVBc3luYyhzb21ldGltZXNBc3luYyksIGRvbmUpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIGlmIChpc0FzeW5jKGZuKSkgcmV0dXJuIGZuO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MvKiwgY2FsbGJhY2sqLykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgoLi4uaW5uZXJBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoKCkgPT4gY2FsbGJhY2soLi4uaW5uZXJBcmdzKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soLi4uaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGV2ZXJ5IGVsZW1lbnQgaW4gYGNvbGxgIHNhdGlzZmllcyBhbiBhc3luYyB0ZXN0LiBJZiBhbnlcbiAgICAgKiBpdGVyYXRlZSBjYWxsIHJldHVybnMgYGZhbHNlYCwgdGhlIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBldmVyeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBhbGxcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9uIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luYyB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydkaXIxL2ZpbGUxLnR4dCcsJ2RpcjIvZmlsZTMudHh0JywnZGlyMy9maWxlNS50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlNC50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5ldmVyeShmaWxlTGlzdCwgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXN5bmMuZXZlcnkod2l0aE1pc3NpbmdGaWxlTGlzdCwgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIE5PVCBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5ldmVyeShmaWxlTGlzdCwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXN5bmMuZXZlcnkod2l0aE1pc3NpbmdGaWxlTGlzdCwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIE5PVCBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZXZlcnkoZmlsZUxpc3QsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHRydWVcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5ldmVyeSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyBmYWxzZVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIE5PVCBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeShjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiAhYm9vbCwgcmVzID0+ICFyZXMpKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBldmVyeSQxID0gYXdhaXRpZnkoZXZlcnksIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BldmVyeWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ldmVyeX0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBldmVyeUxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZXZlcnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ldmVyeX1cbiAgICAgKiBAYWxpYXMgYWxsTGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW1cbiAgICAgKiBpbiB0aGUgY29sbGVjdGlvbiBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgbXVzdCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiByZXN1bHQgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBSZXN1bHQgd2lsbCBiZSBlaXRoZXIgYHRydWVgIG9yIGBmYWxzZWBcbiAgICAgKiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGUgYXN5bmMgdGVzdHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXZlcnlMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKGJvb2wgPT4gIWJvb2wsIHJlcyA9PiAhcmVzKShlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZXZlcnlMaW1pdCQxID0gYXdhaXRpZnkoZXZlcnlMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGV2ZXJ5YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmV2ZXJ5fSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBldmVyeVNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmV2ZXJ5XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZXZlcnl9XG4gICAgICogQGFsaWFzIGFsbFNlcmllc1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb24gaW4gc2VyaWVzLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luYyB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeVNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiAhYm9vbCwgcmVzID0+ICFyZXMpKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBldmVyeVNlcmllcyQxID0gYXdhaXRpZnkoZXZlcnlTZXJpZXMsIDMpO1xuXG4gICAgZnVuY3Rpb24gZmlsdGVyQXJyYXkoZWFjaGZuLCBhcnIsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgdHJ1dGhWYWx1ZXMgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gICAgICAgIGVhY2hmbihhcnIsICh4LCBpbmRleCwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBpdGVyYXRlZSh4LCAoZXJyLCB2KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ1dGhWYWx1ZXNbaW5kZXhdID0gISF2O1xuICAgICAgICAgICAgICAgIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0cnV0aFZhbHVlc1tpXSkgcmVzdWx0cy5wdXNoKGFycltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsdGVyR2VuZXJpYyhlYWNoZm4sIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBlYWNoZm4oY29sbCwgKHgsIGluZGV4LCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKHgsIChlcnIsIHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaXRlckNiKGVycik7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0c1xuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleClcbiAgICAgICAgICAgICAgICAubWFwKHYgPT4gdi52YWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmaWx0ZXIgPSBpc0FycmF5TGlrZShjb2xsKSA/IGZpbHRlckFycmF5IDogZmlsdGVyR2VuZXJpYztcbiAgICAgICAgcmV0dXJuIGZpbHRlcihlYWNoZm4sIGNvbGwsIHdyYXBBc3luYyhpdGVyYXRlZSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIGFsbCB0aGUgdmFsdWVzIGluIGBjb2xsYCB3aGljaCBwYXNzIGFuIGFzeW5jIHRydXRoXG4gICAgICogdGVzdC4gVGhpcyBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGluIHBhcmFsbGVsLCBidXQgdGhlIHJlc3VsdHMgYXJyYXkgd2lsbCBiZVxuICAgICAqIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBvcmlnaW5hbC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZpbHRlclxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBzZWxlY3RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgdHJ1dGhWYWx1ZSlgLCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqIHdpdGggYSBib29sZWFuIGFyZ3VtZW50IG9uY2UgaXQgaGFzIGNvbXBsZXRlZC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZXMgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMi9maWxlMy50eHQnLCdkaXIzL2ZpbGU2LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmZpbHRlcihmaWxlcywgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgaWYoZXJyKSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgIC8vIFsgJ2RpcjEvZmlsZTEudHh0JywgJ2RpcjIvZmlsZTMudHh0JyBdXG4gICAgICogICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBleGlzdGluZyBmaWxlc1xuICAgICAqICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZmlsdGVyKGZpbGVzLCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gWyAnZGlyMS9maWxlMS50eHQnLCAnZGlyMi9maWxlMy50eHQnIF1cbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBub3cgYW4gYXJyYXkgb2YgdGhlIGV4aXN0aW5nIGZpbGVzXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5maWx0ZXIoZmlsZXMsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyBbICdkaXIxL2ZpbGUxLnR4dCcsICdkaXIyL2ZpbGUzLnR4dCcgXVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgYW4gYXJyYXkgb2YgdGhlIGV4aXN0aW5nIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbHRlciAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfZmlsdGVyKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBmaWx0ZXIkMSA9IGF3YWl0aWZ5KGZpbHRlciwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGZpbHRlcmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5maWx0ZXJ9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBmaWx0ZXJMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmZpbHRlcl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn1cbiAgICAgKiBAYWxpYXMgc2VsZWN0TGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIGlzIHBhc3NlZCBhIGBjYWxsYmFjayhlcnIsIHRydXRoVmFsdWUpYCwgd2hpY2ggbXVzdCBiZSBjYWxsZWRcbiAgICAgKiB3aXRoIGEgYm9vbGVhbiBhcmd1bWVudCBvbmNlIGl0IGhhcyBjb21wbGV0ZWQuIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyTGltaXQgKGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9maWx0ZXIoZWFjaE9mTGltaXQkMihsaW1pdCksIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGZpbHRlckxpbWl0JDEgPSBhd2FpdGlmeShmaWx0ZXJMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGZpbHRlcmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5maWx0ZXJ9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZpbHRlclNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmZpbHRlcl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn1cbiAgICAgKiBAYWxpYXMgc2VsZWN0U2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIGlzIHBhc3NlZCBhIGBjYWxsYmFjayhlcnIsIHRydXRoVmFsdWUpYCwgd2hpY2ggbXVzdCBiZSBjYWxsZWRcbiAgICAgKiB3aXRoIGEgYm9vbGVhbiBhcmd1bWVudCBvbmNlIGl0IGhhcyBjb21wbGV0ZWQuIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWx0ZXJTZXJpZXMgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2ZpbHRlcihlYWNoT2ZTZXJpZXMkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZmlsdGVyU2VyaWVzJDEgPSBhd2FpdGlmeShmaWx0ZXJTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBgZm5gIHdpdGggYSBjYWxsYmFjayBwYXJhbWV0ZXIgdGhhdCBhbGxvd3MgaXRcbiAgICAgKiB0byBjYWxsIGl0c2VsZiBhZ2FpbiwgaW4gc2VyaWVzLCBpbmRlZmluaXRlbHkuXG5cbiAgICAgKiBJZiBhbiBlcnJvciBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHRoZW4gYGVycmJhY2tgIGlzIGNhbGxlZCB3aXRoIHRoZVxuICAgICAqIGVycm9yLCBhbmQgZXhlY3V0aW9uIHN0b3BzLCBvdGhlcndpc2UgaXQgd2lsbCBuZXZlciBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBmb3JldmVyXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSBhbiBhc3luYyBmdW5jdGlvbiB0byBjYWxsIHJlcGVhdGVkbHkuXG4gICAgICogSW52b2tlZCB3aXRoIChuZXh0KS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZXJyYmFja10gLSB3aGVuIGBmbmAgcGFzc2VzIGFuIGVycm9yIHRvIGl0J3MgY2FsbGJhY2ssXG4gICAgICogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCwgYW5kIGV4ZWN1dGlvbiBzdG9wcy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCByZWplY3RzIGlmIGFuIGVycm9yIG9jY3VycyBhbmQgYW4gZXJyYmFja1xuICAgICAqIGlzIG5vdCBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMuZm9yZXZlcihcbiAgICAgKiAgICAgZnVuY3Rpb24obmV4dCkge1xuICAgICAqICAgICAgICAgLy8gbmV4dCBpcyBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byB0aGluZ3MgdGhhdCBuZWVkIGEgY2FsbGJhY2soZXJyIFssIHdoYXRldmVyXSk7XG4gICAgICogICAgICAgICAvLyBpdCB3aWxsIHJlc3VsdCBpbiB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBhZ2Fpbi5cbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgICAgICAvLyBpZiBuZXh0IGlzIGNhbGxlZCB3aXRoIGEgdmFsdWUgaW4gaXRzIGZpcnN0IHBhcmFtZXRlciwgaXQgd2lsbCBhcHBlYXJcbiAgICAgKiAgICAgICAgIC8vIGluIGhlcmUgYXMgJ2VycicsIGFuZCBleGVjdXRpb24gd2lsbCBzdG9wLlxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JldmVyKGZuLCBlcnJiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seU9uY2UoZXJyYmFjayk7XG4gICAgICAgIHZhciB0YXNrID0gd3JhcEFzeW5jKGVuc3VyZUFzeW5jKGZuKSk7XG5cbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBkb25lKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgIH1cbiAgICB2YXIgZm9yZXZlciQxID0gYXdhaXRpZnkoZm9yZXZlciwgMik7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGdyb3VwQnlgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZ3JvdXBCeX0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBncm91cEJ5TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5ncm91cEJ5XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZ3JvdXBCeX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGBrZXlgIHRvIGdyb3VwIHRoZSB2YWx1ZSB1bmRlci5cbiAgICAgKiBJbnZva2VkIHdpdGggKHZhbHVlLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHQgaXMgYW4gYE9iamVjdGAgd2hvc2VzXG4gICAgICogcHJvcGVydGllcyBhcmUgYXJyYXlzIG9mIHZhbHVlcyB3aGljaCByZXR1cm5lZCB0aGUgY29ycmVzcG9uZGluZyBrZXkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3JvdXBCeUxpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXBMaW1pdCQxKGNvbGwsIGxpbWl0LCAodmFsLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWwsIChlcnIsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlckNiKGVyciwge2tleSwgdmFsfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVyciwgbWFwUmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgLy8gZnJvbSBNRE4sIGhhbmRsZSBvYmplY3QgaGF2aW5nIGFuIGBoYXNPd25Qcm9wZXJ0eWAgcHJvcFxuICAgICAgICAgICAgdmFyIHtoYXNPd25Qcm9wZXJ0eX0gPSBPYmplY3QucHJvdG90eXBlO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcFJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwUmVzdWx0c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIge2tleX0gPSBtYXBSZXN1bHRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB2YXIge3ZhbH0gPSBtYXBSZXN1bHRzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBbdmFsXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIGdyb3VwQnlMaW1pdCQxID0gYXdhaXRpZnkoZ3JvdXBCeUxpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgb2JqZWN0LCB3aGVyZSBlYWNoIHZhbHVlIGNvcnJlc3BvbmRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLCBmcm9tXG4gICAgICogYGNvbGxgLCB0aGF0IHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS4gVGhhdCBpcywgdGhlIGtleXMgb2YgdGhlIG9iamVjdFxuICAgICAqIGNvcnJlc3BvbmQgdG8gdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlZWAgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBOb3RlOiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIHBhcmFsbGVsLFxuICAgICAqIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlIGluIG9yZGVyLlxuICAgICAqIEhvd2V2ZXIsIHRoZSB2YWx1ZXMgZm9yIGVhY2gga2V5IGluIHRoZSBgcmVzdWx0YCB3aWxsIGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzXG4gICAgICogdGhlIG9yaWdpbmFsIGBjb2xsYC4gRm9yIE9iamVjdHMsIHRoZSB2YWx1ZXMgd2lsbCByb3VnaGx5IGJlIGluIHRoZSBvcmRlciBvZlxuICAgICAqIHRoZSBvcmlnaW5hbCBPYmplY3RzJyBrZXlzIChidXQgdGhpcyBjYW4gdmFyeSBhY3Jvc3MgSmF2YVNjcmlwdCBlbmdpbmVzKS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGdyb3VwQnlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYGtleWAgdG8gZ3JvdXAgdGhlIHZhbHVlIHVuZGVyLlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdCBpcyBhbiBgT2JqZWN0YCB3aG9zZXNcbiAgICAgKiBwcm9wZXJ0aWVzIGFyZSBhcnJheXMgb2YgdmFsdWVzIHdoaWNoIHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVzID0gWydkaXIxL2ZpbGUxLnR4dCcsJ2RpcjInLCdkaXI0J11cbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGRldGVjdHMgZmlsZSB0eXBlIGFzIG5vbmUsIGZpbGUsIG9yIGRpcmVjdG9yeVxuICAgICAqIGZ1bmN0aW9uIGRldGVjdEZpbGUoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdChmaWxlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgJ25vbmUnKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXQuaXNEaXJlY3RvcnkoKSA/ICdkaXJlY3RvcnknIDogJ2ZpbGUnKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy9Vc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5ncm91cEJ5KGZpbGVzLCBkZXRlY3RGaWxlLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICpcdCAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8ge1xuICAgICAqICAgICAgICAgLy8gICAgIGZpbGU6IFsgJ2RpcjEvZmlsZTEudHh0JyBdLFxuICAgICAqICAgICAgICAgLy8gICAgIG5vbmU6IFsgJ2RpcjQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgZGlyZWN0b3J5OiBbICdkaXIyJ11cbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgZ3JvdXBlZCBieSB0eXBlXG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZ3JvdXBCeShmaWxlcywgZGV0ZWN0RmlsZSlcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8ge1xuICAgICAqICAgICAvLyAgICAgZmlsZTogWyAnZGlyMS9maWxlMS50eHQnIF0sXG4gICAgICogICAgIC8vICAgICBub25lOiBbICdkaXI0JyBdLFxuICAgICAqICAgICAvLyAgICAgZGlyZWN0b3J5OiBbICdkaXIyJ11cbiAgICAgKiAgICAgLy8gfVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbGVzIGdyb3VwZWQgYnkgdHlwZVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZ3JvdXBCeShmaWxlcywgZGV0ZWN0RmlsZSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8ge1xuICAgICAqICAgICAgICAgLy8gICAgIGZpbGU6IFsgJ2RpcjEvZmlsZTEudHh0JyBdLFxuICAgICAqICAgICAgICAgLy8gICAgIG5vbmU6IFsgJ2RpcjQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgZGlyZWN0b3J5OiBbICdkaXIyJ11cbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgZ3JvdXBlZCBieSB0eXBlXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdyb3VwQnkgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZ3JvdXBCeUxpbWl0JDEoY29sbCwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGdyb3VwQnlgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZ3JvdXBCeX0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZ3JvdXBCeVNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmdyb3VwQnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBga2V5YCB0byBncm91cCB0aGUgdmFsdWUgdW5kZXIuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0IGlzIGFuIGBPYmplY3RgIHdob3NlXG4gICAgICogcHJvcGVydGllcyBhcmUgYXJyYXlzIG9mIHZhbHVlcyB3aGljaCByZXR1cm5lZCB0aGUgY29ycmVzcG9uZGluZyBrZXkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3JvdXBCeVNlcmllcyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBncm91cEJ5TGltaXQkMShjb2xsLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9ncyB0aGUgcmVzdWx0IG9mIGFuIGBhc3luY2AgZnVuY3Rpb24gdG8gdGhlIGBjb25zb2xlYC4gT25seSB3b3JrcyBpblxuICAgICAqIE5vZGUuanMgb3IgaW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGBjb25zb2xlLmxvZ2AgYW5kIGBjb25zb2xlLmVycm9yYCAoc3VjaFxuICAgICAqIGFzIEZGIGFuZCBDaHJvbWUpLiBJZiBtdWx0aXBsZSBhcmd1bWVudHMgYXJlIHJldHVybmVkIGZyb20gdGhlIGFzeW5jXG4gICAgICogZnVuY3Rpb24sIGBjb25zb2xlLmxvZ2AgaXMgY2FsbGVkIG9uIGVhY2ggYXJndW1lbnQgaW4gb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSBsb2dcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24geW91IHdhbnQgdG8gZXZlbnR1YWxseSBhcHBseVxuICAgICAqIGFsbCBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhcHBseSB0byB0aGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGluIGEgbW9kdWxlXG4gICAgICogdmFyIGhlbGxvID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdoZWxsbyAnICsgbmFtZSk7XG4gICAgICogICAgIH0sIDEwMDApO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiAvLyBpbiB0aGUgbm9kZSByZXBsXG4gICAgICogbm9kZT4gYXN5bmMubG9nKGhlbGxvLCAnd29ybGQnKTtcbiAgICAgKiAnaGVsbG8gd29ybGQnXG4gICAgICovXG4gICAgdmFyIGxvZyA9IGNvbnNvbGVGdW5jKCdsb2cnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgbWFwVmFsdWVzYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcFZhbHVlc30gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcFZhbHVlc0xpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwVmFsdWVzXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwVmFsdWVzfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUgYW5kIGtleVxuICAgICAqIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgcmVzdWx0YCBpcyBhIG5ldyBvYmplY3QgY29uc2lzdGluZ1xuICAgICAqIG9mIGVhY2gga2V5IGZyb20gYG9iamAsIHdpdGggZWFjaCB0cmFuc2Zvcm1lZCB2YWx1ZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlc0xpbWl0KG9iaiwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgbmV3T2JqID0ge307XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICByZXR1cm4gZWFjaE9mTGltaXQkMihsaW1pdCkob2JqLCAodmFsLCBrZXksIG5leHQpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWwsIGtleSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIG5leHQoZXJyKTtcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBuZXh0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IGNhbGxiYWNrKGVyciwgbmV3T2JqKSk7XG4gICAgfVxuXG4gICAgdmFyIG1hcFZhbHVlc0xpbWl0JDEgPSBhd2FpdGlmeShtYXBWYWx1ZXNMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBBIHJlbGF0aXZlIG9mIFtgbWFwYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0sIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBvYmplY3RzLlxuICAgICAqXG4gICAgICogUHJvZHVjZXMgYSBuZXcgT2JqZWN0IGJ5IG1hcHBpbmcgZWFjaCB2YWx1ZSBvZiBgb2JqYCB0aHJvdWdoIHRoZSBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb24uIFRoZSBgaXRlcmF0ZWVgIGlzIGNhbGxlZCBlYWNoIGB2YWx1ZWAgYW5kIGBrZXlgIGZyb20gYG9iamAgYW5kIGFcbiAgICAgKiBjYWxsYmFjayBmb3Igd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZy4gRWFjaCBvZiB0aGVzZSBjYWxsYmFja3MgdGFrZXNcbiAgICAgKiB0d28gYXJndW1lbnRzOiBhbiBgZXJyb3JgLCBhbmQgdGhlIHRyYW5zZm9ybWVkIGl0ZW0gZnJvbSBgb2JqYC4gSWYgYGl0ZXJhdGVlYFxuICAgICAqIHBhc3NlcyBhbiBlcnJvciB0byBpdHMgY2FsbGJhY2ssIHRoZSBtYWluIGBjYWxsYmFja2AgKGZvciB0aGUgYG1hcFZhbHVlc2BcbiAgICAgKiBmdW5jdGlvbikgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhlIG9yZGVyIG9mIHRoZSBrZXlzIGluIHRoZSByZXN1bHQgaXMgbm90IGd1YXJhbnRlZWQuICBUaGUga2V5cyB3aWxsXG4gICAgICogYmUgcm91Z2hseSBpbiB0aGUgb3JkZXIgdGhleSBjb21wbGV0ZSwgKGJ1dCB0aGlzIGlzIHZlcnkgZW5naW5lLXNwZWNpZmljKVxuICAgICAqXG4gICAgICogQG5hbWUgbWFwVmFsdWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIHZhbHVlIGFuZCBrZXlcbiAgICAgKiBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gYHJlc3VsdGAgaXMgYSBuZXcgb2JqZWN0IGNvbnNpc3RpbmdcbiAgICAgKiBvZiBlYWNoIGtleSBmcm9tIGBvYmpgLCB3aXRoIGVhY2ggdHJhbnNmb3JtZWQgdmFsdWUgb24gdGhlIHJpZ2h0LWhhbmQgc2lkZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZmlsZTEudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDEwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUyLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAyMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMy50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMzAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTQudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlTWFwID0ge1xuICAgICAqICAgICBmMTogJ2ZpbGUxLnR4dCcsXG4gICAgICogICAgIGYyOiAnZmlsZTIudHh0JyxcbiAgICAgKiAgICAgZjM6ICdmaWxlMy50eHQnXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIGNvbnN0IHdpdGhNaXNzaW5nRmlsZU1hcCA9IHtcbiAgICAgKiAgICAgZjE6ICdmaWxlMS50eHQnLFxuICAgICAqICAgICBmMjogJ2ZpbGUyLnR4dCcsXG4gICAgICogICAgIGYzOiAnZmlsZTQudHh0J1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXNcbiAgICAgKiBmdW5jdGlvbiBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwga2V5LCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdC5zaXplKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMubWFwVmFsdWVzKGZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgbm93IGEgbWFwIG9mIGZpbGUgc2l6ZSBpbiBieXRlcyBmb3IgZWFjaCBmaWxlLCBlLmcuXG4gICAgICogICAgICAgICAvLyB7XG4gICAgICogICAgICAgICAvLyAgICAgZjE6IDEwMDAsXG4gICAgICogICAgICAgICAvLyAgICAgZjI6IDIwMDAsXG4gICAgICogICAgICAgICAvLyAgICAgZjM6IDMwMDBcbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYy5tYXBWYWx1ZXMod2l0aE1pc3NpbmdGaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5tYXBWYWx1ZXMoZmlsZU1hcCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyByZXN1bHQgaXMgbm93IGEgbWFwIG9mIGZpbGUgc2l6ZSBpbiBieXRlcyBmb3IgZWFjaCBmaWxlLCBlLmcuXG4gICAgICogICAgIC8vIHtcbiAgICAgKiAgICAgLy8gICAgIGYxOiAxMDAwLFxuICAgICAqICAgICAvLyAgICAgZjI6IDIwMDAsXG4gICAgICogICAgIC8vICAgICBmMzogMzAwMFxuICAgICAqICAgICAvLyB9XG4gICAgICogfSkuY2F0Y2ggKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcFZhbHVlcyh3aXRoTWlzc2luZ0ZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiB9KS5jYXRjaCAoZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLm1hcFZhbHVlcyhmaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBub3cgYSBtYXAgb2YgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIHtcbiAgICAgKiAgICAgICAgIC8vICAgICBmMTogMTAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMjogMjAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMzogMzAwMFxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5tYXBWYWx1ZXMod2l0aE1pc3NpbmdGaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlcyhvYmosIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gbWFwVmFsdWVzTGltaXQkMShvYmosIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBWYWx1ZXNgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwVmFsdWVzfSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBtYXBWYWx1ZXNTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBWYWx1ZXNde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXBWYWx1ZXN9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIHZhbHVlIGFuZCBrZXlcbiAgICAgKiBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gYHJlc3VsdGAgaXMgYSBuZXcgb2JqZWN0IGNvbnNpc3RpbmdcbiAgICAgKiBvZiBlYWNoIGtleSBmcm9tIGBvYmpgLCB3aXRoIGVhY2ggdHJhbnNmb3JtZWQgdmFsdWUgb24gdGhlIHJpZ2h0LWhhbmQgc2lkZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBWYWx1ZXNTZXJpZXMob2JqLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlc0xpbWl0JDEob2JqLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FjaGVzIHRoZSByZXN1bHRzIG9mIGFuIGFzeW5jIGZ1bmN0aW9uLiBXaGVuIGNyZWF0aW5nIGEgaGFzaCB0byBzdG9yZVxuICAgICAqIGZ1bmN0aW9uIHJlc3VsdHMgYWdhaW5zdCwgdGhlIGNhbGxiYWNrIGlzIG9taXR0ZWQgZnJvbSB0aGUgaGFzaCBhbmQgYW5cbiAgICAgKiBvcHRpb25hbCBoYXNoIGZ1bmN0aW9uIGNhbiBiZSB1c2VkLlxuICAgICAqXG4gICAgICogKipOb3RlOiBpZiB0aGUgYXN5bmMgZnVuY3Rpb24gZXJycywgdGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBjYWNoZWQgYW5kXG4gICAgICogc3Vic2VxdWVudCBjYWxscyB3aWxsIGNhbGwgdGhlIHdyYXBwZWQgZnVuY3Rpb24uKipcbiAgICAgKlxuICAgICAqIElmIG5vIGhhc2ggZnVuY3Rpb24gaXMgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhhc2gga2V5LFxuICAgICAqIHdoaWNoIG1heSB3b3JrIHJlYXNvbmFibHkgaWYgaXQgaXMgYSBzdHJpbmcgb3IgYSBkYXRhIHR5cGUgdGhhdCBjb252ZXJ0cyB0byBhXG4gICAgICogZGlzdGluY3Qgc3RyaW5nLiBOb3RlIHRoYXQgb2JqZWN0cyBhbmQgYXJyYXlzIHdpbGwgbm90IGJlaGF2ZSByZWFzb25hYmx5LlxuICAgICAqIE5laXRoZXIgd2lsbCBjYXNlcyB3aGVyZSB0aGUgb3RoZXIgYXJndW1lbnRzIGFyZSBzaWduaWZpY2FudC4gSW4gc3VjaCBjYXNlcyxcbiAgICAgKiBzcGVjaWZ5IHlvdXIgb3duIGhhc2ggZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGUgY2FjaGUgb2YgcmVzdWx0cyBpcyBleHBvc2VkIGFzIHRoZSBgbWVtb2AgcHJvcGVydHkgb2YgdGhlIGZ1bmN0aW9uXG4gICAgICogcmV0dXJuZWQgYnkgYG1lbW9pemVgLlxuICAgICAqXG4gICAgICogQG5hbWUgbWVtb2l6ZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmbiAtIFRoZSBhc3luYyBmdW5jdGlvbiB0byBwcm94eSBhbmQgY2FjaGUgcmVzdWx0cyBmcm9tLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc2hlciAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIGEgY3VzdG9tIGhhc2hcbiAgICAgKiBmb3Igc3RvcmluZyByZXN1bHRzLiBJdCBoYXMgYWxsIHRoZSBhcmd1bWVudHMgYXBwbGllZCB0byBpdCBhcGFydCBmcm9tIHRoZVxuICAgICAqIGNhbGxiYWNrLCBhbmQgbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gYSBtZW1vaXplZCB2ZXJzaW9uIG9mIGBmbmBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNsb3dfZm4gPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmdcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgKiB9O1xuICAgICAqIHZhciBmbiA9IGFzeW5jLm1lbW9pemUoc2xvd19mbik7XG4gICAgICpcbiAgICAgKiAvLyBmbiBjYW4gbm93IGJlIHVzZWQgYXMgaWYgaXQgd2VyZSBzbG93X2ZuXG4gICAgICogZm4oJ3NvbWUgbmFtZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAvLyBjYWxsYmFja1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemUoZm4sIGhhc2hlciA9IHYgPT4gdikge1xuICAgICAgICB2YXIgbWVtbyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHZhciBxdWV1ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGZuKTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gaW5pdGlhbFBhcmFtcygoYXJncywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIoLi4uYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMSgoKSA9PiBjYWxsYmFjayhudWxsLCAuLi5tZW1vW2tleV0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgX2ZuKC4uLmFyZ3MsIChlcnIsIC4uLnJlc3VsdEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gIzE0NjUgZG9uJ3QgbWVtb2l6ZSBpZiBhbiBlcnJvciBvY2N1cnJlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gcmVzdWx0QXJncztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0oZXJyLCAuLi5yZXN1bHRBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5cbiAgICAvKipcbiAgICAgKiBDYWxscyBgY2FsbGJhY2tgIG9uIGEgbGF0ZXIgbG9vcCBhcm91bmQgdGhlIGV2ZW50IGxvb3AuIEluIE5vZGUuanMgdGhpcyBqdXN0XG4gICAgICogY2FsbHMgYHByb2Nlc3MubmV4dFRpY2tgLiAgSW4gdGhlIGJyb3dzZXIgaXQgd2lsbCB1c2UgYHNldEltbWVkaWF0ZWAgaWZcbiAgICAgKiBhdmFpbGFibGUsIG90aGVyd2lzZSBgc2V0VGltZW91dChjYWxsYmFjaywgMClgLCB3aGljaCBtZWFucyBvdGhlciBoaWdoZXJcbiAgICAgKiBwcmlvcml0eSBldmVudHMgbWF5IHByZWNlZGUgdGhlIGV4ZWN1dGlvbiBvZiBgY2FsbGJhY2tgLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJyb3dzZXItY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy5cbiAgICAgKlxuICAgICAqIEBuYW1lIG5leHRUaWNrXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuc2V0SW1tZWRpYXRlXXtAbGluayBtb2R1bGU6VXRpbHMuc2V0SW1tZWRpYXRlfVxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBhIGxhdGVyIGxvb3AgYXJvdW5kXG4gICAgICogdGhlIGV2ZW50IGxvb3AuIEludm9rZWQgd2l0aCAoYXJncy4uLikuXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmdzLi4uIC0gYW55IG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZVxuICAgICAqIGNhbGxiYWNrIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBjYWxsX29yZGVyID0gW107XG4gICAgICogYXN5bmMubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICogICAgIGNhbGxfb3JkZXIucHVzaCgndHdvJyk7XG4gICAgICogICAgIC8vIGNhbGxfb3JkZXIgbm93IGVxdWFscyBbJ29uZScsJ3R3byddXG4gICAgICogfSk7XG4gICAgICogY2FsbF9vcmRlci5wdXNoKCdvbmUnKTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAqICAgICAvLyBhLCBiLCBhbmQgYyBlcXVhbCAxLCAyLCBhbmQgM1xuICAgICAqIH0sIDEsIDIsIDMpO1xuICAgICAqL1xuICAgIHZhciBfZGVmZXI7XG5cbiAgICBpZiAoaGFzTmV4dFRpY2spIHtcbiAgICAgICAgX2RlZmVyID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2UgaWYgKGhhc1NldEltbWVkaWF0ZSkge1xuICAgICAgICBfZGVmZXIgPSBzZXRJbW1lZGlhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2RlZmVyID0gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgdmFyIG5leHRUaWNrID0gd3JhcChfZGVmZXIpO1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGF3YWl0aWZ5KChlYWNoZm4sIHRhc2tzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IGlzQXJyYXlMaWtlKHRhc2tzKSA/IFtdIDoge307XG5cbiAgICAgICAgZWFjaGZuKHRhc2tzLCAodGFzaywga2V5LCB0YXNrQ2IpID0+IHtcbiAgICAgICAgICAgIHdyYXBBc3luYyh0YXNrKSgoZXJyLCAuLi5yZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdF0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB0YXNrQ2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4gY2FsbGJhY2soZXJyLCByZXN1bHRzKSk7XG4gICAgfSwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGhlIGB0YXNrc2AgY29sbGVjdGlvbiBvZiBmdW5jdGlvbnMgaW4gcGFyYWxsZWwsIHdpdGhvdXQgd2FpdGluZyB1bnRpbFxuICAgICAqIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiBJZiBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBwYXNzIGFuIGVycm9yIHRvXG4gICAgICogaXRzIGNhbGxiYWNrLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGVcbiAgICAgKiBlcnJvci4gT25jZSB0aGUgYHRhc2tzYCBoYXZlIGNvbXBsZXRlZCwgdGhlIHJlc3VsdHMgYXJlIHBhc3NlZCB0byB0aGUgZmluYWxcbiAgICAgKiBgY2FsbGJhY2tgIGFzIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIGBwYXJhbGxlbGAgaXMgYWJvdXQga2lja2luZy1vZmYgSS9PIHRhc2tzIGluIHBhcmFsbGVsLCBub3QgYWJvdXRcbiAgICAgKiBwYXJhbGxlbCBleGVjdXRpb24gb2YgY29kZS4gIElmIHlvdXIgdGFza3MgZG8gbm90IHVzZSBhbnkgdGltZXJzIG9yIHBlcmZvcm1cbiAgICAgKiBhbnkgSS9PLCB0aGV5IHdpbGwgYWN0dWFsbHkgYmUgZXhlY3V0ZWQgaW4gc2VyaWVzLiAgQW55IHN5bmNocm9ub3VzIHNldHVwXG4gICAgICogc2VjdGlvbnMgZm9yIGVhY2ggdGFzayB3aWxsIGhhcHBlbiBvbmUgYWZ0ZXIgdGhlIG90aGVyLiAgSmF2YVNjcmlwdCByZW1haW5zXG4gICAgICogc2luZ2xlLXRocmVhZGVkLlxuICAgICAqXG4gICAgICogKipIaW50OioqIFVzZSBbYHJlZmxlY3RgXXtAbGluayBtb2R1bGU6VXRpbHMucmVmbGVjdH0gdG8gY29udGludWUgdGhlXG4gICAgICogZXhlY3V0aW9uIG9mIG90aGVyIHRhc2tzIHdoZW4gYSB0YXNrIGZhaWxzLlxuICAgICAqXG4gICAgICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIEVhY2ggcHJvcGVydHkgd2lsbFxuICAgICAqIGJlIHJ1biBhcyBhIGZ1bmN0aW9uIGFuZCB0aGUgcmVzdWx0cyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZmluYWwgYGNhbGxiYWNrYFxuICAgICAqIGFzIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5LiBUaGlzIGNhbiBiZSBhIG1vcmUgcmVhZGFibGUgd2F5IG9mIGhhbmRsaW5nXG4gICAgICogcmVzdWx0cyBmcm9tIHtAbGluayBhc3luYy5wYXJhbGxlbH0uXG4gICAgICpcbiAgICAgKiBAbmFtZSBwYXJhbGxlbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSB0YXNrcyAtIEEgY29sbGVjdGlvbiBvZlxuICAgICAqIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHJ1bi5cbiAgICAgKiBFYWNoIGFzeW5jIGZ1bmN0aW9uIGNhbiBjb21wbGV0ZSB3aXRoIGFueSBudW1iZXIgb2Ygb3B0aW9uYWwgYHJlc3VsdGAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBydW4gb25jZSBhbGwgdGhlXG4gICAgICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVzdWx0cyBhcnJheVxuICAgICAqIChvciBvYmplY3QpIGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdGFzayBjYWxsYmFja3MuXG4gICAgICogSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgbm90IHBhc3NlZFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vVXNpbmcgQ2FsbGJhY2tzXG4gICAgICogYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogXSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ10gZXZlbiB0aG91Z2hcbiAgICAgKiAgICAgLy8gdGhlIHNlY29uZCBmdW5jdGlvbiBoYWQgYSBzaG9ydGVyIHRpbWVvdXQuXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBhbiBleGFtcGxlIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5XG4gICAgICogYXN5bmMucGFyYWxsZWwoe1xuICAgICAqICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAyKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnBhcmFsbGVsKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ10gZXZlbiB0aG91Z2hcbiAgICAgKiAgICAgLy8gdGhlIHNlY29uZCBmdW5jdGlvbiBoYWQgYSBzaG9ydGVyIHRpbWVvdXQuXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYy5wYXJhbGxlbCh7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvOiB7IG9uZTogMSwgdHdvOiAyIH1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIF0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ10gZXZlbiB0aG91Z2hcbiAgICAgKiAgICAgICAgIC8vIHRoZSBzZWNvbmQgZnVuY3Rpb24gaGFkIGEgc2hvcnRlciB0aW1lb3V0LlxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBhbiBleGFtcGxlIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5wYXJhbGxlbCh7XG4gICAgICogICAgICAgICAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICAgICAgICAgfVxuICAgICAqICAgICAgICAgfSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJhbGxlbCh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9wYXJhbGxlbChlYWNoT2YkMSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHBhcmFsbGVsYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnBhcmFsbGVsfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgcGFyYWxsZWxMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnBhcmFsbGVsXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucGFyYWxsZWx9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIG9mXG4gICAgICogW2FzeW5jIGZ1bmN0aW9uc117QGxpbmsgQXN5bmNGdW5jdGlvbn0gdG8gcnVuLlxuICAgICAqIEVhY2ggYXN5bmMgZnVuY3Rpb24gY2FuIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBydW4gb25jZSBhbGwgdGhlXG4gICAgICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVzdWx0cyBhcnJheVxuICAgICAqIChvciBvYmplY3QpIGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdGFzayBjYWxsYmFja3MuXG4gICAgICogSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgbm90IHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcmFsbGVsTGltaXQodGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX3BhcmFsbGVsKGVhY2hPZkxpbWl0JDIobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgcXVldWUgb2YgdGFza3MgZm9yIHRoZSB3b3JrZXIgZnVuY3Rpb24gdG8gY29tcGxldGUuXG4gICAgICogQHR5cGVkZWYge0l0ZXJhYmxlfSBRdWV1ZU9iamVjdFxuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBsZW5ndGggLSBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICogd2FpdGluZyB0byBiZSBwcm9jZXNzZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5sZW5ndGgoKWAuXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBzdGFydGVkIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgYW55XG4gICAgICogaXRlbXMgaGF2ZSBiZWVuIHB1c2hlZCBhbmQgcHJvY2Vzc2VkIGJ5IHRoZSBxdWV1ZS5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBydW5uaW5nIC0gYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIG51bWJlciBvZiBpdGVtc1xuICAgICAqIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5ydW5uaW5nKClgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHdvcmtlcnNMaXN0IC0gYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGFycmF5IG9mIGl0ZW1zXG4gICAgICogY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gSW52b2tlIHdpdGggYHF1ZXVlLndvcmtlcnNMaXN0KClgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGlkbGUgLSBhIGZ1bmN0aW9uIHJldHVybmluZyBmYWxzZSBpZiB0aGVyZSBhcmUgaXRlbXNcbiAgICAgKiB3YWl0aW5nIG9yIGJlaW5nIHByb2Nlc3NlZCwgb3IgdHJ1ZSBpZiBub3QuIEludm9rZSB3aXRoIGBxdWV1ZS5pZGxlKClgLlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb25jdXJyZW5jeSAtIGFuIGludGVnZXIgZm9yIGRldGVybWluaW5nIGhvdyBtYW55IGB3b3JrZXJgXG4gICAgICogZnVuY3Rpb25zIHNob3VsZCBiZSBydW4gaW4gcGFyYWxsZWwuIFRoaXMgcHJvcGVydHkgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgYVxuICAgICAqIGBxdWV1ZWAgaXMgY3JlYXRlZCB0byBhbHRlciB0aGUgY29uY3VycmVuY3kgb24tdGhlLWZseS5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gcGF5bG9hZCAtIGFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgaXRlbXMgYXJlXG4gICAgICogcGFzc2VkIHRvIHRoZSB3b3JrZXIgZnVuY3Rpb24gYXQgYSB0aW1lLiBvbmx5IGFwcGxpZXMgaWYgdGhpcyBpcyBhXG4gICAgICogW2NhcmdvXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuY2FyZ299IG9iamVjdFxuICAgICAqIEBwcm9wZXJ0eSB7QXN5bmNGdW5jdGlvbn0gcHVzaCAtIGFkZCBhIG5ldyB0YXNrIHRvIHRoZSBgcXVldWVgLiBDYWxscyBgY2FsbGJhY2tgXG4gICAgICogb25jZSB0aGUgYHdvcmtlcmAgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRhc2suIEluc3RlYWQgb2YgYSBzaW5nbGUgdGFzayxcbiAgICAgKiBhIGB0YXNrc2AgYXJyYXkgY2FuIGJlIHN1Ym1pdHRlZC4gVGhlIHJlc3BlY3RpdmUgY2FsbGJhY2sgaXMgdXNlZCBmb3IgZXZlcnlcbiAgICAgKiB0YXNrIGluIHRoZSBsaXN0LiBJbnZva2Ugd2l0aCBgcXVldWUucHVzaCh0YXNrLCBbY2FsbGJhY2tdKWAsXG4gICAgICogQHByb3BlcnR5IHtBc3luY0Z1bmN0aW9ufSB1bnNoaWZ0IC0gYWRkIGEgbmV3IHRhc2sgdG8gdGhlIGZyb250IG9mIHRoZSBgcXVldWVgLlxuICAgICAqIEludm9rZSB3aXRoIGBxdWV1ZS51bnNoaWZ0KHRhc2ssIFtjYWxsYmFja10pYC5cbiAgICAgKiBAcHJvcGVydHkge0FzeW5jRnVuY3Rpb259IHB1c2hBc3luYyAtIHRoZSBzYW1lIGFzIGBxLnB1c2hgLCBleGNlcHQgdGhpcyByZXR1cm5zXG4gICAgICogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyBpZiBhbiBlcnJvciBvY2N1cnMuXG4gICAgICogQHByb3BlcnR5IHtBc3luY0Z1bmN0aW9ufSB1bnNoaWZ0QXN5bmMgLSB0aGUgc2FtZSBhcyBgcS51bnNoaWZ0YCwgZXhjZXB0IHRoaXMgcmV0dXJuc1xuICAgICAqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgaWYgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHJlbW92ZSAtIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBxdWV1ZSB0aGF0IG1hdGNoIGEgdGVzdFxuICAgICAqIGZ1bmN0aW9uLiAgVGhlIHRlc3QgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYW4gb2JqZWN0IHdpdGggYSBgZGF0YWAgcHJvcGVydHksXG4gICAgICogYW5kIGEgYHByaW9yaXR5YCBwcm9wZXJ0eSwgaWYgdGhpcyBpcyBhXG4gICAgICogW3ByaW9yaXR5UXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5wcmlvcml0eVF1ZXVlfSBvYmplY3QuXG4gICAgICogSW52b2tlZCB3aXRoIGBxdWV1ZS5yZW1vdmUodGVzdEZuKWAsIHdoZXJlIGB0ZXN0Rm5gIGlzIG9mIHRoZSBmb3JtXG4gICAgICogYGZ1bmN0aW9uICh7ZGF0YSwgcHJpb3JpdHl9KSB7fWAgYW5kIHJldHVybnMgYSBCb29sZWFuLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHNhdHVyYXRlZCAtIGEgZnVuY3Rpb24gdGhhdCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpc1xuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBudW1iZXIgb2YgcnVubmluZyB3b3JrZXJzIGhpdHMgdGhlIGBjb25jdXJyZW5jeWAgbGltaXQsIGFuZFxuICAgICAqIGZ1cnRoZXIgdGFza3Mgd2lsbCBiZSBxdWV1ZWQuICBJZiB0aGUgY2FsbGJhY2sgaXMgb21pdHRlZCwgYHEuc2F0dXJhdGVkKClgXG4gICAgICogcmV0dXJucyBhIHByb21pc2UgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2UuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdW5zYXR1cmF0ZWQgLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXNcbiAgICAgKiBjYWxsZWQgd2hlbiB0aGUgbnVtYmVyIG9mIHJ1bm5pbmcgd29ya2VycyBpcyBsZXNzIHRoYW4gdGhlIGBjb25jdXJyZW5jeWAgJlxuICAgICAqIGBidWZmZXJgIGxpbWl0cywgYW5kIGZ1cnRoZXIgdGFza3Mgd2lsbCBub3QgYmUgcXVldWVkLiBJZiB0aGUgY2FsbGJhY2sgaXNcbiAgICAgKiBvbWl0dGVkLCBgcS51bnNhdHVyYXRlZCgpYCByZXR1cm5zIGEgcHJvbWlzZSBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZS5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYnVmZmVyIC0gQSBtaW5pbXVtIHRocmVzaG9sZCBidWZmZXIgaW4gb3JkZXIgdG8gc2F5IHRoYXRcbiAgICAgKiB0aGUgYHF1ZXVlYCBpcyBgdW5zYXR1cmF0ZWRgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGVtcHR5IC0gYSBmdW5jdGlvbiB0aGF0IHNldHMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZFxuICAgICAqIHdoZW4gdGhlIGxhc3QgaXRlbSBmcm9tIHRoZSBgcXVldWVgIGlzIGdpdmVuIHRvIGEgYHdvcmtlcmAuIElmIHRoZSBjYWxsYmFja1xuICAgICAqIGlzIG9taXR0ZWQsIGBxLmVtcHR5KClgIHJldHVybnMgYSBwcm9taXNlIGZvciB0aGUgbmV4dCBvY2N1cnJlbmNlLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGRyYWluIC0gYSBmdW5jdGlvbiB0aGF0IHNldHMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZFxuICAgICAqIHdoZW4gdGhlIGxhc3QgaXRlbSBmcm9tIHRoZSBgcXVldWVgIGhhcyByZXR1cm5lZCBmcm9tIHRoZSBgd29ya2VyYC4gSWYgdGhlXG4gICAgICogY2FsbGJhY2sgaXMgb21pdHRlZCwgYHEuZHJhaW4oKWAgcmV0dXJucyBhIHByb21pc2UgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2UuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZXJyb3IgLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkXG4gICAgICogd2hlbiBhIHRhc2sgZXJyb3JzLiBIYXMgdGhlIHNpZ25hdHVyZSBgZnVuY3Rpb24oZXJyb3IsIHRhc2spYC4gSWYgdGhlXG4gICAgICogY2FsbGJhY2sgaXMgb21pdHRlZCwgYGVycm9yKClgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVqZWN0cyBvbiB0aGUgbmV4dFxuICAgICAqIGVycm9yLlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGF1c2VkIC0gYSBib29sZWFuIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBxdWV1ZSBpc1xuICAgICAqIGluIGEgcGF1c2VkIHN0YXRlLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHBhdXNlIC0gYSBmdW5jdGlvbiB0aGF0IHBhdXNlcyB0aGUgcHJvY2Vzc2luZyBvZiB0YXNrc1xuICAgICAqIHVudGlsIGByZXN1bWUoKWAgaXMgY2FsbGVkLiBJbnZva2Ugd2l0aCBgcXVldWUucGF1c2UoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcmVzdW1lIC0gYSBmdW5jdGlvbiB0aGF0IHJlc3VtZXMgdGhlIHByb2Nlc3Npbmcgb2ZcbiAgICAgKiBxdWV1ZWQgdGFza3Mgd2hlbiB0aGUgcXVldWUgaXMgcGF1c2VkLiBJbnZva2Ugd2l0aCBgcXVldWUucmVzdW1lKClgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGtpbGwgLSBhIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyB0aGUgYGRyYWluYCBjYWxsYmFjayBhbmRcbiAgICAgKiBlbXB0aWVzIHJlbWFpbmluZyB0YXNrcyBmcm9tIHRoZSBxdWV1ZSBmb3JjaW5nIGl0IHRvIGdvIGlkbGUuIE5vIG1vcmUgdGFza3NcbiAgICAgKiBzaG91bGQgYmUgcHVzaGVkIHRvIHRoZSBxdWV1ZSBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIEludm9rZSB3aXRoIGBxdWV1ZS5raWxsKClgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCBxID0gYXN5bmMucXVldWUod29ya2VyLCAyKVxuICAgICAqIHEucHVzaChpdGVtMSlcbiAgICAgKiBxLnB1c2goaXRlbTIpXG4gICAgICogcS5wdXNoKGl0ZW0zKVxuICAgICAqIC8vIHF1ZXVlcyBhcmUgaXRlcmFibGUsIHNwcmVhZCBpbnRvIGFuIGFycmF5IHRvIGluc3BlY3RcbiAgICAgKiBjb25zdCBpdGVtcyA9IFsuLi5xXSAvLyBbaXRlbTEsIGl0ZW0yLCBpdGVtM11cbiAgICAgKiAvLyBvciB1c2UgZm9yIG9mXG4gICAgICogZm9yIChsZXQgaXRlbSBvZiBxKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGl0ZW0pXG4gICAgICogfVxuICAgICAqXG4gICAgICogcS5kcmFpbigoKSA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdhbGwgZG9uZScpXG4gICAgICogfSlcbiAgICAgKiAvLyBvclxuICAgICAqIGF3YWl0IHEuZHJhaW4oKVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBxdWV1ZWAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBgY29uY3VycmVuY3lgLiBUYXNrcyBhZGRlZCB0byB0aGVcbiAgICAgKiBgcXVldWVgIGFyZSBwcm9jZXNzZWQgaW4gcGFyYWxsZWwgKHVwIHRvIHRoZSBgY29uY3VycmVuY3lgIGxpbWl0KS4gSWYgYWxsXG4gICAgICogYHdvcmtlcmBzIGFyZSBpbiBwcm9ncmVzcywgdGhlIHRhc2sgaXMgcXVldWVkIHVudGlsIG9uZSBiZWNvbWVzIGF2YWlsYWJsZS5cbiAgICAgKiBPbmNlIGEgYHdvcmtlcmAgY29tcGxldGVzIGEgYHRhc2tgLCB0aGF0IGB0YXNrYCdzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHF1ZXVlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gd29ya2VyIC0gQW4gYXN5bmMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYSBxdWV1ZWQgdGFzay5cbiAgICAgKiBJZiB5b3Ugd2FudCB0byBoYW5kbGUgZXJyb3JzIGZyb20gYW4gaW5kaXZpZHVhbCB0YXNrLCBwYXNzIGEgY2FsbGJhY2sgdG9cbiAgICAgKiBgcS5wdXNoKClgLiBJbnZva2VkIHdpdGggKHRhc2ssIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbmN5PTFdIC0gQW4gYGludGVnZXJgIGZvciBkZXRlcm1pbmluZyBob3cgbWFueVxuICAgICAqIGB3b3JrZXJgIGZ1bmN0aW9ucyBzaG91bGQgYmUgcnVuIGluIHBhcmFsbGVsLiAgSWYgb21pdHRlZCwgdGhlIGNvbmN1cnJlbmN5XG4gICAgICogZGVmYXVsdHMgdG8gYDFgLiAgSWYgdGhlIGNvbmN1cnJlbmN5IGlzIGAwYCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgcXVldWUgb2JqZWN0IHRvIG1hbmFnZSB0aGUgdGFza3MuIENhbGxiYWNrcyBjYW4gYmVcbiAgICAgKiBhdHRhY2hlZCBhcyBjZXJ0YWluIHByb3BlcnRpZXMgdG8gbGlzdGVuIGZvciBzcGVjaWZpYyBldmVudHMgZHVyaW5nIHRoZVxuICAgICAqIGxpZmVjeWNsZSBvZiB0aGUgcXVldWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGNyZWF0ZSBhIHF1ZXVlIG9iamVjdCB3aXRoIGNvbmN1cnJlbmN5IDJcbiAgICAgKiB2YXIgcSA9IGFzeW5jLnF1ZXVlKGZ1bmN0aW9uKHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdoZWxsbyAnICsgdGFzay5uYW1lKTtcbiAgICAgKiAgICAgY2FsbGJhY2soKTtcbiAgICAgKiB9LCAyKTtcbiAgICAgKlxuICAgICAqIC8vIGFzc2lnbiBhIGNhbGxiYWNrXG4gICAgICogcS5kcmFpbihmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2FsbCBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkJyk7XG4gICAgICogfSk7XG4gICAgICogLy8gb3IgYXdhaXQgdGhlIGVuZFxuICAgICAqIGF3YWl0IHEuZHJhaW4oKVxuICAgICAqXG4gICAgICogLy8gYXNzaWduIGFuIGVycm9yIGNhbGxiYWNrXG4gICAgICogcS5lcnJvcihmdW5jdGlvbihlcnIsIHRhc2spIHtcbiAgICAgKiAgICAgY29uc29sZS5lcnJvcigndGFzayBleHBlcmllbmNlZCBhbiBlcnJvcicpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXMgdG8gdGhlIHF1ZXVlXG4gICAgICogcS5wdXNoKHtuYW1lOiAnZm9vJ30sIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBmb28nKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyBjYWxsYmFjayBpcyBvcHRpb25hbFxuICAgICAqIHEucHVzaCh7bmFtZTogJ2Jhcid9KTtcbiAgICAgKlxuICAgICAqIC8vIGFkZCBzb21lIGl0ZW1zIHRvIHRoZSBxdWV1ZSAoYmF0Y2gtd2lzZSlcbiAgICAgKiBxLnB1c2goW3tuYW1lOiAnYmF6J30se25hbWU6ICdiYXknfSx7bmFtZTogJ2JheCd9XSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGl0ZW0nKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFkZCBzb21lIGl0ZW1zIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWVcbiAgICAgKiBxLnVuc2hpZnQoe25hbWU6ICdiYXInfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXInKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBxdWV1ZSAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgX3dvcmtlciA9IHdyYXBBc3luYyh3b3JrZXIpO1xuICAgICAgICByZXR1cm4gcXVldWUkMSgoaXRlbXMsIGNiKSA9PiB7XG4gICAgICAgICAgICBfd29ya2VyKGl0ZW1zWzBdLCBjYik7XG4gICAgICAgIH0sIGNvbmN1cnJlbmN5LCAxKTtcbiAgICB9XG5cbiAgICAvLyBCaW5hcnkgbWluLWhlYXAgaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgcHJpb3JpdHkgcXVldWUuXG4gICAgLy8gSW1wbGVtZW50YXRpb24gaXMgc3RhYmxlLCBpLmUuIHB1c2ggdGltZSBpcyBjb25zaWRlcmVkIGZvciBlcXVhbCBwcmlvcml0aWVzXG4gICAgY2xhc3MgSGVhcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5oZWFwID0gW107XG4gICAgICAgICAgICB0aGlzLnB1c2hDb3VudCA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlYXAubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgZW1wdHkgKCkge1xuICAgICAgICAgICAgdGhpcy5oZWFwID0gW107XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcmNVcChpbmRleCkge1xuICAgICAgICAgICAgbGV0IHA7XG5cbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA+IDAgJiYgc21hbGxlcih0aGlzLmhlYXBbaW5kZXhdLCB0aGlzLmhlYXBbcD1wYXJlbnQoaW5kZXgpXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IHRoaXMuaGVhcFtpbmRleF07XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFwW2luZGV4XSA9IHRoaXMuaGVhcFtwXTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYXBbcF0gPSB0O1xuXG4gICAgICAgICAgICAgICAgaW5kZXggPSBwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcGVyY0Rvd24oaW5kZXgpIHtcbiAgICAgICAgICAgIGxldCBsO1xuXG4gICAgICAgICAgICB3aGlsZSAoKGw9bGVmdENoaShpbmRleCkpIDwgdGhpcy5oZWFwLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChsKzEgPCB0aGlzLmhlYXAubGVuZ3RoICYmIHNtYWxsZXIodGhpcy5oZWFwW2wrMV0sIHRoaXMuaGVhcFtsXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbCA9IGwrMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc21hbGxlcih0aGlzLmhlYXBbaW5kZXhdLCB0aGlzLmhlYXBbbF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCB0ID0gdGhpcy5oZWFwW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYXBbaW5kZXhdID0gdGhpcy5oZWFwW2xdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtsXSA9IHQ7XG5cbiAgICAgICAgICAgICAgICBpbmRleCA9IGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKG5vZGUpIHtcbiAgICAgICAgICAgIG5vZGUucHVzaENvdW50ID0gKyt0aGlzLnB1c2hDb3VudDtcbiAgICAgICAgICAgIHRoaXMuaGVhcC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy5wZXJjVXAodGhpcy5oZWFwLmxlbmd0aC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVuc2hpZnQobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhcC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hpZnQoKSB7XG4gICAgICAgICAgICBsZXQgW3RvcF0gPSB0aGlzLmhlYXA7XG5cbiAgICAgICAgICAgIHRoaXMuaGVhcFswXSA9IHRoaXMuaGVhcFt0aGlzLmhlYXAubGVuZ3RoLTFdO1xuICAgICAgICAgICAgdGhpcy5oZWFwLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5wZXJjRG93bigwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvQXJyYXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLnRoaXNdO1xuICAgICAgICB9XG5cbiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5oZWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5oZWFwW2ldLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmUgKHRlc3RGbikge1xuICAgICAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmhlYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRlc3RGbih0aGlzLmhlYXBbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtqXSA9IHRoaXMuaGVhcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oZWFwLnNwbGljZShqKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudCh0aGlzLmhlYXAubGVuZ3RoLTEpOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVyY0Rvd24oaSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGVmdENoaShpKSB7XG4gICAgICAgIHJldHVybiAoaTw8MSkrMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJlbnQoaSkge1xuICAgICAgICByZXR1cm4gKChpKzEpPj4xKS0xO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNtYWxsZXIoeCwgeSkge1xuICAgICAgICBpZiAoeC5wcmlvcml0eSAhPT0geS5wcmlvcml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIHgucHJpb3JpdHkgPCB5LnByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHgucHVzaENvdW50IDwgeS5wdXNoQ291bnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYXN5bmMucXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX0gb25seSB0YXNrcyBhcmUgYXNzaWduZWQgYSBwcmlvcml0eSBhbmRcbiAgICAgKiBjb21wbGV0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5IG9yZGVyLlxuICAgICAqXG4gICAgICogQG5hbWUgcHJpb3JpdHlRdWV1ZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnF1ZXVlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gd29ya2VyIC0gQW4gYXN5bmMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYSBxdWV1ZWQgdGFzay5cbiAgICAgKiBJZiB5b3Ugd2FudCB0byBoYW5kbGUgZXJyb3JzIGZyb20gYW4gaW5kaXZpZHVhbCB0YXNrLCBwYXNzIGEgY2FsbGJhY2sgdG9cbiAgICAgKiBgcS5wdXNoKClgLlxuICAgICAqIEludm9rZWQgd2l0aCAodGFzaywgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb25jdXJyZW5jeSAtIEFuIGBpbnRlZ2VyYCBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgYHdvcmtlcmBcbiAgICAgKiBmdW5jdGlvbnMgc2hvdWxkIGJlIHJ1biBpbiBwYXJhbGxlbC4gIElmIG9taXR0ZWQsIHRoZSBjb25jdXJyZW5jeSBkZWZhdWx0cyB0b1xuICAgICAqIGAxYC4gIElmIHRoZSBjb25jdXJyZW5jeSBpcyBgMGAsIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkNvbnRyb2xGbG93LlF1ZXVlT2JqZWN0fSBBIHByaW9yaXR5UXVldWUgb2JqZWN0IHRvIG1hbmFnZSB0aGUgdGFza3MuIFRoZXJlIGFyZSB0aHJlZVxuICAgICAqIGRpZmZlcmVuY2VzIGJldHdlZW4gYHF1ZXVlYCBhbmQgYHByaW9yaXR5UXVldWVgIG9iamVjdHM6XG4gICAgICogKiBgcHVzaCh0YXNrLCBwcmlvcml0eSwgW2NhbGxiYWNrXSlgIC0gYHByaW9yaXR5YCBzaG91bGQgYmUgYSBudW1iZXIuIElmIGFuXG4gICAgICogICBhcnJheSBvZiBgdGFza3NgIGlzIGdpdmVuLCBhbGwgdGFza3Mgd2lsbCBiZSBhc3NpZ25lZCB0aGUgc2FtZSBwcmlvcml0eS5cbiAgICAgKiAqIGBwdXNoQXN5bmModGFzaywgcHJpb3JpdHksIFtjYWxsYmFja10pYCAtIHRoZSBzYW1lIGFzIGBwcmlvcml0eVF1ZXVlLnB1c2hgLFxuICAgICAqICAgZXhjZXB0IHRoaXMgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZWplY3RzIGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKiAqIFRoZSBgdW5zaGlmdGAgYW5kIGB1bnNoaWZ0QXN5bmNgIG1ldGhvZHMgd2VyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByaW9yaXR5UXVldWUod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gcXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgdmFyIHtcbiAgICAgICAgICAgIHB1c2gsXG4gICAgICAgICAgICBwdXNoQXN5bmNcbiAgICAgICAgfSA9IHE7XG5cbiAgICAgICAgcS5fdGFza3MgPSBuZXcgSGVhcCgpO1xuICAgICAgICBxLl9jcmVhdGVUYXNrSXRlbSA9ICh7ZGF0YSwgcHJpb3JpdHl9LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGFJdGVtcyh0YXNrcywgcHJpb3JpdHkpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge2RhdGE6IHRhc2tzLCBwcmlvcml0eX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFza3MubWFwKGRhdGEgPT4geyByZXR1cm4ge2RhdGEsIHByaW9yaXR5fTsgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbihkYXRhLCBwcmlvcml0eSA9IDAsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gcHVzaChjcmVhdGVEYXRhSXRlbXMoZGF0YSwgcHJpb3JpdHkpLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcS5wdXNoQXN5bmMgPSBmdW5jdGlvbihkYXRhLCBwcmlvcml0eSA9IDAsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gcHVzaEFzeW5jKGNyZWF0ZURhdGFJdGVtcyhkYXRhLCBwcmlvcml0eSksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvbnNcbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdEFzeW5jO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgdGhlIGB0YXNrc2AgYXJyYXkgb2YgZnVuY3Rpb25zIGluIHBhcmFsbGVsLCB3aXRob3V0IHdhaXRpbmcgdW50aWwgdGhlXG4gICAgICogcHJldmlvdXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZC4gT25jZSBhbnkgb2YgdGhlIGB0YXNrc2AgY29tcGxldGUgb3IgcGFzcyBhblxuICAgICAqIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgdGhlIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQuIEl0J3NcbiAgICAgKiBlcXVpdmFsZW50IHRvIGBQcm9taXNlLnJhY2UoKWAuXG4gICAgICpcbiAgICAgKiBAbmFtZSByYWNlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl9IHRhc2tzIC0gQW4gYXJyYXkgY29udGFpbmluZyBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufVxuICAgICAqIHRvIHJ1bi4gRWFjaCBmdW5jdGlvbiBjYW4gY29tcGxldGUgd2l0aCBhbiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYW55IG9mIHRoZSBmdW5jdGlvbnMgaGF2ZVxuICAgICAqIGNvbXBsZXRlZC4gVGhpcyBmdW5jdGlvbiBnZXRzIGFuIGVycm9yIG9yIHJlc3VsdCBmcm9tIHRoZSBmaXJzdCBmdW5jdGlvbiB0aGF0XG4gICAgICogY29tcGxldGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMucmFjZShbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLFxuICAgICAqIC8vIG1haW4gY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyB0aGUgcmVzdWx0IHdpbGwgYmUgZXF1YWwgdG8gJ3R3bycgYXMgaXQgZmluaXNoZXMgZWFybGllclxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJhY2UodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrcykpIHJldHVybiBjYWxsYmFjayhuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCB0byByYWNlIG11c3QgYmUgYW4gYXJyYXkgb2YgZnVuY3Rpb25zJykpO1xuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFza3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICB3cmFwQXN5bmModGFza3NbaV0pKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciByYWNlJDEgPSBhd2FpdGlmeShyYWNlLCAyKTtcblxuICAgIC8qKlxuICAgICAqIFNhbWUgYXMgW2ByZWR1Y2VgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVkdWNlfSwgb25seSBvcGVyYXRlcyBvbiBgYXJyYXlgIGluIHJldmVyc2Ugb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZWR1Y2VSaWdodFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlZHVjZV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlZHVjZX1cbiAgICAgKiBAYWxpYXMgZm9sZHJcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0geyp9IG1lbW8gLSBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgcmVkdWN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIGFwcGxpZWQgdG8gZWFjaCBpdGVtIGluIHRoZVxuICAgICAqIGFycmF5IHRvIHByb2R1Y2UgdGhlIG5leHQgc3RlcCBpbiB0aGUgcmVkdWN0aW9uLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSByZWR1Y3Rpb24uXG4gICAgICogSWYgdGhlIGl0ZXJhdGVlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLCB0aGUgcmVkdWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZVxuICAgICAqIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICogSW52b2tlZCB3aXRoIChtZW1vLCBpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBSZXN1bHQgaXMgdGhlIHJlZHVjZWQgdmFsdWUuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkdWNlUmlnaHQgKGFycmF5LCBtZW1vLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gWy4uLmFycmF5XS5yZXZlcnNlKCk7XG4gICAgICAgIHJldHVybiByZWR1Y2UkMShyZXZlcnNlZCwgbWVtbywgaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcmFwcyB0aGUgYXN5bmMgZnVuY3Rpb24gaW4gYW5vdGhlciBmdW5jdGlvbiB0aGF0IGFsd2F5cyBjb21wbGV0ZXMgd2l0aCBhXG4gICAgICogcmVzdWx0IG9iamVjdCwgZXZlbiB3aGVuIGl0IGVycm9ycy5cbiAgICAgKlxuICAgICAqIFRoZSByZXN1bHQgb2JqZWN0IGhhcyBlaXRoZXIgdGhlIHByb3BlcnR5IGBlcnJvcmAgb3IgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlZmxlY3RcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSBUaGUgYXN5bmMgZnVuY3Rpb24geW91IHdhbnQgdG8gd3JhcFxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gLSBBIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHBhc3NlcyBudWxsIHRvIGl0J3MgY2FsbGJhY2sgYXNcbiAgICAgKiB0aGUgZXJyb3IuIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIHdpbGwgYmUgYW4gYG9iamVjdGAgd2l0aFxuICAgICAqIGVpdGhlciBhbiBgZXJyb3JgIG9yIGEgYHZhbHVlYCBwcm9wZXJ0eS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICBhc3luYy5yZWZsZWN0KGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21lIHN0dWZmIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICB9KSxcbiAgICAgKiAgICAgYXN5bmMucmVmbGVjdChmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBtb3JlIHN0dWZmIGJ1dCBlcnJvciAuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKCdiYWQgc3R1ZmYgaGFwcGVuZWQnKTtcbiAgICAgKiAgICAgfSksXG4gICAgICogICAgIGFzeW5jLnJlZmxlY3QoZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWUgbW9yZSBzdHVmZiAuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgfSlcbiAgICAgKiBdLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIHZhbHVlc1xuICAgICAqICAgICAvLyByZXN1bHRzWzBdLnZhbHVlID0gJ29uZSdcbiAgICAgKiAgICAgLy8gcmVzdWx0c1sxXS5lcnJvciA9ICdiYWQgc3R1ZmYgaGFwcGVuZWQnXG4gICAgICogICAgIC8vIHJlc3VsdHNbMl0udmFsdWUgPSAndHdvJ1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZmxlY3QoZm4pIHtcbiAgICAgICAgdmFyIF9mbiA9IHdyYXBBc3luYyhmbik7XG4gICAgICAgIHJldHVybiBpbml0aWFsUGFyYW1zKGZ1bmN0aW9uIHJlZmxlY3RPbihhcmdzLCByZWZsZWN0Q2FsbGJhY2spIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgoZXJyb3IsIC4uLmNiQXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXRWYWwgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjYkFyZ3MubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNiQXJncztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNiQXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXSA9IGNiQXJncztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXRWYWwudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVmbGVjdENhbGxiYWNrKG51bGwsIHJldFZhbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIF9mbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCB3cmFwcyBhbiBhcnJheSBvciBhbiBvYmplY3Qgb2YgZnVuY3Rpb25zIHdpdGggYHJlZmxlY3RgLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVmbGVjdEFsbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlZmxlY3Rde0BsaW5rIG1vZHVsZTpVdGlscy5yZWZsZWN0fVxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8SXRlcmFibGV9IHRhc2tzIC0gVGhlIGNvbGxlY3Rpb24gb2ZcbiAgICAgKiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byB3cmFwIGluIGBhc3luYy5yZWZsZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgYXN5bmMgZnVuY3Rpb25zLCBlYWNoIHdyYXBwZWQgaW5cbiAgICAgKiBgYXN5bmMucmVmbGVjdGBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogbGV0IHRhc2tzID0gW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBtb3JlIHN0dWZmIGJ1dCBlcnJvciAuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignYmFkIHN0dWZmIGhhcHBlbmVkJykpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnBhcmFsbGVsKGFzeW5jLnJlZmxlY3RBbGwodGFza3MpLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIHZhbHVlc1xuICAgICAqICAgICAvLyByZXN1bHRzWzBdLnZhbHVlID0gJ29uZSdcbiAgICAgKiAgICAgLy8gcmVzdWx0c1sxXS5lcnJvciA9IEVycm9yKCdiYWQgc3R1ZmYgaGFwcGVuZWQnKVxuICAgICAqICAgICAvLyByZXN1bHRzWzJdLnZhbHVlID0gJ3R3bydcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBsZXQgdGFza3MgPSB7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgY2FsbGJhY2soJ3R3bycpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0aHJlZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnBhcmFsbGVsKGFzeW5jLnJlZmxlY3RBbGwodGFza3MpLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIHZhbHVlc1xuICAgICAqICAgICAvLyByZXN1bHRzLm9uZS52YWx1ZSA9ICdvbmUnXG4gICAgICogICAgIC8vIHJlc3VsdHMudHdvLmVycm9yID0gJ3R3bydcbiAgICAgKiAgICAgLy8gcmVzdWx0cy50aHJlZS52YWx1ZSA9ICd0aHJlZSdcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWZsZWN0QWxsKHRhc2tzKSB7XG4gICAgICAgIHZhciByZXN1bHRzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHJlc3VsdHMgPSB0YXNrcy5tYXAocmVmbGVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRzID0ge307XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0YXNrcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHJlZmxlY3QuY2FsbCh0aGlzLCB0YXNrc1trZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdCQyKGVhY2hmbiwgYXJyLCBfaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdGVlID0gd3JhcEFzeW5jKF9pdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBfZmlsdGVyKGVhY2hmbiwgYXJyLCAodmFsdWUsIGNiKSA9PiB7XG4gICAgICAgICAgICBpdGVyYXRlZSh2YWx1ZSwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIGNiKGVyciwgIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgW2BmaWx0ZXJgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfS4gUmVtb3ZlcyB2YWx1ZXMgdGhhdCBwYXNzIGFuIGBhc3luY2AgdHJ1dGggdGVzdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlamVjdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmZpbHRlcl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgYHJlc3VsdGAuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydkaXIxL2ZpbGUxLnR4dCcsJ2RpcjIvZmlsZTMudHh0JywnZGlyMy9maWxlNi50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5yZWplY3QoZmlsZUxpc3QsIGZpbGVFeGlzdHMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgIC8vIFsgJ2RpcjMvZmlsZTYudHh0JyBdXG4gICAgICogICAgLy8gcmVzdWx0cyBub3cgZXF1YWxzIGFuIGFycmF5IG9mIHRoZSBub24tZXhpc3RpbmcgZmlsZXNcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMucmVqZWN0KGZpbGVMaXN0LCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIFsgJ2RpcjMvZmlsZTYudHh0JyBdXG4gICAgICogICAgIC8vIHJlc3VsdHMgbm93IGVxdWFscyBhbiBhcnJheSBvZiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMucmVqZWN0KGZpbGVMaXN0LCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gWyAnZGlyMy9maWxlNi50eHQnIF1cbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgbm93IGVxdWFscyBhbiBhcnJheSBvZiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlamVjdCAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiByZWplY3QkMihlYWNoT2YkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgcmVqZWN0JDEgPSBhd2FpdGlmeShyZWplY3QsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2ByZWplY3RgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVqZWN0fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVqZWN0TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5yZWplY3Rde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWplY3R9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWplY3RMaW1pdCAoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gcmVqZWN0JDIoZWFjaE9mTGltaXQkMihsaW1pdCksIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHJlamVjdExpbWl0JDEgPSBhd2FpdGlmeShyZWplY3RMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHJlamVjdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWplY3R9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlamVjdFNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlamVjdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlamVjdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgYHJlc3VsdGAuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVqZWN0U2VyaWVzIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCQyKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciByZWplY3RTZXJpZXMkMSA9IGF3YWl0aWZ5KHJlamVjdFNlcmllcywgMyk7XG5cbiAgICBmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gZ2V0IGEgc3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGB0YXNrYCBubyBtb3JlIHRoYW4gYHRpbWVzYCB0aW1lc1xuICAgICAqIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3IuIElmIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWwsIHRoZSBgY2FsbGJhY2tgIHdpbGwgYmVcbiAgICAgKiBwYXNzZWQgdGhlIHJlc3VsdCBvZiB0aGUgc3VjY2Vzc2Z1bCB0YXNrLiBJZiBhbGwgYXR0ZW1wdHMgZmFpbCwgdGhlIGNhbGxiYWNrXG4gICAgICogd2lsbCBiZSBwYXNzZWQgdGhlIGVycm9yIGFuZCByZXN1bHQgKGlmIGFueSkgb2YgdGhlIGZpbmFsIGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZXRyeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAc2VlIFthc3luYy5yZXRyeWFibGVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5yZXRyeWFibGV9XG4gICAgICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSBbb3B0cyA9IHt0aW1lczogNSwgaW50ZXJ2YWw6IDB9fCA1XSAtIENhbiBiZSBlaXRoZXIgYW5cbiAgICAgKiBvYmplY3Qgd2l0aCBgdGltZXNgIGFuZCBgaW50ZXJ2YWxgIG9yIGEgbnVtYmVyLlxuICAgICAqICogYHRpbWVzYCAtIFRoZSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gbWFrZSBiZWZvcmUgZ2l2aW5nIHVwLiAgVGhlIGRlZmF1bHRcbiAgICAgKiAgIGlzIGA1YC5cbiAgICAgKiAqIGBpbnRlcnZhbGAgLSBUaGUgdGltZSB0byB3YWl0IGJldHdlZW4gcmV0cmllcywgaW4gbWlsbGlzZWNvbmRzLiAgVGhlXG4gICAgICogICBkZWZhdWx0IGlzIGAwYC4gVGhlIGludGVydmFsIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhIGZ1bmN0aW9uIG9mIHRoZVxuICAgICAqICAgcmV0cnkgY291bnQgKHNlZSBleGFtcGxlKS5cbiAgICAgKiAqIGBlcnJvckZpbHRlcmAgLSBBbiBvcHRpb25hbCBzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgb25cbiAgICAgKiAgIGVycm9uZW91cyByZXN1bHQuIElmIGl0IHJldHVybnMgYHRydWVgIHRoZSByZXRyeSBhdHRlbXB0cyB3aWxsIGNvbnRpbnVlO1xuICAgICAqICAgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGZhbHNlYCB0aGUgcmV0cnkgZmxvdyBpcyBhYm9ydGVkIHdpdGggdGhlIGN1cnJlbnRcbiAgICAgKiAgIGF0dGVtcHQncyBlcnJvciBhbmQgcmVzdWx0IGJlaW5nIHJldHVybmVkIHRvIHRoZSBmaW5hbCBjYWxsYmFjay5cbiAgICAgKiAgIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiAqIElmIGBvcHRzYCBpcyBhIG51bWJlciwgdGhlIG51bWJlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSxcbiAgICAgKiAgIHdpdGggdGhlIGRlZmF1bHQgaW50ZXJ2YWwgb2YgYDBgLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gdGFzayAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIHJldHJ5LlxuICAgICAqIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGVcbiAgICAgKiB0YXNrIGhhcyBzdWNjZWVkZWQsIG9yIGFmdGVyIHRoZSBmaW5hbCBmYWlsZWQgYXR0ZW1wdC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgXG4gICAgICogYW5kIGByZXN1bHRgIGFyZ3VtZW50cyBvZiB0aGUgbGFzdCBhdHRlbXB0IGF0IGNvbXBsZXRpbmcgdGhlIGB0YXNrYC4gSW52b2tlZFxuICAgICAqIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgcmV0cnlgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgc3RhbmQtYWxvbmUgY29udHJvbCBmbG93IGJ5IHBhc3NpbmdcbiAgICAgKiAvLyBhIGNhbGxiYWNrLCBhcyBzaG93biBiZWxvdzpcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCAzIHRpbWVzXG4gICAgICogYXN5bmMucmV0cnkoMywgYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0cnkgY2FsbGluZyBhcGlNZXRob2QgMyB0aW1lcywgd2FpdGluZyAyMDAgbXMgYmV0d2VlbiBlYWNoIHJldHJ5XG4gICAgICogYXN5bmMucmV0cnkoe3RpbWVzOiAzLCBpbnRlcnZhbDogMjAwfSwgYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0cnkgY2FsbGluZyBhcGlNZXRob2QgMTAgdGltZXMgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgICogLy8gKGkuZS4gaW50ZXJ2YWxzIG9mIDEwMCwgMjAwLCA0MDAsIDgwMCwgMTYwMCwgLi4uIG1pbGxpc2Vjb25kcylcbiAgICAgKiBhc3luYy5yZXRyeSh7XG4gICAgICogICB0aW1lczogMTAsXG4gICAgICogICBpbnRlcnZhbDogZnVuY3Rpb24ocmV0cnlDb3VudCkge1xuICAgICAqICAgICByZXR1cm4gNTAgKiBNYXRoLnBvdygyLCByZXRyeUNvdW50KTtcbiAgICAgKiAgIH1cbiAgICAgKiB9LCBhcGlNZXRob2QsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCB0aGUgZGVmYXVsdCA1IHRpbWVzIG5vIGRlbGF5IGJldHdlZW4gZWFjaCByZXRyeVxuICAgICAqIGFzeW5jLnJldHJ5KGFwaU1ldGhvZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gdHJ5IGNhbGxpbmcgYXBpTWV0aG9kIG9ubHkgd2hlbiBlcnJvciBjb25kaXRpb24gc2F0aXNmaWVzLCBhbGwgb3RoZXJcbiAgICAgKiAvLyBlcnJvcnMgd2lsbCBhYm9ydCB0aGUgcmV0cnkgY29udHJvbCBmbG93IGFuZCByZXR1cm4gdG8gZmluYWwgY2FsbGJhY2tcbiAgICAgKiBhc3luYy5yZXRyeSh7XG4gICAgICogICBlcnJvckZpbHRlcjogZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIHJldHVybiBlcnIubWVzc2FnZSA9PT0gJ1RlbXBvcmFyeSBlcnJvcic7IC8vIG9ubHkgcmV0cnkgb24gYSBzcGVjaWZpYyBlcnJvclxuICAgICAqICAgfVxuICAgICAqIH0sIGFwaU1ldGhvZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gdG8gcmV0cnkgaW5kaXZpZHVhbCBtZXRob2RzIHRoYXQgYXJlIG5vdCBhcyByZWxpYWJsZSB3aXRoaW4gb3RoZXJcbiAgICAgKiAvLyBjb250cm9sIGZsb3cgZnVuY3Rpb25zLCB1c2UgdGhlIGByZXRyeWFibGVgIHdyYXBwZXI6XG4gICAgICogYXN5bmMuYXV0byh7XG4gICAgICogICAgIHVzZXJzOiBhcGkuZ2V0VXNlcnMuYmluZChhcGkpLFxuICAgICAqICAgICBwYXltZW50czogYXN5bmMucmV0cnlhYmxlKDMsIGFwaS5nZXRQYXltZW50cy5iaW5kKGFwaSkpXG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRzXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKi9cbiAgICBjb25zdCBERUZBVUxUX1RJTUVTID0gNTtcbiAgICBjb25zdCBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgIGZ1bmN0aW9uIHJldHJ5KG9wdHMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbEZ1bmM6IGNvbnN0YW50KERFRkFVTFRfSU5URVJWQUwpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzICYmIHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2sgfHwgcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB0YXNrID0gb3B0cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IHByb21pc2VDYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0YXNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBmb3IgYXN5bmMucmV0cnlcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3Rhc2sgPSB3cmFwQXN5bmModGFzayk7XG5cbiAgICAgICAgdmFyIGF0dGVtcHQgPSAxO1xuICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQoKSB7XG4gICAgICAgICAgICBfdGFzaygoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVyblxuICAgICAgICAgICAgICAgIGlmIChlcnIgJiYgYXR0ZW1wdCsrIDwgb3B0aW9ucy50aW1lcyAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIG9wdGlvbnMuZXJyb3JGaWx0ZXIgIT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5lcnJvckZpbHRlcihlcnIpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJldHJ5QXR0ZW1wdCwgb3B0aW9ucy5pbnRlcnZhbEZ1bmMoYXR0ZW1wdCAtIDEpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0cnlBdHRlbXB0KCk7XG4gICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCkge1xuICAgICAgICBpZiAodHlwZW9mIHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhY2MudGltZXMgPSArdC50aW1lcyB8fCBERUZBVUxUX1RJTUVTO1xuXG4gICAgICAgICAgICBhY2MuaW50ZXJ2YWxGdW5jID0gdHlwZW9mIHQuaW50ZXJ2YWwgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICAgICAgIHQuaW50ZXJ2YWwgOlxuICAgICAgICAgICAgICAgIGNvbnN0YW50KCt0LmludGVydmFsIHx8IERFRkFVTFRfSU5URVJWQUwpO1xuXG4gICAgICAgICAgICBhY2MuZXJyb3JGaWx0ZXIgPSB0LmVycm9yRmlsdGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGFjYy50aW1lcyA9ICt0IHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBmb3IgYXN5bmMucmV0cnlcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGNsb3NlIHJlbGF0aXZlIG9mIFtgcmV0cnlgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucmV0cnl9LiAgVGhpcyBtZXRob2RcbiAgICAgKiB3cmFwcyBhIHRhc2sgYW5kIG1ha2VzIGl0IHJldHJ5YWJsZSwgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgY2FsbGluZyBpdFxuICAgICAqIHdpdGggcmV0cmllcy5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJldHJ5YWJsZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJldHJ5XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucmV0cnl9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0gW29wdHMgPSB7dGltZXM6IDUsIGludGVydmFsOiAwfXwgNV0gLSBvcHRpb25hbFxuICAgICAqIG9wdGlvbnMsIGV4YWN0bHkgdGhlIHNhbWUgYXMgZnJvbSBgcmV0cnlgLCBleGNlcHQgZm9yIGEgYG9wdHMuYXJpdHlgIHRoYXRcbiAgICAgKiBpcyB0aGUgYXJpdHkgb2YgdGhlIGB0YXNrYCBmdW5jdGlvbiwgZGVmYXVsdGluZyB0byBgdGFzay5sZW5ndGhgXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0YXNrIC0gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHJldHVybmVkIHdyYXBwZXIuXG4gICAgICogSW52b2tlZCB3aXRoICguLi5hcmdzLCBjYWxsYmFjaykuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IFRoZSB3cmFwcGVkIGZ1bmN0aW9uLCB3aGljaCB3aGVuIGludm9rZWQsIHdpbGxcbiAgICAgKiByZXRyeSBvbiBhbiBlcnJvciwgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGluIGBvcHRzYC5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNjZXB0IHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgYHRhc2tgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgZGVwMTogYXN5bmMucmV0cnlhYmxlKDMsIGdldEZyb21GbGFreVNlcnZpY2UpLFxuICAgICAqICAgICBwcm9jZXNzOiBbXCJkZXAxXCIsIGFzeW5jLnJldHJ5YWJsZSgzLCBmdW5jdGlvbiAocmVzdWx0cywgY2IpIHtcbiAgICAgKiAgICAgICAgIG1heWJlUHJvY2Vzc0RhdGEocmVzdWx0cy5kZXAxLCBjYik7XG4gICAgICogICAgIH0pXVxuICAgICAqIH0sIGNhbGxiYWNrKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXRyeWFibGUgKG9wdHMsIHRhc2spIHtcbiAgICAgICAgaWYgKCF0YXNrKSB7XG4gICAgICAgICAgICB0YXNrID0gb3B0cztcbiAgICAgICAgICAgIG9wdHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhcml0eSA9IChvcHRzICYmIG9wdHMuYXJpdHkpIHx8IHRhc2subGVuZ3RoO1xuICAgICAgICBpZiAoaXNBc3luYyh0YXNrKSkge1xuICAgICAgICAgICAgYXJpdHkgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX3Rhc2sgPSB3cmFwQXN5bmModGFzayk7XG4gICAgICAgIHJldHVybiBpbml0aWFsUGFyYW1zKChhcmdzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgYXJpdHkgLSAxIHx8IGNhbGxiYWNrID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB0YXNrRm4oY2IpIHtcbiAgICAgICAgICAgICAgICBfdGFzayguLi5hcmdzLCBjYik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRzKSByZXRyeShvcHRzLCB0YXNrRm4sIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGVsc2UgcmV0cnkodGFza0ZuLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVuIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGB0YXNrc2AgY29sbGVjdGlvbiBpbiBzZXJpZXMsIGVhY2ggb25lIHJ1bm5pbmcgb25jZVxuICAgICAqIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiBJZiBhbnkgZnVuY3Rpb25zIGluIHRoZSBzZXJpZXMgcGFzcyBhblxuICAgICAqIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgbm8gbW9yZSBmdW5jdGlvbnMgYXJlIHJ1biwgYW5kIGBjYWxsYmFja2AgaXNcbiAgICAgKiBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIGVycm9yLiBPdGhlcndpc2UsIGBjYWxsYmFja2BcbiAgICAgKiByZWNlaXZlcyBhbiBhcnJheSBvZiByZXN1bHRzIHdoZW4gYHRhc2tzYCBoYXZlIGNvbXBsZXRlZC5cbiAgICAgKlxuICAgICAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5LiBFYWNoIHByb3BlcnR5IHdpbGxcbiAgICAgKiBiZSBydW4gYXMgYSBmdW5jdGlvbiwgYW5kIHRoZSByZXN1bHRzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmaW5hbCBgY2FsbGJhY2tgXG4gICAgICogYXMgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIFRoaXMgY2FuIGJlIGEgbW9yZSByZWFkYWJsZSB3YXkgb2YgaGFuZGxpbmdcbiAgICAgKiAgcmVzdWx0cyBmcm9tIHtAbGluayBhc3luYy5zZXJpZXN9LlxuICAgICAqXG4gICAgICogKipOb3RlKiogdGhhdCB3aGlsZSBtYW55IGltcGxlbWVudGF0aW9ucyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2Ygb2JqZWN0XG4gICAgICogcHJvcGVydGllcywgdGhlIFtFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb25dKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjYpXG4gICAgICogZXhwbGljaXRseSBzdGF0ZXMgdGhhdFxuICAgICAqXG4gICAgICogPiBUaGUgbWVjaGFuaWNzIGFuZCBvcmRlciBvZiBlbnVtZXJhdGluZyB0aGUgcHJvcGVydGllcyBpcyBub3Qgc3BlY2lmaWVkLlxuICAgICAqXG4gICAgICogU28gaWYgeW91IHJlbHkgb24gdGhlIG9yZGVyIGluIHdoaWNoIHlvdXIgc2VyaWVzIG9mIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQsXG4gICAgICogYW5kIHdhbnQgdGhpcyB0byB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMsIGNvbnNpZGVyIHVzaW5nIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQG5hbWUgc2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIGNvbnRhaW5pbmdcbiAgICAgKiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byBydW4gaW4gc2VyaWVzLlxuICAgICAqIEVhY2ggZnVuY3Rpb24gY2FuIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIHJ1biBvbmNlIGFsbCB0aGVcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIHJlc3VsdHMgYXJyYXkgKG9yIG9iamVjdClcbiAgICAgKiBjb250YWluaW5nIGFsbCB0aGUgcmVzdWx0IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGB0YXNrYCBjYWxsYmFja3MuIEludm9rZWRcbiAgICAgKiB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy9Vc2luZyBDYWxsYmFja3NcbiAgICAgKiBhc3luYy5zZXJpZXMoW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBvYmplY3RzIGluc3RlYWQgb2YgYXJyYXlzXG4gICAgICogYXN5bmMuc2VyaWVzKHtcbiAgICAgKiAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAxKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgLy8gdGhlbiBkbyBhbm90aGVyIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAyKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnNlcmllcyhbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0byBbJ29uZScsJ3R3byddXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYy5zZXJpZXMoe1xuICAgICAqICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvOiB7IG9uZTogMSwgdHdvOiAyIH1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuc2VyaWVzKFtcbiAgICAgKiAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgLy8gZG8gc29tZSBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBkbyBhbm90aGVyIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgICAgICAgICB9XG4gICAgICogICAgICAgICBdKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0byBbJ29uZScsJ3R3byddXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnBhcmFsbGVsKHtcbiAgICAgKiAgICAgICAgICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgICAgICAgICB9XG4gICAgICogICAgICAgICB9KTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcmllcyh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9wYXJhbGxlbChlYWNoT2ZTZXJpZXMkMSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgYGNvbGxgIHNhdGlzZmllcyBhbiBhc3luYyB0ZXN0LlxuICAgICAqIElmIGFueSBpdGVyYXRlZSBjYWxsIHJldHVybnMgYHRydWVgLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5XG4gICAgICogY2FsbGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgc29tZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBhbnlcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9ucyBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIGByZXN1bHRgIHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGUgYXN5bmNcbiAgICAgKiB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXIzL2ZpbGU1LnR4dCddLCBmaWxlRXhpc3RzLFxuICAgICAqICAgIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgIC8vIHRydWVcbiAgICAgKiAgICAgICAgLy8gcmVzdWx0IGlzIHRydWUgc2luY2Ugc29tZSBmaWxlIGluIHRoZSBsaXN0IGV4aXN0c1xuICAgICAqICAgIH1cbiAgICAgKik7XG4gICAgICpcbiAgICAgKiBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXI0L21pc3NpbmcudHh0J10sIGZpbGVFeGlzdHMsXG4gICAgICogICAgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIG5vbmUgb2YgdGhlIGZpbGVzIGV4aXN0c1xuICAgICAqICAgIH1cbiAgICAgKik7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjMvZmlsZTUudHh0J10sIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIHRydWVcbiAgICAgKiAgICAgLy8gcmVzdWx0IGlzIHRydWUgc2luY2Ugc29tZSBmaWxlIGluIHRoZSBsaXN0IGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXN5bmMuc29tZShbJ2RpcjEvbWlzc2luZy50eHQnLCdkaXIyL21pc3NpbmcudHh0JywnZGlyNC9taXNzaW5nLnR4dCddLCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBmYWxzZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2Ugbm9uZSBvZiB0aGUgZmlsZXMgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXIzL2ZpbGU1LnR4dCddLCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB0cnVlXG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBzb21lIGZpbGUgaW4gdGhlIGxpc3QgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXI0L21pc3NpbmcudHh0J10sIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIGZhbHNlXG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2Ugbm9uZSBvZiB0aGUgZmlsZXMgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWUoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKEJvb2xlYW4sIHJlcyA9PiByZXMpKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBzb21lJDEgPSBhd2FpdGlmeShzb21lLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgc29tZWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5zb21lfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNvbWVMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnNvbWVde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5zb21lfVxuICAgICAqIEBhbGlhcyBhbnlMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9ucyBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIGByZXN1bHRgIHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGUgYXN5bmNcbiAgICAgKiB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb21lTGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3RlcihCb29sZWFuLCByZXMgPT4gcmVzKShlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgc29tZUxpbWl0JDEgPSBhd2FpdGlmeShzb21lTGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2Bzb21lYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnNvbWV9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNvbWVTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5zb21lXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuc29tZX1cbiAgICAgKiBAYWxpYXMgYW55U2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW1cbiAgICAgKiBpbiB0aGUgY29sbGVjdGlvbnMgaW4gc2VyaWVzLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gYHJlc3VsdGAgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgaXRlcmF0ZWUgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luY1xuICAgICAqIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWVTZXJpZXMoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKEJvb2xlYW4sIHJlcyA9PiByZXMpKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBzb21lU2VyaWVzJDEgPSBhd2FpdGlmeShzb21lU2VyaWVzLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFNvcnRzIGEgbGlzdCBieSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGVhY2ggYGNvbGxgIHZhbHVlIHRocm91Z2ggYW4gYXN5bmNcbiAgICAgKiBgaXRlcmF0ZWVgLlxuICAgICAqXG4gICAgICogQG5hbWUgc29ydEJ5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIHZhbHVlIHRvIHVzZSBhcyB0aGUgc29ydCBjcml0ZXJpYSBhc1xuICAgICAqIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgdGhlIGl0ZW1zXG4gICAgICogZnJvbSB0aGUgb3JpZ2luYWwgYGNvbGxgIHNvcnRlZCBieSB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBgaXRlcmF0ZWVgXG4gICAgICogY2FsbHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gYmlnZmlsZS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjUxMTAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBtZWRpdW1maWxlLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gc21hbGxmaWxlLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMjEgYnl0ZXMgaW4gc2l6ZVxuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZ2V0RmlsZVNpemVJbkJ5dGVzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnN0YXQoZmlsZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdiaWdmaWxlLnR4dCddLCBnZXRGaWxlU2l6ZUluQnl0ZXMsXG4gICAgICogICAgIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgICAgICAvLyBmaWxlIHNpemUgKGFzY2VuZGluZyBieSBkZWZhdWx0KSwgZS5nLlxuICAgICAqICAgICAgICAgICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIEJ5IG1vZGlmeWluZyB0aGUgY2FsbGJhY2sgcGFyYW1ldGVyIHRoZVxuICAgICAqIC8vIHNvcnRpbmcgb3JkZXIgY2FuIGJlIGluZmx1ZW5jZWQ6XG4gICAgICpcbiAgICAgKiAvLyBhc2NlbmRpbmcgb3JkZXJcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdiaWdmaWxlLnR4dCddLCBmdW5jdGlvbihmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwgZnVuY3Rpb24oZ2V0RmlsZVNpemVFcnIsIGZpbGVTaXplKSB7XG4gICAgICogICAgICAgICBpZiAoZ2V0RmlsZVNpemVFcnIpIHJldHVybiBjYWxsYmFjayhnZXRGaWxlU2l6ZUVycik7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgICAgICAvLyBmaWxlIHNpemUgKGFzY2VuZGluZyBieSBkZWZhdWx0KSwgZS5nLlxuICAgICAqICAgICAgICAgICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIGRlc2NlbmRpbmcgb3JkZXJcbiAgICAgKiBhc3luYy5zb3J0QnkoWydiaWdmaWxlLnR4dCcsJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCddLCBmdW5jdGlvbihmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwgZnVuY3Rpb24oZ2V0RmlsZVNpemVFcnIsIGZpbGVTaXplKSB7XG4gICAgICogICAgICAgICBpZiAoZ2V0RmlsZVNpemVFcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZ2V0RmlsZVNpemVFcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsZVNpemUgKiAtMSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgICAgICAvLyBmaWxlIHNpemUgKGFzY2VuZGluZyBieSBkZWZhdWx0KSwgZS5nLlxuICAgICAqICAgICAgICAgICAgIC8vIFsgJ2JpZ2ZpbGUudHh0JywgJ21lZGl1bWZpbGUudHh0JywgJ3NtYWxsZmlsZS50eHQnXVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIGhhbmRsaW5nXG4gICAgICogYXN5bmMuc29ydEJ5KFsnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0JywnbWlzc2luZ2ZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcyxcbiAgICAgKiAgICAgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgfVxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ2JpZ2ZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIG5vdyB0aGUgb3JpZ2luYWwgYXJyYXkgb2YgZmlsZXMgc29ydGVkIGJ5XG4gICAgICogICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdtaXNzaW5nZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIChhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnNvcnRCeShbJ2JpZ2ZpbGUudHh0JywnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAvLyBbICdzbWFsbGZpbGUudHh0JywgJ21lZGl1bWZpbGUudHh0JywgJ2JpZ2ZpbGUudHh0J11cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfSkoKTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIGhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5zb3J0QnkoWydtaXNzaW5nZmlsZS50eHQnLCdtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydEJ5IChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXAkMShjb2xsLCAoeCwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBfaXRlcmF0ZWUoeCwgKGVyciwgY3JpdGVyaWEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaXRlckNiKGVycik7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVyciwge3ZhbHVlOiB4LCBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0cy5zb3J0KGNvbXBhcmF0b3IpLm1hcCh2ID0+IHYudmFsdWUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZnVuY3Rpb24gY29tcGFyYXRvcihsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhLCBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIHNvcnRCeSQxID0gYXdhaXRpZnkoc29ydEJ5LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgYSB0aW1lIGxpbWl0IG9uIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNhbGxcbiAgICAgKiBpdHMgY2FsbGJhY2sgd2l0aGluIHRoZSBzcGVjaWZpZWQgbWlsbGlzZWNvbmRzLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFcbiAgICAgKiB0aW1lb3V0IGVycm9yLiBUaGUgY29kZSBwcm9wZXJ0eSBmb3IgdGhlIGVycm9yIG9iamVjdCB3aWxsIGJlIGAnRVRJTUVET1VUJ2AuXG4gICAgICpcbiAgICAgKiBAbmFtZSB0aW1lb3V0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGFzeW5jRm4gLSBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gbGltaXQgaW4gdGltZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWlsbGlzZWNvbmRzIC0gVGhlIHNwZWNpZmllZCB0aW1lIGxpbWl0LlxuICAgICAqIEBwYXJhbSB7Kn0gW2luZm9dIC0gQW55IHZhcmlhYmxlIHlvdSB3YW50IGF0dGFjaGVkIChgc3RyaW5nYCwgYG9iamVjdGAsIGV0YylcbiAgICAgKiB0byB0aW1lb3V0IEVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLi5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGFueVxuICAgICAqIG9mIHRoZSBjb250cm9sIGZsb3cgZnVuY3Rpb25zLlxuICAgICAqIEludm9rZSB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB5b3Ugd291bGQgYGFzeW5jRnVuY2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIG15RnVuY3Rpb24oZm9vLCBjYWxsYmFjaykge1xuICAgICAqICAgICBkb0FzeW5jVGFzayhmb28sIGZ1bmN0aW9uKGVyciwgZGF0YSkge1xuICAgICAqICAgICAgICAgLy8gaGFuZGxlIGVycm9yc1xuICAgICAqICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICpcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWUgc3R1ZmYgLi4uXG4gICAgICpcbiAgICAgKiAgICAgICAgIC8vIHJldHVybiBwcm9jZXNzZWQgZGF0YVxuICAgICAqICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIGRhdGEpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IGFzeW5jLnRpbWVvdXQobXlGdW5jdGlvbiwgMTAwMCk7XG4gICAgICpcbiAgICAgKiAvLyBjYWxsIGB3cmFwcGVkYCBhcyB5b3Ugd291bGQgYG15RnVuY3Rpb25gXG4gICAgICogd3JhcHBlZCh7IGJhcjogJ2JhcicgfSwgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICogICAgIC8vIGlmIGBteUZ1bmN0aW9uYCB0YWtlcyA8IDEwMDAgbXMgdG8gZXhlY3V0ZSwgYGVycmBcbiAgICAgKiAgICAgLy8gYW5kIGBkYXRhYCB3aWxsIGhhdmUgdGhlaXIgZXhwZWN0ZWQgdmFsdWVzXG4gICAgICpcbiAgICAgKiAgICAgLy8gZWxzZSBgZXJyYCB3aWxsIGJlIGFuIEVycm9yIHdpdGggdGhlIGNvZGUgJ0VUSU1FRE9VVCdcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lb3V0KGFzeW5jRm4sIG1pbGxpc2Vjb25kcywgaW5mbykge1xuICAgICAgICB2YXIgZm4gPSB3cmFwQXN5bmMoYXN5bmNGbik7XG5cbiAgICAgICAgcmV0dXJuIGluaXRpYWxQYXJhbXMoKGFyZ3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICB2YXIgdGltZWRPdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciB0aW1lcjtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXN5bmNGbi5uYW1lIHx8ICdhbm9ueW1vdXMnO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvciAgPSBuZXcgRXJyb3IoJ0NhbGxiYWNrIGZ1bmN0aW9uIFwiJyArIG5hbWUgKyAnXCIgdGltZWQgb3V0LicpO1xuICAgICAgICAgICAgICAgIGVycm9yLmNvZGUgPSAnRVRJTUVET1VUJztcbiAgICAgICAgICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5pbmZvID0gaW5mbztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZWRPdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXJncy5wdXNoKCguLi5jYkFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbWVkT3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKC4uLmNiQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHNldHVwIHRpbWVyIGFuZCBjYWxsIG9yaWdpbmFsIGZ1bmN0aW9uXG4gICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQodGltZW91dENhbGxiYWNrLCBtaWxsaXNlY29uZHMpO1xuICAgICAgICAgICAgZm4oLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJhbmdlKHNpemUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5KHNpemUpO1xuICAgICAgICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgICAgICAgICByZXN1bHRbc2l6ZV0gPSBzaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW3RpbWVzXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cudGltZXN9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSB0aW1lc0xpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMudGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc31cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IC0gVGhlIG51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgYG5gIHRpbWVzLlxuICAgICAqIEludm9rZWQgd2l0aCB0aGUgaXRlcmF0aW9uIGluZGV4IGFuZCBhIGNhbGxiYWNrOiAobiwgbmV4dCkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBzZWUgW2FzeW5jLm1hcF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0uXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lc0xpbWl0KGNvdW50LCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICByZXR1cm4gbWFwTGltaXQkMShyYW5nZShjb3VudCksIGxpbWl0LCBfaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbiBgbmAgdGltZXMsIGFuZCBhY2N1bXVsYXRlcyByZXN1bHRzIGluIHRoZSBzYW1lXG4gICAgICogbWFubmVyIHlvdSB3b3VsZCB1c2Ugd2l0aCBbbWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcnVuIHRoZSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgYG5gIHRpbWVzLlxuICAgICAqIEludm9rZWQgd2l0aCB0aGUgaXRlcmF0aW9uIGluZGV4IGFuZCBhIGNhbGxiYWNrOiAobiwgbmV4dCkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBzZWUge0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHByb3ZpZGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFByZXRlbmQgdGhpcyBpcyBzb21lIGNvbXBsaWNhdGVkIGFzeW5jIGZhY3RvcnlcbiAgICAgKiB2YXIgY3JlYXRlVXNlciA9IGZ1bmN0aW9uKGlkLCBjYWxsYmFjaykge1xuICAgICAqICAgICBjYWxsYmFjayhudWxsLCB7XG4gICAgICogICAgICAgICBpZDogJ3VzZXInICsgaWRcbiAgICAgKiAgICAgfSk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGdlbmVyYXRlIDUgdXNlcnNcbiAgICAgKiBhc3luYy50aW1lcyg1LCBmdW5jdGlvbihuLCBuZXh0KSB7XG4gICAgICogICAgIGNyZWF0ZVVzZXIobiwgZnVuY3Rpb24oZXJyLCB1c2VyKSB7XG4gICAgICogICAgICAgICBuZXh0KGVyciwgdXNlcik7XG4gICAgICogICAgIH0pO1xuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgdXNlcnMpIHtcbiAgICAgKiAgICAgLy8gd2Ugc2hvdWxkIG5vdyBoYXZlIDUgdXNlcnNcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lcyAobiwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aW1lc0xpbWl0KG4sIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW3RpbWVzXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cudGltZXN9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVzU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMudGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc31cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIFRoZSBhc3luYyBmdW5jdGlvbiB0byBjYWxsIGBuYCB0aW1lcy5cbiAgICAgKiBJbnZva2VkIHdpdGggdGhlIGl0ZXJhdGlvbiBpbmRleCBhbmQgYSBjYWxsYmFjazogKG4sIG5leHQpLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gc2VlIHtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVzU2VyaWVzIChuLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRpbWVzTGltaXQobiwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgcmVsYXRpdmUgb2YgYHJlZHVjZWAuICBUYWtlcyBhbiBPYmplY3Qgb3IgQXJyYXksIGFuZCBpdGVyYXRlcyBvdmVyIGVhY2hcbiAgICAgKiBlbGVtZW50IGluIHBhcmFsbGVsLCBlYWNoIHN0ZXAgcG90ZW50aWFsbHkgbXV0YXRpbmcgYW4gYGFjY3VtdWxhdG9yYCB2YWx1ZS5cbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgYWNjdW11bGF0b3IgZGVmYXVsdHMgdG8gdGhlIHR5cGUgb2YgY29sbGVjdGlvbiBwYXNzZWQgaW4uXG4gICAgICpcbiAgICAgKiBAbmFtZSB0cmFuc2Zvcm1cbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSAtIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSB0cmFuc2Zvcm0uICBJZiBvbWl0dGVkLFxuICAgICAqIGl0IHdpbGwgZGVmYXVsdCB0byBhbiBlbXB0eSBPYmplY3Qgb3IgQXJyYXksIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBgY29sbGBcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiBhcHBsaWVkIHRvIGVhY2ggaXRlbSBpbiB0aGVcbiAgICAgKiBjb2xsZWN0aW9uIHRoYXQgcG90ZW50aWFsbHkgbW9kaWZpZXMgdGhlIGFjY3VtdWxhdG9yLlxuICAgICAqIEludm9rZWQgd2l0aCAoYWNjdW11bGF0b3IsIGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IGlzIHRoZSB0cmFuc2Zvcm1lZCBhY2N1bXVsYXRvci5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKlxuICAgICAqIC8vIGhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgaHVtYW4tcmVhZGFibGUgc2l6ZSBmb3JtYXQgZnJvbSBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKGJ5dGVzLCBkZWNpbWFscyA9IDIpIHtcbiAgICAgKiAgIC8vIGltcGxlbWVudGF0aW9uIG5vdCBpbmNsdWRlZCBmb3IgYnJldml0eVxuICAgICAqICAgcmV0dXJuIGh1bWFuUmVhZGJsZUZpbGVzaXplO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSwgdHJhbnNmb3JtZWQgdG8gaHVtYW4tcmVhZGFibGUgZm9ybWF0XG4gICAgICogLy8gZS5nLiAxMDI0IGJ5dGVzID0gMUtCLCAxMjM0IGJ5dGVzID0gMS4yMSBLQiwgMTA0ODU3NiBieXRlcyA9IDFNQiwgZXRjLlxuICAgICAqIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVTaXplKGFjYywgdmFsdWUsIGtleSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdCh2YWx1ZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBhY2Nba2V5XSA9IGZvcm1hdEJ5dGVzKHN0YXQuc2l6ZSk7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMudHJhbnNmb3JtKGZpbGVMaXN0LCB0cmFuc2Zvcm1GaWxlU2l6ZSwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIFsgJzEwMDAgQnl0ZXMnLCAnMS45NSBLQicsICcyLjkzIEtCJyBdXG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMudHJhbnNmb3JtKGZpbGVMaXN0LCB0cmFuc2Zvcm1GaWxlU2l6ZSlcbiAgICAgKiAudGhlbihyZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBbICcxMDAwIEJ5dGVzJywgJzEuOTUgS0InLCAnMi45MyBLQicgXVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIChhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMudHJhbnNmb3JtKGZpbGVMaXN0LCB0cmFuc2Zvcm1GaWxlU2l6ZSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gWyAnMTAwMCBCeXRlcycsICcxLjk1IEtCJywgJzIuOTMgS0InIF1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfSkoKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKlxuICAgICAqIC8vIGhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgaHVtYW4tcmVhZGFibGUgc2l6ZSBmb3JtYXQgZnJvbSBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKGJ5dGVzLCBkZWNpbWFscyA9IDIpIHtcbiAgICAgKiAgIC8vIGltcGxlbWVudGF0aW9uIG5vdCBpbmNsdWRlZCBmb3IgYnJldml0eVxuICAgICAqICAgcmV0dXJuIGh1bWFuUmVhZGJsZUZpbGVzaXplO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVNYXAgPSB7IGYxOiAnZmlsZTEudHh0JywgZjI6ICdmaWxlMi50eHQnLCBmMzogJ2ZpbGUzLnR4dCcgfTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSwgdHJhbnNmb3JtZWQgdG8gaHVtYW4tcmVhZGFibGUgZm9ybWF0XG4gICAgICogLy8gZS5nLiAxMDI0IGJ5dGVzID0gMUtCLCAxMjM0IGJ5dGVzID0gMS4yMSBLQiwgMTA0ODU3NiBieXRlcyA9IDFNQiwgZXRjLlxuICAgICAqIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVTaXplKGFjYywgdmFsdWUsIGtleSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdCh2YWx1ZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBhY2Nba2V5XSA9IGZvcm1hdEJ5dGVzKHN0YXQuc2l6ZSk7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMudHJhbnNmb3JtKGZpbGVNYXAsIHRyYW5zZm9ybUZpbGVTaXplLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8geyBmMTogJzEwMDAgQnl0ZXMnLCBmMjogJzEuOTUgS0InLCBmMzogJzIuOTMgS0InIH1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZU1hcCwgdHJhbnNmb3JtRmlsZVNpemUpXG4gICAgICogLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8geyBmMTogJzEwMDAgQnl0ZXMnLCBmMjogJzEuOTUgS0InLCBmMzogJzIuOTMgS0InIH1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMudHJhbnNmb3JtKGZpbGVNYXAsIHRyYW5zZm9ybUZpbGVTaXplKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7IGYxOiAnMTAwMCBCeXRlcycsIGYyOiAnMS45NSBLQicsIGYzOiAnMi45MyBLQicgfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm0gKGNvbGwsIGFjY3VtdWxhdG9yLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPD0gMyAmJiB0eXBlb2YgYWNjdW11bGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0ZWU7XG4gICAgICAgICAgICBpdGVyYXRlZSA9IGFjY3VtdWxhdG9yO1xuICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBBcnJheS5pc0FycmF5KGNvbGwpID8gW10gOiB7fTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2sgfHwgcHJvbWlzZUNhbGxiYWNrKCkpO1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcblxuICAgICAgICBlYWNoT2YkMShjb2xsLCAodiwgaywgY2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZShhY2N1bXVsYXRvciwgdiwgaywgY2IpO1xuICAgICAgICB9LCBlcnIgPT4gY2FsbGJhY2soZXJyLCBhY2N1bXVsYXRvcikpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2tbUFJPTUlTRV9TWU1CT0xdXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXQgcnVucyBlYWNoIHRhc2sgaW4gc2VyaWVzIGJ1dCBzdG9wcyB3aGVuZXZlciBhbnkgb2YgdGhlIGZ1bmN0aW9ucyB3ZXJlXG4gICAgICogc3VjY2Vzc2Z1bC4gSWYgb25lIG9mIHRoZSB0YXNrcyB3ZXJlIHN1Y2Nlc3NmdWwsIHRoZSBgY2FsbGJhY2tgIHdpbGwgYmVcbiAgICAgKiBwYXNzZWQgdGhlIHJlc3VsdCBvZiB0aGUgc3VjY2Vzc2Z1bCB0YXNrLiBJZiBhbGwgdGFza3MgZmFpbCwgdGhlIGNhbGxiYWNrXG4gICAgICogd2lsbCBiZSBwYXNzZWQgdGhlIGVycm9yIGFuZCByZXN1bHQgKGlmIGFueSkgb2YgdGhlIGZpbmFsIGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSB0cnlFYWNoXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRvXG4gICAgICogcnVuLCBlYWNoIGZ1bmN0aW9uIGlzIHBhc3NlZCBhIGBjYWxsYmFjayhlcnIsIHJlc3VsdClgIGl0IG11c3QgY2FsbCBvblxuICAgICAqIGNvbXBsZXRpb24gd2l0aCBhbiBlcnJvciBgZXJyYCAod2hpY2ggY2FuIGJlIGBudWxsYCkgYW5kIGFuIG9wdGlvbmFsIGByZXN1bHRgXG4gICAgICogdmFsdWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIG9uZVxuICAgICAqIG9mIHRoZSB0YXNrcyBoYXMgc3VjY2VlZGVkLCBvciBhbGwgaGF2ZSBmYWlsZWQuIEl0IHJlY2VpdmVzIHRoZSBgZXJyYCBhbmRcbiAgICAgKiBgcmVzdWx0YCBhcmd1bWVudHMgb2YgdGhlIGxhc3QgYXR0ZW1wdCBhdCBjb21wbGV0aW5nIHRoZSBgdGFza2AuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICogYXN5bmMudHJ5RWFjaChbXG4gICAgICogICAgIGZ1bmN0aW9uIGdldERhdGFGcm9tRmlyc3RXZWJzaXRlKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBUcnkgZ2V0dGluZyB0aGUgZGF0YSBmcm9tIHRoZSBmaXJzdCB3ZWJzaXRlXG4gICAgICogICAgICAgICBjYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbiBnZXREYXRhRnJvbVNlY29uZFdlYnNpdGUoY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIEZpcnN0IHdlYnNpdGUgZmFpbGVkLFxuICAgICAqICAgICAgICAgLy8gVHJ5IGdldHRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgYmFja3VwIHdlYnNpdGVcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIE5vdyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyeUVhY2godGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IG51bGw7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHJldHVybiBlYWNoU2VyaWVzJDEodGFza3MsICh0YXNrLCB0YXNrQ2IpID0+IHtcbiAgICAgICAgICAgIHdyYXBBc3luYyh0YXNrKSgoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybiB0YXNrQ2IoZXJyKTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdF0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHRhc2tDYihlcnIgPyBudWxsIDoge30pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sICgpID0+IGNhbGxiYWNrKGVycm9yLCByZXN1bHQpKTtcbiAgICB9XG5cbiAgICB2YXIgdHJ5RWFjaCQxID0gYXdhaXRpZnkodHJ5RWFjaCk7XG5cbiAgICAvKipcbiAgICAgKiBVbmRvZXMgYSBbbWVtb2l6ZV17QGxpbmsgbW9kdWxlOlV0aWxzLm1lbW9pemV9ZCBmdW5jdGlvbiwgcmV2ZXJ0aW5nIGl0IHRvIHRoZSBvcmlnaW5hbCxcbiAgICAgKiB1bm1lbW9pemVkIGZvcm0uIEhhbmR5IGZvciB0ZXN0aW5nLlxuICAgICAqXG4gICAgICogQG5hbWUgdW5tZW1vaXplXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWVtb2l6ZV17QGxpbmsgbW9kdWxlOlV0aWxzLm1lbW9pemV9XG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZuIC0gdGhlIG1lbW9pemVkIGZ1bmN0aW9uXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IGEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgb3JpZ2luYWwgdW5tZW1vaXplZCBmdW5jdGlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVubWVtb2l6ZShmbikge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwZWF0ZWRseSBjYWxsIGBpdGVyYXRlZWAsIHdoaWxlIGB0ZXN0YCByZXR1cm5zIGB0cnVlYC4gQ2FsbHMgYGNhbGxiYWNrYCB3aGVuXG4gICAgICogc3RvcHBlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqXG4gICAgICogQG5hbWUgd2hpbHN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gdGVzdCAtIGFzeW5jaHJvbm91cyB0cnV0aCB0ZXN0IHRvIHBlcmZvcm0gYmVmb3JlIGVhY2hcbiAgICAgKiBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYC4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBlYWNoIHRpbWVcbiAgICAgKiBgdGVzdGAgcGFzc2VzLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHRlc3RcbiAgICAgKiBmdW5jdGlvbiBoYXMgZmFpbGVkIGFuZCByZXBlYXRlZCBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYCBoYXMgc3RvcHBlZC4gYGNhbGxiYWNrYFxuICAgICAqIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzXG4gICAgICogY2FsbGJhY2suIEludm9rZWQgd2l0aCAoZXJyLCBbcmVzdWx0c10pO1xuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgY291bnQgPSAwO1xuICAgICAqIGFzeW5jLndoaWxzdChcbiAgICAgKiAgICAgZnVuY3Rpb24gdGVzdChjYikgeyBjYihudWxsLCBjb3VudCA8IDUpOyB9LFxuICAgICAqICAgICBmdW5jdGlvbiBpdGVyKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjb3VudCsrO1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBjb3VudCk7XG4gICAgICogICAgICAgICB9LCAxMDAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKGVyciwgbikge1xuICAgICAqICAgICAgICAgLy8gNSBzZWNvbmRzIGhhdmUgcGFzc2VkLCBuID0gNVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3aGlsc3QodGVzdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25seU9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgdmFyIF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyLCAuLi5yZXN0KSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIHJlc3VsdHMgPSByZXN0O1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgICAgICAgIF90ZXN0KGNoZWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdHJ1dGgpIHJldHVybiBjYWxsYmFjayhudWxsLCAuLi5yZXN1bHRzKTtcbiAgICAgICAgICAgIF9mbihuZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfdGVzdChjaGVjayk7XG4gICAgfVxuICAgIHZhciB3aGlsc3QkMSA9IGF3YWl0aWZ5KHdoaWxzdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBSZXBlYXRlZGx5IGNhbGwgYGl0ZXJhdGVlYCB1bnRpbCBgdGVzdGAgcmV0dXJucyBgdHJ1ZWAuIENhbGxzIGBjYWxsYmFja2Agd2hlblxuICAgICAqIHN0b3BwZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gYGNhbGxiYWNrYCB3aWxsIGJlIHBhc3NlZCBhbiBlcnJvciBhbmQgYW55XG4gICAgICogYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogVGhlIGludmVyc2Ugb2YgW3doaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH0uXG4gICAgICpcbiAgICAgKiBAbmFtZSB1bnRpbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLndoaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBiZWZvcmUgZWFjaFxuICAgICAqIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZVxuICAgICAqIGB0ZXN0YCBmYWlscy4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHRoZSB0ZXN0XG4gICAgICogZnVuY3Rpb24gaGFzIHBhc3NlZCBhbmQgcmVwZWF0ZWQgZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAgaGFzIHN0b3BwZWQuIGBjYWxsYmFja2BcbiAgICAgKiB3aWxsIGJlIHBhc3NlZCBhbiBlcnJvciBhbmQgYW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZpbmFsIGBpdGVyYXRlZWAnc1xuICAgICAqIGNhbGxiYWNrLiBJbnZva2VkIHdpdGggKGVyciwgW3Jlc3VsdHNdKTtcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG5vdCBwYXNzZWRcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgcmVzdWx0cyA9IFtdXG4gICAgICogbGV0IGZpbmlzaGVkID0gZmFsc2VcbiAgICAgKiBhc3luYy51bnRpbChmdW5jdGlvbiB0ZXN0KGNiKSB7XG4gICAgICogICAgIGNiKG51bGwsIGZpbmlzaGVkKVxuICAgICAqIH0sIGZ1bmN0aW9uIGl0ZXIobmV4dCkge1xuICAgICAqICAgICBmZXRjaFBhZ2UodXJsLCAoZXJyLCBib2R5KSA9PiB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSByZXR1cm4gbmV4dChlcnIpXG4gICAgICogICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoYm9keS5vYmplY3RzKVxuICAgICAqICAgICAgICAgZmluaXNoZWQgPSAhIWJvZHkubmV4dFxuICAgICAqICAgICAgICAgbmV4dChlcnIpXG4gICAgICogICAgIH0pXG4gICAgICogfSwgZnVuY3Rpb24gZG9uZSAoZXJyKSB7XG4gICAgICogICAgIC8vIGFsbCBwYWdlcyBoYXZlIGJlZW4gZmV0Y2hlZFxuICAgICAqIH0pXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW50aWwodGVzdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICByZXR1cm4gd2hpbHN0JDEoKGNiKSA9PiBfdGVzdCgoZXJyLCB0cnV0aCkgPT4gY2IgKGVyciwgIXRydXRoKSksIGl0ZXJhdGVlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgYHRhc2tzYCBhcnJheSBvZiBmdW5jdGlvbnMgaW4gc2VyaWVzLCBlYWNoIHBhc3NpbmcgdGhlaXIgcmVzdWx0cyB0b1xuICAgICAqIHRoZSBuZXh0IGluIHRoZSBhcnJheS4gSG93ZXZlciwgaWYgYW55IG9mIHRoZSBgdGFza3NgIHBhc3MgYW4gZXJyb3IgdG8gdGhlaXJcbiAgICAgKiBvd24gY2FsbGJhY2ssIHRoZSBuZXh0IGZ1bmN0aW9uIGlzIG5vdCBleGVjdXRlZCwgYW5kIHRoZSBtYWluIGBjYWxsYmFja2AgaXNcbiAgICAgKiBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICpcbiAgICAgKiBAbmFtZSB3YXRlcmZhbGxcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheX0gdGFza3MgLSBBbiBhcnJheSBvZiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufVxuICAgICAqIHRvIHJ1bi5cbiAgICAgKiBFYWNoIGZ1bmN0aW9uIHNob3VsZCBjb21wbGV0ZSB3aXRoIGFueSBudW1iZXIgb2YgYHJlc3VsdGAgdmFsdWVzLlxuICAgICAqIFRoZSBgcmVzdWx0YCB2YWx1ZXMgd2lsbCBiZSBwYXNzZWQgYXMgYXJndW1lbnRzLCBpbiBvcmRlciwgdG8gdGhlIG5leHQgdGFzay5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYWxsIHRoZVxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gVGhpcyB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzdWx0cyBvZiB0aGUgbGFzdCB0YXNrJ3NcbiAgICAgKiBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJywgJ3R3bycpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihhcmcxLCBhcmcyLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXJnMSBub3cgZXF1YWxzICdvbmUnIGFuZCBhcmcyIG5vdyBlcXVhbHMgJ3R3bydcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0aHJlZScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihhcmcxLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXJnMSBub3cgZXF1YWxzICd0aHJlZSdcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkb25lJyk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgJ2RvbmUnXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBPciwgd2l0aCBuYW1lZCBmdW5jdGlvbnM6XG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgbXlGaXJzdEZ1bmN0aW9uLFxuICAgICAqICAgICBteVNlY29uZEZ1bmN0aW9uLFxuICAgICAqICAgICBteUxhc3RGdW5jdGlvbixcbiAgICAgKiBdLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgJ2RvbmUnXG4gICAgICogfSk7XG4gICAgICogZnVuY3Rpb24gbXlGaXJzdEZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgIGNhbGxiYWNrKG51bGwsICdvbmUnLCAndHdvJyk7XG4gICAgICogfVxuICAgICAqIGZ1bmN0aW9uIG15U2Vjb25kRnVuY3Rpb24oYXJnMSwgYXJnMiwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgLy8gYXJnMSBub3cgZXF1YWxzICdvbmUnIGFuZCBhcmcyIG5vdyBlcXVhbHMgJ3R3bydcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gICAgICogfVxuICAgICAqIGZ1bmN0aW9uIG15TGFzdEZ1bmN0aW9uKGFyZzEsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIC8vIGFyZzEgbm93IGVxdWFscyAndGhyZWUnXG4gICAgICogICAgIGNhbGxiYWNrKG51bGwsICdkb25lJyk7XG4gICAgICogfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdhdGVyZmFsbCAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrcykpIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpKTtcbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB2YXIgdGFza0luZGV4ID0gMDtcblxuICAgICAgICBmdW5jdGlvbiBuZXh0VGFzayhhcmdzKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHdyYXBBc3luYyh0YXNrc1t0YXNrSW5kZXgrK10pO1xuICAgICAgICAgICAgdGFzayguLi5hcmdzLCBvbmx5T25jZShuZXh0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBuZXh0KGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVyblxuICAgICAgICAgICAgaWYgKGVyciB8fCB0YXNrSW5kZXggPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dFRhc2soYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0VGFzayhbXSk7XG4gICAgfVxuXG4gICAgdmFyIHdhdGVyZmFsbCQxID0gYXdhaXRpZnkod2F0ZXJmYWxsKTtcblxuICAgIC8qKlxuICAgICAqIEFuIFwiYXN5bmMgZnVuY3Rpb25cIiBpbiB0aGUgY29udGV4dCBvZiBBc3luYyBpcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gd2l0aFxuICAgICAqIGEgdmFyaWFibGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIHdpdGggdGhlIGZpbmFsIHBhcmFtZXRlciBiZWluZyBhIGNhbGxiYWNrLlxuICAgICAqIChgZnVuY3Rpb24gKGFyZzEsIGFyZzIsIC4uLiwgY2FsbGJhY2spIHt9YClcbiAgICAgKiBUaGUgZmluYWwgY2FsbGJhY2sgaXMgb2YgdGhlIGZvcm0gYGNhbGxiYWNrKGVyciwgcmVzdWx0cy4uLilgLCB3aGljaCBtdXN0IGJlXG4gICAgICogY2FsbGVkIG9uY2UgdGhlIGZ1bmN0aW9uIGlzIGNvbXBsZXRlZC4gIFRoZSBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIHdpdGggYVxuICAgICAqIEVycm9yIGFzIGl0cyBmaXJzdCBhcmd1bWVudCB0byBzaWduYWwgdGhhdCBhbiBlcnJvciBvY2N1cnJlZC5cbiAgICAgKiBPdGhlcndpc2UsIGlmIG5vIGVycm9yIG9jY3VycmVkLCBpdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggYG51bGxgIGFzIHRoZSBmaXJzdFxuICAgICAqIGFyZ3VtZW50LCBhbmQgYW55IGFkZGl0aW9uYWwgYHJlc3VsdGAgYXJndW1lbnRzIHRoYXQgbWF5IGFwcGx5LCB0byBzaWduYWxcbiAgICAgKiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uXG4gICAgICogVGhlIGNhbGxiYWNrIG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSwgaWRlYWxseSBvbiBhIGxhdGVyIHRpY2sgb2YgdGhlXG4gICAgICogSmF2YVNjcmlwdCBldmVudCBsb29wLlxuICAgICAqXG4gICAgICogVGhpcyB0eXBlIG9mIGZ1bmN0aW9uIGlzIGFsc28gcmVmZXJyZWQgdG8gYXMgYSBcIk5vZGUtc3R5bGUgYXN5bmMgZnVuY3Rpb25cIixcbiAgICAgKiBvciBhIFwiY29udGludWF0aW9uIHBhc3Npbmctc3R5bGUgZnVuY3Rpb25cIiAoQ1BTKS4gTW9zdCBvZiB0aGUgbWV0aG9kcyBvZiB0aGlzXG4gICAgICogbGlicmFyeSBhcmUgdGhlbXNlbHZlcyBDUFMvTm9kZS1zdHlsZSBhc3luYyBmdW5jdGlvbnMsIG9yIGZ1bmN0aW9ucyB0aGF0XG4gICAgICogcmV0dXJuIENQUy9Ob2RlLXN0eWxlIGFzeW5jIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIFdoZXJldmVyIHdlIGFjY2VwdCBhIE5vZGUtc3R5bGUgYXN5bmMgZnVuY3Rpb24sIHdlIGFsc28gZGlyZWN0bHkgYWNjZXB0IGFuXG4gICAgICogW0VTMjAxNyBgYXN5bmNgIGZ1bmN0aW9uXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9TdGF0ZW1lbnRzL2FzeW5jX2Z1bmN0aW9ufS5cbiAgICAgKiBJbiB0aGlzIGNhc2UsIHRoZSBgYXN5bmNgIGZ1bmN0aW9uIHdpbGwgbm90IGJlIHBhc3NlZCBhIGZpbmFsIGNhbGxiYWNrXG4gICAgICogYXJndW1lbnQsIGFuZCBhbnkgdGhyb3duIGVycm9yIHdpbGwgYmUgdXNlZCBhcyB0aGUgYGVycmAgYXJndW1lbnQgb2YgdGhlXG4gICAgICogaW1wbGljaXQgY2FsbGJhY2ssIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgYHJlc3VsdGAgdmFsdWUuXG4gICAgICogKGkuZS4gYSBgcmVqZWN0ZWRgIG9mIHRoZSByZXR1cm5lZCBQcm9taXNlIGJlY29tZXMgdGhlIGBlcnJgIGNhbGxiYWNrXG4gICAgICogYXJndW1lbnQsIGFuZCBhIGByZXNvbHZlZGAgdmFsdWUgYmVjb21lcyB0aGUgYHJlc3VsdGAuKVxuICAgICAqXG4gICAgICogTm90ZSwgZHVlIHRvIEphdmFTY3JpcHQgbGltaXRhdGlvbnMsIHdlIGNhbiBvbmx5IGRldGVjdCBuYXRpdmUgYGFzeW5jYFxuICAgICAqIGZ1bmN0aW9ucyBhbmQgbm90IHRyYW5zcGlsaWVkIGltcGxlbWVudGF0aW9ucy5cbiAgICAgKiBZb3VyIGVudmlyb25tZW50IG11c3QgaGF2ZSBgYXN5bmNgL2Bhd2FpdGAgc3VwcG9ydCBmb3IgdGhpcyB0byB3b3JrLlxuICAgICAqIChlLmcuIE5vZGUgPiB2Ny42LCBvciBhIHJlY2VudCB2ZXJzaW9uIG9mIGEgbW9kZXJuIGJyb3dzZXIpLlxuICAgICAqIElmIHlvdSBhcmUgdXNpbmcgYGFzeW5jYCBmdW5jdGlvbnMgdGhyb3VnaCBhIHRyYW5zcGlsZXIgKGUuZy4gQmFiZWwpLCB5b3VcbiAgICAgKiBtdXN0IHN0aWxsIHdyYXAgdGhlIGZ1bmN0aW9uIHdpdGggW2FzeW5jaWZ5XXtAbGluayBtb2R1bGU6VXRpbHMuYXN5bmNpZnl9LFxuICAgICAqIGJlY2F1c2UgdGhlIGBhc3luYyBmdW5jdGlvbmAgd2lsbCBiZSBjb21waWxlZCB0byBhbiBvcmRpbmFyeSBmdW5jdGlvbiB0aGF0XG4gICAgICogcmV0dXJucyBhIHByb21pc2UuXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IEFzeW5jRnVuY3Rpb25cbiAgICAgKiBAc3RhdGljXG4gICAgICovXG5cblxuICAgIHZhciBpbmRleCA9IHtcbiAgICAgICAgYXBwbHksXG4gICAgICAgIGFwcGx5RWFjaCxcbiAgICAgICAgYXBwbHlFYWNoU2VyaWVzLFxuICAgICAgICBhc3luY2lmeSxcbiAgICAgICAgYXV0byxcbiAgICAgICAgYXV0b0luamVjdCxcbiAgICAgICAgY2FyZ286IGNhcmdvJDEsXG4gICAgICAgIGNhcmdvUXVldWU6IGNhcmdvLFxuICAgICAgICBjb21wb3NlLFxuICAgICAgICBjb25jYXQ6IGNvbmNhdCQxLFxuICAgICAgICBjb25jYXRMaW1pdDogY29uY2F0TGltaXQkMSxcbiAgICAgICAgY29uY2F0U2VyaWVzOiBjb25jYXRTZXJpZXMkMSxcbiAgICAgICAgY29uc3RhbnQ6IGNvbnN0YW50JDEsXG4gICAgICAgIGRldGVjdDogZGV0ZWN0JDEsXG4gICAgICAgIGRldGVjdExpbWl0OiBkZXRlY3RMaW1pdCQxLFxuICAgICAgICBkZXRlY3RTZXJpZXM6IGRldGVjdFNlcmllcyQxLFxuICAgICAgICBkaXIsXG4gICAgICAgIGRvVW50aWwsXG4gICAgICAgIGRvV2hpbHN0OiBkb1doaWxzdCQxLFxuICAgICAgICBlYWNoLFxuICAgICAgICBlYWNoTGltaXQ6IGVhY2hMaW1pdCQxLFxuICAgICAgICBlYWNoT2Y6IGVhY2hPZiQxLFxuICAgICAgICBlYWNoT2ZMaW1pdDogZWFjaE9mTGltaXQkMSxcbiAgICAgICAgZWFjaE9mU2VyaWVzOiBlYWNoT2ZTZXJpZXMkMSxcbiAgICAgICAgZWFjaFNlcmllczogZWFjaFNlcmllcyQxLFxuICAgICAgICBlbnN1cmVBc3luYyxcbiAgICAgICAgZXZlcnk6IGV2ZXJ5JDEsXG4gICAgICAgIGV2ZXJ5TGltaXQ6IGV2ZXJ5TGltaXQkMSxcbiAgICAgICAgZXZlcnlTZXJpZXM6IGV2ZXJ5U2VyaWVzJDEsXG4gICAgICAgIGZpbHRlcjogZmlsdGVyJDEsXG4gICAgICAgIGZpbHRlckxpbWl0OiBmaWx0ZXJMaW1pdCQxLFxuICAgICAgICBmaWx0ZXJTZXJpZXM6IGZpbHRlclNlcmllcyQxLFxuICAgICAgICBmb3JldmVyOiBmb3JldmVyJDEsXG4gICAgICAgIGdyb3VwQnksXG4gICAgICAgIGdyb3VwQnlMaW1pdDogZ3JvdXBCeUxpbWl0JDEsXG4gICAgICAgIGdyb3VwQnlTZXJpZXMsXG4gICAgICAgIGxvZyxcbiAgICAgICAgbWFwOiBtYXAkMSxcbiAgICAgICAgbWFwTGltaXQ6IG1hcExpbWl0JDEsXG4gICAgICAgIG1hcFNlcmllczogbWFwU2VyaWVzJDEsXG4gICAgICAgIG1hcFZhbHVlcyxcbiAgICAgICAgbWFwVmFsdWVzTGltaXQ6IG1hcFZhbHVlc0xpbWl0JDEsXG4gICAgICAgIG1hcFZhbHVlc1NlcmllcyxcbiAgICAgICAgbWVtb2l6ZSxcbiAgICAgICAgbmV4dFRpY2ssXG4gICAgICAgIHBhcmFsbGVsLFxuICAgICAgICBwYXJhbGxlbExpbWl0LFxuICAgICAgICBwcmlvcml0eVF1ZXVlLFxuICAgICAgICBxdWV1ZSxcbiAgICAgICAgcmFjZTogcmFjZSQxLFxuICAgICAgICByZWR1Y2U6IHJlZHVjZSQxLFxuICAgICAgICByZWR1Y2VSaWdodCxcbiAgICAgICAgcmVmbGVjdCxcbiAgICAgICAgcmVmbGVjdEFsbCxcbiAgICAgICAgcmVqZWN0OiByZWplY3QkMSxcbiAgICAgICAgcmVqZWN0TGltaXQ6IHJlamVjdExpbWl0JDEsXG4gICAgICAgIHJlamVjdFNlcmllczogcmVqZWN0U2VyaWVzJDEsXG4gICAgICAgIHJldHJ5LFxuICAgICAgICByZXRyeWFibGUsXG4gICAgICAgIHNlcSxcbiAgICAgICAgc2VyaWVzLFxuICAgICAgICBzZXRJbW1lZGlhdGU6IHNldEltbWVkaWF0ZSQxLFxuICAgICAgICBzb21lOiBzb21lJDEsXG4gICAgICAgIHNvbWVMaW1pdDogc29tZUxpbWl0JDEsXG4gICAgICAgIHNvbWVTZXJpZXM6IHNvbWVTZXJpZXMkMSxcbiAgICAgICAgc29ydEJ5OiBzb3J0QnkkMSxcbiAgICAgICAgdGltZW91dCxcbiAgICAgICAgdGltZXMsXG4gICAgICAgIHRpbWVzTGltaXQsXG4gICAgICAgIHRpbWVzU2VyaWVzLFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIHRyeUVhY2g6IHRyeUVhY2gkMSxcbiAgICAgICAgdW5tZW1vaXplLFxuICAgICAgICB1bnRpbCxcbiAgICAgICAgd2F0ZXJmYWxsOiB3YXRlcmZhbGwkMSxcbiAgICAgICAgd2hpbHN0OiB3aGlsc3QkMSxcblxuICAgICAgICAvLyBhbGlhc2VzXG4gICAgICAgIGFsbDogZXZlcnkkMSxcbiAgICAgICAgYWxsTGltaXQ6IGV2ZXJ5TGltaXQkMSxcbiAgICAgICAgYWxsU2VyaWVzOiBldmVyeVNlcmllcyQxLFxuICAgICAgICBhbnk6IHNvbWUkMSxcbiAgICAgICAgYW55TGltaXQ6IHNvbWVMaW1pdCQxLFxuICAgICAgICBhbnlTZXJpZXM6IHNvbWVTZXJpZXMkMSxcbiAgICAgICAgZmluZDogZGV0ZWN0JDEsXG4gICAgICAgIGZpbmRMaW1pdDogZGV0ZWN0TGltaXQkMSxcbiAgICAgICAgZmluZFNlcmllczogZGV0ZWN0U2VyaWVzJDEsXG4gICAgICAgIGZsYXRNYXA6IGNvbmNhdCQxLFxuICAgICAgICBmbGF0TWFwTGltaXQ6IGNvbmNhdExpbWl0JDEsXG4gICAgICAgIGZsYXRNYXBTZXJpZXM6IGNvbmNhdFNlcmllcyQxLFxuICAgICAgICBmb3JFYWNoOiBlYWNoLFxuICAgICAgICBmb3JFYWNoU2VyaWVzOiBlYWNoU2VyaWVzJDEsXG4gICAgICAgIGZvckVhY2hMaW1pdDogZWFjaExpbWl0JDEsXG4gICAgICAgIGZvckVhY2hPZjogZWFjaE9mJDEsXG4gICAgICAgIGZvckVhY2hPZlNlcmllczogZWFjaE9mU2VyaWVzJDEsXG4gICAgICAgIGZvckVhY2hPZkxpbWl0OiBlYWNoT2ZMaW1pdCQxLFxuICAgICAgICBpbmplY3Q6IHJlZHVjZSQxLFxuICAgICAgICBmb2xkbDogcmVkdWNlJDEsXG4gICAgICAgIGZvbGRyOiByZWR1Y2VSaWdodCxcbiAgICAgICAgc2VsZWN0OiBmaWx0ZXIkMSxcbiAgICAgICAgc2VsZWN0TGltaXQ6IGZpbHRlckxpbWl0JDEsXG4gICAgICAgIHNlbGVjdFNlcmllczogZmlsdGVyU2VyaWVzJDEsXG4gICAgICAgIHdyYXBTeW5jOiBhc3luY2lmeSxcbiAgICAgICAgZHVyaW5nOiB3aGlsc3QkMSxcbiAgICAgICAgZG9EdXJpbmc6IGRvV2hpbHN0JDFcbiAgICB9O1xuXG4gICAgZXhwb3J0cy5hbGwgPSBldmVyeSQxO1xuICAgIGV4cG9ydHMuYWxsTGltaXQgPSBldmVyeUxpbWl0JDE7XG4gICAgZXhwb3J0cy5hbGxTZXJpZXMgPSBldmVyeVNlcmllcyQxO1xuICAgIGV4cG9ydHMuYW55ID0gc29tZSQxO1xuICAgIGV4cG9ydHMuYW55TGltaXQgPSBzb21lTGltaXQkMTtcbiAgICBleHBvcnRzLmFueVNlcmllcyA9IHNvbWVTZXJpZXMkMTtcbiAgICBleHBvcnRzLmFwcGx5ID0gYXBwbHk7XG4gICAgZXhwb3J0cy5hcHBseUVhY2ggPSBhcHBseUVhY2g7XG4gICAgZXhwb3J0cy5hcHBseUVhY2hTZXJpZXMgPSBhcHBseUVhY2hTZXJpZXM7XG4gICAgZXhwb3J0cy5hc3luY2lmeSA9IGFzeW5jaWZ5O1xuICAgIGV4cG9ydHMuYXV0byA9IGF1dG87XG4gICAgZXhwb3J0cy5hdXRvSW5qZWN0ID0gYXV0b0luamVjdDtcbiAgICBleHBvcnRzLmNhcmdvID0gY2FyZ28kMTtcbiAgICBleHBvcnRzLmNhcmdvUXVldWUgPSBjYXJnbztcbiAgICBleHBvcnRzLmNvbXBvc2UgPSBjb21wb3NlO1xuICAgIGV4cG9ydHMuY29uY2F0ID0gY29uY2F0JDE7XG4gICAgZXhwb3J0cy5jb25jYXRMaW1pdCA9IGNvbmNhdExpbWl0JDE7XG4gICAgZXhwb3J0cy5jb25jYXRTZXJpZXMgPSBjb25jYXRTZXJpZXMkMTtcbiAgICBleHBvcnRzLmNvbnN0YW50ID0gY29uc3RhbnQkMTtcbiAgICBleHBvcnRzLmRlZmF1bHQgPSBpbmRleDtcbiAgICBleHBvcnRzLmRldGVjdCA9IGRldGVjdCQxO1xuICAgIGV4cG9ydHMuZGV0ZWN0TGltaXQgPSBkZXRlY3RMaW1pdCQxO1xuICAgIGV4cG9ydHMuZGV0ZWN0U2VyaWVzID0gZGV0ZWN0U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5kaXIgPSBkaXI7XG4gICAgZXhwb3J0cy5kb0R1cmluZyA9IGRvV2hpbHN0JDE7XG4gICAgZXhwb3J0cy5kb1VudGlsID0gZG9VbnRpbDtcbiAgICBleHBvcnRzLmRvV2hpbHN0ID0gZG9XaGlsc3QkMTtcbiAgICBleHBvcnRzLmR1cmluZyA9IHdoaWxzdCQxO1xuICAgIGV4cG9ydHMuZWFjaCA9IGVhY2g7XG4gICAgZXhwb3J0cy5lYWNoTGltaXQgPSBlYWNoTGltaXQkMTtcbiAgICBleHBvcnRzLmVhY2hPZiA9IGVhY2hPZiQxO1xuICAgIGV4cG9ydHMuZWFjaE9mTGltaXQgPSBlYWNoT2ZMaW1pdCQxO1xuICAgIGV4cG9ydHMuZWFjaE9mU2VyaWVzID0gZWFjaE9mU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5lYWNoU2VyaWVzID0gZWFjaFNlcmllcyQxO1xuICAgIGV4cG9ydHMuZW5zdXJlQXN5bmMgPSBlbnN1cmVBc3luYztcbiAgICBleHBvcnRzLmV2ZXJ5ID0gZXZlcnkkMTtcbiAgICBleHBvcnRzLmV2ZXJ5TGltaXQgPSBldmVyeUxpbWl0JDE7XG4gICAgZXhwb3J0cy5ldmVyeVNlcmllcyA9IGV2ZXJ5U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5maWx0ZXIgPSBmaWx0ZXIkMTtcbiAgICBleHBvcnRzLmZpbHRlckxpbWl0ID0gZmlsdGVyTGltaXQkMTtcbiAgICBleHBvcnRzLmZpbHRlclNlcmllcyA9IGZpbHRlclNlcmllcyQxO1xuICAgIGV4cG9ydHMuZmluZCA9IGRldGVjdCQxO1xuICAgIGV4cG9ydHMuZmluZExpbWl0ID0gZGV0ZWN0TGltaXQkMTtcbiAgICBleHBvcnRzLmZpbmRTZXJpZXMgPSBkZXRlY3RTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZsYXRNYXAgPSBjb25jYXQkMTtcbiAgICBleHBvcnRzLmZsYXRNYXBMaW1pdCA9IGNvbmNhdExpbWl0JDE7XG4gICAgZXhwb3J0cy5mbGF0TWFwU2VyaWVzID0gY29uY2F0U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5mb2xkbCA9IHJlZHVjZSQxO1xuICAgIGV4cG9ydHMuZm9sZHIgPSByZWR1Y2VSaWdodDtcbiAgICBleHBvcnRzLmZvckVhY2ggPSBlYWNoO1xuICAgIGV4cG9ydHMuZm9yRWFjaExpbWl0ID0gZWFjaExpbWl0JDE7XG4gICAgZXhwb3J0cy5mb3JFYWNoT2YgPSBlYWNoT2YkMTtcbiAgICBleHBvcnRzLmZvckVhY2hPZkxpbWl0ID0gZWFjaE9mTGltaXQkMTtcbiAgICBleHBvcnRzLmZvckVhY2hPZlNlcmllcyA9IGVhY2hPZlNlcmllcyQxO1xuICAgIGV4cG9ydHMuZm9yRWFjaFNlcmllcyA9IGVhY2hTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZvcmV2ZXIgPSBmb3JldmVyJDE7XG4gICAgZXhwb3J0cy5ncm91cEJ5ID0gZ3JvdXBCeTtcbiAgICBleHBvcnRzLmdyb3VwQnlMaW1pdCA9IGdyb3VwQnlMaW1pdCQxO1xuICAgIGV4cG9ydHMuZ3JvdXBCeVNlcmllcyA9IGdyb3VwQnlTZXJpZXM7XG4gICAgZXhwb3J0cy5pbmplY3QgPSByZWR1Y2UkMTtcbiAgICBleHBvcnRzLmxvZyA9IGxvZztcbiAgICBleHBvcnRzLm1hcCA9IG1hcCQxO1xuICAgIGV4cG9ydHMubWFwTGltaXQgPSBtYXBMaW1pdCQxO1xuICAgIGV4cG9ydHMubWFwU2VyaWVzID0gbWFwU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5tYXBWYWx1ZXMgPSBtYXBWYWx1ZXM7XG4gICAgZXhwb3J0cy5tYXBWYWx1ZXNMaW1pdCA9IG1hcFZhbHVlc0xpbWl0JDE7XG4gICAgZXhwb3J0cy5tYXBWYWx1ZXNTZXJpZXMgPSBtYXBWYWx1ZXNTZXJpZXM7XG4gICAgZXhwb3J0cy5tZW1vaXplID0gbWVtb2l6ZTtcbiAgICBleHBvcnRzLm5leHRUaWNrID0gbmV4dFRpY2s7XG4gICAgZXhwb3J0cy5wYXJhbGxlbCA9IHBhcmFsbGVsO1xuICAgIGV4cG9ydHMucGFyYWxsZWxMaW1pdCA9IHBhcmFsbGVsTGltaXQ7XG4gICAgZXhwb3J0cy5wcmlvcml0eVF1ZXVlID0gcHJpb3JpdHlRdWV1ZTtcbiAgICBleHBvcnRzLnF1ZXVlID0gcXVldWU7XG4gICAgZXhwb3J0cy5yYWNlID0gcmFjZSQxO1xuICAgIGV4cG9ydHMucmVkdWNlID0gcmVkdWNlJDE7XG4gICAgZXhwb3J0cy5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0O1xuICAgIGV4cG9ydHMucmVmbGVjdCA9IHJlZmxlY3Q7XG4gICAgZXhwb3J0cy5yZWZsZWN0QWxsID0gcmVmbGVjdEFsbDtcbiAgICBleHBvcnRzLnJlamVjdCA9IHJlamVjdCQxO1xuICAgIGV4cG9ydHMucmVqZWN0TGltaXQgPSByZWplY3RMaW1pdCQxO1xuICAgIGV4cG9ydHMucmVqZWN0U2VyaWVzID0gcmVqZWN0U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5yZXRyeSA9IHJldHJ5O1xuICAgIGV4cG9ydHMucmV0cnlhYmxlID0gcmV0cnlhYmxlO1xuICAgIGV4cG9ydHMuc2VsZWN0ID0gZmlsdGVyJDE7XG4gICAgZXhwb3J0cy5zZWxlY3RMaW1pdCA9IGZpbHRlckxpbWl0JDE7XG4gICAgZXhwb3J0cy5zZWxlY3RTZXJpZXMgPSBmaWx0ZXJTZXJpZXMkMTtcbiAgICBleHBvcnRzLnNlcSA9IHNlcTtcbiAgICBleHBvcnRzLnNlcmllcyA9IHNlcmllcztcbiAgICBleHBvcnRzLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZSQxO1xuICAgIGV4cG9ydHMuc29tZSA9IHNvbWUkMTtcbiAgICBleHBvcnRzLnNvbWVMaW1pdCA9IHNvbWVMaW1pdCQxO1xuICAgIGV4cG9ydHMuc29tZVNlcmllcyA9IHNvbWVTZXJpZXMkMTtcbiAgICBleHBvcnRzLnNvcnRCeSA9IHNvcnRCeSQxO1xuICAgIGV4cG9ydHMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgZXhwb3J0cy50aW1lcyA9IHRpbWVzO1xuICAgIGV4cG9ydHMudGltZXNMaW1pdCA9IHRpbWVzTGltaXQ7XG4gICAgZXhwb3J0cy50aW1lc1NlcmllcyA9IHRpbWVzU2VyaWVzO1xuICAgIGV4cG9ydHMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGV4cG9ydHMudHJ5RWFjaCA9IHRyeUVhY2gkMTtcbiAgICBleHBvcnRzLnVubWVtb2l6ZSA9IHVubWVtb2l6ZTtcbiAgICBleHBvcnRzLnVudGlsID0gdW50aWw7XG4gICAgZXhwb3J0cy53YXRlcmZhbGwgPSB3YXRlcmZhbGwkMTtcbiAgICBleHBvcnRzLndoaWxzdCA9IHdoaWxzdCQxO1xuICAgIGV4cG9ydHMud3JhcFN5bmMgPSBhc3luY2lmeTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsCiAgICAidmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJ2NvbnN0YW50cycpXG5cbnZhciBvcmlnQ3dkID0gcHJvY2Vzcy5jd2RcbnZhciBjd2QgPSBudWxsXG5cbnZhciBwbGF0Zm9ybSA9IHByb2Nlc3MuZW52LkdSQUNFRlVMX0ZTX1BMQVRGT1JNIHx8IHByb2Nlc3MucGxhdGZvcm1cblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCFjd2QpXG4gICAgY3dkID0gb3JpZ0N3ZC5jYWxsKHByb2Nlc3MpXG4gIHJldHVybiBjd2Rcbn1cbnRyeSB7XG4gIHByb2Nlc3MuY3dkKClcbn0gY2F0Y2ggKGVyKSB7fVxuXG4vLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB1bnRpbCBub2RlLmpzIDEyIGlzIHJlcXVpcmVkXG5pZiAodHlwZW9mIHByb2Nlc3MuY2hkaXIgPT09ICdmdW5jdGlvbicpIHtcbiAgdmFyIGNoZGlyID0gcHJvY2Vzcy5jaGRpclxuICBwcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGQpIHtcbiAgICBjd2QgPSBudWxsXG4gICAgY2hkaXIuY2FsbChwcm9jZXNzLCBkKVxuICB9XG4gIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm9jZXNzLmNoZGlyLCBjaGRpcilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaFxuXG5mdW5jdGlvbiBwYXRjaCAoZnMpIHtcbiAgLy8gKHJlLSlpbXBsZW1lbnQgc29tZSB0aGluZ3MgdGhhdCBhcmUga25vd24gYnVzdGVkIG9yIG1pc3NpbmcuXG5cbiAgLy8gbGNobW9kLCBicm9rZW4gcHJpb3IgdG8gMC42LjJcbiAgLy8gYmFjay1wb3J0IHRoZSBmaXggaGVyZS5cbiAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSgnT19TWU1MSU5LJykgJiZcbiAgICAgIHByb2Nlc3MudmVyc2lvbi5tYXRjaCgvXnYwXFwuNlxcLlswLTJdfF52MFxcLjVcXC4vKSkge1xuICAgIHBhdGNoTGNobW9kKGZzKVxuICB9XG5cbiAgLy8gbHV0aW1lcyBpbXBsZW1lbnRhdGlvbiwgb3Igbm8tb3BcbiAgaWYgKCFmcy5sdXRpbWVzKSB7XG4gICAgcGF0Y2hMdXRpbWVzKGZzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdyYWNlZnVsLWZzL2lzc3Vlcy80XG4gIC8vIENob3duIHNob3VsZCBub3QgZmFpbCBvbiBlaW52YWwgb3IgZXBlcm0gaWYgbm9uLXJvb3QuXG4gIC8vIEl0IHNob3VsZCBub3QgZmFpbCBvbiBlbm9zeXMgZXZlciwgYXMgdGhpcyBqdXN0IGluZGljYXRlc1xuICAvLyB0aGF0IGEgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBpbnRlbmRlZCBvcGVyYXRpb24uXG5cbiAgZnMuY2hvd24gPSBjaG93bkZpeChmcy5jaG93bilcbiAgZnMuZmNob3duID0gY2hvd25GaXgoZnMuZmNob3duKVxuICBmcy5sY2hvd24gPSBjaG93bkZpeChmcy5sY2hvd24pXG5cbiAgZnMuY2htb2QgPSBjaG1vZEZpeChmcy5jaG1vZClcbiAgZnMuZmNobW9kID0gY2htb2RGaXgoZnMuZmNobW9kKVxuICBmcy5sY2htb2QgPSBjaG1vZEZpeChmcy5sY2htb2QpXG5cbiAgZnMuY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmNob3duU3luYylcbiAgZnMuZmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5mY2hvd25TeW5jKVxuICBmcy5sY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmxjaG93blN5bmMpXG5cbiAgZnMuY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmNobW9kU3luYylcbiAgZnMuZmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5mY2htb2RTeW5jKVxuICBmcy5sY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmxjaG1vZFN5bmMpXG5cbiAgZnMuc3RhdCA9IHN0YXRGaXgoZnMuc3RhdClcbiAgZnMuZnN0YXQgPSBzdGF0Rml4KGZzLmZzdGF0KVxuICBmcy5sc3RhdCA9IHN0YXRGaXgoZnMubHN0YXQpXG5cbiAgZnMuc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5zdGF0U3luYylcbiAgZnMuZnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuZnN0YXRTeW5jKVxuICBmcy5sc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5sc3RhdFN5bmMpXG5cbiAgLy8gaWYgbGNobW9kL2xjaG93biBkbyBub3QgZXhpc3QsIHRoZW4gbWFrZSB0aGVtIG5vLW9wc1xuICBpZiAoZnMuY2htb2QgJiYgIWZzLmxjaG1vZCkge1xuICAgIGZzLmxjaG1vZCA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuICBpZiAoZnMuY2hvd24gJiYgIWZzLmxjaG93bikge1xuICAgIGZzLmxjaG93biA9IGZ1bmN0aW9uIChwYXRoLCB1aWQsIGdpZCwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNob3duU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cblxuICAvLyBvbiBXaW5kb3dzLCBBL1Ygc29mdHdhcmUgY2FuIGxvY2sgdGhlIGRpcmVjdG9yeSwgY2F1c2luZyB0aGlzXG4gIC8vIHRvIGZhaWwgd2l0aCBhbiBFQUNDRVMgb3IgRVBFUk0gaWYgdGhlIGRpcmVjdG9yeSBjb250YWlucyBuZXdseVxuICAvLyBjcmVhdGVkIGZpbGVzLiAgVHJ5IGFnYWluIG9uIGZhaWx1cmUsIGZvciB1cCB0byA2MCBzZWNvbmRzLlxuXG4gIC8vIFNldCB0aGUgdGltZW91dCB0aGlzIGxvbmcgYmVjYXVzZSBzb21lIFdpbmRvd3MgQW50aS1WaXJ1cywgc3VjaCBhcyBQYXJpdHlcbiAgLy8gYml0OSwgbWF5IGxvY2sgZmlsZXMgZm9yIHVwIHRvIGEgbWludXRlLCBjYXVzaW5nIG5wbSBwYWNrYWdlIGluc3RhbGxcbiAgLy8gZmFpbHVyZXMuIEFsc28sIHRha2UgY2FyZSB0byB5aWVsZCB0aGUgc2NoZWR1bGVyLiBXaW5kb3dzIHNjaGVkdWxpbmcgZ2l2ZXNcbiAgLy8gQ1BVIHRvIGEgYnVzeSBsb29waW5nIHByb2Nlc3MsIHdoaWNoIGNhbiBjYXVzZSB0aGUgcHJvZ3JhbSBjYXVzaW5nIHRoZSBsb2NrXG4gIC8vIGNvbnRlbnRpb24gdG8gYmUgc3RhcnZlZCBvZiBDUFUgYnkgbm9kZSwgc28gdGhlIGNvbnRlbnRpb24gZG9lc24ndCByZXNvbHZlLlxuICBpZiAocGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgIGZzLnJlbmFtZSA9IHR5cGVvZiBmcy5yZW5hbWUgIT09ICdmdW5jdGlvbicgPyBmcy5yZW5hbWVcbiAgICA6IChmdW5jdGlvbiAoZnMkcmVuYW1lKSB7XG4gICAgICBmdW5jdGlvbiByZW5hbWUgKGZyb20sIHRvLCBjYikge1xuICAgICAgICB2YXIgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIHZhciBiYWNrb2ZmID0gMDtcbiAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBmdW5jdGlvbiBDQiAoZXIpIHtcbiAgICAgICAgICBpZiAoZXJcbiAgICAgICAgICAgICAgJiYgKGVyLmNvZGUgPT09IFwiRUFDQ0VTXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiIHx8IGVyLmNvZGUgPT09IFwiRUJVU1lcIilcbiAgICAgICAgICAgICAgJiYgRGF0ZS5ub3coKSAtIHN0YXJ0IDwgNjAwMDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGZzLnN0YXQodG8sIGZ1bmN0aW9uIChzdGF0ZXIsIHN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlciAmJiBzdGF0ZXIuY29kZSA9PT0gXCJFTk9FTlRcIilcbiAgICAgICAgICAgICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgQ0IpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGNiKGVyKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgYmFja29mZilcbiAgICAgICAgICAgIGlmIChiYWNrb2ZmIDwgMTAwKVxuICAgICAgICAgICAgICBiYWNrb2ZmICs9IDEwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlbmFtZSwgZnMkcmVuYW1lKVxuICAgICAgcmV0dXJuIHJlbmFtZVxuICAgIH0pKGZzLnJlbmFtZSlcbiAgfVxuXG4gIC8vIGlmIHJlYWQoKSByZXR1cm5zIEVBR0FJTiwgdGhlbiBqdXN0IHRyeSBpdCBhZ2Fpbi5cbiAgZnMucmVhZCA9IHR5cGVvZiBmcy5yZWFkICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFxuICA6IChmdW5jdGlvbiAoZnMkcmVhZCkge1xuICAgIGZ1bmN0aW9uIHJlYWQgKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2tfKSB7XG4gICAgICB2YXIgY2FsbGJhY2tcbiAgICAgIGlmIChjYWxsYmFja18gJiYgdHlwZW9mIGNhbGxiYWNrXyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXIsIF8sIF9fKSB7XG4gICAgICAgICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FsbGJhY2tfLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvLyBUaGlzIGVuc3VyZXMgYHV0aWwucHJvbWlzaWZ5YCB3b3JrcyBhcyBpdCBkb2VzIGZvciBuYXRpdmUgYGZzLnJlYWRgLlxuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZWFkLCBmcyRyZWFkKVxuICAgIHJldHVybiByZWFkXG4gIH0pKGZzLnJlYWQpXG5cbiAgZnMucmVhZFN5bmMgPSB0eXBlb2YgZnMucmVhZFN5bmMgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkU3luY1xuICA6IChmdW5jdGlvbiAoZnMkcmVhZFN5bmMpIHsgcmV0dXJuIGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHtcbiAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRTeW5jLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbilcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfX0pKGZzLnJlYWRTeW5jKVxuXG4gIGZ1bmN0aW9uIHBhdGNoTGNobW9kIChmcykge1xuICAgIGZzLmxjaG1vZCA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICAgICAgZnMub3BlbiggcGF0aFxuICAgICAgICAgICAgICwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOS1xuICAgICAgICAgICAgICwgbW9kZVxuICAgICAgICAgICAgICwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICAgIGZzLmZjaG1vZChmZCwgbW9kZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbihlcnIyKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVyciB8fCBlcnIyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSkge1xuICAgICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOSywgbW9kZSlcblxuICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICB2YXIgcmV0XG4gICAgICB0cnkge1xuICAgICAgICByZXQgPSBmcy5mY2htb2RTeW5jKGZkLCBtb2RlKVxuICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoTHV0aW1lcyAoZnMpIHtcbiAgICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KFwiT19TWU1MSU5LXCIpICYmIGZzLmZ1dGltZXMpIHtcbiAgICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10LCBjYikge1xuICAgICAgICBmcy5vcGVuKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkssIGZ1bmN0aW9uIChlciwgZmQpIHtcbiAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgZnMuZnV0aW1lcyhmZCwgYXQsIG10LCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbiAoZXIyKSB7XG4gICAgICAgICAgICAgIGlmIChjYikgY2IoZXIgfHwgZXIyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQpIHtcbiAgICAgICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSylcbiAgICAgICAgdmFyIHJldFxuICAgICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0ID0gZnMuZnV0aW1lc1N5bmMoZmQsIGF0LCBtdClcbiAgICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGZzLmZ1dGltZXMpIHtcbiAgICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAoX2EsIF9iLCBfYywgY2IpIHsgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKSB9XG4gICAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSlcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGNob3duRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG93bkZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRGaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBjYikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9uc1xuICAgICAgICBvcHRpb25zID0gbnVsbFxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY2FsbGJhY2sgKGVyLCBzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgICAgaWYgKHN0YXRzLmdpZCA8IDApIHN0YXRzLmdpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICB9XG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucywgY2FsbGJhY2spXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucykge1xuICAgICAgdmFyIHN0YXRzID0gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0KVxuICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgaWYgKHN0YXRzLmdpZCA8IDApIHN0YXRzLmdpZCArPSAweDEwMDAwMDAwMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRzO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVOT1NZUyBtZWFucyB0aGF0IHRoZSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIG9wLiBKdXN0IGlnbm9yZVxuICAvLyB0aGF0LCBiZWNhdXNlIGl0IGRvZXNuJ3QgbWF0dGVyLlxuICAvL1xuICAvLyBpZiB0aGVyZSdzIG5vIGdldHVpZCwgb3IgaWYgZ2V0dWlkKCkgaXMgc29tZXRoaW5nIG90aGVyXG4gIC8vIHRoYW4gMCwgYW5kIHRoZSBlcnJvciBpcyBFSU5WQUwgb3IgRVBFUk0sIHRoZW4ganVzdCBpZ25vcmVcbiAgLy8gaXQuXG4gIC8vXG4gIC8vIFRoaXMgc3BlY2lmaWMgY2FzZSBpcyBhIHNpbGVudCBmYWlsdXJlIGluIGNwLCBpbnN0YWxsLCB0YXIsXG4gIC8vIGFuZCBtb3N0IG90aGVyIHVuaXggdG9vbHMgdGhhdCBtYW5hZ2UgcGVybWlzc2lvbnMuXG4gIC8vXG4gIC8vIFdoZW4gcnVubmluZyBhcyByb290LCBvciBpZiBvdGhlciB0eXBlcyBvZiBlcnJvcnMgYXJlXG4gIC8vIGVuY291bnRlcmVkLCB0aGVuIGl0J3Mgc3RyaWN0LlxuICBmdW5jdGlvbiBjaG93bkVyT2sgKGVyKSB7XG4gICAgaWYgKCFlcilcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICBpZiAoZXIuY29kZSA9PT0gXCJFTk9TWVNcIilcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICB2YXIgbm9ucm9vdCA9ICFwcm9jZXNzLmdldHVpZCB8fCBwcm9jZXNzLmdldHVpZCgpICE9PSAwXG4gICAgaWYgKG5vbnJvb3QpIHtcbiAgICAgIGlmIChlci5jb2RlID09PSBcIkVJTlZBTFwiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIilcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwKICAgICJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtXG5cbm1vZHVsZS5leHBvcnRzID0gbGVnYWN5XG5cbmZ1bmN0aW9uIGxlZ2FjeSAoZnMpIHtcbiAgcmV0dXJuIHtcbiAgICBSZWFkU3RyZWFtOiBSZWFkU3RyZWFtLFxuICAgIFdyaXRlU3RyZWFtOiBXcml0ZVN0cmVhbVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKSkgcmV0dXJuIG5ldyBSZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3InO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5idWZmZXJTaXplID0gNjQgKiAxMDI0O1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmNvZGluZykgdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKTtcblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVuZCA9IEluZmluaXR5O1xuICAgICAgfSBlbHNlIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignZW5kIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnQgPiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPD0gZW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mZCAhPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5fcmVhZCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnMub3Blbih0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIHNlbGYucmVhZGFibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLmZkID0gZmQ7XG4gICAgICBzZWxmLmVtaXQoJ29wZW4nLCBmZCk7XG4gICAgICBzZWxmLl9yZWFkKCk7XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKSkgcmV0dXJuIG5ldyBXcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAndyc7XG4gICAgdGhpcy5lbmNvZGluZyA9ICdiaW5hcnknO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhcnQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA+PSB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZmQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX29wZW4gPSBmcy5vcGVuO1xuICAgICAgdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3BlbiwgdGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIHVuZGVmaW5lZF0pO1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVxuXG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqLl9fcHJvdG9fX1xufVxuXG5mdW5jdGlvbiBjbG9uZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpXG4gICAgcmV0dXJuIG9ialxuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgdmFyIGNvcHkgPSB7IF9fcHJvdG9fXzogZ2V0UHJvdG90eXBlT2Yob2JqKSB9XG4gIGVsc2VcbiAgICB2YXIgY29weSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb3B5LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpKVxuICB9KVxuXG4gIHJldHVybiBjb3B5XG59XG4iLAogICAgInZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwb2x5ZmlsbHMgPSByZXF1aXJlKCcuL3BvbHlmaWxscy5qcycpXG52YXIgbGVnYWN5ID0gcmVxdWlyZSgnLi9sZWdhY3ktc3RyZWFtcy5qcycpXG52YXIgY2xvbmUgPSByZXF1aXJlKCcuL2Nsb25lLmpzJylcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xudmFyIGdyYWNlZnVsUXVldWVcbnZhciBwcmV2aW91c1N5bWJvbFxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAtIG5vZGUgMC54IHBvbHlmaWxsICovXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLmZvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBncmFjZWZ1bFF1ZXVlID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucXVldWUnKVxuICAvLyBUaGlzIGlzIHVzZWQgaW4gdGVzdGluZyBieSBmdXR1cmUgdmVyc2lvbnNcbiAgcHJldmlvdXNTeW1ib2wgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5wcmV2aW91cycpXG59IGVsc2Uge1xuICBncmFjZWZ1bFF1ZXVlID0gJ19fX2dyYWNlZnVsLWZzLnF1ZXVlJ1xuICBwcmV2aW91c1N5bWJvbCA9ICdfX19ncmFjZWZ1bC1mcy5wcmV2aW91cydcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuXG5mdW5jdGlvbiBwdWJsaXNoUXVldWUoY29udGV4dCwgcXVldWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHQsIGdyYWNlZnVsUXVldWUsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHF1ZXVlXG4gICAgfVxuICB9KVxufVxuXG52YXIgZGVidWcgPSBub29wXG5pZiAodXRpbC5kZWJ1Z2xvZylcbiAgZGVidWcgPSB1dGlsLmRlYnVnbG9nKCdnZnM0JylcbmVsc2UgaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSlcbiAgZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbSA9IHV0aWwuZm9ybWF0LmFwcGx5KHV0aWwsIGFyZ3VtZW50cylcbiAgICBtID0gJ0dGUzQ6ICcgKyBtLnNwbGl0KC9cXG4vKS5qb2luKCdcXG5HRlM0OiAnKVxuICAgIGNvbnNvbGUuZXJyb3IobSlcbiAgfVxuXG4vLyBPbmNlIHRpbWUgaW5pdGlhbGl6YXRpb25cbmlmICghZnNbZ3JhY2VmdWxRdWV1ZV0pIHtcbiAgLy8gVGhpcyBxdWV1ZSBjYW4gYmUgc2hhcmVkIGJ5IG11bHRpcGxlIGxvYWRlZCBpbnN0YW5jZXNcbiAgdmFyIHF1ZXVlID0gZ2xvYmFsW2dyYWNlZnVsUXVldWVdIHx8IFtdXG4gIHB1Ymxpc2hRdWV1ZShmcywgcXVldWUpXG5cbiAgLy8gUGF0Y2ggZnMuY2xvc2UvY2xvc2VTeW5jIHRvIHNoYXJlZCBxdWV1ZSB2ZXJzaW9uLCBiZWNhdXNlIHdlIG5lZWRcbiAgLy8gdG8gcmV0cnkoKSB3aGVuZXZlciBhIGNsb3NlIGhhcHBlbnMgKmFueXdoZXJlKiBpbiB0aGUgcHJvZ3JhbS5cbiAgLy8gVGhpcyBpcyBlc3NlbnRpYWwgd2hlbiBtdWx0aXBsZSBncmFjZWZ1bC1mcyBpbnN0YW5jZXMgYXJlXG4gIC8vIGluIHBsYXkgYXQgdGhlIHNhbWUgdGltZS5cbiAgZnMuY2xvc2UgPSAoZnVuY3Rpb24gKGZzJGNsb3NlKSB7XG4gICAgZnVuY3Rpb24gY2xvc2UgKGZkLCBjYikge1xuICAgICAgcmV0dXJuIGZzJGNsb3NlLmNhbGwoZnMsIGZkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlLCBwcmV2aW91c1N5bWJvbCwge1xuICAgICAgdmFsdWU6IGZzJGNsb3NlXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VcbiAgfSkoZnMuY2xvc2UpXG5cbiAgZnMuY2xvc2VTeW5jID0gKGZ1bmN0aW9uIChmcyRjbG9zZVN5bmMpIHtcbiAgICBmdW5jdGlvbiBjbG9zZVN5bmMgKGZkKSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgZnMkY2xvc2VTeW5jLmFwcGx5KGZzLCBhcmd1bWVudHMpXG4gICAgICByZXNldFF1ZXVlKClcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2VTeW5jLCBwcmV2aW91c1N5bWJvbCwge1xuICAgICAgdmFsdWU6IGZzJGNsb3NlU3luY1xuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlU3luY1xuICB9KShmcy5jbG9zZVN5bmMpXG5cbiAgaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSkge1xuICAgIHByb2Nlc3Mub24oJ2V4aXQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGRlYnVnKGZzW2dyYWNlZnVsUXVldWVdKVxuICAgICAgcmVxdWlyZSgnYXNzZXJ0JykuZXF1YWwoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoLCAwKVxuICAgIH0pXG4gIH1cbn1cblxuaWYgKCFnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0pIHtcbiAgcHVibGlzaFF1ZXVlKGdsb2JhbCwgZnNbZ3JhY2VmdWxRdWV1ZV0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGNsb25lKGZzKSlcbmlmIChwcm9jZXNzLmVudi5URVNUX0dSQUNFRlVMX0ZTX0dMT0JBTF9QQVRDSCAmJiAhZnMuX19wYXRjaGVkKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwYXRjaChmcylcbiAgICBmcy5fX3BhdGNoZWQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBwYXRjaCAoZnMpIHtcbiAgLy8gRXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZXMgdGhlIG9wZW4oKSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbiBoZXJlXG4gIHBvbHlmaWxscyhmcylcbiAgZnMuZ3JhY2VmdWxpZnkgPSBwYXRjaFxuXG4gIGZzLmNyZWF0ZVJlYWRTdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtXG4gIGZzLmNyZWF0ZVdyaXRlU3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW1cbiAgdmFyIGZzJHJlYWRGaWxlID0gZnMucmVhZEZpbGVcbiAgZnMucmVhZEZpbGUgPSByZWFkRmlsZVxuICBmdW5jdGlvbiByZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRyZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kcmVhZEZpbGUsIFtwYXRoLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyR3cml0ZUZpbGUgPSBmcy53cml0ZUZpbGVcbiAgZnMud3JpdGVGaWxlID0gd3JpdGVGaWxlXG4gIGZ1bmN0aW9uIHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kd3JpdGVGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkYXBwZW5kRmlsZSA9IGZzLmFwcGVuZEZpbGVcbiAgaWYgKGZzJGFwcGVuZEZpbGUpXG4gICAgZnMuYXBwZW5kRmlsZSA9IGFwcGVuZEZpbGVcbiAgZnVuY3Rpb24gYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kYXBwZW5kRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGNvcHlGaWxlID0gZnMuY29weUZpbGVcbiAgaWYgKGZzJGNvcHlGaWxlKVxuICAgIGZzLmNvcHlGaWxlID0gY29weUZpbGVcbiAgZnVuY3Rpb24gY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IgPSBmbGFnc1xuICAgICAgZmxhZ3MgPSAwXG4gICAgfVxuICAgIHJldHVybiBnbyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRjb3B5RmlsZSwgW3NyYywgZGVzdCwgZmxhZ3MsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHJlYWRkaXIgPSBmcy5yZWFkZGlyXG4gIGZzLnJlYWRkaXIgPSByZWFkZGlyXG4gIHZhciBub1JlYWRkaXJPcHRpb25WZXJzaW9ucyA9IC9edlswLTVdXFwuL1xuICBmdW5jdGlvbiByZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHZhciBnbyRyZWFkZGlyID0gbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMudGVzdChwcm9jZXNzLnZlcnNpb24pXG4gICAgICA/IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cbiAgICAgIDogZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBvcHRpb25zLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuXG4gICAgcmV0dXJuIGdvJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBmcyRyZWFkZGlyQ2FsbGJhY2sgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXJyLCBmaWxlcykge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtcbiAgICAgICAgICAgIGdvJHJlYWRkaXIsXG4gICAgICAgICAgICBbcGF0aCwgb3B0aW9ucywgY2JdLFxuICAgICAgICAgICAgZXJyLFxuICAgICAgICAgICAgc3RhcnRUaW1lIHx8IERhdGUubm93KCksXG4gICAgICAgICAgICBEYXRlLm5vdygpXG4gICAgICAgICAgXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLnNvcnQpXG4gICAgICAgICAgICBmaWxlcy5zb3J0KClcblxuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5jYWxsKHRoaXMsIGVyciwgZmlsZXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy52ZXJzaW9uLnN1YnN0cigwLCA0KSA9PT0gJ3YwLjgnKSB7XG4gICAgdmFyIGxlZ1N0cmVhbXMgPSBsZWdhY3koZnMpXG4gICAgUmVhZFN0cmVhbSA9IGxlZ1N0cmVhbXMuUmVhZFN0cmVhbVxuICAgIFdyaXRlU3RyZWFtID0gbGVnU3RyZWFtcy5Xcml0ZVN0cmVhbVxuICB9XG5cbiAgdmFyIGZzJFJlYWRTdHJlYW0gPSBmcy5SZWFkU3RyZWFtXG4gIGlmIChmcyRSZWFkU3RyZWFtKSB7XG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFJlYWRTdHJlYW0ucHJvdG90eXBlKVxuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBSZWFkU3RyZWFtJG9wZW5cbiAgfVxuXG4gIHZhciBmcyRXcml0ZVN0cmVhbSA9IGZzLldyaXRlU3RyZWFtXG4gIGlmIChmcyRXcml0ZVN0cmVhbSkge1xuICAgIFdyaXRlU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkV3JpdGVTdHJlYW0ucHJvdG90eXBlKVxuICAgIFdyaXRlU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gV3JpdGVTdHJlYW0kb3BlblxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIFJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1dyaXRlU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIFdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIC8vIGxlZ2FjeSBuYW1lc1xuICB2YXIgRmlsZVJlYWRTdHJlYW0gPSBSZWFkU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEZpbGVSZWFkU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICB2YXIgRmlsZVdyaXRlU3RyZWFtID0gV3JpdGVTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVdyaXRlU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEZpbGVXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRSZWFkU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gUmVhZFN0cmVhbS5hcHBseShPYmplY3QuY3JlYXRlKFJlYWRTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBpZiAodGhhdC5hdXRvQ2xvc2UpXG4gICAgICAgICAgdGhhdC5kZXN0cm95KClcblxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgICB0aGF0LnJlYWQoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkV3JpdGVTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbS5hcHBseShPYmplY3QuY3JlYXRlKFdyaXRlU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRoYXQuZGVzdHJveSgpXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLlJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5Xcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgdmFyIGZzJG9wZW4gPSBmcy5vcGVuXG4gIGZzLm9wZW4gPSBvcGVuXG4gIGZ1bmN0aW9uIG9wZW4gKHBhdGgsIGZsYWdzLCBtb2RlLCBjYikge1xuICAgIGlmICh0eXBlb2YgbW9kZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gbW9kZSwgbW9kZSA9IG51bGxcblxuICAgIHJldHVybiBnbyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJG9wZW4gKHBhdGgsIGZsYWdzLCBtb2RlLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkb3BlbihwYXRoLCBmbGFncywgbW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kb3BlbiwgW3BhdGgsIGZsYWdzLCBtb2RlLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmc1xufVxuXG5mdW5jdGlvbiBlbnF1ZXVlIChlbGVtKSB7XG4gIGRlYnVnKCdFTlFVRVVFJywgZWxlbVswXS5uYW1lLCBlbGVtWzFdKVxuICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gIHJldHJ5KClcbn1cblxuLy8ga2VlcCB0cmFjayBvZiB0aGUgdGltZW91dCBiZXR3ZWVuIHJldHJ5KCkgY2FsbHNcbnZhciByZXRyeVRpbWVyXG5cbi8vIHJlc2V0IHRoZSBzdGFydFRpbWUgYW5kIGxhc3RUaW1lIHRvIG5vd1xuLy8gdGhpcyByZXNldHMgdGhlIHN0YXJ0IG9mIHRoZSA2MCBzZWNvbmQgb3ZlcmFsbCB0aW1lb3V0IGFzIHdlbGwgYXMgdGhlXG4vLyBkZWxheSBiZXR3ZWVuIGF0dGVtcHRzIHNvIHRoYXQgd2UnbGwgcmV0cnkgdGhlc2Ugam9icyBzb29uZXJcbmZ1bmN0aW9uIHJlc2V0UXVldWUgKCkge1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gZW50cmllcyB0aGF0IGFyZSBvbmx5IGEgbGVuZ3RoIG9mIDIgYXJlIGZyb20gYW4gb2xkZXIgdmVyc2lvbiwgZG9uJ3RcbiAgICAvLyBib3RoZXIgbW9kaWZ5aW5nIHRob3NlIHNpbmNlIHRoZXknbGwgYmUgcmV0cmllZCBhbnl3YXkuXG4gICAgaWYgKGZzW2dyYWNlZnVsUXVldWVdW2ldLmxlbmd0aCA+IDIpIHtcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzNdID0gbm93IC8vIHN0YXJ0VGltZVxuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bNF0gPSBub3cgLy8gbGFzdFRpbWVcbiAgICB9XG4gIH1cbiAgLy8gY2FsbCByZXRyeSB0byBtYWtlIHN1cmUgd2UncmUgYWN0aXZlbHkgcHJvY2Vzc2luZyB0aGUgcXVldWVcbiAgcmV0cnkoKVxufVxuXG5mdW5jdGlvbiByZXRyeSAoKSB7XG4gIC8vIGNsZWFyIHRoZSB0aW1lciBhbmQgcmVtb3ZlIGl0IHRvIGhlbHAgcHJldmVudCB1bmludGVuZGVkIGNvbmN1cnJlbmN5XG4gIGNsZWFyVGltZW91dChyZXRyeVRpbWVyKVxuICByZXRyeVRpbWVyID0gdW5kZWZpbmVkXG5cbiAgaWYgKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm5cblxuICB2YXIgZWxlbSA9IGZzW2dyYWNlZnVsUXVldWVdLnNoaWZ0KClcbiAgdmFyIGZuID0gZWxlbVswXVxuICB2YXIgYXJncyA9IGVsZW1bMV1cbiAgLy8gdGhlc2UgaXRlbXMgbWF5IGJlIHVuc2V0IGlmIHRoZXkgd2VyZSBhZGRlZCBieSBhbiBvbGRlciBncmFjZWZ1bC1mc1xuICB2YXIgZXJyID0gZWxlbVsyXVxuICB2YXIgc3RhcnRUaW1lID0gZWxlbVszXVxuICB2YXIgbGFzdFRpbWUgPSBlbGVtWzRdXG5cbiAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHN0YXJ0VGltZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmIHdlJ3ZlIHdhaXRlZFxuICAvLyBsb25nIGVub3VnaCwgc28gZ28gYWhlYWQgYW5kIHJldHJ5IHRoaXMgaXRlbSBub3dcbiAgaWYgKHN0YXJ0VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVidWcoJ1JFVFJZJywgZm4ubmFtZSwgYXJncylcbiAgICBmbi5hcHBseShudWxsLCBhcmdzKVxuICB9IGVsc2UgaWYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPj0gNjAwMDApIHtcbiAgICAvLyBpdCdzIGJlZW4gbW9yZSB0aGFuIDYwIHNlY29uZHMgdG90YWwsIGJhaWwgbm93XG4gICAgZGVidWcoJ1RJTUVPVVQnLCBmbi5uYW1lLCBhcmdzKVxuICAgIHZhciBjYiA9IGFyZ3MucG9wKClcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IuY2FsbChudWxsLCBlcnIpXG4gIH0gZWxzZSB7XG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gdGhlIGxhc3QgYXR0ZW1wdCBhbmQgcmlnaHQgbm93XG4gICAgdmFyIHNpbmNlQXR0ZW1wdCA9IERhdGUubm93KCkgLSBsYXN0VGltZVxuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHdoZW4gd2UgZmlyc3QgdHJpZWQsIGFuZCB3aGVuIHdlIGxhc3QgdHJpZWRcbiAgICAvLyByb3VuZGVkIHVwIHRvIGF0IGxlYXN0IDFcbiAgICB2YXIgc2luY2VTdGFydCA9IE1hdGgubWF4KGxhc3RUaW1lIC0gc3RhcnRUaW1lLCAxKVxuICAgIC8vIGJhY2tvZmYuIHdhaXQgbG9uZ2VyIHRoYW4gdGhlIHRvdGFsIHRpbWUgd2UndmUgYmVlbiByZXRyeWluZywgYnV0IG9ubHlcbiAgICAvLyB1cCB0byBhIG1heGltdW0gb2YgMTAwbXNcbiAgICB2YXIgZGVzaXJlZERlbGF5ID0gTWF0aC5taW4oc2luY2VTdGFydCAqIDEuMiwgMTAwKVxuICAgIC8vIGl0J3MgYmVlbiBsb25nIGVub3VnaCBzaW5jZSB0aGUgbGFzdCByZXRyeSwgZG8gaXQgYWdhaW5cbiAgICBpZiAoc2luY2VBdHRlbXB0ID49IGRlc2lyZWREZWxheSkge1xuICAgICAgZGVidWcoJ1JFVFJZJywgZm4ubmFtZSwgYXJncylcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtzdGFydFRpbWVdKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgd2UgY2FuJ3QgZG8gdGhpcyBqb2IgeWV0LCBwdXNoIGl0IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG4gICAgICAvLyBhbmQgbGV0IHRoZSBuZXh0IGl0ZXJhdGlvbiBjaGVjayBhZ2FpblxuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICAgIH1cbiAgfVxuXG4gIC8vIHNjaGVkdWxlIG91ciBuZXh0IHJ1biBpZiBvbmUgaXNuJ3QgYWxyZWFkeSBzY2hlZHVsZWRcbiAgaWYgKHJldHJ5VGltZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHJ5VGltZXIgPSBzZXRUaW1lb3V0KHJldHJ5LCAwKVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXNTdHJlYW0gPSBzdHJlYW0gPT5cblx0c3RyZWFtICE9PSBudWxsICYmXG5cdHR5cGVvZiBzdHJlYW0gPT09ICdvYmplY3QnICYmXG5cdHR5cGVvZiBzdHJlYW0ucGlwZSA9PT0gJ2Z1bmN0aW9uJztcblxuaXNTdHJlYW0ud3JpdGFibGUgPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0oc3RyZWFtKSAmJlxuXHRzdHJlYW0ud3JpdGFibGUgIT09IGZhbHNlICYmXG5cdHR5cGVvZiBzdHJlYW0uX3dyaXRlID09PSAnZnVuY3Rpb24nICYmXG5cdHR5cGVvZiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xuXG5pc1N0cmVhbS5yZWFkYWJsZSA9IHN0cmVhbSA9PlxuXHRpc1N0cmVhbShzdHJlYW0pICYmXG5cdHN0cmVhbS5yZWFkYWJsZSAhPT0gZmFsc2UgJiZcblx0dHlwZW9mIHN0cmVhbS5fcmVhZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuXHR0eXBlb2Ygc3RyZWFtLl9yZWFkYWJsZVN0YXRlID09PSAnb2JqZWN0JztcblxuaXNTdHJlYW0uZHVwbGV4ID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtLndyaXRhYmxlKHN0cmVhbSkgJiZcblx0aXNTdHJlYW0ucmVhZGFibGUoc3RyZWFtKTtcblxuaXNTdHJlYW0udHJhbnNmb3JtID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtLmR1cGxleChzdHJlYW0pICYmXG5cdHR5cGVvZiBzdHJlYW0uX3RyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmVhbTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgIXByb2Nlc3MudmVyc2lvbiB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MC4nKSA9PT0gMCB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS4nKSA9PT0gMCAmJiBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuOC4nKSAhPT0gMCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHsgbmV4dFRpY2s6IG5leHRUaWNrIH07XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3Ncbn1cblxuZnVuY3Rpb24gbmV4dFRpY2soZm4sIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGFyZ3MsIGk7XG4gIHN3aXRjaCAobGVuKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZuKTtcbiAgY2FzZSAyOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja09uZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSk7XG4gICAgfSk7XG4gIGNhc2UgMzpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUd28oKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIpO1xuICAgIH0pO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVGhyZWUoKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIH0pO1xuICBkZWZhdWx0OlxuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgYXJnc1tpKytdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2soKSB7XG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4iLAogICAgInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwKICAgICIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cblxuZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuICB9XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyLmlzQnVmZmVyO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG4iLAogICAgImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAidHJ5IHtcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICh0eXBlb2YgdXRpbC5pbmhlcml0cyAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgJyc7XG4gIG1vZHVsZS5leHBvcnRzID0gdXRpbC5pbmhlcml0cztcbn0gY2F0Y2ggKGUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2luaGVyaXRzX2Jyb3dzZXIuanMnKTtcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuZnVuY3Rpb24gY29weUJ1ZmZlcihzcmMsIHRhcmdldCwgb2Zmc2V0KSB7XG4gIHNyYy5jb3B5KHRhcmdldCwgb2Zmc2V0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJ1ZmZlckxpc3QoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1ZmZlckxpc3QpO1xuXG4gICAgdGhpcy5oZWFkID0gbnVsbDtcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoKHYpIHtcbiAgICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IG51bGwgfTtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O2Vsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gICAgKyt0aGlzLmxlbmd0aDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gdW5zaGlmdCh2KSB7XG4gICAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiB0aGlzLmhlYWQgfTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgICsrdGhpcy5sZW5ndGg7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiBzaGlmdCgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICB2YXIgcmV0ID0gdGhpcy5oZWFkLmRhdGE7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO2Vsc2UgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQ7XG4gICAgLS10aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIGpvaW4ocykge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgIHZhciByZXQgPSAnJyArIHAuZGF0YTtcbiAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgcmV0ICs9IHMgKyBwLmRhdGE7XG4gICAgfXJldHVybiByZXQ7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0KG4pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuID4+PiAwKTtcbiAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKHApIHtcbiAgICAgIGNvcHlCdWZmZXIocC5kYXRhLCByZXQsIGkpO1xuICAgICAgaSArPSBwLmRhdGEubGVuZ3RoO1xuICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcblxuICByZXR1cm4gQnVmZmVyTGlzdDtcbn0oKTtcblxuaWYgKHV0aWwgJiYgdXRpbC5pbnNwZWN0ICYmIHV0aWwuaW5zcGVjdC5jdXN0b20pIHtcbiAgbW9kdWxlLmV4cG9ydHMucHJvdG90eXBlW3V0aWwuaW5zcGVjdC5jdXN0b21dID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvYmogPSB1dGlsLmluc3BlY3QoeyBsZW5ndGg6IHRoaXMubGVuZ3RoIH0pO1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnICcgKyBvYmo7XG4gIH07XG59IiwKICAgICIndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8vIHVuZG9jdW1lbnRlZCBjYigpIEFQSSwgbmVlZGVkIGZvciBjb3JlLCBub3QgZm9yIHB1YmxpYyBBUElcbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciByZWFkYWJsZURlc3Ryb3llZCA9IHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIHZhciB3cml0YWJsZURlc3Ryb3llZCA9IHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG5cbiAgaWYgKHJlYWRhYmxlRGVzdHJveWVkIHx8IHdyaXRhYmxlRGVzdHJveWVkKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIHRoaXMsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3ZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgdGhpcy5fZGVzdHJveShlcnIgfHwgbnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmICghY2IgJiYgZXJyKSB7XG4gICAgICBpZiAoIV90aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHBuYS5uZXh0VGljayhlbWl0RXJyb3JOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2UgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULCBfdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHVuZGVzdHJveSgpIHtcbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRFcnJvck5UKHNlbGYsIGVycikge1xuICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gIHVuZGVzdHJveTogdW5kZXN0cm95XG59OyIsCiAgICAiXG4vKipcbiAqIEZvciBOb2RlLmpzLCBzaW1wbHkgcmUtZXhwb3J0IHRoZSBjb3JlIGB1dGlsLmRlcHJlY2F0ZWAgZnVuY3Rpb24uXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCd1dGlsJykuZGVwcmVjYXRlO1xuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG5cbi8qIDxyZXBsYWNlbWVudD4gKi9cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxuLy8gSXQgc2VlbXMgYSBsaW5rZWQgbGlzdCBidXQgaXQgaXMgbm90XG4vLyB0aGVyZSB3aWxsIGJlIG9ubHkgMiBvZiB0aGVzZSBmb3IgZWFjaCBzdHJlYW1cbmZ1bmN0aW9uIENvcmtlZFJlcXVlc3Qoc3RhdGUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLmVudHJ5ID0gbnVsbDtcbiAgdGhpcy5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgb25Db3JrZWRGaW5pc2goX3RoaXMsIHN0YXRlKTtcbiAgfTtcbn1cbi8qIDwvcmVwbGFjZW1lbnQ+ICovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYXN5bmNXcml0ZSA9ICFwcm9jZXNzLmJyb3dzZXIgJiYgWyd2MC4xMCcsICd2MC45LiddLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsIDUpKSA+IC0xID8gc2V0SW1tZWRpYXRlIDogcG5hLm5leHRUaWNrO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaW50ZXJuYWxVdGlsID0ge1xuICBkZXByZWNhdGU6IHJlcXVpcmUoJ3V0aWwtZGVwcmVjYXRlJylcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcblxudXRpbC5pbmhlcml0cyhXcml0YWJsZSwgU3RyZWFtKTtcblxuZnVuY3Rpb24gbm9wKCkge31cblxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIHZhciBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCB3cml0ZSgpIHN0YXJ0cyByZXR1cm5pbmcgZmFsc2VcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyB0aGF0IHdlIGFsd2F5cyByZXR1cm4gZmFsc2UgaWZcbiAgLy8gdGhlIGVudGlyZSBidWZmZXIgaXMgbm90IGZsdXNoZWQgaW1tZWRpYXRlbHkgb24gd3JpdGUoKVxuICB2YXIgaHdtID0gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrO1xuICB2YXIgd3JpdGFibGVId20gPSBvcHRpb25zLndyaXRhYmxlSGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcblxuICBpZiAoaHdtIHx8IGh3bSA9PT0gMCkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaHdtO2Vsc2UgaWYgKGlzRHVwbGV4ICYmICh3cml0YWJsZUh3bSB8fCB3cml0YWJsZUh3bSA9PT0gMCkpIHRoaXMuaGlnaFdhdGVyTWFyayA9IHdyaXRhYmxlSHdtO2Vsc2UgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZGVmYXVsdEh3bTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IE1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKTtcblxuICAvLyBpZiBfZmluYWwgaGFzIGJlZW4gY2FsbGVkXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZTtcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlO1xuICAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuICB0aGlzLmVuZGluZyA9IGZhbHNlO1xuICAvLyB3aGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gd2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBzaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyBub3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gd2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbFxuICB0aGlzLmNvcmtlZCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gYSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQncyBwYXNzZWQgdG8gX3dyaXRlKGNodW5rLGNiKVxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9O1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLGVuY29kaW5nLGNiKVxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG5cbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cblxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuYnVmZmVyZWRSZXF1ZXN0O1xuICB2YXIgb3V0ID0gW107XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgb3V0LnB1c2goY3VycmVudCk7XG4gICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgfVxuICByZXR1cm4gb3V0O1xufTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gICAgICBnZXQ6IGludGVybmFsVXRpbC5kZXByZWNhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJywgJ0RFUDAwMDMnKVxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7fVxufSkoKTtcblxuLy8gVGVzdCBfd3JpdGFibGVTdGF0ZSBmb3IgaW5oZXJpdGFuY2UgdG8gYWNjb3VudCBmb3IgRHVwbGV4IHN0cmVhbXMsXG4vLyB3aG9zZSBwcm90b3R5cGUgY2hhaW4gb25seSBwb2ludHMgdG8gUmVhZGFibGUuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmhhc0luc3RhbmNlICYmIHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICByZWFsSGFzSW5zdGFuY2UgPSBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgaWYgKHJlYWxIYXNJbnN0YW5jZS5jYWxsKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHRoaXMgIT09IFdyaXRhYmxlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiB0aGlzO1xuICB9O1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0b28uXG4gIC8vIGByZWFsSGFzSW5zdGFuY2VgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVzaW5nIHBsYWluIGBpbnN0YW5jZW9mYFxuICAvLyB3b3VsZCByZXR1cm4gZmFsc2UsIGFzIG5vIGBfd3JpdGFibGVTdGF0ZWAgcHJvcGVydHkgaXMgYXR0YWNoZWQuXG5cbiAgLy8gVHJ5aW5nIHRvIHVzZSB0aGUgY3VzdG9tIGBpbnN0YW5jZW9mYCBmb3IgV3JpdGFibGUgaGVyZSB3aWxsIGFsc28gYnJlYWsgdGhlXG4gIC8vIE5vZGUuanMgTGF6eVRyYW5zZm9ybSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaGFzIGEgbm9uLXRyaXZpYWwgZ2V0dGVyIGZvclxuICAvLyBgX3dyaXRhYmxlU3RhdGVgIHRoYXQgd291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gIGlmICghcmVhbEhhc0luc3RhbmNlLmNhbGwoV3JpdGFibGUsIHRoaXMpICYmICEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHtcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKG9wdGlvbnMpO1xuICB9XG5cbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeS5cbiAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbDtcbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBPdGhlcndpc2UgcGVvcGxlIGNhbiBwaXBlIFdyaXRhYmxlIHN0cmVhbXMsIHdoaWNoIGlzIGp1c3Qgd3JvbmcuXG5Xcml0YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScpKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBjYikge1xuICB2YXIgZXIgPSBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAvLyBUT0RPOiBkZWZlciBlcnJvciBldmVudHMgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IHRoZSBjYlxuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIHBuYS5uZXh0VGljayhjYiwgZXIpO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhIHVzZXItc3VwcGxpZWQgY2h1bmsgaXMgdmFsaWQsIGVzcGVjaWFsbHkgZm9yIHRoZSBwYXJ0aWN1bGFyXG4vLyBtb2RlIHRoZSBzdHJlYW0gaXMgaW4uIEN1cnJlbnRseSB0aGlzIG1lYW5zIHRoYXQgYG51bGxgIGlzIG5ldmVyIGFjY2VwdGVkXG4vLyBhbmQgdW5kZWZpbmVkL25vbi1zdHJpbmcgdmFsdWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IG1vZGUuXG5mdW5jdGlvbiB2YWxpZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBjYikge1xuICB2YXIgdmFsaWQgPSB0cnVlO1xuICB2YXIgZXIgPSBmYWxzZTtcblxuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ01heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgaWYgKGVyKSB7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgIHBuYS5uZXh0VGljayhjYiwgZXIpO1xuICAgIHZhbGlkID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuICB2YXIgcmV0ID0gZmFsc2U7XG4gIHZhciBpc0J1ZiA9ICFzdGF0ZS5vYmplY3RNb2RlICYmIF9pc1VpbnQ4QXJyYXkoY2h1bmspO1xuXG4gIGlmIChpc0J1ZiAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoaXNCdWYpIGVuY29kaW5nID0gJ2J1ZmZlcic7ZWxzZSBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcblxuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG5vcDtcblxuICBpZiAoc3RhdGUuZW5kZWQpIHdyaXRlQWZ0ZXJFbmQodGhpcywgY2IpO2Vsc2UgaWYgKGlzQnVmIHx8IHZhbGlkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBjYikpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICByZXQgPSB3cml0ZU9yQnVmZmVyKHRoaXMsIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgc3RhdGUuY29ya2VkKys7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUudW5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcblxuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nID0gZnVuY3Rpb24gc2V0RGVmYXVsdEVuY29kaW5nKGVuY29kaW5nKSB7XG4gIC8vIG5vZGU6OlBhcnNlRW5jb2RpbmcoKSByZXF1aXJlcyBsb3dlciBjYXNlLlxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykgZW5jb2RpbmcgPSBlbmNvZGluZy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIShbJ2hleCcsICd1dGY4JywgJ3V0Zi04JywgJ2FzY2lpJywgJ2JpbmFyeScsICdiYXNlNjQnLCAndWNzMicsICd1Y3MtMicsICd1dGYxNmxlJywgJ3V0Zi0xNmxlJywgJ3JhdyddLmluZGV4T2YoKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKCkpID4gLTEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gaWYgd2UncmUgYWxyZWFkeSB3cml0aW5nIHNvbWV0aGluZywgdGhlbiBqdXN0IHB1dCB0aGlzXG4vLyBpbiB0aGUgcXVldWUsIGFuZCB3YWl0IG91ciB0dXJuLiAgT3RoZXJ3aXNlLCBjYWxsIF93cml0ZVxuLy8gSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIHdlIG5lZWQgYSBkcmFpbiBldmVudCwgc28gc2V0IHRoYXQgZmxhZy5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgaWYgKCFpc0J1Zikge1xuICAgIHZhciBuZXdDaHVuayA9IGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpO1xuICAgIGlmIChjaHVuayAhPT0gbmV3Q2h1bmspIHtcbiAgICAgIGlzQnVmID0gdHJ1ZTtcbiAgICAgIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gICAgICBjaHVuayA9IG5ld0NodW5rO1xuICAgIH1cbiAgfVxuICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG5cbiAgc3RhdGUubGVuZ3RoICs9IGxlbjtcblxuICB2YXIgcmV0ID0gc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgLy8gd2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlO1xuXG4gIGlmIChzdGF0ZS53cml0aW5nIHx8IHN0YXRlLmNvcmtlZCkge1xuICAgIHZhciBsYXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0ge1xuICAgICAgY2h1bms6IGNodW5rLFxuICAgICAgZW5jb2Rpbmc6IGVuY29kaW5nLFxuICAgICAgaXNCdWY6IGlzQnVmLFxuICAgICAgY2FsbGJhY2s6IGNiLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIGxhc3QubmV4dCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgfVxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ICs9IDE7XG4gIH0gZWxzZSB7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAod3JpdGV2KSBzdHJlYW0uX3dyaXRldihjaHVuaywgc3RhdGUub253cml0ZSk7ZWxzZSBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYikge1xuICAtLXN0YXRlLnBlbmRpbmdjYjtcblxuICBpZiAoc3luYykge1xuICAgIC8vIGRlZmVyIHRoZSBjYWxsYmFjayBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIHN5bmNocm9ub3VzbHlcbiAgICAvLyB0byBhdm9pZCBwaWxpbmcgdXAgdGhpbmdzIG9uIHRoZSBzdGFja1xuICAgIHBuYS5uZXh0VGljayhjYiwgZXIpO1xuICAgIC8vIHRoaXMgY2FuIGVtaXQgZmluaXNoLCBhbmQgaXQgd2lsbCBhbHdheXMgaGFwcGVuXG4gICAgLy8gYWZ0ZXIgZXJyb3JcbiAgICBwbmEubmV4dFRpY2soZmluaXNoTWF5YmUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY2FsbGVyIGV4cGVjdCB0aGlzIHRvIGhhcHBlbiBiZWZvcmUgaWZcbiAgICAvLyBpdCBpcyBhc3luY1xuICAgIGNiKGVyKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGJ1dCBmaW5pc2ggbXVzdFxuICAgIC8vIGFsd2F5cyBmb2xsb3cgZXJyb3JcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGUoc3RyZWFtLCBlcikge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIHZhciBzeW5jID0gc3RhdGUuc3luYztcbiAgdmFyIGNiID0gc3RhdGUud3JpdGVjYjtcblxuICBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpO1xuXG4gIGlmIChlcikgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYik7ZWxzZSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gZmluaXNoLCBidXQgZG9uJ3QgZW1pdCB5ZXRcbiAgICB2YXIgZmluaXNoZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcblxuICAgIGlmICghZmluaXNoZWQgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzeW5jKSB7XG4gICAgICAvKjxyZXBsYWNlbWVudD4qL1xuICAgICAgYXN5bmNXcml0ZShhZnRlcldyaXRlLCBzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgICAgLyo8L3JlcGxhY2VtZW50PiovXG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpIHtcbiAgaWYgKCFmaW5pc2hlZCkgb253cml0ZURyYWluKHN0cmVhbSwgc3RhdGUpO1xuICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgY2IoKTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG59XG5cbi8vIE11c3QgZm9yY2UgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIG5leHRUaWNrLCBzbyB0aGF0IHdlIGRvbid0XG4vLyBlbWl0ICdkcmFpbicgYmVmb3JlIHRoZSB3cml0ZSgpIGNvbnN1bWVyIGdldHMgdGhlICdmYWxzZScgcmV0dXJuXG4vLyB2YWx1ZSwgYW5kIGhhcyBhIGNoYW5jZSB0byBhdHRhY2ggYSAnZHJhaW4nIGxpc3RlbmVyLlxuZnVuY3Rpb24gb253cml0ZURyYWluKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5uZWVkRHJhaW4pIHtcbiAgICBzdGF0ZS5uZWVkRHJhaW4gPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZHJhaW4nKTtcbiAgfVxufVxuXG4vLyBpZiB0aGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgYnVmZmVyIHdhaXRpbmcsIHRoZW4gcHJvY2VzcyBpdFxuZnVuY3Rpb24gY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSkge1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgdmFyIGVudHJ5ID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0O1xuXG4gIGlmIChzdHJlYW0uX3dyaXRldiAmJiBlbnRyeSAmJiBlbnRyeS5uZXh0KSB7XG4gICAgLy8gRmFzdCBjYXNlLCB3cml0ZSBldmVyeXRoaW5nIHVzaW5nIF93cml0ZXYoKVxuICAgIHZhciBsID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsKTtcbiAgICB2YXIgaG9sZGVyID0gc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlO1xuICAgIGhvbGRlci5lbnRyeSA9IGVudHJ5O1xuXG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgYWxsQnVmZmVycyA9IHRydWU7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBpZiAoIWVudHJ5LmlzQnVmKSBhbGxCdWZmZXJzID0gZmFsc2U7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBidWZmZXIuYWxsQnVmZmVycyA9IGFsbEJ1ZmZlcnM7XG5cbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHRydWUsIHN0YXRlLmxlbmd0aCwgYnVmZmVyLCAnJywgaG9sZGVyLmZpbmlzaCk7XG5cbiAgICAvLyBkb1dyaXRlIGlzIGFsbW9zdCBhbHdheXMgYXN5bmMsIGRlZmVyIHRoZXNlIHRvIHNhdmUgYSBiaXQgb2YgdGltZVxuICAgIC8vIGFzIHRoZSBob3QgcGF0aCBlbmRzIHdpdGggZG9Xcml0ZVxuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICAgIGlmIChob2xkZXIubmV4dCkge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gaG9sZGVyLm5leHQ7XG4gICAgICBob2xkZXIubmV4dCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IG5ldyBDb3JrZWRSZXF1ZXN0KHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFNsb3cgY2FzZSwgd3JpdGUgY2h1bmtzIG9uZS1ieS1vbmVcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIHZhciBjaHVuayA9IGVudHJ5LmNodW5rO1xuICAgICAgdmFyIGVuY29kaW5nID0gZW50cnkuZW5jb2Rpbmc7XG4gICAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICAgIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS07XG4gICAgICAvLyBpZiB3ZSBkaWRuJ3QgY2FsbCB0aGUgb253cml0ZSBpbW1lZGlhdGVseSwgdGhlblxuICAgICAgLy8gaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXQgZG9lcy5cbiAgICAgIC8vIGFsc28sIHRoYXQgbWVhbnMgdGhhdCB0aGUgY2h1bmsgYW5kIGNiIGFyZSBjdXJyZW50bHlcbiAgICAgIC8vIGJlaW5nIHByb2Nlc3NlZCwgc28gbW92ZSB0aGUgYnVmZmVyIGNvdW50ZXIgcGFzdCB0aGVtLlxuICAgICAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IGVudHJ5O1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRXJyb3IoJ193cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpKTtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbDtcblxuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gY2h1bms7XG4gICAgY2h1bmsgPSBudWxsO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG5cbiAgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3NcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDE7XG4gICAgdGhpcy51bmNvcmsoKTtcbiAgfVxuXG4gIC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cbiAgaWYgKCFzdGF0ZS5lbmRpbmcpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG59O1xuXG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5lbmRpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9PT0gbnVsbCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLndyaXRpbmc7XG59XG5mdW5jdGlvbiBjYWxsRmluYWwoc3RyZWFtLCBzdGF0ZSkge1xuICBzdHJlYW0uX2ZpbmFsKGZ1bmN0aW9uIChlcnIpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH1cbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHBuYS5uZXh0VGljayhjYWxsRmluYWwsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcbiAgaWYgKG5lZWQpIHtcbiAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHN0YXRlLnBlbmRpbmdjYiA9PT0gMCkge1xuICAgICAgc3RhdGUuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmVlZDtcbn1cblxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZCkgcG5hLm5leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb25Db3JrZWRGaW5pc2goY29ya1JlcSwgc3RhdGUsIGVycikge1xuICB2YXIgZW50cnkgPSBjb3JrUmVxLmVudHJ5O1xuICBjb3JrUmVxLmVudHJ5ID0gbnVsbDtcbiAgd2hpbGUgKGVudHJ5KSB7XG4gICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgY2IoZXJyKTtcbiAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gIH1cblxuICAvLyByZXVzZSB0aGUgZnJlZSBjb3JrUmVxLlxuICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dCA9IGNvcmtSZXE7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgdGhpcy5lbmQoKTtcbiAgY2IoZXJyKTtcbn07IiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfXJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV93cml0YWJsZScpO1xuXG51dGlsLmluaGVyaXRzKER1cGxleCwgUmVhZGFibGUpO1xuXG57XG4gIC8vIGF2b2lkIHNjb3BlIGNyZWVwLCB0aGUga2V5cyBhcnJheSBjYW4gdGhlbiBiZSBjb2xsZWN0ZWRcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSk7XG4gIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBEdXBsZXgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSkgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG5cbiAgdGhpcy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gdGhlIG5vLWhhbGYtb3BlbiBlbmZvcmNlclxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIGlmIHdlIGFsbG93IGhhbGYtb3BlbiBzdGF0ZSwgb3IgaWYgdGhlIHdyaXRhYmxlIHNpZGUgZW5kZWQsXG4gIC8vIHRoZW4gd2UncmUgb2suXG4gIGlmICh0aGlzLmFsbG93SGFsZk9wZW4gfHwgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHBuYS5uZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gb25FbmROVChzZWxmKSB7XG4gIHNlbGYuZW5kKCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbkR1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLnB1c2gobnVsbCk7XG4gIHRoaXMuZW5kKCk7XG5cbiAgcG5hLm5leHRUaWNrKGNiLCBlcnIpO1xufTsiLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgaXNFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nIHx8IGZ1bmN0aW9uIChlbmNvZGluZykge1xuICBlbmNvZGluZyA9ICcnICsgZW5jb2Rpbmc7XG4gIHN3aXRjaCAoZW5jb2RpbmcgJiYgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6Y2FzZSAndXRmOCc6Y2FzZSAndXRmLTgnOmNhc2UgJ2FzY2lpJzpjYXNlICdiaW5hcnknOmNhc2UgJ2Jhc2U2NCc6Y2FzZSAndWNzMic6Y2FzZSAndWNzLTInOmNhc2UgJ3V0ZjE2bGUnOmNhc2UgJ3V0Zi0xNmxlJzpjYXNlICdyYXcnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX25vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICBpZiAoIWVuYykgcmV0dXJuICd1dGY4JztcbiAgdmFyIHJldHJpZWQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmMpIHtcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gJ3V0ZjgnO1xuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuICd1dGYxNmxlJztcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gJ2xhdGluMSc7XG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGVuYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyZXRyaWVkKSByZXR1cm47IC8vIHVuZGVmaW5lZFxuICAgICAgICBlbmMgPSAoJycgKyBlbmMpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHJpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLy8gRG8gbm90IGNhY2hlIGBCdWZmZXIuaXNFbmNvZGluZ2Agd2hlbiBjaGVja2luZyBlbmNvZGluZyBuYW1lcyBhcyBzb21lXG4vLyBtb2R1bGVzIG1vbmtleS1wYXRjaCBpdCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgZW5jb2RpbmdzXG5mdW5jdGlvbiBub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgdmFyIG5lbmMgPSBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKTtcbiAgaWYgKHR5cGVvZiBuZW5jICE9PSAnc3RyaW5nJyAmJiAoQnVmZmVyLmlzRW5jb2RpbmcgPT09IGlzRW5jb2RpbmcgfHwgIWlzRW5jb2RpbmcoZW5jKSkpIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuYyk7XG4gIHJldHVybiBuZW5jIHx8IGVuYztcbn1cblxuLy8gU3RyaW5nRGVjb2RlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGVmZmljaWVudGx5IHNwbGl0dGluZyBhIHNlcmllcyBvZlxuLy8gYnVmZmVycyBpbnRvIGEgc2VyaWVzIG9mIEpTIHN0cmluZ3Mgd2l0aG91dCBicmVha2luZyBhcGFydCBtdWx0aS1ieXRlXG4vLyBjaGFyYWN0ZXJzLlxuZXhwb3J0cy5TdHJpbmdEZWNvZGVyID0gU3RyaW5nRGVjb2RlcjtcbmZ1bmN0aW9uIFN0cmluZ0RlY29kZXIoZW5jb2RpbmcpIHtcbiAgdGhpcy5lbmNvZGluZyA9IG5vcm1hbGl6ZUVuY29kaW5nKGVuY29kaW5nKTtcbiAgdmFyIG5iO1xuICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIHRoaXMudGV4dCA9IHV0ZjE2VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gdXRmMTZFbmQ7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1dGY4JzpcbiAgICAgIHRoaXMuZmlsbExhc3QgPSB1dGY4RmlsbExhc3Q7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgdGhpcy50ZXh0ID0gYmFzZTY0VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gYmFzZTY0RW5kO1xuICAgICAgbmIgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud3JpdGUgPSBzaW1wbGVXcml0ZTtcbiAgICAgIHRoaXMuZW5kID0gc2ltcGxlRW5kO1xuICAgICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAwO1xuICB0aGlzLmxhc3RUb3RhbCA9IDA7XG4gIHRoaXMubGFzdENoYXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobmIpO1xufVxuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgdmFyIHI7XG4gIHZhciBpO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHIgPSB0aGlzLmZpbGxMYXN0KGJ1Zik7XG4gICAgaWYgKHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuICcnO1xuICAgIGkgPSB0aGlzLmxhc3ROZWVkO1xuICAgIHRoaXMubGFzdE5lZWQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGkgPSAwO1xuICB9XG4gIGlmIChpIDwgYnVmLmxlbmd0aCkgcmV0dXJuIHIgPyByICsgdGhpcy50ZXh0KGJ1ZiwgaSkgOiB0aGlzLnRleHQoYnVmLCBpKTtcbiAgcmV0dXJuIHIgfHwgJyc7XG59O1xuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSB1dGY4RW5kO1xuXG4vLyBSZXR1cm5zIG9ubHkgY29tcGxldGUgY2hhcmFjdGVycyBpbiBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUudGV4dCA9IHV0ZjhUZXh0O1xuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIHBhcnRpYWwgbm9uLVVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5maWxsTGFzdCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn07XG5cbi8vIENoZWNrcyB0aGUgdHlwZSBvZiBhIFVURi04IGJ5dGUsIHdoZXRoZXIgaXQncyBBU0NJSSwgYSBsZWFkaW5nIGJ5dGUsIG9yIGFcbi8vIGNvbnRpbnVhdGlvbiBieXRlLiBJZiBhbiBpbnZhbGlkIGJ5dGUgaXMgZGV0ZWN0ZWQsIC0yIGlzIHJldHVybmVkLlxuZnVuY3Rpb24gdXRmOENoZWNrQnl0ZShieXRlKSB7XG4gIGlmIChieXRlIDw9IDB4N0YpIHJldHVybiAwO2Vsc2UgaWYgKGJ5dGUgPj4gNSA9PT0gMHgwNikgcmV0dXJuIDI7ZWxzZSBpZiAoYnl0ZSA+PiA0ID09PSAweDBFKSByZXR1cm4gMztlbHNlIGlmIChieXRlID4+IDMgPT09IDB4MUUpIHJldHVybiA0O1xuICByZXR1cm4gYnl0ZSA+PiA2ID09PSAweDAyID8gLTEgOiAtMjtcbn1cblxuLy8gQ2hlY2tzIGF0IG1vc3QgMyBieXRlcyBhdCB0aGUgZW5kIG9mIGEgQnVmZmVyIGluIG9yZGVyIHRvIGRldGVjdCBhblxuLy8gaW5jb21wbGV0ZSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3Rlci4gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyAoMiwgMywgb3IgNClcbi8vIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgVVRGLTggY2hhcmFjdGVyIChpZiBhcHBsaWNhYmxlKSBhcmUgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tJbmNvbXBsZXRlKHNlbGYsIGJ1ZiwgaSkge1xuICB2YXIgaiA9IGJ1Zi5sZW5ndGggLSAxO1xuICBpZiAoaiA8IGkpIHJldHVybiAwO1xuICB2YXIgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMTtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkgfHwgbmIgPT09IC0yKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMjtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkgfHwgbmIgPT09IC0yKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkge1xuICAgICAgaWYgKG5iID09PSAyKSBuYiA9IDA7ZWxzZSBzZWxmLmxhc3ROZWVkID0gbmIgLSAzO1xuICAgIH1cbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vIFZhbGlkYXRlcyBhcyBtYW55IGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciBhc1xuLy8gbmVlZGVkIG9yIGFyZSBhdmFpbGFibGUuIElmIHdlIHNlZSBhIG5vbi1jb250aW51YXRpb24gYnl0ZSB3aGVyZSB3ZSBleHBlY3Rcbi8vIG9uZSwgd2UgXCJyZXBsYWNlXCIgdGhlIHZhbGlkYXRlZCBjb250aW51YXRpb24gYnl0ZXMgd2UndmUgc2VlbiBzbyBmYXIgd2l0aFxuLy8gYSBzaW5nbGUgVVRGLTggcmVwbGFjZW1lbnQgY2hhcmFjdGVyICgnXFx1ZmZmZCcpLCB0byBtYXRjaCB2OCdzIFVURi04IGRlY29kaW5nXG4vLyBiZWhhdmlvci4gVGhlIGNvbnRpbnVhdGlvbiBieXRlIGNoZWNrIGlzIGluY2x1ZGVkIHRocmVlIHRpbWVzIGluIHRoZSBjYXNlXG4vLyB3aGVyZSBhbGwgb2YgdGhlIGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBjaGFyYWN0ZXIgZXhpc3QgaW4gdGhlIHNhbWUgYnVmZmVyLlxuLy8gSXQgaXMgYWxzbyBkb25lIHRoaXMgd2F5IGFzIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGluY3JlYXNlIGluc3RlYWQgb2YgdXNpbmcgYVxuLy8gbG9vcC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0V4dHJhQnl0ZXMoc2VsZiwgYnVmLCBwKSB7XG4gIGlmICgoYnVmWzBdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICBzZWxmLmxhc3ROZWVkID0gMDtcbiAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICB9XG4gIGlmIChzZWxmLmxhc3ROZWVkID4gMSAmJiBidWYubGVuZ3RoID4gMSkge1xuICAgIGlmICgoYnVmWzFdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgIHNlbGYubGFzdE5lZWQgPSAxO1xuICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICB9XG4gICAgaWYgKHNlbGYubGFzdE5lZWQgPiAyICYmIGJ1Zi5sZW5ndGggPiAyKSB7XG4gICAgICBpZiAoKGJ1ZlsyXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgICAgIHNlbGYubGFzdE5lZWQgPSAyO1xuICAgICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXIuXG5mdW5jdGlvbiB1dGY4RmlsbExhc3QoYnVmKSB7XG4gIHZhciBwID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICB2YXIgciA9IHV0ZjhDaGVja0V4dHJhQnl0ZXModGhpcywgYnVmLCBwKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHI7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn1cblxuLy8gUmV0dXJucyBhbGwgY29tcGxldGUgVVRGLTggY2hhcmFjdGVycyBpbiBhIEJ1ZmZlci4gSWYgdGhlIEJ1ZmZlciBlbmRlZCBvbiBhXG4vLyBwYXJ0aWFsIGNoYXJhY3RlciwgdGhlIGNoYXJhY3RlcidzIGJ5dGVzIGFyZSBidWZmZXJlZCB1bnRpbCB0aGUgcmVxdWlyZWRcbi8vIG51bWJlciBvZiBieXRlcyBhcmUgYXZhaWxhYmxlLlxuZnVuY3Rpb24gdXRmOFRleHQoYnVmLCBpKSB7XG4gIHZhciB0b3RhbCA9IHV0ZjhDaGVja0luY29tcGxldGUodGhpcywgYnVmLCBpKTtcbiAgaWYgKCF0aGlzLmxhc3ROZWVkKSByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSk7XG4gIHRoaXMubGFzdFRvdGFsID0gdG90YWw7XG4gIHZhciBlbmQgPSBidWYubGVuZ3RoIC0gKHRvdGFsIC0gdGhpcy5sYXN0TmVlZCk7XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIDAsIGVuZCk7XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpLCBlbmQpO1xufVxuXG4vLyBGb3IgVVRGLTgsIGEgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlzIGFkZGVkIHdoZW4gZW5kaW5nIG9uIGEgcGFydGlhbFxuLy8gY2hhcmFjdGVyLlxuZnVuY3Rpb24gdXRmOEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyAnXFx1ZmZmZCc7XG4gIHJldHVybiByO1xufVxuXG4vLyBVVEYtMTZMRSB0eXBpY2FsbHkgbmVlZHMgdHdvIGJ5dGVzIHBlciBjaGFyYWN0ZXIsIGJ1dCBldmVuIGlmIHdlIGhhdmUgYW4gZXZlblxuLy8gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSwgd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBlbmQgb24gYSBsZWFkaW5nL2hpZ2hcbi8vIHN1cnJvZ2F0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IHR3byBieXRlcyBpbiBvcmRlciB0b1xuLy8gZGVjb2RlIHRoZSBsYXN0IGNoYXJhY3RlciBwcm9wZXJseS5cbmZ1bmN0aW9uIHV0ZjE2VGV4dChidWYsIGkpIHtcbiAgaWYgKChidWYubGVuZ3RoIC0gaSkgJSAyID09PSAwKSB7XG4gICAgdmFyIHIgPSBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpKTtcbiAgICBpZiAocikge1xuICAgICAgdmFyIGMgPSByLmNoYXJDb2RlQXQoci5sZW5ndGggLSAxKTtcbiAgICAgIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REJGRikge1xuICAgICAgICB0aGlzLmxhc3ROZWVkID0gMjtcbiAgICAgICAgdGhpcy5sYXN0VG90YWwgPSA0O1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiByLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDE7XG4gIHRoaXMubGFzdFRvdGFsID0gMjtcbiAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpLCBidWYubGVuZ3RoIC0gMSk7XG59XG5cbi8vIEZvciBVVEYtMTZMRSB3ZSBkbyBub3QgZXhwbGljaXRseSBhcHBlbmQgc3BlY2lhbCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIGlmIHdlXG4vLyBlbmQgb24gYSBwYXJ0aWFsIGNoYXJhY3Rlciwgd2Ugc2ltcGx5IGxldCB2OCBoYW5kbGUgdGhhdC5cbmZ1bmN0aW9uIHV0ZjE2RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgdmFyIGVuZCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgICByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ3V0ZjE2bGUnLCAwLCBlbmQpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRUZXh0KGJ1ZiwgaSkge1xuICB2YXIgbiA9IChidWYubGVuZ3RoIC0gaSkgJSAzO1xuICBpZiAobiA9PT0gMCkgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSk7XG4gIHRoaXMubGFzdE5lZWQgPSAzIC0gbjtcbiAgdGhpcy5sYXN0VG90YWwgPSAzO1xuICBpZiAobiA9PT0gMSkge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGksIGJ1Zi5sZW5ndGggLSBuKTtcbn1cblxuZnVuY3Rpb24gYmFzZTY0RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ2Jhc2U2NCcsIDAsIDMgLSB0aGlzLmxhc3ROZWVkKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFBhc3MgYnl0ZXMgb24gdGhyb3VnaCBmb3Igc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIChlLmcuIGFzY2lpLCBsYXRpbjEsIGhleClcbmZ1bmN0aW9uIHNpbXBsZVdyaXRlKGJ1Zikge1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVFbmQoYnVmKSB7XG4gIHJldHVybiBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xufSIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZyA9IHZvaWQgMDtcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlckxpc3QgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCcpO1xudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBTdHJpbmdEZWNvZGVyO1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG52YXIga1Byb3h5RXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuXG5mdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuKSB7XG4gIC8vIFNhZGx5IHRoaXMgaXMgbm90IGNhY2hlYWJsZSBhcyBzb21lIGxpYnJhcmllcyBidW5kbGUgdGhlaXIgb3duXG4gIC8vIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVtLlxuICBpZiAodHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKTtlbHNlIGlmIChpc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO2Vsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV07XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICB2YXIgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciByZWFkYWJsZUh3bSA9IG9wdGlvbnMucmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuXG4gIGlmIChod20gfHwgaHdtID09PSAwKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBod207ZWxzZSBpZiAoaXNEdXBsZXggJiYgKHJlYWRhYmxlSHdtIHx8IHJlYWRhYmxlSHdtID09PSAwKSkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gcmVhZGFibGVId207ZWxzZSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gTWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspO1xuXG4gIC8vIEEgbGlua2VkIGxpc3QgaXMgdXNlZCB0byBzdG9yZSBkYXRhIGNodW5rcyBpbnN0ZWFkIG9mIGFuIGFycmF5IGJlY2F1c2UgdGhlXG4gIC8vIGxpbmtlZCBsaXN0IGNhbiByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgYmVnaW5uaW5nIGZhc3RlciB0aGFuXG4gIC8vIGFycmF5LnNoaWZ0KClcbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB0aGUgbnVtYmVyIG9mIHdyaXRlcnMgdGhhdCBhcmUgYXdhaXRpbmcgYSBkcmFpbiBldmVudCBpbiAucGlwZSgpc1xuICB0aGlzLmF3YWl0RHJhaW4gPSAwO1xuXG4gIC8vIGlmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWRcbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuXG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKSB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuUmVhZGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLnB1c2gobnVsbCk7XG4gIGNiKGVycik7XG59O1xuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHNraXBDaHVua0NoZWNrO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBlbmNvZGluZyA9ICcnO1xuICAgICAgfVxuICAgICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlLCBza2lwQ2h1bmtDaGVjayk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIG51bGwsIHRydWUsIGZhbHNlKTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQsIHNraXBDaHVua0NoZWNrKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVyO1xuICAgIGlmICghc2tpcENodW5rQ2hlY2spIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gICAgaWYgKGVyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihjaHVuaykgIT09IEJ1ZmZlci5wcm90b3R5cGUpIHtcbiAgICAgICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKSk7ZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO2Vsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZWVkTW9yZURhdGEoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkge1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSkgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gIH1cbiAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXI7XG4gIGlmICghX2lzVWludDhBcnJheShjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG4vLyBpZiBpdCdzIHBhc3QgdGhlIGhpZ2ggd2F0ZXIgbWFyaywgd2UgY2FuIHB1c2ggaW4gc29tZSBtb3JlLlxuLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWVcbi8vIG1vcmUgYnl0ZXMuICBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLFxuLy8gc3VjaCBhcyB0aGUgcmVwbC4gIEFsc28sIGlmIHRoZSBwdXNoKCkgdHJpZ2dlcmVkIGFcbi8vIHJlYWRhYmxlIGV2ZW50LCBhbmQgdGhlIHVzZXIgY2FsbGVkIHJlYWQobGFyZ2VOdW1iZXIpIHN1Y2ggdGhhdFxuLy8gbmVlZFJlYWRhYmxlIHdhcyBzZXQsIHRoZW4gd2Ugb3VnaHQgdG8gcHVzaCBtb3JlLCBzbyB0aGF0IGFub3RoZXJcbi8vICdyZWFkYWJsZScgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQuXG5mdW5jdGlvbiBuZWVkTW9yZURhdGEoc3RhdGUpIHtcbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubmVlZFJlYWRhYmxlIHx8IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcblxuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtlbHNlIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICB9XG5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cblxuICBpZiAocmV0ICE9PSBudWxsKSB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG59XG5cbi8vIERvbid0IGVtaXQgcmVhZGFibGUgcmlnaHQgYXdheSBpbiBzeW5jIG1vZGUsIGJlY2F1c2UgdGhpcyBjYW4gdHJpZ2dlclxuLy8gYW5vdGhlciByZWFkKCkgY2FsbCA9PiBzdGFjayBvdmVyZmxvdy4gIFRoaXMgd2F5LCBpdCBtaWdodCB0cmlnZ2VyXG4vLyBhIG5leHRUaWNrIHJlY3Vyc2lvbiB3YXJuaW5nLCBidXQgdGhhdCdzIG5vdCBzbyBiYWQuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnN5bmMpIHBuYS5uZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO2Vsc2UgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGRlYnVnKCdlbWl0IHJlYWRhYmxlJyk7XG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICBmbG93KHN0cmVhbSk7XG59XG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcG5hLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztlbHNlIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufVxuXG4vLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ19yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcG5hLm5leHRUaWNrKGVuZEZuKTtlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBpZiAodW5waXBlSW5mbyAmJiB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHVucGlwZUluZm8uaGFzVW5waXBlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgLy8gdG9vIHNsb3cuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICB2YXIgY2xlYW5lZFVwID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTtcbiAgICAvLyBjbGVhbnVwIGV2ZW50IGhhbmRsZXJzIG9uY2UgdGhlIHBpcGUgaXMgYnJva2VuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcblxuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKTtcbiAgfVxuXG4gIC8vIElmIHRoZSB1c2VyIHB1c2hlcyBtb3JlIGRhdGEgd2hpbGUgd2UncmUgd3JpdGluZyB0byBkZXN0IHRoZW4gd2UnbGwgZW5kIHVwXG4gIC8vIGluIG9uZGF0YSBhZ2Fpbi4gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIGluY3JlYXNlIGF3YWl0RHJhaW4gb25jZSBiZWNhdXNlXG4gIC8vIGRlc3Qgd2lsbCBvbmx5IGVtaXQgb25lICdkcmFpbicgZXZlbnQgZm9yIHRoZSBtdWx0aXBsZSB3cml0ZXMuXG4gIC8vID0+IEludHJvZHVjZSBhIGd1YXJkIG9uIGluY3JlYXNpbmcgYXdhaXREcmFpbi5cbiAgdmFyIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpO1xuICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgaWYgKGZhbHNlID09PSByZXQgJiYgIWluY3JlYXNlZEF3YWl0RHJhaW4pIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICAgIGlmICgoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJiBzdGF0ZS5waXBlcyA9PT0gZGVzdCB8fCBzdGF0ZS5waXBlc0NvdW50ID4gMSAmJiBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KSAhPT0gLTEpICYmICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgICAgICBzdGF0ZS5hd2FpdERyYWluKys7XG4gICAgICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIGhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpO1xuICAgIHVucGlwZSgpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgaWYgKEVFbGlzdGVuZXJDb3VudChkZXN0LCAnZXJyb3InKSA9PT0gMCkgZGVzdC5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgdXNlcmxhbmQgb25lcy5cbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKTtcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcblxuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BpcGUgcmVzdW1lJyk7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pIHN0YXRlLmF3YWl0RHJhaW4tLTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiA9PT0gMCAmJiBFRWxpc3RlbmVyQ291bnQoc3JjLCAnZGF0YScpKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbiAoZGVzdCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgdW5waXBlSW5mbyA9IHsgaGFzVW5waXBlZDogZmFsc2UgfTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKCFkZXN0KSBkZXN0ID0gc3RhdGUucGlwZXM7XG5cbiAgICAvLyBnb3QgYSBtYXRjaC5cbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGlmIChkZXN0KSBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIHZhciBkZXN0cyA9IHN0YXRlLnBpcGVzO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5waXBlc0NvdW50O1xuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzLCB7IGhhc1VucGlwZWQ6IGZhbHNlIH0pO1xuICAgIH1yZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpbmRleCA9IGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpO1xuICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGhpcztcblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuXG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBzZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZ1xuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG5cbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyBTdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWRcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkgdGhpcy5yZXN1bWUoKTtcbiAgfSBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpO1xuICBzZWxmLnJlYWQoMCk7XG59XG5cbi8vIHBhdXNlKCkgYW5kIHJlc3VtZSgpIGFyZSByZW1uYW50cyBvZiB0aGUgbGVnYWN5IHJlYWRhYmxlIHN0cmVhbSBBUElcbi8vIElmIHRoZSB1c2VyIHVzZXMgdGhlbSwgdGhlbiBzd2l0Y2ggaW50byBvbGQgbW9kZS5cblJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHBuYS5uZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpIHt9XG59XG5cbi8vIHdyYXAgYW4gb2xkLXN0eWxlIHN0cmVhbSBhcyB0aGUgYXN5bmMgZGF0YSBzb3VyY2UuXG4vLyBUaGlzIGlzICpub3QqIHBhcnQgb2YgdGhlIHJlYWRhYmxlIHN0cmVhbSBpbnRlcmZhY2UuXG4vLyBJdCBpcyBhbiB1Z2x5IHVuZm9ydHVuYXRlIG1lc3Mgb2YgaGlzdG9yeS5cblJlYWRhYmxlLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24gKHN0cmVhbSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcblxuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBfdGhpcy5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gX3RoaXMucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBrUHJveHlFdmVudHMubGVuZ3RoOyBuKyspIHtcbiAgICBzdHJlYW0ub24oa1Byb3h5RXZlbnRzW25dLCB0aGlzLmVtaXQuYmluZCh0aGlzLCBrUHJveHlFdmVudHNbbl0pKTtcbiAgfVxuXG4gIC8vIHdoZW4gd2UgdHJ5IHRvIGNvbnN1bWUgc29tZSBtb3JlIGJ5dGVzLCBzaW1wbHkgdW5wYXVzZSB0aGVcbiAgLy8gdW5kZXJseWluZyBzdHJlYW0uXG4gIHRoaXMuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIGRlYnVnKCd3cmFwcGVkIF9yZWFkJywgbik7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gIHZhciByZXQ7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKTtlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdFxuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSByZXQgPSBzdGF0ZS5idWZmZXIuam9pbignJyk7ZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IGZyb21MaXN0UGFydGlhbChuLCBzdGF0ZS5idWZmZXIsIHN0YXRlLmRlY29kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gRXh0cmFjdHMgb25seSBlbm91Z2ggYnVmZmVyZWQgZGF0YSB0byBzYXRpc2Z5IHRoZSBhbW91bnQgcmVxdWVzdGVkLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdFBhcnRpYWwobiwgbGlzdCwgaGFzU3RyaW5ncykge1xuICB2YXIgcmV0O1xuICBpZiAobiA8IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzXG4gICAgcmV0ID0gbGlzdC5oZWFkLmRhdGEuc2xpY2UoMCwgbik7XG4gICAgbGlzdC5oZWFkLmRhdGEgPSBsaXN0LmhlYWQuZGF0YS5zbGljZShuKTtcbiAgfSBlbHNlIGlmIChuID09PSBsaXN0LmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAvLyBmaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyXG4gICAgcmV0ID0gaGFzU3RyaW5ncyA/IGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIDogY29weUZyb21CdWZmZXIobiwgbGlzdCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YVxuLy8gY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLCBsaXN0KSB7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHZhciByZXQgPSBwLmRhdGE7XG4gIG4gLT0gcmV0Lmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgc3RyID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSByZXQgKz0gc3RyO2Vsc2UgcmV0ICs9IHN0ci5zbGljZSgwLCBuKTtcbiAgICBuIC09IG5iO1xuICAgIGlmIChuID09PSAwKSB7XG4gICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgKytjO1xuICAgICAgICBpZiAocC5uZXh0KSBsaXN0LmhlYWQgPSBwLm5leHQ7ZWxzZSBsaXN0LmhlYWQgPSBsaXN0LnRhaWwgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdC5oZWFkID0gcDtcbiAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICArK2M7XG4gIH1cbiAgbGlzdC5sZW5ndGggLT0gYztcbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBsaXN0IG9mIGJ1ZmZlcmVkIGRhdGEgY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KSB7XG4gIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHAuZGF0YS5jb3B5KHJldCk7XG4gIG4gLT0gcC5kYXRhLmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgYnVmID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBidWYubGVuZ3RoID8gYnVmLmxlbmd0aCA6IG47XG4gICAgYnVmLmNvcHkocmV0LCByZXQubGVuZ3RoIC0gbiwgMCwgbmIpO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIElmIHdlIGdldCBoZXJlIGJlZm9yZSBjb25zdW1pbmcgYWxsIHRoZSBieXRlcywgdGhlbiB0aGF0IGlzIGFcbiAgLy8gYnVnIGluIG5vZGUuICBTaG91bGQgbmV2ZXIgaGFwcGVuLlxuICBpZiAoc3RhdGUubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKCdcImVuZFJlYWRhYmxlKClcIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwbmEubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn0iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHRyYW5zZm9ybSBzdHJlYW0gaXMgYSByZWFkYWJsZS93cml0YWJsZSBzdHJlYW0gd2hlcmUgeW91IGRvXG4vLyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gIFNvbWV0aW1lcyBpdCdzIGNhbGxlZCBhIFwiZmlsdGVyXCIsXG4vLyBidXQgdGhhdCdzIG5vdCBhIGdyZWF0IG5hbWUgZm9yIGl0LCBzaW5jZSB0aGF0IGltcGxpZXMgYSB0aGluZyB3aGVyZVxuLy8gc29tZSBiaXRzIHBhc3MgdGhyb3VnaCwgYW5kIG90aGVycyBhcmUgc2ltcGx5IGlnbm9yZWQuICAoVGhhdCB3b3VsZFxuLy8gYmUgYSB2YWxpZCBleGFtcGxlIG9mIGEgdHJhbnNmb3JtLCBvZiBjb3Vyc2UuKVxuLy9cbi8vIFdoaWxlIHRoZSBvdXRwdXQgaXMgY2F1c2FsbHkgcmVsYXRlZCB0byB0aGUgaW5wdXQsIGl0J3Mgbm90IGFcbi8vIG5lY2Vzc2FyaWx5IHN5bW1ldHJpYyBvciBzeW5jaHJvbm91cyB0cmFuc2Zvcm1hdGlvbi4gIEZvciBleGFtcGxlLFxuLy8gYSB6bGliIHN0cmVhbSBtaWdodCB0YWtlIG11bHRpcGxlIHBsYWluLXRleHQgd3JpdGVzKCksIGFuZCB0aGVuXG4vLyBlbWl0IGEgc2luZ2xlIGNvbXByZXNzZWQgY2h1bmsgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuXG4vL1xuLy8gSGVyZSdzIGhvdyB0aGlzIHdvcmtzOlxuLy9cbi8vIFRoZSBUcmFuc2Zvcm0gc3RyZWFtIGhhcyBhbGwgdGhlIGFzcGVjdHMgb2YgdGhlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuLy8gc3RyZWFtIGNsYXNzZXMuICBXaGVuIHlvdSB3cml0ZShjaHVuayksIHRoYXQgY2FsbHMgX3dyaXRlKGNodW5rLGNiKVxuLy8gaW50ZXJuYWxseSwgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBhIGxvdCBvZiBwZW5kaW5nIHdyaXRlc1xuLy8gYnVmZmVyZWQgdXAuICBXaGVuIHlvdSBjYWxsIHJlYWQoKSwgdGhhdCBjYWxscyBfcmVhZChuKSB1bnRpbFxuLy8gdGhlcmUncyBlbm91Z2ggcGVuZGluZyByZWFkYWJsZSBkYXRhIGJ1ZmZlcmVkIHVwLlxuLy9cbi8vIEluIGEgdHJhbnNmb3JtIHN0cmVhbSwgdGhlIHdyaXR0ZW4gZGF0YSBpcyBwbGFjZWQgaW4gYSBidWZmZXIuICBXaGVuXG4vLyBfcmVhZChuKSBpcyBjYWxsZWQsIGl0IHRyYW5zZm9ybXMgdGhlIHF1ZXVlZCB1cCBkYXRhLCBjYWxsaW5nIHRoZVxuLy8gYnVmZmVyZWQgX3dyaXRlIGNiJ3MgYXMgaXQgY29uc3VtZXMgY2h1bmtzLiAgSWYgY29uc3VtaW5nIGEgc2luZ2xlXG4vLyB3cml0dGVuIGNodW5rIHdvdWxkIHJlc3VsdCBpbiBtdWx0aXBsZSBvdXRwdXQgY2h1bmtzLCB0aGVuIHRoZSBmaXJzdFxuLy8gb3V0cHV0dGVkIGJpdCBjYWxscyB0aGUgcmVhZGNiLCBhbmQgc3Vic2VxdWVudCBjaHVua3MganVzdCBnbyBpbnRvXG4vLyB0aGUgcmVhZCBidWZmZXIsIGFuZCB3aWxsIGNhdXNlIGl0IHRvIGVtaXQgJ3JlYWRhYmxlJyBpZiBuZWNlc3NhcnkuXG4vL1xuLy8gVGhpcyB3YXksIGJhY2stcHJlc3N1cmUgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcmVhZGluZyBzaWRlLFxuLy8gc2luY2UgX3JlYWQgaGFzIHRvIGJlIGNhbGxlZCB0byBzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGNodW5rLiAgSG93ZXZlcixcbi8vIGEgcGF0aG9sb2dpY2FsIGluZmxhdGUgdHlwZSBvZiB0cmFuc2Zvcm0gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBidWZmZXJpbmdcbi8vIGhlcmUuICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhIHN0cmVhbSB3aGVyZSBldmVyeSBieXRlIG9mIGlucHV0IGlzXG4vLyBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIGZyb20gMC0yNTUsIGFuZCB0aGVuIHJlc3VsdHMgaW4gdGhhdCBtYW55XG4vLyBieXRlcyBvZiBvdXRwdXQuICBXcml0aW5nIHRoZSA0IGJ5dGVzIHtmZixmZixmZixmZn0gd291bGQgcmVzdWx0IGluXG4vLyAxa2Igb2YgZGF0YSBiZWluZyBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIHlvdSBjb3VsZCB3cml0ZSBhIHZlcnkgc21hbGxcbi8vIGFtb3VudCBvZiBpbnB1dCwgYW5kIGVuZCB1cCB3aXRoIGEgdmVyeSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0LiAgSW5cbi8vIHN1Y2ggYSBwYXRob2xvZ2ljYWwgaW5mbGF0aW5nIG1lY2hhbmlzbSwgdGhlcmUnZCBiZSBubyB3YXkgdG8gdGVsbFxuLy8gdGhlIHN5c3RlbSB0byBzdG9wIGRvaW5nIHRoZSB0cmFuc2Zvcm0uICBBIHNpbmdsZSA0TUIgd3JpdGUgY291bGRcbi8vIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuXG4vL1xuLy8gSG93ZXZlciwgZXZlbiBpbiBzdWNoIGEgcGF0aG9sb2dpY2FsIGNhc2UsIG9ubHkgYSBzaW5nbGUgd3JpdHRlbiBjaHVua1xuLy8gd291bGQgYmUgY29uc3VtZWQsIGFuZCB0aGVuIHRoZSByZXN0IHdvdWxkIHdhaXQgKHVuLXRyYW5zZm9ybWVkKSB1bnRpbFxuLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHRyYW5zZm9ybWVkIGNodW5rIHdlcmUgY29uc3VtZWQuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cbnZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IE9iamVjdC5jcmVhdGUocmVxdWlyZSgnY29yZS11dGlsLWlzJykpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhUcmFuc2Zvcm0sIER1cGxleCk7XG5cbmZ1bmN0aW9uIGFmdGVyVHJhbnNmb3JtKGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy50cmFuc2Zvcm1pbmcgPSBmYWxzZTtcblxuICB2YXIgY2IgPSB0cy53cml0ZWNiO1xuXG4gIGlmICghY2IpIHtcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignd3JpdGUgY2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzJykpO1xuICB9XG5cbiAgdHMud3JpdGVjaHVuayA9IG51bGw7XG4gIHRzLndyaXRlY2IgPSBudWxsO1xuXG4gIGlmIChkYXRhICE9IG51bGwpIC8vIHNpbmdsZSBlcXVhbHMgY2hlY2sgZm9yIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICAgIHRoaXMucHVzaChkYXRhKTtcblxuICBjYihlcik7XG5cbiAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcnMucmVhZGluZyA9IGZhbHNlO1xuICBpZiAocnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHtcbiAgICB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKSByZXR1cm4gbmV3IFRyYW5zZm9ybShvcHRpb25zKTtcblxuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZSA9IHtcbiAgICBhZnRlclRyYW5zZm9ybTogYWZ0ZXJUcmFuc2Zvcm0uYmluZCh0aGlzKSxcbiAgICBuZWVkVHJhbnNmb3JtOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1pbmc6IGZhbHNlLFxuICAgIHdyaXRlY2I6IG51bGwsXG4gICAgd3JpdGVjaHVuazogbnVsbCxcbiAgICB3cml0ZWVuY29kaW5nOiBudWxsXG4gIH07XG5cbiAgLy8gc3RhcnQgb3V0IGFza2luZyBmb3IgYSByZWFkYWJsZSBldmVudCBvbmNlIGRhdGEgaXMgdHJhbnNmb3JtZWQuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyB3ZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fdHJhbnNmb3JtID0gb3B0aW9ucy50cmFuc2Zvcm07XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoID0gb3B0aW9ucy5mbHVzaDtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKTtcbn1cblxuZnVuY3Rpb24gcHJlZmluaXNoKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgdGhpcy5fZmx1c2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9mbHVzaChmdW5jdGlvbiAoZXIsIGRhdGEpIHtcbiAgICAgIGRvbmUoX3RoaXMsIGVyLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBkb25lKHRoaXMsIG51bGwsIG51bGwpO1xuICB9XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICByZXR1cm4gRHVwbGV4LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGVuY29kaW5nKTtcbn07XG5cbi8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgeW91IGRvIHN0dWZmIVxuLy8gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gJ2NodW5rJyBpcyBhbiBpbnB1dCBjaHVuay5cbi8vXG4vLyBDYWxsIGBwdXNoKG5ld0NodW5rKWAgdG8gcGFzcyBhbG9uZyB0cmFuc2Zvcm1lZCBvdXRwdXRcbi8vIHRvIHRoZSByZWFkYWJsZSBzaWRlLiAgWW91IG1heSBjYWxsICdwdXNoJyB6ZXJvIG9yIG1vcmUgdGltZXMuXG4vL1xuLy8gQ2FsbCBgY2IoZXJyKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGlzIGNodW5rLiAgSWYgeW91IHBhc3Ncbi8vIGFuIGVycm9yLCB0aGVuIHRoYXQnbGwgcHV0IHRoZSBodXJ0IG9uIHRoZSB3aG9sZSBvcGVyYXRpb24uICBJZiB5b3Vcbi8vIG5ldmVyIGNhbGwgY2IoKSwgdGhlbiB5b3UnbGwgbmV2ZXIgZ2V0IGFub3RoZXIgY2h1bmsuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ190cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLndyaXRlY2IgPSBjYjtcbiAgdHMud3JpdGVjaHVuayA9IGNodW5rO1xuICB0cy53cml0ZWVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIGlmICghdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAodHMubmVlZFRyYW5zZm9ybSB8fCBycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufTtcblxuLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgYXJncyBhcmUgaGVyZS5cbi8vIF90cmFuc2Zvcm0gZG9lcyBhbGwgdGhlIHdvcmsuXG4vLyBUaGF0IHdlIGdvdCBoZXJlIG1lYW5zIHRoYXQgdGhlIHJlYWRhYmxlIHNpZGUgd2FudHMgbW9yZSBkYXRhLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmIHRzLndyaXRlY2IgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB2YXIgX3RoaXMyID0gdGhpcztcblxuICBEdXBsZXgucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcywgZXJyLCBmdW5jdGlvbiAoZXJyMikge1xuICAgIGNiKGVycjIpO1xuICAgIF90aGlzMi5lbWl0KCdjbG9zZScpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG5cbiAgaWYgKGRhdGEgIT0gbnVsbCkgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgLy8gaWYgdGhlcmUncyBub3RoaW5nIGluIHRoZSB3cml0ZSBidWZmZXIsIHRoZW4gdGhhdCBtZWFuc1xuICAvLyB0aGF0IG5vdGhpbmcgbW9yZSB3aWxsIGV2ZXIgYmUgcHJvdmlkZWRcbiAgaWYgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwJyk7XG5cbiAgaWYgKHN0cmVhbS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmcnKTtcblxuICByZXR1cm4gc3RyZWFtLnB1c2gobnVsbCk7XG59IiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaDtcblxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vX3N0cmVhbV90cmFuc2Zvcm0nKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pO1xuXG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspO1xufTsiLAogICAgInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmlmIChwcm9jZXNzLmVudi5SRUFEQUJMRV9TVFJFQU0gPT09ICdkaXNhYmxlJyAmJiBTdHJlYW0pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBTdHJlYW07XG4gIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IFN0cmVhbS5SZWFkYWJsZTtcbiAgZXhwb3J0cy5SZWFkYWJsZSA9IFN0cmVhbS5SZWFkYWJsZTtcbiAgZXhwb3J0cy5Xcml0YWJsZSA9IFN0cmVhbS5Xcml0YWJsZTtcbiAgZXhwb3J0cy5EdXBsZXggPSBTdHJlYW0uRHVwbGV4O1xuICBleHBvcnRzLlRyYW5zZm9ybSA9IFN0cmVhbS5UcmFuc2Zvcm07XG4gIGV4cG9ydHMuUGFzc1Rocm91Z2ggPSBTdHJlYW0uUGFzc1Rocm91Z2g7XG4gIGV4cG9ydHMuU3RyZWFtID0gU3RyZWFtO1xufSBlbHNlIHtcbiAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuICBleHBvcnRzLlN0cmVhbSA9IFN0cmVhbSB8fCBleHBvcnRzO1xuICBleHBvcnRzLlJlYWRhYmxlID0gZXhwb3J0cztcbiAgZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbiAgZXhwb3J0cy5EdXBsZXggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuICBleHBvcnRzLlRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzJyk7XG4gIGV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpLlBhc3NUaHJvdWdoXG4iLAogICAgInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBSZWFkYWJsZTogUmVhZGFibGUsXG4gIFdyaXRhYmxlOiBXcml0YWJsZVxufTtcblxudXRpbC5pbmhlcml0cyhSZWFkYWJsZSwgUGFzc1Rocm91Z2gpO1xudXRpbC5pbmhlcml0cyhXcml0YWJsZSwgUGFzc1Rocm91Z2gpO1xuXG4vLyBQYXRjaCB0aGUgZ2l2ZW4gbWV0aG9kIG9mIGluc3RhbmNlIHNvIHRoYXQgdGhlIGNhbGxiYWNrXG4vLyBpcyBleGVjdXRlZCBvbmNlLCBiZWZvcmUgdGhlIGFjdHVhbCBtZXRob2QgaXMgY2FsbGVkIHRoZVxuLy8gZmlyc3QgdGltZS5cbmZ1bmN0aW9uIGJlZm9yZUZpcnN0Q2FsbChpbnN0YW5jZSwgbWV0aG9kLCBjYWxsYmFjaykge1xuICBpbnN0YW5jZVttZXRob2RdID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIGluc3RhbmNlW21ldGhvZF07XG4gICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdGhpc1ttZXRob2RdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlKGZuLCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZShmbiwgb3B0aW9ucyk7XG5cbiAgUGFzc1Rocm91Z2guY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBiZWZvcmVGaXJzdENhbGwodGhpcywgJ19yZWFkJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNvdXJjZSA9IGZuLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgdmFyIGVtaXQgPSB0aGlzLmVtaXQuYmluZCh0aGlzLCAnZXJyb3InKTtcbiAgICBzb3VyY2Uub24oJ2Vycm9yJywgZW1pdCk7XG4gICAgc291cmNlLnBpcGUodGhpcyk7XG4gIH0pO1xuXG4gIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGUoZm4sIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRhYmxlKSlcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKGZuLCBvcHRpb25zKTtcblxuICBQYXNzVGhyb3VnaC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGJlZm9yZUZpcnN0Q2FsbCh0aGlzLCAnX3dyaXRlJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gZm4uY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB2YXIgZW1pdCA9IHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlcnJvcicpO1xuICAgIGRlc3RpbmF0aW9uLm9uKCdlcnJvcicsIGVtaXQpO1xuICAgIHRoaXMucGlwZShkZXN0aW5hdGlvbik7XG4gIH0pO1xuXG4gIHRoaXMuZW1pdCgnd3JpdGFibGUnKTtcbn1cblxuIiwKICAgICIvKiFcbiAqIG5vcm1hbGl6ZS1wYXRoIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9ub3JtYWxpemUtcGF0aD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCwgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihwYXRoLCBzdHJpcFRyYWlsaW5nKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBwYXRoIHRvIGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAocGF0aCA9PT0gJ1xcXFwnIHx8IHBhdGggPT09ICcvJykgcmV0dXJuICcvJztcblxuICB2YXIgbGVuID0gcGF0aC5sZW5ndGg7XG4gIGlmIChsZW4gPD0gMSkgcmV0dXJuIHBhdGg7XG5cbiAgLy8gZW5zdXJlIHRoYXQgd2luMzIgbmFtZXNwYWNlcyBoYXMgdHdvIGxlYWRpbmcgc2xhc2hlcywgc28gdGhhdCB0aGUgcGF0aCBpc1xuICAvLyBoYW5kbGVkIHByb3Blcmx5IGJ5IHRoZSB3aW4zMiB2ZXJzaW9uIG9mIHBhdGgucGFyc2UoKSBhZnRlciBiZWluZyBub3JtYWxpemVkXG4gIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MjQ3KHY9dnMuODUpLmFzcHgjbmFtZXNwYWNlc1xuICB2YXIgcHJlZml4ID0gJyc7XG4gIGlmIChsZW4gPiA0ICYmIHBhdGhbM10gPT09ICdcXFxcJykge1xuICAgIHZhciBjaCA9IHBhdGhbMl07XG4gICAgaWYgKChjaCA9PT0gJz8nIHx8IGNoID09PSAnLicpICYmIHBhdGguc2xpY2UoMCwgMikgPT09ICdcXFxcXFxcXCcpIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDIpO1xuICAgICAgcHJlZml4ID0gJy8vJztcbiAgICB9XG4gIH1cblxuICB2YXIgc2VncyA9IHBhdGguc3BsaXQoL1svXFxcXF0rLyk7XG4gIGlmIChzdHJpcFRyYWlsaW5nICE9PSBmYWxzZSAmJiBzZWdzW3NlZ3MubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgc2Vncy5wb3AoKTtcbiAgfVxuICByZXR1cm4gcHJlZml4ICsgc2Vncy5qb2luKCcvJyk7XG59O1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwKICAgICIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLAogICAgInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlclJlc3Q7XG4iLAogICAgIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwKICAgICIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLAogICAgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsCiAgICAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsCiAgICAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsCiAgICAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLAogICAgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLAogICAgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLAogICAgInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLAogICAgInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLAogICAgIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwKICAgICJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsCiAgICAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsCiAgICAidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwKICAgICIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLAogICAgInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLAogICAgInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsCiAgICAiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLAogICAgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsCiAgICAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLAogICAgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwKICAgICJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IGluZGV4IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgaW5kZXggb3Iga2V5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICA/IChpc0FycmF5TGlrZShvYmplY3QpICYmIGlzSW5kZXgoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxuICAgICAgICA6ICh0eXBlID09ICdzdHJpbmcnICYmIGluZGV4IGluIG9iamVjdClcbiAgICAgICkge1xuICAgIHJldHVybiBlcShvYmplY3RbaW5kZXhdLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXRlcmF0ZWVDYWxsO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwKICAgICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsCiAgICAidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwKICAgICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLAogICAgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwKICAgICJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsCiAgICAidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLAogICAgInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsCiAgICAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwKICAgICIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLAogICAgInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsCiAgICAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwKICAgICJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAqIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXMgdGhhdFxuICogcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmRlZmF1bHRzRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBkZWZhdWx0cyA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoO1xuICB2YXIgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3VyY2UpO1xuICAgIHZhciBwcm9wc0luZGV4ID0gLTE7XG4gICAgdmFyIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsrcHJvcHNJbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbcHJvcHNJbmRleF07XG4gICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAoZXEodmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKlxuICBUaGlzIGZpbGUgaXMgYSByZWR1Y2VkIGFuZCBhZGFwdGVkIHZlcnNpb24gb2YgdGhlIG1haW4gbGliL2ludGVybmFsL3Blcl9jb250ZXh0L3ByaW1vcmRpYWxzLmpzIGZpbGUgZGVmaW5lZCBhdFxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvcGVyX2NvbnRleHQvcHJpbW9yZGlhbHMuanNcblxuICBEb24ndCB0cnkgdG8gcmVwbGFjZSB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIGFuZCBrZWVwIGl0IHVwIHRvIGRhdGUgd2l0aCB0aGUgdXBzdHJlYW0gZmlsZS5cbiovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQXJyYXlJc0FycmF5KHNlbGYpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzZWxmKVxuICB9LFxuICBBcnJheVByb3RvdHlwZUluY2x1ZGVzKHNlbGYsIGVsKSB7XG4gICAgcmV0dXJuIHNlbGYuaW5jbHVkZXMoZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlSW5kZXhPZihzZWxmLCBlbCkge1xuICAgIHJldHVybiBzZWxmLmluZGV4T2YoZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlSm9pbihzZWxmLCBzZXApIHtcbiAgICByZXR1cm4gc2VsZi5qb2luKHNlcClcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVNYXAoc2VsZiwgZm4pIHtcbiAgICByZXR1cm4gc2VsZi5tYXAoZm4pXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlUG9wKHNlbGYsIGVsKSB7XG4gICAgcmV0dXJuIHNlbGYucG9wKGVsKVxuICB9LFxuICBBcnJheVByb3RvdHlwZVB1c2goc2VsZiwgZWwpIHtcbiAgICByZXR1cm4gc2VsZi5wdXNoKGVsKVxuICB9LFxuICBBcnJheVByb3RvdHlwZVNsaWNlKHNlbGYsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc2VsZi5zbGljZShzdGFydCwgZW5kKVxuICB9LFxuICBFcnJvcixcbiAgRnVuY3Rpb25Qcm90b3R5cGVDYWxsKGZuLCB0aGlzQXJncywgLi4uYXJncykge1xuICAgIHJldHVybiBmbi5jYWxsKHRoaXNBcmdzLCAuLi5hcmdzKVxuICB9LFxuICBGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlKHNlbGYsIGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLmNhbGwoc2VsZiwgaW5zdGFuY2UpXG4gIH0sXG4gIE1hdGhGbG9vcjogTWF0aC5mbG9vcixcbiAgTnVtYmVyLFxuICBOdW1iZXJJc0ludGVnZXI6IE51bWJlci5pc0ludGVnZXIsXG4gIE51bWJlcklzTmFOOiBOdW1iZXIuaXNOYU4sXG4gIE51bWJlck1BWF9TQUZFX0lOVEVHRVI6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJNSU5fU0FGRV9JTlRFR0VSOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgTnVtYmVyUGFyc2VJbnQ6IE51bWJlci5wYXJzZUludCxcbiAgT2JqZWN0RGVmaW5lUHJvcGVydGllcyhzZWxmLCBwcm9wcykge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzZWxmLCBwcm9wcylcbiAgfSxcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoc2VsZiwgbmFtZSwgcHJvcCkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgbmFtZSwgcHJvcClcbiAgfSxcbiAgT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNlbGYsIG5hbWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzZWxmLCBuYW1lKVxuICB9LFxuICBPYmplY3RLZXlzKG9iaikge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gIH0sXG4gIE9iamVjdFNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG4gIH0sXG4gIFByb21pc2UsXG4gIFByb21pc2VQcm90b3R5cGVDYXRjaChzZWxmLCBmbikge1xuICAgIHJldHVybiBzZWxmLmNhdGNoKGZuKVxuICB9LFxuICBQcm9taXNlUHJvdG90eXBlVGhlbihzZWxmLCB0aGVuRm4sIGNhdGNoRm4pIHtcbiAgICByZXR1cm4gc2VsZi50aGVuKHRoZW5GbiwgY2F0Y2hGbilcbiAgfSxcbiAgUHJvbWlzZVJlamVjdChlcnIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICB9LFxuICBQcm9taXNlUmVzb2x2ZSh2YWwpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbClcbiAgfSxcbiAgUmVmbGVjdEFwcGx5OiBSZWZsZWN0LmFwcGx5LFxuICBSZWdFeHBQcm90b3R5cGVUZXN0KHNlbGYsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHNlbGYudGVzdCh2YWx1ZSlcbiAgfSxcbiAgU2FmZVNldDogU2V0LFxuICBTdHJpbmcsXG4gIFN0cmluZ1Byb3RvdHlwZVNsaWNlKHNlbGYsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc2VsZi5zbGljZShzdGFydCwgZW5kKVxuICB9LFxuICBTdHJpbmdQcm90b3R5cGVUb0xvd2VyQ2FzZShzZWxmKSB7XG4gICAgcmV0dXJuIHNlbGYudG9Mb3dlckNhc2UoKVxuICB9LFxuICBTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZShzZWxmKSB7XG4gICAgcmV0dXJuIHNlbGYudG9VcHBlckNhc2UoKVxuICB9LFxuICBTdHJpbmdQcm90b3R5cGVUcmltKHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi50cmltKClcbiAgfSxcbiAgU3ltYm9sLFxuICBTeW1ib2xGb3I6IFN5bWJvbC5mb3IsXG4gIFN5bWJvbEFzeW5jSXRlcmF0b3I6IFN5bWJvbC5hc3luY0l0ZXJhdG9yLFxuICBTeW1ib2xIYXNJbnN0YW5jZTogU3ltYm9sLmhhc0luc3RhbmNlLFxuICBTeW1ib2xJdGVyYXRvcjogU3ltYm9sLml0ZXJhdG9yLFxuICBTeW1ib2xEaXNwb3NlOiBTeW1ib2wuZGlzcG9zZSB8fCBTeW1ib2woJ1N5bWJvbC5kaXNwb3NlJyksXG4gIFN5bWJvbEFzeW5jRGlzcG9zZTogU3ltYm9sLmFzeW5jRGlzcG9zZSB8fCBTeW1ib2woJ1N5bWJvbC5hc3luY0Rpc3Bvc2UnKSxcbiAgVHlwZWRBcnJheVByb3RvdHlwZVNldChzZWxmLCBidWYsIGxlbikge1xuICAgIHJldHVybiBzZWxmLnNldChidWYsIGxlbilcbiAgfSxcbiAgQm9vbGVhbjogQm9vbGVhbixcbiAgVWludDhBcnJheVxufVxuIiwKICAgICIvKipcbiAqIEBhdXRob3IgVG9ydSBOYWdhc2hpbWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9teXN0aWNhdGVhPlxuICogQGNvcHlyaWdodCAyMDE1IFRvcnUgTmFnYXNoaW1hLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUHJpdmF0ZURhdGFcbiAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge3t0eXBlOnN0cmluZ319IGV2ZW50IFRoZSBvcmlnaW5hbCBldmVudCBvYmplY3QuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXZlbnRQaGFzZSBUaGUgY3VycmVudCBldmVudCBwaGFzZS5cbiAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR8bnVsbH0gY3VycmVudFRhcmdldCBUaGUgY3VycmVudCBldmVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNhbmNlbGVkIFRoZSBmbGFnIHRvIHByZXZlbnQgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3RvcHBlZCBUaGUgZmxhZyB0byBzdG9wIHByb3BhZ2F0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBpbW1lZGlhdGVTdG9wcGVkIFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24gaW1tZWRpYXRlbHkuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufG51bGx9IHBhc3NpdmVMaXN0ZW5lciBUaGUgbGlzdGVuZXIgaWYgdGhlIGN1cnJlbnQgbGlzdGVuZXIgaXMgcGFzc2l2ZS4gT3RoZXJ3aXNlIHRoaXMgaXMgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lU3RhbXAgVGhlIHVuaXggdGltZS5cbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBQcml2YXRlIGRhdGEgZm9yIGV2ZW50IHdyYXBwZXJzLlxuICogQHR5cGUge1dlYWtNYXA8RXZlbnQsIFByaXZhdGVEYXRhPn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHByaXZhdGVEYXRhID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBDYWNoZSBmb3Igd3JhcHBlciBjbGFzc2VzLlxuICogQHR5cGUge1dlYWtNYXA8T2JqZWN0LCBGdW5jdGlvbj59XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCB3cmFwcGVycyA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogR2V0IHByaXZhdGUgZGF0YS5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QgdG8gZ2V0IHByaXZhdGUgZGF0YS5cbiAqIEByZXR1cm5zIHtQcml2YXRlRGF0YX0gVGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgZXZlbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwZChldmVudCkge1xuICAgIGNvbnN0IHJldHYgPSBwcml2YXRlRGF0YS5nZXQoZXZlbnQpO1xuICAgIGNvbnNvbGUuYXNzZXJ0KFxuICAgICAgICByZXR2ICE9IG51bGwsXG4gICAgICAgIFwiJ3RoaXMnIGlzIGV4cGVjdGVkIGFuIEV2ZW50IG9iamVjdCwgYnV0IGdvdFwiLFxuICAgICAgICBldmVudFxuICAgICk7XG4gICAgcmV0dXJuIHJldHZcbn1cblxuLyoqXG4gKiBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI3NldC10aGUtY2FuY2VsZWQtZmxhZ1xuICogQHBhcmFtIGRhdGEge1ByaXZhdGVEYXRhfSBwcml2YXRlIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIHNldENhbmNlbEZsYWcoZGF0YSkge1xuICAgIGlmIChkYXRhLnBhc3NpdmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuYWJsZSB0byBwcmV2ZW50RGVmYXVsdCBpbnNpZGUgcGFzc2l2ZSBldmVudCBsaXN0ZW5lciBpbnZvY2F0aW9uLlwiLFxuICAgICAgICAgICAgICAgIGRhdGEucGFzc2l2ZUxpc3RlbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWRhdGEuZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBkYXRhLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQucHJldmVudERlZmF1bHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbi8qKlxuICogVGhlIGV2ZW50IHdyYXBwZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgb2YgdGhpcyBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7RXZlbnR8e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIG9yaWdpbmFsIGV2ZW50IHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIEV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgIHByaXZhdGVEYXRhLnNldCh0aGlzLCB7XG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICBldmVudCxcbiAgICAgICAgZXZlbnRQaGFzZTogMixcbiAgICAgICAgY3VycmVudFRhcmdldDogZXZlbnRUYXJnZXQsXG4gICAgICAgIGNhbmNlbGVkOiBmYWxzZSxcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIGltbWVkaWF0ZVN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICBwYXNzaXZlTGlzdGVuZXI6IG51bGwsXG4gICAgICAgIHRpbWVTdGFtcDogZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCksXG4gICAgfSk7XG5cbiAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNVbmZvcmdlYWJsZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlzVHJ1c3RlZFwiLCB7IHZhbHVlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuICAgIC8vIERlZmluZSBhY2Nlc3NvcnNcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoIShrZXkgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gU2hvdWxkIGJlIGVudW1lcmFibGUsIGJ1dCBjbGFzcyBtZXRob2RzIGFyZSBub3QgZW51bWVyYWJsZS5cbkV2ZW50LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudC50eXBlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICovXG4gICAgZ2V0IHRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRUYXJnZXQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5jdXJyZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtFdmVudFRhcmdldFtdfSBUaGUgY29tcG9zZWQgcGF0aCBvZiB0aGlzIGV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBvc2VkUGF0aCgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IHBkKHRoaXMpLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbY3VycmVudFRhcmdldF1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgb2YgTk9ORS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBOT05FKCkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBDQVBUVVJJTkdfUEhBU0UuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgQ0FQVFVSSU5HX1BIQVNFKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBBVF9UQVJHRVQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgQVRfVEFSR0VUKCkge1xuICAgICAgICByZXR1cm4gMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBCVUJCTElOR19QSEFTRS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBCVUJCTElOR19QSEFTRSgpIHtcbiAgICAgICAgcmV0dXJuIDNcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IGV2ZW50UGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFBoYXNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0b3AgZXZlbnQgYnViYmxpbmcuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gcGQodGhpcyk7XG5cbiAgICAgICAgZGF0YS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0b3AgZXZlbnQgYnViYmxpbmcuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gcGQodGhpcyk7XG5cbiAgICAgICAgZGF0YS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgZGF0YS5pbW1lZGlhdGVTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGJ1YmJsaW5nLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBidWJibGVzKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5idWJibGVzKVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBiZSBjYW5jZWxhYmxlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBjYW5jZWxhYmxlKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5jYW5jZWxhYmxlKVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWwgdGhpcyBldmVudC5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgc2V0Q2FuY2VsRmxhZyhwZCh0aGlzKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdFByZXZlbnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmNhbmNlbGVkXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGNvbXBvc2VkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBjb21wb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ocGQodGhpcykuZXZlbnQuY29tcG9zZWQpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bml4IHRpbWUgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCB0aW1lU3RhbXAoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS50aW1lU3RhbXBcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBzcmNFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gc3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBjYW5jZWxCdWJibGUoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5zdG9wcGVkXG4gICAgfSxcbiAgICBzZXQgY2FuY2VsQnViYmxlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuY2FuY2VsQnViYmxlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgZGF0YS5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCByZXR1cm5WYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuICFwZCh0aGlzKS5jYW5jZWxlZFxuICAgIH0sXG4gICAgc2V0IHJldHVyblZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHNldENhbmNlbEZsYWcocGQodGhpcykpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhpcyBldmVudCBvYmplY3QuIEJ1dCBkbyBub3RoaW5nIHVuZGVyIGV2ZW50IGRpc3BhdGNoaW5nLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2J1YmJsZXM9ZmFsc2VdIFRoZSBmbGFnIHRvIGJlIHBvc3NpYmxlIHRvIGJ1YmJsZSB1cC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjYW5jZWxhYmxlPWZhbHNlXSBUaGUgZmxhZyB0byBiZSBwb3NzaWJsZSB0byBjYW5jZWwuXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBpbml0RXZlbnQoKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSxcbn07XG5cbi8vIGBjb25zdHJ1Y3RvcmAgaXMgbm90IGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogRXZlbnQsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxufSk7XG5cbi8vIEVuc3VyZSBgZXZlbnQgaW5zdGFuY2VvZiB3aW5kb3cuRXZlbnRgIGlzIGB0cnVlYC5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuRXZlbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXZlbnQucHJvdG90eXBlLCB3aW5kb3cuRXZlbnQucHJvdG90eXBlKTtcblxuICAgIC8vIE1ha2UgYXNzb2NpYXRpb24gZm9yIHdyYXBwZXJzLlxuICAgIHdyYXBwZXJzLnNldCh3aW5kb3cuRXZlbnQucHJvdG90eXBlLCBFdmVudCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIHJlZGlyZWN0IGEgZ2l2ZW4gcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFByb3BlcnR5IG5hbWUgdG8gZGVmaW5lIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZXNjcmlwdG9yfSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byByZWRpcmVjdCB0aGUgcHJvcGVydHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWRpcmVjdERlc2NyaXB0b3Ioa2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50W2tleV1cbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICBwZCh0aGlzKS5ldmVudFtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIGNhbGwgYSBnaXZlbiBtZXRob2QgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFByb3BlcnR5IG5hbWUgdG8gZGVmaW5lIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZXNjcmlwdG9yfSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byBjYWxsIHRoZSBtZXRob2QgcHJvcGVydHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVDYWxsRGVzY3JpcHRvcihrZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGQodGhpcykuZXZlbnQ7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnRba2V5XS5hcHBseShldmVudCwgYXJndW1lbnRzKVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfVxufVxuXG4vKipcbiAqIERlZmluZSBuZXcgd3JhcHBlciBjbGFzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IEJhc2VFdmVudCBUaGUgYmFzZSB3cmFwcGVyIGNsYXNzLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBwcm90b3R5cGUgb2YgdGhlIG9yaWdpbmFsIGV2ZW50LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgZGVmaW5lZCB3cmFwcGVyIGNsYXNzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lV3JhcHBlcihCYXNlRXZlbnQsIHByb3RvKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3RvKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJhc2VFdmVudFxuICAgIH1cblxuICAgIC8qKiBDdXN0b21FdmVudCAqL1xuICAgIGZ1bmN0aW9uIEN1c3RvbUV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgICAgICBCYXNlRXZlbnQuY2FsbCh0aGlzLCBldmVudFRhcmdldCwgZXZlbnQpO1xuICAgIH1cblxuICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogQ3VzdG9tRXZlbnQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIC8vIERlZmluZSBhY2Nlc3NvcnMuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmICghKGtleSBpbiBCYXNlRXZlbnQucHJvdG90eXBlKSkge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGtleSk7XG4gICAgICAgICAgICBjb25zdCBpc0Z1bmMgPSB0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgaXNGdW5jXG4gICAgICAgICAgICAgICAgICAgID8gZGVmaW5lQ2FsbERlc2NyaXB0b3Ioa2V5KVxuICAgICAgICAgICAgICAgICAgICA6IGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50XG59XG5cbi8qKlxuICogR2V0IHRoZSB3cmFwcGVyIGNsYXNzIG9mIGEgZ2l2ZW4gcHJvdG90eXBlLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBwcm90b3R5cGUgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIGdldCBpdHMgd3JhcHBlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIHdyYXBwZXIgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRXcmFwcGVyKHByb3RvKSB7XG4gICAgaWYgKHByb3RvID09IG51bGwgfHwgcHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIEV2ZW50XG4gICAgfVxuXG4gICAgbGV0IHdyYXBwZXIgPSB3cmFwcGVycy5nZXQocHJvdG8pO1xuICAgIGlmICh3cmFwcGVyID09IG51bGwpIHtcbiAgICAgICAgd3JhcHBlciA9IGRlZmluZVdyYXBwZXIoZ2V0V3JhcHBlcihPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pKSwgcHJvdG8pO1xuICAgICAgICB3cmFwcGVycy5zZXQocHJvdG8sIHdyYXBwZXIpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlclxufVxuXG4vKipcbiAqIFdyYXAgYSBnaXZlbiBldmVudCB0byBtYW5hZ2VtZW50IGEgZGlzcGF0Y2hpbmcuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSBldmVudFRhcmdldCBUaGUgZXZlbnQgdGFyZ2V0IG9mIHRoaXMgZGlzcGF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RXZlbnR9IFRoZSB3cmFwcGVyIGluc3RhbmNlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gd3JhcEV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgIGNvbnN0IFdyYXBwZXIgPSBnZXRXcmFwcGVyKE9iamVjdC5nZXRQcm90b3R5cGVPZihldmVudCkpO1xuICAgIHJldHVybiBuZXcgV3JhcHBlcihldmVudFRhcmdldCwgZXZlbnQpXG59XG5cbi8qKlxuICogR2V0IHRoZSBpbW1lZGlhdGVTdG9wcGVkIGZsYWcgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVGhlIGZsYWcgdG8gc3RvcCBwcm9wYWdhdGlvbiBpbW1lZGlhdGVseS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzU3RvcHBlZChldmVudCkge1xuICAgIHJldHVybiBwZChldmVudCkuaW1tZWRpYXRlU3RvcHBlZFxufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBldmVudCBwaGFzZSBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIHNldCBjdXJyZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBldmVudFBoYXNlIE5ldyBldmVudCBwaGFzZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0RXZlbnRQaGFzZShldmVudCwgZXZlbnRQaGFzZSkge1xuICAgIHBkKGV2ZW50KS5ldmVudFBoYXNlID0gZXZlbnRQaGFzZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtFdmVudFRhcmdldHxudWxsfSBjdXJyZW50VGFyZ2V0IE5ldyBjdXJyZW50IHRhcmdldC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0Q3VycmVudFRhcmdldChldmVudCwgY3VycmVudFRhcmdldCkge1xuICAgIHBkKGV2ZW50KS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbn1cblxuLyoqXG4gKiBTZXQgYSBwYXNzaXZlIGxpc3RlbmVyIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSBwYXNzaXZlTGlzdGVuZXIgTmV3IHBhc3NpdmUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldFBhc3NpdmVMaXN0ZW5lcihldmVudCwgcGFzc2l2ZUxpc3RlbmVyKSB7XG4gICAgcGQoZXZlbnQpLnBhc3NpdmVMaXN0ZW5lciA9IHBhc3NpdmVMaXN0ZW5lcjtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMaXN0ZW5lck5vZGVcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGxpc3RlbmVyXG4gKiBAcHJvcGVydHkgezF8MnwzfSBsaXN0ZW5lclR5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFzc2l2ZVxuICogQHByb3BlcnR5IHtib29sZWFufSBvbmNlXG4gKiBAcHJvcGVydHkge0xpc3RlbmVyTm9kZXxudWxsfSBuZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCBNYXA8c3RyaW5nLCBMaXN0ZW5lck5vZGU+Pn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGxpc3RlbmVyc01hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbi8vIExpc3RlbmVyIHR5cGVzXG5jb25zdCBDQVBUVVJFID0gMTtcbmNvbnN0IEJVQkJMRSA9IDI7XG5jb25zdCBBVFRSSUJVVEUgPSAzO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBnaXZlbiB2YWx1ZSBpcyBhbiBvYmplY3Qgb3Igbm90LlxuICogQHBhcmFtIHthbnl9IHggVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc09iamVjdCh4KSB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09IFwib2JqZWN0XCIgLy9lc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG59XG5cbi8qKlxuICogR2V0IGxpc3RlbmVycy5cbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgdG8gZ2V0LlxuICogQHJldHVybnMge01hcDxzdHJpbmcsIExpc3RlbmVyTm9kZT59IFRoZSBsaXN0ZW5lcnMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRMaXN0ZW5lcnMoZXZlbnRUYXJnZXQpIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnNNYXAuZ2V0KGV2ZW50VGFyZ2V0KTtcbiAgICBpZiAobGlzdGVuZXJzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIFwiJ3RoaXMnIGlzIGV4cGVjdGVkIGFuIEV2ZW50VGFyZ2V0IG9iamVjdCwgYnV0IGdvdCBhbm90aGVyIHZhbHVlLlwiXG4gICAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGxpc3RlbmVyc1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIGV2ZW50IGF0dHJpYnV0ZSBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byBnZXQgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yKGV2ZW50TmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmxpc3RlbmVyVHlwZSA9PT0gQVRUUklCVVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmxpc3RlbmVyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9LFxuXG4gICAgICAgIHNldChsaXN0ZW5lcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiICYmICFpc09iamVjdChsaXN0ZW5lcikpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IG51bGw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcblxuICAgICAgICAgICAgLy8gVHJhdmVyc2UgdG8gdGhlIHRhaWwgd2hpbGUgcmVtb3Zpbmcgb2xkIHZhbHVlLlxuICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubGlzdGVuZXJUeXBlID09PSBBVFRSSUJVVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIG9sZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIG5ldyB2YWx1ZS5cbiAgICAgICAgICAgIGlmIChsaXN0ZW5lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lclR5cGU6IEFUVFJJQlVURSxcbiAgICAgICAgICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG9uY2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5ld05vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfVxufVxuXG4vKipcbiAqIERlZmluZSBhbiBldmVudCBhdHRyaWJ1dGUgKGUuZy4gYGV2ZW50VGFyZ2V0Lm9uY2xpY2tgKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFRhcmdldFByb3RvdHlwZSBUaGUgZXZlbnQgdGFyZ2V0IHByb3RvdHlwZSB0byBkZWZpbmUgYW4gZXZlbnQgYXR0cmJpdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGRlZmluZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBkZWZpbmVFdmVudEF0dHJpYnV0ZShldmVudFRhcmdldFByb3RvdHlwZSwgZXZlbnROYW1lKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICBldmVudFRhcmdldFByb3RvdHlwZSxcbiAgICAgICAgYG9uJHtldmVudE5hbWV9YCxcbiAgICAgICAgZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yKGV2ZW50TmFtZSlcbiAgICApO1xufVxuXG4vKipcbiAqIERlZmluZSBhIGN1c3RvbSBFdmVudFRhcmdldCB3aXRoIGV2ZW50IGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBldmVudE5hbWVzIEV2ZW50IG5hbWVzIGZvciBldmVudCBhdHRyaWJ1dGVzLlxuICogQHJldHVybnMge0V2ZW50VGFyZ2V0fSBUaGUgY3VzdG9tIEV2ZW50VGFyZ2V0LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQoZXZlbnROYW1lcykge1xuICAgIC8qKiBDdXN0b21FdmVudFRhcmdldCAqL1xuICAgIGZ1bmN0aW9uIEN1c3RvbUV2ZW50VGFyZ2V0KCkge1xuICAgICAgICBFdmVudFRhcmdldC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIEN1c3RvbUV2ZW50VGFyZ2V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRUYXJnZXQucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogQ3VzdG9tRXZlbnRUYXJnZXQsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnROYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBkZWZpbmVFdmVudEF0dHJpYnV0ZShDdXN0b21FdmVudFRhcmdldC5wcm90b3R5cGUsIGV2ZW50TmFtZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiBDdXN0b21FdmVudFRhcmdldFxufVxuXG4vKipcbiAqIEV2ZW50VGFyZ2V0LlxuICpcbiAqIC0gVGhpcyBpcyBjb25zdHJ1Y3RvciBpZiBubyBhcmd1bWVudHMuXG4gKiAtIFRoaXMgaXMgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGEgQ3VzdG9tRXZlbnRUYXJnZXQgY29uc3RydWN0b3IgaWYgdGhlcmUgYXJlIGFyZ3VtZW50cy5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgY2xhc3MgQSBleHRlbmRzIEV2ZW50VGFyZ2V0IHt9XG4gKiAgICAgY2xhc3MgQiBleHRlbmRzIEV2ZW50VGFyZ2V0KFwibWVzc2FnZVwiKSB7fVxuICogICAgIGNsYXNzIEMgZXh0ZW5kcyBFdmVudFRhcmdldChcIm1lc3NhZ2VcIiwgXCJlcnJvclwiKSB7fVxuICogICAgIGNsYXNzIEQgZXh0ZW5kcyBFdmVudFRhcmdldChbXCJtZXNzYWdlXCIsIFwiZXJyb3JcIl0pIHt9XG4gKi9cbmZ1bmN0aW9uIEV2ZW50VGFyZ2V0KCkge1xuICAgIC8qZXNsaW50LWRpc2FibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0KSB7XG4gICAgICAgIGxpc3RlbmVyc01hcC5zZXQodGhpcywgbmV3IE1hcCgpKTtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQoYXJndW1lbnRzWzBdKVxuICAgIH1cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0eXBlc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQodHlwZXMpXG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIilcbiAgICAvKmVzbGludC1lbmFibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbn1cblxuLy8gU2hvdWxkIGJlIGVudW1lcmFibGUsIGJ1dCBjbGFzcyBtZXRob2RzIGFyZSBub3QgZW51bWVyYWJsZS5cbkV2ZW50VGFyZ2V0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBnaXZlbiBsaXN0ZW5lciB0byB0aGlzIGV2ZW50IHRhcmdldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGFkZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnx7Y2FwdHVyZT86Ym9vbGVhbixwYXNzaXZlPzpib29sZWFuLG9uY2U/OmJvb2xlYW59fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgZm9yIHRoaXMgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIgJiYgIWlzT2JqZWN0KGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIidsaXN0ZW5lcicgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LlwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICBjb25zdCBvcHRpb25zSXNPYmogPSBpc09iamVjdChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IG9wdGlvbnNJc09ialxuICAgICAgICAgICAgPyBCb29sZWFuKG9wdGlvbnMuY2FwdHVyZSlcbiAgICAgICAgICAgIDogQm9vbGVhbihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJUeXBlID0gY2FwdHVyZSA/IENBUFRVUkUgOiBCVUJCTEU7XG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgICBsaXN0ZW5lcixcbiAgICAgICAgICAgIGxpc3RlbmVyVHlwZSxcbiAgICAgICAgICAgIHBhc3NpdmU6IG9wdGlvbnNJc09iaiAmJiBCb29sZWFuKG9wdGlvbnMucGFzc2l2ZSksXG4gICAgICAgICAgICBvbmNlOiBvcHRpb25zSXNPYmogJiYgQm9vbGVhbihvcHRpb25zLm9uY2UpLFxuICAgICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTZXQgaXQgYXMgdGhlIGZpcnN0IG5vZGUgaWYgdGhlIGZpcnN0IG5vZGUgaXMgbnVsbC5cbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBuZXdOb2RlKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJhdmVyc2UgdG8gdGhlIHRhaWwgd2hpbGUgY2hlY2tpbmcgZHVwbGljYXRpb24uLlxuICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyID09PSBsaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXJUeXBlID09PSBsaXN0ZW5lclR5cGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIFNob3VsZCBpZ25vcmUgZHVwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2ID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgaXQuXG4gICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIGdpdmVuIGxpc3RlbmVyIGZyb20gdGhpcyBldmVudCB0YXJnZXQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58e2NhcHR1cmU/OmJvb2xlYW4scGFzc2l2ZT86Ym9vbGVhbixvbmNlPzpib29sZWFufX0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGZvciB0aGlzIGxpc3RlbmVyLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgICAgICBpZiAobGlzdGVuZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgIGNvbnN0IGNhcHR1cmUgPSBpc09iamVjdChvcHRpb25zKVxuICAgICAgICAgICAgPyBCb29sZWFuKG9wdGlvbnMuY2FwdHVyZSlcbiAgICAgICAgICAgIDogQm9vbGVhbihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJUeXBlID0gY2FwdHVyZSA/IENBUFRVUkUgOiBCVUJCTEU7XG5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIgPT09IGxpc3RlbmVyICYmXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgPT09IGxpc3RlbmVyVHlwZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwYXRjaCBhIGdpdmVuIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7RXZlbnR8e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIGV2ZW50IHRvIGRpc3BhdGNoLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgZmFsc2VgIGlmIGNhbmNlbGVkLlxuICAgICAqL1xuICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50ID09IG51bGwgfHwgdHlwZW9mIGV2ZW50LnR5cGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXZlbnQudHlwZVwiIHNob3VsZCBiZSBhIHN0cmluZy4nKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbGlzdGVuZXJzIGFyZW4ndCByZWdpc3RlcmVkLCB0ZXJtaW5hdGUuXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgY29uc3QgZXZlbnROYW1lID0gZXZlbnQudHlwZTtcbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaW5jZSB3ZSBjYW5ub3QgcmV3cml0ZSBzZXZlcmFsIHByb3BlcnRpZXMsIHNvIHdyYXAgb2JqZWN0LlxuICAgICAgICBjb25zdCB3cmFwcGVkRXZlbnQgPSB3cmFwRXZlbnQodGhpcywgZXZlbnQpO1xuXG4gICAgICAgIC8vIFRoaXMgZG9lc24ndCBwcm9jZXNzIGNhcHR1cmluZyBwaGFzZSBhbmQgYnViYmxpbmcgcGhhc2UuXG4gICAgICAgIC8vIFRoaXMgaXNuJ3QgcGFydGljaXBhdGluZyBpbiBhIHRyZWUuXG4gICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGlzdGVuZXIgaWYgaXQncyBvbmNlXG4gICAgICAgICAgICBpZiAobm9kZS5vbmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWxsIHRoaXMgbGlzdGVuZXJcbiAgICAgICAgICAgIHNldFBhc3NpdmVMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICB3cmFwcGVkRXZlbnQsXG4gICAgICAgICAgICAgICAgbm9kZS5wYXNzaXZlID8gbm9kZS5saXN0ZW5lciA6IG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUubGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIuY2FsbCh0aGlzLCB3cmFwcGVkRXZlbnQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgIT09IEFUVFJJQlVURSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBub2RlLmxpc3RlbmVyLmhhbmRsZUV2ZW50ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIuaGFuZGxlRXZlbnQod3JhcHBlZEV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQnJlYWsgaWYgYGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbmAgd2FzIGNhbGxlZC5cbiAgICAgICAgICAgIGlmIChpc1N0b3BwZWQod3JhcHBlZEV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UGFzc2l2ZUxpc3RlbmVyKHdyYXBwZWRFdmVudCwgbnVsbCk7XG4gICAgICAgIHNldEV2ZW50UGhhc2Uod3JhcHBlZEV2ZW50LCAwKTtcbiAgICAgICAgc2V0Q3VycmVudFRhcmdldCh3cmFwcGVkRXZlbnQsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiAhd3JhcHBlZEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWRcbiAgICB9LFxufTtcblxuLy8gYGNvbnN0cnVjdG9yYCBpcyBub3QgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudFRhcmdldC5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBFdmVudFRhcmdldCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG59KTtcblxuLy8gRW5zdXJlIGBldmVudFRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudFRhcmdldGAgaXMgYHRydWVgLlxuaWYgKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2Ygd2luZG93LkV2ZW50VGFyZ2V0ICE9PSBcInVuZGVmaW5lZFwiXG4pIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXZlbnRUYXJnZXQucHJvdG90eXBlLCB3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlKTtcbn1cblxuZXhwb3J0cy5kZWZpbmVFdmVudEF0dHJpYnV0ZSA9IGRlZmluZUV2ZW50QXR0cmlidXRlO1xuZXhwb3J0cy5FdmVudFRhcmdldCA9IEV2ZW50VGFyZ2V0O1xuZXhwb3J0cy5kZWZhdWx0ID0gRXZlbnRUYXJnZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRUYXJnZXRcbm1vZHVsZS5leHBvcnRzLkV2ZW50VGFyZ2V0ID0gbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRXZlbnRUYXJnZXRcbm1vZHVsZS5leHBvcnRzLmRlZmluZUV2ZW50QXR0cmlidXRlID0gZGVmaW5lRXZlbnRBdHRyaWJ1dGVcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50LXRhcmdldC1zaGltLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEBhdXRob3IgVG9ydSBOYWdhc2hpbWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9teXN0aWNhdGVhPlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBldmVudFRhcmdldFNoaW0gPSByZXF1aXJlKCdldmVudC10YXJnZXQtc2hpbScpO1xuXG4vKipcbiAqIFRoZSBzaWduYWwgY2xhc3MuXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jYWJvcnRzaWduYWxcbiAqL1xuY2xhc3MgQWJvcnRTaWduYWwgZXh0ZW5kcyBldmVudFRhcmdldFNoaW0uRXZlbnRUYXJnZXQge1xuICAgIC8qKlxuICAgICAqIEFib3J0U2lnbmFsIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFib3J0U2lnbmFsIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseVwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBgQWJvcnRTaWduYWxgJ3MgYEFib3J0Q29udHJvbGxlcmAgaGFzIHNpZ25hbGVkIHRvIGFib3J0LCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIGNvbnN0IGFib3J0ZWQgPSBhYm9ydGVkRmxhZ3MuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAodHlwZW9mIGFib3J0ZWQgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAndGhpcycgdG8gYmUgYW4gJ0Fib3J0U2lnbmFsJyBvYmplY3QsIGJ1dCBnb3QgJHt0aGlzID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdGhpc31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJvcnRlZDtcbiAgICB9XG59XG5ldmVudFRhcmdldFNoaW0uZGVmaW5lRXZlbnRBdHRyaWJ1dGUoQWJvcnRTaWduYWwucHJvdG90eXBlLCBcImFib3J0XCIpO1xuLyoqXG4gKiBDcmVhdGUgYW4gQWJvcnRTaWduYWwgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVBYm9ydFNpZ25hbCgpIHtcbiAgICBjb25zdCBzaWduYWwgPSBPYmplY3QuY3JlYXRlKEFib3J0U2lnbmFsLnByb3RvdHlwZSk7XG4gICAgZXZlbnRUYXJnZXRTaGltLkV2ZW50VGFyZ2V0LmNhbGwoc2lnbmFsKTtcbiAgICBhYm9ydGVkRmxhZ3Muc2V0KHNpZ25hbCwgZmFsc2UpO1xuICAgIHJldHVybiBzaWduYWw7XG59XG4vKipcbiAqIEFib3J0IGEgZ2l2ZW4gc2lnbmFsLlxuICovXG5mdW5jdGlvbiBhYm9ydFNpZ25hbChzaWduYWwpIHtcbiAgICBpZiAoYWJvcnRlZEZsYWdzLmdldChzaWduYWwpICE9PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFib3J0ZWRGbGFncy5zZXQoc2lnbmFsLCB0cnVlKTtcbiAgICBzaWduYWwuZGlzcGF0Y2hFdmVudCh7IHR5cGU6IFwiYWJvcnRcIiB9KTtcbn1cbi8qKlxuICogQWJvcnRlZCBmbGFnIGZvciBlYWNoIGluc3RhbmNlcy5cbiAqL1xuY29uc3QgYWJvcnRlZEZsYWdzID0gbmV3IFdlYWtNYXAoKTtcbi8vIFByb3BlcnRpZXMgc2hvdWxkIGJlIGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYm9ydFNpZ25hbC5wcm90b3R5cGUsIHtcbiAgICBhYm9ydGVkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbn0pO1xuLy8gYHRvU3RyaW5nKClgIHNob3VsZCByZXR1cm4gYFwiW29iamVjdCBBYm9ydFNpZ25hbF1cImBcbmlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gXCJzeW1ib2xcIikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYm9ydFNpZ25hbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBcIkFib3J0U2lnbmFsXCIsXG4gICAgfSk7XG59XG5cbi8qKlxuICogVGhlIEFib3J0Q29udHJvbGxlci5cbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNhYm9ydGNvbnRyb2xsZXJcbiAqL1xuY2xhc3MgQWJvcnRDb250cm9sbGVyIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHRoaXMgY29udHJvbGxlci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc2lnbmFscy5zZXQodGhpcywgY3JlYXRlQWJvcnRTaWduYWwoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBBYm9ydFNpZ25hbGAgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBnZXQgc2lnbmFsKCkge1xuICAgICAgICByZXR1cm4gZ2V0U2lnbmFsKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBYm9ydCBhbmQgc2lnbmFsIHRvIGFueSBvYnNlcnZlcnMgdGhhdCB0aGUgYXNzb2NpYXRlZCBhY3Rpdml0eSBpcyB0byBiZSBhYm9ydGVkLlxuICAgICAqL1xuICAgIGFib3J0KCkge1xuICAgICAgICBhYm9ydFNpZ25hbChnZXRTaWduYWwodGhpcykpO1xuICAgIH1cbn1cbi8qKlxuICogQXNzb2NpYXRlZCBzaWduYWxzLlxuICovXG5jb25zdCBzaWduYWxzID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogR2V0IHRoZSBhc3NvY2lhdGVkIHNpZ25hbCBvZiBhIGdpdmVuIGNvbnRyb2xsZXIuXG4gKi9cbmZ1bmN0aW9uIGdldFNpZ25hbChjb250cm9sbGVyKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gc2lnbmFscy5nZXQoY29udHJvbGxlcik7XG4gICAgaWYgKHNpZ25hbCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICd0aGlzJyB0byBiZSBhbiAnQWJvcnRDb250cm9sbGVyJyBvYmplY3QsIGJ1dCBnb3QgJHtjb250cm9sbGVyID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgY29udHJvbGxlcn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25hbDtcbn1cbi8vIFByb3BlcnRpZXMgc2hvdWxkIGJlIGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlLCB7XG4gICAgc2lnbmFsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBhYm9ydDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG59KTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gXCJzeW1ib2xcIikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogXCJBYm9ydENvbnRyb2xsZXJcIixcbiAgICB9KTtcbn1cblxuZXhwb3J0cy5BYm9ydENvbnRyb2xsZXIgPSBBYm9ydENvbnRyb2xsZXI7XG5leHBvcnRzLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWw7XG5leHBvcnRzLmRlZmF1bHQgPSBBYm9ydENvbnRyb2xsZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gQWJvcnRDb250cm9sbGVyXG5tb2R1bGUuZXhwb3J0cy5BYm9ydENvbnRyb2xsZXIgPSBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBYm9ydENvbnRyb2xsZXJcbm1vZHVsZS5leHBvcnRzLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFib3J0LWNvbnRyb2xsZXIuanMubWFwXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBidWZmZXJNb2R1bGUgPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrUmVzaXN0U3RvcFByb3BhZ2F0aW9uLCBTeW1ib2xEaXNwb3NlIH0gPSByZXF1aXJlKCcuL3ByaW1vcmRpYWxzJylcbmNvbnN0IEFib3J0U2lnbmFsID0gZ2xvYmFsVGhpcy5BYm9ydFNpZ25hbCB8fCByZXF1aXJlKCdhYm9ydC1jb250cm9sbGVyJykuQWJvcnRTaWduYWxcbmNvbnN0IEFib3J0Q29udHJvbGxlciA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydENvbnRyb2xsZXJcbmNvbnN0IEFzeW5jRnVuY3Rpb24gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXN5bmMgZnVuY3Rpb24gKCkge30pLmNvbnN0cnVjdG9yXG5jb25zdCBCbG9iID0gZ2xvYmFsVGhpcy5CbG9iIHx8IGJ1ZmZlck1vZHVsZS5CbG9iXG4vKiBlc2xpbnQtZGlzYWJsZSBpbmRlbnQgKi9cbmNvbnN0IGlzQmxvYiA9XG4gIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJ1xuICAgID8gZnVuY3Rpb24gaXNCbG9iKGIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGluZGVudFxuICAgICAgICByZXR1cm4gYiBpbnN0YW5jZW9mIEJsb2JcbiAgICAgIH1cbiAgICA6IGZ1bmN0aW9uIGlzQmxvYihiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuLyogZXNsaW50LWVuYWJsZSBpbmRlbnQgKi9cblxuY29uc3QgdmFsaWRhdGVBYm9ydFNpZ25hbCA9IChzaWduYWwsIG5hbWUpID0+IHtcbiAgaWYgKHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIChzaWduYWwgPT09IG51bGwgfHwgdHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Fib3J0U2lnbmFsJywgc2lnbmFsKVxuICB9XG59XG5jb25zdCB2YWxpZGF0ZUZ1bmN0aW9uID0gKHZhbHVlLCBuYW1lKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnRnVuY3Rpb24nLCB2YWx1ZSlcbn1cblxuLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBBZ2dyZWdhdGVFcnJvclxuY2xhc3MgQWdncmVnYXRlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVycm9ycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShlcnJvcnMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBpbnB1dCB0byBiZSBhbiBBcnJheSwgZ290ICR7dHlwZW9mIGVycm9yc31gKVxuICAgIH1cbiAgICBsZXQgbWVzc2FnZSA9ICcnXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCAgICAke2Vycm9yc1tpXS5zdGFja31cXG5gXG4gICAgfVxuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0FnZ3JlZ2F0ZUVycm9yJ1xuICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBZ2dyZWdhdGVFcnJvcixcbiAga0VtcHR5T2JqZWN0OiBPYmplY3QuZnJlZXplKHt9KSxcbiAgb25jZShjYWxsYmFjaykge1xuICAgIGxldCBjYWxsZWQgPSBmYWxzZVxuICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgaWYgKGNhbGxlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhbGxlZCA9IHRydWVcbiAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgfVxuICB9LFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2U6IGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcmVzb2x2ZVxuICAgIGxldCByZWplY3RcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3BhcmFtLW5hbWVzXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgcmVzb2x2ZSA9IHJlc1xuICAgICAgcmVqZWN0ID0gcmVqXG4gICAgfSlcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3RcbiAgICB9XG4gIH0sXG4gIHByb21pc2lmeShmbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmbigoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZSguLi5hcmdzKVxuICAgICAgfSlcbiAgICB9KVxuICB9LFxuICBkZWJ1Z2xvZygpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge31cbiAgfSxcbiAgZm9ybWF0KGZvcm1hdCwgLi4uYXJncykge1xuICAgIC8vIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL25vZGVqcy5vcmcvYXBpL3V0aWwuaHRtbCN1dGlsZm9ybWF0Zm9ybWF0LWFyZ3NcbiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoLyUoW3NkaWZqXSkvZywgZnVuY3Rpb24gKC4uLltfdW51c2VkLCB0eXBlXSkge1xuICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBhcmdzLnNoaWZ0KClcbiAgICAgIGlmICh0eXBlID09PSAnZicpIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50LnRvRml4ZWQoNilcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2onKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXBsYWNlbWVudClcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3MnICYmIHR5cGVvZiByZXBsYWNlbWVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgY3RvciA9IHJlcGxhY2VtZW50LmNvbnN0cnVjdG9yICE9PSBPYmplY3QgPyByZXBsYWNlbWVudC5jb25zdHJ1Y3Rvci5uYW1lIDogJydcbiAgICAgICAgcmV0dXJuIGAke2N0b3J9IHt9YC50cmltKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudC50b1N0cmluZygpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgaW5zcGVjdCh2YWx1ZSkge1xuICAgIC8vIFZhc3RseSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS91dGlsLmh0bWwjdXRpbGluc3BlY3RvYmplY3Qtb3B0aW9uc1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCInXCIpKSB7XG4gICAgICAgICAgaWYgKCF2YWx1ZS5pbmNsdWRlcygnXCInKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBcIiR7dmFsdWV9XCJgXG4gICAgICAgICAgfSBlbHNlIGlmICghdmFsdWUuaW5jbHVkZXMoJ2AnKSAmJiAhdmFsdWUuaW5jbHVkZXMoJyR7JykpIHtcbiAgICAgICAgICAgIHJldHVybiBgXFxgJHt2YWx1ZX1cXGBgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJyR7dmFsdWV9J2BcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gJ05hTidcbiAgICAgICAgfSBlbHNlIGlmIChPYmplY3QuaXModmFsdWUsIC0wKSkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICByZXR1cm4gYCR7U3RyaW5nKHZhbHVlKX1uYFxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICd7fSdcbiAgICB9XG4gIH0sXG4gIHR5cGVzOiB7XG4gICAgaXNBc3luY0Z1bmN0aW9uKGZuKSB7XG4gICAgICByZXR1cm4gZm4gaW5zdGFuY2VvZiBBc3luY0Z1bmN0aW9uXG4gICAgfSxcbiAgICBpc0FycmF5QnVmZmVyVmlldyhhcnIpIHtcbiAgICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyKVxuICAgIH1cbiAgfSxcbiAgaXNCbG9iLFxuICBkZXByZWNhdGUoZm4sIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gZm5cbiAgfSxcbiAgYWRkQWJvcnRMaXN0ZW5lcjpcbiAgICByZXF1aXJlKCdldmVudHMnKS5hZGRBYm9ydExpc3RlbmVyIHx8XG4gICAgZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lcihzaWduYWwsIGxpc3RlbmVyKSB7XG4gICAgICBpZiAoc2lnbmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdzaWduYWwnLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKHNpZ25hbCwgJ3NpZ25hbCcpXG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uKGxpc3RlbmVyLCAnbGlzdGVuZXInKVxuICAgICAgbGV0IHJlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBsaXN0ZW5lcigpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIsIHtcbiAgICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgICAgb25jZTogdHJ1ZSxcbiAgICAgICAgICBba1Jlc2lzdFN0b3BQcm9wYWdhdGlvbl06IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBbU3ltYm9sRGlzcG9zZV0oKSB7XG4gICAgICAgICAgdmFyIF9yZW1vdmVFdmVudExpc3RlbmVyXG4gICAgICAgICAgOyhfcmVtb3ZlRXZlbnRMaXN0ZW5lciA9IHJlbW92ZUV2ZW50TGlzdGVuZXIpID09PSBudWxsIHx8IF9yZW1vdmVFdmVudExpc3RlbmVyID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IF9yZW1vdmVFdmVudExpc3RlbmVyKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIEFib3J0U2lnbmFsQW55OlxuICAgIEFib3J0U2lnbmFsLmFueSB8fFxuICAgIGZ1bmN0aW9uIEFib3J0U2lnbmFsQW55KHNpZ25hbHMpIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzaWduYWwuXG4gICAgICBpZiAoc2lnbmFscy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHNpZ25hbHNbMF1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgICBjb25zdCBhYm9ydCA9ICgpID0+IGFjLmFib3J0KClcbiAgICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCAnc2lnbmFscycpXG4gICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0LCB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIGFjLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnYWJvcnQnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uY2U6IHRydWVcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgcmV0dXJuIGFjLnNpZ25hbFxuICAgIH1cbn1cbm1vZHVsZS5leHBvcnRzLnByb21pc2lmeS5jdXN0b20gPSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5wcm9taXNpZnkuY3VzdG9tJylcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZm9ybWF0LCBpbnNwZWN0LCBBZ2dyZWdhdGVFcnJvcjogQ3VzdG9tQWdncmVnYXRlRXJyb3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8qXG4gIFRoaXMgZmlsZSBpcyBhIHJlZHVjZWQgYW5kIGFkYXB0ZWQgdmVyc2lvbiBvZiB0aGUgbWFpbiBsaWIvaW50ZXJuYWwvZXJyb3JzLmpzIGZpbGUgZGVmaW5lZCBhdFxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvZXJyb3JzLmpzXG5cbiAgRG9uJ3QgdHJ5IHRvIHJlcGxhY2Ugd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSBhbmQga2VlcCBpdCB1cCB0byBkYXRlIChzdGFydGluZyBmcm9tIEUoLi4uKSBkZWZpbml0aW9ucylcbiAgd2l0aCB0aGUgdXBzdHJlYW0gZmlsZS5cbiovXG5cbmNvbnN0IEFnZ3JlZ2F0ZUVycm9yID0gZ2xvYmFsVGhpcy5BZ2dyZWdhdGVFcnJvciB8fCBDdXN0b21BZ2dyZWdhdGVFcnJvclxuY29uc3Qga0lzTm9kZUVycm9yID0gU3ltYm9sKCdrSXNOb2RlRXJyb3InKVxuY29uc3Qga1R5cGVzID0gW1xuICAnc3RyaW5nJyxcbiAgJ2Z1bmN0aW9uJyxcbiAgJ251bWJlcicsXG4gICdvYmplY3QnLFxuICAvLyBBY2NlcHQgJ0Z1bmN0aW9uJyBhbmQgJ09iamVjdCcgYXMgYWx0ZXJuYXRpdmUgdG8gdGhlIGxvd2VyIGNhc2VkIHZlcnNpb24uXG4gICdGdW5jdGlvbicsXG4gICdPYmplY3QnLFxuICAnYm9vbGVhbicsXG4gICdiaWdpbnQnLFxuICAnc3ltYm9sJ1xuXVxuY29uc3QgY2xhc3NSZWdFeHAgPSAvXihbQS1aXVthLXowLTldKikrJC9cbmNvbnN0IG5vZGVJbnRlcm5hbFByZWZpeCA9ICdfX25vZGVfaW50ZXJuYWxfJ1xuY29uc3QgY29kZXMgPSB7fVxuZnVuY3Rpb24gYXNzZXJ0KHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVEVSTkFMX0FTU0VSVElPTihtZXNzYWdlKVxuICB9XG59XG5cbi8vIE9ubHkgdXNlIHRoaXMgZm9yIGludGVnZXJzISBEZWNpbWFsIG51bWJlcnMgZG8gbm90IHdvcmsgd2l0aCB0aGlzIGZ1bmN0aW9uLlxuZnVuY3Rpb24gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHZhbCkge1xuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSB2YWwubGVuZ3RoXG4gIGNvbnN0IHN0YXJ0ID0gdmFsWzBdID09PSAnLScgPyAxIDogMFxuICBmb3IgKDsgaSA+PSBzdGFydCArIDQ7IGkgLT0gMykge1xuICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWBcbiAgfVxuICByZXR1cm4gYCR7dmFsLnNsaWNlKDAsIGkpfSR7cmVzfWBcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2Uoa2V5LCBtc2csIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhc3NlcnQoXG4gICAgICBtc2cubGVuZ3RoIDw9IGFyZ3MubGVuZ3RoLFxuICAgICAgLy8gRGVmYXVsdCBvcHRpb25zIGRvIG5vdCBjb3VudC5cbiAgICAgIGBDb2RlOiAke2tleX07IFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbGVuZ3RoICgke2FyZ3MubGVuZ3RofSkgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIG9uZXMgKCR7bXNnLmxlbmd0aH0pLmBcbiAgICApXG4gICAgcmV0dXJuIG1zZyguLi5hcmdzKVxuICB9XG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gKG1zZy5tYXRjaCgvJVtkZmlqb09zXS9nKSB8fCBbXSkubGVuZ3RoXG4gIGFzc2VydChcbiAgICBleHBlY3RlZExlbmd0aCA9PT0gYXJncy5sZW5ndGgsXG4gICAgYENvZGU6ICR7a2V5fTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7YXJncy5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHtleHBlY3RlZExlbmd0aH0pLmBcbiAgKVxuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbXNnXG4gIH1cbiAgcmV0dXJuIGZvcm1hdChtc2csIC4uLmFyZ3MpXG59XG5mdW5jdGlvbiBFKGNvZGUsIG1lc3NhZ2UsIEJhc2UpIHtcbiAgaWYgKCFCYXNlKSB7XG4gICAgQmFzZSA9IEVycm9yXG4gIH1cbiAgY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgQmFzZSB7XG4gICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgc3VwZXIoZ2V0TWVzc2FnZShjb2RlLCBtZXNzYWdlLCBhcmdzKSlcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHtjb2RlfV06ICR7dGhpcy5tZXNzYWdlfWBcbiAgICB9XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9kZUVycm9yLnByb3RvdHlwZSwge1xuICAgIG5hbWU6IHtcbiAgICAgIHZhbHVlOiBCYXNlLm5hbWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB0b1N0cmluZzoge1xuICAgICAgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske2NvZGV9XTogJHt0aGlzLm1lc3NhZ2V9YFxuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pXG4gIE5vZGVFcnJvci5wcm90b3R5cGUuY29kZSA9IGNvZGVcbiAgTm9kZUVycm9yLnByb3RvdHlwZVtrSXNOb2RlRXJyb3JdID0gdHJ1ZVxuICBjb2Rlc1tjb2RlXSA9IE5vZGVFcnJvclxufVxuZnVuY3Rpb24gaGlkZVN0YWNrRnJhbWVzKGZuKSB7XG4gIC8vIFdlIHJlbmFtZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBoaWRkZW4gdG8gY3V0IG9mZiB0aGUgc3RhY2t0cmFjZVxuICAvLyBhdCB0aGUgb3V0ZXJtb3N0IG9uZVxuICBjb25zdCBoaWRkZW4gPSBub2RlSW50ZXJuYWxQcmVmaXggKyBmbi5uYW1lXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7XG4gICAgdmFsdWU6IGhpZGRlblxuICB9KVxuICByZXR1cm4gZm5cbn1cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZVR3b0Vycm9ycyhpbm5lckVycm9yLCBvdXRlckVycm9yKSB7XG4gIGlmIChpbm5lckVycm9yICYmIG91dGVyRXJyb3IgJiYgaW5uZXJFcnJvciAhPT0gb3V0ZXJFcnJvcikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG91dGVyRXJyb3IuZXJyb3JzKSkge1xuICAgICAgLy8gSWYgYG91dGVyRXJyb3JgIGlzIGFscmVhZHkgYW4gYEFnZ3JlZ2F0ZUVycm9yYC5cbiAgICAgIG91dGVyRXJyb3IuZXJyb3JzLnB1c2goaW5uZXJFcnJvcilcbiAgICAgIHJldHVybiBvdXRlckVycm9yXG4gICAgfVxuICAgIGNvbnN0IGVyciA9IG5ldyBBZ2dyZWdhdGVFcnJvcihbb3V0ZXJFcnJvciwgaW5uZXJFcnJvcl0sIG91dGVyRXJyb3IubWVzc2FnZSlcbiAgICBlcnIuY29kZSA9IG91dGVyRXJyb3IuY29kZVxuICAgIHJldHVybiBlcnJcbiAgfVxuICByZXR1cm4gaW5uZXJFcnJvciB8fCBvdXRlckVycm9yXG59XG5jbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSgnb3B0aW9ucycsICdPYmplY3QnLCBvcHRpb25zKVxuICAgIH1cbiAgICBzdXBlcihtZXNzYWdlLCBvcHRpb25zKVxuICAgIHRoaXMuY29kZSA9ICdBQk9SVF9FUlInXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gIH1cbn1cbkUoJ0VSUl9BU1NFUlRJT04nLCAnJXMnLCBFcnJvcilcbkUoXG4gICdFUlJfSU5WQUxJRF9BUkdfVFlQRScsXG4gIChuYW1lLCBleHBlY3RlZCwgYWN0dWFsKSA9PiB7XG4gICAgYXNzZXJ0KHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJywgXCInbmFtZScgbXVzdCBiZSBhIHN0cmluZ1wiKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICAgIGV4cGVjdGVkID0gW2V4cGVjdGVkXVxuICAgIH1cbiAgICBsZXQgbXNnID0gJ1RoZSAnXG4gICAgaWYgKG5hbWUuZW5kc1dpdGgoJyBhcmd1bWVudCcpKSB7XG4gICAgICAvLyBGb3IgY2FzZXMgbGlrZSAnZmlyc3QgYXJndW1lbnQnXG4gICAgICBtc2cgKz0gYCR7bmFtZX0gYFxuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgKz0gYFwiJHtuYW1lfVwiICR7bmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCd9IGBcbiAgICB9XG4gICAgbXNnICs9ICdtdXN0IGJlICdcbiAgICBjb25zdCB0eXBlcyA9IFtdXG4gICAgY29uc3QgaW5zdGFuY2VzID0gW11cbiAgICBjb25zdCBvdGhlciA9IFtdXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBleHBlY3RlZCkge1xuICAgICAgYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycsICdBbGwgZXhwZWN0ZWQgZW50cmllcyBoYXZlIHRvIGJlIG9mIHR5cGUgc3RyaW5nJylcbiAgICAgIGlmIChrVHlwZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIHR5cGVzLnB1c2godmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIH0gZWxzZSBpZiAoY2xhc3NSZWdFeHAudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgaW5zdGFuY2VzLnB1c2godmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQodmFsdWUgIT09ICdvYmplY3QnLCAnVGhlIHZhbHVlIFwib2JqZWN0XCIgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgXCJPYmplY3RcIicpXG4gICAgICAgIG90aGVyLnB1c2godmFsdWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBoYW5kbGUgYG9iamVjdGAgaW4gY2FzZSBvdGhlciBpbnN0YW5jZXMgYXJlIGFsbG93ZWQgdG8gb3V0bGluZVxuICAgIC8vIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGVhY2ggb3RoZXIuXG4gICAgaWYgKGluc3RhbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwb3MgPSB0eXBlcy5pbmRleE9mKCdvYmplY3QnKVxuICAgICAgaWYgKHBvcyAhPT0gLTEpIHtcbiAgICAgICAgdHlwZXMuc3BsaWNlKHR5cGVzLCBwb3MsIDEpXG4gICAgICAgIGluc3RhbmNlcy5wdXNoKCdPYmplY3QnKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3dpdGNoICh0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1zZyArPSBgb2YgdHlwZSAke3R5cGVzWzBdfWBcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbXNnICs9IGBvbmUgb2YgdHlwZSAke3R5cGVzWzBdfSBvciAke3R5cGVzWzFdfWBcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgbGFzdCA9IHR5cGVzLnBvcCgpXG4gICAgICAgICAgbXNnICs9IGBvbmUgb2YgdHlwZSAke3R5cGVzLmpvaW4oJywgJyl9LCBvciAke2xhc3R9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDAgfHwgb3RoZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBtc2cgKz0gJyBvciAnXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3dpdGNoIChpbnN0YW5jZXMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtc2cgKz0gYGFuIGluc3RhbmNlIG9mICR7aW5zdGFuY2VzWzBdfWBcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbXNnICs9IGBhbiBpbnN0YW5jZSBvZiAke2luc3RhbmNlc1swXX0gb3IgJHtpbnN0YW5jZXNbMV19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gaW5zdGFuY2VzLnBvcCgpXG4gICAgICAgICAgbXNnICs9IGBhbiBpbnN0YW5jZSBvZiAke2luc3RhbmNlcy5qb2luKCcsICcpfSwgb3IgJHtsYXN0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG90aGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbXNnICs9ICcgb3IgJ1xuICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKG90aGVyLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAxOlxuICAgICAgICBpZiAob3RoZXJbMF0udG9Mb3dlckNhc2UoKSAhPT0gb3RoZXJbMF0pIHtcbiAgICAgICAgICBtc2cgKz0gJ2FuICdcbiAgICAgICAgfVxuICAgICAgICBtc2cgKz0gYCR7b3RoZXJbMF19YFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICBtc2cgKz0gYG9uZSBvZiAke290aGVyWzBdfSBvciAke290aGVyWzFdfWBcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgbGFzdCA9IG90aGVyLnBvcCgpXG4gICAgICAgIG1zZyArPSBgb25lIG9mICR7b3RoZXIuam9pbignLCAnKX0sIG9yICR7bGFzdH1gXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3R1YWwgPT0gbnVsbCkge1xuICAgICAgbXNnICs9IGAuIFJlY2VpdmVkICR7YWN0dWFsfWBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY3R1YWwgPT09ICdmdW5jdGlvbicgJiYgYWN0dWFsLm5hbWUpIHtcbiAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCBmdW5jdGlvbiAke2FjdHVhbC5uYW1lfWBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY3R1YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgX2FjdHVhbCRjb25zdHJ1Y3RvclxuICAgICAgaWYgKFxuICAgICAgICAoX2FjdHVhbCRjb25zdHJ1Y3RvciA9IGFjdHVhbC5jb25zdHJ1Y3RvcikgIT09IG51bGwgJiZcbiAgICAgICAgX2FjdHVhbCRjb25zdHJ1Y3RvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9hY3R1YWwkY29uc3RydWN0b3IubmFtZVxuICAgICAgKSB7XG4gICAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2FjdHVhbC5jb25zdHJ1Y3Rvci5uYW1lfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RlZCA9IGluc3BlY3QoYWN0dWFsLCB7XG4gICAgICAgICAgZGVwdGg6IC0xXG4gICAgICAgIH0pXG4gICAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCAke2luc3BlY3RlZH1gXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpbnNwZWN0ZWQgPSBpbnNwZWN0KGFjdHVhbCwge1xuICAgICAgICBjb2xvcnM6IGZhbHNlXG4gICAgICB9KVxuICAgICAgaWYgKGluc3BlY3RlZC5sZW5ndGggPiAyNSkge1xuICAgICAgICBpbnNwZWN0ZWQgPSBgJHtpbnNwZWN0ZWQuc2xpY2UoMCwgMjUpfS4uLmBcbiAgICAgIH1cbiAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH0gKCR7aW5zcGVjdGVkfSlgXG4gICAgfVxuICAgIHJldHVybiBtc2dcbiAgfSxcbiAgVHlwZUVycm9yXG4pXG5FKFxuICAnRVJSX0lOVkFMSURfQVJHX1ZBTFVFJyxcbiAgKG5hbWUsIHZhbHVlLCByZWFzb24gPSAnaXMgaW52YWxpZCcpID0+IHtcbiAgICBsZXQgaW5zcGVjdGVkID0gaW5zcGVjdCh2YWx1ZSlcbiAgICBpZiAoaW5zcGVjdGVkLmxlbmd0aCA+IDEyOCkge1xuICAgICAgaW5zcGVjdGVkID0gaW5zcGVjdGVkLnNsaWNlKDAsIDEyOCkgKyAnLi4uJ1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gbmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCdcbiAgICByZXR1cm4gYFRoZSAke3R5cGV9ICcke25hbWV9JyAke3JlYXNvbn0uIFJlY2VpdmVkICR7aW5zcGVjdGVkfWBcbiAgfSxcbiAgVHlwZUVycm9yXG4pXG5FKFxuICAnRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFJyxcbiAgKGlucHV0LCBuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIHZhciBfdmFsdWUkY29uc3RydWN0b3JcbiAgICBjb25zdCB0eXBlID1cbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX3ZhbHVlJGNvbnN0cnVjdG9yID0gdmFsdWUuY29uc3RydWN0b3IpICE9PSBudWxsICYmXG4gICAgICBfdmFsdWUkY29uc3RydWN0b3IgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgX3ZhbHVlJGNvbnN0cnVjdG9yLm5hbWVcbiAgICAgICAgPyBgaW5zdGFuY2Ugb2YgJHt2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lfWBcbiAgICAgICAgOiBgdHlwZSAke3R5cGVvZiB2YWx1ZX1gXG4gICAgcmV0dXJuIGBFeHBlY3RlZCAke2lucHV0fSB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSBcIiR7bmFtZX1cImAgKyBgIGZ1bmN0aW9uIGJ1dCBnb3QgJHt0eXBlfS5gXG4gIH0sXG4gIFR5cGVFcnJvclxuKVxuRShcbiAgJ0VSUl9NSVNTSU5HX0FSR1MnLFxuICAoLi4uYXJncykgPT4ge1xuICAgIGFzc2VydChhcmdzLmxlbmd0aCA+IDAsICdBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCcpXG4gICAgbGV0IG1zZ1xuICAgIGNvbnN0IGxlbiA9IGFyZ3MubGVuZ3RoXG4gICAgYXJncyA9IChBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFthcmdzXSkubWFwKChhKSA9PiBgXCIke2F9XCJgKS5qb2luKCcgb3IgJylcbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICBtc2cgKz0gYFRoZSAke2FyZ3NbMF19IGFyZ3VtZW50YFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICBtc2cgKz0gYFRoZSAke2FyZ3NbMF19IGFuZCAke2FyZ3NbMV19IGFyZ3VtZW50c2BcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gYXJncy5wb3AoKVxuICAgICAgICAgIG1zZyArPSBgVGhlICR7YXJncy5qb2luKCcsICcpfSwgYW5kICR7bGFzdH0gYXJndW1lbnRzYFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIHJldHVybiBgJHttc2d9IG11c3QgYmUgc3BlY2lmaWVkYFxuICB9LFxuICBUeXBlRXJyb3JcbilcbkUoXG4gICdFUlJfT1VUX09GX1JBTkdFJyxcbiAgKHN0ciwgcmFuZ2UsIGlucHV0KSA9PiB7XG4gICAgYXNzZXJ0KHJhbmdlLCAnTWlzc2luZyBcInJhbmdlXCIgYXJndW1lbnQnKVxuICAgIGxldCByZWNlaXZlZFxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGlucHV0KSAmJiBNYXRoLmFicyhpbnB1dCkgPiAyICoqIDMyKSB7XG4gICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihTdHJpbmcoaW5wdXQpKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnYmlnaW50Jykge1xuICAgICAgcmVjZWl2ZWQgPSBTdHJpbmcoaW5wdXQpXG4gICAgICBpZiAoaW5wdXQgPiAybiAqKiAzMm4gfHwgaW5wdXQgPCAtKDJuICoqIDMybikpIHtcbiAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IocmVjZWl2ZWQpXG4gICAgICB9XG4gICAgICByZWNlaXZlZCArPSAnbidcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjZWl2ZWQgPSBpbnNwZWN0KGlucHV0KVxuICAgIH1cbiAgICByZXR1cm4gYFRoZSB2YWx1ZSBvZiBcIiR7c3RyfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gXG4gIH0sXG4gIFJhbmdlRXJyb3JcbilcbkUoJ0VSUl9NVUxUSVBMRV9DQUxMQkFDSycsICdDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMnLCBFcnJvcilcbkUoJ0VSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEJywgJ1RoZSAlcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkJywgRXJyb3IpXG5FKCdFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRUQnLCAnQ2Fubm90IGNhbGwgJXMgYWZ0ZXIgYSBzdHJlYW0gd2FzIGZpbmlzaGVkJywgRXJyb3IpXG5FKCdFUlJfU1RSRUFNX0NBTk5PVF9QSVBFJywgJ0Nhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fREVTVFJPWUVEJywgJ0Nhbm5vdCBjYWxsICVzIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fTlVMTF9WQUxVRVMnLCAnTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0nLCBUeXBlRXJyb3IpXG5FKCdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRScsICdQcmVtYXR1cmUgY2xvc2UnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YnLCAnc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQnLCAnc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EJywgJ3dyaXRlIGFmdGVyIGVuZCcsIEVycm9yKVxuRSgnRVJSX1VOS05PV05fRU5DT0RJTkcnLCAnVW5rbm93biBlbmNvZGluZzogJXMnLCBUeXBlRXJyb3IpXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQWJvcnRFcnJvcixcbiAgYWdncmVnYXRlVHdvRXJyb3JzOiBoaWRlU3RhY2tGcmFtZXMoYWdncmVnYXRlVHdvRXJyb3JzKSxcbiAgaGlkZVN0YWNrRnJhbWVzLFxuICBjb2Rlc1xufVxuIiwKICAgICIvKiBlc2xpbnQganNkb2MvcmVxdWlyZS1qc2RvYzogXCJlcnJvclwiICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEFycmF5SXNBcnJheSxcbiAgQXJyYXlQcm90b3R5cGVJbmNsdWRlcyxcbiAgQXJyYXlQcm90b3R5cGVKb2luLFxuICBBcnJheVByb3RvdHlwZU1hcCxcbiAgTnVtYmVySXNJbnRlZ2VyLFxuICBOdW1iZXJJc05hTixcbiAgTnVtYmVyTUFYX1NBRkVfSU5URUdFUixcbiAgTnVtYmVyTUlOX1NBRkVfSU5URUdFUixcbiAgTnVtYmVyUGFyc2VJbnQsXG4gIE9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5LFxuICBSZWdFeHBQcm90b3R5cGVFeGVjLFxuICBTdHJpbmcsXG4gIFN0cmluZ1Byb3RvdHlwZVRvVXBwZXJDYXNlLFxuICBTdHJpbmdQcm90b3R5cGVUcmltXG59ID0gcmVxdWlyZSgnLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7XG4gIGhpZGVTdGFja0ZyYW1lcyxcbiAgY29kZXM6IHsgRVJSX1NPQ0tFVF9CQURfUE9SVCwgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9JTlZBTElEX0FSR19WQUxVRSwgRVJSX09VVF9PRl9SQU5HRSwgRVJSX1VOS05PV05fU0lHTkFMIH1cbn0gPSByZXF1aXJlKCcuLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IG5vcm1hbGl6ZUVuY29kaW5nIH0gPSByZXF1aXJlKCcuLi9vdXJzL3V0aWwnKVxuY29uc3QgeyBpc0FzeW5jRnVuY3Rpb24sIGlzQXJyYXlCdWZmZXJWaWV3IH0gPSByZXF1aXJlKCcuLi9vdXJzL3V0aWwnKS50eXBlc1xuY29uc3Qgc2lnbmFscyA9IHt9XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzSW50MzIodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSAodmFsdWUgfCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1VpbnQzMih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID4+PiAwXG59XG5jb25zdCBvY3RhbFJlZyA9IC9eWzAtN10rJC9cbmNvbnN0IG1vZGVEZXNjID0gJ211c3QgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBvciBhbiBvY3RhbCBzdHJpbmcnXG5cbi8qKlxuICogUGFyc2UgYW5kIHZhbGlkYXRlIHZhbHVlcyB0aGF0IHdpbGwgYmUgY29udmVydGVkIGludG8gbW9kZV90ICh0aGUgU18qXG4gKiBjb25zdGFudHMpLiBPbmx5IHZhbGlkIG51bWJlcnMgYW5kIG9jdGFsIHN0cmluZ3MgYXJlIGFsbG93ZWQuIFRoZXkgY291bGQgYmVcbiAqIGNvbnZlcnRlZCB0byAzMi1iaXQgdW5zaWduZWQgaW50ZWdlcnMgb3Igbm9uLW5lZ2F0aXZlIHNpZ25lZCBpbnRlZ2VycyBpbiB0aGVcbiAqIEMrKyBsYW5kLCBidXQgYW55IHZhbHVlIGhpZ2hlciB0aGFuIDBvNzc3IHdpbGwgcmVzdWx0IGluIHBsYXRmb3JtLXNwZWNpZmljXG4gKiBiZWhhdmlvcnMuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlcyB0byBiZSB2YWxpZGF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGFyZ3VtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gW2RlZl0gSWYgc3BlY2lmaWVkLCB3aWxsIGJlIHJldHVybmVkIGZvciBpbnZhbGlkIHZhbHVlc1xuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VGaWxlTW9kZSh2YWx1ZSwgbmFtZSwgZGVmKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFsdWUgPSBkZWZcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChSZWdFeHBQcm90b3R5cGVFeGVjKG9jdGFsUmVnLCB2YWx1ZSkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgdmFsdWUsIG1vZGVEZXNjKVxuICAgIH1cbiAgICB2YWx1ZSA9IE51bWJlclBhcnNlSW50KHZhbHVlLCA4KVxuICB9XG4gIHZhbGlkYXRlVWludDMyKHZhbHVlLCBuYW1lKVxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVJbnRlZ2VyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlSW50ZWdlcn0gKi9cbmNvbnN0IHZhbGlkYXRlSW50ZWdlciA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG1pbiA9IE51bWJlck1JTl9TQUZFX0lOVEVHRVIsIG1heCA9IE51bWJlck1BWF9TQUZFX0lOVEVHRVIpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIGlmICghTnVtYmVySXNJbnRlZ2VyKHZhbHVlKSkgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJ2FuIGludGVnZXInLCB2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVJbnQzMlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWluXVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhdXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBudW1iZXJ9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUludDMyfSAqL1xuY29uc3QgdmFsaWRhdGVJbnQzMiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG1pbiA9IC0yMTQ3NDgzNjQ4LCBtYXggPSAyMTQ3NDgzNjQ3KSA9PiB7XG4gIC8vIFRoZSBkZWZhdWx0cyBmb3IgbWluIGFuZCBtYXggY29ycmVzcG9uZCB0byB0aGUgbGltaXRzIG9mIDMyLWJpdCBpbnRlZ2Vycy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ251bWJlcicsIHZhbHVlKVxuICB9XG4gIGlmICghTnVtYmVySXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsICdhbiBpbnRlZ2VyJywgdmFsdWUpXG4gIH1cbiAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgYD49ICR7bWlufSAmJiA8PSAke21heH1gLCB2YWx1ZSlcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVVaW50MzJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcnxib29sZWFufSBbcG9zaXRpdmU9ZmFsc2VdXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBudW1iZXJ9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZVVpbnQzMn0gKi9cbmNvbnN0IHZhbGlkYXRlVWludDMyID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgcG9zaXRpdmUgPSBmYWxzZSkgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbiAgaWYgKCFOdW1iZXJJc0ludGVnZXIodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJ2FuIGludGVnZXInLCB2YWx1ZSlcbiAgfVxuICBjb25zdCBtaW4gPSBwb3NpdGl2ZSA/IDEgOiAwXG4gIC8vIDIgKiogMzIgPT09IDQyOTQ5NjcyOTZcbiAgY29uc3QgbWF4ID0gNDI5NDk2NzI5NVxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVN0cmluZ1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIHN0cmluZ31cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlU3RyaW5nfSAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnc3RyaW5nJywgdmFsdWUpXG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlTnVtYmVyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlTnVtYmVyfSAqL1xuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIodmFsdWUsIG5hbWUsIG1pbiA9IHVuZGVmaW5lZCwgbWF4KSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ251bWJlcicsIHZhbHVlKVxuICBpZiAoXG4gICAgKG1pbiAhPSBudWxsICYmIHZhbHVlIDwgbWluKSB8fFxuICAgIChtYXggIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkgfHxcbiAgICAoKG1pbiAhPSBudWxsIHx8IG1heCAhPSBudWxsKSAmJiBOdW1iZXJJc05hTih2YWx1ZSkpXG4gICkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKFxuICAgICAgbmFtZSxcbiAgICAgIGAke21pbiAhPSBudWxsID8gYD49ICR7bWlufWAgOiAnJ30ke21pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gJyAmJiAnIDogJyd9JHttYXggIT0gbnVsbCA/IGA8PSAke21heH1gIDogJyd9YCxcbiAgICAgIHZhbHVlXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlT25lT2ZcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtUW119IG9uZU9mXG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZU9uZU9mfSAqL1xuY29uc3QgdmFsaWRhdGVPbmVPZiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG9uZU9mKSA9PiB7XG4gIGlmICghQXJyYXlQcm90b3R5cGVJbmNsdWRlcyhvbmVPZiwgdmFsdWUpKSB7XG4gICAgY29uc3QgYWxsb3dlZCA9IEFycmF5UHJvdG90eXBlSm9pbihcbiAgICAgIEFycmF5UHJvdG90eXBlTWFwKG9uZU9mLCAodikgPT4gKHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGAnJHt2fSdgIDogU3RyaW5nKHYpKSksXG4gICAgICAnLCAnXG4gICAgKVxuICAgIGNvbnN0IHJlYXNvbiA9ICdtdXN0IGJlIG9uZSBvZjogJyArIGFsbG93ZWRcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIHZhbHVlLCByZWFzb24pXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQm9vbGVhblxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIGJvb2xlYW59XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUJvb2xlYW59ICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW4odmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ2Jvb2xlYW4nLCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtib29sZWFufSBkZWZhdWx0VmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiBvcHRpb25zID09IG51bGwgfHwgIU9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5KG9wdGlvbnMsIGtleSkgPyBkZWZhdWx0VmFsdWUgOiBvcHRpb25zW2tleV1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVPYmplY3RcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3tcbiAqICAgYWxsb3dBcnJheT86IGJvb2xlYW4sXG4gKiAgIGFsbG93RnVuY3Rpb24/OiBib29sZWFuLFxuICogICBudWxsYWJsZT86IGJvb2xlYW5cbiAqIH19IFtvcHRpb25zXVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVPYmplY3R9ICovXG5jb25zdCB2YWxpZGF0ZU9iamVjdCA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG9wdGlvbnMgPSBudWxsKSA9PiB7XG4gIGNvbnN0IGFsbG93QXJyYXkgPSBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsICdhbGxvd0FycmF5JywgZmFsc2UpXG4gIGNvbnN0IGFsbG93RnVuY3Rpb24gPSBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsICdhbGxvd0Z1bmN0aW9uJywgZmFsc2UpXG4gIGNvbnN0IG51bGxhYmxlID0gZ2V0T3duUHJvcGVydHlWYWx1ZU9yRGVmYXVsdChvcHRpb25zLCAnbnVsbGFibGUnLCBmYWxzZSlcbiAgaWYgKFxuICAgICghbnVsbGFibGUgJiYgdmFsdWUgPT09IG51bGwpIHx8XG4gICAgKCFhbGxvd0FycmF5ICYmIEFycmF5SXNBcnJheSh2YWx1ZSkpIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgJiYgKCFhbGxvd0Z1bmN0aW9uIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykpXG4gICkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnT2JqZWN0JywgdmFsdWUpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlRGljdGlvbmFyeSAtIFdlIGFyZSB1c2luZyB0aGUgV2ViIElETCBTdGFuZGFyZCBkZWZpbml0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgXCJkaWN0aW9uYXJ5XCIgaGVyZSwgd2hpY2ggbWVhbnMgYW55IHZhbHVlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hvc2UgVHlwZSBpcyBlaXRoZXIgVW5kZWZpbmVkLCBOdWxsLCBvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAod2hpY2ggaW5jbHVkZXMgZnVuY3Rpb25zKS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtZGljdGlvbmFyeVxuICogQHNlZSBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jdGFibGUtdHlwZW9mLW9wZXJhdG9yLXJlc3VsdHNcbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlRGljdGlvbmFyeX0gKi9cbmNvbnN0IHZhbGlkYXRlRGljdGlvbmFyeSA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ2EgZGljdGlvbmFyeScsIHZhbHVlKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUFycmF5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5MZW5ndGhdXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBhbnlbXX1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQXJyYXl9ICovXG5jb25zdCB2YWxpZGF0ZUFycmF5ID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgbWluTGVuZ3RoID0gMCkgPT4ge1xuICBpZiAoIUFycmF5SXNBcnJheSh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0FycmF5JywgdmFsdWUpXG4gIH1cbiAgaWYgKHZhbHVlLmxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgIGNvbnN0IHJlYXNvbiA9IGBtdXN0IGJlIGxvbmdlciB0aGFuICR7bWluTGVuZ3RofWBcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIHZhbHVlLCByZWFzb24pXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlU3RyaW5nQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBzdHJpbmdbXX1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlU3RyaW5nQXJyYXl9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZ0FycmF5KHZhbHVlLCBuYW1lKSB7XG4gIHZhbGlkYXRlQXJyYXkodmFsdWUsIG5hbWUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YWxpZGF0ZVN0cmluZyh2YWx1ZVtpXSwgYCR7bmFtZX1bJHtpfV1gKVxuICB9XG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQm9vbGVhbkFycmF5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgYm9vbGVhbltdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVCb29sZWFuQXJyYXl9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW5BcnJheSh2YWx1ZSwgbmFtZSkge1xuICB2YWxpZGF0ZUFycmF5KHZhbHVlLCBuYW1lKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVCb29sZWFuKHZhbHVlW2ldLCBgJHtuYW1lfVske2l9XWApXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgQWJvcnRTaWduYWxbXX1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQWJvcnRTaWduYWxBcnJheX0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQWJvcnRTaWduYWxBcnJheSh2YWx1ZSwgbmFtZSkge1xuICB2YWxpZGF0ZUFycmF5KHZhbHVlLCBuYW1lKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gdmFsdWVbaV1cbiAgICBjb25zdCBpbmRleGVkTmFtZSA9IGAke25hbWV9WyR7aX1dYFxuICAgIGlmIChzaWduYWwgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKGluZGV4ZWROYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gICAgfVxuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCBpbmRleGVkTmFtZSlcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gc2lnbmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J3NpZ25hbCddXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBzaWduYWwgaXMga2V5b2Ygc2lnbmFsc31cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTaWduYWxOYW1lKHNpZ25hbCwgbmFtZSA9ICdzaWduYWwnKSB7XG4gIHZhbGlkYXRlU3RyaW5nKHNpZ25hbCwgbmFtZSlcbiAgaWYgKHNpZ25hbHNbc2lnbmFsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHNpZ25hbHNbU3RyaW5nUHJvdG90eXBlVG9VcHBlckNhc2Uoc2lnbmFsKV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9VTktOT1dOX1NJR05BTChzaWduYWwgKyAnIChzaWduYWxzIG11c3QgdXNlIGFsbCBjYXBpdGFsIGxldHRlcnMpJylcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVSUl9VTktOT1dOX1NJR05BTChzaWduYWwpXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVCdWZmZXJcbiAqIEBwYXJhbSB7Kn0gYnVmZmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J2J1ZmZlciddXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBidWZmZXIgaXMgQXJyYXlCdWZmZXJWaWV3fVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVCdWZmZXJ9ICovXG5jb25zdCB2YWxpZGF0ZUJ1ZmZlciA9IGhpZGVTdGFja0ZyYW1lcygoYnVmZmVyLCBuYW1lID0gJ2J1ZmZlcicpID0+IHtcbiAgaWYgKCFpc0FycmF5QnVmZmVyVmlldyhidWZmZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsIFsnQnVmZmVyJywgJ1R5cGVkQXJyYXknLCAnRGF0YVZpZXcnXSwgYnVmZmVyKVxuICB9XG59KVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RpbmdcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFbmNvZGluZyhkYXRhLCBlbmNvZGluZykge1xuICBjb25zdCBub3JtYWxpemVkRW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZylcbiAgY29uc3QgbGVuZ3RoID0gZGF0YS5sZW5ndGhcbiAgaWYgKG5vcm1hbGl6ZWRFbmNvZGluZyA9PT0gJ2hleCcgJiYgbGVuZ3RoICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoJ2VuY29kaW5nJywgZW5jb2RpbmcsIGBpcyBpbnZhbGlkIGZvciBkYXRhIG9mIGxlbmd0aCAke2xlbmd0aH1gKVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgdGhhdCB0aGUgcG9ydCBudW1iZXIgaXMgbm90IE5hTiB3aGVuIGNvZXJjZWQgdG8gYSBudW1iZXIsXG4gKiBpcyBhbiBpbnRlZ2VyIGFuZCB0aGF0IGl0IGZhbGxzIHdpdGhpbiB0aGUgbGVnYWwgcmFuZ2Ugb2YgcG9ydCBudW1iZXJzLlxuICogQHBhcmFtIHsqfSBwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J1BvcnQnXVxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3daZXJvPXRydWVdXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBvcnQocG9ydCwgbmFtZSA9ICdQb3J0JywgYWxsb3daZXJvID0gdHJ1ZSkge1xuICBpZiAoXG4gICAgKHR5cGVvZiBwb3J0ICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgcG9ydCAhPT0gJ3N0cmluZycpIHx8XG4gICAgKHR5cGVvZiBwb3J0ID09PSAnc3RyaW5nJyAmJiBTdHJpbmdQcm90b3R5cGVUcmltKHBvcnQpLmxlbmd0aCA9PT0gMCkgfHxcbiAgICArcG9ydCAhPT0gK3BvcnQgPj4+IDAgfHxcbiAgICBwb3J0ID4gMHhmZmZmIHx8XG4gICAgKHBvcnQgPT09IDAgJiYgIWFsbG93WmVybylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9TT0NLRVRfQkFEX1BPUlQobmFtZSwgcG9ydCwgYWxsb3daZXJvKVxuICB9XG4gIHJldHVybiBwb3J0IHwgMFxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUFib3J0U2lnbmFsXG4gKiBAcGFyYW0geyp9IHNpZ25hbFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQWJvcnRTaWduYWx9ICovXG5jb25zdCB2YWxpZGF0ZUFib3J0U2lnbmFsID0gaGlkZVN0YWNrRnJhbWVzKChzaWduYWwsIG5hbWUpID0+IHtcbiAgaWYgKHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIChzaWduYWwgPT09IG51bGwgfHwgdHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Fib3J0U2lnbmFsJywgc2lnbmFsKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgRnVuY3Rpb259XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUZ1bmN0aW9ufSAqL1xuY29uc3QgdmFsaWRhdGVGdW5jdGlvbiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdGdW5jdGlvbicsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVQbGFpbkZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgRnVuY3Rpb259XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZVBsYWluRnVuY3Rpb259ICovXG5jb25zdCB2YWxpZGF0ZVBsYWluRnVuY3Rpb24gPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgfHwgaXNBc3luY0Z1bmN0aW9uKHZhbHVlKSkgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdGdW5jdGlvbicsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVVbmRlZmluZWRcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyB1bmRlZmluZWR9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZVVuZGVmaW5lZH0gKi9cbmNvbnN0IHZhbGlkYXRlVW5kZWZpbmVkID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICd1bmRlZmluZWQnLCB2YWx1ZSlcbn0pXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1RbXX0gdW5pb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVVbmlvbih2YWx1ZSwgbmFtZSwgdW5pb24pIHtcbiAgaWYgKCFBcnJheVByb3RvdHlwZUluY2x1ZGVzKHVuaW9uLCB2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgYCgnJHtBcnJheVByb3RvdHlwZUpvaW4odW5pb24sICd8Jyl9JylgLCB2YWx1ZSlcbiAgfVxufVxuXG4vKlxuICBUaGUgcnVsZXMgZm9yIHRoZSBMaW5rIGhlYWRlciBmaWVsZCBhcmUgZGVzY3JpYmVkIGhlcmU6XG4gIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM4Mjg4Lmh0bWwjc2VjdGlvbi0zXG5cbiAgVGhpcyByZWdleCB2YWxpZGF0ZXMgYW55IHN0cmluZyBzdXJyb3VuZGVkIGJ5IGFuZ2xlIGJyYWNrZXRzXG4gIChub3QgbmVjZXNzYXJpbHkgYSB2YWxpZCBVUkkgcmVmZXJlbmNlKSBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmVcbiAgbGluay1wYXJhbXMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMuXG4qL1xuY29uc3QgbGlua1ZhbHVlUmVnRXhwID0gL14oPzo8W14+XSo+KSg/Olxccyo7XFxzKlteO1wiXFxzXSsoPzo9KFwiKT9bXjtcIlxcc10qXFwxKT8pKiQvXG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUxpbmtIZWFkZXJGb3JtYXQodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIVJlZ0V4cFByb3RvdHlwZUV4ZWMobGlua1ZhbHVlUmVnRXhwLCB2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgJ211c3QgYmUgYW4gYXJyYXkgb3Igc3RyaW5nIG9mIGZvcm1hdCBcIjwvc3R5bGVzLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZVwiJ1xuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBoaW50c1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUxpbmtIZWFkZXJWYWx1ZShoaW50cykge1xuICBpZiAodHlwZW9mIGhpbnRzID09PSAnc3RyaW5nJykge1xuICAgIHZhbGlkYXRlTGlua0hlYWRlckZvcm1hdChoaW50cywgJ2hpbnRzJylcbiAgICByZXR1cm4gaGludHNcbiAgfSBlbHNlIGlmIChBcnJheUlzQXJyYXkoaGludHMpKSB7XG4gICAgY29uc3QgaGludHNMZW5ndGggPSBoaW50cy5sZW5ndGhcbiAgICBsZXQgcmVzdWx0ID0gJydcbiAgICBpZiAoaGludHNMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoaW50c0xlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5rID0gaGludHNbaV1cbiAgICAgIHZhbGlkYXRlTGlua0hlYWRlckZvcm1hdChsaW5rLCAnaGludHMnKVxuICAgICAgcmVzdWx0ICs9IGxpbmtcbiAgICAgIGlmIChpICE9PSBoaW50c0xlbmd0aCAtIDEpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsICdcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG4gIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoXG4gICAgJ2hpbnRzJyxcbiAgICBoaW50cyxcbiAgICAnbXVzdCBiZSBhbiBhcnJheSBvciBzdHJpbmcgb2YgZm9ybWF0IFwiPC9zdHlsZXMuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlXCInXG4gIClcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0ludDMyLFxuICBpc1VpbnQzMixcbiAgcGFyc2VGaWxlTW9kZSxcbiAgdmFsaWRhdGVBcnJheSxcbiAgdmFsaWRhdGVTdHJpbmdBcnJheSxcbiAgdmFsaWRhdGVCb29sZWFuQXJyYXksXG4gIHZhbGlkYXRlQWJvcnRTaWduYWxBcnJheSxcbiAgdmFsaWRhdGVCb29sZWFuLFxuICB2YWxpZGF0ZUJ1ZmZlcixcbiAgdmFsaWRhdGVEaWN0aW9uYXJ5LFxuICB2YWxpZGF0ZUVuY29kaW5nLFxuICB2YWxpZGF0ZUZ1bmN0aW9uLFxuICB2YWxpZGF0ZUludDMyLFxuICB2YWxpZGF0ZUludGVnZXIsXG4gIHZhbGlkYXRlTnVtYmVyLFxuICB2YWxpZGF0ZU9iamVjdCxcbiAgdmFsaWRhdGVPbmVPZixcbiAgdmFsaWRhdGVQbGFpbkZ1bmN0aW9uLFxuICB2YWxpZGF0ZVBvcnQsXG4gIHZhbGlkYXRlU2lnbmFsTmFtZSxcbiAgdmFsaWRhdGVTdHJpbmcsXG4gIHZhbGlkYXRlVWludDMyLFxuICB2YWxpZGF0ZVVuZGVmaW5lZCxcbiAgdmFsaWRhdGVVbmlvbixcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbCxcbiAgdmFsaWRhdGVMaW5rSGVhZGVyVmFsdWVcbn1cbiIsCiAgICAiLy8gZm9yIG5vdyBqdXN0IGV4cG9zZSB0aGUgYnVpbHRpbiBwcm9jZXNzIGdsb2JhbCBmcm9tIG5vZGUuanNcbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLnByb2Nlc3M7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFN5bWJvbEFzeW5jSXRlcmF0b3IsIFN5bWJvbEl0ZXJhdG9yLCBTeW1ib2xGb3IgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuXG4vLyBXZSBuZWVkIHRvIHVzZSBTeW1ib2xGb3IgdG8gbWFrZSB0aGVzZSBnbG9iYWxseSBhdmFpbGFibGVcbi8vIGZvciBpbnRlcm9wdCB3aXRoIHJlYWRhYmxlLXN0cmVhbSwgaS5lLiByZWFkYWJsZS1zdHJlYW1cbi8vIGFuZCBub2RlIGNvcmUgbmVlZHMgdG8gYmUgYWJsZSB0byByZWFkL3dyaXRlIHByaXZhdGUgc3RhdGVcbi8vIGZyb20gZWFjaCBvdGhlciBmb3IgcHJvcGVyIGludGVyb3BlcmFiaWxpdHkuXG5jb25zdCBrSXNEZXN0cm95ZWQgPSBTeW1ib2xGb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJylcbmNvbnN0IGtJc0Vycm9yZWQgPSBTeW1ib2xGb3IoJ25vZGVqcy5zdHJlYW0uZXJyb3JlZCcpXG5jb25zdCBrSXNSZWFkYWJsZSA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5yZWFkYWJsZScpXG5jb25zdCBrSXNXcml0YWJsZSA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS53cml0YWJsZScpXG5jb25zdCBrSXNEaXN0dXJiZWQgPSBTeW1ib2xGb3IoJ25vZGVqcy5zdHJlYW0uZGlzdHVyYmVkJylcbmNvbnN0IGtJc0Nsb3NlZFByb21pc2UgPSBTeW1ib2xGb3IoJ25vZGVqcy53ZWJzdHJlYW0uaXNDbG9zZWRQcm9taXNlJylcbmNvbnN0IGtDb250cm9sbGVyRXJyb3JGdW5jdGlvbiA9IFN5bWJvbEZvcignbm9kZWpzLndlYnN0cmVhbS5jb250cm9sbGVyRXJyb3JGdW5jdGlvbicpXG5mdW5jdGlvbiBpc1JlYWRhYmxlTm9kZVN0cmVhbShvYmosIHN0cmljdCA9IGZhbHNlKSB7XG4gIHZhciBfb2JqJF9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiAhIShcbiAgICAoXG4gICAgICBvYmogJiZcbiAgICAgIHR5cGVvZiBvYmoucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKCFzdHJpY3QgfHwgKHR5cGVvZiBvYmoucGF1c2UgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5yZXN1bWUgPT09ICdmdW5jdGlvbicpKSAmJlxuICAgICAgKCFvYmouX3dyaXRhYmxlU3RhdGUgfHxcbiAgICAgICAgKChfb2JqJF9yZWFkYWJsZVN0YXRlID0gb2JqLl9yZWFkYWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfb2JqJF9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogX29iaiRfcmVhZGFibGVTdGF0ZS5yZWFkYWJsZSkgIT09IGZhbHNlKSAmJlxuICAgICAgLy8gRHVwbGV4XG4gICAgICAoIW9iai5fd3JpdGFibGVTdGF0ZSB8fCBvYmouX3JlYWRhYmxlU3RhdGUpXG4gICAgKSAvLyBXcml0YWJsZSBoYXMgLnBpcGUuXG4gIClcbn1cblxuZnVuY3Rpb24gaXNXcml0YWJsZU5vZGVTdHJlYW0ob2JqKSB7XG4gIHZhciBfb2JqJF93cml0YWJsZVN0YXRlXG4gIHJldHVybiAhIShcbiAgICAoXG4gICAgICBvYmogJiZcbiAgICAgIHR5cGVvZiBvYmoud3JpdGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICghb2JqLl9yZWFkYWJsZVN0YXRlIHx8XG4gICAgICAgICgoX29iaiRfd3JpdGFibGVTdGF0ZSA9IG9iai5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX29iaiRfd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IF9vYmokX3dyaXRhYmxlU3RhdGUud3JpdGFibGUpICE9PSBmYWxzZSlcbiAgICApIC8vIER1cGxleFxuICApXG59XG5cbmZ1bmN0aW9uIGlzRHVwbGV4Tm9kZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuICEhKFxuICAgIG9iaiAmJlxuICAgIHR5cGVvZiBvYmoucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIG9iai5fcmVhZGFibGVTdGF0ZSAmJlxuICAgIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqLndyaXRlID09PSAnZnVuY3Rpb24nXG4gIClcbn1cbmZ1bmN0aW9uIGlzTm9kZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuIChcbiAgICBvYmogJiZcbiAgICAob2JqLl9yZWFkYWJsZVN0YXRlIHx8XG4gICAgICBvYmouX3dyaXRhYmxlU3RhdGUgfHxcbiAgICAgICh0eXBlb2Ygb2JqLndyaXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicpIHx8XG4gICAgICAodHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicpKVxuICApXG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEoXG4gICAgb2JqICYmXG4gICAgIWlzTm9kZVN0cmVhbShvYmopICYmXG4gICAgdHlwZW9mIG9iai5waXBlVGhyb3VnaCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmouZ2V0UmVhZGVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iai5jYW5jZWwgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuZnVuY3Rpb24gaXNXcml0YWJsZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAmJiAhaXNOb2RlU3RyZWFtKG9iaikgJiYgdHlwZW9mIG9iai5nZXRXcml0ZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5hYm9ydCA9PT0gJ2Z1bmN0aW9uJylcbn1cbmZ1bmN0aW9uIGlzVHJhbnNmb3JtU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEob2JqICYmICFpc05vZGVTdHJlYW0ob2JqKSAmJiB0eXBlb2Ygb2JqLnJlYWRhYmxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLndyaXRhYmxlID09PSAnb2JqZWN0Jylcbn1cbmZ1bmN0aW9uIGlzV2ViU3RyZWFtKG9iaikge1xuICByZXR1cm4gaXNSZWFkYWJsZVN0cmVhbShvYmopIHx8IGlzV3JpdGFibGVTdHJlYW0ob2JqKSB8fCBpc1RyYW5zZm9ybVN0cmVhbShvYmopXG59XG5mdW5jdGlvbiBpc0l0ZXJhYmxlKG9iaiwgaXNBc3luYykge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZVxuICBpZiAoaXNBc3luYyA9PT0gdHJ1ZSkgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sQXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbidcbiAgaWYgKGlzQXN5bmMgPT09IGZhbHNlKSByZXR1cm4gdHlwZW9mIG9ialtTeW1ib2xJdGVyYXRvcl0gPT09ICdmdW5jdGlvbidcbiAgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sQXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2xJdGVyYXRvcl0gPT09ICdmdW5jdGlvbidcbn1cbmZ1bmN0aW9uIGlzRGVzdHJveWVkKHN0cmVhbSkge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbFxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHN0YXRlID0gd1N0YXRlIHx8IHJTdGF0ZVxuICByZXR1cm4gISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0lzRGVzdHJveWVkXSB8fCAoc3RhdGUgIT09IG51bGwgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5kZXN0cm95ZWQpKVxufVxuXG4vLyBIYXZlIGJlZW4gZW5kKCk6ZC5cbmZ1bmN0aW9uIGlzV3JpdGFibGVFbmRlZChzdHJlYW0pIHtcbiAgaWYgKCFpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbFxuICBpZiAoc3RyZWFtLndyaXRhYmxlRW5kZWQgPT09IHRydWUpIHJldHVybiB0cnVlXG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBpZiAod1N0YXRlICE9PSBudWxsICYmIHdTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHdTdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgaWYgKHR5cGVvZiAod1N0YXRlID09PSBudWxsIHx8IHdTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogd1N0YXRlLmVuZGVkKSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gbnVsbFxuICByZXR1cm4gd1N0YXRlLmVuZGVkXG59XG5cbi8vIEhhdmUgZW1pdHRlZCAnZmluaXNoJy5cbmZ1bmN0aW9uIGlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0sIHN0cmljdCkge1xuICBpZiAoIWlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGlmIChzdHJlYW0ud3JpdGFibGVGaW5pc2hlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmICh3U3RhdGUgIT09IG51bGwgJiYgd1N0YXRlICE9PSB1bmRlZmluZWQgJiYgd1N0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mICh3U3RhdGUgPT09IG51bGwgfHwgd1N0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB3U3RhdGUuZmluaXNoZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiAhISh3U3RhdGUuZmluaXNoZWQgfHwgKHN0cmljdCA9PT0gZmFsc2UgJiYgd1N0YXRlLmVuZGVkID09PSB0cnVlICYmIHdTdGF0ZS5sZW5ndGggPT09IDApKVxufVxuXG4vLyBIYXZlIGJlZW4gcHVzaChudWxsKTpkLlxuZnVuY3Rpb24gaXNSZWFkYWJsZUVuZGVkKHN0cmVhbSkge1xuICBpZiAoIWlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGlmIChzdHJlYW0ucmVhZGFibGVFbmRlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGlmICghclN0YXRlIHx8IHJTdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgaWYgKHR5cGVvZiAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmVuZGVkKSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gbnVsbFxuICByZXR1cm4gclN0YXRlLmVuZGVkXG59XG5cbi8vIEhhdmUgZW1pdHRlZCAnZW5kJy5cbmZ1bmN0aW9uIGlzUmVhZGFibGVGaW5pc2hlZChzdHJlYW0sIHN0cmljdCkge1xuICBpZiAoIWlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBpZiAoclN0YXRlICE9PSBudWxsICYmIHJTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHJTdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgaWYgKHR5cGVvZiAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmVuZEVtaXR0ZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiAhIShyU3RhdGUuZW5kRW1pdHRlZCB8fCAoc3RyaWN0ID09PSBmYWxzZSAmJiByU3RhdGUuZW5kZWQgPT09IHRydWUgJiYgclN0YXRlLmxlbmd0aCA9PT0gMCkpXG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlKHN0cmVhbSkge1xuICBpZiAoc3RyZWFtICYmIHN0cmVhbVtrSXNSZWFkYWJsZV0gIT0gbnVsbCkgcmV0dXJuIHN0cmVhbVtrSXNSZWFkYWJsZV1cbiAgaWYgKHR5cGVvZiAoc3RyZWFtID09PSBudWxsIHx8IHN0cmVhbSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc3RyZWFtLnJlYWRhYmxlKSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gbnVsbFxuICBpZiAoaXNEZXN0cm95ZWQoc3RyZWFtKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBpc1JlYWRhYmxlTm9kZVN0cmVhbShzdHJlYW0pICYmIHN0cmVhbS5yZWFkYWJsZSAmJiAhaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSlcbn1cbmZ1bmN0aW9uIGlzV3JpdGFibGUoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW0gJiYgc3RyZWFtW2tJc1dyaXRhYmxlXSAhPSBudWxsKSByZXR1cm4gc3RyZWFtW2tJc1dyaXRhYmxlXVxuICBpZiAodHlwZW9mIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzdHJlYW0ud3JpdGFibGUpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIGlmIChpc0Rlc3Ryb3llZChzdHJlYW0pKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgJiYgc3RyZWFtLndyaXRhYmxlICYmICFpc1dyaXRhYmxlRW5kZWQoc3RyZWFtKVxufVxuZnVuY3Rpb24gaXNGaW5pc2hlZChzdHJlYW0sIG9wdHMpIHtcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKGlzRGVzdHJveWVkKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICgob3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRzLnJlYWRhYmxlKSAhPT0gZmFsc2UgJiYgaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMud3JpdGFibGUpICE9PSBmYWxzZSAmJiBpc1dyaXRhYmxlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuZnVuY3Rpb24gaXNXcml0YWJsZUVycm9yZWQoc3RyZWFtKSB7XG4gIHZhciBfc3RyZWFtJF93cml0YWJsZVN0YXQsIF9zdHJlYW0kX3dyaXRhYmxlU3RhdDJcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHN0cmVhbS53cml0YWJsZUVycm9yZWQpIHtcbiAgICByZXR1cm4gc3RyZWFtLndyaXRhYmxlRXJyb3JlZFxuICB9XG4gIHJldHVybiAoX3N0cmVhbSRfd3JpdGFibGVTdGF0ID1cbiAgICAoX3N0cmVhbSRfd3JpdGFibGVTdGF0MiA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfd3JpdGFibGVTdGF0MiA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBfc3RyZWFtJF93cml0YWJsZVN0YXQyLmVycm9yZWQpICE9PSBudWxsICYmIF9zdHJlYW0kX3dyaXRhYmxlU3RhdCAhPT0gdW5kZWZpbmVkXG4gICAgPyBfc3RyZWFtJF93cml0YWJsZVN0YXRcbiAgICA6IG51bGxcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVFcnJvcmVkKHN0cmVhbSkge1xuICB2YXIgX3N0cmVhbSRfcmVhZGFibGVTdGF0LCBfc3RyZWFtJF9yZWFkYWJsZVN0YXQyXG4gIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGlmIChzdHJlYW0ucmVhZGFibGVFcnJvcmVkKSB7XG4gICAgcmV0dXJuIHN0cmVhbS5yZWFkYWJsZUVycm9yZWRcbiAgfVxuICByZXR1cm4gKF9zdHJlYW0kX3JlYWRhYmxlU3RhdCA9XG4gICAgKF9zdHJlYW0kX3JlYWRhYmxlU3RhdDIgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDIgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogX3N0cmVhbSRfcmVhZGFibGVTdGF0Mi5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfc3RyZWFtJF9yZWFkYWJsZVN0YXQgIT09IHVuZGVmaW5lZFxuICAgID8gX3N0cmVhbSRfcmVhZGFibGVTdGF0XG4gICAgOiBudWxsXG59XG5mdW5jdGlvbiBpc0Nsb3NlZChzdHJlYW0pIHtcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJlYW0uY2xvc2VkID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gc3RyZWFtLmNsb3NlZFxuICB9XG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgaWYgKFxuICAgIHR5cGVvZiAod1N0YXRlID09PSBudWxsIHx8IHdTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogd1N0YXRlLmNsb3NlZCkgPT09ICdib29sZWFuJyB8fFxuICAgIHR5cGVvZiAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmNsb3NlZCkgPT09ICdib29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHdTdGF0ZSA9PT0gbnVsbCB8fCB3U3RhdGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHdTdGF0ZS5jbG9zZWQpIHx8XG4gICAgICAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmNsb3NlZClcbiAgICApXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJlYW0uX2Nsb3NlZCA9PT0gJ2Jvb2xlYW4nICYmIGlzT3V0Z29pbmdNZXNzYWdlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gc3RyZWFtLl9jbG9zZWRcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuZnVuY3Rpb24gaXNPdXRnb2luZ01lc3NhZ2Uoc3RyZWFtKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHN0cmVhbS5fY2xvc2VkID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9kZWZhdWx0S2VlcEFsaXZlID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9yZW1vdmVkQ29ubmVjdGlvbiA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgdHlwZW9mIHN0cmVhbS5fcmVtb3ZlZENvbnRMZW4gPT09ICdib29sZWFuJ1xuICApXG59XG5mdW5jdGlvbiBpc1NlcnZlclJlc3BvbnNlKHN0cmVhbSkge1xuICByZXR1cm4gdHlwZW9mIHN0cmVhbS5fc2VudDEwMCA9PT0gJ2Jvb2xlYW4nICYmIGlzT3V0Z29pbmdNZXNzYWdlKHN0cmVhbSlcbn1cbmZ1bmN0aW9uIGlzU2VydmVyUmVxdWVzdChzdHJlYW0pIHtcbiAgdmFyIF9zdHJlYW0kcmVxXG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHN0cmVhbS5fY29uc3VtaW5nID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9kdW1wZWQgPT09ICdib29sZWFuJyAmJlxuICAgICgoX3N0cmVhbSRyZXEgPSBzdHJlYW0ucmVxKSA9PT0gbnVsbCB8fCBfc3RyZWFtJHJlcSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogX3N0cmVhbSRyZXEudXBncmFkZU9yQ29ubmVjdCkgPT09XG4gICAgICB1bmRlZmluZWRcbiAgKVxufVxuZnVuY3Rpb24gd2lsbEVtaXRDbG9zZShzdHJlYW0pIHtcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCBzdGF0ZSA9IHdTdGF0ZSB8fCByU3RhdGVcbiAgcmV0dXJuIChcbiAgICAoIXN0YXRlICYmIGlzU2VydmVyUmVzcG9uc2Uoc3RyZWFtKSkgfHwgISEoc3RhdGUgJiYgc3RhdGUuYXV0b0Rlc3Ryb3kgJiYgc3RhdGUuZW1pdENsb3NlICYmIHN0YXRlLmNsb3NlZCA9PT0gZmFsc2UpXG4gIClcbn1cbmZ1bmN0aW9uIGlzRGlzdHVyYmVkKHN0cmVhbSkge1xuICB2YXIgX3N0cmVhbSRrSXNEaXN0dXJiZWRcbiAgcmV0dXJuICEhKFxuICAgIHN0cmVhbSAmJlxuICAgICgoX3N0cmVhbSRrSXNEaXN0dXJiZWQgPSBzdHJlYW1ba0lzRGlzdHVyYmVkXSkgIT09IG51bGwgJiYgX3N0cmVhbSRrSXNEaXN0dXJiZWQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBfc3RyZWFtJGtJc0Rpc3R1cmJlZFxuICAgICAgOiBzdHJlYW0ucmVhZGFibGVEaWRSZWFkIHx8IHN0cmVhbS5yZWFkYWJsZUFib3J0ZWQpXG4gIClcbn1cbmZ1bmN0aW9uIGlzRXJyb3JlZChzdHJlYW0pIHtcbiAgdmFyIF9yZWYsXG4gICAgX3JlZjIsXG4gICAgX3JlZjMsXG4gICAgX3JlZjQsXG4gICAgX3JlZjUsXG4gICAgX3N0cmVhbSRrSXNFcnJvcmVkLFxuICAgIF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMsXG4gICAgX3N0cmVhbSRfd3JpdGFibGVTdGF0MyxcbiAgICBfc3RyZWFtJF9yZWFkYWJsZVN0YXQ0LFxuICAgIF9zdHJlYW0kX3dyaXRhYmxlU3RhdDRcbiAgcmV0dXJuICEhKFxuICAgIHN0cmVhbSAmJlxuICAgICgoX3JlZiA9XG4gICAgICAoX3JlZjIgPVxuICAgICAgICAoX3JlZjMgPVxuICAgICAgICAgIChfcmVmNCA9XG4gICAgICAgICAgICAoX3JlZjUgPVxuICAgICAgICAgICAgICAoX3N0cmVhbSRrSXNFcnJvcmVkID0gc3RyZWFtW2tJc0Vycm9yZWRdKSAhPT0gbnVsbCAmJiBfc3RyZWFtJGtJc0Vycm9yZWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gX3N0cmVhbSRrSXNFcnJvcmVkXG4gICAgICAgICAgICAgICAgOiBzdHJlYW0ucmVhZGFibGVFcnJvcmVkKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gX3JlZjVcbiAgICAgICAgICAgICAgOiBzdHJlYW0ud3JpdGFibGVFcnJvcmVkKSAhPT0gbnVsbCAmJiBfcmVmNCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IF9yZWY0XG4gICAgICAgICAgICA6IChfc3RyZWFtJF9yZWFkYWJsZVN0YXQzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfc3RyZWFtJF9yZWFkYWJsZVN0YXQzID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMuZXJyb3JFbWl0dGVkKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBfcmVmM1xuICAgICAgICAgIDogKF9zdHJlYW0kX3dyaXRhYmxlU3RhdDMgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBfc3RyZWFtJF93cml0YWJsZVN0YXQzLmVycm9yRW1pdHRlZCkgIT09IG51bGwgJiYgX3JlZjIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IF9yZWYyXG4gICAgICAgIDogKF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQuZXJyb3JlZCkgIT09IG51bGwgJiYgX3JlZiAhPT0gdW5kZWZpbmVkXG4gICAgICA/IF9yZWZcbiAgICAgIDogKF9zdHJlYW0kX3dyaXRhYmxlU3RhdDQgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDQgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogX3N0cmVhbSRfd3JpdGFibGVTdGF0NC5lcnJvcmVkKVxuICApXG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNEZXN0cm95ZWQsXG4gIGtJc0Rlc3Ryb3llZCxcbiAgaXNEaXN0dXJiZWQsXG4gIGtJc0Rpc3R1cmJlZCxcbiAgaXNFcnJvcmVkLFxuICBrSXNFcnJvcmVkLFxuICBpc1JlYWRhYmxlLFxuICBrSXNSZWFkYWJsZSxcbiAga0lzQ2xvc2VkUHJvbWlzZSxcbiAga0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uLFxuICBrSXNXcml0YWJsZSxcbiAgaXNDbG9zZWQsXG4gIGlzRHVwbGV4Tm9kZVN0cmVhbSxcbiAgaXNGaW5pc2hlZCxcbiAgaXNJdGVyYWJsZSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVhZGFibGVFbmRlZCxcbiAgaXNSZWFkYWJsZUZpbmlzaGVkLFxuICBpc1JlYWRhYmxlRXJyb3JlZCxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1dlYlN0cmVhbSxcbiAgaXNXcml0YWJsZSxcbiAgaXNXcml0YWJsZU5vZGVTdHJlYW0sXG4gIGlzV3JpdGFibGVTdHJlYW0sXG4gIGlzV3JpdGFibGVFbmRlZCxcbiAgaXNXcml0YWJsZUZpbmlzaGVkLFxuICBpc1dyaXRhYmxlRXJyb3JlZCxcbiAgaXNTZXJ2ZXJSZXF1ZXN0LFxuICBpc1NlcnZlclJlc3BvbnNlLFxuICB3aWxsRW1pdENsb3NlLFxuICBpc1RyYW5zZm9ybVN0cmVhbVxufVxuIiwKICAgICIvKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvZW5kLW9mLXN0cmVhbSB3aXRoXG4vLyBwZXJtaXNzaW9uIGZyb20gdGhlIGF1dGhvciwgTWF0aGlhcyBCdXVzIChAbWFmaW50b3NoKS5cblxuOygndXNlIHN0cmljdCcpXG5jb25zdCB7IEFib3J0RXJyb3IsIGNvZGVzIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IEVSUl9JTlZBTElEX0FSR19UWVBFLCBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSB9ID0gY29kZXNcbmNvbnN0IHsga0VtcHR5T2JqZWN0LCBvbmNlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxuY29uc3QgeyB2YWxpZGF0ZUFib3J0U2lnbmFsLCB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVCb29sZWFuIH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IHsgUHJvbWlzZSwgUHJvbWlzZVByb3RvdHlwZVRoZW4sIFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3Qge1xuICBpc0Nsb3NlZCxcbiAgaXNSZWFkYWJsZSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVhZGFibGVGaW5pc2hlZCxcbiAgaXNSZWFkYWJsZUVycm9yZWQsXG4gIGlzV3JpdGFibGUsXG4gIGlzV3JpdGFibGVOb2RlU3RyZWFtLFxuICBpc1dyaXRhYmxlU3RyZWFtLFxuICBpc1dyaXRhYmxlRmluaXNoZWQsXG4gIGlzV3JpdGFibGVFcnJvcmVkLFxuICBpc05vZGVTdHJlYW0sXG4gIHdpbGxFbWl0Q2xvc2U6IF93aWxsRW1pdENsb3NlLFxuICBrSXNDbG9zZWRQcm9taXNlXG59ID0gcmVxdWlyZSgnLi91dGlscycpXG5sZXQgYWRkQWJvcnRMaXN0ZW5lclxuZnVuY3Rpb24gaXNSZXF1ZXN0KHN0cmVhbSkge1xuICByZXR1cm4gc3RyZWFtLnNldEhlYWRlciAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nXG59XG5jb25zdCBub3AgPSAoKSA9PiB7fVxuZnVuY3Rpb24gZW9zKHN0cmVhbSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIF9vcHRpb25zJHJlYWRhYmxlLCBfb3B0aW9ucyR3cml0YWJsZVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBrRW1wdHlPYmplY3RcbiAgfSBlbHNlIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICBvcHRpb25zID0ga0VtcHR5T2JqZWN0XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2ssICdjYWxsYmFjaycpXG4gIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIGNhbGxiYWNrID0gb25jZShjYWxsYmFjaylcbiAgaWYgKGlzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSB8fCBpc1dyaXRhYmxlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gZW9zV2ViKHN0cmVhbSwgb3B0aW9ucywgY2FsbGJhY2spXG4gIH1cbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnc3RyZWFtJywgWydSZWFkYWJsZVN0cmVhbScsICdXcml0YWJsZVN0cmVhbScsICdTdHJlYW0nXSwgc3RyZWFtKVxuICB9XG4gIGNvbnN0IHJlYWRhYmxlID1cbiAgICAoX29wdGlvbnMkcmVhZGFibGUgPSBvcHRpb25zLnJlYWRhYmxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRyZWFkYWJsZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IF9vcHRpb25zJHJlYWRhYmxlXG4gICAgICA6IGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSlcbiAgY29uc3Qgd3JpdGFibGUgPVxuICAgIChfb3B0aW9ucyR3cml0YWJsZSA9IG9wdGlvbnMud3JpdGFibGUpICE9PSBudWxsICYmIF9vcHRpb25zJHdyaXRhYmxlICE9PSB1bmRlZmluZWRcbiAgICAgID8gX29wdGlvbnMkd3JpdGFibGVcbiAgICAgIDogaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKVxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IG9ubGVnYWN5ZmluaXNoID0gKCkgPT4ge1xuICAgIGlmICghc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICBvbmZpbmlzaCgpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyAocm9uYWcpOiBJbXByb3ZlIHNvZnQgZGV0ZWN0aW9uIHRvIGluY2x1ZGUgY29yZSBtb2R1bGVzIGFuZFxuICAvLyBjb21tb24gZWNvc3lzdGVtIG1vZHVsZXMgdGhhdCBkbyBwcm9wZXJseSBlbWl0ICdjbG9zZScgYnV0IGZhaWxcbiAgLy8gdGhpcyBnZW5lcmljIGNoZWNrLlxuICBsZXQgd2lsbEVtaXRDbG9zZSA9XG4gICAgX3dpbGxFbWl0Q2xvc2Uoc3RyZWFtKSAmJiBpc1JlYWRhYmxlTm9kZVN0cmVhbShzdHJlYW0pID09PSByZWFkYWJsZSAmJiBpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pID09PSB3cml0YWJsZVxuICBsZXQgd3JpdGFibGVGaW5pc2hlZCA9IGlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0sIGZhbHNlKVxuICBjb25zdCBvbmZpbmlzaCA9ICgpID0+IHtcbiAgICB3cml0YWJsZUZpbmlzaGVkID0gdHJ1ZVxuICAgIC8vIFN0cmVhbSBzaG91bGQgbm90IGJlIGRlc3Ryb3llZCBoZXJlLiBJZiBpdCBpcyB0aGF0XG4gICAgLy8gbWVhbnMgdGhhdCB1c2VyIHNwYWNlIGlzIGRvaW5nIHNvbWV0aGluZyBkaWZmZXJlbnRseSBhbmRcbiAgICAvLyB3ZSBjYW5ub3QgdHJ1c3Qgd2lsbEVtaXRDbG9zZS5cbiAgICBpZiAoc3RyZWFtLmRlc3Ryb3llZCkge1xuICAgICAgd2lsbEVtaXRDbG9zZSA9IGZhbHNlXG4gICAgfVxuICAgIGlmICh3aWxsRW1pdENsb3NlICYmICghc3RyZWFtLnJlYWRhYmxlIHx8IHJlYWRhYmxlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghcmVhZGFibGUgfHwgcmVhZGFibGVGaW5pc2hlZCkge1xuICAgICAgY2FsbGJhY2suY2FsbChzdHJlYW0pXG4gICAgfVxuICB9XG4gIGxldCByZWFkYWJsZUZpbmlzaGVkID0gaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpXG4gIGNvbnN0IG9uZW5kID0gKCkgPT4ge1xuICAgIHJlYWRhYmxlRmluaXNoZWQgPSB0cnVlXG4gICAgLy8gU3RyZWFtIHNob3VsZCBub3QgYmUgZGVzdHJveWVkIGhlcmUuIElmIGl0IGlzIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHVzZXIgc3BhY2UgaXMgZG9pbmcgc29tZXRoaW5nIGRpZmZlcmVudGx5IGFuZFxuICAgIC8vIHdlIGNhbm5vdCB0cnVzdCB3aWxsRW1pdENsb3NlLlxuICAgIGlmIChzdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICB3aWxsRW1pdENsb3NlID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHdpbGxFbWl0Q2xvc2UgJiYgKCFzdHJlYW0ud3JpdGFibGUgfHwgd3JpdGFibGUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCF3cml0YWJsZSB8fCB3cml0YWJsZUZpbmlzaGVkKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25lcnJvciA9IChlcnIpID0+IHtcbiAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKVxuICB9XG4gIGxldCBjbG9zZWQgPSBpc0Nsb3NlZChzdHJlYW0pXG4gIGNvbnN0IG9uY2xvc2UgPSAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICAgIGNvbnN0IGVycm9yZWQgPSBpc1dyaXRhYmxlRXJyb3JlZChzdHJlYW0pIHx8IGlzUmVhZGFibGVFcnJvcmVkKHN0cmVhbSlcbiAgICBpZiAoZXJyb3JlZCAmJiB0eXBlb2YgZXJyb3JlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIGVycm9yZWQpXG4gICAgfVxuICAgIGlmIChyZWFkYWJsZSAmJiAhcmVhZGFibGVGaW5pc2hlZCAmJiBpc1JlYWRhYmxlTm9kZVN0cmVhbShzdHJlYW0sIHRydWUpKSB7XG4gICAgICBpZiAoIWlzUmVhZGFibGVGaW5pc2hlZChzdHJlYW0sIGZhbHNlKSkgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSlcbiAgICB9XG4gICAgaWYgKHdyaXRhYmxlICYmICF3cml0YWJsZUZpbmlzaGVkKSB7XG4gICAgICBpZiAoIWlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0sIGZhbHNlKSkgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSlcbiAgICB9XG4gICAgY2FsbGJhY2suY2FsbChzdHJlYW0pXG4gIH1cbiAgY29uc3Qgb25jbG9zZWQgPSAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICAgIGNvbnN0IGVycm9yZWQgPSBpc1dyaXRhYmxlRXJyb3JlZChzdHJlYW0pIHx8IGlzUmVhZGFibGVFcnJvcmVkKHN0cmVhbSlcbiAgICBpZiAoZXJyb3JlZCAmJiB0eXBlb2YgZXJyb3JlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIGVycm9yZWQpXG4gICAgfVxuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtKVxuICB9XG4gIGNvbnN0IG9ucmVxdWVzdCA9ICgpID0+IHtcbiAgICBzdHJlYW0ucmVxLm9uKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgfVxuICBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0ub24oJ2NvbXBsZXRlJywgb25maW5pc2gpXG4gICAgaWYgKCF3aWxsRW1pdENsb3NlKSB7XG4gICAgICBzdHJlYW0ub24oJ2Fib3J0Jywgb25jbG9zZSlcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5yZXEpIHtcbiAgICAgIG9ucmVxdWVzdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vbigncmVxdWVzdCcsIG9ucmVxdWVzdClcbiAgICB9XG4gIH0gZWxzZSBpZiAod3JpdGFibGUgJiYgIXdTdGF0ZSkge1xuICAgIC8vIGxlZ2FjeSBzdHJlYW1zXG4gICAgc3RyZWFtLm9uKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaClcbiAgICBzdHJlYW0ub24oJ2Nsb3NlJywgb25sZWdhY3lmaW5pc2gpXG4gIH1cblxuICAvLyBOb3QgYWxsIHN0cmVhbXMgd2lsbCBlbWl0ICdjbG9zZScgYWZ0ZXIgJ2Fib3J0ZWQnLlxuICBpZiAoIXdpbGxFbWl0Q2xvc2UgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICBzdHJlYW0ub24oJ2Fib3J0ZWQnLCBvbmNsb3NlKVxuICB9XG4gIHN0cmVhbS5vbignZW5kJywgb25lbmQpXG4gIHN0cmVhbS5vbignZmluaXNoJywgb25maW5pc2gpXG4gIGlmIChvcHRpb25zLmVycm9yICE9PSBmYWxzZSkge1xuICAgIHN0cmVhbS5vbignZXJyb3InLCBvbmVycm9yKVxuICB9XG4gIHN0cmVhbS5vbignY2xvc2UnLCBvbmNsb3NlKVxuICBpZiAoY2xvc2VkKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlKVxuICB9IGVsc2UgaWYgKFxuICAgICh3U3RhdGUgIT09IG51bGwgJiYgd1N0YXRlICE9PSB1bmRlZmluZWQgJiYgd1N0YXRlLmVycm9yRW1pdHRlZCkgfHxcbiAgICAoclN0YXRlICE9PSBudWxsICYmIHJTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHJTdGF0ZS5lcnJvckVtaXR0ZWQpXG4gICkge1xuICAgIGlmICghd2lsbEVtaXRDbG9zZSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlZClcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgIXJlYWRhYmxlICYmXG4gICAgKCF3aWxsRW1pdENsb3NlIHx8IGlzUmVhZGFibGUoc3RyZWFtKSkgJiZcbiAgICAod3JpdGFibGVGaW5pc2hlZCB8fCBpc1dyaXRhYmxlKHN0cmVhbSkgPT09IGZhbHNlKVxuICApIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2VkKVxuICB9IGVsc2UgaWYgKFxuICAgICF3cml0YWJsZSAmJlxuICAgICghd2lsbEVtaXRDbG9zZSB8fCBpc1dyaXRhYmxlKHN0cmVhbSkpICYmXG4gICAgKHJlYWRhYmxlRmluaXNoZWQgfHwgaXNSZWFkYWJsZShzdHJlYW0pID09PSBmYWxzZSlcbiAgKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlZClcbiAgfSBlbHNlIGlmIChyU3RhdGUgJiYgc3RyZWFtLnJlcSAmJiBzdHJlYW0uYWJvcnRlZCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2sob25jbG9zZWQpXG4gIH1cbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBjYWxsYmFjayA9IG5vcFxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignYWJvcnRlZCcsIG9uY2xvc2UpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjb21wbGV0ZScsIG9uZmluaXNoKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBvbmNsb3NlKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigncmVxdWVzdCcsIG9ucmVxdWVzdClcbiAgICBpZiAoc3RyZWFtLnJlcSkgc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25sZWdhY3lmaW5pc2gpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKVxuICB9XG4gIGlmIChvcHRpb25zLnNpZ25hbCAmJiAhY2xvc2VkKSB7XG4gICAgY29uc3QgYWJvcnQgPSAoKSA9PiB7XG4gICAgICAvLyBLZWVwIGl0IGJlY2F1c2UgY2xlYW51cCByZW1vdmVzIGl0LlxuICAgICAgY29uc3QgZW5kQ2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgY2xlYW51cCgpXG4gICAgICBlbmRDYWxsYmFjay5jYWxsKFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGNhdXNlOiBvcHRpb25zLnNpZ25hbC5yZWFzb25cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soYWJvcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEFib3J0TGlzdGVuZXIgPSBhZGRBYm9ydExpc3RlbmVyIHx8IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpLmFkZEFib3J0TGlzdGVuZXJcbiAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBhZGRBYm9ydExpc3RlbmVyKG9wdGlvbnMuc2lnbmFsLCBhYm9ydClcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgY2FsbGJhY2sgPSBvbmNlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRpc3Bvc2FibGVbU3ltYm9sRGlzcG9zZV0oKVxuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmFwcGx5KHN0cmVhbSwgYXJncylcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIHJldHVybiBjbGVhbnVwXG59XG5mdW5jdGlvbiBlb3NXZWIoc3RyZWFtLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBsZXQgaXNBYm9ydGVkID0gZmFsc2VcbiAgbGV0IGFib3J0ID0gbm9wXG4gIGlmIChvcHRpb25zLnNpZ25hbCkge1xuICAgIGFib3J0ID0gKCkgPT4ge1xuICAgICAgaXNBYm9ydGVkID0gdHJ1ZVxuICAgICAgY2FsbGJhY2suY2FsbChcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICBjYXVzZTogb3B0aW9ucy5zaWduYWwucmVhc29uXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGFib3J0KVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRBYm9ydExpc3RlbmVyID0gYWRkQWJvcnRMaXN0ZW5lciB8fCByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5hZGRBYm9ydExpc3RlbmVyXG4gICAgICBjb25zdCBkaXNwb3NhYmxlID0gYWRkQWJvcnRMaXN0ZW5lcihvcHRpb25zLnNpZ25hbCwgYWJvcnQpXG4gICAgICBjb25zdCBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gb25jZSgoLi4uYXJncykgPT4ge1xuICAgICAgICBkaXNwb3NhYmxlW1N5bWJvbERpc3Bvc2VdKClcbiAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5hcHBseShzdHJlYW0sIGFyZ3MpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlckZuID0gKC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoIWlzQWJvcnRlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiBjYWxsYmFjay5hcHBseShzdHJlYW0sIGFyZ3MpKVxuICAgIH1cbiAgfVxuICBQcm9taXNlUHJvdG90eXBlVGhlbihzdHJlYW1ba0lzQ2xvc2VkUHJvbWlzZV0ucHJvbWlzZSwgcmVzb2x2ZXJGbiwgcmVzb2x2ZXJGbilcbiAgcmV0dXJuIG5vcFxufVxuZnVuY3Rpb24gZmluaXNoZWQoc3RyZWFtLCBvcHRzKSB7XG4gIHZhciBfb3B0c1xuICBsZXQgYXV0b0NsZWFudXAgPSBmYWxzZVxuICBpZiAob3B0cyA9PT0gbnVsbCkge1xuICAgIG9wdHMgPSBrRW1wdHlPYmplY3RcbiAgfVxuICBpZiAoKF9vcHRzID0gb3B0cykgIT09IG51bGwgJiYgX29wdHMgIT09IHVuZGVmaW5lZCAmJiBfb3B0cy5jbGVhbnVwKSB7XG4gICAgdmFsaWRhdGVCb29sZWFuKG9wdHMuY2xlYW51cCwgJ2NsZWFudXAnKVxuICAgIGF1dG9DbGVhbnVwID0gb3B0cy5jbGVhbnVwXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gZW9zKHN0cmVhbSwgb3B0cywgKGVycikgPT4ge1xuICAgICAgaWYgKGF1dG9DbGVhbnVwKSB7XG4gICAgICAgIGNsZWFudXAoKVxuICAgICAgfVxuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cbm1vZHVsZS5leHBvcnRzID0gZW9zXG5tb2R1bGUuZXhwb3J0cy5maW5pc2hlZCA9IGZpbmlzaGVkXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cblxuY29uc3Qge1xuICBhZ2dyZWdhdGVUd29FcnJvcnMsXG4gIGNvZGVzOiB7IEVSUl9NVUxUSVBMRV9DQUxMQkFDSyB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyBTeW1ib2wgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBrSXNEZXN0cm95ZWQsIGlzRGVzdHJveWVkLCBpc0ZpbmlzaGVkLCBpc1NlcnZlclJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3Qga0Rlc3Ryb3kgPSBTeW1ib2woJ2tEZXN0cm95JylcbmNvbnN0IGtDb25zdHJ1Y3QgPSBTeW1ib2woJ2tDb25zdHJ1Y3QnKVxuZnVuY3Rpb24gY2hlY2tFcnJvcihlcnIsIHcsIHIpIHtcbiAgaWYgKGVycikge1xuICAgIC8vIEF2b2lkIFY4IGxlYWssIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0MTAzI2lzc3VlY29tbWVudC02NTIwMDIzNjRcbiAgICBlcnIuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICh3ICYmICF3LmVycm9yZWQpIHtcbiAgICAgIHcuZXJyb3JlZCA9IGVyclxuICAgIH1cbiAgICBpZiAociAmJiAhci5lcnJvcmVkKSB7XG4gICAgICByLmVycm9yZWQgPSBlcnJcbiAgICB9XG4gIH1cbn1cblxuLy8gQmFja3dhcmRzIGNvbXBhdC4gY2IoKSBpcyB1bmRvY3VtZW50ZWQgYW5kIHVudXNlZCBpbiBjb3JlIGJ1dFxuLy8gdW5mb3J0dW5hdGVseSBtaWdodCBiZSB1c2VkIGJ5IG1vZHVsZXMuXG5mdW5jdGlvbiBkZXN0cm95KGVyciwgY2IpIHtcbiAgY29uc3QgciA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgLy8gV2l0aCBkdXBsZXggc3RyZWFtcyB3ZSB1c2UgdGhlIHdyaXRhYmxlIHNpZGUgZm9yIHN0YXRlLlxuICBjb25zdCBzID0gdyB8fCByXG4gIGlmICgodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5kZXN0cm95ZWQpIHx8IChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmRlc3Ryb3llZCkpIHtcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYigpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBXZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG4gIGNoZWNrRXJyb3IoZXJyLCB3LCByKVxuICBpZiAodykge1xuICAgIHcuZGVzdHJveWVkID0gdHJ1ZVxuICB9XG4gIGlmIChyKSB7XG4gICAgci5kZXN0cm95ZWQgPSB0cnVlXG4gIH1cblxuICAvLyBJZiBzdGlsbCBjb25zdHJ1Y3RpbmcgdGhlbiBkZWZlciBjYWxsaW5nIF9kZXN0cm95LlxuICBpZiAoIXMuY29uc3RydWN0ZWQpIHtcbiAgICB0aGlzLm9uY2Uoa0Rlc3Ryb3ksIGZ1bmN0aW9uIChlcikge1xuICAgICAgX2Rlc3Ryb3kodGhpcywgYWdncmVnYXRlVHdvRXJyb3JzKGVyLCBlcnIpLCBjYilcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIF9kZXN0cm95KHRoaXMsIGVyciwgY2IpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIF9kZXN0cm95KHNlbGYsIGVyciwgY2IpIHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlXG4gIGZ1bmN0aW9uIG9uRGVzdHJveShlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIGNvbnN0IHIgPSBzZWxmLl9yZWFkYWJsZVN0YXRlXG4gICAgY29uc3QgdyA9IHNlbGYuX3dyaXRhYmxlU3RhdGVcbiAgICBjaGVja0Vycm9yKGVyciwgdywgcilcbiAgICBpZiAodykge1xuICAgICAgdy5jbG9zZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChyKSB7XG4gICAgICByLmNsb3NlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IoZXJyKVxuICAgIH1cbiAgICBpZiAoZXJyKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckNsb3NlTlQsIHNlbGYsIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgc2VsZilcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICBzZWxmLl9kZXN0cm95KGVyciB8fCBudWxsLCBvbkRlc3Ryb3kpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRGVzdHJveShlcnIpXG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRFcnJvckNsb3NlTlQoc2VsZiwgZXJyKSB7XG4gIGVtaXRFcnJvck5UKHNlbGYsIGVycilcbiAgZW1pdENsb3NlTlQoc2VsZilcbn1cbmZ1bmN0aW9uIGVtaXRDbG9zZU5UKHNlbGYpIHtcbiAgY29uc3QgciA9IHNlbGYuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHNlbGYuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHcpIHtcbiAgICB3LmNsb3NlRW1pdHRlZCA9IHRydWVcbiAgfVxuICBpZiAocikge1xuICAgIHIuY2xvc2VFbWl0dGVkID0gdHJ1ZVxuICB9XG4gIGlmICgodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5lbWl0Q2xvc2UpIHx8IChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmVtaXRDbG9zZSkpIHtcbiAgICBzZWxmLmVtaXQoJ2Nsb3NlJylcbiAgfVxufVxuZnVuY3Rpb24gZW1pdEVycm9yTlQoc2VsZiwgZXJyKSB7XG4gIGNvbnN0IHIgPSBzZWxmLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHcgPSBzZWxmLl93cml0YWJsZVN0YXRlXG4gIGlmICgodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5lcnJvckVtaXR0ZWQpIHx8IChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmVycm9yRW1pdHRlZCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodykge1xuICAgIHcuZXJyb3JFbWl0dGVkID0gdHJ1ZVxuICB9XG4gIGlmIChyKSB7XG4gICAgci5lcnJvckVtaXR0ZWQgPSB0cnVlXG4gIH1cbiAgc2VsZi5lbWl0KCdlcnJvcicsIGVycilcbn1cbmZ1bmN0aW9uIHVuZGVzdHJveSgpIHtcbiAgY29uc3QgciA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHIpIHtcbiAgICByLmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIHIuY2xvc2VkID0gZmFsc2VcbiAgICByLmNsb3NlRW1pdHRlZCA9IGZhbHNlXG4gICAgci5kZXN0cm95ZWQgPSBmYWxzZVxuICAgIHIuZXJyb3JlZCA9IG51bGxcbiAgICByLmVycm9yRW1pdHRlZCA9IGZhbHNlXG4gICAgci5yZWFkaW5nID0gZmFsc2VcbiAgICByLmVuZGVkID0gci5yZWFkYWJsZSA9PT0gZmFsc2VcbiAgICByLmVuZEVtaXR0ZWQgPSByLnJlYWRhYmxlID09PSBmYWxzZVxuICB9XG4gIGlmICh3KSB7XG4gICAgdy5jb25zdHJ1Y3RlZCA9IHRydWVcbiAgICB3LmRlc3Ryb3llZCA9IGZhbHNlXG4gICAgdy5jbG9zZWQgPSBmYWxzZVxuICAgIHcuY2xvc2VFbWl0dGVkID0gZmFsc2VcbiAgICB3LmVycm9yZWQgPSBudWxsXG4gICAgdy5lcnJvckVtaXR0ZWQgPSBmYWxzZVxuICAgIHcuZmluYWxDYWxsZWQgPSBmYWxzZVxuICAgIHcucHJlZmluaXNoZWQgPSBmYWxzZVxuICAgIHcuZW5kZWQgPSB3LndyaXRhYmxlID09PSBmYWxzZVxuICAgIHcuZW5kaW5nID0gdy53cml0YWJsZSA9PT0gZmFsc2VcbiAgICB3LmZpbmlzaGVkID0gdy53cml0YWJsZSA9PT0gZmFsc2VcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIsIHN5bmMpIHtcbiAgLy8gV2UgaGF2ZSB0ZXN0cyB0aGF0IHJlbHkgb24gZXJyb3JzIGJlaW5nIGVtaXR0ZWRcbiAgLy8gaW4gdGhlIHNhbWUgdGljaywgc28gY2hhbmdpbmcgdGhpcyBpcyBzZW12ZXIgbWFqb3IuXG4gIC8vIEZvciBub3cgd2hlbiB5b3Ugb3B0LWluIHRvIGF1dG9EZXN0cm95IHdlIGFsbG93XG4gIC8vIHRoZSBlcnJvciB0byBiZSBlbWl0dGVkIG5leHRUaWNrLiBJbiBhIGZ1dHVyZVxuICAvLyBzZW12ZXIgbWFqb3IgdXBkYXRlIHdlIHNob3VsZCBjaGFuZ2UgdGhlIGRlZmF1bHQgdG8gdGhpcy5cblxuICBjb25zdCByID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHcgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmRlc3Ryb3llZCkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZGVzdHJveWVkKSkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgaWYgKChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmF1dG9EZXN0cm95KSB8fCAodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5hdXRvRGVzdHJveSkpXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICBlbHNlIGlmIChlcnIpIHtcbiAgICAvLyBBdm9pZCBWOCBsZWFrLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zNDEwMyNpc3N1ZWNvbW1lbnQtNjUyMDAyMzY0XG4gICAgZXJyLnN0YWNrIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cbiAgICBpZiAodyAmJiAhdy5lcnJvcmVkKSB7XG4gICAgICB3LmVycm9yZWQgPSBlcnJcbiAgICB9XG4gICAgaWYgKHIgJiYgIXIuZXJyb3JlZCkge1xuICAgICAgci5lcnJvcmVkID0gZXJyXG4gICAgfVxuICAgIGlmIChzeW5jKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCBzdHJlYW0sIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdEVycm9yTlQoc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjb25zdHJ1Y3Qoc3RyZWFtLCBjYikge1xuICBpZiAodHlwZW9mIHN0cmVhbS5fY29uc3RydWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgciA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmIChyKSB7XG4gICAgci5jb25zdHJ1Y3RlZCA9IGZhbHNlXG4gIH1cbiAgaWYgKHcpIHtcbiAgICB3LmNvbnN0cnVjdGVkID0gZmFsc2VcbiAgfVxuICBzdHJlYW0ub25jZShrQ29uc3RydWN0LCBjYilcbiAgaWYgKHN0cmVhbS5saXN0ZW5lckNvdW50KGtDb25zdHJ1Y3QpID4gMSkge1xuICAgIC8vIER1cGxleFxuICAgIHJldHVyblxuICB9XG4gIHByb2Nlc3MubmV4dFRpY2soY29uc3RydWN0TlQsIHN0cmVhbSlcbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdE5UKHN0cmVhbSkge1xuICBsZXQgY2FsbGVkID0gZmFsc2VcbiAgZnVuY3Rpb24gb25Db25zdHJ1Y3QoZXJyKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIgIT09IG51bGwgJiYgZXJyICE9PSB1bmRlZmluZWQgPyBlcnIgOiBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIGNvbnN0IHIgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgICBjb25zdCB3ID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gICAgY29uc3QgcyA9IHcgfHwgclxuICAgIGlmIChyKSB7XG4gICAgICByLmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodykge1xuICAgICAgdy5jb25zdHJ1Y3RlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKHMuZGVzdHJveWVkKSB7XG4gICAgICBzdHJlYW0uZW1pdChrRGVzdHJveSwgZXJyKVxuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q29uc3RydWN0TlQsIHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICBzdHJlYW0uX2NvbnN0cnVjdCgoZXJyKSA9PiB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKG9uQ29uc3RydWN0LCBlcnIpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbkNvbnN0cnVjdCwgZXJyKVxuICB9XG59XG5mdW5jdGlvbiBlbWl0Q29uc3RydWN0TlQoc3RyZWFtKSB7XG4gIHN0cmVhbS5lbWl0KGtDb25zdHJ1Y3QpXG59XG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiAoc3RyZWFtID09PSBudWxsIHx8IHN0cmVhbSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc3RyZWFtLnNldEhlYWRlcikgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJ1xufVxuZnVuY3Rpb24gZW1pdENsb3NlTGVnYWN5KHN0cmVhbSkge1xuICBzdHJlYW0uZW1pdCgnY2xvc2UnKVxufVxuZnVuY3Rpb24gZW1pdEVycm9yQ2xvc2VMZWdhY3koc3RyZWFtLCBlcnIpIHtcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKVxuICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZUxlZ2FjeSwgc3RyZWFtKVxufVxuXG4vLyBOb3JtYWxpemUgZGVzdHJveSBmb3IgbGVnYWN5LlxuZnVuY3Rpb24gZGVzdHJveWVyKHN0cmVhbSwgZXJyKSB7XG4gIGlmICghc3RyZWFtIHx8IGlzRGVzdHJveWVkKHN0cmVhbSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoIWVyciAmJiAhaXNGaW5pc2hlZChzdHJlYW0pKSB7XG4gICAgZXJyID0gbmV3IEFib3J0RXJyb3IoKVxuICB9XG5cbiAgLy8gVE9ETzogUmVtb3ZlIGlzUmVxdWVzdCBicmFuY2hlcy5cbiAgaWYgKGlzU2VydmVyUmVxdWVzdChzdHJlYW0pKSB7XG4gICAgc3RyZWFtLnNvY2tldCA9IG51bGxcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH0gZWxzZSBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0uYWJvcnQoKVxuICB9IGVsc2UgaWYgKGlzUmVxdWVzdChzdHJlYW0ucmVxKSkge1xuICAgIHN0cmVhbS5yZXEuYWJvcnQoKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc3RyZWFtLmNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVE9ETzogRG9uJ3QgbG9zZSBlcnI/XG4gICAgc3RyZWFtLmNsb3NlKClcbiAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckNsb3NlTGVnYWN5LCBzdHJlYW0sIGVycilcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZUxlZ2FjeSwgc3RyZWFtKVxuICB9XG4gIGlmICghc3RyZWFtLmRlc3Ryb3llZCkge1xuICAgIHN0cmVhbVtrSXNEZXN0cm95ZWRdID0gdHJ1ZVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29uc3RydWN0LFxuICBkZXN0cm95ZXIsXG4gIGRlc3Ryb3ksXG4gIHVuZGVzdHJveSxcbiAgZXJyb3JPckRlc3Ryb3lcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQXJyYXlJc0FycmF5LCBPYmplY3RTZXRQcm90b3R5cGVPZiB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7IEV2ZW50RW1pdHRlcjogRUUgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5mdW5jdGlvbiBTdHJlYW0ob3B0cykge1xuICBFRS5jYWxsKHRoaXMsIG9wdHMpXG59XG5PYmplY3RTZXRQcm90b3R5cGVPZihTdHJlYW0ucHJvdG90eXBlLCBFRS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihTdHJlYW0sIEVFKVxuU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc291cmNlID0gdGhpc1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBpZiAoZGVzdC53cml0YWJsZSAmJiBkZXN0LndyaXRlKGNodW5rKSA9PT0gZmFsc2UgJiYgc291cmNlLnBhdXNlKSB7XG4gICAgICBzb3VyY2UucGF1c2UoKVxuICAgIH1cbiAgfVxuICBzb3VyY2Uub24oJ2RhdGEnLCBvbmRhdGEpXG4gIGZ1bmN0aW9uIG9uZHJhaW4oKSB7XG4gICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7XG4gICAgICBzb3VyY2UucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKVxuXG4gIC8vIElmIHRoZSAnZW5kJyBvcHRpb24gaXMgbm90IHN1cHBsaWVkLCBkZXN0LmVuZCgpIHdpbGwgYmUgY2FsbGVkIHdoZW5cbiAgLy8gc291cmNlIGdldHMgdGhlICdlbmQnIG9yICdjbG9zZScgZXZlbnRzLiAgT25seSBkZXN0LmVuZCgpIG9uY2UuXG4gIGlmICghZGVzdC5faXNTdGRpbyAmJiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5lbmQgIT09IGZhbHNlKSkge1xuICAgIHNvdXJjZS5vbignZW5kJywgb25lbmQpXG4gICAgc291cmNlLm9uKCdjbG9zZScsIG9uY2xvc2UpXG4gIH1cbiAgbGV0IGRpZE9uRW5kID0gZmFsc2VcbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm5cbiAgICBkaWRPbkVuZCA9IHRydWVcbiAgICBkZXN0LmVuZCgpXG4gIH1cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVyblxuICAgIGRpZE9uRW5kID0gdHJ1ZVxuICAgIGlmICh0eXBlb2YgZGVzdC5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSBkZXN0LmRlc3Ryb3koKVxuICB9XG5cbiAgLy8gRG9uJ3QgbGVhdmUgZGFuZ2xpbmcgcGlwZXMgd2hlbiB0aGVyZSBhcmUgZXJyb3JzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgY2xlYW51cCgpXG4gICAgaWYgKEVFLmxpc3RlbmVyQ291bnQodGhpcywgJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcilcbiAgICB9XG4gIH1cbiAgcHJlcGVuZExpc3RlbmVyKHNvdXJjZSwgJ2Vycm9yJywgb25lcnJvcilcbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpXG5cbiAgLy8gUmVtb3ZlIGFsbCB0aGUgZXZlbnQgbGlzdGVuZXJzIHRoYXQgd2VyZSBhZGRlZC5cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKVxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xlYW51cClcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cClcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIGNsZWFudXApXG4gIH1cbiAgc291cmNlLm9uKCdlbmQnLCBjbGVhbnVwKVxuICBzb3VyY2Uub24oJ2Nsb3NlJywgY2xlYW51cClcbiAgZGVzdC5vbignY2xvc2UnLCBjbGVhbnVwKVxuICBkZXN0LmVtaXQoJ3BpcGUnLCBzb3VyY2UpXG5cbiAgLy8gQWxsb3cgZm9yIHVuaXgtbGlrZSB1c2FnZTogQS5waXBlKEIpLnBpcGUoQylcbiAgcmV0dXJuIGRlc3Rcbn1cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pXG5cbiAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueVxuICAvLyB1c2VybGFuZCBvbmVzLiAgTkVWRVIgRE8gVEhJUy4gVGhpcyBpcyBoZXJlIG9ubHkgYmVjYXVzZSB0aGlzIGNvZGUgbmVlZHNcbiAgLy8gdG8gY29udGludWUgdG8gd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIE5vZGUuanMgdGhhdCBkbyBub3QgaW5jbHVkZVxuICAvLyB0aGUgcHJlcGVuZExpc3RlbmVyKCkgbWV0aG9kLiBUaGUgZ29hbCBpcyB0byBldmVudHVhbGx5IHJlbW92ZSB0aGlzIGhhY2suXG4gIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbZXZlbnRdKSBlbWl0dGVyLm9uKGV2ZW50LCBmbilcbiAgZWxzZSBpZiAoQXJyYXlJc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pXG4gIGVsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBTdHJlYW0sXG4gIHByZXBlbmRMaXN0ZW5lclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBTeW1ib2xEaXNwb3NlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgQWJvcnRFcnJvciwgY29kZXMgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgaXNOb2RlU3RyZWFtLCBpc1dlYlN0cmVhbSwga0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCB7IEVSUl9JTlZBTElEX0FSR19UWVBFIH0gPSBjb2Rlc1xubGV0IGFkZEFib3J0TGlzdGVuZXJcblxuLy8gVGhpcyBtZXRob2QgaXMgaW5saW5lZCBoZXJlIGZvciByZWFkYWJsZS1zdHJlYW1cbi8vIEl0IGFsc28gZG9lcyBub3QgYWxsb3cgZm9yIHNpZ25hbCB0byBub3QgZXhpc3Qgb24gdGhlIHN0cmVhbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzYwNjEjZGlzY3Vzc2lvbl9yNTMzNzE4MDI5XG5jb25zdCB2YWxpZGF0ZUFib3J0U2lnbmFsID0gKHNpZ25hbCwgbmFtZSkgPT4ge1xuICBpZiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsID0gZnVuY3Rpb24gYWRkQWJvcnRTaWduYWwoc2lnbmFsLCBzdHJlYW0pIHtcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsICdzaWduYWwnKVxuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pICYmICFpc1dlYlN0cmVhbShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdzdHJlYW0nLCBbJ1JlYWRhYmxlU3RyZWFtJywgJ1dyaXRhYmxlU3RyZWFtJywgJ1N0cmVhbSddLCBzdHJlYW0pXG4gIH1cbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZShzaWduYWwsIHN0cmVhbSlcbn1cbm1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZSA9IGZ1bmN0aW9uIChzaWduYWwsIHN0cmVhbSkge1xuICBpZiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkge1xuICAgIHJldHVybiBzdHJlYW1cbiAgfVxuICBjb25zdCBvbkFib3J0ID0gaXNOb2RlU3RyZWFtKHN0cmVhbSlcbiAgICA/ICgpID0+IHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koXG4gICAgICAgICAgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBjYXVzZTogc2lnbmFsLnJlYXNvblxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICA6ICgpID0+IHtcbiAgICAgICAgc3RyZWFtW2tDb250cm9sbGVyRXJyb3JGdW5jdGlvbl0oXG4gICAgICAgICAgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBjYXVzZTogc2lnbmFsLnJlYXNvblxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgb25BYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgYWRkQWJvcnRMaXN0ZW5lciA9IGFkZEFib3J0TGlzdGVuZXIgfHwgcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuYWRkQWJvcnRMaXN0ZW5lclxuICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBhZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgb25BYm9ydClcbiAgICBlb3Moc3RyZWFtLCBkaXNwb3NhYmxlW1N5bWJvbERpc3Bvc2VdKVxuICB9XG4gIHJldHVybiBzdHJlYW1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgU3RyaW5nUHJvdG90eXBlU2xpY2UsIFN5bWJvbEl0ZXJhdG9yLCBUeXBlZEFycmF5UHJvdG90eXBlU2V0LCBVaW50OEFycmF5IH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpbnNwZWN0IH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBCdWZmZXJMaXN0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gbnVsbFxuICAgIHRoaXMudGFpbCA9IG51bGxcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgfVxuICBwdXNoKHYpIHtcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgIGRhdGE6IHYsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnlcbiAgICBlbHNlIHRoaXMuaGVhZCA9IGVudHJ5XG4gICAgdGhpcy50YWlsID0gZW50cnlcbiAgICArK3RoaXMubGVuZ3RoXG4gIH1cbiAgdW5zaGlmdCh2KSB7XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICBkYXRhOiB2LFxuICAgICAgbmV4dDogdGhpcy5oZWFkXG4gICAgfVxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnlcbiAgICB0aGlzLmhlYWQgPSBlbnRyeVxuICAgICsrdGhpcy5sZW5ndGhcbiAgfVxuICBzaGlmdCgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVyblxuICAgIGNvbnN0IHJldCA9IHRoaXMuaGVhZC5kYXRhXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dFxuICAgIC0tdGhpcy5sZW5ndGhcbiAgICByZXR1cm4gcmV0XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbFxuICAgIHRoaXMubGVuZ3RoID0gMFxuICB9XG4gIGpvaW4ocykge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgcmV0ID0gJycgKyBwLmRhdGFcbiAgICB3aGlsZSAoKHAgPSBwLm5leHQpICE9PSBudWxsKSByZXQgKz0gcyArIHAuZGF0YVxuICAgIHJldHVybiByZXRcbiAgfVxuICBjb25jYXQobikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICAgIGNvbnN0IHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuID4+PiAwKVxuICAgIGxldCBwID0gdGhpcy5oZWFkXG4gICAgbGV0IGkgPSAwXG4gICAgd2hpbGUgKHApIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGVTZXQocmV0LCBwLmRhdGEsIGkpXG4gICAgICBpICs9IHAuZGF0YS5sZW5ndGhcbiAgICAgIHAgPSBwLm5leHRcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIG9yIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgY29uc3VtZShuLCBoYXNTdHJpbmdzKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuaGVhZC5kYXRhXG4gICAgaWYgKG4gPCBkYXRhLmxlbmd0aCkge1xuICAgICAgLy8gYHNsaWNlYCBpcyB0aGUgc2FtZSBmb3IgYnVmZmVycyBhbmQgc3RyaW5ncy5cbiAgICAgIGNvbnN0IHNsaWNlID0gZGF0YS5zbGljZSgwLCBuKVxuICAgICAgdGhpcy5oZWFkLmRhdGEgPSBkYXRhLnNsaWNlKG4pXG4gICAgICByZXR1cm4gc2xpY2VcbiAgICB9XG4gICAgaWYgKG4gPT09IGRhdGEubGVuZ3RoKSB7XG4gICAgICAvLyBGaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2guXG4gICAgICByZXR1cm4gdGhpcy5zaGlmdCgpXG4gICAgfVxuICAgIC8vIFJlc3VsdCBzcGFucyBtb3JlIHRoYW4gb25lIGJ1ZmZlci5cbiAgICByZXR1cm4gaGFzU3RyaW5ncyA/IHRoaXMuX2dldFN0cmluZyhuKSA6IHRoaXMuX2dldEJ1ZmZlcihuKVxuICB9XG4gIGZpcnN0KCkge1xuICAgIHJldHVybiB0aGlzLmhlYWQuZGF0YVxuICB9XG4gICpbU3ltYm9sSXRlcmF0b3JdKCkge1xuICAgIGZvciAobGV0IHAgPSB0aGlzLmhlYWQ7IHA7IHAgPSBwLm5leHQpIHtcbiAgICAgIHlpZWxkIHAuZGF0YVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIF9nZXRTdHJpbmcobikge1xuICAgIGxldCByZXQgPSAnJ1xuICAgIGxldCBwID0gdGhpcy5oZWFkXG4gICAgbGV0IGMgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3Qgc3RyID0gcC5kYXRhXG4gICAgICBpZiAobiA+IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0ICs9IHN0clxuICAgICAgICBuIC09IHN0ci5sZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0ICs9IHN0clxuICAgICAgICAgICsrY1xuICAgICAgICAgIGlmIChwLm5leHQpIHRoaXMuaGVhZCA9IHAubmV4dFxuICAgICAgICAgIGVsc2UgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCArPSBTdHJpbmdQcm90b3R5cGVTbGljZShzdHIsIDAsIG4pXG4gICAgICAgICAgdGhpcy5oZWFkID0gcFxuICAgICAgICAgIHAuZGF0YSA9IFN0cmluZ1Byb3RvdHlwZVNsaWNlKHN0ciwgbilcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgKytjXG4gICAgfSB3aGlsZSAoKHAgPSBwLm5leHQpICE9PSBudWxsKVxuICAgIHRoaXMubGVuZ3RoIC09IGNcbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgX2dldEJ1ZmZlcihuKSB7XG4gICAgY29uc3QgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgY29uc3QgcmV0TGVuID0gblxuICAgIGxldCBwID0gdGhpcy5oZWFkXG4gICAgbGV0IGMgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYnVmID0gcC5kYXRhXG4gICAgICBpZiAobiA+IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIGJ1ZiwgcmV0TGVuIC0gbilcbiAgICAgICAgbiAtPSBidWYubGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGVTZXQocmV0LCBidWYsIHJldExlbiAtIG4pXG4gICAgICAgICAgKytjXG4gICAgICAgICAgaWYgKHAubmV4dCkgdGhpcy5oZWFkID0gcC5uZXh0XG4gICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBuKSwgcmV0TGVuIC0gbilcbiAgICAgICAgICB0aGlzLmhlYWQgPSBwXG4gICAgICAgICAgcC5kYXRhID0gYnVmLnNsaWNlKG4pXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgICsrY1xuICAgIH0gd2hpbGUgKChwID0gcC5uZXh0KSAhPT0gbnVsbClcbiAgICB0aGlzLmxlbmd0aCAtPSBjXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRoZSBsaW5rZWQgbGlzdCBvbmx5IHNob3dzIHRoZSBtaW5pbWFsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi5cbiAgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldKF8sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5zcGVjdCh0aGlzLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgLy8gT25seSBpbnNwZWN0IG9uZSBsZXZlbC5cbiAgICAgIGRlcHRoOiAwLFxuICAgICAgLy8gSXQgc2hvdWxkIG5vdCByZWN1cnNlLlxuICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2VcbiAgICB9KVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE1hdGhGbG9vciwgTnVtYmVySXNJbnRlZ2VyIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgdmFsaWRhdGVJbnRlZ2VyIH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IHsgRVJSX0lOVkFMSURfQVJHX1ZBTFVFIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpLmNvZGVzXG5sZXQgZGVmYXVsdEhpZ2hXYXRlck1hcmtCeXRlcyA9IDE2ICogMTAyNFxubGV0IGRlZmF1bHRIaWdoV2F0ZXJNYXJrT2JqZWN0TW9kZSA9IDE2XG5mdW5jdGlvbiBoaWdoV2F0ZXJNYXJrRnJvbShvcHRpb25zLCBpc0R1cGxleCwgZHVwbGV4S2V5KSB7XG4gIHJldHVybiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgIT0gbnVsbCA/IG9wdGlvbnMuaGlnaFdhdGVyTWFyayA6IGlzRHVwbGV4ID8gb3B0aW9uc1tkdXBsZXhLZXldIDogbnVsbFxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsob2JqZWN0TW9kZSkge1xuICByZXR1cm4gb2JqZWN0TW9kZSA/IGRlZmF1bHRIaWdoV2F0ZXJNYXJrT2JqZWN0TW9kZSA6IGRlZmF1bHRIaWdoV2F0ZXJNYXJrQnl0ZXNcbn1cbmZ1bmN0aW9uIHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrKG9iamVjdE1vZGUsIHZhbHVlKSB7XG4gIHZhbGlkYXRlSW50ZWdlcih2YWx1ZSwgJ3ZhbHVlJywgMClcbiAgaWYgKG9iamVjdE1vZGUpIHtcbiAgICBkZWZhdWx0SGlnaFdhdGVyTWFya09iamVjdE1vZGUgPSB2YWx1ZVxuICB9IGVsc2Uge1xuICAgIGRlZmF1bHRIaWdoV2F0ZXJNYXJrQnl0ZXMgPSB2YWx1ZVxuICB9XG59XG5mdW5jdGlvbiBnZXRIaWdoV2F0ZXJNYXJrKHN0YXRlLCBvcHRpb25zLCBkdXBsZXhLZXksIGlzRHVwbGV4KSB7XG4gIGNvbnN0IGh3bSA9IGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpXG4gIGlmIChod20gIT0gbnVsbCkge1xuICAgIGlmICghTnVtYmVySXNJbnRlZ2VyKGh3bSkgfHwgaHdtIDwgMCkge1xuICAgICAgY29uc3QgbmFtZSA9IGlzRHVwbGV4ID8gYG9wdGlvbnMuJHtkdXBsZXhLZXl9YCA6ICdvcHRpb25zLmhpZ2hXYXRlck1hcmsnXG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIGh3bSlcbiAgICB9XG4gICAgcmV0dXJuIE1hdGhGbG9vcihod20pXG4gIH1cblxuICAvLyBEZWZhdWx0IHZhbHVlXG4gIHJldHVybiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhzdGF0ZS5vYmplY3RNb2RlKVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEhpZ2hXYXRlck1hcmssXG4gIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrLFxuICBzZXREZWZhdWx0SGlnaFdhdGVyTWFya1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG5cbmNvbnN0IHsgUHJvbWlzZVByb3RvdHlwZVRoZW4sIFN5bWJvbEFzeW5jSXRlcmF0b3IsIFN5bWJvbEl0ZXJhdG9yIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBFUlJfSU5WQUxJRF9BUkdfVFlQRSwgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKS5jb2Rlc1xuZnVuY3Rpb24gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpIHtcbiAgbGV0IGl0ZXJhdG9yXG4gIGlmICh0eXBlb2YgaXRlcmFibGUgPT09ICdzdHJpbmcnIHx8IGl0ZXJhYmxlIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7XG4gICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlYWQoKSB7XG4gICAgICAgIHRoaXMucHVzaChpdGVyYWJsZSlcbiAgICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBsZXQgaXNBc3luY1xuICBpZiAoaXRlcmFibGUgJiYgaXRlcmFibGVbU3ltYm9sQXN5bmNJdGVyYXRvcl0pIHtcbiAgICBpc0FzeW5jID0gdHJ1ZVxuICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sQXN5bmNJdGVyYXRvcl0oKVxuICB9IGVsc2UgaWYgKGl0ZXJhYmxlICYmIGl0ZXJhYmxlW1N5bWJvbEl0ZXJhdG9yXSkge1xuICAgIGlzQXN5bmMgPSBmYWxzZVxuICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sSXRlcmF0b3JdKClcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2l0ZXJhYmxlJywgWydJdGVyYWJsZSddLCBpdGVyYWJsZSlcbiAgfVxuICBjb25zdCByZWFkYWJsZSA9IG5ldyBSZWFkYWJsZSh7XG4gICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICBoaWdoV2F0ZXJNYXJrOiAxLFxuICAgIC8vIFRPRE8ocm9uYWcpOiBXaGF0IG9wdGlvbnMgc2hvdWxkIGJlIGFsbG93ZWQ/XG4gICAgLi4ub3B0c1xuICB9KVxuXG4gIC8vIEZsYWcgdG8gcHJvdGVjdCBhZ2FpbnN0IF9yZWFkXG4gIC8vIGJlaW5nIGNhbGxlZCBiZWZvcmUgbGFzdCBpdGVyYXRpb24gY29tcGxldGlvbi5cbiAgbGV0IHJlYWRpbmcgPSBmYWxzZVxuICByZWFkYWJsZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXJlYWRpbmcpIHtcbiAgICAgIHJlYWRpbmcgPSB0cnVlXG4gICAgICBuZXh0KClcbiAgICB9XG4gIH1cbiAgcmVhZGFibGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyb3IsIGNiKSB7XG4gICAgUHJvbWlzZVByb3RvdHlwZVRoZW4oXG4gICAgICBjbG9zZShlcnJvciksXG4gICAgICAoKSA9PiBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnJvciksXG4gICAgICAvLyBuZXh0VGljayBpcyBoZXJlIGluIGNhc2UgY2IgdGhyb3dzXG4gICAgICAoZSkgPT4gcHJvY2Vzcy5uZXh0VGljayhjYiwgZSB8fCBlcnJvcilcbiAgICApXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gY2xvc2UoZXJyb3IpIHtcbiAgICBjb25zdCBoYWRFcnJvciA9IGVycm9yICE9PSB1bmRlZmluZWQgJiYgZXJyb3IgIT09IG51bGxcbiAgICBjb25zdCBoYXNUaHJvdyA9IHR5cGVvZiBpdGVyYXRvci50aHJvdyA9PT0gJ2Z1bmN0aW9uJ1xuICAgIGlmIChoYWRFcnJvciAmJiBoYXNUaHJvdykge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IudGhyb3coZXJyb3IpXG4gICAgICBhd2FpdCB2YWx1ZVxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3IucmV0dXJuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKVxuICAgICAgYXdhaXQgdmFsdWVcbiAgICB9XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBpc0FzeW5jID8gYXdhaXQgaXRlcmF0b3IubmV4dCgpIDogaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgcmVhZGFibGUucHVzaChudWxsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nID8gYXdhaXQgdmFsdWUgOiB2YWx1ZVxuICAgICAgICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVhZGFibGUucHVzaChyZXMpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWFkaW5nID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWFkYWJsZS5kZXN0cm95KGVycilcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIHJldHVybiByZWFkYWJsZVxufVxubW9kdWxlLmV4cG9ydHMgPSBmcm9tXG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3Qge1xuICBBcnJheVByb3RvdHlwZUluZGV4T2YsXG4gIE51bWJlcklzSW50ZWdlcixcbiAgTnVtYmVySXNOYU4sXG4gIE51bWJlclBhcnNlSW50LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzLFxuICBPYmplY3RLZXlzLFxuICBPYmplY3RTZXRQcm90b3R5cGVPZixcbiAgUHJvbWlzZSxcbiAgU2FmZVNldCxcbiAgU3ltYm9sQXN5bmNEaXNwb3NlLFxuICBTeW1ib2xBc3luY0l0ZXJhdG9yLFxuICBTeW1ib2xcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGVcblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlXG5jb25zdCB7IEV2ZW50RW1pdHRlcjogRUUgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCB7IFN0cmVhbSwgcHJlcGVuZExpc3RlbmVyIH0gPSByZXF1aXJlKCcuL2xlZ2FjeScpXG5jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWRkLWFib3J0LXNpZ25hbCcpXG5jb25zdCBlb3MgPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKVxubGV0IGRlYnVnID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuZGVidWdsb2coJ3N0cmVhbScsIChmbikgPT4ge1xuICBkZWJ1ZyA9IGZuXG59KVxuY29uc3QgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vYnVmZmVyX2xpc3QnKVxuY29uc3QgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2Rlc3Ryb3knKVxuY29uc3QgeyBnZXRIaWdoV2F0ZXJNYXJrLCBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9zdGF0ZScpXG5jb25zdCB7XG4gIGFnZ3JlZ2F0ZVR3b0Vycm9ycyxcbiAgY29kZXM6IHtcbiAgICBFUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgICBFUlJfT1VUX09GX1JBTkdFLFxuICAgIEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsXG4gICAgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVFxuICB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyB2YWxpZGF0ZU9iamVjdCB9ID0gcmVxdWlyZSgnLi4vdmFsaWRhdG9ycycpXG5jb25zdCBrUGF1c2VkID0gU3ltYm9sKCdrUGF1c2VkJylcbmNvbnN0IHsgU3RyaW5nRGVjb2RlciB9ID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKVxuY29uc3QgZnJvbSA9IHJlcXVpcmUoJy4vZnJvbScpXG5PYmplY3RTZXRQcm90b3R5cGVPZihSZWFkYWJsZS5wcm90b3R5cGUsIFN0cmVhbS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihSZWFkYWJsZSwgU3RyZWFtKVxuY29uc3Qgbm9wID0gKCkgPT4ge31cbmNvbnN0IHsgZXJyb3JPckRlc3Ryb3kgfSA9IGRlc3Ryb3lJbXBsXG5jb25zdCBrT2JqZWN0TW9kZSA9IDEgPDwgMFxuY29uc3Qga0VuZGVkID0gMSA8PCAxXG5jb25zdCBrRW5kRW1pdHRlZCA9IDEgPDwgMlxuY29uc3Qga1JlYWRpbmcgPSAxIDw8IDNcbmNvbnN0IGtDb25zdHJ1Y3RlZCA9IDEgPDwgNFxuY29uc3Qga1N5bmMgPSAxIDw8IDVcbmNvbnN0IGtOZWVkUmVhZGFibGUgPSAxIDw8IDZcbmNvbnN0IGtFbWl0dGVkUmVhZGFibGUgPSAxIDw8IDdcbmNvbnN0IGtSZWFkYWJsZUxpc3RlbmluZyA9IDEgPDwgOFxuY29uc3Qga1Jlc3VtZVNjaGVkdWxlZCA9IDEgPDwgOVxuY29uc3Qga0Vycm9yRW1pdHRlZCA9IDEgPDwgMTBcbmNvbnN0IGtFbWl0Q2xvc2UgPSAxIDw8IDExXG5jb25zdCBrQXV0b0Rlc3Ryb3kgPSAxIDw8IDEyXG5jb25zdCBrRGVzdHJveWVkID0gMSA8PCAxM1xuY29uc3Qga0Nsb3NlZCA9IDEgPDwgMTRcbmNvbnN0IGtDbG9zZUVtaXR0ZWQgPSAxIDw8IDE1XG5jb25zdCBrTXVsdGlBd2FpdERyYWluID0gMSA8PCAxNlxuY29uc3Qga1JlYWRpbmdNb3JlID0gMSA8PCAxN1xuY29uc3Qga0RhdGFFbWl0dGVkID0gMSA8PCAxOFxuXG4vLyBUT0RPKGJlbmphbWluZ3IpIGl0IGlzIGxpa2VseSBzbG93ZXIgdG8gZG8gaXQgdGhpcyB3YXkgdGhhbiB3aXRoIGZyZWUgZnVuY3Rpb25zXG5mdW5jdGlvbiBtYWtlQml0TWFwRGVzY3JpcHRvcihiaXQpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuc3RhdGUgJiBiaXQpICE9PSAwXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkgdGhpcy5zdGF0ZSB8PSBiaXRcbiAgICAgIGVsc2UgdGhpcy5zdGF0ZSAmPSB+Yml0XG4gICAgfVxuICB9XG59XG5PYmplY3REZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlU3RhdGUucHJvdG90eXBlLCB7XG4gIG9iamVjdE1vZGU6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtPYmplY3RNb2RlKSxcbiAgZW5kZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtFbmRlZCksXG4gIGVuZEVtaXR0ZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtFbmRFbWl0dGVkKSxcbiAgcmVhZGluZzogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa1JlYWRpbmcpLFxuICAvLyBTdHJlYW0gaXMgc3RpbGwgYmVpbmcgY29uc3RydWN0ZWQgYW5kIGNhbm5vdCBiZVxuICAvLyBkZXN0cm95ZWQgdW50aWwgY29uc3RydWN0aW9uIGZpbmlzaGVkIG9yIGZhaWxlZC5cbiAgLy8gQXN5bmMgY29uc3RydWN0aW9uIGlzIG9wdCBpbiwgdGhlcmVmb3JlIHdlIHN0YXJ0IGFzXG4gIC8vIGNvbnN0cnVjdGVkLlxuICBjb25zdHJ1Y3RlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0NvbnN0cnVjdGVkKSxcbiAgLy8gQSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgZXZlbnQgJ3JlYWRhYmxlJy8nZGF0YScgaXMgZW1pdHRlZFxuICAvLyBpbW1lZGlhdGVseSwgb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZVxuICAvLyBhbnkgYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3QgcmVhZCBjYWxsLlxuICBzeW5jOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrU3luYyksXG4gIC8vIFdoZW5ldmVyIHdlIHJldHVybiBudWxsLCB0aGVuIHdlIHNldCBhIGZsYWcgdG8gc2F5XG4gIC8vIHRoYXQgd2UncmUgYXdhaXRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGVtaXNzaW9uLlxuICBuZWVkUmVhZGFibGU6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtOZWVkUmVhZGFibGUpLFxuICBlbWl0dGVkUmVhZGFibGU6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtFbWl0dGVkUmVhZGFibGUpLFxuICByZWFkYWJsZUxpc3RlbmluZzogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa1JlYWRhYmxlTGlzdGVuaW5nKSxcbiAgcmVzdW1lU2NoZWR1bGVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVzdW1lU2NoZWR1bGVkKSxcbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW4uXG4gIGVycm9yRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Vycm9yRW1pdHRlZCksXG4gIGVtaXRDbG9zZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VtaXRDbG9zZSksXG4gIGF1dG9EZXN0cm95OiBtYWtlQml0TWFwRGVzY3JpcHRvcihrQXV0b0Rlc3Ryb3kpLFxuICAvLyBIYXMgaXQgYmVlbiBkZXN0cm95ZWQuXG4gIGRlc3Ryb3llZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Rlc3Ryb3llZCksXG4gIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzdHJlYW0gaGFzIGZpbmlzaGVkIGRlc3Ryb3lpbmcuXG4gIGNsb3NlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Nsb3NlZCksXG4gIC8vIFRydWUgaWYgY2xvc2UgaGFzIGJlZW4gZW1pdHRlZCBvciB3b3VsZCBoYXZlIGJlZW4gZW1pdHRlZFxuICAvLyBkZXBlbmRpbmcgb24gZW1pdENsb3NlLlxuICBjbG9zZUVtaXR0ZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtDbG9zZUVtaXR0ZWQpLFxuICBtdWx0aUF3YWl0RHJhaW46IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtNdWx0aUF3YWl0RHJhaW4pLFxuICAvLyBJZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkLlxuICByZWFkaW5nTW9yZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa1JlYWRpbmdNb3JlKSxcbiAgZGF0YUVtaXR0ZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtEYXRhRW1pdHRlZClcbn0pXG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICBpZiAodHlwZW9mIGlzRHVwbGV4ICE9PSAnYm9vbGVhbicpIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgcmVxdWlyZSgnLi9kdXBsZXgnKVxuXG4gIC8vIEJpdCBtYXAgZmllbGQgdG8gc3RvcmUgUmVhZGFibGVTdGF0ZSBtb3JlIGVmZmNpZW50bHkgd2l0aCAxIGJpdCBwZXIgZmllbGRcbiAgLy8gaW5zdGVhZCBvZiBhIFY4IHNsb3QgcGVyIGZpZWxkLlxuICB0aGlzLnN0YXRlID0ga0VtaXRDbG9zZSB8IGtBdXRvRGVzdHJveSB8IGtDb25zdHJ1Y3RlZCB8IGtTeW5jXG4gIC8vIE9iamVjdCBzdHJlYW0gZmxhZy4gVXNlZCB0byBtYWtlIHJlYWQobikgaWdub3JlIG4gYW5kIHRvXG4gIC8vIG1ha2UgYWxsIHRoZSBidWZmZXIgbWVyZ2luZyBhbmQgbGVuZ3RoIGNoZWNrcyBnbyBhd2F5LlxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9iamVjdE1vZGUpIHRoaXMuc3RhdGUgfD0ga09iamVjdE1vZGVcbiAgaWYgKGlzRHVwbGV4ICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUpIHRoaXMuc3RhdGUgfD0ga09iamVjdE1vZGVcblxuICAvLyBUaGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IG9wdGlvbnNcbiAgICA/IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KVxuICAgIDogZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsoZmFsc2UpXG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKS5cbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpXG4gIHRoaXMubGVuZ3RoID0gMFxuICB0aGlzLnBpcGVzID0gW11cbiAgdGhpcy5mbG93aW5nID0gbnVsbFxuICB0aGlzW2tQYXVzZWRdID0gbnVsbFxuXG4gIC8vIFNob3VsZCBjbG9zZSBiZSBlbWl0dGVkIG9uIGRlc3Ryb3kuIERlZmF1bHRzIHRvIHRydWUuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW1pdENsb3NlID09PSBmYWxzZSkgdGhpcy5zdGF0ZSAmPSB+a0VtaXRDbG9zZVxuXG4gIC8vIFNob3VsZCAuZGVzdHJveSgpIGJlIGNhbGxlZCBhZnRlciAnZW5kJyAoYW5kIHBvdGVudGlhbGx5ICdmaW5pc2gnKS5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hdXRvRGVzdHJveSA9PT0gZmFsc2UpIHRoaXMuc3RhdGUgJj0gfmtBdXRvRGVzdHJveVxuXG4gIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzdHJlYW0gaGFzIGVycm9yZWQuIFdoZW4gdHJ1ZSBubyBmdXJ0aGVyXG4gIC8vIF9yZWFkIGNhbGxzLCAnZGF0YScgb3IgJ3JlYWRhYmxlJyBldmVudHMgc2hvdWxkIG9jY3VyLiBUaGlzIGlzIG5lZWRlZFxuICAvLyBzaW5jZSB3aGVuIGF1dG9EZXN0cm95IGlzIGRpc2FibGVkIHdlIG5lZWQgYSB3YXkgdG8gdGVsbCB3aGV0aGVyIHRoZVxuICAvLyBzdHJlYW0gaGFzIGZhaWxlZC5cbiAgdGhpcy5lcnJvcmVkID0gbnVsbFxuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpIHx8ICd1dGY4J1xuXG4gIC8vIFJlZiB0aGUgcGlwZWQgZGVzdCB3aGljaCB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQgb24gaXRcbiAgLy8gdHlwZTogbnVsbCB8IFdyaXRhYmxlIHwgU2V0PFdyaXRhYmxlPi5cbiAgdGhpcy5hd2FpdERyYWluV3JpdGVycyA9IG51bGxcbiAgdGhpcy5kZWNvZGVyID0gbnVsbFxuICB0aGlzLmVuY29kaW5nID0gbnVsbFxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZylcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZ1xuICB9XG59XG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucylcblxuICAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBSZWFkYWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNS5cbiAgY29uc3QgaXNEdXBsZXggPSB0aGlzIGluc3RhbmNlb2YgcmVxdWlyZSgnLi9kdXBsZXgnKVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcywgaXNEdXBsZXgpXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWRcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3QgPT09ICdmdW5jdGlvbicpIHRoaXMuX2NvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsICYmICFpc0R1cGxleCkgYWRkQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsIHRoaXMpXG4gIH1cbiAgU3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucylcbiAgZGVzdHJveUltcGwuY29uc3RydWN0KHRoaXMsICgpID0+IHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUpIHtcbiAgICAgIG1heWJlUmVhZE1vcmUodGhpcywgdGhpcy5fcmVhZGFibGVTdGF0ZSlcbiAgICB9XG4gIH0pXG59XG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3lcblJlYWRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95XG5SZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICBjYihlcnIpXG59XG5SZWFkYWJsZS5wcm90b3R5cGVbRUUuY2FwdHVyZVJlamVjdGlvblN5bWJvbF0gPSBmdW5jdGlvbiAoZXJyKSB7XG4gIHRoaXMuZGVzdHJveShlcnIpXG59XG5SZWFkYWJsZS5wcm90b3R5cGVbU3ltYm9sQXN5bmNEaXNwb3NlXSA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IGVycm9yXG4gIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcbiAgICBlcnJvciA9IHRoaXMucmVhZGFibGVFbmRlZCA/IG51bGwgOiBuZXcgQWJvcnRFcnJvcigpXG4gICAgdGhpcy5kZXN0cm95KGVycm9yKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBlb3ModGhpcywgKGVycikgPT4gKGVyciAmJiBlcnIgIT09IGVycm9yID8gcmVqZWN0KGVycikgOiByZXNvbHZlKG51bGwpKSkpXG59XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKS5cblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIHRydWUpXG59XG5mdW5jdGlvbiByZWFkYWJsZUFkZENodW5rKHN0cmVhbSwgY2h1bmssIGVuY29kaW5nLCBhZGRUb0Zyb250KSB7XG4gIGRlYnVnKCdyZWFkYWJsZUFkZENodW5rJywgY2h1bmspXG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGxldCBlcnJcbiAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtPYmplY3RNb2RlKSA9PT0gMCkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZ1xuICAgICAgaWYgKHN0YXRlLmVuY29kaW5nICE9PSBlbmNvZGluZykge1xuICAgICAgICBpZiAoYWRkVG9Gcm9udCAmJiBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgICAgIC8vIFdoZW4gdW5zaGlmdGluZywgaWYgc3RhdGUuZW5jb2RpbmcgaXMgc2V0LCB3ZSBoYXZlIHRvIHNhdmVcbiAgICAgICAgICAvLyB0aGUgc3RyaW5nIGluIHRoZSBCdWZmZXJMaXN0IHdpdGggdGhlIHN0YXRlIGVuY29kaW5nLlxuICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKS50b1N0cmluZyhzdGF0ZS5lbmNvZGluZylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZylcbiAgICAgICAgICBlbmNvZGluZyA9ICcnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNodW5rIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICBlbmNvZGluZyA9ICcnXG4gICAgfSBlbHNlIGlmIChTdHJlYW0uX2lzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgIGNodW5rID0gU3RyZWFtLl91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspXG4gICAgICBlbmNvZGluZyA9ICcnXG4gICAgfSBlbHNlIGlmIChjaHVuayAhPSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJywgJ1VpbnQ4QXJyYXknXSwgY2h1bmspXG4gICAgfVxuICB9XG4gIGlmIChlcnIpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVycilcbiAgfSBlbHNlIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnN0YXRlICY9IH5rUmVhZGluZ1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSlcbiAgfSBlbHNlIGlmICgoc3RhdGUuc3RhdGUgJiBrT2JqZWN0TW9kZSkgIT09IDAgfHwgKGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApKSB7XG4gICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgIGlmICgoc3RhdGUuc3RhdGUgJiBrRW5kRW1pdHRlZCkgIT09IDApIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQoKSlcbiAgICAgIGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCB8fCBzdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgICAgIGVsc2UgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIHRydWUpXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRlZCkge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRigpKVxuICAgIH0gZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkIHx8IHN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5zdGF0ZSAmPSB+a1JlYWRpbmdcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspXG4gICAgICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rLmxlbmd0aCAhPT0gMCkgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKVxuICAgICAgICBlbHNlIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICBzdGF0ZS5zdGF0ZSAmPSB+a1JlYWRpbmdcbiAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpXG4gIH1cblxuICAvLyBXZSBjYW4gcHVzaCBtb3JlIGRhdGEgaWYgd2UgYXJlIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLlxuICAvLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZSBtb3JlIGJ5dGVzLlxuICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLCBzdWNoIGFzIHRoZSByZXBsLlxuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmxlbmd0aCA9PT0gMClcbn1cbmZ1bmN0aW9uIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBhZGRUb0Zyb250KSB7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYyAmJiBzdHJlYW0ubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIC8vIFVzZSB0aGUgZ3VhcmQgdG8gYXZvaWQgY3JlYXRpbmcgYFNldCgpYCByZXBlYXRlZGx5XG4gICAgLy8gd2hlbiB3ZSBoYXZlIG11bHRpcGxlIHBpcGVzLlxuICAgIGlmICgoc3RhdGUuc3RhdGUgJiBrTXVsdGlBd2FpdERyYWluKSAhPT0gMCkge1xuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuY2xlYXIoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG51bGxcbiAgICB9XG4gICAgc3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuaylcbiAgfSBlbHNlIHtcbiAgICAvLyBVcGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgIGlmIChhZGRUb0Zyb250KSBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuaylcbiAgICBlbHNlIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKVxuICAgIGlmICgoc3RhdGUuc3RhdGUgJiBrTmVlZFJlYWRhYmxlKSAhPT0gMCkgZW1pdFJlYWRhYmxlKHN0cmVhbSlcbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpXG59XG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICByZXR1cm4gc3RhdGVba1BhdXNlZF0gPT09IHRydWUgfHwgc3RhdGUuZmxvd2luZyA9PT0gZmFsc2Vcbn1cblxuLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IGRlY29kZXJcbiAgLy8gSWYgc2V0RW5jb2RpbmcobnVsbCksIGRlY29kZXIuZW5jb2RpbmcgZXF1YWxzIHV0ZjguXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2RpbmdcbiAgY29uc3QgYnVmZmVyID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJcbiAgLy8gSXRlcmF0ZSBvdmVyIGN1cnJlbnQgYnVmZmVyIHRvIGNvbnZlcnQgYWxyZWFkeSBzdG9yZWQgQnVmZmVyczpcbiAgbGV0IGNvbnRlbnQgPSAnJ1xuICBmb3IgKGNvbnN0IGRhdGEgb2YgYnVmZmVyKSB7XG4gICAgY29udGVudCArPSBkZWNvZGVyLndyaXRlKGRhdGEpXG4gIH1cbiAgYnVmZmVyLmNsZWFyKClcbiAgaWYgKGNvbnRlbnQgIT09ICcnKSBidWZmZXIucHVzaChjb250ZW50KVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aCA9IGNvbnRlbnQubGVuZ3RoXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiAxR0IuXG5jb25zdCBNQVhfSFdNID0gMHg0MDAwMDAwMFxuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+IE1BWF9IV00pIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRSgnc2l6ZScsICc8PSAxR2lCJywgbilcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHMuXG4gICAgbi0tXG4gICAgbiB8PSBuID4+PiAxXG4gICAgbiB8PSBuID4+PiAyXG4gICAgbiB8PSBuID4+PiA0XG4gICAgbiB8PSBuID4+PiA4XG4gICAgbiB8PSBuID4+PiAxNlxuICAgIG4rK1xuICB9XG4gIHJldHVybiBuXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpKSByZXR1cm4gMFxuICBpZiAoKHN0YXRlLnN0YXRlICYga09iamVjdE1vZGUpICE9PSAwKSByZXR1cm4gMVxuICBpZiAoTnVtYmVySXNOYU4obikpIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWUuXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmZpcnN0KCkubGVuZ3RoXG4gICAgcmV0dXJuIHN0YXRlLmxlbmd0aFxuICB9XG4gIGlmIChuIDw9IHN0YXRlLmxlbmd0aCkgcmV0dXJuIG5cbiAgcmV0dXJuIHN0YXRlLmVuZGVkID8gc3RhdGUubGVuZ3RoIDogMFxufVxuXG4vLyBZb3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pXG4gIC8vIFNhbWUgYXMgcGFyc2VJbnQodW5kZWZpbmVkLCAxMCksIGhvd2V2ZXIgVjggNy4zIHBlcmZvcm1hbmNlIHJlZ3Jlc3NlZFxuICAvLyBpbiB0aGlzIHNjZW5hcmlvLCBzbyB3ZSBhcmUgZG9pbmcgaXQgbWFudWFsbHkuXG4gIGlmIChuID09PSB1bmRlZmluZWQpIHtcbiAgICBuID0gTmFOXG4gIH0gZWxzZSBpZiAoIU51bWJlcklzSW50ZWdlcihuKSkge1xuICAgIG4gPSBOdW1iZXJQYXJzZUludChuLCAxMClcbiAgfVxuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3Qgbk9yaWcgPSBuXG5cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pXG4gIGlmIChuICE9PSAwKSBzdGF0ZS5zdGF0ZSAmPSB+a0VtaXR0ZWRSZWFkYWJsZVxuXG4gIC8vIElmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKFxuICAgIG4gPT09IDAgJiZcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgJiZcbiAgICAoKHN0YXRlLmhpZ2hXYXRlck1hcmsgIT09IDAgPyBzdGF0ZS5sZW5ndGggPj0gc3RhdGUuaGlnaFdhdGVyTWFyayA6IHN0YXRlLmxlbmd0aCA+IDApIHx8IHN0YXRlLmVuZGVkKVxuICApIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZClcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKVxuICAgIGVsc2UgZW1pdFJlYWRhYmxlKHRoaXMpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBuID0gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSlcblxuICAvLyBJZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcylcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gQWxsIHRoZSBhY3R1YWwgY2h1bmsgZ2VuZXJhdGlvbiBsb2dpYyBuZWVkcyB0byBiZVxuICAvLyAqYmVsb3cqIHRoZSBjYWxsIHRvIF9yZWFkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGluIGNlcnRhaW5cbiAgLy8gc3ludGhldGljIHN0cmVhbSBjYXNlcywgc3VjaCBhcyBwYXNzdGhyb3VnaCBzdHJlYW1zLCBfcmVhZFxuICAvLyBtYXkgYmUgYSBjb21wbGV0ZWx5IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGljaCBtYXkgY2hhbmdlXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgcmVhZCBidWZmZXIsIHByb3ZpZGluZyBlbm91Z2ggZGF0YSB3aGVuXG4gIC8vIGJlZm9yZSB0aGVyZSB3YXMgKm5vdCogZW5vdWdoLlxuICAvL1xuICAvLyBTbywgdGhlIHN0ZXBzIGFyZTpcbiAgLy8gMS4gRmlndXJlIG91dCB3aGF0IHRoZSBzdGF0ZSBvZiB0aGluZ3Mgd2lsbCBiZSBhZnRlciB3ZSBkb1xuICAvLyBhIHJlYWQgZnJvbSB0aGUgYnVmZmVyLlxuICAvL1xuICAvLyAyLiBJZiB0aGF0IHJlc3VsdGluZyBzdGF0ZSB3aWxsIHRyaWdnZXIgYSBfcmVhZCwgdGhlbiBjYWxsIF9yZWFkLlxuICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgYXN5bmNocm9ub3VzLCBvciBzeW5jaHJvbm91cy4gIFllcywgaXQgaXNcbiAgLy8gZGVlcGx5IHVnbHkgdG8gd3JpdGUgQVBJcyB0aGlzIHdheSwgYnV0IHRoYXQgc3RpbGwgZG9lc24ndCBtZWFuXG4gIC8vIHRoYXQgdGhlIFJlYWRhYmxlIGNsYXNzIHNob3VsZCBiZWhhdmUgaW1wcm9wZXJseSwgYXMgc3RyZWFtcyBhcmVcbiAgLy8gZGVzaWduZWQgdG8gYmUgc3luYy9hc3luYyBhZ25vc3RpYy5cbiAgLy8gVGFrZSBub3RlIGlmIHRoZSBfcmVhZCBjYWxsIGlzIHN5bmMgb3IgYXN5bmMgKGllLCBpZiB0aGUgcmVhZCBjYWxsXG4gIC8vIGhhcyByZXR1cm5lZCB5ZXQpLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBvciBub3QgaXQncyBzYWZlIHRvIGVtaXRcbiAgLy8gJ3JlYWRhYmxlJyBldGMuXG4gIC8vXG4gIC8vIDMuIEFjdHVhbGx5IHB1bGwgdGhlIHJlcXVlc3RlZCBjaHVua3Mgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJldHVybi5cblxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG4gIGxldCBkb1JlYWQgPSAoc3RhdGUuc3RhdGUgJiBrTmVlZFJlYWRhYmxlKSAhPT0gMFxuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZClcblxuICAvLyBJZiB3ZSBjdXJyZW50bHkgaGF2ZSBsZXNzIHRoYW4gdGhlIGhpZ2hXYXRlck1hcmssIHRoZW4gYWxzbyByZWFkIHNvbWUuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlXG4gICAgZGVidWcoJ2xlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrJywgZG9SZWFkKVxuICB9XG5cbiAgLy8gSG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnksIGlmIHdlJ3JlIGNvbnN0cnVjdGluZyB3ZSBoYXZlIHRvIHdhaXQsXG4gIC8vIGFuZCBpZiB3ZSdyZSBkZXN0cm95ZWQgb3IgZXJyb3JlZCwgdGhlbiBpdCdzIG5vdCBhbGxvd2VkLFxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZyB8fCBzdGF0ZS5kZXN0cm95ZWQgfHwgc3RhdGUuZXJyb3JlZCB8fCAhc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICBkb1JlYWQgPSBmYWxzZVxuICAgIGRlYnVnKCdyZWFkaW5nLCBlbmRlZCBvciBjb25zdHJ1Y3RpbmcnLCBkb1JlYWQpXG4gIH0gZWxzZSBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKVxuICAgIHN0YXRlLnN0YXRlIHw9IGtSZWFkaW5nIHwga1N5bmNcbiAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSB6ZXJvLCB0aGVuIHdlICpuZWVkKiBhIHJlYWRhYmxlIGV2ZW50LlxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHN0YXRlLnN0YXRlIHw9IGtOZWVkUmVhZGFibGVcblxuICAgIC8vIENhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0cnkge1xuICAgICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3JPckRlc3Ryb3kodGhpcywgZXJyKVxuICAgIH1cbiAgICBzdGF0ZS5zdGF0ZSAmPSB+a1N5bmNcblxuICAgIC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuICAgIGlmICghc3RhdGUucmVhZGluZykgbiA9IGhvd011Y2hUb1JlYWQobk9yaWcsIHN0YXRlKVxuICB9XG4gIGxldCByZXRcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSlcbiAgZWxzZSByZXQgPSBudWxsXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFya1xuICAgIG4gPSAwXG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG5cbiAgICBpZiAoc3RhdGUubXVsdGlBd2FpdERyYWluKSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbFxuICAgIH1cbiAgfVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gICAgLy8gYXMgc29vbiBhcyB3ZSAqZG8qIGdldCBzb21ldGhpbmcgaW50byB0aGUgYnVmZmVyLlxuICAgIGlmICghc3RhdGUuZW5kZWQpIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWVcblxuICAgIC8vIElmIHdlIHRyaWVkIHRvIHJlYWQoKSBwYXN0IHRoZSBFT0YsIHRoZW4gZW1pdCBlbmQgb24gdGhlIG5leHQgdGljay5cbiAgICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpXG4gIH1cbiAgaWYgKHJldCAhPT0gbnVsbCAmJiAhc3RhdGUuZXJyb3JFbWl0dGVkICYmICFzdGF0ZS5jbG9zZUVtaXR0ZWQpIHtcbiAgICBzdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWVcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGRlYnVnKCdvbkVvZkNodW5rJylcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm5cbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICBjb25zdCBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKClcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuaylcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWVcbiAgaWYgKHN0YXRlLnN5bmMpIHtcbiAgICAvLyBJZiB3ZSBhcmUgc3luYywgd2FpdCB1bnRpbCBuZXh0IHRpY2sgdG8gZW1pdCB0aGUgZGF0YS5cbiAgICAvLyBPdGhlcndpc2Ugd2UgcmlzayBlbWl0dGluZyBkYXRhIGluIHRoZSBmbG93KClcbiAgICAvLyB0aGUgcmVhZGFibGUgY29kZSB0cmlnZ2VycyBkdXJpbmcgYSByZWFkKCkgY2FsbC5cbiAgICBlbWl0UmVhZGFibGUoc3RyZWFtKVxuICB9IGVsc2Uge1xuICAgIC8vIEVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlXG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZVxuICAgIC8vIFdlIGhhdmUgdG8gZW1pdCByZWFkYWJsZSBub3cgdGhhdCB3ZSBhcmUgRU9GLiBNb2R1bGVzXG4gICAgLy8gaW4gdGhlIGVjb3N5c3RlbSAoZS5nLiBkaWNlcikgcmVseSBvbiB0aGlzIGV2ZW50IGJlaW5nIHN5bmMuXG4gICAgZW1pdFJlYWRhYmxlXyhzdHJlYW0pXG4gIH1cbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLm5lZWRSZWFkYWJsZSwgc3RhdGUuZW1pdHRlZFJlYWRhYmxlKVxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZVxuICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5mbG93aW5nKVxuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWVcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSlcbiAgfVxufVxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZV8nLCBzdGF0ZS5kZXN0cm95ZWQsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpXG4gIGlmICghc3RhdGUuZGVzdHJveWVkICYmICFzdGF0ZS5lcnJvcmVkICYmIChzdGF0ZS5sZW5ndGggfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJylcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhlIHN0cmVhbSBuZWVkcyBhbm90aGVyIHJlYWRhYmxlIGV2ZW50IGlmOlxuICAvLyAxLiBJdCBpcyBub3QgZmxvd2luZywgYXMgdGhlIGZsb3cgbWVjaGFuaXNtIHdpbGwgdGFrZVxuICAvLyAgICBjYXJlIG9mIGl0LlxuICAvLyAyLiBJdCBpcyBub3QgZW5kZWQuXG4gIC8vIDMuIEl0IGlzIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLCBzbyB3ZSBjYW4gc2NoZWR1bGVcbiAgLy8gICAgYW5vdGhlciByZWFkYWJsZSBsYXRlci5cbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gIXN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLmVuZGVkICYmIHN0YXRlLmxlbmd0aCA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gIGZsb3coc3RyZWFtKVxufVxuXG4vLyBBdCB0aGlzIHBvaW50LCB0aGUgdXNlciBoYXMgcHJlc3VtYWJseSBzZWVuIHRoZSAncmVhZGFibGUnIGV2ZW50LFxuLy8gYW5kIGNhbGxlZCByZWFkKCkgdG8gY29uc3VtZSBzb21lIGRhdGEuICB0aGF0IG1heSBoYXZlIHRyaWdnZXJlZFxuLy8gaW4gdHVybiBhbm90aGVyIF9yZWFkKG4pIGNhbGwsIGluIHdoaWNoIGNhc2UgcmVhZGluZyA9IHRydWUgaWZcbi8vIGl0J3MgaW4gcHJvZ3Jlc3MuXG4vLyBIb3dldmVyLCBpZiB3ZSdyZSBub3QgZW5kZWQsIG9yIHJlYWRpbmcsIGFuZCB0aGUgbGVuZ3RoIDwgaHdtLFxuLy8gdGhlbiBnbyBhaGVhZCBhbmQgdHJ5IHRvIHJlYWQgc29tZSBtb3JlIHByZWVtcHRpdmVseS5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmdNb3JlICYmIHN0YXRlLmNvbnN0cnVjdGVkKSB7XG4gICAgc3RhdGUucmVhZGluZ01vcmUgPSB0cnVlXG4gICAgcHJvY2Vzcy5uZXh0VGljayhtYXliZVJlYWRNb3JlXywgc3RyZWFtLCBzdGF0ZSlcbiAgfVxufVxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICAvLyBBdHRlbXB0IHRvIHJlYWQgbW9yZSBkYXRhIGlmIHdlIHNob3VsZC5cbiAgLy9cbiAgLy8gVGhlIGNvbmRpdGlvbnMgZm9yIHJlYWRpbmcgbW9yZSBkYXRhIGFyZSAob25lIG9mKTpcbiAgLy8gLSBOb3QgZW5vdWdoIGRhdGEgYnVmZmVyZWQgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspLiBUaGUgbG9vcFxuICAvLyAgIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZSBidWZmZXIgd2l0aCBlbm91Z2ggZGF0YSBpZiBzdWNoIGRhdGFcbiAgLy8gICBpcyBhdmFpbGFibGUuIElmIGhpZ2hXYXRlck1hcmsgaXMgMCBhbmQgd2UgYXJlIG5vdCBpbiB0aGUgZmxvd2luZyBtb2RlXG4gIC8vICAgd2Ugc2hvdWxkIF9ub3RfIGF0dGVtcHQgdG8gYnVmZmVyIGFueSBleHRyYSBkYXRhLiBXZSdsbCBnZXQgbW9yZSBkYXRhXG4gIC8vICAgd2hlbiB0aGUgc3RyZWFtIGNvbnN1bWVyIGNhbGxzIHJlYWQoKSBpbnN0ZWFkLlxuICAvLyAtIE5vIGRhdGEgaW4gdGhlIGJ1ZmZlciwgYW5kIHRoZSBzdHJlYW0gaXMgaW4gZmxvd2luZyBtb2RlLiBJbiB0aGlzIG1vZGVcbiAgLy8gICB0aGUgbG9vcCBiZWxvdyBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgcmVhZCgpIGlzIGNhbGxlZC4gRmFpbGluZyB0b1xuICAvLyAgIGNhbGwgcmVhZCBoZXJlIHdvdWxkIGFib3J0IHRoZSBmbG93IGFuZCB0aGVyZSdzIG5vIG90aGVyIG1lY2hhbmlzbSBmb3JcbiAgLy8gICBjb250aW51aW5nIHRoZSBmbG93IGlmIHRoZSBzdHJlYW0gY29uc3VtZXIgaGFzIGp1c3Qgc3Vic2NyaWJlZCB0byB0aGVcbiAgLy8gICAnZGF0YScgZXZlbnQuXG4gIC8vXG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBjb25kaXRpb25zIHRvIGtlZXAgcmVhZGluZyBkYXRhLCB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgcHJldmVudCB0aGUgZGF0YSBmcm9tIGJlaW5nIHJlYWQ6XG4gIC8vIC0gVGhlIHN0cmVhbSBoYXMgZW5kZWQgKHN0YXRlLmVuZGVkKS5cbiAgLy8gLSBUaGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyAncmVhZCcgb3BlcmF0aW9uIChzdGF0ZS5yZWFkaW5nKS4gVGhpcyBpcyBhXG4gIC8vICAgY2FzZSB3aGVyZSB0aGUgc3RyZWFtIGhhcyBjYWxsZWQgdGhlIGltcGxlbWVudGF0aW9uIGRlZmluZWQgX3JlYWQoKVxuICAvLyAgIG1ldGhvZCwgYnV0IHRoZXkgYXJlIHByb2Nlc3NpbmcgdGhlIGNhbGwgYXN5bmNocm9ub3VzbHkgYW5kIGhhdmUgX25vdF9cbiAgLy8gICBjYWxsZWQgcHVzaCgpIHdpdGggbmV3IGRhdGEuIEluIHRoaXMgY2FzZSB3ZSBza2lwIHBlcmZvcm1pbmcgbW9yZVxuICAvLyAgIHJlYWQoKXMuIFRoZSBleGVjdXRpb24gZW5kcyBpbiB0aGlzIG1ldGhvZCBhZ2FpbiBhZnRlciB0aGUgX3JlYWQoKSBlbmRzXG4gIC8vICAgdXAgY2FsbGluZyBwdXNoKCkgd2l0aCBtb3JlIGRhdGEuXG4gIHdoaWxlIChcbiAgICAhc3RhdGUucmVhZGluZyAmJlxuICAgICFzdGF0ZS5lbmRlZCAmJlxuICAgIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkpXG4gICkge1xuICAgIGNvbnN0IGxlbiA9IHN0YXRlLmxlbmd0aFxuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpXG4gICAgc3RyZWFtLnJlYWQoMClcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpXG4gICAgICAvLyBEaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlXG59XG5cbi8vIEFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhyb3cgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfcmVhZCgpJylcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIHBpcGVPcHRzKSB7XG4gIGNvbnN0IHNyYyA9IHRoaXNcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGlmIChzdGF0ZS5waXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoIXN0YXRlLm11bHRpQXdhaXREcmFpbikge1xuICAgICAgc3RhdGUubXVsdGlBd2FpdERyYWluID0gdHJ1ZVxuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBuZXcgU2FmZVNldChzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA/IFtzdGF0ZS5hd2FpdERyYWluV3JpdGVyc10gOiBbXSlcbiAgICB9XG4gIH1cbiAgc3RhdGUucGlwZXMucHVzaChkZXN0KVxuICBkZWJ1ZygncGlwZSBjb3VudD0lZCBvcHRzPSVqJywgc3RhdGUucGlwZXMubGVuZ3RoLCBwaXBlT3B0cylcbiAgY29uc3QgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyXG4gIGNvbnN0IGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IHVucGlwZVxuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcHJvY2Vzcy5uZXh0VGljayhlbmRGbilcbiAgZWxzZSBzcmMub25jZSgnZW5kJywgZW5kRm4pXG4gIGRlc3Qub24oJ3VucGlwZScsIG9udW5waXBlKVxuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpXG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZVxuICAgICAgICBjbGVhbnVwKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJylcbiAgICBkZXN0LmVuZCgpXG4gIH1cbiAgbGV0IG9uZHJhaW5cbiAgbGV0IGNsZWFuZWRVcCA9IGZhbHNlXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKVxuICAgIC8vIENsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW4uXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICAgIGlmIChvbmRyYWluKSB7XG4gICAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pXG4gICAgfVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcilcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSlcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKVxuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgdW5waXBlKVxuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSlcbiAgICBjbGVhbmVkVXAgPSB0cnVlXG5cbiAgICAvLyBJZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChvbmRyYWluICYmIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKVxuICB9XG4gIGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICBpZiAoIWNsZWFuZWRVcCkge1xuICAgICAgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA9PT0gMSAmJiBzdGF0ZS5waXBlc1swXSA9PT0gZGVzdCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgMClcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBkZXN0XG4gICAgICAgIHN0YXRlLm11bHRpQXdhaXREcmFpbiA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA+IDEgJiYgc3RhdGUucGlwZXMuaW5jbHVkZXMoZGVzdCkpIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpXG4gICAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmFkZChkZXN0KVxuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKClcbiAgICB9XG4gICAgaWYgKCFvbmRyYWluKSB7XG4gICAgICAvLyBXaGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gICAgICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgICAgIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gICAgICAvLyB0b28gc2xvdy5cbiAgICAgIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMsIGRlc3QpXG4gICAgICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pXG4gICAgfVxuICB9XG4gIHNyYy5vbignZGF0YScsIG9uZGF0YSlcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpXG4gICAgY29uc3QgcmV0ID0gZGVzdC53cml0ZShjaHVuaylcbiAgICBkZWJ1ZygnZGVzdC53cml0ZScsIHJldClcbiAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgcGF1c2UoKVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBIb3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKVxuICAgIHVucGlwZSgpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIGlmIChkZXN0Lmxpc3RlbmVyQ291bnQoJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIGNvbnN0IHMgPSBkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmIChzICYmICFzLmVycm9yRW1pdHRlZCkge1xuICAgICAgICAvLyBVc2VyIGluY29ycmVjdGx5IGVtaXR0ZWQgJ2Vycm9yJyBkaXJlY3RseSBvbiB0aGUgc3RyZWFtLlxuICAgICAgICBlcnJvck9yRGVzdHJveShkZXN0LCBlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc3QuZW1pdCgnZXJyb3InLCBlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG4gIHByZXBlbmRMaXN0ZW5lcihkZXN0LCAnZXJyb3InLCBvbmVycm9yKVxuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpXG4gICAgdW5waXBlKClcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSlcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJylcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gICAgdW5waXBlKClcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpXG4gICAgc3JjLnVucGlwZShkZXN0KVxuICB9XG5cbiAgLy8gVGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG8uXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYylcblxuICAvLyBTdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG5cbiAgaWYgKGRlc3Qud3JpdGFibGVOZWVkRHJhaW4gPT09IHRydWUpIHtcbiAgICBwYXVzZSgpXG4gIH0gZWxzZSBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKVxuICAgIHNyYy5yZXN1bWUoKVxuICB9XG4gIHJldHVybiBkZXN0XG59XG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMsIGRlc3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVPbkRyYWluRnVuY3Rpb25SZXN1bHQoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGVcblxuICAgIC8vIGBvbmRyYWluYCB3aWxsIGNhbGwgZGlyZWN0bHksXG4gICAgLy8gYHRoaXNgIG1heWJlIG5vdCBhIHJlZmVyZW5jZSB0byBkZXN0LFxuICAgIC8vIHNvIHdlIHVzZSB0aGUgcmVhbCBkZXN0IGhlcmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID09PSBkZXN0KSB7XG4gICAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCAxKVxuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBudWxsXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5tdWx0aUF3YWl0RHJhaW4pIHtcbiAgICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpXG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5kZWxldGUoZGVzdClcbiAgICB9XG4gICAgaWYgKCghc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgfHwgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuc2l6ZSA9PT0gMCkgJiYgc3JjLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSkge1xuICAgICAgc3JjLnJlc3VtZSgpXG4gICAgfVxuICB9XG59XG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHVucGlwZUluZm8gPSB7XG4gICAgaGFzVW5waXBlZDogZmFsc2VcbiAgfVxuXG4gIC8vIElmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXNcbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICBjb25zdCBkZXN0cyA9IHN0YXRlLnBpcGVzXG4gICAgc3RhdGUucGlwZXMgPSBbXVxuICAgIHRoaXMucGF1c2UoKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdHMubGVuZ3RoOyBpKyspXG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzLCB7XG4gICAgICAgIGhhc1VucGlwZWQ6IGZhbHNlXG4gICAgICB9KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBUcnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICBjb25zdCBpbmRleCA9IEFycmF5UHJvdG90eXBlSW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdClcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXNcbiAgc3RhdGUucGlwZXMuc3BsaWNlKGluZGV4LCAxKVxuICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAwKSB0aGlzLnBhdXNlKClcbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKVxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBTZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZy5cblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgZm4pIHtcbiAgY29uc3QgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbilcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgLy8gVXBkYXRlIHJlYWRhYmxlTGlzdGVuaW5nIHNvIHRoYXQgcmVzdW1lKCkgbWF5IGJlIGEgbm8tb3BcbiAgICAvLyBhIGZldyBsaW5lcyBkb3duLiBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJykuXG4gICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG5cbiAgICAvLyBUcnkgc3RhcnQgZmxvd2luZyBvbiBuZXh0IHRpY2sgaWYgc3RyZWFtIGlzbid0IGV4cGxpY2l0bHkgcGF1c2VkLlxuICAgIGlmIChzdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkgdGhpcy5yZXN1bWUoKVxuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlXG4gICAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2VcbiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlXG4gICAgICBkZWJ1Zygnb24gcmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLnJlYWRpbmcpXG4gICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKVxuICAgICAgfSBlbHNlIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IFJlYWRhYmxlLnByb3RvdHlwZS5vblxuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICBjb25zdCByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcywgZXYsIGZuKVxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcylcbiAgfVxuICByZXR1cm4gcmVzXG59XG5SZWFkYWJsZS5wcm90b3R5cGUub2ZmID0gUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyXG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2KSB7XG4gIGNvbnN0IHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgaWYgKGV2ID09PSAncmVhZGFibGUnIHx8IGV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcylcbiAgfVxuICByZXR1cm4gcmVzXG59XG5mdW5jdGlvbiB1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyhzZWxmKSB7XG4gIGNvbnN0IHN0YXRlID0gc2VsZi5fcmVhZGFibGVTdGF0ZVxuICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHNlbGYubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgaWYgKHN0YXRlLnJlc3VtZVNjaGVkdWxlZCAmJiBzdGF0ZVtrUGF1c2VkXSA9PT0gZmFsc2UpIHtcbiAgICAvLyBGbG93aW5nIG5lZWRzIHRvIGJlIHNldCB0byB0cnVlIG5vdywgb3RoZXJ3aXNlXG4gICAgLy8gdGhlIHVwY29taW5nIHJlc3VtZSB3aWxsIG5vdCBmbG93LlxuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlXG5cbiAgICAvLyBDcnVkZSB3YXkgdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIHJlc3VtZS5cbiAgfSBlbHNlIGlmIChzZWxmLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDApIHtcbiAgICBzZWxmLnJlc3VtZSgpXG4gIH0gZWxzZSBpZiAoIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgc3RhdGUuZmxvd2luZyA9IG51bGxcbiAgfVxufVxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKVxuICBzZWxmLnJlYWQoMClcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKVxuICAgIC8vIFdlIGZsb3cgb25seSBpZiB0aGVyZSBpcyBubyBvbmUgbGlzdGVuaW5nXG4gICAgLy8gZm9yIHJlYWRhYmxlLCBidXQgd2Ugc3RpbGwgaGF2ZSB0byBjYWxsXG4gICAgLy8gcmVzdW1lKCkuXG4gICAgc3RhdGUuZmxvd2luZyA9ICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZ1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSlcbiAgfVxuICBzdGF0ZVtrUGF1c2VkXSA9IGZhbHNlXG4gIHJldHVybiB0aGlzXG59XG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWVcbiAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpXG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1ZygncmVzdW1lJywgc3RhdGUucmVhZGluZylcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgc3RyZWFtLnJlYWQoMClcbiAgfVxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZVxuICBzdHJlYW0uZW1pdCgncmVzdW1lJylcbiAgZmxvdyhzdHJlYW0pXG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKVxufVxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKVxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkge1xuICAgIGRlYnVnKCdwYXVzZScpXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gZmFsc2VcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJylcbiAgfVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlW2tQYXVzZWRdID0gdHJ1ZVxuICByZXR1cm4gdGhpc1xufVxuZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKVxuICB3aGlsZSAoc3RhdGUuZmxvd2luZyAmJiBzdHJlYW0ucmVhZCgpICE9PSBudWxsKTtcbn1cblxuLy8gV3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIGxldCBwYXVzZWQgPSBmYWxzZVxuXG4gIC8vIFRPRE8gKHJvbmFnKTogU2hvdWxkIHRoaXMuZGVzdHJveShlcnIpIGVtaXRcbiAgLy8gJ2Vycm9yJyBvbiB0aGUgd3JhcHBlZCBzdHJlYW0/IFdvdWxkIHJlcXVpcmVcbiAgLy8gYSBzdGF0aWMgZmFjdG9yeSBtZXRob2QsIGUuZy4gUmVhZGFibGUud3JhcChzdHJlYW0pLlxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmICghdGhpcy5wdXNoKGNodW5rKSAmJiBzdHJlYW0ucGF1c2UpIHtcbiAgICAgIHBhdXNlZCA9IHRydWVcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgfSlcbiAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICBlcnJvck9yRGVzdHJveSh0aGlzLCBlcnIpXG4gIH0pXG4gIHN0cmVhbS5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgdGhpcy5kZXN0cm95KClcbiAgfSlcbiAgc3RyZWFtLm9uKCdkZXN0cm95JywgKCkgPT4ge1xuICAgIHRoaXMuZGVzdHJveSgpXG4gIH0pXG4gIHRoaXMuX3JlYWQgPSAoKSA9PiB7XG4gICAgaWYgKHBhdXNlZCAmJiBzdHJlYW0ucmVzdW1lKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZVxuICAgICAgc3RyZWFtLnJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLiBJbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgY29uc3Qgc3RyZWFtS2V5cyA9IE9iamVjdEtleXMoc3RyZWFtKVxuICBmb3IgKGxldCBqID0gMTsgaiA8IHN0cmVhbUtleXMubGVuZ3RoOyBqKyspIHtcbiAgICBjb25zdCBpID0gc3RyZWFtS2V5c1tqXVxuICAgIGlmICh0aGlzW2ldID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tpXSA9IHN0cmVhbVtpXS5iaW5kKHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2xBc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHN0cmVhbVRvQXN5bmNJdGVyYXRvcih0aGlzKVxufVxuUmVhZGFibGUucHJvdG90eXBlLml0ZXJhdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICByZXR1cm4gc3RyZWFtVG9Bc3luY0l0ZXJhdG9yKHRoaXMsIG9wdGlvbnMpXG59XG5mdW5jdGlvbiBzdHJlYW1Ub0FzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc3RyZWFtLnJlYWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHJlYW0gPSBSZWFkYWJsZS53cmFwKHN0cmVhbSwge1xuICAgICAgb2JqZWN0TW9kZTogdHJ1ZVxuICAgIH0pXG4gIH1cbiAgY29uc3QgaXRlciA9IGNyZWF0ZUFzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKVxuICBpdGVyLnN0cmVhbSA9IHN0cmVhbVxuICByZXR1cm4gaXRlclxufVxuYXN5bmMgZnVuY3Rpb24qIGNyZWF0ZUFzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKSB7XG4gIGxldCBjYWxsYmFjayA9IG5vcFxuICBmdW5jdGlvbiBuZXh0KHJlc29sdmUpIHtcbiAgICBpZiAodGhpcyA9PT0gc3RyZWFtKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICBjYWxsYmFjayA9IG5vcFxuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayA9IHJlc29sdmVcbiAgICB9XG4gIH1cbiAgc3RyZWFtLm9uKCdyZWFkYWJsZScsIG5leHQpXG4gIGxldCBlcnJvclxuICBjb25zdCBjbGVhbnVwID0gZW9zKFxuICAgIHN0cmVhbSxcbiAgICB7XG4gICAgICB3cml0YWJsZTogZmFsc2VcbiAgICB9LFxuICAgIChlcnIpID0+IHtcbiAgICAgIGVycm9yID0gZXJyID8gYWdncmVnYXRlVHdvRXJyb3JzKGVycm9yLCBlcnIpIDogbnVsbFxuICAgICAgY2FsbGJhY2soKVxuICAgICAgY2FsbGJhY2sgPSBub3BcbiAgICB9XG4gIClcbiAgdHJ5IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBzdHJlYW0uZGVzdHJveWVkID8gbnVsbCA6IHN0cmVhbS5yZWFkKClcbiAgICAgIGlmIChjaHVuayAhPT0gbnVsbCkge1xuICAgICAgICB5aWVsZCBjaHVua1xuICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSBlbHNlIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKG5leHQpXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvciA9IGFnZ3JlZ2F0ZVR3b0Vycm9ycyhlcnJvciwgZXJyKVxuICAgIHRocm93IGVycm9yXG4gIH0gZmluYWxseSB7XG4gICAgaWYgKFxuICAgICAgKGVycm9yIHx8IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuZGVzdHJveU9uUmV0dXJuKSAhPT0gZmFsc2UpICYmXG4gICAgICAoZXJyb3IgPT09IHVuZGVmaW5lZCB8fCBzdHJlYW0uX3JlYWRhYmxlU3RhdGUuYXV0b0Rlc3Ryb3kpXG4gICAgKSB7XG4gICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3RyZWFtLCBudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0ub2ZmKCdyZWFkYWJsZScsIG5leHQpXG4gICAgICBjbGVhbnVwKClcbiAgICB9XG4gIH1cbn1cblxuLy8gTWFraW5nIGl0IGV4cGxpY2l0IHRoZXNlIHByb3BlcnRpZXMgYXJlIG5vdCBlbnVtZXJhYmxlXG4vLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbi8vIHVzZXJsYW5kIHdpbGwgZmFpbC5cbk9iamVjdERlZmluZVByb3BlcnRpZXMoUmVhZGFibGUucHJvdG90eXBlLCB7XG4gIHJlYWRhYmxlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gICAgICAvLyByLnJlYWRhYmxlID09PSBmYWxzZSBtZWFucyB0aGF0IHRoaXMgaXMgcGFydCBvZiBhIER1cGxleCBzdHJlYW1cbiAgICAgIC8vIHdoZXJlIHRoZSByZWFkYWJsZSBzaWRlIHdhcyBkaXNhYmxlZCB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgIC8vIENvbXBhdC4gVGhlIHVzZXIgbWlnaHQgbWFudWFsbHkgZGlzYWJsZSByZWFkYWJsZSBzaWRlIHRocm91Z2hcbiAgICAgIC8vIGRlcHJlY2F0ZWQgc2V0dGVyLlxuICAgICAgcmV0dXJuICEhciAmJiByLnJlYWRhYmxlICE9PSBmYWxzZSAmJiAhci5kZXN0cm95ZWQgJiYgIXIuZXJyb3JFbWl0dGVkICYmICFyLmVuZEVtaXR0ZWRcbiAgICB9LFxuICAgIHNldCh2YWwpIHtcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQuXG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gISF2YWxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlRGlkUmVhZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkXG4gICAgfVxuICB9LFxuICByZWFkYWJsZUFib3J0ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgIT09IGZhbHNlICYmXG4gICAgICAgICh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCB8fCB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQpICYmXG4gICAgICAgICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlSGlnaFdhdGVyTWFyazoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlQnVmZmVyOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlRmxvd2luZzoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmdcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBzdGF0ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVMZW5ndGg6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoXG4gICAgfVxuICB9LFxuICByZWFkYWJsZU9iamVjdE1vZGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLm9iamVjdE1vZGUgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVFbmNvZGluZzoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSA/IHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgOiBudWxsXG4gICAgfVxuICB9LFxuICBlcnJvcmVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkIDogbnVsbFxuICAgIH1cbiAgfSxcbiAgY2xvc2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5jbG9zZWQgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZGVzdHJveWVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgOiBmYWxzZVxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBXZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuXG4gICAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZC5cbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlRW5kZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgOiBmYWxzZVxuICAgIH1cbiAgfVxufSlcbk9iamVjdERlZmluZVByb3BlcnRpZXMoUmVhZGFibGVTdGF0ZS5wcm90b3R5cGUsIHtcbiAgLy8gTGVnYWN5IGdldHRlciBmb3IgYHBpcGVzQ291bnRgLlxuICBwaXBlc0NvdW50OiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBpcGVzLmxlbmd0aFxuICAgIH1cbiAgfSxcbiAgLy8gTGVnYWN5IHByb3BlcnR5IGZvciBgcGF1c2VkYC5cbiAgcGF1c2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzW2tQYXVzZWRdICE9PSBmYWxzZVxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICB0aGlzW2tQYXVzZWRdID0gISF2YWx1ZVxuICAgIH1cbiAgfVxufSlcblxuLy8gRXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3RcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZC5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGxcbiAgbGV0IHJldFxuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KClcbiAgZWxzZSBpZiAoIW4gfHwgbiA+PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAvLyBSZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGxpc3QuXG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKVxuICAgIGVsc2UgaWYgKHN0YXRlLmJ1ZmZlci5sZW5ndGggPT09IDEpIHJldCA9IHN0YXRlLmJ1ZmZlci5maXJzdCgpXG4gICAgZWxzZSByZXQgPSBzdGF0ZS5idWZmZXIuY29uY2F0KHN0YXRlLmxlbmd0aClcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKVxuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0LlxuICAgIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25zdW1lKG4sIHN0YXRlLmRlY29kZXIpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGRlYnVnKCdlbmRSZWFkYWJsZScsIHN0YXRlLmVuZEVtaXR0ZWQpXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZVxuICAgIHByb2Nlc3MubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSlcbiAgfVxufVxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZU5UJywgc3RhdGUuZW5kRW1pdHRlZCwgc3RhdGUubGVuZ3RoKVxuXG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVycm9yZWQgJiYgIXN0YXRlLmNsb3NlRW1pdHRlZCAmJiAhc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZVxuICAgIHN0cmVhbS5lbWl0KCdlbmQnKVxuICAgIGlmIChzdHJlYW0ud3JpdGFibGUgJiYgc3RyZWFtLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVuZFdyaXRhYmxlTlQsIHN0cmVhbSlcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgICAvLyBJbiBjYXNlIG9mIGR1cGxleCBzdHJlYW1zIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZWN0XG4gICAgICAvLyBpZiB0aGUgd3JpdGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbC5cbiAgICAgIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICAgICAgY29uc3QgYXV0b0Rlc3Ryb3kgPVxuICAgICAgICAhd1N0YXRlIHx8XG4gICAgICAgICh3U3RhdGUuYXV0b0Rlc3Ryb3kgJiZcbiAgICAgICAgICAvLyBXZSBkb24ndCBleHBlY3QgdGhlIHdyaXRhYmxlIHRvIGV2ZXIgJ2ZpbmlzaCdcbiAgICAgICAgICAvLyBpZiB3cml0YWJsZSBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZS5cbiAgICAgICAgICAod1N0YXRlLmZpbmlzaGVkIHx8IHdTdGF0ZS53cml0YWJsZSA9PT0gZmFsc2UpKVxuICAgICAgaWYgKGF1dG9EZXN0cm95KSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVuZFdyaXRhYmxlTlQoc3RyZWFtKSB7XG4gIGNvbnN0IHdyaXRhYmxlID0gc3RyZWFtLndyaXRhYmxlICYmICFzdHJlYW0ud3JpdGFibGVFbmRlZCAmJiAhc3RyZWFtLmRlc3Ryb3llZFxuICBpZiAod3JpdGFibGUpIHtcbiAgICBzdHJlYW0uZW5kKClcbiAgfVxufVxuUmVhZGFibGUuZnJvbSA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgb3B0cykge1xuICByZXR1cm4gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpXG59XG5sZXQgd2ViU3RyZWFtc0FkYXB0ZXJzXG5cbi8vIExhenkgdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuZnVuY3Rpb24gbGF6eVdlYlN0cmVhbXMoKSB7XG4gIGlmICh3ZWJTdHJlYW1zQWRhcHRlcnMgPT09IHVuZGVmaW5lZCkgd2ViU3RyZWFtc0FkYXB0ZXJzID0ge31cbiAgcmV0dXJuIHdlYlN0cmVhbXNBZGFwdGVyc1xufVxuUmVhZGFibGUuZnJvbVdlYiA9IGZ1bmN0aW9uIChyZWFkYWJsZVN0cmVhbSwgb3B0aW9ucykge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdTdHJlYW1SZWFkYWJsZUZyb21SZWFkYWJsZVN0cmVhbShyZWFkYWJsZVN0cmVhbSwgb3B0aW9ucylcbn1cblJlYWRhYmxlLnRvV2ViID0gZnVuY3Rpb24gKHN0cmVhbVJlYWRhYmxlLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1JlYWRhYmxlU3RyZWFtRnJvbVN0cmVhbVJlYWRhYmxlKHN0cmVhbVJlYWRhYmxlLCBvcHRpb25zKVxufVxuUmVhZGFibGUud3JhcCA9IGZ1bmN0aW9uIChzcmMsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9zcmMkcmVhZGFibGVPYmplY3RNb1xuICByZXR1cm4gbmV3IFJlYWRhYmxlKHtcbiAgICBvYmplY3RNb2RlOlxuICAgICAgKF9yZWYgPVxuICAgICAgICAoX3NyYyRyZWFkYWJsZU9iamVjdE1vID0gc3JjLnJlYWRhYmxlT2JqZWN0TW9kZSkgIT09IG51bGwgJiYgX3NyYyRyZWFkYWJsZU9iamVjdE1vICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IF9zcmMkcmVhZGFibGVPYmplY3RNb1xuICAgICAgICAgIDogc3JjLm9iamVjdE1vZGUpICE9PSBudWxsICYmIF9yZWYgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IF9yZWZcbiAgICAgICAgOiB0cnVlLFxuICAgIC4uLm9wdGlvbnMsXG4gICAgZGVzdHJveShlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3JjLCBlcnIpXG4gICAgICBjYWxsYmFjayhlcnIpXG4gICAgfVxuICB9KS53cmFwKHNyYylcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHtcbiAgQXJyYXlQcm90b3R5cGVTbGljZSxcbiAgRXJyb3IsXG4gIEZ1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2UsXG4gIE9iamVjdERlZmluZVByb3BlcnR5LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzLFxuICBPYmplY3RTZXRQcm90b3R5cGVPZixcbiAgU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2UsXG4gIFN5bWJvbCxcbiAgU3ltYm9sSGFzSW5zdGFuY2Vcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGVcbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlXG5jb25zdCB7IEV2ZW50RW1pdHRlcjogRUUgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCcuL2xlZ2FjeScpLlN0cmVhbVxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCB7IGFkZEFib3J0U2lnbmFsIH0gPSByZXF1aXJlKCcuL2FkZC1hYm9ydC1zaWduYWwnKVxuY29uc3QgeyBnZXRIaWdoV2F0ZXJNYXJrLCBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9zdGF0ZScpXG5jb25zdCB7XG4gIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgRVJSX01VTFRJUExFX0NBTExCQUNLLFxuICBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFLFxuICBFUlJfU1RSRUFNX0RFU1RST1lFRCxcbiAgRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVELFxuICBFUlJfU1RSRUFNX05VTExfVkFMVUVTLFxuICBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxcbiAgRVJSX1VOS05PV05fRU5DT0RJTkdcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpLmNvZGVzXG5jb25zdCB7IGVycm9yT3JEZXN0cm95IH0gPSBkZXN0cm95SW1wbFxuT2JqZWN0U2V0UHJvdG90eXBlT2YoV3JpdGFibGUucHJvdG90eXBlLCBTdHJlYW0ucHJvdG90eXBlKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoV3JpdGFibGUsIFN0cmVhbSlcbmZ1bmN0aW9uIG5vcCgpIHt9XG5jb25zdCBrT25GaW5pc2hlZCA9IFN5bWJvbCgna09uRmluaXNoZWQnKVxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0sIGlzRHVwbGV4KSB7XG4gIC8vIER1cGxleCBzdHJlYW1zIGFyZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYnV0IHNoYXJlXG4gIC8vIHRoZSBzYW1lIG9wdGlvbnMgb2JqZWN0LlxuICAvLyBIb3dldmVyLCBzb21lIGNhc2VzIHJlcXVpcmUgc2V0dGluZyBvcHRpb25zIHRvIGRpZmZlcmVudFxuICAvLyB2YWx1ZXMgZm9yIHRoZSByZWFkYWJsZSBhbmQgdGhlIHdyaXRhYmxlIHNpZGVzIG9mIHRoZSBkdXBsZXggc3RyZWFtLFxuICAvLyBlLmcuIG9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlIHZzLiBvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZSwgZXRjLlxuICBpZiAodHlwZW9mIGlzRHVwbGV4ICE9PSAnYm9vbGVhbicpIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgcmVxdWlyZSgnLi9kdXBsZXgnKVxuXG4gIC8vIE9iamVjdCBzdHJlYW0gZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGlzIHN0cmVhbVxuICAvLyBjb250YWlucyBidWZmZXJzIG9yIG9iamVjdHMuXG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5vYmplY3RNb2RlKVxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIShvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlKVxuXG4gIC8vIFRoZSBwb2ludCBhdCB3aGljaCB3cml0ZSgpIHN0YXJ0cyByZXR1cm5pbmcgZmFsc2VcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyB0aGF0IHdlIGFsd2F5cyByZXR1cm4gZmFsc2UgaWZcbiAgLy8gdGhlIGVudGlyZSBidWZmZXIgaXMgbm90IGZsdXNoZWQgaW1tZWRpYXRlbHkgb24gd3JpdGUoKS5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gb3B0aW9uc1xuICAgID8gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpXG4gICAgOiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhmYWxzZSlcblxuICAvLyBpZiBfZmluYWwgaGFzIGJlZW4gY2FsbGVkLlxuICB0aGlzLmZpbmFsQ2FsbGVkID0gZmFsc2VcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlXG4gIC8vIEF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2VcbiAgLy8gV2hlbiBlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCByZXR1cm5lZC5cbiAgdGhpcy5lbmRlZCA9IGZhbHNlXG4gIC8vIFdoZW4gJ2ZpbmlzaCcgaXMgZW1pdHRlZC5cbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG5cbiAgLy8gSGFzIGl0IGJlZW4gZGVzdHJveWVkXG4gIHRoaXMuZGVzdHJveWVkID0gZmFsc2VcblxuICAvLyBTaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIGNvbnN0IG5vRGVjb2RlID0gISEob3B0aW9ucyAmJiBvcHRpb25zLmRlY29kZVN0cmluZ3MgPT09IGZhbHNlKVxuICB0aGlzLmRlY29kZVN0cmluZ3MgPSAhbm9EZWNvZGVcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKSB8fCAndXRmOCdcblxuICAvLyBOb3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDBcblxuICAvLyBBIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZVxuXG4gIC8vIFdoZW4gdHJ1ZSBhbGwgd3JpdGVzIHdpbGwgYmUgYnVmZmVyZWQgdW50aWwgLnVuY29yaygpIGNhbGwuXG4gIHRoaXMuY29ya2VkID0gMFxuXG4gIC8vIEEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlXG5cbiAgLy8gQSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2VcblxuICAvLyBUaGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssIGNiKS5cbiAgdGhpcy5vbndyaXRlID0gb253cml0ZS5iaW5kKHVuZGVmaW5lZCwgc3RyZWFtKVxuXG4gIC8vIFRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLlxuICB0aGlzLndyaXRlY2IgPSBudWxsXG5cbiAgLy8gVGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMFxuXG4gIC8vIFN0b3JhZ2UgZm9yIGRhdGEgcGFzc2VkIHRvIHRoZSBhZnRlcldyaXRlKCkgY2FsbGJhY2sgaW4gY2FzZSBvZlxuICAvLyBzeW5jaHJvbm91cyBfd3JpdGUoKSBjb21wbGV0aW9uLlxuICB0aGlzLmFmdGVyV3JpdGVUaWNrSW5mbyA9IG51bGxcbiAgcmVzZXRCdWZmZXIodGhpcylcblxuICAvLyBOdW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWQuXG4gIHRoaXMucGVuZGluZ2NiID0gMFxuXG4gIC8vIFN0cmVhbSBpcyBzdGlsbCBiZWluZyBjb25zdHJ1Y3RlZCBhbmQgY2Fubm90IGJlXG4gIC8vIGRlc3Ryb3llZCB1bnRpbCBjb25zdHJ1Y3Rpb24gZmluaXNoZWQgb3IgZmFpbGVkLlxuICAvLyBBc3luYyBjb25zdHJ1Y3Rpb24gaXMgb3B0IGluLCB0aGVyZWZvcmUgd2Ugc3RhcnQgYXNcbiAgLy8gY29uc3RydWN0ZWQuXG4gIHRoaXMuY29uc3RydWN0ZWQgPSB0cnVlXG5cbiAgLy8gRW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtcy5cbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlXG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW4uXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2VcblxuICAvLyBTaG91bGQgY2xvc2UgYmUgZW1pdHRlZCBvbiBkZXN0cm95LiBEZWZhdWx0cyB0byB0cnVlLlxuICB0aGlzLmVtaXRDbG9zZSA9ICFvcHRpb25zIHx8IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZVxuXG4gIC8vIFNob3VsZCAuZGVzdHJveSgpIGJlIGNhbGxlZCBhZnRlciAnZmluaXNoJyAoYW5kIHBvdGVudGlhbGx5ICdlbmQnKS5cbiAgdGhpcy5hdXRvRGVzdHJveSA9ICFvcHRpb25zIHx8IG9wdGlvbnMuYXV0b0Rlc3Ryb3kgIT09IGZhbHNlXG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZXJyb3JlZC4gV2hlbiB0cnVlIGFsbCB3cml0ZSgpIGNhbGxzXG4gIC8vIHNob3VsZCByZXR1cm4gZmFsc2UuIFRoaXMgaXMgbmVlZGVkIHNpbmNlIHdoZW4gYXV0b0Rlc3Ryb3lcbiAgLy8gaXMgZGlzYWJsZWQgd2UgbmVlZCBhIHdheSB0byB0ZWxsIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmFpbGVkLlxuICB0aGlzLmVycm9yZWQgPSBudWxsXG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmluaXNoZWQgZGVzdHJveWluZy5cbiAgdGhpcy5jbG9zZWQgPSBmYWxzZVxuXG4gIC8vIFRydWUgaWYgY2xvc2UgaGFzIGJlZW4gZW1pdHRlZCBvciB3b3VsZCBoYXZlIGJlZW4gZW1pdHRlZFxuICAvLyBkZXBlbmRpbmcgb24gZW1pdENsb3NlLlxuICB0aGlzLmNsb3NlRW1pdHRlZCA9IGZhbHNlXG4gIHRoaXNba09uRmluaXNoZWRdID0gW11cbn1cbmZ1bmN0aW9uIHJlc2V0QnVmZmVyKHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlcmVkID0gW11cbiAgc3RhdGUuYnVmZmVyZWRJbmRleCA9IDBcbiAgc3RhdGUuYWxsQnVmZmVycyA9IHRydWVcbiAgc3RhdGUuYWxsTm9vcCA9IHRydWVcbn1cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgcmV0dXJuIEFycmF5UHJvdG90eXBlU2xpY2UodGhpcy5idWZmZXJlZCwgdGhpcy5idWZmZXJlZEluZGV4KVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXJlZFJlcXVlc3RDb3VudCcsIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyZWQubGVuZ3RoIC0gdGhpcy5idWZmZXJlZEluZGV4XG4gIH1cbn0pXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFdyaXRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41LlxuICBjb25zdCBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG4gIGlmICghaXNEdXBsZXggJiYgIUZ1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2UoV3JpdGFibGUsIHRoaXMpKSByZXR1cm4gbmV3IFdyaXRhYmxlKG9wdGlvbnMpXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleClcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3lcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbFxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3QgPT09ICdmdW5jdGlvbicpIHRoaXMuX2NvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsKSBhZGRBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgdGhpcylcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzLCBvcHRpb25zKVxuICBkZXN0cm95SW1wbC5jb25zdHJ1Y3QodGhpcywgKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICAgIGlmICghc3RhdGUud3JpdGluZykge1xuICAgICAgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpXG4gICAgfVxuICAgIGZpbmlzaE1heWJlKHRoaXMsIHN0YXRlKVxuICB9KVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbEhhc0luc3RhbmNlLCB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgdmFsdWU6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICBpZiAoRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZSh0aGlzLCBvYmplY3QpKSByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzICE9PSBXcml0YWJsZSkgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlXG4gIH1cbn0pXG5cbi8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICBlcnJvck9yRGVzdHJveSh0aGlzLCBuZXcgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSgpKVxufVxuZnVuY3Rpb24gX3dyaXRlKHN0cmVhbSwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZ1xuICAgIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nXG4gIH0gZWxzZSB7XG4gICAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2RpbmdcbiAgICBlbHNlIGlmIChlbmNvZGluZyAhPT0gJ2J1ZmZlcicgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkgdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKVxuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wXG4gIH1cbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKVxuICB9IGVsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSkge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJ1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2h1bmsgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIGVuY29kaW5nID0gJ2J1ZmZlcidcbiAgICB9IGVsc2UgaWYgKFN0cmVhbS5faXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgY2h1bmsgPSBTdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaylcbiAgICAgIGVuY29kaW5nID0gJ2J1ZmZlcidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdjaHVuaycsIFsnc3RyaW5nJywgJ0J1ZmZlcicsICdVaW50OEFycmF5J10sIGNodW5rKVxuICAgIH1cbiAgfVxuICBsZXQgZXJyXG4gIGlmIChzdGF0ZS5lbmRpbmcpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQoKVxuICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKVxuICB9XG4gIGlmIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnIpXG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIsIHRydWUpXG4gICAgcmV0dXJuIGVyclxuICB9XG4gIHN0YXRlLnBlbmRpbmdjYisrXG4gIHJldHVybiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgY2IpXG59XG5Xcml0YWJsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICByZXR1cm4gX3dyaXRlKHRoaXMsIGNodW5rLCBlbmNvZGluZywgY2IpID09PSB0cnVlXG59XG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK1xufVxuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLVxuICAgIGlmICghc3RhdGUud3JpdGluZykgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpXG4gIH1cbn1cbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlKGVuY29kaW5nKVxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkgdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKVxuICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIElmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgY29uc3QgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGhcbiAgc3RhdGUubGVuZ3RoICs9IGxlblxuXG4gIC8vIHN0cmVhbS5fd3JpdGUgcmVzZXRzIHN0YXRlLmxlbmd0aFxuICBjb25zdCByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gIC8vIFdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkgc3RhdGUubmVlZERyYWluID0gdHJ1ZVxuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQgfHwgc3RhdGUuZXJyb3JlZCB8fCAhc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICBzdGF0ZS5idWZmZXJlZC5wdXNoKHtcbiAgICAgIGNodW5rLFxuICAgICAgZW5jb2RpbmcsXG4gICAgICBjYWxsYmFja1xuICAgIH0pXG4gICAgaWYgKHN0YXRlLmFsbEJ1ZmZlcnMgJiYgZW5jb2RpbmcgIT09ICdidWZmZXInKSB7XG4gICAgICBzdGF0ZS5hbGxCdWZmZXJzID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHN0YXRlLmFsbE5vb3AgJiYgY2FsbGJhY2sgIT09IG5vcCkge1xuICAgICAgc3RhdGUuYWxsTm9vcCA9IGZhbHNlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0YXRlLndyaXRlbGVuID0gbGVuXG4gICAgc3RhdGUud3JpdGVjYiA9IGNhbGxiYWNrXG4gICAgc3RhdGUud3JpdGluZyA9IHRydWVcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZVxuICAgIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKVxuICAgIHN0YXRlLnN5bmMgPSBmYWxzZVxuICB9XG5cbiAgLy8gUmV0dXJuIGZhbHNlIGlmIGVycm9yZWQgb3IgZGVzdHJveWVkIGluIG9yZGVyIHRvIGJyZWFrXG4gIC8vIGFueSBzeW5jaHJvbm91cyB3aGlsZShzdHJlYW0ud3JpdGUoZGF0YSkpIGxvb3BzLlxuICByZXR1cm4gcmV0ICYmICFzdGF0ZS5lcnJvcmVkICYmICFzdGF0ZS5kZXN0cm95ZWRcbn1cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW5cbiAgc3RhdGUud3JpdGVjYiA9IGNiXG4gIHN0YXRlLndyaXRpbmcgPSB0cnVlXG4gIHN0YXRlLnN5bmMgPSB0cnVlXG4gIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHN0YXRlLm9ud3JpdGUobmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCd3cml0ZScpKVxuICBlbHNlIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKVxuICBlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKVxuICBzdGF0ZS5zeW5jID0gZmFsc2Vcbn1cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2JcbiAgY2IoZXIpXG4gIC8vIEVuc3VyZSBjYWxsYmFja3MgYXJlIGludm9rZWQgZXZlbiB3aGVuIGF1dG9EZXN0cm95IGlzXG4gIC8vIG5vdCBlbmFibGVkLiBQYXNzaW5nIGBlcmAgaGVyZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2luY2VcbiAgLy8gaXQncyByZWxhdGVkIHRvIG9uZSBzcGVjaWZpYyB3cml0ZSwgbm90IHRvIHRoZSBidWZmZXJlZFxuICAvLyB3cml0ZXMuXG4gIGVycm9yQnVmZmVyKHN0YXRlKVxuICAvLyBUaGlzIGNhbiBlbWl0IGVycm9yLCBidXQgZXJyb3IgbXVzdCBhbHdheXMgZm9sbG93IGNiLlxuICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKVxufVxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IHN5bmMgPSBzdGF0ZS5zeW5jXG4gIGNvbnN0IGNiID0gc3RhdGUud3JpdGVjYlxuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpXG4gICAgcmV0dXJuXG4gIH1cbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlXG4gIHN0YXRlLndyaXRlY2IgPSBudWxsXG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlblxuICBzdGF0ZS53cml0ZWxlbiA9IDBcbiAgaWYgKGVyKSB7XG4gICAgLy8gQXZvaWQgVjggbGVhaywgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzQxMDMjaXNzdWVjb21tZW50LTY1MjAwMjM2NFxuICAgIGVyLnN0YWNrIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cbiAgICBpZiAoIXN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHN0YXRlLmVycm9yZWQgPSBlclxuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCB0byBub3RpZnkgdGhlIHJlYWRhYmxlIHNpZGUgb2YgdGhlXG4gICAgLy8gZXJyb3IuXG4gICAgaWYgKHN0cmVhbS5fcmVhZGFibGVTdGF0ZSAmJiAhc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkID0gZXJcbiAgICB9XG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2sob253cml0ZUVycm9yLCBzdHJlYW0sIHN0YXRlLCBlciwgY2IpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBlciwgY2IpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChzdGF0ZS5idWZmZXJlZC5sZW5ndGggPiBzdGF0ZS5idWZmZXJlZEluZGV4KSB7XG4gICAgICBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKVxuICAgIH1cbiAgICBpZiAoc3luYykge1xuICAgICAgLy8gSXQgaXMgYSBjb21tb24gY2FzZSB0aGF0IHRoZSBjYWxsYmFjayBwYXNzZWQgdG8gLndyaXRlKCkgaXMgYWx3YXlzXG4gICAgICAvLyB0aGUgc2FtZS4gSW4gdGhhdCBjYXNlLCB3ZSBkbyBub3Qgc2NoZWR1bGUgYSBuZXcgbmV4dFRpY2soKSwgYnV0XG4gICAgICAvLyByYXRoZXIganVzdCBpbmNyZWFzZSBhIGNvdW50ZXIsIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIGF2b2lkXG4gICAgICAvLyBtZW1vcnkgYWxsb2NhdGlvbnMuXG4gICAgICBpZiAoc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvICE9PSBudWxsICYmIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mby5jYiA9PT0gY2IpIHtcbiAgICAgICAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvLmNvdW50KytcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbyA9IHtcbiAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICBjYixcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGFmdGVyV3JpdGVUaWNrLCBzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgMSwgY2IpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBhZnRlcldyaXRlVGljayh7IHN0cmVhbSwgc3RhdGUsIGNvdW50LCBjYiB9KSB7XG4gIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbyA9IG51bGxcbiAgcmV0dXJuIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgY291bnQsIGNiKVxufVxuZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBjb3VudCwgY2IpIHtcbiAgY29uc3QgbmVlZERyYWluID0gIXN0YXRlLmVuZGluZyAmJiAhc3RyZWFtLmRlc3Ryb3llZCAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluXG4gIGlmIChuZWVkRHJhaW4pIHtcbiAgICBzdGF0ZS5uZWVkRHJhaW4gPSBmYWxzZVxuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpXG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiLS1cbiAgICBjYigpXG4gIH1cbiAgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgIGVycm9yQnVmZmVyKHN0YXRlKVxuICB9XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpXG59XG5cbi8vIElmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBpbnZva2UgY2FsbGJhY2tzLlxuZnVuY3Rpb24gZXJyb3JCdWZmZXIoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICByZXR1cm5cbiAgfVxuICBmb3IgKGxldCBuID0gc3RhdGUuYnVmZmVyZWRJbmRleDsgbiA8IHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aDsgKytuKSB7XG4gICAgdmFyIF9zdGF0ZSRlcnJvcmVkXG4gICAgY29uc3QgeyBjaHVuaywgY2FsbGJhY2sgfSA9IHN0YXRlLmJ1ZmZlcmVkW25dXG4gICAgY29uc3QgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGhcbiAgICBzdGF0ZS5sZW5ndGggLT0gbGVuXG4gICAgY2FsbGJhY2soXG4gICAgICAoX3N0YXRlJGVycm9yZWQgPSBzdGF0ZS5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfc3RhdGUkZXJyb3JlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gX3N0YXRlJGVycm9yZWRcbiAgICAgICAgOiBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3dyaXRlJylcbiAgICApXG4gIH1cbiAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb25maW5pc2hDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX3N0YXRlJGVycm9yZWQyXG4gICAgb25maW5pc2hDYWxsYmFja3NbaV0oXG4gICAgICAoX3N0YXRlJGVycm9yZWQyID0gc3RhdGUuZXJyb3JlZCkgIT09IG51bGwgJiYgX3N0YXRlJGVycm9yZWQyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBfc3RhdGUkZXJyb3JlZDJcbiAgICAgICAgOiBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ2VuZCcpXG4gICAgKVxuICB9XG4gIHJlc2V0QnVmZmVyKHN0YXRlKVxufVxuXG4vLyBJZiB0aGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgYnVmZmVyIHdhaXRpbmcsIHRoZW4gcHJvY2VzcyBpdC5cbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmNvcmtlZCB8fCBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nIHx8IHN0YXRlLmRlc3Ryb3llZCB8fCAhc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCB7IGJ1ZmZlcmVkLCBidWZmZXJlZEluZGV4LCBvYmplY3RNb2RlIH0gPSBzdGF0ZVxuICBjb25zdCBidWZmZXJlZExlbmd0aCA9IGJ1ZmZlcmVkLmxlbmd0aCAtIGJ1ZmZlcmVkSW5kZXhcbiAgaWYgKCFidWZmZXJlZExlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG4gIGxldCBpID0gYnVmZmVyZWRJbmRleFxuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gdHJ1ZVxuICBpZiAoYnVmZmVyZWRMZW5ndGggPiAxICYmIHN0cmVhbS5fd3JpdGV2KSB7XG4gICAgc3RhdGUucGVuZGluZ2NiIC09IGJ1ZmZlcmVkTGVuZ3RoIC0gMVxuICAgIGNvbnN0IGNhbGxiYWNrID0gc3RhdGUuYWxsTm9vcFxuICAgICAgPyBub3BcbiAgICAgIDogKGVycikgPT4ge1xuICAgICAgICAgIGZvciAobGV0IG4gPSBpOyBuIDwgYnVmZmVyZWQubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgIGJ1ZmZlcmVkW25dLmNhbGxiYWNrKGVycilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAvLyBNYWtlIGEgY29weSBvZiBgYnVmZmVyZWRgIGlmIGl0J3MgZ29pbmcgdG8gYmUgdXNlZCBieSBgY2FsbGJhY2tgIGFib3ZlLFxuICAgIC8vIHNpbmNlIGBkb1dyaXRlYCB3aWxsIG11dGF0ZSB0aGUgYXJyYXkuXG4gICAgY29uc3QgY2h1bmtzID0gc3RhdGUuYWxsTm9vcCAmJiBpID09PSAwID8gYnVmZmVyZWQgOiBBcnJheVByb3RvdHlwZVNsaWNlKGJ1ZmZlcmVkLCBpKVxuICAgIGNodW5rcy5hbGxCdWZmZXJzID0gc3RhdGUuYWxsQnVmZmVyc1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBjaHVua3MsICcnLCBjYWxsYmFjaylcbiAgICByZXNldEJ1ZmZlcihzdGF0ZSlcbiAgfSBlbHNlIHtcbiAgICBkbyB7XG4gICAgICBjb25zdCB7IGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2sgfSA9IGJ1ZmZlcmVkW2ldXG4gICAgICBidWZmZXJlZFtpKytdID0gbnVsbFxuICAgICAgY29uc3QgbGVuID0gb2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGhcbiAgICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgICB9IHdoaWxlIChpIDwgYnVmZmVyZWQubGVuZ3RoICYmICFzdGF0ZS53cml0aW5nKVxuICAgIGlmIChpID09PSBidWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHJlc2V0QnVmZmVyKHN0YXRlKVxuICAgIH0gZWxzZSBpZiAoaSA+IDI1Nikge1xuICAgICAgYnVmZmVyZWQuc3BsaWNlKDAsIGkpXG4gICAgICBzdGF0ZS5idWZmZXJlZEluZGV4ID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5idWZmZXJlZEluZGV4ID0gaVxuICAgIH1cbiAgfVxuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2Vcbn1cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAodGhpcy5fd3JpdGV2KSB7XG4gICAgdGhpcy5fd3JpdGV2KFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgY2h1bmssXG4gICAgICAgICAgZW5jb2RpbmdcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGNiXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3dyaXRlKCknKVxuICB9XG59XG5Xcml0YWJsZS5wcm90b3R5cGUuX3dyaXRldiA9IG51bGxcbldyaXRhYmxlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gY2h1bmtcbiAgICBjaHVuayA9IG51bGxcbiAgICBlbmNvZGluZyA9IG51bGxcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSBudWxsXG4gIH1cbiAgbGV0IGVyclxuICBpZiAoY2h1bmsgIT09IG51bGwgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJldCA9IF93cml0ZSh0aGlzLCBjaHVuaywgZW5jb2RpbmcpXG4gICAgaWYgKHJldCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnIgPSByZXRcbiAgICB9XG4gIH1cblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrcy5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDFcbiAgICB0aGlzLnVuY29yaygpXG4gIH1cbiAgaWYgKGVycikge1xuICAgIC8vIERvIG5vdGhpbmcuLi5cbiAgfSBlbHNlIGlmICghc3RhdGUuZXJyb3JlZCAmJiAhc3RhdGUuZW5kaW5nKSB7XG4gICAgLy8gVGhpcyBpcyBmb3JnaXZpbmcgaW4gdGVybXMgb2YgdW5uZWNlc3NhcnkgY2FsbHMgdG8gZW5kKCkgYW5kIGNhbiBoaWRlXG4gICAgLy8gbG9naWMgZXJyb3JzLiBIb3dldmVyLCB1c3VhbGx5IHN1Y2ggZXJyb3JzIGFyZSBoYXJtbGVzcyBhbmQgY2F1c2luZyBhXG4gICAgLy8gaGFyZCBlcnJvciBjYW4gYmUgZGlzcHJvcG9ydGlvbmF0ZWx5IGRlc3RydWN0aXZlLiBJdCBpcyBub3QgYWx3YXlzXG4gICAgLy8gdHJpdmlhbCBmb3IgdGhlIHVzZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgZW5kKCkgbmVlZHMgdG8gYmUgY2FsbGVkXG4gICAgLy8gb3Igbm90LlxuXG4gICAgc3RhdGUuZW5kaW5nID0gdHJ1ZVxuICAgIGZpbmlzaE1heWJlKHRoaXMsIHN0YXRlLCB0cnVlKVxuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZVxuICB9IGVsc2UgaWYgKHN0YXRlLmZpbmlzaGVkKSB7XG4gICAgZXJyID0gbmV3IEVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRCgnZW5kJylcbiAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ2VuZCcpXG4gIH1cbiAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChlcnIgfHwgc3RhdGUuZmluaXNoZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVba09uRmluaXNoZWRdLnB1c2goY2IpXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiAoXG4gICAgc3RhdGUuZW5kaW5nICYmXG4gICAgIXN0YXRlLmRlc3Ryb3llZCAmJlxuICAgIHN0YXRlLmNvbnN0cnVjdGVkICYmXG4gICAgc3RhdGUubGVuZ3RoID09PSAwICYmXG4gICAgIXN0YXRlLmVycm9yZWQgJiZcbiAgICBzdGF0ZS5idWZmZXJlZC5sZW5ndGggPT09IDAgJiZcbiAgICAhc3RhdGUuZmluaXNoZWQgJiZcbiAgICAhc3RhdGUud3JpdGluZyAmJlxuICAgICFzdGF0ZS5lcnJvckVtaXR0ZWQgJiZcbiAgICAhc3RhdGUuY2xvc2VFbWl0dGVkXG4gIClcbn1cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIGxldCBjYWxsZWQgPSBmYWxzZVxuICBmdW5jdGlvbiBvbkZpbmlzaChlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciAhPT0gbnVsbCAmJiBlcnIgIT09IHVuZGVmaW5lZCA/IGVyciA6IEVSUl9NVUxUSVBMRV9DQUxMQkFDSygpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWVcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLVxuICAgIGlmIChlcnIpIHtcbiAgICAgIGNvbnN0IG9uZmluaXNoQ2FsbGJhY2tzID0gc3RhdGVba09uRmluaXNoZWRdLnNwbGljZSgwKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBvbmZpbmlzaENhbGxiYWNrc1tpXShlcnIpXG4gICAgICB9XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgc3RhdGUuc3luYylcbiAgICB9IGVsc2UgaWYgKG5lZWRGaW5pc2goc3RhdGUpKSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWVcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKVxuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdC4gRG9uJ3QgY2hlY2sgc3RhdGUuc3luYyBoZXJlLlxuICAgICAgLy8gU29tZSBzdHJlYW1zIGFzc3VtZSAnZmluaXNoJyB3aWxsIGJlIGVtaXR0ZWRcbiAgICAgIC8vIGFzeW5jaHJvbm91c2x5IHJlbGF0aXZlIHRvIF9maW5hbCBjYWxsYmFjay5cbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZpbmlzaCwgc3RyZWFtLCBzdGF0ZSlcbiAgICB9XG4gIH1cbiAgc3RhdGUuc3luYyA9IHRydWVcbiAgc3RhdGUucGVuZGluZ2NiKytcbiAgdHJ5IHtcbiAgICBzdHJlYW0uX2ZpbmFsKG9uRmluaXNoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBvbkZpbmlzaChlcnIpXG4gIH1cbiAgc3RhdGUuc3luYyA9IGZhbHNlXG59XG5mdW5jdGlvbiBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnByZWZpbmlzaGVkICYmICFzdGF0ZS5maW5hbENhbGxlZCkge1xuICAgIGlmICh0eXBlb2Ygc3RyZWFtLl9maW5hbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICBzdGF0ZS5maW5hbENhbGxlZCA9IHRydWVcbiAgICAgIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWVcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSwgc3luYykge1xuICBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSlcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBzdGF0ZS5wZW5kaW5nY2IrK1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKFxuICAgICAgICAgIChzdHJlYW0sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICAgICAgICAgICAgZmluaXNoKHN0cmVhbSwgc3RhdGUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGF0ZS5wZW5kaW5nY2ItLVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICAgICAgc3RhdGUucGVuZGluZ2NiKytcbiAgICAgICAgZmluaXNoKHN0cmVhbSwgc3RhdGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBzdGF0ZS5wZW5kaW5nY2ItLVxuICBzdGF0ZS5maW5pc2hlZCA9IHRydWVcbiAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb25maW5pc2hDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICBvbmZpbmlzaENhbGxiYWNrc1tpXSgpXG4gIH1cbiAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpXG4gIGlmIChzdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAvLyBpZiB0aGUgcmVhZGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbC5cbiAgICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgICBjb25zdCBhdXRvRGVzdHJveSA9XG4gICAgICAhclN0YXRlIHx8XG4gICAgICAoclN0YXRlLmF1dG9EZXN0cm95ICYmXG4gICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0aGUgcmVhZGFibGUgdG8gZXZlciAnZW5kJ1xuICAgICAgICAvLyBpZiByZWFkYWJsZSBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZS5cbiAgICAgICAgKHJTdGF0ZS5lbmRFbWl0dGVkIHx8IHJTdGF0ZS5yZWFkYWJsZSA9PT0gZmFsc2UpKVxuICAgIGlmIChhdXRvRGVzdHJveSkge1xuICAgICAgc3RyZWFtLmRlc3Ryb3koKVxuICAgIH1cbiAgfVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhXcml0YWJsZS5wcm90b3R5cGUsIHtcbiAgY2xvc2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5jbG9zZWQgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZGVzdHJveWVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgOiBmYWxzZVxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5IG1hbmFnaW5nIGRlc3Ryb3llZC5cbiAgICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHcgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gICAgICAvLyB3LndyaXRhYmxlID09PSBmYWxzZSBtZWFucyB0aGF0IHRoaXMgaXMgcGFydCBvZiBhIER1cGxleCBzdHJlYW1cbiAgICAgIC8vIHdoZXJlIHRoZSB3cml0YWJsZSBzaWRlIHdhcyBkaXNhYmxlZCB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgIC8vIENvbXBhdC4gVGhlIHVzZXIgbWlnaHQgbWFudWFsbHkgZGlzYWJsZSB3cml0YWJsZSBzaWRlIHRocm91Z2hcbiAgICAgIC8vIGRlcHJlY2F0ZWQgc2V0dGVyLlxuICAgICAgcmV0dXJuICEhdyAmJiB3LndyaXRhYmxlICE9PSBmYWxzZSAmJiAhdy5kZXN0cm95ZWQgJiYgIXcuZXJyb3JlZCAmJiAhdy5lbmRpbmcgJiYgIXcuZW5kZWRcbiAgICB9LFxuICAgIHNldCh2YWwpIHtcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmxlLlxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9ICEhdmFsXG4gICAgICB9XG4gICAgfVxuICB9LFxuICB3cml0YWJsZUZpbmlzaGVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA6IGZhbHNlXG4gICAgfVxuICB9LFxuICB3cml0YWJsZU9iamVjdE1vZGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLm9iamVjdE1vZGUgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVCdWZmZXI6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVFbmRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nIDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlTmVlZERyYWluOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHdTdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgICAgIGlmICghd1N0YXRlKSByZXR1cm4gZmFsc2VcbiAgICAgIHJldHVybiAhd1N0YXRlLmRlc3Ryb3llZCAmJiAhd1N0YXRlLmVuZGluZyAmJiB3U3RhdGUubmVlZERyYWluXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUhpZ2hXYXRlck1hcms6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUNvcmtlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkIDogMFxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVMZW5ndGg6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGhcbiAgICB9XG4gIH0sXG4gIGVycm9yZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWQgOiBudWxsXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUFib3J0ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGUgIT09IGZhbHNlICYmXG4gICAgICAgICh0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWQpICYmXG4gICAgICAgICF0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkXG4gICAgICApXG4gICAgfVxuICB9XG59KVxuY29uc3QgZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3lcbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG5cbiAgLy8gSW52b2tlIHBlbmRpbmcgY2FsbGJhY2tzLlxuICBpZiAoIXN0YXRlLmRlc3Ryb3llZCAmJiAoc3RhdGUuYnVmZmVyZWRJbmRleCA8IHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCB8fCBzdGF0ZVtrT25GaW5pc2hlZF0ubGVuZ3RoKSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZXJyb3JCdWZmZXIsIHN0YXRlKVxuICB9XG4gIGRlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGNiKVxuICByZXR1cm4gdGhpc1xufVxuV3JpdGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3lcbldyaXRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycilcbn1cbldyaXRhYmxlLnByb3RvdHlwZVtFRS5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgdGhpcy5kZXN0cm95KGVycilcbn1cbmxldCB3ZWJTdHJlYW1zQWRhcHRlcnNcblxuLy8gTGF6eSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG5mdW5jdGlvbiBsYXp5V2ViU3RyZWFtcygpIHtcbiAgaWYgKHdlYlN0cmVhbXNBZGFwdGVycyA9PT0gdW5kZWZpbmVkKSB3ZWJTdHJlYW1zQWRhcHRlcnMgPSB7fVxuICByZXR1cm4gd2ViU3RyZWFtc0FkYXB0ZXJzXG59XG5Xcml0YWJsZS5mcm9tV2ViID0gZnVuY3Rpb24gKHdyaXRhYmxlU3RyZWFtLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1N0cmVhbVdyaXRhYmxlRnJvbVdyaXRhYmxlU3RyZWFtKHdyaXRhYmxlU3RyZWFtLCBvcHRpb25zKVxufVxuV3JpdGFibGUudG9XZWIgPSBmdW5jdGlvbiAoc3RyZWFtV3JpdGFibGUpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3V3JpdGFibGVTdHJlYW1Gcm9tU3RyZWFtV3JpdGFibGUoc3RyZWFtV3JpdGFibGUpXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IGJ1ZmZlck1vZHVsZSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7XG4gIGlzUmVhZGFibGUsXG4gIGlzV3JpdGFibGUsXG4gIGlzSXRlcmFibGUsXG4gIGlzTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzV3JpdGFibGVOb2RlU3RyZWFtLFxuICBpc0R1cGxleE5vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzV3JpdGFibGVTdHJlYW1cbn0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCB7XG4gIEFib3J0RXJyb3IsXG4gIGNvZGVzOiB7IEVSUl9JTlZBTElEX0FSR19UWVBFLCBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUgfVxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgZGVzdHJveWVyIH0gPSByZXF1aXJlKCcuL2Rlc3Ryb3knKVxuY29uc3QgRHVwbGV4ID0gcmVxdWlyZSgnLi9kdXBsZXgnKVxuY29uc3QgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IFdyaXRhYmxlID0gcmVxdWlyZSgnLi93cml0YWJsZScpXG5jb25zdCB7IGNyZWF0ZURlZmVycmVkUHJvbWlzZSB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJylcbmNvbnN0IGZyb20gPSByZXF1aXJlKCcuL2Zyb20nKVxuY29uc3QgQmxvYiA9IGdsb2JhbFRoaXMuQmxvYiB8fCBidWZmZXJNb2R1bGUuQmxvYlxuY29uc3QgaXNCbG9iID1cbiAgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnXG4gICAgPyBmdW5jdGlvbiBpc0Jsb2IoYikge1xuICAgICAgICByZXR1cm4gYiBpbnN0YW5jZW9mIEJsb2JcbiAgICAgIH1cbiAgICA6IGZ1bmN0aW9uIGlzQmxvYihiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuY29uc3QgQWJvcnRDb250cm9sbGVyID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIgfHwgcmVxdWlyZSgnYWJvcnQtY29udHJvbGxlcicpLkFib3J0Q29udHJvbGxlclxuY29uc3QgeyBGdW5jdGlvblByb3RvdHlwZUNhbGwgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuXG4vLyBUaGlzIGlzIG5lZWRlZCBmb3IgcHJlIG5vZGUgMTcuXG5jbGFzcyBEdXBsZXhpZnkgZXh0ZW5kcyBEdXBsZXgge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0Mzg1XG5cbiAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5yZWFkYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLndyaXRhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGUgPSBmYWxzZVxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSB0cnVlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gdHJ1ZVxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IHRydWVcbiAgICB9XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZHVwbGV4aWZ5KGJvZHksIG5hbWUpIHtcbiAgaWYgKGlzRHVwbGV4Tm9kZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBib2R5XG4gIH1cbiAgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgcmVhZGFibGU6IGJvZHlcbiAgICB9KVxuICB9XG4gIGlmIChpc1dyaXRhYmxlTm9kZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBfZHVwbGV4aWZ5KHtcbiAgICAgIHdyaXRhYmxlOiBib2R5XG4gICAgfSlcbiAgfVxuICBpZiAoaXNOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgcmVhZGFibGU6IGZhbHNlXG4gICAgfSlcbiAgfVxuICBpZiAoaXNSZWFkYWJsZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBfZHVwbGV4aWZ5KHtcbiAgICAgIHJlYWRhYmxlOiBSZWFkYWJsZS5mcm9tV2ViKGJvZHkpXG4gICAgfSlcbiAgfVxuICBpZiAoaXNXcml0YWJsZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBfZHVwbGV4aWZ5KHtcbiAgICAgIHdyaXRhYmxlOiBXcml0YWJsZS5mcm9tV2ViKGJvZHkpXG4gICAgfSlcbiAgfVxuICBpZiAodHlwZW9mIGJvZHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCB7IHZhbHVlLCB3cml0ZSwgZmluYWwsIGRlc3Ryb3kgfSA9IGZyb21Bc3luY0dlbihib2R5KVxuICAgIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZyb20oRHVwbGV4aWZ5LCB2YWx1ZSwge1xuICAgICAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgIHdyaXRlLFxuICAgICAgICBmaW5hbCxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgdGhlbiA9IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWx1ZS50aGVuXG4gICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgZFxuICAgICAgY29uc3QgcHJvbWlzZSA9IEZ1bmN0aW9uUHJvdG90eXBlQ2FsbChcbiAgICAgICAgdGhlbixcbiAgICAgICAgdmFsdWUsXG4gICAgICAgICh2YWwpID0+IHtcbiAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ251bGx5JywgJ2JvZHknLCB2YWwpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgZGVzdHJveWVyKGQsIGVycilcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgcmV0dXJuIChkID0gbmV3IER1cGxleGlmeSh7XG4gICAgICAgIC8vIFRPRE8gKHJvbmFnKTogaGlnaFdhdGVyTWFyaz9cbiAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgcmVhZGFibGU6IGZhbHNlLFxuICAgICAgICB3cml0ZSxcbiAgICAgICAgZmluYWwoY2IpIHtcbiAgICAgICAgICBmaW5hbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBwcm9taXNlXG4gICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIG51bGwpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXJyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGRlc3Ryb3lcbiAgICAgIH0pKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKCdJdGVyYWJsZSwgQXN5bmNJdGVyYWJsZSBvciBBc3luY0Z1bmN0aW9uJywgbmFtZSwgdmFsdWUpXG4gIH1cbiAgaWYgKGlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBkdXBsZXhpZnkoYm9keS5hcnJheUJ1ZmZlcigpKVxuICB9XG4gIGlmIChpc0l0ZXJhYmxlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGZyb20oRHVwbGV4aWZ5LCBib2R5LCB7XG4gICAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgfSlcbiAgfVxuICBpZiAoXG4gICAgaXNSZWFkYWJsZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkucmVhZGFibGUpICYmXG4gICAgaXNXcml0YWJsZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkud3JpdGFibGUpXG4gICkge1xuICAgIHJldHVybiBEdXBsZXhpZnkuZnJvbVdlYihib2R5KVxuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS53cml0YWJsZSkgPT09ICdvYmplY3QnIHx8XG4gICAgdHlwZW9mIChib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkucmVhZGFibGUpID09PSAnb2JqZWN0J1xuICApIHtcbiAgICBjb25zdCByZWFkYWJsZSA9XG4gICAgICBib2R5ICE9PSBudWxsICYmIGJvZHkgIT09IHVuZGVmaW5lZCAmJiBib2R5LnJlYWRhYmxlXG4gICAgICAgID8gaXNSZWFkYWJsZU5vZGVTdHJlYW0oYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBib2R5LnJlYWRhYmxlKVxuICAgICAgICAgID8gYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IGJvZHkucmVhZGFibGVcbiAgICAgICAgICA6IGR1cGxleGlmeShib2R5LnJlYWRhYmxlKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IHdyaXRhYmxlID1cbiAgICAgIGJvZHkgIT09IG51bGwgJiYgYm9keSAhPT0gdW5kZWZpbmVkICYmIGJvZHkud3JpdGFibGVcbiAgICAgICAgPyBpc1dyaXRhYmxlTm9kZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkud3JpdGFibGUpXG4gICAgICAgICAgPyBib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogYm9keS53cml0YWJsZVxuICAgICAgICAgIDogZHVwbGV4aWZ5KGJvZHkud3JpdGFibGUpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgcmVhZGFibGUsXG4gICAgICB3cml0YWJsZVxuICAgIH0pXG4gIH1cbiAgY29uc3QgdGhlbiA9IGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS50aGVuXG4gIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGxldCBkXG4gICAgRnVuY3Rpb25Qcm90b3R5cGVDYWxsKFxuICAgICAgdGhlbixcbiAgICAgIGJvZHksXG4gICAgICAodmFsKSA9PiB7XG4gICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgICAgIGQucHVzaCh2YWwpXG4gICAgICAgIH1cbiAgICAgICAgZC5wdXNoKG51bGwpXG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBkZXN0cm95ZXIoZCwgZXJyKVxuICAgICAgfVxuICAgIClcbiAgICByZXR1cm4gKGQgPSBuZXcgRHVwbGV4aWZ5KHtcbiAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICByZWFkKCkge31cbiAgICB9KSlcbiAgfVxuICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgbmFtZSxcbiAgICBbXG4gICAgICAnQmxvYicsXG4gICAgICAnUmVhZGFibGVTdHJlYW0nLFxuICAgICAgJ1dyaXRhYmxlU3RyZWFtJyxcbiAgICAgICdTdHJlYW0nLFxuICAgICAgJ0l0ZXJhYmxlJyxcbiAgICAgICdBc3luY0l0ZXJhYmxlJyxcbiAgICAgICdGdW5jdGlvbicsXG4gICAgICAneyByZWFkYWJsZSwgd3JpdGFibGUgfSBwYWlyJyxcbiAgICAgICdQcm9taXNlJ1xuICAgIF0sXG4gICAgYm9keVxuICApXG59XG5mdW5jdGlvbiBmcm9tQXN5bmNHZW4oZm4pIHtcbiAgbGV0IHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcbiAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgY29uc3Qgc2lnbmFsID0gYWMuc2lnbmFsXG4gIGNvbnN0IHZhbHVlID0gZm4oXG4gICAgKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBfcHJvbWlzZSA9IHByb21pc2VcbiAgICAgICAgcHJvbWlzZSA9IG51bGxcbiAgICAgICAgY29uc3QgeyBjaHVuaywgZG9uZSwgY2IgfSA9IGF3YWl0IF9wcm9taXNlXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgICAgIGlmIChkb25lKSByZXR1cm5cbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKVxuICAgICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgY2F1c2U6IHNpZ25hbC5yZWFzb25cbiAgICAgICAgICB9KVxuICAgICAgICA7KHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKCkpXG4gICAgICAgIHlpZWxkIGNodW5rXG4gICAgICB9XG4gICAgfSkoKSxcbiAgICB7XG4gICAgICBzaWduYWxcbiAgICB9XG4gIClcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZSxcbiAgICB3cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICBjb25zdCBfcmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIHJlc29sdmUgPSBudWxsXG4gICAgICBfcmVzb2x2ZSh7XG4gICAgICAgIGNodW5rLFxuICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgY2JcbiAgICAgIH0pXG4gICAgfSxcbiAgICBmaW5hbChjYikge1xuICAgICAgY29uc3QgX3Jlc29sdmUgPSByZXNvbHZlXG4gICAgICByZXNvbHZlID0gbnVsbFxuICAgICAgX3Jlc29sdmUoe1xuICAgICAgICBkb25lOiB0cnVlLFxuICAgICAgICBjYlxuICAgICAgfSlcbiAgICB9LFxuICAgIGRlc3Ryb3koZXJyLCBjYikge1xuICAgICAgYWMuYWJvcnQoKVxuICAgICAgY2IoZXJyKVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gX2R1cGxleGlmeShwYWlyKSB7XG4gIGNvbnN0IHIgPSBwYWlyLnJlYWRhYmxlICYmIHR5cGVvZiBwYWlyLnJlYWRhYmxlLnJlYWQgIT09ICdmdW5jdGlvbicgPyBSZWFkYWJsZS53cmFwKHBhaXIucmVhZGFibGUpIDogcGFpci5yZWFkYWJsZVxuICBjb25zdCB3ID0gcGFpci53cml0YWJsZVxuICBsZXQgcmVhZGFibGUgPSAhIWlzUmVhZGFibGUocilcbiAgbGV0IHdyaXRhYmxlID0gISFpc1dyaXRhYmxlKHcpXG4gIGxldCBvbmRyYWluXG4gIGxldCBvbmZpbmlzaFxuICBsZXQgb25yZWFkYWJsZVxuICBsZXQgb25jbG9zZVxuICBsZXQgZFxuICBmdW5jdGlvbiBvbmZpbmlzaGVkKGVycikge1xuICAgIGNvbnN0IGNiID0gb25jbG9zZVxuICAgIG9uY2xvc2UgPSBudWxsXG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpXG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGQuZGVzdHJveShlcnIpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyhyb25hZyk6IEF2b2lkIGRvdWJsZSBidWZmZXJpbmcuXG4gIC8vIEltcGxlbWVudCBXcml0YWJsZS9SZWFkYWJsZS9EdXBsZXggdHJhaXRzLlxuICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzMzNTE1LlxuICBkID0gbmV3IER1cGxleGlmeSh7XG4gICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogISEociAhPT0gbnVsbCAmJiByICE9PSB1bmRlZmluZWQgJiYgci5yZWFkYWJsZU9iamVjdE1vZGUpLFxuICAgIHdyaXRhYmxlT2JqZWN0TW9kZTogISEodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy53cml0YWJsZU9iamVjdE1vZGUpLFxuICAgIHJlYWRhYmxlLFxuICAgIHdyaXRhYmxlXG4gIH0pXG4gIGlmICh3cml0YWJsZSkge1xuICAgIGVvcyh3LCAoZXJyKSA9PiB7XG4gICAgICB3cml0YWJsZSA9IGZhbHNlXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGRlc3Ryb3llcihyLCBlcnIpXG4gICAgICB9XG4gICAgICBvbmZpbmlzaGVkKGVycilcbiAgICB9KVxuICAgIGQuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgIGlmICh3LndyaXRlKGNodW5rLCBlbmNvZGluZykpIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25kcmFpbiA9IGNhbGxiYWNrXG4gICAgICB9XG4gICAgfVxuICAgIGQuX2ZpbmFsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB3LmVuZCgpXG4gICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrXG4gICAgfVxuICAgIHcub24oJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9uZHJhaW4pIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbmRyYWluXG4gICAgICAgIG9uZHJhaW4gPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHcub24oJ2ZpbmlzaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbmZpbmlzaCkge1xuICAgICAgICBjb25zdCBjYiA9IG9uZmluaXNoXG4gICAgICAgIG9uZmluaXNoID0gbnVsbFxuICAgICAgICBjYigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBpZiAocmVhZGFibGUpIHtcbiAgICBlb3MociwgKGVycikgPT4ge1xuICAgICAgcmVhZGFibGUgPSBmYWxzZVxuICAgICAgaWYgKGVycikge1xuICAgICAgICBkZXN0cm95ZXIociwgZXJyKVxuICAgICAgfVxuICAgICAgb25maW5pc2hlZChlcnIpXG4gICAgfSlcbiAgICByLm9uKCdyZWFkYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbnJlYWRhYmxlKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25yZWFkYWJsZVxuICAgICAgICBvbnJlYWRhYmxlID0gbnVsbFxuICAgICAgICBjYigpXG4gICAgICB9XG4gICAgfSlcbiAgICByLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkLnB1c2gobnVsbClcbiAgICB9KVxuICAgIGQuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBidWYgPSByLnJlYWQoKVxuICAgICAgICBpZiAoYnVmID09PSBudWxsKSB7XG4gICAgICAgICAgb25yZWFkYWJsZSA9IGQuX3JlYWRcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWQucHVzaChidWYpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZC5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgb25jbG9zZSAhPT0gbnVsbCkge1xuICAgICAgZXJyID0gbmV3IEFib3J0RXJyb3IoKVxuICAgIH1cbiAgICBvbnJlYWRhYmxlID0gbnVsbFxuICAgIG9uZHJhaW4gPSBudWxsXG4gICAgb25maW5pc2ggPSBudWxsXG4gICAgaWYgKG9uY2xvc2UgPT09IG51bGwpIHtcbiAgICAgIGNhbGxiYWNrKGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgb25jbG9zZSA9IGNhbGxiYWNrXG4gICAgICBkZXN0cm95ZXIodywgZXJyKVxuICAgICAgZGVzdHJveWVyKHIsIGVycilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRcbn1cbiIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgZHVwbGV4IHN0cmVhbSBpcyBqdXN0IGEgc3RyZWFtIHRoYXQgaXMgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUuXG4vLyBTaW5jZSBKUyBkb2Vzbid0IGhhdmUgbXVsdGlwbGUgcHJvdG90eXBlIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGljYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzLFxuICBPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIE9iamVjdEtleXMsXG4gIE9iamVjdFNldFByb3RvdHlwZU9mXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleFxuY29uc3QgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IFdyaXRhYmxlID0gcmVxdWlyZSgnLi93cml0YWJsZScpXG5PYmplY3RTZXRQcm90b3R5cGVPZihEdXBsZXgucHJvdG90eXBlLCBSZWFkYWJsZS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihEdXBsZXgsIFJlYWRhYmxlKVxue1xuICBjb25zdCBrZXlzID0gT2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpXG4gIC8vIEFsbG93IHRoZSBrZXlzIGFycmF5IHRvIGJlIEdDJ2VkLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBtZXRob2QgPSBrZXlzW2ldXG4gICAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIER1cGxleC5wcm90b3R5cGVbbWV0aG9kXSA9IFdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdXG4gIH1cbn1cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKVxuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpXG4gIFdyaXRhYmxlLmNhbGwodGhpcywgb3B0aW9ucylcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSBvcHRpb25zLmFsbG93SGFsZk9wZW4gIT09IGZhbHNlXG4gICAgaWYgKG9wdGlvbnMucmVhZGFibGUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChvcHRpb25zLndyaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IHRydWVcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlXG4gIH1cbn1cbk9iamVjdERlZmluZVByb3BlcnRpZXMoRHVwbGV4LnByb3RvdHlwZSwge1xuICB3cml0YWJsZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGUnKVxuICB9LFxuICB3cml0YWJsZUhpZ2hXYXRlck1hcms6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycpXG4gIH0sXG4gIHdyaXRhYmxlT2JqZWN0TW9kZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVPYmplY3RNb2RlJylcbiAgfSxcbiAgd3JpdGFibGVCdWZmZXI6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJylcbiAgfSxcbiAgd3JpdGFibGVMZW5ndGg6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlTGVuZ3RoJylcbiAgfSxcbiAgd3JpdGFibGVGaW5pc2hlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVGaW5pc2hlZCcpXG4gIH0sXG4gIHdyaXRhYmxlQ29ya2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUNvcmtlZCcpXG4gIH0sXG4gIHdyaXRhYmxlRW5kZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlRW5kZWQnKVxuICB9LFxuICB3cml0YWJsZU5lZWREcmFpbjoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVOZWVkRHJhaW4nKVxuICB9LFxuICBkZXN0cm95ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWRcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlXG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5sZXQgd2ViU3RyZWFtc0FkYXB0ZXJzXG5cbi8vIExhenkgdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuZnVuY3Rpb24gbGF6eVdlYlN0cmVhbXMoKSB7XG4gIGlmICh3ZWJTdHJlYW1zQWRhcHRlcnMgPT09IHVuZGVmaW5lZCkgd2ViU3RyZWFtc0FkYXB0ZXJzID0ge31cbiAgcmV0dXJuIHdlYlN0cmVhbXNBZGFwdGVyc1xufVxuRHVwbGV4LmZyb21XZWIgPSBmdW5jdGlvbiAocGFpciwgb3B0aW9ucykge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdTdHJlYW1EdXBsZXhGcm9tUmVhZGFibGVXcml0YWJsZVBhaXIocGFpciwgb3B0aW9ucylcbn1cbkR1cGxleC50b1dlYiA9IGZ1bmN0aW9uIChkdXBsZXgpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3UmVhZGFibGVXcml0YWJsZVBhaXJGcm9tRHVwbGV4KGR1cGxleClcbn1cbmxldCBkdXBsZXhpZnlcbkR1cGxleC5mcm9tID0gZnVuY3Rpb24gKGJvZHkpIHtcbiAgaWYgKCFkdXBsZXhpZnkpIHtcbiAgICBkdXBsZXhpZnkgPSByZXF1aXJlKCcuL2R1cGxleGlmeScpXG4gIH1cbiAgcmV0dXJuIGR1cGxleGlmeShib2R5LCAnYm9keScpXG59XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHRyYW5zZm9ybSBzdHJlYW0gaXMgYSByZWFkYWJsZS93cml0YWJsZSBzdHJlYW0gd2hlcmUgeW91IGRvXG4vLyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gIFNvbWV0aW1lcyBpdCdzIGNhbGxlZCBhIFwiZmlsdGVyXCIsXG4vLyBidXQgdGhhdCdzIG5vdCBhIGdyZWF0IG5hbWUgZm9yIGl0LCBzaW5jZSB0aGF0IGltcGxpZXMgYSB0aGluZyB3aGVyZVxuLy8gc29tZSBiaXRzIHBhc3MgdGhyb3VnaCwgYW5kIG90aGVycyBhcmUgc2ltcGx5IGlnbm9yZWQuICAoVGhhdCB3b3VsZFxuLy8gYmUgYSB2YWxpZCBleGFtcGxlIG9mIGEgdHJhbnNmb3JtLCBvZiBjb3Vyc2UuKVxuLy9cbi8vIFdoaWxlIHRoZSBvdXRwdXQgaXMgY2F1c2FsbHkgcmVsYXRlZCB0byB0aGUgaW5wdXQsIGl0J3Mgbm90IGFcbi8vIG5lY2Vzc2FyaWx5IHN5bW1ldHJpYyBvciBzeW5jaHJvbm91cyB0cmFuc2Zvcm1hdGlvbi4gIEZvciBleGFtcGxlLFxuLy8gYSB6bGliIHN0cmVhbSBtaWdodCB0YWtlIG11bHRpcGxlIHBsYWluLXRleHQgd3JpdGVzKCksIGFuZCB0aGVuXG4vLyBlbWl0IGEgc2luZ2xlIGNvbXByZXNzZWQgY2h1bmsgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuXG4vL1xuLy8gSGVyZSdzIGhvdyB0aGlzIHdvcmtzOlxuLy9cbi8vIFRoZSBUcmFuc2Zvcm0gc3RyZWFtIGhhcyBhbGwgdGhlIGFzcGVjdHMgb2YgdGhlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuLy8gc3RyZWFtIGNsYXNzZXMuICBXaGVuIHlvdSB3cml0ZShjaHVuayksIHRoYXQgY2FsbHMgX3dyaXRlKGNodW5rLGNiKVxuLy8gaW50ZXJuYWxseSwgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBhIGxvdCBvZiBwZW5kaW5nIHdyaXRlc1xuLy8gYnVmZmVyZWQgdXAuICBXaGVuIHlvdSBjYWxsIHJlYWQoKSwgdGhhdCBjYWxscyBfcmVhZChuKSB1bnRpbFxuLy8gdGhlcmUncyBlbm91Z2ggcGVuZGluZyByZWFkYWJsZSBkYXRhIGJ1ZmZlcmVkIHVwLlxuLy9cbi8vIEluIGEgdHJhbnNmb3JtIHN0cmVhbSwgdGhlIHdyaXR0ZW4gZGF0YSBpcyBwbGFjZWQgaW4gYSBidWZmZXIuICBXaGVuXG4vLyBfcmVhZChuKSBpcyBjYWxsZWQsIGl0IHRyYW5zZm9ybXMgdGhlIHF1ZXVlZCB1cCBkYXRhLCBjYWxsaW5nIHRoZVxuLy8gYnVmZmVyZWQgX3dyaXRlIGNiJ3MgYXMgaXQgY29uc3VtZXMgY2h1bmtzLiAgSWYgY29uc3VtaW5nIGEgc2luZ2xlXG4vLyB3cml0dGVuIGNodW5rIHdvdWxkIHJlc3VsdCBpbiBtdWx0aXBsZSBvdXRwdXQgY2h1bmtzLCB0aGVuIHRoZSBmaXJzdFxuLy8gb3V0cHV0dGVkIGJpdCBjYWxscyB0aGUgcmVhZGNiLCBhbmQgc3Vic2VxdWVudCBjaHVua3MganVzdCBnbyBpbnRvXG4vLyB0aGUgcmVhZCBidWZmZXIsIGFuZCB3aWxsIGNhdXNlIGl0IHRvIGVtaXQgJ3JlYWRhYmxlJyBpZiBuZWNlc3NhcnkuXG4vL1xuLy8gVGhpcyB3YXksIGJhY2stcHJlc3N1cmUgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcmVhZGluZyBzaWRlLFxuLy8gc2luY2UgX3JlYWQgaGFzIHRvIGJlIGNhbGxlZCB0byBzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGNodW5rLiAgSG93ZXZlcixcbi8vIGEgcGF0aG9sb2dpY2FsIGluZmxhdGUgdHlwZSBvZiB0cmFuc2Zvcm0gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBidWZmZXJpbmdcbi8vIGhlcmUuICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhIHN0cmVhbSB3aGVyZSBldmVyeSBieXRlIG9mIGlucHV0IGlzXG4vLyBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIGZyb20gMC0yNTUsIGFuZCB0aGVuIHJlc3VsdHMgaW4gdGhhdCBtYW55XG4vLyBieXRlcyBvZiBvdXRwdXQuICBXcml0aW5nIHRoZSA0IGJ5dGVzIHtmZixmZixmZixmZn0gd291bGQgcmVzdWx0IGluXG4vLyAxa2Igb2YgZGF0YSBiZWluZyBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIHlvdSBjb3VsZCB3cml0ZSBhIHZlcnkgc21hbGxcbi8vIGFtb3VudCBvZiBpbnB1dCwgYW5kIGVuZCB1cCB3aXRoIGEgdmVyeSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0LiAgSW5cbi8vIHN1Y2ggYSBwYXRob2xvZ2ljYWwgaW5mbGF0aW5nIG1lY2hhbmlzbSwgdGhlcmUnZCBiZSBubyB3YXkgdG8gdGVsbFxuLy8gdGhlIHN5c3RlbSB0byBzdG9wIGRvaW5nIHRoZSB0cmFuc2Zvcm0uICBBIHNpbmdsZSA0TUIgd3JpdGUgY291bGRcbi8vIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuXG4vL1xuLy8gSG93ZXZlciwgZXZlbiBpbiBzdWNoIGEgcGF0aG9sb2dpY2FsIGNhc2UsIG9ubHkgYSBzaW5nbGUgd3JpdHRlbiBjaHVua1xuLy8gd291bGQgYmUgY29uc3VtZWQsIGFuZCB0aGVuIHRoZSByZXN0IHdvdWxkIHdhaXQgKHVuLXRyYW5zZm9ybWVkKSB1bnRpbFxuLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHRyYW5zZm9ybWVkIGNodW5rIHdlcmUgY29uc3VtZWQuXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE9iamVjdFNldFByb3RvdHlwZU9mLCBTeW1ib2wgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm1cbmNvbnN0IHsgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJykuY29kZXNcbmNvbnN0IER1cGxleCA9IHJlcXVpcmUoJy4vZHVwbGV4JylcbmNvbnN0IHsgZ2V0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9zdGF0ZScpXG5PYmplY3RTZXRQcm90b3R5cGVPZihUcmFuc2Zvcm0ucHJvdG90eXBlLCBEdXBsZXgucHJvdG90eXBlKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoVHJhbnNmb3JtLCBEdXBsZXgpXG5jb25zdCBrQ2FsbGJhY2sgPSBTeW1ib2woJ2tDYWxsYmFjaycpXG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucylcblxuICAvLyBUT0RPIChyb25hZyk6IFRoaXMgc2hvdWxkIHByZWZlcmFibHkgYWx3YXlzIGJlXG4gIC8vIGFwcGxpZWQgYnV0IHdvdWxkIGJlIHNlbXZlci1tYWpvci4gT3IgZXZlbiBiZXR0ZXI7XG4gIC8vIG1ha2UgVHJhbnNmb3JtIGEgUmVhZGFibGUgd2l0aCB0aGUgV3JpdGFibGUgaW50ZXJmYWNlLlxuICBjb25zdCByZWFkYWJsZUhpZ2hXYXRlck1hcmsgPSBvcHRpb25zID8gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywgdHJ1ZSkgOiBudWxsXG4gIGlmIChyZWFkYWJsZUhpZ2hXYXRlck1hcmsgPT09IDApIHtcbiAgICAvLyBBIER1cGxleCB3aWxsIGJ1ZmZlciBib3RoIG9uIHRoZSB3cml0YWJsZSBhbmQgcmVhZGFibGUgc2lkZSB3aGlsZVxuICAgIC8vIGEgVHJhbnNmb3JtIGp1c3Qgd2FudHMgdG8gYnVmZmVyIGh3bSBudW1iZXIgb2YgZWxlbWVudHMuIFRvIGF2b2lkXG4gICAgLy8gYnVmZmVyaW5nIHR3aWNlIHdlIGRpc2FibGUgYnVmZmVyaW5nIG9uIHRoZSB3cml0YWJsZSBzaWRlLlxuICAgIG9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGlnaFdhdGVyTWFyazogbnVsbCxcbiAgICAgIHJlYWRhYmxlSGlnaFdhdGVyTWFyayxcbiAgICAgIC8vIFRPRE8gKHJvbmFnKTogMCBpcyBub3Qgb3B0aW1hbCBzaW5jZSB3ZSBoYXZlXG4gICAgICAvLyBhIFwiYnVnXCIgd2hlcmUgd2UgY2hlY2sgbmVlZERyYWluIGJlZm9yZSBjYWxsaW5nIF93cml0ZSBhbmQgbm90IGFmdGVyLlxuICAgICAgLy8gUmVmczogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzI4ODdcbiAgICAgIC8vIFJlZnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM1OTQxXG4gICAgICB3cml0YWJsZUhpZ2hXYXRlck1hcms6IG9wdGlvbnMud3JpdGFibGVIaWdoV2F0ZXJNYXJrIHx8IDBcbiAgICB9XG4gIH1cbiAgRHVwbGV4LmNhbGwodGhpcywgb3B0aW9ucylcblxuICAvLyBXZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlXG4gIHRoaXNba0NhbGxiYWNrXSA9IG51bGxcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoXG4gIH1cblxuICAvLyBXaGVuIHRoZSB3cml0YWJsZSBzaWRlIGZpbmlzaGVzLCB0aGVuIGZsdXNoIG91dCBhbnl0aGluZyByZW1haW5pbmcuXG4gIC8vIEJhY2t3YXJkcyBjb21wYXQuIFNvbWUgVHJhbnNmb3JtIHN0cmVhbXMgaW5jb3JyZWN0bHkgaW1wbGVtZW50IF9maW5hbFxuICAvLyBpbnN0ZWFkIG9mIG9yIGluIGFkZGl0aW9uIHRvIF9mbHVzaC4gQnkgdXNpbmcgJ3ByZWZpbmlzaCcgaW5zdGVhZCBvZlxuICAvLyBpbXBsZW1lbnRpbmcgX2ZpbmFsIHdlIGNvbnRpbnVlIHN1cHBvcnRpbmcgdGhpcyB1bmZvcnR1bmF0ZSB1c2UgY2FzZS5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKVxufVxuZnVuY3Rpb24gZmluYWwoY2IpIHtcbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICB0aGlzLl9mbHVzaCgoZXIsIGRhdGEpID0+IHtcbiAgICAgIGlmIChlcikge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICBjYihlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koZXIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZGF0YSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMucHVzaChkYXRhKVxuICAgICAgfVxuICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgICBpZiAoY2IpIHtcbiAgICAgICAgY2IoKVxuICAgICAgfVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5wdXNoKG51bGwpXG4gICAgaWYgKGNiKSB7XG4gICAgICBjYigpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcmVmaW5pc2goKSB7XG4gIGlmICh0aGlzLl9maW5hbCAhPT0gZmluYWwpIHtcbiAgICBmaW5hbC5jYWxsKHRoaXMpXG4gIH1cbn1cblRyYW5zZm9ybS5wcm90b3R5cGUuX2ZpbmFsID0gZmluYWxcblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIHRocm93IG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3RyYW5zZm9ybSgpJylcbn1cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgY29uc3QgclN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3U3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IGxlbmd0aCA9IHJTdGF0ZS5sZW5ndGhcbiAgdGhpcy5fdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgKGVyciwgdmFsKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgdGhpcy5wdXNoKHZhbClcbiAgICB9XG4gICAgaWYgKFxuICAgICAgd1N0YXRlLmVuZGVkIHx8XG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0LlxuICAgICAgbGVuZ3RoID09PSByU3RhdGUubGVuZ3RoIHx8XG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0LlxuICAgICAgclN0YXRlLmxlbmd0aCA8IHJTdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gICAgKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0NhbGxiYWNrXSA9IGNhbGxiYWNrXG4gICAgfVxuICB9KVxufVxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXNba0NhbGxiYWNrXSkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpc1trQ2FsbGJhY2tdXG4gICAgdGhpc1trQ2FsbGJhY2tdID0gbnVsbFxuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE9iamVjdFNldFByb3RvdHlwZU9mIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2hcbmNvbnN0IFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtJylcbk9iamVjdFNldFByb3RvdHlwZU9mKFBhc3NUaHJvdWdoLnByb3RvdHlwZSwgVHJhbnNmb3JtLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pXG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucylcbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucylcbn1cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9wdW1wIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHsgQXJyYXlJc0FycmF5LCBQcm9taXNlLCBTeW1ib2xBc3luY0l0ZXJhdG9yLCBTeW1ib2xEaXNwb3NlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCB7IG9uY2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5jb25zdCBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCBEdXBsZXggPSByZXF1aXJlKCcuL2R1cGxleCcpXG5jb25zdCB7XG4gIGFnZ3JlZ2F0ZVR3b0Vycm9ycyxcbiAgY29kZXM6IHtcbiAgICBFUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgICBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUsXG4gICAgRVJSX01JU1NJTkdfQVJHUyxcbiAgICBFUlJfU1RSRUFNX0RFU1RST1lFRCxcbiAgICBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVxuICB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZUFib3J0U2lnbmFsIH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IHtcbiAgaXNJdGVyYWJsZSxcbiAgaXNSZWFkYWJsZSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzTm9kZVN0cmVhbSxcbiAgaXNUcmFuc2Zvcm1TdHJlYW0sXG4gIGlzV2ViU3RyZWFtLFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlYWRhYmxlRmluaXNoZWRcbn0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IEFib3J0Q29udHJvbGxlciA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydENvbnRyb2xsZXJcbmxldCBQYXNzVGhyb3VnaFxubGV0IFJlYWRhYmxlXG5sZXQgYWRkQWJvcnRMaXN0ZW5lclxuZnVuY3Rpb24gZGVzdHJveWVyKHN0cmVhbSwgcmVhZGluZywgd3JpdGluZykge1xuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICBzdHJlYW0ub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICB9KVxuICBjb25zdCBjbGVhbnVwID0gZW9zKFxuICAgIHN0cmVhbSxcbiAgICB7XG4gICAgICByZWFkYWJsZTogcmVhZGluZyxcbiAgICAgIHdyaXRhYmxlOiB3cml0aW5nXG4gICAgfSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBmaW5pc2hlZCA9ICFlcnJcbiAgICB9XG4gIClcbiAgcmV0dXJuIHtcbiAgICBkZXN0cm95OiAoZXJyKSA9PiB7XG4gICAgICBpZiAoZmluaXNoZWQpIHJldHVyblxuICAgICAgZmluaXNoZWQgPSB0cnVlXG4gICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3RyZWFtLCBlcnIgfHwgbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCdwaXBlJykpXG4gICAgfSxcbiAgICBjbGVhbnVwXG4gIH1cbn1cbmZ1bmN0aW9uIHBvcENhbGxiYWNrKHN0cmVhbXMpIHtcbiAgLy8gU3RyZWFtcyBzaG91bGQgbmV2ZXIgYmUgYW4gZW1wdHkgYXJyYXkuIEl0IHNob3VsZCBhbHdheXMgY29udGFpbiBhdCBsZWFzdFxuICAvLyBhIHNpbmdsZSBzdHJlYW0uIFRoZXJlZm9yZSBvcHRpbWl6ZSBmb3IgdGhlIGF2ZXJhZ2UgY2FzZSBpbnN0ZWFkIG9mXG4gIC8vIGNoZWNraW5nIGZvciBsZW5ndGggPT09IDAgYXMgd2VsbC5cbiAgdmFsaWRhdGVGdW5jdGlvbihzdHJlYW1zW3N0cmVhbXMubGVuZ3RoIC0gMV0sICdzdHJlYW1zW3N0cmVhbS5sZW5ndGggLSAxXScpXG4gIHJldHVybiBzdHJlYW1zLnBvcCgpXG59XG5mdW5jdGlvbiBtYWtlQXN5bmNJdGVyYWJsZSh2YWwpIHtcbiAgaWYgKGlzSXRlcmFibGUodmFsKSkge1xuICAgIHJldHVybiB2YWxcbiAgfSBlbHNlIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbSh2YWwpKSB7XG4gICAgLy8gTGVnYWN5IHN0cmVhbXMgYXJlIG5vdCBJdGVyYWJsZS5cbiAgICByZXR1cm4gZnJvbVJlYWRhYmxlKHZhbClcbiAgfVxuICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3ZhbCcsIFsnUmVhZGFibGUnLCAnSXRlcmFibGUnLCAnQXN5bmNJdGVyYWJsZSddLCB2YWwpXG59XG5hc3luYyBmdW5jdGlvbiogZnJvbVJlYWRhYmxlKHZhbCkge1xuICBpZiAoIVJlYWRhYmxlKSB7XG4gICAgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbiAgfVxuICB5aWVsZCogUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbEFzeW5jSXRlcmF0b3JdLmNhbGwodmFsKVxufVxuYXN5bmMgZnVuY3Rpb24gcHVtcFRvTm9kZShpdGVyYWJsZSwgd3JpdGFibGUsIGZpbmlzaCwgeyBlbmQgfSkge1xuICBsZXQgZXJyb3JcbiAgbGV0IG9ucmVzb2x2ZSA9IG51bGxcbiAgY29uc3QgcmVzdW1lID0gKGVycikgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVycm9yID0gZXJyXG4gICAgfVxuICAgIGlmIChvbnJlc29sdmUpIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gb25yZXNvbHZlXG4gICAgICBvbnJlc29sdmUgPSBudWxsXG4gICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9XG4gIGNvbnN0IHdhaXQgPSAoKSA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbnJlc29sdmUgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIHdyaXRhYmxlLm9uKCdkcmFpbicsIHJlc3VtZSlcbiAgY29uc3QgY2xlYW51cCA9IGVvcyhcbiAgICB3cml0YWJsZSxcbiAgICB7XG4gICAgICByZWFkYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHJlc3VtZVxuICApXG4gIHRyeSB7XG4gICAgaWYgKHdyaXRhYmxlLndyaXRhYmxlTmVlZERyYWluKSB7XG4gICAgICBhd2FpdCB3YWl0KClcbiAgICB9XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgICAgaWYgKCF3cml0YWJsZS53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdCgpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmQpIHtcbiAgICAgIHdyaXRhYmxlLmVuZCgpXG4gICAgICBhd2FpdCB3YWl0KClcbiAgICB9XG4gICAgZmluaXNoKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZmluaXNoKGVycm9yICE9PSBlcnIgPyBhZ2dyZWdhdGVUd29FcnJvcnMoZXJyb3IsIGVycikgOiBlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgY2xlYW51cCgpXG4gICAgd3JpdGFibGUub2ZmKCdkcmFpbicsIHJlc3VtZSlcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcHVtcFRvV2ViKHJlYWRhYmxlLCB3cml0YWJsZSwgZmluaXNoLCB7IGVuZCB9KSB7XG4gIGlmIChpc1RyYW5zZm9ybVN0cmVhbSh3cml0YWJsZSkpIHtcbiAgICB3cml0YWJsZSA9IHdyaXRhYmxlLndyaXRhYmxlXG4gIH1cbiAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jZXhhbXBsZS1tYW51YWwtd3JpdGUtd2l0aC1iYWNrcHJlc3N1cmVcbiAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGUuZ2V0V3JpdGVyKClcbiAgdHJ5IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRhYmxlKSB7XG4gICAgICBhd2FpdCB3cml0ZXIucmVhZHlcbiAgICAgIHdyaXRlci53cml0ZShjaHVuaykuY2F0Y2goKCkgPT4ge30pXG4gICAgfVxuICAgIGF3YWl0IHdyaXRlci5yZWFkeVxuICAgIGlmIChlbmQpIHtcbiAgICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpXG4gICAgfVxuICAgIGZpbmlzaCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3cml0ZXIuYWJvcnQoZXJyKVxuICAgICAgZmluaXNoKGVycilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZpbmlzaChlcnIpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwaXBlbGluZSguLi5zdHJlYW1zKSB7XG4gIHJldHVybiBwaXBlbGluZUltcGwoc3RyZWFtcywgb25jZShwb3BDYWxsYmFjayhzdHJlYW1zKSkpXG59XG5mdW5jdGlvbiBwaXBlbGluZUltcGwoc3RyZWFtcywgY2FsbGJhY2ssIG9wdHMpIHtcbiAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAxICYmIEFycmF5SXNBcnJheShzdHJlYW1zWzBdKSkge1xuICAgIHN0cmVhbXMgPSBzdHJlYW1zWzBdXG4gIH1cbiAgaWYgKHN0cmVhbXMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdzdHJlYW1zJylcbiAgfVxuICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBjb25zdCBzaWduYWwgPSBhYy5zaWduYWxcbiAgY29uc3Qgb3V0ZXJTaWduYWwgPSBvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMuc2lnbmFsXG5cbiAgLy8gTmVlZCB0byBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycyBpZiBsYXN0IHN0cmVhbSBpcyByZWFkYWJsZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzM1NDUyXG4gIGNvbnN0IGxhc3RTdHJlYW1DbGVhbnVwID0gW11cbiAgdmFsaWRhdGVBYm9ydFNpZ25hbChvdXRlclNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgZnVuY3Rpb24gYWJvcnQoKSB7XG4gICAgZmluaXNoSW1wbChuZXcgQWJvcnRFcnJvcigpKVxuICB9XG4gIGFkZEFib3J0TGlzdGVuZXIgPSBhZGRBYm9ydExpc3RlbmVyIHx8IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpLmFkZEFib3J0TGlzdGVuZXJcbiAgbGV0IGRpc3Bvc2FibGVcbiAgaWYgKG91dGVyU2lnbmFsKSB7XG4gICAgZGlzcG9zYWJsZSA9IGFkZEFib3J0TGlzdGVuZXIob3V0ZXJTaWduYWwsIGFib3J0KVxuICB9XG4gIGxldCBlcnJvclxuICBsZXQgdmFsdWVcbiAgY29uc3QgZGVzdHJveXMgPSBbXVxuICBsZXQgZmluaXNoQ291bnQgPSAwXG4gIGZ1bmN0aW9uIGZpbmlzaChlcnIpIHtcbiAgICBmaW5pc2hJbXBsKGVyciwgLS1maW5pc2hDb3VudCA9PT0gMClcbiAgfVxuICBmdW5jdGlvbiBmaW5pc2hJbXBsKGVyciwgZmluYWwpIHtcbiAgICB2YXIgX2Rpc3Bvc2FibGVcbiAgICBpZiAoZXJyICYmICghZXJyb3IgfHwgZXJyb3IuY29kZSA9PT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJykpIHtcbiAgICAgIGVycm9yID0gZXJyXG4gICAgfVxuICAgIGlmICghZXJyb3IgJiYgIWZpbmFsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgd2hpbGUgKGRlc3Ryb3lzLmxlbmd0aCkge1xuICAgICAgZGVzdHJveXMuc2hpZnQoKShlcnJvcilcbiAgICB9XG4gICAgOyhfZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGUpID09PSBudWxsIHx8IF9kaXNwb3NhYmxlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfZGlzcG9zYWJsZVtTeW1ib2xEaXNwb3NlXSgpXG4gICAgYWMuYWJvcnQoKVxuICAgIGlmIChmaW5hbCkge1xuICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICBsYXN0U3RyZWFtQ2xlYW51cC5mb3JFYWNoKChmbikgPT4gZm4oKSlcbiAgICAgIH1cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIGVycm9yLCB2YWx1ZSlcbiAgICB9XG4gIH1cbiAgbGV0IHJldFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmVhbXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdHJlYW0gPSBzdHJlYW1zW2ldXG4gICAgY29uc3QgcmVhZGluZyA9IGkgPCBzdHJlYW1zLmxlbmd0aCAtIDFcbiAgICBjb25zdCB3cml0aW5nID0gaSA+IDBcbiAgICBjb25zdCBlbmQgPSByZWFkaW5nIHx8IChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMuZW5kKSAhPT0gZmFsc2VcbiAgICBjb25zdCBpc0xhc3RTdHJlYW0gPSBpID09PSBzdHJlYW1zLmxlbmd0aCAtIDFcbiAgICBpZiAoaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgY29uc3QgeyBkZXN0cm95LCBjbGVhbnVwIH0gPSBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nKVxuICAgICAgICBkZXN0cm95cy5wdXNoKGRlc3Ryb3kpXG4gICAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkgJiYgaXNMYXN0U3RyZWFtKSB7XG4gICAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaChjbGVhbnVwKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENhdGNoIHN0cmVhbSBlcnJvcnMgdGhhdCBvY2N1ciBhZnRlciBwaXBlL3B1bXAgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgIT09ICdBYm9ydEVycm9yJyAmJiBlcnIuY29kZSAhPT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJykge1xuICAgICAgICAgIGZpbmlzaChlcnIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSAmJiBpc0xhc3RTdHJlYW0pIHtcbiAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaCgoKSA9PiB7XG4gICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBpZiAodHlwZW9mIHN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXQgPSBzdHJlYW0oe1xuICAgICAgICAgIHNpZ25hbFxuICAgICAgICB9KVxuICAgICAgICBpZiAoIWlzSXRlcmFibGUocmV0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ0l0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIFN0cmVhbScsICdzb3VyY2UnLCByZXQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShzdHJlYW0pIHx8IGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0oc3RyZWFtKSkge1xuICAgICAgICByZXQgPSBzdHJlYW1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IER1cGxleC5mcm9tKHN0cmVhbSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChpc1RyYW5zZm9ybVN0cmVhbShyZXQpKSB7XG4gICAgICAgIHZhciBfcmV0XG4gICAgICAgIHJldCA9IG1ha2VBc3luY0l0ZXJhYmxlKChfcmV0ID0gcmV0KSA9PT0gbnVsbCB8fCBfcmV0ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfcmV0LnJlYWRhYmxlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gbWFrZUFzeW5jSXRlcmFibGUocmV0KVxuICAgICAgfVxuICAgICAgcmV0ID0gc3RyZWFtKHJldCwge1xuICAgICAgICBzaWduYWxcbiAgICAgIH0pXG4gICAgICBpZiAocmVhZGluZykge1xuICAgICAgICBpZiAoIWlzSXRlcmFibGUocmV0LCB0cnVlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ0FzeW5jSXRlcmFibGUnLCBgdHJhbnNmb3JtWyR7aSAtIDF9XWAsIHJldClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9yZXQyXG4gICAgICAgIGlmICghUGFzc1Rocm91Z2gpIHtcbiAgICAgICAgICBQYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vcGFzc3Rocm91Z2gnKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGxhc3QgYXJndW1lbnQgdG8gcGlwZWxpbmUgaXMgbm90IGEgc3RyZWFtXG4gICAgICAgIC8vIHdlIG11c3QgY3JlYXRlIGEgcHJveHkgc3RyZWFtIHNvIHRoYXQgcGlwZWxpbmUoLi4uKVxuICAgICAgICAvLyBhbHdheXMgcmV0dXJucyBhIHN0cmVhbSB3aGljaCBjYW4gYmUgZnVydGhlclxuICAgICAgICAvLyBjb21wb3NlZCB0aHJvdWdoIGAucGlwZShzdHJlYW0pYC5cblxuICAgICAgICBjb25zdCBwdCA9IG5ldyBQYXNzVGhyb3VnaCh7XG4gICAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEhhbmRsZSBQcm9taXNlcy9BKyBzcGVjLCBgdGhlbmAgY291bGQgYmUgYSBnZXR0ZXIgdGhhdCB0aHJvd3Mgb25cbiAgICAgICAgLy8gc2Vjb25kIHVzZS5cbiAgICAgICAgY29uc3QgdGhlbiA9IChfcmV0MiA9IHJldCkgPT09IG51bGwgfHwgX3JldDIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZXQyLnRoZW5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWxcbiAgICAgICAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcHQud3JpdGUodmFsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgICAgICAgICBwdC5lbmQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgcHQuZGVzdHJveShlcnIpXG4gICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoLCBlcnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2UgaWYgKGlzSXRlcmFibGUocmV0LCB0cnVlKSkge1xuICAgICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgICBwdW1wVG9Ob2RlKHJldCwgcHQsIGZpbmlzaCwge1xuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlYWRhYmxlU3RyZWFtKHJldCkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0ocmV0KSkge1xuICAgICAgICAgIGNvbnN0IHRvUmVhZCA9IHJldC5yZWFkYWJsZSB8fCByZXRcbiAgICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgICAgcHVtcFRvTm9kZSh0b1JlYWQsIHB0LCBmaW5pc2gsIHtcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnQXN5bmNJdGVyYWJsZSBvciBQcm9taXNlJywgJ2Rlc3RpbmF0aW9uJywgcmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldCA9IHB0XG4gICAgICAgIGNvbnN0IHsgZGVzdHJveSwgY2xlYW51cCB9ID0gZGVzdHJveWVyKHJldCwgZmFsc2UsIHRydWUpXG4gICAgICAgIGRlc3Ryb3lzLnB1c2goZGVzdHJveSlcbiAgICAgICAgaWYgKGlzTGFzdFN0cmVhbSkge1xuICAgICAgICAgIGxhc3RTdHJlYW1DbGVhbnVwLnB1c2goY2xlYW51cClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50ICs9IDJcbiAgICAgICAgY29uc3QgY2xlYW51cCA9IHBpcGUocmV0LCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pICYmIGlzTGFzdFN0cmVhbSkge1xuICAgICAgICAgIGxhc3RTdHJlYW1DbGVhbnVwLnB1c2goY2xlYW51cClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVN0cmVhbShyZXQpIHx8IGlzUmVhZGFibGVTdHJlYW0ocmV0KSkge1xuICAgICAgICBjb25zdCB0b1JlYWQgPSByZXQucmVhZGFibGUgfHwgcmV0XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvTm9kZSh0b1JlYWQsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGlzSXRlcmFibGUocmV0KSkge1xuICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgIHB1bXBUb05vZGUocmV0LCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgICAgICd2YWwnLFxuICAgICAgICAgIFsnUmVhZGFibGUnLCAnSXRlcmFibGUnLCAnQXN5bmNJdGVyYWJsZScsICdSZWFkYWJsZVN0cmVhbScsICdUcmFuc2Zvcm1TdHJlYW0nXSxcbiAgICAgICAgICByZXRcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0ID0gc3RyZWFtXG4gICAgfSBlbHNlIGlmIChpc1dlYlN0cmVhbShzdHJlYW0pKSB7XG4gICAgICBpZiAoaXNSZWFkYWJsZU5vZGVTdHJlYW0ocmV0KSkge1xuICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgIHB1bXBUb1dlYihtYWtlQXN5bmNJdGVyYWJsZShyZXQpLCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChpc1JlYWRhYmxlU3RyZWFtKHJldCkgfHwgaXNJdGVyYWJsZShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvV2ViKHJldCwgc3RyZWFtLCBmaW5pc2gsIHtcbiAgICAgICAgICBlbmRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXNUcmFuc2Zvcm1TdHJlYW0ocmV0KSkge1xuICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgIHB1bXBUb1dlYihyZXQucmVhZGFibGUsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICAgICAgJ3ZhbCcsXG4gICAgICAgICAgWydSZWFkYWJsZScsICdJdGVyYWJsZScsICdBc3luY0l0ZXJhYmxlJywgJ1JlYWRhYmxlU3RyZWFtJywgJ1RyYW5zZm9ybVN0cmVhbSddLFxuICAgICAgICAgIHJldFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXQgPSBzdHJlYW1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0ID0gRHVwbGV4LmZyb20oc3RyZWFtKVxuICAgIH1cbiAgfVxuICBpZiAoXG4gICAgKHNpZ25hbCAhPT0gbnVsbCAmJiBzaWduYWwgIT09IHVuZGVmaW5lZCAmJiBzaWduYWwuYWJvcnRlZCkgfHxcbiAgICAob3V0ZXJTaWduYWwgIT09IG51bGwgJiYgb3V0ZXJTaWduYWwgIT09IHVuZGVmaW5lZCAmJiBvdXRlclNpZ25hbC5hYm9ydGVkKVxuICApIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGFib3J0KVxuICB9XG4gIHJldHVybiByZXRcbn1cbmZ1bmN0aW9uIHBpcGUoc3JjLCBkc3QsIGZpbmlzaCwgeyBlbmQgfSkge1xuICBsZXQgZW5kZWQgPSBmYWxzZVxuICBkc3Qub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGlmICghZW5kZWQpIHtcbiAgICAgIC8vIEZpbmlzaCBpZiB0aGUgZGVzdGluYXRpb24gY2xvc2VzIGJlZm9yZSB0aGUgc291cmNlIGhhcyBjb21wbGV0ZWQuXG4gICAgICBmaW5pc2gobmV3IEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFKCkpXG4gICAgfVxuICB9KVxuICBzcmMucGlwZShkc3QsIHtcbiAgICBlbmQ6IGZhbHNlXG4gIH0pIC8vIElmIGVuZCBpcyB0cnVlIHdlIGFscmVhZHkgd2lsbCBoYXZlIGEgbGlzdGVuZXIgdG8gZW5kIGRzdC5cblxuICBpZiAoZW5kKSB7XG4gICAgLy8gQ29tcGF0LiBCZWZvcmUgbm9kZSB2MTAuMTIuMCBzdGRpbyB1c2VkIHRvIHRocm93IGFuIGVycm9yIHNvXG4gICAgLy8gcGlwZSgpIGRpZC9kb2VzIG5vdCBlbmQoKSBzdGRpbyBkZXN0aW5hdGlvbnMuXG4gICAgLy8gTm93IHRoZXkgYWxsb3cgaXQgYnV0IFwic2VjcmV0bHlcIiBkb24ndCBjbG9zZSB0aGUgdW5kZXJseWluZyBmZC5cblxuICAgIGZ1bmN0aW9uIGVuZEZuKCkge1xuICAgICAgZW5kZWQgPSB0cnVlXG4gICAgICBkc3QuZW5kKClcbiAgICB9XG4gICAgaWYgKGlzUmVhZGFibGVGaW5pc2hlZChzcmMpKSB7XG4gICAgICAvLyBFbmQgdGhlIGRlc3RpbmF0aW9uIGlmIHRoZSBzb3VyY2UgaGFzIGFscmVhZHkgZW5kZWQuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVuZEZuKVxuICAgIH0gZWxzZSB7XG4gICAgICBzcmMub25jZSgnZW5kJywgZW5kRm4pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpbmlzaCgpXG4gIH1cbiAgZW9zKFxuICAgIHNyYyxcbiAgICB7XG4gICAgICByZWFkYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgKGVycikgPT4ge1xuICAgICAgY29uc3QgclN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlXG4gICAgICBpZiAoXG4gICAgICAgIGVyciAmJlxuICAgICAgICBlcnIuY29kZSA9PT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJyAmJlxuICAgICAgICByU3RhdGUgJiZcbiAgICAgICAgclN0YXRlLmVuZGVkICYmXG4gICAgICAgICFyU3RhdGUuZXJyb3JlZCAmJlxuICAgICAgICAhclN0YXRlLmVycm9yRW1pdHRlZFxuICAgICAgKSB7XG4gICAgICAgIC8vIFNvbWUgcmVhZGFibGUgc3RyZWFtcyB3aWxsIGVtaXQgJ2Nsb3NlJyBiZWZvcmUgJ2VuZCcuIEhvd2V2ZXIsIHNpbmNlXG4gICAgICAgIC8vIHRoaXMgaXMgb24gdGhlIHJlYWRhYmxlIHNpZGUgJ2VuZCcgc2hvdWxkIHN0aWxsIGJlIGVtaXR0ZWQgaWYgdGhlXG4gICAgICAgIC8vIHN0cmVhbSBoYXMgYmVlbiBlbmRlZCBhbmQgbm8gZXJyb3IgZW1pdHRlZC4gVGhpcyBzaG91bGQgYmUgYWxsb3dlZCBpblxuICAgICAgICAvLyBmYXZvciBvZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gU2luY2UgdGhlIHN0cmVhbSBpcyBwaXBlZCB0byBhXG4gICAgICAgIC8vIGRlc3RpbmF0aW9uIHRoaXMgc2hvdWxkIG5vdCByZXN1bHQgaW4gYW55IG9ic2VydmFibGUgZGlmZmVyZW5jZS5cbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGlzIGlzIGEgd3JpdGFibGUgcHJlbWF0dXJlIGNsb3NlIHNpbmNlXG4gICAgICAgIC8vIGVvcyB3aWxsIG9ubHkgZmFpbCB3aXRoIHByZW1hdHVyZSBjbG9zZSBvbiB0aGUgcmVhZGluZyBzaWRlIGZvclxuICAgICAgICAvLyBkdXBsZXggc3RyZWFtcy5cbiAgICAgICAgc3JjLm9uY2UoJ2VuZCcsIGZpbmlzaCkub25jZSgnZXJyb3InLCBmaW5pc2gpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5pc2goZXJyKVxuICAgICAgfVxuICAgIH1cbiAgKVxuICByZXR1cm4gZW9zKFxuICAgIGRzdCxcbiAgICB7XG4gICAgICByZWFkYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAgZmluaXNoXG4gIClcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwaXBlbGluZUltcGwsXG4gIHBpcGVsaW5lXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCcuL3BpcGVsaW5lJylcbmNvbnN0IER1cGxleCA9IHJlcXVpcmUoJy4vZHVwbGV4JylcbmNvbnN0IHsgZGVzdHJveWVyIH0gPSByZXF1aXJlKCcuL2Rlc3Ryb3knKVxuY29uc3Qge1xuICBpc05vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGUsXG4gIGlzV3JpdGFibGUsXG4gIGlzV2ViU3RyZWFtLFxuICBpc1RyYW5zZm9ybVN0cmVhbSxcbiAgaXNXcml0YWJsZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbVxufSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3Qge1xuICBBYm9ydEVycm9yLFxuICBjb2RlczogeyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUsIEVSUl9NSVNTSU5HX0FSR1MgfVxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbXBvc2UoLi4uc3RyZWFtcykge1xuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygnc3RyZWFtcycpXG4gIH1cbiAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIER1cGxleC5mcm9tKHN0cmVhbXNbMF0pXG4gIH1cbiAgY29uc3Qgb3JnU3RyZWFtcyA9IFsuLi5zdHJlYW1zXVxuICBpZiAodHlwZW9mIHN0cmVhbXNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHJlYW1zWzBdID0gRHVwbGV4LmZyb20oc3RyZWFtc1swXSlcbiAgfVxuICBpZiAodHlwZW9mIHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGlkeCA9IHN0cmVhbXMubGVuZ3RoIC0gMVxuICAgIHN0cmVhbXNbaWR4XSA9IER1cGxleC5mcm9tKHN0cmVhbXNbaWR4XSlcbiAgfVxuICBmb3IgKGxldCBuID0gMDsgbiA8IHN0cmVhbXMubGVuZ3RoOyArK24pIHtcbiAgICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW1zW25dKSAmJiAhaXNXZWJTdHJlYW0oc3RyZWFtc1tuXSkpIHtcbiAgICAgIC8vIFRPRE8ocm9uYWcpOiBBZGQgY2hlY2tzIGZvciBub24gc3RyZWFtcy5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIG4gPCBzdHJlYW1zLmxlbmd0aCAtIDEgJiZcbiAgICAgICEoaXNSZWFkYWJsZShzdHJlYW1zW25dKSB8fCBpc1JlYWRhYmxlU3RyZWFtKHN0cmVhbXNbbl0pIHx8IGlzVHJhbnNmb3JtU3RyZWFtKHN0cmVhbXNbbl0pKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShgc3RyZWFtc1ske259XWAsIG9yZ1N0cmVhbXNbbl0sICdtdXN0IGJlIHJlYWRhYmxlJylcbiAgICB9XG4gICAgaWYgKG4gPiAwICYmICEoaXNXcml0YWJsZShzdHJlYW1zW25dKSB8fCBpc1dyaXRhYmxlU3RyZWFtKHN0cmVhbXNbbl0pIHx8IGlzVHJhbnNmb3JtU3RyZWFtKHN0cmVhbXNbbl0pKSkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShgc3RyZWFtc1ske259XWAsIG9yZ1N0cmVhbXNbbl0sICdtdXN0IGJlIHdyaXRhYmxlJylcbiAgICB9XG4gIH1cbiAgbGV0IG9uZHJhaW5cbiAgbGV0IG9uZmluaXNoXG4gIGxldCBvbnJlYWRhYmxlXG4gIGxldCBvbmNsb3NlXG4gIGxldCBkXG4gIGZ1bmN0aW9uIG9uZmluaXNoZWQoZXJyKSB7XG4gICAgY29uc3QgY2IgPSBvbmNsb3NlXG4gICAgb25jbG9zZSA9IG51bGxcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycilcbiAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgZC5kZXN0cm95KGVycilcbiAgICB9IGVsc2UgaWYgKCFyZWFkYWJsZSAmJiAhd3JpdGFibGUpIHtcbiAgICAgIGQuZGVzdHJveSgpXG4gICAgfVxuICB9XG4gIGNvbnN0IGhlYWQgPSBzdHJlYW1zWzBdXG4gIGNvbnN0IHRhaWwgPSBwaXBlbGluZShzdHJlYW1zLCBvbmZpbmlzaGVkKVxuICBjb25zdCB3cml0YWJsZSA9ICEhKGlzV3JpdGFibGUoaGVhZCkgfHwgaXNXcml0YWJsZVN0cmVhbShoZWFkKSB8fCBpc1RyYW5zZm9ybVN0cmVhbShoZWFkKSlcbiAgY29uc3QgcmVhZGFibGUgPSAhIShpc1JlYWRhYmxlKHRhaWwpIHx8IGlzUmVhZGFibGVTdHJlYW0odGFpbCkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0odGFpbCkpXG5cbiAgLy8gVE9ETyhyb25hZyk6IEF2b2lkIGRvdWJsZSBidWZmZXJpbmcuXG4gIC8vIEltcGxlbWVudCBXcml0YWJsZS9SZWFkYWJsZS9EdXBsZXggdHJhaXRzLlxuICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzMzNTE1LlxuICBkID0gbmV3IER1cGxleCh7XG4gICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgIHdyaXRhYmxlT2JqZWN0TW9kZTogISEoaGVhZCAhPT0gbnVsbCAmJiBoZWFkICE9PSB1bmRlZmluZWQgJiYgaGVhZC53cml0YWJsZU9iamVjdE1vZGUpLFxuICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogISEodGFpbCAhPT0gbnVsbCAmJiB0YWlsICE9PSB1bmRlZmluZWQgJiYgdGFpbC5yZWFkYWJsZU9iamVjdE1vZGUpLFxuICAgIHdyaXRhYmxlLFxuICAgIHJlYWRhYmxlXG4gIH0pXG4gIGlmICh3cml0YWJsZSkge1xuICAgIGlmIChpc05vZGVTdHJlYW0oaGVhZCkpIHtcbiAgICAgIGQuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGhlYWQud3JpdGUoY2h1bmssIGVuY29kaW5nKSkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbmRyYWluID0gY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZC5fZmluYWwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaGVhZC5lbmQoKVxuICAgICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrXG4gICAgICB9XG4gICAgICBoZWFkLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG9uZHJhaW4pIHtcbiAgICAgICAgICBjb25zdCBjYiA9IG9uZHJhaW5cbiAgICAgICAgICBvbmRyYWluID0gbnVsbFxuICAgICAgICAgIGNiKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKGlzV2ViU3RyZWFtKGhlYWQpKSB7XG4gICAgICBjb25zdCB3cml0YWJsZSA9IGlzVHJhbnNmb3JtU3RyZWFtKGhlYWQpID8gaGVhZC53cml0YWJsZSA6IGhlYWRcbiAgICAgIGNvbnN0IHdyaXRlciA9IHdyaXRhYmxlLmdldFdyaXRlcigpXG4gICAgICBkLl93cml0ZSA9IGFzeW5jIGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgd3JpdGVyLnJlYWR5XG4gICAgICAgICAgd3JpdGVyLndyaXRlKGNodW5rKS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZC5fZmluYWwgPSBhc3luYyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3cml0ZXIucmVhZHlcbiAgICAgICAgICB3cml0ZXIuY2xvc2UoKS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0b1JlYWQgPSBpc1RyYW5zZm9ybVN0cmVhbSh0YWlsKSA/IHRhaWwucmVhZGFibGUgOiB0YWlsXG4gICAgZW9zKHRvUmVhZCwgKCkgPT4ge1xuICAgICAgaWYgKG9uZmluaXNoKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25maW5pc2hcbiAgICAgICAgb25maW5pc2ggPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGlmIChyZWFkYWJsZSkge1xuICAgIGlmIChpc05vZGVTdHJlYW0odGFpbCkpIHtcbiAgICAgIHRhaWwub24oJ3JlYWRhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAob25yZWFkYWJsZSkge1xuICAgICAgICAgIGNvbnN0IGNiID0gb25yZWFkYWJsZVxuICAgICAgICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgICAgICAgY2IoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGFpbC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkLnB1c2gobnVsbClcbiAgICAgIH0pXG4gICAgICBkLl9yZWFkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IHRhaWwucmVhZCgpXG4gICAgICAgICAgaWYgKGJ1ZiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgb25yZWFkYWJsZSA9IGQuX3JlYWRcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWQucHVzaChidWYpKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzV2ViU3RyZWFtKHRhaWwpKSB7XG4gICAgICBjb25zdCByZWFkYWJsZSA9IGlzVHJhbnNmb3JtU3RyZWFtKHRhaWwpID8gdGFpbC5yZWFkYWJsZSA6IHRhaWxcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlYWRhYmxlLmdldFJlYWRlcigpXG4gICAgICBkLl9yZWFkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICAgICAgICBpZiAoIWQucHVzaCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICBkLnB1c2gobnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZC5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgb25jbG9zZSAhPT0gbnVsbCkge1xuICAgICAgZXJyID0gbmV3IEFib3J0RXJyb3IoKVxuICAgIH1cbiAgICBvbnJlYWRhYmxlID0gbnVsbFxuICAgIG9uZHJhaW4gPSBudWxsXG4gICAgb25maW5pc2ggPSBudWxsXG4gICAgaWYgKG9uY2xvc2UgPT09IG51bGwpIHtcbiAgICAgIGNhbGxiYWNrKGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgb25jbG9zZSA9IGNhbGxiYWNrXG4gICAgICBpZiAoaXNOb2RlU3RyZWFtKHRhaWwpKSB7XG4gICAgICAgIGRlc3Ryb3llcih0YWlsLCBlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBBYm9ydENvbnRyb2xsZXIgPSBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlciB8fCByZXF1aXJlKCdhYm9ydC1jb250cm9sbGVyJykuQWJvcnRDb250cm9sbGVyXG5jb25zdCB7XG4gIGNvZGVzOiB7IEVSUl9JTlZBTElEX0FSR19WQUxVRSwgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9NSVNTSU5HX0FSR1MsIEVSUl9PVVRfT0ZfUkFOR0UgfSxcbiAgQWJvcnRFcnJvclxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgdmFsaWRhdGVBYm9ydFNpZ25hbCwgdmFsaWRhdGVJbnRlZ2VyLCB2YWxpZGF0ZU9iamVjdCB9ID0gcmVxdWlyZSgnLi4vdmFsaWRhdG9ycycpXG5jb25zdCBrV2Vha0hhbmRsZXIgPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJykuU3ltYm9sKCdrV2VhaycpXG5jb25zdCBrUmVzaXN0U3RvcFByb3BhZ2F0aW9uID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpLlN5bWJvbCgna1Jlc2lzdFN0b3BQcm9wYWdhdGlvbicpXG5jb25zdCB7IGZpbmlzaGVkIH0gPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKVxuY29uc3Qgc3RhdGljQ29tcG9zZSA9IHJlcXVpcmUoJy4vY29tcG9zZScpXG5jb25zdCB7IGFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZSB9ID0gcmVxdWlyZSgnLi9hZGQtYWJvcnQtc2lnbmFsJylcbmNvbnN0IHsgaXNXcml0YWJsZSwgaXNOb2RlU3RyZWFtIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IHsgZGVwcmVjYXRlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxuY29uc3Qge1xuICBBcnJheVByb3RvdHlwZVB1c2gsXG4gIEJvb2xlYW4sXG4gIE1hdGhGbG9vcixcbiAgTnVtYmVyLFxuICBOdW1iZXJJc05hTixcbiAgUHJvbWlzZSxcbiAgUHJvbWlzZVJlamVjdCxcbiAgUHJvbWlzZVJlc29sdmUsXG4gIFByb21pc2VQcm90b3R5cGVUaGVuLFxuICBTeW1ib2xcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IGtFbXB0eSA9IFN5bWJvbCgna0VtcHR5JylcbmNvbnN0IGtFb2YgPSBTeW1ib2woJ2tFb2YnKVxuZnVuY3Rpb24gY29tcG9zZShzdHJlYW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIGlmIChpc05vZGVTdHJlYW0oc3RyZWFtKSAmJiAhaXNXcml0YWJsZShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRSgnc3RyZWFtJywgc3RyZWFtLCAnbXVzdCBiZSB3cml0YWJsZScpXG4gIH1cbiAgY29uc3QgY29tcG9zZWRTdHJlYW0gPSBzdGF0aWNDb21wb3NlKHRoaXMsIHN0cmVhbSlcbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgLy8gTm90IHZhbGlkYXRpbmcgYXMgd2UgYWxyZWFkeSB2YWxpZGF0ZWQgYmVmb3JlXG4gICAgYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlKG9wdGlvbnMuc2lnbmFsLCBjb21wb3NlZFN0cmVhbSlcbiAgfVxuICByZXR1cm4gY29tcG9zZWRTdHJlYW1cbn1cbmZ1bmN0aW9uIG1hcChmbiwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdmbicsIFsnRnVuY3Rpb24nLCAnQXN5bmNGdW5jdGlvbiddLCBmbilcbiAgfVxuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgbGV0IGNvbmN1cnJlbmN5ID0gMVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5jb25jdXJyZW5jeSkgIT0gbnVsbCkge1xuICAgIGNvbmN1cnJlbmN5ID0gTWF0aEZsb29yKG9wdGlvbnMuY29uY3VycmVuY3kpXG4gIH1cbiAgbGV0IGhpZ2hXYXRlck1hcmsgPSBjb25jdXJyZW5jeSAtIDFcbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuaGlnaFdhdGVyTWFyaykgIT0gbnVsbCkge1xuICAgIGhpZ2hXYXRlck1hcmsgPSBNYXRoRmxvb3Iob3B0aW9ucy5oaWdoV2F0ZXJNYXJrKVxuICB9XG4gIHZhbGlkYXRlSW50ZWdlcihjb25jdXJyZW5jeSwgJ29wdGlvbnMuY29uY3VycmVuY3knLCAxKVxuICB2YWxpZGF0ZUludGVnZXIoaGlnaFdhdGVyTWFyaywgJ29wdGlvbnMuaGlnaFdhdGVyTWFyaycsIDApXG4gIGhpZ2hXYXRlck1hcmsgKz0gY29uY3VycmVuY3lcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBtYXAoKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuQWJvcnRTaWduYWxBbnkoXG4gICAgICBbb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbF0uZmlsdGVyKEJvb2xlYW4pXG4gICAgKVxuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXNcbiAgICBjb25zdCBxdWV1ZSA9IFtdXG4gICAgY29uc3Qgc2lnbmFsT3B0ID0ge1xuICAgICAgc2lnbmFsXG4gICAgfVxuICAgIGxldCBuZXh0XG4gICAgbGV0IHJlc3VtZVxuICAgIGxldCBkb25lID0gZmFsc2VcbiAgICBsZXQgY250ID0gMFxuICAgIGZ1bmN0aW9uIG9uQ2F0Y2goKSB7XG4gICAgICBkb25lID0gdHJ1ZVxuICAgICAgYWZ0ZXJJdGVtUHJvY2Vzc2VkKClcbiAgICB9XG4gICAgZnVuY3Rpb24gYWZ0ZXJJdGVtUHJvY2Vzc2VkKCkge1xuICAgICAgY250IC09IDFcbiAgICAgIG1heWJlUmVzdW1lKClcbiAgICB9XG4gICAgZnVuY3Rpb24gbWF5YmVSZXN1bWUoKSB7XG4gICAgICBpZiAocmVzdW1lICYmICFkb25lICYmIGNudCA8IGNvbmN1cnJlbmN5ICYmIHF1ZXVlLmxlbmd0aCA8IGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgcmVzdW1lKClcbiAgICAgICAgcmVzdW1lID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBmdW5jdGlvbiBwdW1wKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChsZXQgdmFsIG9mIHN0cmVhbSkge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWwgPSBmbih2YWwsIHNpZ25hbE9wdClcbiAgICAgICAgICAgIGlmICh2YWwgPT09IGtFbXB0eSkge1xuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsID0gUHJvbWlzZVJlc29sdmUodmFsKVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdmFsID0gUHJvbWlzZVJlamVjdChlcnIpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNudCArPSAxXG4gICAgICAgICAgUHJvbWlzZVByb3RvdHlwZVRoZW4odmFsLCBhZnRlckl0ZW1Qcm9jZXNzZWQsIG9uQ2F0Y2gpXG4gICAgICAgICAgcXVldWUucHVzaCh2YWwpXG4gICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgbmV4dCA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFkb25lICYmIChxdWV1ZS5sZW5ndGggPj0gaGlnaFdhdGVyTWFyayB8fCBjbnQgPj0gY29uY3VycmVuY3kpKSB7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICByZXN1bWUgPSByZXNvbHZlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZS5wdXNoKGtFb2YpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgdmFsID0gUHJvbWlzZVJlamVjdChlcnIpXG4gICAgICAgIFByb21pc2VQcm90b3R5cGVUaGVuKHZhbCwgYWZ0ZXJJdGVtUHJvY2Vzc2VkLCBvbkNhdGNoKVxuICAgICAgICBxdWV1ZS5wdXNoKHZhbClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGRvbmUgPSB0cnVlXG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgbmV4dCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBwdW1wKClcbiAgICB0cnkge1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB2YWwgPSBhd2FpdCBxdWV1ZVswXVxuICAgICAgICAgIGlmICh2YWwgPT09IGtFb2YpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbCAhPT0ga0VtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCB2YWxcbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUuc2hpZnQoKVxuICAgICAgICAgIG1heWJlUmVzdW1lKClcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIG5leHQgPSByZXNvbHZlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRvbmUgPSB0cnVlXG4gICAgICBpZiAocmVzdW1lKSB7XG4gICAgICAgIHJlc3VtZSgpXG4gICAgICAgIHJlc3VtZSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxuZnVuY3Rpb24gYXNJbmRleGVkUGFpcnMob3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBhc0luZGV4ZWRQYWlycygpIHtcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgICAgdmFyIF9vcHRpb25zJHNpZ25hbFxuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAoX29wdGlvbnMkc2lnbmFsID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbC5hYm9ydGVkXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3Ioe1xuICAgICAgICAgIGNhdXNlOiBvcHRpb25zLnNpZ25hbC5yZWFzb25cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHlpZWxkIFtpbmRleCsrLCB2YWxdXG4gICAgfVxuICB9LmNhbGwodGhpcylcbn1cbmFzeW5jIGZ1bmN0aW9uIHNvbWUoZm4sIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgZm9yIGF3YWl0IChjb25zdCB1bnVzZWQgb2YgZmlsdGVyLmNhbGwodGhpcywgZm4sIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cbmFzeW5jIGZ1bmN0aW9uIGV2ZXJ5KGZuLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2ZuJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIGZuKVxuICB9XG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RlX01vcmdhbiUyN3NfbGF3c1xuICByZXR1cm4gIShhd2FpdCBzb21lLmNhbGwoXG4gICAgdGhpcyxcbiAgICBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgcmV0dXJuICEoYXdhaXQgZm4oLi4uYXJncykpXG4gICAgfSxcbiAgICBvcHRpb25zXG4gICkpXG59XG5hc3luYyBmdW5jdGlvbiBmaW5kKGZuLCBvcHRpb25zKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgcmVzdWx0IG9mIGZpbHRlci5jYWxsKHRoaXMsIGZuLCBvcHRpb25zKSkge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5hc3luYyBmdW5jdGlvbiBmb3JFYWNoKGZuLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2ZuJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIGZuKVxuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIGZvckVhY2hGbih2YWx1ZSwgb3B0aW9ucykge1xuICAgIGF3YWl0IGZuKHZhbHVlLCBvcHRpb25zKVxuICAgIHJldHVybiBrRW1wdHlcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZm9yIGF3YWl0IChjb25zdCB1bnVzZWQgb2YgbWFwLmNhbGwodGhpcywgZm9yRWFjaEZuLCBvcHRpb25zKSk7XG59XG5mdW5jdGlvbiBmaWx0ZXIoZm4sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZm4nLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgZm4pXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gZmlsdGVyRm4odmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXdhaXQgZm4odmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIGtFbXB0eVxuICB9XG4gIHJldHVybiBtYXAuY2FsbCh0aGlzLCBmaWx0ZXJGbiwgb3B0aW9ucylcbn1cblxuLy8gU3BlY2lmaWMgdG8gcHJvdmlkZSBiZXR0ZXIgZXJyb3IgdG8gcmVkdWNlIHNpbmNlIHRoZSBhcmd1bWVudCBpcyBvbmx5XG4vLyBtaXNzaW5nIGlmIHRoZSBzdHJlYW0gaGFzIG5vIGl0ZW1zIGluIGl0IC0gYnV0IHRoZSBjb2RlIGlzIHN0aWxsIGFwcHJvcHJpYXRlXG5jbGFzcyBSZWR1Y2VBd2FyZUVyck1pc3NpbmdBcmdzIGV4dGVuZHMgRVJSX01JU1NJTkdfQVJHUyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdyZWR1Y2UnKVxuICAgIHRoaXMubWVzc2FnZSA9ICdSZWR1Y2Ugb2YgYW4gZW1wdHkgc3RyZWFtIHJlcXVpcmVzIGFuIGluaXRpYWwgdmFsdWUnXG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHJlZHVjZShyZWR1Y2VyLCBpbml0aWFsVmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIF9vcHRpb25zJHNpZ25hbDJcbiAgaWYgKHR5cGVvZiByZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdyZWR1Y2VyJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIHJlZHVjZXIpXG4gIH1cbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIGxldCBoYXNJbml0aWFsVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMVxuICBpZiAoXG4gICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgIChfb3B0aW9ucyRzaWduYWwyID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgX29wdGlvbnMkc2lnbmFsMiAhPT0gdW5kZWZpbmVkICYmXG4gICAgX29wdGlvbnMkc2lnbmFsMi5hYm9ydGVkXG4gICkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgIH0pXG4gICAgdGhpcy5vbmNlKCdlcnJvcicsICgpID0+IHt9KSAvLyBUaGUgZXJyb3IgaXMgYWxyZWFkeSBwcm9wYWdhdGVkXG4gICAgYXdhaXQgZmluaXNoZWQodGhpcy5kZXN0cm95KGVycikpXG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgY29uc3Qgc2lnbmFsID0gYWMuc2lnbmFsXG4gIGlmIChvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnNpZ25hbCkge1xuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgICAgW2tXZWFrSGFuZGxlcl06IHRoaXMsXG4gICAgICBba1Jlc2lzdFN0b3BQcm9wYWdhdGlvbl06IHRydWVcbiAgICB9XG4gICAgb3B0aW9ucy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBhYy5hYm9ydCgpLCBvcHRzKVxuICB9XG4gIGxldCBnb3RBbnlJdGVtRnJvbVN0cmVhbSA9IGZhbHNlXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiB0aGlzKSB7XG4gICAgICB2YXIgX29wdGlvbnMkc2lnbmFsM1xuICAgICAgZ290QW55SXRlbUZyb21TdHJlYW0gPSB0cnVlXG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChfb3B0aW9ucyRzaWduYWwzID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBfb3B0aW9ucyRzaWduYWwzLmFib3J0ZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgICB9XG4gICAgICBpZiAoIWhhc0luaXRpYWxWYWx1ZSkge1xuICAgICAgICBpbml0aWFsVmFsdWUgPSB2YWx1ZVxuICAgICAgICBoYXNJbml0aWFsVmFsdWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsVmFsdWUgPSBhd2FpdCByZWR1Y2VyKGluaXRpYWxWYWx1ZSwgdmFsdWUsIHtcbiAgICAgICAgICBzaWduYWxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFnb3RBbnlJdGVtRnJvbVN0cmVhbSAmJiAhaGFzSW5pdGlhbFZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgUmVkdWNlQXdhcmVFcnJNaXNzaW5nQXJncygpXG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGFjLmFib3J0KClcbiAgfVxuICByZXR1cm4gaW5pdGlhbFZhbHVlXG59XG5hc3luYyBmdW5jdGlvbiB0b0FycmF5KG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIHRoaXMpIHtcbiAgICB2YXIgX29wdGlvbnMkc2lnbmFsNFxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKF9vcHRpb25zJHNpZ25hbDQgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgIF9vcHRpb25zJHNpZ25hbDQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNC5hYm9ydGVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgICAgfSlcbiAgICB9XG4gICAgQXJyYXlQcm90b3R5cGVQdXNoKHJlc3VsdCwgdmFsKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cbmZ1bmN0aW9uIGZsYXRNYXAoZm4sIG9wdGlvbnMpIHtcbiAgY29uc3QgdmFsdWVzID0gbWFwLmNhbGwodGhpcywgZm4sIG9wdGlvbnMpXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiogZmxhdE1hcCgpIHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpIHtcbiAgICAgIHlpZWxkKiB2YWxcbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxuZnVuY3Rpb24gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1iZXIpIHtcbiAgLy8gV2UgY29lcmNlIGhlcmUgdG8gYWxpZ24gd2l0aCB0aGUgc3BlY1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzL2lzc3Vlcy8xNjlcbiAgbnVtYmVyID0gTnVtYmVyKG51bWJlcilcbiAgaWYgKE51bWJlcklzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmIChudW1iZXIgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UoJ251bWJlcicsICc+PSAwJywgbnVtYmVyKVxuICB9XG4gIHJldHVybiBudW1iZXJcbn1cbmZ1bmN0aW9uIGRyb3AobnVtYmVyLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICBudW1iZXIgPSB0b0ludGVnZXJPckluZmluaXR5KG51bWJlcilcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBkcm9wKCkge1xuICAgIHZhciBfb3B0aW9ucyRzaWduYWw1XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX29wdGlvbnMkc2lnbmFsNSA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw1LmFib3J0ZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICB9XG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgICAgdmFyIF9vcHRpb25zJHNpZ25hbDZcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKF9vcHRpb25zJHNpZ25hbDYgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsNiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDYuYWJvcnRlZFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgIH1cbiAgICAgIGlmIChudW1iZXItLSA8PSAwKSB7XG4gICAgICAgIHlpZWxkIHZhbFxuICAgICAgfVxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5mdW5jdGlvbiB0YWtlKG51bWJlciwgb3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgbnVtYmVyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1iZXIpXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiogdGFrZSgpIHtcbiAgICB2YXIgX29wdGlvbnMkc2lnbmFsN1xuICAgIGlmIChcbiAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKF9vcHRpb25zJHNpZ25hbDcgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgIF9vcHRpb25zJHNpZ25hbDcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNy5hYm9ydGVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgfVxuICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIHRoaXMpIHtcbiAgICAgIHZhciBfb3B0aW9ucyRzaWduYWw4XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChfb3B0aW9ucyRzaWduYWw4ID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBfb3B0aW9ucyRzaWduYWw4LmFib3J0ZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyLS0gPiAwKSB7XG4gICAgICAgIHlpZWxkIHZhbFxuICAgICAgfVxuXG4gICAgICAvLyBEb24ndCBnZXQgYW5vdGhlciBpdGVtIGZyb20gaXRlcmF0b3IgaW4gY2FzZSB3ZSByZWFjaGVkIHRoZSBlbmRcbiAgICAgIGlmIChudW1iZXIgPD0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzID0ge1xuICBhc0luZGV4ZWRQYWlyczogZGVwcmVjYXRlKGFzSW5kZXhlZFBhaXJzLCAncmVhZGFibGUuYXNJbmRleGVkUGFpcnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uJyksXG4gIGRyb3AsXG4gIGZpbHRlcixcbiAgZmxhdE1hcCxcbiAgbWFwLFxuICB0YWtlLFxuICBjb21wb3NlXG59XG5tb2R1bGUuZXhwb3J0cy5wcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzID0ge1xuICBldmVyeSxcbiAgZm9yRWFjaCxcbiAgcmVkdWNlLFxuICB0b0FycmF5LFxuICBzb21lLFxuICBmaW5kXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFycmF5UHJvdG90eXBlUG9wLCBQcm9taXNlIH0gPSByZXF1aXJlKCcuLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgaXNJdGVyYWJsZSwgaXNOb2RlU3RyZWFtLCBpc1dlYlN0cmVhbSB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvc3RyZWFtcy91dGlscycpXG5jb25zdCB7IHBpcGVsaW5lSW1wbDogcGwgfSA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUnKVxuY29uc3QgeyBmaW5pc2hlZCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtJylcbnJlcXVpcmUoJy4uLy4uL2xpYi9zdHJlYW0uanMnKVxuZnVuY3Rpb24gcGlwZWxpbmUoLi4uc3RyZWFtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzaWduYWxcbiAgICBsZXQgZW5kXG4gICAgY29uc3QgbGFzdEFyZyA9IHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXVxuICAgIGlmIChcbiAgICAgIGxhc3RBcmcgJiZcbiAgICAgIHR5cGVvZiBsYXN0QXJnID09PSAnb2JqZWN0JyAmJlxuICAgICAgIWlzTm9kZVN0cmVhbShsYXN0QXJnKSAmJlxuICAgICAgIWlzSXRlcmFibGUobGFzdEFyZykgJiZcbiAgICAgICFpc1dlYlN0cmVhbShsYXN0QXJnKVxuICAgICkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5UHJvdG90eXBlUG9wKHN0cmVhbXMpXG4gICAgICBzaWduYWwgPSBvcHRpb25zLnNpZ25hbFxuICAgICAgZW5kID0gb3B0aW9ucy5lbmRcbiAgICB9XG4gICAgcGwoXG4gICAgICBzdHJlYW1zLFxuICAgICAgKGVyciwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICBlbmRcbiAgICAgIH1cbiAgICApXG4gIH0pXG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmluaXNoZWQsXG4gIHBpcGVsaW5lXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHsgT2JqZWN0RGVmaW5lUHJvcGVydHksIE9iamVjdEtleXMsIFJlZmxlY3RBcHBseSB9ID0gcmVxdWlyZSgnLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHtcbiAgcHJvbWlzaWZ5OiB7IGN1c3RvbTogY3VzdG9tUHJvbWlzaWZ5IH1cbn0gPSByZXF1aXJlKCcuL291cnMvdXRpbCcpXG5jb25zdCB7IHN0cmVhbVJldHVybmluZ09wZXJhdG9ycywgcHJvbWlzZVJldHVybmluZ09wZXJhdG9ycyB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL29wZXJhdG9ycycpXG5jb25zdCB7XG4gIGNvZGVzOiB7IEVSUl9JTExFR0FMX0NPTlNUUlVDVE9SIH1cbn0gPSByZXF1aXJlKCcuL291cnMvZXJyb3JzJylcbmNvbnN0IGNvbXBvc2UgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvY29tcG9zZScpXG5jb25zdCB7IHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrLCBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZScpXG5jb25zdCB7IGRlc3Ryb3llciB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0nKVxuY29uc3QgaW50ZXJuYWxCdWZmZXIgPSB7fVxuY29uc3QgcHJvbWlzZXMgPSByZXF1aXJlKCcuL3N0cmVhbS9wcm9taXNlcycpXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy91dGlscycpXG5jb25zdCBTdHJlYW0gPSAobW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvbGVnYWN5JykuU3RyZWFtKVxuU3RyZWFtLmlzRGVzdHJveWVkID0gdXRpbHMuaXNEZXN0cm95ZWRcblN0cmVhbS5pc0Rpc3R1cmJlZCA9IHV0aWxzLmlzRGlzdHVyYmVkXG5TdHJlYW0uaXNFcnJvcmVkID0gdXRpbHMuaXNFcnJvcmVkXG5TdHJlYW0uaXNSZWFkYWJsZSA9IHV0aWxzLmlzUmVhZGFibGVcblN0cmVhbS5pc1dyaXRhYmxlID0gdXRpbHMuaXNXcml0YWJsZVxuU3RyZWFtLlJlYWRhYmxlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3JlYWRhYmxlJylcbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdEtleXMoc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzKSkge1xuICBjb25zdCBvcCA9IHN0cmVhbVJldHVybmluZ09wZXJhdG9yc1trZXldXG4gIGZ1bmN0aW9uIGZuKC4uLmFyZ3MpIHtcbiAgICBpZiAobmV3LnRhcmdldCkge1xuICAgICAgdGhyb3cgRVJSX0lMTEVHQUxfQ09OU1RSVUNUT1IoKVxuICAgIH1cbiAgICByZXR1cm4gU3RyZWFtLlJlYWRhYmxlLmZyb20oUmVmbGVjdEFwcGx5KG9wLCB0aGlzLCBhcmdzKSlcbiAgfVxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBvcC5uYW1lXG4gIH0pXG4gIE9iamVjdERlZmluZVByb3BlcnR5KGZuLCAnbGVuZ3RoJywge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogb3AubGVuZ3RoXG4gIH0pXG4gIE9iamVjdERlZmluZVByb3BlcnR5KFN0cmVhbS5SZWFkYWJsZS5wcm90b3R5cGUsIGtleSwge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogZm4sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pXG59XG5mb3IgKGNvbnN0IGtleSBvZiBPYmplY3RLZXlzKHByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnMpKSB7XG4gIGNvbnN0IG9wID0gcHJvbWlzZVJldHVybmluZ09wZXJhdG9yc1trZXldXG4gIGZ1bmN0aW9uIGZuKC4uLmFyZ3MpIHtcbiAgICBpZiAobmV3LnRhcmdldCkge1xuICAgICAgdGhyb3cgRVJSX0lMTEVHQUxfQ09OU1RSVUNUT1IoKVxuICAgIH1cbiAgICByZXR1cm4gUmVmbGVjdEFwcGx5KG9wLCB0aGlzLCBhcmdzKVxuICB9XG4gIE9iamVjdERlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IG9wLm5hbWVcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoZm4sICdsZW5ndGgnLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBvcC5sZW5ndGhcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoU3RyZWFtLlJlYWRhYmxlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBmbixcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSlcbn1cblN0cmVhbS5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy93cml0YWJsZScpXG5TdHJlYW0uRHVwbGV4ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleCcpXG5TdHJlYW0uVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3RyYW5zZm9ybScpXG5TdHJlYW0uUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvcGFzc3Rocm91Z2gnKVxuU3RyZWFtLnBpcGVsaW5lID0gcGlwZWxpbmVcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9hZGQtYWJvcnQtc2lnbmFsJylcblN0cmVhbS5hZGRBYm9ydFNpZ25hbCA9IGFkZEFib3J0U2lnbmFsXG5TdHJlYW0uZmluaXNoZWQgPSBlb3NcblN0cmVhbS5kZXN0cm95ID0gZGVzdHJveWVyXG5TdHJlYW0uY29tcG9zZSA9IGNvbXBvc2VcblN0cmVhbS5zZXREZWZhdWx0SGlnaFdhdGVyTWFyayA9IHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrXG5TdHJlYW0uZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsgPSBnZXREZWZhdWx0SGlnaFdhdGVyTWFya1xuT2JqZWN0RGVmaW5lUHJvcGVydHkoU3RyZWFtLCAncHJvbWlzZXMnLCB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHByb21pc2VzXG4gIH1cbn0pXG5PYmplY3REZWZpbmVQcm9wZXJ0eShwaXBlbGluZSwgY3VzdG9tUHJvbWlzaWZ5LCB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0KCkge1xuICAgIHJldHVybiBwcm9taXNlcy5waXBlbGluZVxuICB9XG59KVxuT2JqZWN0RGVmaW5lUHJvcGVydHkoZW9zLCBjdXN0b21Qcm9taXNpZnksIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHByb21pc2VzLmZpbmlzaGVkXG4gIH1cbn0pXG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuNC54XG5TdHJlYW0uU3RyZWFtID0gU3RyZWFtXG5TdHJlYW0uX2lzVWludDhBcnJheSA9IGZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5XG59XG5TdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlciA9IGZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rLmJ1ZmZlciwgY2h1bmsuYnl0ZU9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aClcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5pZiAoU3RyZWFtICYmIHByb2Nlc3MuZW52LlJFQURBQkxFX1NUUkVBTSA9PT0gJ2Rpc2FibGUnKSB7XG4gIGNvbnN0IHByb21pc2VzID0gU3RyZWFtLnByb21pc2VzXG5cbiAgLy8gRXhwbGljaXQgZXhwb3J0IG5hbWluZyBpcyBuZWVkZWQgZm9yIEVTTVxuICBtb2R1bGUuZXhwb3J0cy5fdWludDhBcnJheVRvQnVmZmVyID0gU3RyZWFtLl91aW50OEFycmF5VG9CdWZmZXJcbiAgbW9kdWxlLmV4cG9ydHMuX2lzVWludDhBcnJheSA9IFN0cmVhbS5faXNVaW50OEFycmF5XG4gIG1vZHVsZS5leHBvcnRzLmlzRGlzdHVyYmVkID0gU3RyZWFtLmlzRGlzdHVyYmVkXG4gIG1vZHVsZS5leHBvcnRzLmlzRXJyb3JlZCA9IFN0cmVhbS5pc0Vycm9yZWRcbiAgbW9kdWxlLmV4cG9ydHMuaXNSZWFkYWJsZSA9IFN0cmVhbS5pc1JlYWRhYmxlXG4gIG1vZHVsZS5leHBvcnRzLlJlYWRhYmxlID0gU3RyZWFtLlJlYWRhYmxlXG4gIG1vZHVsZS5leHBvcnRzLldyaXRhYmxlID0gU3RyZWFtLldyaXRhYmxlXG4gIG1vZHVsZS5leHBvcnRzLkR1cGxleCA9IFN0cmVhbS5EdXBsZXhcbiAgbW9kdWxlLmV4cG9ydHMuVHJhbnNmb3JtID0gU3RyZWFtLlRyYW5zZm9ybVxuICBtb2R1bGUuZXhwb3J0cy5QYXNzVGhyb3VnaCA9IFN0cmVhbS5QYXNzVGhyb3VnaFxuICBtb2R1bGUuZXhwb3J0cy5hZGRBYm9ydFNpZ25hbCA9IFN0cmVhbS5hZGRBYm9ydFNpZ25hbFxuICBtb2R1bGUuZXhwb3J0cy5maW5pc2hlZCA9IFN0cmVhbS5maW5pc2hlZFxuICBtb2R1bGUuZXhwb3J0cy5kZXN0cm95ID0gU3RyZWFtLmRlc3Ryb3lcbiAgbW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSBTdHJlYW0ucGlwZWxpbmVcbiAgbW9kdWxlLmV4cG9ydHMuY29tcG9zZSA9IFN0cmVhbS5jb21wb3NlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJlYW0sICdwcm9taXNlcycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZXNcbiAgICB9XG4gIH0pXG4gIG1vZHVsZS5leHBvcnRzLlN0cmVhbSA9IFN0cmVhbS5TdHJlYW1cbn0gZWxzZSB7XG4gIGNvbnN0IEN1c3RvbVN0cmVhbSA9IHJlcXVpcmUoJy4uL3N0cmVhbScpXG4gIGNvbnN0IHByb21pc2VzID0gcmVxdWlyZSgnLi4vc3RyZWFtL3Byb21pc2VzJylcbiAgY29uc3Qgb3JpZ2luYWxEZXN0cm95ID0gQ3VzdG9tU3RyZWFtLlJlYWRhYmxlLmRlc3Ryb3lcbiAgbW9kdWxlLmV4cG9ydHMgPSBDdXN0b21TdHJlYW0uUmVhZGFibGVcblxuICAvLyBFeHBsaWNpdCBleHBvcnQgbmFtaW5nIGlzIG5lZWRlZCBmb3IgRVNNXG4gIG1vZHVsZS5leHBvcnRzLl91aW50OEFycmF5VG9CdWZmZXIgPSBDdXN0b21TdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlclxuICBtb2R1bGUuZXhwb3J0cy5faXNVaW50OEFycmF5ID0gQ3VzdG9tU3RyZWFtLl9pc1VpbnQ4QXJyYXlcbiAgbW9kdWxlLmV4cG9ydHMuaXNEaXN0dXJiZWQgPSBDdXN0b21TdHJlYW0uaXNEaXN0dXJiZWRcbiAgbW9kdWxlLmV4cG9ydHMuaXNFcnJvcmVkID0gQ3VzdG9tU3RyZWFtLmlzRXJyb3JlZFxuICBtb2R1bGUuZXhwb3J0cy5pc1JlYWRhYmxlID0gQ3VzdG9tU3RyZWFtLmlzUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuUmVhZGFibGUgPSBDdXN0b21TdHJlYW0uUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuV3JpdGFibGUgPSBDdXN0b21TdHJlYW0uV3JpdGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuRHVwbGV4ID0gQ3VzdG9tU3RyZWFtLkR1cGxleFxuICBtb2R1bGUuZXhwb3J0cy5UcmFuc2Zvcm0gPSBDdXN0b21TdHJlYW0uVHJhbnNmb3JtXG4gIG1vZHVsZS5leHBvcnRzLlBhc3NUaHJvdWdoID0gQ3VzdG9tU3RyZWFtLlBhc3NUaHJvdWdoXG4gIG1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsID0gQ3VzdG9tU3RyZWFtLmFkZEFib3J0U2lnbmFsXG4gIG1vZHVsZS5leHBvcnRzLmZpbmlzaGVkID0gQ3VzdG9tU3RyZWFtLmZpbmlzaGVkXG4gIG1vZHVsZS5leHBvcnRzLmRlc3Ryb3kgPSBDdXN0b21TdHJlYW0uZGVzdHJveVxuICBtb2R1bGUuZXhwb3J0cy5kZXN0cm95ID0gb3JpZ2luYWxEZXN0cm95XG4gIG1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gQ3VzdG9tU3RyZWFtLnBpcGVsaW5lXG4gIG1vZHVsZS5leHBvcnRzLmNvbXBvc2UgPSBDdXN0b21TdHJlYW0uY29tcG9zZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VzdG9tU3RyZWFtLCAncHJvbWlzZXMnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHByb21pc2VzXG4gICAgfVxuICB9KVxuICBtb2R1bGUuZXhwb3J0cy5TdHJlYW0gPSBDdXN0b21TdHJlYW0uU3RyZWFtXG59XG5cbi8vIEFsbG93IGRlZmF1bHQgaW1wb3J0aW5nXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gbW9kdWxlLmV4cG9ydHNcbiIsCiAgICAiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsCiAgICAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGbGF0dGVuYWJsZTtcbiIsCiAgICAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwKICAgICJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsCiAgICAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLAogICAgInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwKICAgICIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLAogICAgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLAogICAgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLAogICAgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsCiAgICAidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsCiAgICAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsCiAgICAidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwKICAgICJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwKICAgICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwKICAgICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwKICAgICJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwKICAgICIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwKICAgICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YCB3aXRob3V0XG4gKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7XG5cbiAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbmRJbmRleDtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYU47XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwKICAgICJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwKICAgICJ2YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCcuL19iYXNlSW5kZXhPZicpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmNsdWRlc2AgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5SW5jbHVkZXM7XG4iLAogICAgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwKICAgICJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgfVxuICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID09IG51bGwgPyB2YWx1ZSA6IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VEaWZmZXJlbmNlO1xuIiwKICAgICJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gKiBpcyBhbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlT2JqZWN0O1xuIiwKICAgICJ2YXIgYmFzZURpZmZlcmVuY2UgPSByZXF1aXJlKCcuL19iYXNlRGlmZmVyZW5jZScpLFxuICAgIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBgYXJyYXlgIHZhbHVlcyBub3QgaW5jbHVkZWQgaW4gdGhlIG90aGVyIGdpdmVuIGFycmF5c1xuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKiBAc2VlIF8ud2l0aG91dCwgXy54b3JcbiAqIEBleGFtcGxlXG4gKlxuICogXy5kaWZmZXJlbmNlKFsyLCAxXSwgWzIsIDNdKTtcbiAqIC8vID0+IFsxXVxuICovXG52YXIgZGlmZmVyZW5jZSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKVxuICAgIDogW107XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkaWZmZXJlbmNlO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vb3A7XG4iLAogICAgIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsCiAgICAidmFyIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIG5vb3AgPSByZXF1aXJlKCcuL25vb3AnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZXQgb2JqZWN0IG9mIGB2YWx1ZXNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhZGQgdG8gdGhlIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBzZXQuXG4gKi9cbnZhciBjcmVhdGVTZXQgPSAhKFNldCAmJiAoMSAvIHNldFRvQXJyYXkobmV3IFNldChbLC0wXSkpWzFdKSA9PSBJTkZJTklUWSkgPyBub29wIDogZnVuY3Rpb24odmFsdWVzKSB7XG4gIHJldHVybiBuZXcgU2V0KHZhbHVlcyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVNldDtcbiIsCiAgICAidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyksXG4gICAgY3JlYXRlU2V0ID0gcmVxdWlyZSgnLi9fY3JlYXRlU2V0JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICBzZWVuID0gcmVzdWx0O1xuXG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICB9XG4gIGVsc2UgaWYgKGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgdmFyIHNldCA9IGl0ZXJhdGVlID8gbnVsbCA6IGNyZWF0ZVNldChhcnJheSk7XG4gICAgaWYgKHNldCkge1xuICAgICAgcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtcbiAgICB9XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIHNlZW4gPSBuZXcgU2V0Q2FjaGU7XG4gIH1cbiAgZWxzZSB7XG4gICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHtcbiAgICAgICAgaWYgKHNlZW5bc2VlbkluZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyhzZWVuLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIGlmIChzZWVuICE9PSByZXN1bHQpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5pcTtcbiIsCiAgICAidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgYmFzZVVuaXEgPSByZXF1aXJlKCcuL19iYXNlVW5pcScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cyB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlvbihbMl0sIFsxLCAyXSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqL1xudmFyIHVuaW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmlvbjtcbiIsCiAgICAiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsCiAgICAidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsCiAgICAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3NlcnRWYWxpZFBhdHRlcm4gPSB2b2lkIDA7XG5jb25zdCBNQVhfUEFUVEVSTl9MRU5HVEggPSAxMDI0ICogNjQ7XG5jb25zdCBhc3NlcnRWYWxpZFBhdHRlcm4gPSAocGF0dGVybikgPT4ge1xuICAgIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXR0ZXJuJyk7XG4gICAgfVxuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA+IE1BWF9QQVRURVJOX0xFTkdUSCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXR0ZXJuIGlzIHRvbyBsb25nJyk7XG4gICAgfVxufTtcbmV4cG9ydHMuYXNzZXJ0VmFsaWRQYXR0ZXJuID0gYXNzZXJ0VmFsaWRQYXR0ZXJuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXNzZXJ0LXZhbGlkLXBhdHRlcm4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIHRyYW5zbGF0ZSB0aGUgdmFyaW91cyBwb3NpeCBjaGFyYWN0ZXIgY2xhc3NlcyBpbnRvIHVuaWNvZGUgcHJvcGVydGllc1xuLy8gdGhpcyB3b3JrcyBhY3Jvc3MgYWxsIHVuaWNvZGUgbG9jYWxlc1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZUNsYXNzID0gdm9pZCAwO1xuLy8geyA8cG9zaXggY2xhc3M+OiBbPHRyYW5zbGF0aW9uPiwgL3UgZmxhZyByZXF1aXJlZCwgbmVnYXRlZF1cbmNvbnN0IHBvc2l4Q2xhc3NlcyA9IHtcbiAgICAnWzphbG51bTpdJzogWydcXFxccHtMfVxcXFxwe05sfVxcXFxwe05kfScsIHRydWVdLFxuICAgICdbOmFscGhhOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9JywgdHJ1ZV0sXG4gICAgJ1s6YXNjaWk6XSc6IFsnXFxcXHgnICsgJzAwLVxcXFx4JyArICc3ZicsIGZhbHNlXSxcbiAgICAnWzpibGFuazpdJzogWydcXFxccHtac31cXFxcdCcsIHRydWVdLFxuICAgICdbOmNudHJsOl0nOiBbJ1xcXFxwe0NjfScsIHRydWVdLFxuICAgICdbOmRpZ2l0Ol0nOiBbJ1xcXFxwe05kfScsIHRydWVdLFxuICAgICdbOmdyYXBoOl0nOiBbJ1xcXFxwe1p9XFxcXHB7Q30nLCB0cnVlLCB0cnVlXSxcbiAgICAnWzpsb3dlcjpdJzogWydcXFxccHtMbH0nLCB0cnVlXSxcbiAgICAnWzpwcmludDpdJzogWydcXFxccHtDfScsIHRydWVdLFxuICAgICdbOnB1bmN0Ol0nOiBbJ1xcXFxwe1B9JywgdHJ1ZV0sXG4gICAgJ1s6c3BhY2U6XSc6IFsnXFxcXHB7Wn1cXFxcdFxcXFxyXFxcXG5cXFxcdlxcXFxmJywgdHJ1ZV0sXG4gICAgJ1s6dXBwZXI6XSc6IFsnXFxcXHB7THV9JywgdHJ1ZV0sXG4gICAgJ1s6d29yZDpdJzogWydcXFxccHtMfVxcXFxwe05sfVxcXFxwe05kfVxcXFxwe1BjfScsIHRydWVdLFxuICAgICdbOnhkaWdpdDpdJzogWydBLUZhLWYwLTknLCBmYWxzZV0sXG59O1xuLy8gb25seSBuZWVkIHRvIGVzY2FwZSBhIGZldyB0aGluZ3MgaW5zaWRlIG9mIGJyYWNlIGV4cHJlc3Npb25zXG4vLyBlc2NhcGVzOiBbIFxcIF0gLVxuY29uc3QgYnJhY2VFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bW1xcXVxcXFwtXS9nLCAnXFxcXCQmJyk7XG4vLyBlc2NhcGUgYWxsIHJlZ2V4cCBtYWdpYyBjaGFyYWN0ZXJzXG5jb25zdCByZWdleHBFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xuLy8gZXZlcnl0aGluZyBoYXMgYWxyZWFkeSBiZWVuIGVzY2FwZWQsIHdlIGp1c3QgaGF2ZSB0byBqb2luXG5jb25zdCByYW5nZXNUb1N0cmluZyA9IChyYW5nZXMpID0+IHJhbmdlcy5qb2luKCcnKTtcbi8vIHRha2VzIGEgZ2xvYiBzdHJpbmcgYXQgYSBwb3NpeCBicmFjZSBleHByZXNzaW9uLCBhbmQgcmV0dXJuc1xuLy8gYW4gZXF1aXZhbGVudCByZWd1bGFyIGV4cHJlc3Npb24gc291cmNlLCBhbmQgYm9vbGVhbiBpbmRpY2F0aW5nXG4vLyB3aGV0aGVyIHRoZSAvdSBmbGFnIG5lZWRzIHRvIGJlIGFwcGxpZWQsIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJzXG4vLyBjb25zdW1lZCB0byBwYXJzZSB0aGUgY2hhcmFjdGVyIGNsYXNzLlxuLy8gVGhpcyBhbHNvIHJlbW92ZXMgb3V0IG9mIG9yZGVyIHJhbmdlcywgYW5kIHJldHVybnMgKCQuKSBpZiB0aGVcbi8vIGVudGlyZSBjbGFzcyBqdXN0IG5vIGdvb2QuXG5jb25zdCBwYXJzZUNsYXNzID0gKGdsb2IsIHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3QgcG9zID0gcG9zaXRpb247XG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgaWYgKGdsb2IuY2hhckF0KHBvcykgIT09ICdbJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbiBhIGJyYWNlIGV4cHJlc3Npb24nKTtcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICBjb25zdCByYW5nZXMgPSBbXTtcbiAgICBjb25zdCBuZWdzID0gW107XG4gICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgIGxldCBzYXdTdGFydCA9IGZhbHNlO1xuICAgIGxldCB1ZmxhZyA9IGZhbHNlO1xuICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgIGxldCBuZWdhdGUgPSBmYWxzZTtcbiAgICBsZXQgZW5kUG9zID0gcG9zO1xuICAgIGxldCByYW5nZVN0YXJ0ID0gJyc7XG4gICAgV0hJTEU6IHdoaWxlIChpIDwgZ2xvYi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYyA9IGdsb2IuY2hhckF0KGkpO1xuICAgICAgICBpZiAoKGMgPT09ICchJyB8fCBjID09PSAnXicpICYmIGkgPT09IHBvcyArIDEpIHtcbiAgICAgICAgICAgIG5lZ2F0ZSA9IHRydWU7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ10nICYmIHNhd1N0YXJ0ICYmICFlc2NhcGluZykge1xuICAgICAgICAgICAgZW5kUG9zID0gaSArIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzYXdTdGFydCA9IHRydWU7XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmICghZXNjYXBpbmcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNjYXBlZCBcXCBjaGFyLCBmYWxsIHRocm91Z2ggYW5kIHRyZWF0IGxpa2Ugbm9ybWFsIGNoYXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ1snICYmICFlc2NhcGluZykge1xuICAgICAgICAgICAgLy8gZWl0aGVyIGEgcG9zaXggY2xhc3MsIGEgY29sbGF0aW9uIGVxdWl2YWxlbnQsIG9yIGp1c3QgYSBbXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtjbHMsIFt1bmlwLCB1LCBuZWddXSBvZiBPYmplY3QuZW50cmllcyhwb3NpeENsYXNzZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aChjbHMsIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWQsIFthLVtdIGlzIGZpbmUsIGJ1dCBub3QgW2EtWzphbHBoYV1dXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyckLicsIGZhbHNlLCBnbG9iLmxlbmd0aCAtIHBvcywgdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaSArPSBjbHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmVnKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmVncy5wdXNoKHVuaXApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaCh1bmlwKTtcbiAgICAgICAgICAgICAgICAgICAgdWZsYWcgPSB1ZmxhZyB8fCB1O1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBXSElMRTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IGl0J3MganVzdCBhIG5vcm1hbCBjaGFyYWN0ZXIsIGVmZmVjdGl2ZWx5XG4gICAgICAgIGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChyYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAvLyB0aHJvdyB0aGlzIHJhbmdlIGF3YXkgaWYgaXQncyBub3QgdmFsaWQsIGJ1dCBvdGhlcnNcbiAgICAgICAgICAgIC8vIGNhbiBzdGlsbCBtYXRjaC5cbiAgICAgICAgICAgIGlmIChjID4gcmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKHJhbmdlU3RhcnQpICsgJy0nICsgYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gcmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSAnJztcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyBtaWdodCBiZSB0aGUgc3RhcnQgb2YgYSByYW5nZS5cbiAgICAgICAgLy8gY2FuIGJlIGVpdGhlciBjLWQgb3IgYy1dIG9yIGM8bW9yZS4uLj5dIG9yIGNdIGF0IHRoaXMgcG9pbnRcbiAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnLV0nLCBpICsgMSkpIHtcbiAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMgKyAnLScpKTtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnbG9iLnN0YXJ0c1dpdGgoJy0nLCBpICsgMSkpIHtcbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSBjO1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90IHRoZSBzdGFydCBvZiBhIHJhbmdlLCBqdXN0IGEgc2luZ2xlIGNoYXJhY3RlclxuICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShjKSk7XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgaWYgKGVuZFBvcyA8IGkpIHtcbiAgICAgICAgLy8gZGlkbid0IHNlZSB0aGUgZW5kIG9mIHRoZSBjbGFzcywgbm90IGEgdmFsaWQgY2xhc3MsXG4gICAgICAgIC8vIGJ1dCBtaWdodCBzdGlsbCBiZSB2YWxpZCBhcyBhIGxpdGVyYWwgbWF0Y2guXG4gICAgICAgIHJldHVybiBbJycsIGZhbHNlLCAwLCBmYWxzZV07XG4gICAgfVxuICAgIC8vIGlmIHdlIGdvdCBubyByYW5nZXMgYW5kIG5vIG5lZ2F0ZXMsIHRoZW4gd2UgaGF2ZSBhIHJhbmdlIHRoYXRcbiAgICAvLyBjYW5ub3QgcG9zc2libHkgbWF0Y2ggYW55dGhpbmcsIGFuZCB0aGF0IHBvaXNvbnMgdGhlIHdob2xlIGdsb2JcbiAgICBpZiAoIXJhbmdlcy5sZW5ndGggJiYgIW5lZ3MubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbJyQuJywgZmFsc2UsIGdsb2IubGVuZ3RoIC0gcG9zLCB0cnVlXTtcbiAgICB9XG4gICAgLy8gaWYgd2UgZ290IG9uZSBwb3NpdGl2ZSByYW5nZSwgYW5kIGl0J3MgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGVuIHRoYXQnc1xuICAgIC8vIG5vdCBhY3R1YWxseSBhIG1hZ2ljIHBhdHRlcm4sIGl0J3MganVzdCB0aGF0IG9uZSBsaXRlcmFsIGNoYXJhY3Rlci5cbiAgICAvLyB3ZSBzaG91bGQgbm90IHRyZWF0IHRoYXQgYXMgXCJtYWdpY1wiLCB3ZSBzaG91bGQganVzdCByZXR1cm4gdGhlIGxpdGVyYWxcbiAgICAvLyBjaGFyYWN0ZXIuIFtfXSBpcyBhIHBlcmZlY3RseSB2YWxpZCB3YXkgdG8gZXNjYXBlIGdsb2IgbWFnaWMgY2hhcnMuXG4gICAgaWYgKG5lZ3MubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHJhbmdlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgL15cXFxcPy4kLy50ZXN0KHJhbmdlc1swXSkgJiZcbiAgICAgICAgIW5lZ2F0ZSkge1xuICAgICAgICBjb25zdCByID0gcmFuZ2VzWzBdLmxlbmd0aCA9PT0gMiA/IHJhbmdlc1swXS5zbGljZSgtMSkgOiByYW5nZXNbMF07XG4gICAgICAgIHJldHVybiBbcmVnZXhwRXNjYXBlKHIpLCBmYWxzZSwgZW5kUG9zIC0gcG9zLCBmYWxzZV07XG4gICAgfVxuICAgIGNvbnN0IHNyYW5nZXMgPSAnWycgKyAobmVnYXRlID8gJ14nIDogJycpICsgcmFuZ2VzVG9TdHJpbmcocmFuZ2VzKSArICddJztcbiAgICBjb25zdCBzbmVncyA9ICdbJyArIChuZWdhdGUgPyAnJyA6ICdeJykgKyByYW5nZXNUb1N0cmluZyhuZWdzKSArICddJztcbiAgICBjb25zdCBjb21iID0gcmFuZ2VzLmxlbmd0aCAmJiBuZWdzLmxlbmd0aFxuICAgICAgICA/ICcoJyArIHNyYW5nZXMgKyAnfCcgKyBzbmVncyArICcpJ1xuICAgICAgICA6IHJhbmdlcy5sZW5ndGhcbiAgICAgICAgICAgID8gc3Jhbmdlc1xuICAgICAgICAgICAgOiBzbmVncztcbiAgICByZXR1cm4gW2NvbWIsIHVmbGFnLCBlbmRQb3MgLSBwb3MsIHRydWVdO1xufTtcbmV4cG9ydHMucGFyc2VDbGFzcyA9IHBhcnNlQ2xhc3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1icmFjZS1leHByZXNzaW9ucy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51bmVzY2FwZSA9IHZvaWQgMDtcbi8qKlxuICogVW4tZXNjYXBlIGEgc3RyaW5nIHRoYXQgaGFzIGJlZW4gZXNjYXBlZCB3aXRoIHtAbGluayBlc2NhcGV9LlxuICpcbiAqIElmIHRoZSB7QGxpbmsgd2luZG93c1BhdGhzTm9Fc2NhcGV9IG9wdGlvbiBpcyB1c2VkLCB0aGVuIHNxdWFyZS1icmFjZVxuICogZXNjYXBlcyBhcmUgcmVtb3ZlZCwgYnV0IG5vdCBiYWNrc2xhc2ggZXNjYXBlcy4gIEZvciBleGFtcGxlLCBpdCB3aWxsIHR1cm5cbiAqIHRoZSBzdHJpbmcgYCdbKl0nYCBpbnRvIGAqYCwgYnV0IGl0IHdpbGwgbm90IHR1cm4gYCdcXFxcKidgIGludG8gYCcqJ2AsXG4gKiBiZWN1YXNlIGBcXGAgaXMgYSBwYXRoIHNlcGFyYXRvciBpbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIG1vZGUuXG4gKlxuICogV2hlbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIGlzIG5vdCBzZXQsIHRoZW4gYm90aCBicmFjZSBlc2NhcGVzIGFuZFxuICogYmFja3NsYXNoIGVzY2FwZXMgYXJlIHJlbW92ZWQuXG4gKlxuICogU2xhc2hlcyAoYW5kIGJhY2tzbGFzaGVzIGluIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgbW9kZSkgY2Fubm90IGJlIGVzY2FwZWRcbiAqIG9yIHVuZXNjYXBlZC5cbiAqL1xuY29uc3QgdW5lc2NhcGUgPSAocywgeyB3aW5kb3dzUGF0aHNOb0VzY2FwZSA9IGZhbHNlLCB9ID0ge30pID0+IHtcbiAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGVcbiAgICAgICAgPyBzLnJlcGxhY2UoL1xcWyhbXlxcL1xcXFxdKVxcXS9nLCAnJDEnKVxuICAgICAgICA6IHMucmVwbGFjZSgvKCg/IVxcXFwpLnxeKVxcWyhbXlxcL1xcXFxdKVxcXS9nLCAnJDEkMicpLnJlcGxhY2UoL1xcXFwoW15cXC9dKS9nLCAnJDEnKTtcbn07XG5leHBvcnRzLnVuZXNjYXBlID0gdW5lc2NhcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmVzY2FwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gcGFyc2UgYSBzaW5nbGUgcGF0aCBwb3J0aW9uXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFTVCA9IHZvaWQgMDtcbmNvbnN0IGJyYWNlX2V4cHJlc3Npb25zX2pzXzEgPSByZXF1aXJlKFwiLi9icmFjZS1leHByZXNzaW9ucy5qc1wiKTtcbmNvbnN0IHVuZXNjYXBlX2pzXzEgPSByZXF1aXJlKFwiLi91bmVzY2FwZS5qc1wiKTtcbmNvbnN0IHR5cGVzID0gbmV3IFNldChbJyEnLCAnPycsICcrJywgJyonLCAnQCddKTtcbmNvbnN0IGlzRXh0Z2xvYlR5cGUgPSAoYykgPT4gdHlwZXMuaGFzKGMpO1xuLy8gUGF0dGVybnMgdGhhdCBnZXQgcHJlcGVuZGVkIHRvIGJpbmQgdG8gdGhlIHN0YXJ0IG9mIGVpdGhlciB0aGVcbi8vIGVudGlyZSBzdHJpbmcsIG9yIGp1c3QgYSBzaW5nbGUgcGF0aCBwb3J0aW9uLCB0byBwcmV2ZW50IGRvdHNcbi8vIGFuZC9vciB0cmF2ZXJzYWwgcGF0dGVybnMsIHdoZW4gbmVlZGVkLlxuLy8gRXh0cyBkb24ndCBuZWVkIHRoZSBeIG9yIC8gYml0LCBiZWNhdXNlIHRoZSByb290IGJpbmRzIHRoYXQgYWxyZWFkeS5cbmNvbnN0IHN0YXJ0Tm9UcmF2ZXJzYWwgPSAnKD8hKD86XnwvKVxcXFwuXFxcXC4/KD86JHwvKSknO1xuY29uc3Qgc3RhcnROb0RvdCA9ICcoPyFcXFxcLiknO1xuLy8gY2hhcmFjdGVycyB0aGF0IGluZGljYXRlIGEgc3RhcnQgb2YgcGF0dGVybiBuZWVkcyB0aGUgXCJubyBkb3RzXCIgYml0LFxuLy8gYmVjYXVzZSBhIGRvdCAqbWlnaHQqIGJlIG1hdGNoZWQuICggaXMgbm90IGluIHRoZSBsaXN0LCBiZWNhdXNlIGluXG4vLyB0aGUgY2FzZSBvZiBhIGNoaWxkIGV4dGdsb2IsIGl0IHdpbGwgaGFuZGxlIHRoZSBwcmV2ZW50aW9uIGl0c2VsZi5cbmNvbnN0IGFkZFBhdHRlcm5TdGFydCA9IG5ldyBTZXQoWydbJywgJy4nXSk7XG4vLyBjYXNlcyB3aGVyZSB0cmF2ZXJzYWwgaXMgQS1PSywgbm8gZG90IHByZXZlbnRpb24gbmVlZGVkXG5jb25zdCBqdXN0RG90cyA9IG5ldyBTZXQoWycuLicsICcuJ10pO1xuY29uc3QgcmVTcGVjaWFscyA9IG5ldyBTZXQoJygpLip7fSs/W11eJFxcXFwhJyk7XG5jb25zdCByZWdFeHBFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyB1c2UgKyB3aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgKnNvbWV0aGluZyogbWF0Y2hlcywgYmVjYXVzZSB0aGUgKiBpc1xuLy8gdGhlIG9ubHkgdGhpbmcgaW4gdGhlIHBhdGggcG9ydGlvbi5cbmNvbnN0IHN0YXJOb0VtcHR5ID0gcW1hcmsgKyAnKz8nO1xuLy8gcmVtb3ZlIHRoZSBcXCBjaGFycyB0aGF0IHdlIGFkZGVkIGlmIHdlIGVuZCB1cCBkb2luZyBhIG5vbm1hZ2ljIGNvbXBhcmVcbi8vIGNvbnN0IGRlc2xhc2ggPSAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJylcbmNsYXNzIEFTVCB7XG4gICAgdHlwZTtcbiAgICAjcm9vdDtcbiAgICAjaGFzTWFnaWM7XG4gICAgI3VmbGFnID0gZmFsc2U7XG4gICAgI3BhcnRzID0gW107XG4gICAgI3BhcmVudDtcbiAgICAjcGFyZW50SW5kZXg7XG4gICAgI25lZ3M7XG4gICAgI2ZpbGxlZE5lZ3MgPSBmYWxzZTtcbiAgICAjb3B0aW9ucztcbiAgICAjdG9TdHJpbmc7XG4gICAgLy8gc2V0IHRvIHRydWUgaWYgaXQncyBhbiBleHRnbG9iIHdpdGggbm8gY2hpbGRyZW5cbiAgICAvLyAod2hpY2ggcmVhbGx5IG1lYW5zIG9uZSBjaGlsZCBvZiAnJylcbiAgICAjZW1wdHlFeHQgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICAvLyBleHRnbG9icyBhcmUgaW5oZXJlbnRseSBtYWdpY2FsXG4gICAgICAgIGlmICh0eXBlKVxuICAgICAgICAgICAgdGhpcy4jaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICB0aGlzLiNwYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuI3Jvb3QgPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3Jvb3QgOiB0aGlzO1xuICAgICAgICB0aGlzLiNvcHRpb25zID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IG9wdGlvbnMgOiB0aGlzLiNyb290LiNvcHRpb25zO1xuICAgICAgICB0aGlzLiNuZWdzID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IFtdIDogdGhpcy4jcm9vdC4jbmVncztcbiAgICAgICAgaWYgKHR5cGUgPT09ICchJyAmJiAhdGhpcy4jcm9vdC4jZmlsbGVkTmVncylcbiAgICAgICAgICAgIHRoaXMuI25lZ3MucHVzaCh0aGlzKTtcbiAgICAgICAgdGhpcy4jcGFyZW50SW5kZXggPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3BhcnRzLmxlbmd0aCA6IDA7XG4gICAgfVxuICAgIGdldCBoYXNNYWdpYygpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLiNoYXNNYWdpYyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2hhc01hZ2ljO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAocC50eXBlIHx8IHAuaGFzTWFnaWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNoYXNNYWdpYyA9IHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGU6IHdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIHdlIGdlbmVyYXRlIHRoZSByZWdleHAgc3JjIGFuZCBmaW5kIG91dFxuICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgfVxuICAgIC8vIHJlY29uc3RydWN0cyB0aGUgcGF0dGVyblxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBpZiAodGhpcy4jdG9TdHJpbmcgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiN0b1N0cmluZztcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jdG9TdHJpbmcgPSB0aGlzLiNwYXJ0cy5tYXAocCA9PiBTdHJpbmcocCkpLmpvaW4oJycpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jdG9TdHJpbmcgPVxuICAgICAgICAgICAgICAgIHRoaXMudHlwZSArICcoJyArIHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignfCcpICsgJyknKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjZmlsbE5lZ3MoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcyAhPT0gdGhpcy4jcm9vdClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG9ubHkgY2FsbCBvbiByb290Jyk7XG4gICAgICAgIGlmICh0aGlzLiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIC8vIGNhbGwgdG9TdHJpbmcoKSBvbmNlIHRvIGZpbGwgdGhpcyBvdXRcbiAgICAgICAgdGhpcy50b1N0cmluZygpO1xuICAgICAgICB0aGlzLiNmaWxsZWROZWdzID0gdHJ1ZTtcbiAgICAgICAgbGV0IG47XG4gICAgICAgIHdoaWxlICgobiA9IHRoaXMuI25lZ3MucG9wKCkpKSB7XG4gICAgICAgICAgICBpZiAobi50eXBlICE9PSAnIScpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvLyB3YWxrIHVwIHRoZSB0cmVlLCBhcHBlbmRpbmcgZXZlcnRoaW5nIHRoYXQgY29tZXMgQUZURVIgcGFyZW50SW5kZXhcbiAgICAgICAgICAgIGxldCBwID0gbjtcbiAgICAgICAgICAgIGxldCBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIHdoaWxlIChwcCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBwLiNwYXJlbnRJbmRleCArIDE7ICFwcC50eXBlICYmIGkgPCBwcC4jcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG4uI3BhcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBwYXJ0IGluIGV4dGdsb2IgQVNUPz8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmNvcHlJbihwcC4jcGFydHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHAgPSBwcDtcbiAgICAgICAgICAgICAgICBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcHVzaCguLi5wYXJ0cykge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwID09PSAnJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJyAmJiAhKHAgaW5zdGFuY2VvZiBBU1QgJiYgcC4jcGFyZW50ID09PSB0aGlzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwYXJ0OiAnICsgcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jcGFydHMucHVzaChwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMudHlwZSA9PT0gbnVsbFxuICAgICAgICAgICAgPyB0aGlzLiNwYXJ0cy5zbGljZSgpLm1hcChwID0+ICh0eXBlb2YgcCA9PT0gJ3N0cmluZycgPyBwIDogcC50b0pTT04oKSkpXG4gICAgICAgICAgICA6IFt0aGlzLnR5cGUsIC4uLnRoaXMuI3BhcnRzLm1hcChwID0+IHAudG9KU09OKCkpXTtcbiAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpICYmICF0aGlzLnR5cGUpXG4gICAgICAgICAgICByZXQudW5zaGlmdChbXSk7XG4gICAgICAgIGlmICh0aGlzLmlzRW5kKCkgJiZcbiAgICAgICAgICAgICh0aGlzID09PSB0aGlzLiNyb290IHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuI3Jvb3QuI2ZpbGxlZE5lZ3MgJiYgdGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goe30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlzU3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyb290ID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIGlmICh0aGlzLnR5cGUpIHJldHVybiAhIXRoaXMuI3BhcmVudD8uaXNTdGFydCgpXG4gICAgICAgIGlmICghdGhpcy4jcGFyZW50Py5pc1N0YXJ0KCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLiNwYXJlbnRJbmRleCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBpZiBldmVyeXRoaW5nIEFIRUFEIG9mIHRoaXMgaXMgYSBuZWdhdGlvbiwgdGhlbiBpdCdzIHN0aWxsIHRoZSBcInN0YXJ0XCJcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuI3BhcmVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNwYXJlbnRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwcCA9IHAuI3BhcnRzW2ldO1xuICAgICAgICAgICAgaWYgKCEocHAgaW5zdGFuY2VvZiBBU1QgJiYgcHAudHlwZSA9PT0gJyEnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaXNFbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyb290ID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuI3BhcmVudD8uaXNFbmQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50Py5pc0VuZCgpO1xuICAgICAgICAvLyBpZiBub3Qgcm9vdCwgaXQnbGwgYWx3YXlzIGhhdmUgYSBwYXJlbnRcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGFyZW50ID8gdGhpcy4jcGFyZW50LiNwYXJ0cy5sZW5ndGggOiAwO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50SW5kZXggPT09IHBsIC0gMTtcbiAgICB9XG4gICAgY29weUluKHBhcnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHRoaXMucHVzaChwYXJ0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wdXNoKHBhcnQuY2xvbmUodGhpcykpO1xuICAgIH1cbiAgICBjbG9uZShwYXJlbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IG5ldyBBU1QodGhpcy50eXBlLCBwYXJlbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGMuY29weUluKHApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlQVNUKHN0ciwgYXN0LCBwb3MsIG9wdCkge1xuICAgICAgICBsZXQgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgbGV0IGJyYWNlU3RhcnQgPSAtMTtcbiAgICAgICAgbGV0IGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgIGlmIChhc3QudHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiBhIGV4dGdsb2IsIGFwcGVuZCB1bnRpbCB3ZSBmaW5kIGEgc3RhcnRcbiAgICAgICAgICAgIGxldCBpID0gcG9zO1xuICAgICAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGkgPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0cyB0aGF0IGFyZSBlc2NhcGVkXG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5CcmFjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICddJyAmJiAhKGkgPT09IGJyYWNlU3RhcnQgKyAyICYmIGJyYWNlTmVnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW9wdC5ub2V4dCAmJiBpc0V4dGdsb2JUeXBlKGMpICYmIHN0ci5jaGFyQXQoaSkgPT09ICcoJykge1xuICAgICAgICAgICAgICAgICAgICBhc3QucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gbmV3IEFTVChjLCBhc3QpO1xuICAgICAgICAgICAgICAgICAgICBpID0gQVNULiNwYXJzZUFTVChzdHIsIGV4dCwgaSwgb3B0KTtcbiAgICAgICAgICAgICAgICAgICAgYXN0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXN0LnB1c2goYWNjKTtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNvbWUga2luZCBvZiBleHRnbG9iLCBwb3MgaXMgYXQgdGhlIChcbiAgICAgICAgLy8gZmluZCB0aGUgbmV4dCB8IG9yIClcbiAgICAgICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgICAgICBsZXQgcGFydCA9IG5ldyBBU1QobnVsbCwgYXN0KTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBzdHIuY2hhckF0KGkrKyk7XG4gICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgIGlmIChlc2NhcGluZyB8fCBjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGJyYWNlU3RhcnQgKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBpbkJyYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRXh0Z2xvYlR5cGUoYykgJiYgc3RyLmNoYXJBdChpKSA9PT0gJygnKSB7XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gbmV3IEFTVChjLCBwYXJ0KTtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICBpID0gQVNULiNwYXJzZUFTVChzdHIsIGV4dCwgaSwgb3B0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnfCcpIHtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHBhcnQgPSBuZXcgQVNUKG51bGwsIGFzdCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyknKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjYyA9PT0gJycgJiYgYXN0LiNwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXN0LiNlbXB0eUV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIGFzdC5wdXNoKC4uLnBhcnRzLCBwYXJ0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICB9XG4gICAgICAgIC8vIHVuZmluaXNoZWQgZXh0Z2xvYlxuICAgICAgICAvLyBpZiB3ZSBnb3QgaGVyZSwgaXQgd2FzIGEgbWFsZm9ybWVkIGV4dGdsb2IhIG5vdCBhbiBleHRnbG9iLCBidXRcbiAgICAgICAgLy8gbWF5YmUgc29tZXRoaW5nIGVsc2UgaW4gdGhlcmUuXG4gICAgICAgIGFzdC50eXBlID0gbnVsbDtcbiAgICAgICAgYXN0LiNoYXNNYWdpYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgYXN0LiNwYXJ0cyA9IFtzdHIuc3Vic3RyaW5nKHBvcyAtIDEpXTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tR2xvYihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgYXN0ID0gbmV3IEFTVChudWxsLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICAgICAgICBBU1QuI3BhcnNlQVNUKHBhdHRlcm4sIGFzdCwgMCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBhc3Q7XG4gICAgfVxuICAgIC8vIHJldHVybnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB0aGVyZSdzIG1hZ2ljLCBvciB0aGUgdW5lc2NhcGVkXG4gICAgLy8gc3RyaW5nIGlmIG5vdC5cbiAgICB0b01NUGF0dGVybigpIHtcbiAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHJvb3RcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzICE9PSB0aGlzLiNyb290KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jvb3QudG9NTVBhdHRlcm4oKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgY29uc3QgZ2xvYiA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgW3JlLCBib2R5LCBoYXNNYWdpYywgdWZsYWddID0gdGhpcy50b1JlZ0V4cFNvdXJjZSgpO1xuICAgICAgICAvLyBpZiB3ZSdyZSBpbiBub2Nhc2UgbW9kZSwgYW5kIG5vdCBub2Nhc2VNYWdpY09ubHksIHRoZW4gd2UgZG9cbiAgICAgICAgLy8gc3RpbGwgbmVlZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB3ZSBoYXZlIHRvIGNhc2UtaW5zZW5zaXRpdmVseVxuICAgICAgICAvLyBtYXRjaCBjYXBpdGFsL2xvd2VyY2FzZSBjaGFyYWN0ZXJzLlxuICAgICAgICBjb25zdCBhbnlNYWdpYyA9IGhhc01hZ2ljIHx8XG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyB8fFxuICAgICAgICAgICAgKHRoaXMuI29wdGlvbnMubm9jYXNlICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI29wdGlvbnMubm9jYXNlTWFnaWNPbmx5ICYmXG4gICAgICAgICAgICAgICAgZ2xvYi50b1VwcGVyQ2FzZSgpICE9PSBnbG9iLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoIWFueU1hZ2ljKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFncyA9ICh0aGlzLiNvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnKSArICh1ZmxhZyA/ICd1JyA6ICcnKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFJlZ0V4cChgXiR7cmV9JGAsIGZsYWdzKSwge1xuICAgICAgICAgICAgX3NyYzogcmUsXG4gICAgICAgICAgICBfZ2xvYjogZ2xvYixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jb3B0aW9ucztcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgc3RyaW5nIG1hdGNoLCB0aGUgcmVnZXhwIHNvdXJjZSwgd2hldGhlciB0aGVyZSdzIG1hZ2ljXG4gICAgLy8gaW4gdGhlIHJlZ2V4cCAoc28gYSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcmVxdWlyZWQpIGFuZCB3aGV0aGVyIG9yXG4gICAgLy8gbm90IHRoZSB1ZmxhZyBpcyBuZWVkZWQgZm9yIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKGZvciBwb3NpeCBjbGFzc2VzKVxuICAgIC8vIFRPRE86IGluc3RlYWQgb2YgaW5qZWN0aW5nIHRoZSBzdGFydC9lbmQgYXQgdGhpcyBwb2ludCwganVzdCByZXR1cm5cbiAgICAvLyB0aGUgQk9EWSBvZiB0aGUgcmVnZXhwLCBhbG9uZyB3aXRoIHRoZSBzdGFydC9lbmQgcG9ydGlvbnMgc3VpdGFibGVcbiAgICAvLyBmb3IgYmluZGluZyB0aGUgc3RhcnQvZW5kIGluIGVpdGhlciBhIGpvaW5lZCBmdWxsLXBhdGggbWFrZVJlIGNvbnRleHRcbiAgICAvLyAod2hlcmUgd2UgYmluZCB0byAoXnwvKSwgb3IgYSBzdGFuZGFsb25lIG1hdGNoUGFydCBjb250ZXh0ICh3aGVyZVxuICAgIC8vIHdlIGJpbmQgdG8gXiwgYW5kIG5vdCAvKS4gIE90aGVyd2lzZSBzbGFzaGVzIGdldCBkdXBlZCFcbiAgICAvL1xuICAgIC8vIEluIHBhcnQtbWF0Y2hpbmcgbW9kZSwgdGhlIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiBeKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiBeXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogXig/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNFbmQoKTogbm90aGluZ1xuICAgIC8vIC0gZWxzZTogJFxuICAgIC8vXG4gICAgLy8gSW4gZnVsbC1wYXRoIG1hdGNoaW5nIG1vZGUsIHdlIHB1dCB0aGUgc2xhc2ggYXQgdGhlIFNUQVJUIG9mIHRoZVxuICAgIC8vIHBhdHRlcm4sIHNvIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgZmlyc3QgcGF0dGVybjogc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGlmIG5vdCBpc1N0YXJ0KCk6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAvKD8hXFwuXFwuPyg/OiR8LykpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAvXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogLyg/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBsYXN0IHBhdHRlcm4sIHNhbWUgYXMgcGFydC1tYXRjaGluZyBtb2RlXG4gICAgLy8gLSBlbHNlIG5vdGhpbmdcbiAgICAvL1xuICAgIC8vIEFsd2F5cyBwdXQgdGhlICg/OiR8Lykgb24gbmVnYXRlZCB0YWlscywgdGhvdWdoLCBiZWNhdXNlIHRoYXQgaGFzIHRvIGJlXG4gICAgLy8gdGhlcmUgdG8gYmluZCB0aGUgZW5kIG9mIHRoZSBuZWdhdGVkIHBhdHRlcm4gcG9ydGlvbiwgYW5kIGl0J3MgZWFzaWVyIHRvXG4gICAgLy8ganVzdCBzdGljayBpdCBpbiBub3cgcmF0aGVyIHRoYW4gdHJ5IHRvIGluamVjdCBpdCBsYXRlciBpbiB0aGUgbWlkZGxlIG9mXG4gICAgLy8gdGhlIHBhdHRlcm4uXG4gICAgLy9cbiAgICAvLyBXZSBjYW4ganVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGVuZCwgYW5kIGxlYXZlIGl0IHVwIHRvIHRoZSBjYWxsZXJcbiAgICAvLyB0byBrbm93IHdoZXRoZXIgaXQncyBnb2luZyB0byBiZSB1c2VkIGpvaW5lZCBvciBpbiBwYXJ0cy5cbiAgICAvLyBBbmQsIGlmIHRoZSBzdGFydCBpcyBhZGp1c3RlZCBzbGlnaHRseSwgY2FuIGRvIHRoZSBzYW1lIHRoZXJlOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAoPzovfF4pXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogKD86L3xeKSg/IVxcLilcbiAgICAvL1xuICAgIC8vIEJ1dCBpdCdzIGJldHRlciB0byBoYXZlIGEgc2ltcGxlciBiaW5kaW5nIHdpdGhvdXQgYSBjb25kaXRpb25hbCwgZm9yXG4gICAgLy8gcGVyZm9ybWFuY2UsIHNvIHByb2JhYmx5IGJldHRlciB0byByZXR1cm4gYm90aCBzdGFydCBvcHRpb25zLlxuICAgIC8vXG4gICAgLy8gVGhlbiB0aGUgY2FsbGVyIGp1c3QgaWdub3JlcyB0aGUgZW5kIGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBwYXR0ZXJuLFxuICAgIC8vIGFuZCB0aGUgc3RhcnQgYWx3YXlzIGdldHMgYXBwbGllZC5cbiAgICAvL1xuICAgIC8vIEJ1dCB0aGF0J3MgYWx3YXlzIGdvaW5nIHRvIGJlICQgaWYgaXQncyB0aGUgZW5kaW5nIHBhdHRlcm4sIG9yIG5vdGhpbmcsXG4gICAgLy8gc28gdGhlIGNhbGxlciBjYW4ganVzdCBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gYnVpbGRpbmcuXG4gICAgLy9cbiAgICAvLyBTbyB0aGUgdG9kbyBpczpcbiAgICAvLyAtIGJldHRlciBkZXRlY3Qgd2hhdCBraW5kIG9mIHN0YXJ0IGlzIG5lZWRlZFxuICAgIC8vIC0gcmV0dXJuIGJvdGggZmxhdm9ycyBvZiBzdGFydGluZyBwYXR0ZXJuXG4gICAgLy8gLSBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gY3JlYXRpbmcgdGhlIGFjdHVhbCBSZWdFeHBcbiAgICAvL1xuICAgIC8vIEFoLCBidXQgd2FpdCwgbm8sIHRoYXQgYWxsIG9ubHkgYXBwbGllcyB0byB0aGUgcm9vdCB3aGVuIHRoZSBmaXJzdCBwYXR0ZXJuXG4gICAgLy8gaXMgbm90IGFuIGV4dGdsb2IuIElmIHRoZSBmaXJzdCBwYXR0ZXJuIElTIGFuIGV4dGdsb2IsIHRoZW4gd2UgbmVlZCBhbGxcbiAgICAvLyB0aGF0IGRvdCBwcmV2ZW50aW9uIGJpeiB0byBsaXZlIGluIHRoZSBleHRnbG9iIHBvcnRpb25zLCBiZWNhdXNlIGVnXG4gICAgLy8gKygqfC54KikgY2FuIG1hdGNoIC54eSBidXQgbm90IC55eC5cbiAgICAvL1xuICAgIC8vIFNvLCByZXR1cm4gdGhlIHR3byBmbGF2b3JzIGlmIGl0J3MgI3Jvb3QgYW5kIHRoZSBmaXJzdCBjaGlsZCBpcyBub3QgYW5cbiAgICAvLyBBU1QsIG90aGVyd2lzZSBsZWF2ZSBpdCB0byB0aGUgY2hpbGQgQVNUIHRvIGhhbmRsZSBpdCwgYW5kIHRoZXJlLFxuICAgIC8vIHVzZSB0aGUgKD86XnwvKSBzdHlsZSBvZiBzdGFydCBiaW5kaW5nLlxuICAgIC8vXG4gICAgLy8gRXZlbiBzaW1wbGlmaWVkIGZ1cnRoZXI6XG4gICAgLy8gLSBTaW5jZSB0aGUgc3RhcnQgZm9yIGEgam9pbiBpcyBlZyAvKD8hXFwuKSBhbmQgdGhlIHN0YXJ0IGZvciBhIHBhcnRcbiAgICAvLyBpcyBeKD8hXFwuKSwgd2UgY2FuIGp1c3QgcHJlcGVuZCAoPyFcXC4pIHRvIHRoZSBwYXR0ZXJuIChlaXRoZXIgcm9vdFxuICAgIC8vIG9yIHN0YXJ0IG9yIHdoYXRldmVyKSBhbmQgcHJlcGVuZCBeIG9yIC8gYXQgdGhlIFJlZ2V4cCBjb25zdHJ1Y3Rpb24uXG4gICAgdG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpIHtcbiAgICAgICAgY29uc3QgZG90ID0gYWxsb3dEb3QgPz8gISF0aGlzLiNvcHRpb25zLmRvdDtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICB0aGlzLiNmaWxsTmVncygpO1xuICAgICAgICBpZiAoIXRoaXMudHlwZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9FbXB0eSA9IHRoaXMuaXNTdGFydCgpICYmIHRoaXMuaXNFbmQoKTtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHRoaXMuI3BhcnRzXG4gICAgICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcmUsIF8sIGhhc01hZ2ljLCB1ZmxhZ10gPSB0eXBlb2YgcCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBBU1QuI3BhcnNlR2xvYihwLCB0aGlzLiNoYXNNYWdpYywgbm9FbXB0eSlcbiAgICAgICAgICAgICAgICAgICAgOiBwLnRvUmVnRXhwU291cmNlKGFsbG93RG90KTtcbiAgICAgICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHRoaXMuI2hhc01hZ2ljIHx8IGhhc01hZ2ljO1xuICAgICAgICAgICAgICAgIHRoaXMuI3VmbGFnID0gdGhpcy4jdWZsYWcgfHwgdWZsYWc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3RhcnQoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy4jcGFydHNbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHN0cmluZyB0aGF0IHdpbGwgbWF0Y2ggdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuLFxuICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBkb3RzIGFuZCBzdWNoLlxuICAgICAgICAgICAgICAgICAgICAvLyAnLicgYW5kICcuLicgY2Fubm90IG1hdGNoIHVubGVzcyB0aGUgcGF0dGVybiBpcyB0aGF0IGV4YWN0bHksXG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgaXQgc3RhcnRzIHdpdGggLiBvciBkb3Q6dHJ1ZSBpcyBzZXQuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdFRyYXZBbGxvd2VkID0gdGhpcy4jcGFydHMubGVuZ3RoID09PSAxICYmIGp1c3REb3RzLmhhcyh0aGlzLiNwYXJ0c1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG90VHJhdkFsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcyA9IGFkZFBhdHRlcm5TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYSBwb3NzaWJpbGl0eSBvZiBtYXRjaGluZyAuIG9yIC4uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHByZXZlbnQgdGhhdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWROb1RyYXYgPSBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvdHMgYXJlIGFsbG93ZWQsIGFuZCB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgIChkb3QgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDApKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBcXC4sIGFuZCB0aGVuIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcmMuc3RhcnRzV2l0aCgnXFxcXC4nKSAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMikpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFxcLlxcLiwgYW5kIHRoZW4gWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyYy5zdGFydHNXaXRoKCdcXFxcLlxcXFwuJykgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDQpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIHByZXZlbnQgZG90cyBpZiBpdCBjYW4ndCBtYXRjaCBhIGRvdCwgb3IgaWYgYVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3ViLXBhdHRlcm4gd2lsbCBiZSBwcmV2ZW50aW5nIGl0IGFueXdheS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWROb0RvdCA9ICFkb3QgJiYgIWFsbG93RG90ICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG5lZWROb1RyYXYgPyBzdGFydE5vVHJhdmVyc2FsIDogbmVlZE5vRG90ID8gc3RhcnROb0RvdCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXBwZW5kIHRoZSBcImVuZCBvZiBwYXRoIHBvcnRpb25cIiBwYXR0ZXJuIHRvIG5lZ2F0aW9uIHRhaWxzXG4gICAgICAgICAgICBsZXQgZW5kID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VuZCgpICYmXG4gICAgICAgICAgICAgICAgdGhpcy4jcm9vdC4jZmlsbGVkTmVncyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuI3BhcmVudD8udHlwZSA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgZW5kID0gJyg/OiR8XFxcXC8pJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbmFsID0gc3RhcnQgKyBzcmMgKyBlbmQ7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGZpbmFsLFxuICAgICAgICAgICAgICAgICgwLCB1bmVzY2FwZV9qc18xLnVuZXNjYXBlKShzcmMpLFxuICAgICAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgICAgIHRoaXMuI3VmbGFnLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgYm9keSAqdHdpY2UqIGlmIGl0J3MgYSByZXBlYXQgcGF0dGVyblxuICAgICAgICAvLyBhdCB0aGUgc3RhcnQsIG9uY2UgaW4gbm9kb3QgbW9kZSwgdGhlbiBhZ2FpbiBpbiBkb3QgbW9kZSwgc28gYVxuICAgICAgICAvLyBwYXR0ZXJuIGxpa2UgKig/KSBjYW4gbWF0Y2ggJ3gueSdcbiAgICAgICAgY29uc3QgcmVwZWF0ZWQgPSB0aGlzLnR5cGUgPT09ICcqJyB8fCB0aGlzLnR5cGUgPT09ICcrJztcbiAgICAgICAgLy8gc29tZSBraW5kIG9mIGV4dGdsb2JcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnR5cGUgPT09ICchJyA/ICcoPzooPyEoPzonIDogJyg/Oic7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy4jcGFydHNUb1JlZ0V4cChkb3QpO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpICYmICFib2R5ICYmIHRoaXMudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICAvLyBpbnZhbGlkIGV4dGdsb2IsIGhhcyB0byBhdCBsZWFzdCBiZSAqc29tZXRoaW5nKiBwcmVzZW50LCBpZiBpdCdzXG4gICAgICAgICAgICAvLyB0aGUgZW50aXJlIHBhdGggcG9ydGlvbi5cbiAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLiNwYXJ0cyA9IFtzXTtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBbcywgKDAsIHVuZXNjYXBlX2pzXzEudW5lc2NhcGUpKHRoaXMudG9TdHJpbmcoKSksIGZhbHNlLCBmYWxzZV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gWFhYIGFic3RyYWN0IG91dCB0aGlzIG1hcCBtZXRob2RcbiAgICAgICAgbGV0IGJvZHlEb3RBbGxvd2VkID0gIXJlcGVhdGVkIHx8IGFsbG93RG90IHx8IGRvdCB8fCAhc3RhcnROb0RvdFxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiB0aGlzLiNwYXJ0c1RvUmVnRXhwKHRydWUpO1xuICAgICAgICBpZiAoYm9keURvdEFsbG93ZWQgPT09IGJvZHkpIHtcbiAgICAgICAgICAgIGJvZHlEb3RBbGxvd2VkID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHlEb3RBbGxvd2VkKSB7XG4gICAgICAgICAgICBib2R5ID0gYCg/OiR7Ym9keX0pKD86JHtib2R5RG90QWxsb3dlZH0pKj9gO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFuIGVtcHR5ICEoKSBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gYSBzdGFyTm9FbXB0eVxuICAgICAgICBsZXQgZmluYWwgPSAnJztcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJyEnICYmIHRoaXMuI2VtcHR5RXh0KSB7XG4gICAgICAgICAgICBmaW5hbCA9ICh0aGlzLmlzU3RhcnQoKSAmJiAhZG90ID8gc3RhcnROb0RvdCA6ICcnKSArIHN0YXJOb0VtcHR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY2xvc2UgPSB0aGlzLnR5cGUgPT09ICchJ1xuICAgICAgICAgICAgICAgID8gLy8gISgpIG11c3QgbWF0Y2ggc29tZXRoaW5nLGJ1dCAhKHgpIGNhbiBtYXRjaCAnJ1xuICAgICAgICAgICAgICAgICAgICAnKSknICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmlzU3RhcnQoKSAmJiAhZG90ICYmICFhbGxvd0RvdCA/IHN0YXJ0Tm9Eb3QgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhciArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJ0AnXG4gICAgICAgICAgICAgICAgICAgID8gJyknXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnPydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJyk/J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICcrJyAmJiBib2R5RG90QWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJyknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICcqJyAmJiBib2R5RG90QWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGApP2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgKSR7dGhpcy50eXBlfWA7XG4gICAgICAgICAgICBmaW5hbCA9IHN0YXJ0ICsgYm9keSArIGNsb3NlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBmaW5hbCxcbiAgICAgICAgICAgICgwLCB1bmVzY2FwZV9qc18xLnVuZXNjYXBlKShib2R5KSxcbiAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgdGhpcy4jdWZsYWcsXG4gICAgICAgIF07XG4gICAgfVxuICAgICNwYXJ0c1RvUmVnRXhwKGRvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFydHNcbiAgICAgICAgICAgIC5tYXAocCA9PiB7XG4gICAgICAgICAgICAvLyBleHRnbG9iIEFTVHMgc2hvdWxkIG9ubHkgY29udGFpbiBwYXJlbnQgQVNUc1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgdHlwZSBpbiBleHRnbG9iIGFzdD8/Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgLy8gY2FuIGlnbm9yZSBoYXNNYWdpYywgYmVjYXVzZSBleHRnbG9icyBhcmUgYWxyZWFkeSBhbHdheXMgbWFnaWNcbiAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgX2hhc01hZ2ljLCB1ZmxhZ10gPSBwLnRvUmVnRXhwU291cmNlKGRvdCk7XG4gICAgICAgICAgICB0aGlzLiN1ZmxhZyA9IHRoaXMuI3VmbGFnIHx8IHVmbGFnO1xuICAgICAgICAgICAgcmV0dXJuIHJlO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcihwID0+ICEodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpKSB8fCAhIXApXG4gICAgICAgICAgICAuam9pbignfCcpO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlR2xvYihnbG9iLCBoYXNNYWdpYywgbm9FbXB0eSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgcmUgPSAnJztcbiAgICAgICAgbGV0IHVmbGFnID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYyA9IGdsb2IuY2hhckF0KGkpO1xuICAgICAgICAgICAgaWYgKGVzY2FwaW5nKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZSArPSAocmVTcGVjaWFscy5oYXMoYykgPyAnXFxcXCcgOiAnJykgKyBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSBnbG9iLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gJ1xcXFxcXFxcJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3NyYywgbmVlZFVmbGFnLCBjb25zdW1lZCwgbWFnaWNdID0gKDAsIGJyYWNlX2V4cHJlc3Npb25zX2pzXzEucGFyc2VDbGFzcykoZ2xvYiwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHNyYztcbiAgICAgICAgICAgICAgICAgICAgdWZsYWcgPSB1ZmxhZyB8fCBuZWVkVWZsYWc7XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gY29uc3VtZWQgLSAxO1xuICAgICAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IGhhc01hZ2ljIHx8IG1hZ2ljO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vRW1wdHkgJiYgZ2xvYiA9PT0gJyonKVxuICAgICAgICAgICAgICAgICAgICByZSArPSBzdGFyTm9FbXB0eTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHN0YXI7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgICAgIHJlICs9IHFtYXJrO1xuICAgICAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlICs9IHJlZ0V4cEVzY2FwZShjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3JlLCAoMCwgdW5lc2NhcGVfanNfMS51bmVzY2FwZSkoZ2xvYiksICEhaGFzTWFnaWMsIHVmbGFnXTtcbiAgICB9XG59XG5leHBvcnRzLkFTVCA9IEFTVDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lc2NhcGUgPSB2b2lkIDA7XG4vKipcbiAqIEVzY2FwZSBhbGwgbWFnaWMgY2hhcmFjdGVycyBpbiBhIGdsb2IgcGF0dGVybi5cbiAqXG4gKiBJZiB0aGUge0BsaW5rIHdpbmRvd3NQYXRoc05vRXNjYXBlIHwgR2xvYk9wdGlvbnMud2luZG93c1BhdGhzTm9Fc2NhcGV9XG4gKiBvcHRpb24gaXMgdXNlZCwgdGhlbiBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIGJ5IHdyYXBwaW5nIGluIGBbXWAsIGJlY2F1c2VcbiAqIGEgbWFnaWMgY2hhcmFjdGVyIHdyYXBwZWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MgY2FuIG9ubHkgYmUgc2F0aXNmaWVkIGJ5XG4gKiB0aGF0IGV4YWN0IGNoYXJhY3Rlci4gIEluIHRoaXMgbW9kZSwgYFxcYCBpcyBfbm90XyBlc2NhcGVkLCBiZWNhdXNlIGl0IGlzXG4gKiBub3QgaW50ZXJwcmV0ZWQgYXMgYSBtYWdpYyBjaGFyYWN0ZXIsIGJ1dCBpbnN0ZWFkIGFzIGEgcGF0aCBzZXBhcmF0b3IuXG4gKi9cbmNvbnN0IGVzY2FwZSA9IChzLCB7IHdpbmRvd3NQYXRoc05vRXNjYXBlID0gZmFsc2UsIH0gPSB7fSkgPT4ge1xuICAgIC8vIGRvbid0IG5lZWQgdG8gZXNjYXBlICtAISBiZWNhdXNlIHdlIGVzY2FwZSB0aGUgcGFyZW5zXG4gICAgLy8gdGhhdCBtYWtlIHRob3NlIG1hZ2ljLCBhbmQgZXNjYXBpbmcgISBhcyBbIV0gaXNuJ3QgdmFsaWQsXG4gICAgLy8gYmVjYXVzZSBbIV1dIGlzIGEgdmFsaWQgZ2xvYiBjbGFzcyBtZWFuaW5nIG5vdCAnXScuXG4gICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlXG4gICAgICAgID8gcy5yZXBsYWNlKC9bPyooKVtcXF1dL2csICdbJCZdJylcbiAgICAgICAgOiBzLnJlcGxhY2UoL1s/KigpW1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbn07XG5leHBvcnRzLmVzY2FwZSA9IGVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzY2FwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51bmVzY2FwZSA9IGV4cG9ydHMuZXNjYXBlID0gZXhwb3J0cy5BU1QgPSBleHBvcnRzLk1pbmltYXRjaCA9IGV4cG9ydHMubWF0Y2ggPSBleHBvcnRzLm1ha2VSZSA9IGV4cG9ydHMuYnJhY2VFeHBhbmQgPSBleHBvcnRzLmRlZmF1bHRzID0gZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLkdMT0JTVEFSID0gZXhwb3J0cy5zZXAgPSBleHBvcnRzLm1pbmltYXRjaCA9IHZvaWQgMDtcbmNvbnN0IGJyYWNlX2V4cGFuc2lvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJicmFjZS1leHBhbnNpb25cIikpO1xuY29uc3QgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydC12YWxpZC1wYXR0ZXJuLmpzXCIpO1xuY29uc3QgYXN0X2pzXzEgPSByZXF1aXJlKFwiLi9hc3QuanNcIik7XG5jb25zdCBlc2NhcGVfanNfMSA9IHJlcXVpcmUoXCIuL2VzY2FwZS5qc1wiKTtcbmNvbnN0IHVuZXNjYXBlX2pzXzEgPSByZXF1aXJlKFwiLi91bmVzY2FwZS5qc1wiKTtcbmNvbnN0IG1pbmltYXRjaCA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAoMCwgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMS5hc3NlcnRWYWxpZFBhdHRlcm4pKHBhdHRlcm4pO1xuICAgIC8vIHNob3J0Y3V0OiBjb21tZW50cyBtYXRjaCBub3RoaW5nLlxuICAgIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1hdGNoKHApO1xufTtcbmV4cG9ydHMubWluaW1hdGNoID0gbWluaW1hdGNoO1xuLy8gT3B0aW1pemVkIGNoZWNraW5nIGZvciB0aGUgbW9zdCBjb21tb24gZ2xvYiBwYXR0ZXJucy5cbmNvbnN0IHN0YXJEb3RFeHRSRSA9IC9eXFwqKyhbXitAIT9cXCpcXFtcXChdKikkLztcbmNvbnN0IHN0YXJEb3RFeHRUZXN0ID0gKGV4dCkgPT4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdERvdCA9IChleHQpID0+IChmKSA9PiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZSA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZURvdCA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHN0YXJEb3RTdGFyUkUgPSAvXlxcKitcXC5cXCorJC87XG5jb25zdCBzdGFyRG90U3RhclRlc3QgPSAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYuaW5jbHVkZXMoJy4nKTtcbmNvbnN0IHN0YXJEb3RTdGFyVGVzdERvdCA9IChmKSA9PiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJyAmJiBmLmluY2x1ZGVzKCcuJyk7XG5jb25zdCBkb3RTdGFyUkUgPSAvXlxcLlxcKiskLztcbmNvbnN0IGRvdFN0YXJUZXN0ID0gKGYpID0+IGYgIT09ICcuJyAmJiBmICE9PSAnLi4nICYmIGYuc3RhcnRzV2l0aCgnLicpO1xuY29uc3Qgc3RhclJFID0gL15cXCorJC87XG5jb25zdCBzdGFyVGVzdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG5jb25zdCBzdGFyVGVzdERvdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJztcbmNvbnN0IHFtYXJrc1JFID0gL15cXD8rKFteK0AhP1xcKlxcW1xcKF0qKT8kLztcbmNvbnN0IHFtYXJrc1Rlc3ROb2Nhc2UgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dChbJDBdKTtcbiAgICBpZiAoIWV4dClcbiAgICAgICAgcmV0dXJuIG5vZXh0O1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gbm9leHQoZikgJiYgZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vY2FzZURvdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0RG90KFskMF0pO1xuICAgIGlmICghZXh0KVxuICAgICAgICByZXR1cm4gbm9leHQ7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBub2V4dChmKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0RG90ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHREb3QoWyQwXSk7XG4gICAgcmV0dXJuICFleHQgPyBub2V4dCA6IChmKSA9PiBub2V4dChmKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0KFskMF0pO1xuICAgIHJldHVybiAhZXh0ID8gbm9leHQgOiAoZikgPT4gbm9leHQoZikgJiYgZi5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3ROb0V4dCA9IChbJDBdKSA9PiB7XG4gICAgY29uc3QgbGVuID0gJDAubGVuZ3RoO1xuICAgIHJldHVybiAoZikgPT4gZi5sZW5ndGggPT09IGxlbiAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vRXh0RG90ID0gKFskMF0pID0+IHtcbiAgICBjb25zdCBsZW4gPSAkMC5sZW5ndGg7XG4gICAgcmV0dXJuIChmKSA9PiBmLmxlbmd0aCA9PT0gbGVuICYmIGYgIT09ICcuJyAmJiBmICE9PSAnLi4nO1xufTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzXG4gICAgPyAodHlwZW9mIHByb2Nlc3MuZW52ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBwcm9jZXNzLmVudiAmJlxuICAgICAgICBwcm9jZXNzLmVudi5fX01JTklNQVRDSF9URVNUSU5HX1BMQVRGT1JNX18pIHx8XG4gICAgICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdwb3NpeCcpO1xuY29uc3QgcGF0aCA9IHtcbiAgICB3aW4zMjogeyBzZXA6ICdcXFxcJyB9LFxuICAgIHBvc2l4OiB7IHNlcDogJy8nIH0sXG59O1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmV4cG9ydHMuc2VwID0gZGVmYXVsdFBsYXRmb3JtID09PSAnd2luMzInID8gcGF0aC53aW4zMi5zZXAgOiBwYXRoLnBvc2l4LnNlcDtcbmV4cG9ydHMubWluaW1hdGNoLnNlcCA9IGV4cG9ydHMuc2VwO1xuZXhwb3J0cy5HTE9CU1RBUiA9IFN5bWJvbCgnZ2xvYnN0YXIgKionKTtcbmV4cG9ydHMubWluaW1hdGNoLkdMT0JTVEFSID0gZXhwb3J0cy5HTE9CU1RBUjtcbi8vIGFueSBzaW5nbGUgdGhpbmcgb3RoZXIgdGhhbiAvXG4vLyBkb24ndCBuZWVkIHRvIGVzY2FwZSAvIHdoZW4gdXNpbmcgbmV3IFJlZ0V4cCgpXG5jb25zdCBxbWFyayA9ICdbXi9dJztcbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG5jb25zdCBzdGFyID0gcW1hcmsgKyAnKj8nO1xuLy8gKiogd2hlbiBkb3RzIGFyZSBhbGxvd2VkLiAgQW55dGhpbmcgZ29lcywgZXhjZXB0IC4uIGFuZCAuXG4vLyBub3QgKF4gb3IgLyBmb2xsb3dlZCBieSBvbmUgb3IgdHdvIGRvdHMgZm9sbG93ZWQgYnkgJCBvciAvKSxcbi8vIGZvbGxvd2VkIGJ5IGFueXRoaW5nLCBhbnkgbnVtYmVyIG9mIHRpbWVzLlxuY29uc3QgdHdvU3RhckRvdCA9ICcoPzooPyEoPzpcXFxcL3xeKSg/OlxcXFwuezEsMn0pKCR8XFxcXC8pKS4pKj8nO1xuLy8gbm90IGEgXiBvciAvIGZvbGxvd2VkIGJ5IGEgZG90LFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyTm9Eb3QgPSAnKD86KD8hKD86XFxcXC98XilcXFxcLikuKSo/JztcbmNvbnN0IGZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IChwKSA9PiAoMCwgZXhwb3J0cy5taW5pbWF0Y2gpKHAsIHBhdHRlcm4sIG9wdGlvbnMpO1xuZXhwb3J0cy5maWx0ZXIgPSBmaWx0ZXI7XG5leHBvcnRzLm1pbmltYXRjaC5maWx0ZXIgPSBleHBvcnRzLmZpbHRlcjtcbmNvbnN0IGV4dCA9IChhLCBiID0ge30pID0+IE9iamVjdC5hc3NpZ24oe30sIGEsIGIpO1xuY29uc3QgZGVmYXVsdHMgPSAoZGVmKSA9PiB7XG4gICAgaWYgKCFkZWYgfHwgdHlwZW9mIGRlZiAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKGRlZikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm1pbmltYXRjaDtcbiAgICB9XG4gICAgY29uc3Qgb3JpZyA9IGV4cG9ydHMubWluaW1hdGNoO1xuICAgIGNvbnN0IG0gPSAocCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnKHAsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtLCB7XG4gICAgICAgIE1pbmltYXRjaDogY2xhc3MgTWluaW1hdGNoIGV4dGVuZHMgb3JpZy5NaW5pbWF0Y2gge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIGRlZmF1bHRzKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSkuTWluaW1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBBU1Q6IGNsYXNzIEFTVCBleHRlbmRzIG9yaWcuQVNUIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgY29uc3RydWN0b3IodHlwZSwgcGFyZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcih0eXBlLCBwYXJlbnQsIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBzdGF0aWMgZnJvbUdsb2IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWcuQVNULmZyb21HbG9iKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdW5lc2NhcGU6IChzLCBvcHRpb25zID0ge30pID0+IG9yaWcudW5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBlc2NhcGU6IChzLCBvcHRpb25zID0ge30pID0+IG9yaWcuZXNjYXBlKHMsIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZmlsdGVyOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmZpbHRlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGRlZmF1bHRzOiAob3B0aW9ucykgPT4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIG1ha2VSZTogKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5tYWtlUmUocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBicmFjZUV4cGFuZDogKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5icmFjZUV4cGFuZChwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIG1hdGNoOiAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1hdGNoKGxpc3QsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgc2VwOiBvcmlnLnNlcCxcbiAgICAgICAgR0xPQlNUQVI6IGV4cG9ydHMuR0xPQlNUQVIsXG4gICAgfSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuZXhwb3J0cy5taW5pbWF0Y2guZGVmYXVsdHMgPSBleHBvcnRzLmRlZmF1bHRzO1xuLy8gQnJhY2UgZXhwYW5zaW9uOlxuLy8gYXtiLGN9ZCAtPiBhYmQgYWNkXG4vLyBhe2IsfWMgLT4gYWJjIGFjXG4vLyBhezAuLjN9ZCAtPiBhMGQgYTFkIGEyZCBhM2Rcbi8vIGF7Yixje2QsZX1mfWcgLT4gYWJnIGFjZGZnIGFjZWZnXG4vLyBhe2IsY31ke2UsZn1nIC0+IGFiZGVnIGFjZGVnIGFiZGVnIGFiZGZnXG4vL1xuLy8gSW52YWxpZCBzZXRzIGFyZSBub3QgZXhwYW5kZWQuXG4vLyBhezIuLn1iIC0+IGF7Mi4ufWJcbi8vIGF7Yn1jIC0+IGF7Yn1jXG5jb25zdCBicmFjZUV4cGFuZCA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAoMCwgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMS5hc3NlcnRWYWxpZFBhdHRlcm4pKHBhdHRlcm4pO1xuICAgIC8vIFRoYW5rcyB0byBZZXRpbmcgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS95ZXRpbmdsaT4gZm9yXG4gICAgLy8gaW1wcm92aW5nIHRoaXMgcmVnZXhwIHRvIGF2b2lkIGEgUmVET1MgdnVsbmVyYWJpbGl0eS5cbiAgICBpZiAob3B0aW9ucy5ub2JyYWNlIHx8ICEvXFx7KD86KD8hXFx7KS4pKlxcfS8udGVzdChwYXR0ZXJuKSkge1xuICAgICAgICAvLyBzaG9ydGN1dC4gbm8gbmVlZCB0byBleHBhbmQuXG4gICAgICAgIHJldHVybiBbcGF0dGVybl07XG4gICAgfVxuICAgIHJldHVybiAoMCwgYnJhY2VfZXhwYW5zaW9uXzEuZGVmYXVsdCkocGF0dGVybik7XG59O1xuZXhwb3J0cy5icmFjZUV4cGFuZCA9IGJyYWNlRXhwYW5kO1xuZXhwb3J0cy5taW5pbWF0Y2guYnJhY2VFeHBhbmQgPSBleHBvcnRzLmJyYWNlRXhwYW5kO1xuLy8gcGFyc2UgYSBjb21wb25lbnQgb2YgdGhlIGV4cGFuZGVkIHNldC5cbi8vIEF0IHRoaXMgcG9pbnQsIG5vIHBhdHRlcm4gbWF5IGNvbnRhaW4gXCIvXCIgaW4gaXRcbi8vIHNvIHdlJ3JlIGdvaW5nIHRvIHJldHVybiBhIDJkIGFycmF5LCB3aGVyZSBlYWNoIGVudHJ5IGlzIHRoZSBmdWxsXG4vLyBwYXR0ZXJuLCBzcGxpdCBvbiAnLycsIGFuZCB0aGVuIHR1cm5lZCBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uLlxuLy8gQSByZWdleHAgaXMgbWFkZSBhdCB0aGUgZW5kIHdoaWNoIGpvaW5zIGVhY2ggYXJyYXkgd2l0aCBhblxuLy8gZXNjYXBlZCAvLCBhbmQgYW5vdGhlciBmdWxsIG9uZSB3aGljaCBqb2lucyBlYWNoIHJlZ2V4cCB3aXRoIHwuXG4vL1xuLy8gRm9sbG93aW5nIHRoZSBsZWFkIG9mIEJhc2ggNC4xLCBub3RlIHRoYXQgXCIqKlwiIG9ubHkgaGFzIHNwZWNpYWwgbWVhbmluZ1xuLy8gd2hlbiBpdCBpcyB0aGUgKm9ubHkqIHRoaW5nIGluIGEgcGF0aCBwb3J0aW9uLiAgT3RoZXJ3aXNlLCBhbnkgc2VyaWVzXG4vLyBvZiAqIGlzIGVxdWl2YWxlbnQgdG8gYSBzaW5nbGUgKi4gIEdsb2JzdGFyIGJlaGF2aW9yIGlzIGVuYWJsZWQgYnlcbi8vIGRlZmF1bHQsIGFuZCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBvcHRpb25zLm5vZ2xvYnN0YXIuXG5jb25zdCBtYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1ha2VSZSgpO1xuZXhwb3J0cy5tYWtlUmUgPSBtYWtlUmU7XG5leHBvcnRzLm1pbmltYXRjaC5tYWtlUmUgPSBleHBvcnRzLm1ha2VSZTtcbmNvbnN0IG1hdGNoID0gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKTtcbiAgICBsaXN0ID0gbGlzdC5maWx0ZXIoZiA9PiBtbS5tYXRjaChmKSk7XG4gICAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgICAgICBsaXN0LnB1c2gocGF0dGVybik7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufTtcbmV4cG9ydHMubWF0Y2ggPSBtYXRjaDtcbmV4cG9ydHMubWluaW1hdGNoLm1hdGNoID0gZXhwb3J0cy5tYXRjaDtcbi8vIHJlcGxhY2Ugc3R1ZmYgbGlrZSBcXCogd2l0aCAqXG5jb25zdCBnbG9iTWFnaWMgPSAvWz8qXXxbK0AhXVxcKC4qP1xcKXxcXFt8XFxdLztcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG5jbGFzcyBNaW5pbWF0Y2gge1xuICAgIG9wdGlvbnM7XG4gICAgc2V0O1xuICAgIHBhdHRlcm47XG4gICAgd2luZG93c1BhdGhzTm9Fc2NhcGU7XG4gICAgbm9uZWdhdGU7XG4gICAgbmVnYXRlO1xuICAgIGNvbW1lbnQ7XG4gICAgZW1wdHk7XG4gICAgcHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgcGFydGlhbDtcbiAgICBnbG9iU2V0O1xuICAgIGdsb2JQYXJ0cztcbiAgICBub2Nhc2U7XG4gICAgaXNXaW5kb3dzO1xuICAgIHBsYXRmb3JtO1xuICAgIHdpbmRvd3NOb01hZ2ljUm9vdDtcbiAgICByZWdleHA7XG4gICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gb3B0aW9ucy5wbGF0Zm9ybSB8fCBkZWZhdWx0UGxhdGZvcm07XG4gICAgICAgIHRoaXMuaXNXaW5kb3dzID0gdGhpcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgICAgICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9XG4gICAgICAgICAgICAhIW9wdGlvbnMud2luZG93c1BhdGhzTm9Fc2NhcGUgfHwgb3B0aW9ucy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzID0gISFvcHRpb25zLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzO1xuICAgICAgICB0aGlzLnJlZ2V4cCA9IG51bGw7XG4gICAgICAgIHRoaXMubmVnYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubm9uZWdhdGUgPSAhIW9wdGlvbnMubm9uZWdhdGU7XG4gICAgICAgIHRoaXMuY29tbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFydGlhbCA9ICEhb3B0aW9ucy5wYXJ0aWFsO1xuICAgICAgICB0aGlzLm5vY2FzZSA9ICEhdGhpcy5vcHRpb25zLm5vY2FzZTtcbiAgICAgICAgdGhpcy53aW5kb3dzTm9NYWdpY1Jvb3QgPVxuICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzTm9NYWdpY1Jvb3QgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy53aW5kb3dzTm9NYWdpY1Jvb3RcbiAgICAgICAgICAgICAgICA6ICEhKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMubm9jYXNlKTtcbiAgICAgICAgdGhpcy5nbG9iU2V0ID0gW107XG4gICAgICAgIHRoaXMuZ2xvYlBhcnRzID0gW107XG4gICAgICAgIHRoaXMuc2V0ID0gW107XG4gICAgICAgIC8vIG1ha2UgdGhlIHNldCBvZiByZWdleHBzIGV0Yy5cbiAgICAgICAgdGhpcy5tYWtlKCk7XG4gICAgfVxuICAgIGhhc01hZ2ljKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm1hZ2ljYWxCcmFjZXMgJiYgdGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0dGVybikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZGVidWcoLi4uXykgeyB9XG4gICAgbWFrZSgpIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybjtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gZW1wdHkgcGF0dGVybnMgYW5kIGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgICAgIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgICAgIHRoaXMuZW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0ZXAgMTogZmlndXJlIG91dCBuZWdhdGlvbiwgZXRjLlxuICAgICAgICB0aGlzLnBhcnNlTmVnYXRlKCk7XG4gICAgICAgIC8vIHN0ZXAgMjogZXhwYW5kIGJyYWNlc1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbLi4ubmV3IFNldCh0aGlzLmJyYWNlRXhwYW5kKCkpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcgPSAoLi4uYXJncykgPT4gY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgdGhpcy5nbG9iU2V0KTtcbiAgICAgICAgLy8gc3RlcCAzOiBub3cgd2UgaGF2ZSBhIHNldCwgc28gdHVybiBlYWNoIG9uZSBpbnRvIGEgc2VyaWVzIG9mXG4gICAgICAgIC8vIHBhdGgtcG9ydGlvbiBtYXRjaGluZyBwYXR0ZXJucy5cbiAgICAgICAgLy8gVGhlc2Ugd2lsbCBiZSByZWdleHBzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgXCIqKlwiLCB3aGljaCBpc1xuICAgICAgICAvLyBzZXQgdG8gdGhlIEdMT0JTVEFSIG9iamVjdCBmb3IgZ2xvYnN0YXIgYmVoYXZpb3IsXG4gICAgICAgIC8vIGFuZCB3aWxsIG5vdCBjb250YWluIGFueSAvIGNoYXJhY3RlcnNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gRmlyc3QsIHdlIHByZXByb2Nlc3MgdG8gbWFrZSB0aGUgZ2xvYiBwYXR0ZXJuIHNldHMgYSBiaXQgc2ltcGxlclxuICAgICAgICAvLyBhbmQgZGVkdXBlZC4gIFRoZXJlIGFyZSBzb21lIHBlcmYta2lsbGluZyBwYXR0ZXJucyB0aGF0IGNhbiBjYXVzZVxuICAgICAgICAvLyBwcm9ibGVtcyB3aXRoIGEgZ2xvYiB3YWxrLCBidXQgd2UgY2FuIHNpbXBsaWZ5IHRoZW0gZG93biBhIGJpdC5cbiAgICAgICAgY29uc3QgcmF3R2xvYlBhcnRzID0gdGhpcy5nbG9iU2V0Lm1hcChzID0+IHRoaXMuc2xhc2hTcGxpdChzKSk7XG4gICAgICAgIHRoaXMuZ2xvYlBhcnRzID0gdGhpcy5wcmVwcm9jZXNzKHJhd0dsb2JQYXJ0cyk7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JQYXJ0cyk7XG4gICAgICAgIC8vIGdsb2IgLS0+IHJlZ2V4cHNcbiAgICAgICAgbGV0IHNldCA9IHRoaXMuZ2xvYlBhcnRzLm1hcCgocywgXywgX18pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzV2luZG93cyAmJiB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCkge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0J3MgYSBkcml2ZSBvciB1bmMgcGF0aC5cbiAgICAgICAgICAgICAgICBjb25zdCBpc1VOQyA9IHNbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHNbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIChzWzJdID09PSAnPycgfHwgIWdsb2JNYWdpYy50ZXN0KHNbMl0pKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZ2xvYk1hZ2ljLnRlc3Qoc1szXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEcml2ZSA9IC9eW2Etel06L2kudGVzdChzWzBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNVTkMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5zLnNsaWNlKDAsIDQpLCAuLi5zLnNsaWNlKDQpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0RyaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbc1swXSwgLi4ucy5zbGljZSgxKS5tYXAoc3MgPT4gdGhpcy5wYXJzZShzcykpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcy5tYXAoc3MgPT4gdGhpcy5wYXJzZShzcykpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHNldCk7XG4gICAgICAgIC8vIGZpbHRlciBvdXQgZXZlcnl0aGluZyB0aGF0IGRpZG4ndCBjb21waWxlIHByb3Blcmx5LlxuICAgICAgICB0aGlzLnNldCA9IHNldC5maWx0ZXIocyA9PiBzLmluZGV4T2YoZmFsc2UpID09PSAtMSk7XG4gICAgICAgIC8vIGRvIG5vdCB0cmVhdCB0aGUgPyBpbiBVTkMgcGF0aHMgYXMgbWFnaWNcbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuc2V0W2ldO1xuICAgICAgICAgICAgICAgIGlmIChwWzBdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICBwWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdsb2JQYXJ0c1tpXVsyXSA9PT0gJz8nICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgIHBbMl0gPSAnPyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLnNldCk7XG4gICAgfVxuICAgIC8vIHZhcmlvdXMgdHJhbnNmb3JtcyB0byBlcXVpdmFsZW50IHBhdHRlcm4gc2V0cyB0aGF0IGFyZVxuICAgIC8vIGZhc3RlciB0byBwcm9jZXNzIGluIGEgZmlsZXN5c3RlbSB3YWxrLiAgVGhlIGdvYWwgaXMgdG9cbiAgICAvLyBlbGltaW5hdGUgd2hhdCB3ZSBjYW4sIGFuZCBwdXNoIGFsbCAqKiBwYXR0ZXJucyBhcyBmYXJcbiAgICAvLyB0byB0aGUgcmlnaHQgYXMgcG9zc2libGUsIGV2ZW4gaWYgaXQgaW5jcmVhc2VzIHRoZSBudW1iZXJcbiAgICAvLyBvZiBwYXR0ZXJucyB0aGF0IHdlIGhhdmUgdG8gcHJvY2Vzcy5cbiAgICBwcmVwcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICAvLyBpZiB3ZSdyZSBub3QgaW4gZ2xvYnN0YXIgbW9kZSwgdGhlbiB0dXJuIGFsbCAqKiBpbnRvICpcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub2dsb2JzdGFyKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2JQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ2xvYlBhcnRzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnbG9iUGFydHNbaV1bal0gPT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0c1tpXVtqXSA9ICcqJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IG9wdGltaXphdGlvbkxldmVsID0gMSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMikge1xuICAgICAgICAgICAgLy8gYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGZzIHdhbGtpbmdcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMSkge1xuICAgICAgICAgICAgLy8ganVzdCBiYXNpYyBvcHRpbWl6YXRpb25zIHRvIHJlbW92ZSBzb21lIC4uIHBhcnRzXG4gICAgICAgICAgICBnbG9iUGFydHMgPSB0aGlzLmxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGp1c3QgY29sbGFwc2UgbXVsdGlwbGUgKiogcG9ydGlvbnMgaW50byBvbmVcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuYWRqYXNjZW50R2xvYnN0YXJPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIGp1c3QgZ2V0IHJpZCBvZiBhZGphc2NlbnQgKiogcG9ydGlvbnNcbiAgICBhZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cykge1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLm1hcChwYXJ0cyA9PiB7XG4gICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGdzID0gcGFydHMuaW5kZXhPZignKionLCBncyArIDEpKSkge1xuICAgICAgICAgICAgICAgIGxldCBpID0gZ3M7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHBhcnRzW2kgKyAxXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpICE9PSBncykge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MsIGkgLSBncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZ2V0IHJpZCBvZiBhZGphc2NlbnQgKiogYW5kIHJlc29sdmUgLi4gcG9ydGlvbnNcbiAgICBsZXZlbE9uZU9wdGltaXplKGdsb2JQYXJ0cykge1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLm1hcChwYXJ0cyA9PiB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnJlZHVjZSgoc2V0LCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHNldFtzZXQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcqKicgJiYgcHJldiA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiBwcmV2ICE9PSAnLi4nICYmIHByZXYgIT09ICcuJyAmJiBwcmV2ICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldC5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGV2ZWxUd29GaWxlT3B0aW1pemUocGFydHMpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnRzKSkge1xuICAgICAgICAgICAgcGFydHMgPSB0aGlzLnNsYXNoU3BsaXQocGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBzcXVlZXplIG91dCBVTkMgcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgcCA9PT0gJycgJiYgcGFydHNbMF0gPT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwID09PSAnLicgfHwgcCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzWzBdID09PSAnLicgJiZcbiAgICAgICAgICAgICAgICAgICAgcGFydHMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gPHByZT4vPHA+Ly4uLzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoLTEgIT09IChkZCA9IHBhcnRzLmluZGV4T2YoJy4uJywgZGQgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZGQgLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocCAmJiBwICE9PSAnLicgJiYgcCAhPT0gJy4uJyAmJiBwICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShkZCAtIDEsIDIpO1xuICAgICAgICAgICAgICAgICAgICBkZCAtPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoZGlkU29tZXRoaW5nKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMCA/IFsnJ10gOiBwYXJ0cztcbiAgICB9XG4gICAgLy8gRmlyc3QgcGhhc2U6IHNpbmdsZS1wYXR0ZXJuIHByb2Nlc3NpbmdcbiAgICAvLyA8cHJlPiBpcyAxIG9yIG1vcmUgcG9ydGlvbnNcbiAgICAvLyA8cmVzdD4gaXMgMSBvciBtb3JlIHBvcnRpb25zXG4gICAgLy8gPHA+IGlzIGFueSBwb3J0aW9uIG90aGVyIHRoYW4gLiwgLi4sICcnLCBvciAqKlxuICAgIC8vIDxlPiBpcyAuIG9yICcnXG4gICAgLy9cbiAgICAvLyAqKi8uLiBpcyAqYnJ1dGFsKiBmb3IgZmlsZXN5c3RlbSB3YWxraW5nIHBlcmZvcm1hbmNlLCBiZWNhdXNlXG4gICAgLy8gaXQgZWZmZWN0aXZlbHkgcmVzZXRzIHRoZSByZWN1cnNpdmUgd2FsayBlYWNoIHRpbWUgaXQgb2NjdXJzLFxuICAgIC8vIGFuZCAqKiBjYW5ub3QgYmUgcmVkdWNlZCBvdXQgYnkgYSAuLiBwYXR0ZXJuIHBhcnQgbGlrZSBhIHJlZ2V4cFxuICAgIC8vIG9yIG1vc3Qgc3RyaW5ncyAob3RoZXIgdGhhbiAuLiwgLiwgYW5kICcnKSBjYW4gYmUuXG4gICAgLy9cbiAgICAvLyA8cHJlPi8qKi8uLi88cD4vPHA+LzxyZXN0PiAtPiB7PHByZT4vLi4vPHA+LzxwPi88cmVzdD4sPHByZT4vKiovPHA+LzxwPi88cmVzdD59XG4gICAgLy8gPHByZT4vPGU+LzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vICoqLyoqLzxyZXN0PiAtPiAqKi88cmVzdD5cbiAgICAvL1xuICAgIC8vICoqLyovPHJlc3Q+IC0+ICovKiovPHJlc3Q+IDw9PSBub3QgdmFsaWQgYmVjYXVzZSAqKiBkb2Vzbid0IGZvbGxvd1xuICAgIC8vIHRoaXMgV09VTEQgYmUgYWxsb3dlZCBpZiAqKiBkaWQgZm9sbG93IHN5bWxpbmtzLCBvciAqIGRpZG4ndFxuICAgIGZpcnN0UGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICBsZXQgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gPHByZT4vKiovLi4vPHA+LzxwPi88cmVzdD4gLT4gezxwcmU+Ly4uLzxwPi88cD4vPHJlc3Q+LDxwcmU+LyoqLzxwPi88cD4vPHJlc3Q+fVxuICAgICAgICAgICAgZm9yIChsZXQgcGFydHMgb2YgZ2xvYlBhcnRzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGdzID0gLTE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZ3MgPSBwYXJ0cy5pbmRleE9mKCcqKicsIGdzICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnc3MgPSBncztcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcnRzW2dzcyArIDFdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA8cHJlPi8qKi8qKi88cmVzdD4gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICBnc3MrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBlZywgaWYgZ3MgaXMgMiBhbmQgZ3NzIGlzIDQsIHRoYXQgbWVhbnMgd2UgaGF2ZSAzICoqXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhcnRzLCBhbmQgY2FuIHJlbW92ZSAyIG9mIHRoZW0uXG4gICAgICAgICAgICAgICAgICAgIGlmIChnc3MgPiBncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGdzICsgMSwgZ3NzIC0gZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gcGFydHNbZ3MgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2dzICsgMl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAyID0gcGFydHNbZ3MgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09ICcuLicpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFwMiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcDIgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcDIgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVkaXQgcGFydHMgaW4gcGxhY2UsIGFuZCBwdXNoIHRoZSBuZXcgb25lXG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyID0gcGFydHMuc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgICAgIG90aGVyW2dzXSA9ICcqKic7XG4gICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0cy5wdXNoKG90aGVyKTtcbiAgICAgICAgICAgICAgICAgICAgZ3MtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gPHByZT4vPGU+LzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHNxdWVlemUgb3V0IFVOQyBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgcCA9PT0gJycgJiYgcGFydHNbMF0gPT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09ICcuJyB8fCBwID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydHNbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAocGFydHNbMV0gPT09ICcuJyB8fCBwYXJ0c1sxXSA9PT0gJycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gPHByZT4vPHA+Ly4uLzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgICAgICBsZXQgZGQgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGRkID0gcGFydHMuaW5kZXhPZignLi4nLCBkZCArIDEpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZGQgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgJiYgcCAhPT0gJy4nICYmIHAgIT09ICcuLicgJiYgcCAhPT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWREb3QgPSBkZCA9PT0gMSAmJiBwYXJ0c1tkZCArIDFdID09PSAnKionO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BsaW4gPSBuZWVkRG90ID8gWycuJ10gOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShkZCAtIDEsIDIsIC4uLnNwbGluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZCAtPSAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRTb21ldGhpbmcpO1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzO1xuICAgIH1cbiAgICAvLyBzZWNvbmQgcGhhc2U6IG11bHRpLXBhdHRlcm4gZGVkdXBlc1xuICAgIC8vIHs8cHJlPi8qLzxyZXN0Piw8cHJlPi88cD4vPHJlc3Q+fSAtPiA8cHJlPi8qLzxyZXN0PlxuICAgIC8vIHs8cHJlPi88cmVzdD4sPHByZT4vPHJlc3Q+fSAtPiA8cHJlPi88cmVzdD5cbiAgICAvLyB7PHByZT4vKiovPHJlc3Q+LDxwcmU+LzxyZXN0Pn0gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgLy9cbiAgICAvLyB7PHByZT4vKiovPHJlc3Q+LDxwcmU+LyoqLzxwPi88cmVzdD59IC0+IDxwcmU+LyoqLzxyZXN0PlxuICAgIC8vIF4tLSBub3QgdmFsaWQgYmVjYXVzZSAqKiBkb2Vucyd0IGZvbGxvdyBzeW1saW5rc1xuICAgIHNlY29uZFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBnbG9iUGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gdGhpcy5wYXJ0c01hdGNoKGdsb2JQYXJ0c1tpXSwgZ2xvYlBhcnRzW2pdLCAhdGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcyk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2ldID0gW107XG4gICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0c1tqXSA9IG1hdGNoZWQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLmZpbHRlcihncyA9PiBncy5sZW5ndGgpO1xuICAgIH1cbiAgICBwYXJ0c01hdGNoKGEsIGIsIGVtcHR5R1NNYXRjaCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBhaSA9IDA7XG4gICAgICAgIGxldCBiaSA9IDA7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IHdoaWNoID0gJyc7XG4gICAgICAgIHdoaWxlIChhaSA8IGEubGVuZ3RoICYmIGJpIDwgYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChhW2FpXSA9PT0gYltiaV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh3aGljaCA9PT0gJ2InID8gYltiaV0gOiBhW2FpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZW1wdHlHU01hdGNoICYmIGFbYWldID09PSAnKionICYmIGJbYmldID09PSBhW2FpICsgMV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhW2FpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVtcHR5R1NNYXRjaCAmJiBiW2JpXSA9PT0gJyoqJyAmJiBhW2FpXSA9PT0gYltiaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYltiaV0pO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhW2FpXSA9PT0gJyonICYmXG4gICAgICAgICAgICAgICAgYltiaV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmRvdCB8fCAhYltiaV0uc3RhcnRzV2l0aCgnLicpKSAmJlxuICAgICAgICAgICAgICAgIGJbYmldICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdoaWNoID09PSAnYicpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGljaCA9ICdhJztcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhW2FpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYltiaV0gPT09ICcqJyAmJlxuICAgICAgICAgICAgICAgIGFbYWldICYmXG4gICAgICAgICAgICAgICAgKHRoaXMub3B0aW9ucy5kb3QgfHwgIWFbYWldLnN0YXJ0c1dpdGgoJy4nKSkgJiZcbiAgICAgICAgICAgICAgICBhW2FpXSAhPT0gJyoqJykge1xuICAgICAgICAgICAgICAgIGlmICh3aGljaCA9PT0gJ2EnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgd2hpY2ggPSAnYic7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYltiaV0pO1xuICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSBmYWxsIG91dCBvZiB0aGUgbG9vcCwgaXQgbWVhbnMgdGhleSB0d28gYXJlIGlkZW50aWNhbFxuICAgICAgICAvLyBhcyBsb25nIGFzIHRoZWlyIGxlbmd0aHMgbWF0Y2hcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiByZXN1bHQ7XG4gICAgfVxuICAgIHBhcnNlTmVnYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5ub25lZ2F0ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybjtcbiAgICAgICAgbGV0IG5lZ2F0ZSA9IGZhbHNlO1xuICAgICAgICBsZXQgbmVnYXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXR0ZXJuLmxlbmd0aCAmJiBwYXR0ZXJuLmNoYXJBdChpKSA9PT0gJyEnOyBpKyspIHtcbiAgICAgICAgICAgIG5lZ2F0ZSA9ICFuZWdhdGU7XG4gICAgICAgICAgICBuZWdhdGVPZmZzZXQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAobmVnYXRlT2Zmc2V0KVxuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybi5zbGljZShuZWdhdGVPZmZzZXQpO1xuICAgICAgICB0aGlzLm5lZ2F0ZSA9IG5lZ2F0ZTtcbiAgICB9XG4gICAgLy8gc2V0IHBhcnRpYWwgdG8gdHJ1ZSB0byB0ZXN0IGlmLCBmb3IgZXhhbXBsZSxcbiAgICAvLyBcIi9hL2JcIiBtYXRjaGVzIHRoZSBzdGFydCBvZiBcIi8qL2IvKi9kXCJcbiAgICAvLyBQYXJ0aWFsIG1lYW5zLCBpZiB5b3UgcnVuIG91dCBvZiBmaWxlIGJlZm9yZSB5b3UgcnVuXG4gICAgLy8gb3V0IG9mIHBhdHRlcm4sIHRoZW4gdGhhdCdzIGZpbmUsIGFzIGxvbmcgYXMgYWxsXG4gICAgLy8gdGhlIHBhcnRzIG1hdGNoLlxuICAgIG1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBVTkMgcGF0aHMgbGlrZSAvLz8vWDovLi4uIGNhbiBtYXRjaCBYOi8uLi4gYW5kIHZpY2UgdmVyc2FcbiAgICAgICAgLy8gRHJpdmUgbGV0dGVycyBpbiBhYnNvbHV0ZSBkcml2ZSBvciB1bmMgcGF0aHMgYXJlIGFsd2F5cyBjb21wYXJlZFxuICAgICAgICAvLyBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gICAgICAgIGlmICh0aGlzLmlzV2luZG93cykge1xuICAgICAgICAgICAgY29uc3QgZmlsZURyaXZlID0gdHlwZW9mIGZpbGVbMF0gPT09ICdzdHJpbmcnICYmIC9eW2Etel06JC9pLnRlc3QoZmlsZVswXSk7XG4gICAgICAgICAgICBjb25zdCBmaWxlVU5DID0gIWZpbGVEcml2ZSAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgZmlsZVsxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KGZpbGVbM10pO1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybkRyaXZlID0gdHlwZW9mIHBhdHRlcm5bMF0gPT09ICdzdHJpbmcnICYmIC9eW2Etel06JC9pLnRlc3QocGF0dGVyblswXSk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuVU5DID0gIXBhdHRlcm5Ecml2ZSAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblsxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgcGF0dGVyblszXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBhdHRlcm5bM10pO1xuICAgICAgICAgICAgY29uc3QgZmRpID0gZmlsZVVOQyA/IDMgOiBmaWxlRHJpdmUgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGRpID0gcGF0dGVyblVOQyA/IDMgOiBwYXR0ZXJuRHJpdmUgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmZGkgPT09ICdudW1iZXInICYmIHR5cGVvZiBwZGkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2ZkLCBwZF0gPSBbZmlsZVtmZGldLCBwYXR0ZXJuW3BkaV1dO1xuICAgICAgICAgICAgICAgIGlmIChmZC50b0xvd2VyQ2FzZSgpID09PSBwZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5bcGRpXSA9IGZkO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGRpID4gZmRpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5zbGljZShwZGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZkaSA+IHBkaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoZmRpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvbHZlIGFuZCByZWR1Y2UgLiBhbmQgLi4gcG9ydGlvbnMgaW4gdGhlIGZpbGUgYXMgd2VsbC5cbiAgICAgICAgLy8gZG9udCcgbmVlZCB0byBkbyB0aGUgc2Vjb25kIHBoYXNlLCBiZWNhdXNlIGl0J3Mgb25seSBvbmUgc3RyaW5nW11cbiAgICAgICAgY29uc3QgeyBvcHRpbWl6YXRpb25MZXZlbCA9IDEgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKG9wdGltaXphdGlvbkxldmVsID49IDIpIHtcbiAgICAgICAgICAgIGZpbGUgPSB0aGlzLmxldmVsVHdvRmlsZU9wdGltaXplKGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lJywgdGhpcywgeyBmaWxlLCBwYXR0ZXJuIH0pO1xuICAgICAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZScsIGZpbGUubGVuZ3RoLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGZpID0gMCwgcGkgPSAwLCBmbCA9IGZpbGUubGVuZ3RoLCBwbCA9IHBhdHRlcm4ubGVuZ3RoOyBmaSA8IGZsICYmIHBpIDwgcGw7IGZpKyssIHBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lIGxvb3AnKTtcbiAgICAgICAgICAgIHZhciBwID0gcGF0dGVybltwaV07XG4gICAgICAgICAgICB2YXIgZiA9IGZpbGVbZmldO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhwYXR0ZXJuLCBwLCBmKTtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlLlxuICAgICAgICAgICAgLy8gc29tZSBpbnZhbGlkIHJlZ2V4cCBzdHVmZiBpbiB0aGUgc2V0LlxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAocCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgaWYgKHAgPT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdHTE9CU1RBUicsIFtwYXR0ZXJuLCBwLCBmXSk7XG4gICAgICAgICAgICAgICAgLy8gXCIqKlwiXG4gICAgICAgICAgICAgICAgLy8gYS8qKi9iLyoqL2Mgd291bGQgbWF0Y2ggdGhlIGZvbGxvd2luZzpcbiAgICAgICAgICAgICAgICAvLyBhL2IveC95L3ovY1xuICAgICAgICAgICAgICAgIC8vIGEveC95L3ovYi9jXG4gICAgICAgICAgICAgICAgLy8gYS9iL3gvYi94L2NcbiAgICAgICAgICAgICAgICAvLyBhL2IvY1xuICAgICAgICAgICAgICAgIC8vIFRvIGRvIHRoaXMsIHRha2UgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gYWZ0ZXJcbiAgICAgICAgICAgICAgICAvLyB0aGUgKiosIGFuZCBzZWUgaWYgaXQgd291bGQgbWF0Y2ggdGhlIGZpbGUgcmVtYWluZGVyLlxuICAgICAgICAgICAgICAgIC8vIElmIHNvLCByZXR1cm4gc3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAvLyBJZiBub3QsIHRoZSAqKiBcInN3YWxsb3dzXCIgYSBzZWdtZW50LCBhbmQgdHJ5IGFnYWluLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVjdXJzaXZlbHkgYXdmdWwuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBhLyoqL2IvKiovYyBtYXRjaGluZyBhL2IveC95L3ovY1xuICAgICAgICAgICAgICAgIC8vIC0gYSBtYXRjaGVzIGFcbiAgICAgICAgICAgICAgICAvLyAtIGRvdWJsZXN0YXJcbiAgICAgICAgICAgICAgICAvLyAgIC0gbWF0Y2hPbmUoYi94L3kvei9jLCBiLyoqL2MpXG4gICAgICAgICAgICAgICAgLy8gICAgIC0gYiBtYXRjaGVzIGJcbiAgICAgICAgICAgICAgICAvLyAgICAgLSBkb3VibGVzdGFyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh4L3kvei9jLCBjKSAtPiBub1xuICAgICAgICAgICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoeS96L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh6L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZShjLCBjKSB5ZXMsIGhpdFxuICAgICAgICAgICAgICAgIHZhciBmciA9IGZpO1xuICAgICAgICAgICAgICAgIHZhciBwciA9IHBpICsgMTtcbiAgICAgICAgICAgICAgICBpZiAocHIgPT09IHBsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJyoqIGF0IHRoZSBlbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYSAqKiBhdCB0aGUgZW5kIHdpbGwganVzdCBzd2FsbG93IHRoZSByZXN0LlxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IHdpbGwgbm90IHN3YWxsb3cgLy54LCB1bmxlc3NcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucy5kb3QgaXMgc2V0LlxuICAgICAgICAgICAgICAgICAgICAvLyAuIGFuZCAuLiBhcmUgKm5ldmVyKiBtYXRjaGVkIGJ5ICoqLCBmb3IgZXhwbG9zaXZlbHlcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVhc29ucy5cbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGZpIDwgZmw7IGZpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlW2ZpXSA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtmaV0gPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIGZpbGVbZmldLmNoYXJBdCgwKSA9PT0gJy4nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG9rLCBsZXQncyBzZWUgaWYgd2UgY2FuIHN3YWxsb3cgd2hhdGV2ZXIgd2UgY2FuLlxuICAgICAgICAgICAgICAgIHdoaWxlIChmciA8IGZsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzd2FsbG93ZWUgPSBmaWxlW2ZyXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuZ2xvYnN0YXIgd2hpbGUnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIsIHN3YWxsb3dlZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFhYWCByZW1vdmUgdGhpcyBzbGljZS4gIEp1c3QgcGFzcyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoT25lKGZpbGUuc2xpY2UoZnIpLCBwYXR0ZXJuLnNsaWNlKHByKSwgcGFydGlhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIGZvdW5kIG1hdGNoIScsIGZyLCBmbCwgc3dhbGxvd2VlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbid0IHN3YWxsb3cgXCIuXCIgb3IgXCIuLlwiIGV2ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gb25seSBzd2FsbG93IFwiLmZvb1wiIHdoZW4gZXhwbGljaXRseSBhc2tlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzd2FsbG93ZWUgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YWxsb3dlZSA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgc3dhbGxvd2VlLmNoYXJBdCgwKSA9PT0gJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2RvdCBkZXRlY3RlZCEnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKiogc3dhbGxvd3MgYSBzZWdtZW50LCBhbmQgY29udGludWUuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBzd2FsbG93IGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcisrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG5vIG1hdGNoIHdhcyBmb3VuZC5cbiAgICAgICAgICAgICAgICAvLyBIb3dldmVyLCBpbiBwYXJ0aWFsIG1vZGUsIHdlIGNhbid0IHNheSB0aGlzIGlzIG5lY2Vzc2FyaWx5IG92ZXIuXG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKHBhcnRpYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ1xcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8nLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnIgPT09IGZsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBvdGhlciB0aGFuICoqXG4gICAgICAgICAgICAvLyBub24tbWFnaWMgcGF0dGVybnMganVzdCBoYXZlIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgICAgIC8vIHBhdHRlcm5zIHdpdGggbWFnaWMgaGF2ZSBiZWVuIHR1cm5lZCBpbnRvIHJlZ2V4cHMuXG4gICAgICAgICAgICBsZXQgaGl0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGhpdCA9IGYgPT09IHA7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Zygnc3RyaW5nIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpdCA9IHAudGVzdChmKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdwYXR0ZXJuIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGl0KVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFRoaXMgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgICAgICAgLy8gYSBwYXR0ZXJuIHRoYXQgZW5kcyBpbiAvLCB1bmxlc3MgdGhlIHBhdHRlcm4ganVzdFxuICAgICAgICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gICAgICAgIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gICAgICAgIC8vIFteL10qPyBwYXR0ZXJuLCBleGNlcHQgaW4gcGFydGlhbCBtb2RlLCB3aGVyZSBpdCBtaWdodFxuICAgICAgICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAgICAgICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuICAgICAgICAvLyBub3cgZWl0aGVyIHdlIGZlbGwgb2ZmIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIG9yIHdlJ3JlIGRvbmUuXG4gICAgICAgIGlmIChmaSA9PT0gZmwgJiYgcGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICAgICAgICAvLyBhbiBleGFjdCBoaXQhXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaSA9PT0gZmwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZSwgYnV0IHN0aWxsIGhhZCBwYXR0ZXJuIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgICAgICAgICAvLyBhIGdsb2IgZnMgdHJhdmVyc2FsLlxuICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4sIHN0aWxsIGhhdmUgZmlsZSBsZWZ0LlxuICAgICAgICAgICAgLy8gdGhpcyBpcyBvbmx5IGFjY2VwdGFibGUgaWYgd2UncmUgb24gdGhlIHZlcnkgbGFzdFxuICAgICAgICAgICAgLy8gZW1wdHkgc2VnbWVudCBvZiBhIGZpbGUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICAgICAgICAgICAgLy8gYS8qIHNob3VsZCBtYXRjaCBhL2IvXG4gICAgICAgICAgICByZXR1cm4gZmkgPT09IGZsIC0gMSAmJiBmaWxlW2ZpXSA9PT0gJyc7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSB1bnJlYWNoYWJsZS5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd3RmPycpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIGJyYWNlRXhwYW5kKCkge1xuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuYnJhY2VFeHBhbmQpKHRoaXMucGF0dGVybiwgdGhpcy5vcHRpb25zKTtcbiAgICB9XG4gICAgcGFyc2UocGF0dGVybikge1xuICAgICAgICAoMCwgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMS5hc3NlcnRWYWxpZFBhdHRlcm4pKHBhdHRlcm4pO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBzaG9ydGN1dHNcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICcqKicpXG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5HTE9CU1RBUjtcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICcnKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAvLyBmYXIgYW5kIGF3YXksIHRoZSBtb3N0IGNvbW1vbiBnbG9iIHBhdHRlcm4gcGFydHMgYXJlXG4gICAgICAgIC8vICosICouKiwgYW5kICouPGV4dD4gIEFkZCBhIGZhc3QgY2hlY2sgbWV0aG9kIGZvciB0aG9zZS5cbiAgICAgICAgbGV0IG07XG4gICAgICAgIGxldCBmYXN0VGVzdCA9IG51bGw7XG4gICAgICAgIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goc3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gb3B0aW9ucy5kb3QgPyBzdGFyVGVzdERvdCA6IHN0YXJUZXN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyRG90RXh0UkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSAob3B0aW9ucy5ub2Nhc2VcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZG90XG4gICAgICAgICAgICAgICAgICAgID8gc3RhckRvdEV4dFRlc3ROb2Nhc2VEb3RcbiAgICAgICAgICAgICAgICAgICAgOiBzdGFyRG90RXh0VGVzdE5vY2FzZVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBzdGFyRG90RXh0VGVzdERvdFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJEb3RFeHRUZXN0KShtWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2gocW1hcmtzUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSAob3B0aW9ucy5ub2Nhc2VcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZG90XG4gICAgICAgICAgICAgICAgICAgID8gcW1hcmtzVGVzdE5vY2FzZURvdFxuICAgICAgICAgICAgICAgICAgICA6IHFtYXJrc1Rlc3ROb2Nhc2VcbiAgICAgICAgICAgICAgICA6IG9wdGlvbnMuZG90XG4gICAgICAgICAgICAgICAgICAgID8gcW1hcmtzVGVzdERvdFxuICAgICAgICAgICAgICAgICAgICA6IHFtYXJrc1Rlc3QpKG0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyRG90U3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gb3B0aW9ucy5kb3QgPyBzdGFyRG90U3RhclRlc3REb3QgOiBzdGFyRG90U3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKGRvdFN0YXJSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IGRvdFN0YXJUZXN0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlID0gYXN0X2pzXzEuQVNULmZyb21HbG9iKHBhdHRlcm4sIHRoaXMub3B0aW9ucykudG9NTVBhdHRlcm4oKTtcbiAgICAgICAgaWYgKGZhc3RUZXN0ICYmIHR5cGVvZiByZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkcyBvdmVycmlkaW5nIGluIGZyb3plbiBlbnZpcm9ubWVudHNcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkocmUsICd0ZXN0JywgeyB2YWx1ZTogZmFzdFRlc3QgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlO1xuICAgIH1cbiAgICBtYWtlUmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZ2V4cCB8fCB0aGlzLnJlZ2V4cCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdleHA7XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHRoaXMuc2V0IGlzIGEgMmQgYXJyYXkgb2YgcGFydGlhbFxuICAgICAgICAvLyBwYXR0ZXJuIHN0cmluZ3MsIG9yIFwiKipcIi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSXQncyBiZXR0ZXIgdG8gdXNlIC5tYXRjaCgpLiAgVGhpcyBmdW5jdGlvbiBzaG91bGRuJ3RcbiAgICAgICAgLy8gYmUgdXNlZCwgcmVhbGx5LCBidXQgaXQncyBwcmV0dHkgY29udmVuaWVudCBzb21ldGltZXMsXG4gICAgICAgIC8vIHdoZW4geW91IGp1c3Qgd2FudCB0byB3b3JrIHdpdGggYSByZWdleC5cbiAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy5zZXQ7XG4gICAgICAgIGlmICghc2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0d29TdGFyID0gb3B0aW9ucy5ub2dsb2JzdGFyXG4gICAgICAgICAgICA/IHN0YXJcbiAgICAgICAgICAgIDogb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICA/IHR3b1N0YXJEb3RcbiAgICAgICAgICAgICAgICA6IHR3b1N0YXJOb0RvdDtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBuZXcgU2V0KG9wdGlvbnMubm9jYXNlID8gWydpJ10gOiBbXSk7XG4gICAgICAgIC8vIHJlZ2V4cGlmeSBub24tZ2xvYnN0YXIgcGF0dGVybnNcbiAgICAgICAgLy8gaWYgKiogaXMgb25seSBpdGVtLCB0aGVuIHdlIGp1c3QgZG8gb25lIHR3b1N0YXJcbiAgICAgICAgLy8gaWYgKiogaXMgZmlyc3QsIGFuZCB0aGVyZSBhcmUgbW9yZSwgcHJlcGVuZCAoXFwvfHR3b1N0YXJcXC8pPyB0byBuZXh0XG4gICAgICAgIC8vIGlmICoqIGlzIGxhc3QsIGFwcGVuZCAoXFwvdHdvU3RhcnwpIHRvIHByZXZpb3VzXG4gICAgICAgIC8vIGlmICoqIGlzIGluIHRoZSBtaWRkbGUsIGFwcGVuZCAoXFwvfFxcL3R3b1N0YXJcXC8pIHRvIHByZXZpb3VzXG4gICAgICAgIC8vIHRoZW4gZmlsdGVyIG91dCBHTE9CU1RBUiBzeW1ib2xzXG4gICAgICAgIGxldCByZSA9IHNldFxuICAgICAgICAgICAgLm1hcChwYXR0ZXJuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBwID0gcGF0dGVybi5tYXAocCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIHAuZmxhZ3Muc3BsaXQoJycpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWRkKGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHAgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcmVnRXhwRXNjYXBlKHApXG4gICAgICAgICAgICAgICAgICAgIDogcCA9PT0gZXhwb3J0cy5HTE9CU1RBUlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBleHBvcnRzLkdMT0JTVEFSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHAuX3NyYztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHAuZm9yRWFjaCgocCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBwcFtpICsgMV07XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHBwW2kgLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocCAhPT0gZXhwb3J0cy5HTE9CU1RBUiB8fCBwcmV2ID09PSBleHBvcnRzLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmIG5leHQgIT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBwW2kgKyAxXSA9ICcoPzpcXFxcL3wnICsgdHdvU3RhciArICdcXFxcLyk/JyArIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcFtpXSA9IHR3b1N0YXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHBwW2kgLSAxXSA9IHByZXYgKyAnKD86XFxcXC98JyArIHR3b1N0YXIgKyAnKT8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ICE9PSBleHBvcnRzLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHBwW2kgLSAxXSA9IHByZXYgKyAnKD86XFxcXC98XFxcXC8nICsgdHdvU3RhciArICdcXFxcLyknICsgbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSArIDFdID0gZXhwb3J0cy5HTE9CU1RBUjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwcC5maWx0ZXIocCA9PiBwICE9PSBleHBvcnRzLkdMT0JTVEFSKS5qb2luKCcvJyk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignfCcpO1xuICAgICAgICAvLyBuZWVkIHRvIHdyYXAgaW4gcGFyZW5zIGlmIHdlIGhhZCBtb3JlIHRoYW4gb25lIHRoaW5nIHdpdGggfCxcbiAgICAgICAgLy8gb3RoZXJ3aXNlIG9ubHkgdGhlIGZpcnN0IHdpbGwgYmUgYW5jaG9yZWQgdG8gXiBhbmQgdGhlIGxhc3QgdG8gJFxuICAgICAgICBjb25zdCBbb3BlbiwgY2xvc2VdID0gc2V0Lmxlbmd0aCA+IDEgPyBbJyg/OicsICcpJ10gOiBbJycsICcnXTtcbiAgICAgICAgLy8gbXVzdCBtYXRjaCBlbnRpcmUgcGF0dGVyblxuICAgICAgICAvLyBlbmRpbmcgaW4gYSAqIG9yICoqIHdpbGwgbWFrZSBpdCBsZXNzIHN0cmljdC5cbiAgICAgICAgcmUgPSAnXicgKyBvcGVuICsgcmUgKyBjbG9zZSArICckJztcbiAgICAgICAgLy8gY2FuIG1hdGNoIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3Mgbm90IHRoaXMuXG4gICAgICAgIGlmICh0aGlzLm5lZ2F0ZSlcbiAgICAgICAgICAgIHJlID0gJ14oPyEnICsgcmUgKyAnKS4rJCc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIFsuLi5mbGFnc10uam9pbignJykpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdleHA7XG4gICAgfVxuICAgIHNsYXNoU3BsaXQocCkge1xuICAgICAgICAvLyBpZiBwIHN0YXJ0cyB3aXRoIC8vIG9uIHdpbmRvd3MsIHdlIHByZXNlcnZlIHRoYXRcbiAgICAgICAgLy8gc28gdGhhdCBVTkMgcGF0aHMgYXJlbid0IGJyb2tlbi4gIE90aGVyd2lzZSwgYW55IG51bWJlciBvZlxuICAgICAgICAvLyAvIGNoYXJhY3RlcnMgYXJlIGNvYWxlc2NlZCBpbnRvIG9uZSwgdW5sZXNzXG4gICAgICAgIC8vIHByZXNlcnZlTXVsdGlwbGVTbGFzaGVzIGlzIHNldCB0byB0cnVlLlxuICAgICAgICBpZiAodGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoJy8nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzV2luZG93cyAmJiAvXlxcL1xcL1teXFwvXSsvLnRlc3QocCkpIHtcbiAgICAgICAgICAgIC8vIGFkZCBhbiBleHRyYSAnJyBmb3IgdGhlIG9uZSB3ZSBsb3NlXG4gICAgICAgICAgICByZXR1cm4gWycnLCAuLi5wLnNwbGl0KC9cXC8rLyldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoL1xcLysvKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXRjaChmLCBwYXJ0aWFsID0gdGhpcy5wYXJ0aWFsKSB7XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoJywgZiwgdGhpcy5wYXR0ZXJuKTtcbiAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpbiB0aGUgY2FzZSBvZiBidXN0ZWQgdGhpbmdzLlxuICAgICAgICAvLyBjb21tZW50cywgZXRjLlxuICAgICAgICBpZiAodGhpcy5jb21tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmID09PSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZiA9PT0gJy8nICYmIHBhcnRpYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIHdpbmRvd3M6IG5lZWQgdG8gdXNlIC8sIG5vdCBcXFxuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGYgPSBmLnNwbGl0KCdcXFxcJykuam9pbignLycpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyZWF0IHRoZSB0ZXN0IHBhdGggYXMgYSBzZXQgb2YgcGF0aHBhcnRzLlxuICAgICAgICBjb25zdCBmZiA9IHRoaXMuc2xhc2hTcGxpdChmKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzcGxpdCcsIGZmKTtcbiAgICAgICAgLy8ganVzdCBPTkUgb2YgdGhlIHBhdHRlcm4gc2V0cyBpbiB0aGlzLnNldCBuZWVkcyB0byBtYXRjaFxuICAgICAgICAvLyBpbiBvcmRlciBmb3IgaXQgdG8gYmUgdmFsaWQuICBJZiBuZWdhdGluZywgdGhlbiBqdXN0IG9uZVxuICAgICAgICAvLyBtYXRjaCBtZWFucyB0aGF0IHdlIGhhdmUgZmFpbGVkLlxuICAgICAgICAvLyBFaXRoZXIgd2F5LCByZXR1cm4gb24gdGhlIGZpcnN0IGhpdC5cbiAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy5zZXQ7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc2V0Jywgc2V0KTtcbiAgICAgICAgLy8gRmluZCB0aGUgYmFzZW5hbWUgb2YgdGhlIHBhdGggYnkgbG9va2luZyBmb3IgdGhlIGxhc3Qgbm9uLWVtcHR5IHNlZ21lbnRcbiAgICAgICAgbGV0IGZpbGVuYW1lID0gZmZbZmYubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBmZi5sZW5ndGggLSAyOyAhZmlsZW5hbWUgJiYgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZmW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gc2V0W2ldO1xuICAgICAgICAgICAgbGV0IGZpbGUgPSBmZjtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm1hdGNoQmFzZSAmJiBwYXR0ZXJuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGZpbGUgPSBbZmlsZW5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5tYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsKTtcbiAgICAgICAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMubmVnYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGhpdHMuICB0aGlzIGlzIHN1Y2Nlc3MgaWYgaXQncyBhIG5lZ2F0aXZlXG4gICAgICAgIC8vIHBhdHRlcm4sIGZhaWx1cmUgb3RoZXJ3aXNlLlxuICAgICAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubmVnYXRlO1xuICAgIH1cbiAgICBzdGF0aWMgZGVmYXVsdHMoZGVmKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm1pbmltYXRjaC5kZWZhdWx0cyhkZWYpLk1pbmltYXRjaDtcbiAgICB9XG59XG5leHBvcnRzLk1pbmltYXRjaCA9IE1pbmltYXRjaDtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xudmFyIGFzdF9qc18yID0gcmVxdWlyZShcIi4vYXN0LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQVNUXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3RfanNfMi5BU1Q7IH0gfSk7XG52YXIgZXNjYXBlX2pzXzIgPSByZXF1aXJlKFwiLi9lc2NhcGUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlc2NhcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVzY2FwZV9qc18yLmVzY2FwZTsgfSB9KTtcbnZhciB1bmVzY2FwZV9qc18yID0gcmVxdWlyZShcIi4vdW5lc2NhcGUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmVzY2FwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5lc2NhcGVfanNfMi51bmVzY2FwZTsgfSB9KTtcbi8qIGM4IGlnbm9yZSBzdG9wICovXG5leHBvcnRzLm1pbmltYXRjaC5BU1QgPSBhc3RfanNfMS5BU1Q7XG5leHBvcnRzLm1pbmltYXRjaC5NaW5pbWF0Y2ggPSBNaW5pbWF0Y2g7XG5leHBvcnRzLm1pbmltYXRjaC5lc2NhcGUgPSBlc2NhcGVfanNfMS5lc2NhcGU7XG5leHBvcnRzLm1pbmltYXRjaC51bmVzY2FwZSA9IHVuZXNjYXBlX2pzXzEudW5lc2NhcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAbW9kdWxlIExSVUNhY2hlXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTFJVQ2FjaGUgPSB2b2lkIDA7XG5jb25zdCBwZXJmID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJlxuICAgIHBlcmZvcm1hbmNlICYmXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gcGVyZm9ybWFuY2VcbiAgICA6IERhdGU7XG5jb25zdCB3YXJuZWQgPSBuZXcgU2V0KCk7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmNvbnN0IFBST0NFU1MgPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmICEhcHJvY2VzcyA/IHByb2Nlc3MgOiB7fSk7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmNvbnN0IGVtaXRXYXJuaW5nID0gKG1zZywgdHlwZSwgY29kZSwgZm4pID0+IHtcbiAgICB0eXBlb2YgUFJPQ0VTUy5lbWl0V2FybmluZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IFBST0NFU1MuZW1pdFdhcm5pbmcobXNnLCB0eXBlLCBjb2RlLCBmbilcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKGBbJHtjb2RlfV0gJHt0eXBlfTogJHttc2d9YCk7XG59O1xubGV0IEFDID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXI7XG5sZXQgQVMgPSBnbG9iYWxUaGlzLkFib3J0U2lnbmFsO1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG5pZiAodHlwZW9mIEFDID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIEFTID0gY2xhc3MgQWJvcnRTaWduYWwge1xuICAgICAgICBvbmFib3J0O1xuICAgICAgICBfb25hYm9ydCA9IFtdO1xuICAgICAgICByZWFzb247XG4gICAgICAgIGFib3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihfLCBmbikge1xuICAgICAgICAgICAgdGhpcy5fb25hYm9ydC5wdXNoKGZuKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy9AdHMtaWdub3JlXG4gICAgQUMgPSBjbGFzcyBBYm9ydENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHdhcm5BQ1BvbHlmaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2lnbmFsID0gbmV3IEFTKCk7XG4gICAgICAgIGFib3J0KHJlYXNvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICB0aGlzLnNpZ25hbC5yZWFzb24gPSByZWFzb247XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIHRoaXMuc2lnbmFsLl9vbmFib3J0KSB7XG4gICAgICAgICAgICAgICAgZm4ocmVhc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLm9uYWJvcnQ/LihyZWFzb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgcHJpbnRBQ1BvbHlmaWxsV2FybmluZyA9IFBST0NFU1MuZW52Py5MUlVfQ0FDSEVfSUdOT1JFX0FDX1dBUk5JTkcgIT09ICcxJztcbiAgICBjb25zdCB3YXJuQUNQb2x5ZmlsbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFwcmludEFDUG9seWZpbGxXYXJuaW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwcmludEFDUG9seWZpbGxXYXJuaW5nID0gZmFsc2U7XG4gICAgICAgIGVtaXRXYXJuaW5nKCdBYm9ydENvbnRyb2xsZXIgaXMgbm90IGRlZmluZWQuIElmIHVzaW5nIGxydS1jYWNoZSBpbiAnICtcbiAgICAgICAgICAgICdub2RlIDE0LCBsb2FkIGFuIEFib3J0Q29udHJvbGxlciBwb2x5ZmlsbCBmcm9tIHRoZSAnICtcbiAgICAgICAgICAgICdgbm9kZS1hYm9ydC1jb250cm9sbGVyYCBwYWNrYWdlLiBBIG1pbmltYWwgcG9seWZpbGwgaXMgJyArXG4gICAgICAgICAgICAncHJvdmlkZWQgZm9yIHVzZSBieSBMUlVDYWNoZS5mZXRjaCgpLCBidXQgaXQgc2hvdWxkIG5vdCBiZSAnICtcbiAgICAgICAgICAgICdyZWxpZWQgdXBvbiBpbiBvdGhlciBjb250ZXh0cyAoZWcsIHBhc3NpbmcgaXQgdG8gb3RoZXIgQVBJcyB0aGF0ICcgK1xuICAgICAgICAgICAgJ3VzZSBBYm9ydENvbnRyb2xsZXIvQWJvcnRTaWduYWwgbWlnaHQgaGF2ZSB1bmRlc2lyYWJsZSBlZmZlY3RzKS4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBkaXNhYmxlIHRoaXMgd2l0aCBMUlVfQ0FDSEVfSUdOT1JFX0FDX1dBUk5JTkc9MSBpbiB0aGUgZW52LicsICdOT19BQk9SVF9DT05UUk9MTEVSJywgJ0VOT1RTVVAnLCB3YXJuQUNQb2x5ZmlsbCk7XG4gICAgfTtcbn1cbi8qIGM4IGlnbm9yZSBzdG9wICovXG5jb25zdCBzaG91bGRXYXJuID0gKGNvZGUpID0+ICF3YXJuZWQuaGFzKGNvZGUpO1xuY29uc3QgVFlQRSA9IFN5bWJvbCgndHlwZScpO1xuY29uc3QgaXNQb3NJbnQgPSAobikgPT4gbiAmJiBuID09PSBNYXRoLmZsb29yKG4pICYmIG4gPiAwICYmIGlzRmluaXRlKG4pO1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG4vLyBUaGlzIGlzIGEgbGl0dGxlIGJpdCByaWRpY3Vsb3VzLCB0YmguXG4vLyBUaGUgbWF4aW11bSBhcnJheSBsZW5ndGggaXMgMl4zMi0xIG9yIHRoZXJlYWJvdXRzIG9uIG1vc3QgSlMgaW1wbHMuXG4vLyBBbmQgd2VsbCBiZWZvcmUgdGhhdCBwb2ludCwgeW91J3JlIGNhY2hpbmcgdGhlIGVudGlyZSB3b3JsZCwgSSBtZWFuLFxuLy8gdGhhdCdzIH4zMkdCIG9mIGp1c3QgaW50ZWdlcnMgZm9yIHRoZSBuZXh0L3ByZXYgbGlua3MsIHBsdXMgd2hhdGV2ZXJcbi8vIGVsc2UgdG8gaG9sZCB0aGF0IG1hbnkga2V5cyBhbmQgdmFsdWVzLiAgSnVzdCBmaWxsaW5nIHRoZSBtZW1vcnkgd2l0aFxuLy8gemVyb2VzIGF0IGluaXQgdGltZSBpcyBicnV0YWwgd2hlbiB5b3UgZ2V0IHRoYXQgYmlnLlxuLy8gQnV0IHdoeSBub3QgYmUgY29tcGxldGU/XG4vLyBNYXliZSBpbiB0aGUgZnV0dXJlLCB0aGVzZSBsaW1pdHMgd2lsbCBoYXZlIGV4cGFuZGVkLlxuY29uc3QgZ2V0VWludEFycmF5ID0gKG1heCkgPT4gIWlzUG9zSW50KG1heClcbiAgICA/IG51bGxcbiAgICA6IG1heCA8PSBNYXRoLnBvdygyLCA4KVxuICAgICAgICA/IFVpbnQ4QXJyYXlcbiAgICAgICAgOiBtYXggPD0gTWF0aC5wb3coMiwgMTYpXG4gICAgICAgICAgICA/IFVpbnQxNkFycmF5XG4gICAgICAgICAgICA6IG1heCA8PSBNYXRoLnBvdygyLCAzMilcbiAgICAgICAgICAgICAgICA/IFVpbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgOiBtYXggPD0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgICAgICAgICAgICAgICAgICAgPyBaZXJvQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmNsYXNzIFplcm9BcnJheSBleHRlbmRzIEFycmF5IHtcbiAgICBjb25zdHJ1Y3RvcihzaXplKSB7XG4gICAgICAgIHN1cGVyKHNpemUpO1xuICAgICAgICB0aGlzLmZpbGwoMCk7XG4gICAgfVxufVxuY2xhc3MgU3RhY2sge1xuICAgIGhlYXA7XG4gICAgbGVuZ3RoO1xuICAgIC8vIHByaXZhdGUgY29uc3RydWN0b3JcbiAgICBzdGF0aWMgI2NvbnN0cnVjdGluZyA9IGZhbHNlO1xuICAgIHN0YXRpYyBjcmVhdGUobWF4KSB7XG4gICAgICAgIGNvbnN0IEhlYXBDbHMgPSBnZXRVaW50QXJyYXkobWF4KTtcbiAgICAgICAgaWYgKCFIZWFwQ2xzKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICBTdGFjay4jY29uc3RydWN0aW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcyA9IG5ldyBTdGFjayhtYXgsIEhlYXBDbHMpO1xuICAgICAgICBTdGFjay4jY29uc3RydWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihtYXgsIEhlYXBDbHMpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghU3RhY2suI2NvbnN0cnVjdGluZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5zdGFudGlhdGUgU3RhY2sgdXNpbmcgU3RhY2suY3JlYXRlKG4pJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy5oZWFwID0gbmV3IEhlYXBDbHMobWF4KTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIH1cbiAgICBwdXNoKG4pIHtcbiAgICAgICAgdGhpcy5oZWFwW3RoaXMubGVuZ3RoKytdID0gbjtcbiAgICB9XG4gICAgcG9wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFwWy0tdGhpcy5sZW5ndGhdO1xuICAgIH1cbn1cbi8qKlxuICogRGVmYXVsdCBleHBvcnQsIHRoZSB0aGluZyB5b3UncmUgdXNpbmcgdGhpcyBtb2R1bGUgdG8gZ2V0LlxuICpcbiAqIFRoZSBgS2AgYW5kIGBWYCB0eXBlcyBkZWZpbmUgdGhlIGtleSBhbmQgdmFsdWUgdHlwZXMsIHJlc3BlY3RpdmVseS4gVGhlXG4gKiBvcHRpb25hbCBgRkNgIHR5cGUgZGVmaW5lcyB0aGUgdHlwZSBvZiB0aGUgYGNvbnRleHRgIG9iamVjdCBwYXNzZWQgdG9cbiAqIGBjYWNoZS5mZXRjaCgpYCBhbmQgYGNhY2hlLm1lbW8oKWAuXG4gKlxuICogS2V5cyBhbmQgdmFsdWVzICoqbXVzdCBub3QqKiBiZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKlxuICogQWxsIHByb3BlcnRpZXMgZnJvbSB0aGUgb3B0aW9ucyBvYmplY3QgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBgbWF4YCxcbiAqIGBtYXhTaXplYCwgYGZldGNoTWV0aG9kYCwgYG1lbW9NZXRob2RgLCBgZGlzcG9zZWAgYW5kIGBkaXNwb3NlQWZ0ZXJgKSBhcmVcbiAqIGFkZGVkIGFzIG5vcm1hbCBwdWJsaWMgbWVtYmVycy4gKFRoZSBsaXN0ZWQgb3B0aW9ucyBhcmUgcmVhZC1vbmx5IGdldHRlcnMuKVxuICpcbiAqIENoYW5naW5nIGFueSBvZiB0aGVzZSB3aWxsIGFsdGVyIHRoZSBkZWZhdWx0cyBmb3Igc3Vic2VxdWVudCBtZXRob2QgY2FsbHMuXG4gKi9cbmNsYXNzIExSVUNhY2hlIHtcbiAgICAvLyBvcHRpb25zIHRoYXQgY2Fubm90IGJlIGNoYW5nZWQgd2l0aG91dCBkaXNhc3RlclxuICAgICNtYXg7XG4gICAgI21heFNpemU7XG4gICAgI2Rpc3Bvc2U7XG4gICAgI2Rpc3Bvc2VBZnRlcjtcbiAgICAjZmV0Y2hNZXRob2Q7XG4gICAgI21lbW9NZXRob2Q7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bH1cbiAgICAgKi9cbiAgICB0dGw7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bFJlc29sdXRpb259XG4gICAgICovXG4gICAgdHRsUmVzb2x1dGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsQXV0b3B1cmdlfVxuICAgICAqL1xuICAgIHR0bEF1dG9wdXJnZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudXBkYXRlQWdlT25HZXR9XG4gICAgICovXG4gICAgdXBkYXRlQWdlT25HZXQ7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfVxuICAgICAqL1xuICAgIHVwZGF0ZUFnZU9uSGFzO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlfVxuICAgICAqL1xuICAgIGFsbG93U3RhbGU7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm5vRGlzcG9zZU9uU2V0fVxuICAgICAqL1xuICAgIG5vRGlzcG9zZU9uU2V0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub1VwZGF0ZVRUTH1cbiAgICAgKi9cbiAgICBub1VwZGF0ZVRUTDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4RW50cnlTaXplfVxuICAgICAqL1xuICAgIG1heEVudHJ5U2l6ZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uuc2l6ZUNhbGN1bGF0aW9ufVxuICAgICAqL1xuICAgIHNpemVDYWxjdWxhdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EZWxldGVPbkZldGNoUmVqZWN0aW9ufVxuICAgICAqL1xuICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EZWxldGVPblN0YWxlR2V0fVxuICAgICAqL1xuICAgIG5vRGVsZXRlT25TdGFsZUdldDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydH1cbiAgICAgKi9cbiAgICBhbGxvd1N0YWxlT25GZXRjaEFib3J0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbn1cbiAgICAgKi9cbiAgICBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuaWdub3JlRmV0Y2hBYm9ydH1cbiAgICAgKi9cbiAgICBpZ25vcmVGZXRjaEFib3J0O1xuICAgIC8vIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgICAjc2l6ZTtcbiAgICAjY2FsY3VsYXRlZFNpemU7XG4gICAgI2tleU1hcDtcbiAgICAja2V5TGlzdDtcbiAgICAjdmFsTGlzdDtcbiAgICAjbmV4dDtcbiAgICAjcHJldjtcbiAgICAjaGVhZDtcbiAgICAjdGFpbDtcbiAgICAjZnJlZTtcbiAgICAjZGlzcG9zZWQ7XG4gICAgI3NpemVzO1xuICAgICNzdGFydHM7XG4gICAgI3R0bHM7XG4gICAgI2hhc0Rpc3Bvc2U7XG4gICAgI2hhc0ZldGNoTWV0aG9kO1xuICAgICNoYXNEaXNwb3NlQWZ0ZXI7XG4gICAgLyoqXG4gICAgICogRG8gbm90IGNhbGwgdGhpcyBtZXRob2QgdW5sZXNzIHlvdSBuZWVkIHRvIGluc3BlY3QgdGhlXG4gICAgICogaW5uZXIgd29ya2luZ3Mgb2YgdGhlIGNhY2hlLiAgSWYgYW55dGhpbmcgcmV0dXJuZWQgYnkgdGhpc1xuICAgICAqIG9iamVjdCBpcyBtb2RpZmllZCBpbiBhbnkgd2F5LCBzdHJhbmdlIGJyZWFrYWdlIG1heSBvY2N1ci5cbiAgICAgKlxuICAgICAqIFRoZXNlIGZpZWxkcyBhcmUgcHJpdmF0ZSBmb3IgYSByZWFzb24hXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgdW5zYWZlRXhwb3NlSW50ZXJuYWxzKGMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHN0YXJ0czogYy4jc3RhcnRzLFxuICAgICAgICAgICAgdHRsczogYy4jdHRscyxcbiAgICAgICAgICAgIHNpemVzOiBjLiNzaXplcyxcbiAgICAgICAgICAgIGtleU1hcDogYy4ja2V5TWFwLFxuICAgICAgICAgICAga2V5TGlzdDogYy4ja2V5TGlzdCxcbiAgICAgICAgICAgIHZhbExpc3Q6IGMuI3ZhbExpc3QsXG4gICAgICAgICAgICBuZXh0OiBjLiNuZXh0LFxuICAgICAgICAgICAgcHJldjogYy4jcHJldixcbiAgICAgICAgICAgIGdldCBoZWFkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLiNoZWFkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCB0YWlsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLiN0YWlsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZyZWU6IGMuI2ZyZWUsXG4gICAgICAgICAgICAvLyBtZXRob2RzXG4gICAgICAgICAgICBpc0JhY2tncm91bmRGZXRjaDogKHApID0+IGMuI2lzQmFja2dyb3VuZEZldGNoKHApLFxuICAgICAgICAgICAgYmFja2dyb3VuZEZldGNoOiAoaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpID0+IGMuI2JhY2tncm91bmRGZXRjaChrLCBpbmRleCwgb3B0aW9ucywgY29udGV4dCksXG4gICAgICAgICAgICBtb3ZlVG9UYWlsOiAoaW5kZXgpID0+IGMuI21vdmVUb1RhaWwoaW5kZXgpLFxuICAgICAgICAgICAgaW5kZXhlczogKG9wdGlvbnMpID0+IGMuI2luZGV4ZXMob3B0aW9ucyksXG4gICAgICAgICAgICByaW5kZXhlczogKG9wdGlvbnMpID0+IGMuI3JpbmRleGVzKG9wdGlvbnMpLFxuICAgICAgICAgICAgaXNTdGFsZTogKGluZGV4KSA9PiBjLiNpc1N0YWxlKGluZGV4KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gUHJvdGVjdGVkIHJlYWQtb25seSBtZW1iZXJzXG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm1heH0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgbWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWF4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4U2l6ZX0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgbWF4U2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21heFNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBjb21wdXRlZCBzaXplIG9mIGl0ZW1zIGluIHRoZSBjYWNoZSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBjYWxjdWxhdGVkU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhbGN1bGF0ZWRTaXplO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpbiB0aGUgY2FjaGUgKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZmV0Y2hNZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNmZXRjaE1ldGhvZDtcbiAgICB9XG4gICAgZ2V0IG1lbW9NZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtZW1vTWV0aG9kO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuZGlzcG9zZX0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZGlzcG9zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5kaXNwb3NlQWZ0ZXJ9IChyZWFkLW9ubHkpXG4gICAgICovXG4gICAgZ2V0IGRpc3Bvc2VBZnRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2VBZnRlcjtcbiAgICB9XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IG1heCA9IDAsIHR0bCwgdHRsUmVzb2x1dGlvbiA9IDEsIHR0bEF1dG9wdXJnZSwgdXBkYXRlQWdlT25HZXQsIHVwZGF0ZUFnZU9uSGFzLCBhbGxvd1N0YWxlLCBkaXNwb3NlLCBkaXNwb3NlQWZ0ZXIsIG5vRGlzcG9zZU9uU2V0LCBub1VwZGF0ZVRUTCwgbWF4U2l6ZSA9IDAsIG1heEVudHJ5U2l6ZSA9IDAsIHNpemVDYWxjdWxhdGlvbiwgZmV0Y2hNZXRob2QsIG1lbW9NZXRob2QsIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiwgbm9EZWxldGVPblN0YWxlR2V0LCBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiwgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCwgaWdub3JlRmV0Y2hBYm9ydCwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChtYXggIT09IDAgJiYgIWlzUG9zSW50KG1heCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heCBvcHRpb24gbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBVaW50QXJyYXkgPSBtYXggPyBnZXRVaW50QXJyYXkobWF4KSA6IEFycmF5O1xuICAgICAgICBpZiAoIVVpbnRBcnJheSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG1heCB2YWx1ZTogJyArIG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jbWF4ID0gbWF4O1xuICAgICAgICB0aGlzLiNtYXhTaXplID0gbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5tYXhFbnRyeVNpemUgPSBtYXhFbnRyeVNpemUgfHwgdGhpcy4jbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5zaXplQ2FsY3VsYXRpb24gPSBzaXplQ2FsY3VsYXRpb247XG4gICAgICAgIGlmICh0aGlzLnNpemVDYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLiNtYXhTaXplICYmICF0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBzZXQgc2l6ZUNhbGN1bGF0aW9uIHdpdGhvdXQgc2V0dGluZyBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpemVDYWxjdWxhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBzZXQgdG8gbm9uLWZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lbW9NZXRob2QgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1lbW9NZXRob2QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lbW9NZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIGRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNtZW1vTWV0aG9kID0gbWVtb01ldGhvZDtcbiAgICAgICAgaWYgKGZldGNoTWV0aG9kICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBmZXRjaE1ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZmV0Y2hNZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2ZldGNoTWV0aG9kID0gZmV0Y2hNZXRob2Q7XG4gICAgICAgIHRoaXMuI2hhc0ZldGNoTWV0aG9kID0gISFmZXRjaE1ldGhvZDtcbiAgICAgICAgdGhpcy4ja2V5TWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLiNrZXlMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLiN2YWxMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLiNuZXh0ID0gbmV3IFVpbnRBcnJheShtYXgpO1xuICAgICAgICB0aGlzLiNwcmV2ID0gbmV3IFVpbnRBcnJheShtYXgpO1xuICAgICAgICB0aGlzLiNoZWFkID0gMDtcbiAgICAgICAgdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgIHRoaXMuI2ZyZWUgPSBTdGFjay5jcmVhdGUobWF4KTtcbiAgICAgICAgdGhpcy4jc2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMDtcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlID0gZGlzcG9zZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2VBZnRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyID0gZGlzcG9zZUFmdGVyO1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2hhc0Rpc3Bvc2UgPSAhIXRoaXMuI2Rpc3Bvc2U7XG4gICAgICAgIHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciA9ICEhdGhpcy4jZGlzcG9zZUFmdGVyO1xuICAgICAgICB0aGlzLm5vRGlzcG9zZU9uU2V0ID0gISFub0Rpc3Bvc2VPblNldDtcbiAgICAgICAgdGhpcy5ub1VwZGF0ZVRUTCA9ICEhbm9VcGRhdGVUVEw7XG4gICAgICAgIHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gISFub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24gPSAhIWFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uO1xuICAgICAgICB0aGlzLmFsbG93U3RhbGVPbkZldGNoQWJvcnQgPSAhIWFsbG93U3RhbGVPbkZldGNoQWJvcnQ7XG4gICAgICAgIHRoaXMuaWdub3JlRmV0Y2hBYm9ydCA9ICEhaWdub3JlRmV0Y2hBYm9ydDtcbiAgICAgICAgLy8gTkI6IG1heEVudHJ5U2l6ZSBpcyBzZXQgdG8gbWF4U2l6ZSBpZiBpdCdzIHNldFxuICAgICAgICBpZiAodGhpcy5tYXhFbnRyeVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNtYXhTaXplICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLiNtYXhTaXplKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXhTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQb3NJbnQodGhpcy5tYXhFbnRyeVNpemUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4RW50cnlTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZVNpemVUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZSA9ICEhYWxsb3dTdGFsZTtcbiAgICAgICAgdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQgPSAhIW5vRGVsZXRlT25TdGFsZUdldDtcbiAgICAgICAgdGhpcy51cGRhdGVBZ2VPbkdldCA9ICEhdXBkYXRlQWdlT25HZXQ7XG4gICAgICAgIHRoaXMudXBkYXRlQWdlT25IYXMgPSAhIXVwZGF0ZUFnZU9uSGFzO1xuICAgICAgICB0aGlzLnR0bFJlc29sdXRpb24gPVxuICAgICAgICAgICAgaXNQb3NJbnQodHRsUmVzb2x1dGlvbikgfHwgdHRsUmVzb2x1dGlvbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gdHRsUmVzb2x1dGlvblxuICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgdGhpcy50dGxBdXRvcHVyZ2UgPSAhIXR0bEF1dG9wdXJnZTtcbiAgICAgICAgdGhpcy50dGwgPSB0dGwgfHwgMDtcbiAgICAgICAgaWYgKHRoaXMudHRsKSB7XG4gICAgICAgICAgICBpZiAoIWlzUG9zSW50KHRoaXMudHRsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3R0bCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2luaXRpYWxpemVUVExUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvIG5vdCBhbGxvdyBjb21wbGV0ZWx5IHVuYm91bmRlZCBjYWNoZXNcbiAgICAgICAgaWYgKHRoaXMuI21heCA9PT0gMCAmJiB0aGlzLnR0bCA9PT0gMCAmJiB0aGlzLiNtYXhTaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBdCBsZWFzdCBvbmUgb2YgbWF4LCBtYXhTaXplLCBvciB0dGwgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudHRsQXV0b3B1cmdlICYmICF0aGlzLiNtYXggJiYgIXRoaXMuI21heFNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSAnTFJVX0NBQ0hFX1VOQk9VTkRFRCc7XG4gICAgICAgICAgICBpZiAoc2hvdWxkV2Fybihjb2RlKSkge1xuICAgICAgICAgICAgICAgIHdhcm5lZC5hZGQoY29kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gJ1RUTCBjYWNoaW5nIHdpdGhvdXQgdHRsQXV0b3B1cmdlLCBtYXgsIG9yIG1heFNpemUgY2FuICcgK1xuICAgICAgICAgICAgICAgICAgICAncmVzdWx0IGluIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uJztcbiAgICAgICAgICAgICAgICBlbWl0V2FybmluZyhtc2csICdVbmJvdW5kZWRDYWNoZVdhcm5pbmcnLCBjb2RlLCBMUlVDYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXMgbGVmdCBpbiB0aGUgaXRlbSdzIFRUTC4gSWYgaXRlbSBpcyBub3QgaW4gY2FjaGUsXG4gICAgICogcmV0dXJucyBgMGAuIFJldHVybnMgYEluZmluaXR5YCBpZiBpdGVtIGlzIGluIGNhY2hlIHdpdGhvdXQgYSBkZWZpbmVkIFRUTC5cbiAgICAgKi9cbiAgICBnZXRSZW1haW5pbmdUVEwoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNrZXlNYXAuaGFzKGtleSkgPyBJbmZpbml0eSA6IDA7XG4gICAgfVxuICAgICNpbml0aWFsaXplVFRMVHJhY2tpbmcoKSB7XG4gICAgICAgIGNvbnN0IHR0bHMgPSBuZXcgWmVyb0FycmF5KHRoaXMuI21heCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0cyA9IG5ldyBaZXJvQXJyYXkodGhpcy4jbWF4KTtcbiAgICAgICAgdGhpcy4jdHRscyA9IHR0bHM7XG4gICAgICAgIHRoaXMuI3N0YXJ0cyA9IHN0YXJ0cztcbiAgICAgICAgdGhpcy4jc2V0SXRlbVRUTCA9IChpbmRleCwgdHRsLCBzdGFydCA9IHBlcmYubm93KCkpID0+IHtcbiAgICAgICAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGwgIT09IDAgPyBzdGFydCA6IDA7XG4gICAgICAgICAgICB0dGxzW2luZGV4XSA9IHR0bDtcbiAgICAgICAgICAgIGlmICh0dGwgIT09IDAgJiYgdGhpcy50dGxBdXRvcHVyZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaW5kZXhdLCAnZXhwaXJlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0dGwgKyAxKTtcbiAgICAgICAgICAgICAgICAvLyB1bnJlZigpIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3Jtc1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmICh0LnVucmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHQudW5yZWYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jdXBkYXRlSXRlbUFnZSA9IGluZGV4ID0+IHtcbiAgICAgICAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGxzW2luZGV4XSAhPT0gMCA/IHBlcmYubm93KCkgOiAwO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNzdGF0dXNUVEwgPSAoc3RhdHVzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR0bHNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHRsID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBzdGFydHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgaWYgKCF0dGwgfHwgIXN0YXJ0KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgc3RhdHVzLnR0bCA9IHR0bDtcbiAgICAgICAgICAgICAgICBzdGF0dXMuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICBzdGF0dXMubm93ID0gY2FjaGVkTm93IHx8IGdldE5vdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFnZSA9IHN0YXR1cy5ub3cgLSBzdGFydDtcbiAgICAgICAgICAgICAgICBzdGF0dXMucmVtYWluaW5nVFRMID0gdHRsIC0gYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBkZWJvdW5jZSBjYWxscyB0byBwZXJmLm5vdygpIHRvIDFzIHNvIHdlJ3JlIG5vdCBoaXR0aW5nXG4gICAgICAgIC8vIHRoYXQgY29zdGx5IGNhbGwgcmVwZWF0ZWRseS5cbiAgICAgICAgbGV0IGNhY2hlZE5vdyA9IDA7XG4gICAgICAgIGNvbnN0IGdldE5vdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBwZXJmLm5vdygpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHRsUmVzb2x1dGlvbiA+IDApIHtcbiAgICAgICAgICAgICAgICBjYWNoZWROb3cgPSBuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IChjYWNoZWROb3cgPSAwKSwgdGhpcy50dGxSZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICAvLyBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAodC51bnJlZikge1xuICAgICAgICAgICAgICAgICAgICB0LnVucmVmKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRSZW1haW5pbmdUVEwgPSBrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHRsID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0c1tpbmRleF07XG4gICAgICAgICAgICBpZiAoIXR0bCB8fCAhc3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhZ2UgPSAoY2FjaGVkTm93IHx8IGdldE5vdygpKSAtIHN0YXJ0O1xuICAgICAgICAgICAgcmV0dXJuIHR0bCAtIGFnZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jaXNTdGFsZSA9IGluZGV4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBzdGFydHNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgdCA9IHR0bHNbaW5kZXhdO1xuICAgICAgICAgICAgcmV0dXJuICEhdCAmJiAhIXMgJiYgKGNhY2hlZE5vdyB8fCBnZXROb3coKSkgLSBzID4gdDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gY29uZGl0aW9uYWxseSBzZXQgcHJpdmF0ZSBtZXRob2RzIHJlbGF0ZWQgdG8gVFRMXG4gICAgI3VwZGF0ZUl0ZW1BZ2UgPSAoKSA9PiB7IH07XG4gICAgI3N0YXR1c1RUTCA9ICgpID0+IHsgfTtcbiAgICAjc2V0SXRlbVRUTCA9ICgpID0+IHsgfTtcbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICNpc1N0YWxlID0gKCkgPT4gZmFsc2U7XG4gICAgI2luaXRpYWxpemVTaXplVHJhY2tpbmcoKSB7XG4gICAgICAgIGNvbnN0IHNpemVzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpO1xuICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI3NpemVzID0gc2l6ZXM7XG4gICAgICAgIHRoaXMuI3JlbW92ZUl0ZW1TaXplID0gaW5kZXggPT4ge1xuICAgICAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgLT0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgc2l6ZXNbaW5kZXhdID0gMDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jcmVxdWlyZVNpemUgPSAoaywgdiwgc2l6ZSwgc2l6ZUNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyBwcm92aXNpb25hbGx5IGFjY2VwdCBiYWNrZ3JvdW5kIGZldGNoZXMuXG4gICAgICAgICAgICAvLyBhY3R1YWwgdmFsdWUgc2l6ZSB3aWxsIGJlIGNoZWNrZWQgd2hlbiB0aGV5IHJldHVybi5cbiAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1Bvc0ludChzaXplKSkge1xuICAgICAgICAgICAgICAgIGlmIChzaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzaXplQ2FsY3VsYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZUNhbGN1bGF0aW9uKHYsIGspO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUG9zSW50KHNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplQ2FsY3VsYXRpb24gcmV0dXJuIGludmFsaWQgKGV4cGVjdCBwb3NpdGl2ZSBpbnRlZ2VyKScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHNpemUgdmFsdWUgKG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcikuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1doZW4gbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgaXMgdXNlZCwgc2l6ZUNhbGN1bGF0aW9uICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ29yIHNpemUgbXVzdCBiZSBzZXQuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNpemU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplID0gKGluZGV4LCBzaXplLCBzdGF0dXMpID0+IHtcbiAgICAgICAgICAgIHNpemVzW2luZGV4XSA9IHNpemU7XG4gICAgICAgICAgICBpZiAodGhpcy4jbWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSB0aGlzLiNtYXhTaXplIC0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLiNjYWxjdWxhdGVkU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgKz0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5lbnRyeVNpemUgPSBzaXplO1xuICAgICAgICAgICAgICAgIHN0YXR1cy50b3RhbENhbGN1bGF0ZWRTaXplID0gdGhpcy4jY2FsY3VsYXRlZFNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgICNyZW1vdmVJdGVtU2l6ZSA9IF9pID0+IHsgfTtcbiAgICAjYWRkSXRlbVNpemUgPSAoX2ksIF9zLCBfc3QpID0+IHsgfTtcbiAgICAjcmVxdWlyZVNpemUgPSAoX2ssIF92LCBzaXplLCBzaXplQ2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgaWYgKHNpemUgfHwgc2l6ZUNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW5ub3Qgc2V0IHNpemUgd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplIG9uIGNhY2hlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICAqI2luZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuI3RhaWw7IHRydWU7KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1ZhbGlkSW5kZXgoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhbGxvd1N0YWxlIHx8ICF0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLiNoZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IHRoaXMuI3ByZXZbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICojcmluZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuI2hlYWQ7IHRydWU7KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1ZhbGlkSW5kZXgoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhbGxvd1N0YWxlIHx8ICF0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IHRoaXMuI25leHRbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNpc1ZhbGlkSW5kZXgoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIChpbmRleCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLiNrZXlNYXAuZ2V0KHRoaXMuI2tleUxpc3RbaW5kZXhdKSA9PT0gaW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgYFtrZXksIHZhbHVlXWAgcGFpcnMsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqZW50cmllcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI3ZhbExpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIFt0aGlzLiNrZXlMaXN0W2ldLCB0aGlzLiN2YWxMaXN0W2ldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmVudHJpZXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgYFtrZXksIHZhbHVlXWAgcGFpcnMsXG4gICAgICogaW4gb3JkZXIgZnJvbSBsZWFzdCByZWNlbnRseSB1c2VkIHRvIG1vc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqcmVudHJpZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgdGhpcy4ja2V5TGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgW3RoaXMuI2tleUxpc3RbaV0sIHRoaXMuI3ZhbExpc3RbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqa2V5cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgayA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmtleXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIGtleXMgaW4gdGhlIGNhY2hlLFxuICAgICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAgICovXG4gICAgKnJrZXlzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgayA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqdmFsdWVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUudmFsdWVzfVxuICAgICAqXG4gICAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIGNhY2hlLFxuICAgICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAgICovXG4gICAgKnJ2YWx1ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGluZyBvdmVyIHRoZSBjYWNoZSBpdHNlbGYgeWllbGRzIHRoZSBzYW1lIHJlc3VsdHMgYXNcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuZW50cmllc31cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFN0cmluZyB2YWx1ZSB0aGF0IGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBkZWZhdWx0IHN0cmluZ1xuICAgICAqIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdC4gQ2FsbGVkIGJ5IHRoZSBidWlsdC1pbiBtZXRob2RcbiAgICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAgICovXG4gICAgW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTFJVQ2FjaGUnO1xuICAgIC8qKlxuICAgICAqIEZpbmQgYSB2YWx1ZSBmb3Igd2hpY2ggdGhlIHN1cHBsaWVkIGZuIG1ldGhvZCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLFxuICAgICAqIHNpbWlsYXIgdG8gYEFycmF5LmZpbmQoKWAuIGZuIGlzIGNhbGxlZCBhcyBgZm4odmFsdWUsIGtleSwgY2FjaGUpYC5cbiAgICAgKi9cbiAgICBmaW5kKGZuLCBnZXRPcHRpb25zID0ge30pIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZm4odmFsdWUsIHRoaXMuI2tleUxpc3RbaV0sIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHRoaXMuI2tleUxpc3RbaV0sIGdldE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIG9uIGVhY2ggaXRlbSBpbiB0aGUgY2FjaGUsIGluIG9yZGVyIGZyb20gbW9zdFxuICAgICAqIHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKlxuICAgICAqIGBmbmAgaXMgY2FsbGVkIGFzIGBmbih2YWx1ZSwga2V5LCBjYWNoZSlgLlxuICAgICAqXG4gICAgICogSWYgYHRoaXNwYCBpcyBwcm92aWRlZCwgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGB0aGlzYC1jb250ZXh0IG9mXG4gICAgICogdGhlIHByb3ZpZGVkIG9iamVjdCwgb3IgdGhlIGNhY2hlIGlmIG5vIGB0aGlzcGAgb2JqZWN0IGlzIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgdXBkYXRlIGFnZSBvciByZWNlbnR5IG9mIHVzZSwgb3IgaXRlcmF0ZSBvdmVyIHN0YWxlIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmb3JFYWNoKGZuLCB0aGlzcCA9IHRoaXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMge0BsaW5rIExSVUNhY2hlLmZvckVhY2h9IGJ1dCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBpblxuICAgICAqIHJldmVyc2Ugb3JkZXIuICAoaWUsIGxlc3MgcmVjZW50bHkgdXNlZCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBmaXJzdC4pXG4gICAgICovXG4gICAgcmZvckVhY2goZm4sIHRoaXNwID0gdGhpcykge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlIGFueSBzdGFsZSBlbnRyaWVzLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHJlbW92ZWQsXG4gICAgICogZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1cmdlU3RhbGUoKSB7XG4gICAgICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcyh7IGFsbG93U3RhbGU6IHRydWUgfSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaV0sICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsZXRlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBleHRlbmRlZCBpbmZvIGFib3V0IGEgZ2l2ZW4gZW50cnksIHRvIGdldCBpdHMgdmFsdWUsIHNpemUsIGFuZFxuICAgICAqIFRUTCBpbmZvIHNpbXVsdGFuZW91c2x5LiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQuXG4gICAgICpcbiAgICAgKiBVbmxpa2Uge0BsaW5rIExSVUNhY2hlI2R1bXB9LCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSBhbmQgc3Vydml2ZVxuICAgICAqIHNlcmlhbGl6YXRpb24sIHRoZSBgc3RhcnRgIHZhbHVlIGlzIGFsd2F5cyB0aGUgY3VycmVudCB0aW1lc3RhbXAsIGFuZCB0aGVcbiAgICAgKiBgdHRsYCBpcyBhIGNhbGN1bGF0ZWQgcmVtYWluaW5nIHRpbWUgdG8gbGl2ZSAobmVnYXRpdmUgaWYgZXhwaXJlZCkuXG4gICAgICpcbiAgICAgKiBBbHdheXMgcmV0dXJucyBzdGFsZSB2YWx1ZXMsIGlmIHRoZWlyIGluZm8gaXMgZm91bmQgaW4gdGhlIGNhY2hlLCBzbyBiZVxuICAgICAqIHN1cmUgdG8gY2hlY2sgZm9yIGV4cGlyYXRpb25zIChpZSwgYSBuZWdhdGl2ZSB7QGxpbmsgTFJVQ2FjaGUuRW50cnkjdHRsfSlcbiAgICAgKiBpZiByZWxldmFudC5cbiAgICAgKi9cbiAgICBpbmZvKGtleSkge1xuICAgICAgICBjb25zdCBpID0gdGhpcy4ja2V5TWFwLmdldChrZXkpO1xuICAgICAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAgICAgOiB2O1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0geyB2YWx1ZSB9O1xuICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHR0bCA9IHRoaXMuI3R0bHNbaV07XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuI3N0YXJ0c1tpXTtcbiAgICAgICAgICAgIGlmICh0dGwgJiYgc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1haW4gPSB0dGwgLSAocGVyZi5ub3coKSAtIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBlbnRyeS50dGwgPSByZW1haW47XG4gICAgICAgICAgICAgICAgZW50cnkuc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgZW50cnkuc2l6ZSA9IHRoaXMuI3NpemVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIFtrZXksIHtAbGluayBMUlVDYWNoZS5FbnRyeX1dIHR1cGxlcyB3aGljaCBjYW4gYmVcbiAgICAgKiBwYXNzZWQgdG8ge0BsaW5rIExSTFVDYWNoZSNsb2FkfS5cbiAgICAgKlxuICAgICAqIFRoZSBgc3RhcnRgIGZpZWxkcyBhcmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlIGBEYXRlLm5vdygpYFxuICAgICAqIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIFN0YWxlIGVudHJpZXMgYXJlIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgYGR1bXBgLCBldmVuIGlmXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9IGlzIGZhbHNlLlxuICAgICAqXG4gICAgICogTm90ZTogdGhpcyByZXR1cm5zIGFuIGFjdHVhbCBhcnJheSwgbm90IGEgZ2VuZXJhdG9yLCBzbyBpdCBjYW4gYmUgbW9yZVxuICAgICAqIGVhc2lseSBwYXNzZWQgYXJvdW5kLlxuICAgICAqL1xuICAgIGR1bXAoKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcyh7IGFsbG93U3RhbGU6IHRydWUgfSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0geyB2YWx1ZSB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuI3R0bHMgJiYgdGhpcy4jc3RhcnRzKSB7XG4gICAgICAgICAgICAgICAgZW50cnkudHRsID0gdGhpcy4jdHRsc1tpXTtcbiAgICAgICAgICAgICAgICAvLyBhbHdheXMgZHVtcCB0aGUgc3RhcnQgcmVsYXRpdmUgdG8gYSBwb3J0YWJsZSB0aW1lc3RhbXBcbiAgICAgICAgICAgICAgICAvLyBpdCdzIG9rIGZvciB0aGlzIHRvIGJlIGEgYml0IHNsb3csIGl0J3MgYSByYXJlIG9wZXJhdGlvbi5cbiAgICAgICAgICAgICAgICBjb25zdCBhZ2UgPSBwZXJmLm5vdygpIC0gdGhpcy4jc3RhcnRzW2ldO1xuICAgICAgICAgICAgICAgIGVudHJ5LnN0YXJ0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC0gYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgICAgIGVudHJ5LnNpemUgPSB0aGlzLiNzaXplc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFyci51bnNoaWZ0KFtrZXksIGVudHJ5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzZXQgdGhlIGNhY2hlIGFuZCBsb2FkIGluIHRoZSBpdGVtcyBpbiBlbnRyaWVzIGluIHRoZSBvcmRlciBsaXN0ZWQuXG4gICAgICpcbiAgICAgKiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdGluZyBjYWNoZSBtYXkgYmUgZGlmZmVyZW50IGlmIHRoZSBzYW1lIG9wdGlvbnMgYXJlXG4gICAgICogbm90IHVzZWQgaW4gYm90aCBjYWNoZXMuXG4gICAgICpcbiAgICAgKiBUaGUgYHN0YXJ0YCBmaWVsZHMgYXJlIGFzc3VtZWQgdG8gYmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlXG4gICAgICogYERhdGUubm93KClgIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBsb2FkKGFycikge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIGFycikge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gZW50cnkuc3RhcnQgaXMgYSBwb3J0YWJsZSB0aW1lc3RhbXAsIGJ1dCB3ZSBtYXkgYmUgdXNpbmdcbiAgICAgICAgICAgICAgICAvLyBub2RlJ3MgcGVyZm9ybWFuY2Uubm93KCksIHNvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0LCBzbyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gd2UgZ2V0IHRoZSBpbnRlbmRlZCByZW1haW5pbmcgVFRMLCBubyBtYXR0ZXIgaG93IGxvbmcgaXQnc1xuICAgICAgICAgICAgICAgIC8vIGJlZW4gb24gaWNlLlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gaXQncyBvayBmb3IgdGhpcyB0byBiZSBhIGJpdCBzbG93LCBpdCdzIGEgcmFyZSBvcGVyYXRpb24uXG4gICAgICAgICAgICAgICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIGVudHJ5LnN0YXJ0O1xuICAgICAgICAgICAgICAgIGVudHJ5LnN0YXJ0ID0gcGVyZi5ub3coKSAtIGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgZW50cnkudmFsdWUsIGVudHJ5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSB2YWx1ZSB0byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBOb3RlOiBpZiBgdW5kZWZpbmVkYCBpcyBzcGVjaWZpZWQgYXMgYSB2YWx1ZSwgdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUjZGVsZXRlfVxuICAgICAqXG4gICAgICogRmllbGRzIG9uIHRoZSB7QGxpbmsgTFJVQ2FjaGUuU2V0T3B0aW9uc30gb3B0aW9ucyBwYXJhbSB3aWxsIG92ZXJyaWRlXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMgZm9yIHRoZSBzY29wZVxuICAgICAqIG9mIHRoaXMgc2luZ2xlIGBzZXQoKWAgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogSWYgYHN0YXJ0YCBpcyBwcm92aWRlZCwgdGhlbiB0aGF0IHdpbGwgc2V0IHRoZSBlZmZlY3RpdmUgc3RhcnRcbiAgICAgKiB0aW1lIGZvciB0aGUgVFRMIGNhbGN1bGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGEgcHJldmlvdXNcbiAgICAgKiB2YWx1ZSBvZiBgcGVyZm9ybWFuY2Uubm93KClgIGlmIHN1cHBvcnRlZCwgb3IgYSBwcmV2aW91cyB2YWx1ZSBvZlxuICAgICAqIGBEYXRlLm5vdygpYCBpZiBub3QuXG4gICAgICpcbiAgICAgKiBPcHRpb25zIG9iamVjdCBtYXkgYWxzbyBpbmNsdWRlIGBzaXplYCwgd2hpY2ggd2lsbCBwcmV2ZW50XG4gICAgICogY2FsbGluZyB0aGUgYHNpemVDYWxjdWxhdGlvbmAgZnVuY3Rpb24gYW5kIGp1c3QgdXNlIHRoZSBzcGVjaWZpZWRcbiAgICAgKiBudW1iZXIgaWYgaXQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBhbmQgYG5vRGlzcG9zZU9uU2V0YCB3aGljaFxuICAgICAqIHdpbGwgcHJldmVudCBjYWxsaW5nIGEgYGRpc3Bvc2VgIGZ1bmN0aW9uIGluIHRoZSBjYXNlIG9mXG4gICAgICogb3ZlcndyaXRlcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBgc2l6ZWAgKG9yIHJldHVybiB2YWx1ZSBvZiBgc2l6ZUNhbGN1bGF0aW9uYCkgZm9yIGEgZ2l2ZW5cbiAgICAgKiBlbnRyeSBpcyBncmVhdGVyIHRoYW4gYG1heEVudHJ5U2l6ZWAsIHRoZW4gdGhlIGl0ZW0gd2lsbCBub3QgYmVcbiAgICAgKiBhZGRlZCB0byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBXaWxsIHVwZGF0ZSB0aGUgcmVjZW5jeSBvZiB0aGUgZW50cnkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgYHVuZGVmaW5lZGAsIHRoZW4gdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICAgKiBgY2FjaGUuZGVsZXRlKGtleSlgLiBgdW5kZWZpbmVkYCBpcyBuZXZlciBzdG9yZWQgaW4gdGhlIGNhY2hlLlxuICAgICAqL1xuICAgIHNldChrLCB2LCBzZXRPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGUoayk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHR0bCA9IHRoaXMudHRsLCBzdGFydCwgbm9EaXNwb3NlT25TZXQgPSB0aGlzLm5vRGlzcG9zZU9uU2V0LCBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbiwgc3RhdHVzLCB9ID0gc2V0T3B0aW9ucztcbiAgICAgICAgbGV0IHsgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMIH0gPSBzZXRPcHRpb25zO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy4jcmVxdWlyZVNpemUoaywgdiwgc2V0T3B0aW9ucy5zaXplIHx8IDAsIHNpemVDYWxjdWxhdGlvbik7XG4gICAgICAgIC8vIGlmIHRoZSBpdGVtIGRvZXNuJ3QgZml0LCBkb24ndCBkbyBhbnl0aGluZ1xuICAgICAgICAvLyBOQjogbWF4RW50cnlTaXplIHNldCB0byBtYXhTaXplIGJ5IGRlZmF1bHRcbiAgICAgICAgaWYgKHRoaXMubWF4RW50cnlTaXplICYmIHNpemUgPiB0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAnbWlzcyc7XG4gICAgICAgICAgICAgICAgc3RhdHVzLm1heEVudHJ5U2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhdmUgdG8gZGVsZXRlLCBpbiBjYXNlIHNvbWV0aGluZyBpcyB0aGVyZSBhbHJlYWR5LlxuICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdzZXQnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuI3NpemUgPT09IDAgPyB1bmRlZmluZWQgOiB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gYWRkaXRpb25cbiAgICAgICAgICAgIGluZGV4ID0gKHRoaXMuI3NpemUgPT09IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuI3RhaWxcbiAgICAgICAgICAgICAgICA6IHRoaXMuI2ZyZWUubGVuZ3RoICE9PSAwXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy4jZnJlZS5wb3AoKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI3NpemUgPT09IHRoaXMuI21heFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiNldmljdChmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy4jc2l6ZSk7XG4gICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2luZGV4XSA9IGs7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHY7XG4gICAgICAgICAgICB0aGlzLiNrZXlNYXAuc2V0KGssIGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuI25leHRbdGhpcy4jdGFpbF0gPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuI3ByZXZbaW5kZXhdID0gdGhpcy4jdGFpbDtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuI3NpemUrKztcbiAgICAgICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplKGluZGV4LCBzaXplLCBzdGF0dXMpO1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICBzdGF0dXMuc2V0ID0gJ2FkZCc7XG4gICAgICAgICAgICBub1VwZGF0ZVRUTCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlXG4gICAgICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbCA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHYgIT09IG9sZFZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaChvbGRWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbC5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ3JlcGxhY2VkJykpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IF9fc3RhbGVXaGlsZUZldGNoaW5nOiBzIH0gPSBvbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzICE9PSB1bmRlZmluZWQgJiYgIW5vRGlzcG9zZU9uU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/LihzLCBrLCAnc2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3MsIGssICdzZXQnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIW5vRGlzcG9zZU9uU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4ob2xkVmFsLCBrLCAnc2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW29sZFZhbCwgaywgJ3NldCddKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShpbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jYWRkSXRlbVNpemUoaW5kZXgsIHNpemUsIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSB2O1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNldCA9ICdyZXBsYWNlJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSBvbGRWYWwgJiYgdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2gob2xkVmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBvbGRWYWwuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkVmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5vbGRWYWx1ZSA9IG9sZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAndXBkYXRlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHRsICE9PSAwICYmICF0aGlzLiN0dGxzKSB7XG4gICAgICAgICAgICB0aGlzLiNpbml0aWFsaXplVFRMVHJhY2tpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jdHRscykge1xuICAgICAgICAgICAgaWYgKCFub1VwZGF0ZVRUTCkge1xuICAgICAgICAgICAgICAgIHRoaXMuI3NldEl0ZW1UVEwoaW5kZXgsIHR0bCwgc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFub0Rpc3Bvc2VPblNldCAmJiB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gdGhpcy4jZGlzcG9zZWQ7XG4gICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlcj8uKC4uLnRhc2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmljdCB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBpdGVtLCByZXR1cm5pbmcgaXRzIHZhbHVlIG9yXG4gICAgICogYHVuZGVmaW5lZGAgaWYgY2FjaGUgaXMgZW1wdHkuXG4gICAgICovXG4gICAgcG9wKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMuI3NpemUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLiN2YWxMaXN0W3RoaXMuI2hlYWRdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2V2aWN0KHRydWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwuX19zdGFsZVdoaWxlRmV0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgICAgICB3aGlsZSAoKHRhc2sgPSBkdD8uc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNldmljdChmcmVlKSB7XG4gICAgICAgIGNvbnN0IGhlYWQgPSB0aGlzLiNoZWFkO1xuICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtoZWFkXTtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaGVhZF07XG4gICAgICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2V2aWN0ZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssICdldmljdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VkPy5wdXNoKFt2LCBrLCAnZXZpY3QnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaGVhZCk7XG4gICAgICAgIC8vIGlmIHdlIGFyZW4ndCBhYm91dCB0byB1c2UgdGhlIGluZGV4LCB0aGVuIG51bGwgdGhlc2Ugb3V0XG4gICAgICAgIGlmIChmcmVlKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2hlYWRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtoZWFkXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuI2ZyZWUucHVzaChoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI3RhaWwgPSAwO1xuICAgICAgICAgICAgdGhpcy4jZnJlZS5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI25leHRbaGVhZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4ja2V5TWFwLmRlbGV0ZShrKTtcbiAgICAgICAgdGhpcy4jc2l6ZS0tO1xuICAgICAgICByZXR1cm4gaGVhZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBrZXkgaXMgaW4gdGhlIGNhY2hlLCB3aXRob3V0IHVwZGF0aW5nIHRoZSByZWNlbmN5IG9mIHVzZS5cbiAgICAgKiBXaWxsIHJldHVybiBmYWxzZSBpZiB0aGUgaXRlbSBpcyBzdGFsZSwgZXZlbiB0aG91Z2ggaXQgaXMgdGVjaG5pY2FsbHlcbiAgICAgKiBpbiB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBDaGVjayBpZiBhIGtleSBpcyBpbiB0aGUgY2FjaGUsIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJlY2VuY3kgb2ZcbiAgICAgKiB1c2UuIEFnZSBpcyB1cGRhdGVkIGlmIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0XG4gICAgICogdG8gYHRydWVgIGluIGVpdGhlciB0aGUgb3B0aW9ucyBvciB0aGUgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBXaWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseSBpblxuICAgICAqIHRoZSBjYWNoZS4gVGhlIGRpZmZlcmVuY2UgY2FuIGJlIGRldGVybWluZWQgKGlmIGl0IG1hdHRlcnMpIGJ5IHVzaW5nIGFcbiAgICAgKiBgc3RhdHVzYCBhcmd1bWVudCwgYW5kIGluc3BlY3RpbmcgdGhlIGBoYXNgIGZpZWxkLlxuICAgICAqXG4gICAgICogV2lsbCBub3QgdXBkYXRlIGl0ZW0gYWdlIHVubGVzc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0LlxuICAgICAqL1xuICAgIGhhcyhrLCBoYXNPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyB1cGRhdGVBZ2VPbkhhcyA9IHRoaXMudXBkYXRlQWdlT25IYXMsIHN0YXR1cyB9ID0gaGFzT3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpICYmXG4gICAgICAgICAgICAgICAgdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVBZ2VPbkhhcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlKGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuaGFzID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuaGFzID0gJ3N0YWxlJztcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBzdGF0dXMuaGFzID0gJ21pc3MnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGlrZSB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSBidXQgZG9lc24ndCB1cGRhdGUgcmVjZW5jeSBvciBkZWxldGUgc3RhbGVcbiAgICAgKiBpdGVtcy5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGl0ZW0gaXMgc3RhbGUsIHVubGVzc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlfSBpcyBzZXQuXG4gICAgICovXG4gICAgcGVlayhrLCBwZWVrT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSB9ID0gcGVla09wdGlvbnM7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICghYWxsb3dTdGFsZSAmJiB0aGlzLiNpc1N0YWxlKGluZGV4KSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgIC8vIGVpdGhlciBzdGFsZSBhbmQgYWxsb3dlZCwgb3IgZm9yY2luZyBhIHJlZnJlc2ggb2Ygbm9uLXN0YWxlIHZhbHVlXG4gICAgICAgIHJldHVybiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiB2O1xuICAgIH1cbiAgICAjYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHYgPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWMgPSBuZXcgQUMoKTtcbiAgICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgICAgIC8vIHdoZW4vaWYgb3VyIEFDIHNpZ25hbHMsIHRoZW4gc3RvcCBsaXN0ZW5pbmcgdG8gdGhlaXJzLlxuICAgICAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gYWMuYWJvcnQoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgICAgICAgIHNpZ25hbDogYWMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZmV0Y2hPcHRzID0ge1xuICAgICAgICAgICAgc2lnbmFsOiBhYy5zaWduYWwsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2IgPSAodiwgdXBkYXRlQ2FjaGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhYm9ydGVkIH0gPSBhYy5zaWduYWw7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVBYm9ydCA9IG9wdGlvbnMuaWdub3JlRmV0Y2hBYm9ydCAmJiB2ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWJvcnRlZCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hBYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGFjLnNpZ25hbC5yZWFzb247XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZ25vcmVBYm9ydClcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoQWJvcnRJZ25vcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhYm9ydGVkICYmICFpZ25vcmVBYm9ydCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hGYWlsKGFjLnNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWl0aGVyIHdlIGRpZG4ndCBhYm9ydCwgYW5kIGFyZSBzdGlsbCBoZXJlLCBvciB3ZSBkaWQsIGFuZCBpZ25vcmVkXG4gICAgICAgICAgICBjb25zdCBiZiA9IHA7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleF0gPT09IHApIHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZi5fX3N0YWxlV2hpbGVGZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2RlbGV0ZShrLCAnZmV0Y2gnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoaywgdiwgZmV0Y2hPcHRzLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlYiA9IChlcikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoRmFpbChlcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZldGNoRmFpbCA9IChlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhYm9ydGVkIH0gPSBhYy5zaWduYWw7XG4gICAgICAgICAgICBjb25zdCBhbGxvd1N0YWxlQWJvcnRlZCA9IGFib3J0ZWQgJiYgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0O1xuICAgICAgICAgICAgY29uc3QgYWxsb3dTdGFsZSA9IGFsbG93U3RhbGVBYm9ydGVkIHx8IG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgICAgICBjb25zdCBub0RlbGV0ZSA9IGFsbG93U3RhbGUgfHwgb3B0aW9ucy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgICAgICBjb25zdCBiZiA9IHA7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleF0gPT09IHApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhbGxvdyBzdGFsZSBvbiBmZXRjaCByZWplY3Rpb25zLCB0aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXRcbiAgICAgICAgICAgICAgICAvLyB0aGUgc3RhbGUgdmFsdWUgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgd2hlbiB0aGUgZmV0Y2ggZmFpbHMuXG4gICAgICAgICAgICAgICAgY29uc3QgZGVsID0gIW5vRGVsZXRlIHx8IGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGRlbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ2ZldGNoJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhbGxvd1N0YWxlQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCByZXBsYWNlIHRoZSAqcHJvbWlzZSogd2l0aCB0aGUgc3RhbGUgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIGFyZSBkb25lIHdpdGggdGhlIHByb21pc2UgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgaXQgdW50b3VjaGVkIGlmIHdlJ3JlIHN0aWxsIHdhaXRpbmcgZm9yIGFuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFib3J0ZWQgYmFja2dyb3VuZCBmZXRjaCB0aGF0IGhhc24ndCB5ZXQgcmV0dXJuZWQuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbG93U3RhbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMgJiYgYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmYuX19yZXR1cm5lZCA9PT0gYmYpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGNhbGwgPSAocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZtcCA9IHRoaXMuI2ZldGNoTWV0aG9kPy4oaywgdiwgZmV0Y2hPcHRzKTtcbiAgICAgICAgICAgIGlmIChmbXAgJiYgZm1wIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGZtcC50aGVuKHYgPT4gcmVzKHYgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHYpLCByZWopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWdub3JlZCwgd2UgZ28gdW50aWwgd2UgZmluaXNoLCByZWdhcmRsZXNzLlxuICAgICAgICAgICAgLy8gZGVmZXIgY2hlY2sgdW50aWwgd2UgYXJlIGFjdHVhbGx5IGFib3J0aW5nLFxuICAgICAgICAgICAgLy8gc28gZmV0Y2hNZXRob2QgY2FuIG92ZXJyaWRlLlxuICAgICAgICAgICAgYWMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVGZXRjaEFib3J0IHx8XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCkge1xuICAgICAgICAgICAgICAgICAgICByZXModW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBpdCBldmVudHVhbGx5IHJlc29sdmVzLCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgPSB2ID0+IGNiKHYsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnN0YXR1cylcbiAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoRGlzcGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZShwY2FsbCkudGhlbihjYiwgZWIpO1xuICAgICAgICBjb25zdCBiZiA9IE9iamVjdC5hc3NpZ24ocCwge1xuICAgICAgICAgICAgX19hYm9ydENvbnRyb2xsZXI6IGFjLFxuICAgICAgICAgICAgX19zdGFsZVdoaWxlRmV0Y2hpbmc6IHYsXG4gICAgICAgICAgICBfX3JldHVybmVkOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gaW50ZXJuYWwsIGRvbid0IGV4cG9zZSBzdGF0dXMuXG4gICAgICAgICAgICB0aGlzLnNldChrLCBiZiwgeyAuLi5mZXRjaE9wdHMub3B0aW9ucywgc3RhdHVzOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IGJmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiZjtcbiAgICB9XG4gICAgI2lzQmFja2dyb3VuZEZldGNoKHApIHtcbiAgICAgICAgaWYgKCF0aGlzLiNoYXNGZXRjaE1ldGhvZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgYiA9IHA7XG4gICAgICAgIHJldHVybiAoISFiICYmXG4gICAgICAgICAgICBiIGluc3RhbmNlb2YgUHJvbWlzZSAmJlxuICAgICAgICAgICAgYi5oYXNPd25Qcm9wZXJ0eSgnX19zdGFsZVdoaWxlRmV0Y2hpbmcnKSAmJlxuICAgICAgICAgICAgYi5fX2Fib3J0Q29udHJvbGxlciBpbnN0YW5jZW9mIEFDKTtcbiAgICB9XG4gICAgYXN5bmMgZmV0Y2goaywgZmV0Y2hPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBcbiAgICAgICAgLy8gZ2V0IG9wdGlvbnNcbiAgICAgICAgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSwgdXBkYXRlQWdlT25HZXQgPSB0aGlzLnVwZGF0ZUFnZU9uR2V0LCBub0RlbGV0ZU9uU3RhbGVHZXQgPSB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCwgXG4gICAgICAgIC8vIHNldCBvcHRpb25zXG4gICAgICAgIHR0bCA9IHRoaXMudHRsLCBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsIHNpemUgPSAwLCBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbiwgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMLCBcbiAgICAgICAgLy8gZmV0Y2ggZXhjbHVzaXZlIG9wdGlvbnNcbiAgICAgICAgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gdGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uID0gdGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiwgaWdub3JlRmV0Y2hBYm9ydCA9IHRoaXMuaWdub3JlRmV0Y2hBYm9ydCwgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCA9IHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCwgY29udGV4dCwgZm9yY2VSZWZyZXNoID0gZmFsc2UsIHN0YXR1cywgc2lnbmFsLCB9ID0gZmV0Y2hPcHRpb25zO1xuICAgICAgICBpZiAoIXRoaXMuI2hhc0ZldGNoTWV0aG9kKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdnZXQnO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGssIHtcbiAgICAgICAgICAgICAgICBhbGxvd1N0YWxlLFxuICAgICAgICAgICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICAgICAgICAgIG5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dTdGFsZSxcbiAgICAgICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICAgICAgbm9EZWxldGVPblN0YWxlR2V0LFxuICAgICAgICAgICAgdHRsLFxuICAgICAgICAgICAgbm9EaXNwb3NlT25TZXQsXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgc2l6ZUNhbGN1bGF0aW9uLFxuICAgICAgICAgICAgbm9VcGRhdGVUVEwsXG4gICAgICAgICAgICBub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sXG4gICAgICAgICAgICBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbixcbiAgICAgICAgICAgIGFsbG93U3RhbGVPbkZldGNoQWJvcnQsXG4gICAgICAgICAgICBpZ25vcmVGZXRjaEFib3J0LFxuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICBzdGF0dXMuZmV0Y2ggPSAnbWlzcyc7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAocC5fX3JldHVybmVkID0gcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBpbiBjYWNoZSwgbWF5YmUgYWxyZWFkeSBmZXRjaGluZ1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhbGUgPSBhbGxvd1N0YWxlICYmIHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdpbmZsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YWxlID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6ICh2Ll9fcmV0dXJuZWQgPSB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIHdlIGZvcmNlIGEgcmVmcmVzaCwgdGhhdCBtZWFucyBkbyBOT1Qgc2VydmUgdGhlIGNhY2hlZCB2YWx1ZSxcbiAgICAgICAgICAgIC8vIHVubGVzcyB3ZSBhcmUgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiByZWZyZXNoaW5nIHRoZSBjYWNoZS5cbiAgICAgICAgICAgIGNvbnN0IGlzU3RhbGUgPSB0aGlzLiNpc1N0YWxlKGluZGV4KTtcbiAgICAgICAgICAgIGlmICghZm9yY2VSZWZyZXNoICYmICFpc1N0YWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgdGhpcy4jbW92ZVRvVGFpbChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBvaywgaXQgaXMgc3RhbGUgb3IgYSBmb3JjZWQgcmVmcmVzaCwgYW5kIG5vdCBhbHJlYWR5IGZldGNoaW5nLlxuICAgICAgICAgICAgLy8gcmVmcmVzaCB0aGUgY2FjaGUuXG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1N0YWxlID0gcC5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3Qgc3RhbGVWYWwgPSBoYXNTdGFsZSAmJiBhbGxvd1N0YWxlO1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9IGlzU3RhbGUgPyAnc3RhbGUnIDogJ3JlZnJlc2gnO1xuICAgICAgICAgICAgICAgIGlmIChzdGFsZVZhbCAmJiBpc1N0YWxlKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhbGVWYWwgPyBwLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogKHAuX19yZXR1cm5lZCA9IHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGZvcmNlRmV0Y2goaywgZmV0Y2hPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IHRoaXMuZmV0Y2goaywgZmV0Y2hPcHRpb25zKTtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmV0Y2goKSByZXR1cm5lZCB1bmRlZmluZWQnKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIG1lbW8oaywgbWVtb09wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBtZW1vTWV0aG9kID0gdGhpcy4jbWVtb01ldGhvZDtcbiAgICAgICAgaWYgKCFtZW1vTWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIG1lbW9NZXRob2QgcHJvdmlkZWQgdG8gY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGNvbnRleHQsIGZvcmNlUmVmcmVzaCwgLi4ub3B0aW9ucyB9ID0gbWVtb09wdGlvbnM7XG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLmdldChrLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFmb3JjZVJlZnJlc2ggJiYgdiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNvbnN0IHZ2ID0gbWVtb01ldGhvZChrLCB2LCB7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0KGssIHZ2LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHZ2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZS4gV2lsbCB1cGRhdGUgdGhlIHJlY2VuY3kgb2YgdGhlIGNhY2hlXG4gICAgICogZW50cnkgZm91bmQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgZ2V0KCkgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgZ2V0KGssIGdldE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUsIHVwZGF0ZUFnZU9uR2V0ID0gdGhpcy51cGRhdGVBZ2VPbkdldCwgbm9EZWxldGVPblN0YWxlR2V0ID0gdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQsIHN0YXR1cywgfSA9IGdldE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBmZXRjaGluZyA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmdldCA9ICdzdGFsZSc7XG4gICAgICAgICAgICAgICAgLy8gZGVsZXRlIG9ubHkgaWYgbm90IGFuIGluLWZsaWdodCBiYWNrZ3JvdW5kIGZldGNoXG4gICAgICAgICAgICAgICAgaWYgKCFmZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vRGVsZXRlT25TdGFsZUdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYmIGFsbG93U3RhbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvd1N0YWxlID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1N0YWxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG93U3RhbGUgPyB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgY3VycmVudGx5IGZldGNoaW5nIGl0LCB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIGl0IHlldFxuICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHN0YWxlLCB3aGljaCBtZWFucyB0aGlzIGlzbid0IGEgc3RhbGVXaGlsZVJlZmV0Y2hpbmcuXG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyBub3Qgc3RhbGUsIGFuZCBmZXRjaGluZywgQU5EIGhhcyBhIF9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgLy8gdmFsdWUsIHRoZW4gdGhhdCBtZWFucyB0aGUgdXNlciBmZXRjaGVkIHdpdGgge2ZvcmNlUmVmcmVzaDp0cnVlfSxcbiAgICAgICAgICAgICAgICAvLyBzbyBpdCdzIHNhZmUgdG8gcmV0dXJuIHRoYXQgdmFsdWUuXG4gICAgICAgICAgICAgICAgaWYgKGZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jbW92ZVRvVGFpbChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ21pc3MnO1xuICAgICAgICB9XG4gICAgfVxuICAgICNjb25uZWN0KHAsIG4pIHtcbiAgICAgICAgdGhpcy4jcHJldltuXSA9IHA7XG4gICAgICAgIHRoaXMuI25leHRbcF0gPSBuO1xuICAgIH1cbiAgICAjbW92ZVRvVGFpbChpbmRleCkge1xuICAgICAgICAvLyBpZiB0YWlsIGFscmVhZHksIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgLy8gaWYgaGVhZCwgbW92ZSBoZWFkIHRvIG5leHRbaW5kZXhdXG4gICAgICAgIC8vIGVsc2VcbiAgICAgICAgLy8gICBtb3ZlIG5leHRbcHJldltpbmRleF1dIHRvIG5leHRbaW5kZXhdIChoZWFkIGhhcyBubyBwcmV2KVxuICAgICAgICAvLyAgIG1vdmUgcHJldltuZXh0W2luZGV4XV0gdG8gcHJldltpbmRleF1cbiAgICAgICAgLy8gcHJldltpbmRleF0gPSB0YWlsXG4gICAgICAgIC8vIG5leHRbdGFpbF0gPSBpbmRleFxuICAgICAgICAvLyB0YWlsID0gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNoZWFkID0gdGhpcy4jbmV4dFtpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNjb25uZWN0KHRoaXMuI3ByZXZbaW5kZXhdLCB0aGlzLiNuZXh0W2luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjb25uZWN0KHRoaXMuI3RhaWwsIGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSBpbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEga2V5IG91dCBvZiB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGtleSB3YXMgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGRlbGV0ZShrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkZWxldGUoaywgJ2RlbGV0ZScpO1xuICAgIH1cbiAgICAjZGVsZXRlKGssIHJlYXNvbikge1xuICAgICAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjbGVhcihyZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssIHJlYXNvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2tleU1hcC5kZWxldGUoayk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaW5kZXhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiN0YWlsID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNuZXh0W3BpXSA9IHRoaXMuI25leHRbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmkgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3ByZXZbbmldID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jc2l6ZS0tO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNmcmVlLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gdGhpcy4jZGlzcG9zZWQ7XG4gICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlcj8uKC4uLnRhc2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgY2FjaGUgZW50aXJlbHksIHRocm93aW5nIGF3YXkgYWxsIHZhbHVlcy5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NsZWFyKCdkZWxldGUnKTtcbiAgICB9XG4gICAgI2NsZWFyKHJlYXNvbikge1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssIHJlYXNvbl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNrZXlNYXAuY2xlYXIoKTtcbiAgICAgICAgdGhpcy4jdmFsTGlzdC5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuI2tleUxpc3QuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgIHRoaXMuI3R0bHMuZmlsbCgwKTtcbiAgICAgICAgICAgIHRoaXMuI3N0YXJ0cy5maWxsKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgdGhpcy4jc2l6ZXMuZmlsbCgwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNoZWFkID0gMDtcbiAgICAgICAgdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgIHRoaXMuI2ZyZWUubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgPSAwO1xuICAgICAgICB0aGlzLiNzaXplID0gMDtcbiAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZCkge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkxSVUNhY2hlID0gTFJVQ2FjaGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NaW5pcGFzcyA9IGV4cG9ydHMuaXNXcml0YWJsZSA9IGV4cG9ydHMuaXNSZWFkYWJsZSA9IGV4cG9ydHMuaXNTdHJlYW0gPSB2b2lkIDA7XG5jb25zdCBwcm9jID0gdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3NcbiAgICA/IHByb2Nlc3NcbiAgICA6IHtcbiAgICAgICAgc3Rkb3V0OiBudWxsLFxuICAgICAgICBzdGRlcnI6IG51bGwsXG4gICAgfTtcbmNvbnN0IG5vZGVfZXZlbnRzXzEgPSByZXF1aXJlKFwibm9kZTpldmVudHNcIik7XG5jb25zdCBub2RlX3N0cmVhbV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJub2RlOnN0cmVhbVwiKSk7XG5jb25zdCBub2RlX3N0cmluZ19kZWNvZGVyXzEgPSByZXF1aXJlKFwibm9kZTpzdHJpbmdfZGVjb2RlclwiKTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgTWluaXBhc3Mgc3RyZWFtLCBOb2RlIHN0cmVhbSwgb3Igc29tZXRoaW5nXG4gKiBlbHNlIHRoYXQgTWluaXBhc3MgY2FuIGludGVyYWN0IHdpdGguXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIChzIGluc3RhbmNlb2YgTWluaXBhc3MgfHxcbiAgICAgICAgcyBpbnN0YW5jZW9mIG5vZGVfc3RyZWFtXzEuZGVmYXVsdCB8fFxuICAgICAgICAoMCwgZXhwb3J0cy5pc1JlYWRhYmxlKShzKSB8fFxuICAgICAgICAoMCwgZXhwb3J0cy5pc1dyaXRhYmxlKShzKSk7XG5leHBvcnRzLmlzU3RyZWFtID0gaXNTdHJlYW07XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIHtAbGluayBNaW5pcGFzcy5SZWFkYWJsZX1cbiAqL1xuY29uc3QgaXNSZWFkYWJsZSA9IChzKSA9PiAhIXMgJiZcbiAgICB0eXBlb2YgcyA9PT0gJ29iamVjdCcgJiZcbiAgICBzIGluc3RhbmNlb2Ygbm9kZV9ldmVudHNfMS5FdmVudEVtaXR0ZXIgJiZcbiAgICB0eXBlb2Ygcy5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgLy8gbm9kZSBjb3JlIFdyaXRhYmxlIHN0cmVhbXMgaGF2ZSBhIHBpcGUoKSBtZXRob2QsIGJ1dCBpdCB0aHJvd3NcbiAgICBzLnBpcGUgIT09IG5vZGVfc3RyZWFtXzEuZGVmYXVsdC5Xcml0YWJsZS5wcm90b3R5cGUucGlwZTtcbmV4cG9ydHMuaXNSZWFkYWJsZSA9IGlzUmVhZGFibGU7XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIHtAbGluayBNaW5pcGFzcy5Xcml0YWJsZX1cbiAqL1xuY29uc3QgaXNXcml0YWJsZSA9IChzKSA9PiAhIXMgJiZcbiAgICB0eXBlb2YgcyA9PT0gJ29iamVjdCcgJiZcbiAgICBzIGluc3RhbmNlb2Ygbm9kZV9ldmVudHNfMS5FdmVudEVtaXR0ZXIgJiZcbiAgICB0eXBlb2Ygcy53cml0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBzLmVuZCA9PT0gJ2Z1bmN0aW9uJztcbmV4cG9ydHMuaXNXcml0YWJsZSA9IGlzV3JpdGFibGU7XG5jb25zdCBFT0YgPSBTeW1ib2woJ0VPRicpO1xuY29uc3QgTUFZQkVfRU1JVF9FTkQgPSBTeW1ib2woJ21heWJlRW1pdEVuZCcpO1xuY29uc3QgRU1JVFRFRF9FTkQgPSBTeW1ib2woJ2VtaXR0ZWRFbmQnKTtcbmNvbnN0IEVNSVRUSU5HX0VORCA9IFN5bWJvbCgnZW1pdHRpbmdFbmQnKTtcbmNvbnN0IEVNSVRURURfRVJST1IgPSBTeW1ib2woJ2VtaXR0ZWRFcnJvcicpO1xuY29uc3QgQ0xPU0VEID0gU3ltYm9sKCdjbG9zZWQnKTtcbmNvbnN0IFJFQUQgPSBTeW1ib2woJ3JlYWQnKTtcbmNvbnN0IEZMVVNIID0gU3ltYm9sKCdmbHVzaCcpO1xuY29uc3QgRkxVU0hDSFVOSyA9IFN5bWJvbCgnZmx1c2hDaHVuaycpO1xuY29uc3QgRU5DT0RJTkcgPSBTeW1ib2woJ2VuY29kaW5nJyk7XG5jb25zdCBERUNPREVSID0gU3ltYm9sKCdkZWNvZGVyJyk7XG5jb25zdCBGTE9XSU5HID0gU3ltYm9sKCdmbG93aW5nJyk7XG5jb25zdCBQQVVTRUQgPSBTeW1ib2woJ3BhdXNlZCcpO1xuY29uc3QgUkVTVU1FID0gU3ltYm9sKCdyZXN1bWUnKTtcbmNvbnN0IEJVRkZFUiA9IFN5bWJvbCgnYnVmZmVyJyk7XG5jb25zdCBQSVBFUyA9IFN5bWJvbCgncGlwZXMnKTtcbmNvbnN0IEJVRkZFUkxFTkdUSCA9IFN5bWJvbCgnYnVmZmVyTGVuZ3RoJyk7XG5jb25zdCBCVUZGRVJQVVNIID0gU3ltYm9sKCdidWZmZXJQdXNoJyk7XG5jb25zdCBCVUZGRVJTSElGVCA9IFN5bWJvbCgnYnVmZmVyU2hpZnQnKTtcbmNvbnN0IE9CSkVDVE1PREUgPSBTeW1ib2woJ29iamVjdE1vZGUnKTtcbi8vIGludGVybmFsIGV2ZW50IHdoZW4gc3RyZWFtIGlzIGRlc3Ryb3llZFxuY29uc3QgREVTVFJPWUVEID0gU3ltYm9sKCdkZXN0cm95ZWQnKTtcbi8vIGludGVybmFsIGV2ZW50IHdoZW4gc3RyZWFtIGhhcyBhbiBlcnJvclxuY29uc3QgRVJST1IgPSBTeW1ib2woJ2Vycm9yJyk7XG5jb25zdCBFTUlUREFUQSA9IFN5bWJvbCgnZW1pdERhdGEnKTtcbmNvbnN0IEVNSVRFTkQgPSBTeW1ib2woJ2VtaXRFbmQnKTtcbmNvbnN0IEVNSVRFTkQyID0gU3ltYm9sKCdlbWl0RW5kMicpO1xuY29uc3QgQVNZTkMgPSBTeW1ib2woJ2FzeW5jJyk7XG5jb25zdCBBQk9SVCA9IFN5bWJvbCgnYWJvcnQnKTtcbmNvbnN0IEFCT1JURUQgPSBTeW1ib2woJ2Fib3J0ZWQnKTtcbmNvbnN0IFNJR05BTCA9IFN5bWJvbCgnc2lnbmFsJyk7XG5jb25zdCBEQVRBTElTVEVORVJTID0gU3ltYm9sKCdkYXRhTGlzdGVuZXJzJyk7XG5jb25zdCBESVNDQVJERUQgPSBTeW1ib2woJ2Rpc2NhcmRlZCcpO1xuY29uc3QgZGVmZXIgPSAoZm4pID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pO1xuY29uc3Qgbm9kZWZlciA9IChmbikgPT4gZm4oKTtcbmNvbnN0IGlzRW5kaXNoID0gKGV2KSA9PiBldiA9PT0gJ2VuZCcgfHwgZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJztcbmNvbnN0IGlzQXJyYXlCdWZmZXJMaWtlID0gKGIpID0+IGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgICghIWIgJiZcbiAgICAgICAgdHlwZW9mIGIgPT09ICdvYmplY3QnICYmXG4gICAgICAgIGIuY29uc3RydWN0b3IgJiZcbiAgICAgICAgYi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXJyYXlCdWZmZXInICYmXG4gICAgICAgIGIuYnl0ZUxlbmd0aCA+PSAwKTtcbmNvbnN0IGlzQXJyYXlCdWZmZXJWaWV3ID0gKGIpID0+ICFCdWZmZXIuaXNCdWZmZXIoYikgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGIpO1xuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHRvIGEgZGVzdGluYXRpb24gc3RyZWFtLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBQaXBlIHtcbiAgICBzcmM7XG4gICAgZGVzdDtcbiAgICBvcHRzO1xuICAgIG9uZHJhaW47XG4gICAgY29uc3RydWN0b3Ioc3JjLCBkZXN0LCBvcHRzKSB7XG4gICAgICAgIHRoaXMuc3JjID0gc3JjO1xuICAgICAgICB0aGlzLmRlc3QgPSBkZXN0O1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLm9uZHJhaW4gPSAoKSA9PiBzcmNbUkVTVU1FXSgpO1xuICAgICAgICB0aGlzLmRlc3Qub24oJ2RyYWluJywgdGhpcy5vbmRyYWluKTtcbiAgICB9XG4gICAgdW5waXBlKCkge1xuICAgICAgICB0aGlzLmRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgdGhpcy5vbmRyYWluKTtcbiAgICB9XG4gICAgLy8gb25seSBoZXJlIGZvciB0aGUgcHJvdG90eXBlXG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgcHJveHlFcnJvcnMoX2VyKSB7IH1cbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIGVuZCgpIHtcbiAgICAgICAgdGhpcy51bnBpcGUoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5lbmQpXG4gICAgICAgICAgICB0aGlzLmRlc3QuZW5kKCk7XG4gICAgfVxufVxuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHRvIGEgZGVzdGluYXRpb24gc3RyZWFtIHdoZXJlXG4gKiBlcnJvcnMgYXJlIHByb3hpZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFBpcGVQcm94eUVycm9ycyBleHRlbmRzIFBpcGUge1xuICAgIHVucGlwZSgpIHtcbiAgICAgICAgdGhpcy5zcmMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5wcm94eUVycm9ycyk7XG4gICAgICAgIHN1cGVyLnVucGlwZSgpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihzcmMsIGRlc3QsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIoc3JjLCBkZXN0LCBvcHRzKTtcbiAgICAgICAgdGhpcy5wcm94eUVycm9ycyA9IGVyID0+IGRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgIHNyYy5vbignZXJyb3InLCB0aGlzLnByb3h5RXJyb3JzKTtcbiAgICB9XG59XG5jb25zdCBpc09iamVjdE1vZGVPcHRpb25zID0gKG8pID0+ICEhby5vYmplY3RNb2RlO1xuY29uc3QgaXNFbmNvZGluZ09wdGlvbnMgPSAobykgPT4gIW8ub2JqZWN0TW9kZSAmJiAhIW8uZW5jb2RpbmcgJiYgby5lbmNvZGluZyAhPT0gJ2J1ZmZlcic7XG4vKipcbiAqIE1haW4gZXhwb3J0LCB0aGUgTWluaXBhc3MgY2xhc3NcbiAqXG4gKiBgUlR5cGVgIGlzIHRoZSB0eXBlIG9mIGRhdGEgZW1pdHRlZCwgZGVmYXVsdHMgdG8gQnVmZmVyXG4gKlxuICogYFdUeXBlYCBpcyB0aGUgdHlwZSBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4sIGlmIFJUeXBlIGlzIGJ1ZmZlciBvciBzdHJpbmcsXG4gKiB0aGVuIGFueSB7QGxpbmsgTWluaXBhc3MuQ29udGlndW91c0RhdGF9IGlzIGFsbG93ZWQuXG4gKlxuICogYEV2ZW50c2AgaXMgdGhlIHNldCBvZiBldmVudCBoYW5kbGVyIHNpZ25hdHVyZXMgdGhhdCB0aGlzIG9iamVjdFxuICogd2lsbCBlbWl0LCBzZWUge0BsaW5rIE1pbmlwYXNzLkV2ZW50c31cbiAqL1xuY2xhc3MgTWluaXBhc3MgZXh0ZW5kcyBub2RlX2V2ZW50c18xLkV2ZW50RW1pdHRlciB7XG4gICAgW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgW1BBVVNFRF0gPSBmYWxzZTtcbiAgICBbUElQRVNdID0gW107XG4gICAgW0JVRkZFUl0gPSBbXTtcbiAgICBbT0JKRUNUTU9ERV07XG4gICAgW0VOQ09ESU5HXTtcbiAgICBbQVNZTkNdO1xuICAgIFtERUNPREVSXTtcbiAgICBbRU9GXSA9IGZhbHNlO1xuICAgIFtFTUlUVEVEX0VORF0gPSBmYWxzZTtcbiAgICBbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgIFtDTE9TRURdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRVJST1JdID0gbnVsbDtcbiAgICBbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgW0RFU1RST1lFRF0gPSBmYWxzZTtcbiAgICBbU0lHTkFMXTtcbiAgICBbQUJPUlRFRF0gPSBmYWxzZTtcbiAgICBbREFUQUxJU1RFTkVSU10gPSAwO1xuICAgIFtESVNDQVJERURdID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSB3cml0dGVuXG4gICAgICovXG4gICAgd3JpdGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBjYW4gYmUgcmVhZFxuICAgICAqL1xuICAgIHJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBJZiBgUlR5cGVgIGlzIEJ1ZmZlciwgdGhlbiBvcHRpb25zIGRvIG5vdCBuZWVkIHRvIGJlIHByb3ZpZGVkLlxuICAgICAqIE90aGVyd2lzZSwgYW4gb3B0aW9ucyBvYmplY3QgbXVzdCBiZSBwcm92aWRlZCB0byBzcGVjaWZ5IGVpdGhlclxuICAgICAqIHtAbGluayBNaW5pcGFzcy5TaGFyZWRPcHRpb25zLm9iamVjdE1vZGV9IG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMuZW5jb2Rpbmd9LCBhcyBhcHByb3ByaWF0ZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoYXJnc1swXSB8fFxuICAgICAgICAgICAge30pO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAob3B0aW9ucy5vYmplY3RNb2RlICYmIHR5cGVvZiBvcHRpb25zLmVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RpbmcgYW5kIG9iamVjdE1vZGUgbWF5IG5vdCBiZSB1c2VkIHRvZ2V0aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0TW9kZU9wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpc1tFTkNPRElOR10gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRW5jb2RpbmdPcHRpb25zKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tBU1lOQ10gPSAhIW9wdGlvbnMuYXN5bmM7XG4gICAgICAgIHRoaXNbREVDT0RFUl0gPSB0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBuZXcgbm9kZV9zdHJpbmdfZGVjb2Rlcl8xLlN0cmluZ0RlY29kZXIodGhpc1tFTkNPRElOR10pXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIC8vQHRzLWlnbm9yZSAtIHByaXZhdGUgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmdcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1Z0V4cG9zZUJ1ZmZlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdidWZmZXInLCB7IGdldDogKCkgPT4gdGhpc1tCVUZGRVJdIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vQHRzLWlnbm9yZSAtIHByaXZhdGUgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmdcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1Z0V4cG9zZVBpcGVzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3BpcGVzJywgeyBnZXQ6ICgpID0+IHRoaXNbUElQRVNdIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBvcHRpb25zO1xuICAgICAgICBpZiAoc2lnbmFsKSB7XG4gICAgICAgICAgICB0aGlzW1NJR05BTF0gPSBzaWduYWw7XG4gICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzW0FCT1JUXSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gdGhpc1tBQk9SVF0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBkYXRhIHN0b3JlZCBpbiB0aGUgYnVmZmVyIHdhaXRpbmcgdG8gYmUgcmVhZC5cbiAgICAgKlxuICAgICAqIEZvciBCdWZmZXIgc3RyaW5ncywgdGhpcyB3aWxsIGJlIHRoZSB0b3RhbCBieXRlIGxlbmd0aC5cbiAgICAgKiBGb3Igc3RyaW5nIGVuY29kaW5nIHN0cmVhbXMsIHRoaXMgd2lsbCBiZSB0aGUgc3RyaW5nIGNoYXJhY3RlciBsZW5ndGgsXG4gICAgICogYWNjb3JkaW5nIHRvIEphdmFTY3JpcHQncyBgc3RyaW5nLmxlbmd0aGAgbG9naWMuXG4gICAgICogRm9yIG9iamVjdE1vZGUgc3RyZWFtcywgdGhpcyBpcyBhIGNvdW50IG9mIHRoZSBpdGVtcyB3YWl0aW5nIHRvIGJlXG4gICAgICogZW1pdHRlZC5cbiAgICAgKi9cbiAgICBnZXQgYnVmZmVyTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tCVUZGRVJMRU5HVEhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYEJ1ZmZlckVuY29kaW5nYCBjdXJyZW50bHkgaW4gdXNlLCBvciBgbnVsbGBcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0VOQ09ESU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIGlzIGEgcmVhZCBvbmx5IHByb3BlcnR5XG4gICAgICovXG4gICAgc2V0IGVuY29kaW5nKF9lbmMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGluZyBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBFbmNvZGluZyBtYXkgb25seSBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lXG4gICAgICovXG4gICAgc2V0RW5jb2RpbmcoX2VuYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kaW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcnVlIGlmIHRoaXMgaXMgYW4gb2JqZWN0TW9kZSBzdHJlYW1cbiAgICAgKi9cbiAgICBnZXQgb2JqZWN0TW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbT0JKRUNUTU9ERV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIC0gVGhpcyBpcyBhIHJlYWQtb25seSBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHNldCBvYmplY3RNb2RlKF9vbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29iamVjdE1vZGUgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhpcyBpcyBhbiBhc3luYyBzdHJlYW1cbiAgICAgKi9cbiAgICBnZXQgWydhc3luYyddKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tBU1lOQ107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIG1ha2UgdGhpcyBzdHJlYW0gYXN5bmMuXG4gICAgICpcbiAgICAgKiBPbmNlIHNldCwgaXQgY2Fubm90IGJlIHVuc2V0LCBhcyB0aGlzIHdvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGluY29ycmVjdFxuICAgICAqIGJlaGF2aW9yLiAgSWUsIGEgc3luYyBzdHJlYW0gY2FuIGJlIG1hZGUgYXN5bmMsIGJ1dCBhbiBhc3luYyBzdHJlYW1cbiAgICAgKiBjYW5ub3QgYmUgc2FmZWx5IG1hZGUgc3luYy5cbiAgICAgKi9cbiAgICBzZXQgWydhc3luYyddKGEpIHtcbiAgICAgICAgdGhpc1tBU1lOQ10gPSB0aGlzW0FTWU5DXSB8fCAhIWE7XG4gICAgfVxuICAgIC8vIGRyb3AgZXZlcnl0aGluZyBhbmQgZ2V0IG91dCBvZiB0aGUgZmxvdyBjb21wbGV0ZWx5XG4gICAgW0FCT1JUXSgpIHtcbiAgICAgICAgdGhpc1tBQk9SVEVEXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgnYWJvcnQnLCB0aGlzW1NJR05BTF0/LnJlYXNvbik7XG4gICAgICAgIHRoaXMuZGVzdHJveSh0aGlzW1NJR05BTF0/LnJlYXNvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBhYm9ydGVkLlxuICAgICAqL1xuICAgIGdldCBhYm9ydGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tBQk9SVEVEXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTm8tb3Agc2V0dGVyLiBTdHJlYW0gYWJvcnRlZCBzdGF0dXMgaXMgc2V0IHZpYSB0aGUgQWJvcnRTaWduYWwgcHJvdmlkZWRcbiAgICAgKiBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9ucy5cbiAgICAgKi9cbiAgICBzZXQgYWJvcnRlZChfKSB7IH1cbiAgICB3cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzW0FCT1JURURdKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cml0ZSBhZnRlciBlbmQnKTtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdDYW5ub3QgY2FsbCB3cml0ZSBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkJyksIHsgY29kZTogJ0VSUl9TVFJFQU1fREVTVFJPWUVEJyB9KSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGVuY29kaW5nO1xuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbmNvZGluZylcbiAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0ZjgnO1xuICAgICAgICBjb25zdCBmbiA9IHRoaXNbQVNZTkNdID8gZGVmZXIgOiBub2RlZmVyO1xuICAgICAgICAvLyBjb252ZXJ0IGFycmF5IGJ1ZmZlcnMgYW5kIHR5cGVkIGFycmF5IHZpZXdzIGludG8gYnVmZmVyc1xuICAgICAgICAvLyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGRvIHRoZSBvcHBvc2l0ZSFcbiAgICAgICAgLy8gbGVhdmUgc3RyaW5ncyBhbmQgYnVmZmVycyBhcy1pc1xuICAgICAgICAvLyBhbnl0aGluZyBpcyBvbmx5IGFsbG93ZWQgaWYgaW4gb2JqZWN0IG1vZGUsIHNvIHRocm93XG4gICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXlCdWZmZXJWaWV3KGNodW5rKSkge1xuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2luZ1xuICAgICAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmsuYnVmZmVyLCBjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlCdWZmZXJMaWtlKGNodW5rKSkge1xuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2luZ1xuICAgICAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm9uLWNvbnRpZ3VvdXMgZGF0YSB3cml0dGVuIHRvIG5vbi1vYmplY3RNb2RlIHN0cmVhbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBvYmplY3QgbW9kZSB1cCBmcm9udCwgc2luY2UgaXQncyBzaW1wbGVyXG4gICAgICAgIC8vIHRoaXMgeWllbGRzIGJldHRlciBwZXJmb3JtYW5jZSwgZmV3ZXIgY2hlY2tzIGxhdGVyLlxuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgLy8gbWF5YmUgaW1wb3NzaWJsZT9cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXNbRkxVU0hdKHRydWUpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIGlmICh0aGlzW0ZMT1dJTkddKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUlBVU0hdKGNodW5rKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICAgICAgaWYgKGNiKVxuICAgICAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgICAgICB9XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQgdGhlIGNodW5rIGlzIGEgYnVmZmVyIG9yIHN0cmluZ1xuICAgICAgICAvLyBkb24ndCBidWZmZXIgaXQgdXAgb3Igc2VuZCBpdCB0byB0aGUgZGVjb2RlclxuICAgICAgICBpZiAoIWNodW5rLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmFzdC1wYXRoIHdyaXRpbmcgc3RyaW5ncyBvZiBzYW1lIGVuY29kaW5nIHRvIGEgc3RyZWFtIHdpdGhcbiAgICAgICAgLy8gYW4gZW1wdHkgYnVmZmVyLCBza2lwcGluZyB0aGUgYnVmZmVyL2RlY29kZXIgZGFuY2VcbiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIC8vIHVubGVzcyBpdCBpcyBhIHN0cmluZyBhbHJlYWR5IHJlYWR5IGZvciB1cyB0byB1c2VcbiAgICAgICAgICAgICEoZW5jb2RpbmcgPT09IHRoaXNbRU5DT0RJTkddICYmICF0aGlzW0RFQ09ERVJdPy5sYXN0TmVlZCkpIHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2VcbiAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNodW5rKSAmJiB0aGlzW0VOQ09ESU5HXSkge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5nZVxuICAgICAgICAgICAgY2h1bmsgPSB0aGlzW0RFQ09ERVJdLndyaXRlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBmbHVzaGluZyBDQU4gcG90ZW50aWFsbHkgc3dpdGNoIHVzIGludG8gbm90LWZsb3dpbmcgbW9kZVxuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICB0aGlzW0ZMVVNIXSh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSUFVTSF0oY2h1bmspO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICBmbihjYik7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb3ctbGV2ZWwgZXhwbGljaXQgcmVhZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBJbiBvYmplY3RNb2RlLCB0aGUgYXJndW1lbnQgaXMgaWdub3JlZCwgYW5kIG9uZSBpdGVtIGlzIHJldHVybmVkIGlmXG4gICAgICogYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogYG5gIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgKG9yIGluIHRoZSBjYXNlIG9mIGVuY29kaW5nIHN0cmVhbXMsXG4gICAgICogY2hhcmFjdGVycykgdG8gY29uc3VtZS4gSWYgYG5gIGlzIG5vdCBwcm92aWRlZCwgdGhlbiB0aGUgZW50aXJlIGJ1ZmZlclxuICAgICAqIGlzIHJldHVybmVkLCBvciBgbnVsbGAgaXMgcmV0dXJuZWQgaWYgbm8gZGF0YSBpcyBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBJZiBgbmAgaXMgZ3JlYXRlciB0aGF0IHRoZSBhbW91bnQgb2YgZGF0YSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyLFxuICAgICAqIHRoZW4gYG51bGxgIGlzIHJldHVybmVkLlxuICAgICAqL1xuICAgIHJlYWQobikge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdID09PSAwIHx8XG4gICAgICAgICAgICBuID09PSAwIHx8XG4gICAgICAgICAgICAobiAmJiBuID4gdGhpc1tCVUZGRVJMRU5HVEhdKSkge1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgbiA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUl0ubGVuZ3RoID4gMSAmJiAhdGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgLy8gbm90IG9iamVjdCBtb2RlLCBzbyBpZiB3ZSBoYXZlIGFuIGVuY29kaW5nLCB0aGVuIFJUeXBlIGlzIHN0cmluZ1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBtdXN0IGJlIEJ1ZmZlclxuICAgICAgICAgICAgdGhpc1tCVUZGRVJdID0gW1xuICAgICAgICAgICAgICAgICh0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXNbQlVGRkVSXS5qb2luKCcnKVxuICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5jb25jYXQodGhpc1tCVUZGRVJdLCB0aGlzW0JVRkZFUkxFTkdUSF0pKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gdGhpc1tSRUFEXShuIHx8IG51bGwsIHRoaXNbQlVGRkVSXVswXSk7XG4gICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIFtSRUFEXShuLCBjaHVuaykge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSU0hJRlRdKCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYyA9IGNodW5rO1xuICAgICAgICAgICAgaWYgKG4gPT09IGMubGVuZ3RoIHx8IG4gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJTSElGVF0oKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSXVswXSA9IGMuc2xpY2Uobik7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBjLnNsaWNlKDAsIG4pO1xuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSAtPSBuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJdWzBdID0gYy5zdWJhcnJheShuKTtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGMuc3ViYXJyYXkoMCwgbik7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IG47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICBpZiAoIXRoaXNbQlVGRkVSXS5sZW5ndGggJiYgIXRoaXNbRU9GXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgICAgICAgcmV0dXJuIGNodW5rO1xuICAgIH1cbiAgICBlbmQoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGNodW5rO1xuICAgICAgICAgICAgY2h1bmsgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2IgPSBlbmNvZGluZztcbiAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0ZjgnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaHVuayAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy53cml0ZShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIGNiKTtcbiAgICAgICAgdGhpc1tFT0ZdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IHdyaXR0ZW4gYW55dGhpbmcsIHRoZW4gZ28gYWhlYWQgYW5kIGVtaXQsXG4gICAgICAgIC8vIGV2ZW4gaWYgd2UncmUgbm90IHJlYWRpbmcuXG4gICAgICAgIC8vIHdlJ2xsIHJlLWVtaXQgaWYgYSBuZXcgJ2VuZCcgbGlzdGVuZXIgaXMgYWRkZWQgYW55d2F5LlxuICAgICAgICAvLyBUaGlzIG1ha2VzIE1QIG1vcmUgc3VpdGFibGUgdG8gd3JpdGUtb25seSB1c2UgY2FzZXMuXG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddIHx8ICF0aGlzW1BBVVNFRF0pXG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZG9uJ3QgbGV0IHRoZSBpbnRlcm5hbCByZXN1bWUgYmUgb3ZlcndyaXR0ZW5cbiAgICBbUkVTVU1FXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzW0RBVEFMSVNURU5FUlNdICYmICF0aGlzW1BJUEVTXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tQQVVTRURdID0gZmFsc2U7XG4gICAgICAgIHRoaXNbRkxPV0lOR10gPSB0cnVlO1xuICAgICAgICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJdLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXNbRkxVU0hdKCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzdW1lIHRoZSBzdHJlYW0gaWYgaXQgaXMgY3VycmVudGx5IGluIGEgcGF1c2VkIHN0YXRlXG4gICAgICpcbiAgICAgKiBJZiBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMgb3IgYGRhdGFgIGV2ZW50IGxpc3RlbmVycyxcbiAgICAgKiB0aGlzIHdpbGwgcGxhY2UgdGhlIHN0cmVhbSBpbiBhIFwiZGlzY2FyZGVkXCIgc3RhdGUsIHdoZXJlIGFsbCBkYXRhIHdpbGxcbiAgICAgKiBiZSB0aHJvd24gYXdheS4gVGhlIGRpc2NhcmRlZCBzdGF0ZSBpcyByZW1vdmVkIGlmIGEgcGlwZSBkZXN0aW5hdGlvbiBvclxuICAgICAqIGRhdGEgaGFuZGxlciBpcyBhZGRlZCwgaWYgcGF1c2UoKSBpcyBjYWxsZWQsIG9yIGlmIGFueSBzeW5jaHJvbm91cyBvclxuICAgICAqIGFzeW5jaHJvbm91cyBpdGVyYXRpb24gaXMgc3RhcnRlZC5cbiAgICAgKi9cbiAgICByZXN1bWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW1JFU1VNRV0oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGF1c2UgdGhlIHN0cmVhbVxuICAgICAqL1xuICAgIHBhdXNlKCkge1xuICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgIHRoaXNbUEFVU0VEXSA9IHRydWU7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaGFzIGJlZW4gZm9yY2libHkgZGVzdHJveWVkXG4gICAgICovXG4gICAgZ2V0IGRlc3Ryb3llZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbREVTVFJPWUVEXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGlzIGN1cnJlbnRseSBpbiBhIGZsb3dpbmcgc3RhdGUsIG1lYW5pbmcgdGhhdFxuICAgICAqIGFueSB3cml0ZXMgd2lsbCBiZSBpbW1lZGlhdGVseSBlbWl0dGVkLlxuICAgICAqL1xuICAgIGdldCBmbG93aW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGlzIGN1cnJlbnRseSBpbiBhIHBhdXNlZCBzdGF0ZVxuICAgICAqL1xuICAgIGdldCBwYXVzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW1BBVVNFRF07XG4gICAgfVxuICAgIFtCVUZGRVJQVVNIXShjaHVuaykge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSArPSAxO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICB0aGlzW0JVRkZFUl0ucHVzaChjaHVuayk7XG4gICAgfVxuICAgIFtCVUZGRVJTSElGVF0oKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSAtPSB0aGlzW0JVRkZFUl1bMF0ubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpc1tCVUZGRVJdLnNoaWZ0KCk7XG4gICAgfVxuICAgIFtGTFVTSF0obm9EcmFpbiA9IGZhbHNlKSB7XG4gICAgICAgIGRvIHsgfSB3aGlsZSAodGhpc1tGTFVTSENIVU5LXSh0aGlzW0JVRkZFUlNISUZUXSgpKSAmJlxuICAgICAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCk7XG4gICAgICAgIGlmICghbm9EcmFpbiAmJiAhdGhpc1tCVUZGRVJdLmxlbmd0aCAmJiAhdGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgIH1cbiAgICBbRkxVU0hDSFVOS10oY2h1bmspIHtcbiAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGlwZSBhbGwgZGF0YSBlbWl0dGVkIGJ5IHRoaXMgc3RyZWFtIGludG8gdGhlIGRlc3RpbmF0aW9uIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogVHJpZ2dlcnMgdGhlIGZsb3cgb2YgZGF0YS5cbiAgICAgKi9cbiAgICBwaXBlKGRlc3QsIG9wdHMpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZW5kZWQgPSB0aGlzW0VNSVRURURfRU5EXTtcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIGlmIChkZXN0ID09PSBwcm9jLnN0ZG91dCB8fCBkZXN0ID09PSBwcm9jLnN0ZGVycilcbiAgICAgICAgICAgIG9wdHMuZW5kID0gZmFsc2U7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9wdHMuZW5kID0gb3B0cy5lbmQgIT09IGZhbHNlO1xuICAgICAgICBvcHRzLnByb3h5RXJyb3JzID0gISFvcHRzLnByb3h5RXJyb3JzO1xuICAgICAgICAvLyBwaXBpbmcgYW4gZW5kZWQgc3RyZWFtIGVuZHMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5lbmQpXG4gICAgICAgICAgICAgICAgZGVzdC5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFwiYXNcIiBoZXJlIGp1c3QgaWdub3JlcyB0aGUgV1R5cGUsIHdoaWNoIHBpcGVzIGRvbid0IGNhcmUgYWJvdXQsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGV5J3JlIG9ubHkgY29uc3VtaW5nIGZyb20gdXMsIGFuZCB3cml0aW5nIHRvIHRoZSBkZXN0XG4gICAgICAgICAgICB0aGlzW1BJUEVTXS5wdXNoKCFvcHRzLnByb3h5RXJyb3JzXG4gICAgICAgICAgICAgICAgPyBuZXcgUGlwZSh0aGlzLCBkZXN0LCBvcHRzKVxuICAgICAgICAgICAgICAgIDogbmV3IFBpcGVQcm94eUVycm9ycyh0aGlzLCBkZXN0LCBvcHRzKSk7XG4gICAgICAgICAgICBpZiAodGhpc1tBU1lOQ10pXG4gICAgICAgICAgICAgICAgZGVmZXIoKCkgPT4gdGhpc1tSRVNVTUVdKCkpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbUkVTVU1FXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdWxseSB1bmhvb2sgYSBwaXBlZCBkZXN0aW5hdGlvbiBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZGVzdGluYXRpb24gc3RyZWFtIHdhcyB0aGUgb25seSBjb25zdW1lciBvZiB0aGlzIHN0cmVhbSAoaWUsXG4gICAgICogdGhlcmUgYXJlIG5vIG90aGVyIHBpcGVkIGRlc3RpbmF0aW9ucyBvciBgJ2RhdGEnYCBldmVudCBsaXN0ZW5lcnMpXG4gICAgICogdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICovXG4gICAgdW5waXBlKGRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXNbUElQRVNdLmZpbmQocCA9PiBwLmRlc3QgPT09IGRlc3QpO1xuICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgaWYgKHRoaXNbUElQRVNdLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbREFUQUxJU1RFTkVSU10gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW1BJUEVTXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbUElQRVNdLnNwbGljZSh0aGlzW1BJUEVTXS5pbmRleE9mKHApLCAxKTtcbiAgICAgICAgICAgIHAudW5waXBlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBNaW5pcGFzcyNvbn1cbiAgICAgKi9cbiAgICBhZGRMaXN0ZW5lcihldiwgaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vbihldiwgaGFuZGxlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5vbmAsIHdpdGggdGhlIGZvbGxvd2luZ1xuICAgICAqIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRvIHByZXZlbnQgZGF0YSBsb3NzIGFuZCB1bm5lY2Vzc2FyeSBoYW5nczpcbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGEgJ2RhdGEnIGV2ZW50IGhhbmRsZXIgd2lsbCB0cmlnZ2VyIHRoZSBmbG93IG9mIGRhdGFcbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGEgJ3JlYWRhYmxlJyBldmVudCBoYW5kbGVyIHdoZW4gdGhlcmUgaXMgZGF0YSB3YWl0aW5nIHRvIGJlIHJlYWRcbiAgICAgKiAgIHdpbGwgY2F1c2UgJ3JlYWRhYmxlJyB0byBiZSBlbWl0dGVkIGltbWVkaWF0ZWx5LlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYW4gJ2VuZGlzaCcgZXZlbnQgaGFuZGxlciAoJ2VuZCcsICdmaW5pc2gnLCBldGMuKSB3aGljaCBoYXNcbiAgICAgKiAgIGFscmVhZHkgcGFzc2VkIHdpbGwgY2F1c2UgdGhlIGV2ZW50IHRvIGJlIGVtaXR0ZWQgaW1tZWRpYXRlbHkgYW5kIGFsbFxuICAgICAqICAgaGFuZGxlcnMgcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGFuICdlcnJvcicgZXZlbnQgaGFuZGxlciBhZnRlciBhbiBlcnJvciBoYXMgYmVlbiBlbWl0dGVkIHdpbGxcbiAgICAgKiAgIGNhdXNlIHRoZSBldmVudCB0byBiZSByZS1lbWl0dGVkIGltbWVkaWF0ZWx5IHdpdGggdGhlIGVycm9yIHByZXZpb3VzbHlcbiAgICAgKiAgIHJhaXNlZC5cbiAgICAgKi9cbiAgICBvbihldiwgaGFuZGxlcikge1xuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5vbihldiwgaGFuZGxlcik7XG4gICAgICAgIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXNbREFUQUxJU1RFTkVSU10rKztcbiAgICAgICAgICAgIGlmICghdGhpc1tQSVBFU10ubGVuZ3RoICYmICF0aGlzW0ZMT1dJTkddKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tSRVNVTUVdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScgJiYgdGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKSB7XG4gICAgICAgICAgICBzdXBlci5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRW5kaXNoKGV2KSAmJiB0aGlzW0VNSVRURURfRU5EXSkge1xuICAgICAgICAgICAgc3VwZXIuZW1pdChldik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlcnJvcicgJiYgdGhpc1tFTUlUVEVEX0VSUk9SXSkge1xuICAgICAgICAgICAgY29uc3QgaCA9IGhhbmRsZXI7XG4gICAgICAgICAgICBpZiAodGhpc1tBU1lOQ10pXG4gICAgICAgICAgICAgICAgZGVmZXIoKCkgPT4gaC5jYWxsKHRoaXMsIHRoaXNbRU1JVFRFRF9FUlJPUl0pKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBoLmNhbGwodGhpcywgdGhpc1tFTUlUVEVEX0VSUk9SXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBNaW5pcGFzcyNvZmZ9XG4gICAgICovXG4gICAgcmVtb3ZlTGlzdGVuZXIoZXYsIGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2ZmKGV2LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLm9mZmBcbiAgICAgKlxuICAgICAqIElmIGEgJ2RhdGEnIGV2ZW50IGhhbmRsZXIgaXMgcmVtb3ZlZCwgYW5kIGl0IHdhcyB0aGUgbGFzdCBjb25zdW1lclxuICAgICAqIChpZSwgdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zIG9yIG90aGVyICdkYXRhJyBldmVudCBsaXN0ZW5lcnMpLFxuICAgICAqIHRoZW4gdGhlIGZsb3cgb2YgZGF0YSB3aWxsIHN0b3AgdW50aWwgdGhlcmUgaXMgYW5vdGhlciBjb25zdW1lciBvclxuICAgICAqIHtAbGluayBNaW5pcGFzcyNyZXN1bWV9IGlzIGV4cGxpY2l0bHkgY2FsbGVkLlxuICAgICAqL1xuICAgIG9mZihldiwgaGFuZGxlcikge1xuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5vZmYoZXYsIGhhbmRsZXIpO1xuICAgICAgICAvLyBpZiB3ZSBwcmV2aW91c2x5IGhhZCBsaXN0ZW5lcnMsIGFuZCBub3cgd2UgZG9uJ3QsIGFuZCB3ZSBkb24ndFxuICAgICAgICAvLyBoYXZlIGFueSBwaXBlcywgdGhlbiBzdG9wIHRoZSBmbG93LCB1bmxlc3MgaXQncyBiZWVuIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gcHV0IGluIGEgZGlzY2FyZGVkIGZsb3dpbmcgc3RhdGUgdmlhIHN0cmVhbS5yZXN1bWUoKS5cbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRoaXNbREFUQUxJU1RFTkVSU10gPSB0aGlzLmxpc3RlbmVycygnZGF0YScpLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzW0RBVEFMSVNURU5FUlNdID09PSAwICYmXG4gICAgICAgICAgICAgICAgIXRoaXNbRElTQ0FSREVEXSAmJlxuICAgICAgICAgICAgICAgICF0aGlzW1BJUEVTXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVyc2BcbiAgICAgKlxuICAgICAqIElmIGFsbCAnZGF0YScgZXZlbnQgaGFuZGxlcnMgYXJlIHJlbW92ZWQsIGFuZCB0aGV5IHdlcmUgdGhlIGxhc3QgY29uc3VtZXJcbiAgICAgKiAoaWUsIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyksIHRoZW4gdGhlIGZsb3cgb2YgZGF0YSB3aWxsIHN0b3BcbiAgICAgKiB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yIHtAbGluayBNaW5pcGFzcyNyZXN1bWV9IGlzIGV4cGxpY2l0bHlcbiAgICAgKiBjYWxsZWQuXG4gICAgICovXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzKGV2KSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXNbREFUQUxJU1RFTkVSU10gPSAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzW0RJU0NBUkRFRF0gJiYgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSAnZW5kJyBldmVudCBoYXMgYmVlbiBlbWl0dGVkXG4gICAgICovXG4gICAgZ2V0IGVtaXR0ZWRFbmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0VNSVRURURfRU5EXTtcbiAgICB9XG4gICAgW01BWUJFX0VNSVRfRU5EXSgpIHtcbiAgICAgICAgaWYgKCF0aGlzW0VNSVRUSU5HX0VORF0gJiZcbiAgICAgICAgICAgICF0aGlzW0VNSVRURURfRU5EXSAmJlxuICAgICAgICAgICAgIXRoaXNbREVTVFJPWUVEXSAmJlxuICAgICAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpc1tFT0ZdKSB7XG4gICAgICAgICAgICB0aGlzW0VNSVRUSU5HX0VORF0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncHJlZmluaXNoJyk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2ZpbmlzaCcpO1xuICAgICAgICAgICAgaWYgKHRoaXNbQ0xPU0VEXSlcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgICB0aGlzW0VNSVRUSU5HX0VORF0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIuZW1pdGAsIHdpdGggdGhlIGZvbGxvd2luZ1xuICAgICAqIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRvIHByZXZlbnQgZGF0YSBsb3NzIGFuZCB1bm5lY2Vzc2FyeSBoYW5nczpcbiAgICAgKlxuICAgICAqIElmIHRoZSBzdHJlYW0gaGFzIGJlZW4gZGVzdHJveWVkLCBhbmQgdGhlIGV2ZW50IGlzIHNvbWV0aGluZyBvdGhlclxuICAgICAqIHRoYW4gJ2Nsb3NlJyBvciAnZXJyb3InLCB0aGVuIGBmYWxzZWAgaXMgcmV0dXJuZWQgYW5kIG5vIGhhbmRsZXJzXG4gICAgICogYXJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZW5kJywgYW5kIGhhcyBhbHJlYWR5IGJlZW4gZW1pdHRlZCwgdGhlbiB0aGUgZXZlbnRcbiAgICAgKiBpcyBpZ25vcmVkLiBJZiB0aGUgc3RyZWFtIGlzIGluIGEgcGF1c2VkIG9yIG5vbi1mbG93aW5nIHN0YXRlLCB0aGVuXG4gICAgICogdGhlIGV2ZW50IHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgZGF0YSBmbG93IHJlc3VtZXMuIElmIHRoZSBzdHJlYW0gaXNcbiAgICAgKiBhc3luYywgdGhlbiBoYW5kbGVycyB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgbmV4dCB0aWNrIHJhdGhlciB0aGFuXG4gICAgICogaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2Nsb3NlJywgYW5kICdlbmQnIGhhcyBub3QgeWV0IGJlZW4gZW1pdHRlZCwgdGhlblxuICAgICAqIHRoZSBldmVudCB3aWxsIGJlIGRlZmVycmVkIHVudGlsIGFmdGVyICdlbmQnIGlzIGVtaXR0ZWQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2Vycm9yJywgYW5kIGFuIEFib3J0U2lnbmFsIHdhcyBwcm92aWRlZCBmb3IgdGhlIHN0cmVhbSxcbiAgICAgKiBhbmQgdGhlcmUgYXJlIG5vIGxpc3RlbmVycywgdGhlbiB0aGUgZXZlbnQgaXMgaWdub3JlZCwgbWF0Y2hpbmcgdGhlXG4gICAgICogYmVoYXZpb3Igb2Ygbm9kZSBjb3JlIHN0cmVhbXMgaW4gdGhlIHByZXNlbnNlIG9mIGFuIEFib3J0U2lnbmFsLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdmaW5pc2gnIG9yICdwcmVmaW5pc2gnLCB0aGVuIGFsbCBsaXN0ZW5lcnMgd2lsbCBiZVxuICAgICAqIHJlbW92ZWQgYWZ0ZXIgZW1pdHRpbmcgdGhlIGV2ZW50LCB0byBwcmV2ZW50IGRvdWJsZS1maXJpbmcuXG4gICAgICovXG4gICAgZW1pdChldiwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJnc1swXTtcbiAgICAgICAgLy8gZXJyb3IgYW5kIGNsb3NlIGFyZSBvbmx5IGV2ZW50cyBhbGxvd2VkIGFmdGVyIGNhbGxpbmcgZGVzdHJveSgpXG4gICAgICAgIGlmIChldiAhPT0gJ2Vycm9yJyAmJlxuICAgICAgICAgICAgZXYgIT09ICdjbG9zZScgJiZcbiAgICAgICAgICAgIGV2ICE9PSBERVNUUk9ZRUQgJiZcbiAgICAgICAgICAgIHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpc1tPQkpFQ1RNT0RFXSAmJiAhZGF0YVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IHRoaXNbQVNZTkNdXG4gICAgICAgICAgICAgICAgICAgID8gKGRlZmVyKCgpID0+IHRoaXNbRU1JVERBVEFdKGRhdGEpKSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzW0VNSVREQVRBXShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW0VNSVRFTkRdKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdjbG9zZScpIHtcbiAgICAgICAgICAgIHRoaXNbQ0xPU0VEXSA9IHRydWU7XG4gICAgICAgICAgICAvLyBkb24ndCBlbWl0IGNsb3NlIGJlZm9yZSAnZW5kJyBhbmQgJ2ZpbmlzaCdcbiAgICAgICAgICAgIGlmICghdGhpc1tFTUlUVEVEX0VORF0gJiYgIXRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KCdjbG9zZScpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Nsb3NlJyk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICB0aGlzW0VNSVRURURfRVJST1JdID0gZGF0YTtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoRVJST1IsIGRhdGEpO1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gIXRoaXNbU0lHTkFMXSB8fCB0aGlzLmxpc3RlbmVycygnZXJyb3InKS5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IHN1cGVyLmVtaXQoJ2Vycm9yJywgZGF0YSlcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdyZXN1bWUnKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KCdyZXN1bWUnKTtcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZmluaXNoJyB8fCBldiA9PT0gJ3ByZWZpbmlzaCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoZXYpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoZXYpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb21lIG90aGVyIHVua25vd24gZXZlbnRcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdChldiwgLi4uYXJncyk7XG4gICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIFtFTUlUREFUQV0oZGF0YSkge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgIGlmIChwLmRlc3Qud3JpdGUoZGF0YSkgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB0aGlzW0RJU0NBUkRFRF0gPyBmYWxzZSA6IHN1cGVyLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW0VNSVRFTkRdKCkge1xuICAgICAgICBpZiAodGhpc1tFTUlUVEVEX0VORF0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXNbRU1JVFRFRF9FTkRdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpc1tBU1lOQ11cbiAgICAgICAgICAgID8gKGRlZmVyKCgpID0+IHRoaXNbRU1JVEVORDJdKCkpLCB0cnVlKVxuICAgICAgICAgICAgOiB0aGlzW0VNSVRFTkQyXSgpO1xuICAgIH1cbiAgICBbRU1JVEVORDJdKCkge1xuICAgICAgICBpZiAodGhpc1tERUNPREVSXSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXNbREVDT0RFUl0uZW5kKCk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgICAgICAgICBwLmRlc3Qud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpc1tESVNDQVJERURdKVxuICAgICAgICAgICAgICAgICAgICBzdXBlci5lbWl0KCdkYXRhJywgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICBwLmVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ2VuZCcpO1xuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygnZW5kJyk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiBhbGwgZW1pdHRlZCBkYXRhIG9uY2VcbiAgICAgKiB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICovXG4gICAgYXN5bmMgY29sbGVjdCgpIHtcbiAgICAgICAgY29uc3QgYnVmID0gT2JqZWN0LmFzc2lnbihbXSwge1xuICAgICAgICAgICAgZGF0YUxlbmd0aDogMCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIGJ1Zi5kYXRhTGVuZ3RoID0gMDtcbiAgICAgICAgLy8gc2V0IHRoZSBwcm9taXNlIGZpcnN0LCBpbiBjYXNlIGFuIGVycm9yIGlzIHJhaXNlZFxuICAgICAgICAvLyBieSB0cmlnZ2VyaW5nIHRoZSBmbG93IGhlcmUuXG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnByb21pc2UoKTtcbiAgICAgICAgdGhpcy5vbignZGF0YScsIGMgPT4ge1xuICAgICAgICAgICAgYnVmLnB1c2goYyk7XG4gICAgICAgICAgICBpZiAoIXRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICAgICAgYnVmLmRhdGFMZW5ndGggKz0gYy5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBwO1xuICAgICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIGVtaXR0ZWQgZGF0YVxuICAgICAqIG9uY2UgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqXG4gICAgICogTm90IGFsbG93ZWQgb24gb2JqZWN0TW9kZSBzdHJlYW1zLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbmNhdCgpIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNvbmNhdCBpbiBvYmplY3RNb2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmID0gYXdhaXQgdGhpcy5jb2xsZWN0KCk7XG4gICAgICAgIHJldHVybiAodGhpc1tFTkNPRElOR11cbiAgICAgICAgICAgID8gYnVmLmpvaW4oJycpXG4gICAgICAgICAgICA6IEJ1ZmZlci5jb25jYXQoYnVmLCBidWYuZGF0YUxlbmd0aCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSB2b2lkIFByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKi9cbiAgICBhc3luYyBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbihERVNUUk9ZRUQsICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ3N0cmVhbSBkZXN0cm95ZWQnKSkpO1xuICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlciA9PiByZWplY3QoZXIpKTtcbiAgICAgICAgICAgIHRoaXMub24oJ2VuZCcsICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXMgYGZvciBhd2FpdCBvZmAgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyB3aWxsIGNvbnRpbnVlIGVtaXR0aW5nIGFsbCBjaHVua3MgdW50aWwgdGhlIHN0cmVhbSB0ZXJtaW5hdGVzLlxuICAgICAqL1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIHNldCB0aGlzIHVwIGZyb250LCBpbiBjYXNlIHRoZSBjb25zdW1lciBkb2Vzbid0IGNhbGwgbmV4dCgpXG4gICAgICAgIC8vIHJpZ2h0IGF3YXkuXG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzdG9wID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RvcHBlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICBpZiAocmVzICE9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJlcyB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AoKTtcbiAgICAgICAgICAgIGxldCByZXNvbHZlO1xuICAgICAgICAgICAgbGV0IHJlamVjdDtcbiAgICAgICAgICAgIGNvbnN0IG9uZXJyID0gKGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2RhdGEnLCBvbmRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZGF0YSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHZhbHVlLCBkb25lOiAhIXRoaXNbRU9GXSB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmVuZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZXJyb3InLCBvbmVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2RhdGEnLCBvbmRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25kZXN0cm95ID0gKCkgPT4gb25lcnIobmV3IEVycm9yKCdzdHJlYW0gZGVzdHJveWVkJykpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdCA9IHJlajtcbiAgICAgICAgICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZShERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2RhdGEnLCBvbmRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgdGhyb3c6IHN0b3AsXG4gICAgICAgICAgICByZXR1cm46IHN0b3AsXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMgYGZvciBvZmAgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGl0ZXJhdGlvbiB3aWxsIHRlcm1pbmF0ZSB3aGVuIHRoZSBpbnRlcm5hbCBidWZmZXIgcnVucyBvdXQsIGV2ZW5cbiAgICAgKiBpZiB0aGUgc3RyZWFtIGhhcyBub3QgeWV0IHRlcm1pbmF0ZWQuXG4gICAgICovXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIHNldCB0aGlzIHVwIGZyb250LCBpbiBjYXNlIHRoZSBjb25zdW1lciBkb2Vzbid0IGNhbGwgbmV4dCgpXG4gICAgICAgIC8vIHJpZ2h0IGF3YXkuXG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgICAgdGhpcy5vZmYoRVJST1IsIHN0b3ApO1xuICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBzdG9wKTtcbiAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBzdG9wKTtcbiAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBzdG9wKCkgOiB7IGRvbmU6IGZhbHNlLCB2YWx1ZSB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIHN0b3ApO1xuICAgICAgICB0aGlzLm9uY2UoRVJST1IsIHN0b3ApO1xuICAgICAgICB0aGlzLm9uY2UoREVTVFJPWUVELCBzdG9wKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBhIHN0cmVhbSwgcHJldmVudGluZyBpdCBmcm9tIGJlaW5nIHVzZWQgZm9yIGFueSBmdXJ0aGVyIHB1cnBvc2UuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgc3RyZWFtIGhhcyBhIGBjbG9zZSgpYCBtZXRob2QsIHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgb25cbiAgICAgKiBkZXN0cnVjdGlvbi5cbiAgICAgKlxuICAgICAqIEFmdGVyIGRlc3RydWN0aW9uLCBhbnkgYXR0ZW1wdCB0byB3cml0ZSBkYXRhLCByZWFkIGRhdGEsIG9yIGVtaXQgbW9zdFxuICAgICAqIGV2ZW50cyB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiBJZiBhbiBlcnJvciBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlbiBpdCB3aWxsIGJlIGVtaXR0ZWQgaW4gYW5cbiAgICAgKiAnZXJyb3InIGV2ZW50LlxuICAgICAqL1xuICAgIGRlc3Ryb3koZXIpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KERFU1RST1lFRCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzW0RFU1RST1lFRF0gPSB0cnVlO1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSB0cnVlO1xuICAgICAgICAvLyB0aHJvdyBhd2F5IGFsbCBidWZmZXJlZCBkYXRhLCBpdCdzIG5ldmVyIGNvbWluZyBvdXRcbiAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgICAgIGNvbnN0IHdjID0gdGhpcztcbiAgICAgICAgaWYgKHR5cGVvZiB3Yy5jbG9zZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgd2MuY2xvc2UoKTtcbiAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgLy8gaWYgbm8gZXJyb3IgdG8gZW1pdCwgc3RpbGwgcmVqZWN0IHBlbmRpbmcgcHJvbWlzZXNcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KERFU1RST1lFRCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIGlzU3RyZWFtfVxuICAgICAqXG4gICAgICogRm9ybWVyIGV4cG9ydCBsb2NhdGlvbiwgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQgaXNTdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLmlzU3RyZWFtO1xuICAgIH1cbn1cbmV4cG9ydHMuTWluaXBhc3MgPSBNaW5pcGFzcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGF0aFNjdXJyeSA9IGV4cG9ydHMuUGF0aCA9IGV4cG9ydHMuUGF0aFNjdXJyeURhcndpbiA9IGV4cG9ydHMuUGF0aFNjdXJyeVBvc2l4ID0gZXhwb3J0cy5QYXRoU2N1cnJ5V2luMzIgPSBleHBvcnRzLlBhdGhTY3VycnlCYXNlID0gZXhwb3J0cy5QYXRoUG9zaXggPSBleHBvcnRzLlBhdGhXaW4zMiA9IGV4cG9ydHMuUGF0aEJhc2UgPSBleHBvcnRzLkNoaWxkcmVuQ2FjaGUgPSBleHBvcnRzLlJlc29sdmVDYWNoZSA9IHZvaWQgMDtcbmNvbnN0IGxydV9jYWNoZV8xID0gcmVxdWlyZShcImxydS1jYWNoZVwiKTtcbmNvbnN0IG5vZGVfcGF0aF8xID0gcmVxdWlyZShcIm5vZGU6cGF0aFwiKTtcbmNvbnN0IG5vZGVfdXJsXzEgPSByZXF1aXJlKFwibm9kZTp1cmxcIik7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgYWN0dWFsRlMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6ZnNcIikpO1xuY29uc3QgcmVhbHBhdGhTeW5jID0gZnNfMS5yZWFscGF0aFN5bmMubmF0aXZlO1xuLy8gVE9ETzogdGVzdCBwZXJmIG9mIGZzL3Byb21pc2VzIHJlYWxwYXRoIHZzIHJlYWxwYXRoQ0IsXG4vLyBzaW5jZSB0aGUgcHJvbWlzZXMgb25lIHVzZXMgcmVhbHBhdGgubmF0aXZlXG5jb25zdCBwcm9taXNlc18xID0gcmVxdWlyZShcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG5jb25zdCBtaW5pcGFzc18xID0gcmVxdWlyZShcIm1pbmlwYXNzXCIpO1xuY29uc3QgZGVmYXVsdEZTID0ge1xuICAgIGxzdGF0U3luYzogZnNfMS5sc3RhdFN5bmMsXG4gICAgcmVhZGRpcjogZnNfMS5yZWFkZGlyLFxuICAgIHJlYWRkaXJTeW5jOiBmc18xLnJlYWRkaXJTeW5jLFxuICAgIHJlYWRsaW5rU3luYzogZnNfMS5yZWFkbGlua1N5bmMsXG4gICAgcmVhbHBhdGhTeW5jLFxuICAgIHByb21pc2VzOiB7XG4gICAgICAgIGxzdGF0OiBwcm9taXNlc18xLmxzdGF0LFxuICAgICAgICByZWFkZGlyOiBwcm9taXNlc18xLnJlYWRkaXIsXG4gICAgICAgIHJlYWRsaW5rOiBwcm9taXNlc18xLnJlYWRsaW5rLFxuICAgICAgICByZWFscGF0aDogcHJvbWlzZXNfMS5yZWFscGF0aCxcbiAgICB9LFxufTtcbi8vIGlmIHRoZXkganVzdCBnYXZlIHVzIHJlcXVpcmUoJ2ZzJykgdGhlbiB1c2Ugb3VyIGRlZmF1bHRcbmNvbnN0IGZzRnJvbU9wdGlvbiA9IChmc09wdGlvbikgPT4gIWZzT3B0aW9uIHx8IGZzT3B0aW9uID09PSBkZWZhdWx0RlMgfHwgZnNPcHRpb24gPT09IGFjdHVhbEZTID9cbiAgICBkZWZhdWx0RlNcbiAgICA6IHtcbiAgICAgICAgLi4uZGVmYXVsdEZTLFxuICAgICAgICAuLi5mc09wdGlvbixcbiAgICAgICAgcHJvbWlzZXM6IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRGUy5wcm9taXNlcyxcbiAgICAgICAgICAgIC4uLihmc09wdGlvbi5wcm9taXNlcyB8fCB7fSksXG4gICAgICAgIH0sXG4gICAgfTtcbi8vIHR1cm4gc29tZXRoaW5nIGxpa2UgLy8/L2M6LyBpbnRvIGM6XFxcbmNvbnN0IHVuY0RyaXZlUmVnZXhwID0gL15cXFxcXFxcXFxcP1xcXFwoW2Etel06KVxcXFw/JC9pO1xuY29uc3QgdW5jVG9Ecml2ZSA9IChyb290UGF0aCkgPT4gcm9vdFBhdGgucmVwbGFjZSgvXFwvL2csICdcXFxcJykucmVwbGFjZSh1bmNEcml2ZVJlZ2V4cCwgJyQxXFxcXCcpO1xuLy8gd2luZG93cyBwYXRocyBhcmUgc2VwYXJhdGVkIGJ5IGVpdGhlciAvIG9yIFxcXG5jb25zdCBlaXRoZXJTZXAgPSAvW1xcXFxcXC9dLztcbmNvbnN0IFVOS05PV04gPSAwOyAvLyBtYXkgbm90IGV2ZW4gZXhpc3QsIGZvciBhbGwgd2Uga25vd1xuY29uc3QgSUZJRk8gPSAwYjAwMDE7XG5jb25zdCBJRkNIUiA9IDBiMDAxMDtcbmNvbnN0IElGRElSID0gMGIwMTAwO1xuY29uc3QgSUZCTEsgPSAwYjAxMTA7XG5jb25zdCBJRlJFRyA9IDBiMTAwMDtcbmNvbnN0IElGTE5LID0gMGIxMDEwO1xuY29uc3QgSUZTT0NLID0gMGIxMTAwO1xuY29uc3QgSUZNVCA9IDBiMTExMTtcbi8vIG1hc2sgdG8gdW5zZXQgbG93IDQgYml0c1xuY29uc3QgSUZNVF9VTktOT1dOID0gfklGTVQ7XG4vLyBzZXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGNhbGxpbmcgcmVhZGRpcigpIGFuZCBnZXR0aW5nIGVudHJpZXMuXG5jb25zdCBSRUFERElSX0NBTExFRCA9IDBiMDAwMF8wMDAxXzAwMDA7XG4vLyBzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGxzdGF0KClcbmNvbnN0IExTVEFUX0NBTExFRCA9IDBiMDAwMF8wMDEwXzAwMDA7XG4vLyBzZXQgaWYgYW4gZW50cnkgKG9yIG9uZSBvZiBpdHMgcGFyZW50cykgaXMgZGVmaW5pdGVseSBub3QgYSBkaXJcbmNvbnN0IEVOT1RESVIgPSAwYjAwMDBfMDEwMF8wMDAwO1xuLy8gc2V0IGlmIGFuIGVudHJ5IChvciBvbmUgb2YgaXRzIHBhcmVudHMpIGRvZXMgbm90IGV4aXN0XG4vLyAoY2FuIGFsc28gYmUgc2V0IG9uIGxzdGF0IGVycm9ycyBsaWtlIEVBQ0NFUyBvciBFTkFNRVRPT0xPTkcpXG5jb25zdCBFTk9FTlQgPSAwYjAwMDBfMTAwMF8wMDAwO1xuLy8gY2Fubm90IGhhdmUgY2hpbGQgZW50cmllcyAtLSBhbHNvIHZlcmlmeSAmSUZNVCBpcyBlaXRoZXIgSUZESVIgb3IgSUZMTktcbi8vIHNldCBpZiB3ZSBmYWlsIHRvIHJlYWRsaW5rXG5jb25zdCBFTk9SRUFETElOSyA9IDBiMDAwMV8wMDAwXzAwMDA7XG4vLyBzZXQgaWYgd2Uga25vdyByZWFscGF0aCgpIHdpbGwgZmFpbFxuY29uc3QgRU5PUkVBTFBBVEggPSAwYjAwMTBfMDAwMF8wMDAwO1xuY29uc3QgRU5PQ0hJTEQgPSBFTk9URElSIHwgRU5PRU5UIHwgRU5PUkVBTFBBVEg7XG5jb25zdCBUWVBFTUFTSyA9IDBiMDAxMV8xMTExXzExMTE7XG5jb25zdCBlbnRUb1R5cGUgPSAocykgPT4gcy5pc0ZpbGUoKSA/IElGUkVHXG4gICAgOiBzLmlzRGlyZWN0b3J5KCkgPyBJRkRJUlxuICAgICAgICA6IHMuaXNTeW1ib2xpY0xpbmsoKSA/IElGTE5LXG4gICAgICAgICAgICA6IHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSA/IElGQ0hSXG4gICAgICAgICAgICAgICAgOiBzLmlzQmxvY2tEZXZpY2UoKSA/IElGQkxLXG4gICAgICAgICAgICAgICAgICAgIDogcy5pc1NvY2tldCgpID8gSUZTT0NLXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHMuaXNGSUZPKCkgPyBJRklGT1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVU5LTk9XTjtcbi8vIG5vcm1hbGl6ZSB1bmljb2RlIHBhdGggbmFtZXNcbmNvbnN0IG5vcm1hbGl6ZUNhY2hlID0gbmV3IE1hcCgpO1xuY29uc3Qgbm9ybWFsaXplID0gKHMpID0+IHtcbiAgICBjb25zdCBjID0gbm9ybWFsaXplQ2FjaGUuZ2V0KHMpO1xuICAgIGlmIChjKVxuICAgICAgICByZXR1cm4gYztcbiAgICBjb25zdCBuID0gcy5ub3JtYWxpemUoJ05GS0QnKTtcbiAgICBub3JtYWxpemVDYWNoZS5zZXQocywgbik7XG4gICAgcmV0dXJuIG47XG59O1xuY29uc3Qgbm9ybWFsaXplTm9jYXNlQ2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBub3JtYWxpemVOb2Nhc2UgPSAocykgPT4ge1xuICAgIGNvbnN0IGMgPSBub3JtYWxpemVOb2Nhc2VDYWNoZS5nZXQocyk7XG4gICAgaWYgKGMpXG4gICAgICAgIHJldHVybiBjO1xuICAgIGNvbnN0IG4gPSBub3JtYWxpemUocy50b0xvd2VyQ2FzZSgpKTtcbiAgICBub3JtYWxpemVOb2Nhc2VDYWNoZS5zZXQocywgbik7XG4gICAgcmV0dXJuIG47XG59O1xuLyoqXG4gKiBBbiBMUlVDYWNoZSBmb3Igc3RvcmluZyByZXNvbHZlZCBwYXRoIHN0cmluZ3Mgb3IgUGF0aCBvYmplY3RzLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFJlc29sdmVDYWNoZSBleHRlbmRzIGxydV9jYWNoZV8xLkxSVUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoeyBtYXg6IDI1NiB9KTtcbiAgICB9XG59XG5leHBvcnRzLlJlc29sdmVDYWNoZSA9IFJlc29sdmVDYWNoZTtcbi8vIEluIG9yZGVyIHRvIHByZXZlbnQgYmxvd2luZyBvdXQgdGhlIGpzIGhlYXAgYnkgYWxsb2NhdGluZyBodW5kcmVkcyBvZlxuLy8gdGhvdXNhbmRzIG9mIFBhdGggZW50cmllcyB3aGVuIHdhbGtpbmcgZXh0cmVtZWx5IGxhcmdlIHRyZWVzLCB0aGUgXCJjaGlsZHJlblwiXG4vLyBpbiB0aGlzIHRyZWUgYXJlIHJlcHJlc2VudGVkIGJ5IHN0b3JpbmcgYW4gYXJyYXkgb2YgUGF0aCBlbnRyaWVzIGluIGFuXG4vLyBMUlVDYWNoZSwgaW5kZXhlZCBieSB0aGUgcGFyZW50LiAgQXQgYW55IHRpbWUsIFBhdGguY2hpbGRyZW4oKSBtYXkgcmV0dXJuIGFuXG4vLyBlbXB0eSBhcnJheSwgaW5kaWNhdGluZyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dCBhbnkgb2YgaXRzIGNoaWxkcmVuLCBhbmRcbi8vIHRodXMgaGFzIHRvIHJlYnVpbGQgdGhhdCBjYWNoZS4gIFRoaXMgaXMgZmluZSwgaXQganVzdCBtZWFucyB0aGF0IHdlIGRvbid0XG4vLyBiZW5lZml0IGFzIG11Y2ggZnJvbSBoYXZpbmcgdGhlIGNhY2hlZCBlbnRyaWVzLCBidXQgaHVnZSBkaXJlY3Rvcnkgd2Fsa3Ncbi8vIGRvbid0IGJsb3cgb3V0IHRoZSBzdGFjaywgYW5kIHNtYWxsZXIgb25lcyBhcmUgc3RpbGwgYXMgZmFzdCBhcyBwb3NzaWJsZS5cbi8vXG4vL0l0IGRvZXMgaW1wb3NlIHNvbWUgY29tcGxleGl0eSB3aGVuIGJ1aWxkaW5nIHVwIHRoZSByZWFkZGlyIGRhdGEsIGJlY2F1c2Ugd2Vcbi8vbmVlZCB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZHJlbiBhcnJheSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aC5cbi8qKlxuICogYW4gTFJVQ2FjaGUgZm9yIHN0b3JpbmcgY2hpbGQgZW50cmllcy5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBDaGlsZHJlbkNhY2hlIGV4dGVuZHMgbHJ1X2NhY2hlXzEuTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKG1heFNpemUgPSAxNiAqIDEwMjQpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgICAgIC8vIHBhcmVudCArIGNoaWxkcmVuXG4gICAgICAgICAgICBzaXplQ2FsY3VsYXRpb246IGEgPT4gYS5sZW5ndGggKyAxLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkNoaWxkcmVuQ2FjaGUgPSBDaGlsZHJlbkNhY2hlO1xuY29uc3Qgc2V0QXNDd2QgPSBTeW1ib2woJ1BhdGhTY3Vycnkgc2V0QXNDd2QnKTtcbi8qKlxuICogUGF0aCBvYmplY3RzIGFyZSBzb3J0IG9mIGxpa2UgYSBzdXBlci1wb3dlcmVkXG4gKiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9mcy5odG1sI2NsYXNzLWZzZGlyZW50IGZzLkRpcmVudH1cbiAqXG4gKiBFYWNoIG9uZSByZXByZXNlbnRzIGEgc2luZ2xlIGZpbGVzeXN0ZW0gZW50cnkgb24gZGlzaywgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAqIGV4aXN0LiBJdCBpbmNsdWRlcyBtZXRob2RzIGZvciByZWFkaW5nIHZhcmlvdXMgdHlwZXMgb2YgaW5mb3JtYXRpb24gdmlhXG4gKiBsc3RhdCwgcmVhZGxpbmssIGFuZCByZWFkZGlyLCBhbmQgY2FjaGVzIGFsbCBpbmZvcm1hdGlvbiB0byB0aGUgZ3JlYXRlc3RcbiAqIGRlZ3JlZSBwb3NzaWJsZS5cbiAqXG4gKiBOb3RlIHRoYXQgZnMgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIG5vcm1hbGx5IHRocm93IHdpbGwgaW5zdGVhZCByZXR1cm4gYW5cbiAqIFwiZW1wdHlcIiB2YWx1ZS4gVGhpcyBpcyBpbiBvcmRlciB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBvdmVyaGVhZCBmcm9tIGVycm9yXG4gKiBzdGFjayB0cmFjZXMuXG4gKi9cbmNsYXNzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiB0aGUgYmFzZW5hbWUgb2YgdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiAqKkltcG9ydGFudCoqOiAqYWx3YXlzKiB0ZXN0IHRoZSBwYXRoIG5hbWUgYWdhaW5zdCBhbnkgdGVzdCBzdHJpbmdcbiAgICAgKiB1c2luZ3RoZSB7QGxpbmsgaXNOYW1lZH0gbWV0aG9kLCBhbmQgbm90IGJ5IGRpcmVjdGx5IGNvbXBhcmluZyB0aGlzXG4gICAgICogc3RyaW5nLiBPdGhlcndpc2UsIHVuaWNvZGUgcGF0aCBzdHJpbmdzIHRoYXQgdGhlIHN5c3RlbSBzZWVzIGFzIGlkZW50aWNhbFxuICAgICAqIHdpbGwgbm90IGJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdGhlIHNhbWUgcGF0aCwgbGVhZGluZyB0byBpbmNvcnJlY3RcbiAgICAgKiBiZWhhdmlvciBhbmQgcG9zc2libGUgc2VjdXJpdHkgaXNzdWVzLlxuICAgICAqL1xuICAgIG5hbWU7XG4gICAgLyoqXG4gICAgICogdGhlIFBhdGggZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgcGF0aCByb290LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcm9vdDtcbiAgICAvKipcbiAgICAgKiBBbGwgcm9vdHMgZm91bmQgd2l0aGluIHRoZSBjdXJyZW50IFBhdGhTY3VycnkgZmFtaWx5XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICByb290cztcbiAgICAvKipcbiAgICAgKiBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHBhdGgsIG9yIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiByb290IGVudHJpZXNcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcmVudDtcbiAgICAvKipcbiAgICAgKiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBwYXRocyBhcmUgY29tcGFyZWQgY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbm9jYXNlO1xuICAgIC8qKlxuICAgICAqIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMgcGF0aCBpcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAqIG9mIHRoZSBQYXRoU2N1cnJ5IGNvbGxlY3Rpb24gdGhhdCBjb250YWlucyBpdC5cbiAgICAgKi9cbiAgICBpc0NXRCA9IGZhbHNlO1xuICAgIC8vIHBvdGVudGlhbCBkZWZhdWx0IGZzIG92ZXJyaWRlXG4gICAgI2ZzO1xuICAgIC8vIFN0YXRzIGZpZWxkc1xuICAgICNkZXY7XG4gICAgZ2V0IGRldigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RldjtcbiAgICB9XG4gICAgI21vZGU7XG4gICAgZ2V0IG1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtb2RlO1xuICAgIH1cbiAgICAjbmxpbms7XG4gICAgZ2V0IG5saW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbmxpbms7XG4gICAgfVxuICAgICN1aWQ7XG4gICAgZ2V0IHVpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3VpZDtcbiAgICB9XG4gICAgI2dpZDtcbiAgICBnZXQgZ2lkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZ2lkO1xuICAgIH1cbiAgICAjcmRldjtcbiAgICBnZXQgcmRldigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JkZXY7XG4gICAgfVxuICAgICNibGtzaXplO1xuICAgIGdldCBibGtzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmxrc2l6ZTtcbiAgICB9XG4gICAgI2lubztcbiAgICBnZXQgaW5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jaW5vO1xuICAgIH1cbiAgICAjc2l6ZTtcbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NpemU7XG4gICAgfVxuICAgICNibG9ja3M7XG4gICAgZ2V0IGJsb2NrcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Jsb2NrcztcbiAgICB9XG4gICAgI2F0aW1lTXM7XG4gICAgZ2V0IGF0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhdGltZU1zO1xuICAgIH1cbiAgICAjbXRpbWVNcztcbiAgICBnZXQgbXRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI210aW1lTXM7XG4gICAgfVxuICAgICNjdGltZU1zO1xuICAgIGdldCBjdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3RpbWVNcztcbiAgICB9XG4gICAgI2JpcnRodGltZU1zO1xuICAgIGdldCBiaXJ0aHRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JpcnRodGltZU1zO1xuICAgIH1cbiAgICAjYXRpbWU7XG4gICAgZ2V0IGF0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYXRpbWU7XG4gICAgfVxuICAgICNtdGltZTtcbiAgICBnZXQgbXRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtdGltZTtcbiAgICB9XG4gICAgI2N0aW1lO1xuICAgIGdldCBjdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2N0aW1lO1xuICAgIH1cbiAgICAjYmlydGh0aW1lO1xuICAgIGdldCBiaXJ0aHRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNiaXJ0aHRpbWU7XG4gICAgfVxuICAgICNtYXRjaE5hbWU7XG4gICAgI2RlcHRoO1xuICAgICNmdWxscGF0aDtcbiAgICAjZnVsbHBhdGhQb3NpeDtcbiAgICAjcmVsYXRpdmU7XG4gICAgI3JlbGF0aXZlUG9zaXg7XG4gICAgI3R5cGU7XG4gICAgI2NoaWxkcmVuO1xuICAgICNsaW5rVGFyZ2V0O1xuICAgICNyZWFscGF0aDtcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIERpcmVudCBjbGFzcyBhcyBvZlxuICAgICAqIE5vZGUgdjIwLCB3aGVyZSBEaXJlbnRbJ3BhcmVudFBhdGgnXSByZWZlcnMgdG8gdGhlIHBhdGggb2YgdGhlXG4gICAgICogZGlyZWN0b3J5IHRoYXQgd2FzIHBhc3NlZCB0byByZWFkZGlyLiBGb3Igcm9vdCBlbnRyaWVzLCBpdCdzIHRoZSBwYXRoXG4gICAgICogdG8gdGhlIGVudHJ5IGl0c2VsZi5cbiAgICAgKi9cbiAgICBnZXQgcGFyZW50UGF0aCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudCB8fCB0aGlzKS5mdWxscGF0aCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXByZWNhdGVkIGFsaWFzIGZvciBEaXJlbnRbJ3BhcmVudFBhdGgnXSBTb21ld2hhdCBjb3VudGVyaW50dWl0aXZlbHksXG4gICAgICogdGhpcyBwcm9wZXJ0eSByZWZlcnMgdG8gdGhlICpwYXJlbnQqIHBhdGgsIG5vdCB0aGUgcGF0aCBvYmplY3QgaXRzZWxmLlxuICAgICAqL1xuICAgIGdldCBwYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRQYXRoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLiNtYXRjaE5hbWUgPSBub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UobmFtZSkgOiBub3JtYWxpemUobmFtZSk7XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0eXBlICYgVFlQRU1BU0s7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICB0aGlzLnJvb3RzID0gcm9vdHM7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3QgfHwgdGhpcztcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgdGhpcy4jZnVsbHBhdGggPSBvcHRzLmZ1bGxwYXRoO1xuICAgICAgICB0aGlzLiNyZWxhdGl2ZSA9IG9wdHMucmVsYXRpdmU7XG4gICAgICAgIHRoaXMuI3JlbGF0aXZlUG9zaXggPSBvcHRzLnJlbGF0aXZlUG9zaXg7XG4gICAgICAgIHRoaXMucGFyZW50ID0gb3B0cy5wYXJlbnQ7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy4jZnMgPSB0aGlzLnBhcmVudC4jZnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNmcyA9IGZzRnJvbU9wdGlvbihvcHRzLmZzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgUGF0aCBvYmplY3QgZnJvbSBpdHMgcm9vdC5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlLCBhIHBhdGggYXQgYC9mb28vYmFyYCB3b3VsZCBoYXZlIGEgZGVwdGggb2YgMi5cbiAgICAgKi9cbiAgICBkZXB0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2RlcHRoICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZGVwdGg7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2RlcHRoID0gMCk7XG4gICAgICAgIHJldHVybiAodGhpcy4jZGVwdGggPSB0aGlzLnBhcmVudC5kZXB0aCgpICsgMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuQ2FjaGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBQYXRoIG9iamVjdCByZWZlcmVuY2VkIGJ5IHRoZSBzdHJpbmcgcGF0aCwgcmVzb2x2ZWQgZnJvbSB0aGlzIFBhdGhcbiAgICAgKi9cbiAgICByZXNvbHZlKHBhdGgpIHtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290UGF0aCA9IHRoaXMuZ2V0Um9vdFN0cmluZyhwYXRoKTtcbiAgICAgICAgY29uc3QgZGlyID0gcGF0aC5zdWJzdHJpbmcocm9vdFBhdGgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZGlyUGFydHMgPSBkaXIuc3BsaXQodGhpcy5zcGxpdFNlcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJvb3RQYXRoID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Um9vdChyb290UGF0aCkuI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cylcbiAgICAgICAgICAgIDogdGhpcy4jcmVzb2x2ZVBhcnRzKGRpclBhcnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cykge1xuICAgICAgICBsZXQgcCA9IHRoaXM7XG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBkaXJQYXJ0cykge1xuICAgICAgICAgICAgcCA9IHAuY2hpbGQocGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCBjaGlsZHJlbiBQYXRoIG9iamVjdHMsIGlmIHN0aWxsIGF2YWlsYWJsZS4gIElmIHRoZXlcbiAgICAgKiBoYXZlIGZhbGxlbiBvdXQgb2YgdGhlIGNhY2hlLCB0aGVuIHJldHVybnMgYW4gZW1wdHkgYXJyYXksIGFuZCByZXNldHMgdGhlXG4gICAgICogUkVBRERJUl9DQUxMRUQgYml0LCBzbyB0aGF0IGZ1dHVyZSBjYWxscyB0byByZWFkZGlyKCkgd2lsbCByZXF1aXJlIGFuIGZzXG4gICAgICogbG9va3VwLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW4oKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI2NoaWxkcmVuLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5hc3NpZ24oW10sIHsgcHJvdmlzaW9uYWw6IDAgfSk7XG4gICAgICAgIHRoaXMuI2NoaWxkcmVuLnNldCh0aGlzLCBjaGlsZHJlbik7XG4gICAgICAgIHRoaXMuI3R5cGUgJj0gflJFQURESVJfQ0FMTEVEO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmVzIGEgcGF0aCBwb3J0aW9uIGFuZCByZXR1cm5zIG9yIGNyZWF0ZXMgdGhlIGNoaWxkIFBhdGguXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGB0aGlzYCBpZiBwYXRoUGFydCBpcyBgJydgIG9yIGAnLidgLCBvciBgcGFyZW50YCBpZiBwYXRoUGFydCBpc1xuICAgICAqIGAnLi4nYC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuICBJZiBgcGF0aFBhcnRgIGNvbnRhaW5zIGFueSBwYXRoXG4gICAgICogc2VwYXJhdG9ycywgaXQgd2lsbCBsZWFkIHRvIHVuc2FmZSB1bmRlZmluZWQgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBVc2UgYFBhdGgucmVzb2x2ZSgpYCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGQocGF0aFBhcnQsIG9wdHMpIHtcbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSAnJyB8fCBwYXRoUGFydCA9PT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCB8fCB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgdGhlIGNoaWxkXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5ub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UocGF0aFBhcnQpIDogbm9ybWFsaXplKHBhdGhQYXJ0KTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAocC4jbWF0Y2hOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlkbid0IGZpbmQgaXQsIGNyZWF0ZSBwcm92aXNpb25hbCBjaGlsZCwgc2luY2UgaXQgbWlnaHQgbm90XG4gICAgICAgIC8vIGFjdHVhbGx5IGV4aXN0LiAgSWYgd2Uga25vdyB0aGUgcGFyZW50IGlzbid0IGEgZGlyLCB0aGVuXG4gICAgICAgIC8vIGluIGZhY3QgaXQgQ0FOJ1QgZXhpc3QuXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnBhcmVudCA/IHRoaXMuc2VwIDogJyc7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy4jZnVsbHBhdGggPyB0aGlzLiNmdWxscGF0aCArIHMgKyBwYXRoUGFydCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcGNoaWxkID0gdGhpcy5uZXdDaGlsZChwYXRoUGFydCwgVU5LTk9XTiwge1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcyxcbiAgICAgICAgICAgIGZ1bGxwYXRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcGNoaWxkLiN0eXBlIHw9IEVOT0VOVDtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBoYXZlIHRvIHVwZGF0ZSBwcm92aXNpb25hbCwgYmVjYXVzZSBpZiB3ZSBoYXZlIHJlYWwgY2hpbGRyZW4sXG4gICAgICAgIC8vIHRoZW4gcHJvdmlzaW9uYWwgaXMgc2V0IHRvIGNoaWxkcmVuLmxlbmd0aCwgb3RoZXJ3aXNlIGEgbG93ZXIgbnVtYmVyXG4gICAgICAgIGNoaWxkcmVuLnB1c2gocGNoaWxkKTtcbiAgICAgICAgcmV0dXJuIHBjaGlsZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkLiBJZiBpdCBkb2VzIG5vdCBzaGFyZSBhbiBhbmNlc3RvciB3aXRoXG4gICAgICogdGhlIGN3ZCwgdGhlbiB0aGlzIGVuZHMgdXAgYmVpbmcgZXF1aXZhbGVudCB0byB0aGUgZnVsbHBhdGgoKVxuICAgICAqL1xuICAgIHJlbGF0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NXRClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHRoaXMuI3JlbGF0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWxhdGl2ZSA9IHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLnJlbGF0aXZlKCk7XG4gICAgICAgIHJldHVybiBwdiArICghcHYgfHwgIXAucGFyZW50ID8gJycgOiB0aGlzLnNlcCkgKyBuYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QsIHVzaW5nIC8gYXMgdGhlIHBhdGggc2VwYXJhdG9yLlxuICAgICAqIElmIGl0IGRvZXMgbm90IHNoYXJlIGFuIGFuY2VzdG9yIHdpdGhcbiAgICAgKiB0aGUgY3dkLCB0aGVuIHRoaXMgZW5kcyB1cCBiZWluZyBlcXVpdmFsZW50IHRvIHRoZSBmdWxscGF0aFBvc2l4KClcbiAgICAgKiBPbiBwb3NpeCBzeXN0ZW1zLCB0aGlzIGlzIGlkZW50aWNhbCB0byByZWxhdGl2ZSgpLlxuICAgICAqL1xuICAgIHJlbGF0aXZlUG9zaXgoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlcCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRpdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNDV0QpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0aGlzLiNyZWxhdGl2ZVBvc2l4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVsYXRpdmVQb3NpeDtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVsYXRpdmVQb3NpeCA9IHRoaXMuZnVsbHBhdGhQb3NpeCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAucmVsYXRpdmVQb3NpeCgpO1xuICAgICAgICByZXR1cm4gcHYgKyAoIXB2IHx8ICFwLnBhcmVudCA/ICcnIDogJy8nKSArIG5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBmdWxseSByZXNvbHZlZCBwYXRoIHN0cmluZyBmb3IgdGhpcyBQYXRoIGVudHJ5XG4gICAgICovXG4gICAgZnVsbHBhdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNmdWxscGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZnVsbHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGggPSB0aGlzLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBmcCA9IHB2ICsgKCFwLnBhcmVudCA/ICcnIDogdGhpcy5zZXApICsgbmFtZTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aCA9IGZwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT24gcGxhdGZvcm1zIG90aGVyIHRoYW4gd2luZG93cywgdGhpcyBpcyBpZGVudGljYWwgdG8gZnVsbHBhdGguXG4gICAgICpcbiAgICAgKiBPbiB3aW5kb3dzLCB0aGlzIGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIHRoZSBmb3J3YXJkLXNsYXNoIGZvcm0gb2YgdGhlXG4gICAgICogZnVsbCBVTkMgcGF0aC5cbiAgICAgKi9cbiAgICBmdWxscGF0aFBvc2l4KCkge1xuICAgICAgICBpZiAodGhpcy4jZnVsbHBhdGhQb3NpeCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2Z1bGxwYXRoUG9zaXg7XG4gICAgICAgIGlmICh0aGlzLnNlcCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gdGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuZnVsbHBhdGgoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgICAgICBpZiAoL15bYS16XTpcXC8vaS50ZXN0KHApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gYC8vPy8ke3B9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGNvbnN0IHBmcHAgPSBwLmZ1bGxwYXRoUG9zaXgoKTtcbiAgICAgICAgY29uc3QgZnBwID0gcGZwcCArICghcGZwcCB8fCAhcC5wYXJlbnQgPyAnJyA6ICcvJykgKyB0aGlzLm5hbWU7XG4gICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IGZwcCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIG9mIGFuIHVua25vd24gdHlwZT9cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB3ZSBtaWdodCBrbm93ICpzb21ldGhpbmcqIGFib3V0IGl0IGlmIHRoZXJlIGhhcyBiZWVuIGEgcHJldmlvdXNcbiAgICAgKiBmaWxlc3lzdGVtIG9wZXJhdGlvbiwgZm9yIGV4YW1wbGUgdGhhdCBpdCBkb2VzIG5vdCBleGlzdCwgb3IgaXMgbm90IGFcbiAgICAgKiBsaW5rLCBvciB3aGV0aGVyIGl0IGhhcyBjaGlsZCBlbnRyaWVzLlxuICAgICAqL1xuICAgIGlzVW5rbm93bigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IFVOS05PV047XG4gICAgfVxuICAgIGlzVHlwZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2BpcyR7dHlwZX1gXSgpO1xuICAgIH1cbiAgICBnZXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXNVbmtub3duKCkgPyAnVW5rbm93bidcbiAgICAgICAgICAgIDogdGhpcy5pc0RpcmVjdG9yeSgpID8gJ0RpcmVjdG9yeSdcbiAgICAgICAgICAgICAgICA6IHRoaXMuaXNGaWxlKCkgPyAnRmlsZSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzU3ltYm9saWNMaW5rKCkgPyAnU3ltYm9saWNMaW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzRklGTygpID8gJ0ZJRk8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgPyAnQ2hhcmFjdGVyRGV2aWNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNCbG9ja0RldmljZSgpID8gJ0Jsb2NrRGV2aWNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBjOCBpZ25vcmUgc3RhcnQgKi8gdGhpcy5pc1NvY2tldCgpID8gJ1NvY2tldCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdVbmtub3duJyk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIGEgcmVndWxhciBmaWxlP1xuICAgICAqL1xuICAgIGlzRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGUkVHO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgUGF0aCBhIGRpcmVjdG9yeT9cbiAgICAgKi9cbiAgICBpc0RpcmVjdG9yeSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGRElSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIGNoYXJhY3RlciBkZXZpY2U/XG4gICAgICovXG4gICAgaXNDaGFyYWN0ZXJEZXZpY2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRkNIUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBibG9jayBkZXZpY2U/XG4gICAgICovXG4gICAgaXNCbG9ja0RldmljZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGQkxLO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIEZJRk8gcGlwZT9cbiAgICAgKi9cbiAgICBpc0ZJRk8oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRklGTztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBzb2NrZXQ/XG4gICAgICovXG4gICAgaXNTb2NrZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRlNPQ0s7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgc3ltYm9saWMgbGluaz9cbiAgICAgKi9cbiAgICBpc1N5bWJvbGljTGluaygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZMTkspID09PSBJRkxOSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBlbnRyeSBpZiBpdCBoYXMgYmVlbiBzdWJqZWN0IG9mIGEgc3VjY2Vzc2Z1bCBsc3RhdCwgb3JcbiAgICAgKiB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIHNpbXBseVxuICAgICAqIG1lYW4gdGhhdCB3ZSBoYXZlbid0IGNhbGxlZCBsc3RhdCBvbiBpdC5cbiAgICAgKi9cbiAgICBsc3RhdENhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3R5cGUgJiBMU1RBVF9DQUxMRUQgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNhY2hlZCBsaW5rIHRhcmdldCBpZiB0aGUgZW50cnkgaGFzIGJlZW4gdGhlIHN1YmplY3Qgb2YgYVxuICAgICAqIHN1Y2Nlc3NmdWwgcmVhZGxpbmssIG9yIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWRsaW5rKCkgaGFzIGJlZW4gY2FsbGVkIGF0IHNvbWUgcG9pbnQuXG4gICAgICovXG4gICAgcmVhZGxpbmtDYWNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgcmVhbHBhdGggdGFyZ2V0IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGUgc3ViamVjdFxuICAgICAqIG9mIGEgc3VjY2Vzc2Z1bCByZWFscGF0aCwgb3IgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhbHBhdGgoKSBoYXMgYmVlbiBjYWxsZWQgYXQgc29tZSBwb2ludC5cbiAgICAgKi9cbiAgICByZWFscGF0aENhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgY2hpbGQgUGF0aCBlbnRyaWVzIGFycmF5IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGVcbiAgICAgKiBzdWJqZWN0IG9mIGEgc3VjY2Vzc2Z1bCByZWFkZGlyKCksIG9yIFtdIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIGVtcHR5IGFycmF5ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWRkaXIoKSBoYXMgYmVlbiBjYWxsZWQgcmVjZW50bHkgZW5vdWdoIHRvIHN0aWxsIGJlIHZhbGlkLlxuICAgICAqL1xuICAgIHJlYWRkaXJDYWNoZWQoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCdzIHdvcnRoIHRyeWluZyB0byByZWFkbGluay4gIEllLCB3ZSBkb24ndCAoeWV0KSBoYXZlXG4gICAgICogYW55IGluZGljYXRpb24gdGhhdCByZWFkbGluayB3aWxsIGRlZmluaXRlbHkgZmFpbC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhdGggaXMga25vd24gdG8gbm90IGJlIGEgc3ltbGluaywgaWYgYSBwcmV2aW91c1xuICAgICAqIHJlYWRsaW5rIGZhaWxlZCwgb3IgaWYgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LlxuICAgICAqL1xuICAgIGNhblJlYWRsaW5rKCkge1xuICAgICAgICBpZiAodGhpcy4jbGlua1RhcmdldClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBjYXNlcyB3aGVyZSBpdCBjYW5ub3QgcG9zc2libHkgc3VjY2VlZFxuICAgICAgICBjb25zdCBpZm10ID0gdGhpcy4jdHlwZSAmIElGTVQ7XG4gICAgICAgIHJldHVybiAhKChpZm10ICE9PSBVTktOT1dOICYmIGlmbXQgIT09IElGTE5LKSB8fFxuICAgICAgICAgICAgdGhpcy4jdHlwZSAmIEVOT1JFQURMSU5LIHx8XG4gICAgICAgICAgICB0aGlzLiN0eXBlICYgRU5PRU5UKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgcmVhZGRpciBoYXMgcHJldmlvdXNseSBiZWVuIHN1Y2Nlc3NmdWxseSBjYWxsZWQgb24gdGhpc1xuICAgICAqIHBhdGgsIGluZGljYXRpbmcgdGhhdCBjYWNoZWRSZWFkZGlyKCkgaXMgbGlrZWx5IHZhbGlkLlxuICAgICAqL1xuICAgIGNhbGxlZFJlYWRkaXIoKSB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLiN0eXBlICYgUkVBRERJUl9DQUxMRUQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhdGggaXMga25vd24gdG8gbm90IGV4aXN0LiBUaGF0IGlzLCBhIHByZXZpb3VzIGxzdGF0XG4gICAgICogb3IgcmVhZGRpciBmYWlsZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2Ugd2hlbiB0aGF0IHdvdWxkIGhhdmUgYmVlblxuICAgICAqIGV4cGVjdGVkLCBvciBhIHBhcmVudCBlbnRyeSB3YXMgbWFya2VkIGVpdGhlciBlbm9lbnQgb3IgZW5vdGRpci5cbiAgICAgKi9cbiAgICBpc0VOT0VOVCgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuI3R5cGUgJiBFTk9FTlQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aCBpcyBhIG1hdGNoIGZvciB0aGUgZ2l2ZW4gcGF0aCBuYW1lLiAgVGhpcyBoYW5kbGVzXG4gICAgICogY2FzZSBzZW5zaXRpdml0eSBhbmQgdW5pY29kZSBub3JtYWxpemF0aW9uLlxuICAgICAqXG4gICAgICogTm90ZTogZXZlbiBvbiBjYXNlLXNlbnNpdGl2ZSBzeXN0ZW1zLCBpdCBpcyAqKm5vdCoqIHNhZmUgdG8gdGVzdCB0aGVcbiAgICAgKiBlcXVhbGl0eSBvZiB0aGUgYC5uYW1lYCBwcm9wZXJ0eSB0byBkZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIHBhdGhuYW1lXG4gICAgICogbWF0Y2hlcywgZHVlIHRvIHVuaWNvZGUgbm9ybWFsaXphdGlvbiBtaXNtYXRjaGVzLlxuICAgICAqXG4gICAgICogQWx3YXlzIHVzZSB0aGlzIG1ldGhvZCBpbnN0ZWFkIG9mIHRlc3RpbmcgdGhlIGBwYXRoLm5hbWVgIHByb3BlcnR5XG4gICAgICogZGlyZWN0bHkuXG4gICAgICovXG4gICAgaXNOYW1lZChuKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ub2Nhc2UgP1xuICAgICAgICAgICAgdGhpcy4jbWF0Y2hOYW1lID09PSBub3JtYWxpemUobilcbiAgICAgICAgICAgIDogdGhpcy4jbWF0Y2hOYW1lID09PSBub3JtYWxpemVOb2Nhc2Uobik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGF0aCBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0IG9mIGEgc3ltYm9saWMgbGluay5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGlzIG5vdCBhIHN5bWJvbGljIGxpbmssIG9yIGlmIHRoZSByZWFkbGluayBjYWxsIGZhaWxzIGZvciBhbnlcbiAgICAgKiByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0IGlzIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dGRhdGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcmVhZGxpbmsoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRsaW5rKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIC8vIGFscmVhZHkgY292ZXJlZCBieSB0aGUgY2FuUmVhZGxpbmsgdGVzdCwgaGVyZSBmb3IgdHMgZ3J1bXBsZXNcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhZCA9IGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWRsaW5rKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGFyZ2V0ID0gKGF3YWl0IHRoaXMucGFyZW50LnJlYWxwYXRoKCkpPy5yZXNvbHZlKHJlYWQpO1xuICAgICAgICAgICAgaWYgKGxpbmtUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2xpbmtUYXJnZXQgPSBsaW5rVGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRsaW5rRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLnJlYWRsaW5rfVxuICAgICAqL1xuICAgIHJlYWRsaW5rU3luYygpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4jbGlua1RhcmdldDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGxpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgLy8gYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBjYW5SZWFkbGluayB0ZXN0LCBoZXJlIGZvciB0cyBncnVtcGxlc1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZWFkID0gdGhpcy4jZnMucmVhZGxpbmtTeW5jKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGFyZ2V0ID0gdGhpcy5wYXJlbnQucmVhbHBhdGhTeW5jKCk/LnJlc29sdmUocmVhZCk7XG4gICAgICAgICAgICBpZiAobGlua1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jbGlua1RhcmdldCA9IGxpbmtUYXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGxpbmtGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pIHtcbiAgICAgICAgLy8gc3VjY2VlZGVkLCBtYXJrIHJlYWRkaXIgY2FsbGVkIGJpdFxuICAgICAgICB0aGlzLiN0eXBlIHw9IFJFQURESVJfQ0FMTEVEO1xuICAgICAgICAvLyBtYXJrIGFsbCByZW1haW5pbmcgcHJvdmlzaW9uYWwgY2hpbGRyZW4gYXMgRU5PRU5UXG4gICAgICAgIGZvciAobGV0IHAgPSBjaGlsZHJlbi5wcm92aXNpb25hbDsgcCA8IGNoaWxkcmVuLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2hpbGRyZW5bcF07XG4gICAgICAgICAgICBpZiAoYylcbiAgICAgICAgICAgICAgICBjLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI21hcmtFTk9FTlQoKSB7XG4gICAgICAgIC8vIG1hcmsgYXMgVU5LTk9XTiBhbmQgRU5PRU5UXG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PRU5UKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLiN0eXBlID0gKHRoaXMuI3R5cGUgfCBFTk9FTlQpICYgSUZNVF9VTktOT1dOO1xuICAgICAgICB0aGlzLiNtYXJrQ2hpbGRyZW5FTk9FTlQoKTtcbiAgICB9XG4gICAgI21hcmtDaGlsZHJlbkVOT0VOVCgpIHtcbiAgICAgICAgLy8gYWxsIGNoaWxkcmVuIGFyZSBwcm92aXNpb25hbCBhbmQgZG8gbm90IGV4aXN0XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgcC4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNtYXJrRU5PUkVBTFBBVEgoKSB7XG4gICAgICAgIHRoaXMuI3R5cGUgfD0gRU5PUkVBTFBBVEg7XG4gICAgICAgIHRoaXMuI21hcmtFTk9URElSKCk7XG4gICAgfVxuICAgIC8vIHNhdmUgdGhlIGluZm9ybWF0aW9uIHdoZW4gd2Uga25vdyB0aGUgZW50cnkgaXMgbm90IGEgZGlyXG4gICAgI21hcmtFTk9URElSKCkge1xuICAgICAgICAvLyBlbnRyeSBpcyBub3QgYSBkaXJlY3RvcnksIHNvIGFueSBjaGlsZHJlbiBjYW4ndCBleGlzdC5cbiAgICAgICAgLy8gdGhpcyAqc2hvdWxkKiBiZSBpbXBvc3NpYmxlLCBzaW5jZSBhbnkgY2hpbGRyZW4gY3JlYXRlZFxuICAgICAgICAvLyBhZnRlciBpdCdzIGJlZW4gbWFya2VkIEVOT1RESVIgc2hvdWxkIGJlIG1hcmtlZCBFTk9FTlQsXG4gICAgICAgIC8vIHNvIGl0IHdvbid0IGV2ZW4gZ2V0IHRvIHRoaXMgcG9pbnQuXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy4jdHlwZSAmIEVOT1RESVIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGxldCB0ID0gdGhpcy4jdHlwZTtcbiAgICAgICAgLy8gdGhpcyBjb3VsZCBoYXBwZW4gaWYgd2Ugc3RhdCBhIGRpciwgdGhlbiBkZWxldGUgaXQsXG4gICAgICAgIC8vIHRoZW4gdHJ5IHRvIHJlYWQgaXQgb3Igb25lIG9mIGl0cyBjaGlsZHJlbi5cbiAgICAgICAgaWYgKCh0ICYgSUZNVCkgPT09IElGRElSKVxuICAgICAgICAgICAgdCAmPSBJRk1UX1VOS05PV047XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0IHwgRU5PVERJUjtcbiAgICAgICAgdGhpcy4jbWFya0NoaWxkcmVuRU5PRU5UKCk7XG4gICAgfVxuICAgICNyZWFkZGlyRmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgLy8gbWFya0VOT1RESVIgYW5kIG1hcmtFTk9FTlQgYWxzbyBzZXQgcHJvdmlzaW9uYWw9MFxuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInIHx8IGNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4oKS5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2xzdGF0RmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgLy8gV2luZG93cyBqdXN0IHJhaXNlcyBFTk9FTlQgaW4gdGhpcyBjYXNlLCBkaXNhYmxlIGZvciB3aW4gQ0lcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgICAgICAgIC8vIGFscmVhZHkga25vdyBpdCBoYXMgYSBwYXJlbnQgYnkgdGhpcyBwb2ludFxuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgcC4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGxpbmtGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICBsZXQgdGVyID0gdGhpcy4jdHlwZTtcbiAgICAgICAgdGVyIHw9IEVOT1JFQURMSU5LO1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpXG4gICAgICAgICAgICB0ZXIgfD0gRU5PRU5UO1xuICAgICAgICAvLyB3aW5kb3dzIGdldHMgYSB3ZWlyZCBlcnJvciB3aGVuIHlvdSB0cnkgdG8gcmVhZGxpbmsgYSBmaWxlXG4gICAgICAgIGlmIChjb2RlID09PSAnRUlOVkFMJyB8fCBjb2RlID09PSAnVU5LTk9XTicpIHtcbiAgICAgICAgICAgIC8vIGV4aXN0cywgYnV0IG5vdCBhIHN5bWxpbmssIHdlIGRvbid0IGtub3cgV0hBVCBpdCBpcywgc28gcmVtb3ZlXG4gICAgICAgICAgICAvLyBhbGwgSUZNVCBiaXRzLlxuICAgICAgICAgICAgdGVyICY9IElGTVRfVU5LTk9XTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiN0eXBlID0gdGVyO1xuICAgICAgICAvLyB3aW5kb3dzIGp1c3QgZ2V0cyBFTk9FTlQgaW4gdGhpcyBjYXNlLiAgV2UgZG8gY292ZXIgdGhlIGNhc2UsXG4gICAgICAgIC8vIGp1c3QgZGlzYWJsZWQgYmVjYXVzZSBpdCdzIGltcG9zc2libGUgb24gV2luZG93cyBDSVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJyAmJiB0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgI3JlYWRkaXJBZGRDaGlsZChlLCBjKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jcmVhZGRpck1heWJlUHJvbW90ZUNoaWxkKGUsIGMpIHx8XG4gICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkTmV3Q2hpbGQoZSwgYykpO1xuICAgIH1cbiAgICAjcmVhZGRpckFkZE5ld0NoaWxkKGUsIGMpIHtcbiAgICAgICAgLy8gYWxsb2MgbmV3IGVudHJ5IGF0IGhlYWQsIHNvIGl0J3MgbmV2ZXIgcHJvdmlzaW9uYWxcbiAgICAgICAgY29uc3QgdHlwZSA9IGVudFRvVHlwZShlKTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLm5ld0NoaWxkKGUubmFtZSwgdHlwZSwgeyBwYXJlbnQ6IHRoaXMgfSk7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBjaGlsZC4jdHlwZSAmIElGTVQ7XG4gICAgICAgIGlmIChpZm10ICE9PSBJRkRJUiAmJiBpZm10ICE9PSBJRkxOSyAmJiBpZm10ICE9PSBVTktOT1dOKSB7XG4gICAgICAgICAgICBjaGlsZC4jdHlwZSB8PSBFTk9URElSO1xuICAgICAgICB9XG4gICAgICAgIGMudW5zaGlmdChjaGlsZCk7XG4gICAgICAgIGMucHJvdmlzaW9uYWwrKztcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICAjcmVhZGRpck1heWJlUHJvbW90ZUNoaWxkKGUsIGMpIHtcbiAgICAgICAgZm9yIChsZXQgcCA9IGMucHJvdmlzaW9uYWw7IHAgPCBjLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwY2hpbGQgPSBjW3BdO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubm9jYXNlID8gbm9ybWFsaXplTm9jYXNlKGUubmFtZSkgOiBub3JtYWxpemUoZS5uYW1lKTtcbiAgICAgICAgICAgIGlmIChuYW1lICE9PSBwY2hpbGQuI21hdGNoTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWRkaXJQcm9tb3RlQ2hpbGQoZSwgcGNoaWxkLCBwLCBjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGRpclByb21vdGVDaGlsZChlLCBwLCBpbmRleCwgYykge1xuICAgICAgICBjb25zdCB2ID0gcC5uYW1lO1xuICAgICAgICAvLyByZXRhaW4gYW55IG90aGVyIGZsYWdzLCBidXQgc2V0IGlmbXQgZnJvbSBkaXJlbnRcbiAgICAgICAgcC4jdHlwZSA9IChwLiN0eXBlICYgSUZNVF9VTktOT1dOKSB8IGVudFRvVHlwZShlKTtcbiAgICAgICAgLy8gY2FzZSBzZW5zaXRpdml0eSBmaXhpbmcgd2hlbiB3ZSBsZWFybiB0aGUgdHJ1ZSBuYW1lLlxuICAgICAgICBpZiAodiAhPT0gZS5uYW1lKVxuICAgICAgICAgICAgcC5uYW1lID0gZS5uYW1lO1xuICAgICAgICAvLyBqdXN0IGFkdmFuY2UgcHJvdmlzaW9uYWwgaW5kZXggKHBvdGVudGlhbGx5IG9mZiB0aGUgbGlzdCksXG4gICAgICAgIC8vIG90aGVyd2lzZSB3ZSBoYXZlIHRvIHNwbGljZS9wb3AgaXQgb3V0IGFuZCByZS1pbnNlcnQgYXQgaGVhZFxuICAgICAgICBpZiAoaW5kZXggIT09IGMucHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gYy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgIGMucG9wKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgYy51bnNoaWZ0KHApO1xuICAgICAgICB9XG4gICAgICAgIGMucHJvdmlzaW9uYWwrKztcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgbHN0YXQoKSBvbiB0aGlzIFBhdGgsIGFuZCB1cGRhdGUgYWxsIGtub3duIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlXG4gICAgICogZGV0ZXJtaW5lZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1bmxpa2UgYGZzLmxzdGF0KClgLCB0aGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBzb21lXG4gICAgICogaW5mb3JtYXRpb24sIHN1Y2ggYXMgYG1vZGVgLCBgZGV2YCwgYG5saW5rYCwgYW5kIGBpbm9gLiAgSWYgdGhhdFxuICAgICAqIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGNhbGwgYGZzLmxzdGF0YCB5b3Vyc2VsZi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIG9yIGlmIHRoZSBsc3RhdCBjYWxsIGZhaWxzIGZvclxuICAgICAqIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSB1cGRhdGVkIFBhdGggb2JqZWN0IGlzXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgbHN0YXQoKSB7XG4gICAgICAgIGlmICgodGhpcy4jdHlwZSAmIEVOT0VOVCkgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXBwbHlTdGF0KGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLmxzdGF0KHRoaXMuZnVsbHBhdGgoKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbHN0YXRGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5sc3RhdH1cbiAgICAgKi9cbiAgICBsc3RhdFN5bmMoKSB7XG4gICAgICAgIGlmICgodGhpcy4jdHlwZSAmIEVOT0VOVCkgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXBwbHlTdGF0KHRoaXMuI2ZzLmxzdGF0U3luYyh0aGlzLmZ1bGxwYXRoKCkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2xzdGF0RmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAjYXBwbHlTdGF0KHN0KSB7XG4gICAgICAgIGNvbnN0IHsgYXRpbWUsIGF0aW1lTXMsIGJpcnRodGltZSwgYmlydGh0aW1lTXMsIGJsa3NpemUsIGJsb2NrcywgY3RpbWUsIGN0aW1lTXMsIGRldiwgZ2lkLCBpbm8sIG1vZGUsIG10aW1lLCBtdGltZU1zLCBubGluaywgcmRldiwgc2l6ZSwgdWlkLCB9ID0gc3Q7XG4gICAgICAgIHRoaXMuI2F0aW1lID0gYXRpbWU7XG4gICAgICAgIHRoaXMuI2F0aW1lTXMgPSBhdGltZU1zO1xuICAgICAgICB0aGlzLiNiaXJ0aHRpbWUgPSBiaXJ0aHRpbWU7XG4gICAgICAgIHRoaXMuI2JpcnRodGltZU1zID0gYmlydGh0aW1lTXM7XG4gICAgICAgIHRoaXMuI2Jsa3NpemUgPSBibGtzaXplO1xuICAgICAgICB0aGlzLiNibG9ja3MgPSBibG9ja3M7XG4gICAgICAgIHRoaXMuI2N0aW1lID0gY3RpbWU7XG4gICAgICAgIHRoaXMuI2N0aW1lTXMgPSBjdGltZU1zO1xuICAgICAgICB0aGlzLiNkZXYgPSBkZXY7XG4gICAgICAgIHRoaXMuI2dpZCA9IGdpZDtcbiAgICAgICAgdGhpcy4jaW5vID0gaW5vO1xuICAgICAgICB0aGlzLiNtb2RlID0gbW9kZTtcbiAgICAgICAgdGhpcy4jbXRpbWUgPSBtdGltZTtcbiAgICAgICAgdGhpcy4jbXRpbWVNcyA9IG10aW1lTXM7XG4gICAgICAgIHRoaXMuI25saW5rID0gbmxpbms7XG4gICAgICAgIHRoaXMuI3JkZXYgPSByZGV2O1xuICAgICAgICB0aGlzLiNzaXplID0gc2l6ZTtcbiAgICAgICAgdGhpcy4jdWlkID0gdWlkO1xuICAgICAgICBjb25zdCBpZm10ID0gZW50VG9UeXBlKHN0KTtcbiAgICAgICAgLy8gcmV0YWluIGFueSBvdGhlciBmbGFncywgYnV0IHNldCB0aGUgaWZtdFxuICAgICAgICB0aGlzLiN0eXBlID0gKHRoaXMuI3R5cGUgJiBJRk1UX1VOS05PV04pIHwgaWZtdCB8IExTVEFUX0NBTExFRDtcbiAgICAgICAgaWYgKGlmbXQgIT09IFVOS05PV04gJiYgaWZtdCAhPT0gSUZESVIgJiYgaWZtdCAhPT0gSUZMTkspIHtcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgfD0gRU5PVERJUjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjb25SZWFkZGlyQ0IgPSBbXTtcbiAgICAjcmVhZGRpckNCSW5GbGlnaHQgPSBmYWxzZTtcbiAgICAjY2FsbE9uUmVhZGRpckNCKGNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNicyA9IHRoaXMuI29uUmVhZGRpckNCLnNsaWNlKCk7XG4gICAgICAgIHRoaXMuI29uUmVhZGRpckNCLmxlbmd0aCA9IDA7XG4gICAgICAgIGNicy5mb3JFYWNoKGNiID0+IGNiKG51bGwsIGNoaWxkcmVuKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIG5vZGUtc3R5bGUgY2FsbGJhY2sgaW50ZXJmYWNlIHRvIGdldCBsaXN0IG9mIGRpcmVjdG9yeSBlbnRyaWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggY2Fubm90IG9yIGRvZXMgbm90IGNvbnRhaW4gYW55IGNoaWxkcmVuLCB0aGVuIGFuIGVtcHR5IGFycmF5XG4gICAgICogaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIChlciwgZW50cmllcykuICBOb3RlIHRoYXQgdGhlIGBlcmBcbiAgICAgKiBwYXJhbSBpcyBzb21ld2hhdCBleHRyYW5lb3VzLCBhcyBhbGwgcmVhZGRpcigpIGVycm9ycyBhcmUgaGFuZGxlZCBhbmRcbiAgICAgKiBzaW1wbHkgcmVzdWx0IGluIGFuIGVtcHR5IHNldCBvZiBlbnRyaWVzIGJlaW5nIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSBhbGxvd1phbGdvIEJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGltbWVkaWF0ZWx5IGtub3duIHJlc3VsdHMgc2hvdWxkXG4gICAgICogKm5vdCogYmUgZGVmZXJyZWQgd2l0aCBgcXVldWVNaWNyb3Rhc2tgLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBSZWxlYXNlXG4gICAgICogemFsZ28gYXQgeW91ciBwZXJpbCwgdGhlIGRhcmsgcG9ueSBsb3JkIGlzIGRldmlvdXMgYW5kIHVuZm9yZ2l2aW5nLlxuICAgICAqL1xuICAgIHJlYWRkaXJDQihjYiwgYWxsb3daYWxnbyA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd1phbGdvKVxuICAgICAgICAgICAgICAgIGNiKG51bGwsIFtdKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYihudWxsLCBbXSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBpZiAodGhpcy5jYWxsZWRSZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgICAgICAgICBpZiAoYWxsb3daYWxnbylcbiAgICAgICAgICAgICAgICBjYihudWxsLCBjKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYihudWxsLCBjKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB6YWxnbyBhdCB0aGlzIHBvaW50LlxuICAgICAgICB0aGlzLiNvblJlYWRkaXJDQi5wdXNoKGNiKTtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVhZGRpckNCSW5GbGlnaHQgPSB0cnVlO1xuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICB0aGlzLiNmcy5yZWFkZGlyKGZ1bGxwYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGFuIGVycm9yLCB3ZSBhbHdheXMgZ2V0IGVudHJpZXMuXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jY2FsbE9uUmVhZGRpckNCKGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAjYXN5bmNSZWFkZGlySW5GbGlnaHQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIGtub3duIGNoaWxkIGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBjYW5ub3Qgb3IgZG9lcyBub3QgY29udGFpbiBhbnkgY2hpbGRyZW4sIHRoZW4gYW4gZW1wdHkgYXJyYXlcbiAgICAgKiBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFkZGlyKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICBpZiAodGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBsZXQgcmVzb2x2ZSA9ICgpID0+IHsgfTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCA9IG5ldyBQcm9taXNlKHJlcyA9PiAocmVzb2x2ZSA9IHJlcykpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhZGRpcihmdWxscGF0aCwge1xuICAgICAgICAgICAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGRDaGlsZChlLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5yZWFkZGlyfVxuICAgICAqL1xuICAgIHJlYWRkaXJTeW5jKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHRoaXMuI2ZzLnJlYWRkaXJTeW5jKGZ1bGxwYXRoLCB7XG4gICAgICAgICAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIGNhblJlYWRkaXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PQ0hJTEQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBJRk1UICYgdGhpcy4jdHlwZTtcbiAgICAgICAgLy8gd2UgYWx3YXlzIHNldCBFTk9URElSIHdoZW4gc2V0dGluZyBJRk1ULCBzbyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCEoaWZtdCA9PT0gVU5LTk9XTiB8fCBpZm10ID09PSBJRkRJUiB8fCBpZm10ID09PSBJRkxOSykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSB7XG4gICAgICAgIHJldHVybiAoKHRoaXMuI3R5cGUgJiBJRkRJUikgPT09IElGRElSICYmXG4gICAgICAgICAgICAhKHRoaXMuI3R5cGUgJiBFTk9DSElMRCkgJiZcbiAgICAgICAgICAgICFkaXJzLmhhcyh0aGlzKSAmJlxuICAgICAgICAgICAgKCF3YWxrRmlsdGVyIHx8IHdhbGtGaWx0ZXIodGhpcykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBQYXRoIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHBhdGggYXMgcmVzb2x2ZWRcbiAgICAgKiBieSByZWFscGF0aCgzKS5cbiAgICAgKlxuICAgICAqIElmIHRoZSByZWFscGF0aCBjYWxsIGZhaWxzIGZvciBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdCBpcyBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXRkYXRlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtdXRhdGVkLlxuICAgICAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgYSBQYXRoIG9iamVjdC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFscGF0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWxwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgICAgICBpZiAoKEVOT1JFQUxQQVRIIHwgRU5PUkVBRExJTksgfCBFTk9FTlQpICYgdGhpcy4jdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWxwYXRoKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlYWxwYXRoID0gdGhpcy5yZXNvbHZlKHJwKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9SRUFMUEFUSCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN5bmNocm9ub3VzIHtAbGluayByZWFscGF0aH1cbiAgICAgKi9cbiAgICByZWFscGF0aFN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZWFscGF0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWFscGF0aDtcbiAgICAgICAgaWYgKChFTk9SRUFMUEFUSCB8IEVOT1JFQURMSU5LIHwgRU5PRU5UKSAmIHRoaXMuI3R5cGUpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSB0aGlzLiNmcy5yZWFscGF0aFN5bmModGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVhbHBhdGggPSB0aGlzLnJlc29sdmUocnApKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1JFQUxQQVRIKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIG1hcmsgdGhpcyBQYXRoIG9iamVjdCBhcyB0aGUgc2N1cnJ5IGN3ZCxcbiAgICAgKiBjYWxsZWQgYnkge0BsaW5rIFBhdGhTY3VycnkjY2hkaXJ9XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBbc2V0QXNDd2RdKG9sZEN3ZCkge1xuICAgICAgICBpZiAob2xkQ3dkID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBvbGRDd2QuaXNDV0QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0NXRCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSBuZXcgU2V0KFtdKTtcbiAgICAgICAgbGV0IHJwID0gW107XG4gICAgICAgIGxldCBwID0gdGhpcztcbiAgICAgICAgd2hpbGUgKHAgJiYgcC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNoYW5nZWQuYWRkKHApO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmUgPSBycC5qb2luKHRoaXMuc2VwKTtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlUG9zaXggPSBycC5qb2luKCcvJyk7XG4gICAgICAgICAgICBwID0gcC5wYXJlbnQ7XG4gICAgICAgICAgICBycC5wdXNoKCcuLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB1bi1tZW1vaXplIHBhcmVudHMgb2Ygb2xkIGN3ZFxuICAgICAgICBwID0gb2xkQ3dkO1xuICAgICAgICB3aGlsZSAocCAmJiBwLnBhcmVudCAmJiAhY2hhbmdlZC5oYXMocCkpIHtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmVQb3NpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHAgPSBwLnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuUGF0aEJhc2UgPSBQYXRoQmFzZTtcbi8qKlxuICogUGF0aCBjbGFzcyB1c2VkIG9uIHdpbjMyIHN5c3RlbXNcbiAqXG4gKiBVc2VzIGAnXFxcXCdgIGFzIHRoZSBwYXRoIHNlcGFyYXRvciBmb3IgcmV0dXJuZWQgcGF0aHMsIGVpdGhlciBgJ1xcXFwnYCBvciBgJy8nYFxuICogYXMgdGhlIHBhdGggc2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGhzLlxuICovXG5jbGFzcyBQYXRoV2luMzIgZXh0ZW5kcyBQYXRoQmFzZSB7XG4gICAgLyoqXG4gICAgICogU2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5ncy5cbiAgICAgKi9cbiAgICBzZXAgPSAnXFxcXCc7XG4gICAgLyoqXG4gICAgICogU2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGggc3RyaW5ncy5cbiAgICAgKi9cbiAgICBzcGxpdFNlcCA9IGVpdGhlclNlcDtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICBzdXBlcihuYW1lLCB0eXBlLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld0NoaWxkKG5hbWUsIHR5cGUgPSBVTktOT1dOLCBvcHRzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoV2luMzIobmFtZSwgdHlwZSwgdGhpcy5yb290LCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290U3RyaW5nKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVfcGF0aF8xLndpbjMyLnBhcnNlKHBhdGgpLnJvb3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3Qocm9vdFBhdGgpIHtcbiAgICAgICAgcm9vdFBhdGggPSB1bmNUb0RyaXZlKHJvb3RQYXRoLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICBpZiAocm9vdFBhdGggPT09IHRoaXMucm9vdC5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgICAgICB9XG4gICAgICAgIC8vIG9rLCBub3QgdGhhdCBvbmUsIGNoZWNrIGlmIGl0IG1hdGNoZXMgYW5vdGhlciB3ZSBrbm93IGFib3V0XG4gICAgICAgIGZvciAoY29uc3QgW2NvbXBhcmUsIHJvb3RdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucm9vdHMpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zYW1lUm9vdChyb290UGF0aCwgY29tcGFyZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMucm9vdHNbcm9vdFBhdGhdID0gcm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgICAgIHJldHVybiAodGhpcy5yb290c1tyb290UGF0aF0gPSBuZXcgUGF0aFNjdXJyeVdpbjMyKHJvb3RQYXRoLCB0aGlzKS5yb290KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgc2FtZVJvb3Qocm9vdFBhdGgsIGNvbXBhcmUgPSB0aGlzLnJvb3QubmFtZSkge1xuICAgICAgICAvLyB3aW5kb3dzIGNhbiAocmFyZWx5KSBoYXZlIGNhc2Utc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIGJ1dFxuICAgICAgICAvLyBVTkMgYW5kIGRyaXZlIGxldHRlcnMgYXJlIGFsd2F5cyBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgY2Fub25pY2FsbHlcbiAgICAgICAgLy8gcmVwcmVzZW50ZWQgdXBwZXJjYXNlLlxuICAgICAgICByb290UGF0aCA9IHJvb3RQYXRoXG4gICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXFxcXCcpXG4gICAgICAgICAgICAucmVwbGFjZSh1bmNEcml2ZVJlZ2V4cCwgJyQxXFxcXCcpO1xuICAgICAgICByZXR1cm4gcm9vdFBhdGggPT09IGNvbXBhcmU7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoV2luMzIgPSBQYXRoV2luMzI7XG4vKipcbiAqIFBhdGggY2xhc3MgdXNlZCBvbiBhbGwgcG9zaXggc3lzdGVtcy5cbiAqXG4gKiBVc2VzIGAnLydgIGFzIHRoZSBwYXRoIHNlcGFyYXRvci5cbiAqL1xuY2xhc3MgUGF0aFBvc2l4IGV4dGVuZHMgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgcGFyc2luZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzcGxpdFNlcCA9ICcvJztcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJy8nO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHR5cGUsIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdFN0cmluZyhwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/ICcvJyA6ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290KF9yb290UGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdDaGlsZChuYW1lLCB0eXBlID0gVU5LTk9XTiwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFBvc2l4KG5hbWUsIHR5cGUsIHRoaXMucm9vdCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCBvcHRzKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhQb3NpeCA9IFBhdGhQb3NpeDtcbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBQYXRoU2N1cnJ5IGNsYXNzZXMsIHByb3ZpZGluZyB0aGUgaW50ZXJmYWNlIGZvciBwYXRoXG4gKiByZXNvbHV0aW9uIGFuZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuXG4gKlxuICogVHlwaWNhbGx5LCB5b3Ugc2hvdWxkICpub3QqIGluc3RhbnRpYXRlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGJ1dCByYXRoZXIgb25lXG4gKiBvZiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY2xhc3Nlcywgb3IgdGhlIGV4cG9ydGVkIHtAbGluayBQYXRoU2N1cnJ5fSB3aGljaFxuICogZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKi9cbmNsYXNzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcm9vdCBQYXRoIGVudHJ5IGZvciB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGlzIFNjdXJyeVxuICAgICAqL1xuICAgIHJvb3Q7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmluZyBwYXRoIGZvciB0aGUgcm9vdCBvZiB0aGlzIFNjdXJyeSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgKi9cbiAgICByb290UGF0aDtcbiAgICAvKipcbiAgICAgKiBBIGNvbGxlY3Rpb24gb2YgYWxsIHJvb3RzIGVuY291bnRlcmVkLCByZWZlcmVuY2VkIGJ5IHJvb3RQYXRoXG4gICAgICovXG4gICAgcm9vdHM7XG4gICAgLyoqXG4gICAgICogVGhlIFBhdGggZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGlzIFBhdGhTY3VycnkncyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgICAqL1xuICAgIGN3ZDtcbiAgICAjcmVzb2x2ZUNhY2hlO1xuICAgICNyZXNvbHZlUG9zaXhDYWNoZTtcbiAgICAjY2hpbGRyZW47XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBwYXRoIGNvbXBhcmlzb25zIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRydWUgb24gRGFyd2luIGFuZCBXaW5kb3dzIHN5c3RlbXMsIGZhbHNlIGVsc2V3aGVyZS5cbiAgICAgKi9cbiAgICBub2Nhc2U7XG4gICAgI2ZzO1xuICAgIC8qKlxuICAgICAqIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG4gICAgICpcbiAgICAgKiBVc2UgUGF0aFNjdXJyeVdpbjMyLCBQYXRoU2N1cnJ5RGFyd2luLCBQYXRoU2N1cnJ5UG9zaXgsIG9yIFBhdGhTY3VycnlcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIHBhdGhJbXBsLCBzZXAsIHsgbm9jYXNlLCBjaGlsZHJlbkNhY2hlU2l6ZSA9IDE2ICogMTAyNCwgZnMgPSBkZWZhdWx0RlMsIH0gPSB7fSkge1xuICAgICAgICB0aGlzLiNmcyA9IGZzRnJvbU9wdGlvbihmcyk7XG4gICAgICAgIGlmIChjd2QgaW5zdGFuY2VvZiBVUkwgfHwgY3dkLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgY3dkID0gKDAsIG5vZGVfdXJsXzEuZmlsZVVSTFRvUGF0aCkoY3dkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvbHZlIGFuZCBzcGxpdCByb290LCBhbmQgdGhlbiBhZGQgdG8gdGhlIHN0b3JlLlxuICAgICAgICAvLyB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgY2FsbCBwYXRoLnJlc29sdmUoKVxuICAgICAgICBjb25zdCBjd2RQYXRoID0gcGF0aEltcGwucmVzb2x2ZShjd2QpO1xuICAgICAgICB0aGlzLnJvb3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5yb290UGF0aCA9IHRoaXMucGFyc2VSb290UGF0aChjd2RQYXRoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZUNhY2hlID0gbmV3IFJlc29sdmVDYWNoZSgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZSA9IG5ldyBSZXNvbHZlQ2FjaGUoKTtcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW5DYWNoZShjaGlsZHJlbkNhY2hlU2l6ZSk7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0gY3dkUGF0aC5zdWJzdHJpbmcodGhpcy5yb290UGF0aC5sZW5ndGgpLnNwbGl0KHNlcCk7XG4gICAgICAgIC8vIHJlc29sdmUoJy8nKSBsZWF2ZXMgJycsIHNwbGl0cyB0byBbJyddLCB3ZSBkb24ndCB3YW50IHRoYXQuXG4gICAgICAgIGlmIChzcGxpdC5sZW5ndGggPT09IDEgJiYgIXNwbGl0WzBdKSB7XG4gICAgICAgICAgICBzcGxpdC5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKG5vY2FzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHByb3ZpZGUgbm9jYXNlIHNldHRpbmcgdG8gUGF0aFNjdXJyeUJhc2UgY3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLm5ld1Jvb3QodGhpcy4jZnMpO1xuICAgICAgICB0aGlzLnJvb3RzW3RoaXMucm9vdFBhdGhdID0gdGhpcy5yb290O1xuICAgICAgICBsZXQgcHJldiA9IHRoaXMucm9vdDtcbiAgICAgICAgbGV0IGxlbiA9IHNwbGl0Lmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGpvaW5TZXAgPSBwYXRoSW1wbC5zZXA7XG4gICAgICAgIGxldCBhYnMgPSB0aGlzLnJvb3RQYXRoO1xuICAgICAgICBsZXQgc2F3Rmlyc3QgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHNwbGl0KSB7XG4gICAgICAgICAgICBjb25zdCBsID0gbGVuLS07XG4gICAgICAgICAgICBwcmV2ID0gcHJldi5jaGlsZChwYXJ0LCB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmU6IG5ldyBBcnJheShsKS5maWxsKCcuLicpLmpvaW4oam9pblNlcCksXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQb3NpeDogbmV3IEFycmF5KGwpLmZpbGwoJy4uJykuam9pbignLycpLFxuICAgICAgICAgICAgICAgIGZ1bGxwYXRoOiAoYWJzICs9IChzYXdGaXJzdCA/ICcnIDogam9pblNlcCkgKyBwYXJ0KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2F3Rmlyc3QgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3dkID0gcHJldjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBkZXB0aCBvZiBhIHByb3ZpZGVkIHBhdGgsIHN0cmluZywgb3IgdGhlIGN3ZFxuICAgICAqL1xuICAgIGRlcHRoKHBhdGggPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXRoID0gdGhpcy5jd2QucmVzb2x2ZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aC5kZXB0aCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNhY2hlIG9mIGNoaWxkIGVudHJpZXMuICBFeHBvc2VkIHNvIHN1YmNsYXNzZXMgY2FuIGNyZWF0ZVxuICAgICAqIGNoaWxkIFBhdGggb2JqZWN0cyBpbiBhIHBsYXRmb3JtLXNwZWNpZmljIHdheS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuQ2FjaGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBwYXRoIHN0cmluZ3MgdG8gYSByZXNvbHZlZCBzdHJpbmdcbiAgICAgKlxuICAgICAqIFNhbWUgaW50ZXJmYWNlIGFzIHJlcXVpcmUoJ3BhdGgnKS5yZXNvbHZlLlxuICAgICAqXG4gICAgICogTXVjaCBmYXN0ZXIgdGhhbiBwYXRoLnJlc29sdmUoKSB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAgKiBwYXRoLCBiZWNhdXNlIHRoZSByZXNvbHZlZCBQYXRoIG9iamVjdHMgYXJlIGNhY2hlZC4gIE11Y2ggc2xvd2VyXG4gICAgICogb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHJlc29sdmUoLi4ucGF0aHMpIHtcbiAgICAgICAgLy8gZmlyc3QgZmlndXJlIG91dCB0aGUgbWluaW11bSBudW1iZXIgb2YgcGF0aHMgd2UgaGF2ZSB0byB0ZXN0XG4gICAgICAgIC8vIHdlIGFsd2F5cyBzdGFydCBhdCBjd2QsIGJ1dCBhbnkgYWJzb2x1dGVzIHdpbGwgYnVtcCB0aGUgc3RhcnRcbiAgICAgICAgbGV0IHIgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcGF0aHNbaV07XG4gICAgICAgICAgICBpZiAoIXAgfHwgcCA9PT0gJy4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgciA9IHIgPyBgJHtwfS8ke3J9YCA6IHA7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKHApKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jcmVzb2x2ZUNhY2hlLmdldChyKTtcbiAgICAgICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3dkLnJlc29sdmUocikuZnVsbHBhdGgoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZUNhY2hlLnNldChyLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIG9uZSBvciBtb3JlIHBhdGggc3RyaW5ncyB0byBhIHJlc29sdmVkIHN0cmluZywgcmV0dXJuaW5nXG4gICAgICogdGhlIHBvc2l4IHBhdGguICBJZGVudGljYWwgdG8gLnJlc29sdmUoKSBvbiBwb3NpeCBzeXN0ZW1zLCBidXQgb25cbiAgICAgKiB3aW5kb3dzIHdpbGwgcmV0dXJuIGEgZm9yd2FyZC1zbGFzaCBzZXBhcmF0ZWQgVU5DIHBhdGguXG4gICAgICpcbiAgICAgKiBTYW1lIGludGVyZmFjZSBhcyByZXF1aXJlKCdwYXRoJykucmVzb2x2ZS5cbiAgICAgKlxuICAgICAqIE11Y2ggZmFzdGVyIHRoYW4gcGF0aC5yZXNvbHZlKCkgd2hlbiBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lXG4gICAgICogcGF0aCwgYmVjYXVzZSB0aGUgcmVzb2x2ZWQgUGF0aCBvYmplY3RzIGFyZSBjYWNoZWQuICBNdWNoIHNsb3dlclxuICAgICAqIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICByZXNvbHZlUG9zaXgoLi4ucGF0aHMpIHtcbiAgICAgICAgLy8gZmlyc3QgZmlndXJlIG91dCB0aGUgbWluaW11bSBudW1iZXIgb2YgcGF0aHMgd2UgaGF2ZSB0byB0ZXN0XG4gICAgICAgIC8vIHdlIGFsd2F5cyBzdGFydCBhdCBjd2QsIGJ1dCBhbnkgYWJzb2x1dGVzIHdpbGwgYnVtcCB0aGUgc3RhcnRcbiAgICAgICAgbGV0IHIgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcGF0aHNbaV07XG4gICAgICAgICAgICBpZiAoIXAgfHwgcCA9PT0gJy4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgciA9IHIgPyBgJHtwfS8ke3J9YCA6IHA7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKHApKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUuZ2V0KHIpO1xuICAgICAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jd2QucmVzb2x2ZShyKS5mdWxscGF0aFBvc2l4KCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlLnNldChyLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCB0byB0aGUgc3VwcGxpZWQgcGF0aCBzdHJpbmcgb3IgZW50cnlcbiAgICAgKi9cbiAgICByZWxhdGl2ZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5yZWxhdGl2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCB0byB0aGUgc3VwcGxpZWQgcGF0aCBzdHJpbmcgb3JcbiAgICAgKiBlbnRyeSwgdXNpbmcgLyBhcyB0aGUgcGF0aCBkZWxpbWl0ZXIsIGV2ZW4gb24gV2luZG93cy5cbiAgICAgKi9cbiAgICByZWxhdGl2ZVBvc2l4KGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LnJlbGF0aXZlUG9zaXgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBiYXNlbmFtZSBmb3IgdGhlIHByb3ZpZGVkIHN0cmluZyBvciBQYXRoIG9iamVjdFxuICAgICAqL1xuICAgIGJhc2VuYW1lKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5Lm5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgZGlybmFtZSBmb3IgdGhlIHByb3ZpZGVkIHN0cmluZyBvciBQYXRoIG9iamVjdFxuICAgICAqL1xuICAgIGRpcm5hbWUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGVudHJ5LnBhcmVudCB8fCBlbnRyeSkuZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZGRpcihlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZW50cnkuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwID0gYXdhaXQgZW50cnkucmVhZGRpcigpO1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBwIDogcC5tYXAoZSA9PiBlLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRkaXJTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZW50cnkuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2l0aEZpbGVUeXBlcykge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnJlYWRkaXJTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkucmVhZGRpclN5bmMoKS5tYXAoZSA9PiBlLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgbHN0YXQoKSBvbiB0aGUgc3RyaW5nIG9yIFBhdGggb2JqZWN0LCBhbmQgdXBkYXRlIGFsbCBrbm93blxuICAgICAqIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGRldGVybWluZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdW5saWtlIGBmcy5sc3RhdCgpYCwgdGhlIHJldHVybmVkIHZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc29tZVxuICAgICAqIGluZm9ybWF0aW9uLCBzdWNoIGFzIGBtb2RlYCwgYGRldmAsIGBubGlua2AsIGFuZCBgaW5vYC4gIElmIHRoYXRcbiAgICAgKiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCwgeW91IHdpbGwgbmVlZCB0byBjYWxsIGBmcy5sc3RhdGAgeW91cnNlbGYuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCByZWZlcnMgdG8gYSBub25leGlzdGVudCBmaWxlLCBvciBpZiB0aGUgbHN0YXQgY2FsbCBmYWlscyBmb3JcbiAgICAgKiBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSB0aGUgdXBkYXRlZCBQYXRoIG9iamVjdCBpc1xuICAgICAqIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGxzdGF0KGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LmxzdGF0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5sc3RhdH1cbiAgICAgKi9cbiAgICBsc3RhdFN5bmMoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubHN0YXRTeW5jKCk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWRsaW5rKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gYXdhaXQgZW50cnkucmVhZGxpbmsoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgcmVhZGxpbmtTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gZW50cnkucmVhZGxpbmtTeW5jKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWxwYXRoKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gYXdhaXQgZW50cnkucmVhbHBhdGgoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgcmVhbHBhdGhTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gZW50cnkucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIGFzeW5jIHdhbGsoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHdhbGsgPSAoZGlyLCBjYikgPT4ge1xuICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgIGRpci5yZWFkZGlyQ0IoKGVyLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYihlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgbGV0IGxlbiA9IGVudHJpZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICghbGVuKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoLS1sZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sbG93ICYmIGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5yZWFscGF0aCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ociA9PiAocj8uaXNVbmtub3duKCkgPyByLmxzdGF0KCkgOiByKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyID0+IHI/LnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikgPyB3YWxrKHIsIG5leHQpIDogbmV4dCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrKGUsIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSk7IC8vIHphbGdvb29vb29vXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZW50cnk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHdhbGsoc3RhcnQsIGVyID0+IHtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWooZXIpO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgcmVzKHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3YWxrU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoW2VudHJ5XSk7XG4gICAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByID0gZTtcbiAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoci5pc1Vua25vd24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlycy5hZGQocik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdXBwb3J0IGZvciBgZm9yIGF3YWl0YFxuICAgICAqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5pdGVyYXRlfVxuICAgICAqXG4gICAgICogTm90ZTogQXMgb2YgTm9kZSAxOSwgdGhpcyBpcyB2ZXJ5IHNsb3csIGNvbXBhcmVkIHRvIG90aGVyIG1ldGhvZHMgb2ZcbiAgICAgKiB3YWxraW5nLiAgQ29uc2lkZXIgdXNpbmcge0BsaW5rIFBhdGhTY3VycnlCYXNlLnN0cmVhbX0gaWYgbWVtb3J5IG92ZXJoZWFkXG4gICAgICogYW5kIGJhY2twcmVzc3VyZSBhcmUgY29uY2VybnMsIG9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS53YWxrfSBpZiBub3QuXG4gICAgICovXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZSgpO1xuICAgIH1cbiAgICBpdGVyYXRlKGVudHJ5ID0gdGhpcy5jd2QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBpdGVyYXRpbmcgYXN5bmMgb3ZlciB0aGUgc3RyZWFtIGlzIHNpZ25pZmljYW50bHkgbW9yZSBwZXJmb3JtYW50LFxuICAgICAgICAvLyBlc3BlY2lhbGx5IGluIHRoZSB3YXJtLWNhY2hlIHNjZW5hcmlvLCBiZWNhdXNlIGl0IGJ1ZmZlcnMgdXAgZGlyZWN0b3J5XG4gICAgICAgIC8vIGVudHJpZXMgaW4gdGhlIGJhY2tncm91bmQgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhIHlpZWxkIGZvciBlYWNoIG9uZS5cbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0oZW50cnksIG9wdGlvbnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJdGVyYXRpbmcgb3ZlciBhIFBhdGhTY3VycnkgcGVyZm9ybXMgYSBzeW5jaHJvbm91cyB3YWxrLlxuICAgICAqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5pdGVyYXRlU3luY31cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZVN5bmMoKTtcbiAgICB9XG4gICAgKml0ZXJhdGVTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICB5aWVsZCB3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KFtlbnRyeV0pO1xuICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyLnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJzLmFkZChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RyZWFtKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gbmV3IG1pbmlwYXNzXzEuTWluaXBhc3MoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW2VudHJ5XTtcbiAgICAgICAgbGV0IHByb2Nlc3NpbmcgPSAwO1xuICAgICAgICBjb25zdCBwcm9jZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKCFwYXVzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmICghZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nKys7XG4gICAgICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvblJlYWRkaXIgPSAoZXIsIGVudHJpZXMsIGRpZFJlYWxwYXRocyA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGxvdyAmJiAhZGlkUmVhbHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlYWxwYXRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyKSA9PiByPy5pc1Vua25vd24oKSA/IHIubHN0YXQoKSA6IHIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4gb25SZWFkZGlyKG51bGwsIGVudHJpZXMsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICYmICghZmlsdGVyIHx8IGZpbHRlcihlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmctLTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXVzZWQgJiYgIXJlc3VsdHMuZmxvd2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5vbmNlKCdkcmFpbicsIHByb2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIHphbGdvIGNvbnRhaW5tZW50XG4gICAgICAgICAgICAgICAgbGV0IHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRpci5yZWFkZGlyQ0Iob25SZWFkZGlyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgbWluaXBhc3NfMS5NaW5pcGFzcyh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVldWUgPSBbZW50cnldO1xuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IDA7XG4gICAgICAgIGNvbnN0IHByb2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcrKztcbiAgICAgICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmctLTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaChyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXVzZWQgJiYgIXJlc3VsdHMuZmxvd2luZylcbiAgICAgICAgICAgICAgICByZXN1bHRzLm9uY2UoJ2RyYWluJywgcHJvY2Vzcyk7XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGNoZGlyKHBhdGggPSB0aGlzLmN3ZCkge1xuICAgICAgICBjb25zdCBvbGRDd2QgPSB0aGlzLmN3ZDtcbiAgICAgICAgdGhpcy5jd2QgPSB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyB0aGlzLmN3ZC5yZXNvbHZlKHBhdGgpIDogcGF0aDtcbiAgICAgICAgdGhpcy5jd2Rbc2V0QXNDd2RdKG9sZEN3ZCk7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoU2N1cnJ5QmFzZSA9IFBhdGhTY3VycnlCYXNlO1xuLyoqXG4gKiBXaW5kb3dzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBQYXRoU2N1cnJ5QmFzZX1cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlIGluc2Vuc2l0dmUsIHVzZXMgYCdcXFxcJ2AgdG8gZ2VuZXJhdGUgcGF0aCBzdHJpbmdzLiAgVXNlc1xuICoge0BsaW5rIFBhdGhXaW4zMn0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeVdpbjMyIGV4dGVuZHMgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnXFxcXCc7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCBub2RlX3BhdGhfMS53aW4zMiwgJ1xcXFwnLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIGZvciAobGV0IHAgPSB0aGlzLmN3ZDsgcDsgcCA9IHAucGFyZW50KSB7XG4gICAgICAgICAgICBwLm5vY2FzZSA9IHRoaXMubm9jYXNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcnNlUm9vdFBhdGgoZGlyKSB7XG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2luZ2xlIHNlcGFyYXRvciwgaXQncyBub3QgYSBVTkMsIGFuZCB3ZSdsbFxuICAgICAgICAvLyBqdXN0IGdldCBzZXBhcmF0b3IgYXMgdGhlIHJvb3QsIGFuZCBkcml2ZUZyb21VTkMgd2lsbCByZXR1cm4gXFxcbiAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCBtb3VudCBcXCBvbiB0aGUgcm9vdCBmcm9tIHRoZSBjd2QuXG4gICAgICAgIHJldHVybiBub2RlX3BhdGhfMS53aW4zMi5wYXJzZShkaXIpLnJvb3QudG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Um9vdChmcykge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhXaW4zMih0aGlzLnJvb3RQYXRoLCBJRkRJUiwgdW5kZWZpbmVkLCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIHsgZnMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwcm92aWRlZCBwYXRoIHN0cmluZyBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICovXG4gICAgaXNBYnNvbHV0ZShwKSB7XG4gICAgICAgIHJldHVybiAocC5zdGFydHNXaXRoKCcvJykgfHwgcC5zdGFydHNXaXRoKCdcXFxcJykgfHwgL15bYS16XTooXFwvfFxcXFwpL2kudGVzdChwKSk7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoU2N1cnJ5V2luMzIgPSBQYXRoU2N1cnJ5V2luMzI7XG4vKipcbiAqIHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIGFsbCBwb3NpeCBzeXN0ZW1zIG90aGVyIHRoYW4gRGFyd2luLlxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2Utc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2VzIGAnLydgIHRvIGdlbmVyYXRlIHBhdGggc3RyaW5ncy5cbiAqXG4gKiBVc2VzIHtAbGluayBQYXRoUG9zaXh9IGZvciBQYXRoIG9iamVjdHMuXG4gKi9cbmNsYXNzIFBhdGhTY3VycnlQb3NpeCBleHRlbmRzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJy8nO1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIG9wdHMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IG5vY2FzZSA9IGZhbHNlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIG5vZGVfcGF0aF8xLnBvc2l4LCAnLycsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyc2VSb290UGF0aChfZGlyKSB7XG4gICAgICAgIHJldHVybiAnLyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld1Jvb3QoZnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoUG9zaXgodGhpcy5yb290UGF0aCwgSUZESVIsIHVuZGVmaW5lZCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCB7IGZzIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgcGF0aCBzdHJpbmcgaXMgYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUocCkge1xuICAgICAgICByZXR1cm4gcC5zdGFydHNXaXRoKCcvJyk7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoU2N1cnJ5UG9zaXggPSBQYXRoU2N1cnJ5UG9zaXg7XG4vKipcbiAqIHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIERhcndpbiAobWFjT1MpIHN5c3RlbXMuXG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZywgdXNlcyBgJy8nYCBmb3IgZ2VuZXJhdGluZyBwYXRoXG4gKiBzdHJpbmdzLlxuICpcbiAqIFVzZXMge0BsaW5rIFBhdGhQb3NpeH0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeURhcndpbiBleHRlbmRzIFBhdGhTY3VycnlQb3NpeCB7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlEYXJ3aW4gPSBQYXRoU2N1cnJ5RGFyd2luO1xuLyoqXG4gKiBEZWZhdWx0IHtAbGluayBQYXRoQmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIHtAbGluayBQYXRoV2luMzJ9IG9uIFdpbmRvd3Mgc3lzdGVtcywge0BsaW5rIFBhdGhQb3NpeH0gb24gYWxsIG90aGVycy5cbiAqL1xuZXhwb3J0cy5QYXRoID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhXaW4zMiA6IFBhdGhQb3NpeDtcbi8qKlxuICogRGVmYXVsdCB7QGxpbmsgUGF0aFNjdXJyeUJhc2V9IGltcGxlbWVudGF0aW9uIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiB7QGxpbmsgUGF0aFNjdXJyeVdpbjMyfSBvbiBXaW5kb3dzIHN5c3RlbXMsIHtAbGluayBQYXRoU2N1cnJ5RGFyd2lufSBvblxuICogRGFyd2luIChtYWNPUykgc3lzdGVtcywge0BsaW5rIFBhdGhTY3VycnlQb3NpeH0gb24gYWxsIG90aGVycy5cbiAqL1xuZXhwb3J0cy5QYXRoU2N1cnJ5ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhTY3VycnlXaW4zMlxuICAgIDogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyBQYXRoU2N1cnJ5RGFyd2luXG4gICAgICAgIDogUGF0aFNjdXJyeVBvc2l4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIHRoaXMgaXMganVzdCBhIHZlcnkgbGlnaHQgd3JhcHBlciBhcm91bmQgMiBhcnJheXMgd2l0aCBhbiBvZmZzZXQgaW5kZXhcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGF0dGVybiA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IGlzUGF0dGVybkxpc3QgPSAocGwpID0+IHBsLmxlbmd0aCA+PSAxO1xuY29uc3QgaXNHbG9iTGlzdCA9IChnbCkgPT4gZ2wubGVuZ3RoID49IDE7XG4vKipcbiAqIEFuIGltbXV0YWJsZS1pc2ggdmlldyBvbiBhbiBhcnJheSBvZiBnbG9iIHBhcnRzIGFuZCB0aGVpciBwYXJzZWRcbiAqIHJlc3VsdHNcbiAqL1xuY2xhc3MgUGF0dGVybiB7XG4gICAgI3BhdHRlcm5MaXN0O1xuICAgICNnbG9iTGlzdDtcbiAgICAjaW5kZXg7XG4gICAgbGVuZ3RoO1xuICAgICNwbGF0Zm9ybTtcbiAgICAjcmVzdDtcbiAgICAjZ2xvYlN0cmluZztcbiAgICAjaXNEcml2ZTtcbiAgICAjaXNVTkM7XG4gICAgI2lzQWJzb2x1dGU7XG4gICAgI2ZvbGxvd0dsb2JzdGFyID0gdHJ1ZTtcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuTGlzdCwgZ2xvYkxpc3QsIGluZGV4LCBwbGF0Zm9ybSkge1xuICAgICAgICBpZiAoIWlzUGF0dGVybkxpc3QocGF0dGVybkxpc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbXB0eSBwYXR0ZXJuIGxpc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzR2xvYkxpc3QoZ2xvYkxpc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbXB0eSBnbG9iIGxpc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2xvYkxpc3QubGVuZ3RoICE9PSBwYXR0ZXJuTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc21hdGNoZWQgcGF0dGVybiBsaXN0IGFuZCBnbG9iIGxpc3QgbGVuZ3RocycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVuZ3RoID0gcGF0dGVybkxpc3QubGVuZ3RoO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNwYXR0ZXJuTGlzdCA9IHBhdHRlcm5MaXN0O1xuICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IGdsb2JMaXN0O1xuICAgICAgICB0aGlzLiNpbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9IHBsYXRmb3JtO1xuICAgICAgICAvLyBub3JtYWxpemUgcm9vdCBlbnRyaWVzIG9mIGFic29sdXRlIHBhdHRlcm5zIG9uIGluaXRpYWwgY3JlYXRpb24uXG4gICAgICAgIGlmICh0aGlzLiNpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gYzogPT4gWydjOi8nXVxuICAgICAgICAgICAgLy8gQzovID0+IFsnQzovJ11cbiAgICAgICAgICAgIC8vIEM6L3ggPT4gWydDOi8nLCAneCddXG4gICAgICAgICAgICAvLyAvL2hvc3Qvc2hhcmUgPT4gWycvL2hvc3Qvc2hhcmUvJ11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZS8gPT4gWycvL2hvc3Qvc2hhcmUvJ11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZS94ID0+IFsnLy9ob3N0L3NoYXJlLycsICd4J11cbiAgICAgICAgICAgIC8vIC9ldGMgPT4gWycvJywgJ2V0YyddXG4gICAgICAgICAgICAvLyAvID0+IFsnLyddXG4gICAgICAgICAgICBpZiAodGhpcy5pc1VOQygpKSB7XG4gICAgICAgICAgICAgICAgLy8gJycgLyAnJyAvICdob3N0JyAvICdzaGFyZSdcbiAgICAgICAgICAgICAgICBjb25zdCBbcDAsIHAxLCBwMiwgcDMsIC4uLnByZXN0XSA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IFtnMCwgZzEsIGcyLCBnMywgLi4uZ3Jlc3RdID0gdGhpcy4jZ2xvYkxpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHByZXN0WzBdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbmRzIGluIC9cbiAgICAgICAgICAgICAgICAgICAgcHJlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZ3Jlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFtwMCwgcDEsIHAyLCBwMywgJyddLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gW2cwLCBnMSwgZzIsIGczLCAnJ10uam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gW3AsIC4uLnByZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IFtnLCAuLi5ncmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLiNwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzRHJpdmUoKSB8fCB0aGlzLmlzQWJzb2x1dGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwMSwgLi4ucHJlc3RdID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgW2cxLCAuLi5ncmVzdF0gPSB0aGlzLiNnbG9iTGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocHJlc3RbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgaW4gL1xuICAgICAgICAgICAgICAgICAgICBwcmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBncmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcDEgKyAnLyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZyA9IGcxICsgJy8nO1xuICAgICAgICAgICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gW3AsIC4uLnByZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IFtnLCAuLi5ncmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLiNwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYXJzZWQgbGlzdCBvZiBwYXR0ZXJuc1xuICAgICAqL1xuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgb2YgaWYgcGF0dGVybigpIHJldHVybnMgYSBzdHJpbmdcbiAgICAgKi9cbiAgICBpc1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF0gPT09ICdzdHJpbmcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIG9mIGlmIHBhdHRlcm4oKSByZXR1cm5zIEdMT0JTVEFSXG4gICAgICovXG4gICAgaXNHbG9ic3RhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSA9PT0gbWluaW1hdGNoXzEuR0xPQlNUQVI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgcGF0dGVybigpIHJldHVybnMgYSByZWdleHBcbiAgICAgKi9cbiAgICBpc1JlZ0V4cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSBpbnN0YW5jZW9mIFJlZ0V4cDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIC8tam9pbmVkIHNldCBvZiBnbG9iIHBhcnRzIHRoYXQgbWFrZSB1cCB0aGlzIHBhdHRlcm5cbiAgICAgKi9cbiAgICBnbG9iU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI2dsb2JTdHJpbmcgPVxuICAgICAgICAgICAgdGhpcy4jZ2xvYlN0cmluZyB8fFxuICAgICAgICAgICAgICAgICh0aGlzLiNpbmRleCA9PT0gMCA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBYnNvbHV0ZSgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0WzBdICsgdGhpcy4jZ2xvYkxpc3Quc2xpY2UoMSkuam9pbignLycpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI2dsb2JMaXN0LmpvaW4oJy8nKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI2dsb2JMaXN0LnNsaWNlKHRoaXMuI2luZGV4KS5qb2luKCcvJykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGVyZSBhcmUgbW9yZSBwYXR0ZXJuIHBhcnRzIGFmdGVyIHRoaXMgb25lXG4gICAgICovXG4gICAgaGFzTW9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gdGhpcy4jaW5kZXggKyAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlciB0aGlzIHBhcnQsIG9yIG51bGwgaWYgdGhpcyBpcyB0aGUgZW5kXG4gICAgICovXG4gICAgcmVzdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jlc3QgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZXN0O1xuICAgICAgICBpZiAoIXRoaXMuaGFzTW9yZSgpKVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZXN0ID0gbnVsbCk7XG4gICAgICAgIHRoaXMuI3Jlc3QgPSBuZXcgUGF0dGVybih0aGlzLiNwYXR0ZXJuTGlzdCwgdGhpcy4jZ2xvYkxpc3QsIHRoaXMuI2luZGV4ICsgMSwgdGhpcy4jcGxhdGZvcm0pO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc0Fic29sdXRlID0gdGhpcy4jaXNBYnNvbHV0ZTtcbiAgICAgICAgdGhpcy4jcmVzdC4jaXNVTkMgPSB0aGlzLiNpc1VOQztcbiAgICAgICAgdGhpcy4jcmVzdC4jaXNEcml2ZSA9IHRoaXMuI2lzRHJpdmU7XG4gICAgICAgIHJldHVybiB0aGlzLiNyZXN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBwYXR0ZXJuIHJlcHJlc2VudHMgYSAvL3VuYy9wYXRoLyBvbiB3aW5kb3dzXG4gICAgICovXG4gICAgaXNVTkMoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc1VOQyAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMuI2lzVU5DXG4gICAgICAgICAgICA6ICh0aGlzLiNpc1VOQyA9XG4gICAgICAgICAgICAgICAgdGhpcy4jcGxhdGZvcm0gPT09ICd3aW4zMicgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5kZXggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcGxbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHBsWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbMl0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICEhcGxbMl0gJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAhIXBsWzNdKTtcbiAgICB9XG4gICAgLy8gcGF0dGVybiBsaWtlIEM6Ly4uLlxuICAgIC8vIHNwbGl0ID0gWydDOicsIC4uLl1cbiAgICAvLyBYWFg6IHdvdWxkIGJlIG5pY2UgdG8gaGFuZGxlIHBhdHRlcm5zIGxpa2UgYGM6KmAgdG8gdGVzdCB0aGUgY3dkXG4gICAgLy8gaW4gYzogZm9yICosIGJ1dCBJIGRvbid0IGtub3cgb2YgYSB3YXkgdG8gZXZlbiBmaWd1cmUgb3V0IHdoYXQgdGhhdFxuICAgIC8vIGN3ZCBpcyB3aXRob3V0IGFjdHVhbGx5IGNoZGlyJ2luZyBpbnRvIGl0P1xuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBkcml2ZSBsZXR0ZXIgb24gV2luZG93c1xuICAgICAqL1xuICAgIGlzRHJpdmUoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0RyaXZlICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNEcml2ZVxuICAgICAgICAgICAgOiAodGhpcy4jaXNEcml2ZSA9XG4gICAgICAgICAgICAgICAgdGhpcy4jcGxhdGZvcm0gPT09ICd3aW4zMicgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5kZXggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFswXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgL15bYS16XTokL2kudGVzdChwbFswXSkpO1xuICAgIH1cbiAgICAvLyBwYXR0ZXJuID0gJy8nIG9yICcvLi4uJyBvciAnL3gvLi4uJ1xuICAgIC8vIHNwbGl0ID0gWycnLCAnJ10gb3IgWycnLCAuLi5dIG9yIFsnJywgJ3gnLCAuLi5dXG4gICAgLy8gRHJpdmUgYW5kIFVOQyBib3RoIGNvbnNpZGVyZWQgYWJzb2x1dGUgb24gd2luZG93c1xuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHBhdHRlcm4gaXMgcm9vdGVkIG9uIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKCkge1xuICAgICAgICBjb25zdCBwbCA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNBYnNvbHV0ZSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMuI2lzQWJzb2x1dGVcbiAgICAgICAgICAgIDogKHRoaXMuI2lzQWJzb2x1dGUgPVxuICAgICAgICAgICAgICAgIChwbFswXSA9PT0gJycgJiYgcGwubGVuZ3RoID4gMSkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RyaXZlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1VOQygpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY29uc3VtZSB0aGUgcm9vdCBvZiB0aGUgcGF0dGVybiwgYW5kIHJldHVybiBpdFxuICAgICAqL1xuICAgIHJvb3QoKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLiNwYXR0ZXJuTGlzdFswXTtcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgcCA9PT0gJ3N0cmluZycgJiYgdGhpcy5pc0Fic29sdXRlKCkgJiYgdGhpcy4jaW5kZXggPT09IDApID9cbiAgICAgICAgICAgIHBcbiAgICAgICAgICAgIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBnbG9ic3RhciBwYXR0ZXJuIGlzIGFsbG93ZWQgdG8gZm9sbG93XG4gICAgICogYSBzeW1ib2xpYyBsaW5rLlxuICAgICAqL1xuICAgIGNoZWNrRm9sbG93R2xvYnN0YXIoKSB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuI2luZGV4ID09PSAwIHx8XG4gICAgICAgICAgICAhdGhpcy5pc0dsb2JzdGFyKCkgfHxcbiAgICAgICAgICAgICF0aGlzLiNmb2xsb3dHbG9ic3Rhcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmsgdGhhdCB0aGUgY3VycmVudCBnbG9ic3RhciBwYXR0ZXJuIGlzIGZvbGxvd2luZyBhIHN5bWJvbGljIGxpbmtcbiAgICAgKi9cbiAgICBtYXJrRm9sbG93R2xvYnN0YXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiNpbmRleCA9PT0gMCB8fCAhdGhpcy5pc0dsb2JzdGFyKCkgfHwgIXRoaXMuI2ZvbGxvd0dsb2JzdGFyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLiNmb2xsb3dHbG9ic3RhciA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnRzLlBhdHRlcm4gPSBQYXR0ZXJuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gZ2l2ZSBpdCBhIHBhdHRlcm4sIGFuZCBpdCdsbCBiZSBhYmxlIHRvIHRlbGwgeW91IGlmXG4vLyBhIGdpdmVuIHBhdGggc2hvdWxkIGJlIGlnbm9yZWQuXG4vLyBJZ25vcmluZyBhIHBhdGggaWdub3JlcyBpdHMgY2hpbGRyZW4gaWYgdGhlIHBhdHRlcm4gZW5kcyBpbiAvKipcbi8vIElnbm9yZXMgYXJlIGFsd2F5cyBwYXJzZWQgaW4gZG90OnRydWUgbW9kZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JZ25vcmUgPSB2b2lkIDA7XG5jb25zdCBtaW5pbWF0Y2hfMSA9IHJlcXVpcmUoXCJtaW5pbWF0Y2hcIik7XG5jb25zdCBwYXR0ZXJuX2pzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuLmpzXCIpO1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpID9cbiAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAnbGludXgnO1xuLyoqXG4gKiBDbGFzcyB1c2VkIHRvIHByb2Nlc3MgaWdub3JlZCBwYXR0ZXJuc1xuICovXG5jbGFzcyBJZ25vcmUge1xuICAgIHJlbGF0aXZlO1xuICAgIHJlbGF0aXZlQ2hpbGRyZW47XG4gICAgYWJzb2x1dGU7XG4gICAgYWJzb2x1dGVDaGlsZHJlbjtcbiAgICBwbGF0Zm9ybTtcbiAgICBtbW9wdHM7XG4gICAgY29uc3RydWN0b3IoaWdub3JlZCwgeyBub2JyYWNlLCBub2Nhc2UsIG5vZXh0LCBub2dsb2JzdGFyLCBwbGF0Zm9ybSA9IGRlZmF1bHRQbGF0Zm9ybSwgfSkge1xuICAgICAgICB0aGlzLnJlbGF0aXZlID0gW107XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSBbXTtcbiAgICAgICAgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIHRoaXMubW1vcHRzID0ge1xuICAgICAgICAgICAgZG90OiB0cnVlLFxuICAgICAgICAgICAgbm9icmFjZSxcbiAgICAgICAgICAgIG5vY2FzZSxcbiAgICAgICAgICAgIG5vZXh0LFxuICAgICAgICAgICAgbm9nbG9ic3RhcixcbiAgICAgICAgICAgIG9wdGltaXphdGlvbkxldmVsOiAyLFxuICAgICAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgICAgICBub2NvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBub25lZ2F0ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBpZ24gb2YgaWdub3JlZClcbiAgICAgICAgICAgIHRoaXMuYWRkKGlnbik7XG4gICAgfVxuICAgIGFkZChpZ24pIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IGl0IGdpdmVzIHVzIGEgY2xlYW4gc2V0IG9mIG9wdGltaXplZFxuICAgICAgICAvLyBtaW5pbWF0Y2ggbWF0Y2hlcnMsIHdpdGhvdXQgZ2V0dGluZyB0cmlwcGVkIHVwIGlmIG9uZSBvZiB0aGVtXG4gICAgICAgIC8vIGVuZHMgaW4gLyoqIGluc2lkZSBhIGJyYWNlIHNlY3Rpb24sIGFuZCBpdCdzIG9ubHkgaW5lZmZpY2llbnQgYXRcbiAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSB3YWxrLCBub3QgYWxvbmcgaXQuXG4gICAgICAgIC8vIEl0J2QgYmUgbmljZSBpZiB0aGUgUGF0dGVybiBjbGFzcyBqdXN0IGhhZCBhIC50ZXN0KCkgbWV0aG9kLCBidXRcbiAgICAgICAgLy8gaGFuZGxpbmcgZ2xvYnN0YXJzIGlzIGEgYml0IG9mIGEgcGl0YSwgYW5kIHRoYXQgY29kZSBhbHJlYWR5IGxpdmVzXG4gICAgICAgIC8vIGluIG1pbmltYXRjaCBhbnl3YXkuXG4gICAgICAgIC8vIEFub3RoZXIgd2F5IHdvdWxkIGJlIGlmIG1heWJlIE1pbmltYXRjaCBjb3VsZCB0YWtlIGl0cyBzZXQvZ2xvYlBhcnRzXG4gICAgICAgIC8vIGFzIGFuIG9wdGlvbiwgYW5kIHRoZW4gd2UgY291bGQgYXQgbGVhc3QganVzdCB1c2UgUGF0dGVybiB0byB0ZXN0XG4gICAgICAgIC8vIGZvciBhYnNvbHV0ZS1uZXNzLlxuICAgICAgICAvLyBZZXQgYW5vdGhlciB3YXksIE1pbmltYXRjaCBjb3VsZCB0YWtlIGFuIGFycmF5IG9mIGdsb2Igc3RyaW5ncywgYW5kXG4gICAgICAgIC8vIGEgY3dkIG9wdGlvbiwgYW5kIGRvIHRoZSByaWdodCB0aGluZy5cbiAgICAgICAgY29uc3QgbW0gPSBuZXcgbWluaW1hdGNoXzEuTWluaW1hdGNoKGlnbiwgdGhpcy5tbW9wdHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1tLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbW0uc2V0W2ldO1xuICAgICAgICAgICAgY29uc3QgZ2xvYlBhcnRzID0gbW0uZ2xvYlBhcnRzW2ldO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIXBhcnNlZCB8fCAhZ2xvYlBhcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhdHRlcm4gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzdHJpcCBvZmYgbGVhZGluZyAuLyBwb3J0aW9uc1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzU3MFxuICAgICAgICAgICAgd2hpbGUgKHBhcnNlZFswXSA9PT0gJy4nICYmIGdsb2JQYXJ0c1swXSA9PT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgY29uc3QgcCA9IG5ldyBwYXR0ZXJuX2pzXzEuUGF0dGVybihwYXJzZWQsIGdsb2JQYXJ0cywgMCwgdGhpcy5wbGF0Zm9ybSk7XG4gICAgICAgICAgICBjb25zdCBtID0gbmV3IG1pbmltYXRjaF8xLk1pbmltYXRjaChwLmdsb2JTdHJpbmcoKSwgdGhpcy5tbW9wdHMpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBnbG9iUGFydHNbZ2xvYlBhcnRzLmxlbmd0aCAtIDFdID09PSAnKionO1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwLmlzQWJzb2x1dGUoKTtcbiAgICAgICAgICAgIGlmIChhYnNvbHV0ZSlcbiAgICAgICAgICAgICAgICB0aGlzLmFic29sdXRlLnB1c2gobSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZS5wdXNoKG0pO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFic29sdXRlKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFic29sdXRlQ2hpbGRyZW4ucHVzaChtKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVDaGlsZHJlbi5wdXNoKG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlnbm9yZWQocCkge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHAuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgZnVsbHBhdGhzID0gYCR7ZnVsbHBhdGh9L2A7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gcC5yZWxhdGl2ZSgpIHx8ICcuJztcbiAgICAgICAgY29uc3QgcmVsYXRpdmVzID0gYCR7cmVsYXRpdmV9L2A7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnJlbGF0aXZlKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChyZWxhdGl2ZSkgfHwgbS5tYXRjaChyZWxhdGl2ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLmFic29sdXRlKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChmdWxscGF0aCkgfHwgbS5tYXRjaChmdWxscGF0aHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2hpbGRyZW5JZ25vcmVkKHApIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSBwLmZ1bGxwYXRoKCkgKyAnLyc7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gKHAucmVsYXRpdmUoKSB8fCAnLicpICsgJy8nO1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChyZWxhdGl2ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMuYWJzb2x1dGVDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKG0ubWF0Y2goZnVsbHBhdGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLklnbm9yZSA9IElnbm9yZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlnbm9yZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gc3luY2hyb25vdXMgdXRpbGl0eSBmb3IgZmlsdGVyaW5nIGVudHJpZXMgYW5kIGNhbGN1bGF0aW5nIHN1YndhbGtzXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlByb2Nlc3NvciA9IGV4cG9ydHMuU3ViV2Fsa3MgPSBleHBvcnRzLk1hdGNoUmVjb3JkID0gZXhwb3J0cy5IYXNXYWxrZWRDYWNoZSA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbi8qKlxuICogQSBjYWNoZSBvZiB3aGljaCBwYXR0ZXJucyBoYXZlIGJlZW4gcHJvY2Vzc2VkIGZvciBhIGdpdmVuIFBhdGhcbiAqL1xuY2xhc3MgSGFzV2Fsa2VkQ2FjaGUge1xuICAgIHN0b3JlO1xuICAgIGNvbnN0cnVjdG9yKHN0b3JlID0gbmV3IE1hcCgpKSB7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICB9XG4gICAgY29weSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIYXNXYWxrZWRDYWNoZShuZXcgTWFwKHRoaXMuc3RvcmUpKTtcbiAgICB9XG4gICAgaGFzV2Fsa2VkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXQodGFyZ2V0LmZ1bGxwYXRoKCkpPy5oYXMocGF0dGVybi5nbG9iU3RyaW5nKCkpO1xuICAgIH1cbiAgICBzdG9yZVdhbGtlZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0YXJnZXQuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zdG9yZS5nZXQoZnVsbHBhdGgpO1xuICAgICAgICBpZiAoY2FjaGVkKVxuICAgICAgICAgICAgY2FjaGVkLmFkZChwYXR0ZXJuLmdsb2JTdHJpbmcoKSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KGZ1bGxwYXRoLCBuZXcgU2V0KFtwYXR0ZXJuLmdsb2JTdHJpbmcoKV0pKTtcbiAgICB9XG59XG5leHBvcnRzLkhhc1dhbGtlZENhY2hlID0gSGFzV2Fsa2VkQ2FjaGU7XG4vKipcbiAqIEEgcmVjb3JkIG9mIHdoaWNoIHBhdGhzIGhhdmUgYmVlbiBtYXRjaGVkIGluIGEgZ2l2ZW4gd2FsayBzdGVwLFxuICogYW5kIHdoZXRoZXIgdGhleSBvbmx5IGFyZSBjb25zaWRlcmVkIGEgbWF0Y2ggaWYgdGhleSBhcmUgYSBkaXJlY3RvcnksXG4gKiBhbmQgd2hldGhlciB0aGVpciBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHNob3VsZCBiZSByZXR1cm5lZC5cbiAqL1xuY2xhc3MgTWF0Y2hSZWNvcmQge1xuICAgIHN0b3JlID0gbmV3IE1hcCgpO1xuICAgIGFkZCh0YXJnZXQsIGFic29sdXRlLCBpZkRpcikge1xuICAgICAgICBjb25zdCBuID0gKGFic29sdXRlID8gMiA6IDApIHwgKGlmRGlyID8gMSA6IDApO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0LCBjdXJyZW50ID09PSB1bmRlZmluZWQgPyBuIDogbiAmIGN1cnJlbnQpO1xuICAgIH1cbiAgICAvLyBtYXRjaCwgYWJzb2x1dGUsIGlmZGlyXG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnN0b3JlLmVudHJpZXMoKV0ubWFwKChbcGF0aCwgbl0pID0+IFtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAhIShuICYgMiksXG4gICAgICAgICAgICAhIShuICYgMSksXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbmV4cG9ydHMuTWF0Y2hSZWNvcmQgPSBNYXRjaFJlY29yZDtcbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHBhdHRlcm5zIHRoYXQgbXVzdCBiZSBwcm9jZXNzZWQgaW4gYSBzdWJzZXF1ZW50IHN0ZXBcbiAqIGZvciBhIGdpdmVuIHBhdGguXG4gKi9cbmNsYXNzIFN1YldhbGtzIHtcbiAgICBzdG9yZSA9IG5ldyBNYXAoKTtcbiAgICBhZGQodGFyZ2V0LCBwYXR0ZXJuKSB7XG4gICAgICAgIGlmICghdGFyZ2V0LmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgaWYgKCFzdWJzLmZpbmQocCA9PiBwLmdsb2JTdHJpbmcoKSA9PT0gcGF0dGVybi5nbG9iU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgc3Vicy5wdXNoKHBhdHRlcm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KHRhcmdldCwgW3BhdHRlcm5dKTtcbiAgICB9XG4gICAgZ2V0KHRhcmdldCkge1xuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghc3Vicykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRlbXB0aW5nIHRvIHdhbGsgdW5rbm93biBwYXRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmV0dXJuIHN1YnM7XG4gICAgfVxuICAgIGVudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmtleXMoKS5tYXAoayA9PiBbaywgdGhpcy5zdG9yZS5nZXQoayldKTtcbiAgICB9XG4gICAga2V5cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnN0b3JlLmtleXMoKV0uZmlsdGVyKHQgPT4gdC5jYW5SZWFkZGlyKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuU3ViV2Fsa3MgPSBTdWJXYWxrcztcbi8qKlxuICogVGhlIGNsYXNzIHRoYXQgcHJvY2Vzc2VzIHBhdHRlcm5zIGZvciBhIGdpdmVuIHBhdGguXG4gKlxuICogSGFuZGxlcyBjaGlsZCBlbnRyeSBmaWx0ZXJpbmcsIGFuZCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcGF0aCdzXG4gKiBkaXJlY3RvcnkgY29udGVudHMgbXVzdCBiZSByZWFkLlxuICovXG5jbGFzcyBQcm9jZXNzb3Ige1xuICAgIGhhc1dhbGtlZENhY2hlO1xuICAgIG1hdGNoZXMgPSBuZXcgTWF0Y2hSZWNvcmQoKTtcbiAgICBzdWJ3YWxrcyA9IG5ldyBTdWJXYWxrcygpO1xuICAgIHBhdHRlcm5zO1xuICAgIGZvbGxvdztcbiAgICBkb3Q7XG4gICAgb3B0cztcbiAgICBjb25zdHJ1Y3RvcihvcHRzLCBoYXNXYWxrZWRDYWNoZSkge1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLmZvbGxvdyA9ICEhb3B0cy5mb2xsb3c7XG4gICAgICAgIHRoaXMuZG90ID0gISFvcHRzLmRvdDtcbiAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZSA9XG4gICAgICAgICAgICBoYXNXYWxrZWRDYWNoZSA/IGhhc1dhbGtlZENhY2hlLmNvcHkoKSA6IG5ldyBIYXNXYWxrZWRDYWNoZSgpO1xuICAgIH1cbiAgICBwcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucykge1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NpbmdTZXQgPSBwYXR0ZXJucy5tYXAocCA9PiBbdGFyZ2V0LCBwXSk7XG4gICAgICAgIC8vIG1hcCBvZiBwYXRocyB0byB0aGUgbWFnaWMtc3RhcnRpbmcgc3Vid2Fsa3MgdGhleSBuZWVkIHRvIHdhbGtcbiAgICAgICAgLy8gZmlyc3QgaXRlbSBpbiBwYXR0ZXJucyBpcyB0aGUgZmlsdGVyXG4gICAgICAgIGZvciAobGV0IFt0LCBwYXR0ZXJuXSBvZiBwcm9jZXNzaW5nU2V0KSB7XG4gICAgICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlLnN0b3JlV2Fsa2VkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHBhdHRlcm4ucm9vdCgpO1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLmlzQWJzb2x1dGUoKSAmJiB0aGlzLm9wdHMuYWJzb2x1dGUgIT09IGZhbHNlO1xuICAgICAgICAgICAgLy8gc3RhcnQgYWJzb2x1dGUgcGF0dGVybnMgYXQgcm9vdFxuICAgICAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICAgICB0ID0gdC5yZXNvbHZlKHJvb3QgPT09ICcvJyAmJiB0aGlzLm9wdHMucm9vdCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLnJvb3RcbiAgICAgICAgICAgICAgICAgICAgOiByb290KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodCwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmlzRU5PRU5UKCkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBsZXQgcDtcbiAgICAgICAgICAgIGxldCByZXN0O1xuICAgICAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICh0eXBlb2YgKHAgPSBwYXR0ZXJuLnBhdHRlcm4oKSkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgKHJlc3QgPSBwYXR0ZXJuLnJlc3QoKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdC5yZXNvbHZlKHApO1xuICAgICAgICAgICAgICAgIHQgPSBjO1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZXN0O1xuICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcCA9IHBhdHRlcm4ucGF0dGVybigpO1xuICAgICAgICAgICAgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNXYWxrZWRDYWNoZS5oYXNXYWxrZWQodCwgcGF0dGVybikpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUuc3RvcmVXYWxrZWQodCwgcGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub3cgd2UgaGF2ZSBlaXRoZXIgYSBmaW5hbCBzdHJpbmcgZm9yIGEga25vd24gZW50cnksXG4gICAgICAgICAgICAvLyBtb3JlIHN0cmluZ3MgZm9yIGFuIHVua25vd24gZW50cnksXG4gICAgICAgICAgICAvLyBvciBhIHBhdHRlcm4gc3RhcnRpbmcgd2l0aCBtYWdpYywgbW91bnRlZCBvbiB0LlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIG11c3Qgbm90IGJlIGZpbmFsIGVudHJ5LCBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZVxuICAgICAgICAgICAgICAgIC8vIGNvbmNhdGVuYXRlZCBpdCBlYXJsaWVyLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlmRGlyID0gcCA9PT0gJy4uJyB8fCBwID09PSAnJyB8fCBwID09PSAnLic7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LnJlc29sdmUocCksIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwID09PSBtaW5pbWF0Y2hfMS5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgIC8vIGlmIG5vIHJlc3QsIG1hdGNoIGFuZCBzdWJ3YWxrIHBhdHRlcm5cbiAgICAgICAgICAgICAgICAvLyBpZiByZXN0LCBwcm9jZXNzIHJlc3QgYW5kIHN1YndhbGsgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBzeW1saW5rLCBidXQgd2UgZGlkbid0IGdldCBoZXJlIGJ5IHdheSBvZiBhXG4gICAgICAgICAgICAgICAgLy8gZ2xvYnN0YXIgbWF0Y2ggKG1lYW5pbmcgaXQncyB0aGUgZmlyc3QgdGltZSBUSElTIGdsb2JzdGFyXG4gICAgICAgICAgICAgICAgLy8gaGFzIHRyYXZlcnNlZCBhIHN5bWxpbmspLCB0aGVuIHdlIGZvbGxvdyBpdC4gT3RoZXJ3aXNlLCBzdG9wLlxuICAgICAgICAgICAgICAgIGlmICghdC5pc1N5bWJvbGljTGluaygpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sbG93IHx8XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4uY2hlY2tGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBycCA9IHJlc3Q/LnBhdHRlcm4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBycmVzdCA9IHJlc3Q/LnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3QgfHwgKChycCA9PT0gJycgfHwgcnAgPT09ICcuJykgJiYgIXJyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IEhBUyB0byBiZSBhIGRpciBpZiBpdCBlbmRzIGluICoqLyBvciAqKi8uXG4gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBlbmRpbmcgaW4gKiogd2lsbCBtYXRjaCBmaWxlcyBhcyB3ZWxsLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQsIGFic29sdXRlLCBycCA9PT0gJycgfHwgcnAgPT09ICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnAgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd291bGQgbWVhbiB5b3UncmUgbWF0Y2hpbmcgKiovLi4gYXQgdGhlIGZzIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbm8gdGhhbmtzLCBJJ20gbm90IGdvbm5hIHRlc3QgdGhhdCBzcGVjaWZpYyBjYXNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cCA9IHQucGFyZW50IHx8IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFycmVzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHRwLCBhYnNvbHV0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5oYXNXYWxrZWRDYWNoZS5oYXNXYWxrZWQodHAsIHJyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHRwLCBycmVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodCwgcGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN1YndhbGtUYXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJ3YWxrcy5rZXlzKCk7XG4gICAgfVxuICAgIGNoaWxkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb2Nlc3Nvcih0aGlzLm9wdHMsIHRoaXMuaGFzV2Fsa2VkQ2FjaGUpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gYSBuZXcgUHJvY2Vzc29yIGNvbnRhaW5pbmcgdGhlIHN1YndhbGtzIGZvciBlYWNoXG4gICAgLy8gY2hpbGQgZW50cnksIGFuZCBhIHNldCBvZiBtYXRjaGVzLCBhbmRcbiAgICAvLyBhIGhhc1dhbGtlZENhY2hlIHRoYXQncyBhIGNvcHkgb2YgdGhpcyBvbmVcbiAgICAvLyB0aGVuIHdlJ3JlIGdvaW5nIHRvIGNhbGxcbiAgICBmaWx0ZXJFbnRyaWVzKHBhcmVudCwgZW50cmllcykge1xuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IHRoaXMuc3Vid2Fsa3MuZ2V0KHBhcmVudCk7XG4gICAgICAgIC8vIHB1dCBtYXRjaGVzIGFuZCBlbnRyeSB3YWxrcyBpbnRvIHRoZSByZXN1bHRzIHByb2Nlc3NvclxuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5jaGlsZCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLmlzQWJzb2x1dGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGF0dGVybi5wYXR0ZXJuKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmIChwID09PSBtaW5pbWF0Y2hfMS5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RHbG9ic3RhcihlLCBwYXR0ZXJuLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0UmVnRXhwKGUsIHAsIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdFN0cmluZyhlLCBwLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICB0ZXN0R2xvYnN0YXIoZSwgcGF0dGVybiwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZG90IHx8ICFlLm5hbWUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4uaGFzTW9yZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgaW4gZm9sbG93IG1vZGUgb3IgaXQncyBub3QgYSBzeW1saW5rLCBqdXN0IGtlZXBcbiAgICAgICAgICAgICAgICAvLyB0ZXN0aW5nIHRoZSBzYW1lIHBhdHRlcm4uIElmIHRoZXJlJ3MgbW9yZSBhZnRlciB0aGUgZ2xvYnN0YXIsXG4gICAgICAgICAgICAgICAgLy8gdGhlbiB0aGlzIHN5bWxpbmsgY29uc3VtZXMgdGhlIGdsb2JzdGFyLiBJZiBub3QsIHRoZW4gd2UgY2FuXG4gICAgICAgICAgICAgICAgLy8gZm9sbG93IGF0IG1vc3QgT05FIHN5bWxpbmsgYWxvbmcgdGhlIHdheSwgc28gd2UgbWFyayBpdCwgd2hpY2hcbiAgICAgICAgICAgICAgICAvLyBhbHNvIGNoZWNrcyB0byBlbnN1cmUgdGhhdCBpdCB3YXNuJ3QgYWxyZWFkeSBtYXJrZWQuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9sbG93IHx8ICFlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdCAmJiBwYXR0ZXJuLmNoZWNrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGF0dGVybi5tYXJrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIE5FWFQgdGhpbmcgbWF0Y2hlcyB0aGlzIGVudHJ5LCB0aGVuIGFsc28gYWRkXG4gICAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSByZXN0LnBhdHRlcm4oKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcnAgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgLy8gZG90cyBhbmQgZW1wdHkgd2VyZSBoYW5kbGVkIGFscmVhZHlcbiAgICAgICAgICAgICAgICBycCAhPT0gJy4uJyAmJlxuICAgICAgICAgICAgICAgIHJwICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIHJwICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RTdHJpbmcoZSwgcnAsIHJlc3QucmVzdCgpLCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChycCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IGVwID0gZS5wYXJlbnQgfHwgZTtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGVwLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0UmVnRXhwKGUsIHJwLCByZXN0LnJlc3QoKSwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRlc3RSZWdFeHAoZSwgcCwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKCFwLnRlc3QoZS5uYW1lKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0ZXN0U3RyaW5nKGUsIHAsIHJlc3QsIGFic29sdXRlKSB7XG4gICAgICAgIC8vIHNob3VsZCBuZXZlciBoYXBwZW4/XG4gICAgICAgIGlmICghZS5pc05hbWVkKHApKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Qcm9jZXNzb3IgPSBQcm9jZXNzb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9jZXNzb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2xvYlN0cmVhbSA9IGV4cG9ydHMuR2xvYldhbGtlciA9IGV4cG9ydHMuR2xvYlV0aWwgPSB2b2lkIDA7XG4vKipcbiAqIFNpbmdsZS11c2UgdXRpbGl0eSBjbGFzc2VzIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eSB0byB0aGUge0BsaW5rIEdsb2J9XG4gKiBtZXRob2RzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuY29uc3QgbWluaXBhc3NfMSA9IHJlcXVpcmUoXCJtaW5pcGFzc1wiKTtcbmNvbnN0IGlnbm9yZV9qc18xID0gcmVxdWlyZShcIi4vaWdub3JlLmpzXCIpO1xuY29uc3QgcHJvY2Vzc29yX2pzXzEgPSByZXF1aXJlKFwiLi9wcm9jZXNzb3IuanNcIik7XG5jb25zdCBtYWtlSWdub3JlID0gKGlnbm9yZSwgb3B0cykgPT4gdHlwZW9mIGlnbm9yZSA9PT0gJ3N0cmluZycgPyBuZXcgaWdub3JlX2pzXzEuSWdub3JlKFtpZ25vcmVdLCBvcHRzKVxuICAgIDogQXJyYXkuaXNBcnJheShpZ25vcmUpID8gbmV3IGlnbm9yZV9qc18xLklnbm9yZShpZ25vcmUsIG9wdHMpXG4gICAgICAgIDogaWdub3JlO1xuLyoqXG4gKiBiYXNpYyB3YWxraW5nIHV0aWxpdGllcyB0aGF0IGFsbCB0aGUgZ2xvYiB3YWxrZXIgdHlwZXMgdXNlXG4gKi9cbmNsYXNzIEdsb2JVdGlsIHtcbiAgICBwYXRoO1xuICAgIHBhdHRlcm5zO1xuICAgIG9wdHM7XG4gICAgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICBhYm9ydGVkID0gZmFsc2U7XG4gICAgI29uUmVzdW1lID0gW107XG4gICAgI2lnbm9yZTtcbiAgICAjc2VwO1xuICAgIHNpZ25hbDtcbiAgICBtYXhEZXB0aDtcbiAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICAgICAgdGhpcy4jc2VwID0gIW9wdHMucG9zaXggJiYgb3B0cy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdcXFxcJyA6ICcvJztcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzID0gb3B0cy5pbmNsdWRlQ2hpbGRNYXRjaGVzICE9PSBmYWxzZTtcbiAgICAgICAgaWYgKG9wdHMuaWdub3JlIHx8ICF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuI2lnbm9yZSA9IG1ha2VJZ25vcmUob3B0cy5pZ25vcmUgPz8gW10sIG9wdHMpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy4jaWdub3JlLmFkZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG0gPSAnY2Fubm90IGlnbm9yZSBjaGlsZCBtYXRjaGVzLCBpZ25vcmUgbGFja3MgYWRkKCkgbWV0aG9kLic7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlnbm9yZSwgYWx3YXlzIHNldCB3aXRoIG1heERlcHRoLCBidXQgaXQncyBvcHRpb25hbCBvbiB0aGVcbiAgICAgICAgLy8gR2xvYk9wdGlvbnMgdHlwZVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9IG9wdHMubWF4RGVwdGggfHwgSW5maW5pdHk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGlmIChvcHRzLnNpZ25hbCkge1xuICAgICAgICAgICAgdGhpcy5zaWduYWwgPSBvcHRzLnNpZ25hbDtcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjaWdub3JlZChwYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlZW4uaGFzKHBhdGgpIHx8ICEhdGhpcy4jaWdub3JlPy5pZ25vcmVkPy4ocGF0aCk7XG4gICAgfVxuICAgICNjaGlsZHJlbklnbm9yZWQocGF0aCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLiNpZ25vcmU/LmNoaWxkcmVuSWdub3JlZD8uKHBhdGgpO1xuICAgIH1cbiAgICAvLyBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdW1lKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZm4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgKGZuID0gdGhpcy4jb25SZXN1bWUuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25SZXN1bWUoZm4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCF0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNvblJlc3VtZS5wdXNoKGZuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBkbyB0aGUgcmVxdWlzaXRlIHJlYWxwYXRoL3N0YXQgY2hlY2tpbmcsIGFuZCByZXR1cm4gdGhlIHBhdGhcbiAgICAvLyB0byBhZGQgb3IgdW5kZWZpbmVkIHRvIGZpbHRlciBpdCBvdXQuXG4gICAgYXN5bmMgbWF0Y2hDaGVjayhlLCBpZkRpcikge1xuICAgICAgICBpZiAoaWZEaXIgJiYgdGhpcy5vcHRzLm5vZGlyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJwYztcbiAgICAgICAgaWYgKHRoaXMub3B0cy5yZWFscGF0aCkge1xuICAgICAgICAgICAgcnBjID0gZS5yZWFscGF0aENhY2hlZCgpIHx8IChhd2FpdCBlLnJlYWxwYXRoKCkpO1xuICAgICAgICAgICAgaWYgKCFycGMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGUgPSBycGM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmVlZFN0YXQgPSBlLmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0O1xuICAgICAgICBjb25zdCBzID0gbmVlZFN0YXQgPyBhd2FpdCBlLmxzdGF0KCkgOiBlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZvbGxvdyAmJiB0aGlzLm9wdHMubm9kaXIgJiYgcz8uaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXdhaXQgcy5yZWFscGF0aCgpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGFyZ2V0LmxzdGF0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoQ2hlY2tUZXN0KHMsIGlmRGlyKTtcbiAgICB9XG4gICAgbWF0Y2hDaGVja1Rlc3QoZSwgaWZEaXIpIHtcbiAgICAgICAgcmV0dXJuIChlICYmXG4gICAgICAgICAgICAodGhpcy5tYXhEZXB0aCA9PT0gSW5maW5pdHkgfHwgZS5kZXB0aCgpIDw9IHRoaXMubWF4RGVwdGgpICYmXG4gICAgICAgICAgICAoIWlmRGlyIHx8IGUuY2FuUmVhZGRpcigpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLm9wdHMubm9kaXIgfHwgIWUuaXNEaXJlY3RvcnkoKSkgJiZcbiAgICAgICAgICAgICghdGhpcy5vcHRzLm5vZGlyIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMub3B0cy5mb2xsb3cgfHxcbiAgICAgICAgICAgICAgICAhZS5pc1N5bWJvbGljTGluaygpIHx8XG4gICAgICAgICAgICAgICAgIWUucmVhbHBhdGhDYWNoZWQoKT8uaXNEaXJlY3RvcnkoKSkgJiZcbiAgICAgICAgICAgICF0aGlzLiNpZ25vcmVkKGUpKSA/XG4gICAgICAgICAgICBlXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbWF0Y2hDaGVja1N5bmMoZSwgaWZEaXIpIHtcbiAgICAgICAgaWYgKGlmRGlyICYmIHRoaXMub3B0cy5ub2RpcilcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBycGM7XG4gICAgICAgIGlmICh0aGlzLm9wdHMucmVhbHBhdGgpIHtcbiAgICAgICAgICAgIHJwYyA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCBlLnJlYWxwYXRoU3luYygpO1xuICAgICAgICAgICAgaWYgKCFycGMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGUgPSBycGM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmVlZFN0YXQgPSBlLmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0O1xuICAgICAgICBjb25zdCBzID0gbmVlZFN0YXQgPyBlLmxzdGF0U3luYygpIDogZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5mb2xsb3cgJiYgdGhpcy5vcHRzLm5vZGlyICYmIHM/LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHMucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQ/LmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaENoZWNrVGVzdChzLCBpZkRpcik7XG4gICAgfVxuICAgIG1hdGNoRmluaXNoKGUsIGFic29sdXRlKSB7XG4gICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyB3ZSBrbm93IHdlIGhhdmUgYW4gaWdub3JlIGlmIHRoaXMgaXMgZmFsc2UsIGJ1dCBUUyBkb2Vzbid0XG4gICAgICAgIGlmICghdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzICYmIHRoaXMuI2lnbm9yZT8uYWRkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ24gPSBgJHtlLnJlbGF0aXZlUG9zaXgoKX0vKipgO1xuICAgICAgICAgICAgdGhpcy4jaWdub3JlLmFkZChpZ24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFicyA9IHRoaXMub3B0cy5hYnNvbHV0ZSA9PT0gdW5kZWZpbmVkID8gYWJzb2x1dGUgOiB0aGlzLm9wdHMuYWJzb2x1dGU7XG4gICAgICAgIHRoaXMuc2Vlbi5hZGQoZSk7XG4gICAgICAgIGNvbnN0IG1hcmsgPSB0aGlzLm9wdHMubWFyayAmJiBlLmlzRGlyZWN0b3J5KCkgPyB0aGlzLiNzZXAgOiAnJztcbiAgICAgICAgLy8gb2ssIHdlIGhhdmUgd2hhdCB3ZSBuZWVkIVxuICAgICAgICBpZiAodGhpcy5vcHRzLndpdGhGaWxlVHlwZXMpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFicykge1xuICAgICAgICAgICAgY29uc3QgYWJzID0gdGhpcy5vcHRzLnBvc2l4ID8gZS5mdWxscGF0aFBvc2l4KCkgOiBlLmZ1bGxwYXRoKCk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoRW1pdChhYnMgKyBtYXJrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbCA9IHRoaXMub3B0cy5wb3NpeCA/IGUucmVsYXRpdmVQb3NpeCgpIDogZS5yZWxhdGl2ZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJlID0gdGhpcy5vcHRzLmRvdFJlbGF0aXZlICYmICFyZWwuc3RhcnRzV2l0aCgnLi4nICsgdGhpcy4jc2VwKSA/XG4gICAgICAgICAgICAgICAgJy4nICsgdGhpcy4jc2VwXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KCFyZWwgPyAnLicgKyBtYXJrIDogcHJlICsgcmVsICsgbWFyayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgbWF0Y2goZSwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBhd2FpdCB0aGlzLm1hdGNoQ2hlY2soZSwgaWZEaXIpO1xuICAgICAgICBpZiAocClcbiAgICAgICAgICAgIHRoaXMubWF0Y2hGaW5pc2gocCwgYWJzb2x1dGUpO1xuICAgIH1cbiAgICBtYXRjaFN5bmMoZSwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLm1hdGNoQ2hlY2tTeW5jKGUsIGlmRGlyKTtcbiAgICAgICAgaWYgKHApXG4gICAgICAgICAgICB0aGlzLm1hdGNoRmluaXNoKHAsIGFic29sdXRlKTtcbiAgICB9XG4gICAgd2Fsa0NCKHRhcmdldCwgcGF0dGVybnMsIGNiKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgbmV3IHByb2Nlc3Nvcl9qc18xLlByb2Nlc3Nvcih0aGlzLm9wdHMpLCBjYik7XG4gICAgfVxuICAgIHdhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBpZiAodGhpcy4jY2hpbGRyZW5JZ25vcmVkKHRhcmdldCkpXG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgaWYgKHRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uUmVzdW1lKCgpID0+IHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc29yLnByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKTtcbiAgICAgICAgLy8gZG9uZSBwcm9jZXNzaW5nLiAgYWxsIG9mIHRoZSBhYm92ZSBpcyBzeW5jLCBjYW4gYmUgYWJzdHJhY3RlZCBvdXQuXG4gICAgICAgIC8vIHN1YndhbGtzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIHRoZSBlbnRyeSBmaWx0ZXJzIHRoZXkgbmVlZFxuICAgICAgICAvLyBtYXRjaGVzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIFthYnNvbHV0ZSwgaWZEaXJdIHR1cGxlcy5cbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKG0sIGFic29sdXRlLCBpZkRpcikudGhlbigoKSA9PiBuZXh0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiBwcm9jZXNzb3Iuc3Vid2Fsa1RhcmdldHMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ICYmIHQuZGVwdGgoKSA+PSB0aGlzLm1heERlcHRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW5DYWNoZWQgPSB0LnJlYWRkaXJDYWNoZWQoKTtcbiAgICAgICAgICAgIGlmICh0LmNhbGxlZFJlYWRkaXIoKSlcbiAgICAgICAgICAgICAgICB0aGlzLndhbGtDQjModCwgY2hpbGRyZW5DYWNoZWQsIHByb2Nlc3NvciwgbmV4dCk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0LnJlYWRkaXJDQigoXywgZW50cmllcykgPT4gdGhpcy53YWxrQ0IzKHQsIGVudHJpZXMsIHByb2Nlc3NvciwgbmV4dCksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCMyh0YXJnZXQsIGVudHJpZXMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc29yLmZpbHRlckVudHJpZXModGFyZ2V0LCBlbnRyaWVzKTtcbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKG0sIGFic29sdXRlLCBpZkRpcikudGhlbigoKSA9PiBuZXh0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3RhcmdldCwgcGF0dGVybnNdIG9mIHByb2Nlc3Nvci5zdWJ3YWxrcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLmNoaWxkKCksIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBjYikge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBuZXcgcHJvY2Vzc29yX2pzXzEuUHJvY2Vzc29yKHRoaXMub3B0cyksIGNiKTtcbiAgICB9XG4gICAgd2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBpZiAodGhpcy4jY2hpbGRyZW5JZ25vcmVkKHRhcmdldCkpXG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgaWYgKHRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uUmVzdW1lKCgpID0+IHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3Nvci5wcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucyk7XG4gICAgICAgIC8vIGRvbmUgcHJvY2Vzc2luZy4gIGFsbCBvZiB0aGUgYWJvdmUgaXMgc3luYywgY2FuIGJlIGFic3RyYWN0ZWQgb3V0LlxuICAgICAgICAvLyBzdWJ3YWxrcyBpcyBhIG1hcCBvZiBwYXRocyB0byB0aGUgZW50cnkgZmlsdGVycyB0aGV5IG5lZWRcbiAgICAgICAgLy8gbWF0Y2hlcyBpcyBhIG1hcCBvZiBwYXRocyB0byBbYWJzb2x1dGUsIGlmRGlyXSB0dXBsZXMuXG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoU3luYyhtLCBhYnNvbHV0ZSwgaWZEaXIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiBwcm9jZXNzb3Iuc3Vid2Fsa1RhcmdldHMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ICYmIHQuZGVwdGgoKSA+PSB0aGlzLm1heERlcHRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0LnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjNTeW5jKHQsIGNoaWxkcmVuLCBwcm9jZXNzb3IsIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCM1N5bmModGFyZ2V0LCBlbnRyaWVzLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3Nvci5maWx0ZXJFbnRyaWVzKHRhcmdldCwgZW50cmllcyk7XG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoU3luYyhtLCBhYnNvbHV0ZSwgaWZEaXIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3RhcmdldCwgcGF0dGVybnNdIG9mIHByb2Nlc3Nvci5zdWJ3YWxrcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3Nvci5jaGlsZCgpLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxufVxuZXhwb3J0cy5HbG9iVXRpbCA9IEdsb2JVdGlsO1xuY2xhc3MgR2xvYldhbGtlciBleHRlbmRzIEdsb2JVdGlsIHtcbiAgICBtYXRjaGVzID0gbmV3IFNldCgpO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhdHRlcm5zLCBwYXRoLCBvcHRzKTtcbiAgICB9XG4gICAgbWF0Y2hFbWl0KGUpIHtcbiAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlKTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBhdGgubHN0YXQoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRoaXMucGF0aCwgdGhpcy5wYXR0ZXJucywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWoodGhpcy5zaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyh0aGlzLm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcztcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIHRocm93IHRoaXMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoLmxzdGF0U3luYygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGhpbmcgZm9yIHRoZSBjYWxsYmFjayB0byBkbywgYmVjYXVzZSB0aGlzIG5ldmVyIHBhdXNlc1xuICAgICAgICB0aGlzLndhbGtDQlN5bmModGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcztcbiAgICB9XG59XG5leHBvcnRzLkdsb2JXYWxrZXIgPSBHbG9iV2Fsa2VyO1xuY2xhc3MgR2xvYlN0cmVhbSBleHRlbmRzIEdsb2JVdGlsIHtcbiAgICByZXN1bHRzO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhdHRlcm5zLCBwYXRoLCBvcHRzKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gbmV3IG1pbmlwYXNzXzEuTWluaXBhc3Moe1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc3VsdHMub24oJ2RyYWluJywgKCkgPT4gdGhpcy5yZXN1bWUoKSk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5vbigncmVzdW1lJywgKCkgPT4gdGhpcy5yZXN1bWUoKSk7XG4gICAgfVxuICAgIG1hdGNoRW1pdChlKSB7XG4gICAgICAgIHRoaXMucmVzdWx0cy53cml0ZShlKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdHMuZmxvd2luZylcbiAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG4gICAgc3RyZWFtKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnBhdGg7XG4gICAgICAgIGlmICh0YXJnZXQuaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5sc3RhdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRhcmdldCwgdGhpcy5wYXR0ZXJucywgKCkgPT4gdGhpcy5yZXN1bHRzLmVuZCgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IodGFyZ2V0LCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aC5sc3RhdFN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndhbGtDQlN5bmModGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xuICAgIH1cbn1cbmV4cG9ydHMuR2xvYlN0cmVhbSA9IEdsb2JTdHJlYW07XG4vLyMgc291cmNlTWFwcGluZ1VSTD13YWxrZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2xvYiA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IG5vZGVfdXJsXzEgPSByZXF1aXJlKFwibm9kZTp1cmxcIik7XG5jb25zdCBwYXRoX3NjdXJyeV8xID0gcmVxdWlyZShcInBhdGgtc2N1cnJ5XCIpO1xuY29uc3QgcGF0dGVybl9qc18xID0gcmVxdWlyZShcIi4vcGF0dGVybi5qc1wiKTtcbmNvbnN0IHdhbGtlcl9qc18xID0gcmVxdWlyZShcIi4vd2Fsa2VyLmpzXCIpO1xuLy8gaWYgbm8gcHJvY2VzcyBnbG9iYWwsIGp1c3QgY2FsbCBpdCBsaW51eC5cbi8vIHNvIHdlIGRlZmF1bHQgdG8gY2FzZS1zZW5zaXRpdmUsIC8gc2VwYXJhdG9yc1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpID9cbiAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAnbGludXgnO1xuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjYW4gcGVyZm9ybSBnbG9iIHBhdHRlcm4gdHJhdmVyc2Fscy5cbiAqL1xuY2xhc3MgR2xvYiB7XG4gICAgYWJzb2x1dGU7XG4gICAgY3dkO1xuICAgIHJvb3Q7XG4gICAgZG90O1xuICAgIGRvdFJlbGF0aXZlO1xuICAgIGZvbGxvdztcbiAgICBpZ25vcmU7XG4gICAgbWFnaWNhbEJyYWNlcztcbiAgICBtYXJrO1xuICAgIG1hdGNoQmFzZTtcbiAgICBtYXhEZXB0aDtcbiAgICBub2JyYWNlO1xuICAgIG5vY2FzZTtcbiAgICBub2RpcjtcbiAgICBub2V4dDtcbiAgICBub2dsb2JzdGFyO1xuICAgIHBhdHRlcm47XG4gICAgcGxhdGZvcm07XG4gICAgcmVhbHBhdGg7XG4gICAgc2N1cnJ5O1xuICAgIHN0YXQ7XG4gICAgc2lnbmFsO1xuICAgIHdpbmRvd3NQYXRoc05vRXNjYXBlO1xuICAgIHdpdGhGaWxlVHlwZXM7XG4gICAgaW5jbHVkZUNoaWxkTWF0Y2hlcztcbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICovXG4gICAgb3B0cztcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwYXJzZWQgaW1tdXRhYmxlIHtAbGluayBQYXR0ZXJufSBvYmplY3RzLlxuICAgICAqL1xuICAgIHBhdHRlcm5zO1xuICAgIC8qKlxuICAgICAqIEFsbCBvcHRpb25zIGFyZSBzdG9yZWQgYXMgcHJvcGVydGllcyBvbiB0aGUgYEdsb2JgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgR2xvYk9wdGlvbnN9IGZvciBmdWxsIG9wdGlvbnMgZGVzY3JpcHRpb25zLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGEgcHJldmlvdXMgYEdsb2JgIG9iamVjdCBjYW4gYmUgcGFzc2VkIGFzIHRoZVxuICAgICAqIGBHbG9iT3B0aW9uc2AgdG8gYW5vdGhlciBgR2xvYmAgaW5zdGFudGlhdGlvbiB0byByZS11c2Ugc2V0dGluZ3NcbiAgICAgKiBhbmQgY2FjaGVzIHdpdGggYSBuZXcgcGF0dGVybi5cbiAgICAgKlxuICAgICAqIFRyYXZlcnNhbCBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBydW4gdGhlIHdhbGtcbiAgICAgKiBhZ2Fpbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRzKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIW9wdHMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdnbG9iIG9wdGlvbnMgcmVxdWlyZWQnKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53aXRoRmlsZVR5cGVzID0gISFvcHRzLndpdGhGaWxlVHlwZXM7XG4gICAgICAgIHRoaXMuc2lnbmFsID0gb3B0cy5zaWduYWw7XG4gICAgICAgIHRoaXMuZm9sbG93ID0gISFvcHRzLmZvbGxvdztcbiAgICAgICAgdGhpcy5kb3QgPSAhIW9wdHMuZG90O1xuICAgICAgICB0aGlzLmRvdFJlbGF0aXZlID0gISFvcHRzLmRvdFJlbGF0aXZlO1xuICAgICAgICB0aGlzLm5vZGlyID0gISFvcHRzLm5vZGlyO1xuICAgICAgICB0aGlzLm1hcmsgPSAhIW9wdHMubWFyaztcbiAgICAgICAgaWYgKCFvcHRzLmN3ZCkge1xuICAgICAgICAgICAgdGhpcy5jd2QgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRzLmN3ZCBpbnN0YW5jZW9mIFVSTCB8fCBvcHRzLmN3ZC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgIG9wdHMuY3dkID0gKDAsIG5vZGVfdXJsXzEuZmlsZVVSTFRvUGF0aCkob3B0cy5jd2QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3dkID0gb3B0cy5jd2QgfHwgJyc7XG4gICAgICAgIHRoaXMucm9vdCA9IG9wdHMucm9vdDtcbiAgICAgICAgdGhpcy5tYWdpY2FsQnJhY2VzID0gISFvcHRzLm1hZ2ljYWxCcmFjZXM7XG4gICAgICAgIHRoaXMubm9icmFjZSA9ICEhb3B0cy5ub2JyYWNlO1xuICAgICAgICB0aGlzLm5vZXh0ID0gISFvcHRzLm5vZXh0O1xuICAgICAgICB0aGlzLnJlYWxwYXRoID0gISFvcHRzLnJlYWxwYXRoO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gb3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzID0gb3B0cy5pbmNsdWRlQ2hpbGRNYXRjaGVzICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub2dsb2JzdGFyID0gISFvcHRzLm5vZ2xvYnN0YXI7XG4gICAgICAgIHRoaXMubWF0Y2hCYXNlID0gISFvcHRzLm1hdGNoQmFzZTtcbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9XG4gICAgICAgICAgICB0eXBlb2Ygb3B0cy5tYXhEZXB0aCA9PT0gJ251bWJlcicgPyBvcHRzLm1heERlcHRoIDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMuc3RhdCA9ICEhb3B0cy5zdGF0O1xuICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdHMuaWdub3JlO1xuICAgICAgICBpZiAodGhpcy53aXRoRmlsZVR5cGVzICYmIHRoaXMuYWJzb2x1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3Qgc2V0IGFic29sdXRlIGFuZCB3aXRoRmlsZVR5cGVzOnRydWUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUgPVxuICAgICAgICAgICAgISFvcHRzLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8XG4gICAgICAgICAgICAgICAgb3B0cy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gcC5yZXBsYWNlKC9cXFxcL2csICcvJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hdGNoQmFzZSkge1xuICAgICAgICAgICAgaWYgKG9wdHMubm9nbG9ic3Rhcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Jhc2UgbWF0Y2hpbmcgcmVxdWlyZXMgZ2xvYnN0YXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChwID0+IChwLmluY2x1ZGVzKCcvJykgPyBwIDogYC4vKiovJHtwfWApKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gb3B0cy5wbGF0Zm9ybSB8fCBkZWZhdWx0UGxhdGZvcm07XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0gfTtcbiAgICAgICAgaWYgKG9wdHMuc2N1cnJ5KSB7XG4gICAgICAgICAgICB0aGlzLnNjdXJyeSA9IG9wdHMuc2N1cnJ5O1xuICAgICAgICAgICAgaWYgKG9wdHMubm9jYXNlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBvcHRzLm5vY2FzZSAhPT0gb3B0cy5zY3Vycnkubm9jYXNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub2Nhc2Ugb3B0aW9uIGNvbnRyYWRpY3RzIHByb3ZpZGVkIHNjdXJyeSBvcHRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFNjdXJyeSA9IG9wdHMucGxhdGZvcm0gPT09ICd3aW4zMicgPyBwYXRoX3NjdXJyeV8xLlBhdGhTY3VycnlXaW4zMlxuICAgICAgICAgICAgICAgIDogb3B0cy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyBwYXRoX3NjdXJyeV8xLlBhdGhTY3VycnlEYXJ3aW5cbiAgICAgICAgICAgICAgICAgICAgOiBvcHRzLnBsYXRmb3JtID8gcGF0aF9zY3VycnlfMS5QYXRoU2N1cnJ5UG9zaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcGF0aF9zY3VycnlfMS5QYXRoU2N1cnJ5O1xuICAgICAgICAgICAgdGhpcy5zY3VycnkgPSBuZXcgU2N1cnJ5KHRoaXMuY3dkLCB7XG4gICAgICAgICAgICAgICAgbm9jYXNlOiBvcHRzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBmczogb3B0cy5mcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9jYXNlID0gdGhpcy5zY3Vycnkubm9jYXNlO1xuICAgICAgICAvLyBJZiB5b3UgZG8gbm9jYXNlOnRydWUgb24gYSBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5c3RlbSwgdGhlblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHVzZSByZWdleHBzIGluc3RlYWQgb2Ygc3RyaW5ncyBmb3Igbm9uLW1hZ2ljXG4gICAgICAgIC8vIHBhdGggcG9ydGlvbnMsIGJlY2F1c2Ugc3RhdHRpbmcgYGFCY2Agd29uJ3QgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgLy8gZm9yIHRoZSBmaWxlIGBBYkNgIGZvciBleGFtcGxlLlxuICAgICAgICBjb25zdCBub2Nhc2VNYWdpY09ubHkgPSB0aGlzLnBsYXRmb3JtID09PSAnZGFyd2luJyB8fCB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICBjb25zdCBtbW8gPSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IG5vY2FzZSBiYXNlZCBvbiBwbGF0Zm9ybVxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIGRvdDogdGhpcy5kb3QsXG4gICAgICAgICAgICBtYXRjaEJhc2U6IHRoaXMubWF0Y2hCYXNlLFxuICAgICAgICAgICAgbm9icmFjZTogdGhpcy5ub2JyYWNlLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIG5vY2FzZU1hZ2ljT25seSxcbiAgICAgICAgICAgIG5vY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIG5vZXh0OiB0aGlzLm5vZXh0LFxuICAgICAgICAgICAgbm9uZWdhdGU6IHRydWUsXG4gICAgICAgICAgICBvcHRpbWl6YXRpb25MZXZlbDogMixcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgd2luZG93c1BhdGhzTm9Fc2NhcGU6IHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUsXG4gICAgICAgICAgICBkZWJ1ZzogISF0aGlzLm9wdHMuZGVidWcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1tcyA9IHRoaXMucGF0dGVybi5tYXAocCA9PiBuZXcgbWluaW1hdGNoXzEuTWluaW1hdGNoKHAsIG1tbykpO1xuICAgICAgICBjb25zdCBbbWF0Y2hTZXQsIGdsb2JQYXJ0c10gPSBtbXMucmVkdWNlKChzZXQsIG0pID0+IHtcbiAgICAgICAgICAgIHNldFswXS5wdXNoKC4uLm0uc2V0KTtcbiAgICAgICAgICAgIHNldFsxXS5wdXNoKC4uLm0uZ2xvYlBhcnRzKTtcbiAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgIH0sIFtbXSwgW11dKTtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IG1hdGNoU2V0Lm1hcCgoc2V0LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnID0gZ2xvYlBhcnRzW2ldO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIWcpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhdHRlcm4gb2JqZWN0Jyk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBwYXR0ZXJuX2pzXzEuUGF0dGVybihzZXQsIGcsIDAsIHRoaXMucGxhdGZvcm0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgLy8gV2Fsa2VycyBhbHdheXMgcmV0dXJuIGFycmF5IG9mIFBhdGggb2JqZWN0cywgc28gd2UganVzdCBoYXZlIHRvXG4gICAgICAgIC8vIGNvZXJjZSB0aGVtIGludG8gdGhlIHJpZ2h0IHNoYXBlLiAgSXQgd2lsbCBoYXZlIGFscmVhZHkgY2FsbGVkXG4gICAgICAgIC8vIHJlYWxwYXRoKCkgaWYgdGhlIG9wdGlvbiB3YXMgc2V0IHRvIGRvIHNvLCBzbyB3ZSBrbm93IHRoYXQncyBjYWNoZWQuXG4gICAgICAgIC8vIHN0YXJ0IG91dCBrbm93aW5nIHRoZSBjd2QsIGF0IGxlYXN0XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi4oYXdhaXQgbmV3IHdhbGtlcl9qc18xLkdsb2JXYWxrZXIodGhpcy5wYXR0ZXJucywgdGhpcy5zY3VycnkuY3dkLCB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF4RGVwdGggKyB0aGlzLnNjdXJyeS5jd2QuZGVwdGgoKVxuICAgICAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIG5vY2FzZTogdGhpcy5ub2Nhc2UsXG4gICAgICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICAgICAgfSkud2FsaygpKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5uZXcgd2Fsa2VyX2pzXzEuR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrU3luYygpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBuZXcgd2Fsa2VyX2pzXzEuR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtKCk7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgd2Fsa2VyX2pzXzEuR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHN5bmMgaXRlcmF0aW9uIGZ1bmN0aW9uLiBSZXR1cm5zIGEgR2VuZXJhdG9yIHRoYXRcbiAgICAgKiBpdGVyYXRlcyBvdmVyIHRoZSByZXN1bHRzLlxuICAgICAqL1xuICAgIGl0ZXJhdGVTeW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW1TeW5jKClbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZVN5bmMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBhc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYW4gQXN5bmNHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtKClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdGUoKTtcbiAgICB9XG59XG5leHBvcnRzLkdsb2IgPSBHbG9iO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2xvYi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5oYXNNYWdpYyA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIHBhdHRlcm5zIHByb3ZpZGVkIGNvbnRhaW4gYW55IG1hZ2ljIGdsb2IgY2hhcmFjdGVycyxcbiAqIGdpdmVuIHRoZSBvcHRpb25zIHByb3ZpZGVkLlxuICpcbiAqIEJyYWNlIGV4cGFuc2lvbiBpcyBub3QgY29uc2lkZXJlZCBcIm1hZ2ljXCIgdW5sZXNzIHRoZSBgbWFnaWNhbEJyYWNlc2Agb3B0aW9uXG4gKiBpcyBzZXQsIGFzIGJyYWNlIGV4cGFuc2lvbiBqdXN0IHR1cm5zIG9uZSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogU28gYSBwYXR0ZXJuIGxpa2UgYCd4e2EsYn15J2Agd291bGQgcmV0dXJuIGBmYWxzZWAsIGJlY2F1c2UgYCd4YXknYCBhbmRcbiAqIGAneGJ5J2AgYm90aCBkbyBub3QgY29udGFpbiBhbnkgbWFnaWMgZ2xvYiBjaGFyYWN0ZXJzLCBhbmQgaXQncyB0cmVhdGVkIHRoZVxuICogc2FtZSBhcyBpZiB5b3UgaGFkIGNhbGxlZCBpdCBvbiBgWyd4YXknLCAneGJ5J11gLiBXaGVuIGBtYWdpY2FsQnJhY2VzOnRydWVgXG4gKiBpcyBpbiB0aGUgb3B0aW9ucywgYnJhY2UgZXhwYW5zaW9uIF9pc18gdHJlYXRlZCBhcyBhIHBhdHRlcm4gaGF2aW5nIG1hZ2ljLlxuICovXG5jb25zdCBoYXNNYWdpYyA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF0dGVybikpIHtcbiAgICAgICAgcGF0dGVybiA9IFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwIG9mIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKG5ldyBtaW5pbWF0Y2hfMS5NaW5pbWF0Y2gocCwgb3B0aW9ucykuaGFzTWFnaWMoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0cy5oYXNNYWdpYyA9IGhhc01hZ2ljO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLW1hZ2ljLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdsb2IgPSBleHBvcnRzLnN5bmMgPSBleHBvcnRzLml0ZXJhdGUgPSBleHBvcnRzLml0ZXJhdGVTeW5jID0gZXhwb3J0cy5zdHJlYW0gPSBleHBvcnRzLnN0cmVhbVN5bmMgPSBleHBvcnRzLklnbm9yZSA9IGV4cG9ydHMuaGFzTWFnaWMgPSBleHBvcnRzLkdsb2IgPSBleHBvcnRzLnVuZXNjYXBlID0gZXhwb3J0cy5lc2NhcGUgPSB2b2lkIDA7XG5leHBvcnRzLmdsb2JTdHJlYW1TeW5jID0gZ2xvYlN0cmVhbVN5bmM7XG5leHBvcnRzLmdsb2JTdHJlYW0gPSBnbG9iU3RyZWFtO1xuZXhwb3J0cy5nbG9iU3luYyA9IGdsb2JTeW5jO1xuZXhwb3J0cy5nbG9iSXRlcmF0ZVN5bmMgPSBnbG9iSXRlcmF0ZVN5bmM7XG5leHBvcnRzLmdsb2JJdGVyYXRlID0gZ2xvYkl0ZXJhdGU7XG5jb25zdCBtaW5pbWF0Y2hfMSA9IHJlcXVpcmUoXCJtaW5pbWF0Y2hcIik7XG5jb25zdCBnbG9iX2pzXzEgPSByZXF1aXJlKFwiLi9nbG9iLmpzXCIpO1xuY29uc3QgaGFzX21hZ2ljX2pzXzEgPSByZXF1aXJlKFwiLi9oYXMtbWFnaWMuanNcIik7XG52YXIgbWluaW1hdGNoXzIgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXNjYXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtaW5pbWF0Y2hfMi5lc2NhcGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmVzY2FwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWluaW1hdGNoXzIudW5lc2NhcGU7IH0gfSk7XG52YXIgZ2xvYl9qc18yID0gcmVxdWlyZShcIi4vZ2xvYi5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdsb2JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdsb2JfanNfMi5HbG9iOyB9IH0pO1xudmFyIGhhc19tYWdpY19qc18yID0gcmVxdWlyZShcIi4vaGFzLW1hZ2ljLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGFzTWFnaWNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGhhc19tYWdpY19qc18yLmhhc01hZ2ljOyB9IH0pO1xudmFyIGlnbm9yZV9qc18xID0gcmVxdWlyZShcIi4vaWdub3JlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSWdub3JlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpZ25vcmVfanNfMS5JZ25vcmU7IH0gfSk7XG5mdW5jdGlvbiBnbG9iU3RyZWFtU3luYyhwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IGdsb2JfanNfMS5HbG9iKHBhdHRlcm4sIG9wdGlvbnMpLnN0cmVhbVN5bmMoKTtcbn1cbmZ1bmN0aW9uIGdsb2JTdHJlYW0ocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5zdHJlYW0oKTtcbn1cbmZ1bmN0aW9uIGdsb2JTeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykud2Fsa1N5bmMoKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdsb2JfKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykud2FsaygpO1xufVxuZnVuY3Rpb24gZ2xvYkl0ZXJhdGVTeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykuaXRlcmF0ZVN5bmMoKTtcbn1cbmZ1bmN0aW9uIGdsb2JJdGVyYXRlKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykuaXRlcmF0ZSgpO1xufVxuLy8gYWxpYXNlczogZ2xvYi5zeW5jLnN0cmVhbSgpIGdsb2Iuc3RyZWFtLnN5bmMoKSBnbG9iLnN5bmMoKSBldGNcbmV4cG9ydHMuc3RyZWFtU3luYyA9IGdsb2JTdHJlYW1TeW5jO1xuZXhwb3J0cy5zdHJlYW0gPSBPYmplY3QuYXNzaWduKGdsb2JTdHJlYW0sIHsgc3luYzogZ2xvYlN0cmVhbVN5bmMgfSk7XG5leHBvcnRzLml0ZXJhdGVTeW5jID0gZ2xvYkl0ZXJhdGVTeW5jO1xuZXhwb3J0cy5pdGVyYXRlID0gT2JqZWN0LmFzc2lnbihnbG9iSXRlcmF0ZSwge1xuICAgIHN5bmM6IGdsb2JJdGVyYXRlU3luYyxcbn0pO1xuZXhwb3J0cy5zeW5jID0gT2JqZWN0LmFzc2lnbihnbG9iU3luYywge1xuICAgIHN0cmVhbTogZ2xvYlN0cmVhbVN5bmMsXG4gICAgaXRlcmF0ZTogZ2xvYkl0ZXJhdGVTeW5jLFxufSk7XG5leHBvcnRzLmdsb2IgPSBPYmplY3QuYXNzaWduKGdsb2JfLCB7XG4gICAgZ2xvYjogZ2xvYl8sXG4gICAgZ2xvYlN5bmMsXG4gICAgc3luYzogZXhwb3J0cy5zeW5jLFxuICAgIGdsb2JTdHJlYW0sXG4gICAgc3RyZWFtOiBleHBvcnRzLnN0cmVhbSxcbiAgICBnbG9iU3RyZWFtU3luYyxcbiAgICBzdHJlYW1TeW5jOiBleHBvcnRzLnN0cmVhbVN5bmMsXG4gICAgZ2xvYkl0ZXJhdGUsXG4gICAgaXRlcmF0ZTogZXhwb3J0cy5pdGVyYXRlLFxuICAgIGdsb2JJdGVyYXRlU3luYyxcbiAgICBpdGVyYXRlU3luYzogZXhwb3J0cy5pdGVyYXRlU3luYyxcbiAgICBHbG9iOiBnbG9iX2pzXzEuR2xvYixcbiAgICBoYXNNYWdpYzogaGFzX21hZ2ljX2pzXzEuaGFzTWFnaWMsXG4gICAgZXNjYXBlOiBtaW5pbWF0Y2hfMS5lc2NhcGUsXG4gICAgdW5lc2NhcGU6IG1pbmltYXRjaF8xLnVuZXNjYXBlLFxufSk7XG5leHBvcnRzLmdsb2IuZ2xvYiA9IGV4cG9ydHMuZ2xvYjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqXG4gKiBhcmNoaXZlci11dGlsc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xudmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG52YXIgZmxhdHRlbiA9IHJlcXVpcmUoJ2xvZGFzaC9mbGF0dGVuJyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC9kaWZmZXJlbmNlJyk7XG52YXIgdW5pb24gPSByZXF1aXJlKCdsb2Rhc2gvdW5pb24nKTtcbnZhciBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnbG9kYXNoL2lzUGxhaW5PYmplY3QnKTtcblxudmFyIGdsb2IgPSByZXF1aXJlKCdnbG9iJyk7XG5cbnZhciBmaWxlID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxudmFyIHBhdGhTZXBhcmF0b3JSZSA9IC9bXFwvXFxcXF0vZztcblxuLy8gUHJvY2VzcyBzcGVjaWZpZWQgd2lsZGNhcmQgZ2xvYiBwYXR0ZXJucyBvciBmaWxlbmFtZXMgYWdhaW5zdCBhXG4vLyBjYWxsYmFjaywgZXhjbHVkaW5nIGFuZCB1bmlxdWluZyBmaWxlcyBpbiB0aGUgcmVzdWx0IHNldC5cbnZhciBwcm9jZXNzUGF0dGVybnMgPSBmdW5jdGlvbihwYXR0ZXJucywgZm4pIHtcbiAgLy8gRmlsZXBhdGhzIHRvIHJldHVybi5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAvLyBJdGVyYXRlIG92ZXIgZmxhdHRlbmVkIHBhdHRlcm5zIGFycmF5LlxuICBmbGF0dGVuKHBhdHRlcm5zKS5mb3JFYWNoKGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgICAvLyBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzICEgaXQgc2hvdWxkIGJlIG9taXR0ZWRcbiAgICB2YXIgZXhjbHVzaW9uID0gcGF0dGVybi5pbmRleE9mKCchJykgPT09IDA7XG4gICAgLy8gSWYgdGhlIHBhdHRlcm4gaXMgYW4gZXhjbHVzaW9uLCByZW1vdmUgdGhlICFcbiAgICBpZiAoZXhjbHVzaW9uKSB7IHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKDEpOyB9XG4gICAgLy8gRmluZCBhbGwgbWF0Y2hpbmcgZmlsZXMgZm9yIHRoaXMgcGF0dGVybi5cbiAgICB2YXIgbWF0Y2hlcyA9IGZuKHBhdHRlcm4pO1xuICAgIGlmIChleGNsdXNpb24pIHtcbiAgICAgIC8vIElmIGFuIGV4Y2x1c2lvbiwgcmVtb3ZlIG1hdGNoaW5nIGZpbGVzLlxuICAgICAgcmVzdWx0ID0gZGlmZmVyZW5jZShyZXN1bHQsIG1hdGNoZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgYWRkIG1hdGNoaW5nIGZpbGVzLlxuICAgICAgcmVzdWx0ID0gdW5pb24ocmVzdWx0LCBtYXRjaGVzKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVHJ1ZSBpZiB0aGUgZmlsZSBwYXRoIGV4aXN0cy5cbmZpbGUuZXhpc3RzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaWxlcGF0aCA9IHBhdGguam9pbi5hcHBseShwYXRoLCBhcmd1bWVudHMpO1xuICByZXR1cm4gZnMuZXhpc3RzU3luYyhmaWxlcGF0aCk7XG59O1xuXG4vLyBSZXR1cm4gYW4gYXJyYXkgb2YgYWxsIGZpbGUgcGF0aHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gd2lsZGNhcmQgcGF0dGVybnMuXG5maWxlLmV4cGFuZCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgLy8gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbnMgb2JqZWN0LCBzYXZlIHRob3NlIG9wdGlvbnMgdG8gcGFzc1xuICAvLyBpbnRvIHRoZSBGaWxlLnByb3RvdHlwZS5nbG9iLnN5bmMgbWV0aG9kLlxuICB2YXIgb3B0aW9ucyA9IGlzUGxhaW5PYmplY3QoYXJnc1swXSkgPyBhcmdzLnNoaWZ0KCkgOiB7fTtcbiAgLy8gVXNlIHRoZSBmaXJzdCBhcmd1bWVudCBpZiBpdCdzIGFuIEFycmF5LCBvdGhlcndpc2UgY29udmVydCB0aGUgYXJndW1lbnRzXG4gIC8vIG9iamVjdCB0byBhbiBhcnJheSBhbmQgdXNlIHRoYXQuXG4gIHZhciBwYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkoYXJnc1swXSkgPyBhcmdzWzBdIDogYXJncztcbiAgLy8gUmV0dXJuIGVtcHR5IHNldCBpZiB0aGVyZSBhcmUgbm8gcGF0dGVybnMgb3IgZmlsZXBhdGhzLlxuICBpZiAocGF0dGVybnMubGVuZ3RoID09PSAwKSB7IHJldHVybiBbXTsgfVxuICAvLyBSZXR1cm4gYWxsIG1hdGNoaW5nIGZpbGVwYXRocy5cbiAgdmFyIG1hdGNoZXMgPSBwcm9jZXNzUGF0dGVybnMocGF0dGVybnMsIGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgICAvLyBGaW5kIGFsbCBtYXRjaGluZyBmaWxlcyBmb3IgdGhpcyBwYXR0ZXJuLlxuICAgIHJldHVybiBnbG9iLnN5bmMocGF0dGVybiwgb3B0aW9ucyk7XG4gIH0pO1xuICAvLyBGaWx0ZXIgcmVzdWx0IHNldD9cbiAgaWYgKG9wdGlvbnMuZmlsdGVyKSB7XG4gICAgbWF0Y2hlcyA9IG1hdGNoZXMuZmlsdGVyKGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gICAgICBmaWxlcGF0aCA9IHBhdGguam9pbihvcHRpb25zLmN3ZCB8fCAnJywgZmlsZXBhdGgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmZpbHRlcihmaWxlcGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGZpbGUgaXMgb2YgdGhlIHJpZ2h0IHR5cGUgYW5kIGV4aXN0cywgdGhpcyBzaG91bGQgd29yay5cbiAgICAgICAgICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZXBhdGgpW29wdGlvbnMuZmlsdGVyXSgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpdCdzIHByb2JhYmx5IG5vdCB0aGUgcmlnaHQgdHlwZS5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufTtcblxuLy8gQnVpbGQgYSBtdWx0aSB0YXNrIFwiZmlsZXNcIiBvYmplY3QgZHluYW1pY2FsbHkuXG5maWxlLmV4cGFuZE1hcHBpbmcgPSBmdW5jdGlvbihwYXR0ZXJucywgZGVzdEJhc2UsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHJlbmFtZTogZnVuY3Rpb24oZGVzdEJhc2UsIGRlc3RQYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aC5qb2luKGRlc3RCYXNlIHx8ICcnLCBkZXN0UGF0aCk7XG4gICAgfVxuICB9LCBvcHRpb25zKTtcbiAgdmFyIGZpbGVzID0gW107XG4gIHZhciBmaWxlQnlEZXN0ID0ge307XG4gIC8vIEZpbmQgYWxsIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4sIHVzaW5nIHBhc3NlZC1pbiBvcHRpb25zLlxuICBmaWxlLmV4cGFuZChvcHRpb25zLCBwYXR0ZXJucykuZm9yRWFjaChmdW5jdGlvbihzcmMpIHtcbiAgICB2YXIgZGVzdFBhdGggPSBzcmM7XG4gICAgLy8gRmxhdHRlbj9cbiAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICBkZXN0UGF0aCA9IHBhdGguYmFzZW5hbWUoZGVzdFBhdGgpO1xuICAgIH1cbiAgICAvLyBDaGFuZ2UgdGhlIGV4dGVuc2lvbj9cbiAgICBpZiAob3B0aW9ucy5leHQpIHtcbiAgICAgIGRlc3RQYXRoID0gZGVzdFBhdGgucmVwbGFjZSgvKFxcLlteXFwvXSopPyQvLCBvcHRpb25zLmV4dCk7XG4gICAgfVxuICAgIC8vIEdlbmVyYXRlIGRlc3RpbmF0aW9uIGZpbGVuYW1lLlxuICAgIHZhciBkZXN0ID0gb3B0aW9ucy5yZW5hbWUoZGVzdEJhc2UsIGRlc3RQYXRoLCBvcHRpb25zKTtcbiAgICAvLyBQcmVwZW5kIGN3ZCB0byBzcmMgcGF0aCBpZiBuZWNlc3NhcnkuXG4gICAgaWYgKG9wdGlvbnMuY3dkKSB7IHNyYyA9IHBhdGguam9pbihvcHRpb25zLmN3ZCwgc3JjKTsgfVxuICAgIC8vIE5vcm1hbGl6ZSBmaWxlcGF0aHMgdG8gYmUgdW5peC1zdHlsZS5cbiAgICBkZXN0ID0gZGVzdC5yZXBsYWNlKHBhdGhTZXBhcmF0b3JSZSwgJy8nKTtcbiAgICBzcmMgPSBzcmMucmVwbGFjZShwYXRoU2VwYXJhdG9yUmUsICcvJyk7XG4gICAgLy8gTWFwIGNvcnJlY3Qgc3JjIHBhdGggdG8gZGVzdCBwYXRoLlxuICAgIGlmIChmaWxlQnlEZXN0W2Rlc3RdKSB7XG4gICAgICAvLyBJZiBkZXN0IGFscmVhZHkgZXhpc3RzLCBwdXNoIHRoaXMgc3JjIG9udG8gdGhhdCBkZXN0J3Mgc3JjIGFycmF5LlxuICAgICAgZmlsZUJ5RGVzdFtkZXN0XS5zcmMucHVzaChzcmMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IHNyYy1kZXN0IGZpbGUgbWFwcGluZyBvYmplY3QuXG4gICAgICBmaWxlcy5wdXNoKHtcbiAgICAgICAgc3JjOiBbc3JjXSxcbiAgICAgICAgZGVzdDogZGVzdCxcbiAgICAgIH0pO1xuICAgICAgLy8gQW5kIHN0b3JlIGEgcmVmZXJlbmNlIGZvciBsYXRlciB1c2UuXG4gICAgICBmaWxlQnlEZXN0W2Rlc3RdID0gZmlsZXNbZmlsZXMubGVuZ3RoIC0gMV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpbGVzO1xufTtcblxuLy8gcmV1c2luZyBiaXRzIG9mIGdydW50J3MgbXVsdGktdGFzayBzb3VyY2Ugbm9ybWFsaXphdGlvblxuZmlsZS5ub3JtYWxpemVGaWxlc0FycmF5ID0gZnVuY3Rpb24oZGF0YSkge1xuICB2YXIgZmlsZXMgPSBbXTtcblxuICBkYXRhLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHByb3A7XG4gICAgaWYgKCdzcmMnIGluIG9iaiB8fCAnZGVzdCcgaW4gb2JqKSB7XG4gICAgICBmaWxlcy5wdXNoKG9iaik7XG4gICAgfVxuICB9KTtcblxuICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZmlsZXMgPSBfKGZpbGVzKS5jaGFpbigpLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCEoJ3NyYycgaW4gb2JqKSB8fCAhb2JqLnNyYykgeyByZXR1cm47IH1cbiAgICAvLyBOb3JtYWxpemUgLnNyYyBwcm9wZXJ0aWVzIHRvIGZsYXR0ZW5lZCBhcnJheS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmouc3JjKSkge1xuICAgICAgb2JqLnNyYyA9IGZsYXR0ZW4ob2JqLnNyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5zcmMgPSBbb2JqLnNyY107XG4gICAgfVxuICB9KS5tYXAoZnVuY3Rpb24ob2JqKSB7XG4gICAgLy8gQnVpbGQgb3B0aW9ucyBvYmplY3QsIHJlbW92aW5nIHVud2FudGVkIHByb3BlcnRpZXMuXG4gICAgdmFyIGV4cGFuZE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgIGRlbGV0ZSBleHBhbmRPcHRpb25zLnNyYztcbiAgICBkZWxldGUgZXhwYW5kT3B0aW9ucy5kZXN0O1xuXG4gICAgLy8gRXhwYW5kIGZpbGUgbWFwcGluZ3MuXG4gICAgaWYgKG9iai5leHBhbmQpIHtcbiAgICAgIHJldHVybiBmaWxlLmV4cGFuZE1hcHBpbmcob2JqLnNyYywgb2JqLmRlc3QsIGV4cGFuZE9wdGlvbnMpLm1hcChmdW5jdGlvbihtYXBPYmopIHtcbiAgICAgICAgLy8gQ29weSBvYmogcHJvcGVydGllcyB0byByZXN1bHQuXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgICAgICAvLyBNYWtlIGEgY2xvbmUgb2YgdGhlIG9yaWcgb2JqIGF2YWlsYWJsZS5cbiAgICAgICAgcmVzdWx0Lm9yaWcgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgICAgICAvLyBTZXQgLnNyYyBhbmQgLmRlc3QsIHByb2Nlc3NpbmcgYm90aCBhcyB0ZW1wbGF0ZXMuXG4gICAgICAgIHJlc3VsdC5zcmMgPSBtYXBPYmouc3JjO1xuICAgICAgICByZXN1bHQuZGVzdCA9IG1hcE9iai5kZXN0O1xuICAgICAgICAvLyBSZW1vdmUgdW53YW50ZWQgcHJvcGVydGllcy5cbiAgICAgICAgWydleHBhbmQnLCAnY3dkJywgJ2ZsYXR0ZW4nLCAncmVuYW1lJywgJ2V4dCddLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgIGRlbGV0ZSByZXN1bHRbcHJvcF07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBvYmogcHJvcGVydGllcyB0byByZXN1bHQsIGFkZGluZyBhbiAub3JpZyBwcm9wZXJ0eS5cbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcbiAgICAvLyBNYWtlIGEgY2xvbmUgb2YgdGhlIG9yaWcgb2JqIGF2YWlsYWJsZS5cbiAgICByZXN1bHQub3JpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoJ3NyYycgaW4gcmVzdWx0KSB7XG4gICAgICAvLyBFeHBvc2UgYW4gZXhwYW5kLW9uLWRlbWFuZCBnZXR0ZXIgbWV0aG9kIGFzIC5zcmMuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCAnc3JjJywge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGZuKCkge1xuICAgICAgICAgIHZhciBzcmM7XG4gICAgICAgICAgaWYgKCEoJ3Jlc3VsdCcgaW4gZm4pKSB7XG4gICAgICAgICAgICBzcmMgPSBvYmouc3JjO1xuICAgICAgICAgICAgLy8gSWYgc3JjIGlzIGFuIGFycmF5LCBmbGF0dGVuIGl0LiBPdGhlcndpc2UsIG1ha2UgaXQgaW50byBhbiBhcnJheS5cbiAgICAgICAgICAgIHNyYyA9IEFycmF5LmlzQXJyYXkoc3JjKSA/IGZsYXR0ZW4oc3JjKSA6IFtzcmNdO1xuICAgICAgICAgICAgLy8gRXhwYW5kIHNyYyBmaWxlcywgbWVtb2l6aW5nIHJlc3VsdC5cbiAgICAgICAgICAgIGZuLnJlc3VsdCA9IGZpbGUuZXhwYW5kKGV4cGFuZE9wdGlvbnMsIHNyYyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmbi5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgnZGVzdCcgaW4gcmVzdWx0KSB7XG4gICAgICByZXN1bHQuZGVzdCA9IG9iai5kZXN0O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pLmZsYXR0ZW4oKS52YWx1ZSgpO1xuXG4gIHJldHVybiBmaWxlcztcbn07XG4iLAogICAgIi8qKlxuICogYXJjaGl2ZXItdXRpbHNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2hyaXMgVGFsa2luZ3Rvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL2FyY2hpdmVyLXV0aWxzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xudmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGlzU3RyZWFtID0gcmVxdWlyZSgnaXMtc3RyZWFtJyk7XG52YXIgbGF6eXN0cmVhbSA9IHJlcXVpcmUoJ2xhenlzdHJlYW0nKTtcbnZhciBub3JtYWxpemVQYXRoID0gcmVxdWlyZSgnbm9ybWFsaXplLXBhdGgnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJ2xvZGFzaC9kZWZhdWx0cycpO1xuXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuUGFzc1Rocm91Z2g7XG5cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge307XG51dGlscy5maWxlID0gcmVxdWlyZSgnLi9maWxlLmpzJyk7XG5cbnV0aWxzLmNvbGxlY3RTdHJlYW0gPSBmdW5jdGlvbihzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIHZhciBjb2xsZWN0aW9uID0gW107XG4gIHZhciBzaXplID0gMDtcblxuICBzb3VyY2Uub24oJ2Vycm9yJywgY2FsbGJhY2spO1xuXG4gIHNvdXJjZS5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgY29sbGVjdGlvbi5wdXNoKGNodW5rKTtcbiAgICBzaXplICs9IGNodW5rLmxlbmd0aDtcbiAgfSk7XG5cbiAgc291cmNlLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKHNpemUpO1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIGRhdGEuY29weShidWYsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYWxsYmFjayhudWxsLCBidWYpO1xuICB9KTtcbn07XG5cbnV0aWxzLmRhdGVpZnkgPSBmdW5jdGlvbihkYXRlaXNoKSB7XG4gIGRhdGVpc2ggPSBkYXRlaXNoIHx8IG5ldyBEYXRlKCk7XG5cbiAgaWYgKGRhdGVpc2ggaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgZGF0ZWlzaCA9IGRhdGVpc2g7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGVpc2ggPT09ICdzdHJpbmcnKSB7XG4gICAgZGF0ZWlzaCA9IG5ldyBEYXRlKGRhdGVpc2gpO1xuICB9IGVsc2Uge1xuICAgIGRhdGVpc2ggPSBuZXcgRGF0ZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGVpc2g7XG59O1xuXG4vLyB0aGlzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIGxvZGFzaCB2ZXJzaW9uXG51dGlscy5kZWZhdWx0cyA9IGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBndWFyZCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgYXJnc1swXSA9IGFyZ3NbMF0gfHwge307XG5cbiAgcmV0dXJuIGRlZmF1bHRzKC4uLmFyZ3MpO1xufTtcblxudXRpbHMuaXNTdHJlYW0gPSBmdW5jdGlvbihzb3VyY2UpIHtcbiAgcmV0dXJuIGlzU3RyZWFtKHNvdXJjZSk7XG59O1xuXG51dGlscy5sYXp5UmVhZFN0cmVhbSA9IGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gIHJldHVybiBuZXcgbGF6eXN0cmVhbS5SZWFkYWJsZShmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlcGF0aCk7XG4gIH0pO1xufTtcblxudXRpbHMubm9ybWFsaXplSW5wdXRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc291cmNlKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1N0cmVhbShzb3VyY2UpKSB7XG4gICAgLy8gQWx3YXlzIHBpcGUgdGhyb3VnaCBhIFBhc3NUaHJvdWdoIHN0cmVhbSB0byBndWFyYW50ZWUgcGF1c2luZyB0aGUgc3RyZWFtIGlmIGl0J3MgYWxyZWFkeSBmbG93aW5nLFxuICAgIC8vIHNpbmNlIGl0IHdpbGwgb25seSBiZSBwcm9jZXNzZWQgaW4gYSAoZGlzdGFudCkgZnV0dXJlIGl0ZXJhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcCwgYW5kIHdpbGwgbG9zZVxuICAgIC8vIGRhdGEgaWYgYWxyZWFkeSBmbG93aW5nIG5vdy5cbiAgICByZXR1cm4gc291cmNlLnBpcGUobmV3IFBhc3NUaHJvdWdoKCkpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbnV0aWxzLnNhbml0aXplUGF0aCA9IGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKGZpbGVwYXRoLCBmYWxzZSkucmVwbGFjZSgvXlxcdys6LywgJycpLnJlcGxhY2UoL14oXFwuXFwuXFwvfFxcLykrLywgJycpO1xufTtcblxudXRpbHMudHJhaWxpbmdTbGFzaEl0ID0gZnVuY3Rpb24oc3RyKSB7XG4gIHJldHVybiBzdHIuc2xpY2UoLTEpICE9PSAnLycgPyBzdHIgKyAnLycgOiBzdHI7XG59O1xuXG51dGlscy51bml4aWZ5UGF0aCA9IGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKGZpbGVwYXRoLCBmYWxzZSkucmVwbGFjZSgvXlxcdys6LywgJycpO1xufTtcblxudXRpbHMud2Fsa2RpciA9IGZ1bmN0aW9uKGRpcnBhdGgsIGJhc2UsIGNhbGxiYWNrKSB7XG4gIHZhciByZXN1bHRzID0gW107XG5cbiAgaWYgKHR5cGVvZiBiYXNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBiYXNlO1xuICAgIGJhc2UgPSBkaXJwYXRoO1xuICB9XG5cbiAgZnMucmVhZGRpcihkaXJwYXRoLCBmdW5jdGlvbihlcnIsIGxpc3QpIHtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGZpbGU7XG4gICAgdmFyIGZpbGVwYXRoO1xuXG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgfVxuXG4gICAgKGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmaWxlID0gbGlzdFtpKytdO1xuXG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgfVxuXG4gICAgICBmaWxlcGF0aCA9IHBhdGguam9pbihkaXJwYXRoLCBmaWxlKTtcblxuICAgICAgZnMuc3RhdChmaWxlcGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0cykge1xuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IGZpbGVwYXRoLFxuICAgICAgICAgIHJlbGF0aXZlOiBwYXRoLnJlbGF0aXZlKGJhc2UsIGZpbGVwYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyksXG4gICAgICAgICAgc3RhdHM6IHN0YXRzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzdGF0cyAmJiBzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgdXRpbHMud2Fsa2RpcihmaWxlcGF0aCwgYmFzZSwgZnVuY3Rpb24oZXJyLCByZXMpIHtcblx0ICAgIGlmKGVycil7XG5cdCAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuXHQgICAgfVxuXG4gICAgICAgICAgICByZXMuZm9yRWFjaChmdW5jdGlvbihkaXJFbnRyeSkge1xuICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZGlyRW50cnkpO1xuICAgICAgICAgICAgfSk7XG5cdFx0ICBcbiAgICAgICAgICAgIG5leHQoKTsgIFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgfSk7XG59O1xuIiwKICAgICIvKipcbiAqIEFyY2hpdmVyIENvcmVcbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5jb25zdCBFUlJPUl9DT0RFUyA9IHtcbiAgJ0FCT1JURUQnOiAnYXJjaGl2ZSB3YXMgYWJvcnRlZCcsXG4gICdESVJFQ1RPUllESVJQQVRIUkVRVUlSRUQnOiAnZGlyZXRvcnkgZGlycGF0aCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdESVJFQ1RPUllGVU5DVElPTklOVkFMSUREQVRBJzogJ2ludmFsaWQgZGF0YSByZXR1cm5lZCBieSBkaXJlY3RvcnkgY3VzdG9tIGRhdGEgZnVuY3Rpb24nLFxuICAnRU5UUllOQU1FUkVRVUlSRUQnOiAnZW50cnkgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdGSUxFRklMRVBBVEhSRVFVSVJFRCc6ICdmaWxlIGZpbGVwYXRoIGFyZ3VtZW50IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ0ZJTkFMSVpJTkcnOiAnYXJjaGl2ZSBhbHJlYWR5IGZpbmFsaXppbmcnLFxuICAnUVVFVUVDTE9TRUQnOiAncXVldWUgY2xvc2VkJyxcbiAgJ05PRU5ETUVUSE9EJzogJ25vIHN1aXRhYmxlIGZpbmFsaXplL2VuZCBtZXRob2QgZGVmaW5lZCBieSBtb2R1bGUnLFxuICAnRElSRUNUT1JZTk9UU1VQUE9SVEVEJzogJ3N1cHBvcnQgZm9yIGRpcmVjdG9yeSBlbnRyaWVzIG5vdCBkZWZpbmVkIGJ5IG1vZHVsZScsXG4gICdGT1JNQVRTRVQnOiAnYXJjaGl2ZSBmb3JtYXQgYWxyZWFkeSBzZXQnLFxuICAnSU5QVVRTVEVBTUJVRkZFUlJFUVVJUkVEJzogJ2lucHV0IHNvdXJjZSBtdXN0IGJlIHZhbGlkIFN0cmVhbSBvciBCdWZmZXIgaW5zdGFuY2UnLFxuICAnTU9EVUxFU0VUJzogJ21vZHVsZSBhbHJlYWR5IHNldCcsXG4gICdTWU1MSU5LTk9UU1VQUE9SVEVEJzogJ3N1cHBvcnQgZm9yIHN5bWxpbmsgZW50cmllcyBub3QgZGVmaW5lZCBieSBtb2R1bGUnLFxuICAnU1lNTElOS0ZJTEVQQVRIUkVRVUlSRUQnOiAnc3ltbGluayBmaWxlcGF0aCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdTWU1MSU5LVEFSR0VUUkVRVUlSRUQnOiAnc3ltbGluayB0YXJnZXQgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUnLFxuICAnRU5UUllOT1RTVVBQT1JURUQnOiAnZW50cnkgbm90IHN1cHBvcnRlZCdcbn07XG5cbmZ1bmN0aW9uIEFyY2hpdmVyRXJyb3IoY29kZSwgZGF0YSkge1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgLy90aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIHRoaXMubWVzc2FnZSA9IEVSUk9SX0NPREVTW2NvZGVdIHx8IGNvZGU7XG4gIHRoaXMuY29kZSA9IGNvZGU7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbnV0aWwuaW5oZXJpdHMoQXJjaGl2ZXJFcnJvciwgRXJyb3IpO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBBcmNoaXZlckVycm9yOyIsCiAgICAiLyoqXG4gKiBBcmNoaXZlciBDb3JlXG4gKlxuICogQGlnbm9yZVxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFfVxuICogQGNvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBnbG9iID0gcmVxdWlyZSgncmVhZGRpci1nbG9iJyk7XG52YXIgYXN5bmMgPSByZXF1aXJlKCdhc3luYycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ2FyY2hpdmVyLXV0aWxzJyk7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBBcmNoaXZlckVycm9yID0gcmVxdWlyZSgnLi9lcnJvcicpO1xudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpLlRyYW5zZm9ybTtcblxudmFyIHdpbjMyID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgVGhlIGFyY2hpdmUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSB7KENvcmVPcHRpb25zfFRyYW5zZm9ybU9wdGlvbnMpfSBvcHRpb25zIFNlZSBhbHNvIHtAbGluayBaaXBPcHRpb25zfSBhbmQge0BsaW5rIFRhck9wdGlvbnN9LlxuICovXG52YXIgQXJjaGl2ZXIgPSBmdW5jdGlvbihmb3JtYXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFyY2hpdmVyKSkge1xuICAgIHJldHVybiBuZXcgQXJjaGl2ZXIoZm9ybWF0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZm9ybWF0ICE9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSBmb3JtYXQ7XG4gICAgZm9ybWF0ID0gJ3ppcCc7XG4gIH1cblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gdXRpbC5kZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgaGlnaFdhdGVyTWFyazogMTAyNCAqIDEwMjQsXG4gICAgc3RhdENvbmN1cnJlbmN5OiA0XG4gIH0pO1xuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX2Zvcm1hdCA9IGZhbHNlO1xuICB0aGlzLl9tb2R1bGUgPSBmYWxzZTtcbiAgdGhpcy5fcGVuZGluZyA9IDA7XG4gIHRoaXMuX3BvaW50ZXIgPSAwO1xuXG4gIHRoaXMuX2VudHJpZXNDb3VudCA9IDA7XG4gIHRoaXMuX2VudHJpZXNQcm9jZXNzZWRDb3VudCA9IDA7XG4gIHRoaXMuX2ZzRW50cmllc1RvdGFsQnl0ZXMgPSAwO1xuICB0aGlzLl9mc0VudHJpZXNQcm9jZXNzZWRCeXRlcyA9IDA7XG5cbiAgdGhpcy5fcXVldWUgPSBhc3luYy5xdWV1ZSh0aGlzLl9vblF1ZXVlVGFzay5iaW5kKHRoaXMpLCAxKTtcbiAgdGhpcy5fcXVldWUuZHJhaW4odGhpcy5fb25RdWV1ZURyYWluLmJpbmQodGhpcykpO1xuXG4gIHRoaXMuX3N0YXRRdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX29uU3RhdFF1ZXVlVGFzay5iaW5kKHRoaXMpLCBvcHRpb25zLnN0YXRDb25jdXJyZW5jeSk7XG4gIHRoaXMuX3N0YXRRdWV1ZS5kcmFpbih0aGlzLl9vblF1ZXVlRHJhaW4uYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5fc3RhdGUgPSB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgZmluYWxpemU6IGZhbHNlLFxuICAgIGZpbmFsaXppbmc6IGZhbHNlLFxuICAgIGZpbmFsaXplZDogZmFsc2UsXG4gICAgbW9kdWxlUGlwZWQ6IGZhbHNlXG4gIH07XG5cbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xufTtcblxuaW5oZXJpdHMoQXJjaGl2ZXIsIFRyYW5zZm9ybSk7XG5cbi8qKlxuICogSW50ZXJuYWwgbG9naWMgZm9yIGBhYm9ydGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX2Fib3J0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3N0YXRlLmFib3J0ZWQgPSB0cnVlO1xuICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gIHRoaXMuX3N0YXRRdWV1ZS5raWxsKCk7XG5cbiAgaWYgKHRoaXMuX3F1ZXVlLmlkbGUoKSkge1xuICAgIHRoaXMuX3NodXRkb3duKCk7XG4gIH1cbn07XG5cbi8qKlxuICogSW50ZXJuYWwgaGVscGVyIGZvciBhcHBlbmRpbmcgZmlsZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge1N0cmluZ30gZmlsZXBhdGggVGhlIHNvdXJjZSBmaWxlcGF0aC5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBUaGUgZW50cnkgZGF0YS5cbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX2FwcGVuZCA9IGZ1bmN0aW9uKGZpbGVwYXRoLCBkYXRhKSB7XG4gIGRhdGEgPSBkYXRhIHx8IHt9O1xuXG4gIHZhciB0YXNrID0ge1xuICAgIHNvdXJjZTogbnVsbCxcbiAgICBmaWxlcGF0aDogZmlsZXBhdGhcbiAgfTtcblxuICBpZiAoIWRhdGEubmFtZSkge1xuICAgIGRhdGEubmFtZSA9IGZpbGVwYXRoO1xuICB9XG5cbiAgZGF0YS5zb3VyY2VQYXRoID0gZmlsZXBhdGg7XG4gIHRhc2suZGF0YSA9IGRhdGE7XG4gIHRoaXMuX2VudHJpZXNDb3VudCsrO1xuXG4gIGlmIChkYXRhLnN0YXRzICYmIGRhdGEuc3RhdHMgaW5zdGFuY2VvZiBmcy5TdGF0cykge1xuICAgIHRhc2sgPSB0aGlzLl91cGRhdGVRdWV1ZVRhc2tXaXRoU3RhdHModGFzaywgZGF0YS5zdGF0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGlmIChkYXRhLnN0YXRzLnNpemUpIHtcbiAgICAgICAgdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyArPSBkYXRhLnN0YXRzLnNpemU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2godGFzayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX3N0YXRRdWV1ZS5wdXNoKHRhc2spO1xuICB9XG59O1xuXG4vKipcbiAqIEludGVybmFsIGxvZ2ljIGZvciBgZmluYWxpemVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX3N0YXRlLmZpbmFsaXppbmcgPSB0cnVlO1xuXG4gIHRoaXMuX21vZHVsZUZpbmFsaXplKCk7XG5cbiAgdGhpcy5fc3RhdGUuZmluYWxpemluZyA9IGZhbHNlO1xuICB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhlIHZhcmlvdXMgc3RhdGUgdmFyaWFibGVzIHRvIGRldGVybWluZSBpZiB3ZSBjYW4gYGZpbmFsaXplYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tYXliZUZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplICYmIHRoaXMuX3BlbmRpbmcgPT09IDAgJiYgdGhpcy5fcXVldWUuaWRsZSgpICYmIHRoaXMuX3N0YXRRdWV1ZS5pZGxlKCkpIHtcbiAgICB0aGlzLl9maW5hbGl6ZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIGFuIGVudHJ5IHRvIHRoZSBtb2R1bGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBmaXJlcyAgQXJjaGl2ZXIjZW50cnlcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtKX0gc291cmNlXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGFcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlQXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIGNhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlLmFwcGVuZChzb3VyY2UsIGRhdGEsIGZ1bmN0aW9uKGVycikge1xuICAgIHRoaXMuX3Rhc2sgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICAgIHRoaXMuX3NodXRkb3duKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGVudHJ5J3MgaW5wdXQgaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBhcHBlbmRlZCB0byB0aGUgYXJjaGl2ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBBcmNoaXZlciNlbnRyeVxuICAgICAqIEB0eXBlIHtFbnRyeURhdGF9XG4gICAgICovXG4gICAgdGhpcy5lbWl0KCdlbnRyeScsIGRhdGEpO1xuICAgIHRoaXMuX2VudHJpZXNQcm9jZXNzZWRDb3VudCsrO1xuXG4gICAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5zdGF0cy5zaXplKSB7XG4gICAgICB0aGlzLl9mc0VudHJpZXNQcm9jZXNzZWRCeXRlcyArPSBkYXRhLnN0YXRzLnNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGV2ZW50IEFyY2hpdmVyI3Byb2dyZXNzXG4gICAgICogQHR5cGUge1Byb2dyZXNzRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywge1xuICAgICAgZW50cmllczoge1xuICAgICAgICB0b3RhbDogdGhpcy5fZW50cmllc0NvdW50LFxuICAgICAgICBwcm9jZXNzZWQ6IHRoaXMuX2VudHJpZXNQcm9jZXNzZWRDb3VudFxuICAgICAgfSxcbiAgICAgIGZzOiB7XG4gICAgICAgIHRvdGFsQnl0ZXM6IHRoaXMuX2ZzRW50cmllc1RvdGFsQnl0ZXMsXG4gICAgICAgIHByb2Nlc3NlZEJ5dGVzOiB0aGlzLl9mc0VudHJpZXNQcm9jZXNzZWRCeXRlc1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogRmluYWxpemVzIHRoZSBtb2R1bGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX21vZHVsZUZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2YgdGhpcy5fbW9kdWxlLmZpbmFsaXplID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fbW9kdWxlLmZpbmFsaXplKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX21vZHVsZS5lbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9tb2R1bGUuZW5kKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdOT0VORE1FVEhPRCcpKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQaXBlcyB0aGUgbW9kdWxlIHRvIG91ciBpbnRlcm5hbCBzdHJlYW0gd2l0aCBlcnJvciBidWJibGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlUGlwZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9tb2R1bGUub24oJ2Vycm9yJywgdGhpcy5fb25Nb2R1bGVFcnJvci5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fbW9kdWxlLnBpcGUodGhpcyk7XG4gIHRoaXMuX3N0YXRlLm1vZHVsZVBpcGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCBtb2R1bGUgc3VwcG9ydHMgYSBkZWZpbmVkIGZlYXR1cmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge1N0cmluZ30ga2V5XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX21vZHVsZVN1cHBvcnRzID0gZnVuY3Rpb24oa2V5KSB7XG4gIGlmICghdGhpcy5fbW9kdWxlLnN1cHBvcnRzIHx8ICF0aGlzLl9tb2R1bGUuc3VwcG9ydHNba2V5XSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9tb2R1bGUuc3VwcG9ydHNba2V5XTtcbn07XG5cbi8qKlxuICogVW5waXBlcyB0aGUgbW9kdWxlIGZyb20gb3VyIGludGVybmFsIHN0cmVhbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlVW5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX21vZHVsZS51bnBpcGUodGhpcyk7XG4gIHRoaXMuX3N0YXRlLm1vZHVsZVBpcGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZW50cnkgZGF0YSB3aXRoIGZhbGxiYWNrcyBmb3Iga2V5IHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gZGF0YVxuICogQHBhcmFtICB7ZnMuU3RhdHN9IHN0YXRzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbm9ybWFsaXplRW50cnlEYXRhID0gZnVuY3Rpb24oZGF0YSwgc3RhdHMpIHtcbiAgZGF0YSA9IHV0aWwuZGVmYXVsdHMoZGF0YSwge1xuICAgIHR5cGU6ICdmaWxlJyxcbiAgICBuYW1lOiBudWxsLFxuICAgIGRhdGU6IG51bGwsXG4gICAgbW9kZTogbnVsbCxcbiAgICBwcmVmaXg6IG51bGwsXG4gICAgc291cmNlUGF0aDogbnVsbCxcbiAgICBzdGF0czogZmFsc2VcbiAgfSk7XG5cbiAgaWYgKHN0YXRzICYmIGRhdGEuc3RhdHMgPT09IGZhbHNlKSB7XG4gICAgZGF0YS5zdGF0cyA9IHN0YXRzO1xuICB9XG5cbiAgdmFyIGlzRGlyID0gZGF0YS50eXBlID09PSAnZGlyZWN0b3J5JztcblxuICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhLnByZWZpeCA9PT0gJ3N0cmluZycgJiYgJycgIT09IGRhdGEucHJlZml4KSB7XG4gICAgICBkYXRhLm5hbWUgPSBkYXRhLnByZWZpeCArICcvJyArIGRhdGEubmFtZTtcbiAgICAgIGRhdGEucHJlZml4ID0gbnVsbDtcbiAgICB9XG5cbiAgICBkYXRhLm5hbWUgPSB1dGlsLnNhbml0aXplUGF0aChkYXRhLm5hbWUpO1xuXG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ3N5bWxpbmsnICYmIGRhdGEubmFtZS5zbGljZSgtMSkgPT09ICcvJykge1xuICAgICAgaXNEaXIgPSB0cnVlO1xuICAgICAgZGF0YS50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgfSBlbHNlIGlmIChpc0Rpcikge1xuICAgICAgZGF0YS5uYW1lICs9ICcvJztcbiAgICB9XG4gIH1cblxuICAvLyA1MTEgPT09IDA3Nzc7IDQ5MyA9PT0gMDc1NTsgNDM4ID09PSAwNjY2OyA0MjAgPT09IDA2NDRcbiAgaWYgKHR5cGVvZiBkYXRhLm1vZGUgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHdpbjMyKSB7XG4gICAgICBkYXRhLm1vZGUgJj0gNTExO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhLm1vZGUgJj0gNDA5NVxuICAgIH1cbiAgfSBlbHNlIGlmIChkYXRhLnN0YXRzICYmIGRhdGEubW9kZSA9PT0gbnVsbCkge1xuICAgIGlmICh3aW4zMikge1xuICAgICAgZGF0YS5tb2RlID0gZGF0YS5zdGF0cy5tb2RlICYgNTExO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhLm1vZGUgPSBkYXRhLnN0YXRzLm1vZGUgJiA0MDk1O1xuICAgIH1cblxuICAgIC8vIHN0YXQgaXNuJ3QgcmVsaWFibGUgb24gd2luZG93czsgZm9yY2UgMDc1NSBmb3IgZGlyXG4gICAgaWYgKHdpbjMyICYmIGlzRGlyKSB7XG4gICAgICBkYXRhLm1vZGUgPSA0OTM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRhdGEubW9kZSA9PT0gbnVsbCkge1xuICAgIGRhdGEubW9kZSA9IGlzRGlyID8gNDkzIDogNDIwO1xuICB9XG5cbiAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5kYXRlID09PSBudWxsKSB7XG4gICAgZGF0YS5kYXRlID0gZGF0YS5zdGF0cy5tdGltZTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhLmRhdGUgPSB1dGlsLmRhdGVpZnkoZGF0YS5kYXRlKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBFcnJvciBsaXN0ZW5lciB0aGF0IHJlLWVtaXRzIGVycm9yIG9uIHRvIG91ciBpbnRlcm5hbCBzdHJlYW0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX29uTW9kdWxlRXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgLyoqXG4gICAqIEBldmVudCBBcmNoaXZlciNlcnJvclxuICAgKiBAdHlwZSB7RXJyb3JEYXRhfVxuICAgKi9cbiAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGUgdmFyaW91cyBzdGF0ZSB2YXJpYWJsZXMgYWZ0ZXIgcXVldWUgaGFzIGRyYWluZWQgdG8gZGV0ZXJtaW5lIGlmXG4gKiB3ZSBuZWVkIHRvIGBmaW5hbGl6ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX29uUXVldWVEcmFpbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSAmJiB0aGlzLl9wZW5kaW5nID09PSAwICYmIHRoaXMuX3F1ZXVlLmlkbGUoKSAmJiB0aGlzLl9zdGF0UXVldWUuaWRsZSgpKSB7XG4gICAgdGhpcy5fZmluYWxpemUoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBcHBlbmRzIGVhY2ggcXVldWUgdGFzayB0byB0aGUgbW9kdWxlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhc2tcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25RdWV1ZVRhc2sgPSBmdW5jdGlvbih0YXNrLCBjYWxsYmFjaykge1xuICB2YXIgZnVsbENhbGxiYWNrID0gKCkgPT4ge1xuICAgIGlmKHRhc2suZGF0YS5jYWxsYmFjaykge1xuICAgICAgdGFzay5kYXRhLmNhbGxiYWNrKCk7XG4gICAgfVxuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIGZ1bGxDYWxsYmFjaygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX3Rhc2sgPSB0YXNrO1xuICB0aGlzLl9tb2R1bGVBcHBlbmQodGFzay5zb3VyY2UsIHRhc2suZGF0YSwgZnVsbENhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBmaWxlIHN0YXQgYW5kIHJlaW5qZWN0cyB0aGUgdGFzayBiYWNrIGludG8gdGhlIHF1ZXVlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhc2tcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25TdGF0UXVldWVUYXNrID0gZnVuY3Rpb24odGFzaywgY2FsbGJhY2spIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXppbmcgfHwgdGhpcy5fc3RhdGUuZmluYWxpemVkIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICBjYWxsYmFjaygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZzLmxzdGF0KHRhc2suZmlsZXBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdHMpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzLl9lbnRyaWVzQ291bnQtLTtcblxuICAgICAgLyoqXG4gICAgICAgKiBAZXZlbnQgQXJjaGl2ZXIjd2FybmluZ1xuICAgICAgICogQHR5cGUge0Vycm9yRGF0YX1cbiAgICAgICAqL1xuICAgICAgdGhpcy5lbWl0KCd3YXJuaW5nJywgZXJyKTtcbiAgICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGFzayA9IHRoaXMuX3VwZGF0ZVF1ZXVlVGFza1dpdGhTdGF0cyh0YXNrLCBzdGF0cyk7XG5cbiAgICBpZiAodGFzaykge1xuICAgICAgaWYgKHN0YXRzLnNpemUpIHtcbiAgICAgICAgdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyArPSBzdGF0cy5zaXplO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRhc2spO1xuICAgIH1cblxuICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIFVucGlwZXMgdGhlIG1vZHVsZSBhbmQgZW5kcyBvdXIgaW50ZXJuYWwgc3RyZWFtLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9tb2R1bGVVbnBpcGUoKTtcbiAgdGhpcy5lbmQoKTtcbn07XG5cbi8qKlxuICogVHJhY2tzIHRoZSBieXRlcyBlbWl0dGVkIGJ5IG91ciBpbnRlcm5hbCBzdHJlYW0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0J1ZmZlcn0gY2h1bmtcbiAqIEBwYXJhbSAge1N0cmluZ30gZW5jb2RpbmdcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBpZiAoY2h1bmspIHtcbiAgICB0aGlzLl9wb2ludGVyICs9IGNodW5rLmxlbmd0aDtcbiAgfVxuXG4gIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyBhbmQgbm9ybWFsaXplcyBhIHF1ZXVlIHRhc2sgdXNpbmcgc3RhdHMgZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7T2JqZWN0fSB0YXNrXG4gKiBAcGFyYW0gIHtmcy5TdGF0c30gc3RhdHNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl91cGRhdGVRdWV1ZVRhc2tXaXRoU3RhdHMgPSBmdW5jdGlvbih0YXNrLCBzdGF0cykge1xuICBpZiAoc3RhdHMuaXNGaWxlKCkpIHtcbiAgICB0YXNrLmRhdGEudHlwZSA9ICdmaWxlJztcbiAgICB0YXNrLmRhdGEuc291cmNlVHlwZSA9ICdzdHJlYW0nO1xuICAgIHRhc2suc291cmNlID0gdXRpbC5sYXp5UmVhZFN0cmVhbSh0YXNrLmZpbGVwYXRoKTtcbiAgfSBlbHNlIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpICYmIHRoaXMuX21vZHVsZVN1cHBvcnRzKCdkaXJlY3RvcnknKSkge1xuICAgIHRhc2suZGF0YS5uYW1lID0gdXRpbC50cmFpbGluZ1NsYXNoSXQodGFzay5kYXRhLm5hbWUpO1xuICAgIHRhc2suZGF0YS50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgdGFzay5kYXRhLnNvdXJjZVBhdGggPSB1dGlsLnRyYWlsaW5nU2xhc2hJdCh0YXNrLmZpbGVwYXRoKTtcbiAgICB0YXNrLmRhdGEuc291cmNlVHlwZSA9ICdidWZmZXInO1xuICAgIHRhc2suc291cmNlID0gQnVmZmVyLmNvbmNhdChbXSk7XG4gIH0gZWxzZSBpZiAoc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSAmJiB0aGlzLl9tb2R1bGVTdXBwb3J0cygnc3ltbGluaycpKSB7XG4gICAgdmFyIGxpbmtQYXRoID0gZnMucmVhZGxpbmtTeW5jKHRhc2suZmlsZXBhdGgpO1xuICAgIHZhciBkaXJOYW1lID0gcGF0aC5kaXJuYW1lKHRhc2suZmlsZXBhdGgpO1xuICAgIHRhc2suZGF0YS50eXBlID0gJ3N5bWxpbmsnO1xuICAgIHRhc2suZGF0YS5saW5rbmFtZSA9IHBhdGgucmVsYXRpdmUoZGlyTmFtZSwgcGF0aC5yZXNvbHZlKGRpck5hbWUsIGxpbmtQYXRoKSk7XG4gICAgdGFzay5kYXRhLnNvdXJjZVR5cGUgPSAnYnVmZmVyJztcbiAgICB0YXNrLnNvdXJjZSA9IEJ1ZmZlci5jb25jYXQoW10pO1xuICB9IGVsc2Uge1xuICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZTk9UU1VQUE9SVEVEJywgdGFzay5kYXRhKSk7XG4gICAgfSBlbHNlIGlmIChzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS05PVFNVUFBPUlRFRCcsIHRhc2suZGF0YSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBuZXcgQXJjaGl2ZXJFcnJvcignRU5UUllOT1RTVVBQT1JURUQnLCB0YXNrLmRhdGEpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRhc2suZGF0YSA9IHRoaXMuX25vcm1hbGl6ZUVudHJ5RGF0YSh0YXNrLmRhdGEsIHN0YXRzKTtcblxuICByZXR1cm4gdGFzaztcbn07XG5cbi8qKlxuICogQWJvcnRzIHRoZSBhcmNoaXZpbmcgcHJvY2VzcywgdGFraW5nIGEgYmVzdC1lZmZvcnQgYXBwcm9hY2gsIGJ5OlxuICpcbiAqIC0gcmVtb3ZpbmcgYW55IHBlbmRpbmcgcXVldWUgdGFza3NcbiAqIC0gYWxsb3dpbmcgYW55IGFjdGl2ZSBxdWV1ZSB3b3JrZXJzIHRvIGZpbmlzaFxuICogLSBkZXRhY2hpbmcgaW50ZXJuYWwgbW9kdWxlIHBpcGVzXG4gKiAtIGVuZGluZyBib3RoIHNpZGVzIG9mIHRoZSBUcmFuc2Zvcm0gc3RyZWFtXG4gKlxuICogSXQgd2lsbCBOT1QgZHJhaW4gYW55IHJlbWFpbmluZyBzb3VyY2VzLlxuICpcbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2Fib3J0KCk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYW4gaW5wdXQgc291cmNlICh0ZXh0IHN0cmluZywgYnVmZmVyLCBvciBzdHJlYW0pIHRvIHRoZSBpbnN0YW5jZS5cbiAqXG4gKiBXaGVuIHRoZSBpbnN0YW5jZSBoYXMgcmVjZWl2ZWQsIHByb2Nlc3NlZCwgYW5kIGVtaXR0ZWQgdGhlIGlucHV0LCB0aGUgYGVudHJ5YFxuICogZXZlbnQgaXMgZmlyZWQuXG4gKlxuICogQGZpcmVzICBBcmNoaXZlciNlbnRyeVxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW18U3RyaW5nKX0gc291cmNlIFRoZSBpbnB1dCBzb3VyY2UuXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGEgU2VlIGFsc28ge0BsaW5rIFppcEVudHJ5RGF0YX0gYW5kIHtAbGluayBUYXJFbnRyeURhdGF9LlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHNvdXJjZSwgZGF0YSkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignUVVFVUVDTE9TRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkYXRhID0gdGhpcy5fbm9ybWFsaXplRW50cnlEYXRhKGRhdGEpO1xuXG4gIGlmICh0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJyB8fCBkYXRhLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdFTlRSWU5BTUVSRVFVSVJFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdkaXJlY3RvcnknICYmICF0aGlzLl9tb2R1bGVTdXBwb3J0cygnZGlyZWN0b3J5JykpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0RJUkVDVE9SWU5PVFNVUFBPUlRFRCcsIHsgbmFtZTogZGF0YS5uYW1lIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNvdXJjZSA9IHV0aWwubm9ybWFsaXplSW5wdXRTb3VyY2Uoc291cmNlKTtcblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICBkYXRhLnNvdXJjZVR5cGUgPSAnYnVmZmVyJztcbiAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKHNvdXJjZSkpIHtcbiAgICBkYXRhLnNvdXJjZVR5cGUgPSAnc3RyZWFtJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0lOUFVUU1RFQU1CVUZGRVJSRVFVSVJFRCcsIHsgbmFtZTogZGF0YS5uYW1lIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2VudHJpZXNDb3VudCsrO1xuICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIHNvdXJjZTogc291cmNlXG4gIH0pO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIGEgZGlyZWN0b3J5IGFuZCBpdHMgZmlsZXMsIHJlY3Vyc2l2ZWx5LCBnaXZlbiBpdHMgZGlycGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRpcnBhdGggVGhlIHNvdXJjZSBkaXJlY3RvcnkgcGF0aC5cbiAqIEBwYXJhbSAge1N0cmluZ30gZGVzdHBhdGggVGhlIGRlc3RpbmF0aW9uIHBhdGggd2l0aGluIHRoZSBhcmNoaXZlLlxuICogQHBhcmFtICB7KEVudHJ5RGF0YXxGdW5jdGlvbil9IGRhdGEgU2VlIGFsc28gW1ppcEVudHJ5RGF0YV17QGxpbmsgWmlwRW50cnlEYXRhfSBhbmRcbiAqIFtUYXJFbnRyeURhdGFde0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZGlyZWN0b3J5ID0gZnVuY3Rpb24oZGlycGF0aCwgZGVzdHBhdGgsIGRhdGEpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1FVRVVFQ0xPU0VEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkaXJwYXRoICE9PSAnc3RyaW5nJyB8fCBkaXJwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZRElSUEFUSFJFUVVJUkVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fcGVuZGluZysrO1xuXG4gIGlmIChkZXN0cGF0aCA9PT0gZmFsc2UpIHtcbiAgICBkZXN0cGF0aCA9ICcnO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZXN0cGF0aCAhPT0gJ3N0cmluZycpe1xuICAgIGRlc3RwYXRoID0gZGlycGF0aDtcbiAgfVxuXG4gIHZhciBkYXRhRnVuY3Rpb24gPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZGF0YUZ1bmN0aW9uID0gZGF0YTtcbiAgICBkYXRhID0ge307XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgZGF0YSA9IHt9O1xuICB9XG5cbiAgdmFyIGdsb2JPcHRpb25zID0ge1xuICAgIHN0YXQ6IHRydWUsXG4gICAgZG90OiB0cnVlXG4gIH07XG5cbiAgZnVuY3Rpb24gb25HbG9iRW5kKCkge1xuICAgIHRoaXMuX3BlbmRpbmctLTtcbiAgICB0aGlzLl9tYXliZUZpbmFsaXplKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkdsb2JFcnJvcihlcnIpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYk1hdGNoKG1hdGNoKXtcbiAgICBnbG9iYmVyLnBhdXNlKCk7XG5cbiAgICB2YXIgaWdub3JlTWF0Y2ggPSBmYWxzZTtcbiAgICB2YXIgZW50cnlEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSk7XG4gICAgZW50cnlEYXRhLm5hbWUgPSBtYXRjaC5yZWxhdGl2ZTtcbiAgICBlbnRyeURhdGEucHJlZml4ID0gZGVzdHBhdGg7XG4gICAgZW50cnlEYXRhLnN0YXRzID0gbWF0Y2guc3RhdDtcbiAgICBlbnRyeURhdGEuY2FsbGJhY2sgPSBnbG9iYmVyLnJlc3VtZS5iaW5kKGdsb2JiZXIpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChkYXRhRnVuY3Rpb24pIHtcbiAgICAgICAgZW50cnlEYXRhID0gZGF0YUZ1bmN0aW9uKGVudHJ5RGF0YSk7XG5cbiAgICAgICAgaWYgKGVudHJ5RGF0YSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZ25vcmVNYXRjaCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5RGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZRlVOQ1RJT05JTlZBTElEREFUQScsIHsgZGlycGF0aDogZGlycGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2goZSkge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpZ25vcmVNYXRjaCkge1xuICAgICAgZ2xvYmJlci5yZXN1bWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBlbmQobWF0Y2guYWJzb2x1dGUsIGVudHJ5RGF0YSk7XG4gIH1cblxuICB2YXIgZ2xvYmJlciA9IGdsb2IoZGlycGF0aCwgZ2xvYk9wdGlvbnMpO1xuICBnbG9iYmVyLm9uKCdlcnJvcicsIG9uR2xvYkVycm9yLmJpbmQodGhpcykpO1xuICBnbG9iYmVyLm9uKCdtYXRjaCcsIG9uR2xvYk1hdGNoLmJpbmQodGhpcykpO1xuICBnbG9iYmVyLm9uKCdlbmQnLCBvbkdsb2JFbmQuYmluZCh0aGlzKSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYSBmaWxlIGdpdmVuIGl0cyBmaWxlcGF0aCB1c2luZyBhXG4gKiBbbGF6eXN0cmVhbV17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2pwb21tZXJlbmluZy9ub2RlLWxhenlzdHJlYW19IHdyYXBwZXIgdG9cbiAqIHByZXZlbnQgaXNzdWVzIHdpdGggb3BlbiBmaWxlIGxpbWl0cy5cbiAqXG4gKiBXaGVuIHRoZSBpbnN0YW5jZSBoYXMgcmVjZWl2ZWQsIHByb2Nlc3NlZCwgYW5kIGVtaXR0ZWQgdGhlIGZpbGUsIHRoZSBgZW50cnlgXG4gKiBldmVudCBpcyBmaXJlZC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZpbGVwYXRoIFRoZSBzb3VyY2UgZmlsZXBhdGguXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGEgU2VlIGFsc28gW1ppcEVudHJ5RGF0YV17QGxpbmsgWmlwRW50cnlEYXRhfSBhbmRcbiAqIFtUYXJFbnRyeURhdGFde0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZmlsZSA9IGZ1bmN0aW9uKGZpbGVwYXRoLCBkYXRhKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdRVUVVRUNMT1NFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmlsZXBhdGggIT09ICdzdHJpbmcnIHx8IGZpbGVwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRklMRUZJTEVQQVRIUkVRVUlSRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aGlzLl9hcHBlbmQoZmlsZXBhdGgsIGRhdGEpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIG11bHRpcGxlIGZpbGVzIHRoYXQgbWF0Y2ggYSBnbG9iIHBhdHRlcm4uXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBwYXR0ZXJuIFRoZSBbZ2xvYiBwYXR0ZXJuXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL21pbmltYXRjaH0gdG8gbWF0Y2guXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgU2VlIFtub2RlLXJlYWRkaXItZ2xvYl17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3lxbm4vbm9kZS1yZWFkZGlyLWdsb2Ijb3B0aW9uc30uXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGEgU2VlIGFsc28gW1ppcEVudHJ5RGF0YV17QGxpbmsgWmlwRW50cnlEYXRhfSBhbmRcbiAqIFtUYXJFbnRyeURhdGFde0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZ2xvYiA9IGZ1bmN0aW9uKHBhdHRlcm4sIG9wdGlvbnMsIGRhdGEpIHtcbiAgdGhpcy5fcGVuZGluZysrO1xuXG4gIG9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBzdGF0OiB0cnVlLFxuICAgIHBhdHRlcm46IHBhdHRlcm5cbiAgfSk7XG5cbiAgZnVuY3Rpb24gb25HbG9iRW5kKCkge1xuICAgIHRoaXMuX3BlbmRpbmctLTtcbiAgICB0aGlzLl9tYXliZUZpbmFsaXplKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkdsb2JFcnJvcihlcnIpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYk1hdGNoKG1hdGNoKXtcbiAgICBnbG9iYmVyLnBhdXNlKCk7XG4gICAgdmFyIGVudHJ5RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEpO1xuICAgIGVudHJ5RGF0YS5jYWxsYmFjayA9IGdsb2JiZXIucmVzdW1lLmJpbmQoZ2xvYmJlcik7XG4gICAgZW50cnlEYXRhLnN0YXRzID0gbWF0Y2guc3RhdDtcbiAgICBlbnRyeURhdGEubmFtZSA9IG1hdGNoLnJlbGF0aXZlO1xuXG4gICAgdGhpcy5fYXBwZW5kKG1hdGNoLmFic29sdXRlLCBlbnRyeURhdGEpO1xuICB9XG5cbiAgdmFyIGdsb2JiZXIgPSBnbG9iKG9wdGlvbnMuY3dkIHx8ICcuJywgb3B0aW9ucyk7XG4gIGdsb2JiZXIub24oJ2Vycm9yJywgb25HbG9iRXJyb3IuYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ21hdGNoJywgb25HbG9iTWF0Y2guYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ2VuZCcsIG9uR2xvYkVuZC5iaW5kKHRoaXMpKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRmluYWxpemVzIHRoZSBpbnN0YW5jZSBhbmQgcHJldmVudHMgZnVydGhlciBhcHBlbmRpbmcgdG8gdGhlIGFyY2hpdmVcbiAqIHN0cnVjdHVyZSAocXVldWUgd2lsbCBjb250aW51ZSB0aWwgZHJhaW5lZCkuXG4gKlxuICogVGhlIGBlbmRgLCBgY2xvc2VgIG9yIGBmaW5pc2hgIGV2ZW50cyBvbiB0aGUgZGVzdGluYXRpb24gc3RyZWFtIG1heSBmaXJlXG4gKiByaWdodCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIHNvIHlvdSBzaG91bGQgc2V0IGxpc3RlbmVycyBiZWZvcmVoYW5kIHRvXG4gKiBwcm9wZXJseSBkZXRlY3Qgc3RyZWFtIGNvbXBsZXRpb24uXG4gKlxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdmFyIGFib3J0ZWRFcnJvciA9IG5ldyBBcmNoaXZlckVycm9yKCdBQk9SVEVEJyk7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGFib3J0ZWRFcnJvcik7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGFib3J0ZWRFcnJvcik7XG4gIH1cblxuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUpIHtcbiAgICB2YXIgZmluYWxpemluZ0Vycm9yID0gbmV3IEFyY2hpdmVyRXJyb3IoJ0ZJTkFMSVpJTkcnKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZmluYWxpemluZ0Vycm9yKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZmluYWxpemluZ0Vycm9yKTtcbiAgfVxuXG4gIHRoaXMuX3N0YXRlLmZpbmFsaXplID0gdHJ1ZTtcblxuICBpZiAodGhpcy5fcGVuZGluZyA9PT0gMCAmJiB0aGlzLl9xdWV1ZS5pZGxlKCkgJiYgdGhpcy5fc3RhdFF1ZXVlLmlkbGUoKSkge1xuICAgIHRoaXMuX2ZpbmFsaXplKCk7XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBlcnJvcmVkO1xuXG4gICAgc2VsZi5fbW9kdWxlLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghZXJyb3JlZCkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSlcblxuICAgIHNlbGYuX21vZHVsZS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSlcbiAgfSlcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbW9kdWxlIGZvcm1hdCBuYW1lIHVzZWQgZm9yIGFyY2hpdmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IFRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuc2V0Rm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gIGlmICh0aGlzLl9mb3JtYXQpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0ZPUk1BVFNFVCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2Zvcm1hdCA9IGZvcm1hdDtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbW9kdWxlIHVzZWQgZm9yIGFyY2hpdmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2R1bGUgVGhlIGZ1bmN0aW9uIGZvciBhcmNoaXZlciB0byBpbnRlcmFjdCB3aXRoLlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLnNldE1vZHVsZSA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignQUJPUlRFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5tb2R1bGUpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ01PRFVMRVNFVCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX21vZHVsZSA9IG1vZHVsZTtcbiAgdGhpcy5fbW9kdWxlUGlwZSgpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIGEgc3ltbGluayB0byB0aGUgaW5zdGFuY2UuXG4gKlxuICogVGhpcyBkb2VzIE5PVCBpbnRlcmFjdCB3aXRoIGZpbGVzeXN0ZW0gYW5kIGlzIHVzZWQgZm9yIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRpbmcgc3ltbGlua3MuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBmaWxlcGF0aCBUaGUgc3ltbGluayBwYXRoICh3aXRoaW4gYXJjaGl2ZSkuXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHRhcmdldCBUaGUgdGFyZ2V0IHBhdGggKHdpdGhpbiBhcmNoaXZlKS5cbiAqIEBwYXJhbSAge051bWJlcn0gbW9kZSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5zeW1saW5rID0gZnVuY3Rpb24oZmlsZXBhdGgsIHRhcmdldCwgbW9kZSkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignUVVFVUVDTE9TRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAodHlwZW9mIGZpbGVwYXRoICE9PSAnc3RyaW5nJyB8fCBmaWxlcGF0aC5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1NZTUxJTktGSUxFUEFUSFJFUVVJUkVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdzdHJpbmcnIHx8IHRhcmdldC5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1NZTUxJTktUQVJHRVRSRVFVSVJFRCcsIHsgZmlsZXBhdGg6IGZpbGVwYXRoIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICghdGhpcy5fbW9kdWxlU3VwcG9ydHMoJ3N5bWxpbmsnKSkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS05PVFNVUFBPUlRFRCcsIHsgZmlsZXBhdGg6IGZpbGVwYXRoIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBkYXRhID0ge307XG4gIGRhdGEudHlwZSA9ICdzeW1saW5rJztcbiAgZGF0YS5uYW1lID0gZmlsZXBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBkYXRhLmxpbmtuYW1lID0gdGFyZ2V0LnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgZGF0YS5zb3VyY2VUeXBlID0gJ2J1ZmZlcic7XG5cbiAgaWYgKHR5cGVvZiBtb2RlID09PSBcIm51bWJlclwiKSB7XG4gICAgZGF0YS5tb2RlID0gbW9kZTtcbiAgfVxuXG4gIHRoaXMuX2VudHJpZXNDb3VudCsrO1xuICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIHNvdXJjZTogQnVmZmVyLmNvbmNhdChbXSlcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgbGVuZ3RoIChpbiBieXRlcykgdGhhdCBoYXMgYmVlbiBlbWl0dGVkLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLnBvaW50ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3BvaW50ZXI7XG59O1xuXG4vKipcbiAqIE1pZGRsZXdhcmUtbGlrZSBoZWxwZXIgdGhhdCBoYXMgeWV0IHRvIGJlIGZ1bGx5IGltcGxlbWVudGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gcGx1Z2luXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24ocGx1Z2luKSB7XG4gIHRoaXMuX3N0cmVhbXMucHVzaChwbHVnaW4pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXJjaGl2ZXI7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29yZU9wdGlvbnNcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbc3RhdENvbmN1cnJlbmN5PTRdIFNldHMgdGhlIG51bWJlciBvZiB3b3JrZXJzIHVzZWQgdG9cbiAqIHByb2Nlc3MgdGhlIGludGVybmFsIGZzIHN0YXQgcXVldWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUcmFuc2Zvcm1PcHRpb25zXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFthbGxvd0hhbGZPcGVuPXRydWVdIElmIHNldCB0byBmYWxzZSwgdGhlbiB0aGUgc3RyZWFtXG4gKiB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSByZWFkYWJsZSBzaWRlIHdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZW5kcyBhbmQgdmljZVxuICogdmVyc2EuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtyZWFkYWJsZU9iamVjdE1vZGU9ZmFsc2VdIFNldHMgb2JqZWN0TW9kZSBmb3IgcmVhZGFibGVcbiAqIHNpZGUgb2YgdGhlIHN0cmVhbS4gSGFzIG5vIGVmZmVjdCBpZiBvYmplY3RNb2RlIGlzIHRydWUuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFt3cml0YWJsZU9iamVjdE1vZGU9ZmFsc2VdIFNldHMgb2JqZWN0TW9kZSBmb3Igd3JpdGFibGVcbiAqIHNpZGUgb2YgdGhlIHN0cmVhbS4gSGFzIG5vIGVmZmVjdCBpZiBvYmplY3RNb2RlIGlzIHRydWUuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtkZWNvZGVTdHJpbmdzPXRydWVdIFdoZXRoZXIgb3Igbm90IHRvIGRlY29kZSBzdHJpbmdzXG4gKiBpbnRvIEJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byBfd3JpdGUoKS4gYFdyaXRhYmxlYFxuICogQHByb3BlcnR5IHtTdHJpbmd9IFtlbmNvZGluZz1OVUxMXSBJZiBzcGVjaWZpZWQsIHRoZW4gYnVmZmVycyB3aWxsIGJlIGRlY29kZWRcbiAqIHRvIHN0cmluZ3MgdXNpbmcgdGhlIHNwZWNpZmllZCBlbmNvZGluZy4gYFJlYWRhYmxlYFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFtoaWdoV2F0ZXJNYXJrPTE2a2JdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBzdG9yZVxuICogaW4gdGhlIGludGVybmFsIGJ1ZmZlciBiZWZvcmUgY2Vhc2luZyB0byByZWFkIGZyb20gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UuXG4gKiBgUmVhZGFibGVgIGBXcml0YWJsZWBcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW29iamVjdE1vZGU9ZmFsc2VdIFdoZXRoZXIgdGhpcyBzdHJlYW0gc2hvdWxkIGJlaGF2ZSBhcyBhXG4gKiBzdHJlYW0gb2Ygb2JqZWN0cy4gTWVhbmluZyB0aGF0IHN0cmVhbS5yZWFkKG4pIHJldHVybnMgYSBzaW5nbGUgdmFsdWUgaW5zdGVhZFxuICogb2YgYSBCdWZmZXIgb2Ygc2l6ZSBuLiBgUmVhZGFibGVgIGBXcml0YWJsZWBcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVudHJ5RGF0YVxuICogQHByb3BlcnR5IHtTdHJpbmd9IG5hbWUgU2V0cyB0aGUgZW50cnkgbmFtZSBpbmNsdWRpbmcgaW50ZXJuYWwgcGF0aC5cbiAqIEBwcm9wZXJ0eSB7KFN0cmluZ3xEYXRlKX0gW2RhdGU9Tk9XKCldIFNldHMgdGhlIGVudHJ5IGRhdGUuXG4gKiBAcHJvcGVydHkge051bWJlcn0gW21vZGU9RDowNzU1L0Y6MDY0NF0gU2V0cyB0aGUgZW50cnkgcGVybWlzc2lvbnMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gW3ByZWZpeF0gU2V0cyBhIHBhdGggcHJlZml4IGZvciB0aGUgZW50cnkgbmFtZS4gVXNlZnVsXG4gKiB3aGVuIHdvcmtpbmcgd2l0aCBtZXRob2RzIGxpa2UgYGRpcmVjdG9yeWAgb3IgYGdsb2JgLlxuICogQHByb3BlcnR5IHtmcy5TdGF0c30gW3N0YXRzXSBTZXRzIHRoZSBmcyBzdGF0IGRhdGEgZm9yIHRoaXMgZW50cnkgYWxsb3dpbmdcbiAqIGZvciByZWR1Y3Rpb24gb2YgZnMgc3RhdCBjYWxscyB3aGVuIHN0YXQgZGF0YSBpcyBhbHJlYWR5IGtub3duLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRXJyb3JEYXRhXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gY29kZSBUaGUgZXJyb3IgY29kZSBhc3NpZ25lZCB0byB0aGlzIGVycm9yLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGEgQWRkaXRpb25hbCBkYXRhIHByb3ZpZGVkIGZvciByZXBvcnRpbmcgb3IgZGVidWdnaW5nICh3aGVyZSBhdmFpbGFibGUpLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJvZ3Jlc3NEYXRhXG4gKiBAcHJvcGVydHkge09iamVjdH0gZW50cmllc1xuICogQHByb3BlcnR5IHtOdW1iZXJ9IGVudHJpZXMudG90YWwgTnVtYmVyIG9mIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gYXBwZW5kZWQuXG4gKiBAcHJvcGVydHkge051bWJlcn0gZW50cmllcy5wcm9jZXNzZWQgTnVtYmVyIG9mIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGZzXG4gKiBAcHJvcGVydHkge051bWJlcn0gZnMudG90YWxCeXRlcyBOdW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gYXBwZW5kZWQuIENhbGN1bGF0ZWQgYXN5bmNocm9ub3VzbHkgYW5kIG1pZ2h0IG5vdCBiZSBhY2N1cmF0ZTogaXQgZ3Jvd3RoIHdoaWxlIGVudHJpZXMgYXJlIGFkZGVkLiAoYmFzZWQgb24gZnMuU3RhdHMpXG4gKiBAcHJvcGVydHkge051bWJlcn0gZnMucHJvY2Vzc2VkQnl0ZXMgTnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gKGJhc2VkIG9uIGZzLlN0YXRzKVxuICovXG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgQXJjaGl2ZUVudHJ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFNpemUgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmdldExhc3RNb2RpZmllZERhdGUgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmlzRGlyZWN0b3J5ID0gZnVuY3Rpb24oKSB7fTsiLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgdXRpbCA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbnV0aWwuZGF0ZVRvRG9zID0gZnVuY3Rpb24oZCwgZm9yY2VMb2NhbFRpbWUpIHtcbiAgZm9yY2VMb2NhbFRpbWUgPSBmb3JjZUxvY2FsVGltZSB8fCBmYWxzZTtcblxuICB2YXIgeWVhciA9IGZvcmNlTG9jYWxUaW1lID8gZC5nZXRGdWxsWWVhcigpIDogZC5nZXRVVENGdWxsWWVhcigpO1xuXG4gIGlmICh5ZWFyIDwgMTk4MCkge1xuICAgIHJldHVybiAyMTYyNjg4OyAvLyAxOTgwLTEtMSAwMDowMDowMFxuICB9IGVsc2UgaWYgKHllYXIgPj0gMjA0NCkge1xuICAgIHJldHVybiAyMTQxMTc1Njc3OyAvLyAyMDQzLTEyLTMxIDIzOjU5OjU4XG4gIH1cblxuICB2YXIgdmFsID0ge1xuICAgIHllYXI6IHllYXIsXG4gICAgbW9udGg6IGZvcmNlTG9jYWxUaW1lID8gZC5nZXRNb250aCgpIDogZC5nZXRVVENNb250aCgpLFxuICAgIGRhdGU6IGZvcmNlTG9jYWxUaW1lID8gZC5nZXREYXRlKCkgOiBkLmdldFVUQ0RhdGUoKSxcbiAgICBob3VyczogZm9yY2VMb2NhbFRpbWUgPyBkLmdldEhvdXJzKCkgOiBkLmdldFVUQ0hvdXJzKCksXG4gICAgbWludXRlczogZm9yY2VMb2NhbFRpbWUgPyBkLmdldE1pbnV0ZXMoKSA6IGQuZ2V0VVRDTWludXRlcygpLFxuICAgIHNlY29uZHM6IGZvcmNlTG9jYWxUaW1lID8gZC5nZXRTZWNvbmRzKCkgOiBkLmdldFVUQ1NlY29uZHMoKVxuICB9O1xuXG4gIHJldHVybiAoKHZhbC55ZWFyIC0gMTk4MCkgPDwgMjUpIHwgKCh2YWwubW9udGggKyAxKSA8PCAyMSkgfCAodmFsLmRhdGUgPDwgMTYpIHxcbiAgICAodmFsLmhvdXJzIDw8IDExKSB8ICh2YWwubWludXRlcyA8PCA1KSB8ICh2YWwuc2Vjb25kcyAvIDIpO1xufTtcblxudXRpbC5kb3NUb0RhdGUgPSBmdW5jdGlvbihkb3MpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKCgoZG9zID4+IDI1KSAmIDB4N2YpICsgMTk4MCwgKChkb3MgPj4gMjEpICYgMHgwZikgLSAxLCAoZG9zID4+IDE2KSAmIDB4MWYsIChkb3MgPj4gMTEpICYgMHgxZiwgKGRvcyA+PiA1KSAmIDB4M2YsIChkb3MgJiAweDFmKSA8PCAxKTtcbn07XG5cbnV0aWwuZnJvbURvc1RpbWUgPSBmdW5jdGlvbihidWYpIHtcbiAgcmV0dXJuIHV0aWwuZG9zVG9EYXRlKGJ1Zi5yZWFkVUludDMyTEUoMCkpO1xufTtcblxudXRpbC5nZXRFaWdodEJ5dGVzID0gZnVuY3Rpb24odikge1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKDgpO1xuICBidWYud3JpdGVVSW50MzJMRSh2ICUgMHgwMTAwMDAwMDAwLCAwKTtcbiAgYnVmLndyaXRlVUludDMyTEUoKHYgLyAweDAxMDAwMDAwMDApIHwgMCwgNCk7XG5cbiAgcmV0dXJuIGJ1Zjtcbn07XG5cbnV0aWwuZ2V0U2hvcnRCeXRlcyA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgYnVmLndyaXRlVUludDE2TEUoKHYgJiAweEZGRkYpID4+PiAwLCAwKTtcblxuICByZXR1cm4gYnVmO1xufTtcblxudXRpbC5nZXRTaG9ydEJ5dGVzVmFsdWUgPSBmdW5jdGlvbihidWYsIG9mZnNldCkge1xuICByZXR1cm4gYnVmLnJlYWRVSW50MTZMRShvZmZzZXQpO1xufTtcblxudXRpbC5nZXRMb25nQnl0ZXMgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2MoNCk7XG4gIGJ1Zi53cml0ZVVJbnQzMkxFKCh2ICYgMHhGRkZGRkZGRikgPj4+IDAsIDApO1xuXG4gIHJldHVybiBidWY7XG59O1xuXG51dGlsLmdldExvbmdCeXRlc1ZhbHVlID0gZnVuY3Rpb24oYnVmLCBvZmZzZXQpIHtcbiAgcmV0dXJuIGJ1Zi5yZWFkVUludDMyTEUob2Zmc2V0KTtcbn07XG5cbnV0aWwudG9Eb3NUaW1lID0gZnVuY3Rpb24oZCkge1xuICByZXR1cm4gdXRpbC5nZXRMb25nQnl0ZXModXRpbC5kYXRlVG9Eb3MoZCkpO1xufTsiLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgemlwVXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgREFUQV9ERVNDUklQVE9SX0ZMQUcgPSAxIDw8IDM7XG52YXIgRU5DUllQVElPTl9GTEFHID0gMSA8PCAwO1xudmFyIE5VTUJFUl9PRl9TSEFOTk9OX0ZBTk9fVFJFRVNfRkxBRyA9IDEgPDwgMjtcbnZhciBTTElESU5HX0RJQ1RJT05BUllfU0laRV9GTEFHID0gMSA8PCAxO1xudmFyIFNUUk9OR19FTkNSWVBUSU9OX0ZMQUcgPSAxIDw8IDY7XG52YXIgVUZUOF9OQU1FU19GTEFHID0gMSA8PCAxMTtcblxudmFyIEdlbmVyYWxQdXJwb3NlQml0ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEdlbmVyYWxQdXJwb3NlQml0KSkge1xuICAgIHJldHVybiBuZXcgR2VuZXJhbFB1cnBvc2VCaXQoKTtcbiAgfVxuXG4gIHRoaXMuZGVzY3JpcHRvciA9IGZhbHNlO1xuICB0aGlzLmVuY3J5cHRpb24gPSBmYWxzZTtcbiAgdGhpcy51dGY4ID0gZmFsc2U7XG4gIHRoaXMubnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzID0gMDtcbiAgdGhpcy5zdHJvbmdFbmNyeXB0aW9uID0gZmFsc2U7XG4gIHRoaXMuc2xpZGluZ0RpY3Rpb25hcnlTaXplID0gMDtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhcbiAgICAodGhpcy5kZXNjcmlwdG9yID8gREFUQV9ERVNDUklQVE9SX0ZMQUcgOiAwKSB8XG4gICAgKHRoaXMudXRmOCA/IFVGVDhfTkFNRVNfRkxBRyA6IDApIHxcbiAgICAodGhpcy5lbmNyeXB0aW9uID8gRU5DUllQVElPTl9GTEFHIDogMCkgfFxuICAgICh0aGlzLnN0cm9uZ0VuY3J5cHRpb24gPyBTVFJPTkdfRU5DUllQVElPTl9GTEFHIDogMClcbiAgKTtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBmbGFnID0gemlwVXRpbC5nZXRTaG9ydEJ5dGVzVmFsdWUoYnVmLCBvZmZzZXQpO1xuICB2YXIgZ2JwID0gbmV3IEdlbmVyYWxQdXJwb3NlQml0KCk7XG5cbiAgZ2JwLnVzZURhdGFEZXNjcmlwdG9yKChmbGFnICYgREFUQV9ERVNDUklQVE9SX0ZMQUcpICE9PSAwKTtcbiAgZ2JwLnVzZVVURjhGb3JOYW1lcygoZmxhZyAmIFVGVDhfTkFNRVNfRkxBRykgIT09IDApO1xuICBnYnAudXNlU3Ryb25nRW5jcnlwdGlvbigoZmxhZyAmIFNUUk9OR19FTkNSWVBUSU9OX0ZMQUcpICE9PSAwKTtcbiAgZ2JwLnVzZUVuY3J5cHRpb24oKGZsYWcgJiBFTkNSWVBUSU9OX0ZMQUcpICE9PSAwKTtcbiAgZ2JwLnNldFNsaWRpbmdEaWN0aW9uYXJ5U2l6ZSgoZmxhZyAmIFNMSURJTkdfRElDVElPTkFSWV9TSVpFX0ZMQUcpICE9PSAwID8gODE5MiA6IDQwOTYpO1xuICBnYnAuc2V0TnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzKChmbGFnICYgTlVNQkVSX09GX1NIQU5OT05fRkFOT19UUkVFU19GTEFHKSAhPT0gMCA/IDMgOiAyKTtcblxuICByZXR1cm4gZ2JwO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnNldE51bWJlck9mU2hhbm5vbkZhbm9UcmVlcyA9IGZ1bmN0aW9uKG4pIHtcbiAgdGhpcy5udW1iZXJPZlNoYW5ub25GYW5vVHJlZXMgPSBuO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLmdldE51bWJlck9mU2hhbm5vbkZhbm9UcmVlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5udW1iZXJPZlNoYW5ub25GYW5vVHJlZXM7XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuc2V0U2xpZGluZ0RpY3Rpb25hcnlTaXplID0gZnVuY3Rpb24obikge1xuICB0aGlzLnNsaWRpbmdEaWN0aW9uYXJ5U2l6ZSA9IG47XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuZ2V0U2xpZGluZ0RpY3Rpb25hcnlTaXplID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNsaWRpbmdEaWN0aW9uYXJ5U2l6ZTtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VEYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uKGIpIHtcbiAgdGhpcy5kZXNjcmlwdG9yID0gYjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VzRGF0YURlc2NyaXB0b3IgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvcjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VFbmNyeXB0aW9uID0gZnVuY3Rpb24oYikge1xuICB0aGlzLmVuY3J5cHRpb24gPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNFbmNyeXB0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVuY3J5cHRpb247XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUudXNlU3Ryb25nRW5jcnlwdGlvbiA9IGZ1bmN0aW9uKGIpIHtcbiAgdGhpcy5zdHJvbmdFbmNyeXB0aW9uID0gYjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VzU3Ryb25nRW5jcnlwdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zdHJvbmdFbmNyeXB0aW9uO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZVVURjhGb3JOYW1lcyA9IGZ1bmN0aW9uKGIpIHtcbiAgdGhpcy51dGY4ID0gYjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VzVVRGOEZvck5hbWVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnV0Zjg7XG59OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIEJpdHMgdXNlZCBmb3IgcGVybWlzc2lvbnMgKGFuZCBzdGlja3kgYml0KVxuICAgICAqL1xuICAgIFBFUk1fTUFTSzogNDA5NSwgLy8gMDc3NzdcblxuICAgIC8qKlxuICAgICAqIEJpdHMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgZmlsZXN5c3RlbSBvYmplY3QgdHlwZS5cbiAgICAgKi9cbiAgICBGSUxFX1RZUEVfRkxBRzogNjE0NDAsIC8vIDAxNzAwMDBcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBzeW1ib2xpYyBsaW5rcy5cbiAgICAgKi9cbiAgICBMSU5LX0ZMQUc6IDQwOTYwLCAvLyAwMTIwMDAwXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgcGxhaW4gZmlsZXMuXG4gICAgICovXG4gICAgRklMRV9GTEFHOiAzMjc2OCwgLy8gMDEwMDAwMFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGRpcmVjdG9yaWVzLlxuICAgICAqL1xuICAgIERJUl9GTEFHOiAxNjM4NCwgLy8gMDQwMDAwXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gc29tZXdoYXQgYXJiaXRyYXJ5IGNob2ljZXMgdGhhdCBhcmUgcXVpdGUgY29tbW9uIGZvciBzaGFyZWRcbiAgICAvLyBpbnN0YWxsYXRpb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcGVybWlzc2lvbnMgZm9yIHN5bWJvbGljIGxpbmtzLlxuICAgICAqL1xuICAgIERFRkFVTFRfTElOS19QRVJNOiA1MTEsIC8vIDA3NzdcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGRpcmVjdG9yaWVzLlxuICAgICAqL1xuICAgIERFRkFVTFRfRElSX1BFUk06IDQ5MywgLy8gMDc1NVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgcGxhaW4gZmlsZXMuXG4gICAgICovXG4gICAgREVGQVVMVF9GSUxFX1BFUk06IDQyMCAvLyAwNjQ0XG59OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXT1JEOiA0LFxuICBEV09SRDogOCxcbiAgRU1QVFk6IEJ1ZmZlci5hbGxvYygwKSxcblxuICBTSE9SVDogMixcbiAgU0hPUlRfTUFTSzogMHhmZmZmLFxuICBTSE9SVF9TSElGVDogMTYsXG4gIFNIT1JUX1pFUk86IEJ1ZmZlci5mcm9tKEFycmF5KDIpKSxcbiAgTE9ORzogNCxcbiAgTE9OR19aRVJPOiBCdWZmZXIuZnJvbShBcnJheSg0KSksXG5cbiAgTUlOX1ZFUlNJT05fSU5JVElBTDogMTAsXG4gIE1JTl9WRVJTSU9OX0RBVEFfREVTQ1JJUFRPUjogMjAsXG4gIE1JTl9WRVJTSU9OX1pJUDY0OiA0NSxcbiAgVkVSU0lPTl9NQURFQlk6IDQ1LFxuXG4gIE1FVEhPRF9TVE9SRUQ6IDAsXG4gIE1FVEhPRF9ERUZMQVRFRDogOCxcblxuICBQTEFURk9STV9VTklYOiAzLFxuICBQTEFURk9STV9GQVQ6IDAsXG5cbiAgU0lHX0xGSDogMHgwNDAzNGI1MCxcbiAgU0lHX0REOiAweDA4MDc0YjUwLFxuICBTSUdfQ0ZIOiAweDAyMDE0YjUwLFxuICBTSUdfRU9DRDogMHgwNjA1NGI1MCxcbiAgU0lHX1pJUDY0X0VPQ0Q6IDB4MDYwNjRCNTAsXG4gIFNJR19aSVA2NF9FT0NEX0xPQzogMHgwNzA2NEI1MCxcblxuICBaSVA2NF9NQUdJQ19TSE9SVDogMHhmZmZmLFxuICBaSVA2NF9NQUdJQzogMHhmZmZmZmZmZixcbiAgWklQNjRfRVhUUkFfSUQ6IDB4MDAwMSxcblxuICBaTElCX05PX0NPTVBSRVNTSU9OOiAwLFxuICBaTElCX0JFU1RfU1BFRUQ6IDEsXG4gIFpMSUJfQkVTVF9DT01QUkVTU0lPTjogOSxcbiAgWkxJQl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAtMSxcblxuICBNT0RFX01BU0s6IDB4RkZGLFxuICBERUZBVUxUX0ZJTEVfTU9ERTogMzMxODgsIC8vIDAxMDY0NCA9IC1ydy1yLS1yLS0gPSBTX0lGUkVHIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JUk9USFxuICBERUZBVUxUX0RJUl9NT0RFOiAxNjg3NywgIC8vIDA0MDc1NSA9IGRyd3hyLXhyLXggPSBTX0lGRElSIHwgU19JUldYVSB8IFNfSVJHUlAgfCBTX0lYR1JQIHwgU19JUk9USCB8IFNfSVhPVEhcblxuICBFWFRfRklMRV9BVFRSX0RJUjogMTEwNjA1MTA4OCwgIC8vIDAxMDE3MzIwMDAyMCA9IGRyd3hyLXhyLXggPSAoKChTX0lGRElSIHwgMDc1NSkgPDwgMTYpIHwgU19ET1NfRClcbiAgRVhUX0ZJTEVfQVRUUl9GSUxFOiAyMTc1MDA4ODAwLCAvLyAwMjAxNTEwMDAwNDAgPSAtcnctci0tci0tID0gKCgoU19JRlJFRyB8IDA2NDQpIDw8IDE2KSB8IFNfRE9TX0EpID4+PiAwXG5cbiAgLy8gVW5peCBmaWxlIHR5cGVzXG4gIFNfSUZNVDogNjE0NDAsICAgLy8gMDE3MDAwMCB0eXBlIG9mIGZpbGUgbWFza1xuICBTX0lGSUZPOiA0MDk2LCAgIC8vIDAxMDAwMCBuYW1lZCBwaXBlIChmaWZvKVxuICBTX0lGQ0hSOiA4MTkyLCAgIC8vIDAyMDAwMCBjaGFyYWN0ZXIgc3BlY2lhbFxuICBTX0lGRElSOiAxNjM4NCwgIC8vIDA0MDAwMCBkaXJlY3RvcnlcbiAgU19JRkJMSzogMjQ1NzYsICAvLyAwNjAwMDAgYmxvY2sgc3BlY2lhbFxuICBTX0lGUkVHOiAzMjc2OCwgIC8vIDAxMDAwMDAgcmVndWxhclxuICBTX0lGTE5LOiA0MDk2MCwgIC8vIDAxMjAwMDAgc3ltYm9saWMgbGlua1xuICBTX0lGU09DSzogNDkxNTIsIC8vIDAxNDAwMDAgc29ja2V0XG5cbiAgLy8gRE9TIGZpbGUgdHlwZSBmbGFnc1xuICBTX0RPU19BOiAzMiwgLy8gMDQwIEFyY2hpdmVcbiAgU19ET1NfRDogMTYsIC8vIDAyMCBEaXJlY3RvcnlcbiAgU19ET1NfVjogOCwgIC8vIDAxMCBWb2x1bWVcbiAgU19ET1NfUzogNCwgIC8vIDA0IFN5c3RlbVxuICBTX0RPU19IOiAyLCAgLy8gMDIgSGlkZGVuXG4gIFNfRE9TX1I6IDEgICAvLyAwMSBSZWFkIE9ubHlcbn07XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgbm9ybWFsaXplUGF0aCA9IHJlcXVpcmUoJ25vcm1hbGl6ZS1wYXRoJyk7XG5cbnZhciBBcmNoaXZlRW50cnkgPSByZXF1aXJlKCcuLi9hcmNoaXZlLWVudHJ5Jyk7XG52YXIgR2VuZXJhbFB1cnBvc2VCaXQgPSByZXF1aXJlKCcuL2dlbmVyYWwtcHVycG9zZS1iaXQnKTtcbnZhciBVbml4U3RhdCA9IHJlcXVpcmUoJy4vdW5peC1zdGF0Jyk7XG5cbnZhciBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xudmFyIHppcFV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxudmFyIFppcEFyY2hpdmVFbnRyeSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgWmlwQXJjaGl2ZUVudHJ5KSkge1xuICAgIHJldHVybiBuZXcgWmlwQXJjaGl2ZUVudHJ5KG5hbWUpO1xuICB9XG5cbiAgQXJjaGl2ZUVudHJ5LmNhbGwodGhpcyk7XG5cbiAgdGhpcy5wbGF0Zm9ybSA9IGNvbnN0YW50cy5QTEFURk9STV9GQVQ7XG4gIHRoaXMubWV0aG9kID0gLTE7XG5cbiAgdGhpcy5uYW1lID0gbnVsbDtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5jc2l6ZSA9IDA7XG4gIHRoaXMuZ3BiID0gbmV3IEdlbmVyYWxQdXJwb3NlQml0KCk7XG4gIHRoaXMuY3JjID0gMDtcbiAgdGhpcy50aW1lID0gLTE7XG5cbiAgdGhpcy5taW52ZXIgPSBjb25zdGFudHMuTUlOX1ZFUlNJT05fSU5JVElBTDtcbiAgdGhpcy5tb2RlID0gLTE7XG4gIHRoaXMuZXh0cmEgPSBudWxsO1xuICB0aGlzLmV4YXR0ciA9IDA7XG4gIHRoaXMuaW5hdHRyID0gMDtcbiAgdGhpcy5jb21tZW50ID0gbnVsbDtcblxuICBpZiAobmFtZSkge1xuICAgIHRoaXMuc2V0TmFtZShuYW1lKTtcbiAgfVxufTtcblxuaW5oZXJpdHMoWmlwQXJjaGl2ZUVudHJ5LCBBcmNoaXZlRW50cnkpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldENlbnRyYWxEaXJlY3RvcnlFeHRyYSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRFeHRyYSgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21tZW50IHNldCBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0Q29tbWVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jb21tZW50ICE9PSBudWxsID8gdGhpcy5jb21tZW50IDogJyc7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbXByZXNzZWQgc2l6ZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRDb21wcmVzc2VkU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jc2l6ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgQ1JDMzIgZGlnZXN0IGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRDcmMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY3JjO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgZm9yIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEV4dGVybmFsQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5leGF0dHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEV4dHJhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmV4dHJhICE9PSBudWxsID8gdGhpcy5leHRyYSA6IGNvbnN0YW50cy5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGJpdHMgcmVsYXRlZCB0byB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge0dlbmVyYWxQdXJwb3NlQml0fVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEdlbmVyYWxQdXJwb3NlQml0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdwYjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRJbnRlcm5hbEF0dHJpYnV0ZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuaW5hdHRyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TGFzdE1vZGlmaWVkRGF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRUaW1lKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldExvY2FsRmlsZURhdGFFeHRyYSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRFeHRyYSgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdXNlZCBvbiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRNZXRob2QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubWV0aG9kO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaWxlbmFtZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm5hbWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtIG9uIHdoaWNoIHRoZSBlbnRyeSB3YXMgbWFkZS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFBsYXRmb3JtID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnBsYXRmb3JtO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFNpemUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2l6ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGRhdGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbGFzdCBtb2RpZmllZCBkYXRlIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfERhdGV9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0VGltZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50aW1lICE9PSAtMSA/IHppcFV0aWwuZG9zVG9EYXRlKHRoaXMudGltZSkgOiAtMTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgRE9TIHRpbWVzdGFtcCBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0VGltZURvcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50aW1lICE9PSAtMSA/IHRoaXMudGltZSA6IDA7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIFVOSVggZmlsZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0VW5peE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMucGxhdGZvcm0gIT09IGNvbnN0YW50cy5QTEFURk9STV9VTklYID8gMCA6ICgodGhpcy5nZXRFeHRlcm5hbEF0dHJpYnV0ZXMoKSA+PiBjb25zdGFudHMuU0hPUlRfU0hJRlQpICYgY29uc3RhbnRzLlNIT1JUX01BU0spO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIFpJUCBuZWVkZWQgdG8gZXh0cmFjdCB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm1pbnZlcjtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY29tbWVudCBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGNvbW1lbnRcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRDb21tZW50ID0gZnVuY3Rpb24oY29tbWVudCkge1xuICBpZiAoQnVmZmVyLmJ5dGVMZW5ndGgoY29tbWVudCkgIT09IGNvbW1lbnQubGVuZ3RoKSB7XG4gICAgdGhpcy5nZXRHZW5lcmFsUHVycG9zZUJpdCgpLnVzZVVURjhGb3JOYW1lcyh0cnVlKTtcbiAgfVxuXG4gIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGNvbXByZXNzZWQgc2l6ZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIHNpemVcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRDb21wcmVzc2VkU2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IGNvbXByZXNzZWQgc2l6ZScpO1xuICB9XG5cbiAgdGhpcy5jc2l6ZSA9IHNpemU7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGNoZWNrc3VtIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gY3JjXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0Q3JjID0gZnVuY3Rpb24oY3JjKSB7XG4gIGlmIChjcmMgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IGNyYzMyJyk7XG4gIH1cblxuICB0aGlzLmNyYyA9IGNyYztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gYXR0clxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldEV4dGVybmFsQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGF0dHIpIHtcbiAgdGhpcy5leGF0dHIgPSBhdHRyID4+PiAwO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBleHRyYSBmaWVsZHMgcmVsYXRlZCB0byB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGV4dHJhXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0RXh0cmEgPSBmdW5jdGlvbihleHRyYSkge1xuICB0aGlzLmV4dHJhID0gZXh0cmE7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGdlbmVyYWwgcHVycG9zZSBiaXRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBncGJcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRHZW5lcmFsUHVycG9zZUJpdCA9IGZ1bmN0aW9uKGdwYikge1xuICBpZiAoIShncGIgaW5zdGFuY2VvZiBHZW5lcmFsUHVycG9zZUJpdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZW50cnkgR2VuZXJhbFB1cnBvc2VCaXQnKTtcbiAgfVxuXG4gIHRoaXMuZ3BiID0gZ3BiO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBhdHRyXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0SW50ZXJuYWxBdHRyaWJ1dGVzID0gZnVuY3Rpb24oYXR0cikge1xuICB0aGlzLmluYXR0ciA9IGF0dHI7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIG1ldGhvZFxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldE1ldGhvZCA9IGZ1bmN0aW9uKG1ldGhvZCkge1xuICBpZiAobWV0aG9kIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSBjb21wcmVzc2lvbiBtZXRob2QnKTtcbiAgfVxuXG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBuYW1lIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbmFtZVxuICogQHBhcmFtIHByZXBlbmRTbGFzaFxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbihuYW1lLCBwcmVwZW5kU2xhc2ggPSBmYWxzZSkge1xuICBuYW1lID0gbm9ybWFsaXplUGF0aChuYW1lLCBmYWxzZSlcbiAgICAucmVwbGFjZSgvXlxcdys6LywgJycpXG4gICAgLnJlcGxhY2UoL14oXFwuXFwuXFwvfFxcLykrLywgJycpO1xuXG4gIGlmIChwcmVwZW5kU2xhc2gpIHtcbiAgICBuYW1lID0gYC8ke25hbWV9YDtcbiAgfVxuXG4gIGlmIChCdWZmZXIuYnl0ZUxlbmd0aChuYW1lKSAhPT0gbmFtZS5sZW5ndGgpIHtcbiAgICB0aGlzLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlVVRGOEZvck5hbWVzKHRydWUpO1xuICB9XG5cbiAgdGhpcy5uYW1lID0gbmFtZTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcGxhdGZvcm0gb24gd2hpY2ggdGhlIGVudHJ5IHdhcyBtYWRlLlxuICpcbiAqIEBwYXJhbSBwbGF0Zm9ybVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldFBsYXRmb3JtID0gZnVuY3Rpb24ocGxhdGZvcm0pIHtcbiAgdGhpcy5wbGF0Zm9ybSA9IHBsYXRmb3JtO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gc2l6ZVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldFNpemUgPSBmdW5jdGlvbihzaXplKSB7XG4gIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSBzaXplJyk7XG4gIH1cblxuICB0aGlzLnNpemUgPSBzaXplO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSB0aW1lIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gdGltZVxuICogQHBhcmFtIGZvcmNlTG9jYWxUaW1lXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uKHRpbWUsIGZvcmNlTG9jYWxUaW1lKSB7XG4gIGlmICghKHRpbWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSB0aW1lJyk7XG4gIH1cblxuICB0aGlzLnRpbWUgPSB6aXBVdGlsLmRhdGVUb0Rvcyh0aW1lLCBmb3JjZUxvY2FsVGltZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIFVOSVggZmlsZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBtb2RlXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0VW5peE1vZGUgPSBmdW5jdGlvbihtb2RlKSB7XG4gIG1vZGUgfD0gdGhpcy5pc0RpcmVjdG9yeSgpID8gY29uc3RhbnRzLlNfSUZESVIgOiBjb25zdGFudHMuU19JRlJFRztcblxuICB2YXIgZXh0YXR0ciA9IDA7XG4gIGV4dGF0dHIgfD0gKG1vZGUgPDwgY29uc3RhbnRzLlNIT1JUX1NISUZUKSB8ICh0aGlzLmlzRGlyZWN0b3J5KCkgPyBjb25zdGFudHMuU19ET1NfRCA6IGNvbnN0YW50cy5TX0RPU19BKTtcblxuICB0aGlzLnNldEV4dGVybmFsQXR0cmlidXRlcyhleHRhdHRyKTtcbiAgdGhpcy5tb2RlID0gbW9kZSAmIGNvbnN0YW50cy5NT0RFX01BU0s7XG4gIHRoaXMucGxhdGZvcm0gPSBjb25zdGFudHMuUExBVEZPUk1fVU5JWDtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgdmVyc2lvbiBvZiBaSVAgbmVlZGVkIHRvIGV4dHJhY3QgdGhpcyBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbWludmVyXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdCA9IGZ1bmN0aW9uKG1pbnZlcikge1xuICB0aGlzLm1pbnZlciA9IG1pbnZlcjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZW50cnkgcmVwcmVzZW50cyBhIGRpcmVjdG9yeS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5pc0RpcmVjdG9yeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXROYW1lKCkuc2xpY2UoLTEpID09PSAnLyc7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGVudHJ5IHJlcHJlc2VudHMgYSB1bml4IHN5bWxpbmssXG4gKiBpbiB3aGljaCBjYXNlIHRoZSBlbnRyeSdzIGNvbnRlbnQgY29udGFpbnMgdGhlIHRhcmdldCBwYXRoXG4gKiBmb3IgdGhlIHN5bWxpbmsuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuaXNVbml4U3ltbGluayA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gKHRoaXMuZ2V0VW5peE1vZGUoKSAmIFVuaXhTdGF0LkZJTEVfVFlQRV9GTEFHKSA9PT0gVW5peFN0YXQuTElOS19GTEFHO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBlbnRyeSBpcyB1c2luZyB0aGUgWklQNjQgZXh0ZW5zaW9uIG9mIFpJUC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5pc1ppcDY0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNzaXplID4gY29uc3RhbnRzLlpJUDY0X01BR0lDIHx8IHRoaXMuc2l6ZSA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcbn07XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuUGFzc1Rocm91Z2g7XG52YXIgaXNTdHJlYW0gPSByZXF1aXJlKCdpcy1zdHJlYW0nKTtcblxudmFyIHV0aWwgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG51dGlsLm5vcm1hbGl6ZUlucHV0U291cmNlID0gZnVuY3Rpb24oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgPT09IG51bGwpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNvdXJjZSk7XG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oc291cmNlKSAmJiAhc291cmNlLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdmFyIG5vcm1hbGl6ZWQgPSBuZXcgUGFzc1Rocm91Z2goKTtcbiAgICBzb3VyY2UucGlwZShub3JtYWxpemVkKTtcblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZTtcbn07IiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xudmFyIGlzU3RyZWFtID0gcmVxdWlyZSgnaXMtc3RyZWFtJyk7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuVHJhbnNmb3JtO1xuXG52YXIgQXJjaGl2ZUVudHJ5ID0gcmVxdWlyZSgnLi9hcmNoaXZlLWVudHJ5Jyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxudmFyIEFyY2hpdmVPdXRwdXRTdHJlYW0gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFyY2hpdmVPdXRwdXRTdHJlYW0pKSB7XG4gICAgcmV0dXJuIG5ldyBBcmNoaXZlT3V0cHV0U3RyZWFtKG9wdGlvbnMpO1xuICB9XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5vZmZzZXQgPSAwO1xuICB0aGlzLl9hcmNoaXZlID0ge1xuICAgIGZpbmlzaDogZmFsc2UsXG4gICAgZmluaXNoZWQ6IGZhbHNlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlXG4gIH07XG59O1xuXG5pbmhlcml0cyhBcmNoaXZlT3V0cHV0U3RyZWFtLCBUcmFuc2Zvcm0pO1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fYXBwZW5kQnVmZmVyID0gZnVuY3Rpb24oemFlLCBzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIC8vIHNjYWZmb2xkIG9ubHlcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hcHBlbmRTdHJlYW0gPSBmdW5jdGlvbih6YWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyKSB7XG4gIGlmIChlcnIpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2ZpbmlzaCA9IGZ1bmN0aW9uKGFlKSB7XG4gIC8vIHNjYWZmb2xkIG9ubHlcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9ub3JtYWxpemVFbnRyeSA9IGZ1bmN0aW9uKGFlKSB7XG4gIC8vIHNjYWZmb2xkIG9ubHlcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmVudHJ5ID0gZnVuY3Rpb24oYWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgc291cmNlID0gc291cmNlIHx8IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gdGhpcy5fZW1pdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIGlmICghKGFlIGluc3RhbmNlb2YgQXJjaGl2ZUVudHJ5KSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcignbm90IGEgdmFsaWQgaW5zdGFuY2Ugb2YgQXJjaGl2ZUVudHJ5JykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9hcmNoaXZlLmZpbmlzaCB8fCB0aGlzLl9hcmNoaXZlLmZpbmlzaGVkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCd1bmFjY2VwdGFibGUgZW50cnkgYWZ0ZXIgZmluaXNoJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2FscmVhZHkgcHJvY2Vzc2luZyBhbiBlbnRyeScpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcgPSB0cnVlO1xuICB0aGlzLl9ub3JtYWxpemVFbnRyeShhZSk7XG4gIHRoaXMuX2VudHJ5ID0gYWU7XG5cbiAgc291cmNlID0gdXRpbC5ub3JtYWxpemVJbnB1dFNvdXJjZShzb3VyY2UpO1xuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIHRoaXMuX2FwcGVuZEJ1ZmZlcihhZSwgc291cmNlLCBjYWxsYmFjayk7XG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oc291cmNlKSkge1xuICAgIHRoaXMuX2FwcGVuZFN0cmVhbShhZSwgc291cmNlLCBjYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYXJjaGl2ZS5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdpbnB1dCBzb3VyY2UgbXVzdCBiZSB2YWxpZCBTdHJlYW0gb3IgQnVmZmVyIGluc3RhbmNlJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcpIHtcbiAgICB0aGlzLl9hcmNoaXZlLmZpbmlzaCA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fZmluaXNoKCk7XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5nZXRCeXRlc1dyaXR0ZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub2Zmc2V0O1xufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihjaHVuaywgY2IpIHtcbiAgaWYgKGNodW5rKSB7XG4gICAgdGhpcy5vZmZzZXQgKz0gY2h1bmsubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIFRyYW5zZm9ybS5wcm90b3R5cGUud3JpdGUuY2FsbCh0aGlzLCBjaHVuaywgY2IpO1xufTsiLAogICAgIi8qISBjcmMzMi5qcyAoQykgMjAxNC1wcmVzZW50IFNoZWV0SlMgLS0gaHR0cDovL3NoZWV0anMuY29tICovXG4vKiB2aW06IHNldCB0cz0yOiAqL1xuLypleHBvcnRlZCBDUkMzMiAqL1xudmFyIENSQzMyO1xuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdC8qanNoaW50IGlnbm9yZTpzdGFydCAqL1xuXHQvKmVzbGludC1kaXNhYmxlICovXG5cdGlmKHR5cGVvZiBET19OT1RfRVhQT1JUX0NSQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZignb2JqZWN0JyA9PT0gdHlwZW9mIGV4cG9ydHMpIHtcblx0XHRcdGZhY3RvcnkoZXhwb3J0cyk7XG5cdFx0fSBlbHNlIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZGVmaW5lICYmIGRlZmluZS5hbWQpIHtcblx0XHRcdGRlZmluZShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHZhciBtb2R1bGUgPSB7fTtcblx0XHRcdFx0ZmFjdG9yeShtb2R1bGUpO1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZhY3RvcnkoQ1JDMzIgPSB7fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoQ1JDMzIgPSB7fSk7XG5cdH1cblx0Lyplc2xpbnQtZW5hYmxlICovXG5cdC8qanNoaW50IGlnbm9yZTplbmQgKi9cbn0oZnVuY3Rpb24oQ1JDMzIpIHtcbkNSQzMyLnZlcnNpb24gPSAnMS4yLjInO1xuLypnbG9iYWwgSW50MzJBcnJheSAqL1xuZnVuY3Rpb24gc2lnbmVkX2NyY190YWJsZSgpIHtcblx0dmFyIGMgPSAwLCB0YWJsZSA9IG5ldyBBcnJheSgyNTYpO1xuXG5cdGZvcih2YXIgbiA9MDsgbiAhPSAyNTY7ICsrbil7XG5cdFx0YyA9IG47XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0dGFibGVbbl0gPSBjO1xuXHR9XG5cblx0cmV0dXJuIHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyA/IG5ldyBJbnQzMkFycmF5KHRhYmxlKSA6IHRhYmxlO1xufVxuXG52YXIgVDAgPSBzaWduZWRfY3JjX3RhYmxlKCk7XG5mdW5jdGlvbiBzbGljZV9ieV8xNl90YWJsZXMoVCkge1xuXHR2YXIgYyA9IDAsIHYgPSAwLCBuID0gMCwgdGFibGUgPSB0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBuZXcgSW50MzJBcnJheSg0MDk2KSA6IG5ldyBBcnJheSg0MDk2KSA7XG5cblx0Zm9yKG4gPSAwOyBuICE9IDI1NjsgKytuKSB0YWJsZVtuXSA9IFRbbl07XG5cdGZvcihuID0gMDsgbiAhPSAyNTY7ICsrbikge1xuXHRcdHYgPSBUW25dO1xuXHRcdGZvcihjID0gMjU2ICsgbjsgYyA8IDQwOTY7IGMgKz0gMjU2KSB2ID0gdGFibGVbY10gPSAodiA+Pj4gOCkgXiBUW3YgJiAweEZGXTtcblx0fVxuXHR2YXIgb3V0ID0gW107XG5cdGZvcihuID0gMTsgbiAhPSAxNjsgKytuKSBvdXRbbiAtIDFdID0gdHlwZW9mIEludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnID8gdGFibGUuc3ViYXJyYXkobiAqIDI1NiwgbiAqIDI1NiArIDI1NikgOiB0YWJsZS5zbGljZShuICogMjU2LCBuICogMjU2ICsgMjU2KTtcblx0cmV0dXJuIG91dDtcbn1cbnZhciBUVCA9IHNsaWNlX2J5XzE2X3RhYmxlcyhUMCk7XG52YXIgVDEgPSBUVFswXSwgIFQyID0gVFRbMV0sICBUMyA9IFRUWzJdLCAgVDQgPSBUVFszXSwgIFQ1ID0gVFRbNF07XG52YXIgVDYgPSBUVFs1XSwgIFQ3ID0gVFRbNl0sICBUOCA9IFRUWzddLCAgVDkgPSBUVFs4XSwgIFRhID0gVFRbOV07XG52YXIgVGIgPSBUVFsxMF0sIFRjID0gVFRbMTFdLCBUZCA9IFRUWzEyXSwgVGUgPSBUVFsxM10sIFRmID0gVFRbMTRdO1xuZnVuY3Rpb24gY3JjMzJfYnN0cihic3RyLCBzZWVkKSB7XG5cdHZhciBDID0gc2VlZCBeIC0xO1xuXHRmb3IodmFyIGkgPSAwLCBMID0gYnN0ci5sZW5ndGg7IGkgPCBMOykgQyA9IChDPj4+OCkgXiBUMFsoQ15ic3RyLmNoYXJDb2RlQXQoaSsrKSkmMHhGRl07XG5cdHJldHVybiB+Qztcbn1cblxuZnVuY3Rpb24gY3JjMzJfYnVmKEIsIHNlZWQpIHtcblx0dmFyIEMgPSBzZWVkIF4gLTEsIEwgPSBCLmxlbmd0aCAtIDE1LCBpID0gMDtcblx0Zm9yKDsgaSA8IEw7KSBDID1cblx0XHRUZltCW2krK10gXiAoQyAmIDI1NSldIF5cblx0XHRUZVtCW2krK10gXiAoKEMgPj4gOCkgJiAyNTUpXSBeXG5cdFx0VGRbQltpKytdIF4gKChDID4+IDE2KSAmIDI1NSldIF5cblx0XHRUY1tCW2krK10gXiAoQyA+Pj4gMjQpXSBeXG5cdFx0VGJbQltpKytdXSBeIFRhW0JbaSsrXV0gXiBUOVtCW2krK11dIF4gVDhbQltpKytdXSBeXG5cdFx0VDdbQltpKytdXSBeIFQ2W0JbaSsrXV0gXiBUNVtCW2krK11dIF4gVDRbQltpKytdXSBeXG5cdFx0VDNbQltpKytdXSBeIFQyW0JbaSsrXV0gXiBUMVtCW2krK11dIF4gVDBbQltpKytdXTtcblx0TCArPSAxNTtcblx0d2hpbGUoaSA8IEwpIEMgPSAoQz4+PjgpIF4gVDBbKENeQltpKytdKSYweEZGXTtcblx0cmV0dXJuIH5DO1xufVxuXG5mdW5jdGlvbiBjcmMzMl9zdHIoc3RyLCBzZWVkKSB7XG5cdHZhciBDID0gc2VlZCBeIC0xO1xuXHRmb3IodmFyIGkgPSAwLCBMID0gc3RyLmxlbmd0aCwgYyA9IDAsIGQgPSAwOyBpIDwgTDspIHtcblx0XHRjID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcblx0XHRpZihjIDwgMHg4MCkge1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQ15jKSYweEZGXTtcblx0XHR9IGVsc2UgaWYoYyA8IDB4ODAwKSB7XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDE5MnwoKGM+PjYpJjMxKSkpJjB4RkZdO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgxMjh8KGMmNjMpKSkmMHhGRl07XG5cdFx0fSBlbHNlIGlmKGMgPj0gMHhEODAwICYmIGMgPCAweEUwMDApIHtcblx0XHRcdGMgPSAoYyYxMDIzKSs2NDsgZCA9IHN0ci5jaGFyQ29kZUF0KGkrKykmMTAyMztcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMjQwfCgoYz4+OCkmNykpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fCgoYz4+MikmNjMpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoKGQ+PjYpJjE1KXwoKGMmMyk8PDQpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoZCY2MykpKSYweEZGXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgyMjR8KChjPj4xMikmMTUpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoKGM+PjYpJjYzKSkpJjB4RkZdO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgxMjh8KGMmNjMpKSkmMHhGRl07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB+Qztcbn1cbkNSQzMyLnRhYmxlID0gVDA7XG4vLyAkRmxvd0lnbm9yZVxuQ1JDMzIuYnN0ciA9IGNyYzMyX2JzdHI7XG4vLyAkRmxvd0lnbm9yZVxuQ1JDMzIuYnVmID0gY3JjMzJfYnVmO1xuLy8gJEZsb3dJZ25vcmVcbkNSQzMyLnN0ciA9IGNyYzMyX3N0cjtcbn0pKTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNyYzMyLXN0cmVhbVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNyYzMyLXN0cmVhbS9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG5cbiAndXNlIHN0cmljdCc7XG5cbmNvbnN0IHtUcmFuc2Zvcm19ID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJyk7XG5cbmNvbnN0IGNyYzMyID0gcmVxdWlyZSgnY3JjLTMyJyk7XG5cbmNsYXNzIENSQzMyU3RyZWFtIGV4dGVuZHMgVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMuY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgdGhpcy5jaGVja3N1bS53cml0ZUludDMyQkUoMCwgMCk7XG5cbiAgICB0aGlzLnJhd1NpemUgPSAwO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLmNoZWNrc3VtID0gY3JjMzIuYnVmKGNodW5rLCB0aGlzLmNoZWNrc3VtKSA+Pj4gMDtcbiAgICAgIHRoaXMucmF3U2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xuICB9XG5cbiAgZGlnZXN0KGVuY29kaW5nKSB7XG4gICAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgY2hlY2tzdW0ud3JpdGVVSW50MzJCRSh0aGlzLmNoZWNrc3VtID4+PiAwLCAwKTtcbiAgICByZXR1cm4gZW5jb2RpbmcgPyBjaGVja3N1bS50b1N0cmluZyhlbmNvZGluZykgOiBjaGVja3N1bTtcbiAgfVxuXG4gIGhleCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaWdlc3QoJ2hleCcpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLnJhd1NpemU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDUkMzMlN0cmVhbTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNyYzMyLXN0cmVhbVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNyYzMyLXN0cmVhbS9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3Qge0RlZmxhdGVSYXd9ID0gcmVxdWlyZSgnemxpYicpO1xuXG5jb25zdCBjcmMzMiA9IHJlcXVpcmUoJ2NyYy0zMicpO1xuXG5jbGFzcyBEZWZsYXRlQ1JDMzJTdHJlYW0gZXh0ZW5kcyBEZWZsYXRlUmF3IHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5jaGVja3N1bSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICB0aGlzLmNoZWNrc3VtLndyaXRlSW50MzJCRSgwLCAwKTtcblxuICAgIHRoaXMucmF3U2l6ZSA9IDA7XG4gICAgdGhpcy5jb21wcmVzc2VkU2l6ZSA9IDA7XG4gIH1cblxuICBwdXNoKGNodW5rLCBlbmNvZGluZykge1xuICAgIGlmIChjaHVuaykge1xuICAgICAgdGhpcy5jb21wcmVzc2VkU2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLnB1c2goY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuXG4gIF90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgIGlmIChjaHVuaykge1xuICAgICAgdGhpcy5jaGVja3N1bSA9IGNyYzMyLmJ1ZihjaHVuaywgdGhpcy5jaGVja3N1bSkgPj4+IDA7XG4gICAgICB0aGlzLnJhd1NpemUgKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cblxuICAgIHN1cGVyLl90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgfVxuXG4gIGRpZ2VzdChlbmNvZGluZykge1xuICAgIGNvbnN0IGNoZWNrc3VtID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpO1xuICAgIGNoZWNrc3VtLndyaXRlVUludDMyQkUodGhpcy5jaGVja3N1bSA+Pj4gMCwgMCk7XG4gICAgcmV0dXJuIGVuY29kaW5nID8gY2hlY2tzdW0udG9TdHJpbmcoZW5jb2RpbmcpIDogY2hlY2tzdW07XG4gIH1cblxuICBoZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlnZXN0KCdoZXgnKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgc2l6ZShjb21wcmVzc2VkID0gZmFsc2UpIHtcbiAgICBpZiAoY29tcHJlc3NlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcHJlc3NlZFNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJhd1NpemU7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVmbGF0ZUNSQzMyU3RyZWFtO1xuIiwKICAgICIvKipcbiAqIG5vZGUtY3JjMzItc3RyZWFtXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY3JjMzItc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1JDMzJTdHJlYW06IHJlcXVpcmUoJy4vY3JjMzItc3RyZWFtJyksXG4gIERlZmxhdGVDUkMzMlN0cmVhbTogcmVxdWlyZSgnLi9kZWZsYXRlLWNyYzMyLXN0cmVhbScpXG59XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgY3JjMzIgPSByZXF1aXJlKCdjcmMtMzInKTtcbnZhciB7Q1JDMzJTdHJlYW19ID0gcmVxdWlyZSgnY3JjMzItc3RyZWFtJyk7XG52YXIge0RlZmxhdGVDUkMzMlN0cmVhbX0gPSByZXF1aXJlKCdjcmMzMi1zdHJlYW0nKTtcblxudmFyIEFyY2hpdmVPdXRwdXRTdHJlYW0gPSByZXF1aXJlKCcuLi9hcmNoaXZlLW91dHB1dC1zdHJlYW0nKTtcbnZhciBaaXBBcmNoaXZlRW50cnkgPSByZXF1aXJlKCcuL3ppcC1hcmNoaXZlLWVudHJ5Jyk7XG52YXIgR2VuZXJhbFB1cnBvc2VCaXQgPSByZXF1aXJlKCcuL2dlbmVyYWwtcHVycG9zZS1iaXQnKTtcblxudmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4uLy4uL3V0aWwnKTtcbnZhciB6aXBVdGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbnZhciBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtKSkge1xuICAgIHJldHVybiBuZXcgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbShvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB0aGlzLl9kZWZhdWx0cyhvcHRpb25zKTtcblxuICBBcmNoaXZlT3V0cHV0U3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fZW50cnkgPSBudWxsO1xuICB0aGlzLl9lbnRyaWVzID0gW107XG4gIHRoaXMuX2FyY2hpdmUgPSB7XG4gICAgY2VudHJhbExlbmd0aDogMCxcbiAgICBjZW50cmFsT2Zmc2V0OiAwLFxuICAgIGNvbW1lbnQ6ICcnLFxuICAgIGZpbmlzaDogZmFsc2UsXG4gICAgZmluaXNoZWQ6IGZhbHNlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgIGZvcmNlWmlwNjQ6IG9wdGlvbnMuZm9yY2VaaXA2NCxcbiAgICBmb3JjZUxvY2FsVGltZTogb3B0aW9ucy5mb3JjZUxvY2FsVGltZVxuICB9O1xufTtcblxuaW5oZXJpdHMoWmlwQXJjaGl2ZU91dHB1dFN0cmVhbSwgQXJjaGl2ZU91dHB1dFN0cmVhbSk7XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hZnRlckFwcGVuZCA9IGZ1bmN0aW9uKGFlKSB7XG4gIHRoaXMuX2VudHJpZXMucHVzaChhZSk7XG5cbiAgaWYgKGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlc0RhdGFEZXNjcmlwdG9yKCkpIHtcbiAgICB0aGlzLl93cml0ZURhdGFEZXNjcmlwdG9yKGFlKTtcbiAgfVxuXG4gIHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZyA9IGZhbHNlO1xuICB0aGlzLl9lbnRyeSA9IG51bGw7XG5cbiAgaWYgKHRoaXMuX2FyY2hpdmUuZmluaXNoICYmICF0aGlzLl9hcmNoaXZlLmZpbmlzaGVkKSB7XG4gICAgdGhpcy5fZmluaXNoKCk7XG4gIH1cbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hcHBlbmRCdWZmZXIgPSBmdW5jdGlvbihhZSwgc291cmNlLCBjYWxsYmFjaykge1xuICBpZiAoc291cmNlLmxlbmd0aCA9PT0gMCkge1xuICAgIGFlLnNldE1ldGhvZChjb25zdGFudHMuTUVUSE9EX1NUT1JFRCk7XG4gIH1cblxuICB2YXIgbWV0aG9kID0gYWUuZ2V0TWV0aG9kKCk7XG5cbiAgaWYgKG1ldGhvZCA9PT0gY29uc3RhbnRzLk1FVEhPRF9TVE9SRUQpIHtcbiAgICBhZS5zZXRTaXplKHNvdXJjZS5sZW5ndGgpO1xuICAgIGFlLnNldENvbXByZXNzZWRTaXplKHNvdXJjZS5sZW5ndGgpO1xuICAgIGFlLnNldENyYyhjcmMzMi5idWYoc291cmNlKSA+Pj4gMCk7XG4gIH1cblxuICB0aGlzLl93cml0ZUxvY2FsRmlsZUhlYWRlcihhZSk7XG5cbiAgaWYgKG1ldGhvZCA9PT0gY29uc3RhbnRzLk1FVEhPRF9TVE9SRUQpIHtcbiAgICB0aGlzLndyaXRlKHNvdXJjZSk7XG4gICAgdGhpcy5fYWZ0ZXJBcHBlbmQoYWUpO1xuICAgIGNhbGxiYWNrKG51bGwsIGFlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAobWV0aG9kID09PSBjb25zdGFudHMuTUVUSE9EX0RFRkxBVEVEKSB7XG4gICAgdGhpcy5fc21hcnRTdHJlYW0oYWUsIGNhbGxiYWNrKS5lbmQoc291cmNlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdjb21wcmVzc2lvbiBtZXRob2QgJyArIG1ldGhvZCArICcgbm90IGltcGxlbWVudGVkJykpO1xuICAgIHJldHVybjtcbiAgfVxufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FwcGVuZFN0cmVhbSA9IGZ1bmN0aW9uKGFlLCBzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlRGF0YURlc2NyaXB0b3IodHJ1ZSk7XG4gIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX0RBVEFfREVTQ1JJUFRPUik7XG5cbiAgdGhpcy5fd3JpdGVMb2NhbEZpbGVIZWFkZXIoYWUpO1xuXG4gIHZhciBzbWFydCA9IHRoaXMuX3NtYXJ0U3RyZWFtKGFlLCBjYWxsYmFjayk7XG4gIHNvdXJjZS5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIHNtYXJ0LmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICBzbWFydC5lbmQoKTtcbiAgfSlcbiAgc291cmNlLnBpcGUoc21hcnQpO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2RlZmF1bHRzID0gZnVuY3Rpb24obykge1xuICBpZiAodHlwZW9mIG8gIT09ICdvYmplY3QnKSB7XG4gICAgbyA9IHt9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvLnpsaWIgIT09ICdvYmplY3QnKSB7XG4gICAgby56bGliID0ge307XG4gIH1cblxuICBpZiAodHlwZW9mIG8uemxpYi5sZXZlbCAhPT0gJ251bWJlcicpIHtcbiAgICBvLnpsaWIubGV2ZWwgPSBjb25zdGFudHMuWkxJQl9CRVNUX1NQRUVEO1xuICB9XG5cbiAgby5mb3JjZVppcDY0ID0gISFvLmZvcmNlWmlwNjQ7XG4gIG8uZm9yY2VMb2NhbFRpbWUgPSAhIW8uZm9yY2VMb2NhbFRpbWU7XG5cbiAgcmV0dXJuIG87XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCA9IHRoaXMub2Zmc2V0O1xuXG4gIHRoaXMuX2VudHJpZXMuZm9yRWFjaChmdW5jdGlvbihhZSkge1xuICAgIHRoaXMuX3dyaXRlQ2VudHJhbEZpbGVIZWFkZXIoYWUpO1xuICB9LmJpbmQodGhpcykpO1xuXG4gIHRoaXMuX2FyY2hpdmUuY2VudHJhbExlbmd0aCA9IHRoaXMub2Zmc2V0IC0gdGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0O1xuXG4gIGlmICh0aGlzLmlzWmlwNjQoKSkge1xuICAgIHRoaXMuX3dyaXRlQ2VudHJhbERpcmVjdG9yeVppcDY0KCk7XG4gIH1cblxuICB0aGlzLl93cml0ZUNlbnRyYWxEaXJlY3RvcnlFbmQoKTtcblxuICB0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgdGhpcy5fYXJjaGl2ZS5maW5pc2ggPSB0cnVlO1xuICB0aGlzLl9hcmNoaXZlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgdGhpcy5lbmQoKTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9ub3JtYWxpemVFbnRyeSA9IGZ1bmN0aW9uKGFlKSB7XG4gIGlmIChhZS5nZXRNZXRob2QoKSA9PT0gLTEpIHtcbiAgICBhZS5zZXRNZXRob2QoY29uc3RhbnRzLk1FVEhPRF9ERUZMQVRFRCk7XG4gIH1cblxuICBpZiAoYWUuZ2V0TWV0aG9kKCkgPT09IGNvbnN0YW50cy5NRVRIT0RfREVGTEFURUQpIHtcbiAgICBhZS5nZXRHZW5lcmFsUHVycG9zZUJpdCgpLnVzZURhdGFEZXNjcmlwdG9yKHRydWUpO1xuICAgIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX0RBVEFfREVTQ1JJUFRPUik7XG4gIH1cblxuICBpZiAoYWUuZ2V0VGltZSgpID09PSAtMSkge1xuICAgIGFlLnNldFRpbWUobmV3IERhdGUoKSwgdGhpcy5fYXJjaGl2ZS5mb3JjZUxvY2FsVGltZSk7XG4gIH1cblxuICBhZS5fb2Zmc2V0cyA9IHtcbiAgICBmaWxlOiAwLFxuICAgIGRhdGE6IDAsXG4gICAgY29udGVudHM6IDAsXG4gIH07XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fc21hcnRTdHJlYW0gPSBmdW5jdGlvbihhZSwgY2FsbGJhY2spIHtcbiAgdmFyIGRlZmxhdGUgPSBhZS5nZXRNZXRob2QoKSA9PT0gY29uc3RhbnRzLk1FVEhPRF9ERUZMQVRFRDtcbiAgdmFyIHByb2Nlc3MgPSBkZWZsYXRlID8gbmV3IERlZmxhdGVDUkMzMlN0cmVhbSh0aGlzLm9wdGlvbnMuemxpYikgOiBuZXcgQ1JDMzJTdHJlYW0oKTtcbiAgdmFyIGVycm9yID0gbnVsbDtcblxuICBmdW5jdGlvbiBoYW5kbGVTdHVmZigpIHtcbiAgICB2YXIgZGlnZXN0ID0gcHJvY2Vzcy5kaWdlc3QoKS5yZWFkVUludDMyQkUoMCk7XG4gICAgYWUuc2V0Q3JjKGRpZ2VzdCk7XG4gICAgYWUuc2V0U2l6ZShwcm9jZXNzLnNpemUoKSk7XG4gICAgYWUuc2V0Q29tcHJlc3NlZFNpemUocHJvY2Vzcy5zaXplKHRydWUpKTtcbiAgICB0aGlzLl9hZnRlckFwcGVuZChhZSk7XG4gICAgY2FsbGJhY2soZXJyb3IsIGFlKTtcbiAgfVxuXG4gIHByb2Nlc3Mub25jZSgnZW5kJywgaGFuZGxlU3R1ZmYuYmluZCh0aGlzKSk7XG4gIHByb2Nlc3Mub25jZSgnZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBlcnJvciA9IGVycjtcbiAgfSk7XG5cbiAgcHJvY2Vzcy5waXBlKHRoaXMsIHsgZW5kOiBmYWxzZSB9KTtcblxuICByZXR1cm4gcHJvY2Vzcztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZUNlbnRyYWxEaXJlY3RvcnlFbmQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlY29yZHMgPSB0aGlzLl9lbnRyaWVzLmxlbmd0aDtcbiAgdmFyIHNpemUgPSB0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGg7XG4gIHZhciBvZmZzZXQgPSB0aGlzLl9hcmNoaXZlLmNlbnRyYWxPZmZzZXQ7XG5cbiAgaWYgKHRoaXMuaXNaaXA2NCgpKSB7XG4gICAgcmVjb3JkcyA9IGNvbnN0YW50cy5aSVA2NF9NQUdJQ19TSE9SVDtcbiAgICBzaXplID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICAgIG9mZnNldCA9IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcbiAgfVxuXG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfRU9DRCkpO1xuXG4gIC8vIGRpc2sgbnVtYmVyc1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5TSE9SVF9aRVJPKTtcbiAgdGhpcy53cml0ZShjb25zdGFudHMuU0hPUlRfWkVSTyk7XG5cbiAgLy8gbnVtYmVyIG9mIGVudHJpZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMocmVjb3JkcykpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhyZWNvcmRzKSk7XG5cbiAgLy8gbGVuZ3RoIGFuZCBsb2NhdGlvbiBvZiBDRFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKHNpemUpKTtcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhvZmZzZXQpKTtcblxuICAvLyBhcmNoaXZlIGNvbW1lbnRcbiAgdmFyIGNvbW1lbnQgPSB0aGlzLmdldENvbW1lbnQoKTtcbiAgdmFyIGNvbW1lbnRMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChjb21tZW50KTtcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoY29tbWVudExlbmd0aCkpO1xuICB0aGlzLndyaXRlKGNvbW1lbnQpO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX3dyaXRlQ2VudHJhbERpcmVjdG9yeVppcDY0ID0gZnVuY3Rpb24oKSB7XG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfWklQNjRfRU9DRCkpO1xuXG4gIC8vIHNpemUgb2YgdGhlIFpJUDY0IEVPQ0QgcmVjb3JkXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKDQ0KSk7XG5cbiAgLy8gdmVyc2lvbiBtYWRlIGJ5XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCkpO1xuXG4gIC8vIHZlcnNpb24gdG8gZXh0cmFjdFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb25zdGFudHMuTUlOX1ZFUlNJT05fWklQNjQpKTtcblxuICAvLyBkaXNrIG51bWJlcnNcbiAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcbiAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcblxuICAvLyBudW1iZXIgb2YgZW50cmllc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9lbnRyaWVzLmxlbmd0aCkpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9lbnRyaWVzLmxlbmd0aCkpO1xuXG4gIC8vIGxlbmd0aCBhbmQgbG9jYXRpb24gb2YgQ0RcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXModGhpcy5fYXJjaGl2ZS5jZW50cmFsTGVuZ3RoKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCkpO1xuXG4gIC8vIGV4dGVuc2libGUgZGF0YSBzZWN0b3JcbiAgLy8gbm90IGltcGxlbWVudGVkIGF0IHRoaXMgdGltZVxuXG4gIC8vIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19aSVA2NF9FT0NEX0xPQykpO1xuXG4gIC8vIGRpc2sgbnVtYmVyIGhvbGRpbmcgdGhlIFpJUDY0IEVPQ0QgcmVjb3JkXG4gIHRoaXMud3JpdGUoY29uc3RhbnRzLkxPTkdfWkVSTyk7XG5cbiAgLy8gcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSBaSVA2NCBFT0NEIHJlY29yZFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9hcmNoaXZlLmNlbnRyYWxPZmZzZXQgKyB0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGgpKTtcblxuICAvLyB0b3RhbCBudW1iZXIgb2YgZGlza3NcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcygxKSk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVDZW50cmFsRmlsZUhlYWRlciA9IGZ1bmN0aW9uKGFlKSB7XG4gIHZhciBncGIgPSBhZS5nZXRHZW5lcmFsUHVycG9zZUJpdCgpO1xuICB2YXIgbWV0aG9kID0gYWUuZ2V0TWV0aG9kKCk7XG4gIHZhciBmaWxlT2Zmc2V0ID0gYWUuX29mZnNldHMuZmlsZTtcblxuICB2YXIgc2l6ZSA9IGFlLmdldFNpemUoKTtcbiAgdmFyIGNvbXByZXNzZWRTaXplID0gYWUuZ2V0Q29tcHJlc3NlZFNpemUoKTtcblxuICBpZiAoYWUuaXNaaXA2NCgpIHx8IGZpbGVPZmZzZXQgPiBjb25zdGFudHMuWklQNjRfTUFHSUMpIHtcbiAgICBzaXplID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICAgIGNvbXByZXNzZWRTaXplID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICAgIGZpbGVPZmZzZXQgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG5cbiAgICBhZS5zZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCk7XG5cbiAgICB2YXIgZXh0cmFCdWYgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb25zdGFudHMuWklQNjRfRVhUUkFfSUQpLFxuICAgICAgemlwVXRpbC5nZXRTaG9ydEJ5dGVzKDI0KSxcbiAgICAgIHppcFV0aWwuZ2V0RWlnaHRCeXRlcyhhZS5nZXRTaXplKCkpLFxuICAgICAgemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpLFxuICAgICAgemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLl9vZmZzZXRzLmZpbGUpXG4gICAgXSwgMjgpO1xuXG4gICAgYWUuc2V0RXh0cmEoZXh0cmFCdWYpO1xuICB9XG5cbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19DRkgpKTtcblxuICAvLyB2ZXJzaW9uIG1hZGUgYnlcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoKGFlLmdldFBsYXRmb3JtKCkgPDwgOCkgfCBjb25zdGFudHMuVkVSU0lPTl9NQURFQlkpKTtcblxuICAvLyB2ZXJzaW9uIHRvIGV4dHJhY3QgYW5kIGdlbmVyYWwgYml0IGZsYWdcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoYWUuZ2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdCgpKSk7XG4gIHRoaXMud3JpdGUoZ3BiLmVuY29kZSgpKTtcblxuICAvLyBjb21wcmVzc2lvbiBtZXRob2RcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMobWV0aG9kKSk7XG5cbiAgLy8gZGF0ZXRpbWVcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhhZS5nZXRUaW1lRG9zKCkpKTtcblxuICAvLyBjcmMzMiBjaGVja3N1bVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENyYygpKSk7XG5cbiAgLy8gc2l6ZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb21wcmVzc2VkU2l6ZSkpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKHNpemUpKTtcblxuICB2YXIgbmFtZSA9IGFlLmdldE5hbWUoKTtcbiAgdmFyIGNvbW1lbnQgPSBhZS5nZXRDb21tZW50KCk7XG4gIHZhciBleHRyYSA9IGFlLmdldENlbnRyYWxEaXJlY3RvcnlFeHRyYSgpO1xuXG4gIGlmIChncGIudXNlc1VURjhGb3JOYW1lcygpKSB7XG4gICAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpO1xuICAgIGNvbW1lbnQgPSBCdWZmZXIuZnJvbShjb21tZW50KTtcbiAgfVxuXG4gIC8vIG5hbWUgbGVuZ3RoXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKG5hbWUubGVuZ3RoKSk7XG5cbiAgLy8gZXh0cmEgbGVuZ3RoXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGV4dHJhLmxlbmd0aCkpO1xuXG4gIC8vIGNvbW1lbnRzIGxlbmd0aFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb21tZW50Lmxlbmd0aCkpO1xuXG4gIC8vIGRpc2sgbnVtYmVyIHN0YXJ0XG4gIHRoaXMud3JpdGUoY29uc3RhbnRzLlNIT1JUX1pFUk8pO1xuXG4gIC8vIGludGVybmFsIGF0dHJpYnV0ZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoYWUuZ2V0SW50ZXJuYWxBdHRyaWJ1dGVzKCkpKTtcblxuICAvLyBleHRlcm5hbCBhdHRyaWJ1dGVzXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0RXh0ZXJuYWxBdHRyaWJ1dGVzKCkpKTtcblxuICAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgTEZIXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoZmlsZU9mZnNldCkpO1xuXG4gIC8vIG5hbWVcbiAgdGhpcy53cml0ZShuYW1lKTtcblxuICAvLyBleHRyYVxuICB0aGlzLndyaXRlKGV4dHJhKTtcblxuICAvLyBjb21tZW50XG4gIHRoaXMud3JpdGUoY29tbWVudCk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVEYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uKGFlKSB7XG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfREQpKTtcblxuICAvLyBjcmMzMiBjaGVja3N1bVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENyYygpKSk7XG5cbiAgLy8gc2l6ZXNcbiAgaWYgKGFlLmlzWmlwNjQoKSkge1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyhhZS5nZXRTaXplKCkpKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFNpemUoKSkpO1xuICB9XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVMb2NhbEZpbGVIZWFkZXIgPSBmdW5jdGlvbihhZSkge1xuICB2YXIgZ3BiID0gYWUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKTtcbiAgdmFyIG1ldGhvZCA9IGFlLmdldE1ldGhvZCgpO1xuICB2YXIgbmFtZSA9IGFlLmdldE5hbWUoKTtcbiAgdmFyIGV4dHJhID0gYWUuZ2V0TG9jYWxGaWxlRGF0YUV4dHJhKCk7XG5cbiAgaWYgKGFlLmlzWmlwNjQoKSkge1xuICAgIGdwYi51c2VEYXRhRGVzY3JpcHRvcih0cnVlKTtcbiAgICBhZS5zZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCk7XG4gIH1cblxuICBpZiAoZ3BiLnVzZXNVVEY4Rm9yTmFtZXMoKSkge1xuICAgIG5hbWUgPSBCdWZmZXIuZnJvbShuYW1lKTtcbiAgfVxuXG4gIGFlLl9vZmZzZXRzLmZpbGUgPSB0aGlzLm9mZnNldDtcblxuICAvLyBzaWduYXR1cmVcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb25zdGFudHMuU0lHX0xGSCkpO1xuXG4gIC8vIHZlcnNpb24gdG8gZXh0cmFjdCBhbmQgZ2VuZXJhbCBiaXQgZmxhZ1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhhZS5nZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KCkpKTtcbiAgdGhpcy53cml0ZShncGIuZW5jb2RlKCkpO1xuXG4gIC8vIGNvbXByZXNzaW9uIG1ldGhvZFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhtZXRob2QpKTtcblxuICAvLyBkYXRldGltZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFRpbWVEb3MoKSkpO1xuXG4gIGFlLl9vZmZzZXRzLmRhdGEgPSB0aGlzLm9mZnNldDtcblxuICAvLyBjcmMzMiBjaGVja3N1bSBhbmQgc2l6ZXNcbiAgaWYgKGdwYi51c2VzRGF0YURlc2NyaXB0b3IoKSkge1xuICAgIHRoaXMud3JpdGUoY29uc3RhbnRzLkxPTkdfWkVSTyk7XG4gICAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcbiAgICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q3JjKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFNpemUoKSkpO1xuICB9XG5cbiAgLy8gbmFtZSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMobmFtZS5sZW5ndGgpKTtcblxuICAvLyBleHRyYSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoZXh0cmEubGVuZ3RoKSk7XG5cbiAgLy8gbmFtZVxuICB0aGlzLndyaXRlKG5hbWUpO1xuXG4gIC8vIGV4dHJhXG4gIHRoaXMud3JpdGUoZXh0cmEpO1xuXG4gIGFlLl9vZmZzZXRzLmNvbnRlbnRzID0gdGhpcy5vZmZzZXQ7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5nZXRDb21tZW50ID0gZnVuY3Rpb24oY29tbWVudCkge1xuICByZXR1cm4gdGhpcy5fYXJjaGl2ZS5jb21tZW50ICE9PSBudWxsID8gdGhpcy5fYXJjaGl2ZS5jb21tZW50IDogJyc7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5pc1ppcDY0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9hcmNoaXZlLmZvcmNlWmlwNjQgfHwgdGhpcy5fZW50cmllcy5sZW5ndGggPiBjb25zdGFudHMuWklQNjRfTUFHSUNfU0hPUlQgfHwgdGhpcy5fYXJjaGl2ZS5jZW50cmFsTGVuZ3RoID4gY29uc3RhbnRzLlpJUDY0X01BR0lDIHx8IHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLnNldENvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KSB7XG4gIHRoaXMuX2FyY2hpdmUuY29tbWVudCA9IGNvbW1lbnQ7XG59O1xuIiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFyY2hpdmVFbnRyeTogcmVxdWlyZSgnLi9hcmNoaXZlcnMvYXJjaGl2ZS1lbnRyeScpLFxuICBaaXBBcmNoaXZlRW50cnk6IHJlcXVpcmUoJy4vYXJjaGl2ZXJzL3ppcC96aXAtYXJjaGl2ZS1lbnRyeScpLFxuICBBcmNoaXZlT3V0cHV0U3RyZWFtOiByZXF1aXJlKCcuL2FyY2hpdmVycy9hcmNoaXZlLW91dHB1dC1zdHJlYW0nKSxcbiAgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbTogcmVxdWlyZSgnLi9hcmNoaXZlcnMvemlwL3ppcC1hcmNoaXZlLW91dHB1dC1zdHJlYW0nKVxufTsiLAogICAgIi8qKlxuICogWmlwU3RyZWFtXG4gKlxuICogQGlnbm9yZVxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS16aXAtc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xuXG52YXIgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbSA9IHJlcXVpcmUoJ2NvbXByZXNzLWNvbW1vbnMnKS5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtO1xudmFyIFppcEFyY2hpdmVFbnRyeSA9IHJlcXVpcmUoJ2NvbXByZXNzLWNvbW1vbnMnKS5aaXBBcmNoaXZlRW50cnk7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgnYXJjaGl2ZXItdXRpbHMnKTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIGV4dGVybmFsOlppcEFyY2hpdmVPdXRwdXRTdHJlYW1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5jb21tZW50XSBTZXRzIHRoZSB6aXAgYXJjaGl2ZSBjb21tZW50LlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZUxvY2FsVGltZT1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gbG9jYWwgZmlsZSB0aW1lcyBpbnN0ZWFkIG9mIFVUQy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZm9yY2VaaXA2ND1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gWklQNjQgaGVhZGVycy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc3RvcmU9ZmFsc2VdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy56bGliXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqIHRvIGNvbnRyb2wgY29tcHJlc3Npb24uXG4gKi9cbnZhciBaaXBTdHJlYW0gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFppcFN0cmVhbSkpIHtcbiAgICByZXR1cm4gbmV3IFppcFN0cmVhbShvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLnpsaWIgPSBvcHRpb25zLnpsaWIgfHwge307XG5cbiAgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5sZXZlbCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5sZXZlbCA+PSAwKSB7XG4gICAgb3B0aW9ucy56bGliLmxldmVsID0gb3B0aW9ucy5sZXZlbDtcbiAgICBkZWxldGUgb3B0aW9ucy5sZXZlbDtcbiAgfVxuXG4gIGlmICghb3B0aW9ucy5mb3JjZVppcDY0ICYmIHR5cGVvZiBvcHRpb25zLnpsaWIubGV2ZWwgPT09ICdudW1iZXInICYmIG9wdGlvbnMuemxpYi5sZXZlbCA9PT0gMCkge1xuICAgIG9wdGlvbnMuc3RvcmUgPSB0cnVlO1xuICB9XG5cbiAgb3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoID0gb3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoIHx8IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zLmNvbW1lbnQgJiYgb3B0aW9ucy5jb21tZW50Lmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLnNldENvbW1lbnQob3B0aW9ucy5jb21tZW50KTtcbiAgfVxufTtcblxuaW5oZXJpdHMoWmlwU3RyZWFtLCBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtKTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGVudHJ5IGRhdGEgd2l0aCBmYWxsYmFja3MgZm9yIGtleSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuWmlwU3RyZWFtLnByb3RvdHlwZS5fbm9ybWFsaXplRmlsZURhdGEgPSBmdW5jdGlvbihkYXRhKSB7XG4gIGRhdGEgPSB1dGlsLmRlZmF1bHRzKGRhdGEsIHtcbiAgICB0eXBlOiAnZmlsZScsXG4gICAgbmFtZTogbnVsbCxcbiAgICBuYW1lUHJlcGVuZFNsYXNoOiB0aGlzLm9wdGlvbnMubmFtZVByZXBlbmRTbGFzaCxcbiAgICBsaW5rbmFtZTogbnVsbCxcbiAgICBkYXRlOiBudWxsLFxuICAgIG1vZGU6IG51bGwsXG4gICAgc3RvcmU6IHRoaXMub3B0aW9ucy5zdG9yZSxcbiAgICBjb21tZW50OiAnJ1xuICB9KTtcblxuICB2YXIgaXNEaXIgPSBkYXRhLnR5cGUgPT09ICdkaXJlY3RvcnknO1xuICB2YXIgaXNTeW1saW5rID0gZGF0YS50eXBlID09PSAnc3ltbGluayc7XG5cbiAgaWYgKGRhdGEubmFtZSkge1xuICAgIGRhdGEubmFtZSA9IHV0aWwuc2FuaXRpemVQYXRoKGRhdGEubmFtZSk7XG5cbiAgICBpZiAoIWlzU3ltbGluayAmJiBkYXRhLm5hbWUuc2xpY2UoLTEpID09PSAnLycpIHtcbiAgICAgIGlzRGlyID0gdHJ1ZTtcbiAgICAgIGRhdGEudHlwZSA9ICdkaXJlY3RvcnknO1xuICAgIH0gZWxzZSBpZiAoaXNEaXIpIHtcbiAgICAgIGRhdGEubmFtZSArPSAnLyc7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzRGlyIHx8IGlzU3ltbGluaykge1xuICAgIGRhdGEuc3RvcmUgPSB0cnVlO1xuICB9XG5cbiAgZGF0YS5kYXRlID0gdXRpbC5kYXRlaWZ5KGRhdGEuZGF0ZSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYW4gZW50cnkgZ2l2ZW4gYW4gaW5wdXQgc291cmNlICh0ZXh0IHN0cmluZywgYnVmZmVyLCBvciBzdHJlYW0pLlxuICpcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtfFN0cmluZyl9IHNvdXJjZSBUaGUgaW5wdXQgc291cmNlLlxuICogQHBhcmFtICB7T2JqZWN0fSBkYXRhXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRhdGEubmFtZSBTZXRzIHRoZSBlbnRyeSBuYW1lIGluY2x1ZGluZyBpbnRlcm5hbCBwYXRoLlxuICogQHBhcmFtICB7U3RyaW5nfSBbZGF0YS5jb21tZW50XSBTZXRzIHRoZSBlbnRyeSBjb21tZW50LlxuICogQHBhcmFtICB7KFN0cmluZ3xEYXRlKX0gW2RhdGEuZGF0ZT1OT1coKV0gU2V0cyB0aGUgZW50cnkgZGF0ZS5cbiAqIEBwYXJhbSAge051bWJlcn0gW2RhdGEubW9kZT1EOjA3NTUvRjowNjQ0XSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEBwYXJhbSAge0Jvb2xlYW59IFtkYXRhLnN0b3JlPW9wdGlvbnMuc3RvcmVdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSAge1N0cmluZ30gW2RhdGEudHlwZT1maWxlXSBTZXRzIHRoZSBlbnRyeSB0eXBlLiBEZWZhdWx0cyB0byBgZGlyZWN0b3J5YFxuICogaWYgbmFtZSBlbmRzIHdpdGggdHJhaWxpbmcgc2xhc2guXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4gdGhpc1xuICovXG5aaXBTdHJlYW0ucHJvdG90eXBlLmVudHJ5ID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSB0aGlzLl9lbWl0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgZGF0YSA9IHRoaXMuX25vcm1hbGl6ZUZpbGVEYXRhKGRhdGEpO1xuXG4gIGlmIChkYXRhLnR5cGUgIT09ICdmaWxlJyAmJiBkYXRhLnR5cGUgIT09ICdkaXJlY3RvcnknICYmIGRhdGEudHlwZSAhPT0gJ3N5bWxpbmsnKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKGRhdGEudHlwZSArICcgZW50cmllcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCcpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEubmFtZSAhPT0gJ3N0cmluZycgfHwgZGF0YS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcignZW50cnkgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZGF0YS50eXBlID09PSAnc3ltbGluaycgJiYgdHlwZW9mIGRhdGEubGlua25hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdlbnRyeSBsaW5rbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZSB3aGVuIHR5cGUgZXF1YWxzIHN5bWxpbmsnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGVudHJ5ID0gbmV3IFppcEFyY2hpdmVFbnRyeShkYXRhLm5hbWUpO1xuICBlbnRyeS5zZXRUaW1lKGRhdGEuZGF0ZSwgdGhpcy5vcHRpb25zLmZvcmNlTG9jYWxUaW1lKTtcblxuICBpZiAoZGF0YS5uYW1lUHJlcGVuZFNsYXNoKSB7XG4gICAgZW50cnkuc2V0TmFtZShkYXRhLm5hbWUsIHRydWUpO1xuICB9XG5cbiAgaWYgKGRhdGEuc3RvcmUpIHtcbiAgICBlbnRyeS5zZXRNZXRob2QoMCk7XG4gIH1cblxuICBpZiAoZGF0YS5jb21tZW50Lmxlbmd0aCA+IDApIHtcbiAgICBlbnRyeS5zZXRDb21tZW50KGRhdGEuY29tbWVudCk7XG4gIH1cblxuICBpZiAoZGF0YS50eXBlID09PSAnc3ltbGluaycgJiYgdHlwZW9mIGRhdGEubW9kZSAhPT0gJ251bWJlcicpIHtcbiAgICBkYXRhLm1vZGUgPSA0MDk2MDsgLy8gMDEyMDAwMFxuICB9XG5cbiAgaWYgKHR5cGVvZiBkYXRhLm1vZGUgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ3N5bWxpbmsnKSB7XG4gICAgICBkYXRhLm1vZGUgfD0gNDA5NjA7XG4gICAgfVxuXG4gICAgZW50cnkuc2V0VW5peE1vZGUoZGF0YS5tb2RlKTtcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdzeW1saW5rJyAmJiB0eXBlb2YgZGF0YS5saW5rbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2UgPSBCdWZmZXIuZnJvbShkYXRhLmxpbmtuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5lbnRyeS5jYWxsKHRoaXMsIGVudHJ5LCBzb3VyY2UsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogRmluYWxpemVzIHRoZSBpbnN0YW5jZSBhbmQgcHJldmVudHMgZnVydGhlciBhcHBlbmRpbmcgdG8gdGhlIGFyY2hpdmVcbiAqIHN0cnVjdHVyZSAocXVldWUgd2lsbCBjb250aW51ZSB0aWwgZHJhaW5lZCkuXG4gKlxuICogQHJldHVybiB2b2lkXG4gKi9cblppcFN0cmVhbS5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5maW5pc2goKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGlzIHN0cmVhbS5cbiAqIEBmdW5jdGlvbiBaaXBTdHJlYW0jZ2V0Qnl0ZXNXcml0dGVuXG4gKiBAcmV0dXJucyB7TnVtYmVyfVxuICovXG5cbi8qKlxuICogQ29tcHJlc3MgQ29tbW9ucyBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtXG4gKiBAZXh0ZXJuYWwgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zfVxuICovXG4iLAogICAgIi8qKlxuICogWklQIEZvcm1hdCBQbHVnaW5cbiAqXG4gKiBAbW9kdWxlIHBsdWdpbnMvemlwXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgZW5naW5lID0gcmVxdWlyZSgnemlwLXN0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtaaXBPcHRpb25zfSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5jb21tZW50XSBTZXRzIHRoZSB6aXAgYXJjaGl2ZSBjb21tZW50LlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZUxvY2FsVGltZT1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gbG9jYWwgZmlsZSB0aW1lcyBpbnN0ZWFkIG9mIFVUQy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZm9yY2VaaXA2ND1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gWklQNjQgaGVhZGVycy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubmFtZVByZXBlbmRTbGFzaD1mYWxzZV0gUHJlcGVuZHMgYSBmb3J3YXJkIHNsYXNoIHRvIGFyY2hpdmUgZmlsZSBwYXRocy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc3RvcmU9ZmFsc2VdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy56bGliXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqL1xudmFyIFppcCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFppcCkpIHtcbiAgICByZXR1cm4gbmV3IFppcChvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBjb21tZW50OiAnJyxcbiAgICBmb3JjZVVUQzogZmFsc2UsXG4gICAgbmFtZVByZXBlbmRTbGFzaDogZmFsc2UsXG4gICAgc3RvcmU6IGZhbHNlXG4gIH0pO1xuXG4gIHRoaXMuc3VwcG9ydHMgPSB7XG4gICAgZGlyZWN0b3J5OiB0cnVlLFxuICAgIHN5bWxpbms6IHRydWVcbiAgfTtcblxuICB0aGlzLmVuZ2luZSA9IG5ldyBlbmdpbmUob3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtKX0gc291cmNlXG4gKiBAcGFyYW0gIHtaaXBFbnRyeURhdGF9IGRhdGFcbiAqIEBwYXJhbSAge1N0cmluZ30gZGF0YS5uYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcGFyYW0gIHsoU3RyaW5nfERhdGUpfSBbZGF0YS5kYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHBhcmFtICB7TnVtYmVyfSBbZGF0YS5tb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHBhcmFtICB7U3RyaW5nfSBbZGF0YS5wcmVmaXhdIFNldHMgYSBwYXRoIHByZWZpeCBmb3IgdGhlIGVudHJ5IG5hbWUuIFVzZWZ1bFxuICogd2hlbiB3b3JraW5nIHdpdGggbWV0aG9kcyBsaWtlIGBkaXJlY3RvcnlgIG9yIGBnbG9iYC5cbiAqIEBwYXJhbSAge2ZzLlN0YXRzfSBbZGF0YS5zdGF0c10gU2V0cyB0aGUgZnMgc3RhdCBkYXRhIGZvciB0aGlzIGVudHJ5IGFsbG93aW5nXG4gKiBmb3IgcmVkdWN0aW9uIG9mIGZzIHN0YXQgY2FsbHMgd2hlbiBzdGF0IGRhdGEgaXMgYWxyZWFkeSBrbm93bi5cbiAqIEBwYXJhbSAge0Jvb2xlYW59IFtkYXRhLnN0b3JlPVppcE9wdGlvbnMuc3RvcmVdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cblppcC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICB0aGlzLmVuZ2luZS5lbnRyeShzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB2b2lkXG4gKi9cblppcC5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbmdpbmUuZmluYWxpemUoKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5aaXAucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVuZ2luZS5vbi5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5aaXAucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLnBpcGUuYXBwbHkodGhpcy5lbmdpbmUsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuWmlwLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLnVucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gWmlwO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcE9wdGlvbnNcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbY29tbWVudF0gU2V0cyB0aGUgemlwIGFyY2hpdmUgY29tbWVudC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW2ZvcmNlTG9jYWxUaW1lPWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBsb2NhbCBmaWxlIHRpbWVzIGluc3RlYWQgb2YgVVRDLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZm9yY2VaaXA2ND1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gWklQNjQgaGVhZGVycy5cbiAqIEBwcnBwZXJ0eSB7Qm9vbGVhbn0gW25hbWVQcmVwZW5kU2xhc2g9ZmFsc2VdIFByZXBlbmRzIGEgZm9yd2FyZCBzbGFzaCB0byBhcmNoaXZlIGZpbGUgcGF0aHMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtzdG9yZT1mYWxzZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFt6bGliXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqIHRvIGNvbnRyb2wgY29tcHJlc3Npb24uXG4gKiBAcHJvcGVydHkgeyp9IFsqXSBTZWUgW3ppcC1zdHJlYW1de0BsaW5rIGh0dHBzOi8vYXJjaGl2ZXJqcy5jb20vemlwLXN0cmVhbS9aaXBTdHJlYW0uaHRtbH0gZG9jdW1lbnRhdGlvbiBmb3IgY3VycmVudCBsaXN0IG9mIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBaaXBFbnRyeURhdGFcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBuYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcHJvcGVydHkgeyhTdHJpbmd8RGF0ZSl9IFtkYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFttb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbbmFtZVByZXBlbmRTbGFzaD1aaXBPcHRpb25zLm5hbWVQcmVwZW5kU2xhc2hdIFByZXBlbmRzIGEgZm9yd2FyZCBzbGFzaCB0byBhcmNoaXZlIGZpbGUgcGF0aHMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gW3ByZWZpeF0gU2V0cyBhIHBhdGggcHJlZml4IGZvciB0aGUgZW50cnkgbmFtZS4gVXNlZnVsXG4gKiB3aGVuIHdvcmtpbmcgd2l0aCBtZXRob2RzIGxpa2UgYGRpcmVjdG9yeWAgb3IgYGdsb2JgLlxuICogQHByb3BlcnR5IHtmcy5TdGF0c30gW3N0YXRzXSBTZXRzIHRoZSBmcyBzdGF0IGRhdGEgZm9yIHRoaXMgZW50cnkgYWxsb3dpbmdcbiAqIGZvciByZWR1Y3Rpb24gb2YgZnMgc3RhdCBjYWxscyB3aGVuIHN0YXQgZGF0YSBpcyBhbHJlYWR5IGtub3duLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbc3RvcmU9WmlwT3B0aW9ucy5zdG9yZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICovXG5cbi8qKlxuICogWmlwU3RyZWFtIE1vZHVsZVxuICogQGV4dGVybmFsIFppcFN0cmVhbVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuYXJjaGl2ZXJqcy5jb20vemlwLXN0cmVhbS9aaXBTdHJlYW0uaHRtbH1cbiAqL1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gJ2Z1bmN0aW9uJyA/IHF1ZXVlTWljcm90YXNrIDogKGZuKSA9PiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZuKVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbicpXG4gID8gcHJvY2Vzcy5uZXh0VGljay5iaW5kKHByb2Nlc3MpXG4gIDogcmVxdWlyZSgnLi9xdWV1ZS1taWNyb3Rhc2snKVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZpeGVkRklGTyB7XG4gIGNvbnN0cnVjdG9yIChod20pIHtcbiAgICBpZiAoIShod20gPiAwKSB8fCAoKGh3bSAtIDEpICYgaHdtKSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdNYXggc2l6ZSBmb3IgYSBGaXhlZEZJRk8gc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvJylcbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheShod20pXG4gICAgdGhpcy5tYXNrID0gaHdtIC0gMVxuICAgIHRoaXMudG9wID0gMFxuICAgIHRoaXMuYnRtID0gMFxuICAgIHRoaXMubmV4dCA9IG51bGxcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzLnRvcCA9IHRoaXMuYnRtID0gMFxuICAgIHRoaXMubmV4dCA9IG51bGxcbiAgICB0aGlzLmJ1ZmZlci5maWxsKHVuZGVmaW5lZClcbiAgfVxuXG4gIHB1c2ggKGRhdGEpIHtcbiAgICBpZiAodGhpcy5idWZmZXJbdGhpcy50b3BdICE9PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZVxuICAgIHRoaXMuYnVmZmVyW3RoaXMudG9wXSA9IGRhdGFcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYgdGhpcy5tYXNrXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHNoaWZ0ICgpIHtcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5idWZmZXJbdGhpcy5idG1dXG4gICAgaWYgKGxhc3QgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHRoaXMuYnVmZmVyW3RoaXMuYnRtXSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYnRtID0gKHRoaXMuYnRtICsgMSkgJiB0aGlzLm1hc2tcbiAgICByZXR1cm4gbGFzdFxuICB9XG5cbiAgcGVlayAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuYnRtXVxuICB9XG5cbiAgaXNFbXB0eSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuYnRtXSA9PT0gdW5kZWZpbmVkXG4gIH1cbn1cbiIsCiAgICAiY29uc3QgRml4ZWRGSUZPID0gcmVxdWlyZSgnLi9maXhlZC1zaXplJylcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGYXN0RklGTyB7XG4gIGNvbnN0cnVjdG9yIChod20pIHtcbiAgICB0aGlzLmh3bSA9IGh3bSB8fCAxNlxuICAgIHRoaXMuaGVhZCA9IG5ldyBGaXhlZEZJRk8odGhpcy5od20pXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkXG4gICAgdGhpcy5sZW5ndGggPSAwXG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsXG4gICAgdGhpcy5oZWFkLmNsZWFyKClcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgfVxuXG4gIHB1c2ggKHZhbCkge1xuICAgIHRoaXMubGVuZ3RoKytcbiAgICBpZiAoIXRoaXMuaGVhZC5wdXNoKHZhbCkpIHtcbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmhlYWRcbiAgICAgIHRoaXMuaGVhZCA9IHByZXYubmV4dCA9IG5ldyBGaXhlZEZJRk8oMiAqIHRoaXMuaGVhZC5idWZmZXIubGVuZ3RoKVxuICAgICAgdGhpcy5oZWFkLnB1c2godmFsKVxuICAgIH1cbiAgfVxuXG4gIHNoaWZ0ICgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggIT09IDApIHRoaXMubGVuZ3RoLS1cbiAgICBjb25zdCB2YWwgPSB0aGlzLnRhaWwuc2hpZnQoKVxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhaWwubmV4dCkge1xuICAgICAgY29uc3QgbmV4dCA9IHRoaXMudGFpbC5uZXh0XG4gICAgICB0aGlzLnRhaWwubmV4dCA9IG51bGxcbiAgICAgIHRoaXMudGFpbCA9IG5leHRcbiAgICAgIHJldHVybiB0aGlzLnRhaWwuc2hpZnQoKVxuICAgIH1cblxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIHBlZWsgKCkge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMudGFpbC5wZWVrKClcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQgJiYgdGhpcy50YWlsLm5leHQpIHJldHVybiB0aGlzLnRhaWwubmV4dC5wZWVrKClcbiAgICByZXR1cm4gdmFsXG4gIH1cblxuICBpc0VtcHR5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5sZW5ndGggPT09IDBcbiAgfVxufVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBhc3NUaHJvdWdoRGVjb2RlciB7XG4gIGNvbnN0cnVjdG9yIChlbmNvZGluZykge1xuICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZ1xuICB9XG5cbiAgZ2V0IHJlbWFpbmluZyAoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGRlY29kZSAodGFpbCkge1xuICAgIHJldHVybiB0YWlsLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpXG4gIH1cblxuICBmbHVzaCAoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cbiIsCiAgICAiLyoqXG4gKiBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFVURjhEZWNvZGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuY29kZVBvaW50ID0gMFxuICAgIHRoaXMuYnl0ZXNTZWVuID0gMFxuICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAwXG4gICAgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHg4MFxuICAgIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4YmZcbiAgfVxuXG4gIGdldCByZW1haW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmJ5dGVzU2VlblxuICB9XG5cbiAgZGVjb2RlIChkYXRhKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhIGZhc3QgcGF0aCwganVzdCBzbmlmZiBpZiB0aGUgbGFzdCBwYXJ0IGlzIGEgYm91bmRhcnlcbiAgICBpZiAodGhpcy5ieXRlc05lZWRlZCA9PT0gMCkge1xuICAgICAgbGV0IGlzQm91bmRhcnkgPSB0cnVlXG5cbiAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1heCgwLCBkYXRhLmJ5dGVMZW5ndGggLSA0KSwgbiA9IGRhdGEuYnl0ZUxlbmd0aDsgaSA8IG4gJiYgaXNCb3VuZGFyeTsgaSsrKSB7XG4gICAgICAgIGlzQm91bmRhcnkgPSBkYXRhW2ldIDw9IDB4N2ZcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQm91bmRhcnkpIHJldHVybiBkYXRhLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gJydcblxuICAgIGZvciAobGV0IGkgPSAwLCBuID0gZGF0YS5ieXRlTGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBjb25zdCBieXRlID0gZGF0YVtpXVxuXG4gICAgICBpZiAodGhpcy5ieXRlc05lZWRlZCA9PT0gMCkge1xuICAgICAgICBpZiAoYnl0ZSA8PSAweDdmKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJ5dGVzU2VlbiA9IDFcblxuICAgICAgICAgIGlmIChieXRlID49IDB4YzIgJiYgYnl0ZSA8PSAweGRmKSB7XG4gICAgICAgICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gMlxuICAgICAgICAgICAgdGhpcy5jb2RlUG9pbnQgPSBieXRlICYgMHgxZlxuICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAweGUwICYmIGJ5dGUgPD0gMHhlZikge1xuICAgICAgICAgICAgaWYgKGJ5dGUgPT09IDB4ZTApIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4YTBcbiAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGUgPT09IDB4ZWQpIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4OWZcbiAgICAgICAgICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAzXG4gICAgICAgICAgICB0aGlzLmNvZGVQb2ludCA9IGJ5dGUgJiAweGZcbiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPj0gMHhmMCAmJiBieXRlIDw9IDB4ZjQpIHtcbiAgICAgICAgICAgIGlmIChieXRlID09PSAweGYwKSB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDkwXG4gICAgICAgICAgICBpZiAoYnl0ZSA9PT0gMHhmNCkgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHg4ZlxuICAgICAgICAgICAgdGhpcy5ieXRlc05lZWRlZCA9IDRcbiAgICAgICAgICAgIHRoaXMuY29kZVBvaW50ID0gYnl0ZSAmIDB4N1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcdWZmZmQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGJ5dGUgPCB0aGlzLmxvd2VyQm91bmRhcnkgfHwgYnl0ZSA+IHRoaXMudXBwZXJCb3VuZGFyeSkge1xuICAgICAgICB0aGlzLmNvZGVQb2ludCA9IDBcbiAgICAgICAgdGhpcy5ieXRlc05lZWRlZCA9IDBcbiAgICAgICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgICAgIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4ODBcbiAgICAgICAgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHhiZlxuXG4gICAgICAgIHJlc3VsdCArPSAnXFx1ZmZmZCdcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDgwXG4gICAgICB0aGlzLnVwcGVyQm91bmRhcnkgPSAweGJmXG5cbiAgICAgIHRoaXMuY29kZVBvaW50ID0gKHRoaXMuY29kZVBvaW50IDw8IDYpIHwgKGJ5dGUgJiAweDNmKVxuICAgICAgdGhpcy5ieXRlc1NlZW4rK1xuXG4gICAgICBpZiAodGhpcy5ieXRlc1NlZW4gIT09IHRoaXMuYnl0ZXNOZWVkZWQpIGNvbnRpbnVlXG5cbiAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludCh0aGlzLmNvZGVQb2ludClcblxuICAgICAgdGhpcy5jb2RlUG9pbnQgPSAwXG4gICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gMFxuICAgICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZmx1c2ggKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYnl0ZXNOZWVkZWQgPiAwID8gJ1xcdWZmZmQnIDogJydcblxuICAgIHRoaXMuY29kZVBvaW50ID0gMFxuICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAwXG4gICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHg4MFxuICAgIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4YmZcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuIiwKICAgICJjb25zdCBQYXNzVGhyb3VnaERlY29kZXIgPSByZXF1aXJlKCcuL2xpYi9wYXNzLXRocm91Z2gtZGVjb2RlcicpXG5jb25zdCBVVEY4RGVjb2RlciA9IHJlcXVpcmUoJy4vbGliL3V0ZjgtZGVjb2RlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgVGV4dERlY29kZXIge1xuICBjb25zdHJ1Y3RvciAoZW5jb2RpbmcgPSAndXRmOCcpIHtcbiAgICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpXG5cbiAgICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgICB0aGlzLmRlY29kZXIgPSBuZXcgVVRGOERlY29kZXIoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVuY29kaW5nOiAnICsgdGhpcy5lbmNvZGluZylcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IG5ldyBQYXNzVGhyb3VnaERlY29kZXIodGhpcy5lbmNvZGluZylcbiAgICB9XG4gIH1cblxuICBnZXQgcmVtYWluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLnJlbWFpbmluZ1xuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHJldHVybiBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci5kZWNvZGUoZGF0YSlcbiAgfVxuXG4gIC8vIEZvciBOb2RlLmpzIGNvbXBhdGliaWxpdHlcbiAgd3JpdGUgKGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5wdXNoKGRhdGEpXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICBsZXQgcmVzdWx0ID0gJydcbiAgICBpZiAoZGF0YSkgcmVzdWx0ID0gdGhpcy5wdXNoKGRhdGEpXG4gICAgcmVzdWx0ICs9IHRoaXMuZGVjb2Rlci5mbHVzaCgpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nIChlbmNvZGluZykge1xuICBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKClcblxuICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgICAgcmV0dXJuICd1dGY4J1xuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gJ3V0ZjE2bGUnXG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgICAgcmV0dXJuICdsYXRpbjEnXG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnaGV4JzpcbiAgICAgIHJldHVybiBlbmNvZGluZ1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxufTtcbiIsCiAgICAiY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCBTVFJFQU1fREVTVFJPWUVEID0gbmV3IEVycm9yKCdTdHJlYW0gd2FzIGRlc3Ryb3llZCcpXG5jb25zdCBQUkVNQVRVUkVfQ0xPU0UgPSBuZXcgRXJyb3IoJ1ByZW1hdHVyZSBjbG9zZScpXG5cbmNvbnN0IHF1ZXVlVGljayA9IHJlcXVpcmUoJ3F1ZXVlLXRpY2snKVxuY29uc3QgRklGTyA9IHJlcXVpcmUoJ2Zhc3QtZmlmbycpXG5jb25zdCBUZXh0RGVjb2RlciA9IHJlcXVpcmUoJ3RleHQtZGVjb2RlcicpXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLXNwYWNlcyAqL1xuXG4vLyAyOSBiaXRzIHVzZWQgdG90YWwgKDQgZnJvbSBzaGFyZWQsIDE0IGZyb20gcmVhZCwgYW5kIDExIGZyb20gd3JpdGUpXG5jb25zdCBNQVggPSAoKDEgPDwgMjkpIC0gMSlcblxuLy8gU2hhcmVkIHN0YXRlXG5jb25zdCBPUEVOSU5HICAgICAgID0gMGIwMDAxXG5jb25zdCBQUkVERVNUUk9ZSU5HID0gMGIwMDEwXG5jb25zdCBERVNUUk9ZSU5HICAgID0gMGIwMTAwXG5jb25zdCBERVNUUk9ZRUQgICAgID0gMGIxMDAwXG5cbmNvbnN0IE5PVF9PUEVOSU5HID0gTUFYIF4gT1BFTklOR1xuY29uc3QgTk9UX1BSRURFU1RST1lJTkcgPSBNQVggXiBQUkVERVNUUk9ZSU5HXG5cbi8vIFJlYWQgc3RhdGUgKDQgYml0IG9mZnNldCBmcm9tIHNoYXJlZCBzdGF0ZSlcbmNvbnN0IFJFQURfQUNUSVZFICAgICAgICAgICA9IDBiMDAwMDAwMDAwMDAwMDEgPDwgNFxuY29uc3QgUkVBRF9VUERBVElORyAgICAgICAgID0gMGIwMDAwMDAwMDAwMDAxMCA8PCA0XG5jb25zdCBSRUFEX1BSSU1BUlkgICAgICAgICAgPSAwYjAwMDAwMDAwMDAwMTAwIDw8IDRcbmNvbnN0IFJFQURfUVVFVUVEICAgICAgICAgICA9IDBiMDAwMDAwMDAwMDEwMDAgPDwgNFxuY29uc3QgUkVBRF9SRVNVTUVEICAgICAgICAgID0gMGIwMDAwMDAwMDAxMDAwMCA8PCA0XG5jb25zdCBSRUFEX1BJUEVfRFJBSU5FRCAgICAgPSAwYjAwMDAwMDAwMTAwMDAwIDw8IDRcbmNvbnN0IFJFQURfRU5ESU5HICAgICAgICAgICA9IDBiMDAwMDAwMDEwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9FTUlUX0RBVEEgICAgICAgID0gMGIwMDAwMDAxMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX0VNSVRfUkVBREFCTEUgICAgPSAwYjAwMDAwMTAwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfRU1JVFRFRF9SRUFEQUJMRSA9IDBiMDAwMDEwMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9ET05FICAgICAgICAgICAgID0gMGIwMDAxMDAwMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX05FWFRfVElDSyAgICAgICAgPSAwYjAwMTAwMDAwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfTkVFRFNfUFVTSCAgICAgICA9IDBiMDEwMDAwMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9SRUFEX0FIRUFEICAgICAgID0gMGIxMDAwMDAwMDAwMDAwMCA8PCA0XG5cbi8vIENvbWJpbmVkIHJlYWQgc3RhdGVcbmNvbnN0IFJFQURfRkxPV0lORyA9IFJFQURfUkVTVU1FRCB8IFJFQURfUElQRV9EUkFJTkVEXG5jb25zdCBSRUFEX0FDVElWRV9BTkRfTkVFRFNfUFVTSCA9IFJFQURfQUNUSVZFIHwgUkVBRF9ORUVEU19QVVNIXG5jb25zdCBSRUFEX1BSSU1BUllfQU5EX0FDVElWRSA9IFJFQURfUFJJTUFSWSB8IFJFQURfQUNUSVZFXG5jb25zdCBSRUFEX0VNSVRfUkVBREFCTEVfQU5EX1FVRVVFRCA9IFJFQURfRU1JVF9SRUFEQUJMRSB8IFJFQURfUVVFVUVEXG5jb25zdCBSRUFEX1JFU1VNRURfUkVBRF9BSEVBRCA9IFJFQURfUkVTVU1FRCB8IFJFQURfUkVBRF9BSEVBRFxuXG5jb25zdCBSRUFEX05PVF9BQ1RJVkUgICAgICAgICAgICAgPSBNQVggXiBSRUFEX0FDVElWRVxuY29uc3QgUkVBRF9OT05fUFJJTUFSWSAgICAgICAgICAgID0gTUFYIF4gUkVBRF9QUklNQVJZXG5jb25zdCBSRUFEX05PTl9QUklNQVJZX0FORF9QVVNIRUQgPSBNQVggXiAoUkVBRF9QUklNQVJZIHwgUkVBRF9ORUVEU19QVVNIKVxuY29uc3QgUkVBRF9QVVNIRUQgICAgICAgICAgICAgICAgID0gTUFYIF4gUkVBRF9ORUVEU19QVVNIXG5jb25zdCBSRUFEX1BBVVNFRCAgICAgICAgICAgICAgICAgPSBNQVggXiBSRUFEX1JFU1VNRURcbmNvbnN0IFJFQURfTk9UX1FVRVVFRCAgICAgICAgICAgICA9IE1BWCBeIChSRUFEX1FVRVVFRCB8IFJFQURfRU1JVFRFRF9SRUFEQUJMRSlcbmNvbnN0IFJFQURfTk9UX0VORElORyAgICAgICAgICAgICA9IE1BWCBeIFJFQURfRU5ESU5HXG5jb25zdCBSRUFEX1BJUEVfTk9UX0RSQUlORUQgICAgICAgPSBNQVggXiBSRUFEX0ZMT1dJTkdcbmNvbnN0IFJFQURfTk9UX05FWFRfVElDSyAgICAgICAgICA9IE1BWCBeIFJFQURfTkVYVF9USUNLXG5jb25zdCBSRUFEX05PVF9VUERBVElORyAgICAgICAgICAgPSBNQVggXiBSRUFEX1VQREFUSU5HXG5jb25zdCBSRUFEX05PX1JFQURfQUhFQUQgICAgICAgICAgPSBNQVggXiBSRUFEX1JFQURfQUhFQURcbmNvbnN0IFJFQURfUEFVU0VEX05PX1JFQURfQUhFQUQgICA9IE1BWCBeIFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEXG5cbi8vIFdyaXRlIHN0YXRlICgxOCBiaXQgb2Zmc2V0LCA0IGJpdCBvZmZzZXQgZnJvbSBzaGFyZWQgc3RhdGUgYW5kIDE0IGZyb20gcmVhZCBzdGF0ZSlcbmNvbnN0IFdSSVRFX0FDVElWRSAgICAgPSAwYjAwMDAwMDAwMDAxIDw8IDE4XG5jb25zdCBXUklURV9VUERBVElORyAgID0gMGIwMDAwMDAwMDAxMCA8PCAxOFxuY29uc3QgV1JJVEVfUFJJTUFSWSAgICA9IDBiMDAwMDAwMDAxMDAgPDwgMThcbmNvbnN0IFdSSVRFX1FVRVVFRCAgICAgPSAwYjAwMDAwMDAxMDAwIDw8IDE4XG5jb25zdCBXUklURV9VTkRSQUlORUQgID0gMGIwMDAwMDAxMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfRE9ORSAgICAgICA9IDBiMDAwMDAxMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX0VNSVRfRFJBSU4gPSAwYjAwMDAxMDAwMDAwIDw8IDE4XG5jb25zdCBXUklURV9ORVhUX1RJQ0sgID0gMGIwMDAxMDAwMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfV1JJVElORyAgICA9IDBiMDAxMDAwMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX0ZJTklTSElORyAgPSAwYjAxMDAwMDAwMDAwIDw8IDE4XG5jb25zdCBXUklURV9DT1JLRUQgICAgID0gMGIxMDAwMDAwMDAwMCA8PCAxOFxuXG5jb25zdCBXUklURV9OT1RfQUNUSVZFICAgID0gTUFYIF4gKFdSSVRFX0FDVElWRSB8IFdSSVRFX1dSSVRJTkcpXG5jb25zdCBXUklURV9OT05fUFJJTUFSWSAgID0gTUFYIF4gV1JJVEVfUFJJTUFSWVxuY29uc3QgV1JJVEVfTk9UX0ZJTklTSElORyA9IE1BWCBeIFdSSVRFX0ZJTklTSElOR1xuY29uc3QgV1JJVEVfRFJBSU5FRCAgICAgICA9IE1BWCBeIFdSSVRFX1VORFJBSU5FRFxuY29uc3QgV1JJVEVfTk9UX1FVRVVFRCAgICA9IE1BWCBeIFdSSVRFX1FVRVVFRFxuY29uc3QgV1JJVEVfTk9UX05FWFRfVElDSyA9IE1BWCBeIFdSSVRFX05FWFRfVElDS1xuY29uc3QgV1JJVEVfTk9UX1VQREFUSU5HICA9IE1BWCBeIFdSSVRFX1VQREFUSU5HXG5jb25zdCBXUklURV9OT1RfQ09SS0VEICAgID0gTUFYIF4gV1JJVEVfQ09SS0VEXG5cbi8vIENvbWJpbmVkIHNoYXJlZCBzdGF0ZVxuY29uc3QgQUNUSVZFID0gUkVBRF9BQ1RJVkUgfCBXUklURV9BQ1RJVkVcbmNvbnN0IE5PVF9BQ1RJVkUgPSBNQVggXiBBQ1RJVkVcbmNvbnN0IERPTkUgPSBSRUFEX0RPTkUgfCBXUklURV9ET05FXG5jb25zdCBERVNUUk9ZX1NUQVRVUyA9IERFU1RST1lJTkcgfCBERVNUUk9ZRUQgfCBQUkVERVNUUk9ZSU5HXG5jb25zdCBPUEVOX1NUQVRVUyA9IERFU1RST1lfU1RBVFVTIHwgT1BFTklOR1xuY29uc3QgQVVUT19ERVNUUk9ZID0gREVTVFJPWV9TVEFUVVMgfCBET05FXG5jb25zdCBOT05fUFJJTUFSWSA9IFdSSVRFX05PTl9QUklNQVJZICYgUkVBRF9OT05fUFJJTUFSWVxuY29uc3QgQUNUSVZFX09SX1RJQ0tJTkcgPSBXUklURV9ORVhUX1RJQ0sgfCBSRUFEX05FWFRfVElDS1xuY29uc3QgVElDS0lORyA9IEFDVElWRV9PUl9USUNLSU5HICYgTk9UX0FDVElWRVxuY29uc3QgSVNfT1BFTklORyA9IE9QRU5fU1RBVFVTIHwgVElDS0lOR1xuXG4vLyBDb21iaW5lZCBzaGFyZWQgc3RhdGUgYW5kIHJlYWQgc3RhdGVcbmNvbnN0IFJFQURfUFJJTUFSWV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFJFQURfRU5ESU5HIHwgUkVBRF9ET05FXG5jb25zdCBSRUFEX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9ET05FIHwgUkVBRF9RVUVVRURcbmNvbnN0IFJFQURfRU5ESU5HX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9FTkRJTkcgfCBSRUFEX1FVRVVFRFxuY29uc3QgUkVBRF9SRUFEQUJMRV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFJFQURfRU1JVF9SRUFEQUJMRSB8IFJFQURfUVVFVUVEIHwgUkVBRF9FTUlUVEVEX1JFQURBQkxFXG5jb25zdCBTSE9VTERfTk9UX1JFQUQgPSBPUEVOX1NUQVRVUyB8IFJFQURfQUNUSVZFIHwgUkVBRF9FTkRJTkcgfCBSRUFEX0RPTkUgfCBSRUFEX05FRURTX1BVU0ggfCBSRUFEX1JFQURfQUhFQURcbmNvbnN0IFJFQURfQkFDS1BSRVNTVVJFX1NUQVRVUyA9IERFU1RST1lfU1RBVFVTIHwgUkVBRF9FTkRJTkcgfCBSRUFEX0RPTkVcbmNvbnN0IFJFQURfVVBEQVRFX1NZTkNfU1RBVFVTID0gUkVBRF9VUERBVElORyB8IE9QRU5fU1RBVFVTIHwgUkVBRF9ORVhUX1RJQ0sgfCBSRUFEX1BSSU1BUllcblxuLy8gQ29tYmluZWQgd3JpdGUgc3RhdGVcbmNvbnN0IFdSSVRFX1BSSU1BUllfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBXUklURV9GSU5JU0hJTkcgfCBXUklURV9ET05FXG5jb25zdCBXUklURV9RVUVVRURfQU5EX1VORFJBSU5FRCA9IFdSSVRFX1FVRVVFRCB8IFdSSVRFX1VORFJBSU5FRFxuY29uc3QgV1JJVEVfUVVFVUVEX0FORF9BQ1RJVkUgPSBXUklURV9RVUVVRUQgfCBXUklURV9BQ1RJVkVcbmNvbnN0IFdSSVRFX0RSQUlOX1NUQVRVUyA9IFdSSVRFX1FVRVVFRCB8IFdSSVRFX1VORFJBSU5FRCB8IE9QRU5fU1RBVFVTIHwgV1JJVEVfQUNUSVZFXG5jb25zdCBXUklURV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFdSSVRFX0FDVElWRSB8IFdSSVRFX1FVRVVFRCB8IFdSSVRFX0NPUktFRFxuY29uc3QgV1JJVEVfUFJJTUFSWV9BTkRfQUNUSVZFID0gV1JJVEVfUFJJTUFSWSB8IFdSSVRFX0FDVElWRVxuY29uc3QgV1JJVEVfQUNUSVZFX0FORF9XUklUSU5HID0gV1JJVEVfQUNUSVZFIHwgV1JJVEVfV1JJVElOR1xuY29uc3QgV1JJVEVfRklOSVNISU5HX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgV1JJVEVfRklOSVNISU5HIHwgV1JJVEVfUVVFVUVEX0FORF9BQ1RJVkUgfCBXUklURV9ET05FXG5jb25zdCBXUklURV9CQUNLUFJFU1NVUkVfU1RBVFVTID0gV1JJVEVfVU5EUkFJTkVEIHwgREVTVFJPWV9TVEFUVVMgfCBXUklURV9GSU5JU0hJTkcgfCBXUklURV9ET05FXG5jb25zdCBXUklURV9VUERBVEVfU1lOQ19TVEFUVVMgPSBXUklURV9VUERBVElORyB8IE9QRU5fU1RBVFVTIHwgV1JJVEVfTkVYVF9USUNLIHwgV1JJVEVfUFJJTUFSWVxuXG5jb25zdCBhc3luY0l0ZXJhdG9yID0gU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgU3ltYm9sKCdhc3luY0l0ZXJhdG9yJylcblxuY2xhc3MgV3JpdGFibGVTdGF0ZSB7XG4gIGNvbnN0cnVjdG9yIChzdHJlYW0sIHsgaGlnaFdhdGVyTWFyayA9IDE2Mzg0LCBtYXAgPSBudWxsLCBtYXBXcml0YWJsZSwgYnl0ZUxlbmd0aCwgYnl0ZUxlbmd0aFdyaXRhYmxlIH0gPSB7fSkge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtXG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBGSUZPKClcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG4gICAgdGhpcy5idWZmZXJlZCA9IDBcbiAgICB0aGlzLmVycm9yID0gbnVsbFxuICAgIHRoaXMucGlwZWxpbmUgPSBudWxsXG4gICAgdGhpcy5kcmFpbnMgPSBudWxsIC8vIGlmIHdlIGFkZCBtb3JlIHNlbGRvbWx5IHVzZWQgaGVscGVycyB3ZSBtaWdodCB0aGVtIGludG8gYSBzdWJvYmplY3Qgc28gaXRzIGEgc2luZ2xlIHB0clxuICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhXcml0YWJsZSB8fCBieXRlTGVuZ3RoIHx8IGRlZmF1bHRCeXRlTGVuZ3RoXG4gICAgdGhpcy5tYXAgPSBtYXBXcml0YWJsZSB8fCBtYXBcbiAgICB0aGlzLmFmdGVyV3JpdGUgPSBhZnRlcldyaXRlLmJpbmQodGhpcylcbiAgICB0aGlzLmFmdGVyVXBkYXRlTmV4dFRpY2sgPSB1cGRhdGVXcml0ZU5ULmJpbmQodGhpcylcbiAgfVxuXG4gIGdldCBlbmRlZCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9ET05FKSAhPT0gMFxuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIGlmICh0aGlzLm1hcCAhPT0gbnVsbCkgZGF0YSA9IHRoaXMubWFwKGRhdGEpXG5cbiAgICB0aGlzLmJ1ZmZlcmVkICs9IHRoaXMuYnl0ZUxlbmd0aChkYXRhKVxuICAgIHRoaXMucXVldWUucHVzaChkYXRhKVxuXG4gICAgaWYgKHRoaXMuYnVmZmVyZWQgPCB0aGlzLmhpZ2hXYXRlck1hcmspIHtcbiAgICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9RVUVVRURcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX1FVRVVFRF9BTkRfVU5EUkFJTkVEXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBzaGlmdCAoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucXVldWUuc2hpZnQoKVxuXG4gICAgdGhpcy5idWZmZXJlZCAtPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICBpZiAodGhpcy5idWZmZXJlZCA9PT0gMCkgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9RVUVVRURcblxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHRoaXMuc3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGRhdGEpXG4gICAgZWxzZSBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IG51bGwpIHRoaXMucHVzaChkYXRhKVxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSA9ICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgfCBXUklURV9GSU5JU0hJTkcpICYgV1JJVEVfTk9OX1BSSU1BUllcbiAgfVxuXG4gIGF1dG9CYXRjaCAoZGF0YSwgY2IpIHtcbiAgICBjb25zdCBidWZmZXIgPSBbXVxuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBidWZmZXIucHVzaChkYXRhKVxuICAgIHdoaWxlICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1NUQVRVUykgPT09IFdSSVRFX1FVRVVFRF9BTkRfQUNUSVZFKSB7XG4gICAgICBidWZmZXIucHVzaChzdHJlYW0uX3dyaXRhYmxlU3RhdGUuc2hpZnQoKSlcbiAgICB9XG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBPUEVOX1NUQVRVUykgIT09IDApIHJldHVybiBjYihudWxsKVxuICAgIHN0cmVhbS5fd3JpdGV2KGJ1ZmZlciwgY2IpXG4gIH1cblxuICB1cGRhdGUgKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX1VQREFUSU5HXG5cbiAgICBkbyB7XG4gICAgICB3aGlsZSAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9TVEFUVVMpID09PSBXUklURV9RVUVVRUQpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc2hpZnQoKVxuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX0FDVElWRV9BTkRfV1JJVElOR1xuICAgICAgICBzdHJlYW0uX3dyaXRlKGRhdGEsIHRoaXMuYWZ0ZXJXcml0ZSlcbiAgICAgIH1cblxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfUFJJTUFSWV9BTkRfQUNUSVZFKSA9PT0gMCkgdGhpcy51cGRhdGVOb25QcmltYXJ5KClcbiAgICB9IHdoaWxlICh0aGlzLmNvbnRpbnVlVXBkYXRlKCkgPT09IHRydWUpXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9VUERBVElOR1xuICB9XG5cbiAgdXBkYXRlTm9uUHJpbWFyeSAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0ZJTklTSElOR19TVEFUVVMpID09PSBXUklURV9GSU5JU0hJTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFdSSVRFX0FDVElWRSkgJiBXUklURV9OT1RfRklOSVNISU5HXG4gICAgICBzdHJlYW0uX2ZpbmFsKGFmdGVyRmluYWwuYmluZCh0aGlzKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIERFU1RST1lfU1RBVFVTKSA9PT0gREVTVFJPWUlORykge1xuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgQUNUSVZFX09SX1RJQ0tJTkcpID09PSAwKSB7XG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gQUNUSVZFXG4gICAgICAgIHN0cmVhbS5fZGVzdHJveShhZnRlckRlc3Ryb3kuYmluZCh0aGlzKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIElTX09QRU5JTkcpID09PSBPUEVOSU5HKSB7XG4gICAgICBzdHJlYW0uX2R1cGxleFN0YXRlID0gKHN0cmVhbS5fZHVwbGV4U3RhdGUgfCBBQ1RJVkUpICYgTk9UX09QRU5JTkdcbiAgICAgIHN0cmVhbS5fb3BlbihhZnRlck9wZW4uYmluZCh0aGlzKSlcbiAgICB9XG4gIH1cblxuICBjb250aW51ZVVwZGF0ZSAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9ORVhUX1RJQ0spID09PSAwKSByZXR1cm4gZmFsc2VcbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX05FWFRfVElDS1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1cGRhdGVDYWxsYmFjayAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9VUERBVEVfU1lOQ19TVEFUVVMpID09PSBXUklURV9QUklNQVJZKSB0aGlzLnVwZGF0ZSgpXG4gICAgZWxzZSB0aGlzLnVwZGF0ZU5leHRUaWNrKClcbiAgfVxuXG4gIHVwZGF0ZU5leHRUaWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX05FWFRfVElDSykgIT09IDApIHJldHVyblxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9ORVhUX1RJQ0tcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1VQREFUSU5HKSA9PT0gMCkgcXVldWVUaWNrKHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljaylcbiAgfVxufVxuXG5jbGFzcyBSZWFkYWJsZVN0YXRlIHtcbiAgY29uc3RydWN0b3IgKHN0cmVhbSwgeyBoaWdoV2F0ZXJNYXJrID0gMTYzODQsIG1hcCA9IG51bGwsIG1hcFJlYWRhYmxlLCBieXRlTGVuZ3RoLCBieXRlTGVuZ3RoUmVhZGFibGUgfSA9IHt9KSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW1cbiAgICB0aGlzLnF1ZXVlID0gbmV3IEZJRk8oKVxuICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcmsgPT09IDAgPyAxIDogaGlnaFdhdGVyTWFya1xuICAgIHRoaXMuYnVmZmVyZWQgPSAwXG4gICAgdGhpcy5yZWFkQWhlYWQgPSBoaWdoV2F0ZXJNYXJrID4gMFxuICAgIHRoaXMuZXJyb3IgPSBudWxsXG4gICAgdGhpcy5waXBlbGluZSA9IG51bGxcbiAgICB0aGlzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoUmVhZGFibGUgfHwgYnl0ZUxlbmd0aCB8fCBkZWZhdWx0Qnl0ZUxlbmd0aFxuICAgIHRoaXMubWFwID0gbWFwUmVhZGFibGUgfHwgbWFwXG4gICAgdGhpcy5waXBlVG8gPSBudWxsXG4gICAgdGhpcy5hZnRlclJlYWQgPSBhZnRlclJlYWQuYmluZCh0aGlzKVxuICAgIHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljayA9IHVwZGF0ZVJlYWROVC5iaW5kKHRoaXMpXG4gIH1cblxuICBnZXQgZW5kZWQgKCkge1xuICAgIHJldHVybiAodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSAhPT0gMFxuICB9XG5cbiAgcGlwZSAocGlwZVRvLCBjYikge1xuICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBwaXBlIHRvIG9uZSBkZXN0aW5hdGlvbicpXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgY2IgPSBudWxsXG5cbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gUkVBRF9QSVBFX0RSQUlORURcbiAgICB0aGlzLnBpcGVUbyA9IHBpcGVUb1xuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcy5zdHJlYW0sIHBpcGVUbywgY2IpXG5cbiAgICBpZiAoY2IpIHRoaXMuc3RyZWFtLm9uKCdlcnJvcicsIG5vb3ApIC8vIFdlIGFscmVhZHkgZXJyb3IgaGFuZGxlIHRoaXMgc28gc3VwcmVzcyBjcmFzaGVzXG5cbiAgICBpZiAoaXNTdHJlYW14KHBpcGVUbykpIHtcbiAgICAgIHBpcGVUby5fd3JpdGFibGVTdGF0ZS5waXBlbGluZSA9IHRoaXMucGlwZWxpbmVcbiAgICAgIGlmIChjYikgcGlwZVRvLm9uKCdlcnJvcicsIG5vb3ApIC8vIFdlIGFscmVhZHkgZXJyb3IgaGFuZGxlIHRoaXMgc28gc3VwcmVzcyBjcmFzaGVzXG4gICAgICBwaXBlVG8ub24oJ2ZpbmlzaCcsIHRoaXMucGlwZWxpbmUuZmluaXNoZWQuYmluZCh0aGlzLnBpcGVsaW5lKSkgLy8gVE9ETzoganVzdCBjYWxsIGZpbmlzaGVkIGZyb20gcGlwZVRvIGl0c2VsZlxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvbmVycm9yID0gdGhpcy5waXBlbGluZS5kb25lLmJpbmQodGhpcy5waXBlbGluZSwgcGlwZVRvKVxuICAgICAgY29uc3Qgb25jbG9zZSA9IHRoaXMucGlwZWxpbmUuZG9uZS5iaW5kKHRoaXMucGlwZWxpbmUsIHBpcGVUbywgbnVsbCkgLy8gb25jbG9zZSBoYXMgYSB3ZWlyZCBib29sIGFyZ1xuICAgICAgcGlwZVRvLm9uKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgICBwaXBlVG8ub24oJ2Nsb3NlJywgb25jbG9zZSlcbiAgICAgIHBpcGVUby5vbignZmluaXNoJywgdGhpcy5waXBlbGluZS5maW5pc2hlZC5iaW5kKHRoaXMucGlwZWxpbmUpKVxuICAgIH1cblxuICAgIHBpcGVUby5vbignZHJhaW4nLCBhZnRlckRyYWluLmJpbmQodGhpcykpXG4gICAgdGhpcy5zdHJlYW0uZW1pdCgncGlwaW5nJywgcGlwZVRvKVxuICAgIHBpcGVUby5lbWl0KCdwaXBlJywgdGhpcy5zdHJlYW0pXG4gIH1cblxuICBwdXNoIChkYXRhKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSAwXG4gICAgICBzdHJlYW0uX2R1cGxleFN0YXRlID0gKHN0cmVhbS5fZHVwbGV4U3RhdGUgfCBSRUFEX0VORElORykgJiBSRUFEX05PTl9QUklNQVJZX0FORF9QVVNIRURcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1hcCAhPT0gbnVsbCkge1xuICAgICAgZGF0YSA9IHRoaXMubWFwKGRhdGEpXG4gICAgICBpZiAoZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfUFVTSEVEXG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcmVkIDwgdGhpcy5oaWdoV2F0ZXJNYXJrXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXJlZCArPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICB0aGlzLnF1ZXVlLnB1c2goZGF0YSlcblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFJFQURfUVVFVUVEKSAmIFJFQURfUFVTSEVEXG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJlZCA8IHRoaXMuaGlnaFdhdGVyTWFya1xuICB9XG5cbiAgc2hpZnQgKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnF1ZXVlLnNoaWZ0KClcblxuICAgIHRoaXMuYnVmZmVyZWQgLT0gdGhpcy5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgaWYgKHRoaXMuYnVmZmVyZWQgPT09IDApIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PVF9RVUVVRURcbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgdW5zaGlmdCAoZGF0YSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSBbdGhpcy5tYXAgIT09IG51bGwgPyB0aGlzLm1hcChkYXRhKSA6IGRhdGFdXG4gICAgd2hpbGUgKHRoaXMuYnVmZmVyZWQgPiAwKSBwZW5kaW5nLnB1c2godGhpcy5zaGlmdCgpKVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZW5kaW5nLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgY29uc3QgZGF0YSA9IHBlbmRpbmdbaV1cbiAgICAgIHRoaXMuYnVmZmVyZWQgKz0gdGhpcy5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgICB0aGlzLnF1ZXVlLnB1c2goZGF0YSlcbiAgICB9XG5cbiAgICB0aGlzLnB1c2gocGVuZGluZ1twZW5kaW5nLmxlbmd0aCAtIDFdKVxuICB9XG5cbiAgcmVhZCAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfU1RBVFVTKSA9PT0gUkVBRF9RVUVVRUQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNoaWZ0KClcbiAgICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCAmJiB0aGlzLnBpcGVUby53cml0ZShkYXRhKSA9PT0gZmFsc2UpIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9QSVBFX05PVF9EUkFJTkVEXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0VNSVRfREFUQSkgIT09IDApIHN0cmVhbS5lbWl0KCdkYXRhJywgZGF0YSlcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZEFoZWFkID09PSBmYWxzZSkge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1JFQURfQUhFQURcbiAgICAgIHRoaXMudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBkcmFpbiAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIHdoaWxlICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfU1RBVFVTKSA9PT0gUkVBRF9RVUVVRUQgJiYgKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0ZMT1dJTkcpICE9PSAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5zaGlmdCgpXG4gICAgICBpZiAodGhpcy5waXBlVG8gIT09IG51bGwgJiYgdGhpcy5waXBlVG8ud3JpdGUoZGF0YSkgPT09IGZhbHNlKSBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfUElQRV9OT1RfRFJBSU5FRFxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9FTUlUX0RBVEEpICE9PSAwKSBzdHJlYW0uZW1pdCgnZGF0YScsIGRhdGEpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1VQREFUSU5HXG5cbiAgICBkbyB7XG4gICAgICB0aGlzLmRyYWluKClcblxuICAgICAgd2hpbGUgKHRoaXMuYnVmZmVyZWQgPCB0aGlzLmhpZ2hXYXRlck1hcmsgJiYgKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBTSE9VTERfTk9UX1JFQUQpID09PSBSRUFEX1JFQURfQUhFQUQpIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX0FDVElWRV9BTkRfTkVFRFNfUFVTSFxuICAgICAgICBzdHJlYW0uX3JlYWQodGhpcy5hZnRlclJlYWQpXG4gICAgICAgIHRoaXMuZHJhaW4oKVxuICAgICAgfVxuXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFQURBQkxFX1NUQVRVUykgPT09IFJFQURfRU1JVF9SRUFEQUJMRV9BTkRfUVVFVUVEKSB7XG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gUkVBRF9FTUlUVEVEX1JFQURBQkxFXG4gICAgICAgIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpXG4gICAgICB9XG5cbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfUFJJTUFSWV9BTkRfQUNUSVZFKSA9PT0gMCkgdGhpcy51cGRhdGVOb25QcmltYXJ5KClcbiAgICB9IHdoaWxlICh0aGlzLmNvbnRpbnVlVXBkYXRlKCkgPT09IHRydWUpXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX1VQREFUSU5HXG4gIH1cblxuICB1cGRhdGVOb25QcmltYXJ5ICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9FTkRJTkdfU1RBVFVTKSA9PT0gUkVBRF9FTkRJTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFJFQURfRE9ORSkgJiBSRUFEX05PVF9FTkRJTkdcbiAgICAgIHN0cmVhbS5lbWl0KCdlbmQnKVxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgQVVUT19ERVNUUk9ZKSA9PT0gRE9ORSkgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBERVNUUk9ZSU5HXG4gICAgICBpZiAodGhpcy5waXBlVG8gIT09IG51bGwpIHRoaXMucGlwZVRvLmVuZCgpXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSBERVNUUk9ZSU5HKSB7XG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBQ1RJVkVfT1JfVElDS0lORykgPT09IDApIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBBQ1RJVkVcbiAgICAgICAgc3RyZWFtLl9kZXN0cm95KGFmdGVyRGVzdHJveS5iaW5kKHRoaXMpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgSVNfT1BFTklORykgPT09IE9QRU5JTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IEFDVElWRSkgJiBOT1RfT1BFTklOR1xuICAgICAgc3RyZWFtLl9vcGVuKGFmdGVyT3Blbi5iaW5kKHRoaXMpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnRpbnVlVXBkYXRlICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfTkVYVF9USUNLKSA9PT0gMCkgcmV0dXJuIGZhbHNlXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX05FWFRfVElDS1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1cGRhdGVDYWxsYmFjayAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1VQREFURV9TWU5DX1NUQVRVUykgPT09IFJFQURfUFJJTUFSWSkgdGhpcy51cGRhdGUoKVxuICAgIGVsc2UgdGhpcy51cGRhdGVOZXh0VGljaygpXG4gIH1cblxuICB1cGRhdGVOZXh0VGljayAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX05FWFRfVElDSykgIT09IDApIHJldHVyblxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX05FWFRfVElDS1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9VUERBVElORykgPT09IDApIHF1ZXVlVGljayh0aGlzLmFmdGVyVXBkYXRlTmV4dFRpY2spXG4gIH1cbn1cblxuY2xhc3MgVHJhbnNmb3JtU3RhdGUge1xuICBjb25zdHJ1Y3RvciAoc3RyZWFtKSB7XG4gICAgdGhpcy5kYXRhID0gbnVsbFxuICAgIHRoaXMuYWZ0ZXJUcmFuc2Zvcm0gPSBhZnRlclRyYW5zZm9ybS5iaW5kKHN0cmVhbSlcbiAgICB0aGlzLmFmdGVyRmluYWwgPSBudWxsXG4gIH1cbn1cblxuY2xhc3MgUGlwZWxpbmUge1xuICBjb25zdHJ1Y3RvciAoc3JjLCBkc3QsIGNiKSB7XG4gICAgdGhpcy5mcm9tID0gc3JjXG4gICAgdGhpcy50byA9IGRzdFxuICAgIHRoaXMuYWZ0ZXJQaXBlID0gY2JcbiAgICB0aGlzLmVycm9yID0gbnVsbFxuICAgIHRoaXMucGlwZVRvRmluaXNoZWQgPSBmYWxzZVxuICB9XG5cbiAgZmluaXNoZWQgKCkge1xuICAgIHRoaXMucGlwZVRvRmluaXNoZWQgPSB0cnVlXG4gIH1cblxuICBkb25lIChzdHJlYW0sIGVycikge1xuICAgIGlmIChlcnIpIHRoaXMuZXJyb3IgPSBlcnJcblxuICAgIGlmIChzdHJlYW0gPT09IHRoaXMudG8pIHtcbiAgICAgIHRoaXMudG8gPSBudWxsXG5cbiAgICAgIGlmICh0aGlzLmZyb20gIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCh0aGlzLmZyb20uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSA9PT0gMCB8fCAhdGhpcy5waXBlVG9GaW5pc2hlZCkge1xuICAgICAgICAgIHRoaXMuZnJvbS5kZXN0cm95KHRoaXMuZXJyb3IgfHwgbmV3IEVycm9yKCdXcml0YWJsZSBzdHJlYW0gY2xvc2VkIHByZW1hdHVyZWx5JykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbSA9PT0gdGhpcy5mcm9tKSB7XG4gICAgICB0aGlzLmZyb20gPSBudWxsXG5cbiAgICAgIGlmICh0aGlzLnRvICE9PSBudWxsKSB7XG4gICAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRE9ORSkgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnRvLmRlc3Ryb3kodGhpcy5lcnJvciB8fCBuZXcgRXJyb3IoJ1JlYWRhYmxlIHN0cmVhbSBjbG9zZWQgYmVmb3JlIGVuZGluZycpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFmdGVyUGlwZSAhPT0gbnVsbCkgdGhpcy5hZnRlclBpcGUodGhpcy5lcnJvcilcbiAgICB0aGlzLnRvID0gdGhpcy5mcm9tID0gdGhpcy5hZnRlclBpcGUgPSBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJEcmFpbiAoKSB7XG4gIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1BJUEVfRFJBSU5FRFxuICB0aGlzLnVwZGF0ZUNhbGxiYWNrKClcbn1cblxuZnVuY3Rpb24gYWZ0ZXJGaW5hbCAoZXJyKSB7XG4gIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG4gIGlmIChlcnIpIHN0cmVhbS5kZXN0cm95KGVycilcbiAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSAwKSB7XG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9ET05FXG4gICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpXG4gIH1cbiAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgQVVUT19ERVNUUk9ZKSA9PT0gRE9ORSkge1xuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gREVTVFJPWUlOR1xuICB9XG5cbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQUNUSVZFXG5cbiAgLy8gbm8gbmVlZCB0byB3YWl0IHRoZSBleHRyYSB0aWNrIGhlcmUsIHNvIHdlIHNob3J0IGNpcmN1aXQgdGhhdFxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9VUERBVElORykgPT09IDApIHRoaXMudXBkYXRlKClcbiAgZWxzZSB0aGlzLnVwZGF0ZU5leHRUaWNrKClcbn1cblxuZnVuY3Rpb24gYWZ0ZXJEZXN0cm95IChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICBpZiAoIWVyciAmJiB0aGlzLmVycm9yICE9PSBTVFJFQU1fREVTVFJPWUVEKSBlcnIgPSB0aGlzLmVycm9yXG4gIGlmIChlcnIpIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycilcbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBERVNUUk9ZRURcbiAgc3RyZWFtLmVtaXQoJ2Nsb3NlJylcblxuICBjb25zdCBycyA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3cyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuXG4gIGlmIChycyAhPT0gbnVsbCAmJiBycy5waXBlbGluZSAhPT0gbnVsbCkgcnMucGlwZWxpbmUuZG9uZShzdHJlYW0sIGVycilcblxuICBpZiAod3MgIT09IG51bGwpIHtcbiAgICB3aGlsZSAod3MuZHJhaW5zICE9PSBudWxsICYmIHdzLmRyYWlucy5sZW5ndGggPiAwKSB3cy5kcmFpbnMuc2hpZnQoKS5yZXNvbHZlKGZhbHNlKVxuICAgIGlmICh3cy5waXBlbGluZSAhPT0gbnVsbCkgd3MucGlwZWxpbmUuZG9uZShzdHJlYW0sIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlIChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICBpZiAoZXJyKSBzdHJlYW0uZGVzdHJveShlcnIpXG4gIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX0FDVElWRVxuXG4gIGlmICh0aGlzLmRyYWlucyAhPT0gbnVsbCkgdGlja0RyYWlucyh0aGlzLmRyYWlucylcblxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9EUkFJTl9TVEFUVVMpID09PSBXUklURV9VTkRSQUlORUQpIHtcbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX0RSQUlORURcbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9FTUlUX0RSQUlOKSA9PT0gV1JJVEVfRU1JVF9EUkFJTikge1xuICAgICAgc3RyZWFtLmVtaXQoJ2RyYWluJylcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZUNhbGxiYWNrKClcbn1cblxuZnVuY3Rpb24gYWZ0ZXJSZWFkIChlcnIpIHtcbiAgaWYgKGVycikgdGhpcy5zdHJlYW0uZGVzdHJveShlcnIpXG4gIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PVF9BQ1RJVkVcbiAgaWYgKHRoaXMucmVhZEFoZWFkID09PSBmYWxzZSAmJiAodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9SRVNVTUVEKSA9PT0gMCkgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9fUkVBRF9BSEVBRFxuICB0aGlzLnVwZGF0ZUNhbGxiYWNrKClcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVhZE5UICgpIHtcbiAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1VQREFUSU5HKSA9PT0gMCkge1xuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PVF9ORVhUX1RJQ0tcbiAgICB0aGlzLnVwZGF0ZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlV3JpdGVOVCAoKSB7XG4gIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfVVBEQVRJTkcpID09PSAwKSB7XG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9ORVhUX1RJQ0tcbiAgICB0aGlzLnVwZGF0ZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gdGlja0RyYWlucyAoZHJhaW5zKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZHJhaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gZHJhaW5zLndyaXRlcyBhcmUgbW9ub3RvbmljLCBzbyBpZiBvbmUgaXMgMCBpdHMgYWx3YXlzIHRoZSBmaXJzdCBvbmVcbiAgICBpZiAoLS1kcmFpbnNbaV0ud3JpdGVzID09PSAwKSB7XG4gICAgICBkcmFpbnMuc2hpZnQoKS5yZXNvbHZlKHRydWUpXG4gICAgICBpLS1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJPcGVuIChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICBpZiAoZXJyKSBzdHJlYW0uZGVzdHJveShlcnIpXG5cbiAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWUlORykgPT09IDApIHtcbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1BSSU1BUllfU1RBVFVTKSA9PT0gMCkgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1BSSU1BUllcbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9QUklNQVJZX1NUQVRVUykgPT09IDApIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfUFJJTUFSWVxuICAgIHN0cmVhbS5lbWl0KCdvcGVuJylcbiAgfVxuXG4gIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gTk9UX0FDVElWRVxuXG4gIGlmIChzdHJlYW0uX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUudXBkYXRlQ2FsbGJhY2soKVxuICB9XG5cbiAgaWYgKHN0cmVhbS5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS51cGRhdGVDYWxsYmFjaygpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJUcmFuc2Zvcm0gKGVyciwgZGF0YSkge1xuICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IG51bGwpIHRoaXMucHVzaChkYXRhKVxuICB0aGlzLl93cml0YWJsZVN0YXRlLmFmdGVyV3JpdGUoZXJyKVxufVxuXG5mdW5jdGlvbiBuZXdMaXN0ZW5lciAobmFtZSkge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuYW1lID09PSAnZGF0YScpIHtcbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IChSRUFEX0VNSVRfREFUQSB8IFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEKVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICAgIGlmIChuYW1lID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX0VNSVRfUkVBREFCTEVcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5hbWUgPT09ICdkcmFpbicpIHtcbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFdSSVRFX0VNSVRfRFJBSU5cbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBTdHJlYW0gZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2R1cGxleFN0YXRlID0gMFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBudWxsXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG51bGxcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAob3B0cy5vcGVuKSB0aGlzLl9vcGVuID0gb3B0cy5vcGVuXG4gICAgICBpZiAob3B0cy5kZXN0cm95KSB0aGlzLl9kZXN0cm95ID0gb3B0cy5kZXN0cm95XG4gICAgICBpZiAob3B0cy5wcmVkZXN0cm95KSB0aGlzLl9wcmVkZXN0cm95ID0gb3B0cy5wcmVkZXN0cm95XG4gICAgICBpZiAob3B0cy5zaWduYWwpIHtcbiAgICAgICAgb3B0cy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydC5iaW5kKHRoaXMpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgbmV3TGlzdGVuZXIpXG4gIH1cblxuICBfb3BlbiAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIF9wcmVkZXN0cm95ICgpIHtcbiAgICAvLyBkb2VzIG5vdGhpbmdcbiAgfVxuXG4gIGdldCByZWFkYWJsZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgIT09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkXG4gIH1cblxuICBnZXQgd3JpdGFibGUgKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlICE9PSBudWxsID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLl9kdXBsZXhTdGF0ZSAmIERFU1RST1lFRCkgIT09IDBcbiAgfVxuXG4gIGdldCBkZXN0cm95aW5nICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpICE9PSAwXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBpZiAoKHRoaXMuX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSAwKSB7XG4gICAgICBpZiAoIWVycikgZXJyID0gU1RSRUFNX0RFU1RST1lFRFxuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgPSAodGhpcy5fZHVwbGV4U3RhdGUgfCBERVNUUk9ZSU5HKSAmIE5PTl9QUklNQVJZXG5cbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyayA9IDBcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvciA9IGVyclxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrID0gMFxuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yID0gZXJyXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFBSRURFU1RST1lJTkdcbiAgICAgIHRoaXMuX3ByZWRlc3Ryb3koKVxuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgJj0gTk9UX1BSRURFU1RST1lJTkdcblxuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgIT09IG51bGwpIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBSZWFkYWJsZSBleHRlbmRzIFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IE9QRU5JTkcgfCBXUklURV9ET05FIHwgUkVBRF9SRUFEX0FIRUFEXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKHRoaXMsIG9wdHMpXG5cbiAgICBpZiAob3B0cykge1xuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZEFoZWFkID09PSBmYWxzZSkgdGhpcy5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT19SRUFEX0FIRUFEXG4gICAgICBpZiAob3B0cy5yZWFkKSB0aGlzLl9yZWFkID0gb3B0cy5yZWFkXG4gICAgICBpZiAob3B0cy5lYWdlck9wZW4pIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgICAgaWYgKG9wdHMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2Rpbmcob3B0cy5lbmNvZGluZylcbiAgICB9XG4gIH1cblxuICBzZXRFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgICBjb25zdCBkZWMgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpXG4gICAgY29uc3QgbWFwID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5tYXAgfHwgZWNob1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUubWFwID0gbWFwT3JTa2lwXG4gICAgcmV0dXJuIHRoaXNcblxuICAgIGZ1bmN0aW9uIG1hcE9yU2tpcCAoZGF0YSkge1xuICAgICAgY29uc3QgbmV4dCA9IGRlYy5wdXNoKGRhdGEpXG4gICAgICByZXR1cm4gbmV4dCA9PT0gJycgJiYgKGRhdGEuYnl0ZUxlbmd0aCAhPT0gMCB8fCBkZWMucmVtYWluaW5nID4gMCkgPyBudWxsIDogbWFwKG5leHQpXG4gICAgfVxuICB9XG5cbiAgX3JlYWQgKGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIHBpcGUgKGRlc3QsIGNiKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5waXBlKGRlc3QsIGNiKVxuICAgIHJldHVybiBkZXN0XG4gIH1cblxuICByZWFkICgpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkKClcbiAgfVxuXG4gIHB1c2ggKGRhdGEpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5wdXNoKGRhdGEpXG4gIH1cblxuICB1bnNoaWZ0IChkYXRhKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUudW5zaGlmdChkYXRhKVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1JFU1VNRURfUkVBRF9BSEVBRFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwYXVzZSAoKSB7XG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgJj0gKHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZEFoZWFkID09PSBmYWxzZSA/IFJFQURfUEFVU0VEX05PX1JFQURfQUhFQUQgOiBSRUFEX1BBVVNFRClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhdGljIF9mcm9tQXN5bmNJdGVyYXRvciAoaXRlLCBvcHRzKSB7XG4gICAgbGV0IGRlc3Ryb3lcblxuICAgIGNvbnN0IHJzID0gbmV3IFJlYWRhYmxlKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZWFkIChjYikge1xuICAgICAgICBpdGUubmV4dCgpLnRoZW4ocHVzaCkudGhlbihjYi5iaW5kKG51bGwsIG51bGwpKS5jYXRjaChjYilcbiAgICAgIH0sXG4gICAgICBwcmVkZXN0cm95ICgpIHtcbiAgICAgICAgZGVzdHJveSA9IGl0ZS5yZXR1cm4oKVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3kgKGNiKSB7XG4gICAgICAgIGlmICghZGVzdHJveSkgcmV0dXJuIGNiKG51bGwpXG4gICAgICAgIGRlc3Ryb3kudGhlbihjYi5iaW5kKG51bGwsIG51bGwpKS5jYXRjaChjYilcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHJzXG5cbiAgICBmdW5jdGlvbiBwdXNoIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5kb25lKSBycy5wdXNoKG51bGwpXG4gICAgICBlbHNlIHJzLnB1c2goZGF0YS52YWx1ZSlcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbSAoZGF0YSwgb3B0cykge1xuICAgIGlmIChpc1JlYWRTdHJlYW14KGRhdGEpKSByZXR1cm4gZGF0YVxuICAgIGlmIChkYXRhW2FzeW5jSXRlcmF0b3JdKSByZXR1cm4gdGhpcy5fZnJvbUFzeW5jSXRlcmF0b3IoZGF0YVthc3luY0l0ZXJhdG9yXSgpLCBvcHRzKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkgZGF0YSA9IGRhdGEgPT09IHVuZGVmaW5lZCA/IFtdIDogW2RhdGFdXG5cbiAgICBsZXQgaSA9IDBcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZWFkIChjYikge1xuICAgICAgICB0aGlzLnB1c2goaSA9PT0gZGF0YS5sZW5ndGggPyBudWxsIDogZGF0YVtpKytdKVxuICAgICAgICBjYihudWxsKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgaXNCYWNrcHJlc3N1cmVkIChycykge1xuICAgIHJldHVybiAocnMuX2R1cGxleFN0YXRlICYgUkVBRF9CQUNLUFJFU1NVUkVfU1RBVFVTKSAhPT0gMCB8fCBycy5fcmVhZGFibGVTdGF0ZS5idWZmZXJlZCA+PSBycy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICBzdGF0aWMgaXNQYXVzZWQgKHJzKSB7XG4gICAgcmV0dXJuIChycy5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFU1VNRUQpID09PSAwXG4gIH1cblxuICBbYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXNcblxuICAgIGxldCBlcnJvciA9IG51bGxcbiAgICBsZXQgcHJvbWlzZVJlc29sdmUgPSBudWxsXG4gICAgbGV0IHByb21pc2VSZWplY3QgPSBudWxsXG5cbiAgICB0aGlzLm9uKCdlcnJvcicsIChlcnIpID0+IHsgZXJyb3IgPSBlcnIgfSlcbiAgICB0aGlzLm9uKCdyZWFkYWJsZScsIG9ucmVhZGFibGUpXG4gICAgdGhpcy5vbignY2xvc2UnLCBvbmNsb3NlKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFthc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9LFxuICAgICAgbmV4dCAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgcHJvbWlzZVJlc29sdmUgPSByZXNvbHZlXG4gICAgICAgICAgcHJvbWlzZVJlamVjdCA9IHJlamVjdFxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBzdHJlYW0ucmVhZCgpXG4gICAgICAgICAgaWYgKGRhdGEgIT09IG51bGwpIG9uZGF0YShkYXRhKVxuICAgICAgICAgIGVsc2UgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWUVEKSAhPT0gMCkgb25kYXRhKG51bGwpXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgcmV0dXJuICgpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Ryb3kobnVsbClcbiAgICAgIH0sXG4gICAgICB0aHJvdyAoZXJyKSB7XG4gICAgICAgIHJldHVybiBkZXN0cm95KGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbnJlYWRhYmxlICgpIHtcbiAgICAgIGlmIChwcm9taXNlUmVzb2x2ZSAhPT0gbnVsbCkgb25kYXRhKHN0cmVhbS5yZWFkKCkpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25jbG9zZSAoKSB7XG4gICAgICBpZiAocHJvbWlzZVJlc29sdmUgIT09IG51bGwpIG9uZGF0YShudWxsKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uZGF0YSAoZGF0YSkge1xuICAgICAgaWYgKHByb21pc2VSZWplY3QgPT09IG51bGwpIHJldHVyblxuICAgICAgaWYgKGVycm9yKSBwcm9taXNlUmVqZWN0KGVycm9yKVxuICAgICAgZWxzZSBpZiAoZGF0YSA9PT0gbnVsbCAmJiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRE9ORSkgPT09IDApIHByb21pc2VSZWplY3QoU1RSRUFNX0RFU1RST1lFRClcbiAgICAgIGVsc2UgcHJvbWlzZVJlc29sdmUoeyB2YWx1ZTogZGF0YSwgZG9uZTogZGF0YSA9PT0gbnVsbCB9KVxuICAgICAgcHJvbWlzZVJlamVjdCA9IHByb21pc2VSZXNvbHZlID0gbnVsbFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3kgKGVycikge1xuICAgICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZRUQpIHJldHVybiByZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGVycikgcmVqZWN0KGVycilcbiAgICAgICAgICBlbHNlIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBXcml0YWJsZSBleHRlbmRzIFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IE9QRU5JTkcgfCBSRUFEX0RPTkVcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUodGhpcywgb3B0cylcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAob3B0cy53cml0ZXYpIHRoaXMuX3dyaXRldiA9IG9wdHMud3JpdGV2XG4gICAgICBpZiAob3B0cy53cml0ZSkgdGhpcy5fd3JpdGUgPSBvcHRzLndyaXRlXG4gICAgICBpZiAob3B0cy5maW5hbCkgdGhpcy5fZmluYWwgPSBvcHRzLmZpbmFsXG4gICAgICBpZiAob3B0cy5lYWdlck9wZW4pIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxuXG4gIGNvcmsgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFdSSVRFX0NPUktFRFxuICB9XG5cbiAgdW5jb3JrICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQ09SS0VEXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gIH1cblxuICBfd3JpdGV2IChiYXRjaCwgY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuYXV0b0JhdGNoKGRhdGEsIGNiKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBzdGF0aWMgaXNCYWNrcHJlc3N1cmVkICh3cykge1xuICAgIHJldHVybiAod3MuX2R1cGxleFN0YXRlICYgV1JJVEVfQkFDS1BSRVNTVVJFX1NUQVRVUykgIT09IDBcbiAgfVxuXG4gIHN0YXRpYyBkcmFpbmVkICh3cykge1xuICAgIGlmICh3cy5kZXN0cm95ZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpXG4gICAgY29uc3Qgc3RhdGUgPSB3cy5fd3JpdGFibGVTdGF0ZVxuICAgIGNvbnN0IHBlbmRpbmcgPSAoaXNXcml0ZXYod3MpID8gTWF0aC5taW4oMSwgc3RhdGUucXVldWUubGVuZ3RoKSA6IHN0YXRlLnF1ZXVlLmxlbmd0aClcbiAgICBjb25zdCB3cml0ZXMgPSBwZW5kaW5nICsgKCh3cy5fZHVwbGV4U3RhdGUgJiBXUklURV9XUklUSU5HKSA/IDEgOiAwKVxuICAgIGlmICh3cml0ZXMgPT09IDApIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSlcbiAgICBpZiAoc3RhdGUuZHJhaW5zID09PSBudWxsKSBzdGF0ZS5kcmFpbnMgPSBbXVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgc3RhdGUuZHJhaW5zLnB1c2goeyB3cml0ZXMsIHJlc29sdmUgfSlcbiAgICB9KVxuICB9XG5cbiAgd3JpdGUgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5wdXNoKGRhdGEpXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZChkYXRhKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuY2xhc3MgRHVwbGV4IGV4dGVuZHMgUmVhZGFibGUgeyAvLyBhbmQgV3JpdGFibGVcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgPSBPUEVOSU5HIHwgKHRoaXMuX2R1cGxleFN0YXRlICYgUkVBRF9SRUFEX0FIRUFEKVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZSh0aGlzLCBvcHRzKVxuXG4gICAgaWYgKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLndyaXRldikgdGhpcy5fd3JpdGV2ID0gb3B0cy53cml0ZXZcbiAgICAgIGlmIChvcHRzLndyaXRlKSB0aGlzLl93cml0ZSA9IG9wdHMud3JpdGVcbiAgICAgIGlmIChvcHRzLmZpbmFsKSB0aGlzLl9maW5hbCA9IG9wdHMuZmluYWxcbiAgICB9XG4gIH1cblxuICBjb3JrICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9DT1JLRURcbiAgfVxuXG4gIHVuY29yayAoKSB7XG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX0NPUktFRFxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICB9XG5cbiAgX3dyaXRldiAoYmF0Y2gsIGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIF93cml0ZSAoZGF0YSwgY2IpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmF1dG9CYXRjaChkYXRhLCBjYilcbiAgfVxuXG4gIF9maW5hbCAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgd3JpdGUgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5wdXNoKGRhdGEpXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZChkYXRhKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuY2xhc3MgVHJhbnNmb3JtIGV4dGVuZHMgRHVwbGV4IHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0gbmV3IFRyYW5zZm9ybVN0YXRlKHRoaXMpXG5cbiAgICBpZiAob3B0cykge1xuICAgICAgaWYgKG9wdHMudHJhbnNmb3JtKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRzLnRyYW5zZm9ybVxuICAgICAgaWYgKG9wdHMuZmx1c2gpIHRoaXMuX2ZsdXNoID0gb3B0cy5mbHVzaFxuICAgIH1cbiAgfVxuXG4gIF93cml0ZSAoZGF0YSwgY2IpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJlZCA+PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgPSBkYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybShkYXRhLCB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5hZnRlclRyYW5zZm9ybSlcbiAgICB9XG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICBpZiAodGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGFcbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgPSBudWxsXG4gICAgICBjYihudWxsKVxuICAgICAgdGhpcy5fdHJhbnNmb3JtKGRhdGEsIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyVHJhbnNmb3JtKVxuICAgIH0gZWxzZSB7XG4gICAgICBjYihudWxsKVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIHN1cGVyLmRlc3Ryb3koZXJyKVxuICAgIGlmICh0aGlzLl90cmFuc2Zvcm1TdGF0ZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5kYXRhID0gbnVsbFxuICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuYWZ0ZXJUcmFuc2Zvcm0oKVxuICAgIH1cbiAgfVxuXG4gIF90cmFuc2Zvcm0gKGRhdGEsIGNiKSB7XG4gICAgY2IobnVsbCwgZGF0YSlcbiAgfVxuXG4gIF9mbHVzaCAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyRmluYWwgPSBjYlxuICAgIHRoaXMuX2ZsdXNoKHRyYW5zZm9ybUFmdGVyRmx1c2guYmluZCh0aGlzKSlcbiAgfVxufVxuXG5jbGFzcyBQYXNzVGhyb3VnaCBleHRlbmRzIFRyYW5zZm9ybSB7fVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1BZnRlckZsdXNoIChlcnIsIGRhdGEpIHtcbiAgY29uc3QgY2IgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5hZnRlckZpbmFsXG4gIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkgdGhpcy5wdXNoKGRhdGEpXG4gIHRoaXMucHVzaChudWxsKVxuICBjYihudWxsKVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZVByb21pc2UgKC4uLnN0cmVhbXMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXR1cm4gcGlwZWxpbmUoLi4uc3RyZWFtcywgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKClcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAoc3RyZWFtLCAuLi5zdHJlYW1zKSB7XG4gIGNvbnN0IGFsbCA9IEFycmF5LmlzQXJyYXkoc3RyZWFtKSA/IFsuLi5zdHJlYW0sIC4uLnN0cmVhbXNdIDogW3N0cmVhbSwgLi4uc3RyZWFtc11cbiAgY29uc3QgZG9uZSA9IChhbGwubGVuZ3RoICYmIHR5cGVvZiBhbGxbYWxsLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSA/IGFsbC5wb3AoKSA6IG51bGxcblxuICBpZiAoYWxsLmxlbmd0aCA8IDIpIHRocm93IG5ldyBFcnJvcignUGlwZWxpbmUgcmVxdWlyZXMgYXQgbGVhc3QgMiBzdHJlYW1zJylcblxuICBsZXQgc3JjID0gYWxsWzBdXG4gIGxldCBkZXN0ID0gbnVsbFxuICBsZXQgZXJyb3IgPSBudWxsXG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBhbGwubGVuZ3RoOyBpKyspIHtcbiAgICBkZXN0ID0gYWxsW2ldXG5cbiAgICBpZiAoaXNTdHJlYW14KHNyYykpIHtcbiAgICAgIHNyYy5waXBlKGRlc3QsIG9uZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9ySGFuZGxlKHNyYywgdHJ1ZSwgaSA+IDEsIG9uZXJyb3IpXG4gICAgICBzcmMucGlwZShkZXN0KVxuICAgIH1cblxuICAgIHNyYyA9IGRlc3RcbiAgfVxuXG4gIGlmIChkb25lKSB7XG4gICAgbGV0IGZpbiA9IGZhbHNlXG5cbiAgICBjb25zdCBhdXRvRGVzdHJveSA9IGlzU3RyZWFteChkZXN0KSB8fCAhIShkZXN0Ll93cml0YWJsZVN0YXRlICYmIGRlc3QuX3dyaXRhYmxlU3RhdGUuYXV0b0Rlc3Ryb3kpXG5cbiAgICBkZXN0Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkgZXJyb3IgPSBlcnJcbiAgICB9KVxuXG4gICAgZGVzdC5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgZmluID0gdHJ1ZVxuICAgICAgaWYgKCFhdXRvRGVzdHJveSkgZG9uZShlcnJvcilcbiAgICB9KVxuXG4gICAgaWYgKGF1dG9EZXN0cm95KSB7XG4gICAgICBkZXN0Lm9uKCdjbG9zZScsICgpID0+IGRvbmUoZXJyb3IgfHwgKGZpbiA/IG51bGwgOiBQUkVNQVRVUkVfQ0xPU0UpKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVzdFxuXG4gIGZ1bmN0aW9uIGVycm9ySGFuZGxlIChzLCByZCwgd3IsIG9uZXJyb3IpIHtcbiAgICBzLm9uKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgcy5vbignY2xvc2UnLCBvbmNsb3NlKVxuXG4gICAgZnVuY3Rpb24gb25jbG9zZSAoKSB7XG4gICAgICBpZiAocmQgJiYgcy5fcmVhZGFibGVTdGF0ZSAmJiAhcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuIG9uZXJyb3IoUFJFTUFUVVJFX0NMT1NFKVxuICAgICAgaWYgKHdyICYmIHMuX3dyaXRhYmxlU3RhdGUgJiYgIXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQpIHJldHVybiBvbmVycm9yKFBSRU1BVFVSRV9DTE9TRSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbmVycm9yIChlcnIpIHtcbiAgICBpZiAoIWVyciB8fCBlcnJvcikgcmV0dXJuXG4gICAgZXJyb3IgPSBlcnJcblxuICAgIGZvciAoY29uc3QgcyBvZiBhbGwpIHtcbiAgICAgIHMuZGVzdHJveShlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVjaG8gKHMpIHtcbiAgcmV0dXJuIHNcbn1cblxuZnVuY3Rpb24gaXNTdHJlYW0gKHN0cmVhbSkge1xuICByZXR1cm4gISFzdHJlYW0uX3JlYWRhYmxlU3RhdGUgfHwgISFzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbn1cblxuZnVuY3Rpb24gaXNTdHJlYW14IChzdHJlYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiBzdHJlYW0uX2R1cGxleFN0YXRlID09PSAnbnVtYmVyJyAmJiBpc1N0cmVhbShzdHJlYW0pXG59XG5cbmZ1bmN0aW9uIGlzRW5kZWQgKHN0cmVhbSkge1xuICByZXR1cm4gISFzdHJlYW0uX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZGVkXG59XG5cbmZ1bmN0aW9uIGlzRmluaXNoZWQgKHN0cmVhbSkge1xuICByZXR1cm4gISFzdHJlYW0uX3dyaXRhYmxlU3RhdGUgJiYgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVuZGVkXG59XG5cbmZ1bmN0aW9uIGdldFN0cmVhbUVycm9yIChzdHJlYW0sIG9wdHMgPSB7fSkge1xuICBjb25zdCBlcnIgPSAoc3RyZWFtLl9yZWFkYWJsZVN0YXRlICYmIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lcnJvcikgfHwgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3IpXG5cbiAgLy8gYXZvaWQgaW1wbGljaXQgZXJyb3JzIGJ5IGRlZmF1bHRcbiAgcmV0dXJuICghb3B0cy5hbGwgJiYgZXJyID09PSBTVFJFQU1fREVTVFJPWUVEKSA/IG51bGwgOiBlcnJcbn1cblxuZnVuY3Rpb24gaXNSZWFkU3RyZWFteCAoc3RyZWFtKSB7XG4gIHJldHVybiBpc1N0cmVhbXgoc3RyZWFtKSAmJiBzdHJlYW0ucmVhZGFibGVcbn1cblxuZnVuY3Rpb24gaXNUeXBlZEFycmF5IChkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YS5ieXRlTGVuZ3RoID09PSAnbnVtYmVyJ1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Qnl0ZUxlbmd0aCAoZGF0YSkge1xuICByZXR1cm4gaXNUeXBlZEFycmF5KGRhdGEpID8gZGF0YS5ieXRlTGVuZ3RoIDogMTAyNFxufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIGFib3J0ICgpIHtcbiAgdGhpcy5kZXN0cm95KG5ldyBFcnJvcignU3RyZWFtIGFib3J0ZWQuJykpXG59XG5cbmZ1bmN0aW9uIGlzV3JpdGV2IChzKSB7XG4gIHJldHVybiBzLl93cml0ZXYgIT09IFdyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ICYmIHMuX3dyaXRldiAhPT0gRHVwbGV4LnByb3RvdHlwZS5fd3JpdGV2XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwaXBlbGluZSxcbiAgcGlwZWxpbmVQcm9taXNlLFxuICBpc1N0cmVhbSxcbiAgaXNTdHJlYW14LFxuICBpc0VuZGVkLFxuICBpc0ZpbmlzaGVkLFxuICBnZXRTdHJlYW1FcnJvcixcbiAgU3RyZWFtLFxuICBXcml0YWJsZSxcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgVHJhbnNmb3JtLFxuICAvLyBFeHBvcnQgUGFzc1Rocm91Z2ggZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBOb2RlLmpzIGNvcmUncyBzdHJlYW0gbW9kdWxlXG4gIFBhc3NUaHJvdWdoXG59XG4iLAogICAgImZ1bmN0aW9uIGlzQnVmZmVyICh2YWx1ZSkge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbn1cblxuZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZVNsb3cgKHNpemUpIHtcbiAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3coc2l6ZSlcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyLmJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUoYSwgYilcbn1cblxuZnVuY3Rpb24gY29uY2F0IChidWZmZXJzLCB0b3RhbExlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzLCB0b3RhbExlbmd0aClcbn1cblxuZnVuY3Rpb24gY29weSAoc291cmNlLCB0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiB0b0J1ZmZlcihzb3VyY2UpLmNvcHkodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbn1cblxuZnVuY3Rpb24gZXF1YWxzIChhLCBiKSB7XG4gIHJldHVybiB0b0J1ZmZlcihhKS5lcXVhbHMoYilcbn1cblxuZnVuY3Rpb24gZmlsbCAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLmZpbGwodmFsdWUsIG9mZnNldCwgZW5kLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMgKGJ1ZmZlciwgdmFsdWUsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLmluY2x1ZGVzKHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gaW5kZXhPZiAoYnVmZmVyLCB2YWx1ZSwgYnlmZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuaW5kZXhPZih2YWx1ZSwgYnlmZU9mZnNldCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGxhc3RJbmRleE9mIChidWZmZXIsIHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5sYXN0SW5kZXhPZih2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIHN3YXAxNiAoYnVmZmVyKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnN3YXAxNigpXG59XG5cbmZ1bmN0aW9uIHN3YXAzMiAoYnVmZmVyKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnN3YXAzMigpXG59XG5cbmZ1bmN0aW9uIHN3YXA2NCAoYnVmZmVyKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnN3YXA2NCgpXG59XG5cbmZ1bmN0aW9uIHRvQnVmZmVyIChidWZmZXIpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpKSByZXR1cm4gYnVmZmVyXG4gIHJldHVybiBCdWZmZXIuZnJvbShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nIChidWZmZXIsIGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnRvU3RyaW5nKGVuY29kaW5nLCBzdGFydCwgZW5kKVxufVxuXG5mdW5jdGlvbiB3cml0ZSAoYnVmZmVyLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlRG91YmxlTEUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdExFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVGbG9hdExFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZVVJbnQzMkxFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzJMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlSW50MzJMRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkRG91YmxlTEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWREb3VibGVMRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRGbG9hdExFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkRmxvYXRMRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRVSW50MzJMRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZFVJbnQzMkxFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEludDMyTEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRJbnQzMkxFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlRG91YmxlQkUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdEJFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVGbG9hdEJFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZVVJbnQzMkJFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzJCRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlSW50MzJCRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkRG91YmxlQkUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWREb3VibGVCRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRGbG9hdEJFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkRmxvYXRCRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRVSW50MzJCRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZFVJbnQzMkJFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEludDMyQkUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRJbnQzMkJFKG9mZnNldClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQnVmZmVyLFxuICBpc0VuY29kaW5nLFxuICBhbGxvYyxcbiAgYWxsb2NVbnNhZmUsXG4gIGFsbG9jVW5zYWZlU2xvdyxcbiAgYnl0ZUxlbmd0aCxcbiAgY29tcGFyZSxcbiAgY29uY2F0LFxuICBjb3B5LFxuICBlcXVhbHMsXG4gIGZpbGwsXG4gIGZyb20sXG4gIGluY2x1ZGVzLFxuICBpbmRleE9mLFxuICBsYXN0SW5kZXhPZixcbiAgc3dhcDE2LFxuICBzd2FwMzIsXG4gIHN3YXA2NCxcbiAgdG9CdWZmZXIsXG4gIHRvU3RyaW5nLFxuICB3cml0ZSxcbiAgd3JpdGVEb3VibGVMRSxcbiAgd3JpdGVGbG9hdExFLFxuICB3cml0ZVVJbnQzMkxFLFxuICB3cml0ZUludDMyTEUsXG4gIHJlYWREb3VibGVMRSxcbiAgcmVhZEZsb2F0TEUsXG4gIHJlYWRVSW50MzJMRSxcbiAgcmVhZEludDMyTEUsXG4gIHdyaXRlRG91YmxlQkUsXG4gIHdyaXRlRmxvYXRCRSxcbiAgd3JpdGVVSW50MzJCRSxcbiAgd3JpdGVJbnQzMkJFLFxuICByZWFkRG91YmxlQkUsXG4gIHJlYWRGbG9hdEJFLFxuICByZWFkVUludDMyQkUsXG4gIHJlYWRJbnQzMkJFXG5cbn1cbiIsCiAgICAiY29uc3QgYjRhID0gcmVxdWlyZSgnYjRhJylcblxuY29uc3QgWkVST1MgPSAnMDAwMDAwMDAwMDAwMDAwMDAwMCdcbmNvbnN0IFNFVkVOUyA9ICc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3J1xuY29uc3QgWkVST19PRkZTRVQgPSAnMCcuY2hhckNvZGVBdCgwKVxuY29uc3QgVVNUQVJfTUFHSUMgPSBiNGEuZnJvbShbMHg3NSwgMHg3MywgMHg3NCwgMHg2MSwgMHg3MiwgMHgwMF0pIC8vIHVzdGFyXFx4MDBcbmNvbnN0IFVTVEFSX1ZFUiA9IGI0YS5mcm9tKFtaRVJPX09GRlNFVCwgWkVST19PRkZTRVRdKVxuY29uc3QgR05VX01BR0lDID0gYjRhLmZyb20oWzB4NzUsIDB4NzMsIDB4NzQsIDB4NjEsIDB4NzIsIDB4MjBdKSAvLyB1c3RhclxceDIwXG5jb25zdCBHTlVfVkVSID0gYjRhLmZyb20oWzB4MjAsIDB4MDBdKVxuY29uc3QgTUFTSyA9IDBvNzc3N1xuY29uc3QgTUFHSUNfT0ZGU0VUID0gMjU3XG5jb25zdCBWRVJTSU9OX09GRlNFVCA9IDI2M1xuXG5leHBvcnRzLmRlY29kZUxvbmdQYXRoID0gZnVuY3Rpb24gZGVjb2RlTG9uZ1BhdGggKGJ1ZiwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGRlY29kZVN0cihidWYsIDAsIGJ1Zi5sZW5ndGgsIGVuY29kaW5nKVxufVxuXG5leHBvcnRzLmVuY29kZVBheCA9IGZ1bmN0aW9uIGVuY29kZVBheCAob3B0cykgeyAvLyBUT0RPOiBlbmNvZGUgbW9yZSBzdHVmZiBpbiBwYXhcbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGlmIChvcHRzLm5hbWUpIHJlc3VsdCArPSBhZGRMZW5ndGgoJyBwYXRoPScgKyBvcHRzLm5hbWUgKyAnXFxuJylcbiAgaWYgKG9wdHMubGlua25hbWUpIHJlc3VsdCArPSBhZGRMZW5ndGgoJyBsaW5rcGF0aD0nICsgb3B0cy5saW5rbmFtZSArICdcXG4nKVxuICBjb25zdCBwYXggPSBvcHRzLnBheFxuICBpZiAocGF4KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcGF4KSB7XG4gICAgICByZXN1bHQgKz0gYWRkTGVuZ3RoKCcgJyArIGtleSArICc9JyArIHBheFtrZXldICsgJ1xcbicpXG4gICAgfVxuICB9XG4gIHJldHVybiBiNGEuZnJvbShyZXN1bHQpXG59XG5cbmV4cG9ydHMuZGVjb2RlUGF4ID0gZnVuY3Rpb24gZGVjb2RlUGF4IChidWYpIHtcbiAgY29uc3QgcmVzdWx0ID0ge31cblxuICB3aGlsZSAoYnVmLmxlbmd0aCkge1xuICAgIGxldCBpID0gMFxuICAgIHdoaWxlIChpIDwgYnVmLmxlbmd0aCAmJiBidWZbaV0gIT09IDMyKSBpKytcbiAgICBjb25zdCBsZW4gPSBwYXJzZUludChiNGEudG9TdHJpbmcoYnVmLnN1YmFycmF5KDAsIGkpKSwgMTApXG4gICAgaWYgKCFsZW4pIHJldHVybiByZXN1bHRcblxuICAgIGNvbnN0IGIgPSBiNGEudG9TdHJpbmcoYnVmLnN1YmFycmF5KGkgKyAxLCBsZW4gLSAxKSlcbiAgICBjb25zdCBrZXlJbmRleCA9IGIuaW5kZXhPZignPScpXG4gICAgaWYgKGtleUluZGV4ID09PSAtMSkgcmV0dXJuIHJlc3VsdFxuICAgIHJlc3VsdFtiLnNsaWNlKDAsIGtleUluZGV4KV0gPSBiLnNsaWNlKGtleUluZGV4ICsgMSlcblxuICAgIGJ1ZiA9IGJ1Zi5zdWJhcnJheShsZW4pXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlIChvcHRzKSB7XG4gIGNvbnN0IGJ1ZiA9IGI0YS5hbGxvYyg1MTIpXG4gIGxldCBuYW1lID0gb3B0cy5uYW1lXG4gIGxldCBwcmVmaXggPSAnJ1xuXG4gIGlmIChvcHRzLnR5cGVmbGFnID09PSA1ICYmIG5hbWVbbmFtZS5sZW5ndGggLSAxXSAhPT0gJy8nKSBuYW1lICs9ICcvJ1xuICBpZiAoYjRhLmJ5dGVMZW5ndGgobmFtZSkgIT09IG5hbWUubGVuZ3RoKSByZXR1cm4gbnVsbCAvLyB1dGYtOFxuXG4gIHdoaWxlIChiNGEuYnl0ZUxlbmd0aChuYW1lKSA+IDEwMCkge1xuICAgIGNvbnN0IGkgPSBuYW1lLmluZGV4T2YoJy8nKVxuICAgIGlmIChpID09PSAtMSkgcmV0dXJuIG51bGxcbiAgICBwcmVmaXggKz0gcHJlZml4ID8gJy8nICsgbmFtZS5zbGljZSgwLCBpKSA6IG5hbWUuc2xpY2UoMCwgaSlcbiAgICBuYW1lID0gbmFtZS5zbGljZShpICsgMSlcbiAgfVxuXG4gIGlmIChiNGEuYnl0ZUxlbmd0aChuYW1lKSA+IDEwMCB8fCBiNGEuYnl0ZUxlbmd0aChwcmVmaXgpID4gMTU1KSByZXR1cm4gbnVsbFxuICBpZiAob3B0cy5saW5rbmFtZSAmJiBiNGEuYnl0ZUxlbmd0aChvcHRzLmxpbmtuYW1lKSA+IDEwMCkgcmV0dXJuIG51bGxcblxuICBiNGEud3JpdGUoYnVmLCBuYW1lKVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3Qob3B0cy5tb2RlICYgTUFTSywgNiksIDEwMClcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG9wdHMudWlkLCA2KSwgMTA4KVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3Qob3B0cy5naWQsIDYpLCAxMTYpXG4gIGVuY29kZVNpemUob3B0cy5zaXplLCBidWYsIDEyNClcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KChvcHRzLm10aW1lLmdldFRpbWUoKSAvIDEwMDApIHwgMCwgMTEpLCAxMzYpXG5cbiAgYnVmWzE1Nl0gPSBaRVJPX09GRlNFVCArIHRvVHlwZWZsYWcob3B0cy50eXBlKVxuXG4gIGlmIChvcHRzLmxpbmtuYW1lKSBiNGEud3JpdGUoYnVmLCBvcHRzLmxpbmtuYW1lLCAxNTcpXG5cbiAgYjRhLmNvcHkoVVNUQVJfTUFHSUMsIGJ1ZiwgTUFHSUNfT0ZGU0VUKVxuICBiNGEuY29weShVU1RBUl9WRVIsIGJ1ZiwgVkVSU0lPTl9PRkZTRVQpXG4gIGlmIChvcHRzLnVuYW1lKSBiNGEud3JpdGUoYnVmLCBvcHRzLnVuYW1lLCAyNjUpXG4gIGlmIChvcHRzLmduYW1lKSBiNGEud3JpdGUoYnVmLCBvcHRzLmduYW1lLCAyOTcpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLmRldm1ham9yIHx8IDAsIDYpLCAzMjkpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLmRldm1pbm9yIHx8IDAsIDYpLCAzMzcpXG5cbiAgaWYgKHByZWZpeCkgYjRhLndyaXRlKGJ1ZiwgcHJlZml4LCAzNDUpXG5cbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KGNrc3VtKGJ1ZiksIDYpLCAxNDgpXG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZSAoYnVmLCBmaWxlbmFtZUVuY29kaW5nLCBhbGxvd1Vua25vd25Gb3JtYXQpIHtcbiAgbGV0IHR5cGVmbGFnID0gYnVmWzE1Nl0gPT09IDAgPyAwIDogYnVmWzE1Nl0gLSBaRVJPX09GRlNFVFxuXG4gIGxldCBuYW1lID0gZGVjb2RlU3RyKGJ1ZiwgMCwgMTAwLCBmaWxlbmFtZUVuY29kaW5nKVxuICBjb25zdCBtb2RlID0gZGVjb2RlT2N0KGJ1ZiwgMTAwLCA4KVxuICBjb25zdCB1aWQgPSBkZWNvZGVPY3QoYnVmLCAxMDgsIDgpXG4gIGNvbnN0IGdpZCA9IGRlY29kZU9jdChidWYsIDExNiwgOClcbiAgY29uc3Qgc2l6ZSA9IGRlY29kZU9jdChidWYsIDEyNCwgMTIpXG4gIGNvbnN0IG10aW1lID0gZGVjb2RlT2N0KGJ1ZiwgMTM2LCAxMilcbiAgY29uc3QgdHlwZSA9IHRvVHlwZSh0eXBlZmxhZylcbiAgY29uc3QgbGlua25hbWUgPSBidWZbMTU3XSA9PT0gMCA/IG51bGwgOiBkZWNvZGVTdHIoYnVmLCAxNTcsIDEwMCwgZmlsZW5hbWVFbmNvZGluZylcbiAgY29uc3QgdW5hbWUgPSBkZWNvZGVTdHIoYnVmLCAyNjUsIDMyKVxuICBjb25zdCBnbmFtZSA9IGRlY29kZVN0cihidWYsIDI5NywgMzIpXG4gIGNvbnN0IGRldm1ham9yID0gZGVjb2RlT2N0KGJ1ZiwgMzI5LCA4KVxuICBjb25zdCBkZXZtaW5vciA9IGRlY29kZU9jdChidWYsIDMzNywgOClcblxuICBjb25zdCBjID0gY2tzdW0oYnVmKVxuXG4gIC8vIGNoZWNrc3VtIGlzIHN0aWxsIGluaXRpYWwgdmFsdWUgaWYgaGVhZGVyIHdhcyBudWxsLlxuICBpZiAoYyA9PT0gOCAqIDMyKSByZXR1cm4gbnVsbFxuXG4gIC8vIHZhbGlkIGNoZWNrc3VtXG4gIGlmIChjICE9PSBkZWNvZGVPY3QoYnVmLCAxNDgsIDgpKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFyIGhlYWRlci4gTWF5YmUgdGhlIHRhciBpcyBjb3JydXB0ZWQgb3IgaXQgbmVlZHMgdG8gYmUgZ3VuemlwcGVkPycpXG5cbiAgaWYgKGlzVVNUQVIoYnVmKSkge1xuICAgIC8vIHVzdGFyIChwb3NpeCkgZm9ybWF0LlxuICAgIC8vIHByZXBlbmQgcHJlZml4LCBpZiBwcmVzZW50LlxuICAgIGlmIChidWZbMzQ1XSkgbmFtZSA9IGRlY29kZVN0cihidWYsIDM0NSwgMTU1LCBmaWxlbmFtZUVuY29kaW5nKSArICcvJyArIG5hbWVcbiAgfSBlbHNlIGlmIChpc0dOVShidWYpKSB7XG4gICAgLy8gJ2dudScvJ29sZGdudScgZm9ybWF0LiBTaW1pbGFyIHRvIHVzdGFyLCBidXQgaGFzIHN1cHBvcnQgZm9yIGluY3JlbWVudGFsIGFuZFxuICAgIC8vIG11bHRpLXZvbHVtZSB0YXJiYWxscy5cbiAgfSBlbHNlIHtcbiAgICBpZiAoIWFsbG93VW5rbm93bkZvcm1hdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRhciBoZWFkZXI6IHVua25vd24gZm9ybWF0LicpXG4gICAgfVxuICB9XG5cbiAgLy8gdG8gc3VwcG9ydCBvbGQgdGFyIHZlcnNpb25zIHRoYXQgdXNlIHRyYWlsaW5nIC8gdG8gaW5kaWNhdGUgZGlyc1xuICBpZiAodHlwZWZsYWcgPT09IDAgJiYgbmFtZSAmJiBuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcvJykgdHlwZWZsYWcgPSA1XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lLFxuICAgIG1vZGUsXG4gICAgdWlkLFxuICAgIGdpZCxcbiAgICBzaXplLFxuICAgIG10aW1lOiBuZXcgRGF0ZSgxMDAwICogbXRpbWUpLFxuICAgIHR5cGUsXG4gICAgbGlua25hbWUsXG4gICAgdW5hbWUsXG4gICAgZ25hbWUsXG4gICAgZGV2bWFqb3IsXG4gICAgZGV2bWlub3IsXG4gICAgcGF4OiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVU1RBUiAoYnVmKSB7XG4gIHJldHVybiBiNGEuZXF1YWxzKFVTVEFSX01BR0lDLCBidWYuc3ViYXJyYXkoTUFHSUNfT0ZGU0VULCBNQUdJQ19PRkZTRVQgKyA2KSlcbn1cblxuZnVuY3Rpb24gaXNHTlUgKGJ1Zikge1xuICByZXR1cm4gYjRhLmVxdWFscyhHTlVfTUFHSUMsIGJ1Zi5zdWJhcnJheShNQUdJQ19PRkZTRVQsIE1BR0lDX09GRlNFVCArIDYpKSAmJlxuICAgIGI0YS5lcXVhbHMoR05VX1ZFUiwgYnVmLnN1YmFycmF5KFZFUlNJT05fT0ZGU0VULCBWRVJTSU9OX09GRlNFVCArIDIpKVxufVxuXG5mdW5jdGlvbiBjbGFtcCAoaW5kZXgsIGxlbiwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInKSByZXR1cm4gZGVmYXVsdFZhbHVlXG4gIGluZGV4ID0gfn5pbmRleCAvLyBDb2VyY2UgdG8gaW50ZWdlci5cbiAgaWYgKGluZGV4ID49IGxlbikgcmV0dXJuIGxlblxuICBpZiAoaW5kZXggPj0gMCkgcmV0dXJuIGluZGV4XG4gIGluZGV4ICs9IGxlblxuICBpZiAoaW5kZXggPj0gMCkgcmV0dXJuIGluZGV4XG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHRvVHlwZSAoZmxhZykge1xuICBzd2l0Y2ggKGZsYWcpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gJ2ZpbGUnXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuICdsaW5rJ1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiAnc3ltbGluaydcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gJ2NoYXJhY3Rlci1kZXZpY2UnXG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuICdibG9jay1kZXZpY2UnXG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuICdkaXJlY3RvcnknXG4gICAgY2FzZSA2OlxuICAgICAgcmV0dXJuICdmaWZvJ1xuICAgIGNhc2UgNzpcbiAgICAgIHJldHVybiAnY29udGlndW91cy1maWxlJ1xuICAgIGNhc2UgNzI6XG4gICAgICByZXR1cm4gJ3BheC1oZWFkZXInXG4gICAgY2FzZSA1NTpcbiAgICAgIHJldHVybiAncGF4LWdsb2JhbC1oZWFkZXInXG4gICAgY2FzZSAyNzpcbiAgICAgIHJldHVybiAnZ251LWxvbmctbGluay1wYXRoJ1xuICAgIGNhc2UgMjg6XG4gICAgY2FzZSAzMDpcbiAgICAgIHJldHVybiAnZ251LWxvbmctcGF0aCdcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHRvVHlwZWZsYWcgKGZsYWcpIHtcbiAgc3dpdGNoIChmbGFnKSB7XG4gICAgY2FzZSAnZmlsZSc6XG4gICAgICByZXR1cm4gMFxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgcmV0dXJuIDFcbiAgICBjYXNlICdzeW1saW5rJzpcbiAgICAgIHJldHVybiAyXG4gICAgY2FzZSAnY2hhcmFjdGVyLWRldmljZSc6XG4gICAgICByZXR1cm4gM1xuICAgIGNhc2UgJ2Jsb2NrLWRldmljZSc6XG4gICAgICByZXR1cm4gNFxuICAgIGNhc2UgJ2RpcmVjdG9yeSc6XG4gICAgICByZXR1cm4gNVxuICAgIGNhc2UgJ2ZpZm8nOlxuICAgICAgcmV0dXJuIDZcbiAgICBjYXNlICdjb250aWd1b3VzLWZpbGUnOlxuICAgICAgcmV0dXJuIDdcbiAgICBjYXNlICdwYXgtaGVhZGVyJzpcbiAgICAgIHJldHVybiA3MlxuICB9XG5cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gaW5kZXhPZiAoYmxvY2ssIG51bSwgb2Zmc2V0LCBlbmQpIHtcbiAgZm9yICg7IG9mZnNldCA8IGVuZDsgb2Zmc2V0KyspIHtcbiAgICBpZiAoYmxvY2tbb2Zmc2V0XSA9PT0gbnVtKSByZXR1cm4gb2Zmc2V0XG4gIH1cbiAgcmV0dXJuIGVuZFxufVxuXG5mdW5jdGlvbiBja3N1bSAoYmxvY2spIHtcbiAgbGV0IHN1bSA9IDggKiAzMlxuICBmb3IgKGxldCBpID0gMDsgaSA8IDE0ODsgaSsrKSBzdW0gKz0gYmxvY2tbaV1cbiAgZm9yIChsZXQgaiA9IDE1NjsgaiA8IDUxMjsgaisrKSBzdW0gKz0gYmxvY2tbal1cbiAgcmV0dXJuIHN1bVxufVxuXG5mdW5jdGlvbiBlbmNvZGVPY3QgKHZhbCwgbikge1xuICB2YWwgPSB2YWwudG9TdHJpbmcoOClcbiAgaWYgKHZhbC5sZW5ndGggPiBuKSByZXR1cm4gU0VWRU5TLnNsaWNlKDAsIG4pICsgJyAnXG4gIHJldHVybiBaRVJPUy5zbGljZSgwLCBuIC0gdmFsLmxlbmd0aCkgKyB2YWwgKyAnICdcbn1cblxuZnVuY3Rpb24gZW5jb2RlU2l6ZUJpbiAobnVtLCBidWYsIG9mZikge1xuICBidWZbb2ZmXSA9IDB4ODBcbiAgZm9yIChsZXQgaSA9IDExOyBpID4gMDsgaS0tKSB7XG4gICAgYnVmW29mZiArIGldID0gbnVtICYgMHhmZlxuICAgIG51bSA9IE1hdGguZmxvb3IobnVtIC8gMHgxMDApXG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlU2l6ZSAobnVtLCBidWYsIG9mZikge1xuICBpZiAobnVtLnRvU3RyaW5nKDgpLmxlbmd0aCA+IDExKSB7XG4gICAgZW5jb2RlU2l6ZUJpbihudW0sIGJ1Ziwgb2ZmKVxuICB9IGVsc2Uge1xuICAgIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChudW0sIDExKSwgb2ZmKVxuICB9XG59XG5cbi8qIENvcGllZCBmcm9tIHRoZSBub2RlLXRhciByZXBvIGFuZCBtb2RpZmllZCB0byBtZWV0XG4gKiB0YXItc3RyZWFtIGNvZGluZyBzdGFuZGFyZC5cbiAqXG4gKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbm9kZS10YXIvYmxvYi81MWI2NjI3YTFmMzU3ZDJlYjQzM2U3Mzc4ZTVmMDVlODNiN2FhNmNkL2xpYi9oZWFkZXIuanMjTDM0OVxuICovXG5mdW5jdGlvbiBwYXJzZTI1NiAoYnVmKSB7XG4gIC8vIGZpcnN0IGJ5dGUgTVVTVCBiZSBlaXRoZXIgODAgb3IgRkZcbiAgLy8gODAgZm9yIHBvc2l0aXZlLCBGRiBmb3IgMidzIGNvbXBcbiAgbGV0IHBvc2l0aXZlXG4gIGlmIChidWZbMF0gPT09IDB4ODApIHBvc2l0aXZlID0gdHJ1ZVxuICBlbHNlIGlmIChidWZbMF0gPT09IDB4RkYpIHBvc2l0aXZlID0gZmFsc2VcbiAgZWxzZSByZXR1cm4gbnVsbFxuXG4gIC8vIGJ1aWxkIHVwIGEgYmFzZS0yNTYgdHVwbGUgZnJvbSB0aGUgbGVhc3Qgc2lnIHRvIHRoZSBoaWdoZXN0XG4gIGNvbnN0IHR1cGxlID0gW11cbiAgbGV0IGlcbiAgZm9yIChpID0gYnVmLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBjb25zdCBieXRlID0gYnVmW2ldXG4gICAgaWYgKHBvc2l0aXZlKSB0dXBsZS5wdXNoKGJ5dGUpXG4gICAgZWxzZSB0dXBsZS5wdXNoKDB4RkYgLSBieXRlKVxuICB9XG5cbiAgbGV0IHN1bSA9IDBcbiAgY29uc3QgbCA9IHR1cGxlLmxlbmd0aFxuICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgc3VtICs9IHR1cGxlW2ldICogTWF0aC5wb3coMjU2LCBpKVxuICB9XG5cbiAgcmV0dXJuIHBvc2l0aXZlID8gc3VtIDogLTEgKiBzdW1cbn1cblxuZnVuY3Rpb24gZGVjb2RlT2N0ICh2YWwsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHZhbCA9IHZhbC5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aClcbiAgb2Zmc2V0ID0gMFxuXG4gIC8vIElmIHByZWZpeGVkIHdpdGggMHg4MCB0aGVuIHBhcnNlIGFzIGEgYmFzZS0yNTYgaW50ZWdlclxuICBpZiAodmFsW29mZnNldF0gJiAweDgwKSB7XG4gICAgcmV0dXJuIHBhcnNlMjU2KHZhbClcbiAgfSBlbHNlIHtcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiB0YXIgY2FuIHByZWZpeCB3aXRoIHNwYWNlc1xuICAgIHdoaWxlIChvZmZzZXQgPCB2YWwubGVuZ3RoICYmIHZhbFtvZmZzZXRdID09PSAzMikgb2Zmc2V0KytcbiAgICBjb25zdCBlbmQgPSBjbGFtcChpbmRleE9mKHZhbCwgMzIsIG9mZnNldCwgdmFsLmxlbmd0aCksIHZhbC5sZW5ndGgsIHZhbC5sZW5ndGgpXG4gICAgd2hpbGUgKG9mZnNldCA8IGVuZCAmJiB2YWxbb2Zmc2V0XSA9PT0gMCkgb2Zmc2V0KytcbiAgICBpZiAoZW5kID09PSBvZmZzZXQpIHJldHVybiAwXG4gICAgcmV0dXJuIHBhcnNlSW50KGI0YS50b1N0cmluZyh2YWwuc3ViYXJyYXkob2Zmc2V0LCBlbmQpKSwgOClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVTdHIgKHZhbCwgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiNGEudG9TdHJpbmcodmFsLnN1YmFycmF5KG9mZnNldCwgaW5kZXhPZih2YWwsIDAsIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKSksIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhZGRMZW5ndGggKHN0cikge1xuICBjb25zdCBsZW4gPSBiNGEuYnl0ZUxlbmd0aChzdHIpXG4gIGxldCBkaWdpdHMgPSBNYXRoLmZsb29yKE1hdGgubG9nKGxlbikgLyBNYXRoLmxvZygxMCkpICsgMVxuICBpZiAobGVuICsgZGlnaXRzID49IE1hdGgucG93KDEwLCBkaWdpdHMpKSBkaWdpdHMrK1xuXG4gIHJldHVybiAobGVuICsgZGlnaXRzKSArIHN0clxufVxuIiwKICAgICJjb25zdCB7IFdyaXRhYmxlLCBSZWFkYWJsZSwgZ2V0U3RyZWFtRXJyb3IgfSA9IHJlcXVpcmUoJ3N0cmVhbXgnKVxuY29uc3QgRklGTyA9IHJlcXVpcmUoJ2Zhc3QtZmlmbycpXG5jb25zdCBiNGEgPSByZXF1aXJlKCdiNGEnKVxuY29uc3QgaGVhZGVycyA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5cbmNvbnN0IEVNUFRZID0gYjRhLmFsbG9jKDApXG5cbmNsYXNzIEJ1ZmZlckxpc3Qge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5idWZmZXJlZCA9IDBcbiAgICB0aGlzLnNoaWZ0ZWQgPSAwXG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBGSUZPKClcblxuICAgIHRoaXMuX29mZnNldCA9IDBcbiAgfVxuXG4gIHB1c2ggKGJ1ZmZlcikge1xuICAgIHRoaXMuYnVmZmVyZWQgKz0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgICB0aGlzLnF1ZXVlLnB1c2goYnVmZmVyKVxuICB9XG5cbiAgc2hpZnRGaXJzdCAoc2l6ZSkge1xuICAgIHJldHVybiB0aGlzLl9idWZmZXJlZCA9PT0gMCA/IG51bGwgOiB0aGlzLl9uZXh0KHNpemUpXG4gIH1cblxuICBzaGlmdCAoc2l6ZSkge1xuICAgIGlmIChzaXplID4gdGhpcy5idWZmZXJlZCkgcmV0dXJuIG51bGxcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuIEVNUFRZXG5cbiAgICBsZXQgY2h1bmsgPSB0aGlzLl9uZXh0KHNpemUpXG5cbiAgICBpZiAoc2l6ZSA9PT0gY2h1bmsuYnl0ZUxlbmd0aCkgcmV0dXJuIGNodW5rIC8vIGxpa2VseSBjYXNlXG5cbiAgICBjb25zdCBjaHVua3MgPSBbY2h1bmtdXG5cbiAgICB3aGlsZSAoKHNpemUgLT0gY2h1bmsuYnl0ZUxlbmd0aCkgPiAwKSB7XG4gICAgICBjaHVuayA9IHRoaXMuX25leHQoc2l6ZSlcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIH1cblxuICAgIHJldHVybiBiNGEuY29uY2F0KGNodW5rcylcbiAgfVxuXG4gIF9uZXh0IChzaXplKSB7XG4gICAgY29uc3QgYnVmID0gdGhpcy5xdWV1ZS5wZWVrKClcbiAgICBjb25zdCByZW0gPSBidWYuYnl0ZUxlbmd0aCAtIHRoaXMuX29mZnNldFxuXG4gICAgaWYgKHNpemUgPj0gcmVtKSB7XG4gICAgICBjb25zdCBzdWIgPSB0aGlzLl9vZmZzZXQgPyBidWYuc3ViYXJyYXkodGhpcy5fb2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCkgOiBidWZcbiAgICAgIHRoaXMucXVldWUuc2hpZnQoKVxuICAgICAgdGhpcy5fb2Zmc2V0ID0gMFxuICAgICAgdGhpcy5idWZmZXJlZCAtPSByZW1cbiAgICAgIHRoaXMuc2hpZnRlZCArPSByZW1cbiAgICAgIHJldHVybiBzdWJcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlcmVkIC09IHNpemVcbiAgICB0aGlzLnNoaWZ0ZWQgKz0gc2l6ZVxuXG4gICAgcmV0dXJuIGJ1Zi5zdWJhcnJheSh0aGlzLl9vZmZzZXQsICh0aGlzLl9vZmZzZXQgKz0gc2l6ZSkpXG4gIH1cbn1cblxuY2xhc3MgU291cmNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoc2VsZiwgaGVhZGVyLCBvZmZzZXQpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmhlYWRlciA9IGhlYWRlclxuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0XG5cbiAgICB0aGlzLl9wYXJlbnQgPSBzZWxmXG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICBpZiAodGhpcy5oZWFkZXIuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgfVxuICAgIGlmICh0aGlzLl9wYXJlbnQuX3N0cmVhbSA9PT0gdGhpcykge1xuICAgICAgdGhpcy5fcGFyZW50Ll91cGRhdGUoKVxuICAgIH1cbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3ByZWRlc3Ryb3kgKCkge1xuICAgIHRoaXMuX3BhcmVudC5kZXN0cm95KGdldFN0cmVhbUVycm9yKHRoaXMpKVxuICB9XG5cbiAgX2RldGFjaCAoKSB7XG4gICAgaWYgKHRoaXMuX3BhcmVudC5fc3RyZWFtID09PSB0aGlzKSB7XG4gICAgICB0aGlzLl9wYXJlbnQuX3N0cmVhbSA9IG51bGxcbiAgICAgIHRoaXMuX3BhcmVudC5fbWlzc2luZyA9IG92ZXJmbG93KHRoaXMuaGVhZGVyLnNpemUpXG4gICAgICB0aGlzLl9wYXJlbnQuX3VwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgdGhpcy5fZGV0YWNoKClcbiAgICBjYihudWxsKVxuICB9XG59XG5cbmNsYXNzIEV4dHJhY3QgZXh0ZW5kcyBXcml0YWJsZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIGlmICghb3B0cykgb3B0cyA9IHt9XG5cbiAgICB0aGlzLl9idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpXG4gICAgdGhpcy5fb2Zmc2V0ID0gMFxuICAgIHRoaXMuX2hlYWRlciA9IG51bGxcbiAgICB0aGlzLl9zdHJlYW0gPSBudWxsXG4gICAgdGhpcy5fbWlzc2luZyA9IDBcbiAgICB0aGlzLl9sb25nSGVhZGVyID0gZmFsc2VcbiAgICB0aGlzLl9jYWxsYmFjayA9IG5vb3BcbiAgICB0aGlzLl9sb2NrZWQgPSBmYWxzZVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2VcbiAgICB0aGlzLl9wYXggPSBudWxsXG4gICAgdGhpcy5fcGF4R2xvYmFsID0gbnVsbFxuICAgIHRoaXMuX2dudUxvbmdQYXRoID0gbnVsbFxuICAgIHRoaXMuX2dudUxvbmdMaW5rUGF0aCA9IG51bGxcbiAgICB0aGlzLl9maWxlbmFtZUVuY29kaW5nID0gb3B0cy5maWxlbmFtZUVuY29kaW5nIHx8ICd1dGYtOCdcbiAgICB0aGlzLl9hbGxvd1Vua25vd25Gb3JtYXQgPSAhIW9wdHMuYWxsb3dVbmtub3duRm9ybWF0XG4gICAgdGhpcy5fdW5sb2NrQm91bmQgPSB0aGlzLl91bmxvY2suYmluZCh0aGlzKVxuICB9XG5cbiAgX3VubG9jayAoZXJyKSB7XG4gICAgdGhpcy5fbG9ja2VkID0gZmFsc2VcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuZGVzdHJveShlcnIpXG4gICAgICB0aGlzLl9jb250aW51ZVdyaXRlKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZSgpXG4gIH1cblxuICBfY29uc3VtZUhlYWRlciAoKSB7XG4gICAgaWYgKHRoaXMuX2xvY2tlZCkgcmV0dXJuIGZhbHNlXG5cbiAgICB0aGlzLl9vZmZzZXQgPSB0aGlzLl9idWZmZXIuc2hpZnRlZFxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2hlYWRlciA9IGhlYWRlcnMuZGVjb2RlKHRoaXMuX2J1ZmZlci5zaGlmdCg1MTIpLCB0aGlzLl9maWxlbmFtZUVuY29kaW5nLCB0aGlzLl9hbGxvd1Vua25vd25Gb3JtYXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jb250aW51ZVdyaXRlKGVycilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICghdGhpcy5faGVhZGVyKSByZXR1cm4gdHJ1ZVxuXG4gICAgc3dpdGNoICh0aGlzLl9oZWFkZXIudHlwZSkge1xuICAgICAgY2FzZSAnZ251LWxvbmctcGF0aCc6XG4gICAgICBjYXNlICdnbnUtbG9uZy1saW5rLXBhdGgnOlxuICAgICAgY2FzZSAncGF4LWdsb2JhbC1oZWFkZXInOlxuICAgICAgY2FzZSAncGF4LWhlYWRlcic6XG4gICAgICAgIHRoaXMuX2xvbmdIZWFkZXIgPSB0cnVlXG4gICAgICAgIHRoaXMuX21pc3NpbmcgPSB0aGlzLl9oZWFkZXIuc2l6ZVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHRoaXMuX2xvY2tlZCA9IHRydWVcbiAgICB0aGlzLl9hcHBseUxvbmdIZWFkZXJzKClcblxuICAgIGlmICh0aGlzLl9oZWFkZXIuc2l6ZSA9PT0gMCB8fCB0aGlzLl9oZWFkZXIudHlwZSA9PT0gJ2RpcmVjdG9yeScpIHtcbiAgICAgIHRoaXMuZW1pdCgnZW50cnknLCB0aGlzLl9oZWFkZXIsIHRoaXMuX2NyZWF0ZVN0cmVhbSgpLCB0aGlzLl91bmxvY2tCb3VuZClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fc3RyZWFtID0gdGhpcy5fY3JlYXRlU3RyZWFtKClcbiAgICB0aGlzLl9taXNzaW5nID0gdGhpcy5faGVhZGVyLnNpemVcblxuICAgIHRoaXMuZW1pdCgnZW50cnknLCB0aGlzLl9oZWFkZXIsIHRoaXMuX3N0cmVhbSwgdGhpcy5fdW5sb2NrQm91bmQpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIF9hcHBseUxvbmdIZWFkZXJzICgpIHtcbiAgICBpZiAodGhpcy5fZ251TG9uZ1BhdGgpIHtcbiAgICAgIHRoaXMuX2hlYWRlci5uYW1lID0gdGhpcy5fZ251TG9uZ1BhdGhcbiAgICAgIHRoaXMuX2dudUxvbmdQYXRoID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9nbnVMb25nTGlua1BhdGgpIHtcbiAgICAgIHRoaXMuX2hlYWRlci5saW5rbmFtZSA9IHRoaXMuX2dudUxvbmdMaW5rUGF0aFxuICAgICAgdGhpcy5fZ251TG9uZ0xpbmtQYXRoID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wYXgpIHtcbiAgICAgIGlmICh0aGlzLl9wYXgucGF0aCkgdGhpcy5faGVhZGVyLm5hbWUgPSB0aGlzLl9wYXgucGF0aFxuICAgICAgaWYgKHRoaXMuX3BheC5saW5rcGF0aCkgdGhpcy5faGVhZGVyLmxpbmtuYW1lID0gdGhpcy5fcGF4LmxpbmtwYXRoXG4gICAgICBpZiAodGhpcy5fcGF4LnNpemUpIHRoaXMuX2hlYWRlci5zaXplID0gcGFyc2VJbnQodGhpcy5fcGF4LnNpemUsIDEwKVxuICAgICAgdGhpcy5faGVhZGVyLnBheCA9IHRoaXMuX3BheFxuICAgICAgdGhpcy5fcGF4ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIF9kZWNvZGVMb25nSGVhZGVyIChidWYpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2hlYWRlci50eXBlKSB7XG4gICAgICBjYXNlICdnbnUtbG9uZy1wYXRoJzpcbiAgICAgICAgdGhpcy5fZ251TG9uZ1BhdGggPSBoZWFkZXJzLmRlY29kZUxvbmdQYXRoKGJ1ZiwgdGhpcy5fZmlsZW5hbWVFbmNvZGluZylcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2dudS1sb25nLWxpbmstcGF0aCc6XG4gICAgICAgIHRoaXMuX2dudUxvbmdMaW5rUGF0aCA9IGhlYWRlcnMuZGVjb2RlTG9uZ1BhdGgoYnVmLCB0aGlzLl9maWxlbmFtZUVuY29kaW5nKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncGF4LWdsb2JhbC1oZWFkZXInOlxuICAgICAgICB0aGlzLl9wYXhHbG9iYWwgPSBoZWFkZXJzLmRlY29kZVBheChidWYpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwYXgtaGVhZGVyJzpcbiAgICAgICAgdGhpcy5fcGF4ID0gdGhpcy5fcGF4R2xvYmFsID09PSBudWxsXG4gICAgICAgICAgPyBoZWFkZXJzLmRlY29kZVBheChidWYpXG4gICAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wYXhHbG9iYWwsIGhlYWRlcnMuZGVjb2RlUGF4KGJ1ZikpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgX2NvbnN1bWVMb25nSGVhZGVyICgpIHtcbiAgICB0aGlzLl9sb25nSGVhZGVyID0gZmFsc2VcbiAgICB0aGlzLl9taXNzaW5nID0gb3ZlcmZsb3codGhpcy5faGVhZGVyLnNpemUpXG5cbiAgICBjb25zdCBidWYgPSB0aGlzLl9idWZmZXIuc2hpZnQodGhpcy5faGVhZGVyLnNpemUpXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fZGVjb2RlTG9uZ0hlYWRlcihidWYpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jb250aW51ZVdyaXRlKGVycilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBfY29uc3VtZVN0cmVhbSAoKSB7XG4gICAgY29uc3QgYnVmID0gdGhpcy5fYnVmZmVyLnNoaWZ0Rmlyc3QodGhpcy5fbWlzc2luZylcbiAgICBpZiAoYnVmID09PSBudWxsKSByZXR1cm4gZmFsc2VcblxuICAgIHRoaXMuX21pc3NpbmcgLT0gYnVmLmJ5dGVMZW5ndGhcbiAgICBjb25zdCBkcmFpbmVkID0gdGhpcy5fc3RyZWFtLnB1c2goYnVmKVxuXG4gICAgaWYgKHRoaXMuX21pc3NpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3N0cmVhbS5wdXNoKG51bGwpXG4gICAgICBpZiAoZHJhaW5lZCkgdGhpcy5fc3RyZWFtLl9kZXRhY2goKVxuICAgICAgcmV0dXJuIGRyYWluZWQgJiYgdGhpcy5fbG9ja2VkID09PSBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiBkcmFpbmVkXG4gIH1cblxuICBfY3JlYXRlU3RyZWFtICgpIHtcbiAgICByZXR1cm4gbmV3IFNvdXJjZSh0aGlzLCB0aGlzLl9oZWFkZXIsIHRoaXMuX29mZnNldClcbiAgfVxuXG4gIF91cGRhdGUgKCkge1xuICAgIHdoaWxlICh0aGlzLl9idWZmZXIuYnVmZmVyZWQgPiAwICYmICF0aGlzLmRlc3Ryb3lpbmcpIHtcbiAgICAgIGlmICh0aGlzLl9taXNzaW5nID4gMCkge1xuICAgICAgICBpZiAodGhpcy5fc3RyZWFtICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NvbnN1bWVTdHJlYW0oKSA9PT0gZmFsc2UpIHJldHVyblxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbG9uZ0hlYWRlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGlmICh0aGlzLl9taXNzaW5nID4gdGhpcy5fYnVmZmVyLmJ1ZmZlcmVkKSBicmVha1xuICAgICAgICAgIGlmICh0aGlzLl9jb25zdW1lTG9uZ0hlYWRlcigpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlnbm9yZSA9IHRoaXMuX2J1ZmZlci5zaGlmdEZpcnN0KHRoaXMuX21pc3NpbmcpXG4gICAgICAgIGlmIChpZ25vcmUgIT09IG51bGwpIHRoaXMuX21pc3NpbmcgLT0gaWdub3JlLmJ5dGVMZW5ndGhcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2J1ZmZlci5idWZmZXJlZCA8IDUxMikgYnJlYWtcbiAgICAgIGlmICh0aGlzLl9zdHJlYW0gIT09IG51bGwgfHwgdGhpcy5fY29uc3VtZUhlYWRlcigpID09PSBmYWxzZSkgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fY29udGludWVXcml0ZShudWxsKVxuICB9XG5cbiAgX2NvbnRpbnVlV3JpdGUgKGVycikge1xuICAgIGNvbnN0IGNiID0gdGhpcy5fY2FsbGJhY2tcbiAgICB0aGlzLl9jYWxsYmFjayA9IG5vb3BcbiAgICBjYihlcnIpXG4gIH1cblxuICBfd3JpdGUgKGRhdGEsIGNiKSB7XG4gICAgdGhpcy5fY2FsbGJhY2sgPSBjYlxuICAgIHRoaXMuX2J1ZmZlci5wdXNoKGRhdGEpXG4gICAgdGhpcy5fdXBkYXRlKClcbiAgfVxuXG4gIF9maW5hbCAoY2IpIHtcbiAgICB0aGlzLl9maW5pc2hlZCA9IHRoaXMuX21pc3NpbmcgPT09IDAgJiYgdGhpcy5fYnVmZmVyLmJ1ZmZlcmVkID09PSAwXG4gICAgY2IodGhpcy5fZmluaXNoZWQgPyBudWxsIDogbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVuZCBvZiBkYXRhJykpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgdGhpcy5fY29udGludWVXcml0ZShudWxsKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgaWYgKHRoaXMuX3N0cmVhbSkgdGhpcy5fc3RyZWFtLmRlc3Ryb3koZ2V0U3RyZWFtRXJyb3IodGhpcykpXG4gICAgY2IobnVsbClcbiAgfVxuXG4gIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGxldCBlcnJvciA9IG51bGxcblxuICAgIGxldCBwcm9taXNlUmVzb2x2ZSA9IG51bGxcbiAgICBsZXQgcHJvbWlzZVJlamVjdCA9IG51bGxcblxuICAgIGxldCBlbnRyeVN0cmVhbSA9IG51bGxcbiAgICBsZXQgZW50cnlDYWxsYmFjayA9IG51bGxcblxuICAgIGNvbnN0IGV4dHJhY3QgPSB0aGlzXG5cbiAgICB0aGlzLm9uKCdlbnRyeScsIG9uZW50cnkpXG4gICAgdGhpcy5vbignZXJyb3InLCAoZXJyKSA9PiB7IGVycm9yID0gZXJyIH0pXG4gICAgdGhpcy5vbignY2xvc2UnLCBvbmNsb3NlKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgfSxcbiAgICAgIG5leHQgKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2Uob25uZXh0KVxuICAgICAgfSxcbiAgICAgIHJldHVybiAoKSB7XG4gICAgICAgIHJldHVybiBkZXN0cm95KG51bGwpXG4gICAgICB9LFxuICAgICAgdGhyb3cgKGVycikge1xuICAgICAgICByZXR1cm4gZGVzdHJveShlcnIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uc3VtZUNhbGxiYWNrIChlcnIpIHtcbiAgICAgIGlmICghZW50cnlDYWxsYmFjaykgcmV0dXJuXG4gICAgICBjb25zdCBjYiA9IGVudHJ5Q2FsbGJhY2tcbiAgICAgIGVudHJ5Q2FsbGJhY2sgPSBudWxsXG4gICAgICBjYihlcnIpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25uZXh0IChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKVxuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnlTdHJlYW0pIHtcbiAgICAgICAgcmVzb2x2ZSh7IHZhbHVlOiBlbnRyeVN0cmVhbSwgZG9uZTogZmFsc2UgfSlcbiAgICAgICAgZW50cnlTdHJlYW0gPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBwcm9taXNlUmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIHByb21pc2VSZWplY3QgPSByZWplY3RcblxuICAgICAgY29uc3VtZUNhbGxiYWNrKG51bGwpXG5cbiAgICAgIGlmIChleHRyYWN0Ll9maW5pc2hlZCAmJiBwcm9taXNlUmVzb2x2ZSkge1xuICAgICAgICBwcm9taXNlUmVzb2x2ZSh7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSlcbiAgICAgICAgcHJvbWlzZVJlc29sdmUgPSBwcm9taXNlUmVqZWN0ID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uZW50cnkgKGhlYWRlciwgc3RyZWFtLCBjYWxsYmFjaykge1xuICAgICAgZW50cnlDYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgbm9vcCkgLy8gbm8gd2F5IGFyb3VuZCB0aGlzIGR1ZSB0byB0aWNrIHNpbGx5bmVzc1xuXG4gICAgICBpZiAocHJvbWlzZVJlc29sdmUpIHtcbiAgICAgICAgcHJvbWlzZVJlc29sdmUoeyB2YWx1ZTogc3RyZWFtLCBkb25lOiBmYWxzZSB9KVxuICAgICAgICBwcm9taXNlUmVzb2x2ZSA9IHByb21pc2VSZWplY3QgPSBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyeVN0cmVhbSA9IHN0cmVhbVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uY2xvc2UgKCkge1xuICAgICAgY29uc3VtZUNhbGxiYWNrKGVycm9yKVxuICAgICAgaWYgKCFwcm9taXNlUmVzb2x2ZSkgcmV0dXJuXG4gICAgICBpZiAoZXJyb3IpIHByb21pc2VSZWplY3QoZXJyb3IpXG4gICAgICBlbHNlIHByb21pc2VSZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgcHJvbWlzZVJlc29sdmUgPSBwcm9taXNlUmVqZWN0ID0gbnVsbFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3kgKGVycikge1xuICAgICAgZXh0cmFjdC5kZXN0cm95KGVycilcbiAgICAgIGNvbnN1bWVDYWxsYmFjayhlcnIpXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAoZXh0cmFjdC5kZXN0cm95ZWQpIHJldHVybiByZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICBleHRyYWN0Lm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpXG4gICAgICAgICAgZWxzZSByZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRyYWN0IChvcHRzKSB7XG4gIHJldHVybiBuZXcgRXh0cmFjdChvcHRzKVxufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIG92ZXJmbG93IChzaXplKSB7XG4gIHNpemUgJj0gNTExXG4gIHJldHVybiBzaXplICYmIDUxMiAtIHNpemVcbn1cbiIsCiAgICAiY29uc3QgY29uc3RhbnRzID0geyAvLyBqdXN0IGZvciBlbnZzIHdpdGhvdXQgZnNcbiAgU19JRk1UOiA2MTQ0MCxcbiAgU19JRkRJUjogMTYzODQsXG4gIFNfSUZDSFI6IDgxOTIsXG4gIFNfSUZCTEs6IDI0NTc2LFxuICBTX0lGSUZPOiA0MDk2LFxuICBTX0lGTE5LOiA0MDk2MFxufVxuXG50cnkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2ZzJykuY29uc3RhbnRzIHx8IGNvbnN0YW50c1xufSBjYXRjaCB7XG4gIG1vZHVsZS5leHBvcnRzID0gY29uc3RhbnRzXG59XG4iLAogICAgImNvbnN0IHsgUmVhZGFibGUsIFdyaXRhYmxlLCBnZXRTdHJlYW1FcnJvciB9ID0gcmVxdWlyZSgnc3RyZWFteCcpXG5jb25zdCBiNGEgPSByZXF1aXJlKCdiNGEnKVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCBoZWFkZXJzID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcblxuY29uc3QgRE1PREUgPSAwbzc1NVxuY29uc3QgRk1PREUgPSAwbzY0NFxuXG5jb25zdCBFTkRfT0ZfVEFSID0gYjRhLmFsbG9jKDEwMjQpXG5cbmNsYXNzIFNpbmsgZXh0ZW5kcyBXcml0YWJsZSB7XG4gIGNvbnN0cnVjdG9yIChwYWNrLCBoZWFkZXIsIGNhbGxiYWNrKSB7XG4gICAgc3VwZXIoeyBtYXBXcml0YWJsZSwgZWFnZXJPcGVuOiB0cnVlIH0pXG5cbiAgICB0aGlzLndyaXR0ZW4gPSAwXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcblxuICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLl9saW5rbmFtZSA9IG51bGxcbiAgICB0aGlzLl9pc0xpbmtuYW1lID0gaGVhZGVyLnR5cGUgPT09ICdzeW1saW5rJyAmJiAhaGVhZGVyLmxpbmtuYW1lXG4gICAgdGhpcy5faXNWb2lkID0gaGVhZGVyLnR5cGUgIT09ICdmaWxlJyAmJiBoZWFkZXIudHlwZSAhPT0gJ2NvbnRpZ3VvdXMtZmlsZSdcbiAgICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG4gICAgdGhpcy5fcGFjayA9IHBhY2tcbiAgICB0aGlzLl9vcGVuQ2FsbGJhY2sgPSBudWxsXG5cbiAgICBpZiAodGhpcy5fcGFjay5fc3RyZWFtID09PSBudWxsKSB0aGlzLl9wYWNrLl9zdHJlYW0gPSB0aGlzXG4gICAgZWxzZSB0aGlzLl9wYWNrLl9wZW5kaW5nLnB1c2godGhpcylcbiAgfVxuXG4gIF9vcGVuIChjYikge1xuICAgIHRoaXMuX29wZW5DYWxsYmFjayA9IGNiXG4gICAgaWYgKHRoaXMuX3BhY2suX3N0cmVhbSA9PT0gdGhpcykgdGhpcy5fY29udGludWVPcGVuKClcbiAgfVxuXG4gIF9jb250aW51ZVBhY2sgKGVycikge1xuICAgIGlmICh0aGlzLl9jYWxsYmFjayA9PT0gbnVsbCkgcmV0dXJuXG5cbiAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsXG5cbiAgICBjYWxsYmFjayhlcnIpXG4gIH1cblxuICBfY29udGludWVPcGVuICgpIHtcbiAgICBpZiAodGhpcy5fcGFjay5fc3RyZWFtID09PSBudWxsKSB0aGlzLl9wYWNrLl9zdHJlYW0gPSB0aGlzXG5cbiAgICBjb25zdCBjYiA9IHRoaXMuX29wZW5DYWxsYmFja1xuICAgIHRoaXMuX29wZW5DYWxsYmFjayA9IG51bGxcbiAgICBpZiAoY2IgPT09IG51bGwpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuX3BhY2suZGVzdHJveWluZykgcmV0dXJuIGNiKG5ldyBFcnJvcigncGFjayBzdHJlYW0gZGVzdHJveWVkJykpXG4gICAgaWYgKHRoaXMuX3BhY2suX2ZpbmFsaXplZCkgcmV0dXJuIGNiKG5ldyBFcnJvcigncGFjayBzdHJlYW0gaXMgYWxyZWFkeSBmaW5hbGl6ZWQnKSlcblxuICAgIHRoaXMuX3BhY2suX3N0cmVhbSA9IHRoaXNcblxuICAgIGlmICghdGhpcy5faXNMaW5rbmFtZSkge1xuICAgICAgdGhpcy5fcGFjay5fZW5jb2RlKHRoaXMuaGVhZGVyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1ZvaWQpIHtcbiAgICAgIHRoaXMuX2ZpbmlzaCgpXG4gICAgICB0aGlzLl9jb250aW51ZVBhY2sobnVsbClcbiAgICB9XG5cbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIGlmICh0aGlzLl9pc0xpbmtuYW1lKSB7XG4gICAgICB0aGlzLl9saW5rbmFtZSA9IHRoaXMuX2xpbmtuYW1lID8gYjRhLmNvbmNhdChbdGhpcy5fbGlua25hbWUsIGRhdGFdKSA6IGRhdGFcbiAgICAgIHJldHVybiBjYihudWxsKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1ZvaWQpIHtcbiAgICAgIGlmIChkYXRhLmJ5dGVMZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ05vIGJvZHkgYWxsb3dlZCBmb3IgdGhpcyBlbnRyeScpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNiKClcbiAgICB9XG5cbiAgICB0aGlzLndyaXR0ZW4gKz0gZGF0YS5ieXRlTGVuZ3RoXG4gICAgaWYgKHRoaXMuX3BhY2sucHVzaChkYXRhKSkgcmV0dXJuIGNiKClcbiAgICB0aGlzLl9wYWNrLl9kcmFpbiA9IGNiXG4gIH1cblxuICBfZmluaXNoICgpIHtcbiAgICBpZiAodGhpcy5fZmluaXNoZWQpIHJldHVyblxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMuX2lzTGlua25hbWUpIHtcbiAgICAgIHRoaXMuaGVhZGVyLmxpbmtuYW1lID0gdGhpcy5fbGlua25hbWUgPyBiNGEudG9TdHJpbmcodGhpcy5fbGlua25hbWUsICd1dGYtOCcpIDogJydcbiAgICAgIHRoaXMuX3BhY2suX2VuY29kZSh0aGlzLmhlYWRlcilcbiAgICB9XG5cbiAgICBvdmVyZmxvdyh0aGlzLl9wYWNrLCB0aGlzLmhlYWRlci5zaXplKVxuXG4gICAgdGhpcy5fcGFjay5fZG9uZSh0aGlzKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIGlmICh0aGlzLndyaXR0ZW4gIT09IHRoaXMuaGVhZGVyLnNpemUpIHsgLy8gY29ycnVwdGluZyB0YXJcbiAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ1NpemUgbWlzbWF0Y2gnKSlcbiAgICB9XG5cbiAgICB0aGlzLl9maW5pc2goKVxuICAgIGNiKG51bGwpXG4gIH1cblxuICBfZ2V0RXJyb3IgKCkge1xuICAgIHJldHVybiBnZXRTdHJlYW1FcnJvcih0aGlzKSB8fCBuZXcgRXJyb3IoJ3RhciBlbnRyeSBkZXN0cm95ZWQnKVxuICB9XG5cbiAgX3ByZWRlc3Ryb3kgKCkge1xuICAgIHRoaXMuX3BhY2suZGVzdHJveSh0aGlzLl9nZXRFcnJvcigpKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgdGhpcy5fcGFjay5fZG9uZSh0aGlzKVxuXG4gICAgdGhpcy5fY29udGludWVQYWNrKHRoaXMuX2ZpbmlzaGVkID8gbnVsbCA6IHRoaXMuX2dldEVycm9yKCkpXG5cbiAgICBjYigpXG4gIH1cbn1cblxuY2xhc3MgUGFjayBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuICAgIHRoaXMuX2RyYWluID0gbm9vcFxuICAgIHRoaXMuX2ZpbmFsaXplZCA9IGZhbHNlXG4gICAgdGhpcy5fZmluYWxpemluZyA9IGZhbHNlXG4gICAgdGhpcy5fcGVuZGluZyA9IFtdXG4gICAgdGhpcy5fc3RyZWFtID0gbnVsbFxuICB9XG5cbiAgZW50cnkgKGhlYWRlciwgYnVmZmVyLCBjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQgfHwgdGhpcy5kZXN0cm95aW5nKSB0aHJvdyBuZXcgRXJyb3IoJ2FscmVhZHkgZmluYWxpemVkIG9yIGRlc3Ryb3llZCcpXG5cbiAgICBpZiAodHlwZW9mIGJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBidWZmZXJcbiAgICAgIGJ1ZmZlciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IG5vb3BcblxuICAgIGlmICghaGVhZGVyLnNpemUgfHwgaGVhZGVyLnR5cGUgPT09ICdzeW1saW5rJykgaGVhZGVyLnNpemUgPSAwXG4gICAgaWYgKCFoZWFkZXIudHlwZSkgaGVhZGVyLnR5cGUgPSBtb2RlVG9UeXBlKGhlYWRlci5tb2RlKVxuICAgIGlmICghaGVhZGVyLm1vZGUpIGhlYWRlci5tb2RlID0gaGVhZGVyLnR5cGUgPT09ICdkaXJlY3RvcnknID8gRE1PREUgOiBGTU9ERVxuICAgIGlmICghaGVhZGVyLnVpZCkgaGVhZGVyLnVpZCA9IDBcbiAgICBpZiAoIWhlYWRlci5naWQpIGhlYWRlci5naWQgPSAwXG4gICAgaWYgKCFoZWFkZXIubXRpbWUpIGhlYWRlci5tdGltZSA9IG5ldyBEYXRlKClcblxuICAgIGlmICh0eXBlb2YgYnVmZmVyID09PSAnc3RyaW5nJykgYnVmZmVyID0gYjRhLmZyb20oYnVmZmVyKVxuXG4gICAgY29uc3Qgc2luayA9IG5ldyBTaW5rKHRoaXMsIGhlYWRlciwgY2FsbGJhY2spXG5cbiAgICBpZiAoYjRhLmlzQnVmZmVyKGJ1ZmZlcikpIHtcbiAgICAgIGhlYWRlci5zaXplID0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgIHNpbmsud3JpdGUoYnVmZmVyKVxuICAgICAgc2luay5lbmQoKVxuICAgICAgcmV0dXJuIHNpbmtcbiAgICB9XG5cbiAgICBpZiAoc2luay5faXNWb2lkKSB7XG4gICAgICByZXR1cm4gc2lua1xuICAgIH1cblxuICAgIHJldHVybiBzaW5rXG4gIH1cblxuICBmaW5hbGl6ZSAoKSB7XG4gICAgaWYgKHRoaXMuX3N0cmVhbSB8fCB0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2ZpbmFsaXppbmcgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZmluYWxpemVkKSByZXR1cm5cbiAgICB0aGlzLl9maW5hbGl6ZWQgPSB0cnVlXG5cbiAgICB0aGlzLnB1c2goRU5EX09GX1RBUilcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgfVxuXG4gIF9kb25lIChzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtICE9PSB0aGlzLl9zdHJlYW0pIHJldHVyblxuXG4gICAgdGhpcy5fc3RyZWFtID0gbnVsbFxuXG4gICAgaWYgKHRoaXMuX2ZpbmFsaXppbmcpIHRoaXMuZmluYWxpemUoKVxuICAgIGlmICh0aGlzLl9wZW5kaW5nLmxlbmd0aCkgdGhpcy5fcGVuZGluZy5zaGlmdCgpLl9jb250aW51ZU9wZW4oKVxuICB9XG5cbiAgX2VuY29kZSAoaGVhZGVyKSB7XG4gICAgaWYgKCFoZWFkZXIucGF4KSB7XG4gICAgICBjb25zdCBidWYgPSBoZWFkZXJzLmVuY29kZShoZWFkZXIpXG4gICAgICBpZiAoYnVmKSB7XG4gICAgICAgIHRoaXMucHVzaChidWYpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9lbmNvZGVQYXgoaGVhZGVyKVxuICB9XG5cbiAgX2VuY29kZVBheCAoaGVhZGVyKSB7XG4gICAgY29uc3QgcGF4SGVhZGVyID0gaGVhZGVycy5lbmNvZGVQYXgoe1xuICAgICAgbmFtZTogaGVhZGVyLm5hbWUsXG4gICAgICBsaW5rbmFtZTogaGVhZGVyLmxpbmtuYW1lLFxuICAgICAgcGF4OiBoZWFkZXIucGF4XG4gICAgfSlcblxuICAgIGNvbnN0IG5ld0hlYWRlciA9IHtcbiAgICAgIG5hbWU6ICdQYXhIZWFkZXInLFxuICAgICAgbW9kZTogaGVhZGVyLm1vZGUsXG4gICAgICB1aWQ6IGhlYWRlci51aWQsXG4gICAgICBnaWQ6IGhlYWRlci5naWQsXG4gICAgICBzaXplOiBwYXhIZWFkZXIuYnl0ZUxlbmd0aCxcbiAgICAgIG10aW1lOiBoZWFkZXIubXRpbWUsXG4gICAgICB0eXBlOiAncGF4LWhlYWRlcicsXG4gICAgICBsaW5rbmFtZTogaGVhZGVyLmxpbmtuYW1lICYmICdQYXhIZWFkZXInLFxuICAgICAgdW5hbWU6IGhlYWRlci51bmFtZSxcbiAgICAgIGduYW1lOiBoZWFkZXIuZ25hbWUsXG4gICAgICBkZXZtYWpvcjogaGVhZGVyLmRldm1ham9yLFxuICAgICAgZGV2bWlub3I6IGhlYWRlci5kZXZtaW5vclxuICAgIH1cblxuICAgIHRoaXMucHVzaChoZWFkZXJzLmVuY29kZShuZXdIZWFkZXIpKVxuICAgIHRoaXMucHVzaChwYXhIZWFkZXIpXG4gICAgb3ZlcmZsb3codGhpcywgcGF4SGVhZGVyLmJ5dGVMZW5ndGgpXG5cbiAgICBuZXdIZWFkZXIuc2l6ZSA9IGhlYWRlci5zaXplXG4gICAgbmV3SGVhZGVyLnR5cGUgPSBoZWFkZXIudHlwZVxuICAgIHRoaXMucHVzaChoZWFkZXJzLmVuY29kZShuZXdIZWFkZXIpKVxuICB9XG5cbiAgX2RvRHJhaW4gKCkge1xuICAgIGNvbnN0IGRyYWluID0gdGhpcy5fZHJhaW5cbiAgICB0aGlzLl9kcmFpbiA9IG5vb3BcbiAgICBkcmFpbigpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgY29uc3QgZXJyID0gZ2V0U3RyZWFtRXJyb3IodGhpcylcblxuICAgIGlmICh0aGlzLl9zdHJlYW0pIHRoaXMuX3N0cmVhbS5kZXN0cm95KGVycilcblxuICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fcGVuZGluZy5zaGlmdCgpXG4gICAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gICAgICBzdHJlYW0uX2NvbnRpbnVlT3BlbigpXG4gICAgfVxuXG4gICAgdGhpcy5fZG9EcmFpbigpXG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICB0aGlzLl9kb0RyYWluKClcbiAgICBjYigpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYWNrIChvcHRzKSB7XG4gIHJldHVybiBuZXcgUGFjayhvcHRzKVxufVxuXG5mdW5jdGlvbiBtb2RlVG9UeXBlIChtb2RlKSB7XG4gIHN3aXRjaCAobW9kZSAmIGNvbnN0YW50cy5TX0lGTVQpIHtcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGQkxLOiByZXR1cm4gJ2Jsb2NrLWRldmljZSdcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGQ0hSOiByZXR1cm4gJ2NoYXJhY3Rlci1kZXZpY2UnXG4gICAgY2FzZSBjb25zdGFudHMuU19JRkRJUjogcmV0dXJuICdkaXJlY3RvcnknXG4gICAgY2FzZSBjb25zdGFudHMuU19JRklGTzogcmV0dXJuICdmaWZvJ1xuICAgIGNhc2UgY29uc3RhbnRzLlNfSUZMTks6IHJldHVybiAnc3ltbGluaydcbiAgfVxuXG4gIHJldHVybiAnZmlsZSdcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuXG5mdW5jdGlvbiBvdmVyZmxvdyAoc2VsZiwgc2l6ZSkge1xuICBzaXplICY9IDUxMVxuICBpZiAoc2l6ZSkgc2VsZi5wdXNoKEVORF9PRl9UQVIuc3ViYXJyYXkoMCwgNTEyIC0gc2l6ZSkpXG59XG5cbmZ1bmN0aW9uIG1hcFdyaXRhYmxlIChidWYpIHtcbiAgcmV0dXJuIGI0YS5pc0J1ZmZlcihidWYpID8gYnVmIDogYjRhLmZyb20oYnVmKVxufVxuIiwKICAgICJleHBvcnRzLmV4dHJhY3QgPSByZXF1aXJlKCcuL2V4dHJhY3QnKVxuZXhwb3J0cy5wYWNrID0gcmVxdWlyZSgnLi9wYWNrJylcbiIsCiAgICAiLyoqXG4gKiBUQVIgRm9ybWF0IFBsdWdpblxuICpcbiAqIEBtb2R1bGUgcGx1Z2lucy90YXJcbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuXG52YXIgZW5naW5lID0gcmVxdWlyZSgndGFyLXN0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtUYXJPcHRpb25zfSBvcHRpb25zXG4gKi9cbnZhciBUYXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUYXIpKSB7XG4gICAgcmV0dXJuIG5ldyBUYXIob3B0aW9ucyk7XG4gIH1cblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gdXRpbC5kZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgZ3ppcDogZmFsc2VcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmd6aXBPcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMuZ3ppcE9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHRoaXMuc3VwcG9ydHMgPSB7XG4gICAgZGlyZWN0b3J5OiB0cnVlLFxuICAgIHN5bWxpbms6IHRydWVcbiAgfTtcblxuICB0aGlzLmVuZ2luZSA9IGVuZ2luZS5wYWNrKG9wdGlvbnMpO1xuICB0aGlzLmNvbXByZXNzb3IgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucy5nemlwKSB7XG4gICAgdGhpcy5jb21wcmVzc29yID0gemxpYi5jcmVhdGVHemlwKG9wdGlvbnMuZ3ppcE9wdGlvbnMpO1xuICAgIHRoaXMuY29tcHJlc3Nvci5vbignZXJyb3InLCB0aGlzLl9vbkNvbXByZXNzb3JFcnJvci5iaW5kKHRoaXMpKTtcbiAgfVxufTtcblxuLyoqXG4gKiBbX29uQ29tcHJlc3NvckVycm9yIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtFcnJvcn0gZXJyXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuVGFyLnByb3RvdHlwZS5fb25Db21wcmVzc29yRXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgdGhpcy5lbmdpbmUuZW1pdCgnZXJyb3InLCBlcnIpO1xufTtcblxuLyoqXG4gKiBbYXBwZW5kIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtKX0gc291cmNlXG4gKiBAcGFyYW0gIHtUYXJFbnRyeURhdGF9IGRhdGFcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cblRhci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZGF0YS5tdGltZSA9IGRhdGEuZGF0ZTtcblxuICBmdW5jdGlvbiBhcHBlbmQoZXJyLCBzb3VyY2VCdWZmZXIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZW5naW5lLmVudHJ5KGRhdGEsIHNvdXJjZUJ1ZmZlciwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ2J1ZmZlcicpIHtcbiAgICBhcHBlbmQobnVsbCwgc291cmNlKTtcbiAgfSBlbHNlIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdzdHJlYW0nICYmIGRhdGEuc3RhdHMpIHtcbiAgICBkYXRhLnNpemUgPSBkYXRhLnN0YXRzLnNpemU7XG5cbiAgICB2YXIgZW50cnkgPSBzZWxmLmVuZ2luZS5lbnRyeShkYXRhLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgfSk7XG5cbiAgICBzb3VyY2UucGlwZShlbnRyeSk7XG4gIH0gZWxzZSBpZiAoZGF0YS5zb3VyY2VUeXBlID09PSAnc3RyZWFtJykge1xuICAgIHV0aWwuY29sbGVjdFN0cmVhbShzb3VyY2UsIGFwcGVuZCk7XG4gIH1cbn07XG5cbi8qKlxuICogW2ZpbmFsaXplIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdm9pZFxuICovXG5UYXIucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZW5naW5lLmZpbmFsaXplKCk7XG59O1xuXG4vKipcbiAqIFtvbiBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblRhci5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLm9uLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xufTtcblxuLyoqXG4gKiBbcGlwZSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRlc3RpbmF0aW9uXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuVGFyLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIG9wdGlvbnMpIHtcbiAgaWYgKHRoaXMuY29tcHJlc3Nvcikge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5waXBlLmFwcGx5KHRoaXMuZW5naW5lLCBbdGhpcy5jb21wcmVzc29yXSkucGlwZShkZXN0aW5hdGlvbiwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLnBpcGUuYXBwbHkodGhpcy5lbmdpbmUsIGFyZ3VtZW50cyk7XG4gIH1cbn07XG5cbi8qKlxuICogW3VucGlwZSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblRhci5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmNvbXByZXNzb3IpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wcmVzc29yLnVucGlwZS5hcHBseSh0aGlzLmNvbXByZXNzb3IsIGFyZ3VtZW50cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLnVucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUYXI7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGFyT3B0aW9uc1xuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZ3ppcD1mYWxzZV0gQ29tcHJlc3MgdGhlIHRhciBhcmNoaXZlIHVzaW5nIGd6aXAuXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2d6aXBPcHRpb25zXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqIHRvIGNvbnRyb2wgY29tcHJlc3Npb24uXG4gKiBAcHJvcGVydHkgeyp9IFsqXSBTZWUgW3Rhci1zdHJlYW1de0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvdGFyLXN0cmVhbX0gZG9jdW1lbnRhdGlvbiBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGFyRW50cnlEYXRhXG4gKiBAZ2xvYmFsXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbmFtZSBTZXRzIHRoZSBlbnRyeSBuYW1lIGluY2x1ZGluZyBpbnRlcm5hbCBwYXRoLlxuICogQHByb3BlcnR5IHsoU3RyaW5nfERhdGUpfSBbZGF0ZT1OT1coKV0gU2V0cyB0aGUgZW50cnkgZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbbW9kZT1EOjA3NTUvRjowNjQ0XSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbcHJlZml4XSBTZXRzIGEgcGF0aCBwcmVmaXggZm9yIHRoZSBlbnRyeSBuYW1lLiBVc2VmdWxcbiAqIHdoZW4gd29ya2luZyB3aXRoIG1ldGhvZHMgbGlrZSBgZGlyZWN0b3J5YCBvciBgZ2xvYmAuXG4gKiBAcHJvcGVydHkge2ZzLlN0YXRzfSBbc3RhdHNdIFNldHMgdGhlIGZzIHN0YXQgZGF0YSBmb3IgdGhpcyBlbnRyeSBhbGxvd2luZ1xuICogZm9yIHJlZHVjdGlvbiBvZiBmcyBzdGF0IGNhbGxzIHdoZW4gc3RhdCBkYXRhIGlzIGFscmVhZHkga25vd24uXG4gKi9cblxuLyoqXG4gKiBUYXJTdHJlYW0gTW9kdWxlXG4gKiBAZXh0ZXJuYWwgVGFyU3RyZWFtXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL3Rhci1zdHJlYW19XG4gKi9cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyAoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdkZWZhdWx0JykgPyB4WydkZWZhdWx0J10gOiB4O1xufVxuXG5jb25zdCBDUkNfVEFCTEUgPSBuZXcgSW50MzJBcnJheShbXG4gIDAsXG4gIDE5OTY5NTk4OTQsXG4gIDM5OTM5MTk3ODgsXG4gIDI1Njc1MjQ3OTQsXG4gIDEyNDYzNDEzNyxcbiAgMTg4NjA1NzYxNSxcbiAgMzkxNTYyMTY4NSxcbiAgMjY1NzM5MjAzNSxcbiAgMjQ5MjY4Mjc0LFxuICAyMDQ0NTA4MzI0LFxuICAzNzcyMTE1MjMwLFxuICAyNTQ3MTc3ODY0LFxuICAxNjI5NDE5OTUsXG4gIDIxMjU1NjEwMjEsXG4gIDM4ODc2MDcwNDcsXG4gIDI0Mjg0NDQwNDksXG4gIDQ5ODUzNjU0OCxcbiAgMTc4OTkyNzY2NixcbiAgNDA4OTAxNjY0OCxcbiAgMjIyNzA2MTIxNCxcbiAgNDUwNTQ4ODYxLFxuICAxODQzMjU4NjAzLFxuICA0MTA3NTgwNzUzLFxuICAyMjExNjc3NjM5LFxuICAzMjU4ODM5OTAsXG4gIDE2ODQ3NzcxNTIsXG4gIDQyNTExMjIwNDIsXG4gIDIzMjE5MjY2MzYsXG4gIDMzNTYzMzQ4NyxcbiAgMTY2MTM2NTQ2NSxcbiAgNDE5NTMwMjc1NSxcbiAgMjM2NjExNTMxNyxcbiAgOTk3MDczMDk2LFxuICAxMjgxOTUzODg2LFxuICAzNTc5ODU1MzMyLFxuICAyNzI0Njg4MjQyLFxuICAxMDA2ODg4MTQ1LFxuICAxMjU4NjA3Njg3LFxuICAzNTI0MTAxNjI5LFxuICAyNzY4OTQyNDQzLFxuICA5MDEwOTc3MjIsXG4gIDExMTkwMDA2ODQsXG4gIDM2ODY1MTcyMDYsXG4gIDI4OTgwNjU3MjgsXG4gIDg1MzA0NDQ1MSxcbiAgMTE3MjI2NjEwMSxcbiAgMzcwNTAxNTc1OSxcbiAgMjg4MjYxNjY2NSxcbiAgNjUxNzY3OTgwLFxuICAxMzczNTAzNTQ2LFxuICAzMzY5NTU0MzA0LFxuICAzMjE4MTA0NTk4LFxuICA1NjU1MDcyNTMsXG4gIDE0NTQ2MjE3MzEsXG4gIDM0ODUxMTE3MDUsXG4gIDMwOTk0MzYzMDMsXG4gIDY3MTI2Njk3NCxcbiAgMTU5NDE5ODAyNCxcbiAgMzMyMjczMDkzMCxcbiAgMjk3MDM0NzgxMixcbiAgNzk1ODM1NTI3LFxuICAxNDgzMjMwMjI1LFxuICAzMjQ0MzY3Mjc1LFxuICAzMDYwMTQ5NTY1LFxuICAxOTk0MTQ2MTkyLFxuICAzMTE1ODUzNCxcbiAgMjU2MzkwNzc3MixcbiAgNDAyMzcxNzkzMCxcbiAgMTkwNzQ1OTQ2NSxcbiAgMTEyNjM3MjE1LFxuICAyNjgwMTUzMjUzLFxuICAzOTA0NDI3MDU5LFxuICAyMDEzNzc2MjkwLFxuICAyNTE3MjIwMzYsXG4gIDI1MTcyMTUzNzQsXG4gIDM3NzU4MzAwNDAsXG4gIDIxMzc2NTY3NjMsXG4gIDE0MTM3NjgxMyxcbiAgMjQzOTI3NzcxOSxcbiAgMzg2NTI3MTI5NyxcbiAgMTgwMjE5NTQ0NCxcbiAgNDc2ODY0ODY2LFxuICAyMjM4MDAxMzY4LFxuICA0MDY2NTA4ODc4LFxuICAxODEyMzcwOTI1LFxuICA0NTMwOTI3MzEsXG4gIDIxODE2MjUwMjUsXG4gIDQxMTE0NTEyMjMsXG4gIDE3MDYwODg5MDIsXG4gIDMxNDA0MjcwNCxcbiAgMjM0NDUzMjIwMixcbiAgNDI0MDAxNzUzMixcbiAgMTY1ODY1ODI3MSxcbiAgMzY2NjE5OTc3LFxuICAyMzYyNjcwMzIzLFxuICA0MjI0OTk0NDA1LFxuICAxMzAzNTM1OTYwLFxuICA5ODQ5NjE0ODYsXG4gIDI3NDcwMDcwOTIsXG4gIDM1NjkwMzc1MzgsXG4gIDEyNTYxNzA4MTcsXG4gIDEwMzc2MDQzMTEsXG4gIDI3NjUyMTA3MzMsXG4gIDM1NTQwNzk5OTUsXG4gIDExMzEwMTQ1MDYsXG4gIDg3OTY3OTk5NixcbiAgMjkwOTI0MzQ2MixcbiAgMzY2Mzc3MTg1NixcbiAgMTE0MTEyNDQ2NyxcbiAgODU1ODQyMjc3LFxuICAyODUyODAxNjMxLFxuICAzNzA4NjQ4NjQ5LFxuICAxMzQyNTMzOTQ4LFxuICA2NTQ0NTkzMDYsXG4gIDMxODgzOTYwNDgsXG4gIDMzNzMwMTUxNzQsXG4gIDE0NjY0Nzk5MDksXG4gIDU0NDE3OTYzNSxcbiAgMzExMDUyMzkxMyxcbiAgMzQ2MjUyMjAxNSxcbiAgMTU5MTY3MTA1NCxcbiAgNzAyMTM4Nzc2LFxuICAyOTY2NDYwNDUwLFxuICAzMzUyNzk5NDEyLFxuICAxNTA0OTE4ODA3LFxuICA3ODM1NTE4NzMsXG4gIDMwODI2NDA0NDMsXG4gIDMyMzM0NDI5ODksXG4gIDM5ODgyOTIzODQsXG4gIDI1OTYyNTQ2NDYsXG4gIDYyMzE3MDY4LFxuICAxOTU3ODEwODQyLFxuICAzOTM5ODQ1OTQ1LFxuICAyNjQ3ODE2MTExLFxuICA4MTQ3MDk5NyxcbiAgMTk0MzgwMzUyMyxcbiAgMzgxNDkxODkzMCxcbiAgMjQ4OTU5NjgwNCxcbiAgMjI1Mjc0NDMwLFxuICAyMDUzNzkwMzc2LFxuICAzODI2MTc1NzU1LFxuICAyNDY2OTA2MDEzLFxuICAxNjc4MTY3NDMsXG4gIDIwOTc2NTEzNzcsXG4gIDQwMjc1NTI1ODAsXG4gIDIyNjU0OTAzODYsXG4gIDUwMzQ0NDA3MixcbiAgMTc2MjA1MDgxNCxcbiAgNDE1MDQxNzI0NSxcbiAgMjE1NDEyOTM1NSxcbiAgNDI2NTIyMjI1LFxuICAxODUyNTA3ODc5LFxuICA0Mjc1MzEzNTI2LFxuICAyMzEyMzE3OTIwLFxuICAyODI3NTM2MjYsXG4gIDE3NDI1NTU4NTIsXG4gIDQxODk3MDgxNDMsXG4gIDIzOTQ4Nzc5NDUsXG4gIDM5NzkxNzc2MyxcbiAgMTYyMjE4MzYzNyxcbiAgMzYwNDM5MDg4OCxcbiAgMjcxNDg2NjU1OCxcbiAgOTUzNzI5NzMyLFxuICAxMzQwMDc2NjI2LFxuICAzNTE4NzE5OTg1LFxuICAyNzk3MzYwOTk5LFxuICAxMDY4ODI4MzgxLFxuICAxMjE5NjM4ODU5LFxuICAzNjI0NzQxODUwLFxuICAyOTM2Njc1MTQ4LFxuICA5MDYxODU0NjIsXG4gIDEwOTA4MTI1MTIsXG4gIDM3NDc2NzIwMDMsXG4gIDI4MjUzNzk2NjksXG4gIDgyOTMyOTEzNSxcbiAgMTE4MTMzNTE2MSxcbiAgMzQxMjE3NzgwNCxcbiAgMzE2MDgzNDg0MixcbiAgNjI4MDg1NDA4LFxuICAxMzgyNjA1MzY2LFxuICAzNDIzMzY5MTA5LFxuICAzMTM4MDc4NDY3LFxuICA1NzA1NjIyMzMsXG4gIDE0MjY0MDA4MTUsXG4gIDMzMTczMTY1NDIsXG4gIDI5OTg3MzM2MDgsXG4gIDczMzIzOTk1NCxcbiAgMTU1NTI2MTk1NixcbiAgMzI2ODkzNTU5MSxcbiAgMzA1MDM2MDYyNSxcbiAgNzUyNDU5NDAzLFxuICAxNTQxMzIwMjIxLFxuICAyNjA3MDcxOTIwLFxuICAzOTY1OTczMDMwLFxuICAxOTY5OTIyOTcyLFxuICA0MDczNTQ5OCxcbiAgMjYxNzgzNzIyNSxcbiAgMzk0MzU3NzE1MSxcbiAgMTkxMzA4Nzg3NyxcbiAgODM5MDgzNzEsXG4gIDI1MTIzNDE2MzQsXG4gIDM4MDM3NDA2OTIsXG4gIDIwNzUyMDg2MjIsXG4gIDIxMzI2MTExMixcbiAgMjQ2MzI3MjYwMyxcbiAgMzg1NTk5MDI4NSxcbiAgMjA5NDg1NDA3MSxcbiAgMTk4OTU4ODgxLFxuICAyMjYyMDI5MDEyLFxuICA0MDU3MjYwNjEwLFxuICAxNzU5MzU5OTkyLFxuICA1MzQ0MTQxOTAsXG4gIDIxNzY3MTg1NDEsXG4gIDQxMzkzMjkxMTUsXG4gIDE4NzM4MzYwMDEsXG4gIDQxNDY2NDU2NyxcbiAgMjI4MjI0ODkzNCxcbiAgNDI3OTIwMDM2OCxcbiAgMTcxMTY4NDU1NCxcbiAgMjg1MjgxMTE2LFxuICAyNDA1ODAxNzI3LFxuICA0MTY3MjE2NzQ1LFxuICAxNjM0NDY3Nzk1LFxuICAzNzYyMjk3MDEsXG4gIDI2ODUwNjc4OTYsXG4gIDM2MDgwMDc0MDYsXG4gIDEzMDg5MTg2MTIsXG4gIDk1NjU0MzkzOCxcbiAgMjgwODU1NTEwNSxcbiAgMzQ5NTk1ODI2MyxcbiAgMTIzMTYzNjMwMSxcbiAgMTA0NzQyNzAzNSxcbiAgMjkzMjk1OTgxOCxcbiAgMzY1NDcwMzgzNixcbiAgMTA4ODM1OTI3MCxcbiAgOTM2OTE4ZTMsXG4gIDI4NDc3MTQ4OTksXG4gIDM3MzY4Mzc4MjksXG4gIDEyMDI5MDA4NjMsXG4gIDgxNzIzMzg5NyxcbiAgMzE4MzM0MjEwOCxcbiAgMzQwMTIzNzEzMCxcbiAgMTQwNDI3NzU1MixcbiAgNjE1ODE4MTUwLFxuICAzMTM0MjA3NDkzLFxuICAzNDUzNDIxMjAzLFxuICAxNDIzODU3NDQ5LFxuICA2MDE0NTA0MzEsXG4gIDMwMDk4Mzc2MTQsXG4gIDMyOTQ3MTA0NTYsXG4gIDE1NjcxMDM3NDYsXG4gIDcxMTkyODcyNCxcbiAgMzAyMDY2ODQ3MSxcbiAgMzI3MjM4MDA2NSxcbiAgMTUxMDMzNDIzNSxcbiAgNzU1MTY3MTE3XG5dKTtcbmZ1bmN0aW9uIGVuc3VyZUJ1ZmZlcihpbnB1dCkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYyhpbnB1dCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnB1dCBtdXN0IGJlIGJ1ZmZlciwgbnVtYmVyLCBvciBzdHJpbmcsIHJlY2VpdmVkIFwiICsgdHlwZW9mIGlucHV0KTtcbiAgfVxufVxuZnVuY3Rpb24gYnVmZmVyaXplSW50KG51bSkge1xuICBjb25zdCB0bXAgPSBlbnN1cmVCdWZmZXIoNCk7XG4gIHRtcC53cml0ZUludDMyQkUobnVtLCAwKTtcbiAgcmV0dXJuIHRtcDtcbn1cbmZ1bmN0aW9uIF9jcmMzMihidWYsIHByZXZpb3VzKSB7XG4gIGJ1ZiA9IGVuc3VyZUJ1ZmZlcihidWYpO1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHByZXZpb3VzKSkge1xuICAgIHByZXZpb3VzID0gcHJldmlvdXMucmVhZFVJbnQzMkJFKDApO1xuICB9XG4gIGxldCBjcmMgPSB+fnByZXZpb3VzIF4gLTE7XG4gIGZvciAodmFyIG4gPSAwOyBuIDwgYnVmLmxlbmd0aDsgbisrKSB7XG4gICAgY3JjID0gQ1JDX1RBQkxFWyhjcmMgXiBidWZbbl0pICYgMjU1XSBeIGNyYyA+Pj4gODtcbiAgfVxuICByZXR1cm4gY3JjIF4gLTE7XG59XG5mdW5jdGlvbiBjcmMzMigpIHtcbiAgcmV0dXJuIGJ1ZmZlcml6ZUludChfY3JjMzIuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG59XG5jcmMzMi5zaWduZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufTtcbmNyYzMyLnVuc2lnbmVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBfY3JjMzIuYXBwbHkobnVsbCwgYXJndW1lbnRzKSA+Pj4gMDtcbn07XG52YXIgYnVmZmVyQ3JjMzIgPSBjcmMzMjtcblxuY29uc3QgaW5kZXggPSAvKkBfX1BVUkVfXyovZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoYnVmZmVyQ3JjMzIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGluZGV4O1xuIiwKICAgICIvKipcbiAqIEpTT04gRm9ybWF0IFBsdWdpblxuICpcbiAqIEBtb2R1bGUgcGx1Z2lucy9qc29uXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuVHJhbnNmb3JtO1xuXG52YXIgY3JjMzIgPSByZXF1aXJlKCdidWZmZXItY3JjMzInKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnYXJjaGl2ZXItdXRpbHMnKTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7KEpzb25PcHRpb25zfFRyYW5zZm9ybU9wdGlvbnMpfSBvcHRpb25zXG4gKi9cbnZhciBKc29uID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSnNvbikpIHtcbiAgICByZXR1cm4gbmV3IEpzb24ob3B0aW9ucyk7XG4gIH1cblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gdXRpbC5kZWZhdWx0cyhvcHRpb25zLCB7fSk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5zdXBwb3J0cyA9IHtcbiAgICBkaXJlY3Rvcnk6IHRydWUsXG4gICAgc3ltbGluazogdHJ1ZVxuICB9O1xuXG4gIHRoaXMuZmlsZXMgPSBbXTtcbn07XG5cbmluaGVyaXRzKEpzb24sIFRyYW5zZm9ybSk7XG5cbi8qKlxuICogW190cmFuc2Zvcm0gZGVzY3JpcHRpb25dXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0J1ZmZlcn0gICBjaHVua1xuICogQHBhcmFtICB7U3RyaW5nfSAgIGVuY29kaW5nXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4gdm9pZFxuICovXG5Kc29uLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayhudWxsLCBjaHVuayk7XG59O1xuXG4vKipcbiAqIFtfd3JpdGVTdHJpbmdpZmllZCBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkpzb24ucHJvdG90eXBlLl93cml0ZVN0cmluZ2lmaWVkID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaWxlU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5maWxlcyk7XG4gIHRoaXMud3JpdGUoZmlsZVN0cmluZyk7XG59O1xuXG4vKipcbiAqIFthcHBlbmQgZGVzY3JpcHRpb25dXG4gKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSAgIHNvdXJjZVxuICogQHBhcmFtICB7RW50cnlEYXRhfSAgIGRhdGFcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkpzb24ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHNvdXJjZSwgZGF0YSwgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGRhdGEuY3JjMzIgPSAwO1xuXG4gIGZ1bmN0aW9uIG9uZW5kKGVyciwgc291cmNlQnVmZmVyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLnNpemUgPSBzb3VyY2VCdWZmZXIubGVuZ3RoIHx8IDA7XG4gICAgZGF0YS5jcmMzMiA9IGNyYzMyLnVuc2lnbmVkKHNvdXJjZUJ1ZmZlcik7XG5cbiAgICBzZWxmLmZpbGVzLnB1c2goZGF0YSk7XG5cbiAgICBjYWxsYmFjayhudWxsLCBkYXRhKTtcbiAgfVxuXG4gIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdidWZmZXInKSB7XG4gICAgb25lbmQobnVsbCwgc291cmNlKTtcbiAgfSBlbHNlIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgdXRpbC5jb2xsZWN0U3RyZWFtKHNvdXJjZSwgb25lbmQpO1xuICB9XG59O1xuXG4vKipcbiAqIFtmaW5hbGl6ZSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuSnNvbi5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fd3JpdGVTdHJpbmdpZmllZCgpO1xuICB0aGlzLmVuZCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBKc29uO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEpzb25PcHRpb25zXG4gKiBAZ2xvYmFsXG4gKi9cbiIsCiAgICAiLyoqXG4gKiBBcmNoaXZlciBWZW5kaW5nXG4gKlxuICogQGlnbm9yZVxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFfVxuICogQGNvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIEFyY2hpdmVyID0gcmVxdWlyZSgnLi9saWIvY29yZScpO1xuXG52YXIgZm9ybWF0cyA9IHt9O1xuXG4vKipcbiAqIERpc3BlbnNlcyBhIG5ldyBBcmNoaXZlciBpbnN0YW5jZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSAge1N0cmluZ30gZm9ybWF0IFRoZSBhcmNoaXZlIGZvcm1hdCB0byB1c2UuXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgU2VlIFtBcmNoaXZlcl17QGxpbmsgQXJjaGl2ZXJ9XG4gKiBAcmV0dXJuIHtBcmNoaXZlcn1cbiAqL1xudmFyIHZlbmRpbmcgPSBmdW5jdGlvbihmb3JtYXQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHZlbmRpbmcuY3JlYXRlKGZvcm1hdCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQXJjaGl2ZXIgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBmb3JtYXQgVGhlIGFyY2hpdmUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBTZWUgW0FyY2hpdmVyXXtAbGluayBBcmNoaXZlcn1cbiAqIEByZXR1cm4ge0FyY2hpdmVyfVxuICovXG52ZW5kaW5nLmNyZWF0ZSA9IGZ1bmN0aW9uKGZvcm1hdCwgb3B0aW9ucykge1xuICBpZiAoZm9ybWF0c1tmb3JtYXRdKSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IEFyY2hpdmVyKGZvcm1hdCwgb3B0aW9ucyk7XG4gICAgaW5zdGFuY2Uuc2V0Rm9ybWF0KGZvcm1hdCk7XG4gICAgaW5zdGFuY2Uuc2V0TW9kdWxlKG5ldyBmb3JtYXRzW2Zvcm1hdF0ob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IG5vdCByZWdpc3RlcmVkJyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgZm9ybWF0IGZvciB1c2Ugd2l0aCBhcmNoaXZlci5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZvcm1hdCBUaGUgbmFtZSBvZiB0aGUgZm9ybWF0LlxuICogQHBhcmFtICB7RnVuY3Rpb259IG1vZHVsZSBUaGUgZnVuY3Rpb24gZm9yIGFyY2hpdmVyIHRvIGludGVyYWN0IHdpdGguXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xudmVuZGluZy5yZWdpc3RlckZvcm1hdCA9IGZ1bmN0aW9uKGZvcm1hdCwgbW9kdWxlKSB7XG4gIGlmIChmb3JtYXRzW2Zvcm1hdF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lzdGVyKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IGFscmVhZHkgcmVnaXN0ZXJlZCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lzdGVyKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IG1vZHVsZSBpbnZhbGlkJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZHVsZS5wcm90b3R5cGUuYXBwZW5kICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBtb2R1bGUucHJvdG90eXBlLmZpbmFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWdpc3RlcignICsgZm9ybWF0ICsgJyk6IGZvcm1hdCBtb2R1bGUgbWlzc2luZyBtZXRob2RzJyk7XG4gIH1cblxuICBmb3JtYXRzW2Zvcm1hdF0gPSBtb2R1bGU7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLlxuICogXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IHRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuXG4gKiBAcmV0dXJuIGJvb2xlYW5cbiAqL1xudmVuZGluZy5pc1JlZ2lzdGVyZWRGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gIGlmIChmb3JtYXRzW2Zvcm1hdF0pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxudmVuZGluZy5yZWdpc3RlckZvcm1hdCgnemlwJywgcmVxdWlyZSgnLi9saWIvcGx1Z2lucy96aXAnKSk7XG52ZW5kaW5nLnJlZ2lzdGVyRm9ybWF0KCd0YXInLCByZXF1aXJlKCcuL2xpYi9wbHVnaW5zL3RhcicpKTtcbnZlbmRpbmcucmVnaXN0ZXJGb3JtYXQoJ2pzb24nLCByZXF1aXJlKCcuL2xpYi9wbHVnaW5zL2pzb24nKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gdmVuZGluZzsiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlWmlwVXBsb2FkU3RyZWFtID0gZXhwb3J0cy5aaXBVcGxvYWRTdHJlYW0gPSBleHBvcnRzLkRFRkFVTFRfQ09NUFJFU1NJT05fTEVWRUwgPSB2b2lkIDA7XG5jb25zdCBzdHJlYW0gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInN0cmVhbVwiKSk7XG5jb25zdCBwcm9taXNlc18xID0gcmVxdWlyZShcImZzL3Byb21pc2VzXCIpO1xuY29uc3QgYXJjaGl2ZXIgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImFyY2hpdmVyXCIpKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2NvbmZpZ1wiKTtcbmV4cG9ydHMuREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCA9IDY7XG4vLyBDdXN0b20gc3RyZWFtIHRyYW5zZm9ybWVyIHNvIHdlIGNhbiBzZXQgdGhlIGhpZ2hXYXRlck1hcmsgcHJvcGVydHlcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzg4NTVcbmNsYXNzIFppcFVwbG9hZFN0cmVhbSBleHRlbmRzIHN0cmVhbS5UcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKGJ1ZmZlclNpemUpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgaGlnaFdhdGVyTWFyazogYnVmZmVyU2l6ZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBfdHJhbnNmb3JtKGNodW5rLCBlbmMsIGNiKSB7XG4gICAgICAgIGNiKG51bGwsIGNodW5rKTtcbiAgICB9XG59XG5leHBvcnRzLlppcFVwbG9hZFN0cmVhbSA9IFppcFVwbG9hZFN0cmVhbTtcbmZ1bmN0aW9uIGNyZWF0ZVppcFVwbG9hZFN0cmVhbSh1cGxvYWRTcGVjaWZpY2F0aW9uLCBjb21wcmVzc2lvbkxldmVsID0gZXhwb3J0cy5ERUZBVUxUX0NPTVBSRVNTSU9OX0xFVkVMKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29yZS5kZWJ1ZyhgQ3JlYXRpbmcgQXJ0aWZhY3QgYXJjaGl2ZSB3aXRoIGNvbXByZXNzaW9uTGV2ZWw6ICR7Y29tcHJlc3Npb25MZXZlbH1gKTtcbiAgICAgICAgY29uc3QgemlwID0gYXJjaGl2ZXIuY3JlYXRlKCd6aXAnLCB7XG4gICAgICAgICAgICBoaWdoV2F0ZXJNYXJrOiAoMCwgY29uZmlnXzEuZ2V0VXBsb2FkQ2h1bmtTaXplKSgpLFxuICAgICAgICAgICAgemxpYjogeyBsZXZlbDogY29tcHJlc3Npb25MZXZlbCB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyByZWdpc3RlciBjYWxsYmFja3MgZm9yIHZhcmlvdXMgZXZlbnRzIGR1cmluZyB0aGUgemlwIGxpZmVjeWNsZVxuICAgICAgICB6aXAub24oJ2Vycm9yJywgemlwRXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHppcC5vbignd2FybmluZycsIHppcFdhcm5pbmdDYWxsYmFjayk7XG4gICAgICAgIHppcC5vbignZmluaXNoJywgemlwRmluaXNoQ2FsbGJhY2spO1xuICAgICAgICB6aXAub24oJ2VuZCcsIHppcEVuZENhbGxiYWNrKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHVwbG9hZFNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChmaWxlLnNvdXJjZVBhdGggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBzeW1saW5rIGFuZCByZXNvbHZlIHRoZSBzb3VyY2UgcGF0aFxuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VQYXRoID0gZmlsZS5zb3VyY2VQYXRoO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLnN0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aCA9IHlpZWxkICgwLCBwcm9taXNlc18xLnJlYWxwYXRoKShmaWxlLnNvdXJjZVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGZpbGUgdG8gdGhlIHppcFxuICAgICAgICAgICAgICAgIHppcC5maWxlKHNvdXJjZVBhdGgsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5kZXN0aW5hdGlvblBhdGhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBhIGRpcmVjdG9yeSB0byB0aGUgemlwXG4gICAgICAgICAgICAgICAgemlwLmFwcGVuZCgnJywgeyBuYW1lOiBmaWxlLmRlc3RpbmF0aW9uUGF0aCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXJTaXplID0gKDAsIGNvbmZpZ18xLmdldFVwbG9hZENodW5rU2l6ZSkoKTtcbiAgICAgICAgY29uc3QgemlwVXBsb2FkU3RyZWFtID0gbmV3IFppcFVwbG9hZFN0cmVhbShidWZmZXJTaXplKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgWmlwIHdyaXRlIGhpZ2ggd2F0ZXJtYXJrIHZhbHVlICR7emlwVXBsb2FkU3RyZWFtLndyaXRhYmxlSGlnaFdhdGVyTWFya31gKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgWmlwIHJlYWQgaGlnaCB3YXRlcm1hcmsgdmFsdWUgJHt6aXBVcGxvYWRTdHJlYW0ucmVhZGFibGVIaWdoV2F0ZXJNYXJrfWApO1xuICAgICAgICB6aXAucGlwZSh6aXBVcGxvYWRTdHJlYW0pO1xuICAgICAgICB6aXAuZmluYWxpemUoKTtcbiAgICAgICAgcmV0dXJuIHppcFVwbG9hZFN0cmVhbTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlWmlwVXBsb2FkU3RyZWFtID0gY3JlYXRlWmlwVXBsb2FkU3RyZWFtO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IHppcEVycm9yQ2FsbGJhY2sgPSAoZXJyb3IpID0+IHtcbiAgICBjb3JlLmVycm9yKCdBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHppcCBmaWxlIGZvciB1cGxvYWQnKTtcbiAgICBjb3JlLmluZm8oZXJyb3IpO1xuICAgIHRocm93IG5ldyBFcnJvcignQW4gZXJyb3IgaGFzIG9jY3VycmVkIGR1cmluZyB6aXAgY3JlYXRpb24gZm9yIHRoZSBhcnRpZmFjdCcpO1xufTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jb25zdCB6aXBXYXJuaW5nQ2FsbGJhY2sgPSAoZXJyb3IpID0+IHtcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgY29yZS53YXJuaW5nKCdFTk9FTlQgd2FybmluZyBkdXJpbmcgYXJ0aWZhY3QgemlwIGNyZWF0aW9uLiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Jyk7XG4gICAgICAgIGNvcmUuaW5mbyhlcnJvcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb3JlLndhcm5pbmcoYEEgbm9uLWJsb2NraW5nIHdhcm5pbmcgaGFzIG9jY3VycmVkIGR1cmluZyBhcnRpZmFjdCB6aXAgY3JlYXRpb246ICR7ZXJyb3IuY29kZX1gKTtcbiAgICAgICAgY29yZS5pbmZvKGVycm9yKTtcbiAgICB9XG59O1xuY29uc3QgemlwRmluaXNoQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgY29yZS5kZWJ1ZygnWmlwIHN0cmVhbSBmb3IgdXBsb2FkIGhhcyBmaW5pc2hlZC4nKTtcbn07XG5jb25zdCB6aXBFbmRDYWxsYmFjayA9ICgpID0+IHtcbiAgICBjb3JlLmRlYnVnKCdaaXAgc3RyZWFtIGZvciB1cGxvYWQgaGFzIGVuZGVkLicpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXBsb2FkQXJ0aWZhY3QgPSB2b2lkIDA7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmNvbnN0IHJldGVudGlvbl8xID0gcmVxdWlyZShcIi4vcmV0ZW50aW9uXCIpO1xuY29uc3QgcGF0aF9hbmRfYXJ0aWZhY3RfbmFtZV92YWxpZGF0aW9uXzEgPSByZXF1aXJlKFwiLi9wYXRoLWFuZC1hcnRpZmFjdC1uYW1lLXZhbGlkYXRpb25cIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgdXBsb2FkX3ppcF9zcGVjaWZpY2F0aW9uXzEgPSByZXF1aXJlKFwiLi91cGxvYWQtemlwLXNwZWNpZmljYXRpb25cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3V0aWxcIik7XG5jb25zdCBibG9iX3VwbG9hZF8xID0gcmVxdWlyZShcIi4vYmxvYi11cGxvYWRcIik7XG5jb25zdCB6aXBfMSA9IHJlcXVpcmUoXCIuL3ppcFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5mdW5jdGlvbiB1cGxvYWRBcnRpZmFjdChuYW1lLCBmaWxlcywgcm9vdERpcmVjdG9yeSwgb3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICgwLCBwYXRoX2FuZF9hcnRpZmFjdF9uYW1lX3ZhbGlkYXRpb25fMS52YWxpZGF0ZUFydGlmYWN0TmFtZSkobmFtZSk7XG4gICAgICAgICgwLCB1cGxvYWRfemlwX3NwZWNpZmljYXRpb25fMS52YWxpZGF0ZVJvb3REaXJlY3RvcnkpKHJvb3REaXJlY3RvcnkpO1xuICAgICAgICBjb25zdCB6aXBTcGVjaWZpY2F0aW9uID0gKDAsIHVwbG9hZF96aXBfc3BlY2lmaWNhdGlvbl8xLmdldFVwbG9hZFppcFNwZWNpZmljYXRpb24pKGZpbGVzLCByb290RGlyZWN0b3J5KTtcbiAgICAgICAgaWYgKHppcFNwZWNpZmljYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuRmlsZXNOb3RGb3VuZEVycm9yKHppcFNwZWNpZmljYXRpb24uZmxhdE1hcChzID0+IChzLnNvdXJjZVBhdGggPyBbcy5zb3VyY2VQYXRoXSA6IFtdKSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCB0aGUgSURzIG5lZWRlZCBmb3IgdGhlIGFydGlmYWN0IGNyZWF0aW9uXG4gICAgICAgIGNvbnN0IGJhY2tlbmRJZHMgPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIC8vIGNyZWF0ZSB0aGUgYXJ0aWZhY3QgY2xpZW50XG4gICAgICAgIGNvbnN0IGFydGlmYWN0Q2xpZW50ID0gKDAsIGFydGlmYWN0X3R3aXJwX2NsaWVudF8xLmludGVybmFsQXJ0aWZhY3RUd2lycENsaWVudCkoKTtcbiAgICAgICAgLy8gY3JlYXRlIHRoZSBhcnRpZmFjdFxuICAgICAgICBjb25zdCBjcmVhdGVBcnRpZmFjdFJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkOiBiYWNrZW5kSWRzLndvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IGJhY2tlbmRJZHMud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmVyc2lvbjogNFxuICAgICAgICB9O1xuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHJldGVudGlvbiBwZXJpb2QsIGFkZCBpdCB0byB0aGUgcmVxdWVzdFxuICAgICAgICBjb25zdCBleHBpcmVzQXQgPSAoMCwgcmV0ZW50aW9uXzEuZ2V0RXhwaXJhdGlvbikob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJldGVudGlvbkRheXMpO1xuICAgICAgICBpZiAoZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICBjcmVhdGVBcnRpZmFjdFJlcS5leHBpcmVzQXQgPSBleHBpcmVzQXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlQXJ0aWZhY3RSZXNwID0geWllbGQgYXJ0aWZhY3RDbGllbnQuQ3JlYXRlQXJ0aWZhY3QoY3JlYXRlQXJ0aWZhY3RSZXEpO1xuICAgICAgICBpZiAoIWNyZWF0ZUFydGlmYWN0UmVzcC5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkludmFsaWRSZXNwb25zZUVycm9yKCdDcmVhdGVBcnRpZmFjdDogcmVzcG9uc2UgZnJvbSBiYWNrZW5kIHdhcyBub3Qgb2snKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB6aXBVcGxvYWRTdHJlYW0gPSB5aWVsZCAoMCwgemlwXzEuY3JlYXRlWmlwVXBsb2FkU3RyZWFtKSh6aXBTcGVjaWZpY2F0aW9uLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29tcHJlc3Npb25MZXZlbCk7XG4gICAgICAgIC8vIFVwbG9hZCB6aXAgdG8gYmxvYiBzdG9yYWdlXG4gICAgICAgIGNvbnN0IHVwbG9hZFJlc3VsdCA9IHlpZWxkICgwLCBibG9iX3VwbG9hZF8xLnVwbG9hZFppcFRvQmxvYlN0b3JhZ2UpKGNyZWF0ZUFydGlmYWN0UmVzcC5zaWduZWRVcGxvYWRVcmwsIHppcFVwbG9hZFN0cmVhbSk7XG4gICAgICAgIC8vIGZpbmFsaXplIHRoZSBhcnRpZmFjdFxuICAgICAgICBjb25zdCBmaW5hbGl6ZUFydGlmYWN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGJhY2tlbmRJZHMud29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogYmFja2VuZElkcy53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzaXplOiB1cGxvYWRSZXN1bHQudXBsb2FkU2l6ZSA/IHVwbG9hZFJlc3VsdC51cGxvYWRTaXplLnRvU3RyaW5nKCkgOiAnMCdcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHVwbG9hZFJlc3VsdC5zaGEyNTZIYXNoKSB7XG4gICAgICAgICAgICBmaW5hbGl6ZUFydGlmYWN0UmVxLmhhc2ggPSBnZW5lcmF0ZWRfMS5TdHJpbmdWYWx1ZS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBgc2hhMjU2OiR7dXBsb2FkUmVzdWx0LnNoYTI1Nkhhc2h9YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29yZS5pbmZvKGBGaW5hbGl6aW5nIGFydGlmYWN0IHVwbG9hZGApO1xuICAgICAgICBjb25zdCBmaW5hbGl6ZUFydGlmYWN0UmVzcCA9IHlpZWxkIGFydGlmYWN0Q2xpZW50LkZpbmFsaXplQXJ0aWZhY3QoZmluYWxpemVBcnRpZmFjdFJlcSk7XG4gICAgICAgIGlmICghZmluYWxpemVBcnRpZmFjdFJlc3Aub2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5JbnZhbGlkUmVzcG9uc2VFcnJvcignRmluYWxpemVBcnRpZmFjdDogcmVzcG9uc2UgZnJvbSBiYWNrZW5kIHdhcyBub3Qgb2snKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcnRpZmFjdElkID0gQmlnSW50KGZpbmFsaXplQXJ0aWZhY3RSZXNwLmFydGlmYWN0SWQpO1xuICAgICAgICBjb3JlLmluZm8oYEFydGlmYWN0ICR7bmFtZX0uemlwIHN1Y2Nlc3NmdWxseSBmaW5hbGl6ZWQuIEFydGlmYWN0IElEICR7YXJ0aWZhY3RJZH1gKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IHVwbG9hZFJlc3VsdC51cGxvYWRTaXplLFxuICAgICAgICAgICAgaWQ6IE51bWJlcihhcnRpZmFjdElkKVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy51cGxvYWRBcnRpZmFjdCA9IHVwbG9hZEFydGlmYWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXBsb2FkLWFydGlmYWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3Qgb3NfMSA9IHJlcXVpcmUoXCJvc1wiKTtcbmNsYXNzIENvbnRleHQge1xuICAgIC8qKlxuICAgICAqIEh5ZHJhdGUgdGhlIGNvbnRleHQgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpIHtcbiAgICAgICAgICAgIGlmIChmc18xLmV4aXN0c1N5bmMocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXlsb2FkID0gSlNPTi5wYXJzZShmc18xLnJlYWRGaWxlU3luYyhwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSDtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgR0lUSFVCX0VWRU5UX1BBVEggJHtwYXRofSBkb2VzIG5vdCBleGlzdCR7b3NfMS5FT0x9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudE5hbWUgPSBwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfTkFNRTtcbiAgICAgICAgdGhpcy5zaGEgPSBwcm9jZXNzLmVudi5HSVRIVUJfU0hBO1xuICAgICAgICB0aGlzLnJlZiA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRUY7XG4gICAgICAgIHRoaXMud29ya2Zsb3cgPSBwcm9jZXNzLmVudi5HSVRIVUJfV09SS0ZMT1c7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVElPTjtcbiAgICAgICAgdGhpcy5hY3RvciA9IHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RPUjtcbiAgICAgICAgdGhpcy5qb2IgPSBwcm9jZXNzLmVudi5HSVRIVUJfSk9CO1xuICAgICAgICB0aGlzLnJ1bk51bWJlciA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fTlVNQkVSLCAxMCk7XG4gICAgICAgIHRoaXMucnVuSWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5HSVRIVUJfUlVOX0lELCAxMCk7XG4gICAgICAgIHRoaXMuYXBpVXJsID0gKF9hID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FQSV9VUkwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGBodHRwczovL2FwaS5naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5zZXJ2ZXJVcmwgPSAoX2IgPSBwcm9jZXNzLmVudi5HSVRIVUJfU0VSVkVSX1VSTCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogYGh0dHBzOi8vZ2l0aHViLmNvbWA7XG4gICAgICAgIHRoaXMuZ3JhcGhxbFVybCA9IChfYyA9IHByb2Nlc3MuZW52LkdJVEhVQl9HUkFQSFFMX1VSTCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbGA7XG4gICAgfVxuICAgIGdldCBpc3N1ZSgpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXBvKSwgeyBudW1iZXI6IChwYXlsb2FkLmlzc3VlIHx8IHBheWxvYWQucHVsbF9yZXF1ZXN0IHx8IHBheWxvYWQpLm51bWJlciB9KTtcbiAgICB9XG4gICAgZ2V0IHJlcG8oKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWSkge1xuICAgICAgICAgICAgY29uc3QgW293bmVyLCByZXBvXSA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBheWxvYWQucmVwb3NpdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkub3duZXIubG9naW4sXG4gICAgICAgICAgICAgICAgcmVwbzogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb250ZXh0LnJlcG8gcmVxdWlyZXMgYSBHSVRIVUJfUkVQT1NJVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBsaWtlICdvd25lci9yZXBvJ1wiKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbnRleHQgPSBDb250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXBpQmFzZVVybCA9IGV4cG9ydHMuZ2V0UHJveHlBZ2VudCA9IGV4cG9ydHMuZ2V0QXV0aFN0cmluZyA9IHZvaWQgMDtcbmNvbnN0IGh0dHBDbGllbnQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpKTtcbmZ1bmN0aW9uIGdldEF1dGhTdHJpbmcodG9rZW4sIG9wdGlvbnMpIHtcbiAgICBpZiAoIXRva2VuICYmICFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgdG9rZW4gb3Igb3B0cy5hdXRoIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRva2VuICYmIG9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgdG9rZW4gYW5kIG9wdHMuYXV0aCBtYXkgbm90IGJvdGggYmUgc3BlY2lmaWVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2Ygb3B0aW9ucy5hdXRoID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuYXV0aCA6IGB0b2tlbiAke3Rva2VufWA7XG59XG5leHBvcnRzLmdldEF1dGhTdHJpbmcgPSBnZXRBdXRoU3RyaW5nO1xuZnVuY3Rpb24gZ2V0UHJveHlBZ2VudChkZXN0aW5hdGlvblVybCkge1xuICAgIGNvbnN0IGhjID0gbmV3IGh0dHBDbGllbnQuSHR0cENsaWVudCgpO1xuICAgIHJldHVybiBoYy5nZXRBZ2VudChkZXN0aW5hdGlvblVybCk7XG59XG5leHBvcnRzLmdldFByb3h5QWdlbnQgPSBnZXRQcm94eUFnZW50O1xuZnVuY3Rpb24gZ2V0QXBpQmFzZVVybCgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9BUElfVVJMJ10gfHwgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nO1xufVxuZXhwb3J0cy5nZXRBcGlCYXNlVXJsID0gZ2V0QXBpQmFzZVVybDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBnZXRVc2VyQWdlbnQoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcIm9iamVjdFwiICYmIFwidXNlckFnZW50XCIgaW4gbmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYE5vZGUuanMvJHtwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDEpfSAoJHtwcm9jZXNzLnBsYXRmb3JtfTsgJHtwcm9jZXNzLmFyY2h9KWA7XG4gIH1cblxuICByZXR1cm4gXCI8ZW52aXJvbm1lbnQgdW5kZXRlY3RhYmxlPlwiO1xufVxuXG5leHBvcnRzLmdldFVzZXJBZ2VudCA9IGdldFVzZXJBZ2VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IHJlZ2lzdGVyO1xuXG5mdW5jdGlvbiByZWdpc3RlcihzdGF0ZSwgbmFtZSwgbWV0aG9kLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgZm9yIGJlZm9yZSBob29rIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmV2ZXJzZSgpLnJlZHVjZShmdW5jdGlvbiAoY2FsbGJhY2ssIG5hbWUpIHtcbiAgICAgIHJldHVybiByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlLCBuYW1lLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICAgIHJldHVybiBtZXRob2Qob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnJlZHVjZShmdW5jdGlvbiAobWV0aG9kLCByZWdpc3RlcmVkKSB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5ob29rLmJpbmQobnVsbCwgbWV0aG9kLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH0pO1xufVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IGFkZEhvb2s7XG5cbmZ1bmN0aW9uIGFkZEhvb2soc3RhdGUsIGtpbmQsIG5hbWUsIGhvb2spIHtcbiAgdmFyIG9yaWcgPSBob29rO1xuICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgc3RhdGUucmVnaXN0cnlbbmFtZV0gPSBbXTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImJlZm9yZVwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihvcmlnLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYWZ0ZXJcIikge1xuICAgIGhvb2sgPSBmdW5jdGlvbiAobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0Xykge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF87XG4gICAgICAgICAgcmV0dXJuIG9yaWcocmVzdWx0LCBvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBvcmlnKGVycm9yLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnB1c2goe1xuICAgIGhvb2s6IGhvb2ssXG4gICAgb3JpZzogb3JpZyxcbiAgfSk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVtb3ZlSG9vaztcblxuZnVuY3Rpb24gcmVtb3ZlSG9vayhzdGF0ZSwgbmFtZSwgbWV0aG9kKSB7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaW5kZXggPSBzdGF0ZS5yZWdpc3RyeVtuYW1lXVxuICAgIC5tYXAoZnVuY3Rpb24gKHJlZ2lzdGVyZWQpIHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLm9yaWc7XG4gICAgfSlcbiAgICAuaW5kZXhPZihtZXRob2QpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xufVxuIiwKICAgICJ2YXIgcmVnaXN0ZXIgPSByZXF1aXJlKFwiLi9saWIvcmVnaXN0ZXJcIik7XG52YXIgYWRkSG9vayA9IHJlcXVpcmUoXCIuL2xpYi9hZGRcIik7XG52YXIgcmVtb3ZlSG9vayA9IHJlcXVpcmUoXCIuL2xpYi9yZW1vdmVcIik7XG5cbi8vIGJpbmQgd2l0aCBhcnJheSBvZiBhcmd1bWVudHM6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTc5MjkxM1xudmFyIGJpbmQgPSBGdW5jdGlvbi5iaW5kO1xudmFyIGJpbmRhYmxlID0gYmluZC5iaW5kKGJpbmQpO1xuXG5mdW5jdGlvbiBiaW5kQXBpKGhvb2ssIHN0YXRlLCBuYW1lKSB7XG4gIHZhciByZW1vdmVIb29rUmVmID0gYmluZGFibGUocmVtb3ZlSG9vaywgbnVsbCkuYXBwbHkoXG4gICAgbnVsbCxcbiAgICBuYW1lID8gW3N0YXRlLCBuYW1lXSA6IFtzdGF0ZV1cbiAgKTtcbiAgaG9vay5hcGkgPSB7IHJlbW92ZTogcmVtb3ZlSG9va1JlZiB9O1xuICBob29rLnJlbW92ZSA9IHJlbW92ZUhvb2tSZWY7XG4gIFtcImJlZm9yZVwiLCBcImVycm9yXCIsIFwiYWZ0ZXJcIiwgXCJ3cmFwXCJdLmZvckVhY2goZnVuY3Rpb24gKGtpbmQpIHtcbiAgICB2YXIgYXJncyA9IG5hbWUgPyBbc3RhdGUsIGtpbmQsIG5hbWVdIDogW3N0YXRlLCBraW5kXTtcbiAgICBob29rW2tpbmRdID0gaG9vay5hcGlba2luZF0gPSBiaW5kYWJsZShhZGRIb29rLCBudWxsKS5hcHBseShudWxsLCBhcmdzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEhvb2tTaW5ndWxhcigpIHtcbiAgdmFyIHNpbmd1bGFySG9va05hbWUgPSBcImhcIjtcbiAgdmFyIHNpbmd1bGFySG9va1N0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcbiAgdmFyIHNpbmd1bGFySG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICBiaW5kQXBpKHNpbmd1bGFySG9vaywgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICByZXR1cm4gc2luZ3VsYXJIb29rO1xufVxuXG5mdW5jdGlvbiBIb29rQ29sbGVjdGlvbigpIHtcbiAgdmFyIHN0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcblxuICB2YXIgaG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUpO1xuICBiaW5kQXBpKGhvb2ssIHN0YXRlKTtcblxuICByZXR1cm4gaG9vaztcbn1cblxudmFyIGNvbGxlY3Rpb25Ib29rRGVwcmVjYXRpb25NZXNzYWdlRGlzcGxheWVkID0gZmFsc2U7XG5mdW5jdGlvbiBIb29rKCkge1xuICBpZiAoIWNvbGxlY3Rpb25Ib29rRGVwcmVjYXRpb25NZXNzYWdlRGlzcGxheWVkKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1tiZWZvcmUtYWZ0ZXItaG9va106IFwiSG9vaygpXCIgcmVwdXJwb3Npbmcgd2FybmluZywgdXNlIFwiSG9vay5Db2xsZWN0aW9uKClcIi4gUmVhZCBtb3JlOiBodHRwczovL2dpdC5pby91cGdyYWRlLWJlZm9yZS1hZnRlci1ob29rLXRvLTEuNCdcbiAgICApO1xuICAgIGNvbGxlY3Rpb25Ib29rRGVwcmVjYXRpb25NZXNzYWdlRGlzcGxheWVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gSG9va0NvbGxlY3Rpb24oKTtcbn1cblxuSG9vay5TaW5ndWxhciA9IEhvb2tTaW5ndWxhci5iaW5kKCk7XG5Ib29rLkNvbGxlY3Rpb24gPSBIb29rQ29sbGVjdGlvbi5iaW5kKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gSG9vaztcbi8vIGV4cG9zZSBjb25zdHJ1Y3RvcnMgYXMgYSBuYW1lZCBwcm9wZXJ0eSBmb3IgVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuSG9vayA9IEhvb2s7XG5tb2R1bGUuZXhwb3J0cy5TaW5ndWxhciA9IEhvb2suU2luZ3VsYXI7XG5tb2R1bGUuZXhwb3J0cy5Db2xsZWN0aW9uID0gSG9vay5Db2xsZWN0aW9uO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qIVxuICogaXMtcGxhaW4tb2JqZWN0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3Q+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICB2YXIgY3Rvcixwcm90O1xuXG4gIGlmIChpc09iamVjdChvKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcbiAgY3RvciA9IG8uY29uc3RydWN0b3I7XG4gIGlmIChjdG9yID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBwcm90b3R5cGVcbiAgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuICBpZiAoaXNPYmplY3QocHJvdCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgY29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhbiBPYmplY3Qtc3BlY2lmaWMgbWV0aG9kXG4gIGlmIChwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCdpcy1wbGFpbi1vYmplY3QnKTtcbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xuXG5mdW5jdGlvbiBsb3dlcmNhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBtZXJnZURlZXAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpO1xuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QuaXNQbGFpbk9iamVjdChvcHRpb25zW2tleV0pKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGVmYXVsdHMpKSBPYmplY3QuYXNzaWduKHJlc3VsdCwge1xuICAgICAgICBba2V5XTogb3B0aW9uc1trZXldXG4gICAgICB9KTtlbHNlIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7XG4gICAgICAgIFtrZXldOiBvcHRpb25zW2tleV1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmxcbiAgICB9IDoge1xuICAgICAgdXJsOiBtZXRob2RcbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9IC8vIGxvd2VyY2FzZSBoZWFkZXIgbmFtZXMgYmVmb3JlIG1lcmdpbmcgd2l0aCBkZWZhdWx0cyB0byBhdm9pZCBkdXBsaWNhdGVzXG5cblxuICBvcHRpb25zLmhlYWRlcnMgPSBsb3dlcmNhc2VLZXlzKG9wdGlvbnMuaGVhZGVycyk7IC8vIHJlbW92ZSBwcm9wZXJ0aWVzIHdpdGggdW5kZWZpbmVkIHZhbHVlcyBiZWZvcmUgbWVyZ2luZ1xuXG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucyk7XG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IG1lcmdlRGVlcChkZWZhdWx0cyB8fCB7fSwgb3B0aW9ucyk7IC8vIG1lZGlhVHlwZS5wcmV2aWV3cyBhcnJheXMgYXJlIG1lcmdlZCwgaW5zdGVhZCBvZiBvdmVyd3JpdHRlblxuXG4gIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MubGVuZ3RoKSB7XG4gICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKHByZXZpZXcgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICB9XG5cbiAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5tYXAocHJldmlldyA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICByZXR1cm4gbWVyZ2VkT3B0aW9ucztcbn1cblxuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuXG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcmV0dXJuIHVybCArIHNlcGFyYXRvciArIG5hbWVzLm1hcChuYW1lID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtuYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJzW25hbWVdKX1gO1xuICB9KS5qb2luKFwiJlwiKTtcbn1cblxuY29uc3QgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXn1dK1xcfS9nO1xuXG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC9eXFxXK3xcXFcrJC9nLCBcIlwiKS5zcGxpdCgvLC8pO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcblxuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcy5tYXAocmVtb3ZlTm9uQ2hhcnMpLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKTtcbn1cblxuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXNUb09taXQpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkuZmlsdGVyKG9wdGlvbiA9PiAha2V5c1RvT21pdC5pbmNsdWRlcyhvcHRpb24pKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgb2JqW2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gb2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9icmFtc3RlaW4vdXJsLXRlbXBsYXRlLCBsaWNlbnNlZCB1bmRlciBCU0Rcbi8vIFRPRE86IGNyZWF0ZSBzZXBhcmF0ZSBwYWNrYWdlLlxuLy9cbi8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0LCBCcmFtIFN0ZWluXG4vLyBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnNcbi8vIGFyZSBtZXQ6XG4vLyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4vLyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4vLyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbi8vICAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbi8vICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRURcbi8vIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOT1xuLy8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULFxuLy8gSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXG4vLyBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWVxuLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbi8vIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSxcbi8vIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgaWYgKCEvJVswLTlBLUZhLWZdLy50ZXN0KHBhcnQpKSB7XG4gICAgICBwYXJ0ID0gZW5jb2RlVVJJKHBhcnQpLnJlcGxhY2UoLyU1Qi9nLCBcIltcIikucmVwbGFjZSgvJTVEL2csIFwiXVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcblxuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwga2V5LCBtb2RpZmllcikge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0W2tleV0sXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBpZiAoaXNEZWZpbmVkKHZhbHVlKSAmJiB2YWx1ZSAhPT0gXCJcIikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblxuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1vZGlmaWVyID09PSBcIipcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IFtdO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVW5yZXNlcnZlZChrKSk7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHRlbXBsYXRlKSB7XG4gIHJldHVybiB7XG4gICAgZXhwYW5kOiBleHBhbmQuYmluZChudWxsLCB0ZW1wbGF0ZSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFx7KFteXFx7XFx9XSspXFx9fChbXlxce1xcfV0rKS9nLCBmdW5jdGlvbiAoXywgZXhwcmVzc2lvbiwgbGl0ZXJhbCkge1xuICAgIGlmIChleHByZXNzaW9uKSB7XG4gICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG5cbiAgICAgIGlmIChvcGVyYXRvcnMuaW5kZXhPZihleHByZXNzaW9uLmNoYXJBdCgwKSkgIT09IC0xKSB7XG4gICAgICAgIG9wZXJhdG9yID0gZXhwcmVzc2lvbi5jaGFyQXQoMCk7XG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgIH1cblxuICAgICAgZXhwcmVzc2lvbi5zcGxpdCgvLC9nKS5mb3JFYWNoKGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIHRtcFsxXSwgdG1wWzJdIHx8IHRtcFszXSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcGVyYXRvciAmJiBvcGVyYXRvciAhPT0gXCIrXCIpIHtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuXG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICBzZXBhcmF0b3IgPSBcIiZcIjtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciAhPT0gXCIjXCIpIHtcbiAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAodmFsdWVzLmxlbmd0aCAhPT0gMCA/IG9wZXJhdG9yIDogXCJcIikgKyB2YWx1ZXMuam9pbihzZXBhcmF0b3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKG9wdGlvbnMpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI21ldGhvZHNcbiAgbGV0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCk7IC8vIHJlcGxhY2UgOnZhcm5hbWUgd2l0aCB7dmFybmFtZX0gdG8gbWFrZSBpdCBSRkMgNjU3MCBjb21wYXRpYmxlXG5cbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcIm1ldGhvZFwiLCBcImJhc2VVcmxcIiwgXCJ1cmxcIiwgXCJoZWFkZXJzXCIsIFwicmVxdWVzdFwiLCBcIm1lZGlhVHlwZVwiXSk7IC8vIGV4dHJhY3QgdmFyaWFibGUgbmFtZXMgZnJvbSBVUkwgdG8gY2FsY3VsYXRlIHJlbWFpbmluZyB2YXJpYWJsZXMgbGF0ZXJcblxuICBjb25zdCB1cmxWYXJpYWJsZU5hbWVzID0gZXh0cmFjdFVybFZhcmlhYmxlTmFtZXModXJsKTtcbiAgdXJsID0gcGFyc2VVcmwodXJsKS5leHBhbmQocGFyYW1ldGVycyk7XG5cbiAgaWYgKCEvXmh0dHAvLnRlc3QodXJsKSkge1xuICAgIHVybCA9IG9wdGlvbnMuYmFzZVVybCArIHVybDtcbiAgfVxuXG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKG9wdGlvbiA9PiB1cmxWYXJpYWJsZU5hbWVzLmluY2x1ZGVzKG9wdGlvbikpLmNvbmNhdChcImJhc2VVcmxcIik7XG4gIGNvbnN0IHJlbWFpbmluZ1BhcmFtZXRlcnMgPSBvbWl0KHBhcmFtZXRlcnMsIG9taXR0ZWRQYXJhbWV0ZXJzKTtcbiAgY29uc3QgaXNCaW5hcnlSZXF1ZXN0ID0gL2FwcGxpY2F0aW9uXFwvb2N0ZXQtc3RyZWFtL2kudGVzdChoZWFkZXJzLmFjY2VwdCk7XG5cbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICAvLyBlLmcuIGFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbiA9PiBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzLnJhd1xuICAgICAgaGVhZGVycy5hY2NlcHQgPSBoZWFkZXJzLmFjY2VwdC5zcGxpdCgvLC8pLm1hcChwcmV2aWV3ID0+IHByZXZpZXcucmVwbGFjZSgvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sIGBhcHBsaWNhdGlvbi92bmQkMSQyLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWApKS5qb2luKFwiLFwiKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIgPSBoZWFkZXJzLmFjY2VwdC5tYXRjaCgvW1xcdy1dKyg/PS1wcmV2aWV3KS9nKSB8fCBbXTtcbiAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKHByZXZpZXcgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQgPyBgLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWAgOiBcIitqc29uXCI7XG4gICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgfSkuam9pbihcIixcIik7XG4gICAgfVxuICB9IC8vIGZvciBHRVQvSEVBRCByZXF1ZXN0cywgc2V0IFVSTCBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gcmVtYWluaW5nIHBhcmFtZXRlcnNcbiAgLy8gZm9yIFBBVENIL1BPU1QvUFVUL0RFTEVURSByZXF1ZXN0cywgc2V0IHJlcXVlc3QgYm9keSBmcm9tIHJlbWFpbmluZyBwYXJhbWV0ZXJzXG5cblxuICBpZiAoW1wiR0VUXCIsIFwiSEVBRFwiXS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgdXJsID0gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcmVtYWluaW5nUGFyYW1ldGVycyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKFwiZGF0YVwiIGluIHJlbWFpbmluZ1BhcmFtZXRlcnMpIHtcbiAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZW1haW5pbmdQYXJhbWV0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFkZXJzW1wiY29udGVudC1sZW5ndGhcIl0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBkZWZhdWx0IGNvbnRlbnQtdHlwZSBmb3IgSlNPTiBpZiBib2R5IGlzIHNldFxuXG5cbiAgaWYgKCFoZWFkZXJzW1wiY29udGVudC10eXBlXCJdICYmIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuICB9IC8vIEdpdEh1YiBleHBlY3RzICdjb250ZW50LWxlbmd0aDogMCcgaGVhZGVyIGZvciBQVVQvUEFUQ0ggcmVxdWVzdHMgd2l0aG91dCBib2R5LlxuICAvLyBmZXRjaCBkb2VzIG5vdCBhbGxvdyB0byBzZXQgYGNvbnRlbnQtbGVuZ3RoYCBoZWFkZXIsIGJ1dCB3ZSBjYW4gc2V0IGJvZHkgdG8gYW4gZW1wdHkgc3RyaW5nXG5cblxuICBpZiAoW1wiUEFUQ0hcIiwgXCJQVVRcIl0uaW5jbHVkZXMobWV0aG9kKSAmJiB0eXBlb2YgYm9keSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGJvZHkgPSBcIlwiO1xuICB9IC8vIE9ubHkgcmV0dXJuIGJvZHkvcmVxdWVzdCBrZXlzIGlmIHByZXNlbnRcblxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHtcbiAgICBtZXRob2QsXG4gICAgdXJsLFxuICAgIGhlYWRlcnNcbiAgfSwgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7XG4gICAgYm9keVxuICB9IDogbnVsbCwgb3B0aW9ucy5yZXF1ZXN0ID8ge1xuICAgIHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdFxuICB9IDogbnVsbCk7XG59XG5cbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgREVGQVVMVFMgPSBtZXJnZShvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICBjb25zdCBlbmRwb2ludCA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlbmRwb2ludCwge1xuICAgIERFRkFVTFRTLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUyksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgREVGQVVMVFMpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCI2LjAuMTJcIjtcblxuY29uc3QgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAke3VuaXZlcnNhbFVzZXJBZ2VudC5nZXRVc2VyQWdlbnQoKX1gOyAvLyBERUZBVUxUUyBoYXMgYWxsIHByb3BlcnRpZXMgc2V0IHRoYXQgRW5kcG9pbnRPcHRpb25zIGhhcywgZXhjZXB0IHVybC5cbi8vIFNvIHdlIHVzZSBSZXF1ZXN0UGFyYW1ldGVycyBhbmQgYWRkIG1ldGhvZCBhcyBhZGRpdGlvbmFsIHJlcXVpcmVkIHByb3BlcnR5LlxuXG5jb25zdCBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIixcbiAgICBwcmV2aWV3czogW11cbiAgfVxufTtcblxuY29uc3QgZW5kcG9pbnQgPSB3aXRoRGVmYXVsdHMobnVsbCwgREVGQVVMVFMpO1xuXG5leHBvcnRzLmVuZHBvaW50ID0gZW5kcG9pbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb252ZXJzaW9ucyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJzaW9ucztcblxuZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgcmV0dXJuIHggPCAwID8gLTEgOiAxO1xufVxuXG5mdW5jdGlvbiBldmVuUm91bmQoeCkge1xuICAgIC8vIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28uXG4gICAgaWYgKCh4ICUgMSkgPT09IDAuNSAmJiAoeCAmIDEpID09PSAwKSB7IC8vIFtldmVuIG51bWJlcl0uNTsgcm91bmQgZG93biAoaS5lLiBmbG9vcilcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoeCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKGJpdExlbmd0aCwgdHlwZU9wdHMpIHtcbiAgICBpZiAoIXR5cGVPcHRzLnVuc2lnbmVkKSB7XG4gICAgICAgIC0tYml0TGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBsb3dlckJvdW5kID0gdHlwZU9wdHMudW5zaWduZWQgPyAwIDogLU1hdGgucG93KDIsIGJpdExlbmd0aCk7XG4gICAgY29uc3QgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxO1xuXG4gICAgY29uc3QgbW9kdWxvVmFsID0gdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoID8gTWF0aC5wb3coMiwgdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoKSA6IE1hdGgucG93KDIsIGJpdExlbmd0aCk7XG4gICAgY29uc3QgbW9kdWxvQm91bmQgPSB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggPyBNYXRoLnBvdygyLCB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggLSAxKSA6IE1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKFYsIG9wdHMpIHtcbiAgICAgICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG5cbiAgICAgICAgbGV0IHggPSArVjtcblxuICAgICAgICBpZiAob3B0cy5lbmZvcmNlUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIGZpbml0ZSBudW1iZXJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHggPSBzaWduKHgpICogTWF0aC5mbG9vcihNYXRoLmFicyh4KSk7XG4gICAgICAgICAgICBpZiAoeCA8IGxvd2VyQm91bmQgfHwgeCA+IHVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGluIGJ5dGUgcmFuZ2VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTih4KSAmJiBvcHRzLmNsYW1wKSB7XG4gICAgICAgICAgICB4ID0gZXZlblJvdW5kKHgpO1xuXG4gICAgICAgICAgICBpZiAoeCA8IGxvd2VyQm91bmQpIHggPSBsb3dlckJvdW5kO1xuICAgICAgICAgICAgaWYgKHggPiB1cHBlckJvdW5kKSB4ID0gdXBwZXJCb3VuZDtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkgfHwgeCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICB4ID0gc2lnbih4KSAqIE1hdGguZmxvb3IoTWF0aC5hYnMoeCkpO1xuICAgICAgICB4ID0geCAlIG1vZHVsb1ZhbDtcblxuICAgICAgICBpZiAoIXR5cGVPcHRzLnVuc2lnbmVkICYmIHggPj0gbW9kdWxvQm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiB4IC0gbW9kdWxvVmFsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVPcHRzLnVuc2lnbmVkKSB7XG4gICAgICAgICAgICBpZiAoeCA8IDApIHtcbiAgICAgICAgICAgICAgeCArPSBtb2R1bG9WYWw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHggPT09IC0wKSB7IC8vIGRvbid0IHJldHVybiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxufVxuXG5jb252ZXJzaW9uc1tcInZvaWRcIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gISF2YWw7XG59O1xuXG5jb252ZXJzaW9uc1tcImJ5dGVcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDgsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJvY3RldFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oOCwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJzaG9ydFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMTYsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBzaG9ydFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMTYsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmNvbnZlcnNpb25zW1wibG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJsb25nIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiBmYWxzZSwgbW9kdWxvQml0TGVuZ3RoOiA2NCB9KTtcbmNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZyBsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogdHJ1ZSwgbW9kdWxvQml0TGVuZ3RoOiA2NCB9KTtcblxuY29udmVyc2lvbnNbXCJkb3VibGVcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IHggPSArVjtcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSBmaW5pdGUgZmxvYXRpbmctcG9pbnQgdmFsdWVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG5jb252ZXJzaW9uc1tcInVucmVzdHJpY3RlZCBkb3VibGVcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IHggPSArVjtcblxuICAgIGlmIChpc05hTih4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgTmFOXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuLy8gbm90IHF1aXRlIHZhbGlkLCBidXQgZ29vZCBlbm91Z2ggZm9yIEpTXG5jb252ZXJzaW9uc1tcImZsb2F0XCJdID0gY29udmVyc2lvbnNbXCJkb3VibGVcIl07XG5jb252ZXJzaW9uc1tcInVucmVzdHJpY3RlZCBmbG9hdFwiXSA9IGNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGRvdWJsZVwiXTtcblxuY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghb3B0cykgb3B0cyA9IHt9O1xuXG4gICAgaWYgKG9wdHMudHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiBWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmcoVik7XG59O1xuXG5jb252ZXJzaW9uc1tcIkJ5dGVTdHJpbmdcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGNvbnN0IHggPSBTdHJpbmcoVik7XG4gICAgbGV0IGMgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IChjID0geC5jb2RlUG9pbnRBdChpKSkgIT09IHVuZGVmaW5lZDsgKytpKSB7XG4gICAgICAgIGlmIChjID4gMjU1KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgdmFsaWQgYnl0ZXN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IFMgPSBTdHJpbmcoVik7XG4gICAgY29uc3QgbiA9IFMubGVuZ3RoO1xuICAgIGNvbnN0IFUgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBjb25zdCBjID0gUy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID4gMHhERkZGKSB7XG4gICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoYykpO1xuICAgICAgICB9IGVsc2UgaWYgKDB4REMwMCA8PSBjICYmIGMgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gbiAtIDEpIHtcbiAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBTLmNoYXJDb2RlQXQoaSArIDEpO1xuICAgICAgICAgICAgICAgIGlmICgweERDMDAgPD0gZCAmJiBkIDw9IDB4REZGRikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gYyAmIDB4M0ZGO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiID0gZCAmIDB4M0ZGO1xuICAgICAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoKDIgPDwgMTUpICsgKDIgPDwgOSkgKiBhICsgYikpO1xuICAgICAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KDB4RkZGRCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBVLmpvaW4oJycpO1xufTtcblxuY29udmVyc2lvbnNbXCJEYXRlXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAoIShWIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIERhdGUgb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAoaXNOYU4oVikpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG5cbmNvbnZlcnNpb25zW1wiUmVnRXhwXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAoIShWIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICBWID0gbmV3IFJlZ0V4cChWKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXlzW2ldLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5c1tpXSkpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyU3ltYm9sID0gU3ltYm9sKFwid3JhcHBlclwiKTtcbm1vZHVsZS5leHBvcnRzLmltcGxTeW1ib2wgPSBTeW1ib2woXCJpbXBsXCIpO1xuXG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyRm9ySW1wbCA9IGZ1bmN0aW9uIChpbXBsKSB7XG4gIHJldHVybiBpbXBsW21vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2xdO1xufTtcblxubW9kdWxlLmV4cG9ydHMuaW1wbEZvcldyYXBwZXIgPSBmdW5jdGlvbiAod3JhcHBlcikge1xuICByZXR1cm4gd3JhcHBlclttb2R1bGUuZXhwb3J0cy5pbXBsU3ltYm9sXTtcbn07XG5cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBwdW55Y29kZSA9IHJlcXVpcmUoXCJwdW55Y29kZVwiKTtcbnZhciBtYXBwaW5nVGFibGUgPSByZXF1aXJlKFwiLi9saWIvbWFwcGluZ1RhYmxlLmpzb25cIik7XG5cbnZhciBQUk9DRVNTSU5HX09QVElPTlMgPSB7XG4gIFRSQU5TSVRJT05BTDogMCxcbiAgTk9OVFJBTlNJVElPTkFMOiAxXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemUoc3RyKSB7IC8vIGZpeCBidWcgaW4gdjhcbiAgcmV0dXJuIHN0ci5zcGxpdCgnXFx1MDAwMCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy5ub3JtYWxpemUoJ05GQycpOyB9KS5qb2luKCdcXHUwMDAwJyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRTdGF0dXModmFsKSB7XG4gIHZhciBzdGFydCA9IDA7XG4gIHZhciBlbmQgPSBtYXBwaW5nVGFibGUubGVuZ3RoIC0gMTtcblxuICB3aGlsZSAoc3RhcnQgPD0gZW5kKSB7XG4gICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKHN0YXJ0ICsgZW5kKSAvIDIpO1xuXG4gICAgdmFyIHRhcmdldCA9IG1hcHBpbmdUYWJsZVttaWRdO1xuICAgIGlmICh0YXJnZXRbMF1bMF0gPD0gdmFsICYmIHRhcmdldFswXVsxXSA+PSB2YWwpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSBlbHNlIGlmICh0YXJnZXRbMF1bMF0gPiB2YWwpIHtcbiAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gbWlkICsgMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIHJlZ2V4QXN0cmFsU3ltYm9scyA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG5cbmZ1bmN0aW9uIGNvdW50U3ltYm9scyhzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZ1xuICAgIC8vIHJlcGxhY2UgZXZlcnkgc3Vycm9nYXRlIHBhaXIgd2l0aCBhIEJNUCBzeW1ib2xcbiAgICAucmVwbGFjZShyZWdleEFzdHJhbFN5bWJvbHMsICdfJylcbiAgICAvLyB0aGVuIGdldCB0aGUgbGVuZ3RoXG4gICAgLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gbWFwQ2hhcnMoZG9tYWluX25hbWUsIHVzZVNURDMsIHByb2Nlc3Npbmdfb3B0aW9uKSB7XG4gIHZhciBoYXNFcnJvciA9IGZhbHNlO1xuICB2YXIgcHJvY2Vzc2VkID0gXCJcIjtcblxuICB2YXIgbGVuID0gY291bnRTeW1ib2xzKGRvbWFpbl9uYW1lKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBjb2RlUG9pbnQgPSBkb21haW5fbmFtZS5jb2RlUG9pbnRBdChpKTtcbiAgICB2YXIgc3RhdHVzID0gZmluZFN0YXR1cyhjb2RlUG9pbnQpO1xuXG4gICAgc3dpdGNoIChzdGF0dXNbMV0pIHtcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkXCI6XG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImlnbm9yZWRcIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWFwcGVkXCI6XG4gICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRldmlhdGlvblwiOlxuICAgICAgICBpZiAocHJvY2Vzc2luZ19vcHRpb24gPT09IFBST0NFU1NJTkdfT1BUSU9OUy5UUkFOU0lUSU9OQUwpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCBzdGF0dXNbMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInZhbGlkXCI6XG4gICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCI6XG4gICAgICAgIGlmICh1c2VTVEQzKSB7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCI6XG4gICAgICAgIGlmICh1c2VTVEQzKSB7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RyaW5nOiBwcm9jZXNzZWQsXG4gICAgZXJyb3I6IGhhc0Vycm9yXG4gIH07XG59XG5cbnZhciBjb21iaW5pbmdNYXJrc1JlZ2V4ID0gL1tcXHUwMzAwLVxcdTAzNkZcXHUwNDgzLVxcdTA0ODlcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNjEwLVxcdTA2MUFcXHUwNjRCLVxcdTA2NUZcXHUwNjcwXFx1MDZENi1cXHUwNkRDXFx1MDZERi1cXHUwNkU0XFx1MDZFN1xcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExXFx1MDczMC1cXHUwNzRBXFx1MDdBNi1cXHUwN0IwXFx1MDdFQi1cXHUwN0YzXFx1MDgxNi1cXHUwODE5XFx1MDgxQi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJEXFx1MDg1OS1cXHUwODVCXFx1MDhFNC1cXHUwOTAzXFx1MDkzQS1cXHUwOTNDXFx1MDkzRS1cXHUwOTRGXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTgxLVxcdTA5ODNcXHUwOUJDXFx1MDlCRS1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0RcXHUwOUQ3XFx1MDlFMlxcdTA5RTNcXHUwQTAxLVxcdTBBMDNcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE3MFxcdTBBNzFcXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEFCQ1xcdTBBQkUtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRTJcXHUwQUUzXFx1MEIwMS1cXHUwQjAzXFx1MEIzQ1xcdTBCM0UtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjYyXFx1MEI2M1xcdTBCODJcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQ3XFx1MEMwMC1cXHUwQzAzXFx1MEMzRS1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzYyXFx1MEM2M1xcdTBDODEtXFx1MEM4M1xcdTBDQkNcXHUwQ0JFLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDRTJcXHUwQ0UzXFx1MEQwMS1cXHUwRDAzXFx1MEQzRS1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDREXFx1MEQ1N1xcdTBENjJcXHUwRDYzXFx1MEQ4MlxcdTBEODNcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUzMVxcdTBFMzQtXFx1MEUzQVxcdTBFNDctXFx1MEU0RVxcdTBFQjFcXHUwRUI0LVxcdTBFQjlcXHUwRUJCXFx1MEVCQ1xcdTBFQzgtXFx1MEVDRFxcdTBGMThcXHUwRjE5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRVxcdTBGM0ZcXHUwRjcxLVxcdTBGODRcXHUwRjg2XFx1MEY4N1xcdTBGOEQtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDJCLVxcdTEwM0VcXHUxMDU2LVxcdTEwNTlcXHUxMDVFLVxcdTEwNjBcXHUxMDYyLVxcdTEwNjRcXHUxMDY3LVxcdTEwNkRcXHUxMDcxLVxcdTEwNzRcXHUxMDgyLVxcdTEwOERcXHUxMDhGXFx1MTA5QS1cXHUxMDlEXFx1MTM1RC1cXHUxMzVGXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3QjQtXFx1MTdEM1xcdTE3RERcXHUxODBCLVxcdTE4MERcXHUxOEE5XFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MTlCMC1cXHUxOUMwXFx1MTlDOFxcdTE5QzlcXHUxQTE3LVxcdTFBMUJcXHUxQTU1LVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGXFx1MUFCMC1cXHUxQUJFXFx1MUIwMC1cXHUxQjA0XFx1MUIzNC1cXHUxQjQ0XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQjgyXFx1MUJBMS1cXHUxQkFEXFx1MUJFNi1cXHUxQkYzXFx1MUMyNC1cXHUxQzM3XFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0U4XFx1MUNFRFxcdTFDRjItXFx1MUNGNFxcdTFDRjhcXHUxQ0Y5XFx1MURDMC1cXHUxREY1XFx1MURGQy1cXHUxREZGXFx1MjBEMC1cXHUyMEYwXFx1MkNFRi1cXHUyQ0YxXFx1MkQ3RlxcdTJERTAtXFx1MkRGRlxcdTMwMkEtXFx1MzAyRlxcdTMwOTlcXHUzMDlBXFx1QTY2Ri1cXHVBNjcyXFx1QTY3NC1cXHVBNjdEXFx1QTY5RlxcdUE2RjBcXHVBNkYxXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyMy1cXHVBODI3XFx1QTg4MFxcdUE4ODFcXHVBOEI0LVxcdUE4QzRcXHVBOEUwLVxcdUE4RjFcXHVBOTI2LVxcdUE5MkRcXHVBOTQ3LVxcdUE5NTNcXHVBOTgwLVxcdUE5ODNcXHVBOUIzLVxcdUE5QzBcXHVBOUU1XFx1QUEyOS1cXHVBQTM2XFx1QUE0M1xcdUFBNENcXHVBQTREXFx1QUE3Qi1cXHVBQTdEXFx1QUFCMFxcdUFBQjItXFx1QUFCNFxcdUFBQjdcXHVBQUI4XFx1QUFCRVxcdUFBQkZcXHVBQUMxXFx1QUFFQi1cXHVBQUVGXFx1QUFGNVxcdUFBRjZcXHVBQkUzLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkRdfFxcdUQ4MDBbXFx1RERGRFxcdURFRTBcXHVERjc2LVxcdURGN0FdfFxcdUQ4MDJbXFx1REUwMS1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMEZcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REVFNVxcdURFRTZdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzAyXFx1REMzOC1cXHVEQzQ2XFx1REM3Ri1cXHVEQzgyXFx1RENCMC1cXHVEQ0JBXFx1REQwMC1cXHVERDAyXFx1REQyNy1cXHVERDM0XFx1REQ3M1xcdUREODAtXFx1REQ4MlxcdUREQjMtXFx1RERDMFxcdURFMkMtXFx1REUzN1xcdURFREYtXFx1REVFQVxcdURGMDEtXFx1REYwM1xcdURGM0NcXHVERjNFLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQ0IwLVxcdURDQzNcXHVEREFGLVxcdUREQjVcXHVEREI4LVxcdUREQzBcXHVERTMwLVxcdURFNDBcXHVERUFCLVxcdURFQjddfFxcdUQ4MUFbXFx1REVGMC1cXHVERUY0XFx1REYzMC1cXHVERjM2XXxcXHVEODFCW1xcdURGNTEtXFx1REY3RVxcdURGOEYtXFx1REY5Ml18XFx1RDgyRltcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1LVxcdURENjlcXHVERDZELVxcdURENzJcXHVERDdCLVxcdUREODJcXHVERDg1LVxcdUREOEJcXHVEREFBLVxcdUREQURcXHVERTQyLVxcdURFNDRdfFxcdUQ4M0FbXFx1RENEMC1cXHVEQ0Q2XXxcXHVEQjQwW1xcdUREMDAtXFx1RERFRl0vO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUxhYmVsKGxhYmVsLCBwcm9jZXNzaW5nX29wdGlvbikge1xuICBpZiAobGFiZWwuc3Vic3RyKDAsIDQpID09PSBcInhuLS1cIikge1xuICAgIGxhYmVsID0gcHVueWNvZGUudG9Vbmljb2RlKGxhYmVsKTtcbiAgICBwcm9jZXNzaW5nX29wdGlvbiA9IFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUw7XG4gIH1cblxuICB2YXIgZXJyb3IgPSBmYWxzZTtcblxuICBpZiAobm9ybWFsaXplKGxhYmVsKSAhPT0gbGFiZWwgfHxcbiAgICAgIChsYWJlbFszXSA9PT0gXCItXCIgJiYgbGFiZWxbNF0gPT09IFwiLVwiKSB8fFxuICAgICAgbGFiZWxbMF0gPT09IFwiLVwiIHx8IGxhYmVsW2xhYmVsLmxlbmd0aCAtIDFdID09PSBcIi1cIiB8fFxuICAgICAgbGFiZWwuaW5kZXhPZihcIi5cIikgIT09IC0xIHx8XG4gICAgICBsYWJlbC5zZWFyY2goY29tYmluaW5nTWFya3NSZWdleCkgPT09IDApIHtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICB2YXIgbGVuID0gY291bnRTeW1ib2xzKGxhYmVsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBzdGF0dXMgPSBmaW5kU3RhdHVzKGxhYmVsLmNvZGVQb2ludEF0KGkpKTtcbiAgICBpZiAoKHByb2Nlc3NpbmcgPT09IFBST0NFU1NJTkdfT1BUSU9OUy5UUkFOU0lUSU9OQUwgJiYgc3RhdHVzWzFdICE9PSBcInZhbGlkXCIpIHx8XG4gICAgICAgIChwcm9jZXNzaW5nID09PSBQUk9DRVNTSU5HX09QVElPTlMuTk9OVFJBTlNJVElPTkFMICYmXG4gICAgICAgICBzdGF0dXNbMV0gIT09IFwidmFsaWRcIiAmJiBzdGF0dXNbMV0gIT09IFwiZGV2aWF0aW9uXCIpKSB7XG4gICAgICBlcnJvciA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxhYmVsOiBsYWJlbCxcbiAgICBlcnJvcjogZXJyb3JcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc2luZyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pIHtcbiAgdmFyIHJlc3VsdCA9IG1hcENoYXJzKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbik7XG4gIHJlc3VsdC5zdHJpbmcgPSBub3JtYWxpemUocmVzdWx0LnN0cmluZyk7XG5cbiAgdmFyIGxhYmVscyA9IHJlc3VsdC5zdHJpbmcuc3BsaXQoXCIuXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHZhbGlkYXRlTGFiZWwobGFiZWxzW2ldKTtcbiAgICAgIGxhYmVsc1tpXSA9IHZhbGlkYXRpb24ubGFiZWw7XG4gICAgICByZXN1bHQuZXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgdmFsaWRhdGlvbi5lcnJvcjtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdHJpbmc6IGxhYmVscy5qb2luKFwiLlwiKSxcbiAgICBlcnJvcjogcmVzdWx0LmVycm9yXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzLnRvQVNDSUkgPSBmdW5jdGlvbihkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24sIHZlcmlmeURuc0xlbmd0aCkge1xuICB2YXIgcmVzdWx0ID0gcHJvY2Vzc2luZyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pO1xuICB2YXIgbGFiZWxzID0gcmVzdWx0LnN0cmluZy5zcGxpdChcIi5cIik7XG4gIGxhYmVscyA9IGxhYmVscy5tYXAoZnVuY3Rpb24obCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcHVueWNvZGUudG9BU0NJSShsKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgICByZXR1cm4gbDtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh2ZXJpZnlEbnNMZW5ndGgpIHtcbiAgICB2YXIgdG90YWwgPSBsYWJlbHMuc2xpY2UoMCwgbGFiZWxzLmxlbmd0aCAtIDEpLmpvaW4oXCIuXCIpLmxlbmd0aDtcbiAgICBpZiAodG90YWwubGVuZ3RoID4gMjUzIHx8IHRvdGFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBsYWJlbHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChsYWJlbHMubGVuZ3RoID4gNjMgfHwgbGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXN1bHQuZXJyb3IgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmVzdWx0LmVycm9yKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGxhYmVscy5qb2luKFwiLlwiKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnRvVW5pY29kZSA9IGZ1bmN0aW9uKGRvbWFpbl9uYW1lLCB1c2VTVEQzKSB7XG4gIHZhciByZXN1bHQgPSBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBQUk9DRVNTSU5HX09QVElPTlMuTk9OVFJBTlNJVElPTkFMKTtcblxuICByZXR1cm4ge1xuICAgIGRvbWFpbjogcmVzdWx0LnN0cmluZyxcbiAgICBlcnJvcjogcmVzdWx0LmVycm9yXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5QUk9DRVNTSU5HX09QVElPTlMgPSBQUk9DRVNTSU5HX09QVElPTlM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xyXG5jb25zdCBwdW55Y29kZSA9IHJlcXVpcmUoXCJwdW55Y29kZVwiKTtcclxuY29uc3QgdHI0NiA9IHJlcXVpcmUoXCJ0cjQ2XCIpO1xyXG5cclxuY29uc3Qgc3BlY2lhbFNjaGVtZXMgPSB7XHJcbiAgZnRwOiAyMSxcclxuICBmaWxlOiBudWxsLFxyXG4gIGdvcGhlcjogNzAsXHJcbiAgaHR0cDogODAsXHJcbiAgaHR0cHM6IDQ0MyxcclxuICB3czogODAsXHJcbiAgd3NzOiA0NDNcclxufTtcclxuXHJcbmNvbnN0IGZhaWx1cmUgPSBTeW1ib2woXCJmYWlsdXJlXCIpO1xyXG5cclxuZnVuY3Rpb24gY291bnRTeW1ib2xzKHN0cikge1xyXG4gIHJldHVybiBwdW55Y29kZS51Y3MyLmRlY29kZShzdHIpLmxlbmd0aDtcclxufVxyXG5cclxuZnVuY3Rpb24gYXQoaW5wdXQsIGlkeCkge1xyXG4gIGNvbnN0IGMgPSBpbnB1dFtpZHhdO1xyXG4gIHJldHVybiBpc05hTihjKSA/IHVuZGVmaW5lZCA6IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJRGlnaXQoYykge1xyXG4gIHJldHVybiBjID49IDB4MzAgJiYgYyA8PSAweDM5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJQWxwaGEoYykge1xyXG4gIHJldHVybiAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4N0EpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHtcclxuICByZXR1cm4gaXNBU0NJSUFscGhhKGMpIHx8IGlzQVNDSUlEaWdpdChjKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBU0NJSUhleChjKSB7XHJcbiAgcmV0dXJuIGlzQVNDSUlEaWdpdChjKSB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg0NikgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4NjYpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NpbmdsZURvdChidWZmZXIpIHtcclxuICByZXR1cm4gYnVmZmVyID09PSBcIi5cIiB8fCBidWZmZXIudG9Mb3dlckNhc2UoKSA9PT0gXCIlMmVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEb3VibGVEb3QoYnVmZmVyKSB7XHJcbiAgYnVmZmVyID0gYnVmZmVyLnRvTG93ZXJDYXNlKCk7XHJcbiAgcmV0dXJuIGJ1ZmZlciA9PT0gXCIuLlwiIHx8IGJ1ZmZlciA9PT0gXCIlMmUuXCIgfHwgYnVmZmVyID09PSBcIi4lMmVcIiB8fCBidWZmZXIgPT09IFwiJTJlJTJlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2luZG93c0RyaXZlTGV0dGVyQ29kZVBvaW50cyhjcDEsIGNwMikge1xyXG4gIHJldHVybiBpc0FTQ0lJQWxwaGEoY3AxKSAmJiAoY3AyID09PSA1OCB8fCBjcDIgPT09IDEyNCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID09PSAyICYmIGlzQVNDSUlBbHBoYShzdHJpbmcuY29kZVBvaW50QXQoMCkpICYmIChzdHJpbmdbMV0gPT09IFwiOlwiIHx8IHN0cmluZ1sxXSA9PT0gXCJ8XCIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc05vcm1hbGl6ZWRXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgaXNBU0NJSUFscGhhKHN0cmluZy5jb2RlUG9pbnRBdCgwKSkgJiYgc3RyaW5nWzFdID09PSBcIjpcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50KHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcuc2VhcmNoKC9cXHUwMDAwfFxcdTAwMDl8XFx1MDAwQXxcXHUwMDBEfFxcdTAwMjB8I3wlfFxcL3w6fFxcP3xAfFxcW3xcXFxcfFxcXS8pICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50RXhjbHVkaW5nUGVyY2VudChzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLnNlYXJjaCgvXFx1MDAwMHxcXHUwMDA5fFxcdTAwMEF8XFx1MDAwRHxcXHUwMDIwfCN8XFwvfDp8XFw/fEB8XFxbfFxcXFx8XFxdLykgIT09IC0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NwZWNpYWxTY2hlbWUoc2NoZW1lKSB7XHJcbiAgcmV0dXJuIHNwZWNpYWxTY2hlbWVzW3NjaGVtZV0gIT09IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTcGVjaWFsKHVybCkge1xyXG4gIHJldHVybiBpc1NwZWNpYWxTY2hlbWUodXJsLnNjaGVtZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRQb3J0KHNjaGVtZSkge1xyXG4gIHJldHVybiBzcGVjaWFsU2NoZW1lc1tzY2hlbWVdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50RW5jb2RlKGMpIHtcclxuICBsZXQgaGV4ID0gYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICBpZiAoaGV4Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgaGV4ID0gXCIwXCIgKyBoZXg7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gXCIlXCIgKyBoZXg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHV0ZjhQZXJjZW50RW5jb2RlKGMpIHtcclxuICBjb25zdCBidWYgPSBuZXcgQnVmZmVyKGMpO1xyXG5cclxuICBsZXQgc3RyID0gXCJcIjtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyArK2kpIHtcclxuICAgIHN0ciArPSBwZXJjZW50RW5jb2RlKGJ1ZltpXSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1dGY4UGVyY2VudERlY29kZShzdHIpIHtcclxuICBjb25zdCBpbnB1dCA9IG5ldyBCdWZmZXIoc3RyKTtcclxuICBjb25zdCBvdXRwdXQgPSBbXTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoaW5wdXRbaV0gIT09IDM3KSB7XHJcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0W2ldKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wdXRbaV0gPT09IDM3ICYmIGlzQVNDSUlIZXgoaW5wdXRbaSArIDFdKSAmJiBpc0FTQ0lJSGV4KGlucHV0W2kgKyAyXSkpIHtcclxuICAgICAgb3V0cHV0LnB1c2gocGFyc2VJbnQoaW5wdXQuc2xpY2UoaSArIDEsIGkgKyAzKS50b1N0cmluZygpLCAxNikpO1xyXG4gICAgICBpICs9IDI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRwdXQucHVzaChpbnB1dFtpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBuZXcgQnVmZmVyKG91dHB1dCkudG9TdHJpbmcoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKGMpIHtcclxuICByZXR1cm4gYyA8PSAweDFGIHx8IGMgPiAweDdFO1xyXG59XHJcblxyXG5jb25zdCBleHRyYVBhdGhQZXJjZW50RW5jb2RlU2V0ID0gbmV3IFNldChbMzIsIDM0LCAzNSwgNjAsIDYyLCA2MywgOTYsIDEyMywgMTI1XSk7XHJcbmZ1bmN0aW9uIGlzUGF0aFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUoYykgfHwgZXh0cmFQYXRoUGVyY2VudEVuY29kZVNldC5oYXMoYyk7XHJcbn1cclxuXHJcbmNvbnN0IGV4dHJhVXNlcmluZm9QZXJjZW50RW5jb2RlU2V0ID1cclxuICBuZXcgU2V0KFs0NywgNTgsIDU5LCA2MSwgNjQsIDkxLCA5MiwgOTMsIDk0LCAxMjRdKTtcclxuZnVuY3Rpb24gaXNVc2VyaW5mb1BlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBpc1BhdGhQZXJjZW50RW5jb2RlKGMpIHx8IGV4dHJhVXNlcmluZm9QZXJjZW50RW5jb2RlU2V0LmhhcyhjKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGVyY2VudEVuY29kZUNoYXIoYywgZW5jb2RlU2V0UHJlZGljYXRlKSB7XHJcbiAgY29uc3QgY1N0ciA9IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG5cclxuICBpZiAoZW5jb2RlU2V0UHJlZGljYXRlKGMpKSB7XHJcbiAgICByZXR1cm4gdXRmOFBlcmNlbnRFbmNvZGUoY1N0cik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY1N0cjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY0TnVtYmVyKGlucHV0KSB7XHJcbiAgbGV0IFIgPSAxMDtcclxuXHJcbiAgaWYgKGlucHV0Lmxlbmd0aCA+PSAyICYmIGlucHV0LmNoYXJBdCgwKSA9PT0gXCIwXCIgJiYgaW5wdXQuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCkgPT09IFwieFwiKSB7XHJcbiAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZygyKTtcclxuICAgIFIgPSAxNjtcclxuICB9IGVsc2UgaWYgKGlucHV0Lmxlbmd0aCA+PSAyICYmIGlucHV0LmNoYXJBdCgwKSA9PT0gXCIwXCIpIHtcclxuICAgIGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDEpO1xyXG4gICAgUiA9IDg7XHJcbiAgfVxyXG5cclxuICBpZiAoaW5wdXQgPT09IFwiXCIpIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVnZXggPSBSID09PSAxMCA/IC9bXjAtOV0vIDogKFIgPT09IDE2ID8gL1teMC05QS1GYS1mXS8gOiAvW14wLTddLyk7XHJcbiAgaWYgKHJlZ2V4LnRlc3QoaW5wdXQpKSB7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJzZUludChpbnB1dCwgUik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlSVB2NChpbnB1dCkge1xyXG4gIGNvbnN0IHBhcnRzID0gaW5wdXQuc3BsaXQoXCIuXCIpO1xyXG4gIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gXCJcIikge1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgcGFydHMucG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAocGFydHMubGVuZ3RoID4gNCkge1xyXG4gICAgcmV0dXJuIGlucHV0O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbnVtYmVycyA9IFtdO1xyXG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgaWYgKHBhcnQgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgbiA9IHBhcnNlSVB2NE51bWJlcihwYXJ0KTtcclxuICAgIGlmIChuID09PSBmYWlsdXJlKSB7XHJcbiAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBudW1iZXJzLnB1c2gobik7XHJcbiAgfVxyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoIC0gMTsgKytpKSB7XHJcbiAgICBpZiAobnVtYmVyc1tpXSA+IDI1NSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSA+PSBNYXRoLnBvdygyNTYsIDUgLSBudW1iZXJzLmxlbmd0aCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgbGV0IGlwdjQgPSBudW1iZXJzLnBvcCgpO1xyXG4gIGxldCBjb3VudGVyID0gMDtcclxuXHJcbiAgZm9yIChjb25zdCBuIG9mIG51bWJlcnMpIHtcclxuICAgIGlwdjQgKz0gbiAqIE1hdGgucG93KDI1NiwgMyAtIGNvdW50ZXIpO1xyXG4gICAgKytjb3VudGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGlwdjQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcykge1xyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGxldCBuID0gYWRkcmVzcztcclxuXHJcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gNDsgKytpKSB7XHJcbiAgICBvdXRwdXQgPSBTdHJpbmcobiAlIDI1NikgKyBvdXRwdXQ7XHJcbiAgICBpZiAoaSAhPT0gNCkge1xyXG4gICAgICBvdXRwdXQgPSBcIi5cIiArIG91dHB1dDtcclxuICAgIH1cclxuICAgIG4gPSBNYXRoLmZsb29yKG4gLyAyNTYpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY2KGlucHV0KSB7XHJcbiAgY29uc3QgYWRkcmVzcyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcclxuICBsZXQgcGllY2VJbmRleCA9IDA7XHJcbiAgbGV0IGNvbXByZXNzID0gbnVsbDtcclxuICBsZXQgcG9pbnRlciA9IDA7XHJcblxyXG4gIGlucHV0ID0gcHVueWNvZGUudWNzMi5kZWNvZGUoaW5wdXQpO1xyXG5cclxuICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDU4KSB7XHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlciArIDFdICE9PSA1OCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBwb2ludGVyICs9IDI7XHJcbiAgICArK3BpZWNlSW5kZXg7XHJcbiAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XHJcbiAgfVxyXG5cclxuICB3aGlsZSAocG9pbnRlciA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgaWYgKHBpZWNlSW5kZXggPT09IDgpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA1OCkge1xyXG4gICAgICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgICsrcGllY2VJbmRleDtcclxuICAgICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmFsdWUgPSAwO1xyXG4gICAgbGV0IGxlbmd0aCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGxlbmd0aCA8IDQgJiYgaXNBU0NJSUhleChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZSAqIDB4MTAgKyBwYXJzZUludChhdChpbnB1dCwgcG9pbnRlciksIDE2KTtcclxuICAgICAgKytwb2ludGVyO1xyXG4gICAgICArK2xlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDQ2KSB7XHJcbiAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcG9pbnRlciAtPSBsZW5ndGg7XHJcblxyXG4gICAgICBpZiAocGllY2VJbmRleCA+IDYpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG51bWJlcnNTZWVuID0gMDtcclxuXHJcbiAgICAgIHdoaWxlIChpbnB1dFtwb2ludGVyXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbGV0IGlwdjRQaWVjZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA+IDApIHtcclxuICAgICAgICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNDYgJiYgbnVtYmVyc1NlZW4gPCA0KSB7XHJcbiAgICAgICAgICAgICsrcG9pbnRlcjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoaW5wdXRbcG9pbnRlcl0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdoaWxlIChpc0FTQ0lJRGlnaXQoaW5wdXRbcG9pbnRlcl0pKSB7XHJcbiAgICAgICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludChhdChpbnB1dCwgcG9pbnRlcikpO1xyXG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpcHY0UGllY2UgPSBudW1iZXI7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGlwdjRQaWVjZSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlwdjRQaWVjZSA9IGlwdjRQaWVjZSAqIDEwICsgbnVtYmVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA+IDI1NSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICsrcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFkZHJlc3NbcGllY2VJbmRleF0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdICogMHgxMDAgKyBpcHY0UGllY2U7XHJcblxyXG4gICAgICAgICsrbnVtYmVyc1NlZW47XHJcblxyXG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA9PT0gMiB8fCBudW1iZXJzU2VlbiA9PT0gNCkge1xyXG4gICAgICAgICAgKytwaWVjZUluZGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG51bWJlcnNTZWVuICE9PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfSBlbHNlIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgICAgKytwb2ludGVyO1xyXG4gICAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0W3BvaW50ZXJdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IHZhbHVlO1xyXG4gICAgKytwaWVjZUluZGV4O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbXByZXNzICE9PSBudWxsKSB7XHJcbiAgICBsZXQgc3dhcHMgPSBwaWVjZUluZGV4IC0gY29tcHJlc3M7XHJcbiAgICBwaWVjZUluZGV4ID0gNztcclxuICAgIHdoaWxlIChwaWVjZUluZGV4ICE9PSAwICYmIHN3YXBzID4gMCkge1xyXG4gICAgICBjb25zdCB0ZW1wID0gYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV07XHJcbiAgICAgIGFkZHJlc3NbY29tcHJlc3MgKyBzd2FwcyAtIDFdID0gYWRkcmVzc1twaWVjZUluZGV4XTtcclxuICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IHRlbXA7XHJcbiAgICAgIC0tcGllY2VJbmRleDtcclxuICAgICAgLS1zd2FwcztcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKGNvbXByZXNzID09PSBudWxsICYmIHBpZWNlSW5kZXggIT09IDgpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFkZHJlc3M7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZUlQdjYoYWRkcmVzcykge1xyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGNvbnN0IHNlcVJlc3VsdCA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGFkZHJlc3MpO1xyXG4gIGNvbnN0IGNvbXByZXNzID0gc2VxUmVzdWx0LmlkeDtcclxuICBsZXQgaWdub3JlMCA9IGZhbHNlO1xyXG5cclxuICBmb3IgKGxldCBwaWVjZUluZGV4ID0gMDsgcGllY2VJbmRleCA8PSA3OyArK3BpZWNlSW5kZXgpIHtcclxuICAgIGlmIChpZ25vcmUwICYmIGFkZHJlc3NbcGllY2VJbmRleF0gPT09IDApIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9IGVsc2UgaWYgKGlnbm9yZTApIHtcclxuICAgICAgaWdub3JlMCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21wcmVzcyA9PT0gcGllY2VJbmRleCkge1xyXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSBwaWVjZUluZGV4ID09PSAwID8gXCI6OlwiIDogXCI6XCI7XHJcbiAgICAgIG91dHB1dCArPSBzZXBhcmF0b3I7XHJcbiAgICAgIGlnbm9yZTAgPSB0cnVlO1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBvdXRwdXQgKz0gYWRkcmVzc1twaWVjZUluZGV4XS50b1N0cmluZygxNik7XHJcblxyXG4gICAgaWYgKHBpZWNlSW5kZXggIT09IDcpIHtcclxuICAgICAgb3V0cHV0ICs9IFwiOlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VIb3N0KGlucHV0LCBpc1NwZWNpYWxBcmcpIHtcclxuICBpZiAoaW5wdXRbMF0gPT09IFwiW1wiKSB7XHJcbiAgICBpZiAoaW5wdXRbaW5wdXQubGVuZ3RoIC0gMV0gIT09IFwiXVwiKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJzZUlQdjYoaW5wdXQuc3Vic3RyaW5nKDEsIGlucHV0Lmxlbmd0aCAtIDEpKTtcclxuICB9XHJcblxyXG4gIGlmICghaXNTcGVjaWFsQXJnKSB7XHJcbiAgICByZXR1cm4gcGFyc2VPcGFxdWVIb3N0KGlucHV0KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGRvbWFpbiA9IHV0ZjhQZXJjZW50RGVjb2RlKGlucHV0KTtcclxuICBjb25zdCBhc2NpaURvbWFpbiA9IHRyNDYudG9BU0NJSShkb21haW4sIGZhbHNlLCB0cjQ2LlBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwsIGZhbHNlKTtcclxuICBpZiAoYXNjaWlEb21haW4gPT09IG51bGwpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbnRhaW5zRm9yYmlkZGVuSG9zdENvZGVQb2ludChhc2NpaURvbWFpbikpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgaXB2NEhvc3QgPSBwYXJzZUlQdjQoYXNjaWlEb21haW4pO1xyXG4gIGlmICh0eXBlb2YgaXB2NEhvc3QgPT09IFwibnVtYmVyXCIgfHwgaXB2NEhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgIHJldHVybiBpcHY0SG9zdDtcclxuICB9XHJcblxyXG4gIHJldHVybiBhc2NpaURvbWFpbjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VPcGFxdWVIb3N0KGlucHV0KSB7XHJcbiAgaWYgKGNvbnRhaW5zRm9yYmlkZGVuSG9zdENvZGVQb2ludEV4Y2x1ZGluZ1BlcmNlbnQoaW5wdXQpKSB7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGNvbnN0IGRlY29kZWQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShpbnB1dCk7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgKytpKSB7XHJcbiAgICBvdXRwdXQgKz0gcGVyY2VudEVuY29kZUNoYXIoZGVjb2RlZFtpXSwgaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYXJyKSB7XHJcbiAgbGV0IG1heElkeCA9IG51bGw7XHJcbiAgbGV0IG1heExlbiA9IDE7IC8vIG9ubHkgZmluZCBlbGVtZW50cyA+IDFcclxuICBsZXQgY3VyclN0YXJ0ID0gbnVsbDtcclxuICBsZXQgY3VyckxlbiA9IDA7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoYXJyW2ldICE9PSAwKSB7XHJcbiAgICAgIGlmIChjdXJyTGVuID4gbWF4TGVuKSB7XHJcbiAgICAgICAgbWF4SWR4ID0gY3VyclN0YXJ0O1xyXG4gICAgICAgIG1heExlbiA9IGN1cnJMZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1cnJTdGFydCA9IG51bGw7XHJcbiAgICAgIGN1cnJMZW4gPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGN1cnJTdGFydCA9PT0gbnVsbCkge1xyXG4gICAgICAgIGN1cnJTdGFydCA9IGk7XHJcbiAgICAgIH1cclxuICAgICAgKytjdXJyTGVuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaWYgdHJhaWxpbmcgemVyb3NcclxuICBpZiAoY3VyckxlbiA+IG1heExlbikge1xyXG4gICAgbWF4SWR4ID0gY3VyclN0YXJ0O1xyXG4gICAgbWF4TGVuID0gY3VyckxlbjtcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBpZHg6IG1heElkeCxcclxuICAgIGxlbjogbWF4TGVuXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSG9zdChob3N0KSB7XHJcbiAgaWYgKHR5cGVvZiBob3N0ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICByZXR1cm4gc2VyaWFsaXplSVB2NChob3N0KTtcclxuICB9XHJcblxyXG4gIC8vIElQdjYgc2VyaWFsaXplclxyXG4gIGlmIChob3N0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgIHJldHVybiBcIltcIiArIHNlcmlhbGl6ZUlQdjYoaG9zdCkgKyBcIl1cIjtcclxuICB9XHJcblxyXG4gIHJldHVybiBob3N0O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0cmltQ29udHJvbENoYXJzKHVybCkge1xyXG4gIHJldHVybiB1cmwucmVwbGFjZSgvXltcXHUwMDAwLVxcdTAwMUZcXHUwMDIwXSt8W1xcdTAwMDAtXFx1MDAxRlxcdTAwMjBdKyQvZywgXCJcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyaW1UYWJBbmROZXdsaW5lKHVybCkge1xyXG4gIHJldHVybiB1cmwucmVwbGFjZSgvXFx1MDAwOXxcXHUwMDBBfFxcdTAwMEQvZywgXCJcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3J0ZW5QYXRoKHVybCkge1xyXG4gIGNvbnN0IHBhdGggPSB1cmwucGF0aDtcclxuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgaWYgKHVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIHBhdGgubGVuZ3RoID09PSAxICYmIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlcihwYXRoWzBdKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcGF0aC5wb3AoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5jbHVkZXNDcmVkZW50aWFscyh1cmwpIHtcclxuICByZXR1cm4gdXJsLnVzZXJuYW1lICE9PSBcIlwiIHx8IHVybC5wYXNzd29yZCAhPT0gXCJcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh1cmwpIHtcclxuICByZXR1cm4gdXJsLmhvc3QgPT09IG51bGwgfHwgdXJsLmhvc3QgPT09IFwiXCIgfHwgdXJsLmNhbm5vdEJlQUJhc2VVUkwgfHwgdXJsLnNjaGVtZSA9PT0gXCJmaWxlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlcihzdHJpbmcpIHtcclxuICByZXR1cm4gL15bQS1aYS16XTokLy50ZXN0KHN0cmluZyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFVSTFN0YXRlTWFjaGluZShpbnB1dCwgYmFzZSwgZW5jb2RpbmdPdmVycmlkZSwgdXJsLCBzdGF0ZU92ZXJyaWRlKSB7XHJcbiAgdGhpcy5wb2ludGVyID0gMDtcclxuICB0aGlzLmlucHV0ID0gaW5wdXQ7XHJcbiAgdGhpcy5iYXNlID0gYmFzZSB8fCBudWxsO1xyXG4gIHRoaXMuZW5jb2RpbmdPdmVycmlkZSA9IGVuY29kaW5nT3ZlcnJpZGUgfHwgXCJ1dGYtOFwiO1xyXG4gIHRoaXMuc3RhdGVPdmVycmlkZSA9IHN0YXRlT3ZlcnJpZGU7XHJcbiAgdGhpcy51cmwgPSB1cmw7XHJcbiAgdGhpcy5mYWlsdXJlID0gZmFsc2U7XHJcbiAgdGhpcy5wYXJzZUVycm9yID0gZmFsc2U7XHJcblxyXG4gIGlmICghdGhpcy51cmwpIHtcclxuICAgIHRoaXMudXJsID0ge1xyXG4gICAgICBzY2hlbWU6IFwiXCIsXHJcbiAgICAgIHVzZXJuYW1lOiBcIlwiLFxyXG4gICAgICBwYXNzd29yZDogXCJcIixcclxuICAgICAgaG9zdDogbnVsbCxcclxuICAgICAgcG9ydDogbnVsbCxcclxuICAgICAgcGF0aDogW10sXHJcbiAgICAgIHF1ZXJ5OiBudWxsLFxyXG4gICAgICBmcmFnbWVudDogbnVsbCxcclxuXHJcbiAgICAgIGNhbm5vdEJlQUJhc2VVUkw6IGZhbHNlXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcyA9IHRyaW1Db250cm9sQ2hhcnModGhpcy5pbnB1dCk7XHJcbiAgICBpZiAocmVzICE9PSB0aGlzLmlucHV0KSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlucHV0ID0gcmVzO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVzID0gdHJpbVRhYkFuZE5ld2xpbmUodGhpcy5pbnB1dCk7XHJcbiAgaWYgKHJlcyAhPT0gdGhpcy5pbnB1dCkge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICB9XHJcbiAgdGhpcy5pbnB1dCA9IHJlcztcclxuXHJcbiAgdGhpcy5zdGF0ZSA9IHN0YXRlT3ZlcnJpZGUgfHwgXCJzY2hlbWUgc3RhcnRcIjtcclxuXHJcbiAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gIHRoaXMuYXRGbGFnID0gZmFsc2U7XHJcbiAgdGhpcy5hcnJGbGFnID0gZmFsc2U7XHJcbiAgdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcgPSBmYWxzZTtcclxuXHJcbiAgdGhpcy5pbnB1dCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHRoaXMuaW5wdXQpO1xyXG5cclxuICBmb3IgKDsgdGhpcy5wb2ludGVyIDw9IHRoaXMuaW5wdXQubGVuZ3RoOyArK3RoaXMucG9pbnRlcikge1xyXG4gICAgY29uc3QgYyA9IHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyXTtcclxuICAgIGNvbnN0IGNTdHIgPSBpc05hTihjKSA/IHVuZGVmaW5lZCA6IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG5cclxuICAgIC8vIGV4ZWMgc3RhdGUgbWFjaGluZVxyXG4gICAgY29uc3QgcmV0ID0gdGhpc1tcInBhcnNlIFwiICsgdGhpcy5zdGF0ZV0oYywgY1N0cik7XHJcbiAgICBpZiAoIXJldCkge1xyXG4gICAgICBicmVhazsgLy8gdGVybWluYXRlIGFsZ29yaXRobVxyXG4gICAgfSBlbHNlIGlmIChyZXQgPT09IGZhaWx1cmUpIHtcclxuICAgICAgdGhpcy5mYWlsdXJlID0gdHJ1ZTtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2Ugc2NoZW1lIHN0YXJ0XCJdID0gZnVuY3Rpb24gcGFyc2VTY2hlbWVTdGFydChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlBbHBoYShjKSkge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwic2NoZW1lXCI7XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJubyBzY2hlbWVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzY2hlbWVcIl0gPSBmdW5jdGlvbiBwYXJzZVNjaGVtZShjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PT0gNDMgfHwgYyA9PT0gNDUgfHwgYyA9PT0gNDYpIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHIudG9Mb3dlckNhc2UoKTtcclxuICB9IGVsc2UgaWYgKGMgPT09IDU4KSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmICFpc1NwZWNpYWxTY2hlbWUodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlzU3BlY2lhbCh0aGlzLnVybCkgJiYgaXNTcGVjaWFsU2NoZW1lKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKChpbmNsdWRlc0NyZWRlbnRpYWxzKHRoaXMudXJsKSB8fCB0aGlzLnVybC5wb3J0ICE9PSBudWxsKSAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmICh0aGlzLnVybC5ob3N0ID09PSBcIlwiIHx8IHRoaXMudXJsLmhvc3QgPT09IG51bGwpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnVybC5zY2hlbWUgPSB0aGlzLmJ1ZmZlcjtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gIT09IDQ3IHx8IHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0gIT09IDQ3KSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmaWxlXCI7XHJcbiAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgdGhpcy5iYXNlICE9PSBudWxsICYmIHRoaXMuYmFzZS5zY2hlbWUgPT09IHRoaXMudXJsLnNjaGVtZSkge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIHJlbGF0aXZlIG9yIGF1dGhvcml0eVwiO1xyXG4gICAgfSBlbHNlIGlmIChpc1NwZWNpYWwodGhpcy51cmwpKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IHNsYXNoZXNcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSA9PT0gNDcpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBvciBhdXRob3JpdHlcIjtcclxuICAgICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKFwiXCIpO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJjYW5ub3QtYmUtYS1iYXNlLVVSTCBwYXRoXCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJubyBzY2hlbWVcIjtcclxuICAgIHRoaXMucG9pbnRlciA9IC0xO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBubyBzY2hlbWVcIl0gPSBmdW5jdGlvbiBwYXJzZU5vU2NoZW1lKGMpIHtcclxuICBpZiAodGhpcy5iYXNlID09PSBudWxsIHx8ICh0aGlzLmJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjICE9PSAzNSkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH0gZWxzZSBpZiAodGhpcy5iYXNlLmNhbm5vdEJlQUJhc2VVUkwgJiYgYyA9PT0gMzUpIHtcclxuICAgIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYmFzZS5zY2hlbWU7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgdGhpcy51cmwuY2Fubm90QmVBQmFzZVVSTCA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAodGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIHJlbGF0aXZlIG9yIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlU3BlY2lhbFJlbGF0aXZlT3JBdXRob3JpdHkoYykge1xyXG4gIGlmIChjID09PSA0NyAmJiB0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdID09PSA0Nykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwic3BlY2lhbCBhdXRob3JpdHkgaWdub3JlIHNsYXNoZXNcIjtcclxuICAgICsrdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicmVsYXRpdmVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcGF0aCBvciBhdXRob3JpdHlcIl0gPSBmdW5jdGlvbiBwYXJzZVBhdGhPckF1dGhvcml0eShjKSB7XHJcbiAgaWYgKGMgPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJhdXRob3JpdHlcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSByZWxhdGl2ZVwiXSA9IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmUoYykge1xyXG4gIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYmFzZS5zY2hlbWU7XHJcbiAgaWYgKGlzTmFOKGMpKSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICB9IGVsc2UgaWYgKGMgPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZSBzbGFzaFwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNjMpIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSB0aGlzLmJhc2UucXVlcnk7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5Mikge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoMCwgdGhpcy5iYXNlLnBhdGgubGVuZ3RoIC0gMSk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSByZWxhdGl2ZSBzbGFzaFwiXSA9IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVTbGFzaChjKSB7XHJcbiAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSkge1xyXG4gICAgaWYgKGMgPT09IDkyKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImF1dGhvcml0eVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIGF1dGhvcml0eSBzbGFzaGVzXCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsQXV0aG9yaXR5U2xhc2hlcyhjKSB7XHJcbiAgaWYgKGMgPT09IDQ3ICYmIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiXSA9IGZ1bmN0aW9uIHBhcnNlU3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXMoYykge1xyXG4gIGlmIChjICE9PSA0NyAmJiBjICE9PSA5Mikge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiYXV0aG9yaXR5XCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlQXV0aG9yaXR5KGMsIGNTdHIpIHtcclxuICBpZiAoYyA9PT0gNjQpIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5hdEZsYWcpIHtcclxuICAgICAgdGhpcy5idWZmZXIgPSBcIiU0MFwiICsgdGhpcy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0RmxhZyA9IHRydWU7XHJcblxyXG4gICAgLy8gY2FyZWZ1bCwgdGhpcyBpcyBiYXNlZCBvbiBidWZmZXIgYW5kIGhhcyBpdHMgb3duIHBvaW50ZXIgKHRoaXMucG9pbnRlciAhPSBwb2ludGVyKSBhbmQgaW5uZXIgY2hhcnNcclxuICAgIGNvbnN0IGxlbiA9IGNvdW50U3ltYm9scyh0aGlzLmJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBwb2ludGVyID0gMDsgcG9pbnRlciA8IGxlbjsgKytwb2ludGVyKSB7XHJcbiAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHRoaXMuYnVmZmVyLmNvZGVQb2ludEF0KHBvaW50ZXIpO1xyXG5cclxuICAgICAgaWYgKGNvZGVQb2ludCA9PT0gNTggJiYgIXRoaXMucGFzc3dvcmRUb2tlblNlZW5GbGFnKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVuY29kZWRDb2RlUG9pbnRzID0gcGVyY2VudEVuY29kZUNoYXIoY29kZVBvaW50LCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgICAgIGlmICh0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZykge1xyXG4gICAgICAgIHRoaXMudXJsLnBhc3N3b3JkICs9IGVuY29kZWRDb2RlUG9pbnRzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLnVzZXJuYW1lICs9IGVuY29kZWRDb2RlUG9pbnRzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgfSBlbHNlIGlmIChpc05hTihjKSB8fCBjID09PSA0NyB8fCBjID09PSA2MyB8fCBjID09PSAzNSB8fFxyXG4gICAgICAgICAgICAgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpKSB7XHJcbiAgICBpZiAodGhpcy5hdEZsYWcgJiYgdGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvaW50ZXIgLT0gY291bnRTeW1ib2xzKHRoaXMuYnVmZmVyKSArIDE7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJob3N0XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBob3N0bmFtZVwiXSA9XHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBob3N0XCJdID0gZnVuY3Rpb24gcGFyc2VIb3N0TmFtZShjLCBjU3RyKSB7XHJcbiAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSAmJiB0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgaG9zdFwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNTggJiYgIXRoaXMuYXJyRmxhZykge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhvc3QgPSBwYXJzZUhvc3QodGhpcy5idWZmZXIsIGlzU3BlY2lhbCh0aGlzLnVybCkpO1xyXG4gICAgaWYgKGhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cmwuaG9zdCA9IGhvc3Q7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwb3J0XCI7XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlID09PSBcImhvc3RuYW1lXCIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUgfHxcclxuICAgICAgICAgICAgIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlICYmIHRoaXMuYnVmZmVyID09PSBcIlwiICYmXHJcbiAgICAgICAgICAgICAgIChpbmNsdWRlc0NyZWRlbnRpYWxzKHRoaXMudXJsKSB8fCB0aGlzLnVybC5wb3J0ICE9PSBudWxsKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdCA9IHBhcnNlSG9zdCh0aGlzLmJ1ZmZlciwgaXNTcGVjaWFsKHRoaXMudXJsKSk7XHJcbiAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVybC5ob3N0ID0gaG9zdDtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoYyA9PT0gOTEpIHtcclxuICAgICAgdGhpcy5hcnJGbGFnID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoYyA9PT0gOTMpIHtcclxuICAgICAgdGhpcy5hcnJGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcG9ydFwiXSA9IGZ1bmN0aW9uIHBhcnNlUG9ydChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlEaWdpdChjKSkge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9IGVsc2UgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDYzIHx8IGMgPT09IDM1IHx8XHJcbiAgICAgICAgICAgICAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikgfHxcclxuICAgICAgICAgICAgIHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyICE9PSBcIlwiKSB7XHJcbiAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh0aGlzLmJ1ZmZlcik7XHJcbiAgICAgIGlmIChwb3J0ID4gTWF0aC5wb3coMiwgMTYpIC0gMSkge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwucG9ydCA9IHBvcnQgPT09IGRlZmF1bHRQb3J0KHRoaXMudXJsLnNjaGVtZSkgPyBudWxsIDogcG9ydDtcclxuICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoIHN0YXJ0XCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5jb25zdCBmaWxlT3RoZXJ3aXNlQ29kZVBvaW50cyA9IG5ldyBTZXQoWzQ3LCA5MiwgNjMsIDM1XSk7XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZVwiXSA9IGZ1bmN0aW9uIHBhcnNlRmlsZShjKSB7XHJcbiAgdGhpcy51cmwuc2NoZW1lID0gXCJmaWxlXCI7XHJcblxyXG4gIGlmIChjID09PSA0NyB8fCBjID09PSA5Mikge1xyXG4gICAgaWYgKGMgPT09IDkyKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmaWxlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIGlmIChpc05hTihjKSkge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgIH0gZWxzZSBpZiAoYyA9PT0gNjMpIHtcclxuICAgICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gICAgfSBlbHNlIGlmIChjID09PSAzNSkge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaW5wdXQubGVuZ3RoIC0gdGhpcy5wb2ludGVyIC0gMSA9PT0gMCB8fCAvLyByZW1haW5pbmcgY29uc2lzdHMgb2YgMCBjb2RlIHBvaW50c1xyXG4gICAgICAgICAgIWlzV2luZG93c0RyaXZlTGV0dGVyQ29kZVBvaW50cyhjLCB0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICAgKHRoaXMuaW5wdXQubGVuZ3RoIC0gdGhpcy5wb2ludGVyIC0gMSA+PSAyICYmIC8vIHJlbWFpbmluZyBoYXMgYXQgbGVhc3QgMiBjb2RlIHBvaW50c1xyXG4gICAgICAgICAgICFmaWxlT3RoZXJ3aXNlQ29kZVBvaW50cy5oYXModGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICAgIHNob3J0ZW5QYXRoKHRoaXMudXJsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGZpbGUgc2xhc2hcIl0gPSBmdW5jdGlvbiBwYXJzZUZpbGVTbGFzaChjKSB7XHJcbiAgaWYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgaG9zdFwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAodGhpcy5iYXNlICE9PSBudWxsICYmIHRoaXMuYmFzZS5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICAgIGlmIChpc05vcm1hbGl6ZWRXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5iYXNlLnBhdGhbMF0pKSB7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aC5wdXNoKHRoaXMuYmFzZS5wYXRoWzBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZSBob3N0XCJdID0gZnVuY3Rpb24gcGFyc2VGaWxlSG9zdChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDkyIHx8IGMgPT09IDYzIHx8IGMgPT09IDM1KSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSBcIlwiO1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBob3N0ID0gcGFyc2VIb3N0KHRoaXMuYnVmZmVyLCBpc1NwZWNpYWwodGhpcy51cmwpKTtcclxuICAgICAgaWYgKGhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaG9zdCA9PT0gXCJsb2NhbGhvc3RcIikge1xyXG4gICAgICAgIGhvc3QgPSBcIlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSBob3N0O1xyXG5cclxuICAgICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoIHN0YXJ0XCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoIHN0YXJ0XCJdID0gZnVuY3Rpb24gcGFyc2VQYXRoU3RhcnQoYykge1xyXG4gIGlmIChpc1NwZWNpYWwodGhpcy51cmwpKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuXHJcbiAgICBpZiAoYyAhPT0gNDcgJiYgYyAhPT0gOTIpIHtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGMgPT09IDYzKSB7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gIH0gZWxzZSBpZiAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiBjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICB9IGVsc2UgaWYgKGMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgaWYgKGMgIT09IDQ3KSB7XHJcbiAgICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcGF0aFwiXSA9IGZ1bmN0aW9uIHBhcnNlUGF0aChjKSB7XHJcbiAgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB8fFxyXG4gICAgICAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiAoYyA9PT0gNjMgfHwgYyA9PT0gMzUpKSkge1xyXG4gICAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEb3VibGVEb3QodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIHNob3J0ZW5QYXRoKHRoaXMudXJsKTtcclxuICAgICAgaWYgKGMgIT09IDQ3ICYmICEoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaXNTaW5nbGVEb3QodGhpcy5idWZmZXIpICYmIGMgIT09IDQ3ICYmXHJcbiAgICAgICAgICAgICAgICEoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKFwiXCIpO1xyXG4gICAgfSBlbHNlIGlmICghaXNTaW5nbGVEb3QodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIHRoaXMudXJsLnBhdGgubGVuZ3RoID09PSAwICYmIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICAgIGlmICh0aGlzLnVybC5ob3N0ICE9PSBcIlwiICYmIHRoaXMudXJsLmhvc3QgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnVybC5ob3N0ID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlclswXSArIFwiOlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXJsLnBhdGgucHVzaCh0aGlzLmJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICBpZiAodGhpcy51cmwuc2NoZW1lID09PSBcImZpbGVcIiAmJiAoYyA9PT0gdW5kZWZpbmVkIHx8IGMgPT09IDYzIHx8IGMgPT09IDM1KSkge1xyXG4gICAgICB3aGlsZSAodGhpcy51cmwucGF0aC5sZW5ndGggPiAxICYmIHRoaXMudXJsLnBhdGhbMF0gPT09IFwiXCIpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGguc2hpZnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGMgPT09IDYzKSB7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICAgIH1cclxuICAgIGlmIChjID09PSAzNSkge1xyXG4gICAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IElmIGMgaXMgbm90IGEgVVJMIGNvZGUgcG9pbnQgYW5kIG5vdCBcIiVcIiwgcGFyc2UgZXJyb3IuXHJcblxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVmZmVyICs9IHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzUGF0aFBlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgY2Fubm90LWJlLWEtYmFzZS1VUkwgcGF0aFwiXSA9IGZ1bmN0aW9uIHBhcnNlQ2Fubm90QmVBQmFzZVVSTFBhdGgoYykge1xyXG4gIGlmIChjID09PSA2Mykge1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBBZGQ6IG5vdCBhIFVSTCBjb2RlIHBvaW50XHJcbiAgICBpZiAoIWlzTmFOKGMpICYmIGMgIT09IDM3KSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNOYU4oYykpIHtcclxuICAgICAgdGhpcy51cmwucGF0aFswXSA9IHRoaXMudXJsLnBhdGhbMF0gKyBwZXJjZW50RW5jb2RlQ2hhcihjLCBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcXVlcnlcIl0gPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5KGMsIGNTdHIpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgYyA9PT0gMzUpKSB7XHJcbiAgICBpZiAoIWlzU3BlY2lhbCh0aGlzLnVybCkgfHwgdGhpcy51cmwuc2NoZW1lID09PSBcIndzXCIgfHwgdGhpcy51cmwuc2NoZW1lID09PSBcIndzc1wiKSB7XHJcbiAgICAgIHRoaXMuZW5jb2RpbmdPdmVycmlkZSA9IFwidXRmLThcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgQnVmZmVyKHRoaXMuYnVmZmVyKTsgLy8gVE9ETzogVXNlIGVuY29kaW5nIG92ZXJyaWRlIGluc3RlYWRcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGlmIChidWZmZXJbaV0gPCAweDIxIHx8IGJ1ZmZlcltpXSA+IDB4N0UgfHwgYnVmZmVyW2ldID09PSAweDIyIHx8IGJ1ZmZlcltpXSA9PT0gMHgyMyB8fFxyXG4gICAgICAgICAgYnVmZmVyW2ldID09PSAweDNDIHx8IGJ1ZmZlcltpXSA9PT0gMHgzRSkge1xyXG4gICAgICAgIHRoaXMudXJsLnF1ZXJ5ICs9IHBlcmNlbnRFbmNvZGUoYnVmZmVyW2ldKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVybC5xdWVyeSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChidWZmZXJbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogSWYgYyBpcyBub3QgYSBVUkwgY29kZSBwb2ludCBhbmQgbm90IFwiJVwiLCBwYXJzZSBlcnJvci5cclxuICAgIGlmIChjID09PSAzNyAmJlxyXG4gICAgICAoIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSkgfHxcclxuICAgICAgICAhaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDJdKSkpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZnJhZ21lbnRcIl0gPSBmdW5jdGlvbiBwYXJzZUZyYWdtZW50KGMpIHtcclxuICBpZiAoaXNOYU4oYykpIHsgLy8gZG8gbm90aGluZ1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gMHgwKSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBJZiBjIGlzIG5vdCBhIFVSTCBjb2RlIHBvaW50IGFuZCBub3QgXCIlXCIsIHBhcnNlIGVycm9yLlxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXJsLmZyYWdtZW50ICs9IHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzQzBDb250cm9sUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZVVSTCh1cmwsIGV4Y2x1ZGVGcmFnbWVudCkge1xyXG4gIGxldCBvdXRwdXQgPSB1cmwuc2NoZW1lICsgXCI6XCI7XHJcbiAgaWYgKHVybC5ob3N0ICE9PSBudWxsKSB7XHJcbiAgICBvdXRwdXQgKz0gXCIvL1wiO1xyXG5cclxuICAgIGlmICh1cmwudXNlcm5hbWUgIT09IFwiXCIgfHwgdXJsLnBhc3N3b3JkICE9PSBcIlwiKSB7XHJcbiAgICAgIG91dHB1dCArPSB1cmwudXNlcm5hbWU7XHJcbiAgICAgIGlmICh1cmwucGFzc3dvcmQgIT09IFwiXCIpIHtcclxuICAgICAgICBvdXRwdXQgKz0gXCI6XCIgKyB1cmwucGFzc3dvcmQ7XHJcbiAgICAgIH1cclxuICAgICAgb3V0cHV0ICs9IFwiQFwiO1xyXG4gICAgfVxyXG5cclxuICAgIG91dHB1dCArPSBzZXJpYWxpemVIb3N0KHVybC5ob3N0KTtcclxuXHJcbiAgICBpZiAodXJsLnBvcnQgIT09IG51bGwpIHtcclxuICAgICAgb3V0cHV0ICs9IFwiOlwiICsgdXJsLnBvcnQ7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICh1cmwuaG9zdCA9PT0gbnVsbCAmJiB1cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgb3V0cHV0ICs9IFwiLy9cIjtcclxuICB9XHJcblxyXG4gIGlmICh1cmwuY2Fubm90QmVBQmFzZVVSTCkge1xyXG4gICAgb3V0cHV0ICs9IHVybC5wYXRoWzBdO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBmb3IgKGNvbnN0IHN0cmluZyBvZiB1cmwucGF0aCkge1xyXG4gICAgICBvdXRwdXQgKz0gXCIvXCIgKyBzdHJpbmc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodXJsLnF1ZXJ5ICE9PSBudWxsKSB7XHJcbiAgICBvdXRwdXQgKz0gXCI/XCIgKyB1cmwucXVlcnk7XHJcbiAgfVxyXG5cclxuICBpZiAoIWV4Y2x1ZGVGcmFnbWVudCAmJiB1cmwuZnJhZ21lbnQgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIiNcIiArIHVybC5mcmFnbWVudDtcclxuICB9XHJcblxyXG4gIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZU9yaWdpbih0dXBsZSkge1xyXG4gIGxldCByZXN1bHQgPSB0dXBsZS5zY2hlbWUgKyBcIjovL1wiO1xyXG4gIHJlc3VsdCArPSBzZXJpYWxpemVIb3N0KHR1cGxlLmhvc3QpO1xyXG5cclxuICBpZiAodHVwbGUucG9ydCAhPT0gbnVsbCkge1xyXG4gICAgcmVzdWx0ICs9IFwiOlwiICsgdHVwbGUucG9ydDtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZVVSTCA9IHNlcmlhbGl6ZVVSTDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZVVSTE9yaWdpbiA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLW9yaWdpblxyXG4gIHN3aXRjaCAodXJsLnNjaGVtZSkge1xyXG4gICAgY2FzZSBcImJsb2JcIjpcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMT3JpZ2luKG1vZHVsZS5leHBvcnRzLnBhcnNlVVJMKHVybC5wYXRoWzBdKSk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyBzZXJpYWxpemluZyBhbiBvcGFxdWUgb3JpZ2luIHJldHVybnMgXCJudWxsXCJcclxuICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgIH1cclxuICAgIGNhc2UgXCJmdHBcIjpcclxuICAgIGNhc2UgXCJnb3BoZXJcIjpcclxuICAgIGNhc2UgXCJodHRwXCI6XHJcbiAgICBjYXNlIFwiaHR0cHNcIjpcclxuICAgIGNhc2UgXCJ3c1wiOlxyXG4gICAgY2FzZSBcIndzc1wiOlxyXG4gICAgICByZXR1cm4gc2VyaWFsaXplT3JpZ2luKHtcclxuICAgICAgICBzY2hlbWU6IHVybC5zY2hlbWUsXHJcbiAgICAgICAgaG9zdDogdXJsLmhvc3QsXHJcbiAgICAgICAgcG9ydDogdXJsLnBvcnRcclxuICAgICAgfSk7XHJcbiAgICBjYXNlIFwiZmlsZVwiOlxyXG4gICAgICAvLyBzcGVjIHNheXMgXCJleGVyY2lzZSB0byB0aGUgcmVhZGVyXCIsIGNocm9tZSBzYXlzIFwiZmlsZTovL1wiXHJcbiAgICAgIHJldHVybiBcImZpbGU6Ly9cIjtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIC8vIHNlcmlhbGl6aW5nIGFuIG9wYXF1ZSBvcmlnaW4gcmV0dXJucyBcIm51bGxcIlxyXG4gICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuYmFzaWNVUkxQYXJzZSA9IGZ1bmN0aW9uIChpbnB1dCwgb3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgIG9wdGlvbnMgPSB7fTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHVzbSA9IG5ldyBVUkxTdGF0ZU1hY2hpbmUoaW5wdXQsIG9wdGlvbnMuYmFzZVVSTCwgb3B0aW9ucy5lbmNvZGluZ092ZXJyaWRlLCBvcHRpb25zLnVybCwgb3B0aW9ucy5zdGF0ZU92ZXJyaWRlKTtcclxuICBpZiAodXNtLmZhaWx1cmUpIHtcclxuICAgIHJldHVybiBcImZhaWx1cmVcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiB1c20udXJsO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2V0VGhlVXNlcm5hbWUgPSBmdW5jdGlvbiAodXJsLCB1c2VybmFtZSkge1xyXG4gIHVybC51c2VybmFtZSA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHVzZXJuYW1lKTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIHVybC51c2VybmFtZSArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2V0VGhlUGFzc3dvcmQgPSBmdW5jdGlvbiAodXJsLCBwYXNzd29yZCkge1xyXG4gIHVybC5wYXNzd29yZCA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHBhc3N3b3JkKTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIHVybC5wYXNzd29yZCArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplSG9zdCA9IHNlcmlhbGl6ZUhvc3Q7XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0ID0gY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUludGVnZXIgPSBmdW5jdGlvbiAoaW50ZWdlcikge1xyXG4gIHJldHVybiBTdHJpbmcoaW50ZWdlcik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5wYXJzZVVSTCA9IGZ1bmN0aW9uIChpbnB1dCwgb3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgIG9wdGlvbnMgPSB7fTtcclxuICB9XHJcblxyXG4gIC8vIFdlIGRvbid0IGhhbmRsZSBibG9icywgc28gdGhpcyBqdXN0IGRlbGVnYXRlczpcclxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuYmFzaWNVUkxQYXJzZShpbnB1dCwgeyBiYXNlVVJMOiBvcHRpb25zLmJhc2VVUkwsIGVuY29kaW5nT3ZlcnJpZGU6IG9wdGlvbnMuZW5jb2RpbmdPdmVycmlkZSB9KTtcclxufTtcclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHVzbSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgVVJMSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yQXJncykge1xuICAgIGNvbnN0IHVybCA9IGNvbnN0cnVjdG9yQXJnc1swXTtcbiAgICBjb25zdCBiYXNlID0gY29uc3RydWN0b3JBcmdzWzFdO1xuXG4gICAgbGV0IHBhcnNlZEJhc2UgPSBudWxsO1xuICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZEJhc2UgPSB1c20uYmFzaWNVUkxQYXJzZShiYXNlKTtcbiAgICAgIGlmIChwYXJzZWRCYXNlID09PSBcImZhaWx1cmVcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBiYXNlIFVSTFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRVUkwgPSB1c20uYmFzaWNVUkxQYXJzZSh1cmwsIHsgYmFzZVVSTDogcGFyc2VkQmFzZSB9KTtcbiAgICBpZiAocGFyc2VkVVJMID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgVVJMXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX3VybCA9IHBhcnNlZFVSTDtcblxuICAgIC8vIFRPRE86IHF1ZXJ5IHN0dWZmXG4gIH1cblxuICBnZXQgaHJlZigpIHtcbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZVVSTCh0aGlzLl91cmwpO1xuICB9XG5cbiAgc2V0IGhyZWYodikge1xuICAgIGNvbnN0IHBhcnNlZFVSTCA9IHVzbS5iYXNpY1VSTFBhcnNlKHYpO1xuICAgIGlmIChwYXJzZWRVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBVUkxcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsID0gcGFyc2VkVVJMO1xuICB9XG5cbiAgZ2V0IG9yaWdpbigpIHtcbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZVVSTE9yaWdpbih0aGlzLl91cmwpO1xuICB9XG5cbiAgZ2V0IHByb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwuc2NoZW1lICsgXCI6XCI7XG4gIH1cblxuICBzZXQgcHJvdG9jb2wodikge1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYgKyBcIjpcIiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJzY2hlbWUgc3RhcnRcIiB9KTtcbiAgfVxuXG4gIGdldCB1c2VybmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsLnVzZXJuYW1lO1xuICB9XG5cbiAgc2V0IHVzZXJuYW1lKHYpIHtcbiAgICBpZiAodXNtLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQodGhpcy5fdXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5zZXRUaGVVc2VybmFtZSh0aGlzLl91cmwsIHYpO1xuICB9XG5cbiAgZ2V0IHBhc3N3b3JkKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwucGFzc3dvcmQ7XG4gIH1cblxuICBzZXQgcGFzc3dvcmQodikge1xuICAgIGlmICh1c20uY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh0aGlzLl91cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLnNldFRoZVBhc3N3b3JkKHRoaXMuX3VybCwgdik7XG4gIH1cblxuICBnZXQgaG9zdCgpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodXJsLmhvc3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGlmICh1cmwucG9ydCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVzbS5zZXJpYWxpemVIb3N0KHVybC5ob3N0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpICsgXCI6XCIgKyB1c20uc2VyaWFsaXplSW50ZWdlcih1cmwucG9ydCk7XG4gIH1cblxuICBzZXQgaG9zdCh2KSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJob3N0XCIgfSk7XG4gIH1cblxuICBnZXQgaG9zdG5hbWUoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5ob3N0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodGhpcy5fdXJsLmhvc3QpO1xuICB9XG5cbiAgc2V0IGhvc3RuYW1lKHYpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RuYW1lXCIgfSk7XG4gIH1cblxuICBnZXQgcG9ydCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLnBvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSW50ZWdlcih0aGlzLl91cmwucG9ydCk7XG4gIH1cblxuICBzZXQgcG9ydCh2KSB7XG4gICAgaWYgKHVzbS5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHRoaXMuX3VybCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdGhpcy5fdXJsLnBvcnQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInBvcnRcIiB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGF0aG5hbWUoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdXJsLnBhdGhbMF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3VybC5wYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiL1wiICsgdGhpcy5fdXJsLnBhdGguam9pbihcIi9cIik7XG4gIH1cblxuICBzZXQgcGF0aG5hbWUodikge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3VybC5wYXRoID0gW107XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJwYXRoIHN0YXJ0XCIgfSk7XG4gIH1cblxuICBnZXQgc2VhcmNoKCkge1xuICAgIGlmICh0aGlzLl91cmwucXVlcnkgPT09IG51bGwgfHwgdGhpcy5fdXJsLnF1ZXJ5ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCI/XCIgKyB0aGlzLl91cmwucXVlcnk7XG4gIH1cblxuICBzZXQgc2VhcmNoKHYpIHtcbiAgICAvLyBUT0RPOiBxdWVyeSBzdHVmZlxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5fdXJsO1xuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHVybC5xdWVyeSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSB2WzBdID09PSBcIj9cIiA/IHYuc3Vic3RyaW5nKDEpIDogdjtcbiAgICB1cmwucXVlcnkgPSBcIlwiO1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IHVybCwgc3RhdGVPdmVycmlkZTogXCJxdWVyeVwiIH0pO1xuICB9XG5cbiAgZ2V0IGhhc2goKSB7XG4gICAgaWYgKHRoaXMuX3VybC5mcmFnbWVudCA9PT0gbnVsbCB8fCB0aGlzLl91cmwuZnJhZ21lbnQgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIiNcIiArIHRoaXMuX3VybC5mcmFnbWVudDtcbiAgfVxuXG4gIHNldCBoYXNoKHYpIHtcbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdGhpcy5fdXJsLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiI1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgIHRoaXMuX3VybC5mcmFnbWVudCA9IFwiXCI7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwiZnJhZ21lbnRcIiB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy5ocmVmO1xuICB9XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi8vVVJMLWltcGwuanNcIik7XG5cbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBVUkwodXJsKSB7XG4gIGlmICghdGhpcyB8fCB0aGlzW2ltcGxdIHx8ICEodGhpcyBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnVVJMJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdVUkwnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1swXSk7XG4gIGlmIChhcmdzWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0dXAodGhpcywgYXJncyk7XG59XG5cblVSTC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMDsgKytpKSB7XG4gICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS50b0pTT04uYXBwbHkodGhpc1tpbXBsXSwgYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaHJlZlwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ocmVmO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhyZWYgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5VUkwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpcy5ocmVmO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwib3JpZ2luXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9yaWdpbjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicHJvdG9jb2xcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucHJvdG9jb2w7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucHJvdG9jb2wgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJ1c2VybmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS51c2VybmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS51c2VybmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInBhc3N3b3JkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnBhc3N3b3JkO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBhc3N3b3JkID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaG9zdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3QgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJob3N0bmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0bmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ob3N0bmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInBvcnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucG9ydDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wb3J0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicGF0aG5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGF0aG5hbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGF0aG5hbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJzZWFyY2hcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VhcmNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNlYXJjaCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhhc2hcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaGFzaDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5oYXNoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXMob2JqKSB7XG4gICAgcmV0dXJuICEhb2JqICYmIG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb247XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoVVJMLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBVUkwsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBVUkw6IFVSTCB9LFxuICAgIFdvcmtlcjogeyBVUkw6IFVSTCB9XG4gIH1cbn07XG5cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuVVJMID0gcmVxdWlyZShcIi4vVVJMXCIpLmludGVyZmFjZTtcbmV4cG9ydHMuc2VyaWFsaXplVVJMID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplVVJMO1xuZXhwb3J0cy5zZXJpYWxpemVVUkxPcmlnaW4gPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVVUkxPcmlnaW47XG5leHBvcnRzLmJhc2ljVVJMUGFyc2UgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5iYXNpY1VSTFBhcnNlO1xuZXhwb3J0cy5zZXRUaGVVc2VybmFtZSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNldFRoZVVzZXJuYW1lO1xuZXhwb3J0cy5zZXRUaGVQYXNzd29yZCA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNldFRoZVBhc3N3b3JkO1xuZXhwb3J0cy5zZXJpYWxpemVIb3N0ID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplSG9zdDtcbmV4cG9ydHMuc2VyaWFsaXplSW50ZWdlciA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNlcmlhbGl6ZUludGVnZXI7XG5leHBvcnRzLnBhcnNlVVJMID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikucGFyc2VVUkw7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0IChleCkgeyByZXR1cm4gKGV4ICYmICh0eXBlb2YgZXggPT09ICdvYmplY3QnKSAmJiAnZGVmYXVsdCcgaW4gZXgpID8gZXhbJ2RlZmF1bHQnXSA6IGV4OyB9XG5cbnZhciBTdHJlYW0gPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnc3RyZWFtJykpO1xudmFyIGh0dHAgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnaHR0cCcpKTtcbnZhciBVcmwgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgndXJsJykpO1xudmFyIHdoYXR3Z1VybCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd3aGF0d2ctdXJsJykpO1xudmFyIGh0dHBzID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ2h0dHBzJykpO1xudmFyIHpsaWIgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnemxpYicpKTtcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3RtcHZhci9qc2RvbS9ibG9iL2FhODViMmFiZjA3NzY2ZmY3YmY1YzFmNmRhYWZiMzcyNmYyZjJkYjUvbGliL2pzZG9tL2xpdmluZy9ibG9iLmpzXG5cbi8vIGZpeCBmb3IgXCJSZWFkYWJsZVwiIGlzbid0IGEgbmFtZWQgZXhwb3J0IGlzc3VlXG5jb25zdCBSZWFkYWJsZSA9IFN0cmVhbS5SZWFkYWJsZTtcblxuY29uc3QgQlVGRkVSID0gU3ltYm9sKCdidWZmZXInKTtcbmNvbnN0IFRZUEUgPSBTeW1ib2woJ3R5cGUnKTtcblxuY2xhc3MgQmxvYiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXNbVFlQRV0gPSAnJztcblxuXHRcdGNvbnN0IGJsb2JQYXJ0cyA9IGFyZ3VtZW50c1swXTtcblx0XHRjb25zdCBvcHRpb25zID0gYXJndW1lbnRzWzFdO1xuXG5cdFx0Y29uc3QgYnVmZmVycyA9IFtdO1xuXHRcdGxldCBzaXplID0gMDtcblxuXHRcdGlmIChibG9iUGFydHMpIHtcblx0XHRcdGNvbnN0IGEgPSBibG9iUGFydHM7XG5cdFx0XHRjb25zdCBsZW5ndGggPSBOdW1iZXIoYS5sZW5ndGgpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gYVtpXTtcblx0XHRcdFx0bGV0IGJ1ZmZlcjtcblx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCdWZmZXIpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBlbGVtZW50O1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhlbGVtZW50KSkge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGVsZW1lbnQuYnVmZmVyLCBlbGVtZW50LmJ5dGVPZmZzZXQsIGVsZW1lbnQuYnl0ZUxlbmd0aCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20oZWxlbWVudCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJsb2IpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBlbGVtZW50W0JVRkZFUl07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20odHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnID8gZWxlbWVudCA6IFN0cmluZyhlbGVtZW50KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2l6ZSArPSBidWZmZXIubGVuZ3RoO1xuXHRcdFx0XHRidWZmZXJzLnB1c2goYnVmZmVyKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW0JVRkZFUl0gPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpO1xuXG5cdFx0bGV0IHR5cGUgPSBvcHRpb25zICYmIG9wdGlvbnMudHlwZSAhPT0gdW5kZWZpbmVkICYmIFN0cmluZyhvcHRpb25zLnR5cGUpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKHR5cGUgJiYgIS9bXlxcdTAwMjAtXFx1MDA3RV0vLnRlc3QodHlwZSkpIHtcblx0XHRcdHRoaXNbVFlQRV0gPSB0eXBlO1xuXHRcdH1cblx0fVxuXHRnZXQgc2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tCVUZGRVJdLmxlbmd0aDtcblx0fVxuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tUWVBFXTtcblx0fVxuXHR0ZXh0KCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpc1tCVUZGRVJdLnRvU3RyaW5nKCkpO1xuXHR9XG5cdGFycmF5QnVmZmVyKCkge1xuXHRcdGNvbnN0IGJ1ZiA9IHRoaXNbQlVGRkVSXTtcblx0XHRjb25zdCBhYiA9IGJ1Zi5idWZmZXIuc2xpY2UoYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlT2Zmc2V0ICsgYnVmLmJ5dGVMZW5ndGgpO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYWIpO1xuXHR9XG5cdHN0cmVhbSgpIHtcblx0XHRjb25zdCByZWFkYWJsZSA9IG5ldyBSZWFkYWJsZSgpO1xuXHRcdHJlYWRhYmxlLl9yZWFkID0gZnVuY3Rpb24gKCkge307XG5cdFx0cmVhZGFibGUucHVzaCh0aGlzW0JVRkZFUl0pO1xuXHRcdHJlYWRhYmxlLnB1c2gobnVsbCk7XG5cdFx0cmV0dXJuIHJlYWRhYmxlO1xuXHR9XG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiAnW29iamVjdCBCbG9iXSc7XG5cdH1cblx0c2xpY2UoKSB7XG5cdFx0Y29uc3Qgc2l6ZSA9IHRoaXMuc2l6ZTtcblxuXHRcdGNvbnN0IHN0YXJ0ID0gYXJndW1lbnRzWzBdO1xuXHRcdGNvbnN0IGVuZCA9IGFyZ3VtZW50c1sxXTtcblx0XHRsZXQgcmVsYXRpdmVTdGFydCwgcmVsYXRpdmVFbmQ7XG5cdFx0aWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlbGF0aXZlU3RhcnQgPSAwO1xuXHRcdH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7XG5cdFx0XHRyZWxhdGl2ZVN0YXJ0ID0gTWF0aC5tYXgoc2l6ZSArIHN0YXJ0LCAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVsYXRpdmVTdGFydCA9IE1hdGgubWluKHN0YXJ0LCBzaXplKTtcblx0XHR9XG5cdFx0aWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZWxhdGl2ZUVuZCA9IHNpemU7XG5cdFx0fSBlbHNlIGlmIChlbmQgPCAwKSB7XG5cdFx0XHRyZWxhdGl2ZUVuZCA9IE1hdGgubWF4KHNpemUgKyBlbmQsIDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWxhdGl2ZUVuZCA9IE1hdGgubWluKGVuZCwgc2l6ZSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNwYW4gPSBNYXRoLm1heChyZWxhdGl2ZUVuZCAtIHJlbGF0aXZlU3RhcnQsIDApO1xuXG5cdFx0Y29uc3QgYnVmZmVyID0gdGhpc1tCVUZGRVJdO1xuXHRcdGNvbnN0IHNsaWNlZEJ1ZmZlciA9IGJ1ZmZlci5zbGljZShyZWxhdGl2ZVN0YXJ0LCByZWxhdGl2ZVN0YXJ0ICsgc3Bhbik7XG5cdFx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFtdLCB7IHR5cGU6IGFyZ3VtZW50c1syXSB9KTtcblx0XHRibG9iW0JVRkZFUl0gPSBzbGljZWRCdWZmZXI7XG5cdFx0cmV0dXJuIGJsb2I7XG5cdH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvYi5wcm90b3R5cGUsIHtcblx0c2l6ZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHR5cGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzbGljZTogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQmxvYi5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ0Jsb2InLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG4vKipcbiAqIGZldGNoLWVycm9yLmpzXG4gKlxuICogRmV0Y2hFcnJvciBpbnRlcmZhY2UgZm9yIG9wZXJhdGlvbmFsIGVycm9yc1xuICovXG5cbi8qKlxuICogQ3JlYXRlIEZldGNoRXJyb3IgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gICBTdHJpbmcgICAgICBtZXNzYWdlICAgICAgRXJyb3IgbWVzc2FnZSBmb3IgaHVtYW5cbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIHR5cGUgICAgICAgICBFcnJvciB0eXBlIGZvciBtYWNoaW5lXG4gKiBAcGFyYW0gICBTdHJpbmcgICAgICBzeXN0ZW1FcnJvciAgRm9yIE5vZGUuanMgc3lzdGVtIGVycm9yXG4gKiBAcmV0dXJuICBGZXRjaEVycm9yXG4gKi9cbmZ1bmN0aW9uIEZldGNoRXJyb3IobWVzc2FnZSwgdHlwZSwgc3lzdGVtRXJyb3IpIHtcbiAgRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gIC8vIHdoZW4gZXJyLnR5cGUgaXMgYHN5c3RlbWAsIGVyci5jb2RlIGNvbnRhaW5zIHN5c3RlbSBlcnJvciBjb2RlXG4gIGlmIChzeXN0ZW1FcnJvcikge1xuICAgIHRoaXMuY29kZSA9IHRoaXMuZXJybm8gPSBzeXN0ZW1FcnJvci5jb2RlO1xuICB9XG5cbiAgLy8gaGlkZSBjdXN0b20gZXJyb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmcm9tIGVuZC11c2Vyc1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbn1cblxuRmV0Y2hFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5GZXRjaEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZldGNoRXJyb3I7XG5GZXRjaEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ZldGNoRXJyb3InO1xuXG5sZXQgY29udmVydDtcbnRyeSB7XG5cdGNvbnZlcnQgPSByZXF1aXJlKCdlbmNvZGluZycpLmNvbnZlcnQ7XG59IGNhdGNoIChlKSB7fVxuXG5jb25zdCBJTlRFUk5BTFMgPSBTeW1ib2woJ0JvZHkgaW50ZXJuYWxzJyk7XG5cbi8vIGZpeCBhbiBpc3N1ZSB3aGVyZSBcIlBhc3NUaHJvdWdoXCIgaXNuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBQYXNzVGhyb3VnaCA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcblxuLyoqXG4gKiBCb2R5IG1peGluXG4gKlxuICogUmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keVxuICpcbiAqIEBwYXJhbSAgIFN0cmVhbSAgYm9keSAgUmVhZGFibGUgc3RyZWFtXG4gKiBAcGFyYW0gICBPYmplY3QgIG9wdHMgIFJlc3BvbnNlIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuZnVuY3Rpb24gQm9keShib2R5KSB7XG5cdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0dmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuXHQgICAgX3JlZiRzaXplID0gX3JlZi5zaXplO1xuXG5cdGxldCBzaXplID0gX3JlZiRzaXplID09PSB1bmRlZmluZWQgPyAwIDogX3JlZiRzaXplO1xuXHR2YXIgX3JlZiR0aW1lb3V0ID0gX3JlZi50aW1lb3V0O1xuXHRsZXQgdGltZW91dCA9IF9yZWYkdGltZW91dCA9PT0gdW5kZWZpbmVkID8gMCA6IF9yZWYkdGltZW91dDtcblxuXHRpZiAoYm9keSA9PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyB1bmRlZmluZWQgb3IgbnVsbFxuXHRcdGJvZHkgPSBudWxsO1xuXHR9IGVsc2UgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBhIFVSTFNlYXJjaFBhcmFtc1xuXHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5LnRvU3RyaW5nKCkpO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkgOyBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIDsgZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSB7XG5cdFx0Ly8gYm9keSBpcyBBcnJheUJ1ZmZlclxuXHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5KTtcblx0fSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyVmlld1xuXHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpO1xuXHR9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIDsgZWxzZSB7XG5cdFx0Ly8gbm9uZSBvZiB0aGUgYWJvdmVcblx0XHQvLyBjb2VyY2UgdG8gc3RyaW5nIHRoZW4gYnVmZmVyXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKFN0cmluZyhib2R5KSk7XG5cdH1cblx0dGhpc1tJTlRFUk5BTFNdID0ge1xuXHRcdGJvZHksXG5cdFx0ZGlzdHVyYmVkOiBmYWxzZSxcblx0XHRlcnJvcjogbnVsbFxuXHR9O1xuXHR0aGlzLnNpemUgPSBzaXplO1xuXHR0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuXG5cdGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtKSB7XG5cdFx0Ym9keS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRjb25zdCBlcnJvciA9IGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicgPyBlcnIgOiBuZXcgRmV0Y2hFcnJvcihgSW52YWxpZCByZXNwb25zZSBib2R5IHdoaWxlIHRyeWluZyB0byBmZXRjaCAke190aGlzLnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycik7XG5cdFx0XHRfdGhpc1tJTlRFUk5BTFNdLmVycm9yID0gZXJyb3I7XG5cdFx0fSk7XG5cdH1cbn1cblxuQm9keS5wcm90b3R5cGUgPSB7XG5cdGdldCBib2R5KCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMU10uYm9keTtcblx0fSxcblxuXHRnZXQgYm9keVVzZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTXS5kaXN0dXJiZWQ7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIEFycmF5QnVmZmVyXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdGFycmF5QnVmZmVyKCkge1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1Zikge1xuXHRcdFx0cmV0dXJuIGJ1Zi5idWZmZXIuc2xpY2UoYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlT2Zmc2V0ICsgYnVmLmJ5dGVMZW5ndGgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIFJldHVybiByYXcgcmVzcG9uc2UgYXMgQmxvYlxuICAqXG4gICogQHJldHVybiBQcm9taXNlXG4gICovXG5cdGJsb2IoKSB7XG5cdFx0bGV0IGN0ID0gdGhpcy5oZWFkZXJzICYmIHRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIHx8ICcnO1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1Zikge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHQvLyBQcmV2ZW50IGNvcHlpbmdcblx0XHRcdG5ldyBCbG9iKFtdLCB7XG5cdFx0XHRcdHR5cGU6IGN0LnRvTG93ZXJDYXNlKClcblx0XHRcdH0pLCB7XG5cdFx0XHRcdFtCVUZGRVJdOiBidWZcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyBqc29uXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdGpzb24oKSB7XG5cdFx0dmFyIF90aGlzMiA9IHRoaXM7XG5cblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKGJ1ZmZlci50b1N0cmluZygpKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlamVjdChuZXcgRmV0Y2hFcnJvcihgaW52YWxpZCBqc29uIHJlc3BvbnNlIGJvZHkgYXQgJHtfdGhpczIudXJsfSByZWFzb246ICR7ZXJyLm1lc3NhZ2V9YCwgJ2ludmFsaWQtanNvbicpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKipcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMgdGV4dFxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHR0ZXh0KCkge1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0cmV0dXJuIGJ1ZmZlci50b1N0cmluZygpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyBidWZmZXIgKG5vbi1zcGVjIGFwaSlcbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0YnVmZmVyKCkge1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyB0ZXh0LCB3aGlsZSBhdXRvbWF0aWNhbGx5IGRldGVjdGluZyB0aGUgZW5jb2RpbmcgYW5kXG4gICogdHJ5aW5nIHRvIGRlY29kZSB0byBVVEYtOCAobm9uLXNwZWMgYXBpKVxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHR0ZXh0Q29udmVydGVkKCkge1xuXHRcdHZhciBfdGhpczMgPSB0aGlzO1xuXG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHRyZXR1cm4gY29udmVydEJvZHkoYnVmZmVyLCBfdGhpczMuaGVhZGVycyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbi8vIEluIGJyb3dzZXJzLCBhbGwgcHJvcGVydGllcyBhcmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJvZHkucHJvdG90eXBlLCB7XG5cdGJvZHk6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRib2R5VXNlZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGFycmF5QnVmZmVyOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0YmxvYjogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGpzb246IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHR0ZXh0OiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5cbkJvZHkubWl4SW4gPSBmdW5jdGlvbiAocHJvdG8pIHtcblx0Zm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEJvZHkucHJvdG90eXBlKSkge1xuXHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBmdXR1cmUgcHJvb2Zcblx0XHRpZiAoIShuYW1lIGluIHByb3RvKSkge1xuXHRcdFx0Y29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQm9keS5wcm90b3R5cGUsIG5hbWUpO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBuYW1lLCBkZXNjKTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogQ29uc3VtZSBhbmQgY29udmVydCBhbiBlbnRpcmUgQm9keSB0byBhIEJ1ZmZlci5cbiAqXG4gKiBSZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKlxuICogQHJldHVybiAgUHJvbWlzZVxuICovXG5mdW5jdGlvbiBjb25zdW1lQm9keSgpIHtcblx0dmFyIF90aGlzNCA9IHRoaXM7XG5cblx0aWYgKHRoaXNbSU5URVJOQUxTXS5kaXN0dXJiZWQpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKGBib2R5IHVzZWQgYWxyZWFkeSBmb3I6ICR7dGhpcy51cmx9YCkpO1xuXHR9XG5cblx0dGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZCA9IHRydWU7XG5cblx0aWYgKHRoaXNbSU5URVJOQUxTXS5lcnJvcikge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KHRoaXNbSU5URVJOQUxTXS5lcnJvcik7XG5cdH1cblxuXHRsZXQgYm9keSA9IHRoaXMuYm9keTtcblxuXHQvLyBib2R5IGlzIG51bGxcblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgYmxvYlxuXHRpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0Ym9keSA9IGJvZHkuc3RyZWFtKCk7XG5cdH1cblxuXHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZXNvbHZlKGJvZHkpO1xuXHR9XG5cblx0Ly8gaXN0YW5idWwgaWdub3JlIGlmOiBzaG91bGQgbmV2ZXIgaGFwcGVuXG5cdGlmICghKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG5cdH1cblxuXHQvLyBib2R5IGlzIHN0cmVhbVxuXHQvLyBnZXQgcmVhZHkgdG8gYWN0dWFsbHkgY29uc3VtZSB0aGUgYm9keVxuXHRsZXQgYWNjdW0gPSBbXTtcblx0bGV0IGFjY3VtQnl0ZXMgPSAwO1xuXHRsZXQgYWJvcnQgPSBmYWxzZTtcblxuXHRyZXR1cm4gbmV3IEJvZHkuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0bGV0IHJlc1RpbWVvdXQ7XG5cblx0XHQvLyBhbGxvdyB0aW1lb3V0IG9uIHNsb3cgcmVzcG9uc2UgYm9keVxuXHRcdGlmIChfdGhpczQudGltZW91dCkge1xuXHRcdFx0cmVzVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRhYm9ydCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgUmVzcG9uc2UgdGltZW91dCB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtfdGhpczQudXJsfSAob3ZlciAke190aGlzNC50aW1lb3V0fW1zKWAsICdib2R5LXRpbWVvdXQnKSk7XG5cdFx0XHR9LCBfdGhpczQudGltZW91dCk7XG5cdFx0fVxuXG5cdFx0Ly8gaGFuZGxlIHN0cmVhbSBlcnJvcnNcblx0XHRib2R5Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSByZXF1ZXN0IHdhcyBhYm9ydGVkLCByZWplY3Qgd2l0aCB0aGlzIEVycm9yXG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBvdGhlciBlcnJvcnMsIHN1Y2ggYXMgaW5jb3JyZWN0IGNvbnRlbnQtZW5jb2Rpbmdcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGJvZHkgd2hpbGUgdHJ5aW5nIHRvIGZldGNoICR7X3RoaXM0LnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ym9keS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuXHRcdFx0aWYgKGFib3J0IHx8IGNodW5rID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKF90aGlzNC5zaXplICYmIGFjY3VtQnl0ZXMgKyBjaHVuay5sZW5ndGggPiBfdGhpczQuc2l6ZSkge1xuXHRcdFx0XHRhYm9ydCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgY29udGVudCBzaXplIGF0ICR7X3RoaXM0LnVybH0gb3ZlciBsaW1pdDogJHtfdGhpczQuc2l6ZX1gLCAnbWF4LXNpemUnKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0YWNjdW1CeXRlcyArPSBjaHVuay5sZW5ndGg7XG5cdFx0XHRhY2N1bS5wdXNoKGNodW5rKTtcblx0XHR9KTtcblxuXHRcdGJvZHkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChhYm9ydCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNsZWFyVGltZW91dChyZXNUaW1lb3V0KTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShCdWZmZXIuY29uY2F0KGFjY3VtLCBhY2N1bUJ5dGVzKSk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIHN0cmVhbXMgdGhhdCBoYXZlIGFjY3VtdWxhdGVkIHRvbyBtdWNoIGRhdGEgKGlzc3VlICM0MTQpXG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgQ291bGQgbm90IGNyZWF0ZSBCdWZmZXIgZnJvbSByZXNwb25zZSBib2R5IGZvciAke190aGlzNC51cmx9OiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogRGV0ZWN0IGJ1ZmZlciBlbmNvZGluZyBhbmQgY29udmVydCB0byB0YXJnZXQgZW5jb2RpbmdcbiAqIHJlZjogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1odG1sNS0yMDExMDExMy9wYXJzaW5nLmh0bWwjZGV0ZXJtaW5pbmctdGhlLWNoYXJhY3Rlci1lbmNvZGluZ1xuICpcbiAqIEBwYXJhbSAgIEJ1ZmZlciAgYnVmZmVyICAgIEluY29taW5nIGJ1ZmZlclxuICogQHBhcmFtICAgU3RyaW5nICBlbmNvZGluZyAgVGFyZ2V0IGVuY29kaW5nXG4gKiBAcmV0dXJuICBTdHJpbmdcbiAqL1xuZnVuY3Rpb24gY29udmVydEJvZHkoYnVmZmVyLCBoZWFkZXJzKSB7XG5cdGlmICh0eXBlb2YgY29udmVydCAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIHBhY2thZ2UgYGVuY29kaW5nYCBtdXN0IGJlIGluc3RhbGxlZCB0byB1c2UgdGhlIHRleHRDb252ZXJ0ZWQoKSBmdW5jdGlvbicpO1xuXHR9XG5cblx0Y29uc3QgY3QgPSBoZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG5cdGxldCBjaGFyc2V0ID0gJ3V0Zi04Jztcblx0bGV0IHJlcywgc3RyO1xuXG5cdC8vIGhlYWRlclxuXHRpZiAoY3QpIHtcblx0XHRyZXMgPSAvY2hhcnNldD0oW147XSopL2kuZXhlYyhjdCk7XG5cdH1cblxuXHQvLyBubyBjaGFyc2V0IGluIGNvbnRlbnQgdHlwZSwgcGVlayBhdCByZXNwb25zZSBib2R5IGZvciBhdCBtb3N0IDEwMjQgYnl0ZXNcblx0c3RyID0gYnVmZmVyLnNsaWNlKDAsIDEwMjQpLnRvU3RyaW5nKCk7XG5cblx0Ly8gaHRtbDVcblx0aWYgKCFyZXMgJiYgc3RyKSB7XG5cdFx0cmVzID0gLzxtZXRhLis/Y2hhcnNldD0oWydcIl0pKC4rPylcXDEvaS5leGVjKHN0cik7XG5cdH1cblxuXHQvLyBodG1sNFxuXHRpZiAoIXJlcyAmJiBzdHIpIHtcblx0XHRyZXMgPSAvPG1ldGFbXFxzXSs/aHR0cC1lcXVpdj0oWydcIl0pY29udGVudC10eXBlXFwxW1xcc10rP2NvbnRlbnQ9KFsnXCJdKSguKz8pXFwyL2kuZXhlYyhzdHIpO1xuXHRcdGlmICghcmVzKSB7XG5cdFx0XHRyZXMgPSAvPG1ldGFbXFxzXSs/Y29udGVudD0oWydcIl0pKC4rPylcXDFbXFxzXSs/aHR0cC1lcXVpdj0oWydcIl0pY29udGVudC10eXBlXFwzL2kuZXhlYyhzdHIpO1xuXHRcdFx0aWYgKHJlcykge1xuXHRcdFx0XHRyZXMucG9wKCk7IC8vIGRyb3AgbGFzdCBxdW90ZVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZXMpIHtcblx0XHRcdHJlcyA9IC9jaGFyc2V0PSguKikvaS5leGVjKHJlcy5wb3AoKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8geG1sXG5cdGlmICghcmVzICYmIHN0cikge1xuXHRcdHJlcyA9IC88XFw/eG1sLis/ZW5jb2Rpbmc9KFsnXCJdKSguKz8pXFwxL2kuZXhlYyhzdHIpO1xuXHR9XG5cblx0Ly8gZm91bmQgY2hhcnNldFxuXHRpZiAocmVzKSB7XG5cdFx0Y2hhcnNldCA9IHJlcy5wb3AoKTtcblxuXHRcdC8vIHByZXZlbnQgZGVjb2RlIGlzc3VlcyB3aGVuIHNpdGVzIHVzZSBpbmNvcnJlY3QgZW5jb2Rpbmdcblx0XHQvLyByZWY6IGh0dHBzOi8vaHNpdm9uZW4uZmkvZW5jb2RpbmctbWVudS9cblx0XHRpZiAoY2hhcnNldCA9PT0gJ2diMjMxMicgfHwgY2hhcnNldCA9PT0gJ2diaycpIHtcblx0XHRcdGNoYXJzZXQgPSAnZ2IxODAzMCc7XG5cdFx0fVxuXHR9XG5cblx0Ly8gdHVybiByYXcgYnVmZmVycyBpbnRvIGEgc2luZ2xlIHV0Zi04IGJ1ZmZlclxuXHRyZXR1cm4gY29udmVydChidWZmZXIsICdVVEYtOCcsIGNoYXJzZXQpLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogRGV0ZWN0IGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICogcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYml0aW5uL25vZGUtZmV0Y2gvaXNzdWVzLzI5NiNpc3N1ZWNvbW1lbnQtMzA3NTk4MTQzXG4gKlxuICogQHBhcmFtICAgT2JqZWN0ICBvYmogICAgIE9iamVjdCB0byBkZXRlY3QgYnkgdHlwZSBvciBicmFuZFxuICogQHJldHVybiAgU3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKG9iaikge1xuXHQvLyBEdWNrLXR5cGluZyBhcyBhIG5lY2Vzc2FyeSBjb25kaXRpb24uXG5cdGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqLmFwcGVuZCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmRlbGV0ZSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmdldEFsbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmhhcyAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIEJyYW5kLWNoZWNraW5nIGFuZCBtb3JlIGR1Y2stdHlwaW5nIGFzIG9wdGlvbmFsIGNvbmRpdGlvbi5cblx0cmV0dXJuIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVVJMU2VhcmNoUGFyYW1zJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgVVJMU2VhcmNoUGFyYW1zXScgfHwgdHlwZW9mIG9iai5zb3J0ID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBvYmpgIGlzIGEgVzNDIGBCbG9iYCBvYmplY3QgKHdoaWNoIGBGaWxlYCBpbmhlcml0cyBmcm9tKVxuICogQHBhcmFtICB7Kn0gb2JqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Jsb2Iob2JqKSB7XG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoudHlwZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG9iai5zdHJlYW0gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdzdHJpbmcnICYmIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iai5jb25zdHJ1Y3Rvci5uYW1lKSAmJiAvXihCbG9ifEZpbGUpJC8udGVzdChvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG59XG5cbi8qKlxuICogQ2xvbmUgYm9keSBnaXZlbiBSZXMvUmVxIGluc3RhbmNlXG4gKlxuICogQHBhcmFtICAgTWl4ZWQgIGluc3RhbmNlICBSZXNwb25zZSBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcmV0dXJuICBNaXhlZFxuICovXG5mdW5jdGlvbiBjbG9uZShpbnN0YW5jZSkge1xuXHRsZXQgcDEsIHAyO1xuXHRsZXQgYm9keSA9IGluc3RhbmNlLmJvZHk7XG5cblx0Ly8gZG9uJ3QgYWxsb3cgY2xvbmluZyBhIHVzZWQgYm9keVxuXHRpZiAoaW5zdGFuY2UuYm9keVVzZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjbG9uZSBib2R5IGFmdGVyIGl0IGlzIHVzZWQnKTtcblx0fVxuXG5cdC8vIGNoZWNrIHRoYXQgYm9keSBpcyBhIHN0cmVhbSBhbmQgbm90IGZvcm0tZGF0YSBvYmplY3Rcblx0Ly8gbm90ZTogd2UgY2FuJ3QgY2xvbmUgdGhlIGZvcm0tZGF0YSBvYmplY3Qgd2l0aG91dCBoYXZpbmcgaXQgYXMgYSBkZXBlbmRlbmN5XG5cdGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtICYmIHR5cGVvZiBib2R5LmdldEJvdW5kYXJ5ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gdGVlIGluc3RhbmNlIGJvZHlcblx0XHRwMSA9IG5ldyBQYXNzVGhyb3VnaCgpO1xuXHRcdHAyID0gbmV3IFBhc3NUaHJvdWdoKCk7XG5cdFx0Ym9keS5waXBlKHAxKTtcblx0XHRib2R5LnBpcGUocDIpO1xuXHRcdC8vIHNldCBpbnN0YW5jZSBib2R5IHRvIHRlZWQgYm9keSBhbmQgcmV0dXJuIHRoZSBvdGhlciB0ZWVkIGJvZHlcblx0XHRpbnN0YW5jZVtJTlRFUk5BTFNdLmJvZHkgPSBwMTtcblx0XHRib2R5ID0gcDI7XG5cdH1cblxuXHRyZXR1cm4gYm9keTtcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgb3BlcmF0aW9uIFwiZXh0cmFjdCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb20gfG9iamVjdHxcIiBhc1xuICogc3BlY2lmaWVkIGluIHRoZSBzcGVjaWZpY2F0aW9uOlxuICogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGluc3RhbmNlLmJvZHkgaXMgcHJlc2VudC5cbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgaW5zdGFuY2UgIEFueSBvcHRpb25zLmJvZHkgaW5wdXRcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdENvbnRlbnRUeXBlKGJvZHkpIHtcblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIG51bGxcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcblx0XHQvLyBib2R5IGlzIHN0cmluZ1xuXHRcdHJldHVybiAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jztcblx0fSBlbHNlIGlmIChpc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYSBVUkxTZWFyY2hQYXJhbXNcblx0XHRyZXR1cm4gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Jztcblx0fSBlbHNlIGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJsb2Jcblx0XHRyZXR1cm4gYm9keS50eXBlIHx8IG51bGw7XG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBBcnJheUJ1ZmZlclZpZXdcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmICh0eXBlb2YgYm9keS5nZXRCb3VuZGFyeSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdC8vIGRldGVjdCBmb3JtIGRhdGEgaW5wdXQgZnJvbSBmb3JtLWRhdGEgbW9kdWxlXG5cdFx0cmV0dXJuIGBtdWx0aXBhcnQvZm9ybS1kYXRhO2JvdW5kYXJ5PSR7Ym9keS5nZXRCb3VuZGFyeSgpfWA7XG5cdH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkge1xuXHRcdC8vIGJvZHkgaXMgc3RyZWFtXG5cdFx0Ly8gY2FuJ3QgcmVhbGx5IGRvIG11Y2ggYWJvdXQgdGhpc1xuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEJvZHkgY29uc3RydWN0b3IgZGVmYXVsdHMgb3RoZXIgdGhpbmdzIHRvIHN0cmluZ1xuXHRcdHJldHVybiAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jztcblx0fVxufVxuXG4vKipcbiAqIFRoZSBGZXRjaCBTdGFuZGFyZCB0cmVhdHMgdGhpcyBhcyBpZiBcInRvdGFsIGJ5dGVzXCIgaXMgYSBwcm9wZXJ0eSBvbiB0aGUgYm9keS5cbiAqIEZvciB1cywgd2UgaGF2ZSB0byBleHBsaWNpdGx5IGdldCBpdCB3aXRoIGEgZnVuY3Rpb24uXG4gKlxuICogcmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LXRvdGFsLWJ5dGVzXG4gKlxuICogQHBhcmFtICAgQm9keSAgICBpbnN0YW5jZSAgIEluc3RhbmNlIG9mIEJvZHlcbiAqIEByZXR1cm4gIE51bWJlcj8gICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMsIG9yIG51bGwgaWYgbm90IHBvc3NpYmxlXG4gKi9cbmZ1bmN0aW9uIGdldFRvdGFsQnl0ZXMoaW5zdGFuY2UpIHtcblx0Y29uc3QgYm9keSA9IGluc3RhbmNlLmJvZHk7XG5cblxuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdC8vIGJvZHkgaXMgbnVsbFxuXHRcdHJldHVybiAwO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdHJldHVybiBib2R5LnNpemU7XG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcblx0XHRyZXR1cm4gYm9keS5sZW5ndGg7XG5cdH0gZWxzZSBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5nZXRMZW5ndGhTeW5jID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gZGV0ZWN0IGZvcm0gZGF0YSBpbnB1dCBmcm9tIGZvcm0tZGF0YSBtb2R1bGVcblx0XHRpZiAoYm9keS5fbGVuZ3RoUmV0cmlldmVycyAmJiBib2R5Ll9sZW5ndGhSZXRyaWV2ZXJzLmxlbmd0aCA9PSAwIHx8IC8vIDEueFxuXHRcdGJvZHkuaGFzS25vd25MZW5ndGggJiYgYm9keS5oYXNLbm93bkxlbmd0aCgpKSB7XG5cdFx0XHQvLyAyLnhcblx0XHRcdHJldHVybiBib2R5LmdldExlbmd0aFN5bmMoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIFdyaXRlIGEgQm9keSB0byBhIE5vZGUuanMgV3JpdGFibGVTdHJlYW0gKGUuZy4gaHR0cC5SZXF1ZXN0KSBvYmplY3QuXG4gKlxuICogQHBhcmFtICAgQm9keSAgICBpbnN0YW5jZSAgIEluc3RhbmNlIG9mIEJvZHlcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuZnVuY3Rpb24gd3JpdGVUb1N0cmVhbShkZXN0LCBpbnN0YW5jZSkge1xuXHRjb25zdCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyBudWxsXG5cdFx0ZGVzdC5lbmQoKTtcblx0fSBlbHNlIGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHRib2R5LnN0cmVhbSgpLnBpcGUoZGVzdCk7XG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcblx0XHRkZXN0LndyaXRlKGJvZHkpO1xuXHRcdGRlc3QuZW5kKCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cblx0XHRib2R5LnBpcGUoZGVzdCk7XG5cdH1cbn1cblxuLy8gZXhwb3NlIFByb21pc2VcbkJvZHkuUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuXG4vKipcbiAqIGhlYWRlcnMuanNcbiAqXG4gKiBIZWFkZXJzIGNsYXNzIG9mZmVycyBjb252ZW5pZW50IGhlbHBlcnNcbiAqL1xuXG5jb25zdCBpbnZhbGlkVG9rZW5SZWdleCA9IC9bXlxcXl9gYS16QS1aXFwtMC05ISMkJSYnKisufH5dLztcbmNvbnN0IGludmFsaWRIZWFkZXJDaGFyUmVnZXggPSAvW15cXHRcXHgyMC1cXHg3ZVxceDgwLVxceGZmXS87XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTmFtZShuYW1lKSB7XG5cdG5hbWUgPSBgJHtuYW1lfWA7XG5cdGlmIChpbnZhbGlkVG9rZW5SZWdleC50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBpcyBub3QgYSBsZWdhbCBIVFRQIGhlYWRlciBuYW1lYCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVWYWx1ZSh2YWx1ZSkge1xuXHR2YWx1ZSA9IGAke3ZhbHVlfWA7XG5cdGlmIChpbnZhbGlkSGVhZGVyQ2hhclJlZ2V4LnRlc3QodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgJHt2YWx1ZX0gaXMgbm90IGEgbGVnYWwgSFRUUCBoZWFkZXIgdmFsdWVgKTtcblx0fVxufVxuXG4vKipcbiAqIEZpbmQgdGhlIGtleSBpbiB0aGUgbWFwIG9iamVjdCBnaXZlbiBhIGhlYWRlciBuYW1lLlxuICpcbiAqIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJuICBTdHJpbmd8VW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGZpbmQobWFwLCBuYW1lKSB7XG5cdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdGZvciAoY29uc3Qga2V5IGluIG1hcCkge1xuXHRcdGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSkge1xuXHRcdFx0cmV0dXJuIGtleTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgTUFQID0gU3ltYm9sKCdtYXAnKTtcbmNsYXNzIEhlYWRlcnMge1xuXHQvKipcbiAgKiBIZWFkZXJzIGNsYXNzXG4gICpcbiAgKiBAcGFyYW0gICBPYmplY3QgIGhlYWRlcnMgIFJlc3BvbnNlIGhlYWRlcnNcbiAgKiBAcmV0dXJuICBWb2lkXG4gICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGxldCBpbml0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzW01BUF0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5cdFx0aWYgKGluaXQgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG5cdFx0XHRjb25zdCByYXdIZWFkZXJzID0gaW5pdC5yYXcoKTtcblx0XHRcdGNvbnN0IGhlYWRlck5hbWVzID0gT2JqZWN0LmtleXMocmF3SGVhZGVycyk7XG5cblx0XHRcdGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiBoZWFkZXJOYW1lcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIHJhd0hlYWRlcnNbaGVhZGVyTmFtZV0pIHtcblx0XHRcdFx0XHR0aGlzLmFwcGVuZChoZWFkZXJOYW1lLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFdlIGRvbid0IHdvcnJ5IGFib3V0IGNvbnZlcnRpbmcgcHJvcCB0byBCeXRlU3RyaW5nIGhlcmUgYXMgYXBwZW5kKClcblx0XHQvLyB3aWxsIGhhbmRsZSBpdC5cblx0XHRpZiAoaW5pdCA9PSBudWxsKSA7IGVsc2UgaWYgKHR5cGVvZiBpbml0ID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Y29uc3QgbWV0aG9kID0gaW5pdFtTeW1ib2wuaXRlcmF0b3JdO1xuXHRcdFx0aWYgKG1ldGhvZCAhPSBudWxsKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbWV0aG9kICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSGVhZGVyIHBhaXJzIG11c3QgYmUgaXRlcmFibGUnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PlxuXHRcdFx0XHQvLyBOb3RlOiBwZXIgc3BlYyB3ZSBoYXZlIHRvIGZpcnN0IGV4aGF1c3QgdGhlIGxpc3RzIHRoZW4gcHJvY2VzcyB0aGVtXG5cdFx0XHRcdGNvbnN0IHBhaXJzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgcGFpciBvZiBpbml0KSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwYWlyICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgcGFpcltTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFYWNoIGhlYWRlciBwYWlyIG11c3QgYmUgaXRlcmFibGUnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cGFpcnMucHVzaChBcnJheS5mcm9tKHBhaXIpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuXHRcdFx0XHRcdGlmIChwYWlyLmxlbmd0aCAhPT0gMikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRWFjaCBoZWFkZXIgcGFpciBtdXN0IGJlIGEgbmFtZS92YWx1ZSB0dXBsZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmFwcGVuZChwYWlyWzBdLCBwYWlyWzFdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+XG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGluaXQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpbml0W2tleV07XG5cdFx0XHRcdFx0dGhpcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgaW5pdGlhbGl6ZXIgbXVzdCBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBSZXR1cm4gY29tYmluZWQgaGVhZGVyIHZhbHVlIGdpdmVuIG5hbWVcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgSGVhZGVyIG5hbWVcbiAgKiBAcmV0dXJuICBNaXhlZFxuICAqL1xuXHRnZXQobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzW01BUF1ba2V5XS5qb2luKCcsICcpO1xuXHR9XG5cblx0LyoqXG4gICogSXRlcmF0ZSBvdmVyIGFsbCBoZWFkZXJzXG4gICpcbiAgKiBAcGFyYW0gICBGdW5jdGlvbiAgY2FsbGJhY2sgIEV4ZWN1dGVkIGZvciBlYWNoIGl0ZW0gd2l0aCBwYXJhbWV0ZXJzICh2YWx1ZSwgbmFtZSwgdGhpc0FyZylcbiAgKiBAcGFyYW0gICBCb29sZWFuICAgdGhpc0FyZyAgIGB0aGlzYCBjb250ZXh0IGZvciBjYWxsYmFjayBmdW5jdGlvblxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0Zm9yRWFjaChjYWxsYmFjaykge1xuXHRcdGxldCB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG5cblx0XHRsZXQgcGFpcnMgPSBnZXRIZWFkZXJzKHRoaXMpO1xuXHRcdGxldCBpID0gMDtcblx0XHR3aGlsZSAoaSA8IHBhaXJzLmxlbmd0aCkge1xuXHRcdFx0dmFyIF9wYWlycyRpID0gcGFpcnNbaV07XG5cdFx0XHRjb25zdCBuYW1lID0gX3BhaXJzJGlbMF0sXG5cdFx0XHQgICAgICB2YWx1ZSA9IF9wYWlycyRpWzFdO1xuXG5cdFx0XHRjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHZhbHVlLCBuYW1lLCB0aGlzKTtcblx0XHRcdHBhaXJzID0gZ2V0SGVhZGVycyh0aGlzKTtcblx0XHRcdGkrKztcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBPdmVyd3JpdGUgaGVhZGVyIHZhbHVlcyBnaXZlbiBuYW1lXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgICBIZWFkZXIgbmFtZVxuICAqIEBwYXJhbSAgIFN0cmluZyAgdmFsdWUgIEhlYWRlciB2YWx1ZVxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0c2V0KG5hbWUsIHZhbHVlKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWx1ZSA9IGAke3ZhbHVlfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHZhbGlkYXRlVmFsdWUodmFsdWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHR0aGlzW01BUF1ba2V5ICE9PSB1bmRlZmluZWQgPyBrZXkgOiBuYW1lXSA9IFt2YWx1ZV07XG5cdH1cblxuXHQvKipcbiAgKiBBcHBlbmQgYSB2YWx1ZSBvbnRvIGV4aXN0aW5nIGhlYWRlclxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICAgSGVhZGVyIG5hbWVcbiAgKiBAcGFyYW0gICBTdHJpbmcgIHZhbHVlICBIZWFkZXIgdmFsdWVcbiAgKiBAcmV0dXJuICBWb2lkXG4gICovXG5cdGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsdWUgPSBgJHt2YWx1ZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHR2YWxpZGF0ZVZhbHVlKHZhbHVlKTtcblx0XHRjb25zdCBrZXkgPSBmaW5kKHRoaXNbTUFQXSwgbmFtZSk7XG5cdFx0aWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW01BUF1ba2V5XS5wdXNoKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpc1tNQVBdW25hbWVdID0gW3ZhbHVlXTtcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBDaGVjayBmb3IgaGVhZGVyIG5hbWUgZXhpc3RlbmNlXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgICBuYW1lICBIZWFkZXIgbmFtZVxuICAqIEByZXR1cm4gIEJvb2xlYW5cbiAgKi9cblx0aGFzKG5hbWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHRyZXR1cm4gZmluZCh0aGlzW01BUF0sIG5hbWUpICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcbiAgKiBEZWxldGUgYWxsIGhlYWRlciB2YWx1ZXMgZ2l2ZW4gbmFtZVxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICBIZWFkZXIgbmFtZVxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0ZGVsZXRlKG5hbWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHRjb25zdCBrZXkgPSBmaW5kKHRoaXNbTUFQXSwgbmFtZSk7XG5cdFx0aWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkZWxldGUgdGhpc1tNQVBdW2tleV07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG4gICogUmV0dXJuIHJhdyBoZWFkZXJzIChub24tc3BlYyBhcGkpXG4gICpcbiAgKiBAcmV0dXJuICBPYmplY3RcbiAgKi9cblx0cmF3KCkge1xuXHRcdHJldHVybiB0aGlzW01BUF07XG5cdH1cblxuXHQvKipcbiAgKiBHZXQgYW4gaXRlcmF0b3Igb24ga2V5cy5cbiAgKlxuICAqIEByZXR1cm4gIEl0ZXJhdG9yXG4gICovXG5cdGtleXMoKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAna2V5Jyk7XG5cdH1cblxuXHQvKipcbiAgKiBHZXQgYW4gaXRlcmF0b3Igb24gdmFsdWVzLlxuICAqXG4gICogQHJldHVybiAgSXRlcmF0b3JcbiAgKi9cblx0dmFsdWVzKCkge1xuXHRcdHJldHVybiBjcmVhdGVIZWFkZXJzSXRlcmF0b3IodGhpcywgJ3ZhbHVlJyk7XG5cdH1cblxuXHQvKipcbiAgKiBHZXQgYW4gaXRlcmF0b3Igb24gZW50cmllcy5cbiAgKlxuICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaXRlcmF0b3Igb2YgdGhlIEhlYWRlcnMgb2JqZWN0LlxuICAqXG4gICogQHJldHVybiAgSXRlcmF0b3JcbiAgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAna2V5K3ZhbHVlJyk7XG5cdH1cbn1cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSGVhZGVycy5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ0hlYWRlcnMnLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuXHRnZXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRmb3JFYWNoOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c2V0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0YXBwZW5kOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0aGFzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0ZGVsZXRlOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0a2V5czogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHZhbHVlczogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGVudHJpZXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuZnVuY3Rpb24gZ2V0SGVhZGVycyhoZWFkZXJzKSB7XG5cdGxldCBraW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAna2V5K3ZhbHVlJztcblxuXHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVyc1tNQVBdKS5zb3J0KCk7XG5cdHJldHVybiBrZXlzLm1hcChraW5kID09PSAna2V5JyA/IGZ1bmN0aW9uIChrKSB7XG5cdFx0cmV0dXJuIGsudG9Mb3dlckNhc2UoKTtcblx0fSA6IGtpbmQgPT09ICd2YWx1ZScgPyBmdW5jdGlvbiAoaykge1xuXHRcdHJldHVybiBoZWFkZXJzW01BUF1ba10uam9pbignLCAnKTtcblx0fSA6IGZ1bmN0aW9uIChrKSB7XG5cdFx0cmV0dXJuIFtrLnRvTG93ZXJDYXNlKCksIGhlYWRlcnNbTUFQXVtrXS5qb2luKCcsICcpXTtcblx0fSk7XG59XG5cbmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKCdpbnRlcm5hbCcpO1xuXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzSXRlcmF0b3IodGFyZ2V0LCBraW5kKSB7XG5cdGNvbnN0IGl0ZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUpO1xuXHRpdGVyYXRvcltJTlRFUk5BTF0gPSB7XG5cdFx0dGFyZ2V0LFxuXHRcdGtpbmQsXG5cdFx0aW5kZXg6IDBcblx0fTtcblx0cmV0dXJuIGl0ZXJhdG9yO1xufVxuXG5jb25zdCBIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Yoe1xuXHRuZXh0KCkge1xuXHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuXHRcdGlmICghdGhpcyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykgIT09IEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgb2YgYHRoaXNgIGlzIG5vdCBhIEhlYWRlcnNJdGVyYXRvcicpO1xuXHRcdH1cblxuXHRcdHZhciBfSU5URVJOQUwgPSB0aGlzW0lOVEVSTkFMXTtcblx0XHRjb25zdCB0YXJnZXQgPSBfSU5URVJOQUwudGFyZ2V0LFxuXHRcdCAgICAgIGtpbmQgPSBfSU5URVJOQUwua2luZCxcblx0XHQgICAgICBpbmRleCA9IF9JTlRFUk5BTC5pbmRleDtcblxuXHRcdGNvbnN0IHZhbHVlcyA9IGdldEhlYWRlcnModGFyZ2V0LCBraW5kKTtcblx0XHRjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoO1xuXHRcdGlmIChpbmRleCA+PSBsZW4pIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdGRvbmU6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTF0uaW5kZXggPSBpbmRleCArIDE7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dmFsdWU6IHZhbHVlc1tpbmRleF0sXG5cdFx0XHRkb25lOiBmYWxzZVxuXHRcdH07XG5cdH1cbn0sIE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSkpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdIZWFkZXJzSXRlcmF0b3InLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG4vKipcbiAqIEV4cG9ydCB0aGUgSGVhZGVycyBvYmplY3QgaW4gYSBmb3JtIHRoYXQgTm9kZS5qcyBjYW4gY29uc3VtZS5cbiAqXG4gKiBAcGFyYW0gICBIZWFkZXJzICBoZWFkZXJzXG4gKiBAcmV0dXJuICBPYmplY3RcbiAqL1xuZnVuY3Rpb24gZXhwb3J0Tm9kZUNvbXBhdGlibGVIZWFkZXJzKGhlYWRlcnMpIHtcblx0Y29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7IF9fcHJvdG9fXzogbnVsbCB9LCBoZWFkZXJzW01BUF0pO1xuXG5cdC8vIGh0dHAucmVxdWVzdCgpIG9ubHkgc3VwcG9ydHMgc3RyaW5nIGFzIEhvc3QgaGVhZGVyLiBUaGlzIGhhY2sgbWFrZXNcblx0Ly8gc3BlY2lmeWluZyBjdXN0b20gSG9zdCBoZWFkZXIgcG9zc2libGUuXG5cdGNvbnN0IGhvc3RIZWFkZXJLZXkgPSBmaW5kKGhlYWRlcnNbTUFQXSwgJ0hvc3QnKTtcblx0aWYgKGhvc3RIZWFkZXJLZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdG9ialtob3N0SGVhZGVyS2V5XSA9IG9ialtob3N0SGVhZGVyS2V5XVswXTtcblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgSGVhZGVycyBvYmplY3QgZnJvbSBhbiBvYmplY3Qgb2YgaGVhZGVycywgaWdub3JpbmcgdGhvc2UgdGhhdCBkb1xuICogbm90IGNvbmZvcm0gdG8gSFRUUCBncmFtbWFyIHByb2R1Y3Rpb25zLlxuICpcbiAqIEBwYXJhbSAgIE9iamVjdCAgb2JqICBPYmplY3Qgb2YgaGVhZGVyc1xuICogQHJldHVybiAgSGVhZGVyc1xuICovXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzTGVuaWVudChvYmopIHtcblx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG5cdGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG5cdFx0aWYgKGludmFsaWRUb2tlblJlZ2V4LnRlc3QobmFtZSkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmpbbmFtZV0pKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBvYmpbbmFtZV0pIHtcblx0XHRcdFx0aWYgKGludmFsaWRIZWFkZXJDaGFyUmVnZXgudGVzdCh2YWwpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGhlYWRlcnNbTUFQXVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1tNQVBdW25hbWVdID0gW3ZhbF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aGVhZGVyc1tNQVBdW25hbWVdLnB1c2godmFsKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIWludmFsaWRIZWFkZXJDaGFyUmVnZXgudGVzdChvYmpbbmFtZV0pKSB7XG5cdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0gPSBbb2JqW25hbWVdXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhlYWRlcnM7XG59XG5cbmNvbnN0IElOVEVSTkFMUyQxID0gU3ltYm9sKCdSZXNwb25zZSBpbnRlcm5hbHMnKTtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiU1RBVFVTX0NPREVTXCIgYXJlbid0IGEgbmFtZWQgZXhwb3J0IGZvciBub2RlIDwxMFxuY29uc3QgU1RBVFVTX0NPREVTID0gaHR0cC5TVEFUVVNfQ09ERVM7XG5cbi8qKlxuICogUmVzcG9uc2UgY2xhc3NcbiAqXG4gKiBAcGFyYW0gICBTdHJlYW0gIGJvZHkgIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtICAgT2JqZWN0ICBvcHRzICBSZXNwb25zZSBvcHRpb25zXG4gKiBAcmV0dXJuICBWb2lkXG4gKi9cbmNsYXNzIFJlc3BvbnNlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0bGV0IGJvZHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG5cdFx0bGV0IG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG5cdFx0Qm9keS5jYWxsKHRoaXMsIGJvZHksIG9wdHMpO1xuXG5cdFx0Y29uc3Qgc3RhdHVzID0gb3B0cy5zdGF0dXMgfHwgMjAwO1xuXHRcdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRzLmhlYWRlcnMpO1xuXG5cdFx0aWYgKGJvZHkgIT0gbnVsbCAmJiAhaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG5cdFx0XHRjb25zdCBjb250ZW50VHlwZSA9IGV4dHJhY3RDb250ZW50VHlwZShib2R5KTtcblx0XHRcdGlmIChjb250ZW50VHlwZSkge1xuXHRcdFx0XHRoZWFkZXJzLmFwcGVuZCgnQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbSU5URVJOQUxTJDFdID0ge1xuXHRcdFx0dXJsOiBvcHRzLnVybCxcblx0XHRcdHN0YXR1cyxcblx0XHRcdHN0YXR1c1RleHQ6IG9wdHMuc3RhdHVzVGV4dCB8fCBTVEFUVVNfQ09ERVNbc3RhdHVzXSxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRjb3VudGVyOiBvcHRzLmNvdW50ZXJcblx0XHR9O1xuXHR9XG5cblx0Z2V0IHVybCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0udXJsIHx8ICcnO1xuXHR9XG5cblx0Z2V0IHN0YXR1cygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzO1xuXHR9XG5cblx0LyoqXG4gICogQ29udmVuaWVuY2UgcHJvcGVydHkgcmVwcmVzZW50aW5nIGlmIHRoZSByZXF1ZXN0IGVuZGVkIG5vcm1hbGx5XG4gICovXG5cdGdldCBvaygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzID49IDIwMCAmJiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXMgPCAzMDA7XG5cdH1cblxuXHRnZXQgcmVkaXJlY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uY291bnRlciA+IDA7XG5cdH1cblxuXHRnZXQgc3RhdHVzVGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzVGV4dDtcblx0fVxuXG5cdGdldCBoZWFkZXJzKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5oZWFkZXJzO1xuXHR9XG5cblx0LyoqXG4gICogQ2xvbmUgdGhpcyByZXNwb25zZVxuICAqXG4gICogQHJldHVybiAgUmVzcG9uc2VcbiAgKi9cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXNwb25zZShjbG9uZSh0aGlzKSwge1xuXHRcdFx0dXJsOiB0aGlzLnVybCxcblx0XHRcdHN0YXR1czogdGhpcy5zdGF0dXMsXG5cdFx0XHRzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG5cdFx0XHRoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG5cdFx0XHRvazogdGhpcy5vayxcblx0XHRcdHJlZGlyZWN0ZWQ6IHRoaXMucmVkaXJlY3RlZFxuXHRcdH0pO1xuXHR9XG59XG5cbkJvZHkubWl4SW4oUmVzcG9uc2UucHJvdG90eXBlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XG5cdHVybDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHN0YXR1czogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdG9rOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0cmVkaXJlY3RlZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHN0YXR1c1RleHQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoZWFkZXJzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0Y2xvbmU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc3BvbnNlLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnUmVzcG9uc2UnLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5jb25zdCBJTlRFUk5BTFMkMiA9IFN5bWJvbCgnUmVxdWVzdCBpbnRlcm5hbHMnKTtcbmNvbnN0IFVSTCA9IFVybC5VUkwgfHwgd2hhdHdnVXJsLlVSTDtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiZm9ybWF0XCIsIFwicGFyc2VcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBwYXJzZV91cmwgPSBVcmwucGFyc2U7XG5jb25zdCBmb3JtYXRfdXJsID0gVXJsLmZvcm1hdDtcblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBgbmV3IFVSTGAgdG8gaGFuZGxlIGFyYml0cmFyeSBVUkxzXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB1cmxTdHJcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVVJMKHVybFN0cikge1xuXHQvKlxuIFx0Q2hlY2sgd2hldGhlciB0aGUgVVJMIGlzIGFic29sdXRlIG9yIG5vdFxuIFx0XHRTY2hlbWU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xXG4gXHRBYnNvbHV0ZSBVUkw6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4zXG4gKi9cblx0aWYgKC9eW2EtekEtWl1bYS16QS1aXFxkK1xcLS5dKjovLmV4ZWModXJsU3RyKSkge1xuXHRcdHVybFN0ciA9IG5ldyBVUkwodXJsU3RyKS50b1N0cmluZygpO1xuXHR9XG5cblx0Ly8gRmFsbGJhY2sgdG8gb2xkIGltcGxlbWVudGF0aW9uIGZvciBhcmJpdHJhcnkgVVJMc1xuXHRyZXR1cm4gcGFyc2VfdXJsKHVybFN0cik7XG59XG5cbmNvbnN0IHN0cmVhbURlc3RydWN0aW9uU3VwcG9ydGVkID0gJ2Rlc3Ryb3knIGluIFN0cmVhbS5SZWFkYWJsZS5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBSZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgaW5wdXRcbiAqIEByZXR1cm4gIEJvb2xlYW5cbiAqL1xuZnVuY3Rpb24gaXNSZXF1ZXN0KGlucHV0KSB7XG5cdHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBpbnB1dFtJTlRFUk5BTFMkMl0gPT09ICdvYmplY3QnO1xufVxuXG5mdW5jdGlvbiBpc0Fib3J0U2lnbmFsKHNpZ25hbCkge1xuXHRjb25zdCBwcm90byA9IHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsID09PSAnb2JqZWN0JyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc2lnbmFsKTtcblx0cmV0dXJuICEhKHByb3RvICYmIHByb3RvLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBYm9ydFNpZ25hbCcpO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgY2xhc3NcbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgIGlucHV0ICBVcmwgb3IgUmVxdWVzdCBpbnN0YW5jZVxuICogQHBhcmFtICAgT2JqZWN0ICBpbml0ICAgQ3VzdG9tIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuY2xhc3MgUmVxdWVzdCB7XG5cdGNvbnN0cnVjdG9yKGlucHV0KSB7XG5cdFx0bGV0IGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG5cdFx0bGV0IHBhcnNlZFVSTDtcblxuXHRcdC8vIG5vcm1hbGl6ZSBpbnB1dFxuXHRcdGlmICghaXNSZXF1ZXN0KGlucHV0KSkge1xuXHRcdFx0aWYgKGlucHV0ICYmIGlucHV0LmhyZWYpIHtcblx0XHRcdFx0Ly8gaW4gb3JkZXIgdG8gc3VwcG9ydCBOb2RlLmpzJyBVcmwgb2JqZWN0czsgdGhvdWdoIFdIQVRXRydzIFVSTCBvYmplY3RzXG5cdFx0XHRcdC8vIHdpbGwgZmFsbCBpbnRvIHRoaXMgYnJhbmNoIGFsc28gKHNpbmNlIHRoZWlyIGB0b1N0cmluZygpYCB3aWxsIHJldHVyblxuXHRcdFx0XHQvLyBgaHJlZmAgcHJvcGVydHkgYW55d2F5KVxuXHRcdFx0XHRwYXJzZWRVUkwgPSBwYXJzZVVSTChpbnB1dC5ocmVmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGNvZXJjZSBpbnB1dCB0byBhIHN0cmluZyBiZWZvcmUgYXR0ZW1wdGluZyB0byBwYXJzZVxuXHRcdFx0XHRwYXJzZWRVUkwgPSBwYXJzZVVSTChgJHtpbnB1dH1gKTtcblx0XHRcdH1cblx0XHRcdGlucHV0ID0ge307XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGlucHV0LnVybCk7XG5cdFx0fVxuXG5cdFx0bGV0IG1ldGhvZCA9IGluaXQubWV0aG9kIHx8IGlucHV0Lm1ldGhvZCB8fCAnR0VUJztcblx0XHRtZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKTtcblxuXHRcdGlmICgoaW5pdC5ib2R5ICE9IG51bGwgfHwgaXNSZXF1ZXN0KGlucHV0KSAmJiBpbnB1dC5ib2R5ICE9PSBudWxsKSAmJiAobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3Qgd2l0aCBHRVQvSEVBRCBtZXRob2QgY2Fubm90IGhhdmUgYm9keScpO1xuXHRcdH1cblxuXHRcdGxldCBpbnB1dEJvZHkgPSBpbml0LmJvZHkgIT0gbnVsbCA/IGluaXQuYm9keSA6IGlzUmVxdWVzdChpbnB1dCkgJiYgaW5wdXQuYm9keSAhPT0gbnVsbCA/IGNsb25lKGlucHV0KSA6IG51bGw7XG5cblx0XHRCb2R5LmNhbGwodGhpcywgaW5wdXRCb2R5LCB7XG5cdFx0XHR0aW1lb3V0OiBpbml0LnRpbWVvdXQgfHwgaW5wdXQudGltZW91dCB8fCAwLFxuXHRcdFx0c2l6ZTogaW5pdC5zaXplIHx8IGlucHV0LnNpemUgfHwgMFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGluaXQuaGVhZGVycyB8fCBpbnB1dC5oZWFkZXJzIHx8IHt9KTtcblxuXHRcdGlmIChpbnB1dEJvZHkgIT0gbnVsbCAmJiAhaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG5cdFx0XHRjb25zdCBjb250ZW50VHlwZSA9IGV4dHJhY3RDb250ZW50VHlwZShpbnB1dEJvZHkpO1xuXHRcdFx0aWYgKGNvbnRlbnRUeXBlKSB7XG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHNpZ25hbCA9IGlzUmVxdWVzdChpbnB1dCkgPyBpbnB1dC5zaWduYWwgOiBudWxsO1xuXHRcdGlmICgnc2lnbmFsJyBpbiBpbml0KSBzaWduYWwgPSBpbml0LnNpZ25hbDtcblxuXHRcdGlmIChzaWduYWwgIT0gbnVsbCAmJiAhaXNBYm9ydFNpZ25hbChzaWduYWwpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzaWduYWwgdG8gYmUgYW4gaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCcpO1xuXHRcdH1cblxuXHRcdHRoaXNbSU5URVJOQUxTJDJdID0ge1xuXHRcdFx0bWV0aG9kLFxuXHRcdFx0cmVkaXJlY3Q6IGluaXQucmVkaXJlY3QgfHwgaW5wdXQucmVkaXJlY3QgfHwgJ2ZvbGxvdycsXG5cdFx0XHRoZWFkZXJzLFxuXHRcdFx0cGFyc2VkVVJMLFxuXHRcdFx0c2lnbmFsXG5cdFx0fTtcblxuXHRcdC8vIG5vZGUtZmV0Y2gtb25seSBvcHRpb25zXG5cdFx0dGhpcy5mb2xsb3cgPSBpbml0LmZvbGxvdyAhPT0gdW5kZWZpbmVkID8gaW5pdC5mb2xsb3cgOiBpbnB1dC5mb2xsb3cgIT09IHVuZGVmaW5lZCA/IGlucHV0LmZvbGxvdyA6IDIwO1xuXHRcdHRoaXMuY29tcHJlc3MgPSBpbml0LmNvbXByZXNzICE9PSB1bmRlZmluZWQgPyBpbml0LmNvbXByZXNzIDogaW5wdXQuY29tcHJlc3MgIT09IHVuZGVmaW5lZCA/IGlucHV0LmNvbXByZXNzIDogdHJ1ZTtcblx0XHR0aGlzLmNvdW50ZXIgPSBpbml0LmNvdW50ZXIgfHwgaW5wdXQuY291bnRlciB8fCAwO1xuXHRcdHRoaXMuYWdlbnQgPSBpbml0LmFnZW50IHx8IGlucHV0LmFnZW50O1xuXHR9XG5cblx0Z2V0IG1ldGhvZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0ubWV0aG9kO1xuXHR9XG5cblx0Z2V0IHVybCgpIHtcblx0XHRyZXR1cm4gZm9ybWF0X3VybCh0aGlzW0lOVEVSTkFMUyQyXS5wYXJzZWRVUkwpO1xuXHR9XG5cblx0Z2V0IGhlYWRlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDJdLmhlYWRlcnM7XG5cdH1cblxuXHRnZXQgcmVkaXJlY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDJdLnJlZGlyZWN0O1xuXHR9XG5cblx0Z2V0IHNpZ25hbCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0uc2lnbmFsO1xuXHR9XG5cblx0LyoqXG4gICogQ2xvbmUgdGhpcyByZXF1ZXN0XG4gICpcbiAgKiBAcmV0dXJuICBSZXF1ZXN0XG4gICovXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdCh0aGlzKTtcblx0fVxufVxuXG5Cb2R5Lm1peEluKFJlcXVlc3QucHJvdG90eXBlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlcXVlc3QucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdSZXF1ZXN0Jyxcblx0d3JpdGFibGU6IGZhbHNlLFxuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcblx0bWV0aG9kOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dXJsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0aGVhZGVyczogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHJlZGlyZWN0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0Y2xvbmU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzaWduYWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgUmVxdWVzdCB0byBOb2RlLmpzIGh0dHAgcmVxdWVzdCBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAgIFJlcXVlc3QgIEEgUmVxdWVzdCBpbnN0YW5jZVxuICogQHJldHVybiAgT2JqZWN0ICAgVGhlIG9wdGlvbnMgb2JqZWN0IHRvIGJlIHBhc3NlZCB0byBodHRwLnJlcXVlc3RcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZVJlcXVlc3RPcHRpb25zKHJlcXVlc3QpIHtcblx0Y29uc3QgcGFyc2VkVVJMID0gcmVxdWVzdFtJTlRFUk5BTFMkMl0ucGFyc2VkVVJMO1xuXHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMocmVxdWVzdFtJTlRFUk5BTFMkMl0uaGVhZGVycyk7XG5cblx0Ly8gZmV0Y2ggc3RlcCAxLjNcblx0aWYgKCFoZWFkZXJzLmhhcygnQWNjZXB0JykpIHtcblx0XHRoZWFkZXJzLnNldCgnQWNjZXB0JywgJyovKicpO1xuXHR9XG5cblx0Ly8gQmFzaWMgZmV0Y2hcblx0aWYgKCFwYXJzZWRVUkwucHJvdG9jb2wgfHwgIXBhcnNlZFVSTC5ob3N0bmFtZSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09ubHkgYWJzb2x1dGUgVVJMcyBhcmUgc3VwcG9ydGVkJyk7XG5cdH1cblxuXHRpZiAoIS9eaHR0cHM/OiQvLnRlc3QocGFyc2VkVVJMLnByb3RvY29sKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09ubHkgSFRUUChTKSBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZCcpO1xuXHR9XG5cblx0aWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIFN0cmVhbS5SZWFkYWJsZSAmJiAhc3RyZWFtRGVzdHJ1Y3Rpb25TdXBwb3J0ZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhbmNlbGxhdGlvbiBvZiBzdHJlYW1lZCByZXF1ZXN0cyB3aXRoIEFib3J0U2lnbmFsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbm9kZSA8IDgnKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBzdGVwcyAyLjQtMi43XG5cdGxldCBjb250ZW50TGVuZ3RoVmFsdWUgPSBudWxsO1xuXHRpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgL14oUE9TVHxQVVQpJC9pLnRlc3QocmVxdWVzdC5tZXRob2QpKSB7XG5cdFx0Y29udGVudExlbmd0aFZhbHVlID0gJzAnO1xuXHR9XG5cdGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuXHRcdGNvbnN0IHRvdGFsQnl0ZXMgPSBnZXRUb3RhbEJ5dGVzKHJlcXVlc3QpO1xuXHRcdGlmICh0eXBlb2YgdG90YWxCeXRlcyA9PT0gJ251bWJlcicpIHtcblx0XHRcdGNvbnRlbnRMZW5ndGhWYWx1ZSA9IFN0cmluZyh0b3RhbEJ5dGVzKTtcblx0XHR9XG5cdH1cblx0aWYgKGNvbnRlbnRMZW5ndGhWYWx1ZSkge1xuXHRcdGhlYWRlcnMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGNvbnRlbnRMZW5ndGhWYWx1ZSk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggc3RlcCAyLjExXG5cdGlmICghaGVhZGVycy5oYXMoJ1VzZXItQWdlbnQnKSkge1xuXHRcdGhlYWRlcnMuc2V0KCdVc2VyLUFnZW50JywgJ25vZGUtZmV0Y2gvMS4wICgraHR0cHM6Ly9naXRodWIuY29tL2JpdGlubi9ub2RlLWZldGNoKScpO1xuXHR9XG5cblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXAgMi4xNVxuXHRpZiAocmVxdWVzdC5jb21wcmVzcyAmJiAhaGVhZGVycy5oYXMoJ0FjY2VwdC1FbmNvZGluZycpKSB7XG5cdFx0aGVhZGVycy5zZXQoJ0FjY2VwdC1FbmNvZGluZycsICdnemlwLGRlZmxhdGUnKTtcblx0fVxuXG5cdGxldCBhZ2VudCA9IHJlcXVlc3QuYWdlbnQ7XG5cdGlmICh0eXBlb2YgYWdlbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRhZ2VudCA9IGFnZW50KHBhcnNlZFVSTCk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCA0LjJcblx0Ly8gY2h1bmtlZCBlbmNvZGluZyBpcyBoYW5kbGVkIGJ5IE5vZGUuanNcblxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkVVJMLCB7XG5cdFx0bWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcblx0XHRoZWFkZXJzOiBleHBvcnROb2RlQ29tcGF0aWJsZUhlYWRlcnMoaGVhZGVycyksXG5cdFx0YWdlbnRcblx0fSk7XG59XG5cbi8qKlxuICogYWJvcnQtZXJyb3IuanNcbiAqXG4gKiBBYm9ydEVycm9yIGludGVyZmFjZSBmb3IgY2FuY2VsbGVkIHJlcXVlc3RzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgQWJvcnRFcnJvciBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIG1lc3NhZ2UgICAgICBFcnJvciBtZXNzYWdlIGZvciBodW1hblxuICogQHJldHVybiAgQWJvcnRFcnJvclxuICovXG5mdW5jdGlvbiBBYm9ydEVycm9yKG1lc3NhZ2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICB0aGlzLnR5cGUgPSAnYWJvcnRlZCc7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cbiAgLy8gaGlkZSBjdXN0b20gZXJyb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmcm9tIGVuZC11c2Vyc1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbn1cblxuQWJvcnRFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5BYm9ydEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFib3J0RXJyb3I7XG5BYm9ydEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0Fib3J0RXJyb3InO1xuXG5jb25zdCBVUkwkMSA9IFVybC5VUkwgfHwgd2hhdHdnVXJsLlVSTDtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiUGFzc1Rocm91Z2hcIiwgXCJyZXNvbHZlXCIgYXJlbid0IGEgbmFtZWQgZXhwb3J0IGZvciBub2RlIDwxMFxuY29uc3QgUGFzc1Rocm91Z2gkMSA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcblxuY29uc3QgaXNEb21haW5PclN1YmRvbWFpbiA9IGZ1bmN0aW9uIGlzRG9tYWluT3JTdWJkb21haW4oZGVzdGluYXRpb24sIG9yaWdpbmFsKSB7XG5cdGNvbnN0IG9yaWcgPSBuZXcgVVJMJDEob3JpZ2luYWwpLmhvc3RuYW1lO1xuXHRjb25zdCBkZXN0ID0gbmV3IFVSTCQxKGRlc3RpbmF0aW9uKS5ob3N0bmFtZTtcblxuXHRyZXR1cm4gb3JpZyA9PT0gZGVzdCB8fCBvcmlnW29yaWcubGVuZ3RoIC0gZGVzdC5sZW5ndGggLSAxXSA9PT0gJy4nICYmIG9yaWcuZW5kc1dpdGgoZGVzdCk7XG59O1xuXG4vKipcbiAqIGlzU2FtZVByb3RvY29sIHJlcG9ydHMgd2hldGhlciB0aGUgdHdvIHByb3ZpZGVkIFVSTHMgdXNlIHRoZSBzYW1lIHByb3RvY29sLlxuICpcbiAqIEJvdGggZG9tYWlucyBtdXN0IGFscmVhZHkgYmUgaW4gY2Fub25pY2FsIGZvcm0uXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IG9yaWdpbmFsXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IGRlc3RpbmF0aW9uXG4gKi9cbmNvbnN0IGlzU2FtZVByb3RvY29sID0gZnVuY3Rpb24gaXNTYW1lUHJvdG9jb2woZGVzdGluYXRpb24sIG9yaWdpbmFsKSB7XG5cdGNvbnN0IG9yaWcgPSBuZXcgVVJMJDEob3JpZ2luYWwpLnByb3RvY29sO1xuXHRjb25zdCBkZXN0ID0gbmV3IFVSTCQxKGRlc3RpbmF0aW9uKS5wcm90b2NvbDtcblxuXHRyZXR1cm4gb3JpZyA9PT0gZGVzdDtcbn07XG5cbi8qKlxuICogRmV0Y2ggZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgICB1cmwgICBBYnNvbHV0ZSB1cmwgb3IgUmVxdWVzdCBpbnN0YW5jZVxuICogQHBhcmFtICAgT2JqZWN0ICAgb3B0cyAgRmV0Y2ggb3B0aW9uc1xuICogQHJldHVybiAgUHJvbWlzZVxuICovXG5mdW5jdGlvbiBmZXRjaCh1cmwsIG9wdHMpIHtcblxuXHQvLyBhbGxvdyBjdXN0b20gcHJvbWlzZVxuXHRpZiAoIWZldGNoLlByb21pc2UpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ25hdGl2ZSBwcm9taXNlIG1pc3NpbmcsIHNldCBmZXRjaC5Qcm9taXNlIHRvIHlvdXIgZmF2b3JpdGUgYWx0ZXJuYXRpdmUnKTtcblx0fVxuXG5cdEJvZHkuUHJvbWlzZSA9IGZldGNoLlByb21pc2U7XG5cblx0Ly8gd3JhcCBodHRwLnJlcXVlc3QgaW50byBmZXRjaFxuXHRyZXR1cm4gbmV3IGZldGNoLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdC8vIGJ1aWxkIHJlcXVlc3Qgb2JqZWN0XG5cdFx0Y29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwgb3B0cyk7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldE5vZGVSZXF1ZXN0T3B0aW9ucyhyZXF1ZXN0KTtcblxuXHRcdGNvbnN0IHNlbmQgPSAob3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBodHRwcyA6IGh0dHApLnJlcXVlc3Q7XG5cdFx0Y29uc3Qgc2lnbmFsID0gcmVxdWVzdC5zaWduYWw7XG5cblx0XHRsZXQgcmVzcG9uc2UgPSBudWxsO1xuXG5cdFx0Y29uc3QgYWJvcnQgPSBmdW5jdGlvbiBhYm9ydCgpIHtcblx0XHRcdGxldCBlcnJvciA9IG5ldyBBYm9ydEVycm9yKCdUaGUgdXNlciBhYm9ydGVkIGEgcmVxdWVzdC4nKTtcblx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHRpZiAocmVxdWVzdC5ib2R5ICYmIHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIFN0cmVhbS5SZWFkYWJsZSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlcXVlc3QuYm9keSwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UuYm9keSkgcmV0dXJuO1xuXHRcdFx0cmVzcG9uc2UuYm9keS5lbWl0KCdlcnJvcicsIGVycm9yKTtcblx0XHR9O1xuXG5cdFx0aWYgKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkge1xuXHRcdFx0YWJvcnQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBhYm9ydEFuZEZpbmFsaXplID0gZnVuY3Rpb24gYWJvcnRBbmRGaW5hbGl6ZSgpIHtcblx0XHRcdGFib3J0KCk7XG5cdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdH07XG5cblx0XHQvLyBzZW5kIHJlcXVlc3Rcblx0XHRjb25zdCByZXEgPSBzZW5kKG9wdGlvbnMpO1xuXHRcdGxldCByZXFUaW1lb3V0O1xuXG5cdFx0aWYgKHNpZ25hbCkge1xuXHRcdFx0c2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZmluYWxpemUoKSB7XG5cdFx0XHRyZXEuYWJvcnQoKTtcblx0XHRcdGlmIChzaWduYWwpIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0QW5kRmluYWxpemUpO1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHJlcVRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0LnRpbWVvdXQpIHtcblx0XHRcdHJlcS5vbmNlKCdzb2NrZXQnLCBmdW5jdGlvbiAoc29ja2V0KSB7XG5cdFx0XHRcdHJlcVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYG5ldHdvcmsgdGltZW91dCBhdDogJHtyZXF1ZXN0LnVybH1gLCAncmVxdWVzdC10aW1lb3V0JykpO1xuXHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdH0sIHJlcXVlc3QudGltZW91dCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGByZXF1ZXN0IHRvICR7cmVxdWVzdC51cmx9IGZhaWxlZCwgcmVhc29uOiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpKTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmJvZHkpIHtcblx0XHRcdFx0ZGVzdHJveVN0cmVhbShyZXNwb25zZS5ib2R5LCBlcnIpO1xuXHRcdFx0fVxuXG5cdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdH0pO1xuXG5cdFx0Zml4UmVzcG9uc2VDaHVua2VkVHJhbnNmZXJCYWRFbmRpbmcocmVxLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmJvZHkpIHtcblx0XHRcdFx0ZGVzdHJveVN0cmVhbShyZXNwb25zZS5ib2R5LCBlcnIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0LyogYzggaWdub3JlIG5leHQgMTggKi9cblx0XHRpZiAocGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnN1YnN0cmluZygxKSkgPCAxNCkge1xuXHRcdFx0Ly8gQmVmb3JlIE5vZGUuanMgMTQsIHBpcGVsaW5lKCkgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBhc3luYyBpdGVyYXRvcnMgYW5kIGRvZXMgbm90IGFsd2F5c1xuXHRcdFx0Ly8gcHJvcGVybHkgaGFuZGxlIHdoZW4gdGhlIHNvY2tldCBjbG9zZS9lbmQgZXZlbnRzIGFyZSBvdXQgb2Ygb3JkZXIuXG5cdFx0XHRyZXEub24oJ3NvY2tldCcsIGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdHMuYWRkTGlzdGVuZXIoJ2Nsb3NlJywgZnVuY3Rpb24gKGhhZEVycm9yKSB7XG5cdFx0XHRcdFx0Ly8gaWYgYSBkYXRhIGxpc3RlbmVyIGlzIHN0aWxsIHByZXNlbnQgd2UgZGlkbid0IGVuZCBjbGVhbmx5XG5cdFx0XHRcdFx0Y29uc3QgaGFzRGF0YUxpc3RlbmVyID0gcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwO1xuXG5cdFx0XHRcdFx0Ly8gaWYgZW5kIGhhcHBlbmVkIGJlZm9yZSBjbG9zZSBidXQgdGhlIHNvY2tldCBkaWRuJ3QgZW1pdCBhbiBlcnJvciwgZG8gaXQgbm93XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlICYmIGhhc0RhdGFMaXN0ZW5lciAmJiAhaGFkRXJyb3IgJiYgIShzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1ByZW1hdHVyZSBjbG9zZScpO1xuXHRcdFx0XHRcdFx0ZXJyLmNvZGUgPSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnO1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UuYm9keS5lbWl0KCdlcnJvcicsIGVycik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJlcS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQocmVxVGltZW91dCk7XG5cblx0XHRcdGNvbnN0IGhlYWRlcnMgPSBjcmVhdGVIZWFkZXJzTGVuaWVudChyZXMuaGVhZGVycyk7XG5cblx0XHRcdC8vIEhUVFAgZmV0Y2ggc3RlcCA1XG5cdFx0XHRpZiAoZmV0Y2guaXNSZWRpcmVjdChyZXMuc3RhdHVzQ29kZSkpIHtcblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuMlxuXHRcdFx0XHRjb25zdCBsb2NhdGlvbiA9IGhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpO1xuXG5cdFx0XHRcdC8vIEhUVFAgZmV0Y2ggc3RlcCA1LjNcblx0XHRcdFx0bGV0IGxvY2F0aW9uVVJMID0gbnVsbDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2NhdGlvblVSTCA9IGxvY2F0aW9uID09PSBudWxsID8gbnVsbCA6IG5ldyBVUkwkMShsb2NhdGlvbiwgcmVxdWVzdC51cmwpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdC8vIGVycm9yIGhlcmUgY2FuIG9ubHkgYmUgaW52YWxpZCBVUkwgaW4gTG9jYXRpb246IGhlYWRlclxuXHRcdFx0XHRcdC8vIGRvIG5vdCB0aHJvdyB3aGVuIG9wdGlvbnMucmVkaXJlY3QgPT0gbWFudWFsXG5cdFx0XHRcdFx0Ly8gbGV0IHRoZSB1c2VyIGV4dHJhY3QgdGhlIGVycm9ybmVvdXMgcmVkaXJlY3QgVVJMXG5cdFx0XHRcdFx0aWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdtYW51YWwnKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHVyaSByZXF1ZXN0ZWQgcmVzcG9uZHMgd2l0aCBhbiBpbnZhbGlkIHJlZGlyZWN0IFVSTDogJHtsb2NhdGlvbn1gLCAnaW52YWxpZC1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuNVxuXHRcdFx0XHRzd2l0Y2ggKHJlcXVlc3QucmVkaXJlY3QpIHtcblx0XHRcdFx0XHRjYXNlICdlcnJvcic6XG5cdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHVyaSByZXF1ZXN0ZWQgcmVzcG9uZHMgd2l0aCBhIHJlZGlyZWN0LCByZWRpcmVjdCBtb2RlIGlzIHNldCB0byBlcnJvcjogJHtyZXF1ZXN0LnVybH1gLCAnbm8tcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdGNhc2UgJ21hbnVhbCc6XG5cdFx0XHRcdFx0XHQvLyBub2RlLWZldGNoLXNwZWNpZmljIHN0ZXA6IG1ha2UgbWFudWFsIHJlZGlyZWN0IGEgYml0IGVhc2llciB0byB1c2UgYnkgc2V0dGluZyB0aGUgTG9jYXRpb24gaGVhZGVyIHZhbHVlIHRvIHRoZSByZXNvbHZlZCBVUkwuXG5cdFx0XHRcdFx0XHRpZiAobG9jYXRpb25VUkwgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaGFuZGxlIGNvcnJ1cHRlZCBoZWFkZXJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRoZWFkZXJzLnNldCgnTG9jYXRpb24nLCBsb2NhdGlvblVSTCk7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBub2RlanMgc2VydmVyIHByZXZlbnQgaW52YWxpZCByZXNwb25zZSBoZWFkZXJzLCB3ZSBjYW4ndCB0ZXN0IHRoaXMgdGhyb3VnaCBub3JtYWwgcmVxdWVzdFxuXHRcdFx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdmb2xsb3cnOlxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDJcblx0XHRcdFx0XHRcdGlmIChsb2NhdGlvblVSTCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDVcblx0XHRcdFx0XHRcdGlmIChyZXF1ZXN0LmNvdW50ZXIgPj0gcmVxdWVzdC5mb2xsb3cpIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBtYXhpbXVtIHJlZGlyZWN0IHJlYWNoZWQgYXQ6ICR7cmVxdWVzdC51cmx9YCwgJ21heC1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgNiAoY291bnRlciBpbmNyZW1lbnQpXG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgUmVxdWVzdCBvYmplY3QuXG5cdFx0XHRcdFx0XHRjb25zdCByZXF1ZXN0T3B0cyA9IHtcblx0XHRcdFx0XHRcdFx0aGVhZGVyczogbmV3IEhlYWRlcnMocmVxdWVzdC5oZWFkZXJzKSxcblx0XHRcdFx0XHRcdFx0Zm9sbG93OiByZXF1ZXN0LmZvbGxvdyxcblx0XHRcdFx0XHRcdFx0Y291bnRlcjogcmVxdWVzdC5jb3VudGVyICsgMSxcblx0XHRcdFx0XHRcdFx0YWdlbnQ6IHJlcXVlc3QuYWdlbnQsXG5cdFx0XHRcdFx0XHRcdGNvbXByZXNzOiByZXF1ZXN0LmNvbXByZXNzLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRib2R5OiByZXF1ZXN0LmJvZHksXG5cdFx0XHRcdFx0XHRcdHNpZ25hbDogcmVxdWVzdC5zaWduYWwsXG5cdFx0XHRcdFx0XHRcdHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcblx0XHRcdFx0XHRcdFx0c2l6ZTogcmVxdWVzdC5zaXplXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRpZiAoIWlzRG9tYWluT3JTdWJkb21haW4ocmVxdWVzdC51cmwsIGxvY2F0aW9uVVJMKSB8fCAhaXNTYW1lUHJvdG9jb2wocmVxdWVzdC51cmwsIGxvY2F0aW9uVVJMKSkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgWydhdXRob3JpemF0aW9uJywgJ3d3dy1hdXRoZW50aWNhdGUnLCAnY29va2llJywgJ2Nvb2tpZTInXSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRzLmhlYWRlcnMuZGVsZXRlKG5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCA5XG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgIT09IDMwMyAmJiByZXF1ZXN0LmJvZHkgJiYgZ2V0VG90YWxCeXRlcyhyZXF1ZXN0KSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoJ0Nhbm5vdCBmb2xsb3cgcmVkaXJlY3Qgd2l0aCBib2R5IGJlaW5nIGEgcmVhZGFibGUgc3RyZWFtJywgJ3Vuc3VwcG9ydGVkLXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCAxMVxuXHRcdFx0XHRcdFx0aWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDMgfHwgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwMikgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdQT1NUJykge1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5tZXRob2QgPSAnR0VUJztcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuYm9keSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuaGVhZGVycy5kZWxldGUoJ2NvbnRlbnQtbGVuZ3RoJyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCAxNVxuXHRcdFx0XHRcdFx0cmVzb2x2ZShmZXRjaChuZXcgUmVxdWVzdChsb2NhdGlvblVSTCwgcmVxdWVzdE9wdHMpKSk7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByZXBhcmUgcmVzcG9uc2Vcblx0XHRcdHJlcy5vbmNlKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChzaWduYWwpIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0QW5kRmluYWxpemUpO1xuXHRcdFx0fSk7XG5cdFx0XHRsZXQgYm9keSA9IHJlcy5waXBlKG5ldyBQYXNzVGhyb3VnaCQxKCkpO1xuXG5cdFx0XHRjb25zdCByZXNwb25zZV9vcHRpb25zID0ge1xuXHRcdFx0XHR1cmw6IHJlcXVlc3QudXJsLFxuXHRcdFx0XHRzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuXHRcdFx0XHRzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcblx0XHRcdFx0aGVhZGVyczogaGVhZGVycyxcblx0XHRcdFx0c2l6ZTogcmVxdWVzdC5zaXplLFxuXHRcdFx0XHR0aW1lb3V0OiByZXF1ZXN0LnRpbWVvdXQsXG5cdFx0XHRcdGNvdW50ZXI6IHJlcXVlc3QuY291bnRlclxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gSFRUUC1uZXR3b3JrIGZldGNoIHN0ZXAgMTIuMS4xLjNcblx0XHRcdGNvbnN0IGNvZGluZ3MgPSBoZWFkZXJzLmdldCgnQ29udGVudC1FbmNvZGluZycpO1xuXG5cdFx0XHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCAxMi4xLjEuNDogaGFuZGxlIGNvbnRlbnQgY29kaW5nc1xuXG5cdFx0XHQvLyBpbiBmb2xsb3dpbmcgc2NlbmFyaW9zIHdlIGlnbm9yZSBjb21wcmVzc2lvbiBzdXBwb3J0XG5cdFx0XHQvLyAxLiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGRpc2FibGVkXG5cdFx0XHQvLyAyLiBIRUFEIHJlcXVlc3Rcblx0XHRcdC8vIDMuIG5vIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyXG5cdFx0XHQvLyA0LiBubyBjb250ZW50IHJlc3BvbnNlICgyMDQpXG5cdFx0XHQvLyA1LiBjb250ZW50IG5vdCBtb2RpZmllZCByZXNwb25zZSAoMzA0KVxuXHRcdFx0aWYgKCFyZXF1ZXN0LmNvbXByZXNzIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcgfHwgY29kaW5ncyA9PT0gbnVsbCB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHJlcy5zdGF0dXNDb2RlID09PSAzMDQpIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBOb2RlIHY2K1xuXHRcdFx0Ly8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG5cdFx0XHQvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcblx0XHRcdC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cblx0XHRcdC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG5cdFx0XHRjb25zdCB6bGliT3B0aW9ucyA9IHtcblx0XHRcdFx0Zmx1c2g6IHpsaWIuWl9TWU5DX0ZMVVNILFxuXHRcdFx0XHRmaW5pc2hGbHVzaDogemxpYi5aX1NZTkNfRkxVU0hcblx0XHRcdH07XG5cblx0XHRcdC8vIGZvciBnemlwXG5cdFx0XHRpZiAoY29kaW5ncyA9PSAnZ3ppcCcgfHwgY29kaW5ncyA9PSAneC1nemlwJykge1xuXHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlR3VuemlwKHpsaWJPcHRpb25zKSk7XG5cdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmb3IgZGVmbGF0ZVxuXHRcdFx0aWYgKGNvZGluZ3MgPT0gJ2RlZmxhdGUnIHx8IGNvZGluZ3MgPT0gJ3gtZGVmbGF0ZScpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIHRoZSBpbmZhbW91cyByYXcgZGVmbGF0ZSByZXNwb25zZSBmcm9tIG9sZCBzZXJ2ZXJzXG5cdFx0XHRcdC8vIGEgaGFjayBmb3Igb2xkIElJUyBhbmQgQXBhY2hlIHNlcnZlcnNcblx0XHRcdFx0Y29uc3QgcmF3ID0gcmVzLnBpcGUobmV3IFBhc3NUaHJvdWdoJDEoKSk7XG5cdFx0XHRcdHJhdy5vbmNlKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG5cdFx0XHRcdFx0Ly8gc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzc1MTk4Mjhcblx0XHRcdFx0XHRpZiAoKGNodW5rWzBdICYgMHgwRikgPT09IDB4MDgpIHtcblx0XHRcdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVJbmZsYXRlKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyYXcub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQvLyBzb21lIG9sZCBJSVMgc2VydmVycyByZXR1cm4gemVyby1sZW5ndGggT0sgZGVmbGF0ZSByZXNwb25zZXMsIHNvICdkYXRhJyBpcyBuZXZlciBlbWl0dGVkLlxuXHRcdFx0XHRcdGlmICghcmVzcG9uc2UpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmb3IgYnJcblx0XHRcdGlmIChjb2RpbmdzID09ICdicicgJiYgdHlwZW9mIHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKTtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIG90aGVyd2lzZSwgdXNlIHJlc3BvbnNlIGFzLWlzXG5cdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdH0pO1xuXG5cdFx0d3JpdGVUb1N0cmVhbShyZXEsIHJlcXVlc3QpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGZpeFJlc3BvbnNlQ2h1bmtlZFRyYW5zZmVyQmFkRW5kaW5nKHJlcXVlc3QsIGVycm9yQ2FsbGJhY2spIHtcblx0bGV0IHNvY2tldDtcblxuXHRyZXF1ZXN0Lm9uKCdzb2NrZXQnLCBmdW5jdGlvbiAocykge1xuXHRcdHNvY2tldCA9IHM7XG5cdH0pO1xuXG5cdHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cdFx0Y29uc3QgaGVhZGVycyA9IHJlc3BvbnNlLmhlYWRlcnM7XG5cblx0XHRpZiAoaGVhZGVyc1sndHJhbnNmZXItZW5jb2RpbmcnXSA9PT0gJ2NodW5rZWQnICYmICFoZWFkZXJzWydjb250ZW50LWxlbmd0aCddKSB7XG5cdFx0XHRyZXNwb25zZS5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uIChoYWRFcnJvcikge1xuXHRcdFx0XHQvLyB0ZXN0cyBmb3Igc29ja2V0IHByZXNlbmNlLCBhcyBpbiBzb21lIHNpdHVhdGlvbnMgdGhlXG5cdFx0XHRcdC8vIHRoZSAnc29ja2V0JyBldmVudCBpcyBub3QgdHJpZ2dlcmVkIGZvciB0aGUgcmVxdWVzdFxuXHRcdFx0XHQvLyAoaGFwcGVucyBpbiBkZW5vKSwgYXZvaWRzIGBUeXBlRXJyb3JgXG5cdFx0XHRcdC8vIGlmIGEgZGF0YSBsaXN0ZW5lciBpcyBzdGlsbCBwcmVzZW50IHdlIGRpZG4ndCBlbmQgY2xlYW5seVxuXHRcdFx0XHRjb25zdCBoYXNEYXRhTGlzdGVuZXIgPSBzb2NrZXQgJiYgc29ja2V0Lmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDA7XG5cblx0XHRcdFx0aWYgKGhhc0RhdGFMaXN0ZW5lciAmJiAhaGFkRXJyb3IpIHtcblx0XHRcdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1ByZW1hdHVyZSBjbG9zZScpO1xuXHRcdFx0XHRcdGVyci5jb2RlID0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJztcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKGVycik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lTdHJlYW0oc3RyZWFtLCBlcnIpIHtcblx0aWYgKHN0cmVhbS5kZXN0cm95KSB7XG5cdFx0c3RyZWFtLmRlc3Ryb3koZXJyKTtcblx0fSBlbHNlIHtcblx0XHQvLyBub2RlIDwgOFxuXHRcdHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG5cdFx0c3RyZWFtLmVuZCgpO1xuXHR9XG59XG5cbi8qKlxuICogUmVkaXJlY3QgY29kZSBtYXRjaGluZ1xuICpcbiAqIEBwYXJhbSAgIE51bWJlciAgIGNvZGUgIFN0YXR1cyBjb2RlXG4gKiBAcmV0dXJuICBCb29sZWFuXG4gKi9cbmZldGNoLmlzUmVkaXJlY3QgPSBmdW5jdGlvbiAoY29kZSkge1xuXHRyZXR1cm4gY29kZSA9PT0gMzAxIHx8IGNvZGUgPT09IDMwMiB8fCBjb2RlID09PSAzMDMgfHwgY29kZSA9PT0gMzA3IHx8IGNvZGUgPT09IDMwODtcbn07XG5cbi8vIGV4cG9zZSBQcm9taXNlXG5mZXRjaC5Qcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZldGNoO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cztcbmV4cG9ydHMuSGVhZGVycyA9IEhlYWRlcnM7XG5leHBvcnRzLlJlcXVlc3QgPSBSZXF1ZXN0O1xuZXhwb3J0cy5SZXNwb25zZSA9IFJlc3BvbnNlO1xuZXhwb3J0cy5GZXRjaEVycm9yID0gRmV0Y2hFcnJvcjtcbmV4cG9ydHMuQWJvcnRFcnJvciA9IEFib3J0RXJyb3I7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY2xhc3MgRGVwcmVjYXRpb24gZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTsgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSAob25seSBhdmFpbGFibGUgb24gVjgpXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLm5hbWUgPSAnRGVwcmVjYXRpb24nO1xuICB9XG5cbn1cblxuZXhwb3J0cy5EZXByZWNhdGlvbiA9IERlcHJlY2F0aW9uO1xuIiwKICAgICIvLyBSZXR1cm5zIGEgd3JhcHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB3cmFwcGVkIGNhbGxiYWNrXG4vLyBUaGUgd3JhcHBlciBmdW5jdGlvbiBzaG91bGQgZG8gc29tZSBzdHVmZiwgYW5kIHJldHVybiBhXG4vLyBwcmVzdW1hYmx5IGRpZmZlcmVudCBjYWxsYmFjayBmdW5jdGlvbi5cbi8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG93biBwcm9wZXJ0aWVzIGFyZSByZXRhaW5lZCwgc28gdGhhdFxuLy8gZGVjb3JhdGlvbnMgYW5kIHN1Y2ggYXJlIG5vdCBsb3N0IGFsb25nIHRoZSB3YXkuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBweVxuZnVuY3Rpb24gd3JhcHB5IChmbiwgY2IpIHtcbiAgaWYgKGZuICYmIGNiKSByZXR1cm4gd3JhcHB5KGZuKShjYilcblxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25lZWQgd3JhcHBlciBmdW5jdGlvbicpXG5cbiAgT2JqZWN0LmtleXMoZm4pLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICB3cmFwcGVyW2tdID0gZm5ba11cbiAgfSlcblxuICByZXR1cm4gd3JhcHBlclxuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV1cbiAgICB9XG4gICAgdmFyIHJldCA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJnc1thcmdzLmxlbmd0aC0xXVxuICAgIGlmICh0eXBlb2YgcmV0ID09PSAnZnVuY3Rpb24nICYmIHJldCAhPT0gY2IpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNiKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldFtrXSA9IGNiW2tdXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cbiIsCiAgICAidmFyIHdyYXBweSA9IHJlcXVpcmUoJ3dyYXBweScpXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBweShvbmNlKVxubW9kdWxlLmV4cG9ydHMuc3RyaWN0ID0gd3JhcHB5KG9uY2VTdHJpY3QpXG5cbm9uY2UucHJvdG8gPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgJ29uY2UnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBvbmNlKHRoaXMpXG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCAnb25jZVN0cmljdCcsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG9uY2VTdHJpY3QodGhpcylcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxufSlcblxuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGYgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGYuY2FsbGVkKSByZXR1cm4gZi52YWx1ZVxuICAgIGYuY2FsbGVkID0gdHJ1ZVxuICAgIHJldHVybiBmLnZhbHVlID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG4gIGYuY2FsbGVkID0gZmFsc2VcbiAgcmV0dXJuIGZcbn1cblxuZnVuY3Rpb24gb25jZVN0cmljdCAoZm4pIHtcbiAgdmFyIGYgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGYuY2FsbGVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGYub25jZUVycm9yKVxuICAgIGYuY2FsbGVkID0gdHJ1ZVxuICAgIHJldHVybiBmLnZhbHVlID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG4gIHZhciBuYW1lID0gZm4ubmFtZSB8fCAnRnVuY3Rpb24gd3JhcHBlZCB3aXRoIGBvbmNlYCdcbiAgZi5vbmNlRXJyb3IgPSBuYW1lICsgXCIgc2hvdWxkbid0IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZVwiXG4gIGYuY2FsbGVkID0gZmFsc2VcbiAgcmV0dXJuIGZcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIGRlcHJlY2F0aW9uID0gcmVxdWlyZSgnZGVwcmVjYXRpb24nKTtcbnZhciBvbmNlID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ29uY2UnKSk7XG5cbmNvbnN0IGxvZ09uY2VDb2RlID0gb25jZShkZXByZWNhdGlvbiA9PiBjb25zb2xlLndhcm4oZGVwcmVjYXRpb24pKTtcbmNvbnN0IGxvZ09uY2VIZWFkZXJzID0gb25jZShkZXByZWNhdGlvbiA9PiBjb25zb2xlLndhcm4oZGVwcmVjYXRpb24pKTtcbi8qKlxuICogRXJyb3Igd2l0aCBleHRyYSBwcm9wZXJ0aWVzIHRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmdcbiAqL1xuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlKTsgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSAob25seSBhdmFpbGFibGUgb24gVjgpXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZTtcbiAgICBsZXQgaGVhZGVycztcblxuICAgIGlmIChcImhlYWRlcnNcIiBpbiBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmhlYWRlcnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gICAgfVxuXG4gICAgaWYgKFwicmVzcG9uc2VcIiBpbiBvcHRpb25zKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICAgIGhlYWRlcnMgPSBvcHRpb25zLnJlc3BvbnNlLmhlYWRlcnM7XG4gICAgfSAvLyByZWRhY3QgcmVxdWVzdCBjcmVkZW50aWFscyB3aXRob3V0IG11dGF0aW5nIG9yaWdpbmFsIHJlcXVlc3Qgb3B0aW9uc1xuXG5cbiAgICBjb25zdCByZXF1ZXN0Q29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCk7XG5cbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgcmVxdWVzdENvcHkuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLCB7XG4gICAgICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24ucmVwbGFjZSgvIC4qJC8sIFwiIFtSRURBQ1RFRF1cIilcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybCAvLyBjbGllbnRfaWQgJiBjbGllbnRfc2VjcmV0IGNhbiBiZSBwYXNzZWQgYXMgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gaW5jcmVhc2UgcmF0ZSBsaW1pdFxuICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzLyNpbmNyZWFzaW5nLXRoZS11bmF1dGhlbnRpY2F0ZWQtcmF0ZS1saW1pdC1mb3Itb2F1dGgtYXBwbGljYXRpb25zXG4gICAgLnJlcGxhY2UoL1xcYmNsaWVudF9zZWNyZXQ9XFx3Ky9nLCBcImNsaWVudF9zZWNyZXQ9W1JFREFDVEVEXVwiKSAvLyBPQXV0aCB0b2tlbnMgY2FuIGJlIHBhc3NlZCBhcyBVUkwgcXVlcnkgcGFyYW1ldGVycywgYWx0aG91Z2ggaXQgaXMgbm90IHJlY29tbWVuZGVkXG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvI29hdXRoMi10b2tlbi1zZW50LWluLWEtaGVhZGVyXG4gICAgLnJlcGxhY2UoL1xcYmFjY2Vzc190b2tlbj1cXHcrL2csIFwiYWNjZXNzX3Rva2VuPVtSRURBQ1RFRF1cIik7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdENvcHk7IC8vIGRlcHJlY2F0aW9uc1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiY29kZVwiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxvZ09uY2VDb2RlKG5ldyBkZXByZWNhdGlvbi5EZXByZWNhdGlvbihcIltAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXSBgZXJyb3IuY29kZWAgaXMgZGVwcmVjYXRlZCwgdXNlIGBlcnJvci5zdGF0dXNgLlwiKSk7XG4gICAgICAgIHJldHVybiBzdGF0dXNDb2RlO1xuICAgICAgfVxuXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaGVhZGVyc1wiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxvZ09uY2VIZWFkZXJzKG5ldyBkZXByZWNhdGlvbi5EZXByZWNhdGlvbihcIltAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXSBgZXJyb3IuaGVhZGVyc2AgaXMgZGVwcmVjYXRlZCwgdXNlIGBlcnJvci5yZXNwb25zZS5oZWFkZXJzYC5cIikpO1xuICAgICAgICByZXR1cm4gaGVhZGVycyB8fCB7fTtcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbn1cblxuZXhwb3J0cy5SZXF1ZXN0RXJyb3IgPSBSZXF1ZXN0RXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIGVuZHBvaW50ID0gcmVxdWlyZSgnQG9jdG9raXQvZW5kcG9pbnQnKTtcbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xudmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCdpcy1wbGFpbi1vYmplY3QnKTtcbnZhciBub2RlRmV0Y2ggPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnbm9kZS1mZXRjaCcpKTtcbnZhciByZXF1ZXN0RXJyb3IgPSByZXF1aXJlKCdAb2N0b2tpdC9yZXF1ZXN0LWVycm9yJyk7XG5cbmNvbnN0IFZFUlNJT04gPSBcIjUuNi4zXCI7XG5cbmZ1bmN0aW9uIGdldEJ1ZmZlclJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xufVxuXG5mdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgbG9nID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCAmJiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmxvZyA/IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nIDogY29uc29sZTtcblxuICBpZiAoaXNQbGFpbk9iamVjdC5pc1BsYWluT2JqZWN0KHJlcXVlc3RPcHRpb25zLmJvZHkpIHx8IEFycmF5LmlzQXJyYXkocmVxdWVzdE9wdGlvbnMuYm9keSkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSk7XG4gIH1cblxuICBsZXQgaGVhZGVycyA9IHt9O1xuICBsZXQgc3RhdHVzO1xuICBsZXQgdXJsO1xuICBjb25zdCBmZXRjaCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QgJiYgcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5mZXRjaCB8fCBub2RlRmV0Y2g7XG4gIHJldHVybiBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIE9iamVjdC5hc3NpZ24oe1xuICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgIGJvZHk6IHJlcXVlc3RPcHRpb25zLmJvZHksXG4gICAgaGVhZGVyczogcmVxdWVzdE9wdGlvbnMuaGVhZGVycyxcbiAgICByZWRpcmVjdDogcmVxdWVzdE9wdGlvbnMucmVkaXJlY3RcbiAgfSwgLy8gYHJlcXVlc3RPcHRpb25zLnJlcXVlc3QuYWdlbnRgIHR5cGUgaXMgaW5jb21wYXRpYmxlXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC90eXBlcy50cy9wdWxsLzI2NFxuICByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSkudGhlbihhc3luYyByZXNwb25zZSA9PiB7XG4gICAgdXJsID0gcmVzcG9uc2UudXJsO1xuICAgIHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIGZvciAoY29uc3Qga2V5QW5kVmFsdWUgb2YgcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXlBbmRWYWx1ZVswXV0gPSBrZXlBbmRWYWx1ZVsxXTtcbiAgICB9XG5cbiAgICBpZiAoXCJkZXByZWNhdGlvblwiIGluIGhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBoZWFkZXJzLmxpbmsgJiYgaGVhZGVycy5saW5rLm1hdGNoKC88KFtePl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICAgIGNvbnN0IGRlcHJlY2F0aW9uTGluayA9IG1hdGNoZXMgJiYgbWF0Y2hlcy5wb3AoKTtcbiAgICAgIGxvZy53YXJuKGBbQG9jdG9raXQvcmVxdWVzdF0gXCIke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtyZXF1ZXN0T3B0aW9ucy51cmx9XCIgaXMgZGVwcmVjYXRlZC4gSXQgaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQgb24gJHtoZWFkZXJzLnN1bnNldH0ke2RlcHJlY2F0aW9uTGluayA/IGAuIFNlZSAke2RlcHJlY2F0aW9uTGlua31gIDogXCJcIn1gKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSAyMDQgfHwgc3RhdHVzID09PSAyMDUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEdpdEh1YiBBUEkgcmV0dXJucyAyMDAgZm9yIEhFQUQgcmVxdWVzdHNcblxuXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zLm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgIGlmIChzdGF0dXMgPCA0MDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgcmVxdWVzdEVycm9yLlJlcXVlc3RFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCBzdGF0dXMsIHtcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgZGF0YTogdW5kZWZpbmVkXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIHRocm93IG5ldyByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKFwiTm90IG1vZGlmaWVkXCIsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiBhd2FpdCBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKHRvRXJyb3JNZXNzYWdlKGRhdGEpLCBzdGF0dXMsIHtcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKTtcbiAgfSkudGhlbihkYXRhID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGRhdGFcbiAgICB9O1xuICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgcmVxdWVzdEVycm9yLlJlcXVlc3RFcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgdGhyb3cgbmV3IHJlcXVlc3RFcnJvci5SZXF1ZXN0RXJyb3IoZXJyb3IubWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG5cbiAgaWYgKC9hcHBsaWNhdGlvblxcL2pzb24vLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgfVxuXG4gIGlmICghY29udGVudFR5cGUgfHwgL150ZXh0XFwvfGNoYXJzZXQ9dXRmLTgkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gIH1cblxuICByZXR1cm4gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpO1xufVxuXG5mdW5jdGlvbiB0b0Vycm9yTWVzc2FnZShkYXRhKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGRhdGE7IC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlIC0ganVzdCBpbiBjYXNlXG5cbiAgaWYgKFwibWVzc2FnZVwiIGluIGRhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLmVycm9ycykpIHtcbiAgICAgIHJldHVybiBgJHtkYXRhLm1lc3NhZ2V9OiAke2RhdGEuZXJyb3JzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEubWVzc2FnZTtcbiAgfSAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGp1c3QgaW4gY2FzZVxuXG5cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGRFbmRwb2ludCwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSBvbGRFbmRwb2ludC5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG5cbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24gKHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRPcHRpb25zID0gZW5kcG9pbnQubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuXG4gICAgaWYgKCFlbmRwb2ludE9wdGlvbnMucmVxdWVzdCB8fCAhZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vaykge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihlbmRwb2ludC5wYXJzZShlbmRwb2ludE9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gKHJvdXRlLCBwYXJhbWV0ZXJzKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50LnBhcnNlKGVuZHBvaW50Lm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKSkpO1xuICAgIH07XG5cbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QsIHtcbiAgICAgIGVuZHBvaW50LFxuICAgICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50KVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QsIGVuZHBvaW50T3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZW5kcG9pbnQsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50KVxuICB9KTtcbn1cblxuY29uc3QgcmVxdWVzdCA9IHdpdGhEZWZhdWx0cyhlbmRwb2ludC5lbmRwb2ludCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke3VuaXZlcnNhbFVzZXJBZ2VudC5nZXRVc2VyQWdlbnQoKX1gXG4gIH1cbn0pO1xuXG5leHBvcnRzLnJlcXVlc3QgPSByZXF1ZXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIHJlcXVlc3QgPSByZXF1aXJlKCdAb2N0b2tpdC9yZXF1ZXN0Jyk7XG52YXIgdW5pdmVyc2FsVXNlckFnZW50ID0gcmVxdWlyZSgndW5pdmVyc2FsLXVzZXItYWdlbnQnKTtcblxuY29uc3QgVkVSU0lPTiA9IFwiNC44LjBcIjtcblxuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcXG5gICsgZGF0YS5lcnJvcnMubWFwKGUgPT4gYCAtICR7ZS5tZXNzYWdlfWApLmpvaW4oXCJcXG5cIik7XG59XG5cbmNsYXNzIEdyYXBocWxSZXNwb25zZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5uYW1lID0gXCJHcmFwaHFsUmVzcG9uc2VFcnJvclwiOyAvLyBFeHBvc2UgdGhlIGVycm9ycyBhbmQgcmVzcG9uc2UgZGF0YSBpbiB0aGVpciBzaG9ydGhhbmQgcHJvcGVydGllcy5cblxuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7IC8vIE1haW50YWlucyBwcm9wZXIgc3RhY2sgdHJhY2UgKG9ubHkgYXZhaWxhYmxlIG9uIFY4KVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG5cbn1cblxuY29uc3QgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXCJtZXRob2RcIiwgXCJiYXNlVXJsXCIsIFwidXJsXCIsIFwiaGVhZGVyc1wiLCBcInJlcXVlc3RcIiwgXCJxdWVyeVwiLCBcIm1lZGlhVHlwZVwiXTtcbmNvbnN0IEZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TID0gW1wicXVlcnlcIiwgXCJtZXRob2RcIiwgXCJ1cmxcIl07XG5jb25zdCBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIFwicXVlcnlcIiBpbiBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBbQG9jdG9raXQvZ3JhcGhxbF0gXCJxdWVyeVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCFGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IE9iamVjdC5hc3NpZ24oe1xuICAgIHF1ZXJ5XG4gIH0sIG9wdGlvbnMpIDogcXVlcnk7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmtleXMocGFyc2VkT3B0aW9ucykucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKCFyZXN1bHQudmFyaWFibGVzKSB7XG4gICAgICByZXN1bHQudmFyaWFibGVzID0ge307XG4gICAgfVxuXG4gICAgcmVzdWx0LnZhcmlhYmxlc1trZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTsgLy8gd29ya2Fyb3VuZCBmb3IgR2l0SHViIEVudGVycHJpc2UgYmFzZVVybCBzZXQgd2l0aCAvYXBpL3YzIHN1ZmZpeFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9hdXRoLWFwcC5qcy9pc3N1ZXMvMTExI2lzc3VlY29tbWVudC02NTc2MTA0NTFcblxuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybDtcblxuICBpZiAoR0hFU19WM19TVUZGSVhfUkVHRVgudGVzdChiYXNlVXJsKSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnVybCA9IGJhc2VVcmwucmVwbGFjZShHSEVTX1YzX1NVRkZJWF9SRUdFWCwgXCIvYXBpL2dyYXBocWxcIik7XG4gIH1cblxuICByZXR1cm4gcmVxdWVzdChyZXF1ZXN0T3B0aW9ucykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnNba2V5XTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEdyYXBocWxSZXNwb25zZUVycm9yKHJlcXVlc3RPcHRpb25zLCBoZWFkZXJzLCByZXNwb25zZS5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHJlcXVlc3QkMSwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QkMS5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG5cbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBuZXdSZXF1ZXN0KSxcbiAgICBlbmRwb2ludDogcmVxdWVzdC5yZXF1ZXN0LmVuZHBvaW50XG4gIH0pO1xufVxuXG5jb25zdCBncmFwaHFsJDEgPSB3aXRoRGVmYXVsdHMocmVxdWVzdC5yZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWBcbiAgfSxcbiAgbWV0aG9kOiBcIlBPU1RcIixcbiAgdXJsOiBcIi9ncmFwaHFsXCJcbn0pO1xuZnVuY3Rpb24gd2l0aEN1c3RvbVJlcXVlc3QoY3VzdG9tUmVxdWVzdCkge1xuICByZXR1cm4gd2l0aERlZmF1bHRzKGN1c3RvbVJlcXVlc3QsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIHVybDogXCIvZ3JhcGhxbFwiXG4gIH0pO1xufVxuXG5leHBvcnRzLkdyYXBocWxSZXNwb25zZUVycm9yID0gR3JhcGhxbFJlc3BvbnNlRXJyb3I7XG5leHBvcnRzLmdyYXBocWwgPSBncmFwaHFsJDE7XG5leHBvcnRzLndpdGhDdXN0b21SZXF1ZXN0ID0gd2l0aEN1c3RvbVJlcXVlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBSRUdFWF9JU19JTlNUQUxMQVRJT05fTEVHQUNZID0gL152MVxcLi87XG5jb25zdCBSRUdFWF9JU19JTlNUQUxMQVRJT04gPSAvXmdoc18vO1xuY29uc3QgUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIgPSAvXmdodV8vO1xuYXN5bmMgZnVuY3Rpb24gYXV0aCh0b2tlbikge1xuICBjb25zdCBpc0FwcCA9IHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDM7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gUkVHRVhfSVNfSU5TVEFMTEFUSU9OX0xFR0FDWS50ZXN0KHRva2VuKSB8fCBSRUdFWF9JU19JTlNUQUxMQVRJT04udGVzdCh0b2tlbik7XG4gIGNvbnN0IGlzVXNlclRvU2VydmVyID0gUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIudGVzdCh0b2tlbik7XG4gIGNvbnN0IHRva2VuVHlwZSA9IGlzQXBwID8gXCJhcHBcIiA6IGlzSW5zdGFsbGF0aW9uID8gXCJpbnN0YWxsYXRpb25cIiA6IGlzVXNlclRvU2VydmVyID8gXCJ1c2VyLXRvLXNlcnZlclwiIDogXCJvYXV0aFwiO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidG9rZW5cIixcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8qKlxuICogUHJlZml4IHRva2VuIGZvciB1c2FnZSBpbiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXJcbiAqXG4gKiBAcGFyYW0gdG9rZW4gT0F1dGggdG9rZW4gb3IgSlNPTiBXZWIgVG9rZW5cbiAqL1xuZnVuY3Rpb24gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pIHtcbiAgaWYgKHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYGJlYXJlciAke3Rva2VufWA7XG4gIH1cblxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaG9vayh0b2tlbiwgcmVxdWVzdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSByZXF1ZXN0LmVuZHBvaW50Lm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgZW5kcG9pbnQuaGVhZGVycy5hdXRob3JpemF0aW9uID0gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pO1xuICByZXR1cm4gcmVxdWVzdChlbmRwb2ludCk7XG59XG5cbmNvbnN0IGNyZWF0ZVRva2VuQXV0aCA9IGZ1bmN0aW9uIGNyZWF0ZVRva2VuQXV0aCh0b2tlbikge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIE5vIHRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGhcIik7XG4gIH1cblxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIFRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGggaXMgbm90IGEgc3RyaW5nXCIpO1xuICB9XG5cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZVRva2VuQXV0aCA9IGNyZWF0ZVRva2VuQXV0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xudmFyIGJlZm9yZUFmdGVySG9vayA9IHJlcXVpcmUoJ2JlZm9yZS1hZnRlci1ob29rJyk7XG52YXIgcmVxdWVzdCA9IHJlcXVpcmUoJ0BvY3Rva2l0L3JlcXVlc3QnKTtcbnZhciBncmFwaHFsID0gcmVxdWlyZSgnQG9jdG9raXQvZ3JhcGhxbCcpO1xudmFyIGF1dGhUb2tlbiA9IHJlcXVpcmUoJ0BvY3Rva2l0L2F1dGgtdG9rZW4nKTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuXG4gIHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcblxuICB2YXIga2V5LCBpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIzLjYuMFwiO1xuXG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRoU3RyYXRlZ3lcIl07XG5jbGFzcyBPY3Rva2l0IHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBiZWZvcmVBZnRlckhvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IHJlcXVlc3QucmVxdWVzdC5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICByZXF1ZXN0OiBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QsIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCB1c2FnZSBvbmx5LCBubyBuZWVkIHRvIHR5cGVcbiAgICAgICAgaG9vazogaG9vay5iaW5kKG51bGwsIFwicmVxdWVzdFwiKVxuICAgICAgfSksXG4gICAgICBtZWRpYVR5cGU6IHtcbiAgICAgICAgcHJldmlld3M6IFtdLFxuICAgICAgICBmb3JtYXQ6IFwiXCJcbiAgICAgIH1cbiAgICB9OyAvLyBwcmVwZW5kIGRlZmF1bHQgdXNlciBhZ2VudCB3aXRoIGBvcHRpb25zLnVzZXJBZ2VudGAgaWYgc2V0XG5cbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBbb3B0aW9ucy51c2VyQWdlbnQsIGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAke3VuaXZlcnNhbFVzZXJBZ2VudC5nZXRVc2VyQWdlbnQoKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wcmV2aWV3cykge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cyA9IG9wdGlvbnMucHJldmlld3M7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0LnJlcXVlc3QuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmdyYXBocWwgPSBncmFwaHFsLndpdGhDdXN0b21SZXF1ZXN0KHRoaXMucmVxdWVzdCkuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmxvZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgZGVidWc6ICgpID0+IHt9LFxuICAgICAgaW5mbzogKCkgPT4ge30sXG4gICAgICB3YXJuOiBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKSxcbiAgICAgIGVycm9yOiBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSlcbiAgICB9LCBvcHRpb25zLmxvZyk7XG4gICAgdGhpcy5ob29rID0gaG9vazsgLy8gKDEpIElmIG5laXRoZXIgYG9wdGlvbnMuYXV0aFN0cmF0ZWd5YCBub3IgYG9wdGlvbnMuYXV0aGAgYXJlIHNldCwgdGhlIGBvY3Rva2l0YCBpbnN0YW5jZVxuICAgIC8vICAgICBpcyB1bmF1dGhlbnRpY2F0ZWQuIFRoZSBgdGhpcy5hdXRoKClgIG1ldGhvZCBpcyBhIG5vLW9wIGFuZCBubyByZXF1ZXN0IGhvb2sgaXMgcmVnaXN0ZXJlZC5cbiAgICAvLyAoMikgSWYgb25seSBgb3B0aW9ucy5hdXRoYCBpcyBzZXQsIHVzZSB0aGUgZGVmYXVsdCB0b2tlbiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneS5cbiAgICAvLyAoMykgSWYgYG9wdGlvbnMuYXV0aFN0cmF0ZWd5YCBpcyBzZXQgdGhlbiB1c2UgaXQgYW5kIHBhc3MgaW4gYG9wdGlvbnMuYXV0aGAuIEFsd2F5cyBwYXNzIG93biByZXF1ZXN0IGFzIG1hbnkgc3RyYXRlZ2llcyBhY2NlcHQgYSBjdXN0b20gcmVxdWVzdCBpbnN0YW5jZS5cbiAgICAvLyBUT0RPOiB0eXBlIGBvcHRpb25zLmF1dGhgIGJhc2VkIG9uIGBvcHRpb25zLmF1dGhTdHJhdGVneWAuXG5cbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICAvLyAoMSlcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gKDIpXG4gICAgICAgIGNvbnN0IGF1dGggPSBhdXRoVG9rZW4uY3JlYXRlVG9rZW5BdXRoKG9wdGlvbnMuYXV0aCk7IC8vIEB0cy1pZ25vcmUgIMKvXFxfKOODhClfL8KvXG5cbiAgICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGF1dGhTdHJhdGVneVxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICAgICAgICBvdGhlck9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9ucywgX2V4Y2x1ZGVkKTtcblxuICAgICAgY29uc3QgYXV0aCA9IGF1dGhTdHJhdGVneShPYmplY3QuYXNzaWduKHtcbiAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgICAvLyB3ZSBwYXNzIHRoZSBjdXJyZW50IG9jdG9raXQgaW5zdGFuY2UgYXMgd2VsbCBhcyBpdHMgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgIC8vIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGludGVybmFsIHN0YXRlIGFzIHRoZSBjdXJyZW50IG9uZS4gVGhlIG9yaWdpbmFsXG4gICAgICAgIC8vIHJlcXVpcmVtZW50IGZvciB0aGlzIHdhcyB0aGUgXCJldmVudC1vY3Rva2l0XCIgYXV0aGVudGljYXRpb24gc3RyYXRlZ3lcbiAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICBvY3Rva2l0OiB0aGlzLFxuICAgICAgICBvY3Rva2l0T3B0aW9uczogb3RoZXJPcHRpb25zXG4gICAgICB9LCBvcHRpb25zLmF1dGgpKTsgLy8gQHRzLWlnbm9yZSAgwq9cXF8o44OEKV8vwq9cblxuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9IC8vIGFwcGx5IHBsdWdpbnNcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTYzNDUxNzJcblxuXG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGx1Z2luKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcblxuICAgICAgICBpZiAodHlwZW9mIGRlZmF1bHRzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzdXBlcihkZWZhdWx0cyhvcHRpb25zKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9wdGlvbnMsIG9wdGlvbnMudXNlckFnZW50ICYmIGRlZmF1bHRzLnVzZXJBZ2VudCA/IHtcbiAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgIH0gOiBudWxsKSk7XG4gICAgICB9XG5cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggYSBwbHVnaW4gKG9yIG1hbnkpIHRvIHlvdXIgT2N0b2tpdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgQVBJID0gT2N0b2tpdC5wbHVnaW4ocGx1Z2luMSwgcGx1Z2luMiwgcGx1Z2luMywgLi4uKVxuICAgKi9cblxuXG4gIHN0YXRpYyBwbHVnaW4oLi4ubmV3UGx1Z2lucykge1xuICAgIHZhciBfYTtcblxuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5zID0gdGhpcy5wbHVnaW5zO1xuICAgIGNvbnN0IE5ld09jdG9raXQgPSAoX2EgPSBjbGFzcyBleHRlbmRzIHRoaXMge30sIF9hLnBsdWdpbnMgPSBjdXJyZW50UGx1Z2lucy5jb25jYXQobmV3UGx1Z2lucy5maWx0ZXIocGx1Z2luID0+ICFjdXJyZW50UGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4pKSksIF9hKTtcbiAgICByZXR1cm4gTmV3T2N0b2tpdDtcbiAgfVxuXG59XG5PY3Rva2l0LlZFUlNJT04gPSBWRVJTSU9OO1xuT2N0b2tpdC5wbHVnaW5zID0gW107XG5cbmV4cG9ydHMuT2N0b2tpdCA9IE9jdG9raXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG5cbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHtcbiAgICAgIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuY29uc3QgRW5kcG9pbnRzID0ge1xuICBhY3Rpb25zOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgYXBwcm92ZVdvcmtmbG93UnVuOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiXSxcbiAgICBjYW5jZWxXb3JrZmxvd1J1bjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2NhbmNlbFwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0OiBbXCJQVVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIl0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvclJlcG86IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZW1vdmUtdG9rZW5cIl0sXG4gICAgY3JlYXRlV29ya2Zsb3dEaXNwYXRjaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCJdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5SWQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUtleTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIl0sXG4gICAgZGVsZXRlQXJ0aWZhY3Q6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBkZWxldGVFbnZpcm9ubWVudFNlY3JldDogW1wiREVMRVRFIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlU2VsZkhvc3RlZFJ1bm5lckZyb21Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZGVsZXRlU2VsZkhvc3RlZFJ1bm5lckZyb21SZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW5Mb2dzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCJdLFxuICAgIGRpc2FibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIGRpc2FibGVXb3JrZmxvdzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIl0sXG4gICAgZG93bmxvYWRBcnRpZmFjdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9L3thcmNoaXZlX2Zvcm1hdH1cIl0sXG4gICAgZG93bmxvYWRKb2JMb2dzRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIl0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkF0dGVtcHRMb2dzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIl0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkxvZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIl0sXG4gICAgZW5hYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBlbmFibGVXb3JrZmxvdzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVMaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VCeVJlcG9Gb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRFbnZpcm9ubWVudFNlY3JldDogW1wiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl1cbiAgICB9XSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmV2aWV3c0ZvclJ1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIl0sXG4gICAgZ2V0V29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuQXR0ZW1wdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIl0sXG4gICAgZ2V0V29ya2Zsb3dVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiXSxcbiAgICBsaXN0QXJ0aWZhY3RzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiXSxcbiAgICBsaXN0RW52aXJvbm1lbnRTZWNyZXRzOiBbXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCJdLFxuICAgIGxpc3RKb2JzRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bkFydGlmYWN0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvdzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuXCJdLFxuICAgIHJlUnVuV29ya2Zsb3dGYWlsZWRKb2JzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIl0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCJdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzXCJdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJdXG4gIH0sXG4gIGFjdGl2aXR5OiB7XG4gICAgY2hlY2tSZXBvSXNTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlUmVwb1N1YnNjcmlwdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZGVsZXRlVGhyZWFkU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZ2V0RmVlZHM6IFtcIkdFVCAvZmVlZHNcIl0sXG4gICAgZ2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZ2V0VGhyZWFkOiBbXCJHRVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBnZXRUaHJlYWRTdWJzY3JpcHRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGxpc3RFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiXSxcbiAgICBsaXN0Tm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbGlzdE9yZ0V2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50czogW1wiR0VUIC9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclJlcG9OZXR3b3JrOiBbXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFB1YmxpY09yZ0V2ZW50czogW1wiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCJdLFxuICAgIGxpc3RSZXBvRXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVwb05vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NXYXRjaGVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0U3RhcmdhemVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiXSxcbiAgICBsaXN0V2F0Y2hlZFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RXYXRjaGVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIl0sXG4gICAgbWFya05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrUmVwb05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrVGhyZWFkQXNSZWFkOiBbXCJQQVRDSCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIHNldFJlcG9TdWJzY3JpcHRpb246IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIHNldFRocmVhZFN1YnNjcmlwdGlvbjogW1wiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJdLFxuICAgIHN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVuc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl1cbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1wiUFVUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgY2hlY2tUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGNyZWF0ZUZyb21NYW5pZmVzdDogW1wiUE9TVCAvYXBwLW1hbmlmZXN0cy97Y29kZX0vY29udmVyc2lvbnNcIl0sXG4gICAgY3JlYXRlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcIlBPU1QgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L2FjY2Vzc190b2tlbnNcIl0sXG4gICAgZGVsZXRlQXV0aG9yaXphdGlvbjogW1wiREVMRVRFIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vZ3JhbnRcIl0sXG4gICAgZGVsZXRlSW5zdGFsbGF0aW9uOiBbXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGRlbGV0ZVRva2VuOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL2FwcFwiXSxcbiAgICBnZXRCeVNsdWc6IFtcIkdFVCAvYXBwcy97YXBwX3NsdWd9XCJdLFxuICAgIGdldEluc3RhbGxhdGlvbjogW1wiR0VUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfVwiXSxcbiAgICBnZXRPcmdJbnN0YWxsYXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25cIl0sXG4gICAgZ2V0UmVwb0luc3RhbGxhdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnN0YWxsYXRpb25cIl0sXG4gICAgZ2V0U3Vic2NyaXB0aW9uUGxhbkZvckFjY291bnQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9hY2NvdW50cy97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0U3Vic2NyaXB0aW9uUGxhbkZvckFjY291bnRTdHViYmVkOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0VXNlckluc3RhbGxhdGlvbjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJHRVQgL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW46IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhblN0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcIlBPU1QgL2FwcC9ob29rL2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1wiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIHJlc2V0VG9rZW46IFtcIlBBVENIIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgcmV2b2tlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcIkRFTEVURSAvaW5zdGFsbGF0aW9uL3Rva2VuXCJdLFxuICAgIHNjb3BlVG9rZW46IFtcIlBPU1QgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlbi9zY29wZWRcIl0sXG4gICAgc3VzcGVuZEluc3RhbGxhdGlvbjogW1wiUFVUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIl0sXG4gICAgdW5zdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJQQVRDSCAvYXBwL2hvb2svY29uZmlnXCJdXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWR2YW5jZWRTZWN1cml0eUJpbGxpbmdHaGU6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIl0sXG4gICAgZ2V0R2l0aHViQWR2YW5jZWRTZWN1cml0eUJpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FkdmFuY2VkLXNlY3VyaXR5XCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIl1cbiAgfSxcbiAgY2hlY2tzOiB7XG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zXCJdLFxuICAgIGNyZWF0ZVN1aXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXNcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH1cIl0sXG4gICAgZ2V0U3VpdGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH1cIl0sXG4gICAgbGlzdEFubm90YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIl0sXG4gICAgbGlzdEZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIl0sXG4gICAgbGlzdEZvclN1aXRlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIl0sXG4gICAgbGlzdFN1aXRlc0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiXSxcbiAgICByZXJlcXVlc3RSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vcmVyZXF1ZXN0XCJdLFxuICAgIHJlcmVxdWVzdFN1aXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9yZXJlcXVlc3RcIl0sXG4gICAgc2V0U3VpdGVzUHJlZmVyZW5jZXM6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXVxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBkZWxldGVBbmFseXNpczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiXSxcbiAgICBnZXRBbGVydDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZFBhcmFtZXRlcnM6IHtcbiAgICAgICAgYWxlcnRfaWQ6IFwiYWxlcnRfbnVtYmVyXCJcbiAgICAgIH1cbiAgICB9XSxcbiAgICBnZXRBbmFseXNpczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH1cIl0sXG4gICAgZ2V0U2FyaWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnMve3NhcmlmX2lkfVwiXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdXG4gICAgfV0sXG4gICAgbGlzdFJlY2VudEFuYWx5c2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIl0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl1cbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl1cbiAgfSxcbiAgY29kZXNwYWNlczoge1xuICAgIGFkZFJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgY29kZXNwYWNlTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCJdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0c1wiXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiXSxcbiAgICBnZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBnZXRQdWJsaWNLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGxpc3REZXZjb250YWluZXJzSW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZFBhcmFtZXRlcnM6IHtcbiAgICAgICAgb3JnX2lkOiBcIm9yZ1wiXG4gICAgICB9XG4gICAgfV0sXG4gICAgbGlzdEluUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb3NpdG9yaWVzRm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFNlY3JldHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICByZW1vdmVSZXBvc2l0b3J5Rm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIHJlcG9NYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbWFjaGluZXNcIl0sXG4gICAgc2V0UmVwb3NpdG9yaWVzRm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RhcnRcIl0sXG4gICAgc3RvcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdG9wXCJdLFxuICAgIHN0b3BJbk9yZ2FuaXphdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIl0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXVxuICB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXVxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc25hcHNob3RzXCJdLFxuICAgIGRpZmZSYW5nZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL2NvbXBhcmUve2Jhc2VoZWFkfVwiXVxuICB9LFxuICBlbW9qaXM6IHtcbiAgICBnZXQ6IFtcIkdFVCAvZW1vamlzXCJdXG4gIH0sXG4gIGVudGVycHJpc2VBZG1pbjoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvckVudGVycHJpc2U6IFtcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIGRpc2FibGVTZWxlY3RlZE9yZ2FuaXphdGlvbkdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnMve29yZ19pZH1cIl0sXG4gICAgZW5hYmxlU2VsZWN0ZWRPcmdhbml6YXRpb25HaXRodWJBY3Rpb25zRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9vcmdhbml6YXRpb25zL3tvcmdfaWR9XCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgZ2V0U2VydmVyU3RhdGlzdGljczogW1wiR0VUIC9lbnRlcnByaXNlLWluc3RhbGxhdGlvbi97ZW50ZXJwcmlzZV9vcl9vcmd9L3NlcnZlci1zdGF0aXN0aWNzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRPcmdhbml6YXRpb25zRW5hYmxlZEdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnNcIl0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc0VudGVycHJpc2U6IFtcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJdLFxuICAgIHNldFNlbGVjdGVkT3JnYW5pemF0aW9uc0VuYWJsZWRHaXRodWJBY3Rpb25zRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9vcmdhbml6YXRpb25zXCJdXG4gIH0sXG4gIGdpc3RzOiB7XG4gICAgY2hlY2tJc1N0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9naXN0c1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBkZWxldGVDb21tZW50OiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZm9yazogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGdldDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldFJldmlzaW9uOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS97c2hhfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2dpc3RzXCJdLFxuICAgIGxpc3RDb21tZW50czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvZ2lzdHMvcHVibGljXCJdLFxuICAgIGxpc3RTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3N0YXJyZWRcIl0sXG4gICAgc3RhcjogW1wiUFVUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1bnN0YXI6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdXG4gIH0sXG4gIGdpdDoge1xuICAgIGNyZWF0ZUJsb2I6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9ic1wiXSxcbiAgICBjcmVhdGVDb21taXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzXCJdLFxuICAgIGNyZWF0ZVJlZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnNcIl0sXG4gICAgY3JlYXRlVGFnOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFnc1wiXSxcbiAgICBjcmVhdGVUcmVlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXNcIl0sXG4gICAgZGVsZXRlUmVmOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICAgIGdldEJsb2I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzL3tmaWxlX3NoYX1cIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzL3tjb21taXRfc2hhfVwiXSxcbiAgICBnZXRSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZi97cmVmfVwiXSxcbiAgICBnZXRUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3Mve3RhZ19zaGF9XCJdLFxuICAgIGdldFRyZWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzL3t0cmVlX3NoYX1cIl0sXG4gICAgbGlzdE1hdGNoaW5nUmVmczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiXSxcbiAgICB1cGRhdGVSZWY6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXVxuICB9LFxuICBnaXRpZ25vcmU6IHtcbiAgICBnZXRBbGxUZW1wbGF0ZXM6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlc1wiXSxcbiAgICBnZXRUZW1wbGF0ZTogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzL3tuYW1lfVwiXVxuICB9LFxuICBpbnRlcmFjdGlvbnM6IHtcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XVxuICB9LFxuICBpc3N1ZXM6IHtcbiAgICBhZGRBc3NpZ25lZXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIl0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzL3thc3NpZ25lZX1cIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGNyZWF0ZUxhYmVsOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgY3JlYXRlTWlsZXN0b25lOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3RpbWVsaW5lXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yTWlsZXN0b25lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxvY2s6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgcmVtb3ZlQWxsTGFiZWxzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQXNzaWduZWVzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIl0sXG4gICAgcmVtb3ZlTGFiZWw6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIl0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl1cbiAgfSxcbiAgbGljZW5zZXM6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbGljZW5zZXMve2xpY2Vuc2V9XCJdLFxuICAgIGdldEFsbENvbW1vbmx5VXNlZDogW1wiR0VUIC9saWNlbnNlc1wiXSxcbiAgICBnZXRGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xpY2Vuc2VcIl1cbiAgfSxcbiAgbWFya2Rvd246IHtcbiAgICByZW5kZXI6IFtcIlBPU1QgL21hcmtkb3duXCJdLFxuICAgIHJlbmRlclJhdzogW1wiUE9TVCAvbWFya2Rvd24vcmF3XCIsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCJcbiAgICAgIH1cbiAgICB9XVxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl1cbiAgfSxcbiAgbWlncmF0aW9uczoge1xuICAgIGNhbmNlbEltcG9ydDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIl0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIl0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJdLFxuICAgIGdldEFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXSxcbiAgICBnZXRDb21taXRBdXRob3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzXCJdLFxuICAgIGdldEltcG9ydFN0YXR1czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIl0sXG4gICAgZ2V0TGFyZ2VGaWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvbGFyZ2VfZmlsZXNcIl0sXG4gICAgZ2V0U3RhdHVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGdldFN0YXR1c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0ZvclVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wibWlncmF0aW9uc1wiLCBcImxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbWFwQ29tbWl0QXV0aG9yOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnMve2F1dGhvcl9pZH1cIl0sXG4gICAgc2V0TGZzUHJlZmVyZW5jZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9sZnNcIl0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0Rm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRJbXBvcnQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCJdLFxuICAgIHVubG9ja1JlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJdLFxuICAgIHVwZGF0ZUltcG9ydDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiXVxuICB9LFxuICBvcmdzOiB7XG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXCJQVVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlSW52aXRhdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0OiBbXCJHRVQgL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEJsb2NrZWRVc2VyczogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiXSxcbiAgICBsaXN0Q3VzdG9tUm9sZXM6IFtcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnYW5pemF0aW9uX2lkfS9jdXN0b21fcm9sZXNcIl0sXG4gICAgbGlzdEZhaWxlZEludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL29yZ3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3V0c2lkZUNvbGxhYm9yYXRvcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZVB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZU1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXVxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yVXNlcjogW1wiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1wiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl1cbiAgICB9XSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlUaGVBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIl0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIl0sXG4gICAgZ2V0UGFja2FnZUZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIl0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JVc2VyOiBbXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXVxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgY3JlYXRlQ29sdW1uOiBbXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBkZWxldGVDYXJkOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbHVtbjogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldDogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZ2V0Q2FyZDogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBnZXRDb2x1bW46IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9L3Blcm1pc3Npb25cIl0sXG4gICAgbGlzdENhcmRzOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbHVtbnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIl0sXG4gICAgbW92ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9L21vdmVzXCJdLFxuICAgIG1vdmVDb2x1bW46IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vbW92ZXNcIl0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIHVwZGF0ZUNhcmQ6IFtcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICB1cGRhdGVDb2x1bW46IFtcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZXBsaWVzXCJdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIl0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGlzbWlzc1JldmlldzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZGlzbWlzc2Fsc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCJdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIl0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9ldmVudHNcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS91cGRhdGUtYnJhbmNoXCJdLFxuICAgIHVwZGF0ZVJldmlldzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIl0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXVxuICB9LFxuICByYXRlTGltaXQ6IHtcbiAgICBnZXQ6IFtcIkdFVCAvcmF0ZV9saW1pdFwiXVxuICB9LFxuICByZWFjdGlvbnM6IHtcbiAgICBjcmVhdGVGb3JDb21taXRDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvcklzc3VlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvcklzc3VlQ29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvclJlbGVhc2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGRlbGV0ZUZvckNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvcklzc3VlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVGb3JJc3N1ZUNvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVGb3JQdWxsUmVxdWVzdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckNvbW1pdENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9ySXNzdWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9ySXNzdWVDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9yUmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXVxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgYWRkQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiYXBwc1wiXG4gICAgfV0sXG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBhZGRTdGF0dXNDaGVja0NvbnRleHRzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJjb250ZXh0c1wiXG4gICAgfV0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ0ZWFtc1wiXG4gICAgfV0sXG4gICAgYWRkVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ1c2Vyc1wiXG4gICAgfV0sXG4gICAgY2hlY2tDb2xsYWJvcmF0b3I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrVnVsbmVyYWJpbGl0eUFsZXJ0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXSxcbiAgICBjb2Rlb3duZXJzRXJyb3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVvd25lcnMvZXJyb3JzXCJdLFxuICAgIGNvbXBhcmVDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9XCJdLFxuICAgIGNvbXBhcmVDb21taXRzV2l0aEJhc2VoZWFkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXSxcbiAgICBjcmVhdGVDb21taXRTdGF0dXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXR1c2VzL3tzaGF9XCJdLFxuICAgIGNyZWF0ZURlcGxveUtleTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIl0sXG4gICAgY3JlYXRlRGlzcGF0Y2hFdmVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGlzcGF0Y2hlc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9yZXBvc1wiXSxcbiAgICBjcmVhdGVGb3JrOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBjcmVhdGVJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlVGFnUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcIlBPU1QgL3JlcG9zL3t0ZW1wbGF0ZV9vd25lcn0ve3RlbXBsYXRlX3JlcG99L2dlbmVyYXRlXCJdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uOiBbXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJdLFxuICAgIGRlbGV0ZUFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJdLFxuICAgIGRlbGV0ZUFuRW52aXJvbm1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXSxcbiAgICBkZWxldGVBdXRvbGluazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3Mve2F1dG9saW5rX2lkfVwiXSxcbiAgICBkZWxldGVCcmFuY2hQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIl0sXG4gICAgZGVsZXRlQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIl0sXG4gICAgZGVsZXRlRGVwbG95S2V5OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlRGVwbG95bWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICBkZWxldGVUYWdQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvbi97dGFnX3Byb3RlY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGRpc2FibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXSxcbiAgICBkaXNhYmxlTGZzRm9yUmVwbzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sZnNcIl0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIl0sXG4gICAgZG93bmxvYWRBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZG93bmxvYWRaaXBiYWxsQXJjaGl2ZVwiXVxuICAgIH1dLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIl0sXG4gICAgZW5hYmxlTGZzRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sZnNcIl0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXSxcbiAgICBnZW5lcmF0ZVJlbGVhc2VOb3RlczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCJdLFxuICAgIGdldEFsbFRvcGljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgZ2V0QXBwc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCJdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9L3Blcm1pc3Npb25cIl0sXG4gICAgZ2V0Q29tYmluZWRTdGF0dXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn1cIl0sXG4gICAgZ2V0Q29tbWl0QWN0aXZpdHlTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb21taXRfYWN0aXZpdHlcIl0sXG4gICAgZ2V0Q29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0Q29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIl0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRTdGF0dXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzL3tzdGF0dXNfaWR9XCJdLFxuICAgIGdldEVudmlyb25tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIl0sXG4gICAgZ2V0TGF0ZXN0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMvbGF0ZXN0XCJdLFxuICAgIGdldExhdGVzdFJlbGVhc2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvbGF0ZXN0XCJdLFxuICAgIGdldFBhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGdldFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL3tidWlsZF9pZH1cIl0sXG4gICAgZ2V0UGFnZXNIZWFsdGhDaGVjazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9oZWFsdGhcIl0sXG4gICAgZ2V0UGFydGljaXBhdGlvblN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3BhcnRpY2lwYXRpb25cIl0sXG4gICAgZ2V0UHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIl0sXG4gICAgZ2V0UHVuY2hDYXJkU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcHVuY2hfY2FyZFwiXSxcbiAgICBnZXRSZWFkbWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lXCJdLFxuICAgIGdldFJlYWRtZUluRGlyZWN0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZS97ZGlyfVwiXSxcbiAgICBnZXRSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQXNzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUJ5VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3RhZ3Mve3RhZ31cIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIl0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIl0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCJdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXSxcbiAgICBsaXN0QXV0b2xpbmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBsaXN0QnJhbmNoZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIl0sXG4gICAgbGlzdEJyYW5jaGVzRm9ySGVhZENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9icmFuY2hlcy13aGVyZS1oZWFkXCJdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yQ29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdFN0YXR1c2VzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIl0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiXSxcbiAgICBsaXN0Q29udHJpYnV0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBsaXN0RGVwbG95S2V5czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCJdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCJdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgbGlzdFRhZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFnc1wiXSxcbiAgICBsaXN0VGVhbXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGVhbXNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCJdLFxuICAgIGxpc3RXZWJob29rczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiXSxcbiAgICBtZXJnZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2VzXCJdLFxuICAgIG1lcmdlVXBzdHJlYW06IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlLXVwc3RyZWFtXCJdLFxuICAgIHBpbmdXZWJob29rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJdLFxuICAgIHJlbW92ZUFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiYXBwc1wiXG4gICAgfV0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcImNvbnRleHRzXCJcbiAgICB9XSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ0ZWFtc1wiXG4gICAgfV0sXG4gICAgcmVtb3ZlVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInVzZXJzXCJcbiAgICB9XSxcbiAgICByZW5hbWVCcmFuY2g6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3JlbmFtZVwiXSxcbiAgICByZXBsYWNlQWxsVG9waWNzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICByZXF1ZXN0UGFnZXNCdWlsZDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIHNldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiXSxcbiAgICBzZXRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcImFwcHNcIlxuICAgIH1dLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiY29udGV4dHNcIlxuICAgIH1dLFxuICAgIHNldFRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ0ZWFtc1wiXG4gICAgfV0sXG4gICAgc2V0VXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInVzZXJzXCJcbiAgICB9XSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCJdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlSW5mb3JtYXRpb25BYm91dFBhZ2VzU2l0ZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICB1cGRhdGVJbnZpdGF0aW9uOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIl0sXG4gICAgdXBkYXRlUmVsZWFzZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICB1cGRhdGVSZWxlYXNlQXNzZXQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1BvdGVjdGlvbjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJ1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb25cIl1cbiAgICB9XSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yUmVwbzogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gICAgdXBsb2FkUmVsZWFzZUFzc2V0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLCB7XG4gICAgICBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCJcbiAgICB9XVxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIl0sXG4gICAgbGFiZWxzOiBbXCJHRVQgL3NlYXJjaC9sYWJlbHNcIl0sXG4gICAgcmVwb3M6IFtcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiXSxcbiAgICB0b3BpY3M6IFtcIkdFVCAvc2VhcmNoL3RvcGljc1wiXSxcbiAgICB1c2VyczogW1wiR0VUIC9zZWFyY2gvdXNlcnNcIl1cbiAgfSxcbiAgc2VjcmV0U2Nhbm5pbmc6IHtcbiAgICBnZXRBbGVydDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vbG9jYXRpb25zXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXVxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBhZGRPclVwZGF0ZVJlcG9QZXJtaXNzaW9uc0luT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUmVwb0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJdLFxuICAgIGRlbGV0ZUluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0QnlOYW1lOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0RGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBsaXN0Q2hpbGRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCJdLFxuICAgIGxpc3REaXNjdXNzaW9uQ29tbWVudHNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHJvamVjdHNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlUHJvamVjdEluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIHJlbW92ZVJlcG9Jbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIl0sXG4gICAgdXBkYXRlSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiUE9TVCAvdXNlci9rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIva2V5c1wiXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGZvbGxvdzogW1wiUFVUIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlclwiXSxcbiAgICBnZXRCeVVzZXJuYW1lOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0Q29udGV4dEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ob3ZlcmNhcmRcIl0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvdXNlcnNcIl0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3NcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvYmxvY2tzXCJdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZW1haWxzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmdcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2dwZ19rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5c1wiXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZDogW1wiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIl0sXG4gICAgdW5ibG9jazogW1wiREVMRVRFIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVuZm9sbG93OiBbXCJERUxFVEUgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlQXV0aGVudGljYXRlZDogW1wiUEFUQ0ggL3VzZXJcIl1cbiAgfVxufTtcblxuY29uc3QgVkVSU0lPTiA9IFwiNS4xNi4yXCI7XG5cbmZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0LCBlbmRwb2ludHNNYXApIHtcbiAgY29uc3QgbmV3TWV0aG9kcyA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3Njb3BlLCBlbmRwb2ludHNdIG9mIE9iamVjdC5lbnRyaWVzKGVuZHBvaW50c01hcCkpIHtcbiAgICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBlbmRwb2ludF0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgICAgY29uc3QgW3JvdXRlLCBkZWZhdWx0cywgZGVjb3JhdGlvbnNdID0gZW5kcG9pbnQ7XG4gICAgICBjb25zdCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoLyAvKTtcbiAgICAgIGNvbnN0IGVuZHBvaW50RGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmxcbiAgICAgIH0sIGRlZmF1bHRzKTtcblxuICAgICAgaWYgKCFuZXdNZXRob2RzW3Njb3BlXSkge1xuICAgICAgICBuZXdNZXRob2RzW3Njb3BlXSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzY29wZU1ldGhvZHMgPSBuZXdNZXRob2RzW3Njb3BlXTtcblxuICAgICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICAgIHNjb3BlTWV0aG9kc1ttZXRob2ROYW1lXSA9IGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBlbmRwb2ludERlZmF1bHRzLCBkZWNvcmF0aW9ucyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBzY29wZU1ldGhvZHNbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld01ldGhvZHM7XG59XG5cbmZ1bmN0aW9uIGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBkZWZhdWx0cywgZGVjb3JhdGlvbnMpIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgZnVuY3Rpb24gd2l0aERlY29yYXRpb25zKC4uLmFyZ3MpIHtcbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7IC8vIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gb3RoZXIgZGVjb3JhdGlvbnMgdGhhbiBgLm1hcFRvRGF0YWBcblxuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKGBvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKSBoYXMgYmVlbiByZW5hbWVkIHRvIG9jdG9raXQuJHtuZXdTY29wZX0uJHtuZXdNZXRob2ROYW1lfSgpYCk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgKTtcblxuICAgICAgICAgIGlmICghKGFsaWFzIGluIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICBvcHRpb25zW2FsaWFzXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfSAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcblxuXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih3aXRoRGVjb3JhdGlvbnMsIHJlcXVlc3RXaXRoRGVmYXVsdHMpO1xufVxuXG5mdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQsIEVuZHBvaW50cyk7XG4gIHJldHVybiB7XG4gICAgcmVzdDogYXBpXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0LCBFbmRwb2ludHMpO1xuICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGFwaSksIHt9LCB7XG4gICAgcmVzdDogYXBpXG4gIH0pO1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzID0gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcztcbmV4cG9ydHMucmVzdEVuZHBvaW50TWV0aG9kcyA9IHJlc3RFbmRwb2ludE1ldGhvZHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBWRVJTSU9OID0gXCIyLjIxLjNcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBTb21lIOKAnGxpc3TigJ0gcmVzcG9uc2UgdGhhdCBjYW4gYmUgcGFnaW5hdGVkIGhhdmUgYSBkaWZmZXJlbnQgcmVzcG9uc2Ugc3RydWN0dXJlXG4gKlxuICogVGhleSBoYXZlIGEgYHRvdGFsX2NvdW50YCBrZXkgaW4gdGhlIHJlc3BvbnNlIChzZWFyY2ggYWxzbyBoYXMgYGluY29tcGxldGVfcmVzdWx0c2AsXG4gKiAvaW5zdGFsbGF0aW9uL3JlcG9zaXRvcmllcyBhbHNvIGhhcyBgcmVwb3NpdG9yeV9zZWxlY3Rpb25gKSwgYXMgd2VsbCBhcyBhIGtleSB3aXRoXG4gKiB0aGUgbGlzdCBvZiB0aGUgaXRlbXMgd2hpY2ggbmFtZSB2YXJpZXMgZnJvbSBlbmRwb2ludCB0byBlbmRwb2ludC5cbiAqXG4gKiBPY3Rva2l0IG5vcm1hbGl6ZXMgdGhlc2UgcmVzcG9uc2VzIHNvIHRoYXQgcGFnaW5hdGVkIHJlc3VsdHMgYXJlIGFsd2F5cyByZXR1cm5lZCBmb2xsb3dpbmdcbiAqIHRoZSBzYW1lIHN0cnVjdHVyZS4gT25lIGNoYWxsZW5nZSBpcyB0aGF0IGlmIHRoZSBsaXN0IHJlc3BvbnNlIGhhcyBvbmx5IG9uZSBwYWdlLCBubyBMaW5rXG4gKiBoZWFkZXIgaXMgcHJvdmlkZWQsIHNvIHRoaXMgaGVhZGVyIGFsb25lIGlzIG5vdCBzdWZmaWNpZW50IHRvIGNoZWNrIHdldGhlciBhIHJlc3BvbnNlIGlzXG4gKiBwYWdpbmF0ZWQgb3Igbm90LlxuICpcbiAqIFdlIGNoZWNrIGlmIGEgXCJ0b3RhbF9jb3VudFwiIGtleSBpcyBwcmVzZW50IGluIHRoZSByZXNwb25zZSBkYXRhLCBidXQgYWxzbyBtYWtlIHN1cmUgdGhhdFxuICogYSBcInVybFwiIHByb3BlcnR5IGlzIG5vdCwgYXMgdGhlIFwiR2V0IHRoZSBjb21iaW5lZCBzdGF0dXMgZm9yIGEgc3BlY2lmaWMgcmVmXCIgZW5kcG9pbnQgd291bGRcbiAqIG90aGVyd2lzZSBtYXRjaDogaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9yZXBvcy9zdGF0dXNlcy8jZ2V0LXRoZS1jb21iaW5lZC1zdGF0dXMtZm9yLWEtc3BlY2lmaWMtcmVmXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSkge1xuICAvLyBlbmRwb2ludHMgY2FuIHJlc3BvbmQgd2l0aCAyMDQgaWYgcmVwb3NpdG9yeSBpcyBlbXB0eVxuICBpZiAoIXJlc3BvbnNlLmRhdGEpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHJlc3BvbnNlKSwge30sIHtcbiAgICAgIGRhdGE6IFtdXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlOyAvLyBrZWVwIHRoZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaW50YWN0IGFzIHRoZXJlIGlzIGN1cnJlbnRseSBubyBvdGhlciB3YXlcbiAgLy8gdG8gcmV0cmlldmUgdGhlIHNhbWUgaW5mb3JtYXRpb24uXG5cbiAgY29uc3QgaW5jb21wbGV0ZVJlc3VsdHMgPSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgY29uc3QgcmVwb3NpdG9yeVNlbGVjdGlvbiA9IHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGNvbnN0IHRvdGFsQ291bnQgPSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgY29uc3QgbmFtZXNwYWNlS2V5ID0gT2JqZWN0LmtleXMocmVzcG9uc2UuZGF0YSlbMF07XG4gIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhW25hbWVzcGFjZUtleV07XG4gIHJlc3BvbnNlLmRhdGEgPSBkYXRhO1xuXG4gIGlmICh0eXBlb2YgaW5jb21wbGV0ZVJlc3VsdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cyA9IGluY29tcGxldGVSZXN1bHRzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cblxuICByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50ID0gdG90YWxDb3VudDtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5mdW5jdGlvbiBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZS5lbmRwb2ludChwYXJhbWV0ZXJzKSA6IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludChyb3V0ZSwgcGFyYW1ldGVycyk7XG4gIGNvbnN0IHJlcXVlc3RNZXRob2QgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlIDogb2N0b2tpdC5yZXF1ZXN0O1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgbGV0IHVybCA9IG9wdGlvbnMudXJsO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+ICh7XG4gICAgICBhc3luYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIHtcbiAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2Qoe1xuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgaGVhZGVyc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZSA9IG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSk7IC8vIGByZXNwb25zZS5oZWFkZXJzLmxpbmtgIGZvcm1hdDpcbiAgICAgICAgICAvLyAnPGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXNlZW1rL2ZvbGxvd2Vycz9wYWdlPTI+OyByZWw9XCJuZXh0XCIsIDxodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2FzZWVtay9mb2xsb3dlcnM/cGFnZT0yPjsgcmVsPVwibGFzdFwiJ1xuICAgICAgICAgIC8vIHNldHMgYHVybGAgdG8gdW5kZWZpbmVkIGlmIFwibmV4dFwiIFVSTCBpcyBub3QgcHJlc2VudCBvciBgbGlua2AgaGVhZGVyIGlzIG5vdCBzZXRcblxuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaCgvPChbXj5dKyk+O1xccypyZWw9XCJuZXh0XCIvKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVkUmVzcG9uc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0pXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGdhdGhlcihvY3Rva2l0LCBbXSwgaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLCBtYXBGbik7XG59XG5cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvciwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yLm5leHQoKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBsZXQgZWFybHlFeGl0ID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQobWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGEpO1xuXG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvciwgbWFwRm4pO1xuICB9KTtcbn1cblxuY29uc3QgY29tcG9zZVBhZ2luYXRlUmVzdCA9IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUsIHtcbiAgaXRlcmF0b3Jcbn0pO1xuXG5jb25zdCBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLCBcIkdFVCAvYXBwbGljYXRpb25zL2dyYW50c1wiLCBcIkdFVCAvYXV0aG9yaXphdGlvbnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lci1ncm91cHNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vb3JnYW5pemF0aW9uc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXJzXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYXVkaXQtbG9nXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIiwgXCJHRVQgL2V2ZW50c1wiLCBcIkdFVCAvZ2lzdHNcIiwgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLCBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLCBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLCBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9pc3N1ZXNcIiwgXCJHRVQgL2xpY2Vuc2VzXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLCBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIiwgXCJHRVQgL25vdGlmaWNhdGlvbnNcIiwgXCJHRVQgL29yZ2FuaXphdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2F1ZGl0LWxvZ1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9jcmVkZW50aWFsLWF1dGhvcml6YXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2V4dGVybmFsLWdyb3Vwc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FkdmFuY2VkLXNlY3VyaXR5XCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW0tc3luYy9ncm91cHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIiwgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIiwgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21taXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2ZpbGVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsIFwiR0VUIC9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsIFwiR0VUIC9zZWFyY2gvY29kZVwiLCBcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIiwgXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIiwgXCJHRVQgL3NlYXJjaC9sYWJlbHNcIiwgXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL3NlYXJjaC90b3BpY3NcIiwgXCJHRVQgL3NlYXJjaC91c2Vyc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2ludml0YXRpb25zXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vbWVtYmVyc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcmVwb3NcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS90ZWFtc1wiLCBcIkdFVCAvdXNlci9ibG9ja3NcIiwgXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiLCBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIiwgXCJHRVQgL3VzZXIvZW1haWxzXCIsIFwiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiLCBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIiwgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIiwgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiLCBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvdXNlci9pc3N1ZXNcIiwgXCJHRVQgL3VzZXIva2V5c1wiLCBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIiwgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzL3N0dWJiZWRcIiwgXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiLCBcIkdFVCAvdXNlci9taWdyYXRpb25zXCIsIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC91c2VyL29yZ3NcIiwgXCJHRVQgL3VzZXIvcGFja2FnZXNcIiwgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLCBcIkdFVCAvdXNlci9yZXBvc1wiLCBcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCIsIFwiR0VUIC91c2VyL3N0YXJyZWRcIiwgXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiLCBcIkdFVCAvdXNlci90ZWFtc1wiLCBcIkdFVCAvdXNlcnNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdO1xuXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSBvY3Rva2l0IE9jdG9raXQgaW5zdGFuY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgcGFzc2VkIHRvIE9jdG9raXQgY29uc3RydWN0b3JcbiAqL1xuXG5mdW5jdGlvbiBwYWdpbmF0ZVJlc3Qob2N0b2tpdCkge1xuICByZXR1cm4ge1xuICAgIHBhZ2luYXRlOiBPYmplY3QuYXNzaWduKHBhZ2luYXRlLmJpbmQobnVsbCwgb2N0b2tpdCksIHtcbiAgICAgIGl0ZXJhdG9yOiBpdGVyYXRvci5iaW5kKG51bGwsIG9jdG9raXQpXG4gICAgfSlcbiAgfTtcbn1cbnBhZ2luYXRlUmVzdC5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5jb21wb3NlUGFnaW5hdGVSZXN0ID0gY29tcG9zZVBhZ2luYXRlUmVzdDtcbmV4cG9ydHMuaXNQYWdpbmF0aW5nRW5kcG9pbnQgPSBpc1BhZ2luYXRpbmdFbmRwb2ludDtcbmV4cG9ydHMucGFnaW5hdGVSZXN0ID0gcGFnaW5hdGVSZXN0O1xuZXhwb3J0cy5wYWdpbmF0aW5nRW5kcG9pbnRzID0gcGFnaW5hdGluZ0VuZHBvaW50cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9jdG9raXRPcHRpb25zID0gZXhwb3J0cy5HaXRIdWIgPSBleHBvcnRzLmRlZmF1bHRzID0gZXhwb3J0cy5jb250ZXh0ID0gdm9pZCAwO1xuY29uc3QgQ29udGV4dCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpKTtcbmNvbnN0IFV0aWxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWxzXCIpKTtcbi8vIG9jdG9raXQgKyBwbHVnaW5zXG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvY29yZVwiKTtcbmNvbnN0IHBsdWdpbl9yZXN0X2VuZHBvaW50X21ldGhvZHNfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzXCIpO1xuY29uc3QgcGx1Z2luX3BhZ2luYXRlX3Jlc3RfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdFwiKTtcbmV4cG9ydHMuY29udGV4dCA9IG5ldyBDb250ZXh0LkNvbnRleHQoKTtcbmNvbnN0IGJhc2VVcmwgPSBVdGlscy5nZXRBcGlCYXNlVXJsKCk7XG5leHBvcnRzLmRlZmF1bHRzID0ge1xuICAgIGJhc2VVcmwsXG4gICAgcmVxdWVzdDoge1xuICAgICAgICBhZ2VudDogVXRpbHMuZ2V0UHJveHlBZ2VudChiYXNlVXJsKVxuICAgIH1cbn07XG5leHBvcnRzLkdpdEh1YiA9IGNvcmVfMS5PY3Rva2l0LnBsdWdpbihwbHVnaW5fcmVzdF9lbmRwb2ludF9tZXRob2RzXzEucmVzdEVuZHBvaW50TWV0aG9kcywgcGx1Z2luX3BhZ2luYXRlX3Jlc3RfMS5wYWdpbmF0ZVJlc3QpLmRlZmF1bHRzKGV4cG9ydHMuZGVmYXVsdHMpO1xuLyoqXG4gKiBDb252aWVuY2UgZnVuY3Rpb24gdG8gY29ycmVjdGx5IGZvcm1hdCBPY3Rva2l0IE9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdE9wdGlvbnModG9rZW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyB8fCB7fSk7IC8vIFNoYWxsb3cgY2xvbmUgLSBkb24ndCBtdXRhdGUgdGhlIG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyXG4gICAgLy8gQXV0aFxuICAgIGNvbnN0IGF1dGggPSBVdGlscy5nZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRzKTtcbiAgICBpZiAoYXV0aCkge1xuICAgICAgICBvcHRzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICByZXR1cm4gb3B0cztcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBnZXRPY3Rva2l0T3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZXhwb3J0cy5jb250ZXh0ID0gdm9pZCAwO1xuY29uc3QgQ29udGV4dCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuY29udGV4dCA9IG5ldyBDb250ZXh0LkNvbnRleHQoKTtcbi8qKlxuICogUmV0dXJucyBhIGh5ZHJhdGVkIG9jdG9raXQgcmVhZHkgdG8gdXNlIGZvciBHaXRIdWIgQWN0aW9uc1xuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0KHRva2VuLCBvcHRpb25zLCAuLi5hZGRpdGlvbmFsUGx1Z2lucykge1xuICAgIGNvbnN0IEdpdEh1YldpdGhQbHVnaW5zID0gdXRpbHNfMS5HaXRIdWIucGx1Z2luKC4uLmFkZGl0aW9uYWxQbHVnaW5zKTtcbiAgICByZXR1cm4gbmV3IEdpdEh1YldpdGhQbHVnaW5zKHV0aWxzXzEuZ2V0T2N0b2tpdE9wdGlvbnModG9rZW4sIG9wdGlvbnMpKTtcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGdldE9jdG9raXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1naXRodWIuanMubWFwIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IFRyYXZlcnNlO1xuZnVuY3Rpb24gVHJhdmVyc2UgKG9iaikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmF2ZXJzZSkpIHJldHVybiBuZXcgVHJhdmVyc2Uob2JqKTtcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xufVxuXG5UcmF2ZXJzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBzKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBwc1tpXTtcbiAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBrZXkpKSB7XG4gICAgICAgICAgICBub2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGVba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBzLCB2YWx1ZSkge1xuICAgIHZhciBub2RlID0gdGhpcy52YWx1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBzLmxlbmd0aCAtIDE7IGkgKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHBzW2ldO1xuICAgICAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGtleSkpIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICBub2RlID0gbm9kZVtrZXldO1xuICAgIH1cbiAgICBub2RlW3BzW2ldXSA9IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICByZXR1cm4gd2Fsayh0aGlzLnZhbHVlLCBjYiwgdHJ1ZSk7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYikge1xuICAgIHRoaXMudmFsdWUgPSB3YWxrKHRoaXMudmFsdWUsIGNiLCBmYWxzZSk7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gKGNiLCBpbml0KSB7XG4gICAgdmFyIHNraXAgPSBhcmd1bWVudHMubGVuZ3RoID09PSAxO1xuICAgIHZhciBhY2MgPSBza2lwID8gdGhpcy52YWx1ZSA6IGluaXQ7XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1Jvb3QgfHwgIXNraXApIHtcbiAgICAgICAgICAgIGFjYyA9IGNiLmNhbGwodGhpcywgYWNjLCB4KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUuZGVlcEVxdWFsID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdkZWVwRXF1YWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgb2JqZWN0IHRvIGNvbXBhcmUgYWdhaW5zdCdcbiAgICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIGVxdWFsID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IG9iajtcbiAgICBcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgdmFyIG5vdEVxdWFsID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAvL3RoaXMuc3RvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSkuYmluZCh0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIC8vaWYgKG5vZGUgPT09IHVuZGVmaW5lZCB8fCBub2RlID09PSBudWxsKSByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgXG4gICAgICAgIGlmICghdGhpcy5pc1Jvb3QpIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgdGhpcy5rZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlW3RoaXMua2V5XTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFyIHggPSBub2RlO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5wb3N0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vZGUgPSB4O1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHZhciB0b1MgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLmNpcmN1bGFyKSB7XG4gICAgICAgICAgICBpZiAoVHJhdmVyc2Uob2JqKS5nZXQodGhpcy5jaXJjdWxhci5wYXRoKSAhPT0geCkgbm90RXF1YWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgeCAhPT0gdHlwZW9mIHkpIHtcbiAgICAgICAgICAgIG5vdEVxdWFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoeCA9PT0gbnVsbCB8fCB5ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh4ICE9PSB5KSBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHguX19wcm90b19fICE9PSB5Ll9fcHJvdG9fXykge1xuICAgICAgICAgICAgbm90RXF1YWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4ID09PSB5KSB7XG4gICAgICAgICAgICAvLyBub3BcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAvLyBib3RoIHJlZ2V4cHMgb24gYWNjb3VudCBvZiB0aGUgX19wcm90b19fIGNoZWNrXG4gICAgICAgICAgICAgICAgaWYgKHgudG9TdHJpbmcoKSAhPSB5LnRvU3RyaW5nKCkpIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh4ICE9PSB5KSBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHRvUyh5KSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSdcbiAgICAgICAgICAgIHx8IHRvUyh4KSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXScpIHtcbiAgICAgICAgICAgICAgICBpZiAodG9TKHgpICE9PSB0b1MoeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm90RXF1YWwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh4IGluc3RhbmNlb2YgRGF0ZSB8fCB5IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICghKHggaW5zdGFuY2VvZiBEYXRlKSB8fCAhKHkgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHx8IHguZ2V0VGltZSgpICE9PSB5LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBreCA9IE9iamVjdC5rZXlzKHgpO1xuICAgICAgICAgICAgICAgIHZhciBreSA9IE9iamVjdC5rZXlzKHkpO1xuICAgICAgICAgICAgICAgIGlmIChreC5sZW5ndGggIT09IGt5Lmxlbmd0aCkgcmV0dXJuIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBreC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgayA9IGt4W2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksIGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGVxdWFsO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLnBhdGhzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhY2MgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgYWNjLnB1c2godGhpcy5wYXRoKTsgXG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5ub2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYWNjID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGFjYy5wdXNoKHRoaXMubm9kZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdLCBub2RlcyA9IFtdO1xuICAgIFxuICAgIHJldHVybiAoZnVuY3Rpb24gY2xvbmUgKHNyYykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRzW2ldID09PSBzcmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2Ygc3JjID09PSAnb2JqZWN0JyAmJiBzcmMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBkc3QgPSBjb3B5KHNyYyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBhcmVudHMucHVzaChzcmMpO1xuICAgICAgICAgICAgbm9kZXMucHVzaChkc3QpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGRzdFtrZXldID0gY2xvbmUoc3JjW2tleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBhcmVudHMucG9wKCk7XG4gICAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBkc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3JjO1xuICAgICAgICB9XG4gICAgfSkodGhpcy52YWx1ZSk7XG59O1xuXG5mdW5jdGlvbiB3YWxrIChyb290LCBjYiwgaW1tdXRhYmxlKSB7XG4gICAgdmFyIHBhdGggPSBbXTtcbiAgICB2YXIgcGFyZW50cyA9IFtdO1xuICAgIHZhciBhbGl2ZSA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIChmdW5jdGlvbiB3YWxrZXIgKG5vZGVfKSB7XG4gICAgICAgIHZhciBub2RlID0gaW1tdXRhYmxlID8gY29weShub2RlXykgOiBub2RlXztcbiAgICAgICAgdmFyIG1vZGlmaWVycyA9IHt9O1xuICAgICAgICBcbiAgICAgICAgdmFyIHN0YXRlID0ge1xuICAgICAgICAgICAgbm9kZSA6IG5vZGUsXG4gICAgICAgICAgICBub2RlXyA6IG5vZGVfLFxuICAgICAgICAgICAgcGF0aCA6IFtdLmNvbmNhdChwYXRoKSxcbiAgICAgICAgICAgIHBhcmVudCA6IHBhcmVudHMuc2xpY2UoLTEpWzBdLFxuICAgICAgICAgICAga2V5IDogcGF0aC5zbGljZSgtMSlbMF0sXG4gICAgICAgICAgICBpc1Jvb3QgOiBwYXRoLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICAgIGxldmVsIDogcGF0aC5sZW5ndGgsXG4gICAgICAgICAgICBjaXJjdWxhciA6IG51bGwsXG4gICAgICAgICAgICB1cGRhdGUgOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIGlmICghc3RhdGUuaXNSb290KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudC5ub2RlW3N0YXRlLmtleV0gPSB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZS5ub2RlID0geDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZGVsZXRlJyA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGUucGFyZW50Lm5vZGVbc3RhdGUua2V5XTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1vdmUgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucGFyZW50Lm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudC5ub2RlLnNwbGljZShzdGF0ZS5rZXksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLnBhcmVudC5ub2RlW3N0YXRlLmtleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJlZm9yZSA6IGZ1bmN0aW9uIChmKSB7IG1vZGlmaWVycy5iZWZvcmUgPSBmIH0sXG4gICAgICAgICAgICBhZnRlciA6IGZ1bmN0aW9uIChmKSB7IG1vZGlmaWVycy5hZnRlciA9IGYgfSxcbiAgICAgICAgICAgIHByZSA6IGZ1bmN0aW9uIChmKSB7IG1vZGlmaWVycy5wcmUgPSBmIH0sXG4gICAgICAgICAgICBwb3N0IDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLnBvc3QgPSBmIH0sXG4gICAgICAgICAgICBzdG9wIDogZnVuY3Rpb24gKCkgeyBhbGl2ZSA9IGZhbHNlIH1cbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGlmICghYWxpdmUpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgbm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUuaXNMZWFmID0gT2JqZWN0LmtleXMobm9kZSkubGVuZ3RoID09IDA7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRzW2ldLm5vZGVfID09PSBub2RlXykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaXJjdWxhciA9IHBhcmVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLmlzTGVhZiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHN0YXRlLm5vdExlYWYgPSAhc3RhdGUuaXNMZWFmO1xuICAgICAgICBzdGF0ZS5ub3RSb290ID0gIXN0YXRlLmlzUm9vdDtcbiAgICAgICAgXG4gICAgICAgIC8vIHVzZSByZXR1cm4gdmFsdWVzIHRvIHVwZGF0ZSBpZiBkZWZpbmVkXG4gICAgICAgIHZhciByZXQgPSBjYi5jYWxsKHN0YXRlLCBzdGF0ZS5ub2RlKTtcbiAgICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLnVwZGF0ZSkgc3RhdGUudXBkYXRlKHJldCk7XG4gICAgICAgIGlmIChtb2RpZmllcnMuYmVmb3JlKSBtb2RpZmllcnMuYmVmb3JlLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZS5ub2RlID09ICdvYmplY3QnXG4gICAgICAgICYmIHN0YXRlLm5vZGUgIT09IG51bGwgJiYgIXN0YXRlLmNpcmN1bGFyKSB7XG4gICAgICAgICAgICBwYXJlbnRzLnB1c2goc3RhdGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHN0YXRlLm5vZGUpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXksIGkpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnByZSkgbW9kaWZpZXJzLnByZS5jYWxsKHN0YXRlLCBzdGF0ZS5ub2RlW2tleV0sIGtleSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gd2Fsa2VyKHN0YXRlLm5vZGVba2V5XSk7XG4gICAgICAgICAgICAgICAgaWYgKGltbXV0YWJsZSAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5ub2RlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLm5vZGVba2V5XSA9IGNoaWxkLm5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNoaWxkLmlzTGFzdCA9IGkgPT0ga2V5cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIGNoaWxkLmlzRmlyc3QgPSBpID09IDA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVycy5wb3N0KSBtb2RpZmllcnMucG9zdC5jYWxsKHN0YXRlLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyZW50cy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKG1vZGlmaWVycy5hZnRlcikgbW9kaWZpZXJzLmFmdGVyLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGUpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0pKHJvb3QpLm5vZGU7XG59XG5cbk9iamVjdC5rZXlzKFRyYXZlcnNlLnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgVHJhdmVyc2Vba2V5XSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHZhciB0ID0gVHJhdmVyc2Uob2JqKTtcbiAgICAgICAgcmV0dXJuIHRba2V5XS5hcHBseSh0LCBhcmdzKTtcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGNvcHkgKHNyYykge1xuICAgIGlmICh0eXBlb2Ygc3JjID09PSAnb2JqZWN0JyAmJiBzcmMgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRzdDtcbiAgICAgICAgXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNyYykpIHtcbiAgICAgICAgICAgIGRzdCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIGRzdCA9IG5ldyBEYXRlKHNyYyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgQm9vbGVhbikge1xuICAgICAgICAgICAgZHN0ID0gbmV3IEJvb2xlYW4oc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgICAgIGRzdCA9IG5ldyBOdW1iZXIoc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgIGRzdCA9IG5ldyBTdHJpbmcoc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRzdCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNyYykpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkc3Q7XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIHNyYztcbn1cbiIsCiAgICAidmFyIFRyYXZlcnNlID0gcmVxdWlyZSgndHJhdmVyc2UnKTtcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2hhaW5zYXc7XG5mdW5jdGlvbiBDaGFpbnNhdyAoYnVpbGRlcikge1xuICAgIHZhciBzYXcgPSBDaGFpbnNhdy5zYXcoYnVpbGRlciwge30pO1xuICAgIHZhciByID0gYnVpbGRlci5jYWxsKHNhdy5oYW5kbGVycywgc2F3KTtcbiAgICBpZiAociAhPT0gdW5kZWZpbmVkKSBzYXcuaGFuZGxlcnMgPSByO1xuICAgIHNhdy5yZWNvcmQoKTtcbiAgICByZXR1cm4gc2F3LmNoYWluKCk7XG59O1xuXG5DaGFpbnNhdy5saWdodCA9IGZ1bmN0aW9uIENoYWluc2F3TGlnaHQgKGJ1aWxkZXIpIHtcbiAgICB2YXIgc2F3ID0gQ2hhaW5zYXcuc2F3KGJ1aWxkZXIsIHt9KTtcbiAgICB2YXIgciA9IGJ1aWxkZXIuY2FsbChzYXcuaGFuZGxlcnMsIHNhdyk7XG4gICAgaWYgKHIgIT09IHVuZGVmaW5lZCkgc2F3LmhhbmRsZXJzID0gcjtcbiAgICByZXR1cm4gc2F3LmNoYWluKCk7XG59O1xuXG5DaGFpbnNhdy5zYXcgPSBmdW5jdGlvbiAoYnVpbGRlciwgaGFuZGxlcnMpIHtcbiAgICB2YXIgc2F3ID0gbmV3IEV2ZW50RW1pdHRlcjtcbiAgICBzYXcuaGFuZGxlcnMgPSBoYW5kbGVycztcbiAgICBzYXcuYWN0aW9ucyA9IFtdO1xuXG4gICAgc2F3LmNoYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2ggPSBUcmF2ZXJzZShzYXcuaGFuZGxlcnMpLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSb290KSByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIHZhciBwcyA9IHRoaXMucGF0aDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzYXcuYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggOiBwcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgOiBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzYXcuZW1pdCgnYmVnaW4nKTtcbiAgICAgICAgICAgIHNhdy5uZXh0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9O1xuXG4gICAgc2F3LnBvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNhdy5hY3Rpb25zLnNoaWZ0KCk7XG4gICAgfTtcblxuICAgIHNhdy5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWN0aW9uID0gc2F3LnBvcCgpO1xuXG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICBzYXcuZW1pdCgnZW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWFjdGlvbi50cmFwKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IHNhdy5oYW5kbGVycztcbiAgICAgICAgICAgIGFjdGlvbi5wYXRoLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBub2RlID0gbm9kZVtrZXldIH0pO1xuICAgICAgICAgICAgbm9kZS5hcHBseShzYXcuaGFuZGxlcnMsIGFjdGlvbi5hcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzYXcubmVzdCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGF1dG9uZXh0ID0gdHJ1ZTtcblxuICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHZhciBhdXRvbmV4dCA9IGNiO1xuICAgICAgICAgICAgY2IgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcyA9IENoYWluc2F3LnNhdyhidWlsZGVyLCB7fSk7XG4gICAgICAgIHZhciByID0gYnVpbGRlci5jYWxsKHMuaGFuZGxlcnMsIHMpO1xuXG4gICAgICAgIGlmIChyICE9PSB1bmRlZmluZWQpIHMuaGFuZGxlcnMgPSByO1xuXG4gICAgICAgIC8vIElmIHdlIGFyZSByZWNvcmRpbmcuLi5cbiAgICAgICAgaWYgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBzYXcuc3RlcCkge1xuICAgICAgICAgICAgLy8gLi4uIG91ciBjaGlsZHJlbiBzaG91bGQsIHRvb1xuICAgICAgICAgICAgcy5yZWNvcmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNiLmFwcGx5KHMuY2hhaW4oKSwgYXJncyk7XG4gICAgICAgIGlmIChhdXRvbmV4dCAhPT0gZmFsc2UpIHMub24oJ2VuZCcsIHNhdy5uZXh0KTtcbiAgICB9O1xuXG4gICAgc2F3LnJlY29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdXBncmFkZUNoYWluc2F3KHNhdyk7XG4gICAgfTtcblxuICAgIFsndHJhcCcsICdkb3duJywgJ2p1bXAnXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgc2F3W21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUbyB1c2UgdGhlIHRyYXAsIGRvd24gYW5kIGp1bXAgZmVhdHVyZXMsIHBsZWFzZSBcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNhbGwgcmVjb3JkKCkgZmlyc3QgdG8gc3RhcnQgcmVjb3JkaW5nIGFjdGlvbnMuXCIpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNhdztcbn07XG5cbmZ1bmN0aW9uIHVwZ3JhZGVDaGFpbnNhdyhzYXcpIHtcbiAgICBzYXcuc3RlcCA9IDA7XG5cbiAgICAvLyBvdmVycmlkZSBwb3BcbiAgICBzYXcucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2F3LmFjdGlvbnNbc2F3LnN0ZXArK107XG4gICAgfTtcblxuICAgIHNhdy50cmFwID0gZnVuY3Rpb24gKG5hbWUsIGNiKSB7XG4gICAgICAgIHZhciBwcyA9IEFycmF5LmlzQXJyYXkobmFtZSkgPyBuYW1lIDogW25hbWVdO1xuICAgICAgICBzYXcuYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHBhdGggOiBwcyxcbiAgICAgICAgICAgIHN0ZXAgOiBzYXcuc3RlcCxcbiAgICAgICAgICAgIGNiIDogY2IsXG4gICAgICAgICAgICB0cmFwIDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgc2F3LmRvd24gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgcHMgPSAoQXJyYXkuaXNBcnJheShuYW1lKSA/IG5hbWUgOiBbbmFtZV0pLmpvaW4oJy8nKTtcbiAgICAgICAgdmFyIGkgPSBzYXcuYWN0aW9ucy5zbGljZShzYXcuc3RlcCkubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpZiAoeC50cmFwICYmIHguc3RlcCA8PSBzYXcuc3RlcCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHgucGF0aC5qb2luKCcvJykgPT0gcHM7XG4gICAgICAgIH0pLmluZGV4T2YodHJ1ZSk7XG5cbiAgICAgICAgaWYgKGkgPj0gMCkgc2F3LnN0ZXAgKz0gaTtcbiAgICAgICAgZWxzZSBzYXcuc3RlcCA9IHNhdy5hY3Rpb25zLmxlbmd0aDtcblxuICAgICAgICB2YXIgYWN0ID0gc2F3LmFjdGlvbnNbc2F3LnN0ZXAgLSAxXTtcbiAgICAgICAgaWYgKGFjdCAmJiBhY3QudHJhcCkge1xuICAgICAgICAgICAgLy8gSXQncyBhIHRyYXAhXG4gICAgICAgICAgICBzYXcuc3RlcCA9IGFjdC5zdGVwO1xuICAgICAgICAgICAgYWN0LmNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzYXcubmV4dCgpO1xuICAgIH07XG5cbiAgICBzYXcuanVtcCA9IGZ1bmN0aW9uIChzdGVwKSB7XG4gICAgICAgIHNhdy5zdGVwID0gc3RlcDtcbiAgICAgICAgc2F3Lm5leHQoKTtcbiAgICB9O1xufTtcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJzO1xuXG5mdW5jdGlvbiBCdWZmZXJzIChidWZzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcnMpKSByZXR1cm4gbmV3IEJ1ZmZlcnMoYnVmcyk7XG4gICAgdGhpcy5idWZmZXJzID0gYnVmcyB8fCBbXTtcbiAgICB0aGlzLmxlbmd0aCA9IHRoaXMuYnVmZmVycy5yZWR1Y2UoZnVuY3Rpb24gKHNpemUsIGJ1Zikge1xuICAgICAgICByZXR1cm4gc2l6ZSArIGJ1Zi5sZW5ndGhcbiAgICB9LCAwKTtcbn1cblxuQnVmZmVycy5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhcmd1bWVudHNbaV0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmllZCB0byBwdXNoIGEgbm9uLWJ1ZmZlcicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHRoaXMuYnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgIHRoaXMubGVuZ3RoICs9IGJ1Zi5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYXJndW1lbnRzW2ldKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gdW5zaGlmdCBhIG5vbi1idWZmZXInKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYnVmID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB0aGlzLmJ1ZmZlcnMudW5zaGlmdChidWYpO1xuICAgICAgICB0aGlzLmxlbmd0aCArPSBidWYubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKGRzdCwgZFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2Uoc3RhcnQsIGVuZCkuY29weShkc3QsIGRTdGFydCwgMCwgZW5kIC0gc3RhcnQpO1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24gKGksIGhvd01hbnkpIHtcbiAgICB2YXIgYnVmZmVycyA9IHRoaXMuYnVmZmVycztcbiAgICB2YXIgaW5kZXggPSBpID49IDAgPyBpIDogdGhpcy5sZW5ndGggLSBpO1xuICAgIHZhciByZXBzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIFxuICAgIGlmIChob3dNYW55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaG93TWFueSA9IHRoaXMubGVuZ3RoIC0gaW5kZXg7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhvd01hbnkgPiB0aGlzLmxlbmd0aCAtIGluZGV4KSB7XG4gICAgICAgIGhvd01hbnkgPSB0aGlzLmxlbmd0aCAtIGluZGV4O1xuICAgIH1cbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5sZW5ndGggKz0gcmVwc1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIFxuICAgIHZhciByZW1vdmVkID0gbmV3IEJ1ZmZlcnMoKTtcbiAgICB2YXIgYnl0ZXMgPSAwO1xuICAgIFxuICAgIHZhciBzdGFydEJ5dGVzID0gMDtcbiAgICBmb3IgKFxuICAgICAgICB2YXIgaWkgPSAwO1xuICAgICAgICBpaSA8IGJ1ZmZlcnMubGVuZ3RoICYmIHN0YXJ0Qnl0ZXMgKyBidWZmZXJzW2lpXS5sZW5ndGggPCBpbmRleDtcbiAgICAgICAgaWkgKytcbiAgICApIHsgc3RhcnRCeXRlcyArPSBidWZmZXJzW2lpXS5sZW5ndGggfVxuICAgIFxuICAgIGlmIChpbmRleCAtIHN0YXJ0Qnl0ZXMgPiAwKSB7XG4gICAgICAgIHZhciBzdGFydCA9IGluZGV4IC0gc3RhcnRCeXRlcztcbiAgICAgICAgXG4gICAgICAgIGlmIChzdGFydCArIGhvd01hbnkgPCBidWZmZXJzW2lpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlbW92ZWQucHVzaChidWZmZXJzW2lpXS5zbGljZShzdGFydCwgc3RhcnQgKyBob3dNYW55KSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBvcmlnID0gYnVmZmVyc1tpaV07XG4gICAgICAgICAgICAvL3ZhciBidWYgPSBuZXcgQnVmZmVyKG9yaWcubGVuZ3RoIC0gaG93TWFueSk7XG4gICAgICAgICAgICB2YXIgYnVmMCA9IG5ldyBCdWZmZXIoc3RhcnQpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnVmMFtpXSA9IG9yaWdbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBidWYxID0gbmV3IEJ1ZmZlcihvcmlnLmxlbmd0aCAtIHN0YXJ0IC0gaG93TWFueSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQgKyBob3dNYW55OyBpIDwgb3JpZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGJ1ZjFbIGkgLSBob3dNYW55IC0gc3RhcnQgXSA9IG9yaWdbaV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHJlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciByZXBzXyA9IHJlcHMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICByZXBzXy51bnNoaWZ0KGJ1ZjApO1xuICAgICAgICAgICAgICAgIHJlcHNfLnB1c2goYnVmMSk7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5zcGxpY2UuYXBwbHkoYnVmZmVycywgWyBpaSwgMSBdLmNvbmNhdChyZXBzXykpO1xuICAgICAgICAgICAgICAgIGlpICs9IHJlcHNfLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXBzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzLnNwbGljZShpaSwgMSwgYnVmMCwgYnVmMSk7XG4gICAgICAgICAgICAgICAgLy9idWZmZXJzW2lpXSA9IGJ1ZjtcbiAgICAgICAgICAgICAgICBpaSArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGJ1ZmZlcnNbaWldLnNsaWNlKHN0YXJ0KSk7XG4gICAgICAgICAgICBidWZmZXJzW2lpXSA9IGJ1ZmZlcnNbaWldLnNsaWNlKDAsIHN0YXJ0KTtcbiAgICAgICAgICAgIGlpICsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmIChyZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYnVmZmVycy5zcGxpY2UuYXBwbHkoYnVmZmVycywgWyBpaSwgMCBdLmNvbmNhdChyZXBzKSk7XG4gICAgICAgIGlpICs9IHJlcHMubGVuZ3RoO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAocmVtb3ZlZC5sZW5ndGggPCBob3dNYW55KSB7XG4gICAgICAgIHZhciBidWYgPSBidWZmZXJzW2lpXTtcbiAgICAgICAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIHZhciB0YWtlID0gTWF0aC5taW4obGVuLCBob3dNYW55IC0gcmVtb3ZlZC5sZW5ndGgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRha2UgPT09IGxlbikge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGJ1Zik7XG4gICAgICAgICAgICBidWZmZXJzLnNwbGljZShpaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goYnVmLnNsaWNlKDAsIHRha2UpKTtcbiAgICAgICAgICAgIGJ1ZmZlcnNbaWldID0gYnVmZmVyc1tpaV0uc2xpY2UodGFrZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5sZW5ndGggLT0gcmVtb3ZlZC5sZW5ndGg7XG4gICAgXG4gICAgcmV0dXJuIHJlbW92ZWQ7XG59O1xuIFxuQnVmZmVycy5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoaSwgaikge1xuICAgIHZhciBidWZmZXJzID0gdGhpcy5idWZmZXJzO1xuICAgIGlmIChqID09PSB1bmRlZmluZWQpIGogPSB0aGlzLmxlbmd0aDtcbiAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSBpID0gMDtcbiAgICBcbiAgICBpZiAoaiA+IHRoaXMubGVuZ3RoKSBqID0gdGhpcy5sZW5ndGg7XG4gICAgXG4gICAgdmFyIHN0YXJ0Qnl0ZXMgPSAwO1xuICAgIGZvciAoXG4gICAgICAgIHZhciBzaSA9IDA7XG4gICAgICAgIHNpIDwgYnVmZmVycy5sZW5ndGggJiYgc3RhcnRCeXRlcyArIGJ1ZmZlcnNbc2ldLmxlbmd0aCA8PSBpO1xuICAgICAgICBzaSArK1xuICAgICkgeyBzdGFydEJ5dGVzICs9IGJ1ZmZlcnNbc2ldLmxlbmd0aCB9XG4gICAgXG4gICAgdmFyIHRhcmdldCA9IG5ldyBCdWZmZXIoaiAtIGkpO1xuICAgIFxuICAgIHZhciB0aSA9IDA7XG4gICAgZm9yICh2YXIgaWkgPSBzaTsgdGkgPCBqIC0gaSAmJiBpaSA8IGJ1ZmZlcnMubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgIHZhciBsZW4gPSBidWZmZXJzW2lpXS5sZW5ndGg7XG4gICAgICAgIFxuICAgICAgICB2YXIgc3RhcnQgPSB0aSA9PT0gMCA/IGkgLSBzdGFydEJ5dGVzIDogMDtcbiAgICAgICAgdmFyIGVuZCA9IHRpICsgbGVuID49IGogLSBpXG4gICAgICAgICAgICA/IE1hdGgubWluKHN0YXJ0ICsgKGogLSBpKSAtIHRpLCBsZW4pXG4gICAgICAgICAgICA6IGxlblxuICAgICAgICA7XG4gICAgICAgIFxuICAgICAgICBidWZmZXJzW2lpXS5jb3B5KHRhcmdldCwgdGksIHN0YXJ0LCBlbmQpO1xuICAgICAgICB0aSArPSBlbmQgLSBzdGFydDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRhcmdldDtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnBvcyA9IGZ1bmN0aW9uIChpKSB7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignb29iJyk7XG4gICAgdmFyIGwgPSBpLCBiaSA9IDAsIGJ1ID0gbnVsbDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICAgIGJ1ID0gdGhpcy5idWZmZXJzW2JpXTtcbiAgICAgICAgaWYgKGwgPCBidS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7YnVmOiBiaSwgb2Zmc2V0OiBsfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGwgLT0gYnUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGJpKys7XG4gICAgfVxufTtcblxuQnVmZmVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChpKSB7XG4gICAgdmFyIHBvcyA9IHRoaXMucG9zKGkpO1xuXG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyc1twb3MuYnVmXS5nZXQocG9zLm9mZnNldCk7XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQgKGksIGIpIHtcbiAgICB2YXIgcG9zID0gdGhpcy5wb3MoaSk7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJzW3Bvcy5idWZdLnNldChwb3Mub2Zmc2V0LCBiKTtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAobmVlZGxlLCBvZmZzZXQpIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5lZWRsZSkge1xuICAgICAgICBuZWVkbGUgPSBuZXcgQnVmZmVyKG5lZWRsZSk7XG4gICAgfSBlbHNlIGlmIChuZWVkbGUgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgLy8gYWxyZWFkeSBhIGJ1ZmZlclxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0eXBlIGZvciBhIHNlYXJjaCBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoIW5lZWRsZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAwLCBqID0gMCwgbWF0Y2ggPSAwLCBtc3RhcnQsIHBvcyA9IDA7XG5cbiAgICAvLyBzdGFydCBzZWFyY2ggZnJvbSBhIHBhcnRpY3VsYXIgcG9pbnQgaW4gdGhlIHZpcnR1YWwgYnVmZmVyXG4gICAgaWYgKG9mZnNldCkge1xuICAgICAgICB2YXIgcCA9IHRoaXMucG9zKG9mZnNldCk7XG4gICAgICAgIGkgPSBwLmJ1ZjtcbiAgICAgICAgaiA9IHAub2Zmc2V0O1xuICAgICAgICBwb3MgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggY2hhcmFjdGVyIGluIHZpcnR1YWwgYnVmZmVyXG4gICAgZm9yICg7Oykge1xuICAgICAgICB3aGlsZSAoaiA+PSB0aGlzLmJ1ZmZlcnNbaV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgIGkrKztcblxuICAgICAgICAgICAgaWYgKGkgPj0gdGhpcy5idWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBzdHJpbmcgbm90IGZvdW5kXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXIgPSB0aGlzLmJ1ZmZlcnNbaV1bal07XG5cbiAgICAgICAgaWYgKGNoYXIgPT0gbmVlZGxlW21hdGNoXSkge1xuICAgICAgICAgICAgLy8ga2VlcCB0cmFjayB3aGVyZSBtYXRjaCBzdGFydGVkXG4gICAgICAgICAgICBpZiAobWF0Y2ggPT0gMCkge1xuICAgICAgICAgICAgICAgIG1zdGFydCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaTogaSxcbiAgICAgICAgICAgICAgICAgICAgajogaixcbiAgICAgICAgICAgICAgICAgICAgcG9zOiBwb3NcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF0Y2grKztcbiAgICAgICAgICAgIGlmIChtYXRjaCA9PSBuZWVkbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gZnVsbCBtYXRjaFxuICAgICAgICAgICAgICAgIHJldHVybiBtc3RhcnQucG9zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoICE9IDApIHtcbiAgICAgICAgICAgIC8vIGEgcGFydGlhbCBtYXRjaCBlbmRlZCwgZ28gYmFjayB0byBtYXRjaCBzdGFydGluZyBwb3NpdGlvblxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIGNvbnRpbnVlIHRoZSBzZWFyY2ggYXQgdGhlIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgICBpID0gbXN0YXJ0Lmk7XG4gICAgICAgICAgICBqID0gbXN0YXJ0Lmo7XG4gICAgICAgICAgICBwb3MgPSBtc3RhcnQucG9zO1xuICAgICAgICAgICAgbWF0Y2ggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaisrO1xuICAgICAgICBwb3MrKztcbiAgICB9XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNsaWNlKCk7XG59XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gdGhpcy5zbGljZShzdGFydCwgZW5kKS50b1N0cmluZyhlbmNvZGluZyk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0b3JlKSB7XG4gICAgZnVuY3Rpb24gZ2V0c2V0IChuYW1lLCB2YWx1ZSkge1xuICAgICAgICB2YXIgbm9kZSA9IHZhcnMuc3RvcmU7XG4gICAgICAgIHZhciBrZXlzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgICAgICBrZXlzLnNsaWNlKDAsLTEpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIGlmIChub2RlW2tdID09PSB1bmRlZmluZWQpIG5vZGVba10gPSB7fTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlW2tdXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIga2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHZhciB2YXJzID0ge1xuICAgICAgICBnZXQgOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldHNldChuYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0IDogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0c2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RvcmUgOiBzdG9yZSB8fCB7fSxcbiAgICB9O1xuICAgIHJldHVybiB2YXJzO1xufTtcbiIsCiAgICAidmFyIENoYWluc2F3ID0gcmVxdWlyZSgnY2hhaW5zYXcnKTtcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgQnVmZmVycyA9IHJlcXVpcmUoJ2J1ZmZlcnMnKTtcbnZhciBWYXJzID0gcmVxdWlyZSgnLi9saWIvdmFycy5qcycpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJ1Zk9yRW0sIGV2ZW50TmFtZSkge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoYnVmT3JFbSkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMucGFyc2UoYnVmT3JFbSk7XG4gICAgfVxuICAgIFxuICAgIHZhciBzID0gZXhwb3J0cy5zdHJlYW0oKTtcbiAgICBpZiAoYnVmT3JFbSAmJiBidWZPckVtLnBpcGUpIHtcbiAgICAgICAgYnVmT3JFbS5waXBlKHMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChidWZPckVtKSB7XG4gICAgICAgIGJ1Zk9yRW0ub24oZXZlbnROYW1lIHx8ICdkYXRhJywgZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgcy53cml0ZShidWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGJ1Zk9yRW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHMuZW5kKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcztcbn07XG5cbmV4cG9ydHMuc3RyZWFtID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgaWYgKGlucHV0KSByZXR1cm4gZXhwb3J0cy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIFxuICAgIHZhciBwZW5kaW5nID0gbnVsbDtcbiAgICBmdW5jdGlvbiBnZXRCeXRlcyAoYnl0ZXMsIGNiLCBza2lwKSB7XG4gICAgICAgIHBlbmRpbmcgPSB7XG4gICAgICAgICAgICBieXRlcyA6IGJ5dGVzLFxuICAgICAgICAgICAgc2tpcCA6IHNraXAsXG4gICAgICAgICAgICBjYiA6IGZ1bmN0aW9uIChidWYpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjYihidWYpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZGlzcGF0Y2goKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIG9mZnNldCA9IG51bGw7XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2ggKCkge1xuICAgICAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgICAgICAgIGlmIChjYXVnaHRFbmQpIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGVuZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGVuZGluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGJ5dGVzID0gb2Zmc2V0ICsgcGVuZGluZy5ieXRlcztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGJ1ZmZlcnMubGVuZ3RoID49IGJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZjtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmZmVycy5zcGxpY2UoMCwgYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBlbmRpbmcuc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGVuZGluZy5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWZmZXJzLnNsaWNlKG9mZnNldCwgYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGJ5dGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAocGVuZGluZy5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuY2IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuY2IoYnVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gYnVpbGRlciAoc2F3KSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQgKCkgeyBpZiAoIWRvbmUpIHNhdy5uZXh0KCkgfVxuICAgICAgICBcbiAgICAgICAgdmFyIHNlbGYgPSB3b3JkcyhmdW5jdGlvbiAoYnl0ZXMsIGNiKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBnZXRCeXRlcyhieXRlcywgZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgICAgICAgICB2YXJzLnNldChuYW1lLCBjYihidWYpKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBzZWxmLnRhcCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgc2F3Lm5lc3QoY2IsIHZhcnMuc3RvcmUpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5pbnRvID0gZnVuY3Rpb24gKGtleSwgY2IpIHtcbiAgICAgICAgICAgIGlmICghdmFycy5nZXQoa2V5KSkgdmFycy5zZXQoa2V5LCB7fSk7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gdmFycztcbiAgICAgICAgICAgIHZhcnMgPSBWYXJzKHBhcmVudC5nZXQoa2V5KSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNhdy5uZXN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFycyA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHZhcnMuc3RvcmUpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5mbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhcnMuc3RvcmUgPSB7fTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYubG9vcCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgdmFyIGVuZCA9IGZhbHNlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBzYXcubmVzdChmYWxzZSwgZnVuY3Rpb24gbG9vcCAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJzID0gdmFycy5zdG9yZTtcbiAgICAgICAgICAgICAgICBjYi5jYWxsKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH0sIHZhcnMuc3RvcmUpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZCkgc2F3Lm5leHQoKVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGxvb3AuY2FsbCh0aGlzKVxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9LCB2YXJzLnN0b3JlKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYuYnVmZmVyID0gZnVuY3Rpb24gKG5hbWUsIGJ5dGVzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJ5dGVzID0gdmFycy5nZXQoYnl0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBnZXRCeXRlcyhieXRlcywgZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgICAgIHZhcnMuc2V0KG5hbWUsIGJ1Zik7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLnNraXAgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYnl0ZXMgPSB2YXJzLmdldChieXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGdldEJ5dGVzKGJ5dGVzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLnNjYW4gPSBmdW5jdGlvbiBmaW5kIChuYW1lLCBzZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHNlYXJjaCA9IG5ldyBCdWZmZXIoc2VhcmNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2VhcmNoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2VhcmNoIG11c3QgYmUgYSBCdWZmZXIgb3IgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRha2VuID0gMDtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBvcyA9IGJ1ZmZlcnMuaW5kZXhPZihzZWFyY2gsIG9mZnNldCArIHRha2VuKTtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IHBvcy1vZmZzZXQtdGFrZW47XG4gICAgICAgICAgICAgICAgaWYgKHBvcyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFycy5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdGFrZW4gKyBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB0YWtlbiArIGkgKyBzZWFyY2gubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFycy5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnNsaWNlKDAsIHRha2VuICsgaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnNwbGljZSgwLCB0YWtlbiArIGkgKyBzZWFyY2gubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IE1hdGgubWF4KGJ1ZmZlcnMubGVuZ3RoIC0gc2VhcmNoLmxlbmd0aCAtIG9mZnNldCAtIHRha2VuLCAwKTtcblx0XHRcdFx0fVxuICAgICAgICAgICAgICAgIHRha2VuICs9IGk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGlzcGF0Y2goKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYucGVlayA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHNhdy5uZXN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYi5jYWxsKHRoaXMsIHZhcnMuc3RvcmUpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICB2YXIgc3RyZWFtID0gQ2hhaW5zYXcubGlnaHQoYnVpbGRlcik7XG4gICAgc3RyZWFtLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBcbiAgICB2YXIgYnVmZmVycyA9IEJ1ZmZlcnMoKTtcbiAgICBcbiAgICBzdHJlYW0ud3JpdGUgPSBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChidWYpO1xuICAgICAgICBkaXNwYXRjaCgpO1xuICAgIH07XG4gICAgXG4gICAgdmFyIHZhcnMgPSBWYXJzKCk7XG4gICAgXG4gICAgdmFyIGRvbmUgPSBmYWxzZSwgY2F1Z2h0RW5kID0gZmFsc2U7XG4gICAgc3RyZWFtLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2F1Z2h0RW5kID0gdHJ1ZTtcbiAgICB9O1xuICAgIFxuICAgIHN0cmVhbS5waXBlID0gU3RyZWFtLnByb3RvdHlwZS5waXBlO1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgc3RyZWFtW25hbWVdID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZVtuYW1lXTtcbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gc3RyZWFtO1xufTtcblxuZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlIChidWZmZXIpIHtcbiAgICB2YXIgc2VsZiA9IHdvcmRzKGZ1bmN0aW9uIChieXRlcywgY2IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICsgYnl0ZXMgPD0gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBidWYgPSBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBieXRlcyk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzO1xuICAgICAgICAgICAgICAgIHZhcnMuc2V0KG5hbWUsIGNiKGJ1ZikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFycy5zZXQobmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgdmFycyA9IFZhcnMoKTtcbiAgICBzZWxmLnZhcnMgPSB2YXJzLnN0b3JlO1xuICAgIFxuICAgIHNlbGYudGFwID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIGNiLmNhbGwoc2VsZiwgdmFycy5zdG9yZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5pbnRvID0gZnVuY3Rpb24gKGtleSwgY2IpIHtcbiAgICAgICAgaWYgKCF2YXJzLmdldChrZXkpKSB7XG4gICAgICAgICAgICB2YXJzLnNldChrZXksIHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50ID0gdmFycztcbiAgICAgICAgdmFycyA9IFZhcnMocGFyZW50LmdldChrZXkpKTtcbiAgICAgICAgY2IuY2FsbChzZWxmLCB2YXJzLnN0b3JlKTtcbiAgICAgICAgdmFycyA9IHBhcmVudDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmxvb3AgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgdmFyIGVuZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZW5kZXIgPSBmdW5jdGlvbiAoKSB7IGVuZCA9IHRydWUgfTtcbiAgICAgICAgd2hpbGUgKGVuZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNiLmNhbGwoc2VsZiwgZW5kZXIsIHZhcnMuc3RvcmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5idWZmZXIgPSBmdW5jdGlvbiAobmFtZSwgc2l6ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHNpemUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzaXplID0gdmFycy5nZXQoc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJ1ZiA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIE1hdGgubWluKGJ1ZmZlci5sZW5ndGgsIG9mZnNldCArIHNpemUpKTtcbiAgICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgICAgIHZhcnMuc2V0KG5hbWUsIGJ1Zik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYuc2tpcCA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYnl0ZXMgPSB2YXJzLmdldChieXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLnNjYW4gPSBmdW5jdGlvbiAobmFtZSwgc2VhcmNoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc2VhcmNoID0gbmV3IEJ1ZmZlcihzZWFyY2gpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2VhcmNoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWFyY2ggbXVzdCBiZSBhIEJ1ZmZlciBvciBhIHN0cmluZycpO1xuICAgICAgICB9XG4gICAgICAgIHZhcnMuc2V0KG5hbWUsIG51bGwpO1xuICAgICAgICBcbiAgICAgICAgLy8gc2ltcGxlIGJ1dCBzbG93IHN0cmluZyBzZWFyY2hcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgKyBvZmZzZXQgPD0gYnVmZmVyLmxlbmd0aCAtIHNlYXJjaC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgdmFyIGogPSAwO1xuICAgICAgICAgICAgICAgIGogPCBzZWFyY2gubGVuZ3RoICYmIGJ1ZmZlcltvZmZzZXQraStqXSA9PT0gc2VhcmNoW2pdO1xuICAgICAgICAgICAgICAgIGorK1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChqID09PSBzZWFyY2gubGVuZ3RoKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFycy5zZXQobmFtZSwgYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgaSkpO1xuICAgICAgICBvZmZzZXQgKz0gaSArIHNlYXJjaC5sZW5ndGg7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5wZWVrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIHZhciB3YXMgPSBvZmZzZXQ7XG4gICAgICAgIGNiLmNhbGwoc2VsZiwgdmFycy5zdG9yZSk7XG4gICAgICAgIG9mZnNldCA9IHdhcztcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXJzLnN0b3JlID0ge307XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5lb2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvZmZzZXQgPj0gYnVmZmVyLmxlbmd0aDtcbiAgICB9O1xuICAgIFxuICAgIHJldHVybiBzZWxmO1xufTtcblxuLy8gY29udmVydCBieXRlIHN0cmluZ3MgdG8gdW5zaWduZWQgbGl0dGxlIGVuZGlhbiBudW1iZXJzXG5mdW5jdGlvbiBkZWNvZGVMRXUgKGJ5dGVzKSB7XG4gICAgdmFyIGFjYyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhY2MgKz0gTWF0aC5wb3coMjU2LGkpICogYnl0ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG59XG5cbi8vIGNvbnZlcnQgYnl0ZSBzdHJpbmdzIHRvIHVuc2lnbmVkIGJpZyBlbmRpYW4gbnVtYmVyc1xuZnVuY3Rpb24gZGVjb2RlQkV1IChieXRlcykge1xuICAgIHZhciBhY2MgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYWNjICs9IE1hdGgucG93KDI1NiwgYnl0ZXMubGVuZ3RoIC0gaSAtIDEpICogYnl0ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG59XG5cbi8vIGNvbnZlcnQgYnl0ZSBzdHJpbmdzIHRvIHNpZ25lZCBiaWcgZW5kaWFuIG51bWJlcnNcbmZ1bmN0aW9uIGRlY29kZUJFcyAoYnl0ZXMpIHtcbiAgICB2YXIgdmFsID0gZGVjb2RlQkV1KGJ5dGVzKTtcbiAgICBpZiAoKGJ5dGVzWzBdICYgMHg4MCkgPT0gMHg4MCkge1xuICAgICAgICB2YWwgLT0gTWF0aC5wb3coMjU2LCBieXRlcy5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuXG4vLyBjb252ZXJ0IGJ5dGUgc3RyaW5ncyB0byBzaWduZWQgbGl0dGxlIGVuZGlhbiBudW1iZXJzXG5mdW5jdGlvbiBkZWNvZGVMRXMgKGJ5dGVzKSB7XG4gICAgdmFyIHZhbCA9IGRlY29kZUxFdShieXRlcyk7XG4gICAgaWYgKChieXRlc1tieXRlcy5sZW5ndGggLSAxXSAmIDB4ODApID09IDB4ODApIHtcbiAgICAgICAgdmFsIC09IE1hdGgucG93KDI1NiwgYnl0ZXMubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gd29yZHMgKGRlY29kZSkge1xuICAgIHZhciBzZWxmID0ge307XG4gICAgXG4gICAgWyAxLCAyLCA0LCA4IF0uZm9yRWFjaChmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIGJpdHMgPSBieXRlcyAqIDg7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnbGUnXVxuICAgICAgICA9IHNlbGZbJ3dvcmQnICsgYml0cyArICdsdSddXG4gICAgICAgID0gZGVjb2RlKGJ5dGVzLCBkZWNvZGVMRXUpO1xuICAgICAgICBcbiAgICAgICAgc2VsZlsnd29yZCcgKyBiaXRzICsgJ2xzJ11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUxFcyk7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnYmUnXVxuICAgICAgICA9IHNlbGZbJ3dvcmQnICsgYml0cyArICdidSddXG4gICAgICAgID0gZGVjb2RlKGJ5dGVzLCBkZWNvZGVCRXUpO1xuICAgICAgICBcbiAgICAgICAgc2VsZlsnd29yZCcgKyBiaXRzICsgJ2JzJ11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUJFcyk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gd29yZDhiZShuKSA9PSB3b3JkOGxlKG4pIGZvciBhbGwgblxuICAgIHNlbGYud29yZDggPSBzZWxmLndvcmQ4dSA9IHNlbGYud29yZDhiZTtcbiAgICBzZWxmLndvcmQ4cyA9IHNlbGYud29yZDhicztcbiAgICBcbiAgICByZXR1cm4gc2VsZjtcbn1cbiIsCiAgICAidmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBNYXRjaGVyU3RyZWFtKHBhdHRlcm5EZXNjLCBtYXRjaEZuKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1hdGNoZXJTdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2hlclN0cmVhbSgpO1xuICAgIH1cblxuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHAgPSB0eXBlb2YgcGF0dGVybkRlc2MgPT09ICdvYmplY3QnID8gcGF0dGVybkRlc2MucGF0dGVybiA6IHBhdHRlcm5EZXNjO1xuXG4gICAgdGhpcy5wYXR0ZXJuID0gQnVmZmVyLmlzQnVmZmVyKHApID8gcCA6IEJ1ZmZlci5mcm9tKHApO1xuICAgIHRoaXMucmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhdHRlcm4ubGVuZ3RoO1xuICAgIGlmIChwYXR0ZXJuRGVzYy5yZXF1aXJlZEV4dHJhU2l6ZSkgdGhpcy5yZXF1aXJlZExlbmd0aCArPSBwYXR0ZXJuRGVzYy5yZXF1aXJlZEV4dHJhU2l6ZTtcblxuICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgIHRoaXMuYnl0ZXNTb0ZhciA9IDA7XG5cbiAgICB0aGlzLm1hdGNoRm4gPSBtYXRjaEZuO1xufVxuXG51dGlsLmluaGVyaXRzKE1hdGNoZXJTdHJlYW0sIFRyYW5zZm9ybSk7XG5cbk1hdGNoZXJTdHJlYW0ucHJvdG90eXBlLmNoZWNrRGF0YUNodW5rID0gZnVuY3Rpb24gKGlnbm9yZU1hdGNoWmVybykge1xuICAgIHZhciBlbm91Z2hEYXRhID0gdGhpcy5kYXRhLmxlbmd0aCA+PSB0aGlzLnJlcXVpcmVkTGVuZ3RoOyAvLyBzdHJpY3QgbW9yZSB0aGFuID9cbiAgICBpZiAoIWVub3VnaERhdGEpIHsgcmV0dXJuOyB9XG5cbiAgICB2YXIgbWF0Y2hJbmRleCA9IHRoaXMuZGF0YS5pbmRleE9mKHRoaXMucGF0dGVybiwgaWdub3JlTWF0Y2haZXJvID8gMSA6IDApO1xuICAgIGlmIChtYXRjaEluZGV4ID49IDAgJiYgbWF0Y2hJbmRleCArIHRoaXMucmVxdWlyZWRMZW5ndGggPiB0aGlzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtYXRjaEluZGV4ID4gMCkge1xuICAgICAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCBtYXRjaEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMucHVzaChwYWNrZXQpO1xuICAgICAgICAgICAgdGhpcy5ieXRlc1NvRmFyICs9IG1hdGNoSW5kZXg7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UobWF0Y2hJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtYXRjaEluZGV4ID09PSAtMSkge1xuICAgICAgICB2YXIgcGFja2V0TGVuID0gdGhpcy5kYXRhLmxlbmd0aCAtIHRoaXMucmVxdWlyZWRMZW5ndGggKyAxO1xuXG4gICAgICAgIHZhciBwYWNrZXQgPSB0aGlzLmRhdGEuc2xpY2UoMCwgcGFja2V0TGVuKTtcbiAgICAgICAgdGhpcy5wdXNoKHBhY2tldCk7XG4gICAgICAgIHRoaXMuYnl0ZXNTb0ZhciArPSBwYWNrZXRMZW47XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zbGljZShwYWNrZXRMZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZm91bmQgbWF0Y2hcbiAgICBpZiAobWF0Y2hJbmRleCA+IDApIHtcbiAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCBtYXRjaEluZGV4KTtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKG1hdGNoSW5kZXgpO1xuICAgICAgICB0aGlzLnB1c2gocGFja2V0KTtcbiAgICAgICAgdGhpcy5ieXRlc1NvRmFyICs9IG1hdGNoSW5kZXg7XG4gICAgfVxuXG4gICAgdmFyIGZpbmlzaGVkID0gdGhpcy5tYXRjaEZuID8gdGhpcy5tYXRjaEZuKHRoaXMuZGF0YSwgdGhpcy5ieXRlc1NvRmFyKSA6IHRydWU7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbk1hdGNoZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuZGF0YSwgY2h1bmtdKTtcblxuICAgIHZhciBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7XG4gICAgd2hpbGUgKHRoaXMuY2hlY2tEYXRhQ2h1bmsoIWZpcnN0SXRlcmF0aW9uKSkge1xuICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNiKCk7XG59XG5cbk1hdGNoZXJTdHJlYW0ucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChjYikge1xuICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgZmlyc3RJdGVyYXRpb24gPSB0cnVlO1xuICAgICAgICB3aGlsZSAodGhpcy5jaGVja0RhdGFDaHVuayghZmlyc3RJdGVyYXRpb24pKSB7XG4gICAgICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMucHVzaCh0aGlzLmRhdGEpO1xuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIGNiKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWF0Y2hlclN0cmVhbTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xuXG5mdW5jdGlvbiBFbnRyeSgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRW50cnkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRW50cnkoKTtcbiAgICB9XG5cbiAgICBzdHJlYW0uUGFzc1Rocm91Z2guY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IG51bGw7XG4gICAgdGhpcy50eXBlID0gbnVsbDtcbiAgICB0aGlzLmlzRGlyZWN0b3J5ID0gZmFsc2U7XG59XG5cbmluaGVyaXRzKEVudHJ5LCBzdHJlYW0uUGFzc1Rocm91Z2gpO1xuXG5FbnRyeS5wcm90b3R5cGUuYXV0b2RyYWluID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnBpcGUobmV3IHN0cmVhbS5UcmFuc2Zvcm0oeyB0cmFuc2Zvcm06IGZ1bmN0aW9uIChkLCBlLCBjYikgeyBjYigpOyB9IH0pKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFbnRyeTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmFyeSA9IHJlcXVpcmUoJ2JpbmFyeScpO1xudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcbnZhciBNYXRjaGVyU3RyZWFtID0gcmVxdWlyZSgnLi9tYXRjaGVyLXN0cmVhbScpO1xudmFyIEVudHJ5ID0gcmVxdWlyZSgnLi9lbnRyeScpO1xuXG5jb25zdCBzdGF0ZXMgPSB7XG4gICAgU1RSRUFNX1NUQVJUOiAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgIFNUQVJUOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICBMT0NBTF9GSUxFX0hFQURFUjogICAgICAgICAgICAgICAgICAgIDIsXG4gICAgTE9DQUxfRklMRV9IRUFERVJfU1VGRklYOiAgICAgICAgICAgICAzLFxuICAgIEZJTEVfREFUQTogICAgICAgICAgICAgICAgICAgICAgICAgICAgNCxcbiAgICBGSUxFX0RBVEFfRU5EOiAgICAgICAgICAgICAgICAgICAgICAgIDUsXG4gICAgREFUQV9ERVNDUklQVE9SOiAgICAgICAgICAgICAgICAgICAgICA2LFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOiAgICAgICAgNyxcbiAgICBDRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg6IDgsXG4gICAgQ0RJUjY0X0VORDogICAgICAgICAgICAgICAgICAgICAgICAgICA5LFxuICAgIENESVI2NF9FTkRfREFUQV9TRUNUT1I6ICAgICAgICAgICAgICAgMTAsXG4gICAgQ0RJUjY0X0xPQ0FUT1I6ICAgICAgICAgICAgICAgICAgICAgICAxMSxcbiAgICBDRU5UUkFMX0RJUkVDVE9SWV9FTkQ6ICAgICAgICAgICAgICAgIDEyLFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOiAgICAgICAgMTMsXG4gICAgVFJBSUxJTkdfSlVOSzogICAgICAgICAgICAgICAgICAgICAgICAxNCxcblxuICAgIEVSUk9SOiA5OVxufVxuXG5jb25zdCBGT1VSX0dJR1MgPSA0Mjk0OTY3Mjk2O1xuXG5jb25zdCBTSUdfTE9DQUxfRklMRV9IRUFERVIgID0gMHgwNDAzNGI1MDtcbmNvbnN0IFNJR19EQVRBX0RFU0NSSVBUT1IgICAgPSAweDA4MDc0YjUwO1xuY29uc3QgU0lHX0NESVJfUkVDT1JEICAgICAgICA9IDB4MDIwMTRiNTA7XG5jb25zdCBTSUdfQ0RJUjY0X1JFQ09SRF9FTkQgID0gMHgwNjA2NGI1MDtcbmNvbnN0IFNJR19DRElSNjRfTE9DQVRPUl9FTkQgPSAweDA3MDY0YjUwO1xuY29uc3QgU0lHX0NESVJfUkVDT1JEX0VORCAgICA9IDB4MDYwNTRiNTA7XG5cbmZ1bmN0aW9uIFVuemlwU3RyZWFtKG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVW56aXBTdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgVW56aXBTdHJlYW0ob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc3RyZWFtLlRyYW5zZm9ybS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLmRhdGEgPSBuZXcgQnVmZmVyKCcnKTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUUkVBTV9TVEFSVDtcbiAgICB0aGlzLnNraXBwZWRCeXRlcyA9IDA7XG4gICAgdGhpcy5wYXJzZWRFbnRpdHkgPSBudWxsO1xuICAgIHRoaXMub3V0U3RyZWFtSW5mbyA9IHt9O1xufVxuXG51dGlsLmluaGVyaXRzKFVuemlwU3RyZWFtLCBzdHJlYW0uVHJhbnNmb3JtKTtcblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLnByb2Nlc3NEYXRhQ2h1bmsgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICB2YXIgcmVxdWlyZWRMZW5ndGg7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgY2FzZSBzdGF0ZXMuU1RSRUFNX1NUQVJUOlxuICAgICAgICBjYXNlIHN0YXRlcy5TVEFSVDpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gMjY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhRmllbGRMZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuREFUQV9ERVNDUklQVE9SOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhRmllbGRMZW5ndGggKyB0aGlzLnBhcnNlZEVudGl0eS5maWxlQ29tbWVudExlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EX0RBVEFfU0VDVE9SOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5jZW50cmFsRGlyZWN0b3J5UmVjb3JkU2l6ZSAtIDQ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9MT0NBVE9SOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSAxNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDE4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5jb21tZW50TGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkZJTEVfREFUQTpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBjYXNlIHN0YXRlcy5GSUxFX0RBVEFfRU5EOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2Ugc3RhdGVzLlRSQUlMSU5HX0pVTks6XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSBjb25zb2xlLmxvZyhcImZvdW5kXCIsIGNodW5rLmxlbmd0aCwgXCJieXRlcyBvZiBUUkFJTElOR19KVU5LXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIGNodW5rTGVuZ3RoID0gY2h1bmsubGVuZ3RoO1xuICAgIGlmIChjaHVua0xlbmd0aCA8IHJlcXVpcmVkTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIHN0YXRlcy5TVFJFQU1fU1RBUlQ6XG4gICAgICAgIGNhc2Ugc3RhdGVzLlNUQVJUOlxuICAgICAgICAgICAgdmFyIHNpZ25hdHVyZSA9IGNodW5rLnJlYWRVSW50MzJMRSgwKTtcbiAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBTSUdfTE9DQUxfRklMRV9IRUFERVI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVJfUkVDT1JEOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFNJR19DRElSNjRfUkVDT1JEX0VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRElSNjRfRU5EO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFNJR19DRElSNjRfTE9DQVRPUl9FTkQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuQ0RJUjY0X0xPQ0FUT1I7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVJfUkVDT1JEX0VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1N0cmVhbVN0YXJ0ID0gdGhpcy5zdGF0ZSA9PT0gc3RhdGVzLlNUUkVBTV9TVEFSVDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N0cmVhbVN0YXJ0ICYmIChzaWduYXR1cmUgJiAweGZmZmYpICE9PSAweDRiNTAgJiYgdGhpcy5za2lwcGVkQnl0ZXMgPCAyNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UnbGwgYWxsb3cgYSBwYWRkaW5nIG9mIG1heCAyOCBieXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IHNpZ25hdHVyZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b1NraXAgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA0ICYmIHJlbWFpbmluZyAhPT0gMDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gcmVtYWluaW5nID4+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmVtYWluaW5nICYgMHhmZikgPT09IDB4NTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9Ta2lwID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5za2lwcGVkQnl0ZXMgKz0gdG9Ta2lwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1ZykgY29uc29sZS5sb2coJ1NraXBwZWQnLCB0aGlzLnNraXBwZWRCeXRlcywgJ2J5dGVzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9Ta2lwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuRVJST1I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJNc2cgPSBpc1N0cmVhbVN0YXJ0ID8gXCJOb3QgYSB2YWxpZCB6aXAgZmlsZVwiIDogXCJJbnZhbGlkIHNpZ25hdHVyZSBpbiB6aXAgZmlsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lnID0gY2h1bmsucmVhZFVJbnQzMkxFKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzU3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXNTdHJpbmcgPSBjaHVuay5zbGljZSgwLCA0KS50b1N0cmluZygpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJVbmV4cGVjdGVkIHNpZ25hdHVyZSBpbiB6aXAgZmlsZTogMHhcIiArIHNpZy50b1N0cmluZygxNiksICdcIicgKyBhc1N0cmluZyArICdcIiwgc2tpcHBlZCcsIHRoaXMuc2tpcHBlZEJ5dGVzLCAnYnl0ZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IoZXJyTXNnKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNraXBwZWRCeXRlcyA9IDA7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVI6XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eSA9IHRoaXMuX3JlYWRGaWxlKGNodW5rKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVJfU1VGRklYO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gbmV3IEVudHJ5KCk7XG4gICAgICAgICAgICB2YXIgaXNVdGY4ID0gKHRoaXMucGFyc2VkRW50aXR5LmZsYWdzICYgMHg4MDApICE9PSAwO1xuICAgICAgICAgICAgZW50cnkucGF0aCA9IHRoaXMuX2RlY29kZVN0cmluZyhjaHVuay5zbGljZSgwLCB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCksIGlzVXRmOCk7XG4gICAgICAgICAgICB2YXIgZXh0cmFEYXRhQnVmZmVyID0gY2h1bmsuc2xpY2UodGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGgsIHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aCk7XG4gICAgICAgICAgICB2YXIgZXh0cmEgPSB0aGlzLl9yZWFkRXh0cmFGaWVsZHMoZXh0cmFEYXRhQnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChleHRyYSAmJiBleHRyYS5wYXJzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEucGFyc2VkLnBhdGggJiYgIWlzVXRmOCkge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeS5wYXRoID0gZXh0cmEucGFyc2VkLnBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZXh0cmEucGFyc2VkLnVuY29tcHJlc3NlZFNpemUpICYmIHRoaXMucGFyc2VkRW50aXR5LnVuY29tcHJlc3NlZFNpemUgPT09IEZPVVJfR0lHUy0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LnVuY29tcHJlc3NlZFNpemUgPSBleHRyYS5wYXJzZWQudW5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShleHRyYS5wYXJzZWQuY29tcHJlc3NlZFNpemUpICYmIHRoaXMucGFyc2VkRW50aXR5LmNvbXByZXNzZWRTaXplID09PSBGT1VSX0dJR1MtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eS5jb21wcmVzc2VkU2l6ZSA9IGV4dHJhLnBhcnNlZC5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eS5leHRyYSA9IGV4dHJhLnBhcnNlZCB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnT2JqID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJzZWRFbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogZW50cnkucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3M6ICcweCcgKyB0aGlzLnBhcnNlZEVudGl0eS5mbGFncy50b1N0cmluZygxNiksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhRmllbGRzOiBleHRyYSAmJiBleHRyYS5kZWJ1Z1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBMT0NBTF9GSUxFX0hFQURFUjpcIiwgSlNPTi5zdHJpbmdpZnkoZGVidWdPYmosIG51bGwsIDIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVPdXRTdHJlYW0odGhpcy5wYXJzZWRFbnRpdHksIGVudHJ5KTtcblxuICAgICAgICAgICAgdGhpcy5lbWl0KFwiZW50cnlcIiwgZW50cnkpO1xuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkZJTEVfREFUQTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOlxuICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkgPSB0aGlzLl9yZWFkQ2VudHJhbERpcmVjdG9yeUVudHJ5KGNodW5rKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVJfU1VGRklYO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgLy8gZ290IGZpbGUgbmFtZSBpbiBjaHVua1swLi5dXG4gICAgICAgICAgICB2YXIgaXNVdGY4ID0gKHRoaXMucGFyc2VkRW50aXR5LmZsYWdzICYgMHg4MDApICE9PSAwO1xuICAgICAgICAgICAgdmFyIHBhdGggPSB0aGlzLl9kZWNvZGVTdHJpbmcoY2h1bmsuc2xpY2UoMCwgdGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGgpLCBpc1V0ZjgpO1xuICAgICAgICAgICAgdmFyIGV4dHJhRGF0YUJ1ZmZlciA9IGNodW5rLnNsaWNlKHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoLCB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhRmllbGRMZW5ndGgpO1xuICAgICAgICAgICAgdmFyIGV4dHJhID0gdGhpcy5fcmVhZEV4dHJhRmllbGRzKGV4dHJhRGF0YUJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoZXh0cmEgJiYgZXh0cmEucGFyc2VkICYmIGV4dHJhLnBhcnNlZC5wYXRoICYmICFpc1V0ZjgpIHtcbiAgICAgICAgICAgICAgICBwYXRoID0gZXh0cmEucGFyc2VkLnBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eS5leHRyYSA9IGV4dHJhLnBhcnNlZDtcblxuICAgICAgICAgICAgdmFyIGlzVW5peCA9ICgodGhpcy5wYXJzZWRFbnRpdHkudmVyc2lvbk1hZGVCeSAmIDB4ZmYwMCkgPj4gOCkgPT09IDM7XG4gICAgICAgICAgICB2YXIgdW5peEF0dHJzLCBpc1N5bWxpbms7XG4gICAgICAgICAgICBpZiAoaXNVbml4KSB7XG4gICAgICAgICAgICAgICAgdW5peEF0dHJzID0gdGhpcy5wYXJzZWRFbnRpdHkuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA+Pj4gMTY7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlID0gdW5peEF0dHJzID4+PiAxMjtcbiAgICAgICAgICAgICAgICBpc1N5bWxpbmsgPSAoZmlsZVR5cGUgJiAwbzEyKSA9PT0gMG8xMjsgLy8gX19TX0lGTE5LXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVidWdPYmogPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcnNlZEVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgICAgICAgICBmbGFnczogJzB4JyArIHRoaXMucGFyc2VkRW50aXR5LmZsYWdzLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICAgICAgICAgdW5peEF0dHJzOiB1bml4QXR0cnMgJiYgJzAnICsgdW5peEF0dHJzLnRvU3RyaW5nKDgpLFxuICAgICAgICAgICAgICAgICAgICBpc1N5bWxpbms6IGlzU3ltbGluayxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFGaWVsZHM6IGV4dHJhLmRlYnVnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBDRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUjpcIiwgSlNPTi5zdHJpbmdpZnkoZGVidWdPYmosIG51bGwsIDIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RBUlQ7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EOlxuICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkgPSB0aGlzLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5NjQoY2h1bmspO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBDRElSNjRfRU5EX1JFQ09SRDpcIiwgdGhpcy5wYXJzZWRFbnRpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRElSNjRfRU5EX0RBVEFfU0VDVE9SO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0RJUjY0X0VORF9EQVRBX1NFQ1RPUjpcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RBUlQ7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfTE9DQVRPUjpcbiAgICAgICAgICAgIC8vIGlnbm9yZSwgbm90aGluZyBpbnRlcmVzdGluZ1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5ID0gdGhpcy5fcmVhZEVuZE9mQ2VudHJhbERpcmVjdG9yeShjaHVuayk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENFTlRSQUxfRElSRUNUT1JZX0VORDpcIiwgdGhpcy5wYXJzZWRFbnRpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9FTkRfQ09NTUVOVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOlxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBDRU5UUkFMX0RJUkVDVE9SWV9FTkRfQ09NTUVOVDpcIiwgY2h1bmsuc2xpY2UoMCwgcmVxdWlyZWRMZW5ndGgpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5UUkFJTElOR19KVU5LO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuRVJST1I6XG4gICAgICAgICAgICByZXR1cm4gY2h1bmsubGVuZ3RoOyAvLyBkaXNjYXJkXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlkbid0IGhhbmRsZSBzdGF0ZSAjXCIsIHRoaXMuc3RhdGUsIFwiZGlzY2FyZGluZ1wiKTtcbiAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7XG4gICAgfVxufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3ByZXBhcmVPdXRTdHJlYW0gPSBmdW5jdGlvbiAodmFycywgZW50cnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgaXNEaXJlY3RvcnkgPSB2YXJzLnVuY29tcHJlc3NlZFNpemUgPT09IDAgJiYgL1tcXC9cXFxcXSQvLnRlc3QoZW50cnkucGF0aCk7XG4gICAgLy8gcHJvdGVjdCBhZ2FpbnN0IG1hbGljaW91cyB6aXAgZmlsZXMgd2hpY2ggd2FudCB0byBleHRyYWN0IHRvIHBhcmVudCBkaXJzXG4gICAgZW50cnkucGF0aCA9IGVudHJ5LnBhdGgucmVwbGFjZSgvKD88PV58Wy9cXFxcXSspWy5dWy5dKyg/PVsvXFxcXF0rfCQpL2csIFwiLlwiKTtcbiAgICBlbnRyeS50eXBlID0gaXNEaXJlY3RvcnkgPyAnRGlyZWN0b3J5JyA6ICdGaWxlJztcbiAgICBlbnRyeS5pc0RpcmVjdG9yeSA9IGlzRGlyZWN0b3J5O1xuXG4gICAgdmFyIGZpbGVTaXplS25vd24gPSAhKHZhcnMuZmxhZ3MgJiAweDA4KTtcbiAgICBpZiAoZmlsZVNpemVLbm93bikge1xuICAgICAgICBlbnRyeS5zaXplID0gdmFycy51bmNvbXByZXNzZWRTaXplO1xuICAgIH1cblxuICAgIHZhciBpc1ZlcnNpb25TdXBwb3J0ZWQgPSB2YXJzLnZlcnNpb25zTmVlZGVkVG9FeHRyYWN0IDw9IDQ1O1xuXG4gICAgdGhpcy5vdXRTdHJlYW1JbmZvID0ge1xuICAgICAgICBzdHJlYW06IG51bGwsXG4gICAgICAgIGxpbWl0OiBmaWxlU2l6ZUtub3duID8gdmFycy5jb21wcmVzc2VkU2l6ZSA6IC0xLFxuICAgICAgICB3cml0dGVuOiAwXG4gICAgfTtcblxuICAgIGlmICghZmlsZVNpemVLbm93bikge1xuICAgICAgICB2YXIgcGF0dGVybiA9IG5ldyBCdWZmZXIoNCk7XG4gICAgICAgIHBhdHRlcm4ud3JpdGVVSW50MzJMRShTSUdfREFUQV9ERVNDUklQVE9SLCAwKTtcbiAgICAgICAgdmFyIHppcDY0TW9kZSA9IHZhcnMuZXh0cmEuemlwNjRNb2RlO1xuICAgICAgICB2YXIgZXh0cmFTaXplID0gemlwNjRNb2RlID8gMjAgOiAxMjtcbiAgICAgICAgdmFyIHNlYXJjaFBhdHRlcm4gPSB7XG4gICAgICAgICAgICBwYXR0ZXJuOiBwYXR0ZXJuLFxuICAgICAgICAgICAgcmVxdWlyZWRFeHRyYVNpemU6IGV4dHJhU2l6ZVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1hdGNoZXJTdHJlYW0gPSBuZXcgTWF0Y2hlclN0cmVhbShzZWFyY2hQYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2hlZENodW5rLCBzaXplU29GYXIpIHtcbiAgICAgICAgICAgIHZhciB2YXJzID0gc2VsZi5fcmVhZERhdGFEZXNjcmlwdG9yKG1hdGNoZWRDaHVuaywgemlwNjRNb2RlKTtcblxuICAgICAgICAgICAgdmFyIGNvbXByZXNzZWRTaXplTWF0Y2hlcyA9IHZhcnMuY29tcHJlc3NlZFNpemUgPT09IHNpemVTb0ZhcjtcbiAgICAgICAgICAgIC8vIGxldCdzIGFsc28gZGVhbCB3aXRoIGFyY2hpdmVzIHdpdGggNEdpQisgZmlsZXMgd2l0aG91dCB6aXA2NFxuICAgICAgICAgICAgaWYgKCF6aXA2NE1vZGUgJiYgIWNvbXByZXNzZWRTaXplTWF0Y2hlcyAmJiBzaXplU29GYXIgPj0gRk9VUl9HSUdTKSB7XG4gICAgICAgICAgICAgICAgdmFyIG92ZXJmbG93biA9IHNpemVTb0ZhciAtIEZPVVJfR0lHUztcbiAgICAgICAgICAgICAgICB3aGlsZSAob3ZlcmZsb3duID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZFNpemVNYXRjaGVzID0gdmFycy5jb21wcmVzc2VkU2l6ZSA9PT0gb3ZlcmZsb3duO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHJlc3NlZFNpemVNYXRjaGVzKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3duIC09IEZPVVJfR0lHUztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvbXByZXNzZWRTaXplTWF0Y2hlcykgeyByZXR1cm47IH1cblxuICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlcy5GSUxFX0RBVEFfRU5EO1xuICAgICAgICAgICAgdmFyIHNsaWNlT2Zmc2V0ID0gemlwNjRNb2RlID8gMjQgOiAxNjtcbiAgICAgICAgICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGF0YSA9IEJ1ZmZlci5jb25jYXQoW21hdGNoZWRDaHVuay5zbGljZShzbGljZU9mZnNldCksIHNlbGYuZGF0YV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmRhdGEgPSBtYXRjaGVkQ2h1bmsuc2xpY2Uoc2xpY2VPZmZzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0gPSBtYXRjaGVyU3RyZWFtO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0gPSBuZXcgc3RyZWFtLlBhc3NUaHJvdWdoKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzRW5jcnlwdGVkID0gKHZhcnMuZmxhZ3MgJiAweDAxKSB8fCAodmFycy5mbGFncyAmIDB4NDApO1xuICAgIGlmIChpc0VuY3J5cHRlZCB8fCAhaXNWZXJzaW9uU3VwcG9ydGVkKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gaXNFbmNyeXB0ZWQgPyBcIkVuY3J5cHRlZCBmaWxlcyBhcmUgbm90IHN1cHBvcnRlZCFcIlxuICAgICAgICAgICAgOiAoXCJaaXAgdmVyc2lvbiBcIiArIE1hdGguZmxvb3IodmFycy52ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCAvIDEwKSArIFwiLlwiICsgdmFycy52ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCAlIDEwICsgXCIgaXMgbm90IHN1cHBvcnRlZFwiKTtcblxuICAgICAgICBlbnRyeS5za2lwID0gdHJ1ZTtcbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0cnkgdG8gc2tpcCBvdmVyIHRoaXMgZW50cnlcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbS5waXBlKG5ldyBFbnRyeSgpLmF1dG9kcmFpbigpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpc0NvbXByZXNzZWQgPSB2YXJzLmNvbXByZXNzaW9uTWV0aG9kID4gMDtcbiAgICBpZiAoaXNDb21wcmVzc2VkKSB7XG4gICAgICAgIHZhciBpbmZsYXRlciA9IHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpO1xuICAgICAgICBpbmZsYXRlci5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGVzLkVSUk9SO1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLnBpcGUoaW5mbGF0ZXIpLnBpcGUoZW50cnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0ucGlwZShlbnRyeSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RyYWluQWxsRW50cmllcykge1xuICAgICAgICBlbnRyeS5hdXRvZHJhaW4oKTtcbiAgICB9XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZEZpbGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkMTZsdSgndmVyc2lvbnNOZWVkZWRUb0V4dHJhY3QnKVxuICAgICAgICAud29yZDE2bHUoJ2ZsYWdzJylcbiAgICAgICAgLndvcmQxNmx1KCdjb21wcmVzc2lvbk1ldGhvZCcpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkVGltZScpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkRGF0ZScpXG4gICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAud29yZDMybHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQzMmx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQxNmx1KCdmaWxlTmFtZUxlbmd0aCcpXG4gICAgICAgIC53b3JkMTZsdSgnZXh0cmFGaWVsZExlbmd0aCcpXG4gICAgICAgIC52YXJzO1xuXG4gICAgcmV0dXJuIHZhcnM7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZEV4dHJhRmllbGRzID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgZXh0cmEgPSB7fTtcbiAgICB2YXIgcmVzdWx0ID0geyBwYXJzZWQ6IGV4dHJhIH07XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICByZXN1bHQuZGVidWcgPSBbXTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBkYXRhLmxlbmd0aCkge1xuICAgICAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAgICAgLnNraXAoaW5kZXgpXG4gICAgICAgICAgICAud29yZDE2bHUoJ2V4dHJhSWQnKVxuICAgICAgICAgICAgLndvcmQxNmx1KCdleHRyYVNpemUnKVxuICAgICAgICAgICAgLnZhcnM7XG5cbiAgICAgICAgaW5kZXggKz0gNDtcblxuICAgICAgICB2YXIgZmllbGRUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgICBzd2l0Y2ggKHZhcnMuZXh0cmFJZCkge1xuICAgICAgICAgICAgY2FzZSAweDAwMDE6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJaaXA2NCBleHRlbmRlZCBpbmZvcm1hdGlvbiBleHRyYSBmaWVsZFwiO1xuICAgICAgICAgICAgICAgIHZhciB6NjR2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEuc2xpY2UoaW5kZXgsIGluZGV4K3ZhcnMuZXh0cmFTaXplKSlcbiAgICAgICAgICAgICAgICAgICAgLndvcmQ2NGx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgICAgICAgICAgICAgLndvcmQ2NGx1KCdjb21wcmVzc2VkU2l6ZScpXG4gICAgICAgICAgICAgICAgICAgIC53b3JkNjRsdSgnb2Zmc2V0VG9Mb2NhbEhlYWRlcicpXG4gICAgICAgICAgICAgICAgICAgIC53b3JkMzJsdSgnZGlza1N0YXJ0TnVtYmVyJylcbiAgICAgICAgICAgICAgICAgICAgLnZhcnM7XG4gICAgICAgICAgICAgICAgaWYgKHo2NHZhcnMudW5jb21wcmVzc2VkU2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS51bmNvbXByZXNzZWRTaXplID0gejY0dmFycy51bmNvbXByZXNzZWRTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoejY0dmFycy5jb21wcmVzc2VkU2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5jb21wcmVzc2VkU2l6ZSA9IHo2NHZhcnMuY29tcHJlc3NlZFNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4dHJhLnppcDY0TW9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4MDAwYTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIk5URlMgZXh0cmEgZmllbGRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg1NDU1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiZXh0ZW5kZWQgdGltZXN0YW1wXCI7XG4gICAgICAgICAgICAgICAgdmFyIHRpbWVzdGFtcEZpZWxkcyA9IGRhdGEucmVhZFVJbnQ4KGluZGV4KTtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMTtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gb2Zmc2V0ICsgNCAmJiB0aW1lc3RhbXBGaWVsZHMgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLm10aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gb2Zmc2V0ICsgNCAmJiB0aW1lc3RhbXBGaWVsZHMgJiAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmF0aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gb2Zmc2V0ICsgNCAmJiB0aW1lc3RhbXBGaWVsZHMgJiA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmN0aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAweDcwNzU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJJbmZvLVpJUCBVbmljb2RlIFBhdGggRXh0cmEgRmllbGRcIjtcbiAgICAgICAgICAgICAgICB2YXIgZmllbGRWZXIgPSBkYXRhLnJlYWRVSW50OChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkVmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgYmUgY2hlY2tpbmcgdGhpcyBhZ2FpbnN0IG91ciBwYXRoIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUNyYzMyID0gZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGhCdWZmZXIgPSBkYXRhLnNsaWNlKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEucGF0aCA9IHBhdGhCdWZmZXIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4MDAwZDpcbiAgICAgICAgICAgIGNhc2UgMHg1ODU1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IHZhcnMuZXh0cmFJZCA9PT0gMHgwMDBkID8gXCJQS1dBUkUgVW5peFwiIDogXCJJbmZvLVpJUCBVTklYICh0eXBlIDEpXCI7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID49IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmF0aW1lID0gYXRpbWU7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLm10aW1lID0gbXRpbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID49IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS51aWQgPSB1aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5naWQgPSBnaWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4Nzg1NTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIkluZm8tWklQIFVOSVggKHR5cGUgMilcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gNCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdWlkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdpZCA9IGRhdGEucmVhZFVJbnQxNkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnVpZCA9IHVpZDtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuZ2lkID0gZ2lkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg3ODc1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiSW5mby1aSVAgTmV3IFVuaXhcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFWZXIgPSBkYXRhLnJlYWRVSW50OChpbmRleCk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhVmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1aWRTaXplID0gZGF0YS5yZWFkVUludDgoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVpZFNpemUgPD0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudWlkID0gZGF0YS5yZWFkVUludExFKGluZGV4ICsgb2Zmc2V0LCB1aWRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdWlkU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkU2l6ZSA9IGRhdGEucmVhZFVJbnQ4KGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnaWRTaXplIDw9IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmdpZCA9IGRhdGEucmVhZFVJbnRMRShpbmRleCArIG9mZnNldCwgZ2lkU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4NzU2ZTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIkFTaSBVbml4XCI7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID49IDE0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjcmMgPSBkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IGRhdGEucmVhZFVJbnQxNkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXpkZXYgPSBkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgdWlkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdpZCA9IGRhdGEucmVhZFVJbnQxNkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLm1vZGUgPSBtb2RlO1xuICAgICAgICAgICAgICAgICAgICBleHRyYS51aWQgPSB1aWQ7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmdpZCA9IGdpZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID4gMTQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGluZGV4ICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGluZGV4ICsgdmFycy5leHRyYVNpemUgLSAxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1saW5rTmFtZSA9IHRoaXMuX2RlY29kZVN0cmluZyhkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnN5bWxpbmsgPSBzeW1saW5rTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIHJlc3VsdC5kZWJ1Zy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHRyYUlkOiAnMHgnICsgdmFycy5leHRyYUlkLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZmllbGRUeXBlLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEuc2xpY2UoaW5kZXgsIGluZGV4ICsgdmFycy5leHRyYVNpemUpLmluc3BlY3QoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleCArPSB2YXJzLmV4dHJhU2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3JlYWREYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uIChkYXRhLCB6aXA2NE1vZGUpIHtcbiAgICBpZiAoemlwNjRNb2RlKSB7XG4gICAgICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgICAgICAud29yZDMybHUoJ2RhdGFEZXNjcmlwdG9yU2lnbmF0dXJlJylcbiAgICAgICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAgICAgLndvcmQ2NGx1KCdjb21wcmVzc2VkU2l6ZScpXG4gICAgICAgICAgICAud29yZDY0bHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAgICAgLnZhcnM7XG5cbiAgICAgICAgcmV0dXJuIHZhcnM7XG4gICAgfVxuXG4gICAgdmFyIHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YSlcbiAgICAgICAgLndvcmQzMmx1KCdkYXRhRGVzY3JpcHRvclNpZ25hdHVyZScpXG4gICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAud29yZDMybHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQzMmx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkQ2VudHJhbERpcmVjdG9yeUVudHJ5ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25NYWRlQnknKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25zTmVlZGVkVG9FeHRyYWN0JylcbiAgICAgICAgLndvcmQxNmx1KCdmbGFncycpXG4gICAgICAgIC53b3JkMTZsdSgnY29tcHJlc3Npb25NZXRob2QnKVxuICAgICAgICAud29yZDE2bHUoJ2xhc3RNb2RpZmllZFRpbWUnKVxuICAgICAgICAud29yZDE2bHUoJ2xhc3RNb2RpZmllZERhdGUnKVxuICAgICAgICAud29yZDMybHUoJ2NyYzMyJylcbiAgICAgICAgLndvcmQzMmx1KCdjb21wcmVzc2VkU2l6ZScpXG4gICAgICAgIC53b3JkMzJsdSgndW5jb21wcmVzc2VkU2l6ZScpXG4gICAgICAgIC53b3JkMTZsdSgnZmlsZU5hbWVMZW5ndGgnKVxuICAgICAgICAud29yZDE2bHUoJ2V4dHJhRmllbGRMZW5ndGgnKVxuICAgICAgICAud29yZDE2bHUoJ2ZpbGVDb21tZW50TGVuZ3RoJylcbiAgICAgICAgLndvcmQxNmx1KCdkaXNrTnVtYmVyJylcbiAgICAgICAgLndvcmQxNmx1KCdpbnRlcm5hbEZpbGVBdHRyaWJ1dGVzJylcbiAgICAgICAgLndvcmQzMmx1KCdleHRlcm5hbEZpbGVBdHRyaWJ1dGVzJylcbiAgICAgICAgLndvcmQzMmx1KCdvZmZzZXRUb0xvY2FsRmlsZUhlYWRlcicpXG4gICAgICAgIC52YXJzO1xuXG4gICAgcmV0dXJuIHZhcnM7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZEVuZE9mQ2VudHJhbERpcmVjdG9yeTY0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDY0bHUoJ2NlbnRyYWxEaXJlY3RvcnlSZWNvcmRTaXplJylcbiAgICAgICAgLndvcmQxNmx1KCd2ZXJzaW9uTWFkZUJ5JylcbiAgICAgICAgLndvcmQxNmx1KCd2ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCcpXG4gICAgICAgIC53b3JkMzJsdSgnZGlza051bWJlcicpXG4gICAgICAgIC53b3JkMzJsdSgnZGlza051bWJlcldpdGhDZW50cmFsRGlyZWN0b3J5U3RhcnQnKVxuICAgICAgICAud29yZDY0bHUoJ2NlbnRyYWxEaXJlY3RvcnlFbnRyaWVzJylcbiAgICAgICAgLndvcmQ2NGx1KCd0b3RhbENlbnRyYWxEaXJlY3RvcnlFbnRyaWVzJylcbiAgICAgICAgLndvcmQ2NGx1KCdzaXplT2ZDZW50cmFsRGlyZWN0b3J5JylcbiAgICAgICAgLndvcmQ2NGx1KCdvZmZzZXRUb1N0YXJ0T2ZDZW50cmFsRGlyZWN0b3J5JylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDE2bHUoJ2Rpc2tOdW1iZXInKVxuICAgICAgICAud29yZDE2bHUoJ2Rpc2tTdGFydCcpXG4gICAgICAgIC53b3JkMTZsdSgnY2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDE2bHUoJ3RvdGFsQ2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDMybHUoJ3NpemVPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAud29yZDMybHUoJ29mZnNldFRvU3RhcnRPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAud29yZDE2bHUoJ2NvbW1lbnRMZW5ndGgnKVxuICAgICAgICAudmFycztcblxuICAgIHJldHVybiB2YXJzO1xufVxuXG5jb25zdCBjcDQzNyA9ICdcXHUwMDAw4pi64pi74pml4pmm4pmj4pmg4oCi4peY4peL4peZ4pmC4pmA4pmq4pmr4pi84pa64peE4oaV4oC8wrbCp+KWrOKGqOKGkeKGk+KGkuKGkOKIn+KGlOKWsuKWvCAhXCIjJCUmXFwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+4oyCw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcwqLCo8Kl4oKnxpLDocOtw7PDusOxw5HCqsK6wr/ijJDCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoCAnO1xuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX2RlY29kZVN0cmluZyA9IGZ1bmN0aW9uIChidWZmZXIsIGlzVXRmOCkge1xuICAgIGlmIChpc1V0ZjgpIHtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygndXRmOCcpO1xuICAgIH1cbiAgICAvLyBhbGxvdyBwYXNzaW5nIGN1c3RvbSBkZWNvZGVyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWNvZGVTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kZWNvZGVTdHJpbmcoYnVmZmVyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaT0wOyBpPGJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgKz0gY3A0MzdbYnVmZmVyW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9wYXJzZU9yT3V0cHV0ID0gZnVuY3Rpb24gKGVuY29kaW5nLCBjYikge1xuICAgIHZhciBjb25zdW1lO1xuICAgIHdoaWxlICgoY29uc3VtZSA9IHRoaXMucHJvY2Vzc0RhdGFDaHVuayh0aGlzLmRhdGEpKSA+IDApIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKGNvbnN1bWUpO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IHN0YXRlcy5GSUxFX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMub3V0U3RyZWFtSW5mby5saW1pdCA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gdGhpcy5vdXRTdHJlYW1JbmZvLmxpbWl0IC0gdGhpcy5vdXRTdHJlYW1JbmZvLndyaXR0ZW47XG4gICAgICAgICAgICB2YXIgcGFja2V0O1xuICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA8IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwYWNrZXQgPSB0aGlzLmRhdGEuc2xpY2UoMCwgcmVtYWluaW5nKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UocmVtYWluaW5nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFja2V0ID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbiArPSBwYWNrZXQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3V0U3RyZWFtSW5mby5saW1pdCA9PT0gdGhpcy5vdXRTdHJlYW1JbmZvLndyaXR0ZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUQVJUO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbS5lbmQocGFja2V0LCBlbmNvZGluZywgY2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLndyaXRlKHBhY2tldCwgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwYWNrZXQgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQnVmZmVyKCcnKTtcblxuICAgICAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLndyaXR0ZW4gKz0gcGFja2V0Lmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBvdXRwdXRTdHJlYW0gPSB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtO1xuICAgICAgICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKHBhY2tldCwgZW5jb2RpbmcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gc3RhdGVzLkZJTEVfREFUQV9FTkQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dFN0cmVhbS5lbmQoY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UndmUgd3JpdHRlbiB0byB0aGUgb3V0cHV0IHN0cmVhbSwgbGV0dGluZyB0aGF0IHdyaXRlIGRlYWwgd2l0aCB0aGUgY2FsbGJhY2tcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNiKCk7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5kcmFpbkFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9kcmFpbkFsbEVudHJpZXMgPSB0cnVlO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWxmLmRhdGEgPSBCdWZmZXIuY29uY2F0KFtzZWxmLmRhdGEsIGNodW5rXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5kYXRhID0gY2h1bms7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0RGF0YUxlbmd0aCA9IHNlbGYuZGF0YS5sZW5ndGg7XG4gICAgdmFyIGRvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCAmJiBzZWxmLmRhdGEubGVuZ3RoIDwgc3RhcnREYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGFydERhdGFMZW5ndGggPSBzZWxmLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgc2VsZi5fcGFyc2VPck91dHB1dChlbmNvZGluZywgZG9uZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2IoKTtcbiAgICB9O1xuICAgIHNlbGYuX3BhcnNlT3JPdXRwdXQoZW5jb2RpbmcsIGRvbmUpO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWxmLl9wYXJzZU9yT3V0cHV0KCdidWZmZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXRhLmxlbmd0aCA+IDApIHJldHVybiBzZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkgeyBzZWxmLl9mbHVzaChjYik7IH0pO1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZWxmLnN0YXRlID09PSBzdGF0ZXMuRklMRV9EQVRBKSB7XG4gICAgICAgIC8vIHVoIG9oLCBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgICByZXR1cm4gY2IobmV3IEVycm9yKFwiU3RyZWFtIGZpbmlzaGVkIGluIGFuIGludmFsaWQgc3RhdGUsIHVuY29tcHJlc3Npb24gZmFpbGVkXCIpKTtcbiAgICB9XG5cbiAgICBzZXRJbW1lZGlhdGUoY2IpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVuemlwU3RyZWFtO1xuIiwKICAgICJ2YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgVW56aXBTdHJlYW0gPSByZXF1aXJlKCcuL3VuemlwLXN0cmVhbScpO1xuXG5mdW5jdGlvbiBQYXJzZXJTdHJlYW0ob3B0cykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXJzZXJTdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2VyU3RyZWFtKG9wdHMpO1xuICAgIH1cblxuICAgIHZhciB0cmFuc2Zvcm1PcHRzID0gb3B0cyB8fCB7fTtcbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCB7IHJlYWRhYmxlT2JqZWN0TW9kZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMub3B0cyA9IG9wdHMgfHwge307XG4gICAgdGhpcy51bnppcFN0cmVhbSA9IG5ldyBVbnppcFN0cmVhbSh0aGlzLm9wdHMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2VudHJ5JywgZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgc2VsZi5wdXNoKGVudHJ5KTtcbiAgICB9KTtcbiAgICB0aGlzLnVuemlwU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgfSk7XG59XG5cbnV0aWwuaW5oZXJpdHMoUGFyc2VyU3RyZWFtLCBUcmFuc2Zvcm0pO1xuXG5QYXJzZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgIHRoaXMudW56aXBTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYik7XG59XG5cblBhcnNlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudW56aXBTdHJlYW0uZW5kKGZ1bmN0aW9uKCkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkgeyBzZWxmLmVtaXQoJ2Nsb3NlJyk7IH0pO1xuICAgICAgICBjYigpO1xuICAgIH0pO1xufVxuXG5QYXJzZXJTdHJlYW0ucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXZlbnROYW1lLCBmbikge1xuICAgIGlmIChldmVudE5hbWUgPT09ICdlbnRyeScpIHtcbiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCAnZGF0YScsIGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIFRyYW5zZm9ybS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldmVudE5hbWUsIGZuKTtcbn1cblxuUGFyc2VyU3RyZWFtLnByb3RvdHlwZS5kcmFpbkFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnVuemlwU3RyZWFtLmRyYWluQWxsKCk7XG4gICAgcmV0dXJuIHRoaXMucGlwZShuZXcgVHJhbnNmb3JtKHsgb2JqZWN0TW9kZTogdHJ1ZSwgdHJhbnNmb3JtOiBmdW5jdGlvbiAoZCwgZSwgY2IpIHsgY2IoKTsgfSB9KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyU3RyZWFtO1xuIiwKICAgICJ2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgXzA3NzcgPSBwYXJzZUludCgnMDc3NycsIDgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1rZGlyUC5ta2RpcnAgPSBta2RpclAubWtkaXJQID0gbWtkaXJQO1xuXG5mdW5jdGlvbiBta2RpclAgKHAsIG9wdHMsIGYsIG1hZGUpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZiA9IG9wdHM7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdHMgPSB7IG1vZGU6IG9wdHMgfTtcbiAgICB9XG4gICAgXG4gICAgdmFyIG1vZGUgPSBvcHRzLm1vZGU7XG4gICAgdmFyIHhmcyA9IG9wdHMuZnMgfHwgZnM7XG4gICAgXG4gICAgaWYgKG1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtb2RlID0gXzA3NzdcbiAgICB9XG4gICAgaWYgKCFtYWRlKSBtYWRlID0gbnVsbDtcbiAgICBcbiAgICB2YXIgY2IgPSBmIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uICgpIHt9O1xuICAgIHAgPSBwYXRoLnJlc29sdmUocCk7XG4gICAgXG4gICAgeGZzLm1rZGlyKHAsIG1vZGUsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoIWVyKSB7XG4gICAgICAgICAgICBtYWRlID0gbWFkZSB8fCBwO1xuICAgICAgICAgICAgcmV0dXJuIGNiKG51bGwsIG1hZGUpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZXIuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnRU5PRU5UJzpcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAocGF0aC5kaXJuYW1lKHApID09PSBwKSByZXR1cm4gY2IoZXIpO1xuICAgICAgICAgICAgICAgIG1rZGlyUChwYXRoLmRpcm5hbWUocCksIG9wdHMsIGZ1bmN0aW9uIChlciwgbWFkZSkge1xuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyKSBjYihlciwgbWFkZSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgbWtkaXJQKHAsIG9wdHMsIGNiLCBtYWRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYW55IG90aGVyIGVycm9yLCBqdXN0IHNlZSBpZiB0aGVyZSdzIGEgZGlyXG4gICAgICAgICAgICAvLyB0aGVyZSBhbHJlYWR5LiAgSWYgc28sIHRoZW4gaG9vcmF5ISAgSWYgbm90LCB0aGVuIHNvbWV0aGluZ1xuICAgICAgICAgICAgLy8gaXMgYm9ya2VkLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB4ZnMuc3RhdChwLCBmdW5jdGlvbiAoZXIyLCBzdGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzdGF0IGZhaWxzLCB0aGVuIHRoYXQncyBzdXBlciB3ZWlyZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHRoZSBvcmlnaW5hbCBlcnJvciBiZSB0aGUgZmFpbHVyZSByZWFzb24uXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcjIgfHwgIXN0YXQuaXNEaXJlY3RvcnkoKSkgY2IoZXIsIG1hZGUpXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY2IobnVsbCwgbWFkZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxubWtkaXJQLnN5bmMgPSBmdW5jdGlvbiBzeW5jIChwLCBvcHRzLCBtYWRlKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBvcHRzID0geyBtb2RlOiBvcHRzIH07XG4gICAgfVxuICAgIFxuICAgIHZhciBtb2RlID0gb3B0cy5tb2RlO1xuICAgIHZhciB4ZnMgPSBvcHRzLmZzIHx8IGZzO1xuICAgIFxuICAgIGlmIChtb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbW9kZSA9IF8wNzc3XG4gICAgfVxuICAgIGlmICghbWFkZSkgbWFkZSA9IG51bGw7XG5cbiAgICBwID0gcGF0aC5yZXNvbHZlKHApO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgeGZzLm1rZGlyU3luYyhwLCBtb2RlKTtcbiAgICAgICAgbWFkZSA9IG1hZGUgfHwgcDtcbiAgICB9XG4gICAgY2F0Y2ggKGVycjApIHtcbiAgICAgICAgc3dpdGNoIChlcnIwLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0VOT0VOVCcgOlxuICAgICAgICAgICAgICAgIG1hZGUgPSBzeW5jKHBhdGguZGlybmFtZShwKSwgb3B0cywgbWFkZSk7XG4gICAgICAgICAgICAgICAgc3luYyhwLCBvcHRzLCBtYWRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYW55IG90aGVyIGVycm9yLCBqdXN0IHNlZSBpZiB0aGVyZSdzIGEgZGlyXG4gICAgICAgICAgICAvLyB0aGVyZSBhbHJlYWR5LiAgSWYgc28sIHRoZW4gaG9vcmF5ISAgSWYgbm90LCB0aGVuIHNvbWV0aGluZ1xuICAgICAgICAgICAgLy8gaXMgYm9ya2VkLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB2YXIgc3RhdDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ID0geGZzLnN0YXRTeW5jKHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyMSkgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8ge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnIwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoIXN0YXQuaXNEaXJlY3RvcnkoKSkgdGhyb3cgZXJyMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYWRlO1xufTtcbiIsCiAgICAidmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgbWtkaXJwID0gcmVxdWlyZSgnbWtkaXJwJyk7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtO1xudmFyIFVuemlwU3RyZWFtID0gcmVxdWlyZSgnLi91bnppcC1zdHJlYW0nKTtcblxuZnVuY3Rpb24gRXh0cmFjdCAob3B0cykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFeHRyYWN0KSlcbiAgICByZXR1cm4gbmV3IEV4dHJhY3Qob3B0cyk7XG5cbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMub3B0cyA9IG9wdHMgfHwge307XG4gICAgdGhpcy51bnppcFN0cmVhbSA9IG5ldyBVbnppcFN0cmVhbSh0aGlzLm9wdHMpO1xuICAgIHRoaXMudW5maW5pc2hlZEVudHJpZXMgPSAwO1xuICAgIHRoaXMuYWZ0ZXJGbHVzaFdhaXQgPSBmYWxzZTtcbiAgICB0aGlzLmNyZWF0ZWREaXJlY3RvcmllcyA9IHt9O1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2VudHJ5JywgdGhpcy5fcHJvY2Vzc0VudHJ5LmJpbmQodGhpcykpO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9KTtcbn1cblxudXRpbC5pbmhlcml0cyhFeHRyYWN0LCBUcmFuc2Zvcm0pO1xuXG5FeHRyYWN0LnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICB0aGlzLnVuemlwU3RyZWFtLndyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpO1xufVxuXG5FeHRyYWN0LnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgYWxsRG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkgeyBzZWxmLmVtaXQoJ2Nsb3NlJyk7IH0pO1xuICAgICAgICBjYigpO1xuICAgIH1cblxuICAgIHRoaXMudW56aXBTdHJlYW0uZW5kKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoc2VsZi51bmZpbmlzaGVkRW50cmllcyA+IDApIHtcbiAgICAgICAgICAgIHNlbGYuYWZ0ZXJGbHVzaFdhaXQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYub24oJ2F3YWl0LWZpbmlzaGVkJywgYWxsRG9uZSk7XG4gICAgICAgIH1cbiAgICAgICAgYWxsRG9uZSgpO1xuICAgIH0pO1xufVxuXG5FeHRyYWN0LnByb3RvdHlwZS5fcHJvY2Vzc0VudHJ5ID0gZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBkZXN0UGF0aCA9IHBhdGguam9pbih0aGlzLm9wdHMucGF0aCwgZW50cnkucGF0aCk7XG4gICAgdmFyIGRpcmVjdG9yeSA9IGVudHJ5LmlzRGlyZWN0b3J5ID8gZGVzdFBhdGggOiBwYXRoLmRpcm5hbWUoZGVzdFBhdGgpO1xuXG4gICAgdGhpcy51bmZpbmlzaGVkRW50cmllcysrO1xuXG4gICAgdmFyIHdyaXRlRmlsZUZuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwaXBlZFN0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRlc3RQYXRoKTtcblxuICAgICAgICBwaXBlZFN0cmVhbS5vbignY2xvc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGYudW5maW5pc2hlZEVudHJpZXMtLTtcbiAgICAgICAgICAgIHNlbGYuX25vdGlmeUF3YWl0ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBpcGVkU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVudHJ5LnBpcGUocGlwZWRTdHJlYW0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNyZWF0ZWREaXJlY3Rvcmllc1tkaXJlY3RvcnldIHx8IGRpcmVjdG9yeSA9PT0gJy4nKSB7XG4gICAgICAgIHJldHVybiB3cml0ZUZpbGVGbigpO1xuICAgIH1cblxuICAgIC8vIEZJWE1FOiBjYWxscyB0byBta2RpcnAgY2FuIHN0aWxsIGJlIGR1cGxpY2F0ZWRcbiAgICBta2RpcnAoZGlyZWN0b3J5LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuXG4gICAgICAgIHNlbGYuY3JlYXRlZERpcmVjdG9yaWVzW2RpcmVjdG9yeV0gPSB0cnVlO1xuXG4gICAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSkge1xuICAgICAgICAgICAgc2VsZi51bmZpbmlzaGVkRW50cmllcy0tO1xuICAgICAgICAgICAgc2VsZi5fbm90aWZ5QXdhaXRlcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgd3JpdGVGaWxlRm4oKTtcbiAgICB9KTtcbn1cblxuRXh0cmFjdC5wcm90b3R5cGUuX25vdGlmeUF3YWl0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5hZnRlckZsdXNoV2FpdCAmJiB0aGlzLnVuZmluaXNoZWRFbnRyaWVzID09PSAwKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnYXdhaXQtZmluaXNoZWQnKTtcbiAgICAgICAgdGhpcy5hZnRlckZsdXNoV2FpdCA9IGZhbHNlO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFeHRyYWN0OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLlBhcnNlID0gcmVxdWlyZSgnLi9saWIvcGFyc2VyLXN0cmVhbScpO1xuZXhwb3J0cy5FeHRyYWN0ID0gcmVxdWlyZSgnLi9saWIvZXh0cmFjdCcpOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kb3dubG9hZEFydGlmYWN0SW50ZXJuYWwgPSBleHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RQdWJsaWMgPSBleHBvcnRzLnN0cmVhbUV4dHJhY3RFeHRlcm5hbCA9IHZvaWQgMDtcbmNvbnN0IHByb21pc2VzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImZzL3Byb21pc2VzXCIpKTtcbmNvbnN0IGdpdGh1YiA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViXCIpKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgaHR0cENsaWVudCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIikpO1xuY29uc3QgdW56aXBfc3RyZWFtXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInVuemlwLXN0cmVhbVwiKSk7XG5jb25zdCB1c2VyX2FnZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3VzZXItYWdlbnRcIik7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvY29uZmlnXCIpO1xuY29uc3QgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5jb25zdCBzY3J1YlF1ZXJ5UGFyYW1ldGVycyA9ICh1cmwpID0+IHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgcGFyc2VkLnNlYXJjaCA9ICcnO1xuICAgIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn07XG5mdW5jdGlvbiBleGlzdHMocGF0aCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5aWVsZCBwcm9taXNlc18xLmRlZmF1bHQuYWNjZXNzKHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc3RyZWFtRXh0cmFjdCh1cmwsIGRpcmVjdG9yeSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgICAgd2hpbGUgKHJldHJ5Q291bnQgPCA1KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHN0cmVhbUV4dHJhY3RFeHRlcm5hbCh1cmwsIGRpcmVjdG9yeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICAgICAgICAgIGNvcmUuZGVidWcoYEZhaWxlZCB0byBkb3dubG9hZCBhcnRpZmFjdCBhZnRlciAke3JldHJ5Q291bnR9IHJldHJpZXMgZHVlIHRvICR7ZXJyb3IubWVzc2FnZX0uIFJldHJ5aW5nIGluIDUgc2Vjb25kcy4uLmApO1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgNSBzZWNvbmRzIGJlZm9yZSByZXRyeWluZ1xuICAgICAgICAgICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCA1MDAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnRpZmFjdCBkb3dubG9hZCBmYWlsZWQgYWZ0ZXIgJHtyZXRyeUNvdW50fSByZXRyaWVzLmApO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gc3RyZWFtRXh0cmFjdEV4dGVybmFsKHVybCwgZGlyZWN0b3J5KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IGh0dHBDbGllbnQuSHR0cENsaWVudCgoMCwgdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFN0cmluZykoKSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgY2xpZW50LmdldCh1cmwpO1xuICAgICAgICBpZiAocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBIVFRQIHJlc3BvbnNlIGZyb20gYmxvYiBzdG9yYWdlOiAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZX0gJHtyZXNwb25zZS5tZXNzYWdlLnN0YXR1c01lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZW91dCA9IDMwICogMTAwMDsgLy8gMzAgc2Vjb25kc1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGltZXJGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlLmRlc3Ryb3kobmV3IEVycm9yKGBCbG9iIHN0b3JhZ2UgY2h1bmsgZGlkIG5vdCByZXNwb25kIGluICR7dGltZW91dH1tc2ApKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQodGltZXJGbiwgdGltZW91dCk7XG4gICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgLm9uKCdkYXRhJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRpbWVyLnJlZnJlc2goKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvcmUuZGVidWcoYHJlc3BvbnNlLm1lc3NhZ2U6IEFydGlmYWN0IGRvd25sb2FkIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUodW56aXBfc3RyZWFtXzEuZGVmYXVsdC5FeHRyYWN0KHsgcGF0aDogZGlyZWN0b3J5IH0pKVxuICAgICAgICAgICAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zdHJlYW1FeHRyYWN0RXh0ZXJuYWwgPSBzdHJlYW1FeHRyYWN0RXh0ZXJuYWw7XG5mdW5jdGlvbiBkb3dubG9hZEFydGlmYWN0UHVibGljKGFydGlmYWN0SWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRQYXRoID0geWllbGQgcmVzb2x2ZU9yQ3JlYXRlRGlyZWN0b3J5KG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wYXRoKTtcbiAgICAgICAgY29uc3QgYXBpID0gZ2l0aHViLmdldE9jdG9raXQodG9rZW4pO1xuICAgICAgICBjb3JlLmluZm8oYERvd25sb2FkaW5nIGFydGlmYWN0ICcke2FydGlmYWN0SWR9JyBmcm9tICcke3JlcG9zaXRvcnlPd25lcn0vJHtyZXBvc2l0b3J5TmFtZX0nYCk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycywgc3RhdHVzIH0gPSB5aWVsZCBhcGkucmVzdC5hY3Rpb25zLmRvd25sb2FkQXJ0aWZhY3Qoe1xuICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgYXJ0aWZhY3RfaWQ6IGFydGlmYWN0SWQsXG4gICAgICAgICAgICBhcmNoaXZlX2Zvcm1hdDogJ3ppcCcsXG4gICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3Q6ICdtYW51YWwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc3RhdHVzICE9PSAzMDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIGFydGlmYWN0LiBVbmV4cGVjdGVkIHN0YXR1czogJHtzdGF0dXN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsb2NhdGlvbiB9ID0gaGVhZGVycztcbiAgICAgICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVkaXJlY3QgdG8gYXJ0aWZhY3QgZG93bmxvYWQgdXJsYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29yZS5pbmZvKGBSZWRpcmVjdGluZyB0byBibG9iIGRvd25sb2FkIHVybDogJHtzY3J1YlF1ZXJ5UGFyYW1ldGVycyhsb2NhdGlvbil9YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb3JlLmluZm8oYFN0YXJ0aW5nIGRvd25sb2FkIG9mIGFydGlmYWN0IHRvOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgICAgIHlpZWxkIHN0cmVhbUV4dHJhY3QobG9jYXRpb24sIGRvd25sb2FkUGF0aCk7XG4gICAgICAgICAgICBjb3JlLmluZm8oYEFydGlmYWN0IGRvd25sb2FkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkb3dubG9hZCBhbmQgZXh0cmFjdCBhcnRpZmFjdDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvd25sb2FkUGF0aCB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5kb3dubG9hZEFydGlmYWN0UHVibGljID0gZG93bmxvYWRBcnRpZmFjdFB1YmxpYztcbmZ1bmN0aW9uIGRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbChhcnRpZmFjdElkLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRQYXRoID0geWllbGQgcmVzb2x2ZU9yQ3JlYXRlRGlyZWN0b3J5KG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wYXRoKTtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCBsaXN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIGlkRmlsdGVyOiBnZW5lcmF0ZWRfMS5JbnQ2NFZhbHVlLmNyZWF0ZSh7IHZhbHVlOiBhcnRpZmFjdElkLnRvU3RyaW5nKCkgfSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBhcnRpZmFjdHMgfSA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMobGlzdFJlcSk7XG4gICAgICAgIGlmIChhcnRpZmFjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXJ0aWZhY3ROb3RGb3VuZEVycm9yKGBObyBhcnRpZmFjdHMgZm91bmQgZm9yIElEOiAke2FydGlmYWN0SWR9XFxuQXJlIHlvdSB0cnlpbmcgdG8gZG93bmxvYWQgZnJvbSBhIGRpZmZlcmVudCBydW4/IFRyeSBzcGVjaWZ5aW5nIGEgZ2l0aHViLXRva2VuIHdpdGggXFxgYWN0aW9uczpyZWFkXFxgIHNjb3BlLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnRpZmFjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29yZS53YXJuaW5nKCdNdWx0aXBsZSBhcnRpZmFjdHMgZm91bmQsIGRlZmF1bHRpbmcgdG8gZmlyc3QuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmVkUmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGFydGlmYWN0c1swXS53b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBhcnRpZmFjdHNbMF0ud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICBuYW1lOiBhcnRpZmFjdHNbMF0ubmFtZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHNpZ25lZFVybCB9ID0geWllbGQgYXJ0aWZhY3RDbGllbnQuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoc2lnbmVkUmVxKTtcbiAgICAgICAgY29yZS5pbmZvKGBSZWRpcmVjdGluZyB0byBibG9iIGRvd25sb2FkIHVybDogJHtzY3J1YlF1ZXJ5UGFyYW1ldGVycyhzaWduZWRVcmwpfWApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29yZS5pbmZvKGBTdGFydGluZyBkb3dubG9hZCBvZiBhcnRpZmFjdCB0bzogJHtkb3dubG9hZFBhdGh9YCk7XG4gICAgICAgICAgICB5aWVsZCBzdHJlYW1FeHRyYWN0KHNpZ25lZFVybCwgZG93bmxvYWRQYXRoKTtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgQXJ0aWZhY3QgZG93bmxvYWQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIGFuZCBleHRyYWN0IGFydGlmYWN0OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG93bmxvYWRQYXRoIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbCA9IGRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbDtcbmZ1bmN0aW9uIHJlc29sdmVPckNyZWF0ZURpcmVjdG9yeShkb3dubG9hZFBhdGggPSAoMCwgY29uZmlnXzEuZ2V0R2l0SHViV29ya3NwYWNlRGlyKSgpKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCEoeWllbGQgZXhpc3RzKGRvd25sb2FkUGF0aCkpKSB7XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBBcnRpZmFjdCBkZXN0aW5hdGlvbiBmb2xkZXIgZG9lcyBub3QgZXhpc3QsIGNyZWF0aW5nOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgICAgIHlpZWxkIHByb21pc2VzXzEuZGVmYXVsdC5ta2Rpcihkb3dubG9hZFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29yZS5kZWJ1ZyhgQXJ0aWZhY3QgZGVzdGluYXRpb24gZm9sZGVyIGFscmVhZHkgZXhpc3RzOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG93bmxvYWRQYXRoO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZG93bmxvYWQtYXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSZXRyeU9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbi8vIERlZmF1bHRzIGZvciBmZXRjaGluZyBhcnRpZmFjdHNcbmNvbnN0IGRlZmF1bHRNYXhSZXRyeU51bWJlciA9IDU7XG5jb25zdCBkZWZhdWx0RXhlbXB0U3RhdHVzQ29kZXMgPSBbNDAwLCA0MDEsIDQwMywgNDA0LCA0MjJdOyAvLyBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9wbHVnaW4tcmV0cnkuanMvYmxvYi85YTI0NDM3NDZjMzUwYjNiZWVkZWMzNWNmMjZlMTk3ZWEzMThhMjYxL3NyYy9pbmRleC50cyNMMTRcbmZ1bmN0aW9uIGdldFJldHJ5T3B0aW9ucyhkZWZhdWx0T3B0aW9ucywgcmV0cmllcyA9IGRlZmF1bHRNYXhSZXRyeU51bWJlciwgZXhlbXB0U3RhdHVzQ29kZXMgPSBkZWZhdWx0RXhlbXB0U3RhdHVzQ29kZXMpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHJldHJpZXMgPD0gMCkge1xuICAgICAgICByZXR1cm4gW3sgZW5hYmxlZDogZmFsc2UgfSwgZGVmYXVsdE9wdGlvbnMucmVxdWVzdF07XG4gICAgfVxuICAgIGNvbnN0IHJldHJ5T3B0aW9ucyA9IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgIH07XG4gICAgaWYgKGV4ZW1wdFN0YXR1c0NvZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0cnlPcHRpb25zLmRvTm90UmV0cnkgPSBleGVtcHRTdGF0dXNDb2RlcztcbiAgICB9XG4gICAgLy8gVGhlIEdpdEh1YiB0eXBlIGhhcyBzb21lIGRlZmF1bHRzIGZvciBgb3B0aW9ucy5yZXF1ZXN0YFxuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iLzRmYmM1Yzk0MWE1NzI0OWIxOTU2MjAxNWVkYmQ3MmFkZDE0YmU5M2QvcGFja2FnZXMvZ2l0aHViL3NyYy91dGlscy50cyNMMTVcbiAgICAvLyBXZSBwYXNzIHRoZXNlIGluIGhlcmUgc28gdGhleSBhcmUgbm90IG92ZXJyaWRkZW4uXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLnJlcXVlc3QpLCB7IHJldHJpZXMgfSk7XG4gICAgY29yZS5kZWJ1ZyhgR2l0SHViIGNsaWVudCBjb25maWd1cmVkIHdpdGg6IChyZXRyaWVzOiAke3JlcXVlc3RPcHRpb25zLnJldHJpZXN9LCByZXRyeS1leGVtcHQtc3RhdHVzLWNvZGU6ICR7KF9hID0gcmV0cnlPcHRpb25zLmRvTm90UmV0cnkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdvY3Rva2l0IGRlZmF1bHQ6IFs0MDAsIDQwMSwgNDAzLCA0MDQsIDQyMl0nfSlgKTtcbiAgICByZXR1cm4gW3JldHJ5T3B0aW9ucywgcmVxdWVzdE9wdGlvbnNdO1xufVxuZXhwb3J0cy5nZXRSZXRyeU9wdGlvbnMgPSBnZXRSZXRyeU9wdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeS1vcHRpb25zLmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBWRVJTSU9OID0gXCIxLjAuNFwiO1xuXG4vKipcbiAqIEBwYXJhbSBvY3Rva2l0IE9jdG9raXQgaW5zdGFuY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgcGFzc2VkIHRvIE9jdG9raXQgY29uc3RydWN0b3JcbiAqL1xuXG5mdW5jdGlvbiByZXF1ZXN0TG9nKG9jdG9raXQpIHtcbiAgb2N0b2tpdC5ob29rLndyYXAoXCJyZXF1ZXN0XCIsIChyZXF1ZXN0LCBvcHRpb25zKSA9PiB7XG4gICAgb2N0b2tpdC5sb2cuZGVidWcoXCJyZXF1ZXN0XCIsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludC5wYXJzZShvcHRpb25zKTtcbiAgICBjb25zdCBwYXRoID0gcmVxdWVzdE9wdGlvbnMudXJsLnJlcGxhY2Uob3B0aW9ucy5iYXNlVXJsLCBcIlwiKTtcbiAgICByZXR1cm4gcmVxdWVzdChvcHRpb25zKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIG9jdG9raXQubG9nLmluZm8oYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtyZXNwb25zZS5zdGF0dXN9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhgJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cGF0aH0gLSAke2Vycm9yLnN0YXR1c30gaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbnJlcXVlc3RMb2cuVkVSU0lPTiA9IFZFUlNJT047XG5cbmV4cG9ydHMucmVxdWVzdExvZyA9IHJlcXVlc3RMb2c7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiLyoqXG4gICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBCb3R0bGVuZWNrIGxpYnJhcnkgKE1JVCksIGNvbXBpbGVkIHRvIEVTMjAxNywgYW5kIHdpdGhvdXQgQ2x1c3RlcmluZyBzdXBwb3J0LlxuICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9TR3JvbmRpbi9ib3R0bGVuZWNrXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG5cdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG5cdChnbG9iYWwuQm90dGxlbmVjayA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuXHR2YXIgY29tbW9uanNHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fTtcblxuXHRmdW5jdGlvbiBnZXRDanNFeHBvcnRGcm9tTmFtZXNwYWNlIChuKSB7XG5cdFx0cmV0dXJuIG4gJiYgblsnZGVmYXVsdCddIHx8IG47XG5cdH1cblxuXHR2YXIgbG9hZCA9IGZ1bmN0aW9uKHJlY2VpdmVkLCBkZWZhdWx0cywgb250byA9IHt9KSB7XG5cdCAgdmFyIGssIHJlZiwgdjtcblx0ICBmb3IgKGsgaW4gZGVmYXVsdHMpIHtcblx0ICAgIHYgPSBkZWZhdWx0c1trXTtcblx0ICAgIG9udG9ba10gPSAocmVmID0gcmVjZWl2ZWRba10pICE9IG51bGwgPyByZWYgOiB2O1xuXHQgIH1cblx0ICByZXR1cm4gb250bztcblx0fTtcblxuXHR2YXIgb3ZlcndyaXRlID0gZnVuY3Rpb24ocmVjZWl2ZWQsIGRlZmF1bHRzLCBvbnRvID0ge30pIHtcblx0ICB2YXIgaywgdjtcblx0ICBmb3IgKGsgaW4gcmVjZWl2ZWQpIHtcblx0ICAgIHYgPSByZWNlaXZlZFtrXTtcblx0ICAgIGlmIChkZWZhdWx0c1trXSAhPT0gdm9pZCAwKSB7XG5cdCAgICAgIG9udG9ba10gPSB2O1xuXHQgICAgfVxuXHQgIH1cblx0ICByZXR1cm4gb250bztcblx0fTtcblxuXHR2YXIgcGFyc2VyID0ge1xuXHRcdGxvYWQ6IGxvYWQsXG5cdFx0b3ZlcndyaXRlOiBvdmVyd3JpdGVcblx0fTtcblxuXHR2YXIgRExMaXN0O1xuXG5cdERMTGlzdCA9IGNsYXNzIERMTGlzdCB7XG5cdCAgY29uc3RydWN0b3IoaW5jciwgZGVjcikge1xuXHQgICAgdGhpcy5pbmNyID0gaW5jcjtcblx0ICAgIHRoaXMuZGVjciA9IGRlY3I7XG5cdCAgICB0aGlzLl9maXJzdCA9IG51bGw7XG5cdCAgICB0aGlzLl9sYXN0ID0gbnVsbDtcblx0ICAgIHRoaXMubGVuZ3RoID0gMDtcblx0ICB9XG5cblx0ICBwdXNoKHZhbHVlKSB7XG5cdCAgICB2YXIgbm9kZTtcblx0ICAgIHRoaXMubGVuZ3RoKys7XG5cdCAgICBpZiAodHlwZW9mIHRoaXMuaW5jciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgIHRoaXMuaW5jcigpO1xuXHQgICAgfVxuXHQgICAgbm9kZSA9IHtcblx0ICAgICAgdmFsdWUsXG5cdCAgICAgIHByZXY6IHRoaXMuX2xhc3QsXG5cdCAgICAgIG5leHQ6IG51bGxcblx0ICAgIH07XG5cdCAgICBpZiAodGhpcy5fbGFzdCAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuX2xhc3QubmV4dCA9IG5vZGU7XG5cdCAgICAgIHRoaXMuX2xhc3QgPSBub2RlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fZmlyc3QgPSB0aGlzLl9sYXN0ID0gbm9kZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiB2b2lkIDA7XG5cdCAgfVxuXG5cdCAgc2hpZnQoKSB7XG5cdCAgICB2YXIgdmFsdWU7XG5cdCAgICBpZiAodGhpcy5fZmlyc3QgPT0gbnVsbCkge1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLmxlbmd0aC0tO1xuXHQgICAgICBpZiAodHlwZW9mIHRoaXMuZGVjciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgdGhpcy5kZWNyKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHZhbHVlID0gdGhpcy5fZmlyc3QudmFsdWU7XG5cdCAgICBpZiAoKHRoaXMuX2ZpcnN0ID0gdGhpcy5fZmlyc3QubmV4dCkgIT0gbnVsbCkge1xuXHQgICAgICB0aGlzLl9maXJzdC5wcmV2ID0gbnVsbDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2xhc3QgPSBudWxsO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZhbHVlO1xuXHQgIH1cblxuXHQgIGZpcnN0KCkge1xuXHQgICAgaWYgKHRoaXMuX2ZpcnN0ICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2ZpcnN0LnZhbHVlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGdldEFycmF5KCkge1xuXHQgICAgdmFyIG5vZGUsIHJlZiwgcmVzdWx0cztcblx0ICAgIG5vZGUgPSB0aGlzLl9maXJzdDtcblx0ICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcblx0ICAgICAgcmVzdWx0cy5wdXNoKChyZWYgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0LCByZWYudmFsdWUpKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiByZXN1bHRzO1xuXHQgIH1cblxuXHQgIGZvckVhY2hTaGlmdChjYikge1xuXHQgICAgdmFyIG5vZGU7XG5cdCAgICBub2RlID0gdGhpcy5zaGlmdCgpO1xuXHQgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuXHQgICAgICAoY2Iobm9kZSksIG5vZGUgPSB0aGlzLnNoaWZ0KCkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZvaWQgMDtcblx0ICB9XG5cblx0ICBkZWJ1ZygpIHtcblx0ICAgIHZhciBub2RlLCByZWYsIHJlZjEsIHJlZjIsIHJlc3VsdHM7XG5cdCAgICBub2RlID0gdGhpcy5fZmlyc3Q7XG5cdCAgICByZXN1bHRzID0gW107XG5cdCAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG5cdCAgICAgIHJlc3VsdHMucHVzaCgocmVmID0gbm9kZSwgbm9kZSA9IG5vZGUubmV4dCwge1xuXHQgICAgICAgIHZhbHVlOiByZWYudmFsdWUsXG5cdCAgICAgICAgcHJldjogKHJlZjEgPSByZWYucHJldikgIT0gbnVsbCA/IHJlZjEudmFsdWUgOiB2b2lkIDAsXG5cdCAgICAgICAgbmV4dDogKHJlZjIgPSByZWYubmV4dCkgIT0gbnVsbCA/IHJlZjIudmFsdWUgOiB2b2lkIDBcblx0ICAgICAgfSkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgfVxuXG5cdH07XG5cblx0dmFyIERMTGlzdF8xID0gRExMaXN0O1xuXG5cdHZhciBFdmVudHM7XG5cblx0RXZlbnRzID0gY2xhc3MgRXZlbnRzIHtcblx0ICBjb25zdHJ1Y3RvcihpbnN0YW5jZSkge1xuXHQgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuXHQgICAgdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICBpZiAoKHRoaXMuaW5zdGFuY2Uub24gIT0gbnVsbCkgfHwgKHRoaXMuaW5zdGFuY2Uub25jZSAhPSBudWxsKSB8fCAodGhpcy5pbnN0YW5jZS5yZW1vdmVBbGxMaXN0ZW5lcnMgIT0gbnVsbCkpIHtcblx0ICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gRW1pdHRlciBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBvYmplY3RcIik7XG5cdCAgICB9XG5cdCAgICB0aGlzLmluc3RhbmNlLm9uID0gKG5hbWUsIGNiKSA9PiB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcihuYW1lLCBcIm1hbnlcIiwgY2IpO1xuXHQgICAgfTtcblx0ICAgIHRoaXMuaW5zdGFuY2Uub25jZSA9IChuYW1lLCBjYikgPT4ge1xuXHQgICAgICByZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIobmFtZSwgXCJvbmNlXCIsIGNiKTtcblx0ICAgIH07XG5cdCAgICB0aGlzLmluc3RhbmNlLnJlbW92ZUFsbExpc3RlbmVycyA9IChuYW1lID0gbnVsbCkgPT4ge1xuXHQgICAgICBpZiAobmFtZSAhPSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuIGRlbGV0ZSB0aGlzLl9ldmVudHNbbmFtZV07XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHQgICAgICB9XG5cdCAgICB9O1xuXHQgIH1cblxuXHQgIF9hZGRMaXN0ZW5lcihuYW1lLCBzdGF0dXMsIGNiKSB7XG5cdCAgICB2YXIgYmFzZTtcblx0ICAgIGlmICgoYmFzZSA9IHRoaXMuX2V2ZW50cylbbmFtZV0gPT0gbnVsbCkge1xuXHQgICAgICBiYXNlW25hbWVdID0gW107XG5cdCAgICB9XG5cdCAgICB0aGlzLl9ldmVudHNbbmFtZV0ucHVzaCh7Y2IsIHN0YXR1c30pO1xuXHQgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG5cdCAgfVxuXG5cdCAgbGlzdGVuZXJDb3VudChuYW1lKSB7XG5cdCAgICBpZiAodGhpcy5fZXZlbnRzW25hbWVdICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1tuYW1lXS5sZW5ndGg7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBhc3luYyB0cmlnZ2VyKG5hbWUsIC4uLmFyZ3MpIHtcblx0ICAgIHZhciBlLCBwcm9taXNlcztcblx0ICAgIHRyeSB7XG5cdCAgICAgIGlmIChuYW1lICE9PSBcImRlYnVnXCIpIHtcblx0ICAgICAgICB0aGlzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRXZlbnQgdHJpZ2dlcmVkOiAke25hbWV9YCwgYXJncyk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHRoaXMuX2V2ZW50c1tuYW1lXSA9PSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuX2V2ZW50c1tuYW1lXSA9IHRoaXMuX2V2ZW50c1tuYW1lXS5maWx0ZXIoZnVuY3Rpb24obGlzdGVuZXIpIHtcblx0ICAgICAgICByZXR1cm4gbGlzdGVuZXIuc3RhdHVzICE9PSBcIm5vbmVcIjtcblx0ICAgICAgfSk7XG5cdCAgICAgIHByb21pc2VzID0gdGhpcy5fZXZlbnRzW25hbWVdLm1hcChhc3luYyhsaXN0ZW5lcikgPT4ge1xuXHQgICAgICAgIHZhciBlLCByZXR1cm5lZDtcblx0ICAgICAgICBpZiAobGlzdGVuZXIuc3RhdHVzID09PSBcIm5vbmVcIikge1xuXHQgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAobGlzdGVuZXIuc3RhdHVzID09PSBcIm9uY2VcIikge1xuXHQgICAgICAgICAgbGlzdGVuZXIuc3RhdHVzID0gXCJub25lXCI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICByZXR1cm5lZCA9IHR5cGVvZiBsaXN0ZW5lci5jYiA9PT0gXCJmdW5jdGlvblwiID8gbGlzdGVuZXIuY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgICAgICBpZiAodHlwZW9mIChyZXR1cm5lZCAhPSBudWxsID8gcmV0dXJuZWQudGhlbiA6IHZvaWQgMCkgPT09IFwiZnVuY3Rpb25cIikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGF3YWl0IHJldHVybmVkKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiByZXR1cm5lZDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICAgICAgZSA9IGVycm9yO1xuXHQgICAgICAgICAge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJlcnJvclwiLCBlKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHJldHVybiAoKGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKSkpLmZpbmQoZnVuY3Rpb24oeCkge1xuXHQgICAgICAgIHJldHVybiB4ICE9IG51bGw7XG5cdCAgICAgIH0pO1xuXHQgICAgfSBjYXRjaCAoZXJyb3IpIHtcblx0ICAgICAgZSA9IGVycm9yO1xuXHQgICAgICB7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9XG5cdCAgfVxuXG5cdH07XG5cblx0dmFyIEV2ZW50c18xID0gRXZlbnRzO1xuXG5cdHZhciBETExpc3QkMSwgRXZlbnRzJDEsIFF1ZXVlcztcblxuXHRETExpc3QkMSA9IERMTGlzdF8xO1xuXG5cdEV2ZW50cyQxID0gRXZlbnRzXzE7XG5cblx0UXVldWVzID0gY2xhc3MgUXVldWVzIHtcblx0ICBjb25zdHJ1Y3RvcihudW1fcHJpb3JpdGllcykge1xuXHQgICAgdmFyIGk7XG5cdCAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMSh0aGlzKTtcblx0ICAgIHRoaXMuX2xlbmd0aCA9IDA7XG5cdCAgICB0aGlzLl9saXN0cyA9IChmdW5jdGlvbigpIHtcblx0ICAgICAgdmFyIGosIHJlZiwgcmVzdWx0cztcblx0ICAgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgICBmb3IgKGkgPSBqID0gMSwgcmVmID0gbnVtX3ByaW9yaXRpZXM7ICgxIDw9IHJlZiA/IGogPD0gcmVmIDogaiA+PSByZWYpOyBpID0gMSA8PSByZWYgPyArK2ogOiAtLWopIHtcblx0ICAgICAgICByZXN1bHRzLnB1c2gobmV3IERMTGlzdCQxKCgoKSA9PiB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5pbmNyKCk7XG5cdCAgICAgICAgfSksICgoKSA9PiB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyKCk7XG5cdCAgICAgICAgfSkpKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH0pLmNhbGwodGhpcyk7XG5cdCAgfVxuXG5cdCAgaW5jcigpIHtcblx0ICAgIGlmICh0aGlzLl9sZW5ndGgrKyA9PT0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImxlZnR6ZXJvXCIpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGRlY3IoKSB7XG5cdCAgICBpZiAoLS10aGlzLl9sZW5ndGggPT09IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJ6ZXJvXCIpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHB1c2goam9iKSB7XG5cdCAgICByZXR1cm4gdGhpcy5fbGlzdHNbam9iLm9wdGlvbnMucHJpb3JpdHldLnB1c2goam9iKTtcblx0ICB9XG5cblx0ICBxdWV1ZWQocHJpb3JpdHkpIHtcblx0ICAgIGlmIChwcmlvcml0eSAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9saXN0c1twcmlvcml0eV0ubGVuZ3RoO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzaGlmdEFsbChmbikge1xuXHQgICAgcmV0dXJuIHRoaXMuX2xpc3RzLmZvckVhY2goZnVuY3Rpb24obGlzdCkge1xuXHQgICAgICByZXR1cm4gbGlzdC5mb3JFYWNoU2hpZnQoZm4pO1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgZ2V0Rmlyc3QoYXJyID0gdGhpcy5fbGlzdHMpIHtcblx0ICAgIHZhciBqLCBsZW4sIGxpc3Q7XG5cdCAgICBmb3IgKGogPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcblx0ICAgICAgbGlzdCA9IGFycltqXTtcblx0ICAgICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xuXHQgICAgICAgIHJldHVybiBsaXN0O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICByZXR1cm4gW107XG5cdCAgfVxuXG5cdCAgc2hpZnRMYXN0RnJvbShwcmlvcml0eSkge1xuXHQgICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3QodGhpcy5fbGlzdHMuc2xpY2UocHJpb3JpdHkpLnJldmVyc2UoKSkuc2hpZnQoKTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgUXVldWVzXzEgPSBRdWV1ZXM7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvcjtcblxuXHRCb3R0bGVuZWNrRXJyb3IgPSBjbGFzcyBCb3R0bGVuZWNrRXJyb3IgZXh0ZW5kcyBFcnJvciB7fTtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yXzEgPSBCb3R0bGVuZWNrRXJyb3I7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQxLCBERUZBVUxUX1BSSU9SSVRZLCBKb2IsIE5VTV9QUklPUklUSUVTLCBwYXJzZXIkMTtcblxuXHROVU1fUFJJT1JJVElFUyA9IDEwO1xuXG5cdERFRkFVTFRfUFJJT1JJVFkgPSA1O1xuXG5cdHBhcnNlciQxID0gcGFyc2VyO1xuXG5cdEJvdHRsZW5lY2tFcnJvciQxID0gQm90dGxlbmVja0Vycm9yXzE7XG5cblx0Sm9iID0gY2xhc3MgSm9iIHtcblx0ICBjb25zdHJ1Y3Rvcih0YXNrLCBhcmdzLCBvcHRpb25zLCBqb2JEZWZhdWx0cywgcmVqZWN0T25Ecm9wLCBFdmVudHMsIF9zdGF0ZXMsIFByb21pc2UpIHtcblx0ICAgIHRoaXMudGFzayA9IHRhc2s7XG5cdCAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuXHQgICAgdGhpcy5yZWplY3RPbkRyb3AgPSByZWplY3RPbkRyb3A7XG5cdCAgICB0aGlzLkV2ZW50cyA9IEV2ZW50cztcblx0ICAgIHRoaXMuX3N0YXRlcyA9IF9zdGF0ZXM7XG5cdCAgICB0aGlzLlByb21pc2UgPSBQcm9taXNlO1xuXHQgICAgdGhpcy5vcHRpb25zID0gcGFyc2VyJDEubG9hZChvcHRpb25zLCBqb2JEZWZhdWx0cyk7XG5cdCAgICB0aGlzLm9wdGlvbnMucHJpb3JpdHkgPSB0aGlzLl9zYW5pdGl6ZVByaW9yaXR5KHRoaXMub3B0aW9ucy5wcmlvcml0eSk7XG5cdCAgICBpZiAodGhpcy5vcHRpb25zLmlkID09PSBqb2JEZWZhdWx0cy5pZCkge1xuXHQgICAgICB0aGlzLm9wdGlvbnMuaWQgPSBgJHt0aGlzLm9wdGlvbnMuaWR9LSR7dGhpcy5fcmFuZG9tSW5kZXgoKX1gO1xuXHQgICAgfVxuXHQgICAgdGhpcy5wcm9taXNlID0gbmV3IHRoaXMuUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcblx0ICAgICAgdGhpcy5fcmVzb2x2ZSA9IF9yZXNvbHZlO1xuXHQgICAgICB0aGlzLl9yZWplY3QgPSBfcmVqZWN0O1xuXHQgICAgfSk7XG5cdCAgICB0aGlzLnJldHJ5Q291bnQgPSAwO1xuXHQgIH1cblxuXHQgIF9zYW5pdGl6ZVByaW9yaXR5KHByaW9yaXR5KSB7XG5cdCAgICB2YXIgc1Byb3BlcnR5O1xuXHQgICAgc1Byb3BlcnR5ID0gfn5wcmlvcml0eSAhPT0gcHJpb3JpdHkgPyBERUZBVUxUX1BSSU9SSVRZIDogcHJpb3JpdHk7XG5cdCAgICBpZiAoc1Byb3BlcnR5IDwgMCkge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH0gZWxzZSBpZiAoc1Byb3BlcnR5ID4gTlVNX1BSSU9SSVRJRVMgLSAxKSB7XG5cdCAgICAgIHJldHVybiBOVU1fUFJJT1JJVElFUyAtIDE7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gc1Byb3BlcnR5O1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIF9yYW5kb21JbmRleCgpIHtcblx0ICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcblx0ICB9XG5cblx0ICBkb0Ryb3Aoe2Vycm9yLCBtZXNzYWdlID0gXCJUaGlzIGpvYiBoYXMgYmVlbiBkcm9wcGVkIGJ5IEJvdHRsZW5lY2tcIn0gPSB7fSkge1xuXHQgICAgaWYgKHRoaXMuX3N0YXRlcy5yZW1vdmUodGhpcy5vcHRpb25zLmlkKSkge1xuXHQgICAgICBpZiAodGhpcy5yZWplY3RPbkRyb3ApIHtcblx0ICAgICAgICB0aGlzLl9yZWplY3QoZXJyb3IgIT0gbnVsbCA/IGVycm9yIDogbmV3IEJvdHRsZW5lY2tFcnJvciQxKG1lc3NhZ2UpKTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZHJvcHBlZFwiLCB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHRhc2s6IHRoaXMudGFzaywgcHJvbWlzZTogdGhpcy5wcm9taXNlfSk7XG5cdCAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIF9hc3NlcnRTdGF0dXMoZXhwZWN0ZWQpIHtcblx0ICAgIHZhciBzdGF0dXM7XG5cdCAgICBzdGF0dXMgPSB0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICBpZiAoIShzdGF0dXMgPT09IGV4cGVjdGVkIHx8IChleHBlY3RlZCA9PT0gXCJET05FXCIgJiYgc3RhdHVzID09PSBudWxsKSkpIHtcblx0ICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQxKGBJbnZhbGlkIGpvYiBzdGF0dXMgJHtzdGF0dXN9LCBleHBlY3RlZCAke2V4cGVjdGVkfS4gUGxlYXNlIG9wZW4gYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2svaXNzdWVzYCk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9SZWNlaXZlKCkge1xuXHQgICAgdGhpcy5fc3RhdGVzLnN0YXJ0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInJlY2VpdmVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9uc30pO1xuXHQgIH1cblxuXHQgIGRvUXVldWUocmVhY2hlZEhXTSwgYmxvY2tlZCkge1xuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUkVDRUlWRURcIik7XG5cdCAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJxdWV1ZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zLCByZWFjaGVkSFdNLCBibG9ja2VkfSk7XG5cdCAgfVxuXG5cdCAgZG9SdW4oKSB7XG5cdCAgICBpZiAodGhpcy5yZXRyeUNvdW50ID09PSAwKSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIlFVRVVFRFwiKTtcblx0ICAgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwic2NoZWR1bGVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9uc30pO1xuXHQgIH1cblxuXHQgIGFzeW5jIGRvRXhlY3V0ZShjaGFpbmVkLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpIHtcblx0ICAgIHZhciBlcnJvciwgZXZlbnRJbmZvLCBwYXNzZWQ7XG5cdCAgICBpZiAodGhpcy5yZXRyeUNvdW50ID09PSAwKSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIlJVTk5JTkdcIik7XG5cdCAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJFWEVDVVRJTkdcIik7XG5cdCAgICB9XG5cdCAgICBldmVudEluZm8gPSB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJldHJ5Q291bnQ6IHRoaXMucmV0cnlDb3VudH07XG5cdCAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXhlY3V0aW5nXCIsIGV2ZW50SW5mbyk7XG5cdCAgICB0cnkge1xuXHQgICAgICBwYXNzZWQgPSAoYXdhaXQgKGNoYWluZWQgIT0gbnVsbCA/IGNoYWluZWQuc2NoZWR1bGUodGhpcy5vcHRpb25zLCB0aGlzLnRhc2ssIC4uLnRoaXMuYXJncykgOiB0aGlzLnRhc2soLi4udGhpcy5hcmdzKSkpO1xuXHQgICAgICBpZiAoY2xlYXJHbG9iYWxTdGF0ZSgpKSB7XG5cdCAgICAgICAgdGhpcy5kb0RvbmUoZXZlbnRJbmZvKTtcblx0ICAgICAgICBhd2FpdCBmcmVlKHRoaXMub3B0aW9ucywgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJET05FXCIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlKHBhc3NlZCk7XG5cdCAgICAgIH1cblx0ICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuXHQgICAgICBlcnJvciA9IGVycm9yMTtcblx0ICAgICAgcmV0dXJuIHRoaXMuX29uRmFpbHVyZShlcnJvciwgZXZlbnRJbmZvLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGRvRXhwaXJlKGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIGVycm9yLCBldmVudEluZm87XG5cdCAgICBpZiAodGhpcy5fc3RhdGVzLmpvYlN0YXR1cyh0aGlzLm9wdGlvbnMuaWQgPT09IFwiUlVOTklOR1wiKSkge1xuXHQgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgfVxuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgZXZlbnRJbmZvID0ge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zLCByZXRyeUNvdW50OiB0aGlzLnJldHJ5Q291bnR9O1xuXHQgICAgZXJyb3IgPSBuZXcgQm90dGxlbmVja0Vycm9yJDEoYFRoaXMgam9iIHRpbWVkIG91dCBhZnRlciAke3RoaXMub3B0aW9ucy5leHBpcmF0aW9ufSBtcy5gKTtcblx0ICAgIHJldHVybiB0aGlzLl9vbkZhaWx1cmUoZXJyb3IsIGV2ZW50SW5mbywgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICB9XG5cblx0ICBhc3luYyBfb25GYWlsdXJlKGVycm9yLCBldmVudEluZm8sIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIHJldHJ5LCByZXRyeUFmdGVyO1xuXHQgICAgaWYgKGNsZWFyR2xvYmFsU3RhdGUoKSkge1xuXHQgICAgICByZXRyeSA9IChhd2FpdCB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZmFpbGVkXCIsIGVycm9yLCBldmVudEluZm8pKTtcblx0ICAgICAgaWYgKHJldHJ5ICE9IG51bGwpIHtcblx0ICAgICAgICByZXRyeUFmdGVyID0gfn5yZXRyeTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwicmV0cnlcIiwgYFJldHJ5aW5nICR7dGhpcy5vcHRpb25zLmlkfSBhZnRlciAke3JldHJ5QWZ0ZXJ9IG1zYCwgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLnJldHJ5Q291bnQrKztcblx0ICAgICAgICByZXR1cm4gcnVuKHJldHJ5QWZ0ZXIpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuZG9Eb25lKGV2ZW50SW5mbyk7XG5cdCAgICAgICAgYXdhaXQgZnJlZSh0aGlzLm9wdGlvbnMsIGV2ZW50SW5mbyk7XG5cdCAgICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRE9ORVwiKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fcmVqZWN0KGVycm9yKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIGRvRG9uZShldmVudEluZm8pIHtcblx0ICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImRvbmVcIiwgZXZlbnRJbmZvKTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgSm9iXzEgPSBKb2I7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQyLCBMb2NhbERhdGFzdG9yZSwgcGFyc2VyJDI7XG5cblx0cGFyc2VyJDIgPSBwYXJzZXI7XG5cblx0Qm90dGxlbmVja0Vycm9yJDIgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRMb2NhbERhdGFzdG9yZSA9IGNsYXNzIExvY2FsRGF0YXN0b3JlIHtcblx0ICBjb25zdHJ1Y3RvcihpbnN0YW5jZSwgc3RvcmVPcHRpb25zLCBzdG9yZUluc3RhbmNlT3B0aW9ucykge1xuXHQgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuXHQgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSBzdG9yZU9wdGlvbnM7XG5cdCAgICB0aGlzLmNsaWVudElkID0gdGhpcy5pbnN0YW5jZS5fcmFuZG9tSW5kZXgoKTtcblx0ICAgIHBhcnNlciQyLmxvYWQoc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zLCB0aGlzKTtcblx0ICAgIHRoaXMuX25leHRSZXF1ZXN0ID0gdGhpcy5fbGFzdFJlc2Vydm9pclJlZnJlc2ggPSB0aGlzLl9sYXN0UmVzZXJ2b2lySW5jcmVhc2UgPSBEYXRlLm5vdygpO1xuXHQgICAgdGhpcy5fcnVubmluZyA9IDA7XG5cdCAgICB0aGlzLl9kb25lID0gMDtcblx0ICAgIHRoaXMuX3VuYmxvY2tUaW1lID0gMDtcblx0ICAgIHRoaXMucmVhZHkgPSB0aGlzLlByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgdGhpcy5jbGllbnRzID0ge307XG5cdCAgICB0aGlzLl9zdGFydEhlYXJ0YmVhdCgpO1xuXHQgIH1cblxuXHQgIF9zdGFydEhlYXJ0YmVhdCgpIHtcblx0ICAgIHZhciBiYXNlO1xuXHQgICAgaWYgKCh0aGlzLmhlYXJ0YmVhdCA9PSBudWxsKSAmJiAoKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwgIT0gbnVsbCkgJiYgKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hBbW91bnQgIT0gbnVsbCkpIHx8ICgodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lySW5jcmVhc2VJbnRlcnZhbCAhPSBudWxsKSAmJiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lySW5jcmVhc2VBbW91bnQgIT0gbnVsbCkpKSkge1xuXHQgICAgICByZXR1cm4gdHlwZW9mIChiYXNlID0gKHRoaXMuaGVhcnRiZWF0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHQgICAgICAgIHZhciBhbW91bnQsIGluY3IsIG1heGltdW0sIG5vdywgcmVzZXJ2b2lyO1xuXHQgICAgICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICAgICAgaWYgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwgIT0gbnVsbCkgJiYgbm93ID49IHRoaXMuX2xhc3RSZXNlcnZvaXJSZWZyZXNoICsgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEludGVydmFsKSB7XG5cdCAgICAgICAgICB0aGlzLl9sYXN0UmVzZXJ2b2lyUmVmcmVzaCA9IG5vdztcblx0ICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pciA9IHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hBbW91bnQ7XG5cdCAgICAgICAgICB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsICE9IG51bGwpICYmIG5vdyA+PSB0aGlzLl9sYXN0UmVzZXJ2b2lySW5jcmVhc2UgKyB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsKSB7XG5cdCAgICAgICAgICAoe1xuXHQgICAgICAgICAgICByZXNlcnZvaXJJbmNyZWFzZUFtb3VudDogYW1vdW50LFxuXHQgICAgICAgICAgICByZXNlcnZvaXJJbmNyZWFzZU1heGltdW06IG1heGltdW0sXG5cdCAgICAgICAgICAgIHJlc2Vydm9pclxuXHQgICAgICAgICAgfSA9IHRoaXMuc3RvcmVPcHRpb25zKTtcblx0ICAgICAgICAgIHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSA9IG5vdztcblx0ICAgICAgICAgIGluY3IgPSBtYXhpbXVtICE9IG51bGwgPyBNYXRoLm1pbihhbW91bnQsIG1heGltdW0gLSByZXNlcnZvaXIpIDogYW1vdW50O1xuXHQgICAgICAgICAgaWYgKGluY3IgPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pciArPSBpbmNyO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9LCB0aGlzLmhlYXJ0YmVhdEludGVydmFsKSkpLnVucmVmID09PSBcImZ1bmN0aW9uXCIgPyBiYXNlLnVucmVmKCkgOiB2b2lkIDA7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0YmVhdCk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19wdWJsaXNoX18obWVzc2FnZSkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLmluc3RhbmNlLkV2ZW50cy50cmlnZ2VyKFwibWVzc2FnZVwiLCBtZXNzYWdlLnRvU3RyaW5nKCkpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZGlzY29ubmVjdF9fKGZsdXNoKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0YmVhdCk7XG5cdCAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUoKTtcblx0ICB9XG5cblx0ICB5aWVsZExvb3AodCA9IDApIHtcblx0ICAgIHJldHVybiBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHQgICAgICByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0KTtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIGNvbXB1dGVQZW5hbHR5KCkge1xuXHQgICAgdmFyIHJlZjtcblx0ICAgIHJldHVybiAocmVmID0gdGhpcy5zdG9yZU9wdGlvbnMucGVuYWx0eSkgIT0gbnVsbCA/IHJlZiA6ICgxNSAqIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWUpIHx8IDUwMDA7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX191cGRhdGVTZXR0aW5nc19fKG9wdGlvbnMpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBwYXJzZXIkMi5vdmVyd3JpdGUob3B0aW9ucywgb3B0aW9ucywgdGhpcy5zdG9yZU9wdGlvbnMpO1xuXHQgICAgdGhpcy5fc3RhcnRIZWFydGJlYXQoKTtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHRydWU7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19ydW5uaW5nX18oKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuX3J1bm5pbmc7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19xdWV1ZWRfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5xdWV1ZWQoKTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2RvbmVfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5fZG9uZTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2dyb3VwQ2hlY2tfXyh0aW1lKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuICh0aGlzLl9uZXh0UmVxdWVzdCArIHRoaXMudGltZW91dCkgPCB0aW1lO1xuXHQgIH1cblxuXHQgIGNvbXB1dGVDYXBhY2l0eSgpIHtcblx0ICAgIHZhciBtYXhDb25jdXJyZW50LCByZXNlcnZvaXI7XG5cdCAgICAoe21heENvbmN1cnJlbnQsIHJlc2Vydm9pcn0gPSB0aGlzLnN0b3JlT3B0aW9ucyk7XG5cdCAgICBpZiAoKG1heENvbmN1cnJlbnQgIT0gbnVsbCkgJiYgKHJlc2Vydm9pciAhPSBudWxsKSkge1xuXHQgICAgICByZXR1cm4gTWF0aC5taW4obWF4Q29uY3VycmVudCAtIHRoaXMuX3J1bm5pbmcsIHJlc2Vydm9pcik7XG5cdCAgICB9IGVsc2UgaWYgKG1heENvbmN1cnJlbnQgIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gbWF4Q29uY3VycmVudCAtIHRoaXMuX3J1bm5pbmc7XG5cdCAgICB9IGVsc2UgaWYgKHJlc2Vydm9pciAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiByZXNlcnZvaXI7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBjb25kaXRpb25zQ2hlY2sod2VpZ2h0KSB7XG5cdCAgICB2YXIgY2FwYWNpdHk7XG5cdCAgICBjYXBhY2l0eSA9IHRoaXMuY29tcHV0ZUNhcGFjaXR5KCk7XG5cdCAgICByZXR1cm4gKGNhcGFjaXR5ID09IG51bGwpIHx8IHdlaWdodCA8PSBjYXBhY2l0eTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2luY3JlbWVudFJlc2Vydm9pcl9fKGluY3IpIHtcblx0ICAgIHZhciByZXNlcnZvaXI7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmVzZXJ2b2lyID0gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICs9IGluY3I7XG5cdCAgICB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgIHJldHVybiByZXNlcnZvaXI7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19jdXJyZW50UmVzZXJ2b2lyX18oKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pcjtcblx0ICB9XG5cblx0ICBpc0Jsb2NrZWQobm93KSB7XG5cdCAgICByZXR1cm4gdGhpcy5fdW5ibG9ja1RpbWUgPj0gbm93O1xuXHQgIH1cblxuXHQgIGNoZWNrKHdlaWdodCwgbm93KSB7XG5cdCAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zQ2hlY2sod2VpZ2h0KSAmJiAodGhpcy5fbmV4dFJlcXVlc3QgLSBub3cpIDw9IDA7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19jaGVja19fKHdlaWdodCkge1xuXHQgICAgdmFyIG5vdztcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBub3cgPSBEYXRlLm5vdygpO1xuXHQgICAgcmV0dXJuIHRoaXMuY2hlY2sod2VpZ2h0LCBub3cpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fcmVnaXN0ZXJfXyhpbmRleCwgd2VpZ2h0LCBleHBpcmF0aW9uKSB7XG5cdCAgICB2YXIgbm93LCB3YWl0O1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICBpZiAodGhpcy5jb25kaXRpb25zQ2hlY2sod2VpZ2h0KSkge1xuXHQgICAgICB0aGlzLl9ydW5uaW5nICs9IHdlaWdodDtcblx0ICAgICAgaWYgKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pciAhPSBudWxsKSB7XG5cdCAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyIC09IHdlaWdodDtcblx0ICAgICAgfVxuXHQgICAgICB3YWl0ID0gTWF0aC5tYXgodGhpcy5fbmV4dFJlcXVlc3QgLSBub3csIDApO1xuXHQgICAgICB0aGlzLl9uZXh0UmVxdWVzdCA9IG5vdyArIHdhaXQgKyB0aGlzLnN0b3JlT3B0aW9ucy5taW5UaW1lO1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG5cdCAgICAgICAgd2FpdCxcblx0ICAgICAgICByZXNlcnZvaXI6IHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclxuXHQgICAgICB9O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIHtcblx0ICAgICAgICBzdWNjZXNzOiBmYWxzZVxuXHQgICAgICB9O1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHN0cmF0ZWd5SXNCbG9jaygpIHtcblx0ICAgIHJldHVybiB0aGlzLnN0b3JlT3B0aW9ucy5zdHJhdGVneSA9PT0gMztcblx0ICB9XG5cblx0ICBhc3luYyBfX3N1Ym1pdF9fKHF1ZXVlTGVuZ3RoLCB3ZWlnaHQpIHtcblx0ICAgIHZhciBibG9ja2VkLCBub3csIHJlYWNoZWRIV007XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgaWYgKCh0aGlzLnN0b3JlT3B0aW9ucy5tYXhDb25jdXJyZW50ICE9IG51bGwpICYmIHdlaWdodCA+IHRoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnQpIHtcblx0ICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQyKGBJbXBvc3NpYmxlIHRvIGFkZCBhIGpvYiBoYXZpbmcgYSB3ZWlnaHQgb2YgJHt3ZWlnaHR9IHRvIGEgbGltaXRlciBoYXZpbmcgYSBtYXhDb25jdXJyZW50IHNldHRpbmcgb2YgJHt0aGlzLnN0b3JlT3B0aW9ucy5tYXhDb25jdXJyZW50fWApO1xuXHQgICAgfVxuXHQgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgIHJlYWNoZWRIV00gPSAodGhpcy5zdG9yZU9wdGlvbnMuaGlnaFdhdGVyICE9IG51bGwpICYmIHF1ZXVlTGVuZ3RoID09PSB0aGlzLnN0b3JlT3B0aW9ucy5oaWdoV2F0ZXIgJiYgIXRoaXMuY2hlY2sod2VpZ2h0LCBub3cpO1xuXHQgICAgYmxvY2tlZCA9IHRoaXMuc3RyYXRlZ3lJc0Jsb2NrKCkgJiYgKHJlYWNoZWRIV00gfHwgdGhpcy5pc0Jsb2NrZWQobm93KSk7XG5cdCAgICBpZiAoYmxvY2tlZCkge1xuXHQgICAgICB0aGlzLl91bmJsb2NrVGltZSA9IG5vdyArIHRoaXMuY29tcHV0ZVBlbmFsdHkoKTtcblx0ICAgICAgdGhpcy5fbmV4dFJlcXVlc3QgPSB0aGlzLl91bmJsb2NrVGltZSArIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWU7XG5cdCAgICAgIHRoaXMuaW5zdGFuY2UuX2Ryb3BBbGxRdWV1ZWQoKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHJlYWNoZWRIV00sXG5cdCAgICAgIGJsb2NrZWQsXG5cdCAgICAgIHN0cmF0ZWd5OiB0aGlzLnN0b3JlT3B0aW9ucy5zdHJhdGVneVxuXHQgICAgfTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2ZyZWVfXyhpbmRleCwgd2VpZ2h0KSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgdGhpcy5fcnVubmluZyAtPSB3ZWlnaHQ7XG5cdCAgICB0aGlzLl9kb25lICs9IHdlaWdodDtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcnVubmluZzogdGhpcy5fcnVubmluZ1xuXHQgICAgfTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgTG9jYWxEYXRhc3RvcmVfMSA9IExvY2FsRGF0YXN0b3JlO1xuXG5cdHZhciBCb3R0bGVuZWNrRXJyb3IkMywgU3RhdGVzO1xuXG5cdEJvdHRsZW5lY2tFcnJvciQzID0gQm90dGxlbmVja0Vycm9yXzE7XG5cblx0U3RhdGVzID0gY2xhc3MgU3RhdGVzIHtcblx0ICBjb25zdHJ1Y3RvcihzdGF0dXMxKSB7XG5cdCAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czE7XG5cdCAgICB0aGlzLl9qb2JzID0ge307XG5cdCAgICB0aGlzLmNvdW50cyA9IHRoaXMuc3RhdHVzLm1hcChmdW5jdGlvbigpIHtcblx0ICAgICAgcmV0dXJuIDA7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBuZXh0KGlkKSB7XG5cdCAgICB2YXIgY3VycmVudCwgbmV4dDtcblx0ICAgIGN1cnJlbnQgPSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIG5leHQgPSBjdXJyZW50ICsgMTtcblx0ICAgIGlmICgoY3VycmVudCAhPSBudWxsKSAmJiBuZXh0IDwgdGhpcy5zdGF0dXMubGVuZ3RoKSB7XG5cdCAgICAgIHRoaXMuY291bnRzW2N1cnJlbnRdLS07XG5cdCAgICAgIHRoaXMuY291bnRzW25leHRdKys7XG5cdCAgICAgIHJldHVybiB0aGlzLl9qb2JzW2lkXSsrO1xuXHQgICAgfSBlbHNlIGlmIChjdXJyZW50ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgcmV0dXJuIGRlbGV0ZSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzdGFydChpZCkge1xuXHQgICAgdmFyIGluaXRpYWw7XG5cdCAgICBpbml0aWFsID0gMDtcblx0ICAgIHRoaXMuX2pvYnNbaWRdID0gaW5pdGlhbDtcblx0ICAgIHJldHVybiB0aGlzLmNvdW50c1tpbml0aWFsXSsrO1xuXHQgIH1cblxuXHQgIHJlbW92ZShpZCkge1xuXHQgICAgdmFyIGN1cnJlbnQ7XG5cdCAgICBjdXJyZW50ID0gdGhpcy5fam9ic1tpZF07XG5cdCAgICBpZiAoY3VycmVudCAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuY291bnRzW2N1cnJlbnRdLS07XG5cdCAgICAgIGRlbGV0ZSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBjdXJyZW50ICE9IG51bGw7XG5cdCAgfVxuXG5cdCAgam9iU3RhdHVzKGlkKSB7XG5cdCAgICB2YXIgcmVmO1xuXHQgICAgcmV0dXJuIChyZWYgPSB0aGlzLnN0YXR1c1t0aGlzLl9qb2JzW2lkXV0pICE9IG51bGwgPyByZWYgOiBudWxsO1xuXHQgIH1cblxuXHQgIHN0YXR1c0pvYnMoc3RhdHVzKSB7XG5cdCAgICB2YXIgaywgcG9zLCByZWYsIHJlc3VsdHMsIHY7XG5cdCAgICBpZiAoc3RhdHVzICE9IG51bGwpIHtcblx0ICAgICAgcG9zID0gdGhpcy5zdGF0dXMuaW5kZXhPZihzdGF0dXMpO1xuXHQgICAgICBpZiAocG9zIDwgMCkge1xuXHQgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrRXJyb3IkMyhgc3RhdHVzIG11c3QgYmUgb25lIG9mICR7dGhpcy5zdGF0dXMuam9pbignLCAnKX1gKTtcblx0ICAgICAgfVxuXHQgICAgICByZWYgPSB0aGlzLl9qb2JzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgIGlmICh2ID09PSBwb3MpIHtcblx0ICAgICAgICAgIHJlc3VsdHMucHVzaChrKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fam9icyk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgc3RhdHVzQ291bnRzKCkge1xuXHQgICAgcmV0dXJuIHRoaXMuY291bnRzLnJlZHVjZSgoKGFjYywgdiwgaSkgPT4ge1xuXHQgICAgICBhY2NbdGhpcy5zdGF0dXNbaV1dID0gdjtcblx0ICAgICAgcmV0dXJuIGFjYztcblx0ICAgIH0pLCB7fSk7XG5cdCAgfVxuXG5cdH07XG5cblx0dmFyIFN0YXRlc18xID0gU3RhdGVzO1xuXG5cdHZhciBETExpc3QkMiwgU3luYztcblxuXHRETExpc3QkMiA9IERMTGlzdF8xO1xuXG5cdFN5bmMgPSBjbGFzcyBTeW5jIHtcblx0ICBjb25zdHJ1Y3RvcihuYW1lLCBQcm9taXNlKSB7XG5cdCAgICB0aGlzLnNjaGVkdWxlID0gdGhpcy5zY2hlZHVsZS5iaW5kKHRoaXMpO1xuXHQgICAgdGhpcy5uYW1lID0gbmFtZTtcblx0ICAgIHRoaXMuUHJvbWlzZSA9IFByb21pc2U7XG5cdCAgICB0aGlzLl9ydW5uaW5nID0gMDtcblx0ICAgIHRoaXMuX3F1ZXVlID0gbmV3IERMTGlzdCQyKCk7XG5cdCAgfVxuXG5cdCAgaXNFbXB0eSgpIHtcblx0ICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGggPT09IDA7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX3RyeVRvUnVuKCkge1xuXHQgICAgdmFyIGFyZ3MsIGNiLCBlcnJvciwgcmVqZWN0LCByZXNvbHZlLCByZXR1cm5lZCwgdGFzaztcblx0ICAgIGlmICgodGhpcy5fcnVubmluZyA8IDEpICYmIHRoaXMuX3F1ZXVlLmxlbmd0aCA+IDApIHtcblx0ICAgICAgdGhpcy5fcnVubmluZysrO1xuXHQgICAgICAoe3Rhc2ssIGFyZ3MsIHJlc29sdmUsIHJlamVjdH0gPSB0aGlzLl9xdWV1ZS5zaGlmdCgpKTtcblx0ICAgICAgY2IgPSAoYXdhaXQgKGFzeW5jIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICByZXR1cm5lZCA9IChhd2FpdCB0YXNrKC4uLmFyZ3MpKTtcblx0ICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmV0dXJuZWQpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICAgIGVycm9yID0gZXJyb3IxO1xuXHQgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICB9KSgpKTtcblx0ICAgICAgdGhpcy5fcnVubmluZy0tO1xuXHQgICAgICB0aGlzLl90cnlUb1J1bigpO1xuXHQgICAgICByZXR1cm4gY2IoKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzY2hlZHVsZSh0YXNrLCAuLi5hcmdzKSB7XG5cdCAgICB2YXIgcHJvbWlzZSwgcmVqZWN0LCByZXNvbHZlO1xuXHQgICAgcmVzb2x2ZSA9IHJlamVjdCA9IG51bGw7XG5cdCAgICBwcm9taXNlID0gbmV3IHRoaXMuUHJvbWlzZShmdW5jdGlvbihfcmVzb2x2ZSwgX3JlamVjdCkge1xuXHQgICAgICByZXNvbHZlID0gX3Jlc29sdmU7XG5cdCAgICAgIHJldHVybiByZWplY3QgPSBfcmVqZWN0O1xuXHQgICAgfSk7XG5cdCAgICB0aGlzLl9xdWV1ZS5wdXNoKHt0YXNrLCBhcmdzLCByZXNvbHZlLCByZWplY3R9KTtcblx0ICAgIHRoaXMuX3RyeVRvUnVuKCk7XG5cdCAgICByZXR1cm4gcHJvbWlzZTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgU3luY18xID0gU3luYztcblxuXHR2YXIgdmVyc2lvbiA9IFwiMi4xOS41XCI7XG5cdHZhciB2ZXJzaW9uJDEgPSB7XG5cdFx0dmVyc2lvbjogdmVyc2lvblxuXHR9O1xuXG5cdHZhciB2ZXJzaW9uJDIgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdFx0dmVyc2lvbjogdmVyc2lvbixcblx0XHRkZWZhdWx0OiB2ZXJzaW9uJDFcblx0fSk7XG5cblx0dmFyIHJlcXVpcmUkJDIgPSAoKSA9PiBjb25zb2xlLmxvZygnWW91IG11c3QgaW1wb3J0IHRoZSBmdWxsIHZlcnNpb24gb2YgQm90dGxlbmVjayBpbiBvcmRlciB0byB1c2UgdGhpcyBmZWF0dXJlLicpO1xuXG5cdHZhciByZXF1aXJlJCQzID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgcmVxdWlyZSQkNCA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIEV2ZW50cyQyLCBHcm91cCwgSU9SZWRpc0Nvbm5lY3Rpb24kMSwgUmVkaXNDb25uZWN0aW9uJDEsIFNjcmlwdHMkMSwgcGFyc2VyJDM7XG5cblx0cGFyc2VyJDMgPSBwYXJzZXI7XG5cblx0RXZlbnRzJDIgPSBFdmVudHNfMTtcblxuXHRSZWRpc0Nvbm5lY3Rpb24kMSA9IHJlcXVpcmUkJDI7XG5cblx0SU9SZWRpc0Nvbm5lY3Rpb24kMSA9IHJlcXVpcmUkJDM7XG5cblx0U2NyaXB0cyQxID0gcmVxdWlyZSQkNDtcblxuXHRHcm91cCA9IChmdW5jdGlvbigpIHtcblx0ICBjbGFzcyBHcm91cCB7XG5cdCAgICBjb25zdHJ1Y3RvcihsaW1pdGVyT3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHRoaXMuZGVsZXRlS2V5ID0gdGhpcy5kZWxldGVLZXkuYmluZCh0aGlzKTtcblx0ICAgICAgdGhpcy5saW1pdGVyT3B0aW9ucyA9IGxpbWl0ZXJPcHRpb25zO1xuXHQgICAgICBwYXJzZXIkMy5sb2FkKHRoaXMubGltaXRlck9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMih0aGlzKTtcblx0ICAgICAgdGhpcy5pbnN0YW5jZXMgPSB7fTtcblx0ICAgICAgdGhpcy5Cb3R0bGVuZWNrID0gQm90dGxlbmVja18xO1xuXHQgICAgICB0aGlzLl9zdGFydEF1dG9DbGVhbnVwKCk7XG5cdCAgICAgIHRoaXMuc2hhcmVkQ29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbiAhPSBudWxsO1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uID09IG51bGwpIHtcblx0ICAgICAgICBpZiAodGhpcy5saW1pdGVyT3B0aW9ucy5kYXRhc3RvcmUgPT09IFwicmVkaXNcIikge1xuXHQgICAgICAgICAgdGhpcy5jb25uZWN0aW9uID0gbmV3IFJlZGlzQ29ubmVjdGlvbiQxKE9iamVjdC5hc3NpZ24oe30sIHRoaXMubGltaXRlck9wdGlvbnMsIHtFdmVudHM6IHRoaXMuRXZlbnRzfSkpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5saW1pdGVyT3B0aW9ucy5kYXRhc3RvcmUgPT09IFwiaW9yZWRpc1wiKSB7XG5cdCAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgSU9SZWRpc0Nvbm5lY3Rpb24kMShPYmplY3QuYXNzaWduKHt9LCB0aGlzLmxpbWl0ZXJPcHRpb25zLCB7RXZlbnRzOiB0aGlzLkV2ZW50c30pKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAga2V5KGtleSA9IFwiXCIpIHtcblx0ICAgICAgdmFyIHJlZjtcblx0ICAgICAgcmV0dXJuIChyZWYgPSB0aGlzLmluc3RhbmNlc1trZXldKSAhPSBudWxsID8gcmVmIDogKCgpID0+IHtcblx0ICAgICAgICB2YXIgbGltaXRlcjtcblx0ICAgICAgICBsaW1pdGVyID0gdGhpcy5pbnN0YW5jZXNba2V5XSA9IG5ldyB0aGlzLkJvdHRsZW5lY2soT2JqZWN0LmFzc2lnbih0aGlzLmxpbWl0ZXJPcHRpb25zLCB7XG5cdCAgICAgICAgICBpZDogYCR7dGhpcy5pZH0tJHtrZXl9YCxcblx0ICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcblx0ICAgICAgICAgIGNvbm5lY3Rpb246IHRoaXMuY29ubmVjdGlvblxuXHQgICAgICAgIH0pKTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiY3JlYXRlZFwiLCBsaW1pdGVyLCBrZXkpO1xuXHQgICAgICAgIHJldHVybiBsaW1pdGVyO1xuXHQgICAgICB9KSgpO1xuXHQgICAgfVxuXG5cdCAgICBhc3luYyBkZWxldGVLZXkoa2V5ID0gXCJcIikge1xuXHQgICAgICB2YXIgZGVsZXRlZCwgaW5zdGFuY2U7XG5cdCAgICAgIGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXNba2V5XTtcblx0ICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbikge1xuXHQgICAgICAgIGRlbGV0ZWQgPSAoYXdhaXQgdGhpcy5jb25uZWN0aW9uLl9fcnVuQ29tbWFuZF9fKFsnZGVsJywgLi4uU2NyaXB0cyQxLmFsbEtleXMoYCR7dGhpcy5pZH0tJHtrZXl9YCldKSk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHtcblx0ICAgICAgICBkZWxldGUgdGhpcy5pbnN0YW5jZXNba2V5XTtcblx0ICAgICAgICBhd2FpdCBpbnN0YW5jZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIChpbnN0YW5jZSAhPSBudWxsKSB8fCBkZWxldGVkID4gMDtcblx0ICAgIH1cblxuXHQgICAgbGltaXRlcnMoKSB7XG5cdCAgICAgIHZhciBrLCByZWYsIHJlc3VsdHMsIHY7XG5cdCAgICAgIHJlZiA9IHRoaXMuaW5zdGFuY2VzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgIHJlc3VsdHMucHVzaCh7XG5cdCAgICAgICAgICBrZXk6IGssXG5cdCAgICAgICAgICBsaW1pdGVyOiB2XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgICB9XG5cblx0ICAgIGtleXMoKSB7XG5cdCAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmluc3RhbmNlcyk7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIGNsdXN0ZXJLZXlzKCkge1xuXHQgICAgICB2YXIgY3Vyc29yLCBlbmQsIGZvdW5kLCBpLCBrLCBrZXlzLCBsZW4sIG5leHQsIHN0YXJ0O1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uID09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUodGhpcy5rZXlzKCkpO1xuXHQgICAgICB9XG5cdCAgICAgIGtleXMgPSBbXTtcblx0ICAgICAgY3Vyc29yID0gbnVsbDtcblx0ICAgICAgc3RhcnQgPSBgYl8ke3RoaXMuaWR9LWAubGVuZ3RoO1xuXHQgICAgICBlbmQgPSBcIl9zZXR0aW5nc1wiLmxlbmd0aDtcblx0ICAgICAgd2hpbGUgKGN1cnNvciAhPT0gMCkge1xuXHQgICAgICAgIFtuZXh0LCBmb3VuZF0gPSAoYXdhaXQgdGhpcy5jb25uZWN0aW9uLl9fcnVuQ29tbWFuZF9fKFtcInNjYW5cIiwgY3Vyc29yICE9IG51bGwgPyBjdXJzb3IgOiAwLCBcIm1hdGNoXCIsIGBiXyR7dGhpcy5pZH0tKl9zZXR0aW5nc2AsIFwiY291bnRcIiwgMTAwMDBdKSk7XG5cdCAgICAgICAgY3Vyc29yID0gfn5uZXh0O1xuXHQgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGZvdW5kLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICBrID0gZm91bmRbaV07XG5cdCAgICAgICAgICBrZXlzLnB1c2goay5zbGljZShzdGFydCwgLWVuZCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4ga2V5cztcblx0ICAgIH1cblxuXHQgICAgX3N0YXJ0QXV0b0NsZWFudXAoKSB7XG5cdCAgICAgIHZhciBiYXNlO1xuXHQgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuXHQgICAgICByZXR1cm4gdHlwZW9mIChiYXNlID0gKHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChhc3luYygpID0+IHtcblx0ICAgICAgICB2YXIgZSwgaywgcmVmLCByZXN1bHRzLCB0aW1lLCB2O1xuXHQgICAgICAgIHRpbWUgPSBEYXRlLm5vdygpO1xuXHQgICAgICAgIHJlZiA9IHRoaXMuaW5zdGFuY2VzO1xuXHQgICAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICBmb3IgKGsgaW4gcmVmKSB7XG5cdCAgICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgaWYgKChhd2FpdCB2Ll9zdG9yZS5fX2dyb3VwQ2hlY2tfXyh0aW1lKSkpIHtcblx0ICAgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5kZWxldGVLZXkoaykpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh2b2lkIDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICAgICAgICBlID0gZXJyb3I7XG5cdCAgICAgICAgICAgIHJlc3VsdHMucHVzaCh2LkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSkpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgICAgfSwgdGhpcy50aW1lb3V0IC8gMikpKS51bnJlZiA9PT0gXCJmdW5jdGlvblwiID8gYmFzZS51bnJlZigpIDogdm9pZCAwO1xuXHQgICAgfVxuXG5cdCAgICB1cGRhdGVTZXR0aW5ncyhvcHRpb25zID0ge30pIHtcblx0ICAgICAgcGFyc2VyJDMub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICBwYXJzZXIkMy5vdmVyd3JpdGUob3B0aW9ucywgb3B0aW9ucywgdGhpcy5saW1pdGVyT3B0aW9ucyk7XG5cdCAgICAgIGlmIChvcHRpb25zLnRpbWVvdXQgIT0gbnVsbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF1dG9DbGVhbnVwKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZGlzY29ubmVjdChmbHVzaCA9IHRydWUpIHtcblx0ICAgICAgdmFyIHJlZjtcblx0ICAgICAgaWYgKCF0aGlzLnNoYXJlZENvbm5lY3Rpb24pIHtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuY29ubmVjdGlvbikgIT0gbnVsbCA/IHJlZi5kaXNjb25uZWN0KGZsdXNoKSA6IHZvaWQgMDtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgfVxuXHQgIEdyb3VwLnByb3RvdHlwZS5kZWZhdWx0cyA9IHtcblx0ICAgIHRpbWVvdXQ6IDEwMDAgKiA2MCAqIDUsXG5cdCAgICBjb25uZWN0aW9uOiBudWxsLFxuXHQgICAgUHJvbWlzZTogUHJvbWlzZSxcblx0ICAgIGlkOiBcImdyb3VwLWtleVwiXG5cdCAgfTtcblxuXHQgIHJldHVybiBHcm91cDtcblxuXHR9KS5jYWxsKGNvbW1vbmpzR2xvYmFsKTtcblxuXHR2YXIgR3JvdXBfMSA9IEdyb3VwO1xuXG5cdHZhciBCYXRjaGVyLCBFdmVudHMkMywgcGFyc2VyJDQ7XG5cblx0cGFyc2VyJDQgPSBwYXJzZXI7XG5cblx0RXZlbnRzJDMgPSBFdmVudHNfMTtcblxuXHRCYXRjaGVyID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEJhdGNoZXIge1xuXHQgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdCAgICAgIHBhcnNlciQ0LmxvYWQodGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgdGhpcy5FdmVudHMgPSBuZXcgRXZlbnRzJDModGhpcyk7XG5cdCAgICAgIHRoaXMuX2FyciA9IFtdO1xuXHQgICAgICB0aGlzLl9yZXNldFByb21pc2UoKTtcblx0ICAgICAgdGhpcy5fbGFzdEZsdXNoID0gRGF0ZS5ub3coKTtcblx0ICAgIH1cblxuXHQgICAgX3Jlc2V0UHJvbWlzZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKChyZXMsIHJlaikgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlID0gcmVzO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX2ZsdXNoKCkge1xuXHQgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgIHRoaXMuX2xhc3RGbHVzaCA9IERhdGUubm93KCk7XG5cdCAgICAgIHRoaXMuX3Jlc29sdmUoKTtcblx0ICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImJhdGNoXCIsIHRoaXMuX2Fycik7XG5cdCAgICAgIHRoaXMuX2FyciA9IFtdO1xuXHQgICAgICByZXR1cm4gdGhpcy5fcmVzZXRQcm9taXNlKCk7XG5cdCAgICB9XG5cblx0ICAgIGFkZChkYXRhKSB7XG5cdCAgICAgIHZhciByZXQ7XG5cdCAgICAgIHRoaXMuX2Fyci5wdXNoKGRhdGEpO1xuXHQgICAgICByZXQgPSB0aGlzLl9wcm9taXNlO1xuXHQgICAgICBpZiAodGhpcy5fYXJyLmxlbmd0aCA9PT0gdGhpcy5tYXhTaXplKSB7XG5cdCAgICAgICAgdGhpcy5fZmx1c2goKTtcblx0ICAgICAgfSBlbHNlIGlmICgodGhpcy5tYXhUaW1lICE9IG51bGwpICYmIHRoaXMuX2Fyci5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5fZmx1c2goKTtcblx0ICAgICAgICB9LCB0aGlzLm1heFRpbWUpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgQmF0Y2hlci5wcm90b3R5cGUuZGVmYXVsdHMgPSB7XG5cdCAgICBtYXhUaW1lOiBudWxsLFxuXHQgICAgbWF4U2l6ZTogbnVsbCxcblx0ICAgIFByb21pc2U6IFByb21pc2Vcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEJhdGNoZXI7XG5cblx0fSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG5cblx0dmFyIEJhdGNoZXJfMSA9IEJhdGNoZXI7XG5cblx0dmFyIHJlcXVpcmUkJDQkMSA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIHJlcXVpcmUkJDggPSBnZXRDanNFeHBvcnRGcm9tTmFtZXNwYWNlKHZlcnNpb24kMik7XG5cblx0dmFyIEJvdHRsZW5lY2ssIERFRkFVTFRfUFJJT1JJVFkkMSwgRXZlbnRzJDQsIEpvYiQxLCBMb2NhbERhdGFzdG9yZSQxLCBOVU1fUFJJT1JJVElFUyQxLCBRdWV1ZXMkMSwgUmVkaXNEYXRhc3RvcmUkMSwgU3RhdGVzJDEsIFN5bmMkMSwgcGFyc2VyJDUsXG5cdCAgc3BsaWNlID0gW10uc3BsaWNlO1xuXG5cdE5VTV9QUklPUklUSUVTJDEgPSAxMDtcblxuXHRERUZBVUxUX1BSSU9SSVRZJDEgPSA1O1xuXG5cdHBhcnNlciQ1ID0gcGFyc2VyO1xuXG5cdFF1ZXVlcyQxID0gUXVldWVzXzE7XG5cblx0Sm9iJDEgPSBKb2JfMTtcblxuXHRMb2NhbERhdGFzdG9yZSQxID0gTG9jYWxEYXRhc3RvcmVfMTtcblxuXHRSZWRpc0RhdGFzdG9yZSQxID0gcmVxdWlyZSQkNCQxO1xuXG5cdEV2ZW50cyQ0ID0gRXZlbnRzXzE7XG5cblx0U3RhdGVzJDEgPSBTdGF0ZXNfMTtcblxuXHRTeW5jJDEgPSBTeW5jXzE7XG5cblx0Qm90dGxlbmVjayA9IChmdW5jdGlvbigpIHtcblx0ICBjbGFzcyBCb3R0bGVuZWNrIHtcblx0ICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgLi4uaW52YWxpZCkge1xuXHQgICAgICB2YXIgc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHN0b3JlT3B0aW9ucztcblx0ICAgICAgdGhpcy5fYWRkVG9RdWV1ZSA9IHRoaXMuX2FkZFRvUXVldWUuYmluZCh0aGlzKTtcblx0ICAgICAgdGhpcy5fdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMsIGludmFsaWQpO1xuXHQgICAgICBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMuaW5zdGFuY2VEZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHRoaXMuX3F1ZXVlcyA9IG5ldyBRdWV1ZXMkMShOVU1fUFJJT1JJVElFUyQxKTtcblx0ICAgICAgdGhpcy5fc2NoZWR1bGVkID0ge307XG5cdCAgICAgIHRoaXMuX3N0YXRlcyA9IG5ldyBTdGF0ZXMkMShbXCJSRUNFSVZFRFwiLCBcIlFVRVVFRFwiLCBcIlJVTk5JTkdcIiwgXCJFWEVDVVRJTkdcIl0uY29uY2F0KHRoaXMudHJhY2tEb25lU3RhdHVzID8gW1wiRE9ORVwiXSA6IFtdKSk7XG5cdCAgICAgIHRoaXMuX2xpbWl0ZXIgPSBudWxsO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkNCh0aGlzKTtcblx0ICAgICAgdGhpcy5fc3VibWl0TG9jayA9IG5ldyBTeW5jJDEoXCJzdWJtaXRcIiwgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgdGhpcy5fcmVnaXN0ZXJMb2NrID0gbmV3IFN5bmMkMShcInJlZ2lzdGVyXCIsIHRoaXMuUHJvbWlzZSk7XG5cdCAgICAgIHN0b3JlT3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5zdG9yZURlZmF1bHRzLCB7fSk7XG5cdCAgICAgIHRoaXMuX3N0b3JlID0gKGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmRhdGFzdG9yZSA9PT0gXCJyZWRpc1wiIHx8IHRoaXMuZGF0YXN0b3JlID09PSBcImlvcmVkaXNcIiB8fCAodGhpcy5jb25uZWN0aW9uICE9IG51bGwpKSB7XG5cdCAgICAgICAgICBzdG9yZUluc3RhbmNlT3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5yZWRpc1N0b3JlRGVmYXVsdHMsIHt9KTtcblx0ICAgICAgICAgIHJldHVybiBuZXcgUmVkaXNEYXRhc3RvcmUkMSh0aGlzLCBzdG9yZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YXN0b3JlID09PSBcImxvY2FsXCIpIHtcblx0ICAgICAgICAgIHN0b3JlSW5zdGFuY2VPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLmxvY2FsU3RvcmVEZWZhdWx0cywge30pO1xuXHQgICAgICAgICAgcmV0dXJuIG5ldyBMb2NhbERhdGFzdG9yZSQxKHRoaXMsIHN0b3JlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aHJvdyBuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKGBJbnZhbGlkIGRhdGFzdG9yZSB0eXBlOiAke3RoaXMuZGF0YXN0b3JlfWApO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSkuY2FsbCh0aGlzKTtcblx0ICAgICAgdGhpcy5fcXVldWVzLm9uKFwibGVmdHplcm9cIiwgKCkgPT4ge1xuXHQgICAgICAgIHZhciByZWY7XG5cdCAgICAgICAgcmV0dXJuIChyZWYgPSB0aGlzLl9zdG9yZS5oZWFydGJlYXQpICE9IG51bGwgPyB0eXBlb2YgcmVmLnJlZiA9PT0gXCJmdW5jdGlvblwiID8gcmVmLnJlZigpIDogdm9pZCAwIDogdm9pZCAwO1xuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy5fcXVldWVzLm9uKFwiemVyb1wiLCAoKSA9PiB7XG5cdCAgICAgICAgdmFyIHJlZjtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3N0b3JlLmhlYXJ0YmVhdCkgIT0gbnVsbCA/IHR5cGVvZiByZWYudW5yZWYgPT09IFwiZnVuY3Rpb25cIiA/IHJlZi51bnJlZigpIDogdm9pZCAwIDogdm9pZCAwO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX3ZhbGlkYXRlT3B0aW9ucyhvcHRpb25zLCBpbnZhbGlkKSB7XG5cdCAgICAgIGlmICghKChvcHRpb25zICE9IG51bGwpICYmIHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiICYmIGludmFsaWQubGVuZ3RoID09PSAwKSkge1xuXHQgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoXCJCb3R0bGVuZWNrIHYyIHRha2VzIGEgc2luZ2xlIG9iamVjdCBhcmd1bWVudC4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2sjdXBncmFkaW5nLXRvLXYyIGlmIHlvdSdyZSB1cGdyYWRpbmcgZnJvbSBCb3R0bGVuZWNrIHYxLlwiKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICByZWFkeSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLnJlYWR5O1xuXHQgICAgfVxuXG5cdCAgICBjbGllbnRzKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuY2xpZW50cztcblx0ICAgIH1cblxuXHQgICAgY2hhbm5lbCgpIHtcblx0ICAgICAgcmV0dXJuIGBiXyR7dGhpcy5pZH1gO1xuXHQgICAgfVxuXG5cdCAgICBjaGFubmVsX2NsaWVudCgpIHtcblx0ICAgICAgcmV0dXJuIGBiXyR7dGhpcy5pZH1fJHt0aGlzLl9zdG9yZS5jbGllbnRJZH1gO1xuXHQgICAgfVxuXG5cdCAgICBwdWJsaXNoKG1lc3NhZ2UpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fcHVibGlzaF9fKG1lc3NhZ2UpO1xuXHQgICAgfVxuXG5cdCAgICBkaXNjb25uZWN0KGZsdXNoID0gdHJ1ZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19kaXNjb25uZWN0X18oZmx1c2gpO1xuXHQgICAgfVxuXG5cdCAgICBjaGFpbihfbGltaXRlcikge1xuXHQgICAgICB0aGlzLl9saW1pdGVyID0gX2xpbWl0ZXI7XG5cdCAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfVxuXG5cdCAgICBxdWV1ZWQocHJpb3JpdHkpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3F1ZXVlcy5xdWV1ZWQocHJpb3JpdHkpO1xuXHQgICAgfVxuXG5cdCAgICBjbHVzdGVyUXVldWVkKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19xdWV1ZWRfXygpO1xuXHQgICAgfVxuXG5cdCAgICBlbXB0eSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMucXVldWVkKCkgPT09IDAgJiYgdGhpcy5fc3VibWl0TG9jay5pc0VtcHR5KCk7XG5cdCAgICB9XG5cblx0ICAgIHJ1bm5pbmcoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3J1bm5pbmdfXygpO1xuXHQgICAgfVxuXG5cdCAgICBkb25lKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19kb25lX18oKTtcblx0ICAgIH1cblxuXHQgICAgam9iU3RhdHVzKGlkKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKGlkKTtcblx0ICAgIH1cblxuXHQgICAgam9icyhzdGF0dXMpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5zdGF0dXNKb2JzKHN0YXR1cyk7XG5cdCAgICB9XG5cblx0ICAgIGNvdW50cygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5zdGF0dXNDb3VudHMoKTtcblx0ICAgIH1cblxuXHQgICAgX3JhbmRvbUluZGV4KCkge1xuXHQgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG5cdCAgICB9XG5cblx0ICAgIGNoZWNrKHdlaWdodCA9IDEpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fY2hlY2tfXyh3ZWlnaHQpO1xuXHQgICAgfVxuXG5cdCAgICBfY2xlYXJHbG9iYWxTdGF0ZShpbmRleCkge1xuXHQgICAgICBpZiAodGhpcy5fc2NoZWR1bGVkW2luZGV4XSAhPSBudWxsKSB7XG5cdCAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NjaGVkdWxlZFtpbmRleF0uZXhwaXJhdGlvbik7XG5cdCAgICAgICAgZGVsZXRlIHRoaXMuX3NjaGVkdWxlZFtpbmRleF07XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIF9mcmVlKGluZGV4LCBqb2IsIG9wdGlvbnMsIGV2ZW50SW5mbykge1xuXHQgICAgICB2YXIgZSwgcnVubmluZztcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICAoe3J1bm5pbmd9ID0gKGF3YWl0IHRoaXMuX3N0b3JlLl9fZnJlZV9fKGluZGV4LCBvcHRpb25zLndlaWdodCkpKTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYEZyZWVkICR7b3B0aW9ucy5pZH1gLCBldmVudEluZm8pO1xuXHQgICAgICAgIGlmIChydW5uaW5nID09PSAwICYmIHRoaXMuZW1wdHkoKSkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJpZGxlXCIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgICAgZSA9IGVycm9yMTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIF9ydW4oaW5kZXgsIGpvYiwgd2FpdCkge1xuXHQgICAgICB2YXIgY2xlYXJHbG9iYWxTdGF0ZSwgZnJlZSwgcnVuO1xuXHQgICAgICBqb2IuZG9SdW4oKTtcblx0ICAgICAgY2xlYXJHbG9iYWxTdGF0ZSA9IHRoaXMuX2NsZWFyR2xvYmFsU3RhdGUuYmluZCh0aGlzLCBpbmRleCk7XG5cdCAgICAgIHJ1biA9IHRoaXMuX3J1bi5iaW5kKHRoaXMsIGluZGV4LCBqb2IpO1xuXHQgICAgICBmcmVlID0gdGhpcy5fZnJlZS5iaW5kKHRoaXMsIGluZGV4LCBqb2IpO1xuXHQgICAgICByZXR1cm4gdGhpcy5fc2NoZWR1bGVkW2luZGV4XSA9IHtcblx0ICAgICAgICB0aW1lb3V0OiBzZXRUaW1lb3V0KCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiBqb2IuZG9FeGVjdXRlKHRoaXMuX2xpbWl0ZXIsIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSk7XG5cdCAgICAgICAgfSwgd2FpdCksXG5cdCAgICAgICAgZXhwaXJhdGlvbjogam9iLm9wdGlvbnMuZXhwaXJhdGlvbiAhPSBudWxsID8gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0ICAgICAgICAgIHJldHVybiBqb2IuZG9FeHBpcmUoY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICAgICAgICB9LCB3YWl0ICsgam9iLm9wdGlvbnMuZXhwaXJhdGlvbikgOiB2b2lkIDAsXG5cdCAgICAgICAgam9iOiBqb2Jcblx0ICAgICAgfTtcblx0ICAgIH1cblxuXHQgICAgX2RyYWluT25lKGNhcGFjaXR5KSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RlckxvY2suc2NoZWR1bGUoKCkgPT4ge1xuXHQgICAgICAgIHZhciBhcmdzLCBpbmRleCwgbmV4dCwgb3B0aW9ucywgcXVldWU7XG5cdCAgICAgICAgaWYgKHRoaXMucXVldWVkKCkgPT09IDApIHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShudWxsKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcXVldWUgPSB0aGlzLl9xdWV1ZXMuZ2V0Rmlyc3QoKTtcblx0ICAgICAgICAoe29wdGlvbnMsIGFyZ3N9ID0gbmV4dCA9IHF1ZXVlLmZpcnN0KCkpO1xuXHQgICAgICAgIGlmICgoY2FwYWNpdHkgIT0gbnVsbCkgJiYgb3B0aW9ucy53ZWlnaHQgPiBjYXBhY2l0eSkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYERyYWluaW5nICR7b3B0aW9ucy5pZH1gLCB7YXJncywgb3B0aW9uc30pO1xuXHQgICAgICAgIGluZGV4ID0gdGhpcy5fcmFuZG9tSW5kZXgoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19yZWdpc3Rlcl9fKGluZGV4LCBvcHRpb25zLndlaWdodCwgb3B0aW9ucy5leHBpcmF0aW9uKS50aGVuKCh7c3VjY2Vzcywgd2FpdCwgcmVzZXJ2b2lyfSkgPT4ge1xuXHQgICAgICAgICAgdmFyIGVtcHR5O1xuXHQgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImRlYnVnXCIsIGBEcmFpbmVkICR7b3B0aW9ucy5pZH1gLCB7c3VjY2VzcywgYXJncywgb3B0aW9uc30pO1xuXHQgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcblx0ICAgICAgICAgICAgcXVldWUuc2hpZnQoKTtcblx0ICAgICAgICAgICAgZW1wdHkgPSB0aGlzLmVtcHR5KCk7XG5cdCAgICAgICAgICAgIGlmIChlbXB0eSkge1xuXHQgICAgICAgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJlbXB0eVwiKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAocmVzZXJ2b2lyID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImRlcGxldGVkXCIsIGVtcHR5KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9ydW4oaW5kZXgsIG5leHQsIHdhaXQpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUob3B0aW9ucy53ZWlnaHQpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX2RyYWluQWxsKGNhcGFjaXR5LCB0b3RhbCA9IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2RyYWluT25lKGNhcGFjaXR5KS50aGVuKChkcmFpbmVkKSA9PiB7XG5cdCAgICAgICAgdmFyIG5ld0NhcGFjaXR5O1xuXHQgICAgICAgIGlmIChkcmFpbmVkICE9IG51bGwpIHtcblx0ICAgICAgICAgIG5ld0NhcGFjaXR5ID0gY2FwYWNpdHkgIT0gbnVsbCA/IGNhcGFjaXR5IC0gZHJhaW5lZCA6IGNhcGFjaXR5O1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuX2RyYWluQWxsKG5ld0NhcGFjaXR5LCB0b3RhbCArIGRyYWluZWQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUodG90YWwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSkuY2F0Y2goKGUpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX2Ryb3BBbGxRdWV1ZWQobWVzc2FnZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcXVldWVzLnNoaWZ0QWxsKGZ1bmN0aW9uKGpvYikge1xuXHQgICAgICAgIHJldHVybiBqb2IuZG9Ecm9wKHttZXNzYWdlfSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBzdG9wKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICB2YXIgZG9uZSwgd2FpdEZvckV4ZWN1dGluZztcblx0ICAgICAgb3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5zdG9wRGVmYXVsdHMpO1xuXHQgICAgICB3YWl0Rm9yRXhlY3V0aW5nID0gKGF0KSA9PiB7XG5cdCAgICAgICAgdmFyIGZpbmlzaGVkO1xuXHQgICAgICAgIGZpbmlzaGVkID0gKCkgPT4ge1xuXHQgICAgICAgICAgdmFyIGNvdW50cztcblx0ICAgICAgICAgIGNvdW50cyA9IHRoaXMuX3N0YXRlcy5jb3VudHM7XG5cdCAgICAgICAgICByZXR1cm4gKGNvdW50c1swXSArIGNvdW50c1sxXSArIGNvdW50c1syXSArIGNvdW50c1szXSkgPT09IGF0O1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHQgICAgICAgICAgaWYgKGZpbmlzaGVkKCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm9uKFwiZG9uZVwiLCAoKSA9PiB7XG5cdCAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkKCkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwiZG9uZVwiKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfTtcblx0ICAgICAgZG9uZSA9IG9wdGlvbnMuZHJvcFdhaXRpbmdKb2JzID8gKHRoaXMuX3J1biA9IGZ1bmN0aW9uKGluZGV4LCBuZXh0KSB7XG5cdCAgICAgICAgcmV0dXJuIG5leHQuZG9Ecm9wKHtcblx0ICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9LCB0aGlzLl9kcmFpbk9uZSA9ICgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgIH0sIHRoaXMuX3JlZ2lzdGVyTG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdExvY2suc2NoZWR1bGUoKCkgPT4ge1xuXHQgICAgICAgICAgdmFyIGssIHJlZiwgdjtcblx0ICAgICAgICAgIHJlZiA9IHRoaXMuX3NjaGVkdWxlZDtcblx0ICAgICAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICAgICAgdiA9IHJlZltrXTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuam9iU3RhdHVzKHYuam9iLm9wdGlvbnMuaWQpID09PSBcIlJVTk5JTkdcIikge1xuXHQgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh2LnRpbWVvdXQpO1xuXHQgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh2LmV4cGlyYXRpb24pO1xuXHQgICAgICAgICAgICAgIHYuam9iLmRvRHJvcCh7XG5cdCAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLmRyb3BFcnJvck1lc3NhZ2Vcblx0ICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgdGhpcy5fZHJvcEFsbFF1ZXVlZChvcHRpb25zLmRyb3BFcnJvck1lc3NhZ2UpO1xuXHQgICAgICAgICAgcmV0dXJuIHdhaXRGb3JFeGVjdXRpbmcoMCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0pKSA6IHRoaXMuc2NoZWR1bGUoe1xuXHQgICAgICAgIHByaW9yaXR5OiBOVU1fUFJJT1JJVElFUyQxIC0gMSxcblx0ICAgICAgICB3ZWlnaHQ6IDBcblx0ICAgICAgfSwgKCkgPT4ge1xuXHQgICAgICAgIHJldHVybiB3YWl0Rm9yRXhlY3V0aW5nKDEpO1xuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy5fcmVjZWl2ZSA9IGZ1bmN0aW9uKGpvYikge1xuXHQgICAgICAgIHJldHVybiBqb2IuX3JlamVjdChuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKG9wdGlvbnMuZW5xdWV1ZUVycm9yTWVzc2FnZSkpO1xuXHQgICAgICB9O1xuXHQgICAgICB0aGlzLnN0b3AgPSAoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZWplY3QobmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihcInN0b3AoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZFwiKSk7XG5cdCAgICAgIH07XG5cdCAgICAgIHJldHVybiBkb25lO1xuXHQgICAgfVxuXG5cdCAgICBhc3luYyBfYWRkVG9RdWV1ZShqb2IpIHtcblx0ICAgICAgdmFyIGFyZ3MsIGJsb2NrZWQsIGVycm9yLCBvcHRpb25zLCByZWFjaGVkSFdNLCBzaGlmdGVkLCBzdHJhdGVneTtcblx0ICAgICAgKHthcmdzLCBvcHRpb25zfSA9IGpvYik7XG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgKHtyZWFjaGVkSFdNLCBibG9ja2VkLCBzdHJhdGVneX0gPSAoYXdhaXQgdGhpcy5fc3RvcmUuX19zdWJtaXRfXyh0aGlzLnF1ZXVlZCgpLCBvcHRpb25zLndlaWdodCkpKTtcblx0ICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgICAgZXJyb3IgPSBlcnJvcjE7XG5cdCAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImRlYnVnXCIsIGBDb3VsZCBub3QgcXVldWUgJHtvcHRpb25zLmlkfWAsIHthcmdzLCBvcHRpb25zLCBlcnJvcn0pO1xuXHQgICAgICAgIGpvYi5kb0Ryb3Aoe2Vycm9yfSk7XG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChibG9ja2VkKSB7XG5cdCAgICAgICAgam9iLmRvRHJvcCgpO1xuXHQgICAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgICB9IGVsc2UgaWYgKHJlYWNoZWRIV00pIHtcblx0ICAgICAgICBzaGlmdGVkID0gc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5LkxFQUsgPyB0aGlzLl9xdWV1ZXMuc2hpZnRMYXN0RnJvbShvcHRpb25zLnByaW9yaXR5KSA6IHN0cmF0ZWd5ID09PSBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdHJhdGVneS5PVkVSRkxPV19QUklPUklUWSA/IHRoaXMuX3F1ZXVlcy5zaGlmdExhc3RGcm9tKG9wdGlvbnMucHJpb3JpdHkgKyAxKSA6IHN0cmF0ZWd5ID09PSBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdHJhdGVneS5PVkVSRkxPVyA/IGpvYiA6IHZvaWQgMDtcblx0ICAgICAgICBpZiAoc2hpZnRlZCAhPSBudWxsKSB7XG5cdCAgICAgICAgICBzaGlmdGVkLmRvRHJvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoKHNoaWZ0ZWQgPT0gbnVsbCkgfHwgc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XKSB7XG5cdCAgICAgICAgICBpZiAoc2hpZnRlZCA9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGpvYi5kb0Ryb3AoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHJldHVybiByZWFjaGVkSFdNO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICBqb2IuZG9RdWV1ZShyZWFjaGVkSFdNLCBibG9ja2VkKTtcblx0ICAgICAgdGhpcy5fcXVldWVzLnB1c2goam9iKTtcblx0ICAgICAgYXdhaXQgdGhpcy5fZHJhaW5BbGwoKTtcblx0ICAgICAgcmV0dXJuIHJlYWNoZWRIV007XG5cdCAgICB9XG5cblx0ICAgIF9yZWNlaXZlKGpvYikge1xuXHQgICAgICBpZiAodGhpcy5fc3RhdGVzLmpvYlN0YXR1cyhqb2Iub3B0aW9ucy5pZCkgIT0gbnVsbCkge1xuXHQgICAgICAgIGpvYi5fcmVqZWN0KG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoYEEgam9iIHdpdGggdGhlIHNhbWUgaWQgYWxyZWFkeSBleGlzdHMgKGlkPSR7am9iLm9wdGlvbnMuaWR9KWApKTtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgam9iLmRvUmVjZWl2ZSgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRMb2NrLnNjaGVkdWxlKHRoaXMuX2FkZFRvUXVldWUsIGpvYik7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgc3VibWl0KC4uLmFyZ3MpIHtcblx0ICAgICAgdmFyIGNiLCBmbiwgam9iLCBvcHRpb25zLCByZWYsIHJlZjEsIHRhc2s7XG5cdCAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgcmVmID0gYXJncywgW2ZuLCAuLi5hcmdzXSA9IHJlZiwgW2NiXSA9IHNwbGljZS5jYWxsKGFyZ3MsIC0xKTtcblx0ICAgICAgICBvcHRpb25zID0gcGFyc2VyJDUubG9hZCh7fSwgdGhpcy5qb2JEZWZhdWx0cyk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmVmMSA9IGFyZ3MsIFtvcHRpb25zLCBmbiwgLi4uYXJnc10gPSByZWYxLCBbY2JdID0gc3BsaWNlLmNhbGwoYXJncywgLTEpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMuam9iRGVmYXVsdHMpO1xuXHQgICAgICB9XG5cdCAgICAgIHRhc2sgPSAoLi4uYXJncykgPT4ge1xuXHQgICAgICAgIHJldHVybiBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHQgICAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MsIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIChhcmdzWzBdICE9IG51bGwgPyByZWplY3QgOiByZXNvbHZlKShhcmdzKTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9O1xuXHQgICAgICBqb2IgPSBuZXcgSm9iJDEodGFzaywgYXJncywgb3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cywgdGhpcy5yZWplY3RPbkRyb3AsIHRoaXMuRXZlbnRzLCB0aGlzLl9zdGF0ZXMsIHRoaXMuUHJvbWlzZSk7XG5cdCAgICAgIGpvYi5wcm9taXNlLnRoZW4oZnVuY3Rpb24oYXJncykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKC4uLmFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICB9KS5jYXRjaChmdW5jdGlvbihhcmdzKSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcblx0ICAgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKC4uLmFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gdHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIgPyBjYihhcmdzKSA6IHZvaWQgMDtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgICByZXR1cm4gdGhpcy5fcmVjZWl2ZShqb2IpO1xuXHQgICAgfVxuXG5cdCAgICBzY2hlZHVsZSguLi5hcmdzKSB7XG5cdCAgICAgIHZhciBqb2IsIG9wdGlvbnMsIHRhc2s7XG5cdCAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgW3Rhc2ssIC4uLmFyZ3NdID0gYXJncztcblx0ICAgICAgICBvcHRpb25zID0ge307XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgW29wdGlvbnMsIHRhc2ssIC4uLmFyZ3NdID0gYXJncztcblx0ICAgICAgfVxuXHQgICAgICBqb2IgPSBuZXcgSm9iJDEodGFzaywgYXJncywgb3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cywgdGhpcy5yZWplY3RPbkRyb3AsIHRoaXMuRXZlbnRzLCB0aGlzLl9zdGF0ZXMsIHRoaXMuUHJvbWlzZSk7XG5cdCAgICAgIHRoaXMuX3JlY2VpdmUoam9iKTtcblx0ICAgICAgcmV0dXJuIGpvYi5wcm9taXNlO1xuXHQgICAgfVxuXG5cdCAgICB3cmFwKGZuKSB7XG5cdCAgICAgIHZhciBzY2hlZHVsZSwgd3JhcHBlZDtcblx0ICAgICAgc2NoZWR1bGUgPSB0aGlzLnNjaGVkdWxlLmJpbmQodGhpcyk7XG5cdCAgICAgIHdyYXBwZWQgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNjaGVkdWxlKGZuLmJpbmQodGhpcyksIC4uLmFyZ3MpO1xuXHQgICAgICB9O1xuXHQgICAgICB3cmFwcGVkLndpdGhPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucywgLi4uYXJncykge1xuXHQgICAgICAgIHJldHVybiBzY2hlZHVsZShvcHRpb25zLCBmbiwgLi4uYXJncyk7XG5cdCAgICAgIH07XG5cdCAgICAgIHJldHVybiB3cmFwcGVkO1xuXHQgICAgfVxuXG5cdCAgICBhc3luYyB1cGRhdGVTZXR0aW5ncyhvcHRpb25zID0ge30pIHtcblx0ICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuX191cGRhdGVTZXR0aW5nc19fKHBhcnNlciQ1Lm92ZXJ3cml0ZShvcHRpb25zLCB0aGlzLnN0b3JlRGVmYXVsdHMpKTtcblx0ICAgICAgcGFyc2VyJDUub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuaW5zdGFuY2VEZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfVxuXG5cdCAgICBjdXJyZW50UmVzZXJ2b2lyKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19jdXJyZW50UmVzZXJ2b2lyX18oKTtcblx0ICAgIH1cblxuXHQgICAgaW5jcmVtZW50UmVzZXJ2b2lyKGluY3IgPSAwKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2luY3JlbWVudFJlc2Vydm9pcl9fKGluY3IpO1xuXHQgICAgfVxuXG5cdCAgfVxuXHQgIEJvdHRsZW5lY2suZGVmYXVsdCA9IEJvdHRsZW5lY2s7XG5cblx0ICBCb3R0bGVuZWNrLkV2ZW50cyA9IEV2ZW50cyQ0O1xuXG5cdCAgQm90dGxlbmVjay52ZXJzaW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUudmVyc2lvbiA9IHJlcXVpcmUkJDgudmVyc2lvbjtcblxuXHQgIEJvdHRsZW5lY2suc3RyYXRlZ3kgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdHJhdGVneSA9IHtcblx0ICAgIExFQUs6IDEsXG5cdCAgICBPVkVSRkxPVzogMixcblx0ICAgIE9WRVJGTE9XX1BSSU9SSVRZOiA0LFxuXHQgICAgQkxPQ0s6IDNcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5Cb3R0bGVuZWNrRXJyb3IgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHQgIEJvdHRsZW5lY2suR3JvdXAgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5Hcm91cCA9IEdyb3VwXzE7XG5cblx0ICBCb3R0bGVuZWNrLlJlZGlzQ29ubmVjdGlvbiA9IEJvdHRsZW5lY2sucHJvdG90eXBlLlJlZGlzQ29ubmVjdGlvbiA9IHJlcXVpcmUkJDI7XG5cblx0ICBCb3R0bGVuZWNrLklPUmVkaXNDb25uZWN0aW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUuSU9SZWRpc0Nvbm5lY3Rpb24gPSByZXF1aXJlJCQzO1xuXG5cdCAgQm90dGxlbmVjay5CYXRjaGVyID0gQm90dGxlbmVjay5wcm90b3R5cGUuQmF0Y2hlciA9IEJhdGNoZXJfMTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLmpvYkRlZmF1bHRzID0ge1xuXHQgICAgcHJpb3JpdHk6IERFRkFVTFRfUFJJT1JJVFkkMSxcblx0ICAgIHdlaWdodDogMSxcblx0ICAgIGV4cGlyYXRpb246IG51bGwsXG5cdCAgICBpZDogXCI8bm8taWQ+XCJcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuc3RvcmVEZWZhdWx0cyA9IHtcblx0ICAgIG1heENvbmN1cnJlbnQ6IG51bGwsXG5cdCAgICBtaW5UaW1lOiAwLFxuXHQgICAgaGlnaFdhdGVyOiBudWxsLFxuXHQgICAgc3RyYXRlZ3k6IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5LkxFQUssXG5cdCAgICBwZW5hbHR5OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lyOiBudWxsLFxuXHQgICAgcmVzZXJ2b2lyUmVmcmVzaEludGVydmFsOiBudWxsLFxuXHQgICAgcmVzZXJ2b2lyUmVmcmVzaEFtb3VudDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWw6IG51bGwsXG5cdCAgICByZXNlcnZvaXJJbmNyZWFzZUFtb3VudDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlTWF4aW11bTogbnVsbFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5sb2NhbFN0b3JlRGVmYXVsdHMgPSB7XG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgdGltZW91dDogbnVsbCxcblx0ICAgIGhlYXJ0YmVhdEludGVydmFsOiAyNTBcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUucmVkaXNTdG9yZURlZmF1bHRzID0ge1xuXHQgICAgUHJvbWlzZTogUHJvbWlzZSxcblx0ICAgIHRpbWVvdXQ6IG51bGwsXG5cdCAgICBoZWFydGJlYXRJbnRlcnZhbDogNTAwMCxcblx0ICAgIGNsaWVudFRpbWVvdXQ6IDEwMDAwLFxuXHQgICAgUmVkaXM6IG51bGwsXG5cdCAgICBjbGllbnRPcHRpb25zOiB7fSxcblx0ICAgIGNsdXN0ZXJOb2RlczogbnVsbCxcblx0ICAgIGNsZWFyRGF0YXN0b3JlOiBmYWxzZSxcblx0ICAgIGNvbm5lY3Rpb246IG51bGxcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuaW5zdGFuY2VEZWZhdWx0cyA9IHtcblx0ICAgIGRhdGFzdG9yZTogXCJsb2NhbFwiLFxuXHQgICAgY29ubmVjdGlvbjogbnVsbCxcblx0ICAgIGlkOiBcIjxuby1pZD5cIixcblx0ICAgIHJlamVjdE9uRHJvcDogdHJ1ZSxcblx0ICAgIHRyYWNrRG9uZVN0YXR1czogZmFsc2UsXG5cdCAgICBQcm9taXNlOiBQcm9taXNlXG5cdCAgfTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLnN0b3BEZWZhdWx0cyA9IHtcblx0ICAgIGVucXVldWVFcnJvck1lc3NhZ2U6IFwiVGhpcyBsaW1pdGVyIGhhcyBiZWVuIHN0b3BwZWQgYW5kIGNhbm5vdCBhY2NlcHQgbmV3IGpvYnMuXCIsXG5cdCAgICBkcm9wV2FpdGluZ0pvYnM6IHRydWUsXG5cdCAgICBkcm9wRXJyb3JNZXNzYWdlOiBcIlRoaXMgbGltaXRlciBoYXMgYmVlbiBzdG9wcGVkLlwiXG5cdCAgfTtcblxuXHQgIHJldHVybiBCb3R0bGVuZWNrO1xuXG5cdH0pLmNhbGwoY29tbW9uanNHbG9iYWwpO1xuXG5cdHZhciBCb3R0bGVuZWNrXzEgPSBCb3R0bGVuZWNrO1xuXG5cdHZhciBsaWIgPSBCb3R0bGVuZWNrXzE7XG5cblx0cmV0dXJuIGxpYjtcblxufSkpKTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIEJvdHRsZW5lY2sgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnYm90dGxlbmVjay9saWdodCcpKTtcblxuLy8gQHRzLWlnbm9yZVxuYXN5bmMgZnVuY3Rpb24gZXJyb3JSZXF1ZXN0KG9jdG9raXQsIHN0YXRlLCBlcnJvciwgb3B0aW9ucykge1xuICBpZiAoIWVycm9yLnJlcXVlc3QgfHwgIWVycm9yLnJlcXVlc3QucmVxdWVzdCkge1xuICAgIC8vIGFkZHJlc3MgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvcGx1Z2luLXJldHJ5LmpzL2lzc3Vlcy84XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gLy8gcmV0cnkgYWxsID49IDQwMCAmJiBub3QgZG9Ob3RSZXRyeVxuXG5cbiAgaWYgKGVycm9yLnN0YXR1cyA+PSA0MDAgJiYgIXN0YXRlLmRvTm90UmV0cnkuaW5jbHVkZXMoZXJyb3Iuc3RhdHVzKSkge1xuICAgIGNvbnN0IHJldHJpZXMgPSBvcHRpb25zLnJlcXVlc3QucmV0cmllcyAhPSBudWxsID8gb3B0aW9ucy5yZXF1ZXN0LnJldHJpZXMgOiBzdGF0ZS5yZXRyaWVzO1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBNYXRoLnBvdygob3B0aW9ucy5yZXF1ZXN0LnJldHJ5Q291bnQgfHwgMCkgKyAxLCAyKTtcbiAgICB0aHJvdyBvY3Rva2l0LnJldHJ5LnJldHJ5UmVxdWVzdChlcnJvciwgcmV0cmllcywgcmV0cnlBZnRlcik7XG4gIH0gLy8gTWF5YmUgZXZlbnR1YWxseSB0aGVyZSB3aWxsIGJlIG1vcmUgY2FzZXMgaGVyZVxuXG5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbi8vIEB0cy1pZ25vcmVcblxuYXN5bmMgZnVuY3Rpb24gd3JhcFJlcXVlc3Qoc3RhdGUsIHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBCb3R0bGVuZWNrKCk7IC8vIEB0cy1pZ25vcmVcblxuICBsaW1pdGVyLm9uKFwiZmFpbGVkXCIsIGZ1bmN0aW9uIChlcnJvciwgaW5mbykge1xuICAgIGNvbnN0IG1heFJldHJpZXMgPSB+fmVycm9yLnJlcXVlc3QucmVxdWVzdC5yZXRyaWVzO1xuICAgIGNvbnN0IGFmdGVyID0gfn5lcnJvci5yZXF1ZXN0LnJlcXVlc3QucmV0cnlBZnRlcjtcbiAgICBvcHRpb25zLnJlcXVlc3QucmV0cnlDb3VudCA9IGluZm8ucmV0cnlDb3VudCArIDE7XG5cbiAgICBpZiAobWF4UmV0cmllcyA+IGluZm8ucmV0cnlDb3VudCkge1xuICAgICAgLy8gUmV0dXJuaW5nIGEgbnVtYmVyIGluc3RydWN0cyB0aGUgbGltaXRlciB0byByZXRyeVxuICAgICAgLy8gdGhlIHJlcXVlc3QgYWZ0ZXIgdGhhdCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGhhdmUgcGFzc2VkXG4gICAgICByZXR1cm4gYWZ0ZXIgKiBzdGF0ZS5yZXRyeUFmdGVyQmFzZVZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsaW1pdGVyLnNjaGVkdWxlKHJlcXVlc3QsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIzLjAuOVwiO1xuZnVuY3Rpb24gcmV0cnkob2N0b2tpdCwgb2N0b2tpdE9wdGlvbnMpIHtcbiAgY29uc3Qgc3RhdGUgPSBPYmplY3QuYXNzaWduKHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHJldHJ5QWZ0ZXJCYXNlVmFsdWU6IDEwMDAsXG4gICAgZG9Ob3RSZXRyeTogWzQwMCwgNDAxLCA0MDMsIDQwNCwgNDIyXSxcbiAgICByZXRyaWVzOiAzXG4gIH0sIG9jdG9raXRPcHRpb25zLnJldHJ5KTtcblxuICBpZiAoc3RhdGUuZW5hYmxlZCkge1xuICAgIG9jdG9raXQuaG9vay5lcnJvcihcInJlcXVlc3RcIiwgZXJyb3JSZXF1ZXN0LmJpbmQobnVsbCwgb2N0b2tpdCwgc3RhdGUpKTtcbiAgICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgd3JhcFJlcXVlc3QuYmluZChudWxsLCBzdGF0ZSkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZXRyeToge1xuICAgICAgcmV0cnlSZXF1ZXN0OiAoZXJyb3IsIHJldHJpZXMsIHJldHJ5QWZ0ZXIpID0+IHtcbiAgICAgICAgZXJyb3IucmVxdWVzdC5yZXF1ZXN0ID0gT2JqZWN0LmFzc2lnbih7fSwgZXJyb3IucmVxdWVzdC5yZXF1ZXN0LCB7XG4gICAgICAgICAgcmV0cmllczogcmV0cmllcyxcbiAgICAgICAgICByZXRyeUFmdGVyOiByZXRyeUFmdGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxucmV0cnkuVkVSU0lPTiA9IFZFUlNJT047XG5cbmV4cG9ydHMuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnRzLnJldHJ5ID0gcmV0cnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBcnRpZmFjdEludGVybmFsID0gZXhwb3J0cy5nZXRBcnRpZmFjdFB1YmxpYyA9IHZvaWQgMDtcbmNvbnN0IGdpdGh1Yl8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1YlwiKTtcbmNvbnN0IHBsdWdpbl9yZXRyeV8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXRyeVwiKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWIvbGliL3V0aWxzXCIpO1xuY29uc3QgcmV0cnlfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vcmV0cnktb3B0aW9uc1wiKTtcbmNvbnN0IHBsdWdpbl9yZXF1ZXN0X2xvZ18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZ1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IGFydGlmYWN0X3R3aXJwX2NsaWVudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9hcnRpZmFjdC10d2lycC1jbGllbnRcIik7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvZXJyb3JzXCIpO1xuZnVuY3Rpb24gZ2V0QXJ0aWZhY3RQdWJsaWMoYXJ0aWZhY3ROYW1lLCB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBbcmV0cnlPcHRzLCByZXF1ZXN0T3B0c10gPSAoMCwgcmV0cnlfb3B0aW9uc18xLmdldFJldHJ5T3B0aW9ucykodXRpbHNfMS5kZWZhdWx0cyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICBsb2c6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogKDAsIHVzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRTdHJpbmcpKCksXG4gICAgICAgICAgICBwcmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmV0cnk6IHJldHJ5T3B0cyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdpdGh1YiA9ICgwLCBnaXRodWJfMS5nZXRPY3Rva2l0KSh0b2tlbiwgb3B0cywgcGx1Z2luX3JldHJ5XzEucmV0cnksIHBsdWdpbl9yZXF1ZXN0X2xvZ18xLnJlcXVlc3RMb2cpO1xuICAgICAgICBjb25zdCBnZXRBcnRpZmFjdFJlc3AgPSB5aWVsZCBnaXRodWIucmVxdWVzdCgnR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3Rzez9uYW1lfScsIHtcbiAgICAgICAgICAgIG93bmVyOiByZXBvc2l0b3J5T3duZXIsXG4gICAgICAgICAgICByZXBvOiByZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgIHJ1bl9pZDogd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0TmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGdldEFydGlmYWN0UmVzcC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkludmFsaWRSZXNwb25zZUVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGZyb20gR2l0SHViIEFQSTogJHtnZXRBcnRpZmFjdFJlc3Auc3RhdHVzfSAoJHsoX2EgPSBnZXRBcnRpZmFjdFJlc3AgPT09IG51bGwgfHwgZ2V0QXJ0aWZhY3RSZXNwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRBcnRpZmFjdFJlc3AuaGVhZGVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWyd4LWdpdGh1Yi1yZXF1ZXN0LWlkJ119KWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXJ0aWZhY3ROb3RGb3VuZEVycm9yKGBBcnRpZmFjdCBub3QgZm91bmQgZm9yIG5hbWU6ICR7YXJ0aWZhY3ROYW1lfVxuICAgICAgICBQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBhcnRpZmFjdCBpcyBub3QgZXhwaXJlZCBhbmQgdGhlIGFydGlmYWN0IHdhcyB1cGxvYWRlZCB1c2luZyBhIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0b29sa2l0L3VwbG9hZC1hcnRpZmFjdC5cbiAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSBHaXRIdWIgQXJ0aWZhY3RzIEZBUTogaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iL21haW4vcGFja2FnZXMvYXJ0aWZhY3QvZG9jcy9mYXEubWRgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJ0aWZhY3QgPSBnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHNbMF07XG4gICAgICAgIGlmIChnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgYXJ0aWZhY3QgPSBnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHMuc29ydCgoYSwgYikgPT4gYi5pZCAtIGEuaWQpWzBdO1xuICAgICAgICAgICAgY29yZS5kZWJ1ZyhgTW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBmb3VuZCBmb3IgYSBzaW5nbGUgbmFtZSwgcmV0dXJuaW5nIG5ld2VzdCAoaWQ6ICR7YXJ0aWZhY3QuaWR9KWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcnRpZmFjdDoge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IGFydGlmYWN0LmlkLFxuICAgICAgICAgICAgICAgIHNpemU6IGFydGlmYWN0LnNpemVfaW5fYnl0ZXMsXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBhcnRpZmFjdC5jcmVhdGVkX2F0ID8gbmV3IERhdGUoYXJ0aWZhY3QuY3JlYXRlZF9hdCkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0QXJ0aWZhY3RQdWJsaWMgPSBnZXRBcnRpZmFjdFB1YmxpYztcbmZ1bmN0aW9uIGdldEFydGlmYWN0SW50ZXJuYWwoYXJ0aWZhY3ROYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZUZpbHRlcjogZ2VuZXJhdGVkXzEuU3RyaW5nVmFsdWUuY3JlYXRlKHsgdmFsdWU6IGFydGlmYWN0TmFtZSB9KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBhcnRpZmFjdENsaWVudC5MaXN0QXJ0aWZhY3RzKHJlcSk7XG4gICAgICAgIGlmIChyZXMuYXJ0aWZhY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkFydGlmYWN0Tm90Rm91bmRFcnJvcihgQXJ0aWZhY3Qgbm90IGZvdW5kIGZvciBuYW1lOiAke2FydGlmYWN0TmFtZX1cbiAgICAgICAgUGxlYXNlIGVuc3VyZSB0aGF0IHlvdXIgYXJ0aWZhY3QgaXMgbm90IGV4cGlyZWQgYW5kIHRoZSBhcnRpZmFjdCB3YXMgdXBsb2FkZWQgdXNpbmcgYSBjb21wYXRpYmxlIHZlcnNpb24gb2YgdG9vbGtpdC91cGxvYWQtYXJ0aWZhY3QuXG4gICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCB2aXNpdCB0aGUgR2l0SHViIEFydGlmYWN0cyBGQVE6IGh0dHBzOi8vZ2l0aHViLmNvbS9hY3Rpb25zL3Rvb2xraXQvYmxvYi9tYWluL3BhY2thZ2VzL2FydGlmYWN0L2RvY3MvZmFxLm1kYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFydGlmYWN0ID0gcmVzLmFydGlmYWN0c1swXTtcbiAgICAgICAgaWYgKHJlcy5hcnRpZmFjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgYXJ0aWZhY3QgPSByZXMuYXJ0aWZhY3RzLnNvcnQoKGEsIGIpID0+IE51bWJlcihiLmRhdGFiYXNlSWQpIC0gTnVtYmVyKGEuZGF0YWJhc2VJZCkpWzBdO1xuICAgICAgICAgICAgY29yZS5kZWJ1ZyhgTW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBmb3VuZCBmb3IgYSBzaW5nbGUgbmFtZSwgcmV0dXJuaW5nIG5ld2VzdCAoaWQ6ICR7YXJ0aWZhY3QuZGF0YWJhc2VJZH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFydGlmYWN0OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogTnVtYmVyKGFydGlmYWN0LmRhdGFiYXNlSWQpLFxuICAgICAgICAgICAgICAgIHNpemU6IE51bWJlcihhcnRpZmFjdC5zaXplKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGFydGlmYWN0LmNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgICAgICA/IGdlbmVyYXRlZF8xLlRpbWVzdGFtcC50b0RhdGUoYXJ0aWZhY3QuY3JlYXRlZEF0KVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRBcnRpZmFjdEludGVybmFsID0gZ2V0QXJ0aWZhY3RJbnRlcm5hbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGV0ZUFydGlmYWN0SW50ZXJuYWwgPSBleHBvcnRzLmRlbGV0ZUFydGlmYWN0UHVibGljID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG5jb25zdCBnaXRodWJfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWJcIik7XG5jb25zdCB1c2VyX2FnZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3VzZXItYWdlbnRcIik7XG5jb25zdCByZXRyeV9vcHRpb25zXzEgPSByZXF1aXJlKFwiLi4vZmluZC9yZXRyeS1vcHRpb25zXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWIvbGliL3V0aWxzXCIpO1xuY29uc3QgcGx1Z2luX3JlcXVlc3RfbG9nXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCIpO1xuY29uc3QgcGx1Z2luX3JldHJ5XzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJldHJ5XCIpO1xuY29uc3QgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGdldF9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4uL2ZpbmQvZ2V0LWFydGlmYWN0XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIGRlbGV0ZUFydGlmYWN0UHVibGljKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgW3JldHJ5T3B0cywgcmVxdWVzdE9wdHNdID0gKDAsIHJldHJ5X29wdGlvbnNfMS5nZXRSZXRyeU9wdGlvbnMpKHV0aWxzXzEuZGVmYXVsdHMpO1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgbG9nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6ICgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpLFxuICAgICAgICAgICAgcHJldmlld3M6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJldHJ5OiByZXRyeU9wdHMsXG4gICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0c1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnaXRodWIgPSAoMCwgZ2l0aHViXzEuZ2V0T2N0b2tpdCkodG9rZW4sIG9wdHMsIHBsdWdpbl9yZXRyeV8xLnJldHJ5LCBwbHVnaW5fcmVxdWVzdF9sb2dfMS5yZXF1ZXN0TG9nKTtcbiAgICAgICAgY29uc3QgZ2V0QXJ0aWZhY3RSZXNwID0geWllbGQgKDAsIGdldF9hcnRpZmFjdF8xLmdldEFydGlmYWN0UHVibGljKShhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKTtcbiAgICAgICAgY29uc3QgZGVsZXRlQXJ0aWZhY3RSZXNwID0geWllbGQgZ2l0aHViLnJlc3QuYWN0aW9ucy5kZWxldGVBcnRpZmFjdCh7XG4gICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgcmVwbzogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgICBhcnRpZmFjdF9pZDogZ2V0QXJ0aWZhY3RSZXNwLmFydGlmYWN0LmlkXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGVsZXRlQXJ0aWZhY3RSZXNwLnN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuSW52YWxpZFJlc3BvbnNlRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgZnJvbSBHaXRIdWIgQVBJOiAke2RlbGV0ZUFydGlmYWN0UmVzcC5zdGF0dXN9ICgkeyhfYSA9IGRlbGV0ZUFydGlmYWN0UmVzcCA9PT0gbnVsbCB8fCBkZWxldGVBcnRpZmFjdFJlc3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGV0ZUFydGlmYWN0UmVzcC5oZWFkZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbJ3gtZ2l0aHViLXJlcXVlc3QtaWQnXX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBnZXRBcnRpZmFjdFJlc3AuYXJ0aWZhY3QuaWRcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RQdWJsaWMgPSBkZWxldGVBcnRpZmFjdFB1YmxpYztcbmZ1bmN0aW9uIGRlbGV0ZUFydGlmYWN0SW50ZXJuYWwoYXJ0aWZhY3ROYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCBsaXN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWVGaWx0ZXI6IGdlbmVyYXRlZF8xLlN0cmluZ1ZhbHVlLmNyZWF0ZSh7IHZhbHVlOiBhcnRpZmFjdE5hbWUgfSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGlzdFJlcyA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMobGlzdFJlcSk7XG4gICAgICAgIGlmIChsaXN0UmVzLmFydGlmYWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BcnRpZmFjdE5vdEZvdW5kRXJyb3IoYEFydGlmYWN0IG5vdCBmb3VuZCBmb3IgbmFtZTogJHthcnRpZmFjdE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFydGlmYWN0ID0gbGlzdFJlcy5hcnRpZmFjdHNbMF07XG4gICAgICAgIGlmIChsaXN0UmVzLmFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhcnRpZmFjdCA9IGxpc3RSZXMuYXJ0aWZhY3RzLnNvcnQoKGEsIGIpID0+IE51bWJlcihiLmRhdGFiYXNlSWQpIC0gTnVtYmVyKGEuZGF0YWJhc2VJZCkpWzBdO1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYE1vcmUgdGhhbiBvbmUgYXJ0aWZhY3QgZm91bmQgZm9yIGEgc2luZ2xlIG5hbWUsIHJldHVybmluZyBuZXdlc3QgKGlkOiAke2FydGlmYWN0LmRhdGFiYXNlSWR9KWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkOiBhcnRpZmFjdC53b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBhcnRpZmFjdC53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzID0geWllbGQgYXJ0aWZhY3RDbGllbnQuRGVsZXRlQXJ0aWZhY3QocmVxKTtcbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgQXJ0aWZhY3QgJyR7YXJ0aWZhY3ROYW1lfScgKElEOiAke3Jlcy5hcnRpZmFjdElkfSkgZGVsZXRlZGApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IE51bWJlcihyZXMuYXJ0aWZhY3RJZClcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbCA9IGRlbGV0ZUFydGlmYWN0SW50ZXJuYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxldGUtYXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5saXN0QXJ0aWZhY3RzSW50ZXJuYWwgPSBleHBvcnRzLmxpc3RBcnRpZmFjdHNQdWJsaWMgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGdpdGh1Yl8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1YlwiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IHJldHJ5X29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5LW9wdGlvbnNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHNcIik7XG5jb25zdCBwbHVnaW5fcmVxdWVzdF9sb2dfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2dcIik7XG5jb25zdCBwbHVnaW5fcmV0cnlfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmV0cnlcIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuLy8gTGltaXRpbmcgdG8gMTAwMCBmb3IgcGVyZiByZWFzb25zXG5jb25zdCBtYXhpbXVtQXJ0aWZhY3RDb3VudCA9IDEwMDA7XG5jb25zdCBwYWdpbmF0aW9uQ291bnQgPSAxMDA7XG5jb25zdCBtYXhOdW1iZXJPZlBhZ2VzID0gbWF4aW11bUFydGlmYWN0Q291bnQgLyBwYWdpbmF0aW9uQ291bnQ7XG5mdW5jdGlvbiBsaXN0QXJ0aWZhY3RzUHVibGljKHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuLCBsYXRlc3QgPSBmYWxzZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICgwLCBjb3JlXzEuaW5mbykoYEZldGNoaW5nIGFydGlmYWN0IGxpc3QgZm9yIHdvcmtmbG93IHJ1biAke3dvcmtmbG93UnVuSWR9IGluIHJlcG9zaXRvcnkgJHtyZXBvc2l0b3J5T3duZXJ9LyR7cmVwb3NpdG9yeU5hbWV9YCk7XG4gICAgICAgIGxldCBhcnRpZmFjdHMgPSBbXTtcbiAgICAgICAgY29uc3QgW3JldHJ5T3B0cywgcmVxdWVzdE9wdHNdID0gKDAsIHJldHJ5X29wdGlvbnNfMS5nZXRSZXRyeU9wdGlvbnMpKHV0aWxzXzEuZGVmYXVsdHMpO1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgbG9nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6ICgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpLFxuICAgICAgICAgICAgcHJldmlld3M6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJldHJ5OiByZXRyeU9wdHMsXG4gICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0c1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnaXRodWIgPSAoMCwgZ2l0aHViXzEuZ2V0T2N0b2tpdCkodG9rZW4sIG9wdHMsIHBsdWdpbl9yZXRyeV8xLnJldHJ5LCBwbHVnaW5fcmVxdWVzdF9sb2dfMS5yZXF1ZXN0TG9nKTtcbiAgICAgICAgbGV0IGN1cnJlbnRQYWdlTnVtYmVyID0gMTtcbiAgICAgICAgY29uc3QgeyBkYXRhOiBsaXN0QXJ0aWZhY3RSZXNwb25zZSB9ID0geWllbGQgZ2l0aHViLnJlc3QuYWN0aW9ucy5saXN0V29ya2Zsb3dSdW5BcnRpZmFjdHMoe1xuICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgcnVuX2lkOiB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgcGVyX3BhZ2U6IHBhZ2luYXRpb25Db3VudCxcbiAgICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlTnVtYmVyXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgbnVtYmVyT2ZQYWdlcyA9IE1hdGguY2VpbChsaXN0QXJ0aWZhY3RSZXNwb25zZS50b3RhbF9jb3VudCAvIHBhZ2luYXRpb25Db3VudCk7XG4gICAgICAgIGNvbnN0IHRvdGFsQXJ0aWZhY3RDb3VudCA9IGxpc3RBcnRpZmFjdFJlc3BvbnNlLnRvdGFsX2NvdW50O1xuICAgICAgICBpZiAodG90YWxBcnRpZmFjdENvdW50ID4gbWF4aW11bUFydGlmYWN0Q291bnQpIHtcbiAgICAgICAgICAgICgwLCBjb3JlXzEud2FybmluZykoYFdvcmtmbG93IHJ1biAke3dvcmtmbG93UnVuSWR9IGhhcyBtb3JlIHRoYW4gMTAwMCBhcnRpZmFjdHMuIFJlc3VsdHMgd2lsbCBiZSBpbmNvbXBsZXRlIGFzIG9ubHkgdGhlIGZpcnN0ICR7bWF4aW11bUFydGlmYWN0Q291bnR9IGFydGlmYWN0cyB3aWxsIGJlIHJldHVybmVkYCk7XG4gICAgICAgICAgICBudW1iZXJPZlBhZ2VzID0gbWF4TnVtYmVyT2ZQYWdlcztcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGZpcnN0IHBhZ2VcbiAgICAgICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBsaXN0QXJ0aWZhY3RSZXNwb25zZS5hcnRpZmFjdHMpIHtcbiAgICAgICAgICAgIGFydGlmYWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgICAgIGlkOiBhcnRpZmFjdC5pZCxcbiAgICAgICAgICAgICAgICBzaXplOiBhcnRpZmFjdC5zaXplX2luX2J5dGVzLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZF9hdCA/IG5ldyBEYXRlKGFydGlmYWN0LmNyZWF0ZWRfYXQpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYW55IHJlbWFpbmluZyBwYWdlc1xuICAgICAgICBmb3IgKGN1cnJlbnRQYWdlTnVtYmVyOyBjdXJyZW50UGFnZU51bWJlciA8IG51bWJlck9mUGFnZXM7IGN1cnJlbnRQYWdlTnVtYmVyKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlTnVtYmVyKys7XG4gICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgRmV0Y2hpbmcgcGFnZSAke2N1cnJlbnRQYWdlTnVtYmVyfSBvZiBhcnRpZmFjdCBsaXN0YCk7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGE6IGxpc3RBcnRpZmFjdFJlc3BvbnNlIH0gPSB5aWVsZCBnaXRodWIucmVzdC5hY3Rpb25zLmxpc3RXb3JrZmxvd1J1bkFydGlmYWN0cyh7XG4gICAgICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgICAgICByZXBvOiByZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgICAgICBydW5faWQ6IHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgICAgcGVyX3BhZ2U6IHBhZ2luYXRpb25Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBjdXJyZW50UGFnZU51bWJlclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGxpc3RBcnRpZmFjdFJlc3BvbnNlLmFydGlmYWN0cykge1xuICAgICAgICAgICAgICAgIGFydGlmYWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGFydGlmYWN0LmlkLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBhcnRpZmFjdC5zaXplX2luX2J5dGVzLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGFydGlmYWN0LmNyZWF0ZWRfYXRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoYXJ0aWZhY3QuY3JlYXRlZF9hdClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhdGVzdCkge1xuICAgICAgICAgICAgYXJ0aWZhY3RzID0gZmlsdGVyTGF0ZXN0KGFydGlmYWN0cyk7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgRm91bmQgJHthcnRpZmFjdHMubGVuZ3RofSBhcnRpZmFjdChzKWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJ0aWZhY3RzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmxpc3RBcnRpZmFjdHNQdWJsaWMgPSBsaXN0QXJ0aWZhY3RzUHVibGljO1xuZnVuY3Rpb24gbGlzdEFydGlmYWN0c0ludGVybmFsKGxhdGVzdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMocmVxKTtcbiAgICAgICAgbGV0IGFydGlmYWN0cyA9IHJlcy5hcnRpZmFjdHMubWFwKGFydGlmYWN0ID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgaWQ6IE51bWJlcihhcnRpZmFjdC5kYXRhYmFzZUlkKSxcbiAgICAgICAgICAgIHNpemU6IE51bWJlcihhcnRpZmFjdC5zaXplKSxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgPyBnZW5lcmF0ZWRfMS5UaW1lc3RhbXAudG9EYXRlKGFydGlmYWN0LmNyZWF0ZWRBdClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChsYXRlc3QpIHtcbiAgICAgICAgICAgIGFydGlmYWN0cyA9IGZpbHRlckxhdGVzdChhcnRpZmFjdHMpO1xuICAgICAgICB9XG4gICAgICAgICgwLCBjb3JlXzEuaW5mbykoYEZvdW5kICR7YXJ0aWZhY3RzLmxlbmd0aH0gYXJ0aWZhY3QocylgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFydGlmYWN0c1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5saXN0QXJ0aWZhY3RzSW50ZXJuYWwgPSBsaXN0QXJ0aWZhY3RzSW50ZXJuYWw7XG4vKipcbiAqIEZpbHRlcnMgYSBsaXN0IG9mIGFydGlmYWN0cyB0byBvbmx5IGluY2x1ZGUgdGhlIGxhdGVzdCBhcnRpZmFjdCBmb3IgZWFjaCBuYW1lXG4gKiBAcGFyYW0gYXJ0aWZhY3RzIFRoZSBhcnRpZmFjdHMgdG8gZmlsdGVyXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyZWQgbGlzdCBvZiBhcnRpZmFjdHNcbiAqL1xuZnVuY3Rpb24gZmlsdGVyTGF0ZXN0KGFydGlmYWN0cykge1xuICAgIGFydGlmYWN0cy5zb3J0KChhLCBiKSA9PiBiLmlkIC0gYS5pZCk7XG4gICAgY29uc3QgbGF0ZXN0QXJ0aWZhY3RzID0gW107XG4gICAgY29uc3Qgc2VlbkFydGlmYWN0TmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBhcnRpZmFjdHMpIHtcbiAgICAgICAgaWYgKCFzZWVuQXJ0aWZhY3ROYW1lcy5oYXMoYXJ0aWZhY3QubmFtZSkpIHtcbiAgICAgICAgICAgIGxhdGVzdEFydGlmYWN0cy5wdXNoKGFydGlmYWN0KTtcbiAgICAgICAgICAgIHNlZW5BcnRpZmFjdE5hbWVzLmFkZChhcnRpZmFjdC5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGF0ZXN0QXJ0aWZhY3RzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGlzdC1hcnRpZmFjdHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZhdWx0QXJ0aWZhY3RDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vc2hhcmVkL2NvbmZpZ1wiKTtcbmNvbnN0IHVwbG9hZF9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vdXBsb2FkL3VwbG9hZC1hcnRpZmFjdFwiKTtcbmNvbnN0IGRvd25sb2FkX2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9kb3dubG9hZC9kb3dubG9hZC1hcnRpZmFjdFwiKTtcbmNvbnN0IGRlbGV0ZV9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vZGVsZXRlL2RlbGV0ZS1hcnRpZmFjdFwiKTtcbmNvbnN0IGdldF9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vZmluZC9nZXQtYXJ0aWZhY3RcIik7XG5jb25zdCBsaXN0X2FydGlmYWN0c18xID0gcmVxdWlyZShcIi4vZmluZC9saXN0LWFydGlmYWN0c1wiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vc2hhcmVkL2Vycm9yc1wiKTtcbi8qKlxuICogVGhlIGRlZmF1bHQgYXJ0aWZhY3QgY2xpZW50IHRoYXQgaXMgdXNlZCBieSB0aGUgYXJ0aWZhY3QgYWN0aW9uKHMpLlxuICovXG5jbGFzcyBEZWZhdWx0QXJ0aWZhY3RDbGllbnQge1xuICAgIHVwbG9hZEFydGlmYWN0KG5hbWUsIGZpbGVzLCByb290RGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgY29uZmlnXzEuaXNHaGVzKSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5HSEVTTm90U3VwcG9ydGVkRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCB1cGxvYWRfYXJ0aWZhY3RfMS51cGxvYWRBcnRpZmFjdCkobmFtZSwgZmlsZXMsIHJvb3REaXJlY3RvcnksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgQXJ0aWZhY3QgdXBsb2FkIGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBpcyBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkb3dubG9hZEFydGlmYWN0KGFydGlmYWN0SWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiB9IH0gPSBvcHRpb25zLCBkb3dubG9hZE9wdGlvbnMgPSBfX3Jlc3Qob3B0aW9ucywgW1wiZmluZEJ5XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBkb3dubG9hZF9hcnRpZmFjdF8xLmRvd25sb2FkQXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0SWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuLCBkb3dubG9hZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRvd25sb2FkX2FydGlmYWN0XzEuZG93bmxvYWRBcnRpZmFjdEludGVybmFsKShhcnRpZmFjdElkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEud2FybmluZykoYERvd25sb2FkIEFydGlmYWN0IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsaXN0QXJ0aWZhY3RzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiB9IH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGxpc3RfYXJ0aWZhY3RzXzEubGlzdEFydGlmYWN0c1B1YmxpYykod29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sYXRlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGxpc3RfYXJ0aWZhY3RzXzEubGlzdEFydGlmYWN0c0ludGVybmFsKShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGF0ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEud2FybmluZykoYExpc3RpbmcgQXJ0aWZhY3RzIGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRBcnRpZmFjdChhcnRpZmFjdE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiB9IH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGdldF9hcnRpZmFjdF8xLmdldEFydGlmYWN0UHVibGljKShhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBnZXRfYXJ0aWZhY3RfMS5nZXRBcnRpZmFjdEludGVybmFsKShhcnRpZmFjdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgR2V0IEFydGlmYWN0IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWxldGVBcnRpZmFjdChhcnRpZmFjdE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB3b3JrZmxvd1J1bklkLCB0b2tlbiB9IH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRlbGV0ZV9hcnRpZmFjdF8xLmRlbGV0ZUFydGlmYWN0UHVibGljKShhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBkZWxldGVfYXJ0aWZhY3RfMS5kZWxldGVBcnRpZmFjdEludGVybmFsKShhcnRpZmFjdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgRGVsZXRlIEFydGlmYWN0IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVmYXVsdEFydGlmYWN0Q2xpZW50ID0gRGVmYXVsdEFydGlmYWN0Q2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcmZhY2VzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNsaWVudF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvY2xpZW50XCIpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3NoYXJlZC9pbnRlcmZhY2VzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcm5hbC9zaGFyZWQvZXJyb3JzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcm5hbC9jbGllbnRcIiksIGV4cG9ydHMpO1xuY29uc3QgY2xpZW50ID0gbmV3IGNsaWVudF8xLkRlZmF1bHRBcnRpZmFjdENsaWVudCgpO1xuZXhwb3J0cy5kZWZhdWx0ID0gY2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY2xhc3MgQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogSHlkcmF0ZSB0aGUgY29udGV4dCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgdGhpcy5wYXlsb2FkID0ge307XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCkge1xuICAgICAgICAgICAgaWYgKCgwLCBmc18xLmV4aXN0c1N5bmMpKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGF5bG9hZCA9IEpTT04ucGFyc2UoKDAsIGZzXzEucmVhZEZpbGVTeW5jKShwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSDtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgR0lUSFVCX0VWRU5UX1BBVEggJHtwYXRofSBkb2VzIG5vdCBleGlzdCR7b3NfMS5FT0x9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudE5hbWUgPSBwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfTkFNRTtcbiAgICAgICAgdGhpcy5zaGEgPSBwcm9jZXNzLmVudi5HSVRIVUJfU0hBO1xuICAgICAgICB0aGlzLnJlZiA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRUY7XG4gICAgICAgIHRoaXMud29ya2Zsb3cgPSBwcm9jZXNzLmVudi5HSVRIVUJfV09SS0ZMT1c7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVElPTjtcbiAgICAgICAgdGhpcy5hY3RvciA9IHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RPUjtcbiAgICAgICAgdGhpcy5qb2IgPSBwcm9jZXNzLmVudi5HSVRIVUJfSk9CO1xuICAgICAgICB0aGlzLnJ1bk51bWJlciA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fTlVNQkVSLCAxMCk7XG4gICAgICAgIHRoaXMucnVuSWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5HSVRIVUJfUlVOX0lELCAxMCk7XG4gICAgICAgIHRoaXMuYXBpVXJsID0gKF9hID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FQSV9VUkwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGBodHRwczovL2FwaS5naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5zZXJ2ZXJVcmwgPSAoX2IgPSBwcm9jZXNzLmVudi5HSVRIVUJfU0VSVkVSX1VSTCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogYGh0dHBzOi8vZ2l0aHViLmNvbWA7XG4gICAgICAgIHRoaXMuZ3JhcGhxbFVybCA9XG4gICAgICAgICAgICAoX2MgPSBwcm9jZXNzLmVudi5HSVRIVUJfR1JBUEhRTF9VUkwpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGBodHRwczovL2FwaS5naXRodWIuY29tL2dyYXBocWxgO1xuICAgIH1cbiAgICBnZXQgaXNzdWUoKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnBheWxvYWQ7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMucmVwbyksIHsgbnVtYmVyOiAocGF5bG9hZC5pc3N1ZSB8fCBwYXlsb2FkLnB1bGxfcmVxdWVzdCB8fCBwYXlsb2FkKS5udW1iZXIgfSk7XG4gICAgfVxuICAgIGdldCByZXBvKCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtvd25lciwgcmVwb10gPSBwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgcmV0dXJuIHsgb3duZXIsIHJlcG8gfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3duZXI6IHRoaXMucGF5bG9hZC5yZXBvc2l0b3J5Lm93bmVyLmxvZ2luLFxuICAgICAgICAgICAgICAgIHJlcG86IHRoaXMucGF5bG9hZC5yZXBvc2l0b3J5Lm5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY29udGV4dC5yZXBvIHJlcXVpcmVzIGEgR0lUSFVCX1JFUE9TSVRPUlkgZW52aXJvbm1lbnQgdmFyaWFibGUgbGlrZSAnb3duZXIvcmVwbydcIik7XG4gICAgfVxufVxuZXhwb3J0cy5Db250ZXh0ID0gQ29udGV4dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRleHQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEFwaUJhc2VVcmwgPSBleHBvcnRzLmdldFByb3h5RmV0Y2ggPSBleHBvcnRzLmdldFByb3h5QWdlbnREaXNwYXRjaGVyID0gZXhwb3J0cy5nZXRQcm94eUFnZW50ID0gZXhwb3J0cy5nZXRBdXRoU3RyaW5nID0gdm9pZCAwO1xuY29uc3QgaHR0cENsaWVudCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIikpO1xuY29uc3QgdW5kaWNpXzEgPSByZXF1aXJlKFwidW5kaWNpXCIpO1xuZnVuY3Rpb24gZ2V0QXV0aFN0cmluZyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGlmICghdG9rZW4gJiYgIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB0b2tlbiBvciBvcHRzLmF1dGggaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4gJiYgb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyB0b2tlbiBhbmQgb3B0cy5hdXRoIG1heSBub3QgYm90aCBiZSBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBvcHRpb25zLmF1dGggPT09ICdzdHJpbmcnID8gb3B0aW9ucy5hdXRoIDogYHRva2VuICR7dG9rZW59YDtcbn1cbmV4cG9ydHMuZ2V0QXV0aFN0cmluZyA9IGdldEF1dGhTdHJpbmc7XG5mdW5jdGlvbiBnZXRQcm94eUFnZW50KGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaGMgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCk7XG4gICAgcmV0dXJuIGhjLmdldEFnZW50KGRlc3RpbmF0aW9uVXJsKTtcbn1cbmV4cG9ydHMuZ2V0UHJveHlBZ2VudCA9IGdldFByb3h5QWdlbnQ7XG5mdW5jdGlvbiBnZXRQcm94eUFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCkge1xuICAgIGNvbnN0IGhjID0gbmV3IGh0dHBDbGllbnQuSHR0cENsaWVudCgpO1xuICAgIHJldHVybiBoYy5nZXRBZ2VudERpc3BhdGNoZXIoZGVzdGluYXRpb25VcmwpO1xufVxuZXhwb3J0cy5nZXRQcm94eUFnZW50RGlzcGF0Y2hlciA9IGdldFByb3h5QWdlbnREaXNwYXRjaGVyO1xuZnVuY3Rpb24gZ2V0UHJveHlGZXRjaChkZXN0aW5hdGlvblVybCkge1xuICAgIGNvbnN0IGh0dHBEaXNwYXRjaGVyID0gZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIoZGVzdGluYXRpb25VcmwpO1xuICAgIGNvbnN0IHByb3h5RmV0Y2ggPSAodXJsLCBvcHRzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiAoMCwgdW5kaWNpXzEuZmV0Y2gpKHVybCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRzKSwgeyBkaXNwYXRjaGVyOiBodHRwRGlzcGF0Y2hlciB9KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb3h5RmV0Y2g7XG59XG5leHBvcnRzLmdldFByb3h5RmV0Y2ggPSBnZXRQcm94eUZldGNoO1xuZnVuY3Rpb24gZ2V0QXBpQmFzZVVybCgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9BUElfVVJMJ10gfHwgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nO1xufVxuZXhwb3J0cy5nZXRBcGlCYXNlVXJsID0gZ2V0QXBpQmFzZVVybDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGVuZHBvaW50OiAoKSA9PiBlbmRwb2ludFxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhkaXN0X3NyY19leHBvcnRzKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50ID0gcmVxdWlyZShcInVuaXZlcnNhbC11c2VyLWFnZW50XCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjkuMC41XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xudmFyIHVzZXJBZ2VudCA9IGBvY3Rva2l0LWVuZHBvaW50LmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gO1xudmFyIERFRkFVTFRTID0ge1xuICBtZXRob2Q6IFwiR0VUXCIsXG4gIGJhc2VVcmw6IFwiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVwiLFxuICBoZWFkZXJzOiB7XG4gICAgYWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvblwiLFxuICAgIFwidXNlci1hZ2VudFwiOiB1c2VyQWdlbnRcbiAgfSxcbiAgbWVkaWFUeXBlOiB7XG4gICAgZm9ybWF0OiBcIlwiXG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2xvd2VyY2FzZS1rZXlzLmpzXG5mdW5jdGlvbiBsb3dlcmNhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5yZWR1Y2UoKG5ld09iaiwga2V5KSA9PiB7XG4gICAgbmV3T2JqW2tleS50b0xvd2VyQ2FzZSgpXSA9IG9iamVjdFtrZXldO1xuICAgIHJldHVybiBuZXdPYmo7XG4gIH0sIHt9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvaXMtcGxhaW4tb2JqZWN0LmpzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIilcbiAgICByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKVxuICAgIHJldHVybiB0cnVlO1xuICBjb25zdCBDdG9yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJiBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbChDdG9yKSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwodmFsdWUpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9tZXJnZS1kZWVwLmpzXG5mdW5jdGlvbiBtZXJnZURlZXAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpO1xuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChvcHRpb25zW2tleV0pKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGVmYXVsdHMpKVxuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBba2V5XTogb3B0aW9uc1trZXldIH0pO1xuICAgICAgZWxzZVxuICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlRGVlcChkZWZhdWx0c1trZXldLCBvcHRpb25zW2tleV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBba2V5XTogb3B0aW9uc1trZXldIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL3JlbW92ZS11bmRlZmluZWQtcHJvcGVydGllcy5qc1xuZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvYmopIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKG9ialtrZXldID09PSB2b2lkIDApIHtcbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL21lcmdlLmpzXG5mdW5jdGlvbiBtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiByb3V0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGxldCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoXCIgXCIpO1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHVybCA/IHsgbWV0aG9kLCB1cmwgfSA6IHsgdXJsOiBtZXRob2QgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHJvdXRlKTtcbiAgfVxuICBvcHRpb25zLmhlYWRlcnMgPSBsb3dlcmNhc2VLZXlzKG9wdGlvbnMuaGVhZGVycyk7XG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucyk7XG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IG1lcmdlRGVlcChkZWZhdWx0cyB8fCB7fSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLnVybCA9PT0gXCIvZ3JhcGhxbFwiKSB7XG4gICAgaWYgKGRlZmF1bHRzICYmIGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cy5maWx0ZXIoXG4gICAgICAgIChwcmV2aWV3KSA9PiAhbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MuaW5jbHVkZXMocHJldmlldylcbiAgICAgICkuY29uY2F0KG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzKTtcbiAgICB9XG4gICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSAobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgfHwgW10pLm1hcCgocHJldmlldykgPT4gcHJldmlldy5yZXBsYWNlKC8tcHJldmlldy8sIFwiXCIpKTtcbiAgfVxuICByZXR1cm4gbWVyZ2VkT3B0aW9ucztcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvYWRkLXF1ZXJ5LXBhcmFtZXRlcnMuanNcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qgc2VwYXJhdG9yID0gL1xcPy8udGVzdCh1cmwpID8gXCImXCIgOiBcIj9cIjtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKTtcbiAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcmV0dXJuIHVybCArIHNlcGFyYXRvciArIG5hbWVzLm1hcCgobmFtZSkgPT4ge1xuICAgIGlmIChuYW1lID09PSBcInFcIikge1xuICAgICAgcmV0dXJuIFwicT1cIiArIHBhcmFtZXRlcnMucS5zcGxpdChcIitcIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbihcIitcIik7XG4gICAgfVxuICAgIHJldHVybiBgJHtuYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJzW25hbWVdKX1gO1xuICB9KS5qb2luKFwiJlwiKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvZXh0cmFjdC11cmwtdmFyaWFibGUtbmFtZXMuanNcbnZhciB1cmxWYXJpYWJsZVJlZ2V4ID0gL1xce1tefV0rXFx9L2c7XG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC9eXFxXK3xcXFcrJC9nLCBcIlwiKS5zcGxpdCgvLC8pO1xufVxuZnVuY3Rpb24gZXh0cmFjdFVybFZhcmlhYmxlTmFtZXModXJsKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSB1cmwubWF0Y2godXJsVmFyaWFibGVSZWdleCk7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcy5tYXAocmVtb3ZlTm9uQ2hhcnMpLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvb21pdC5qc1xuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXNUb09taXQpIHtcbiAgY29uc3QgcmVzdWx0ID0geyBfX3Byb3RvX186IG51bGwgfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xuICAgIGlmIChrZXlzVG9PbWl0LmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL3VybC10ZW1wbGF0ZS5qc1xuZnVuY3Rpb24gZW5jb2RlUmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoLyglWzAtOUEtRmEtZl17Mn0pL2cpLm1hcChmdW5jdGlvbihwYXJ0KSB7XG4gICAgaWYgKCEvJVswLTlBLUZhLWZdLy50ZXN0KHBhcnQpKSB7XG4gICAgICBwYXJ0ID0gZW5jb2RlVVJJKHBhcnQpLnJlcGxhY2UoLyU1Qi9nLCBcIltcIikucmVwbGFjZSgvJTVEL2csIFwiXVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnQ7XG4gIH0pLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBlbmNvZGVVbnJlc2VydmVkKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbihjKSB7XG4gICAgcmV0dXJuIFwiJVwiICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwga2V5KSB7XG4gIHZhbHVlID0gb3BlcmF0b3IgPT09IFwiK1wiIHx8IG9wZXJhdG9yID09PSBcIiNcIiA/IGVuY29kZVJlc2VydmVkKHZhbHVlKSA6IGVuY29kZVVucmVzZXJ2ZWQodmFsdWUpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBpc0RlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2b2lkIDAgJiYgdmFsdWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSB7XG4gIHJldHVybiBvcGVyYXRvciA9PT0gXCI7XCIgfHwgb3BlcmF0b3IgPT09IFwiJlwiIHx8IG9wZXJhdG9yID09PSBcIj9cIjtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwga2V5LCBtb2RpZmllcikge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0W2tleV0sIHJlc3VsdCA9IFtdO1xuICBpZiAoaXNEZWZpbmVkKHZhbHVlKSAmJiB2YWx1ZSAhPT0gXCJcIikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIGlmIChtb2RpZmllciAmJiBtb2RpZmllciAhPT0gXCIqXCIpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgcGFyc2VJbnQobW9kaWZpZXIsIDEwKSk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChcbiAgICAgICAgZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobW9kaWZpZXIgPT09IFwiKlwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24odmFsdWUyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlMiwgaXNLZXlPcGVyYXRvcihvcGVyYXRvcikgPyBrZXkgOiBcIlwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10sIGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG1wID0gW107XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24odmFsdWUyKSB7XG4gICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVW5yZXNlcnZlZChrKSk7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB0bXAuam9pbihcIixcIikpO1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh0bXAuam9pbihcIixcIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChvcGVyYXRvciA9PT0gXCI7XCIpIHtcbiAgICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcIiAmJiAob3BlcmF0b3IgPT09IFwiJlwiIHx8IG9wZXJhdG9yID09PSBcIj9cIikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiKSB7XG4gICAgICByZXN1bHQucHVzaChcIlwiKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHBhcnNlVXJsKHRlbXBsYXRlKSB7XG4gIHJldHVybiB7XG4gICAgZXhwYW5kOiBleHBhbmQuYmluZChudWxsLCB0ZW1wbGF0ZSlcbiAgfTtcbn1cbmZ1bmN0aW9uIGV4cGFuZCh0ZW1wbGF0ZSwgY29udGV4dCkge1xuICB2YXIgb3BlcmF0b3JzID0gW1wiK1wiLCBcIiNcIiwgXCIuXCIsIFwiL1wiLCBcIjtcIiwgXCI/XCIsIFwiJlwiXTtcbiAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKFxuICAgIC9cXHsoW15cXHtcXH1dKylcXH18KFteXFx7XFx9XSspL2csXG4gICAgZnVuY3Rpb24oXywgZXhwcmVzc2lvbiwgbGl0ZXJhbCkge1xuICAgICAgaWYgKGV4cHJlc3Npb24pIHtcbiAgICAgICAgbGV0IG9wZXJhdG9yID0gXCJcIjtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICAgIGlmIChvcGVyYXRvcnMuaW5kZXhPZihleHByZXNzaW9uLmNoYXJBdCgwKSkgIT09IC0xKSB7XG4gICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmNoYXJBdCgwKTtcbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwcmVzc2lvbi5zcGxpdCgvLC9nKS5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlhYmxlKSB7XG4gICAgICAgICAgdmFyIHRtcCA9IC8oW146XFwqXSopKD86OihcXGQrKXwoXFwqKSk/Ly5leGVjKHZhcmlhYmxlKTtcbiAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIHRtcFsxXSwgdG1wWzJdIHx8IHRtcFszXSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yICE9PSBcIitcIikge1xuICAgICAgICAgIHZhciBzZXBhcmF0b3IgPSBcIixcIjtcbiAgICAgICAgICBpZiAob3BlcmF0b3IgPT09IFwiP1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBcIiZcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSBcIiNcIikge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAodmFsdWVzLmxlbmd0aCAhPT0gMCA/IG9wZXJhdG9yIDogXCJcIikgKyB2YWx1ZXMuam9pbihzZXBhcmF0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB2YWx1ZXMuam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVSZXNlcnZlZChsaXRlcmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG4gIGlmICh0ZW1wbGF0ZSA9PT0gXCIvXCIpIHtcbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFyc2UuanNcbmZ1bmN0aW9uIHBhcnNlKG9wdGlvbnMpIHtcbiAgbGV0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gIGxldCB1cmwgPSAob3B0aW9ucy51cmwgfHwgXCIvXCIpLnJlcGxhY2UoLzooW2Etel1cXHcrKS9nLCBcInskMX1cIik7XG4gIGxldCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5oZWFkZXJzKTtcbiAgbGV0IGJvZHk7XG4gIGxldCBwYXJhbWV0ZXJzID0gb21pdChvcHRpb25zLCBbXG4gICAgXCJtZXRob2RcIixcbiAgICBcImJhc2VVcmxcIixcbiAgICBcInVybFwiLFxuICAgIFwiaGVhZGVyc1wiLFxuICAgIFwicmVxdWVzdFwiLFxuICAgIFwibWVkaWFUeXBlXCJcbiAgXSk7XG4gIGNvbnN0IHVybFZhcmlhYmxlTmFtZXMgPSBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpO1xuICB1cmwgPSBwYXJzZVVybCh1cmwpLmV4cGFuZChwYXJhbWV0ZXJzKTtcbiAgaWYgKCEvXmh0dHAvLnRlc3QodXJsKSkge1xuICAgIHVybCA9IG9wdGlvbnMuYmFzZVVybCArIHVybDtcbiAgfVxuICBjb25zdCBvbWl0dGVkUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpLmZpbHRlcigob3B0aW9uKSA9PiB1cmxWYXJpYWJsZU5hbWVzLmluY2x1ZGVzKG9wdGlvbikpLmNvbmNhdChcImJhc2VVcmxcIik7XG4gIGNvbnN0IHJlbWFpbmluZ1BhcmFtZXRlcnMgPSBvbWl0KHBhcmFtZXRlcnMsIG9taXR0ZWRQYXJhbWV0ZXJzKTtcbiAgY29uc3QgaXNCaW5hcnlSZXF1ZXN0ID0gL2FwcGxpY2F0aW9uXFwvb2N0ZXQtc3RyZWFtL2kudGVzdChoZWFkZXJzLmFjY2VwdCk7XG4gIGlmICghaXNCaW5hcnlSZXF1ZXN0KSB7XG4gICAgaWYgKG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCkge1xuICAgICAgaGVhZGVycy5hY2NlcHQgPSBoZWFkZXJzLmFjY2VwdC5zcGxpdCgvLC8pLm1hcChcbiAgICAgICAgKGZvcm1hdCkgPT4gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAgICAgL2FwcGxpY2F0aW9uXFwvdm5kKFxcLlxcdyspKFxcLnYzKT8oXFwuXFx3Kyk/KFxcK2pzb24pPyQvLFxuICAgICAgICAgIGBhcHBsaWNhdGlvbi92bmQkMSQyLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWBcbiAgICAgICAgKVxuICAgICAgKS5qb2luKFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKHVybC5lbmRzV2l0aChcIi9ncmFwaHFsXCIpKSB7XG4gICAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIgPSBoZWFkZXJzLmFjY2VwdC5tYXRjaCgvW1xcdy1dKyg/PS1wcmV2aWV3KS9nKSB8fCBbXTtcbiAgICAgICAgaGVhZGVycy5hY2NlcHQgPSBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIuY29uY2F0KG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzKS5tYXAoKHByZXZpZXcpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQgPyBgLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWAgOiBcIitqc29uXCI7XG4gICAgICAgICAgcmV0dXJuIGBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLiR7cHJldmlld30tcHJldmlldyR7Zm9ybWF0fWA7XG4gICAgICAgIH0pLmpvaW4oXCIsXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoW1wiR0VUXCIsIFwiSEVBRFwiXS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgdXJsID0gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcmVtYWluaW5nUGFyYW1ldGVycyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKFwiZGF0YVwiIGluIHJlbWFpbmluZ1BhcmFtZXRlcnMpIHtcbiAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZW1haW5pbmdQYXJhbWV0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnM7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSAmJiB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIjtcbiAgfVxuICBpZiAoW1wiUEFUQ0hcIiwgXCJQVVRcIl0uaW5jbHVkZXMobWV0aG9kKSAmJiB0eXBlb2YgYm9keSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGJvZHkgPSBcIlwiO1xuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgIHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSxcbiAgICB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIiA/IHsgYm9keSB9IDogbnVsbCxcbiAgICBvcHRpb25zLnJlcXVlc3QgPyB7IHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdCB9IDogbnVsbFxuICApO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvZW5kcG9pbnQtd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gZW5kcG9pbnRXaXRoRGVmYXVsdHMoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwYXJzZShtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgREVGQVVMVFMyID0gbWVyZ2Uob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgZW5kcG9pbnQyID0gZW5kcG9pbnRXaXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUzIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlbmRwb2ludDIsIHtcbiAgICBERUZBVUxUUzogREVGQVVMVFMyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIG1lcmdlOiBtZXJnZS5iaW5kKG51bGwsIERFRkFVTFRTMiksXG4gICAgcGFyc2VcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGVuZHBvaW50ID0gd2l0aERlZmF1bHRzKG51bGwsIERFRkFVTFRTKTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmRwb2ludFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvRVNNID0gKG1vZCwgaXNOb2RlTW9kZSwgdGFyZ2V0KSA9PiAodGFyZ2V0ID0gbW9kICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSkgOiB7fSwgX19jb3B5UHJvcHMoXG4gIC8vIElmIHRoZSBpbXBvcnRlciBpcyBpbiBub2RlIGNvbXBhdGliaWxpdHkgbW9kZSBvciB0aGlzIGlzIG5vdCBhbiBFU01cbiAgLy8gZmlsZSB0aGF0IGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhIENvbW1vbkpTIGZpbGUgdXNpbmcgYSBCYWJlbC1cbiAgLy8gY29tcGF0aWJsZSB0cmFuc2Zvcm0gKGkuZS4gXCJfX2VzTW9kdWxlXCIgaGFzIG5vdCBiZWVuIHNldCksIHRoZW4gc2V0XG4gIC8vIFwiZGVmYXVsdFwiIHRvIHRoZSBDb21tb25KUyBcIm1vZHVsZS5leHBvcnRzXCIgZm9yIG5vZGUgY29tcGF0aWJpbGl0eS5cbiAgaXNOb2RlTW9kZSB8fCAhbW9kIHx8ICFtb2QuX19lc01vZHVsZSA/IF9fZGVmUHJvcCh0YXJnZXQsIFwiZGVmYXVsdFwiLCB7IHZhbHVlOiBtb2QsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0YXJnZXQsXG4gIG1vZFxuKSk7XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBSZXF1ZXN0RXJyb3I6ICgpID0+IFJlcXVlc3RFcnJvclxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhkaXN0X3NyY19leHBvcnRzKTtcbnZhciBpbXBvcnRfZGVwcmVjYXRpb24gPSByZXF1aXJlKFwiZGVwcmVjYXRpb25cIik7XG52YXIgaW1wb3J0X29uY2UgPSBfX3RvRVNNKHJlcXVpcmUoXCJvbmNlXCIpKTtcbnZhciBsb2dPbmNlQ29kZSA9ICgwLCBpbXBvcnRfb25jZS5kZWZhdWx0KSgoZGVwcmVjYXRpb24pID0+IGNvbnNvbGUud2FybihkZXByZWNhdGlvbikpO1xudmFyIGxvZ09uY2VIZWFkZXJzID0gKDAsIGltcG9ydF9vbmNlLmRlZmF1bHQpKChkZXByZWNhdGlvbikgPT4gY29uc29sZS53YXJuKGRlcHJlY2F0aW9uKSk7XG52YXIgUmVxdWVzdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZTtcbiAgICBsZXQgaGVhZGVycztcbiAgICBpZiAoXCJoZWFkZXJzXCIgaW4gb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5oZWFkZXJzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICAgIH1cbiAgICBpZiAoXCJyZXNwb25zZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgaGVhZGVycyA9IG9wdGlvbnMucmVzcG9uc2UuaGVhZGVycztcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8gLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2RlXCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbG9nT25jZUNvZGUoXG4gICAgICAgICAgbmV3IGltcG9ydF9kZXByZWNhdGlvbi5EZXByZWNhdGlvbihcbiAgICAgICAgICAgIFwiW0BvY3Rva2l0L3JlcXVlc3QtZXJyb3JdIGBlcnJvci5jb2RlYCBpcyBkZXByZWNhdGVkLCB1c2UgYGVycm9yLnN0YXR1c2AuXCJcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBzdGF0dXNDb2RlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhlYWRlcnNcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsb2dPbmNlSGVhZGVycyhcbiAgICAgICAgICBuZXcgaW1wb3J0X2RlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFxuICAgICAgICAgICAgXCJbQG9jdG9raXQvcmVxdWVzdC1lcnJvcl0gYGVycm9yLmhlYWRlcnNgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgZXJyb3IucmVzcG9uc2UuaGVhZGVyc2AuXCJcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzIHx8IHt9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIFJlcXVlc3RFcnJvclxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICByZXF1ZXN0OiAoKSA9PiByZXF1ZXN0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9lbmRwb2ludCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9lbmRwb2ludFwiKTtcbnZhciBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQgPSByZXF1aXJlKFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOC40LjBcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbnZhciBpbXBvcnRfcmVxdWVzdF9lcnJvciA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2V0LWJ1ZmZlci1yZXNwb25zZS5qc1xuZnVuY3Rpb24gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9mZXRjaC13cmFwcGVyLmpzXG5mdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0ICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nID8gcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgOiBjb25zb2xlO1xuICBjb25zdCBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPSAoKF9hID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSkgIT09IGZhbHNlO1xuICBpZiAoaXNQbGFpbk9iamVjdChyZXF1ZXN0T3B0aW9ucy5ib2R5KSB8fCBBcnJheS5pc0FycmF5KHJlcXVlc3RPcHRpb25zLmJvZHkpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpO1xuICB9XG4gIGxldCBoZWFkZXJzID0ge307XG4gIGxldCBzdGF0dXM7XG4gIGxldCB1cmw7XG4gIGxldCB7IGZldGNoIH0gPSBnbG9iYWxUaGlzO1xuICBpZiAoKF9iID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmZldGNoKSB7XG4gICAgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmZldGNoO1xuICB9XG4gIGlmICghZmV0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImZldGNoIGlzIG5vdCBzZXQuIFBsZWFzZSBwYXNzIGEgZmV0Y2ggaW1wbGVtZW50YXRpb24gYXMgbmV3IE9jdG9raXQoeyByZXF1ZXN0OiB7IGZldGNoIH19KS4gTGVhcm4gbW9yZSBhdCBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9vY3Rva2l0LmpzLyNmZXRjaC1taXNzaW5nXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIHtcbiAgICBtZXRob2Q6IHJlcXVlc3RPcHRpb25zLm1ldGhvZCxcbiAgICBib2R5OiByZXF1ZXN0T3B0aW9ucy5ib2R5LFxuICAgIHJlZGlyZWN0OiAoX2MgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2MucmVkaXJlY3QsXG4gICAgaGVhZGVyczogcmVxdWVzdE9wdGlvbnMuaGVhZGVycyxcbiAgICBzaWduYWw6IChfZCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QpID09IG51bGwgPyB2b2lkIDAgOiBfZC5zaWduYWwsXG4gICAgLy8gZHVwbGV4IG11c3QgYmUgc2V0IGlmIHJlcXVlc3QuYm9keSBpcyBSZWFkYWJsZVN0cmVhbSBvciBBc3luYyBJdGVyYWJsZXMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICB1cmwgPSByZXNwb25zZS51cmw7XG4gICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGZvciAoY29uc3Qga2V5QW5kVmFsdWUgb2YgcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXlBbmRWYWx1ZVswXV0gPSBrZXlBbmRWYWx1ZVsxXTtcbiAgICB9XG4gICAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gaGVhZGVycy5saW5rICYmIGhlYWRlcnMubGluay5tYXRjaCgvPChbXj5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke2hlYWRlcnMuc3Vuc2V0fSR7ZGVwcmVjYXRpb25MaW5rID8gYC4gU2VlICR7ZGVwcmVjYXRpb25MaW5rfWAgOiBcIlwifWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDIwNCB8fCBzdGF0dXMgPT09IDIwNSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgaW1wb3J0X3JlcXVlc3RfZXJyb3IuUmVxdWVzdEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiB2b2lkIDBcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIHRocm93IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSlcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2UoZGF0YSksIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSA6IHJlc3BvbnNlLmJvZHk7XG4gIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGRhdGFcbiAgICB9O1xuICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IpXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIilcbiAgICAgIHRocm93IGVycm9yO1xuICAgIGxldCBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBlcnJvci5jYXVzZS5tZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgaW1wb3J0X3JlcXVlc3RfZXJyb3IuUmVxdWVzdEVycm9yKG1lc3NhZ2UsIDUwMCwge1xuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKC9hcHBsaWNhdGlvblxcL2pzb24vLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiByZXNwb25zZS50ZXh0KCkpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGlmICghY29udGVudFR5cGUgfHwgL150ZXh0XFwvfGNoYXJzZXQ9dXRmLTgkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gIH1cbiAgcmV0dXJuIGdldEJ1ZmZlclJlc3BvbnNlKHJlc3BvbnNlKTtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiBkYXRhO1xuICBsZXQgc3VmZml4O1xuICBpZiAoXCJkb2N1bWVudGF0aW9uX3VybFwiIGluIGRhdGEpIHtcbiAgICBzdWZmaXggPSBgIC0gJHtkYXRhLmRvY3VtZW50YXRpb25fdXJsfWA7XG4gIH0gZWxzZSB7XG4gICAgc3VmZml4ID0gXCJcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKFwiLCBcIil9JHtzdWZmaXh9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX0ke3N1ZmZpeH1gO1xuICB9XG4gIHJldHVybiBgVW5rbm93biBlcnJvcjogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZEVuZHBvaW50LCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBlbmRwb2ludDIgPSBvbGRFbmRwb2ludC5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IGZ1bmN0aW9uKHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRPcHRpb25zID0gZW5kcG9pbnQyLm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgICBpZiAoIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0IHx8ICFlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKSB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50Mi5wYXJzZShlbmRwb2ludE9wdGlvbnMpKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdDIgPSAocm91dGUyLCBwYXJhbWV0ZXJzMikgPT4ge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihcbiAgICAgICAgZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50Mi5tZXJnZShyb3V0ZTIsIHBhcmFtZXRlcnMyKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QyLCB7XG4gICAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50MilcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vayhyZXF1ZXN0MiwgZW5kcG9pbnRPcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZW5kcG9pbnQ6IGVuZHBvaW50MixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgcmVxdWVzdCA9IHdpdGhEZWZhdWx0cyhpbXBvcnRfZW5kcG9pbnQuZW5kcG9pbnQsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1yZXF1ZXN0LmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gXG4gIH1cbn0pO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlcXVlc3Rcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3I6ICgpID0+IEdyYXBocWxSZXNwb25zZUVycm9yLFxuICBncmFwaHFsOiAoKSA9PiBncmFwaHFsMixcbiAgd2l0aEN1c3RvbVJlcXVlc3Q6ICgpID0+IHdpdGhDdXN0b21SZXF1ZXN0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9yZXF1ZXN0MyA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI3LjEuMFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xudmFyIGltcG9ydF9yZXF1ZXN0MiA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIGltcG9ydF9yZXF1ZXN0ID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3RcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy9lcnJvci5qc1xuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcbmAgKyBkYXRhLmVycm9ycy5tYXAoKGUpID0+IGAgLSAke2UubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xufVxudmFyIEdyYXBocWxSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QyLCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QyO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMubmFtZSA9IFwiR3JhcGhxbFJlc3BvbnNlRXJyb3JcIjtcbiAgICB0aGlzLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIE5PTl9WQVJJQUJMRV9PUFRJT05TID0gW1xuICBcIm1ldGhvZFwiLFxuICBcImJhc2VVcmxcIixcbiAgXCJ1cmxcIixcbiAgXCJoZWFkZXJzXCIsXG4gIFwicmVxdWVzdFwiLFxuICBcInF1ZXJ5XCIsXG4gIFwibWVkaWFUeXBlXCJcbl07XG52YXIgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbnZhciBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdDIsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBcInF1ZXJ5XCIgaW4gb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgPyBPYmplY3QuYXNzaWduKHsgcXVlcnkgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhcbiAgICBwYXJzZWRPcHRpb25zXG4gICkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICghcmVzdWx0LnZhcmlhYmxlcykge1xuICAgICAgcmVzdWx0LnZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QyLmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmw7XG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdDIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzW2tleV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IoXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZS5kYXRhXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhyZXF1ZXN0MiwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QyLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgbmV3UmVxdWVzdCksXG4gICAgZW5kcG9pbnQ6IG5ld1JlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGdyYXBocWwyID0gd2l0aERlZmF1bHRzKGltcG9ydF9yZXF1ZXN0My5yZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7KDAsIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudC5nZXRVc2VyQWdlbnQpKCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3IsXG4gIGdyYXBocWwsXG4gIHdpdGhDdXN0b21SZXF1ZXN0XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGNyZWF0ZVRva2VuQXV0aDogKCkgPT4gY3JlYXRlVG9rZW5BdXRoXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvYXV0aC5qc1xudmFyIFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kgPSAvXnYxXFwuLztcbnZhciBSRUdFWF9JU19JTlNUQUxMQVRJT04gPSAvXmdoc18vO1xudmFyIFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSID0gL15naHVfLztcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSB0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzO1xuICBjb25zdCBpc0luc3RhbGxhdGlvbiA9IFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kudGVzdCh0b2tlbikgfHwgUkVHRVhfSVNfSU5TVEFMTEFUSU9OLnRlc3QodG9rZW4pO1xuICBjb25zdCBpc1VzZXJUb1NlcnZlciA9IFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSLnRlc3QodG9rZW4pO1xuICBjb25zdCB0b2tlblR5cGUgPSBpc0FwcCA/IFwiYXBwXCIgOiBpc0luc3RhbGxhdGlvbiA/IFwiaW5zdGFsbGF0aW9uXCIgOiBpc1VzZXJUb1NlcnZlciA/IFwidXNlci10by1zZXJ2ZXJcIiA6IFwib2F1dGhcIjtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInRva2VuXCIsXG4gICAgdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWF1dGhvcml6YXRpb24tcHJlZml4LmpzXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2hvb2suanNcbmFzeW5jIGZ1bmN0aW9uIGhvb2sodG9rZW4sIHJlcXVlc3QsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IGVuZHBvaW50ID0gcmVxdWVzdC5lbmRwb2ludC5tZXJnZShcbiAgICByb3V0ZSxcbiAgICBwYXJhbWV0ZXJzXG4gICk7XG4gIGVuZHBvaW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKTtcbiAgcmV0dXJuIHJlcXVlc3QoZW5kcG9pbnQpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBjcmVhdGVUb2tlbkF1dGggPSBmdW5jdGlvbiBjcmVhdGVUb2tlbkF1dGgyKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIlxuICAgICk7XG4gIH1cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZVRva2VuQXV0aFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBPY3Rva2l0OiAoKSA9PiBPY3Rva2l0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcbnZhciBpbXBvcnRfYmVmb3JlX2FmdGVyX2hvb2sgPSByZXF1aXJlKFwiYmVmb3JlLWFmdGVyLWhvb2tcIik7XG52YXIgaW1wb3J0X3JlcXVlc3QgPSByZXF1aXJlKFwiQG9jdG9raXQvcmVxdWVzdFwiKTtcbnZhciBpbXBvcnRfZ3JhcGhxbCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9ncmFwaHFsXCIpO1xudmFyIGltcG9ydF9hdXRoX3Rva2VuID0gcmVxdWlyZShcIkBvY3Rva2l0L2F1dGgtdG9rZW5cIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiNS4yLjBcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgbm9vcCA9ICgpID0+IHtcbn07XG52YXIgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbnZhciBjb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG52YXIgdXNlckFnZW50VHJhaWwgPSBgb2N0b2tpdC1jb3JlLmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gO1xudmFyIE9jdG9raXQgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5WRVJTSU9OID0gVkVSU0lPTjtcbiAgfVxuICBzdGF0aWMgZGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBjb25zdCBPY3Rva2l0V2l0aERlZmF1bHRzID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3NbMF0gfHwge307XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5wbHVnaW5zID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuICBzdGF0aWMgcGx1Z2luKC4uLm5ld1BsdWdpbnMpIHtcbiAgICBjb25zdCBjdXJyZW50UGx1Z2lucyA9IHRoaXMucGx1Z2lucztcbiAgICBjb25zdCBOZXdPY3Rva2l0ID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIHN0YXRpYyB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChcbiAgICAgICAgICBuZXdQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiAhY3VycmVudFBsdWdpbnMuaW5jbHVkZXMocGx1Z2luKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGhvb2sgPSBuZXcgaW1wb3J0X2JlZm9yZV9hZnRlcl9ob29rLkNvbGxlY3Rpb24oKTtcbiAgICBjb25zdCByZXF1ZXN0RGVmYXVsdHMgPSB7XG4gICAgICBiYXNlVXJsOiBpbXBvcnRfcmVxdWVzdC5yZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdID0gb3B0aW9ucy51c2VyQWdlbnQgPyBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHt1c2VyQWdlbnRUcmFpbH1gIDogdXNlckFnZW50VHJhaWw7XG4gICAgaWYgKG9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0ID0gaW1wb3J0X3JlcXVlc3QucmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9ICgwLCBpbXBvcnRfZ3JhcGhxbC53aXRoQ3VzdG9tUmVxdWVzdCkodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgZGVidWc6IG5vb3AsXG4gICAgICAgIGluZm86IG5vb3AsXG4gICAgICAgIHdhcm46IGNvbnNvbGVXYXJuLFxuICAgICAgICBlcnJvcjogY29uc29sZUVycm9yXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5sb2dcbiAgICApO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFvcHRpb25zLmF1dGhTdHJhdGVneSkge1xuICAgICAgaWYgKCFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXV0aCA9ICgwLCBpbXBvcnRfYXV0aF90b2tlbi5jcmVhdGVUb2tlbkF1dGgpKG9wdGlvbnMuYXV0aCk7XG4gICAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBhdXRoU3RyYXRlZ3ksIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGF1dGggPSBhdXRoU3RyYXRlZ3koXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgICAgICAvLyB0aGF0IHNoYXJlcyB0aGUgc2FtZSBpbnRlcm5hbCBzdGF0ZSBhcyB0aGUgY3VycmVudCBvbmUuIFRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICAgICAgb2N0b2tpdDogdGhpcyxcbiAgICAgICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnMuYXV0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zW2ldKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbn07XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgT2N0b2tpdFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzOiAoKSA9PiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLFxuICByZXN0RW5kcG9pbnRNZXRob2RzOiAoKSA9PiByZXN0RW5kcG9pbnRNZXRob2RzXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjEwLjQuMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2VuZXJhdGVkL2VuZHBvaW50cy5qc1xudmFyIEVuZHBvaW50cyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiXG4gICAgXSxcbiAgICBjYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vY2FuY2VsXCJcbiAgICBdLFxuICAgIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yZ1ZhcmlhYmxlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXG4gICAgXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9WYXJpYWJsZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlV29ya2Zsb3dEaXNwYXRjaDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc3BhdGNoZXNcIlxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzL3tjYWNoZV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIlxuICAgIF0sXG4gICAgZGVsZXRlQXJ0aWZhY3Q6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIlxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcnRpZmFjdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH0ve2FyY2hpdmVfZm9ybWF0fVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIlxuICAgIF0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiXG4gICAgXSxcbiAgICBmb3JjZUNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9mb3JjZS1jYW5jZWxcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZUxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUJ5UmVwb0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRBcnRpZmFjdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJdLFxuICAgIGdldEN1c3RvbU9pZGNTdWJDbGFpbUZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnVmFyaWFibGU6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1Blcm1pc3Npb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImFjdGlvbnNcIiwgXCJnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5XCJdIH1cbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCJcbiAgICBdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3c6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1VzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS90aW1pbmdcIlxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCJcbiAgICBdLFxuICAgIGxpc3RFbnZpcm9ubWVudFZhcmlhYmxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIlxuICAgIF0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCJcbiAgICBdLFxuICAgIGxpc3RKb2JzRm9yV29ya2Zsb3dSdW5BdHRlbXB0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCJdLFxuICAgIGxpc3RPcmdWYXJpYWJsZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb09yZ2FuaXphdGlvblNlY3JldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvT3JnYW5pemF0aW9uVmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCJcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bkFydGlmYWN0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIlxuICAgIF0sXG4gICAgbGlzdFdvcmtmbG93UnVuczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIlxuICAgIF0sXG4gICAgcmVSdW5Xb3JrZmxvdzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuXCJdLFxuICAgIHJlUnVuV29ya2Zsb3dGYWlsZWRKb2JzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1bi1mYWlsZWQtam9ic1wiXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJldmlld0N1c3RvbUdhdGVzRm9yUnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZVwiXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIlxuICAgIF0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIlxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgc2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiXG4gICAgXSxcbiAgICB1cGRhdGVFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdXG4gIH0sXG4gIGFjdGl2aXR5OiB7XG4gICAgY2hlY2tSZXBvSXNTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlUmVwb1N1YnNjcmlwdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZGVsZXRlVGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBsaXN0RXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIl0sXG4gICAgbGlzdE5vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RPcmdFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgbGlzdFB1YmxpY0V2ZW50czogW1wiR0VUIC9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclJlcG9OZXR3b3JrOiBbXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFB1YmxpY09yZ0V2ZW50czogW1wiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zV2F0Y2hlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFN0YXJnYXplcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIl0sXG4gICAgbGlzdFdhdGNoZWRSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0V2F0Y2hlcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCJdLFxuICAgIG1hcmtOb3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1JlcG9Ob3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1RocmVhZEFzRG9uZTogW1wiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgbWFya1RocmVhZEFzUmVhZDogW1wiUEFUQ0ggL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBzZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBzZXRUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIHN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVuc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl1cbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgY2hlY2tUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGNyZWF0ZUZyb21NYW5pZmVzdDogW1wiUE9TVCAvYXBwLW1hbmlmZXN0cy97Y29kZX0vY29udmVyc2lvbnNcIl0sXG4gICAgY3JlYXRlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcbiAgICAgIFwiUE9TVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vYWNjZXNzX3Rva2Vuc1wiXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCJcbiAgICBdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50U3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0VXNlckluc3RhbGxhdGlvbjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJHRVQgL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW46IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhblN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVxdWVzdHNGb3JBdXRoZW50aWNhdGVkQXBwOiBbXG4gICAgICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uczogW1wiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0UGxhbnM6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFuc1wiXSxcbiAgICBsaXN0UGxhbnNTdHViYmVkOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFuc1wiXSxcbiAgICBsaXN0UmVwb3NBY2Nlc3NpYmxlVG9JbnN0YWxsYXRpb246IFtcIkdFVCAvaW5zdGFsbGF0aW9uL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXJTdHViYmVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIlxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiUEFUQ0ggL2FwcC9ob29rL2NvbmZpZ1wiXVxuICB9LFxuICBiaWxsaW5nOiB7XG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiXG4gICAgXVxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCJdLFxuICAgIGxpc3RGb3JTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIlxuICAgIF0sXG4gICAgbGlzdFN1aXRlc0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiXSxcbiAgICByZXJlcXVlc3RSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9yZXJlcXVlc3RcIlxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCJcbiAgICBdLFxuICAgIHNldFN1aXRlc1ByZWZlcmVuY2VzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIlxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXVxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBkZWxldGVBbmFseXNpczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCJcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkUGFyYW1ldGVyczogeyBhbGVydF9pZDogXCJhbGVydF9udW1iZXJcIiB9IH1cbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCJcbiAgICBdLFxuICAgIGdldENvZGVxbERhdGFiYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzL3tsYW5ndWFnZX1cIlxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0luc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImNvZGVTY2FubmluZ1wiLCBcImxpc3RBbGVydEluc3RhbmNlc1wiXSB9XG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCJcbiAgICBdLFxuICAgIGxpc3RSZWNlbnRBbmFseXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICB1cGRhdGVEZWZhdWx0U2V0dXA6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl1cbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl1cbiAgfSxcbiAgY29kZXNwYWNlczoge1xuICAgIGFkZFJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yRGV2Y29udGFpbmVyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9wZXJtaXNzaW9uc19jaGVja1wiXG4gICAgXSxcbiAgICBjb2Rlc3BhY2VNYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vbWFjaGluZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBkZWxldGVGcm9tT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZXhwb3J0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0c1wiXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCJcbiAgICBdLFxuICAgIGdldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFB1YmxpY0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldFNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCJcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgb3JnX2lkOiBcIm9yZ1wiIH0gfVxuICAgIF0sXG4gICAgbGlzdEluUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWNyZXRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBwcmVGbGlnaHRXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9uZXdcIlxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCJcbiAgICBdLFxuICAgIHNldFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIlxuICAgIF0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXVxuICB9LFxuICBjb3BpbG90OiB7XG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVGVhbXM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIlxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIlxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVGVhbXM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiXG4gICAgXSxcbiAgICBjYW5jZWxDb3BpbG90U2VhdEFzc2lnbm1lbnRGb3JVc2VyczogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3VzZXJzXCJcbiAgICBdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCJcbiAgICBdLFxuICAgIGxpc3RDb3BpbG90U2VhdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIl1cbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIlxuICAgIF0sXG4gICAgZGlmZlJhbmdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9jb21wYXJlL3tiYXNlaGVhZH1cIlxuICAgIF0sXG4gICAgZXhwb3J0U2JvbTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3Nib21cIl1cbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl1cbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF1cbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIlxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzL3thc3NpZ25lZX1cIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZFRvSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzL3thc3NpZ25lZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlTGFiZWw6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBkZWxldGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIlxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdExhYmVsc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCJdLFxuICAgIGxpc3RMYWJlbHNPbklzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxvY2s6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgcmVtb3ZlQWxsTGFiZWxzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZUxhYmVsOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXVxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfVxuICAgIF1cbiAgfSxcbiAgbWV0YToge1xuICAgIGdldDogW1wiR0VUIC9tZXRhXCJdLFxuICAgIGdldEFsbFZlcnNpb25zOiBbXCJHRVQgL3ZlcnNpb25zXCJdLFxuICAgIGdldE9jdG9jYXQ6IFtcIkdFVCAvb2N0b2NhdFwiXSxcbiAgICBnZXRaZW46IFtcIkdFVCAvemVuXCJdLFxuICAgIHJvb3Q6IFtcIkdFVCAvXCJdXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBjYW5jZWxJbXBvcnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmNhbmNlbEltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjY2FuY2VsLWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0Q29tbWl0QXV0aG9yczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5nZXRDb21taXRBdXRob3JzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyNnZXQtY29tbWl0LWF1dGhvcnNcIlxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0SW1wb3J0U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5nZXRJbXBvcnRTdGF0dXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1hbi1pbXBvcnQtc3RhdHVzXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGdldExhcmdlRmlsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvbGFyZ2VfZmlsZXNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmdldExhcmdlRmlsZXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1sYXJnZS1maWxlc1wiXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcIm1pZ3JhdGlvbnNcIiwgXCJsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBtYXBDb21taXRBdXRob3I6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzL3thdXRob3JfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5tYXBDb21taXRBdXRob3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI21hcC1hLWNvbW1pdC1hdXRob3JcIlxuICAgICAgfVxuICAgIF0sXG4gICAgc2V0TGZzUHJlZmVyZW5jZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2xmc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuc2V0TGZzUHJlZmVyZW5jZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjdXBkYXRlLWdpdC1sZnMtcHJlZmVyZW5jZVwiXG4gICAgICB9XG4gICAgXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEltcG9ydDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuc3RhcnRJbXBvcnQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI3N0YXJ0LWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiXG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIlxuICAgIF0sXG4gICAgdXBkYXRlSW1wb3J0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLnVwZGF0ZUltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjdXBkYXRlLWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBvaWRjOiB7XG4gICAgZ2V0T2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF0sXG4gICAgdXBkYXRlT2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF1cbiAgfSxcbiAgb3Jnczoge1xuICAgIGFkZFNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCJcbiAgICBdLFxuICAgIGFzc2lnblRlYW1Ub09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgYXNzaWduVXNlclRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIGJsb2NrVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNhbmNlbEludml0YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgY2hlY2tCbG9ja2VkVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tQdWJsaWNNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY29udmVydE1lbWJlclRvT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlQ3VzdG9tT3JnYW5pemF0aW9uUm9sZTogW1wiUE9TVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgY3JlYXRlSW52aXRhdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXM6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfVwiXSxcbiAgICBkZWxldGVDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZW5hYmxlT3JEaXNhYmxlU2VjdXJpdHlQcm9kdWN0T25BbGxPcmdSZXBvczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3tzZWN1cml0eV9wcm9kdWN0fS97ZW5hYmxlbWVudH1cIlxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0QWxsQ3VzdG9tUHJvcGVydGllczogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGdldEN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCJcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldFdlYmhvb2s6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEJsb2NrZWRVc2VyczogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiXSxcbiAgICBsaXN0Q3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgbGlzdEZhaWxlZEludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL29yZ3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgbGlzdE91dHNpZGVDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCJdLFxuICAgIGxpc3RQYXRHcmFudFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzXCJdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCJdLFxuICAgIGxpc3RXZWJob29rczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIHBhdGNoQ3VzdG9tT3JnYW5pemF0aW9uUm9sZTogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHBpbmdXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCJcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9XCJcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdHNJbkJ1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIlxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHNldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZU1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCJcbiAgICBdLFxuICAgIHVwZGF0ZVBhdEFjY2VzczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9XCJdLFxuICAgIHVwZGF0ZVBhdEFjY2Vzc2VzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JPcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl1cbiAgfSxcbiAgcGFja2FnZXM6IHtcbiAgICBkZWxldGVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlBbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnXCJdIH1cbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeVRoZUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHJlbmFtZWQ6IFtcbiAgICAgICAgICBcInBhY2thZ2VzXCIsXG4gICAgICAgICAgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCJcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2RvY2tlci9jb25mbGljdHNcIlxuICAgIF0sXG4gICAgbGlzdFBhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF1cbiAgfSxcbiAgcHJvamVjdHM6IHtcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVDYXJkOiBbXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCJdLFxuICAgIGNyZWF0ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGNyZWF0ZUZvclJlcG86IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZGVsZXRlQ2FyZDogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBkZWxldGVDb2x1bW46IFtcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGdldENhcmQ6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgZ2V0Q29sdW1uOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl0sXG4gICAgZ2V0UGVybWlzc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9L3Blcm1pc3Npb25cIlxuICAgIF0sXG4gICAgbGlzdENhcmRzOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbHVtbnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIl0sXG4gICAgbW92ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9L21vdmVzXCJdLFxuICAgIG1vdmVDb2x1bW46IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vbW92ZXNcIl0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgdXBkYXRlQ2FyZDogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbHVtbjogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl1cbiAgfSxcbiAgcHVsbHM6IHtcbiAgICBjaGVja0lmTWVyZ2VkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBjcmVhdGVSZXBseUZvclJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVwbGllc1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXZpZXc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBjcmVhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJcbiAgICBdLFxuICAgIGRpc21pc3NSZXZpZXc6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZGlzbWlzc2Fsc1wiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIlxuICAgIF0sXG4gICAgZ2V0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21taXRzXCJdLFxuICAgIGxpc3RGaWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2ZpbGVzXCJdLFxuICAgIGxpc3RSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIlxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RSZXZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBtZXJnZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIHJlbW92ZVJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICByZXF1ZXN0UmV2aWV3ZXJzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUJyYW5jaDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vdXBkYXRlLWJyYW5jaFwiXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXc6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJcbiAgICBdXG4gIH0sXG4gIHJhdGVMaW1pdDogeyBnZXQ6IFtcIkdFVCAvcmF0ZV9saW1pdFwiXSB9LFxuICByZWFjdGlvbnM6IHtcbiAgICBjcmVhdGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGxpc3RGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9ySXNzdWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclJlbGVhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIlxuICAgIF1cbiAgfSxcbiAgcmVwb3M6IHtcbiAgICBhY2NlcHRJbnZpdGF0aW9uOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGFkZEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9XG4gICAgXSxcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGFkZFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfVxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIGFkZFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICBjYW5jZWxQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHMve3BhZ2VzX2RlcGxveW1lbnRfaWR9L2NhbmNlbFwiXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIlxuICAgIF0sXG4gICAgY2hlY2tDb2xsYWJvcmF0b3I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIlxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFN0YXR1czogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHVzZXMve3NoYX1cIl0sXG4gICAgY3JlYXRlRGVwbG95S2V5OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGlzcGF0Y2hFdmVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGlzcGF0Y2hlc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9yZXBvc1wiXSxcbiAgICBjcmVhdGVGb3JrOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBjcmVhdGVJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRmlsZUNvbnRlbnRzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBjcmVhdGVPcmdSdWxlc2V0OiBbXCJQT1NUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlUGFnZXNTaXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBjcmVhdGVSZWxlYXNlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBjcmVhdGVSZXBvUnVsZXNldDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlVGFnUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIlxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFuRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCJcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgZGVsZXRlRGVwbG95S2V5OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlRGVwbG95bWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdSdWxlc2V0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVBhZ2VzU2l0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBkZWxldGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVUYWdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uL3t0YWdfcHJvdGVjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIlxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCJcbiAgICBdLFxuICAgIGRpc2FibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIlxuICAgIF0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS96aXBiYWxsL3tyZWZ9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkb3dubG9hZFppcGJhbGxBcmNoaXZlXCJdIH1cbiAgICBdLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBlbmFibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIlxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGdlbmVyYXRlUmVsZWFzZU5vdGVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2dlbmVyYXRlLW5vdGVzXCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBnZXRBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIGdldEFsbERlcGxveW1lbnRQcm90ZWN0aW9uUnVsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiXG4gICAgXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIlxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiXG4gICAgXSxcbiAgICBnZXRBdXRvbGluazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3Mve2F1dG9saW5rX2lkfVwiXSxcbiAgICBnZXRCcmFuY2g6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0QnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgZ2V0QnJhbmNoUnVsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJcbiAgICBdLFxuICAgIGdldENvbW11bml0eVByb2ZpbGVNZXRyaWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW11bml0eS9wcm9maWxlXCJdLFxuICAgIGdldENvbnRlbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGdldENvbnRyaWJ1dG9yc1N0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBnZXRDdXN0b21EZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy97cHJvdGVjdGlvbl9ydWxlX2lkfVwiXG4gICAgXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICBnZXREZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzL3tzdGF0dXNfaWR9XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFnZXNIZWFsdGhDaGVjazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9oZWFsdGhcIl0sXG4gICAgZ2V0UGFydGljaXBhdGlvblN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3BhcnRpY2lwYXRpb25cIl0sXG4gICAgZ2V0UHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXG4gICAgXSxcbiAgICBnZXRQdW5jaENhcmRTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wdW5jaF9jYXJkXCJdLFxuICAgIGdldFJlYWRtZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWVcIl0sXG4gICAgZ2V0UmVhZG1lSW5EaXJlY3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lL3tkaXJ9XCJdLFxuICAgIGdldFJlbGVhc2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VBc3NldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQnlUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvdGFncy97dGFnfVwiXSxcbiAgICBnZXRSZXBvUnVsZVN1aXRlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICBnZXRUZWFtc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCJcbiAgICBdLFxuICAgIGdldFRvcFBhdGhzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvcG9wdWxhci9wYXRoc1wiXSxcbiAgICBnZXRUb3BSZWZlcnJlcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3JlZmVycmVyc1wiXSxcbiAgICBnZXRVc2Vyc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCJcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJcbiAgICBdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEFjdGl2aXRpZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIl0sXG4gICAgbGlzdEF1dG9saW5rczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3NcIl0sXG4gICAgbGlzdEJyYW5jaGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCJdLFxuICAgIGxpc3RCcmFuY2hlc0ZvckhlYWRDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9icmFuY2hlcy13aGVyZS1oZWFkXCJcbiAgICBdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCJcbiAgICBdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIl0sXG4gICAgbGlzdENvbnRyaWJ1dG9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIl0sXG4gICAgbGlzdEN1c3RvbURlcGxveW1lbnRSdWxlSW50ZWdyYXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiXG4gICAgXSxcbiAgICBsaXN0RGVwbG95S2V5czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGxpc3REZXBsb3ltZW50QnJhbmNoUG9saWNpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCJcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEludml0YXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RMYW5ndWFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFuZ3VhZ2VzXCJdLFxuICAgIGxpc3RQYWdlc0J1aWxkczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFB1bGxSZXF1ZXN0c0Fzc29jaWF0ZWRXaXRoQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIlxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VBc3NldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCJcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgbGlzdFRhZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFnc1wiXSxcbiAgICBsaXN0VGVhbXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGVhbXNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIlxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiXG4gICAgXSxcbiAgICByZW1vdmVBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9XG4gICAgXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICByZW1vdmVUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9XG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICByZW5hbWVCcmFuY2g6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3JlbmFtZVwiXSxcbiAgICByZXBsYWNlQWxsVG9waWNzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICByZXF1ZXN0UGFnZXNCdWlsZDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIHNldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIHNldEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9XG4gICAgXSxcbiAgICBzZXRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9XG4gICAgXSxcbiAgICBzZXRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgdXBkYXRlQ29tbWl0Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlSW5mb3JtYXRpb25BYm91dFBhZ2VzU2l0ZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICB1cGRhdGVJbnZpdGF0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIlxuICAgIF0sXG4gICAgdXBkYXRlUmVsZWFzZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICB1cGRhdGVSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJcbiAgICBdLFxuICAgIHVwZGF0ZVJlcG9SdWxlc2V0OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1BvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJ1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb25cIl0gfVxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIlxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXG4gICAgXSxcbiAgICB1cGxvYWRSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c3s/bmFtZSxsYWJlbH1cIixcbiAgICAgIHsgYmFzZVVybDogXCJodHRwczovL3VwbG9hZHMuZ2l0aHViLmNvbVwiIH1cbiAgICBdXG4gIH0sXG4gIHNlYXJjaDoge1xuICAgIGNvZGU6IFtcIkdFVCAvc2VhcmNoL2NvZGVcIl0sXG4gICAgY29tbWl0czogW1wiR0VUIC9zZWFyY2gvY29tbWl0c1wiXSxcbiAgICBpc3N1ZXNBbmRQdWxsUmVxdWVzdHM6IFtcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiXSxcbiAgICBsYWJlbHM6IFtcIkdFVCAvc2VhcmNoL2xhYmVsc1wiXSxcbiAgICByZXBvczogW1wiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCJdLFxuICAgIHRvcGljczogW1wiR0VUIC9zZWFyY2gvdG9waWNzXCJdLFxuICAgIHVzZXJzOiBbXCJHRVQgL3NlYXJjaC91c2Vyc1wiXVxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIlxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIlxuICAgIF1cbiAgfSxcbiAgc2VjdXJpdHlBZHZpc29yaWVzOiB7XG4gICAgY3JlYXRlRm9yazogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9mb3Jrc1wiXG4gICAgXSxcbiAgICBjcmVhdGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3JlcG9ydHNcIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5Q3ZlUmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9jdmVcIlxuICAgIF0sXG4gICAgZ2V0R2xvYmFsQWR2aXNvcnk6IFtcIkdFVCAvYWR2aXNvcmllcy97Z2hzYV9pZH1cIl0sXG4gICAgZ2V0UmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIlxuICAgIF1cbiAgfSxcbiAgdGVhbXM6IHtcbiAgICBhZGRPclVwZGF0ZU1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIGFkZE9yVXBkYXRlUmVwb1Blcm1pc3Npb25zSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUmVwb0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIlxuICAgIF0sXG4gICAgZ2V0RGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGxpc3REaXNjdXNzaW9uc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uc0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0UHJvamVjdHNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXG4gICAgXSxcbiAgICByZW1vdmVSZXBvSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZUluT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXVxuICB9LFxuICB1c2Vyczoge1xuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIva2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIva2V5c1wiXSxcbiAgICBjcmVhdGVTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZW1haWxzXCJdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBkZWxldGVTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIlxuICAgIF0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5VXNlcm5hbWU6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRDb250ZXh0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2hvdmVyY2FyZFwiXSxcbiAgICBnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC91c2Vyc1wiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvYmxvY2tzXCJdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCJdLFxuICAgIGxpc3RQdWJsaWNLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiXG4gICAgXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXVxuICB9XG59O1xudmFyIGVuZHBvaW50c19kZWZhdWx0ID0gRW5kcG9pbnRzO1xuXG4vLyBwa2cvZGlzdC1zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMuanNcbnZhciBlbmRwb2ludE1ldGhvZHNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzX2RlZmF1bHQpKSB7XG4gIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHMpKSB7XG4gICAgY29uc3QgW3JvdXRlLCBkZWZhdWx0cywgZGVjb3JhdGlvbnNdID0gZW5kcG9pbnQ7XG4gICAgY29uc3QgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KC8gLyk7XG4gICAgY29uc3QgZW5kcG9pbnREZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdHNcbiAgICApO1xuICAgIGlmICghZW5kcG9pbnRNZXRob2RzTWFwLmhhcyhzY29wZSkpIHtcbiAgICAgIGVuZHBvaW50TWV0aG9kc01hcC5zZXQoc2NvcGUsIC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5zZXQobWV0aG9kTmFtZSwge1xuICAgICAgc2NvcGUsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgIGRlY29yYXRpb25zXG4gICAgfSk7XG4gIH1cbn1cbnZhciBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSxcbiAgICAgIC8vIGVuc3VyZXMgbWV0aG9kIGlzIGluIHRoZSBjYWNoZVxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jYWNoZSwgbWV0aG9kTmFtZSwgZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIGRlbGV0ZSB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG93bktleXMoeyBzY29wZSB9KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0LCBtZXRob2ROYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZTtcbiAgfSxcbiAgZ2V0KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlIH0sIG1ldGhvZE5hbWUpIHtcbiAgICBpZiAoY2FjaGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgICB9XG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCB7IGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zIH0gPSBtZXRob2Q7XG4gICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IGRlY29yYXRlKFxuICAgICAgICBvY3Rva2l0LFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgICAgZGVjb3JhdGlvbnNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGVuZHBvaW50RGVmYXVsdHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gIH1cbn07XG5mdW5jdGlvbiBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBuZXdNZXRob2RzID0ge307XG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuICByZXR1cm4gbmV3TWV0aG9kcztcbn1cbmZ1bmN0aW9uIGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBkZWZhdWx0cywgZGVjb3JhdGlvbnMpIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyguLi5hcmdzKSB7XG4gICAgbGV0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWQpIHtcbiAgICAgIGNvbnN0IFtuZXdTY29wZSwgbmV3TWV0aG9kTmFtZV0gPSBkZWNvcmF0aW9ucy5yZW5hbWVkO1xuICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCBvcHRpb25zMiA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMyKSB7XG4gICAgICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgICAgIGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zMikpIHtcbiAgICAgICAgICAgIG9wdGlvbnMyW2FsaWFzXSA9IG9wdGlvbnMyW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uczJbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5mdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIHJlc3Q6IGFwaVxuICB9O1xufVxucmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbmZ1bmN0aW9uIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgLi4uYXBpLFxuICAgIHJlc3Q6IGFwaVxuICB9O1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLFxuICByZXN0RW5kcG9pbnRNZXRob2RzXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGNvbXBvc2VQYWdpbmF0ZVJlc3Q6ICgpID0+IGNvbXBvc2VQYWdpbmF0ZVJlc3QsXG4gIGlzUGFnaW5hdGluZ0VuZHBvaW50OiAoKSA9PiBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0OiAoKSA9PiBwYWdpbmF0ZVJlc3QsXG4gIHBhZ2luYXRpbmdFbmRwb2ludHM6ICgpID0+IHBhZ2luYXRpbmdFbmRwb2ludHNcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4yLjFcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL25vcm1hbGl6ZS1wYWdpbmF0ZWQtbGlzdC1yZXNwb25zZS5qc1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfTtcbiAgfVxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbilcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIGNvbnN0IGluY29tcGxldGVSZXN1bHRzID0gcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGNvbnN0IHJlcG9zaXRvcnlTZWxlY3Rpb24gPSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBjb25zdCB0b3RhbENvdW50ID0gcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2l0ZXJhdG9yLmpzXG5mdW5jdGlvbiBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZS5lbmRwb2ludChwYXJhbWV0ZXJzKSA6IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludChyb3V0ZSwgcGFyYW1ldGVycyk7XG4gIGNvbnN0IHJlcXVlc3RNZXRob2QgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlIDogb2N0b2tpdC5yZXF1ZXN0O1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgbGV0IHVybCA9IG9wdGlvbnMudXJsO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+ICh7XG4gICAgICBhc3luYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXVybClcbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0TWV0aG9kKHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB1cmwgPSAoKG5vcm1hbGl6ZWRSZXNwb25zZS5oZWFkZXJzLmxpbmsgfHwgXCJcIikubWF0Y2goXG4gICAgICAgICAgICAvPChbXj5dKyk+O1xccypyZWw9XCJuZXh0XCIvXG4gICAgICAgICAgKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZSB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSlcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIHVybCA9IFwiXCI7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgZGF0YTogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRlLmpzXG5mdW5jdGlvbiBwYWdpbmF0ZShvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycywgbWFwRm4pIHtcbiAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtYXBGbiA9IHBhcmFtZXRlcnM7XG4gICAgcGFyYW1ldGVycyA9IHZvaWQgMDtcbiAgfVxuICByZXR1cm4gZ2F0aGVyKFxuICAgIG9jdG9raXQsXG4gICAgW10sXG4gICAgaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLFxuICAgIG1hcEZuXG4gICk7XG59XG5mdW5jdGlvbiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbikge1xuICByZXR1cm4gaXRlcmF0b3IyLm5leHQoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBsZXQgZWFybHlFeGl0ID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGVhcmx5RXhpdCA9IHRydWU7XG4gICAgfVxuICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChcbiAgICAgIG1hcEZuID8gbWFwRm4ocmVzdWx0LnZhbHVlLCBkb25lKSA6IHJlc3VsdC52YWx1ZS5kYXRhXG4gICAgKTtcbiAgICBpZiAoZWFybHlFeGl0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgcmV0dXJuIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKTtcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9jb21wb3NlLXBhZ2luYXRlLmpzXG52YXIgY29tcG9zZVBhZ2luYXRlUmVzdCA9IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUsIHtcbiAgaXRlcmF0b3Jcbn0pO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2VuZXJhdGVkL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG52YXIgcGFnaW5hdGluZ0VuZHBvaW50cyA9IFtcbiAgXCJHRVQgL2Fkdmlzb3JpZXNcIixcbiAgXCJHRVQgL2FwcC9ob29rL2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9hc3NpZ25tZW50cy97YXNzaWdubWVudF9pZH0vYWNjZXB0ZWRfYXNzaWdubWVudHNcIixcbiAgXCJHRVQgL2NsYXNzcm9vbXNcIixcbiAgXCJHRVQgL2NsYXNzcm9vbXMve2NsYXNzcm9vbV9pZH0vYXNzaWdubWVudHNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2lzc3Vlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3RpbWVsaW5lXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29kZVwiLFxuICBcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIixcbiAgXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9sYWJlbHNcIixcbiAgXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC90b3BpY3NcIixcbiAgXCJHRVQgL3NlYXJjaC91c2Vyc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vbWVtYmVyc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcmVwb3NcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL3VzZXIvZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiLFxuICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvdXNlci9pc3N1ZXNcIixcbiAgXCJHRVQgL3VzZXIva2V5c1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIixcbiAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzL3N0dWJiZWRcIixcbiAgXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL29yZ3NcIixcbiAgXCJHRVQgL3VzZXIvcGFja2FnZXNcIixcbiAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICBcIkdFVCAvdXNlci9yZXBvc1wiLFxuICBcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2VyL3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiLFxuICBcIkdFVCAvdXNlci90ZWFtc1wiLFxuICBcIkdFVCAvdXNlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJcbl07XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xuZnVuY3Rpb24gaXNQYWdpbmF0aW5nRW5kcG9pbnQoYXJnKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHBhZ2luYXRpbmdFbmRwb2ludHMuaW5jbHVkZXMoYXJnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5mdW5jdGlvbiBwYWdpbmF0ZVJlc3Qob2N0b2tpdCkge1xuICByZXR1cm4ge1xuICAgIHBhZ2luYXRlOiBPYmplY3QuYXNzaWduKHBhZ2luYXRlLmJpbmQobnVsbCwgb2N0b2tpdCksIHtcbiAgICAgIGl0ZXJhdG9yOiBpdGVyYXRvci5iaW5kKG51bGwsIG9jdG9raXQpXG4gICAgfSlcbiAgfTtcbn1cbnBhZ2luYXRlUmVzdC5WRVJTSU9OID0gVkVSU0lPTjtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBleHBvcnRzLkdpdEh1YiA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLmNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBDb250ZXh0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnRleHRcIikpO1xuY29uc3QgVXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbHNcIikpO1xuLy8gb2N0b2tpdCArIHBsdWdpbnNcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9jb3JlXCIpO1xuY29uc3QgcGx1Z2luX3Jlc3RfZW5kcG9pbnRfbWV0aG9kc18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIik7XG5jb25zdCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCIpO1xuZXhwb3J0cy5jb250ZXh0ID0gbmV3IENvbnRleHQuQ29udGV4dCgpO1xuY29uc3QgYmFzZVVybCA9IFV0aWxzLmdldEFwaUJhc2VVcmwoKTtcbmV4cG9ydHMuZGVmYXVsdHMgPSB7XG4gICAgYmFzZVVybCxcbiAgICByZXF1ZXN0OiB7XG4gICAgICAgIGFnZW50OiBVdGlscy5nZXRQcm94eUFnZW50KGJhc2VVcmwpLFxuICAgICAgICBmZXRjaDogVXRpbHMuZ2V0UHJveHlGZXRjaChiYXNlVXJsKVxuICAgIH1cbn07XG5leHBvcnRzLkdpdEh1YiA9IGNvcmVfMS5PY3Rva2l0LnBsdWdpbihwbHVnaW5fcmVzdF9lbmRwb2ludF9tZXRob2RzXzEucmVzdEVuZHBvaW50TWV0aG9kcywgcGx1Z2luX3BhZ2luYXRlX3Jlc3RfMS5wYWdpbmF0ZVJlc3QpLmRlZmF1bHRzKGV4cG9ydHMuZGVmYXVsdHMpO1xuLyoqXG4gKiBDb252aWVuY2UgZnVuY3Rpb24gdG8gY29ycmVjdGx5IGZvcm1hdCBPY3Rva2l0IE9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdE9wdGlvbnModG9rZW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyB8fCB7fSk7IC8vIFNoYWxsb3cgY2xvbmUgLSBkb24ndCBtdXRhdGUgdGhlIG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyXG4gICAgLy8gQXV0aFxuICAgIGNvbnN0IGF1dGggPSBVdGlscy5nZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRzKTtcbiAgICBpZiAoYXV0aCkge1xuICAgICAgICBvcHRzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICByZXR1cm4gb3B0cztcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBnZXRPY3Rva2l0T3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGV4cG9ydHMuY29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IENvbnRleHQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vY29udGV4dFwiKSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5leHBvcnRzLmNvbnRleHQgPSBuZXcgQ29udGV4dC5Db250ZXh0KCk7XG4vKipcbiAqIFJldHVybnMgYSBoeWRyYXRlZCBvY3Rva2l0IHJlYWR5IHRvIHVzZSBmb3IgR2l0SHViIEFjdGlvbnNcbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdCh0b2tlbiwgb3B0aW9ucywgLi4uYWRkaXRpb25hbFBsdWdpbnMpIHtcbiAgICBjb25zdCBHaXRIdWJXaXRoUGx1Z2lucyA9IHV0aWxzXzEuR2l0SHViLnBsdWdpbiguLi5hZGRpdGlvbmFsUGx1Z2lucyk7XG4gICAgcmV0dXJuIG5ldyBHaXRIdWJXaXRoUGx1Z2lucygoMCwgdXRpbHNfMS5nZXRPY3Rva2l0T3B0aW9ucykodG9rZW4sIG9wdGlvbnMpKTtcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGdldE9jdG9raXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1naXRodWIuanMubWFwIiwKICAgICJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBleGVjIH0gZnJvbSBcIkBhY3Rpb25zL2V4ZWNcIlxuaW1wb3J0IHsgZGVidWcsIGdldElucHV0LCBnZXRTdGF0ZSwgaW5mbywgc2F2ZVN0YXRlLCB3YXJuaW5nIH0gZnJvbSBcIkBhY3Rpb25zL2NvcmVcIlxuaW1wb3J0IHsgRGVmYXVsdEFydGlmYWN0Q2xpZW50IH0gZnJvbSAnQGFjdGlvbnMvYXJ0aWZhY3QnXG5pbXBvcnQgeyBjb2xsZWN0UHJvbWV0aGV1cyB9IGZyb20gJy4uL21ldHJpY3MvcHJvbWV0aGV1cydcbmltcG9ydCB7IGRlZmF1bHRNZXRyaWNzIH0gZnJvbSAnLi4vbWV0cmljcy9kZWZhdWx0J1xuaW1wb3J0IHsgcmVuZGVyUmVwb3J0IH0gZnJvbSAnLi4vcmVwb3J0L2RlZmF1bHQnXG5pbXBvcnQgeyBjb250ZXh0LCBnZXRPY3Rva2l0IH0gZnJvbSAnQGFjdGlvbnMvZ2l0aHViJ1xuaW1wb3J0IHsgZ2V0Q3VycmVudFdvcmtmbG93UnVucyB9IGZyb20gJy4uL3dvcmtmbG93L3dvcmtmbG93J1xuaW1wb3J0IHR5cGUgeyBTZXJpZXMgfSBmcm9tICcuLi9yZXBvcnQvY2hhcnQnXG5cbihhc3luYyBmdW5jdGlvbiBwb3N0KCkge1xuXHRsZXQgY3dkID0gZ2V0U3RhdGUoXCJjd2RcIilcblx0bGV0IHNkayA9IGdldElucHV0KFwic2RrX25hbWVcIiwgeyByZXF1aXJlZDogdHJ1ZSB9KVxuXHRsZXQgd2FybXVwID0gcGFyc2VJbnQoZ2V0SW5wdXQoXCJ3YXJtdXBfc2Vjb25kc1wiKSB8fCAnMCcpXG5cblx0bGV0IGVuZCA9IG5ldyBEYXRlKClcblx0bGV0IHN0YXJ0ID0gbmV3IERhdGUoZ2V0U3RhdGUoXCJzdGFydFwiKSlcblx0c2F2ZVN0YXRlKFwiZW5kXCIsIGVuZC50b0lTT1N0cmluZygpKVxuXG5cdGxldCBwdWxsTnVtYmVyID0gcGFyc2VJbnQoZ2V0U3RhdGUoXCJpc3N1ZVwiKSlcblx0bGV0IGlzUHVsbFJlcXVlc3QgPSBwdWxsTnVtYmVyID49IDBcblxuXHRsZXQgYXJ0aWZhY3RDbGllbnQgPSBuZXcgRGVmYXVsdEFydGlmYWN0Q2xpZW50KClcblxuXHRpbmZvKFwiQ29sbGVjdGluZyBtZXRyaWNzIGZvciBoZWFkIHJlZi4uLlwiKVxuXHRsZXQgYWRqU3RhcnQgPSBuZXcgRGF0ZShzdGFydC5nZXRUaW1lKCkgKyB3YXJtdXAgKiAxMDAwKSAvLyBza2lwIGZpcnN0IHdhcm11cCBzZWNvbmRzXG5cdGxldCBtZXRyaWNzID0gYXdhaXQgY29sbGVjdFByb21ldGhldXMoYWRqU3RhcnQsIGVuZCwgZGVmYXVsdE1ldHJpY3MubWV0cmljcylcblx0aW5mbyhgTWV0cmljcyBjb2xsZWN0ZWQgZm9yIGhlYWQgcmVmOiAke09iamVjdC5rZXlzKG1ldHJpY3MpfWApXG5cdGRlYnVnKGBIZWFkIHJlZiBtZXRyaWNzOiAke09iamVjdC5rZXlzKG1ldHJpY3MpfWApXG5cblx0e1xuXHRcdGluZm8oXCJXcml0aW5nIG1ldHJpY3MuLi5cIilcblx0XHRsZXQgbWV0cmljc1BhdGggPSBwYXRoLmpvaW4oY3dkLCBgJHtzZGt9LW1ldHJpY3MuanNvbmApXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhtZXRyaWNzUGF0aCwgSlNPTi5zdHJpbmdpZnkobWV0cmljcyksIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuXHRcdGluZm8oYE1ldHJpY3Mgd3JpdHRlbiB0byAke21ldHJpY3NQYXRofWApXG5cblx0XHRpbmZvKFwiVXBsb2FkIG1ldHJpY3MgYXMgYW4gYXJ0aWZhY3QuLi5cIilcblx0XHRsZXQgeyBpZCB9ID0gYXdhaXQgYXJ0aWZhY3RDbGllbnQudXBsb2FkQXJ0aWZhY3QoYCR7c2RrfS1tZXRyaWNzLmpzb25gLCBbbWV0cmljc1BhdGhdLCBjd2QsIHsgcmV0ZW50aW9uRGF5czogaXNQdWxsUmVxdWVzdCA/IDEgOiAzMCB9KVxuXHRcdGluZm8oYE1ldHJpY3MgdXBsb2FkZWQgYXMgYW4gYXJ0aWZhY3QgJHtpZH1gKVxuXHR9XG5cblx0UFI6XG5cdGlmICghaXNQdWxsUmVxdWVzdCkge1xuXHRcdHdhcm5pbmcoXCJOb3QgYSBwdWxsIHJlcXVlc3QuXCIpXG5cdH1cblx0ZWxzZSB7XG5cdFx0ZGVidWcoYFB1bGwgcmVxdWVzdCBudW1iZXI6ICR7cHVsbE51bWJlcn1gKVxuXG5cdFx0aW5mbyhcIkZldGNoaW5nIGluZm9ybWF0aW9uIGFib3V0IHB1bGwgcmVxdWVzdC4uLlwiKVxuXHRcdGxldCB7IGRhdGE6IHByIH0gPSBhd2FpdCBnZXRPY3Rva2l0KGdldElucHV0KFwiZ2l0aHViX3Rva2VuXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSkpLnJlc3QucHVsbHMuZ2V0KHtcblx0XHRcdG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG5cdFx0XHRyZXBvOiBjb250ZXh0LnJlcG8ucmVwbyxcblx0XHRcdHB1bGxfbnVtYmVyOiBwdWxsTnVtYmVyLFxuXHRcdH0pXG5cdFx0aW5mbyhgUHVsbCByZXF1ZXN0IGluZm9ybWF0aW9uIGZldGNoZWQ6ICR7cHIuaHRtbF91cmx9YClcblx0XHRkZWJ1ZyhgUHVsbCByZXF1ZXN0IGluZm9ybWF0aW9uOiAke0pTT04uc3RyaW5naWZ5KHByLCBudWxsLCA0KX1gKVxuXG5cdFx0aW5mbyhgRmV0Y2hpbmcgaW5mb3JtYXRpb24gYWJvdXQgcHJldmlvdXMgcnVucyBmb3IgYmFzZSBicmFuY2guLi5gKVxuXHRcdGxldCBydW5zID0gYXdhaXQgZ2V0Q3VycmVudFdvcmtmbG93UnVucyhwci5iYXNlLnJlZilcblx0XHRpbmZvKGBGb3VuZCAke3J1bnMubGVuZ3RofSBjb21wbGV0ZWQgYW5kIHN1Y2Nlc3NmdWwgcnVucyBmb3IgZGVmYXVsdCBicmFuY2guYClcblx0XHRkZWJ1ZyhgUHJldmlvdXMgcnVucyBmb3IgYmFzZSBicmFuY2g6ICR7SlNPTi5zdHJpbmdpZnkocnVucy5tYXAocnVuID0+ICh7IGlkOiBydW4uaWQsIHVwZDogcnVuLnVwZGF0ZWRfYXQgfSkpLCBudWxsLCA0KX1gKVxuXG5cdFx0aWYgKHJ1bnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR3YXJuaW5nKFwiTm8gcHJldmlvdXMgcnVucyBmb3VuZC5cIilcblx0XHRcdGJyZWFrIFBSXG5cdFx0fVxuXG5cdFx0aW5mbyhgRmluZGluZyBsYXRlc3QgcnVuLi4uYClcblx0XHRsZXQgbGF0ZXN0UnVuID0gcnVuc1swXVxuXHRcdGluZm8oYExhdGVzdCBydW46ICR7bGF0ZXN0UnVuLnVybH1gKVxuXHRcdGRlYnVnKGBMYXRlc3QgcnVuOiAke0pTT04uc3RyaW5naWZ5KGxhdGVzdFJ1biwgbnVsbCwgNCl9YClcblxuXHRcdGluZm8oYEZpbmRpbmcgbGF0ZXN0IHJ1biBhcnRpZmFjdHMuLi5gKVxuXHRcdGxldCB7IGRhdGE6IHsgYXJ0aWZhY3RzIH0gfSA9IGF3YWl0IGdldE9jdG9raXQoZ2V0SW5wdXQoXCJnaXRodWJfdG9rZW5cIiwgeyByZXF1aXJlZDogdHJ1ZSB9KSkucmVzdC5hY3Rpb25zLmxpc3RXb3JrZmxvd1J1bkFydGlmYWN0cyh7XG5cdFx0XHRvd25lcjogY29udGV4dC5yZXBvLm93bmVyLFxuXHRcdFx0cmVwbzogY29udGV4dC5yZXBvLnJlcG8sXG5cdFx0XHRydW5faWQ6IGxhdGVzdFJ1bi5pZCxcblx0XHR9KVxuXHRcdGluZm8oYEZvdW5kICR7YXJ0aWZhY3RzLmxlbmd0aH0gYXJ0aWZhY3RzLmApXG5cdFx0ZGVidWcoYExhdGVzdCBydW4gYXJ0aWZhY3RzOiAke0pTT04uc3RyaW5naWZ5KGFydGlmYWN0cywgbnVsbCwgNCl9YClcblxuXHRcdGxldCBhcnRpZmFjdCA9IGFydGlmYWN0cy5maW5kKGFydGlmYWN0ID0+IGFydGlmYWN0Lm5hbWUgPT09IGAke3Nka30tbWV0cmljcy5qc29uYClcblx0XHRpZiAoIWFydGlmYWN0IHx8IGFydGlmYWN0LmV4cGlyZWQpIHtcblx0XHRcdHdhcm5pbmcoXCJNZXRyaWNzIGZvciBiYXNlIHJlZiBub3QgZm91bmQgb3IgZXhwaXJlZC5cIilcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVidWcoYE1ldHJpY3MgYXJ0aWZhY3Q6ICR7SlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3QsIG51bGwsIDQpfWApXG5cblx0XHRcdGluZm8oYERvd25sb2FkaW5nIGFydGlmYWN0ICR7YXJ0aWZhY3QuaWR9Li4uYClcblx0XHRcdGxldCB7IGRvd25sb2FkUGF0aCB9ID0gYXdhaXQgYXJ0aWZhY3RDbGllbnQuZG93bmxvYWRBcnRpZmFjdChhcnRpZmFjdC5pZCwge1xuXHRcdFx0XHRwYXRoOiBjd2QsXG5cdFx0XHRcdGZpbmRCeToge1xuXHRcdFx0XHRcdHRva2VuOiBnZXRJbnB1dChcImdpdGh1Yl90b2tlblwiLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuXHRcdFx0XHRcdHdvcmtmbG93UnVuSWQ6IGxhdGVzdFJ1bi53b3JrZmxvd19pZCxcblx0XHRcdFx0XHRyZXBvc2l0b3J5T3duZXI6IGNvbnRleHQucmVwby5vd25lcixcblx0XHRcdFx0XHRyZXBvc2l0b3J5TmFtZTogY29udGV4dC5yZXBvLnJlcG8sXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpbmZvKGBEb3dubG9hZGVkIGFydGlmYWN0ICR7YXJ0aWZhY3QubmFtZX0gdG8gJHtkb3dubG9hZFBhdGh9YClcblxuXHRcdFx0aW5mbyhgRXh0cmFjdGluZyBtZXRyaWNzIGZyb20gYXJ0aWZhY3QgJHthcnRpZmFjdC5pZH0uLi5gKVxuXHRcdFx0bGV0IGJhc2VNZXRyaWNzID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGN3ZCwgYXJ0aWZhY3QubmFtZSksIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KSkgYXMgUmVjb3JkPHN0cmluZywgU2VyaWVzW10+XG5cblx0XHRcdGluZm8oYE1ldHJpY3MgZXh0cmFjdGVkIGZyb20gYXJ0aWZhY3QgJHthcnRpZmFjdC5pZH06ICR7T2JqZWN0LmtleXMoYmFzZU1ldHJpY3MpfWApXG5cdFx0XHRkZWJ1ZyhgQmFzZSBtZXRyaWNzOiAke0pTT04uc3RyaW5naWZ5KGJhc2VNZXRyaWNzLCBudWxsLCA0KX1gKVxuXG5cdFx0XHRpbmZvKGBNZXJnaW5nIG1ldHJpY3MuLi5gKVxuXHRcdFx0Zm9yIChsZXQgW25hbWUsIGJhc2VTZXJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGJhc2VNZXRyaWNzKSkge1xuXHRcdFx0XHRpZiAoIW1ldHJpY3NbbmFtZV0pIGNvbnRpbnVlXG5cblx0XHRcdFx0Ly8gYmFzZSBtZXRyaWNzIGFsd2F5cyBtdXN0IGJlIHRoZSBzZWNvbmRcblx0XHRcdFx0bWV0cmljc1tuYW1lXSA9IG1ldHJpY3NbbmFtZV0uY29uY2F0KGJhc2VTZXJpZXMpXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aW5mbyhcIlJlbmRlcmluZyByZXBvcnQuLi5cIilcblx0bGV0IHJlcG9ydCA9IHJlbmRlclJlcG9ydChzZGssIG1ldHJpY3MpXG5cdGRlYnVnKGBSZXBvcnQ6ICR7cmVwb3J0fWApXG5cblx0e1xuXHRcdGluZm8oXCJXcml0aW5nIHJlcG9ydC4uLlwiKVxuXHRcdGxldCByZXBvcnRQYXRoID0gcGF0aC5qb2luKGN3ZCwgYCR7c2RrfS1yZXBvcnQubWRgKVxuXHRcdGZzLndyaXRlRmlsZVN5bmMocmVwb3J0UGF0aCwgcmVwb3J0LCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSlcblx0XHRpbmZvKGBSZXBvcnQgd3JpdHRlbiB0byAke3JlcG9ydFBhdGh9YClcblxuXHRcdGluZm8oXCJVcGxvYWQgcmVwb3J0IGFzIGFuIGFydGlmYWN0Li4uXCIpXG5cdFx0bGV0IHsgaWQgfSA9IGF3YWl0IGFydGlmYWN0Q2xpZW50LnVwbG9hZEFydGlmYWN0KGAke3Nka30tcmVwb3J0Lm1kYCwgW3JlcG9ydFBhdGhdLCBjd2QsIHsgcmV0ZW50aW9uRGF5czogMSB9KVxuXHRcdGluZm8oYFJlcG9ydCB1cGxvYWRlZCBhcyBhbiBhcnRpZmFjdCAke2lkfWApXG5cdH1cblxuXHR7XG5cdFx0aW5mbyhcIldyaXRpbmcgcHVsbCBudW1iZXIuLi5cIilcblx0XHRsZXQgcHVsbFBhdGggPSBwYXRoLmpvaW4oY3dkLCBgJHtzZGt9LXB1bGwudHh0YClcblx0XHRmcy53cml0ZUZpbGVTeW5jKHB1bGxQYXRoLCBwdWxsTnVtYmVyLnRvRml4ZWQoMCksIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuXHRcdGluZm8oYFB1bGwgbnVtYmVyIHdyaXR0ZW4gdG8gJHtwdWxsUGF0aH1gKVxuXG5cdFx0aW5mbyhcIlVwbG9hZCBwdWxsIG51bWJlciBhcyBhbiBhcnRpZmFjdC4uLlwiKVxuXHRcdGxldCB7IGlkIH0gPSBhd2FpdCBhcnRpZmFjdENsaWVudC51cGxvYWRBcnRpZmFjdChgJHtzZGt9LXB1bGwudHh0YCwgW3B1bGxQYXRoXSwgY3dkLCB7IHJldGVudGlvbkRheXM6IDEgfSlcblx0XHRpbmZvKGBQdWxsIG51bWJlciB1cGxvYWRlZCBhcyBhbiBhcnRpZmFjdCAke2lkfWApXG5cdH1cblxuXHRpbmZvKFwiU3RvcHBpbmcgWURCLi4uXCIpXG5cdGF3YWl0IGV4ZWMoYGRvY2tlcmAsIFtgY29tcG9zZWAsIGAtZmAsIGBjb21wb3NlLnlhbWxgLCBgZG93bmBdLCB7IGN3ZCB9KVxuXG5cdGluZm8oYFlEQiBzdG9wcGVkIGF0ICR7ZW5kfWApXG5cblx0bGV0IGR1cmF0aW9uID0gZW5kLmdldFRpbWUoKSAtIHN0YXJ0LmdldFRpbWUoKVxuXHRpbmZvKGBZREIgU0xPIFRlc3QgZHVyYXRpb246ICR7ZHVyYXRpb259bXMuYClcblxuXHRkZWJ1ZyhcIkNsZWFuaW5nIHVwIHRlbXAgZGlyZWN0b3J5Li4uXCIpXG5cdGZzLnJtU3luYyhjd2QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufSkoKVxuIiwKICAgICIvLyBIb3N0XG5leHBvcnQgY29uc3QgSE9TVCA9ICdsb2NhbGhvc3QnXG5cbi8vIFlEQiBTdGF0aWMgbm9kZSBjb25maWd1cmF0aW9uLiBQcmVmZXJlIGRvIG5vdCBlZGl0LlxuZXhwb3J0IGNvbnN0IFlEQl9HUlBDX1BPUlQgPSAyMTM1XG5leHBvcnQgY29uc3QgWURCX01PTl9QT1JUID0gODc2NVxuZXhwb3J0IGNvbnN0IFlEQl9JQ19QT1JUID0gMTkwMDFcbmV4cG9ydCBjb25zdCBZREJfVEVOQU5UID0gJy9Sb290L3Rlc3RkYidcblxuLy8gUGFzcyBpbnRvIHdvcmtsb2FkXG5leHBvcnQgY29uc3QgWURCX0VORFBPSU5UID0gYGdycGM6Ly8ke0hPU1R9OiR7WURCX0dSUENfUE9SVH1gXG5leHBvcnQgY29uc3QgWUJEX0NPTk5FQ1RJT05fU1RSSU5HID0gYCR7WURCX0VORFBPSU5UfSR7WURCX1RFTkFOVH1gXG5cbmV4cG9ydCBjb25zdCBQUk9NRVRIRVVTX1BPUlQgPSA5MDkwXG5leHBvcnQgY29uc3QgUFJPTUVUSEVVU19QVVNIR0FURVdBWV9QT1JUID0gOTA5MVxuXG5leHBvcnQgY29uc3QgUFJPTUVUSEVVU19VUkwgPSBgaHR0cDovLyR7SE9TVH06JHtQUk9NRVRIRVVTX1BPUlR9YFxuZXhwb3J0IGNvbnN0IFBST01FVEhFVVNfUFVTSEdBVEVXQVlfVVJMID0gYGh0dHA6Ly8ke0hPU1R9OiR7UFJPTUVUSEVVU19QVVNIR0FURVdBWV9QT1JUfWBcbiIsCiAgICAiaW1wb3J0IHsgUFJPTUVUSEVVU19VUkwgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCJcbmltcG9ydCB0eXBlIHsgU2VyaWVzIH0gZnJvbSBcIi4uL3JlcG9ydC9jaGFydFwiXG5pbXBvcnQgdHlwZSB7IE1ldHJpY3NEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiXG5cbmV4cG9ydCB0eXBlIFByb21ldGhldXNRdWVyeVJhbmdlUmVzcG9uc2UgPSB7XG5cdFwic3RhdHVzXCI6IFwic3VjY2Vzc1wiIHwgXCJlcnJvclwiLFxuXHRcImRhdGFcIjoge1xuXHRcdFwicmVzdWx0VHlwZVwiOiBcIm1hdHJpeFwiIHwgXCJ2ZWN0b3JcIiB8IFwic2NhbGFyXCIgfCBcInN0cmluZ1wiLFxuXHRcdFwicmVzdWx0XCI6IFNlcmllc1tdXG5cdH0sXG5cdFwid2FybmluZ3NcIjogc3RyaW5nW10sXG5cdFwiaW5mb3NcIjogc3RyaW5nW10sXG5cdFwiZXJyb3JcIjogc3RyaW5nLFxufVxuXG5mdW5jdGlvbiBxdWVyeVJhbmdlKHF1ZXJ5OiBzdHJpbmcsIHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUpIHtcblx0bGV0IHVybCA9IG5ldyBVUkwoXCIvYXBpL3YxL3F1ZXJ5X3JhbmdlXCIsIFBST01FVEhFVVNfVVJMKVxuXHR1cmwuc2VhcmNoUGFyYW1zLnNldChcInF1ZXJ5XCIsIHF1ZXJ5KVxuXHR1cmwuc2VhcmNoUGFyYW1zLnNldChcInN0YXJ0XCIsIE1hdGguY2VpbChzdGFydC5nZXRUaW1lKCkgLyAxMDAwKS50b1N0cmluZygpKVxuXHR1cmwuc2VhcmNoUGFyYW1zLnNldChcImVuZFwiLCBNYXRoLmZsb29yKGVuZC5nZXRUaW1lKCkgLyAxMDAwKS50b1N0cmluZygpKVxuXHR1cmwuc2VhcmNoUGFyYW1zLnNldChcInN0ZXBcIiwgXCIxXCIpXG5cblx0cmV0dXJuIGZldGNoKHVybCkudGhlbihyID0+IHIuanNvbigpKSBhcyBQcm9taXNlPFByb21ldGhldXNRdWVyeVJhbmdlUmVzcG9uc2U+XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb2xsZWN0UHJvbWV0aGV1cyhzdGFydDogRGF0ZSwgZW5kOiBEYXRlLCBtZXRyaWNzOiBNZXRyaWNzRGVmaW5pdGlvbltcIm1ldHJpY3NcIl0pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFNlcmllc1tdPj4ge1xuXHRsZXQgcmVzdWx0cyA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIFNlcmllc1tdPlxuXG5cdGZvciAoY29uc3QgbSBvZiBtZXRyaWNzKSB7XG5cdFx0bGV0IHsgc3RhdHVzLCBkYXRhIH0gPSBhd2FpdCBxdWVyeVJhbmdlKG0ucXVlcnksIHN0YXJ0LCBlbmQpXG5cdFx0aWYgKHN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIGNvbnRpbnVlXG5cblx0XHRyZXN1bHRzW20uaWRdID0gZGF0YS5yZXN1bHRcblx0fVxuXG5cdHJldHVybiByZXN1bHRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgTWV0cmljc0RlZmluaXRpb24gfSBmcm9tIFwiLi9kZWZpbml0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0TWV0cmljczogTWV0cmljc0RlZmluaXRpb24gPSB7XG5cdG1ldHJpY3M6IFtcblx0XHR7XG5cdFx0XHRpZDogXCJyZWFkX2xhdGVuY3lfbXNcIixcblx0XHRcdHF1ZXJ5OiBgMTAwMCAqIGhpc3RvZ3JhbV9xdWFudGlsZSgwLjk1LCBzdW0gYnkocmVmLCBsZSkgKHJhdGUoc2RrX29wZXJhdGlvbl9sYXRlbmN5X3NlY29uZHNfYnVja2V0e29wZXJhdGlvbl90eXBlPVwicmVhZFwifVsyc10pKSlgLFxuXHRcdFx0ZGVzY3JpcHRpb246IFwiOTV0aCBwZXJjZW50aWxlIHJlYWQgb3BlcmF0aW9ucyBsYXRlbmN5IGluIG1pbGxpc2Vjb25kc1wiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6IFwid3JpdGVfbGF0ZW5jeV9tc1wiLFxuXHRcdFx0cXVlcnk6IGAxMDAwICogaGlzdG9ncmFtX3F1YW50aWxlKDAuOTUsIHN1bSBieShyZWYsIGxlKSAocmF0ZShzZGtfb3BlcmF0aW9uX2xhdGVuY3lfc2Vjb25kc19idWNrZXR7b3BlcmF0aW9uX3R5cGU9XCJ3cml0ZVwifVsyc10pKSlgLFxuXHRcdFx0ZGVzY3JpcHRpb246IFwiOTV0aCBwZXJjZW50aWxlIHdyaXRlIG9wZXJhdGlvbnMgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHNcIixcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiBcInJlYWRfdGhyb3VnaHB1dFwiLFxuXHRcdFx0cXVlcnk6IGBzdW0gYnkocmVmKSAocmF0ZShzZGtfb3BlcmF0aW9uc190b3RhbHtvcGVyYXRpb25fdHlwZT1cInJlYWRcIn1bMnNdKSA+IDApYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJlYWQgb3BlcmF0aW9ucyB0aHJvdWdocHV0XCIsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogXCJ3cml0ZV90aHJvdWdocHV0XCIsXG5cdFx0XHRxdWVyeTogYHN1bSBieShyZWYpIChyYXRlKHNka19vcGVyYXRpb25zX3RvdGFse29wZXJhdGlvbl90eXBlPVwid3JpdGVcIn1bMnNdKSA+IDApYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIldyaXRlIG9wZXJhdGlvbnMgdGhyb3VnaHB1dFwiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6IFwicmVhZF9hdHRlbXB0c1wiLFxuXHRcdFx0cXVlcnk6IGBzdW0gYnkocmVmKSAocmF0ZShzZGtfcmV0cnlfYXR0ZW1wdHN7b3BlcmF0aW9uX3R5cGU9XCJyZWFkXCJ9WzJzXSkgPiAwKWAsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJSZWFkIGF0dGVtcHRzIHRocm91Z2hwdXRcIixcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiBcIndyaXRlX2F0dGVtcHRzXCIsXG5cdFx0XHRxdWVyeTogYHN1bSBieShyZWYpIChyYXRlKHNka19yZXRyeV9hdHRlbXB0c3tvcGVyYXRpb25fdHlwZT1cIndyaXRlXCJ9WzJzXSkgPiAwKWAsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJXcml0ZSBhdHRlbXB0cyB0aHJvdWdocHV0XCIsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogXCJyZWFkX2F2YWlsYWJpbGl0eVwiLFxuXHRcdFx0cXVlcnk6IGAxMDAgKiBzdW0gYnkgKHJlZikgKGluY3JlYXNlKHNka19vcGVyYXRpb25zX3N1Y2Nlc3NfdG90YWx7b3BlcmF0aW9uX3R5cGU9XCJyZWFkXCJ9WzJzXSkpIC8gc3VtIGJ5IChyZWYpIChpbmNyZWFzZShzZGtfb3BlcmF0aW9uc190b3RhbHtvcGVyYXRpb25fdHlwZT1cInJlYWRcIn1bMnNdKSlgLFxuXHRcdFx0ZGVzY3JpcHRpb246IFwiUmVhZCBvcGVyYXRpb25zIGF2YWlsYWJpbGl0eVwiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6IFwid3JpdGVfYXZhaWxhYmlsaXR5XCIsXG5cdFx0XHRxdWVyeTogYDEwMCAqIHN1bSBieSAocmVmKSAoaW5jcmVhc2Uoc2RrX29wZXJhdGlvbnNfc3VjY2Vzc190b3RhbHtvcGVyYXRpb25fdHlwZT1cIndyaXRlXCJ9WzJzXSkpIC8gc3VtIGJ5IChyZWYpIChpbmNyZWFzZShzZGtfb3BlcmF0aW9uc190b3RhbHtvcGVyYXRpb25fdHlwZT1cIndyaXRlXCJ9WzJzXSkpYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIldyaXRlIG9wZXJhdGlvbnMgYXZhaWxhYmlsaXR5XCIsXG5cdFx0fSxcblx0XVxufVxuIiwKICAgICIvLyBUYWJsZWF1IDEwXG5leHBvcnQgY29uc3QgcGFsZXR0ZSA9IFtcblx0XCIjRkY3RjBFXCIsXG5cdFwiIzFGNzdCNFwiLFxuXHRcIiNENjI3MjhcIixcblx0XCIjMkNBMDJDXCIsXG5cdFwiIzk0NjdCRFwiLFxuXHRcIiM4QzU2NEJcIixcblx0XCIjRTM3N0MyXCIsXG5cdFwiIzdGN0Y3RlwiLFxuXHRcIiNCQ0JEMjJcIixcblx0XCIjMTdCRUNGXCJcbl1cbiIsCiAgICAiaW1wb3J0IHsgcGFsZXR0ZSBhcyBkZWZhdWx0UGFsZXR0ZSB9IGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgdHlwZSBTZXJpZXMgPSB7XG5cdFwibWV0cmljXCI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFwidmFsdWVzXCI6IFtudW1iZXIsIHN0cmluZ11bXSAvLyBbdGltZXN0YW1wIChzZWMpLCB2YWx1ZSAoZmxvYXQpXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ2hhcnQodGl0bGU6IHN0cmluZywgc2VyaWVzOiBTZXJpZXNbXSwgeExhYmVsID0gXCJcIiwgeUxhYmVsID0gXCJcIiwgcGFsZXR0ZSA9IGRlZmF1bHRQYWxldHRlKTogc3RyaW5nIHtcblx0Ly8gMS4gRmlsdGVyIHplcm9zXG5cdGxldCBtaW5MZW5ndGggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdGZvciAoY29uc3QgcyBvZiBzZXJpZXMpIHtcblx0XHRzLnZhbHVlcyA9IHMudmFsdWVzLmZpbHRlcih2ID0+IHZbMV0gIT0gJzAnKTtcblx0XHRpZiAocy52YWx1ZXMubGVuZ3RoIDwgbWluTGVuZ3RoKSBtaW5MZW5ndGggPSBzLnZhbHVlcy5sZW5ndGg7XG5cdH1cblxuXHQvLyAyLiBMaW1pdCB2YWx1ZXMgKGNvdW50KVxuXHRmb3IgKGNvbnN0IHMgb2Ygc2VyaWVzKSB7XG5cdFx0Ly8gU2tpcCBmaXJzdCB2YWx1ZXMgdGhlbiBhZGp1c3Rpbmdcblx0XHRzLnZhbHVlcyA9IHMudmFsdWVzLnNsaWNlKC0xICogbWluTGVuZ3RoKTtcblx0fVxuXG5cdGxldCBtaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdGxldCBtYXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cblx0bGV0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRmb3IgKGNvbnN0IHMgb2Ygc2VyaWVzKSB7XG5cdFx0bGV0IGxpbmU6IG51bWJlcltdID0gW11cblxuXHRcdGZvciAobGV0IFssIHZhbHVlXSBvZiBzLnZhbHVlcykge1xuXHRcdFx0bGV0IHYgPSBwYXJzZUZsb2F0KHZhbHVlKVxuXHRcdFx0aWYgKGlzTmFOKHYpKSB7XG5cdFx0XHRcdHYgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgdlIgPSBNYXRoLnJvdW5kKHYgKiAxMDAwKSAvIDEwMDA7XG5cdFx0XHRsZXQgdkYgPSBNYXRoLmZsb29yKHYgKiAxMDAwKSAvIDEwMDA7XG5cdFx0XHRsZXQgdkMgPSBNYXRoLmNlaWwodiAqIDEwMDApIC8gMTAwMDtcblxuXHRcdFx0bGluZS5wdXNoKHZSKTtcblxuXHRcdFx0aWYgKHZGIDwgbWluKSBtaW4gPSB2Rjtcblx0XHRcdGlmICh2QyA+IG1heCkgbWF4ID0gdkM7XG5cdFx0fVxuXG5cdFx0bGluZXMucHVzaChgbGluZSBbJHtsaW5lLmpvaW4oKX1dYCk7XG5cdH1cblxuXHRyZXR1cm4gYFxcYFxcYFxcYG1lcm1haWRcbi0tLVxuY29uZmlnOlxuICAgIHh5Q2hhcnQ6XG4gICAgICAgIHdpZHRoOiAxMjAwXG4gICAgICAgIGhlaWdodDogNDAwXG4gICAgdGhlbWVWYXJpYWJsZXM6XG4gICAgICAgIHh5Q2hhcnQ6XG4gICAgICAgICAgICB0aXRsZUNvbG9yOiBcIiMyMjJcIlxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmZmZcIlxuICAgICAgICAgICAgeEF4aXNMaW5lQ29sb3I6IFwiIzIyMlwiXG4gICAgICAgICAgICB5QXhpc0xpbmVDb2xvcjogXCIjMjIyXCJcbiAgICAgICAgICAgIHBsb3RDb2xvclBhbGV0dGU6IFwiJHtwYWxldHRlLmpvaW4oKX1cIlxuLS0tXG54eWNoYXJ0LWJldGFcbiAgICB0aXRsZSBcIiR7dGl0bGV9XCJcbiAgICB4LWF4aXMgXCIke3hMYWJlbH1cIiAwIC0tPiAxMFxuICAgIHktYXhpcyBcIiR7eUxhYmVsfVwiICR7TWF0aC5mbG9vcihtaW4gKiAwLjkpfSAtLT4gJHtNYXRoLmNlaWwobWF4ICogMS4xKX1cbiAgICAke2xpbmVzLmpvaW4oXCJcXG4gICAgXCIpfVxuXFxgXFxgXFxgXG5gXG59XG4iLAogICAgImltcG9ydCB7IHJlbmRlckNoYXJ0LCB0eXBlIFNlcmllcyB9IGZyb20gXCIuL2NoYXJ0XCI7XG5cbmV4cG9ydCBjb25zdCByZW5kZXJSZXBvcnQgPSAoc2RrOiBzdHJpbmcsIG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIFNlcmllc1tdPikgPT4gYCMgU0xPIFJlcG9ydCA8aW1nIGFsaWduPVwicmlnaHRcIiBoZWlnaHQ9XCIzNlwiIHNyYz1cImh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uv4o6HLWhlYWQtJTIzRkY3RjBFP3N0eWxlPWZvci10aGUtYmFkZ2VcIj48aW1nIGFsaWduPVwicmlnaHRcIiBoZWlnaHQ9XCIzNlwiICBzcmM9XCJodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL+KOhy1iYXNlLSUyMzFGNzdCND9zdHlsZT1mb3ItdGhlLWJhZGdlXCI+PGltZyBhbGlnbj1cInJpZ2h0XCIgaGVpZ2h0PVwiMzZcIiBzcmM9XCJodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL3Nkay0ke3Nkay5yZXBsYWNlKC8tL2csIFwiLS1cIil9LSUyM0UzNzdDMj9zdHlsZT1mb3ItdGhlLWJhZGdlXCI+XG5cbiMjIyBPcGVyYXRpb24gU3VjY2VzcyBSYXRlXG5cbiR7cmVuZGVyQ2hhcnQoXCJvcGVyYXRpb25fdHlwZT1yZWFkXCIsIG1ldHJpY3NbXCJyZWFkX2F2YWlsYWJpbGl0eVwiXSwgXCJUaW1lLCBtXCIsIFwiU3VjY2VzcyBSYXRlLCAlXCIpfVxuXG4ke3JlbmRlckNoYXJ0KFwib3BlcmF0aW9uX3R5cGU9d3JpdGVcIiwgbWV0cmljc1tcIndyaXRlX2F2YWlsYWJpbGl0eVwiXSwgXCJcdFRpbWUsIG1cIiwgXCJTdWNjZXNzIFJhdGUsICVcIil9XG5cbiMjIyBPcGVyYXRpb25zIFBlciBTZWNvbmRcblxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXJlYWRcIiwgbWV0cmljc1tcInJlYWRfdGhyb3VnaHB1dFwiXSwgXCJUaW1lLCBtXCIsIFwiT3BlcmF0aW9uc1wiKX1cblxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXdyaXRlXCIsIG1ldHJpY3NbXCJ3cml0ZV90aHJvdWdocHV0XCJdLCBcIlRpbWUsIG1cIiwgXCJPcGVyYXRpb25zXCIpfVxuXG4jIyMgOTV0aCBQZXJjZW50aWxlIExhdGVuY3lcblxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXJlYWRcIiwgbWV0cmljc1tcInJlYWRfbGF0ZW5jeV9tc1wiXSwgXCJUaW1lLCBtXCIsIFwiTGF0ZW5jeSwgbXNcIil9XG5cbiR7cmVuZGVyQ2hhcnQoXCJvcGVyYXRpb25fdHlwZT13cml0ZVwiLCBtZXRyaWNzW1wid3JpdGVfbGF0ZW5jeV9tc1wiXSwgXCJUaW1lLCBtXCIsIFwiTGF0ZW5jeSwgbXNcIil9XG5gXG4iLAogICAgImltcG9ydCB7IGdldElucHV0IH0gZnJvbSBcIkBhY3Rpb25zL2NvcmVcIlxuaW1wb3J0IHsgY29udGV4dCwgZ2V0T2N0b2tpdCB9IGZyb20gXCJAYWN0aW9ucy9naXRodWJcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudFdvcmtmbG93UnVucyhicmFuY2g6IHN0cmluZykge1xuXHRsZXQgeyBkYXRhOiB7IHdvcmtmbG93cyB9IH0gPSBhd2FpdCBnZXRPY3Rva2l0KGdldElucHV0KFwiZ2l0aHViX3Rva2VuXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSkpLnJlc3QuYWN0aW9ucy5saXN0UmVwb1dvcmtmbG93cyh7XG5cdFx0b3duZXI6IGNvbnRleHQucmVwby5vd25lcixcblx0XHRyZXBvOiBjb250ZXh0LnJlcG8ucmVwbyxcblx0fSlcblxuXHRsZXQgd29ya2Zsb3cgPSB3b3JrZmxvd3MuZmluZCh3b3JrZmxvdyA9PiB3b3JrZmxvdy5uYW1lID09PSBjb250ZXh0LndvcmtmbG93KVxuXG5cdGlmICghd29ya2Zsb3cpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdGxldCB7IGRhdGE6IHsgd29ya2Zsb3dfcnVucyB9IH0gPSBhd2FpdCBnZXRPY3Rva2l0KGdldElucHV0KFwiZ2l0aHViX3Rva2VuXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSkpLnJlc3QuYWN0aW9ucy5saXN0V29ya2Zsb3dSdW5zKHtcblx0XHRvd25lcjogY29udGV4dC5yZXBvLm93bmVyLFxuXHRcdHJlcG86IGNvbnRleHQucmVwby5yZXBvLFxuXHRcdHdvcmtmbG93X2lkOiB3b3JrZmxvdy5pZCxcblx0XHRicmFuY2g6IGJyYW5jaCxcblx0XHRzdGF0dXM6IFwiY29tcGxldGVkXCIsXG5cdH0pXG5cblx0cmV0dXJuIHdvcmtmbG93X3J1bnMuZmlsdGVyKHJ1biA9PiBydW4uY29uY2x1c2lvbiA9PT0gXCJzdWNjZXNzXCIpXG59XG4iCiAgXSwKICAibWFwcGluZ3Mi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T0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FB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SUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFH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Q0Y7QUFBQTs7OztBQ3ZFQSxXQUFTLFdBQVksQ0FBQyxPQUFPO0FBQzNCLFNBQUssT0FBTztBQUNWLGFBQU87QUFBQSxJQUNUO0FBTUEsWUFBUSxNQUFNLEtBQUssRUFBRSxZQUFZO0FBQUEsV0FDMUI7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxX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QVEsaUJBQVM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Q7QUFXQSxXQUFTLFNBQVMsR0FBRztBQUlwQixlQUFXLFdBQVcsZUFBZSxPQUFPLFlBQVksT0FBTyxRQUFRLFNBQVMsY0FBYyxPQUFPLFFBQVEsU0FBUztBQUNySCxhQUFPO0FBQUEsSUFDUjtBQUdBLGVBQVcsY0FB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LFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLFdBQ1EsT0FBUDtBQUFBO0FBVUYsRUFBUSxzQkFBYyxPQUFPLEtBQUssUUFBUSxHQUFHLEVBQUUsT0FBTyxTQUFPO0FBQzVELFdBQU8sV0FBVyxLQUFLLEdBQUc7QUFBQSxHQUMxQixFQUFFLE9BQU8sQ0FBQyxLQUFLLFFBQVE7QUFFdkIsVUFBTSxPQUFPLElBQ1gsVUFBVSxDQUFDLEVBQ1gsWUFBWSxFQUNaLFFBQVEsYUFBYSxDQUFDLElBQUcsTUFBTTtBQUMvQixhQUFP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OEJBQThCO0FBQ3BDLE1BQU0sdUNBQXVDO0FBQUEsSUFDekM7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFB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QUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFPO0FBQUEsSUFBSztBQUFBLElBQU87QUFBQSxJQUN6RjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDdEY7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUMzRjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUMzRjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDNUY7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDM0Y7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFDekY7QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLEVBQ2hCLENBQUM7QUFDRCxNQUFNLFlBQVksSUFBSSxZQUFZO0FBQUEsSUFDOUI7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFDeEY7QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUMxRjtBQUFBLElBQU07QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzNGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsRUFDOUYsQ0FBQztBQUNELE1BQU0sWUFBWSxJQUFJLFlBQVk7QUFBQSxJQUM5QjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBUTtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBUTtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzNGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxFQUMxRSxDQUFDO0FBQ0QsV0FBUyxhQUFhLENBQUMsS0FBSyxLQUFLO0FBQzdCLFFBQUksV0FBVyxLQUFLLEdBQUc7QUFDbkIsYUFBTztBQUNYLFdBQU87QUFBQTtBQUVYLFdBQVMsVUFBVSxDQUFDLEtBQUssS0FBSztBQUMxQixVQUFNLFNBQVMsQ0FBQyxXQUFXLFdBQVcsU0FBUztBQUMvQyxRQUFJLGFBQWE7QUFDakIsUUFBSSxJQUFJO0FBQ1IsUUFBSSxJQUFJO0FBQ1IsV0FBTyxhQUFhLE9BQU8sUUFBUTtBQUMvQixVQUFJLGVBQWUsT0FBTyxTQUFTLEtBQUssTUFBTSxHQUFHO0FBQzdDLGVBQU8sSUFBSTtBQUFBLE1BQ2Y7QUFDQSxZQUFNLFVBQVUsSUFBSSxJQUFJLFNBQVMsT0FBTyxZQUFZLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSztBQUM1RSxZQUFNLFVBQVUsSUFBSSxJQUFJLFNBQVMsT0FBTyxZQUFZLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSztBQUM1RSxVQUFJLFlBQVksS0FBTyxZQUFZLEdBQUs7QUFDcEMsWUFBSTtBQUNKLFlBQUk7QUFDSixVQUFFO0FBQUEsTUFDTixXQUNTLFlBQVksU0FBUztBQUMxQixVQUFFO0FBQ0YsVUFBRTtBQUFBLE1BQ04sV0FDUyxZQUFZLEdBQUc7QUFDcEIsVUFBRTtBQUFBLE1BQ04sV0FDUyxZQUFZLEdBQUc7QUFDcEIsVUFBRTtBQUFBLE1BQ04sT0FDSztBQUNELGVBQU8sVUFBVTtBQUFBO0FBQUEsSUFFekI7QUFDQSxXQUFPO0FBQUE7QUFRWDtBQUFBLFFBQU0seUNBQXlDLGlCQUFpQjtBQUFBLElBTzVELFdBQVcsQ0FBQyxZQUFZLFNBQVMsU0FBUztBQUN0QyxZQUFNLFlBQVksT0FBTztBQUN6QixXQUFLLFVBQVU7QUFBQTtBQUFBLElBT25CLFdBQVcsQ0FBQyxTQUFTO0FBQ2pCLGNBQVEsUUFBUSxJQUFJLGdCQUFnQixXQUFXLElBQUksS0FBSyxFQUFFLFlBQVksQ0FBQztBQUN2RSxVQUFJLFFBQVEsZ0JBQ0EsUUFBUSxTQUFTLFlBQVksUUFBUSxTQUFTLGNBQ3RELFFBQVEsS0FBSyxTQUFTLEdBQUc7QUFDekIsZ0JBQVEsUUFBUSxJQUFJLGdCQUFnQixnQkFBZ0IsT0FBTyxXQUFXLFFBQVEsSUFBSSxDQUFDO0FBQUEsTUFDdkY7QUFDQSxZQUFNLGVBQWU7QUFBQSxRQUNqQixRQUFRLE9BQU8sWUFBWTtBQUFBLFFBQzNCLEtBQUsscUJBQXFCLFNBQVMsZ0JBQWdCLGdCQUFnQjtBQUFBLFFBQ25FLEtBQUsscUJBQXFCLFNBQVMsZ0JBQWdCLGdCQUFnQjtBQUFBLFFBQ25FLEtBQUsscUJBQXFCLFNBQVMsZ0JBQWdCLGNBQWM7QUFBQSxRQUNqRSxLQUFLLHFCQUFxQixTQUFTLGdCQUFnQixXQUFXO0FBQUEsUUFDOUQsS0FBSyxxQkFBcUIsU0FBUyxnQkFBZ0IsWUFBWTtBQUFBLFFBQy9ELEtBQUsscUJBQXFCLFNBQVMsZ0JBQWdCLElBQUk7QUFBQSxRQUN2RCxLQUFLLHFCQUFxQixTQUFTLGdCQUFnQixpQkFBaUI7QUFBQSxRQUNwRSxLQUFLLHFCQUFxQixTQUFTLGdCQUFnQixRQUFRO0FBQUEsUUFDM0QsS0FBSyxxQkFBcUIsU0FBUyxnQkFBZ0IsYUFBYTtBQUFBLFFBQ2hFLEtBQUsscUJBQXFCLFNBQVMsZ0JBQWdCLG1CQUFtQjtBQUFBLFFBQ3RFLEtBQUsscUJBQXFCLFNBQVMsZ0JBQWdCLEtBQUs7QUFBQSxNQUM1RCxFQUFFLEtBQUssSUFBSSxJQUNQLE9BQ0EsS0FBSyw4QkFBOEIsT0FBTyxJQUMxQyxLQUFLLCtCQUErQixPQUFPO0FBQy9DLFlBQU0sWUFBWSxLQUFLLFFBQVEsa0JBQWtCLFlBQVk7QUFDN0QsY0FBUSxRQUFRLElBQUksZ0JBQWdCLGVBQWUsYUFBYSxLQUFLLFFBQVEsZUFBZSxXQUFXO0FBS3ZHLGFBQU87QUFBQTtBQUFBLElBU1gsb0JBQW9CLENBQUMsU0FBUyxZQUFZO0FBQ3RDLFlBQU0sUUFBUSxRQUFRLFFBQVEsSUFBSSxVQUFVO0FBQzVDLFdBQUssT0FBTztBQUNSLGVBQU87QUFBQSxNQUNYO0FBSUEsVUFBSSxlQUFlLGdCQUFnQixrQkFBa0IsVUFBVSxLQUFLO0FBQ2hFLGVBQU87QUFBQSxNQUNYO0FBQ0EsYUFBTztBQUFBO0FBQUEsSUFlWCw2QkFBNkIsQ0FBQyxTQUFTO0FBQ25DLFVBQUksZUFBZSxRQUFRLFFBQVEsYUFBYSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ2hFLGVBQU8sTUFBTSxLQUFLLFlBQVksRUFBRSxXQUFXLGdCQUFnQixrQkFBa0I7QUFBQSxPQUNoRjtBQUNELG1CQUFhLEtBQUssQ0FBQyxHQUFHLE1BQU07QUFDeEIsZUFBTyxjQUFjLEVBQUUsS0FBSyxZQUFZLEdBQUcsRUFBRSxLQUFLLFlBQVksQ0FBQztBQUFBLE9BQ2xFO0FBRUQscUJBQWUsYUFBYSxPQUFPLENBQUMsT0FBTyxPQUFPLFVBQVU7QUFDeEQsWUFBSSxRQUFRLEtBQUssTUFBTSxLQUFLLFlBQVksTUFBTSxNQUFNLFFBQVEsR0FBRyxLQUFLLFlBQVksR0FBRztBQUMvRSxpQkFBTztBQUFBLFFBQ1g7QUFDQSxlQUFPO0FBQUEsT0FDVjtBQUNELFVBQUksbUNBQW1DO0FBQ3ZDLG1CQUFhLFFBQVEsQ0FBQyxXQUFXO0FBQzdCLDRDQUFvQyxHQUFHLE9BQU8sS0FDekMsWUFBWSxFQUNaLFVBQVUsS0FBSyxPQUFPLE1BQU0sU0FBUztBQUFBLE9BQzdDO0FBQ0QsYUFBTztBQUFBO0FBQUEsSUFPWCw4QkFBOEIsQ0FBQyxTQUFTO0FBQ3BDLFlBQU0sT0FBTyxXQUFXLFFBQVEsR0FBRyxLQUFLO0FBQ3hDLFVBQUksOEJBQThCO0FBQ2xDLHFDQUErQixJQUFJLEtBQUssUUFBUSxjQUFjO0FBQzlELFlBQU0sVUFBVSxjQUFjLFFBQVEsR0FBRztBQUN6QyxZQUFNLG1CQUFtQixDQUFDO0FBQzFCLFVBQUksU0FBUztBQUNULGNBQU0sWUFBWSxDQUFDO0FBQ25CLG1CQUFXLE9BQU8sU0FBUztBQUN2QixjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssU0FBUyxHQUFHLEdBQUc7QUFDcEQsa0JBQU0sZUFBZSxJQUFJLFlBQVk7QUFDckMsNkJBQWlCLGdCQUFnQixRQUFRO0FBQ3pDLHNCQUFVLEtBQUssWUFBWTtBQUFBLFVBQy9CO0FBQUEsUUFDSjtBQUNBLGtCQUFVLEtBQUs7QUFDZixtQkFBVyxPQUFPLFdBQVc7QUFDekIseUNBQStCLEtBQUssT0FBTyxtQkFBbUIsaUJBQWlCLElBQUk7QUFBQSxRQUN2RjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQUE7QUFBQSxFQUVmO0FBUUE7QUFBQSxRQUFNLFdBQVc7QUFBQSxJQU9iLE1BQU0sQ0FBQyxhQUFhLFVBQVU7QUFDMUIsWUFBTSxJQUFJLE1BQU0sbURBQW1EO0FBQUE7QUFBQSxFQUUzRTtBQVNBO0FBQUEsUUFBTSxtQ0FBbUMsV0FBVztBQUFBLElBTWhELFdBQVcsQ0FBQyxhQUFhLFlBQVk7QUFDakMsWUFBTTtBQUNOLFdBQUssY0FBYztBQUNuQixXQUFLLGFBQWEsT0FBTyxLQUFLLFlBQVksUUFBUTtBQUFBO0FBQUEsSUFRdEQsTUFBTSxDQUFDLFlBQVksU0FBUztBQUN4QixhQUFPLElBQUksaUNBQWlDLFlBQVksU0FBUyxJQUFJO0FBQUE7QUFBQSxJQU96RSxpQkFBaUIsQ0FBQyxjQUFjO0FBQzVCLGFBQU8sT0FBTyxXQUFXLFVBQVUsS0FBSyxVQUFVLEVBQUUsT0FBTyxjQUFjLE1BQU0sRUFBRSxPQUFPLFFBQVE7QUFBQTtBQUFBLEVBRXhHO0FBUUE7QUFBQSxRQUFNLGtDQUFrQyxpQkFBaUI7QUFBQSxJQVFyRCxXQUFXLENBQUMsWUFBWSxTQUFTO0FBQzdCLFlBQU0sWUFBWSxPQUFPO0FBQUE7QUFBQSxFQUVqQztBQVVBO0FBQUEsUUFBTSw0QkFBNEIsV0FBVztBQUFBLElBT3pDLE1BQU0sQ0FBQyxZQUFZLFNBQVM7QUFDeEIsYUFBTyxJQUFJLDBCQUEwQixZQUFZLE9BQU87QUFBQTtBQUFBLEVBRWhFO0FBSUEsTUFBSTtBQUNKLFdBQVMsMEJBQTBCLEdBQUc7QUFDbEMsU0FBSyxvQkFBb0I7QUFDckIsMkJBQXFCLGlCQUFpQix3QkFBd0I7QUFBQSxJQUNsRTtBQUNBLFdBQU87QUFBQTtBQVFYLE1BQU0sMkJBQTJCO0FBS2pDLFdBQVMsb0JBQW9CLEdBQUc7QUFDNUIsV0FBTztBQUFBLE1BQ0gsTUFBTTtBQUFBLFdBQ0EsWUFBVyxDQUFDLFNBQVMsTUFBTTtBQUM3QixZQUFJLFNBQVMsUUFBUTtBQUNqQixpQkFBTyxLQUFLLE9BQU87QUFBQSxRQUN2QjtBQUNBLFlBQUksUUFBUSxXQUFXLFNBQVMsUUFBUSxXQUFXLFFBQVE7QUFDdkQsa0JBQVEsTUFBTSxnQkFBZ0IsUUFBUSxLQUFLLGFBQWEsV0FBVyx3QkFBd0IsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQztBQUFBLFFBQzlIO0FBQ0EsZ0JBQVEsUUFBUSxPQUFPLGdCQUFnQixNQUFNO0FBRTdDLGdCQUFRLFFBQVEsT0FBTyxnQkFBZ0IsY0FBYztBQUNyRCxlQUFPLEtBQUssT0FBTztBQUFBO0FBQUEsSUFFM0I7QUFBQTtBQVFKLE1BQU0seUJBQXlCO0FBSS9CLE1BQUk7QUFDSixXQUFVLENBQUMseUJBQXdCO0FBSS9CLDRCQUF1Qix3QkFBdUIsaUJBQWlCLEtBQUs7QUFJcEUsNEJBQXVCLHdCQUF1QixXQUFXLEtBQUs7QUFBQSxLQUMvRCwyQkFBMkIseUJBQXlCLENBQUMsRUFBRTtBQUUxRCxNQUFNLHdCQUF3QjtBQUFBLElBQzFCLG1CQUFtQixNQUFNO0FBQUEsSUFDekIsVUFBVTtBQUFBLElBQ1YsZ0JBQWdCLElBQUk7QUFBQSxJQUNwQixpQkFBaUIsdUJBQXVCO0FBQUEsSUFDeEMsZUFBZTtBQUFBLElBQ2YsZ0JBQWdCO0FBQUEsRUFDcEI7QUFDQSxNQUFNLGtCQUFrQjtBQUFBLElBQ3BCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNKO0FBQ0EsTUFBTSxvQkFBb0IsSUFBSSxnQkFBZ0IsV0FBVyw0QkFBNEI7QUFJckYsV0FBUyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsR0FBRztBQUN0QyxRQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSTtBQUN4QixVQUFNLG1CQUFtQixLQUFLLFFBQVEscUJBQXFCLFFBQVEsT0FBWSxZQUFJLEtBQUssc0JBQXNCO0FBQzlHLFVBQU0sWUFBWSxLQUFLLFFBQVEsY0FBYyxRQUFRLE9BQVksWUFBSSxLQUFLLHNCQUFzQjtBQUNoRyxVQUFNLGtCQUFrQixLQUFLLFFBQVEsb0JBQW9CLFFBQVEsT0FBWSxZQUFJLEtBQUssc0JBQXNCO0FBQzVHLFVBQU0scUJBQXFCLEtBQUssUUFBUSx1QkFBdUIsUUFBUSxPQUFZLFlBQUksS0FBSyxzQkFBc0I7QUFDbEgsVUFBTSxpQkFBaUIsS0FBSyxRQUFRLG1CQUFtQixRQUFRLE9BQVksWUFBSSxLQUFLLHNCQUFzQjtBQUMxRyxVQUFNLGtCQUFrQixLQUFLLFFBQVEsb0JBQW9CLFFBQVEsT0FBWSxZQUFJLEtBQUssc0JBQXNCO0FBQzVHLGFBQVMsV0FBVyxHQUFHLGdCQUFnQixTQUFTLFVBQVUsU0FBVTtBQUNoRSxVQUFJLEtBQUk7QUFDUixVQUFJLFdBQVcsVUFBVTtBQUNyQixlQUFPLEtBQUssMkJBQTJCLHVCQUF1QiwyQkFBMkI7QUFDekYsZUFBTztBQUFBLE1BQ1g7QUFDQSxVQUFJLE9BQU87QUFDUCxtQkFBVyxrQkFBa0IsaUJBQWlCO0FBQzFDLGNBQUksTUFBTSxLQUFLLFlBQVksRUFBRSxTQUFTLGNBQWMsS0FDaEQsTUFBTSxRQUFRLFlBQVksRUFBRSxTQUFTLGNBQWMsS0FDbEQsTUFBTSxRQUFRLE1BQU0sS0FBSyxTQUFTLEVBQUUsWUFBWSxNQUFNLGdCQUFpQjtBQUN4RSxtQkFBTyxLQUFLLDhCQUE4QixtQ0FBbUM7QUFDN0UsbUJBQU87QUFBQSxVQUNYO0FBQUEsUUFDSjtBQUNBLGFBQUssVUFBVSxRQUFRLFVBQWUsWUFBUyxZQUFJLE1BQU0sVUFBVSxrQkFDOUQsVUFBVSxRQUFRLFVBQWUsWUFBUyxZQUFJLE1BQU0sUUFBUSxXQUFXLGlDQUFpQyxJQUFJO0FBQzdHLGlCQUFPLEtBQUssaUZBQWlGO0FBQzdGLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFJQSxVQUFJLFlBQVksT0FBTztBQUNuQixjQUFNLGNBQWMsT0FBTSxNQUFLLGFBQWEsUUFBUSxhQUFrQixZQUFTLFlBQUksU0FBUyxZQUFZLFFBQVEsUUFBWSxZQUFJLE1BQUssVUFBVSxRQUFRLFVBQWUsWUFBUyxZQUFJLE1BQU0sZ0JBQWdCLFFBQVEsUUFBWSxZQUFJLE1BQUs7QUFDdE8sYUFBSyxrQkFBa0IsZUFBZSxLQUFLO0FBQ3ZDLGlCQUFPLEtBQUsscURBQXFEO0FBQ2pFLGlCQUFPO0FBQUEsUUFDWDtBQUVBLFlBQUksZUFBZSxPQUFPLGVBQWUsS0FBSztBQUMxQyxpQkFBTyxLQUFLLDJDQUEyQyxhQUFhO0FBQ3BFLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFnQkEsYUFBTztBQUFBO0FBRVgsYUFBUyxjQUFjLENBQUMsZ0JBQWdCLFNBQVM7QUFDN0MsVUFBSSxnQkFBZ0I7QUFDcEIsVUFBSSxnQkFBZ0I7QUFDaEIsZ0JBQVE7QUFBQSxlQUNDLHVCQUF1QjtBQUN4Qiw0QkFBZ0IsS0FBSyxLQUFLLEtBQUssSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLGlCQUFpQjtBQUMzRjtBQUFBLGVBQ0MsdUJBQXVCO0FBQ3hCLDRCQUFnQjtBQUNoQjtBQUFBO0FBQUEsTUFFWixPQUNLO0FBQ0Qsd0JBQWdCLEtBQUssT0FBTyxJQUFJO0FBQUE7QUFFcEMsYUFBTyxLQUFLLDBCQUEwQixpQkFBaUI7QUFDdkQsYUFBTztBQUFBO0FBRVgsV0FBTztBQUFBLE1BQ0gsTUFBTTtBQUFBLFdBQ0EsWUFBVyxDQUFDLFNBQVMsTUFBTTtBQUU3QixZQUFJLGdCQUFnQjtBQUNoQixrQkFBUSxNQUFNLGdCQUFnQixRQUFRLEtBQUssYUFBYSxXQUFXLFNBQVMsT0FBTyxLQUFLLE1BQU0saUJBQWlCLElBQUksQ0FBQyxDQUFDO0FBQUEsUUFDekg7QUFDQSxjQUFNLGFBQWEsUUFBUTtBQUMzQixjQUFNLGVBQWUsZ0JBQWdCLFdBQVcsUUFBUSxLQUFLLGFBQWEsSUFBSTtBQUM5RSxZQUFJLGtCQUFrQjtBQUN0QixZQUFJLFVBQVU7QUFDZCxZQUFJLGFBQWE7QUFDakIsWUFBSTtBQUNKLFlBQUk7QUFDSixlQUFPLFlBQVk7QUFDZixnQkFBTSxpQkFBaUIsb0JBQ2xCLGlCQUNBLENBQUMsT0FBTyxRQUFRLFNBQVMsRUFBRSxTQUFTLFFBQVEsTUFBTSxLQUNuRCxVQUFVLE1BQU07QUFDcEIsa0JBQVEsTUFBTSxpQkFBaUIsYUFBYTtBQUM1QyxxQkFBVztBQUNYLGtCQUFRO0FBQ1IsY0FBSTtBQUNBLG1CQUFPLEtBQUssMkJBQTJCLFdBQVcsaUJBQWlCLFlBQVksYUFBYTtBQUM1Rix1QkFBVyxNQUFNLEtBQUssT0FBTztBQUM3Qiw4QkFBa0Isb0JBQXFCLGtCQUFrQixTQUFTLFdBQVc7QUFBQSxtQkFFMUUsR0FBUDtBQUNJLGdCQUFJLGlCQUFpQixZQUFZLENBQUMsR0FBRztBQUNqQyxxQkFBTyxNQUFNLHVDQUF1QyxFQUFFLGtCQUFrQixFQUFFLE1BQU07QUFDaEYsc0JBQVE7QUFBQSxZQUNaLE9BQ0s7QUFDRCxxQkFBTyxNQUFNLHVDQUF1QyxTQUFTLGdCQUFnQixDQUFDLEdBQUc7QUFDakYsb0JBQU07QUFBQTtBQUFBO0FBR2QsdUJBQWEsWUFBWSxFQUFFLGdCQUFnQixTQUFTLFVBQVUsTUFBTSxDQUFDO0FBQ3JFLGNBQUksWUFBWTtBQUNaLGtCQUFNLE1BQU0sZUFBZSxnQkFBZ0IsT0FBTyxHQUFHLFFBQVEsYUFBYSxpQkFBaUI7QUFBQSxVQUMvRjtBQUNBO0FBQUEsUUFDSjtBQUNBLFlBQUksVUFBVTtBQUNWLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGNBQU0sVUFBVSxRQUFRLFVBQWUsWUFBSSxRQUFRLElBQUksaUJBQWlCLFVBQVUseUNBQXlDO0FBQUE7QUFBQSxJQUVuSTtBQUFBO0FBUUosTUFBTSx1Q0FBdUM7QUFJN0MsV0FBUyxnQ0FBZ0MsQ0FBQyxTQUFTO0FBQy9DLGFBQVMsV0FBVyxDQUFDLFNBQVM7QUFDMUIsY0FBUSxRQUFRLElBQUksZ0JBQWdCLFdBQVcsSUFBSSxLQUFLLEVBQUUsWUFBWSxDQUFDO0FBQ3ZFLFVBQUksUUFBUSxnQkFDQSxRQUFRLFNBQVMsWUFBWSxPQUFPLFNBQVMsUUFBUSxJQUFJLE1BQ2pFLFFBQVEsS0FBSyxTQUFTLEdBQUc7QUFDekIsZ0JBQVEsUUFBUSxJQUFJLGdCQUFnQixnQkFBZ0IsT0FBTyxXQUFXLFFBQVEsSUFBSSxDQUFDO0FBQUEsTUFDdkY7QUFDQSxZQUFNLGVBQWU7QUFBQSxRQUNqQixRQUFRLE9BQU8sWUFBWTtBQUFBLFFBQzNCLHFCQUFxQixTQUFTLGdCQUFnQixnQkFBZ0I7QUFBQSxRQUM5RCxxQkFBcUIsU0FBUyxnQkFBZ0IsZ0JBQWdCO0FBQUEsUUFDOUQscUJBQXFCLFNBQVMsZ0JBQWdCLGNBQWM7QUFBQSxRQUM1RCxxQkFBcUIsU0FBUyxnQkFBZ0IsV0FBVztBQUFBLFFBQ3pELHFCQUFxQixTQUFTLGdCQUFnQixZQUFZO0FBQUEsUUFDMUQscUJBQXFCLFNBQVMsZ0JBQWdCLElBQUk7QUFBQSxRQUNsRCxxQkFBcUIsU0FBUyxnQkFBZ0IsaUJBQWlCO0FBQUEsUUFDL0QscUJBQXFCLFNBQVMsZ0JBQWdCLFFBQVE7QUFBQSxRQUN0RCxxQkFBcUIsU0FBUyxnQkFBZ0IsYUFBYTtBQUFBLFFBQzNELHFCQUFxQixTQUFTLGdCQUFnQixtQkFBbUI7QUFBQSxRQUNqRSxxQkFBcUIsU0FBUyxnQkFBZ0IsS0FBSztBQUFBLE1BQ3ZELEVBQUUsS0FBSyxJQUFJLElBQ1AsT0FDQSw4QkFBOEIsT0FBTyxJQUNyQywrQkFBK0IsT0FBTztBQUMxQyxZQUFNLFlBQVksT0FBTyxXQUFXLFVBQVUsUUFBUSxVQUFVLEVBQzNELE9BQU8sY0FBYyxNQUFNLEVBQzNCLE9BQU8sUUFBUTtBQUNwQixjQUFRLFFBQVEsSUFBSSxnQkFBZ0IsZUFBZSxhQUFhLFFBQVEsZUFBZSxXQUFXO0FBQUE7QUFVdEcsYUFBUyxvQkFBb0IsQ0FBQyxTQUFTLFlBQVk7QUFDL0MsWUFBTSxRQUFRLFFBQVEsUUFBUSxJQUFJLFVBQVU7QUFDNUMsV0FBSyxPQUFPO0FBQ1IsZUFBTztBQUFBLE1BQ1g7QUFJQSxVQUFJLGVBQWUsZ0JBQWdCLGtCQUFrQixVQUFVLEtBQUs7QUFDaEUsZUFBTztBQUFBLE1BQ1g7QUFDQSxhQUFPO0FBQUE7QUFjWCxhQUFTLDZCQUE2QixDQUFDLFNBQVM7QUFDNUMsVUFBSSxlQUFlLENBQUM7QUFDcEIsa0JBQVksTUFBTSxVQUFVLFFBQVEsU0FBUztBQUN6QyxZQUFJLEtBQUssWUFBWSxFQUFFLFdBQVcsZ0JBQWdCLGtCQUFrQixHQUFHO0FBQ25FLHVCQUFhLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUFBLFFBQ3JDO0FBQUEsTUFDSjtBQUNBLG1CQUFhLEtBQUssQ0FBQyxHQUFHLE1BQU07QUFDeEIsZUFBTyxjQUFjLEVBQUUsS0FBSyxZQUFZLEdBQUcsRUFBRSxLQUFLLFlBQVksQ0FBQztBQUFBLE9BQ2xFO0FBRUQscUJBQWUsYUFBYSxPQUFPLENBQUMsT0FBTyxPQUFPLFVBQVU7QUFDeEQsWUFBSSxRQUFRLEtBQUssTUFBTSxLQUFLLFlBQVksTUFBTSxNQUFNLFFBQVEsR0FBRyxLQUFLLFlBQVksR0FBRztBQUMvRSxpQkFBTztBQUFBLFFBQ1g7QUFDQSxlQUFPO0FBQUEsT0FDVjtBQUNELFVBQUksbUNBQW1DO0FBQ3ZDLG1CQUFhLFFBQVEsQ0FBQyxXQUFXO0FBQzdCLDRDQUFvQyxHQUFHLE9BQU8sS0FDekMsWUFBWSxFQUNaLFVBQVUsS0FBSyxPQUFPLE1BQU0sU0FBUztBQUFBLE9BQzdDO0FBQ0QsYUFBTztBQUFBO0FBRVgsYUFBUyw4QkFBOEIsQ0FBQyxTQUFTO0FBQzdDLFlBQU0sT0FBTyxXQUFXLFFBQVEsR0FBRyxLQUFLO0FBQ3hDLFVBQUksOEJBQThCO0FBQ2xDLHFDQUErQixJQUFJLFFBQVEsY0FBYztBQUN6RCxZQUFNLFVBQVUsY0FBYyxRQUFRLEdBQUc7QUFDekMsWUFBTSxtQkFBbUIsQ0FBQztBQUMxQixVQUFJLFNBQVM7QUFDVCxjQUFNLFlBQVksQ0FBQztBQUNuQixtQkFBVyxPQUFPLFNBQVM7QUFDdkIsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFNBQVMsR0FBRyxHQUFHO0FBQ3BELGtCQUFNLGVBQWUsSUFBSSxZQUFZO0FBQ3JDLDZCQUFpQixnQkFBZ0IsUUFBUTtBQUN6QyxzQkFBVSxLQUFLLFlBQVk7QUFBQSxVQUMvQjtBQUFBLFFBQ0o7QUFDQSxrQkFBVSxLQUFLO0FBQ2YsbUJBQVcsT0FBTyxXQUFXO0FBQ3pCLHlDQUErQixLQUFLLE9BQU8sbUJBQW1CLGlCQUFpQixJQUFJO0FBQUEsUUFDdkY7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUFBO0FBRVgsV0FBTztBQUFBLE1BQ0gsTUFBTTtBQUFBLFdBQ0EsWUFBVyxDQUFDLFNBQVMsTUFBTTtBQUM3QixvQkFBWSxPQUFPO0FBQ25CLGVBQU8sS0FBSyxPQUFPO0FBQUE7QUFBQSxJQUUzQjtBQUFBO0FBZ0JKO0FBQUEsUUFBTSw2QkFBNkIsa0JBQWtCO0FBQUEsSUFRakQsV0FBVyxDQUFDLFlBQVksU0FBUztBQUM3QixZQUFNLFlBQVksT0FBTztBQUFBO0FBQUEsU0FPdkIsWUFBVyxDQUFDLFNBQVM7QUFDdkIsVUFBSSxTQUFTLFFBQVE7QUFDakIsZUFBTyxLQUFLLFlBQVksWUFBWSxPQUFPO0FBQUEsTUFDL0M7QUFDQSxVQUFJLFFBQVEsT0FBTyxZQUFZLE1BQU0sU0FBUyxRQUFRLE9BQU8sWUFBWSxNQUFNLFFBQVE7QUFDbkYsZ0JBQVEsTUFBTSxnQkFBZ0IsUUFBUSxLQUFLLGFBQWEsV0FBVyx3QkFBd0IsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQztBQUFBLE1BQzlIO0FBQ0EsY0FBUSxRQUFRLE9BQU8sZ0JBQWdCLE1BQU07QUFFN0MsY0FBUSxRQUFRLE9BQU8sZ0JBQWdCLGNBQWM7QUFDckQsYUFBTyxLQUFLLFlBQVksWUFBWSxPQUFPO0FBQUE7QUFBQSxFQUVuRDtBQU9BO0FBQUEsUUFBTSw0QkFBNEI7QUFBQSxJQU85QixNQUFNLENBQUMsWUFBWSxTQUFTO0FBQ3hCLGFBQU8sSUFBSSxxQkFBcUIsWUFBWSxPQUFPO0FBQUE7QUFBQSxFQUUzRDtBQU9BLE1BQU0sd0NBQXdDO0FBSTlDLFdBQVMsaUNBQWlDLEdBQUc7QUFDekMsYUFBUyxvQkFBb0IsQ0FBQyxTQUFTO0FBQ25DLFVBQUksUUFBUSxnQkFDQSxRQUFRLFNBQVMsWUFBWSxPQUFPLFNBQVMsUUFBUSxJQUFJLE1BQ2pFLFFBQVEsS0FBSyxTQUFTLEdBQUc7QUFDekIsZ0JBQVEsUUFBUSxJQUFJLGdCQUFnQixnQkFBZ0IsT0FBTyxXQUFXLFFBQVEsSUFBSSxDQUFDO0FBQUEsTUFDdkY7QUFBQTtBQUVKLFdBQU87QUFBQSxNQUNILE1BQU07QUFBQSxXQUNBLFlBQVcsQ0FBQyxTQUFTLE1BQU07QUFDN0IsNkJBQXFCLE9BQU87QUFDNUIsZUFBTyxLQUFLLE9BQU87QUFBQTtBQUFBLElBRTNCO0FBQUE7QUFVSixXQUFTLGNBQWMsQ0FBQyxVQUFVO0FBQzlCLFNBQUssbUJBQW1CLGFBQWEsVUFBVTtBQUMzQyxhQUFPO0FBQUEsSUFDWDtBQUNBLFVBQU0sZUFBZTtBQUNyQixXQUFRLE1BQU0sUUFBUSxhQUFhLFNBQVMsWUFDakMsYUFBYSxZQUFZLG1CQUN6QixhQUFhLDJCQUEyQjtBQUFBO0FBVXZEO0FBQUEsUUFBTSxTQUFTO0FBQUEsSUFPWCxXQUFXLENBQUMsV0FBVyxVQUFVLENBQUMsR0FBRztBQUNqQyxXQUFLLFlBQVk7QUFDakIsV0FBSyxVQUFVO0FBQUE7QUFBQSxJQVFuQixzQkFBc0IsR0FBRztBQUNyQixhQUFPO0FBQUEsUUFDSCxZQUFZLEtBQUssUUFBUTtBQUFBLFFBQ3pCLHdCQUF3QixLQUFLO0FBQUEsTUFDakM7QUFBQTtBQUFBLEVBRVI7QUFRQSxXQUFTLFdBQVcsQ0FBQyxZQUFZLGtCQUFrQixDQUFDLEdBQUc7QUFDbkQsU0FBSyxZQUFZO0FBQ2IsbUJBQWEsSUFBSTtBQUFBLElBQ3JCO0FBQ0EsVUFBTSxXQUFXLElBQUksU0FBUyxDQUFDLEdBQUcsZUFBZTtBQUNqRCxhQUFTLGNBQWM7QUFDdkIsV0FBTztBQUFBO0FBRVgsV0FBUyx3QkFBd0IsQ0FBQyxVQUFVO0FBQ3hDLFVBQU0sd0JBQXdCO0FBQUEsTUFDMUI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNKO0FBQ0EsUUFBSSxTQUFTLFVBQVUsUUFBUTtBQUMzQixZQUFNLGlCQUFpQixTQUFTLFVBQVUsT0FBTyxDQUFDLFlBQVk7QUFDMUQsZ0JBQVEsc0JBQXNCLEtBQUssQ0FBQyxpQkFBaUIsYUFBYSxPQUFPLENBQUM7QUFBQSxPQUM3RTtBQUNELFVBQUksZUFBZSxRQUFRO0FBQ3ZCLGNBQU0sY0FBYyxlQUFlLEtBQUssQ0FBQyxZQUFZLHdCQUF3QixPQUFPLENBQUM7QUFFckYsZUFBTztBQUFBLFVBQ0gsaUJBQWlCLGVBQWUsaUNBQWlDLGNBQWM7QUFBQSxVQUMvRSxZQUFZO0FBQUEsUUFDaEI7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUNBO0FBQUE7QUFFSixXQUFTLG9CQUFvQixDQUFDLFVBQVU7QUFDcEMsUUFBSTtBQUNKLFVBQU0sS0FBSyxTQUFTLFdBQVcsWUFBWSxhQUFhLElBQUksY0FBYyxNQUFNLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztBQUN6RyxRQUFJLGFBQWEsU0FBUztBQUMxQixTQUFLLFlBQVk7QUFDYixtQkFBYSxXQUFXLGVBQWUsa0JBQWtCLFFBQVEsSUFBSSwyQkFBMkI7QUFDaEcsZUFBUyxrQkFBa0I7QUFBQSxJQUMvQjtBQUNBLFFBQUksZUFBZSxTQUFTO0FBQzVCLFNBQUssY0FBYztBQUNmLFlBQU0saUJBQWlCLCtCQUErQjtBQUN0RCxZQUFNLGtCQUFrQixZQUFZLG9CQUFvQixZQUFZLGlCQUFpQixrQkFDL0UsR0FBRyxZQUFZLGlCQUFpQixtQkFBbUIsbUJBQ25ELEdBQUc7QUFDVCxxQkFBZSxXQUFXLHFCQUFxQixPQUFPLE9BQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxXQUFXLEdBQUcsRUFBRSxnQkFBZ0I7QUFBQSxRQUN2Ryw4QkFBOEI7QUFBQSxRQUM5QixrQ0FBa0M7QUFBQSxRQUNsQyxRQUFRLE9BQU87QUFBQSxNQUNuQixHQUFHLGtCQUFrQjtBQUFBLFFBQ2pCO0FBQUEsTUFDSixHQUFHLHNCQUFzQjtBQUFBLFFBQ3JCLGNBQWMsUUFBUTtBQUFBLFFBQ3RCLG1CQUFtQjtBQUFBLFVBQ2YsS0FBSztBQUFBLFlBR0QsWUFBWTtBQUFBLFVBQ2hCO0FBQUEsUUFDSjtBQUFBLE1BQ0osR0FBRyx3QkFBd0I7QUFBQSxRQUN2QixVQUFVLFFBQVE7QUFBQSxRQUNsQixtQkFBbUI7QUFBQSxVQUNmLEtBQUs7QUFBQSxZQUdELFlBQVk7QUFBQSxVQUNoQjtBQUFBLFFBQ0o7QUFBQSxNQUNKLEVBQUUsQ0FBQyxDQUFDO0FBQ1IsbUJBQWEsYUFBYSxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQzVDLG1CQUFhLGFBQWEsRUFBRSxNQUFNLGlCQUFpQiw2QkFBNkIsQ0FBQztBQUNqRixtQkFBYSxVQUFVLGtDQUFrQyxDQUFDO0FBQzFELG1CQUFhLFVBQVUsbUJBQW1CLFlBQVksWUFBWSxHQUFHLEVBQUUsT0FBTyxRQUFRLENBQUM7QUFDdkYsbUJBQWEsVUFBVSxxQkFBcUIsQ0FBQztBQUM3QyxZQUFNLG1CQUFtQix5QkFBeUIsUUFBUTtBQUMxRCxVQUFJLGtCQUFrQjtBQUNsQixxQkFBYSxVQUFVLGlCQUFpQixpQkFBaUIsaUJBQWlCLGFBQWEsRUFBRSxZQUFZLFFBQVEsSUFBSSxTQUFTO0FBQUEsTUFDOUg7QUFDQSxZQUFNLGFBQWEsMEJBQTBCLFFBQVE7QUFDckQsVUFBSSxTQUFTLGtCQUFrQixVQUFVLEdBQUc7QUFDeEMscUJBQWEsVUFBVSxpQkFBaUIsZ0NBQWdDO0FBQUEsVUFDcEU7QUFBQSxVQUNBLFNBQVMsS0FBSyxZQUFZLGNBQWMsUUFBUSxPQUFZLFlBQUksS0FBSztBQUFBLFVBQ3JFLG9CQUFvQixFQUFFLDZCQUE2QixXQUFXLGtDQUFrQztBQUFBLFFBQ3BHLENBQUMsR0FBRyxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQUEsTUFDekIsV0FDUyxzQkFBc0IsNEJBQTRCO0FBQ3ZELHFCQUFhLFVBQVUsaUNBQWlDO0FBQUEsVUFDcEQsYUFBYSxXQUFXO0FBQUEsVUFDeEIsWUFBWSxXQUFXO0FBQUEsUUFDM0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxPQUFPLENBQUM7QUFBQSxNQUN6QjtBQUNBLGVBQVMsZ0JBQWdCO0FBQUEsSUFDN0I7QUFDQSxXQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFdBQVcsR0FBRyxFQUFFLHlCQUF5QixNQUFNLFlBQVksVUFBVSxhQUFhLENBQUM7QUFBQTtBQUU5SCxXQUFTLHlCQUF5QixDQUFDLFVBQVU7QUFFekMsUUFBSSxTQUFTLGFBQWE7QUFDdEIsYUFBTyxTQUFTO0FBQUEsSUFDcEI7QUFFQSxRQUFJLGFBQWEsSUFBSTtBQUNyQixlQUFXLFdBQVcsU0FBUyxXQUFXO0FBQ3RDLFVBQUksU0FBUyxrQkFBa0IsUUFBUSxVQUFVLEdBQUc7QUFHaEQscUJBQWEsUUFBUTtBQUFBLE1BQ3pCLFdBQ1MsNkJBQTZCLE9BQU8sR0FBRztBQUM1QyxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxXQUFPO0FBQUE7QUFFWCxXQUFTLDRCQUE0QixDQUFDLFNBQVM7QUFDM0MsUUFBSSxtQkFBbUIsNEJBQTRCO0FBQy9DLGFBQU87QUFBQSxJQUNYO0FBQ0EsV0FBTyxRQUFRLFlBQVksU0FBUztBQUFBO0FBRXhDLFdBQVMscUJBQXFCLENBQUMsU0FBUztBQUNwQyxRQUFJLG1CQUFtQixxQkFBcUI7QUFDeEMsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPLFFBQVEsWUFBWSxTQUFTO0FBQUE7QUFFeEMsV0FBUyw0QkFBNEIsQ0FBQyxTQUFTO0FBQzNDLFdBQU8sU0FBUyxrQkFBa0IsUUFBUSxVQUFVO0FBQUE7QUFFeEQsV0FBUyw2QkFBNkIsQ0FBQyxTQUFTO0FBQzVDLFFBQUksbUJBQW1CLDZCQUE2QjtBQUNoRCxhQUFPO0FBQUEsSUFDWDtBQUNBLFdBQU8sUUFBUSxZQUFZLFNBQVM7QUFBQTtBQUV4QyxXQUFTLDJCQUEyQixDQUFDLFNBQVM7QUFDMUMsUUFBSSxtQkFBbUIsMkJBQTJCO0FBQzlDLGFBQU87QUFBQSxJQUNYO0FBQ0EsV0FBTyxRQUFRLFlBQVksU0FBUztBQUFBO0FBRXhDLFdBQVMsK0JBQStCLENBQUMsU0FBUztBQUM5QyxXQUFPLFFBQVEsWUFBWSxTQUFTO0FBQUE7QUFFeEMsV0FBUyx1QkFBdUIsQ0FBQyxTQUFTO0FBQ3RDLFdBQU8sUUFBUSxZQUFZLFNBQVM7QUFBQTtBQUV4QyxXQUFTLHVCQUF1QixDQUFDLFNBQVM7QUFDdEMsVUFBTSxnQkFBZ0I7QUFBQSxNQUNsQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0o7QUFDQSxVQUFNLGlCQUFpQjtBQUFBLE1BQ25CLGFBQWEsT0FBTyxZQUFZO0FBQzVCLGVBQU87QUFBQSxVQUNIO0FBQUEsVUFDQSxTQUFTLFFBQVEsUUFBUSxNQUFNO0FBQUEsVUFDL0IsUUFBUTtBQUFBLFFBQ1o7QUFBQTtBQUFBLElBRVI7QUFDQSxVQUFNLDJCQUEyQjtBQUFBLE1BQzdCLEdBQUcsQ0FBQyxXQUFXLFVBQVU7QUFBQTtBQUFBLE1BR3pCLFNBQVMsQ0FBQyxXQUFXO0FBQ2pCLGVBQU87QUFBQTtBQUFBLElBRWY7QUFDQSxVQUFNLGlCQUFpQixRQUFRLE9BQU8sZ0JBQWdCLHdCQUF3QjtBQUM5RSxVQUFNLGFBQWEsZUFBZSxZQUFZO0FBRTlDLFdBQU8sY0FBYyxLQUFLLENBQUMsb0JBQW9CO0FBQzNDLGFBQU8sV0FBVyxXQUFXLGVBQWU7QUFBQSxLQUMvQztBQUFBO0FBVUwsTUFBTSx3QkFBd0I7QUFBQSxJQUMxQixnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLHNCQUFzQjtBQUFBLFVBQ2xCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULGNBQWM7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxjQUNMLE1BQU07QUFBQSxnQkFDRixNQUFNO0FBQUEsZ0JBQ04sV0FBVztBQUFBLGNBQ2Y7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHVCQUF1QjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsdUJBQXVCO0FBQUEsVUFDbkIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLFVBQVU7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDSCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxrQkFBa0I7QUFBQSxJQUNwQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsYUFBYTtBQUFBLFlBQ1Qsa0JBQWtCO0FBQUEsVUFDdEI7QUFBQSxVQUNBLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sVUFBVTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sV0FBVztBQUFBLElBQ2IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdCQUFnQjtBQUFBLFVBQ1osZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixhQUFhO0FBQUEsWUFDVCxrQkFBa0I7QUFBQSxVQUN0QjtBQUFBLFVBQ0EsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxnQkFBZ0I7QUFBQSxJQUNsQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxzQkFBc0I7QUFBQSxVQUNsQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLDBCQUEwQjtBQUFBLFVBQ3RCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sZUFBZTtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLDJCQUEyQjtBQUFBLFVBQ3ZCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sd0JBQXdCO0FBQUEsSUFDMUIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0saUJBQWlCO0FBQUEsSUFDbkIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsUUFBUSxhQUFhLGFBQWE7QUFBQSxVQUN0RDtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sZ0NBQWdDO0FBQUEsSUFDbEMsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxjQUFjO0FBQUEsVUFDZCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGdCQUNOLFdBQVc7QUFBQSxjQUNmO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sZ0JBQWdCO0FBQUEsSUFDbEIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLEVBQUU7QUFBQSxVQUN0QztBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHNCQUFzQjtBQUFBLElBQ3hCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxVQUFVLFVBQVU7QUFBQSxVQUN4QztBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWU7QUFBQSxjQUNYO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFlBQVksT0FBTztBQUFBLFVBQ3ZDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLGFBQWEsTUFBTTtBQUFBLFVBQ3ZDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsdUJBQXVCO0FBQUEsVUFDbkIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHdCQUF3QjtBQUFBLFVBQ3BCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0NBQWdDO0FBQUEsVUFDNUIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHdCQUF3QjtBQUFBLFVBQ3BCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EseUNBQXlDO0FBQUEsVUFDckMsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxVQUFVO0FBQUEsSUFDWixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxvQkFBb0I7QUFBQSxJQUN0QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGdCQUFnQjtBQUFBLFVBQ1osZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsT0FBTztBQUFBLFVBQ0gsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxvQkFBb0I7QUFBQSxJQUN0QixnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDSCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU87QUFBQSxVQUNILGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULGNBQWM7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxjQUNMLE1BQU07QUFBQSxnQkFDRixNQUFNO0FBQUEsZ0JBQ04sV0FBVztBQUFBLGNBQ2Y7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxpQkFBaUI7QUFBQSxJQUNuQixnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLFdBQVc7QUFBQSxJQUNiLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsY0FBYztBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLGNBQ0wsTUFBTTtBQUFBLGdCQUNGLE1BQU07QUFBQSxnQkFDTixXQUFXO0FBQUEsY0FDZjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sVUFBVTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixLQUFLO0FBQUEsVUFDRCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU87QUFBQSxVQUNILGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sbUJBQW1CO0FBQUEsSUFDckIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixJQUFJO0FBQUEsVUFDQSxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sZUFBZTtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0JBQStCO0FBQUEsSUFDakMsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNKLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxzQkFBc0I7QUFBQSxJQUN4QixnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxjQUNMLE1BQU07QUFBQSxnQkFDRixNQUFNO0FBQUEsZ0JBQ04sV0FBVztBQUFBLGNBQ2Y7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLG1CQUFtQjtBQUFBLElBQ3JCLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxrQkFBa0I7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxFQUFFO0FBQUEsVUFDdEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxRQUNBLDJCQUEyQjtBQUFBLFVBQ3ZCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLEVBQUU7QUFBQSxVQUN0QztBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxXQUFXO0FBQUEsSUFDYixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsYUFBYTtBQUFBLFVBQ2IsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx5QkFBeUI7QUFBQSxJQUMzQixnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLGFBQWEsWUFBWSxZQUFZO0FBQUEsVUFDekQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsVUFBVSxVQUFVO0FBQUEsVUFDeEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlO0FBQUEsY0FDWDtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxZQUFZLE9BQU87QUFBQSxVQUN2QztBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNKLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFdBQVcsV0FBVyxXQUFXLFFBQVE7QUFBQSxVQUM3RDtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsdUJBQXVCO0FBQUEsVUFDbkIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx3QkFBd0I7QUFBQSxVQUNwQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWU7QUFBQSxjQUNYO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZTtBQUFBLGNBQ1g7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsMkJBQTJCO0FBQUEsVUFDdkIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxRQUFRLFVBQVU7QUFBQSxVQUN0QztBQUFBLFFBQ0o7QUFBQSxRQUNBLGdCQUFnQjtBQUFBLFVBQ1osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSw2QkFBNkI7QUFBQSxVQUN6QixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHdCQUF3QjtBQUFBLFVBQ3BCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxXQUFXLFlBQVksUUFBUTtBQUFBLFVBQ25EO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxvQ0FBb0M7QUFBQSxJQUN0QyxnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNKLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sMkJBQTJCO0FBQUEsSUFDN0IsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGdCQUNOLFdBQVc7QUFBQSxjQUNmO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGdCQUNOLFdBQVc7QUFBQSxjQUNmO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxhQUFhO0FBQUEsSUFDZixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sa0JBQWtCO0FBQUEsSUFDcEIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGNBQ1Y7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxjQUNMLE1BQU07QUFBQSxnQkFDRixNQUFNO0FBQUEsY0FDVjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLGNBQ0wsTUFBTTtBQUFBLGdCQUNGLE1BQU07QUFBQSxjQUNWO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxZQUFZO0FBQUEsSUFDZCxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsY0FBYztBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLGNBQ0wsTUFBTTtBQUFBLGdCQUNGLE1BQU07QUFBQSxnQkFDTixXQUFXO0FBQUEsY0FDZjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxjQUFjO0FBQUEsVUFDZCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGdCQUNOLFdBQVc7QUFBQSxjQUNmO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxRQUFRO0FBQUEsSUFDVixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxXQUFXO0FBQUEsSUFDYixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxjQUNMLE1BQU07QUFBQSxnQkFDRixNQUFNO0FBQUEsZ0JBQ04sV0FBVztBQUFBLGNBQ2Y7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxjQUNMLE1BQU07QUFBQSxnQkFDRixNQUFNO0FBQUEsZ0JBQ04sV0FBVztBQUFBLGNBQ2Y7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxZQUFZO0FBQUEsSUFDZCxnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE9BQU87QUFBQSxVQUNILGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsS0FBSztBQUFBLFVBQ0QsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxhQUFhO0FBQUEsSUFDZixnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE9BQU87QUFBQSxVQUNILGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsS0FBSztBQUFBLFVBQ0QsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxlQUFlO0FBQUEsSUFDakIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHFCQUFxQjtBQUFBLElBQ3ZCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxjQUFjO0FBQUEsSUFDaEIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsYUFBYSxRQUFRLFNBQVMsU0FBUztBQUFBLFVBQzNEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsNEJBQTRCO0FBQUEsVUFDeEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx1QkFBdUI7QUFBQSxVQUNuQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLFFBQ0EsMEJBQTBCO0FBQUEsVUFDdEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sRUFBRTtBQUFBLFVBQ25DO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNkJBQTZCO0FBQUEsSUFDL0IsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sd0JBQXdCO0FBQUEsSUFDMUIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0scUJBQXFCO0FBQUEsSUFDdkIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxjQUFjO0FBQUEsVUFDZCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGdCQUNOLFdBQVc7QUFBQSxjQUNmO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxhQUFhO0FBQUEsSUFDZixnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU87QUFBQSxVQUNILGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sOEJBQThCO0FBQUEsSUFDaEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sdUNBQXVDO0FBQUEsSUFDekMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDhCQUE4QjtBQUFBLElBQ2hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHVDQUF1QztBQUFBLElBQ3pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw4QkFBOEI7QUFBQSxJQUNoQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHVDQUF1QztBQUFBLElBQ3pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxzQ0FBc0M7QUFBQSxJQUN4QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwrQ0FBK0M7QUFBQSxJQUNqRCxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0scUNBQXFDO0FBQUEsSUFDdkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw4Q0FBOEM7QUFBQSxJQUNoRCxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0JBQStCO0FBQUEsSUFDakMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZTtBQUFBLGNBQ1g7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlO0FBQUEsY0FDWDtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdDQUFnQztBQUFBLFVBQzVCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx3Q0FBd0M7QUFBQSxJQUMxQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNEJBQTRCO0FBQUEsSUFDOUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxxQ0FBcUM7QUFBQSxJQUN2QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNEJBQTRCO0FBQUEsSUFDOUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxxQ0FBcUM7QUFBQSxJQUN2QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0seUJBQXlCO0FBQUEsSUFDM0IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sa0NBQWtDO0FBQUEsSUFDcEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGdDQUFnQztBQUFBLElBQ2xDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsd0JBQXdCO0FBQUEsVUFDeEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsRUFBRTtBQUFBLFVBQ3RDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxZQUFZLE9BQU87QUFBQSxVQUN2QztBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWU7QUFBQSxjQUNYO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFVBQVUsVUFBVTtBQUFBLFVBQ3hDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGtCQUFrQjtBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLGFBQWEsTUFBTTtBQUFBLFVBQ3ZDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsdUJBQXVCO0FBQUEsVUFDbkIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHdCQUF3QjtBQUFBLFVBQ3BCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsNkJBQTZCO0FBQUEsVUFDekIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx5Q0FBeUM7QUFBQSxVQUNyQyxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0seUNBQXlDO0FBQUEsSUFDM0MsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHlCQUF5QjtBQUFBLElBQzNCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sa0NBQWtDO0FBQUEsSUFDcEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDhCQUE4QjtBQUFBLElBQ2hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHVDQUF1QztBQUFBLElBQ3pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxrQ0FBa0M7QUFBQSxJQUNwQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGtCQUFrQjtBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLGFBQWEsTUFBTTtBQUFBLFVBQ3ZDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDJDQUEyQztBQUFBLElBQzdDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxrQ0FBa0M7QUFBQSxJQUNwQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwyQ0FBMkM7QUFBQSxJQUM3QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sMEJBQTBCO0FBQUEsSUFDNUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxtQ0FBbUM7QUFBQSxJQUNyQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0seUJBQXlCO0FBQUEsSUFDM0IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxrQ0FBa0M7QUFBQSxJQUNwQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sOEJBQThCO0FBQUEsSUFDaEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx1Q0FBdUM7QUFBQSxJQUN6QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sOEJBQThCO0FBQUEsSUFDaEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sdUNBQXVDO0FBQUEsSUFDekMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLCtCQUErQjtBQUFBLElBQ2pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHdDQUF3QztBQUFBLElBQzFDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwrQkFBK0I7QUFBQSxJQUNqQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sd0NBQXdDO0FBQUEsSUFDMUMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDZCQUE2QjtBQUFBLElBQy9CLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHNDQUFzQztBQUFBLElBQ3hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw2QkFBNkI7QUFBQSxJQUMvQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxzQ0FBc0M7QUFBQSxJQUN4QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sOEJBQThCO0FBQUEsSUFDaEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sdUNBQXVDO0FBQUEsSUFDekMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHNDQUFzQztBQUFBLElBQ3hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwrQ0FBK0M7QUFBQSxJQUNqRCxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sMkNBQTJDO0FBQUEsSUFDN0MsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLG9EQUFvRDtBQUFBLElBQ3RELGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxpQ0FBaUM7QUFBQSxJQUNuQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlO0FBQUEsY0FDWDtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWU7QUFBQSxjQUNYO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0NBQWdDO0FBQUEsVUFDNUIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwwQ0FBMEM7QUFBQSxJQUM1QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sc0JBQXNCO0FBQUEsSUFDeEIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsd0JBQXdCO0FBQUEsVUFDeEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsRUFBRTtBQUFBLFVBQ3RDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsMkJBQTJCO0FBQUEsVUFDdkIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx3QkFBd0I7QUFBQSxVQUNwQixnQkFBZ0I7QUFBQSxVQUNoQix3QkFBd0I7QUFBQSxVQUN4QixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxFQUFFO0FBQUEsVUFDdEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsYUFBYSxZQUFZLFlBQVk7QUFBQSxVQUN6RDtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx1QkFBdUI7QUFBQSxVQUNuQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNKLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxXQUFXLFdBQVcsV0FBVyxRQUFRO0FBQUEsVUFDN0Q7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsWUFBWSxPQUFPO0FBQUEsVUFDdkM7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlO0FBQUEsY0FDWDtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxVQUFVLFVBQVU7QUFBQSxVQUN4QztBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxrQkFBa0I7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHlCQUF5QjtBQUFBLFVBQ3JCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdCQUFnQjtBQUFBLFVBQ1osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSw2QkFBNkI7QUFBQSxVQUN6QixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHdCQUF3QjtBQUFBLFVBQ3BCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxXQUFXLFlBQVksUUFBUTtBQUFBLFVBQ25EO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0JBQStCO0FBQUEsSUFDakMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDJCQUEyQjtBQUFBLElBQzdCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLHdCQUF3QjtBQUFBLFVBQ3hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLEVBQUU7QUFBQSxVQUN0QztBQUFBLFFBQ0o7QUFBQSxRQUNBLDJCQUEyQjtBQUFBLFVBQ3ZCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esd0JBQXdCO0FBQUEsVUFDcEIsZ0JBQWdCO0FBQUEsVUFDaEIsd0JBQXdCO0FBQUEsVUFDeEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsRUFBRTtBQUFBLFVBQ3RDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLGFBQWEsWUFBWSxZQUFZO0FBQUEsVUFDekQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsdUJBQXVCO0FBQUEsVUFDbkIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsV0FBVyxXQUFXLFdBQVcsUUFBUTtBQUFBLFVBQzdEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFlBQVksT0FBTztBQUFBLFVBQ3ZDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZTtBQUFBLGNBQ1g7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsVUFBVSxVQUFVO0FBQUEsVUFDeEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EseUJBQXlCO0FBQUEsVUFDckIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGtCQUFrQjtBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxRQUFRLFVBQVU7QUFBQSxVQUN0QztBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsNkJBQTZCO0FBQUEsVUFDekIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx3QkFBd0I7QUFBQSxVQUNwQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsV0FBVyxZQUFZLFFBQVE7QUFBQSxVQUNuRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxvQ0FBb0M7QUFBQSxJQUN0QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sb0JBQW9CO0FBQUEsSUFDdEIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw2QkFBNkI7QUFBQSxJQUMvQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sc0JBQXNCO0FBQUEsSUFDeEIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwrQkFBK0I7QUFBQSxJQUNqQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sdUJBQXVCO0FBQUEsSUFDekIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGdDQUFnQztBQUFBLElBQ2xDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw0QkFBNEI7QUFBQSxJQUM5QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHFDQUFxQztBQUFBLElBQ3ZDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxtQ0FBbUM7QUFBQSxJQUNyQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSwwQkFBMEI7QUFBQSxVQUN0QixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHdCQUF3QjtBQUFBLFVBQ3BCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxXQUFXLFlBQVksUUFBUTtBQUFBLFVBQ25EO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNENBQTRDO0FBQUEsSUFDOUMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHNDQUFzQztBQUFBLElBQ3hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLCtDQUErQztBQUFBLElBQ2pELGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwwQkFBMEI7QUFBQSxJQUM1QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLG1DQUFtQztBQUFBLElBQ3JDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx5QkFBeUI7QUFBQSxJQUMzQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxrQ0FBa0M7QUFBQSxJQUNwQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sMEJBQTBCO0FBQUEsSUFDNUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sbUNBQW1DO0FBQUEsSUFDckMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDBCQUEwQjtBQUFBLElBQzVCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxtQ0FBbUM7QUFBQSxJQUNyQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sd0JBQXdCO0FBQUEsSUFDMUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0saUNBQWlDO0FBQUEsSUFDbkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHlCQUF5QjtBQUFBLElBQzNCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGtDQUFrQztBQUFBLElBQ3BDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx3QkFBd0I7QUFBQSxJQUMxQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxpQ0FBaUM7QUFBQSxJQUNuQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNEJBQTRCO0FBQUEsSUFDOUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxxQ0FBcUM7QUFBQSxJQUN2QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sOEJBQThCO0FBQUEsSUFDaEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsV0FBVyxXQUFXLFdBQVcsUUFBUTtBQUFBLFVBQzdEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx1Q0FBdUM7QUFBQSxJQUN6QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0seUJBQXlCO0FBQUEsSUFDM0IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGtDQUFrQztBQUFBLElBQ3BDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw4QkFBOEI7QUFBQSxJQUNoQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHVDQUF1QztBQUFBLElBQ3pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxxQkFBcUI7QUFBQSxJQUN2QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw4QkFBOEI7QUFBQSxJQUNoQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNEJBQTRCO0FBQUEsSUFDOUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZTtBQUFBLGNBQ1g7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlO0FBQUEsY0FDWDtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdDQUFnQztBQUFBLFVBQzVCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0scUNBQXFDO0FBQUEsSUFDdkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLG1CQUFtQjtBQUFBLElBQ3JCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQix3QkFBd0I7QUFBQSxVQUN4QixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxFQUFFO0FBQUEsVUFDdEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsYUFBYSxZQUFZLFlBQVk7QUFBQSxVQUN6RDtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsdUJBQXVCO0FBQUEsVUFDbkIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsV0FBVyxXQUFXLFdBQVcsUUFBUTtBQUFBLFVBQzdEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFlBQVksT0FBTztBQUFBLFVBQ3ZDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZTtBQUFBLGNBQ1g7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsVUFBVSxVQUFVO0FBQUEsVUFDeEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx5QkFBeUI7QUFBQSxVQUNyQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDRCQUE0QjtBQUFBLElBQzlCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxxQkFBcUI7QUFBQSxJQUN2QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDhCQUE4QjtBQUFBLElBQ2hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxxQkFBcUI7QUFBQSxJQUN2QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDhCQUE4QjtBQUFBLElBQ2hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx3QkFBd0I7QUFBQSxJQUMxQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGlDQUFpQztBQUFBLElBQ25DLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw2QkFBNkI7QUFBQSxJQUMvQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxzQ0FBc0M7QUFBQSxJQUN4QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNEJBQTRCO0FBQUEsSUFDOUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxxQ0FBcUM7QUFBQSxJQUN2QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sb0NBQW9DO0FBQUEsSUFDdEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw2Q0FBNkM7QUFBQSxJQUMvQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0JBQStCO0FBQUEsSUFDakMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHdDQUF3QztBQUFBLElBQzFDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxtQ0FBbUM7QUFBQSxJQUNyQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNENBQTRDO0FBQUEsSUFDOUMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHdCQUF3QjtBQUFBLElBQzFCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0saUNBQWlDO0FBQUEsSUFDbkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHNDQUFzQztBQUFBLElBQ3hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0NBQStDO0FBQUEsSUFDakQsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGlDQUFpQztBQUFBLElBQ25DLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxXQUFXLFdBQVcsV0FBVyxRQUFRO0FBQUEsVUFDN0Q7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDBDQUEwQztBQUFBLElBQzVDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwwQkFBMEI7QUFBQSxJQUM1QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLG1DQUFtQztBQUFBLElBQ3JDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwrQkFBK0I7QUFBQSxJQUNqQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esa0JBQWtCO0FBQUEsVUFDZCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHlCQUF5QjtBQUFBLFVBQ3JCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sd0NBQXdDO0FBQUEsSUFDMUMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHNDQUFzQztBQUFBLElBQ3hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGtCQUFrQjtBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx5QkFBeUI7QUFBQSxVQUNyQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLCtDQUErQztBQUFBLElBQ2pELGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx3QkFBd0I7QUFBQSxJQUMxQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxpQ0FBaUM7QUFBQSxJQUNuQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0seUJBQXlCO0FBQUEsSUFDM0IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxrQ0FBa0M7QUFBQSxJQUNwQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0saUNBQWlDO0FBQUEsSUFDbkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwwQ0FBMEM7QUFBQSxJQUM1QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNkJBQTZCO0FBQUEsSUFDL0IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sc0NBQXNDO0FBQUEsSUFDeEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLG9DQUFvQztBQUFBLElBQ3RDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDZDQUE2QztBQUFBLElBQy9DLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxrQ0FBa0M7QUFBQSxJQUNwQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwyQ0FBMkM7QUFBQSxJQUM3QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0JBQStCO0FBQUEsSUFDakMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sd0NBQXdDO0FBQUEsSUFDMUMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFFQSxNQUFJLDBCQUF1QixPQUFPLE9BQU87QUFBQSxJQUNyQyxXQUFXO0FBQUEsSUFDWDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElB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TyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksS0FBSyxHQUFHO0FBQ1IsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksR0FBRyxHQUFHO0FBQ04sYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksR0FBRyxHQUFHO0FBQ04sYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksSUFBSSxHQUFHO0FBQ1AsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksT0FBTyxHQUFHO0FBQ1YsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksR0FBRyxHQUFHO0FBQ04sYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksSUFBSSxHQUFHO0FBQ1AsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksTUFBTSxHQUFHO0FBQ1QsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksT0FBTyxHQUFHO0FBQ1YsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksT0FBTyxHQUFHO0FBQ1YsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksT0FBTyxHQUFHO0FBQ1YsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksV0FBVyxHQUFHO0FBQ2QsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksS0FBSyxHQUFHO0FBQ1IsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksS0FBSyxHQUFHO0FBQ1IsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksS0FBSyxHQUFHO0FBQ1IsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLFFBQ0ksU0FBUyxHQUFHO0FBQ1osYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtB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LEtBQUssR0FBRyxTQUFTLElBQUksRUFBRSxhQUFhO0FBQUE7QUFHakcsTUFBTSxZQUFZLElBQUksV0FBVztBQUFBLElBQy9CO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0QsV0FBUyxZQUFZLENBQUMsT0FBTztBQUMzQixRQUFJLE9BQU8sU0FBUyxLQUFLLEdBQUc7QUFDMUIs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UztBQUFBLE1BQ1AseUNBQXlDLENBQUMscURBQXFEO0FBQUEsTUFDL0YsMENBQTBDLENBQUMsK0RBQStEO0FBQUEsTUFDMUcsNEJBQTRCLENBQUMsNEVBQTRFO0FBQUEsTUFDekcsb0JBQW9CLENBQUMsMERBQTBEO0FBQUEsTUFDL0UsbUJBQW1CLENBQUMseURBQXlEO0FBQUEsTUFDN0UsaUNBQWlDLENBQUMseUZBQXlGO0FBQUEsTUFDM0gseUJBQXlCLENBQUMsK0NBQStDO0FBQUEsTUFDekUsMEJBQTBCLENBQUMseURBQXlEO0FBQUEsTUFDcEYsK0JBQStCLENBQUMscURBQXFEO0FBQUEsTUFDckYsZ0NBQWdDLENBQUMsK0RBQStEO0FBQUEsTUFDaEcseUJBQXlCLENBQUMsK0NBQStDO0FBQUEsTUFDekUsMEJBQTBCLENBQUMseURBQXlEO0FBQUEsTUFDcEYsd0JBQXdCLENBQUMsdUVBQXVFO0FBQUEsTUFDaEcsd0JBQXdCLENBQUMsd0RBQXdEO0FBQUEsTUFDakYseUJBQXlCLENBQUMsdURBQXVEO0FBQUEsTUFDakYsZ0JBQWdCLENBQUMsOERBQThEO0FBQUEsTUFDL0UseUJBQXlCLENBQUMsNEZBQTRGO0FBQUEsTUFDdEgsaUJBQWlCLENBQUMsa0RBQWtEO0FBQUEsTUFDcEUsa0JBQWtCLENBQUMsNERBQTREO0FBQUEsTUFDL0UsK0JBQStCLENBQUMsZ0RBQWdEO0FBQUEsTUFDaEYsZ0NBQWdDLENBQUMsMERBQTBEO0FBQUEsTUFDM0YsbUJBQW1CLENBQUMsb0RBQW9EO0FBQUEsTUFDeEUsdUJBQXVCLENBQUMseURBQXlEO0FBQUEsTUFDakYsb0RBQW9ELENBQUMscUVBQXFFO0FBQUEsTUFDMUgsaUJBQWlCLENBQUMsbUVBQW1FO0FBQUEsTUFDckYsa0JBQWtCLENBQUMsNEVBQTRFO0FBQUEsTUFDL0YsK0JBQStCLENBQUMsc0RBQXNEO0FBQUEsTUFDdEYsZ0NBQWdDLENBQUMsZ0ZBQWdGO0FBQUEsTUFDakgseUJBQXlCLENBQUMsc0RBQXNEO0FBQUEsTUFDaEYsbURBQW1ELENBQUMsa0VBQWtF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QTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFD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O0FBQ0Msc0JBQUssd0JBQXdCO0FBQzdCLFFBQUksV0FBZ0IsVUFBSyxLQUFLLEdBQUcsY0FBYztBQUMvQyxJQUFHLGlCQUFjLFVBQVUsV0FBVyxRQUFRLENBQUMsR0FBRyxFQUFFLFVBQVUsUUFBUSxDQUFDO0FBQ3ZFLHNCQUFLLDBCQUEwQixVQUFVO0FBRXpDLHNCQUFLLHNDQUFzQztBQUMzQyxVQUFNLE9BQU8sTUFBTSxlQUFlLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO0FBQ3pHLHNCQUFLLHVDQUF1QyxJQUFJO0FBQUEsRUFDakQ7QUFFQSxvQkFBSyxpQkFBaUI7QUFDdEIsUUFBTSxpQkFBSyxVQUFVLENBQUMsV0FBVyxNQUFNLGdCQUFnQixNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFFdkUsb0JBQUssa0JBQWtCLEtBQUs7QUFFNUIsTUFBSSxXQUFXLElBQUksUUFBUSxJQUFJLE1BQU0sUUFBUTtBQUM3QyxvQkFBSywwQkFBMEIsYUFBYTtBQUU1QyxxQkFBTSwrQkFBK0I7QUFDckMsRUFBRyxVQUFPLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQztBQUFBLEdBQ2hDOyIsCiAgImRlYnVnSWQiOiAiODQyMjIxREE5NEU4RDc0QjY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0= diff --git a/init/src/report/default.ts b/init/src/report/default.ts index b474beb..a402ed1 100644 --- a/init/src/report/default.ts +++ b/init/src/report/default.ts @@ -14,12 +14,6 @@ ${renderChart("operation_type=read", metrics["read_throughput"], "Time, m", "Ope ${renderChart("operation_type=write", metrics["write_throughput"], "Time, m", "Operations")} -### Retry Attempts Per Second - -${renderChart("operation_type=read", metrics["read_attempts"], "Time, m", "Attempts")} - -${renderChart("operation_type=write", metrics["write_attempts"], "Time, m", "Attempts")} - ### 95th Percentile Latency ${renderChart("operation_type=read", metrics["read_latency_ms"], "Time, m", "Latency, ms")}